tds-map-methods 0.0.0-stage → 0.1.0

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/index.cjs ADDED
@@ -0,0 +1,286 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Hu=require("ol"),Gr=require("d3-contour"),zu=require("@turf/turf"),xo=require("dayjs"),An=require("lodash-es");function Wu(i){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(i){for(const e in i)if(e!=="default"){const n=Object.getOwnPropertyDescriptor(i,e);Object.defineProperty(t,e,n.get?n:{enumerable:!0,get:()=>i[e]})}}return t.default=i,Object.freeze(t)}const Y=Wu(zu);function ju(){}const bc={PROPERTYCHANGE:"propertychange"},yt={CHANGE:"change",ERROR:"error",LOAD:"load"};class Tc{constructor(){this.disposed=!1}dispose(){this.disposed||(this.disposed=!0,this.disposeInternal())}disposeInternal(){}}function Yu(i,t,e){let n,r;e=e||Re;let s=0,o=i.length,a=!1;for(;s<o;)n=s+(o-s>>1),r=+e(i[n],t),r<0?s=n+1:(o=n,a=!r);return a?s:~s}function Re(i,t){return i>t?1:i<t?-1:0}function Vu(i,t){return i<t?1:i>t?-1:0}function ds(i,t,e){if(i[0]<=t)return 0;const n=i.length;if(t<=i[n-1])return n-1;if(typeof e=="function"){for(let r=1;r<n;++r){const s=i[r];if(s===t)return r;if(s<t)return e(t,i[r-1],s)>0?r-1:r}return n-1}if(e>0){for(let r=1;r<n;++r)if(i[r]<t)return r-1;return n-1}if(e<0){for(let r=1;r<n;++r)if(i[r]<=t)return r;return n-1}for(let r=1;r<n;++r){if(i[r]==t)return r;if(i[r]<t)return i[r-1]-t<t-i[r]?r-1:r}return n-1}function Uu(i,t,e){for(;t<e;){const n=i[t];i[t]=i[e],i[e]=n,++t,--e}}function pe(i,t){const e=Array.isArray(t)?t:[t],n=e.length;for(let r=0;r<n;r++)i[i.length]=e[r]}function yi(i,t){const e=i.length;if(e!==t.length)return!1;for(let n=0;n<e;n++)if(i[n]!==t[n])return!1;return!0}function qu(i,t,e){const n=t||Re;return i.every(function(r,s){if(s===0)return!0;const o=n(i[s-1],r);return!(o>0||o===0)})}function Qu(){return!0}function Vr(){}function Sc(i){let t,e,n;return function(){const r=Array.prototype.slice.call(arguments);return(!e||this!==n||!yi(r,e))&&(n=this,e=r,t=i.apply(this,arguments)),t}}function Zu(i){function t(){let e;try{e=i()}catch(n){return Promise.reject(n)}return e instanceof Promise?e:Promise.resolve(e)}return t()}function Jo(i){for(const t in i)delete i[t]}function Sn(i){let t;for(t in i)return!1;return!t}class Fn{constructor(t){this.propagationStopped,this.defaultPrevented,this.type=t,this.target=null}preventDefault(){this.defaultPrevented=!0}stopPropagation(){this.propagationStopped=!0}}class gs extends Tc{constructor(t){super(),this.eventTarget_=t,this.pendingRemovals_=null,this.dispatching_=null,this.listeners_=null}addEventListener(t,e){if(!t||!e)return;const n=this.listeners_||(this.listeners_={}),r=n[t]||(n[t]=[]);r.includes(e)||r.push(e)}dispatchEvent(t){const e=typeof t=="string",n=e?t:t.type,r=this.listeners_&&this.listeners_[n];if(!r)return;const s=e?new Fn(t):t;s.target||(s.target=this.eventTarget_||this);const o=this.dispatching_||(this.dispatching_={}),a=this.pendingRemovals_||(this.pendingRemovals_={});n in o||(o[n]=0,a[n]=0),++o[n];let l;for(let h=0,c=r.length;h<c;++h)if("handleEvent"in r[h]?l=r[h].handleEvent(s):l=r[h].call(this,s),l===!1||s.propagationStopped){l=!1;break}if(--o[n]===0){let h=a[n];for(delete a[n];h--;)this.removeEventListener(n,Vr);delete o[n]}return l}disposeInternal(){this.listeners_&&Jo(this.listeners_)}getListeners(t){return this.listeners_&&this.listeners_[t]||void 0}hasListener(t){return this.listeners_?t?t in this.listeners_:Object.keys(this.listeners_).length>0:!1}removeEventListener(t,e){if(!this.listeners_)return;const n=this.listeners_[t];if(!n)return;const r=n.indexOf(e);r!==-1&&(this.pendingRemovals_&&t in this.pendingRemovals_?(n[r]=Vr,++this.pendingRemovals_[t]):(n.splice(r,1),n.length===0&&delete this.listeners_[t]))}}function $t(i,t,e,n,r){if(r){const o=e;e=function(a){return i.removeEventListener(t,e),o.call(n??this,a)}}else n&&n!==i&&(e=e.bind(n));const s={target:i,type:t,listener:e};return i.addEventListener(t,e),s}function Ur(i,t,e,n){return $t(i,t,e,n,!0)}function Ut(i){i&&i.target&&(i.target.removeEventListener(i.type,i.listener),Jo(i))}class rr extends gs{constructor(){super(),this.on=this.onInternal,this.once=this.onceInternal,this.un=this.unInternal,this.revision_=0}changed(){++this.revision_,this.dispatchEvent(yt.CHANGE)}getRevision(){return this.revision_}onInternal(t,e){if(Array.isArray(t)){const n=t.length,r=new Array(n);for(let s=0;s<n;++s)r[s]=$t(this,t[s],e);return r}return $t(this,t,e)}onceInternal(t,e){let n;if(Array.isArray(t)){const r=t.length;n=new Array(r);for(let s=0;s<r;++s)n[s]=Ur(this,t[s],e)}else n=Ur(this,t,e);return e.ol_key=n,n}unInternal(t,e){const n=e.ol_key;if(n)Ju(n);else if(Array.isArray(t))for(let r=0,s=t.length;r<s;++r)this.removeEventListener(t[r],e);else this.removeEventListener(t,e)}}rr.prototype.on;rr.prototype.once;rr.prototype.un;function Ju(i){if(Array.isArray(i))for(let t=0,e=i.length;t<e;++t)Ut(i[t]);else Ut(i)}function U(){throw new Error("Unimplemented abstract method.")}let Ku=0;function ot(i){return i.ol_uid||(i.ol_uid=String(++Ku))}class Za extends Fn{constructor(t,e,n){super(t),this.key=e,this.oldValue=n}}class Nn extends rr{constructor(t){super(),this.on,this.once,this.un,ot(this),this.values_=null,t!==void 0&&this.setProperties(t)}get(t){let e;return this.values_&&this.values_.hasOwnProperty(t)&&(e=this.values_[t]),e}getKeys(){return this.values_&&Object.keys(this.values_)||[]}getProperties(){return this.values_&&Object.assign({},this.values_)||{}}getPropertiesInternal(){return this.values_}hasProperties(){return!!this.values_}notify(t,e){let n;n=`change:${t}`,this.hasListener(n)&&this.dispatchEvent(new Za(n,t,e)),n=bc.PROPERTYCHANGE,this.hasListener(n)&&this.dispatchEvent(new Za(n,t,e))}addChangeListener(t,e){this.addEventListener(`change:${t}`,e)}removeChangeListener(t,e){this.removeEventListener(`change:${t}`,e)}set(t,e,n){const r=this.values_||(this.values_={});if(n)r[t]=e;else{const s=r[t];r[t]=e,s!==e&&this.notify(t,s)}}setProperties(t,e){for(const n in t)this.set(n,t[n],e)}applyProperties(t){t.values_&&Object.assign(this.values_||(this.values_={}),t.values_)}unset(t,e){if(this.values_&&t in this.values_){const n=this.values_[t];delete this.values_[t],Sn(this.values_)&&(this.values_=null),e||this.notify(t,n)}}}const Ot={ANIMATING:0,INTERACTING:1},ne={CENTER:"center",RESOLUTION:"resolution",ROTATION:"rotation"};function lt(i,t){if(!i)throw new Error(t)}function ft(i,t,e){return Math.min(Math.max(i,t),e)}function $u(i,t,e,n,r,s){const o=r-e,a=s-n;if(o!==0||a!==0){const l=((i-e)*o+(t-n)*a)/(o*o+a*a);l>1?(e=r,n=s):l>0&&(e+=o*l,n+=a*l)}return xn(i,t,e,n)}function xn(i,t,e,n){const r=e-i,s=n-t;return r*r+s*s}function tf(i){const t=i.length;for(let n=0;n<t;n++){let r=n,s=Math.abs(i[n][n]);for(let a=n+1;a<t;a++){const l=Math.abs(i[a][n]);l>s&&(s=l,r=a)}if(s===0)return null;const o=i[r];i[r]=i[n],i[n]=o;for(let a=n+1;a<t;a++){const l=-i[a][n]/i[n][n];for(let h=n;h<t+1;h++)n==h?i[a][h]=0:i[a][h]+=l*i[n][h]}}const e=new Array(t);for(let n=t-1;n>=0;n--){e[n]=i[n][t]/i[n][n];for(let r=n-1;r>=0;r--)i[r][t]-=i[r][n]*e[n]}return e}function Ja(i){return i*180/Math.PI}function Ze(i){return i*Math.PI/180}function Cn(i,t){const e=i%t;return e*t<0?e+t:e}function Yt(i,t,e){return i+e*(t-i)}function sr(i,t){const e=Math.pow(10,t);return Math.round(i*e)/e}function Ka(i,t){return Math.round(sr(i,t))}function wr(i,t){return Math.floor(sr(i,t))}function Ue(i,t){return Math.ceil(sr(i,t))}function Co(i,t,e){if(i>=t&&i<e)return i;const n=e-t;return((i-t)%n+n)%n+t}function $a(i,t,e){return(function(n,r,s,o,a){if(!n)return;if(!r&&!t)return n;const l=t?0:s[0]*r,h=t?0:s[1]*r,c=a?a[0]:0,u=a?a[1]:0;let f=i[0]+l/2+c,g=i[2]-l/2+c,d=i[1]+h/2+u,m=i[3]-h/2+u;f>g&&(f=(g+f)/2,g=f),d>m&&(d=(m+d)/2,m=d);let p=ft(n[0],f,g),y=ft(n[1],d,m);if(o&&e&&r){const w=30*r;p+=-w*Math.log(1+Math.max(0,f-n[0])/w)+w*Math.log(1+Math.max(0,n[0]-g)/w),y+=-w*Math.log(1+Math.max(0,d-n[1])/w)+w*Math.log(1+Math.max(0,n[1]-m)/w)}return[p,y]})}function ef(i){return i}const Ct={UNKNOWN:0,INTERSECTING:1,ABOVE:2,RIGHT:4,BELOW:8,LEFT:16};function tl(i){const t=qt();for(let e=0,n=i.length;e<n;++e)Gi(t,i[e]);return t}function ji(i,t,e){return e?(e[0]=i[0]-t,e[1]=i[1]-t,e[2]=i[2]+t,e[3]=i[3]+t,e):[i[0]-t,i[1]-t,i[2]+t,i[3]+t]}function nf(i,t){return i.slice()}function Bn(i,t,e){let n,r;return t<i[0]?n=i[0]-t:i[2]<t?n=t-i[2]:n=0,e<i[1]?r=i[1]-e:i[3]<e?r=e-i[3]:r=0,n*n+r*r}function Rn(i,t){return Ko(i,t[0],t[1])}function Se(i,t){return i[0]<=t[0]&&t[2]<=i[2]&&i[1]<=t[1]&&t[3]<=i[3]}function Ko(i,t,e){return i[0]<=t&&t<=i[2]&&i[1]<=e&&e<=i[3]}function Eo(i,t){const e=i[0],n=i[1],r=i[2],s=i[3],o=t[0],a=t[1];let l=Ct.UNKNOWN;return o<e?l=l|Ct.LEFT:o>r&&(l=l|Ct.RIGHT),a<n?l=l|Ct.BELOW:a>s&&(l=l|Ct.ABOVE),l===Ct.UNKNOWN&&(l=Ct.INTERSECTING),l}function qt(){return[1/0,1/0,-1/0,-1/0]}function $e(i,t,e,n,r){return r?(r[0]=i,r[1]=t,r[2]=e,r[3]=n,r):[i,t,e,n]}function ms(i){return $e(1/0,1/0,-1/0,-1/0,i)}function Rc(i,t){const e=i[0],n=i[1];return $e(e,n,e,n,t)}function $o(i,t,e,n,r){const s=ms(r);return _c(s,i,t,e,n)}function ps(i,t){return i[0]==t[0]&&i[2]==t[2]&&i[1]==t[1]&&i[3]==t[3]}function Pc(i,t){return t[0]<i[0]&&(i[0]=t[0]),t[2]>i[2]&&(i[2]=t[2]),t[1]<i[1]&&(i[1]=t[1]),t[3]>i[3]&&(i[3]=t[3]),i}function Gi(i,t){t[0]<i[0]&&(i[0]=t[0]),t[0]>i[2]&&(i[2]=t[0]),t[1]<i[1]&&(i[1]=t[1]),t[1]>i[3]&&(i[3]=t[1])}function _c(i,t,e,n,r){for(;e<n;e+=r)rf(i,t[e],t[e+1]);return i}function rf(i,t,e){i[0]=Math.min(i[0],t),i[1]=Math.min(i[1],e),i[2]=Math.max(i[2],t),i[3]=Math.max(i[3],e)}function Lc(i,t){let e;return e=t(ys(i)),e||(e=t(ws(i)),e)||(e=t(As(i)),e)||(e=t(Xn(i)),e)?e:!1}function vo(i){let t=0;return or(i)||(t=et(i)*pt(i)),t}function ys(i){return[i[0],i[1]]}function ws(i){return[i[2],i[1]]}function ye(i){return[(i[0]+i[2])/2,(i[1]+i[3])/2]}function sf(i,t){let e;if(t==="bottom-left")e=ys(i);else if(t==="bottom-right")e=ws(i);else if(t==="top-left")e=Xn(i);else if(t==="top-right")e=As(i);else throw new Error("Invalid corner");return e}function Ic(i,t,e,n,r){const[s,o,a,l,h,c,u,f]=Dc(i,t,e,n);return $e(Math.min(s,a,h,u),Math.min(o,l,c,f),Math.max(s,a,h,u),Math.max(o,l,c,f),r)}function Dc(i,t,e,n){const r=t*n[0]/2,s=t*n[1]/2,o=Math.cos(e),a=Math.sin(e),l=r*o,h=r*a,c=s*o,u=s*a,f=i[0],g=i[1];return[f-l+u,g-h-c,f-l-u,g-h+c,f+l-u,g+h+c,f+l+u,g+h-c,f-l+u,g-h-c]}function pt(i){return i[3]-i[1]}function Je(i,t,e){const n=e||qt();return Dt(i,t)?(i[0]>t[0]?n[0]=i[0]:n[0]=t[0],i[1]>t[1]?n[1]=i[1]:n[1]=t[1],i[2]<t[2]?n[2]=i[2]:n[2]=t[2],i[3]<t[3]?n[3]=i[3]:n[3]=t[3]):ms(n),n}function Xn(i){return[i[0],i[3]]}function As(i){return[i[2],i[3]]}function et(i){return i[2]-i[0]}function Dt(i,t){return i[0]<=t[2]&&i[2]>=t[0]&&i[1]<=t[3]&&i[3]>=t[1]}function or(i){return i[2]<i[0]||i[3]<i[1]}function of(i,t){return t?(t[0]=i[0],t[1]=i[1],t[2]=i[2],t[3]=i[3],t):i}function af(i,t){const e=(i[2]-i[0])/2*(t-1),n=(i[3]-i[1])/2*(t-1);i[0]-=e,i[2]+=e,i[1]-=n,i[3]+=n}function lf(i,t,e){let n=!1;const r=Eo(i,t),s=Eo(i,e);if(r===Ct.INTERSECTING||s===Ct.INTERSECTING)n=!0;else{const o=i[0],a=i[1],l=i[2],h=i[3],c=t[0],u=t[1],f=e[0],g=e[1],d=(g-u)/(f-c);let m,p;s&Ct.ABOVE&&!(r&Ct.ABOVE)&&(m=f-(g-h)/d,n=m>=o&&m<=l),!n&&s&Ct.RIGHT&&!(r&Ct.RIGHT)&&(p=g-(f-l)*d,n=p>=a&&p<=h),!n&&s&Ct.BELOW&&!(r&Ct.BELOW)&&(m=f-(g-a)/d,n=m>=o&&m<=l),!n&&s&Ct.LEFT&&!(r&Ct.LEFT)&&(p=g-(f-o)*d,n=p>=a&&p<=h)}return n}function Mc(i,t){const e=t.getExtent(),n=ye(i);if(t.canWrapX()&&(n[0]<e[0]||n[0]>=e[2])){const r=et(e),o=Math.floor((n[0]-e[0])/r)*r;i[0]-=o,i[2]-=o}return i}function Oc(i,t,e){if(t.canWrapX()){const n=t.getExtent();if(!isFinite(i[0])||!isFinite(i[2]))return[[n[0],i[1],n[2],i[3]]];Mc(i,t);const r=et(n);if(et(i)>r&&!e)return[[n[0],i[1],n[2],i[3]]];if(i[0]<n[0])return[[i[0]+r,i[1],n[2],i[3]],[n[0],i[1],i[2],i[3]]];if(i[2]>n[2])return[[i[0],i[1],n[2],i[3]],[n[0],i[1],i[2]-r,i[3]]]}return[i]}function Fc(i,t){const e=(""+i).split("."),n=(""+t).split(".");for(let r=0;r<Math.max(e.length,n.length);r++){const s=parseInt(e[r]||"0",10),o=parseInt(n[r]||"0",10);if(s>o)return 1;if(o>s)return-1}return 0}function cf(i,t){return i[0]+=+t[0],i[1]+=+t[1],i}function qr(i,t){let e=!0;for(let n=i.length-1;n>=0;--n)if(i[n]!=t[n]){e=!1;break}return e}function hf(i,t){const e=Math.cos(t),n=Math.sin(t),r=i[0]*e-i[1]*n,s=i[1]*e+i[0]*n;return i[0]=r,i[1]=s,i}function uf(i,t){if(t.canWrapX()){const e=et(t.getExtent()),n=ff(i,t,e);n&&(i[0]-=n*e)}return i}function ff(i,t,e){const n=t.getExtent();let r=0;return t.canWrapX()&&(i[0]<n[0]||i[0]>n[2])&&(e=e||et(n),r=Math.floor((i[0]-n[0])/e)),r}function Nc(i){return Math.pow(i,3)}function df(i){return 1-Nc(1-i)}function gf(i){return 3*i*i-2*i*i*i}const mf=63710088e-1;function el(i,t,e){e=e||mf;const n=Ze(i[1]),r=Ze(t[1]),s=(r-n)/2,o=Ze(t[0]-i[0])/2,a=Math.sin(s)*Math.sin(s)+Math.sin(o)*Math.sin(o)*Math.cos(n)*Math.cos(r);return 2*e*Math.atan2(Math.sqrt(a),Math.sqrt(1-a))}function pf(...i){console.warn(...i)}const ta={radians:6370997/(2*Math.PI),degrees:2*Math.PI*6370997/360,ft:.3048,m:1,"us-ft":1200/3937};class ea{constructor(t){this.code_=t.code,this.units_=t.units,this.extent_=t.extent!==void 0?t.extent:null,this.worldExtent_=t.worldExtent!==void 0?t.worldExtent:null,this.axisOrientation_=t.axisOrientation!==void 0?t.axisOrientation:"enu",this.global_=t.global!==void 0?t.global:!1,this.canWrapX_=!!(this.global_&&this.extent_),this.getPointResolutionFunc_=t.getPointResolution,this.defaultTileGrid_=null,this.metersPerUnit_=t.metersPerUnit}canWrapX(){return this.canWrapX_}getCode(){return this.code_}getExtent(){return this.extent_}getUnits(){return this.units_}getMetersPerUnit(){return this.metersPerUnit_||ta[this.units_]}getWorldExtent(){return this.worldExtent_}getAxisOrientation(){return this.axisOrientation_}isGlobal(){return this.global_}setGlobal(t){this.global_=t,this.canWrapX_=!!(t&&this.extent_)}getDefaultTileGrid(){return this.defaultTileGrid_}setDefaultTileGrid(t){this.defaultTileGrid_=t}setExtent(t){this.extent_=t,this.canWrapX_=!!(this.global_&&t)}setWorldExtent(t){this.worldExtent_=t}setGetPointResolution(t){this.getPointResolutionFunc_=t}getPointResolutionFunc(){return this.getPointResolutionFunc_}}const ar=6378137,ni=Math.PI*ar,yf=[-ni,-ni,ni,ni],wf=[-180,-85,180,85],Ar=ar*Math.log(Math.tan(Math.PI/2));class qn extends ea{constructor(t){super({code:t,units:"m",extent:yf,global:!0,worldExtent:wf,getPointResolution:function(e,n){return e/Math.cosh(n[1]/ar)}})}}const nl=[new qn("EPSG:3857"),new qn("EPSG:102100"),new qn("EPSG:102113"),new qn("EPSG:900913"),new qn("http://www.opengis.net/def/crs/EPSG/0/3857"),new qn("http://www.opengis.net/gml/srs/epsg.xml#3857")];function Af(i,t,e,n){const r=i.length;e=e>1?e:2,n=n??e,t===void 0&&(e>2?t=i.slice():t=new Array(r));for(let s=0;s<r;s+=n){t[s]=ni*i[s]/180;let o=ar*Math.log(Math.tan(Math.PI*(+i[s+1]+90)/360));o>Ar?o=Ar:o<-Ar&&(o=-Ar),t[s+1]=o}return t}function xf(i,t,e,n){const r=i.length;e=e>1?e:2,n=n??e,t===void 0&&(e>2?t=i.slice():t=new Array(r));for(let s=0;s<r;s+=n)t[s]=180*i[s]/ni,t[s+1]=360*Math.atan(Math.exp(i[s+1]/ar))/Math.PI-90;return t}const Cf=6378137,il=[-180,-90,180,90],Ef=Math.PI*Cf/180;class on extends ea{constructor(t,e){super({code:t,units:"degrees",extent:il,axisOrientation:e,global:!0,metersPerUnit:Ef,worldExtent:il})}}const rl=[new on("CRS:84"),new on("EPSG:4326","neu"),new on("urn:ogc:def:crs:OGC:1.3:CRS84"),new on("urn:ogc:def:crs:OGC:2:84"),new on("http://www.opengis.net/def/crs/OGC/1.3/CRS84"),new on("http://www.opengis.net/gml/srs/epsg.xml#4326","neu"),new on("http://www.opengis.net/def/crs/EPSG/0/4326","neu")];let bo={};function vf(i){return bo[i]||bo[i.replace(/urn:(x-)?ogc:def:crs:EPSG:(.*:)?(\w+)$/,"EPSG:$3")]||null}function bf(i,t){bo[i]=t}let oi={};function Yi(i,t,e){const n=i.getCode(),r=t.getCode();n in oi||(oi[n]={}),oi[n][r]=e}function Ws(i,t){return i in oi&&t in oi[i]?oi[i][t]:null}const Qr=.9996,te=.00669438,xs=te*te,Cs=xs*te,fn=te/(1-te),sl=Math.sqrt(1-te),hi=(1-sl)/(1+sl),Bc=hi*hi,na=Bc*hi,ia=na*hi,Xc=ia*hi,Gc=1-te/4-3*xs/64-5*Cs/256,Tf=3*te/8+3*xs/32+45*Cs/1024,Sf=15*xs/256+45*Cs/1024,Rf=35*Cs/3072,Pf=3/2*hi-27/32*na+269/512*Xc,_f=21/16*Bc-55/32*ia,Lf=151/96*na-417/128*Xc,If=1097/512*ia,Zr=6378137;function Df(i,t,e){const n=i-5e5,o=(e.north?t:t-1e7)/Qr/(Zr*Gc),a=o+Pf*Math.sin(2*o)+_f*Math.sin(4*o)+Lf*Math.sin(6*o)+If*Math.sin(8*o),l=Math.sin(a),h=l*l,c=Math.cos(a),u=l/c,f=u*u,g=f*f,d=1-te*h,m=Math.sqrt(1-te*h),p=Zr/m,y=(1-te)/d,w=fn*c**2,A=w*w,x=n/(p*Qr),C=x*x,v=C*x,E=v*x,T=E*x,b=T*x,R=a-u/y*(C/2-E/24*(5+3*f+10*w-4*A-9*fn))+b/720*(61+90*f+298*w+45*g-252*fn-3*A);let _=(x-v/6*(1+2*f+w)+T/120*(5-2*w+28*f-3*A+8*fn+24*g))/c;return _=Co(_+Ze(kc(e.number)),-Math.PI,Math.PI),[Ja(_),Ja(R)]}const ol=-80,al=84,Mf=-180,Of=180;function Ff(i,t,e){i=Co(i,Mf,Of),t<ol?t=ol:t>al&&(t=al);const n=Ze(t),r=Math.sin(n),s=Math.cos(n),o=r/s,a=o*o,l=a*a,h=Ze(i),c=kc(e.number),u=Ze(c),f=Zr/Math.sqrt(1-te*r**2),g=fn*s**2,d=s*Co(h-u,-Math.PI,Math.PI),m=d*d,p=m*d,y=p*d,w=y*d,A=w*d,x=Zr*(Gc*n-Tf*Math.sin(2*n)+Sf*Math.sin(4*n)-Rf*Math.sin(6*n)),C=Qr*f*(d+p/6*(1-a+g)+w/120*(5-18*a+l+72*g-58*fn))+5e5;let v=Qr*(x+f*o*(m/2+y/24*(5-a+9*g+4*g**2)+A/720*(61-58*a+l+600*g-330*fn)));return e.north||(v+=1e7),[C,v]}function kc(i){return(i-1)*6-180+3}const Nf=[/^EPSG:(\d+)$/,/^urn:ogc:def:crs:EPSG::(\d+)$/,/^http:\/\/www\.opengis\.net\/def\/crs\/EPSG\/0\/(\d+)$/];function Hc(i){let t=0;for(const r of Nf){const s=i.match(r);if(s){t=parseInt(s[1]);break}}if(!t)return null;let e=0,n=!1;return t>32700&&t<32761?e=t-32700:t>32600&&t<32661&&(n=!0,e=t-32600),e?{number:e,north:n}:null}function ll(i,t){return function(e,n,r,s){const o=e.length;r=r>1?r:2,s=s??r,n||(r>2?n=e.slice():n=new Array(o));for(let a=0;a<o;a+=s){const l=e[a],h=e[a+1],c=i(l,h,t);n[a]=c[0],n[a+1]=c[1]}return n}}function Bf(i){return Hc(i)?new ea({code:i,units:"m"}):null}function Xf(i){const t=Hc(i.getCode());return t?{forward:ll(Ff,t),inverse:ll(Df,t)}:null}const Gf=[Xf],kf=[Bf];let To=!0;function zc(i){To=!1}function ra(i,t){if(t!==void 0){for(let e=0,n=i.length;e<n;++e)t[e]=i[e];t=t}else t=i.slice();return t}function So(i){bf(i.getCode(),i),Yi(i,i,ra)}function Hf(i){i.forEach(So)}function ht(i){if(typeof i!="string")return i;const t=vf(i);if(t)return t;for(const e of kf){const n=e(i);if(n)return n}return null}function cl(i,t,e,n){i=ht(i);let r;const s=i.getPointResolutionFunc();if(s)r=s(t,e);else{const o=i.getUnits();if(o=="degrees"&&!n||n=="degrees")r=t;else{const a=oa(i,ht("EPSG:4326"));if(!a&&o!=="degrees")r=t*i.getMetersPerUnit();else{let h=[e[0]-t/2,e[1],e[0]+t/2,e[1],e[0],e[1]-t/2,e[0],e[1]+t/2];h=a(h,h,2);const c=el(h.slice(0,2),h.slice(2,4)),u=el(h.slice(4,6),h.slice(6,8));r=(c+u)/2}const l=i.getMetersPerUnit();l!==void 0&&(r/=l)}}return r}function hl(i){Hf(i),i.forEach(function(t){i.forEach(function(e){t!==e&&Yi(t,e,ra)})})}function zf(i,t,e,n){i.forEach(function(r){t.forEach(function(s){Yi(r,s,e),Yi(s,r,n)})})}function sa(i,t){return i?typeof i=="string"?ht(i):i:ht(t)}function Wf(i){return(function(t,e,n,r){const s=t.length;n=n!==void 0?n:2,r=r??n,e=e!==void 0?e:new Array(s);for(let o=0;o<s;o+=r){const a=i(t.slice(o,o+n)),l=a.length;for(let h=0,c=r;h<c;++h)e[o+h]=h>=l?t[o+h]:a[h]}return e})}function ii(i,t){return zc(),Es(i,"EPSG:4326","EPSG:3857")}function En(i,t){if(i===t)return!0;const e=i.getUnits()===t.getUnits();return(i.getCode()===t.getCode()||oa(i,t)===ra)&&e}function oa(i,t){const e=i.getCode(),n=t.getCode();let r=Ws(e,n);if(r)return r;let s=null,o=null;for(const l of Gf)s||(s=l(i)),o||(o=l(t));if(!s&&!o)return null;const a="EPSG:4326";if(o)if(s)r=js(s.inverse,o.forward);else{const l=Ws(e,a);l&&(r=js(l,o.forward))}else{const l=Ws(a,n);l&&(r=js(s.inverse,l))}return r&&(So(i),So(t),Yi(i,t,r)),r}function js(i,t){return function(e,n,r,s){return n=i(e,n,r,s),t(n,n,r,s)}}function Vi(i,t){const e=ht(i),n=ht(t);return oa(e,n)}function Es(i,t,e){const n=Vi(t,e);if(!n){const r=ht(t).getCode(),s=ht(e).getCode();throw new Error(`No transform available between ${r} and ${s}`)}return n(i,void 0,i.length)}function ul(i,t){return i}function Xe(i,t){return To&&!qr(i,[0,0])&&i[0]>=-180&&i[0]<=180&&i[1]>=-90&&i[1]<=90&&(To=!1,pf("Call useGeographic() from ol/proj once to work with [longitude, latitude] coordinates.")),i}function Wc(i,t){return i}function fe(i,t){return i}function jf(){hl(nl),hl(rl),zf(rl,nl,Af,xf)}jf();new Array(6);function Pe(){return[1,0,0,1,0,0]}function Yf(i,t){return i[0]=t[0],i[1]=t[1],i[2]=t[2],i[3]=t[3],i[4]=t[4],i[5]=t[5],i}function vt(i,t){const e=t[0],n=t[1];return t[0]=i[0]*e+i[2]*n+i[4],t[1]=i[1]*e+i[3]*n+i[5],t}function Ie(i,t,e,n,r,s,o,a){const l=Math.sin(s),h=Math.cos(s);return i[0]=n*h,i[1]=r*l,i[2]=-n*l,i[3]=r*h,i[4]=o*n*h-a*n*l+t,i[5]=o*r*l+a*r*h+e,i}function Vf(i,t){const e=Uf(t);lt(e!==0,"Transformation matrix cannot be inverted");const n=t[0],r=t[1],s=t[2],o=t[3],a=t[4],l=t[5];return i[0]=o/e,i[1]=-r/e,i[2]=-s/e,i[3]=n/e,i[4]=(s*l-o*a)/e,i[5]=-(n*l-r*a)/e,i}function Uf(i){return i[0]*i[3]-i[1]*i[2]}const qf=[1e5,1e5,1e5,1e5,2,2];function Qf(i){return"matrix("+i.join(", ")+")"}function fl(i){return i.substring(7,i.length-1).split(",").map(parseFloat)}function Zf(i,t){const e=fl(i),n=fl(t);for(let r=0;r<6;++r)if(Math.round((e[r]-n[r])*qf[r])!==0)return!1;return!0}function Ke(i,t,e,n,r,s,o){s=s||[],o=o||2;let a=0;for(let l=t;l<e;l+=n){const h=i[l],c=i[l+1];s[a++]=r[0]*h+r[2]*c+r[4],s[a++]=r[1]*h+r[3]*c+r[5];for(let u=2;u<o;u++)s[a++]=i[l+u]}return s&&s.length!=a&&(s.length=a),s}function jc(i,t,e,n,r,s,o){o=o||[];const a=Math.cos(r),l=Math.sin(r),h=s[0],c=s[1];let u=0;for(let f=t;f<e;f+=n){const g=i[f]-h,d=i[f+1]-c;o[u++]=h+g*a-d*l,o[u++]=c+g*l+d*a;for(let m=f+2;m<f+n;++m)o[u++]=i[m]}return o&&o.length!=u&&(o.length=u),o}function Jf(i,t,e,n,r,s,o,a){a=a||[];const l=o[0],h=o[1];let c=0;for(let u=t;u<e;u+=n){const f=i[u]-l,g=i[u+1]-h;a[c++]=l+r*f,a[c++]=h+s*g;for(let d=u+2;d<u+n;++d)a[c++]=i[d]}return a&&a.length!=c&&(a.length=c),a}function Kf(i,t,e,n,r,s,o){o=o||[];let a=0;for(let l=t;l<e;l+=n){o[a++]=i[l]+r,o[a++]=i[l+1]+s;for(let h=l+2;h<l+n;++h)o[a++]=i[h]}return o&&o.length!=a&&(o.length=a),o}const dl=Pe(),$f=[NaN,NaN];class Yc extends Nn{constructor(){super(),this.extent_=qt(),this.extentRevision_=-1,this.simplifiedGeometryMaxMinSquaredTolerance=0,this.simplifiedGeometryRevision=0,this.simplifyTransformedInternal=Sc((t,e,n)=>{if(!n)return this.getSimplifiedGeometry(e);const r=this.clone();return r.applyTransform(n),r.getSimplifiedGeometry(e)})}simplifyTransformed(t,e){return this.simplifyTransformedInternal(this.getRevision(),t,e)}clone(){return U()}closestPointXY(t,e,n,r){return U()}containsXY(t,e){return this.closestPointXY(t,e,$f,Number.MIN_VALUE)===0}getClosestPoint(t,e){return e=e||[NaN,NaN],this.closestPointXY(t[0],t[1],e,1/0),e}intersectsCoordinate(t){return this.containsXY(t[0],t[1])}computeExtent(t){return U()}getExtent(t){if(this.extentRevision_!=this.getRevision()){const e=this.computeExtent(this.extent_);(isNaN(e[0])||isNaN(e[1]))&&ms(e),this.extentRevision_=this.getRevision()}return of(this.extent_,t)}rotate(t,e){U()}scale(t,e,n){U()}simplify(t){return this.getSimplifiedGeometry(t*t)}getSimplifiedGeometry(t){return U()}getType(){return U()}applyTransform(t){U()}intersectsExtent(t){return U()}translate(t,e){U()}transform(t,e){const n=ht(t),r=n.getUnits()=="tile-pixels"?function(s,o,a){const l=n.getExtent(),h=n.getWorldExtent(),c=pt(h)/pt(l);Ie(dl,h[0],h[3],c,-c,0,0,0);const u=Ke(s,0,s.length,a,dl,o),f=Vi(n,e);return f?f(u,u,a):u}:Vi(n,e);return this.applyTransform(r),this}}class Gn extends Yc{constructor(){super(),this.layout="XY",this.stride=2,this.flatCoordinates}computeExtent(t){return $o(this.flatCoordinates,0,this.flatCoordinates.length,this.stride,t)}getCoordinates(){return U()}getFirstCoordinate(){return this.flatCoordinates.slice(0,this.stride)}getFlatCoordinates(){return this.flatCoordinates}getLastCoordinate(){return this.flatCoordinates.slice(this.flatCoordinates.length-this.stride)}getLayout(){return this.layout}getSimplifiedGeometry(t){if(this.simplifiedGeometryRevision!==this.getRevision()&&(this.simplifiedGeometryMaxMinSquaredTolerance=0,this.simplifiedGeometryRevision=this.getRevision()),t<0||this.simplifiedGeometryMaxMinSquaredTolerance!==0&&t<=this.simplifiedGeometryMaxMinSquaredTolerance)return this;const e=this.getSimplifiedGeometryInternal(t);return e.getFlatCoordinates().length<this.flatCoordinates.length?e:(this.simplifiedGeometryMaxMinSquaredTolerance=t,this)}getSimplifiedGeometryInternal(t){return this}getStride(){return this.stride}setFlatCoordinates(t,e){this.stride=gl(t),this.layout=t,this.flatCoordinates=e}setCoordinates(t,e){U()}setLayout(t,e,n){let r;if(t)r=gl(t);else{for(let s=0;s<n;++s){if(e.length===0){this.layout="XY",this.stride=2;return}e=e[0]}r=e.length,t=kn(r)}this.layout=t,this.stride=r}applyTransform(t){this.flatCoordinates&&(t(this.flatCoordinates,this.flatCoordinates,this.layout.startsWith("XYZ")?3:2,this.stride),this.changed())}rotate(t,e){const n=this.getFlatCoordinates();if(n){const r=this.getStride();jc(n,0,n.length,r,t,e,n),this.changed()}}scale(t,e,n){e===void 0&&(e=t),n||(n=ye(this.getExtent()));const r=this.getFlatCoordinates();if(r){const s=this.getStride();Jf(r,0,r.length,s,t,e,n,r),this.changed()}}translate(t,e){const n=this.getFlatCoordinates();if(n){const r=this.getStride();Kf(n,0,n.length,r,t,e,n),this.changed()}}}function kn(i){let t;return i==2?t="XY":i==3?t="XYZ":i==4&&(t="XYZM"),t}function gl(i){let t;return i=="XY"?t=2:i=="XYZ"||i=="XYM"?t=3:i=="XYZM"&&(t=4),t}function td(i,t,e){const n=i.getFlatCoordinates();if(!n)return null;const r=i.getStride();return Ke(n,0,n.length,r,t,e)}function Vc(i,t,e,n){let r=0;const s=i[e-n],o=i[e-n+1];let a=0,l=0;for(;t<e;t+=n){const h=i[t]-s,c=i[t+1]-o;r+=l*h-a*c,a=h,l=c}return r/2}function Uc(i,t,e,n){let r=0;for(let s=0,o=e.length;s<o;++s){const a=e[s];r+=Vc(i,t,a,n),t=a}return r}function ed(i,t,e,n){let r=0;for(let s=0,o=e.length;s<o;++s){const a=e[s];r+=Uc(i,t,a,n),t=a[a.length-1]}return r}function ml(i,t,e,n,r,s,o){const a=i[t],l=i[t+1],h=i[e]-a,c=i[e+1]-l;let u;if(h===0&&c===0)u=t;else{const f=((r-a)*h+(s-l)*c)/(h*h+c*c);if(f>1)u=e;else if(f>0){for(let g=0;g<n;++g)o[g]=Yt(i[t+g],i[e+g],f);o.length=n;return}else u=t}for(let f=0;f<n;++f)o[f]=i[u+f];o.length=n}function aa(i,t,e,n,r){let s=i[t],o=i[t+1];for(t+=n;t<e;t+=n){const a=i[t],l=i[t+1],h=xn(s,o,a,l);h>r&&(r=h),s=a,o=l}return r}function la(i,t,e,n,r){for(let s=0,o=e.length;s<o;++s){const a=e[s];r=aa(i,t,a,n,r),t=a}return r}function nd(i,t,e,n,r){for(let s=0,o=e.length;s<o;++s){const a=e[s];r=la(i,t,a,n,r),t=a[a.length-1]}return r}function ca(i,t,e,n,r,s,o,a,l,h,c){if(t==e)return h;let u,f;if(r===0){if(f=xn(o,a,i[t],i[t+1]),f<h){for(u=0;u<n;++u)l[u]=i[t+u];return l.length=n,f}return h}c=c||[NaN,NaN];let g=t+n;for(;g<e;)if(ml(i,g-n,g,n,o,a,c),f=xn(o,a,c[0],c[1]),f<h){for(h=f,u=0;u<n;++u)l[u]=c[u];l.length=n,g+=n}else g+=n*Math.max((Math.sqrt(f)-Math.sqrt(h))/r|0,1);if(s&&(ml(i,e-n,t,n,o,a,c),f=xn(o,a,c[0],c[1]),f<h)){for(h=f,u=0;u<n;++u)l[u]=c[u];l.length=n}return h}function ha(i,t,e,n,r,s,o,a,l,h,c){c=c||[NaN,NaN];for(let u=0,f=e.length;u<f;++u){const g=e[u];h=ca(i,t,g,n,r,s,o,a,l,h,c),t=g}return h}function id(i,t,e,n,r,s,o,a,l,h,c){c=c||[NaN,NaN];for(let u=0,f=e.length;u<f;++u){const g=e[u];h=ha(i,t,g,n,r,s,o,a,l,h,c),t=g[g.length-1]}return h}function rd(i,t,e,n){for(let r=0,s=e.length;r<s;++r)i[t++]=e[r];return t}function vs(i,t,e,n){for(let r=0,s=e.length;r<s;++r){const o=e[r];for(let a=0;a<n;++a)i[t++]=o[a]}return t}function lr(i,t,e,n,r){r=r||[];let s=0;for(let o=0,a=e.length;o<a;++o){const l=vs(i,t,e[o],n);r[s++]=l,t=l}return r.length=s,r}function qc(i,t,e,n,r){r=r||[];let s=0;for(let o=0,a=e.length;o<a;++o){const l=lr(i,t,e[o],n,r[s]);l.length===0&&(l[0]=t),r[s++]=l,t=l[l.length-1]}return r.length=s,r}function qe(i,t,e,n,r){r=r!==void 0?r:[];let s=0;for(let o=t;o<e;o+=n)r[s++]=i.slice(o,o+n);return r.length=s,r}function Ui(i,t,e,n,r){r=r!==void 0?r:[];let s=0;for(let o=0,a=e.length;o<a;++o){const l=e[o];r[s++]=qe(i,t,l,n,r[s]),t=l}return r.length=s,r}function Ro(i,t,e,n,r){r=r!==void 0?r:[];let s=0;for(let o=0,a=e.length;o<a;++o){const l=e[o];r[s++]=l.length===1&&l[0]===t?[]:Ui(i,t,l,n,r[s]),t=l[l.length-1]}return r.length=s,r}function bs(i,t,e,n,r,s,o){const a=(e-t)/n;if(a<3){for(;t<e;t+=n)s[o++]=i[t],s[o++]=i[t+1];return o}const l=new Array(a);l[0]=1,l[a-1]=1;const h=[t,e-n];let c=0;for(;h.length>0;){const u=h.pop(),f=h.pop();let g=0;const d=i[f],m=i[f+1],p=i[u],y=i[u+1];for(let w=f+n;w<u;w+=n){const A=i[w],x=i[w+1],C=$u(A,x,d,m,p,y);C>g&&(c=w,g=C)}g>r&&(l[(c-t)/n]=1,f+n<c&&h.push(f,c),c+n<u&&h.push(c,u))}for(let u=0;u<a;++u)l[u]&&(s[o++]=i[t+u*n],s[o++]=i[t+u*n+1]);return o}function Qc(i,t,e,n,r,s,o,a){for(let l=0,h=e.length;l<h;++l){const c=e[l];o=bs(i,t,c,n,r,s,o),a.push(o),t=c}return o}function ln(i,t){return t*Math.round(i/t)}function sd(i,t,e,n,r,s,o){if(t==e)return o;let a=ln(i[t],r),l=ln(i[t+1],r);t+=n,s[o++]=a,s[o++]=l;let h,c;do if(h=ln(i[t],r),c=ln(i[t+1],r),t+=n,t==e)return s[o++]=h,s[o++]=c,o;while(h==a&&c==l);for(;t<e;){const u=ln(i[t],r),f=ln(i[t+1],r);if(t+=n,u==h&&f==c)continue;const g=h-a,d=c-l,m=u-a,p=f-l;if(g*p==d*m&&(g<0&&m<g||g==m||g>0&&m>g)&&(d<0&&p<d||d==p||d>0&&p>d)){h=u,c=f;continue}s[o++]=h,s[o++]=c,a=h,l=c,h=u,c=f}return s[o++]=h,s[o++]=c,o}function ua(i,t,e,n,r,s,o,a){for(let l=0,h=e.length;l<h;++l){const c=e[l];o=sd(i,t,c,n,r,s,o),a.push(o),t=c}return o}function od(i,t,e,n,r,s,o,a){for(let l=0,h=e.length;l<h;++l){const c=e[l],u=[];o=ua(i,t,c,n,r,s,o,u),a.push(u),t=c[c.length-1]}return o}class qi extends Gn{constructor(t,e){super(),this.maxDelta_=-1,this.maxDeltaRevision_=-1,e!==void 0&&!Array.isArray(t[0])?this.setFlatCoordinates(e,t):this.setCoordinates(t,e)}clone(){return new qi(this.flatCoordinates.slice(),this.layout)}closestPointXY(t,e,n,r){return r<Bn(this.getExtent(),t,e)?r:(this.maxDeltaRevision_!=this.getRevision()&&(this.maxDelta_=Math.sqrt(aa(this.flatCoordinates,0,this.flatCoordinates.length,this.stride,0)),this.maxDeltaRevision_=this.getRevision()),ca(this.flatCoordinates,0,this.flatCoordinates.length,this.stride,this.maxDelta_,!0,t,e,n,r))}getArea(){return Vc(this.flatCoordinates,0,this.flatCoordinates.length,this.stride)}getCoordinates(){return qe(this.flatCoordinates,0,this.flatCoordinates.length,this.stride)}getSimplifiedGeometryInternal(t){const e=[];return e.length=bs(this.flatCoordinates,0,this.flatCoordinates.length,this.stride,t,e,0),new qi(e,"XY")}getType(){return"LinearRing"}intersectsExtent(t){return!1}setCoordinates(t,e){this.setLayout(e,t,1),this.flatCoordinates||(this.flatCoordinates=[]),this.flatCoordinates.length=vs(this.flatCoordinates,0,t,this.stride),this.changed()}}class tn extends Gn{constructor(t,e){super(),this.setCoordinates(t,e)}clone(){const t=new tn(this.flatCoordinates.slice(),this.layout);return t.applyProperties(this),t}closestPointXY(t,e,n,r){const s=this.flatCoordinates,o=xn(t,e,s[0],s[1]);if(o<r){const a=this.stride;for(let l=0;l<a;++l)n[l]=s[l];return n.length=a,o}return r}getCoordinates(){return this.flatCoordinates.slice()}computeExtent(t){return Rc(this.flatCoordinates,t)}getType(){return"Point"}intersectsExtent(t){return Ko(t,this.flatCoordinates[0],this.flatCoordinates[1])}setCoordinates(t,e){this.setLayout(e,t,0),this.flatCoordinates||(this.flatCoordinates=[]),this.flatCoordinates.length=rd(this.flatCoordinates,0,t,this.stride),this.changed()}}function ad(i,t,e,n,r){return!Lc(r,function(o){return!dn(i,t,e,n,o[0],o[1])})}function dn(i,t,e,n,r,s){let o=0,a=i[e-n],l=i[e-n+1];for(;t<e;t+=n){const h=i[t],c=i[t+1];l<=s?c>s&&(h-a)*(s-l)-(r-a)*(c-l)>0&&o++:c<=s&&(h-a)*(s-l)-(r-a)*(c-l)<0&&o--,a=h,l=c}return o!==0}function fa(i,t,e,n,r,s){if(e.length===0||!dn(i,t,e[0],n,r,s))return!1;for(let o=1,a=e.length;o<a;++o)if(dn(i,e[o-1],e[o],n,r,s))return!1;return!0}function ld(i,t,e,n,r,s){if(e.length===0)return!1;for(let o=0,a=e.length;o<a;++o){const l=e[o];if(fa(i,t,l,n,r,s))return!0;t=l[l.length-1]}return!1}function da(i,t,e,n,r,s,o){let a,l,h,c,u,f,g;const d=r[s+1],m=[];for(let w=0,A=e.length;w<A;++w){const x=e[w];for(c=i[x-n],f=i[x-n+1],a=t;a<x;a+=n)u=i[a],g=i[a+1],(d<=f&&g<=d||f<=d&&d<=g)&&(h=(d-f)/(g-f)*(u-c)+c,m.push(h)),c=u,f=g}let p=NaN,y=-1/0;for(m.sort(Re),c=m[0],a=1,l=m.length;a<l;++a){u=m[a];const w=Math.abs(u-c);w>y&&(h=(c+u)/2,fa(i,t,e,n,h,d)&&(p=h,y=w)),c=u}return isNaN(p)&&(p=r[s]),o?(o.push(p,d,y),o):[p,d,y]}function Zc(i,t,e,n,r){let s=[];for(let o=0,a=e.length;o<a;++o){const l=e[o];s=da(i,t,l,n,r,2*o,s),t=l[l.length-1]}return s}function Jc(i,t,e,n,r){let s;for(t+=n;t<e;t+=n)if(s=r(i.slice(t-n,t),i.slice(t,t+n)),s)return s;return!1}function Ts(i,t,e,n,r,s){return s=s??_c(qt(),i,t,e,n),Dt(r,s)?s[0]>=r[0]&&s[2]<=r[2]||s[1]>=r[1]&&s[3]<=r[3]?!0:Jc(i,t,e,n,function(o,a){return lf(r,o,a)}):!1}function cd(i,t,e,n,r){for(let s=0,o=e.length;s<o;++s){if(Ts(i,t,e[s],n,r))return!0;t=e[s]}return!1}function Kc(i,t,e,n,r){return!!(Ts(i,t,e,n,r)||dn(i,t,e,n,r[0],r[1])||dn(i,t,e,n,r[0],r[3])||dn(i,t,e,n,r[2],r[1])||dn(i,t,e,n,r[2],r[3]))}function $c(i,t,e,n,r){if(!Kc(i,t,e[0],n,r))return!1;if(e.length===1)return!0;for(let s=1,o=e.length;s<o;++s)if(ad(i,e[s-1],e[s],n,r)&&!Ts(i,e[s-1],e[s],n,r))return!1;return!0}function hd(i,t,e,n,r){for(let s=0,o=e.length;s<o;++s){const a=e[s];if($c(i,t,a,n,r))return!0;t=a[a.length-1]}return!1}function ud(i,t,e,n){for(;t<e-n;){for(let r=0;r<n;++r){const s=i[t+r];i[t+r]=i[e-n+r],i[e-n+r]=s}t+=n,e-=n}}function ga(i,t,e,n){let r=0,s=i[e-n],o=i[e-n+1];for(;t<e;t+=n){const a=i[t],l=i[t+1];r+=(a-s)*(l+o),s=a,o=l}return r===0?void 0:r>0}function ma(i,t,e,n,r){r=r!==void 0?r:!1;for(let s=0,o=e.length;s<o;++s){const a=e[s],l=ga(i,t,a,n);if(s===0){if(r&&l||!r&&!l)return!1}else if(r&&!l||!r&&l)return!1;t=a}return!0}function th(i,t,e,n,r){for(let s=0,o=e.length;s<o;++s){const a=e[s];if(!ma(i,t,a,n,r))return!1;a.length&&(t=a[a.length-1])}return!0}function Jr(i,t,e,n,r){r=r!==void 0?r:!1;for(let s=0,o=e.length;s<o;++s){const a=e[s],l=ga(i,t,a,n);(s===0?r&&l||!r&&!l:r&&!l||!r&&l)&&ud(i,t,a,n),t=a}return t}function Po(i,t,e,n,r){for(let s=0,o=e.length;s<o;++s)t=Jr(i,t,e[s],n,r);return t}function fd(i,t){const e=[];let n=0,r=0,s;for(let o=0,a=t.length;o<a;++o){const l=t[o],h=ga(i,n,l,2);if(s===void 0&&(s=h),h===s)e.push(t.slice(r,o+1));else{if(e.length===0)continue;e[e.length-1].push(t[r])}r=o+1,n=l}return e}class Pn extends Gn{constructor(t,e,n){super(),this.ends_=[],this.flatInteriorPointRevision_=-1,this.flatInteriorPoint_=null,this.maxDelta_=-1,this.maxDeltaRevision_=-1,this.orientedRevision_=-1,this.orientedFlatCoordinates_=null,e!==void 0&&n?(this.setFlatCoordinates(e,t),this.ends_=n):this.setCoordinates(t,e)}appendLinearRing(t){this.flatCoordinates?pe(this.flatCoordinates,t.getFlatCoordinates()):this.flatCoordinates=t.getFlatCoordinates().slice(),this.ends_.push(this.flatCoordinates.length),this.changed()}clone(){const t=new Pn(this.flatCoordinates.slice(),this.layout,this.ends_.slice());return t.applyProperties(this),t}closestPointXY(t,e,n,r){return r<Bn(this.getExtent(),t,e)?r:(this.maxDeltaRevision_!=this.getRevision()&&(this.maxDelta_=Math.sqrt(la(this.flatCoordinates,0,this.ends_,this.stride,0)),this.maxDeltaRevision_=this.getRevision()),ha(this.flatCoordinates,0,this.ends_,this.stride,this.maxDelta_,!0,t,e,n,r))}containsXY(t,e){return fa(this.getOrientedFlatCoordinates(),0,this.ends_,this.stride,t,e)}getArea(){return Uc(this.getOrientedFlatCoordinates(),0,this.ends_,this.stride)}getCoordinates(t){let e;return t!==void 0?(e=this.getOrientedFlatCoordinates().slice(),Jr(e,0,this.ends_,this.stride,t)):e=this.flatCoordinates,Ui(e,0,this.ends_,this.stride)}getEnds(){return this.ends_}getFlatInteriorPoint(){if(this.flatInteriorPointRevision_!=this.getRevision()){const t=ye(this.getExtent());this.flatInteriorPoint_=da(this.getOrientedFlatCoordinates(),0,this.ends_,this.stride,t,0),this.flatInteriorPointRevision_=this.getRevision()}return this.flatInteriorPoint_}getInteriorPoint(){return new tn(this.getFlatInteriorPoint(),"XYM")}getLinearRingCount(){return this.ends_.length}getLinearRing(t){return t<0||this.ends_.length<=t?null:new qi(this.flatCoordinates.slice(t===0?0:this.ends_[t-1],this.ends_[t]),this.layout)}getLinearRings(){const t=this.layout,e=this.flatCoordinates,n=this.ends_,r=[];let s=0;for(let o=0,a=n.length;o<a;++o){const l=n[o],h=new qi(e.slice(s,l),t);r.push(h),s=l}return r}getOrientedFlatCoordinates(){if(this.orientedRevision_!=this.getRevision()){const t=this.flatCoordinates;ma(t,0,this.ends_,this.stride)?this.orientedFlatCoordinates_=t:(this.orientedFlatCoordinates_=t.slice(),this.orientedFlatCoordinates_.length=Jr(this.orientedFlatCoordinates_,0,this.ends_,this.stride)),this.orientedRevision_=this.getRevision()}return this.orientedFlatCoordinates_}getSimplifiedGeometryInternal(t){const e=[],n=[];return e.length=ua(this.flatCoordinates,0,this.ends_,this.stride,Math.sqrt(t),e,0,n),new Pn(e,"XY",n)}getType(){return"Polygon"}intersectsExtent(t){return $c(this.getOrientedFlatCoordinates(),0,this.ends_,this.stride,t)}setCoordinates(t,e){this.setLayout(e,t,2),this.flatCoordinates||(this.flatCoordinates=[]);const n=lr(this.flatCoordinates,0,t,this.stride,this.ends_);this.flatCoordinates.length=n.length===0?0:n[n.length-1],this.changed()}}function pl(i){if(or(i))throw new Error("Cannot create polygon from empty extent");const t=i[0],e=i[1],n=i[2],r=i[3],s=[t,e,t,r,n,r,n,e,t,e];return new Pn(s,"XY",[s.length])}function pa(i,t,e,n){const r=et(t)/e[0],s=pt(t)/e[1];return n?Math.min(i,Math.max(r,s)):Math.min(i,Math.min(r,s))}function ya(i,t,e){let n=Math.min(i,t);const r=50;return n*=Math.log(1+r*Math.max(0,i/t-1))/r+1,e&&(n=Math.max(n,e),n/=Math.log(1+r*Math.max(0,e/i-1))/r+1),ft(n,e/2,t*2)}function dd(i,t,e,n){return t=t!==void 0?t:!0,(function(r,s,o,a){if(r!==void 0){const l=i[0],h=i[i.length-1],c=e?pa(l,e,o,n):l;if(a)return t?ya(r,c,h):ft(r,h,c);const u=Math.min(c,r),f=Math.floor(ds(i,u,s));return i[f]>c&&f<i.length-1?i[f+1]:i[f]}})}function gd(i,t,e,n,r,s){return n=n!==void 0?n:!0,e=e!==void 0?e:0,(function(o,a,l,h){if(o!==void 0){const c=r?pa(t,r,l,s):t;if(h)return n?ya(o,c,e):ft(o,e,c);const u=1e-9,f=Math.ceil(Math.log(t/c)/Math.log(i)-u),g=-a*(.5-u)+.5,d=Math.min(c,o),m=Math.floor(Math.log(t/d)/Math.log(i)+g),p=Math.max(f,m),y=t/Math.pow(i,p);return ft(y,e,c)}})}function yl(i,t,e,n,r){return e=e!==void 0?e:!0,(function(s,o,a,l){if(s!==void 0){const h=n?pa(i,n,a,r):i;return!e||!l?ft(s,t,h):ya(s,h,t)}})}function md(i){if(i!==void 0)return 0}function wl(i){if(i!==void 0)return i}function pd(i){const t=2*Math.PI/i;return(function(e,n){if(n)return e;if(e!==void 0)return e=Math.floor(e/t+.5)*t,e})}function yd(i){const t=Ze(5);return(function(e,n){return n||e===void 0?e:Math.abs(e)<=t?0:e})}const wd=42,wa=256,Ys=0;class _o extends Nn{constructor(t){super(),this.on,this.once,this.un,t=Object.assign({},t),this.hints_=[0,0],this.animations_=[],this.updateAnimationKey_,this.projection_=sa(t.projection,"EPSG:3857"),this.viewportSize_=[100,100],this.targetCenter_=null,this.targetResolution_,this.targetRotation_,this.nextCenter_=null,this.nextResolution_,this.nextRotation_,this.cancelAnchor_=void 0,t.projection&&zc(),t.center&&(t.center=Xe(t.center,this.projection_)),t.extent&&(t.extent=fe(t.extent,this.projection_)),this.applyOptions_(t)}applyOptions_(t){const e=Object.assign({},t);for(const a in ne)delete e[a];this.setProperties(e,!0);const n=xd(t);this.maxResolution_=n.maxResolution,this.minResolution_=n.minResolution,this.zoomFactor_=n.zoomFactor,this.resolutions_=t.resolutions,this.padding_=t.padding,this.minZoom_=n.minZoom;const r=Ad(t),s=n.constraint,o=Cd(t);this.constraints_={center:r,resolution:s,rotation:o},this.setRotation(t.rotation!==void 0?t.rotation:0),this.setCenterInternal(t.center!==void 0?t.center:null),t.resolution!==void 0?this.setResolution(t.resolution):t.zoom!==void 0&&this.setZoom(t.zoom)}get padding(){return this.padding_}set padding(t){let e=this.padding_;this.padding_=t;const n=this.getCenterInternal();if(n){const r=t||[0,0,0,0];e=e||[0,0,0,0];const s=this.getResolution(),o=s/2*(r[3]-e[3]+e[1]-r[1]),a=s/2*(r[0]-e[0]+e[2]-r[2]);this.setCenterInternal([n[0]+o,n[1]-a])}}getUpdatedOptions_(t){const e=this.getProperties();return e.resolution!==void 0?e.resolution=this.getResolution():e.zoom=this.getZoom(),e.center=this.getCenterInternal(),e.rotation=this.getRotation(),Object.assign({},e,t)}animate(t){this.isDef()&&!this.getAnimating()&&this.resolveConstraints(0);const e=new Array(arguments.length);for(let n=0;n<e.length;++n){let r=arguments[n];r.center&&(r=Object.assign({},r),r.center=Xe(r.center,this.getProjection())),r.anchor&&(r=Object.assign({},r),r.anchor=Xe(r.anchor,this.getProjection())),e[n]=r}this.animateInternal.apply(this,e)}animateInternal(t){let e=arguments.length,n;e>1&&typeof arguments[e-1]=="function"&&(n=arguments[e-1],--e);let r=0;for(;r<e&&!this.isDef();++r){const c=arguments[r];c.center&&this.setCenterInternal(c.center),c.zoom!==void 0?this.setZoom(c.zoom):c.resolution&&this.setResolution(c.resolution),c.rotation!==void 0&&this.setRotation(c.rotation)}if(r===e){n&&xr(n,!0);return}let s=Date.now(),o=this.targetCenter_.slice(),a=this.targetResolution_,l=this.targetRotation_;const h=[];for(;r<e;++r){const c=arguments[r],u={start:s,complete:!1,anchor:c.anchor,duration:c.duration!==void 0?c.duration:1e3,easing:c.easing||gf,callback:n};if(c.center&&(u.sourceCenter=o,u.targetCenter=c.center.slice(),o=u.targetCenter),c.zoom!==void 0?(u.sourceResolution=a,u.targetResolution=this.getResolutionForZoom(c.zoom),a=u.targetResolution):c.resolution&&(u.sourceResolution=a,u.targetResolution=c.resolution,a=u.targetResolution),c.rotation!==void 0){u.sourceRotation=l;const f=Cn(c.rotation-l+Math.PI,2*Math.PI)-Math.PI;u.targetRotation=l+f,l=u.targetRotation}Ed(u)?u.complete=!0:s+=u.duration,h.push(u)}this.animations_.push(h),this.setHint(Ot.ANIMATING,1),this.updateAnimations_()}getAnimating(){return this.hints_[Ot.ANIMATING]>0}getInteracting(){return this.hints_[Ot.INTERACTING]>0}cancelAnimations(){this.setHint(Ot.ANIMATING,-this.hints_[Ot.ANIMATING]);let t;for(let e=0,n=this.animations_.length;e<n;++e){const r=this.animations_[e];if(r[0].callback&&xr(r[0].callback,!1),!t)for(let s=0,o=r.length;s<o;++s){const a=r[s];if(!a.complete){t=a.anchor;break}}}this.animations_.length=0,this.cancelAnchor_=t,this.nextCenter_=null,this.nextResolution_=NaN,this.nextRotation_=NaN}updateAnimations_(){if(this.updateAnimationKey_!==void 0&&(cancelAnimationFrame(this.updateAnimationKey_),this.updateAnimationKey_=void 0),!this.getAnimating())return;const t=Date.now();let e=!1;for(let n=this.animations_.length-1;n>=0;--n){const r=this.animations_[n];let s=!0;for(let o=0,a=r.length;o<a;++o){const l=r[o];if(l.complete)continue;const h=t-l.start;let c=l.duration>0?h/l.duration:1;c>=1?(l.complete=!0,c=1):s=!1;const u=l.easing(c);if(l.sourceCenter){const f=l.sourceCenter[0],g=l.sourceCenter[1],d=l.targetCenter[0],m=l.targetCenter[1];this.nextCenter_=l.targetCenter;const p=f+u*(d-f),y=g+u*(m-g);this.targetCenter_=[p,y]}if(l.sourceResolution&&l.targetResolution){const f=u===1?l.targetResolution:l.sourceResolution+u*(l.targetResolution-l.sourceResolution);if(l.anchor){const g=this.getViewportSize_(this.getRotation()),d=this.constraints_.resolution(f,0,g,!0);this.targetCenter_=this.calculateCenterZoom(d,l.anchor)}this.nextResolution_=l.targetResolution,this.targetResolution_=f,this.applyTargetState_(!0)}if(l.sourceRotation!==void 0&&l.targetRotation!==void 0){const f=u===1?Cn(l.targetRotation+Math.PI,2*Math.PI)-Math.PI:l.sourceRotation+u*(l.targetRotation-l.sourceRotation);if(l.anchor){const g=this.constraints_.rotation(f,!0);this.targetCenter_=this.calculateCenterRotate(g,l.anchor)}this.nextRotation_=l.targetRotation,this.targetRotation_=f}if(this.applyTargetState_(!0),e=!0,!l.complete)break}if(s){this.animations_[n]=null,this.setHint(Ot.ANIMATING,-1),this.nextCenter_=null,this.nextResolution_=NaN,this.nextRotation_=NaN;const o=r[0].callback;o&&xr(o,!0)}}this.animations_=this.animations_.filter(Boolean),e&&this.updateAnimationKey_===void 0&&(this.updateAnimationKey_=requestAnimationFrame(this.updateAnimations_.bind(this)))}calculateCenterRotate(t,e){let n;const r=this.getCenterInternal();return r!==void 0&&(n=[r[0]-e[0],r[1]-e[1]],hf(n,t-this.getRotation()),cf(n,e)),n}calculateCenterZoom(t,e){let n;const r=this.getCenterInternal(),s=this.getResolution();if(r!==void 0&&s!==void 0){const o=e[0]-t*(e[0]-r[0])/s,a=e[1]-t*(e[1]-r[1])/s;n=[o,a]}return n}getViewportSize_(t){const e=this.viewportSize_;if(t){const n=e[0],r=e[1];return[Math.abs(n*Math.cos(t))+Math.abs(r*Math.sin(t)),Math.abs(n*Math.sin(t))+Math.abs(r*Math.cos(t))]}return e}setViewportSize(t){this.viewportSize_=Array.isArray(t)?t.slice():[100,100],this.getAnimating()||this.resolveConstraints(0)}getCenter(){const t=this.getCenterInternal();return t&&ul(t,this.getProjection())}getCenterInternal(){return this.get(ne.CENTER)}getConstraints(){return this.constraints_}getConstrainResolution(){return this.get("constrainResolution")}getHints(t){return t!==void 0?(t[0]=this.hints_[0],t[1]=this.hints_[1],t):this.hints_.slice()}calculateExtent(t){const e=this.calculateExtentInternal(t);return Wc(e,this.getProjection())}calculateExtentInternal(t){t=t||this.getViewportSizeMinusPadding_();const e=this.getCenterInternal();lt(e,"The view center is not defined");const n=this.getResolution();lt(n!==void 0,"The view resolution is not defined");const r=this.getRotation();return lt(r!==void 0,"The view rotation is not defined"),Ic(e,n,r,t)}getMaxResolution(){return this.maxResolution_}getMinResolution(){return this.minResolution_}getMaxZoom(){return this.getZoomForResolution(this.minResolution_)}setMaxZoom(t){this.applyOptions_(this.getUpdatedOptions_({maxZoom:t}))}getMinZoom(){return this.getZoomForResolution(this.maxResolution_)}setMinZoom(t){this.applyOptions_(this.getUpdatedOptions_({minZoom:t}))}setConstrainResolution(t){this.applyOptions_(this.getUpdatedOptions_({constrainResolution:t}))}getProjection(){return this.projection_}getResolution(){return this.get(ne.RESOLUTION)}getResolutions(){return this.resolutions_}getResolutionForExtent(t,e){return this.getResolutionForExtentInternal(fe(t,this.getProjection()),e)}getResolutionForExtentInternal(t,e){e=e||this.getViewportSizeMinusPadding_();const n=et(t)/e[0],r=pt(t)/e[1];return Math.max(n,r)}getResolutionForValueFunction(t){t=t||2;const e=this.getConstrainedResolution(this.maxResolution_),n=this.minResolution_,r=Math.log(e/n)/Math.log(t);return(function(s){return e/Math.pow(t,s*r)})}getRotation(){return this.get(ne.ROTATION)}getValueForResolutionFunction(t){const e=Math.log(t||2),n=this.getConstrainedResolution(this.maxResolution_),r=this.minResolution_,s=Math.log(n/r)/e;return(function(o){return Math.log(n/o)/e/s})}getViewportSizeMinusPadding_(t){let e=this.getViewportSize_(t);const n=this.padding_;return n&&(e=[e[0]-n[1]-n[3],e[1]-n[0]-n[2]]),e}getState(){const t=this.getProjection(),e=this.getResolution(),n=this.getRotation();let r=this.getCenterInternal();const s=this.padding_;if(s){const o=this.getViewportSizeMinusPadding_();r=Vs(r,this.getViewportSize_(),[o[0]/2+s[3],o[1]/2+s[0]],e,n)}return{center:r.slice(0),projection:t!==void 0?t:null,resolution:e,nextCenter:this.nextCenter_,nextResolution:this.nextResolution_,nextRotation:this.nextRotation_,rotation:n,zoom:this.getZoom()}}getViewStateAndExtent(){return{viewState:this.getState(),extent:this.calculateExtent()}}getZoom(){let t;const e=this.getResolution();return e!==void 0&&(t=this.getZoomForResolution(e)),t}getZoomForResolution(t){let e=this.minZoom_||0,n,r;if(this.resolutions_){const s=ds(this.resolutions_,t,1);e=s,n=this.resolutions_[s],s==this.resolutions_.length-1?r=2:r=n/this.resolutions_[s+1]}else n=this.maxResolution_,r=this.zoomFactor_;return e+Math.log(n/t)/Math.log(r)}getResolutionForZoom(t){if(this.resolutions_?.length){if(this.resolutions_.length===1)return this.resolutions_[0];const e=ft(Math.floor(t),0,this.resolutions_.length-2),n=this.resolutions_[e]/this.resolutions_[e+1];return this.resolutions_[e]/Math.pow(n,ft(t-e,0,1))}return this.maxResolution_/Math.pow(this.zoomFactor_,t-this.minZoom_)}fit(t,e){let n;if(lt(Array.isArray(t)||typeof t.getSimplifiedGeometry=="function","Invalid extent or geometry provided as `geometry`"),Array.isArray(t)){lt(!or(t),"Cannot fit empty extent provided as `geometry`");const r=fe(t,this.getProjection());n=pl(r)}else if(t.getType()==="Circle"){const r=fe(t.getExtent(),this.getProjection());n=pl(r),n.rotate(this.getRotation(),ye(r))}else n=t;this.fitInternal(n,e)}rotatedExtentForGeometry(t){const e=this.getRotation(),n=Math.cos(e),r=Math.sin(-e),s=t.getFlatCoordinates(),o=t.getStride();let a=1/0,l=1/0,h=-1/0,c=-1/0;for(let u=0,f=s.length;u<f;u+=o){const g=s[u]*n-s[u+1]*r,d=s[u]*r+s[u+1]*n;a=Math.min(a,g),l=Math.min(l,d),h=Math.max(h,g),c=Math.max(c,d)}return[a,l,h,c]}fitInternal(t,e){e=e||{};let n=e.size;n||(n=this.getViewportSizeMinusPadding_());const r=e.padding!==void 0?e.padding:[0,0,0,0],s=e.nearest!==void 0?e.nearest:!1;let o;e.minResolution!==void 0?o=e.minResolution:e.maxZoom!==void 0?o=this.getResolutionForZoom(e.maxZoom):o=0;const a=this.rotatedExtentForGeometry(t);let l=this.getResolutionForExtentInternal(a,[n[0]-r[1]-r[3],n[1]-r[0]-r[2]]);l=isNaN(l)?o:Math.max(l,o),l=this.getConstrainedResolution(l,s?0:1);const h=this.getRotation(),c=Math.sin(h),u=Math.cos(h),f=ye(a);f[0]+=(r[1]-r[3])/2*l,f[1]+=(r[0]-r[2])/2*l;const g=f[0]*u-f[1]*c,d=f[1]*u+f[0]*c,m=this.getConstrainedCenter([g,d],l),p=e.callback?e.callback:Vr;e.duration!==void 0?this.animateInternal({resolution:l,center:m,duration:e.duration,easing:e.easing},p):(this.targetResolution_=l,this.targetCenter_=m,this.applyTargetState_(!1,!0),xr(p,!0))}centerOn(t,e,n){this.centerOnInternal(Xe(t,this.getProjection()),e,n)}centerOnInternal(t,e,n){this.setCenterInternal(Vs(t,e,n,this.getResolution(),this.getRotation()))}calculateCenterShift(t,e,n,r){let s;const o=this.padding_;if(o&&t){const a=this.getViewportSizeMinusPadding_(-n),l=Vs(t,r,[a[0]/2+o[3],a[1]/2+o[0]],e,n);s=[t[0]-l[0],t[1]-l[1]]}return s}isDef(){return!!this.getCenterInternal()&&this.getResolution()!==void 0}adjustCenter(t){const e=ul(this.targetCenter_,this.getProjection());this.setCenter([e[0]+t[0],e[1]+t[1]])}adjustCenterInternal(t){const e=this.targetCenter_;this.setCenterInternal([e[0]+t[0],e[1]+t[1]])}adjustResolution(t,e){e=e&&Xe(e,this.getProjection()),this.adjustResolutionInternal(t,e)}adjustResolutionInternal(t,e){const n=this.getAnimating()||this.getInteracting(),r=this.getViewportSize_(this.getRotation()),s=this.constraints_.resolution(this.targetResolution_*t,0,r,n);e&&(this.targetCenter_=this.calculateCenterZoom(s,e)),this.targetResolution_*=t,this.applyTargetState_()}adjustZoom(t,e){this.adjustResolution(Math.pow(this.zoomFactor_,-t),e)}adjustRotation(t,e){e&&(e=Xe(e,this.getProjection())),this.adjustRotationInternal(t,e)}adjustRotationInternal(t,e){const n=this.getAnimating()||this.getInteracting(),r=this.constraints_.rotation(this.targetRotation_+t,n);e&&(this.targetCenter_=this.calculateCenterRotate(r,e)),this.targetRotation_+=t,this.applyTargetState_()}setCenter(t){this.setCenterInternal(t&&Xe(t,this.getProjection()))}setCenterInternal(t){this.targetCenter_=t,this.applyTargetState_()}setHint(t,e){return this.hints_[t]+=e,this.changed(),this.hints_[t]}setResolution(t){this.targetResolution_=t,this.applyTargetState_()}setRotation(t){this.targetRotation_=t,this.applyTargetState_()}setZoom(t){this.setResolution(this.getResolutionForZoom(t))}applyTargetState_(t,e){const n=this.getAnimating()||this.getInteracting()||e,r=this.constraints_.rotation(this.targetRotation_,n),s=this.getViewportSize_(r),o=this.constraints_.resolution(this.targetResolution_,0,s,n),a=this.constraints_.center(this.targetCenter_,o,s,n,this.calculateCenterShift(this.targetCenter_,o,r,s));this.get(ne.ROTATION)!==r&&this.set(ne.ROTATION,r),this.get(ne.RESOLUTION)!==o&&(this.set(ne.RESOLUTION,o),this.set("zoom",this.getZoom(),!0)),(!a||!this.get(ne.CENTER)||!qr(this.get(ne.CENTER),a))&&this.set(ne.CENTER,a),this.getAnimating()&&!t&&this.cancelAnimations(),this.cancelAnchor_=void 0}resolveConstraints(t,e,n){t=t!==void 0?t:200;const r=e||0,s=this.constraints_.rotation(this.targetRotation_),o=this.getViewportSize_(s),a=this.constraints_.resolution(this.targetResolution_,r,o),l=this.constraints_.center(this.targetCenter_,a,o,!1,this.calculateCenterShift(this.targetCenter_,a,s,o));if(t===0&&!this.cancelAnchor_){this.targetResolution_=a,this.targetRotation_=s,this.targetCenter_=l,this.applyTargetState_();return}n=n||(t===0?this.cancelAnchor_:void 0),this.cancelAnchor_=void 0,(this.getResolution()!==a||this.getRotation()!==s||!this.getCenterInternal()||!qr(this.getCenterInternal(),l))&&(this.getAnimating()&&this.cancelAnimations(),this.animateInternal({rotation:s,center:l,resolution:a,duration:t,easing:df,anchor:n}))}beginInteraction(){this.resolveConstraints(0),this.setHint(Ot.INTERACTING,1)}endInteraction(t,e,n){n=n&&Xe(n,this.getProjection()),this.endInteractionInternal(t,e,n)}endInteractionInternal(t,e,n){this.getInteracting()&&(this.setHint(Ot.INTERACTING,-1),this.resolveConstraints(t,e,n))}getConstrainedCenter(t,e){const n=this.getViewportSize_(this.getRotation());return this.constraints_.center(t,e||this.getResolution(),n)}getConstrainedZoom(t,e){const n=this.getResolutionForZoom(t);return this.getZoomForResolution(this.getConstrainedResolution(n,e))}getConstrainedResolution(t,e){e=e||0;const n=this.getViewportSize_(this.getRotation());return this.constraints_.resolution(t,e,n)}}function xr(i,t){setTimeout(function(){i(t)},0)}function Ad(i){if(i.extent!==void 0){const e=i.smoothExtentConstraint!==void 0?i.smoothExtentConstraint:!0;return $a(i.extent,i.constrainOnlyCenter,e)}const t=sa(i.projection,"EPSG:3857");if(i.multiWorld!==!0&&t.isGlobal()){const e=t.getExtent().slice();return e[0]=-1/0,e[2]=1/0,$a(e,!1,!1)}return ef}function xd(i){let t,e,n,o=i.minZoom!==void 0?i.minZoom:Ys,a=i.maxZoom!==void 0?i.maxZoom:28;const l=i.zoomFactor!==void 0?i.zoomFactor:2,h=i.multiWorld!==void 0?i.multiWorld:!1,c=i.smoothResolutionConstraint!==void 0?i.smoothResolutionConstraint:!0,u=i.showFullExtent!==void 0?i.showFullExtent:!1,f=sa(i.projection,"EPSG:3857"),g=f.getExtent();let d=i.constrainOnlyCenter,m=i.extent;if(!h&&!m&&f.isGlobal()&&(d=!1,m=g),i.resolutions!==void 0){const p=i.resolutions;e=p[o],n=p[a]!==void 0?p[a]:p[p.length-1],i.constrainResolution?t=dd(p,c,!d&&m,u):t=yl(e,n,c,!d&&m,u)}else{const y=(g?Math.max(et(g),pt(g)):360*ta.degrees/f.getMetersPerUnit())/wa/Math.pow(2,Ys),w=y/Math.pow(2,28-Ys);e=i.maxResolution,e!==void 0?o=0:e=y/Math.pow(l,o),n=i.minResolution,n===void 0&&(i.maxZoom!==void 0?i.maxResolution!==void 0?n=e/Math.pow(l,a):n=y/Math.pow(l,a):n=w),a=o+Math.floor(Math.log(e/n)/Math.log(l)),n=e/Math.pow(l,a-o),i.constrainResolution?t=gd(l,e,n,c,!d&&m,u):t=yl(e,n,c,!d&&m,u)}return{constraint:t,maxResolution:e,minResolution:n,minZoom:o,zoomFactor:l}}function Cd(i){if(i.enableRotation!==void 0?i.enableRotation:!0){const e=i.constrainRotation;return e===void 0||e===!0?yd():e===!1?wl:typeof e=="number"?pd(e):wl}return md}function Ed(i){return!(i.sourceCenter&&i.targetCenter&&!qr(i.sourceCenter,i.targetCenter)||i.sourceResolution!==i.targetResolution||i.sourceRotation!==i.targetRotation)}function Vs(i,t,e,n,r){const s=Math.cos(-r);let o=Math.sin(-r),a=i[0]*s-i[1]*o,l=i[1]*s+i[0]*o;a+=(t[0]/2-e[0])*n,l+=(e[1]-t[1]/2)*n,o=-o;const h=a*s-l*o,c=l*s+a*o;return[h,c]}const W={IDLE:0,LOADING:1,LOADED:2,ERROR:3,EMPTY:4};class Aa extends gs{constructor(t,e,n){super(),n=n||{},this.tileCoord=t,this.state=e,this.key="",this.transition_=n.transition===void 0?250:n.transition,this.transitionStarts_={},this.interpolate=!!n.interpolate}changed(){this.dispatchEvent(yt.CHANGE)}release(){this.setState(W.EMPTY)}getKey(){return this.key+"/"+this.tileCoord}getTileCoord(){return this.tileCoord}getState(){return this.state}setState(t){if(this.state!==W.EMPTY){if(this.state!==W.ERROR&&this.state>t)throw new Error("Tile load sequence violation");this.state=t,this.changed()}}load(){U()}getAlpha(t,e){if(!this.transition_)return 1;let n=this.transitionStarts_[t];if(!n)n=e,this.transitionStarts_[t]=n;else if(n===-1)return 1;const r=e-n+1e3/60;return r>=this.transition_?1:Nc(r/this.transition_)}inTransition(t){return this.transition_?this.transitionStarts_[t]!==-1:!1}endTransition(t){this.transition_&&(this.transitionStarts_[t]=-1)}disposeInternal(){this.release(),super.disposeInternal()}}const _n=typeof navigator<"u"&&typeof navigator.userAgent<"u"?navigator.userAgent.toLowerCase():"",vd=_n.includes("safari")&&!_n.includes("chrom");vd&&(_n.includes("version/15.4")||/cpu (os|iphone os) 15_4 like mac os x/.test(_n));_n.includes("webkit")&&_n.includes("edge");_n.includes("macintosh");const Ln=typeof WorkerGlobalScope<"u"&&typeof OffscreenCanvas<"u"&&self instanceof WorkerGlobalScope,eh=typeof Image<"u"&&Image.prototype.decode,bd=typeof createImageBitmap=="function";(function(){let i=!1;try{const t=Object.defineProperty({},"passive",{get:function(){i=!0}});window.addEventListener("_",null,t),window.removeEventListener("_",null,t)}catch{}return i})();function xt(i,t,e,n){let r;return e&&e.length?r=e.shift():Ln?r=new class extends OffscreenCanvas{style={}}(i??300,t??150):r=document.createElement("canvas"),i&&(r.width=i),t&&(r.height=t),r.getContext("2d",n)}let Us;function Kr(){return Us||(Us=xt(1,1)),Us}function Ss(i){const t=i.canvas;t.width=1,t.height=1,i.clearRect(0,0,1,1)}function Td(){return new Proxy({childNodes:[],appendChild:function(t){return this.childNodes.push(t),t},remove:function(){},removeChild:function(t){const e=this.childNodes.indexOf(t);if(e===-1)throw new Error("Node to remove was not found");return this.childNodes.splice(e,1),t},insertBefore:function(t,e){const n=this.childNodes.indexOf(e);if(n===-1)throw new Error("Reference node not found");return this.childNodes.splice(n,0,t),t},style:{}},{get(t,e,n){return e==="firstElementChild"?t.childNodes.length>0?t.childNodes[0]:null:Reflect.get(t,e,n)}})}function Sd(i){return typeof HTMLCanvasElement<"u"&&i instanceof HTMLCanvasElement||typeof OffscreenCanvas<"u"&&i instanceof OffscreenCanvas}function Lo(i){return i instanceof Image||i instanceof HTMLCanvasElement||i instanceof HTMLVideoElement||i instanceof ImageBitmap?i:null}const Rd=new Error("disposed"),Pd=[256,256];class Al extends Aa{constructor(t){const e=W.IDLE;super(t.tileCoord,e,{transition:t.transition,interpolate:t.interpolate}),this.loader_=t.loader,this.data_=null,this.error_=null,this.size_=t.size||null,this.controller_=t.controller||null}getSize(){if(this.size_)return this.size_;const t=Lo(this.data_);return t?[t.width,t.height]:Pd}getData(){return this.data_}getError(){return this.error_}load(){if(this.state!==W.IDLE&&this.state!==W.ERROR)return;this.state=W.LOADING,this.changed();const t=this;this.loader_().then(function(e){t.data_=e,t.state=W.LOADED,t.changed()}).catch(function(e){t.error_=e,t.state=W.ERROR,t.changed()})}disposeInternal(){this.controller_&&(this.controller_.abort(Rd),this.controller_=null),super.disposeInternal()}}const G={IDLE:0,LOADING:1,LOADED:2,ERROR:3,EMPTY:4};class xa extends gs{constructor(t,e,n,r){super(),this.extent=t,this.pixelRatio_=n,this.resolution=e,this.state=typeof r=="function"?G.IDLE:r,this.image_=null,this.loader=typeof r=="function"?r:null}changed(){this.dispatchEvent(yt.CHANGE)}getExtent(){return this.extent}getImage(){return this.image_}getPixelRatio(){return this.pixelRatio_}getResolution(){return this.resolution}getState(){return this.state}load(){if(this.state==G.IDLE&&this.loader){this.state=G.LOADING,this.changed();const t=this.getResolution(),e=Array.isArray(t)?t[0]:t;Zu(()=>this.loader(this.getExtent(),e,this.getPixelRatio())).then(n=>{"image"in n&&(this.image_=n.image),"extent"in n&&(this.extent=n.extent),"resolution"in n&&(this.resolution=n.resolution),"pixelRatio"in n&&(this.pixelRatio_=n.pixelRatio),(n instanceof HTMLImageElement||bd&&n instanceof ImageBitmap||n instanceof HTMLCanvasElement||n instanceof HTMLVideoElement)&&(this.image_=n),this.state=G.LOADED}).catch(n=>{this.state=G.ERROR,console.error(n)}).finally(()=>this.changed())}}setImage(t){this.image_=t}setResolution(t){this.resolution=t}}function _d(i,t,e){const n=i;let r=!0,s=!1,o=!1;const a=[Ur(n,yt.LOAD,function(){o=!0,s||t()})];return n.src&&eh?(s=!0,n.decode().then(function(){r&&t()}).catch(function(l){r&&(o?t():e())})):a.push(Ur(n,yt.ERROR,e)),function(){r=!1,a.forEach(Ut)}}function Ld(i,t){return new Promise((e,n)=>{function r(){o(),e(i)}function s(){o(),n(new Error("Image load error"))}function o(){i.removeEventListener("load",r),i.removeEventListener("error",s)}i.addEventListener("load",r),i.addEventListener("error",s)})}function Id(i,t){return t&&(i.src=t),i.src&&eh?new Promise((e,n)=>i.decode().then(()=>e(i)).catch(r=>i.complete&&i.width?e(i):n(r))):Ld(i)}class nh extends Aa{constructor(t,e,n,r,s,o){super(t,e,o),this.crossOrigin_=r,this.src_=n,this.key=n,this.image_,Ln?this.image_=new OffscreenCanvas(1,1):(this.image_=new Image,r!==null&&(this.image_.crossOrigin=r)),this.unlisten_=null,this.tileLoadFunction_=s}getImage(){return this.image_}setImage(t){this.image_=t,this.state=W.LOADED,this.unlistenImage_(),this.changed()}getCrossOrigin(){return this.crossOrigin_}handleImageError_(){this.state=W.ERROR,this.unlistenImage_(),this.image_=Dd(),this.changed()}handleImageLoad_(){if(Ln)this.state=W.LOADED;else{const t=this.image_;t.naturalWidth&&t.naturalHeight?this.state=W.LOADED:this.state=W.EMPTY}this.unlistenImage_(),this.changed()}load(){this.state==W.ERROR&&(this.state=W.IDLE,this.image_=new Image,this.crossOrigin_!==null&&(this.image_.crossOrigin=this.crossOrigin_)),this.state==W.IDLE&&(this.state=W.LOADING,this.changed(),this.tileLoadFunction_(this,this.src_),this.unlisten_=_d(this.image_,this.handleImageLoad_.bind(this),this.handleImageError_.bind(this)))}unlistenImage_(){this.unlisten_&&(this.unlisten_(),this.unlisten_=null)}disposeInternal(){this.unlistenImage_(),this.image_=null,super.disposeInternal()}}function Dd(){const i=xt(1,1);return i.fillStyle="rgba(0,0,0,0)",i.fillRect(0,0,1,1),i.canvas}class Ca{constructor(t,e,n,r){this.minX=t,this.maxX=e,this.minY=n,this.maxY=r}contains(t){return this.containsXY(t[1],t[2])}containsTileRange(t){return this.minX<=t.minX&&t.maxX<=this.maxX&&this.minY<=t.minY&&t.maxY<=this.maxY}containsXY(t,e){return this.minX<=t&&t<=this.maxX&&this.minY<=e&&e<=this.maxY}equals(t){return this.minX==t.minX&&this.minY==t.minY&&this.maxX==t.maxX&&this.maxY==t.maxY}extend(t){t.minX<this.minX&&(this.minX=t.minX),t.maxX>this.maxX&&(this.maxX=t.maxX),t.minY<this.minY&&(this.minY=t.minY),t.maxY>this.maxY&&(this.maxY=t.maxY)}getHeight(){return this.maxY-this.minY+1}getSize(){return[this.getWidth(),this.getHeight()]}getWidth(){return this.maxX-this.minX+1}intersects(t){return this.minX<=t.maxX&&this.maxX>=t.minX&&this.minY<=t.maxY&&this.maxY>=t.minY}}function Qn(i,t,e,n,r){return r!==void 0?(r.minX=i,r.maxX=t,r.minY=e,r.maxY=n,r):new Ca(i,t,e,n)}let qs;const ai=[];function xl(i,t,e,n,r){i.beginPath(),i.moveTo(0,0),i.lineTo(t,e),i.lineTo(n,r),i.closePath(),i.save(),i.clip(),i.fillRect(0,0,Math.max(t,n)+1,Math.max(e,r)),i.restore()}function Qs(i,t){return Math.abs(i[t*4]-210)>2||Math.abs(i[t*4+3]-.75*255)>2}function Md(){if(qs===void 0){const i=xt(6,6,ai);i.globalCompositeOperation="lighter",i.fillStyle="rgba(210, 0, 0, 0.75)",xl(i,4,5,4,0),xl(i,4,5,0,5);const t=i.getImageData(0,0,3,3).data;qs=Qs(t,0)||Qs(t,4)||Qs(t,8),Ss(i),ai.push(i.canvas)}return qs}function $r(i,t,e,n){const r=Es(e,t,i);let s=cl(t,n,e);const o=t.getMetersPerUnit();o!==void 0&&(s*=o);const a=i.getMetersPerUnit();a!==void 0&&(s/=a);const l=i.getExtent();if(!l||Rn(l,r)){const h=cl(i,s,r)/s;isFinite(h)&&h>0&&(s/=h)}return s}function Od(i,t,e,n){const r=ye(e);let s=$r(i,t,r,n);return(!isFinite(s)||s<=0)&&Lc(e,function(o){return s=$r(i,t,o,n),isFinite(s)&&s>0}),s}function ih(i,t,e,n,r,s,o,a,l,h,c,u,f,g){const d=xt(Math.round(e*i),Math.round(e*t),ai);if(u||(d.imageSmoothingEnabled=!1),l.length===0)return d.canvas;d.scale(e,e);function m(C){return Math.round(C*e)/e}d.globalCompositeOperation="lighter";const p=qt();l.forEach(function(C,v,E){Pc(p,C.extent)});let y;const w=e/n,A=(u?1:1+Math.pow(2,-24))/w;(!f||l.length!==1||h!==0)&&(y=xt(Math.round(et(p)*w),Math.round(pt(p)*w),ai),u||(y.imageSmoothingEnabled=!1),l.forEach(function(C,v,E){if(C.image.width>0&&C.image.height>0){if(C.clipExtent){y.save();const M=(C.clipExtent[0]-p[0])*w,D=-(C.clipExtent[3]-p[3])*w,I=et(C.clipExtent)*w,N=pt(C.clipExtent)*w;y.rect(u?M:Math.round(M),u?D:Math.round(D),u?I:Math.round(M+I)-Math.round(M),u?N:Math.round(D+N)-Math.round(D)),y.clip()}const T=(C.extent[0]-p[0])*w,b=-(C.extent[3]-p[3])*w,R=et(C.extent)*w,_=pt(C.extent)*w;y.drawImage(C.image,h,h,C.image.width-2*h,C.image.height-2*h,u?T:Math.round(T),u?b:Math.round(b),u?R:Math.round(T+R)-Math.round(T),u?_:Math.round(b+_)-Math.round(b)),C.clipExtent&&y.restore()}}));const x=Xn(o);return a.getTriangles().forEach(function(C,v,E){const T=C.source,b=C.target;let R=T[0][0],_=T[0][1],M=T[1][0],D=T[1][1],I=T[2][0],N=T[2][1];const O=m((b[0][0]-x[0])/s),B=m(-(b[0][1]-x[1])/s),F=m((b[1][0]-x[0])/s),X=m(-(b[1][1]-x[1])/s),k=m((b[2][0]-x[0])/s),z=m(-(b[2][1]-x[1])/s),L=R,V=_;R=0,_=0,M-=L,D-=V,I-=L,N-=V;const K=[[M,D,0,0,F-O],[I,N,0,0,k-O],[0,0,M,D,X-B],[0,0,I,N,z-B]],Q=tf(K);if(!Q)return;if(d.save(),d.beginPath(),Md()||!u){d.moveTo(F,X);const q=4,rt=O-F,at=B-X;for(let it=0;it<q;it++)d.lineTo(F+m((it+1)*rt/q),X+m(it*at/(q-1))),it!=q-1&&d.lineTo(F+m((it+1)*rt/q),X+m((it+1)*at/(q-1)));d.lineTo(k,z)}else d.moveTo(F,X),d.lineTo(O,B),d.lineTo(k,z);d.clip(),d.transform(Q[0],Q[2],Q[1],Q[3],O,B),d.translate(p[0]-L,p[3]-V);let $;if(y)$=y.canvas,d.scale(A,-A);else{const q=l[0],rt=q.extent;$=q.image,d.scale(et(rt)/$.width,-pt(rt)/$.height)}d.drawImage($,0,0),d.restore()}),y&&(Ss(y),ai.push(y.canvas)),c&&(d.save(),d.globalCompositeOperation="source-over",d.strokeStyle="black",d.lineWidth=1,a.getTriangles().forEach(function(C,v,E){const T=C.target,b=(T[0][0]-x[0])/s,R=-(T[0][1]-x[1])/s,_=(T[1][0]-x[0])/s,M=-(T[1][1]-x[1])/s,D=(T[2][0]-x[0])/s,I=-(T[2][1]-x[1])/s;d.beginPath(),d.moveTo(_,M),d.lineTo(b,R),d.lineTo(D,I),d.closePath(),d.stroke()}),d.restore()),d.canvas}const Fd=10,Cl=.25;class rh{constructor(t,e,n,r,s,o,a){this.sourceProj_=t,this.targetProj_=e;let l={};const h=a?Wf(A=>vt(a,Es(A,this.targetProj_,this.sourceProj_))):Vi(this.targetProj_,this.sourceProj_);this.transformInv_=function(A){const x=A[0]+"/"+A[1];return l[x]||(l[x]=h(A)),l[x]},this.maxSourceExtent_=r,this.errorThresholdSquared_=s*s,this.triangles_=[],this.wrapsXInSource_=!1,this.canWrapXInSource_=this.sourceProj_.canWrapX()&&!!r&&!!this.sourceProj_.getExtent()&&et(r)>=et(this.sourceProj_.getExtent()),this.sourceWorldWidth_=this.sourceProj_.getExtent()?et(this.sourceProj_.getExtent()):null,this.targetWorldWidth_=this.targetProj_.getExtent()?et(this.targetProj_.getExtent()):null;const c=Xn(n),u=As(n),f=ws(n),g=ys(n),d=this.transformInv_(c),m=this.transformInv_(u),p=this.transformInv_(f),y=this.transformInv_(g),w=Fd+(o?Math.max(0,Math.ceil(Math.log2(vo(n)/(o*o*256*256)))):0);if(this.addQuad_(c,u,f,g,d,m,p,y,w),this.wrapsXInSource_){let A=1/0;this.triangles_.forEach(function(x,C,v){A=Math.min(A,x.source[0][0],x.source[1][0],x.source[2][0])}),this.triangles_.forEach(x=>{if(Math.max(x.source[0][0],x.source[1][0],x.source[2][0])-A>this.sourceWorldWidth_/2){const C=[[x.source[0][0],x.source[0][1]],[x.source[1][0],x.source[1][1]],[x.source[2][0],x.source[2][1]]];C[0][0]-A>this.sourceWorldWidth_/2&&(C[0][0]-=this.sourceWorldWidth_),C[1][0]-A>this.sourceWorldWidth_/2&&(C[1][0]-=this.sourceWorldWidth_),C[2][0]-A>this.sourceWorldWidth_/2&&(C[2][0]-=this.sourceWorldWidth_);const v=Math.min(C[0][0],C[1][0],C[2][0]);Math.max(C[0][0],C[1][0],C[2][0])-v<this.sourceWorldWidth_/2&&(x.source=C)}})}l={}}addTriangle_(t,e,n,r,s,o){this.triangles_.push({source:[r,s,o],target:[t,e,n]})}addQuad_(t,e,n,r,s,o,a,l,h){const c=tl([s,o,a,l]),u=this.sourceWorldWidth_?et(c)/this.sourceWorldWidth_:null,f=this.sourceWorldWidth_,g=this.sourceProj_.canWrapX()&&u>.5&&u<1;let d=!1;if(h>0){if(this.targetProj_.isGlobal()&&this.targetWorldWidth_){const p=tl([t,e,n,r]);d=et(p)/this.targetWorldWidth_>Cl||d}!g&&this.sourceProj_.isGlobal()&&u&&(d=u>Cl||d)}if(!d&&this.maxSourceExtent_&&isFinite(c[0])&&isFinite(c[1])&&isFinite(c[2])&&isFinite(c[3])&&!Dt(c,this.maxSourceExtent_))return;let m=0;if(!d&&(!isFinite(s[0])||!isFinite(s[1])||!isFinite(o[0])||!isFinite(o[1])||!isFinite(a[0])||!isFinite(a[1])||!isFinite(l[0])||!isFinite(l[1]))){if(h>0)d=!0;else if(m=(!isFinite(s[0])||!isFinite(s[1])?8:0)+(!isFinite(o[0])||!isFinite(o[1])?4:0)+(!isFinite(a[0])||!isFinite(a[1])?2:0)+(!isFinite(l[0])||!isFinite(l[1])?1:0),m!=1&&m!=2&&m!=4&&m!=8)return}if(h>0){if(!d){const p=[(t[0]+n[0])/2,(t[1]+n[1])/2],y=this.transformInv_(p);let w;g?w=(Cn(s[0],f)+Cn(a[0],f))/2-Cn(y[0],f):w=(s[0]+a[0])/2-y[0];const A=(s[1]+a[1])/2-y[1];d=w*w+A*A>this.errorThresholdSquared_}if(d){if(Math.abs(t[0]-n[0])<=Math.abs(t[1]-n[1])){const p=[(e[0]+n[0])/2,(e[1]+n[1])/2],y=this.transformInv_(p),w=[(r[0]+t[0])/2,(r[1]+t[1])/2],A=this.transformInv_(w);this.addQuad_(t,e,p,w,s,o,y,A,h-1),this.addQuad_(w,p,n,r,A,y,a,l,h-1)}else{const p=[(t[0]+e[0])/2,(t[1]+e[1])/2],y=this.transformInv_(p),w=[(n[0]+r[0])/2,(n[1]+r[1])/2],A=this.transformInv_(w);this.addQuad_(t,p,w,r,s,y,A,l,h-1),this.addQuad_(p,e,n,w,y,o,a,A,h-1)}return}}if(g){if(!this.canWrapXInSource_)return;this.wrapsXInSource_=!0}(m&11)==0&&this.addTriangle_(t,n,r,s,a,l),(m&14)==0&&this.addTriangle_(t,n,e,s,a,o),m&&((m&13)==0&&this.addTriangle_(e,r,t,o,l,s),(m&7)==0&&this.addTriangle_(e,r,n,o,l,a))}calculateSourceExtent(){const t=qt();return this.triangles_.forEach(function(e,n,r){const s=e.source;Gi(t,s[0]),Gi(t,s[1]),Gi(t,s[2])}),t}getTriangles(){return this.triangles_}}const sh=.5;class oh extends Aa{constructor(t,e,n,r,s,o,a,l,h,c,u,f){super(s,W.IDLE,f),this.renderEdges_=u!==void 0?u:!1,this.pixelRatio_=a,this.gutter_=l,this.canvas_=null,this.sourceTileGrid_=e,this.targetTileGrid_=r,this.wrappedTileCoord_=o||s,this.sourceTiles_=[],this.sourcesListenerKeys_=null,this.sourceZ_=0,this.clipExtent_=t.canWrapX()?t.getExtent():void 0;const g=r.getTileCoordExtent(this.wrappedTileCoord_),d=this.targetTileGrid_.getExtent();let m=this.sourceTileGrid_.getExtent();const p=d?Je(g,d):g;if(vo(p)===0){this.state=W.EMPTY;return}const y=t.getExtent();y&&(m?m=Je(m,y):m=y);const w=r.getResolution(this.wrappedTileCoord_[0]),A=Od(t,n,p,w);if(!isFinite(A)||A<=0){this.state=W.EMPTY;return}const x=c!==void 0?c:sh;if(this.triangulation_=new rh(t,n,p,m,A*x,w),this.triangulation_.getTriangles().length===0){this.state=W.EMPTY;return}this.sourceZ_=e.getZForResolution(A);let C=this.triangulation_.calculateSourceExtent();if(m&&(t.canWrapX()?(C[1]=ft(C[1],m[1],m[3]),C[3]=ft(C[3],m[1],m[3])):C=Je(C,m)),!vo(C))this.state=W.EMPTY;else{let v=0,E=0;t.canWrapX()&&(v=et(y),E=Math.floor((C[0]-y[0])/v)),Oc(C.slice(),t,!0).forEach(b=>{const R=e.getTileRangeForExtentAndZ(b,this.sourceZ_);for(let _=R.minX;_<=R.maxX;_++)for(let M=R.minY;M<=R.maxY;M++){const D=h(this.sourceZ_,_,M,a);if(D){const I=E*v;this.sourceTiles_.push({tile:D,offset:I})}}++E}),this.sourceTiles_.length===0&&(this.state=W.EMPTY)}}getImage(){return this.canvas_}reproject_(){const t=[];if(this.sourceTiles_.forEach(e=>{const n=e.tile;if(n&&n.getState()==W.LOADED){const r=this.sourceTileGrid_.getTileCoordExtent(n.tileCoord);r[0]+=e.offset,r[2]+=e.offset;const s=this.clipExtent_?.slice();s&&(s[0]+=e.offset,s[2]+=e.offset),t.push({extent:r,clipExtent:s,image:n.getImage()})}}),this.sourceTiles_.length=0,t.length===0)this.state=W.ERROR;else{const e=this.wrappedTileCoord_[0],n=this.targetTileGrid_.getTileSize(e),r=typeof n=="number"?n:n[0],s=typeof n=="number"?n:n[1],o=this.targetTileGrid_.getResolution(e),a=this.sourceTileGrid_.getResolution(this.sourceZ_),l=this.targetTileGrid_.getTileCoordExtent(this.wrappedTileCoord_);this.canvas_=ih(r,s,this.pixelRatio_,a,this.sourceTileGrid_.getExtent(),o,l,this.triangulation_,t,this.gutter_,this.renderEdges_,this.interpolate),this.state=W.LOADED}this.changed()}load(){if(this.state==W.IDLE){this.state=W.LOADING,this.changed();let t=0;this.sourcesListenerKeys_=[],this.sourceTiles_.forEach(({tile:e})=>{const n=e.getState();if(n==W.IDLE||n==W.LOADING){t++;const r=$t(e,yt.CHANGE,s=>{const o=e.getState();(o==W.LOADED||o==W.ERROR||o==W.EMPTY)&&(Ut(r),t--,t===0&&(this.unlistenSources_(),this.reproject_()))});this.sourcesListenerKeys_.push(r)}}),t===0?setTimeout(this.reproject_.bind(this),0):this.sourceTiles_.forEach(function({tile:e},n,r){e.getState()==W.IDLE&&e.load()})}}unlistenSources_(){this.sourcesListenerKeys_.forEach(Ut),this.sourcesListenerKeys_=null}release(){this.canvas_&&(Ss(this.canvas_.getContext("2d")),ai.push(this.canvas_),this.canvas_=null),super.release()}}function Nd(i,t,e){return e===void 0&&(e=[0,0]),e[0]=i[0]*t+.5|0,e[1]=i[1]*t+.5|0,e}function Xt(i,t){return Array.isArray(i)?i:(t===void 0?t=[i,i]:(t[0]=i,t[1]=i),t)}class El{constructor(t){this.highWaterMark=t!==void 0?t:2048,this.count_=0,this.entries_={},this.oldest_=null,this.newest_=null}deleteOldest(){const t=this.pop();t instanceof Tc&&t.dispose()}canExpireCache(){return this.highWaterMark>0&&this.getCount()>this.highWaterMark}expireCache(t){for(;this.canExpireCache();)this.deleteOldest()}clear(){for(;this.oldest_;)this.deleteOldest()}containsKey(t){return this.entries_.hasOwnProperty(t)}forEach(t){let e=this.oldest_;for(;e;)t(e.value_,e.key_,this),e=e.newer}get(t,e){const n=this.entries_[t];return lt(n!==void 0,"Tried to get a value for a key that does not exist in the cache"),n===this.newest_||(n===this.oldest_?(this.oldest_=this.oldest_.newer,this.oldest_.older=null):(n.newer.older=n.older,n.older.newer=n.newer),n.newer=null,n.older=this.newest_,this.newest_.newer=n,this.newest_=n),n.value_}remove(t){const e=this.entries_[t];return lt(e!==void 0,"Tried to get a value for a key that does not exist in the cache"),e===this.newest_?(this.newest_=e.older,this.newest_&&(this.newest_.newer=null)):e===this.oldest_?(this.oldest_=e.newer,this.oldest_&&(this.oldest_.older=null)):(e.newer.older=e.older,e.older.newer=e.newer),delete this.entries_[t],--this.count_,e.value_}getCount(){return this.count_}getKeys(){const t=new Array(this.count_);let e=0,n;for(n=this.newest_;n;n=n.older)t[e++]=n.key_;return t}getValues(){const t=new Array(this.count_);let e=0,n;for(n=this.newest_;n;n=n.older)t[e++]=n.value_;return t}peekLast(){return this.oldest_.value_}peekLastKey(){return this.oldest_.key_}peekFirstKey(){return this.newest_.key_}peek(t){return this.entries_[t]?.value_}pop(){const t=this.oldest_;return delete this.entries_[t.key_],t.newer&&(t.newer.older=null),this.oldest_=t.newer,this.oldest_||(this.newest_=null),--this.count_,t.value_}replace(t,e){this.get(t),this.entries_[t].value_=e}set(t,e){lt(!(t in this.entries_),"Tried to set a value for a key that is used already");const n={key_:t,newer:null,older:this.newest_,value_:e};this.newest_?this.newest_.newer=n:this.oldest_=n,this.newest_=n,this.entries_[t]=n,++this.count_}setSize(t){this.highWaterMark=t}}function ts(i,t,e,n){return n!==void 0?(n[0]=i,n[1]=t,n[2]=e,n):[i,t,e]}function Bd(i,t,e){return i+"/"+t+"/"+e}function kr(i,t,e,n,r){return`${ot(i)},${t},${Bd(e,n,r)}`}function ah(i){return Xd(i[0],i[1],i[2])}function Xd(i,t,e){return(t<<i)+e}function Gd(i,t){const e=i[0],n=i[1],r=i[2];if(t.getMinZoom()>e||e>t.getMaxZoom())return!1;const s=t.getFullTileRange(e);return s?s.containsXY(n,r):!0}const Ea=[NaN,NaN,NaN,0];let Zs;function kd(){return Zs||(Zs=xt(1,1,void 0,{willReadFrequently:!0,desynchronized:!0})),Zs}const Hd=/^rgba?\(\s*(\d+%?)\s+(\d+%?)\s+(\d+%?)(?:\s*\/\s*(\d+%|\d*\.\d+|[01]))?\s*\)$/i,zd=/^rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)(?:\s*,\s*(\d+%|\d*\.\d+|[01]))?\s*\)$/i,Wd=/^rgba?\(\s*(\d+%)\s*,\s*(\d+%)\s*,\s*(\d+%)(?:\s*,\s*(\d+%|\d*\.\d+|[01]))?\s*\)$/i,jd=/^#([\da-f]{3,4}|[\da-f]{6}|[\da-f]{8})$/i;function Cr(i,t){return i.endsWith("%")?Number(i.substring(0,i.length-1))/t:Number(i)}function ki(i){throw new Error('failed to parse "'+i+'" as color')}function lh(i){if(i.toLowerCase().startsWith("rgb")){const s=i.match(zd)||i.match(Hd)||i.match(Wd);if(s){const o=s[4],a=100/255;return[ft(Cr(s[1],a)+.5|0,0,255),ft(Cr(s[2],a)+.5|0,0,255),ft(Cr(s[3],a)+.5|0,0,255),o!==void 0?ft(Cr(o,100),0,1):1]}ki(i)}if(i.startsWith("#")){if(jd.test(i)){const s=i.substring(1),o=s.length<=4?1:2,a=[0,0,0,255];for(let l=0,h=s.length;l<h;l+=o){let c=parseInt(s.substring(l,l+o),16);o===1&&(c+=c<<4),a[l/o]=c}return a[3]=a[3]/255,a}ki(i)}const t=kd();t.fillStyle="#abcdef";let e=t.fillStyle;t.fillStyle=i,t.fillStyle===e&&(t.fillStyle="#fedcba",e=t.fillStyle,t.fillStyle=i,t.fillStyle===e&&ki(i));const n=t.fillStyle;if(n.startsWith("#")||n.startsWith("rgba"))return lh(n);t.clearRect(0,0,1,1),t.fillRect(0,0,1,1);const r=Array.from(t.getImageData(0,0,1,1).data);return r[3]=sr(r[3]/255,3),r}function Yd(i){return typeof i=="string"?i:ba(i)}const Vd=1024,Ti={};let Js=0;function Ud(i){if(i.length===4)return i;const t=i.slice();return t[3]=1,t}function Ks(i){return i>.0031308?Math.pow(i,1/2.4)*269.025-14.025:i*3294.6}function $s(i){return i>.2068965?Math.pow(i,3):(i-4/29)*(108/841)}function to(i){return i>10.314724?Math.pow((i+14.025)/269.025,2.4):i/3294.6}function eo(i){return i>.0088564?Math.pow(i,1/3):i/(108/841)+4/29}function vl(i){const t=to(i[0]),e=to(i[1]),n=to(i[2]),r=eo(t*.222488403+e*.716873169+n*.06060791),s=500*(eo(t*.452247074+e*.399439023+n*.148375274)-r),o=200*(r-eo(t*.016863605+e*.117638439+n*.865350722)),a=Math.atan2(o,s)*(180/Math.PI);return[116*r-16,Math.sqrt(s*s+o*o),a<0?a+360:a,i[3]]}function qd(i){const t=(i[0]+16)/116,e=i[1],n=i[2]*Math.PI/180,r=$s(t),s=$s(t+e/500*Math.cos(n)),o=$s(t-e/200*Math.sin(n)),a=Ks(s*3.021973625-r*1.617392459-o*.404875592),l=Ks(s*-.943766287+r*1.916279586+o*.027607165),h=Ks(s*.069407491-r*.22898585+o*1.159737864);return[ft(a+.5|0,0,255),ft(l+.5|0,0,255),ft(h+.5|0,0,255),i[3]]}function va(i){if(i==="none")return Ea;if(Ti.hasOwnProperty(i))return Ti[i];if(Js>=Vd){let e=0;for(const n in Ti)(e++&3)===0&&(delete Ti[n],--Js)}const t=lh(i);t.length!==4&&ki(i);for(const e of t)isNaN(e)&&ki(i);return Ti[i]=t,++Js,t}function ui(i){return Array.isArray(i)?i:va(i)}function ba(i){let t=i[0];t!=(t|0)&&(t=t+.5|0);let e=i[1];e!=(e|0)&&(e=e+.5|0);let n=i[2];n!=(n|0)&&(n=n+.5|0);const r=i[3]===void 0?1:Math.round(i[3]*1e3)/1e3;return"rgba("+t+","+e+","+n+","+r+")"}class Qd extends Fn{constructor(t,e,n,r){super(t),this.inversePixelTransform=e,this.frameState=n,this.context=r}}const gn={PRERENDER:"prerender",POSTRENDER:"postrender",PRECOMPOSE:"precompose"};class ch{constructor(){this.instructions_=[],this.zIndex=0,this.offset_=0,this.context_=new Proxy(Kr(),{get:(t,e)=>{if(typeof Kr()[e]=="function")return this.push_(e),this.pushMethodArgs_},set:(t,e,n)=>(this.push_(e,n),!0)})}push_(...t){const e=this.instructions_,n=this.zIndex+this.offset_;e[n]||(e[n]=[]),e[n].push(...t)}pushMethodArgs_=(...t)=>(this.push_(t),this);pushFunction(t){this.push_(t)}getContext(){return this.context_}draw(t){this.instructions_.forEach(e=>{for(let n=0,r=e.length;n<r;++n){const s=e[n];if(typeof s=="function"){s(t);continue}const o=e[++n];if(typeof t[s]=="function")t[s](...o);else{if(typeof o=="function"){t[s]=o(t);continue}t[s]=o}}})}clear(){this.instructions_.length=0,this.zIndex=0,this.offset_=0}offset(){this.offset_=this.instructions_.length,this.zIndex=0}}const Zd=5;class Jd extends rr{constructor(t){super(),this.ready=!0,this.boundHandleImageChange_=this.handleImageChange_.bind(this),this.layer_=t,this.staleKeys_=new Array,this.maxStaleKeys=Zd}getStaleKeys(){return this.staleKeys_}prependStaleKey(t){this.staleKeys_.unshift(t),this.staleKeys_.length>this.maxStaleKeys&&(this.staleKeys_.length=this.maxStaleKeys)}getFeatures(t){return U()}getData(t){return null}prepareFrame(t){return U()}renderFrame(t,e){return U()}forEachFeatureAtCoordinate(t,e,n,r,s){}getLayer(){return this.layer_}handleFontsChanged(){}handleImageChange_(t){const e=t.target;(e.getState()===G.LOADED||e.getState()===G.ERROR)&&this.renderIfReadyAndVisible()}loadImage(t){let e=t.getState();return e!=G.LOADED&&e!=G.ERROR&&t.addEventListener(yt.CHANGE,this.boundHandleImageChange_),e==G.IDLE&&(t.load(),e=t.getState()),e==G.LOADED}renderIfReadyAndVisible(){const t=this.getLayer();t&&t.getVisible()&&t.getSourceState()==="ready"&&t.changed()}renderDeferred(t){}disposeInternal(){delete this.layer_,super.disposeInternal()}}const bl=[];let ti=null;function Kd(){ti=xt(1,1,void 0,{willReadFrequently:!0})}class Ta extends Jd{constructor(t){super(t),this.container=null,this.renderedResolution,this.tempTransform=Pe(),this.pixelTransform=Pe(),this.inversePixelTransform=Pe(),this.context=null,this.deferredContext_=null,this.containerReused=!1,this.frameState=null}getImageData(t,e,n){ti||Kd(),ti.clearRect(0,0,1,1);let r;try{ti.drawImage(t,e,n,1,1,0,0,1,1),r=ti.getImageData(0,0,1,1).data}catch{return ti=null,null}return r}getBackground(t){let n=this.getLayer().getBackground();return typeof n=="function"&&(n=n(t.viewState.resolution)),n||void 0}useContainer(t,e,n){const r=this.getLayer().getClassName();let s,o;if(t&&t.className===r&&(!n||t&&t.style.backgroundColor&&yi(ui(t.style.backgroundColor),ui(n)))){const a=t.firstElementChild;Sd(a)&&(o=a.getContext("2d"))}if(o&&Zf(o.canvas.style.transform,e)?(this.container=t,this.context=o,this.containerReused=!0):this.containerReused?(this.container=null,this.context=null,this.containerReused=!1):this.container&&(this.container.style.backgroundColor=null),!this.container){s=Ln?Td():document.createElement("div"),s.className=r;let a=s.style;a.position="absolute",a.width="100%",a.height="100%",o=xt();const l=o.canvas;s.appendChild(l),a=l.style,a.position="absolute",a.left="0",a.transformOrigin="top left",this.container=s,this.context=o}!this.containerReused&&n&&!this.container.style.backgroundColor&&(this.container.style.backgroundColor=n)}clipUnrotated(t,e,n){const r=Xn(n),s=As(n),o=ws(n),a=ys(n);vt(e.coordinateToPixelTransform,r),vt(e.coordinateToPixelTransform,s),vt(e.coordinateToPixelTransform,o),vt(e.coordinateToPixelTransform,a);const l=this.inversePixelTransform;vt(l,r),vt(l,s),vt(l,o),vt(l,a),t.save(),t.beginPath(),t.moveTo(Math.round(r[0]),Math.round(r[1])),t.lineTo(Math.round(s[0]),Math.round(s[1])),t.lineTo(Math.round(o[0]),Math.round(o[1])),t.lineTo(Math.round(a[0]),Math.round(a[1])),t.clip()}prepareContainer(t,e){const n=t.extent,r=t.viewState.resolution,s=t.viewState.rotation,o=t.pixelRatio,a=Math.round(et(n)/r*o),l=Math.round(pt(n)/r*o);Ie(this.pixelTransform,t.size[0]/2,t.size[1]/2,1/o,1/o,s,-a/2,-l/2),Vf(this.inversePixelTransform,this.pixelTransform);const h=Qf(this.pixelTransform);if(this.useContainer(e,h,this.getBackground(t)),!this.containerReused){const c=this.context.canvas;c.width!=a||c.height!=l?(c.width=a,c.height=l):this.context.clearRect(0,0,a,l),h!==c.style.transform&&(c.style.transform=h)}}dispatchRenderEvent_(t,e,n){const r=this.getLayer();if(r.hasListener(t)){const s=new Qd(t,this.inversePixelTransform,n,e);r.dispatchEvent(s)}}preRender(t,e){this.frameState=e,!e.declutter&&this.dispatchRenderEvent_(gn.PRERENDER,t,e)}postRender(t,e){e.declutter||this.dispatchRenderEvent_(gn.POSTRENDER,t,e)}renderDeferredInternal(t){}getRenderContext(t){return t.declutter&&!this.deferredContext_&&(this.deferredContext_=new ch),t.declutter?this.deferredContext_.getContext():this.context}renderDeferred(t){t.declutter&&(this.dispatchRenderEvent_(gn.PRERENDER,this.context,t),t.declutter&&this.deferredContext_&&(this.deferredContext_.draw(this.context),this.deferredContext_.clear()),this.renderDeferredInternal(t),this.dispatchRenderEvent_(gn.POSTRENDER,this.context,t))}getRenderTransform(t,e,n,r,s,o,a){const l=s/2,h=o/2,c=r/e,u=-c,f=-t[0]+a,g=-t[1];return Ie(this.tempTransform,l,h,c,u,-n,f,g)}disposeInternal(){delete this.frameState,super.disposeInternal()}}function no(i,t,e){if(!(e in i))return i[e]=new Set([t]),!0;const n=i[e],r=n.has(t);return r||n.add(t),!r}function $d(i,t,e){const n=i[e];return n?n.delete(t):!1}function Tl(i,t){const e=i.layerStatesArray[i.layerIndex];e.extent&&(t=Je(t,fe(e.extent,i.viewState.projection)));const n=e.layer.getRenderSource();if(!n.getWrapX()){const r=n.getTileGridForProjection(i.viewState.projection).getExtent();r&&(t=Je(t,r))}return t}class tg extends Ta{constructor(t,e){super(t),e=e||{},this.extentChanged=!0,this.renderComplete=!1,this.renderedExtent_=null,this.renderedPixelRatio,this.renderedProjection=null,this.renderedTiles=[],this.renderedSourceKey_,this.renderedSourceRevision_,this.tempExtent=qt(),this.tempTileRange_=new Ca(0,0,0,0),this.tempTileCoord_=ts(0,0,0);const n=e.cacheSize!==void 0?e.cacheSize:512;this.tileCache_=new El(n),this.sourceTileCache_=null,this.maxStaleKeys=n*.5}getTileCache(){return this.tileCache_}getSourceTileCache(){return this.sourceTileCache_||(this.sourceTileCache_=new El(512)),this.sourceTileCache_}getOrCreateTile(t,e,n,r){const s=this.tileCache_,a=this.getLayer().getSource(),l=kr(a,a.getKey(),t,e,n);let h;if(s.containsKey(l))h=s.get(l);else{const c=r.viewState.projection,u=a.getProjection();if(h=a.getTile(t,e,n,r.pixelRatio,c,!u||En(u,c)?void 0:this.getSourceTileCache()),!h)return null;s.set(l,h)}return h}getTile(t,e,n,r){const s=this.getOrCreateTile(t,e,n,r);return s||null}getData(t){const e=this.frameState;if(!e)return null;const n=this.getLayer(),r=vt(e.pixelToCoordinateTransform,t.slice()),s=n.getExtent();if(s&&!Rn(s,r))return null;const o=e.viewState,a=n.getRenderSource(),l=a.getTileGridForProjection(o.projection),h=a.getTilePixelRatio(e.pixelRatio);for(let c=l.getZForResolution(o.resolution);c>=l.getMinZoom();--c){const u=l.getTileCoordForCoordAndZ(r,c),f=this.getTile(c,u[1],u[2],e);if(!f||f.getState()!==W.LOADED)continue;const g=l.getOrigin(c),d=Xt(l.getTileSize(c)),m=l.getResolution(c);let p;if(f instanceof nh||f instanceof oh)p=f.getImage();else if(f instanceof Al){if(p=Lo(f.getData()),!p)continue}else continue;const y=Math.floor(h*((r[0]-g[0])/m-u[1]*d[0])),w=Math.floor(h*((g[1]-r[1])/m-u[2]*d[1])),A=Math.round(h*a.getGutterForProjection(o.projection));return this.getImageData(p,y+A,w+A)}return null}prepareFrame(t){this.renderedProjection?t.viewState.projection!==this.renderedProjection&&(this.tileCache_.clear(),this.renderedProjection=t.viewState.projection):this.renderedProjection=t.viewState.projection;const e=this.getLayer().getSource();if(!e)return!1;const n=e.getRevision();return this.renderedSourceRevision_?this.renderedSourceRevision_!==n&&(this.renderedSourceRevision_=n,this.renderedSourceKey_===e.getKey()&&(this.tileCache_.clear(),this.sourceTileCache_?.clear())):this.renderedSourceRevision_=n,!0}enqueueTilesForNextExtent(){return!0}enqueueTiles(t,e,n,r,s){const o=t.viewState,a=this.getLayer(),l=a.getRenderSource(),h=l.getTileGridForProjection(o.projection),c=ot(l);c in t.wantedTiles||(t.wantedTiles[c]={});const u=t.wantedTiles[c],f=a.getMapInternal(),g=Math.max(n-s,h.getMinZoom(),h.getZForResolution(Math.min(a.getMaxResolution(),f?f.getView().getResolutionForZoom(Math.max(a.getMinZoom(),0)):h.getResolution(0)),l.zDirection)),d=o.rotation,m=d?Dc(o.center,o.resolution,d,t.size):void 0;for(let p=n;p>=g;--p){const y=h.getTileRangeForExtentAndZ(e,p,this.tempTileRange_),w=h.getResolution(p);for(let A=y.minX;A<=y.maxX;++A)for(let x=y.minY;x<=y.maxY;++x){if(d&&!h.tileCoordIntersectsViewport([p,A,x],m))continue;const C=this.getTile(p,A,x,t);if(!C||!no(r,C,p))continue;const E=C.getKey();if(u[E]=!0,C.getState()===W.IDLE&&!t.tileQueue.isKeyQueued(E)){const T=ts(p,A,x,this.tempTileCoord_);t.tileQueue.enqueue([C,c,h.getTileCoordCenter(T),w])}}}}findStaleTile_(t,e){const n=this.tileCache_,r=t[0],s=t[1],o=t[2],a=this.getStaleKeys();for(let l=0;l<a.length;++l){const h=kr(this.getLayer().getSource(),a[l],r,s,o);if(n.containsKey(h)){const c=n.peek(h);if(c.getState()===W.LOADED)return c.endTransition(ot(this)),no(e,c,r),!0}}return!1}findAltTiles_(t,e,n,r){const s=t.getTileRangeForTileCoordAndZ(e,n,this.tempTileRange_);if(!s)return!1;let o=!0;const a=this.tileCache_,l=this.getLayer().getRenderSource(),h=l.getKey();for(let c=s.minX;c<=s.maxX;++c)for(let u=s.minY;u<=s.maxY;++u){const f=kr(l,h,n,c,u);let g=!1;if(a.containsKey(f)){const d=a.peek(f);d.getState()===W.LOADED&&(no(r,d,n),g=!0)}g||(o=!1)}return o}renderFrame(t,e){this.renderComplete=!0;const n=t.layerStatesArray[t.layerIndex],r=t.viewState,s=r.projection,o=r.resolution,a=r.center,l=t.pixelRatio,h=this.getLayer(),c=h.getSource(),u=c.getTileGridForProjection(s),f=u.getZForResolution(o,c.zDirection),g=u.getResolution(f),d=c.getKey();this.renderedSourceKey_?this.renderedSourceKey_!==d&&(this.prependStaleKey(this.renderedSourceKey_),this.renderedSourceKey_=d):this.renderedSourceKey_=d;let m=t.extent;const p=c.getTilePixelRatio(l);this.prepareContainer(t,e);const y=this.context.canvas.width,w=this.context.canvas.height,A=n.extent&&fe(n.extent);A&&(m=Je(m,fe(n.extent)));const x=g*y/2/p,C=g*w/2/p,v=[a[0]-x,a[1]-C,a[0]+x,a[1]+C],E={};this.renderedTiles.length=0;const T=h.getPreload();if(t.nextExtent&&this.enqueueTilesForNextExtent()){const F=u.getZForResolution(r.nextResolution,c.zDirection),X=Tl(t,t.nextExtent);this.enqueueTiles(t,X,F,E,T)}const b=Tl(t,m);if(this.enqueueTiles(t,b,f,E,0),T>0&&setTimeout(()=>{this.enqueueTiles(t,b,f-1,E,T-1)},0),!(f in E))return this.container;const R=ot(this),_=t.time;for(const F of E[f]){const X=F.getState();if(X===W.EMPTY)continue;const k=F.tileCoord;if(X===W.LOADED&&F.getAlpha(R,_)===1){F.endTransition(R);continue}if(X!==W.ERROR&&(this.renderComplete=!1),this.findStaleTile_(k,E)){$d(E,F,f),t.animate=!0;continue}if(this.findAltTiles_(u,k,f+1,E))continue;const V=u.getMinZoom();for(let K=f-1;K>=V&&!this.findAltTiles_(u,k,K,E);--K);}const M=g/o*l/p,D=this.getRenderContext(t);Ie(this.tempTransform,y/2,w/2,M,M,0,-y/2,-w/2),n.extent&&this.clipUnrotated(D,t,A),c.getInterpolate()||(D.imageSmoothingEnabled=!1),this.preRender(D,t);const I=Object.keys(E).map(Number);I.sort(Re);let N;const O=[],B=[];for(let F=I.length-1;F>=0;--F){const X=I[F],k=c.getTilePixelSize(X,l,s),L=u.getResolution(X)/g,V=k[0]*L*M,K=k[1]*L*M,Q=u.getTileCoordForCoordAndZ(Xn(v),X),$=u.getTileCoordExtent(Q),q=vt(this.tempTransform,[p*($[0]-v[0])/g,p*(v[3]-$[3])/g]),rt=p*c.getGutterForProjection(s);for(const at of E[X]){if(at.getState()!==W.LOADED)continue;const it=at.tileCoord,mt=Q[1]-it[1],Et=Math.round(q[0]-(mt-1)*V),zt=Q[2]-it[2],Mt=Math.round(q[1]-(zt-1)*K),wt=Math.round(q[0]-mt*V),_t=Math.round(q[1]-zt*K),Wt=Et-wt,jt=Mt-_t,ee=I.length===1;let le=!1;N=[wt,_t,wt+Wt,_t,wt+Wt,_t+jt,wt,_t+jt];for(let we=0,Ae=O.length;we<Ae;++we)if(!ee&&X<B[we]){const dt=O[we];Dt([wt,_t,wt+Wt,_t+jt],[dt[0],dt[3],dt[4],dt[7]])&&(le||(D.save(),le=!0),D.beginPath(),D.moveTo(N[0],N[1]),D.lineTo(N[2],N[3]),D.lineTo(N[4],N[5]),D.lineTo(N[6],N[7]),D.moveTo(dt[6],dt[7]),D.lineTo(dt[4],dt[5]),D.lineTo(dt[2],dt[3]),D.lineTo(dt[0],dt[1]),D.clip())}O.push(N),B.push(X),this.drawTile(at,t,wt,_t,Wt,jt,rt,ee),le&&D.restore(),this.renderedTiles.unshift(at),this.updateUsedTiles(t.usedTiles,c,at)}}if(this.renderedResolution=g,this.extentChanged=!this.renderedExtent_||!ps(this.renderedExtent_,v),this.renderedExtent_=v,this.renderedPixelRatio=l,this.postRender(this.context,t),n.extent&&D.restore(),D.imageSmoothingEnabled=!0,this.renderComplete){const F=(X,k)=>{const z=ot(c),L=k.wantedTiles[z],V=L?Object.keys(L).length:0;this.updateCacheSize(V),this.tileCache_.expireCache(),this.sourceTileCache_?.expireCache()};t.postRenderFunctions.push(F)}return this.container}updateCacheSize(t){this.tileCache_.highWaterMark=Math.max(this.tileCache_.highWaterMark,t*2)}drawTile(t,e,n,r,s,o,a,l){let h;if(t instanceof Al){if(h=Lo(t.getData()),!h)throw new Error("Rendering array data is not yet supported")}else h=this.getTileImage(t);if(!h)return;const c=this.getRenderContext(e),u=ot(this),f=e.layerStatesArray[e.layerIndex],g=f.opacity*(l?t.getAlpha(u,e.time):1),d=g!==c.globalAlpha;d&&(c.save(),c.globalAlpha=g),c.drawImage(h,a,a,h.width-2*a,h.height-2*a,n,r,s,o),d&&c.restore(),g!==f.opacity?e.animate=!0:l&&t.endTransition(u)}getImage(){const t=this.context;return t?t.canvas:null}getTileImage(t){return t.getImage()}updateUsedTiles(t,e,n){const r=ot(e);r in t||(t[r]={}),t[r][n.getKey()]=!0}}const st={OPACITY:"opacity",VISIBLE:"visible",EXTENT:"extent",Z_INDEX:"zIndex",MAX_RESOLUTION:"maxResolution",MIN_RESOLUTION:"minResolution",MAX_ZOOM:"maxZoom",MIN_ZOOM:"minZoom",SOURCE:"source",MAP:"map"};class eg extends Nn{constructor(t){super(),this.on,this.once,this.un,this.background_=t.background;const e=Object.assign({},t);typeof t.properties=="object"&&(delete e.properties,Object.assign(e,t.properties)),e[st.OPACITY]=t.opacity!==void 0?t.opacity:1,lt(typeof e[st.OPACITY]=="number","Layer opacity must be a number"),e[st.VISIBLE]=t.visible!==void 0?t.visible:!0,e[st.Z_INDEX]=t.zIndex,e[st.MAX_RESOLUTION]=t.maxResolution!==void 0?t.maxResolution:1/0,e[st.MIN_RESOLUTION]=t.minResolution!==void 0?t.minResolution:0,e[st.MIN_ZOOM]=t.minZoom!==void 0?t.minZoom:-1/0,e[st.MAX_ZOOM]=t.maxZoom!==void 0?t.maxZoom:1/0,this.className_=e.className!==void 0?e.className:"ol-layer",delete e.className,this.setProperties(e),this.state_=null}getBackground(){return this.background_}getClassName(){return this.className_}getLayerState(t){const e=this.state_||{layer:this,managed:t===void 0?!0:t},n=this.getZIndex();return e.opacity=ft(Math.round(this.getOpacity()*100)/100,0,1),e.visible=this.getVisible(),e.extent=this.getExtent(),e.zIndex=n===void 0&&!e.managed?1/0:n,e.maxResolution=this.getMaxResolution(),e.minResolution=Math.max(this.getMinResolution(),0),e.minZoom=this.getMinZoom(),e.maxZoom=this.getMaxZoom(),this.state_=e,e}getLayersArray(t){return U()}getLayerStatesArray(t){return U()}getExtent(){return this.get(st.EXTENT)}getMaxResolution(){return this.get(st.MAX_RESOLUTION)}getMinResolution(){return this.get(st.MIN_RESOLUTION)}getMinZoom(){return this.get(st.MIN_ZOOM)}getMaxZoom(){return this.get(st.MAX_ZOOM)}getOpacity(){return this.get(st.OPACITY)}getSourceState(){return U()}getVisible(){return this.get(st.VISIBLE)}getZIndex(){return this.get(st.Z_INDEX)}setBackground(t){this.background_=t,this.changed()}setExtent(t){this.set(st.EXTENT,t)}setMaxResolution(t){this.set(st.MAX_RESOLUTION,t)}setMinResolution(t){this.set(st.MIN_RESOLUTION,t)}setMaxZoom(t){this.set(st.MAX_ZOOM,t)}setMinZoom(t){this.set(st.MIN_ZOOM,t)}setOpacity(t){lt(typeof t=="number","Layer opacity must be a number"),this.set(st.OPACITY,t)}setVisible(t){this.set(st.VISIBLE,t)}setZIndex(t){this.set(st.Z_INDEX,t)}disposeInternal(){this.state_&&(this.state_.layer=null,this.state_=null),super.disposeInternal()}}class Sa extends eg{constructor(t){const e=Object.assign({},t);delete e.source,super(e),this.on,this.once,this.un,this.mapPrecomposeKey_=null,this.mapRenderKey_=null,this.sourceChangeKey_=null,this.renderer_=null,this.sourceReady_=!1,this.rendered=!1,t.render&&(this.render=t.render),t.map&&this.setMap(t.map),this.addChangeListener(st.SOURCE,this.handleSourcePropertyChange_);const n=t.source?t.source:null;this.setSource(n)}getLayersArray(t){return t=t||[],t.push(this),t}getLayerStatesArray(t){return t=t||[],t.push(this.getLayerState()),t}getSource(){return this.get(st.SOURCE)||null}getRenderSource(){return this.getSource()}getSourceState(){const t=this.getSource();return t?t.getState():"undefined"}handleSourceChange_(){this.changed(),!(this.sourceReady_||this.getSource().getState()!=="ready")&&(this.sourceReady_=!0,this.dispatchEvent("sourceready"))}handleSourcePropertyChange_(){this.sourceChangeKey_&&(Ut(this.sourceChangeKey_),this.sourceChangeKey_=null),this.sourceReady_=!1;const t=this.getSource();t&&(this.sourceChangeKey_=$t(t,yt.CHANGE,this.handleSourceChange_,this),t.getState()==="ready"&&(this.sourceReady_=!0,setTimeout(()=>{this.dispatchEvent("sourceready")},0))),this.changed()}getFeatures(t){return this.renderer_?this.renderer_.getFeatures(t):Promise.resolve([])}getData(t){return!this.renderer_||!this.rendered?null:this.renderer_.getData(t)}isVisible(t){let e;const n=this.getMapInternal();!t&&n&&(t=n.getView()),t instanceof _o?e={viewState:t.getState(),extent:t.calculateExtent()}:e=t,!e.layerStatesArray&&n&&(e.layerStatesArray=n.getLayerGroup().getLayerStatesArray());let r;if(e.layerStatesArray){if(r=e.layerStatesArray.find(o=>o.layer===this),!r)return!1}else r=this.getLayerState();const s=this.getExtent();return ng(r,e.viewState)&&(!s||Dt(s,e.extent))}getAttributions(t){if(!this.isVisible(t))return[];const e=this.getSource()?.getAttributions();if(!e)return[];const n=t instanceof _o?t.getViewStateAndExtent():t;let r=e(n);return Array.isArray(r)||(r=[r]),r}render(t,e){const n=this.getRenderer();return n.prepareFrame(t)?(this.rendered=!0,n.renderFrame(t,e)):null}unrender(){this.rendered=!1}getDeclutter(){}renderDeclutter(t,e){}renderDeferred(t){const e=this.getRenderer();e&&e.renderDeferred(t)}setMapInternal(t){t||this.unrender(),this.set(st.MAP,t)}getMapInternal(){return this.get(st.MAP)}setMap(t){this.mapPrecomposeKey_&&(Ut(this.mapPrecomposeKey_),this.mapPrecomposeKey_=null),t||this.changed(),this.mapRenderKey_&&(Ut(this.mapRenderKey_),this.mapRenderKey_=null),t&&(this.mapPrecomposeKey_=$t(t,gn.PRECOMPOSE,this.handlePrecompose_,this),this.mapRenderKey_=$t(this,yt.CHANGE,t.render,t),this.changed())}handlePrecompose_(t){const e=t.frameState.layerStatesArray,n=this.getLayerState(!1);lt(!e.some(r=>r.layer===n.layer),"A layer can only be added to the map once. Use either `layer.setMap()` or `map.addLayer()`, not both."),e.push(n)}setSource(t){this.set(st.SOURCE,t)}getRenderer(){return this.renderer_||(this.renderer_=this.createRenderer()),this.renderer_}hasRenderer(){return!!this.renderer_}createRenderer(){return null}clearRenderer(){this.renderer_&&(this.renderer_.dispose(),delete this.renderer_)}disposeInternal(){this.clearRenderer(),this.setSource(null),super.disposeInternal()}}function ng(i,t){if(!i.visible)return!1;const e=t.resolution;if(e<i.minResolution||e>=i.maxResolution)return!1;const n=t.zoom;return n>i.minZoom&&n<=i.maxZoom}const Er={PRELOAD:"preload",USE_INTERIM_TILES_ON_ERROR:"useInterimTilesOnError"};class ig extends Sa{constructor(t){t=t||{};const e=Object.assign({},t),n=t.cacheSize;delete t.cacheSize,delete e.preload,delete e.useInterimTilesOnError,super(e),this.on,this.once,this.un,this.cacheSize_=n,this.setPreload(t.preload!==void 0?t.preload:0),this.setUseInterimTilesOnError(t.useInterimTilesOnError!==void 0?t.useInterimTilesOnError:!0)}getCacheSize(){return this.cacheSize_}getPreload(){return this.get(Er.PRELOAD)}setPreload(t){this.set(Er.PRELOAD,t)}getUseInterimTilesOnError(){return this.get(Er.USE_INTERIM_TILES_ON_ERROR)}setUseInterimTilesOnError(t){this.set(Er.USE_INTERIM_TILES_ON_ERROR,t)}getData(t){return super.getData(t)}}class hh extends ig{constructor(t){super(t)}createRenderer(){return new tg(this,{cacheSize:this.getCacheSize()})}}const Zn=[0,0,0],Ge=5;class uh{constructor(t){this.minZoom=t.minZoom!==void 0?t.minZoom:0,this.resolutions_=t.resolutions,lt(qu(this.resolutions_,(r,s)=>s-r),"`resolutions` must be sorted in descending order");let e;if(!t.origins){for(let r=0,s=this.resolutions_.length-1;r<s;++r)if(!e)e=this.resolutions_[r]/this.resolutions_[r+1];else if(this.resolutions_[r]/this.resolutions_[r+1]!==e){e=void 0;break}}this.zoomFactor_=e,this.maxZoom=this.resolutions_.length-1,this.origin_=t.origin!==void 0?t.origin:null,this.origins_=null,t.origins!==void 0&&(this.origins_=t.origins,lt(this.origins_.length==this.resolutions_.length,"Number of `origins` and `resolutions` must be equal"));const n=t.extent;n!==void 0&&!this.origin_&&!this.origins_&&(this.origin_=Xn(n)),lt(!this.origin_&&this.origins_||this.origin_&&!this.origins_,"Either `origin` or `origins` must be configured, never both"),this.tileSizes_=null,t.tileSizes!==void 0&&(this.tileSizes_=t.tileSizes,lt(this.tileSizes_.length==this.resolutions_.length,"Number of `tileSizes` and `resolutions` must be equal")),this.tileSize_=t.tileSize!==void 0?t.tileSize:this.tileSizes_?null:wa,lt(!this.tileSize_&&this.tileSizes_||this.tileSize_&&!this.tileSizes_,"Either `tileSize` or `tileSizes` must be configured, never both"),this.extent_=n!==void 0?n:null,this.fullTileRanges_=null,this.tmpSize_=[0,0],this.tmpExtent_=[0,0,0,0],t.sizes!==void 0?this.fullTileRanges_=t.sizes.map((r,s)=>{const o=new Ca(Math.min(0,r[0]),Math.max(r[0]-1,-1),Math.min(0,r[1]),Math.max(r[1]-1,-1));if(n){const a=this.getTileRangeForExtentAndZ(n,s);o.minX=Math.max(a.minX,o.minX),o.maxX=Math.min(a.maxX,o.maxX),o.minY=Math.max(a.minY,o.minY),o.maxY=Math.min(a.maxY,o.maxY)}return o}):n&&this.calculateTileRanges_(n)}forEachTileCoord(t,e,n){const r=this.getTileRangeForExtentAndZ(t,e);for(let s=r.minX,o=r.maxX;s<=o;++s)for(let a=r.minY,l=r.maxY;a<=l;++a)n([e,s,a])}forEachTileCoordParentTileRange(t,e,n,r){let s,o,a,l=null,h=t[0]-1;for(this.zoomFactor_===2?(o=t[1],a=t[2]):l=this.getTileCoordExtent(t,r);h>=this.minZoom;){if(o!==void 0&&a!==void 0?(o=Math.floor(o/2),a=Math.floor(a/2),s=Qn(o,o,a,a,n)):s=this.getTileRangeForExtentAndZ(l,h,n),e(h,s))return!0;--h}return!1}getExtent(){return this.extent_}getMaxZoom(){return this.maxZoom}getMinZoom(){return this.minZoom}getOrigin(t){return this.origin_?this.origin_:this.origins_[t]}getResolution(t){return this.resolutions_[t]}getResolutions(){return this.resolutions_}getTileCoordChildTileRange(t,e,n){if(t[0]<this.maxZoom){if(this.zoomFactor_===2){const s=t[1]*2,o=t[2]*2;return Qn(s,s+1,o,o+1,e)}const r=this.getTileCoordExtent(t,n||this.tmpExtent_);return this.getTileRangeForExtentAndZ(r,t[0]+1,e)}return null}getTileRangeForTileCoordAndZ(t,e,n){if(e>this.maxZoom||e<this.minZoom)return null;const r=t[0],s=t[1],o=t[2];if(e===r)return Qn(s,o,s,o,n);if(this.zoomFactor_){const l=Math.pow(this.zoomFactor_,e-r),h=Math.floor(s*l),c=Math.floor(o*l);if(e<r)return Qn(h,h,c,c,n);const u=Math.floor(l*(s+1))-1,f=Math.floor(l*(o+1))-1;return Qn(h,u,c,f,n)}const a=this.getTileCoordExtent(t,this.tmpExtent_);return this.getTileRangeForExtentAndZ(a,e,n)}getTileRangeForExtentAndZ(t,e,n){this.getTileCoordForXYAndZ_(t[0],t[3],e,!1,Zn);const r=Zn[1],s=Zn[2];this.getTileCoordForXYAndZ_(t[2],t[1],e,!0,Zn);const o=Zn[1],a=Zn[2];return Qn(r,o,s,a,n)}getTileCoordCenter(t){const e=this.getOrigin(t[0]),n=this.getResolution(t[0]),r=Xt(this.getTileSize(t[0]),this.tmpSize_);return[e[0]+(t[1]+.5)*r[0]*n,e[1]-(t[2]+.5)*r[1]*n]}getTileCoordExtent(t,e){const n=this.getOrigin(t[0]),r=this.getResolution(t[0]),s=Xt(this.getTileSize(t[0]),this.tmpSize_),o=n[0]+t[1]*s[0]*r,a=n[1]-(t[2]+1)*s[1]*r,l=o+s[0]*r,h=a+s[1]*r;return $e(o,a,l,h,e)}getTileCoordForCoordAndResolution(t,e,n){return this.getTileCoordForXYAndResolution_(t[0],t[1],e,!1,n)}getTileCoordForXYAndResolution_(t,e,n,r,s){const o=this.getZForResolution(n),a=n/this.getResolution(o),l=this.getOrigin(o),h=Xt(this.getTileSize(o),this.tmpSize_);let c=a*(t-l[0])/n/h[0],u=a*(l[1]-e)/n/h[1];return r?(c=Ue(c,Ge)-1,u=Ue(u,Ge)-1):(c=wr(c,Ge),u=wr(u,Ge)),ts(o,c,u,s)}getTileCoordForXYAndZ_(t,e,n,r,s){const o=this.getOrigin(n),a=this.getResolution(n),l=Xt(this.getTileSize(n),this.tmpSize_);let h=(t-o[0])/a/l[0],c=(o[1]-e)/a/l[1];return r?(h=Ue(h,Ge)-1,c=Ue(c,Ge)-1):(h=wr(h,Ge),c=wr(c,Ge)),ts(n,h,c,s)}getTileCoordForCoordAndZ(t,e,n){return this.getTileCoordForXYAndZ_(t[0],t[1],e,!1,n)}getTileCoordResolution(t){return this.resolutions_[t[0]]}getTileSize(t){return this.tileSize_?this.tileSize_:this.tileSizes_[t]}getFullTileRange(t){return this.fullTileRanges_?this.fullTileRanges_[t]:this.extent_?this.getTileRangeForExtentAndZ(this.extent_,t):null}getZForResolution(t,e){const n=ds(this.resolutions_,t,e||0);return ft(n,this.minZoom,this.maxZoom)}tileCoordIntersectsViewport(t,e){return Kc(e,0,e.length,2,this.getTileCoordExtent(t))}calculateTileRanges_(t){const e=this.resolutions_.length,n=new Array(e);for(let r=this.minZoom;r<e;++r)n[r]=this.getTileRangeForExtentAndZ(t,r);this.fullTileRanges_=n}}function fh(i){let t=i.getDefaultTileGrid();return t||(t=ag(i),i.setDefaultTileGrid(t)),t}function rg(i,t,e){const n=t[0],r=i.getTileCoordCenter(t),s=Ra(e);if(!Rn(s,r)){const o=et(s),a=Math.ceil((s[0]-r[0])/o);return r[0]+=o*a,i.getTileCoordForCoordAndZ(r,n)}return t}function sg(i,t,e,n){n=n!==void 0?n:"top-left";const r=dh(i,t,e);return new uh({extent:i,origin:sf(i,n),resolutions:r,tileSize:e})}function og(i){const t=i||{},e=t.extent||ht("EPSG:3857").getExtent(),n={extent:e,minZoom:t.minZoom,tileSize:t.tileSize,resolutions:dh(e,t.maxZoom,t.tileSize,t.maxResolution)};return new uh(n)}function dh(i,t,e,n){t=t!==void 0?t:wd,e=Xt(e!==void 0?e:wa);const r=pt(i),s=et(i);n=n>0?n:Math.max(s/e[0],r/e[1]);const o=t+1,a=new Array(o);for(let l=0;l<o;++l)a[l]=n/Math.pow(2,l);return a}function ag(i,t,e,n){const r=Ra(i);return sg(r,t,e,n)}function Ra(i){i=ht(i);let t=i.getExtent();if(!t){const e=180*ta.degrees/i.getMetersPerUnit();t=$e(-e,-e,e,e)}return t}function gh(i,t){const e=[];Object.keys(t).forEach(function(r){t[r]!==null&&t[r]!==void 0&&e.push(r+"="+encodeURIComponent(t[r]))});const n=e.join("&");return i=i.replace(/[?&]$/,""),i+=i.includes("?")?"&":"?",i+n}const lg=/\{z\}/g,cg=/\{x\}/g,hg=/\{y\}/g,ug=/\{-y\}/g;function fg(i,t,e,n,r){return i.replace(lg,t.toString()).replace(cg,e.toString()).replace(hg,n.toString()).replace(ug,function(){if(r===void 0)throw new Error("If the URL template has a {-y} placeholder, the grid extent must be known");return(r-n).toString()})}function dg(i){const t=[];let e=/\{([a-z])-([a-z])\}/.exec(i);if(e){const n=e[1].charCodeAt(0),r=e[2].charCodeAt(0);let s;for(s=n;s<=r;++s)t.push(i.replace(e[0],String.fromCharCode(s)));return t}if(e=/\{(\d+)-(\d+)\}/.exec(i),e){const n=parseInt(e[2],10);for(let r=parseInt(e[1],10);r<=n;r++)t.push(i.replace(e[0],r.toString()));return t}return t.push(i),t}function gg(i,t){return(function(e,n,r){if(!e)return;let s;const o=e[0];if(t){const a=t.getFullTileRange(o);a&&(s=a.getHeight()-1)}return fg(i,o,e[1],e[2],s)})}function mg(i,t){const e=i.length,n=new Array(e);for(let r=0;r<e;++r)n[r]=gg(i[r],t);return pg(n)}function pg(i){return i.length===1?i[0]:(function(t,e,n){if(!t)return;const r=ah(t),s=Cn(r,i.length);return i[s](t,e,n)})}class Pa extends Nn{constructor(t){super(),this.projection=ht(t.projection),this.attributions_=Sl(t.attributions),this.attributionsCollapsible_=t.attributionsCollapsible??!0,this.loading=!1,this.state_=t.state!==void 0?t.state:"ready",this.wrapX_=t.wrapX!==void 0?t.wrapX:!1,this.interpolate_=!!t.interpolate,this.viewResolver=null,this.viewRejector=null;const e=this;this.viewPromise_=new Promise(function(n,r){e.viewResolver=n,e.viewRejector=r})}getAttributions(){return this.attributions_}getAttributionsCollapsible(){return this.attributionsCollapsible_}getProjection(){return this.projection}getResolutions(t){return null}getView(){return this.viewPromise_}getState(){return this.state_}getWrapX(){return this.wrapX_}getInterpolate(){return this.interpolate_}refresh(){this.changed()}setAttributions(t){this.attributions_=Sl(t),this.changed()}setState(t){this.state_=t,this.changed()}}function Sl(i){return i?typeof i=="function"?i:(Array.isArray(i)||(i=[i]),t=>i):null}class yg extends Pa{constructor(t){super({attributions:t.attributions,attributionsCollapsible:t.attributionsCollapsible,projection:t.projection,state:t.state,wrapX:t.wrapX,interpolate:t.interpolate}),this.on,this.once,this.un,this.tilePixelRatio_=t.tilePixelRatio!==void 0?t.tilePixelRatio:1,this.tileGrid=t.tileGrid!==void 0?t.tileGrid:null;const e=[256,256];this.tileGrid&&Xt(this.tileGrid.getTileSize(this.tileGrid.getMinZoom()),e),this.tmpSize=[0,0],this.key_=t.key||ot(this),this.tileOptions={transition:t.transition,interpolate:t.interpolate},this.zDirection=t.zDirection?t.zDirection:0}getGutterForProjection(t){return 0}getKey(){return this.key_}setKey(t){this.key_!==t&&(this.key_=t,this.changed())}getResolutions(t){const e=t?this.getTileGridForProjection(t):this.tileGrid;return e?e.getResolutions():null}getTile(t,e,n,r,s,o){return U()}getTileGrid(){return this.tileGrid}getTileGridForProjection(t){return this.tileGrid?this.tileGrid:fh(t)}getTilePixelRatio(t){return this.tilePixelRatio_}getTilePixelSize(t,e,n){const r=this.getTileGridForProjection(n),s=this.getTilePixelRatio(e),o=Xt(r.getTileSize(t),this.tmpSize);return s==1?o:Nd(o,s,this.tmpSize)}getTileCoordForTileUrlFunction(t,e){const n=e!==void 0?e:this.getProjection(),r=e!==void 0?this.getTileGridForProjection(n):this.tileGrid||this.getTileGridForProjection(n);return this.getWrapX()&&n.isGlobal()&&(t=rg(r,t,n)),Gd(t,r)?t:null}clear(){}refresh(){this.clear(),super.refresh()}}class wg extends Fn{constructor(t,e){super(t),this.tile=e}}const io={TILELOADSTART:"tileloadstart",TILELOADEND:"tileloadend",TILELOADERROR:"tileloaderror"};class _a extends yg{constructor(t){super({attributions:t.attributions,cacheSize:t.cacheSize,projection:t.projection,state:t.state,tileGrid:t.tileGrid,tilePixelRatio:t.tilePixelRatio,wrapX:t.wrapX,transition:t.transition,interpolate:t.interpolate,key:t.key,attributionsCollapsible:t.attributionsCollapsible,zDirection:t.zDirection}),this.generateTileUrlFunction_=this.tileUrlFunction===_a.prototype.tileUrlFunction,this.tileLoadFunction=t.tileLoadFunction,t.tileUrlFunction&&(this.tileUrlFunction=t.tileUrlFunction),this.urls=null,t.urls?this.setUrls(t.urls):t.url&&this.setUrl(t.url),this.tileLoadingKeys_={}}getTileLoadFunction(){return this.tileLoadFunction}getTileUrlFunction(){return Object.getPrototypeOf(this).tileUrlFunction===this.tileUrlFunction?this.tileUrlFunction.bind(this):this.tileUrlFunction}getUrls(){return this.urls}handleTileChange(t){const e=t.target,n=ot(e),r=e.getState();let s;r==W.LOADING?(this.tileLoadingKeys_[n]=!0,s=io.TILELOADSTART):n in this.tileLoadingKeys_&&(delete this.tileLoadingKeys_[n],s=r==W.ERROR?io.TILELOADERROR:r==W.LOADED?io.TILELOADEND:void 0),s!=null&&this.dispatchEvent(new wg(s,e))}setTileLoadFunction(t){this.tileLoadFunction=t,this.changed()}setTileUrlFunction(t,e){this.tileUrlFunction=t,typeof e<"u"?this.setKey(e):this.changed()}setUrl(t){const e=dg(t);this.urls=e,this.setUrls(e)}setUrls(t){this.urls=t;const e=t.join(`
2
+ `);this.generateTileUrlFunction_?this.setTileUrlFunction(mg(t,this.tileGrid),e):this.setKey(e)}tileUrlFunction(t,e,n){}}class mh extends _a{constructor(t){super({attributions:t.attributions,cacheSize:t.cacheSize,projection:t.projection,state:t.state,tileGrid:t.tileGrid,tileLoadFunction:t.tileLoadFunction?t.tileLoadFunction:Ag,tilePixelRatio:t.tilePixelRatio,tileUrlFunction:t.tileUrlFunction,url:t.url,urls:t.urls,wrapX:t.wrapX,transition:t.transition,interpolate:t.interpolate!==void 0?t.interpolate:!0,key:t.key,attributionsCollapsible:t.attributionsCollapsible,zDirection:t.zDirection}),this.crossOrigin=t.crossOrigin!==void 0?t.crossOrigin:null,this.tileClass=t.tileClass!==void 0?t.tileClass:nh,this.tileGridForProjection={},this.reprojectionErrorThreshold_=t.reprojectionErrorThreshold,this.renderReprojectionEdges_=!1}getGutterForProjection(t){return this.getProjection()&&t&&!En(this.getProjection(),t)?0:this.getGutter()}getGutter(){return 0}getKey(){let t=super.getKey();return this.getInterpolate()||(t+=":disable-interpolation"),t}getTileGridForProjection(t){const e=this.getProjection();if(this.tileGrid&&(!e||En(e,t)))return this.tileGrid;const n=ot(t);return n in this.tileGridForProjection||(this.tileGridForProjection[n]=fh(t)),this.tileGridForProjection[n]}createTile_(t,e,n,r,s,o){const a=[t,e,n],l=this.getTileCoordForTileUrlFunction(a,s),h=l?this.tileUrlFunction(l,r,s):void 0,c=new this.tileClass(a,h!==void 0?W.IDLE:W.EMPTY,h!==void 0?h:"",this.crossOrigin,this.tileLoadFunction,this.tileOptions);return c.key=o,c.addEventListener(yt.CHANGE,this.handleTileChange.bind(this)),c}getTile(t,e,n,r,s,o){const a=this.getProjection();if(!a||!s||En(a,s))return this.getTileInternal(t,e,n,r,a||s);const l=[t,e,n],h=this.getKey(),c=this.getTileGridForProjection(a),u=this.getTileGridForProjection(s),f=this.getTileCoordForTileUrlFunction(l,s),g=new oh(a,c,s,u,l,f,this.getTilePixelRatio(r),this.getGutter(),(d,m,p,y)=>this.getTileInternal(d,m,p,y,a,o),this.reprojectionErrorThreshold_,this.renderReprojectionEdges_,this.tileOptions);return g.key=h,g}getTileInternal(t,e,n,r,s,o){const a=this.getKey(),l=kr(this,a,t,e,n);if(o&&o.containsKey(l))return o.get(l);const h=this.createTile_(t,e,n,r,s,a);return o?.set(l,h),h}setRenderReprojectionEdges(t){this.renderReprojectionEdges_!=t&&(this.renderReprojectionEdges_=t,this.changed())}setTileGridForProjection(t,e){const n=ht(t);if(n){const r=ot(n);r in this.tileGridForProjection||(this.tileGridForProjection[r]=e)}}}function Ag(i,t){if(Ln){const e=i.getCrossOrigin();let n="same-origin",r="same-origin";e==="anonymous"||e===""?(n="cors",r="omit"):e==="use-credentials"&&(n="cors",r="include"),fetch(t,{mode:n,credentials:r}).then(s=>{if(!s.ok)throw new Error(`HTTP ${s.status}`);return s.blob()}).then(s=>createImageBitmap(s)).then(s=>{const o=i.getImage();o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0),s.close?.(),o.dispatchEvent(new Event("load"))}).catch(()=>{i.getImage().dispatchEvent(new Event("error"))});return}i.getImage().src=t}class xg extends mh{constructor(t){t=t||{};const e=t.projection!==void 0?t.projection:"EPSG:3857",n=t.tileGrid!==void 0?t.tileGrid:og({extent:Ra(e),maxResolution:t.maxResolution,maxZoom:t.maxZoom,minZoom:t.minZoom,tileSize:t.tileSize});super({attributions:t.attributions,cacheSize:t.cacheSize,crossOrigin:t.crossOrigin,interpolate:t.interpolate,projection:e,reprojectionErrorThreshold:t.reprojectionErrorThreshold,tileGrid:n,tileLoadFunction:t.tileLoadFunction,tilePixelRatio:t.tilePixelRatio,tileUrlFunction:t.tileUrlFunction,url:t.url,urls:t.urls,wrapX:t.wrapX!==void 0?t.wrapX:!0,transition:t.transition,attributionsCollapsible:t.attributionsCollapsible,zDirection:t.zDirection}),this.gutter_=t.gutter!==void 0?t.gutter:0}getGutter(){return this.gutter_}}class vn extends Nn{constructor(t){if(super(),this.on,this.once,this.un,this.id_=void 0,this.geometryName_="geometry",this.style_=null,this.styleFunction_=void 0,this.geometryChangeKey_=null,this.addChangeListener(this.geometryName_,this.handleGeometryChanged_),t)if(typeof t.getSimplifiedGeometry=="function"){const e=t;this.setGeometry(e)}else{const e=t;this.setProperties(e)}}clone(){const t=new vn(this.hasProperties()?this.getProperties():null);t.setGeometryName(this.getGeometryName());const e=this.getGeometry();e&&t.setGeometry(e.clone());const n=this.getStyle();return n&&t.setStyle(n),t}getGeometry(){return this.get(this.geometryName_)}getId(){return this.id_}getGeometryName(){return this.geometryName_}getStyle(){return this.style_}getStyleFunction(){return this.styleFunction_}handleGeometryChange_(){this.changed()}handleGeometryChanged_(){this.geometryChangeKey_&&(Ut(this.geometryChangeKey_),this.geometryChangeKey_=null);const t=this.getGeometry();t&&(this.geometryChangeKey_=$t(t,yt.CHANGE,this.handleGeometryChange_,this)),this.changed()}setGeometry(t){this.set(this.geometryName_,t)}setStyle(t){this.style_=t,this.styleFunction_=t?Cg(t):void 0,this.changed()}setId(t){this.id_=t,this.changed()}setGeometryName(t){this.removeChangeListener(this.geometryName_,this.handleGeometryChanged_),this.geometryName_=t,this.addChangeListener(this.geometryName_,this.handleGeometryChanged_),this.handleGeometryChanged_()}}function Cg(i){if(typeof i=="function")return i;let t;return Array.isArray(i)?t=i:(lt(typeof i.getZIndex=="function","Expected an `ol/style/Style` or an array of `ol/style/Style.js`"),t=[i]),function(){return t}}const ri={ADD:"add",REMOVE:"remove"},Rl={LENGTH:"length"};class vr extends Fn{constructor(t,e,n){super(t),this.element=e,this.index=n}}class Eg extends Nn{constructor(t,e){if(super(),this.on,this.once,this.un,e=e||{},this.unique_=!!e.unique,this.array_=t??[],this.unique_)for(let n=1,r=this.array_.length;n<r;++n)this.assertUnique_(this.array_[n],n);this.updateLength_()}clear(){for(;this.getLength()>0;)this.pop()}extend(t){for(let e=0,n=t.length;e<n;++e)this.push(t[e]);return this}forEach(t){const e=this.array_;for(let n=0,r=e.length;n<r;++n)t(e[n],n,e)}getArray(){return this.array_}item(t){return this.array_[t]}getLength(){return this.get(Rl.LENGTH)}insertAt(t,e){if(t<0||t>this.getLength())throw new Error("Index out of bounds: "+t);this.unique_&&this.assertUnique_(e),this.array_.splice(t,0,e),this.updateLength_(),this.dispatchEvent(new vr(ri.ADD,e,t))}pop(){return this.removeAt(this.getLength()-1)}push(t){const e=this.getLength();return this.insertAt(e,t),this.getLength()}remove(t){const e=this.array_;for(let n=0,r=e.length;n<r;++n)if(e[n]===t)return this.removeAt(n)}removeAt(t){if(t<0||t>=this.getLength())return;const e=this.array_[t];return this.array_.splice(t,1),this.updateLength_(),this.dispatchEvent(new vr(ri.REMOVE,e,t)),e}setAt(t,e){const n=this.getLength();if(t>=n){this.insertAt(t,e);return}if(t<0)throw new Error("Index out of bounds: "+t);this.unique_&&this.assertUnique_(e,t);const r=this.array_[t];this.array_[t]=e,this.dispatchEvent(new vr(ri.REMOVE,r,t)),this.dispatchEvent(new vr(ri.ADD,e,t))}updateLength_(){this.set(Rl.LENGTH,this.array_.length)}assertUnique_(t,e){const n=this.array_;for(let r=0,s=n.length;r<s;++r)if(n[r]===t&&r!==e)throw new Error("Duplicate item added to a unique collection")}}let vg=!1;function bg(i,t,e,n,r,s,o){const a=new XMLHttpRequest;a.open("GET",typeof i=="function"?i(e,n,r):i,!0),t.getType()=="arraybuffer"&&(a.responseType="arraybuffer"),a.withCredentials=vg,a.onload=function(l){if(!a.status||a.status>=200&&a.status<300){const h=t.getType();try{let c;h=="text"||h=="json"?c=a.responseText:h=="xml"?c=a.responseXML||a.responseText:h=="arraybuffer"&&(c=a.response),c?s(t.readFeatures(c,{extent:e,featureProjection:r}),t.readProjection(c)):o()}catch{o()}}else o()},a.onerror=o,a.send()}function Pl(i,t){return function(e,n,r,s,o){bg(i,t,e,n,r,(a,l)=>{this.addFeatures(a),s!==void 0&&s(a)},()=>{this.changed(),o!==void 0&&o()})}}function Tg(i,t){return[[-1/0,-1/0,1/0,1/0]]}function ph(i,t,e,n){const r=[];let s=qt();for(let o=0,a=e.length;o<a;++o){const l=e[o];s=$o(i,t,l[0],n),r.push((s[0]+s[2])/2,(s[1]+s[3])/2),t=l[l.length-1]}return r}function es(i,t,e,n,r,s,o){let a,l;const h=(e-t)/n;if(h===1)a=t;else if(h===2)a=t,l=r;else if(h!==0){let c=i[t],u=i[t+1],f=0;const g=[0];for(let p=t+n;p<e;p+=n){const y=i[p],w=i[p+1];f+=Math.sqrt((y-c)*(y-c)+(w-u)*(w-u)),g.push(f),c=y,u=w}const d=r*f,m=Yu(g,d);m<0?(l=(d-g[-m-2])/(g[-m-1]-g[-m-2]),a=t+(-m-2)*n):a=t+m*n}o=o>1?o:2,s=s||new Array(o);for(let c=0;c<o;++c)s[c]=a===void 0?NaN:l===void 0?i[a+c]:Yt(i[a+c],i[a+n+c],l);return s}function Io(i,t,e,n,r,s){if(e==t)return null;let o;if(r<i[t+n-1])return s?(o=i.slice(t,t+n),o[n-1]=r,o):null;if(i[e-1]<r)return s?(o=i.slice(e-n,e),o[n-1]=r,o):null;if(r==i[t+n-1])return i.slice(t,t+n);let a=t/n,l=e/n;for(;a<l;){const f=a+l>>1;r<i[(f+1)*n-1]?l=f:a=f+1}const h=i[a*n-1];if(r==h)return i.slice((a-1)*n,(a-1)*n+n);const c=i[(a+1)*n-1],u=(r-h)/(c-h);o=[];for(let f=0;f<n-1;++f)o.push(Yt(i[(a-1)*n+f],i[a*n+f],u));return o.push(r),o}function Sg(i,t,e,n,r,s,o){if(o)return Io(i,t,e[e.length-1],n,r,s);let a;if(r<i[n-1])return s?(a=i.slice(0,n),a[n-1]=r,a):null;if(i[i.length-1]<r)return s?(a=i.slice(i.length-n),a[n-1]=r,a):null;for(let l=0,h=e.length;l<h;++l){const c=e[l];if(t!=c){if(r<i[t+n-1])return null;if(r<=i[c-1])return Io(i,t,c,n,r,!1);t=c}}return null}class ns extends Yc{constructor(t){super(),this.geometries_=t,this.changeEventsKeys_=[],this.listenGeometriesChange_()}unlistenGeometriesChange_(){this.changeEventsKeys_.forEach(Ut),this.changeEventsKeys_.length=0}listenGeometriesChange_(){const t=this.geometries_;for(let e=0,n=t.length;e<n;++e)this.changeEventsKeys_.push($t(t[e],yt.CHANGE,this.changed,this))}clone(){const t=new ns(ro(this.geometries_));return t.applyProperties(this),t}closestPointXY(t,e,n,r){if(r<Bn(this.getExtent(),t,e))return r;const s=this.geometries_;for(let o=0,a=s.length;o<a;++o)r=s[o].closestPointXY(t,e,n,r);return r}containsXY(t,e){const n=this.geometries_;for(let r=0,s=n.length;r<s;++r)if(n[r].containsXY(t,e))return!0;return!1}computeExtent(t){ms(t);const e=this.geometries_;for(let n=0,r=e.length;n<r;++n)Pc(t,e[n].getExtent());return t}getGeometries(){return ro(this.geometries_)}getGeometriesArray(){return this.geometries_}getGeometriesArrayRecursive(){let t=[];const e=this.geometries_;for(let n=0,r=e.length;n<r;++n)e[n].getType()===this.getType()?t=t.concat(e[n].getGeometriesArrayRecursive()):t.push(e[n]);return t}getSimplifiedGeometry(t){if(this.simplifiedGeometryRevision!==this.getRevision()&&(this.simplifiedGeometryMaxMinSquaredTolerance=0,this.simplifiedGeometryRevision=this.getRevision()),t<0||this.simplifiedGeometryMaxMinSquaredTolerance!==0&&t<this.simplifiedGeometryMaxMinSquaredTolerance)return this;const e=[],n=this.geometries_;let r=!1;for(let s=0,o=n.length;s<o;++s){const a=n[s],l=a.getSimplifiedGeometry(t);e.push(l),l!==a&&(r=!0)}return r?new ns(e):(this.simplifiedGeometryMaxMinSquaredTolerance=t,this)}getType(){return"GeometryCollection"}intersectsExtent(t){const e=this.geometries_;for(let n=0,r=e.length;n<r;++n)if(e[n].intersectsExtent(t))return!0;return!1}isEmpty(){return this.geometries_.length===0}rotate(t,e){const n=this.geometries_;for(let r=0,s=n.length;r<s;++r)n[r].rotate(t,e);this.changed()}scale(t,e,n){n||(n=ye(this.getExtent()));const r=this.geometries_;for(let s=0,o=r.length;s<o;++s)r[s].scale(t,e,n);this.changed()}setGeometries(t){this.setGeometriesArray(ro(t))}setGeometriesArray(t){this.unlistenGeometriesChange_(),this.geometries_=t,this.listenGeometriesChange_(),this.changed()}applyTransform(t){const e=this.geometries_;for(let n=0,r=e.length;n<r;++n)e[n].applyTransform(t);this.changed()}translate(t,e){const n=this.geometries_;for(let r=0,s=n.length;r<s;++r)n[r].translate(t,e);this.changed()}disposeInternal(){this.unlistenGeometriesChange_(),super.disposeInternal()}}function ro(i){return i.map(t=>t.clone())}function La(i,t,e,n){let r=i[t],s=i[t+1],o=0;for(let a=t+n;a<e;a+=n){const l=i[a],h=i[a+1];o+=Math.sqrt((l-r)*(l-r)+(h-s)*(h-s)),r=l,s=h}return o}class In extends Gn{constructor(t,e){super(),this.flatMidpoint_=null,this.flatMidpointRevision_=-1,this.maxDelta_=-1,this.maxDeltaRevision_=-1,e!==void 0&&!Array.isArray(t[0])?this.setFlatCoordinates(e,t):this.setCoordinates(t,e)}appendCoordinate(t){pe(this.flatCoordinates,t),this.changed()}clone(){const t=new In(this.flatCoordinates.slice(),this.layout);return t.applyProperties(this),t}closestPointXY(t,e,n,r){return r<Bn(this.getExtent(),t,e)?r:(this.maxDeltaRevision_!=this.getRevision()&&(this.maxDelta_=Math.sqrt(aa(this.flatCoordinates,0,this.flatCoordinates.length,this.stride,0)),this.maxDeltaRevision_=this.getRevision()),ca(this.flatCoordinates,0,this.flatCoordinates.length,this.stride,this.maxDelta_,!1,t,e,n,r))}forEachSegment(t){return Jc(this.flatCoordinates,0,this.flatCoordinates.length,this.stride,t)}getCoordinateAtM(t,e){return this.layout!="XYM"&&this.layout!="XYZM"?null:(e=e!==void 0?e:!1,Io(this.flatCoordinates,0,this.flatCoordinates.length,this.stride,t,e))}getCoordinates(){return qe(this.flatCoordinates,0,this.flatCoordinates.length,this.stride)}getCoordinateAt(t,e){return es(this.flatCoordinates,0,this.flatCoordinates.length,this.stride,t,e,this.stride)}getLength(){return La(this.flatCoordinates,0,this.flatCoordinates.length,this.stride)}getFlatMidpoint(){return this.flatMidpointRevision_!=this.getRevision()&&(this.flatMidpoint_=this.getCoordinateAt(.5,this.flatMidpoint_??void 0),this.flatMidpointRevision_=this.getRevision()),this.flatMidpoint_}getSimplifiedGeometryInternal(t){const e=[];return e.length=bs(this.flatCoordinates,0,this.flatCoordinates.length,this.stride,t,e,0),new In(e,"XY")}getType(){return"LineString"}intersectsExtent(t){return Ts(this.flatCoordinates,0,this.flatCoordinates.length,this.stride,t,this.getExtent())}setCoordinates(t,e){this.setLayout(e,t,1),this.flatCoordinates||(this.flatCoordinates=[]),this.flatCoordinates.length=vs(this.flatCoordinates,0,t,this.stride),this.changed()}}class is extends Gn{constructor(t,e,n){if(super(),this.ends_=[],this.maxDelta_=-1,this.maxDeltaRevision_=-1,Array.isArray(t[0]))this.setCoordinates(t,e);else if(e!==void 0&&n)this.setFlatCoordinates(e,t),this.ends_=n;else{const r=t,s=[],o=[];for(let l=0,h=r.length;l<h;++l){const c=r[l];pe(s,c.getFlatCoordinates()),o.push(s.length)}const a=r.length===0?this.getLayout():r[0].getLayout();this.setFlatCoordinates(a,s),this.ends_=o}}appendLineString(t){pe(this.flatCoordinates,t.getFlatCoordinates().slice()),this.ends_.push(this.flatCoordinates.length),this.changed()}clone(){const t=new is(this.flatCoordinates.slice(),this.layout,this.ends_.slice());return t.applyProperties(this),t}closestPointXY(t,e,n,r){return r<Bn(this.getExtent(),t,e)?r:(this.maxDeltaRevision_!=this.getRevision()&&(this.maxDelta_=Math.sqrt(la(this.flatCoordinates,0,this.ends_,this.stride,0)),this.maxDeltaRevision_=this.getRevision()),ha(this.flatCoordinates,0,this.ends_,this.stride,this.maxDelta_,!1,t,e,n,r))}getCoordinateAtM(t,e,n){return this.layout!="XYM"&&this.layout!="XYZM"||this.flatCoordinates.length===0?null:(e=e!==void 0?e:!1,n=n!==void 0?n:!1,Sg(this.flatCoordinates,0,this.ends_,this.stride,t,e,n))}getCoordinates(){return Ui(this.flatCoordinates,0,this.ends_,this.stride)}getEnds(){return this.ends_}getLineString(t){return t<0||this.ends_.length<=t?null:new In(this.flatCoordinates.slice(t===0?0:this.ends_[t-1],this.ends_[t]),this.layout)}getLineStrings(){const t=this.flatCoordinates,e=this.ends_,n=this.layout,r=[];let s=0;for(let o=0,a=e.length;o<a;++o){const l=e[o],h=new In(t.slice(s,l),n);r.push(h),s=l}return r}getLength(){const t=this.ends_;let e=0,n=0;for(let r=0,s=t.length;r<s;++r)n+=La(this.flatCoordinates,e,t[r],this.stride),e=t[r];return n}getFlatMidpoints(){const t=[],e=this.flatCoordinates;let n=0;const r=this.ends_,s=this.stride;for(let o=0,a=r.length;o<a;++o){const l=r[o],h=es(e,n,l,s,.5);pe(t,h),n=l}return t}getSimplifiedGeometryInternal(t){const e=[],n=[];return e.length=Qc(this.flatCoordinates,0,this.ends_,this.stride,t,e,0,n),new is(e,"XY",n)}getType(){return"MultiLineString"}intersectsExtent(t){return cd(this.flatCoordinates,0,this.ends_,this.stride,t)}setCoordinates(t,e){this.setLayout(e,t,2),this.flatCoordinates||(this.flatCoordinates=[]);const n=lr(this.flatCoordinates,0,t,this.stride,this.ends_);this.flatCoordinates.length=n.length===0?0:n[n.length-1],this.changed()}}class Rs extends Gn{constructor(t,e){super(),e&&!Array.isArray(t[0])?this.setFlatCoordinates(e,t):this.setCoordinates(t,e)}appendPoint(t){pe(this.flatCoordinates,t.getFlatCoordinates()),this.changed()}clone(){const t=new Rs(this.flatCoordinates.slice(),this.layout);return t.applyProperties(this),t}closestPointXY(t,e,n,r){if(r<Bn(this.getExtent(),t,e))return r;const s=this.flatCoordinates,o=this.stride;for(let a=0,l=s.length;a<l;a+=o){const h=xn(t,e,s[a],s[a+1]);if(h<r){r=h;for(let c=0;c<o;++c)n[c]=s[a+c];n.length=o}}return r}getCoordinates(){return qe(this.flatCoordinates,0,this.flatCoordinates.length,this.stride)}getPoint(t){const e=this.flatCoordinates.length/this.stride;return t<0||e<=t?null:new tn(this.flatCoordinates.slice(t*this.stride,(t+1)*this.stride),this.layout)}getPoints(){const t=this.flatCoordinates,e=this.layout,n=this.stride,r=[];for(let s=0,o=t.length;s<o;s+=n){const a=new tn(t.slice(s,s+n),e);r.push(a)}return r}getType(){return"MultiPoint"}intersectsExtent(t){const e=this.flatCoordinates,n=this.stride;for(let r=0,s=e.length;r<s;r+=n){const o=e[r],a=e[r+1];if(Ko(t,o,a))return!0}return!1}setCoordinates(t,e){this.setLayout(e,t,1),this.flatCoordinates||(this.flatCoordinates=[]),this.flatCoordinates.length=vs(this.flatCoordinates,0,t,this.stride),this.changed()}}class rs extends Gn{constructor(t,e,n){if(super(),this.endss_=[],this.flatInteriorPointsRevision_=-1,this.flatInteriorPoints_=null,this.maxDelta_=-1,this.maxDeltaRevision_=-1,this.orientedRevision_=-1,this.orientedFlatCoordinates_=null,!n&&!Array.isArray(t[0])){const r=t,s=[],o=[];for(let a=0,l=r.length;a<l;++a){const h=r[a],c=s.length,u=h.getEnds();for(let f=0,g=u.length;f<g;++f)u[f]+=c;pe(s,h.getFlatCoordinates()),o.push(u)}e=r.length===0?this.getLayout():r[0].getLayout(),t=s,n=o}e!==void 0&&n?(this.setFlatCoordinates(e,t),this.endss_=n):this.setCoordinates(t,e)}appendPolygon(t){let e;if(!this.flatCoordinates)this.flatCoordinates=t.getFlatCoordinates().slice(),e=t.getEnds().slice(),this.endss_.push();else{const n=this.flatCoordinates.length;pe(this.flatCoordinates,t.getFlatCoordinates()),e=t.getEnds().slice();for(let r=0,s=e.length;r<s;++r)e[r]+=n}this.endss_.push(e),this.changed()}clone(){const t=this.endss_.length,e=new Array(t);for(let r=0;r<t;++r)e[r]=this.endss_[r].slice();const n=new rs(this.flatCoordinates.slice(),this.layout,e);return n.applyProperties(this),n}closestPointXY(t,e,n,r){return r<Bn(this.getExtent(),t,e)?r:(this.maxDeltaRevision_!=this.getRevision()&&(this.maxDelta_=Math.sqrt(nd(this.flatCoordinates,0,this.endss_,this.stride,0)),this.maxDeltaRevision_=this.getRevision()),id(this.getOrientedFlatCoordinates(),0,this.endss_,this.stride,this.maxDelta_,!0,t,e,n,r))}containsXY(t,e){return ld(this.getOrientedFlatCoordinates(),0,this.endss_,this.stride,t,e)}getArea(){return ed(this.getOrientedFlatCoordinates(),0,this.endss_,this.stride)}getCoordinates(t){let e;return t!==void 0?(e=this.getOrientedFlatCoordinates().slice(),Po(e,0,this.endss_,this.stride,t)):e=this.flatCoordinates,Ro(e,0,this.endss_,this.stride)}getEndss(){return this.endss_}getFlatInteriorPoints(){if(this.flatInteriorPointsRevision_!=this.getRevision()){const t=ph(this.flatCoordinates,0,this.endss_,this.stride);this.flatInteriorPoints_=Zc(this.getOrientedFlatCoordinates(),0,this.endss_,this.stride,t),this.flatInteriorPointsRevision_=this.getRevision()}return this.flatInteriorPoints_}getInteriorPoints(){return new Rs(this.getFlatInteriorPoints().slice(),"XYM")}getOrientedFlatCoordinates(){if(this.orientedRevision_!=this.getRevision()){const t=this.flatCoordinates;th(t,0,this.endss_,this.stride)?this.orientedFlatCoordinates_=t:(this.orientedFlatCoordinates_=t.slice(),this.orientedFlatCoordinates_.length=Po(this.orientedFlatCoordinates_,0,this.endss_,this.stride)),this.orientedRevision_=this.getRevision()}return this.orientedFlatCoordinates_}getSimplifiedGeometryInternal(t){const e=[],n=[];return e.length=od(this.flatCoordinates,0,this.endss_,this.stride,Math.sqrt(t),e,0,n),new rs(e,"XY",n)}getPolygon(t){if(t<0||this.endss_.length<=t)return null;let e;if(t===0)e=0;else{const s=this.endss_[t-1];e=s[s.length-1]}const n=this.endss_[t].slice(),r=n[n.length-1];if(e!==0)for(let s=0,o=n.length;s<o;++s)n[s]-=e;return new Pn(this.flatCoordinates.slice(e,r),this.layout,n)}getPolygons(){const t=this.layout,e=this.flatCoordinates,n=this.endss_,r=[];let s=0;for(let o=0,a=n.length;o<a;++o){const l=n[o].slice(),h=l[l.length-1];if(s!==0)for(let u=0,f=l.length;u<f;++u)l[u]-=s;const c=new Pn(e.slice(s,h),t,l);r.push(c),s=h}return r}getType(){return"MultiPolygon"}intersectsExtent(t){return hd(this.getOrientedFlatCoordinates(),0,this.endss_,this.stride,t)}setCoordinates(t,e){this.setLayout(e,t,3),this.flatCoordinates||(this.flatCoordinates=[]);const n=qc(this.flatCoordinates,0,t,this.stride,this.endss_);if(n.length===0)this.flatCoordinates.length=0;else{const r=n[n.length-1];this.flatCoordinates.length=r.length===0?0:r[r.length-1]}this.changed()}}const _l=Pe();class Vt{constructor(t,e,n,r,s,o){this.styleFunction,this.extent_,this.id_=o,this.type_=t,this.flatCoordinates_=e,this.flatInteriorPoints_=null,this.flatMidpoints_=null,this.ends_=n||null,this.properties_=s,this.squaredTolerance_,this.stride_=r,this.simplifiedGeometry_}get(t){return this.properties_[t]}getExtent(){return this.extent_||(this.extent_=this.type_==="Point"?Rc(this.flatCoordinates_):$o(this.flatCoordinates_,0,this.flatCoordinates_.length,2)),this.extent_}getFlatInteriorPoint(){if(!this.flatInteriorPoints_){const t=ye(this.getExtent());this.flatInteriorPoints_=da(this.flatCoordinates_,0,this.ends_,2,t,0)}return this.flatInteriorPoints_}getFlatInteriorPoints(){if(!this.flatInteriorPoints_){const t=fd(this.flatCoordinates_,this.ends_),e=ph(this.flatCoordinates_,0,t,2);this.flatInteriorPoints_=Zc(this.flatCoordinates_,0,t,2,e)}return this.flatInteriorPoints_}getFlatMidpoint(){return this.flatMidpoints_||(this.flatMidpoints_=es(this.flatCoordinates_,0,this.flatCoordinates_.length,2,.5)),this.flatMidpoints_}getFlatMidpoints(){if(!this.flatMidpoints_){this.flatMidpoints_=[];const t=this.flatCoordinates_;let e=0;const n=this.ends_;for(let r=0,s=n.length;r<s;++r){const o=n[r],a=es(t,e,o,2,.5);pe(this.flatMidpoints_,a),e=o}}return this.flatMidpoints_}getId(){return this.id_}getOrientedFlatCoordinates(){return this.flatCoordinates_}getGeometry(){return this}getSimplifiedGeometry(t){return this}simplifyTransformed(t,e){return this}getProperties(){return this.properties_}getPropertiesInternal(){return this.properties_}getStride(){return this.stride_}getStyleFunction(){return this.styleFunction}getType(){return this.type_}transform(t){t=ht(t);const e=t.getExtent(),n=t.getWorldExtent();if(e&&n){const r=pt(n)/pt(e);Ie(_l,n[0],n[3],r,-r,0,0,0),Ke(this.flatCoordinates_,0,this.flatCoordinates_.length,2,_l,this.flatCoordinates_)}}applyTransform(t){t(this.flatCoordinates_,this.flatCoordinates_,this.stride_)}clone(){return new Vt(this.type_,this.flatCoordinates_.slice(),this.ends_?.slice(),this.stride_,Object.assign({},this.properties_),this.id_)}getEnds(){return this.ends_}enableSimplifyTransformed(){return this.simplifyTransformed=Sc((t,e)=>{if(t===this.squaredTolerance_)return this.simplifiedGeometry_;this.simplifiedGeometry_=this.clone(),e&&this.simplifiedGeometry_.applyTransform(e);const n=this.simplifiedGeometry_.getFlatCoordinates();let r;switch(this.type_){case"LineString":n.length=bs(n,0,this.simplifiedGeometry_.flatCoordinates_.length,this.simplifiedGeometry_.stride_,t,n,0),r=[n.length];break;case"MultiLineString":r=[],n.length=Qc(n,0,this.simplifiedGeometry_.ends_,this.simplifiedGeometry_.stride_,t,n,0,r);break;case"Polygon":r=[],n.length=ua(n,0,this.simplifiedGeometry_.ends_,this.simplifiedGeometry_.stride_,Math.sqrt(t),n,0,r);break}return r&&(this.simplifiedGeometry_=new Vt(this.type_,n,r,2,this.properties_,this.id_)),this.squaredTolerance_=t,this.simplifiedGeometry_}),this}}Vt.prototype.getFlatCoordinates=Vt.prototype.getOrientedFlatCoordinates;function yh(i,t,e=0,n=i.length-1,r=Rg){for(;n>e;){if(n-e>600){const l=n-e+1,h=t-e+1,c=Math.log(l),u=.5*Math.exp(2*c/3),f=.5*Math.sqrt(c*u*(l-u)/l)*(h-l/2<0?-1:1),g=Math.max(e,Math.floor(t-h*u/l+f)),d=Math.min(n,Math.floor(t+(l-h)*u/l+f));yh(i,t,g,d,r)}const s=i[t];let o=e,a=n;for(Si(i,e,t),r(i[n],s)>0&&Si(i,e,n);o<a;){for(Si(i,o,a),o++,a--;r(i[o],s)<0;)o++;for(;r(i[a],s)>0;)a--}r(i[e],s)===0?Si(i,e,a):(a++,Si(i,a,n)),a<=t&&(e=a+1),t<=a&&(n=a-1)}}function Si(i,t,e){const n=i[t];i[t]=i[e],i[e]=n}function Rg(i,t){return i<t?-1:i>t?1:0}let wh=class{constructor(t=9){this._maxEntries=Math.max(4,t),this._minEntries=Math.max(2,Math.ceil(this._maxEntries*.4)),this.clear()}all(){return this._all(this.data,[])}search(t){let e=this.data;const n=[];if(!Tr(t,e))return n;const r=this.toBBox,s=[];for(;e;){for(let o=0;o<e.children.length;o++){const a=e.children[o],l=e.leaf?r(a):a;Tr(t,l)&&(e.leaf?n.push(a):oo(t,l)?this._all(a,n):s.push(a))}e=s.pop()}return n}collides(t){let e=this.data;if(!Tr(t,e))return!1;const n=[];for(;e;){for(let r=0;r<e.children.length;r++){const s=e.children[r],o=e.leaf?this.toBBox(s):s;if(Tr(t,o)){if(e.leaf||oo(t,o))return!0;n.push(s)}}e=n.pop()}return!1}load(t){if(!(t&&t.length))return this;if(t.length<this._minEntries){for(let n=0;n<t.length;n++)this.insert(t[n]);return this}let e=this._build(t.slice(),0,t.length-1,0);if(!this.data.children.length)this.data=e;else if(this.data.height===e.height)this._splitRoot(this.data,e);else{if(this.data.height<e.height){const n=this.data;this.data=e,e=n}this._insert(e,this.data.height-e.height-1,!0)}return this}insert(t){return t&&this._insert(t,this.data.height-1),this}clear(){return this.data=ei([]),this}remove(t,e){if(!t)return this;let n=this.data;const r=this.toBBox(t),s=[],o=[];let a,l,h;for(;n||s.length;){if(n||(n=s.pop(),l=s[s.length-1],a=o.pop(),h=!0),n.leaf){const c=Pg(t,n.children,e);if(c!==-1)return n.children.splice(c,1),s.push(n),this._condense(s),this}!h&&!n.leaf&&oo(n,r)?(s.push(n),o.push(a),a=0,l=n,n=n.children[0]):l?(a++,n=l.children[a],h=!1):n=null}return this}toBBox(t){return t}compareMinX(t,e){return t.minX-e.minX}compareMinY(t,e){return t.minY-e.minY}toJSON(){return this.data}fromJSON(t){return this.data=t,this}_all(t,e){const n=[];for(;t;)t.leaf?e.push(...t.children):n.push(...t.children),t=n.pop();return e}_build(t,e,n,r){const s=n-e+1;let o=this._maxEntries,a;if(s<=o)return a=ei(t.slice(e,n+1)),Jn(a,this.toBBox),a;r||(r=Math.ceil(Math.log(s)/Math.log(o)),o=Math.ceil(s/Math.pow(o,r-1))),a=ei([]),a.leaf=!1,a.height=r;const l=Math.ceil(s/o),h=l*Math.ceil(Math.sqrt(o));Ll(t,e,n,h,this.compareMinX);for(let c=e;c<=n;c+=h){const u=Math.min(c+h-1,n);Ll(t,c,u,l,this.compareMinY);for(let f=c;f<=u;f+=l){const g=Math.min(f+l-1,u);a.children.push(this._build(t,f,g,r-1))}}return Jn(a,this.toBBox),a}_chooseSubtree(t,e,n,r){for(;r.push(e),!(e.leaf||r.length-1===n);){let s=1/0,o=1/0,a;for(let l=0;l<e.children.length;l++){const h=e.children[l],c=so(h),u=Ig(t,h)-c;u<o?(o=u,s=c<s?c:s,a=h):u===o&&c<s&&(s=c,a=h)}e=a||e.children[0]}return e}_insert(t,e,n){const r=n?t:this.toBBox(t),s=[],o=this._chooseSubtree(r,this.data,e,s);for(o.children.push(t),Mi(o,r);e>=0&&s[e].children.length>this._maxEntries;)this._split(s,e),e--;this._adjustParentBBoxes(r,s,e)}_split(t,e){const n=t[e],r=n.children.length,s=this._minEntries;this._chooseSplitAxis(n,s,r);const o=this._chooseSplitIndex(n,s,r),a=ei(n.children.splice(o,n.children.length-o));a.height=n.height,a.leaf=n.leaf,Jn(n,this.toBBox),Jn(a,this.toBBox),e?t[e-1].children.push(a):this._splitRoot(n,a)}_splitRoot(t,e){this.data=ei([t,e]),this.data.height=t.height+1,this.data.leaf=!1,Jn(this.data,this.toBBox)}_chooseSplitIndex(t,e,n){let r,s=1/0,o=1/0;for(let a=e;a<=n-e;a++){const l=Di(t,0,a,this.toBBox),h=Di(t,a,n,this.toBBox),c=Dg(l,h),u=so(l)+so(h);c<s?(s=c,r=a,o=u<o?u:o):c===s&&u<o&&(o=u,r=a)}return r||n-e}_chooseSplitAxis(t,e,n){const r=t.leaf?this.compareMinX:_g,s=t.leaf?this.compareMinY:Lg,o=this._allDistMargin(t,e,n,r),a=this._allDistMargin(t,e,n,s);o<a&&t.children.sort(r)}_allDistMargin(t,e,n,r){t.children.sort(r);const s=this.toBBox,o=Di(t,0,e,s),a=Di(t,n-e,n,s);let l=br(o)+br(a);for(let h=e;h<n-e;h++){const c=t.children[h];Mi(o,t.leaf?s(c):c),l+=br(o)}for(let h=n-e-1;h>=e;h--){const c=t.children[h];Mi(a,t.leaf?s(c):c),l+=br(a)}return l}_adjustParentBBoxes(t,e,n){for(let r=n;r>=0;r--)Mi(e[r],t)}_condense(t){for(let e=t.length-1,n;e>=0;e--)t[e].children.length===0?e>0?(n=t[e-1].children,n.splice(n.indexOf(t[e]),1)):this.clear():Jn(t[e],this.toBBox)}};function Pg(i,t,e){if(!e)return t.indexOf(i);for(let n=0;n<t.length;n++)if(e(i,t[n]))return n;return-1}function Jn(i,t){Di(i,0,i.children.length,t,i)}function Di(i,t,e,n,r){r||(r=ei(null)),r.minX=1/0,r.minY=1/0,r.maxX=-1/0,r.maxY=-1/0;for(let s=t;s<e;s++){const o=i.children[s];Mi(r,i.leaf?n(o):o)}return r}function Mi(i,t){return i.minX=Math.min(i.minX,t.minX),i.minY=Math.min(i.minY,t.minY),i.maxX=Math.max(i.maxX,t.maxX),i.maxY=Math.max(i.maxY,t.maxY),i}function _g(i,t){return i.minX-t.minX}function Lg(i,t){return i.minY-t.minY}function so(i){return(i.maxX-i.minX)*(i.maxY-i.minY)}function br(i){return i.maxX-i.minX+(i.maxY-i.minY)}function Ig(i,t){return(Math.max(t.maxX,i.maxX)-Math.min(t.minX,i.minX))*(Math.max(t.maxY,i.maxY)-Math.min(t.minY,i.minY))}function Dg(i,t){const e=Math.max(i.minX,t.minX),n=Math.max(i.minY,t.minY),r=Math.min(i.maxX,t.maxX),s=Math.min(i.maxY,t.maxY);return Math.max(0,r-e)*Math.max(0,s-n)}function oo(i,t){return i.minX<=t.minX&&i.minY<=t.minY&&t.maxX<=i.maxX&&t.maxY<=i.maxY}function Tr(i,t){return t.minX<=i.maxX&&t.minY<=i.maxY&&t.maxX>=i.minX&&t.maxY>=i.minY}function ei(i){return{children:i,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function Ll(i,t,e,n,r){const s=[t,e];for(;s.length;){if(e=s.pop(),t=s.pop(),e-t<=n)continue;const o=t+Math.ceil((e-t)/n/2)*n;yh(i,o,t,e,r),s.push(t,o,o,e)}}class Il{constructor(t){this.rbush_=new wh(t),this.items_={}}insert(t,e){const n={minX:t[0],minY:t[1],maxX:t[2],maxY:t[3],value:e};this.rbush_.insert(n),this.items_[ot(e)]=n}load(t,e){const n=new Array(e.length);for(let r=0,s=e.length;r<s;r++){const o=t[r],a=e[r],l={minX:o[0],minY:o[1],maxX:o[2],maxY:o[3],value:a};n[r]=l,this.items_[ot(a)]=l}this.rbush_.load(n)}remove(t){const e=ot(t),n=this.items_[e];return delete this.items_[e],this.rbush_.remove(n)!==null}update(t,e){const n=this.items_[ot(e)],r=[n.minX,n.minY,n.maxX,n.maxY];ps(r,t)||(this.remove(e),this.insert(t,e))}getAll(){return this.rbush_.all().map(function(e){return e.value})}getInExtent(t){const e={minX:t[0],minY:t[1],maxX:t[2],maxY:t[3]};return this.rbush_.search(e).map(function(r){return r.value})}forEach(t){return this.forEach_(this.getAll(),t)}forEachInExtent(t,e){return this.forEach_(this.getInExtent(t),e)}forEach_(t,e){let n;for(let r=0,s=t.length;r<s;r++)if(n=e(t[r]),n)return n;return n}isEmpty(){return Sn(this.items_)}clear(){this.rbush_.clear(),this.items_={}}getExtent(t){const e=this.rbush_.toJSON();return $e(e.minX,e.minY,e.maxX,e.maxY,t)}concat(t){this.rbush_.load(t.rbush_.all());for(const e in t.items_)this.items_[e]=t.items_[e]}}const Kt={ADDFEATURE:"addfeature",CHANGEFEATURE:"changefeature",CLEAR:"clear",REMOVEFEATURE:"removefeature",FEATURESLOADSTART:"featuresloadstart",FEATURESLOADEND:"featuresloadend",FEATURESLOADERROR:"featuresloaderror"};class ke extends Fn{constructor(t,e,n){super(t),this.feature=e,this.features=n}}class Hi extends Pa{constructor(t){t=t||{},super({attributions:t.attributions,interpolate:!0,projection:void 0,state:"ready",wrapX:t.wrapX!==void 0?t.wrapX:!0}),this.on,this.once,this.un,this.loader_=Vr,this.format_=t.format||null,this.overlaps_=t.overlaps===void 0?!0:t.overlaps,this.url_=t.url,t.loader!==void 0?this.loader_=t.loader:this.url_!==void 0&&(lt(this.format_,"`format` must be set when `url` is set"),this.loader_=Pl(this.url_,this.format_)),this.strategy_=t.strategy!==void 0?t.strategy:Tg;const e=t.useSpatialIndex!==void 0?t.useSpatialIndex:!0;this.featuresRtree_=e?new Il:null,this.loadedExtentsRtree_=new Il,this.loadingExtentsCount_=0,this.nullGeometryFeatures_={},this.idIndex_={},this.uidIndex_={},this.featureChangeKeys_={},this.featuresCollection_=null;let n,r;Array.isArray(t.features)?r=t.features:t.features&&(n=t.features,r=n.getArray()),!e&&n===void 0&&(n=new Eg(r)),r!==void 0&&this.addFeaturesInternal(r),n!==void 0&&this.bindFeaturesCollection_(n)}addFeature(t){this.addFeatureInternal(t),this.changed()}addFeatureInternal(t){const e=ot(t);if(!this.addToIndex_(e,t)){this.featuresCollection_&&this.featuresCollection_.remove(t);return}this.setupChangeEvents_(e,t);const n=t.getGeometry();if(n){const r=n.getExtent();this.featuresRtree_&&this.featuresRtree_.insert(r,t)}else this.nullGeometryFeatures_[e]=t;this.dispatchEvent(new ke(Kt.ADDFEATURE,t))}setupChangeEvents_(t,e){e instanceof Vt||(this.featureChangeKeys_[t]=[$t(e,yt.CHANGE,this.handleFeatureChange_,this),$t(e,bc.PROPERTYCHANGE,this.handleFeatureChange_,this)])}addToIndex_(t,e){let n=!0;if(e.getId()!==void 0){const r=String(e.getId());if(!(r in this.idIndex_))this.idIndex_[r]=e;else if(e instanceof Vt){const s=this.idIndex_[r];s instanceof Vt?Array.isArray(s)?s.push(e):this.idIndex_[r]=[s,e]:n=!1}else n=!1}return n&&(lt(!(t in this.uidIndex_),"The passed `feature` was already added to the source"),this.uidIndex_[t]=e),n}addFeatures(t){this.addFeaturesInternal(t),this.changed()}addFeaturesInternal(t){const e=[],n=[],r=[];for(let s=0,o=t.length;s<o;s++){const a=t[s],l=ot(a);this.addToIndex_(l,a)&&n.push(a)}for(let s=0,o=n.length;s<o;s++){const a=n[s],l=ot(a);this.setupChangeEvents_(l,a);const h=a.getGeometry();if(h){const c=h.getExtent();e.push(c),r.push(a)}else this.nullGeometryFeatures_[l]=a}if(this.featuresRtree_&&this.featuresRtree_.load(e,r),this.hasListener(Kt.ADDFEATURE))for(let s=0,o=n.length;s<o;s++)this.dispatchEvent(new ke(Kt.ADDFEATURE,n[s]))}bindFeaturesCollection_(t){let e=!1;this.addEventListener(Kt.ADDFEATURE,function(n){e||(e=!0,t.push(n.feature),e=!1)}),this.addEventListener(Kt.REMOVEFEATURE,function(n){e||(e=!0,t.remove(n.feature),e=!1)}),t.addEventListener(ri.ADD,n=>{e||(e=!0,this.addFeature(n.element),e=!1)}),t.addEventListener(ri.REMOVE,n=>{e||(e=!0,this.removeFeature(n.element),e=!1)}),this.featuresCollection_=t}clear(t){if(t){for(const n in this.featureChangeKeys_)this.featureChangeKeys_[n].forEach(Ut);this.featuresCollection_||(this.featureChangeKeys_={},this.idIndex_={},this.uidIndex_={})}else if(this.featuresRtree_){this.featuresRtree_.forEach(n=>{this.removeFeatureInternal(n)});for(const n in this.nullGeometryFeatures_)this.removeFeatureInternal(this.nullGeometryFeatures_[n])}this.featuresCollection_&&this.featuresCollection_.clear(),this.featuresRtree_&&this.featuresRtree_.clear(),this.nullGeometryFeatures_={};const e=new ke(Kt.CLEAR);this.dispatchEvent(e),this.changed()}forEachFeature(t){if(this.featuresRtree_)return this.featuresRtree_.forEach(t);this.featuresCollection_&&this.featuresCollection_.forEach(t)}forEachFeatureAtCoordinateDirect(t,e){const n=[t[0],t[1],t[0],t[1]];return this.forEachFeatureInExtent(n,function(r){const s=r.getGeometry();if(s instanceof Vt||s.intersectsCoordinate(t))return e(r)})}forEachFeatureInExtent(t,e){if(this.featuresRtree_)return this.featuresRtree_.forEachInExtent(t,e);this.featuresCollection_&&this.featuresCollection_.forEach(e)}forEachFeatureIntersectingExtent(t,e){return this.forEachFeatureInExtent(t,function(n){const r=n.getGeometry();if(r instanceof Vt||r.intersectsExtent(t)){const s=e(n);if(s)return s}})}getFeaturesCollection(){return this.featuresCollection_}getFeatures(){let t;return this.featuresCollection_?t=this.featuresCollection_.getArray().slice(0):this.featuresRtree_&&(t=this.featuresRtree_.getAll(),Sn(this.nullGeometryFeatures_)||pe(t,Object.values(this.nullGeometryFeatures_))),t}getFeaturesAtCoordinate(t){const e=[];return this.forEachFeatureAtCoordinateDirect(t,function(n){e.push(n)}),e}getFeaturesInExtent(t,e){if(this.featuresRtree_){if(!(e&&e.canWrapX()&&this.getWrapX()))return this.featuresRtree_.getInExtent(t);const r=Oc(t,e);return[].concat(...r.map(s=>this.featuresRtree_.getInExtent(s)))}return this.featuresCollection_?this.featuresCollection_.getArray().slice(0):[]}getClosestFeatureToCoordinate(t,e){const n=t[0],r=t[1];let s=null;const o=[NaN,NaN];let a=1/0;const l=[-1/0,-1/0,1/0,1/0];return e=e||Qu,this.featuresRtree_.forEachInExtent(l,function(h){if(e(h)){const c=h.getGeometry(),u=a;if(a=c instanceof Vt?0:c.closestPointXY(n,r,o,a),a<u){s=h;const f=Math.sqrt(a);l[0]=n-f,l[1]=r-f,l[2]=n+f,l[3]=r+f}}}),s}getExtent(t){return this.featuresRtree_.getExtent(t)}getFeatureById(t){const e=this.idIndex_[t.toString()];return e!==void 0?e:null}getFeatureByUid(t){const e=this.uidIndex_[t];return e!==void 0?e:null}getFormat(){return this.format_}getOverlaps(){return this.overlaps_}getUrl(){return this.url_}handleFeatureChange_(t){const e=t.target,n=ot(e),r=e.getGeometry();if(!r)n in this.nullGeometryFeatures_||(this.featuresRtree_&&this.featuresRtree_.remove(e),this.nullGeometryFeatures_[n]=e);else{const o=r.getExtent();n in this.nullGeometryFeatures_?(delete this.nullGeometryFeatures_[n],this.featuresRtree_&&this.featuresRtree_.insert(o,e)):this.featuresRtree_&&this.featuresRtree_.update(o,e)}const s=e.getId();if(s!==void 0){const o=s.toString();this.idIndex_[o]!==e&&(this.removeFromIdIndex_(e),this.idIndex_[o]=e)}else this.removeFromIdIndex_(e),this.uidIndex_[n]=e;this.changed(),this.dispatchEvent(new ke(Kt.CHANGEFEATURE,e))}hasFeature(t){const e=t.getId();return e!==void 0?e in this.idIndex_:ot(t)in this.uidIndex_}isEmpty(){return this.featuresRtree_?this.featuresRtree_.isEmpty()&&Sn(this.nullGeometryFeatures_):this.featuresCollection_?this.featuresCollection_.getLength()===0:!0}loadFeatures(t,e,n){const r=this.loadedExtentsRtree_,s=this.strategy_(t,e,n);for(let o=0,a=s.length;o<a;++o){const l=s[o];r.forEachInExtent(l,function(c){return Se(c.extent,l)})||(++this.loadingExtentsCount_,this.dispatchEvent(new ke(Kt.FEATURESLOADSTART)),this.loader_.call(this,l,e,n,c=>{--this.loadingExtentsCount_,this.dispatchEvent(new ke(Kt.FEATURESLOADEND,void 0,c))},()=>{--this.loadingExtentsCount_,this.dispatchEvent(new ke(Kt.FEATURESLOADERROR))}),r.insert(l,{extent:l.slice()}))}this.loading=this.loader_.length<4?!1:this.loadingExtentsCount_>0}refresh(){this.clear(!0),this.loadedExtentsRtree_.clear(),super.refresh()}removeLoadedExtent(t){const e=this.loadedExtentsRtree_,n=e.forEachInExtent(t,function(r){if(ps(r.extent,t))return r});n&&e.remove(n)}removeFeatures(t){let e=!1;for(let n=0,r=t.length;n<r;++n)e=this.removeFeatureInternal(t[n])||e;e&&this.changed()}removeFeature(t){if(!t)return;this.removeFeatureInternal(t)&&this.changed()}removeFeatureInternal(t){const e=ot(t);if(!(e in this.uidIndex_))return!1;e in this.nullGeometryFeatures_?delete this.nullGeometryFeatures_[e]:this.featuresRtree_&&this.featuresRtree_.remove(t),this.featureChangeKeys_[e]?.forEach(Ut),delete this.featureChangeKeys_[e];const r=t.getId();if(r!==void 0){const s=r.toString(),o=this.idIndex_[s];o===t?delete this.idIndex_[s]:Array.isArray(o)&&(o.splice(o.indexOf(t),1),o.length===1&&(this.idIndex_[s]=o[0]))}return delete this.uidIndex_[e],this.hasListener(Kt.REMOVEFEATURE)&&this.dispatchEvent(new ke(Kt.REMOVEFEATURE,t)),!0}removeFromIdIndex_(t){for(const e in this.idIndex_)if(this.idIndex_[e]===t){delete this.idIndex_[e];break}}setLoader(t){this.loader_=t}setUrl(t){lt(this.format_,"`format` must be set when `url` is set"),this.url_=t,this.setLoader(Pl(t,this.format_))}setOverlaps(t){this.overlaps_=t,this.changed()}}function Mg(i){return i&&i.__esModule&&Object.prototype.hasOwnProperty.call(i,"default")?i.default:i}function Do(i){return Array.isArray(i)?Math.min(...i):i}class Og extends xa{constructor(t,e,n,r,s,o,a){let l=t.getExtent();l&&t.canWrapX()&&(l=l.slice(),l[0]=-1/0,l[2]=1/0);let h=e.getExtent();h&&e.canWrapX()&&(h=h.slice(),h[0]=-1/0,h[2]=1/0);const c=h?Je(n,h):n,u=ye(c),f=$r(t,e,u,r),g=sh,d=new rh(t,e,c,l,f*g,r),m=d.calculateSourceExtent(),p=or(m)?null:o(m,f,s),y=p?G.IDLE:G.EMPTY,w=p?p.getPixelRatio():1;super(n,r,w,y),this.targetProj_=e,this.maxSourceExtent_=l,this.triangulation_=d,this.targetResolution_=r,this.targetExtent_=n,this.sourceImage_=p,this.sourcePixelRatio_=w,this.interpolate_=a,this.canvas_=null,this.sourceListenerKey_=null}disposeInternal(){this.state==G.LOADING&&this.unlistenSource_(),super.disposeInternal()}getImage(){return this.canvas_}getProjection(){return this.targetProj_}reproject_(){const t=this.sourceImage_.getState();if(t==G.LOADED){const e=et(this.targetExtent_)/this.targetResolution_,n=pt(this.targetExtent_)/this.targetResolution_;this.canvas_=ih(e,n,this.sourcePixelRatio_,Do(this.sourceImage_.getResolution()),this.maxSourceExtent_,this.targetResolution_,this.targetExtent_,this.triangulation_,[{extent:this.sourceImage_.getExtent(),image:this.sourceImage_.getImage()}],0,void 0,this.interpolate_,!0)}this.state=t,this.changed()}load(){if(this.state==G.IDLE){this.state=G.LOADING,this.changed();const t=this.sourceImage_.getState();t==G.LOADED||t==G.ERROR?this.reproject_():(this.sourceListenerKey_=$t(this.sourceImage_,yt.CHANGE,e=>{const n=this.sourceImage_.getState();(n==G.LOADED||n==G.ERROR)&&(this.unlistenSource_(),this.reproject_())}),this.sourceImage_.load())}}unlistenSource_(){Ut(this.sourceListenerKey_),this.sourceListenerKey_=null}}const si=4,ao={IMAGELOADSTART:"imageloadstart",IMAGELOADEND:"imageloadend",IMAGELOADERROR:"imageloaderror"};class Fg extends Fn{constructor(t,e){super(t),this.image=e}}class Ng extends Pa{constructor(t){super({attributions:t.attributions,projection:t.projection,state:t.state,interpolate:t.interpolate!==void 0?t.interpolate:!0}),this.on,this.once,this.un,this.loader=t.loader||null,this.resolutions_=t.resolutions!==void 0?t.resolutions:null,this.reprojectedImage_=null,this.reprojectedRevision_=0,this.image=null,this.wantedExtent_,this.wantedResolution_,this.static_=t.loader?t.loader.length===0:!1,this.wantedProjection_=null}getResolutions(){return this.resolutions_}setResolutions(t){this.resolutions_=t}findNearestResolution(t){const e=this.getResolutions();if(e){const n=ds(e,t,0);t=e[n]}return t}getImage(t,e,n,r){const s=this.getProjection();if(!s||!r||En(s,r))return s&&(r=s),this.getImageInternal(t,e,n,r);if(this.reprojectedImage_){if(this.reprojectedRevision_==this.getRevision()&&En(this.reprojectedImage_.getProjection(),r)&&this.reprojectedImage_.getResolution()==e&&ps(this.reprojectedImage_.getExtent(),t))return this.reprojectedImage_;this.reprojectedImage_.dispose(),this.reprojectedImage_=null}return this.reprojectedImage_=new Og(s,r,t,e,n,(o,a,l)=>this.getImageInternal(o,a,l,s),this.getInterpolate()),this.reprojectedRevision_=this.getRevision(),this.reprojectedImage_}getImageInternal(t,e,n,r){if(this.loader){const s=Bg(t,e,n,1),o=this.findNearestResolution(e);if(this.image&&(this.static_||this.wantedProjection_===r&&(this.wantedExtent_&&Se(this.wantedExtent_,s)||Se(this.image.getExtent(),s))&&(this.wantedResolution_&&Do(this.wantedResolution_)===o||Do(this.image.getResolution())===o)))return this.image;this.wantedProjection_=r,this.wantedExtent_=s,this.wantedResolution_=o,this.image=new xa(s,o,n,this.loader),this.image.addEventListener(yt.CHANGE,this.handleImageChange.bind(this))}return this.image}handleImageChange(t){const e=t.target;let n;switch(e.getState()){case G.LOADING:this.loading=!0,n=ao.IMAGELOADSTART;break;case G.LOADED:this.loading=!1,n=ao.IMAGELOADEND;break;case G.ERROR:this.loading=!1,n=ao.IMAGELOADERROR;break;default:return}this.hasListener(n)&&this.dispatchEvent(new Fg(n,e))}}function Bg(i,t,e,n){const r=t/e,s=ye(i),o=Ue(et(i)/r,si),a=Ue(pt(i)/r,si),l=Ue((n-1)*o/2,si),h=o+2*l,c=Ue((n-1)*a/2,si),u=a+2*c;return Ic(s,r,0,[h,u])}class Xg extends xa{constructor(t,e,n,r,s){const o=s!==void 0?G.IDLE:G.LOADED;super(t,e,n,o),this.loader_=s!==void 0?s:null,this.canvas_=r,this.error_=null}getError(){return this.error_}handleLoad_(t){t?(this.error_=t,this.state=G.ERROR):this.state=G.LOADED,this.changed()}load(){this.state==G.IDLE&&(this.state=G.LOADING,this.changed(),this.loader_(this.handleLoad_.bind(this)))}getImage(){return this.canvas_}}class Ps extends Ng{constructor(t){t=t||{},super({attributions:t.attributions,interpolate:t.interpolate,projection:t.projection,resolutions:t.resolutions,state:t.state}),this.canvasFunction_=t.canvasFunction,this.canvas_=null,this.renderedRevision_=0,this.ratio_=t.ratio!==void 0?t.ratio:1.5}getImageInternal(t,e,n,r){e=this.findNearestResolution(e);let s=this.canvas_;if(s&&this.renderedRevision_==this.getRevision()&&s.getResolution()==e&&s.getPixelRatio()==n&&Se(s.getExtent(),t))return s;t=t.slice(),af(t,this.ratio_);const o=et(t)/e,a=pt(t)/e,l=[o*n,a*n],h=this.canvasFunction_.call(this,t,e,n,l,r);return h&&(s=new Xg(t,e,n,h)),this.canvas_=s,this.renderedRevision_=this.getRevision(),s}}const Mo="1.3.0";function Gg(i,t,e,n,r){r.WIDTH=e[0],r.HEIGHT=e[1];const s=n.getAxisOrientation(),o=Fc(r.VERSION,"1.3")>=0;r[o?"CRS":"SRS"]=n.getCode();const a=o&&s.startsWith("ne")?[t[1],t[0],t[3],t[2]]:t;return r.BBOX=a.join(","),gh(i,r)}function kg(i,t,e,n,r,s,o){s=Object.assign({REQUEST:"GetMap"},s);const a=t/e,l=[Ka(et(i)/a,si),Ka(pt(i)/a,si)];if(e!=1)switch(o){case"geoserver":const c=90*e+.5|0;"FORMAT_OPTIONS"in s?s.FORMAT_OPTIONS+=";dpi:"+c:s.FORMAT_OPTIONS="dpi:"+c;break;case"mapserver":s.MAP_RESOLUTION=90*e;break;case"carmentaserver":case"qgis":s.DPI=90*e;break;default:throw new Error("Unknown `serverType` configured")}return Gg(r,i,l,n,s)}function Dl(i,t){return Object.assign({REQUEST:t,SERVICE:"WMS",VERSION:Mo,FORMAT:"image/png",STYLES:"",TRANSPARENT:"TRUE"},i)}class Hg extends Ta{constructor(t){super(t),this.image=null}getImage(){return this.image?this.image.getImage():null}prepareFrame(t){const e=t.layerStatesArray[t.layerIndex],n=t.pixelRatio,r=t.viewState,s=r.resolution,o=this.getLayer().getSource(),a=t.viewHints;let l=t.extent;if(e.extent!==void 0&&(l=Je(l,fe(e.extent,r.projection))),!a[Ot.ANIMATING]&&!a[Ot.INTERACTING]&&!or(l))if(o){const h=r.projection,c=o.getImage(l,s,n,h);c&&(this.loadImage(c)?this.image=c:c.getState()===G.EMPTY&&(this.image=null))}else this.image=null;return!!this.image}getData(t){const e=this.frameState;if(!e)return null;const n=this.getLayer(),r=vt(e.pixelToCoordinateTransform,t.slice()),s=n.getExtent();if(s&&!Rn(s,r))return null;const o=this.image.getExtent(),a=this.image.getImage(),l=et(o),h=Math.floor(a.width*((r[0]-o[0])/l));if(h<0||h>=a.width)return null;const c=pt(o),u=Math.floor(a.height*((o[3]-r[1])/c));return u<0||u>=a.height?null:this.getImageData(a,h,u)}renderFrame(t,e){const n=this.image,r=n.getExtent(),s=n.getResolution(),[o,a]=Array.isArray(s)?s:[s,s],l=n.getPixelRatio(),h=t.layerStatesArray[t.layerIndex],c=t.pixelRatio,u=t.viewState,f=u.center,g=u.resolution,d=c*o/(g*l),m=c*a/(g*l);this.prepareContainer(t,e);const p=this.context.canvas.width,y=this.context.canvas.height,w=this.getRenderContext(t);let A=!1,x=!0;if(h.extent){const b=fe(h.extent,u.projection);x=Dt(b,t.extent),A=x&&!Se(b,t.extent),A&&this.clipUnrotated(w,t,b)}const C=n.getImage(),v=Ie(this.tempTransform,p/2,y/2,d,m,0,l*(r[0]-f[0])/o,l*(f[1]-r[3])/a);this.renderedResolution=a*c/l;const E=C.width*v[0],T=C.height*v[3];if(this.getLayer().getSource().getInterpolate()||(w.imageSmoothingEnabled=!1),this.preRender(w,t),x&&E>=.5&&T>=.5){const b=v[4],R=v[5],_=h.opacity;_!==1&&(w.save(),w.globalAlpha=_),w.drawImage(C,0,0,+C.width,+C.height,b,R,E,T),_!==1&&w.restore()}return this.postRender(this.context,t),A&&w.restore(),w.imageSmoothingEnabled=!0,this.container}}class zg extends Sa{constructor(t){t=t||{},super(t)}}class Qi extends zg{constructor(t){super(t)}createRenderer(){return new Hg(this)}getData(t){return super.getData(t)}}class Wg extends mh{constructor(t){t=t||{};const e=Object.assign({},t.params);super({attributions:t.attributions,attributionsCollapsible:t.attributionsCollapsible,cacheSize:t.cacheSize,crossOrigin:t.crossOrigin,interpolate:t.interpolate,projection:t.projection,reprojectionErrorThreshold:t.reprojectionErrorThreshold,tileClass:t.tileClass,tileGrid:t.tileGrid,tileLoadFunction:t.tileLoadFunction,url:t.url,urls:t.urls,wrapX:t.wrapX!==void 0?t.wrapX:!0,transition:t.transition,zDirection:t.zDirection}),this.gutter_=t.gutter!==void 0?t.gutter:0,this.params_=e,this.v13_=!0,this.serverType_=t.serverType,this.hidpi_=t.hidpi!==void 0?t.hidpi:!0,this.tmpExtent_=qt(),this.updateV13_(),this.setKey(this.getKeyForParams_())}getFeatureInfoUrl(t,e,n,r){const s=ht(n),o=this.getProjection()||s;let a=this.getTileGrid();a||(a=this.getTileGridForProjection(o));const l=Es(t,s,o),h=$r(o,s,t,e),c=a.getZForResolution(h,this.zDirection),u=a.getResolution(c),f=a.getTileCoordForCoordAndZ(l,c);if(a.getResolutions().length<=f[0])return;let g=a.getTileCoordExtent(f,this.tmpExtent_);const d=this.gutter_;d!==0&&(g=ji(g,u*d,g));const m={QUERY_LAYERS:this.params_.LAYERS};Object.assign(m,Dl(this.params_,"GetFeatureInfo"),r);const p=Math.floor((l[0]-g[0])/u),y=Math.floor((g[3]-l[1])/u);return m[this.v13_?"I":"X"]=p,m[this.v13_?"J":"Y"]=y,this.getRequestUrl_(f,g,1,o||s,m)}getLegendUrl(t,e){if(this.urls[0]===void 0)return;const n={SERVICE:"WMS",VERSION:Mo,REQUEST:"GetLegendGraphic",FORMAT:"image/png"};if(e===void 0||e.LAYER===void 0){const r=this.params_.LAYERS;if(!(!Array.isArray(r)||r.length===1))return;n.LAYER=r}if(t!==void 0){const r=this.getProjection()?this.getProjection().getMetersPerUnit():1,s=28e-5;n.SCALE=t*r/s}return Object.assign(n,e),gh(this.urls[0],n)}getGutter(){return this.gutter_}getParams(){return this.params_}getRequestUrl_(t,e,n,r,s){const o=this.urls;if(!o)return;let a;if(o.length==1)a=o[0];else{const l=Cn(ah(t),o.length);a=o[l]}return kg(e,(this.tileGrid||this.getTileGridForProjection(r)).getResolution(t[0]),n,r,a,s,this.serverType_)}getTilePixelRatio(t){return!this.hidpi_||this.serverType_===void 0?1:t}getKeyForParams_(){let t=0;const e=[];for(const n in this.params_)e[t++]=n+"-"+this.params_[n];return e.join("/")}setParams_(t){this.params_=t,this.updateV13_(),this.setKey(this.getKeyForParams_())}setParams(t){this.setParams_(Object.assign({},t))}updateParams(t){this.setParams_(Object.assign(this.params_,t))}updateV13_(){const t=this.params_.VERSION||Mo;this.v13_=Fc(t,"1.3")>=0}tileUrlFunction(t,e,n){let r=this.getTileGrid();if(r||(r=this.getTileGridForProjection(n)),r.getResolutions().length<=t[0])return;e!=1&&(!this.hidpi_||this.serverType_===void 0)&&(e=1);const s=r.getResolution(t[0]);let o=r.getTileCoordExtent(t,this.tmpExtent_);const a=this.gutter_;a!==0&&(o=ji(o,s*a,o));const l=Object.assign({},Dl(this.params_,"GetMap"));return this.getRequestUrl_(t,o,e,n,l)}}var Hr={exports:{}},jg=Hr.exports,Ml;function Yg(){return Ml||(Ml=1,(function(i,t){(function(e,n){i.exports=n()})(jg,(function(){var e="minute",n=/[+-]\d\d(?::?\d\d)?/g,r=/([+-]|\d\d)/g;return function(s,o,a){var l=o.prototype;a.utc=function(m){var p={date:m,utc:!0,args:arguments};return new o(p)},l.utc=function(m){var p=a(this.toDate(),{locale:this.$L,utc:!0});return m?p.add(this.utcOffset(),e):p},l.local=function(){return a(this.toDate(),{locale:this.$L,utc:!1})};var h=l.parse;l.parse=function(m){m.utc&&(this.$u=!0),this.$utils().u(m.$offset)||(this.$offset=m.$offset),h.call(this,m)};var c=l.init;l.init=function(){if(this.$u){var m=this.$d;this.$y=m.getUTCFullYear(),this.$M=m.getUTCMonth(),this.$D=m.getUTCDate(),this.$W=m.getUTCDay(),this.$H=m.getUTCHours(),this.$m=m.getUTCMinutes(),this.$s=m.getUTCSeconds(),this.$ms=m.getUTCMilliseconds()}else c.call(this)};var u=l.utcOffset;l.utcOffset=function(m,p){var y=this.$utils().u;if(y(m))return this.$u?0:y(this.$offset)?u.call(this):this.$offset;if(typeof m=="string"&&(m=(function(C){C===void 0&&(C="");var v=C.match(n);if(!v)return null;var E=(""+v[0]).match(r)||["-",0,0],T=E[0],b=60*+E[1]+ +E[2];return b===0?0:T==="+"?b:-b})(m),m===null))return this;var w=Math.abs(m)<=16?60*m:m;if(w===0)return this.utc(p);var A=this.clone();if(p)return A.$offset=w,A.$u=!1,A;var x=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();return(A=this.local().add(w+x,e)).$offset=w,A.$x.$localOffset=x,A};var f=l.format;l.format=function(m){var p=m||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return f.call(this,p)},l.valueOf=function(){var m=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*m},l.isUTC=function(){return!!this.$u},l.toISOString=function(){return this.toDate().toISOString()},l.toString=function(){return this.toDate().toUTCString()};var g=l.toDate;l.toDate=function(m){return m==="s"&&this.$offset?a(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():g.call(this)};var d=l.diff;l.diff=function(m,p,y){if(m&&this.$u===m.$u)return d.call(this,m,p,y);var w=this.local(),A=a(m).local();return d.call(w,A,p,y)}}}))})(Hr)),Hr.exports}var Vg=Yg();const Ug=Mg(Vg);function Ah(i,t){return function(){return i.apply(t,arguments)}}const{toString:qg}=Object.prototype,{getPrototypeOf:Ia}=Object,{iterator:_s,toStringTag:xh}=Symbol,Ls=(i=>t=>{const e=qg.call(t);return i[e]||(i[e]=e.slice(8,-1).toLowerCase())})(Object.create(null)),ae=i=>(i=i.toLowerCase(),t=>Ls(t)===i),Is=i=>t=>typeof t===i,{isArray:wi}=Array,fi=Is("undefined");function cr(i){return i!==null&&!fi(i)&&i.constructor!==null&&!fi(i.constructor)&&Gt(i.constructor.isBuffer)&&i.constructor.isBuffer(i)}const Ch=ae("ArrayBuffer");function Qg(i){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(i):t=i&&i.buffer&&Ch(i.buffer),t}const Zg=Is("string"),Gt=Is("function"),Eh=Is("number"),hr=i=>i!==null&&typeof i=="object",Jg=i=>i===!0||i===!1,zr=i=>{if(Ls(i)!=="object")return!1;const t=Ia(i);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(xh in i)&&!(_s in i)},Kg=i=>{if(!hr(i)||cr(i))return!1;try{return Object.keys(i).length===0&&Object.getPrototypeOf(i)===Object.prototype}catch{return!1}},$g=ae("Date"),tm=ae("File"),em=ae("Blob"),nm=ae("FileList"),im=i=>hr(i)&&Gt(i.pipe),rm=i=>{let t;return i&&(typeof FormData=="function"&&i instanceof FormData||Gt(i.append)&&((t=Ls(i))==="formdata"||t==="object"&&Gt(i.toString)&&i.toString()==="[object FormData]"))},sm=ae("URLSearchParams"),[om,am,lm,cm]=["ReadableStream","Request","Response","Headers"].map(ae),hm=i=>i.trim?i.trim():i.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function ur(i,t,{allOwnKeys:e=!1}={}){if(i===null||typeof i>"u")return;let n,r;if(typeof i!="object"&&(i=[i]),wi(i))for(n=0,r=i.length;n<r;n++)t.call(null,i[n],n,i);else{if(cr(i))return;const s=e?Object.getOwnPropertyNames(i):Object.keys(i),o=s.length;let a;for(n=0;n<o;n++)a=s[n],t.call(null,i[a],a,i)}}function vh(i,t){if(cr(i))return null;t=t.toLowerCase();const e=Object.keys(i);let n=e.length,r;for(;n-- >0;)if(r=e[n],t===r.toLowerCase())return r;return null}const mn=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,bh=i=>!fi(i)&&i!==mn;function Oo(){const{caseless:i,skipUndefined:t}=bh(this)&&this||{},e={},n=(r,s)=>{const o=i&&vh(e,s)||s;zr(e[o])&&zr(r)?e[o]=Oo(e[o],r):zr(r)?e[o]=Oo({},r):wi(r)?e[o]=r.slice():(!t||!fi(r))&&(e[o]=r)};for(let r=0,s=arguments.length;r<s;r++)arguments[r]&&ur(arguments[r],n);return e}const um=(i,t,e,{allOwnKeys:n}={})=>(ur(t,(r,s)=>{e&&Gt(r)?i[s]=Ah(r,e):i[s]=r},{allOwnKeys:n}),i),fm=i=>(i.charCodeAt(0)===65279&&(i=i.slice(1)),i),dm=(i,t,e,n)=>{i.prototype=Object.create(t.prototype,n),i.prototype.constructor=i,Object.defineProperty(i,"super",{value:t.prototype}),e&&Object.assign(i.prototype,e)},gm=(i,t,e,n)=>{let r,s,o;const a={};if(t=t||{},i==null)return t;do{for(r=Object.getOwnPropertyNames(i),s=r.length;s-- >0;)o=r[s],(!n||n(o,i,t))&&!a[o]&&(t[o]=i[o],a[o]=!0);i=e!==!1&&Ia(i)}while(i&&(!e||e(i,t))&&i!==Object.prototype);return t},mm=(i,t,e)=>{i=String(i),(e===void 0||e>i.length)&&(e=i.length),e-=t.length;const n=i.indexOf(t,e);return n!==-1&&n===e},pm=i=>{if(!i)return null;if(wi(i))return i;let t=i.length;if(!Eh(t))return null;const e=new Array(t);for(;t-- >0;)e[t]=i[t];return e},ym=(i=>t=>i&&t instanceof i)(typeof Uint8Array<"u"&&Ia(Uint8Array)),wm=(i,t)=>{const n=(i&&i[_s]).call(i);let r;for(;(r=n.next())&&!r.done;){const s=r.value;t.call(i,s[0],s[1])}},Am=(i,t)=>{let e;const n=[];for(;(e=i.exec(t))!==null;)n.push(e);return n},xm=ae("HTMLFormElement"),Cm=i=>i.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(e,n,r){return n.toUpperCase()+r}),Ol=(({hasOwnProperty:i})=>(t,e)=>i.call(t,e))(Object.prototype),Em=ae("RegExp"),Th=(i,t)=>{const e=Object.getOwnPropertyDescriptors(i),n={};ur(e,(r,s)=>{let o;(o=t(r,s,i))!==!1&&(n[s]=o||r)}),Object.defineProperties(i,n)},vm=i=>{Th(i,(t,e)=>{if(Gt(i)&&["arguments","caller","callee"].indexOf(e)!==-1)return!1;const n=i[e];if(Gt(n)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+e+"'")})}})},bm=(i,t)=>{const e={},n=r=>{r.forEach(s=>{e[s]=!0})};return wi(i)?n(i):n(String(i).split(t)),e},Tm=()=>{},Sm=(i,t)=>i!=null&&Number.isFinite(i=+i)?i:t;function Rm(i){return!!(i&&Gt(i.append)&&i[xh]==="FormData"&&i[_s])}const Pm=i=>{const t=new Array(10),e=(n,r)=>{if(hr(n)){if(t.indexOf(n)>=0)return;if(cr(n))return n;if(!("toJSON"in n)){t[r]=n;const s=wi(n)?[]:{};return ur(n,(o,a)=>{const l=e(o,r+1);!fi(l)&&(s[a]=l)}),t[r]=void 0,s}}return n};return e(i,0)},_m=ae("AsyncFunction"),Lm=i=>i&&(hr(i)||Gt(i))&&Gt(i.then)&&Gt(i.catch),Sh=((i,t)=>i?setImmediate:t?((e,n)=>(mn.addEventListener("message",({source:r,data:s})=>{r===mn&&s===e&&n.length&&n.shift()()},!1),r=>{n.push(r),mn.postMessage(e,"*")}))(`axios@${Math.random()}`,[]):e=>setTimeout(e))(typeof setImmediate=="function",Gt(mn.postMessage)),Im=typeof queueMicrotask<"u"?queueMicrotask.bind(mn):typeof process<"u"&&process.nextTick||Sh,Dm=i=>i!=null&&Gt(i[_s]),S={isArray:wi,isArrayBuffer:Ch,isBuffer:cr,isFormData:rm,isArrayBufferView:Qg,isString:Zg,isNumber:Eh,isBoolean:Jg,isObject:hr,isPlainObject:zr,isEmptyObject:Kg,isReadableStream:om,isRequest:am,isResponse:lm,isHeaders:cm,isUndefined:fi,isDate:$g,isFile:tm,isBlob:em,isRegExp:Em,isFunction:Gt,isStream:im,isURLSearchParams:sm,isTypedArray:ym,isFileList:nm,forEach:ur,merge:Oo,extend:um,trim:hm,stripBOM:fm,inherits:dm,toFlatObject:gm,kindOf:Ls,kindOfTest:ae,endsWith:mm,toArray:pm,forEachEntry:wm,matchAll:Am,isHTMLForm:xm,hasOwnProperty:Ol,hasOwnProp:Ol,reduceDescriptors:Th,freezeMethods:vm,toObjectSet:bm,toCamelCase:Cm,noop:Tm,toFiniteNumber:Sm,findKey:vh,global:mn,isContextDefined:bh,isSpecCompliantForm:Rm,toJSONObject:Pm,isAsyncFn:_m,isThenable:Lm,setImmediate:Sh,asap:Im,isIterable:Dm};function Z(i,t,e,n,r){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=i,this.name="AxiosError",t&&(this.code=t),e&&(this.config=e),n&&(this.request=n),r&&(this.response=r,this.status=r.status?r.status:null)}S.inherits(Z,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:S.toJSONObject(this.config),code:this.code,status:this.status}}});const Rh=Z.prototype,Ph={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(i=>{Ph[i]={value:i}});Object.defineProperties(Z,Ph);Object.defineProperty(Rh,"isAxiosError",{value:!0});Z.from=(i,t,e,n,r,s)=>{const o=Object.create(Rh);S.toFlatObject(i,o,function(c){return c!==Error.prototype},h=>h!=="isAxiosError");const a=i&&i.message?i.message:"Error",l=t==null&&i?i.code:t;return Z.call(o,a,l,e,n,r),i&&o.cause==null&&Object.defineProperty(o,"cause",{value:i,configurable:!0}),o.name=i&&i.name||"Error",s&&Object.assign(o,s),o};const Mm=null;function Fo(i){return S.isPlainObject(i)||S.isArray(i)}function _h(i){return S.endsWith(i,"[]")?i.slice(0,-2):i}function Fl(i,t,e){return i?i.concat(t).map(function(r,s){return r=_h(r),!e&&s?"["+r+"]":r}).join(e?".":""):t}function Om(i){return S.isArray(i)&&!i.some(Fo)}const Fm=S.toFlatObject(S,{},null,function(t){return/^is[A-Z]/.test(t)});function Ds(i,t,e){if(!S.isObject(i))throw new TypeError("target must be an object");t=t||new FormData,e=S.toFlatObject(e,{metaTokens:!0,dots:!1,indexes:!1},!1,function(m,p){return!S.isUndefined(p[m])});const n=e.metaTokens,r=e.visitor||c,s=e.dots,o=e.indexes,l=(e.Blob||typeof Blob<"u"&&Blob)&&S.isSpecCompliantForm(t);if(!S.isFunction(r))throw new TypeError("visitor must be a function");function h(d){if(d===null)return"";if(S.isDate(d))return d.toISOString();if(S.isBoolean(d))return d.toString();if(!l&&S.isBlob(d))throw new Z("Blob is not supported. Use a Buffer instead.");return S.isArrayBuffer(d)||S.isTypedArray(d)?l&&typeof Blob=="function"?new Blob([d]):Buffer.from(d):d}function c(d,m,p){let y=d;if(d&&!p&&typeof d=="object"){if(S.endsWith(m,"{}"))m=n?m:m.slice(0,-2),d=JSON.stringify(d);else if(S.isArray(d)&&Om(d)||(S.isFileList(d)||S.endsWith(m,"[]"))&&(y=S.toArray(d)))return m=_h(m),y.forEach(function(A,x){!(S.isUndefined(A)||A===null)&&t.append(o===!0?Fl([m],x,s):o===null?m:m+"[]",h(A))}),!1}return Fo(d)?!0:(t.append(Fl(p,m,s),h(d)),!1)}const u=[],f=Object.assign(Fm,{defaultVisitor:c,convertValue:h,isVisitable:Fo});function g(d,m){if(!S.isUndefined(d)){if(u.indexOf(d)!==-1)throw Error("Circular reference detected in "+m.join("."));u.push(d),S.forEach(d,function(y,w){(!(S.isUndefined(y)||y===null)&&r.call(t,y,S.isString(w)?w.trim():w,m,f))===!0&&g(y,m?m.concat(w):[w])}),u.pop()}}if(!S.isObject(i))throw new TypeError("data must be an object");return g(i),t}function Nl(i){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(i).replace(/[!'()~]|%20|%00/g,function(n){return t[n]})}function Da(i,t){this._pairs=[],i&&Ds(i,this,t)}const Lh=Da.prototype;Lh.append=function(t,e){this._pairs.push([t,e])};Lh.toString=function(t){const e=t?function(n){return t.call(this,n,Nl)}:Nl;return this._pairs.map(function(r){return e(r[0])+"="+e(r[1])},"").join("&")};function Nm(i){return encodeURIComponent(i).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function Ih(i,t,e){if(!t)return i;const n=e&&e.encode||Nm;S.isFunction(e)&&(e={serialize:e});const r=e&&e.serialize;let s;if(r?s=r(t,e):s=S.isURLSearchParams(t)?t.toString():new Da(t,e).toString(n),s){const o=i.indexOf("#");o!==-1&&(i=i.slice(0,o)),i+=(i.indexOf("?")===-1?"?":"&")+s}return i}class Bl{constructor(){this.handlers=[]}use(t,e,n){return this.handlers.push({fulfilled:t,rejected:e,synchronous:n?n.synchronous:!1,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){S.forEach(this.handlers,function(n){n!==null&&t(n)})}}const Dh={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},Bm=typeof URLSearchParams<"u"?URLSearchParams:Da,Xm=typeof FormData<"u"?FormData:null,Gm=typeof Blob<"u"?Blob:null,km={isBrowser:!0,classes:{URLSearchParams:Bm,FormData:Xm,Blob:Gm},protocols:["http","https","file","blob","url","data"]},Ma=typeof window<"u"&&typeof document<"u",No=typeof navigator=="object"&&navigator||void 0,Hm=Ma&&(!No||["ReactNative","NativeScript","NS"].indexOf(No.product)<0),zm=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",Wm=Ma&&window.location.href||"http://localhost",jm=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:Ma,hasStandardBrowserEnv:Hm,hasStandardBrowserWebWorkerEnv:zm,navigator:No,origin:Wm},Symbol.toStringTag,{value:"Module"})),Pt={...jm,...km};function Ym(i,t){return Ds(i,new Pt.classes.URLSearchParams,{visitor:function(e,n,r,s){return Pt.isNode&&S.isBuffer(e)?(this.append(n,e.toString("base64")),!1):s.defaultVisitor.apply(this,arguments)},...t})}function Vm(i){return S.matchAll(/\w+|\[(\w*)]/g,i).map(t=>t[0]==="[]"?"":t[1]||t[0])}function Um(i){const t={},e=Object.keys(i);let n;const r=e.length;let s;for(n=0;n<r;n++)s=e[n],t[s]=i[s];return t}function Mh(i){function t(e,n,r,s){let o=e[s++];if(o==="__proto__")return!0;const a=Number.isFinite(+o),l=s>=e.length;return o=!o&&S.isArray(r)?r.length:o,l?(S.hasOwnProp(r,o)?r[o]=[r[o],n]:r[o]=n,!a):((!r[o]||!S.isObject(r[o]))&&(r[o]=[]),t(e,n,r[o],s)&&S.isArray(r[o])&&(r[o]=Um(r[o])),!a)}if(S.isFormData(i)&&S.isFunction(i.entries)){const e={};return S.forEachEntry(i,(n,r)=>{t(Vm(n),r,e,0)}),e}return null}function qm(i,t,e){if(S.isString(i))try{return(t||JSON.parse)(i),S.trim(i)}catch(n){if(n.name!=="SyntaxError")throw n}return(e||JSON.stringify)(i)}const fr={transitional:Dh,adapter:["xhr","http","fetch"],transformRequest:[function(t,e){const n=e.getContentType()||"",r=n.indexOf("application/json")>-1,s=S.isObject(t);if(s&&S.isHTMLForm(t)&&(t=new FormData(t)),S.isFormData(t))return r?JSON.stringify(Mh(t)):t;if(S.isArrayBuffer(t)||S.isBuffer(t)||S.isStream(t)||S.isFile(t)||S.isBlob(t)||S.isReadableStream(t))return t;if(S.isArrayBufferView(t))return t.buffer;if(S.isURLSearchParams(t))return e.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let a;if(s){if(n.indexOf("application/x-www-form-urlencoded")>-1)return Ym(t,this.formSerializer).toString();if((a=S.isFileList(t))||n.indexOf("multipart/form-data")>-1){const l=this.env&&this.env.FormData;return Ds(a?{"files[]":t}:t,l&&new l,this.formSerializer)}}return s||r?(e.setContentType("application/json",!1),qm(t)):t}],transformResponse:[function(t){const e=this.transitional||fr.transitional,n=e&&e.forcedJSONParsing,r=this.responseType==="json";if(S.isResponse(t)||S.isReadableStream(t))return t;if(t&&S.isString(t)&&(n&&!this.responseType||r)){const o=!(e&&e.silentJSONParsing)&&r;try{return JSON.parse(t,this.parseReviver)}catch(a){if(o)throw a.name==="SyntaxError"?Z.from(a,Z.ERR_BAD_RESPONSE,this,null,this.response):a}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Pt.classes.FormData,Blob:Pt.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};S.forEach(["delete","get","head","post","put","patch"],i=>{fr.headers[i]={}});const Qm=S.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Zm=i=>{const t={};let e,n,r;return i&&i.split(`
3
+ `).forEach(function(o){r=o.indexOf(":"),e=o.substring(0,r).trim().toLowerCase(),n=o.substring(r+1).trim(),!(!e||t[e]&&Qm[e])&&(e==="set-cookie"?t[e]?t[e].push(n):t[e]=[n]:t[e]=t[e]?t[e]+", "+n:n)}),t},Xl=Symbol("internals");function Ri(i){return i&&String(i).trim().toLowerCase()}function Wr(i){return i===!1||i==null?i:S.isArray(i)?i.map(Wr):String(i)}function Jm(i){const t=Object.create(null),e=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let n;for(;n=e.exec(i);)t[n[1]]=n[2];return t}const Km=i=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(i.trim());function lo(i,t,e,n,r){if(S.isFunction(n))return n.call(this,t,e);if(r&&(t=e),!!S.isString(t)){if(S.isString(n))return t.indexOf(n)!==-1;if(S.isRegExp(n))return n.test(t)}}function $m(i){return i.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,e,n)=>e.toUpperCase()+n)}function tp(i,t){const e=S.toCamelCase(" "+t);["get","set","has"].forEach(n=>{Object.defineProperty(i,n+e,{value:function(r,s,o){return this[n].call(this,t,r,s,o)},configurable:!0})})}let kt=class{constructor(t){t&&this.set(t)}set(t,e,n){const r=this;function s(a,l,h){const c=Ri(l);if(!c)throw new Error("header name must be a non-empty string");const u=S.findKey(r,c);(!u||r[u]===void 0||h===!0||h===void 0&&r[u]!==!1)&&(r[u||l]=Wr(a))}const o=(a,l)=>S.forEach(a,(h,c)=>s(h,c,l));if(S.isPlainObject(t)||t instanceof this.constructor)o(t,e);else if(S.isString(t)&&(t=t.trim())&&!Km(t))o(Zm(t),e);else if(S.isObject(t)&&S.isIterable(t)){let a={},l,h;for(const c of t){if(!S.isArray(c))throw TypeError("Object iterator must return a key-value pair");a[h=c[0]]=(l=a[h])?S.isArray(l)?[...l,c[1]]:[l,c[1]]:c[1]}o(a,e)}else t!=null&&s(e,t,n);return this}get(t,e){if(t=Ri(t),t){const n=S.findKey(this,t);if(n){const r=this[n];if(!e)return r;if(e===!0)return Jm(r);if(S.isFunction(e))return e.call(this,r,n);if(S.isRegExp(e))return e.exec(r);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,e){if(t=Ri(t),t){const n=S.findKey(this,t);return!!(n&&this[n]!==void 0&&(!e||lo(this,this[n],n,e)))}return!1}delete(t,e){const n=this;let r=!1;function s(o){if(o=Ri(o),o){const a=S.findKey(n,o);a&&(!e||lo(n,n[a],a,e))&&(delete n[a],r=!0)}}return S.isArray(t)?t.forEach(s):s(t),r}clear(t){const e=Object.keys(this);let n=e.length,r=!1;for(;n--;){const s=e[n];(!t||lo(this,this[s],s,t,!0))&&(delete this[s],r=!0)}return r}normalize(t){const e=this,n={};return S.forEach(this,(r,s)=>{const o=S.findKey(n,s);if(o){e[o]=Wr(r),delete e[s];return}const a=t?$m(s):String(s).trim();a!==s&&delete e[s],e[a]=Wr(r),n[a]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const e=Object.create(null);return S.forEach(this,(n,r)=>{n!=null&&n!==!1&&(e[r]=t&&S.isArray(n)?n.join(", "):n)}),e}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,e])=>t+": "+e).join(`
4
+ `)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...e){const n=new this(t);return e.forEach(r=>n.set(r)),n}static accessor(t){const n=(this[Xl]=this[Xl]={accessors:{}}).accessors,r=this.prototype;function s(o){const a=Ri(o);n[a]||(tp(r,o),n[a]=!0)}return S.isArray(t)?t.forEach(s):s(t),this}};kt.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);S.reduceDescriptors(kt.prototype,({value:i},t)=>{let e=t[0].toUpperCase()+t.slice(1);return{get:()=>i,set(n){this[e]=n}}});S.freezeMethods(kt);function co(i,t){const e=this||fr,n=t||e,r=kt.from(n.headers);let s=n.data;return S.forEach(i,function(a){s=a.call(e,s,r.normalize(),t?t.status:void 0)}),r.normalize(),s}function Oh(i){return!!(i&&i.__CANCEL__)}function Ai(i,t,e){Z.call(this,i??"canceled",Z.ERR_CANCELED,t,e),this.name="CanceledError"}S.inherits(Ai,Z,{__CANCEL__:!0});function Fh(i,t,e){const n=e.config.validateStatus;!e.status||!n||n(e.status)?i(e):t(new Z("Request failed with status code "+e.status,[Z.ERR_BAD_REQUEST,Z.ERR_BAD_RESPONSE][Math.floor(e.status/100)-4],e.config,e.request,e))}function ep(i){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(i);return t&&t[1]||""}function np(i,t){i=i||10;const e=new Array(i),n=new Array(i);let r=0,s=0,o;return t=t!==void 0?t:1e3,function(l){const h=Date.now(),c=n[s];o||(o=h),e[r]=l,n[r]=h;let u=s,f=0;for(;u!==r;)f+=e[u++],u=u%i;if(r=(r+1)%i,r===s&&(s=(s+1)%i),h-o<t)return;const g=c&&h-c;return g?Math.round(f*1e3/g):void 0}}function ip(i,t){let e=0,n=1e3/t,r,s;const o=(h,c=Date.now())=>{e=c,r=null,s&&(clearTimeout(s),s=null),i(...h)};return[(...h)=>{const c=Date.now(),u=c-e;u>=n?o(h,c):(r=h,s||(s=setTimeout(()=>{s=null,o(r)},n-u)))},()=>r&&o(r)]}const ss=(i,t,e=3)=>{let n=0;const r=np(50,250);return ip(s=>{const o=s.loaded,a=s.lengthComputable?s.total:void 0,l=o-n,h=r(l),c=o<=a;n=o;const u={loaded:o,total:a,progress:a?o/a:void 0,bytes:l,rate:h||void 0,estimated:h&&a&&c?(a-o)/h:void 0,event:s,lengthComputable:a!=null,[t?"download":"upload"]:!0};i(u)},e)},Gl=(i,t)=>{const e=i!=null;return[n=>t[0]({lengthComputable:e,total:i,loaded:n}),t[1]]},kl=i=>(...t)=>S.asap(()=>i(...t)),rp=Pt.hasStandardBrowserEnv?((i,t)=>e=>(e=new URL(e,Pt.origin),i.protocol===e.protocol&&i.host===e.host&&(t||i.port===e.port)))(new URL(Pt.origin),Pt.navigator&&/(msie|trident)/i.test(Pt.navigator.userAgent)):()=>!0,sp=Pt.hasStandardBrowserEnv?{write(i,t,e,n,r,s,o){if(typeof document>"u")return;const a=[`${i}=${encodeURIComponent(t)}`];S.isNumber(e)&&a.push(`expires=${new Date(e).toUTCString()}`),S.isString(n)&&a.push(`path=${n}`),S.isString(r)&&a.push(`domain=${r}`),s===!0&&a.push("secure"),S.isString(o)&&a.push(`SameSite=${o}`),document.cookie=a.join("; ")},read(i){if(typeof document>"u")return null;const t=document.cookie.match(new RegExp("(?:^|; )"+i+"=([^;]*)"));return t?decodeURIComponent(t[1]):null},remove(i){this.write(i,"",Date.now()-864e5,"/")}}:{write(){},read(){return null},remove(){}};function op(i){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(i)}function ap(i,t){return t?i.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):i}function Nh(i,t,e){let n=!op(t);return i&&(n||e==!1)?ap(i,t):t}const Hl=i=>i instanceof kt?{...i}:i;function Dn(i,t){t=t||{};const e={};function n(h,c,u,f){return S.isPlainObject(h)&&S.isPlainObject(c)?S.merge.call({caseless:f},h,c):S.isPlainObject(c)?S.merge({},c):S.isArray(c)?c.slice():c}function r(h,c,u,f){if(S.isUndefined(c)){if(!S.isUndefined(h))return n(void 0,h,u,f)}else return n(h,c,u,f)}function s(h,c){if(!S.isUndefined(c))return n(void 0,c)}function o(h,c){if(S.isUndefined(c)){if(!S.isUndefined(h))return n(void 0,h)}else return n(void 0,c)}function a(h,c,u){if(u in t)return n(h,c);if(u in i)return n(void 0,h)}const l={url:s,method:s,data:s,baseURL:o,transformRequest:o,transformResponse:o,paramsSerializer:o,timeout:o,timeoutMessage:o,withCredentials:o,withXSRFToken:o,adapter:o,responseType:o,xsrfCookieName:o,xsrfHeaderName:o,onUploadProgress:o,onDownloadProgress:o,decompress:o,maxContentLength:o,maxBodyLength:o,beforeRedirect:o,transport:o,httpAgent:o,httpsAgent:o,cancelToken:o,socketPath:o,responseEncoding:o,validateStatus:a,headers:(h,c,u)=>r(Hl(h),Hl(c),u,!0)};return S.forEach(Object.keys({...i,...t}),function(c){const u=l[c]||r,f=u(i[c],t[c],c);S.isUndefined(f)&&u!==a||(e[c]=f)}),e}const Bh=i=>{const t=Dn({},i);let{data:e,withXSRFToken:n,xsrfHeaderName:r,xsrfCookieName:s,headers:o,auth:a}=t;if(t.headers=o=kt.from(o),t.url=Ih(Nh(t.baseURL,t.url,t.allowAbsoluteUrls),i.params,i.paramsSerializer),a&&o.set("Authorization","Basic "+btoa((a.username||"")+":"+(a.password?unescape(encodeURIComponent(a.password)):""))),S.isFormData(e)){if(Pt.hasStandardBrowserEnv||Pt.hasStandardBrowserWebWorkerEnv)o.setContentType(void 0);else if(S.isFunction(e.getHeaders)){const l=e.getHeaders(),h=["content-type","content-length"];Object.entries(l).forEach(([c,u])=>{h.includes(c.toLowerCase())&&o.set(c,u)})}}if(Pt.hasStandardBrowserEnv&&(n&&S.isFunction(n)&&(n=n(t)),n||n!==!1&&rp(t.url))){const l=r&&s&&sp.read(s);l&&o.set(r,l)}return t},lp=typeof XMLHttpRequest<"u",cp=lp&&function(i){return new Promise(function(e,n){const r=Bh(i);let s=r.data;const o=kt.from(r.headers).normalize();let{responseType:a,onUploadProgress:l,onDownloadProgress:h}=r,c,u,f,g,d;function m(){g&&g(),d&&d(),r.cancelToken&&r.cancelToken.unsubscribe(c),r.signal&&r.signal.removeEventListener("abort",c)}let p=new XMLHttpRequest;p.open(r.method.toUpperCase(),r.url,!0),p.timeout=r.timeout;function y(){if(!p)return;const A=kt.from("getAllResponseHeaders"in p&&p.getAllResponseHeaders()),C={data:!a||a==="text"||a==="json"?p.responseText:p.response,status:p.status,statusText:p.statusText,headers:A,config:i,request:p};Fh(function(E){e(E),m()},function(E){n(E),m()},C),p=null}"onloadend"in p?p.onloadend=y:p.onreadystatechange=function(){!p||p.readyState!==4||p.status===0&&!(p.responseURL&&p.responseURL.indexOf("file:")===0)||setTimeout(y)},p.onabort=function(){p&&(n(new Z("Request aborted",Z.ECONNABORTED,i,p)),p=null)},p.onerror=function(x){const C=x&&x.message?x.message:"Network Error",v=new Z(C,Z.ERR_NETWORK,i,p);v.event=x||null,n(v),p=null},p.ontimeout=function(){let x=r.timeout?"timeout of "+r.timeout+"ms exceeded":"timeout exceeded";const C=r.transitional||Dh;r.timeoutErrorMessage&&(x=r.timeoutErrorMessage),n(new Z(x,C.clarifyTimeoutError?Z.ETIMEDOUT:Z.ECONNABORTED,i,p)),p=null},s===void 0&&o.setContentType(null),"setRequestHeader"in p&&S.forEach(o.toJSON(),function(x,C){p.setRequestHeader(C,x)}),S.isUndefined(r.withCredentials)||(p.withCredentials=!!r.withCredentials),a&&a!=="json"&&(p.responseType=r.responseType),h&&([f,d]=ss(h,!0),p.addEventListener("progress",f)),l&&p.upload&&([u,g]=ss(l),p.upload.addEventListener("progress",u),p.upload.addEventListener("loadend",g)),(r.cancelToken||r.signal)&&(c=A=>{p&&(n(!A||A.type?new Ai(null,i,p):A),p.abort(),p=null)},r.cancelToken&&r.cancelToken.subscribe(c),r.signal&&(r.signal.aborted?c():r.signal.addEventListener("abort",c)));const w=ep(r.url);if(w&&Pt.protocols.indexOf(w)===-1){n(new Z("Unsupported protocol "+w+":",Z.ERR_BAD_REQUEST,i));return}p.send(s||null)})},hp=(i,t)=>{const{length:e}=i=i?i.filter(Boolean):[];if(t||e){let n=new AbortController,r;const s=function(h){if(!r){r=!0,a();const c=h instanceof Error?h:this.reason;n.abort(c instanceof Z?c:new Ai(c instanceof Error?c.message:c))}};let o=t&&setTimeout(()=>{o=null,s(new Z(`timeout ${t} of ms exceeded`,Z.ETIMEDOUT))},t);const a=()=>{i&&(o&&clearTimeout(o),o=null,i.forEach(h=>{h.unsubscribe?h.unsubscribe(s):h.removeEventListener("abort",s)}),i=null)};i.forEach(h=>h.addEventListener("abort",s));const{signal:l}=n;return l.unsubscribe=()=>S.asap(a),l}},up=function*(i,t){let e=i.byteLength;if(e<t){yield i;return}let n=0,r;for(;n<e;)r=n+t,yield i.slice(n,r),n=r},fp=async function*(i,t){for await(const e of dp(i))yield*up(e,t)},dp=async function*(i){if(i[Symbol.asyncIterator]){yield*i;return}const t=i.getReader();try{for(;;){const{done:e,value:n}=await t.read();if(e)break;yield n}}finally{await t.cancel()}},zl=(i,t,e,n)=>{const r=fp(i,t);let s=0,o,a=l=>{o||(o=!0,n&&n(l))};return new ReadableStream({async pull(l){try{const{done:h,value:c}=await r.next();if(h){a(),l.close();return}let u=c.byteLength;if(e){let f=s+=u;e(f)}l.enqueue(new Uint8Array(c))}catch(h){throw a(h),h}},cancel(l){return a(l),r.return()}},{highWaterMark:2})},Wl=64*1024,{isFunction:Sr}=S,gp=(({Request:i,Response:t})=>({Request:i,Response:t}))(S.global),{ReadableStream:jl,TextEncoder:Yl}=S.global,Vl=(i,...t)=>{try{return!!i(...t)}catch{return!1}},mp=i=>{i=S.merge.call({skipUndefined:!0},gp,i);const{fetch:t,Request:e,Response:n}=i,r=t?Sr(t):typeof fetch=="function",s=Sr(e),o=Sr(n);if(!r)return!1;const a=r&&Sr(jl),l=r&&(typeof Yl=="function"?(d=>m=>d.encode(m))(new Yl):async d=>new Uint8Array(await new e(d).arrayBuffer())),h=s&&a&&Vl(()=>{let d=!1;const m=new e(Pt.origin,{body:new jl,method:"POST",get duplex(){return d=!0,"half"}}).headers.has("Content-Type");return d&&!m}),c=o&&a&&Vl(()=>S.isReadableStream(new n("").body)),u={stream:c&&(d=>d.body)};r&&["text","arrayBuffer","blob","formData","stream"].forEach(d=>{!u[d]&&(u[d]=(m,p)=>{let y=m&&m[d];if(y)return y.call(m);throw new Z(`Response type '${d}' is not supported`,Z.ERR_NOT_SUPPORT,p)})});const f=async d=>{if(d==null)return 0;if(S.isBlob(d))return d.size;if(S.isSpecCompliantForm(d))return(await new e(Pt.origin,{method:"POST",body:d}).arrayBuffer()).byteLength;if(S.isArrayBufferView(d)||S.isArrayBuffer(d))return d.byteLength;if(S.isURLSearchParams(d)&&(d=d+""),S.isString(d))return(await l(d)).byteLength},g=async(d,m)=>{const p=S.toFiniteNumber(d.getContentLength());return p??f(m)};return async d=>{let{url:m,method:p,data:y,signal:w,cancelToken:A,timeout:x,onDownloadProgress:C,onUploadProgress:v,responseType:E,headers:T,withCredentials:b="same-origin",fetchOptions:R}=Bh(d),_=t||fetch;E=E?(E+"").toLowerCase():"text";let M=hp([w,A&&A.toAbortSignal()],x),D=null;const I=M&&M.unsubscribe&&(()=>{M.unsubscribe()});let N;try{if(v&&h&&p!=="get"&&p!=="head"&&(N=await g(T,y))!==0){let z=new e(m,{method:"POST",body:y,duplex:"half"}),L;if(S.isFormData(y)&&(L=z.headers.get("content-type"))&&T.setContentType(L),z.body){const[V,K]=Gl(N,ss(kl(v)));y=zl(z.body,Wl,V,K)}}S.isString(b)||(b=b?"include":"omit");const O=s&&"credentials"in e.prototype,B={...R,signal:M,method:p.toUpperCase(),headers:T.normalize().toJSON(),body:y,duplex:"half",credentials:O?b:void 0};D=s&&new e(m,B);let F=await(s?_(D,R):_(m,B));const X=c&&(E==="stream"||E==="response");if(c&&(C||X&&I)){const z={};["status","statusText","headers"].forEach(Q=>{z[Q]=F[Q]});const L=S.toFiniteNumber(F.headers.get("content-length")),[V,K]=C&&Gl(L,ss(kl(C),!0))||[];F=new n(zl(F.body,Wl,V,()=>{K&&K(),I&&I()}),z)}E=E||"text";let k=await u[S.findKey(u,E)||"text"](F,d);return!X&&I&&I(),await new Promise((z,L)=>{Fh(z,L,{data:k,headers:kt.from(F.headers),status:F.status,statusText:F.statusText,config:d,request:D})})}catch(O){throw I&&I(),O&&O.name==="TypeError"&&/Load failed|fetch/i.test(O.message)?Object.assign(new Z("Network Error",Z.ERR_NETWORK,d,D),{cause:O.cause||O}):Z.from(O,O&&O.code,d,D)}}},pp=new Map,Xh=i=>{let t=i&&i.env||{};const{fetch:e,Request:n,Response:r}=t,s=[n,r,e];let o=s.length,a=o,l,h,c=pp;for(;a--;)l=s[a],h=c.get(l),h===void 0&&c.set(l,h=a?new Map:mp(t)),c=h;return h};Xh();const Oa={http:Mm,xhr:cp,fetch:{get:Xh}};S.forEach(Oa,(i,t)=>{if(i){try{Object.defineProperty(i,"name",{value:t})}catch{}Object.defineProperty(i,"adapterName",{value:t})}});const Ul=i=>`- ${i}`,yp=i=>S.isFunction(i)||i===null||i===!1;function wp(i,t){i=S.isArray(i)?i:[i];const{length:e}=i;let n,r;const s={};for(let o=0;o<e;o++){n=i[o];let a;if(r=n,!yp(n)&&(r=Oa[(a=String(n)).toLowerCase()],r===void 0))throw new Z(`Unknown adapter '${a}'`);if(r&&(S.isFunction(r)||(r=r.get(t))))break;s[a||"#"+o]=r}if(!r){const o=Object.entries(s).map(([l,h])=>`adapter ${l} `+(h===!1?"is not supported by the environment":"is not available in the build"));let a=e?o.length>1?`since :
5
+ `+o.map(Ul).join(`
6
+ `):" "+Ul(o[0]):"as no adapter specified";throw new Z("There is no suitable adapter to dispatch the request "+a,"ERR_NOT_SUPPORT")}return r}const Gh={getAdapter:wp,adapters:Oa};function ho(i){if(i.cancelToken&&i.cancelToken.throwIfRequested(),i.signal&&i.signal.aborted)throw new Ai(null,i)}function ql(i){return ho(i),i.headers=kt.from(i.headers),i.data=co.call(i,i.transformRequest),["post","put","patch"].indexOf(i.method)!==-1&&i.headers.setContentType("application/x-www-form-urlencoded",!1),Gh.getAdapter(i.adapter||fr.adapter,i)(i).then(function(n){return ho(i),n.data=co.call(i,i.transformResponse,n),n.headers=kt.from(n.headers),n},function(n){return Oh(n)||(ho(i),n&&n.response&&(n.response.data=co.call(i,i.transformResponse,n.response),n.response.headers=kt.from(n.response.headers))),Promise.reject(n)})}const kh="1.13.2",Ms={};["object","boolean","number","function","string","symbol"].forEach((i,t)=>{Ms[i]=function(n){return typeof n===i||"a"+(t<1?"n ":" ")+i}});const Ql={};Ms.transitional=function(t,e,n){function r(s,o){return"[Axios v"+kh+"] Transitional option '"+s+"'"+o+(n?". "+n:"")}return(s,o,a)=>{if(t===!1)throw new Z(r(o," has been removed"+(e?" in "+e:"")),Z.ERR_DEPRECATED);return e&&!Ql[o]&&(Ql[o]=!0,console.warn(r(o," has been deprecated since v"+e+" and will be removed in the near future"))),t?t(s,o,a):!0}};Ms.spelling=function(t){return(e,n)=>(console.warn(`${n} is likely a misspelling of ${t}`),!0)};function Ap(i,t,e){if(typeof i!="object")throw new Z("options must be an object",Z.ERR_BAD_OPTION_VALUE);const n=Object.keys(i);let r=n.length;for(;r-- >0;){const s=n[r],o=t[s];if(o){const a=i[s],l=a===void 0||o(a,s,i);if(l!==!0)throw new Z("option "+s+" must be "+l,Z.ERR_BAD_OPTION_VALUE);continue}if(e!==!0)throw new Z("Unknown option "+s,Z.ERR_BAD_OPTION)}}const jr={assertOptions:Ap,validators:Ms},he=jr.validators;let bn=class{constructor(t){this.defaults=t||{},this.interceptors={request:new Bl,response:new Bl}}async request(t,e){try{return await this._request(t,e)}catch(n){if(n instanceof Error){let r={};Error.captureStackTrace?Error.captureStackTrace(r):r=new Error;const s=r.stack?r.stack.replace(/^.+\n/,""):"";try{n.stack?s&&!String(n.stack).endsWith(s.replace(/^.+\n.+\n/,""))&&(n.stack+=`
7
+ `+s):n.stack=s}catch{}}throw n}}_request(t,e){typeof t=="string"?(e=e||{},e.url=t):e=t||{},e=Dn(this.defaults,e);const{transitional:n,paramsSerializer:r,headers:s}=e;n!==void 0&&jr.assertOptions(n,{silentJSONParsing:he.transitional(he.boolean),forcedJSONParsing:he.transitional(he.boolean),clarifyTimeoutError:he.transitional(he.boolean)},!1),r!=null&&(S.isFunction(r)?e.paramsSerializer={serialize:r}:jr.assertOptions(r,{encode:he.function,serialize:he.function},!0)),e.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?e.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:e.allowAbsoluteUrls=!0),jr.assertOptions(e,{baseUrl:he.spelling("baseURL"),withXsrfToken:he.spelling("withXSRFToken")},!0),e.method=(e.method||this.defaults.method||"get").toLowerCase();let o=s&&S.merge(s.common,s[e.method]);s&&S.forEach(["delete","get","head","post","put","patch","common"],d=>{delete s[d]}),e.headers=kt.concat(o,s);const a=[];let l=!0;this.interceptors.request.forEach(function(m){typeof m.runWhen=="function"&&m.runWhen(e)===!1||(l=l&&m.synchronous,a.unshift(m.fulfilled,m.rejected))});const h=[];this.interceptors.response.forEach(function(m){h.push(m.fulfilled,m.rejected)});let c,u=0,f;if(!l){const d=[ql.bind(this),void 0];for(d.unshift(...a),d.push(...h),f=d.length,c=Promise.resolve(e);u<f;)c=c.then(d[u++],d[u++]);return c}f=a.length;let g=e;for(;u<f;){const d=a[u++],m=a[u++];try{g=d(g)}catch(p){m.call(this,p);break}}try{c=ql.call(this,g)}catch(d){return Promise.reject(d)}for(u=0,f=h.length;u<f;)c=c.then(h[u++],h[u++]);return c}getUri(t){t=Dn(this.defaults,t);const e=Nh(t.baseURL,t.url,t.allowAbsoluteUrls);return Ih(e,t.params,t.paramsSerializer)}};S.forEach(["delete","get","head","options"],function(t){bn.prototype[t]=function(e,n){return this.request(Dn(n||{},{method:t,url:e,data:(n||{}).data}))}});S.forEach(["post","put","patch"],function(t){function e(n){return function(s,o,a){return this.request(Dn(a||{},{method:t,headers:n?{"Content-Type":"multipart/form-data"}:{},url:s,data:o}))}}bn.prototype[t]=e(),bn.prototype[t+"Form"]=e(!0)});let xp=class Hh{constructor(t){if(typeof t!="function")throw new TypeError("executor must be a function.");let e;this.promise=new Promise(function(s){e=s});const n=this;this.promise.then(r=>{if(!n._listeners)return;let s=n._listeners.length;for(;s-- >0;)n._listeners[s](r);n._listeners=null}),this.promise.then=r=>{let s;const o=new Promise(a=>{n.subscribe(a),s=a}).then(r);return o.cancel=function(){n.unsubscribe(s)},o},t(function(s,o,a){n.reason||(n.reason=new Ai(s,o,a),e(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const e=this._listeners.indexOf(t);e!==-1&&this._listeners.splice(e,1)}toAbortSignal(){const t=new AbortController,e=n=>{t.abort(n)};return this.subscribe(e),t.signal.unsubscribe=()=>this.unsubscribe(e),t.signal}static source(){let t;return{token:new Hh(function(r){t=r}),cancel:t}}};function Cp(i){return function(e){return i.apply(null,e)}}function Ep(i){return S.isObject(i)&&i.isAxiosError===!0}const Bo={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(Bo).forEach(([i,t])=>{Bo[t]=i});function zh(i){const t=new bn(i),e=Ah(bn.prototype.request,t);return S.extend(e,bn.prototype,t,{allOwnKeys:!0}),S.extend(e,t,null,{allOwnKeys:!0}),e.create=function(r){return zh(Dn(i,r))},e}const gt=zh(fr);gt.Axios=bn;gt.CanceledError=Ai;gt.CancelToken=xp;gt.isCancel=Oh;gt.VERSION=kh;gt.toFormData=Ds;gt.AxiosError=Z;gt.Cancel=gt.CanceledError;gt.all=function(t){return Promise.all(t)};gt.spread=Cp;gt.isAxiosError=Ep;gt.mergeConfig=Dn;gt.AxiosHeaders=kt;gt.formToJSON=i=>Mh(S.isHTMLForm(i)?new FormData(i):i);gt.getAdapter=Gh.getAdapter;gt.HttpStatusCode=Bo;gt.default=gt;const{Axios:zw,AxiosError:Ww,CanceledError:jw,isCancel:Yw,CancelToken:Vw,VERSION:Uw,all:qw,Cancel:Qw,isAxiosError:Zw,spread:Jw,toFormData:Kw,AxiosHeaders:Zl,HttpStatusCode:$w,formToJSON:tA,getAdapter:eA,mergeConfig:nA}=gt,uo="".trim(),Fa=gt.create({baseURL:void 0,timeout:6e4});Fa.interceptors.request.use(i=>{const t=i.headers instanceof Zl?i.headers.get("Authorization"):i.headers?.Authorization??i.headers?.authorization,e=t!==void 0&&String(t).trim()!=="";if(uo&&!e)if(i.headers instanceof Zl)i.headers.set("Authorization",uo);else{const n=i.headers??{};n.Authorization=uo,i.headers=n}return i},i=>(console.error(i),Promise.reject(i)));Fa.interceptors.response.use(i=>i.data,i=>{if(i.response)switch(i.response.status){case 401:console.error("未授权,请重新登录");break;case 404:console.error("请求的资源不存在");break;case 500:console.error("服务器内部错误");break;default:console.error("请求失败",i.response.status)}return Promise.reject(i)});function vp(i){return i||""}function bp(i,t){const e={"Content-Type":i},n=vp(t);return n&&(e.Authorization=n),e}function Tp(i,t,e,n){return Fa({url:i,params:t,responseType:n?.responseType,headers:bp("application/json;charset=UTF8",e)})}function Sp(i){return new Promise((t,e)=>{const n=new FileReader;n.onload=()=>{const r=n.result;if(typeof r=="string"){t(r);return}e(new Error("blob to base64 failed"))},n.onerror=()=>e(n.error??new Error("read blob failed")),n.readAsDataURL(i)})}async function Rp(i,t,e){const s=await Tp(i,typeof t=="string"?void 0:t,typeof t=="string"?t:e,{responseType:"blob"});return Sp(s)}xo.extend(Ug);const Jl="#sym:";function Na(i){if(typeof i=="function")return i;if(typeof i!="string"||!i.startsWith(Jl))return;const t=i.slice(Jl.length).trim();if(!t)return;const n=globalThis.__layerSymbols?.[t];if(typeof n=="function")return n;console.warn(`[LayerSymbol] 未找到符号函数: ${i}`)}function xi(i){const t=Y.bboxPolygon(i),e=Y.toMercator(t),[[n,r],,[s,o]]=e.geometry.coordinates[0];return[n,r,s,o]}function Oi(i,t,e){return i+(t-i)*e}function Os(i,t,e,n=5,r=1.2){function s(c,u,f){return Math.exp(-(c*c+u*u)/(2*f*f))}const o=Math.floor(n/2);let a=[],l=0;for(let c=-o;c<=o;c++)for(let u=-o;u<=o;u++){const f=s(u,c,r);a.push(f),l+=f}a=a.map(c=>c/l);const h=Array.from({length:e},()=>Array(t).fill(void 0));for(let c=0;c<e;c++)for(let u=0;u<t;u++){if(i[c][u]===void 0){h[c][u]=void 0;continue}let f=0,g=0,d=0;for(let m=-o;m<=o;m++)for(let p=-o;p<=o;p++){const y=Math.min(t-1,Math.max(0,u+p)),w=Math.min(e-1,Math.max(0,c+m)),A=i[w][y];A!==void 0&&(f+=A*a[d],g+=a[d]),d++}h[c][u]=g>0?f/g:void 0}return h}function pn(i,t=1,e=3){const n=Number(i);return Number.isFinite(n)?Math.max(0,Math.min(e,n)):t}function Ba(i,t,e,n){const r=pn(n);if(r===0)return i;const s=Math.max(1,Math.ceil(r*2));return Os(i,t,e,s*2+1,r*1.2)}function Wh(i,t,e,n,r){const[s,o,a,l]=r,h=s+(a-s)*(i/(e-1)),c=l-(l-o)*(t/(n-1));return[h,c]}function jh(i,t,e,n,r){const[s,o,a,l]=r,h=s+(a-s)*(i/(e-1)),c=l-(l-o)*(t/(n-1));return[h,c]}function Pp(i,t,e,n){return i.map(r=>{const s=r.coordinates.map(o=>o.map(a=>a.map(([l,h])=>jh(l,h,t,e,n))));return{...r,coordinates:s,properties:r.properties}})}function _p(i,t,e,n){return i.map(r=>{const s=r.coordinates.map(o=>o.map(a=>a.map(([l,h])=>Wh(l,h,t,e,n))));return{...r,coordinates:s}})}function os(i,t,e,n,r){const s=Math.floor(t),o=Math.min(s+1,n-1),a=Math.floor(e),l=Math.min(a+1,r-1),h=i[a*n+s],c=i[a*n+o],u=i[l*n+s],f=i[l*n+o],g=t-s,d=e-a;return h*(1-g)*(1-d)+c*g*(1-d)+u*(1-g)*d+f*g*d}async function Mn(i,t,e,n,r){let s=0,o=0;const a=document.createElement("canvas"),l=a.getContext("2d"),h=new Image,c=await Rp(i,n);return h.src=c,new Promise(u=>{h.onload=()=>{s=h.width,o=h.height,a.width=s,a.height=o,l.clearRect(0,0,s,o),l.drawImage(h,0,0);const g=l.getImageData(0,0,s,o).data,[d,m]=t,p=(R,_)=>{const M=(_*s+R)*4;return[g[M]??0,g[M+1]??0,g[M+2]??0,g[M+3]??0]},y=(R,_,M,D,I=4)=>Math.abs(R-D[0])<=I&&Math.abs(_-D[1])<=I&&Math.abs(M-D[2])<=I,w=r?.detectNoDataByBorderColor!==!1;let A=[];const x=(R,_,M)=>A.some(D=>y(R,_,M,D,6));if(w){const R=p(0,0),_=p(Math.max(0,s-1),0),M=p(0,Math.max(0,o-1)),D=p(Math.max(0,s-1),Math.max(0,o-1)),I=[R,_,M,D].filter(B=>B[3]>0).map(B=>[B[0],B[1],B[2]]),N=[];for(const B of I){const F=N.find(X=>y(B[0],B[1],B[2],X.rgb,6));F?F.count+=1:N.push({rgb:B,count:1})}N.sort((B,F)=>F.count-B.count);const O=N[0];A=O&&O.count>=3?[O.rgb]:[]}const C=s*o,v=new Uint8Array(C),E=[],T=R=>{if(R<0||R>=C||v[R])return;const _=R*4,M=g[_]??0,D=g[_+1]??0,I=g[_+2]??0;(g[_+3]??0)>0&&A.length>0&&x(M,D,I)&&(v[R]=1,E.push(R))};for(let R=0;R<s;R++)T(R),T((o-1)*s+R);for(let R=0;R<o;R++)T(R*s),T(R*s+(s-1));for(let R=0;R<E.length;R++){const _=E[R],M=_%s,D=Math.floor(_/s);M>0&&T(_-1),M<s-1&&T(_+1),D>0&&T(_-s),D<o-1&&T(_+s)}const b=[];for(let R=0;R<o;R++)for(let _=0;_<s;_++){const M=(R*s+_)*4,D=R*s+_,I=g[M]??0,N=g[M+1]??0,O=g[M+2]??0;if((g[M+3]??0)===0||v[D]===1){b.push(void 0);continue}const F=.299*I+.587*N+.114*O,X=d+F/255*(m-d);X<d?e?.[0]?b.push(void 0):b.push(d):X>m?e?.[1]?b.push(void 0):b.push(m):b.push(X)}u({grayArr:b,width:s,height:o})}})}function cn(i){return i=i.trim(),i.endsWith("%")?parseFloat(i)/100*255:parseFloat(i)}function Xo(i){return i=i.trim(),i.endsWith("%")?parseFloat(i)/100:parseFloat(i)}function hn(i){return isFinite(i)?Math.max(0,Math.min(255,Math.round(i))):0}function zi(i){if(!i)return[0,0,0,0];i=i.trim();const t=i.match(/rgba?\(\s*([0-9.+%]+)[,\s]+([0-9.+%]+)[,\s]+([0-9.+%]+)(?:[,\s]+([0-9.+%]+))?\s*\)/i);if(t){const e=cn(t[1]),n=cn(t[2]),r=cn(t[3]),s=t[4]?Xo(t[4]):1;return[hn(e),hn(n),hn(r),Math.round(s*255)]}if(i[0]==="#"){let e=i.slice(1);if(e.length===3&&(e=e.split("").map(n=>n+n).join("")),e.length===6){const n=parseInt(e.slice(0,2),16),r=parseInt(e.slice(2,4),16),s=parseInt(e.slice(4,6),16);return[n,r,s,255]}}try{const e=document.createElement("canvas").getContext("2d");e.fillStyle=i;const n=e.fillStyle;if(n&&n!==""){const r=n.match(/rgba?\(([^)]+)\)/);if(r){const s=r[1].split(",").map(c=>c.trim()),o=cn(s[0]),a=cn(s[1]),l=cn(s[2]),h=s[3]?Xo(s[3]):1;return[hn(o),hn(a),hn(l),Math.round(h*255)]}}}catch{}return[0,0,0,0]}function Xa(i,t){if(!Array.isArray(i)||i.length===0)return[];if(!t||t.length!==2)return i;const e=Number(t[0]),n=Number(t[1]);if(!isFinite(e)||!isFinite(n))return i;const r=i.length,s=Math.max(0,Math.min(r,Math.floor(Math.min(e,n)))),o=Math.max(0,Math.min(r,Math.ceil(Math.max(e,n))));return i.slice(s,o)}function di(i,t){const e=Xa(i,t);if(!e.length)return;const n=e.find(a=>a?.scope?.length),r=[...e].reverse().find(a=>a?.scope?.length),s=n?.scope?.length?Number(n.scope[0]):void 0,o=r?.scope?.length?Number(r.scope[r.scope.length-1]):void 0;if(!(typeof s>"u"||isNaN(s)))return typeof o>"u"||isNaN(o)?[s,s]:[s,o]}function re(i,t){const e=[],n={},r=Xa(i,t);for(const o of r){const a=o?.scope?.length?Number(o.scope[0]):NaN;isNaN(a)||(e.push(a),n[a]=o.color)}return{uniqueThresholds:Array.from(new Set(e)).sort((o,a)=>o-a),colorMap:n}}const fo=new globalThis.Map;function Lp(i){const t=i?.config,e=(t?.legend??[]).map(n=>({name:n?.name,scope:n?.scope??[],color:n?.color}));return JSON.stringify({url:i?.url,authorization:i?.authorization??"",extent:t?.extent??[],scope:t?.scope??[],legendScope:t?.legendScope??[],legend:e})}async function Zi(i){const t=Lp(i),e=fo.get(t);if(e)return e;const n=(async()=>{const{config:r,url:s,authorization:o}=i;if(!r)return;const{extent:a,scope:l,legend:h,legendScope:c}=r;if(!a)return;const u=xi(a),f=[-99999,99999];An.isNumber(l?.[0])&&(f[0]=l[0]),An.isNumber(l?.[1])&&(f[1]=l[1]);const{grayArr:g,width:d,height:m}=await Mn(s,f,void 0,o),{uniqueThresholds:p,colorMap:y}=re(h,c),w=[];for(let v=0;v<m;v++){w[v]=[];for(let E=0;E<d;E++)w[v][E]=g[v*d+E]}const A=Os(w,d,m),x=[],C=[];for(let v=0;v<m;v++){x[v]=[],C[v]=[];for(let E=0;E<d;E++){const T=w[v]&&typeof w[v][E]<"u"?w[v][E]:void 0;x[v][E]=T==null||isNaN(Number(T))?NaN:Number(T);const b=A[v]&&typeof A[v][E]<"u"?A[v][E]:void 0;C[v][E]=b==null||isNaN(Number(b))?NaN:Number(b)}}return{width:d,height:m,extent:u,rawArr2D:x,smoothArr2D:C,uniqueThresholds:p,colorMap:y}})();fo.set(t,n);try{return await n}finally{fo.delete(t)}}function Yh(i,t,e){const n=i[2]-i[0],r=i[3]-i[1],s=n/r;let o=t,a=Math.round(o/s);return a>e&&(a=e,o=Math.round(a*s)),{width:o,height:a}}function Ip(i,t){const e=y=>{if(Array.isArray(y)&&y.length>=2){const w=Number(y[0]),A=Number(y[1]);if(Number.isFinite(w)&&Number.isFinite(A))return[w,A]}if(typeof y=="string"){const w=y.split(",").map(A=>Number(A.trim())).filter(A=>Number.isFinite(A));if(w.length>=2)return[w[0],w[1]]}},n=xi(i.config.extent),{width:r,height:s}=Yh(n,"2048","2048"),o=i?.config?.layerConfig??{},a=o.LAYERS,l=e(i?.config?.scope)??[0,0],h=e(i?.config?.componentScope)??e(i?.config?.uvScope)??e(o.COMPONENT_SCALE_RANGE)??e(o.COMPONENT_SCOPE)??e(o.UV_SCOPE);let c=l;if(An.isArray(a)&&a.length>1)if(h){const y=Math.max(Math.abs(h[0]),Math.abs(h[1]));c=[-y,y]}else{const y=Number(l[0]),w=Number(l[1]);if(Number.isFinite(y)&&Number.isFinite(w)){const A=Math.max(Math.abs(y),Math.abs(w));c=[-A,A]}}const u=c.toString(),f="".replace(/\/$/,""),g=String(i.url||"").replace(/^\/+/,""),p=(An.isArray(i?.type)?i.type:[i?.type]).includes("wms")?`${f}/wms/${g}`:`/wms/${g}`;if(An.isArray(a)){const y=[];return a.forEach(w=>{const A={...o,TIME:xo(t).utc().format("YYYY-MM-DDTHH:mm:ss.000[Z]"),COLORSCALERANGE:u,BBOX:n.join(","),WIDTH:""+r,HEIGHT:""+s};A.LAYERS=w,y.push(`${p}?${new URLSearchParams(A).toString()}`)}),y}else{const y={...o,TIME:xo(t).utc().format("YYYY-MM-DDTHH:mm:ss.000[Z]"),COLORSCALERANGE:u,BBOX:n.join(","),WIDTH:""+r,HEIGHT:""+s};return`${p}?${new URLSearchParams(y).toString()}`}}function Dp(i,t,e,n){if(!t||t.length===0)return[0,0,0,0];if(n==="discrete"||n==="grid"){let r=t[0];for(let o=0;o<t.length&&i>=t[o];o++)r=t[o];const s=e[t.indexOf(r)];return[s[0],s[1],s[2],s[3]??255]}else{if(i<=t[0]){const d=e[0];return[d[0],d[1],d[2],d[3]??255]}if(i>=t[t.length-1]){const d=e[e.length-1];return[d[0],d[1],d[2],d[3]??255]}let r=0;for(let d=0;d<t.length-1;d++)if(i>=t[d]&&i<=t[d+1]){r=d;break}const s=t[r],o=t[r+1],a=(i-s)/(o-s),l=e[r],h=e[r+1],c=Math.round(Oi(l[0],h[0],a)),u=Math.round(Oi(l[1],h[1],a)),f=Math.round(Oi(l[2],h[2],a)),g=Math.round(Oi(l[3]??255,h[3]??255,a));return[c,u,f,g]}}let Rr=null;const an=64,Tn=-1e30;function as(i,t,e){const n=i*t,r=new Float32Array(n);for(let s=0;s<t;s++)for(let o=0;o<i;o++){const a=s*i+o,l=e?.[s]?.[o];r[a]=l==null||isNaN(Number(l))?Tn:Number(l)}return r}function Mp(i,t,e){const n=i*t,r=new Uint8Array(n);for(let s=0;s<t;s++)for(let o=0;o<i;o++){const a=s*i+o,l=e?.[s]?.[o];r[a]=l==null||isNaN(Number(l))?0:255}return r}async function Op(){return Rr||(Rr=(async()=>{const i=navigator?.gpu;if(!i)return null;const t=await i.requestAdapter();return t?await t.requestDevice():null})(),Rr)}function Fp(){return`
8
+ struct Params {
9
+ width: u32,
10
+ height: u32,
11
+ thresholdCount: u32,
12
+ colorMode: u32,
13
+ minScope: f32,
14
+ maxScope: f32,
15
+ hasMin: u32,
16
+ hasMax: u32,
17
+ softenMaskEdge: u32,
18
+ _padding0: u32,
19
+ _padding1: u32,
20
+ _padding2: u32,
21
+ };
22
+
23
+ @group(0) @binding(0) var<storage, read> values: array<f32>;
24
+ @group(0) @binding(1) var<storage, read> maskValues: array<f32>;
25
+ @group(0) @binding(2) var<storage, read> thresholds: array<f32>;
26
+ @group(0) @binding(3) var<storage, read> colors: array<vec4<f32>>;
27
+ @group(0) @binding(4) var<uniform> params: Params;
28
+ @group(0) @binding(5) var<storage, read_write> outPixels: array<u32>;
29
+
30
+ fn packRGBA(rgba: vec4<f32>) -> u32 {
31
+ let r = u32(clamp(rgba.x, 0.0, 255.0));
32
+ let g = u32(clamp(rgba.y, 0.0, 255.0));
33
+ let b = u32(clamp(rgba.z, 0.0, 255.0));
34
+ var a = rgba.w;
35
+ if (a <= 1.0) {
36
+ a = a * 255.0;
37
+ }
38
+ let aa = u32(clamp(a, 0.0, 255.0));
39
+ return r | (g << 8u) | (b << 16u) | (aa << 24u);
40
+ }
41
+
42
+ fn colorDiscrete(v: f32) -> vec4<f32> {
43
+ var chosen = colors[0u];
44
+ var i: u32 = 0u;
45
+ loop {
46
+ if (i >= params.thresholdCount) {
47
+ break;
48
+ }
49
+ if (v >= thresholds[i]) {
50
+ chosen = colors[i];
51
+ } else {
52
+ break;
53
+ }
54
+ i = i + 1u;
55
+ }
56
+ return chosen;
57
+ }
58
+
59
+ fn colorGradient(v: f32) -> vec4<f32> {
60
+ let last = params.thresholdCount - 1u;
61
+ if (v <= thresholds[0u]) {
62
+ return colors[0u];
63
+ }
64
+ if (v >= thresholds[last]) {
65
+ return colors[last];
66
+ }
67
+
68
+ var i: u32 = 0u;
69
+ loop {
70
+ if (i >= last) {
71
+ break;
72
+ }
73
+ let t0 = thresholds[i];
74
+ let t1 = thresholds[i + 1u];
75
+ if (v >= t0 && v <= t1) {
76
+ let denom = max(t1 - t0, 0.000001);
77
+ let f = clamp((v - t0) / denom, 0.0, 1.0);
78
+ return colors[i] * (1.0 - f) + colors[i + 1u] * f;
79
+ }
80
+ i = i + 1u;
81
+ }
82
+
83
+ return colors[last];
84
+ }
85
+
86
+ fn isMaskVisible(v: f32) -> bool {
87
+ if (v <= ${Tn/10}) {
88
+ return false;
89
+ }
90
+ if (params.hasMin == 1u && v < params.minScope) {
91
+ return false;
92
+ }
93
+ if (params.hasMax == 1u && v > params.maxScope) {
94
+ return false;
95
+ }
96
+ return true;
97
+ }
98
+
99
+ fn maskVisibleAt(x: i32, y: i32) -> f32 {
100
+ if (x < 0 || y < 0 || x >= i32(params.width) || y >= i32(params.height)) {
101
+ return 0.0;
102
+ }
103
+ let i = u32(y) * params.width + u32(x);
104
+ let mv = maskValues[i];
105
+ return select(0.0, 1.0, isMaskVisible(mv));
106
+ }
107
+
108
+ fn maskCoverage(x: u32, y: u32) -> f32 {
109
+ let cx = i32(x);
110
+ let cy = i32(y);
111
+ var sum = 0.0;
112
+ sum += maskVisibleAt(cx - 1, cy - 1);
113
+ sum += maskVisibleAt(cx, cy - 1);
114
+ sum += maskVisibleAt(cx + 1, cy - 1);
115
+ sum += maskVisibleAt(cx - 1, cy);
116
+ sum += maskVisibleAt(cx, cy);
117
+ sum += maskVisibleAt(cx + 1, cy);
118
+ sum += maskVisibleAt(cx - 1, cy + 1);
119
+ sum += maskVisibleAt(cx, cy + 1);
120
+ sum += maskVisibleAt(cx + 1, cy + 1);
121
+ return sum / 9.0;
122
+ }
123
+
124
+ @compute @workgroup_size(64)
125
+ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
126
+ let idx = gid.x;
127
+ let total = params.width * params.height;
128
+ if (idx >= total) {
129
+ return;
130
+ }
131
+
132
+ let maskV = maskValues[idx];
133
+ if (!isMaskVisible(maskV)) {
134
+ outPixels[idx] = 0u;
135
+ return;
136
+ }
137
+
138
+ let v = values[idx];
139
+ if (v <= ${Tn/10}) {
140
+ outPixels[idx] = 0u;
141
+ return;
142
+ }
143
+
144
+ var color = colorDiscrete(v);
145
+ if (params.colorMode == 1u) {
146
+ color = colorGradient(v);
147
+ }
148
+
149
+ if (params.softenMaskEdge == 1u) {
150
+ let x = idx % params.width;
151
+ let y = idx / params.width;
152
+ let coverage = maskCoverage(x, y);
153
+ let edgeAlpha = smoothstep(0.58, 0.9, coverage);
154
+ color.w = color.w * edgeAlpha;
155
+ }
156
+
157
+ outPixels[idx] = packRGBA(color);
158
+ }
159
+ `}function Pi(i,t,e){const n=i.createBuffer({size:t.byteLength,usage:e,mappedAtCreation:!0});return new Uint8Array(n.getMappedRange()).set(new Uint8Array(t)),n.unmap(),n}function Vh(i){return typeof i<"u"&&i!==null&&Number.isFinite(Number(i))}function Kl(i,t){if(!Vh(i))return!1;const e=Number(i);if(e<=Tn/10)return!1;const n=t&&typeof t[0]<"u",r=t&&typeof t[1]<"u";return!(n&&e<Number(t[0])||r&&e>Number(t[1]))}function Np(i,t,e){const n=Math.max(0,Math.min(1,(e-i)/(t-i)));return n*n*(3-2*n)}function Bp(i,t,e,n){if(!t.length||!e.length)return[0,0,0,0];const r=Math.min(t.length,e.length)-1;if(r<0)return[0,0,0,0];if(n!=="gradient"||r===0){let a=0;for(let l=0;l<=r;l++){const h=t[l]??Number.NEGATIVE_INFINITY;if(i>=h)a=l;else break}return e[a]??[0,0,0,0]}const s=t[0]??0,o=t[r]??s;if(i<=s)return e[0]??[0,0,0,0];if(i>=o)return e[r]??[0,0,0,0];for(let a=0;a<r;a++){const l=t[a]??0,h=t[a+1]??l;if(i<l||i>h)continue;const c=e[a]??[0,0,0,0],u=e[a+1]??c,f=Math.max(h-l,1e-6),g=Math.max(0,Math.min(1,(i-l)/f));return[c[0]+(u[0]-c[0])*g,c[1]+(u[1]-c[1])*g,c[2]+(u[2]-c[2])*g,c[3]+(u[3]-c[3])*g]}return e[r]??[0,0,0,0]}function Xp(i){const{width:t,height:e,rawArr2D:n,smoothArr2D:r,thresholds:s,colorsRGBA:o,colorMode:a="discrete",scope:l,softenMaskEdge:h=!0}=i;if(!t||!e||!s.length||!o.length)return null;const c=document.createElement("canvas");c.width=t,c.height=e;const u=c.getContext("2d");if(!u)return null;const f=u.createImageData(t,e),g=f.data;for(let d=0;d<e;d++)for(let m=0;m<t;m++){const y=(d*t+m)*4,w=n?.[d]?.[m];if(!Kl(w,l)){g[y]=0,g[y+1]=0,g[y+2]=0,g[y+3]=0;continue}const A=r?.[d]?.[m];if(!Vh(A)){g[y]=0,g[y+1]=0,g[y+2]=0,g[y+3]=0;continue}const x=Bp(Number(A),s,o,a);let C=0,v=0;for(let _=d-1;_<=d+1;_++)for(let M=m-1;M<=m+1;M++)_<0||M<0||_>=e||M>=t||(v+=1,Kl(n?.[_]?.[M],l)&&(C+=1));const E=v?C/v:0,T=h?Np(.58,.9,E):1,b=x[3]??255,R=Math.max(0,Math.min(255,Math.round(b*T)));g[y]=Math.max(0,Math.min(255,Math.round(x[0]??0))),g[y+1]=Math.max(0,Math.min(255,Math.round(x[1]??0))),g[y+2]=Math.max(0,Math.min(255,Math.round(x[2]??0))),g[y+3]=R}return u.putImageData(f,0,0),c}function $l(i,t,e){const n=i.createShader(t);if(!n)return null;if(i.shaderSource(n,e),i.compileShader(n),!i.getShaderParameter(n,i.COMPILE_STATUS)){const r=i.getShaderInfoLog(n)??"";throw i.deleteShader(n),new Error(r||"WebGL shader compile failed")}return n}function Gp(i,t,e){const n=$l(i,i.VERTEX_SHADER,t),r=$l(i,i.FRAGMENT_SHADER,e);if(!n||!r)throw new Error("WebGL shader creation failed");const s=i.createProgram();if(!s)throw i.deleteShader(n),i.deleteShader(r),new Error("WebGL program creation failed");if(i.attachShader(s,n),i.attachShader(s,r),i.linkProgram(s),i.deleteShader(n),i.deleteShader(r),!i.getProgramParameter(s,i.LINK_STATUS)){const o=i.getProgramInfoLog(s)??"";throw i.deleteProgram(s),new Error(o||"WebGL program link failed")}return s}function kp(i){const{width:t,height:e,rawArr2D:n,smoothArr2D:r,thresholds:s,colorsRGBA:o,colorMode:a="discrete",scope:l,softenMaskEdge:h=!0}=i;if(!t||!e||!s.length||!o.length)return null;const c=document.createElement("canvas");c.width=t,c.height=e;const u=c.getContext("webgl2",{alpha:!0,premultipliedAlpha:!1,antialias:!1,depth:!1,stencil:!1,preserveDrawingBuffer:!0});if(!u)return null;const f=`#version 300 es
160
+ in vec2 a_position;
161
+ out vec2 v_uv;
162
+ void main() {
163
+ // WebGL texture origin differs from ImageData row order; flip Y to keep map orientation correct.
164
+ v_uv = vec2((a_position.x + 1.0) * 0.5, 1.0 - (a_position.y + 1.0) * 0.5);
165
+ gl_Position = vec4(a_position, 0.0, 1.0);
166
+ }`,g=`#version 300 es
167
+ precision highp float;
168
+ precision highp sampler2D;
169
+ in vec2 v_uv;
170
+ out vec4 outColor;
171
+
172
+ uniform sampler2D u_values;
173
+ uniform sampler2D u_maskValues;
174
+ uniform int u_thresholdCount;
175
+ uniform int u_colorMode;
176
+ uniform float u_thresholds[${an}];
177
+ uniform vec4 u_colors[${an}];
178
+ uniform float u_minScope;
179
+ uniform float u_maxScope;
180
+ uniform int u_hasMin;
181
+ uniform int u_hasMax;
182
+ uniform int u_softenMaskEdge;
183
+ uniform sampler2D u_validMask;
184
+
185
+ bool isMaskVisible(float maskV) {
186
+ if (maskV <= ${Tn/10}) return false;
187
+ if (u_hasMin == 1 && maskV < u_minScope) return false;
188
+ if (u_hasMax == 1 && maskV > u_maxScope) return false;
189
+ return true;
190
+ }
191
+
192
+ float edgeAAAlpha(vec2 uv) {
193
+ // Binary validity mask is sampled with LINEAR filter to do anti-aliasing instead of blur.
194
+ float m = texture(u_validMask, uv).r;
195
+ return smoothstep(0.5, 0.72, m);
196
+ }
197
+
198
+ float sampleValueAt(vec2 uv) {
199
+ return texture(u_values, uv).r;
200
+ }
201
+
202
+ float sampleValueGradient(vec2 uv) {
203
+ vec2 texSize = vec2(textureSize(u_values, 0));
204
+ vec2 p = uv * texSize - 0.5;
205
+ vec2 i0 = floor(p);
206
+ vec2 f = fract(p);
207
+ vec2 i1 = min(i0 + vec2(1.0), texSize - vec2(1.0));
208
+
209
+ vec2 uv00 = (i0 + vec2(0.5)) / texSize;
210
+ vec2 uv10 = (vec2(i1.x, i0.y) + vec2(0.5)) / texSize;
211
+ vec2 uv01 = (vec2(i0.x, i1.y) + vec2(0.5)) / texSize;
212
+ vec2 uv11 = (i1 + vec2(0.5)) / texSize;
213
+
214
+ float v00 = texture(u_values, uv00).r;
215
+ float v10 = texture(u_values, uv10).r;
216
+ float v01 = texture(u_values, uv01).r;
217
+ float v11 = texture(u_values, uv11).r;
218
+ float invalid = ${Tn/10};
219
+
220
+ if (v00 <= invalid || v10 <= invalid || v01 <= invalid || v11 <= invalid) {
221
+ return sampleValueAt(uv);
222
+ }
223
+
224
+ float vx0 = mix(v00, v10, f.x);
225
+ float vx1 = mix(v01, v11, f.x);
226
+ return mix(vx0, vx1, f.y);
227
+ }
228
+
229
+ vec4 colorDiscrete(float v) {
230
+ vec4 chosen = u_colors[0];
231
+ for (int i = 0; i < ${an}; i++) {
232
+ if (i >= u_thresholdCount) break;
233
+ if (v >= u_thresholds[i]) {
234
+ chosen = u_colors[i];
235
+ } else {
236
+ break;
237
+ }
238
+ }
239
+ return chosen;
240
+ }
241
+
242
+ vec4 colorGradient(float v) {
243
+ int last = u_thresholdCount - 1;
244
+ if (v <= u_thresholds[0]) {
245
+ return u_colors[0];
246
+ }
247
+ if (v >= u_thresholds[last]) {
248
+ return u_colors[last];
249
+ }
250
+
251
+ for (int i = 0; i < ${an-1}; i++) {
252
+ if (i >= last) break;
253
+ float t0 = u_thresholds[i];
254
+ float t1 = u_thresholds[i + 1];
255
+ if (v >= t0 && v <= t1) {
256
+ float denom = max(t1 - t0, 0.000001);
257
+ float f = clamp((v - t0) / denom, 0.0, 1.0);
258
+ return mix(u_colors[i], u_colors[i + 1], f);
259
+ }
260
+ }
261
+
262
+ return u_colors[last];
263
+ }
264
+
265
+ void main() {
266
+ float maskV = texture(u_maskValues, v_uv).r;
267
+ if (!isMaskVisible(maskV)) {
268
+ outColor = vec4(0.0);
269
+ return;
270
+ }
271
+
272
+ float v = (u_colorMode == 1) ? sampleValueGradient(v_uv) : sampleValueAt(v_uv);
273
+ if (v <= ${Tn/10}) {
274
+ outColor = vec4(0.0);
275
+ return;
276
+ }
277
+
278
+ vec4 c = (u_colorMode == 1) ? colorGradient(v) : colorDiscrete(v);
279
+ float edgeAlpha = (u_softenMaskEdge == 1) ? edgeAAAlpha(v_uv) : 1.0;
280
+ outColor = vec4(c.rgb / 255.0, (c.a / 255.0) * edgeAlpha);
281
+ }`;try{const d=Gp(u,f,g);u.useProgram(d);const m=new Float32Array([-1,-1,1,-1,-1,1,1,1]),p=u.createBuffer();if(!p)return u.deleteProgram(d),null;u.bindBuffer(u.ARRAY_BUFFER,p),u.bufferData(u.ARRAY_BUFFER,m,u.STATIC_DRAW);const y=u.getAttribLocation(d,"a_position");if(y<0)return u.deleteBuffer(p),u.deleteProgram(d),null;u.enableVertexAttribArray(y),u.vertexAttribPointer(y,2,u.FLOAT,!1,0,0);const w=u.createTexture();if(!w)return u.deleteBuffer(p),u.deleteProgram(d),null;const A=u.createTexture();if(!A)return u.deleteTexture(w),u.deleteBuffer(p),u.deleteProgram(d),null;const x=u.createTexture();if(!x)return u.deleteTexture(A),u.deleteTexture(w),u.deleteBuffer(p),u.deleteProgram(d),null;const C=as(t,e,r),v=as(t,e,n),E=Mp(t,e,n);u.activeTexture(u.TEXTURE0),u.bindTexture(u.TEXTURE_2D,w),u.pixelStorei(u.UNPACK_ALIGNMENT,1),u.texParameteri(u.TEXTURE_2D,u.TEXTURE_MIN_FILTER,u.NEAREST),u.texParameteri(u.TEXTURE_2D,u.TEXTURE_MAG_FILTER,u.NEAREST),u.texParameteri(u.TEXTURE_2D,u.TEXTURE_WRAP_S,u.CLAMP_TO_EDGE),u.texParameteri(u.TEXTURE_2D,u.TEXTURE_WRAP_T,u.CLAMP_TO_EDGE),u.texImage2D(u.TEXTURE_2D,0,u.R32F,t,e,0,u.RED,u.FLOAT,C),u.activeTexture(u.TEXTURE1),u.bindTexture(u.TEXTURE_2D,A),u.texParameteri(u.TEXTURE_2D,u.TEXTURE_MIN_FILTER,u.NEAREST),u.texParameteri(u.TEXTURE_2D,u.TEXTURE_MAG_FILTER,u.NEAREST),u.texParameteri(u.TEXTURE_2D,u.TEXTURE_WRAP_S,u.CLAMP_TO_EDGE),u.texParameteri(u.TEXTURE_2D,u.TEXTURE_WRAP_T,u.CLAMP_TO_EDGE),u.texImage2D(u.TEXTURE_2D,0,u.R32F,t,e,0,u.RED,u.FLOAT,v),u.activeTexture(u.TEXTURE2),u.bindTexture(u.TEXTURE_2D,x),u.texParameteri(u.TEXTURE_2D,u.TEXTURE_MIN_FILTER,u.LINEAR),u.texParameteri(u.TEXTURE_2D,u.TEXTURE_MAG_FILTER,u.LINEAR),u.texParameteri(u.TEXTURE_2D,u.TEXTURE_WRAP_S,u.CLAMP_TO_EDGE),u.texParameteri(u.TEXTURE_2D,u.TEXTURE_WRAP_T,u.CLAMP_TO_EDGE),u.texImage2D(u.TEXTURE_2D,0,u.R8,t,e,0,u.RED,u.UNSIGNED_BYTE,E);const T=new Float32Array(an),b=new Float32Array(an*4),R=Math.min(s.length,an);for(let N=0;N<R;N++){T[N]=s[N]??0;const O=o[N]??[0,0,0,0],B=N*4;b[B]=O[0],b[B+1]=O[1],b[B+2]=O[2],b[B+3]=O[3]??255}const _=l&&typeof l[0]<"u"?Number(l[0]):0,M=l&&typeof l[1]<"u"?Number(l[1]):0,D=l&&typeof l[0]<"u"?1:0,I=l&&typeof l[1]<"u"?1:0;return u.uniform1i(u.getUniformLocation(d,"u_values"),0),u.uniform1i(u.getUniformLocation(d,"u_maskValues"),1),u.uniform1i(u.getUniformLocation(d,"u_validMask"),2),u.uniform1i(u.getUniformLocation(d,"u_thresholdCount"),R),u.uniform1i(u.getUniformLocation(d,"u_colorMode"),a==="gradient"?1:0),u.uniform1fv(u.getUniformLocation(d,"u_thresholds"),T),u.uniform4fv(u.getUniformLocation(d,"u_colors"),b),u.uniform1f(u.getUniformLocation(d,"u_minScope"),_),u.uniform1f(u.getUniformLocation(d,"u_maxScope"),M),u.uniform1i(u.getUniformLocation(d,"u_hasMin"),D),u.uniform1i(u.getUniformLocation(d,"u_hasMax"),I),u.uniform1i(u.getUniformLocation(d,"u_softenMaskEdge"),h?1:0),u.viewport(0,0,t,e),u.clearColor(0,0,0,0),u.clear(u.COLOR_BUFFER_BIT),u.drawArrays(u.TRIANGLE_STRIP,0,4),u.activeTexture(u.TEXTURE2),u.bindTexture(u.TEXTURE_2D,null),u.activeTexture(u.TEXTURE1),u.bindTexture(u.TEXTURE_2D,null),u.activeTexture(u.TEXTURE0),u.bindTexture(u.TEXTURE_2D,null),u.bindBuffer(u.ARRAY_BUFFER,null),u.deleteTexture(x),u.deleteTexture(w),u.deleteTexture(A),u.deleteBuffer(p),u.deleteProgram(d),c}catch(d){return console.warn("[FcstLayer] WebGL2 渲染失败",d),null}}async function Hp(i){const{width:t,height:e,rawArr2D:n,smoothArr2D:r,thresholds:s,colorsRGBA:o,colorMode:a="discrete",scope:l,softenMaskEdge:h=!0}=i;if(!t||!e||!s.length||!o.length)return null;try{const c=await Op();if(!c)return null;c.pushErrorScope("validation");const u=t*e,f=as(t,e,r),g=as(t,e,n),d=new Float32Array(s),m=new Float32Array(d.length*4);for(let $=0;$<d.length;$++){const q=o[$]??[0,0,0,0],rt=$*4;m[rt]=q[0],m[rt+1]=q[1],m[rt+2]=q[2],m[rt+3]=q[3]??255}const p=l&&typeof l[0]<"u"?Number(l[0]):0,y=l&&typeof l[1]<"u"?Number(l[1]):0,w=l&&typeof l[0]<"u"?1:0,A=l&&typeof l[1]<"u"?1:0,x=new ArrayBuffer(48),C=new DataView(x);C.setUint32(0,t,!0),C.setUint32(4,e,!0),C.setUint32(8,d.length,!0),C.setUint32(12,a==="gradient"?1:0,!0),C.setFloat32(16,p,!0),C.setFloat32(20,y,!0),C.setUint32(24,w,!0),C.setUint32(28,A,!0),C.setUint32(32,h?1:0,!0);const v=globalThis.GPUBufferUsage,E=globalThis.GPUMapMode,T=Pi(c,f.buffer,v.STORAGE|v.COPY_DST),b=Pi(c,g.buffer,v.STORAGE|v.COPY_DST),R=Pi(c,d.buffer,v.STORAGE|v.COPY_DST),_=Pi(c,m.buffer,v.STORAGE|v.COPY_DST),M=Pi(c,x,v.UNIFORM|v.COPY_DST),D=u*4,I=c.createBuffer({size:D,usage:v.STORAGE|v.COPY_SRC}),N=c.createBuffer({size:D,usage:v.COPY_DST|v.MAP_READ}),O=c.createShaderModule({code:Fp()}),B=c.createComputePipeline({layout:"auto",compute:{module:O,entryPoint:"main"}}),F=c.createBindGroup({layout:B.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:T}},{binding:1,resource:{buffer:b}},{binding:2,resource:{buffer:R}},{binding:3,resource:{buffer:_}},{binding:4,resource:{buffer:M}},{binding:5,resource:{buffer:I}}]}),X=c.createCommandEncoder(),k=X.beginComputePass();k.setPipeline(B),k.setBindGroup(0,F),k.dispatchWorkgroups(Math.ceil(u/64)),k.end(),X.copyBufferToBuffer(I,0,N,0,D),c.queue.submit([X.finish()]);const z=await c.popErrorScope();if(z)return T.destroy(),b.destroy(),R.destroy(),_.destroy(),M.destroy(),I.destroy(),N.destroy(),console.warn("[FcstLayer] WebGPU validation error",z),null;await N.mapAsync(E.READ);const L=N.getMappedRange(),V=new Uint8ClampedArray(L.slice(0));N.unmap();const K=document.createElement("canvas");K.width=t,K.height=e;const Q=K.getContext("2d");return Q?(Q.putImageData(new ImageData(V,t,e),0,0),T.destroy(),b.destroy(),R.destroy(),_.destroy(),M.destroy(),I.destroy(),N.destroy(),K):null}catch(c){return console.warn("[FcstLayer] WebGPU 渲染失败",c),null}}async function Uh(i){const t=kp(i);if(t)return t;const e=await Hp(i);if(e)return console.warn("[FcstLayer] 当前环境不支持 WebGL2,已自动使用 WebGPU"),e;const n=Xp(i);return n?(console.warn("[FcstLayer] GPU 渲染不可用,已自动回退到 Canvas2D CPU 渲染"),n):(console.warn("[FcstLayer] 渲染不可用:WebGL2/WebGPU/Canvas2D 都不可用"),null)}const Pr=4,zp=12,Wp=8;class Ga{map;options;contourCache;contourLoadingTasks;rasterRenderCache;rasterRenderLoadingTasks;layerData;ready;sourceRequestVersion=0;abortController=new AbortController;constructor(t,e){this.map=t,this.options=e,this.contourCache=new Map,this.contourLoadingTasks=new globalThis.Map,this.rasterRenderCache=new globalThis.Map,this.rasterRenderLoadingTasks=new globalThis.Map,this.ready=this.add()}beginSourceRequest(){return this.abortController.abort(),this.abortController=new AbortController,++this.sourceRequestVersion}isCurrentRequest(t){return t===this.sourceRequestVersion&&!this.abortController.signal.aborted}getRequestOptions(){return{...this.options,config:{...this.options?.config??{}},signal:this.abortController.signal}}getContourCacheKey(t=this.options){const e=t?.config??{};return JSON.stringify({url:t?.url??"",authorization:t?.authorization??"",compareUrl:t?.compareUrl??"",zeroCompare:t?.zeroCompare===!0,extent:e.extent??[],scope:e.scope??[]})}setCachedContourData(t,e){for(this.contourCache.delete(t),this.contourCache.set(t,e);this.contourCache.size>zp;){const n=this.contourCache.keys().next().value;if(n===void 0)break;this.contourCache.delete(n)}}getRasterRenderCacheKey(t,e){const n=t?.config??{},r=Object.keys(e).map(Number).filter(Number.isFinite).sort((s,o)=>s-o).map(s=>[s,e[s]]);return JSON.stringify({data:this.getContourCacheKey(t),mode:n.mode??"discrete",colors:r,valueTransform:typeof n.valueTransform=="function"?String(n.valueTransform):n.valueTransform??"",alignWithIsoline:n.alignWithIsoline===!0,isolineSmooth:n.isolineSmooth!==!1,isolineSmoothness:pn(n.isolineSmoothness)})}setCachedRasterRender(t,e){for(this.rasterRenderCache.delete(t),this.rasterRenderCache.set(t,e);this.rasterRenderCache.size>Wp;){const n=this.rasterRenderCache.keys().next().value;if(n===void 0)break;this.rasterRenderCache.delete(n)}}async add(){const{id:t,config:e}=this.options,{zIndex:n=10,opacity:r=1}=e,s=Ht(this.map,t),o=s?.getZIndex()??n,a=this.beginSourceRequest(),l=this.getRequestOptions(),h=await this.getSourceFromCache(l);if(!this.isCurrentRequest(a))return;const c=h??await this.getSourceFromParams(l);if(!this.isCurrentRequest(a)||!c)return;const u=new Qi({className:t,source:c,zIndex:o,opacity:r,visible:s?.getVisible()??!0});return De(this.map,t),this.map.addLayer(u),u}async getSourceFromParams(t=this.options){const{config:e}=t,{mode:n,legend:r,legendScope:s}=e,o=await this.getOrLoadContourData(t);if(!o||t?.signal?.aborted)return;const{rawArr2D:a,smoothArr2D:l,extent:h,width:c,height:u}=o,f=this.getValueTransformFn(t),g=this.applyValueTransform2D(a,"raw",f),d=this.applyValueTransform2D(l,"smooth",f),{colorMap:m}=re(r),{colorMap:p}=re(r,s),y=di(r,s)??e.scope;return await this.getFcstRasterSource({smoothArr2D:d,rawArr2D:g,extent:h,width:c,height:u,colorMap:m,selectedColorMap:p,colorMode:n,scope:y,rasterCacheKey:this.getRasterRenderCacheKey(t,m)},t)}async getOrLoadContourData(t=this.options){const e=this.getContourCacheKey(t),n=this.contourCache.get(e);if(n&&n.schemaVersion===Pr)return this.contourCache.delete(e),this.contourCache.set(e,n),n;const r=this.contourLoadingTasks.get(e);if(r)return r;const s=(async()=>{const o=await Zi(t);if(!o)return null;const{uniqueThresholds:a,rawArr2D:l,smoothArr2D:h,extent:c,width:u,height:f}=o,g={schemaVersion:Pr,uniqueThresholds:a,rawArr2D:l,smoothArr2D:h,extent:c,width:u,height:f};return this.setCachedContourData(e,g),g})();this.contourLoadingTasks.set(e,s);try{return await s}finally{this.contourLoadingTasks.get(e)===s&&this.contourLoadingTasks.delete(e)}}async getValueByLonLat(t,e,n=!1){if(!Number.isFinite(t)||!Number.isFinite(e))return null;const r={...this.options,config:{...this.options?.config??{}}},s=await this.getOrLoadContourData(r);if(!s)return null;const{rawArr2D:o,smoothArr2D:a,extent:l,width:h,height:c}=s,u=n?a:o;if(!u||h<=0||c<=0)return null;const f=ii([t,e]);if(f.length<2)return null;const g=f[0],d=f[1],[m,p,y,w]=l,A=y-m,x=w-p;if(A<=0||x<=0||g<m||g>y||d<p||d>w)return null;const C=(g-m)/A*(h-1),v=(w-d)/x*(c-1),E=Math.max(0,Math.min(h-1,Math.round(C))),T=Math.max(0,Math.min(c-1,Math.round(v))),b=u?.[T]?.[E];if(b==null||isNaN(Number(b)))return null;const R=this.applyValueTransformValue(Number(b),{x:E,y:T,width:h,height:c,source:n?"smooth":"raw"},this.getValueTransformFn(r));return R==null||isNaN(Number(R))?null:Number(R)}async getValueByLngLat(t,e,n=!1){return this.getValueByLonLat(t,e,n)}async getSourceFromCache(t=this.options){const{config:e}=t,{mode:n,legend:r,legendScope:s}=e,o=this.getContourCacheKey(t);if(this.contourCache.has(o)){const a=this.contourCache.get(o);if(!a||a.schemaVersion!==Pr)return this.contourCache.delete(o),null;this.contourCache.delete(o),this.contourCache.set(o,a);const{colorMap:l}=re(r),{colorMap:h}=re(r,s),c=this.getValueTransformFn(t),u=this.applyValueTransform2D(a.rawArr2D,"raw",c),f=this.applyValueTransform2D(a.smoothArr2D,"smooth",c);return await this.getFcstRasterSource({...a,rawArr2D:u,smoothArr2D:f,colorMap:l,selectedColorMap:h,colorMode:n,scope:di(r,s)??e.scope,rasterCacheKey:this.getRasterRenderCacheKey(t,l)},t)}return null}async getFcstRasterSource(t,e=this.options){const{rawArr2D:n,smoothArr2D:r,extent:s,width:o,height:a,colorMap:l,selectedColorMap:h=l,colorMode:c="discrete",scope:u,rasterCacheKey:f=this.getRasterRenderCacheKey(e,l)}=t,g=Object.keys(l).map(E=>Number(E)).filter(E=>!isNaN(E)).sort((E,T)=>E-T),d=g.map(E=>zi(l[E]));let m=this.rasterRenderCache.get(f);if(m)this.rasterRenderCache.delete(f),this.rasterRenderCache.set(f,m);else{let E=this.rasterRenderLoadingTasks.get(f);E||(E=(async()=>{const T=e?.config?.alignWithIsoline===!0,b=e?.config?.isolineSmooth===!1?0:pn(e?.config?.isolineSmoothness),R=T?Ba(n,o,a,b):r,_=n,M=T&&c!=="gradient"?this.createIsolineContourFills(R,o,a,g,d,void 0,e):void 0;let D;if(T&&c!=="gradient"?(D=document.createElement("canvas"),D.width=Math.max(1,Math.floor(o)),D.height=Math.max(1,Math.floor(a))):D=await Uh({width:Math.max(1,Math.floor(o)),height:Math.max(1,Math.floor(a)),rawArr2D:_,smoothArr2D:R,thresholds:g,colorsRGBA:d,colorMode:c,scope:[],softenMaskEdge:!T}),!D)return null;const I={canvas:D,renderMask:_,renderValues:R,contourFills:M};return this.setCachedRasterRender(f,I),I})(),this.rasterRenderLoadingTasks.set(f,E));try{m=await E??void 0}finally{this.rasterRenderLoadingTasks.get(f)===E&&this.rasterRenderLoadingTasks.delete(f)}}if(!m)return null;const p=u&&typeof u[0]<"u"?Number(u[0]):-1/0,y=u&&typeof u[1]<"u"?Number(u[1]):1/0,w=m.contourFills?.filter(E=>E.threshold>=p&&E.threshold<=y),A=Object.keys(h).map(Number).filter(Number.isFinite).sort((E,T)=>E-T),x=A[0],C=A[A.length-1],v=typeof x=="number"&&Number.isFinite(x)&&typeof C=="number"&&Number.isFinite(C)?this.createLegendEdgeColorCanvas(m.renderValues,o,a,x,C,zi(h[x]),zi(h[C])):void 0;return this.createFcstCanvasSource(m.canvas,s,c,m.renderMask,u,e,w,e?.config?.alignWithIsoline===!0?m.renderValues:void 0,v)}getValueTransformFn(t=this.options){return Na(t?.config?.valueTransform)}applyValueTransformValue(t,e,n=this.getValueTransformFn()){if(!n)return t;try{const r=n(t,e);return r==null||isNaN(Number(r))?NaN:Number(r)}catch(r){return console.warn("[FcstLayer] valueTransform 执行失败,已回退原始值",r),t}}applyValueTransform2D(t,e,n=this.getValueTransformFn()){if(!n)return t;const r=t.length,s=t[0]?.length??0,o=Array.from({length:r},()=>Array(s).fill(void 0));let a=!1;for(let l=0;l<r;l++)for(let h=0;h<s;h++){const c=t[l]?.[h];if(c==null||isNaN(Number(c))){o[l][h]=NaN;continue}try{const u=n(Number(c),{x:h,y:l,width:s,height:r,source:e});o[l][h]=u==null||!Number.isFinite(Number(u))?NaN:Number(u)}catch(u){a||(console.warn("[FcstLayer] valueTransform 执行失败,已回退原始值",u),a=!0),o[l][h]=Number(c)}}return o}isMaskSmoothEnabled(t=this.options){return t?.config?.smooth===!0}getMaskSmoothIterations(t=this.options){const e=t?.config?.smoothIterations,n=Math.floor(Number(e??2));return Number.isFinite(n)?Math.max(1,Math.min(5,n)):2}chaikinSmoothRing(t,e=2){if(!t.length)return t;let n=t.slice();const r=n[0],s=n[n.length-1];if(r&&s&&r[0]===s[0]&&r[1]===s[1]&&n.length>2&&(n=n.slice(0,-1)),n.length<3)return t;for(let l=0;l<e;l++){const h=[],c=n.length;for(let u=0;u<c;u++){const f=n[u],g=n[(u+1)%c];if(!f||!g)continue;const d=f[0],m=f[1],p=g[0],y=g[1];if(typeof d!="number"||typeof m!="number"||typeof p!="number"||typeof y!="number")continue;const w=.75*d+.25*p,A=.75*m+.25*y,x=.25*d+.75*p,C=.25*m+.75*y;h.push([w,A],[x,C])}if(n=h,n.length<3)break}const a=n[0];return n.length&&a?[...n,a]:t}smoothMaskContourPolygons(t,e){if(!t.length)return t;const n=[];for(const r of t){const s=[];for(let o=0;o<r.length;o++){const a=r[o];if(!a||a.length<4){a&&s.push(a);continue}s.push(this.chaikinSmoothRing(a,e))}n.push(s)}return n.length?n:t}createVisibleMaskContourPath(t,e,n,r,s=!1,o=this.options){if(!s)return null;const a=this.getMaskSmoothIterations(o),l=e*n;if(!l)return null;const h=r&&typeof r[0]<"u",c=r&&typeof r[1]<"u",u=h?Number(r[0]):0,f=c?Number(r[1]):0,g=new Float32Array(l);let d=0;for(let A=0;A<n;A++)for(let x=0;x<e;x++){const C=A*e+x,v=t?.[A]?.[x],E=v==null||isNaN(Number(v))?void 0:Number(v);E!==void 0&&(!h||E>=u)&&(!c||E<=f)&&(g[C]=1,d+=1)}if(!d)return null;const m=Gr.contours().size([e,n]).thresholds([.5])(g);if(!m.length)return null;const p=[];for(const A of m){const x=A.coordinates??[];for(const C of x)p.push(C)}const y=s?this.smoothMaskContourPolygons(p,a):p,w=new Path2D;for(const A of y)for(const x of A){if(!x.length)continue;const C=x[0];if(!(!C||typeof C[0]!="number"||typeof C[1]!="number")){w.moveTo(C[0],C[1]);for(let v=1;v<x.length;v++){const E=x[v];!E||typeof E[0]!="number"||typeof E[1]!="number"||w.lineTo(E[0],E[1])}w.closePath()}}return w}createIsolineContourPath(t,e,n,r,s=this.options){const o=r&&typeof r[0]<"u"?Number(r[0]):NaN,a=r&&typeof r[1]<"u"?Number(r[1]):1/0;if(!Number.isFinite(o))return null;const l=new Float64Array(e*n);let h=0;for(let g=0;g<n;g++){const d=t[g];for(let m=0;m<e;m++){const p=d?.[m],y=p!==void 0&&Number.isFinite(p)&&p<=a;l[g*e+m]=y?p:NaN,y&&p>=o&&(h+=1)}}if(!h)return null;const c=s?.config?.isolineSmooth===!1?0:pn(s?.config?.isolineSmoothness),u=Gr.contours().size([e,n]).thresholds([o]).smooth(c>0)(l);if(!u.length)return null;const f=new Path2D;for(const g of u)for(const d of g.coordinates??[])for(const m of d){const p=m[0];if(p){f.moveTo(p[0],p[1]);for(let y=1;y<m.length;y++){const w=m[y];w&&f.lineTo(w[0],w[1])}f.closePath()}}return f}createIsolineContourFills(t,e,n,r,s,o,a=this.options){const l=o&&typeof o[0]<"u"?Number(o[0]):-1/0,h=o&&typeof o[1]<"u"?Number(o[1]):1/0,c=r.filter(p=>p>=l&&p<=h);if(!c.length||e<2||n<2)return[];const u=new Float64Array(e*n);for(let p=0;p<n;p++){const y=t[p];for(let w=0;w<e;w++){const A=y?.[w];u[p*e+w]=A!==void 0&&Number.isFinite(A)?A:NaN}}const f=a?.config?.isolineSmooth===!1?0:pn(a?.config?.isolineSmoothness),g=Gr.contours().size([e,n]).thresholds(c).smooth(f>0)(u),d=new globalThis.Map;r.forEach((p,y)=>{const w=s[y];w&&d.set(p,w)});const m=[];for(const p of g){const y=Number(p.value),w=d.get(y);if(!w)continue;const A=new Path2D;for(const C of p.coordinates??[])for(const v of C){const E=v[0];if(E){A.moveTo(E[0],E[1]);for(let T=1;T<v.length;T++){const b=v[T];b&&A.lineTo(b[0],b[1])}A.closePath()}}const x=Math.max(0,Math.min(1,(w[3]??255)/255));m.push({threshold:y,path:A,color:`rgba(${w[0]}, ${w[1]}, ${w[2]}, ${x})`})}return m}createScopeMaskCanvas(t,e,n,r){const s=r&&typeof r[0]<"u",o=r&&typeof r[1]<"u";if(!s&&!o)return null;const a=s?Number(r[0]):-1/0,l=o?Number(r[1]):1/0,h=document.createElement("canvas");h.width=Math.max(1,Math.floor(e)),h.height=Math.max(1,Math.floor(n));const c=h.getContext("2d");if(!c)return null;const u=c.createImageData(h.width,h.height),f=u.data;for(let g=0;g<h.height;g++){const d=t[g];for(let m=0;m<h.width;m++){const p=d?.[m];p===void 0||!Number.isFinite(p)||p<a||p>l||(f[(g*h.width+m)*4+3]=255)}}return c.putImageData(u,0,0),h}createLegendEdgeColorCanvas(t,e,n,r,s,o,a){const l=document.createElement("canvas");l.width=Math.max(1,Math.floor(e)),l.height=Math.max(1,Math.floor(n));const h=l.getContext("2d");if(!h)return null;const c=h.createImageData(l.width,l.height),u=c.data;for(let f=0;f<l.height;f++){const g=t[f];for(let d=0;d<l.width;d++){const m=g?.[d];if(m===void 0||!Number.isFinite(m))continue;const p=m<=r?o:m>=s?a:void 0;if(!p)continue;const y=(f*l.width+d)*4;u[y]=p[0],u[y+1]=p[1],u[y+2]=p[2],u[y+3]=p[3]}}return h.putImageData(c,0,0),l}createFcstCanvasSource(t,e,n="discrete",r,s,o=this.options,a,l,h){const c=document.createElement("canvas"),u=n==="gradient",f=o?.config?.pixelSnap===!0,g=o?.config?.useDevicePixelRatio===!0,d=o?.config?.alignWithIsoline===!0,m=r?this.createScopeMaskCanvas(d?l??r:r,t.width,t.height,s):null;return new Ps({projection:"EPSG:3857",ratio:1,interpolate:u&&!d,canvasFunction:(y,w,A,x)=>{const C=g?Math.max(1,A||1):1,v=x??[1,1],E=Math.max(1,Math.floor((v[0]??1)*C)),T=Math.max(1,Math.floor((v[1]??1)*C));c.width!==E&&(c.width=E),c.height!==T&&(c.height=T);const b=c.getContext("2d",{alpha:!0});if(!b)return c;b.clearRect(0,0,E,T);const[R,_,M,D]=y,[I,N,O,B]=e,F=M-R,X=D-_;if(F<=0||X<=0)return c;const k=E/F,z=T/X,L=(I-R)*k,V=(D-B)*z,K=(O-I)*k,Q=(B-N)*z;if(K<=0||Q<=0)return c;const $=f?Math.floor(L):L,q=f?Math.floor(V):V,rt=f?Math.ceil(L+K):L+K,at=f?Math.ceil(V+Q):V+Q,it=Math.max(1,rt-$),mt=Math.max(1,at-q);if(a?.length){b.save(),b.translate($,q),b.scale(it/t.width,mt/t.height);for(const Et of a)b.fillStyle=Et.color,b.fill(Et.path,"evenodd");return b.restore(),c}return b.imageSmoothingEnabled=u&&!d,u&&!d&&(b.imageSmoothingQuality="high"),b.drawImage(t,$,q,it,mt),h&&(b.save(),b.globalCompositeOperation="source-atop",b.imageSmoothingEnabled=u&&!d,u&&!d&&(b.imageSmoothingQuality="high"),b.drawImage(h,$,q,it,mt),b.restore()),m&&(b.save(),b.globalCompositeOperation="destination-in",b.imageSmoothingEnabled=u&&!d,u&&!d&&(b.imageSmoothingQuality="high"),b.drawImage(m,$,q,it,mt),b.restore()),c}})}async preload(t){const e={...this.options,config:{...this.options?.config??{}},url:t},n=await Zi(e);if(!n)return;const{uniqueThresholds:r,rawArr2D:s,smoothArr2D:o,extent:a,width:l,height:h}=n,c=this.getContourCacheKey(e);this.setCachedContourData(c,{schemaVersion:Pr,uniqueThresholds:r,rawArr2D:s,smoothArr2D:o,extent:a,width:l,height:h})}delete(){this.abortController.abort(),this.sourceRequestVersion++,De(this.map,this.options.id),this.contourCache.clear(),this.contourLoadingTasks.clear(),this.rasterRenderCache.clear(),this.rasterRenderLoadingTasks.clear()}toggleVisible(t){se(this.map,this.options.id,t)}async updateParams(t){this.options={...this.options,...t,config:{...this.options?.config??{},...t?.config??{}}};const e=this.beginSourceRequest(),n=this.getRequestOptions(),{id:r}=this.options,s=Ht(this.map,r);if(!s){this.ready=this.add(),await this.ready;return}const o=await this.getSourceFromCache(n);if(!this.isCurrentRequest(e))return;const a=o??await this.getSourceFromParams(n);if(!this.isCurrentRequest(e)||!a)return;s.setSource(a);const l=Number(n.config?.opacity);Number.isFinite(l)&&s.setOpacity(Math.max(0,Math.min(1,l)));const h=Number(n.config?.zIndex);Number.isFinite(h)&&s.setZIndex(h)}}const _r=1,dr=new globalThis.Map;function Go(i,t){dr.set(i,t)}function Fs(i){return dr.get(i)}function qh(i){dr.delete(i)}function Qh(i){dr.forEach(t=>i(t))}function Zh(){dr.clear()}class Yr{map;options;contourCache;externalGridDataProvider;constructor(t,e,n){this.map=t,this.options=e,this.contourCache=new Map,this.externalGridDataProvider=n,this.add()}getClassName(){return`${this.options.id}-gridValue`}getRuntimeConfig(){const t=this.options?.config??{},e=t.gridConfig??{};return{...t,...e}}async add(){const t=this.getRuntimeConfig(),e=Number.isFinite(Number(t.zIndex))?Number(t.zIndex):10,n=Number.isFinite(Number(t.opacity))?Number(t.opacity):1,r=this.getClassName(),s=Ht(this.map,r);s&&this.delete();const o=s?s.getZIndex():e+1,a=await this.getSourceFromCache()??await this.getSourceFromParams();if(!a)return;const l=new Qi({className:r,source:a,zIndex:o,opacity:n});return this.map.addLayer(l),l}getCacheKey(){const{id:t,url:e}=this.options;return`${t}${e}`}async getOrLoadGridData(){const t=this.getCacheKey(),e=this.contourCache.get(t);if(e&&e.schemaVersion===_r)return e;if(this.externalGridDataProvider){const s=await this.externalGridDataProvider();if(!s)return null;const o={schemaVersion:_r,rawArr2D:s.rawArr2D,extent:s.extent,width:s.width,height:s.height};return this.contourCache.set(t,o),o}const n=await Zi(this.options);if(!n)return null;const r={schemaVersion:_r,rawArr2D:n.rawArr2D,extent:n.extent,width:n.width,height:n.height};return this.contourCache.set(t,r),r}async getSourceFromCache(){const t=this.getCacheKey(),e=this.contourCache.get(t);return!e||e.schemaVersion!==_r?(e&&this.contourCache.delete(t),null):this.createGridCanvasSource(e)}async getSourceFromParams(){const t=await this.getOrLoadGridData();return t?this.createGridCanvasSource(t):null}getTextDrawOptions(){const t=this.getRuntimeConfig(),e=Math.max(8,Math.floor(Number(t.pixelStep??40))),n=Math.max(10,Math.floor(Number(t.fontSize??14))),r=Math.max(0,Math.floor(Number(t.decimals??1))),s=String(t.fontColor??"#000"),o=String(t.strokeColor??"#fff"),a=Math.max(0,Number(t.strokeWidth??2)),l=String(t.fontFamily??"Arial, sans-serif"),h=t.useDevicePixelRatio===!0;return{pixelStep:e,fontSize:n,decimals:r,fontColor:s,strokeColor:o,strokeWidth:a,fontFamily:l,useDevicePixelRatio:h}}isValueInScope(t,e){if(!Number.isFinite(t))return!1;if(!e||e.length!==2)return!0;const n=Number(e[0]),r=Number(e[1]);if(!Number.isFinite(n)||!Number.isFinite(r))return!0;const s=Math.min(n,r),o=Math.max(n,r);return t>=s&&t<=o}interpolateValue(t,e,n,r,s){const o=Math.floor(r),a=Math.ceil(r),l=Math.floor(s),h=Math.ceil(s);if(o<0||a>=e||l<0||h>=n)return null;const c=Number(t[l]?.[o]),u=Number(t[l]?.[a]),f=Number(t[h]?.[o]),g=Number(t[h]?.[a]);if(![c,u,f,g].every(p=>Number.isFinite(p)))return null;const d=r-o,m=s-l;return c*(1-d)*(1-m)+u*d*(1-m)+f*(1-d)*m+g*d*m}getValueTransformFn(){const t=this.getRuntimeConfig();return Na(t?.valueTransform)}applyValueTransformValue(t,e){const n=this.getValueTransformFn();if(!n)return t;try{const r=n(t,e);return r==null||isNaN(Number(r))?NaN:Number(r)}catch(r){return console.warn("[GridLayer] valueTransform 执行失败,已回退原始值",r),t}}createGridCanvasSource(t){const e=document.createElement("canvas"),{rawArr2D:n,extent:r,width:s,height:o}=t,a=this.getTextDrawOptions(),l=this.getRuntimeConfig(),h=typeof l?.valueTransform=="function"||typeof l?.valueTransform=="string"&&l.valueTransform.trim().length>0,c=l?.valueTransformAffectsScope!==!1,u=di(this.options.config.legend,this.options.config.legendScope)??this.options.config.scope;return new Ps({projection:"EPSG:3857",ratio:1,interpolate:!1,canvasFunction:(f,g,d,m)=>{const p=m??[1,1],y=Math.max(1,Math.floor(p[0]??1)),w=Math.max(1,Math.floor(p[1]??1)),A=this.map.getSize(),x=Math.max(1,Math.floor(A?.[0]??y)),C=Math.max(1,Math.floor(A?.[1]??w)),v=y/x,E=w/C,T=a.useDevicePixelRatio?Math.max(1,Number(d||1)):1,b=Math.max(.01,(v+E)*.5/T),R=y,_=w,M=x,D=C;e.width!==R&&(e.width=R),e.height!==_&&(e.height=_);const I=e.getContext("2d",{alpha:!0});if(!I)return e;I.setTransform(1,0,0,1,0,0),I.clearRect(0,0,R,_),I.font=`${Math.max(10,Math.round(a.fontSize*b))}px ${a.fontFamily}`,I.fillStyle=a.fontColor,I.strokeStyle=a.strokeColor,I.lineWidth=Math.max(0,a.strokeWidth*b),I.lineJoin="round",I.miterLimit=2,I.textAlign="center",I.textBaseline="middle";const[N,O,B,F]=f,[X,k,z,L]=r,V=B-N,K=F-O,Q=z-X,$=L-k;if(V<=0||K<=0||Q<=0||$<=0)return e;const q=Math.max(8,Math.round(a.pixelStep));for(let rt=q/2;rt<D;rt+=q)for(let at=q/2;at<M;at+=q){const it=N+at/M*V,mt=F-rt/D*K;if(it<X||it>z||mt<k||mt>L)continue;const Et=(it-X)/Q*(s-1),zt=(L-mt)/$*(o-1),Mt=this.interpolateValue(n,s,o,Et,zt);if(Mt===null)continue;const wt=this.applyValueTransformValue(Mt,{x:Et,y:zt,width:s,height:o,source:"raw"});if(!Number.isFinite(wt))continue;const _t=h&&!c?Mt:wt;if(!this.isValueInScope(_t,u))continue;const Wt=wt.toFixed(a.decimals),jt=at*v,ee=rt*E;I.lineWidth>0&&I.strokeText(Wt,jt,ee),I.fillText(Wt,jt,ee)}return e}})}delete(){De(this.map,this.getClassName()),this.contourCache.clear()}toggleVisible(t){se(this.map,this.getClassName(),t)}async updateParams(t){this.options={...this.options,...t,config:{...this.options.config,...t?.config??{}}};const e=Ht(this.map,this.getClassName());if(!e){await this.add();return}const n=await this.getSourceFromCache()??await this.getSourceFromParams();n&&e.setSource(n)}}class Jh{map;options;contourCache;constructor(t,e){this.map=t,this.options=e,this.contourCache=new Map,this.add()}async add(){console.time();const{id:t,config:e}=this.options,{zIndex:n=10}=e,r=Ht(this.map,t);r&&this.delete();const s=r?r.getZIndex():n??1200,o=this.getSourceFromCache();if(o){const l=new Qi({source:o,className:t+"-arrow",zIndex:s});return this.map.addLayer(l),l}const a=await this.getArrowParams();if(a){const l=this.getArrowSource({...a,extent:this.options.config.extent,config:this.options.config}),h=new Qi({source:l,className:t+"-arrow",zIndex:s});this.map.addLayer(h)}console.timeEnd()}async getArrowParams(){const{id:t,url:e,config:n}=this.options,{cache:r,scope:s}=n,o=t+e,a=[-99999,99999];An.isNumber(s?.[0])&&(a[0]=s[0]),An.isNumber(s?.[1])&&(a[1]=s[1]);const{grayArr:l,width:h,height:c}=await Mn(e,a);if(!(!l||!h||!c))return r&&this.contourCache.set(o,{grayArr:l,width:h,height:c}),{grayArr:l,width:h,height:c}}getArrowSource(t){const{grayArr:e,width:n,height:r,extent:s,config:o}=t,{pixelStep:a=20,fontSize:l=12,color:h="rgb(255,255,255)"}=o,c={angle:e,width:n,height:r},u=xi(s);return this.createArrowCanvasSource(c,u,{pixelStep:a,fontSize:l,color:h})}createArrowCanvasSource(t,e,n){const{pixelStep:r=20,fontSize:s=12,color:o="rgb(255,255,255)"}=n,a=document.createElement("canvas");return new Ps({projection:"EPSG:3857",ratio:1,canvasFunction:(l,h,c,u)=>{const f=u??[1,1],g=Math.max(1,Math.floor((f[0]??1)*c)),d=Math.max(1,Math.floor((f[1]??1)*c));a.width!==g&&(a.width=g),a.height!==d&&(a.height=d);const m=a.getContext("2d",{alpha:!0});if(!m)return a;m.clearRect(0,0,g,d),m.fillStyle=o,m.font=`${Math.max(1,Math.floor(s*c))}px Arial`,m.textAlign="center",m.textBaseline="middle";const[p,y,w,A]=l,[x,C,v,E]=e,T=w-p,b=A-y;if(T<=0||b<=0)return a;const R=Math.max(p,x),_=Math.max(y,C),M=Math.min(w,v),D=Math.min(A,E);if(R>=M||_>=D)return a;const I=v-x,N=E-C;if(I<=0||N<=0)return a;const O=Math.max(1,g-1),B=Math.max(1,d-1),F=Math.max(1,Math.floor(r*c)),X=Math.max(I/Math.max(1,t.width-1),N/Math.max(1,t.height-1)),k=X>0&&isFinite(h)?Math.max(1,Math.floor(h/X)):1,z=Math.max(F,Math.min(F*6,F*k)),L=Math.max(0,Math.floor((R-p)/T*O)),V=Math.min(g-1,Math.ceil((M-p)/T*O)),K=Math.max(0,Math.floor((A-D)/b*B)),Q=Math.min(d-1,Math.ceil((A-_)/b*B));if(L>V||K>Q)return a;for(let $=K;$<=Q;$+=z)for(let q=L;q<=V;q+=z){const rt=p+T*q/O,at=A-b*$/B;if(rt<x||rt>v||at<C||at>E)continue;const it=(rt-x)/I*(t.width-1),mt=(E-at)/N*(t.height-1),Et=os(t.angle,it,mt,t.width,t.height);if(!isFinite(Et))continue;const zt=(Et-90)*Math.PI/180;m.save(),m.translate(q,$),m.rotate(zt),m.fillText("→",0,0),m.restore()}return a}})}getSourceFromCache(){const{id:t,url:e,config:n}=this.options,{scope:r,cache:s,extent:o,pixelStep:a=20,fontSize:l=12,color:h="rgb(255,255,255)"}=n,c=t+e;if(s&&this.contourCache.has(c)){const u=this.contourCache.get(c);return this.getArrowSource({...u,extent:o,scope:r,pixelStep:a,fontSize:l,color:h})}return null}delete(){De(this.map,this.options.id+"-arrow"),this.contourCache.clear()}toggleVisible(t){se(this.map,this.options.id+"-arrow",t)}}class jp{constructor(){this.dataProjection=void 0,this.defaultFeatureProjection=void 0,this.featureClass=vn,this.supportedMediaTypes=null}getReadOptions(t,e){if(e){let n=e.dataProjection?ht(e.dataProjection):this.readProjection(t);e.extent&&n&&n.getUnits()==="tile-pixels"&&(n=ht(n),n.setWorldExtent(e.extent)),e={dataProjection:n,featureProjection:e.featureProjection}}return this.adaptOptions(e)}adaptOptions(t){return Object.assign({dataProjection:this.dataProjection,featureProjection:this.defaultFeatureProjection,featureClass:this.featureClass},t)}getType(){return U()}readFeature(t,e){return U()}readFeatures(t,e){return U()}readGeometry(t,e){return U()}readProjection(t){return U()}writeFeature(t,e){return U()}writeFeatures(t,e){return U()}writeGeometry(t,e){return U()}}function ka(i,t,e){const n=e?ht(e.featureProjection):null,r=e?ht(e.dataProjection):null;let s=i;if(n&&r&&!En(n,r)){t&&(s=i.clone());const o=t?n:r,a=t?r:n;o.getUnits()==="tile-pixels"?s.transform(o,a):s.applyTransform(Vi(o,a))}if(t&&e&&e.decimals!==void 0){const o=Math.pow(10,e.decimals),a=function(l){for(let h=0,c=l.length;h<c;++h)l[h]=Math.round(l[h]*o)/o;return l};s===i&&(s=i.clone()),s.applyTransform(a)}return s}const Yp={Point:tn,LineString:In,Polygon:Pn,MultiPoint:Rs,MultiLineString:is,MultiPolygon:rs};function Vp(i,t,e){return Array.isArray(t[0])?(th(i,0,t,e)||(i=i.slice(),Po(i,0,t,e)),i):(ma(i,0,t,e)||(i=i.slice(),Jr(i,0,t,e)),i)}function Kh(i,t){const e=i.geometry;if(!e)return[];if(Array.isArray(e))return e.map(s=>Kh({...i,geometry:s})).flat();const n=e.type==="MultiPolygon"?"Polygon":e.type;if(n==="GeometryCollection"||n==="Circle")throw new Error("Unsupported geometry type: "+n);const r=e.layout.length;return ka(new Vt(n,n==="Polygon"?Vp(e.flatCoordinates,e.ends,r):e.flatCoordinates,e.ends?.flat(),r,i.properties||{},i.id).enableSimplifyTransformed(),!1,t)}function Ha(i,t){if(!i)return null;if(Array.isArray(i)){const n=i.map(r=>Ha(r,t));return new ns(n)}const e=Yp[i.type];return ka(new e(i.flatCoordinates,i.layout||"XY",i.ends),!1,t)}class Up extends jp{constructor(){super()}getType(){return"json"}readFeature(t,e){return this.readFeatureFromObject(Lr(t),this.getReadOptions(t,e))}readFeatures(t,e){return this.readFeaturesFromObject(Lr(t),this.getReadOptions(t,e))}readFeatureFromObject(t,e){return U()}readFeaturesFromObject(t,e){return U()}readGeometry(t,e){return this.readGeometryFromObject(Lr(t),this.getReadOptions(t,e))}readGeometryFromObject(t,e){return U()}readProjection(t){return this.readProjectionFromObject(Lr(t))}readProjectionFromObject(t){return U()}writeFeature(t,e){return JSON.stringify(this.writeFeatureObject(t,e))}writeFeatureObject(t,e){return U()}writeFeatures(t,e){return JSON.stringify(this.writeFeaturesObject(t,e))}writeFeaturesObject(t,e){return U()}writeGeometry(t,e){return JSON.stringify(this.writeGeometryObject(t,e))}writeGeometryObject(t,e){return U()}}function Lr(i){if(typeof i=="string"){const t=JSON.parse(i);return t||null}return i!==null?i:null}class $h extends Up{constructor(t){t=t||{},super(),this.dataProjection=ht(t.dataProjection?t.dataProjection:"EPSG:4326"),t.featureProjection&&(this.defaultFeatureProjection=ht(t.featureProjection)),t.featureClass&&(this.featureClass=t.featureClass),this.geometryName_=t.geometryName,this.extractGeometryName_=t.extractGeometryName,this.supportedMediaTypes=["application/geo+json","application/vnd.geo+json"]}readFeatureFromObject(t,e){let n=null;t.type==="Feature"?n=t:n={type:"Feature",geometry:t,properties:null};const r=za(n.geometry);if(this.featureClass===Vt)return Kh({geometry:r,id:n.id,properties:n.properties},e);const s=new vn;return this.geometryName_?s.setGeometryName(this.geometryName_):this.extractGeometryName_&&n.geometry_name&&s.setGeometryName(n.geometry_name),s.setGeometry(Ha(r,e)),"id"in n&&s.setId(n.id),n.properties&&s.setProperties(n.properties,!0),s}readFeaturesFromObject(t,e){const n=t;let r=null;if(n.type==="FeatureCollection"){const s=t;r=[];const o=s.features;for(let a=0,l=o.length;a<l;++a){const h=this.readFeatureFromObject(o[a],e);h&&r.push(h)}}else r=[this.readFeatureFromObject(t,e)];return r.flat()}readGeometryFromObject(t,e){return qp(t,e)}readProjectionFromObject(t){const e=t.crs;let n;if(e)if(e.type=="name")n=ht(e.properties.name);else if(e.type==="EPSG")n=ht("EPSG:"+e.properties.code);else throw new Error("Unknown SRS type");else n=this.dataProjection;return n}writeFeatureObject(t,e){e=this.adaptOptions(e);const n={type:"Feature",geometry:null,properties:null},r=t.getId();if(r!==void 0&&(n.id=r),!t.hasProperties())return n;const s=t.getProperties(),o=t.getGeometry();return o&&(n.geometry=ko(o,e),delete s[t.getGeometryName()]),Sn(s)||(n.properties=s),n}writeFeaturesObject(t,e){e=this.adaptOptions(e);const n=[];for(let r=0,s=t.length;r<s;++r)n.push(this.writeFeatureObject(t[r],e));return{type:"FeatureCollection",features:n}}writeGeometryObject(t,e){return ko(t,this.adaptOptions(e))}}function za(i,t){if(!i)return null;let e;switch(i.type){case"Point":{e=Zp(i);break}case"LineString":{e=Jp(i);break}case"Polygon":{e=e0(i);break}case"MultiPoint":{e=$p(i);break}case"MultiLineString":{e=Kp(i);break}case"MultiPolygon":{e=t0(i);break}case"GeometryCollection":{e=Qp(i);break}default:throw new Error("Unsupported GeoJSON type: "+i.type)}return e}function qp(i,t){const e=za(i);return Ha(e,t)}function Qp(i,t){return i.geometries.map(function(n){return za(n)})}function Zp(i){const t=i.coordinates;return{type:"Point",flatCoordinates:t,layout:kn(t.length)}}function Jp(i){const t=i.coordinates,e=t.flat();return{type:"LineString",flatCoordinates:e,ends:[e.length],layout:kn(t[0]?.length||2)}}function Kp(i){const t=i.coordinates,e=t[0]?.[0]?.length||2,n=[],r=lr(n,0,t,e);return{type:"MultiLineString",flatCoordinates:n,ends:r,layout:kn(e)}}function $p(i){const t=i.coordinates;return{type:"MultiPoint",flatCoordinates:t.flat(),layout:kn(t[0]?.length||2)}}function t0(i){const t=i.coordinates,e=[],n=t[0]?.[0]?.[0].length||2,r=qc(e,0,t,n);return{type:"MultiPolygon",flatCoordinates:e,ends:r,layout:kn(n)}}function e0(i){const t=i.coordinates,e=[],n=t[0]?.[0]?.length,r=lr(e,0,t,n);return{type:"Polygon",flatCoordinates:e,ends:r,layout:kn(n)}}function ko(i,t){i=ka(i,!0,t);const e=i.getType();let n;switch(e){case"Point":{n=a0(i);break}case"LineString":{n=i0(i);break}case"Polygon":{n=l0(i,t);break}case"MultiPoint":{n=s0(i);break}case"MultiLineString":{n=r0(i);break}case"MultiPolygon":{n=o0(i,t);break}case"GeometryCollection":{n=n0(i,t);break}case"Circle":{n={type:"GeometryCollection",geometries:[]};break}default:throw new Error("Unsupported geometry type: "+e)}return n}function n0(i,t){return t=Object.assign({},t),delete t.featureProjection,{type:"GeometryCollection",geometries:i.getGeometriesArray().map(function(n){return ko(n,t)})}}function i0(i,t){return{type:"LineString",coordinates:i.getCoordinates()}}function r0(i,t){return{type:"MultiLineString",coordinates:i.getCoordinates()}}function s0(i,t){return{type:"MultiPoint",coordinates:i.getCoordinates()}}function o0(i,t){let e;return t&&(e=t.rightHanded),{type:"MultiPolygon",coordinates:i.getCoordinates(e)}}function a0(i,t){return{type:"Point",coordinates:i.getCoordinates()}}function l0(i,t){let e;return t&&(e=t.rightHanded),{type:"Polygon",coordinates:i.getCoordinates(e)}}class c0{constructor(){this.cache_={},this.patternCache_={},this.cacheSize_=0,this.maxCacheSize_=1024}clear(){this.cache_={},this.patternCache_={},this.cacheSize_=0}canExpireCache(){return this.cacheSize_>this.maxCacheSize_}expire(){if(this.canExpireCache()){let t=0;for(const e in this.cache_){const n=this.cache_[e];(t++&3)===0&&!n.hasListener()&&(delete this.cache_[e],delete this.patternCache_[e],--this.cacheSize_)}}}get(t,e,n){const r=go(t,e,n);return r in this.cache_?this.cache_[r]:null}getPattern(t,e,n){const r=go(t,e,n);return r in this.patternCache_?this.patternCache_[r]:null}set(t,e,n,r,s){const o=go(t,e,n),a=o in this.cache_;this.cache_[o]=r,s&&(r.getImageState()===G.IDLE&&r.load(),r.getImageState()===G.LOADING?r.ready().then(()=>{this.patternCache_[o]=Kr().createPattern(r.getImage(1),"repeat")}):this.patternCache_[o]=Kr().createPattern(r.getImage(1),"repeat")),a||++this.cacheSize_}setSize(t){this.maxCacheSize_=t,this.expire()}}function go(i,t,e){const n=e?ui(e):"null";return t+":"+i+":"+n}const de=new c0;let _i=null;class tu extends gs{constructor(t,e,n,r,s){super(),this.hitDetectionImage_=null,this.image_=t,this.crossOrigin_=n,this.canvas_={},this.color_=s,this.imageState_=r===void 0?G.IDLE:r,this.size_=t&&t.width&&t.height?[t.width,t.height]:null,this.src_=e,this.tainted_,this.ready_=null}initializeImage_(){this.image_=new Image,this.crossOrigin_!==null&&(this.image_.crossOrigin=this.crossOrigin_)}isTainted_(){if(this.tainted_===void 0&&this.imageState_===G.LOADED){_i||(_i=xt(1,1,void 0,{willReadFrequently:!0})),_i.drawImage(this.image_,0,0);try{_i.getImageData(0,0,1,1),this.tainted_=!1}catch{_i=null,this.tainted_=!0}}return this.tainted_===!0}dispatchChangeEvent_(){this.dispatchEvent(yt.CHANGE)}handleImageError_(){this.imageState_=G.ERROR,this.dispatchChangeEvent_()}handleImageLoad_(){this.imageState_=G.LOADED,this.size_=[this.image_.width,this.image_.height],this.dispatchChangeEvent_()}getImage(t){return this.image_||this.initializeImage_(),this.replaceColor_(t),this.canvas_[t]?this.canvas_[t]:this.image_}getPixelRatio(t){return this.replaceColor_(t),this.canvas_[t]?t:1}getImageState(){return this.imageState_}getHitDetectionImage(){if(this.image_||this.initializeImage_(),!this.hitDetectionImage_)if(this.isTainted_()){const t=this.size_[0],e=this.size_[1],n=xt(t,e);n.fillRect(0,0,t,e),this.hitDetectionImage_=n.canvas}else this.hitDetectionImage_=this.image_;return this.hitDetectionImage_}getSize(){return this.size_}getSrc(){return this.src_}load(){if(this.imageState_===G.IDLE){this.image_||this.initializeImage_(),this.imageState_=G.LOADING;try{this.src_!==void 0&&(this.image_.src=this.src_)}catch{this.handleImageError_()}this.image_ instanceof HTMLImageElement&&Id(this.image_,this.src_).then(t=>{this.image_=t,this.handleImageLoad_()}).catch(this.handleImageError_.bind(this))}}replaceColor_(t){if(!this.color_||this.canvas_[t]||this.imageState_!==G.LOADED)return;const e=this.image_,n=xt(Math.ceil(e.width*t),Math.ceil(e.height*t)),r=n.canvas;n.scale(t,t),n.drawImage(e,0,0),n.globalCompositeOperation="multiply",n.fillStyle=Yd(this.color_),n.fillRect(0,0,r.width/t,r.height/t),n.globalCompositeOperation="destination-in",n.drawImage(e,0,0),this.canvas_[t]=r}ready(){return this.ready_||(this.ready_=new Promise(t=>{if(this.imageState_===G.LOADED||this.imageState_===G.ERROR)t();else{const e=()=>{(this.imageState_===G.LOADED||this.imageState_===G.ERROR)&&(this.removeEventListener(yt.CHANGE,e),t())};this.addEventListener(yt.CHANGE,e)}})),this.ready_}}function ls(i,t,e,n,r,s){let o=t===void 0?void 0:de.get(t,e,r);return o||(o=new tu(i,i&&"src"in i?i.src||void 0:t,e,n,r),de.set(t,e,r,o,s)),s&&o&&!de.getPattern(t,e,r)&&de.set(t,e,r,o,s),o}function ge(i){return i?Array.isArray(i)?ba(i):typeof i=="object"&&"src"in i?h0(i):i:null}function h0(i){if(!i.offset||!i.size)return de.getPattern(i.src,"anonymous",i.color);const t=i.src+":"+i.offset,e=de.getPattern(t,void 0,i.color);if(e)return e;const n=de.get(i.src,"anonymous",null);if(n.getImageState()!==G.LOADED)return null;const r=xt(i.size[0],i.size[1]);return r.drawImage(n.getImage(1),i.offset[0],i.offset[1],i.size[0],i.size[1],0,0,i.size[0],i.size[1]),ls(r.canvas,t,void 0,G.LOADED,i.color,!0),de.getPattern(t,void 0,i.color)}class eu{drawCustom(t,e,n,r,s){}drawGeometry(t){}setStyle(t){}drawCircle(t,e,n){}drawFeature(t,e,n){}drawGeometryCollection(t,e,n){}drawLineString(t,e,n){}drawMultiLineString(t,e,n){}drawMultiPoint(t,e,n){}drawMultiPolygon(t,e,n){}drawPoint(t,e,n){}drawPolygon(t,e,n){}drawText(t,e,n){}setFillStrokeStyle(t,e){}setImageStyle(t,e){}setTextStyle(t,e){}}const u0=new RegExp(["^\\s*(?=(?:(?:[-a-z]+\\s*){0,2}(italic|oblique))?)","(?=(?:(?:[-a-z]+\\s*){0,2}(small-caps))?)","(?=(?:(?:[-a-z]+\\s*){0,2}(bold(?:er)?|lighter|[1-9]00 ))?)","(?:(?:normal|\\1|\\2|\\3)\\s*){0,3}((?:xx?-)?","(?:small|large)|medium|smaller|larger|[\\.\\d]+(?:\\%|in|[cem]m|ex|p[ctx]))","(?:\\s*\\/\\s*(normal|[\\.\\d]+(?:\\%|in|[cem]m|ex|p[ctx])?))",`?\\s*([-,\\"\\'\\sa-z0-9]+?)\\s*$`].join(""),"i"),tc=["style","variant","weight","size","lineHeight","family"],Ho={normal:400,bold:700},zo=function(i){const t=i.match(u0);if(!t)return null;const e={lineHeight:"normal",size:"1.2em",style:"normal",weight:"400",variant:"normal"};for(let n=0,r=tc.length;n<r;++n){const s=t[n+1];s!==void 0&&(e[tc[n]]=typeof s=="string"?s.trim():s)}return isNaN(Number(e.weight))&&e.weight in Ho&&(e.weight=Ho[e.weight]),e.families=e.family.split(/,\s?/).map(n=>n.trim().replace(/^['"]|['"]$/g,"")),e},nu="10px sans-serif",Ft="#000",gi="round",_e=[],Le=0,mi="round",Ji=10,Ki="#000",$i="center",cs="middle",yn=[0,0,0,0],tr=1,Li=new Nn;let Ii=null,ec;const Wo={},f0=new Set(["serif","sans-serif","monospace","cursive","fantasy","system-ui","ui-serif","ui-sans-serif","ui-monospace","ui-rounded","emoji","math","fangsong"]);function d0(i,t,e){return`${i} ${t} 16px "${e}"`}const g0=(function(){let t,e;async function n(s){await e.ready;const o=await e.load(s);if(o.length===0)return!1;const a=zo(s),l=a.families[0].toLowerCase(),h=a.weight;return o.some(c=>{const u=c.family.replace(/^['"]|['"]$/g,"").toLowerCase(),f=Ho[c.weight]||c.weight;return u===l&&c.style===a.style&&f==h})}async function r(){await e.ready;let s=!0;const o=Li.getProperties(),a=Object.keys(o).filter(l=>o[l]<100);for(let l=a.length-1;l>=0;--l){const h=a[l];let c=o[h];c<100&&(await n(h)?(Jo(Wo),Li.set(h,100)):(c+=10,Li.set(h,c,!0),c<100&&(s=!1)))}t=void 0,s||(t=setTimeout(r,100))}return async function(s){e||(e=Ln?self.fonts:document.fonts);const o=zo(s);if(!o)return;const a=o.families;let l=!1;for(const h of a){if(f0.has(h))continue;const c=d0(o.style,o.weight,h);Li.get(c)===void 0&&(Li.set(c,0,!0),l=!0)}l&&(clearTimeout(t),t=setTimeout(r,100))}})(),m0=(function(){let i;return function(t){let e=Wo[t];if(e==null){if(Ln){const n=zo(t),r=iu(t,"Žg");e=(isNaN(Number(n.lineHeight))?1.2:Number(n.lineHeight))*(r.actualBoundingBoxAscent+r.actualBoundingBoxDescent)}else i||(i=document.createElement("div"),i.innerHTML="M",i.style.minHeight="0",i.style.maxHeight="none",i.style.height="auto",i.style.padding="0",i.style.border="none",i.style.position="absolute",i.style.display="block",i.style.left="-99999px"),i.style.font=t,document.body.appendChild(i),e=i.offsetHeight,document.body.removeChild(i);Wo[t]=e}return e}})();function iu(i,t){return Ii||(Ii=xt(1,1)),i!=ec&&(Ii.font=i,ec=Ii.font),Ii.measureText(t)}function ru(i,t){return iu(i,t).width}function nc(i,t,e){if(t in e)return e[t];const n=t.split(`
282
+ `).reduce((r,s)=>Math.max(r,ru(i,s)),0);return e[t]=n,n}function p0(i,t){const e=[],n=[],r=[];let s=0,o=0,a=0,l=0;for(let h=0,c=t.length;h<=c;h+=2){const u=t[h];if(u===`
283
+ `||h===c){s=Math.max(s,o),r.push(o),o=0,a+=l,l=0;continue}const f=t[h+1]||i.font,g=ru(f,u);e.push(g),o+=g;const d=m0(f);n.push(d),l=Math.max(l,d)}return{width:s,height:a,widths:e,heights:n,lineWidths:r}}function y0(i,t,e,n,r,s,o,a,l,h,c){i.save(),e!==1&&(i.globalAlpha===void 0?i.globalAlpha=u=>u.globalAlpha*=e:i.globalAlpha*=e),t&&i.transform.apply(i,t),n.contextInstructions?(i.translate(l,h),i.scale(c[0],c[1]),w0(n,i)):c[0]<0||c[1]<0?(i.translate(l,h),i.scale(c[0],c[1]),i.drawImage(n,r,s,o,a,0,0,o,a)):i.drawImage(n,r,s,o,a,l,h,o*c[0],a*c[1]),i.restore()}function w0(i,t){const e=i.contextInstructions;for(let n=0,r=e.length;n<r;n+=2)Array.isArray(e[n+1])?t[e[n]].apply(t,e[n+1]):t[e[n]]=e[n+1]}const H={BEGIN_GEOMETRY:0,BEGIN_PATH:1,CIRCLE:2,CLOSE_PATH:3,CUSTOM:4,DRAW_CHARS:5,DRAW_IMAGE:6,END_GEOMETRY:7,FILL:8,MOVE_TO_LINE_TO:9,SET_FILL_STYLE:10,SET_STROKE_STYLE:11,STROKE:12},Ir=[H.FILL],Qe=[H.STROKE],wn=[H.BEGIN_PATH],ic=[H.CLOSE_PATH];class gr extends eu{constructor(t,e,n,r){super(),this.tolerance=t,this.maxExtent=e,this.pixelRatio=r,this.maxLineWidth=0,this.resolution=n,this.beginGeometryInstruction1_=null,this.beginGeometryInstruction2_=null,this.bufferedMaxExtent_=null,this.instructions=[],this.coordinates=[],this.tmpCoordinate_=[],this.hitDetectionInstructions=[],this.state={}}applyPixelRatio(t){const e=this.pixelRatio;return e==1?t:t.map(function(n){return n*e})}appendFlatPointCoordinates(t,e){const n=this.getBufferedMaxExtent(),r=this.tmpCoordinate_,s=this.coordinates;let o=s.length;for(let a=0,l=t.length;a<l;a+=e)r[0]=t[a],r[1]=t[a+1],Rn(n,r)&&(s[o++]=r[0],s[o++]=r[1]);return o}appendFlatLineCoordinates(t,e,n,r,s,o){const a=this.coordinates;let l=a.length;const h=this.getBufferedMaxExtent();o&&(e+=r);let c=t[e],u=t[e+1];const f=this.tmpCoordinate_;let g=!0,d,m,p;for(d=e+r;d<n;d+=r)f[0]=t[d],f[1]=t[d+1],p=Eo(h,f),p!==m?(g&&(a[l++]=c,a[l++]=u,g=!1),a[l++]=f[0],a[l++]=f[1]):p===Ct.INTERSECTING?(a[l++]=f[0],a[l++]=f[1],g=!1):g=!0,c=f[0],u=f[1],m=p;return(s&&g||d===e+r)&&(a[l++]=c,a[l++]=u),l}drawCustomCoordinates_(t,e,n,r,s){for(let o=0,a=n.length;o<a;++o){const l=n[o],h=this.appendFlatLineCoordinates(t,e,l,r,!1,!1);s.push(h),e=l}return e}drawCustom(t,e,n,r,s){this.beginGeometry(t,e,s);const o=t.getType(),a=t.getStride(),l=this.coordinates.length;let h,c,u,f,g;switch(o){case"MultiPolygon":h=t.getOrientedFlatCoordinates(),f=[];const d=t.getEndss();g=0;for(let m=0,p=d.length;m<p;++m){const y=[];g=this.drawCustomCoordinates_(h,g,d[m],a,y),f.push(y)}this.instructions.push([H.CUSTOM,l,f,t,n,Ro,s]),this.hitDetectionInstructions.push([H.CUSTOM,l,f,t,r||n,Ro,s]);break;case"Polygon":case"MultiLineString":u=[],h=o=="Polygon"?t.getOrientedFlatCoordinates():t.getFlatCoordinates(),g=this.drawCustomCoordinates_(h,0,t.getEnds(),a,u),this.instructions.push([H.CUSTOM,l,u,t,n,Ui,s]),this.hitDetectionInstructions.push([H.CUSTOM,l,u,t,r||n,Ui,s]);break;case"LineString":case"Circle":h=t.getFlatCoordinates(),c=this.appendFlatLineCoordinates(h,0,h.length,a,!1,!1),this.instructions.push([H.CUSTOM,l,c,t,n,qe,s]),this.hitDetectionInstructions.push([H.CUSTOM,l,c,t,r||n,qe,s]);break;case"MultiPoint":h=t.getFlatCoordinates(),c=this.appendFlatPointCoordinates(h,a),c>l&&(this.instructions.push([H.CUSTOM,l,c,t,n,qe,s]),this.hitDetectionInstructions.push([H.CUSTOM,l,c,t,r||n,qe,s]));break;case"Point":h=t.getFlatCoordinates(),this.coordinates.push(h[0],h[1]),c=this.coordinates.length,this.instructions.push([H.CUSTOM,l,c,t,n,void 0,s]),this.hitDetectionInstructions.push([H.CUSTOM,l,c,t,r||n,void 0,s]);break}this.endGeometry(e)}beginGeometry(t,e,n){this.beginGeometryInstruction1_=[H.BEGIN_GEOMETRY,e,0,t,n],this.instructions.push(this.beginGeometryInstruction1_),this.beginGeometryInstruction2_=[H.BEGIN_GEOMETRY,e,0,t,n],this.hitDetectionInstructions.push(this.beginGeometryInstruction2_)}finish(){return{instructions:this.instructions,hitDetectionInstructions:this.hitDetectionInstructions,coordinates:this.coordinates}}reverseHitDetectionInstructions(){const t=this.hitDetectionInstructions;t.reverse();let e;const n=t.length;let r,s,o=-1;for(e=0;e<n;++e)r=t[e],s=r[0],s==H.END_GEOMETRY?o=e:s==H.BEGIN_GEOMETRY&&(r[2]=e,Uu(this.hitDetectionInstructions,o,e),o=-1)}fillStyleToState(t,e={}){if(t){const n=t.getColor();e.fillPatternScale=n&&typeof n=="object"&&"src"in n?this.pixelRatio:1,e.fillStyle=ge(n||Ft)}else e.fillStyle=void 0;return e}strokeStyleToState(t,e={}){if(t){const n=t.getColor();e.strokeStyle=ge(n||Ki);const r=t.getLineCap();e.lineCap=r!==void 0?r:gi;const s=t.getLineDash();e.lineDash=s?s.slice():_e;const o=t.getLineDashOffset();e.lineDashOffset=o||Le;const a=t.getLineJoin();e.lineJoin=a!==void 0?a:mi;const l=t.getWidth();e.lineWidth=l!==void 0?l:tr;const h=t.getMiterLimit();e.miterLimit=h!==void 0?h:Ji,e.lineWidth>this.maxLineWidth&&(this.maxLineWidth=e.lineWidth,this.bufferedMaxExtent_=null)}else e.strokeStyle=void 0,e.lineCap=void 0,e.lineDash=null,e.lineDashOffset=void 0,e.lineJoin=void 0,e.lineWidth=void 0,e.miterLimit=void 0;return e}setFillStrokeStyle(t,e){const n=this.state;this.fillStyleToState(t,n),this.strokeStyleToState(e,n)}createFill(t){const e=t.fillStyle,n=[H.SET_FILL_STYLE,e];return typeof e!="string"&&n.push(t.fillPatternScale),n}applyStroke(t){this.instructions.push(this.createStroke(t))}createStroke(t){return[H.SET_STROKE_STYLE,t.strokeStyle,t.lineWidth*this.pixelRatio,t.lineCap,t.lineJoin,t.miterLimit,t.lineDash?this.applyPixelRatio(t.lineDash):null,t.lineDashOffset*this.pixelRatio]}updateFillStyle(t,e){const n=t.fillStyle;(typeof n!="string"||t.currentFillStyle!=n)&&(this.instructions.push(e.call(this,t)),t.currentFillStyle=n)}updateStrokeStyle(t,e){const n=t.strokeStyle,r=t.lineCap,s=t.lineDash,o=t.lineDashOffset,a=t.lineJoin,l=t.lineWidth,h=t.miterLimit;(t.currentStrokeStyle!=n||t.currentLineCap!=r||s!=t.currentLineDash&&!yi(t.currentLineDash,s)||t.currentLineDashOffset!=o||t.currentLineJoin!=a||t.currentLineWidth!=l||t.currentMiterLimit!=h)&&(e.call(this,t),t.currentStrokeStyle=n,t.currentLineCap=r,t.currentLineDash=s,t.currentLineDashOffset=o,t.currentLineJoin=a,t.currentLineWidth=l,t.currentMiterLimit=h)}endGeometry(t){this.beginGeometryInstruction1_[2]=this.instructions.length,this.beginGeometryInstruction1_=null,this.beginGeometryInstruction2_[2]=this.hitDetectionInstructions.length,this.beginGeometryInstruction2_=null;const e=[H.END_GEOMETRY,t];this.instructions.push(e),this.hitDetectionInstructions.push(e)}getBufferedMaxExtent(){if(!this.bufferedMaxExtent_&&(this.bufferedMaxExtent_=nf(this.maxExtent),this.maxLineWidth>0)){const t=this.resolution*(this.maxLineWidth+1)/2;ji(this.bufferedMaxExtent_,t,this.bufferedMaxExtent_)}return this.bufferedMaxExtent_}}class A0 extends gr{constructor(t,e,n,r){super(t,e,n,r),this.hitDetectionImage_=null,this.image_=null,this.imagePixelRatio_=void 0,this.anchorX_=void 0,this.anchorY_=void 0,this.height_=void 0,this.opacity_=void 0,this.originX_=void 0,this.originY_=void 0,this.rotateWithView_=void 0,this.rotation_=void 0,this.scale_=void 0,this.width_=void 0,this.declutterMode_=void 0,this.declutterImageWithText_=void 0}drawPoint(t,e,n){if(!this.image_||this.maxExtent&&!Rn(this.maxExtent,t.getFlatCoordinates()))return;this.beginGeometry(t,e,n);const r=t.getFlatCoordinates(),s=t.getStride(),o=this.coordinates.length,a=this.appendFlatPointCoordinates(r,s);this.instructions.push([H.DRAW_IMAGE,o,a,this.image_,this.anchorX_*this.imagePixelRatio_,this.anchorY_*this.imagePixelRatio_,Math.ceil(this.height_*this.imagePixelRatio_),this.opacity_,this.originX_*this.imagePixelRatio_,this.originY_*this.imagePixelRatio_,this.rotateWithView_,this.rotation_,[this.scale_[0]*this.pixelRatio/this.imagePixelRatio_,this.scale_[1]*this.pixelRatio/this.imagePixelRatio_],Math.ceil(this.width_*this.imagePixelRatio_),this.declutterMode_,this.declutterImageWithText_]),this.hitDetectionInstructions.push([H.DRAW_IMAGE,o,a,this.hitDetectionImage_,this.anchorX_,this.anchorY_,this.height_,1,this.originX_,this.originY_,this.rotateWithView_,this.rotation_,this.scale_,this.width_,this.declutterMode_,this.declutterImageWithText_]),this.endGeometry(e)}drawMultiPoint(t,e,n){if(!this.image_)return;this.beginGeometry(t,e,n);const r=t.getFlatCoordinates(),s=[];for(let l=0,h=r.length;l<h;l+=t.getStride())(!this.maxExtent||Rn(this.maxExtent,r.slice(l,l+2)))&&s.push(r[l],r[l+1]);const o=this.coordinates.length,a=this.appendFlatPointCoordinates(s,2);this.instructions.push([H.DRAW_IMAGE,o,a,this.image_,this.anchorX_*this.imagePixelRatio_,this.anchorY_*this.imagePixelRatio_,Math.ceil(this.height_*this.imagePixelRatio_),this.opacity_,this.originX_*this.imagePixelRatio_,this.originY_*this.imagePixelRatio_,this.rotateWithView_,this.rotation_,[this.scale_[0]*this.pixelRatio/this.imagePixelRatio_,this.scale_[1]*this.pixelRatio/this.imagePixelRatio_],Math.ceil(this.width_*this.imagePixelRatio_),this.declutterMode_,this.declutterImageWithText_]),this.hitDetectionInstructions.push([H.DRAW_IMAGE,o,a,this.hitDetectionImage_,this.anchorX_,this.anchorY_,this.height_,1,this.originX_,this.originY_,this.rotateWithView_,this.rotation_,this.scale_,this.width_,this.declutterMode_,this.declutterImageWithText_]),this.endGeometry(e)}finish(){return this.reverseHitDetectionInstructions(),this.anchorX_=void 0,this.anchorY_=void 0,this.hitDetectionImage_=null,this.image_=null,this.imagePixelRatio_=void 0,this.height_=void 0,this.scale_=void 0,this.opacity_=void 0,this.originX_=void 0,this.originY_=void 0,this.rotateWithView_=void 0,this.rotation_=void 0,this.width_=void 0,super.finish()}setImageStyle(t,e){const n=t.getAnchor(),r=t.getSize(),s=t.getOrigin();this.imagePixelRatio_=t.getPixelRatio(this.pixelRatio),this.anchorX_=n[0],this.anchorY_=n[1],this.hitDetectionImage_=t.getHitDetectionImage(),this.image_=t.getImage(this.pixelRatio),this.height_=r[1],this.opacity_=t.getOpacity(),this.originX_=s[0],this.originY_=s[1],this.rotateWithView_=t.getRotateWithView(),this.rotation_=t.getRotation(),this.scale_=t.getScaleArray(),this.width_=r[0],this.declutterMode_=t.getDeclutterMode(),this.declutterImageWithText_=e}}class x0 extends gr{constructor(t,e,n,r){super(t,e,n,r)}drawFlatCoordinates_(t,e,n,r){const s=this.coordinates.length,o=this.appendFlatLineCoordinates(t,e,n,r,!1,!1),a=[H.MOVE_TO_LINE_TO,s,o];return this.instructions.push(a),this.hitDetectionInstructions.push(a),n}drawLineString(t,e,n){const r=this.state,s=r.strokeStyle,o=r.lineWidth;if(s===void 0||o===void 0)return;this.updateStrokeStyle(r,this.applyStroke),this.beginGeometry(t,e,n),this.hitDetectionInstructions.push([H.SET_STROKE_STYLE,r.strokeStyle,r.lineWidth,r.lineCap,r.lineJoin,r.miterLimit,_e,Le],wn);const a=t.getFlatCoordinates(),l=t.getStride();this.drawFlatCoordinates_(a,0,a.length,l),this.hitDetectionInstructions.push(Qe),this.endGeometry(e)}drawMultiLineString(t,e,n){const r=this.state,s=r.strokeStyle,o=r.lineWidth;if(s===void 0||o===void 0)return;this.updateStrokeStyle(r,this.applyStroke),this.beginGeometry(t,e,n),this.hitDetectionInstructions.push([H.SET_STROKE_STYLE,r.strokeStyle,r.lineWidth,r.lineCap,r.lineJoin,r.miterLimit,_e,Le],wn);const a=t.getEnds(),l=t.getFlatCoordinates(),h=t.getStride();let c=0;for(let u=0,f=a.length;u<f;++u)c=this.drawFlatCoordinates_(l,c,a[u],h);this.hitDetectionInstructions.push(Qe),this.endGeometry(e)}finish(){const t=this.state;return t.lastStroke!=null&&t.lastStroke!=this.coordinates.length&&this.instructions.push(Qe),this.reverseHitDetectionInstructions(),this.state=null,super.finish()}applyStroke(t){t.lastStroke!=null&&t.lastStroke!=this.coordinates.length&&(this.instructions.push(Qe),t.lastStroke=this.coordinates.length),t.lastStroke=0,super.applyStroke(t),this.instructions.push(wn)}}class rc extends gr{constructor(t,e,n,r){super(t,e,n,r)}drawFlatCoordinatess_(t,e,n,r){const s=this.state,o=s.fillStyle!==void 0,a=s.strokeStyle!==void 0,l=n.length;this.instructions.push(wn),this.hitDetectionInstructions.push(wn);for(let h=0;h<l;++h){const c=n[h],u=this.coordinates.length,f=this.appendFlatLineCoordinates(t,e,c,r,!0,!a),g=[H.MOVE_TO_LINE_TO,u,f];this.instructions.push(g),this.hitDetectionInstructions.push(g),a&&(this.instructions.push(ic),this.hitDetectionInstructions.push(ic)),e=c}return o&&(this.instructions.push(Ir),this.hitDetectionInstructions.push(Ir)),a&&(this.instructions.push(Qe),this.hitDetectionInstructions.push(Qe)),e}drawCircle(t,e,n){const r=this.state,s=r.fillStyle,o=r.strokeStyle;if(s===void 0&&o===void 0)return;this.setFillStrokeStyles_(),this.beginGeometry(t,e,n),r.fillStyle!==void 0&&this.hitDetectionInstructions.push([H.SET_FILL_STYLE,Ft]),r.strokeStyle!==void 0&&this.hitDetectionInstructions.push([H.SET_STROKE_STYLE,r.strokeStyle,r.lineWidth,r.lineCap,r.lineJoin,r.miterLimit,_e,Le]);const a=t.getFlatCoordinates(),l=t.getStride(),h=this.coordinates.length;this.appendFlatLineCoordinates(a,0,a.length,l,!1,!1);const c=[H.CIRCLE,h];this.instructions.push(wn,c),this.hitDetectionInstructions.push(wn,c),r.fillStyle!==void 0&&(this.instructions.push(Ir),this.hitDetectionInstructions.push(Ir)),r.strokeStyle!==void 0&&(this.instructions.push(Qe),this.hitDetectionInstructions.push(Qe)),this.endGeometry(e)}drawPolygon(t,e,n){const r=this.state,s=r.fillStyle,o=r.strokeStyle;if(s===void 0&&o===void 0)return;this.setFillStrokeStyles_(),this.beginGeometry(t,e,n),r.fillStyle!==void 0&&this.hitDetectionInstructions.push([H.SET_FILL_STYLE,Ft]),r.strokeStyle!==void 0&&this.hitDetectionInstructions.push([H.SET_STROKE_STYLE,r.strokeStyle,r.lineWidth,r.lineCap,r.lineJoin,r.miterLimit,_e,Le]);const a=t.getEnds(),l=t.getOrientedFlatCoordinates(),h=t.getStride();this.drawFlatCoordinatess_(l,0,a,h),this.endGeometry(e)}drawMultiPolygon(t,e,n){const r=this.state,s=r.fillStyle,o=r.strokeStyle;if(s===void 0&&o===void 0)return;this.setFillStrokeStyles_(),this.beginGeometry(t,e,n),r.fillStyle!==void 0&&this.hitDetectionInstructions.push([H.SET_FILL_STYLE,Ft]),r.strokeStyle!==void 0&&this.hitDetectionInstructions.push([H.SET_STROKE_STYLE,r.strokeStyle,r.lineWidth,r.lineCap,r.lineJoin,r.miterLimit,_e,Le]);const a=t.getEndss(),l=t.getOrientedFlatCoordinates(),h=t.getStride();let c=0;for(let u=0,f=a.length;u<f;++u)c=this.drawFlatCoordinatess_(l,c,a[u],h);this.endGeometry(e)}finish(){this.reverseHitDetectionInstructions(),this.state=null;const t=this.tolerance;if(t!==0){const e=this.coordinates;for(let n=0,r=e.length;n<r;++n)e[n]=ln(e[n],t)}return super.finish()}setFillStrokeStyles_(){const t=this.state;this.updateFillStyle(t,this.createFill),this.updateStrokeStyle(t,this.applyStroke)}}function C0(i,t,e,n,r){const s=[];let o=e,a=0,l=t.slice(e,2);for(;a<i&&o+r<n;){const[h,c]=l.slice(-2),u=t[o+r],f=t[o+r+1],g=Math.sqrt((u-h)*(u-h)+(f-c)*(f-c));if(a+=g,a>=i){const d=(i-a+g)/g,m=Yt(h,u,d),p=Yt(c,f,d);l.push(m,p),s.push(l),l=[m,p],a==i&&(o+=r),a=0}else if(a<i)l.push(t[o+r],t[o+r+1]),o+=r;else{const d=g-a,m=Yt(h,u,d/g),p=Yt(c,f,d/g);l.push(m,p),s.push(l),l=[m,p],a=0,o+=r}}return a>0&&s.push(l),s}function E0(i,t,e,n,r){let s=e,o=e,a=0,l=0,h=e,c,u,f,g,d,m,p,y,w,A;for(u=e;u<n;u+=r){const x=t[u],C=t[u+1];d!==void 0&&(w=x-d,A=C-m,g=Math.sqrt(w*w+A*A),p!==void 0&&(l+=f,c=Math.acos((p*w+y*A)/(f*g)),c>i&&(l>a&&(a=l,s=h,o=u),l=0,h=u-r)),f=g,p=w,y=A),d=x,m=C}return l+=g,l>a?[h,u]:[s,o]}const hs={left:0,center:.5,right:1,top:0,middle:.5,hanging:.2,alphabetic:.8,ideographic:.8,bottom:1};class v0 extends gr{constructor(t,e,n,r){super(t,e,n,r),this.labels_=null,this.text_="",this.textOffsetX_=0,this.textOffsetY_=0,this.textRotateWithView_=void 0,this.textKeepUpright_=void 0,this.textRotation_=0,this.textFillState_=null,this.fillStates={},this.fillStates[Ft]={fillStyle:Ft},this.textStrokeState_=null,this.strokeStates={},this.textState_={},this.textStates={},this.textKey_="",this.fillKey_="",this.strokeKey_="",this.declutterMode_=void 0,this.declutterImageWithText_=void 0}finish(){const t=super.finish();return t.textStates=this.textStates,t.fillStates=this.fillStates,t.strokeStates=this.strokeStates,t}drawText(t,e,n){const r=this.textFillState_,s=this.textStrokeState_,o=this.textState_;if(this.text_===""||!o||!r&&!s)return;const a=this.coordinates;let l=a.length;const h=t.getType();let c=null,u=t.getStride();if(o.placement==="line"&&(h=="LineString"||h=="MultiLineString"||h=="Polygon"||h=="MultiPolygon")){if(!Dt(this.maxExtent,t.getExtent()))return;let f;if(c=t.getFlatCoordinates(),h=="LineString")f=[c.length];else if(h=="MultiLineString")f=t.getEnds();else if(h=="Polygon")f=t.getEnds().slice(0,1);else if(h=="MultiPolygon"){const p=t.getEndss();f=[];for(let y=0,w=p.length;y<w;++y)f.push(p[y][0])}this.beginGeometry(t,e,n);const g=o.repeat,d=g?void 0:o.textAlign;let m=0;for(let p=0,y=f.length;p<y;++p){let w;g?w=C0(g*this.resolution,c,m,f[p],u):w=[c.slice(m,f[p])];for(let A=0,x=w.length;A<x;++A){const C=w[A];let v=0,E=C.length;if(d==null){const b=E0(o.maxAngle,C,0,C.length,2);v=b[0],E=b[1]}for(let b=v;b<E;b+=u)a.push(C[b],C[b+1]);const T=a.length;m=f[p],this.drawChars_(l,T),l=T}}this.endGeometry(e)}else{let f=o.overflow?null:[];switch(h){case"Point":case"MultiPoint":c=t.getFlatCoordinates();break;case"LineString":c=t.getFlatMidpoint();break;case"Circle":c=t.getCenter();break;case"MultiLineString":c=t.getFlatMidpoints(),u=2;break;case"Polygon":c=t.getFlatInteriorPoint(),o.overflow||f.push(c[2]/this.resolution),u=3;break;case"MultiPolygon":const x=t.getFlatInteriorPoints();c=[];for(let C=0,v=x.length;C<v;C+=3)o.overflow||f.push(x[C+2]/this.resolution),c.push(x[C],x[C+1]);if(c.length===0)return;u=2;break}const g=this.appendFlatPointCoordinates(c,u);if(g===l)return;if(f&&(g-l)/2!==c.length/u){let x=l/2;f=f.filter((C,v)=>{const E=a[(x+v)*2]===c[v*u]&&a[(x+v)*2+1]===c[v*u+1];return E||--x,E})}this.saveTextStates_();const d=o.backgroundFill?this.createFill(this.fillStyleToState(o.backgroundFill)):null,m=o.backgroundStroke?this.createStroke(this.strokeStyleToState(o.backgroundStroke)):null;this.beginGeometry(t,e,n);let p=o.padding;if(p!=yn&&(o.scale[0]<0||o.scale[1]<0)){let x=o.padding[0],C=o.padding[1],v=o.padding[2],E=o.padding[3];o.scale[0]<0&&(C=-C,E=-E),o.scale[1]<0&&(x=-x,v=-v),p=[x,C,v,E]}const y=this.pixelRatio;this.instructions.push([H.DRAW_IMAGE,l,g,null,NaN,NaN,NaN,1,0,0,this.textRotateWithView_,this.textRotation_,[1,1],NaN,this.declutterMode_,this.declutterImageWithText_,p==yn?yn:p.map(function(x){return x*y}),d,m,this.text_,this.textKey_,this.strokeKey_,this.fillKey_,this.textOffsetX_,this.textOffsetY_,f]);const w=1/y,A=d?d.slice(0):null;A&&(A[1]=Ft),this.hitDetectionInstructions.push([H.DRAW_IMAGE,l,g,null,NaN,NaN,NaN,1,0,0,this.textRotateWithView_,this.textRotation_,[w,w],NaN,this.declutterMode_,this.declutterImageWithText_,p,A,m,this.text_,this.textKey_,this.strokeKey_,this.fillKey_?Ft:this.fillKey_,this.textOffsetX_,this.textOffsetY_,f]),this.endGeometry(e)}}saveTextStates_(){const t=this.textStrokeState_,e=this.textState_,n=this.textFillState_,r=this.strokeKey_;t&&(r in this.strokeStates||(this.strokeStates[r]={strokeStyle:t.strokeStyle,lineCap:t.lineCap,lineDashOffset:t.lineDashOffset,lineWidth:t.lineWidth,lineJoin:t.lineJoin,miterLimit:t.miterLimit,lineDash:t.lineDash}));const s=this.textKey_;s in this.textStates||(this.textStates[s]={font:e.font,textAlign:e.textAlign||$i,justify:e.justify,textBaseline:e.textBaseline||cs,scale:e.scale});const o=this.fillKey_;n&&(o in this.fillStates||(this.fillStates[o]={fillStyle:n.fillStyle}))}drawChars_(t,e){const n=this.textStrokeState_,r=this.textState_,s=this.strokeKey_,o=this.textKey_,a=this.fillKey_;this.saveTextStates_();const l=this.pixelRatio,h=hs[r.textBaseline],c=this.textOffsetY_*l,u=this.text_,f=n?n.lineWidth*Math.abs(r.scale[0])/2:0;this.instructions.push([H.DRAW_CHARS,t,e,h,r.overflow,a,r.maxAngle,l,c,s,f*l,u,o,1,this.declutterMode_,this.textKeepUpright_]),this.hitDetectionInstructions.push([H.DRAW_CHARS,t,e,h,r.overflow,a&&Ft,r.maxAngle,l,c,s,f*l,u,o,1/l,this.declutterMode_,this.textKeepUpright_])}setTextStyle(t,e){let n,r,s;if(!t)this.text_="";else{const o=t.getFill();o?(r=this.textFillState_,r||(r={},this.textFillState_=r),r.fillStyle=ge(o.getColor()||Ft)):(r=null,this.textFillState_=r);const a=t.getStroke();if(!a)s=null,this.textStrokeState_=s;else{s=this.textStrokeState_,s||(s={},this.textStrokeState_=s);const m=a.getLineDash(),p=a.getLineDashOffset(),y=a.getWidth(),w=a.getMiterLimit();s.lineCap=a.getLineCap()||gi,s.lineDash=m?m.slice():_e,s.lineDashOffset=p===void 0?Le:p,s.lineJoin=a.getLineJoin()||mi,s.lineWidth=y===void 0?tr:y,s.miterLimit=w===void 0?Ji:w,s.strokeStyle=ge(a.getColor()||Ki)}n=this.textState_;const l=t.getFont()||nu;g0(l);const h=t.getScaleArray();n.overflow=t.getOverflow(),n.font=l,n.maxAngle=t.getMaxAngle(),n.placement=t.getPlacement(),n.textAlign=t.getTextAlign(),n.repeat=t.getRepeat(),n.justify=t.getJustify(),n.textBaseline=t.getTextBaseline()||cs,n.backgroundFill=t.getBackgroundFill(),n.backgroundStroke=t.getBackgroundStroke(),n.padding=t.getPadding()||yn,n.scale=h===void 0?[1,1]:h;const c=t.getOffsetX(),u=t.getOffsetY(),f=t.getRotateWithView(),g=t.getKeepUpright(),d=t.getRotation();this.text_=t.getText()||"",this.textOffsetX_=c===void 0?0:c,this.textOffsetY_=u===void 0?0:u,this.textRotateWithView_=f===void 0?!1:f,this.textKeepUpright_=g===void 0?!0:g,this.textRotation_=d===void 0?0:d,this.strokeKey_=s?(typeof s.strokeStyle=="string"?s.strokeStyle:ot(s.strokeStyle))+s.lineCap+s.lineDashOffset+"|"+s.lineWidth+s.lineJoin+s.miterLimit+"["+s.lineDash.join()+"]":"",this.textKey_=n.font+n.scale+(n.textAlign||"?")+(n.repeat||"?")+(n.justify||"?")+(n.textBaseline||"?"),this.fillKey_=r&&r.fillStyle?typeof r.fillStyle=="string"?r.fillStyle:"|"+ot(r.fillStyle):""}this.declutterMode_=t.getDeclutterMode(),this.declutterImageWithText_=e}}const b0={Circle:rc,Default:gr,Image:A0,LineString:x0,Polygon:rc,Text:v0};class T0{constructor(t,e,n,r){this.tolerance_=t,this.maxExtent_=e,this.pixelRatio_=r,this.resolution_=n,this.buildersByZIndex_={}}finish(){const t={};for(const e in this.buildersByZIndex_){t[e]=t[e]||{};const n=this.buildersByZIndex_[e];for(const r in n){const s=n[r].finish();t[e][r]=s}}return t}getBuilder(t,e){const n=t!==void 0?t.toString():"0";let r=this.buildersByZIndex_[n];r===void 0&&(r={},this.buildersByZIndex_[n]=r);let s=r[e];if(s===void 0){const o=b0[e];s=new o(this.tolerance_,this.maxExtent_,this.resolution_,this.pixelRatio_),r[e]=s}return s}}function S0(i,t,e,n,r,s,o,a,l,h,c,u,f=!0){let g=i[t],d=i[t+1],m=0,p=0,y=0,w=0;function A(){m=g,p=d,t+=n,g=i[t],d=i[t+1],w+=y,y=Math.sqrt((g-m)*(g-m)+(d-p)*(d-p))}do A();while(t<e-n&&w+y<s);let x=y===0?0:(s-w)/y;const C=Yt(m,g,x),v=Yt(p,d,x),E=t-n,T=w,b=s+a*l(h,r,c);for(;t<e-n&&w+y<b;)A();x=y===0?0:(b-w)/y;const R=Yt(m,g,x),_=Yt(p,d,x);let M=!1;if(f)if(u){const B=[C,v,R,_];jc(B,0,4,2,u,B,B),M=B[0]>B[2]}else M=C>R;const D=Math.PI,I=[],N=E+n===t;t=E,y=0,w=T,g=i[t],d=i[t+1];let O;if(N){A(),O=Math.atan2(d-p,g-m),M&&(O+=O>0?-D:D);const B=(R+C)/2,F=(_+v)/2;return I[0]=[B,F,(b-s)/2,O,r],I}r=r.replace(/\n/g," ");for(let B=0,F=r.length;B<F;){A();let X=Math.atan2(d-p,g-m);if(M&&(X+=X>0?-D:D),O!==void 0){let Q=X-O;if(Q+=Q>D?-2*D:Q<-D?2*D:0,Math.abs(Q)>o)return null}O=X;const k=B;let z=0;for(;B<F;++B){const Q=M?F-B-1:B,$=a*l(h,r[Q],c);if(t+n<e&&w+y<s+z+$/2)break;z+=$}if(B===k)continue;const L=M?r.substring(F-k,F-B):r.substring(k,B);x=y===0?0:(s+z/2-w)/y;const V=Yt(m,g,x),K=Yt(p,d,x);I.push([V,K,z/2,X,L]),s+=z}return I}const Kn=qt(),He=[],ve=[],be=[],ze=[];function sc(i){return i[3].declutterBox}const oc=new RegExp("[֑-ࣿיִ-﷿ﹰ-ﻼࠀ-࿿-]");function mo(i,t){return t==="start"?t=oc.test(i)?"right":"left":t==="end"&&(t=oc.test(i)?"left":"right"),hs[t]}function R0(i,t,e){return e>0&&i.push(`
284
+ `,""),i.push(t,""),i}function P0(i,t,e){return e%2===0&&(i+=t),i}class _0{constructor(t,e,n,r,s){this.overlaps=n,this.pixelRatio=e,this.resolution=t,this.alignAndScaleFill_,this.instructions=r.instructions,this.coordinates=r.coordinates,this.coordinateCache_={},this.renderedTransform_=Pe(),this.hitDetectionInstructions=r.hitDetectionInstructions,this.pixelCoordinates_=null,this.viewRotation_=0,this.fillStates=r.fillStates||{},this.strokeStates=r.strokeStates||{},this.textStates=r.textStates||{},this.widths_={},this.labels_={},this.zIndexContext_=s?new ch:null}getZIndexContext(){return this.zIndexContext_}createLabel(t,e,n,r){const s=t+e+n+r;if(this.labels_[s])return this.labels_[s];const o=r?this.strokeStates[r]:null,a=n?this.fillStates[n]:null,l=this.textStates[e],h=this.pixelRatio,c=[l.scale[0]*h,l.scale[1]*h],u=l.justify?hs[l.justify]:mo(Array.isArray(t)?t[0]:t,l.textAlign||$i),f=r&&o.lineWidth?o.lineWidth:0,g=Array.isArray(t)?t:String(t).split(`
285
+ `).reduce(R0,[]),{width:d,height:m,widths:p,heights:y,lineWidths:w}=p0(l,g),A=d+f,x=[],C=(A+2)*c[0],v=(m+f)*c[1],E={width:C<0?Math.floor(C):Math.ceil(C),height:v<0?Math.floor(v):Math.ceil(v),contextInstructions:x};(c[0]!=1||c[1]!=1)&&x.push("scale",c),r&&(x.push("strokeStyle",o.strokeStyle),x.push("lineWidth",f),x.push("lineCap",o.lineCap),x.push("lineJoin",o.lineJoin),x.push("miterLimit",o.miterLimit),x.push("setLineDash",[o.lineDash]),x.push("lineDashOffset",o.lineDashOffset)),n&&x.push("fillStyle",a.fillStyle),x.push("textBaseline","middle"),x.push("textAlign","center");const T=.5-u;let b=u*A+T*f;const R=[],_=[];let M=0,D=0,I=0,N=0,O;for(let B=0,F=g.length;B<F;B+=2){const X=g[B];if(X===`
286
+ `){D+=M,M=0,b=u*A+T*f,++N;continue}const k=g[B+1]||l.font;k!==O&&(r&&R.push("font",k),n&&_.push("font",k),O=k),M=Math.max(M,y[I]);const z=[X,b+T*p[I]+u*(p[I]-w[N]),.5*(f+M)+D];b+=p[I],r&&R.push("strokeText",z),n&&_.push("fillText",z),++I}return Array.prototype.push.apply(x,R),Array.prototype.push.apply(x,_),this.labels_[s]=E,E}replayTextBackground_(t,e,n,r,s,o,a){t.beginPath(),t.moveTo.apply(t,e),t.lineTo.apply(t,n),t.lineTo.apply(t,r),t.lineTo.apply(t,s),t.lineTo.apply(t,e),o&&(this.alignAndScaleFill_=o[2],t.fillStyle=o[1],this.fill_(t)),a&&(this.setStrokeStyle_(t,a),t.stroke())}calculateImageOrLabelDimensions_(t,e,n,r,s,o,a,l,h,c,u,f,g,d,m,p){a*=f[0],l*=f[1];let y=n-a,w=r-l;const A=s+h>t?t-h:s,x=o+c>e?e-c:o,C=d[3]+A*f[0]+d[1],v=d[0]+x*f[1]+d[2],E=y-d[3],T=w-d[0];(m||u!==0)&&(He[0]=E,ze[0]=E,He[1]=T,ve[1]=T,ve[0]=E+C,be[0]=ve[0],be[1]=T+v,ze[1]=be[1]);let b;return u!==0?(b=Ie(Pe(),n,r,1,1,u,-n,-r),vt(b,He),vt(b,ve),vt(b,be),vt(b,ze),$e(Math.min(He[0],ve[0],be[0],ze[0]),Math.min(He[1],ve[1],be[1],ze[1]),Math.max(He[0],ve[0],be[0],ze[0]),Math.max(He[1],ve[1],be[1],ze[1]),Kn)):$e(Math.min(E,E+C),Math.min(T,T+v),Math.max(E,E+C),Math.max(T,T+v),Kn),g&&(y=Math.round(y),w=Math.round(w)),{drawImageX:y,drawImageY:w,drawImageW:A,drawImageH:x,originX:h,originY:c,declutterBox:{minX:Kn[0],minY:Kn[1],maxX:Kn[2],maxY:Kn[3],value:p},canvasTransform:b,scale:f}}replayImageOrLabel_(t,e,n,r,s,o,a){const l=!!(o||a),h=r.declutterBox,c=a?a[2]*r.scale[0]/2:0;return h.minX-c<=e[0]&&h.maxX+c>=0&&h.minY-c<=e[1]&&h.maxY+c>=0&&(l&&this.replayTextBackground_(t,He,ve,be,ze,o,a),y0(t,r.canvasTransform,s,n,r.originX,r.originY,r.drawImageW,r.drawImageH,r.drawImageX,r.drawImageY,r.scale)),!0}fill_(t){const e=this.alignAndScaleFill_;if(e){const n=vt(this.renderedTransform_,[0,0]),r=512*this.pixelRatio;t.save(),t.translate(n[0]%r,n[1]%r),e!==1&&t.scale(e,e),t.rotate(this.viewRotation_)}t.fill(),e&&t.restore()}setStrokeStyle_(t,e){t.strokeStyle=e[1],e[1]&&(t.lineWidth=e[2],t.lineCap=e[3],t.lineJoin=e[4],t.miterLimit=e[5],t.lineDashOffset=e[7],t.setLineDash(e[6]))}drawLabelWithPointPlacement_(t,e,n,r){const s=this.textStates[e],o=this.createLabel(t,e,r,n),a=this.strokeStates[n],l=this.pixelRatio,h=mo(Array.isArray(t)?t[0]:t,s.textAlign||$i),c=hs[s.textBaseline||cs],u=a&&a.lineWidth?a.lineWidth:0,f=o.width/l-2*s.scale[0],g=h*f+2*(.5-h)*u,d=c*o.height/l+2*(.5-c)*u;return{label:o,anchorX:g,anchorY:d}}execute_(t,e,n,r,s,o,a,l){const h=this.zIndexContext_;let c;this.pixelCoordinates_&&yi(n,this.renderedTransform_)?c=this.pixelCoordinates_:(this.pixelCoordinates_||(this.pixelCoordinates_=[]),c=Ke(this.coordinates,0,this.coordinates.length,2,n,this.pixelCoordinates_),Yf(this.renderedTransform_,n));let u=0;const f=r.length;let g=0,d,m,p,y,w,A,x,C,v,E,T,b,R,_=0,M=0;const D=this.coordinateCache_,I=this.viewRotation_,N=Math.round(Math.atan2(-n[1],n[0])*1e12)/1e12,O={context:t,pixelRatio:this.pixelRatio,resolution:this.resolution,rotation:I},B=this.instructions!=r||this.overlaps?0:200;let F,X,k,z;for(;u<f;){const L=r[u];switch(L[0]){case H.BEGIN_GEOMETRY:F=L[1],z=L[3],F.getGeometry()?a!==void 0&&!Dt(a,z.getExtent())?u=L[2]+1:++u:u=L[2],h&&(h.zIndex=L[4]);break;case H.BEGIN_PATH:_>B&&(this.fill_(t),_=0),M>B&&(t.stroke(),M=0),!_&&!M&&(t.beginPath(),w=NaN,A=NaN),++u;break;case H.CIRCLE:g=L[1];const K=c[g],Q=c[g+1],$=c[g+2],q=c[g+3],rt=$-K,at=q-Q,it=Math.sqrt(rt*rt+at*at);t.moveTo(K+it,Q),t.arc(K,Q,it,0,2*Math.PI,!0),++u;break;case H.CLOSE_PATH:t.closePath(),++u;break;case H.CUSTOM:g=L[1],d=L[2];const mt=L[3],Et=L[4],zt=L[5];O.geometry=mt,O.feature=F,u in D||(D[u]=[]);const Mt=D[u];zt?zt(c,g,d,2,Mt):(Mt[0]=c[g],Mt[1]=c[g+1],Mt.length=2),h&&(h.zIndex=L[6]),Et(Mt,O),++u;break;case H.DRAW_IMAGE:g=L[1],d=L[2],v=L[3],m=L[4],p=L[5];let wt=L[6];const _t=L[7],Wt=L[8],jt=L[9],ee=L[10];let le=L[11];const we=L[12];let Ae=L[13];y=L[14]||"declutter";const dt=L[15];if(!v&&L.length>=20){E=L[19],T=L[20],b=L[21],R=L[22];const Qt=this.drawLabelWithPointPlacement_(E,T,b,R);v=Qt.label,L[3]=v;const sn=L[23];m=(Qt.anchorX-sn)*this.pixelRatio,L[4]=m;const Zt=L[24];p=(Qt.anchorY-Zt)*this.pixelRatio,L[5]=p,wt=v.height,L[6]=wt,Ae=v.width,L[13]=Ae}let Oe;L.length>25&&(Oe=L[25]);let Fe,zn,Wn;L.length>17?(Fe=L[16],zn=L[17],Wn=L[18]):(Fe=yn,zn=null,Wn=null),ee&&N?le+=I:!ee&&!N&&(le-=I);let pr=0;for(;g<d;g+=2){if(Oe&&Oe[pr++]<Ae/this.pixelRatio)continue;const Qt=this.calculateImageOrLabelDimensions_(v.width,v.height,c[g],c[g+1],Ae,wt,m,p,Wt,jt,le,we,s,Fe,!!zn||!!Wn,F),sn=[t,e,v,Qt,_t,zn,Wn];if(l){let Zt,ce,Jt;if(dt){const ut=d-g;if(!dt[ut]){dt[ut]={args:sn,declutterMode:y};continue}const Lt=dt[ut];Zt=Lt.args,ce=Lt.declutterMode,delete dt[ut],Jt=sc(Zt)}let xe,Ce;if(Zt&&(ce!=="declutter"||!l.collides(Jt))&&(xe=!0),(y!=="declutter"||!l.collides(Qt.declutterBox))&&(Ce=!0),ce==="declutter"&&y==="declutter"){const ut=xe&&Ce;xe=ut,Ce=ut}xe&&(ce!=="none"&&l.insert(Jt),this.replayImageOrLabel_.apply(this,Zt)),Ce&&(y!=="none"&&l.insert(Qt.declutterBox),this.replayImageOrLabel_.apply(this,sn))}else this.replayImageOrLabel_.apply(this,sn)}++u;break;case H.DRAW_CHARS:const Ci=L[1],rn=L[2],Ne=L[3],Hs=L[4];R=L[5];const jn=L[6],Yn=L[7],Ei=L[8];b=L[9];const Vn=L[10];E=L[11],Array.isArray(E)&&(E=E.reduce(P0,"")),T=L[12];const yr=[L[13],L[13]];y=L[14]||"declutter";const zs=L[15],Un=this.textStates[T],Be=Un.font,vi=[Un.scale[0]*Yn,Un.scale[1]*Yn];let bi;Be in this.widths_?bi=this.widths_[Be]:(bi={},this.widths_[Be]=bi);const qa=La(c,Ci,rn,2),Qa=Math.abs(vi[0])*nc(Be,E,bi);if(Hs||Qa<=qa){const Qt=this.textStates[T].textAlign,sn=(qa-Qa)*mo(E,Qt),Zt=S0(c,Ci,rn,2,E,sn,jn,Math.abs(vi[0]),nc,Be,bi,N?0:this.viewRotation_,zs);t:if(Zt){const ce=[];let Jt,xe,Ce,ut,Lt;if(b)for(Jt=0,xe=Zt.length;Jt<xe;++Jt){Lt=Zt[Jt],Ce=Lt[4],ut=this.createLabel(Ce,T,"",b),m=Lt[2]+(vi[0]<0?-Vn:Vn),p=Ne*ut.height+(.5-Ne)*2*Vn*vi[1]/vi[0]-Ei;const Ee=this.calculateImageOrLabelDimensions_(ut.width,ut.height,Lt[0],Lt[1],ut.width,ut.height,m,p,0,0,Lt[3],yr,!1,yn,!1,F);if(l&&y==="declutter"&&l.collides(Ee.declutterBox))break t;ce.push([t,e,ut,Ee,1,null,null])}if(R)for(Jt=0,xe=Zt.length;Jt<xe;++Jt){Lt=Zt[Jt],Ce=Lt[4],ut=this.createLabel(Ce,T,R,""),m=Lt[2],p=Ne*ut.height-Ei;const Ee=this.calculateImageOrLabelDimensions_(ut.width,ut.height,Lt[0],Lt[1],ut.width,ut.height,m,p,0,0,Lt[3],yr,!1,yn,!1,F);if(l&&y==="declutter"&&l.collides(Ee.declutterBox))break t;ce.push([t,e,ut,Ee,1,null,null])}l&&y!=="none"&&l.load(ce.map(sc));for(let Ee=0,ku=ce.length;Ee<ku;++Ee)this.replayImageOrLabel_.apply(this,ce[Ee])}}++u;break;case H.END_GEOMETRY:if(o!==void 0){F=L[1];const Qt=o(F,z,y);if(Qt)return Qt}++u;break;case H.FILL:B?_++:this.fill_(t),++u;break;case H.MOVE_TO_LINE_TO:for(g=L[1],d=L[2],X=c[g],k=c[g+1],t.moveTo(X,k),w=X+.5|0,A=k+.5|0,g+=2;g<d;g+=2)X=c[g],k=c[g+1],x=X+.5|0,C=k+.5|0,(g==d-2||x!==w||C!==A)&&(t.lineTo(X,k),w=x,A=C);++u;break;case H.SET_FILL_STYLE:this.alignAndScaleFill_=L[2],_&&(this.fill_(t),_=0,M&&(t.stroke(),M=0)),t.fillStyle=L[1],++u;break;case H.SET_STROKE_STYLE:M&&(t.stroke(),M=0),this.setStrokeStyle_(t,L),++u;break;case H.STROKE:B?M++:t.stroke(),++u;break;default:++u;break}}_&&this.fill_(t),M&&t.stroke()}execute(t,e,n,r,s,o){this.viewRotation_=r,this.execute_(t,e,n,this.instructions,s,void 0,void 0,o)}executeHitDetection(t,e,n,r,s){return this.viewRotation_=n,this.execute_(t,[t.canvas.width,t.canvas.height],e,this.hitDetectionInstructions,!0,r,s)}}const un=["Polygon","Circle","LineString","Image","Text","Default"],su=["Image","Text"],L0=un.filter(i=>!su.includes(i));class I0{constructor(t,e,n,r,s,o,a){this.maxExtent_=t,this.overlaps_=r,this.pixelRatio_=n,this.resolution_=e,this.renderBuffer_=o,this.executorsByZIndex_={},this.hitDetectionContext_=null,this.hitDetectionTransform_=Pe(),this.renderedContext_=null,this.deferredZIndexContexts_={},this.createExecutors_(s,a)}clip(t,e){const n=this.getClipCoords(e);t.beginPath(),t.moveTo(n[0],n[1]),t.lineTo(n[2],n[3]),t.lineTo(n[4],n[5]),t.lineTo(n[6],n[7]),t.clip()}createExecutors_(t,e){for(const n in t){let r=this.executorsByZIndex_[n];r===void 0&&(r={},this.executorsByZIndex_[n]=r);const s=t[n];for(const o in s){const a=s[o];r[o]=new _0(this.resolution_,this.pixelRatio_,this.overlaps_,a,e)}}}hasExecutors(t){for(const e in this.executorsByZIndex_){const n=this.executorsByZIndex_[e];for(let r=0,s=t.length;r<s;++r)if(t[r]in n)return!0}return!1}forEachFeatureAtCoordinate(t,e,n,r,s,o){r=Math.round(r);const a=r*2+1,l=Ie(this.hitDetectionTransform_,r+.5,r+.5,1/e,-1/e,-n,-t[0],-t[1]),h=!this.hitDetectionContext_;h&&(this.hitDetectionContext_=xt(a,a));const c=this.hitDetectionContext_;c.canvas.width!==a||c.canvas.height!==a?(c.canvas.width=a,c.canvas.height=a):h||c.clearRect(0,0,a,a);let u;this.renderBuffer_!==void 0&&(u=qt(),Gi(u,t),ji(u,e*(this.renderBuffer_+r),u));const f=D0(r);let g;function d(C,v,E){const T=c.getImageData(0,0,a,a).data;for(let b=0,R=f.length;b<R;b++)if(T[f[b]]>0){if(!o||E==="none"||g!=="Image"&&g!=="Text"||o.includes(C)){const _=(f[b]-3)/4,M=r-_%a,D=r-(_/a|0),I=s(C,v,M*M+D*D);if(I)return I}c.clearRect(0,0,a,a);break}}const m=Object.keys(this.executorsByZIndex_).map(Number);m.sort(Re);let p,y,w,A,x;for(p=m.length-1;p>=0;--p){const C=m[p].toString();for(w=this.executorsByZIndex_[C],y=un.length-1;y>=0;--y)if(g=un[y],A=w[g],A!==void 0&&(x=A.executeHitDetection(c,l,n,d,u),x))return x}}getClipCoords(t){const e=this.maxExtent_;if(!e)return null;const n=e[0],r=e[1],s=e[2],o=e[3],a=[n,r,n,o,s,o,s,r];return Ke(a,0,8,2,t,a),a}isEmpty(){return Sn(this.executorsByZIndex_)}execute(t,e,n,r,s,o,a){const l=Object.keys(this.executorsByZIndex_).map(Number);l.sort(a?Vu:Re),o=o||un;const h=un.length;for(let c=0,u=l.length;c<u;++c){const f=l[c].toString(),g=this.executorsByZIndex_[f];for(let d=0,m=o.length;d<m;++d){const p=o[d],y=g[p];if(y!==void 0){const w=a===null?void 0:y.getZIndexContext(),A=w?w.getContext():t,x=this.maxExtent_&&p!=="Image"&&p!=="Text";if(x&&(A.save(),this.clip(A,n)),!w||p==="Text"||p==="Image"?y.execute(A,e,n,r,s,a):w.pushFunction(C=>y.execute(C,e,n,r,s,a)),x&&A.restore(),w){w.offset();const C=l[c]*h+un.indexOf(p);this.deferredZIndexContexts_[C]||(this.deferredZIndexContexts_[C]=[]),this.deferredZIndexContexts_[C].push(w)}}}}this.renderedContext_=t}getDeferredZIndexContexts(){return this.deferredZIndexContexts_}getRenderedContext(){return this.renderedContext_}renderDeferred(){const t=this.deferredZIndexContexts_,e=Object.keys(t).map(Number).sort(Re);for(let n=0,r=e.length;n<r;++n)t[e[n]].forEach(s=>{s.draw(this.renderedContext_),s.clear()}),t[e[n]].length=0}}const po={};function D0(i){if(po[i]!==void 0)return po[i];const t=i*2+1,e=i*i,n=new Array(e+1);for(let s=0;s<=i;++s)for(let o=0;o<=i;++o){const a=s*s+o*o;if(a>e)break;let l=n[a];l||(l=[],n[a]=l),l.push(((i+s)*t+(i+o))*4+3),s>0&&l.push(((i-s)*t+(i+o))*4+3),o>0&&(l.push(((i+s)*t+(i-o))*4+3),s>0&&l.push(((i-s)*t+(i-o))*4+3))}const r=[];for(let s=0,o=n.length;s<o;++s)n[s]&&r.push(...n[s]);return po[i]=r,r}class Ns{constructor(t){this.opacity_=t.opacity,this.rotateWithView_=t.rotateWithView,this.rotation_=t.rotation,this.scale_=t.scale,this.scaleArray_=Xt(t.scale),this.displacement_=t.displacement,this.declutterMode_=t.declutterMode}clone(){const t=this.getScale();return new Ns({opacity:this.getOpacity(),scale:Array.isArray(t)?t.slice():t,rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),displacement:this.getDisplacement().slice(),declutterMode:this.getDeclutterMode()})}getOpacity(){return this.opacity_}getRotateWithView(){return this.rotateWithView_}getRotation(){return this.rotation_}getScale(){return this.scale_}getScaleArray(){return this.scaleArray_}getDisplacement(){return this.displacement_}getDeclutterMode(){return this.declutterMode_}getAnchor(){return U()}getImage(t){return U()}getHitDetectionImage(){return U()}getPixelRatio(t){return 1}getImageState(){return U()}getImageSize(){return U()}getOrigin(){return U()}getSize(){return U()}setDisplacement(t){this.displacement_=t}setOpacity(t){this.opacity_=t}setRotateWithView(t){this.rotateWithView_=t}setRotation(t){this.rotation_=t}setScale(t){this.scale_=t,this.scaleArray_=Xt(t)}listenImageChange(t){U()}load(){U()}unlistenImageChange(t){U()}ready(){return Promise.resolve()}}class Bs extends Ns{constructor(t){super({opacity:1,rotateWithView:t.rotateWithView!==void 0?t.rotateWithView:!1,rotation:t.rotation!==void 0?t.rotation:0,scale:t.scale!==void 0?t.scale:1,displacement:t.displacement!==void 0?t.displacement:[0,0],declutterMode:t.declutterMode}),this.hitDetectionCanvas_=null,this.fill_=t.fill!==void 0?t.fill:null,this.origin_=[0,0],this.points_=t.points,this.radius=t.radius,this.radius2_=t.radius2,this.angle_=t.angle!==void 0?t.angle:0,this.stroke_=t.stroke!==void 0?t.stroke:null,this.size_,this.renderOptions_,this.imageState_=this.fill_&&this.fill_.loading()?G.LOADING:G.LOADED,this.imageState_===G.LOADING&&this.ready().then(()=>this.imageState_=G.LOADED),this.render()}clone(){const t=this.getScale(),e=new Bs({fill:this.getFill()?this.getFill().clone():void 0,points:this.getPoints(),radius:this.getRadius(),radius2:this.getRadius2(),angle:this.getAngle(),stroke:this.getStroke()?this.getStroke().clone():void 0,rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),scale:Array.isArray(t)?t.slice():t,displacement:this.getDisplacement().slice(),declutterMode:this.getDeclutterMode()});return e.setOpacity(this.getOpacity()),e}getAnchor(){const t=this.size_,e=this.getDisplacement(),n=this.getScaleArray();return[t[0]/2-e[0]/n[0],t[1]/2+e[1]/n[1]]}getAngle(){return this.angle_}getFill(){return this.fill_}setFill(t){this.fill_=t,this.render()}getHitDetectionImage(){return this.hitDetectionCanvas_||(this.hitDetectionCanvas_=this.createHitDetectionCanvas_(this.renderOptions_)),this.hitDetectionCanvas_}getImage(t){const e=this.fill_?.getKey(),n=`${t},${this.angle_},${this.radius},${this.radius2_},${this.points_},${e}`+Object.values(this.renderOptions_).join(",");let r=de.get(n,null,null)?.getImage(1);if(!r){const s=this.renderOptions_,o=Math.ceil(s.size*t),a=xt(o,o);this.draw_(s,a,t),r=a.canvas,de.set(n,null,null,new tu(r,void 0,null,G.LOADED,null))}return r}getPixelRatio(t){return t}getImageSize(){return this.size_}getImageState(){return this.imageState_}getOrigin(){return this.origin_}getPoints(){return this.points_}getRadius(){return this.radius}getRadius2(){return this.radius2_}getSize(){return this.size_}getStroke(){return this.stroke_}setStroke(t){this.stroke_=t,this.render()}listenImageChange(t){}load(){}unlistenImageChange(t){}calculateLineJoinSize_(t,e,n){if(e===0||this.points_===1/0||t!=="bevel"&&t!=="miter")return e;let r=this.radius,s=this.radius2_===void 0?r:this.radius2_;if(r<s){const v=r;r=s,s=v}const o=this.radius2_===void 0?this.points_:this.points_*2,a=2*Math.PI/o,l=s*Math.sin(a),h=Math.sqrt(s*s-l*l),c=r-h,u=Math.sqrt(l*l+c*c),f=u/l;if(t==="miter"&&f<=n)return f*e;const g=e/2/f,d=e/2*(c/u),p=Math.sqrt((r+g)*(r+g)+d*d)-r;if(this.radius2_===void 0||t==="bevel")return p*2;const y=r*Math.sin(a),w=Math.sqrt(r*r-y*y),A=s-w,C=Math.sqrt(y*y+A*A)/y;if(C<=n){const v=C*e/2-s-r;return 2*Math.max(p,v)}return p*2}createRenderOptions(){let t=gi,e=mi,n=0,r=null,s=0,o,a=0;this.stroke_&&(o=ge(this.stroke_.getColor()??Ki),a=this.stroke_.getWidth()??tr,r=this.stroke_.getLineDash(),s=this.stroke_.getLineDashOffset()??0,e=this.stroke_.getLineJoin()??mi,t=this.stroke_.getLineCap()??gi,n=this.stroke_.getMiterLimit()??Ji);const l=this.calculateLineJoinSize_(e,a,n),h=Math.max(this.radius,this.radius2_||0),c=Math.ceil(2*h+l);return{strokeStyle:o,strokeWidth:a,size:c,lineCap:t,lineDash:r,lineDashOffset:s,lineJoin:e,miterLimit:n}}render(){this.renderOptions_=this.createRenderOptions();const t=this.renderOptions_.size;this.hitDetectionCanvas_=null,this.size_=[t,t]}draw_(t,e,n){if(e.scale(n,n),e.translate(t.size/2,t.size/2),this.createPath_(e),this.fill_){let r=this.fill_.getColor();r===null&&(r=Ft),e.fillStyle=ge(r),e.fill()}t.strokeStyle&&(e.strokeStyle=t.strokeStyle,e.lineWidth=t.strokeWidth,t.lineDash&&(e.setLineDash(t.lineDash),e.lineDashOffset=t.lineDashOffset),e.lineCap=t.lineCap,e.lineJoin=t.lineJoin,e.miterLimit=t.miterLimit,e.stroke())}createHitDetectionCanvas_(t){let e;if(this.fill_){let n=this.fill_.getColor(),r=0;typeof n=="string"&&(n=ui(n)),n===null?r=1:Array.isArray(n)&&(r=n.length===4?n[3]:1),r===0&&(e=xt(t.size,t.size),this.drawHitDetectionCanvas_(t,e))}return e?e.canvas:this.getImage(1)}createPath_(t){let e=this.points_;const n=this.radius;if(e===1/0)t.arc(0,0,n,0,2*Math.PI);else{const r=this.radius2_===void 0?n:this.radius2_;this.radius2_!==void 0&&(e*=2);const s=this.angle_-Math.PI/2,o=2*Math.PI/e;for(let a=0;a<e;a++){const l=s+a*o,h=a%2===0?n:r;t.lineTo(h*Math.cos(l),h*Math.sin(l))}t.closePath()}}drawHitDetectionCanvas_(t,e){e.translate(t.size/2,t.size/2),this.createPath_(e),e.fillStyle=Ft,e.fill(),t.strokeStyle&&(e.strokeStyle=t.strokeStyle,e.lineWidth=t.strokeWidth,t.lineDash&&(e.setLineDash(t.lineDash),e.lineDashOffset=t.lineDashOffset),e.lineJoin=t.lineJoin,e.miterLimit=t.miterLimit,e.stroke())}ready(){return this.fill_?this.fill_.ready():Promise.resolve()}}class en extends Bs{constructor(t){t=t||{radius:5},super({points:1/0,fill:t.fill,radius:t.radius,stroke:t.stroke,scale:t.scale!==void 0?t.scale:1,rotation:t.rotation!==void 0?t.rotation:0,rotateWithView:t.rotateWithView!==void 0?t.rotateWithView:!1,displacement:t.displacement!==void 0?t.displacement:[0,0],declutterMode:t.declutterMode})}clone(){const t=this.getScale(),e=new en({fill:this.getFill()?this.getFill().clone():void 0,stroke:this.getStroke()?this.getStroke().clone():void 0,radius:this.getRadius(),scale:Array.isArray(t)?t.slice():t,rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),displacement:this.getDisplacement().slice(),declutterMode:this.getDeclutterMode()});return e.setOpacity(this.getOpacity()),e}setRadius(t){this.radius=t,this.render()}}class Tt{constructor(t){t=t||{},this.patternImage_=null,this.color_=null,t.color!==void 0&&this.setColor(t.color)}clone(){const t=this.getColor();return new Tt({color:Array.isArray(t)?t.slice():t||void 0})}getColor(){return this.color_}setColor(t){if(t!==null&&typeof t=="object"&&"src"in t){const e=ls(null,t.src,"anonymous",void 0,t.offset?null:t.color?t.color:null,!(t.offset&&t.size));e.ready().then(()=>{this.patternImage_=null}),e.getImageState()===G.IDLE&&e.load(),e.getImageState()===G.LOADING&&(this.patternImage_=e)}this.color_=t}getKey(){const t=this.getColor();return t?t instanceof CanvasPattern||t instanceof CanvasGradient?ot(t):typeof t=="object"&&"src"in t?t.src+":"+t.offset:ui(t).toString():""}loading(){return!!this.patternImage_}ready(){return this.patternImage_?this.patternImage_.ready():Promise.resolve()}}function ac(i,t,e,n){return e!==void 0&&n!==void 0?[e/i,n/t]:e!==void 0?e/i:n!==void 0?n/t:1}class Xs extends Ns{constructor(t){t=t||{};const e=t.opacity!==void 0?t.opacity:1,n=t.rotation!==void 0?t.rotation:0,r=t.scale!==void 0?t.scale:1,s=t.rotateWithView!==void 0?t.rotateWithView:!1;super({opacity:e,rotation:n,scale:r,displacement:t.displacement!==void 0?t.displacement:[0,0],rotateWithView:s,declutterMode:t.declutterMode}),this.anchor_=t.anchor!==void 0?t.anchor:[.5,.5],this.normalizedAnchor_=null,this.anchorOrigin_=t.anchorOrigin!==void 0?t.anchorOrigin:"top-left",this.anchorXUnits_=t.anchorXUnits!==void 0?t.anchorXUnits:"fraction",this.anchorYUnits_=t.anchorYUnits!==void 0?t.anchorYUnits:"fraction",this.crossOrigin_=t.crossOrigin!==void 0?t.crossOrigin:null;const o=t.img!==void 0?t.img:null;let a=t.src;lt(!(a!==void 0&&o),"`image` and `src` cannot be provided at the same time"),(a===void 0||a.length===0)&&o&&(a=o.src||ot(o)),lt(a!==void 0&&a.length>0,"A defined and non-empty `src` or `image` must be provided"),lt(!((t.width!==void 0||t.height!==void 0)&&t.scale!==void 0),"`width` or `height` cannot be provided together with `scale`");let l;if(t.src!==void 0?l=G.IDLE:o!==void 0&&("complete"in o?o.complete?l=o.src?G.LOADED:G.IDLE:l=G.LOADING:l=G.LOADED),this.color_=t.color!==void 0?ui(t.color):null,this.iconImage_=ls(o,a,this.crossOrigin_,l,this.color_),this.offset_=t.offset!==void 0?t.offset:[0,0],this.offsetOrigin_=t.offsetOrigin!==void 0?t.offsetOrigin:"top-left",this.origin_=null,this.size_=t.size!==void 0?t.size:null,this.initialOptions_,t.width!==void 0||t.height!==void 0){let h,c;if(t.size)[h,c]=t.size;else{const u=this.getImage(1);if(u.width&&u.height)h=u.width,c=u.height;else if(u instanceof HTMLImageElement){this.initialOptions_=t;const f=()=>{if(this.unlistenImageChange(f),!this.initialOptions_)return;const g=this.iconImage_.getSize();this.setScale(ac(g[0],g[1],t.width,t.height))};this.listenImageChange(f);return}}h!==void 0&&this.setScale(ac(h,c,t.width,t.height))}}clone(){let t,e,n;return this.initialOptions_?(e=this.initialOptions_.width,n=this.initialOptions_.height):(t=this.getScale(),t=Array.isArray(t)?t.slice():t),new Xs({anchor:this.anchor_.slice(),anchorOrigin:this.anchorOrigin_,anchorXUnits:this.anchorXUnits_,anchorYUnits:this.anchorYUnits_,color:this.color_&&this.color_.slice?this.color_.slice():this.color_||void 0,crossOrigin:this.crossOrigin_,offset:this.offset_.slice(),offsetOrigin:this.offsetOrigin_,opacity:this.getOpacity(),rotateWithView:this.getRotateWithView(),rotation:this.getRotation(),scale:t,width:e,height:n,size:this.size_!==null?this.size_.slice():void 0,src:this.getSrc(),displacement:this.getDisplacement().slice(),declutterMode:this.getDeclutterMode()})}getAnchor(){let t=this.normalizedAnchor_;if(!t){t=this.anchor_;const r=this.getSize();if(this.anchorXUnits_=="fraction"||this.anchorYUnits_=="fraction"){if(!r)return null;t=this.anchor_.slice(),this.anchorXUnits_=="fraction"&&(t[0]*=r[0]),this.anchorYUnits_=="fraction"&&(t[1]*=r[1])}if(this.anchorOrigin_!="top-left"){if(!r)return null;t===this.anchor_&&(t=this.anchor_.slice()),(this.anchorOrigin_=="top-right"||this.anchorOrigin_=="bottom-right")&&(t[0]=-t[0]+r[0]),(this.anchorOrigin_=="bottom-left"||this.anchorOrigin_=="bottom-right")&&(t[1]=-t[1]+r[1])}this.normalizedAnchor_=t}const e=this.getDisplacement(),n=this.getScaleArray();return[t[0]-e[0]/n[0],t[1]+e[1]/n[1]]}setAnchor(t){this.anchor_=t,this.normalizedAnchor_=null}getColor(){return this.color_}getImage(t){return this.iconImage_.getImage(t)}getPixelRatio(t){return this.iconImage_.getPixelRatio(t)}getImageSize(){return this.iconImage_.getSize()}getImageState(){return this.iconImage_.getImageState()}getHitDetectionImage(){return this.iconImage_.getHitDetectionImage()}getOrigin(){if(this.origin_)return this.origin_;let t=this.offset_;if(this.offsetOrigin_!="top-left"){const e=this.getSize(),n=this.iconImage_.getSize();if(!e||!n)return null;t=t.slice(),(this.offsetOrigin_=="top-right"||this.offsetOrigin_=="bottom-right")&&(t[0]=n[0]-e[0]-t[0]),(this.offsetOrigin_=="bottom-left"||this.offsetOrigin_=="bottom-right")&&(t[1]=n[1]-e[1]-t[1])}return this.origin_=t,this.origin_}getSrc(){return this.iconImage_.getSrc()}setSrc(t){this.iconImage_=ls(null,t,this.crossOrigin_,G.IDLE,this.color_)}getSize(){return this.size_?this.size_:this.iconImage_.getSize()}getWidth(){const t=this.getScaleArray();if(this.size_)return this.size_[0]*t[0];if(this.iconImage_.getImageState()==G.LOADED)return this.iconImage_.getSize()[0]*t[0]}getHeight(){const t=this.getScaleArray();if(this.size_)return this.size_[1]*t[1];if(this.iconImage_.getImageState()==G.LOADED)return this.iconImage_.getSize()[1]*t[1]}setScale(t){delete this.initialOptions_,super.setScale(t)}listenImageChange(t){this.iconImage_.addEventListener(yt.CHANGE,t)}load(){this.iconImage_.load()}unlistenImageChange(t){this.iconImage_.removeEventListener(yt.CHANGE,t)}ready(){return this.iconImage_.ready()}}class bt{constructor(t){t=t||{},this.color_=t.color!==void 0?t.color:null,this.lineCap_=t.lineCap,this.lineDash_=t.lineDash!==void 0?t.lineDash:null,this.lineDashOffset_=t.lineDashOffset,this.lineJoin_=t.lineJoin,this.miterLimit_=t.miterLimit,this.width_=t.width}clone(){const t=this.getColor();return new bt({color:Array.isArray(t)?t.slice():t||void 0,lineCap:this.getLineCap(),lineDash:this.getLineDash()?this.getLineDash().slice():void 0,lineDashOffset:this.getLineDashOffset(),lineJoin:this.getLineJoin(),miterLimit:this.getMiterLimit(),width:this.getWidth()})}getColor(){return this.color_}getLineCap(){return this.lineCap_}getLineDash(){return this.lineDash_}getLineDashOffset(){return this.lineDashOffset_}getLineJoin(){return this.lineJoin_}getMiterLimit(){return this.miterLimit_}getWidth(){return this.width_}setColor(t){this.color_=t}setLineCap(t){this.lineCap_=t}setLineDash(t){this.lineDash_=t}setLineDashOffset(t){this.lineDashOffset_=t}setLineJoin(t){this.lineJoin_=t}setMiterLimit(t){this.miterLimit_=t}setWidth(t){this.width_=t}}class St{constructor(t){t=t||{},this.geometry_=null,this.geometryFunction_=lc,t.geometry!==void 0&&this.setGeometry(t.geometry),this.fill_=t.fill!==void 0?t.fill:null,this.image_=t.image!==void 0?t.image:null,this.renderer_=t.renderer!==void 0?t.renderer:null,this.hitDetectionRenderer_=t.hitDetectionRenderer!==void 0?t.hitDetectionRenderer:null,this.stroke_=t.stroke!==void 0?t.stroke:null,this.text_=t.text!==void 0?t.text:null,this.zIndex_=t.zIndex}clone(){let t=this.getGeometry();return t&&typeof t=="object"&&(t=t.clone()),new St({geometry:t??void 0,fill:this.getFill()?this.getFill().clone():void 0,image:this.getImage()?this.getImage().clone():void 0,renderer:this.getRenderer()??void 0,stroke:this.getStroke()?this.getStroke().clone():void 0,text:this.getText()?this.getText().clone():void 0,zIndex:this.getZIndex()})}getRenderer(){return this.renderer_}setRenderer(t){this.renderer_=t}setHitDetectionRenderer(t){this.hitDetectionRenderer_=t}getHitDetectionRenderer(){return this.hitDetectionRenderer_}getGeometry(){return this.geometry_}getGeometryFunction(){return this.geometryFunction_}getFill(){return this.fill_}setFill(t){this.fill_=t}getImage(){return this.image_}setImage(t){this.image_=t}getStroke(){return this.stroke_}setStroke(t){this.stroke_=t}getText(){return this.text_}setText(t){this.text_=t}getZIndex(){return this.zIndex_}setGeometry(t){typeof t=="function"?this.geometryFunction_=t:typeof t=="string"?this.geometryFunction_=function(e){return e.get(t)}:t?t!==void 0&&(this.geometryFunction_=function(){return t}):this.geometryFunction_=lc,this.geometry_=t}setZIndex(t){this.zIndex_=t}}function M0(i){let t;if(typeof i=="function")t=i;else{let e;Array.isArray(i)?e=i:(lt(typeof i.getZIndex=="function","Expected an `Style` or an array of `Style`"),e=[i]),t=function(){return e}}return t}let yo=null;function ou(i,t){if(!yo){const e=new Tt({color:"rgba(255,255,255,0.4)"}),n=new bt({color:"#3399CC",width:1.25});yo=[new St({image:new en({fill:e,stroke:n,radius:5}),fill:e,stroke:n})]}return yo}function lc(i){return i.getGeometry()}const O0="#333";class nn{constructor(t){t=t||{},this.font_=t.font,this.rotation_=t.rotation,this.rotateWithView_=t.rotateWithView,this.keepUpright_=t.keepUpright,this.scale_=t.scale,this.scaleArray_=Xt(t.scale!==void 0?t.scale:1),this.text_=t.text,this.textAlign_=t.textAlign,this.justify_=t.justify,this.repeat_=t.repeat,this.textBaseline_=t.textBaseline,this.fill_=t.fill!==void 0?t.fill:new Tt({color:O0}),this.maxAngle_=t.maxAngle!==void 0?t.maxAngle:Math.PI/4,this.placement_=t.placement!==void 0?t.placement:"point",this.overflow_=!!t.overflow,this.stroke_=t.stroke!==void 0?t.stroke:null,this.offsetX_=t.offsetX!==void 0?t.offsetX:0,this.offsetY_=t.offsetY!==void 0?t.offsetY:0,this.backgroundFill_=t.backgroundFill?t.backgroundFill:null,this.backgroundStroke_=t.backgroundStroke?t.backgroundStroke:null,this.padding_=t.padding===void 0?null:t.padding,this.declutterMode_=t.declutterMode}clone(){const t=this.getScale();return new nn({font:this.getFont(),placement:this.getPlacement(),repeat:this.getRepeat(),maxAngle:this.getMaxAngle(),overflow:this.getOverflow(),rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),keepUpright:this.getKeepUpright(),scale:Array.isArray(t)?t.slice():t,text:this.getText(),textAlign:this.getTextAlign(),justify:this.getJustify(),textBaseline:this.getTextBaseline(),fill:this.getFill()instanceof Tt?this.getFill().clone():this.getFill(),stroke:this.getStroke()?this.getStroke().clone():void 0,offsetX:this.getOffsetX(),offsetY:this.getOffsetY(),backgroundFill:this.getBackgroundFill()?this.getBackgroundFill().clone():void 0,backgroundStroke:this.getBackgroundStroke()?this.getBackgroundStroke().clone():void 0,padding:this.getPadding()||void 0,declutterMode:this.getDeclutterMode()})}getOverflow(){return this.overflow_}getFont(){return this.font_}getMaxAngle(){return this.maxAngle_}getPlacement(){return this.placement_}getRepeat(){return this.repeat_}getOffsetX(){return this.offsetX_}getOffsetY(){return this.offsetY_}getFill(){return this.fill_}getRotateWithView(){return this.rotateWithView_}getKeepUpright(){return this.keepUpright_}getRotation(){return this.rotation_}getScale(){return this.scale_}getScaleArray(){return this.scaleArray_}getStroke(){return this.stroke_}getText(){return this.text_}getTextAlign(){return this.textAlign_}getJustify(){return this.justify_}getTextBaseline(){return this.textBaseline_}getBackgroundFill(){return this.backgroundFill_}getBackgroundStroke(){return this.backgroundStroke_}getPadding(){return this.padding_}getDeclutterMode(){return this.declutterMode_}setOverflow(t){this.overflow_=t}setFont(t){this.font_=t}setMaxAngle(t){this.maxAngle_=t}setOffsetX(t){this.offsetX_=t}setOffsetY(t){this.offsetY_=t}setPlacement(t){this.placement_=t}setRepeat(t){this.repeat_=t}setRotateWithView(t){this.rotateWithView_=t}setKeepUpright(t){this.keepUpright_=t}setFill(t){this.fill_=t}setRotation(t){this.rotation_=t}setScale(t){this.scale_=t,this.scaleArray_=Xt(t!==void 0?t:1)}setStroke(t){this.stroke_=t}setText(t){this.text_=t}setTextAlign(t){this.textAlign_=t}setJustify(t){this.justify_=t}setTextBaseline(t){this.textBaseline_=t}setBackgroundFill(t){this.backgroundFill_=t}setBackgroundStroke(t){this.backgroundStroke_=t}setPadding(t){this.padding_=t}}class F0 extends eu{constructor(t,e,n,r,s,o,a){super(),this.context_=t,this.pixelRatio_=e,this.extent_=n,this.transform_=r,this.transformRotation_=r?sr(Math.atan2(r[1],r[0]),10):0,this.viewRotation_=s,this.squaredTolerance_=o,this.userTransform_=a,this.contextFillState_=null,this.contextStrokeState_=null,this.contextTextState_=null,this.fillState_=null,this.strokeState_=null,this.image_=null,this.imageAnchorX_=0,this.imageAnchorY_=0,this.imageHeight_=0,this.imageOpacity_=0,this.imageOriginX_=0,this.imageOriginY_=0,this.imageRotateWithView_=!1,this.imageRotation_=0,this.imageScale_=[0,0],this.imageWidth_=0,this.text_="",this.textOffsetX_=0,this.textOffsetY_=0,this.textRotateWithView_=!1,this.textRotation_=0,this.textScale_=[0,0],this.textFillState_=null,this.textStrokeState_=null,this.textState_=null,this.pixelCoordinates_=[],this.tmpLocalTransform_=Pe()}drawImages_(t,e,n,r){if(!this.image_)return;const s=Ke(t,e,n,r,this.transform_,this.pixelCoordinates_),o=this.context_,a=this.tmpLocalTransform_,l=o.globalAlpha;this.imageOpacity_!=1&&(o.globalAlpha=l*this.imageOpacity_);let h=this.imageRotation_;this.transformRotation_===0&&(h-=this.viewRotation_),this.imageRotateWithView_&&(h+=this.viewRotation_);for(let c=0,u=s.length;c<u;c+=2){const f=s[c]-this.imageAnchorX_,g=s[c+1]-this.imageAnchorY_;if(h!==0||this.imageScale_[0]!=1||this.imageScale_[1]!=1){const d=f+this.imageAnchorX_,m=g+this.imageAnchorY_;Ie(a,d,m,1,1,h,-d,-m),o.save(),o.transform.apply(o,a),o.translate(d,m),o.scale(this.imageScale_[0],this.imageScale_[1]),o.drawImage(this.image_,this.imageOriginX_,this.imageOriginY_,this.imageWidth_,this.imageHeight_,-this.imageAnchorX_,-this.imageAnchorY_,this.imageWidth_,this.imageHeight_),o.restore()}else o.drawImage(this.image_,this.imageOriginX_,this.imageOriginY_,this.imageWidth_,this.imageHeight_,f,g,this.imageWidth_,this.imageHeight_)}this.imageOpacity_!=1&&(o.globalAlpha=l)}drawText_(t,e,n,r){if(!this.textState_||this.text_==="")return;this.textFillState_&&this.setContextFillState_(this.textFillState_),this.textStrokeState_&&this.setContextStrokeState_(this.textStrokeState_),this.setContextTextState_(this.textState_);const s=Ke(t,e,n,r,this.transform_,this.pixelCoordinates_),o=this.context_;let a=this.textRotation_;for(this.transformRotation_===0&&(a-=this.viewRotation_),this.textRotateWithView_&&(a+=this.viewRotation_);e<n;e+=r){const l=s[e]+this.textOffsetX_,h=s[e+1]+this.textOffsetY_;a!==0||this.textScale_[0]!=1||this.textScale_[1]!=1?(o.save(),o.translate(l-this.textOffsetX_,h-this.textOffsetY_),o.rotate(a),o.translate(this.textOffsetX_,this.textOffsetY_),o.scale(this.textScale_[0],this.textScale_[1]),this.textStrokeState_&&o.strokeText(this.text_,0,0),this.textFillState_&&o.fillText(this.text_,0,0),o.restore()):(this.textStrokeState_&&o.strokeText(this.text_,l,h),this.textFillState_&&o.fillText(this.text_,l,h))}}moveToLineTo_(t,e,n,r,s){const o=this.context_,a=Ke(t,e,n,r,this.transform_,this.pixelCoordinates_);o.moveTo(a[0],a[1]);let l=a.length;s&&(l-=2);for(let h=2;h<l;h+=2)o.lineTo(a[h],a[h+1]);return s&&o.closePath(),n}drawRings_(t,e,n,r){for(let s=0,o=n.length;s<o;++s)e=this.moveToLineTo_(t,e,n[s],r,!0);return e}drawCircle(t){if(this.squaredTolerance_&&(t=t.simplifyTransformed(this.squaredTolerance_,this.userTransform_)),!!Dt(this.extent_,t.getExtent())){if(this.fillState_||this.strokeState_){this.fillState_&&this.setContextFillState_(this.fillState_),this.strokeState_&&this.setContextStrokeState_(this.strokeState_);const e=td(t,this.transform_,this.pixelCoordinates_),n=e[2]-e[0],r=e[3]-e[1],s=Math.sqrt(n*n+r*r),o=this.context_;o.beginPath(),o.arc(e[0],e[1],s,0,2*Math.PI),this.fillState_&&o.fill(),this.strokeState_&&o.stroke()}this.text_!==""&&this.drawText_(t.getCenter(),0,2,2)}}setStyle(t){this.setFillStrokeStyle(t.getFill(),t.getStroke()),this.setImageStyle(t.getImage()),this.setTextStyle(t.getText())}setTransform(t){this.transform_=t}drawGeometry(t){switch(t.getType()){case"Point":this.drawPoint(t);break;case"LineString":this.drawLineString(t);break;case"Polygon":this.drawPolygon(t);break;case"MultiPoint":this.drawMultiPoint(t);break;case"MultiLineString":this.drawMultiLineString(t);break;case"MultiPolygon":this.drawMultiPolygon(t);break;case"GeometryCollection":this.drawGeometryCollection(t);break;case"Circle":this.drawCircle(t);break}}drawFeature(t,e){const n=e.getGeometryFunction()(t);n&&(this.setStyle(e),this.drawGeometry(n))}drawGeometryCollection(t){const e=t.getGeometriesArray();for(let n=0,r=e.length;n<r;++n)this.drawGeometry(e[n])}drawPoint(t){this.squaredTolerance_&&(t=t.simplifyTransformed(this.squaredTolerance_,this.userTransform_));const e=t.getFlatCoordinates(),n=t.getStride();this.image_&&this.drawImages_(e,0,e.length,n),this.text_!==""&&this.drawText_(e,0,e.length,n)}drawMultiPoint(t){this.squaredTolerance_&&(t=t.simplifyTransformed(this.squaredTolerance_,this.userTransform_));const e=t.getFlatCoordinates(),n=t.getStride();this.image_&&this.drawImages_(e,0,e.length,n),this.text_!==""&&this.drawText_(e,0,e.length,n)}drawLineString(t){if(this.squaredTolerance_&&(t=t.simplifyTransformed(this.squaredTolerance_,this.userTransform_)),!!Dt(this.extent_,t.getExtent())){if(this.strokeState_){this.setContextStrokeState_(this.strokeState_);const e=this.context_,n=t.getFlatCoordinates();e.beginPath(),this.moveToLineTo_(n,0,n.length,t.getStride(),!1),e.stroke()}if(this.text_!==""){const e=t.getFlatMidpoint();this.drawText_(e,0,2,2)}}}drawMultiLineString(t){this.squaredTolerance_&&(t=t.simplifyTransformed(this.squaredTolerance_,this.userTransform_));const e=t.getExtent();if(Dt(this.extent_,e)){if(this.strokeState_){this.setContextStrokeState_(this.strokeState_);const n=this.context_,r=t.getFlatCoordinates();let s=0;const o=t.getEnds(),a=t.getStride();n.beginPath();for(let l=0,h=o.length;l<h;++l)s=this.moveToLineTo_(r,s,o[l],a,!1);n.stroke()}if(this.text_!==""){const n=t.getFlatMidpoints();this.drawText_(n,0,n.length,2)}}}drawPolygon(t){if(this.squaredTolerance_&&(t=t.simplifyTransformed(this.squaredTolerance_,this.userTransform_)),!!Dt(this.extent_,t.getExtent())){if(this.strokeState_||this.fillState_){this.fillState_&&this.setContextFillState_(this.fillState_),this.strokeState_&&this.setContextStrokeState_(this.strokeState_);const e=this.context_;e.beginPath(),this.drawRings_(t.getOrientedFlatCoordinates(),0,t.getEnds(),t.getStride()),this.fillState_&&e.fill(),this.strokeState_&&e.stroke()}if(this.text_!==""){const e=t.getFlatInteriorPoint();this.drawText_(e,0,2,2)}}}drawMultiPolygon(t){if(this.squaredTolerance_&&(t=t.simplifyTransformed(this.squaredTolerance_,this.userTransform_)),!!Dt(this.extent_,t.getExtent())){if(this.strokeState_||this.fillState_){this.fillState_&&this.setContextFillState_(this.fillState_),this.strokeState_&&this.setContextStrokeState_(this.strokeState_);const e=this.context_,n=t.getOrientedFlatCoordinates();let r=0;const s=t.getEndss(),o=t.getStride();e.beginPath();for(let a=0,l=s.length;a<l;++a){const h=s[a];r=this.drawRings_(n,r,h,o)}this.fillState_&&e.fill(),this.strokeState_&&e.stroke()}if(this.text_!==""){const e=t.getFlatInteriorPoints();this.drawText_(e,0,e.length,2)}}}setContextFillState_(t){const e=this.context_,n=this.contextFillState_;n?n.fillStyle!=t.fillStyle&&(n.fillStyle=t.fillStyle,e.fillStyle=t.fillStyle):(e.fillStyle=t.fillStyle,this.contextFillState_={fillStyle:t.fillStyle})}setContextStrokeState_(t){const e=this.context_,n=this.contextStrokeState_;n?(n.lineCap!=t.lineCap&&(n.lineCap=t.lineCap,e.lineCap=t.lineCap),yi(n.lineDash,t.lineDash)||e.setLineDash(n.lineDash=t.lineDash),n.lineDashOffset!=t.lineDashOffset&&(n.lineDashOffset=t.lineDashOffset,e.lineDashOffset=t.lineDashOffset),n.lineJoin!=t.lineJoin&&(n.lineJoin=t.lineJoin,e.lineJoin=t.lineJoin),n.lineWidth!=t.lineWidth&&(n.lineWidth=t.lineWidth,e.lineWidth=t.lineWidth),n.miterLimit!=t.miterLimit&&(n.miterLimit=t.miterLimit,e.miterLimit=t.miterLimit),n.strokeStyle!=t.strokeStyle&&(n.strokeStyle=t.strokeStyle,e.strokeStyle=t.strokeStyle)):(e.lineCap=t.lineCap,e.setLineDash(t.lineDash),e.lineDashOffset=t.lineDashOffset,e.lineJoin=t.lineJoin,e.lineWidth=t.lineWidth,e.miterLimit=t.miterLimit,e.strokeStyle=t.strokeStyle,this.contextStrokeState_={lineCap:t.lineCap,lineDash:t.lineDash,lineDashOffset:t.lineDashOffset,lineJoin:t.lineJoin,lineWidth:t.lineWidth,miterLimit:t.miterLimit,strokeStyle:t.strokeStyle})}setContextTextState_(t){const e=this.context_,n=this.contextTextState_,r=t.textAlign?t.textAlign:$i;n?(n.font!=t.font&&(n.font=t.font,e.font=t.font),n.textAlign!=r&&(n.textAlign=r,e.textAlign=r),n.textBaseline!=t.textBaseline&&(n.textBaseline=t.textBaseline,e.textBaseline=t.textBaseline)):(e.font=t.font,e.textAlign=r,e.textBaseline=t.textBaseline,this.contextTextState_={font:t.font,textAlign:r,textBaseline:t.textBaseline})}setFillStrokeStyle(t,e){if(!t)this.fillState_=null;else{const n=t.getColor();this.fillState_={fillStyle:ge(n||Ft)}}if(!e)this.strokeState_=null;else{const n=e.getColor(),r=e.getLineCap(),s=e.getLineDash(),o=e.getLineDashOffset(),a=e.getLineJoin(),l=e.getWidth(),h=e.getMiterLimit(),c=s||_e;this.strokeState_={lineCap:r!==void 0?r:gi,lineDash:this.pixelRatio_===1?c:c.map(u=>u*this.pixelRatio_),lineDashOffset:(o||Le)*this.pixelRatio_,lineJoin:a!==void 0?a:mi,lineWidth:(l!==void 0?l:tr)*this.pixelRatio_,miterLimit:h!==void 0?h:Ji,strokeStyle:ge(n||Ki)}}}setImageStyle(t){let e;if(!t||!(e=t.getSize())){this.image_=null;return}const n=t.getPixelRatio(this.pixelRatio_),r=t.getAnchor(),s=t.getOrigin();this.image_=t.getImage(this.pixelRatio_),this.imageAnchorX_=r[0]*n,this.imageAnchorY_=r[1]*n,this.imageHeight_=e[1]*n,this.imageOpacity_=t.getOpacity(),this.imageOriginX_=s[0],this.imageOriginY_=s[1],this.imageRotateWithView_=t.getRotateWithView(),this.imageRotation_=t.getRotation();const o=t.getScaleArray();this.imageScale_=[o[0]*this.pixelRatio_/n,o[1]*this.pixelRatio_/n],this.imageWidth_=e[0]*n}setTextStyle(t){if(!t)this.text_="";else{const e=t.getFill();if(!e)this.textFillState_=null;else{const g=e.getColor();this.textFillState_={fillStyle:ge(g||Ft)}}const n=t.getStroke();if(!n)this.textStrokeState_=null;else{const g=n.getColor(),d=n.getLineCap(),m=n.getLineDash(),p=n.getLineDashOffset(),y=n.getLineJoin(),w=n.getWidth(),A=n.getMiterLimit();this.textStrokeState_={lineCap:d!==void 0?d:gi,lineDash:m||_e,lineDashOffset:p||Le,lineJoin:y!==void 0?y:mi,lineWidth:w!==void 0?w:tr,miterLimit:A!==void 0?A:Ji,strokeStyle:ge(g||Ki)}}const r=t.getFont(),s=t.getOffsetX(),o=t.getOffsetY(),a=t.getRotateWithView(),l=t.getRotation(),h=t.getScaleArray(),c=t.getText(),u=t.getTextAlign(),f=t.getTextBaseline();this.textState_={font:r!==void 0?r:nu,textAlign:u!==void 0?u:$i,textBaseline:f!==void 0?f:cs},this.text_=c!==void 0?Array.isArray(c)?c.reduce((g,d,m)=>g+=m%2?" ":d,""):c:"",this.textOffsetX_=s!==void 0?this.pixelRatio_*s:0,this.textOffsetY_=o!==void 0?this.pixelRatio_*o:0,this.textRotateWithView_=a!==void 0?a:!1,this.textRotation_=l!==void 0?l:0,this.textScale_=[this.pixelRatio_*h[0],this.pixelRatio_*h[1]]}}}const ue=.5;function N0(i,t,e,n,r,s,o,a,l){const h=r,c=i[0]*ue,u=i[1]*ue,f=xt(c,u);f.imageSmoothingEnabled=!1;const g=f.canvas,d=new F0(f,ue,r,null,o,a,null),m=e.length,p=Math.floor((256*256*256-1)/m),y={};for(let A=1;A<=m;++A){const x=e[A-1],C=x.getStyleFunction()||n;if(!C)continue;let v=C(x,s);if(!v)continue;Array.isArray(v)||(v=[v]);const T=(A*p).toString(16).padStart(7,"#00000");for(let b=0,R=v.length;b<R;++b){const _=v[b],M=_.getGeometryFunction()(x);if(!M||!Dt(h,M.getExtent()))continue;const D=_.clone(),I=D.getFill();I&&I.setColor(T);const N=D.getStroke();N&&(N.setColor(T),N.setLineDash(null)),D.setText(void 0);const O=_.getImage();if(O){const k=O.getImageSize();if(!k)continue;const z=xt(k[0],k[1],void 0,{alpha:!1}),L=z.canvas;z.fillStyle=T,z.fillRect(0,0,L.width,L.height),D.setImage(new Xs({img:L,anchor:O.getAnchor(),anchorXUnits:"pixels",anchorYUnits:"pixels",offset:O.getOrigin(),opacity:1,size:O.getSize(),scale:O.getScale(),rotation:O.getRotation(),rotateWithView:O.getRotateWithView()}))}const B=D.getZIndex()||0;let F=y[B];F||(F={},y[B]=F,F.Polygon=[],F.Circle=[],F.LineString=[],F.Point=[]);const X=M.getType();if(X==="GeometryCollection"){const k=M.getGeometriesArrayRecursive();for(let z=0,L=k.length;z<L;++z){const V=k[z];F[V.getType().replace("Multi","")].push(V,D)}}else F[X.replace("Multi","")].push(M,D)}}const w=Object.keys(y).map(Number).sort(Re);for(let A=0,x=w.length;A<x;++A){const C=y[w[A]];for(const v in C){const E=C[v];for(let T=0,b=E.length;T<b;T+=2){d.setStyle(E[T+1]);for(let R=0,_=t.length;R<_;++R)d.setTransform(t[R]),d.drawGeometry(E[T])}}}return f.getImageData(0,0,g.width,g.height)}function B0(i,t,e){const n=[];if(e){const r=Math.floor(Math.round(i[0])*ue),s=Math.floor(Math.round(i[1])*ue),o=(ft(r,0,e.width-1)+ft(s,0,e.height-1)*e.width)*4,a=e.data[o],l=e.data[o+1],c=e.data[o+2]+256*(l+256*a),u=Math.floor((256*256*256-1)/t.length);c&&c%u===0&&n.push(t[c/u-1])}return n}const X0=.5,au={Point:V0,LineString:W0,Polygon:q0,MultiPoint:U0,MultiLineString:j0,MultiPolygon:Y0,GeometryCollection:z0,Circle:k0};function G0(i,t){return parseInt(ot(i),10)-parseInt(ot(t),10)}function cc(i,t){const e=lu(i,t);return e*e}function lu(i,t){return X0*i/t}function k0(i,t,e,n,r){const s=e.getFill(),o=e.getStroke();if(s||o){const l=i.getBuilder(e.getZIndex(),"Circle");l.setFillStrokeStyle(s,o),l.drawCircle(t,n,r)}const a=e.getText();if(a&&a.getText()){const l=i.getBuilder(e.getZIndex(),"Text");l.setTextStyle(a),l.drawText(t,n)}}function hc(i,t,e,n,r,s,o,a){const l=[],h=e.getImage();if(h){let f=!0;const g=h.getImageState();g==G.LOADED||g==G.ERROR?f=!1:g==G.IDLE&&h.load(),f&&l.push(h.ready())}const c=e.getFill();c&&c.loading()&&l.push(c.ready());const u=l.length>0;return u&&Promise.all(l).then(()=>r(null)),H0(i,t,e,n,s,o,a),u}function H0(i,t,e,n,r,s,o){const a=e.getGeometryFunction()(t);if(!a)return;const l=a.simplifyTransformed(n,r);if(e.getRenderer())cu(i,l,e,t,o);else{const c=au[l.getType()];c(i,l,e,t,o,s)}}function cu(i,t,e,n,r){if(t.getType()=="GeometryCollection"){const o=t.getGeometries();for(let a=0,l=o.length;a<l;++a)cu(i,o[a],e,n,r);return}i.getBuilder(e.getZIndex(),"Default").drawCustom(t,n,e.getRenderer(),e.getHitDetectionRenderer(),r)}function z0(i,t,e,n,r,s){const o=t.getGeometriesArray();let a,l;for(a=0,l=o.length;a<l;++a){const h=au[o[a].getType()];h(i,o[a],e,n,r,s)}}function W0(i,t,e,n,r){const s=e.getStroke();if(s){const a=i.getBuilder(e.getZIndex(),"LineString");a.setFillStrokeStyle(null,s),a.drawLineString(t,n,r)}const o=e.getText();if(o&&o.getText()){const a=i.getBuilder(e.getZIndex(),"Text");a.setTextStyle(o),a.drawText(t,n,r)}}function j0(i,t,e,n,r){const s=e.getStroke();if(s){const a=i.getBuilder(e.getZIndex(),"LineString");a.setFillStrokeStyle(null,s),a.drawMultiLineString(t,n,r)}const o=e.getText();if(o&&o.getText()){const a=i.getBuilder(e.getZIndex(),"Text");a.setTextStyle(o),a.drawText(t,n,r)}}function Y0(i,t,e,n,r){const s=e.getFill(),o=e.getStroke();if(o||s){const l=i.getBuilder(e.getZIndex(),"Polygon");l.setFillStrokeStyle(s,o),l.drawMultiPolygon(t,n,r)}const a=e.getText();if(a&&a.getText()){const l=i.getBuilder(e.getZIndex(),"Text");l.setTextStyle(a),l.drawText(t,n,r)}}function V0(i,t,e,n,r,s){const o=e.getImage(),a=e.getText(),l=a&&a.getText(),h=s&&o&&l?{}:void 0;if(o){if(o.getImageState()!=G.LOADED)return;const c=i.getBuilder(e.getZIndex(),"Image");c.setImageStyle(o,h),c.drawPoint(t,n,r)}if(l){const c=i.getBuilder(e.getZIndex(),"Text");c.setTextStyle(a,h),c.drawText(t,n,r)}}function U0(i,t,e,n,r,s){const o=e.getImage(),a=o&&o.getOpacity()!==0,l=e.getText(),h=l&&l.getText(),c=s&&a&&h?{}:void 0;if(a){if(o.getImageState()!=G.LOADED)return;const u=i.getBuilder(e.getZIndex(),"Image");u.setImageStyle(o,c),u.drawMultiPoint(t,n,r)}if(h){const u=i.getBuilder(e.getZIndex(),"Text");u.setTextStyle(l,c),u.drawText(t,n,r)}}function q0(i,t,e,n,r){const s=e.getFill(),o=e.getStroke();if(s||o){const l=i.getBuilder(e.getZIndex(),"Polygon");l.setFillStrokeStyle(s,o),l.drawPolygon(t,n,r)}const a=e.getText();if(a&&a.getText()){const l=i.getBuilder(e.getZIndex(),"Text");l.setTextStyle(a),l.drawText(t,n,r)}}class Q0 extends Ta{constructor(t){super(t),this.boundHandleStyleImageChange_=this.handleStyleImageChange_.bind(this),this.animatingOrInteracting_,this.hitDetectionImageData_=null,this.clipped_=!1,this.renderedFeatures_=null,this.renderedRevision_=-1,this.renderedResolution_=NaN,this.renderedExtent_=qt(),this.wrappedRenderedExtent_=qt(),this.renderedRotation_,this.renderedCenter_=null,this.renderedProjection_=null,this.renderedPixelRatio_=1,this.renderedRenderOrder_=null,this.renderedFrameDeclutter_,this.replayGroup_=null,this.replayGroupChanged=!0,this.clipping=!0,this.targetContext_=null,this.opacity_=1}renderWorlds(t,e,n){const r=e.extent,s=e.viewState,o=s.center,a=s.resolution,l=s.projection,h=s.rotation,c=l.getExtent(),u=this.getLayer().getSource(),f=this.getLayer().getDeclutter(),g=e.pixelRatio,d=e.viewHints,m=!(d[Ot.ANIMATING]||d[Ot.INTERACTING]),p=this.context,y=Math.round(et(r)/a*g),w=Math.round(pt(r)/a*g),A=u.getWrapX()&&l.canWrapX(),x=A?et(c):null,C=A?Math.ceil((r[2]-c[2])/x)+1:1;let v=A?Math.floor((r[0]-c[0])/x):0;do{let E=this.getRenderTransform(o,a,0,g,y,w,v*x);e.declutter&&(E=E.slice(0)),t.execute(p,[p.canvas.width,p.canvas.height],E,h,m,n===void 0?un:n?su:L0,n?f&&e.declutter[f]:void 0)}while(++v<C)}setDrawContext_(){this.opacity_!==1&&(this.targetContext_=this.context,this.context=xt(this.context.canvas.width,this.context.canvas.height,bl))}resetDrawContext_(){if(this.opacity_!==1&&this.targetContext_){const t=this.targetContext_.globalAlpha;this.targetContext_.globalAlpha=this.opacity_,this.targetContext_.drawImage(this.context.canvas,0,0),this.targetContext_.globalAlpha=t,Ss(this.context),bl.push(this.context.canvas),this.context=this.targetContext_,this.targetContext_=null}}renderDeclutter(t){!this.replayGroup_||!this.getLayer().getDeclutter()||this.renderWorlds(this.replayGroup_,t,!0)}renderDeferredInternal(t){this.replayGroup_&&(this.replayGroup_.renderDeferred(),this.clipped_&&this.context.restore(),this.resetDrawContext_())}renderFrame(t,e){const n=t.layerStatesArray[t.layerIndex];this.opacity_=n.opacity;const r=t.viewState;this.prepareContainer(t,e);const s=this.context,o=this.replayGroup_;let a=o&&!o.isEmpty();if(!a&&!(this.getLayer().hasListener(gn.PRERENDER)||this.getLayer().hasListener(gn.POSTRENDER)))return this.container;if(this.setDrawContext_(),this.preRender(s,t),r.projection,this.clipped_=!1,a&&n.extent&&this.clipping){const l=fe(n.extent);a=Dt(l,t.extent),this.clipped_=a&&!Se(l,t.extent),this.clipped_&&this.clipUnrotated(s,t,l)}return a&&this.renderWorlds(o,t,this.getLayer().getDeclutter()?!1:void 0),!t.declutter&&this.clipped_&&s.restore(),this.postRender(s,t),this.renderedRotation_!==r.rotation&&(this.renderedRotation_=r.rotation,this.hitDetectionImageData_=null),t.declutter||this.resetDrawContext_(),this.container}getFeatures(t){return new Promise(e=>{if(this.frameState&&!this.hitDetectionImageData_&&!this.animatingOrInteracting_){const n=this.frameState.size.slice(),r=this.renderedCenter_,s=this.renderedResolution_,o=this.renderedRotation_,a=this.renderedProjection_,l=this.wrappedRenderedExtent_,h=this.getLayer(),c=[],u=n[0]*ue,f=n[1]*ue;c.push(this.getRenderTransform(r,s,o,ue,u,f,0).slice());const g=h.getSource(),d=a.getExtent();if(g.getWrapX()&&a.canWrapX()&&!Se(d,l)){let m=l[0];const p=et(d);let y=0,w;for(;m<d[0];)--y,w=p*y,c.push(this.getRenderTransform(r,s,o,ue,u,f,w).slice()),m+=p;for(y=0,m=l[2];m>d[2];)++y,w=p*y,c.push(this.getRenderTransform(r,s,o,ue,u,f,w).slice()),m-=p}this.hitDetectionImageData_=N0(n,c,this.renderedFeatures_,h.getStyleFunction(),l,s,o,cc(s,this.renderedPixelRatio_))}e(B0(t,this.renderedFeatures_,this.hitDetectionImageData_))})}forEachFeatureAtCoordinate(t,e,n,r,s){if(!this.replayGroup_)return;const o=e.viewState.resolution,a=e.viewState.rotation,l=this.getLayer(),h={},c=function(f,g,d){const m=ot(f),p=h[m];if(p){if(p!==!0&&d<p.distanceSq){if(d===0)return h[m]=!0,s.splice(s.lastIndexOf(p),1),r(f,l,g);p.geometry=g,p.distanceSq=d}}else{if(d===0)return h[m]=!0,r(f,l,g);s.push(h[m]={feature:f,layer:l,geometry:g,distanceSq:d,callback:r})}},u=this.getLayer().getDeclutter();return this.replayGroup_.forEachFeatureAtCoordinate(t,o,a,n,c,u?e.declutter?.[u]?.all().map(f=>f.value):null)}handleFontsChanged(){const t=this.getLayer();t.getVisible()&&this.replayGroup_&&t.changed()}handleStyleImageChange_(t){this.renderIfReadyAndVisible()}prepareFrame(t){const e=this.getLayer(),n=e.getSource();if(!n)return!1;const r=t.viewHints[Ot.ANIMATING],s=t.viewHints[Ot.INTERACTING],o=e.getUpdateWhileAnimating(),a=e.getUpdateWhileInteracting();if(this.ready&&!o&&r||!a&&s)return this.animatingOrInteracting_=!0,!0;this.animatingOrInteracting_=!1;const l=t.extent,h=t.viewState,c=h.projection,u=h.resolution,f=t.pixelRatio,g=e.getRevision(),d=e.getRenderBuffer();let m=e.getRenderOrder();m===void 0&&(m=G0);const p=h.center.slice(),y=ji(l,d*u),w=y.slice(),A=[y.slice()],x=c.getExtent();if(n.getWrapX()&&c.canWrapX()&&!Se(x,t.extent)){const I=et(x),N=Math.max(et(y)/2,I);y[0]=x[0]-N,y[2]=x[2]+N,uf(p,c);const O=Mc(A[0],c);O[0]<x[0]&&O[2]<x[2]?A.push([O[0]+I,O[1],O[2]+I,O[3]]):O[0]>x[0]&&O[2]>x[2]&&A.push([O[0]-I,O[1],O[2]-I,O[3]])}if(this.ready&&this.renderedResolution_==u&&this.renderedRevision_==g&&this.renderedRenderOrder_==m&&this.renderedFrameDeclutter_===!!t.declutter&&Se(this.wrappedRenderedExtent_,y))return yi(this.renderedExtent_,w)||(this.hitDetectionImageData_=null,this.renderedExtent_=w),this.renderedCenter_=p,this.replayGroupChanged=!1,!0;this.replayGroup_=null;const C=new T0(lu(u,f),y,u,f);let v;for(let I=0,N=A.length;I<N;++I)n.loadFeatures(A[I],u,c);const E=cc(u,f);let T=!0;const b=(I,N)=>{let O;const B=I.getStyleFunction()||e.getStyleFunction();if(B&&(O=B(I,u)),O){const F=this.renderFeature(I,E,O,C,v,this.getLayer().getDeclutter(),N);T=T&&!F}},R=Wc(y),_=n.getFeaturesInExtent(R);m&&_.sort(m);for(let I=0,N=_.length;I<N;++I)b(_[I],I);this.renderedFeatures_=_,this.ready=T;const M=C.finish(),D=new I0(y,u,f,n.getOverlaps(),M,e.getRenderBuffer(),!!t.declutter);return this.renderedResolution_=u,this.renderedRevision_=g,this.renderedRenderOrder_=m,this.renderedFrameDeclutter_=!!t.declutter,this.renderedExtent_=w,this.wrappedRenderedExtent_=y,this.renderedCenter_=p,this.renderedProjection_=c,this.renderedPixelRatio_=f,this.replayGroup_=D,this.hitDetectionImageData_=null,this.replayGroupChanged=!0,!0}renderFeature(t,e,n,r,s,o,a){if(!n)return!1;let l=!1;if(Array.isArray(n))for(let h=0,c=n.length;h<c;++h)l=hc(r,t,n[h],e,this.boundHandleStyleImageChange_,s,o,a)||l;else l=hc(r,t,n,e,this.boundHandleStyleImageChange_,s,o,a);return l}}let Hn=0;const It=1<<Hn++,tt=1<<Hn++,Nt=1<<Hn++,ie=1<<Hn++,On=1<<Hn++,Fi=1<<Hn++,Dr=Math.pow(2,Hn)-1,Wa={[It]:"boolean",[tt]:"number",[Nt]:"string",[ie]:"color",[On]:"number[]",[Fi]:"size"},Z0=Object.keys(Wa).map(Number).sort(Re);function J0(i){return i in Wa}function Ni(i){const t=[];for(const e of Z0)Bi(i,e)&&t.push(Wa[e]);return t.length===0?"untyped":t.length<3?t.join(" or "):t.slice(0,-1).join(", ")+", or "+t[t.length-1]}function Bi(i,t){return(i&t)===t}function We(i,t){return i===t}class At{constructor(t,e){if(!J0(t))throw new Error(`literal expressions must have a specific type, got ${Ni(t)}`);this.type=t,this.value=e}}class K0{constructor(t,e,...n){this.type=t,this.operator=e,this.args=n}}function hu(){return{variables:new Set,properties:new Set,featureId:!1,geometryType:!1,mapState:!1}}function Rt(i,t,e){switch(typeof i){case"boolean":{if(We(t,Nt))return new At(Nt,i?"true":"false");if(!Bi(t,It))throw new Error(`got a boolean, but expected ${Ni(t)}`);return new At(It,i)}case"number":{if(We(t,Fi))return new At(Fi,Xt(i));if(We(t,It))return new At(It,!!i);if(We(t,Nt))return new At(Nt,i.toString());if(!Bi(t,tt))throw new Error(`got a number, but expected ${Ni(t)}`);return new At(tt,i)}case"string":{if(We(t,ie))return new At(ie,va(i));if(We(t,It))return new At(It,!!i);if(!Bi(t,Nt))throw new Error(`got a string, but expected ${Ni(t)}`);return new At(Nt,i)}}if(!Array.isArray(i))throw new Error("expression must be an array or a primitive value");if(i.length===0)throw new Error("empty expression");if(typeof i[0]=="string")return cy(i,t,e);for(const n of i)if(typeof n!="number")throw new Error("expected an array of numbers");if(We(t,Fi)){if(i.length!==2)throw new Error(`expected an array of two values for a size, got ${i.length}`);return new At(Fi,i)}if(We(t,ie)){if(i.length===3)return new At(ie,[...i,1]);if(i.length===4)return new At(ie,i);throw new Error(`expected an array of 3 or 4 values for a color, got ${i.length}`)}if(!Bi(t,On))throw new Error(`got an array of numbers, but expected ${Ni(t)}`);return new At(On,i)}const P={Get:"get",Var:"var",Concat:"concat",GeometryType:"geometry-type",LineMetric:"line-metric",Any:"any",All:"all",Not:"!",Resolution:"resolution",Zoom:"zoom",Time:"time",Equal:"==",NotEqual:"!=",GreaterThan:">",GreaterThanOrEqualTo:">=",LessThan:"<",LessThanOrEqualTo:"<=",Multiply:"*",Divide:"/",Add:"+",Subtract:"-",Clamp:"clamp",Mod:"%",Pow:"^",Abs:"abs",Floor:"floor",Ceil:"ceil",Round:"round",Sin:"sin",Cos:"cos",Atan:"atan",Sqrt:"sqrt",Match:"match",Between:"between",Interpolate:"interpolate",Coalesce:"coalesce",Case:"case",In:"in",Number:"number",String:"string",Array:"array",Color:"color",Id:"id",Band:"band",Palette:"palette",ToString:"to-string",Has:"has"},$0={[P.Get]:j(J(1,1/0),uc),[P.Var]:j(J(1,1),ty),[P.Has]:j(J(1,1/0),uc),[P.Id]:j(ey,$n),[P.Concat]:j(J(2,1/0),nt(Nt)),[P.GeometryType]:j(ny,$n),[P.LineMetric]:j($n),[P.Resolution]:j(wo,$n),[P.Zoom]:j(wo,$n),[P.Time]:j(wo,$n),[P.Any]:j(J(2,1/0),nt(It)),[P.All]:j(J(2,1/0),nt(It)),[P.Not]:j(J(1,1),nt(It)),[P.Equal]:j(J(2,2),nt(Dr)),[P.NotEqual]:j(J(2,2),nt(Dr)),[P.GreaterThan]:j(J(2,2),nt(tt)),[P.GreaterThanOrEqualTo]:j(J(2,2),nt(tt)),[P.LessThan]:j(J(2,2),nt(tt)),[P.LessThanOrEqualTo]:j(J(2,2),nt(tt)),[P.Multiply]:j(J(2,1/0),fc),[P.Coalesce]:j(J(2,1/0),fc),[P.Divide]:j(J(2,2),nt(tt)),[P.Add]:j(J(2,1/0),nt(tt)),[P.Subtract]:j(J(2,2),nt(tt)),[P.Clamp]:j(J(3,3),nt(tt)),[P.Mod]:j(J(2,2),nt(tt)),[P.Pow]:j(J(2,2),nt(tt)),[P.Abs]:j(J(1,1),nt(tt)),[P.Floor]:j(J(1,1),nt(tt)),[P.Ceil]:j(J(1,1),nt(tt)),[P.Round]:j(J(1,1),nt(tt)),[P.Sin]:j(J(1,1),nt(tt)),[P.Cos]:j(J(1,1),nt(tt)),[P.Atan]:j(J(1,2),nt(tt)),[P.Sqrt]:j(J(1,1),nt(tt)),[P.Match]:j(J(4,1/0),dc,ry),[P.Between]:j(J(3,3),nt(tt)),[P.Interpolate]:j(J(6,1/0),dc,sy),[P.Case]:j(J(3,1/0),iy,oy),[P.In]:j(J(2,2),ay),[P.Number]:j(J(1,1/0),nt(Dr)),[P.String]:j(J(1,1/0),nt(Dr)),[P.Array]:j(J(1,1/0),nt(tt)),[P.Color]:j(J(1,4),nt(tt)),[P.Band]:j(J(1,3),nt(tt)),[P.Palette]:j(J(2,2),ly),[P.ToString]:j(J(1,1),nt(It|tt|Nt|ie))};function uc(i,t,e){const n=i.length-1,r=new Array(n);for(let s=0;s<n;++s){const o=i[s+1];switch(typeof o){case"number":{r[s]=new At(tt,o);break}case"string":{r[s]=new At(Nt,o);break}default:throw new Error(`expected a string key or numeric array index for a get operation, got ${o}`)}s===0&&e.properties.add(String(o))}return r}function ty(i,t,e){const n=i[1];if(typeof n!="string")throw new Error("expected a string argument for var operation");return e.variables.add(n),[new At(Nt,n)]}function ey(i,t,e){e.featureId=!0}function ny(i,t,e){e.geometryType=!0}function wo(i,t,e){e.mapState=!0}function $n(i,t,e){const n=i[0];if(i.length!==1)throw new Error(`expected no arguments for ${n} operation`);return[]}function J(i,t){return function(e,n,r){const s=e[0],o=e.length-1;if(i===t){if(o!==i){const a=i===1?"":"s";throw new Error(`expected ${i} argument${a} for ${s}, got ${o}`)}}else if(o<i||o>t){const a=t===1/0?`${i} or more`:`${i} to ${t}`;throw new Error(`expected ${a} arguments for ${s}, got ${o}`)}}}function fc(i,t,e){const n=i.length-1,r=new Array(n);for(let s=0;s<n;++s){const o=Rt(i[s+1],t,e);r[s]=o}return r}function nt(i){return function(t,e,n){const r=t.length-1,s=new Array(r);for(let o=0;o<r;++o){const a=Rt(t[o+1],i,n);s[o]=a}return s}}function iy(i,t,e){const n=i[0],r=i.length-1;if(r%2===0)throw new Error(`expected an odd number of arguments for ${n}, got ${r} instead`)}function dc(i,t,e){const n=i[0],r=i.length-1;if(r%2===1)throw new Error(`expected an even number of arguments for operation ${n}, got ${r} instead`)}function ry(i,t,e){const n=i.length-1,r=Nt|tt|It,s=Rt(i[1],r,e),o=Rt(i[i.length-1],t,e),a=new Array(n-2);for(let l=0;l<n-2;l+=2){try{const h=Rt(i[l+2],s.type,e);a[l]=h}catch(h){throw new Error(`failed to parse argument ${l+1} of match expression: ${h.message}`)}try{const h=Rt(i[l+3],o.type,e);a[l+1]=h}catch(h){throw new Error(`failed to parse argument ${l+2} of match expression: ${h.message}`)}}return[s,...a,o]}function sy(i,t,e){const n=i[1];let r;switch(n[0]){case"linear":r=1;break;case"exponential":const l=n[1];if(typeof l!="number"||l<=0)throw new Error(`expected a number base for exponential interpolation, got ${JSON.stringify(l)} instead`);r=l;break;default:throw new Error(`invalid interpolation type: ${JSON.stringify(n)}`)}const s=new At(tt,r);let o;try{o=Rt(i[2],tt,e)}catch(l){throw new Error(`failed to parse argument 1 in interpolate expression: ${l.message}`)}const a=new Array(i.length-3);for(let l=0;l<a.length;l+=2){try{const h=Rt(i[l+3],tt,e);a[l]=h}catch(h){throw new Error(`failed to parse argument ${l+2} for interpolate expression: ${h.message}`)}try{const h=Rt(i[l+4],t,e);a[l+1]=h}catch(h){throw new Error(`failed to parse argument ${l+3} for interpolate expression: ${h.message}`)}}return[s,o,...a]}function oy(i,t,e){const n=Rt(i[i.length-1],t,e),r=new Array(i.length-1);for(let s=0;s<r.length-1;s+=2){try{const o=Rt(i[s+1],It,e);r[s]=o}catch(o){throw new Error(`failed to parse argument ${s} of case expression: ${o.message}`)}try{const o=Rt(i[s+2],n.type,e);r[s+1]=o}catch(o){throw new Error(`failed to parse argument ${s+1} of case expression: ${o.message}`)}}return r[r.length-1]=n,r}function ay(i,t,e){let n=i[2];if(!Array.isArray(n))throw new Error('the second argument for the "in" operator must be an array');let r;if(typeof n[0]=="string"){if(n[0]!=="literal")throw new Error('for the "in" operator, a string array should be wrapped in a "literal" operator to disambiguate from expressions');if(!Array.isArray(n[1]))throw new Error('failed to parse "in" expression: the literal operator must be followed by an array');n=n[1],r=Nt}else r=tt;const s=new Array(n.length);for(let a=0;a<s.length;a++)try{const l=Rt(n[a],r,e);s[a]=l}catch(l){throw new Error(`failed to parse haystack item ${a} for "in" expression: ${l.message}`)}return[Rt(i[1],r,e),...s]}function ly(i,t,e){let n;try{n=Rt(i[1],tt,e)}catch(o){throw new Error(`failed to parse first argument in palette expression: ${o.message}`)}const r=i[2];if(!Array.isArray(r))throw new Error("the second argument of palette must be an array");const s=new Array(r.length);for(let o=0;o<s.length;o++){let a;try{a=Rt(r[o],ie,e)}catch(l){throw new Error(`failed to parse color at index ${o} in palette expression: ${l.message}`)}if(!(a instanceof At))throw new Error(`the palette color at index ${o} must be a literal value`);s[o]=a}return[n,...s]}function j(...i){return function(t,e,n){const r=t[0];let s;for(let o=0;o<i.length;o++){const a=i[o](t,e,n);if(o==i.length-1){if(!a)throw new Error("expected last argument validator to return the parsed args");s=a}}return new K0(e,r,...s)}}function cy(i,t,e){const n=i[0],r=$0[n];if(!r)throw new Error(`unknown operator: ${n}`);return r(i,t,e)}function uu(i){if(!i)return"";const t=i.getType();switch(t){case"Point":case"LineString":case"Polygon":return t;case"MultiPoint":case"MultiLineString":case"MultiPolygon":return t.substring(5);case"Circle":return"Polygon";case"GeometryCollection":return uu(i.getGeometries()[0]);default:return""}}function fu(){return{variables:{},properties:{},resolution:NaN,featureId:null,geometryType:""}}function Me(i,t,e){const n=Rt(i,t,e);return oe(n)}function oe(i,t){if(i instanceof At){if(i.type===ie&&typeof i.value=="string"){const n=va(i.value);return function(){return n}}return function(){return i.value}}const e=i.operator;switch(e){case P.Number:case P.String:case P.Coalesce:return hy(i);case P.Get:case P.Var:case P.Has:return uy(i);case P.Id:return n=>n.featureId;case P.GeometryType:return n=>n.geometryType;case P.Concat:{const n=i.args.map(r=>oe(r));return r=>"".concat(...n.map(s=>s(r).toString()))}case P.Resolution:return n=>n.resolution;case P.Any:case P.All:case P.Between:case P.In:case P.Not:return dy(i);case P.Equal:case P.NotEqual:case P.LessThan:case P.LessThanOrEqualTo:case P.GreaterThan:case P.GreaterThanOrEqualTo:return fy(i);case P.Multiply:case P.Divide:case P.Add:case P.Subtract:case P.Clamp:case P.Mod:case P.Pow:case P.Abs:case P.Floor:case P.Ceil:case P.Round:case P.Sin:case P.Cos:case P.Atan:case P.Sqrt:return gy(i);case P.Case:return my(i);case P.Match:return py(i);case P.Interpolate:return yy(i);case P.ToString:return wy(i);default:throw new Error(`Unsupported operator ${e}`)}}function hy(i,t){const e=i.operator,n=i.args.length,r=new Array(n);for(let s=0;s<n;++s)r[s]=oe(i.args[s]);switch(e){case P.Coalesce:return s=>{for(let o=0;o<n;++o){const a=r[o](s);if(typeof a<"u"&&a!==null)return a}throw new Error("Expected one of the values to be non-null")};case P.Number:case P.String:return s=>{for(let o=0;o<n;++o){const a=r[o](s);if(typeof a===e)return a}throw new Error(`Expected one of the values to be a ${e}`)};default:throw new Error(`Unsupported assertion operator ${e}`)}}function uy(i,t){const n=i.args[0].value;switch(i.operator){case P.Get:return r=>{const s=i.args;let o=r.properties[n];for(let a=1,l=s.length;a<l;++a){const c=s[a].value;o=o[c]}return o};case P.Var:return r=>r.variables[n];case P.Has:return r=>{const s=i.args;if(!(n in r.properties))return!1;let o=r.properties[n];for(let a=1,l=s.length;a<l;++a){const c=s[a].value;if(!o||!Object.hasOwn(o,c))return!1;o=o[c]}return!0};default:throw new Error(`Unsupported accessor operator ${i.operator}`)}}function fy(i,t){const e=i.operator,n=oe(i.args[0]),r=oe(i.args[1]);switch(e){case P.Equal:return s=>n(s)===r(s);case P.NotEqual:return s=>n(s)!==r(s);case P.LessThan:return s=>n(s)<r(s);case P.LessThanOrEqualTo:return s=>n(s)<=r(s);case P.GreaterThan:return s=>n(s)>r(s);case P.GreaterThanOrEqualTo:return s=>n(s)>=r(s);default:throw new Error(`Unsupported comparison operator ${e}`)}}function dy(i,t){const e=i.operator,n=i.args.length,r=new Array(n);for(let s=0;s<n;++s)r[s]=oe(i.args[s]);switch(e){case P.Any:return s=>{for(let o=0;o<n;++o)if(r[o](s))return!0;return!1};case P.All:return s=>{for(let o=0;o<n;++o)if(!r[o](s))return!1;return!0};case P.Between:return s=>{const o=r[0](s),a=r[1](s),l=r[2](s);return o>=a&&o<=l};case P.In:return s=>{const o=r[0](s);for(let a=1;a<n;++a)if(o===r[a](s))return!0;return!1};case P.Not:return s=>!r[0](s);default:throw new Error(`Unsupported logical operator ${e}`)}}function gy(i,t){const e=i.operator,n=i.args.length,r=new Array(n);for(let s=0;s<n;++s)r[s]=oe(i.args[s]);switch(e){case P.Multiply:return s=>{let o=1;for(let a=0;a<n;++a)o*=r[a](s);return o};case P.Divide:return s=>r[0](s)/r[1](s);case P.Add:return s=>{let o=0;for(let a=0;a<n;++a)o+=r[a](s);return o};case P.Subtract:return s=>r[0](s)-r[1](s);case P.Clamp:return s=>{const o=r[0](s),a=r[1](s);if(o<a)return a;const l=r[2](s);return o>l?l:o};case P.Mod:return s=>r[0](s)%r[1](s);case P.Pow:return s=>Math.pow(r[0](s),r[1](s));case P.Abs:return s=>Math.abs(r[0](s));case P.Floor:return s=>Math.floor(r[0](s));case P.Ceil:return s=>Math.ceil(r[0](s));case P.Round:return s=>Math.round(r[0](s));case P.Sin:return s=>Math.sin(r[0](s));case P.Cos:return s=>Math.cos(r[0](s));case P.Atan:return n===2?s=>Math.atan2(r[0](s),r[1](s)):s=>Math.atan(r[0](s));case P.Sqrt:return s=>Math.sqrt(r[0](s));default:throw new Error(`Unsupported numeric operator ${e}`)}}function my(i,t){const e=i.args.length,n=new Array(e);for(let r=0;r<e;++r)n[r]=oe(i.args[r]);return r=>{for(let s=0;s<e-1;s+=2)if(n[s](r))return n[s+1](r);return n[e-1](r)}}function py(i,t){const e=i.args.length,n=new Array(e);for(let r=0;r<e;++r)n[r]=oe(i.args[r]);return r=>{const s=n[0](r);for(let o=1;o<e-1;o+=2)if(s===n[o](r))return n[o+1](r);return n[e-1](r)}}function yy(i,t){const e=i.args.length,n=new Array(e);for(let r=0;r<e;++r)n[r]=oe(i.args[r]);return r=>{const s=n[0](r),o=n[1](r);let a,l;for(let h=2;h<e;h+=2){const c=n[h](r);let u=n[h+1](r);const f=Array.isArray(u);if(f&&(u=Ud(u)),c>=o)return h===2?u:f?Ay(s,o,a,l,c,u):Xi(s,o,a,l,c,u);a=c,l=u}return l}}function wy(i,t){const e=i.operator,n=i.args.length,r=new Array(n);for(let s=0;s<n;++s)r[s]=oe(i.args[s]);if(e===P.ToString)return s=>{const o=r[0](s);return i.args[0].type===ie?ba(o):o.toString()};throw new Error(`Unsupported convert operator ${e}`)}function Xi(i,t,e,n,r,s){const o=r-e;if(o===0)return n;const a=t-e,l=i===1?a/o:(Math.pow(i,a)-1)/(Math.pow(i,o)-1);return n+l*(s-n)}function Ay(i,t,e,n,r,s){if(r-e===0)return n;const a=vl(n),l=vl(s);let h=l[2]-a[2];h>180?h-=360:h<-180&&(h+=360);const c=[Xi(i,t,e,a[0],r,l[0]),Xi(i,t,e,a[1],r,l[1]),a[2]+Xi(i,t,e,0,r,h),Xi(i,t,e,n[3],r,s[3])];return qd(c)}function xy(i){return!0}function Cy(i){const t=hu(),e=Ey(i,t),n=fu();return function(r,s){if(n.properties=r.getPropertiesInternal(),n.resolution=s,t.featureId){const o=r.getId();o!==void 0?n.featureId=o:n.featureId=null}return t.geometryType&&(n.geometryType=uu(r.getGeometry())),e(n)}}function gc(i){const t=hu(),e=i.length,n=new Array(e);for(let o=0;o<e;++o)n[o]=jo(i[o],t);const r=fu(),s=new Array(e);return function(o,a){if(r.properties=o.getPropertiesInternal(),r.resolution=a,t.featureId){const h=o.getId();h!==void 0?r.featureId=h:r.featureId=null}let l=0;for(let h=0;h<e;++h){const c=n[h](r);c&&(s[l]=c,l+=1)}return s.length=l,s}}function Ey(i,t){const e=i.length,n=new Array(e);for(let r=0;r<e;++r){const s=i[r],o="filter"in s?Me(s.filter,It,t):xy;let a;if(Array.isArray(s.style)){const l=s.style.length;a=new Array(l);for(let h=0;h<l;++h)a[h]=jo(s.style[h],t)}else a=[jo(s.style,t)];n[r]={filter:o,styles:a}}return function(r){const s=[];let o=!1;for(let a=0;a<e;++a){const l=n[a].filter;if(l(r)&&!(i[a].else&&o)){o=!0;for(const h of n[a].styles){const c=h(r);c&&s.push(c)}}}return s}}function jo(i,t){const e=er(i,"",t),n=nr(i,"",t),r=vy(i,t),s=by(i,t),o=Bt(i,"z-index",t);if(!e&&!n&&!r&&!s&&!Sn(i))throw new Error("No fill, stroke, point, or text symbolizer properties in style: "+JSON.stringify(i));const a=new St;return function(l){let h=!0;if(e){const c=e(l);c&&(h=!1),a.setFill(c)}if(n){const c=n(l);c&&(h=!1),a.setStroke(c)}if(r){const c=r(l);c&&(h=!1),a.setText(c)}if(s){const c=s(l);c&&(h=!1),a.setImage(c)}return o&&a.setZIndex(o(l)),h?null:a}}function er(i,t,e){let n;if(t+"fill-pattern-src"in i)n=Py(i,t+"fill-",e);else{if(i[t+"fill-color"]==="none")return s=>null;n=ja(i,t+"fill-color",e)}if(!n)return null;const r=new Tt;return function(s){const o=n(s);return o===Ea?null:(r.setColor(o),r)}}function nr(i,t,e){const n=Bt(i,t+"stroke-width",e),r=ja(i,t+"stroke-color",e);if(!n&&!r)return null;const s=Te(i,t+"stroke-line-cap",e),o=Te(i,t+"stroke-line-join",e),a=du(i,t+"stroke-line-dash",e),l=Bt(i,t+"stroke-line-dash-offset",e),h=Bt(i,t+"stroke-miter-limit",e),c=new bt;return function(u){if(r){const f=r(u);if(f===Ea)return null;c.setColor(f)}if(n&&c.setWidth(n(u)),s){const f=s(u);if(f!=="butt"&&f!=="round"&&f!=="square")throw new Error("Expected butt, round, or square line cap");c.setLineCap(f)}if(o){const f=o(u);if(f!=="bevel"&&f!=="round"&&f!=="miter")throw new Error("Expected bevel, round, or miter line join");c.setLineJoin(f)}return a&&c.setLineDash(a(u)),l&&c.setLineDashOffset(l(u)),h&&c.setMiterLimit(h(u)),c}}function vy(i,t){const e="text-",n=Te(i,e+"value",t);if(!n)return null;const r=er(i,e,t),s=er(i,e+"background-",t),o=nr(i,e,t),a=nr(i,e+"background-",t),l=Te(i,e+"font",t),h=Bt(i,e+"max-angle",t),c=Bt(i,e+"offset-x",t),u=Bt(i,e+"offset-y",t),f=li(i,e+"overflow",t),g=Te(i,e+"placement",t),d=Bt(i,e+"repeat",t),m=Gs(i,e+"scale",t),p=li(i,e+"rotate-with-view",t),y=Bt(i,e+"rotation",t),w=Te(i,e+"align",t),A=Te(i,e+"justify",t),x=Te(i,e+"baseline",t),C=li(i,e+"keep-upright",t),v=du(i,e+"padding",t),E=ks(i,e+"declutter-mode"),T=new nn({declutterMode:E});return function(b){if(T.setText(n(b)),r&&T.setFill(r(b)),s&&T.setBackgroundFill(s(b)),o&&T.setStroke(o(b)),a&&T.setBackgroundStroke(a(b)),l&&T.setFont(l(b)),h&&T.setMaxAngle(h(b)),c&&T.setOffsetX(c(b)),u&&T.setOffsetY(u(b)),f&&T.setOverflow(f(b)),g){const R=g(b);if(R!=="point"&&R!=="line")throw new Error("Expected point or line for text-placement");T.setPlacement(R)}if(d&&T.setRepeat(d(b)),m&&T.setScale(m(b)),p&&T.setRotateWithView(p(b)),y&&T.setRotation(y(b)),w){const R=w(b);if(R!=="left"&&R!=="center"&&R!=="right"&&R!=="end"&&R!=="start")throw new Error("Expected left, right, center, start, or end for text-align");T.setTextAlign(R)}if(A){const R=A(b);if(R!=="left"&&R!=="right"&&R!=="center")throw new Error("Expected left, right, or center for text-justify");T.setJustify(R)}if(x){const R=x(b);if(R!=="bottom"&&R!=="top"&&R!=="middle"&&R!=="alphabetic"&&R!=="hanging")throw new Error("Expected bottom, top, middle, alphabetic, or hanging for text-baseline");T.setTextBaseline(R)}return v&&T.setPadding(v(b)),C&&T.setKeepUpright(C(b)),T}}function by(i,t){return"icon-src"in i?Ty(i,t):"shape-points"in i?Sy(i,t):"circle-radius"in i?Ry(i,t):null}function Ty(i,t){const e="icon-",n=e+"src",r=gu(i[n],n),s=us(i,e+"anchor",t),o=Gs(i,e+"scale",t),a=Bt(i,e+"opacity",t),l=us(i,e+"displacement",t),h=Bt(i,e+"rotation",t),c=li(i,e+"rotate-with-view",t),u=pc(i,e+"anchor-origin"),f=yc(i,e+"anchor-x-units"),g=yc(i,e+"anchor-y-units"),d=Dy(i,e+"color"),m=Ly(i,e+"cross-origin"),p=Iy(i,e+"offset"),y=pc(i,e+"offset-origin"),w=fs(i,e+"width"),A=fs(i,e+"height"),x=_y(i,e+"size"),C=ks(i,e+"declutter-mode"),v=new Xs({src:r,anchorOrigin:u,anchorXUnits:f,anchorYUnits:g,color:d,crossOrigin:m,offset:p,offsetOrigin:y,height:A,width:w,size:x,declutterMode:C});return function(E){return a&&v.setOpacity(a(E)),l&&v.setDisplacement(l(E)),h&&v.setRotation(h(E)),c&&v.setRotateWithView(c(E)),o&&v.setScale(o(E)),s&&v.setAnchor(s(E)),v}}function Sy(i,t){const e="shape-",n=e+"points",r=e+"radius",s=Yo(i[n],n),o=Yo(i[r],r),a=er(i,e,t),l=nr(i,e,t),h=Gs(i,e+"scale",t),c=us(i,e+"displacement",t),u=Bt(i,e+"rotation",t),f=li(i,e+"rotate-with-view",t),g=fs(i,e+"radius2"),d=fs(i,e+"angle"),m=ks(i,e+"declutter-mode"),p=new Bs({points:s,radius:o,radius2:g,angle:d,declutterMode:m});return function(y){return a&&p.setFill(a(y)),l&&p.setStroke(l(y)),c&&p.setDisplacement(c(y)),u&&p.setRotation(u(y)),f&&p.setRotateWithView(f(y)),h&&p.setScale(h(y)),p}}function Ry(i,t){const e="circle-",n=er(i,e,t),r=nr(i,e,t),s=Bt(i,e+"radius",t),o=Gs(i,e+"scale",t),a=us(i,e+"displacement",t),l=Bt(i,e+"rotation",t),h=li(i,e+"rotate-with-view",t),c=ks(i,e+"declutter-mode"),u=new en({radius:5,declutterMode:c});return function(f){return s&&u.setRadius(s(f)),n&&u.setFill(n(f)),r&&u.setStroke(r(f)),a&&u.setDisplacement(a(f)),l&&u.setRotation(l(f)),h&&u.setRotateWithView(h(f)),o&&u.setScale(o(f)),u}}function Bt(i,t,e){if(!(t in i))return;const n=Me(i[t],tt,e);return function(r){return Yo(n(r),t)}}function Te(i,t,e){if(!(t in i))return null;const n=Me(i[t],Nt,e);return function(r){return gu(n(r),t)}}function Py(i,t,e){const n=Te(i,t+"pattern-src",e),r=mc(i,t+"pattern-offset",e),s=mc(i,t+"pattern-size",e),o=ja(i,t+"color",e);return function(a){return{src:n(a),offset:r&&r(a),size:s&&s(a),color:o&&o(a)}}}function li(i,t,e){if(!(t in i))return null;const n=Me(i[t],It,e);return function(r){const s=n(r);if(typeof s!="boolean")throw new Error(`Expected a boolean for ${t}`);return s}}function ja(i,t,e){if(!(t in i))return null;const n=Me(i[t],ie,e);return function(r){return mu(n(r),t)}}function du(i,t,e){if(!(t in i))return null;const n=Me(i[t],On,e);return function(r){return mr(n(r),t)}}function us(i,t,e){if(!(t in i))return null;const n=Me(i[t],On,e);return function(r){const s=mr(n(r),t);if(s.length!==2)throw new Error(`Expected two numbers for ${t}`);return s}}function mc(i,t,e){if(!(t in i))return null;const n=Me(i[t],On,e);return function(r){return pu(n(r),t)}}function Gs(i,t,e){if(!(t in i))return null;const n=Me(i[t],On|tt,e);return function(r){return My(n(r),t)}}function fs(i,t){const e=i[t];if(e!==void 0){if(typeof e!="number")throw new Error(`Expected a number for ${t}`);return e}}function _y(i,t){const e=i[t];if(e!==void 0){if(typeof e=="number")return Xt(e);if(!Array.isArray(e))throw new Error(`Expected a number or size array for ${t}`);if(e.length!==2||typeof e[0]!="number"||typeof e[1]!="number")throw new Error(`Expected a number or size array for ${t}`);return e}}function Ly(i,t){const e=i[t];if(e!==void 0){if(typeof e!="string")throw new Error(`Expected a string for ${t}`);return e}}function pc(i,t){const e=i[t];if(e!==void 0){if(e!=="bottom-left"&&e!=="bottom-right"&&e!=="top-left"&&e!=="top-right")throw new Error(`Expected bottom-left, bottom-right, top-left, or top-right for ${t}`);return e}}function yc(i,t){const e=i[t];if(e!==void 0){if(e!=="pixels"&&e!=="fraction")throw new Error(`Expected pixels or fraction for ${t}`);return e}}function Iy(i,t){const e=i[t];if(e!==void 0)return mr(e,t)}function ks(i,t){const e=i[t];if(e!==void 0){if(typeof e!="string")throw new Error(`Expected a string for ${t}`);if(e!=="declutter"&&e!=="obstacle"&&e!=="none")throw new Error(`Expected declutter, obstacle, or none for ${t}`);return e}}function Dy(i,t){const e=i[t];if(e!==void 0)return mu(e,t)}function mr(i,t){if(!Array.isArray(i))throw new Error(`Expected an array for ${t}`);const e=i.length;for(let n=0;n<e;++n)if(typeof i[n]!="number")throw new Error(`Expected an array of numbers for ${t}`);return i}function gu(i,t){if(typeof i!="string")throw new Error(`Expected a string for ${t}`);return i}function Yo(i,t){if(typeof i!="number")throw new Error(`Expected a number for ${t}`);return i}function mu(i,t){if(typeof i=="string")return i;const e=mr(i,t),n=e.length;if(n<3||n>4)throw new Error(`Expected a color with 3 or 4 values for ${t}`);return e}function pu(i,t){const e=mr(i,t);if(e.length!==2)throw new Error(`Expected an array of two numbers for ${t}`);return e}function My(i,t){return typeof i=="number"?i:pu(i,t)}const wc={RENDER_ORDER:"renderOrder"};class Oy extends Sa{constructor(t){t=t||{};const e=Object.assign({},t);delete e.style,delete e.renderBuffer,delete e.updateWhileAnimating,delete e.updateWhileInteracting,super(e),this.declutter_=t.declutter?String(t.declutter):void 0,this.renderBuffer_=t.renderBuffer!==void 0?t.renderBuffer:100,this.style_=null,this.styleFunction_=void 0,this.setStyle(t.style),this.updateWhileAnimating_=t.updateWhileAnimating!==void 0?t.updateWhileAnimating:!1,this.updateWhileInteracting_=t.updateWhileInteracting!==void 0?t.updateWhileInteracting:!1}getDeclutter(){return this.declutter_}getFeatures(t){return super.getFeatures(t)}getRenderBuffer(){return this.renderBuffer_}getRenderOrder(){return this.get(wc.RENDER_ORDER)}getStyle(){return this.style_}getStyleFunction(){return this.styleFunction_}getUpdateWhileAnimating(){return this.updateWhileAnimating_}getUpdateWhileInteracting(){return this.updateWhileInteracting_}renderDeclutter(t,e){const n=this.getDeclutter();n in t.declutter||(t.declutter[n]=new wh(9)),this.getRenderer().renderDeclutter(t,e)}setRenderOrder(t){this.set(wc.RENDER_ORDER,t)}setStyle(t){this.style_=t===void 0?ou:t;const e=Fy(t);this.styleFunction_=t===null?void 0:M0(e),this.changed()}setDeclutter(t){this.declutter_=t?String(t):void 0,this.changed()}}function Fy(i){if(i===void 0)return ou;if(!i)return null;if(typeof i=="function"||i instanceof St)return i;if(!Array.isArray(i))return gc([i]);if(i.length===0)return[];const t=i.length,e=i[0];if(e instanceof St){const r=new Array(t);for(let s=0;s<t;++s){const o=i[s];if(!(o instanceof St))throw new Error("Expected a list of style instances");r[s]=o}return r}if("style"in e){const r=new Array(t);for(let s=0;s<t;++s){const o=i[s];if(!("style"in o))throw new Error("Expected a list of rules with a style property");r[s]=o}return Cy(r)}return gc(i)}class ci extends Oy{constructor(t){super(t)}createRenderer(){return new Q0(this)}}const Ya="26",yu=new Set(["23","24",Ya]),Ny=6,By=["","-notes","-filtered","-other"],je=new globalThis.Map,Mr=new globalThis.Map,Vo=new WeakMap,Ac=new globalThis.Map,Or={0:"#9CF790",10:"#37A600",25:"#67B4F8",50:"#0002FE",100:"#FA03F0",250:"#710100",400:"#ffa10c",600:"#fe6301"},Xy={0:"#cccccc","2.5":"#a1a1a1",5:"#707070",10:"#454545",20:"#7345e6",30:"#4d0074"},Gy={0:"#c3e7b9",10:"#7ec179",25:"#95c5e0",50:"#3b3a9f",100:"#b05dae"};function ky(){return new DOMException("The operation was aborted","AbortError")}function Wi(i){if(i?.aborted)throw i.reason??ky()}function wu(i,t){let e=Vo.get(i);e||(e=new globalThis.Map,Vo.set(i,e));const n=(e.get(t)??0)+1;return e.set(t,n),n}function xc(i,t,e){return Vo.get(i)?.get(t)===e}function Hy(i){return JSON.stringify({filePath:i.filePath,authorization:i.authorization??""})}function zy(i,t){for(je.delete(i),je.set(i,t);je.size>Ny;){const e=je.keys().next().value;if(e===void 0)break;je.delete(e)}}function Au(i,t){const e=new Set(By.map(n=>`${t}${n}`));for(const n of[...i.getLayers().getArray()])e.has(n.getClassName())&&i.removeLayer(n)}function pi(i){const t=String(i??"").trim();return yu.has(t)?t:Ya}function Uo(i,t,e=.05){const n=i[0]-t[0],r=i[1]-t[1];return n*n+r*r<e*e}function xu(i){let t=0;for(let e=0;e<i.length-1;e++){const[n,r]=i[e],[s,o]=i[e+1];t+=(s-n)*(o+r)}return t>0}function Wy(i){const t=[];let e=i.findIndex(s=>/^CLOSED_CONTOURS:/i.test(s));if(e<0)return Y.featureCollection(t);const n=i[e].match(/CLOSED_CONTOURS:\s*(\d+)/i);let r=n?Number.parseInt(n[1],10):0;for(e++;r>0&&e<i.length;){const s=i[e].trim().match(/^(\d+)\s+(\d+)$/);if(!s){e++;continue}let o=Number.parseInt(s[2],10);const a=[];for(e++;o>0&&e<i.length;){const f=i[e].trim().split(/\s+/).map(Number).filter(Number.isFinite);for(let g=0;g+2<f.length&&o>0;g+=3)a.push([f[g],f[g+1]]),o--;e++}let l=!1;e<i.length&&/^NoLabel\s+0[^\s]*/.test(i[e].trim())&&(l=!0,e++);let h="3";const c=e<i.length?i[e].trim().match(/^([0-9]+(?:\.[0-9]+)?)\s+1$/):null;c&&(h=c[1],e++);const u=a[a.length-1];if(a.length>3&&!Uo(a[0],u,.1)&&a.push([...a[0]]),a.length>3&&Uo(a[0],a[a.length-1],.1)){xu(a)&&a.reverse();const f=a[0],g=a[a.length-1];(f[0]!==g[0]||f[1]!==g[1])&&a.push([...a[0]]),t.push(Y.polygon([a],{level:h,noLabelZero:l}))}r--}return t.sort((s,o)=>Number(s.properties?.level)-Number(o.properties?.level)),Y.featureCollection(t)}function jy(i){const t=[];let e=i.findIndex(n=>/^NOTES_SYMBOL:/i.test(n));if(e<0)return t;for(e++;e<i.length;){const n=i[e].trim();if(!n||!/^\d+\s/.test(n))break;const r=n.split(/\s+/),s=r[5],o=Number.parseFloat(r[1]),a=Number.parseFloat(r[2]);s&&Number.isFinite(o)&&Number.isFinite(a)&&t.push({type:"Feature",geometry:{type:"Point",coordinates:[o,a]},properties:{text:s,noteValue:s,rawLine:n,rawParts:r}}),e++}return t}function Yy(i){const t=[];let e=i.findIndex(n=>/^SYMBOLS:/i.test(n));if(e<0)return t;for(e++;e<i.length;){const n=i[e].trim();if(!n||/^[A-Z_]+:/.test(n))break;const r=n.split(/\s+/).filter(Boolean),s=Number.parseFloat(r[1]),o=Number.parseFloat(r[2]);r.length>=3&&Number.isFinite(s)&&Number.isFinite(o)&&t.push({type:"Feature",geometry:{type:"Point",coordinates:[s,o]},properties:{symbolId:r[0],alt:Number.parseFloat(r[3]??"0"),angle:Number.parseFloat(r[4]??"0")}}),e++}return t}function Vy(i){const t=[],e=i.findIndex(o=>/^CLOSED_CONTOURS:/i.test(o)),n=e<0?i.length:e,r=/^(\d+(?:\.\d+)?)\s+\d+\s+(\d+)\s*$/;let s=0;for(;s<n;){const o=i[s].trim().match(r);if(!o){s++;continue}const a=o[1];let l=Number.parseInt(o[2],10);const h=[];for(s++;s<n&&l>0;){const f=i[s].trim().split(/\s+/).map(Number).filter(Number.isFinite);for(let g=0;g+2<f.length&&l>0;g+=3)h.push([f[g],f[g+1]]),l--;s++}let c=!1;if(s<n&&/^NoLabel\s+0[^\s]*/.test(i[s].trim())&&(c=!0,s++),!h.length)continue;const u=h.length>3&&Uo(h[0],h[h.length-1],.1);u&&xu(h)&&h.reverse(),t.push({type:"Feature",geometry:{type:u?"Polygon":"LineString",coordinates:u?[h]:h},properties:{level:a,noLabelZero:c}})}return t}function me(i){try{const t=Y.bbox(i);return t.length<4||t.slice(0,4).some(e=>!Number.isFinite(e))?null:[t[0],t[1],t[2],t[3]]}catch{return null}}function ir(i,t){return!i||!t?!0:!(i[2]<t[0]||i[0]>t[2]||i[3]<t[1]||i[1]>t[3])}function Va(i){if(!/polygon/i.test(String(i?.geometry?.type??"")))return[i];try{return Y.flatten(i).features.map(t=>({...t,properties:{...i.properties??{},...t.properties??{}}}))}catch{return[i]}}function Uy(i,t){try{const e=Y.area(i),n=Y.area(t);return Number.isFinite(e)&&Number.isFinite(n)&&e>0&&e<n*.999999&&(Y.booleanWithin(i,t)||Y.booleanContains(t,i))}catch{return!1}}function qy(i){if(i.length<=1||!i.every(o=>Number(o?.properties?.level)===0))return i;const t=i.flatMap(Va),e=t.map(o=>{try{return Y.area(o)}catch{return 0}}),n=new globalThis.Map;if(t.forEach((o,a)=>{let l=-1,h=Number.POSITIVE_INFINITY;t.forEach((c,u)=>{const f=e[u]??0;a===u||f>=h||!ir(me(o),me(c))||!Uy(o,c)||(l=u,h=f)}),l>=0&&n.set(a,l)}),!n.size)return t;const r=new globalThis.Map;n.forEach((o,a)=>{const l=r.get(o)??[];l.push(t[a]),r.set(o,l)});const s=[];return t.forEach((o,a)=>{if(n.has(a))return;let l=[o];for(const h of r.get(a)??[])l=l.flatMap(c=>{try{if(!ir(me(c),me(h))||!Y.booleanIntersects(c,h))return[c];const u=Y.difference(Y.featureCollection([c,h]));return u?Y.flatten(u).features.map(f=>({...f,properties:{...o.properties??{},...f.properties??{}}})):[]}catch{return[c]}});s.push(...l)}),s}function Qy(i){const t=new globalThis.Map,e=[];for(const r of i){if(!/polygon/i.test(String(r?.geometry?.type??""))){e.push(r);continue}const s=`${pi(r.properties?.symbolId)}__${String(r.properties?.level??"")}`,o=t.get(s)??[];o.push(r),t.set(s,o)}const n=[];return t.forEach(r=>{const s=qy(r);if(s.length<=1){n.push(...s);return}try{const o=Y.union(Y.featureCollection(s));if(!o){n.push(...s);return}Y.flatten(o).features.forEach(a=>{a.properties={...s[0]?.properties??{},...a.properties??{}},n.push(a)})}catch{n.push(...s)}}),[...e,...n]}function Zy(i,t){const e=new globalThis.Map,n=[];for(const s of i){if(!/polygon/i.test(String(s?.geometry?.type??""))){n.push(s);continue}const o=pi(s.properties?.symbolId),a=e.get(o)??[];a.push(s),e.set(o,a)}const r=[];return e.forEach(s=>{const o=s.slice().sort((l,h)=>Number(h.properties?.level)-Number(l.properties?.level)),a=[];for(const l of o){Wi(t);let h=Va(l);for(const c of a)if(h=h.flatMap(u=>{try{if(!ir(me(u),c.bbox))return[u];if(!Y.booleanIntersects(u,c.feature))return[u];const f=Y.difference(Y.featureCollection([u,c.feature]));return f?Y.flatten(f).features.map(g=>({...g,properties:{...l.properties??{},...g.properties??{}}})):[]}catch{return[u]}}),!h.length)break;for(const c of h)a.push({feature:c,bbox:me(c)});r.push(...h)}}),[...n,...r]}function Jy(i,t=1e-6){if(!i.length)return[];const e=(s,o)=>{const a=s[0]-o[0],l=s[1]-o[1];return a*a+l*l<=t*t},n=[];for(const s of i)(!n.length||!e(s,n[n.length-1]))&&n.push([...s]);if(n.length>1&&!e(n[0],n[n.length-1])&&n.push([...n[0]]),n.length<4)return i;const r=[n[0]];for(let s=1;s<n.length-1;s++){const o=n[s-1],a=n[s],l=n[s+1];Math.abs((a[0]-o[0])*(l[1]-o[1])-(a[1]-o[1])*(l[0]-o[0]))>t&&r.push(a)}return r.push(n[n.length-1]),r.length>=4?r:n}function Ky(i,t,e=.001){if(i?.geometry?.type!=="Polygon"||!/linestring/i.test(t?.geometry?.type??""))return Y.featureCollection([i]);if(t.geometry.type==="LineString"){const l=t.geometry.coordinates;if(Y.booleanPointInPolygon(Y.point(l[0]),i)||Y.booleanPointInPolygon(Y.point(l[l.length-1]),i))return Y.featureCollection([i])}const n=Y.lineIntersect(t,i),r=Y.explode(t);for(const l of r.features.slice(0,-1))n.features.push(l);const s=Y.buffer(t,e,{units:"kilometers"});if(!s)return Y.featureCollection([i]);const o=Y.difference(Y.featureCollection([i,s]));if(!o?.geometry)return Y.featureCollection([i]);const a=Va(o).map((l,h)=>{const c=l.geometry.coordinates[0];for(let u=0;u<c.length;u++){const f=Y.point(c[u]),g=n.features.find(d=>Y.distance(d,f,{units:"kilometers"})<=e*2);g&&(c[u]=[...g.geometry.coordinates])}return l.geometry.coordinates[0]=Jy(c),l.properties={...i.properties??{},id:`${i.properties?.id??"poly"}-${h}`},l});return Y.featureCollection(a)}function $y(i,t){const e=i.split(/\r?\n/),n=Wy(e),r=jy(e),s=Yy(e).filter(g=>yu.has(String(g.properties?.symbolId))),o=Vy(e).filter(g=>g.geometry?.type==="LineString"&&Number(g.properties?.level)===0);Wi(t);let a=n.features;if(a.length>1)try{const g=Y.union(n);g&&(a=Y.flatten(g).features.map((d,m)=>({...d,properties:{...d.properties??{},id:d.properties?.id??`u-${m}`}})))}catch{a=n.features}const l=o.map(g=>({feature:g,bbox:me(g)}));for(const g of l)Wi(t),a=a.flatMap(d=>{try{if(!ir(me(d),g.bbox))return[d];if(!Y.booleanIntersects(d,g.feature))return[d];const m=Ky(d,g.feature);return m.features.length?m.features:[d]}catch{return[d]}});const h=s.map(g=>({feature:g,point:Y.point(g.geometry.coordinates,g.properties)})),c=a.map(g=>{let d=Ya;for(const m of h)try{if(Y.booleanPointInPolygon(m.point,g)){d=pi(m.feature.properties?.symbolId);break}}catch{}return{...g,properties:{symbolId:d}}}),u=n.features.map(g=>({feature:g,bbox:me(g)})),f=[];for(const g of c){Wi(t);const d=me(g);for(const m of u)if(ir(d,m.bbox))try{const p=Y.intersect(Y.featureCollection([g,m.feature]));if(!p)continue;const y={...m.feature.properties??{},...g.properties??{}};Y.flatten(p).features.forEach(w=>{w.properties={...y,...w.properties??{}},f.push(w)})}catch{}}return{vectorFeatures:Zy(Qy(f),t),noteFeatures:r,symbolFeatures:s,otherFeatures:o}}async function tw(i){const t=Hy(i),e=je.get(t);if(e)return je.delete(t),je.set(t,e),e;if(!i.signal){const r=Mr.get(t);if(r)return r}const n=(async()=>{const r=i.authorization?{Authorization:i.authorization}:void 0,s=await fetch(i.filePath,{headers:r,signal:i.signal});if(!s.ok)throw new Error(`MICAPS request failed: ${s.status} ${s.statusText}`);const o=$y(await s.text(),i.signal);return zy(t,o),o})();i.signal||Mr.set(t,n);try{return await n}finally{!i.signal&&Mr.get(t)===n&&Mr.delete(t)}}function Ao(i,t,e){const n=Number(t),r=i[String(n)];if(r)return r;if(!Number.isFinite(n))return e;const s=Object.keys(i).map(Number).filter(Number.isFinite),o=s.length?Math.max(...s):Number.POSITIVE_INFINITY;return n>o?i[String(o)]??e:e}function ew(i,t){const e=pi(i);return Ao(e==="23"?Xy:e==="24"?Gy:Or,t,Or[0])}function nw(i,t=10,e=4){if(typeof document>"u")return null;const n=globalThis.devicePixelRatio||1,r=`${i}_${t}_${e}_${n}`,s=Ac.get(r);if(s)return s;const o=document.createElement("canvas");o.width=Math.ceil(t*n),o.height=Math.ceil(t*n);const a=o.getContext("2d");if(!a)return null;a.setTransform(n,0,0,n,0,0),a.strokeStyle=i,a.lineWidth=e,a.beginPath(),a.moveTo(-t,t*2),a.lineTo(t*2,-t),a.moveTo(0,t*2),a.lineTo(t*3,-t),a.stroke();const l=a.createPattern(o,"repeat");return l&&Ac.set(r,l),l}function iw(i,t,e){const{className:n,opacity:r=.8,showText:s=!1,showFillcolor:o=!0,showIsoline:a=!0,showPointMarkers:l=!1}=e,h={dataProjection:"EPSG:4326",featureProjection:i.getView().getProjection()},c=d=>new $h().readFeatures({type:"FeatureCollection",features:d},h),u=new globalThis.Map,g=[new ci({className:n,opacity:Math.max(0,Math.min(1,r)),zIndex:e.zIndex??10,visible:e.visible??!0,source:new Hi({features:c(t.vectorFeatures)}),style:d=>{const m=pi(d.get("symbolId")),p=d.get("level"),y=`${m}_${String(p)}_${s}_${o}_${a}`,w=u.get(y);if(w)return w;const A=[];if(o){const x=ew(m,p);A.push(new St({fill:new Tt({color:m==="24"?nw(x)??x:x})}))}return(a||s)&&A.push(new St({stroke:a?new bt({color:"#000",width:1}):void 0,text:s?new nn({text:String(p??""),font:"bold 16px sans-serif",fill:new Tt({color:"#333"}),stroke:new bt({color:"#fff",width:3}),placement:"line",overflow:!0}):void 0})),u.set(y,A),A}})];if(t.noteFeatures.length&&(s||l)){const d=new globalThis.Map;g.push(new ci({className:`${n}-notes`,zIndex:(e.zIndex??10)+2,visible:e.visible??!0,source:new Hi({features:c(t.noteFeatures)}),style:m=>{const p=String(m.get("text")??""),y=`${p}_${s}_${l}`;let w=d.get(y);return w||(w=new St({image:l?new en({radius:4,fill:new Tt({color:"#ffffffcc"}),stroke:new bt({color:"#ff4d4f",width:1.5})}):void 0,text:s?new nn({text:p,font:"bold 14px sans-serif",fill:new Tt({color:"#ff4d4f"}),stroke:new bt({color:"#fff",width:2}),offsetY:-12}):void 0}),d.set(y,w)),w}}))}if(t.symbolFeatures.length&&l){const d=new globalThis.Map;g.push(new ci({className:`${n}-filtered`,zIndex:(e.zIndex??10)+3,visible:e.visible??!0,source:new Hi({features:c(t.symbolFeatures)}),style:m=>{const p=pi(m.get("symbolId"));let y=d.get(p);if(!y){const w=p==="23"?"#5f4bb6":p==="24"?"#2f7ea1":"#2d9f3b";y=new St({image:new en({radius:5,fill:new Tt({color:w}),stroke:new bt({color:"#fff",width:1.5})})}),d.set(p,y)}return y}}))}return g}async function Cu(i,t){if(!t.className||!t.filePath)return;const e=wu(i,t.className),n=await tw(t);if(Wi(t.signal),!xc(i,t.className,e))return;const r=i.getLayers().getArray().find(o=>o.getClassName()===t.className),s=iw(i,n,{...t,zIndex:r?.getZIndex()??t.zIndex,visible:r?.getVisible()??t.visible});if(xc(i,t.className,e))return Au(i,t.className),s.forEach(o=>i.addLayer(o)),s[0]}function Eu(i,t){wu(i,t),Au(i,t)}class vu{map;options;ready;sourceRequestVersion=0;abortController=new AbortController;constructor(t,e){this.map=t,this.options=e,this.ready=this.add()}beginSourceRequest(){return this.abortController.abort(),this.abortController=new AbortController,++this.sourceRequestVersion}getMicContourOptions(t){const e=this.options.config??{};return{className:this.options.id,filePath:t,authorization:this.options.authorization,legend:e.legend??[],legendScope:e.legendScope??[],zIndex:Number.isFinite(Number(e.zIndex))?Number(e.zIndex):10,opacity:Number.isFinite(Number(e.opacity))?Number(e.opacity):.8,showText:this.options.showText??e.showText??!1,showFillcolor:this.options.showFillcolor??e.showFillcolor??!0,showIsoline:this.options.showIsoline??e.showIsoline??!0,showPointMarkers:this.options.showPointMarkers??e.showPointMarkers??!1}}async add(){const t=this.beginSourceRequest(),e=this.abortController,n=this.options.url;if(n)try{if(await Cu(this.map,{...this.getMicContourOptions(n),signal:e.signal}),t!==this.sourceRequestVersion||e.signal.aborted)return}catch(r){if(e.signal.aborted)return;throw r}}delete(){this.abortController.abort(),this.sourceRequestVersion++,Eu(this.map,this.options.id)}toggleVisible(t){se(this.map,this.options.id,t),se(this.map,`${this.options.id}-notes`,t),se(this.map,`${this.options.id}-filtered`,t),se(this.map,`${this.options.id}-other`,t)}async updateParams(t){this.options={...this.options,...t,config:{...this.options.config,...t?.config??{}}},this.ready=this.add(),await this.ready}}const rw=8,sw=8,ow=3,qo="rgba(0,0,0,0.8)",Ye=new globalThis.Map,Fr=new globalThis.Map,Ve=new globalThis.Map,Nr=new globalThis.Map,Qo=new WeakMap;function Ua(i,t){return i.getLayers().getArray().find(e=>e.getClassName()===t)}function bu(i,t){for(const e of[...i.getLayers().getArray()])e.getClassName()===t&&i.removeLayer(e)}function Tu(i){const{url:t,time:e="",authorization:n="",config:r}=i,{legend:s=[]}=r;return JSON.stringify({url:t,time:e,authorization:n,extent:r.extent??[],scope:r.scope??[],thresholds:s.map(o=>o.scope??[]),isolineSmooth:r.isolineSmooth!==!1,isolineSmoothness:Su(r)})}function aw(i){const{url:t,time:e="",authorization:n="",config:r}=i;return JSON.stringify({url:t,time:e,authorization:n,extent:r.extent??[],scope:r.scope??[]})}function Su(i){return i.isolineSmooth===!1?0:pn(i.isolineSmoothness)}function lw(i,t){for(Ye.delete(i),Ye.set(i,t);Ye.size>rw;){const e=Ye.keys().next().value;if(e===void 0)break;Ye.delete(e)}}function cw(i,t){for(Ve.delete(i),Ve.set(i,t);Ve.size>sw;){const e=Ve.keys().next().value;if(e===void 0)break;Ve.delete(e)}}async function hw(i){const t=aw(i),e=Ve.get(t);if(e)return Ve.delete(t),Ve.set(t,e),e;const n=Nr.get(t);if(n)return n;const r=(async()=>{const s=await Zi(i);if(!s)return;const o={rawArr2D:s.rawArr2D,extent:s.extent,width:s.width,height:s.height};return cw(t,o),o})();Nr.set(t,r);try{return await r}finally{Nr.get(t)===r&&Nr.delete(t)}}function Ru(i,t){let e=Qo.get(i);e||(e=new globalThis.Map,Qo.set(i,e));const n=(e.get(t)??0)+1;return e.set(t,n),n}function uw(i,t,e){return Qo.get(i)?.get(t)===e}function fw(i){return typeof i.isolineBorderColor=="string"?i.isolineBorderColor:typeof i.isolineColor=="string"?i.isolineColor:i.isolineColor===!0?re(i.legend??[],i.legendScope).colorMap:qo}function dw(i){return re(i.legend??[],i.legendScope).colorMap}function Cc(i){if(typeof i=="string")return()=>i;const t=Object.keys(i).map(Number).filter(Number.isFinite).sort((e,n)=>e-n);return e=>{const n=i[e];if(n)return n;let r=0,s=t.length-1,o=-1;for(;r<=s;){const a=r+s>>1;t[a]<=e?(o=a,r=a+1):s=a-1}return o<0?qo:i[t[o]]||qo}}function gw(i,t,e){const n=i(t),[r,s,o,a]=zi(n);return[r,s,o,a/255*Math.max(0,Math.min(1,e))]}function mw(i,t,e,n){const r=new globalThis.Map,s=[],[o,a,l,h]=n,c=(l-o)/t,u=(h-a)/e,f=d=>{if(!Array.isArray(d)||d.length<2)return null;const m=[];for(const p of d)!Array.isArray(p)||p.length<2||!Number.isFinite(p[0])||!Number.isFinite(p[1])||m.push([o+p[0]*c,h-p[1]*u]);return m.length>=2?m:null},g=(d,m)=>{const p=r.get(d)??[];p.push(m),r.set(d,p)};for(const d of i){const m=Number(d.value);if(!(!Number.isFinite(m)||!Array.isArray(d.coordinates))){if(d.type==="Polygon"){const p=d.coordinates.map(f).filter(y=>!!y);p.length&&(s.push({type:"Polygon",coordinates:p,value:m}),p.forEach(y=>g(m,y)))}else if(d.type==="MultiPolygon"){const p=[];for(const y of d.coordinates){const w=y.map(f).filter(A=>!!A);w.length&&(p.push(w),w.forEach(A=>g(m,A)))}p.length&&s.push({type:"MultiPolygon",coordinates:p,value:m})}}}return{lines:[...r.entries()].map(([d,m])=>m.length===1?{type:"LineString",coordinates:m[0],value:d}:{type:"MultiLineString",coordinates:m,value:d}),polygons:s.sort((d,m)=>d.value-m.value)}}async function pw(i){const t=await hw(i);if(!t)return{lines:[],polygons:[]};const{rawArr2D:e,extent:n,width:r,height:s}=t,{uniqueThresholds:o}=re(i.config.legend??[]);if(r<2||s<2||o.length===0)return{lines:[],polygons:[]};const a=Su(i.config),l=Ba(e,r,s,a),h=new Float64Array(r*s);for(let u=0;u<s;u++){const f=l[u];for(let g=0;g<r;g++){const d=f?.[g];h[u*r+g]=d===void 0||!Number.isFinite(d)?NaN:d}}const c=Gr.contours().size([r,s]).thresholds(o).smooth(a>0)(h);return mw(c,r,s,n)}async function Pu(i,t){const e=Ye.get(i);if(e)return Ye.delete(i),Ye.set(i,e),e;const n=Fr.get(i);if(n)return n;const r=pw(t);Fr.set(i,r);try{const s=await r;return lw(i,s),s}finally{Fr.get(i)===r&&Fr.delete(i)}}function _u(i){const{map:t,id:e,isolineGeoJSON:n,contourGeoJSON:r=[],colorMap:s,fillColorMap:o={},fillContours:a=!1,fillOpacity:l=.7,lineWidth:h=1.2,showLabel:c=!0,zIndex:u=9999,visible:f=!0,geometryCacheKey:g,visibleThresholds:d}=i,m=Cc(s),p=Cc(o),y=d?new Set(d):void 0,w=new globalThis.Map,A=E=>{const T=Number(E.get("value"));if(y&&!y.has(T))return;const b=E.get("geometryKind")==="fill"?"fill":"line";if(b==="fill"&&!a)return;const R=`${b}:${T}`;let _=w.get(R);return _||(b==="fill"?(_=new St({fill:new Tt({color:gw(p,T,l)}),zIndex:0}),w.set(R,_),_):(_=new St({stroke:new bt({color:m(T),width:h}),text:c?new nn({text:Number.isInteger(T)?String(T):String(Number(T.toFixed(1))),fill:new Tt({color:"#fff"}),stroke:new bt({color:"#000",width:3}),placement:"line",overflow:!1}):void 0,zIndex:1}),w.set(R,_),_))},x=Ua(t,e);if(g&&x instanceof ci&&x.get("isolineGeometryCacheKey")===g)return x.setStyle(A),x.setZIndex(u),x.setVisible(f),x.setDeclutter(c),x.changed(),x;const C=new $h().readFeatures({type:"FeatureCollection",features:[...a||g?r.map(({value:E,...T})=>({type:"Feature",geometry:T,properties:{value:E,geometryKind:"fill"}})):[],...n.map(({value:E,...T})=>({type:"Feature",geometry:T,properties:{value:E,geometryKind:"line"}}))]},{dataProjection:"EPSG:3857",featureProjection:t.getView().getProjection()}),v=new ci({className:e,source:new Hi({features:C}),zIndex:u,visible:f,declutter:c,style:A});return g&&v.set("isolineGeometryCacheKey",g),bu(t,e),t.addLayer(v),v}async function Lu(i,t){const{id:e,config:n}=t,r=Ru(i,e);if(!t.url||t.signal?.aborted)return;const s=Tu(t),o=await Pu(s,t);if(t.signal?.aborted||!uw(i,e,r))return;const a=Ua(i,e),{uniqueThresholds:l}=re(n.legend??[],n.legendScope);return _u({map:i,id:e,isolineGeoJSON:o.lines,contourGeoJSON:o.polygons,colorMap:fw(n),fillColorMap:dw(n),fillContours:n.isolineFill===!0,fillOpacity:n.opacity,lineWidth:n.isolineLineWidth??n.lineWidth,showLabel:n.showIsolineValue??n.showIsolineLabel??!0,zIndex:n.zIndex??a?.getZIndex(),visible:a?.getVisible()??!0,geometryCacheKey:s,visibleThresholds:l})}async function yw(i,t){const e=[...t],n=async()=>{for(;e.length;){if(i.signal?.aborted)return;const r=e.shift(),s=r,o=typeof s?.format=="function"?s.format("YYYY-MM-DDTHH:mm:ss.SSS[Z]"):String(r),a={...i,time:o};await Pu(Tu(a),a)}};await Promise.all(Array.from({length:Math.min(ow,e.length)},()=>n()))}function Iu(i,t){Ru(i,t),bu(i,t)}function Du(i,t,e){const n=Ua(i,t);n&&n.setVisible(e)}class Mu{map;options;ready;abortController=new AbortController;constructor(t,e){this.map=t,this.options=e,this.ready=this.render()}async render(){this.abortController.abort();const t=new AbortController;this.abortController=t;const e=this.options.url;if(e)try{await Lu(this.map,{...this.options,url:e,signal:t.signal})}catch(n){if(t.signal.aborted)return;throw n}}delete(){this.abortController.abort(),Iu(this.map,this.options.id)}toggleVisible(t){Du(this.map,this.options.id,t)}async updateParams(t){this.options={...this.options,...t,config:{...this.options.config,...t.config??{}}},this.ready=this.render(),await this.ready}}const Ec=2;class Ou extends Ga{windVectorCache=new Map;windVectorLoadingTasks=new globalThis.Map;normalizeUrls(t){return Array.isArray(t)?t.filter(e=>typeof e=="string"&&!!e):typeof t=="string"&&t?[t]:[]}parseScopeValue(t){if(Array.isArray(t)&&t.length>=2){const e=Number(t[0]),n=Number(t[1]);if(Number.isFinite(e)&&Number.isFinite(n))return[e,n]}if(typeof t=="string"){const e=t.split(",").map(n=>Number(n.trim())).filter(n=>Number.isFinite(n));if(e.length>=2)return[e[0],e[1]]}}getComponentScope(t=this.options){const e=t?.config??{},n=e.layerConfig??{},r=this.parseScopeValue(e.componentScope)??this.parseScopeValue(e.uvScope)??this.parseScopeValue(n.COMPONENT_SCALE_RANGE)??this.parseScopeValue(n.COMPONENT_SCOPE)??this.parseScopeValue(n.UV_SCOPE);if(r){const a=Math.max(Math.abs(r[0]),Math.abs(r[1]));return[-a,a]}const s=[e?.scope?.[0],e?.scope?.[1]].map(a=>Math.abs(Number(a))).filter(a=>Number.isFinite(a)),o=s.length?Math.max(...s):60;return[-o,o]}buildWindSpeedGrid(t,e,n,r){const s=Array.from({length:r},()=>Array(n).fill(void 0));for(let o=0;o<r;o++)for(let a=0;a<n;a++){const l=o*n+a,h=t[l],c=e[l],u=typeof h<"u"&&Number.isFinite(Number(h)),f=typeof c<"u"&&Number.isFinite(Number(c));if(!u&&!f)continue;const g=u?Number(h):0,d=f?Number(c):0;s[o][a]=Math.sqrt(g*g+d*d)}return s}prepareGrid(t,e,n){const r=Array.from({length:n},()=>Array(e).fill(NaN));for(let s=0;s<n;s++)for(let o=0;o<e;o++){const a=t[s]?.[o];r[s][o]=a==null||isNaN(Number(a))?NaN:Number(a)}return r}getWindVectorCacheKey(t=this.options){const e=this.normalizeUrls(t?.url);return JSON.stringify({urls:e,authorization:t?.authorization??"",extent:t?.config?.extent,scope:this.getComponentScope(t)})}async getOrLoadWindVectorData(t=this.options){const{url:e,config:n,authorization:r}=t;if(!n?.extent||!Array.isArray(e))return null;const s=this.normalizeUrls(e);if(s.length<2)return null;const o=this.getWindVectorCacheKey(t),a=this.windVectorCache.get(o);if(a)return a;const l=this.windVectorLoadingTasks.get(o);if(l)return l;const h=(async()=>{const c=this.getComponentScope(t),[u,f]=await Promise.all([Mn(s[0],c,void 0,r,{detectNoDataByBorderColor:!1}),Mn(s[1],c,void 0,r,{detectNoDataByBorderColor:!1})]),g=Math.min(u?.width??0,f?.width??0),d=Math.min(u?.height??0,f?.height??0);if(!g||!d||!u?.grayArr||!f?.grayArr)return null;const m=new Float32Array(g*d),p=new Float32Array(g*d);for(let w=0;w<g*d;w++){const A=Number(u.grayArr[w]),x=Number(f.grayArr[w]);m[w]=Number.isFinite(A)?A:0,p[w]=Number.isFinite(x)?x:0}const y={width:g,height:d,u:m,v:p,extent:xi(n.extent)};return this.windVectorCache.set(o,y),y})();this.windVectorLoadingTasks.set(o,h);try{return await h}finally{this.windVectorLoadingTasks.get(o)===h&&this.windVectorLoadingTasks.delete(o)}}async getOrLoadContourData(t=this.options){const{url:e,config:n}=t;if(!n?.extent)return null;if(!Array.isArray(e))return super.getOrLoadContourData(t);const r=this.normalizeUrls(e);if(r.length<2)return null;const s=JSON.stringify({urls:r,authorization:t?.authorization??"",extent:n.extent,scope:this.getComponentScope(t)}),o=this.contourCache.get(s);if(o&&o.schemaVersion===Ec)return o;const a=this.contourLoadingTasks.get(s);if(a)return a;const l=(async()=>{const h=await this.getOrLoadWindVectorData(t);if(!h)return null;const{u:c,v:u,width:f,height:g,extent:d}=h,m=this.buildWindSpeedGrid(c,u,f,g),p=Os(m,f,g),y=this.prepareGrid(m,f,g),w=this.prepareGrid(p,f,g),A={schemaVersion:Ec,rawArr2D:y,smoothArr2D:w,extent:d,width:f,height:g};return this.contourCache.set(s,A),A})();this.contourLoadingTasks.set(s,l);try{return await l}finally{this.contourLoadingTasks.get(s)===l&&this.contourLoadingTasks.delete(s)}}async getSourceFromParams(t=this.options){const{config:e,url:n}=t;if(!e?.extent)return;if(!Array.isArray(n))return super.getSourceFromParams(t);const r=await this.getOrLoadContourData(t);if(!r)return;const{rawArr2D:s,smoothArr2D:o,extent:a,width:l,height:h}=r,c=this.getValueTransformFn(t),u=this.applyValueTransform2D(s,"raw",c),f=this.applyValueTransform2D(o,"smooth",c),{colorMap:g}=re(e.legend,e.legendScope),d=di(e.legend,e.legendScope)??e.scope;return this.getFcstRasterSource({rawArr2D:u,smoothArr2D:f,extent:a,width:l,height:h,colorMap:g,colorMode:e.mode,scope:d},t)}}const ww="data:image/png;base64,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";class Zo{map;options;contourCache;iconImagePromise;externalWindDataProvider;constructor(t,e,n){this.map=t,this.options=e,this.contourCache=new Map,this.iconImagePromise=null,this.externalWindDataProvider=n,this.add()}getClassName(){return this.options.id+"-windShaft"}normalizeUrls(t){return Array.isArray(t)?t.filter(e=>typeof e=="string"&&!!e):typeof t=="string"&&t?[t]:[]}getComponentScope(){const t=this.options?.config??{},e=t.layerConfig??{},n=a=>{if(Array.isArray(a)&&a.length>=2){const l=Number(a[0]),h=Number(a[1]);if(Number.isFinite(l)&&Number.isFinite(h))return[l,h]}if(typeof a=="string"){const l=a.split(",").map(h=>Number(h.trim())).filter(h=>Number.isFinite(h));if(l.length>=2)return[l[0],l[1]]}},r=n(t.componentScope)??n(t.uvScope)??n(e.COMPONENT_SCALE_RANGE)??n(e.COMPONENT_SCOPE)??n(e.UV_SCOPE);if(r){const a=Number(r[0]),l=Number(r[1]);if(Number.isFinite(a)&&Number.isFinite(l)){const h=Math.max(Math.abs(a),Math.abs(l));return[-h,h]}}const s=[t?.scope?.[0],t?.scope?.[1]].map(a=>Math.abs(Number(a))).filter(a=>Number.isFinite(a)),o=s.length?Math.max(...s):60;return[-o,o]}getCacheKey(){const t=this.normalizeUrls(this.options?.url);return JSON.stringify({id:this.options?.id,urls:t,extent:this.options?.config?.extent,scope:this.getComponentScope()})}getRuntimeConfig(){return this.options.config}getVisibleWindSpeedScope(){const t=this.getRuntimeConfig();return di(t.legend,t.legendScope)??t.scope}getWindShaftConfig(){const t=this.getRuntimeConfig(),e=t.windShaftConfig??{},n=t.gridConfig??{},r=(s,o)=>{const a=Number(s);return Number.isFinite(a)?a:o};return{pixelStep:Math.max(8,r(e.pixelStep??n.pixelStep??t.pixelStep,40)),fontSize:Math.max(10,r(e.fontSize??n.fontSize??t.fontSize,26)),color:String(e.color??t.color??"rgb(255,255,255)"),minWindSpeed:Math.max(0,r(e.minWindSpeed,.01)),speedLevelStep:Math.max(.1,r(e.speedLevelStep,2)),maxLevel:Math.max(1,Math.floor(r(e.maxLevel,30))),spriteCellSize:Math.max(1,Math.floor(r(e.spriteCellSize,32))),baseFontSize:Math.max(1,r(e.baseFontSize,32)),iconYOffsetRatio:Math.max(0,r(e.iconYOffsetRatio,.7)),firstRowMaxLevel:Math.max(0,Math.floor(r(e.firstRowMaxLevel,3))),firstRowStartX:Math.floor(r(e.firstRowStartX,28)),firstRowY:Math.floor(r(e.firstRowY,4)),secondRowOffsetX:Math.floor(r(e.secondRowOffsetX,4)),secondRowY:Math.floor(r(e.secondRowY,5))}}async getIconImage(){return this.iconImagePromise?this.iconImagePromise:(this.iconImagePromise=new Promise((t,e)=>{const n=new Image;n.crossOrigin="anonymous",n.onload=()=>t(n),n.onerror=()=>e(new Error("Failed to load wind shaft sprite image")),n.src=ww}),this.iconImagePromise)}async getOrLoadWindData(){const t=this.getRuntimeConfig();if(!t?.extent)return null;const e=this.getCacheKey(),n=this.contourCache.get(e);if(n)return n;if(this.externalWindDataProvider){const g=await this.externalWindDataProvider();if(g)return this.contourCache.set(e,g),g}const r=this.normalizeUrls(this.options?.url);if(r.length<2)return null;const s=this.getComponentScope(),[o,a]=await Promise.all([Mn(r[0],s,void 0,this.options?.authorization,{detectNoDataByBorderColor:!1}),Mn(r[1],s,void 0,this.options?.authorization,{detectNoDataByBorderColor:!1})]),l=Math.min(o?.width??0,a?.width??0),h=Math.min(o?.height??0,a?.height??0);if(!l||!h)return null;const c=new Float32Array(l*h),u=new Float32Array(l*h);for(let g=0;g<l*h;g++){const d=Number(o.grayArr[g]),m=Number(a.grayArr[g]);c[g]=Number.isFinite(d)?d:0,u[g]=Number.isFinite(m)?m:0}const f={width:l,height:h,u:c,v:u,extent:xi(t.extent)};return this.contourCache.set(e,f),f}createWindShaftSource(t,e){const n=this.getWindShaftConfig(),{pixelStep:r,fontSize:s,color:o,minWindSpeed:a,speedLevelStep:l,maxLevel:h,spriteCellSize:c,baseFontSize:u,iconYOffsetRatio:f,firstRowMaxLevel:g,firstRowStartX:d,firstRowY:m,secondRowOffsetX:p,secondRowY:y}=n,w=this.getVisibleWindSpeedScope(),A=document.createElement("canvas"),[x,C,v,E]=t.extent,T=v-x,b=E-C;return new Ps({projection:"EPSG:3857",ratio:1,interpolate:!1,canvasFunction:(R,_,M,D)=>{const I=D??[1,1],N=Math.max(1,Math.floor(I[0]??1)),O=Math.max(1,Math.floor(I[1]??1));A.width!==N&&(A.width=N),A.height!==O&&(A.height=O);const B=this.map.getSize(),F=Math.max(1,Math.floor(B?.[0]??N)),X=Math.max(1,Math.floor(B?.[1]??O)),k=N/F,z=O/X,L=(k+z)*.5,V=A.getContext("2d",{alpha:!0});if(!V)return A;V.clearRect(0,0,N,O);const K=s/u*L,Q=c*K,$=c*K,[q,rt,at,it]=R,mt=at-q,Et=it-rt;if(mt<=0||Et<=0||T<=0||b<=0)return A;const zt=Math.max(q,x),Mt=Math.max(rt,C),wt=Math.min(at,v),_t=Math.min(it,E);if(zt>=wt||Mt>=_t)return A;const Wt=Math.max(1,F-1),jt=Math.max(1,X-1),ee=Math.max(8,Math.round(r)),le=Math.max(0,Math.floor((zt-q)/mt*Wt)),we=Math.min(F-1,Math.ceil((wt-q)/mt*Wt)),Ae=Math.max(0,Math.floor((it-_t)/Et*jt)),dt=Math.min(X-1,Math.ceil((it-Mt)/Et*jt));if(le>we||Ae>dt)return A;for(let Oe=Ae;Oe<=dt;Oe+=ee)for(let Fe=le;Fe<=we;Fe+=ee){const zn=q+mt*Fe/Wt,Wn=it-Et*Oe/jt,pr=(zn-x)/T*(t.width-1),Ci=(E-Wn)/b*(t.height-1),rn=os(t.u,pr,Ci,t.width,t.height),Ne=os(t.v,pr,Ci,t.width,t.height);if(!Number.isFinite(rn)||!Number.isFinite(Ne))continue;const Hs=Math.atan2(rn,Ne)*(180/Math.PI),jn=Math.sqrt(rn*rn+Ne*Ne);if(jn<=a)continue;if(Array.isArray(w)&&w.length===2){const Un=Math.min(Number(w[0]),Number(w[1])),Be=Math.max(Number(w[0]),Number(w[1]));if(Number.isFinite(Un)&&Number.isFinite(Be)&&(jn<Un||jn>Be))continue}const Yn=Math.min(Math.ceil(jn/l),h-1);let Ei=d+Yn,Vn=m;Yn>g&&(Ei=Yn-p,Vn=y),V.save();const yr=Fe*k,zs=Oe*z;V.translate(yr,zs),V.rotate(Hs*Math.PI/180),V.drawImage(e,Ei*c,Vn*c,c,c,-Q/2,-$*f,Q,$),V.globalCompositeOperation="source-atop",V.fillStyle=o,V.fillRect(-Q/2,-$*f,Q,$),V.globalCompositeOperation="source-over",V.restore()}return A}})}async getSourceFromCache(){const t=this.getCacheKey(),e=this.contourCache.get(t);if(!e)return null;const n=await this.getIconImage();return this.createWindShaftSource(e,n)}async getSourceFromParams(){const t=await this.getOrLoadWindData();if(!t)return null;const e=await this.getIconImage();return this.createWindShaftSource(t,e)}async add(){const t=this.getRuntimeConfig(),e=Number.isFinite(Number(t.zIndex))?Number(t.zIndex):1200,n=Number.isFinite(Number(t.opacity))?Number(t.opacity):1,r=this.getClassName(),s=Ht(this.map,r);s&&this.delete();const o=s?s.getZIndex():e+1,a=await this.getSourceFromCache()??await this.getSourceFromParams();if(!a)return;const l=new Qi({source:a,className:r,zIndex:o,opacity:n});this.map.addLayer(l)}delete(){De(this.map,this.getClassName()),this.contourCache.clear(),this.iconImagePromise=null}toggleVisible(t){se(this.map,this.getClassName(),t)}async updateParams(t){this.options={...this.options,...t,config:{...this.options.config,...t?.config??{}}};const e=Ht(this.map,this.getClassName());if(!e){await this.add();return}const n=await this.getSourceFromCache()??await this.getSourceFromParams();n&&e.setSource(n)}}class Fu{map;options;constructor(t,e){this.map=t,this.options=e,this.add()}getClassName(){return this.options.id}getConfig(){return this.options?.config??{}}normalizeParamValue(t){if(t!=null)return Array.isArray(t)?t.join(","):typeof t=="boolean"?t?"true":"false":String(t)}buildWmsParams(){const e=this.getConfig().layerConfig??{},n={};return Object.keys(e).forEach(r=>{const s=this.normalizeParamValue(e[r]);typeof s<"u"&&(n[r]=s)}),n}splitUrlAndParams(t){const[e,n=""]=t.split("?"),r={};return n?(new URLSearchParams(n).forEach((o,a)=>{r[a]=o}),{baseUrl:e,urlParams:r}):{baseUrl:e,urlParams:r}}getTintColorRGB(){const e=(this.options?.config?.layerConfig??{}).TINTCOLOR;if(typeof e>"u"||e===null)return null;const n=String(e).trim();if(!n)return null;const r=n.replace(/^0x/i,"#"),s=r.startsWith("#")?r.slice(1):r;if(/^[0-9a-fA-F]{3}$/.test(s)){const a=parseInt(s[0]+s[0],16),l=parseInt(s[1]+s[1],16),h=parseInt(s[2]+s[2],16);return[a,l,h]}if(/^[0-9a-fA-F]{6}$/.test(s)){const a=parseInt(s.slice(0,2),16),l=parseInt(s.slice(2,4),16),h=parseInt(s.slice(4,6),16);return[a,l,h]}const o=n.split(",").map(a=>Number(a.trim()));return o.length===3&&o.every(a=>Number.isFinite(a)&&a>=0&&a<=255)?[Math.round(o[0]),Math.round(o[1]),Math.round(o[2])]:null}tintBlobToDataUrl(t,e){return new Promise((n,r)=>{const s=new Image,o=URL.createObjectURL(t);s.onload=()=>{const a=document.createElement("canvas");a.width=s.width,a.height=s.height;const l=a.getContext("2d",{willReadFrequently:!0});if(!l){URL.revokeObjectURL(o),r(new Error("Failed to create 2d context for tint"));return}l.clearRect(0,0,a.width,a.height),l.drawImage(s,0,0);const h=l.getImageData(0,0,a.width,a.height),c=h.data;for(let u=0;u<c.length;u+=4)(c[u+3]??0)!==0&&(c[u]=e[0],c[u+1]=e[1],c[u+2]=e[2]);l.putImageData(h,0,0),URL.revokeObjectURL(o),n(a.toDataURL("image/png"))},s.onerror=()=>{URL.revokeObjectURL(o),r(new Error("Failed to decode image for tint"))},s.src=o})}createSource(){const t=this.options?.url;if(!t)return null;const e=this.options?.authorization,n=this.getTintColorRGB(),{baseUrl:r,urlParams:s}=this.splitUrlAndParams(t),o={...s,...this.buildWmsParams()};return new Wg({interpolate:!0,url:r,params:o,tileLoadFunction:(a,l)=>{const h=a.getImage();if(!e&&!n){h.src=l;return}fetch(l,{credentials:"include",headers:e?{Authorization:e}:void 0}).then(async c=>{const u=(c.headers.get("content-type")||"").toLowerCase();if(!c.ok){const f=await c.text();throw new Error(`WMS tile request failed: ${c.status} ${c.statusText}; ${f.slice(0,240)}`)}if(!u.includes("image/")){const f=await c.text();throw new Error(`WMS tile response is not image: ${u}; ${f.slice(0,240)}`)}return c.blob()}).then(async c=>{if(n){h.src=await this.tintBlobToDataUrl(c,n);return}const u=URL.createObjectURL(c);h.onload=()=>{URL.revokeObjectURL(u),h.onload=null,h.onerror=null},h.onerror=()=>{URL.revokeObjectURL(u),h.onload=null,h.onerror=null},h.src=u}).catch(c=>{console.error("[WmsLayer] tile load failed",{src:l,hasAuthorization:!!e,error:c}),h.src="data:image/gif;base64,R0lGODlhAQABAAAAACw="})}})}add(){const t=this.getConfig(),e=Number.isFinite(Number(t.zIndex))?Number(t.zIndex):10,n=Number.isFinite(Number(t.opacity))?Number(t.opacity):1,r=this.getClassName(),s=Ht(this.map,r);s&&this.delete();const o=s?s.getZIndex():e,a=this.createSource();if(!a)return;const l=new hh({className:r,source:a,zIndex:o,opacity:n});this.map.addLayer(l)}delete(){De(this.map,this.getClassName())}toggleVisible(t){se(this.map,this.getClassName(),t)}updateParams(t){this.options={...this.options,...t,config:{...this.options.config,...t?.config??{}}};const e=Ht(this.map,this.getClassName());if(!e){this.add();return}const n=this.createSource();n&&e.setSource(n);const r=this.getConfig(),s=Number(r.zIndex),o=Number(r.opacity);Number.isFinite(s)&&e.setZIndex(s),Number.isFinite(o)&&e.setOpacity(o)}updateColor(t){const n={...this.options?.config?.layerConfig??{}};typeof t.styles<"u"&&(n.STYLES=t.styles),typeof t.colorScaleRange<"u"&&(n.COLORSCALERANGE=Array.isArray(t.colorScaleRange)?t.colorScaleRange.join(","):String(t.colorScaleRange)),typeof t.numColorBands<"u"&&(n.NUMCOLORBANDS=String(t.numColorBands)),typeof t.aboveMaxColor<"u"&&(n.ABOVEMAXCOLOR=t.aboveMaxColor),typeof t.belowMinColor<"u"&&(n.BELOWMINCOLOR=t.belowMinColor),typeof t.bgColor<"u"&&(n.BGCOLOR=t.bgColor),typeof t.logScale<"u"&&(n.LOGSCALE=typeof t.logScale=="boolean"?t.logScale?"true":"false":t.logScale),this.updateParams({...this.options,config:{...this.options.config,layerConfig:n}})}}const Aw="/typhoon-server".replace(/\/$/,""),xw="Basic YWRtaW46YWRtaW4xMjNALi4u",Nu="data/script/mdp_typhoon/output";function Cw(i){const t=i.replace(/^\/+/,"");return`${Aw}/${t}`}async function Bu(i,t=xw){const e=await fetch(Cw(i),{credentials:"include",headers:t?{Authorization:t}:void 0});if(!e.ok){const n=await e.text();throw new Error(`Typhoon request failed: ${e.status} ${e.statusText}; ${n.slice(0,240)}`)}return await e.json()}function Ew(i){const t=i?.dataPath||Nu;return Bu(`fileServer/${t}/typhoon_list.json`,i?.authorization)}function vw(i,t){const e=t?.dataPath||Nu;return Bu(`fileServer/${e}/${i}.json`,t?.authorization)}const bw=["BABJ|WTPQ20","RJTD|WTPQ51","RJTD|WTPQ50"],vc=["#d9480f","#1971c2","#2b8a3e","#862e9c","#0b7285","#c92a2a"],Tw={TD:"热带低压",TS:"热带风暴","TROPICAL STORM":"热带风暴",STS:"强热带风暴",TY:"台风",STY:"强台风",SuperTY:"超强台风"};function Br(i){return Array.isArray(i)?i:Array.isArray(i?.points)?i.points:[]}function Sw(i){return Number.isFinite(i?.lon)&&Number.isFinite(i?.lat)}function Xr(i){return i.filter(Sw).slice().sort((t,e)=>{const n=Date.parse(t.datetime||""),r=Date.parse(e.datetime||"");return Number.isFinite(n)&&Number.isFinite(r)&&n!==r?n-r:Number(t.validtime||0)-Number(e.validtime||0)})}class Xu{map;options;abortController;styleCache;constructor(t,e){this.map=t,this.options=e,this.abortController=null,this.styleCache=new globalThis.Map,this.add()}getClassName(){return this.options.id}getConfig(){return this.options.config?.typhoonConfig??{}}async add(){Ht(this.map,this.getClassName())&&this.delete(),this.abortController?.abort(),this.abortController=new AbortController;try{const e=await Ew({dataPath:this.getConfig().dataPath,authorization:this.options.authorization});if(this.abortController.signal.aborted)return;const n=this.getSelectedTyphoonNums(e),r=await Promise.all(n.map(s=>vw(s,{dataPath:this.getConfig().dataPath,authorization:this.options.authorization})));if(this.abortController.signal.aborted)return;this.render(e,r)}catch(e){console.error("[TyphoonLayer] load failed",e)}}getSelectedTyphoonNums(t){const e=this.getConfig().typhoonNums?.filter(Boolean);if(e?.length)return e;const n=t[0],r=n?n.num_inati||n.num_nati:"";return r?[r]:[]}getPrimarySource(t,e){const n=e==="obs"?t.obs:t.fcst,r=Object.keys(n??{});return(this.getConfig().sourcePriority??bw).find(o=>r.includes(o))??r[0]}getLastPoint(t){return t.length?t[t.length-1]:void 0}findForecastBasePoint(t,e){if(e)for(let n=t.length-1;n>=0;n--){const r=t[n];if(r.file_ts===e.file_ts||r.datetime===e.datetime)return r}}getForecastAnchorPoint(t,e,n,r){const s=n[0];if(!s)return;const o=Xr(Br(t.obs?.[e])),a=this.findForecastBasePoint(o,s);if(a)return a;const l=this.getLastPoint(o);if(l)return l;const h=r?Xr(Br(t.obs?.[r])):[];return this.findForecastBasePoint(h,s)??this.getLastPoint(h)}render(t,e){const n=Number.isFinite(Number(this.options.config?.zIndex))?Number(this.options.config.zIndex):30,r=Ht(this.map,this.getClassName());r&&this.delete();const s=r?r.getZIndex():n,o=new Hi;e.forEach((l,h)=>{const c=t.find(u=>u.num_inati===l.typhoon_num);this.appendTyphoonFeatures(o,l,c,vc[h%vc.length])});const a=new ci({className:this.getClassName(),source:o,zIndex:s,style:l=>this.createStyle(l)});this.map.addLayer(a),this.getConfig().fitToExtent!==!1&&!o.isEmpty()&&this.map.getView().fit(o.getExtent(),{padding:[80,80,80,80],duration:350,maxZoom:7})}appendTyphoonFeatures(t,e,n,r){const s=n?.name_cn||e.name_cn||e.name_en||e.typhoon_num,o=this.getPrimarySource(e,"obs");if(Object.entries(e.obs??{}).forEach(([h,c])=>{const u=Xr(Br(c));if(!u.length)return;const f=h===o;this.addLineFeature(t,u,{kind:"obs",sourceName:h,color:r,isPrimary:f,typhoonName:s,typhoonNum:e.typhoon_num}),f&&this.addPointFeatures(t,u,{kind:"obs",sourceName:h,color:r,typhoonName:s,typhoonNum:e.typhoon_num})}),this.getConfig().showForecast===!1)return;const l=this.getPrimarySource(e,"fcst");Object.entries(e.fcst??{}).forEach(([h,c])=>{const u=Xr(Br(c));if(!u.length)return;const f=h===l,g=this.getForecastAnchorPoint(e,h,u,o),d=g?[g,...u]:u;this.addLineFeature(t,d,{kind:"fcst",sourceName:h,color:r,isPrimary:f,typhoonName:s,typhoonNum:e.typhoon_num}),this.addForecastLabelFeature(t,u[u.length-1],{sourceName:h,color:r,isPrimary:f,typhoonName:s,typhoonNum:e.typhoon_num})})}addLineFeature(t,e,n){if(!(e.length<2))for(let r=1;r<e.length;r++){const s=e[r-1],o=e[r],a=new In([ii([s.lon,s.lat]),ii([o.lon,o.lat])]);t.addFeature(new vn({geometry:a,featureType:`${n.kind}-line`,grade:o.grade,...n}))}}addPointFeatures(t,e,n){e.forEach((r,s)=>{const o=s===e.length-1,a=new vn({geometry:new tn(ii([r.lon,r.lat])),featureType:o?"latest-point":"obs-point",datetime:r.datetime,grade:r.grade,windMax:r.wind_max_ms,pressure:r.prs_hpa,...n});t.addFeature(a)})}addForecastLabelFeature(t,e,n){const r=new vn({geometry:new tn(ii([e.lon,e.lat])),featureType:"fcst-label",datetime:e.datetime,grade:e.grade,windMax:e.wind_max_ms,pressure:e.prs_hpa,...n});t.addFeature(r)}createStyle(t){const e=String(t.get("featureType")||""),n=String(t.get("color")||"#d9480f"),r=String(t.get("sourceName")||""),s=String(t.get("grade")||""),o=String(t.get("typhoonName")||""),a=!!t.get("isPrimary"),l=[e,n,r,s,o,a].join("|"),h=this.styleCache.get(l);if(h)return h;const c=this.getGradeColor(s,n);let u;if(e==="obs-line")u=new St({stroke:new bt({color:a?c:`${c}80`,width:a?3:1.5})});else if(e==="fcst-line")u=new St({stroke:new bt({color:a?c:`${c}80`,width:a?2:1.25,lineDash:[8,8]})});else if(e==="fcst-label")u=new St({image:new en({radius:a?4.5:3.5,fill:new Tt({color:c}),stroke:new bt({color:"#fff",width:1.5})}),text:new nn({text:r,font:a?"bold 12px sans-serif":"12px sans-serif",fill:new Tt({color:"#1f2937"}),stroke:new bt({color:"#fff",width:4}),offsetX:8,offsetY:-8,textAlign:"left"})});else{const f=e==="latest-point";u=new St({image:new en({radius:f?6:4,fill:new Tt({color:c}),stroke:new bt({color:"#fff",width:f?2:1.5})}),text:f?new nn({text:o,font:"bold 13px sans-serif",fill:new Tt({color:"#1f2937"}),stroke:new bt({color:"#fff",width:4}),offsetY:-16}):void 0})}return this.styleCache.set(l,u),u}getGradeColor(t,e){const n=String(t||"").trim();if(!n)return e;const r=Tw[n]||n,s=this.options.config.legend.find(a=>a.name===r),o=this.options.config.legend.find(a=>a.name==="其他");return s?.color||o?.color||e}delete(){this.abortController?.abort(),De(this.map,this.getClassName())}toggleVisible(t){se(this.map,this.getClassName(),t)}updateParams(t){this.options={...this.options,...t,config:{...this.options.config,...t?.config??{}}},this.add()}}const Rw={center:[118.7969,32.0603],zoom:5,layers:[]};function Pw(i,t){const e={...Rw,...t??{}};return new Promise(n=>{const r=new Hu.Map({target:i,layers:[],view:new _o({center:ii(e.center),zoom:e.zoom}),controls:[]});e.layers.forEach(s=>{Gu(r,s)}),n(r)})}function Ht(i,t){return i.getLayers().getArray().find(n=>n.getClassName()===t)}function De(i,t){const e=Ht(i,t);e&&i.removeLayer(e)}function Gu(i,t){const e=new hh({className:t.id,source:new xg({...t.source}),zIndex:t.zIndex??0});i.addLayer(e)}function _w(i,t){De(i,t)}function se(i,t,e){if(!i)return;const n=Ht(i,t);n&&n.setVisible(e)}const ct=[];function Lw(i,t){if(!i)return;const e=Array.isArray(t.type)?t.type:[t.type];if(e.includes("gradual")){const n=new Ga(i,t);if(ct.push(n),e.includes("grid")){const r={...t,type:"grid"},s=new Yr(i,r,async()=>{const o=await n.getOrLoadContourData();return o?{rawArr2D:o.rawArr2D,extent:o.extent,width:o.width,height:o.height}:null});Go(t.id,s)}}else if(e.includes("uv")){const n=new Ou(i,t);if(ct.push(n),e.includes("grid")){const r={...t,type:"grid"},s=new Yr(i,r,async()=>{const o=await n.getOrLoadContourData();return o?{rawArr2D:o.rawArr2D,extent:o.extent,width:o.width,height:o.height}:null});Go(t.id,s)}if(e.includes("windShaft")){const r=new Zo(i,t,async()=>n.getOrLoadWindVectorData());ct.push(r)}}else if(e.includes("grid")){const n=new Yr(i,t);ct.push(n)}else if(e.includes("arrow")){const n=new Jh(i,t);ct.push(n)}else if(e.includes("micaps")){const n=new vu(i,t);ct.push(n)}else if(e.includes("isoline")||e.includes("contour")){const n=new Mu(i,t);ct.push(n)}else if(e.includes("wms")){const n=new Fu(i,t);ct.push(n)}else if(e.includes("typhoon")){const n=new Xu(i,t);ct.push(n)}else if(e.includes("windShaft")){const n=new Zo(i,t);ct.push(n)}}function Iw(i){for(let e=ct.length-1;e>=0;e--)ct[e].options.id===i&&(ct[e].delete(),ct.splice(e,1));const t=Fs(i);t&&(t.delete(),qh(i))}function Dw(){ct.forEach(i=>{i.delete()}),Qh(i=>{i.delete()}),Zh(),ct.length=0}function Mw(i,t){ct.filter(r=>r.options.id===i).forEach(r=>{r.toggleVisible(t)});const n=Fs(i);n&&n.toggleVisible(t)}function Ow(i){const t=ct.filter(n=>n.options.id===i.id);console.log("🚀 ~ updateLayer ~ layer:",ct,i,t),t.forEach(n=>{n.updateParams(i)});const e=Fs(i.id);e&&e.updateParams({...i,type:"grid"})}function Fw(i,t){ct.filter(n=>n.options.id===i).forEach(n=>{typeof n.updateColor=="function"&&n.updateColor(t)})}function Nw(){return ct}function Bw(){const i=new globalThis.Map;return ct.forEach(t=>{const e=t?.options;!e?.id||i.has(e.id)||i.set(e.id,e)}),Array.from(i.values())}function Xw(i,t,e,n,r=!1){if(!i)return Promise.resolve(null);const s=ct.find(o=>o.options.id===t);return s&&typeof s.getValueByLonLat=="function"?s.getValueByLonLat(e,n,r):Promise.resolve(null)}exports.ArrowLayer=Jh;exports.CommonMethods=ju;exports.FcstLayer=Ga;exports.GridLayer=Yr;exports.IsolineLayer=Mu;exports.MicLayer=vu;exports.TyphoonLayer=Xu;exports.WindLayer=Ou;exports.WindShaft=Zo;exports.WmsLayer=Fu;exports.addIsolineLayer=_u;exports.addTile=Gu;exports.bboxFromLonlatTo3857=xi;exports.bilinearInterpolate=os;exports.clampByte=hn;exports.clearAllLayers=Dw;exports.clearLinkedGridLayerMap=Zh;exports.convertContourGeoJSONTo3857=_p;exports.convertContourGeoJSONToLngLat=Pp;exports.createIsoline=Lu;exports.createMicContour=Cu;exports.deleteLinkedGridLayer=qh;exports.forEachLinkedGridLayer=Qh;exports.gaussianBlur2D=Os;exports.generateLegend=re;exports.getContourParams=Zi;exports.getGrayDataFromImage=Mn;exports.getLayerByClassName=Ht;exports.getLegendItemsByScope=Xa;exports.getLegendValueScope=di;exports.getLinkedGridLayer=Fs;exports.getLoadedLayerOptions=Bw;exports.getLoadedLayers=Nw;exports.getUrlFromTime=Ip;exports.getValueByLonLat=Xw;exports.getWidthAndHeight=Yh;exports.initMap=Pw;exports.lerp=Oi;exports.loadLayer=Lw;exports.mapValueToRGBA=Dp;exports.normalizeSmoothnessLevel=pn;exports.parseAlpha=Xo;exports.parseColorToRGBA=zi;exports.parseCssNumber=cn;exports.pixelTo3857=Wh;exports.pixelToLngLat=jh;exports.preloadIsoline=yw;exports.removeIsolineLayer=Iu;exports.removeLayer=De;exports.removeLayerById=Iw;exports.removeMicContour=Eu;exports.removeTile=_w;exports.renderFcstCanvasByWebGPU=Uh;exports.resolveSymFunction=Na;exports.setLinkedGridLayer=Go;exports.smoothGridByLevel=Ba;exports.toggleIsolineLayer=Du;exports.toggleLayerShowHide=se;exports.toggleVisibleById=Mw;exports.updateLayer=Ow;exports.updateWmsLayerColor=Fw;