tds-map-methods 0.1.0 → 0.1.2

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 CHANGED
@@ -1,10 +1,9 @@
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`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Ze=require("dayjs"),Ke=require("lodash-es"),zr=require("dayjs/plugin/utc.js"),tr=require("@turf/turf"),Mn=require("ol"),On=require("ol/View.js"),nt=require("ol/proj.js"),qr=require("ol/layer/Tile.js"),Vr=require("ol/source.js"),kt=require("ol/source/ImageCanvas.js"),Ct=require("ol/layer/Image.js"),It=require("d3-contour"),Gr=require("ol/format/GeoJSON.js"),ot=require("ol/layer/Vector.js"),yt=require("ol/source/Vector.js"),j=require("ol/style.js"),Jt=require("ol/Feature.js"),Zt=require("ol/geom.js");function Xn(n){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(n){for(const t in n)if(t!=="default"){const r=Object.getOwnPropertyDescriptor(n,t);Object.defineProperty(e,t,r.get?r:{enumerable:!0,get:()=>n[t]})}}return e.default=n,Object.freeze(e)}const Q=Xn(tr);function Hn(){}const kr={serviceBaseUrl:"",serviceAuthorization:"",ncssBaseUrl:"/ncss/grid",requestTimeout:6e4,imageSize:2048,typhoonServiceBaseUrl:"",typhoonDataPath:"data/script/mdp_typhoon/output",typhoonAuthorization:""};let me={...kr};function Kt(n){return String(n??"").trim().replace(/\/+$/,"")}function wr(n,e){const t=Number(n);return Number.isFinite(t)&&t>0?Math.round(t):e}function Qr(n){me={...me,...n,serviceBaseUrl:n.serviceBaseUrl===void 0?me.serviceBaseUrl:Kt(n.serviceBaseUrl),serviceAuthorization:n.serviceAuthorization===void 0?me.serviceAuthorization:String(n.serviceAuthorization),ncssBaseUrl:n.ncssBaseUrl===void 0?me.ncssBaseUrl:Kt(n.ncssBaseUrl),requestTimeout:wr(n.requestTimeout,me.requestTimeout),imageSize:wr(n.imageSize,me.imageSize),typhoonServiceBaseUrl:n.typhoonServiceBaseUrl===void 0?me.typhoonServiceBaseUrl:Kt(n.typhoonServiceBaseUrl),typhoonDataPath:n.typhoonDataPath===void 0?me.typhoonDataPath:String(n.typhoonDataPath).replace(/^\/+|\/+$/g,""),typhoonAuthorization:n.typhoonAuthorization===void 0?me.typhoonAuthorization:String(n.typhoonAuthorization)}}function Ae(){return{...me}}function In(){me={...kr}}function Rn(n){return String(n??"").trim().replace(/\/+$/,"")}function zn(n){return/^(?:[a-z]+:)?\/\//i.test(n)||/^(?:data|blob):/i.test(n)}function jr(n,e){const t=String(n||"").trim();if(!t||zn(t))return t;const r=Ae(),i=Rn(e===void 0?r.serviceBaseUrl:e);return i?t===i||t.startsWith(i+"/")?t:i+"/"+t.replace(/^\/+/,""):t.startsWith("/")?t:"/"+t}function qn(n,e){const t=new AbortController,r=()=>t.abort(n?.reason);n?.aborted?r():n?.addEventListener("abort",r,{once:!0});const i=e>0?setTimeout(()=>t.abort(new Error("Request timeout")),e):void 0;return{signal:t.signal,cleanup(){i&&clearTimeout(i),n?.removeEventListener("abort",r)}}}async function Vn(n){try{return(await n.text()).slice(0,240)}catch{return""}}async function Qt(n,e={}){const t=Ae(),r=Number(e.timeout??t.requestTimeout),i=qn(e.signal,Number.isFinite(r)?r:6e4),o=new Headers(e.headers),u=e.authorization??t.serviceAuthorization;u&&!o.has("Authorization")&&o.set("Authorization",u);try{const s=await fetch(jr(n,e.baseUrl),{credentials:e.credentials??"include",signal:i.signal,headers:o});if(!s.ok){const l=await Vn(s);throw new Error("TDS request failed: "+s.status+" "+s.statusText+(l?"; "+l:""))}return s}finally{i.cleanup()}}function Gn(n,e){if(!e)return n;const t=new URLSearchParams;Object.entries(e).forEach(([i,o])=>{o!=null&&t.set(i,String(o))});const r=t.toString();return r?n+(n.includes("?")?"&":"?")+r:n}async function jt(n,e,t,r={}){const i=await Qt(Gn(n,e),{...r,authorization:t??r.authorization});switch(r.responseType??"json"){case"response":return i;case"text":return await i.text();case"blob":return await i.blob();case"arrayBuffer":case"arraybuffer":return await i.arrayBuffer();default:return await i.json()}}async function fr(n,e,t){const r=await Qt(n,{...t,authorization:e??t?.authorization}),i=(r.headers.get("content-type")||"").toLowerCase(),o=await r.text(),u=o.trimStart().toLowerCase();if(i.includes("text/html")||u.startsWith("<!doctype html")||u.startsWith("<html"))throw new Error("TDS XML response is HTML. Check serviceBaseUrl/ncssBaseUrl: "+r.url+"; "+o.slice(0,240));return o}function Wr(n,e,t){return fr(n,e,t)}function kn(n,e,t,r){return jt(n,e,t,{...r,responseType:"text"})}function Qn(n,e,t){return jt(n,void 0,e,{...t,responseType:"arrayBuffer"})}function jn(n){return new Promise((e,t)=>{const r=new FileReader;r.onload=()=>typeof r.result=="string"?e(r.result):t(new Error("Blob to base64 failed")),r.onerror=()=>t(r.error??new Error("Read blob failed")),r.readAsDataURL(n)})}async function Ur(n,e,t,r){const u=await jt(n,typeof e=="string"?void 0:e,typeof e=="string"?e:t,{...r,responseType:"blob"});return jn(u)}function Wn(n,e){return Ur(n,e)}function Un(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}var Rt={exports:{}},At={},Pe={},Qe={},Cr;function Wt(){if(Cr)return Qe;Cr=1;function n(o,u,s){if(s===void 0&&(s=Array.prototype),o&&typeof s.find=="function")return s.find.call(o,u);for(var l=0;l<o.length;l++)if(Object.prototype.hasOwnProperty.call(o,l)){var d=o[l];if(u.call(void 0,d,l,o))return d}}function e(o,u){return u===void 0&&(u=Object),u&&typeof u.freeze=="function"?u.freeze(o):o}function t(o,u){if(o===null||typeof o!="object")throw new TypeError("target is not an object");for(var s in u)Object.prototype.hasOwnProperty.call(u,s)&&(o[s]=u[s]);return o}var r=e({HTML:"text/html",isHTML:function(o){return o===r.HTML},XML_APPLICATION:"application/xml",XML_TEXT:"text/xml",XML_XHTML_APPLICATION:"application/xhtml+xml",XML_SVG_IMAGE:"image/svg+xml"}),i=e({HTML:"http://www.w3.org/1999/xhtml",isHTML:function(o){return o===i.HTML},SVG:"http://www.w3.org/2000/svg",XML:"http://www.w3.org/XML/1998/namespace",XMLNS:"http://www.w3.org/2000/xmlns/"});return Qe.assign=t,Qe.find=n,Qe.freeze=e,Qe.MIME_TYPE=r,Qe.NAMESPACE=i,Qe}var Br;function Yr(){if(Br)return Pe;Br=1;var n=Wt(),e=n.find,t=n.NAMESPACE;function r(c){return c!==""}function i(c){return c?c.split(/[\t\n\f\r ]+/).filter(r):[]}function o(c,f){return c.hasOwnProperty(f)||(c[f]=!0),c}function u(c){if(!c)return[];var f=i(c);return Object.keys(f.reduce(o,{}))}function s(c){return function(f){return c&&c.indexOf(f)!==-1}}function l(c,f){for(var m in c)Object.prototype.hasOwnProperty.call(c,m)&&(f[m]=c[m])}function d(c,f){var m=c.prototype;if(!(m instanceof f)){let x=function(){};x.prototype=f.prototype,x=new x,l(m,x),c.prototype=m=x}m.constructor!=c&&(typeof c!="function"&&console.error("unknown Class:"+c),m.constructor=c)}var h={},a=h.ELEMENT_NODE=1,D=h.ATTRIBUTE_NODE=2,p=h.TEXT_NODE=3,A=h.CDATA_SECTION_NODE=4,w=h.ENTITY_REFERENCE_NODE=5,v=h.ENTITY_NODE=6,B=h.PROCESSING_INSTRUCTION_NODE=7,N=h.COMMENT_NODE=8,E=h.DOCUMENT_NODE=9,L=h.DOCUMENT_TYPE_NODE=10,X=h.DOCUMENT_FRAGMENT_NODE=11,R=h.NOTATION_NODE=12,S={},z={};S.INDEX_SIZE_ERR=(z[1]="Index size error",1),S.DOMSTRING_SIZE_ERR=(z[2]="DOMString size error",2);var C=S.HIERARCHY_REQUEST_ERR=(z[3]="Hierarchy request error",3);S.WRONG_DOCUMENT_ERR=(z[4]="Wrong document",4),S.INVALID_CHARACTER_ERR=(z[5]="Invalid character",5),S.NO_DATA_ALLOWED_ERR=(z[6]="No data allowed",6),S.NO_MODIFICATION_ALLOWED_ERR=(z[7]="No modification allowed",7);var P=S.NOT_FOUND_ERR=(z[8]="Not found",8);S.NOT_SUPPORTED_ERR=(z[9]="Not supported",9);var F=S.INUSE_ATTRIBUTE_ERR=(z[10]="Attribute in use",10);S.INVALID_STATE_ERR=(z[11]="Invalid state",11),S.SYNTAX_ERR=(z[12]="Syntax error",12),S.INVALID_MODIFICATION_ERR=(z[13]="Invalid modification",13),S.NAMESPACE_ERR=(z[14]="Invalid namespace",14),S.INVALID_ACCESS_ERR=(z[15]="Invalid access",15);function M(c,f){if(f instanceof Error)var m=f;else m=this,Error.call(this,z[c]),this.message=z[c],Error.captureStackTrace&&Error.captureStackTrace(this,M);return m.code=c,f&&(this.message=this.message+": "+f),m}M.prototype=Error.prototype,l(S,M);function I(){}I.prototype={length:0,item:function(c){return c>=0&&c<this.length?this[c]:null},toString:function(c,f){for(var m=[],x=0;x<this.length;x++)Me(this[x],m,c,f);return m.join("")},filter:function(c){return Array.prototype.filter.call(this,c)},indexOf:function(c){return Array.prototype.indexOf.call(this,c)}};function g(c,f){this._node=c,this._refresh=f,y(this)}function y(c){var f=c._node._inc||c._node.ownerDocument._inc;if(c._inc!==f){var m=c._refresh(c._node);if(Dr(c,"length",m.length),!c.$$length||m.length<c.$$length)for(var x=m.length;x in c;x++)Object.prototype.hasOwnProperty.call(c,x)&&delete c[x];l(m,c),c._inc=f}}g.prototype.item=function(c){return y(this),this[c]||null},d(g,I);function b(){}function T(c,f){for(var m=c.length;m--;)if(c[m]===f)return m}function O(c,f,m,x){if(x?f[T(f,x)]=m:f[f.length++]=m,c){m.ownerElement=c;var q=c.ownerDocument;q&&(x&&_(q,c,x),U(q,c,m))}}function H(c,f,m){var x=T(f,m);if(x>=0){for(var q=f.length-1;x<q;)f[x]=f[++x];if(f.length=q,c){var k=c.ownerDocument;k&&(_(k,c,m),m.ownerElement=null)}}else throw new M(P,new Error(c.tagName+"@"+m))}b.prototype={length:0,item:I.prototype.item,getNamedItem:function(c){for(var f=this.length;f--;){var m=this[f];if(m.nodeName==c)return m}},setNamedItem:function(c){var f=c.ownerElement;if(f&&f!=this._ownerElement)throw new M(F);var m=this.getNamedItem(c.nodeName);return O(this._ownerElement,this,c,m),m},setNamedItemNS:function(c){var f=c.ownerElement,m;if(f&&f!=this._ownerElement)throw new M(F);return m=this.getNamedItemNS(c.namespaceURI,c.localName),O(this._ownerElement,this,c,m),m},removeNamedItem:function(c){var f=this.getNamedItem(c);return H(this._ownerElement,this,f),f},removeNamedItemNS:function(c,f){var m=this.getNamedItemNS(c,f);return H(this._ownerElement,this,m),m},getNamedItemNS:function(c,f){for(var m=this.length;m--;){var x=this[m];if(x.localName==f&&x.namespaceURI==c)return x}return null}};function G(){}G.prototype={hasFeature:function(c,f){return!0},createDocument:function(c,f,m){var x=new W;if(x.implementation=this,x.childNodes=new I,x.doctype=m||null,m&&x.appendChild(m),f){var q=x.createElementNS(c,f);x.appendChild(q)}return x},createDocumentType:function(c,f,m){var x=new Re;return x.name=c,x.nodeName=c,x.publicId=f||"",x.systemId=m||"",x}};function V(){}V.prototype={firstChild:null,lastChild:null,previousSibling:null,nextSibling:null,attributes:null,parentNode:null,childNodes:null,ownerDocument:null,nodeValue:null,namespaceURI:null,prefix:null,localName:null,insertBefore:function(c,f){return fe(this,c,f)},replaceChild:function(c,f){fe(this,c,f,ve),f&&this.removeChild(f)},removeChild:function(c){return Y(this,c)},appendChild:function(c){return this.insertBefore(c,null)},hasChildNodes:function(){return this.firstChild!=null},cloneNode:function(c){return tt(this.ownerDocument||this,this,c)},normalize:function(){for(var c=this.firstChild;c;){var f=c.nextSibling;f&&f.nodeType==p&&c.nodeType==p?(this.removeChild(f),c.appendData(f.data)):(c.normalize(),c=f)}},isSupported:function(c,f){return this.ownerDocument.implementation.hasFeature(c,f)},hasAttributes:function(){return this.attributes.length>0},lookupPrefix:function(c){for(var f=this;f;){var m=f._nsMap;if(m){for(var x in m)if(Object.prototype.hasOwnProperty.call(m,x)&&m[x]===c)return x}f=f.nodeType==D?f.ownerDocument:f.parentNode}return null},lookupNamespaceURI:function(c){for(var f=this;f;){var m=f._nsMap;if(m&&Object.prototype.hasOwnProperty.call(m,c))return m[c];f=f.nodeType==D?f.ownerDocument:f.parentNode}return null},isDefaultNamespace:function(c){var f=this.lookupPrefix(c);return f==null}};function Z(c){return c=="<"&&"&lt;"||c==">"&&"&gt;"||c=="&"&&"&amp;"||c=='"'&&"&quot;"||"&#"+c.charCodeAt()+";"}l(h,V),l(h,V.prototype);function J(c,f){if(f(c))return!0;if(c=c.firstChild)do if(J(c,f))return!0;while(c=c.nextSibling)}function W(){this.ownerDocument=this}function U(c,f,m){c&&c._inc++;var x=m.namespaceURI;x===t.XMLNS&&(f._nsMap[m.prefix?m.localName:""]=m.value)}function _(c,f,m,x){c&&c._inc++;var q=m.namespaceURI;q===t.XMLNS&&delete f._nsMap[m.prefix?m.localName:""]}function K(c,f,m){if(c&&c._inc){c._inc++;var x=f.childNodes;if(m)x[x.length++]=m;else{for(var q=f.firstChild,k=0;q;)x[k++]=q,q=q.nextSibling;x.length=k,delete x[x.length]}}}function Y(c,f){var m=f.previousSibling,x=f.nextSibling;return m?m.nextSibling=x:c.firstChild=x,x?x.previousSibling=m:c.lastChild=m,f.parentNode=null,f.previousSibling=null,f.nextSibling=null,K(c.ownerDocument,c),f}function re(c){return c&&(c.nodeType===V.DOCUMENT_NODE||c.nodeType===V.DOCUMENT_FRAGMENT_NODE||c.nodeType===V.ELEMENT_NODE)}function ae(c){return c&&(ee(c)||ce(c)||$(c)||c.nodeType===V.DOCUMENT_FRAGMENT_NODE||c.nodeType===V.COMMENT_NODE||c.nodeType===V.PROCESSING_INSTRUCTION_NODE)}function $(c){return c&&c.nodeType===V.DOCUMENT_TYPE_NODE}function ee(c){return c&&c.nodeType===V.ELEMENT_NODE}function ce(c){return c&&c.nodeType===V.TEXT_NODE}function oe(c,f){var m=c.childNodes||[];if(e(m,ee)||$(f))return!1;var x=e(m,$);return!(f&&x&&m.indexOf(x)>m.indexOf(f))}function ge(c,f){var m=c.childNodes||[];function x(k){return ee(k)&&k!==f}if(e(m,x))return!1;var q=e(m,$);return!(f&&q&&m.indexOf(q)>m.indexOf(f))}function se(c,f,m){if(!re(c))throw new M(C,"Unexpected parent node type "+c.nodeType);if(m&&m.parentNode!==c)throw new M(P,"child not in parent");if(!ae(f)||$(f)&&c.nodeType!==V.DOCUMENT_NODE)throw new M(C,"Unexpected node type "+f.nodeType+" for parent node type "+c.nodeType)}function pe(c,f,m){var x=c.childNodes||[],q=f.childNodes||[];if(f.nodeType===V.DOCUMENT_FRAGMENT_NODE){var k=q.filter(ee);if(k.length>1||e(q,ce))throw new M(C,"More than one element or text in fragment");if(k.length===1&&!oe(c,m))throw new M(C,"Element in fragment can not be inserted before doctype")}if(ee(f)&&!oe(c,m))throw new M(C,"Only one element can be added and only after doctype");if($(f)){if(e(x,$))throw new M(C,"Only one doctype is allowed");var ne=e(x,ee);if(m&&x.indexOf(ne)<x.indexOf(m))throw new M(C,"Doctype can only be inserted before an element");if(!m&&ne)throw new M(C,"Doctype can not be appended since element is present")}}function ve(c,f,m){var x=c.childNodes||[],q=f.childNodes||[];if(f.nodeType===V.DOCUMENT_FRAGMENT_NODE){var k=q.filter(ee);if(k.length>1||e(q,ce))throw new M(C,"More than one element or text in fragment");if(k.length===1&&!ge(c,m))throw new M(C,"Element in fragment can not be inserted before doctype")}if(ee(f)&&!ge(c,m))throw new M(C,"Only one element can be added and only after doctype");if($(f)){if(e(x,function(ye){return $(ye)&&ye!==m}))throw new M(C,"Only one doctype is allowed");var ne=e(x,ee);if(m&&x.indexOf(ne)<x.indexOf(m))throw new M(C,"Doctype can only be inserted before an element")}}function fe(c,f,m,x){se(c,f,m),c.nodeType===V.DOCUMENT_NODE&&(x||pe)(c,f,m);var q=f.parentNode;if(q&&q.removeChild(f),f.nodeType===X){var k=f.firstChild;if(k==null)return f;var ne=f.lastChild}else k=ne=f;var he=m?m.previousSibling:c.lastChild;k.previousSibling=he,ne.nextSibling=m,he?he.nextSibling=k:c.firstChild=k,m==null?c.lastChild=ne:m.previousSibling=ne;do{k.parentNode=c;var ye=c.ownerDocument||c;De(k,ye)}while(k!==ne&&(k=k.nextSibling));return K(c.ownerDocument||c,c),f.nodeType==X&&(f.firstChild=f.lastChild=null),f}function De(c,f){if(c.ownerDocument!==f){if(c.ownerDocument=f,c.nodeType===a&&c.attributes)for(var m=0;m<c.attributes.length;m++){var x=c.attributes.item(m);x&&(x.ownerDocument=f)}for(var q=c.firstChild;q;)De(q,f),q=q.nextSibling}}function te(c,f){f.parentNode&&f.parentNode.removeChild(f),f.parentNode=c,f.previousSibling=c.lastChild,f.nextSibling=null,f.previousSibling?f.previousSibling.nextSibling=f:c.firstChild=f,c.lastChild=f,K(c.ownerDocument,c,f);var m=c.ownerDocument||c;return De(f,m),f}W.prototype={nodeName:"#document",nodeType:E,doctype:null,documentElement:null,_inc:1,insertBefore:function(c,f){if(c.nodeType==X){for(var m=c.firstChild;m;){var x=m.nextSibling;this.insertBefore(m,f),m=x}return c}return fe(this,c,f),De(c,this),this.documentElement===null&&c.nodeType===a&&(this.documentElement=c),c},removeChild:function(c){return this.documentElement==c&&(this.documentElement=null),Y(this,c)},replaceChild:function(c,f){fe(this,c,f,ve),De(c,this),f&&this.removeChild(f),ee(c)&&(this.documentElement=c)},importNode:function(c,f){return gt(this,c,f)},getElementById:function(c){var f=null;return J(this.documentElement,function(m){if(m.nodeType==a&&m.getAttribute("id")==c)return f=m,!0}),f},getElementsByClassName:function(c){var f=u(c);return new g(this,function(m){var x=[];return f.length>0&&J(m.documentElement,function(q){if(q!==m&&q.nodeType===a){var k=q.getAttribute("class");if(k){var ne=c===k;if(!ne){var he=u(k);ne=f.every(s(he))}ne&&x.push(q)}}}),x})},createElement:function(c){var f=new ie;f.ownerDocument=this,f.nodeName=c,f.tagName=c,f.localName=c,f.childNodes=new I;var m=f.attributes=new b;return m._ownerElement=f,f},createDocumentFragment:function(){var c=new $e;return c.ownerDocument=this,c.childNodes=new I,c},createTextNode:function(c){var f=new Le;return f.ownerDocument=this,f.appendData(c),f},createComment:function(c){var f=new at;return f.ownerDocument=this,f.appendData(c),f},createCDATASection:function(c){var f=new ct;return f.ownerDocument=this,f.appendData(c),f},createProcessingInstruction:function(c,f){var m=new Se;return m.ownerDocument=this,m.tagName=m.nodeName=m.target=c,m.nodeValue=m.data=f,m},createAttribute:function(c){var f=new xe;return f.ownerDocument=this,f.name=c,f.nodeName=c,f.localName=c,f.specified=!0,f},createEntityReference:function(c){var f=new Fe;return f.ownerDocument=this,f.nodeName=c,f},createElementNS:function(c,f){var m=new ie,x=f.split(":"),q=m.attributes=new b;return m.childNodes=new I,m.ownerDocument=this,m.nodeName=f,m.tagName=f,m.namespaceURI=c,x.length==2?(m.prefix=x[0],m.localName=x[1]):m.localName=f,q._ownerElement=m,m},createAttributeNS:function(c,f){var m=new xe,x=f.split(":");return m.ownerDocument=this,m.nodeName=f,m.name=f,m.namespaceURI=c,m.specified=!0,x.length==2?(m.prefix=x[0],m.localName=x[1]):m.localName=f,m}},d(W,V);function ie(){this._nsMap={}}ie.prototype={nodeType:a,hasAttribute:function(c){return this.getAttributeNode(c)!=null},getAttribute:function(c){var f=this.getAttributeNode(c);return f&&f.value||""},getAttributeNode:function(c){return this.attributes.getNamedItem(c)},setAttribute:function(c,f){var m=this.ownerDocument.createAttribute(c);m.value=m.nodeValue=""+f,this.setAttributeNode(m)},removeAttribute:function(c){var f=this.getAttributeNode(c);f&&this.removeAttributeNode(f)},appendChild:function(c){return c.nodeType===X?this.insertBefore(c,null):te(this,c)},setAttributeNode:function(c){return this.attributes.setNamedItem(c)},setAttributeNodeNS:function(c){return this.attributes.setNamedItemNS(c)},removeAttributeNode:function(c){return this.attributes.removeNamedItem(c.nodeName)},removeAttributeNS:function(c,f){var m=this.getAttributeNodeNS(c,f);m&&this.removeAttributeNode(m)},hasAttributeNS:function(c,f){return this.getAttributeNodeNS(c,f)!=null},getAttributeNS:function(c,f){var m=this.getAttributeNodeNS(c,f);return m&&m.value||""},setAttributeNS:function(c,f,m){var x=this.ownerDocument.createAttributeNS(c,f);x.value=x.nodeValue=""+m,this.setAttributeNode(x)},getAttributeNodeNS:function(c,f){return this.attributes.getNamedItemNS(c,f)},getElementsByTagName:function(c){return new g(this,function(f){var m=[];return J(f,function(x){x!==f&&x.nodeType==a&&(c==="*"||x.tagName==c)&&m.push(x)}),m})},getElementsByTagNameNS:function(c,f){return new g(this,function(m){var x=[];return J(m,function(q){q!==m&&q.nodeType===a&&(c==="*"||q.namespaceURI===c)&&(f==="*"||q.localName==f)&&x.push(q)}),x})}},W.prototype.getElementsByTagName=ie.prototype.getElementsByTagName,W.prototype.getElementsByTagNameNS=ie.prototype.getElementsByTagNameNS,d(ie,V);function xe(){}xe.prototype.nodeType=D,d(xe,V);function Ce(){}Ce.prototype={data:"",substringData:function(c,f){return this.data.substring(c,c+f)},appendData:function(c){c=this.data+c,this.nodeValue=this.data=c,this.length=c.length},insertData:function(c,f){this.replaceData(c,0,f)},appendChild:function(c){throw new Error(z[C])},deleteData:function(c,f){this.replaceData(c,f,"")},replaceData:function(c,f,m){var x=this.data.substring(0,c),q=this.data.substring(c+f);m=x+m+q,this.nodeValue=this.data=m,this.length=m.length}},d(Ce,V);function Le(){}Le.prototype={nodeName:"#text",nodeType:p,splitText:function(c){var f=this.data,m=f.substring(c);f=f.substring(0,c),this.data=this.nodeValue=f,this.length=f.length;var x=this.ownerDocument.createTextNode(m);return this.parentNode&&this.parentNode.insertBefore(x,this.nextSibling),x}},d(Le,Ce);function at(){}at.prototype={nodeName:"#comment",nodeType:N},d(at,Ce);function ct(){}ct.prototype={nodeName:"#cdata-section",nodeType:A},d(ct,Ce);function Re(){}Re.prototype.nodeType=L,d(Re,V);function lt(){}lt.prototype.nodeType=R,d(lt,V);function ze(){}ze.prototype.nodeType=v,d(ze,V);function Fe(){}Fe.prototype.nodeType=w,d(Fe,V);function $e(){}$e.prototype.nodeName="#document-fragment",$e.prototype.nodeType=X,d($e,V);function Se(){}Se.prototype.nodeType=B,d(Se,V);function et(){}et.prototype.serializeToString=function(c,f,m){return ft.call(c,f,m)},V.prototype.toString=ft;function ft(c,f){var m=[],x=this.nodeType==9&&this.documentElement||this,q=x.prefix,k=x.namespaceURI;if(k&&q==null){var q=x.lookupPrefix(k);if(q==null)var ne=[{namespace:k,prefix:null}]}return Me(this,m,c,f,ne),m.join("")}function ht(c,f,m){var x=c.prefix||"",q=c.namespaceURI;if(!q||x==="xml"&&q===t.XML||q===t.XMLNS)return!1;for(var k=m.length;k--;){var ne=m[k];if(ne.prefix===x)return ne.namespace!==q}return!0}function dt(c,f,m){c.push(" ",f,'="',m.replace(/[<>&"\t\n\r]/g,Z),'"')}function Me(c,f,m,x,q){if(q||(q=[]),x)if(c=x(c),c){if(typeof c=="string"){f.push(c);return}}else return;switch(c.nodeType){case a:var k=c.attributes,ne=k.length,le=c.firstChild,he=c.tagName;m=t.isHTML(c.namespaceURI)||m;var ye=he;if(!m&&!c.prefix&&c.namespaceURI){for(var Oe,Ne=0;Ne<k.length;Ne++)if(k.item(Ne).name==="xmlns"){Oe=k.item(Ne).value;break}if(!Oe)for(var qe=q.length-1;qe>=0;qe--){var Ve=q[qe];if(Ve.prefix===""&&Ve.namespace===c.namespaceURI){Oe=Ve.namespace;break}}if(Oe!==c.namespaceURI)for(var qe=q.length-1;qe>=0;qe--){var Ve=q[qe];if(Ve.namespace===c.namespaceURI){Ve.prefix&&(ye=Ve.prefix+":"+he);break}}}f.push("<",ye);for(var Ge=0;Ge<ne;Ge++){var Be=k.item(Ge);Be.prefix=="xmlns"?q.push({prefix:Be.localName,namespace:Be.value}):Be.nodeName=="xmlns"&&q.push({prefix:"",namespace:Be.value})}for(var Ge=0;Ge<ne;Ge++){var Be=k.item(Ge);if(ht(Be,m,q)){var ke=Be.prefix||"",mt=Be.namespaceURI;dt(f,ke?"xmlns:"+ke:"xmlns",mt),q.push({prefix:ke,namespace:mt})}Me(Be,f,m,x,q)}if(he===ye&&ht(c,m,q)){var ke=c.prefix||"",mt=c.namespaceURI;dt(f,ke?"xmlns:"+ke:"xmlns",mt),q.push({prefix:ke,namespace:mt})}if(le||m&&!/^(?:meta|link|img|br|hr|input)$/i.test(he)){if(f.push(">"),m&&/^script$/i.test(he))for(;le;)le.data?f.push(le.data):Me(le,f,m,x,q.slice()),le=le.nextSibling;else for(;le;)Me(le,f,m,x,q.slice()),le=le.nextSibling;f.push("</",ye,">")}else f.push("/>");return;case E:case X:for(var le=c.firstChild;le;)Me(le,f,m,x,q.slice()),le=le.nextSibling;return;case D:return dt(f,c.name,c.value);case p:return f.push(c.data.replace(/[<&>]/g,Z));case A:return f.push("<![CDATA[",c.data,"]]>");case N:return f.push("<!--",c.data,"-->");case L:var yr=c.publicId,rt=c.systemId;if(f.push("<!DOCTYPE ",c.name),yr)f.push(" PUBLIC ",yr),rt&&rt!="."&&f.push(" ",rt),f.push(">");else if(rt&&rt!=".")f.push(" SYSTEM ",rt,">");else{var br=c.internalSubset;br&&f.push(" [",br,"]"),f.push(">")}return;case B:return f.push("<?",c.target," ",c.data,"?>");case w:return f.push("&",c.nodeName,";");default:f.push("??",c.nodeName)}}function gt(c,f,m){var x;switch(f.nodeType){case a:x=f.cloneNode(!1),x.ownerDocument=c;case X:break;case D:m=!0;break}if(x||(x=f.cloneNode(!1)),x.ownerDocument=c,x.parentNode=null,m)for(var q=f.firstChild;q;)x.appendChild(gt(c,q,m)),q=q.nextSibling;return x}function tt(c,f,m){var x=new f.constructor;for(var q in f)if(Object.prototype.hasOwnProperty.call(f,q)){var k=f[q];typeof k!="object"&&k!=x[q]&&(x[q]=k)}switch(f.childNodes&&(x.childNodes=new I),x.ownerDocument=c,x.nodeType){case a:var ne=f.attributes,he=x.attributes=new b,ye=ne.length;he._ownerElement=x;for(var Oe=0;Oe<ye;Oe++)x.setAttributeNode(tt(c,ne.item(Oe),!0));break;case D:m=!0}if(m)for(var Ne=f.firstChild;Ne;)x.appendChild(tt(c,Ne,m)),Ne=Ne.nextSibling;return x}function Dr(c,f,m){c[f]=m}try{if(Object.defineProperty){let c=function(f){switch(f.nodeType){case a:case X:var m=[];for(f=f.firstChild;f;)f.nodeType!==7&&f.nodeType!==8&&m.push(c(f)),f=f.nextSibling;return m.join("");default:return f.nodeValue}};Object.defineProperty(g.prototype,"length",{get:function(){return y(this),this.$$length}}),Object.defineProperty(V.prototype,"textContent",{get:function(){return c(this)},set:function(f){switch(this.nodeType){case a:case X:for(;this.firstChild;)this.removeChild(this.firstChild);(f||String(f))&&this.appendChild(this.ownerDocument.createTextNode(f));break;default:this.data=f,this.value=f,this.nodeValue=f}}}),Dr=function(f,m,x){f["$$"+m]=x}}}catch{}return Pe.DocumentType=Re,Pe.DOMException=M,Pe.DOMImplementation=G,Pe.Element=ie,Pe.Node=V,Pe.NodeList=I,Pe.XMLSerializer=et,Pe}var pt={},_t={},Er;function Yn(){return Er||(Er=1,(function(n){var e=Wt().freeze;n.XML_ENTITIES=e({amp:"&",apos:"'",gt:">",lt:"<",quot:'"'}),n.HTML_ENTITIES=e({Aacute:"Á",aacute:"á",Abreve:"Ă",abreve:"ă",ac:"∾",acd:"∿",acE:"∾̳",Acirc:"Â",acirc:"â",acute:"´",Acy:"А",acy:"а",AElig:"Æ",aelig:"æ",af:"⁡",Afr:"𝔄",afr:"𝔞",Agrave:"À",agrave:"à",alefsym:"ℵ",aleph:"ℵ",Alpha:"Α",alpha:"α",Amacr:"Ā",amacr:"ā",amalg:"⨿",AMP:"&",amp:"&",And:"⩓",and:"∧",andand:"⩕",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsd:"∡",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",Aogon:"Ą",aogon:"ą",Aopf:"𝔸",aopf:"𝕒",ap:"≈",apacir:"⩯",apE:"⩰",ape:"≊",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",Aring:"Å",aring:"å",Ascr:"𝒜",ascr:"𝒶",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",Barwed:"⌆",barwed:"⌅",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",Bcy:"Б",bcy:"б",bdquo:"„",becaus:"∵",Because:"∵",because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",Beta:"Β",beta:"β",beth:"ℶ",between:"≬",Bfr:"𝔅",bfr:"𝔟",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bNot:"⫭",bnot:"⌐",Bopf:"𝔹",bopf:"𝕓",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxDL:"╗",boxDl:"╖",boxdL:"╕",boxdl:"┐",boxDR:"╔",boxDr:"╓",boxdR:"╒",boxdr:"┌",boxH:"═",boxh:"─",boxHD:"╦",boxHd:"╤",boxhD:"╥",boxhd:"┬",boxHU:"╩",boxHu:"╧",boxhU:"╨",boxhu:"┴",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxUL:"╝",boxUl:"╜",boxuL:"╛",boxul:"┘",boxUR:"╚",boxUr:"╙",boxuR:"╘",boxur:"└",boxV:"║",boxv:"│",boxVH:"╬",boxVh:"╫",boxvH:"╪",boxvh:"┼",boxVL:"╣",boxVl:"╢",boxvL:"╡",boxvl:"┤",boxVR:"╠",boxVr:"╟",boxvR:"╞",boxvr:"├",bprime:"‵",Breve:"˘",breve:"˘",brvbar:"¦",Bscr:"ℬ",bscr:"𝒷",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsol:"\\",bsolb:"⧅",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpE:"⪮",bumpe:"≏",Bumpeq:"≎",bumpeq:"≏",Cacute:"Ć",cacute:"ć",Cap:"⋒",cap:"∩",capand:"⩄",capbrcup:"⩉",capcap:"⩋",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",Ccaron:"Č",ccaron:"č",Ccedil:"Ç",ccedil:"ç",Ccirc:"Ĉ",ccirc:"ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",Cdot:"Ċ",cdot:"ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",CenterDot:"·",centerdot:"·",Cfr:"ℭ",cfr:"𝔠",CHcy:"Ч",chcy:"ч",check:"✓",checkmark:"✓",Chi:"Χ",chi:"χ",cir:"○",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cirE:"⧃",cire:"≗",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",Colon:"∷",colon:":",Colone:"⩴",colone:"≔",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",Conint:"∯",conint:"∮",ContourIntegral:"∮",Copf:"ℂ",copf:"𝕔",coprod:"∐",Coproduct:"∐",COPY:"©",copy:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",Cross:"⨯",cross:"✗",Cscr:"𝒞",cscr:"𝒸",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",Cup:"⋓",cup:"∪",cupbrcap:"⩈",CupCap:"≍",cupcap:"⩆",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",Dagger:"‡",dagger:"†",daleth:"ℸ",Darr:"↡",dArr:"⇓",darr:"↓",dash:"‐",Dashv:"⫤",dashv:"⊣",dbkarow:"⤏",dblac:"˝",Dcaron:"Ď",dcaron:"ď",Dcy:"Д",dcy:"д",DD:"ⅅ",dd:"ⅆ",ddagger:"‡",ddarr:"⇊",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",Delta:"Δ",delta:"δ",demptyv:"⦱",dfisht:"⥿",Dfr:"𝔇",dfr:"𝔡",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",Diamond:"⋄",diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",DJcy:"Ђ",djcy:"ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",Dopf:"𝔻",dopf:"𝕕",Dot:"¨",dot:"˙",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",DownArrow:"↓",Downarrow:"⇓",downarrow:"↓",DownArrowBar:"⤓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVector:"↽",DownLeftVectorBar:"⥖",DownRightTeeVector:"⥟",DownRightVector:"⇁",DownRightVectorBar:"⥗",DownTee:"⊤",DownTeeArrow:"↧",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",Dscr:"𝒟",dscr:"𝒹",DScy:"Ѕ",dscy:"ѕ",dsol:"⧶",Dstrok:"Đ",dstrok:"đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",DZcy:"Џ",dzcy:"џ",dzigrarr:"⟿",Eacute:"É",eacute:"é",easter:"⩮",Ecaron:"Ě",ecaron:"ě",ecir:"≖",Ecirc:"Ê",ecirc:"ê",ecolon:"≕",Ecy:"Э",ecy:"э",eDDot:"⩷",Edot:"Ė",eDot:"≑",edot:"ė",ee:"ⅇ",efDot:"≒",Efr:"𝔈",efr:"𝔢",eg:"⪚",Egrave:"È",egrave:"è",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",Emacr:"Ē",emacr:"ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp:" ",emsp13:" ",emsp14:" ",ENG:"Ŋ",eng:"ŋ",ensp:" ",Eogon:"Ę",eogon:"ę",Eopf:"𝔼",eopf:"𝕖",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",Epsilon:"Ε",epsilon:"ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",Escr:"ℰ",escr:"ℯ",esdot:"≐",Esim:"⩳",esim:"≂",Eta:"Η",eta:"η",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",ExponentialE:"ⅇ",exponentiale:"ⅇ",fallingdotseq:"≒",Fcy:"Ф",fcy:"ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",Ffr:"𝔉",ffr:"𝔣",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",Fopf:"𝔽",fopf:"𝕗",ForAll:"∀",forall:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",Fscr:"ℱ",fscr:"𝒻",gacute:"ǵ",Gamma:"Γ",gamma:"γ",Gammad:"Ϝ",gammad:"ϝ",gap:"⪆",Gbreve:"Ğ",gbreve:"ğ",Gcedil:"Ģ",Gcirc:"Ĝ",gcirc:"ĝ",Gcy:"Г",gcy:"г",Gdot:"Ġ",gdot:"ġ",gE:"≧",ge:"≥",gEl:"⪌",gel:"⋛",geq:"≥",geqq:"≧",geqslant:"⩾",ges:"⩾",gescc:"⪩",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",Gfr:"𝔊",gfr:"𝔤",Gg:"⋙",gg:"≫",ggg:"⋙",gimel:"ℷ",GJcy:"Ѓ",gjcy:"ѓ",gl:"≷",gla:"⪥",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gnE:"≩",gne:"⪈",gneq:"⪈",gneqq:"≩",gnsim:"⋧",Gopf:"𝔾",gopf:"𝕘",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",Gscr:"𝒢",gscr:"ℊ",gsim:"≳",gsime:"⪎",gsiml:"⪐",Gt:"≫",GT:">",gt:">",gtcc:"⪧",gtcir:"⩺",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",HARDcy:"Ъ",hardcy:"ъ",hArr:"⇔",harr:"↔",harrcir:"⥈",harrw:"↭",Hat:"^",hbar:"ℏ",Hcirc:"Ĥ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",Hfr:"ℌ",hfr:"𝔥",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",Hopf:"ℍ",hopf:"𝕙",horbar:"―",HorizontalLine:"─",Hscr:"ℋ",hscr:"𝒽",hslash:"ℏ",Hstrok:"Ħ",hstrok:"ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",Iacute:"Í",iacute:"í",ic:"⁣",Icirc:"Î",icirc:"î",Icy:"И",icy:"и",Idot:"İ",IEcy:"Е",iecy:"е",iexcl:"¡",iff:"⇔",Ifr:"ℑ",ifr:"𝔦",Igrave:"Ì",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",IJlig:"IJ",ijlig:"ij",Im:"ℑ",Imacr:"Ī",imacr:"ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",imof:"⊷",imped:"Ƶ",Implies:"⇒",in:"∈",incare:"℅",infin:"∞",infintie:"⧝",inodot:"ı",Int:"∬",int:"∫",intcal:"⊺",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",IOcy:"Ё",iocy:"ё",Iogon:"Į",iogon:"į",Iopf:"𝕀",iopf:"𝕚",Iota:"Ι",iota:"ι",iprod:"⨼",iquest:"¿",Iscr:"ℐ",iscr:"𝒾",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",Itilde:"Ĩ",itilde:"ĩ",Iukcy:"І",iukcy:"і",Iuml:"Ï",iuml:"ï",Jcirc:"Ĵ",jcirc:"ĵ",Jcy:"Й",jcy:"й",Jfr:"𝔍",jfr:"𝔧",jmath:"ȷ",Jopf:"𝕁",jopf:"𝕛",Jscr:"𝒥",jscr:"𝒿",Jsercy:"Ј",jsercy:"ј",Jukcy:"Є",jukcy:"є",Kappa:"Κ",kappa:"κ",kappav:"ϰ",Kcedil:"Ķ",kcedil:"ķ",Kcy:"К",kcy:"к",Kfr:"𝔎",kfr:"𝔨",kgreen:"ĸ",KHcy:"Х",khcy:"х",KJcy:"Ќ",kjcy:"ќ",Kopf:"𝕂",kopf:"𝕜",Kscr:"𝒦",kscr:"𝓀",lAarr:"⇚",Lacute:"Ĺ",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",Lambda:"Λ",lambda:"λ",Lang:"⟪",lang:"⟨",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",Larr:"↞",lArr:"⇐",larr:"←",larrb:"⇤",larrbfs:"⤟",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",lat:"⪫",lAtail:"⤛",latail:"⤙",late:"⪭",lates:"⪭︀",lBarr:"⤎",lbarr:"⤌",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",Lcaron:"Ľ",lcaron:"ľ",Lcedil:"Ļ",lcedil:"ļ",lceil:"⌈",lcub:"{",Lcy:"Л",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",lE:"≦",le:"≤",LeftAngleBracket:"⟨",LeftArrow:"←",Leftarrow:"⇐",leftarrow:"←",LeftArrowBar:"⇤",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVector:"⇃",LeftDownVectorBar:"⥙",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",LeftRightArrow:"↔",Leftrightarrow:"⇔",leftrightarrow:"↔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTee:"⊣",LeftTeeArrow:"↤",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangle:"⊲",LeftTriangleBar:"⧏",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVector:"↿",LeftUpVectorBar:"⥘",LeftVector:"↼",LeftVectorBar:"⥒",lEg:"⪋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",les:"⩽",lescc:"⪨",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",Lfr:"𝔏",lfr:"𝔩",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",LJcy:"Љ",ljcy:"љ",Ll:"⋘",ll:"≪",llarr:"⇇",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",Lmidot:"Ŀ",lmidot:"ŀ",lmoust:"⎰",lmoustache:"⎰",lnap:"⪉",lnapprox:"⪉",lnE:"≨",lne:"⪇",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",LongLeftArrow:"⟵",Longleftarrow:"⟸",longleftarrow:"⟵",LongLeftRightArrow:"⟷",Longleftrightarrow:"⟺",longleftrightarrow:"⟷",longmapsto:"⟼",LongRightArrow:"⟶",Longrightarrow:"⟹",longrightarrow:"⟶",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",Lopf:"𝕃",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",Lscr:"ℒ",lscr:"𝓁",Lsh:"↰",lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",Lstrok:"Ł",lstrok:"ł",Lt:"≪",LT:"<",lt:"<",ltcc:"⪦",ltcir:"⩹",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",Map:"⤅",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",Mcy:"М",mcy:"м",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",mfr:"𝔪",mho:"℧",micro:"µ",mid:"∣",midast:"*",midcir:"⫰",middot:"·",minus:"−",minusb:"⊟",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",Mopf:"𝕄",mopf:"𝕞",mp:"∓",Mscr:"ℳ",mscr:"𝓂",mstpos:"∾",Mu:"Μ",mu:"μ",multimap:"⊸",mumap:"⊸",nabla:"∇",Nacute:"Ń",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natur:"♮",natural:"♮",naturals:"ℕ",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",Ncaron:"Ň",ncaron:"ň",Ncedil:"Ņ",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",Ncy:"Н",ncy:"н",ndash:"–",ne:"≠",nearhk:"⤤",neArr:"⇗",nearr:"↗",nearrow:"↗",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:`
2
+ `,nexist:"∄",nexists:"∄",Nfr:"𝔑",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",nGt:"≫⃒",ngt:"≯",ngtr:"≯",nGtv:"≫̸",nhArr:"⇎",nharr:"↮",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",NJcy:"Њ",njcy:"њ",nlArr:"⇍",nlarr:"↚",nldr:"‥",nlE:"≦̸",nle:"≰",nLeftarrow:"⇍",nleftarrow:"↚",nLeftrightarrow:"⇎",nleftrightarrow:"↮",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nLt:"≪⃒",nlt:"≮",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",Nopf:"ℕ",nopf:"𝕟",Not:"⫬",not:"¬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangle:"⋪",NotLeftTriangleBar:"⧏̸",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangle:"⋫",NotRightTriangleBar:"⧐̸",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",npar:"∦",nparallel:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",npre:"⪯̸",nprec:"⊀",npreceq:"⪯̸",nrArr:"⇏",nrarr:"↛",nrarrc:"⤳̸",nrarrw:"↝̸",nRightarrow:"⇏",nrightarrow:"↛",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",Nscr:"𝒩",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",Ntilde:"Ñ",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",Nu:"Ν",nu:"ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nVDash:"⊯",nVdash:"⊮",nvDash:"⊭",nvdash:"⊬",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwArr:"⇖",nwarr:"↖",nwarrow:"↖",nwnear:"⤧",Oacute:"Ó",oacute:"ó",oast:"⊛",ocir:"⊚",Ocirc:"Ô",ocirc:"ô",Ocy:"О",ocy:"о",odash:"⊝",Odblac:"Ő",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",OElig:"Œ",oelig:"œ",ofcir:"⦿",Ofr:"𝔒",ofr:"𝔬",ogon:"˛",Ograve:"Ò",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",Omacr:"Ō",omacr:"ō",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",omid:"⦶",ominus:"⊖",Oopf:"𝕆",oopf:"𝕠",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",Or:"⩔",or:"∨",orarr:"↻",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",Oscr:"𝒪",oscr:"ℴ",Oslash:"Ø",oslash:"ø",osol:"⊘",Otilde:"Õ",otilde:"õ",Otimes:"⨷",otimes:"⊗",otimesas:"⨶",Ouml:"Ö",ouml:"ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",par:"∥",para:"¶",parallel:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",Pcy:"П",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",Pfr:"𝔓",pfr:"𝔭",Phi:"Φ",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",Pi:"Π",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plus:"+",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",Popf:"ℙ",popf:"𝕡",pound:"£",Pr:"⪻",pr:"≺",prap:"⪷",prcue:"≼",prE:"⪳",pre:"⪯",prec:"≺",precapprox:"⪷",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",precsim:"≾",Prime:"″",prime:"′",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportion:"∷",Proportional:"∝",propto:"∝",prsim:"≾",prurel:"⊰",Pscr:"𝒫",pscr:"𝓅",Psi:"Ψ",psi:"ψ",puncsp:" ",Qfr:"𝔔",qfr:"𝔮",qint:"⨌",Qopf:"ℚ",qopf:"𝕢",qprime:"⁗",Qscr:"𝒬",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",QUOT:'"',quot:'"',rAarr:"⇛",race:"∽̱",Racute:"Ŕ",racute:"ŕ",radic:"√",raemptyv:"⦳",Rang:"⟫",rang:"⟩",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",Rarr:"↠",rArr:"⇒",rarr:"→",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",Rarrtl:"⤖",rarrtl:"↣",rarrw:"↝",rAtail:"⤜",ratail:"⤚",ratio:"∶",rationals:"ℚ",RBarr:"⤐",rBarr:"⤏",rbarr:"⤍",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",Rcaron:"Ř",rcaron:"ř",Rcedil:"Ŗ",rcedil:"ŗ",rceil:"⌉",rcub:"}",Rcy:"Р",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",Re:"ℜ",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",rect:"▭",REG:"®",reg:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",Rfr:"ℜ",rfr:"𝔯",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",Rho:"Ρ",rho:"ρ",rhov:"ϱ",RightAngleBracket:"⟩",RightArrow:"→",Rightarrow:"⇒",rightarrow:"→",RightArrowBar:"⇥",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVector:"⇂",RightDownVectorBar:"⥕",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTee:"⊢",RightTeeArrow:"↦",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangle:"⊳",RightTriangleBar:"⧐",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVector:"↾",RightUpVectorBar:"⥔",RightVector:"⇀",RightVectorBar:"⥓",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoust:"⎱",rmoustache:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",Ropf:"ℝ",ropf:"𝕣",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",Rscr:"ℛ",rscr:"𝓇",Rsh:"↱",rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",Sacute:"Ś",sacute:"ś",sbquo:"‚",Sc:"⪼",sc:"≻",scap:"⪸",Scaron:"Š",scaron:"š",sccue:"≽",scE:"⪴",sce:"⪰",Scedil:"Ş",scedil:"ş",Scirc:"Ŝ",scirc:"ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",Scy:"С",scy:"с",sdot:"⋅",sdotb:"⊡",sdote:"⩦",searhk:"⤥",seArr:"⇘",searr:"↘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",Sfr:"𝔖",sfr:"𝔰",sfrown:"⌢",sharp:"♯",SHCHcy:"Щ",shchcy:"щ",SHcy:"Ш",shcy:"ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",SOFTcy:"Ь",softcy:"ь",sol:"/",solb:"⧄",solbar:"⌿",Sopf:"𝕊",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",squ:"□",Square:"□",square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squf:"▪",srarr:"→",Sscr:"𝒮",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",Star:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",Sub:"⋐",sub:"⊂",subdot:"⪽",subE:"⫅",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",Subset:"⋐",subset:"⊂",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succ:"≻",succapprox:"⪸",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",Sum:"∑",sum:"∑",sung:"♪",Sup:"⋑",sup:"⊃",sup1:"¹",sup2:"²",sup3:"³",supdot:"⪾",supdsub:"⫘",supE:"⫆",supe:"⊇",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",Supset:"⋑",supset:"⊃",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swArr:"⇙",swarr:"↙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:" ",target:"⌖",Tau:"Τ",tau:"τ",tbrk:"⎴",Tcaron:"Ť",tcaron:"ť",Tcedil:"Ţ",tcedil:"ţ",Tcy:"Т",tcy:"т",tdot:"⃛",telrec:"⌕",Tfr:"𝔗",tfr:"𝔱",there4:"∴",Therefore:"∴",therefore:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",thinsp:" ",ThinSpace:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",Tilde:"∼",tilde:"˜",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",times:"×",timesb:"⊠",timesbar:"⨱",timesd:"⨰",tint:"∭",toea:"⤨",top:"⊤",topbot:"⌶",topcir:"⫱",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",TRADE:"™",trade:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",Tscr:"𝒯",tscr:"𝓉",TScy:"Ц",tscy:"ц",TSHcy:"Ћ",tshcy:"ћ",Tstrok:"Ŧ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",Uacute:"Ú",uacute:"ú",Uarr:"↟",uArr:"⇑",uarr:"↑",Uarrocir:"⥉",Ubrcy:"Ў",ubrcy:"ў",Ubreve:"Ŭ",ubreve:"ŭ",Ucirc:"Û",ucirc:"û",Ucy:"У",ucy:"у",udarr:"⇅",Udblac:"Ű",udblac:"ű",udhar:"⥮",ufisht:"⥾",Ufr:"𝔘",ufr:"𝔲",Ugrave:"Ù",ugrave:"ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",Umacr:"Ū",umacr:"ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",uogon:"ų",Uopf:"𝕌",uopf:"𝕦",UpArrow:"↑",Uparrow:"⇑",uparrow:"↑",UpArrowBar:"⤒",UpArrowDownArrow:"⇅",UpDownArrow:"↕",Updownarrow:"⇕",updownarrow:"↕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",Upsi:"ϒ",upsi:"υ",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",UpTee:"⊥",UpTeeArrow:"↥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",Uring:"Ů",uring:"ů",urtri:"◹",Uscr:"𝒰",uscr:"𝓊",utdot:"⋰",Utilde:"Ũ",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",Uuml:"Ü",uuml:"ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",vArr:"⇕",varr:"↕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",Vbar:"⫫",vBar:"⫨",vBarv:"⫩",Vcy:"В",vcy:"в",VDash:"⊫",Vdash:"⊩",vDash:"⊨",vdash:"⊢",Vdashl:"⫦",Vee:"⋁",vee:"∨",veebar:"⊻",veeeq:"≚",vellip:"⋮",Verbar:"‖",verbar:"|",Vert:"‖",vert:"|",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",Vopf:"𝕍",vopf:"𝕧",vprop:"∝",vrtri:"⊳",Vscr:"𝒱",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",Vvdash:"⊪",vzigzag:"⦚",Wcirc:"Ŵ",wcirc:"ŵ",wedbar:"⩟",Wedge:"⋀",wedge:"∧",wedgeq:"≙",weierp:"℘",Wfr:"𝔚",wfr:"𝔴",Wopf:"𝕎",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",Wscr:"𝒲",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",Xfr:"𝔛",xfr:"𝔵",xhArr:"⟺",xharr:"⟷",Xi:"Ξ",xi:"ξ",xlArr:"⟸",xlarr:"⟵",xmap:"⟼",xnis:"⋻",xodot:"⨀",Xopf:"𝕏",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrArr:"⟹",xrarr:"⟶",Xscr:"𝒳",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",Yacute:"Ý",yacute:"ý",YAcy:"Я",yacy:"я",Ycirc:"Ŷ",ycirc:"ŷ",Ycy:"Ы",ycy:"ы",yen:"¥",Yfr:"𝔜",yfr:"𝔶",YIcy:"Ї",yicy:"ї",Yopf:"𝕐",yopf:"𝕪",Yscr:"𝒴",yscr:"𝓎",YUcy:"Ю",yucy:"ю",Yuml:"Ÿ",yuml:"ÿ",Zacute:"Ź",zacute:"ź",Zcaron:"Ž",zcaron:"ž",Zcy:"З",zcy:"з",Zdot:"Ż",zdot:"ż",zeetrf:"ℨ",ZeroWidthSpace:"​",Zeta:"Ζ",zeta:"ζ",Zfr:"ℨ",zfr:"𝔷",ZHcy:"Ж",zhcy:"ж",zigrarr:"⇝",Zopf:"ℤ",zopf:"𝕫",Zscr:"𝒵",zscr:"𝓏",zwj:"‍",zwnj:"‌"}),n.entityMap=n.HTML_ENTITIES})(_t)),_t}var Nt={},xr;function Jn(){if(xr)return Nt;xr=1;var n=Wt().NAMESPACE,e=/[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,t=new RegExp("[\\-\\.0-9"+e.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]"),r=new RegExp("^"+e.source+t.source+"*(?::"+e.source+t.source+"*)?$"),i=0,o=1,u=2,s=3,l=4,d=5,h=6,a=7;function D(C,P){this.message=C,this.locator=P,Error.captureStackTrace&&Error.captureStackTrace(this,D)}D.prototype=new Error,D.prototype.name=D.name;function p(){}p.prototype={parse:function(C,P,F){var M=this.domBuilder;M.startDocument(),L(P,P={}),A(C,P,F,M,this.errorHandler),M.endDocument()}};function A(C,P,F,M,I){function g(te){if(te>65535){te-=65536;var ie=55296+(te>>10),xe=56320+(te&1023);return String.fromCharCode(ie,xe)}else return String.fromCharCode(te)}function y(te){var ie=te.slice(1,-1);return Object.hasOwnProperty.call(F,ie)?F[ie]:ie.charAt(0)==="#"?g(parseInt(ie.substr(1).replace("x","0x"))):(I.error("entity not found:"+te),te)}function b(te){if(te>W){var ie=C.substring(W,te).replace(/&#?\w+;/g,y);V&&T(W),M.characters(ie,0,te-W),W=te}}function T(te,ie){for(;te>=H&&(ie=G.exec(C));)O=ie.index,H=O+ie[0].length,V.lineNumber++;V.columnNumber=te-O+1}for(var O=0,H=0,G=/.*(?:\r\n?|\n)|.*$/g,V=M.locator,Z=[{currentNSMap:P}],J={},W=0;;){try{var U=C.indexOf("<",W);if(U<0){if(!C.substr(W).match(/^\s*$/)){var _=M.doc,K=_.createTextNode(C.substr(W));_.appendChild(K),M.currentElement=K}return}switch(U>W&&b(U),C.charAt(U+1)){case"/":var se=C.indexOf(">",U+3),Y=C.substring(U+2,se).replace(/[ \t\n\r]+$/g,""),re=Z.pop();se<0?(Y=C.substring(U+2).replace(/[\s<].*/,""),I.error("end tag name: "+Y+" is not complete:"+re.tagName),se=U+1+Y.length):Y.match(/\s</)&&(Y=Y.replace(/[\s<].*/,""),I.error("end tag name: "+Y+" maybe not complete"),se=U+1+Y.length);var ae=re.localNSMap,$=re.tagName==Y,ee=$||re.tagName&&re.tagName.toLowerCase()==Y.toLowerCase();if(ee){if(M.endElement(re.uri,re.localName,Y),ae)for(var ce in ae)Object.prototype.hasOwnProperty.call(ae,ce)&&M.endPrefixMapping(ce);$||I.fatalError("end tag name: "+Y+" is not match the current start tagName:"+re.tagName)}else Z.push(re);se++;break;case"?":V&&T(U),se=R(C,U,M);break;case"!":V&&T(U),se=X(C,U,M,I);break;default:V&&T(U);var oe=new S,ge=Z[Z.length-1].currentNSMap,se=v(C,U,oe,ge,y,I),pe=oe.length;if(!oe.closed&&E(C,se,oe.tagName,J)&&(oe.closed=!0,F.nbsp||I.warning("unclosed xml attribute")),V&&pe){for(var ve=w(V,{}),fe=0;fe<pe;fe++){var De=oe[fe];T(De.offset),De.locator=w(V,{})}M.locator=ve,B(oe,M,ge)&&Z.push(oe),M.locator=V}else B(oe,M,ge)&&Z.push(oe);n.isHTML(oe.uri)&&!oe.closed?se=N(C,se,oe.tagName,y,M):se++}}catch(te){if(te instanceof D)throw te;I.error("element parse error: "+te),se=-1}se>W?W=se:b(Math.max(U,W)+1)}}function w(C,P){return P.lineNumber=C.lineNumber,P.columnNumber=C.columnNumber,P}function v(C,P,F,M,I,g){function y(V,Z,J){F.attributeNames.hasOwnProperty(V)&&g.fatalError("Attribute "+V+" redefined"),F.addValue(V,Z.replace(/[\t\n\r]/g," ").replace(/&#?\w+;/g,I),J)}for(var b,T,O=++P,H=i;;){var G=C.charAt(O);switch(G){case"=":if(H===o)b=C.slice(P,O),H=s;else if(H===u)H=s;else throw new Error("attribute equal must after attrName");break;case"'":case'"':if(H===s||H===o)if(H===o&&(g.warning('attribute value must after "="'),b=C.slice(P,O)),P=O+1,O=C.indexOf(G,P),O>0)T=C.slice(P,O),y(b,T,P-1),H=d;else throw new Error("attribute value no end '"+G+"' match");else if(H==l)T=C.slice(P,O),y(b,T,P),g.warning('attribute "'+b+'" missed start quot('+G+")!!"),P=O+1,H=d;else throw new Error('attribute value must after "="');break;case"/":switch(H){case i:F.setTagName(C.slice(P,O));case d:case h:case a:H=a,F.closed=!0;case l:case o:break;case u:F.closed=!0;break;default:throw new Error("attribute invalid close char('/')")}break;case"":return g.error("unexpected end of input"),H==i&&F.setTagName(C.slice(P,O)),O;case">":switch(H){case i:F.setTagName(C.slice(P,O));case d:case h:case a:break;case l:case o:T=C.slice(P,O),T.slice(-1)==="/"&&(F.closed=!0,T=T.slice(0,-1));case u:H===u&&(T=b),H==l?(g.warning('attribute "'+T+'" missed quot(")!'),y(b,T,P)):((!n.isHTML(M[""])||!T.match(/^(?:disabled|checked|selected)$/i))&&g.warning('attribute "'+T+'" missed value!! "'+T+'" instead!!'),y(T,T,P));break;case s:throw new Error("attribute value missed!!")}return O;case"€":G=" ";default:if(G<=" ")switch(H){case i:F.setTagName(C.slice(P,O)),H=h;break;case o:b=C.slice(P,O),H=u;break;case l:var T=C.slice(P,O);g.warning('attribute "'+T+'" missed quot(")!!'),y(b,T,P);case d:H=h;break}else switch(H){case u:F.tagName,(!n.isHTML(M[""])||!b.match(/^(?:disabled|checked|selected)$/i))&&g.warning('attribute "'+b+'" missed value!! "'+b+'" instead2!!'),y(b,b,P),P=O,H=o;break;case d:g.warning('attribute space is required"'+b+'"!!');case h:H=o,P=O;break;case s:H=l,P=O;break;case a:throw new Error("elements closed character '/' and '>' must be connected to")}}O++}}function B(C,P,F){for(var M=C.tagName,I=null,G=C.length;G--;){var g=C[G],y=g.qName,b=g.value,V=y.indexOf(":");if(V>0)var T=g.prefix=y.slice(0,V),O=y.slice(V+1),H=T==="xmlns"&&O;else O=y,T=null,H=y==="xmlns"&&"";g.localName=O,H!==!1&&(I==null&&(I={},L(F,F={})),F[H]=I[H]=b,g.uri=n.XMLNS,P.startPrefixMapping(H,b))}for(var G=C.length;G--;){g=C[G];var T=g.prefix;T&&(T==="xml"&&(g.uri=n.XML),T!=="xmlns"&&(g.uri=F[T||""]))}var V=M.indexOf(":");V>0?(T=C.prefix=M.slice(0,V),O=C.localName=M.slice(V+1)):(T=null,O=C.localName=M);var Z=C.uri=F[T||""];if(P.startElement(Z,O,M,C),C.closed){if(P.endElement(Z,O,M),I)for(T in I)Object.prototype.hasOwnProperty.call(I,T)&&P.endPrefixMapping(T)}else return C.currentNSMap=F,C.localNSMap=I,!0}function N(C,P,F,M,I){if(/^(?:script|textarea)$/i.test(F)){var g=C.indexOf("</"+F+">",P),y=C.substring(P+1,g);if(/[&<]/.test(y))return/^script$/i.test(F)?(I.characters(y,0,y.length),g):(y=y.replace(/&#?\w+;/g,M),I.characters(y,0,y.length),g)}return P+1}function E(C,P,F,M){var I=M[F];return I==null&&(I=C.lastIndexOf("</"+F+">"),I<P&&(I=C.lastIndexOf("</"+F)),M[F]=I),I<P}function L(C,P){for(var F in C)Object.prototype.hasOwnProperty.call(C,F)&&(P[F]=C[F])}function X(C,P,F,M){var I=C.charAt(P+2);switch(I){case"-":if(C.charAt(P+3)==="-"){var g=C.indexOf("-->",P+4);return g>P?(F.comment(C,P+4,g-P-4),g+3):(M.error("Unclosed comment"),-1)}else return-1;default:if(C.substr(P+3,6)=="CDATA["){var g=C.indexOf("]]>",P+9);return F.startCDATA(),F.characters(C,P+9,g-P-9),F.endCDATA(),g+3}var y=z(C,P),b=y.length;if(b>1&&/!doctype/i.test(y[0][0])){var T=y[1][0],O=!1,H=!1;b>3&&(/^public$/i.test(y[2][0])?(O=y[3][0],H=b>4&&y[4][0]):/^system$/i.test(y[2][0])&&(H=y[3][0]));var G=y[b-1];return F.startDTD(T,O,H),F.endDTD(),G.index+G[0].length}}return-1}function R(C,P,F){var M=C.indexOf("?>",P);if(M){var I=C.substring(P,M).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);return I?(I[0].length,F.processingInstruction(I[1],I[2]),M+2):-1}return-1}function S(){this.attributeNames={}}S.prototype={setTagName:function(C){if(!r.test(C))throw new Error("invalid tagName:"+C);this.tagName=C},addValue:function(C,P,F){if(!r.test(C))throw new Error("invalid attribute:"+C);this.attributeNames[C]=this.length,this[this.length++]={qName:C,value:P,offset:F}},length:0,getLocalName:function(C){return this[C].localName},getLocator:function(C){return this[C].locator},getQName:function(C){return this[C].qName},getURI:function(C){return this[C].uri},getValue:function(C){return this[C].value}};function z(C,P){var F,M=[],I=/'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;for(I.lastIndex=P,I.exec(C);F=I.exec(C);)if(M.push(F),F[1])return M}return Nt.XMLReader=p,Nt.ParseError=D,Nt}var Nr;function Zn(){if(Nr)return pt;Nr=1;var n=Wt(),e=Yr(),t=Yn(),r=Jn(),i=e.DOMImplementation,o=n.NAMESPACE,u=r.ParseError,s=r.XMLReader;function l(v){return v.replace(/\r[\n\u0085]/g,`
3
+ `).replace(/[\r\u0085\u2028]/g,`
4
+ `)}function d(v){this.options=v||{locator:{}}}d.prototype.parseFromString=function(v,B){var N=this.options,E=new s,L=N.domBuilder||new a,X=N.errorHandler,R=N.locator,S=N.xmlns||{},z=/\/x?html?$/.test(B),C=z?t.HTML_ENTITIES:t.XML_ENTITIES;R&&L.setDocumentLocator(R),E.errorHandler=h(X,L,R),E.domBuilder=N.domBuilder||L,z&&(S[""]=o.HTML),S.xml=S.xml||o.XML;var P=N.normalizeLineEndings||l;return v&&typeof v=="string"?E.parse(P(v),S,C):E.errorHandler.error("invalid doc source"),L.doc};function h(v,B,N){if(!v){if(B instanceof a)return B;v=B}var E={},L=v instanceof Function;N=N||{};function X(R){var S=v[R];!S&&L&&(S=v.length==2?function(z){v(R,z)}:v),E[R]=S&&function(z){S("[xmldom "+R+"] "+z+p(N))}||function(){}}return X("warning"),X("error"),X("fatalError"),E}function a(){this.cdata=!1}function D(v,B){B.lineNumber=v.lineNumber,B.columnNumber=v.columnNumber}a.prototype={startDocument:function(){this.doc=new i().createDocument(null,null,null),this.locator&&(this.doc.documentURI=this.locator.systemId)},startElement:function(v,B,N,E){var L=this.doc,X=L.createElementNS(v,N||B),R=E.length;w(this,X),this.currentElement=X,this.locator&&D(this.locator,X);for(var S=0;S<R;S++){var v=E.getURI(S),z=E.getValue(S),N=E.getQName(S),C=L.createAttributeNS(v,N);this.locator&&D(E.getLocator(S),C),C.value=C.nodeValue=z,X.setAttributeNode(C)}},endElement:function(v,B,N){var E=this.currentElement;E.tagName,this.currentElement=E.parentNode},startPrefixMapping:function(v,B){},endPrefixMapping:function(v){},processingInstruction:function(v,B){var N=this.doc.createProcessingInstruction(v,B);this.locator&&D(this.locator,N),w(this,N)},ignorableWhitespace:function(v,B,N){},characters:function(v,B,N){if(v=A.apply(this,arguments),v){if(this.cdata)var E=this.doc.createCDATASection(v);else var E=this.doc.createTextNode(v);this.currentElement?this.currentElement.appendChild(E):/^\s*$/.test(v)&&this.doc.appendChild(E),this.locator&&D(this.locator,E)}},skippedEntity:function(v){},endDocument:function(){this.doc.normalize()},setDocumentLocator:function(v){(this.locator=v)&&(v.lineNumber=0)},comment:function(v,B,N){v=A.apply(this,arguments);var E=this.doc.createComment(v);this.locator&&D(this.locator,E),w(this,E)},startCDATA:function(){this.cdata=!0},endCDATA:function(){this.cdata=!1},startDTD:function(v,B,N){var E=this.doc.implementation;if(E&&E.createDocumentType){var L=E.createDocumentType(v,B,N);this.locator&&D(this.locator,L),w(this,L),this.doc.doctype=L}},warning:function(v){console.warn("[xmldom warning] "+v,p(this.locator))},error:function(v){console.error("[xmldom error] "+v,p(this.locator))},fatalError:function(v){throw new u(v,this.locator)}};function p(v){if(v)return`
5
+ @`+(v.systemId||"")+"#[line:"+v.lineNumber+",col:"+v.columnNumber+"]"}function A(v,B,N){return typeof v=="string"?v.substr(B,N):v.length>=B+N||B?new java.lang.String(v,B,N)+"":v}"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace(/\w+/g,function(v){a.prototype[v]=function(){return null}});function w(v,B){v.currentElement?v.currentElement.appendChild(B):v.doc.appendChild(B)}return pt.__DOMHandler=a,pt.normalizeLineEndings=l,pt.DOMParser=d,pt}var Pr;function Kn(){if(Pr)return At;Pr=1;var n=Yr();return At.DOMImplementation=n.DOMImplementation,At.XMLSerializer=n.XMLSerializer,At.DOMParser=Zn().DOMParser,At}var _n=Rt.exports,Tr;function $n(){return Tr||(Tr=1,(function(n){(function(e,t){n.exports?n.exports=t(Kn().DOMParser):e.X2JS=t()})(_n,function(e){return function(r){var i="3.4.4";r=r||{};function o(){r.arrayAccessForm=r.arrayAccessForm||"none",r.emptyNodeForm=r.emptyNodeForm||"text",r.jsAttributeFilter=r.jsAttributeFilter,r.jsAttributeConverter=r.jsAttributeConverter,r.attributeConverters=r.attributeConverters||[],r.datetimeAccessFormPaths=r.datetimeAccessFormPaths||[],r.arrayAccessFormPaths=r.arrayAccessFormPaths||[],r.xmldomOptions=r.xmldomOptions||{},r.enableToStringFunc===void 0&&(r.enableToStringFunc=!0),r.skipEmptyTextNodesForObj===void 0&&(r.skipEmptyTextNodesForObj=!0),r.stripWhitespaces===void 0&&(r.stripWhitespaces=!0),r.useDoubleQuotes===void 0&&(r.useDoubleQuotes=!0),r.ignoreRoot===void 0&&(r.ignoreRoot=!1),r.escapeMode===void 0&&(r.escapeMode=!0),r.attributePrefix===void 0&&(r.attributePrefix="_"),r.selfClosingElements===void 0&&(r.selfClosingElements=!0),r.keepCData===void 0&&(r.keepCData=!1),r.keepText===void 0&&(r.keepText=!1),r.jsDateUTC===void 0&&(r.jsDateUTC=!1)}function u(){function g(y){var b=String(y);return b.length===1&&(b="0"+b),b}typeof String.prototype.trim!="function"&&(String.prototype.trim=function(){return this.replace(/^\s+|^\n+|(\s|\n)+$/g,"")}),typeof Date.prototype.toISOString!="function"&&(Date.prototype.toISOString=function(){var b=1e3;return this.getUTCFullYear()+"-"+g(this.getUTCMonth()+1)+"-"+g(this.getUTCDate())+"T"+g(this.getUTCHours())+":"+g(this.getUTCMinutes())+":"+g(this.getUTCSeconds())+"."+String((this.getUTCMilliseconds()/b).toFixed(3)).slice(2,5)+"Z"})}o(),u();var s={ELEMENT_NODE:1,TEXT_NODE:3,CDATA_SECTION_NODE:4,COMMENT_NODE:8,DOCUMENT_NODE:9};function l(g){var y=g.localName;return y==null&&(y=g.baseName),(y==null||y==="")&&(y=g.nodeName),y}function d(g){return g.prefix}function h(g){return typeof g=="string"?g.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;"):g}function a(g){return g.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#x27;/g,"'").replace(/&amp;/g,"&")}function D(g,y,b){if(r.arrayAccessForm==="property"&&(g[y]instanceof Array?g[y+"_asArray"]=g[y]:g[y+"_asArray"]=[g[y]]),!(g[y]instanceof Array)&&r.arrayAccessFormPaths.length>0){for(var T=!1,O=0;O<r.arrayAccessFormPaths.length;O++){var H=r.arrayAccessFormPaths[O];if(typeof H=="string"){if(H===b){T=!0;break}}else if(H instanceof RegExp){if(H.test(b)){T=!0;break}}else if(typeof H=="function"&&H(y,b)){T=!0;break}}T&&(g[y]=[g[y]])}}function p(g){var y=60,b=g.split(/[-T:+Z]/g),T=new Date(b[0],b[1]-1,b[2]),O=b[5].split(".");if(T.setHours(b[3],b[4],O[0]),O.length>1&&T.setMilliseconds(O[1]),b[6]&&b[7]){var H=b[6]*y+Number(b[7]),G=/\d\d-\d\d:\d\d$/.test(g)?"-":"+";H=0+(G==="-"?-1*H:H),T.setMinutes(T.getMinutes()-H-T.getTimezoneOffset())}else g.indexOf("Z",g.length-1)!==-1&&(T=new Date(Date.UTC(T.getFullYear(),T.getMonth(),T.getDate(),T.getHours(),T.getMinutes(),T.getSeconds(),T.getMilliseconds())));return T}function A(g,y,b){if(r.datetimeAccessFormPaths.length>0)for(var T=b.split(".#")[0],O=0;O<r.datetimeAccessFormPaths.length;O++){var H=r.datetimeAccessFormPaths[O];if(typeof H=="string"){if(H===T)return p(g)}else if(H instanceof RegExp){if(H.test(T))return p(g)}else if(typeof H=="function"&&H(T))return p(g)}return g}function w(g){for(var y={},b=g.childNodes,T=0;T<b.length;T++){var O=b.item(T);if(O.nodeType===s.ELEMENT_NODE){var H=l(O);r.ignoreRoot?y=B(O,H):y[H]=B(O,H)}}return y}function v(g,y){var b={};b.__cnt=0;for(var T=g.childNodes,O=0;O<T.length;O++){var H=T.item(O),G=l(H);H.nodeType!==s.COMMENT_NODE&&(b.__cnt++,b[G]==null?(b[G]=B(H,y+"."+G),D(b,G,y+"."+G)):(b[G]instanceof Array||(b[G]=[b[G]],D(b,G,y+"."+G)),b[G][b[G].length]=B(H,y+"."+G)))}for(var V=0;V<g.attributes.length;V++){var Z=g.attributes.item(V);b.__cnt++;for(var J=Z.value,W=0;W<r.attributeConverters.length;W++){var U=r.attributeConverters[W];U.test.call(null,Z.name,Z.value)&&(J=U.convert.call(null,Z.name,Z.value))}b[r.attributePrefix+Z.name]=J}var _=d(g);return _&&(b.__cnt++,b.__prefix=_),b["#text"]&&(b.__text=b["#text"],b.__text instanceof Array&&(b.__text=b.__text.join(`
6
+ `)),r.escapeMode&&(b.__text=a(b.__text)),r.stripWhitespaces&&(b.__text=b.__text.trim()),delete b["#text"],r.arrayAccessForm==="property"&&delete b["#text_asArray"],b.__text=A(b.__text,"#text",y+".#text")),b.hasOwnProperty("#cdata-section")&&(b.__cdata=b["#cdata-section"],delete b["#cdata-section"],r.arrayAccessForm==="property"&&delete b["#cdata-section_asArray"]),b.__cnt===1&&b.__text&&!r.keepText?b=b.__text:b.__cnt===0&&r.emptyNodeForm==="text"?b="":b.__cnt>1&&b.__text!==void 0&&r.skipEmptyTextNodesForObj&&(r.stripWhitespaces&&b.__text===""||b.__text.trim()==="")&&delete b.__text,delete b.__cnt,!r.keepCData&&!b.hasOwnProperty("__text")&&b.hasOwnProperty("__cdata")&&Object.keys(b).length===1?b.__cdata?b.__cdata:"":(r.enableToStringFunc&&(b.__text||b.__cdata)&&(b.toString=function(){return(this.__text?this.__text:"")+(this.__cdata?this.__cdata:"")}),b)}function B(g,y){return g.nodeType===s.DOCUMENT_NODE?w(g):g.nodeType===s.ELEMENT_NODE?v(g,y):g.nodeType===s.TEXT_NODE||g.nodeType===s.CDATA_SECTION_NODE?g.nodeValue:null}function N(g,y,b,T){var O="<"+(g&&g.__prefix?g.__prefix+":":"")+y;if(b)for(var H=0;H<b.length;H++){var G=b[H],V=g[G];r.escapeMode&&(V=h(V)),O+=" "+G.substr(r.attributePrefix.length)+"=",r.useDoubleQuotes?O+='"'+V+'"':O+="'"+V+"'"}return T?O+=" />":O+=">",O}function E(g,y){return"</"+(g&&g.__prefix?g.__prefix+":":"")+y+">"}function L(g,y){return g.indexOf(y,g.length-y.length)!==-1}function X(g,y){return!!(r.arrayAccessForm==="property"&&L(y.toString(),"_asArray")||y.toString().indexOf(r.attributePrefix)===0||y.toString().indexOf("__")===0||g[y]instanceof Function)}function R(g){var y=0;if(g instanceof Object)for(var b in g)X(g,b)||y++;return y}function S(g){var y=[];if(g instanceof Object)for(var b in g)b.toString().indexOf("__")===-1&&b.toString().indexOf(r.attributePrefix)===0&&y.push(b);return y}function z(g){var y="";return g.__cdata&&(y+="<![CDATA["+g.__cdata+"]]>"),(g.__text||typeof g.__text=="number"||typeof g.__text=="boolean")&&(r.escapeMode?y+=h(g.__text):y+=g.__text),y}function C(g){var y="";return g instanceof Object?y+=z(g):g!==null&&(r.escapeMode?y+=h(g):y+=g),y}function P(g,y,b){var T="";if(g.length===0)T+=N(g,y,b,!0);else for(var O=0;O<g.length;O++)T+=F(g[O],y,S(g[O]));return T}function F(g,y,b){var T="";if(r.jsAttributeFilter&&r.jsAttributeFilter.call(null,y,g))return T;if(r.jsAttributeConverter&&(g=r.jsAttributeConverter.call(null,y,g)),(g==null||g==="")&&r.selfClosingElements)T+=N(g,y,b,!0);else if(typeof g=="object")if(Object.prototype.toString.call(g)==="[object Array]")T+=P(g,y,b);else if(g instanceof Date)T+=N(g,y,b,!1),T+=r.jsDateUTC?g.toUTCString():g.toISOString(),T+=E(g,y);else{var O=R(g);O>0||typeof g.__text=="number"||typeof g.__text=="boolean"||g.__text||g.__cdata?(T+=N(g,y,b,!1),T+=M(g),T+=E(g,y)):r.selfClosingElements?T+=N(g,y,b,!0):(T+=N(g,y,b,!1),T+=E(g,y))}else T+=N(g,y,b,!1),T+=C(g),T+=E(g,y);return T}function M(g){var y="",b=R(g);if(b>0){for(var T in g)if(!X(g,T)){var O=g[T],H=S(O);y+=F(O,T,H)}}return y+=C(g),y}function I(g){if(g===void 0||typeof g!="string")return null;var y=null,b=null;if(e)y=new e(r.xmldomOptions),b=y.parseFromString(g,"text/xml");else if(window&&window.DOMParser){y=new window.DOMParser;var T=null,O=window.ActiveXObject||"ActiveXObject"in window;if(!O&&document.all&&!document.addEventListener)try{T=y.parseFromString("INVALID","text/xml").childNodes[0].namespaceURI}catch{T=null}try{b=y.parseFromString(g,"text/xml"),T!==null&&b.getElementsByTagNameNS(T,"parsererror").length>0&&(b=null)}catch{b=null}}else g.indexOf("<?")===0&&(g=g.substr(g.indexOf("?>")+2)),b=new ActiveXObject("Microsoft.XMLDOM"),b.async="false",b.loadXML(g);return b}this.asArray=function(y){return y==null?[]:y instanceof Array?y:[y]},this.toXmlDateTime=function(y){return y instanceof Date?y.toISOString():typeof y=="number"?new Date(y).toISOString():null},this.asDateTime=function(y){return typeof y=="string"?p(y):y},this.xml2dom=function(y){return I(y)},this.dom2js=function(y){return B(y,null)},this.js2dom=function(y){var b=this.js2xml(y);return I(b)},this.xml2js=function(y){var b=I(y);return b!=null?this.dom2js(b):null},this.js2xml=function(y){return M(y)},this.getVersion=function(){return i}}})})(Rt)),Rt.exports}var eo=$n();const to=Un(eo),ro=new to({attributePrefix:""});function qt(n,e){const t=ro.xml2js(n);if(!e)return t;const r=t?.catalog?.dataset?.[e];return r===void 0||Array.isArray(r)?r:[r]}function Jr(n){const e=qt(n),t=e?.gridDataset;if(!t){const u=Object.keys(e||{}).join(", ")||"none";throw new Error("Invalid NCSS dataset XML: expected gridDataset root, received: "+u)}const r=t.gridSet?.grid;if(!r)throw new Error("Invalid NCSS dataset XML: gridDataset.gridSet.grid is missing");let i=r;Ke.isObject(i)&&(i=[i]);const o=Array.isArray(t.axis)?t.axis:[t.axis].filter(Boolean);return{latLonBox:t.LatLonBox,timeSpan:t.TimeSpan,axis:o,grid:i}}function no(n){const e=String(n||"").split("."),t=e[e.length-1]?.toLowerCase()||"other";return["png","jpg","jpeg","xlsx","xls","csv","txt","json","geojson","grb","grib1","grib2","grb2","gr2","nc"].includes(t)?t:"other"}function rr(n){const{xmlJson:e,type:t}=n;return e.map(r=>t==="menu"?{label:r["xlink:title"],key:r.ID,url:r.ID,type:t,isLeaf:!1}:{label:r.name,key:r.ID,url:r.urlPath,type:t,isLeaf:!0,fileType:no(r.name)})}async function Zr(n,e,t,r,i,o,u){const s=Ae(),l=new URLSearchParams({service:"WMS",version:"1.3.0",request:"GetMetadata",item:"minmax",layers:e,styles:"",CRS:"EPSG:4326",BBOX:t.south+","+t.west+","+t.north+","+t.east,time:r||"",width:"2",height:"2"}),d=o??s.serviceBaseUrl,h=String(n).replace(/^\/+/,""),a=await Qt("wms/"+h+"?"+l.toString(),{baseUrl:d,authorization:i,signal:u}),D=(a.headers.get("content-type")||"").toLowerCase();if(!D.includes("json")){const p=await a.text();throw new Error("WMS min/max response has invalid content type: "+(D||"unknown")+"; "+p.slice(0,240))}return await a.json()}async function Kr(n,e,t={}){try{const r=String(n).replace(/^\/+|\/+$/g,""),i=await fr("catalog/"+r+"/catalog.xml",e,{baseUrl:t.serviceBaseUrl,signal:t.signal}),o=qt(i,"catalogRef"),u=qt(i,"dataset"),s=[];let l="";return o?.length&&(s.push(...rr({xmlJson:o,type:"menu"})),l="menu"),u?.length&&(s.push(...rr({xmlJson:u,type:"file"})),l="file"),{type:l,data:s}}catch{return}}async function nr(n){const e=Ae(),t=n.authorization??e.serviceAuthorization,r=n.serviceBaseUrl??e.serviceBaseUrl;let i=n.filePath,o;for(let v=0;v<6;v++){if(o=await Kr(i,t,{serviceBaseUrl:r,signal:n.signal}),!o?.data.length)return;if(o.data.reverse(),o.type==="file")break;if(o.type!=="menu"||!o.data[0]?.url)return;i=o.data[0].url}if(!o?.data.length||o.type!=="file")return;const u=o.data[0];if(!u)return;const s=n.url||u.url||i+"/"+u.label,l="/"+String(s).replace(/^\/+/,""),d=n.ncssBaseUrl??e.ncssBaseUrl,h=await Wr(d.replace(/\/$/,"")+l+"/dataset.xml",t,{baseUrl:r,signal:n.signal}),{latLonBox:a,timeSpan:D,axis:p}=Jr(h),A=p.find(v=>v.name==="time"),w=[];if(A&&D?.begin){const v=Number(A.values?.npts),B=String(A.attribute?.find(L=>L.name==="units")?.value||"").toLowerCase(),N=B.includes("hour")?"hour":B.includes("minute")?"minute":"second",E=Number(A.values?.resolution);if(v>1&&Number.isFinite(E)&&E!==0)for(let L=0;L<v;L++)w.push(Ze(D.begin).add(L*E,N).format("YYYYMMDDHHmmss"));else w.push(Ze(D.begin).format("YYYYMMDDHHmmss"))}return{type:"file",latLonBox:a,timeList:w,fileList:o.data,url:l,authorization:t}}Ze.extend(zr);const Lr="#sym:";async function oo(n,e,t){const r=await fetch(n,{credentials:"include",signal:t,headers:e?{Authorization:e}:void 0}),i=(r.headers.get("content-type")||"").toLowerCase();if(!r.ok){const u=await r.text();throw new Error(`Image request failed: ${r.status} ${r.statusText}; ${u.slice(0,240)}`)}if(!i.includes("image/")){const u=await r.text();throw new Error(`Image response has invalid content type: ${i}; ${u.slice(0,240)}`)}const o=await r.blob();return new Promise((u,s)=>{const l=new FileReader;l.onload=()=>typeof l.result=="string"?u(l.result):s(new Error("Failed to convert image to data URL")),l.onerror=()=>s(l.error??new Error("Failed to read image response")),l.readAsDataURL(o)})}function hr(n){if(typeof n=="function")return n;if(typeof n!="string"||!n.startsWith(Lr))return;const e=n.slice(Lr.length).trim();if(!e)return;const r=globalThis.__layerSymbols?.[e];if(typeof r=="function")return r;console.warn(`[LayerSymbol] 未找到符号函数: ${n}`)}function st(n){const e=Q.bboxPolygon(n),t=Q.toMercator(e),[[r,i],,[o,u]]=t.geometry.coordinates[0];return[r,i,o,u]}function Dt(n,e,t){return n+(e-n)*t}function Ut(n,e,t,r=5,i=1.2){function o(h,a,D){return Math.exp(-(h*h+a*a)/(2*D*D))}const u=Math.floor(r/2);let s=[],l=0;for(let h=-u;h<=u;h++)for(let a=-u;a<=u;a++){const D=o(a,h,i);s.push(D),l+=D}s=s.map(h=>h/l);const d=Array.from({length:t},()=>Array(e).fill(void 0));for(let h=0;h<t;h++)for(let a=0;a<e;a++){if(n[h][a]===void 0){d[h][a]=void 0;continue}let D=0,p=0,A=0;for(let w=-u;w<=u;w++)for(let v=-u;v<=u;v++){const B=Math.min(e-1,Math.max(0,a+v)),N=Math.min(t-1,Math.max(0,h+w)),E=n[N][B];E!==void 0&&(D+=E*s[A],p+=s[A]),A++}d[h][a]=p>0?D/p:void 0}return d}function Ye(n,e=1,t=3){const r=Number(n);return Number.isFinite(r)?Math.max(0,Math.min(t,r)):e}function dr(n,e,t,r){const i=Ye(r);if(i===0)return n;const o=Math.max(1,Math.ceil(i*2));return Ut(n,e,t,o*2+1,i*1.2)}function _r(n,e,t,r,i){const[o,u,s,l]=i,d=o+(s-o)*(n/(t-1)),h=l-(l-u)*(e/(r-1));return[d,h]}function $r(n,e,t,r,i){const[o,u,s,l]=i,d=o+(s-o)*(n/(t-1)),h=l-(l-u)*(e/(r-1));return[d,h]}function io(n,e,t,r){return n.map(i=>{const o=i.coordinates.map(u=>u.map(s=>s.map(([l,d])=>$r(l,d,e,t,r))));return{...i,coordinates:o,properties:i.properties}})}function uo(n,e,t,r){return n.map(i=>{const o=i.coordinates.map(u=>u.map(s=>s.map(([l,d])=>_r(l,d,e,t,r))));return{...i,coordinates:o}})}function Vt(n,e,t,r,i){const o=Math.floor(e),u=Math.min(o+1,r-1),s=Math.floor(t),l=Math.min(s+1,i-1),d=n[s*r+o],h=n[s*r+u],a=n[l*r+o],D=n[l*r+u],p=e-o,A=t-s;return d*(1-p)*(1-A)+h*p*(1-A)+a*(1-p)*A+D*p*A}async function _e(n,e,t,r,i){let o=0,u=0;const s=document.createElement("canvas"),l=s.getContext("2d"),d=new Image,h=await oo(n,r,i?.signal);return d.src=h,new Promise((a,D)=>{d.onload=()=>{o=d.width,u=d.height,s.width=o,s.height=u,l.clearRect(0,0,o,u),l.drawImage(d,0,0);const A=l.getImageData(0,0,o,u).data,[w,v]=e,B=(F,M)=>{const I=(M*o+F)*4;return[A[I]??0,A[I+1]??0,A[I+2]??0,A[I+3]??0]},N=(F,M,I,g,y=4)=>Math.abs(F-g[0])<=y&&Math.abs(M-g[1])<=y&&Math.abs(I-g[2])<=y,E=i?.detectNoDataByBorderColor!==!1;let L=[];const X=(F,M,I)=>L.some(g=>N(F,M,I,g,6));if(E){const F=B(0,0),M=B(Math.max(0,o-1),0),I=B(0,Math.max(0,u-1)),g=B(Math.max(0,o-1),Math.max(0,u-1)),y=[F,M,I,g].filter(O=>O[3]>0).map(O=>[O[0],O[1],O[2]]),b=[];for(const O of y){const H=b.find(G=>N(O[0],O[1],O[2],G.rgb,6));H?H.count+=1:b.push({rgb:O,count:1})}b.sort((O,H)=>H.count-O.count);const T=b[0];L=T&&T.count>=3?[T.rgb]:[]}const R=o*u,S=new Uint8Array(R),z=[],C=F=>{if(F<0||F>=R||S[F])return;const M=F*4,I=A[M]??0,g=A[M+1]??0,y=A[M+2]??0;(A[M+3]??0)>0&&L.length>0&&X(I,g,y)&&(S[F]=1,z.push(F))};for(let F=0;F<o;F++)C(F),C((u-1)*o+F);for(let F=0;F<u;F++)C(F*o),C(F*o+(o-1));for(let F=0;F<z.length;F++){const M=z[F],I=M%o,g=Math.floor(M/o);I>0&&C(M-1),I<o-1&&C(M+1),g>0&&C(M-o),g<u-1&&C(M+o)}const P=[];for(let F=0;F<u;F++)for(let M=0;M<o;M++){const I=(F*o+M)*4,g=F*o+M,y=A[I]??0,b=A[I+1]??0,T=A[I+2]??0;if((A[I+3]??0)===0||S[g]===1){P.push(void 0);continue}const H=.299*y+.587*b+.114*T,G=w+H/255*(v-w);G<w?t?.[0]?P.push(void 0):P.push(w):G>v?t?.[1]?P.push(void 0):P.push(v):P.push(G)}a({grayArr:P,width:o,height:u})},d.onerror=()=>D(new Error(`Failed to decode image response: ${n}`))})}function We(n){return n=n.trim(),n.endsWith("%")?parseFloat(n)/100*255:parseFloat(n)}function or(n){return n=n.trim(),n.endsWith("%")?parseFloat(n)/100:parseFloat(n)}function Ue(n){return isFinite(n)?Math.max(0,Math.min(255,Math.round(n))):0}function bt(n){if(!n)return[0,0,0,0];n=n.trim();const e=n.match(/rgba?\(\s*([0-9.+%]+)[,\s]+([0-9.+%]+)[,\s]+([0-9.+%]+)(?:[,\s]+([0-9.+%]+))?\s*\)/i);if(e){const t=We(e[1]),r=We(e[2]),i=We(e[3]),o=e[4]?or(e[4]):1;return[Ue(t),Ue(r),Ue(i),Math.round(o*255)]}if(n[0]==="#"){let t=n.slice(1);if(t.length===3&&(t=t.split("").map(r=>r+r).join("")),t.length===6){const r=parseInt(t.slice(0,2),16),i=parseInt(t.slice(2,4),16),o=parseInt(t.slice(4,6),16);return[r,i,o,255]}}try{const t=document.createElement("canvas").getContext("2d");t.fillStyle=n;const r=t.fillStyle;if(r&&r!==""){const i=r.match(/rgba?\(([^)]+)\)/);if(i){const o=i[1].split(",").map(h=>h.trim()),u=We(o[0]),s=We(o[1]),l=We(o[2]),d=o[3]?or(o[3]):1;return[Ue(u),Ue(s),Ue(l),Math.round(d*255)]}}}catch{}return[0,0,0,0]}function gr(n,e){if(!Array.isArray(n)||n.length===0)return[];if(!e||e.length!==2)return n;const t=Number(e[0]),r=Number(e[1]);if(!isFinite(t)||!isFinite(r))return n;const i=n.length,o=Math.max(0,Math.min(i,Math.floor(Math.min(t,r)))),u=Math.max(0,Math.min(i,Math.ceil(Math.max(t,r))));return n.slice(o,u)}function it(n,e){const t=gr(n,e);if(!t.length)return;const r=t.find(s=>s?.scope?.length),i=[...t].reverse().find(s=>s?.scope?.length),o=r?.scope?.length?Number(r.scope[0]):void 0,u=i?.scope?.length?Number(i.scope[i.scope.length-1]):void 0;if(!(typeof o>"u"||isNaN(o)))return typeof u>"u"||isNaN(u)?[o,o]:[o,u]}function be(n,e){const t=[],r={},i=gr(n,e);for(const u of i){const s=u?.scope?.length?Number(u.scope[0]):NaN;isNaN(s)||(t.push(s),r[s]=u.color)}return{uniqueThresholds:Array.from(new Set(t)).sort((u,s)=>u-s),colorMap:r}}const $t=new globalThis.Map;function so(n){const e=n?.config,t=(e?.legend??[]).map(r=>({name:r?.name,scope:r?.scope??[],color:r?.color}));return JSON.stringify({url:n?.url,authorization:n?.authorization??"",extent:e?.extent??[],scope:e?.scope??[],legendScope:e?.legendScope??[],legend:t})}async function Bt(n){const e=so(n),t=$t.get(e);if(t)return t;const r=(async()=>{const{config:i,url:o,authorization:u}=n;if(!i)return;const{extent:s,scope:l,legend:d,legendScope:h}=i;if(!s)return;const a=st(s),D=[-99999,99999];Ke.isNumber(l?.[0])&&(D[0]=l[0]),Ke.isNumber(l?.[1])&&(D[1]=l[1]);const{grayArr:p,width:A,height:w}=await _e(o,D,void 0,u,{signal:n.signal}),{uniqueThresholds:v,colorMap:B}=be(d,h),N=[];for(let R=0;R<w;R++){N[R]=[];for(let S=0;S<A;S++)N[R][S]=p[R*A+S]}const E=Ut(N,A,w),L=[],X=[];for(let R=0;R<w;R++){L[R]=[],X[R]=[];for(let S=0;S<A;S++){const z=N[R]&&typeof N[R][S]<"u"?N[R][S]:void 0;L[R][S]=z==null||isNaN(Number(z))?NaN:Number(z);const C=E[R]&&typeof E[R][S]<"u"?E[R][S]:void 0;X[R][S]=C==null||isNaN(Number(C))?NaN:Number(C)}}return{width:A,height:w,extent:a,rawArr2D:L,smoothArr2D:X,uniqueThresholds:v,colorMap:B}})();$t.set(e,r);try{return await r}finally{$t.delete(e)}}function en(n,e,t){const r=n[2]-n[0],i=n[3]-n[1],o=r/i;let u=e,s=Math.round(u/o);return s>t&&(s=t,u=Math.round(s*o)),{width:u,height:s}}function tn(n,e,t){const r=E=>{if(Array.isArray(E)&&E.length>=2){const L=Number(E[0]),X=Number(E[1]);if(Number.isFinite(L)&&Number.isFinite(X))return[L,X]}if(typeof E=="string"){const L=E.split(",").map(X=>Number(X.trim())).filter(X=>Number.isFinite(X));if(L.length>=2)return[L[0],L[1]]}},i=Ae(),o=Number(t?.imageSize??i.imageSize),u=Number.isFinite(o)&&o>0?Math.round(o):i.imageSize,s=st(n.config.extent),{width:l,height:d}=en(s,u,u),h=n?.config?.layerConfig??{},a=h.LAYERS,D=r(n?.config?.scope)??[0,0],p=r(n?.config?.componentScope)??r(n?.config?.uvScope)??r(h.COMPONENT_SCALE_RANGE)??r(h.COMPONENT_SCOPE)??r(h.UV_SCOPE);let A=D;if(Ke.isArray(a)&&a.length>1)if(p){const E=Math.max(Math.abs(p[0]),Math.abs(p[1]));A=[-E,E]}else{const E=Number(D[0]),L=Number(D[1]);if(Number.isFinite(E)&&Number.isFinite(L)){const X=Math.max(Math.abs(E),Math.abs(L));A=[-X,X]}}const w=A.toString(),v=String(t?.serviceBaseUrl??n?.serviceBaseUrl??n?.config?.serviceBaseUrl??i.serviceBaseUrl).replace(/\/$/,""),B=String(n.url||"").replace(/^\/+/,""),N=`${v}/wms/${B}`;if(Ke.isArray(a)){const E=[];return a.forEach(L=>{const X={...h,TIME:Ze(e).utc().format("YYYY-MM-DDTHH:mm:ss.000[Z]"),COLORSCALERANGE:w,BBOX:s.join(","),WIDTH:""+l,HEIGHT:""+d};X.LAYERS=L,E.push(`${N}?${new URLSearchParams(X).toString()}`)}),E}else{const E={...h,TIME:Ze(e).utc().format("YYYY-MM-DDTHH:mm:ss.000[Z]"),COLORSCALERANGE:w,BBOX:s.join(","),WIDTH:""+l,HEIGHT:""+d};return`${N}?${new URLSearchParams(E).toString()}`}}function ao(n,e,t,r){if(!e||e.length===0)return[0,0,0,0];if(r==="discrete"||r==="grid"){let i=e[0];for(let u=0;u<e.length&&n>=e[u];u++)i=e[u];const o=t[e.indexOf(i)];return[o[0],o[1],o[2],o[3]??255]}else{if(n<=e[0]){const A=t[0];return[A[0],A[1],A[2],A[3]??255]}if(n>=e[e.length-1]){const A=t[t.length-1];return[A[0],A[1],A[2],A[3]??255]}let i=0;for(let A=0;A<e.length-1;A++)if(n>=e[A]&&n<=e[A+1]){i=A;break}const o=e[i],u=e[i+1],s=(n-o)/(u-o),l=t[i],d=t[i+1],h=Math.round(Dt(l[0],d[0],s)),a=Math.round(Dt(l[1],d[1],s)),D=Math.round(Dt(l[2],d[2],s)),p=Math.round(Dt(l[3]??255,d[3]??255,s));return[h,a,D,p]}}Ze.extend(zr);function co(n,e){if(n&&typeof n=="object"){const t=n,r={north:Number(t.north),south:Number(t.south),east:Number(t.east),west:Number(t.west)};if(Object.values(r).every(Number.isFinite))return r}if(Array.isArray(e)&&e.length>=4){const[t,r,i,o]=e.map(Number);if([o,r,i,t].every(Number.isFinite))return{north:o,south:r,east:i,west:t}}}function lo(n){return(Array.isArray(n)?n:[n]).map(e=>String(e??"").trim()).filter(Boolean)}async function fo(n,e,t,r,i,o){const u=n.config?.scope,s=Number(u?.[0]),l=Number(u?.[1]),d=Number.isFinite(s),h=Number.isFinite(l);if(d&&h)return[s,l];const a=lo(n.config?.layerConfig?.LAYERS),D=co(i,n.config?.extent);if(!a.length)throw new Error('Layer "'+n.id+'" has no WMS LAYERS setting');if(!D)throw new Error('Layer "'+n.id+'" has no valid extent');const p=Ae(),A=n.serviceBaseUrl??o.serviceBaseUrl??p.serviceBaseUrl,w=t?Ze(t).utc().format("YYYY-MM-DDTHH:mm:ss.000[Z]"):void 0,v=await Promise.all(a.map(X=>Zr(e,X,D,w,r,A,o.signal))),B=Math.min(...v.map(X=>Number(X.min))),N=Math.max(...v.map(X=>Number(X.max))),E=d?s:B,L=h?l:N;if(!Number.isFinite(E)||!Number.isFinite(L))throw new Error('Invalid WMS min/max response for layer "'+n.id+'"');return[E,L]}async function ho(n,e={}){if((Array.isArray(n.type)?n.type:[n.type]).includes("typhoon"))return{...n,show:!0};const r=Ae();let i=n.url,o=n.time,u=n.authorization??e.authorization??r.serviceAuthorization,s;if(!i){let a=await nr({filePath:n.filePath,authorization:u,serviceBaseUrl:n.serviceBaseUrl??e.serviceBaseUrl,ncssBaseUrl:e.ncssBaseUrl,signal:e.signal});if(!a?.fileList?.length&&n.fallbackFilePath&&(a=await nr({filePath:n.fallbackFilePath,authorization:n.fallbackAuthorization??u,serviceBaseUrl:n.serviceBaseUrl??e.serviceBaseUrl,ncssBaseUrl:e.ncssBaseUrl,signal:e.signal})),!a?.fileList?.length||!a.timeList?.length&&!o)return null;i=a.url??a.fileList[0]?.url,o=o??a.timeList[0],u=a.authorization??u,s=a.latLonBox}if(!i)return null;const l=await fo(n,i,o,u,s,e),d=l?{...n,config:{...n.config,scope:l}}:n,h=n.serviceBaseUrl??e.serviceBaseUrl??r.serviceBaseUrl;return{...d,show:!0,time:o,authorization:u,url:tn({...d,url:i},o??"",{serviceBaseUrl:h})}}let Pt=null;const je=64,Je=-1e30;function Gt(n,e,t){const r=n*e,i=new Float32Array(r);for(let o=0;o<e;o++)for(let u=0;u<n;u++){const s=o*n+u,l=t?.[o]?.[u];i[s]=l==null||isNaN(Number(l))?Je:Number(l)}return i}function go(n,e,t){const r=n*e,i=new Uint8Array(r);for(let o=0;o<e;o++)for(let u=0;u<n;u++){const s=o*n+u,l=t?.[o]?.[u];i[s]=l==null||isNaN(Number(l))?0:255}return i}async function mo(){return Pt||(Pt=(async()=>{const n=navigator?.gpu;if(!n)return null;const e=await n.requestAdapter();return e?await e.requestDevice():null})(),Pt)}function Ao(){return`
8
7
  struct Params {
9
8
  width: u32,
10
9
  height: u32,
@@ -84,7 +83,7 @@ fn colorGradient(v: f32) -> vec4<f32> {
84
83
  }
85
84
 
86
85
  fn isMaskVisible(v: f32) -> bool {
87
- if (v <= ${Tn/10}) {
86
+ if (v <= ${Je/10}) {
88
87
  return false;
89
88
  }
90
89
  if (params.hasMin == 1u && v < params.minScope) {
@@ -136,7 +135,7 @@ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
136
135
  }
137
136
 
138
137
  let v = values[idx];
139
- if (v <= ${Tn/10}) {
138
+ if (v <= ${Je/10}) {
140
139
  outPixels[idx] = 0u;
141
140
  return;
142
141
  }
@@ -156,14 +155,14 @@ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
156
155
 
157
156
  outPixels[idx] = packRGBA(color);
158
157
  }
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
158
+ `}function vt(n,e,t){const r=n.createBuffer({size:e.byteLength,usage:t,mappedAtCreation:!0});return new Uint8Array(r.getMappedRange()).set(new Uint8Array(e)),r.unmap(),r}function rn(n){return typeof n<"u"&&n!==null&&Number.isFinite(Number(n))}function Fr(n,e){if(!rn(n))return!1;const t=Number(n);if(t<=Je/10)return!1;const r=e&&typeof e[0]<"u",i=e&&typeof e[1]<"u";return!(r&&t<Number(e[0])||i&&t>Number(e[1]))}function po(n,e,t){const r=Math.max(0,Math.min(1,(t-n)/(e-n)));return r*r*(3-2*r)}function vo(n,e,t,r){if(!e.length||!t.length)return[0,0,0,0];const i=Math.min(e.length,t.length)-1;if(i<0)return[0,0,0,0];if(r!=="gradient"||i===0){let s=0;for(let l=0;l<=i;l++){const d=e[l]??Number.NEGATIVE_INFINITY;if(n>=d)s=l;else break}return t[s]??[0,0,0,0]}const o=e[0]??0,u=e[i]??o;if(n<=o)return t[0]??[0,0,0,0];if(n>=u)return t[i]??[0,0,0,0];for(let s=0;s<i;s++){const l=e[s]??0,d=e[s+1]??l;if(n<l||n>d)continue;const h=t[s]??[0,0,0,0],a=t[s+1]??h,D=Math.max(d-l,1e-6),p=Math.max(0,Math.min(1,(n-l)/D));return[h[0]+(a[0]-h[0])*p,h[1]+(a[1]-h[1])*p,h[2]+(a[2]-h[2])*p,h[3]+(a[3]-h[3])*p]}return t[i]??[0,0,0,0]}function Do(n){const{width:e,height:t,rawArr2D:r,smoothArr2D:i,thresholds:o,colorsRGBA:u,colorMode:s="discrete",scope:l,softenMaskEdge:d=!0}=n;if(!e||!t||!o.length||!u.length)return null;const h=document.createElement("canvas");h.width=e,h.height=t;const a=h.getContext("2d");if(!a)return null;const D=a.createImageData(e,t),p=D.data;for(let A=0;A<t;A++)for(let w=0;w<e;w++){const B=(A*e+w)*4,N=r?.[A]?.[w];if(!Fr(N,l)){p[B]=0,p[B+1]=0,p[B+2]=0,p[B+3]=0;continue}const E=i?.[A]?.[w];if(!rn(E)){p[B]=0,p[B+1]=0,p[B+2]=0,p[B+3]=0;continue}const L=vo(Number(E),o,u,s);let X=0,R=0;for(let F=A-1;F<=A+1;F++)for(let M=w-1;M<=w+1;M++)F<0||M<0||F>=t||M>=e||(R+=1,Fr(r?.[F]?.[M],l)&&(X+=1));const S=R?X/R:0,z=d?po(.58,.9,S):1,C=L[3]??255,P=Math.max(0,Math.min(255,Math.round(C*z)));p[B]=Math.max(0,Math.min(255,Math.round(L[0]??0))),p[B+1]=Math.max(0,Math.min(255,Math.round(L[1]??0))),p[B+2]=Math.max(0,Math.min(255,Math.round(L[2]??0))),p[B+3]=P}return a.putImageData(D,0,0),h}function Sr(n,e,t){const r=n.createShader(e);if(!r)return null;if(n.shaderSource(r,t),n.compileShader(r),!n.getShaderParameter(r,n.COMPILE_STATUS)){const i=n.getShaderInfoLog(r)??"";throw n.deleteShader(r),new Error(i||"WebGL shader compile failed")}return r}function yo(n,e,t){const r=Sr(n,n.VERTEX_SHADER,e),i=Sr(n,n.FRAGMENT_SHADER,t);if(!r||!i)throw new Error("WebGL shader creation failed");const o=n.createProgram();if(!o)throw n.deleteShader(r),n.deleteShader(i),new Error("WebGL program creation failed");if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),n.deleteShader(r),n.deleteShader(i),!n.getProgramParameter(o,n.LINK_STATUS)){const u=n.getProgramInfoLog(o)??"";throw n.deleteProgram(o),new Error(u||"WebGL program link failed")}return o}function bo(n){const{width:e,height:t,rawArr2D:r,smoothArr2D:i,thresholds:o,colorsRGBA:u,colorMode:s="discrete",scope:l,softenMaskEdge:d=!0}=n;if(!e||!t||!o.length||!u.length)return null;const h=document.createElement("canvas");h.width=e,h.height=t;const a=h.getContext("webgl2",{alpha:!0,premultipliedAlpha:!1,antialias:!1,depth:!1,stencil:!1,preserveDrawingBuffer:!0});if(!a)return null;const D=`#version 300 es
160
159
  in vec2 a_position;
161
160
  out vec2 v_uv;
162
161
  void main() {
163
162
  // WebGL texture origin differs from ImageData row order; flip Y to keep map orientation correct.
164
163
  v_uv = vec2((a_position.x + 1.0) * 0.5, 1.0 - (a_position.y + 1.0) * 0.5);
165
164
  gl_Position = vec4(a_position, 0.0, 1.0);
166
- }`,g=`#version 300 es
165
+ }`,p=`#version 300 es
167
166
  precision highp float;
168
167
  precision highp sampler2D;
169
168
  in vec2 v_uv;
@@ -173,8 +172,8 @@ uniform sampler2D u_values;
173
172
  uniform sampler2D u_maskValues;
174
173
  uniform int u_thresholdCount;
175
174
  uniform int u_colorMode;
176
- uniform float u_thresholds[${an}];
177
- uniform vec4 u_colors[${an}];
175
+ uniform float u_thresholds[${je}];
176
+ uniform vec4 u_colors[${je}];
178
177
  uniform float u_minScope;
179
178
  uniform float u_maxScope;
180
179
  uniform int u_hasMin;
@@ -183,7 +182,7 @@ uniform int u_softenMaskEdge;
183
182
  uniform sampler2D u_validMask;
184
183
 
185
184
  bool isMaskVisible(float maskV) {
186
- if (maskV <= ${Tn/10}) return false;
185
+ if (maskV <= ${Je/10}) return false;
187
186
  if (u_hasMin == 1 && maskV < u_minScope) return false;
188
187
  if (u_hasMax == 1 && maskV > u_maxScope) return false;
189
188
  return true;
@@ -215,7 +214,7 @@ float sampleValueGradient(vec2 uv) {
215
214
  float v10 = texture(u_values, uv10).r;
216
215
  float v01 = texture(u_values, uv01).r;
217
216
  float v11 = texture(u_values, uv11).r;
218
- float invalid = ${Tn/10};
217
+ float invalid = ${Je/10};
219
218
 
220
219
  if (v00 <= invalid || v10 <= invalid || v01 <= invalid || v11 <= invalid) {
221
220
  return sampleValueAt(uv);
@@ -228,7 +227,7 @@ float sampleValueGradient(vec2 uv) {
228
227
 
229
228
  vec4 colorDiscrete(float v) {
230
229
  vec4 chosen = u_colors[0];
231
- for (int i = 0; i < ${an}; i++) {
230
+ for (int i = 0; i < ${je}; i++) {
232
231
  if (i >= u_thresholdCount) break;
233
232
  if (v >= u_thresholds[i]) {
234
233
  chosen = u_colors[i];
@@ -248,7 +247,7 @@ vec4 colorGradient(float v) {
248
247
  return u_colors[last];
249
248
  }
250
249
 
251
- for (int i = 0; i < ${an-1}; i++) {
250
+ for (int i = 0; i < ${je-1}; i++) {
252
251
  if (i >= last) break;
253
252
  float t0 = u_thresholds[i];
254
253
  float t1 = u_thresholds[i + 1];
@@ -270,7 +269,7 @@ void main() {
270
269
  }
271
270
 
272
271
  float v = (u_colorMode == 1) ? sampleValueGradient(v_uv) : sampleValueAt(v_uv);
273
- if (v <= ${Tn/10}) {
272
+ if (v <= ${Je/10}) {
274
273
  outColor = vec4(0.0);
275
274
  return;
276
275
  }
@@ -278,9 +277,4 @@ void main() {
278
277
  vec4 c = (u_colorMode == 1) ? colorGradient(v) : colorDiscrete(v);
279
278
  float edgeAlpha = (u_softenMaskEdge == 1) ? edgeAAAlpha(v_uv) : 1.0;
280
279
  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;
280
+ }`;try{const A=yo(a,D,p);a.useProgram(A);const w=new Float32Array([-1,-1,1,-1,-1,1,1,1]),v=a.createBuffer();if(!v)return a.deleteProgram(A),null;a.bindBuffer(a.ARRAY_BUFFER,v),a.bufferData(a.ARRAY_BUFFER,w,a.STATIC_DRAW);const B=a.getAttribLocation(A,"a_position");if(B<0)return a.deleteBuffer(v),a.deleteProgram(A),null;a.enableVertexAttribArray(B),a.vertexAttribPointer(B,2,a.FLOAT,!1,0,0);const N=a.createTexture();if(!N)return a.deleteBuffer(v),a.deleteProgram(A),null;const E=a.createTexture();if(!E)return a.deleteTexture(N),a.deleteBuffer(v),a.deleteProgram(A),null;const L=a.createTexture();if(!L)return a.deleteTexture(E),a.deleteTexture(N),a.deleteBuffer(v),a.deleteProgram(A),null;const X=Gt(e,t,i),R=Gt(e,t,r),S=go(e,t,r);a.activeTexture(a.TEXTURE0),a.bindTexture(a.TEXTURE_2D,N),a.pixelStorei(a.UNPACK_ALIGNMENT,1),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.NEAREST),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.NEAREST),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_S,a.CLAMP_TO_EDGE),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_T,a.CLAMP_TO_EDGE),a.texImage2D(a.TEXTURE_2D,0,a.R32F,e,t,0,a.RED,a.FLOAT,X),a.activeTexture(a.TEXTURE1),a.bindTexture(a.TEXTURE_2D,E),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.NEAREST),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.NEAREST),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_S,a.CLAMP_TO_EDGE),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_T,a.CLAMP_TO_EDGE),a.texImage2D(a.TEXTURE_2D,0,a.R32F,e,t,0,a.RED,a.FLOAT,R),a.activeTexture(a.TEXTURE2),a.bindTexture(a.TEXTURE_2D,L),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.LINEAR),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.LINEAR),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_S,a.CLAMP_TO_EDGE),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_T,a.CLAMP_TO_EDGE),a.texImage2D(a.TEXTURE_2D,0,a.R8,e,t,0,a.RED,a.UNSIGNED_BYTE,S);const z=new Float32Array(je),C=new Float32Array(je*4),P=Math.min(o.length,je);for(let y=0;y<P;y++){z[y]=o[y]??0;const b=u[y]??[0,0,0,0],T=y*4;C[T]=b[0],C[T+1]=b[1],C[T+2]=b[2],C[T+3]=b[3]??255}const F=l&&typeof l[0]<"u"?Number(l[0]):0,M=l&&typeof l[1]<"u"?Number(l[1]):0,I=l&&typeof l[0]<"u"?1:0,g=l&&typeof l[1]<"u"?1:0;return a.uniform1i(a.getUniformLocation(A,"u_values"),0),a.uniform1i(a.getUniformLocation(A,"u_maskValues"),1),a.uniform1i(a.getUniformLocation(A,"u_validMask"),2),a.uniform1i(a.getUniformLocation(A,"u_thresholdCount"),P),a.uniform1i(a.getUniformLocation(A,"u_colorMode"),s==="gradient"?1:0),a.uniform1fv(a.getUniformLocation(A,"u_thresholds"),z),a.uniform4fv(a.getUniformLocation(A,"u_colors"),C),a.uniform1f(a.getUniformLocation(A,"u_minScope"),F),a.uniform1f(a.getUniformLocation(A,"u_maxScope"),M),a.uniform1i(a.getUniformLocation(A,"u_hasMin"),I),a.uniform1i(a.getUniformLocation(A,"u_hasMax"),g),a.uniform1i(a.getUniformLocation(A,"u_softenMaskEdge"),d?1:0),a.viewport(0,0,e,t),a.clearColor(0,0,0,0),a.clear(a.COLOR_BUFFER_BIT),a.drawArrays(a.TRIANGLE_STRIP,0,4),a.activeTexture(a.TEXTURE2),a.bindTexture(a.TEXTURE_2D,null),a.activeTexture(a.TEXTURE1),a.bindTexture(a.TEXTURE_2D,null),a.activeTexture(a.TEXTURE0),a.bindTexture(a.TEXTURE_2D,null),a.bindBuffer(a.ARRAY_BUFFER,null),a.deleteTexture(L),a.deleteTexture(N),a.deleteTexture(E),a.deleteBuffer(v),a.deleteProgram(A),h}catch(A){return console.warn("[FcstLayer] WebGL2 渲染失败",A),null}}async function wo(n){const{width:e,height:t,rawArr2D:r,smoothArr2D:i,thresholds:o,colorsRGBA:u,colorMode:s="discrete",scope:l,softenMaskEdge:d=!0}=n;if(!e||!t||!o.length||!u.length)return null;try{const h=await mo();if(!h)return null;h.pushErrorScope("validation");const a=e*t,D=Gt(e,t,i),p=Gt(e,t,r),A=new Float32Array(o),w=new Float32Array(A.length*4);for(let _=0;_<A.length;_++){const K=u[_]??[0,0,0,0],Y=_*4;w[Y]=K[0],w[Y+1]=K[1],w[Y+2]=K[2],w[Y+3]=K[3]??255}const v=l&&typeof l[0]<"u"?Number(l[0]):0,B=l&&typeof l[1]<"u"?Number(l[1]):0,N=l&&typeof l[0]<"u"?1:0,E=l&&typeof l[1]<"u"?1:0,L=new ArrayBuffer(48),X=new DataView(L);X.setUint32(0,e,!0),X.setUint32(4,t,!0),X.setUint32(8,A.length,!0),X.setUint32(12,s==="gradient"?1:0,!0),X.setFloat32(16,v,!0),X.setFloat32(20,B,!0),X.setUint32(24,N,!0),X.setUint32(28,E,!0),X.setUint32(32,d?1:0,!0);const R=globalThis.GPUBufferUsage,S=globalThis.GPUMapMode,z=vt(h,D.buffer,R.STORAGE|R.COPY_DST),C=vt(h,p.buffer,R.STORAGE|R.COPY_DST),P=vt(h,A.buffer,R.STORAGE|R.COPY_DST),F=vt(h,w.buffer,R.STORAGE|R.COPY_DST),M=vt(h,L,R.UNIFORM|R.COPY_DST),I=a*4,g=h.createBuffer({size:I,usage:R.STORAGE|R.COPY_SRC}),y=h.createBuffer({size:I,usage:R.COPY_DST|R.MAP_READ}),b=h.createShaderModule({code:Ao()}),T=h.createComputePipeline({layout:"auto",compute:{module:b,entryPoint:"main"}}),O=h.createBindGroup({layout:T.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:z}},{binding:1,resource:{buffer:C}},{binding:2,resource:{buffer:P}},{binding:3,resource:{buffer:F}},{binding:4,resource:{buffer:M}},{binding:5,resource:{buffer:g}}]}),H=h.createCommandEncoder(),G=H.beginComputePass();G.setPipeline(T),G.setBindGroup(0,O),G.dispatchWorkgroups(Math.ceil(a/64)),G.end(),H.copyBufferToBuffer(g,0,y,0,I),h.queue.submit([H.finish()]);const V=await h.popErrorScope();if(V)return z.destroy(),C.destroy(),P.destroy(),F.destroy(),M.destroy(),g.destroy(),y.destroy(),console.warn("[FcstLayer] WebGPU validation error",V),null;await y.mapAsync(S.READ);const Z=y.getMappedRange(),J=new Uint8ClampedArray(Z.slice(0));y.unmap();const W=document.createElement("canvas");W.width=e,W.height=t;const U=W.getContext("2d");return U?(U.putImageData(new ImageData(J,e,t),0,0),z.destroy(),C.destroy(),P.destroy(),F.destroy(),M.destroy(),g.destroy(),y.destroy(),W):null}catch(h){return console.warn("[FcstLayer] WebGPU 渲染失败",h),null}}async function nn(n){const e=bo(n);if(e)return e;const t=await wo(n);if(t)return console.warn("[FcstLayer] 当前环境不支持 WebGL2,已自动使用 WebGPU"),t;const r=Do(n);return r?(console.warn("[FcstLayer] GPU 渲染不可用,已自动回退到 Canvas2D CPU 渲染"),r):(console.warn("[FcstLayer] 渲染不可用:WebGL2/WebGPU/Canvas2D 都不可用"),null)}const Tt=4,Co=12,Bo=8;class mr{map;options;contourCache;contourLoadingTasks;rasterRenderCache;rasterRenderLoadingTasks;layerData;ready;sourceRequestVersion=0;abortController=new AbortController;constructor(e,t){this.map=e,this.options=t,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(e){return e===this.sourceRequestVersion&&!this.abortController.signal.aborted}getRequestOptions(){return{...this.options,config:{...this.options?.config??{}},signal:this.abortController.signal}}getContourCacheKey(e=this.options){const t=e?.config??{};return JSON.stringify({url:e?.url??"",authorization:e?.authorization??"",compareUrl:e?.compareUrl??"",zeroCompare:e?.zeroCompare===!0,extent:t.extent??[],scope:t.scope??[]})}setCachedContourData(e,t){for(this.contourCache.delete(e),this.contourCache.set(e,t);this.contourCache.size>Co;){const r=this.contourCache.keys().next().value;if(r===void 0)break;this.contourCache.delete(r)}}getRasterRenderCacheKey(e,t){const r=e?.config??{},i=Object.keys(t).map(Number).filter(Number.isFinite).sort((o,u)=>o-u).map(o=>[o,t[o]]);return JSON.stringify({data:this.getContourCacheKey(e),mode:r.mode??"discrete",colors:i,valueTransform:typeof r.valueTransform=="function"?String(r.valueTransform):r.valueTransform??"",alignWithIsoline:r.alignWithIsoline===!0,isolineSmooth:r.isolineSmooth!==!1,isolineSmoothness:Ye(r.isolineSmoothness)})}setCachedRasterRender(e,t){for(this.rasterRenderCache.delete(e),this.rasterRenderCache.set(e,t);this.rasterRenderCache.size>Bo;){const r=this.rasterRenderCache.keys().next().value;if(r===void 0)break;this.rasterRenderCache.delete(r)}}async add(){const{id:e,config:t}=this.options,{zIndex:r=10,opacity:i=1}=t,o=de(this.map,e),u=o?.getZIndex()??r,s=this.beginSourceRequest(),l=this.getRequestOptions(),d=await this.getSourceFromCache(l);if(!this.isCurrentRequest(s))return;const h=d??await this.getSourceFromParams(l);if(!this.isCurrentRequest(s)||!h)return;const a=new Ct({className:e,source:h,zIndex:u,opacity:i,visible:o?.getVisible()??!0});return Te(this.map,e),this.map.addLayer(a),a}async getSourceFromParams(e=this.options){const{config:t}=e,{mode:r,legend:i,legendScope:o}=t,u=await this.getOrLoadContourData(e);if(!u||e?.signal?.aborted)return;const{rawArr2D:s,smoothArr2D:l,extent:d,width:h,height:a}=u,D=this.getValueTransformFn(e),p=this.applyValueTransform2D(s,"raw",D),A=this.applyValueTransform2D(l,"smooth",D),{colorMap:w}=be(i),{colorMap:v}=be(i,o),B=it(i,o)??t.scope;return await this.getFcstRasterSource({smoothArr2D:A,rawArr2D:p,extent:d,width:h,height:a,colorMap:w,selectedColorMap:v,colorMode:r,scope:B,rasterCacheKey:this.getRasterRenderCacheKey(e,w)},e)}async getOrLoadContourData(e=this.options){const t=this.getContourCacheKey(e),r=this.contourCache.get(t);if(r&&r.schemaVersion===Tt)return this.contourCache.delete(t),this.contourCache.set(t,r),r;const i=this.contourLoadingTasks.get(t);if(i)return i;const o=(async()=>{const u=await Bt(e);if(!u)return null;const{uniqueThresholds:s,rawArr2D:l,smoothArr2D:d,extent:h,width:a,height:D}=u,p={schemaVersion:Tt,uniqueThresholds:s,rawArr2D:l,smoothArr2D:d,extent:h,width:a,height:D};return this.setCachedContourData(t,p),p})();this.contourLoadingTasks.set(t,o);try{return await o}finally{this.contourLoadingTasks.get(t)===o&&this.contourLoadingTasks.delete(t)}}async getValueByLonLat(e,t,r=!1){if(!Number.isFinite(e)||!Number.isFinite(t))return null;const i={...this.options,config:{...this.options?.config??{}}},o=await this.getOrLoadContourData(i);if(!o)return null;const{rawArr2D:u,smoothArr2D:s,extent:l,width:d,height:h}=o,a=r?s:u;if(!a||d<=0||h<=0)return null;const D=nt.fromLonLat([e,t]);if(D.length<2)return null;const p=D[0],A=D[1],[w,v,B,N]=l,E=B-w,L=N-v;if(E<=0||L<=0||p<w||p>B||A<v||A>N)return null;const X=(p-w)/E*(d-1),R=(N-A)/L*(h-1),S=Math.max(0,Math.min(d-1,Math.round(X))),z=Math.max(0,Math.min(h-1,Math.round(R))),C=a?.[z]?.[S];if(C==null||isNaN(Number(C)))return null;const P=this.applyValueTransformValue(Number(C),{x:S,y:z,width:d,height:h,source:r?"smooth":"raw"},this.getValueTransformFn(i));return P==null||isNaN(Number(P))?null:Number(P)}async getValueByLngLat(e,t,r=!1){return this.getValueByLonLat(e,t,r)}async getSourceFromCache(e=this.options){const{config:t}=e,{mode:r,legend:i,legendScope:o}=t,u=this.getContourCacheKey(e);if(this.contourCache.has(u)){const s=this.contourCache.get(u);if(!s||s.schemaVersion!==Tt)return this.contourCache.delete(u),null;this.contourCache.delete(u),this.contourCache.set(u,s);const{colorMap:l}=be(i),{colorMap:d}=be(i,o),h=this.getValueTransformFn(e),a=this.applyValueTransform2D(s.rawArr2D,"raw",h),D=this.applyValueTransform2D(s.smoothArr2D,"smooth",h);return await this.getFcstRasterSource({...s,rawArr2D:a,smoothArr2D:D,colorMap:l,selectedColorMap:d,colorMode:r,scope:it(i,o)??t.scope,rasterCacheKey:this.getRasterRenderCacheKey(e,l)},e)}return null}async getFcstRasterSource(e,t=this.options){const{rawArr2D:r,smoothArr2D:i,extent:o,width:u,height:s,colorMap:l,selectedColorMap:d=l,colorMode:h="discrete",scope:a,rasterCacheKey:D=this.getRasterRenderCacheKey(t,l)}=e,p=Object.keys(l).map(S=>Number(S)).filter(S=>!isNaN(S)).sort((S,z)=>S-z),A=p.map(S=>bt(l[S]));let w=this.rasterRenderCache.get(D);if(w)this.rasterRenderCache.delete(D),this.rasterRenderCache.set(D,w);else{let S=this.rasterRenderLoadingTasks.get(D);S||(S=(async()=>{const z=t?.config?.alignWithIsoline===!0,C=t?.config?.isolineSmooth===!1?0:Ye(t?.config?.isolineSmoothness),P=z?dr(r,u,s,C):i,F=r,M=z&&h!=="gradient"?this.createIsolineContourFills(P,u,s,p,A,void 0,t):void 0;let I;if(z&&h!=="gradient"?(I=document.createElement("canvas"),I.width=Math.max(1,Math.floor(u)),I.height=Math.max(1,Math.floor(s))):I=await nn({width:Math.max(1,Math.floor(u)),height:Math.max(1,Math.floor(s)),rawArr2D:F,smoothArr2D:P,thresholds:p,colorsRGBA:A,colorMode:h,scope:[],softenMaskEdge:!z}),!I)return null;const g={canvas:I,renderMask:F,renderValues:P,contourFills:M};return this.setCachedRasterRender(D,g),g})(),this.rasterRenderLoadingTasks.set(D,S));try{w=await S??void 0}finally{this.rasterRenderLoadingTasks.get(D)===S&&this.rasterRenderLoadingTasks.delete(D)}}if(!w)return null;const v=Object.keys(d).map(Number).filter(Number.isFinite).sort((S,z)=>S-z),B=new Set(v),N=w.contourFills?.filter(S=>B.has(S.threshold)),E=v[0],L=v[v.length-1],X=typeof L=="number"&&p.some(S=>S>L),R=typeof E=="number"&&Number.isFinite(E)&&typeof L=="number"&&Number.isFinite(L)?this.createLegendEdgeColorCanvas(w.renderValues,u,s,E,L,bt(d[E]),bt(d[L])):void 0;return this.createFcstCanvasSource(w.canvas,o,h,w.renderMask,a,t,N,t?.config?.alignWithIsoline===!0?w.renderValues:void 0,R,X)}getValueTransformFn(e=this.options){return hr(e?.config?.valueTransform)}applyValueTransformValue(e,t,r=this.getValueTransformFn()){if(!r)return e;try{const i=r(e,t);return i==null||isNaN(Number(i))?NaN:Number(i)}catch(i){return console.warn("[FcstLayer] valueTransform 执行失败,已回退原始值",i),e}}applyValueTransform2D(e,t,r=this.getValueTransformFn()){if(!r)return e;const i=e.length,o=e[0]?.length??0,u=Array.from({length:i},()=>Array(o).fill(void 0));let s=!1;for(let l=0;l<i;l++)for(let d=0;d<o;d++){const h=e[l]?.[d];if(h==null||isNaN(Number(h))){u[l][d]=NaN;continue}try{const a=r(Number(h),{x:d,y:l,width:o,height:i,source:t});u[l][d]=a==null||!Number.isFinite(Number(a))?NaN:Number(a)}catch(a){s||(console.warn("[FcstLayer] valueTransform 执行失败,已回退原始值",a),s=!0),u[l][d]=Number(h)}}return u}isMaskSmoothEnabled(e=this.options){return e?.config?.smooth===!0}getMaskSmoothIterations(e=this.options){const t=e?.config?.smoothIterations,r=Math.floor(Number(t??2));return Number.isFinite(r)?Math.max(1,Math.min(5,r)):2}chaikinSmoothRing(e,t=2){if(!e.length)return e;let r=e.slice();const i=r[0],o=r[r.length-1];if(i&&o&&i[0]===o[0]&&i[1]===o[1]&&r.length>2&&(r=r.slice(0,-1)),r.length<3)return e;for(let l=0;l<t;l++){const d=[],h=r.length;for(let a=0;a<h;a++){const D=r[a],p=r[(a+1)%h];if(!D||!p)continue;const A=D[0],w=D[1],v=p[0],B=p[1];if(typeof A!="number"||typeof w!="number"||typeof v!="number"||typeof B!="number")continue;const N=.75*A+.25*v,E=.75*w+.25*B,L=.25*A+.75*v,X=.25*w+.75*B;d.push([N,E],[L,X])}if(r=d,r.length<3)break}const s=r[0];return r.length&&s?[...r,s]:e}smoothMaskContourPolygons(e,t){if(!e.length)return e;const r=[];for(const i of e){const o=[];for(let u=0;u<i.length;u++){const s=i[u];if(!s||s.length<4){s&&o.push(s);continue}o.push(this.chaikinSmoothRing(s,t))}r.push(o)}return r.length?r:e}createVisibleMaskContourPath(e,t,r,i,o=!1,u=this.options){if(!o)return null;const s=this.getMaskSmoothIterations(u),l=t*r;if(!l)return null;const d=i&&typeof i[0]<"u",h=i&&typeof i[1]<"u",a=d?Number(i[0]):0,D=h?Number(i[1]):0,p=new Float32Array(l);let A=0;for(let E=0;E<r;E++)for(let L=0;L<t;L++){const X=E*t+L,R=e?.[E]?.[L],S=R==null||isNaN(Number(R))?void 0:Number(R);S!==void 0&&(!d||S>=a)&&(!h||S<=D)&&(p[X]=1,A+=1)}if(!A)return null;const w=It.contours().size([t,r]).thresholds([.5])(p);if(!w.length)return null;const v=[];for(const E of w){const L=E.coordinates??[];for(const X of L)v.push(X)}const B=o?this.smoothMaskContourPolygons(v,s):v,N=new Path2D;for(const E of B)for(const L of E){if(!L.length)continue;const X=L[0];if(!(!X||typeof X[0]!="number"||typeof X[1]!="number")){N.moveTo(X[0],X[1]);for(let R=1;R<L.length;R++){const S=L[R];!S||typeof S[0]!="number"||typeof S[1]!="number"||N.lineTo(S[0],S[1])}N.closePath()}}return N}createIsolineContourPath(e,t,r,i,o=this.options){const u=i&&typeof i[0]<"u"?Number(i[0]):NaN,s=i&&typeof i[1]<"u"?Number(i[1]):1/0;if(!Number.isFinite(u))return null;const l=new Float64Array(t*r);let d=0;for(let p=0;p<r;p++){const A=e[p];for(let w=0;w<t;w++){const v=A?.[w],B=v!==void 0&&Number.isFinite(v)&&v<=s;l[p*t+w]=B?v:NaN,B&&v>=u&&(d+=1)}}if(!d)return null;const h=o?.config?.isolineSmooth===!1?0:Ye(o?.config?.isolineSmoothness),a=It.contours().size([t,r]).thresholds([u]).smooth(h>0)(l);if(!a.length)return null;const D=new Path2D;for(const p of a)for(const A of p.coordinates??[])for(const w of A){const v=w[0];if(v){D.moveTo(v[0],v[1]);for(let B=1;B<w.length;B++){const N=w[B];N&&D.lineTo(N[0],N[1])}D.closePath()}}return D}createIsolineContourFills(e,t,r,i,o,u,s=this.options){const l=u&&typeof u[0]<"u"?Number(u[0]):-1/0,d=u&&typeof u[1]<"u"?Number(u[1]):1/0,h=i.filter(B=>B>=l&&B<=d);if(!h.length||t<2||r<2)return[];const a=new Float64Array(t*r);for(let B=0;B<r;B++){const N=e[B];for(let E=0;E<t;E++){const L=N?.[E];a[B*t+E]=L!==void 0&&Number.isFinite(L)?L:NaN}}const D=s?.config?.isolineSmooth===!1?0:Ye(s?.config?.isolineSmoothness),p=It.contours().size([t,r]).thresholds(h).smooth(D>0)(a),A=new globalThis.Map;i.forEach((B,N)=>{const E=o[N];E&&A.set(B,E)});const w=(B,N)=>{for(const E of N.coordinates??[])for(const L of E){const X=L[0];if(!X)continue;const R=X[0],S=X[1];if(!(typeof R!="number"||typeof S!="number")){B.moveTo(R,S);for(let z=1;z<L.length;z++){const C=L[z],P=C?.[0],F=C?.[1];typeof P=="number"&&typeof F=="number"&&B.lineTo(P,F)}B.closePath()}}},v=[];for(let B=0;B<p.length;B++){const N=p[B],E=Number(N.value),L=A.get(E);if(!L)continue;const X=new Path2D;w(X,N);const R=p[B+1];R&&w(X,R);const S=Math.max(0,Math.min(1,(L[3]??255)/255));v.push({threshold:E,path:X,color:`rgba(${L[0]}, ${L[1]}, ${L[2]}, ${S})`})}return v}createScopeMaskCanvas(e,t,r,i,o=!1){const u=i&&typeof i[0]<"u",s=i&&typeof i[1]<"u";if(!u&&!s)return null;const l=u?Number(i[0]):-1/0,d=s?Number(i[1]):1/0,h=document.createElement("canvas");h.width=Math.max(1,Math.floor(t)),h.height=Math.max(1,Math.floor(r));const a=h.getContext("2d");if(!a)return null;const D=a.createImageData(h.width,h.height),p=D.data;for(let A=0;A<h.height;A++){const w=e[A];for(let v=0;v<h.width;v++){const B=w?.[v];B===void 0||!Number.isFinite(B)||B<l||(o?B>=d:B>d)||(p[(A*h.width+v)*4+3]=255)}}return a.putImageData(D,0,0),h}createLegendEdgeColorCanvas(e,t,r,i,o,u,s){const l=document.createElement("canvas");l.width=Math.max(1,Math.floor(t)),l.height=Math.max(1,Math.floor(r));const d=l.getContext("2d");if(!d)return null;const h=d.createImageData(l.width,l.height),a=h.data;for(let D=0;D<l.height;D++){const p=e[D];for(let A=0;A<l.width;A++){const w=p?.[A];if(w===void 0||!Number.isFinite(w))continue;const v=w<=i?u:w>=o?s:void 0;if(!v)continue;const B=(D*l.width+A)*4;a[B]=v[0],a[B+1]=v[1],a[B+2]=v[2],a[B+3]=v[3]}}return d.putImageData(h,0,0),l}createFcstCanvasSource(e,t,r="discrete",i,o,u=this.options,s,l,d,h=!1){const a=document.createElement("canvas"),D=r==="gradient",p=u?.config?.pixelSnap===!0,A=u?.config?.useDevicePixelRatio===!0,w=u?.config?.alignWithIsoline===!0,v=i?this.createScopeMaskCanvas(w?l??i:i,e.width,e.height,o,h):null;return new kt({projection:"EPSG:3857",ratio:1,interpolate:D&&!w,canvasFunction:(N,E,L,X)=>{const R=A?Math.max(1,L||1):1,S=X??[1,1],z=Math.max(1,Math.floor((S[0]??1)*R)),C=Math.max(1,Math.floor((S[1]??1)*R));a.width!==z&&(a.width=z),a.height!==C&&(a.height=C);const P=a.getContext("2d",{alpha:!0});if(!P)return a;P.clearRect(0,0,z,C);const[F,M,I,g]=N,[y,b,T,O]=t,H=I-F,G=g-M;if(H<=0||G<=0)return a;const V=z/H,Z=C/G,J=(y-F)*V,W=(g-O)*Z,U=(T-y)*V,_=(O-b)*Z;if(U<=0||_<=0)return a;const K=p?Math.floor(J):J,Y=p?Math.floor(W):W,re=p?Math.ceil(J+U):J+U,ae=p?Math.ceil(W+_):W+_,$=Math.max(1,re-K),ee=Math.max(1,ae-Y);if(s?.length){P.save(),P.translate(K,Y),P.scale($/e.width,ee/e.height);for(const ce of s)P.fillStyle=ce.color,P.fill(ce.path,"evenodd");return P.restore(),a}return P.imageSmoothingEnabled=D&&!w,D&&!w&&(P.imageSmoothingQuality="high"),P.drawImage(e,K,Y,$,ee),d&&(P.save(),P.globalCompositeOperation="source-atop",P.imageSmoothingEnabled=D&&!w,D&&!w&&(P.imageSmoothingQuality="high"),P.drawImage(d,K,Y,$,ee),P.restore()),v&&(P.save(),P.globalCompositeOperation="destination-in",P.imageSmoothingEnabled=D&&!w,D&&!w&&(P.imageSmoothingQuality="high"),P.drawImage(v,K,Y,$,ee),P.restore()),a}})}async preload(e){const t={...this.options,config:{...this.options?.config??{}},url:e},r=await Bt(t);if(!r)return;const{uniqueThresholds:i,rawArr2D:o,smoothArr2D:u,extent:s,width:l,height:d}=r,h=this.getContourCacheKey(t);this.setCachedContourData(h,{schemaVersion:Tt,uniqueThresholds:i,rawArr2D:o,smoothArr2D:u,extent:s,width:l,height:d})}delete(){this.abortController.abort(),this.sourceRequestVersion++,Te(this.map,this.options.id),this.contourCache.clear(),this.contourLoadingTasks.clear(),this.rasterRenderCache.clear(),this.rasterRenderLoadingTasks.clear()}toggleVisible(e){we(this.map,this.options.id,e)}async updateParams(e){this.options={...this.options,...e,config:{...this.options?.config??{},...e?.config??{}}};const t=this.beginSourceRequest(),r=this.getRequestOptions(),{id:i}=this.options,o=de(this.map,i);if(!o){this.ready=this.add(),await this.ready;return}const u=await this.getSourceFromCache(r);if(!this.isCurrentRequest(t))return;const s=u??await this.getSourceFromParams(r);if(!this.isCurrentRequest(t)||!s)return;o.setSource(s);const l=Number(r.config?.opacity);Number.isFinite(l)&&o.setOpacity(Math.max(0,Math.min(1,l)));const d=Number(r.config?.zIndex);Number.isFinite(d)&&o.setZIndex(d)}}const Lt=1,xt=new globalThis.Map;function ir(n,e){xt.set(n,e)}function Yt(n){return xt.get(n)}function on(n){xt.delete(n)}function un(n){xt.forEach(e=>n(e))}function sn(){xt.clear()}class zt{map;options;contourCache;externalGridDataProvider;constructor(e,t,r){this.map=e,this.options=t,this.contourCache=new Map,this.externalGridDataProvider=r,this.add()}getClassName(){return`${this.options.id}-gridValue`}getRuntimeConfig(){const e=this.options?.config??{},t=e.gridConfig??{};return{...e,...t}}async add(){const e=this.getRuntimeConfig(),t=Number.isFinite(Number(e.zIndex))?Number(e.zIndex):10,r=Number.isFinite(Number(e.opacity))?Number(e.opacity):1,i=this.getClassName(),o=de(this.map,i);o&&this.delete();const u=o?o.getZIndex():t+1,s=await this.getSourceFromCache()??await this.getSourceFromParams();if(!s)return;const l=new Ct({className:i,source:s,zIndex:u,opacity:r});return this.map.addLayer(l),l}getCacheKey(){const{id:e,url:t}=this.options;return`${e}${t}`}async getOrLoadGridData(){const e=this.getCacheKey(),t=this.contourCache.get(e);if(t&&t.schemaVersion===Lt)return t;if(this.externalGridDataProvider){const o=await this.externalGridDataProvider();if(!o)return null;const u={schemaVersion:Lt,rawArr2D:o.rawArr2D,extent:o.extent,width:o.width,height:o.height};return this.contourCache.set(e,u),u}const r=await Bt(this.options);if(!r)return null;const i={schemaVersion:Lt,rawArr2D:r.rawArr2D,extent:r.extent,width:r.width,height:r.height};return this.contourCache.set(e,i),i}async getSourceFromCache(){const e=this.getCacheKey(),t=this.contourCache.get(e);return!t||t.schemaVersion!==Lt?(t&&this.contourCache.delete(e),null):this.createGridCanvasSource(t)}async getSourceFromParams(){const e=await this.getOrLoadGridData();return e?this.createGridCanvasSource(e):null}getTextDrawOptions(){const e=this.getRuntimeConfig(),t=Math.max(8,Math.floor(Number(e.pixelStep??40))),r=Math.max(10,Math.floor(Number(e.fontSize??14))),i=Math.max(0,Math.floor(Number(e.decimals??1))),o=String(e.fontColor??"#000"),u=String(e.strokeColor??"#fff"),s=Math.max(0,Number(e.strokeWidth??2)),l=String(e.fontFamily??"Arial, sans-serif"),d=e.useDevicePixelRatio===!0;return{pixelStep:t,fontSize:r,decimals:i,fontColor:o,strokeColor:u,strokeWidth:s,fontFamily:l,useDevicePixelRatio:d}}isValueInScope(e,t){if(!Number.isFinite(e))return!1;if(!t||t.length!==2)return!0;const r=Number(t[0]),i=Number(t[1]);if(!Number.isFinite(r)||!Number.isFinite(i))return!0;const o=Math.min(r,i),u=Math.max(r,i);return e>=o&&e<=u}interpolateValue(e,t,r,i,o){const u=Math.floor(i),s=Math.ceil(i),l=Math.floor(o),d=Math.ceil(o);if(u<0||s>=t||l<0||d>=r)return null;const h=Number(e[l]?.[u]),a=Number(e[l]?.[s]),D=Number(e[d]?.[u]),p=Number(e[d]?.[s]);if(![h,a,D,p].every(v=>Number.isFinite(v)))return null;const A=i-u,w=o-l;return h*(1-A)*(1-w)+a*A*(1-w)+D*(1-A)*w+p*A*w}getValueTransformFn(){const e=this.getRuntimeConfig();return hr(e?.valueTransform)}applyValueTransformValue(e,t){const r=this.getValueTransformFn();if(!r)return e;try{const i=r(e,t);return i==null||isNaN(Number(i))?NaN:Number(i)}catch(i){return console.warn("[GridLayer] valueTransform 执行失败,已回退原始值",i),e}}createGridCanvasSource(e){const t=document.createElement("canvas"),{rawArr2D:r,extent:i,width:o,height:u}=e,s=this.getTextDrawOptions(),l=this.getRuntimeConfig(),d=typeof l?.valueTransform=="function"||typeof l?.valueTransform=="string"&&l.valueTransform.trim().length>0,h=l?.valueTransformAffectsScope!==!1,a=it(this.options.config.legend,this.options.config.legendScope)??this.options.config.scope;return new kt({projection:"EPSG:3857",ratio:1,interpolate:!1,canvasFunction:(D,p,A,w)=>{const v=w??[1,1],B=Math.max(1,Math.floor(v[0]??1)),N=Math.max(1,Math.floor(v[1]??1)),E=this.map.getSize(),L=Math.max(1,Math.floor(E?.[0]??B)),X=Math.max(1,Math.floor(E?.[1]??N)),R=B/L,S=N/X,z=s.useDevicePixelRatio?Math.max(1,Number(A||1)):1,C=Math.max(.01,(R+S)*.5/z),P=B,F=N,M=L,I=X;t.width!==P&&(t.width=P),t.height!==F&&(t.height=F);const g=t.getContext("2d",{alpha:!0});if(!g)return t;g.setTransform(1,0,0,1,0,0),g.clearRect(0,0,P,F),g.font=`${Math.max(10,Math.round(s.fontSize*C))}px ${s.fontFamily}`,g.fillStyle=s.fontColor,g.strokeStyle=s.strokeColor,g.lineWidth=Math.max(0,s.strokeWidth*C),g.lineJoin="round",g.miterLimit=2,g.textAlign="center",g.textBaseline="middle";const[y,b,T,O]=D,[H,G,V,Z]=i,J=T-y,W=O-b,U=V-H,_=Z-G;if(J<=0||W<=0||U<=0||_<=0)return t;const K=Math.max(8,Math.round(s.pixelStep));for(let Y=K/2;Y<I;Y+=K)for(let re=K/2;re<M;re+=K){const ae=y+re/M*J,$=O-Y/I*W;if(ae<H||ae>V||$<G||$>Z)continue;const ee=(ae-H)/U*(o-1),ce=(Z-$)/_*(u-1),oe=this.interpolateValue(r,o,u,ee,ce);if(oe===null)continue;const ge=this.applyValueTransformValue(oe,{x:ee,y:ce,width:o,height:u,source:"raw"});if(!Number.isFinite(ge))continue;const se=d&&!h?oe:ge;if(!this.isValueInScope(se,a))continue;const pe=ge.toFixed(s.decimals),ve=re*R,fe=Y*S;g.lineWidth>0&&g.strokeText(pe,ve,fe),g.fillText(pe,ve,fe)}return t}})}delete(){Te(this.map,this.getClassName()),this.contourCache.clear()}toggleVisible(e){we(this.map,this.getClassName(),e)}async updateParams(e){this.options={...this.options,...e,config:{...this.options.config,...e?.config??{}}};const t=de(this.map,this.getClassName());if(!t){await this.add();return}const r=await this.getSourceFromCache()??await this.getSourceFromParams();r&&t.setSource(r)}}class an{map;options;contourCache;constructor(e,t){this.map=e,this.options=t,this.contourCache=new Map,this.add()}async add(){console.time();const{id:e,config:t}=this.options,{zIndex:r=10}=t,i=de(this.map,e);i&&this.delete();const o=i?i.getZIndex():r??1200,u=this.getSourceFromCache();if(u){const l=new Ct({source:u,className:e+"-arrow",zIndex:o});return this.map.addLayer(l),l}const s=await this.getArrowParams();if(s){const l=this.getArrowSource({...s,extent:this.options.config.extent,config:this.options.config}),d=new Ct({source:l,className:e+"-arrow",zIndex:o});this.map.addLayer(d)}console.timeEnd()}async getArrowParams(){const{id:e,url:t,config:r}=this.options,{cache:i,scope:o}=r,u=e+t,s=[-99999,99999];Ke.isNumber(o?.[0])&&(s[0]=o[0]),Ke.isNumber(o?.[1])&&(s[1]=o[1]);const{grayArr:l,width:d,height:h}=await _e(t,s);if(!(!l||!d||!h))return i&&this.contourCache.set(u,{grayArr:l,width:d,height:h}),{grayArr:l,width:d,height:h}}getArrowSource(e){const{grayArr:t,width:r,height:i,extent:o,config:u}=e,{pixelStep:s=20,fontSize:l=12,color:d="rgb(255,255,255)"}=u,h={angle:t,width:r,height:i},a=st(o);return this.createArrowCanvasSource(h,a,{pixelStep:s,fontSize:l,color:d})}createArrowCanvasSource(e,t,r){const{pixelStep:i=20,fontSize:o=12,color:u="rgb(255,255,255)"}=r,s=document.createElement("canvas");return new kt({projection:"EPSG:3857",ratio:1,canvasFunction:(l,d,h,a)=>{const D=a??[1,1],p=Math.max(1,Math.floor((D[0]??1)*h)),A=Math.max(1,Math.floor((D[1]??1)*h));s.width!==p&&(s.width=p),s.height!==A&&(s.height=A);const w=s.getContext("2d",{alpha:!0});if(!w)return s;w.clearRect(0,0,p,A),w.fillStyle=u,w.font=`${Math.max(1,Math.floor(o*h))}px Arial`,w.textAlign="center",w.textBaseline="middle";const[v,B,N,E]=l,[L,X,R,S]=t,z=N-v,C=E-B;if(z<=0||C<=0)return s;const P=Math.max(v,L),F=Math.max(B,X),M=Math.min(N,R),I=Math.min(E,S);if(P>=M||F>=I)return s;const g=R-L,y=S-X;if(g<=0||y<=0)return s;const b=Math.max(1,p-1),T=Math.max(1,A-1),O=Math.max(1,Math.floor(i*h)),H=Math.max(g/Math.max(1,e.width-1),y/Math.max(1,e.height-1)),G=H>0&&isFinite(d)?Math.max(1,Math.floor(d/H)):1,V=Math.max(O,Math.min(O*6,O*G)),Z=Math.max(0,Math.floor((P-v)/z*b)),J=Math.min(p-1,Math.ceil((M-v)/z*b)),W=Math.max(0,Math.floor((E-I)/C*T)),U=Math.min(A-1,Math.ceil((E-F)/C*T));if(Z>J||W>U)return s;for(let _=W;_<=U;_+=V)for(let K=Z;K<=J;K+=V){const Y=v+z*K/b,re=E-C*_/T;if(Y<L||Y>R||re<X||re>S)continue;const ae=(Y-L)/g*(e.width-1),$=(S-re)/y*(e.height-1),ee=Vt(e.angle,ae,$,e.width,e.height);if(!isFinite(ee))continue;const ce=(ee-90)*Math.PI/180;w.save(),w.translate(K,_),w.rotate(ce),w.fillText("→",0,0),w.restore()}return s}})}getSourceFromCache(){const{id:e,url:t,config:r}=this.options,{scope:i,cache:o,extent:u,pixelStep:s=20,fontSize:l=12,color:d="rgb(255,255,255)"}=r,h=e+t;if(o&&this.contourCache.has(h)){const a=this.contourCache.get(h);return this.getArrowSource({...a,extent:u,scope:i,pixelStep:s,fontSize:l,color:d})}return null}delete(){Te(this.map,this.options.id+"-arrow"),this.contourCache.clear()}toggleVisible(e){we(this.map,this.options.id+"-arrow",e)}}const Ar="26",cn=new Set(["23","24",Ar]),Eo=6,xo=["","-notes","-filtered","-other"],Xe=new globalThis.Map,Ft=new globalThis.Map,ur=new WeakMap,Mr=new globalThis.Map,St={0:"#9CF790",10:"#37A600",25:"#67B4F8",50:"#0002FE",100:"#FA03F0",250:"#710100",400:"#ffa10c",600:"#fe6301"},No={0:"#cccccc","2.5":"#a1a1a1",5:"#707070",10:"#454545",20:"#7345e6",30:"#4d0074"},Po={0:"#c3e7b9",10:"#7ec179",25:"#95c5e0",50:"#3b3a9f",100:"#b05dae"};function To(){return new DOMException("The operation was aborted","AbortError")}function wt(n){if(n?.aborted)throw n.reason??To()}function ln(n,e){let t=ur.get(n);t||(t=new globalThis.Map,ur.set(n,t));const r=(t.get(e)??0)+1;return t.set(e,r),r}function Or(n,e,t){return ur.get(n)?.get(e)===t}function Lo(n){return JSON.stringify({filePath:n.filePath,authorization:n.authorization??""})}function Fo(n,e){for(Xe.delete(n),Xe.set(n,e);Xe.size>Eo;){const t=Xe.keys().next().value;if(t===void 0)break;Xe.delete(t)}}function fn(n,e){const t=new Set(xo.map(r=>`${e}${r}`));for(const r of[...n.getLayers().getArray()])t.has(r.getClassName())&&n.removeLayer(r)}function ut(n){const e=String(n??"").trim();return cn.has(e)?e:Ar}function sr(n,e,t=.05){const r=n[0]-e[0],i=n[1]-e[1];return r*r+i*i<t*t}function hn(n){let e=0;for(let t=0;t<n.length-1;t++){const[r,i]=n[t],[o,u]=n[t+1];e+=(o-r)*(u+i)}return e>0}function So(n){const e=[];let t=n.findIndex(o=>/^CLOSED_CONTOURS:/i.test(o));if(t<0)return Q.featureCollection(e);const r=n[t].match(/CLOSED_CONTOURS:\s*(\d+)/i);let i=r?Number.parseInt(r[1],10):0;for(t++;i>0&&t<n.length;){const o=n[t].trim().match(/^(\d+)\s+(\d+)$/);if(!o){t++;continue}let u=Number.parseInt(o[2],10);const s=[];for(t++;u>0&&t<n.length;){const D=n[t].trim().split(/\s+/).map(Number).filter(Number.isFinite);for(let p=0;p+2<D.length&&u>0;p+=3)s.push([D[p],D[p+1]]),u--;t++}let l=!1;t<n.length&&/^NoLabel\s+0[^\s]*/.test(n[t].trim())&&(l=!0,t++);let d="3";const h=t<n.length?n[t].trim().match(/^([0-9]+(?:\.[0-9]+)?)\s+1$/):null;h&&(d=h[1],t++);const a=s[s.length-1];if(s.length>3&&!sr(s[0],a,.1)&&s.push([...s[0]]),s.length>3&&sr(s[0],s[s.length-1],.1)){hn(s)&&s.reverse();const D=s[0],p=s[s.length-1];(D[0]!==p[0]||D[1]!==p[1])&&s.push([...s[0]]),e.push(Q.polygon([s],{level:d,noLabelZero:l}))}i--}return e.sort((o,u)=>Number(o.properties?.level)-Number(u.properties?.level)),Q.featureCollection(e)}function Mo(n){const e=[];let t=n.findIndex(r=>/^NOTES_SYMBOL:/i.test(r));if(t<0)return e;for(t++;t<n.length;){const r=n[t].trim();if(!r||!/^\d+\s/.test(r))break;const i=r.split(/\s+/),o=i[5],u=Number.parseFloat(i[1]),s=Number.parseFloat(i[2]);o&&Number.isFinite(u)&&Number.isFinite(s)&&e.push({type:"Feature",geometry:{type:"Point",coordinates:[u,s]},properties:{text:o,noteValue:o,rawLine:r,rawParts:i}}),t++}return e}function Oo(n){const e=[];let t=n.findIndex(r=>/^SYMBOLS:/i.test(r));if(t<0)return e;for(t++;t<n.length;){const r=n[t].trim();if(!r||/^[A-Z_]+:/.test(r))break;const i=r.split(/\s+/).filter(Boolean),o=Number.parseFloat(i[1]),u=Number.parseFloat(i[2]);i.length>=3&&Number.isFinite(o)&&Number.isFinite(u)&&e.push({type:"Feature",geometry:{type:"Point",coordinates:[o,u]},properties:{symbolId:i[0],alt:Number.parseFloat(i[3]??"0"),angle:Number.parseFloat(i[4]??"0")}}),t++}return e}function Xo(n){const e=[],t=n.findIndex(u=>/^CLOSED_CONTOURS:/i.test(u)),r=t<0?n.length:t,i=/^(\d+(?:\.\d+)?)\s+\d+\s+(\d+)\s*$/;let o=0;for(;o<r;){const u=n[o].trim().match(i);if(!u){o++;continue}const s=u[1];let l=Number.parseInt(u[2],10);const d=[];for(o++;o<r&&l>0;){const D=n[o].trim().split(/\s+/).map(Number).filter(Number.isFinite);for(let p=0;p+2<D.length&&l>0;p+=3)d.push([D[p],D[p+1]]),l--;o++}let h=!1;if(o<r&&/^NoLabel\s+0[^\s]*/.test(n[o].trim())&&(h=!0,o++),!d.length)continue;const a=d.length>3&&sr(d[0],d[d.length-1],.1);a&&hn(d)&&d.reverse(),e.push({type:"Feature",geometry:{type:a?"Polygon":"LineString",coordinates:a?[d]:d},properties:{level:s,noLabelZero:h}})}return e}function Ee(n){try{const e=Q.bbox(n);return e.length<4||e.slice(0,4).some(t=>!Number.isFinite(t))?null:[e[0],e[1],e[2],e[3]]}catch{return null}}function Et(n,e){return!n||!e?!0:!(n[2]<e[0]||n[0]>e[2]||n[3]<e[1]||n[1]>e[3])}function pr(n){if(!/polygon/i.test(String(n?.geometry?.type??"")))return[n];try{return Q.flatten(n).features.map(e=>({...e,properties:{...n.properties??{},...e.properties??{}}}))}catch{return[n]}}function Ho(n,e){try{const t=Q.area(n),r=Q.area(e);return Number.isFinite(t)&&Number.isFinite(r)&&t>0&&t<r*.999999&&(Q.booleanWithin(n,e)||Q.booleanContains(e,n))}catch{return!1}}function Io(n){if(n.length<=1||!n.every(u=>Number(u?.properties?.level)===0))return n;const e=n.flatMap(pr),t=e.map(u=>{try{return Q.area(u)}catch{return 0}}),r=new globalThis.Map;if(e.forEach((u,s)=>{let l=-1,d=Number.POSITIVE_INFINITY;e.forEach((h,a)=>{const D=t[a]??0;s===a||D>=d||!Et(Ee(u),Ee(h))||!Ho(u,h)||(l=a,d=D)}),l>=0&&r.set(s,l)}),!r.size)return e;const i=new globalThis.Map;r.forEach((u,s)=>{const l=i.get(u)??[];l.push(e[s]),i.set(u,l)});const o=[];return e.forEach((u,s)=>{if(r.has(s))return;let l=[u];for(const d of i.get(s)??[])l=l.flatMap(h=>{try{if(!Et(Ee(h),Ee(d))||!Q.booleanIntersects(h,d))return[h];const a=Q.difference(Q.featureCollection([h,d]));return a?Q.flatten(a).features.map(D=>({...D,properties:{...u.properties??{},...D.properties??{}}})):[]}catch{return[h]}});o.push(...l)}),o}function Ro(n){const e=new globalThis.Map,t=[];for(const i of n){if(!/polygon/i.test(String(i?.geometry?.type??""))){t.push(i);continue}const o=`${ut(i.properties?.symbolId)}__${String(i.properties?.level??"")}`,u=e.get(o)??[];u.push(i),e.set(o,u)}const r=[];return e.forEach(i=>{const o=Io(i);if(o.length<=1){r.push(...o);return}try{const u=Q.union(Q.featureCollection(o));if(!u){r.push(...o);return}Q.flatten(u).features.forEach(s=>{s.properties={...o[0]?.properties??{},...s.properties??{}},r.push(s)})}catch{r.push(...o)}}),[...t,...r]}function zo(n,e){const t=new globalThis.Map,r=[];for(const o of n){if(!/polygon/i.test(String(o?.geometry?.type??""))){r.push(o);continue}const u=ut(o.properties?.symbolId),s=t.get(u)??[];s.push(o),t.set(u,s)}const i=[];return t.forEach(o=>{const u=o.slice().sort((l,d)=>Number(d.properties?.level)-Number(l.properties?.level)),s=[];for(const l of u){wt(e);let d=pr(l);for(const h of s)if(d=d.flatMap(a=>{try{if(!Et(Ee(a),h.bbox))return[a];if(!Q.booleanIntersects(a,h.feature))return[a];const D=Q.difference(Q.featureCollection([a,h.feature]));return D?Q.flatten(D).features.map(p=>({...p,properties:{...l.properties??{},...p.properties??{}}})):[]}catch{return[a]}}),!d.length)break;for(const h of d)s.push({feature:h,bbox:Ee(h)});i.push(...d)}}),[...r,...i]}function qo(n,e=1e-6){if(!n.length)return[];const t=(o,u)=>{const s=o[0]-u[0],l=o[1]-u[1];return s*s+l*l<=e*e},r=[];for(const o of n)(!r.length||!t(o,r[r.length-1]))&&r.push([...o]);if(r.length>1&&!t(r[0],r[r.length-1])&&r.push([...r[0]]),r.length<4)return n;const i=[r[0]];for(let o=1;o<r.length-1;o++){const u=r[o-1],s=r[o],l=r[o+1];Math.abs((s[0]-u[0])*(l[1]-u[1])-(s[1]-u[1])*(l[0]-u[0]))>e&&i.push(s)}return i.push(r[r.length-1]),i.length>=4?i:r}function Vo(n,e,t=.001){if(n?.geometry?.type!=="Polygon"||!/linestring/i.test(e?.geometry?.type??""))return Q.featureCollection([n]);if(e.geometry.type==="LineString"){const l=e.geometry.coordinates;if(Q.booleanPointInPolygon(Q.point(l[0]),n)||Q.booleanPointInPolygon(Q.point(l[l.length-1]),n))return Q.featureCollection([n])}const r=Q.lineIntersect(e,n),i=Q.explode(e);for(const l of i.features.slice(0,-1))r.features.push(l);const o=Q.buffer(e,t,{units:"kilometers"});if(!o)return Q.featureCollection([n]);const u=Q.difference(Q.featureCollection([n,o]));if(!u?.geometry)return Q.featureCollection([n]);const s=pr(u).map((l,d)=>{const h=l.geometry.coordinates[0];for(let a=0;a<h.length;a++){const D=Q.point(h[a]),p=r.features.find(A=>Q.distance(A,D,{units:"kilometers"})<=t*2);p&&(h[a]=[...p.geometry.coordinates])}return l.geometry.coordinates[0]=qo(h),l.properties={...n.properties??{},id:`${n.properties?.id??"poly"}-${d}`},l});return Q.featureCollection(s)}function Go(n,e){const t=n.split(/\r?\n/),r=So(t),i=Mo(t),o=Oo(t).filter(p=>cn.has(String(p.properties?.symbolId))),u=Xo(t).filter(p=>p.geometry?.type==="LineString"&&Number(p.properties?.level)===0);wt(e);let s=r.features;if(s.length>1)try{const p=Q.union(r);p&&(s=Q.flatten(p).features.map((A,w)=>({...A,properties:{...A.properties??{},id:A.properties?.id??`u-${w}`}})))}catch{s=r.features}const l=u.map(p=>({feature:p,bbox:Ee(p)}));for(const p of l)wt(e),s=s.flatMap(A=>{try{if(!Et(Ee(A),p.bbox))return[A];if(!Q.booleanIntersects(A,p.feature))return[A];const w=Vo(A,p.feature);return w.features.length?w.features:[A]}catch{return[A]}});const d=o.map(p=>({feature:p,point:Q.point(p.geometry.coordinates,p.properties)})),h=s.map(p=>{let A=Ar;for(const w of d)try{if(Q.booleanPointInPolygon(w.point,p)){A=ut(w.feature.properties?.symbolId);break}}catch{}return{...p,properties:{symbolId:A}}}),a=r.features.map(p=>({feature:p,bbox:Ee(p)})),D=[];for(const p of h){wt(e);const A=Ee(p);for(const w of a)if(Et(A,w.bbox))try{const v=Q.intersect(Q.featureCollection([p,w.feature]));if(!v)continue;const B={...w.feature.properties??{},...p.properties??{}};Q.flatten(v).features.forEach(N=>{N.properties={...B,...N.properties??{}},D.push(N)})}catch{}}return{vectorFeatures:zo(Ro(D),e),noteFeatures:i,symbolFeatures:o,otherFeatures:u}}async function ko(n){const e=Lo(n),t=Xe.get(e);if(t)return Xe.delete(e),Xe.set(e,t),t;if(!n.signal){const i=Ft.get(e);if(i)return i}const r=(async()=>{const i=n.authorization?{Authorization:n.authorization}:void 0,o=await fetch(n.filePath,{headers:i,signal:n.signal});if(!o.ok)throw new Error(`MICAPS request failed: ${o.status} ${o.statusText}`);const u=Go(await o.text(),n.signal);return Fo(e,u),u})();n.signal||Ft.set(e,r);try{return await r}finally{!n.signal&&Ft.get(e)===r&&Ft.delete(e)}}function er(n,e,t){const r=Number(e),i=n[String(r)];if(i)return i;if(!Number.isFinite(r))return t;const o=Object.keys(n).map(Number).filter(Number.isFinite),u=o.length?Math.max(...o):Number.POSITIVE_INFINITY;return r>u?n[String(u)]??t:t}function Qo(n,e){const t=ut(n);return er(t==="23"?No:t==="24"?Po:St,e,St[0])}function jo(n,e=10,t=4){if(typeof document>"u")return null;const r=globalThis.devicePixelRatio||1,i=`${n}_${e}_${t}_${r}`,o=Mr.get(i);if(o)return o;const u=document.createElement("canvas");u.width=Math.ceil(e*r),u.height=Math.ceil(e*r);const s=u.getContext("2d");if(!s)return null;s.setTransform(r,0,0,r,0,0),s.strokeStyle=n,s.lineWidth=t,s.beginPath(),s.moveTo(-e,e*2),s.lineTo(e*2,-e),s.moveTo(0,e*2),s.lineTo(e*3,-e),s.stroke();const l=s.createPattern(u,"repeat");return l&&Mr.set(i,l),l}function Wo(n,e,t){const{className:r,opacity:i=.8,showText:o=!1,showFillcolor:u=!0,showIsoline:s=!0,showPointMarkers:l=!1}=t,d={dataProjection:"EPSG:4326",featureProjection:n.getView().getProjection()},h=A=>new Gr().readFeatures({type:"FeatureCollection",features:A},d),a=new globalThis.Map,p=[new ot({className:r,opacity:Math.max(0,Math.min(1,i)),zIndex:t.zIndex??10,visible:t.visible??!0,source:new yt({features:h(e.vectorFeatures)}),style:A=>{const w=ut(A.get("symbolId")),v=A.get("level"),B=`${w}_${String(v)}_${o}_${u}_${s}`,N=a.get(B);if(N)return N;const E=[];if(u){const L=Qo(w,v);E.push(new j.Style({fill:new j.Fill({color:w==="24"?jo(L)??L:L})}))}return(s||o)&&E.push(new j.Style({stroke:s?new j.Stroke({color:"#000",width:1}):void 0,text:o?new j.Text({text:String(v??""),font:"bold 16px sans-serif",fill:new j.Fill({color:"#333"}),stroke:new j.Stroke({color:"#fff",width:3}),placement:"line",overflow:!0}):void 0})),a.set(B,E),E}})];if(e.noteFeatures.length&&(o||l)){const A=new globalThis.Map;p.push(new ot({className:`${r}-notes`,zIndex:(t.zIndex??10)+2,visible:t.visible??!0,source:new yt({features:h(e.noteFeatures)}),style:w=>{const v=String(w.get("text")??""),B=`${v}_${o}_${l}`;let N=A.get(B);return N||(N=new j.Style({image:l?new j.Circle({radius:4,fill:new j.Fill({color:"#ffffffcc"}),stroke:new j.Stroke({color:"#ff4d4f",width:1.5})}):void 0,text:o?new j.Text({text:v,font:"bold 14px sans-serif",fill:new j.Fill({color:"#ff4d4f"}),stroke:new j.Stroke({color:"#fff",width:2}),offsetY:-12}):void 0}),A.set(B,N)),N}}))}if(e.symbolFeatures.length&&l){const A=new globalThis.Map;p.push(new ot({className:`${r}-filtered`,zIndex:(t.zIndex??10)+3,visible:t.visible??!0,source:new yt({features:h(e.symbolFeatures)}),style:w=>{const v=ut(w.get("symbolId"));let B=A.get(v);if(!B){const N=v==="23"?"#5f4bb6":v==="24"?"#2f7ea1":"#2d9f3b";B=new j.Style({image:new j.Circle({radius:5,fill:new j.Fill({color:N}),stroke:new j.Stroke({color:"#fff",width:1.5})})}),A.set(v,B)}return B}}))}return p}async function dn(n,e){if(!e.className||!e.filePath)return;const t=ln(n,e.className),r=await ko(e);if(wt(e.signal),!Or(n,e.className,t))return;const i=n.getLayers().getArray().find(u=>u.getClassName()===e.className),o=Wo(n,r,{...e,zIndex:i?.getZIndex()??e.zIndex,visible:i?.getVisible()??e.visible});if(Or(n,e.className,t))return fn(n,e.className),o.forEach(u=>n.addLayer(u)),o[0]}function gn(n,e){ln(n,e),fn(n,e)}class mn{map;options;ready;sourceRequestVersion=0;abortController=new AbortController;constructor(e,t){this.map=e,this.options=t,this.ready=this.add()}beginSourceRequest(){return this.abortController.abort(),this.abortController=new AbortController,++this.sourceRequestVersion}getMicContourOptions(e){const t=this.options.config??{};return{className:this.options.id,filePath:e,authorization:this.options.authorization,legend:t.legend??[],legendScope:t.legendScope??[],zIndex:Number.isFinite(Number(t.zIndex))?Number(t.zIndex):10,opacity:Number.isFinite(Number(t.opacity))?Number(t.opacity):.8,showText:this.options.showText??t.showText??!1,showFillcolor:this.options.showFillcolor??t.showFillcolor??!0,showIsoline:this.options.showIsoline??t.showIsoline??!0,showPointMarkers:this.options.showPointMarkers??t.showPointMarkers??!1}}async add(){const e=this.beginSourceRequest(),t=this.abortController,r=this.options.url;if(r)try{if(await dn(this.map,{...this.getMicContourOptions(r),signal:t.signal}),e!==this.sourceRequestVersion||t.signal.aborted)return}catch(i){if(t.signal.aborted)return;throw i}}delete(){this.abortController.abort(),this.sourceRequestVersion++,gn(this.map,this.options.id)}toggleVisible(e){we(this.map,this.options.id,e),we(this.map,`${this.options.id}-notes`,e),we(this.map,`${this.options.id}-filtered`,e),we(this.map,`${this.options.id}-other`,e)}async updateParams(e){this.options={...this.options,...e,config:{...this.options.config,...e?.config??{}}},this.ready=this.add(),await this.ready}}const Uo=8,Yo=8,Jo=3,ar="rgba(0,0,0,0.8)",He=new globalThis.Map,Mt=new globalThis.Map,Ie=new globalThis.Map,Ot=new globalThis.Map,cr=new WeakMap;function vr(n,e){return n.getLayers().getArray().find(t=>t.getClassName()===e)}function An(n,e){for(const t of[...n.getLayers().getArray()])t.getClassName()===e&&n.removeLayer(t)}function pn(n){const{url:e,time:t="",authorization:r="",config:i}=n,{legend:o=[]}=i;return JSON.stringify({url:e,time:t,authorization:r,extent:i.extent??[],scope:i.scope??[],thresholds:o.map(u=>u.scope??[]),isolineSmooth:i.isolineSmooth!==!1,isolineSmoothness:vn(i)})}function Zo(n){const{url:e,time:t="",authorization:r="",config:i}=n;return JSON.stringify({url:e,time:t,authorization:r,extent:i.extent??[],scope:i.scope??[]})}function vn(n){return n.isolineSmooth===!1?0:Ye(n.isolineSmoothness)}function Ko(n,e){for(He.delete(n),He.set(n,e);He.size>Uo;){const t=He.keys().next().value;if(t===void 0)break;He.delete(t)}}function _o(n,e){for(Ie.delete(n),Ie.set(n,e);Ie.size>Yo;){const t=Ie.keys().next().value;if(t===void 0)break;Ie.delete(t)}}async function $o(n){const e=Zo(n),t=Ie.get(e);if(t)return Ie.delete(e),Ie.set(e,t),t;const r=Ot.get(e);if(r)return r;const i=(async()=>{const o=await Bt(n);if(!o)return;const u={rawArr2D:o.rawArr2D,extent:o.extent,width:o.width,height:o.height};return _o(e,u),u})();Ot.set(e,i);try{return await i}finally{Ot.get(e)===i&&Ot.delete(e)}}function Dn(n,e){let t=cr.get(n);t||(t=new globalThis.Map,cr.set(n,t));const r=(t.get(e)??0)+1;return t.set(e,r),r}function ei(n,e,t){return cr.get(n)?.get(e)===t}function ti(n){return typeof n.isolineBorderColor=="string"?n.isolineBorderColor:typeof n.isolineColor=="string"?n.isolineColor:n.isolineColor===!0?be(n.legend??[],n.legendScope).colorMap:ar}function ri(n){return be(n.legend??[],n.legendScope).colorMap}function Xr(n){if(typeof n=="string")return()=>n;const e=Object.keys(n).map(Number).filter(Number.isFinite).sort((t,r)=>t-r);return t=>{const r=n[t];if(r)return r;let i=0,o=e.length-1,u=-1;for(;i<=o;){const s=i+o>>1;e[s]<=t?(u=s,i=s+1):o=s-1}return u<0?ar:n[e[u]]||ar}}function ni(n,e,t){const r=n(e),[i,o,u,s]=bt(r);return[i,o,u,s/255*Math.max(0,Math.min(1,t))]}function Hr(n,e,t,r){const i=new globalThis.Map,o=[],[u,s,l,d]=r,h=(l-u)/e,a=(d-s)/t,D=A=>{if(!Array.isArray(A)||A.length<2)return null;const w=[];for(const v of A)!Array.isArray(v)||v.length<2||!Number.isFinite(v[0])||!Number.isFinite(v[1])||w.push([u+v[0]*h,d-v[1]*a]);return w.length>=2?w:null},p=(A,w)=>{const v=i.get(A)??[];v.push(w),i.set(A,v)};for(const A of n){const w=Number(A.value);if(!(!Number.isFinite(w)||!Array.isArray(A.coordinates))){if(A.type==="Polygon"){const v=A.coordinates.map(D).filter(B=>!!B);v.length&&(o.push({type:"Polygon",coordinates:v,value:w}),v.forEach(B=>p(w,B)))}else if(A.type==="MultiPolygon"){const v=[];for(const B of A.coordinates){const N=B.map(D).filter(E=>!!E);N.length&&(v.push(N),N.forEach(E=>p(w,E)))}v.length&&o.push({type:"MultiPolygon",coordinates:v,value:w})}}}return{lines:[...i.entries()].map(([A,w])=>w.length===1?{type:"LineString",coordinates:w[0],value:A}:{type:"MultiLineString",coordinates:w,value:A}),polygons:o.sort((A,w)=>A.value-w.value)}}function oi(n){const e=r=>!r||!Array.isArray(r.coordinates)||r.type!=="Polygon"&&r.type!=="MultiPolygon"?null:{type:"Feature",properties:{},geometry:r.type==="Polygon"?{type:"Polygon",coordinates:r.coordinates}:{type:"MultiPolygon",coordinates:r.coordinates}},t=[];for(let r=0;r<n.length;r++){const i=n[r],o=Number(i?.value),u=e(i);if(!u||!Number.isFinite(o))continue;const s=e(n[r+1]),l=s?tr.difference(tr.featureCollection([u,s])):u;l&&t.push({type:l.geometry.type,coordinates:l.geometry.coordinates,value:o})}return t}async function ii(n){const e=await $o(n);if(!e)return{lines:[],polygons:[]};const{rawArr2D:t,extent:r,width:i,height:o}=e,{uniqueThresholds:u}=be(n.config.legend??[]);if(i<2||o<2||u.length===0)return{lines:[],polygons:[]};const s=vn(n.config),l=dr(t,i,o,s),d=new Float64Array(i*o);for(let p=0;p<o;p++){const A=l[p];for(let w=0;w<i;w++){const v=A?.[w];d[p*i+w]=v===void 0||!Number.isFinite(v)?NaN:v}}const h=It.contours().size([i,o]).thresholds(u).smooth(s>0)(d),a=Hr(h,i,o,r),D=Hr(oi(h),i,o,r);return{lines:a.lines,polygons:D.polygons}}async function yn(n,e){const t=He.get(n);if(t)return He.delete(n),He.set(n,t),t;const r=Mt.get(n);if(r)return r;const i=ii(e);Mt.set(n,i);try{const o=await i;return Ko(n,o),o}finally{Mt.get(n)===i&&Mt.delete(n)}}function bn(n){const{map:e,id:t,isolineGeoJSON:r,contourGeoJSON:i=[],colorMap:o,fillColorMap:u={},fillContours:s=!1,fillOpacity:l=.7,lineWidth:d=1.2,showLabel:h=!0,zIndex:a=9999,visible:D=!0,geometryCacheKey:p,visibleThresholds:A}=n,w=Xr(o),v=Xr(u),B=A?new Set(A):void 0,N=new globalThis.Map,E=S=>{const z=Number(S.get("value"));if(B&&!B.has(z))return;const C=S.get("geometryKind")==="fill"?"fill":"line";if(C==="fill"&&!s)return;const P=`${C}:${z}`;let F=N.get(P);return F||(C==="fill"?(F=new j.Style({fill:new j.Fill({color:ni(v,z,l)}),zIndex:0}),N.set(P,F),F):(F=new j.Style({stroke:new j.Stroke({color:w(z),width:d}),text:h?new j.Text({text:Number.isInteger(z)?String(z):String(Number(z.toFixed(1))),fill:new j.Fill({color:"#fff"}),stroke:new j.Stroke({color:"#000",width:3}),placement:"line",overflow:!1}):void 0,zIndex:1}),N.set(P,F),F))},L=vr(e,t);if(p&&L instanceof ot&&L.get("isolineGeometryCacheKey")===p)return L.setStyle(E),L.setZIndex(a),L.setVisible(D),L.setDeclutter(h),L.changed(),L;const X=new Gr().readFeatures({type:"FeatureCollection",features:[...s||p?i.map(({value:S,...z})=>({type:"Feature",geometry:z,properties:{value:S,geometryKind:"fill"}})):[],...r.map(({value:S,...z})=>({type:"Feature",geometry:z,properties:{value:S,geometryKind:"line"}}))]},{dataProjection:"EPSG:3857",featureProjection:e.getView().getProjection()}),R=new ot({className:t,source:new yt({features:X}),zIndex:a,visible:D,declutter:h,style:E});return p&&R.set("isolineGeometryCacheKey",p),An(e,t),e.addLayer(R),R}async function wn(n,e){const{id:t,config:r}=e,i=Dn(n,t);if(!e.url||e.signal?.aborted)return;const o=pn(e),u=await yn(o,e);if(e.signal?.aborted||!ei(n,t,i))return;const s=vr(n,t),{uniqueThresholds:l}=be(r.legend??[],r.legendScope);return bn({map:n,id:t,isolineGeoJSON:u.lines,contourGeoJSON:u.polygons,colorMap:ti(r),fillColorMap:ri(r),fillContours:r.isolineFill===!0,fillOpacity:r.opacity,lineWidth:r.isolineLineWidth??r.lineWidth,showLabel:r.showIsolineValue??r.showIsolineLabel??!0,zIndex:r.zIndex??s?.getZIndex(),visible:s?.getVisible()??!0,geometryCacheKey:o,visibleThresholds:l})}async function ui(n,e){const t=[...e],r=async()=>{for(;t.length;){if(n.signal?.aborted)return;const i=t.shift(),o=i,u=typeof o?.format=="function"?o.format("YYYY-MM-DDTHH:mm:ss.SSS[Z]"):String(i),s={...n,time:u};await yn(pn(s),s)}};await Promise.all(Array.from({length:Math.min(Jo,t.length)},()=>r()))}function Cn(n,e){Dn(n,e),An(n,e)}function Bn(n,e,t){const r=vr(n,e);r&&r.setVisible(t)}class En{map;options;ready;abortController=new AbortController;constructor(e,t){this.map=e,this.options=t,this.ready=this.render()}async render(){this.abortController.abort();const e=new AbortController;this.abortController=e;const t=this.options.url;if(t)try{await wn(this.map,{...this.options,url:t,signal:e.signal})}catch(r){if(e.signal.aborted)return;throw r}}delete(){this.abortController.abort(),Cn(this.map,this.options.id)}toggleVisible(e){Bn(this.map,this.options.id,e)}async updateParams(e){this.options={...this.options,...e,config:{...this.options.config,...e.config??{}}},this.ready=this.render(),await this.ready}}const Ir=2;class xn extends mr{windVectorCache=new Map;windVectorLoadingTasks=new globalThis.Map;normalizeUrls(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"&&!!t):typeof e=="string"&&e?[e]:[]}parseScopeValue(e){if(Array.isArray(e)&&e.length>=2){const t=Number(e[0]),r=Number(e[1]);if(Number.isFinite(t)&&Number.isFinite(r))return[t,r]}if(typeof e=="string"){const t=e.split(",").map(r=>Number(r.trim())).filter(r=>Number.isFinite(r));if(t.length>=2)return[t[0],t[1]]}}getComponentScope(e=this.options){const t=e?.config??{},r=t.layerConfig??{},i=this.parseScopeValue(t.componentScope)??this.parseScopeValue(t.uvScope)??this.parseScopeValue(r.COMPONENT_SCALE_RANGE)??this.parseScopeValue(r.COMPONENT_SCOPE)??this.parseScopeValue(r.UV_SCOPE);if(i){const s=Math.max(Math.abs(i[0]),Math.abs(i[1]));return[-s,s]}const o=[t?.scope?.[0],t?.scope?.[1]].map(s=>Math.abs(Number(s))).filter(s=>Number.isFinite(s)),u=o.length?Math.max(...o):60;return[-u,u]}buildWindSpeedGrid(e,t,r,i){const o=Array.from({length:i},()=>Array(r).fill(void 0));for(let u=0;u<i;u++)for(let s=0;s<r;s++){const l=u*r+s,d=e[l],h=t[l],a=typeof d<"u"&&Number.isFinite(Number(d)),D=typeof h<"u"&&Number.isFinite(Number(h));if(!a&&!D)continue;const p=a?Number(d):0,A=D?Number(h):0;o[u][s]=Math.sqrt(p*p+A*A)}return o}prepareGrid(e,t,r){const i=Array.from({length:r},()=>Array(t).fill(NaN));for(let o=0;o<r;o++)for(let u=0;u<t;u++){const s=e[o]?.[u];i[o][u]=s==null||isNaN(Number(s))?NaN:Number(s)}return i}getWindVectorCacheKey(e=this.options){const t=this.normalizeUrls(e?.url);return JSON.stringify({urls:t,authorization:e?.authorization??"",extent:e?.config?.extent,scope:this.getComponentScope(e)})}async getOrLoadWindVectorData(e=this.options){const{url:t,config:r,authorization:i}=e;if(!r?.extent||!Array.isArray(t))return null;const o=this.normalizeUrls(t);if(o.length<2)return null;const u=this.getWindVectorCacheKey(e),s=this.windVectorCache.get(u);if(s)return s;const l=this.windVectorLoadingTasks.get(u);if(l)return l;const d=(async()=>{const h=this.getComponentScope(e),[a,D]=await Promise.all([_e(o[0],h,void 0,i,{detectNoDataByBorderColor:!1}),_e(o[1],h,void 0,i,{detectNoDataByBorderColor:!1})]),p=Math.min(a?.width??0,D?.width??0),A=Math.min(a?.height??0,D?.height??0);if(!p||!A||!a?.grayArr||!D?.grayArr)return null;const w=new Float32Array(p*A),v=new Float32Array(p*A);for(let N=0;N<p*A;N++){const E=Number(a.grayArr[N]),L=Number(D.grayArr[N]);w[N]=Number.isFinite(E)?E:0,v[N]=Number.isFinite(L)?L:0}const B={width:p,height:A,u:w,v,extent:st(r.extent)};return this.windVectorCache.set(u,B),B})();this.windVectorLoadingTasks.set(u,d);try{return await d}finally{this.windVectorLoadingTasks.get(u)===d&&this.windVectorLoadingTasks.delete(u)}}async getOrLoadContourData(e=this.options){const{url:t,config:r}=e;if(!r?.extent)return null;if(!Array.isArray(t))return super.getOrLoadContourData(e);const i=this.normalizeUrls(t);if(i.length<2)return null;const o=JSON.stringify({urls:i,authorization:e?.authorization??"",extent:r.extent,scope:this.getComponentScope(e)}),u=this.contourCache.get(o);if(u&&u.schemaVersion===Ir)return u;const s=this.contourLoadingTasks.get(o);if(s)return s;const l=(async()=>{const d=await this.getOrLoadWindVectorData(e);if(!d)return null;const{u:h,v:a,width:D,height:p,extent:A}=d,w=this.buildWindSpeedGrid(h,a,D,p),v=Ut(w,D,p),B=this.prepareGrid(w,D,p),N=this.prepareGrid(v,D,p),E={schemaVersion:Ir,rawArr2D:B,smoothArr2D:N,extent:A,width:D,height:p};return this.contourCache.set(o,E),E})();this.contourLoadingTasks.set(o,l);try{return await l}finally{this.contourLoadingTasks.get(o)===l&&this.contourLoadingTasks.delete(o)}}async getSourceFromParams(e=this.options){const{config:t,url:r}=e;if(!t?.extent)return;if(!Array.isArray(r))return super.getSourceFromParams(e);const i=await this.getOrLoadContourData(e);if(!i)return;const{rawArr2D:o,smoothArr2D:u,extent:s,width:l,height:d}=i,h=this.getValueTransformFn(e),a=this.applyValueTransform2D(o,"raw",h),D=this.applyValueTransform2D(u,"smooth",h),{colorMap:p}=be(t.legend,t.legendScope),A=it(t.legend,t.legendScope)??t.scope;return this.getFcstRasterSource({rawArr2D:a,smoothArr2D:D,extent:s,width:l,height:d,colorMap:p,colorMode:t.mode,scope:A},e)}}const si="data:image/png;base64,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";class lr{map;options;contourCache;iconImagePromise;externalWindDataProvider;constructor(e,t,r){this.map=e,this.options=t,this.contourCache=new Map,this.iconImagePromise=null,this.externalWindDataProvider=r,this.add()}getClassName(){return this.options.id+"-windShaft"}normalizeUrls(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"&&!!t):typeof e=="string"&&e?[e]:[]}getComponentScope(){const e=this.options?.config??{},t=e.layerConfig??{},r=s=>{if(Array.isArray(s)&&s.length>=2){const l=Number(s[0]),d=Number(s[1]);if(Number.isFinite(l)&&Number.isFinite(d))return[l,d]}if(typeof s=="string"){const l=s.split(",").map(d=>Number(d.trim())).filter(d=>Number.isFinite(d));if(l.length>=2)return[l[0],l[1]]}},i=r(e.componentScope)??r(e.uvScope)??r(t.COMPONENT_SCALE_RANGE)??r(t.COMPONENT_SCOPE)??r(t.UV_SCOPE);if(i){const s=Number(i[0]),l=Number(i[1]);if(Number.isFinite(s)&&Number.isFinite(l)){const d=Math.max(Math.abs(s),Math.abs(l));return[-d,d]}}const o=[e?.scope?.[0],e?.scope?.[1]].map(s=>Math.abs(Number(s))).filter(s=>Number.isFinite(s)),u=o.length?Math.max(...o):60;return[-u,u]}getCacheKey(){const e=this.normalizeUrls(this.options?.url);return JSON.stringify({id:this.options?.id,urls:e,extent:this.options?.config?.extent,scope:this.getComponentScope()})}getRuntimeConfig(){return this.options.config}getVisibleWindSpeedScope(){const e=this.getRuntimeConfig();return it(e.legend,e.legendScope)??e.scope}getWindShaftConfig(){const e=this.getRuntimeConfig(),t=e.windShaftConfig??{},r=e.gridConfig??{},i=(o,u)=>{const s=Number(o);return Number.isFinite(s)?s:u};return{pixelStep:Math.max(8,i(t.pixelStep??r.pixelStep??e.pixelStep,40)),fontSize:Math.max(10,i(t.fontSize??r.fontSize??e.fontSize,26)),color:String(t.color??e.color??"rgb(255,255,255)"),minWindSpeed:Math.max(0,i(t.minWindSpeed,.01)),speedLevelStep:Math.max(.1,i(t.speedLevelStep,2)),maxLevel:Math.max(1,Math.floor(i(t.maxLevel,30))),spriteCellSize:Math.max(1,Math.floor(i(t.spriteCellSize,32))),baseFontSize:Math.max(1,i(t.baseFontSize,32)),iconYOffsetRatio:Math.max(0,i(t.iconYOffsetRatio,.7)),firstRowMaxLevel:Math.max(0,Math.floor(i(t.firstRowMaxLevel,3))),firstRowStartX:Math.floor(i(t.firstRowStartX,28)),firstRowY:Math.floor(i(t.firstRowY,4)),secondRowOffsetX:Math.floor(i(t.secondRowOffsetX,4)),secondRowY:Math.floor(i(t.secondRowY,5))}}async getIconImage(){return this.iconImagePromise?this.iconImagePromise:(this.iconImagePromise=new Promise((e,t)=>{const r=new Image;r.crossOrigin="anonymous",r.onload=()=>e(r),r.onerror=()=>t(new Error("Failed to load wind shaft sprite image")),r.src=si}),this.iconImagePromise)}async getOrLoadWindData(){const e=this.getRuntimeConfig();if(!e?.extent)return null;const t=this.getCacheKey(),r=this.contourCache.get(t);if(r)return r;if(this.externalWindDataProvider){const p=await this.externalWindDataProvider();if(p)return this.contourCache.set(t,p),p}const i=this.normalizeUrls(this.options?.url);if(i.length<2)return null;const o=this.getComponentScope(),[u,s]=await Promise.all([_e(i[0],o,void 0,this.options?.authorization,{detectNoDataByBorderColor:!1}),_e(i[1],o,void 0,this.options?.authorization,{detectNoDataByBorderColor:!1})]),l=Math.min(u?.width??0,s?.width??0),d=Math.min(u?.height??0,s?.height??0);if(!l||!d)return null;const h=new Float32Array(l*d),a=new Float32Array(l*d);for(let p=0;p<l*d;p++){const A=Number(u.grayArr[p]),w=Number(s.grayArr[p]);h[p]=Number.isFinite(A)?A:0,a[p]=Number.isFinite(w)?w:0}const D={width:l,height:d,u:h,v:a,extent:st(e.extent)};return this.contourCache.set(t,D),D}createWindShaftSource(e,t){const r=this.getWindShaftConfig(),{pixelStep:i,fontSize:o,color:u,minWindSpeed:s,speedLevelStep:l,maxLevel:d,spriteCellSize:h,baseFontSize:a,iconYOffsetRatio:D,firstRowMaxLevel:p,firstRowStartX:A,firstRowY:w,secondRowOffsetX:v,secondRowY:B}=r,N=this.getVisibleWindSpeedScope(),E=document.createElement("canvas"),[L,X,R,S]=e.extent,z=R-L,C=S-X;return new kt({projection:"EPSG:3857",ratio:1,interpolate:!1,canvasFunction:(P,F,M,I)=>{const g=I??[1,1],y=Math.max(1,Math.floor(g[0]??1)),b=Math.max(1,Math.floor(g[1]??1));E.width!==y&&(E.width=y),E.height!==b&&(E.height=b);const T=this.map.getSize(),O=Math.max(1,Math.floor(T?.[0]??y)),H=Math.max(1,Math.floor(T?.[1]??b)),G=y/O,V=b/H,Z=(G+V)*.5,J=E.getContext("2d",{alpha:!0});if(!J)return E;J.clearRect(0,0,y,b);const W=o/a*Z,U=h*W,_=h*W,[K,Y,re,ae]=P,$=re-K,ee=ae-Y;if($<=0||ee<=0||z<=0||C<=0)return E;const ce=Math.max(K,L),oe=Math.max(Y,X),ge=Math.min(re,R),se=Math.min(ae,S);if(ce>=ge||oe>=se)return E;const pe=Math.max(1,O-1),ve=Math.max(1,H-1),fe=Math.max(8,Math.round(i)),De=Math.max(0,Math.floor((ce-K)/$*pe)),te=Math.min(O-1,Math.ceil((ge-K)/$*pe)),ie=Math.max(0,Math.floor((ae-se)/ee*ve)),xe=Math.min(H-1,Math.ceil((ae-oe)/ee*ve));if(De>te||ie>xe)return E;for(let Ce=ie;Ce<=xe;Ce+=fe)for(let Le=De;Le<=te;Le+=fe){const at=K+$*Le/pe,ct=ae-ee*Ce/ve,Re=(at-L)/z*(e.width-1),lt=(S-ct)/C*(e.height-1),ze=Vt(e.u,Re,lt,e.width,e.height),Fe=Vt(e.v,Re,lt,e.width,e.height);if(!Number.isFinite(ze)||!Number.isFinite(Fe))continue;const $e=Math.atan2(ze,Fe)*(180/Math.PI),Se=Math.sqrt(ze*ze+Fe*Fe);if(Se<=s)continue;if(Array.isArray(N)&&N.length===2){const gt=Math.min(Number(N[0]),Number(N[1])),tt=Math.max(Number(N[0]),Number(N[1]));if(Number.isFinite(gt)&&Number.isFinite(tt)&&(Se<gt||Se>tt))continue}const et=Math.min(Math.ceil(Se/l),d-1);let ft=A+et,ht=w;et>p&&(ft=et-v,ht=B),J.save();const dt=Le*G,Me=Ce*V;J.translate(dt,Me),J.rotate($e*Math.PI/180),J.drawImage(t,ft*h,ht*h,h,h,-U/2,-_*D,U,_),J.globalCompositeOperation="source-atop",J.fillStyle=u,J.fillRect(-U/2,-_*D,U,_),J.globalCompositeOperation="source-over",J.restore()}return E}})}async getSourceFromCache(){const e=this.getCacheKey(),t=this.contourCache.get(e);if(!t)return null;const r=await this.getIconImage();return this.createWindShaftSource(t,r)}async getSourceFromParams(){const e=await this.getOrLoadWindData();if(!e)return null;const t=await this.getIconImage();return this.createWindShaftSource(e,t)}async add(){const e=this.getRuntimeConfig(),t=Number.isFinite(Number(e.zIndex))?Number(e.zIndex):1200,r=Number.isFinite(Number(e.opacity))?Number(e.opacity):1,i=this.getClassName(),o=de(this.map,i);o&&this.delete();const u=o?o.getZIndex():t+1,s=await this.getSourceFromCache()??await this.getSourceFromParams();if(!s)return;const l=new Ct({source:s,className:i,zIndex:u,opacity:r});this.map.addLayer(l)}delete(){Te(this.map,this.getClassName()),this.contourCache.clear(),this.iconImagePromise=null}toggleVisible(e){we(this.map,this.getClassName(),e)}async updateParams(e){this.options={...this.options,...e,config:{...this.options.config,...e?.config??{}}};const t=de(this.map,this.getClassName());if(!t){await this.add();return}const r=await this.getSourceFromCache()??await this.getSourceFromParams();r&&t.setSource(r)}}class Nn{map;options;constructor(e,t){this.map=e,this.options=t,this.add()}getClassName(){return this.options.id}getConfig(){return this.options?.config??{}}normalizeParamValue(e){if(e!=null)return Array.isArray(e)?e.join(","):typeof e=="boolean"?e?"true":"false":String(e)}buildWmsParams(){const t=this.getConfig().layerConfig??{},r={};return Object.keys(t).forEach(i=>{const o=this.normalizeParamValue(t[i]);typeof o<"u"&&(r[i]=o)}),r}splitUrlAndParams(e){const[t,r=""]=e.split("?"),i={};return r?(new URLSearchParams(r).forEach((u,s)=>{i[s]=u}),{baseUrl:t,urlParams:i}):{baseUrl:t,urlParams:i}}getTintColorRGB(){const t=(this.options?.config?.layerConfig??{}).TINTCOLOR;if(typeof t>"u"||t===null)return null;const r=String(t).trim();if(!r)return null;const i=r.replace(/^0x/i,"#"),o=i.startsWith("#")?i.slice(1):i;if(/^[0-9a-fA-F]{3}$/.test(o)){const s=parseInt(o[0]+o[0],16),l=parseInt(o[1]+o[1],16),d=parseInt(o[2]+o[2],16);return[s,l,d]}if(/^[0-9a-fA-F]{6}$/.test(o)){const s=parseInt(o.slice(0,2),16),l=parseInt(o.slice(2,4),16),d=parseInt(o.slice(4,6),16);return[s,l,d]}const u=r.split(",").map(s=>Number(s.trim()));return u.length===3&&u.every(s=>Number.isFinite(s)&&s>=0&&s<=255)?[Math.round(u[0]),Math.round(u[1]),Math.round(u[2])]:null}tintBlobToDataUrl(e,t){return new Promise((r,i)=>{const o=new Image,u=URL.createObjectURL(e);o.onload=()=>{const s=document.createElement("canvas");s.width=o.width,s.height=o.height;const l=s.getContext("2d",{willReadFrequently:!0});if(!l){URL.revokeObjectURL(u),i(new Error("Failed to create 2d context for tint"));return}l.clearRect(0,0,s.width,s.height),l.drawImage(o,0,0);const d=l.getImageData(0,0,s.width,s.height),h=d.data;for(let a=0;a<h.length;a+=4)(h[a+3]??0)!==0&&(h[a]=t[0],h[a+1]=t[1],h[a+2]=t[2]);l.putImageData(d,0,0),URL.revokeObjectURL(u),r(s.toDataURL("image/png"))},o.onerror=()=>{URL.revokeObjectURL(u),i(new Error("Failed to decode image for tint"))},o.src=u})}createSource(){const e=this.options?.url;if(!e)return null;const t=this.options?.authorization,r=this.getTintColorRGB(),{baseUrl:i,urlParams:o}=this.splitUrlAndParams(e),u={...o,...this.buildWmsParams()};return new Vr.TileWMS({interpolate:!0,url:i,params:u,tileLoadFunction:(s,l)=>{const d=s.getImage();if(!t&&!r){d.src=l;return}fetch(l,{credentials:"include",headers:t?{Authorization:t}:void 0}).then(async h=>{const a=(h.headers.get("content-type")||"").toLowerCase();if(!h.ok){const D=await h.text();throw new Error(`WMS tile request failed: ${h.status} ${h.statusText}; ${D.slice(0,240)}`)}if(!a.includes("image/")){const D=await h.text();throw new Error(`WMS tile response is not image: ${a}; ${D.slice(0,240)}`)}return h.blob()}).then(async h=>{if(r){d.src=await this.tintBlobToDataUrl(h,r);return}const a=URL.createObjectURL(h);d.onload=()=>{URL.revokeObjectURL(a),d.onload=null,d.onerror=null},d.onerror=()=>{URL.revokeObjectURL(a),d.onload=null,d.onerror=null},d.src=a}).catch(h=>{console.error("[WmsLayer] tile load failed",{src:l,hasAuthorization:!!t,error:h}),d.src="data:image/gif;base64,R0lGODlhAQABAAAAACw="})}})}add(){const e=this.getConfig(),t=Number.isFinite(Number(e.zIndex))?Number(e.zIndex):10,r=Number.isFinite(Number(e.opacity))?Number(e.opacity):1,i=this.getClassName(),o=de(this.map,i);o&&this.delete();const u=o?o.getZIndex():t,s=this.createSource();if(!s)return;const l=new qr({className:i,source:s,zIndex:u,opacity:r});this.map.addLayer(l)}delete(){Te(this.map,this.getClassName())}toggleVisible(e){we(this.map,this.getClassName(),e)}updateParams(e){this.options={...this.options,...e,config:{...this.options.config,...e?.config??{}}};const t=de(this.map,this.getClassName());if(!t){this.add();return}const r=this.createSource();r&&t.setSource(r);const i=this.getConfig(),o=Number(i.zIndex),u=Number(i.opacity);Number.isFinite(o)&&t.setZIndex(o),Number.isFinite(u)&&t.setOpacity(u)}updateColor(e){const r={...this.options?.config?.layerConfig??{}};typeof e.styles<"u"&&(r.STYLES=e.styles),typeof e.colorScaleRange<"u"&&(r.COLORSCALERANGE=Array.isArray(e.colorScaleRange)?e.colorScaleRange.join(","):String(e.colorScaleRange)),typeof e.numColorBands<"u"&&(r.NUMCOLORBANDS=String(e.numColorBands)),typeof e.aboveMaxColor<"u"&&(r.ABOVEMAXCOLOR=e.aboveMaxColor),typeof e.belowMinColor<"u"&&(r.BELOWMINCOLOR=e.belowMinColor),typeof e.bgColor<"u"&&(r.BGCOLOR=e.bgColor),typeof e.logScale<"u"&&(r.LOGSCALE=typeof e.logScale=="boolean"?e.logScale?"true":"false":e.logScale),this.updateParams({...this.options,config:{...this.options.config,layerConfig:r}})}}function ai(n){return String(n??"").trim().replace(/\/+$/,"")}function ci(n,e){const t=Ae();return`${ai(e||t.typhoonServiceBaseUrl||t.serviceBaseUrl)}/${n.replace(/^\/+/,"")}`}async function Pn(n,e){const t=Ae(),r=e?.authorization??t.typhoonAuthorization,i=await fetch(ci(n,e?.serviceBaseUrl),{credentials:"include",signal:e?.signal,headers:r?{Authorization:r}:void 0}),o=(i.headers.get("content-type")||"").toLowerCase();if(!i.ok){const u=await i.text();throw new Error(`Typhoon request failed: ${i.status} ${i.statusText}; ${u.slice(0,240)}`)}if(!o.includes("application/json")&&!o.includes("+json")){const u=await i.text();throw new Error(`Typhoon response has invalid content type: ${o||"unknown"}; ${u.slice(0,240)}`)}return await i.json()}function Tn(n){const e=n?.dataPath||Ae().typhoonDataPath;return Pn(`fileServer/${e}/typhoon_list.json`,n)}function Ln(n,e){const t=e?.dataPath||Ae().typhoonDataPath;return Pn(`fileServer/${t}/${n}.json`,e)}const li=["BABJ|WTPQ20","RJTD|WTPQ51","RJTD|WTPQ50"],Rr=["#d9480f","#1971c2","#2b8a3e","#862e9c","#0b7285","#c92a2a"],fi={TD:"热带低压",TS:"热带风暴","TROPICAL STORM":"热带风暴",STS:"强热带风暴",TY:"台风",STY:"强台风",SuperTY:"超强台风"};function Xt(n){return Array.isArray(n)?n:Array.isArray(n?.points)?n.points:[]}function hi(n){return Number.isFinite(n?.lon)&&Number.isFinite(n?.lat)}function Ht(n){return n.filter(hi).slice().sort((e,t)=>{const r=Date.parse(e.datetime||""),i=Date.parse(t.datetime||"");return Number.isFinite(r)&&Number.isFinite(i)&&r!==i?r-i:Number(e.validtime||0)-Number(t.validtime||0)})}class Fn{map;options;abortController;styleCache;constructor(e,t){this.map=e,this.options=t,this.abortController=null,this.styleCache=new globalThis.Map,this.add()}getClassName(){return this.options.id}getConfig(){return this.options.config?.typhoonConfig??{}}async add(){de(this.map,this.getClassName())&&this.delete(),this.abortController?.abort(),this.abortController=new AbortController;try{const t=await Tn({serviceBaseUrl:this.getConfig().serviceBaseUrl,dataPath:this.getConfig().dataPath,authorization:this.options.authorization,signal:this.abortController.signal});if(this.abortController.signal.aborted)return;const r=this.getSelectedTyphoonNums(t),i=await Promise.all(r.map(o=>Ln(o,{serviceBaseUrl:this.getConfig().serviceBaseUrl,dataPath:this.getConfig().dataPath,authorization:this.options.authorization,signal:this.abortController?.signal})));if(this.abortController.signal.aborted)return;this.render(t,i)}catch(t){console.error("[TyphoonLayer] load failed",t)}}getSelectedTyphoonNums(e){const t=this.getConfig().typhoonNums?.filter(Boolean);if(t?.length)return t;const r=e[0],i=r?r.num_inati||r.num_nati:"";return i?[i]:[]}getPrimarySource(e,t){const r=t==="obs"?e.obs:e.fcst,i=Object.keys(r??{});return(this.getConfig().sourcePriority??li).find(u=>i.includes(u))??i[0]}getLastPoint(e){return e.length?e[e.length-1]:void 0}findForecastBasePoint(e,t){if(t)for(let r=e.length-1;r>=0;r--){const i=e[r];if(i.file_ts===t.file_ts||i.datetime===t.datetime)return i}}getForecastAnchorPoint(e,t,r,i){const o=r[0];if(!o)return;const u=Ht(Xt(e.obs?.[t])),s=this.findForecastBasePoint(u,o);if(s)return s;const l=this.getLastPoint(u);if(l)return l;const d=i?Ht(Xt(e.obs?.[i])):[];return this.findForecastBasePoint(d,o)??this.getLastPoint(d)}render(e,t){const r=Number.isFinite(Number(this.options.config?.zIndex))?Number(this.options.config.zIndex):30,i=de(this.map,this.getClassName());i&&this.delete();const o=i?i.getZIndex():r,u=new yt;t.forEach((l,d)=>{const h=e.find(a=>a.num_inati===l.typhoon_num);this.appendTyphoonFeatures(u,l,h,Rr[d%Rr.length])});const s=new ot({className:this.getClassName(),source:u,zIndex:o,style:l=>this.createStyle(l)});this.map.addLayer(s),this.getConfig().fitToExtent!==!1&&!u.isEmpty()&&this.map.getView().fit(u.getExtent(),{padding:[80,80,80,80],duration:350,maxZoom:7})}appendTyphoonFeatures(e,t,r,i){const o=r?.name_cn||t.name_cn||t.name_en||t.typhoon_num,u=this.getPrimarySource(t,"obs");if(Object.entries(t.obs??{}).forEach(([d,h])=>{const a=Ht(Xt(h));if(!a.length)return;const D=d===u;this.addLineFeature(e,a,{kind:"obs",sourceName:d,color:i,isPrimary:D,typhoonName:o,typhoonNum:t.typhoon_num}),D&&this.addPointFeatures(e,a,{kind:"obs",sourceName:d,color:i,typhoonName:o,typhoonNum:t.typhoon_num})}),this.getConfig().showForecast===!1)return;const l=this.getPrimarySource(t,"fcst");Object.entries(t.fcst??{}).forEach(([d,h])=>{const a=Ht(Xt(h));if(!a.length)return;const D=d===l,p=this.getForecastAnchorPoint(t,d,a,u),A=p?[p,...a]:a;this.addLineFeature(e,A,{kind:"fcst",sourceName:d,color:i,isPrimary:D,typhoonName:o,typhoonNum:t.typhoon_num}),this.addForecastLabelFeature(e,a[a.length-1],{sourceName:d,color:i,isPrimary:D,typhoonName:o,typhoonNum:t.typhoon_num})})}addLineFeature(e,t,r){if(!(t.length<2))for(let i=1;i<t.length;i++){const o=t[i-1],u=t[i],s=new Zt.LineString([nt.fromLonLat([o.lon,o.lat]),nt.fromLonLat([u.lon,u.lat])]);e.addFeature(new Jt({geometry:s,featureType:`${r.kind}-line`,grade:u.grade,...r}))}}addPointFeatures(e,t,r){t.forEach((i,o)=>{const u=o===t.length-1,s=new Jt({geometry:new Zt.Point(nt.fromLonLat([i.lon,i.lat])),featureType:u?"latest-point":"obs-point",datetime:i.datetime,grade:i.grade,windMax:i.wind_max_ms,pressure:i.prs_hpa,...r});e.addFeature(s)})}addForecastLabelFeature(e,t,r){const i=new Jt({geometry:new Zt.Point(nt.fromLonLat([t.lon,t.lat])),featureType:"fcst-label",datetime:t.datetime,grade:t.grade,windMax:t.wind_max_ms,pressure:t.prs_hpa,...r});e.addFeature(i)}createStyle(e){const t=String(e.get("featureType")||""),r=String(e.get("color")||"#d9480f"),i=String(e.get("sourceName")||""),o=String(e.get("grade")||""),u=String(e.get("typhoonName")||""),s=!!e.get("isPrimary"),l=[t,r,i,o,u,s].join("|"),d=this.styleCache.get(l);if(d)return d;const h=this.getGradeColor(o,r);let a;if(t==="obs-line")a=new j.Style({stroke:new j.Stroke({color:s?h:`${h}80`,width:s?3:1.5})});else if(t==="fcst-line")a=new j.Style({stroke:new j.Stroke({color:s?h:`${h}80`,width:s?2:1.25,lineDash:[8,8]})});else if(t==="fcst-label")a=new j.Style({image:new j.Circle({radius:s?4.5:3.5,fill:new j.Fill({color:h}),stroke:new j.Stroke({color:"#fff",width:1.5})}),text:new j.Text({text:i,font:s?"bold 12px sans-serif":"12px sans-serif",fill:new j.Fill({color:"#1f2937"}),stroke:new j.Stroke({color:"#fff",width:4}),offsetX:8,offsetY:-8,textAlign:"left"})});else{const D=t==="latest-point";a=new j.Style({image:new j.Circle({radius:D?6:4,fill:new j.Fill({color:h}),stroke:new j.Stroke({color:"#fff",width:D?2:1.5})}),text:D?new j.Text({text:u,font:"bold 13px sans-serif",fill:new j.Fill({color:"#1f2937"}),stroke:new j.Stroke({color:"#fff",width:4}),offsetY:-16}):void 0})}return this.styleCache.set(l,a),a}getGradeColor(e,t){const r=String(e||"").trim();if(!r)return t;const i=fi[r]||r,o=this.options.config.legend.find(s=>s.name===i),u=this.options.config.legend.find(s=>s.name==="其他");return o?.color||u?.color||t}delete(){this.abortController?.abort(),Te(this.map,this.getClassName())}toggleVisible(e){we(this.map,this.getClassName(),e)}updateParams(e){this.options={...this.options,...e,config:{...this.options.config,...e?.config??{}}},this.add()}}const di={center:[118.7969,32.0603],zoom:5,layers:[]};function gi(n,e){e?.mapMethodsConfig&&Qr(e.mapMethodsConfig);const t={...di,...e??{}};return new Promise(r=>{const i=new Mn.Map({target:n,layers:[],view:new On({center:nt.fromLonLat(t.center),zoom:t.zoom}),controls:[]});t.layers.forEach(o=>{Sn(i,o)}),r(i)})}function de(n,e){return n.getLayers().getArray().find(r=>r.getClassName()===e)}function Te(n,e){const t=de(n,e);t&&n.removeLayer(t)}function Sn(n,e){const t=new qr({className:e.id,source:new Vr.XYZ({...e.source}),zIndex:e.zIndex??0});n.addLayer(t)}function mi(n,e){Te(n,e)}function we(n,e,t){if(!n)return;const r=de(n,e);r&&r.setVisible(t)}const ue=[];function Ai(n,e){if(!n)return;const t=Array.isArray(e.type)?e.type:[e.type];if(t.includes("gradual")){const r=new mr(n,e);if(ue.push(r),t.includes("grid")){const i={...e,type:"grid"},o=new zt(n,i,async()=>{const u=await r.getOrLoadContourData();return u?{rawArr2D:u.rawArr2D,extent:u.extent,width:u.width,height:u.height}:null});ir(e.id,o)}}else if(t.includes("uv")){const r=new xn(n,e);if(ue.push(r),t.includes("grid")){const i={...e,type:"grid"},o=new zt(n,i,async()=>{const u=await r.getOrLoadContourData();return u?{rawArr2D:u.rawArr2D,extent:u.extent,width:u.width,height:u.height}:null});ir(e.id,o)}if(t.includes("windShaft")){const i=new lr(n,e,async()=>r.getOrLoadWindVectorData());ue.push(i)}}else if(t.includes("grid")){const r=new zt(n,e);ue.push(r)}else if(t.includes("arrow")){const r=new an(n,e);ue.push(r)}else if(t.includes("micaps")){const r=new mn(n,e);ue.push(r)}else if(t.includes("isoline")||t.includes("contour")){const r=new En(n,e);ue.push(r)}else if(t.includes("wms")){const r=new Nn(n,e);ue.push(r)}else if(t.includes("typhoon")){const r=new Fn(n,e);ue.push(r)}else if(t.includes("windShaft")){const r=new lr(n,e);ue.push(r)}}function pi(n){for(let t=ue.length-1;t>=0;t--)ue[t].options.id===n&&(ue[t].delete(),ue.splice(t,1));const e=Yt(n);e&&(e.delete(),on(n))}function vi(){ue.forEach(n=>{n.delete()}),un(n=>{n.delete()}),sn(),ue.length=0}function Di(n,e){ue.filter(i=>i.options.id===n).forEach(i=>{i.toggleVisible(e)});const r=Yt(n);r&&r.toggleVisible(e)}function yi(n){const e=ue.filter(r=>r.options.id===n.id);console.log("🚀 ~ updateLayer ~ layer:",ue,n,e),e.forEach(r=>{r.updateParams(n)});const t=Yt(n.id);t&&t.updateParams({...n,type:"grid"})}function bi(n,e){ue.filter(r=>r.options.id===n).forEach(r=>{typeof r.updateColor=="function"&&r.updateColor(e)})}function wi(){return ue}function Ci(){const n=new globalThis.Map;return ue.forEach(e=>{const t=e?.options;!t?.id||n.has(t.id)||n.set(t.id,t)}),Array.from(n.values())}function Bi(n,e,t,r,i=!1){if(!n)return Promise.resolve(null);const o=ue.find(u=>u.options.id===e);return o&&typeof o.getValueByLonLat=="function"?o.getValueByLonLat(t,r,i):Promise.resolve(null)}exports.ArrowLayer=an;exports.CommonMethods=Hn;exports.FcstLayer=mr;exports.GridLayer=zt;exports.IsolineLayer=En;exports.MicLayer=mn;exports.TyphoonLayer=Fn;exports.WindLayer=xn;exports.WindShaft=lr;exports.WmsLayer=Nn;exports.addIsolineLayer=bn;exports.addTile=Sn;exports.bboxFromLonlatTo3857=st;exports.bilinearInterpolate=Vt;exports.clampByte=Ue;exports.clearAllLayers=vi;exports.clearLinkedGridLayerMap=sn;exports.configureMapMethods=Qr;exports.convertContourGeoJSONTo3857=uo;exports.convertContourGeoJSONToLngLat=io;exports.createIsoline=wn;exports.createMicContour=dn;exports.createTdsRequestUrl=jr;exports.deleteLinkedGridLayer=on;exports.fetchExcel=Qn;exports.fetchImageBase64=Ur;exports.fetchTdsGet=jt;exports.fetchTdsImageBase64=Wn;exports.fetchTdsResponse=Qt;exports.fetchTxtOrJson=kn;exports.fetchXMLFromUrl=Wr;exports.fetchXmlData=fr;exports.forEachLinkedGridLayer=un;exports.gaussianBlur2D=Ut;exports.generateLegend=be;exports.getContourParams=Bt;exports.getGrayDataFromImage=_e;exports.getLayerByClassName=de;exports.getLegendItemsByScope=gr;exports.getLegendValueScope=it;exports.getLinkedGridLayer=Yt;exports.getLoadedLayerOptions=Ci;exports.getLoadedLayers=wi;exports.getMapMethodsConfig=Ae;exports.getMenuList=Kr;exports.getNCXmlData=Jr;exports.getNodeData=rr;exports.getTyphoonDetail=Ln;exports.getTyphoonList=Tn;exports.getUrlFromTime=tn;exports.getValueByLonLat=Bi;exports.getVariableMinMax=Zr;exports.getWidthAndHeight=en;exports.getXmlData=nr;exports.initMap=gi;exports.lerp=Dt;exports.loadLayer=Ai;exports.mapValueToRGBA=ao;exports.normalizeSmoothnessLevel=Ye;exports.parseAlpha=or;exports.parseColorToRGBA=bt;exports.parseCssNumber=We;exports.parseXML=qt;exports.pixelTo3857=_r;exports.pixelToLngLat=$r;exports.preloadIsoline=ui;exports.removeIsolineLayer=Cn;exports.removeLayer=Te;exports.removeLayerById=pi;exports.removeMicContour=gn;exports.removeTile=mi;exports.renderFcstCanvasByWebGPU=nn;exports.resetMapMethodsConfig=In;exports.resolveLayerLoadOptions=ho;exports.resolveSymFunction=hr;exports.setLinkedGridLayer=ir;exports.smoothGridByLevel=dr;exports.toggleIsolineLayer=Bn;exports.toggleLayerShowHide=we;exports.toggleVisibleById=Di;exports.updateLayer=yi;exports.updateWmsLayerColor=bi;