leaflet-city-mapper 0.0.5 → 0.0.6
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/README.md +1 -1
- package/dist/leaflet-city-mapper-src.js +1469 -1392
- package/dist/leaflet-city-mapper-src.js.map +4 -4
- package/dist/leaflet-city-mapper.js +3 -3
- package/dist/leaflet-city-mapper.js.map +4 -4
- package/libs/leaflet-lens.js +15 -3
- package/libs/leaflet.js +1 -1
- package/package.json +1 -1
- package/src/collision/collectIntersections.js +16 -0
- package/src/collision/collider.js +3 -2
- package/src/collision/countCrossings.js +15 -0
- package/src/collision/insideMesh.js +4 -24
- package/src/collision/insideWalker.js +2 -2
- package/src/collision/readTriangle.js +7 -4
- package/src/collision/setTrafficNormal.js +9 -0
- package/src/collision/trafficCollision.js +4 -9
- package/src/collision/vertexCount.js +3 -0
- package/src/controls/cameraControls.js +6 -0
- package/src/raster/setRasterOpacity.js +1 -1
- package/src/raster/setRasterZIndex.js +1 -1
- package/src/sources/buildArea.js +3 -12
- package/src/sources/buildAreaFeature.js +2 -5
- package/src/sources/buildAreaFeatures.js +14 -0
- package/src/sources/matchesAreaTile.js +7 -0
- package/src/sources/prepareAreaGeometryJob.js +2 -11
- package/src/sources/projectAreaPolygons.js +15 -0
- package/src/walk/animateWalker.js +2 -13
- package/src/walk/updateWalkerFrame.js +19 -0
- package/src/workers/acquireGeometryWorker.js +2 -5
- package/src/workers/buildAreaInWorker.js +4 -0
- package/src/workers/createGeometryWorker.js +19 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
(()=>{var d0=Object.defineProperty;var M=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(o){throw r=[o],o}};var h0=(e,t)=>{for(var r in t)d0(e,r,{get:t[r],enumerable:!0})};var h,b=M(()=>{h=globalThis.L});var C,X=M(()=>{C=Math.PI/180});var He,qr=M(()=>{He=180/Math.PI});var en,$s=M(()=>{en=new WeakMap});function k(e){return en.get(e)??0}var H=M(()=>{$s()});var tn,Vs=M(()=>{tn=new WeakMap});function S(e){return tn.get(e)??0}var W=M(()=>{Vs()});var wo,Xn=M(()=>{wo=Object.freeze({})});var Ne,Jn=M(()=>{Ne=new WeakMap});function Qn(){let e=this.getSize().y,t=k(this)*C,r=e*this.options.pitchMaxDistance,o=e*1.5,i=e/2-r*Math.abs(Math.cos(t))*o/(o+Math.sin(t)*r);i>0&&!Ne.get(this)&&(Ne.set(this,h.DomUtil.create("div","leaflet-pitch-sky",this.getContainer())),Ne.get(this).setAttribute("aria-hidden","true"),Ne.get(this).style.cssText="position:absolute;inset:0 0 auto;height:0;z-index:0;pointer-events:none;background:var(--leaflet-sky-background,linear-gradient(#9ec5e8,#dfe9f0))"),Ne.get(this)&&(Ne.get(this).style.inset=t>Math.PI/2?"auto 0 0":"0 0 auto",Ne.get(this).style.height=`${Math.max(0,Math.ceil(i))}px`,Ne.get(this).style.display=i>0?"":"none")}var hm=M(()=>{Jn();b();X();H()});function ze(e,t,r){if(!Number.isFinite(t)||!Number.isFinite(r))throw new TypeError("Camera angles must be finite numbers");if(!Number.isFinite(e.options.maxPitch)||e.options.maxPitch<0||e.options.maxPitch>180)throw new TypeError("maxPitch must be between 0 and 180 degrees");let o=k(e),i=S(e);return en.set(e,Math.max(0,Math.min(e.options.maxPitch,t))),tn.set(e,(r%360+360)%360),e._loaded&&(Qn.call(e),i!==S(e)&&e.fire("rotate",{bearing:S(e)}),o!==k(e)&&e.fire("pitch",{pitch:k(e)})),e}var or=M(()=>{Vs();$s();H();W();hm()});var Ot,ea=M(()=>{Ot=new WeakMap});var Mo,ta=M(()=>{Mo=new WeakMap});var nr,ra=M(()=>{nr=new Map});var gt,oa=M(()=>{gt={value:null}});function bo(e){nr.delete(e),Ot.set(e,null),Mo.set(e,null),!nr.size&>.value!==null&&(cancelAnimationFrame(gt.value),gt.value=null)}var ia=M(()=>{ea();ta();ra();oa()});var Sr,aa=M(()=>{Sr=new WeakMap});var yi,gm=M(()=>{yi=new WeakMap});var ym,El=M(()=>{ym={value:void 0}});var xm,kl=M(()=>{xm={value:void 0}});var vm,_l=M(()=>{vm={value:void 0}});var wm,Il=M(()=>{wm={value:void 0}});var sa,zl=M(()=>{sa={value:void 0}});var yt,Lo=M(()=>{yt=new WeakMap});var Er,ma=M(()=>{Er=new Set});var xi,Mm=M(()=>{xi=Object.freeze({capture:!0,passive:!1})});function bm(){this._map.fire("cameratouchchange")}var Al=M(()=>{});var Bo,fa=M(()=>{Bo=Object.freeze([.8,.5])});var Ol,Dl=M(()=>{Ol=Object.freeze([.8,0])});var pa,Lm=M(()=>{pa=Object.freeze({preventScroll:!0})});var ca,Bm=M(()=>{ca=Object.freeze({animate:!0})});function Gl(e){gt.value=null;let t=[...nr];nr.clear();let r,o,i,n,a;for([o,i]of t)if(Mo.set(o,null),Ot.get(o)===i){n=i.duration?Math.min(1,(e-i.start)/(i.duration*1e3)):1,a=1-(1-n)**3;try{ze(o,i.fromPitch+(Math.max(0,Math.min(o.options.maxPitch,i.pitch))-i.fromPitch)*a,i.fromBearing+i.delta*a),n<1&&Ot.get(o)===i?la(o,i):Ot.get(o)===i&&Ot.set(o,null)}catch(s){r||=s}}if(r)throw r}var Rl=M(()=>{ea();ta();oa();ra();or();Tm()});function la(e,t){nr.set(e,t),gt.value===null&&(gt.value=requestAnimationFrame(Gl)),Mo.set(e,gt.value)}var Tm=M(()=>{ta();ra();oa();Rl()});function To(e,t,r,o=wo){if(bo(e),!Number.isFinite(t)||!Number.isFinite(r))throw new TypeError("Camera angles must be finite numbers");if(!o.animate||matchMedia("(prefers-reduced-motion: reduce)").matches)return ze(e,t,r);let i=o.duration??.3;if(!Number.isFinite(i)||i<0)throw new TypeError("Camera duration must be nonnegative");let n=performance.now(),a=k(e),s=S(e),m=((r-s)%360+540)%360-180,f={duration:i,start:n,fromPitch:a,fromBearing:s,pitch:t,delta:m};return Ot.set(e,f),la(e,f),e}var ua=M(()=>{ea();Xn();or();H();W();ia();Tm()});function Ul(e,t=ca){return To(e,0,0,t)}var Fl=M(()=>{Bm();ua()});function Dt(e,t,r){return To(e,k(e),t,r)}var vi=M(()=>{ua();H()});function Nl(e,t=ca){return Dt(e,0,t)}var jl=M(()=>{Bm();vi()});function Wl(e){let t=this._rotateControl,r=t._map;e.preventDefault(),t.options.visualizePitch?Ul(r):Nl(r),e.detail&&r.getContainer().focus(pa)}var Zl=M(()=>{Lm();Fl();jl()});function kr(e,t,r){return To(e,t,S(e),r)}var da=M(()=>{ua();W()});function $l(e){let t=this._rotateControl,r=t._map,o=e.shiftKey?15:5;if(e.key==="ArrowLeft")Dt(r,S(r)-o);else if(e.key==="ArrowRight")Dt(r,S(r)+o);else if(e.key==="ArrowUp"&&t.options.visualizePitch)kr(r,k(r)+o);else if(e.key==="ArrowDown"&&t.options.visualizePitch)kr(r,k(r)-o);else if(e.key==="Home"||e.key===" ")this.click();else return;e.preventDefault(),e.stopPropagation()}var Vl=M(()=>{vi();W();da();H()});function ha(){let e=this._map,t=this.options.visualizePitch?k(e):0;this._arrow.style.transform=`scale(${1/Math.sqrt(Math.max(.01,Math.abs(Math.cos(t*C))))}) rotateX(${t}deg) rotate(${S(e)}deg)`,this._button.setAttribute("aria-description",`Bearing ${Math.round(S(e))} degrees, pitch ${Math.round(k(e))} degrees. Arrow keys adjust the camera; Home resets it.`),this._container.style.display=this.options.closeOnZeroBearing&&!S(e)&&!t&&!this._container.contains(document.activeElement)?"none":""}var Pm=M(()=>{X();H();W()});var Ae,ar=M(()=>{Ae={value:new WeakMap}});var _r,ga=M(()=>{_r={value:new Set}});function ya(e){return e.closest?.('input,textarea,select,[contenteditable="true"]')}var Cm=M(()=>{});function xa(e){let t=Ae.value.get(this);if(t.drag||!t.accept(e)||ya(e.target))return;e.preventDefault(),e.stopPropagation(),t.moved=!1;let r=t.map.getContainer().getBoundingClientRect();t.drag={id:e.pointerId,x:e.clientX,y:e.clientY,cursor:t.element.style.cursor,cx:r.left+r.width/2,cy:r.top+r.height/2,dragging:t.map.dragging?.enabled()},t.map.dragging?.disable(),t.element.focus?.(pa),t.element.setPointerCapture(e.pointerId),t.element.style.cursor="grabbing"}var Sm=M(()=>{ar();Lm();Cm()});function va(e){return bo(e),e}var Em=M(()=>{ia()});function wa(e){let t=Ae.value.get(this);if(!t.drag||t.drag.id!==e.pointerId)return;let r=e.clientX-t.drag.x,o=e.clientY-t.drag.y;if(Math.hypot(r,o)<3&&!t.moved)return;va(t.map),t.moved=!0,e.preventDefault();let i=r*t.sensitivity[0];if(t.orbit)if(Math.abs(t.drag.cy-t.drag.y)>100){let n=Math.atan2(e.clientY-t.drag.cy,e.clientX-t.drag.cx)-Math.atan2(e.clientY-t.drag.cy,t.drag.x-t.drag.cx);i=Math.atan2(Math.sin(n),Math.cos(n))*He}else i*=e.clientY<t.drag.cy?1:-1;ze(t.map,k(t.map)-o*t.sensitivity[1],S(t.map)+i),t.drag.x=e.clientX,t.drag.y=e.clientY}var km=M(()=>{qr();ar();Em();or();H();W()});function Po(e,t){if(!e?.drag||t?.pointerId!==void 0&&t.pointerId!==e.drag.id)return;let r=e.drag;e.drag=null,e.element.hasPointerCapture?.(r.id)&&e.element.releasePointerCapture(r.id),r.dragging&&e.map.getContainer()._leaflet_id&&e.map.dragging.enable(),e.element.style.cursor=r.cursor}var Ma=M(()=>{});function sr(e){Po(Ae.value.get(this),e)}var _m=M(()=>{ar();Ma()});function ba(e){let t=Ae.value.get(this);t.moved&&(e.preventDefault(),e.stopPropagation(),t.moved=!1)}var Im=M(()=>{ar()});function La(e){let t=Ae.value.get(this);!t.drag&&!t.moved||(e.preventDefault(),e.stopPropagation())}var zm=M(()=>{ar()});function Ba(){let e;for(e of _r.value)Po(e)}var Am=M(()=>{ga();Ma()});function Ta(e,t,r,o=Bo,i=!1){let n={map:e,element:t,accept:r,sensitivity:o,orbit:i,drag:null,moved:!1};return Ae.value.set(t,n),_r.value.add(n),t.addEventListener("pointerdown",xa,!0),t.addEventListener("pointermove",wa),t.addEventListener("pointerup",sr),t.addEventListener("pointercancel",sr),t.addEventListener("lostpointercapture",sr),t.addEventListener("click",ba,!0),t.addEventListener("contextmenu",La),window.addEventListener("blur",Ba),n}var Om=M(()=>{fa();ar();ga();Sm();km();_m();Im();zm();Am()});function ql(e){return e.button===0}var Hl=M(()=>{});function Yl(){ha.call(this._rotateControl)}var Xl=M(()=>{Pm()});function Kl(e){let t=h.DomUtil.create("div","leaflet-control-rotate leaflet-bar"),r=h.DomUtil.create("a","leaflet-control-rotate-toggle",t);this._map=e,this._container=t,this._button=r,r._rotateControl=this,r.href="#",r.draggable=!1,r.setAttribute("role","button"),r.title=this.options.visualizePitch?"Reset bearing and pitch":"Reset bearing to north",r.setAttribute("aria-label",r.title),r.style.cssText="cursor:grab;touch-action:none";let o=h.DomUtil.create("span","leaflet-control-rotate-arrow",r);return this._arrow=o,o.setAttribute("aria-hidden","true"),o.style.cssText="display:block;width:100%;height:100%;pointer-events:none;background: no-repeat center / 29px 29px",o.style.backgroundImage='url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 29 29%27%3E%3Cpath fill=%27%23333%27 d=%27M10.5 14 14.5 6 18.5 14Z%27/%3E%3Cpath fill=%27%23ccc%27 d=%27M10.5 16 14.5 24 18.5 16Z%27/%3E%3C/svg%3E")',r.onclick=Wl,r.onkeydown=$l,this._refresh=ha,e.on("rotate pitch",this._refresh,this),this._refresh(),this._dragState=Ta(e,r,ql,this.options.visualizePitch?Bo:Ol),r.addEventListener("focusout",Yl),h.DomEvent.on(r,"dblclick contextmenu",h.DomEvent.stop),h.DomEvent.disableClickPropagation(t),h.DomEvent.disableScrollPropagation(t),t}var Jl=M(()=>{b();fa();Dl();Zl();Vl();Pm();Om();Hl();Xl()});function Ql(e){Po(e);let{element:t}=e;t.removeEventListener("pointerdown",xa,!0),t.removeEventListener("pointermove",wa),t.removeEventListener("pointerup",sr),t.removeEventListener("pointercancel",sr),t.removeEventListener("lostpointercapture",sr),t.removeEventListener("click",ba,!0),t.removeEventListener("contextmenu",La),Ae.value.delete(t),_r.value.delete(e),_r.value.size||window.removeEventListener("blur",Ba)}var eu=M(()=>{ar();ga();Ma();Sm();km();_m();Im();zm();Am()});function Pa(){Ql(this._dragState)}var Dm=M(()=>{eu()});function tu(e){e.off("rotate pitch",this._refresh,this),Pa.call(this)}var ru=M(()=>{Dm()});function ou(e){return new h.Control.Rotate(e)}var iu=M(()=>{b()});function nu(e){let t=this._cameraShiftRotate;!e.shiftKey||ya(e.target)||e.target.closest(".leaflet-control")||(e.preventDefault(),e.stopImmediatePropagation(),Dt(t._map,S(t._map)+Math.sign(e.deltaY)*5))}var au=M(()=>{vi();W();Cm()});function su(){let e=this._map.getContainer();e._cameraShiftRotate=this,this._wheel=nu,e.addEventListener("wheel",this._wheel,xi)}var mu=M(()=>{Mm();au()});function fu(){let e=this._map.getContainer();e.removeEventListener("wheel",this._wheel,!0),delete e._cameraShiftRotate}var pu=M(()=>{});function cu(e){return!e.target.closest(".leaflet-control,.leaflet-marker-icon,.leaflet-popup")&&(e.button===2||e.button===0&&e.ctrlKey)}var lu=M(()=>{});function uu(){this._dragState=Ta(this._map,this._map.getContainer(),cu,Bo,!0)}var du=M(()=>{fa();Om();lu()});function hu(e){let t=this.handler,r=Number.isFinite(e.webkitCompassHeading)?-e.webkitCompassHeading:e.alpha,o=e.absolute?0:screen.orientation?.angle??window.orientation??0;Number.isFinite(r)&&Dt(t._map,r-o)}var gu=M(()=>{vi()});function Gm(e,t){e.disable(),e._map.fire("error",{error:t})}var yu=M(()=>{});function xu([e,t]){let{handler:r,generation:o}=e.value;if(!(!r.enabled()||r._generation!==o)){if(!window.DeviceOrientationEvent||t.status!=="fulfilled"||t.value!=="granted")return Gm(r,t.status==="rejected"?t.reason:new Error("Device compass permission unavailable or denied"));try{window.addEventListener("deviceorientation",r._orientation),window.addEventListener("deviceorientationabsolute",r._orientation)}catch(i){Gm(r,i)}}}var vu=M(()=>{yu()});function wu(){this._compassGeneration=this._generation=(this._generation||0)+1,this._orientation={handler:this,handleEvent:hu};let e=window.DeviceOrientationEvent?.requestPermission,t;try{t=e?e.call(window.DeviceOrientationEvent):"granted"}catch(r){t=Promise.reject(r)}Promise.allSettled([Promise.resolve({handler:this,generation:this._generation}),t]).then(xu)}var Mu=M(()=>{gu();vu()});function bu(){this._generation++,window.removeEventListener("deviceorientation",this._orientation),window.removeEventListener("deviceorientationabsolute",this._orientation)}var Lu=M(()=>{});function Bu(e){e[0]?.target._containerResizeMap.invalidateSize()}var Tu=M(()=>{});function Pu(){let e=this._map.getContainer();e._containerResizeMap=this._map,this._observer=new ResizeObserver(Bu),this._observer.observe(e)}var Cu=M(()=>{Tu()});function Su(){let e=this._map.getContainer();this._observer.disconnect(),delete e._containerResizeMap}var Eu=M(()=>{});var Co,Ca=M(()=>{Co=new WeakMap});var So,Sa=M(()=>{So=new WeakMap});function Ea(e){let t=yt.get(this),{map:r,container:o}=t;if(t.touch||e.touches.length!==2||e.target.closest(".leaflet-control")||!So.get(r).enabled()&&!Co.get(r).enabled())return;let[i,n]=e.touches;if(Math.hypot(n.clientX-i.clientX,n.clientY-i.clientY)<1)return;va(r);let a=o.getBoundingClientRect(),s=new h.Point((i.clientX+n.clientX)/2-a.left,(i.clientY+n.clientY)/2-a.top);t.touch={angle:Math.atan2(n.clientY-i.clientY,n.clientX-i.clientX),distance:Math.hypot(n.clientX-i.clientX,n.clientY-i.clientY),middle:s,anchor:r.containerPointToLatLng(s),zoom:r.getZoom(),bearing:S(r),pitch:k(r),zooming:r.touchZoom?.enabled(),dragging:r.dragging?.enabled(),currentMiddle:new h.Point(s.x,s.y)},r.dragging?.disable(),e.preventDefault(),e.stopImmediatePropagation(),t.nativeZoom!==void 0&&(t.touch.zooming=t.nativeZoom),t.touch.snap=r.options.zoomSnap,r.options.zoomSnap=0}var Rm=M(()=>{Ca();Sa();b();Lo();Em();W();H()});function ka(e){let t=yt.get(this),{map:r,container:o,touch:i}=t;if(!i||e.touches.length!==2)return;let[n,a]=e.touches,s=Math.atan2(a.clientY-n.clientY,a.clientX-n.clientX),m=o.getBoundingClientRect(),f=i.currentMiddle;f.x=(n.clientX+a.clientX)/2-m.left,f.y=(n.clientY+a.clientY)/2-m.top;let p=Math.atan2(Math.sin(s-i.angle),Math.cos(s-i.angle))*He;ze(r,Co.get(r).enabled()?i.pitch-(f.y-i.middle.y)*.25:i.pitch,So.get(r).enabled()?i.bearing+p:i.bearing);let c=Math.hypot(a.clientX-n.clientX,a.clientY-n.clientY);if(c<1)return;let l=i.zooming?Math.max(r.getMinZoom(),Math.min(r.getMaxZoom(),i.zoom+Math.log2(c/i.distance))):i.zoom;if(r.setView(r.getCenter(),l,{animate:!1}),r.options.touchZoom!=="center"){let u=r.project(i.anchor).subtract(r.project(r.containerPointToLatLng(f)));r.setView(r.unproject(r.project(r.getCenter()).add(u)),r.getZoom(),{animate:!1})}e.preventDefault(),e.stopImmediatePropagation()}var Um=M(()=>{Ca();Sa();qr();Lo();or()});function mr(e,t){if(!e.touch||t?.touches?.length>=2)return;let{map:r,container:o,touch:i}=e;i.dragging&&o._leaflet_id&&r.dragging.enable(),r.options.zoomSnap=i.snap,i.zooming&&i.snap&&o._leaflet_id&&r.setZoom(Math.round(r.getZoom()/i.snap)*i.snap,{animate:!1}),e.touch=null}var wi=M(()=>{});function Eo(e){mr(yt.get(this),e)}var Fm=M(()=>{Lo();wi()});function _a(){let e=Sr.get(this),{map:t,container:r}=e,o=So.get(t).enabled()||Co.get(t).enabled();o&&e.nativeZoom===void 0?(e.nativeZoom=t.touchZoom?.enabled(),t.touchZoom?.disable()):!o&&e.nativeZoom!==void 0&&(mr(e),e.nativeZoom&&r._leaflet_id&&t.touchZoom.enable(),e.nativeZoom=void 0)}var Nm=M(()=>{aa();Ca();Sa();wi()});function Ia(){let e;for(e of Er)mr(e)}var jm=M(()=>{ma();wi()});function ku(){let e=Sr.get(this);if(!e)return;let{container:t,map:r}=e;mr(e),t.removeEventListener("touchstart",Ea,!0),t.removeEventListener("touchmove",ka,!0),t.removeEventListener("touchend",Eo,!0),t.removeEventListener("touchcancel",Eo,!0),Er.delete(e),Er.size||window.removeEventListener("blur",Ia),r.off("cameratouchchange",_a,r),yi.get(r)?.remove(),yt.delete(t),Sr.delete(r)}var _u=M(()=>{aa();gm();ma();Lo();wi();Rm();Um();Fm();jm();Nm()});var Wm,Iu=M(()=>{Wm=new WeakMap});function Ir(e,t,r){let o=Wm.get(e);o||Wm.set(e,o=new Map);let i=new r(e);o.set(t,i),e._handlers.push(i),e.options[t]&&i.enable()}var zu=M(()=>{Iu()});var Au={};h0(Au,{cameraControls:()=>g0});function g0(e){if(Ir(e,"trackContainerMutation",xm.value),!e.options.rotate)return;Ir(e,"shiftKeyRotate",wm.value),Ir(e,"pitchDrag",vm.value),Ir(e,"compassBearing",ym.value),Ir(e,"touchRotate",sa.value),Ir(e,"touchPitch",sa.value);let t=e.getContainer(),r={map:e,container:t,touch:null,nativeZoom:void 0};Sr.set(e,r),yt.set(t,r),Er.add(r),t.addEventListener("touchstart",Ea,xi),t.addEventListener("touchmove",ka,xi),t.addEventListener("touchend",Eo,!0),t.addEventListener("touchcancel",Eo,!0),window.addEventListener("blur",Ia),e.on("cameratouchchange",_a,e),e.options.rotateControl&&(yi.set(e,new h.Control.Rotate(typeof e.options.rotateControl=="object"?e.options.rotateControl:wo)),yi.get(e).addTo(e)),e.once("unload",ku,e)}var Ou=M(()=>{aa();gm();b();El();kl();_l();Il();zl();Lo();ma();Mm();Xn();Al();Jl();ru();iu();mu();pu();du();Dm();Mu();Lu();Cu();Eu();Rm();Um();Fm();Nm();_u();jm();zu();ym.value=h.Handler.extend({addHooks:wu,removeHooks:bu});xm.value=h.Handler.extend({addHooks:Pu,removeHooks:Su});vm.value=h.Handler.extend({addHooks:uu,removeHooks:Pa});wm.value=h.Handler.extend({addHooks:su,removeHooks:fu});sa.value=h.Handler.extend({addHooks:bm,removeHooks:bm});h.Control.Rotate=h.Control.extend({options:{position:"topleft",closeOnZeroBearing:!0,visualizePitch:!0},onAdd:Kl,onRemove:tu});h.control&&(h.control.rotate=ou)});b();var br={value:void 0};var ji={value:void 0};var Wi={value:void 0};b();var j={value:void 0};var Ve={value:void 0};var Zi={value:void 0};var $i={value:void 0};var Vi={value:void 0};var qi={value:void 0};var Hi={value:void 0};var Yi={value:void 0};var Xi={value:void 0};var xe=new WeakMap;var re=new WeakMap;var $r=new WeakMap;var qt=new WeakMap;b();b();var z=new WeakMap;var pt=new WeakMap;function oi(e){let t=pt.get(e.currentTarget);if(!t)return;let r;for(r of t)qe(r)}function ii(e){let t=pt.get(e.currentTarget);if(!t)return;let r;for(r of t)r.source.fire("error",{error:new Error("Unable to load native layer image")})}function Ki(e,t){let r=pt.get(e);r&&(r.delete(t),r.size||pt.delete(e))}function hf(e,t){let r=pt.get(e);r||pt.set(e,r=new Set),r.add(t)}var et=new WeakMap;var kt=new Set;var U=new WeakMap;var w=new WeakMap;var ee=new WeakMap;var _t=new WeakMap;var Ht=new WeakMap;var tt=new WeakMap;var Ji=[null];var Vr=new WeakMap;var ce=new WeakMap;var Re=new WeakMap;var gf={subtree:!0};var ke=new WeakMap;b();function Qi(e){let t;for(t of Object.values(e._layers))t instanceof h.Marker?t.update():(t instanceof h.Popup||t instanceof h.Tooltip)&&t._updatePosition()}function yf(e,t){let r=e._map,o=Re.get(e),i,n;for(n of ce.get(e).keys())if(n.effect.target===r._proxy){i=n;break}let a=i?.effect.getComputedTiming().progress??Math.min(1,(t-o.start)/250),s=r.getZoomScale(o.targetZoom,o.zoom),m=1+(s-1)*a,f=r.project(o.from,o.zoom),p=r.project(o.to,o.zoom);ke.set(r,{zoom:r.getScaleZoom(m,o.zoom),center:r.unproject(f.add(p.subtract(f).multiplyBy(s*a/m)),o.zoom)}),Qi(r)}function xf(e,t){let r=e._map,o,i,n;if(r._animatingZoom){ce.get(e)||ce.set(e,new Map);for(o of r.getContainer().getAnimations(gf))!(o instanceof CSSTransition)||o.transitionProperty!=="transform"||!o.effect.target.classList.contains("leaflet-zoom-animated")||ce.get(e).has(o)||(i=o.currentTime||0,o.pause(),ce.get(e).set(o,{start:t,time:i}));for([o,{start:n,time:i}]of ce.get(e))o.currentTime=Math.min(o.effect.getComputedTiming().endTime,i+t-n);Re.get(e)&&yf(e,t)}}var Yt=new WeakMap;var ni={size:[null,null],format:"depth24plus",usage:null};async function vf(e,t,r){try{await r}catch(o){e.fire("error",{error:o})}t.destroy()}function F(e,t){vf(e,t,w.get(e).device.queue.onSubmittedWorkDone())}function wf(e,t){(!Yt.get(e)||!Yt.get(e).equals(t))&&(w.get(e).width=t.x,w.get(e).height=t.y,w.get(e).canvas.width=Math.round(t.x*w.get(e).dpr),w.get(e).canvas.height=Math.round(t.y*w.get(e).dpr),w.get(e).canvas.style.width=`${t.x}px`,w.get(e).canvas.style.height=`${t.y}px`,w.get(e).depthTexture&&F(e,w.get(e).depthTexture),w.get(e).depthTexture=w.get(e).device.createTexture((ni.size[0]=w.get(e).canvas.width,ni.size[1]=w.get(e).canvas.height,ni.usage=GPUTextureUsage.RENDER_ATTACHMENT,ni)),Yt.set(e,t))}var Q=new WeakMap;var ne=new WeakMap;X();qr();var Mf=2*Math.atan(1/3)*He;var Xt=2*Math.PI*6378137;var ae=new WeakMap;var rt=new WeakMap;var ve=new WeakMap;var Ye=new WeakMap;var de=new WeakMap;b();function bf(e,t){let r=t?.get(`${Math.floor(e.x/64)}/${Math.floor(e.y/64)}`);if(!r)return null;let o,i,n,a,s,m,f;for(o of r)if(!(e.x<o.min[0]||e.x>o.max[0]||e.y<o.min[1]||e.y>o.max[1])){for([i,n,a]of o.triangles)if(s=(n[1]-a[1])*(i[0]-a[0])+(a[0]-n[0])*(i[1]-a[1]),m=((n[1]-a[1])*(e.x-a[0])+(a[0]-n[0])*(e.y-a[1]))/s,f=((a[1]-i[1])*(e.x-a[0])+(i[0]-a[0])*(e.y-a[1]))/s,m>=0&&f>=0&&m+f<=1)return m*i[2]+f*n[2]+(1-m-f)*a[2]}return null}function ai(e,t,r){let o=Math.floor(t/256),i=Math.floor(r/256),n=e.get(`${o}/${i}`);if(!n)return null;let a=n[(r-i*256)*256+t-o*256];return Number.isFinite(a)&&a>-1e3?a:null}function Lf(e,t){let r=e.x-.5,o=e.y-.5,i=Math.floor(r),n=Math.floor(o),a=r-i,s=o-n,m=ai(t,i,n),f=ai(t,i+1,n),p=ai(t,i,n+1),c=ai(t,i+1,n+1);return!Number.isFinite(m)||!Number.isFinite(f)||!Number.isFinite(p)||!Number.isFinite(c)?Number.isFinite(m)?m:Number.isFinite(f)?f:Number.isFinite(p)?p:Number.isFinite(c)?c:null:(m*(1-a)+f*a)*(1-s)+(p*(1-a)+c*a)*s}function Kt(e,t){if(!e._map||!ve.get(e))return null;let r=t instanceof h.Point?t:e._map.project(t,de.get(e));return bf(r,rt.get(e))??Lf(r,Ye.get(e))}function ct(e,t){let r=ae.get(e);return r&&Kt(r,t)}var It=new WeakMap;H();W();var Bf=Math.PI/360;function Hr(e){e.x||=[0,0,0],e.y||=[0,0,0],e.z||=[0,0,0],e.viewTransform||=new DOMMatrix,e.projectionTransform||=new DOMMatrix,e.projectionViewTransform||=new DOMMatrix;let{position:t,target:r,up:o,x:i,y:n,z:a,viewMatrix:s,projectionMatrix:m,projectionViewMatrix:f}=e,p;a[0]=t[0]-r[0],a[1]=t[1]-r[1],a[2]=t[2]-r[2];let c=Math.hypot(a[0],a[1],a[2])||1;a[0]/=c,a[1]/=c,a[2]/=c,i[0]=o[1]*a[2]-o[2]*a[1],i[1]=o[2]*a[0]-o[0]*a[2],i[2]=o[0]*a[1]-o[1]*a[0];let l=Math.hypot(i[0],i[1],i[2])||1;i[0]/=l,i[1]/=l,i[2]/=l,n[0]=a[1]*i[2]-a[2]*i[1],n[1]=a[2]*i[0]-a[0]*i[2],n[2]=a[0]*i[1]-a[1]*i[0];let u=e.viewTransform;u.m11=i[0],u.m12=i[1],u.m13=i[2],u.m14=0,u.m21=n[0],u.m22=n[1],u.m23=n[2],u.m24=0,u.m31=a[0],u.m32=a[1],u.m33=a[2],u.m34=0,u.m41=t[0],u.m42=t[1],u.m43=t[2],u.m44=1,u.invertSelf(),s[0]=u.m11,s[1]=u.m12,s[2]=u.m13,s[3]=u.m14,s[4]=u.m21,s[5]=u.m22,s[6]=u.m23,s[7]=u.m24,s[8]=u.m31,s[9]=u.m32,s[10]=u.m33,s[11]=u.m34,s[12]=u.m41,s[13]=u.m42,s[14]=u.m43,s[15]=u.m44;for(p of s)if(!Number.isFinite(p))throw new Error("Singular 3D transform");let d=1/Math.tan(e.fov*Bf),y=e.near,g=e.far;m[0]=d/e.aspect,m[1]=0,m[2]=0,m[3]=0,m[4]=0,m[5]=d,m[6]=0,m[7]=0,m[8]=0,m[9]=0,m[10]=g/(y-g),m[11]=-1,m[12]=0,m[13]=0,m[14]=g*y/(y-g),m[15]=0;let x=e.projectionTransform;x.m11=m[0],x.m12=m[1],x.m13=m[2],x.m14=m[3],x.m21=m[4],x.m22=m[5],x.m23=m[6],x.m24=m[7],x.m31=m[8],x.m32=m[9],x.m33=m[10],x.m34=m[11],x.m41=m[12],x.m42=m[13],x.m43=m[14],x.m44=m[15];let v=e.projectionViewTransform;v.m11=x.m11,v.m12=x.m12,v.m13=x.m13,v.m14=x.m14,v.m21=x.m21,v.m22=x.m22,v.m23=x.m23,v.m24=x.m24,v.m31=x.m31,v.m32=x.m32,v.m33=x.m33,v.m34=x.m34,v.m41=x.m41,v.m42=x.m42,v.m43=x.m43,v.m44=x.m44,v.multiplySelf(u),f[0]=v.m11,f[1]=v.m12,f[2]=v.m13,f[3]=v.m14,f[4]=v.m21,f[5]=v.m22,f[6]=v.m23,f[7]=v.m24,f[8]=v.m31,f[9]=v.m32,f[10]=v.m33,f[11]=v.m34,f[12]=v.m41,f[13]=v.m42,f[14]=v.m43,f[15]=v.m44}function Jt(e,t,r=!1){let o=ke.get(e);if(!o)return t;let i=e.getSize().divideBy(2),n=e.getZoomScale(o.zoom),a=e.project(e.getCenter(),o.zoom).subtract(e.project(o.center,o.zoom));return r?t.subtract(i).subtract(a).divideBy(n).add(i):t.subtract(i).multiplyBy(n).add(a).add(i)}function Tf(e,t){let r=e._map,o=ke.get(r)?.zoom??r.getZoom(),i=r.options.crs.scale(o)/(Xt*Math.cos(ne.get(e).lat*C)),n=Jt(r,j.value.layerPointToContainerPoint.call(r,r.project(ne.get(e)).subtract(r.getPixelOrigin()))),a=t.y*1.5/i,s=(t.x/2-n.x)/i,m=It.get(r)?.control?._walk,f=(ct(r,r.getCenter())??0)+(m?.saved?m.state.height:0),p=(t.y/2-n.y)/i,c=k(r)*C,l=S(r)*C,u=Q.get(e);u.fov=Mf,u.aspect=t.x/t.y,u.near=Math.max(.1,a/1e4),u.far=Math.max(1e4,a*10),u.position[0]=s+Math.sin(l)*Math.sin(c)*a,u.position[1]=f+Math.cos(c)*a,u.position[2]=p+Math.cos(l)*Math.sin(c)*a,u.up[0]=-Math.sin(l)*Math.cos(c),u.up[1]=Math.sin(c),u.up[2]=-Math.cos(l)*Math.cos(c),u.target[0]=s,u.target[1]=f,u.target[2]=p,Hr(u)}var Lr=new WeakMap;function Pf(e,t){let r,o;if(e.matrix){let i=e._matrixState||=new Float64Array(16);for(r=0;r<16;r++)i[r]!==e.matrix[r]&&(t=!0),i[r]=e.matrix[r]}else{let i=e._transformState||=new Float64Array(9);for(r=0;r<9;r++)o=r<3?e.position[r]:r<6?e.rotation[r-3]:e.scale[r-6],i[r]!==o&&(t=!0),i[r]=o}return t}qr();function Cf(e){let t=e._localTransform||=new DOMMatrix;return t.m11=1,t.m12=0,t.m13=0,t.m14=0,t.m21=0,t.m22=1,t.m23=0,t.m24=0,t.m31=0,t.m32=0,t.m33=1,t.m34=0,t.m41=0,t.m42=0,t.m43=0,t.m44=1,t.translateSelf(e.position[0],e.position[1],e.position[2]),t.rotateAxisAngleSelf(0,1,0,e.rotation[1]*He),t.rotateAxisAngleSelf(1,0,0,e.rotation[0]*He),t.rotateAxisAngleSelf(0,0,1,e.rotation[2]*He),t.scaleSelf(e.scale[0],e.scale[1],e.scale[2]),t}function we(e){let t=e.parent,r=t?._worldMatrixVersion||0,o=!!e.matrix,i=e._worldParent!==t||e._parentWorldVersion!==r||e._worldMatrixMode!==o,n;if(i=Pf(e,i),!i){for(n of e.children)we(n);return}let a,s;e.matrix?a=e.matrix:a=Cf(e),s=e._worldTransform||=new DOMMatrix,a instanceof DOMMatrix?(s.m11=a.m11,s.m12=a.m12,s.m13=a.m13,s.m14=a.m14,s.m21=a.m21,s.m22=a.m22,s.m23=a.m23,s.m24=a.m24,s.m31=a.m31,s.m32=a.m32,s.m33=a.m33,s.m34=a.m34,s.m41=a.m41,s.m42=a.m42,s.m43=a.m43,s.m44=a.m44):(s.m11=a[0],s.m12=a[1],s.m13=a[2],s.m14=a[3],s.m21=a[4],s.m22=a[5],s.m23=a[6],s.m24=a[7],s.m31=a[8],s.m32=a[9],s.m33=a[10],s.m34=a[11],s.m41=a[12],s.m42=a[13],s.m43=a[14],s.m44=a[15]),t&&s.preMultiplySelf(t._worldTransform),e.worldMatrix[0]=s.m11,e.worldMatrix[1]=s.m12,e.worldMatrix[2]=s.m13,e.worldMatrix[3]=s.m14,e.worldMatrix[4]=s.m21,e.worldMatrix[5]=s.m22,e.worldMatrix[6]=s.m23,e.worldMatrix[7]=s.m24,e.worldMatrix[8]=s.m31,e.worldMatrix[9]=s.m32,e.worldMatrix[10]=s.m33,e.worldMatrix[11]=s.m34,e.worldMatrix[12]=s.m41,e.worldMatrix[13]=s.m42,e.worldMatrix[14]=s.m43,e.worldMatrix[15]=s.m44,e._worldParent=t,e._parentWorldVersion=r,e._worldMatrixMode=o,e._worldMatrixVersion=(e._worldMatrixVersion||0)+1;for(n of e.children)we(n)}function Be(e){let t=[1/0,1/0,1/0],r=[-1/0,-1/0,-1/0],o=e.attributes.position.data,i,n,a,s;for(i=0;i<o.length;i+=3)n=o[i],a=o[i+1],s=o[i+2],t[0]=Math.min(t[0],n),r[0]=Math.max(r[0],n),t[1]=Math.min(t[1],a),r[1]=Math.max(r[1],a),t[2]=Math.min(t[2],s),r[2]=Math.max(r[2],s);let m=e.attributes.instanceOffset;if(m){let l,u,d,y;for(l=0;l<3;l++){for(d=1/0,y=-1/0,u=l;u<m.data.length;u+=m.size)d=Math.min(d,m.data[u]),y=Math.max(y,m.data[u]);t[l]=Math.fround(t[l]+d),r[l]=Math.fround(r[l]+y)}}let f=[(t[0]+r[0])/2,(t[1]+r[1])/2,(t[2]+r[2])/2],p=0;for(i=0;!m&&i<o.length;i+=3)n=o[i]-f[0],a=o[i+1]-f[1],s=o[i+2]-f[2],p=Math.max(p,n*n+a*a+s*s);let c=m?Math.hypot(r[0]-t[0],r[1]-t[1],r[2]-t[2])/2:Math.sqrt(p);if(!m&&(p===1/0||p<Number.MIN_VALUE/Number.EPSILON))for(c=0,i=0;i<o.length;i+=3)c=Math.max(c,Math.hypot(o[i]-f[0],o[i+1]-f[1],o[i+2]-f[2]));e.bounds={min:t,max:r,center:f,radius:c}}function Sf(e,t,r,o,i){e.geometry.bounds||Be(e.geometry);let n=e.geometry.bounds,a=e.worldMatrix,s=e._cullingSphere;if(!s||s.bounds!==n||s.matrix!==a||s.version!==e._worldMatrixVersion||e._worldMatrixVersion===void 0){s||=e._cullingSphere={};let d=n.center;s.x=a[0]*d[0]+a[4]*d[1]+a[8]*d[2]+a[12],s.y=a[1]*d[0]+a[5]*d[1]+a[9]*d[2]+a[13],s.z=a[2]*d[0]+a[6]*d[1]+a[10]*d[2]+a[14],s.radius=n.radius*Math.max(Math.hypot(a[0],a[1],a[2]),Math.hypot(a[4],a[5],a[6]),Math.hypot(a[8],a[9],a[10])),s.bounds=n,s.matrix=a,s.version=e._worldMatrixVersion}let{x:m,y:f,z:p,radius:c}=s,l=t[2]*m+t[6]*f+t[10]*p+t[14],u=t[3]*m+t[7]*f+t[11]*p+t[15];e._sortDepth=l/u,e._visibleInFrame=r[0][0]*m+r[0][1]*f+r[0][2]*p+r[0][3]>=-c*o[0]&&r[1][0]*m+r[1][1]*f+r[1][2]*p+r[1][3]>=-c*o[1]&&r[2][0]*m+r[2][1]*f+r[2][2]*p+r[2][3]>=-c*o[2]&&r[3][0]*m+r[3][1]*f+r[3][2]*p+r[3][3]>=-c*o[3]&&r[4][0]*m+r[4][1]*f+r[4][2]*p+r[4][3]>=-c*o[4]&&r[5][0]*m+r[5][1]*f+r[5][2]*p+r[5][3]>=-c*o[5],e._visibleInFrame&&i.push(e)}function qs(e,t,r,o,i,n,a){if(!e.visible)return;e.geometry&&(t?.altitude>=3&&!e.tile&&e._appearance!==0&&!e.program.nightLight&&e.program.depthTest!==!1&&a.push(e),Sf(e,r,o,i,n));let s;for(s of e.children)qs(s,t,r,o,i,n,a)}function Ef(e,t,r){let i=Q.get(e).projectionViewMatrix,n=w.get(e),a=n.frustum||=[new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4)],s=n.frustumLengths||=new Float64Array(6),m,f,p,c,l;for(m=0;m<6;m++){for(f=Math.floor(m/2),p=a[m],c=0;c<4;c++)l=c*4,p[c]=m===4?i[l+2]:m%2?i[l+3]-i[l+f]:i[l+3]+i[l+f];s[m]=Math.hypot(p[0],p[1],p[2])}let u=Lr.get(e);u||Lr.set(e,u=[]),u.length=0;let d=_t.get(e);d||_t.set(e,d=[]),d.length=0,r&&we(ee.get(e)),qs(ee.get(e),t,i,a,s,u,d)}var I=new WeakMap;var A=new WeakMap;var Y=new WeakMap;var si=new WeakMap;var se=new WeakMap;var Te=new WeakMap;b();var kf=[];X();var _f=[];var If={x:0,y:0};var zf={x:1,y:1};var Af={code:"@group(0)@binding(0)var source:texture_2d<f32>;@group(0)@binding(1)var sourceSampler:sampler;@group(0)@binding(2)var<uniform> opacity:f32;struct Varyings{@builtin(position)position:vec4f,@location(0)uv:vec2f};@vertex fn vertexMain(@builtin(vertex_index)index:u32)-> Varyings{let uv = vec2f(f32(index & 1u),f32(index >> 1u));return Varyings(vec4f(uv.x * 2.0 - 1.0,1.0 - uv.y * 2.0,0.0,1.0),uv);}@fragment fn fragmentMain(input:Varyings)->@location(0)vec4f{let color = textureSample(source,sourceSampler,input.uv);return vec4f(color.rgb,color.a * opacity);}"};var Yr={layout:"auto",vertex:{module:null,entryPoint:"vertexMain"},fragment:{module:null,entryPoint:"fragmentMain",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}}]},primitive:{topology:"triangle-strip"}};var Of={magFilter:"linear",minFilter:"linear"};function Df(e){let t=e.device;if(!e.roofBlit){let r=t.createShaderModule(Af);e.roofBlit={pipeline:t.createRenderPipeline((Yr.vertex.module=r,Yr.fragment.module=r,Yr)),sampler:t.createSampler(Of)},Yr.vertex.module=null,Yr.fragment.module=null}}var rn={size:null,usage:null};var on={colorAttachments:[{view:null,clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}]};var nn={source:null};var an={texture:null};var sn=[null,null];function Gf(e,t){let r=t.texture;r.uploaded!==r.image&&(e.queue.copyExternalImageToTexture((nn.source=t.image,nn),(an.texture=r.texture,an),(sn[0]=r.texture.width,sn[1]=r.texture.height,sn)),nn.source=null,an.texture=null,r.uploaded=r.image)}var ot={layout:null,entries:[{binding:0,resource:null},{binding:1,resource:null},{binding:2,resource:{buffer:null,offset:null,size:4}}]};var mn=[null];var fn={value:new Float32Array(64)};function Rf(e,t){return(e.layer.options.zIndex||0)-(t.layer.options.zIndex||0)||e.tile.coords.z-t.tile.coords.z}function Uf(e,t,r,o,i,n,a){let s=w.get(e),m=s.device,f=e._map,p=Math.max(1,t.length)*64;fn.value.length<p&&(fn.value=new Float32Array(p));let c=fn.value,l=m.createBuffer((rn.size=c.byteLength,rn.usage=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,rn)),u=m.createCommandEncoder(),d=u.beginRenderPass((on.colorAttachments[0].view=Y.get(e).texture.texture.createView(),on));on.colorAttachments[0].view=null,d.setPipeline(s.roofBlit.pipeline),t.sort(Rf);let y,g,x,v,P,B,T,O;for([y,{tile:g,layer:x}]of t.entries())({coords:v}=g),P=g.texture,Gf(m,g),c[y*64]=x.options.opacity,B=256*f.getZoomScale(r,v.z),T=(v.x*B-o.x)*n/i.x,O=(v.y*B-o.y)*a/i.y,d.setViewport(T,O,Math.min(B*n/i.x,n-T),Math.min(B*a/i.y,a-O),0,1),d.setBindGroup(0,m.createBindGroup((ot.layout=s.roofBlit.pipeline.getBindGroupLayout(0),ot.entries[0].resource=P.texture.createView(),ot.entries[1].resource=s.roofBlit.sampler,ot.entries[2].resource.buffer=l,ot.entries[2].resource.offset=y*256,ot))),ot.layout=null,ot.entries[0].resource=null,ot.entries[1].resource=null,ot.entries[2].resource.buffer=null,d.draw(4);d.end(),m.queue.writeBuffer(l,0,c),m.queue.submit((mn[0]=u.finish(),mn)),mn[0]=null,l.destroy()}function Ff(e,t){let r=-1/0,o,i;for(o of e)for(i of A.get(o).values())i.done&&!i.request.signal.aborted&&i.image&&(i._roofEntry||={tile:i,layer:o},t.push(i._roofEntry),r=Math.max(r,i.coords.z));return r}var Nf={size:[null,null],format:"rgba8unorm",usage:null};var jf={addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"};function Wf(e,t,r,o){let i=w.get(e),n=Nf;n.size[0]=r,n.size[1]=o,n.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT,t.texture&&(t.texture.width!==r||t.texture.height!==o)&&(F(e,t.texture.texture),t.texture.texture=i.device.createTexture(n),t.texture.width=r,t.texture.height=o),t.texture||={device:i.device,texture:i.device.createTexture(n),sampler:i.device.createSampler(jf),samplerOptions:{addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"},image:null,width:r,height:o,format:"rgba8unorm",srgb:!1,flipY:!1,uploaded:null}}function Zf(e,t,r,o){let i=e._map,n=w.get(e),a=_f;a.length=0;let s=Ff(t,a),m=1/0,f=1/0,p=-1/0,c=-1/0,l,u;a.length||(s=i.getZoom());for({tile:{coords:l}}of a)u=256*i.getZoomScale(s,l.z),m=Math.min(m,l.x*u),f=Math.min(f,l.y*u),p=Math.max(p,(l.x+1)*u),c=Math.max(c,(l.y+1)*u);let d=i.project(ne.get(e),s),y=If,g=zf;y.x=a.length?m:d.x,y.y=a.length?f:d.y,g.x=a.length?p-m:1,g.y=a.length?c-f:1;let x=Math.min(1,4096/Math.max(g.x,g.y)),v=Math.max(1,Math.ceil(g.x*x)),P=Math.max(1,Math.ceil(g.y*x)),B=i.options.crs.scale(s)/(Xt*Math.cos(ne.get(e).lat*C)),T={matrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],texture:Y.get(e)?.texture};Y.set(e,T),T.signature=r,T.updatedAt=o,T.matrix[0]=B/g.x,T.matrix[10]=B/g.y,T.matrix[12]=(d.x-y.x)/g.x,T.matrix[14]=(d.y-y.y)/g.y,Wf(e,T,v,P),Df(n);try{Uf(e,a,s,y,g,v,P)}finally{a.length=0}}function $f(e,t,r){let o=kf;o.length=0;let i=!1,n;for(n of t)o.push(`${h.Util.stamp(n)}:${Te.get(n)||0}:${n.options.opacity}:${n.options.zIndex}`),i||=!!se.get(n);let a=o.join("|");o.length=0,(!Y.get(e)||Y.get(e).signature!==a&&(!i||r-Y.get(e).updatedAt>=50))&&Zf(e,t,a,r)}function Vf(e,t){let r=e._map,o=si.get(e);o||si.set(e,o=[]),o.length=0;let i=!1,n,a;for(n of U.get(e))if(n.options.roofTexture||n.options.wallTexture){i=!0;break}if(i){for(a of Object.values(r._layers))I.get(a)==="raster"&&A.get(a)&&a.options.opacity>0&&o.push(a);$f(e,o,t)}else Y.get(e)&&(F(e,Y.get(e).texture.texture),Y.set(e,null));return o}function qf(e,t){return e.program.transparent?(e.renderOrder||0)-(t.renderOrder||0)||t._sortDepth-e._sortDepth||e.id-t.id:(e._sortDepth??0)-(t._sortDepth??0)||e.id-t.id}function Hf(e,t){return+!!t.ground-+!!e.ground||(e.ground&&t.ground?(e.renderOrder||0)-(t.renderOrder||0)||e.tile.coords.z-t.tile.coords.z:0)||Number(e.program.transparent)-Number(t.program.transparent)||qf(e,t)}var R=new WeakMap;var Qt=new WeakMap;X();function Yf(e,t,r){let o=t._map,i=e.geometry.bounds,n=e.worldMatrix,a=Qt.get(r),s=o.project(ne.get(t),a),m=o.options.crs.scale(a)/(Xt*Math.cos(ne.get(t).lat*C)),f=1/0,p=1/0,c=-1/0,l=-1/0,u,d,y,g,x,v,P,B;for(u=0;u<8;u++)d=u&1?i.max[0]:i.min[0],y=u&2?i.max[1]:i.min[1],g=u&4?i.max[2]:i.min[2],x=s.x+(n[0]*d+n[4]*y+n[8]*g+n[12])*m,v=s.y+(n[2]*d+n[6]*y+n[10]*g+n[14])*m,f=Math.min(f,x),p=Math.min(p,v),c=Math.max(c,x),l=Math.max(l,v);return R.get(r).maxLat!==void 0&&R.get(r).minLon!==void 0&&R.get(r).minLat!==void 0&&R.get(r).maxLon!==void 0&&(P=o.project([R.get(r).maxLat,R.get(r).minLon],a),B=o.project([R.get(r).minLat,R.get(r).maxLon],a),f=Math.max(f,P.x),p=Math.max(p,P.y),c=Math.min(c,B.x),l=Math.min(l,B.y),f>=c||p>=l)?null:[f,p,c,l]}function Xf(e,t,r){let o=256*2**(r-t.coords.z),i=t.coords.x*o,n=t.coords.y*o,a=[],s,m,f,p,c,l,u,d;for([s,m,f,p]of e){if(c=Math.max(s,i),l=Math.max(m,n),u=Math.min(f,i+o),d=Math.min(p,n+o),c>=u||l>=d){a.push([s,m,f,p]);continue}m<l&&a.push([s,m,f,l]),d<p&&a.push([s,d,f,p]),s<c&&a.push([s,l,c,d]),u<f&&a.push([u,l,f,d])}return a}function Kf(e,t,r){let o=!1,i=!1,n,a,s,m;for(n of r){if(!R.get(n)){i=!0;continue}if(a=Yf(e,t,n),!!a){o=!0,s=[a];for(m of A.get(n).values())if(!(!m.done&&!m.error)&&(s=Xf(s,m,Qt.get(n)),!s.length))return!0}}return!o&&!i}function Jf(e,t,r,o){let i,n;if(t.program.uniforms.roofTexture&&!r.length&&(t._roofRevealed=!0),t.program.uniforms.roofTexture&&!t._roofRevealed&&r.length){It.get(e._map)?.control?._walk?.saved&&(t._roofRevealed=!0,t.fadeStart=o-(t.fadeDuration||0)),t._roofCoverageSignature!==Y.get(e)?.signature&&(t._roofCoverageSignature=Y.get(e)?.signature,t._roofCovered=Kf(t,e,r)),n=!1;for(i of r)if(!R.get(i)||se.get(i)>0){n=!0;break}if(!t._roofRevealed&&!t._roofCovered&&n)return t._appearance=0,!1;t._roofRevealed=!0}return!0}function Qf(e,t,r,o){let i=Lr.get(e),n=_t.get(e),a=w.get(e),s=!1,m,f;for(m of i)Jf(e,m,t,r)&&(m.fadeDuration&&(m.fadeStart??=m.tile?.loadedAt??r,f=Math.min(1,(r-m.fadeStart)/m.fadeDuration),m._appearance=f*f*(3-2*f),s||=f<1),o.push(m));i.length=0,o.sort(Hf);let p=1/0,c=-1/0;for(m of o)m.ground&&(p=Math.min(p,m.tile.coords.z),c=Math.max(c,m.tile.coords.z));a.groundOverlap=p!==c;let l=0;for(m of n)m.visible&&m._appearance!==0&&(n[l++]=m);return n.length=l,s}var pn={size:null,usage:null};function ep(e,t,r){let o=w.get(e);(!o.uniformBuffer||o.uniformBuffer.size<(t.length*2+r.length+1)*256)&&(o.uniformBuffer&&F(e,o.uniformBuffer),o.uniformBuffer=o.device.createBuffer((pn.size=Math.max(64,t.length*4+r.length*2)*256,pn.usage=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,pn)),o.uniformData=new Float32Array(o.uniformBuffer.size/4))}var L=new WeakMap;var Xe={layout:null,entries:[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null},{binding:3,resource:{buffer:null}}]};function cn(e){let t=w.get(e).sunlight;t.bindGroup=w.get(e).device.createBindGroup((Xe.layout=t.layout,Xe.entries[0].resource.buffer=t.buffer,Xe.entries[1].resource=t.texture.createView(),Xe.entries[2].resource=t.sampler,Xe.entries[3].resource.buffer=t.lights,Xe)),Xe.layout=null,Xe.entries[0].resource.buffer=null,Xe.entries[1].resource=null,Xe.entries[2].resource=null,Xe.entries[3].resource.buffer=null}function tp(e,t,r,o,i){let n,a;for(n=0,a=o[r]*4;n<8;n++)i[a+n]=e[t+n];o[r]+=2}function rp(e,t,r,o,i,n,a,s){let m=e[t+3],f=e[t]-r,p=e[t+2]-o,c,l,u;for(c=Math.floor((p-m)/i);c<=Math.floor((p+m)/i);c++)for(l=Math.floor((f-m)/i);l<=Math.floor((f+m)/i);l++)u=c*n+l,s?tp(e,t,u,a,s):a[u]++}function Hs(e,t,r,o,i,n,a){let s,m;for(s of e)for(m=0;m<s.length;m+=8)rp(s,m,t,r,o,i,n,a)}function op(e,t){let r=0,o,i,n,a;for(o of e)r+=o.length/8;let s=32,m;if(r){let f=1/0,p=1/0,c=-1/0,l=-1/0;for(o of e)for(i=0;i<o.length;i+=8)f=Math.min(f,o[i]-o[i+3]),c=Math.max(c,o[i]+o[i+3]),p=Math.min(p,o[i+2]-o[i+3]),l=Math.max(l,o[i+2]+o[i+3]);let u=Math.ceil((c-f)/s)+1,d=Math.ceil((l-p)/s)+1,y=new Uint32Array(u*d),g=new Uint32Array(u*d);Hs(e,f,p,s,u,y);let x=0;for(n of y)x+=n;let v=(2+u*d+x*2)*4;if(v*4>t)throw new Error("Streetlight grid exceeds GPU storage limit");m=new Float32Array(v),m[0]=f,m[1]=p,m[2]=s,m[3]=u,m[4]=d,m[5]=r;let P=2+u*d;for(a=0;a<y.length;a++)y[a]&&(m[(2+a)*4]=g[a]=P,m[(2+a)*4+1]=y[a],P+=y[a]*2);Hs(e,f,p,s,u,g,m)}else m=new Float32Array(8);return{data:m,count:r}}var ip=.03/(4*Math.PI);function np(e,t){let r=new Float32Array(e.length*8),o,i,n,a,s,m,f,p;for(o=0;o<e.length;o++)({position:[i,n,a],radius:s,color:m,flux:f}=e[o]),p=t[3]*i+t[7]*n+t[11]*a+t[15],r[o*8]=(t[0]*i+t[4]*n+t[8]*a+t[12])/p,r[o*8+1]=(t[1]*i+t[5]*n+t[9]*a+t[13])/p,r[o*8+2]=(t[2]*i+t[6]*n+t[10]*a+t[14])/p,r[o*8+3]=s,r[o*8+4]=m[0],r[o*8+5]=m[1],r[o*8+6]=m[2],r[o*8+7]=f*ip;return r}function Ys(e,t,r){let o=t?.meshes.length===e.length,i,n,a,s,m,f,p;for(i=0;i<e.length;i++){for(n=e[i],a=n.worldMatrix,s=n.extras.lights,m=n._worldLights,f=!!m,p=0;p<a.length&&f;p++)f=a[p]===m.matrix[p];(!f||m.lights!==s)&&(m=n._worldLights={lights:s,matrix:[...a],data:np(s,a)}),o&&=t.meshes[i].mesh===n&&t.meshes[i].cache===m}if(o)return t;let c=new Array(e.length),l=new Array(e.length);for(i=0;i<e.length;i++)n=e[i],m=n._worldLights,c[i]=m.data,l[i]={mesh:n,cache:m};return{...op(c,r),meshes:l}}var it=[];function Xs(e,t,r){if(!e.visible)return;e.extras?.lights&&(e.extras.dynamicLights?r:t).push(e);let o;for(o of e.children||it)Xs(o,t,r)}function ap(e){let{device:t,sunlight:r}=w.get(e),o=[],i=[],n;for(n of U.get(e))!n.options.nightLight||!L.get(n).visible||Xs(L.get(n),o,i);let a=t.limits.maxStorageBufferBindingSize,s=Ys(o,r.staticLightGrid,a),m=Ys(i,r.dynamicLightGrid,a);if(s===r.staticLightGrid&&m===r.dynamicLightGrid)return;let f=s.data.byteLength+m.data.byteLength;if(f>a)throw new Error("Streetlight grid exceeds GPU storage limit");let p=s!==r.staticLightGrid;r.lights.size<f&&(F(e,r.lights),r.lights=t.createBuffer({size:f,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST}),cn(e),p=!0),s.data[6]=s.data.length/4,p&&t.queue.writeBuffer(r.lights,0,s.data),t.queue.writeBuffer(r.lights,s.data.byteLength,m.data),r.lightCount=s.count+m.count,r.staticLightGrid=s,r.dynamicLightGrid=m}function sp(e,t,r,o){let i=w.get(e),n=Q.get(e),a=n.viewMatrix,s=o?.direction,m=s?s[0]:-300,f=s?s[1]:500,p=s?s[2]:300,c=a[0]*m+a[4]*f+a[8]*p,l=a[1]*m+a[5]*f+a[9]*p,u=a[2]*m+a[6]*f+a[10]*p,d=Math.hypot(c,l,u)||1,y=Math.hypot(a[4],a[5],a[6])||1;ep(e,t,r);let g=i.uniformData;g.set(n.viewMatrix,0),g.set(n.projectionMatrix,16),Y.get(e)?.matrix?g.set(Y.get(e).matrix,32):(g.fill(0,32,48),g[32]=g[37]=g[42]=g[47]=1),g[48]=c/d,g[49]=l/d,g[50]=u/d,g[51]=o&&o.altitude<=0?0:1,g[52]=a[4]/y,g[53]=a[5]/y,g[54]=a[6]/y;let x=o?Math.max(0,Math.min(1,(3-o.altitude)/9)):0;g[55]=x*x*(3-2*x);let v=o?.tint;g[56]=v?v[0]:1,g[57]=v?v[1]:1,g[58]=v?v[2]:1,g[59]=0,x>0&&ap(e),i.uniformSlot=1}var Xr={colorAttachments:[{view:null,clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}],depthStencilAttachment:{view:null,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}};var Ks=[null];var ge={layout:null,vertex:{module:null,entryPoint:"vertexMain",buffers:null},fragment:{module:null,entryPoint:"fragmentMain",targets:[{format:null,blend:null,writeMask:null}]},primitive:{topology:"triangle-list",cullMode:null,frontFace:null},depthStencil:{format:"depth24plus",depthWriteEnabled:null,depthCompare:null}};var mp={color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}};function fp(e,t,r,o){let{program:i}=t,n=i.depthTest===!1||t.ground&&e.groundOverlap?"always":"less-equal",a=`${r}:${o}:${n}`,s=i.pipelineCache.get(a);return s||(s=e.device.createRenderPipeline((ge.layout=i.pipelineLayout,ge.vertex.module=i.vertex,ge.vertex.buffers=i.vertexBuffers,ge.fragment.module=i.fragment,ge.fragment.targets[0].format=e.format,ge.fragment.targets[0].blend=i.transparent?mp:void 0,ge.fragment.targets[0].writeMask=GPUColorWrite.ALL,ge.primitive.cullMode=r,ge.primitive.frontFace=o,ge.depthStencil.depthWriteEnabled=i.depthWrite,ge.depthStencil.depthCompare=n,ge)),ge.layout=null,ge.vertex.module=null,ge.vertex.buffers=null,ge.fragment.module=null,i.pipelineCache.set(a,s)),s}function pp(e,t,r){let o=e.uniformData,i=(t._nativeSource||t._rasterSource)?.options.cutout;if(i&&(!Number.isFinite(i.x)||!Number.isFinite(i.y)||!Number.isFinite(i.radius)||i.radius<0))throw new Error("cutout requires finite x, y and a non-negative radius in CSS pixels");o[r+36]=(i?.x??0)*e.dpr,o[r+37]=(i?.y??0)*e.dpr,o[r+38]=(i?.radius??0)*e.dpr,o[r+39]=i?.outside?1:0}function cp(e,t){let r=t.program.uniforms,o=e.uniformSlot++*256,i=e.uniformData,n=o/4;return i.set(t.worldMatrix,n),i.set(r.baseColor.value,n+16),i[n+19]=1,i[n+20]=r.metallic.value,i[n+21]=r.roughness.value,i[n+22]=r.opacity.value*(t.ground?t._appearance??1:1),i[n+23]=r.alphaCutoff.value,i.set(r.emissive.value,n+24),i[n+27]=r.occlusionStrength.value,i[n+28]=t.terrain?.[0]??0,i[n+29]=t.terrain?.[1]??0,i[n+30]=t.terrain?.[2]??0,i[n+31]=t.terrain?.[3]??0,i[n+32]=t.highlight?.[0]??0,i[n+33]=t.highlight?.[1]??0,i[n+34]=t.program.nightSparkle?i[55]:0,i[n+35]=t.ground?1:t._appearance??1,pp(e,t,n),o}var Br={source:null,flipY:null};var Kr={texture:null};var Jr=[null,null];function lp(e,t){t.uploaded!==t.image&&(e.queue.copyExternalImageToTexture((Br.source=t.image,Br.flipY=!!t.flipY,Br),(Kr.texture=t.texture,Kr),(Jr[0]=t.image.width,Jr[1]=t.image.height,Jr)),Br.source=null,Kr.texture=null,t.uploaded=t.image)}var Qr={layout:null,entries:null};var up=[];var ln={binding:0,resource:{buffer:null,size:160}};var un={binding:1,resource:{buffer:null,size:240}};var dn={binding:2,resource:null};var mi=[{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null}];var fi=[{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null}];function dp(e,t,r){let{program:o}=t,i=up;i.length=0,ln.resource.buffer=e.uniformBuffer,un.resource.buffer=e.uniformBuffer,i.push(ln,un),o.terrain&&(dn.resource=o.terrain.texture.createView(),i.push(dn)),t.boundBuffer=e.uniformBuffer;let n=t.boundTextures||=[];n.length=r.length;let a,s,m;for(a=0;a<r.length;a++)s=o.bindings[a],m=r[a],mi[a].binding=s.texture,mi[a].resource=m.texture.createView(),fi[a].binding=s.sampler,fi[a].resource=m.sampler,i.push(mi[a],fi[a]),n[a]||=[],n[a][0]=m.texture,n[a][1]=m.sampler;for(t.bindGroup=e.device.createBindGroup((Qr.layout=o.bindGroupLayout,Qr.entries=i,Qr)),Qr.layout=null,Qr.entries=null,ln.resource.buffer=null,un.resource.buffer=null,dn.resource=null,a=0;a<r.length;a++)mi[a].resource=null,fi[a].resource=null;i.length=0}function hp(e,t){let{program:r}=t,{device:o}=e,i=t._textures||=[];i.length=0;let n,a,s;for(n of r.bindings){if(a=r.uniforms[n.name]?.value,!a)throw new Error(`Missing Layer3D texture: ${n.name}`);lp(o,a),i.push(a)}let m=!t.bindGroup||t.boundBuffer!==e.uniformBuffer||i.length!==t.boundTextures.length;for(s=0;!m&&s<i.length;s++)(i[s].texture!==t.boundTextures[s][0]||i[s].sampler!==t.boundTextures[s][1])&&(m=!0);m&&dp(e,t,i)}function hn(e,t,r,o,i){let{geometry:n}=t,a=w.get(e),{device:s}=a,m=fp(a,t,o,i),f=cp(a,t);hp(a,t),r.setPipeline(m),r.setBindGroup(0,t.bindGroup,(Ks[0]=f,Ks)),r.setVertexBuffer(0,n.attributes.position.buffer),r.setVertexBuffer(1,n.attributes.normal.buffer),n.attributes.color&&r.setVertexBuffer(2,n.attributes.color.buffer),n.attributes.uv&&r.setVertexBuffer(3,n.attributes.uv.buffer);let p=n.attributes.instanceOffset;p&&r.setVertexBuffer(4,p.buffer);let c,l;for(c in n.attributes)l=n.attributes[c],l.needsUpdate&&(s.queue.writeBuffer(l.buffer,0,l.data),l.needsUpdate=!1,(c==="position"||c==="instanceOffset")&&(n.bounds=null));let u=n.attributes.index;u?(r.setIndexBuffer(u.buffer,u.indexFormat),r.drawIndexed(n.drawRange.count,p?.count??1,n.drawRange.start,0,0)):r.draw(n.drawRange.count,p?.count??1,n.drawRange.start,0)}function gp(e,t,r){let o=w.get(e),i=t.beginRenderPass((Xr.colorAttachments[0].view=o.context.getCurrentTexture().createView(),Xr.depthStencilAttachment.view=o.depthTexture.createView(),Xr));Xr.colorAttachments[0].view=null,Xr.depthStencilAttachment.view=null,i.setViewport(0,0,o.canvas.width,o.canvas.height,0,1),i.setBindGroup(1,o.sunlight.bindGroup);let n,a,s,m,f,p;for(n of r){if(a=n.worldMatrix,n.texture&&(n.program.uniforms.baseTexture.value=n.texture,n.program.uniforms.opacity.value=n.opacity),s=n.program.uniforms,s.roofTexture&&(s.roofTexture.value=Y.get(e)?.texture||o.roofFallbackTexture),!n._frontFace||n._frontFaceWorldVersion!==n._worldMatrixVersion||n._worldMatrixVersion===void 0){if(m=a[0]*(a[5]*a[10]-a[6]*a[9])-a[4]*(a[1]*a[10]-a[2]*a[9])+a[8]*(a[1]*a[6]-a[2]*a[5]),!Number.isFinite(m)||m===0)throw new Error("Singular 3D transform");n._frontFace=m<0?"cw":"ccw",n._frontFaceWorldVersion=n._worldMatrixVersion}f=n._frontFace,p=n.program,p.transparent&&p._layerMaterial.doubleSided&&!n._nativeSource?(hn(e,n,i,"front",f),hn(e,n,i,"back",f)):hn(e,n,i,p.cullMode,f)}i.end()}var yp=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0]);var xp=new Float32Array(20);function vp(e,t){let r=e.meshes.get(t),o=t.geometry.drawRange;if(!(r&&r.world===t._worldMatrixVersion&&r.geometry===t.geometry&&r.start===o.start&&r.count===o.count&&r.appearance===(t._appearance??1)))return!1;let i;for(i of Object.values(t.geometry.attributes))if(i.needsUpdate)return!1;return!0}function wp(e,t,r){let o=e.cache,i=e.enabled&&o?.meshes.size===t.length,n,a;if(i){for(n=0;n<r.direction.length;n++)if(r.direction[n]!==o.direction[n]){i=!1;break}}if(i){for(a of t)if(!vp(o,a)){i=!1;break}}return i}var Mp={min:[0,0,0],max:[0,0,0]};var bp={position:[0,0,0],target:[0,0,0],up:[0,0,-1],x:[0,0,0],y:[0,0,0],z:[0,0,0],fov:45,aspect:1,near:1,far:500,viewMatrix:[],projectionMatrix:[],projectionViewMatrix:[]};var Lp=[0,0,0];var Bp=[0,0,0];function Tp(e,t,r){let o=e._shadowBounds;if(!o||o.version!==e._worldMatrixVersion||o.bounds!==t){o||=e._shadowBounds={min:[1/0,1/0,1/0],max:[-1/0,-1/0,-1/0]},o.version=e._worldMatrixVersion,o.bounds=t,o.min.fill(1/0),o.max.fill(-1/0);let i,n,a,s,m,f,p;for(i=0;i<8;i++)for(n=i&1?t.max[0]:t.min[0],a=i&2?t.max[1]:t.min[1],s=i&4?t.max[2]:t.min[2],m=r[3]*n+r[7]*a+r[11]*s+r[15],f=0;f<3;f++)p=(r[f]*n+r[f+4]*a+r[f+8]*s+r[f+12])/m,o.min[f]=Math.min(o.min[f],p),o.max[f]=Math.max(o.max[f],p)}return o}function Pp(e,t={min:[1/0,1/0,1/0],max:[-1/0,-1/0,-1/0]}){let{min:r,max:o}=t;r.fill(1/0),o.fill(-1/0);let i,n,a,s,m;for(i of e)for((!i.geometry.bounds||i.geometry.attributes.position.needsUpdate)&&Be(i.geometry),n=i.geometry.bounds,a=i.worldMatrix,s=Tp(i,n,a),m=0;m<3;m++)r[m]=Math.min(r[m],s.min[m]),o[m]=Math.max(o[m],s.max[m]);return r[1]=Math.min(0,r[1]),t}function Cp(e,t){let{min:r,max:o}=Pp(e,Mp),i=bp;i.viewTransform||=new DOMMatrix,i.projectionTransform||=new DOMMatrix,i.projectionViewTransform||=new DOMMatrix;let n=Lp,a=Bp,s,m,f,p,c,l,u=Math.max(100,Math.hypot(o[0]-r[0],o[1]-r[1],o[2]-r[2]));for(s=0;s<3;s++)i.target[s]=(r[s]+o[s])/2,i.position[s]=i.target[s]+t.direction[s]*u*2;i.far=u*5,Hr(i);let d=i.viewMatrix;for(n.fill(1/0),a.fill(-1/0),s=0;s<8;s++)for(f=s&1?o[0]:r[0],p=s&2?o[1]:r[1],c=s&4?o[2]:r[2],m=0;m<3;m++)l=d[m]*f+d[m+4]*p+d[m+8]*c+d[m+12],n[m]=Math.min(n[m],l-20),a[m]=Math.max(a[m],l+20);let y=2/(a[0]-n[0]),g=2/(a[1]-n[1]),x=-1/(a[2]-n[2]),v=new Float32Array(16);for(s=0;s<16;s+=4)v[s]=d[s]*y,v[s+1]=d[s+1]*g,v[s+2]=d[s+2]*x,v[s+3]=d[s+3];return v[12]-=(a[0]+n[0])/(a[0]-n[0]),v[13]-=(a[1]+n[1])/(a[1]-n[1]),v[14]+=a[2]/(a[2]-n[2]),v}var Js={entries:[{binding:0,visibility:null,buffer:{type:"uniform",hasDynamicOffset:!0}}]};var Qs={entries:[{binding:0,visibility:null,buffer:{type:"uniform"}}]};var eo={layout:null,entries:[{binding:0,resource:{buffer:null}}]};var gn={code:null};var lt={layout:null,vertex:{module:null,entryPoint:"main",buffers:null},fragment:{module:null,entryPoint:"fragmentMain",targets:[]},primitive:{topology:"triangle-list",cullMode:"none"},depthStencil:{format:"depth32float",depthWriteEnabled:!0,depthCompare:"less",depthBias:2,depthBiasSlopeScale:2}};var to={bindGroupLayouts:[null,null]};var ro=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:0,offset:0,format:"float32x3"})])});var yn=Object.freeze({arrayStride:16,stepMode:"instance",attributes:Object.freeze([Object.freeze({shaderLocation:4,offset:0,format:"float32x4"})])});var Sp=[ro,yn];var Ep=[ro];function em(e,t,r=!1){let o=r?"instancePipeline":"pipeline";if(!t[o]){t.meshLayout||(t.meshLayout=e.createBindGroupLayout((Js.entries[0].visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,Js)),t.depthLayout=e.createBindGroupLayout((Qs.entries[0].visibility=GPUShaderStage.VERTEX,Qs)),t.depthBindGroup=e.createBindGroup((eo.layout=t.depthLayout,eo.entries[0].resource.buffer=t.buffer,eo)),eo.layout=null,eo.entries[0].resource.buffer=null);let i=e.createShaderModule((gn.code=` struct Mesh{world:mat4x4<f32>,padding:array<vec4<f32>,4>,highlight:vec4<f32>};@group(0)@binding(0)var<uniform> mesh:Mesh;@group(1)@binding(0)var<uniform> matrix:mat4x4<f32>;@vertex fn main(@location(0)position:vec3<f32>${r?", @location(4) offset: vec4<f32>":""})->@builtin(position)vec4<f32>{return matrix * mesh.world * vec4<f32>(position${r?" + offset.xyz":""},1.0);}@fragment fn fragmentMain(@builtin(position)position:vec4<f32>){let noise = fract(52.9829189 * fract(dot(floor(position.xy),vec2<f32>(0.06711056,0.00583715))));if(mesh.highlight.w < 1.0 && noise >= mesh.highlight.w){discard;}}`,gn));gn.code=null;let n=r?Sp:Ep;t[o]=e.createRenderPipeline((lt.layout=e.createPipelineLayout((to.bindGroupLayouts[0]=t.meshLayout,to.bindGroupLayouts[1]=t.depthLayout,to)),lt.vertex.module=i,lt.vertex.buffers=n,lt.fragment.module=i,lt)),to.bindGroupLayouts[0]=null,to.bindGroupLayouts[1]=null,lt.layout=null,lt.vertex.module=null,lt.vertex.buffers=null,lt.fragment.module=null}}var xn={colorAttachments:[],depthStencilAttachment:{view:null,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}};var oo={layout:null,entries:[{binding:0,resource:{buffer:null,size:144}}]};var tm=[null];function kp(e,t,r){let o=w.get(e),i=o.device,n=o.sunlight,a=t.beginRenderPass((xn.depthStencilAttachment.view=n.texture.createView(),xn));xn.depthStencilAttachment.view=null;let s=n.pipeline;a.setPipeline(s),a.setBindGroup(1,n.depthBindGroup);let m,f,p,c,l,u,d;for(m of r){f=m.geometry.attributes.instanceOffset,p=f?n.instancePipeline:n.pipeline,p!==s&&(s=p,a.setPipeline(s)),c=o.uniformSlot++*256,o.uniformData.set(m.worldMatrix,c/4),o.uniformData[c/4+35]=m._appearance??1,m._shadowBuffer!==o.uniformBuffer&&(m._shadowBuffer=o.uniformBuffer,m._shadowBindGroup=i.createBindGroup((oo.layout=n.meshLayout,oo.entries[0].resource.buffer=o.uniformBuffer,oo)),oo.layout=null,oo.entries[0].resource.buffer=null);for(l of Object.values(m.geometry.attributes))l.needsUpdate&&(i.queue.writeBuffer(l.buffer,0,l.data),l.needsUpdate=!1);a.setBindGroup(0,m._shadowBindGroup,(tm[0]=c,tm)),a.setVertexBuffer(0,m.geometry.attributes.position.buffer),f&&a.setVertexBuffer(1,f.buffer),u=m.geometry.attributes.index,d=m.geometry.drawRange,u?(a.setIndexBuffer(u.buffer,u.indexFormat),a.drawIndexed(d.count,f?.count??1,d.start,0,0)):a.draw(d.count,f?.count??1,d.start,0)}a.end()}var pi={size:[null,null],format:"depth32float",usage:null};function vn(e,t){let r=w.get(e).device,o=w.get(e).sunlight;o.size!==t&&(o.texture&&F(e,o.texture),o.size=t,o.texture=r.createTexture((pi.size[0]=t,pi.size[1]=t,pi.usage=GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC,pi)),cn(e))}function _p(e,t,r,o){let i=w.get(e),n=i.device,a=i.sunlight;if(!r.length||!o||o.altitude<3){if(!a.enabled)return;n.queue.writeBuffer(a.buffer,0,yp),a.enabled=!1,a.cache=null;return}if(wp(a,r,o))return;let s=xp;a.enabled=!0,vn(e,Math.min(2048,n.limits.maxTextureDimension2D)),s.set(Cp(r,o)),s[16]=1,n.queue.writeBuffer(a.buffer,0,s),em(n,a);let m;for(m of r)if(m.geometry.attributes.instanceOffset){em(n,a,!0);break}kp(e,t,r);let f=new Map,p;for(p of r)f.set(p,{world:p._worldMatrixVersion,geometry:p.geometry,start:p.geometry.drawRange.start,count:p.geometry.drawRange.count,appearance:p._appearance??1});a.cache={direction:[...o.direction],meshes:f}}function wn(e){let t=et.get(e);kt.delete(e),et.set(e,null),!kt.size&&t!=null&&cancelAnimationFrame(t)}var zt=new WeakMap;var ci=new WeakMap;var li=new WeakMap;var me=new WeakMap;var Mn=new WeakMap;function Z(e,t){e.parent&&e.parent.children.splice(e.parent.children.indexOf(e),1),e.parent=t,t&&t.children.push(e)}function io(e,t){Mn.get(e)?.abort();let r=A.get(e).get(t);r&&(Z(r,null),_(e),r.texture!==t.texture&&F(e,r.texture.texture),A.get(e).delete(t))}function no(e,t){let r=`${t.coords.z}/${t.coords.x}/${t.coords.y}`;A.get(e).get(r)===t&&(A.get(e).delete(r),Te.set(e,(Te.get(e)||0)+1),t.request.abort(),me.get(e)&&io(me.get(e),t),t.mesh&&Z(t.mesh,null),t.texture&&F(e,t.texture.texture),t.image?.close(),e.fire("tileunload",{tile:t,coords:t.coords}),_(e))}function ao(e){let t=Ht.get(e),r=performance.now();if(ci.get(e)===Te.get(e)&&li.get(e)===t&&r<zt.get(e))return Number.isFinite(zt.get(e));ci.set(e,Te.get(e)),li.set(e,t),zt.set(e,1/0);let o=[],i,n,a,s,m,f;for(i of t)n=A.get(e).get(i),n?.done&&r-n.loadedAt<250&&zt.set(e,Math.min(zt.get(e),n.loadedAt+250)),(!n?.done||r-n.loadedAt<250)&&(a=i.split("/"),o.push({z:Number(a[0]),x:Number(a[1]),y:Number(a[2])}));for([i,n]of A.get(e))if(!t.has(i)){s=!1;for(m of o)if(f=Math.min(m.z,n.coords.z),Math.floor(m.x/2**(m.z-f))===Math.floor(n.coords.x/2**(n.coords.z-f))&&Math.floor(m.y/2**(m.z-f))===Math.floor(n.coords.y/2**(n.coords.z-f))){s=!0;break}s||no(e,n)}return Number.isFinite(zt.get(e))}b();function so(e){return xe.get(e.source)===e&&e.map.hasLayer(e.source)}b();var bn=Object.freeze([1,1,1]);var Tr=new WeakMap;b();function Ln(e,t,r,o){let{source:i,marker:n,paneOrder:a,order:s}=e;t.program.uniforms.baseColor.value=r,t.program.uniforms.opacity.value=o,i instanceof h.GridLayer&&(t.opacity=o);let m=n?i._zIndex+(Tr.get(i)||0):i.options.zIndex;t.renderOrder=a*1e6+(m||0)*1e3+s,t._nativeSource=i,t._nativeUsed=!0}var Ip=Object.freeze([0,2,1,1,2,3]);var rm=Object.freeze([0,0,1,0,0,1,1,1]);var zp=Object.freeze({minFilter:"linear",magFilter:"linear"});function _e(e,t){if(!t)return;Z(t,null),_(e);let r;for(r of Object.values(t.geometry.attributes))r.buffer.destroy()}async function Op(e,t,r,o,i,n,a){let s;try{if(s=await createImageBitmap(o),!so(e)||e.textures.get(t)!==r)return;i.queue.copyExternalImageToTexture({source:s},{texture:r.texture},[n,a]),r.uploaded=o,r.pending=!1,qe(e)}catch(m){e.failed=!0,e.source.fire("error",{error:m})}finally{s?.close()}}function Dp(e,t,r,o,i,n,a){try{i.queue.copyExternalImageToTexture({source:o},{texture:r.texture},[n,a])}catch(s){throw r.texture.destroy(),e.textures.delete(t),s}r.uploaded=o}function Gp(e,t,r){if(!(r instanceof HTMLImageElement)&&!(r instanceof HTMLCanvasElement))throw new Error("WebGPU native raster layers require image or canvas tiles");let{backend:o,textures:i,meshes:n}=e,a=i.get(t),s=r.currentSrc||r.src;if(!a||a.image!==r||a.url!==s){if(a){let c=n.get(t);c&&_e(o,c),n.delete(t),F(o,a.texture),i.delete(t)}let m=r.naturalWidth||r.width,f=r.naturalHeight||r.height;if(!m||!f)return;let{device:p}=w.get(o);a={device:p,image:r,url:s,format:"rgba8unorm",uploaded:null,texture:p.createTexture({size:[m,f],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:p.createSampler(zp)},i.set(t,a),r instanceof HTMLCanvasElement?(a.pending=!0,Op(e,t,a,r,p,m,f)):Dp(e,t,a,r,p,m,f)}return a.used=!0,a.uploaded===r?a:void 0}b();var mo=Object.freeze({});var Bn={size:null,usage:null};var ut={value:0};function Pe(){return{position:[0,0,0],rotation:[0,0,0],scale:[1,1,1],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],highlightRange:[0,0],visible:!0}}var Tn={code:null};var Pn={code:null};var fo={bindGroupLayouts:[null,null]};var Rp=" fn demSample(pixel:vec2<i32>)-> f32{if(any(pixel < vec2<i32>(0))|| any(pixel >= vec2<i32>(textureDimensions(dem)))){return -1e9;}return textureLoad(dem,pixel,0).r;}fn elevation(pixel:vec2<f32>,base:f32)-> f32{let p = pixel - vec2<f32>(0.5);let f = fract(p);let i = vec2<i32>(floor(p));let v00 = demSample(i);let v10 = demSample(i + vec2<i32>(1,0));let v01 = demSample(i + vec2<i32>(0,1));let v11 = demSample(i + vec2<i32>(1,1));if(v00 > -1000.0 && v10 > -1000.0 && v01 > -1000.0 && v11 > -1000.0){return mix(mix(v00,v10,f.x),mix(v01,v11,f.x),f.y);}if(v00 > -1000.0){return v00;}if(v10 > -1000.0){return v10;}if(v01 > -1000.0){return v01;}if(v11 > -1000.0){return v11;}return base;}";var Up=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:1,offset:0,format:"float32x3"})])});var Fp=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:2,offset:0,format:"float32x3"})])});var Np=Object.freeze({arrayStride:8,attributes:Object.freeze([Object.freeze({shaderLocation:3,offset:0,format:"float32x2"})])});var Cn={entries:null};var jp=[];var om={binding:0,visibility:null,buffer:{type:"uniform",hasDynamicOffset:!0}};var im={binding:1,visibility:null,buffer:{type:"uniform"}};var nm={binding:2,visibility:null,texture:{sampleType:"unfilterable-float",viewDimension:"2d"}};var Wp=[{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}}];var Zp=[{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}}];function $p(e,t){let r=jp;r.length=0,om.visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,im.visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,r.push(om,im),t.hasTerrain&&(nm.visibility=GPUShaderStage.VERTEX,r.push(nm));let o,i,n=0;for(o of t.bindings)i=Wp[n],i.binding=o.texture,i.visibility=GPUShaderStage.FRAGMENT,r.push(i),i=Zp[n++],i.binding=o.sampler,i.visibility=GPUShaderStage.FRAGMENT,r.push(i);let a=e.createBindGroupLayout((Cn.entries=r,Cn));return Cn.entries=null,a}function Vp(e){let t={baseColor:{value:e.color||[1,1,1]},metallic:{value:e.metallic??0},roughness:{value:e.roughness??.85},opacity:{value:e.opacity??1},alphaCutoff:{value:e.alphaCutoff??.5},occlusionStrength:{value:e.occlusionStrength??1},emissive:{value:e.emissive||[0,0,0]}};return e.baseTexture&&(t.baseTexture={value:e.baseTexture}),e.metalTexture&&(t.metalTexture={value:e.metalTexture}),e.emissiveTexture&&(t.emissiveTexture={value:e.emissiveTexture}),e.occlusionTexture&&(t.occlusionTexture={value:e.occlusionTexture}),(e.roofTexture||e.wallTexture)&&(t.roofTexture={value:null}),t}function po(e,t,r){if(!r)return"";let o=3+e.length*2;return e.push({name:t,texture:o,sampler:o+1}),`@group(0)@binding(${o})var ${t}:texture_2d<f32>;@group(0)@binding(${o+1})var ${t}Sampler:sampler;`}function qp(e){let t,r;for(t of["roofTexture","wallTexture"])if(r=e[t],r!==void 0&&typeof r!="boolean"&&(!Number.isFinite(r)||r<0||r>1))throw new Error(`${t} must be a boolean or a finite number between 0 and 1`)}function Hp(e){let t=Number(e.roofTexture??0);return` output.roofUv =(frame.roofMatrix * world).xz;output.roof = select(0.0,select(${Number(e.wallTexture??0).toFixed(8)},${t.toFixed(8)},input.normal.y >= 0.5),((${!!e.roofTexture} && input.normal.y >= 0.5)||(${!!e.wallTexture} && abs(input.normal.y)< 0.5))&& !highlighted);`}function Yp(e,t,r,o,i,n){let a=e.instanced?" + input.instanceOffset.xyz":"";return` struct Mesh{worldMatrix:mat4x4<f32>,baseColor:vec4<f32>,material:vec4<f32>,emissive:vec4<f32>,terrain:vec4<f32>,highlight:vec4<f32>,cutout:vec4<f32>,};struct Frame{viewMatrix:mat4x4<f32>,projectionMatrix:mat4x4<f32>,roofMatrix:mat4x4<f32>,lightDirection:vec4<f32>,skyDirection:vec4<f32>,atmosphereTint:vec4<f32>,};@group(0)@binding(0)var<uniform> u:Mesh;@group(0)@binding(1)var<uniform> frame:Frame;struct Solar{matrix:mat4x4<f32>,params:vec4<f32>};@group(1)@binding(0)var<uniform> solar:Solar;${o?`@group(0)@binding(2)var dem:texture_2d<f32>;${r}`:""} struct VertexInput{@location(0)position:vec3<f32>,@location(1)normal:vec3<f32>,${e.instanced?"@location(4) instanceOffset: vec4<f32>,":""} ${e.vertexColors?"@location(2) color: vec3<f32>,":""} ${i?"@location(3) uv: vec2<f32>,":""}};struct VertexOutput{@builtin(position)position:vec4<f32>,@location(0)color:vec3<f32>,@location(1)normal:vec3<f32>,@location(2)viewPosition:vec3<f32>,@location(6)shadowPosition:vec4<f32>,@location(7)worldPosition:vec3<f32>,${t?"@location(8) localPosition: vec3<f32>,":""} ${i?"@location(3) uv: vec2<f32>,":""} ${n?"@location(4) roofUv: vec2<f32>, @location(5) roof: f32,":""}};@vertex fn vertexMain(input:VertexInput,@builtin(vertex_index)vertexIndex:u32)-> VertexOutput{var output:VertexOutput;var position = input.position${a};${o?"position.y = elevation(u.terrain.xy + input.uv * u.terrain.z, u.terrain.w) - u.terrain.w;":""} let featureVertex = f32(vertexIndex)${e.instanced?" + input.instanceOffset.w":""};let highlighted = featureVertex >= u.highlight.x && featureVertex < u.highlight.y;output.color = ${e.vertexColors?"select(input.color, vec3<f32>(72.0 / 255.0, 217.0 / 255.0, 1.0), highlighted)":"u.baseColor.rgb"};let m = mat3x3<f32>(u.worldMatrix[0].xyz,u.worldMatrix[1].xyz,u.worldMatrix[2].xyz);let normal =(cross(m[1],m[2])* input.normal.x + cross(m[2],m[0])* input.normal.y + cross(m[0],m[1])* input.normal.z)/ determinant(m);output.normal =(frame.viewMatrix * vec4<f32>(normal,0.0)).xyz;let world = u.worldMatrix * vec4<f32>(position,1.0);output.shadowPosition = solar.matrix * world;output.worldPosition = world.xyz / world.w;${t?`output.localPosition = input.position${a};`:""} let viewPosition = frame.viewMatrix * world;output.viewPosition = viewPosition.xyz;${i?"output.uv = input.uv;":""} ${n?Hp(e):""} output.position = frame.projectionMatrix * viewPosition;return output;}`}function Xp(e,t,r){return` var normal = normalize(input.normal)* select(-1.0,1.0,frontFacing);let texel = ${t?"textureSample(baseTexture, baseTextureSampler, input.uv)":"vec4<f32>(1.0)"};let alpha = u.material.z * texel.a;${e.alphaMode==="MASK"?"if (alpha < u.material.w) { discard; }":""} ${e.alphaMode==="BLEND"?"if (alpha < 0.01) { discard; }":""} var base = ${e.vertexColors?"toLinear(min(input.color, vec3<f32>(1.0)))":"input.color"} * ${e.baseTexture?.srgb?"texel.rgb":"toLinear(texel.rgb)"};${r?" if(input.roof > 0.0 && all(input.roofUv >= vec2<f32>(0.0))&& all(input.roofUv <= vec2<f32>(1.0))){let roof = textureSampleLevel(roofTexture,roofTextureSampler,input.roofUv,0.0);base = mix(base,toLinear(roof.rgb),roof.a * input.roof);}":""}`}function Kp(e,t,r,o,i,n,a){return e.unlit?` let rasterTexel = ${r?"textureSample(baseTexture, baseTextureSampler, input.uv)":"vec4<f32>(input.color, 1.0)"};return vec4<f32>(toSRGB(toLinear(rasterTexel.rgb)*(frame.atmosphereTint.rgb *(0.55 + 0.45 * sunlight)+ artificial)),${e.alphaMode==="BLEND"?"u.material.z * rasterTexel.a":"1.0"});`:`${Xp(e,r,a)} let mr = ${o?"textureSample(metalTexture, metalTextureSampler, input.uv)":"vec4<f32>(1.0)"};let metal = clamp(u.material.x * mr.b,0.0,1.0);let rough = clamp(u.material.y * mr.g,0.08,1.0);let view = normalize(-input.viewPosition);let halfVector = normalize(view + frame.lightDirection.xyz);let nl = max(dot(normal,frame.lightDirection.xyz),0.0)* frame.lightDirection.w * sunlight;let nv = max(dot(normal,view),0.001);let nh = max(dot(normal,halfVector),0.0);let vh = max(dot(view,halfVector),0.0);let a2 = pow(rough,4.0);let d = a2 / max(PI * pow(nh * nh *(a2 - 1.0)+ 1.0,2.0),0.0001);let gv = nl * sqrt(nv * nv *(1.0 - a2)+ a2);let gl = nv * sqrt(nl * nl *(1.0 - a2)+ a2);let visibility = 0.5 / max(gv + gl,0.0001);let f0 = mix(vec3<f32>(0.04),base,metal);let fresnel = f0 +(1.0 - f0)* pow(1.0 - vh,5.0);let specular = d * visibility * fresnel;let diffuse =(1.0 - metal)* base / PI;let sky = dot(normal,frame.skyDirection.xyz)* 0.5 + 0.5;let ambient = mix(toLinear(vec3<f32>(0.455,0.412,0.322)),vec3<f32>(1.0),sky)*(2.0 / PI);let ao = ${n?"mix(1.0, textureSample(occlusionTexture, occlusionTextureSampler, input.uv).r, u.emissive.w)":"1.0"};${t?" let lattice =(fract(input.localPosition / 2.5)- 0.5)* 2.5;let pointGlow =(1.0 - smoothstep(0.16,0.42,length(lattice)))* u.highlight.z;":""} let glow = ${t?"vec3<f32>(3.0, 2.6, 1.8) * pointGlow +":""}${e.vertexColors?" max(input.color - vec3<f32>(1.0), vec3<f32>(0.0)) * (0.3 + 5.0 * frame.skyDirection.w) +":""} u.emissive.rgb * ${i?e.emissiveTexture.srgb?"textureSample(emissiveTexture, emissiveTextureSampler, input.uv).rgb":"toLinear(textureSample(emissiveTexture, emissiveTextureSampler, input.uv).rgb)":"vec3<f32>(1.0)"};var color = ambient * base *(1.0 - metal)* ao +(diffuse + specular)* nl * toLinear(vec3<f32>(1.0,0.937,0.835))* 3.0 + glow;${e.vertexColors?"color = base * (ambient + toLinear(vec3<f32>(1.0, 0.937, 0.835)) * (3.0 / PI) * nl) + glow;":""} color =(color - glow)* frame.atmosphereTint.rgb + base * artificial *(1.0 - metal * 0.5)+ glow;appearance(input.position.xy);return vec4<f32>(toSRGB(color),${e.alphaMode==="BLEND"?"alpha":"1.0"});`}function Jp(e=mo,t=!1,r=""){let o=!!e.baseTexture,i=!!e.metalTexture,n=!!e.emissiveTexture,a=!!e.occlusionTexture,s=!!(e.roofTexture||e.wallTexture);qp(e);let m=!!e.terrain,f=o||i||n||a||e.nightLight,p=Yp(e,t,r,m,f,s),c=[],l=po(c,"baseTexture",o),u=po(c,"metalTexture",i),d=po(c,"emissiveTexture",n),y=po(c,"occlusionTexture",a),g=po(c,"roofTexture",s),x=` struct Mesh{worldMatrix:mat4x4<f32>,baseColor:vec4<f32>,material:vec4<f32>,emissive:vec4<f32>,terrain:vec4<f32>,highlight:vec4<f32>,cutout:vec4<f32>,};struct Frame{viewMatrix:mat4x4<f32>,projectionMatrix:mat4x4<f32>,roofMatrix:mat4x4<f32>,lightDirection:vec4<f32>,skyDirection:vec4<f32>,atmosphereTint:vec4<f32>,};struct Solar{matrix:mat4x4<f32>,params:vec4<f32>,};@group(0)@binding(0)var<uniform> u:Mesh;@group(0)@binding(1)var<uniform> frame:Frame;@group(1)@binding(0)var<uniform> solar:Solar;@group(1)@binding(1)var shadowTexture:texture_depth_2d;@group(1)@binding(2)var shadowSampler:sampler_comparison;@group(1)@binding(3)var<storage,read> lightGrid:array<vec4<f32>>;${l}${u}${d}${y}${g} struct FragmentInput{@builtin(position)position:vec4<f32>,@location(0)color:vec3<f32>,@location(1)normal:vec3<f32>,@location(2)viewPosition:vec3<f32>,@location(6)shadowPosition:vec4<f32>,@location(7)worldPosition:vec3<f32>,${t?"@location(8) localPosition: vec3<f32>,":""} ${f?"@location(3) uv: vec2<f32>,":""} ${s?"@location(4) roofUv: vec2<f32>, @location(5) roof: f32,":""}};const PI:f32 = 3.14159265;fn toLinear(c:vec3<f32>)-> vec3<f32>{return select(c / 12.92,pow((c + vec3<f32>(0.055))/ 1.055,vec3<f32>(2.4)),c >= vec3<f32>(0.04045));}fn toSRGB(c:vec3<f32>)-> vec3<f32>{return select(c * 12.92,1.055 * pow(max(c,vec3<f32>(0.0)),vec3<f32>(1.0 / 2.4))- vec3<f32>(0.055),c >= vec3<f32>(0.0031308));}fn sunVisibility(position:vec4<f32>)-> f32{let p = position.xyz / position.w;let uv = vec2<f32>(p.x * 0.5 + 0.5,0.5 - p.y * 0.5);if(solar.params.x < 0.5 || any(uv < vec2<f32>(0.0))|| any(uv > vec2<f32>(1.0))|| p.z < 0.0 || p.z > 1.0){return 1.0;}return textureSampleCompareLevel(shadowTexture,shadowSampler,uv,p.z - 0.0003);}fn gridLighting(position:vec3<f32>,normal:vec3<f32>,offset:u32)-> vec3<f32>{let grid = lightGrid[offset];if(grid.w < 1.0){return vec3<f32>(0.0);}let cell = vec2<i32>(floor((position.xz - grid.xy)/ grid.z));if(any(cell < vec2<i32>(0))|| cell.x >= i32(grid.w)|| cell.y >= i32(lightGrid[offset + 1u].x)){return vec3<f32>(0.0);}let header = lightGrid[offset + 2u + u32(cell.y)* u32(grid.w)+ u32(cell.x)];var light = vec3<f32>(0.0);for(var i = 0u;i < u32(header.y);i++){let source = lightGrid[offset + u32(header.x)+ i * 2u];let colour = lightGrid[offset + u32(header.x)+ i * 2u + 1u];let delta = source.xyz - position;let distance2 = max(dot(delta,delta),1.0);let falloff = max(0.0,1.0 - distance2 /(source.w * source.w));let lambert = max(0.0,dot(normal,delta / sqrt(distance2)));light += toLinear(colour.rgb)* colour.w * lambert * falloff * falloff / distance2;}return light;}fn localLighting(position:vec3<f32>,normal:vec3<f32>)-> vec3<f32>{if(frame.skyDirection.w <= 0.0){return vec3<f32>(0.0);}var light = gridLighting(position,normal,0u);let moving = u32(lightGrid[1].z);if(moving > 0u){light += gridLighting(position,normal,moving);}return light * frame.skyDirection.w;}fn appearance(position:vec2<f32>){let noise = fract(52.9829189 * fract(dot(floor(position),vec2<f32>(0.06711056,0.00583715))));if(u.highlight.w < 1.0 && noise >= u.highlight.w){discard;}}@fragment fn fragmentMain(input:FragmentInput,@builtin(front_facing)frontFacing:bool)->@location(0)vec4<f32>{let cutoutDistance = distance(input.position.xy,u.cutout.xy);if(select((cutoutDistance < u.cutout.z),(cutoutDistance >= u.cutout.z),u.cutout.w > 0.0)){discard;}${e.nightLight?" if(input.uv.x <= 2.0){let radial = max(0.0,1.0 - dot(input.uv,input.uv));let alpha = radial * radial * frame.skyDirection.w * 0.65;if(alpha < 0.005){discard;}appearance(input.position.xy);return vec4<f32>(input.color,alpha);}":""} let sunlight = sunVisibility(input.shadowPosition);let worldNormal = normalize(transpose(mat3x3<f32>(frame.viewMatrix[0].xyz,frame.viewMatrix[1].xyz,frame.viewMatrix[2].xyz))* normalize(input.normal))* select(-1.0,1.0,frontFacing);let artificial = localLighting(input.worldPosition,worldNormal);${Kp(e,t,o,i,n,a,s)}}`;return{vertex:p,fragment:x,bindings:c,textured:f,hasTerrain:m}}async function Qp(e,t){let r,o;try{let i=await Promise.all(t),n="",a=0;for(r of i)for(o of r.messages)o.type==="error"&&(n+=`${a++?`
|
|
2
|
-
`:""}${o.message}`);a&&e.fire("error",{error:new Error(`Unable to compile Layer3D WGSL: ${n}`)})}catch(i){e.fire("error",{error:i})}}function Ke(e,t=mo){let r=Jp(t,!!e.options.nightSparkle,t.terrain?Rp:""),o=w.get(e).device.createShaderModule((Tn.code=r.vertex,Tn));Tn.code=null;let i=w.get(e).device.createShaderModule((Pn.code=r.fragment,Pn));Pn.code=null,Qp(e,[o.getCompilationInfo(),i.getCompilationInfo()]);let n=[ro,Up,t.vertexColors?Fp:null,r.textured?Np:null];t.instanced&&n.push(yn);let a=$p(w.get(e).device,r),s=w.get(e).device.createPipelineLayout((fo.bindGroupLayouts[0]=a,fo.bindGroupLayouts[1]=w.get(e).sunlight.layout,fo));fo.bindGroupLayouts[0]=null,fo.bindGroupLayouts[1]=null;let m=Vp(t);return{device:w.get(e).device,vertex:o,fragment:i,bindings:r.bindings,vertexBuffers:n,bindGroupLayout:a,pipelineLayout:s,pipelineCache:new Map,cullMode:t.doubleSided?"none":"back",transparent:t.alphaMode==="BLEND",depthWrite:t.depthWrite??t.alphaMode!=="BLEND",depthTest:t.depthTest!==!1,terrain:t.terrain,nightLight:!!t.nightLight,nightSparkle:!!e.options.nightSparkle,uniforms:m,_layerMaterial:t}}function er(e,t,r=mo,o=0,i){let{device:n}=w.get(e),a={},s,m,f,p,c;for([s,m]of Object.entries(t))f=new Float32Array(m),p=s==="uv"?2:3,c=n.createBuffer((Bn.size=Math.max(4,f.byteLength),Bn.usage=GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST|o,Bn)),n.queue.writeBuffer(c,0,f),a[s]={size:p,data:f,count:f.length/p,buffer:c};let l={...Pe(),device:n,geometry:{device:n,attributes:a,drawRange:{start:0,count:a.position.count}},program:i||Ke(e,{vertexColors:!0,doubleSided:!0,...r}),id:ut.value++,renderOrder:0,extras:{}};return Z(l,L.get(e)),_(e),l}function Sn(e,t,r,o,i,n,a){let{backend:s,source:m,meshes:f}=e;if(!r.length)return;let p=f.get(t);if(!p||p.geometry.attributes.position.data.length!==r.length||p.program.uniforms.baseTexture?.value!==n){let c=[],l;for(l=0;l<r.length;l++)c.push(l%3===1?1:0);let u={position:r,normal:c};a&&(u.uv=a);let d={vertexColors:!1,color:o,opacity:i,unlit:!0,alphaMode:"BLEND"};n&&(d.baseTexture=n),p&&_e(s,p),p=er(s,u,d,0,m instanceof h.GridLayer?e.rasterProgram:void 0),m instanceof h.GridLayer&&(e.rasterProgram||=p.program,p.texture=n),f.set(t,p)}else{let c=p.geometry.attributes.position;c.data.set(r),c.needsUpdate=!0,p.geometry.bounds=null}return Ln(e,p,o,i),p}function co(e,t,r,o,i){let n=Gp(e,t,r);if(!n)return;let a=Ip,s=[],m=[],f;for(f of a)s.push(...o[f]),m.push(rm[f*2],rm[f*2+1]);return Sn(e,t,s,bn,i,n,m)}var D=new WeakMap;X();function lo(e,t){let{map:r,backend:o}=e,i=r.options.crs,n=i.project(D.get(o)),a=i.project(t),s=Math.cos(D.get(o).lat*C);return[(a.x-n.x)*s,0,-(a.y-n.y)*s]}function En(e,t){let r=[],o,i;for(o=0;o<4;o++)i=o===0?t.getNorthWest():o===1?t.getNorthEast():o===2?t.getSouthWest():t.getSouthEast(),r.push(lo(e,i));return r}function tc(e){let{source:t,textures:r,meshes:o}=e,i,n,a,s,m,f,p;for(i in t._tiles)Object.hasOwn(t._tiles,i)&&(n=t._tiles[i],!(!n.loaded||n.el instanceof HTMLImageElement&&!n.el.naturalWidth)&&(a=(t.options.opacity??1)*(n._gpuOpacity??1),s=r.get(i),m=o.get(i),m&&s?.image===n.el&&s.url===(n.el.currentSrc||n.el.src)?(s.used=!0,Ln(e,m,bn,a)):([f,p]=t._tileCoordsToNwSe(n.coords),m=co(e,i,n.el,En(e,new h.LatLngBounds(f,p)),a)),m&&(m.renderOrder+=n.coords.z/100)))}function rc(e){let{source:t}=e;t._image?.complete&&t._image.naturalWidth&&co(e,"image",t._image,En(e,t.getBounds()),t.options.opacity??1)}var oc=Object.freeze(["m11","m12","m13","m14","m21","m22","m23","m24","m31","m32","m33","m34","m41","m42","m43","m44"]);b();X();W();function kn(e,t,r){let o=e.options.rotation+(e.options.rotateWithView?S(e._map)*C:0);e.options.keepUpright&&Math.cos(o)<0&&(o+=Math.PI);let i=e.options.scale;return new h.Point((t*Math.cos(o)-r*Math.sin(o))*i,(t*Math.sin(o)+r*Math.cos(o))*i)}function ui(e,t,r,o,i,n){return e.x=t.m11*r+t.m21*o+t.m31*i+t.m41*n,e.y=t.m12*r+t.m22*o+t.m32*i+t.m42*n,e.z=t.m13*r+t.m23*o+t.m33*i+t.m43*n,e.w=t.m14*r+t.m24*o+t.m34*i+t.m44*n,e}function ic(e,t,r){let o=e.source.options.icon.options,i=o[t==="shadow"?"shadowSize":"iconSize"],n=e.markerImageBounds||=[0,0,0,0];n[0]=i?i.x??i[0]:r.naturalWidth,n[1]=i?i.y??i[1]:r.naturalHeight;let a=t==="shadow"&&o.shadowAnchor||o.iconAnchor;return n[2]=a?a.x??a[0]:Math.floor(n[0]/2),n[3]=a?a.y??a[1]:Math.floor(n[1]/2),n}function nc(e,t,r){let{source:o,map:i,backend:n}=e,a=lo(e,o.getLatLng()),s=i.getSize(),m=e.markerMatrices||={root:new DOMMatrix,camera:new DOMMatrix,point:{x:0,y:0,z:0,w:1}},f=m.root,p=m.camera,c=m.point,l=L.get(n).worldMatrix,u=Q.get(n).projectionViewMatrix,d,y;for(d=0;d<16;d++)y=oc[d],f[y]=l[d],p[y]=u[d];ui(c,f,a[0],a[1],a[2],1),ui(c,p,c.x,c.y,c.z,c.w);let g=c.x,x=c.y,v=c.z,P=c.w;p.invertSelf(),f.invertSelf();let[B,T,O,K]=ic(e,t,r),G=(g/P+1)*s.x/2,N=(1-x/P)*s.y/2,J=G-O,pe=N-K,ye=[],Qe,Le,ft,Ge,ri;for(d=0;d<4;d++)Qe=J+(d%2?B:0),Le=pe+(d<2?0:T),ft=kn(o,Qe-G,Le-N),Ge=G+ft.x,ri=N+ft.y,ui(c,p,Ge/s.x*2-1,1-ri/s.y*2,v/P,1),ui(c,f,c.x/c.w,c.y/c.w,c.z/c.w,1),ye.push([c.x,c.y,c.z]);return ye}function ac(e){let{source:t}=e,r,o,i,n;for(r=0;r<2;r++)o=r?"icon":"shadow",i=r?t._icon:t._shadow,!(!(i instanceof HTMLImageElement)||!i.complete||!i.naturalWidth)&&(n=co(e,o,i,nc(e,o,i),t.options.opacity??1),o==="shadow"&&n&&(n.renderOrder-=100*1e6))}var uo=[];b();b();function Ue(e,t,r,o,i){return t.push(...e(r),...e(o),...e(i))}b();var di=2*Math.PI;b();function am(e,t,r,o,i){return new h.Point(e.x+t*Math.cos(i*di/o),e.y+r*Math.sin(i*di/o))}function Pr(e,t,r,o,i=r){if(!(r>0)||!(i>0))return;let n=Math.max(12,Math.min(128,Math.ceil(Math.PI*Math.sqrt(r)))),a;for(a=0;a<n;a++)Ue(e,o,t,am(t,r,i,n,a),am(t,r,i,n,a+1))}function _n(e,t,r,o,i){let{options:n,width:a,stroke:s,point:m}=e,f=a/2,p=t.distanceTo(r);if(!p)return;let c=r.subtract(t).divideBy(p),l=new h.Point(-c.y*f,c.x*f);n.lineCap==="square"&&(o&&(t=t.subtract(c.multiplyBy(f))),i&&(r=r.add(c.multiplyBy(f)))),Ue(m,s,t.add(l),t.subtract(l),r.add(l)),Ue(m,s,r.add(l),t.subtract(l),r.subtract(l)),n.lineCap==="round"&&(o&&Pr(m,t,f,s),i&&Pr(m,r,f,s))}b();function sc(e,t,r,o,i){let{options:n,width:a,point:s,stroke:m}=e,f=t[r],p=a/2;if(n.lineJoin==="round"){Pr(s,f,p,m);return}let c=f.subtract(t[(r+t.length-1)%t.length]),l=Math.hypot(c.x,c.y);if(!l||!i)return;let u=c.divideBy(l),d=o.subtract(f).divideBy(i),y=u.x*d.y-u.y*d.x>0?-1:1,g=new h.Point(-u.y*y,u.x*y),x=new h.Point(-d.y*y,d.x*y),v=f.add(g.multiplyBy(p)),P=f.add(x.multiplyBy(p)),B=1+g.x*x.x+g.y*x.y,T=B>0?g.add(x).multiplyBy(p/B):null;Ue(s,m,v,f,P),n.lineJoin==="miter"&&T&&Math.hypot(T.x,T.y)<=p*4&&Ue(s,m,v,f.add(T),P)}function mc(e,t,r,o,i,n){let a=e.dash,s=0,m,f,p,c;for(;s<o;){for(m=((i+s)%n+n)%n,f=0;m>=a[f];)m-=a[f++];p=Math.min(o,s+a[f]-m),f%2===0&&(c=r.subtract(t).divideBy(o),_n(e,t.add(c.multiplyBy(s)),t.add(c.multiplyBy(p)),!0,!0)),s=p}}function In(e,t,r){let{options:o,width:i,dash:n}=e;if(!o.stroke||i<=0||t.length<2)return;let a=Number(o.dashOffset)||0,s=0,m,f,p,c,l;for(m of n)s+=m;for(f=0;f<t.length-(r?0:1);f++)p=t[f],c=t[(f+1)%t.length],l=p.distanceTo(c),n.length?mc(e,p,c,l,a,s):(_n(e,p,c,!r&&f===0,!r&&f===t.length-2),(r||f>0)&&sc(e,t,f,c,l)),a+=l}function fc(e){let t=1/0,r;for(r of e)t=Math.min(t,r.x);return t}function pc(e,t,r,o){let i=Math.min(r+o,e.length),n=Math.min(r+o*2,e.length),a=r,s=i,m;for(m=r;m<n;m++)a<i&&(s>=n||e[a].x<=e[s].x)?t[m]=e[a++]:t[m]=e[s++]}function cc(e){if(e.length<2)return e;let t=new Array(e.length),r=[],o,i,n,a,s;for(o of e)r.push({ring:o,x:fc(o)});let m=r,f=t;for(i=1;i<r.length;i*=2){for(n=0;n<r.length;n+=i*2)pc(m,f,n,i);a=m,m=f,f=a}for(s=0;s<e.length;s++)e[s]=m[s].ring;return e}function Me(e,t,r){return(t.x-e.x)*(r.y-e.y)-(t.y-e.y)*(r.x-e.x)}function nt(e,t){return e.x===t.x&&e.y===t.y}function lc(e){let t=!0,r,o,i,n;for(;t&&e.length>3;)for(t=!1,r=0;r<e.length;r++)if(o=e[(r+e.length-1)%e.length],i=e[r],n=e[(r+1)%e.length],nt(o,i)||Math.abs(Me(o,i,n))<1e-10){e.splice(r,1),t=!0;break}if(e.length<3)throw new Error("Degenerate polygon ring");return e}function zn(e){let t=0,r,o,i;for(r=0;r<e.length;r++)o=e[r],i=e[(r+1)%e.length],t+=o.x*i.y-i.x*o.y;return t<0}function uc(e,t){let r=[],o=0,i,n,a;for(i=0;i<e.length;i++)n=e[i],a=lc(t.slice(o,o+=n.length)),zn(a)!==!!i&&a.reverse(),r.push(a);return r}function An(e,t){let r=!1,o,i,n,a;for(o=0,i=t.length-1;o<t.length;i=o++)n=t[o],a=t[i],n.y>e.y!=a.y>e.y&&e.x<(a.x-n.x)*(e.y-n.y)/(a.y-n.y)+n.x&&(r=!r);return r}function dc(e,t){let r;for(r=1;r<t.length;r++)if(An(e,t[r]))return!0;return!1}function hi(e,t,r){return Math.min(e.x,t.x)<=r.x&&r.x<=Math.max(e.x,t.x)&&Math.min(e.y,t.y)<=r.y&&r.y<=Math.max(e.y,t.y)}function hc(e,t,r,o){if(nt(e,r)||nt(e,o)||nt(t,r)||nt(t,o))return!1;let i=Me(e,t,r),n=Me(e,t,o),a=Me(r,o,e),s=Me(r,o,t);return i*n<0&&a*s<0||i===0&&hi(e,t,r)||n===0&&hi(e,t,o)||a===0&&hi(r,o,e)||s===0&&hi(r,o,t)}function sm(e,t,r){let o;for(o=0;o<r.length;o++)if(hc(e,t,r[o],r[(o+1)%r.length]))return!0;return!1}function gc(e,t,r,o){if(sm(e,t,r))return!0;let i;for(i=1;i<o.length;i++)if(sm(e,t,o[i]))return!0;return!1}function yc(e,t,r,o){let i=-1,n=-1,a=1/0,s,m,f,p,c;for(s=0;s<t.length;s++)for(m=0;m<e.length;m++)f=t[s],p=e[m],c=(f.x-p.x)**2+(f.y-p.y)**2,!(c>=a)&&(o.x=(f.x+p.x)/2,o.y=(f.y+p.y)/2,!(!An(o,r[0])||dc(o,r))&&(gc(f,p,e,r)||(i=s,n=m,a=c)));if(i<0)throw new Error("Unable to connect polygon hole");return[...e.slice(0,n+1),...t.slice(i),...t.slice(0,i+1),e[n],...e.slice(n+1)]}function xc(e,t,r,o){let i;for(i of e)if(!nt(i,t)&&!nt(i,r)&&!nt(i,o)&&Me(t,r,i)>=0&&Me(r,o,i)>=0&&Me(o,t,i)>=0)return!0;return!1}function vc(e){let t=[],r,o,i,n,a,s;for(;e.length>3;){for(r=!1,o=0;o<e.length;o++)if(i=e[(o+e.length-1)%e.length],n=e[o],a=e[(o+1)%e.length],!(Me(i,n,a)<=1e-10)&&!xc(e,i,n,a)){t.push([i.index,n.index,a.index]),e.splice(o,1),r=!0;break}if(!r)throw new Error("Unable to triangulate polygon: invalid or self-intersecting rings")}if(Me(...e)>1e-10){let m=[];for(s of e)m.push(s.index);t.push(m)}return t}function mm(e){let t=0,r,o,i;for(r=0;r<e.length;r++)o=e[r],i=e[(r+1)%e.length],t+=o.x*i.y-i.x*o.y;return Math.abs(t)/2}function wc(e,t,r){let o=0,i=0,n,a;for(n=1;n<e.length;n++)o+=mm(e[n]);let s=mm(e[0])-o;for(a of r)i+=Me(t[a[0]],t[a[1]],t[a[2]])/2;if(s<=0||Math.abs(i-s)>Math.max(1e-7,s*1e-8))throw new Error("Polygon triangulation area mismatch")}function ho(e,t=it){let r=[e,...t],o=r.flat(),i,n,a;for(i of o)if(!Number.isFinite(i.x)||!Number.isFinite(i.y))throw new Error("Invalid polygon coordinates");let s=[];for(n=0;n<o.length;n++)i=o[n],s.push({x:i.x-e[0].x,y:i.y-e[0].y,index:n});let m=uc(r,s),f=m[0].slice(),p=cc(m.slice(1)),c=p.length?{x:0,y:0}:null;for(a of p)f=yc(f,a,m,c);let l=vc(f);return wc(m,s,l),l}function fm(e,t,r){let{options:o,fill:i,point:n,map:a}=e,s=[],m,f,p,c;for(m of t){f=[];for(p of m)f.push(a.project(p));s.push(f)}if(r&&o.fill&&s[0]?.length>=3){let l=[];for(m of s)m.length>=3&&l.push(m);let u=l.flat();for(c of ho(l[0],l.slice(1)))Ue(n,i,u[c[0]],u[c[1]],u[c[2]])}for(m of s)In(e,m,r)}function pm(e,t,r){if(!t.length)return;let o;if(t[0]instanceof h.LatLng)fm(e,[t],r);else if(r&&t[0][0]instanceof h.LatLng)fm(e,t,r);else for(o of t)pm(e,o,r)}function Mc(e){let t=Array.isArray(e.dashArray)?e.dashArray:String(e.dashArray||"").trim().split(/[ ,]+/),r=[],o,i=!0;for(o of t)r.push(Number(o));for(o of r){if(!Number.isFinite(o)||o<0)throw new Error("Invalid Leaflet dashArray");o!==0&&(i=!1)}return i&&(r.length=0),r.length%2&&r.push(...r),r}b();b();function tr(e,t,r,o,i,n=0){let a=i*di/o;return new h.Point(e.x+Math.max(0,t+n)*Math.cos(a),e.y+Math.max(0,r+n)*Math.sin(a))}function bc(e,t){let{map:r,point:o,fill:i,stroke:n,options:a,dash:s,width:m}=t,f=r.project(e.getLatLng()),p=e.getRadius(),c=p,l,u;if(e instanceof h.Circle){e._project();let y=e._point.add(r.getPixelOrigin());f.x=y.x,f.y=y.y,p=e._radius,c=e._radiusY||p}a.fill&&Pr(o,f,p,i,c);let d=Math.max(12,Math.min(128,Math.ceil(Math.PI*Math.sqrt(Math.max(p,c)))));if(s.length){let y=[];for(l=0;l<d;l++)y.push(tr(f,p,c,d,l));In(t,y,!0)}else if(a.stroke&&m>0)for(u=0;u<d;u++)Ue(o,n,tr(f,p,c,d,u,m/2),tr(f,p,c,d,u,-m/2),tr(f,p,c,d,u+1,m/2)),Ue(o,n,tr(f,p,c,d,u+1,m/2),tr(f,p,c,d,u,-m/2),tr(f,p,c,d,u+1,-m/2))}function Lc(e,t,r){let o=[],i=[],n=e.options,a=Number(n.weight)||0,s=Mc(n),m={fill:o,stroke:i,options:n,width:a,dash:s,point:r,map:t};if(e instanceof h.CircleMarker)bc(e,m);else{let f=e instanceof h.Polygon;pm(m,e.getLatLngs(),f)}return{fill:o,stroke:i}}function Bc(e,t){return lo(e,e.map.unproject(t))}function Tc(e){return Bc(uo[uo.length-1],e)}function On(e){return e<=.0031308?e*12.92:1.055*e**(1/2.4)-.055}function Dn(e,t,r,o){let i=(e+t*12)%12;return r-o*Math.max(-1,Math.min(i-3,9-i,1))}function Ie(e){if(e&&typeof e=="object"&&"h"in e){let n=e.s*Math.min(e.l,1-e.l);return{r:On(Dn(0,e.h,e.l,n)),g:On(Dn(8,e.h,e.l,n)),b:On(Dn(4,e.h,e.l,n))}}if(e&&typeof e=="object"&&"r"in e)return e;if(typeof e=="number")return{r:(e>>16&255)/255,g:(e>>8&255)/255,b:(e&255)/255};if(typeof e!="string"||!CSS.supports("color",e))throw new Error("Invalid 3D color");let t=document.createElement("canvas").getContext("2d");t.fillStyle=e,t.fillRect(0,0,1,1);let[r,o,i]=t.getImageData(0,0,1,1).data;return{r:r/255,g:o/255,b:i/255}}function Pc(e){let{source:t}=e;uo.push(e);let r;try{r=Lc(t,e.map,Tc)}finally{uo.pop()}let{fill:o,stroke:i}=r,n,a,s,m,f,p,c,l;for(n=0;n<2;n++)a=n?"stroke":"fill",s=n?i:o,m=n?t.options.color:t.options.fillColor||t.options.color,f=n?t.options.opacity:t.options.fillOpacity,s.length&&({r:p,g:c,b:l}=Ie(m),Sn(e,a,s,[p,c,l],f??1))}function Cc(e){let{meshes:t,textures:r,backend:o}=e,i,n,a;for([a,i]of t)i._nativeUsed||(_e(o,i),t.delete(a),n=r.get(a),n&&F(o,n.texture),r.delete(a));for([a,n]of r)n.used||(F(o,n.texture),r.delete(a))}function Gn(e){let{source:t,meshes:r,textures:o}=e;if(!so(e)||!w.get(e.backend)||e.failed||!e.dirty&&(!e.marker||!e.viewDirty))return;e.dirty=!1,e.viewDirty=!1;let i,n;for(i of r.values())i._nativeUsed=!1;for(n of o.values())n.used=!1;t instanceof h.GridLayer?tc(e):t instanceof h.ImageOverlay?rc(e):e.marker?ac(e):Pc(e),Cc(e)}function Sc(e){try{Gn(e)}catch(t){e.failed=!0,e.source.fire("error",{error:t})}}function rr(e){if(wn(e),z.get(e)!==e||!w.get(e))return;let t=e._map,r=performance.now(),o=t.getSize();if(!o.x||!o.y)return;xf(e,r),wf(e,o),Tf(e,o),we(ee.get(e));let i=!1,n,a;for(n of U.get(e))a=Vr.get(n),a&&(Sc(a),i=!0);let s=tt.get(t);Ef(e,s,i);let m=_t.get(e),f=w.get(e),p=Vf(e,r),c=f.frameMeshes||=[];c.length=0;let l=Qf(e,p,r,c),u=f.device.createCommandEncoder();sp(e,c,m,s),_p(e,u,m,s),gp(e,u,c),f.device.queue.writeBuffer(f.uniformBuffer,0,f.uniformData,0,f.uniformSlot*64),f.device.queue.submit((Ji[0]=u.finish(),Ji)),Ji[0]=null;for(n of U.get(e))Ht.get(n)&&(l=ao(n)||l);(t._animatingZoom||l)&&_(e)}function Ec(){let e=[...kt];kt.clear();let t,r;for(r of e)if(et.set(r,null),!(z.get(r)!==r||!w.get(r)))try{rr(r)}catch(o){t||=o}if(t)throw t}function _(e){let t=z.get(e);if(!t)return e;if(t!==e)return _(t),e;if(et.get(e)!=null)return e;let r=kt.values().next().value;return kt.add(e),et.set(e,r?et.get(r):requestAnimationFrame(Ec)),e}b();function Rn(e){let{source:t}=e,r=t instanceof h.Marker&&t.options.icon instanceof h.DivIcon,o=r?null:t._icon,i=r?null:t._shadow,n,a;for(a of e.hidden)a===o||a===i||(a.classList.remove("leaflet-webgpu-target"),e.hidden.delete(a));for(n=0;n<2;n++)a=n?i:o,!(!a||e.hidden.has(a))&&(a.classList.add("leaflet-webgpu-target"),e.hidden.add(a))}function qe(e=this){e.dirty=!0,e.viewDirty=!0,e.failed=!1,Rn(e);let t=e.source,r,o;for(o of e.images)o===t._icon||o===t._shadow||o===t._image||(o.removeEventListener("load",oi),o.removeEventListener("error",ii),Ki(o,e),e.images.delete(o));for(r=0;r<3;r++)o=r===0?t._icon:r===1?t._shadow:t._image,!(!(o instanceof HTMLImageElement)||e.images.has(o))&&(e.images.add(o),hf(o,e),o.addEventListener("load",oi),o.addEventListener("error",ii));z.get(e.backend)&&_(e.backend)}function $(e,t,r){let o=xe.get(t),n=o.methods.get(e).original.apply(t,r),a,s;if((e==="bringToFront"||e==="bringToBack")&&t instanceof h.GridLayer){let m=e==="bringToFront"?-1/0:1/0;for(a of Object.values(o.map._layers))a===t||!(a instanceof h.GridLayer)||a.getPane()!==t.getPane()||(s=a.options.zIndex||0,m=e==="bringToFront"?Math.max(m,s):Math.min(m,s));let f=e==="bringToFront"?m+1:m-1;Number.isFinite(f)&&t.setZIndex(f)}return e==="bringToFront"&&(o.order=qt.get(o.map)+1,qt.set(o.map,o.order)),e==="bringToBack"&&(o.order=$r.get(o.map)-1,$r.set(o.map,o.order)),qe(o),n}function kc(...e){return $("setLatLng",this,e)}function _c(...e){return $("setLatLngs",this,e)}function Ic(...e){return $("addLatLng",this,e)}function zc(...e){return $("setRadius",this,e)}function Ac(...e){return $("setStyle",this,e)}function Oc(...e){return $("redraw",this,e)}function Dc(...e){return $("setIcon",this,e)}function Gc(...e){return $("setUrl",this,e)}function Rc(...e){return $("setBounds",this,e)}function Uc(...e){return $("setOpacity",this,e)}function Fc(...e){return $("setZIndex",this,e)}function Nc(...e){return $("setZIndexOffset",this,e)}function jc(...e){return $("bringToFront",this,e)}function Wc(...e){return $("bringToBack",this,e)}var cm={setLatLng:kc,setLatLngs:_c,addLatLng:Ic,setRadius:zc,setStyle:Ac,redraw:Oc,setIcon:Dc,setUrl:Gc,setBounds:Rc,setOpacity:Uc,setZIndex:Fc,setZIndexOffset:Nc,bringToFront:jc,bringToBack:Wc};b();var go=Object.freeze({});function Un(e=go){return new h.Layer(e)}b();var Cr=new WeakMap;var te=new WeakMap;var dt=new WeakMap;function Zc(e,t,r,o){let i=Math.min(r+o,e.length),n=Math.min(r+o*2,e.length),a=r,s=i,m;for(m=r;m<n;m++)a<i&&(s>=n||!(e[s].distance<e[a].distance))?t[m]=e[a++]:t[m]=e[s++]}function $c(e){if(e.length<2)return e;let t=new Array(e.length),r=e,o=t,i,n,a,s;for(i=1;i<e.length;i*=2){for(n=0;n<e.length;n+=i*2)Zc(r,o,n,i);a=r,r=o,o=a}if(r!==e)for(s=0;s<e.length;s++)e[s]=r[s];return e}function Vc(e,t,r,o){let n=new DOMMatrix(t.worldMatrix).invertSelf().toFloat64Array(),a,s,m,f,p;for(a of n)if(!Number.isFinite(a))throw new Error("Singular 3D transform");s=e.origin[0],m=e.origin[1],f=e.origin[2],p=n[3]*s+n[7]*m+n[11]*f+n[15],r[0]=(n[0]*s+n[4]*m+n[8]*f+n[12])/p,r[1]=(n[1]*s+n[5]*m+n[9]*f+n[13])/p,r[2]=(n[2]*s+n[6]*m+n[10]*f+n[14])/p,s=e.direction[0],m=e.direction[1],f=e.direction[2],o[0]=n[0]*s+n[4]*m+n[8]*f,o[1]=n[1]*s+n[5]*m+n[9]*f,o[2]=n[2]*s+n[6]*m+n[10]*f;let c=Math.hypot(...o)||1;o[0]/=c,o[1]/=c,o[2]/=c}function qc(e,t,r){e.geometry.bounds||Be(e.geometry);let o=0,i=1/0,n,a,s;for(n=0;n<3;n++)if(Math.abs(r[n])<1e-12){if(t[n]<e.geometry.bounds.min[n]||t[n]>e.geometry.bounds.max[n]){i=-1/0;break}}else a=(e.geometry.bounds.min[n]-t[n])/r[n],s=(e.geometry.bounds.max[n]-t[n])/r[n],o=Math.max(o,Math.min(a,s)),i=Math.min(i,Math.max(a,s));return!(i<o)}function Fn(e,t,r,o,i){let{position:n,index:a,instanceOffset:s}=e.geometry.attributes,m=a?.count||n.count,f=s?t%m:t,p=s?Math.floor(t/m)*s.size:0,c=s?.data[p]??0,l=s?.data[p+1]??0,u=s?.data[p+2]??0,d=(a?a.data[f]:f)*n.size,y=(a?a.data[f+1]:f+1)*n.size,g=(a?a.data[f+2]:f+2)*n.size;r[0]=n.data[d],r[1]=n.data[d+1],r[2]=n.data[d+2],o[0]=n.data[y],o[1]=n.data[y+1],o[2]=n.data[y+2],i[0]=n.data[g],i[1]=n.data[g+1],i[2]=n.data[g+2],s&&(r[0]=Math.fround(r[0]+c),r[1]=Math.fround(r[1]+l),r[2]=Math.fround(r[2]+u),o[0]=Math.fround(o[0]+c),o[1]=Math.fround(o[1]+l),o[2]=Math.fround(o[2]+u),i[0]=Math.fround(i[0]+c),i[1]=Math.fround(i[1]+l),i[2]=Math.fround(i[2]+u))}function Hc(e,t,r,o,i){if(!e.program.nightLight)return!1;let{index:n,uv:{data:a}}=e.geometry.attributes,s=n?n.data[t]:t,m=n?n.data[t+1]:t+1,f=n?n.data[t+2]:t+2,p=a[s*2]*(1-r-o)+a[m*2]*r+a[f*2]*o,c=a[s*2+1]*(1-r-o)+a[m*2+1]*r+a[f*2+1]*o;return p<=2&&(!i||p*p+c*c>.9)}function Yc(e,t,r,o,i,n,a,s){let m=o[0]-r[0],f=o[1]-r[1],p=o[2]-r[2],c=i[0]-r[0],l=i[1]-r[1],u=i[2]-r[2],d=a[1]*u-a[2]*l,y=a[2]*c-a[0]*u,g=a[0]*l-a[1]*c,x=m*d+f*y+p*g;if(e.program.cullMode==="none"||e.program.cullFace===null?Math.abs(x)<1e-9:x<1e-9)return 1/0;let v=n[0]-r[0],P=n[1]-r[1],B=n[2]-r[2],T=(v*d+P*y+B*g)/x;if(T<0||T>1)return 1/0;let O=P*p-B*f,K=B*m-v*p,G=v*f-P*m,N=(a[0]*O+a[1]*K+a[2]*G)/x;return N<0||T+N>1||Hc(e,t,T,N,s)?1/0:(c*O+l*K+u*G)/x}function Xc(e,t,r,o,i,n){let a=o[0]*i+r[0],s=o[1]*i+r[1],m=o[2]*i+r[2],f=t.worldMatrix,p=f[3]*a+f[7]*s+f[11]*m+f[15],c=[(f[0]*a+f[4]*s+f[8]*m+f[12])/p,(f[1]*a+f[5]*s+f[9]*m+f[13])/p,(f[2]*a+f[6]*s+f[10]*m+f[14])/p];return{faceIndex:n,object:t,point:c,distance:Math.hypot(c[0]-e.origin[0],c[1]-e.origin[1],c[2]-e.origin[2])}}function Nn(e,t,r=0){let o=[],i=[0,0,0],n=[0,0,0],a=[0,0,0],s=[0,0,0],m=[0,0,0],f,p,c,l,u,d,y,g,x;for(f of t)if(Vc(e,f,s,m),!!qc(f,s,m)){for({position:p,index:c,instanceOffset:l}=f.geometry.attributes,u=c?.count||p.count,d=1/0,y=void 0,g=0;g<u*(l?.count??1);g+=3)Fn(f,g,i,n,a),x=Yc(f,g,i,n,a,s,m,r),x>0&&x<d&&(d=x,y=g/3);y!==void 0&&o.push(Xc(e,f,s,m,d,y))}return $c(o)}function At(e,t,r){if(t(e,r))return;let o;for(o of e.children)At(o,t,r)}function jn(e,t){if(!e.visible)return!0;e.geometry&&e._appearance!==0&&t.push(e)}function Kc(e,t,r,o){let i=1,n=t.length-1,a;for(;i<n;)a=i+Math.floor((n-i)/2),t[a]<r?i=a+1:n=a;let s=e[i-1],m=e[i],f=t[i]-t[i-1]||1,p=(r-t[i-1])/f;return o||={},o.x=s[0]+(m[0]-s[0])*p,o.y=(s[2]??0)+((m[2]??0)-(s[2]??0))*p,o.z=s[1]+(m[1]-s[1])*p,o.dx=(m[0]-s[0])/f,o.dz=(m[1]-s[1])/f,o}function yo(e,t,r){let{points:o,lengths:i,length:n}=t.lane,a=t.distance+e.elapsed*t.speed;a-=n*Math.floor(a/n);let s=Kc(o,i,a,r);return s.x-=s.dz*e.side,s.z+=s.dx*e.side,s}function Jc(e){if(!e.mesh||!e.stale)return;e.stale=!1;let{position:t,normal:r}=e.mesh.geometry.attributes,o=e.position||={},i,n,a,s,m,f,p,c,l,u,d,y,g;for(i=0;i<e.trips.length;i++)for(n=e.trips[i],{x:a,y:s,z:m,dx:f,dz:p}=yo(e,n,o),c=0,l=i*e.stride;c<e.stride;c+=3,l+=3)u=e.template.position[c],d=e.template.position[c+2],y=e.template.normal[c],g=e.template.normal[c+2],t.data[l]=a-u*p-d*f,t.data[l+1]=s+e.template.position[c+1],t.data[l+2]=m+u*f-d*p,r.data[l]=-y*p-g*f,r.data[l+1]=e.template.normal[c+1],r.data[l+2]=y*f-g*p}function Qc(e){let t,r;for(t=1;t<=4;t++)for(r=1;r<=4;r++)if(!Number.isFinite(e[`m${t}${r}`]))throw new Error("Singular 3D transform")}function Wn(e,t,r=L.get(e).children,o=!0){if(!w.get(e))return[];let i=dt.get(e);i&&Jc(i);let n=e._map.getContainer().getBoundingClientRect();we(ee.get(e)),Hr(Q.get(e));let a=te.get(e).inverse,s=Q.get(e).projectionViewMatrix;a.m11=s[0],a.m12=s[1],a.m13=s[2],a.m14=s[3],a.m21=s[4],a.m22=s[5],a.m23=s[6],a.m24=s[7],a.m31=s[8],a.m32=s[9],a.m33=s[10],a.m34=s[11],a.m41=s[12],a.m42=s[13],a.m43=s[14],a.m44=s[15],a.invertSelf();let m=(t.clientX-n.left)/n.width*2-1,f=-((t.clientY-n.top)/n.height)*2+1,p=a.m11*m+a.m21*f+a.m41,c=a.m12*m+a.m22*f+a.m42,l=a.m13*m+a.m23*f+a.m43,u=a.m14*m+a.m24*f+a.m44,d;Qc(a),te.get(e).origin[0]=Q.get(e).position[0],te.get(e).origin[1]=Q.get(e).position[1],te.get(e).origin[2]=Q.get(e).position[2],te.get(e).direction[0]=p/u-te.get(e).origin[0],te.get(e).direction[1]=c/u-te.get(e).origin[1],te.get(e).direction[2]=l/u-te.get(e).origin[2];let y=te.get(e).direction,g=Math.hypot(y[0],y[1],y[2])||1;te.get(e).direction[0]/=g,te.get(e).direction[1]/=g,te.get(e).direction[2]/=g;let x=te.get(e).meshes;x.length=0;for(d of r)o?At(d,jn,x):d.geometry&&d.visible&&d._appearance!==0&&x.push(d);return Nn(te.get(e),x,w.get(e).uniformData?.[55])}function el(){let{map:e,descriptor:t,handle:r}=this;e._fireDOMEvent===r&&(t?Object.defineProperty(e,"_fireDOMEvent",t):delete e._fireDOMEvent)}var ie=new WeakMap;var tl=new Set(["click","preclick","dblclick","contextmenu","mousedown","mouseup","mousemove","mouseover","mouseout","pointerdown","pointerup","pointermove","pointerover","pointerout"]);b();function rl(e,t){return t.object.renderOrder-e.object.renderOrder||e.distance-t.distance}function ol(e,t,r){let o=[],i,n,a;if(r!==e.out)for(i of e.states)({source:n,backend:a}=i),!(n instanceof h.Marker||n.options.interactive===!1||!(n instanceof h.Path)&&!n.options.interactive)&&o.push(...Wn(a,t,i.meshes.values(),!1));return o.sort(rl),o[0]?.object._nativeSource||null}function Zn(e,t,r,o){t.hovered!==o&&(t.hovered&&t.fireDOMEvent.call(e,r,t.out,[t.hovered]),t.hovered=o,o&&t.fireDOMEvent.call(e,r,t.over,[o]),e.getContainer().style.cursor=o?"pointer":"")}function il(e,t,r,o){let i=r.target,n=i instanceof Element&&i.closest(".leaflet-marker-icon,.leaflet-popup,.leaflet-tooltip,.leaflet-control");return n&&t.hovered&&(o===t.move||o===t.out)&&Zn(e,t,r,null),n||o===t.move&&(e.dragging?.moving()||e._animatingZoom)}function lm(e,t=e.type,r){let o=this,i=Cr.get(o),n=i.fireDOMEvent,a=ie.get(o);if(!w.get(a)||r||!tl.has(t))return n.call(this,e,t,r);if(il(o,i,e,t))return n.call(this,e,t,r);let s=ol(i,e,t);return(t==="click"||t==="preclick")&&s&&o._draggableMoved(s)&&(s=null),(t===i.move||t===i.out)&&Zn(o,i,e,s),n.call(this,e,t,s?[s]:void 0)}function nl(e){let{map:t}=e,r=Cr.get(t);if(!r){r={map:t,states:new Set,hovered:null};let o=h.version.startsWith("2");r.move=o?"pointermove":"mousemove",r.out=o?"pointerout":"mouseout",r.over=o?"pointerover":"mouseover",r.descriptor=Object.getOwnPropertyDescriptor(t,"_fireDOMEvent"),r.fireDOMEvent=t._fireDOMEvent,r.handle=lm,r.restore=el,Cr.set(t,r),t._fireDOMEvent=lm}r.states.add(e),e._nativeEventContext=r}function xo(){qe(this)}function $n(){this.viewDirty=!0,z.get(this.backend)&&_(this.backend)}function al(e){let t=e._nativeEventContext;if(!t)return;let{map:r}=t;t.states.delete(e),t.hovered===e.source&&(t.hovered=null,r.getContainer().style.cursor=""),e._nativeEventContext=null,!t.states.size&&(t.restore(),Cr.delete(r))}function gi(){let e=this;if(e.disposed)return;e.disposed=!0;let{source:t,map:r,backend:o,meshes:i,textures:n,images:a}=e;t.off("load tileload tileunload move drag",xo,e),r.off("zoomend",xo,e),e.marker&&r.off("move zoom rotate pitch resize viewreset",$n,e),al(e);let m,f,p,c,l;for([m,f]of e.methods)f.own?Object.defineProperty(t,m,f.own):delete t[m];for(p of i.values())_e(o,p);i.clear();for(c of n.values())F(o,c.texture);n.clear();for(l of a)l.removeEventListener("load",oi),l.removeEventListener("error",ii),Ki(l,e);Vr.delete(o),o.remove()}function sl(){this.ready.resolve()}function ml({error:e}){this.ready.reject(e)}function fl({error:e}){this.source.fire("error",{error:e})}async function pl(e){let{source:t,map:r}=e,o=e.backend=Un({source:{type:"3d"}});e.meshes=new Map,e.textures=new Map,e.methods=new Map,e.images=new Set,qt.get(r)||qt.set(r,0),$r.get(r)||$r.set(r,0),e.dirty=!0,e.viewDirty=!0,e.failed=!1,e.order=qt.get(r)+1,qt.set(r,e.order),e.marker=t instanceof h.Marker,e.paneOrder=Number(getComputedStyle(t.getPane()).zIndex)||0,e.disposed=!1,t.on("load tileload tileunload move drag",xo,e),r.on("zoomend",xo,e),e.marker&&r.on("move zoom rotate pitch resize viewreset",$n,e),nl(e);let n,a,s;for(n in cm)typeof t[n]=="function"&&(a=Object.getOwnPropertyDescriptor(t,n),s=t[n],e.methods.set(n,{own:a,original:s}),t[n]=cm[n]);let m=e.ready=Promise.withResolvers();o.once("ready",sl,e),o.once("error",ml,e),o.on("error",fl,e),qe(e),o.addTo(r);try{await m.promise}catch(f){throw gi.call(e),f}if(!so(e))return t;Vr.set(o,e);try{Gn(e)}catch(f){throw gi.call(e),f}return _(e.backend),t}function cl(e){xe.get(e.source)===e&&xe.set(e.source,null),e.backend&&gi.call(e);let t;for(t of e.hidden)t.classList.remove("leaflet-webgpu-target")}function ll(e){return xe.get(e.source)!==e?e.source:pl(e)}function Vn(e,t){e.fire("error",{error:t})}function qn(e,t){if(xe.get(e))return;if(!document.getElementById("leaflet-webgpu-targets")){let o=document.createElement("style");o.id="leaflet-webgpu-targets",o.textContent=".leaflet-webgpu-target{opacity:0!important}",document.head.append(o)}let r={source:e,map:t,hidden:new Set};xe.set(e,r),Rn(r),e.once("remove",cl.bind(null,r)),re.set(e,Promise.resolve().then(ll.bind(null,r))),re.get(e).catch(Vn.bind(null,e))}var Hn=[1,0,1,0];b();function fe(e){return new h.Point(Array.isArray(e)?e[0]:e.x,Array.isArray(e)?e[1]:e.y)}X();W();H();function Yn(e,t){let r=S(e)*C,o=k(e)*C;return t||=[],t[0]=Math.cos(r),t[1]=Math.sin(r),t[2]=Math.cos(o),t[3]=Math.sin(o),t}function Fe(e,t,r=!1,o=!1){let i=e.getSize(),n=i.x/2,a=i.y/2,s=i.y*1.5,m=fe(t);if(!s)return m;let[f,p,c,l]=Yn(e,Hn),u=m.x-n,d=m.y-a;if(r){let v=i.y*e.options.pitchMaxDistance,P=c*s+l*d,B=P*c>0?d*s/P:-v;o&&(B=Math.max(-v,Math.min(v,B)));let T=u*(s-l*B)/s;return m.x=f*T+p*B+n,m.y=-p*T+f*B+a,m}let y=f*u-p*d,g=p*u+f*d,x=s/(s-l*g);return m.x=y*x+n,m.y=c*g*x+a,m}function ul(e){return Fe(this,Jt(this,j.value.layerPointToContainerPoint.call(this,e)))}function dl(e){return j.value.containerPointToLayerPoint.call(this,Jt(this,Fe(this,e,!0),!0))}function hl(){return j.value.containerPointToLayerPoint.call(this,this.getSize().divideBy(2))}function gl(e,t){let r=this.getSize().divideBy(2),o=r.subtract(Fe(this,r.subtract(fe(e)),!0));return j.value.panBy.call(this,o,t)}b();H();W();function yl(e,t,r){if(!k(this)&&!S(this))return j.value.setZoomAround.call(this,e,t,r);t=this._limitZoom(t);let o=this.getZoomScale(t),i=this.getSize().divideBy(2),n=e instanceof h.Point?e:this.latLngToContainerPoint(e),a=this.containerPointToLayerPoint(i),s=this.containerPointToLayerPoint(n),m=a.add(s.subtract(a).multiplyBy(1-1/o));return this.setView(this.layerPointToLatLng(m),t,{zoom:r})}var ht=Object.freeze([0,0]);H();W();function xl(e,t={}){if(!k(this)&&!S(this))return j.value.panInside.call(this,e,t);let r=fe(t.paddingTopLeft||t.padding||ht),o=this.getSize().subtract(fe(t.paddingBottomRight||t.padding||ht)),i=this.latLngToContainerPoint(e),n=r;if(n.x=Math.max(r.x,Math.min(o.x,i.x)),n.y=Math.max(r.y,Math.min(o.y,i.y)),n.equals(i))return this;let a=this.latLngToLayerPoint(e).subtract(this.containerPointToLayerPoint(n));return this.panTo(this.unproject(this.project(this.getCenter()).add(a)),t)}b();H();W();b();function vo(e,t=ht){let r=fe(t).divideBy(2),o=e.getSize().subtract(r),i=new h.Bounds,n=r.x,a=r.y,s;for(s=0;s<4;s++)r.x=s%2?o.x:n,r.y=s<2?a:o.y,i.extend(Fe(e,r,!0,!0));return i}function vl(e,t,r){if(!r||!this._loaded||!k(this)&&!S(this))return j.value._limitCenter.call(this,e,t,r);let o=this.getSize().divideBy(2),i=vo(this),n=this.project(e,t),a=new h.Bounds(n.add(i.min.subtract(o)),n.add(i.max.subtract(o))),s=this._getBoundsOffset(a,r,t);return Math.abs(s.x)<=1&&Math.abs(s.y)<=1?e:this.unproject(n.add(s),t)}H();W();function wl(e,t){if(!t||!k(this)&&!S(this))return j.value._limitOffset.call(this,e,t);let r=this.getSize().divideBy(2),o=r.subtract(Fe(this,r.subtract(e),!0)),i=this.project(this.getCenter()),n=this.project(this._limitCenter(this.unproject(i.add(o)),this.getZoom(),t));return r.subtract(Fe(this,r.subtract(n.subtract(i))))}H();W();b();Xn();function um(e,t,r,o,i){return t*r+o*e>0?Math.max(-i,Math.min(i,e*r/(t*r+o*e))):-i}function Kn(e,t,r=wo){t=t.getBounds?t.getBounds():t instanceof h.LatLngBounds?t:new h.LatLngBounds(t);let o=e.getZoom()??0,i=e.getSize().divideBy(2),n=e.getSize().y*1.5,a=fe(r.paddingTopLeft||r.padding||ht).subtract(i),s=i.subtract(fe(r.paddingBottomRight||r.padding||ht)),[m,f,p,c]=Yn(e,Hn);if(p<0){let u0=a.y;a.y=-s.y,s.y=-u0}let l=e.getSize().y*e.options.pitchMaxDistance,u=um(a.y,Math.abs(p),n,c,l),d=um(s.y,Math.abs(p),n,c,l),y=e.project(t.getNorthWest(),o).add(e.project(t.getSouthEast(),o)).divideBy(2),g=1/0,x=-1/0,v=a.x*c/n,P=s.x*c/n,B=P-v,T=1/0,O=-1/0,K=[t.getNorthWest(),t.getNorthEast(),t.getSouthWest(),t.getSouthEast()],G,N,J,pe,ye;for(G=0;G<4;G++)N=K[G],J=e.project(N,o).subtract(y),pe=m*J.x-f*J.y,ye=f*J.x+m*J.y,g=Math.min(g,ye),x=Math.max(x,ye),T=Math.min(T,pe+v*ye),O=Math.max(O,pe+P*ye);let Qe=Math.min((d-u)/(x-g),(s.x-a.x-B*u)/(O-T-B*g)),Le=e.getScaleZoom(Qe,o),ft=e.options.zoomSnap;if(ft&&(Le=Math.floor(Math.round(Le/(ft/100))/100)*ft),Le=Math.max(e.getMinZoom(),Math.min(e.getMaxZoom(),r.maxZoom??1/0,Le)),!Number.isFinite(Le))return{center:t.getCenter(),zoom:Le};let Ge=e.getZoomScale(Le,o),ri=x*Ge-d,uf=g*Ge-u,l0=Math.max(ri,B?(Ge*(O-T)-s.x+a.x)/B:ri),Zs=(Math.min(uf,l0)+uf)/2,df=(Ge*(T+O)-a.x-s.x-(v+P)*Zs)/2;return y.x+=(m*df+f*Zs)/Ge,y.y+=(-f*df+m*Zs)/Ge,{center:e.unproject(y,o),zoom:Le}}function Ml(e,t){return k(this)||S(this)?Kn(this,e,t):j.value._getBoundsCenterZoom.call(this,e,t)}b();H();W();function bl(e,t,r){if(!k(this)&&!S(this))return j.value.getBoundsZoom.call(this,e,t,r);if(!t)return Kn(this,e,{padding:fe(r||ht).divideBy(2)}).zoom;e=e instanceof h.LatLngBounds?e:new h.LatLngBounds(e);let o=vo(this,r).getSize(),i=this.project(e.getSouthEast()).subtract(this.project(e.getNorthWest())),n=this.getScaleZoom(Math.max(o.x/i.x,o.y/i.y)),a=this.options.zoomSnap;return Math.max(this.getMinZoom(),Math.min(this.getMaxZoom(),a?Math.ceil(n/a)*a:n))}function Ll(e,t){let r=this._getCenterOffset(e)._trunc();return t?.animate!==!0&&!this.getSize().contains(r)?!1:(j.value.panBy.call(this,r,t),!0)}b();H();W();function Bl(){if(!k(this)&&!S(this))return j.value.getBounds.call(this);let e=vo(this),t=new h.LatLngBounds,r,o,i;for(r=0;r<2;r++)o=r?e.max:e.min,i=j.value.containerPointToLayerPoint.call(this,Jt(this,o,!0)),t.extend(this.layerPointToLatLng(i));return t}var Tl=new WeakSet;var dm=new WeakMap;or();hm();function Pl(){this.options.maxBounds&&this._panInsideMaxBounds()}var ir=new WeakMap;Jn();ia();H();W();function na(){let e=this,t=ir.get(e);if(!k(e)&&!S(e))return;let r=e.getSize().divideBy(2),o=t._newPos.subtract(t._startPos),i=r.subtract(Fe(e,r.subtract(o),!0));t._newPos=t._startPos.add(i)}function Cl(){bo(this),Ne.get(this)?.remove(),ir.get(this)&&(ir.get(this).off("predrag",na,this),ir.delete(this))}function Sl(){let e=this.dragging?._draggable;e&&(ir.set(this,e),e.on("predrag",na,this))}async function Du(e){try{let{cameraControls:t}=await Promise.resolve().then(()=>(Ou(),Au));e._container?._leaflet_id&&t(e)}catch(t){throw e.fire("error",{error:t}),t}}function at(){}function Gu(){if(Tl.add(this),!document.getElementById("leaflet-camera-zoom-style")){let e=document.createElement("style");e.id="leaflet-camera-zoom-style",e.textContent=".leaflet-camera-zoom .leaflet-marker-icon,.leaflet-camera-zoom .leaflet-marker-shadow,.leaflet-camera-zoom .leaflet-popup,.leaflet-camera-zoom .leaflet-tooltip{transition:none!important}",document.head.append(e)}ze(this,this.options.pitch,this.options.bearing),this.on("load resize pitch",Qn),this.on("rotate pitch",Pl,this),this.once("unload",Cl,this),this.whenReady(Sl,this),(this.options.rotate||this.options.trackContainerMutation)&&(dm.set(this,Du(this)),dm.get(this).catch(at))}b();function Ru(e){e instanceof h.DivIcon||(e.options.crossOrigin||=!0);let t=Ve.value.setIcon.call(this,e);return this._map&&!(e instanceof h.DivIcon)&&qn(this,this._map),t}function Uu(){let e=Ve.value.getEvents.call(this);return e.rotate=e.pitch=e.move=this.update,e}function ko(e,t){return e.layerPointToContainerPoint(t).subtract(e._getMapPanePos())}function Fu(e){Ve.value._setPos.call(this,ko(this._map,e));let t,r,o,i,n,a;for(t=0;t<2;t++)r=t?this._shadow:this._icon,o=t?"shadowAnchor":"iconAnchor",r&&(i=kn(this,1,0),n=this.options.icon.options,a=n[o]||n.iconAnchor,r.style.transformOrigin=a?`${a.x??a[0]}px ${a.y??a[1]}px`:"center",r.style.transform+=` rotate(${Math.atan2(i.y,i.x)}rad) scale(${this.options.scale})`)}function xt(e=this){let t=xe.get(e);t?.backend&&!t.disposed&&qe(t)}function Nu(e){Ve.value._updateZIndex.call(this,e);let t=Tr.get(this)!==e;Tr.set(this,e),t&&xt(this)}var zr=new WeakMap;b();function ju(e){let t=this._marker._map,r=h.DomUtil.getPosition(this._marker._icon).add(t._getMapPanePos()),o=t.containerPointToLayerPoint(r);h.DomUtil.setPosition(this._marker._icon,o),zr.get(this)._cameraOriginalOnDrag.call(this,e),this._marker._setPos(o)}b();H();W();var Mi=new Map;var _o={value:null};function Wu(){_o.value=null;let e=[...Mi];Mi.clear();let t,r;for([t,r]of e)t._panRequest=null,t._adjustPan(r)}function Zu(e,t){Mi.set(e,t),_o.value===null&&(_o.value=requestAnimationFrame(Wu)),e._panRequest=_o.value}function $u(e){let t=this._marker,r=t._map;if(!k(r)&&!S(r))return zr.get(this)._cameraOriginalAdjustPan.call(this,e);let o=h.DomUtil.getPosition(t._icon).add(r._getMapPanePos()),i=r.getSize(),n=fe(t.options.autoPanPadding),a=t.options.autoPanSpeed,s=o;if(s.x=(Math.max(0,o.x-i.x+n.x)-Math.max(0,n.x-o.x))/Math.max(1,n.x)*a,s.y=(Math.max(0,o.y-i.y+n.y)-Math.max(0,n.y-o.y))/Math.max(1,n.y)*a,!s.x&&!s.y)return;let m=r._getMapPanePos();r.panBy(s,{animate:!1});let f=m.subtract(r._getMapPanePos());this._draggable._newPos._add(f),this._draggable._startPos._add(f),h.DomUtil.setPosition(t._icon,this._draggable._newPos),this._onDrag(e),Zu(this,e)}function Vu(){if(!this.dragging||zr.has(this.dragging))return;let e=this.dragging,t=e._onDrag,r=e._adjustPan;zr.set(e,{_cameraOriginalOnDrag:t,_cameraOriginalAdjustPan:r}),e._onDrag=ju,e._adjustPan=$u,e.enabled()&&(e._draggable.off("drag",t,e),e._draggable.on("drag",e._onDrag,e))}function qu(){let e=Ve.value._initInteraction.call(this);return Vu.call(this),e}function Hu(){let e=Zi.value.call(this);return e.rotate=e.pitch=e.move=this._updatePosition,e}function Yu(){let e=$i.value.call(this);return e.rotate=e.pitch=e.move=this._updatePosition,e}H();W();function Xu(){let e=this._map;if(!k(e)&&!S(e))return qi.value.call(this);if(!this.options.autoPan)return;if(e._panAnim&&e._panAnim.stop(),this._autopanning){this._autopanning=!1;return}let t=this._container.getBoundingClientRect(),r=e.getContainer().getBoundingClientRect(),o=fe(this.options.autoPanPaddingTopLeft||this.options.autoPanPadding),i=e.getSize().subtract(fe(this.options.autoPanPaddingBottomRight||this.options.autoPanPadding)),n=t.left-r.left,a=t.top-r.top,s=t.right-r.left,m=t.bottom-r.top,f=Math.min(0,n-o.x)||Math.max(0,s-i.x),p=Math.min(0,a-o.y)||Math.max(0,m-i.y);if(!f&&!p)return;this.options.keepInView&&(this._autopanning=!0);let c=e.latLngToContainerPoint(this._latlng);c.x-=f,c.y-=p;let l=e.latLngToLayerPoint(this._latlng).subtract(e.containerPointToLayerPoint(c));e.fire("autopanstart"),e.panTo(e.unproject(e.project(e.getCenter()).add(l)))}b();function Ku(){if(Vi.value.call(this),!this._map)return;let e=this._map.latLngToLayerPoint(this._latlng),t=ko(this._map,e).subtract(e);this._zoomAnimated?h.DomUtil.setPosition(this._container,h.DomUtil.getPosition(this._container).add(t)):(this._container.style.left=`${this._containerLeft+t.x}px`,this._container.style.bottom=`${this._containerBottom-t.y}px`)}b();function Ju(e){Hi.value.call(this,e);let t=ko(this._map,e).subtract(e);h.DomUtil.setPosition(this._container,h.DomUtil.getPosition(this._container).add(t))}b();function Qu(){let e=Xi.value.call(this);return e.rotate=e.pitch=h.Util.throttle(this._onMoveEnd,this.options.updateInterval,this),e}b();W();H();function ed(e){if(!S(this._map)&&!k(this._map))return Yi.value.call(this,e);let t=this._map.getBounds();return new h.Bounds(this._map.project(t.getNorthWest(),this._tileZoom),this._map.project(t.getSouthEast(),this._tileZoom))}j.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(h.Map.prototype));h.Map.mergeOptions({rotate:!0,bearing:0,pitch:0,maxPitch:85,pitchMaxDistance:3,rotateControl:!0,shiftKeyRotate:!0,pitchDrag:!0,touchRotate:!1,touchPitch:!1,compassBearing:!1});h.Map.include({layerPointToContainerPoint:ul,containerPointToLayerPoint:dl,_getCenterLayerPoint:hl,panBy:gl,setZoomAround:yl,panInside:xl,_limitCenter:vl,_limitOffset:wl,_getBoundsCenterZoom:Ml,getBoundsZoom:bl,_tryAnimatedPan:Ll,getBounds:Bl});h.Map.addInitHook(Gu);Ve.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(h.Marker.prototype));h.Marker.mergeOptions({rotation:0,rotateWithView:!1,keepUpright:!1,scale:1});h.Marker.include({setIcon:Ru,getEvents:Uu,_setPos:Fu,_updateZIndex:Nu,_initInteraction:qu});Zi.value=h.Popup.prototype.getEvents;h.Popup.include({getEvents:Hu});$i.value=h.Tooltip.prototype.getEvents;h.Tooltip.include({getEvents:Yu});Vi.value=h.Popup.prototype._updatePosition;qi.value=h.Popup.prototype._adjustPan;h.Popup.include({_adjustPan:Xu,_updatePosition:Ku});Hi.value=h.Tooltip.prototype._setPosition;h.Tooltip.include({_setPosition:Ju});Yi.value=h.GridLayer.prototype._getTiledPixelBounds;Xi.value=h.GridLayer.prototype.getEvents;h.GridLayer.include({getEvents:Qu,_getTiledPixelBounds:ed});var le=new WeakMap;var V=new WeakMap;var fr=new WeakMap;var pr=new WeakMap;var q=new WeakMap;var je=new WeakMap;var Oe=new WeakMap;var cr=new WeakMap;var oe=new WeakMap;b();var za=new WeakMap;var bi=new WeakMap;var vt=new WeakSet;var Zm=["rootDirectoryOffset","rootDirectoryLength","jsonMetadataOffset","jsonMetadataLength","leafDirectoryOffset","leafDirectoryLength","tileDataOffset","tileDataLength","numAddressedTiles","numTileEntries","numTileContents"];var $m=["clustered","internalCompression","tileCompression","tileType","minZoom","maxZoom"];var Vm=["minLon","minLat","maxLon","maxLat"];function Aa(e){let t=e.byteLength>=127?new DataView(e):null;if(!t||t.getUint32(0,!0)!==1767132496||t.getUint32(4,!0)!==57894252)throw new Error("Expected a PMTiles v3 archive");let r={},o;for(o=0;o<Zm.length;o++)r[Zm[o]]=Number(t.getBigUint64(8+o*8,!0));for(o=0;o<$m.length;o++)r[$m[o]]=t.getUint8(96+o);for(o=0;o<Vm.length;o++)r[Vm[o]]=t.getInt32(102+o*4,!0)/1e7;return r.centerZoom=t.getUint8(118),r.centerLon=t.getInt32(119,!0)/1e7,r.centerLat=t.getInt32(123,!0)/1e7,r}var Io=new WeakMap;async function zo(e,t,r,o){if(o?.throwIfAborted(),!Number.isSafeInteger(t)||!Number.isSafeInteger(r)||t<0||r<=0||!Number.isSafeInteger(t+r))throw new Error("Invalid PMTiles byte range");let i=await fetch(oe.get(e),{headers:{Range:`bytes=${t}-${t+r-1}`},signal:o});if(!i.ok)throw new Error(`Unable to read PMTiles: HTTP ${i.status}`);let n=i.headers.get("ETag");if(Io.get(e)&&n!==Io.get(e))throw new Error("PMTiles archive changed; recreate the layer");n&&Io.set(e,n);let a=await i.arrayBuffer();if(i.status===200)a=a.slice(t,t+r);else if(i.status!==206||!i.headers.get("Content-Range")?.startsWith(`bytes ${t}-${t+r-1}/`))throw new Error("Invalid PMTiles range response");if(a.byteLength!==r)throw new Error("Truncated PMTiles range");return a}function Ar(e){if(!vt.has(e))return e.getHeader();if(e.options.archive&&e.options.archive!==e)return Ar(e.options.archive);let t=bi.get(e);return t||(t=zo(e,0,127).then(Aa),bi.set(e,t)),t}var st=new WeakMap;var wt=new WeakMap;X();function Oa(e,t=!0){let r={enabled:t,loaded:0,skipped:0,pending:0,errors:[]},o;for(o of V.get(e).values())o.error?r.errors.push(o.error):o.done||r.pending++,r.loaded+=o.buildings??0,r.skipped+=o.skipped??0;e.fire("progress",r)}b();b();function Da(e,t,r){let{backend:o,crs:i,origin:n,metres:a,map:s}=e,m=new h.LatLng(r,t),f=i.project(m),p=ct(s,m),c=L.get(o);return{x:(f.x-n.x)*a,y:(f.y-n.y)*a,ground:Number.isFinite(p)&&Number.isFinite(c.position[1])?p-c.position[1]:0}}var Ao=[];function Ga(e){return e.ground||0}function Or(e,t,r,o,i,n,a,s,m,f,p){let{backend:c,positions:l,normals:u,colors:d,uvs:y}=e,g=o.x-t.x,x=i-r,v=t.y-o.y,P=n.x-t.x,B=a-r,T=t.y-n.y;if((x*T-v*B)*s+(v*P-g*T)*m+(g*B-x*P)*f<0){let O=o,K=i;o=n,i=a,n=O,a=K}l.push(t.x,r+Ga(t),-t.y,o.x,i+Ga(o),-o.y,n.x,a+Ga(n),-n.y),u.push(s,m,f,s,m,f,s,m,f),d.push(p.r,p.g,p.b,p.r,p.g,p.b,p.r,p.g,p.b),c.options.nightLight&&y.push(...t.uv,...o.uv,...n.uv)}function td(...e){Or(Ao[Ao.length-1],...e)}function Ra(e,t,r,o){Ao.push(e);try{t(r,o,td)}finally{Ao.pop()}}var Dr=[{x:Math.cos(0*Math.PI/3),y:Math.sin(0*Math.PI/3),nx:Math.cos(.5*Math.PI/3),nz:-Math.sin(.5*Math.PI/3)},{x:Math.cos(1*Math.PI/3),y:Math.sin(1*Math.PI/3),nx:Math.cos(1.5*Math.PI/3),nz:-Math.sin(1.5*Math.PI/3)},{x:Math.cos(2*Math.PI/3),y:Math.sin(2*Math.PI/3),nx:Math.cos(2.5*Math.PI/3),nz:-Math.sin(2.5*Math.PI/3)},{x:Math.cos(3*Math.PI/3),y:Math.sin(3*Math.PI/3),nx:Math.cos(3.5*Math.PI/3),nz:-Math.sin(3.5*Math.PI/3)},{x:Math.cos(4*Math.PI/3),y:Math.sin(4*Math.PI/3),nx:Math.cos(4.5*Math.PI/3),nz:-Math.sin(4.5*Math.PI/3)},{x:Math.cos(5*Math.PI/3),y:Math.sin(5*Math.PI/3),nx:Math.cos(5.5*Math.PI/3),nz:-Math.sin(5.5*Math.PI/3)}];function rd(e,t){let r=new Array(Dr.length),o;for(o=0;o<r.length;o++)r[o]={x:e.x+Dr[o].x*t,y:e.y+Dr[o].y*t,ground:e.ground,uv:[3,3]};return r}function od(e,t,r){let o=Ie(5264986),i=t.poleRadius;if(!Number.isFinite(i)||i<=0)throw new Error("Invalid lamp pole radius");let n={...e,uv:[3,3]},a,s,m,f,p,c,l,u,d,y;for(y=0;y<2;y++)for(a=y?i*2.5:i,s=y?t.top-.25:0,m=y?t.top+.15:t.top,f=rd(e,a),p=0;p<6;p++)c=f[p],l=f[(p+1)%6],u=Dr[p].nx,d=Dr[p].nz,r(c,s,l,s,l,m,u,0,d,o),r(c,s,l,m,c,m,u,0,d,o),r(n,m,c,m,l,m,0,1,0,o),r(n,s,l,s,c,s,0,-1,0,o)}function id(e,t,r,o,i,n,a,s,m,f){typeof s!="number"?(e(r,a,o,a,i,a,...s,t),e(r,a,i,a,n,a,...s,t)):(e(r,a,o,a,i,a,s,m,f,t),e(r,a,i,a,n,a,s,m,f,t))}function Li(e,t,r,o){return{x:e.x+(o===2?0:t*.65),y:e.y+(o===1?0:o===2?t*.65:r*.65),ground:e.ground+(o===0?0:r*.65),uv:[t,r]}}function nd(e,t,r){if(!Number.isFinite(t.lightRadius)||t.lightRadius<=0)throw new Error("Invalid light radius");let o=Ie(t.color),i;for(i=0;i<3;i++)id(r,o,Li(e,-1,-1,i),Li(e,1,-1,i),Li(e,1,1,i),Li(e,-1,1,i),t.top,i===2?1:0,i===0?1:0,i===1?1:0)}var Ua=[[0,0],[.35,.8],[.6,1],[.85,.7],[1,0]];var Oo=[{x:Math.cos(0*Math.PI/4),y:Math.sin(0*Math.PI/4),nx:Math.cos(.5*Math.PI/4),nz:-Math.sin(.5*Math.PI/4)},{x:Math.cos(1*Math.PI/4),y:Math.sin(1*Math.PI/4),nx:Math.cos(1.5*Math.PI/4),nz:-Math.sin(1.5*Math.PI/4)},{x:Math.cos(2*Math.PI/4),y:Math.sin(2*Math.PI/4),nx:Math.cos(2.5*Math.PI/4),nz:-Math.sin(2.5*Math.PI/4)},{x:Math.cos(3*Math.PI/4),y:Math.sin(3*Math.PI/4),nx:Math.cos(3.5*Math.PI/4),nz:-Math.sin(3.5*Math.PI/4)},{x:Math.cos(4*Math.PI/4),y:Math.sin(4*Math.PI/4),nx:Math.cos(4.5*Math.PI/4),nz:-Math.sin(4.5*Math.PI/4)},{x:Math.cos(5*Math.PI/4),y:Math.sin(5*Math.PI/4),nx:Math.cos(5.5*Math.PI/4),nz:-Math.sin(5.5*Math.PI/4)},{x:Math.cos(6*Math.PI/4),y:Math.sin(6*Math.PI/4),nx:Math.cos(6.5*Math.PI/4),nz:-Math.sin(6.5*Math.PI/4)},{x:Math.cos(7*Math.PI/4),y:Math.sin(7*Math.PI/4),nx:Math.cos(7.5*Math.PI/4),nz:-Math.sin(7.5*Math.PI/4)}];function Bi(e,t){let r=new Array(Oo.length),o;for(o=0;o<r.length;o++)r[o]={x:e.x+Oo[o].x*t,y:e.y+Oo[o].y*t,ground:e.ground};return r}function Fa(e,t,r,o,i,n,a){let s=Bi(e,r),m=Bi(e,i),f,p,c,l,u,d,y,g,x;for(f=0;f<8;f++)p=(f+1)%8,c=(r-i)/(n-o),l=Math.hypot(1,c),{nx:u,nz:d}=Oo[f],y=c/l,g=u/l,x=d/l,r&&t(s[f],o,s[p],o,m[p],n,g,y,x,a),i&&t(s[f],o,m[p],n,m[f],n,g,y,x,a)}function ad(e,t,r,o,i,n){if(!Number.isFinite(e)||!Number.isFinite(t)||!Number.isFinite(r)||e<=0||t<e||r<=o||r>=i||n!=="round"&&n!=="cone")throw new Error("Invalid tree dimensions or crown shape")}function sd(e,t,r){let{top:o,bottom:i=0,trunkRadius:n,crownRadius:a,crownBottom:s,crownShape:m="round"}=t;ad(n,a,s,i,o,m);let f=Ie(t.trunkColor??7491898),p=Ie(t.color??5210683);Fa(e,r,n,i,n,s+(o-s)*.25,f);let c,l,u,d,y;if(m==="cone"){let g=Bi(e,a);for(c=0;c<8;c++)r(e,s,g[c],s,g[(c+1)%8],s,0,-1,0,p);Fa(e,r,a,s,0,o,p)}else for(c=1;c<Ua.length;c++)[l,u]=Ua[c-1],[d,y]=Ua[c],Fa(e,r,u*a,s+l*(o-s),y*a,s+d*(o-s),p)}function md(e,t,r,o,i){let{top:n}=r;if(e.backend.options.nightLight){if(!Number.isFinite(r.lightFlux)||r.lightFlux<=0)throw new Error("Invalid light flux");r.poleRadius>0&&!e.supports.has(i)&&(Ra(e,od,t,r),e.supports.add(i)),Ra(e,nd,t,r),e.lights.push({position:[t.x,t.ground+n,-t.y],radius:Math.hypot(n,r.lightRadius),color:[o.r,o.g,o.b],flux:r.lightFlux})}else Ra(e,sd,t,r)}function fd(e,t,r,o,i,n){let a=Da(e,r,o);md(e,a,i,n,t.properties?.cod_ouvrag||`${r},${o}`)}b();function Na(e,t){let{backend:r,crs:o,origin:i,metres:n,map:a}=e;if(t.length<4)throw new Error("Invalid GeoJSON polygon ring");let s=[],m=L.get(r),f,p,c,l,u,d;for(f=0;f<t.length-1;f++){if(p=t[f][0],c=t[f][1],!Number.isFinite(p)||!Number.isFinite(c))throw new Error("Invalid GeoJSON coordinates");l=new h.LatLng(c,p),u=o.project(l),d=ct(a,l),s.push({x:(u.x-i.x)*n,y:(u.y-i.y)*n,ground:Number.isFinite(d)&&Number.isFinite(m.position[1])?d-m.position[1]:0})}return s}function pd(e,t,r,o,i){let n=[],a,s,m,f,p,c,l,u,d,y,g;for(a of t)for(s of a)n.push(s);for([m,f,p]of ho(t[0],t.slice(1)))Or(e,n[m],r,n[f],r,n[p],r,0,1,0,i),o>0&&Or(e,n[m],o,n[f],o,n[p],o,0,-1,0,i);for(c=0;c<t.length;c++)for(a=t[c],l=zn(a)===(c===0)?-1:1,u=0;u<a.length;u++)m=a[u],f=a[(u+1)%a.length],d=Math.hypot(f.x-m.x,f.y-m.y),d&&(y=l*(f.y-m.y)/d,g=l*(f.x-m.x)/d,Or(e,m,o,f,o,f,r,y,0,g,i),Or(e,m,o,f,r,m,r,y,0,g,i))}function qm(e,t,r,o,i){if(!t.length)throw new Error("Empty GeoJSON polygon");let n=[],a;for(a of t)n.push(Na(e,a));pd(e,n,r,o,i)}function cd(e,t){let r=e?.geometry,o=r?.type==="Point";if(t&&!o)throw new Error("Night lights require Point geometry");if(r?.type!=="Polygon"&&r?.type!=="MultiPolygon"&&!o)throw new Error("Unsupported GeoJSON geometry");let i=o?r.coordinates:r.type==="Polygon"?r.coordinates[0]?.[0]:r.coordinates[0]?.[0]?.[0];if(!Number.isFinite(i?.[0])||!Number.isFinite(i?.[1]))throw new Error("Invalid GeoJSON coordinates");return i}function ld(e,t){let r=e.options.style(t);if(r===null)return null;if(!r||typeof r!="object")throw new Error("style must return an extrusion style or null");let{top:o,bottom:i=0}=r;if(!Number.isFinite(o)||!Number.isFinite(i)||i<0||o<=i)throw new Error("Invalid extrusion heights: expected top > bottom >= 0");return r}function ud(e,t,r,o,i,n){let a=t.geometry,s=[],m=a.type==="Polygon"?[a.coordinates]:a.type==="MultiPolygon"?a.coordinates:[],f,p,c;for(f of m){if(!f.length)throw new Error("Empty GeoJSON polygon");c=[];for(p of f)c.push(Na(e,p));s.push(c)}let l=a.type==="Point"?Da(e,r,o):null,u=e.backend.options.nightLight,d=l?Ie(i.color??(u?void 0:5210683)):n,y=l&&!u?Ie(i.trunkColor??7491898):null;e.jobs.push({point:l,polygons:s,baseColor:{r:n.r,g:n.g,b:n.b},support:t.properties?.cod_ouvrag||`${r},${o}`,style:{top:i.top,bottom:i.bottom??0,color:{r:d.r,g:d.g,b:d.b},trunkColor:y?{r:y.r,g:y.g,b:y.b}:void 0,trunkRadius:i.trunkRadius,crownRadius:i.crownRadius,crownBottom:i.crownBottom,crownShape:i.crownShape,poleRadius:i.poleRadius,lightRadius:i.lightRadius,lightFlux:i.lightFlux}})}function dd(e,t){let{backend:r,area:o,map:i}=e,n=o.coords,a=cd(t,r.options.nightLight),s=t.geometry,m=s.type==="Point",f=a[0],p=a[1];if(n){let P=i.project(new h.LatLng(p,f),n.z);if(Math.floor(P.x/256)!==n.x||Math.floor(P.y/256)!==n.y)return}let c=ld(r,t);if(c===null){e.skipped++;return}let{top:l,bottom:u=0,color:d=14267276}=c,y=Ie(d);if(e.jobs){ud(e,t,f,p,c,y),e.featureFaces.push({id:t.id??t.properties?.objectid??JSON.stringify(s),properties:t.properties,baseColor:y});return}let g=e.positions.length/3;m&&fd(e,t,f,p,c,y);let x;if(s.type==="Polygon")qm(e,s.coordinates,l,u,y);else if(s.type==="MultiPolygon")for(x of s.coordinates)qm(e,x,l,u,y);let v=e.positions.length/3;e.featureFaces.push({id:t.id??t.properties?.objectid??JSON.stringify(s),properties:t.properties,baseColor:y,faceStart:g/3,faceEnd:v/3,vertexStart:g,vertexEnd:v})}function hd(e){let{positions:t,normals:r,colors:o,featureFaces:i}=e;if(e.backend.options.nightLight||i.length<2)return e;let n=i[0].vertexEnd,a=n*3;if(!n||t.length!==a*i.length)return e;let s=Math.trunc(t[0]),m=Math.trunc(t[1]),f=Math.trunc(t[2]),p=new Float32Array(a),c,l,u,d;for(c=0;c<a;c++)p[c]=t[c]-(c%3===0?s:c%3===1?m:f);let y=new Float32Array(i.length*4);for(l=0;l<i.length;l++){if(u=i[l],d=l*a,u.vertexStart!==l*n||u.vertexEnd!==(l+1)*n)return e;for(y[l*4]=s+t[d]-t[0],y[l*4+1]=m+t[d+1]-t[1],y[l*4+2]=f+t[d+2]-t[2],y[l*4+3]=l*n,c=0;c<a;c++)if(Math.fround(p[c]+y[l*4+c%3])!==Math.fround(t[d+c])||Math.fround(r[c])!==Math.fround(r[d+c])||Math.fround(o[c])!==Math.fround(o[d+c]))return e}return{positions:p,normals:r.slice(0,a),colors:o.slice(0,a),instanceOffsets:y}}function gd(e){let{backend:t,area:r}=e;if(!e.positions.length){r.mesh=null,r.buildings=0,r.skipped=e.skipped,r.done=!0;return}let o=w.get(t).device,i=e.preparedGeometry||hd(e),n={position:{size:3,data:i.positions instanceof Float32Array?i.positions:new Float32Array(i.positions)},normal:{size:3,data:i.normals instanceof Float32Array?i.normals:new Float32Array(i.normals)},color:{size:3,data:i.colors instanceof Float32Array?i.colors:new Float32Array(i.colors)}};i.instanceOffsets&&(n.instanceOffset={size:4,data:i.instanceOffsets}),t.options.nightLight&&(n.uv={size:2,data:e.uvs instanceof Float32Array?e.uvs:new Float32Array(e.uvs)});let a,s;for(a in n)s=n[a],s.count=s.data.length/s.size,s.buffer=o.createBuffer({size:Math.max(4,s.data.byteLength),usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),o.queue.writeBuffer(s.buffer,0,s.data);let m={device:o,bounds:i.bounds,attributes:n,drawRange:{start:0,count:n.position.count}};r.mesh={...Pe(),device:o,geometry:m,program:Ke(t,{instanced:!!i.instanceOffsets,vertexColors:!0,roofTexture:t.options.roofTexture,wallTexture:t.options.wallTexture,nightLight:!!t.options.nightLight,alphaMode:t.options.nightLight?"BLEND":void 0,doubleSided:!!t.options.nightLight}),id:ut.value++,renderOrder:0,fadeDuration:250,extras:{featureFaces:e.featureFaces,lights:e.lights}},r.buildings=e.featureFaces.length,r.skipped=e.skipped,r.done=!0,Z(r.mesh,L.get(t)),_(t)}var yd=new TextDecoder;function xd(e,t,r){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(r)||e<0||e>26||t<0||r<0||t>=2**e||r>=2**e)throw new Error("Invalid PMTiles tile coordinates");let o=(4**e-1)/3,i=2**e,n,a,s,m;for(n=i/2;n>=1;n/=2)a=t&n?1:0,s=r&n?1:0,o+=n*n*(3*a^s),s||(a&&(t=i-1-t,r=i-1-r),m=t,t=r,r=m);return o}var vd={bytes:null,cursor:0};function Do(e){let{bytes:t}=e,r=0,o,i;for(o=1;o<=2**49;o*=128){if(e.cursor>=t.length)throw new Error("Truncated PMTiles directory");if(i=t[e.cursor++],r+=(i&127)*o,!Number.isSafeInteger(r))throw new Error("Invalid PMTiles directory integer");if(i<128)return r}throw new Error("Invalid PMTiles directory integer")}function wd(e){let t=vd,r=new Uint8Array(e);t.bytes=r,t.cursor=0;try{let o=Do(t);if(o>(r.length-t.cursor)/4)throw new Error("Invalid PMTiles directory count");let i=new Array(o),n=0,a,s,m;for(a=0;a<o;a++){if(n+=Do(t),!Number.isSafeInteger(n)||a&&n<=i[a-1].tileId)throw new Error("Invalid PMTiles directory tile IDs");i[a]={tileId:n,runLength:0,length:0,offset:0}}for(s of i)s.runLength=Do(t);for(s of i)if(s.length=Do(t),!s.length)throw new Error("Invalid PMTiles directory length");for(a=0;a<i.length;a++){if(s=i[a],m=Do(t),!m&&!a)throw new Error("Invalid PMTiles directory offset");s.offset=m?m-1:i[a-1].offset+i[a-1].length}if(t.cursor!==r.length)throw new Error("Trailing PMTiles directory data");return i}finally{t.bytes=null,t.cursor=0}}async function Go(e,t){if(t===1)return e;if(t!==2)throw new Error(`Unsupported PMTiles compression: ${t}`);let r=new Blob([e]),o=new DecompressionStream("gzip");return new Response(r.stream().pipeThrough(o)).arrayBuffer()}async function Md(e,t,r,o){return wd(await Go(await zo(e,t,r),o))}async function bd(e,t,r,o){let i=pr.get(e),n=`${t}:${r}`;i.has(n)||(i.size>=32&&i.delete(i.keys().next().value),i.set(n,Md(e,t,r,o)));let a=i.get(n);try{return await a}catch(s){throw i.get(n)===a&&i.delete(n),s}}function Ld(e,t){let r=0,o=e.length-1,i;for(;r<=o;)i=r+o>>1,e[i].tileId<=t?r=i+1:o=i-1;return e[o]}async function Bd(e,t,r,o,i){if(o-r.tileId>=r.runLength)return;if(r.offset+r.length>t.tileDataLength)throw new Error("PMTiles tile outside data section");let n=await Go(await zo(e,t.tileDataOffset+r.offset,r.length,i),t.tileCompression);return i?.throwIfAborted(),{data:n}}async function Td(e,t,r,o){let i=t.rootDirectoryOffset,n=t.rootDirectoryLength,a=-1,s=-1,m=-1,f,p,c,l;for(f=0;f<4;f++){if(i===a||i===s||i===m)throw new Error("Cyclic PMTiles directory");if(f===0?a=i:f===1?s=i:f===2&&(m=i),p=await bd(e,i,n,t.internalCompression),o?.throwIfAborted(),c=Ld(p,r),!c)return;if(c.runLength)return l=await Bd(e,t,c,r,o),l;if(c.offset+c.length>t.leafDirectoryLength)throw new Error("PMTiles directory outside leaf section");i=t.leafDirectoryOffset+c.offset,n=c.length}throw new Error("PMTiles directory depth exceeds four levels")}async function Gr(e,t,r,o,i){if(!vt.has(e))return e.getZxy(t,r,o,i);if(e.options.archive&&e.options.archive!==e)return Gr(e.options.archive,t,r,o,i);let n=xd(t,r,o);i?.throwIfAborted();let a=await Ar(e);if(i?.throwIfAborted(),!(t<a.minZoom||t>a.maxZoom))return Td(e,a,n,i)}async function Pd(e,t){if(q.get(e)){let{data:o,url:i}=e.options;if(o!==void 0&&i)throw new Error("GeoJSON source requires either data or url");if(o!==void 0)return o;if(!i)throw new Error("GeoJSON source requires either data or url");let n=new URL(i,document.baseURI),a=await fetch(n,{signal:t.request.signal});if(!a.ok)throw new Error(`Unable to load GeoJSON: HTTP ${a.status}`);return a.json()}let r=await Gr(e,t.coords.z,t.coords.x,t.coords.y,t.request.signal);return r?JSON.parse(yd.decode(r.data)):{type:"FeatureCollection",features:[]}}X();function Cd(e,t,r){let o=r.options.crs,i=o.project(D.get(e));return{backend:e,area:t,map:r,crs:o,origin:i,metres:Math.cos(D.get(e).lat*C),positions:[],normals:[],colors:[],uvs:[],featureFaces:[],lights:[],supports:new Set,skipped:0}}var Sd=new URL("leaflet-city-mapper-worker.js",document.currentScript?.src||document.baseURI).href;function Ed(e,t){if(t.type==="abort")e.reject(e.signal.reason);else if(t.type==="error")e.reject(new Error(`Geometry worker failed: ${t.message}`));else if(t.type==="messageerror")e.reject(new Error("Unable to receive geometry worker buffers"));else if(t.data.error){let r=new Error(t.data.error.message);r.name=t.data.error.name,e.reject(r)}else e.resolve(t.data)}function kd(e,t,r){if(e.resolve=t,e.reject=r,e.onEvent=Ed.bind(null,e),e.worker.addEventListener("message",e.onEvent),e.worker.addEventListener("error",e.onEvent),e.worker.addEventListener("messageerror",e.onEvent),e.signal.addEventListener("abort",e.onEvent,{once:!0}),e.signal.aborted){r(e.signal.reason);return}e.worker.postMessage(e.input)}var Hm=new WeakMap;function _d(e){e.closed=!0;let t;for(t of e.entries)t.closed=!0,t.worker.terminate(),t.task&&t.task.reject(new DOMException("Map removed","AbortError"));e.entries.clear(),e.idle.length=0}function Id(e,t){let r=e&&Hm.get(e);e&&!r&&(r={entries:new Set,idle:[],closed:!1},Hm.set(e,r),e.once("unload",_d.bind(null,r)));let o,i;if(r){if(r.closed)throw new DOMException("Map removed","AbortError");for(i=0;i<r.idle.length;i++)if(r.idle[i].url===t)return o=r.idle[i],r.idle.splice(i,1),o;o=r.idle.pop(),o&&(o.closed=!0,o.worker.terminate(),r.entries.delete(o))}return o={url:t,pool:r,worker:new Worker(t,{type:"module"})},r&&r.entries.add(o),o}async function zd(e,t){let r=Id(e.map||e.backend._map,e.backend.options.workerUrl||Sd),{worker:o,pool:i}=r,n={worker:o,signal:t,input:{jobs:e.jobs,nightLight:!!e.backend.options.nightLight}};r.task=n;let a=!1;try{let s=await new Promise(kd.bind(null,n)),m;for(m=0;m<s.ranges.length;m++)Object.assign(e.featureFaces[m],s.ranges[m]);e.positions=s.positions,e.uvs=s.uvs,e.lights=s.lights,e.preparedGeometry=s,a=!0}finally{o.removeEventListener("message",n.onEvent),o.removeEventListener("error",n.onEvent),o.removeEventListener("messageerror",n.onEvent),t.removeEventListener("abort",n.onEvent),r.task=null,a&&i&&!i.closed&&!t.aborted?i.idle.push(r):(r.closed||o.terminate(),i&&i.entries.delete(r)),e.jobs=null}}async function Ad(e,t,r){let o;try{if(await new Promise(requestAnimationFrame),await ke.get(r),t.request.signal.aborted)return;let i=await Pd(e,t);if(t.request.signal.aborted)return;if(i?.type!=="FeatureCollection"||!Array.isArray(i.features))throw new Error("Invalid GeoJSON response");if(q.get(e)&&typeof e.options.style!="function")throw new Error("style must be a function");let n=Cd(e,t,r);e.options.worker!==!1&&typeof Worker<"u"&&i.features.length>=64&&(n.jobs=[]);let a=performance.now()+4;for(o of i.features){if(t.request.signal.aborted)return;if(performance.now()>=a){if(await new Promise(requestAnimationFrame),t.request.signal.aborted)return;a=performance.now()+4}dd(n,o)}if(n.jobs&&await zd(n,t.request.signal),t.request.signal.aborted)return;gd(n)}catch(i){t.request.signal.aborted||(t.error=i.message,e.fire("error",{error:i}))}finally{je.set(e,je.get(e)-1),Ti(e,r)}}function ja(e,t){return e.distance-t.distance}function Od(e,t){let r=[],o,i,n;for(o of e)for(i of V.get(o).values())i.started||i.request.signal.aborted||(n=i.coords&&t.project(t.getCenter(),i.coords.z).divideBy(256),r.push({layer:o,area:i,distance:n?Math.hypot(i.coords.x+.5-n.x,i.coords.y+.5-n.y)/2**i.coords.z:0}));return r.sort(ja),r}function Ti(e,t=e._map){let r=t&&ie.get(t);if(!r)return;let o=[],i,n,a;for(i of U.get(r))Number.isFinite(je.get(i))&&V.get(i)&&(oe.get(i)||q.get(i))&&o.push(i);let s=Od(o,t),m=0;for(i of o)m+=je.get(i);for({layer:a,area:n}of s){if(m>=4)break;je.get(a)>=2||(n.started=!0,je.set(a,je.get(a)+1),m++,Ad(a,n,t))}for(i of o)Oa(i)}var Je=new WeakMap;var be=new WeakMap;function Mt(e,t){t?.model&&(t=null),!(Je.get(e)?.mesh===t?.mesh&&Je.get(e)?.vertexStart===t?.vertexStart)&&(Je.get(e)&&(Je.get(e).mesh.highlight=null),Je.set(e,t),t&&(t.mesh.highlightRange[0]=t.vertexStart,t.mesh.highlightRange[1]=t.vertexEnd,t.mesh.highlight=t.mesh.highlightRange),_(e))}var Ce=new WeakMap;var lr=new WeakMap;var Se=new WeakMap;function bt(e,t,r){let o=Se.get(e);if(!o)return;if(t){o.replaceChildren(e.options.tooltip(t)),o.hidden=!1;let a=Ce.get(e).getBoundingClientRect(),s=r.clientX-a.left,m=r.clientY-a.top;o.style.left=`${s+o.offsetWidth+16>a.width?s-o.offsetWidth-12:s+12}px`,o.style.top=`${m+o.offsetHeight+16>a.height?m-o.offsetHeight-12:m+12}px`}else o.hidden=!0;let i=z.get(e),n;if(i){let a=!1;for(n of U.get(i))if(Se.get(n)&&!Se.get(n).hidden){a=!0;break}a?(lr.get(i)===void 0&&lr.set(i,Ce.get(e).style.cursor),Ce.get(e).style.cursor="pointer"):lr.get(i)!==void 0&&(Ce.get(e).style.cursor=lr.get(i),lr.delete(i))}}function Rr(e,t){t.request.abort();let r;if(t.mesh){Je.get(e)?.mesh===t.mesh&&(Mt(e,null),be.set(e,null),bt(e,null)),Z(t.mesh,null),_(e);let o=t.mesh.geometry;for(r of Object.values(o.attributes))r.buffer.destroy();t.mesh.program.pipelineCache.clear()}}function Dd(e,t){return e.distance-t.distance}function Ur(e){if(!e._map||!z.get(e))return;if(q.get(e)){V.get(e).has("geojson")||V.get(e).set("geojson",{request:new AbortController}),Ti(e);return}if(!R.get(e))return;let t=R.get(e).minZoom,r=e._map.project(e._map.getCenter(),t).divideBy(256).floor(),o=e._map.getBounds(),i=e._map.project(o.getNorthWest(),t).divideBy(256).floor(),n=e._map.project(o.getSouthEast(),t).divideBy(256).floor(),a=e._map.project([R.get(e).maxLat,R.get(e).minLon],t).divideBy(256).floor(),s=e._map.project([R.get(e).minLat,R.get(e).maxLon],t).divideBy(256).floor(),m=new Map,f,p,c,l,u;for(f=Math.max(0,i.x-1,a.x);f<=Math.min(2**t-1,n.x+1,s.x);f++)for(p=Math.max(0,i.y-1,a.y);p<=Math.min(2**t-1,n.y+1,s.y);p++)m.set(`${f}/${p}`,{z:t,x:f,y:p});for([c,l]of V.get(e))m.has(c)||(Rr(e,l),V.get(e).delete(c));let d=[];for([c,u]of m)u.distance=Math.hypot(u.x+.5-r.x,u.y+.5-r.y)/2**t,d.push(u);d.sort(Dd);for(u of d)c=`${u.x}/${u.y}`,V.get(e).has(c)||V.get(e).set(c,{coords:u,request:new AbortController});Ti(e)}function Ro(e){if(!L.get(e)||!D.get(e))return;wt.get(e)==null&&wt.set(e,L.get(e).position[1]);let t=ae.get(e._map),r=t&&Kt(t,D.get(e)),o=Number.isFinite(r)?e.options.terrainOffset??0:0;L.get(e).position[1]=wt.get(e)+(r??0)+o}function Gd(e,t){e.attributes.index?.data instanceof Uint8Array&&(e.attributes.index.data=new Uint16Array(e.attributes.index.data));let r,o,i;for(r in e.attributes)o=e.attributes[r],o.size||=1,o.count=o.data.length/o.size,o.indexFormat=o.data instanceof Uint32Array?"uint32":"uint16",i=o.buffer,o.buffer=t.createBuffer({size:Math.max(4,o.data.byteLength),usage:r==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),t.queue.writeBuffer(o.buffer,0,o.data),i?.destroy();e.device=t,e.drawRange.count=e.attributes.index?.count||e.attributes.position.count}function Rd(e,t){let r,o;for(r in e)r!=="baseTexture"&&r!=="metalTexture"&&r!=="emissiveTexture"&&r!=="occlusionTexture"||(o=e[r],!(!o||o.device===t)&&(o.device=t,o.texture=t.createTexture({size:[o.image.width,o.image.height],format:o.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),o.sampler=t.createSampler(o.samplerOptions),o.uploaded=null))}function Ud(e,t){let r=z.get(t),o;if(e.geometry&&e.geometry.device!==w.get(r).device){let i=e.geometry,n=e.program._layerMaterial,a=w.get(r).device;Gd(i,a),e.bindGroup=null,e.boundTextures?e.boundTextures.length=0:e.boundTextures=[],Rd(n,a),e.program.pipelineCache.clear(),e.program=Ke(t,n),e.device=a}e.texture&&e.texture.device!==w.get(r).device&&(o=e.texture,o.device=w.get(r).device,o.texture=w.get(r).device.createTexture({size:[e.texture.image.width,e.texture.image.height],format:e.texture.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),o.sampler=w.get(r).device.createSampler(o.samplerOptions),o.uploaded=null)}var Uo=new WeakMap;function Fd(e){let t=e.getContainer();if(t.querySelector(".leaflet-webgpu-warning"))return;let r=document.createElement("div");r.className="leaflet-webgpu-warning",r.setAttribute("role","alert"),r.style.cssText="position:absolute;z-index:1000;top:50%;left:50%;transform:translate(-50%,-50%);max-width:calc(100% - 32px);box-sizing:border-box;padding:12px 16px;border:1px solid #c98b24;border-radius:6px;background:#fff8e6;box-shadow:0 3px 12px #0005;color:#30251d;font:14px/1.5 sans-serif;text-align:center;pointer-events:auto",r.append("WebGPU is not available in this browser or device. ");let o=document.createElement("a");o.href="https://developer.mozilla.org/en-US/docs/Web/API/WebGPU_API#browser_compatibility",o.target="_blank",o.rel="noopener noreferrer",o.textContent="Learn more",r.append(o),t.append(r)}function ur(e,t,r){throw Fd(r),st.get(t).reject(e),ie.delete(r),e}async function Nd(e,t){let r;try{r=await navigator.gpu.requestAdapter()}catch(o){ur(o,e,t)}return r||ur(new Error("Unable to acquire a WebGPU adapter"),e,t),r}async function jd(e,t,r){try{return await e.requestDevice()}catch(o){ur(o,t,r)}}function Wd(e){let t=Uo.get(e.currentTarget),r=ie.get(t);if(w.get(r)?.device!==e.currentTarget||!U.get(r))return;let o;for(o of U.get(r))o.fire("error",{error:e.error})}function Zd([e,t]){let r=Uo.get(t),o=ie.get(r);if(!o||w.get(o)?.device!==t)return;let i=new Error(`WebGPU device lost: ${e.message||e.reason}`),n;for(n of U.get(o))n.fire("error",{error:i})}function $d(){return{position:[0,0,0],up:[0,1,0],target:[0,0,0],x:[0,0,0],y:[0,0,0],z:[0,0,0],viewMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],projectionMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],projectionViewMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],viewTransform:new DOMMatrix,projectionTransform:new DOMMatrix,projectionViewTransform:new DOMMatrix,fov:45,aspect:1,near:.1,far:1e4}}var Fo=new Float32Array(20);Fo[0]=Fo[5]=Fo[10]=Fo[15]=1;function Vd(e,t){let r=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"depth"}},{binding:2,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"comparison"}},{binding:3,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"read-only-storage"}}]}),o=w.get(e).device.createBuffer({size:80,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),i=w.get(e).device.createSampler({compare:"less-equal",minFilter:"linear",magFilter:"linear"}),n=w.get(e).device.createBuffer({size:32,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});w.get(e).sunlight={layout:r,buffer:o,sampler:i,lights:n,size:0},w.get(e).device.queue.writeBuffer(o,0,Fo),vn(e,1);let a=document.createElement("canvas");a.width=1,a.height=1,w.get(e).roofFallbackTexture={device:t,texture:t.createTexture({size:[1,1],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:t.createSampler({addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}),image:a,format:"rgba8unorm",srgb:!1,uploaded:null}}var Fr=new WeakMap;var Wa=[];function qd(){let e=Wa.shift();Fr.set(e,!1),!(z.get(e)!==e||!w.get(e))&&(e._map._animatingZoom?_(e):rr(e))}function Pi(){let e=this;Fr.get(e)||(Fr.set(e,!0),Wa.push(e),queueMicrotask(qd))}var No=new WeakMap;function Ci(){No.set(this,null)}var Za=[];function Hd(){let e=Za.shift();z.get(e)===e&&w.get(e)&&rr(e)}function Si(e){let t=this._map;e&&!Re.get(this)&&(Re.set(this,{from:t.getCenter(),zoom:t.getZoom(),to:e.center,targetZoom:e.zoom,start:performance.now()}),t.getContainer().classList.add("leaflet-camera-zoom")),Za.push(this),queueMicrotask(Hd)}function Ei(){let e=this,t;if(ce.get(e))for(t of ce.get(e).keys())t.finish();ce.set(e,null),Re.set(e,null),ke.delete(e._map),e._map.getContainer().classList.remove("leaflet-camera-zoom"),Qi(e._map),No.set(e,null),_(e)}function Yd(e,t,r){Yt.set(e,null),r.className="leaflet-3d",r.style.cssText="position:absolute;top:0;left:0;pointer-events:none",r.setAttribute("role","img"),r.setAttribute("aria-label",e.options.ariaLabel??"3D scene");let o=t.getPane("webgpuPane");o||(o=t.createPane("webgpuPane",t.getContainer()),o.style.zIndex=1,o.style.pointerEvents="none"),o.append(r),t.on("move zoom rotate pitch resize viewreset layeradd layerremove",Pi,e),t.on("zoomstart",Ci,e),t.on("zoomanim",Si,e),t.on("zoomend",Ei,e)}async function Xd(e,t){let r=document.createElement("canvas");navigator.gpu||ur(new Error("Layer3D requires WebGPU"),e,t);let o=await Nd(e,t),i=await jd(o,e,t);Uo.set(i,t),i.addEventListener("uncapturederror",Wd),Promise.all([i.lost,Promise.resolve(i)]).then(Zd);let n=r.getContext("webgpu");n||(i.destroy(),ur(new Error("Unable to create a WebGPU canvas context"),e,t));let a=navigator.gpu.getPreferredCanvasFormat();n.configure({device:i,format:a,alphaMode:"premultiplied"}),t.getContainer().querySelector(".leaflet-webgpu-warning")?.remove(),z.set(e,e),U.set(e,new Set),ne.set(e,D.get(e)),ee.set(e,Pe()),Q.set(e,$d()),w.set(e,{device:i,context:n,format:a,canvas:r,dpr:Math.min(window.devicePixelRatio,2)}),Vd(e,i),Yd(e,t,r)}async function jo(e,t){let r=ie.get(t);st.get(r)&&await st.get(r).promise,r||(r=e,st.set(e,Promise.withResolvers()),st.get(e).promise.catch(at),ie.set(t,r),await Xd(e,t),st.get(e).resolve(),st.delete(r),rr(r),ie.set(t,r));let o=t.options.crs.project(ne.get(r)),i=t.options.crs.project(D.get(e)),n=Math.cos(ne.get(r).lat*C);wt.get(e)==null&&wt.set(e,L.get(e).position[1]),L.get(e).position[0]=(i.x-o.x)*n,L.get(e).position[1]=wt.get(e),L.get(e).position[2]=-(i.y-o.y)*n,Ro(e),L.get(e).scale.fill(n/Math.cos(D.get(e).lat*C)),z.set(e,r),w.set(e,w.get(r)),ee.set(e,ee.get(r)),Q.set(e,Q.get(r)),U.get(r).add(e),Z(L.get(e),ee.get(r)),At(L.get(e),Ud,e),_(r),(R.get(e)&&I.get(e)!=="raster"||q.get(e))&&Ur(e)}var De=new WeakMap;var Kd=new TextDecoder;function Jd(e){if(!e)return!1;let t,r;for(t of e)for(r of t.primitives)if(r.targets||r.mode!==void 0&&r.mode!==4)return!0;return!1}function Qd(e){let t=new DataView(e),r=Kd,o,i,n,a,s;if(t.getUint32(0,!0)===1179937895){if(t.getUint32(4,!0)!==2||t.getUint32(8,!0)!==e.byteLength)throw new Error("Invalid GLB header");let m;for(i=12;i<e.byteLength;){if(i+8>e.byteLength)throw new Error("Truncated GLB chunk");if(n=t.getUint32(i,!0),a=t.getUint32(i+4,!0),i+=8,i+n>e.byteLength)throw new Error("Truncated GLB data");s=e.slice(i,i+n),a===1313821514&&(o=JSON.parse(r.decode(s))),a===5130562&&(m=s),i+=n}if(!o)throw new Error("Missing GLB JSON");m&&(o.buffers[0].binary=m)}else o=JSON.parse(r.decode(e));if(o.skins?.length||o.animations?.length||o.extensionsRequired?.length||Jd(o.meshes))throw new Error("Layer3D supports static triangle glTF models without required extensions");return o}X();b();function $a(e,t){let r=new Float32Array(e.length),o,i,n,a,s,m,f,p,c,l,u,d,y,g,x,v;for(o=0;o<(t?.length||e.length/3);o+=3)for(i=t?t[o]:o,n=t?t[o+1]:o+1,a=t?t[o+2]:o+2,s=e[n*3]-e[i*3],m=e[n*3+1]-e[i*3+1],f=e[n*3+2]-e[i*3+2],p=e[a*3]-e[i*3],c=e[a*3+1]-e[i*3+1],l=e[a*3+2]-e[i*3+2],d=m*l-f*c,y=f*p-s*l,g=s*c-m*p,u=0;u<3;u++)x=u===0?i:u===1?n:a,r[x*3]+=d,r[x*3+1]+=y,r[x*3+2]+=g;for(o=0;o<r.length;o+=3)for(v=Math.hypot(r[o],r[o+1],r[o+2])||1,u=0;u<3;u++)r[o+u]/=v;return r}function Ym(e,t){e.geometry?.attributes.position&&t.push(e);let r;for(r of e.children)Ym(r,t)}function Wo(e,t){if(!De.get(e))return;let r=[];Ym(De.get(e),r);let o,i,n,a,s,m,f,p,c,l,u,d,y,g,x,v,P,B,T,O;if(!ve.get(t)||!e.options.terrainConform){for(o of r)i=o.geometry._terrainBasePositions,i&&(n=o.geometry,a=n.attributes.position,a.data.set(i),o.device.queue.writeBuffer(a.buffer,0,i),s=n._terrainBaseNormals,s&&(n.attributes.normal.data.set(s),o.device.queue.writeBuffer(n.attributes.normal.buffer,0,s)),Be(n));return}we(L.get(e));let K=e._map,G=K.options.crs,N=G.project(ne.get(z.get(e))),J=Math.cos(ne.get(z.get(e)).lat*C),pe=G.scale(de.get(t));for(o of r){for(n=o.geometry,m=n.attributes.position,n._terrainBasePositions||=m.data.slice(),f=n.attributes.normal,n._terrainBaseNormals||=f.data.slice(),m.data.set(n._terrainBasePositions),p=o.worldMatrix,c=new DOMMatrix(p).inverse().toFloat64Array(),l=0;l<m.data.length;l+=3)u=m.data[l],d=m.data[l+1],y=m.data[l+2],g=p[1]*u+p[5]*d+p[9]*y+p[13],x=Math.max(0,Math.min(1,1-(g-L.get(e).position[1])/8)),x&&(v=p[0]*u+p[4]*d+p[8]*y+p[12],P=p[2]*u+p[6]*d+p[10]*y+p[14],B=G.transformation.transform(new h.Point(N.x+v/J,N.y-P/J),pe),T=Kt(t,B),Number.isFinite(T)&&(O=(T-g)*x,m.data[l]+=c[4]*O,m.data[l+1]+=c[5]*O,m.data[l+2]+=c[6]*O));o.device.queue.writeBuffer(m.buffer,0,m.data),f.data.set($a(m.data,n.attributes.index?.data)),o.device.queue.writeBuffer(f.buffer,0,f.data),Be(n)}_(e)}async function eh(e,t){if(e.binary)return;let r=await fetch(new URL(e.uri,t).href);if(!r.ok)throw new Error(`Unable to load model buffer: HTTP ${r.status}`);e.binary=await r.arrayBuffer()}var th={premultiplyAlpha:"none",colorSpaceConversion:"none"};async function rh(e,t,r){let o;if(r.bufferView!==void 0){let i=e.bufferViews[r.bufferView],n=e.buffers[i.buffer].binary;o=new Blob([n.slice(i.byteOffset||0,(i.byteOffset||0)+i.byteLength)],{type:r.mimeType})}else{let i=await fetch(new URL(r.uri,t).href);if(!i.ok)throw new Error(`Unable to load model texture: HTTP ${i.status}`);o=await i.blob()}return createImageBitmap(o,th)}async function oh(e,t,r){let o=[],i;for(i of t.buffers||it)o.push(eh(i,r));await Promise.all(o),await le.get(e).promise;let n=[],a;for(a of t.images||it)n.push(rh(t,r,a));let s=await Promise.all(n);return await ke.get(e._map),s}function ih(e){return{addressModeU:e?.wrapS===33071?"clamp-to-edge":e?.wrapS===33648?"mirror-repeat":"repeat",addressModeV:e?.wrapT===33071?"clamp-to-edge":e?.wrapT===33648?"mirror-repeat":"repeat",magFilter:e?.magFilter===9728?"nearest":"linear",minFilter:e?.minFilter===9728||e?.minFilter===9984||e?.minFilter===9986?"nearest":"linear"}}function ki(e,t,r=!1){let{backend:o,description:i,images:n,textures:a}=e;if(!t)return null;if((t.texCoord||0)!==0||t.extensions)throw new Error("Model textures currently require untransformed TEXCOORD_0 UVs");let s=w.get(o).device,m=`${t.index}:${r}`;if(!a.has(m)){let f=i.textures[t.index],p=i.samplers?.[f.sampler],c=n[f.source],l=r?"rgba8unorm-srgb":"rgba8unorm",u=ih(p);a.set(m,{device:s,texture:s.createTexture({size:[c.width,c.height],format:l,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:s.createSampler(u),samplerOptions:u,format:l,srgb:r,image:c,flipY:!1,uploaded:null})}return a.get(m)}function nh(e,t){let{backend:r}=e,o=t.pbrMetallicRoughness;return{color:o?.baseColorFactor?o.baseColorFactor.slice(0,3):[1,1,1],opacity:o?.baseColorFactor?.[3]??1,metallic:o?.metallicFactor??1,roughness:o?.roughnessFactor??1,baseTexture:ki(e,o?.baseColorTexture,!0),metalTexture:ki(e,o?.metallicRoughnessTexture),emissiveTexture:ki(e,t.emissiveTexture,!0),occlusionTexture:ki(e,t.occlusionTexture),emissive:t.emissiveFactor||[0,0,0],occlusionStrength:t.occlusionTexture?.strength??1,alphaMode:r.options.alphaMode||t.alphaMode||"OPAQUE",alphaCutoff:t.alphaCutoff??.5,doubleSided:t.doubleSided}}function ah(e,t,r){let o={backend:e,description:t,images:r,textures:new Map,materials:[],active:new Set,resources:[]},i;for(i of t.materials||it)o.materials.push(nh(o,i));return o}var sh=[0,0,0,1];var mh=[1,1,1];var fh=[0,0,0];function ph(e){if(e.matrix)return Array.from(e.matrix);let[t,r,o,i]=e.rotation||sh,[n,a,s]=e.scale||mh;return[(1-2*(r*r+o*o))*n,2*(t*r+o*i)*n,2*(t*o-r*i)*n,0,2*(t*r-o*i)*a,(1-2*(t*t+o*o))*a,2*(r*o+t*i)*a,0,2*(t*o+r*i)*s,2*(r*o-t*i)*s,(1-2*(t*t+r*r))*s,0,...e.translation||fh,1]}var ch=[["POSITION","position"],["NORMAL","normal"],["TEXCOORD_0","uv"]];var Va={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array};var lh={SCALAR:1,VEC2:2,VEC3:3,VEC4:4};function uh(e,t,r){return t===Int8Array?e.getInt8(r):t===Uint8Array?e.getUint8(r):t===Int16Array?e.getInt16(r,!0):t===Uint16Array?e.getUint16(r,!0):t===Uint32Array?e.getUint32(r,!0):e.getFloat32(r,!0)}function qa(e,t,r,o,i,n,a,s,m,f){let p=e.bufferViews[a],c=t.BYTES_PER_ELEMENT,l=e.buffers[p.buffer].binary;if(f||=r*c,!l||f<r*c||s<0||(p.byteOffset||0)+p.byteLength>l.byteLength||(m-1)*f+r*c+s>p.byteLength)throw new Error("glTF accessor outside buffer view");let u=new DataView(l),d,y,g,x;for(d=0;d<m;d++){if(x=n?n[d]:d,n&&x>=i)throw new Error("Invalid sparse glTF index");for(y=0;y<r;y++)g=(p.byteOffset||0)+s+d*f+y*c,o[x*r+y]=uh(u,t,g)}}function dh(e,t,r,o,i){let n=t.sparse,a=Va[n.indices.componentType];if(a!==Uint8Array&&a!==Uint16Array&&a!==Uint32Array)throw new Error("Invalid sparse glTF indices");let s=e.bufferViews[n.indices.bufferView],m=(s.byteOffset||0)+(n.indices.byteOffset||0);if(n.count>t.count||(n.indices.byteOffset||0)+n.count*a.BYTES_PER_ELEMENT>s.byteLength)throw new Error("Invalid sparse glTF indices");let f=new a(e.buffers[s.buffer].binary.slice(m,m+n.count*a.BYTES_PER_ELEMENT));qa(e,r,o,i,t.count,f,n.values.bufferView,n.values.byteOffset||0,n.count,0)}function hh(e,t,r,o){let i=new Float32Array(r.length),n;for(n=0;n<r.length;n++)i[n]=e.normalized?Math.max(-1,r[n]/(t===Int8Array?127:t===Int16Array?32767:t===Uint8Array?255:t===Uint32Array?4294967295:65535)):r[n];return{data:i,size:o,indices:r}}function Ha(e,t){let r=e.accessors[t],o=Va[r.componentType],i=lh[r.type];if(!o||!i||!Number.isInteger(r.count)||r.count<0)throw new Error("Invalid glTF accessor");let n=new o(r.count*i);return r.bufferView!==void 0&&qa(e,o,i,n,r.count,null,r.bufferView,r.byteOffset||0,r.count,e.bufferViews[r.bufferView].byteStride),r.sparse&&dh(e,r,o,i,n),r.componentType===5126?{data:n,size:i}:hh(r,o,n,i)}function gh(e,t){let r={},o,i;for([o,i]of ch)t.attributes[o]!==void 0&&(r[i]=Ha(e,t.attributes[o]));if(!r.position)throw new Error("glTF mesh has no positions");let n=r.position.data.length/3;if(r.position.size!==3||n<3)throw new Error("Invalid glTF vertex attributes");let a;for(a of Object.values(r))if(a.data.length/a.size!==n)throw new Error("Invalid glTF vertex attributes");return{attributes:r,vertexCount:n}}function yh(e,t,r,o){if(t.indices!==void 0){let i=Ha(e,t.indices);if(r.index={size:1,data:i.indices},!(i.indices instanceof Uint8Array||i.indices instanceof Uint16Array||i.indices instanceof Uint32Array)||i.size!==1||i.indices.length%3)throw new Error("Invalid glTF triangle indices");let n;for(n of i.indices)if(n>=o)throw new Error("Invalid glTF triangle indices")}else if(o%3)throw new Error("Incomplete glTF triangle")}function xh(e,t,r){let o;r.normal||(o=$a(r.position.data,r.index?.data),r.normal={size:3,data:o});let i=e.materials[t.material]||{color:[1,1,1],metallic:1};if((i.baseTexture||i.metalTexture||i.emissiveTexture||i.occlusionTexture)&&!r.uv)throw new Error("Textured model mesh requires UV coordinates");let n=Ke(e.backend,i);e.resources.push(n);let a=w.get(e.backend).device;r.index?.data instanceof Uint8Array&&(r.index.data=Uint16Array.from(r.index.data));let s,m;for([s,m]of Object.entries(r))m.size||=1,m.count=m.data.length/m.size,m.indexFormat=m.data instanceof Uint32Array?"uint32":"uint16",m.buffer=a.createBuffer({size:Math.max(4,m.data.byteLength),usage:s==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),a.queue.writeBuffer(m.buffer,0,m.data);let f={device:a,attributes:r,drawRange:{start:0,count:r.index?.count||r.position.count}};return e.resources.push(f),{device:a,geometry:f,program:n}}function Xm(e,t){let{backend:r,description:o,active:i}=e;if(i.has(t))throw new Error("Cyclic glTF nodes");let n=o.nodes[t];if(!n)throw new Error("Invalid glTF node");i.add(t);let a={...Pe(),name:n.name};a.matrix=ph(n);let s,m,f,p,c,l,u;if(n.mesh!==void 0)for(s of o.meshes[n.mesh].primitives)m=gh(o,s),f=m.attributes,p=m.vertexCount,yh(o,s,f,p),c=xh(e,s,f),l={...Pe(),device:c.device,geometry:c.geometry,program:c.program,fadeDuration:250,id:ut.value++,renderOrder:0},l.name=o.meshes[n.mesh].name,l.extras=n.extras||{},Z(l,a);for(u of n.children||it)Z(Xm(e,u),a);return i.delete(t),a}function vh(e){let t,r;for(t of e.resources)if(t.attributes)for(r of Object.values(t.attributes))r.buffer.destroy();else t.pipelineCache.clear()}function wh(e,t){let r=[],o;try{for(o of t.nodes)r.push(Xm(e,o))}catch(i){throw vh(e),i}return r}function Mh(e){let t=De.get(e);if(e.options.rotation){let[r,o=r,i=r]=e.options.rotation;t.rotation[0]=r,t.rotation[1]=o,t.rotation[2]=i}if(e.options.scale){let[r,o=r,i=r]=e.options.scale;t.scale[0]=r,t.scale[1]=o,t.scale[2]=i}}async function bh(e){await le.get(e).promise;let t=new URL(Oe.get(e),document.baseURI).href,r=await fetch(t);if(!r.ok)throw new Error(`Unable to load model: HTTP ${r.status}`);let o=await r.arrayBuffer(),i=Qd(o),n=new URL(".",t).href,a=await oh(e,i,n),s=ah(e,i,a),m=i.scenes?.[i.scene||0];if(!m)throw new Error("Missing glTF scene");let f=wh(s,m),p={...Pe(),id:t,extras:i.extras||{}};if(!f.length)throw new Error("Expected a glTF model with a non-empty scene");let c;for(c of f)Z(c,p);De.set(e,p),Mh(e),Z(De.get(e),L.get(e)),Wo(e,ae.get(e._map))}async function Lh(e){try{return L.set(e,Pe()),te.set(e,{origin:[0,0,0],direction:[0,0,0],inverse:new DOMMatrix,meshes:[]}),(oe.get(e)||q.get(e))&&(za.set(e,L.get(e)),oe.get(e)&&R.set(e,await Ar(e))),e._map&&(await jo(e,e._map),le.get(e).resolve()),Oe.get(e)&&await bh(e),z.get(e)&&_(e),e.fire("ready"),e}catch(t){throw e.fire("error",{error:t}),t}}b();b();function Bh(e,t,r){let o=e.closest("label");if(r.classList.contains("layer-count"))e.hasAttribute("aria-label")||e.setAttribute("aria-label",o.textContent.trim()),r.id=`leaflet-layer-count-${h.Util.stamp(t)}`,e.setAttribute("aria-describedby",r.id),o.append(r);else if(r.classList.contains("traffic-status")){let i=o.nextElementSibling;i?.classList.contains("traffic-status-group")||(i=h.DomUtil.create("div","traffic-status-group"),i.style.cssText="display:flex;flex-wrap:wrap;gap:4px 8px;max-width:200px;margin:2px 0 6px 20px;",i.setAttribute("role","group"),i.setAttribute("aria-label","Traffic counts"),o.after(i)),i.append(r)}else o.after(r)}function Th(e,t,r){let o,i;for(o of e.getContainer().querySelectorAll(".leaflet-control-layers-selector"))if(i=e._layers[o.layerId],o.layerId===h.Util.stamp(t)||i instanceof h.LayerGroup&&i.hasLayer(t))return Bh(o,t,r),!0;return!1}function Ya(e){let t=Th(e.map,e.layer,e.element),r=e.onPlace;return r?.(t),t}var Xa=[];function Ph(){let e=Xa.shift();e?.map.hasLayer(e.layer)&&Ya(e)}function Ka(){Xa.push(this),queueMicrotask(Ph)}function Ch(){this.map.off("layeradd layerremove",Ka,this);let e=this.element.parentElement;this.element.remove(),e?.classList.contains("traffic-status-group")&&!e.childElementCount&&e.remove()}function Zo(e,t,r){let o={map:e._map,layer:e,element:t,onPlace:r};return o.map.on("layeradd layerremove",Ka,o),e.once("remove",Ch,o),Ya(o)}function Sh(e,t,r,o){return o?`Unable to load: ${typeof o=="string"?o:o.message}`:`${t} loaded ${Oe.get(e)?"models":"elements"} in the current area${r?`; ${r} blocks loading`:""}`}function Eh(e,t,r,o){let i=fr.get(e),n=Oe.get(e),a=De.get(e);n&&(t=a?1:0);let s=r||(n?!a:!R.get(e)&&!q.get(e)),m=t.toLocaleString("en-US"),f=o?"Error":`${m}${s?"\u2026":""}`,p=Sh(e,m,r,o);i.textContent!==f&&(i.textContent=f),i.title!==p&&(i.title=p),o&&i.getAttribute("role")!=="alert"?i.setAttribute("role","alert"):!o&&i.hasAttribute("role")&&i.removeAttribute("role")}function Km(e){let t=e.target,r=fr.get(t);if(!t._map)return;e.type==="add"&&Zo(t,r);let o=0,i=0,n=e.error,a;if(Number.isFinite(e.loaded))o=e.loaded,i=e.pending??0,n||=e.errors?.[0];else for(a of V.get(t).values())o+=a.buildings??0,!a.done&&!a.error&&i++,n||=a.error;Eh(t,o,i,n)}function Lt(e,t=go){cr.set(e,!0),h.Util.setOptions(e,{ariaLabel:"3D scene",...t}),I.set(e,"3d");let r=!q.get(e)&&/\.(glb|gltf)(?:[?#]|$)/i.test(e.options.url);if(Oe.set(e,r?e.options.url:null),oe.set(e,e.options.url&&!r&&!q.get(e)?new URL(e.options.url,document.baseURI).href:null),pr.set(e,new Map),e.options.center&&D.set(e,new h.LatLng(e.options.center[0],e.options.center[1])),V.set(e,new Map),je.set(e,0),oe.get(e)||q.get(e)||r){let o=h.DomUtil.create("small","layer-count");o.style.cssText="float:right;margin-left:12px;color:#555;font-variant-numeric:tabular-nums",fr.set(e,o),e.on("add error",Km),e.on("ready progress",h.Util.throttle(Km,250,e))}le.set(e,Promise.withResolvers()),re.set(e,Promise.resolve().then(Lh.bind(null,e))),re.get(e).catch(at)}b();var kh=new Map;var _h=new Map;function Ih(e,t){return e.tile.coords.z-t.tile.coords.z||e.distance-t.distance}var _i=[null];var Gt=new WeakMap;var We=new WeakMap;var Rt=new WeakMap;X();var Ja={x:0,y:0};var Ee=new WeakMap;var ue=new WeakMap;var Bt=new WeakMap;var Ii={size:[null,null],format:"r32float",usage:null};var Qa={texture:null};var Jm={bytesPerRow:null};var es=[null,null];function zh(e,t,r,o){let i,n,a;for(i=0;i<256;i++)for(n=0;n<256;n++)a=t[i*256+n],!(!Number.isFinite(a)||a<=-1e3)&&(e.elevations[r+i*o*256+n]=a,e.low=Math.min(e.low,a),e.high=Math.max(e.high,a))}function Ah(e,t){let r=t.max.x-t.min.x+1,o=t.max.y-t.min.y+1,n={elevations:new Float32Array(r*o*65536).fill(-1e9),low:1/0,high:-1/0},a,s,m,f,p,c;for([a,s]of e)m=a.split("/"),f=Number(m[0]),p=Number(m[1]),c=(p-t.min.y)*256*r*256+(f-t.min.x)*256,zh(n,s,c,r);return n}function Oh(e,t){let r=w.get(e).device;if(ue.get(e)?.device===r)return ue.get(e);let o=Gt.get(e),i=o.max.x-o.min.x+1,n=o.max.y-o.min.y+1,{elevations:a,low:s,high:m}=Ah(Ye.get(e),o);return Ee.get(e)&&F(e,Ee.get(e).texture),Ee.set(e,{texture:r.createTexture((Ii.size[0]=i*256,Ii.size[1]=n*256,Ii.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST,Ii)),low:Number.isFinite(s)?s:We.get(e),high:Number.isFinite(m)?m:We.get(e)}),r.queue.writeTexture((Qa.texture=Ee.get(e).texture,Qa),a,(Jm.bytesPerRow=i*1024,Jm),(es[0]=i*256,es[1]=n*256,es)),Qa.texture=null,Bt.set(e,new Map),ue.set(e,Ke(e,{baseTexture:t,unlit:!0,terrain:Ee.get(e),alphaMode:"BLEND",depthWrite:!0,doubleSided:e.options.doubleSided})),ue.get(e)}var ts={size:null,usage:null};function Dh(e){let t=(e+1)**2,r=new Float32Array(t*3),o=new Float32Array(t*3),i=new Float32Array(t*2),n=new Uint16Array(e*e*6),a,s,m,f,p,c,l=0,u=0;for(a=0;a<=e;a++)for(s=0;s<=e;s++)r[l*3]=s/e,r[l*3+2]=a/e,o[l*3+1]=1,i[l*2]=s/e,i[l*2+1]=a/e,l++,a<e&&s<e&&(m=a*(e+1)+s,f=m+1,p=m+e+1,c=p+1,n[u++]=m,n[u++]=p,n[u++]=f,n[u++]=f,n[u++]=p,n[u++]=c);return{position:{size:3,data:r},normal:{size:3,data:o},uv:{size:2,data:i},index:{data:n}}}function Gh(e,t){let r=w.get(e).device,o=Bt.get(e).get(t);if(!o){o=Dh(t);let i,n;for([i,n]of Object.entries(o))n.size||=1,n.count=n.data.length/n.size,n.indexFormat="uint16",n.buffer=r.createBuffer((ts.size=Math.max(4,n.data.byteLength),ts.usage=i==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,ts)),r.queue.writeBuffer(n.buffer,0,n.data);Bt.get(e).set(t,o)}return o}function Rh(e,t,r,o){let i=We.get(e),n=Math.min(Ee.get(e).low,i)-i,a=Math.max(Ee.get(e).high,i)-i;return{device:w.get(e).device,attributes:t,drawRange:{start:0,count:t.index.count},bounds:{min:[0,n,0],max:[1,a,1],center:[.5,(n+a)/2,.5],radius:Math.hypot(r,a-n,o)/2/Math.max(r,1,o)}}}async function Uh(e,t,r,o){if(!await Rt.get(e)||!e._map||ae.get(e._map)!==e||me.get(t)!==e||o.request.signal.aborted||!A.get(t).has(`${r.z}/${r.x}/${r.y}`)||A.get(e).has(o))return;let n=Math.max(1,Math.min(64,256/2**(r.z-de.get(e)))),a=e._map,s=a.options.crs,m=s.project(D.get(e)),f=Math.cos(D.get(e).lat*C),p=s.scale(r.z),c=2**(de.get(e)-r.z),l=Ja;l.x=r.x*256,l.y=r.y*256;let u=s.transformation.untransform(l,p);l.x=(r.x+1)*256,l.y=(r.y+1)*256;let d=s.transformation.untransform(l,p),y=w.get(e).device,g=o.texture,x=Oh(e,g),v=Gh(e,n),P=We.get(e),B=(d.x-u.x)*f,T=-(d.y-u.y)*f,O=Rh(e,v,B,T),K={position:[(u.x-m.x)*f,0,-(u.y-m.y)*f],rotation:[0,0,0],scale:[B,1,T],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],visible:!0,device:y,geometry:O,program:x,texture:g,terrain:[r.x*256*c-Gt.get(e).min.x*256,r.y*256*c-Gt.get(e).min.y*256,256*c,P],tile:o,opacity:t.options.opacity??1,id:ut.value++,renderOrder:t.options.zIndex||0,fadeDuration:250,fadeStart:o.loadedAt,ground:!0,_rasterSource:t};o.mesh.visible=!1,Z(K,L.get(e)),_(e),A.get(e).set(o,K)}async function rs(e,t,r){if(me.get(e)&&r.done&&!r.request.signal.aborted&&A.get(e).get(`${t.z}/${t.x}/${t.y}`)===r)try{await Uh(me.get(e),e,t,r)}catch(o){e.fire("tileerror",{tile:r,coords:t,error:o})}}var Tt=new WeakMap;X();var zi={size:[null,null],format:"rgba8unorm",usage:null};var Fh={addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",magFilter:"linear",minFilter:"linear"};var os={size:null,usage:null};var Nh=[0,0,0,1,0,0,0,0,1,1,0,1];var jh=[0,1,0,0,1,0,0,1,0,0,1,0];var Wh=[0,0,1,0,0,1,1,1];var Zh=[0,2,1,1,2,3];function $h(e){let t={position:{size:3,data:new Float32Array(Nh)},normal:{size:3,data:new Float32Array(jh)},uv:{size:2,data:new Float32Array(Wh)},index:{data:new Uint16Array(Zh)}},r,o;for([r,o]of Object.entries(t))o.count=o.data.length/(o.size||1),o.indexFormat="uint16",o.buffer=e.createBuffer((os.size=o.data.byteLength,os.usage=r==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,os)),e.queue.writeBuffer(o.buffer,0,o.data);return{device:e,attributes:t,drawRange:{start:0,count:t.index.count}}}function Vh(e,t){let r=w.get(e).device,o={device:r,texture:r.createTexture((zi.size[0]=t.image.width,zi.size[1]=t.image.height,zi.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT,zi)),sampler:r.createSampler(Fh),image:t.image,format:"rgba8unorm",srgb:!1,uploaded:null},i=Br,n=Kr,a=Jr;i.source=t.image,i.flipY=!1,n.texture=o.texture,a[0]=t.image.width,a[1]=t.image.height,r.queue.copyExternalImageToTexture(i,n,a),i.source=null,n.texture=null,o.uploaded=t.image,ue.get(e)||ue.set(e,Ke(e,{baseTexture:o,unlit:!0,alphaMode:"BLEND",doubleSided:e.options.doubleSided})),Tt.get(e)||Tt.set(e,$h(r));let{coords:s}=t,m=e._map.options.crs,f=m.project(D.get(e)),p=Math.cos(D.get(e).lat*C),c=m.scale(s.z),l=Ja;l.x=s.x*256,l.y=s.y*256;let u=m.transformation.untransform(l,c);l.x=(s.x+1)*256,l.y=(s.y+1)*256;let d=m.transformation.untransform(l,c),y=(d.x-u.x)*p,g=-(d.y-u.y)*p;t.texture=o,t.mesh={position:[(u.x-f.x)*p,0,-(u.y-f.y)*p],rotation:[0,0,0],scale:[y,1,g],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],visible:!0,device:r,geometry:Tt.get(e),program:ue.get(e),texture:o,opacity:e.options.opacity,id:ut.value++,renderOrder:e.options.zIndex||0,tile:t,fadeDuration:250,ground:!0,_rasterSource:e},Z(t.mesh,L.get(e))}async function qh(e,t){try{await re.get(e);let r=await Gr(e.options.archive,t.coords.z,t.coords.x,t.coords.y,t.request.signal);if(t.request.signal.aborted){r?.image?.close();return}if(!r)throw new Error(`Tile ${t.coords.z}/${t.coords.x}/${t.coords.y} is not in the offline archive`);try{if(r.image)t.image=r.image;else{_i[0]=r.data;let o=new Blob(_i);_i[0]=null,t.image=await createImageBitmap(o)}}catch{throw _i[0]=null,new Error(`Unable to decode tile ${t.coords.z}/${t.coords.x}/${t.coords.y}`)}if(t.request.signal.aborted){t.image.close(),t.image=null;return}Vh(e,t),t.loadedAt=performance.now(),t.done=!0,Te.set(e,(Te.get(e)||0)+1),rs(e,t.coords,t),e.fire("tileload",{tile:t,coords:t.coords}),_(e)}catch(r){if(t.request.signal.aborted)return;t.error=r.message,Te.set(e,(Te.get(e)||0)+1),e.fire("tileerror",{tile:t,coords:t.coords,error:r}),e.fire("error",{error:r,coords:t.coords})}finally{se.set(e,se.get(e)-1),e._map&&(is(e),ao(e),se.get(e)||e.fire("load"),_(e))}}function Hh(e,t){t.started=!0;let r=se.get(e)===0;return se.set(e,se.get(e)+1),e.fire("tileloadstart",{tile:t,coords:t.coords}),r&&e.fire("loading"),qh(e,t)}function is(e){let t=e._map;if(!t)return;let r=t.project(t.getCenter(),0).divideBy(256),o=[],i,n;for(i of A.get(e).values())i.started||i.request.signal.aborted||({coords:n}=i,o.push({tile:i,distance:Math.hypot((n.x+.5)/2**n.z-r.x,(n.y+.5)/2**n.z-r.y)}));o.sort(Ih);for({tile:i}of o){if(se.get(e)>=4)break;Hh(e,i)}}function Yh(e,t){let r=A.get(e),o,i,n;for([o,i]of r)!t.has(o)&&!i.done&&no(e,i);for([o,n]of t)r.has(o)||(i={coords:n,request:new AbortController,done:!1},r.set(o,i))}var dr=[0,0];var hr=[0,0];function Xh(e,t,r){let o=e.getBounds(),i=e.project(o.getNorthWest(),r).divideBy(256).floor(),n=e.project(o.getSouthEast(),r).divideBy(256).floor();dr[0]=t.maxLat,dr[1]=t.minLon,hr[0]=t.minLat,hr[1]=t.maxLon;let a=t.maxLat===void 0||t.minLon===void 0?null:e.project(dr,r).divideBy(256).floor(),s=t.minLat===void 0||t.maxLon===void 0?null:e.project(hr,r).divideBy(256).floor(),m=e.project(e.getCenter(),r).divideBy(256).floor();return{minX:Math.max(0,i.x,a?.x??0,m.x-6),maxX:Math.min(2**r-1,n.x,s?.x??2**r-1,m.x+6),minY:Math.max(0,i.y,a?.y??0,m.y-6),maxY:Math.min(2**r-1,n.y,s?.y??2**r-1,m.y+6)}}function as(e){let t=e._map;if(!t||!z.get(e)||!R.get(e))return;let r=Math.max(R.get(e).minZoom??0,Math.min(Math.round(t.getZoom()),e.options.maxZoom,e.options.maxNativeZoom));Qt.set(e,r);let o=Xh(t,R.get(e),r),i=kh;i.clear();let n,a,s,m,f;for(n=o.minX;n<=o.maxX;n++)for(a=o.minY;a<=o.maxY;a++)i.set(`${r}/${n}/${a}`,{z:r,x:n,y:a});Ht.set(e,new Set(i.keys()));let p=_h;p.clear();let c=Math.max(R.get(e).minZoom??0,r-2),l=2**(r-c);if(c<r)for([s,m]of i)A.get(e).get(s)?.done||(f={z:c,x:Math.floor(m.x/l),y:Math.floor(m.y/l)},p.set(`${f.z}/${f.x}/${f.y}`,f));let u=new Map(p);for([s,m]of i)u.set(s,m);i.clear(),p.clear(),Yh(e,u),is(e),ao(e)}function Kh(e){let t=as.bind(null,e);return{moveend:t,zoomend:t,rotate:t,pitch:t,resize:t}}async function Jh(e,t){let r=await Ar(t);return e.options.archive=t,R.set(e,r),e.options.maxNativeZoom===void 0&&(e.options.maxNativeZoom=r.maxZoom),e.options.maxZoom=Math.max(e.options.minZoom||0,e.options.maxZoom),e.fire("ready"),e}function Qh(e,t){throw e.fire("error",{error:t}),t}function $o(e,t){if(!A.get(e)||me.get(e)===t)return;let r;for(r of A.get(e).values())me.get(e)&&io(me.get(e),r),r.mesh&&(r.mesh.visible=!0,Z(r.mesh,L.get(e)));if(me.set(e,t||null),t)for(r of A.get(e).values())r.done&&rs(e,r.coords,r)}async function eg(e,t,r){try{await r,le.get(e).resolve(),$o(e,ae.get(t))}catch(o){e.fire("error",{error:o})}}async function tg(e,t,r){try{await Promise.all([r,re.get(e)]),e._map===t&&t.hasLayer(e)&&as(e)}catch(o){e.fire("error",{error:o})}}function rg(e,t){D.get(e)||D.set(e,t.getCenter());let r=jo(e,t);eg(e,t,r),tg(e,t,r)}function og(e){let t,r;for(t of A.get(e).values())no(e,t);if(ue.get(e)?.pipelineCache.clear(),ue.set(e,null),Tt.get(e)){for(r of Object.values(Tt.get(e).attributes))F(e,r.buffer);Tt.set(e,null)}}var gr=new WeakMap;var Nr=new WeakMap;var Pt=new WeakMap;var jr=new WeakMap;var yr=new WeakMap;var xr=new WeakMap;var Vo=new WeakMap;var ss=new WeakMap;var qo=new WeakMap;var vr=new WeakMap;var wr=new WeakMap;var Ut=new WeakMap;var ms=new WeakMap;var fs={_3d:cr,_added:le,_areas:V,_bridgeMesh:Nr,_bridges:rt,_cameraZIndexOffset:Tr,_countStatus:fr,_cursor:lr,_dem:Ee,_directories:pr,_etag:Io,_fadeFrame:xr,_fadeVersion:Vo,_frame:et,_geojson:q,_header:bi,_inflight:je,_layers:U,_loadingTiles:se,_nativeGPU:xe,_pointerEvents:gr,_pruneAfter:zt,_pruneVersion:ci,_pruneWanted:li,_queued:Fr,_rasterGeometry:Tt,_rasterProgram:ue,_rasterTiles:A,_rasterVersion:Te,_rendererReady:st,_roofRaster:Y,_roofRasters:si,_sceneOrigin:ne,_shadowMeshes:_t,_shared:z,_size:Yt,_terrain3D:me,_terrainArchive:ss,_terrainBaseY:wt,_terrainBounds:Gt,_terrainController:qo,_terrainGrids:Bt,_terrainLoading:vr,_terrainOriginElevation:We,_terrainPromise:Rt,_terrainReady:ve,_terrainRequest:Mn,_terrainTiles:Ye,_terrainZoom:de,_tileZoom:Qt,_tooltip:Se,_type:Ut,_visibleMeshes:Lr,_wantedRasterTiles:Ht,_zoomLevel:No,_zoomTransitions:ce,_zoomView:Re,camera:Q,container:Ce,control:Pt,eventMap:jr,events:yr,group:za,header:R,highlightedFeature:Je,hoveredFeature:be,kind:I,location:D,model:De,modelUrl:Oe,raycaster:te,ready:re,renderer:w,root:L,scene:ee,terrainSource:wr,url:oe,walker:ms};b();var ig=["_layers","_sceneOrigin","_size","_zoomLevel","_zoomTransitions","_zoomView","_cursor","_roofRaster"];function Ho(e){be.set(e,null),Mt(e,null),bt(e,null),e.fire("featurehover",{feature:null})}var ag=["_layers","_sceneOrigin","_size","_zoomLevel","_cursor"];async function sg(e,t){try{await e.device.queue.onSubmittedWorkDone(),e.depthTexture?.destroy(),e.roofFallbackTexture?.texture?.destroy(),e.uniformBuffer?.destroy(),e.sunlight?.texture?.destroy(),e.sunlight?.buffer?.destroy(),e.sunlight?.lights?.destroy()}catch(r){t.fire("error",{error:r})}e.device.destroy()}function mg(e,t){if(Y.get(e)&&F(e,Y.get(e).texture.texture),Y.set(e,null),ce.get(e)){let i;for(i of ce.get(e).keys())i.play()}ce.set(e,null),Re.set(e,null),ke.delete(t),t.getContainer().classList.remove("leaflet-camera-zoom");let r=w.get(e);r.canvas.remove(),sg(r,e),ie.delete(t);let o;for(o of ag)fs[o].delete(e)}function Yo(e,t){le.set(e,Promise.withResolvers()),Ce.get(e)&&(Ho(e),h.DomEvent.off(Ce.get(e),gr.get(e),e),Ce.set(e,null));let r,o,i,n;for(r of V.get(e).values())Rr(e,r);V.get(e).clear(),Se.get(e)?.remove(),Se.set(e,null),(oe.get(e)||q.get(e))&&Oa(e,!1);let a=z.get(e);if(a){if(Z(L.get(e),null),U.get(a).delete(e),a===e)if(t.off("move zoom rotate pitch resize viewreset layeradd layerremove",Pi,e),t.off("zoomstart",Ci,e),t.off("zoomanim",Si,e),t.off("zoomend",Ei,e),wn(e),U.get(e).size){let s=U.get(e).values().next().value;for(o of ig)n=fs[o],n.set(s,n.get(e)),n.delete(e);for(i of U.get(s))z.set(i,s);ie.set(t,s),t.on("move zoom rotate pitch resize viewreset layeradd layerremove",Pi,s),t.on("zoomstart",Ci,s),t.on("zoomanim",Si,s),t.on("zoomend",Ei,s),_(s)}else mg(e,t);else _(a);z.set(e,null),w.set(e,null),ee.set(e,null),Q.set(e,null)}}function fg(e,t){og(e),me.set(e,null),Yo(e,t)}b();function ps(e,t){I.set(e,"raster"),t={ariaLabel:"PMTiles raster",maxZoom:18,opacity:1,zIndex:0,...t},h.Util.setOptions(e,t),L.set(e,Pe()),V.set(e,new Map),A.set(e,new Map),se.set(e,0),le.set(e,Promise.withResolvers()),oe.set(e,new URL(t.url,document.baseURI).href),pr.set(e,new Map),re.set(e,Promise.resolve(e.options.archive||e).then(Jh.bind(null,e)).catch(Qh.bind(null,e)))}var pg=Object.freeze([]);function cg(e){I.get(e)==="raster"&&$o(e,null)}function lg(e,t){qo.get(e)?.abort(),vr.set(e,!1),ve.set(e,!1),t.eachLayer(cg);let r,o,i,n;for(r of A.get(e).keys())io(e,r);ae.get(t)===e&&ae.delete(t);for(o of Object.values(t._layers))Wo(o,null),Ro(o);t.fire("terrainchange"),Ye.get(e).clear(),We.set(e,0),Rt.set(e,null),ue.get(e)&&ue.get(e).pipelineCache.clear(),ue.set(e,null),Ee.get(e)&&F(e,Ee.get(e).texture),Ee.set(e,null);for(i of Bt.get(e)?.values()||pg)for(n of Object.values(i))F(e,n.buffer);Bt.set(e,null),rt.set(e,null),_e(e,Nr.get(e)),Nr.set(e,null),Yo(e,t)}async function ug(e){let{backend:t,archive:r,controller:o,tiles:i}=e,n,a;for(;e.next<i.length;){if(o.signal.throwIfAborted(),n=i[e.next++],a=await Gr(r,n.z,n.x,n.y,o.signal),!a||a.data.byteLength!==256*256*4)throw new Error(`Missing or invalid Float32 terrain tile ${n.z}/${n.x}/${n.y}`);Ye.get(t).set(`${n.x}/${n.y}`,new Float32Array(a.data))}}function dg(e){if(!e.ok)throw new Error(`Bridges: HTTP ${e.status}`);return e.json()}b();function hg(e,t){let r=e._map;de.set(e,t.maxZoom),dr[0]=t.maxLat,dr[1]=t.minLon;let o=r.project(dr,de.get(e)).divideBy(256).floor();hr[0]=t.minLat,hr[1]=t.maxLon;let i=r.project(hr,de.get(e)).divideBy(256).floor();Gt.set(e,new h.Bounds(o,i));let n=[],a=r.project(r.getCenter(),de.get(e)).divideBy(256),s,m;for(s=o.x;s<=i.x;s++)for(m=o.y;m<=i.y;m++)n.push({z:de.get(e),x:s,y:m,distance:Math.hypot(s+.5-a.x,m+.5-a.y)});return n.sort(ja),n}X();b();function gg([e,t,r],o,i,n,a){let s=o.project(new h.LatLng(t,e));return[(s.x-i.x)*n,r-a,-(s.y-i.y)*n]}function yg(e,t){let r=[],o=0,i,n,a;for(i of e){for(n=[],a=0;a<i.length;a++)n.push({x:t[o+a][0],y:t[o+a][1]});r.push(n),o+=i.length}return r}function xg(e,t,r){let o=[],i=1/0,n=1/0,a=-1/0,s=-1/0,m,f,p,c,l,u,d,y;for(m of r){f=[];for(p of m)f.push(t[p]);o.push(f)}for(c of t)i=Math.min(i,c[0]),n=Math.min(n,c[1]),a=Math.max(a,c[0]),s=Math.max(s,c[1]);let g={triangles:o,min:[i,n],max:[a,s]};for(l=Math.floor(g.min[0]/64);l<=Math.floor(g.max[0]/64);l++)for(u=Math.floor(g.min[1]/64);u<=Math.floor(g.max[1]/64);u++)d=`${l}/${u}`,y=rt.get(e).get(d),y||rt.get(e).set(d,y=[]),y.push(g)}function vg(e,t,r){let{position:o,normal:i,color:n}=e,a,s,m,f,p,c,l,u,d;for([a,s,m]of r)for(f=t[a],p=t[s],c=t[m],(p[2]-f[2])*(c[0]-f[0])-(p[0]-f[0])*(c[2]-f[2])<0&&(l=s,s=m,m=l),u=0;u<6;u++)l=u===0||u===3?a:u===1||u===5?s:m,d=t[l],o.push(d[0],d[1]-(u>=3?1.2:0),d[2]),i.push(0,u>=3?-1:1,0),n.push(.6,.58,.54)}function wg(e,t,r){let{position:o,normal:i,color:n}=e,a=Math.hypot(r[0]-t[0],r[2]-t[2])||1,s=(r[2]-t[2])/a,m=-(r[0]-t[0])/a,f,p;for(f=0;f<6;f++)p=f===0||f===3||f===5?t:r,o.push(p[0],p[1]-(f===2||f>=4?1.2:0),p[2]),i.push(s,0,m),n.push(.6,.58,.54)}function Mg(e,t,r){let o=0,i,n;for(i of r){for(n=0;n<i.length;n++)wg(e,t[o+n],t[o+(n+1)%i.length]);o+=i.length}}function bg(e,t){let{backend:r,map:o,zoom:i,crs:n,origin:a,metres:s,base:m}=e,f=[],p,c,l,u,d,y,g,x,v,P,B;for(p of t)c=p.slice(0,-1),c.length>=3&&f.push(c);if(!f.length)return;let T=[],O=[];for(p of f)for([l,u,d]of p)y=o.project([u,l],i),T.push([y.x,y.y,d]);for(p of f)for(g of p)O.push(gg(g,n,a,s,m));try{x=yg(f,T),[v,...P]=x,B=ho(v,P)}catch{return}xg(r,T,B),vg(e,O,B),Mg(e,O,f)}function Lg(e,t){let r=e._map,o=r.options.crs,i=de.get(e),n=o.project(D.get(e)),a=Math.cos(D.get(e).lat*C),s=L.get(e).position[1],m=[],f=[],p=[];rt.set(e,new Map);let c={backend:e,map:r,crs:o,zoom:i,origin:n,metres:a,base:s,position:m,normal:f,color:p},l,u,d;for({geometry:l}of t.features)if(!(l.type!=="Polygon"&&l.type!=="MultiPolygon"))for(u=l.coordinates,d=0;d<(l.type==="Polygon"?1:u.length);d++)bg(c,l.type==="Polygon"?u:u[d]);m.length&&Nr.set(e,er(e,{position:m,normal:f,color:p}))}function Bg(e,t,r){ve.set(e,!0),We.set(e,Kt(e,D.get(e))??0);let o;for(o of Object.values(t._layers))Ro(o),Wo(o,e);r&&Lg(e,r),t.fire("terrainchange"),_(e),e.fire("terrainready")}async function cs(e){if(vr.get(e)||!e._map)return;vr.set(e,!0),ve.set(e,!1);let t=new AbortController;qo.set(e,t);let r;try{if(!wr.get(e))throw new Error("Terrain layer requires a PMTiles or COG elevation archive");let o=Un({source:{type:e.options.asset!==void 0||/\.tiff?(?:[?#]|$)/i.test(wr.get(e))?"cog":"pmtiles",url:wr.get(e),archive:e.options.archive,asset:e.options.asset}});ss.set(e,o),await re.get(o);let i=R.get(o);if(i.tileType!==0||i.minZoom!==i.maxZoom)throw new Error("Expected a single-zoom Float32 terrain archive");let n=e._map,a=hg(e,i),s={backend:e,archive:o,controller:t,tiles:a,next:0},m=[];for(r=0;r<Math.min(4,a.length);r++)m.push(ug(s));await Promise.all(m);let f=e.options.bridges&&await fetch(e.options.bridges,{signal:t.signal}).then(dg);return t.signal.aborted||e._map!==n?void 0:(Bg(e,n,f),!0)}catch(o){return t.signal.aborted||e.fire("error",{error:o}),!1}finally{vr.set(e,!1)}}b();function ls(e,t){let r=De.get(e);if(!L.get(e)||!Q.get(e))return null;let o,i,n,a,s,m,f;for(o of Wn(e,t,L.get(e).children,!!r)){if(r){for(i=o.object;i&&i!==r;)i=i.parent;if(i===r)return{id:r.id,properties:r.extras,model:r,mesh:o.object,point:o.point}}if(n=o.object.extras?.featureFaces,!!n)for(a=0,s=n.length-1;a<=s;)if(m=a+s>>1,f=n[m],o.faceIndex<f.faceStart)s=m-1;else if(o.faceIndex>=f.faceEnd)a=m+1;else return{...f,mesh:o.object,point:o.point}}return null}function Tg(e,t){if(t.buttons||e._map.dragging?.moving()||e._map._animatingZoom){be.get(e)&&Ho(e);return}be.set(e,ls(e,t)),Mt(e,be.get(e)),bt(e,be.get(e),t),e.fire("featurehover",{feature:be.get(e),originalEvent:t})}function Pg(e){Tg(this,e)}function Cg(e,t){let r=ls(e,t);be.set(e,r),Mt(e,r),bt(e,r,t),e.fire("featureclick",{feature:r,originalEvent:t})}function Sg(e){Cg(this,e)}function Eg(){Ho(this)}async function kg(e,t){try{await jo(e,t),le.get(e).resolve()}catch(r){e.fire("error",{error:r})}}function us(e,t){if(!D.get(e)){let r=t.getCenter();D.set(e,new h.LatLng(r.lat,r.lng))}(oe.get(e)||q.get(e)||e.options.tooltip||Oe.get(e))&&(Ce.set(e,t.getContainer()),gr.get(e)||gr.set(e,{mousemove:Pg,click:Sg,mouseleave:Eg}),e.options.tooltip&&(Se.set(e,h.DomUtil.create("div","leaflet-3d-tooltip",Ce.get(e))),Se.get(e).hidden=!0,Se.get(e).setAttribute("role","tooltip"),Se.get(e).setAttribute("aria-live","polite"),Se.get(e).style.cssText="position:absolute;z-index:600;max-width:220px;padding:10px 12px;border:1px solid #6b5140;border-radius:6px;background:#fffaf0;box-shadow:0 3px 12px #0005;color:#30251d;font:13px/1.45 sans-serif;pointer-events:none"),h.DomEvent.on(Ce.get(e),gr.get(e),e)),L.get(e)&&kg(e,t)}function _g(){cs(this.backend).then(this.resolve,this.reject)}function Ig(e){I.get(e)==="raster"&&$o(e,this)}function zg(e,t){if(ae.get(t)&&ae.get(t)!==e)throw new Error("Only one terrain layer can be active per map");if(ae.set(t,e),us(e,t),L.get(e))Rt.set(e,cs(e));else{let r=Promise.withResolvers();Rt.set(e,r.promise),e.once("ready",_g,{backend:e,...r})}t.eachLayer(Ig,e),t.fire("terrainchange")}function Ag(e,t){let r=t.url,o={...t};delete o.url,Lt(e,o),wr.set(e,r),Ye.set(e,new Map),A.set(e,new Map),ve.set(e,!1),I.set(e,"terrain")}b();var Xo=new WeakMap;var Ai=new WeakMap;var Oi=new WeakMap;b();Jn();X();H();W();function Og(e,t,r,o,i){let[n,a,s]=e,m=-n*Math.sin(o)*Math.sin(r)-a*Math.cos(r)-s*Math.cos(o)*Math.sin(r);return m>0?(i||={},i.left=t.x/2+t.y*1.5*(n*Math.cos(o)-s*Math.sin(o))/m,i.top=t.y/2-t.y*1.5*(-n*Math.sin(o)*Math.cos(r)+a*Math.sin(r)-s*Math.cos(o)*Math.cos(r))/m,i):null}function Qm(e,t,r,o,i,n,a){if(e.hidden=!0,!r||!t||t.altitude<=0)return;e.parentNode!==r&&r.append(e);let s=Og(t.direction,o,i,n,a);if(!s)return;let{left:m,top:f}=s;e.hidden=m<0||m>o.x||f<0||f>r.clientHeight||r.style.display==="none",e.style.left=`${m}px`,e.style.top=`${f}px`}function Ft({map:e,originalSky:t,sunDisc:r,moonDisc:o,projection:i}){let n=tt.get(e),a=Ne.get(e);n?e.getContainer().style.setProperty("--leaflet-sky-background",n.background):t?e.getContainer().style.setProperty("--leaflet-sky-background",t):e.getContainer().style.removeProperty("--leaflet-sky-background");let s=e.getSize(),m=k(e)*C,f=S(e)*C;Qm(r,n,a,s,m,f,i),Qm(o,n?.moon,a,s,m,f,i)}var Dg=[[-18,[3,7,20],[17,28,54],[.025,.04,.09]],[-6,[37,53,84],[182,106,86],[.12,.1,.14]],[0,[101,131,171],[246,170,115],[.38,.24,.18]],[10,[74,147,208],[197,221,237],[.8,.75,.68]],[25,[53,144,213],[223,238,250],[1,1,1]]];var ef=[0,0,0];function ds(e,t,r,o){o||=[],o.length=e.length;let i;for(i=0;i<e.length;i++)o[i]=e[i]+(t[i]-e[i])*r;return o}function tf(e){let t="",r;for(r=0;r<e.length;r++)r&&(t+=", "),t+=Math.round(e[r]);return`rgb(${t})`}function Gg(e){if(!Number.isFinite(e))throw new Error("Invalid solar altitude");let t=Dg,r=-1,o;for(o=0;o<t.length;o++)if(t[o][0]>=e){r=o;break}let i=t[r<0?t.length-1:r],n=t[Math.max(0,r-1)],a=n===i||r<0?1:(e-n[0])/(i[0]-n[0]);return{background:`linear-gradient(${tf(ds(n[1],i[1],a,ef))}, ${tf(ds(n[2],i[2],a,ef))})`,tint:ds(n[3],i[3],a)}}function hs(e,t,r){let o=e instanceof Date?Date.prototype.getTime.call(e):typeof e=="string"?Date.parse(e):new Date(e).getTime();if(!Number.isFinite(o)||!Number.isFinite(t)||Math.abs(t)>90||!Number.isFinite(r)||Math.abs(r)>180)throw new Error("Invalid solar date or location");return o}X();function gs(e,t,r,o,i){let n=(280.16+360.9856235*e+r)*C-o,a=t*C,s=Math.asin(Math.sin(a)*Math.sin(i)+Math.cos(a)*Math.cos(i)*Math.cos(n)),f=(Math.atan2(Math.sin(n),Math.cos(n)*Math.sin(a)-Math.tan(i)*Math.cos(a))/C+180+360)%360;return{altitude:s/C,azimuth:f,direction:[Math.sin(f*C)*Math.cos(s),Math.sin(s),-Math.cos(f*C)*Math.cos(s)]}}X();X();var Di=Math.sin(23.4397*C);X();var Gi=Math.cos(23.4397*C);function Rg(e,t,r){let o=hs(e,t,r)/864e5-10957.5,i=(134.963+13.064993*o)*C,n=(218.316+13.176396*o+6.289*Math.sin(i))*C,a=5.128*Math.sin((93.272+13.22935*o)*C)*C,s=Math.cos(a)*Math.cos(n),m=Math.cos(a)*Math.sin(n)*Gi-Math.sin(a)*Di,f=Math.cos(a)*Math.sin(n)*Di+Math.sin(a)*Gi;return gs(o,t,r,Math.atan2(m,s),Math.asin(f))}X();function Ug(e,t,r){let i=hs(e,t,r)/864e5-10957.5,n=(357.5291+.98560028*i)*C,a=n+(1.9148*Math.sin(n)+.02*Math.sin(2*n)+3e-4*Math.sin(3*n)+102.9372+180)*C,s=Math.asin(Math.sin(a)*Di),m=Math.atan2(Math.sin(a)*Gi,Math.cos(a));return gs(i,t,r,m,s)}function Wr(e){let t=ie.get(e);t&&_(t)}function Mr(e){let{control:t,map:r,date:o,slider:i,output:n,status:a}=e;try{t.live&&(t.time=new Date);let s=t.time.toISOString();o.value=s.slice(0,10),i.value=String(t.time.getUTCHours()*60+t.time.getUTCMinutes()),n.textContent=`${s.slice(11,16)} UTC${t.live?" \xB7 now":""}`;let m=r.getCenter(),f=Ug(t.time,m.lat,m.lng);tt.set(r,f),Object.assign(f,Gg(f.altitude)),f.moon=Rg(t.time,m.lat,m.lng),a.textContent=f.altitude<=0?"Night \xB7 no direct sunlight":f.altitude<3?"Low sun \xB7 shadows paused":`Sun altitude ${f.altitude.toFixed(1)}\xB0`,r.fire("simulationtimechange",{time:new Date(t.time),live:t.live}),Ft(e),Wr(r)}catch(s){tt.delete(r),Ft(e),Wr(r),a.textContent=`Error: ${s.message}`,console.error("Solar simulation",s)}}function Fg(e){e.control.live=!0,Mr(e)}function Ng(e){let{control:t,map:r,date:o,slider:i,status:n}=e;if(t.live=!1,!o.value||!o.validity.valid){t.time=new Date(NaN),r.fire("simulationtimechange",{time:null,live:!1}),tt.delete(r),Ft(e),Wr(r),n.textContent="Error: choose a valid solar date";return}t.time=new Date(`${o.value}T00:00:00Z`),t.time.setUTCMinutes(Number(i.value)),Mr(e)}function jg(e){let t="position:absolute;width:18px;height:18px;border-radius:50%;transform:translate(-50%,-50%);pointer-events:none;",r=h.DomUtil.create("div","sunlight-sun"),o=h.DomUtil.create("div","sunlight-moon");r.style.cssText=t+"background:#fff3bd;box-shadow:0 0 18px 7px #ffd27699;",o.style.cssText=t+"background:#dce5f2;box-shadow:0 0 10px 2px #cbdcff55;",r.setAttribute("role","img"),r.setAttribute("aria-label","Sun"),o.setAttribute("role","img"),o.setAttribute("aria-label","Moon");let i=h.DomUtil.create("div","sunlight-control");i.style.cssText="color:#222;width:min(200px,calc(100vw - 60px));font:12px/1.4 sans-serif;";let n=document.createElement("input");n.type="date",n.style.cssText="width:100%;box-sizing:border-box;",n.setAttribute("aria-label","Solar date (UTC)");let a=document.createElement("input");a.type="range",a.style.cssText="width:100%;box-sizing:border-box;margin:10px 0 4px;cursor:pointer;",a.min="0",a.max="1439",a.step="1",a.setAttribute("aria-label","Time of day (UTC)");let s=document.createElement("output");s.style.cssText="font-weight:bold;font-variant-numeric:tabular-nums;",s.setAttribute("aria-live","off");let m=document.createElement("button");m.type="button",m.textContent="Now";let f=document.createElement("div");f.className="sunlight-time",f.style.cssText="display:flex;justify-content:space-between;align-items:center;",f.append(s,m);let p=document.createElement("div");p.className="sunlight-status",p.style.marginTop="5px",p.setAttribute("role","status");let c=document.createElement("small");c.style.color="#555",c.textContent="Indicative \xB7 loaded geometry only. Streetlight illumination is estimated, not measured lux.",i.append(n,a,f,p,c);let l={control:null,map:e,originalSky:"",container:i,sunDisc:r,moonDisc:o,date:n,slider:a,output:s,status:p,projection:{left:0,top:0}};return l.update=Mr.bind(null,l),l.updateSky=Ft.bind(null,l),m.onclick=Fg.bind(null,l),n.onchange=a.oninput=Ng.bind(null,l),h.DomEvent.disableClickPropagation(i),h.DomEvent.disableScrollPropagation(i),l}function Wg(e){e.control.live&&Mr(e)}function Zg(e,t){let r=Oi.get(t);if(r?.control&&r.control!==e)throw e._map=null,e.layer._map===t&&t.removeLayer(e.layer),new Error("Only one Time control can be active per map");return r||(r=jg(t),Oi.set(t,r)),r.control=e,r.originalSky=t.getContainer().style.getPropertyValue("--leaflet-sky-background"),Xo.set(t,e),Ai.set(e,r),r.update(),r.timer=setInterval(Wg,6e4,r),t.on("moveend",r.update),t.on("move rotate pitch resize",r.updateSky),r.container}b();function $g(e){return Pt.get(this).addTo(e)}b();function Vg(){return h.Control.prototype.remove.call(Pt.get(this))}function qg(e){h.Util.setOptions(this,e),this.live=!0,this.layer=new h.Layer,Pt.set(this.layer,this),I.set(this.layer,"time")}function Hg(e){return Zg(this,e)}b();function rf(e,t){e.classList.toggle("leaflet-control",!t),e.classList.toggle("leaflet-bar",!t),e.style.background=t?"":"#fff",e.style.padding=t?"2px 0 6px 20px":"8px",e.style.margin=t?"0":""}function Yg(e){h.Control.prototype.addTo.call(this,e);let t=this.getContainer();return this.layer._map===e?Zo(this.layer,t,rf.bind(null,t)):rf(t,!1),this}b();function Xg(){return this._map?.hasLayer(this.layer)?(this._map.removeLayer(this.layer),this):h.Control.prototype.remove.call(this)}function Kg(e){let{map:t,timer:r,sunDisc:o,moonDisc:i}=e,n=Oi.get(t);clearInterval(r),Xo.delete(t),t.fire("simulationtimechange",{time:null,live:!1}),t.off("moveend",e.update),t.off("move rotate pitch resize",e.updateSky),tt.delete(t),Ft(e),o.remove(),i.remove(),Wr(t),n===e&&(n.control=null)}function Jg(){let e=Ai.get(this);e&&(Kg(e),Ai.delete(this))}h.Control.Time=h.Control.extend({options:{position:"bottomright"},initialize:qg,onAdd:Hg,onRemove:Jg,addTo:Yg,remove:Xg});b();var ys=Object.freeze({});var Nt=[[.86,.86,.88],[.1,.1,.12],[.5,.53,.57],[.65,.1,.08],[.12,.25,.55],[.85,.7,.15]];var jt=[.08,.07,.06];var mt=[.85,.64,.5];var Wt=[.16,.2,.32];function E(e,t,r,o){return[[e,r],[t,r],[t,o],[e,o]]}function Qg(e){let t=Nt[e%Nt.length];return[[E(-.045,.045,-.85,-.25),.02,.62,jt],[E(-.045,.045,.25,.85),.02,.62,jt],[E(-.06,.06,-.5,.5),.4,.65,t],[E(-.32,.32,-.58,-.5),.95,1.02,jt],[E(-.1,.1,.15,.4),.85,.92,jt],[E(-.18,.18,-.12,.28),1,1.5,t],[E(-.11,.11,-.22,0),1.5,1.72,mt],[E(-.13,.13,-.23,.01),1.72,1.8,t],[E(-.25,-.15,-.5,-.05),1,1.25,mt],[E(.15,.25,-.5,-.05),1,1.25,mt],[E(-.2,-.08,0,.32),.3,1,Wt],[E(.08,.2,-.25,.07),.3,1,Wt]]}var of=[.75,.2,.15];var xs={body:[[E(-.17,.17,-.1,.1),.82,.95,Wt],[E(-.19,.19,-.11,.11),.95,1.44,of],[E(-.05,.05,-.05,.05),1.44,1.5,mt],[E(-.1,.1,-.11,.1),1.5,1.72,mt],[E(-.105,.105,-.06,.115),1.58,1.77,jt],[E(-.105,.105,-.115,-.06),1.7,1.77,jt]],leg:[[E(-.07,.07,-.07,.07),-.82,0,Wt],[E(-.07,.07,-.17,.07),-.9,-.82,jt]],arm:[[E(-.05,.05,-.05,.05),-.55,0,of],[E(-.045,.045,-.045,.045),-.66,-.55,mt]]};function ey(e){let t=xs.body.slice();return t[1]=[t[1][0],t[1][1],t[1][2],Nt[e%Nt.length]],t.push([E(-.16,-.02,-.07,.07),.08,.9,Wt],[E(.02,.16,-.07,.07),.08,.9,Wt],[E(-.3,-.2,-.05,.05),.76,1.42,mt],[E(.2,.3,-.05,.05),.76,1.42,mt]),t}function Ko(e){let t=e?.route_color;if(!/^[\da-f]{6}$/i.test(t))return[.1,.55,.65];let r=Number.parseInt(t,16);return[(r>>16&255)/255,(r>>8&255)/255,(r&255)/255]}var Zr=[.12,.15,.18];var Ct=[.92,.93,.92];var Jo=[.05,.05,.05];var vs=[1.9,1.85,1.7];var ws=[1.7,.06,.05];function Qo(e,t,r){let o=e-t/2,i=e+t/2;return[[E(-1.25,1.25,o,i),.45,1.25,r],[E(-1.2,1.2,o+.15,i-.15),1.25,2.65,Zr],[E(-1.25,1.25,o,i),2.65,3.1,Ct],[E(-1.15,-.85,o+1,o+2),0,.7,Jo],[E(.85,1.15,i-2,i-1),0,.7,Jo],[E(-.9,.9,o-.03,o),.8,1.05,vs],[E(-.9,.9,i,i+.03),.8,1.05,ws]]}function ty(e,t){return Qo(0,12,Ko(t))}function ry(e,t){let r=Ko(t),o=[],i;for(i=0;i<5;i++)o.push(...Qo((i-2)*6.5,6,r));return o}function oy(e,t){let r=Ko(t),o=[],i;for(i=0;i<5;i++)o.push(...Qo((i-2)*15,14,r));return o}function Zt(e,t,r,o,...i){return[[E(e,t,r,o),...i],[E(-t,-e,r,o),...i]]}function iy(e){let t=Nt[e%Nt.length];return[...Zt(.7,.92,-1.68,-1.02,0,.64,Jo),...Zt(.7,.92,1.02,1.68,0,.64,Jo),[[[-.9,-1.95],[-.72,-2.25],[.72,-2.25],[.9,-1.95],[.9,2.05],[.76,2.25],[-.76,2.25],[-.9,2.05]],.28,.82,t],[E(-.84,.84,-.75,1.6),.82,1.38,Zr,E(-.7,.7,-.05,1.3)],[E(-.71,.71,-.06,1.31),1.38,1.46,t],...Zt(.38,.8,-2.3,-2.16,.56,.76,vs),[E(-.78,.78,2.16,2.3),.6,.76,ws]]}var nf=[[-5.5,30],[5.5,30],[5.5,-20],[4,-26],[1.5,-30],[-1.5,-30],[-4,-26],[-5.5,-20]];function ny(){let e=[],t;for(t=0;t<12;t++)e.push(...Zt(.5,3.8,-12+t*3,-11.3+t*3,3.9,4.4,[.62,.1,.1]));return e}function ay(){return[[nf,0,.8,[.1,.16,.26]],[nf,.8,1.4,Ct],[E(-5,5,-18,26),1.4,3.7,Zr,E(-4.6,4.6,-17.4,25.6)],...Zt(4.64,4.74,-17,25,3.25,3.45,[1.6,1.25,.8]),[E(-4.8,4.8,-17.8,25.8),3.7,3.9,Ct],...ny(),...Zt(4.65,4.8,-13.6,25.8,3.9,4.8,Ct),[E(-4.8,4.8,25.65,25.8),3.9,4.8,Ct],[E(-2.2,2.2,-17.6,-14),3.9,4.7,Ct],[E(-2.2,2.2,-17.6,-14),4.7,5.5,Zr],[E(-2.5,2.5,-18,-13.6),5.5,5.7,Ct],[E(-2.45,-2.2,-16.2,-15.8),5,5.3,[2,.15,.1]],[E(2.2,2.45,-16.2,-15.8),5,5.3,[.1,2,.4]],[E(-.1,.1,-15.9,-15.7),5.7,6.6,Ct],[E(-.15,.15,-15.95,-15.65),6.6,6.8,[2,2,1.9]]]}var sy={bicycle:{side:.4,model:Qg},pedestrian:{side:.3,model:ey},bus:{side:1.5,model:ty},tram:{side:0,model:ry},metro:{side:0,model:oy},car:{side:1.8,model:iy,lights:[{position:[0,1.2,-6],radius:10,color:[1,.94,.82],flux:800}]},boat:{side:0,model:ay,lights:[{position:[0,8,4],radius:30,color:[1,.8,.55],flux:2e4}]}};var my=" struct Params{seconds:f32,side:f32,vertices:u32,total:u32}struct Vehicle{start:u32,count:u32,base:f32,speed:f32}@group(0)@binding(0)var<uniform> params:Params;@group(0)@binding(1)var<storage,read> model:array<f32>;@group(0)@binding(2)var<storage,read> points:array<vec4f>;@group(0)@binding(3)var<storage,read> vehicles:array<Vehicle>;@group(0)@binding(4)var<storage,read_write> position:array<f32>;@group(0)@binding(5)var<storage,read_write> normal:array<f32>;var<workgroup> center:vec3f;var<workgroup> heading:vec2f;@compute@workgroup_size(64)fn main(@builtin(workgroup_id)group:vec3u,@builtin(local_invocation_index)thread:u32){let vehicleIndex = group.x;if(thread == 0u){let vehicle = vehicles[vehicleIndex];let last = vehicle.start + vehicle.count - 1u;let length = points[last].w;var s = vehicle.base + params.seconds * vehicle.speed;s -= length * floor(s / length);var i = vehicle.start + 1u;var end = last;while(i < end){let middle = i +(end - i)/ 2u;if(points[middle].w < s){i = middle + 1u;}else{end = middle;}}let a = points[i - 1u];let b = points[i];let d = select(b.w - a.w,1.0,b.w == a.w);let t =(s - a.w)/ d;heading =(b.xy - a.xy)/ d;center = vec3f(a.x +(b.x - a.x)* t - heading.y * params.side,a.z +(b.z - a.z)* t,a.y +(b.y - a.y)* t + heading.x * params.side);}workgroupBarrier();for(var vertex = thread;vertex < params.vertices;vertex += 64u){let k = vertex * 3u;let n = params.vertices * 3u + k;let o =(vehicleIndex * params.vertices + vertex)* 3u;position[o]= center.x - model[k]* heading.y - model[k + 2u]* heading.x;position[o + 1u]= center.y + model[k + 1u];position[o + 2u]= center.z + model[k]* heading.x - model[k + 2u]* heading.y;normal[o]= -model[n]* heading.y - model[n + 2u]* heading.x;normal[o + 1u]= model[n + 1u];normal[o + 2u]= model[n]* heading.x - model[n + 2u]* heading.y;}}";function Ri(e,t,r,o,i,n,a){let s=i[0]-o[0],m=i[1]-o[1],f=i[2]-o[2],p=n[0]-o[0],c=n[1]-o[1],l=n[2]-o[2],u=m*l-f*c,d=f*p-s*l,y=s*c-m*p,g=Math.hypot(u,d,y),x,v;for(x=0;x<3;x++)v=x===0?o:x===1?i:n,e.push(...v),t.push(u/g,d/g,y/g),r.push(...a)}function ei(e){let t=[],r=[],o=[],i=[],n=[],a,s,m,f,p,c,l,u,d;for([a,s,m,f,p=a]of e){i.length=n.length=0;for([c,l]of a)i.push([c,s,l]);for([c,l]of p)n.push([c,m,l]);for(u=0;u<a.length;u++)d=(u+1)%a.length,Ri(t,r,o,i[u],i[d],n[d],f),Ri(t,r,o,i[u],n[d],n[u],f);for(u=1;u<a.length-1;u++)Ri(t,r,o,n[0],n[u],n[u+1],f),Ri(t,r,o,i[0],i[u+1],i[u],f)}return{position:t,normal:r,color:o}}function fy({properties:e}){let t=document.createElement("div");t.style.whiteSpace="pre-line";let r=e.name?String(e.name):"";return e.departure&&(r+=`${r?`
|
|
1
|
+
(()=>{var L0=Object.defineProperty;var M=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(o){throw r=[o],o}};var B0=(e,t)=>{for(var r in t)L0(e,r,{get:t[r],enumerable:!0})};var h,b=M(()=>{h=globalThis.L});var T,X=M(()=>{T=Math.PI/180});var He,Yr=M(()=>{He=180/Math.PI});var nn,qs=M(()=>{nn=new WeakMap});function k(e){return nn.get(e)??0}var H=M(()=>{qs()});var an,Hs=M(()=>{an=new WeakMap});function S(e){return an.get(e)??0}var W=M(()=>{Hs()});var bo,ta=M(()=>{bo=Object.freeze({})});var je,oa=M(()=>{je=new WeakMap});function ia(){let e=this.getSize().y,t=k(this)*T,r=e*this.options.pitchMaxDistance,o=e*1.5,i=e/2-r*Math.abs(Math.cos(t))*o/(o+Math.sin(t)*r);i>0&&!je.get(this)&&(je.set(this,h.DomUtil.create("div","leaflet-pitch-sky",this.getContainer())),je.get(this).setAttribute("aria-hidden","true"),je.get(this).style.cssText="position:absolute;inset:0 0 auto;height:0;z-index:0;pointer-events:none;background:var(--leaflet-sky-background,linear-gradient(#9ec5e8,#dfe9f0))"),je.get(this)&&(je.get(this).style.inset=t>Math.PI/2?"auto 0 0":"0 0 auto",je.get(this).style.height=`${Math.max(0,Math.ceil(i))}px`,je.get(this).style.display=i>0?"":"none")}var ym=M(()=>{oa();b();X();H()});function ze(e,t,r){if(!Number.isFinite(t)||!Number.isFinite(r))throw new TypeError("Camera angles must be finite numbers");if(!Number.isFinite(e.options.maxPitch)||e.options.maxPitch<0||e.options.maxPitch>180)throw new TypeError("maxPitch must be between 0 and 180 degrees");let o=k(e),i=S(e);return nn.set(e,Math.max(0,Math.min(e.options.maxPitch,t))),an.set(e,(r%360+360)%360),e._loaded&&(ia.call(e),i!==S(e)&&e.fire("rotate",{bearing:S(e)}),o!==k(e)&&e.fire("pitch",{pitch:k(e)})),e}var or=M(()=>{Hs();qs();H();W();ym()});var Ot,na=M(()=>{Ot=new WeakMap});var Lo,aa=M(()=>{Lo=new WeakMap});var nr,sa=M(()=>{nr=new Map});var gt,ma=M(()=>{gt={value:null}});function Bo(e){nr.delete(e),Ot.set(e,null),Lo.set(e,null),!nr.size&>.value!==null&&(cancelAnimationFrame(gt.value),gt.value=null)}var fa=M(()=>{na();aa();sa();ma()});var kr,ca=M(()=>{kr=new WeakMap});var To,xm=M(()=>{To=new WeakMap});var xi,vm=M(()=>{xi=new WeakMap});var ar,vi=M(()=>{ar=new WeakMap});var sr,wi=M(()=>{sr=new WeakMap});var wm,_l=M(()=>{wm={value:void 0}});var Mm,Il=M(()=>{Mm={value:void 0}});var bm,zl=M(()=>{bm={value:void 0}});var Lm,Al=M(()=>{Lm={value:void 0}});var la,Ol=M(()=>{la={value:void 0}});var yt,Po=M(()=>{yt=new WeakMap});var _r,ua=M(()=>{_r=new Set});var Mi,Bm=M(()=>{Mi=Object.freeze({capture:!0,passive:!1})});function Tm(){this._map.fire("cameratouchchange")}var Dl=M(()=>{});var Co,da=M(()=>{Co=Object.freeze([.8,.5])});var Rl,Gl=M(()=>{Rl=Object.freeze([.8,0])});var ha,Pm=M(()=>{ha=Object.freeze({preventScroll:!0})});var ga,Cm=M(()=>{ga=Object.freeze({animate:!0})});function Ul(e){gt.value=null;let t=[...nr];nr.clear();let r,o,i,n,a;for([o,i]of t)if(Lo.set(o,null),Ot.get(o)===i){n=i.duration?Math.min(1,(e-i.start)/(i.duration*1e3)):1,a=1-(1-n)**3;try{ze(o,i.fromPitch+(Math.max(0,Math.min(o.options.maxPitch,i.pitch))-i.fromPitch)*a,i.fromBearing+i.delta*a),n<1&&Ot.get(o)===i?ya(o,i):Ot.get(o)===i&&Ot.set(o,null)}catch(s){r||=s}}if(r)throw r}var Fl=M(()=>{na();aa();ma();sa();or();Sm()});function ya(e,t){nr.set(e,t),gt.value===null&&(gt.value=requestAnimationFrame(Ul)),Lo.set(e,gt.value)}var Sm=M(()=>{aa();sa();ma();Fl()});function So(e,t,r,o=bo){if(Bo(e),!Number.isFinite(t)||!Number.isFinite(r))throw new TypeError("Camera angles must be finite numbers");if(!o.animate||matchMedia("(prefers-reduced-motion: reduce)").matches)return ze(e,t,r);let i=o.duration??.3;if(!Number.isFinite(i)||i<0)throw new TypeError("Camera duration must be nonnegative");let n=performance.now(),a=k(e),s=S(e),m=((r-s)%360+540)%360-180,f={duration:i,start:n,fromPitch:a,fromBearing:s,pitch:t,delta:m};return Ot.set(e,f),ya(e,f),e}var xa=M(()=>{na();ta();or();H();W();fa();Sm()});function Nl(e,t=ga){return So(e,0,0,t)}var jl=M(()=>{Cm();xa()});function Dt(e,t,r){return So(e,k(e),t,r)}var bi=M(()=>{xa();H()});function Wl(e,t=ga){return Dt(e,0,t)}var Zl=M(()=>{Cm();bi()});function $l(e){let t=this._rotateControl,r=t._map;e.preventDefault(),t.options.visualizePitch?Nl(r):Wl(r),e.detail&&r.getContainer().focus(ha)}var Vl=M(()=>{Pm();jl();Zl()});function Ir(e,t,r){return So(e,t,S(e),r)}var va=M(()=>{xa();W()});function ql(e){let t=this._rotateControl,r=t._map,o=e.shiftKey?15:5;if(e.key==="ArrowLeft")Dt(r,S(r)-o);else if(e.key==="ArrowRight")Dt(r,S(r)+o);else if(e.key==="ArrowUp"&&t.options.visualizePitch)Ir(r,k(r)+o);else if(e.key==="ArrowDown"&&t.options.visualizePitch)Ir(r,k(r)-o);else if(e.key==="Home"||e.key===" ")this.click();else return;e.preventDefault(),e.stopPropagation()}var Hl=M(()=>{bi();W();va();H()});function wa(){let e=this._map,t=this.options.visualizePitch?k(e):0;this._arrow.style.transform=`scale(${1/Math.sqrt(Math.max(.01,Math.abs(Math.cos(t*T))))}) rotateX(${t}deg) rotate(${S(e)}deg)`,this._button.setAttribute("aria-description",`Bearing ${Math.round(S(e))} degrees, pitch ${Math.round(k(e))} degrees. Arrow keys adjust the camera; Home resets it.`),this._container.style.display=this.options.closeOnZeroBearing&&!S(e)&&!t&&!this._container.contains(document.activeElement)?"none":""}var Em=M(()=>{X();H();W()});var Ae,mr=M(()=>{Ae={value:new WeakMap}});var zr,Ma=M(()=>{zr={value:new Set}});function ba(e){return e.closest?.('input,textarea,select,[contenteditable="true"]')}var km=M(()=>{});function La(e){let t=Ae.value.get(this);if(t.drag||!t.accept(e)||ba(e.target))return;e.preventDefault(),e.stopPropagation(),t.moved=!1;let r=t.map.getContainer().getBoundingClientRect();t.drag={id:e.pointerId,x:e.clientX,y:e.clientY,cursor:t.element.style.cursor,cx:r.left+r.width/2,cy:r.top+r.height/2,dragging:t.map.dragging?.enabled()},t.map.dragging?.disable(),t.element.focus?.(ha),t.element.setPointerCapture(e.pointerId),t.element.style.cursor="grabbing"}var _m=M(()=>{mr();Pm();km()});function Ba(e){return Bo(e),e}var Im=M(()=>{fa()});function Ta(e){let t=Ae.value.get(this);if(!t.drag||t.drag.id!==e.pointerId)return;let r=e.clientX-t.drag.x,o=e.clientY-t.drag.y;if(Math.hypot(r,o)<3&&!t.moved)return;Ba(t.map),t.moved=!0,e.preventDefault();let i=r*t.sensitivity[0];if(t.orbit)if(Math.abs(t.drag.cy-t.drag.y)>100){let n=Math.atan2(e.clientY-t.drag.cy,e.clientX-t.drag.cx)-Math.atan2(e.clientY-t.drag.cy,t.drag.x-t.drag.cx);i=Math.atan2(Math.sin(n),Math.cos(n))*He}else i*=e.clientY<t.drag.cy?1:-1;ze(t.map,k(t.map)-o*t.sensitivity[1],S(t.map)+i),t.drag.x=e.clientX,t.drag.y=e.clientY}var zm=M(()=>{Yr();mr();Im();or();H();W()});function Eo(e,t){if(!e?.drag||t?.pointerId!==void 0&&t.pointerId!==e.drag.id)return;let r=e.drag;e.drag=null,e.element.hasPointerCapture?.(r.id)&&e.element.releasePointerCapture(r.id),r.dragging&&e.map.getContainer()._leaflet_id&&e.map.dragging.enable(),e.element.style.cursor=r.cursor}var Pa=M(()=>{});function fr(e){Eo(Ae.value.get(this),e)}var Am=M(()=>{mr();Pa()});function Ca(e){let t=Ae.value.get(this);t.moved&&(e.preventDefault(),e.stopPropagation(),t.moved=!1)}var Om=M(()=>{mr()});function Sa(e){let t=Ae.value.get(this);!t.drag&&!t.moved||(e.preventDefault(),e.stopPropagation())}var Dm=M(()=>{mr()});function Ea(){let e;for(e of zr.value)Eo(e)}var Rm=M(()=>{Ma();Pa()});function ka(e,t,r,o=Co,i=!1){let n={map:e,element:t,accept:r,sensitivity:o,orbit:i,drag:null,moved:!1};return Ae.value.set(t,n),zr.value.add(n),t.addEventListener("pointerdown",La,!0),t.addEventListener("pointermove",Ta),t.addEventListener("pointerup",fr),t.addEventListener("pointercancel",fr),t.addEventListener("lostpointercapture",fr),t.addEventListener("click",Ca,!0),t.addEventListener("contextmenu",Sa),window.addEventListener("blur",Ea),n}var Gm=M(()=>{da();mr();Ma();_m();zm();Am();Om();Dm();Rm()});function Yl(e){return e.button===0}var Xl=M(()=>{});function Kl(){wa.call(this._rotateControl)}var Jl=M(()=>{Em()});function Ql(e){let t=h.DomUtil.create("div","leaflet-control-rotate leaflet-bar"),r=h.DomUtil.create("a","leaflet-control-rotate-toggle",t);this._map=e,this._container=t,this._button=r,r._rotateControl=this,r.href="#",r.draggable=!1,r.setAttribute("role","button"),r.title=this.options.visualizePitch?"Reset bearing and pitch":"Reset bearing to north",r.setAttribute("aria-label",r.title),r.style.cssText="cursor:grab;touch-action:none";let o=h.DomUtil.create("span","leaflet-control-rotate-arrow",r);return this._arrow=o,o.setAttribute("aria-hidden","true"),o.style.cssText="display:block;width:100%;height:100%;pointer-events:none;background: no-repeat center / 29px 29px",o.style.backgroundImage='url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 29 29%27%3E%3Cpath fill=%27%23333%27 d=%27M10.5 14 14.5 6 18.5 14Z%27/%3E%3Cpath fill=%27%23ccc%27 d=%27M10.5 16 14.5 24 18.5 16Z%27/%3E%3C/svg%3E")',r.onclick=$l,r.onkeydown=ql,this._refresh=wa,e.on("rotate pitch",this._refresh,this),this._refresh(),this._dragState=ka(e,r,Yl,this.options.visualizePitch?Co:Rl),r.addEventListener("focusout",Kl),h.DomEvent.on(r,"dblclick contextmenu",h.DomEvent.stop),h.DomEvent.disableClickPropagation(t),h.DomEvent.disableScrollPropagation(t),t}var eu=M(()=>{b();da();Gl();Vl();Hl();Em();Gm();Xl();Jl()});function tu(e){Eo(e);let{element:t}=e;t.removeEventListener("pointerdown",La,!0),t.removeEventListener("pointermove",Ta),t.removeEventListener("pointerup",fr),t.removeEventListener("pointercancel",fr),t.removeEventListener("lostpointercapture",fr),t.removeEventListener("click",Ca,!0),t.removeEventListener("contextmenu",Sa),Ae.value.delete(t),zr.value.delete(e),zr.value.size||window.removeEventListener("blur",Ea)}var ru=M(()=>{mr();Ma();Pa();_m();zm();Am();Om();Dm();Rm()});function _a(){tu(this._dragState)}var Um=M(()=>{ru()});function ou(e){e.off("rotate pitch",this._refresh,this),_a.call(this)}var iu=M(()=>{Um()});function nu(e){return new h.Control.Rotate(e)}var au=M(()=>{b()});function su(e){let t=this._cameraShiftRotate;!e.shiftKey||ba(e.target)||e.target.closest(".leaflet-control")||(e.preventDefault(),e.stopImmediatePropagation(),Dt(t._map,S(t._map)+Math.sign(e.deltaY)*5))}var mu=M(()=>{bi();W();km()});function fu(){let e=this._map.getContainer();e._cameraShiftRotate=this,this._wheel=su,e.addEventListener("wheel",this._wheel,Mi)}var pu=M(()=>{Bm();mu()});function cu(){let e=this._map.getContainer();e.removeEventListener("wheel",this._wheel,!0),delete e._cameraShiftRotate}var lu=M(()=>{});function uu(e){return!e.target.closest(".leaflet-control,.leaflet-marker-icon,.leaflet-popup")&&(e.button===2||e.button===0&&e.ctrlKey)}var du=M(()=>{});function hu(){this._dragState=ka(this._map,this._map.getContainer(),uu,Co,!0)}var gu=M(()=>{da();Gm();du()});function yu(e){let t=this.handler,r=Number.isFinite(e.webkitCompassHeading)?-e.webkitCompassHeading:e.alpha,o=e.absolute?0:screen.orientation?.angle??window.orientation??0;Number.isFinite(r)&&Dt(t._map,r-o)}var xu=M(()=>{bi()});function Fm(e,t){e.disable(),e._map.fire("error",{error:t})}var vu=M(()=>{});function wu([e,t]){let{handler:r,generation:o}=e.value;if(!(!r.enabled()||r._generation!==o)){if(!window.DeviceOrientationEvent||t.status!=="fulfilled"||t.value!=="granted")return Fm(r,t.status==="rejected"?t.reason:new Error("Device compass permission unavailable or denied"));try{window.addEventListener("deviceorientation",r._orientation),window.addEventListener("deviceorientationabsolute",r._orientation)}catch(i){Fm(r,i)}}}var Mu=M(()=>{vu()});function bu(){this._compassGeneration=this._generation=(this._generation||0)+1,this._orientation={handler:this,handleEvent:yu};let e=window.DeviceOrientationEvent?.requestPermission,t;try{t=e?e.call(window.DeviceOrientationEvent):"granted"}catch(r){t=Promise.reject(r)}Promise.allSettled([Promise.resolve({handler:this,generation:this._generation}),t]).then(wu)}var Lu=M(()=>{xu();Mu()});function Bu(){this._generation++,window.removeEventListener("deviceorientation",this._orientation),window.removeEventListener("deviceorientationabsolute",this._orientation)}var Tu=M(()=>{});function Pu(e){e[0]?.target._containerResizeMap.invalidateSize()}var Cu=M(()=>{});function Su(){let e=this._map.getContainer();e._containerResizeMap=this._map,this._observer=new ResizeObserver(Pu),this._observer.observe(e)}var Eu=M(()=>{Cu()});function ku(){let e=this._map.getContainer();this._observer.disconnect(),delete e._containerResizeMap}var _u=M(()=>{});function Ia(e){let t=yt.get(this),{map:r,container:o}=t;if(t.touch||e.touches.length!==2||e.target.closest(".leaflet-control")||!sr.get(r).enabled()&&!ar.get(r).enabled())return;let[i,n]=e.touches;if(Math.hypot(n.clientX-i.clientX,n.clientY-i.clientY)<1)return;Ba(r);let a=o.getBoundingClientRect(),s=new h.Point((i.clientX+n.clientX)/2-a.left,(i.clientY+n.clientY)/2-a.top);t.touch={angle:Math.atan2(n.clientY-i.clientY,n.clientX-i.clientX),distance:Math.hypot(n.clientX-i.clientX,n.clientY-i.clientY),middle:s,anchor:r.containerPointToLatLng(s),zoom:r.getZoom(),bearing:S(r),pitch:k(r),zooming:r.touchZoom?.enabled(),dragging:r.dragging?.enabled(),currentMiddle:new h.Point(s.x,s.y)},r.dragging?.disable(),e.preventDefault(),e.stopImmediatePropagation(),t.nativeZoom!==void 0&&(t.touch.zooming=t.nativeZoom),t.touch.snap=r.options.zoomSnap,r.options.zoomSnap=0}var Nm=M(()=>{vi();wi();b();Po();Im();W();H()});function za(e){let t=yt.get(this),{map:r,container:o,touch:i}=t;if(!i||e.touches.length!==2)return;let[n,a]=e.touches,s=Math.atan2(a.clientY-n.clientY,a.clientX-n.clientX),m=o.getBoundingClientRect(),f=i.currentMiddle;f.x=(n.clientX+a.clientX)/2-m.left,f.y=(n.clientY+a.clientY)/2-m.top;let p=Math.atan2(Math.sin(s-i.angle),Math.cos(s-i.angle))*He;ze(r,ar.get(r).enabled()?i.pitch-(f.y-i.middle.y)*.25:i.pitch,sr.get(r).enabled()?i.bearing+p:i.bearing);let c=Math.hypot(a.clientX-n.clientX,a.clientY-n.clientY);if(c<1)return;let l=i.zooming?Math.max(r.getMinZoom(),Math.min(r.getMaxZoom(),i.zoom+Math.log2(c/i.distance))):i.zoom;if(r.setView(r.getCenter(),l,{animate:!1}),r.options.touchZoom!=="center"){let u=r.project(i.anchor).subtract(r.project(r.containerPointToLatLng(f)));r.setView(r.unproject(r.project(r.getCenter()).add(u)),r.getZoom(),{animate:!1})}e.preventDefault(),e.stopImmediatePropagation()}var jm=M(()=>{vi();wi();Yr();Po();or()});function pr(e,t){if(!e.touch||t?.touches?.length>=2)return;let{map:r,container:o,touch:i}=e;i.dragging&&o._leaflet_id&&r.dragging.enable(),r.options.zoomSnap=i.snap,i.zooming&&i.snap&&o._leaflet_id&&r.setZoom(Math.round(r.getZoom()/i.snap)*i.snap,{animate:!1}),e.touch=null}var Li=M(()=>{});function ko(e){pr(yt.get(this),e)}var Wm=M(()=>{Po();Li()});function Bi(){let e=kr.get(this),{map:t,container:r}=e,o=sr.get(t).enabled()||ar.get(t).enabled();o&&e.nativeZoom===void 0?(e.nativeZoom=t.touchZoom?.enabled(),t.touchZoom?.disable()):!o&&e.nativeZoom!==void 0&&(pr(e),e.nativeZoom&&r._leaflet_id&&t.touchZoom.enable(),e.nativeZoom=void 0)}var Zm=M(()=>{ca();vi();wi();Li()});function Aa(){let e;for(e of _r)pr(e)}var $m=M(()=>{ua();Li()});function Iu(){let e=kr.get(this);if(!e)return;let{container:t,map:r}=e;pr(e),t.removeEventListener("touchstart",Ia,!0),t.removeEventListener("touchmove",za,!0),t.removeEventListener("touchend",ko,!0),t.removeEventListener("touchcancel",ko,!0),_r.delete(e),_r.size||window.removeEventListener("blur",Aa),r.off("cameratouchchange",Bi,r),xi.get(r)?.remove(),yt.delete(t),kr.delete(r)}var zu=M(()=>{ca();vm();ua();Po();Li();Nm();jm();Wm();$m();Zm()});function Ar(e,t,r){let o=To.get(e);o||To.set(e,o=new Map);let i=new r(e);o.set(t,i),e._handlers.push(i),e.options[t]&&i.enable()}var Au=M(()=>{xm()});var Ou={};B0(Ou,{cameraControls:()=>T0});function T0(e){if(Ar(e,"trackContainerMutation",Mm.value),!e.options.rotate)return;Ar(e,"shiftKeyRotate",Lm.value),Ar(e,"pitchDrag",bm.value),Ar(e,"compassBearing",wm.value),Ar(e,"touchRotate",la.value),Ar(e,"touchPitch",la.value),sr.set(e,To.get(e).get("touchRotate")),ar.set(e,To.get(e).get("touchPitch"));let t=e.getContainer(),r={map:e,container:t,touch:null,nativeZoom:void 0};kr.set(e,r),yt.set(t,r),_r.add(r),t.addEventListener("touchstart",Ia,Mi),t.addEventListener("touchmove",za,Mi),t.addEventListener("touchend",ko,!0),t.addEventListener("touchcancel",ko,!0),window.addEventListener("blur",Aa),e.on("cameratouchchange",Bi,e),Bi.call(e),e.options.rotateControl&&(xi.set(e,new h.Control.Rotate(typeof e.options.rotateControl=="object"?e.options.rotateControl:bo)),xi.get(e).addTo(e)),e.once("unload",Iu,e)}var Du=M(()=>{ca();xm();vm();vi();wi();b();_l();Il();zl();Al();Ol();Po();ua();Bm();ta();Dl();eu();iu();au();pu();lu();gu();Um();Lu();Tu();Eu();_u();Nm();jm();Wm();Zm();zu();$m();Au();wm.value=h.Handler.extend({addHooks:bu,removeHooks:Bu});Mm.value=h.Handler.extend({addHooks:Su,removeHooks:ku});bm.value=h.Handler.extend({addHooks:hu,removeHooks:_a});Lm.value=h.Handler.extend({addHooks:fu,removeHooks:cu});la.value=h.Handler.extend({addHooks:Tm,removeHooks:Tm});h.Control.Rotate=h.Control.extend({options:{position:"topleft",closeOnZeroBearing:!0,visualizePitch:!0},onAdd:Ql,onRemove:ou});h.control&&(h.control.rotate=nu)});b();var Br={value:void 0};var Vi={value:void 0};var qi={value:void 0};b();var j={value:void 0};var Ve={value:void 0};var Hi={value:void 0};var Yi={value:void 0};var Xi={value:void 0};var Ki={value:void 0};var Ji={value:void 0};var Qi={value:void 0};var en={value:void 0};var xe=new WeakMap;var re=new WeakMap;var qr=new WeakMap;var qt=new WeakMap;b();b();var z=new WeakMap;var pt=new WeakMap;function ii(e){let t=pt.get(e.currentTarget);if(!t)return;let r;for(r of t)qe(r)}function ni(e){let t=pt.get(e.currentTarget);if(!t)return;let r;for(r of t)r.source.fire("error",{error:new Error("Unable to load native layer image")})}function tn(e,t){let r=pt.get(e);r&&(r.delete(t),r.size||pt.delete(e))}function yf(e,t){let r=pt.get(e);r||pt.set(e,r=new Set),r.add(t)}var et=new WeakMap;var kt=new Set;var G=new WeakMap;var v=new WeakMap;var Q=new WeakMap;var _t=new WeakMap;var Ht=new WeakMap;var tt=new WeakMap;var rn=[null];var Hr=new WeakMap;var ce=new WeakMap;var Ue=new WeakMap;var xf={subtree:!0};var ke=new WeakMap;b();function on(e){let t;for(t of Object.values(e._layers))t instanceof h.Marker?t.update():(t instanceof h.Popup||t instanceof h.Tooltip)&&t._updatePosition()}function vf(e,t){let r=e._map,o=Ue.get(e),i,n;for(n of ce.get(e).keys())if(n.effect.target===r._proxy){i=n;break}let a=i?.effect.getComputedTiming().progress??Math.min(1,(t-o.start)/250),s=r.getZoomScale(o.targetZoom,o.zoom),m=1+(s-1)*a,f=r.project(o.from,o.zoom),p=r.project(o.to,o.zoom);ke.set(r,{zoom:r.getScaleZoom(m,o.zoom),center:r.unproject(f.add(p.subtract(f).multiplyBy(s*a/m)),o.zoom)}),on(r)}function wf(e,t){let r=e._map,o,i,n;if(r._animatingZoom){ce.get(e)||ce.set(e,new Map);for(o of r.getContainer().getAnimations(xf))!(o instanceof CSSTransition)||o.transitionProperty!=="transform"||!o.effect.target.classList.contains("leaflet-zoom-animated")||ce.get(e).has(o)||(i=o.currentTime||0,o.pause(),ce.get(e).set(o,{start:t,time:i}));for([o,{start:n,time:i}]of ce.get(e))o.currentTime=Math.min(o.effect.getComputedTiming().endTime,i+t-n);Ue.get(e)&&vf(e,t)}}var Yt=new WeakMap;var ai={size:[null,null],format:"depth24plus",usage:null};async function Mf(e,t,r){try{await r}catch(o){e.fire("error",{error:o})}t.destroy()}function F(e,t){Mf(e,t,v.get(e).device.queue.onSubmittedWorkDone())}function bf(e,t){(!Yt.get(e)||!Yt.get(e).equals(t))&&(v.get(e).width=t.x,v.get(e).height=t.y,v.get(e).canvas.width=Math.round(t.x*v.get(e).dpr),v.get(e).canvas.height=Math.round(t.y*v.get(e).dpr),v.get(e).canvas.style.width=`${t.x}px`,v.get(e).canvas.style.height=`${t.y}px`,v.get(e).depthTexture&&F(e,v.get(e).depthTexture),v.get(e).depthTexture=v.get(e).device.createTexture((ai.size[0]=v.get(e).canvas.width,ai.size[1]=v.get(e).canvas.height,ai.usage=GPUTextureUsage.RENDER_ATTACHMENT,ai)),Yt.set(e,t))}var J=new WeakMap;var ne=new WeakMap;X();Yr();var Lf=2*Math.atan(1/3)*He;var Xt=2*Math.PI*6378137;var ae=new WeakMap;var rt=new WeakMap;var ve=new WeakMap;var Ye=new WeakMap;var de=new WeakMap;b();function Bf(e,t){let r=t?.get(`${Math.floor(e.x/64)}/${Math.floor(e.y/64)}`);if(!r)return null;let o,i,n,a,s,m,f;for(o of r)if(!(e.x<o.min[0]||e.x>o.max[0]||e.y<o.min[1]||e.y>o.max[1])){for([i,n,a]of o.triangles)if(s=(n[1]-a[1])*(i[0]-a[0])+(a[0]-n[0])*(i[1]-a[1]),m=((n[1]-a[1])*(e.x-a[0])+(a[0]-n[0])*(e.y-a[1]))/s,f=((a[1]-i[1])*(e.x-a[0])+(i[0]-a[0])*(e.y-a[1]))/s,m>=0&&f>=0&&m+f<=1)return m*i[2]+f*n[2]+(1-m-f)*a[2]}return null}function si(e,t,r){let o=Math.floor(t/256),i=Math.floor(r/256),n=e.get(`${o}/${i}`);if(!n)return null;let a=n[(r-i*256)*256+t-o*256];return Number.isFinite(a)&&a>-1e3?a:null}function Tf(e,t){let r=e.x-.5,o=e.y-.5,i=Math.floor(r),n=Math.floor(o),a=r-i,s=o-n,m=si(t,i,n),f=si(t,i+1,n),p=si(t,i,n+1),c=si(t,i+1,n+1);return!Number.isFinite(m)||!Number.isFinite(f)||!Number.isFinite(p)||!Number.isFinite(c)?Number.isFinite(m)?m:Number.isFinite(f)?f:Number.isFinite(p)?p:Number.isFinite(c)?c:null:(m*(1-a)+f*a)*(1-s)+(p*(1-a)+c*a)*s}function Kt(e,t){if(!e._map||!ve.get(e))return null;let r=t instanceof h.Point?t:e._map.project(t,de.get(e));return Bf(r,rt.get(e))??Tf(r,Ye.get(e))}function ct(e,t){let r=ae.get(e);return r&&Kt(r,t)}var It=new WeakMap;H();W();var Pf=Math.PI/360;function Xr(e){e.x||=[0,0,0],e.y||=[0,0,0],e.z||=[0,0,0],e.viewTransform||=new DOMMatrix,e.projectionTransform||=new DOMMatrix,e.projectionViewTransform||=new DOMMatrix;let{position:t,target:r,up:o,x:i,y:n,z:a,viewMatrix:s,projectionMatrix:m,projectionViewMatrix:f}=e,p;a[0]=t[0]-r[0],a[1]=t[1]-r[1],a[2]=t[2]-r[2];let c=Math.hypot(a[0],a[1],a[2])||1;a[0]/=c,a[1]/=c,a[2]/=c,i[0]=o[1]*a[2]-o[2]*a[1],i[1]=o[2]*a[0]-o[0]*a[2],i[2]=o[0]*a[1]-o[1]*a[0];let l=Math.hypot(i[0],i[1],i[2])||1;i[0]/=l,i[1]/=l,i[2]/=l,n[0]=a[1]*i[2]-a[2]*i[1],n[1]=a[2]*i[0]-a[0]*i[2],n[2]=a[0]*i[1]-a[1]*i[0];let u=e.viewTransform;u.m11=i[0],u.m12=i[1],u.m13=i[2],u.m14=0,u.m21=n[0],u.m22=n[1],u.m23=n[2],u.m24=0,u.m31=a[0],u.m32=a[1],u.m33=a[2],u.m34=0,u.m41=t[0],u.m42=t[1],u.m43=t[2],u.m44=1,u.invertSelf(),s[0]=u.m11,s[1]=u.m12,s[2]=u.m13,s[3]=u.m14,s[4]=u.m21,s[5]=u.m22,s[6]=u.m23,s[7]=u.m24,s[8]=u.m31,s[9]=u.m32,s[10]=u.m33,s[11]=u.m34,s[12]=u.m41,s[13]=u.m42,s[14]=u.m43,s[15]=u.m44;for(p of s)if(!Number.isFinite(p))throw new Error("Singular 3D transform");let d=1/Math.tan(e.fov*Pf),y=e.near,g=e.far;m[0]=d/e.aspect,m[1]=0,m[2]=0,m[3]=0,m[4]=0,m[5]=d,m[6]=0,m[7]=0,m[8]=0,m[9]=0,m[10]=g/(y-g),m[11]=-1,m[12]=0,m[13]=0,m[14]=g*y/(y-g),m[15]=0;let x=e.projectionTransform;x.m11=m[0],x.m12=m[1],x.m13=m[2],x.m14=m[3],x.m21=m[4],x.m22=m[5],x.m23=m[6],x.m24=m[7],x.m31=m[8],x.m32=m[9],x.m33=m[10],x.m34=m[11],x.m41=m[12],x.m42=m[13],x.m43=m[14],x.m44=m[15];let w=e.projectionViewTransform;w.m11=x.m11,w.m12=x.m12,w.m13=x.m13,w.m14=x.m14,w.m21=x.m21,w.m22=x.m22,w.m23=x.m23,w.m24=x.m24,w.m31=x.m31,w.m32=x.m32,w.m33=x.m33,w.m34=x.m34,w.m41=x.m41,w.m42=x.m42,w.m43=x.m43,w.m44=x.m44,w.multiplySelf(u),f[0]=w.m11,f[1]=w.m12,f[2]=w.m13,f[3]=w.m14,f[4]=w.m21,f[5]=w.m22,f[6]=w.m23,f[7]=w.m24,f[8]=w.m31,f[9]=w.m32,f[10]=w.m33,f[11]=w.m34,f[12]=w.m41,f[13]=w.m42,f[14]=w.m43,f[15]=w.m44}function Jt(e,t,r=!1){let o=ke.get(e);if(!o)return t;let i=e.getSize().divideBy(2),n=e.getZoomScale(o.zoom),a=e.project(e.getCenter(),o.zoom).subtract(e.project(o.center,o.zoom));return r?t.subtract(i).subtract(a).divideBy(n).add(i):t.subtract(i).multiplyBy(n).add(a).add(i)}function Cf(e,t){let r=e._map,o=ke.get(r)?.zoom??r.getZoom(),i=r.options.crs.scale(o)/(Xt*Math.cos(ne.get(e).lat*T)),n=Jt(r,j.value.layerPointToContainerPoint.call(r,r.project(ne.get(e)).subtract(r.getPixelOrigin()))),a=t.y*1.5/i,s=(t.x/2-n.x)/i,m=It.get(r)?.control?._walk,f=(ct(r,r.getCenter())??0)+(m?.saved?m.state.height:0),p=(t.y/2-n.y)/i,c=k(r)*T,l=S(r)*T,u=J.get(e);u.fov=Lf,u.aspect=t.x/t.y,u.near=Math.max(.1,a/1e4),u.far=Math.max(1e4,a*10),u.position[0]=s+Math.sin(l)*Math.sin(c)*a,u.position[1]=f+Math.cos(c)*a,u.position[2]=p+Math.cos(l)*Math.sin(c)*a,u.up[0]=-Math.sin(l)*Math.cos(c),u.up[1]=Math.sin(c),u.up[2]=-Math.cos(l)*Math.cos(c),u.target[0]=s,u.target[1]=f,u.target[2]=p,Xr(u)}var Tr=new WeakMap;function Sf(e,t){let r,o;if(e.matrix){let i=e._matrixState||=new Float64Array(16);for(r=0;r<16;r++)i[r]!==e.matrix[r]&&(t=!0),i[r]=e.matrix[r]}else{let i=e._transformState||=new Float64Array(9);for(r=0;r<9;r++)o=r<3?e.position[r]:r<6?e.rotation[r-3]:e.scale[r-6],i[r]!==o&&(t=!0),i[r]=o}return t}Yr();function Ef(e){let t=e._localTransform||=new DOMMatrix;return t.m11=1,t.m12=0,t.m13=0,t.m14=0,t.m21=0,t.m22=1,t.m23=0,t.m24=0,t.m31=0,t.m32=0,t.m33=1,t.m34=0,t.m41=0,t.m42=0,t.m43=0,t.m44=1,t.translateSelf(e.position[0],e.position[1],e.position[2]),t.rotateAxisAngleSelf(0,1,0,e.rotation[1]*He),t.rotateAxisAngleSelf(1,0,0,e.rotation[0]*He),t.rotateAxisAngleSelf(0,0,1,e.rotation[2]*He),t.scaleSelf(e.scale[0],e.scale[1],e.scale[2]),t}function we(e){let t=e.parent,r=t?._worldMatrixVersion||0,o=!!e.matrix,i=e._worldParent!==t||e._parentWorldVersion!==r||e._worldMatrixMode!==o,n;if(i=Sf(e,i),!i){for(n of e.children)we(n);return}let a,s;e.matrix?a=e.matrix:a=Ef(e),s=e._worldTransform||=new DOMMatrix,a instanceof DOMMatrix?(s.m11=a.m11,s.m12=a.m12,s.m13=a.m13,s.m14=a.m14,s.m21=a.m21,s.m22=a.m22,s.m23=a.m23,s.m24=a.m24,s.m31=a.m31,s.m32=a.m32,s.m33=a.m33,s.m34=a.m34,s.m41=a.m41,s.m42=a.m42,s.m43=a.m43,s.m44=a.m44):(s.m11=a[0],s.m12=a[1],s.m13=a[2],s.m14=a[3],s.m21=a[4],s.m22=a[5],s.m23=a[6],s.m24=a[7],s.m31=a[8],s.m32=a[9],s.m33=a[10],s.m34=a[11],s.m41=a[12],s.m42=a[13],s.m43=a[14],s.m44=a[15]),t&&s.preMultiplySelf(t._worldTransform),e.worldMatrix[0]=s.m11,e.worldMatrix[1]=s.m12,e.worldMatrix[2]=s.m13,e.worldMatrix[3]=s.m14,e.worldMatrix[4]=s.m21,e.worldMatrix[5]=s.m22,e.worldMatrix[6]=s.m23,e.worldMatrix[7]=s.m24,e.worldMatrix[8]=s.m31,e.worldMatrix[9]=s.m32,e.worldMatrix[10]=s.m33,e.worldMatrix[11]=s.m34,e.worldMatrix[12]=s.m41,e.worldMatrix[13]=s.m42,e.worldMatrix[14]=s.m43,e.worldMatrix[15]=s.m44,e._worldParent=t,e._parentWorldVersion=r,e._worldMatrixMode=o,e._worldMatrixVersion=(e._worldMatrixVersion||0)+1;for(n of e.children)we(n)}function Be(e){let t=[1/0,1/0,1/0],r=[-1/0,-1/0,-1/0],o=e.attributes.position.data,i,n,a,s;for(i=0;i<o.length;i+=3)n=o[i],a=o[i+1],s=o[i+2],t[0]=Math.min(t[0],n),r[0]=Math.max(r[0],n),t[1]=Math.min(t[1],a),r[1]=Math.max(r[1],a),t[2]=Math.min(t[2],s),r[2]=Math.max(r[2],s);let m=e.attributes.instanceOffset;if(m){let l,u,d,y;for(l=0;l<3;l++){for(d=1/0,y=-1/0,u=l;u<m.data.length;u+=m.size)d=Math.min(d,m.data[u]),y=Math.max(y,m.data[u]);t[l]=Math.fround(t[l]+d),r[l]=Math.fround(r[l]+y)}}let f=[(t[0]+r[0])/2,(t[1]+r[1])/2,(t[2]+r[2])/2],p=0;for(i=0;!m&&i<o.length;i+=3)n=o[i]-f[0],a=o[i+1]-f[1],s=o[i+2]-f[2],p=Math.max(p,n*n+a*a+s*s);let c=m?Math.hypot(r[0]-t[0],r[1]-t[1],r[2]-t[2])/2:Math.sqrt(p);if(!m&&(p===1/0||p<Number.MIN_VALUE/Number.EPSILON))for(c=0,i=0;i<o.length;i+=3)c=Math.max(c,Math.hypot(o[i]-f[0],o[i+1]-f[1],o[i+2]-f[2]));e.bounds={min:t,max:r,center:f,radius:c}}function kf(e,t,r,o,i){e.geometry.bounds||Be(e.geometry);let n=e.geometry.bounds,a=e.worldMatrix,s=e._cullingSphere;if(!s||s.bounds!==n||s.matrix!==a||s.version!==e._worldMatrixVersion||e._worldMatrixVersion===void 0){s||=e._cullingSphere={};let d=n.center;s.x=a[0]*d[0]+a[4]*d[1]+a[8]*d[2]+a[12],s.y=a[1]*d[0]+a[5]*d[1]+a[9]*d[2]+a[13],s.z=a[2]*d[0]+a[6]*d[1]+a[10]*d[2]+a[14],s.radius=n.radius*Math.max(Math.hypot(a[0],a[1],a[2]),Math.hypot(a[4],a[5],a[6]),Math.hypot(a[8],a[9],a[10])),s.bounds=n,s.matrix=a,s.version=e._worldMatrixVersion}let{x:m,y:f,z:p,radius:c}=s,l=t[2]*m+t[6]*f+t[10]*p+t[14],u=t[3]*m+t[7]*f+t[11]*p+t[15];e._sortDepth=l/u,e._visibleInFrame=r[0][0]*m+r[0][1]*f+r[0][2]*p+r[0][3]>=-c*o[0]&&r[1][0]*m+r[1][1]*f+r[1][2]*p+r[1][3]>=-c*o[1]&&r[2][0]*m+r[2][1]*f+r[2][2]*p+r[2][3]>=-c*o[2]&&r[3][0]*m+r[3][1]*f+r[3][2]*p+r[3][3]>=-c*o[3]&&r[4][0]*m+r[4][1]*f+r[4][2]*p+r[4][3]>=-c*o[4]&&r[5][0]*m+r[5][1]*f+r[5][2]*p+r[5][3]>=-c*o[5],e._visibleInFrame&&i.push(e)}function Ys(e,t,r,o,i,n,a){if(!e.visible)return;e.geometry&&(t?.altitude>=3&&!e.tile&&e._appearance!==0&&!e.program.nightLight&&e.program.depthTest!==!1&&a.push(e),kf(e,r,o,i,n));let s;for(s of e.children)Ys(s,t,r,o,i,n,a)}function _f(e,t,r){let i=J.get(e).projectionViewMatrix,n=v.get(e),a=n.frustum||=[new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4)],s=n.frustumLengths||=new Float64Array(6),m,f,p,c,l;for(m=0;m<6;m++){for(f=Math.floor(m/2),p=a[m],c=0;c<4;c++)l=c*4,p[c]=m===4?i[l+2]:m%2?i[l+3]-i[l+f]:i[l+3]+i[l+f];s[m]=Math.hypot(p[0],p[1],p[2])}let u=Tr.get(e);u||Tr.set(e,u=[]),u.length=0;let d=_t.get(e);d||_t.set(e,d=[]),d.length=0,r&&we(Q.get(e)),Ys(Q.get(e),t,i,a,s,u,d)}var I=new WeakMap;var A=new WeakMap;var Y=new WeakMap;var mi=new WeakMap;var se=new WeakMap;var Te=new WeakMap;b();var If=[];X();var zf=[];var Af={x:0,y:0};var Of={x:1,y:1};var Df={code:"@group(0)@binding(0)var source:texture_2d<f32>;@group(0)@binding(1)var sourceSampler:sampler;@group(0)@binding(2)var<uniform> opacity:f32;struct Varyings{@builtin(position)position:vec4f,@location(0)uv:vec2f};@vertex fn vertexMain(@builtin(vertex_index)index:u32)-> Varyings{let uv = vec2f(f32(index & 1u),f32(index >> 1u));return Varyings(vec4f(uv.x * 2.0 - 1.0,1.0 - uv.y * 2.0,0.0,1.0),uv);}@fragment fn fragmentMain(input:Varyings)->@location(0)vec4f{let color = textureSample(source,sourceSampler,input.uv);return vec4f(color.rgb,color.a * opacity);}"};var Kr={layout:"auto",vertex:{module:null,entryPoint:"vertexMain"},fragment:{module:null,entryPoint:"fragmentMain",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}}]},primitive:{topology:"triangle-strip"}};var Rf={magFilter:"linear",minFilter:"linear"};function Gf(e){let t=e.device;if(!e.roofBlit){let r=t.createShaderModule(Df);e.roofBlit={pipeline:t.createRenderPipeline((Kr.vertex.module=r,Kr.fragment.module=r,Kr)),sampler:t.createSampler(Rf)},Kr.vertex.module=null,Kr.fragment.module=null}}var sn={size:null,usage:null};var mn={colorAttachments:[{view:null,clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}]};var fn={source:null};var pn={texture:null};var cn=[null,null];function Uf(e,t){let r=t.texture;r.uploaded!==r.image&&(e.queue.copyExternalImageToTexture((fn.source=t.image,fn),(pn.texture=r.texture,pn),(cn[0]=r.texture.width,cn[1]=r.texture.height,cn)),fn.source=null,pn.texture=null,r.uploaded=r.image)}var ot={layout:null,entries:[{binding:0,resource:null},{binding:1,resource:null},{binding:2,resource:{buffer:null,offset:null,size:4}}]};var ln=[null];var un={value:new Float32Array(64)};function Ff(e,t){return(e.layer.options.zIndex||0)-(t.layer.options.zIndex||0)||e.tile.coords.z-t.tile.coords.z}function Nf(e,t,r,o,i,n,a){let s=v.get(e),m=s.device,f=e._map,p=Math.max(1,t.length)*64;un.value.length<p&&(un.value=new Float32Array(p));let c=un.value,l=m.createBuffer((sn.size=c.byteLength,sn.usage=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,sn)),u=m.createCommandEncoder(),d=u.beginRenderPass((mn.colorAttachments[0].view=Y.get(e).texture.texture.createView(),mn));mn.colorAttachments[0].view=null,d.setPipeline(s.roofBlit.pipeline),t.sort(Ff);let y,g,x,w,C,B,P,D;for([y,{tile:g,layer:x}]of t.entries())({coords:w}=g),C=g.texture,Uf(m,g),c[y*64]=x.options.opacity,B=256*f.getZoomScale(r,w.z),P=(w.x*B-o.x)*n/i.x,D=(w.y*B-o.y)*a/i.y,d.setViewport(P,D,Math.min(B*n/i.x,n-P),Math.min(B*a/i.y,a-D),0,1),d.setBindGroup(0,m.createBindGroup((ot.layout=s.roofBlit.pipeline.getBindGroupLayout(0),ot.entries[0].resource=C.texture.createView(),ot.entries[1].resource=s.roofBlit.sampler,ot.entries[2].resource.buffer=l,ot.entries[2].resource.offset=y*256,ot))),ot.layout=null,ot.entries[0].resource=null,ot.entries[1].resource=null,ot.entries[2].resource.buffer=null,d.draw(4);d.end(),m.queue.writeBuffer(l,0,c),m.queue.submit((ln[0]=u.finish(),ln)),ln[0]=null,l.destroy()}function jf(e,t){let r=-1/0,o,i;for(o of e)for(i of A.get(o).values())i.done&&!i.request.signal.aborted&&i.image&&(i._roofEntry||={tile:i,layer:o},t.push(i._roofEntry),r=Math.max(r,i.coords.z));return r}var Wf={size:[null,null],format:"rgba8unorm",usage:null};var Zf={addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"};function $f(e,t,r,o){let i=v.get(e),n=Wf;n.size[0]=r,n.size[1]=o,n.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT,t.texture&&(t.texture.width!==r||t.texture.height!==o)&&(F(e,t.texture.texture),t.texture.texture=i.device.createTexture(n),t.texture.width=r,t.texture.height=o),t.texture||={device:i.device,texture:i.device.createTexture(n),sampler:i.device.createSampler(Zf),samplerOptions:{addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"},image:null,width:r,height:o,format:"rgba8unorm",srgb:!1,flipY:!1,uploaded:null}}function Vf(e,t,r,o){let i=e._map,n=v.get(e),a=zf;a.length=0;let s=jf(t,a),m=1/0,f=1/0,p=-1/0,c=-1/0,l,u;a.length||(s=i.getZoom());for({tile:{coords:l}}of a)u=256*i.getZoomScale(s,l.z),m=Math.min(m,l.x*u),f=Math.min(f,l.y*u),p=Math.max(p,(l.x+1)*u),c=Math.max(c,(l.y+1)*u);let d=i.project(ne.get(e),s),y=Af,g=Of;y.x=a.length?m:d.x,y.y=a.length?f:d.y,g.x=a.length?p-m:1,g.y=a.length?c-f:1;let x=Math.min(1,4096/Math.max(g.x,g.y)),w=Math.max(1,Math.ceil(g.x*x)),C=Math.max(1,Math.ceil(g.y*x)),B=i.options.crs.scale(s)/(Xt*Math.cos(ne.get(e).lat*T)),P={matrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],texture:Y.get(e)?.texture};Y.set(e,P),P.signature=r,P.updatedAt=o,P.matrix[0]=B/g.x,P.matrix[10]=B/g.y,P.matrix[12]=(d.x-y.x)/g.x,P.matrix[14]=(d.y-y.y)/g.y,$f(e,P,w,C),Gf(n);try{Nf(e,a,s,y,g,w,C)}finally{a.length=0}}function qf(e,t,r){let o=If;o.length=0;let i=!1,n;for(n of t)o.push(`${h.Util.stamp(n)}:${Te.get(n)||0}:${n.options.opacity}:${n.options.zIndex}`),i||=!!se.get(n);let a=o.join("|");o.length=0,(!Y.get(e)||Y.get(e).signature!==a&&(!i||r-Y.get(e).updatedAt>=50))&&Vf(e,t,a,r)}function Hf(e,t){let r=e._map,o=mi.get(e);o||mi.set(e,o=[]),o.length=0;let i=!1,n,a;for(n of G.get(e))if(n.options.roofTexture||n.options.wallTexture){i=!0;break}if(i){for(a of Object.values(r._layers))I.get(a)==="raster"&&A.get(a)&&a.options.opacity>0&&o.push(a);qf(e,o,t)}else Y.get(e)&&(F(e,Y.get(e).texture.texture),Y.set(e,null));return o}function Yf(e,t){return e.program.transparent?(e.renderOrder||0)-(t.renderOrder||0)||t._sortDepth-e._sortDepth||e.id-t.id:(e._sortDepth??0)-(t._sortDepth??0)||e.id-t.id}function Xf(e,t){return+!!t.ground-+!!e.ground||(e.ground&&t.ground?(e.renderOrder||0)-(t.renderOrder||0)||e.tile.coords.z-t.tile.coords.z:0)||Number(e.program.transparent)-Number(t.program.transparent)||Yf(e,t)}var R=new WeakMap;var Qt=new WeakMap;X();function Kf(e,t,r){let o=t._map,i=e.geometry.bounds,n=e.worldMatrix,a=Qt.get(r),s=o.project(ne.get(t),a),m=o.options.crs.scale(a)/(Xt*Math.cos(ne.get(t).lat*T)),f=1/0,p=1/0,c=-1/0,l=-1/0,u,d,y,g,x,w,C,B;for(u=0;u<8;u++)d=u&1?i.max[0]:i.min[0],y=u&2?i.max[1]:i.min[1],g=u&4?i.max[2]:i.min[2],x=s.x+(n[0]*d+n[4]*y+n[8]*g+n[12])*m,w=s.y+(n[2]*d+n[6]*y+n[10]*g+n[14])*m,f=Math.min(f,x),p=Math.min(p,w),c=Math.max(c,x),l=Math.max(l,w);return R.get(r).maxLat!==void 0&&R.get(r).minLon!==void 0&&R.get(r).minLat!==void 0&&R.get(r).maxLon!==void 0&&(C=o.project([R.get(r).maxLat,R.get(r).minLon],a),B=o.project([R.get(r).minLat,R.get(r).maxLon],a),f=Math.max(f,C.x),p=Math.max(p,C.y),c=Math.min(c,B.x),l=Math.min(l,B.y),f>=c||p>=l)?null:[f,p,c,l]}function Jf(e,t,r){let o=256*2**(r-t.coords.z),i=t.coords.x*o,n=t.coords.y*o,a=[],s,m,f,p,c,l,u,d;for([s,m,f,p]of e){if(c=Math.max(s,i),l=Math.max(m,n),u=Math.min(f,i+o),d=Math.min(p,n+o),c>=u||l>=d){a.push([s,m,f,p]);continue}m<l&&a.push([s,m,f,l]),d<p&&a.push([s,d,f,p]),s<c&&a.push([s,l,c,d]),u<f&&a.push([u,l,f,d])}return a}function Qf(e,t,r){let o=!1,i=!1,n,a,s,m;for(n of r){if(!R.get(n)){i=!0;continue}if(a=Kf(e,t,n),!!a){o=!0,s=[a];for(m of A.get(n).values())if(!(!m.done&&!m.error)&&(s=Jf(s,m,Qt.get(n)),!s.length))return!0}}return!o&&!i}function ep(e,t,r,o){let i,n;if(t.program.uniforms.roofTexture&&!r.length&&(t._roofRevealed=!0),t.program.uniforms.roofTexture&&!t._roofRevealed&&r.length){It.get(e._map)?.control?._walk?.saved&&(t._roofRevealed=!0,t.fadeStart=o-(t.fadeDuration||0)),t._roofCoverageSignature!==Y.get(e)?.signature&&(t._roofCoverageSignature=Y.get(e)?.signature,t._roofCovered=Qf(t,e,r)),n=!1;for(i of r)if(!R.get(i)||se.get(i)>0){n=!0;break}if(!t._roofRevealed&&!t._roofCovered&&n)return t._appearance=0,!1;t._roofRevealed=!0}return!0}function tp(e,t,r,o){let i=Tr.get(e),n=_t.get(e),a=v.get(e),s=!1,m,f;for(m of i)ep(e,m,t,r)&&(m.fadeDuration&&(m.fadeStart??=m.tile?.loadedAt??r,f=Math.min(1,(r-m.fadeStart)/m.fadeDuration),m._appearance=f*f*(3-2*f),s||=f<1),o.push(m));i.length=0,o.sort(Xf);let p=1/0,c=-1/0;for(m of o)m.ground&&(p=Math.min(p,m.tile.coords.z),c=Math.max(c,m.tile.coords.z));a.groundOverlap=p!==c;let l=0;for(m of n)m.visible&&m._appearance!==0&&(n[l++]=m);return n.length=l,s}var dn={size:null,usage:null};function rp(e,t,r){let o=v.get(e);(!o.uniformBuffer||o.uniformBuffer.size<(t.length*2+r.length+1)*256)&&(o.uniformBuffer&&F(e,o.uniformBuffer),o.uniformBuffer=o.device.createBuffer((dn.size=Math.max(64,t.length*4+r.length*2)*256,dn.usage=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,dn)),o.uniformData=new Float32Array(o.uniformBuffer.size/4))}var L=new WeakMap;var Xe={layout:null,entries:[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null},{binding:3,resource:{buffer:null}}]};function hn(e){let t=v.get(e).sunlight;t.bindGroup=v.get(e).device.createBindGroup((Xe.layout=t.layout,Xe.entries[0].resource.buffer=t.buffer,Xe.entries[1].resource=t.texture.createView(),Xe.entries[2].resource=t.sampler,Xe.entries[3].resource.buffer=t.lights,Xe)),Xe.layout=null,Xe.entries[0].resource.buffer=null,Xe.entries[1].resource=null,Xe.entries[2].resource=null,Xe.entries[3].resource.buffer=null}function op(e,t,r,o,i){let n,a;for(n=0,a=o[r]*4;n<8;n++)i[a+n]=e[t+n];o[r]+=2}function ip(e,t,r,o,i,n,a,s){let m=e[t+3],f=e[t]-r,p=e[t+2]-o,c,l,u;for(c=Math.floor((p-m)/i);c<=Math.floor((p+m)/i);c++)for(l=Math.floor((f-m)/i);l<=Math.floor((f+m)/i);l++)u=c*n+l,s?op(e,t,u,a,s):a[u]++}function Xs(e,t,r,o,i,n,a){let s,m;for(s of e)for(m=0;m<s.length;m+=8)ip(s,m,t,r,o,i,n,a)}function np(e,t){let r=0,o,i,n,a;for(o of e)r+=o.length/8;let s=32,m;if(r){let f=1/0,p=1/0,c=-1/0,l=-1/0;for(o of e)for(i=0;i<o.length;i+=8)f=Math.min(f,o[i]-o[i+3]),c=Math.max(c,o[i]+o[i+3]),p=Math.min(p,o[i+2]-o[i+3]),l=Math.max(l,o[i+2]+o[i+3]);let u=Math.ceil((c-f)/s)+1,d=Math.ceil((l-p)/s)+1,y=new Uint32Array(u*d),g=new Uint32Array(u*d);Xs(e,f,p,s,u,y);let x=0;for(n of y)x+=n;let w=(2+u*d+x*2)*4;if(w*4>t)throw new Error("Streetlight grid exceeds GPU storage limit");m=new Float32Array(w),m[0]=f,m[1]=p,m[2]=s,m[3]=u,m[4]=d,m[5]=r;let C=2+u*d;for(a=0;a<y.length;a++)y[a]&&(m[(2+a)*4]=g[a]=C,m[(2+a)*4+1]=y[a],C+=y[a]*2);Xs(e,f,p,s,u,g,m)}else m=new Float32Array(8);return{data:m,count:r}}var ap=.03/(4*Math.PI);function sp(e,t){let r=new Float32Array(e.length*8),o,i,n,a,s,m,f,p;for(o=0;o<e.length;o++)({position:[i,n,a],radius:s,color:m,flux:f}=e[o]),p=t[3]*i+t[7]*n+t[11]*a+t[15],r[o*8]=(t[0]*i+t[4]*n+t[8]*a+t[12])/p,r[o*8+1]=(t[1]*i+t[5]*n+t[9]*a+t[13])/p,r[o*8+2]=(t[2]*i+t[6]*n+t[10]*a+t[14])/p,r[o*8+3]=s,r[o*8+4]=m[0],r[o*8+5]=m[1],r[o*8+6]=m[2],r[o*8+7]=f*ap;return r}function Ks(e,t,r){let o=t?.meshes.length===e.length,i,n,a,s,m,f,p;for(i=0;i<e.length;i++){for(n=e[i],a=n.worldMatrix,s=n.extras.lights,m=n._worldLights,f=!!m,p=0;p<a.length&&f;p++)f=a[p]===m.matrix[p];(!f||m.lights!==s)&&(m=n._worldLights={lights:s,matrix:[...a],data:sp(s,a)}),o&&=t.meshes[i].mesh===n&&t.meshes[i].cache===m}if(o)return t;let c=new Array(e.length),l=new Array(e.length);for(i=0;i<e.length;i++)n=e[i],m=n._worldLights,c[i]=m.data,l[i]={mesh:n,cache:m};return{...np(c,r),meshes:l}}var it=[];function Js(e,t,r){if(!e.visible)return;e.extras?.lights&&(e.extras.dynamicLights?r:t).push(e);let o;for(o of e.children||it)Js(o,t,r)}function mp(e){let{device:t,sunlight:r}=v.get(e),o=[],i=[],n;for(n of G.get(e))!n.options.nightLight||!L.get(n).visible||Js(L.get(n),o,i);let a=t.limits.maxStorageBufferBindingSize,s=Ks(o,r.staticLightGrid,a),m=Ks(i,r.dynamicLightGrid,a);if(s===r.staticLightGrid&&m===r.dynamicLightGrid)return;let f=s.data.byteLength+m.data.byteLength;if(f>a)throw new Error("Streetlight grid exceeds GPU storage limit");let p=s!==r.staticLightGrid;r.lights.size<f&&(F(e,r.lights),r.lights=t.createBuffer({size:f,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST}),hn(e),p=!0),s.data[6]=s.data.length/4,p&&t.queue.writeBuffer(r.lights,0,s.data),t.queue.writeBuffer(r.lights,s.data.byteLength,m.data),r.lightCount=s.count+m.count,r.staticLightGrid=s,r.dynamicLightGrid=m}function fp(e,t,r,o){let i=v.get(e),n=J.get(e),a=n.viewMatrix,s=o?.direction,m=s?s[0]:-300,f=s?s[1]:500,p=s?s[2]:300,c=a[0]*m+a[4]*f+a[8]*p,l=a[1]*m+a[5]*f+a[9]*p,u=a[2]*m+a[6]*f+a[10]*p,d=Math.hypot(c,l,u)||1,y=Math.hypot(a[4],a[5],a[6])||1;rp(e,t,r);let g=i.uniformData;g.set(n.viewMatrix,0),g.set(n.projectionMatrix,16),Y.get(e)?.matrix?g.set(Y.get(e).matrix,32):(g.fill(0,32,48),g[32]=g[37]=g[42]=g[47]=1),g[48]=c/d,g[49]=l/d,g[50]=u/d,g[51]=o&&o.altitude<=0?0:1,g[52]=a[4]/y,g[53]=a[5]/y,g[54]=a[6]/y;let x=o?Math.max(0,Math.min(1,(3-o.altitude)/9)):0;g[55]=x*x*(3-2*x);let w=o?.tint;g[56]=w?w[0]:1,g[57]=w?w[1]:1,g[58]=w?w[2]:1,g[59]=0,x>0&&mp(e),i.uniformSlot=1}var Jr={colorAttachments:[{view:null,clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}],depthStencilAttachment:{view:null,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}};var Qs=[null];var ge={layout:null,vertex:{module:null,entryPoint:"vertexMain",buffers:null},fragment:{module:null,entryPoint:"fragmentMain",targets:[{format:null,blend:null,writeMask:null}]},primitive:{topology:"triangle-list",cullMode:null,frontFace:null},depthStencil:{format:"depth24plus",depthWriteEnabled:null,depthCompare:null}};var pp={color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}};function cp(e,t,r,o){let{program:i}=t,n=i.depthTest===!1||t.ground&&e.groundOverlap?"always":"less-equal",a=`${r}:${o}:${n}`,s=i.pipelineCache.get(a);return s||(s=e.device.createRenderPipeline((ge.layout=i.pipelineLayout,ge.vertex.module=i.vertex,ge.vertex.buffers=i.vertexBuffers,ge.fragment.module=i.fragment,ge.fragment.targets[0].format=e.format,ge.fragment.targets[0].blend=i.transparent?pp:void 0,ge.fragment.targets[0].writeMask=GPUColorWrite.ALL,ge.primitive.cullMode=r,ge.primitive.frontFace=o,ge.depthStencil.depthWriteEnabled=i.depthWrite,ge.depthStencil.depthCompare=n,ge)),ge.layout=null,ge.vertex.module=null,ge.vertex.buffers=null,ge.fragment.module=null,i.pipelineCache.set(a,s)),s}function lp(e,t,r){let o=e.uniformData,i=(t._nativeSource||t._rasterSource)?.options.cutout;if(i&&(!Number.isFinite(i.x)||!Number.isFinite(i.y)||!Number.isFinite(i.radius)||i.radius<0))throw new Error("cutout requires finite x, y and a non-negative radius in CSS pixels");o[r+36]=(i?.x??0)*e.dpr,o[r+37]=(i?.y??0)*e.dpr,o[r+38]=(i?.radius??0)*e.dpr,o[r+39]=i?.outside?1:0}function up(e,t){let r=t.program.uniforms,o=e.uniformSlot++*256,i=e.uniformData,n=o/4;return i.set(t.worldMatrix,n),i.set(r.baseColor.value,n+16),i[n+19]=1,i[n+20]=r.metallic.value,i[n+21]=r.roughness.value,i[n+22]=r.opacity.value*(t.ground?t._appearance??1:1),i[n+23]=r.alphaCutoff.value,i.set(r.emissive.value,n+24),i[n+27]=r.occlusionStrength.value,i[n+28]=t.terrain?.[0]??0,i[n+29]=t.terrain?.[1]??0,i[n+30]=t.terrain?.[2]??0,i[n+31]=t.terrain?.[3]??0,i[n+32]=t.highlight?.[0]??0,i[n+33]=t.highlight?.[1]??0,i[n+34]=t.program.nightSparkle?i[55]:0,i[n+35]=t.ground?1:t._appearance??1,lp(e,t,n),o}var Pr={source:null,flipY:null};var Qr={texture:null};var eo=[null,null];function dp(e,t){t.uploaded!==t.image&&(e.queue.copyExternalImageToTexture((Pr.source=t.image,Pr.flipY=!!t.flipY,Pr),(Qr.texture=t.texture,Qr),(eo[0]=t.image.width,eo[1]=t.image.height,eo)),Pr.source=null,Qr.texture=null,t.uploaded=t.image)}var to={layout:null,entries:null};var hp=[];var gn={binding:0,resource:{buffer:null,size:160}};var yn={binding:1,resource:{buffer:null,size:240}};var xn={binding:2,resource:null};var fi=[{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null}];var pi=[{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null}];function gp(e,t,r){let{program:o}=t,i=hp;i.length=0,gn.resource.buffer=e.uniformBuffer,yn.resource.buffer=e.uniformBuffer,i.push(gn,yn),o.terrain&&(xn.resource=o.terrain.texture.createView(),i.push(xn)),t.boundBuffer=e.uniformBuffer;let n=t.boundTextures||=[];n.length=r.length;let a,s,m;for(a=0;a<r.length;a++)s=o.bindings[a],m=r[a],fi[a].binding=s.texture,fi[a].resource=m.texture.createView(),pi[a].binding=s.sampler,pi[a].resource=m.sampler,i.push(fi[a],pi[a]),n[a]||=[],n[a][0]=m.texture,n[a][1]=m.sampler;for(t.bindGroup=e.device.createBindGroup((to.layout=o.bindGroupLayout,to.entries=i,to)),to.layout=null,to.entries=null,gn.resource.buffer=null,yn.resource.buffer=null,xn.resource=null,a=0;a<r.length;a++)fi[a].resource=null,pi[a].resource=null;i.length=0}function yp(e,t){let{program:r}=t,{device:o}=e,i=t._textures||=[];i.length=0;let n,a,s;for(n of r.bindings){if(a=r.uniforms[n.name]?.value,!a)throw new Error(`Missing Layer3D texture: ${n.name}`);dp(o,a),i.push(a)}let m=!t.bindGroup||t.boundBuffer!==e.uniformBuffer||i.length!==t.boundTextures.length;for(s=0;!m&&s<i.length;s++)(i[s].texture!==t.boundTextures[s][0]||i[s].sampler!==t.boundTextures[s][1])&&(m=!0);m&&gp(e,t,i)}function vn(e,t,r,o,i){let{geometry:n}=t,a=v.get(e),{device:s}=a,m=cp(a,t,o,i),f=up(a,t);yp(a,t),r.setPipeline(m),r.setBindGroup(0,t.bindGroup,(Qs[0]=f,Qs)),r.setVertexBuffer(0,n.attributes.position.buffer),r.setVertexBuffer(1,n.attributes.normal.buffer),n.attributes.color&&r.setVertexBuffer(2,n.attributes.color.buffer),n.attributes.uv&&r.setVertexBuffer(3,n.attributes.uv.buffer);let p=n.attributes.instanceOffset;p&&r.setVertexBuffer(4,p.buffer);let c,l;for(c in n.attributes)l=n.attributes[c],l.needsUpdate&&(s.queue.writeBuffer(l.buffer,0,l.data),l.needsUpdate=!1,(c==="position"||c==="instanceOffset")&&(n.bounds=null));let u=n.attributes.index;u?(r.setIndexBuffer(u.buffer,u.indexFormat),r.drawIndexed(n.drawRange.count,p?.count??1,n.drawRange.start,0,0)):r.draw(n.drawRange.count,p?.count??1,n.drawRange.start,0)}function xp(e,t,r){let o=v.get(e),i=t.beginRenderPass((Jr.colorAttachments[0].view=o.context.getCurrentTexture().createView(),Jr.depthStencilAttachment.view=o.depthTexture.createView(),Jr));Jr.colorAttachments[0].view=null,Jr.depthStencilAttachment.view=null,i.setViewport(0,0,o.canvas.width,o.canvas.height,0,1),i.setBindGroup(1,o.sunlight.bindGroup);let n,a,s,m,f,p;for(n of r){if(a=n.worldMatrix,n.texture&&(n.program.uniforms.baseTexture.value=n.texture,n.program.uniforms.opacity.value=n.opacity),s=n.program.uniforms,s.roofTexture&&(s.roofTexture.value=Y.get(e)?.texture||o.roofFallbackTexture),!n._frontFace||n._frontFaceWorldVersion!==n._worldMatrixVersion||n._worldMatrixVersion===void 0){if(m=a[0]*(a[5]*a[10]-a[6]*a[9])-a[4]*(a[1]*a[10]-a[2]*a[9])+a[8]*(a[1]*a[6]-a[2]*a[5]),!Number.isFinite(m)||m===0)throw new Error("Singular 3D transform");n._frontFace=m<0?"cw":"ccw",n._frontFaceWorldVersion=n._worldMatrixVersion}f=n._frontFace,p=n.program,p.transparent&&p._layerMaterial.doubleSided&&!n._nativeSource?(vn(e,n,i,"front",f),vn(e,n,i,"back",f)):vn(e,n,i,p.cullMode,f)}i.end()}var vp=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0]);var wp=new Float32Array(20);function Mp(e,t){let r=e.meshes.get(t),o=t.geometry.drawRange;if(!(r&&r.world===t._worldMatrixVersion&&r.geometry===t.geometry&&r.start===o.start&&r.count===o.count&&r.appearance===(t._appearance??1)))return!1;let i;for(i of Object.values(t.geometry.attributes))if(i.needsUpdate)return!1;return!0}function bp(e,t,r){let o=e.cache,i=e.enabled&&o?.meshes.size===t.length,n,a;if(i){for(n=0;n<r.direction.length;n++)if(r.direction[n]!==o.direction[n]){i=!1;break}}if(i){for(a of t)if(!Mp(o,a)){i=!1;break}}return i}var Lp={min:[0,0,0],max:[0,0,0]};var Bp={position:[0,0,0],target:[0,0,0],up:[0,0,-1],x:[0,0,0],y:[0,0,0],z:[0,0,0],fov:45,aspect:1,near:1,far:500,viewMatrix:[],projectionMatrix:[],projectionViewMatrix:[]};var Tp=[0,0,0];var Pp=[0,0,0];function Cp(e,t,r){let o=e._shadowBounds;if(!o||o.version!==e._worldMatrixVersion||o.bounds!==t){o||=e._shadowBounds={min:[1/0,1/0,1/0],max:[-1/0,-1/0,-1/0]},o.version=e._worldMatrixVersion,o.bounds=t,o.min.fill(1/0),o.max.fill(-1/0);let i,n,a,s,m,f,p;for(i=0;i<8;i++)for(n=i&1?t.max[0]:t.min[0],a=i&2?t.max[1]:t.min[1],s=i&4?t.max[2]:t.min[2],m=r[3]*n+r[7]*a+r[11]*s+r[15],f=0;f<3;f++)p=(r[f]*n+r[f+4]*a+r[f+8]*s+r[f+12])/m,o.min[f]=Math.min(o.min[f],p),o.max[f]=Math.max(o.max[f],p)}return o}function Sp(e,t={min:[1/0,1/0,1/0],max:[-1/0,-1/0,-1/0]}){let{min:r,max:o}=t;r.fill(1/0),o.fill(-1/0);let i,n,a,s,m;for(i of e)for((!i.geometry.bounds||i.geometry.attributes.position.needsUpdate)&&Be(i.geometry),n=i.geometry.bounds,a=i.worldMatrix,s=Cp(i,n,a),m=0;m<3;m++)r[m]=Math.min(r[m],s.min[m]),o[m]=Math.max(o[m],s.max[m]);return r[1]=Math.min(0,r[1]),t}function Ep(e,t){let{min:r,max:o}=Sp(e,Lp),i=Bp;i.viewTransform||=new DOMMatrix,i.projectionTransform||=new DOMMatrix,i.projectionViewTransform||=new DOMMatrix;let n=Tp,a=Pp,s,m,f,p,c,l,u=Math.max(100,Math.hypot(o[0]-r[0],o[1]-r[1],o[2]-r[2]));for(s=0;s<3;s++)i.target[s]=(r[s]+o[s])/2,i.position[s]=i.target[s]+t.direction[s]*u*2;i.far=u*5,Xr(i);let d=i.viewMatrix;for(n.fill(1/0),a.fill(-1/0),s=0;s<8;s++)for(f=s&1?o[0]:r[0],p=s&2?o[1]:r[1],c=s&4?o[2]:r[2],m=0;m<3;m++)l=d[m]*f+d[m+4]*p+d[m+8]*c+d[m+12],n[m]=Math.min(n[m],l-20),a[m]=Math.max(a[m],l+20);let y=2/(a[0]-n[0]),g=2/(a[1]-n[1]),x=-1/(a[2]-n[2]),w=new Float32Array(16);for(s=0;s<16;s+=4)w[s]=d[s]*y,w[s+1]=d[s+1]*g,w[s+2]=d[s+2]*x,w[s+3]=d[s+3];return w[12]-=(a[0]+n[0])/(a[0]-n[0]),w[13]-=(a[1]+n[1])/(a[1]-n[1]),w[14]+=a[2]/(a[2]-n[2]),w}var em={entries:[{binding:0,visibility:null,buffer:{type:"uniform",hasDynamicOffset:!0}}]};var tm={entries:[{binding:0,visibility:null,buffer:{type:"uniform"}}]};var ro={layout:null,entries:[{binding:0,resource:{buffer:null}}]};var wn={code:null};var lt={layout:null,vertex:{module:null,entryPoint:"main",buffers:null},fragment:{module:null,entryPoint:"fragmentMain",targets:[]},primitive:{topology:"triangle-list",cullMode:"none"},depthStencil:{format:"depth32float",depthWriteEnabled:!0,depthCompare:"less",depthBias:2,depthBiasSlopeScale:2}};var oo={bindGroupLayouts:[null,null]};var io=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:0,offset:0,format:"float32x3"})])});var Mn=Object.freeze({arrayStride:16,stepMode:"instance",attributes:Object.freeze([Object.freeze({shaderLocation:4,offset:0,format:"float32x4"})])});var kp=[io,Mn];var _p=[io];function rm(e,t,r=!1){let o=r?"instancePipeline":"pipeline";if(!t[o]){t.meshLayout||(t.meshLayout=e.createBindGroupLayout((em.entries[0].visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,em)),t.depthLayout=e.createBindGroupLayout((tm.entries[0].visibility=GPUShaderStage.VERTEX,tm)),t.depthBindGroup=e.createBindGroup((ro.layout=t.depthLayout,ro.entries[0].resource.buffer=t.buffer,ro)),ro.layout=null,ro.entries[0].resource.buffer=null);let i=e.createShaderModule((wn.code=` struct Mesh{world:mat4x4<f32>,padding:array<vec4<f32>,4>,highlight:vec4<f32>};@group(0)@binding(0)var<uniform> mesh:Mesh;@group(1)@binding(0)var<uniform> matrix:mat4x4<f32>;@vertex fn main(@location(0)position:vec3<f32>${r?", @location(4) offset: vec4<f32>":""})->@builtin(position)vec4<f32>{return matrix * mesh.world * vec4<f32>(position${r?" + offset.xyz":""},1.0);}@fragment fn fragmentMain(@builtin(position)position:vec4<f32>){let noise = fract(52.9829189 * fract(dot(floor(position.xy),vec2<f32>(0.06711056,0.00583715))));if(mesh.highlight.w < 1.0 && noise >= mesh.highlight.w){discard;}}`,wn));wn.code=null;let n=r?kp:_p;t[o]=e.createRenderPipeline((lt.layout=e.createPipelineLayout((oo.bindGroupLayouts[0]=t.meshLayout,oo.bindGroupLayouts[1]=t.depthLayout,oo)),lt.vertex.module=i,lt.vertex.buffers=n,lt.fragment.module=i,lt)),oo.bindGroupLayouts[0]=null,oo.bindGroupLayouts[1]=null,lt.layout=null,lt.vertex.module=null,lt.vertex.buffers=null,lt.fragment.module=null}}var bn={colorAttachments:[],depthStencilAttachment:{view:null,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}};var no={layout:null,entries:[{binding:0,resource:{buffer:null,size:144}}]};var om=[null];function Ip(e,t,r){let o=v.get(e),i=o.device,n=o.sunlight,a=t.beginRenderPass((bn.depthStencilAttachment.view=n.texture.createView(),bn));bn.depthStencilAttachment.view=null;let s=n.pipeline;a.setPipeline(s),a.setBindGroup(1,n.depthBindGroup);let m,f,p,c,l,u,d;for(m of r){f=m.geometry.attributes.instanceOffset,p=f?n.instancePipeline:n.pipeline,p!==s&&(s=p,a.setPipeline(s)),c=o.uniformSlot++*256,o.uniformData.set(m.worldMatrix,c/4),o.uniformData[c/4+35]=m._appearance??1,m._shadowBuffer!==o.uniformBuffer&&(m._shadowBuffer=o.uniformBuffer,m._shadowBindGroup=i.createBindGroup((no.layout=n.meshLayout,no.entries[0].resource.buffer=o.uniformBuffer,no)),no.layout=null,no.entries[0].resource.buffer=null);for(l of Object.values(m.geometry.attributes))l.needsUpdate&&(i.queue.writeBuffer(l.buffer,0,l.data),l.needsUpdate=!1);a.setBindGroup(0,m._shadowBindGroup,(om[0]=c,om)),a.setVertexBuffer(0,m.geometry.attributes.position.buffer),f&&a.setVertexBuffer(1,f.buffer),u=m.geometry.attributes.index,d=m.geometry.drawRange,u?(a.setIndexBuffer(u.buffer,u.indexFormat),a.drawIndexed(d.count,f?.count??1,d.start,0,0)):a.draw(d.count,f?.count??1,d.start,0)}a.end()}var ci={size:[null,null],format:"depth32float",usage:null};function Ln(e,t){let r=v.get(e).device,o=v.get(e).sunlight;o.size!==t&&(o.texture&&F(e,o.texture),o.size=t,o.texture=r.createTexture((ci.size[0]=t,ci.size[1]=t,ci.usage=GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC,ci)),hn(e))}function zp(e,t,r,o){let i=v.get(e),n=i.device,a=i.sunlight;if(!r.length||!o||o.altitude<3){if(!a.enabled)return;n.queue.writeBuffer(a.buffer,0,vp),a.enabled=!1,a.cache=null;return}if(bp(a,r,o))return;let s=wp;a.enabled=!0,Ln(e,Math.min(2048,n.limits.maxTextureDimension2D)),s.set(Ep(r,o)),s[16]=1,n.queue.writeBuffer(a.buffer,0,s),rm(n,a);let m;for(m of r)if(m.geometry.attributes.instanceOffset){rm(n,a,!0);break}Ip(e,t,r);let f=new Map,p;for(p of r)f.set(p,{world:p._worldMatrixVersion,geometry:p.geometry,start:p.geometry.drawRange.start,count:p.geometry.drawRange.count,appearance:p._appearance??1});a.cache={direction:[...o.direction],meshes:f}}function Bn(e){let t=et.get(e);kt.delete(e),et.set(e,null),!kt.size&&t!=null&&cancelAnimationFrame(t)}var zt=new WeakMap;var li=new WeakMap;var ui=new WeakMap;var me=new WeakMap;var Tn=new WeakMap;function Z(e,t){e.parent&&e.parent.children.splice(e.parent.children.indexOf(e),1),e.parent=t,t&&t.children.push(e)}function ao(e,t){Tn.get(e)?.abort();let r=A.get(e).get(t);r&&(Z(r,null),_(e),r.texture!==t.texture&&F(e,r.texture.texture),A.get(e).delete(t))}function so(e,t){let r=`${t.coords.z}/${t.coords.x}/${t.coords.y}`;A.get(e).get(r)===t&&(A.get(e).delete(r),Te.set(e,(Te.get(e)||0)+1),t.request.abort(),me.get(e)&&ao(me.get(e),t),t.mesh&&Z(t.mesh,null),t.texture&&F(e,t.texture.texture),t.image?.close(),e.fire("tileunload",{tile:t,coords:t.coords}),_(e))}function mo(e){let t=Ht.get(e),r=performance.now();if(li.get(e)===Te.get(e)&&ui.get(e)===t&&r<zt.get(e))return Number.isFinite(zt.get(e));li.set(e,Te.get(e)),ui.set(e,t),zt.set(e,1/0);let o=[],i,n,a,s,m,f;for(i of t)n=A.get(e).get(i),n?.done&&r-n.loadedAt<250&&zt.set(e,Math.min(zt.get(e),n.loadedAt+250)),(!n?.done||r-n.loadedAt<250)&&(a=i.split("/"),o.push({z:Number(a[0]),x:Number(a[1]),y:Number(a[2])}));for([i,n]of A.get(e))if(!t.has(i)){s=!1;for(m of o)if(f=Math.min(m.z,n.coords.z),Math.floor(m.x/2**(m.z-f))===Math.floor(n.coords.x/2**(n.coords.z-f))&&Math.floor(m.y/2**(m.z-f))===Math.floor(n.coords.y/2**(n.coords.z-f))){s=!0;break}s||so(e,n)}return Number.isFinite(zt.get(e))}b();function fo(e){return xe.get(e.source)===e&&e.map.hasLayer(e.source)}b();var Pn=Object.freeze([1,1,1]);var Cr=new WeakMap;b();function Cn(e,t,r,o){let{source:i,marker:n,paneOrder:a,order:s}=e;t.program.uniforms.baseColor.value=r,t.program.uniforms.opacity.value=o,i instanceof h.GridLayer&&(t.opacity=o);let m=n?i._zIndex+(Cr.get(i)||0):i.options.zIndex;t.renderOrder=a*1e6+(m||0)*1e3+s,t._nativeSource=i,t._nativeUsed=!0}var Ap=Object.freeze([0,2,1,1,2,3]);var im=Object.freeze([0,0,1,0,0,1,1,1]);var Op=Object.freeze({minFilter:"linear",magFilter:"linear"});function _e(e,t){if(!t)return;Z(t,null),_(e);let r;for(r of Object.values(t.geometry.attributes))r.buffer.destroy()}async function Rp(e,t,r,o,i,n,a){let s;try{if(s=await createImageBitmap(o),!fo(e)||e.textures.get(t)!==r)return;i.queue.copyExternalImageToTexture({source:s},{texture:r.texture},[n,a]),r.uploaded=o,r.pending=!1,qe(e)}catch(m){e.failed=!0,e.source.fire("error",{error:m})}finally{s?.close()}}function Gp(e,t,r,o,i,n,a){try{i.queue.copyExternalImageToTexture({source:o},{texture:r.texture},[n,a])}catch(s){throw r.texture.destroy(),e.textures.delete(t),s}r.uploaded=o}function Up(e,t,r){if(!(r instanceof HTMLImageElement)&&!(r instanceof HTMLCanvasElement))throw new Error("WebGPU native raster layers require image or canvas tiles");let{backend:o,textures:i,meshes:n}=e,a=i.get(t),s=r.currentSrc||r.src;if(!a||a.image!==r||a.url!==s){if(a){let c=n.get(t);c&&_e(o,c),n.delete(t),F(o,a.texture),i.delete(t)}let m=r.naturalWidth||r.width,f=r.naturalHeight||r.height;if(!m||!f)return;let{device:p}=v.get(o);a={device:p,image:r,url:s,format:"rgba8unorm",uploaded:null,texture:p.createTexture({size:[m,f],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:p.createSampler(Op)},i.set(t,a),r instanceof HTMLCanvasElement?(a.pending=!0,Rp(e,t,a,r,p,m,f)):Gp(e,t,a,r,p,m,f)}return a.used=!0,a.uploaded===r?a:void 0}b();var po=Object.freeze({});var Sn={size:null,usage:null};var ut={value:0};function Pe(){return{position:[0,0,0],rotation:[0,0,0],scale:[1,1,1],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],highlightRange:[0,0],visible:!0}}var En={code:null};var kn={code:null};var co={bindGroupLayouts:[null,null]};var Fp=" fn demSample(pixel:vec2<i32>)-> f32{if(any(pixel < vec2<i32>(0))|| any(pixel >= vec2<i32>(textureDimensions(dem)))){return -1e9;}return textureLoad(dem,pixel,0).r;}fn elevation(pixel:vec2<f32>,base:f32)-> f32{let p = pixel - vec2<f32>(0.5);let f = fract(p);let i = vec2<i32>(floor(p));let v00 = demSample(i);let v10 = demSample(i + vec2<i32>(1,0));let v01 = demSample(i + vec2<i32>(0,1));let v11 = demSample(i + vec2<i32>(1,1));if(v00 > -1000.0 && v10 > -1000.0 && v01 > -1000.0 && v11 > -1000.0){return mix(mix(v00,v10,f.x),mix(v01,v11,f.x),f.y);}if(v00 > -1000.0){return v00;}if(v10 > -1000.0){return v10;}if(v01 > -1000.0){return v01;}if(v11 > -1000.0){return v11;}return base;}";var Np=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:1,offset:0,format:"float32x3"})])});var jp=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:2,offset:0,format:"float32x3"})])});var Wp=Object.freeze({arrayStride:8,attributes:Object.freeze([Object.freeze({shaderLocation:3,offset:0,format:"float32x2"})])});var _n={entries:null};var Zp=[];var nm={binding:0,visibility:null,buffer:{type:"uniform",hasDynamicOffset:!0}};var am={binding:1,visibility:null,buffer:{type:"uniform"}};var sm={binding:2,visibility:null,texture:{sampleType:"unfilterable-float",viewDimension:"2d"}};var $p=[{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}}];var Vp=[{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}}];function qp(e,t){let r=Zp;r.length=0,nm.visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,am.visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,r.push(nm,am),t.hasTerrain&&(sm.visibility=GPUShaderStage.VERTEX,r.push(sm));let o,i,n=0;for(o of t.bindings)i=$p[n],i.binding=o.texture,i.visibility=GPUShaderStage.FRAGMENT,r.push(i),i=Vp[n++],i.binding=o.sampler,i.visibility=GPUShaderStage.FRAGMENT,r.push(i);let a=e.createBindGroupLayout((_n.entries=r,_n));return _n.entries=null,a}function Hp(e){let t={baseColor:{value:e.color||[1,1,1]},metallic:{value:e.metallic??0},roughness:{value:e.roughness??.85},opacity:{value:e.opacity??1},alphaCutoff:{value:e.alphaCutoff??.5},occlusionStrength:{value:e.occlusionStrength??1},emissive:{value:e.emissive||[0,0,0]}};return e.baseTexture&&(t.baseTexture={value:e.baseTexture}),e.metalTexture&&(t.metalTexture={value:e.metalTexture}),e.emissiveTexture&&(t.emissiveTexture={value:e.emissiveTexture}),e.occlusionTexture&&(t.occlusionTexture={value:e.occlusionTexture}),(e.roofTexture||e.wallTexture)&&(t.roofTexture={value:null}),t}function lo(e,t,r){if(!r)return"";let o=3+e.length*2;return e.push({name:t,texture:o,sampler:o+1}),`@group(0)@binding(${o})var ${t}:texture_2d<f32>;@group(0)@binding(${o+1})var ${t}Sampler:sampler;`}function Yp(e){let t,r;for(t of["roofTexture","wallTexture"])if(r=e[t],r!==void 0&&typeof r!="boolean"&&(!Number.isFinite(r)||r<0||r>1))throw new Error(`${t} must be a boolean or a finite number between 0 and 1`)}function Xp(e){let t=Number(e.roofTexture??0);return` output.roofUv =(frame.roofMatrix * world).xz;output.roof = select(0.0,select(${Number(e.wallTexture??0).toFixed(8)},${t.toFixed(8)},input.normal.y >= 0.5),((${!!e.roofTexture} && input.normal.y >= 0.5)||(${!!e.wallTexture} && abs(input.normal.y)< 0.5))&& !highlighted);`}function Kp(e,t,r,o,i,n){let a=e.instanced?" + input.instanceOffset.xyz":"";return` struct Mesh{worldMatrix:mat4x4<f32>,baseColor:vec4<f32>,material:vec4<f32>,emissive:vec4<f32>,terrain:vec4<f32>,highlight:vec4<f32>,cutout:vec4<f32>,};struct Frame{viewMatrix:mat4x4<f32>,projectionMatrix:mat4x4<f32>,roofMatrix:mat4x4<f32>,lightDirection:vec4<f32>,skyDirection:vec4<f32>,atmosphereTint:vec4<f32>,};@group(0)@binding(0)var<uniform> u:Mesh;@group(0)@binding(1)var<uniform> frame:Frame;struct Solar{matrix:mat4x4<f32>,params:vec4<f32>};@group(1)@binding(0)var<uniform> solar:Solar;${o?`@group(0)@binding(2)var dem:texture_2d<f32>;${r}`:""} struct VertexInput{@location(0)position:vec3<f32>,@location(1)normal:vec3<f32>,${e.instanced?"@location(4) instanceOffset: vec4<f32>,":""} ${e.vertexColors?"@location(2) color: vec3<f32>,":""} ${i?"@location(3) uv: vec2<f32>,":""}};struct VertexOutput{@builtin(position)position:vec4<f32>,@location(0)color:vec3<f32>,@location(1)normal:vec3<f32>,@location(2)viewPosition:vec3<f32>,@location(6)shadowPosition:vec4<f32>,@location(7)worldPosition:vec3<f32>,${t?"@location(8) localPosition: vec3<f32>,":""} ${i?"@location(3) uv: vec2<f32>,":""} ${n?"@location(4) roofUv: vec2<f32>, @location(5) roof: f32,":""}};@vertex fn vertexMain(input:VertexInput,@builtin(vertex_index)vertexIndex:u32)-> VertexOutput{var output:VertexOutput;var position = input.position${a};${o?"position.y = elevation(u.terrain.xy + input.uv * u.terrain.z, u.terrain.w) - u.terrain.w;":""} let featureVertex = f32(vertexIndex)${e.instanced?" + input.instanceOffset.w":""};let highlighted = featureVertex >= u.highlight.x && featureVertex < u.highlight.y;output.color = ${e.vertexColors?"select(input.color, vec3<f32>(72.0 / 255.0, 217.0 / 255.0, 1.0), highlighted)":"u.baseColor.rgb"};let m = mat3x3<f32>(u.worldMatrix[0].xyz,u.worldMatrix[1].xyz,u.worldMatrix[2].xyz);let normal =(cross(m[1],m[2])* input.normal.x + cross(m[2],m[0])* input.normal.y + cross(m[0],m[1])* input.normal.z)/ determinant(m);output.normal =(frame.viewMatrix * vec4<f32>(normal,0.0)).xyz;let world = u.worldMatrix * vec4<f32>(position,1.0);output.shadowPosition = solar.matrix * world;output.worldPosition = world.xyz / world.w;${t?`output.localPosition = input.position${a};`:""} let viewPosition = frame.viewMatrix * world;output.viewPosition = viewPosition.xyz;${i?"output.uv = input.uv;":""} ${n?Xp(e):""} output.position = frame.projectionMatrix * viewPosition;return output;}`}function Jp(e,t,r){return` var normal = normalize(input.normal)* select(-1.0,1.0,frontFacing);let texel = ${t?"textureSample(baseTexture, baseTextureSampler, input.uv)":"vec4<f32>(1.0)"};let alpha = u.material.z * texel.a;${e.alphaMode==="MASK"?"if (alpha < u.material.w) { discard; }":""} ${e.alphaMode==="BLEND"?"if (alpha < 0.01) { discard; }":""} var base = ${e.vertexColors?"toLinear(min(input.color, vec3<f32>(1.0)))":"input.color"} * ${e.baseTexture?.srgb?"texel.rgb":"toLinear(texel.rgb)"};${r?" if(input.roof > 0.0 && all(input.roofUv >= vec2<f32>(0.0))&& all(input.roofUv <= vec2<f32>(1.0))){let roof = textureSampleLevel(roofTexture,roofTextureSampler,input.roofUv,0.0);base = mix(base,toLinear(roof.rgb),roof.a * input.roof);}":""}`}function Qp(e,t,r,o,i,n,a){return e.unlit?` let rasterTexel = ${r?"textureSample(baseTexture, baseTextureSampler, input.uv)":"vec4<f32>(input.color, 1.0)"};return vec4<f32>(toSRGB(toLinear(rasterTexel.rgb)*(frame.atmosphereTint.rgb *(0.55 + 0.45 * sunlight)+ artificial)),${e.alphaMode==="BLEND"?"u.material.z * rasterTexel.a":"1.0"});`:`${Jp(e,r,a)} let mr = ${o?"textureSample(metalTexture, metalTextureSampler, input.uv)":"vec4<f32>(1.0)"};let metal = clamp(u.material.x * mr.b,0.0,1.0);let rough = clamp(u.material.y * mr.g,0.08,1.0);let view = normalize(-input.viewPosition);let halfVector = normalize(view + frame.lightDirection.xyz);let nl = max(dot(normal,frame.lightDirection.xyz),0.0)* frame.lightDirection.w * sunlight;let nv = max(dot(normal,view),0.001);let nh = max(dot(normal,halfVector),0.0);let vh = max(dot(view,halfVector),0.0);let a2 = pow(rough,4.0);let d = a2 / max(PI * pow(nh * nh *(a2 - 1.0)+ 1.0,2.0),0.0001);let gv = nl * sqrt(nv * nv *(1.0 - a2)+ a2);let gl = nv * sqrt(nl * nl *(1.0 - a2)+ a2);let visibility = 0.5 / max(gv + gl,0.0001);let f0 = mix(vec3<f32>(0.04),base,metal);let fresnel = f0 +(1.0 - f0)* pow(1.0 - vh,5.0);let specular = d * visibility * fresnel;let diffuse =(1.0 - metal)* base / PI;let sky = dot(normal,frame.skyDirection.xyz)* 0.5 + 0.5;let ambient = mix(toLinear(vec3<f32>(0.455,0.412,0.322)),vec3<f32>(1.0),sky)*(2.0 / PI);let ao = ${n?"mix(1.0, textureSample(occlusionTexture, occlusionTextureSampler, input.uv).r, u.emissive.w)":"1.0"};${t?" let lattice =(fract(input.localPosition / 2.5)- 0.5)* 2.5;let pointGlow =(1.0 - smoothstep(0.16,0.42,length(lattice)))* u.highlight.z;":""} let glow = ${t?"vec3<f32>(3.0, 2.6, 1.8) * pointGlow +":""}${e.vertexColors?" max(input.color - vec3<f32>(1.0), vec3<f32>(0.0)) * (0.3 + 5.0 * frame.skyDirection.w) +":""} u.emissive.rgb * ${i?e.emissiveTexture.srgb?"textureSample(emissiveTexture, emissiveTextureSampler, input.uv).rgb":"toLinear(textureSample(emissiveTexture, emissiveTextureSampler, input.uv).rgb)":"vec3<f32>(1.0)"};var color = ambient * base *(1.0 - metal)* ao +(diffuse + specular)* nl * toLinear(vec3<f32>(1.0,0.937,0.835))* 3.0 + glow;${e.vertexColors?"color = base * (ambient + toLinear(vec3<f32>(1.0, 0.937, 0.835)) * (3.0 / PI) * nl) + glow;":""} color =(color - glow)* frame.atmosphereTint.rgb + base * artificial *(1.0 - metal * 0.5)+ glow;appearance(input.position.xy);return vec4<f32>(toSRGB(color),${e.alphaMode==="BLEND"?"alpha":"1.0"});`}function ec(e=po,t=!1,r=""){let o=!!e.baseTexture,i=!!e.metalTexture,n=!!e.emissiveTexture,a=!!e.occlusionTexture,s=!!(e.roofTexture||e.wallTexture);Yp(e);let m=!!e.terrain,f=o||i||n||a||e.nightLight,p=Kp(e,t,r,m,f,s),c=[],l=lo(c,"baseTexture",o),u=lo(c,"metalTexture",i),d=lo(c,"emissiveTexture",n),y=lo(c,"occlusionTexture",a),g=lo(c,"roofTexture",s),x=` struct Mesh{worldMatrix:mat4x4<f32>,baseColor:vec4<f32>,material:vec4<f32>,emissive:vec4<f32>,terrain:vec4<f32>,highlight:vec4<f32>,cutout:vec4<f32>,};struct Frame{viewMatrix:mat4x4<f32>,projectionMatrix:mat4x4<f32>,roofMatrix:mat4x4<f32>,lightDirection:vec4<f32>,skyDirection:vec4<f32>,atmosphereTint:vec4<f32>,};struct Solar{matrix:mat4x4<f32>,params:vec4<f32>,};@group(0)@binding(0)var<uniform> u:Mesh;@group(0)@binding(1)var<uniform> frame:Frame;@group(1)@binding(0)var<uniform> solar:Solar;@group(1)@binding(1)var shadowTexture:texture_depth_2d;@group(1)@binding(2)var shadowSampler:sampler_comparison;@group(1)@binding(3)var<storage,read> lightGrid:array<vec4<f32>>;${l}${u}${d}${y}${g} struct FragmentInput{@builtin(position)position:vec4<f32>,@location(0)color:vec3<f32>,@location(1)normal:vec3<f32>,@location(2)viewPosition:vec3<f32>,@location(6)shadowPosition:vec4<f32>,@location(7)worldPosition:vec3<f32>,${t?"@location(8) localPosition: vec3<f32>,":""} ${f?"@location(3) uv: vec2<f32>,":""} ${s?"@location(4) roofUv: vec2<f32>, @location(5) roof: f32,":""}};const PI:f32 = 3.14159265;fn toLinear(c:vec3<f32>)-> vec3<f32>{return select(c / 12.92,pow((c + vec3<f32>(0.055))/ 1.055,vec3<f32>(2.4)),c >= vec3<f32>(0.04045));}fn toSRGB(c:vec3<f32>)-> vec3<f32>{return select(c * 12.92,1.055 * pow(max(c,vec3<f32>(0.0)),vec3<f32>(1.0 / 2.4))- vec3<f32>(0.055),c >= vec3<f32>(0.0031308));}fn sunVisibility(position:vec4<f32>)-> f32{let p = position.xyz / position.w;let uv = vec2<f32>(p.x * 0.5 + 0.5,0.5 - p.y * 0.5);if(solar.params.x < 0.5 || any(uv < vec2<f32>(0.0))|| any(uv > vec2<f32>(1.0))|| p.z < 0.0 || p.z > 1.0){return 1.0;}return textureSampleCompareLevel(shadowTexture,shadowSampler,uv,p.z - 0.0003);}fn gridLighting(position:vec3<f32>,normal:vec3<f32>,offset:u32)-> vec3<f32>{let grid = lightGrid[offset];if(grid.w < 1.0){return vec3<f32>(0.0);}let cell = vec2<i32>(floor((position.xz - grid.xy)/ grid.z));if(any(cell < vec2<i32>(0))|| cell.x >= i32(grid.w)|| cell.y >= i32(lightGrid[offset + 1u].x)){return vec3<f32>(0.0);}let header = lightGrid[offset + 2u + u32(cell.y)* u32(grid.w)+ u32(cell.x)];var light = vec3<f32>(0.0);for(var i = 0u;i < u32(header.y);i++){let source = lightGrid[offset + u32(header.x)+ i * 2u];let colour = lightGrid[offset + u32(header.x)+ i * 2u + 1u];let delta = source.xyz - position;let distance2 = max(dot(delta,delta),1.0);let falloff = max(0.0,1.0 - distance2 /(source.w * source.w));let lambert = max(0.0,dot(normal,delta / sqrt(distance2)));light += toLinear(colour.rgb)* colour.w * lambert * falloff * falloff / distance2;}return light;}fn localLighting(position:vec3<f32>,normal:vec3<f32>)-> vec3<f32>{if(frame.skyDirection.w <= 0.0){return vec3<f32>(0.0);}var light = gridLighting(position,normal,0u);let moving = u32(lightGrid[1].z);if(moving > 0u){light += gridLighting(position,normal,moving);}return light * frame.skyDirection.w;}fn appearance(position:vec2<f32>){let noise = fract(52.9829189 * fract(dot(floor(position),vec2<f32>(0.06711056,0.00583715))));if(u.highlight.w < 1.0 && noise >= u.highlight.w){discard;}}@fragment fn fragmentMain(input:FragmentInput,@builtin(front_facing)frontFacing:bool)->@location(0)vec4<f32>{let cutoutDistance = distance(input.position.xy,u.cutout.xy);if(select((cutoutDistance < u.cutout.z),(cutoutDistance >= u.cutout.z),u.cutout.w > 0.0)){discard;}${e.nightLight?" if(input.uv.x <= 2.0){let radial = max(0.0,1.0 - dot(input.uv,input.uv));let alpha = radial * radial * frame.skyDirection.w * 0.65;if(alpha < 0.005){discard;}appearance(input.position.xy);return vec4<f32>(input.color,alpha);}":""} let sunlight = sunVisibility(input.shadowPosition);let worldNormal = normalize(transpose(mat3x3<f32>(frame.viewMatrix[0].xyz,frame.viewMatrix[1].xyz,frame.viewMatrix[2].xyz))* normalize(input.normal))* select(-1.0,1.0,frontFacing);let artificial = localLighting(input.worldPosition,worldNormal);${Qp(e,t,o,i,n,a,s)}}`;return{vertex:p,fragment:x,bindings:c,textured:f,hasTerrain:m}}async function tc(e,t){let r,o;try{let i=await Promise.all(t),n="",a=0;for(r of i)for(o of r.messages)o.type==="error"&&(n+=`${a++?`
|
|
2
|
+
`:""}${o.message}`);a&&e.fire("error",{error:new Error(`Unable to compile Layer3D WGSL: ${n}`)})}catch(i){e.fire("error",{error:i})}}function Ke(e,t=po){let r=ec(t,!!e.options.nightSparkle,t.terrain?Fp:""),o=v.get(e).device.createShaderModule((En.code=r.vertex,En));En.code=null;let i=v.get(e).device.createShaderModule((kn.code=r.fragment,kn));kn.code=null,tc(e,[o.getCompilationInfo(),i.getCompilationInfo()]);let n=[io,Np,t.vertexColors?jp:null,r.textured?Wp:null];t.instanced&&n.push(Mn);let a=qp(v.get(e).device,r),s=v.get(e).device.createPipelineLayout((co.bindGroupLayouts[0]=a,co.bindGroupLayouts[1]=v.get(e).sunlight.layout,co));co.bindGroupLayouts[0]=null,co.bindGroupLayouts[1]=null;let m=Hp(t);return{device:v.get(e).device,vertex:o,fragment:i,bindings:r.bindings,vertexBuffers:n,bindGroupLayout:a,pipelineLayout:s,pipelineCache:new Map,cullMode:t.doubleSided?"none":"back",transparent:t.alphaMode==="BLEND",depthWrite:t.depthWrite??t.alphaMode!=="BLEND",depthTest:t.depthTest!==!1,terrain:t.terrain,nightLight:!!t.nightLight,nightSparkle:!!e.options.nightSparkle,uniforms:m,_layerMaterial:t}}function er(e,t,r=po,o=0,i){let{device:n}=v.get(e),a={},s,m,f,p,c;for([s,m]of Object.entries(t))f=new Float32Array(m),p=s==="uv"?2:3,c=n.createBuffer((Sn.size=Math.max(4,f.byteLength),Sn.usage=GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST|o,Sn)),n.queue.writeBuffer(c,0,f),a[s]={size:p,data:f,count:f.length/p,buffer:c};let l={...Pe(),device:n,geometry:{device:n,attributes:a,drawRange:{start:0,count:a.position.count}},program:i||Ke(e,{vertexColors:!0,doubleSided:!0,...r}),id:ut.value++,renderOrder:0,extras:{}};return Z(l,L.get(e)),_(e),l}function In(e,t,r,o,i,n,a){let{backend:s,source:m,meshes:f}=e;if(!r.length)return;let p=f.get(t);if(!p||p.geometry.attributes.position.data.length!==r.length||p.program.uniforms.baseTexture?.value!==n){let c=[],l;for(l=0;l<r.length;l++)c.push(l%3===1?1:0);let u={position:r,normal:c};a&&(u.uv=a);let d={vertexColors:!1,color:o,opacity:i,unlit:!0,alphaMode:"BLEND"};n&&(d.baseTexture=n),p&&_e(s,p),p=er(s,u,d,0,m instanceof h.GridLayer?e.rasterProgram:void 0),m instanceof h.GridLayer&&(e.rasterProgram||=p.program,p.texture=n),f.set(t,p)}else{let c=p.geometry.attributes.position;c.data.set(r),c.needsUpdate=!0,p.geometry.bounds=null}return Cn(e,p,o,i),p}function uo(e,t,r,o,i){let n=Up(e,t,r);if(!n)return;let a=Ap,s=[],m=[],f;for(f of a)s.push(...o[f]),m.push(im[f*2],im[f*2+1]);return In(e,t,s,Pn,i,n,m)}var O=new WeakMap;X();function ho(e,t){let{map:r,backend:o}=e,i=r.options.crs,n=i.project(O.get(o)),a=i.project(t),s=Math.cos(O.get(o).lat*T);return[(a.x-n.x)*s,0,-(a.y-n.y)*s]}function zn(e,t){let r=[],o,i;for(o=0;o<4;o++)i=o===0?t.getNorthWest():o===1?t.getNorthEast():o===2?t.getSouthWest():t.getSouthEast(),r.push(ho(e,i));return r}function oc(e){let{source:t,textures:r,meshes:o}=e,i,n,a,s,m,f,p;for(i in t._tiles)Object.hasOwn(t._tiles,i)&&(n=t._tiles[i],!(!n.loaded||n.el instanceof HTMLImageElement&&!n.el.naturalWidth)&&(a=(t.options.opacity??1)*(n._gpuOpacity??1),s=r.get(i),m=o.get(i),m&&s?.image===n.el&&s.url===(n.el.currentSrc||n.el.src)?(s.used=!0,Cn(e,m,Pn,a)):([f,p]=t._tileCoordsToNwSe(n.coords),m=uo(e,i,n.el,zn(e,new h.LatLngBounds(f,p)),a)),m&&(m.renderOrder+=n.coords.z/100)))}function ic(e){let{source:t}=e;t._image?.complete&&t._image.naturalWidth&&uo(e,"image",t._image,zn(e,t.getBounds()),t.options.opacity??1)}var nc=Object.freeze(["m11","m12","m13","m14","m21","m22","m23","m24","m31","m32","m33","m34","m41","m42","m43","m44"]);b();X();W();function An(e,t,r){let o=e.options.rotation+(e.options.rotateWithView?S(e._map)*T:0);e.options.keepUpright&&Math.cos(o)<0&&(o+=Math.PI);let i=e.options.scale;return new h.Point((t*Math.cos(o)-r*Math.sin(o))*i,(t*Math.sin(o)+r*Math.cos(o))*i)}function di(e,t,r,o,i,n){return e.x=t.m11*r+t.m21*o+t.m31*i+t.m41*n,e.y=t.m12*r+t.m22*o+t.m32*i+t.m42*n,e.z=t.m13*r+t.m23*o+t.m33*i+t.m43*n,e.w=t.m14*r+t.m24*o+t.m34*i+t.m44*n,e}function ac(e,t,r){let o=e.source.options.icon.options,i=o[t==="shadow"?"shadowSize":"iconSize"],n=e.markerImageBounds||=[0,0,0,0];n[0]=i?i.x??i[0]:r.naturalWidth,n[1]=i?i.y??i[1]:r.naturalHeight;let a=t==="shadow"&&o.shadowAnchor||o.iconAnchor;return n[2]=a?a.x??a[0]:Math.floor(n[0]/2),n[3]=a?a.y??a[1]:Math.floor(n[1]/2),n}function sc(e,t,r){let{source:o,map:i,backend:n}=e,a=ho(e,o.getLatLng()),s=i.getSize(),m=e.markerMatrices||={root:new DOMMatrix,camera:new DOMMatrix,point:{x:0,y:0,z:0,w:1}},f=m.root,p=m.camera,c=m.point,l=L.get(n).worldMatrix,u=J.get(n).projectionViewMatrix,d,y;for(d=0;d<16;d++)y=nc[d],f[y]=l[d],p[y]=u[d];di(c,f,a[0],a[1],a[2],1),di(c,p,c.x,c.y,c.z,c.w);let g=c.x,x=c.y,w=c.z,C=c.w;p.invertSelf(),f.invertSelf();let[B,P,D,te]=ac(e,t,r),U=(g/C+1)*s.x/2,N=(1-x/C)*s.y/2,K=U-D,pe=N-te,ye=[],Qe,Le,ft,Ge,oi;for(d=0;d<4;d++)Qe=K+(d%2?B:0),Le=pe+(d<2?0:P),ft=An(o,Qe-U,Le-N),Ge=U+ft.x,oi=N+ft.y,di(c,p,Ge/s.x*2-1,1-oi/s.y*2,w/C,1),di(c,f,c.x/c.w,c.y/c.w,c.z/c.w,1),ye.push([c.x,c.y,c.z]);return ye}function mc(e){let{source:t}=e,r,o,i,n;for(r=0;r<2;r++)o=r?"icon":"shadow",i=r?t._icon:t._shadow,!(!(i instanceof HTMLImageElement)||!i.complete||!i.naturalWidth)&&(n=uo(e,o,i,sc(e,o,i),t.options.opacity??1),o==="shadow"&&n&&(n.renderOrder-=100*1e6))}var go=[];b();b();function Fe(e,t,r,o,i){return t.push(...e(r),...e(o),...e(i))}b();var hi=2*Math.PI;b();function mm(e,t,r,o,i){return new h.Point(e.x+t*Math.cos(i*hi/o),e.y+r*Math.sin(i*hi/o))}function Sr(e,t,r,o,i=r){if(!(r>0)||!(i>0))return;let n=Math.max(12,Math.min(128,Math.ceil(Math.PI*Math.sqrt(r)))),a;for(a=0;a<n;a++)Fe(e,o,t,mm(t,r,i,n,a),mm(t,r,i,n,a+1))}function On(e,t,r,o,i){let{options:n,width:a,stroke:s,point:m}=e,f=a/2,p=t.distanceTo(r);if(!p)return;let c=r.subtract(t).divideBy(p),l=new h.Point(-c.y*f,c.x*f);n.lineCap==="square"&&(o&&(t=t.subtract(c.multiplyBy(f))),i&&(r=r.add(c.multiplyBy(f)))),Fe(m,s,t.add(l),t.subtract(l),r.add(l)),Fe(m,s,r.add(l),t.subtract(l),r.subtract(l)),n.lineCap==="round"&&(o&&Sr(m,t,f,s),i&&Sr(m,r,f,s))}b();function fc(e,t,r,o,i){let{options:n,width:a,point:s,stroke:m}=e,f=t[r],p=a/2;if(n.lineJoin==="round"){Sr(s,f,p,m);return}let c=f.subtract(t[(r+t.length-1)%t.length]),l=Math.hypot(c.x,c.y);if(!l||!i)return;let u=c.divideBy(l),d=o.subtract(f).divideBy(i),y=u.x*d.y-u.y*d.x>0?-1:1,g=new h.Point(-u.y*y,u.x*y),x=new h.Point(-d.y*y,d.x*y),w=f.add(g.multiplyBy(p)),C=f.add(x.multiplyBy(p)),B=1+g.x*x.x+g.y*x.y,P=B>0?g.add(x).multiplyBy(p/B):null;Fe(s,m,w,f,C),n.lineJoin==="miter"&&P&&Math.hypot(P.x,P.y)<=p*4&&Fe(s,m,w,f.add(P),C)}function pc(e,t,r,o,i,n){let a=e.dash,s=0,m,f,p,c;for(;s<o;){for(m=((i+s)%n+n)%n,f=0;m>=a[f];)m-=a[f++];p=Math.min(o,s+a[f]-m),f%2===0&&(c=r.subtract(t).divideBy(o),On(e,t.add(c.multiplyBy(s)),t.add(c.multiplyBy(p)),!0,!0)),s=p}}function Dn(e,t,r){let{options:o,width:i,dash:n}=e;if(!o.stroke||i<=0||t.length<2)return;let a=Number(o.dashOffset)||0,s=0,m,f,p,c,l;for(m of n)s+=m;for(f=0;f<t.length-(r?0:1);f++)p=t[f],c=t[(f+1)%t.length],l=p.distanceTo(c),n.length?pc(e,p,c,l,a,s):(On(e,p,c,!r&&f===0,!r&&f===t.length-2),(r||f>0)&&fc(e,t,f,c,l)),a+=l}function cc(e){let t=1/0,r;for(r of e)t=Math.min(t,r.x);return t}function lc(e,t,r,o){let i=Math.min(r+o,e.length),n=Math.min(r+o*2,e.length),a=r,s=i,m;for(m=r;m<n;m++)a<i&&(s>=n||e[a].x<=e[s].x)?t[m]=e[a++]:t[m]=e[s++]}function uc(e){if(e.length<2)return e;let t=new Array(e.length),r=[],o,i,n,a,s;for(o of e)r.push({ring:o,x:cc(o)});let m=r,f=t;for(i=1;i<r.length;i*=2){for(n=0;n<r.length;n+=i*2)lc(m,f,n,i);a=m,m=f,f=a}for(s=0;s<e.length;s++)e[s]=m[s].ring;return e}function Me(e,t,r){return(t.x-e.x)*(r.y-e.y)-(t.y-e.y)*(r.x-e.x)}function nt(e,t){return e.x===t.x&&e.y===t.y}function dc(e){let t=!0,r,o,i,n;for(;t&&e.length>3;)for(t=!1,r=0;r<e.length;r++)if(o=e[(r+e.length-1)%e.length],i=e[r],n=e[(r+1)%e.length],nt(o,i)||Math.abs(Me(o,i,n))<1e-10){e.splice(r,1),t=!0;break}if(e.length<3)throw new Error("Degenerate polygon ring");return e}function Rn(e){let t=0,r,o,i;for(r=0;r<e.length;r++)o=e[r],i=e[(r+1)%e.length],t+=o.x*i.y-i.x*o.y;return t<0}function hc(e,t){let r=[],o=0,i,n,a;for(i=0;i<e.length;i++)n=e[i],a=dc(t.slice(o,o+=n.length)),Rn(a)!==!!i&&a.reverse(),r.push(a);return r}function Gn(e,t){let r=!1,o,i,n,a;for(o=0,i=t.length-1;o<t.length;i=o++)n=t[o],a=t[i],n.y>e.y!=a.y>e.y&&e.x<(a.x-n.x)*(e.y-n.y)/(a.y-n.y)+n.x&&(r=!r);return r}function gc(e,t){let r;for(r=1;r<t.length;r++)if(Gn(e,t[r]))return!0;return!1}function gi(e,t,r){return Math.min(e.x,t.x)<=r.x&&r.x<=Math.max(e.x,t.x)&&Math.min(e.y,t.y)<=r.y&&r.y<=Math.max(e.y,t.y)}function yc(e,t,r,o){if(nt(e,r)||nt(e,o)||nt(t,r)||nt(t,o))return!1;let i=Me(e,t,r),n=Me(e,t,o),a=Me(r,o,e),s=Me(r,o,t);return i*n<0&&a*s<0||i===0&&gi(e,t,r)||n===0&&gi(e,t,o)||a===0&&gi(r,o,e)||s===0&&gi(r,o,t)}function fm(e,t,r){let o;for(o=0;o<r.length;o++)if(yc(e,t,r[o],r[(o+1)%r.length]))return!0;return!1}function xc(e,t,r,o){if(fm(e,t,r))return!0;let i;for(i=1;i<o.length;i++)if(fm(e,t,o[i]))return!0;return!1}function vc(e,t,r,o){let i=-1,n=-1,a=1/0,s,m,f,p,c;for(s=0;s<t.length;s++)for(m=0;m<e.length;m++)f=t[s],p=e[m],c=(f.x-p.x)**2+(f.y-p.y)**2,!(c>=a)&&(o.x=(f.x+p.x)/2,o.y=(f.y+p.y)/2,!(!Gn(o,r[0])||gc(o,r))&&(xc(f,p,e,r)||(i=s,n=m,a=c)));if(i<0)throw new Error("Unable to connect polygon hole");return[...e.slice(0,n+1),...t.slice(i),...t.slice(0,i+1),e[n],...e.slice(n+1)]}function wc(e,t,r,o){let i;for(i of e)if(!nt(i,t)&&!nt(i,r)&&!nt(i,o)&&Me(t,r,i)>=0&&Me(r,o,i)>=0&&Me(o,t,i)>=0)return!0;return!1}function Mc(e){let t=[],r,o,i,n,a,s;for(;e.length>3;){for(r=!1,o=0;o<e.length;o++)if(i=e[(o+e.length-1)%e.length],n=e[o],a=e[(o+1)%e.length],!(Me(i,n,a)<=1e-10)&&!wc(e,i,n,a)){t.push([i.index,n.index,a.index]),e.splice(o,1),r=!0;break}if(!r)throw new Error("Unable to triangulate polygon: invalid or self-intersecting rings")}if(Me(...e)>1e-10){let m=[];for(s of e)m.push(s.index);t.push(m)}return t}function pm(e){let t=0,r,o,i;for(r=0;r<e.length;r++)o=e[r],i=e[(r+1)%e.length],t+=o.x*i.y-i.x*o.y;return Math.abs(t)/2}function bc(e,t,r){let o=0,i=0,n,a;for(n=1;n<e.length;n++)o+=pm(e[n]);let s=pm(e[0])-o;for(a of r)i+=Me(t[a[0]],t[a[1]],t[a[2]])/2;if(s<=0||Math.abs(i-s)>Math.max(1e-7,s*1e-8))throw new Error("Polygon triangulation area mismatch")}function yo(e,t=it){let r=[e,...t],o=r.flat(),i,n,a;for(i of o)if(!Number.isFinite(i.x)||!Number.isFinite(i.y))throw new Error("Invalid polygon coordinates");let s=[];for(n=0;n<o.length;n++)i=o[n],s.push({x:i.x-e[0].x,y:i.y-e[0].y,index:n});let m=hc(r,s),f=m[0].slice(),p=uc(m.slice(1)),c=p.length?{x:0,y:0}:null;for(a of p)f=vc(f,a,m,c);let l=Mc(f);return bc(m,s,l),l}function cm(e,t,r){let{options:o,fill:i,point:n,map:a}=e,s=[],m,f,p,c;for(m of t){f=[];for(p of m)f.push(a.project(p));s.push(f)}if(r&&o.fill&&s[0]?.length>=3){let l=[];for(m of s)m.length>=3&&l.push(m);let u=l.flat();for(c of yo(l[0],l.slice(1)))Fe(n,i,u[c[0]],u[c[1]],u[c[2]])}for(m of s)Dn(e,m,r)}function lm(e,t,r){if(!t.length)return;let o;if(t[0]instanceof h.LatLng)cm(e,[t],r);else if(r&&t[0][0]instanceof h.LatLng)cm(e,t,r);else for(o of t)lm(e,o,r)}function Lc(e){let t=Array.isArray(e.dashArray)?e.dashArray:String(e.dashArray||"").trim().split(/[ ,]+/),r=[],o,i=!0;for(o of t)r.push(Number(o));for(o of r){if(!Number.isFinite(o)||o<0)throw new Error("Invalid Leaflet dashArray");o!==0&&(i=!1)}return i&&(r.length=0),r.length%2&&r.push(...r),r}b();b();function tr(e,t,r,o,i,n=0){let a=i*hi/o;return new h.Point(e.x+Math.max(0,t+n)*Math.cos(a),e.y+Math.max(0,r+n)*Math.sin(a))}function Bc(e,t){let{map:r,point:o,fill:i,stroke:n,options:a,dash:s,width:m}=t,f=r.project(e.getLatLng()),p=e.getRadius(),c=p,l,u;if(e instanceof h.Circle){e._project();let y=e._point.add(r.getPixelOrigin());f.x=y.x,f.y=y.y,p=e._radius,c=e._radiusY||p}a.fill&&Sr(o,f,p,i,c);let d=Math.max(12,Math.min(128,Math.ceil(Math.PI*Math.sqrt(Math.max(p,c)))));if(s.length){let y=[];for(l=0;l<d;l++)y.push(tr(f,p,c,d,l));Dn(t,y,!0)}else if(a.stroke&&m>0)for(u=0;u<d;u++)Fe(o,n,tr(f,p,c,d,u,m/2),tr(f,p,c,d,u,-m/2),tr(f,p,c,d,u+1,m/2)),Fe(o,n,tr(f,p,c,d,u+1,m/2),tr(f,p,c,d,u,-m/2),tr(f,p,c,d,u+1,-m/2))}function Tc(e,t,r){let o=[],i=[],n=e.options,a=Number(n.weight)||0,s=Lc(n),m={fill:o,stroke:i,options:n,width:a,dash:s,point:r,map:t};if(e instanceof h.CircleMarker)Bc(e,m);else{let f=e instanceof h.Polygon;lm(m,e.getLatLngs(),f)}return{fill:o,stroke:i}}function Pc(e,t){return ho(e,e.map.unproject(t))}function Cc(e){return Pc(go[go.length-1],e)}function Un(e){return e<=.0031308?e*12.92:1.055*e**(1/2.4)-.055}function Fn(e,t,r,o){let i=(e+t*12)%12;return r-o*Math.max(-1,Math.min(i-3,9-i,1))}function Ie(e){if(e&&typeof e=="object"&&"h"in e){let n=e.s*Math.min(e.l,1-e.l);return{r:Un(Fn(0,e.h,e.l,n)),g:Un(Fn(8,e.h,e.l,n)),b:Un(Fn(4,e.h,e.l,n))}}if(e&&typeof e=="object"&&"r"in e)return e;if(typeof e=="number")return{r:(e>>16&255)/255,g:(e>>8&255)/255,b:(e&255)/255};if(typeof e!="string"||!CSS.supports("color",e))throw new Error("Invalid 3D color");let t=document.createElement("canvas").getContext("2d");t.fillStyle=e,t.fillRect(0,0,1,1);let[r,o,i]=t.getImageData(0,0,1,1).data;return{r:r/255,g:o/255,b:i/255}}function Sc(e){let{source:t}=e;go.push(e);let r;try{r=Tc(t,e.map,Cc)}finally{go.pop()}let{fill:o,stroke:i}=r,n,a,s,m,f,p,c,l;for(n=0;n<2;n++)a=n?"stroke":"fill",s=n?i:o,m=n?t.options.color:t.options.fillColor||t.options.color,f=n?t.options.opacity:t.options.fillOpacity,s.length&&({r:p,g:c,b:l}=Ie(m),In(e,a,s,[p,c,l],f??1))}function Ec(e){let{meshes:t,textures:r,backend:o}=e,i,n,a;for([a,i]of t)i._nativeUsed||(_e(o,i),t.delete(a),n=r.get(a),n&&F(o,n.texture),r.delete(a));for([a,n]of r)n.used||(F(o,n.texture),r.delete(a))}function Nn(e){let{source:t,meshes:r,textures:o}=e;if(!fo(e)||!v.get(e.backend)||e.failed||!e.dirty&&(!e.marker||!e.viewDirty))return;e.dirty=!1,e.viewDirty=!1;let i,n;for(i of r.values())i._nativeUsed=!1;for(n of o.values())n.used=!1;t instanceof h.GridLayer?oc(e):t instanceof h.ImageOverlay?ic(e):e.marker?mc(e):Sc(e),Ec(e)}function kc(e){try{Nn(e)}catch(t){e.failed=!0,e.source.fire("error",{error:t})}}function rr(e){if(Bn(e),z.get(e)!==e||!v.get(e))return;let t=e._map,r=performance.now(),o=t.getSize();if(!o.x||!o.y)return;wf(e,r),bf(e,o),Cf(e,o),we(Q.get(e));let i=!1,n,a;for(n of G.get(e))a=Hr.get(n),a&&(kc(a),i=!0);let s=tt.get(t);_f(e,s,i);let m=_t.get(e),f=v.get(e),p=Hf(e,r),c=f.frameMeshes||=[];c.length=0;let l=tp(e,p,r,c),u=f.device.createCommandEncoder();fp(e,c,m,s),zp(e,u,m,s),xp(e,u,c),f.device.queue.writeBuffer(f.uniformBuffer,0,f.uniformData,0,f.uniformSlot*64),f.device.queue.submit((rn[0]=u.finish(),rn)),rn[0]=null;for(n of G.get(e))Ht.get(n)&&(l=mo(n)||l);(t._animatingZoom||l)&&_(e)}function _c(){let e=[...kt];kt.clear();let t,r;for(r of e)if(et.set(r,null),!(z.get(r)!==r||!v.get(r)))try{rr(r)}catch(o){t||=o}if(t)throw t}function _(e){let t=z.get(e);if(!t)return e;if(t!==e)return _(t),e;if(et.get(e)!=null)return e;let r=kt.values().next().value;return kt.add(e),et.set(e,r?et.get(r):requestAnimationFrame(_c)),e}b();function jn(e){let{source:t}=e,r=t instanceof h.Marker&&t.options.icon instanceof h.DivIcon,o=r?null:t._icon,i=r?null:t._shadow,n,a;for(a of e.hidden)a===o||a===i||(a.classList.remove("leaflet-webgpu-target"),e.hidden.delete(a));for(n=0;n<2;n++)a=n?i:o,!(!a||e.hidden.has(a))&&(a.classList.add("leaflet-webgpu-target"),e.hidden.add(a))}function qe(e=this){e.dirty=!0,e.viewDirty=!0,e.failed=!1,jn(e);let t=e.source,r,o;for(o of e.images)o===t._icon||o===t._shadow||o===t._image||(o.removeEventListener("load",ii),o.removeEventListener("error",ni),tn(o,e),e.images.delete(o));for(r=0;r<3;r++)o=r===0?t._icon:r===1?t._shadow:t._image,!(!(o instanceof HTMLImageElement)||e.images.has(o))&&(e.images.add(o),yf(o,e),o.addEventListener("load",ii),o.addEventListener("error",ni));z.get(e.backend)&&_(e.backend)}function $(e,t,r){let o=xe.get(t),n=o.methods.get(e).original.apply(t,r),a,s;if((e==="bringToFront"||e==="bringToBack")&&t instanceof h.GridLayer){let m=e==="bringToFront"?-1/0:1/0;for(a of Object.values(o.map._layers))a===t||!(a instanceof h.GridLayer)||a.getPane()!==t.getPane()||(s=a.options.zIndex||0,m=e==="bringToFront"?Math.max(m,s):Math.min(m,s));let f=e==="bringToFront"?m+1:m-1;Number.isFinite(f)&&t.setZIndex(f)}return e==="bringToFront"&&(o.order=qt.get(o.map)+1,qt.set(o.map,o.order)),e==="bringToBack"&&(o.order=qr.get(o.map)-1,qr.set(o.map,o.order)),qe(o),n}function Ic(...e){return $("setLatLng",this,e)}function zc(...e){return $("setLatLngs",this,e)}function Ac(...e){return $("addLatLng",this,e)}function Oc(...e){return $("setRadius",this,e)}function Dc(...e){return $("setStyle",this,e)}function Rc(...e){return $("redraw",this,e)}function Gc(...e){return $("setIcon",this,e)}function Uc(...e){return $("setUrl",this,e)}function Fc(...e){return $("setBounds",this,e)}function Nc(...e){return $("setOpacity",this,e)}function jc(...e){return $("setZIndex",this,e)}function Wc(...e){return $("setZIndexOffset",this,e)}function Zc(...e){return $("bringToFront",this,e)}function $c(...e){return $("bringToBack",this,e)}var um={setLatLng:Ic,setLatLngs:zc,addLatLng:Ac,setRadius:Oc,setStyle:Dc,redraw:Rc,setIcon:Gc,setUrl:Uc,setBounds:Fc,setOpacity:Nc,setZIndex:jc,setZIndexOffset:Wc,bringToFront:Zc,bringToBack:$c};b();var xo=Object.freeze({});function Wn(e=xo){return new h.Layer(e)}b();var Er=new WeakMap;var ee=new WeakMap;var dt=new WeakMap;function Vc(e,t,r,o){let i=Math.min(r+o,e.length),n=Math.min(r+o*2,e.length),a=r,s=i,m;for(m=r;m<n;m++)a<i&&(s>=n||!(e[s].distance<e[a].distance))?t[m]=e[a++]:t[m]=e[s++]}function qc(e){if(e.length<2)return e;let t=new Array(e.length),r=e,o=t,i,n,a,s;for(i=1;i<e.length;i*=2){for(n=0;n<e.length;n+=i*2)Vc(r,o,n,i);a=r,r=o,o=a}if(r!==e)for(s=0;s<e.length;s++)e[s]=r[s];return e}function Hc(e,t,r,o){let n=new DOMMatrix(t.worldMatrix).invertSelf().toFloat64Array(),a,s,m,f,p;for(a of n)if(!Number.isFinite(a))throw new Error("Singular 3D transform");s=e.origin[0],m=e.origin[1],f=e.origin[2],p=n[3]*s+n[7]*m+n[11]*f+n[15],r[0]=(n[0]*s+n[4]*m+n[8]*f+n[12])/p,r[1]=(n[1]*s+n[5]*m+n[9]*f+n[13])/p,r[2]=(n[2]*s+n[6]*m+n[10]*f+n[14])/p,s=e.direction[0],m=e.direction[1],f=e.direction[2],o[0]=n[0]*s+n[4]*m+n[8]*f,o[1]=n[1]*s+n[5]*m+n[9]*f,o[2]=n[2]*s+n[6]*m+n[10]*f;let c=Math.hypot(...o)||1;o[0]/=c,o[1]/=c,o[2]/=c}function Yc(e,t,r){e.geometry.bounds||Be(e.geometry);let o=0,i=1/0,n,a,s;for(n=0;n<3;n++)if(Math.abs(r[n])<1e-12){if(t[n]<e.geometry.bounds.min[n]||t[n]>e.geometry.bounds.max[n]){i=-1/0;break}}else a=(e.geometry.bounds.min[n]-t[n])/r[n],s=(e.geometry.bounds.max[n]-t[n])/r[n],o=Math.max(o,Math.min(a,s)),i=Math.min(i,Math.max(a,s));return!(i<o)}function Zn(e,t){return t?.count??t?.data.length??e.count??e.data.length/(e.size??3)}function $n(e,t,r,o,i){let{position:n,index:a,instanceOffset:s}=e.geometry.attributes,m=n.size??3,f=Zn(n,a),p=s?t%f:t,c=s?Math.floor(t/f)*s.size:0,l=s?.data[c]??0,u=s?.data[c+1]??0,d=s?.data[c+2]??0,y=(a?a.data[p]:p)*m,g=(a?a.data[p+1]:p+1)*m,x=(a?a.data[p+2]:p+2)*m;r[0]=n.data[y],r[1]=n.data[y+1],r[2]=n.data[y+2],o[0]=n.data[g],o[1]=n.data[g+1],o[2]=n.data[g+2],i[0]=n.data[x],i[1]=n.data[x+1],i[2]=n.data[x+2],s&&(r[0]=Math.fround(r[0]+l),r[1]=Math.fround(r[1]+u),r[2]=Math.fround(r[2]+d),o[0]=Math.fround(o[0]+l),o[1]=Math.fround(o[1]+u),o[2]=Math.fround(o[2]+d),i[0]=Math.fround(i[0]+l),i[1]=Math.fround(i[1]+u),i[2]=Math.fround(i[2]+d))}function Xc(e,t,r,o,i){if(!e.program.nightLight)return!1;let{index:n,uv:{data:a}}=e.geometry.attributes,s=n?n.data[t]:t,m=n?n.data[t+1]:t+1,f=n?n.data[t+2]:t+2,p=a[s*2]*(1-r-o)+a[m*2]*r+a[f*2]*o,c=a[s*2+1]*(1-r-o)+a[m*2+1]*r+a[f*2+1]*o;return p<=2&&(!i||p*p+c*c>.9)}function Kc(e,t,r,o,i,n,a,s){let m=o[0]-r[0],f=o[1]-r[1],p=o[2]-r[2],c=i[0]-r[0],l=i[1]-r[1],u=i[2]-r[2],d=a[1]*u-a[2]*l,y=a[2]*c-a[0]*u,g=a[0]*l-a[1]*c,x=m*d+f*y+p*g;if(e.program.cullMode==="none"||e.program.cullFace===null?Math.abs(x)<1e-9:x<1e-9)return 1/0;let w=n[0]-r[0],C=n[1]-r[1],B=n[2]-r[2],P=(w*d+C*y+B*g)/x;if(P<0||P>1)return 1/0;let D=C*p-B*f,te=B*m-w*p,U=w*f-C*m,N=(a[0]*D+a[1]*te+a[2]*U)/x;return N<0||P+N>1||Xc(e,t,P,N,s)?1/0:(c*D+l*te+u*U)/x}function Jc(e,t,r,o,i,n){let a=o[0]*i+r[0],s=o[1]*i+r[1],m=o[2]*i+r[2],f=t.worldMatrix,p=f[3]*a+f[7]*s+f[11]*m+f[15],c=[(f[0]*a+f[4]*s+f[8]*m+f[12])/p,(f[1]*a+f[5]*s+f[9]*m+f[13])/p,(f[2]*a+f[6]*s+f[10]*m+f[14])/p];return{faceIndex:n,object:t,point:c,distance:Math.hypot(c[0]-e.origin[0],c[1]-e.origin[1],c[2]-e.origin[2])}}function Vn(e,t,r=0){let o=[],i=[0,0,0],n=[0,0,0],a=[0,0,0],s=[0,0,0],m=[0,0,0],f,p,c,l,u,d,y,g,x;for(f of t)if(Hc(e,f,s,m),!!Yc(f,s,m)){for({position:p,index:c,instanceOffset:l}=f.geometry.attributes,u=c?.count||p.count,d=1/0,y=void 0,g=0;g<u*(l?.count??1);g+=3)$n(f,g,i,n,a),x=Kc(f,g,i,n,a,s,m,r),x>0&&x<d&&(d=x,y=g/3);y!==void 0&&o.push(Jc(e,f,s,m,d,y))}return qc(o)}function At(e,t,r){if(t(e,r))return;let o;for(o of e.children)At(o,t,r)}function qn(e,t){if(!e.visible)return!0;e.geometry&&e._appearance!==0&&t.push(e)}function Qc(e,t,r,o){let i=1,n=t.length-1,a;for(;i<n;)a=i+Math.floor((n-i)/2),t[a]<r?i=a+1:n=a;let s=e[i-1],m=e[i],f=t[i]-t[i-1]||1,p=(r-t[i-1])/f;return o||={},o.x=s[0]+(m[0]-s[0])*p,o.y=(s[2]??0)+((m[2]??0)-(s[2]??0))*p,o.z=s[1]+(m[1]-s[1])*p,o.dx=(m[0]-s[0])/f,o.dz=(m[1]-s[1])/f,o}function vo(e,t,r){let{points:o,lengths:i,length:n}=t.lane,a=t.distance+e.elapsed*t.speed;a-=n*Math.floor(a/n);let s=Qc(o,i,a,r);return s.x-=s.dz*e.side,s.z+=s.dx*e.side,s}function el(e){if(!e.mesh||!e.stale)return;e.stale=!1;let{position:t,normal:r}=e.mesh.geometry.attributes,o=e.position||={},i,n,a,s,m,f,p,c,l,u,d,y,g;for(i=0;i<e.trips.length;i++)for(n=e.trips[i],{x:a,y:s,z:m,dx:f,dz:p}=vo(e,n,o),c=0,l=i*e.stride;c<e.stride;c+=3,l+=3)u=e.template.position[c],d=e.template.position[c+2],y=e.template.normal[c],g=e.template.normal[c+2],t.data[l]=a-u*p-d*f,t.data[l+1]=s+e.template.position[c+1],t.data[l+2]=m+u*f-d*p,r.data[l]=-y*p-g*f,r.data[l+1]=e.template.normal[c+1],r.data[l+2]=y*f-g*p}function tl(e){let t,r;for(t=1;t<=4;t++)for(r=1;r<=4;r++)if(!Number.isFinite(e[`m${t}${r}`]))throw new Error("Singular 3D transform")}function Hn(e,t,r=L.get(e).children,o=!0){if(!v.get(e))return[];let i=dt.get(e);i&&el(i);let n=e._map.getContainer().getBoundingClientRect();we(Q.get(e)),Xr(J.get(e));let a=ee.get(e).inverse,s=J.get(e).projectionViewMatrix;a.m11=s[0],a.m12=s[1],a.m13=s[2],a.m14=s[3],a.m21=s[4],a.m22=s[5],a.m23=s[6],a.m24=s[7],a.m31=s[8],a.m32=s[9],a.m33=s[10],a.m34=s[11],a.m41=s[12],a.m42=s[13],a.m43=s[14],a.m44=s[15],a.invertSelf();let m=(t.clientX-n.left)/n.width*2-1,f=-((t.clientY-n.top)/n.height)*2+1,p=a.m11*m+a.m21*f+a.m41,c=a.m12*m+a.m22*f+a.m42,l=a.m13*m+a.m23*f+a.m43,u=a.m14*m+a.m24*f+a.m44,d;tl(a),ee.get(e).origin[0]=J.get(e).position[0],ee.get(e).origin[1]=J.get(e).position[1],ee.get(e).origin[2]=J.get(e).position[2],ee.get(e).direction[0]=p/u-ee.get(e).origin[0],ee.get(e).direction[1]=c/u-ee.get(e).origin[1],ee.get(e).direction[2]=l/u-ee.get(e).origin[2];let y=ee.get(e).direction,g=Math.hypot(y[0],y[1],y[2])||1;ee.get(e).direction[0]/=g,ee.get(e).direction[1]/=g,ee.get(e).direction[2]/=g;let x=ee.get(e).meshes;x.length=0;for(d of r)o?At(d,qn,x):d.geometry&&d.visible&&d._appearance!==0&&x.push(d);return Vn(ee.get(e),x,v.get(e).uniformData?.[55])}function rl(){let{map:e,descriptor:t,handle:r}=this;e._fireDOMEvent===r&&(t?Object.defineProperty(e,"_fireDOMEvent",t):delete e._fireDOMEvent)}var ie=new WeakMap;var ol=new Set(["click","preclick","dblclick","contextmenu","mousedown","mouseup","mousemove","mouseover","mouseout","pointerdown","pointerup","pointermove","pointerover","pointerout"]);b();function il(e,t){return t.object.renderOrder-e.object.renderOrder||e.distance-t.distance}function nl(e,t,r){let o=[],i,n,a;if(r!==e.out)for(i of e.states)({source:n,backend:a}=i),!(n instanceof h.Marker||n.options.interactive===!1||!(n instanceof h.Path)&&!n.options.interactive)&&o.push(...Hn(a,t,i.meshes.values(),!1));return o.sort(il),o[0]?.object._nativeSource||null}function Yn(e,t,r,o){t.hovered!==o&&(t.hovered&&t.fireDOMEvent.call(e,r,t.out,[t.hovered]),t.hovered=o,o&&t.fireDOMEvent.call(e,r,t.over,[o]),e.getContainer().style.cursor=o?"pointer":"")}function al(e,t,r,o){let i=r.target,n=i instanceof Element&&i.closest(".leaflet-marker-icon,.leaflet-popup,.leaflet-tooltip,.leaflet-control");return n&&t.hovered&&(o===t.move||o===t.out)&&Yn(e,t,r,null),n||o===t.move&&(e.dragging?.moving()||e._animatingZoom)}function dm(e,t=e.type,r){let o=this,i=Er.get(o),n=i.fireDOMEvent,a=ie.get(o);if(!v.get(a)||r||!ol.has(t))return n.call(this,e,t,r);if(al(o,i,e,t))return n.call(this,e,t,r);let s=nl(i,e,t);return(t==="click"||t==="preclick")&&s&&o._draggableMoved(s)&&(s=null),(t===i.move||t===i.out)&&Yn(o,i,e,s),n.call(this,e,t,s?[s]:void 0)}function sl(e){let{map:t}=e,r=Er.get(t);if(!r){r={map:t,states:new Set,hovered:null};let o=h.version.startsWith("2");r.move=o?"pointermove":"mousemove",r.out=o?"pointerout":"mouseout",r.over=o?"pointerover":"mouseover",r.descriptor=Object.getOwnPropertyDescriptor(t,"_fireDOMEvent"),r.fireDOMEvent=t._fireDOMEvent,r.handle=dm,r.restore=rl,Er.set(t,r),t._fireDOMEvent=dm}r.states.add(e),e._nativeEventContext=r}function wo(){qe(this)}function Xn(){this.viewDirty=!0,z.get(this.backend)&&_(this.backend)}function ml(e){let t=e._nativeEventContext;if(!t)return;let{map:r}=t;t.states.delete(e),t.hovered===e.source&&(t.hovered=null,r.getContainer().style.cursor=""),e._nativeEventContext=null,!t.states.size&&(t.restore(),Er.delete(r))}function yi(){let e=this;if(e.disposed)return;e.disposed=!0;let{source:t,map:r,backend:o,meshes:i,textures:n,images:a}=e;t.off("load tileload tileunload move drag",wo,e),r.off("zoomend",wo,e),e.marker&&r.off("move zoom rotate pitch resize viewreset",Xn,e),ml(e);let m,f,p,c,l;for([m,f]of e.methods)f.own?Object.defineProperty(t,m,f.own):delete t[m];for(p of i.values())_e(o,p);i.clear();for(c of n.values())F(o,c.texture);n.clear();for(l of a)l.removeEventListener("load",ii),l.removeEventListener("error",ni),tn(l,e);Hr.delete(o),o.remove()}function fl(){this.ready.resolve()}function pl({error:e}){this.ready.reject(e)}function cl({error:e}){this.source.fire("error",{error:e})}async function ll(e){let{source:t,map:r}=e,o=e.backend=Wn({source:{type:"3d"}});e.meshes=new Map,e.textures=new Map,e.methods=new Map,e.images=new Set,qt.get(r)||qt.set(r,0),qr.get(r)||qr.set(r,0),e.dirty=!0,e.viewDirty=!0,e.failed=!1,e.order=qt.get(r)+1,qt.set(r,e.order),e.marker=t instanceof h.Marker,e.paneOrder=Number(getComputedStyle(t.getPane()).zIndex)||0,e.disposed=!1,t.on("load tileload tileunload move drag",wo,e),r.on("zoomend",wo,e),e.marker&&r.on("move zoom rotate pitch resize viewreset",Xn,e),sl(e);let n,a,s;for(n in um)typeof t[n]=="function"&&(a=Object.getOwnPropertyDescriptor(t,n),s=t[n],e.methods.set(n,{own:a,original:s}),t[n]=um[n]);let m=e.ready=Promise.withResolvers();o.once("ready",fl,e),o.once("error",pl,e),o.on("error",cl,e),qe(e),o.addTo(r);try{await m.promise}catch(f){throw yi.call(e),f}if(!fo(e))return t;Hr.set(o,e);try{Nn(e)}catch(f){throw yi.call(e),f}return _(e.backend),t}function ul(e){xe.get(e.source)===e&&xe.set(e.source,null),e.backend&&yi.call(e);let t;for(t of e.hidden)t.classList.remove("leaflet-webgpu-target")}function dl(e){return xe.get(e.source)!==e?e.source:ll(e)}function Kn(e,t){e.fire("error",{error:t})}function Jn(e,t){if(xe.get(e))return;if(!document.getElementById("leaflet-webgpu-targets")){let o=document.createElement("style");o.id="leaflet-webgpu-targets",o.textContent=".leaflet-webgpu-target{opacity:0!important}",document.head.append(o)}let r={source:e,map:t,hidden:new Set};xe.set(e,r),jn(r),e.once("remove",ul.bind(null,r)),re.set(e,Promise.resolve().then(dl.bind(null,r))),re.get(e).catch(Kn.bind(null,e))}var Qn=[1,0,1,0];b();function fe(e){return new h.Point(Array.isArray(e)?e[0]:e.x,Array.isArray(e)?e[1]:e.y)}X();W();H();function ea(e,t){let r=S(e)*T,o=k(e)*T;return t||=[],t[0]=Math.cos(r),t[1]=Math.sin(r),t[2]=Math.cos(o),t[3]=Math.sin(o),t}function Ne(e,t,r=!1,o=!1){let i=e.getSize(),n=i.x/2,a=i.y/2,s=i.y*1.5,m=fe(t);if(!s)return m;let[f,p,c,l]=ea(e,Qn),u=m.x-n,d=m.y-a;if(r){let w=i.y*e.options.pitchMaxDistance,C=c*s+l*d,B=C*c>0?d*s/C:-w;o&&(B=Math.max(-w,Math.min(w,B)));let P=u*(s-l*B)/s;return m.x=f*P+p*B+n,m.y=-p*P+f*B+a,m}let y=f*u-p*d,g=p*u+f*d,x=s/(s-l*g);return m.x=y*x+n,m.y=c*g*x+a,m}function hl(e){return Ne(this,Jt(this,j.value.layerPointToContainerPoint.call(this,e)))}function gl(e){return j.value.containerPointToLayerPoint.call(this,Jt(this,Ne(this,e,!0),!0))}function yl(){return j.value.containerPointToLayerPoint.call(this,this.getSize().divideBy(2))}function xl(e,t){let r=this.getSize().divideBy(2),o=r.subtract(Ne(this,r.subtract(fe(e)),!0));return j.value.panBy.call(this,o,t)}b();H();W();function vl(e,t,r){if(!k(this)&&!S(this))return j.value.setZoomAround.call(this,e,t,r);t=this._limitZoom(t);let o=this.getZoomScale(t),i=this.getSize().divideBy(2),n=e instanceof h.Point?e:this.latLngToContainerPoint(e),a=this.containerPointToLayerPoint(i),s=this.containerPointToLayerPoint(n),m=a.add(s.subtract(a).multiplyBy(1-1/o));return this.setView(this.layerPointToLatLng(m),t,{zoom:r})}var ht=Object.freeze([0,0]);H();W();function wl(e,t={}){if(!k(this)&&!S(this))return j.value.panInside.call(this,e,t);let r=fe(t.paddingTopLeft||t.padding||ht),o=this.getSize().subtract(fe(t.paddingBottomRight||t.padding||ht)),i=this.latLngToContainerPoint(e),n=r;if(n.x=Math.max(r.x,Math.min(o.x,i.x)),n.y=Math.max(r.y,Math.min(o.y,i.y)),n.equals(i))return this;let a=this.latLngToLayerPoint(e).subtract(this.containerPointToLayerPoint(n));return this.panTo(this.unproject(this.project(this.getCenter()).add(a)),t)}b();H();W();b();function Mo(e,t=ht){let r=fe(t).divideBy(2),o=e.getSize().subtract(r),i=new h.Bounds,n=r.x,a=r.y,s;for(s=0;s<4;s++)r.x=s%2?o.x:n,r.y=s<2?a:o.y,i.extend(Ne(e,r,!0,!0));return i}function Ml(e,t,r){if(!r||!this._loaded||!k(this)&&!S(this))return j.value._limitCenter.call(this,e,t,r);let o=this.getSize().divideBy(2),i=Mo(this),n=this.project(e,t),a=new h.Bounds(n.add(i.min.subtract(o)),n.add(i.max.subtract(o))),s=this._getBoundsOffset(a,r,t);return Math.abs(s.x)<=1&&Math.abs(s.y)<=1?e:this.unproject(n.add(s),t)}H();W();function bl(e,t){if(!t||!k(this)&&!S(this))return j.value._limitOffset.call(this,e,t);let r=this.getSize().divideBy(2),o=r.subtract(Ne(this,r.subtract(e),!0)),i=this.project(this.getCenter()),n=this.project(this._limitCenter(this.unproject(i.add(o)),this.getZoom(),t));return r.subtract(Ne(this,r.subtract(n.subtract(i))))}H();W();b();ta();function hm(e,t,r,o,i){return t*r+o*e>0?Math.max(-i,Math.min(i,e*r/(t*r+o*e))):-i}function ra(e,t,r=bo){t=t.getBounds?t.getBounds():t instanceof h.LatLngBounds?t:new h.LatLngBounds(t);let o=e.getZoom()??0,i=e.getSize().divideBy(2),n=e.getSize().y*1.5,a=fe(r.paddingTopLeft||r.padding||ht).subtract(i),s=i.subtract(fe(r.paddingBottomRight||r.padding||ht)),[m,f,p,c]=ea(e,Qn);if(p<0){let b0=a.y;a.y=-s.y,s.y=-b0}let l=e.getSize().y*e.options.pitchMaxDistance,u=hm(a.y,Math.abs(p),n,c,l),d=hm(s.y,Math.abs(p),n,c,l),y=e.project(t.getNorthWest(),o).add(e.project(t.getSouthEast(),o)).divideBy(2),g=1/0,x=-1/0,w=a.x*c/n,C=s.x*c/n,B=C-w,P=1/0,D=-1/0,te=[t.getNorthWest(),t.getNorthEast(),t.getSouthWest(),t.getSouthEast()],U,N,K,pe,ye;for(U=0;U<4;U++)N=te[U],K=e.project(N,o).subtract(y),pe=m*K.x-f*K.y,ye=f*K.x+m*K.y,g=Math.min(g,ye),x=Math.max(x,ye),P=Math.min(P,pe+w*ye),D=Math.max(D,pe+C*ye);let Qe=Math.min((d-u)/(x-g),(s.x-a.x-B*u)/(D-P-B*g)),Le=e.getScaleZoom(Qe,o),ft=e.options.zoomSnap;if(ft&&(Le=Math.floor(Math.round(Le/(ft/100))/100)*ft),Le=Math.max(e.getMinZoom(),Math.min(e.getMaxZoom(),r.maxZoom??1/0,Le)),!Number.isFinite(Le))return{center:t.getCenter(),zoom:Le};let Ge=e.getZoomScale(Le,o),oi=x*Ge-d,hf=g*Ge-u,M0=Math.max(oi,B?(Ge*(D-P)-s.x+a.x)/B:oi),Vs=(Math.min(hf,M0)+hf)/2,gf=(Ge*(P+D)-a.x-s.x-(w+C)*Vs)/2;return y.x+=(m*gf+f*Vs)/Ge,y.y+=(-f*gf+m*Vs)/Ge,{center:e.unproject(y,o),zoom:Le}}function Ll(e,t){return k(this)||S(this)?ra(this,e,t):j.value._getBoundsCenterZoom.call(this,e,t)}b();H();W();function Bl(e,t,r){if(!k(this)&&!S(this))return j.value.getBoundsZoom.call(this,e,t,r);if(!t)return ra(this,e,{padding:fe(r||ht).divideBy(2)}).zoom;e=e instanceof h.LatLngBounds?e:new h.LatLngBounds(e);let o=Mo(this,r).getSize(),i=this.project(e.getSouthEast()).subtract(this.project(e.getNorthWest())),n=this.getScaleZoom(Math.max(o.x/i.x,o.y/i.y)),a=this.options.zoomSnap;return Math.max(this.getMinZoom(),Math.min(this.getMaxZoom(),a?Math.ceil(n/a)*a:n))}function Tl(e,t){let r=this._getCenterOffset(e)._trunc();return t?.animate!==!0&&!this.getSize().contains(r)?!1:(j.value.panBy.call(this,r,t),!0)}b();H();W();function Pl(){if(!k(this)&&!S(this))return j.value.getBounds.call(this);let e=Mo(this),t=new h.LatLngBounds,r,o,i;for(r=0;r<2;r++)o=r?e.max:e.min,i=j.value.containerPointToLayerPoint.call(this,Jt(this,o,!0)),t.extend(this.layerPointToLatLng(i));return t}var Cl=new WeakSet;var gm=new WeakMap;or();ym();function Sl(){this.options.maxBounds&&this._panInsideMaxBounds()}var ir=new WeakMap;oa();fa();H();W();function pa(){let e=this,t=ir.get(e);if(!k(e)&&!S(e))return;let r=e.getSize().divideBy(2),o=t._newPos.subtract(t._startPos),i=r.subtract(Ne(e,r.subtract(o),!0));t._newPos=t._startPos.add(i)}function El(){Bo(this),je.get(this)?.remove(),ir.get(this)&&(ir.get(this).off("predrag",pa,this),ir.delete(this))}function kl(){let e=this.dragging?._draggable;e&&(ir.set(this,e),e.on("predrag",pa,this))}async function Ru(e){try{let{cameraControls:t}=await Promise.resolve().then(()=>(Du(),Ou));e._container?._leaflet_id&&t(e)}catch(t){throw e.fire("error",{error:t}),t}}function at(){}function Gu(){if(Cl.add(this),!document.getElementById("leaflet-camera-zoom-style")){let e=document.createElement("style");e.id="leaflet-camera-zoom-style",e.textContent=".leaflet-camera-zoom .leaflet-marker-icon,.leaflet-camera-zoom .leaflet-marker-shadow,.leaflet-camera-zoom .leaflet-popup,.leaflet-camera-zoom .leaflet-tooltip{transition:none!important}",document.head.append(e)}ze(this,this.options.pitch,this.options.bearing),this.on("load resize pitch",ia),this.on("rotate pitch",Sl,this),this.once("unload",El,this),this.whenReady(kl,this),(this.options.rotate||this.options.trackContainerMutation)&&(gm.set(this,Ru(this)),gm.get(this).catch(at))}b();function Uu(e){e instanceof h.DivIcon||(e.options.crossOrigin||=!0);let t=Ve.value.setIcon.call(this,e);return this._map&&!(e instanceof h.DivIcon)&&Jn(this,this._map),t}function Fu(){let e=Ve.value.getEvents.call(this);return e.rotate=e.pitch=e.move=this.update,e}function _o(e,t){return e.layerPointToContainerPoint(t).subtract(e._getMapPanePos())}function Nu(e){Ve.value._setPos.call(this,_o(this._map,e));let t,r,o,i,n,a;for(t=0;t<2;t++)r=t?this._shadow:this._icon,o=t?"shadowAnchor":"iconAnchor",r&&(i=An(this,1,0),n=this.options.icon.options,a=n[o]||n.iconAnchor,r.style.transformOrigin=a?`${a.x??a[0]}px ${a.y??a[1]}px`:"center",r.style.transform+=` rotate(${Math.atan2(i.y,i.x)}rad) scale(${this.options.scale})`)}function xt(e=this){let t=xe.get(e);t?.backend&&!t.disposed&&qe(t)}function ju(e){Ve.value._updateZIndex.call(this,e);let t=Cr.get(this)!==e;Cr.set(this,e),t&&xt(this)}var Or=new WeakMap;b();function Wu(e){let t=this._marker._map,r=h.DomUtil.getPosition(this._marker._icon).add(t._getMapPanePos()),o=t.containerPointToLayerPoint(r);h.DomUtil.setPosition(this._marker._icon,o),Or.get(this)._cameraOriginalOnDrag.call(this,e),this._marker._setPos(o)}b();H();W();var Ti=new Map;var Io={value:null};function Zu(){Io.value=null;let e=[...Ti];Ti.clear();let t,r;for([t,r]of e)t._panRequest=null,t._adjustPan(r)}function $u(e,t){Ti.set(e,t),Io.value===null&&(Io.value=requestAnimationFrame(Zu)),e._panRequest=Io.value}function Vu(e){let t=this._marker,r=t._map;if(!k(r)&&!S(r))return Or.get(this)._cameraOriginalAdjustPan.call(this,e);let o=h.DomUtil.getPosition(t._icon).add(r._getMapPanePos()),i=r.getSize(),n=fe(t.options.autoPanPadding),a=t.options.autoPanSpeed,s=o;if(s.x=(Math.max(0,o.x-i.x+n.x)-Math.max(0,n.x-o.x))/Math.max(1,n.x)*a,s.y=(Math.max(0,o.y-i.y+n.y)-Math.max(0,n.y-o.y))/Math.max(1,n.y)*a,!s.x&&!s.y)return;let m=r._getMapPanePos();r.panBy(s,{animate:!1});let f=m.subtract(r._getMapPanePos());this._draggable._newPos._add(f),this._draggable._startPos._add(f),h.DomUtil.setPosition(t._icon,this._draggable._newPos),this._onDrag(e),$u(this,e)}function qu(){if(!this.dragging||Or.has(this.dragging))return;let e=this.dragging,t=e._onDrag,r=e._adjustPan;Or.set(e,{_cameraOriginalOnDrag:t,_cameraOriginalAdjustPan:r}),e._onDrag=Wu,e._adjustPan=Vu,e.enabled()&&(e._draggable.off("drag",t,e),e._draggable.on("drag",e._onDrag,e))}function Hu(){let e=Ve.value._initInteraction.call(this);return qu.call(this),e}function Yu(){let e=Hi.value.call(this);return e.rotate=e.pitch=e.move=this._updatePosition,e}function Xu(){let e=Yi.value.call(this);return e.rotate=e.pitch=e.move=this._updatePosition,e}H();W();function Ku(){let e=this._map;if(!k(e)&&!S(e))return Ki.value.call(this);if(!this.options.autoPan)return;if(e._panAnim&&e._panAnim.stop(),this._autopanning){this._autopanning=!1;return}let t=this._container.getBoundingClientRect(),r=e.getContainer().getBoundingClientRect(),o=fe(this.options.autoPanPaddingTopLeft||this.options.autoPanPadding),i=e.getSize().subtract(fe(this.options.autoPanPaddingBottomRight||this.options.autoPanPadding)),n=t.left-r.left,a=t.top-r.top,s=t.right-r.left,m=t.bottom-r.top,f=Math.min(0,n-o.x)||Math.max(0,s-i.x),p=Math.min(0,a-o.y)||Math.max(0,m-i.y);if(!f&&!p)return;this.options.keepInView&&(this._autopanning=!0);let c=e.latLngToContainerPoint(this._latlng);c.x-=f,c.y-=p;let l=e.latLngToLayerPoint(this._latlng).subtract(e.containerPointToLayerPoint(c));e.fire("autopanstart"),e.panTo(e.unproject(e.project(e.getCenter()).add(l)))}b();function Ju(){if(Xi.value.call(this),!this._map)return;let e=this._map.latLngToLayerPoint(this._latlng),t=_o(this._map,e).subtract(e);this._zoomAnimated?h.DomUtil.setPosition(this._container,h.DomUtil.getPosition(this._container).add(t)):(this._container.style.left=`${this._containerLeft+t.x}px`,this._container.style.bottom=`${this._containerBottom-t.y}px`)}b();function Qu(e){Ji.value.call(this,e);let t=_o(this._map,e).subtract(e);h.DomUtil.setPosition(this._container,h.DomUtil.getPosition(this._container).add(t))}b();function ed(){let e=en.value.call(this);return e.rotate=e.pitch=h.Util.throttle(this._onMoveEnd,this.options.updateInterval,this),e}b();W();H();function td(e){if(!S(this._map)&&!k(this._map))return Qi.value.call(this,e);let t=this._map.getBounds();return new h.Bounds(this._map.project(t.getNorthWest(),this._tileZoom),this._map.project(t.getSouthEast(),this._tileZoom))}j.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(h.Map.prototype));h.Map.mergeOptions({rotate:!0,bearing:0,pitch:0,maxPitch:85,pitchMaxDistance:3,rotateControl:!0,shiftKeyRotate:!0,pitchDrag:!0,touchRotate:!1,touchPitch:!1,compassBearing:!1});h.Map.include({layerPointToContainerPoint:hl,containerPointToLayerPoint:gl,_getCenterLayerPoint:yl,panBy:xl,setZoomAround:vl,panInside:wl,_limitCenter:Ml,_limitOffset:bl,_getBoundsCenterZoom:Ll,getBoundsZoom:Bl,_tryAnimatedPan:Tl,getBounds:Pl});h.Map.addInitHook(Gu);Ve.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(h.Marker.prototype));h.Marker.mergeOptions({rotation:0,rotateWithView:!1,keepUpright:!1,scale:1});h.Marker.include({setIcon:Uu,getEvents:Fu,_setPos:Nu,_updateZIndex:ju,_initInteraction:Hu});Hi.value=h.Popup.prototype.getEvents;h.Popup.include({getEvents:Yu});Yi.value=h.Tooltip.prototype.getEvents;h.Tooltip.include({getEvents:Xu});Xi.value=h.Popup.prototype._updatePosition;Ki.value=h.Popup.prototype._adjustPan;h.Popup.include({_adjustPan:Ku,_updatePosition:Ju});Ji.value=h.Tooltip.prototype._setPosition;h.Tooltip.include({_setPosition:Qu});Qi.value=h.GridLayer.prototype._getTiledPixelBounds;en.value=h.GridLayer.prototype.getEvents;h.GridLayer.include({getEvents:ed,_getTiledPixelBounds:td});var le=new WeakMap;var V=new WeakMap;var cr=new WeakMap;var lr=new WeakMap;var q=new WeakMap;var We=new WeakMap;var Oe=new WeakMap;var ur=new WeakMap;var oe=new WeakMap;b();var Oa=new WeakMap;var Pi=new WeakMap;var vt=new WeakSet;var Vm=["rootDirectoryOffset","rootDirectoryLength","jsonMetadataOffset","jsonMetadataLength","leafDirectoryOffset","leafDirectoryLength","tileDataOffset","tileDataLength","numAddressedTiles","numTileEntries","numTileContents"];var qm=["clustered","internalCompression","tileCompression","tileType","minZoom","maxZoom"];var Hm=["minLon","minLat","maxLon","maxLat"];function Da(e){let t=e.byteLength>=127?new DataView(e):null;if(!t||t.getUint32(0,!0)!==1767132496||t.getUint32(4,!0)!==57894252)throw new Error("Expected a PMTiles v3 archive");let r={},o;for(o=0;o<Vm.length;o++)r[Vm[o]]=Number(t.getBigUint64(8+o*8,!0));for(o=0;o<qm.length;o++)r[qm[o]]=t.getUint8(96+o);for(o=0;o<Hm.length;o++)r[Hm[o]]=t.getInt32(102+o*4,!0)/1e7;return r.centerZoom=t.getUint8(118),r.centerLon=t.getInt32(119,!0)/1e7,r.centerLat=t.getInt32(123,!0)/1e7,r}var zo=new WeakMap;async function Ao(e,t,r,o){if(o?.throwIfAborted(),!Number.isSafeInteger(t)||!Number.isSafeInteger(r)||t<0||r<=0||!Number.isSafeInteger(t+r))throw new Error("Invalid PMTiles byte range");let i=await fetch(oe.get(e),{headers:{Range:`bytes=${t}-${t+r-1}`},signal:o});if(!i.ok)throw new Error(`Unable to read PMTiles: HTTP ${i.status}`);let n=i.headers.get("ETag");if(zo.get(e)&&n!==zo.get(e))throw new Error("PMTiles archive changed; recreate the layer");n&&zo.set(e,n);let a=await i.arrayBuffer();if(i.status===200)a=a.slice(t,t+r);else if(i.status!==206||!i.headers.get("Content-Range")?.startsWith(`bytes ${t}-${t+r-1}/`))throw new Error("Invalid PMTiles range response");if(a.byteLength!==r)throw new Error("Truncated PMTiles range");return a}function Dr(e){if(!vt.has(e))return e.getHeader();if(e.options.archive&&e.options.archive!==e)return Dr(e.options.archive);let t=Pi.get(e);return t||(t=Ao(e,0,127).then(Da),Pi.set(e,t)),t}var st=new WeakMap;var wt=new WeakMap;X();function Ra(e,t=!0){let r={enabled:t,loaded:0,skipped:0,pending:0,errors:[]},o;for(o of V.get(e).values())o.error?r.errors.push(o.error):o.done||r.pending++,r.loaded+=o.buildings??0,r.skipped+=o.skipped??0;e.fire("progress",r)}function rd(e){let{positions:t,normals:r,colors:o,featureFaces:i}=e;if(e.backend.options.nightLight||i.length<2)return e;let n=i[0].vertexEnd,a=n*3;if(!n||t.length!==a*i.length)return e;let s=Math.trunc(t[0]),m=Math.trunc(t[1]),f=Math.trunc(t[2]),p=new Float32Array(a),c,l,u,d;for(c=0;c<a;c++)p[c]=t[c]-(c%3===0?s:c%3===1?m:f);let y=new Float32Array(i.length*4);for(l=0;l<i.length;l++){if(u=i[l],d=l*a,u.vertexStart!==l*n||u.vertexEnd!==(l+1)*n)return e;for(y[l*4]=s+t[d]-t[0],y[l*4+1]=m+t[d+1]-t[1],y[l*4+2]=f+t[d+2]-t[2],y[l*4+3]=l*n,c=0;c<a;c++)if(Math.fround(p[c]+y[l*4+c%3])!==Math.fround(t[d+c])||Math.fround(r[c])!==Math.fround(r[d+c])||Math.fround(o[c])!==Math.fround(o[d+c]))return e}return{positions:p,normals:r.slice(0,a),colors:o.slice(0,a),instanceOffsets:y}}function od(e){let{backend:t,area:r}=e;if(!e.positions.length){r.mesh=null,r.buildings=0,r.skipped=e.skipped,r.done=!0;return}let o=v.get(t).device,i=e.preparedGeometry||rd(e),n={position:{size:3,data:i.positions instanceof Float32Array?i.positions:new Float32Array(i.positions)},normal:{size:3,data:i.normals instanceof Float32Array?i.normals:new Float32Array(i.normals)},color:{size:3,data:i.colors instanceof Float32Array?i.colors:new Float32Array(i.colors)}};i.instanceOffsets&&(n.instanceOffset={size:4,data:i.instanceOffsets}),t.options.nightLight&&(n.uv={size:2,data:e.uvs instanceof Float32Array?e.uvs:new Float32Array(e.uvs)});let a,s;for(a in n)s=n[a],s.count=s.data.length/s.size,s.buffer=o.createBuffer({size:Math.max(4,s.data.byteLength),usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),o.queue.writeBuffer(s.buffer,0,s.data);let m={device:o,bounds:i.bounds,attributes:n,drawRange:{start:0,count:n.position.count}};r.mesh={...Pe(),device:o,geometry:m,program:Ke(t,{instanced:!!i.instanceOffsets,vertexColors:!0,roofTexture:t.options.roofTexture,wallTexture:t.options.wallTexture,nightLight:!!t.options.nightLight,alphaMode:t.options.nightLight?"BLEND":void 0,doubleSided:!!t.options.nightLight}),id:ut.value++,renderOrder:0,fadeDuration:250,extras:{featureFaces:e.featureFaces,lights:e.lights}},r.buildings=e.featureFaces.length,r.skipped=e.skipped,r.done=!0,Z(r.mesh,L.get(t)),_(t)}var id=new TextDecoder;function nd(e,t,r){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(r)||e<0||e>26||t<0||r<0||t>=2**e||r>=2**e)throw new Error("Invalid PMTiles tile coordinates");let o=(4**e-1)/3,i=2**e,n,a,s,m;for(n=i/2;n>=1;n/=2)a=t&n?1:0,s=r&n?1:0,o+=n*n*(3*a^s),s||(a&&(t=i-1-t,r=i-1-r),m=t,t=r,r=m);return o}var ad={bytes:null,cursor:0};function Oo(e){let{bytes:t}=e,r=0,o,i;for(o=1;o<=2**49;o*=128){if(e.cursor>=t.length)throw new Error("Truncated PMTiles directory");if(i=t[e.cursor++],r+=(i&127)*o,!Number.isSafeInteger(r))throw new Error("Invalid PMTiles directory integer");if(i<128)return r}throw new Error("Invalid PMTiles directory integer")}function sd(e){let t=ad,r=new Uint8Array(e);t.bytes=r,t.cursor=0;try{let o=Oo(t);if(o>(r.length-t.cursor)/4)throw new Error("Invalid PMTiles directory count");let i=new Array(o),n=0,a,s,m;for(a=0;a<o;a++){if(n+=Oo(t),!Number.isSafeInteger(n)||a&&n<=i[a-1].tileId)throw new Error("Invalid PMTiles directory tile IDs");i[a]={tileId:n,runLength:0,length:0,offset:0}}for(s of i)s.runLength=Oo(t);for(s of i)if(s.length=Oo(t),!s.length)throw new Error("Invalid PMTiles directory length");for(a=0;a<i.length;a++){if(s=i[a],m=Oo(t),!m&&!a)throw new Error("Invalid PMTiles directory offset");s.offset=m?m-1:i[a-1].offset+i[a-1].length}if(t.cursor!==r.length)throw new Error("Trailing PMTiles directory data");return i}finally{t.bytes=null,t.cursor=0}}async function Do(e,t){if(t===1)return e;if(t!==2)throw new Error(`Unsupported PMTiles compression: ${t}`);let r=new Blob([e]),o=new DecompressionStream("gzip");return new Response(r.stream().pipeThrough(o)).arrayBuffer()}async function md(e,t,r,o){return sd(await Do(await Ao(e,t,r),o))}async function fd(e,t,r,o){let i=lr.get(e),n=`${t}:${r}`;i.has(n)||(i.size>=32&&i.delete(i.keys().next().value),i.set(n,md(e,t,r,o)));let a=i.get(n);try{return await a}catch(s){throw i.get(n)===a&&i.delete(n),s}}function pd(e,t){let r=0,o=e.length-1,i;for(;r<=o;)i=r+o>>1,e[i].tileId<=t?r=i+1:o=i-1;return e[o]}async function cd(e,t,r,o,i){if(o-r.tileId>=r.runLength)return;if(r.offset+r.length>t.tileDataLength)throw new Error("PMTiles tile outside data section");let n=await Do(await Ao(e,t.tileDataOffset+r.offset,r.length,i),t.tileCompression);return i?.throwIfAborted(),{data:n}}async function ld(e,t,r,o){let i=t.rootDirectoryOffset,n=t.rootDirectoryLength,a=-1,s=-1,m=-1,f,p,c,l;for(f=0;f<4;f++){if(i===a||i===s||i===m)throw new Error("Cyclic PMTiles directory");if(f===0?a=i:f===1?s=i:f===2&&(m=i),p=await fd(e,i,n,t.internalCompression),o?.throwIfAborted(),c=pd(p,r),!c)return;if(c.runLength)return l=await cd(e,t,c,r,o),l;if(c.offset+c.length>t.leafDirectoryLength)throw new Error("PMTiles directory outside leaf section");i=t.leafDirectoryOffset+c.offset,n=c.length}throw new Error("PMTiles directory depth exceeds four levels")}async function Rr(e,t,r,o,i){if(!vt.has(e))return e.getZxy(t,r,o,i);if(e.options.archive&&e.options.archive!==e)return Rr(e.options.archive,t,r,o,i);let n=nd(t,r,o);i?.throwIfAborted();let a=await Dr(e);if(i?.throwIfAborted(),!(t<a.minZoom||t>a.maxZoom))return ld(e,a,n,i)}async function ud(e,t){if(q.get(e)){let{data:o,url:i}=e.options;if(o!==void 0&&i)throw new Error("GeoJSON source requires either data or url");if(o!==void 0)return o;if(!i)throw new Error("GeoJSON source requires either data or url");let n=new URL(i,document.baseURI),a=await fetch(n,{signal:t.request.signal});if(!a.ok)throw new Error(`Unable to load GeoJSON: HTTP ${a.status}`);return a.json()}let r=await Rr(e,t.coords.z,t.coords.x,t.coords.y,t.request.signal);return r?JSON.parse(id.decode(r.data)):{type:"FeatureCollection",features:[]}}X();function dd(e,t,r){let o=r.options.crs,i=o.project(O.get(e));return{backend:e,area:t,map:r,crs:o,origin:i,metres:Math.cos(O.get(e).lat*T),positions:[],normals:[],colors:[],uvs:[],featureFaces:[],lights:[],supports:new Set,skipped:0}}var hd=new URL("leaflet-city-mapper-worker.js",document.currentScript?.src||document.baseURI).href;function gd(e,t){if(t.type==="abort")e.reject(e.signal.reason);else if(t.type==="error")e.reject(new Error(`Geometry worker failed: ${t.message}`));else if(t.type==="messageerror")e.reject(new Error("Unable to receive geometry worker buffers"));else if(t.data.error){let r=new Error(t.data.error.message);r.name=t.data.error.name,e.reject(r)}else e.resolve(t.data)}function yd(e,t,r){if(e.resolve=t,e.reject=r,e.onEvent=gd.bind(null,e),e.worker.addEventListener("message",e.onEvent),e.worker.addEventListener("error",e.onEvent),e.worker.addEventListener("messageerror",e.onEvent),e.signal.addEventListener("abort",e.onEvent,{once:!0}),e.signal.aborted){r(e.signal.reason);return}e.worker.postMessage(e.input)}var Ym=new WeakMap;function xd(e){e.closed=!0;let t;for(t of e.entries)t.closed=!0,t.worker.terminate(),t.task&&t.task.reject(new DOMException("Map removed","AbortError"));e.entries.clear(),e.idle.length=0}function vd(e,t){let r=e,o,i;if(globalThis.location){let a=new URL(e,location.href);(a.protocol==="https:"||a.protocol==="http:")&&a.origin!==location.origin&&(o=URL.createObjectURL(new Blob([`import ${JSON.stringify(a.href)};`],{type:"text/javascript"})),r=o)}try{i=new Worker(r,{type:"module"})}finally{!i&&o&&URL.revokeObjectURL(o)}let n={url:e,pool:t,worker:i,blobUrl:o};return t&&t.entries.add(n),n}function wd(e,t){let r=e&&Ym.get(e);e&&!r&&(r={entries:new Set,idle:[],closed:!1},Ym.set(e,r),e.once("unload",xd.bind(null,r)));let o,i;if(r){if(r.closed)throw new DOMException("Map removed","AbortError");for(i=0;i<r.idle.length;i++)if(r.idle[i].url===t)return o=r.idle[i],r.idle.splice(i,1),o;o=r.idle.pop(),o&&(o.closed=!0,o.worker.terminate(),r.entries.delete(o))}return vd(t,r)}async function Md(e,t){let r=wd(e.map||e.backend._map,e.backend.options.workerUrl||hd),{worker:o,pool:i}=r,n={worker:o,signal:t,input:{jobs:e.jobs,nightLight:!!e.backend.options.nightLight}};r.task=n;let a=!1;try{let s=await new Promise(yd.bind(null,n)),m;for(m=0;m<s.ranges.length;m++)Object.assign(e.featureFaces[m],s.ranges[m]);e.positions=s.positions,e.uvs=s.uvs,e.lights=s.lights,e.preparedGeometry=s,a=!0}finally{o.removeEventListener("message",n.onEvent),o.removeEventListener("error",n.onEvent),o.removeEventListener("messageerror",n.onEvent),t.removeEventListener("abort",n.onEvent),r.task=null,a&&i&&!i.closed&&!t.aborted?i.idle.push(r):(r.closed||o.terminate(),i&&i.entries.delete(r)),r.blobUrl&&(URL.revokeObjectURL(r.blobUrl),r.blobUrl=null),e.jobs=null}}b();function Ga(e,t,r){let{backend:o,crs:i,origin:n,metres:a,map:s}=e,m=new h.LatLng(r,t),f=i.project(m),p=ct(s,m),c=L.get(o);return{x:(f.x-n.x)*a,y:(f.y-n.y)*a,ground:Number.isFinite(p)&&Number.isFinite(c.position[1])?p-c.position[1]:0}}var Ro=[];function Ua(e){return e.ground||0}function Gr(e,t,r,o,i,n,a,s,m,f,p){let{backend:c,positions:l,normals:u,colors:d,uvs:y}=e,g=o.x-t.x,x=i-r,w=t.y-o.y,C=n.x-t.x,B=a-r,P=t.y-n.y;if((x*P-w*B)*s+(w*C-g*P)*m+(g*B-x*C)*f<0){let D=o,te=i;o=n,i=a,n=D,a=te}l.push(t.x,r+Ua(t),-t.y,o.x,i+Ua(o),-o.y,n.x,a+Ua(n),-n.y),u.push(s,m,f,s,m,f,s,m,f),d.push(p.r,p.g,p.b,p.r,p.g,p.b,p.r,p.g,p.b),c.options.nightLight&&y.push(...t.uv,...o.uv,...n.uv)}function bd(...e){Gr(Ro[Ro.length-1],...e)}function Fa(e,t,r,o){Ro.push(e);try{t(r,o,bd)}finally{Ro.pop()}}var Ur=[{x:Math.cos(0*Math.PI/3),y:Math.sin(0*Math.PI/3),nx:Math.cos(.5*Math.PI/3),nz:-Math.sin(.5*Math.PI/3)},{x:Math.cos(1*Math.PI/3),y:Math.sin(1*Math.PI/3),nx:Math.cos(1.5*Math.PI/3),nz:-Math.sin(1.5*Math.PI/3)},{x:Math.cos(2*Math.PI/3),y:Math.sin(2*Math.PI/3),nx:Math.cos(2.5*Math.PI/3),nz:-Math.sin(2.5*Math.PI/3)},{x:Math.cos(3*Math.PI/3),y:Math.sin(3*Math.PI/3),nx:Math.cos(3.5*Math.PI/3),nz:-Math.sin(3.5*Math.PI/3)},{x:Math.cos(4*Math.PI/3),y:Math.sin(4*Math.PI/3),nx:Math.cos(4.5*Math.PI/3),nz:-Math.sin(4.5*Math.PI/3)},{x:Math.cos(5*Math.PI/3),y:Math.sin(5*Math.PI/3),nx:Math.cos(5.5*Math.PI/3),nz:-Math.sin(5.5*Math.PI/3)}];function Ld(e,t){let r=new Array(Ur.length),o;for(o=0;o<r.length;o++)r[o]={x:e.x+Ur[o].x*t,y:e.y+Ur[o].y*t,ground:e.ground,uv:[3,3]};return r}function Bd(e,t,r){let o=Ie(5264986),i=t.poleRadius;if(!Number.isFinite(i)||i<=0)throw new Error("Invalid lamp pole radius");let n={...e,uv:[3,3]},a,s,m,f,p,c,l,u,d,y;for(y=0;y<2;y++)for(a=y?i*2.5:i,s=y?t.top-.25:0,m=y?t.top+.15:t.top,f=Ld(e,a),p=0;p<6;p++)c=f[p],l=f[(p+1)%6],u=Ur[p].nx,d=Ur[p].nz,r(c,s,l,s,l,m,u,0,d,o),r(c,s,l,m,c,m,u,0,d,o),r(n,m,c,m,l,m,0,1,0,o),r(n,s,l,s,c,s,0,-1,0,o)}function Td(e,t,r,o,i,n,a,s,m,f){typeof s!="number"?(e(r,a,o,a,i,a,...s,t),e(r,a,i,a,n,a,...s,t)):(e(r,a,o,a,i,a,s,m,f,t),e(r,a,i,a,n,a,s,m,f,t))}function Ci(e,t,r,o){return{x:e.x+(o===2?0:t*.65),y:e.y+(o===1?0:o===2?t*.65:r*.65),ground:e.ground+(o===0?0:r*.65),uv:[t,r]}}function Pd(e,t,r){if(!Number.isFinite(t.lightRadius)||t.lightRadius<=0)throw new Error("Invalid light radius");let o=Ie(t.color),i;for(i=0;i<3;i++)Td(r,o,Ci(e,-1,-1,i),Ci(e,1,-1,i),Ci(e,1,1,i),Ci(e,-1,1,i),t.top,i===2?1:0,i===0?1:0,i===1?1:0)}var Na=[[0,0],[.35,.8],[.6,1],[.85,.7],[1,0]];var Go=[{x:Math.cos(0*Math.PI/4),y:Math.sin(0*Math.PI/4),nx:Math.cos(.5*Math.PI/4),nz:-Math.sin(.5*Math.PI/4)},{x:Math.cos(1*Math.PI/4),y:Math.sin(1*Math.PI/4),nx:Math.cos(1.5*Math.PI/4),nz:-Math.sin(1.5*Math.PI/4)},{x:Math.cos(2*Math.PI/4),y:Math.sin(2*Math.PI/4),nx:Math.cos(2.5*Math.PI/4),nz:-Math.sin(2.5*Math.PI/4)},{x:Math.cos(3*Math.PI/4),y:Math.sin(3*Math.PI/4),nx:Math.cos(3.5*Math.PI/4),nz:-Math.sin(3.5*Math.PI/4)},{x:Math.cos(4*Math.PI/4),y:Math.sin(4*Math.PI/4),nx:Math.cos(4.5*Math.PI/4),nz:-Math.sin(4.5*Math.PI/4)},{x:Math.cos(5*Math.PI/4),y:Math.sin(5*Math.PI/4),nx:Math.cos(5.5*Math.PI/4),nz:-Math.sin(5.5*Math.PI/4)},{x:Math.cos(6*Math.PI/4),y:Math.sin(6*Math.PI/4),nx:Math.cos(6.5*Math.PI/4),nz:-Math.sin(6.5*Math.PI/4)},{x:Math.cos(7*Math.PI/4),y:Math.sin(7*Math.PI/4),nx:Math.cos(7.5*Math.PI/4),nz:-Math.sin(7.5*Math.PI/4)}];function Si(e,t){let r=new Array(Go.length),o;for(o=0;o<r.length;o++)r[o]={x:e.x+Go[o].x*t,y:e.y+Go[o].y*t,ground:e.ground};return r}function ja(e,t,r,o,i,n,a){let s=Si(e,r),m=Si(e,i),f,p,c,l,u,d,y,g,x;for(f=0;f<8;f++)p=(f+1)%8,c=(r-i)/(n-o),l=Math.hypot(1,c),{nx:u,nz:d}=Go[f],y=c/l,g=u/l,x=d/l,r&&t(s[f],o,s[p],o,m[p],n,g,y,x,a),i&&t(s[f],o,m[p],n,m[f],n,g,y,x,a)}function Cd(e,t,r,o,i,n){if(!Number.isFinite(e)||!Number.isFinite(t)||!Number.isFinite(r)||e<=0||t<e||r<=o||r>=i||n!=="round"&&n!=="cone")throw new Error("Invalid tree dimensions or crown shape")}function Sd(e,t,r){let{top:o,bottom:i=0,trunkRadius:n,crownRadius:a,crownBottom:s,crownShape:m="round"}=t;Cd(n,a,s,i,o,m);let f=Ie(t.trunkColor??7491898),p=Ie(t.color??5210683);ja(e,r,n,i,n,s+(o-s)*.25,f);let c,l,u,d,y;if(m==="cone"){let g=Si(e,a);for(c=0;c<8;c++)r(e,s,g[c],s,g[(c+1)%8],s,0,-1,0,p);ja(e,r,a,s,0,o,p)}else for(c=1;c<Na.length;c++)[l,u]=Na[c-1],[d,y]=Na[c],ja(e,r,u*a,s+l*(o-s),y*a,s+d*(o-s),p)}function Ed(e,t,r,o,i){let{top:n}=r;if(e.backend.options.nightLight){if(!Number.isFinite(r.lightFlux)||r.lightFlux<=0)throw new Error("Invalid light flux");r.poleRadius>0&&!e.supports.has(i)&&(Fa(e,Bd,t,r),e.supports.add(i)),Fa(e,Pd,t,r),e.lights.push({position:[t.x,t.ground+n,-t.y],radius:Math.hypot(n,r.lightRadius),color:[o.r,o.g,o.b],flux:r.lightFlux})}else Fa(e,Sd,t,r)}function kd(e,t,r,o,i,n){let a=Ga(e,r,o);Ed(e,a,i,n,t.properties?.cod_ouvrag||`${r},${o}`)}b();function Wa(e,t){let{backend:r,crs:o,origin:i,metres:n,map:a}=e;if(t.length<4)throw new Error("Invalid GeoJSON polygon ring");let s=[],m=L.get(r),f,p,c,l,u,d;for(f=0;f<t.length-1;f++){if(p=t[f][0],c=t[f][1],!Number.isFinite(p)||!Number.isFinite(c))throw new Error("Invalid GeoJSON coordinates");l=new h.LatLng(c,p),u=o.project(l),d=ct(a,l),s.push({x:(u.x-i.x)*n,y:(u.y-i.y)*n,ground:Number.isFinite(d)&&Number.isFinite(m.position[1])?d-m.position[1]:0})}return s}function _d(e,t,r,o,i){let n=[],a,s,m,f,p,c,l,u,d,y,g;for(a of t)for(s of a)n.push(s);for([m,f,p]of yo(t[0],t.slice(1)))Gr(e,n[m],r,n[f],r,n[p],r,0,1,0,i),o>0&&Gr(e,n[m],o,n[f],o,n[p],o,0,-1,0,i);for(c=0;c<t.length;c++)for(a=t[c],l=Rn(a)===(c===0)?-1:1,u=0;u<a.length;u++)m=a[u],f=a[(u+1)%a.length],d=Math.hypot(f.x-m.x,f.y-m.y),d&&(y=l*(f.y-m.y)/d,g=l*(f.x-m.x)/d,Gr(e,m,o,f,o,f,r,y,0,g,i),Gr(e,m,o,f,r,m,r,y,0,g,i))}function Xm(e,t,r,o,i){if(!t.length)throw new Error("Empty GeoJSON polygon");let n=[],a;for(a of t)n.push(Wa(e,a));_d(e,n,r,o,i)}function Id(e,t){let r=e?.geometry,o=r?.type==="Point";if(t&&!o)throw new Error("Night lights require Point geometry");if(r?.type!=="Polygon"&&r?.type!=="MultiPolygon"&&!o)throw new Error("Unsupported GeoJSON geometry");let i=o?r.coordinates:r.type==="Polygon"?r.coordinates[0]?.[0]:r.coordinates[0]?.[0]?.[0];if(!Number.isFinite(i?.[0])||!Number.isFinite(i?.[1]))throw new Error("Invalid GeoJSON coordinates");return i}function zd(e,t){let r=e.options.style(t);if(r===null)return null;if(!r||typeof r!="object")throw new Error("style must return an extrusion style or null");let{top:o,bottom:i=0}=r;if(!Number.isFinite(o)||!Number.isFinite(i)||i<0||o<=i)throw new Error("Invalid extrusion heights: expected top > bottom >= 0");return r}function Ad(e,t){let r=t.type==="Polygon"?[t.coordinates]:t.type==="MultiPolygon"?t.coordinates:[],o=[],i,n,a;for(i of r){if(!i.length)throw new Error("Empty GeoJSON polygon");a=[];for(n of i)a.push(Wa(e,n));o.push(a)}return o}function Od(e,t,r,o,i,n){let a=t.geometry,s=Ad(e,a),m=a.type==="Point"?Ga(e,r,o):null,f=e.backend.options.nightLight,p=m?Ie(i.color??(f?void 0:5210683)):n,c=m&&!f?Ie(i.trunkColor??7491898):null;e.jobs.push({point:m,polygons:s,baseColor:{r:n.r,g:n.g,b:n.b},support:t.properties?.cod_ouvrag||`${r},${o}`,style:{top:i.top,bottom:i.bottom??0,color:{r:p.r,g:p.g,b:p.b},trunkColor:c?{r:c.r,g:c.g,b:c.b}:void 0,trunkRadius:i.trunkRadius,crownRadius:i.crownRadius,crownBottom:i.crownBottom,crownShape:i.crownShape,poleRadius:i.poleRadius,lightRadius:i.lightRadius,lightFlux:i.lightFlux}})}b();function Dd(e,t,r,o){if(!t)return!0;let i=e.project(new h.LatLng(o,r),t.z);return Math.floor(i.x/256)===t.x&&Math.floor(i.y/256)===t.y}function Rd(e,t){let{backend:r,area:o,map:i}=e,n=o.coords,a=Id(t,r.options.nightLight),s=t.geometry,m=s.type==="Point",f=a[0],p=a[1];if(!Dd(i,n,f,p))return;let c=zd(r,t);if(c===null){e.skipped++;return}let{top:l,bottom:u=0,color:d=14267276}=c,y=Ie(d);if(e.jobs){Od(e,t,f,p,c,y),e.featureFaces.push({id:t.id??t.properties?.objectid??JSON.stringify(s),properties:t.properties,baseColor:y});return}let g=e.positions.length/3;m&&kd(e,t,f,p,c,y);let x;if(s.type==="Polygon")Xm(e,s.coordinates,l,u,y);else if(s.type==="MultiPolygon")for(x of s.coordinates)Xm(e,x,l,u,y);let w=e.positions.length/3;e.featureFaces.push({id:t.id??t.properties?.objectid??JSON.stringify(s),properties:t.properties,baseColor:y,faceStart:g/3,faceEnd:w/3,vertexStart:g,vertexEnd:w})}async function Gd(e,t,r){let o=performance.now()+4,i;for(i of r){if(t.request.signal.aborted)return;if(performance.now()>=o){if(await new Promise(requestAnimationFrame),t.request.signal.aborted)return;o=performance.now()+4}Rd(e,i)}}async function Ud(e,t,r){try{if(await new Promise(requestAnimationFrame),await ke.get(r),t.request.signal.aborted)return;let o=await ud(e,t);if(t.request.signal.aborted)return;if(o?.type!=="FeatureCollection"||!Array.isArray(o.features))throw new Error("Invalid GeoJSON response");if(q.get(e)&&typeof e.options.style!="function")throw new Error("style must be a function");let i=dd(e,t,r);if(e.options.worker!==!1&&typeof Worker<"u"&&o.features.length>=64&&(i.jobs=[]),await Gd(i,t,o.features),t.request.signal.aborted||(i.jobs&&await Md(i,t.request.signal),t.request.signal.aborted))return;od(i)}catch(o){t.request.signal.aborted||(t.error=o.message,e.fire("error",{error:o}))}finally{We.set(e,We.get(e)-1),Ei(e,r)}}function Za(e,t){return e.distance-t.distance}function Fd(e,t){let r=[],o,i,n;for(o of e)for(i of V.get(o).values())i.started||i.request.signal.aborted||(n=i.coords&&t.project(t.getCenter(),i.coords.z).divideBy(256),r.push({layer:o,area:i,distance:n?Math.hypot(i.coords.x+.5-n.x,i.coords.y+.5-n.y)/2**i.coords.z:0}));return r.sort(Za),r}function Ei(e,t=e._map){let r=t&&ie.get(t);if(!r)return;let o=[],i,n,a;for(i of G.get(r))Number.isFinite(We.get(i))&&V.get(i)&&(oe.get(i)||q.get(i))&&o.push(i);let s=Fd(o,t),m=0;for(i of o)m+=We.get(i);for({layer:a,area:n}of s){if(m>=4)break;We.get(a)>=2||(n.started=!0,We.set(a,We.get(a)+1),m++,Ud(a,n,t))}for(i of o)Ra(i)}var Je=new WeakMap;var be=new WeakMap;function Mt(e,t){t?.model&&(t=null),!(Je.get(e)?.mesh===t?.mesh&&Je.get(e)?.vertexStart===t?.vertexStart)&&(Je.get(e)&&(Je.get(e).mesh.highlight=null),Je.set(e,t),t&&(t.mesh.highlightRange[0]=t.vertexStart,t.mesh.highlightRange[1]=t.vertexEnd,t.mesh.highlight=t.mesh.highlightRange),_(e))}var Ce=new WeakMap;var dr=new WeakMap;var Se=new WeakMap;function bt(e,t,r){let o=Se.get(e);if(!o)return;if(t){o.replaceChildren(e.options.tooltip(t)),o.hidden=!1;let a=Ce.get(e).getBoundingClientRect(),s=r.clientX-a.left,m=r.clientY-a.top;o.style.left=`${s+o.offsetWidth+16>a.width?s-o.offsetWidth-12:s+12}px`,o.style.top=`${m+o.offsetHeight+16>a.height?m-o.offsetHeight-12:m+12}px`}else o.hidden=!0;let i=z.get(e),n;if(i){let a=!1;for(n of G.get(i))if(Se.get(n)&&!Se.get(n).hidden){a=!0;break}a?(dr.get(i)===void 0&&dr.set(i,Ce.get(e).style.cursor),Ce.get(e).style.cursor="pointer"):dr.get(i)!==void 0&&(Ce.get(e).style.cursor=dr.get(i),dr.delete(i))}}function Fr(e,t){t.request.abort();let r;if(t.mesh){Je.get(e)?.mesh===t.mesh&&(Mt(e,null),be.set(e,null),bt(e,null)),Z(t.mesh,null),_(e);let o=t.mesh.geometry;for(r of Object.values(o.attributes))r.buffer.destroy();t.mesh.program.pipelineCache.clear()}}function Nd(e,t){return e.distance-t.distance}function Nr(e){if(!e._map||!z.get(e))return;if(q.get(e)){V.get(e).has("geojson")||V.get(e).set("geojson",{request:new AbortController}),Ei(e);return}if(!R.get(e))return;let t=R.get(e).minZoom,r=e._map.project(e._map.getCenter(),t).divideBy(256).floor(),o=e._map.getBounds(),i=e._map.project(o.getNorthWest(),t).divideBy(256).floor(),n=e._map.project(o.getSouthEast(),t).divideBy(256).floor(),a=e._map.project([R.get(e).maxLat,R.get(e).minLon],t).divideBy(256).floor(),s=e._map.project([R.get(e).minLat,R.get(e).maxLon],t).divideBy(256).floor(),m=new Map,f,p,c,l,u;for(f=Math.max(0,i.x-1,a.x);f<=Math.min(2**t-1,n.x+1,s.x);f++)for(p=Math.max(0,i.y-1,a.y);p<=Math.min(2**t-1,n.y+1,s.y);p++)m.set(`${f}/${p}`,{z:t,x:f,y:p});for([c,l]of V.get(e))m.has(c)||(Fr(e,l),V.get(e).delete(c));let d=[];for([c,u]of m)u.distance=Math.hypot(u.x+.5-r.x,u.y+.5-r.y)/2**t,d.push(u);d.sort(Nd);for(u of d)c=`${u.x}/${u.y}`,V.get(e).has(c)||V.get(e).set(c,{coords:u,request:new AbortController});Ei(e)}function Uo(e){if(!L.get(e)||!O.get(e))return;wt.get(e)==null&&wt.set(e,L.get(e).position[1]);let t=ae.get(e._map),r=t&&Kt(t,O.get(e)),o=Number.isFinite(r)?e.options.terrainOffset??0:0;L.get(e).position[1]=wt.get(e)+(r??0)+o}function jd(e,t){e.attributes.index?.data instanceof Uint8Array&&(e.attributes.index.data=new Uint16Array(e.attributes.index.data));let r,o,i;for(r in e.attributes)o=e.attributes[r],o.size||=1,o.count=o.data.length/o.size,o.indexFormat=o.data instanceof Uint32Array?"uint32":"uint16",i=o.buffer,o.buffer=t.createBuffer({size:Math.max(4,o.data.byteLength),usage:r==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),t.queue.writeBuffer(o.buffer,0,o.data),i?.destroy();e.device=t,e.drawRange.count=e.attributes.index?.count||e.attributes.position.count}function Wd(e,t){let r,o;for(r in e)r!=="baseTexture"&&r!=="metalTexture"&&r!=="emissiveTexture"&&r!=="occlusionTexture"||(o=e[r],!(!o||o.device===t)&&(o.device=t,o.texture=t.createTexture({size:[o.image.width,o.image.height],format:o.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),o.sampler=t.createSampler(o.samplerOptions),o.uploaded=null))}function Zd(e,t){let r=z.get(t),o;if(e.geometry&&e.geometry.device!==v.get(r).device){let i=e.geometry,n=e.program._layerMaterial,a=v.get(r).device;jd(i,a),e.bindGroup=null,e.boundTextures?e.boundTextures.length=0:e.boundTextures=[],Wd(n,a),e.program.pipelineCache.clear(),e.program=Ke(t,n),e.device=a}e.texture&&e.texture.device!==v.get(r).device&&(o=e.texture,o.device=v.get(r).device,o.texture=v.get(r).device.createTexture({size:[e.texture.image.width,e.texture.image.height],format:e.texture.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),o.sampler=v.get(r).device.createSampler(o.samplerOptions),o.uploaded=null)}var Fo=new WeakMap;function $d(e){let t=e.getContainer();if(t.querySelector(".leaflet-webgpu-warning"))return;let r=document.createElement("div");r.className="leaflet-webgpu-warning",r.setAttribute("role","alert"),r.style.cssText="position:absolute;z-index:1000;top:50%;left:50%;transform:translate(-50%,-50%);max-width:calc(100% - 32px);box-sizing:border-box;padding:12px 16px;border:1px solid #c98b24;border-radius:6px;background:#fff8e6;box-shadow:0 3px 12px #0005;color:#30251d;font:14px/1.5 sans-serif;text-align:center;pointer-events:auto",r.append("WebGPU is not available in this browser or device. ");let o=document.createElement("a");o.href="https://developer.mozilla.org/en-US/docs/Web/API/WebGPU_API#browser_compatibility",o.target="_blank",o.rel="noopener noreferrer",o.textContent="Learn more",r.append(o),t.append(r)}function hr(e,t,r){throw $d(r),st.get(t).reject(e),ie.delete(r),e}async function Vd(e,t){let r;try{r=await navigator.gpu.requestAdapter()}catch(o){hr(o,e,t)}return r||hr(new Error("Unable to acquire a WebGPU adapter"),e,t),r}async function qd(e,t,r){try{return await e.requestDevice()}catch(o){hr(o,t,r)}}function Hd(e){let t=Fo.get(e.currentTarget),r=ie.get(t);if(v.get(r)?.device!==e.currentTarget||!G.get(r))return;let o;for(o of G.get(r))o.fire("error",{error:e.error})}function Yd([e,t]){let r=Fo.get(t),o=ie.get(r);if(!o||v.get(o)?.device!==t)return;let i=new Error(`WebGPU device lost: ${e.message||e.reason}`),n;for(n of G.get(o))n.fire("error",{error:i})}function Xd(){return{position:[0,0,0],up:[0,1,0],target:[0,0,0],x:[0,0,0],y:[0,0,0],z:[0,0,0],viewMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],projectionMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],projectionViewMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],viewTransform:new DOMMatrix,projectionTransform:new DOMMatrix,projectionViewTransform:new DOMMatrix,fov:45,aspect:1,near:.1,far:1e4}}var No=new Float32Array(20);No[0]=No[5]=No[10]=No[15]=1;function Kd(e,t){let r=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"depth"}},{binding:2,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"comparison"}},{binding:3,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"read-only-storage"}}]}),o=v.get(e).device.createBuffer({size:80,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),i=v.get(e).device.createSampler({compare:"less-equal",minFilter:"linear",magFilter:"linear"}),n=v.get(e).device.createBuffer({size:32,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});v.get(e).sunlight={layout:r,buffer:o,sampler:i,lights:n,size:0},v.get(e).device.queue.writeBuffer(o,0,No),Ln(e,1);let a=document.createElement("canvas");a.width=1,a.height=1,v.get(e).roofFallbackTexture={device:t,texture:t.createTexture({size:[1,1],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:t.createSampler({addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}),image:a,format:"rgba8unorm",srgb:!1,uploaded:null}}var jr=new WeakMap;var $a=[];function Jd(){let e=$a.shift();jr.set(e,!1),!(z.get(e)!==e||!v.get(e))&&(e._map._animatingZoom?_(e):rr(e))}function ki(){let e=this;jr.get(e)||(jr.set(e,!0),$a.push(e),queueMicrotask(Jd))}var jo=new WeakMap;function _i(){jo.set(this,null)}var Va=[];function Qd(){let e=Va.shift();z.get(e)===e&&v.get(e)&&rr(e)}function Ii(e){let t=this._map;e&&!Ue.get(this)&&(Ue.set(this,{from:t.getCenter(),zoom:t.getZoom(),to:e.center,targetZoom:e.zoom,start:performance.now()}),t.getContainer().classList.add("leaflet-camera-zoom")),Va.push(this),queueMicrotask(Qd)}function zi(){let e=this,t;if(ce.get(e))for(t of ce.get(e).keys())t.finish();ce.set(e,null),Ue.set(e,null),ke.delete(e._map),e._map.getContainer().classList.remove("leaflet-camera-zoom"),on(e._map),jo.set(e,null),_(e)}function eh(e,t,r){Yt.set(e,null),r.className="leaflet-3d",r.style.cssText="position:absolute;top:0;left:0;pointer-events:none",r.setAttribute("role","img"),r.setAttribute("aria-label",e.options.ariaLabel??"3D scene");let o=t.getPane("webgpuPane");o||(o=t.createPane("webgpuPane",t.getContainer()),o.style.zIndex=1,o.style.pointerEvents="none"),o.append(r),t.on("move zoom rotate pitch resize viewreset layeradd layerremove",ki,e),t.on("zoomstart",_i,e),t.on("zoomanim",Ii,e),t.on("zoomend",zi,e)}async function th(e,t){let r=document.createElement("canvas");navigator.gpu||hr(new Error("Layer3D requires WebGPU"),e,t);let o=await Vd(e,t),i=await qd(o,e,t);Fo.set(i,t),i.addEventListener("uncapturederror",Hd),Promise.all([i.lost,Promise.resolve(i)]).then(Yd);let n=r.getContext("webgpu");n||(i.destroy(),hr(new Error("Unable to create a WebGPU canvas context"),e,t));let a=navigator.gpu.getPreferredCanvasFormat();n.configure({device:i,format:a,alphaMode:"premultiplied"}),t.getContainer().querySelector(".leaflet-webgpu-warning")?.remove(),z.set(e,e),G.set(e,new Set),ne.set(e,O.get(e)),Q.set(e,Pe()),J.set(e,Xd()),v.set(e,{device:i,context:n,format:a,canvas:r,dpr:Math.min(window.devicePixelRatio,2)}),Kd(e,i),eh(e,t,r)}async function Wo(e,t){let r=ie.get(t);st.get(r)&&await st.get(r).promise,r||(r=e,st.set(e,Promise.withResolvers()),st.get(e).promise.catch(at),ie.set(t,r),await th(e,t),st.get(e).resolve(),st.delete(r),rr(r),ie.set(t,r));let o=t.options.crs.project(ne.get(r)),i=t.options.crs.project(O.get(e)),n=Math.cos(ne.get(r).lat*T);wt.get(e)==null&&wt.set(e,L.get(e).position[1]),L.get(e).position[0]=(i.x-o.x)*n,L.get(e).position[1]=wt.get(e),L.get(e).position[2]=-(i.y-o.y)*n,Uo(e),L.get(e).scale.fill(n/Math.cos(O.get(e).lat*T)),z.set(e,r),v.set(e,v.get(r)),Q.set(e,Q.get(r)),J.set(e,J.get(r)),G.get(r).add(e),Z(L.get(e),Q.get(r)),At(L.get(e),Zd,e),_(r),(R.get(e)&&I.get(e)!=="raster"||q.get(e))&&Nr(e)}var De=new WeakMap;var rh=new TextDecoder;function oh(e){if(!e)return!1;let t,r;for(t of e)for(r of t.primitives)if(r.targets||r.mode!==void 0&&r.mode!==4)return!0;return!1}function ih(e){let t=new DataView(e),r=rh,o,i,n,a,s;if(t.getUint32(0,!0)===1179937895){if(t.getUint32(4,!0)!==2||t.getUint32(8,!0)!==e.byteLength)throw new Error("Invalid GLB header");let m;for(i=12;i<e.byteLength;){if(i+8>e.byteLength)throw new Error("Truncated GLB chunk");if(n=t.getUint32(i,!0),a=t.getUint32(i+4,!0),i+=8,i+n>e.byteLength)throw new Error("Truncated GLB data");s=e.slice(i,i+n),a===1313821514&&(o=JSON.parse(r.decode(s))),a===5130562&&(m=s),i+=n}if(!o)throw new Error("Missing GLB JSON");m&&(o.buffers[0].binary=m)}else o=JSON.parse(r.decode(e));if(o.skins?.length||o.animations?.length||o.extensionsRequired?.length||oh(o.meshes))throw new Error("Layer3D supports static triangle glTF models without required extensions");return o}X();b();function qa(e,t){let r=new Float32Array(e.length),o,i,n,a,s,m,f,p,c,l,u,d,y,g,x,w;for(o=0;o<(t?.length||e.length/3);o+=3)for(i=t?t[o]:o,n=t?t[o+1]:o+1,a=t?t[o+2]:o+2,s=e[n*3]-e[i*3],m=e[n*3+1]-e[i*3+1],f=e[n*3+2]-e[i*3+2],p=e[a*3]-e[i*3],c=e[a*3+1]-e[i*3+1],l=e[a*3+2]-e[i*3+2],d=m*l-f*c,y=f*p-s*l,g=s*c-m*p,u=0;u<3;u++)x=u===0?i:u===1?n:a,r[x*3]+=d,r[x*3+1]+=y,r[x*3+2]+=g;for(o=0;o<r.length;o+=3)for(w=Math.hypot(r[o],r[o+1],r[o+2])||1,u=0;u<3;u++)r[o+u]/=w;return r}function Km(e,t){e.geometry?.attributes.position&&t.push(e);let r;for(r of e.children)Km(r,t)}function Zo(e,t){if(!De.get(e))return;let r=[];Km(De.get(e),r);let o,i,n,a,s,m,f,p,c,l,u,d,y,g,x,w,C,B,P,D;if(!ve.get(t)||!e.options.terrainConform){for(o of r)i=o.geometry._terrainBasePositions,i&&(n=o.geometry,a=n.attributes.position,a.data.set(i),o.device.queue.writeBuffer(a.buffer,0,i),s=n._terrainBaseNormals,s&&(n.attributes.normal.data.set(s),o.device.queue.writeBuffer(n.attributes.normal.buffer,0,s)),Be(n));return}we(L.get(e));let te=e._map,U=te.options.crs,N=U.project(ne.get(z.get(e))),K=Math.cos(ne.get(z.get(e)).lat*T),pe=U.scale(de.get(t));for(o of r){for(n=o.geometry,m=n.attributes.position,n._terrainBasePositions||=m.data.slice(),f=n.attributes.normal,n._terrainBaseNormals||=f.data.slice(),m.data.set(n._terrainBasePositions),p=o.worldMatrix,c=new DOMMatrix(p).inverse().toFloat64Array(),l=0;l<m.data.length;l+=3)u=m.data[l],d=m.data[l+1],y=m.data[l+2],g=p[1]*u+p[5]*d+p[9]*y+p[13],x=Math.max(0,Math.min(1,1-(g-L.get(e).position[1])/8)),x&&(w=p[0]*u+p[4]*d+p[8]*y+p[12],C=p[2]*u+p[6]*d+p[10]*y+p[14],B=U.transformation.transform(new h.Point(N.x+w/K,N.y-C/K),pe),P=Kt(t,B),Number.isFinite(P)&&(D=(P-g)*x,m.data[l]+=c[4]*D,m.data[l+1]+=c[5]*D,m.data[l+2]+=c[6]*D));o.device.queue.writeBuffer(m.buffer,0,m.data),f.data.set(qa(m.data,n.attributes.index?.data)),o.device.queue.writeBuffer(f.buffer,0,f.data),Be(n)}_(e)}async function nh(e,t){if(e.binary)return;let r=await fetch(new URL(e.uri,t).href);if(!r.ok)throw new Error(`Unable to load model buffer: HTTP ${r.status}`);e.binary=await r.arrayBuffer()}var ah={premultiplyAlpha:"none",colorSpaceConversion:"none"};async function sh(e,t,r){let o;if(r.bufferView!==void 0){let i=e.bufferViews[r.bufferView],n=e.buffers[i.buffer].binary;o=new Blob([n.slice(i.byteOffset||0,(i.byteOffset||0)+i.byteLength)],{type:r.mimeType})}else{let i=await fetch(new URL(r.uri,t).href);if(!i.ok)throw new Error(`Unable to load model texture: HTTP ${i.status}`);o=await i.blob()}return createImageBitmap(o,ah)}async function mh(e,t,r){let o=[],i;for(i of t.buffers||it)o.push(nh(i,r));await Promise.all(o),await le.get(e).promise;let n=[],a;for(a of t.images||it)n.push(sh(t,r,a));let s=await Promise.all(n);return await ke.get(e._map),s}function fh(e){return{addressModeU:e?.wrapS===33071?"clamp-to-edge":e?.wrapS===33648?"mirror-repeat":"repeat",addressModeV:e?.wrapT===33071?"clamp-to-edge":e?.wrapT===33648?"mirror-repeat":"repeat",magFilter:e?.magFilter===9728?"nearest":"linear",minFilter:e?.minFilter===9728||e?.minFilter===9984||e?.minFilter===9986?"nearest":"linear"}}function Ai(e,t,r=!1){let{backend:o,description:i,images:n,textures:a}=e;if(!t)return null;if((t.texCoord||0)!==0||t.extensions)throw new Error("Model textures currently require untransformed TEXCOORD_0 UVs");let s=v.get(o).device,m=`${t.index}:${r}`;if(!a.has(m)){let f=i.textures[t.index],p=i.samplers?.[f.sampler],c=n[f.source],l=r?"rgba8unorm-srgb":"rgba8unorm",u=fh(p);a.set(m,{device:s,texture:s.createTexture({size:[c.width,c.height],format:l,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:s.createSampler(u),samplerOptions:u,format:l,srgb:r,image:c,flipY:!1,uploaded:null})}return a.get(m)}function ph(e,t){let{backend:r}=e,o=t.pbrMetallicRoughness;return{color:o?.baseColorFactor?o.baseColorFactor.slice(0,3):[1,1,1],opacity:o?.baseColorFactor?.[3]??1,metallic:o?.metallicFactor??1,roughness:o?.roughnessFactor??1,baseTexture:Ai(e,o?.baseColorTexture,!0),metalTexture:Ai(e,o?.metallicRoughnessTexture),emissiveTexture:Ai(e,t.emissiveTexture,!0),occlusionTexture:Ai(e,t.occlusionTexture),emissive:t.emissiveFactor||[0,0,0],occlusionStrength:t.occlusionTexture?.strength??1,alphaMode:r.options.alphaMode||t.alphaMode||"OPAQUE",alphaCutoff:t.alphaCutoff??.5,doubleSided:t.doubleSided}}function ch(e,t,r){let o={backend:e,description:t,images:r,textures:new Map,materials:[],active:new Set,resources:[]},i;for(i of t.materials||it)o.materials.push(ph(o,i));return o}var lh=[0,0,0,1];var uh=[1,1,1];var dh=[0,0,0];function hh(e){if(e.matrix)return Array.from(e.matrix);let[t,r,o,i]=e.rotation||lh,[n,a,s]=e.scale||uh;return[(1-2*(r*r+o*o))*n,2*(t*r+o*i)*n,2*(t*o-r*i)*n,0,2*(t*r-o*i)*a,(1-2*(t*t+o*o))*a,2*(r*o+t*i)*a,0,2*(t*o+r*i)*s,2*(r*o-t*i)*s,(1-2*(t*t+r*r))*s,0,...e.translation||dh,1]}var gh=[["POSITION","position"],["NORMAL","normal"],["TEXCOORD_0","uv"]];var Ha={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array};var yh={SCALAR:1,VEC2:2,VEC3:3,VEC4:4};function xh(e,t,r){return t===Int8Array?e.getInt8(r):t===Uint8Array?e.getUint8(r):t===Int16Array?e.getInt16(r,!0):t===Uint16Array?e.getUint16(r,!0):t===Uint32Array?e.getUint32(r,!0):e.getFloat32(r,!0)}function Ya(e,t,r,o,i,n,a,s,m,f){let p=e.bufferViews[a],c=t.BYTES_PER_ELEMENT,l=e.buffers[p.buffer].binary;if(f||=r*c,!l||f<r*c||s<0||(p.byteOffset||0)+p.byteLength>l.byteLength||(m-1)*f+r*c+s>p.byteLength)throw new Error("glTF accessor outside buffer view");let u=new DataView(l),d,y,g,x;for(d=0;d<m;d++){if(x=n?n[d]:d,n&&x>=i)throw new Error("Invalid sparse glTF index");for(y=0;y<r;y++)g=(p.byteOffset||0)+s+d*f+y*c,o[x*r+y]=xh(u,t,g)}}function vh(e,t,r,o,i){let n=t.sparse,a=Ha[n.indices.componentType];if(a!==Uint8Array&&a!==Uint16Array&&a!==Uint32Array)throw new Error("Invalid sparse glTF indices");let s=e.bufferViews[n.indices.bufferView],m=(s.byteOffset||0)+(n.indices.byteOffset||0);if(n.count>t.count||(n.indices.byteOffset||0)+n.count*a.BYTES_PER_ELEMENT>s.byteLength)throw new Error("Invalid sparse glTF indices");let f=new a(e.buffers[s.buffer].binary.slice(m,m+n.count*a.BYTES_PER_ELEMENT));Ya(e,r,o,i,t.count,f,n.values.bufferView,n.values.byteOffset||0,n.count,0)}function wh(e,t,r,o){let i=new Float32Array(r.length),n;for(n=0;n<r.length;n++)i[n]=e.normalized?Math.max(-1,r[n]/(t===Int8Array?127:t===Int16Array?32767:t===Uint8Array?255:t===Uint32Array?4294967295:65535)):r[n];return{data:i,size:o,indices:r}}function Xa(e,t){let r=e.accessors[t],o=Ha[r.componentType],i=yh[r.type];if(!o||!i||!Number.isInteger(r.count)||r.count<0)throw new Error("Invalid glTF accessor");let n=new o(r.count*i);return r.bufferView!==void 0&&Ya(e,o,i,n,r.count,null,r.bufferView,r.byteOffset||0,r.count,e.bufferViews[r.bufferView].byteStride),r.sparse&&vh(e,r,o,i,n),r.componentType===5126?{data:n,size:i}:wh(r,o,n,i)}function Mh(e,t){let r={},o,i;for([o,i]of gh)t.attributes[o]!==void 0&&(r[i]=Xa(e,t.attributes[o]));if(!r.position)throw new Error("glTF mesh has no positions");let n=r.position.data.length/3;if(r.position.size!==3||n<3)throw new Error("Invalid glTF vertex attributes");let a;for(a of Object.values(r))if(a.data.length/a.size!==n)throw new Error("Invalid glTF vertex attributes");return{attributes:r,vertexCount:n}}function bh(e,t,r,o){if(t.indices!==void 0){let i=Xa(e,t.indices);if(r.index={size:1,data:i.indices},!(i.indices instanceof Uint8Array||i.indices instanceof Uint16Array||i.indices instanceof Uint32Array)||i.size!==1||i.indices.length%3)throw new Error("Invalid glTF triangle indices");let n;for(n of i.indices)if(n>=o)throw new Error("Invalid glTF triangle indices")}else if(o%3)throw new Error("Incomplete glTF triangle")}function Lh(e,t,r){let o;r.normal||(o=qa(r.position.data,r.index?.data),r.normal={size:3,data:o});let i=e.materials[t.material]||{color:[1,1,1],metallic:1};if((i.baseTexture||i.metalTexture||i.emissiveTexture||i.occlusionTexture)&&!r.uv)throw new Error("Textured model mesh requires UV coordinates");let n=Ke(e.backend,i);e.resources.push(n);let a=v.get(e.backend).device;r.index?.data instanceof Uint8Array&&(r.index.data=Uint16Array.from(r.index.data));let s,m;for([s,m]of Object.entries(r))m.size||=1,m.count=m.data.length/m.size,m.indexFormat=m.data instanceof Uint32Array?"uint32":"uint16",m.buffer=a.createBuffer({size:Math.max(4,m.data.byteLength),usage:s==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),a.queue.writeBuffer(m.buffer,0,m.data);let f={device:a,attributes:r,drawRange:{start:0,count:r.index?.count||r.position.count}};return e.resources.push(f),{device:a,geometry:f,program:n}}function Jm(e,t){let{backend:r,description:o,active:i}=e;if(i.has(t))throw new Error("Cyclic glTF nodes");let n=o.nodes[t];if(!n)throw new Error("Invalid glTF node");i.add(t);let a={...Pe(),name:n.name};a.matrix=hh(n);let s,m,f,p,c,l,u;if(n.mesh!==void 0)for(s of o.meshes[n.mesh].primitives)m=Mh(o,s),f=m.attributes,p=m.vertexCount,bh(o,s,f,p),c=Lh(e,s,f),l={...Pe(),device:c.device,geometry:c.geometry,program:c.program,fadeDuration:250,id:ut.value++,renderOrder:0},l.name=o.meshes[n.mesh].name,l.extras=n.extras||{},Z(l,a);for(u of n.children||it)Z(Jm(e,u),a);return i.delete(t),a}function Bh(e){let t,r;for(t of e.resources)if(t.attributes)for(r of Object.values(t.attributes))r.buffer.destroy();else t.pipelineCache.clear()}function Th(e,t){let r=[],o;try{for(o of t.nodes)r.push(Jm(e,o))}catch(i){throw Bh(e),i}return r}function Ph(e){let t=De.get(e);if(e.options.rotation){let[r,o=r,i=r]=e.options.rotation;t.rotation[0]=r,t.rotation[1]=o,t.rotation[2]=i}if(e.options.scale){let[r,o=r,i=r]=e.options.scale;t.scale[0]=r,t.scale[1]=o,t.scale[2]=i}}async function Ch(e){await le.get(e).promise;let t=new URL(Oe.get(e),document.baseURI).href,r=await fetch(t);if(!r.ok)throw new Error(`Unable to load model: HTTP ${r.status}`);let o=await r.arrayBuffer(),i=ih(o),n=new URL(".",t).href,a=await mh(e,i,n),s=ch(e,i,a),m=i.scenes?.[i.scene||0];if(!m)throw new Error("Missing glTF scene");let f=Th(s,m),p={...Pe(),id:t,extras:i.extras||{}};if(!f.length)throw new Error("Expected a glTF model with a non-empty scene");let c;for(c of f)Z(c,p);De.set(e,p),Ph(e),Z(De.get(e),L.get(e)),Zo(e,ae.get(e._map))}async function Sh(e){try{return L.set(e,Pe()),ee.set(e,{origin:[0,0,0],direction:[0,0,0],inverse:new DOMMatrix,meshes:[]}),(oe.get(e)||q.get(e))&&(Oa.set(e,L.get(e)),oe.get(e)&&R.set(e,await Dr(e))),e._map&&(await Wo(e,e._map),le.get(e).resolve()),Oe.get(e)&&await Ch(e),z.get(e)&&_(e),e.fire("ready"),e}catch(t){throw e.fire("error",{error:t}),t}}b();b();function Eh(e,t,r){let o=e.closest("label");if(r.classList.contains("layer-count"))e.hasAttribute("aria-label")||e.setAttribute("aria-label",o.textContent.trim()),r.id=`leaflet-layer-count-${h.Util.stamp(t)}`,e.setAttribute("aria-describedby",r.id),o.append(r);else if(r.classList.contains("traffic-status")){let i=o.nextElementSibling;i?.classList.contains("traffic-status-group")||(i=h.DomUtil.create("div","traffic-status-group"),i.style.cssText="display:flex;flex-wrap:wrap;gap:4px 8px;max-width:200px;margin:2px 0 6px 20px;",i.setAttribute("role","group"),i.setAttribute("aria-label","Traffic counts"),o.after(i)),i.append(r)}else o.after(r)}function kh(e,t,r){let o,i;for(o of e.getContainer().querySelectorAll(".leaflet-control-layers-selector"))if(i=e._layers[o.layerId],o.layerId===h.Util.stamp(t)||i instanceof h.LayerGroup&&i.hasLayer(t))return Eh(o,t,r),!0;return!1}function Ka(e){let t=kh(e.map,e.layer,e.element),r=e.onPlace;return r?.(t),t}var Ja=[];function _h(){let e=Ja.shift();e?.map.hasLayer(e.layer)&&Ka(e)}function Qa(){Ja.push(this),queueMicrotask(_h)}function Ih(){this.map.off("layeradd layerremove",Qa,this);let e=this.element.parentElement;this.element.remove(),e?.classList.contains("traffic-status-group")&&!e.childElementCount&&e.remove()}function $o(e,t,r){let o={map:e._map,layer:e,element:t,onPlace:r};return o.map.on("layeradd layerremove",Qa,o),e.once("remove",Ih,o),Ka(o)}function zh(e,t,r,o){return o?`Unable to load: ${typeof o=="string"?o:o.message}`:`${t} loaded ${Oe.get(e)?"models":"elements"} in the current area${r?`; ${r} blocks loading`:""}`}function Ah(e,t,r,o){let i=cr.get(e),n=Oe.get(e),a=De.get(e);n&&(t=a?1:0);let s=r||(n?!a:!R.get(e)&&!q.get(e)),m=t.toLocaleString("en-US"),f=o?"Error":`${m}${s?"\u2026":""}`,p=zh(e,m,r,o);i.textContent!==f&&(i.textContent=f),i.title!==p&&(i.title=p),o&&i.getAttribute("role")!=="alert"?i.setAttribute("role","alert"):!o&&i.hasAttribute("role")&&i.removeAttribute("role")}function Qm(e){let t=e.target,r=cr.get(t);if(!t._map)return;e.type==="add"&&$o(t,r);let o=0,i=0,n=e.error,a;if(Number.isFinite(e.loaded))o=e.loaded,i=e.pending??0,n||=e.errors?.[0];else for(a of V.get(t).values())o+=a.buildings??0,!a.done&&!a.error&&i++,n||=a.error;Ah(t,o,i,n)}function Lt(e,t=xo){ur.set(e,!0),h.Util.setOptions(e,{ariaLabel:"3D scene",...t}),I.set(e,"3d");let r=!q.get(e)&&/\.(glb|gltf)(?:[?#]|$)/i.test(e.options.url);if(Oe.set(e,r?e.options.url:null),oe.set(e,e.options.url&&!r&&!q.get(e)?new URL(e.options.url,document.baseURI).href:null),lr.set(e,new Map),e.options.center&&O.set(e,new h.LatLng(e.options.center[0],e.options.center[1])),V.set(e,new Map),We.set(e,0),oe.get(e)||q.get(e)||r){let o=h.DomUtil.create("small","layer-count");o.style.cssText="float:right;margin-left:12px;color:#555;font-variant-numeric:tabular-nums",cr.set(e,o),e.on("add error",Qm),e.on("ready progress",h.Util.throttle(Qm,250,e))}le.set(e,Promise.withResolvers()),re.set(e,Promise.resolve().then(Sh.bind(null,e))),re.get(e).catch(at)}b();var Oh=new Map;var Dh=new Map;function Rh(e,t){return e.tile.coords.z-t.tile.coords.z||e.distance-t.distance}var Oi=[null];var Rt=new WeakMap;var Ze=new WeakMap;var Gt=new WeakMap;X();var es={x:0,y:0};var Ee=new WeakMap;var ue=new WeakMap;var Bt=new WeakMap;var Di={size:[null,null],format:"r32float",usage:null};var ts={texture:null};var ef={bytesPerRow:null};var rs=[null,null];function Gh(e,t,r,o){let i,n,a;for(i=0;i<256;i++)for(n=0;n<256;n++)a=t[i*256+n],!(!Number.isFinite(a)||a<=-1e3)&&(e.elevations[r+i*o*256+n]=a,e.low=Math.min(e.low,a),e.high=Math.max(e.high,a))}function Uh(e,t){let r=t.max.x-t.min.x+1,o=t.max.y-t.min.y+1,n={elevations:new Float32Array(r*o*65536).fill(-1e9),low:1/0,high:-1/0},a,s,m,f,p,c;for([a,s]of e)m=a.split("/"),f=Number(m[0]),p=Number(m[1]),c=(p-t.min.y)*256*r*256+(f-t.min.x)*256,Gh(n,s,c,r);return n}function Fh(e,t){let r=v.get(e).device;if(ue.get(e)?.device===r)return ue.get(e);let o=Rt.get(e),i=o.max.x-o.min.x+1,n=o.max.y-o.min.y+1,{elevations:a,low:s,high:m}=Uh(Ye.get(e),o);return Ee.get(e)&&F(e,Ee.get(e).texture),Ee.set(e,{texture:r.createTexture((Di.size[0]=i*256,Di.size[1]=n*256,Di.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST,Di)),low:Number.isFinite(s)?s:Ze.get(e),high:Number.isFinite(m)?m:Ze.get(e)}),r.queue.writeTexture((ts.texture=Ee.get(e).texture,ts),a,(ef.bytesPerRow=i*1024,ef),(rs[0]=i*256,rs[1]=n*256,rs)),ts.texture=null,Bt.set(e,new Map),ue.set(e,Ke(e,{baseTexture:t,unlit:!0,terrain:Ee.get(e),alphaMode:"BLEND",depthWrite:!0,doubleSided:e.options.doubleSided})),ue.get(e)}var os={size:null,usage:null};function Nh(e){let t=(e+1)**2,r=new Float32Array(t*3),o=new Float32Array(t*3),i=new Float32Array(t*2),n=new Uint16Array(e*e*6),a,s,m,f,p,c,l=0,u=0;for(a=0;a<=e;a++)for(s=0;s<=e;s++)r[l*3]=s/e,r[l*3+2]=a/e,o[l*3+1]=1,i[l*2]=s/e,i[l*2+1]=a/e,l++,a<e&&s<e&&(m=a*(e+1)+s,f=m+1,p=m+e+1,c=p+1,n[u++]=m,n[u++]=p,n[u++]=f,n[u++]=f,n[u++]=p,n[u++]=c);return{position:{size:3,data:r},normal:{size:3,data:o},uv:{size:2,data:i},index:{data:n}}}function jh(e,t){let r=v.get(e).device,o=Bt.get(e).get(t);if(!o){o=Nh(t);let i,n;for([i,n]of Object.entries(o))n.size||=1,n.count=n.data.length/n.size,n.indexFormat="uint16",n.buffer=r.createBuffer((os.size=Math.max(4,n.data.byteLength),os.usage=i==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,os)),r.queue.writeBuffer(n.buffer,0,n.data);Bt.get(e).set(t,o)}return o}function Wh(e,t,r,o){let i=Ze.get(e),n=Math.min(Ee.get(e).low,i)-i,a=Math.max(Ee.get(e).high,i)-i;return{device:v.get(e).device,attributes:t,drawRange:{start:0,count:t.index.count},bounds:{min:[0,n,0],max:[1,a,1],center:[.5,(n+a)/2,.5],radius:Math.hypot(r,a-n,o)/2/Math.max(r,1,o)}}}async function Zh(e,t,r,o){if(!await Gt.get(e)||!e._map||ae.get(e._map)!==e||me.get(t)!==e||o.request.signal.aborted||!A.get(t).has(`${r.z}/${r.x}/${r.y}`)||A.get(e).has(o))return;let n=Math.max(1,Math.min(64,256/2**(r.z-de.get(e)))),a=e._map,s=a.options.crs,m=s.project(O.get(e)),f=Math.cos(O.get(e).lat*T),p=s.scale(r.z),c=2**(de.get(e)-r.z),l=es;l.x=r.x*256,l.y=r.y*256;let u=s.transformation.untransform(l,p);l.x=(r.x+1)*256,l.y=(r.y+1)*256;let d=s.transformation.untransform(l,p),y=v.get(e).device,g=o.texture,x=Fh(e,g),w=jh(e,n),C=Ze.get(e),B=(d.x-u.x)*f,P=-(d.y-u.y)*f,D=Wh(e,w,B,P),te={position:[(u.x-m.x)*f,0,-(u.y-m.y)*f],rotation:[0,0,0],scale:[B,1,P],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],visible:!0,device:y,geometry:D,program:x,texture:g,terrain:[r.x*256*c-Rt.get(e).min.x*256,r.y*256*c-Rt.get(e).min.y*256,256*c,C],tile:o,opacity:t.options.opacity??1,id:ut.value++,renderOrder:t.options.zIndex||0,fadeDuration:250,fadeStart:o.loadedAt,ground:!0,_rasterSource:t};o.mesh.visible=!1,Z(te,L.get(e)),_(e),A.get(e).set(o,te)}async function is(e,t,r){if(me.get(e)&&r.done&&!r.request.signal.aborted&&A.get(e).get(`${t.z}/${t.x}/${t.y}`)===r)try{await Zh(me.get(e),e,t,r)}catch(o){e.fire("tileerror",{tile:r,coords:t,error:o})}}var Tt=new WeakMap;X();var Ri={size:[null,null],format:"rgba8unorm",usage:null};var $h={addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",magFilter:"linear",minFilter:"linear"};var ns={size:null,usage:null};var Vh=[0,0,0,1,0,0,0,0,1,1,0,1];var qh=[0,1,0,0,1,0,0,1,0,0,1,0];var Hh=[0,0,1,0,0,1,1,1];var Yh=[0,2,1,1,2,3];function Xh(e){let t={position:{size:3,data:new Float32Array(Vh)},normal:{size:3,data:new Float32Array(qh)},uv:{size:2,data:new Float32Array(Hh)},index:{data:new Uint16Array(Yh)}},r,o;for([r,o]of Object.entries(t))o.count=o.data.length/(o.size||1),o.indexFormat="uint16",o.buffer=e.createBuffer((ns.size=o.data.byteLength,ns.usage=r==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,ns)),e.queue.writeBuffer(o.buffer,0,o.data);return{device:e,attributes:t,drawRange:{start:0,count:t.index.count}}}function Kh(e,t){let r=v.get(e).device,o={device:r,texture:r.createTexture((Ri.size[0]=t.image.width,Ri.size[1]=t.image.height,Ri.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT,Ri)),sampler:r.createSampler($h),image:t.image,format:"rgba8unorm",srgb:!1,uploaded:null},i=Pr,n=Qr,a=eo;i.source=t.image,i.flipY=!1,n.texture=o.texture,a[0]=t.image.width,a[1]=t.image.height,r.queue.copyExternalImageToTexture(i,n,a),i.source=null,n.texture=null,o.uploaded=t.image,ue.get(e)||ue.set(e,Ke(e,{baseTexture:o,unlit:!0,alphaMode:"BLEND",doubleSided:e.options.doubleSided})),Tt.get(e)||Tt.set(e,Xh(r));let{coords:s}=t,m=e._map.options.crs,f=m.project(O.get(e)),p=Math.cos(O.get(e).lat*T),c=m.scale(s.z),l=es;l.x=s.x*256,l.y=s.y*256;let u=m.transformation.untransform(l,c);l.x=(s.x+1)*256,l.y=(s.y+1)*256;let d=m.transformation.untransform(l,c),y=(d.x-u.x)*p,g=-(d.y-u.y)*p;t.texture=o,t.mesh={position:[(u.x-f.x)*p,0,-(u.y-f.y)*p],rotation:[0,0,0],scale:[y,1,g],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],visible:!0,device:r,geometry:Tt.get(e),program:ue.get(e),texture:o,opacity:e.options.opacity,id:ut.value++,renderOrder:e.options.zIndex||0,tile:t,fadeDuration:250,ground:!0,_rasterSource:e},Z(t.mesh,L.get(e))}async function Jh(e,t){try{await re.get(e);let r=await Rr(e.options.archive,t.coords.z,t.coords.x,t.coords.y,t.request.signal);if(t.request.signal.aborted){r?.image?.close();return}if(!r)throw new Error(`Tile ${t.coords.z}/${t.coords.x}/${t.coords.y} is not in the offline archive`);try{if(r.image)t.image=r.image;else{Oi[0]=r.data;let o=new Blob(Oi);Oi[0]=null,t.image=await createImageBitmap(o)}}catch{throw Oi[0]=null,new Error(`Unable to decode tile ${t.coords.z}/${t.coords.x}/${t.coords.y}`)}if(t.request.signal.aborted){t.image.close(),t.image=null;return}Kh(e,t),t.loadedAt=performance.now(),t.done=!0,Te.set(e,(Te.get(e)||0)+1),is(e,t.coords,t),e.fire("tileload",{tile:t,coords:t.coords}),_(e)}catch(r){if(t.request.signal.aborted)return;t.error=r.message,Te.set(e,(Te.get(e)||0)+1),e.fire("tileerror",{tile:t,coords:t.coords,error:r}),e.fire("error",{error:r,coords:t.coords})}finally{se.set(e,se.get(e)-1),e._map&&(as(e),mo(e),se.get(e)||e.fire("load"),_(e))}}function Qh(e,t){t.started=!0;let r=se.get(e)===0;return se.set(e,se.get(e)+1),e.fire("tileloadstart",{tile:t,coords:t.coords}),r&&e.fire("loading"),Jh(e,t)}function as(e){let t=e._map;if(!t)return;let r=t.project(t.getCenter(),0).divideBy(256),o=[],i,n;for(i of A.get(e).values())i.started||i.request.signal.aborted||({coords:n}=i,o.push({tile:i,distance:Math.hypot((n.x+.5)/2**n.z-r.x,(n.y+.5)/2**n.z-r.y)}));o.sort(Rh);for({tile:i}of o){if(se.get(e)>=4)break;Qh(e,i)}}function eg(e,t){let r=A.get(e),o,i,n;for([o,i]of r)!t.has(o)&&!i.done&&so(e,i);for([o,n]of t)r.has(o)||(i={coords:n,request:new AbortController,done:!1},r.set(o,i))}var gr=[0,0];var yr=[0,0];function tg(e,t,r){let o=e.getBounds(),i=e.project(o.getNorthWest(),r).divideBy(256).floor(),n=e.project(o.getSouthEast(),r).divideBy(256).floor();gr[0]=t.maxLat,gr[1]=t.minLon,yr[0]=t.minLat,yr[1]=t.maxLon;let a=t.maxLat===void 0||t.minLon===void 0?null:e.project(gr,r).divideBy(256).floor(),s=t.minLat===void 0||t.maxLon===void 0?null:e.project(yr,r).divideBy(256).floor(),m=e.project(e.getCenter(),r).divideBy(256).floor();return{minX:Math.max(0,i.x,a?.x??0,m.x-6),maxX:Math.min(2**r-1,n.x,s?.x??2**r-1,m.x+6),minY:Math.max(0,i.y,a?.y??0,m.y-6),maxY:Math.min(2**r-1,n.y,s?.y??2**r-1,m.y+6)}}function ms(e){let t=e._map;if(!t||!z.get(e)||!R.get(e))return;let r=Math.max(R.get(e).minZoom??0,Math.min(Math.round(t.getZoom()),e.options.maxZoom,e.options.maxNativeZoom));Qt.set(e,r);let o=tg(t,R.get(e),r),i=Oh;i.clear();let n,a,s,m,f;for(n=o.minX;n<=o.maxX;n++)for(a=o.minY;a<=o.maxY;a++)i.set(`${r}/${n}/${a}`,{z:r,x:n,y:a});Ht.set(e,new Set(i.keys()));let p=Dh;p.clear();let c=Math.max(R.get(e).minZoom??0,r-2),l=2**(r-c);if(c<r)for([s,m]of i)A.get(e).get(s)?.done||(f={z:c,x:Math.floor(m.x/l),y:Math.floor(m.y/l)},p.set(`${f.z}/${f.x}/${f.y}`,f));let u=new Map(p);for([s,m]of i)u.set(s,m);i.clear(),p.clear(),eg(e,u),as(e),mo(e)}function rg(e){let t=ms.bind(null,e);return{moveend:t,zoomend:t,rotate:t,pitch:t,resize:t}}async function og(e,t){let r=await Dr(t);return e.options.archive=t,R.set(e,r),e.options.maxNativeZoom===void 0&&(e.options.maxNativeZoom=r.maxZoom),e.options.maxZoom=Math.max(e.options.minZoom||0,e.options.maxZoom),e.fire("ready"),e}function ig(e,t){throw e.fire("error",{error:t}),t}function Vo(e,t){if(!A.get(e)||me.get(e)===t)return;let r;for(r of A.get(e).values())me.get(e)&&ao(me.get(e),r),r.mesh&&(r.mesh.visible=!0,Z(r.mesh,L.get(e)));if(me.set(e,t||null),t)for(r of A.get(e).values())r.done&&is(e,r.coords,r)}async function ng(e,t,r){try{await r,le.get(e).resolve(),Vo(e,ae.get(t))}catch(o){e.fire("error",{error:o})}}async function ag(e,t,r){try{await Promise.all([r,re.get(e)]),e._map===t&&t.hasLayer(e)&&ms(e)}catch(o){e.fire("error",{error:o})}}function sg(e,t){O.get(e)||O.set(e,t.getCenter());let r=Wo(e,t);ng(e,t,r),ag(e,t,r)}function mg(e){let t,r;for(t of A.get(e).values())so(e,t);if(ue.get(e)?.pipelineCache.clear(),ue.set(e,null),Tt.get(e)){for(r of Object.values(Tt.get(e).attributes))F(e,r.buffer);Tt.set(e,null)}}var xr=new WeakMap;var Wr=new WeakMap;var Pt=new WeakMap;var Zr=new WeakMap;var vr=new WeakMap;var wr=new WeakMap;var qo=new WeakMap;var fs=new WeakMap;var Ho=new WeakMap;var Mr=new WeakMap;var br=new WeakMap;var Ut=new WeakMap;var ps=new WeakMap;var cs={_3d:ur,_added:le,_areas:V,_bridgeMesh:Wr,_bridges:rt,_cameraZIndexOffset:Cr,_countStatus:cr,_cursor:dr,_dem:Ee,_directories:lr,_etag:zo,_fadeFrame:wr,_fadeVersion:qo,_frame:et,_geojson:q,_header:Pi,_inflight:We,_layers:G,_loadingTiles:se,_nativeGPU:xe,_pointerEvents:xr,_pruneAfter:zt,_pruneVersion:li,_pruneWanted:ui,_queued:jr,_rasterGeometry:Tt,_rasterProgram:ue,_rasterTiles:A,_rasterVersion:Te,_rendererReady:st,_roofRaster:Y,_roofRasters:mi,_sceneOrigin:ne,_shadowMeshes:_t,_shared:z,_size:Yt,_terrain3D:me,_terrainArchive:fs,_terrainBaseY:wt,_terrainBounds:Rt,_terrainController:Ho,_terrainGrids:Bt,_terrainLoading:Mr,_terrainOriginElevation:Ze,_terrainPromise:Gt,_terrainReady:ve,_terrainRequest:Tn,_terrainTiles:Ye,_terrainZoom:de,_tileZoom:Qt,_tooltip:Se,_type:Ut,_visibleMeshes:Tr,_wantedRasterTiles:Ht,_zoomLevel:jo,_zoomTransitions:ce,_zoomView:Ue,camera:J,container:Ce,control:Pt,eventMap:Zr,events:vr,group:Oa,header:R,highlightedFeature:Je,hoveredFeature:be,kind:I,location:O,model:De,modelUrl:Oe,raycaster:ee,ready:re,renderer:v,root:L,scene:Q,terrainSource:br,url:oe,walker:ps};b();var fg=["_layers","_sceneOrigin","_size","_zoomLevel","_zoomTransitions","_zoomView","_cursor","_roofRaster"];function Yo(e){be.set(e,null),Mt(e,null),bt(e,null),e.fire("featurehover",{feature:null})}var cg=["_layers","_sceneOrigin","_size","_zoomLevel","_cursor"];async function lg(e,t){try{await e.device.queue.onSubmittedWorkDone(),e.depthTexture?.destroy(),e.roofFallbackTexture?.texture?.destroy(),e.uniformBuffer?.destroy(),e.sunlight?.texture?.destroy(),e.sunlight?.buffer?.destroy(),e.sunlight?.lights?.destroy()}catch(r){t.fire("error",{error:r})}e.device.destroy()}function ug(e,t){if(Y.get(e)&&F(e,Y.get(e).texture.texture),Y.set(e,null),ce.get(e)){let i;for(i of ce.get(e).keys())i.play()}ce.set(e,null),Ue.set(e,null),ke.delete(t),t.getContainer().classList.remove("leaflet-camera-zoom");let r=v.get(e);r.canvas.remove(),lg(r,e),ie.delete(t);let o;for(o of cg)cs[o].delete(e)}function Xo(e,t){le.set(e,Promise.withResolvers()),Ce.get(e)&&(Yo(e),h.DomEvent.off(Ce.get(e),xr.get(e),e),Ce.set(e,null));let r,o,i,n;for(r of V.get(e).values())Fr(e,r);V.get(e).clear(),Se.get(e)?.remove(),Se.set(e,null),(oe.get(e)||q.get(e))&&Ra(e,!1);let a=z.get(e);if(a){if(Z(L.get(e),null),G.get(a).delete(e),a===e)if(t.off("move zoom rotate pitch resize viewreset layeradd layerremove",ki,e),t.off("zoomstart",_i,e),t.off("zoomanim",Ii,e),t.off("zoomend",zi,e),Bn(e),G.get(e).size){let s=G.get(e).values().next().value;for(o of fg)n=cs[o],n.set(s,n.get(e)),n.delete(e);for(i of G.get(s))z.set(i,s);ie.set(t,s),t.on("move zoom rotate pitch resize viewreset layeradd layerremove",ki,s),t.on("zoomstart",_i,s),t.on("zoomanim",Ii,s),t.on("zoomend",zi,s),_(s)}else ug(e,t);else _(a);z.set(e,null),v.set(e,null),Q.set(e,null),J.set(e,null)}}function dg(e,t){mg(e),me.set(e,null),Xo(e,t)}b();function ls(e,t){I.set(e,"raster"),t={ariaLabel:"PMTiles raster",maxZoom:18,opacity:1,zIndex:0,...t},h.Util.setOptions(e,t),L.set(e,Pe()),V.set(e,new Map),A.set(e,new Map),se.set(e,0),le.set(e,Promise.withResolvers()),oe.set(e,new URL(t.url,document.baseURI).href),lr.set(e,new Map),re.set(e,Promise.resolve(e.options.archive||e).then(og.bind(null,e)).catch(ig.bind(null,e)))}var hg=Object.freeze([]);function gg(e){I.get(e)==="raster"&&Vo(e,null)}function yg(e,t){Ho.get(e)?.abort(),Mr.set(e,!1),ve.set(e,!1),t.eachLayer(gg);let r,o,i,n;for(r of A.get(e).keys())ao(e,r);ae.get(t)===e&&ae.delete(t);for(o of Object.values(t._layers))Zo(o,null),Uo(o);t.fire("terrainchange"),Ye.get(e).clear(),Ze.set(e,0),Gt.set(e,null),ue.get(e)&&ue.get(e).pipelineCache.clear(),ue.set(e,null),Ee.get(e)&&F(e,Ee.get(e).texture),Ee.set(e,null);for(i of Bt.get(e)?.values()||hg)for(n of Object.values(i))F(e,n.buffer);Bt.set(e,null),rt.set(e,null),_e(e,Wr.get(e)),Wr.set(e,null),Xo(e,t)}async function xg(e){let{backend:t,archive:r,controller:o,tiles:i}=e,n,a;for(;e.next<i.length;){if(o.signal.throwIfAborted(),n=i[e.next++],a=await Rr(r,n.z,n.x,n.y,o.signal),!a||a.data.byteLength!==256*256*4)throw new Error(`Missing or invalid Float32 terrain tile ${n.z}/${n.x}/${n.y}`);Ye.get(t).set(`${n.x}/${n.y}`,new Float32Array(a.data))}}function vg(e){if(!e.ok)throw new Error(`Bridges: HTTP ${e.status}`);return e.json()}b();function wg(e,t){let r=e._map;de.set(e,t.maxZoom),gr[0]=t.maxLat,gr[1]=t.minLon;let o=r.project(gr,de.get(e)).divideBy(256).floor();yr[0]=t.minLat,yr[1]=t.maxLon;let i=r.project(yr,de.get(e)).divideBy(256).floor();Rt.set(e,new h.Bounds(o,i));let n=[],a=r.project(r.getCenter(),de.get(e)).divideBy(256),s,m;for(s=o.x;s<=i.x;s++)for(m=o.y;m<=i.y;m++)n.push({z:de.get(e),x:s,y:m,distance:Math.hypot(s+.5-a.x,m+.5-a.y)});return n.sort(Za),n}X();b();function Mg([e,t,r],o,i,n,a){let s=o.project(new h.LatLng(t,e));return[(s.x-i.x)*n,r-a,-(s.y-i.y)*n]}function bg(e,t){let r=[],o=0,i,n,a;for(i of e){for(n=[],a=0;a<i.length;a++)n.push({x:t[o+a][0],y:t[o+a][1]});r.push(n),o+=i.length}return r}function Lg(e,t,r){let o=[],i=1/0,n=1/0,a=-1/0,s=-1/0,m,f,p,c,l,u,d,y;for(m of r){f=[];for(p of m)f.push(t[p]);o.push(f)}for(c of t)i=Math.min(i,c[0]),n=Math.min(n,c[1]),a=Math.max(a,c[0]),s=Math.max(s,c[1]);let g={triangles:o,min:[i,n],max:[a,s]};for(l=Math.floor(g.min[0]/64);l<=Math.floor(g.max[0]/64);l++)for(u=Math.floor(g.min[1]/64);u<=Math.floor(g.max[1]/64);u++)d=`${l}/${u}`,y=rt.get(e).get(d),y||rt.get(e).set(d,y=[]),y.push(g)}function Bg(e,t,r){let{position:o,normal:i,color:n}=e,a,s,m,f,p,c,l,u,d;for([a,s,m]of r)for(f=t[a],p=t[s],c=t[m],(p[2]-f[2])*(c[0]-f[0])-(p[0]-f[0])*(c[2]-f[2])<0&&(l=s,s=m,m=l),u=0;u<6;u++)l=u===0||u===3?a:u===1||u===5?s:m,d=t[l],o.push(d[0],d[1]-(u>=3?1.2:0),d[2]),i.push(0,u>=3?-1:1,0),n.push(.6,.58,.54)}function Tg(e,t,r){let{position:o,normal:i,color:n}=e,a=Math.hypot(r[0]-t[0],r[2]-t[2])||1,s=(r[2]-t[2])/a,m=-(r[0]-t[0])/a,f,p;for(f=0;f<6;f++)p=f===0||f===3||f===5?t:r,o.push(p[0],p[1]-(f===2||f>=4?1.2:0),p[2]),i.push(s,0,m),n.push(.6,.58,.54)}function Pg(e,t,r){let o=0,i,n;for(i of r){for(n=0;n<i.length;n++)Tg(e,t[o+n],t[o+(n+1)%i.length]);o+=i.length}}function Cg(e,t){let{backend:r,map:o,zoom:i,crs:n,origin:a,metres:s,base:m}=e,f=[],p,c,l,u,d,y,g,x,w,C,B;for(p of t)c=p.slice(0,-1),c.length>=3&&f.push(c);if(!f.length)return;let P=[],D=[];for(p of f)for([l,u,d]of p)y=o.project([u,l],i),P.push([y.x,y.y,d]);for(p of f)for(g of p)D.push(Mg(g,n,a,s,m));try{x=bg(f,P),[w,...C]=x,B=yo(w,C)}catch{return}Lg(r,P,B),Bg(e,D,B),Pg(e,D,f)}function Sg(e,t){let r=e._map,o=r.options.crs,i=de.get(e),n=o.project(O.get(e)),a=Math.cos(O.get(e).lat*T),s=L.get(e).position[1],m=[],f=[],p=[];rt.set(e,new Map);let c={backend:e,map:r,crs:o,zoom:i,origin:n,metres:a,base:s,position:m,normal:f,color:p},l,u,d;for({geometry:l}of t.features)if(!(l.type!=="Polygon"&&l.type!=="MultiPolygon"))for(u=l.coordinates,d=0;d<(l.type==="Polygon"?1:u.length);d++)Cg(c,l.type==="Polygon"?u:u[d]);m.length&&Wr.set(e,er(e,{position:m,normal:f,color:p}))}function Eg(e,t,r){ve.set(e,!0),Ze.set(e,Kt(e,O.get(e))??0);let o;for(o of Object.values(t._layers))Uo(o),Zo(o,e);r&&Sg(e,r),t.fire("terrainchange"),_(e),e.fire("terrainready")}async function us(e){if(Mr.get(e)||!e._map)return;Mr.set(e,!0),ve.set(e,!1);let t=new AbortController;Ho.set(e,t);let r;try{if(!br.get(e))throw new Error("Terrain layer requires a PMTiles or COG elevation archive");let o=Wn({source:{type:e.options.asset!==void 0||/\.tiff?(?:[?#]|$)/i.test(br.get(e))?"cog":"pmtiles",url:br.get(e),archive:e.options.archive,asset:e.options.asset}});fs.set(e,o),await re.get(o);let i=R.get(o);if(i.tileType!==0||i.minZoom!==i.maxZoom)throw new Error("Expected a single-zoom Float32 terrain archive");let n=e._map,a=wg(e,i),s={backend:e,archive:o,controller:t,tiles:a,next:0},m=[];for(r=0;r<Math.min(4,a.length);r++)m.push(xg(s));await Promise.all(m);let f=e.options.bridges&&await fetch(e.options.bridges,{signal:t.signal}).then(vg);return t.signal.aborted||e._map!==n?void 0:(Eg(e,n,f),!0)}catch(o){return t.signal.aborted||e.fire("error",{error:o}),!1}finally{Mr.set(e,!1)}}b();function ds(e,t){let r=De.get(e);if(!L.get(e)||!J.get(e))return null;let o,i,n,a,s,m,f;for(o of Hn(e,t,L.get(e).children,!!r)){if(r){for(i=o.object;i&&i!==r;)i=i.parent;if(i===r)return{id:r.id,properties:r.extras,model:r,mesh:o.object,point:o.point}}if(n=o.object.extras?.featureFaces,!!n)for(a=0,s=n.length-1;a<=s;)if(m=a+s>>1,f=n[m],o.faceIndex<f.faceStart)s=m-1;else if(o.faceIndex>=f.faceEnd)a=m+1;else return{...f,mesh:o.object,point:o.point}}return null}function kg(e,t){if(t.buttons||e._map.dragging?.moving()||e._map._animatingZoom){be.get(e)&&Yo(e);return}be.set(e,ds(e,t)),Mt(e,be.get(e)),bt(e,be.get(e),t),e.fire("featurehover",{feature:be.get(e),originalEvent:t})}function _g(e){kg(this,e)}function Ig(e,t){let r=ds(e,t);be.set(e,r),Mt(e,r),bt(e,r,t),e.fire("featureclick",{feature:r,originalEvent:t})}function zg(e){Ig(this,e)}function Ag(){Yo(this)}async function Og(e,t){try{await Wo(e,t),le.get(e).resolve()}catch(r){e.fire("error",{error:r})}}function hs(e,t){if(!O.get(e)){let r=t.getCenter();O.set(e,new h.LatLng(r.lat,r.lng))}(oe.get(e)||q.get(e)||e.options.tooltip||Oe.get(e))&&(Ce.set(e,t.getContainer()),xr.get(e)||xr.set(e,{mousemove:_g,click:zg,mouseleave:Ag}),e.options.tooltip&&(Se.set(e,h.DomUtil.create("div","leaflet-3d-tooltip",Ce.get(e))),Se.get(e).hidden=!0,Se.get(e).setAttribute("role","tooltip"),Se.get(e).setAttribute("aria-live","polite"),Se.get(e).style.cssText="position:absolute;z-index:600;max-width:220px;padding:10px 12px;border:1px solid #6b5140;border-radius:6px;background:#fffaf0;box-shadow:0 3px 12px #0005;color:#30251d;font:13px/1.45 sans-serif;pointer-events:none"),h.DomEvent.on(Ce.get(e),xr.get(e),e)),L.get(e)&&Og(e,t)}function Dg(){us(this.backend).then(this.resolve,this.reject)}function Rg(e){I.get(e)==="raster"&&Vo(e,this)}function Gg(e,t){if(ae.get(t)&&ae.get(t)!==e)throw new Error("Only one terrain layer can be active per map");if(ae.set(t,e),hs(e,t),L.get(e))Gt.set(e,us(e));else{let r=Promise.withResolvers();Gt.set(e,r.promise),e.once("ready",Dg,{backend:e,...r})}t.eachLayer(Rg,e),t.fire("terrainchange")}function Ug(e,t){let r=t.url,o={...t};delete o.url,Lt(e,o),br.set(e,r),Ye.set(e,new Map),A.set(e,new Map),ve.set(e,!1),I.set(e,"terrain")}b();var Ko=new WeakMap;var Gi=new WeakMap;var Ui=new WeakMap;b();oa();X();H();W();function Fg(e,t,r,o,i){let[n,a,s]=e,m=-n*Math.sin(o)*Math.sin(r)-a*Math.cos(r)-s*Math.cos(o)*Math.sin(r);return m>0?(i||={},i.left=t.x/2+t.y*1.5*(n*Math.cos(o)-s*Math.sin(o))/m,i.top=t.y/2-t.y*1.5*(-n*Math.sin(o)*Math.cos(r)+a*Math.sin(r)-s*Math.cos(o)*Math.cos(r))/m,i):null}function tf(e,t,r,o,i,n,a){if(e.hidden=!0,!r||!t||t.altitude<=0)return;e.parentNode!==r&&r.append(e);let s=Fg(t.direction,o,i,n,a);if(!s)return;let{left:m,top:f}=s;e.hidden=m<0||m>o.x||f<0||f>r.clientHeight||r.style.display==="none",e.style.left=`${m}px`,e.style.top=`${f}px`}function Ft({map:e,originalSky:t,sunDisc:r,moonDisc:o,projection:i}){let n=tt.get(e),a=je.get(e);n?e.getContainer().style.setProperty("--leaflet-sky-background",n.background):t?e.getContainer().style.setProperty("--leaflet-sky-background",t):e.getContainer().style.removeProperty("--leaflet-sky-background");let s=e.getSize(),m=k(e)*T,f=S(e)*T;tf(r,n,a,s,m,f,i),tf(o,n?.moon,a,s,m,f,i)}var Ng=[[-18,[3,7,20],[17,28,54],[.025,.04,.09]],[-6,[37,53,84],[182,106,86],[.12,.1,.14]],[0,[101,131,171],[246,170,115],[.38,.24,.18]],[10,[74,147,208],[197,221,237],[.8,.75,.68]],[25,[53,144,213],[223,238,250],[1,1,1]]];var rf=[0,0,0];function gs(e,t,r,o){o||=[],o.length=e.length;let i;for(i=0;i<e.length;i++)o[i]=e[i]+(t[i]-e[i])*r;return o}function of(e){let t="",r;for(r=0;r<e.length;r++)r&&(t+=", "),t+=Math.round(e[r]);return`rgb(${t})`}function jg(e){if(!Number.isFinite(e))throw new Error("Invalid solar altitude");let t=Ng,r=-1,o;for(o=0;o<t.length;o++)if(t[o][0]>=e){r=o;break}let i=t[r<0?t.length-1:r],n=t[Math.max(0,r-1)],a=n===i||r<0?1:(e-n[0])/(i[0]-n[0]);return{background:`linear-gradient(${of(gs(n[1],i[1],a,rf))}, ${of(gs(n[2],i[2],a,rf))})`,tint:gs(n[3],i[3],a)}}function ys(e,t,r){let o=e instanceof Date?Date.prototype.getTime.call(e):typeof e=="string"?Date.parse(e):new Date(e).getTime();if(!Number.isFinite(o)||!Number.isFinite(t)||Math.abs(t)>90||!Number.isFinite(r)||Math.abs(r)>180)throw new Error("Invalid solar date or location");return o}X();function xs(e,t,r,o,i){let n=(280.16+360.9856235*e+r)*T-o,a=t*T,s=Math.asin(Math.sin(a)*Math.sin(i)+Math.cos(a)*Math.cos(i)*Math.cos(n)),f=(Math.atan2(Math.sin(n),Math.cos(n)*Math.sin(a)-Math.tan(i)*Math.cos(a))/T+180+360)%360;return{altitude:s/T,azimuth:f,direction:[Math.sin(f*T)*Math.cos(s),Math.sin(s),-Math.cos(f*T)*Math.cos(s)]}}X();X();var Fi=Math.sin(23.4397*T);X();var Ni=Math.cos(23.4397*T);function Wg(e,t,r){let o=ys(e,t,r)/864e5-10957.5,i=(134.963+13.064993*o)*T,n=(218.316+13.176396*o+6.289*Math.sin(i))*T,a=5.128*Math.sin((93.272+13.22935*o)*T)*T,s=Math.cos(a)*Math.cos(n),m=Math.cos(a)*Math.sin(n)*Ni-Math.sin(a)*Fi,f=Math.cos(a)*Math.sin(n)*Fi+Math.sin(a)*Ni;return xs(o,t,r,Math.atan2(m,s),Math.asin(f))}X();function Zg(e,t,r){let i=ys(e,t,r)/864e5-10957.5,n=(357.5291+.98560028*i)*T,a=n+(1.9148*Math.sin(n)+.02*Math.sin(2*n)+3e-4*Math.sin(3*n)+102.9372+180)*T,s=Math.asin(Math.sin(a)*Fi),m=Math.atan2(Math.sin(a)*Ni,Math.cos(a));return xs(i,t,r,m,s)}function $r(e){let t=ie.get(e);t&&_(t)}function Lr(e){let{control:t,map:r,date:o,slider:i,output:n,status:a}=e;try{t.live&&(t.time=new Date);let s=t.time.toISOString();o.value=s.slice(0,10),i.value=String(t.time.getUTCHours()*60+t.time.getUTCMinutes()),n.textContent=`${s.slice(11,16)} UTC${t.live?" \xB7 now":""}`;let m=r.getCenter(),f=Zg(t.time,m.lat,m.lng);tt.set(r,f),Object.assign(f,jg(f.altitude)),f.moon=Wg(t.time,m.lat,m.lng),a.textContent=f.altitude<=0?"Night \xB7 no direct sunlight":f.altitude<3?"Low sun \xB7 shadows paused":`Sun altitude ${f.altitude.toFixed(1)}\xB0`,r.fire("simulationtimechange",{time:new Date(t.time),live:t.live}),Ft(e),$r(r)}catch(s){tt.delete(r),Ft(e),$r(r),a.textContent=`Error: ${s.message}`,console.error("Solar simulation",s)}}function $g(e){e.control.live=!0,Lr(e)}function Vg(e){let{control:t,map:r,date:o,slider:i,status:n}=e;if(t.live=!1,!o.value||!o.validity.valid){t.time=new Date(NaN),r.fire("simulationtimechange",{time:null,live:!1}),tt.delete(r),Ft(e),$r(r),n.textContent="Error: choose a valid solar date";return}t.time=new Date(`${o.value}T00:00:00Z`),t.time.setUTCMinutes(Number(i.value)),Lr(e)}function qg(e){let t="position:absolute;width:18px;height:18px;border-radius:50%;transform:translate(-50%,-50%);pointer-events:none;",r=h.DomUtil.create("div","sunlight-sun"),o=h.DomUtil.create("div","sunlight-moon");r.style.cssText=t+"background:#fff3bd;box-shadow:0 0 18px 7px #ffd27699;",o.style.cssText=t+"background:#dce5f2;box-shadow:0 0 10px 2px #cbdcff55;",r.setAttribute("role","img"),r.setAttribute("aria-label","Sun"),o.setAttribute("role","img"),o.setAttribute("aria-label","Moon");let i=h.DomUtil.create("div","sunlight-control");i.style.cssText="color:#222;width:min(200px,calc(100vw - 60px));font:12px/1.4 sans-serif;";let n=document.createElement("input");n.type="date",n.style.cssText="width:100%;box-sizing:border-box;",n.setAttribute("aria-label","Solar date (UTC)");let a=document.createElement("input");a.type="range",a.style.cssText="width:100%;box-sizing:border-box;margin:10px 0 4px;cursor:pointer;",a.min="0",a.max="1439",a.step="1",a.setAttribute("aria-label","Time of day (UTC)");let s=document.createElement("output");s.style.cssText="font-weight:bold;font-variant-numeric:tabular-nums;",s.setAttribute("aria-live","off");let m=document.createElement("button");m.type="button",m.textContent="Now";let f=document.createElement("div");f.className="sunlight-time",f.style.cssText="display:flex;justify-content:space-between;align-items:center;",f.append(s,m);let p=document.createElement("div");p.className="sunlight-status",p.style.marginTop="5px",p.setAttribute("role","status");let c=document.createElement("small");c.style.color="#555",c.textContent="Indicative \xB7 loaded geometry only. Streetlight illumination is estimated, not measured lux.",i.append(n,a,f,p,c);let l={control:null,map:e,originalSky:"",container:i,sunDisc:r,moonDisc:o,date:n,slider:a,output:s,status:p,projection:{left:0,top:0}};return l.update=Lr.bind(null,l),l.updateSky=Ft.bind(null,l),m.onclick=$g.bind(null,l),n.onchange=a.oninput=Vg.bind(null,l),h.DomEvent.disableClickPropagation(i),h.DomEvent.disableScrollPropagation(i),l}function Hg(e){e.control.live&&Lr(e)}function Yg(e,t){let r=Ui.get(t);if(r?.control&&r.control!==e)throw e._map=null,e.layer._map===t&&t.removeLayer(e.layer),new Error("Only one Time control can be active per map");return r||(r=qg(t),Ui.set(t,r)),r.control=e,r.originalSky=t.getContainer().style.getPropertyValue("--leaflet-sky-background"),Ko.set(t,e),Gi.set(e,r),r.update(),r.timer=setInterval(Hg,6e4,r),t.on("moveend",r.update),t.on("move rotate pitch resize",r.updateSky),r.container}b();function Xg(e){return Pt.get(this).addTo(e)}b();function Kg(){return h.Control.prototype.remove.call(Pt.get(this))}function Jg(e){h.Util.setOptions(this,e),this.live=!0,this.layer=new h.Layer,Pt.set(this.layer,this),I.set(this.layer,"time")}function Qg(e){return Yg(this,e)}b();function nf(e,t){e.classList.toggle("leaflet-control",!t),e.classList.toggle("leaflet-bar",!t),e.style.background=t?"":"#fff",e.style.padding=t?"2px 0 6px 20px":"8px",e.style.margin=t?"0":""}function ey(e){h.Control.prototype.addTo.call(this,e);let t=this.getContainer();return this.layer._map===e?$o(this.layer,t,nf.bind(null,t)):nf(t,!1),this}b();function ty(){return this._map?.hasLayer(this.layer)?(this._map.removeLayer(this.layer),this):h.Control.prototype.remove.call(this)}function ry(e){let{map:t,timer:r,sunDisc:o,moonDisc:i}=e,n=Ui.get(t);clearInterval(r),Ko.delete(t),t.fire("simulationtimechange",{time:null,live:!1}),t.off("moveend",e.update),t.off("move rotate pitch resize",e.updateSky),tt.delete(t),Ft(e),o.remove(),i.remove(),$r(t),n===e&&(n.control=null)}function oy(){let e=Gi.get(this);e&&(ry(e),Gi.delete(this))}h.Control.Time=h.Control.extend({options:{position:"bottomright"},initialize:Jg,onAdd:Qg,onRemove:oy,addTo:ey,remove:ty});b();var vs=Object.freeze({});var Nt=[[.86,.86,.88],[.1,.1,.12],[.5,.53,.57],[.65,.1,.08],[.12,.25,.55],[.85,.7,.15]];var jt=[.08,.07,.06];var mt=[.85,.64,.5];var Wt=[.16,.2,.32];function E(e,t,r,o){return[[e,r],[t,r],[t,o],[e,o]]}function iy(e){let t=Nt[e%Nt.length];return[[E(-.045,.045,-.85,-.25),.02,.62,jt],[E(-.045,.045,.25,.85),.02,.62,jt],[E(-.06,.06,-.5,.5),.4,.65,t],[E(-.32,.32,-.58,-.5),.95,1.02,jt],[E(-.1,.1,.15,.4),.85,.92,jt],[E(-.18,.18,-.12,.28),1,1.5,t],[E(-.11,.11,-.22,0),1.5,1.72,mt],[E(-.13,.13,-.23,.01),1.72,1.8,t],[E(-.25,-.15,-.5,-.05),1,1.25,mt],[E(.15,.25,-.5,-.05),1,1.25,mt],[E(-.2,-.08,0,.32),.3,1,Wt],[E(.08,.2,-.25,.07),.3,1,Wt]]}var af=[.75,.2,.15];var ws={body:[[E(-.17,.17,-.1,.1),.82,.95,Wt],[E(-.19,.19,-.11,.11),.95,1.44,af],[E(-.05,.05,-.05,.05),1.44,1.5,mt],[E(-.1,.1,-.11,.1),1.5,1.72,mt],[E(-.105,.105,-.06,.115),1.58,1.77,jt],[E(-.105,.105,-.115,-.06),1.7,1.77,jt]],leg:[[E(-.07,.07,-.07,.07),-.82,0,Wt],[E(-.07,.07,-.17,.07),-.9,-.82,jt]],arm:[[E(-.05,.05,-.05,.05),-.55,0,af],[E(-.045,.045,-.045,.045),-.66,-.55,mt]]};function ny(e){let t=ws.body.slice();return t[1]=[t[1][0],t[1][1],t[1][2],Nt[e%Nt.length]],t.push([E(-.16,-.02,-.07,.07),.08,.9,Wt],[E(.02,.16,-.07,.07),.08,.9,Wt],[E(-.3,-.2,-.05,.05),.76,1.42,mt],[E(.2,.3,-.05,.05),.76,1.42,mt]),t}function Jo(e){let t=e?.route_color;if(!/^[\da-f]{6}$/i.test(t))return[.1,.55,.65];let r=Number.parseInt(t,16);return[(r>>16&255)/255,(r>>8&255)/255,(r&255)/255]}var Vr=[.12,.15,.18];var Ct=[.92,.93,.92];var Qo=[.05,.05,.05];var Ms=[1.9,1.85,1.7];var bs=[1.7,.06,.05];function ei(e,t,r){let o=e-t/2,i=e+t/2;return[[E(-1.25,1.25,o,i),.45,1.25,r],[E(-1.2,1.2,o+.15,i-.15),1.25,2.65,Vr],[E(-1.25,1.25,o,i),2.65,3.1,Ct],[E(-1.15,-.85,o+1,o+2),0,.7,Qo],[E(.85,1.15,i-2,i-1),0,.7,Qo],[E(-.9,.9,o-.03,o),.8,1.05,Ms],[E(-.9,.9,i,i+.03),.8,1.05,bs]]}function ay(e,t){return ei(0,12,Jo(t))}function sy(e,t){let r=Jo(t),o=[],i;for(i=0;i<5;i++)o.push(...ei((i-2)*6.5,6,r));return o}function my(e,t){let r=Jo(t),o=[],i;for(i=0;i<5;i++)o.push(...ei((i-2)*15,14,r));return o}function Zt(e,t,r,o,...i){return[[E(e,t,r,o),...i],[E(-t,-e,r,o),...i]]}function fy(e){let t=Nt[e%Nt.length];return[...Zt(.7,.92,-1.68,-1.02,0,.64,Qo),...Zt(.7,.92,1.02,1.68,0,.64,Qo),[[[-.9,-1.95],[-.72,-2.25],[.72,-2.25],[.9,-1.95],[.9,2.05],[.76,2.25],[-.76,2.25],[-.9,2.05]],.28,.82,t],[E(-.84,.84,-.75,1.6),.82,1.38,Vr,E(-.7,.7,-.05,1.3)],[E(-.71,.71,-.06,1.31),1.38,1.46,t],...Zt(.38,.8,-2.3,-2.16,.56,.76,Ms),[E(-.78,.78,2.16,2.3),.6,.76,bs]]}var sf=[[-5.5,30],[5.5,30],[5.5,-20],[4,-26],[1.5,-30],[-1.5,-30],[-4,-26],[-5.5,-20]];function py(){let e=[],t;for(t=0;t<12;t++)e.push(...Zt(.5,3.8,-12+t*3,-11.3+t*3,3.9,4.4,[.62,.1,.1]));return e}function cy(){return[[sf,0,.8,[.1,.16,.26]],[sf,.8,1.4,Ct],[E(-5,5,-18,26),1.4,3.7,Vr,E(-4.6,4.6,-17.4,25.6)],...Zt(4.64,4.74,-17,25,3.25,3.45,[1.6,1.25,.8]),[E(-4.8,4.8,-17.8,25.8),3.7,3.9,Ct],...py(),...Zt(4.65,4.8,-13.6,25.8,3.9,4.8,Ct),[E(-4.8,4.8,25.65,25.8),3.9,4.8,Ct],[E(-2.2,2.2,-17.6,-14),3.9,4.7,Ct],[E(-2.2,2.2,-17.6,-14),4.7,5.5,Vr],[E(-2.5,2.5,-18,-13.6),5.5,5.7,Ct],[E(-2.45,-2.2,-16.2,-15.8),5,5.3,[2,.15,.1]],[E(2.2,2.45,-16.2,-15.8),5,5.3,[.1,2,.4]],[E(-.1,.1,-15.9,-15.7),5.7,6.6,Ct],[E(-.15,.15,-15.95,-15.65),6.6,6.8,[2,2,1.9]]]}var ly={bicycle:{side:.4,model:iy},pedestrian:{side:.3,model:ny},bus:{side:1.5,model:ay},tram:{side:0,model:sy},metro:{side:0,model:my},car:{side:1.8,model:fy,lights:[{position:[0,1.2,-6],radius:10,color:[1,.94,.82],flux:800}]},boat:{side:0,model:cy,lights:[{position:[0,8,4],radius:30,color:[1,.8,.55],flux:2e4}]}};var uy=" struct Params{seconds:f32,side:f32,vertices:u32,total:u32}struct Vehicle{start:u32,count:u32,base:f32,speed:f32}@group(0)@binding(0)var<uniform> params:Params;@group(0)@binding(1)var<storage,read> model:array<f32>;@group(0)@binding(2)var<storage,read> points:array<vec4f>;@group(0)@binding(3)var<storage,read> vehicles:array<Vehicle>;@group(0)@binding(4)var<storage,read_write> position:array<f32>;@group(0)@binding(5)var<storage,read_write> normal:array<f32>;var<workgroup> center:vec3f;var<workgroup> heading:vec2f;@compute@workgroup_size(64)fn main(@builtin(workgroup_id)group:vec3u,@builtin(local_invocation_index)thread:u32){let vehicleIndex = group.x;if(thread == 0u){let vehicle = vehicles[vehicleIndex];let last = vehicle.start + vehicle.count - 1u;let length = points[last].w;var s = vehicle.base + params.seconds * vehicle.speed;s -= length * floor(s / length);var i = vehicle.start + 1u;var end = last;while(i < end){let middle = i +(end - i)/ 2u;if(points[middle].w < s){i = middle + 1u;}else{end = middle;}}let a = points[i - 1u];let b = points[i];let d = select(b.w - a.w,1.0,b.w == a.w);let t =(s - a.w)/ d;heading =(b.xy - a.xy)/ d;center = vec3f(a.x +(b.x - a.x)* t - heading.y * params.side,a.z +(b.z - a.z)* t,a.y +(b.y - a.y)* t + heading.x * params.side);}workgroupBarrier();for(var vertex = thread;vertex < params.vertices;vertex += 64u){let k = vertex * 3u;let n = params.vertices * 3u + k;let o =(vehicleIndex * params.vertices + vertex)* 3u;position[o]= center.x - model[k]* heading.y - model[k + 2u]* heading.x;position[o + 1u]= center.y + model[k + 1u];position[o + 2u]= center.z + model[k]* heading.x - model[k + 2u]* heading.y;normal[o]= -model[n]* heading.y - model[n + 2u]* heading.x;normal[o + 1u]= model[n + 1u];normal[o + 2u]= model[n]* heading.x - model[n + 2u]* heading.y;}}";function ji(e,t,r,o,i,n,a){let s=i[0]-o[0],m=i[1]-o[1],f=i[2]-o[2],p=n[0]-o[0],c=n[1]-o[1],l=n[2]-o[2],u=m*l-f*c,d=f*p-s*l,y=s*c-m*p,g=Math.hypot(u,d,y),x,w;for(x=0;x<3;x++)w=x===0?o:x===1?i:n,e.push(...w),t.push(u/g,d/g,y/g),r.push(...a)}function ti(e){let t=[],r=[],o=[],i=[],n=[],a,s,m,f,p,c,l,u,d;for([a,s,m,f,p=a]of e){i.length=n.length=0;for([c,l]of a)i.push([c,s,l]);for([c,l]of p)n.push([c,m,l]);for(u=0;u<a.length;u++)d=(u+1)%a.length,ji(t,r,o,i[u],i[d],n[d],f),ji(t,r,o,i[u],n[d],n[u],f);for(u=1;u<a.length-1;u++)ji(t,r,o,n[0],n[u],n[u+1],f),ji(t,r,o,i[0],i[u+1],i[u],f)}return{position:t,normal:r,color:o}}function dy({properties:e}){let t=document.createElement("div");t.style.whiteSpace="pre-line";let r=e.name?String(e.name):"";return e.departure&&(r+=`${r?`
|
|
3
3
|
`:""}Departure ${e.departure} ${e.timetable.timeZone}`),e.description&&(r+=`${r?`
|
|
4
|
-
`:""}${e.description}`),t.textContent=r,t}function Ms(e){e.layer._map.off("simulationtimechange layerremove",e.update).on("simulationtimechange layerremove",e.update),e.layer._map.off("terrainchange",e.terrain).on("terrainchange",e.terrain),Zo(e.layer,e.status),e.update()}function py(e){dt.set(e.layer,e),e.ready&&Ms(e)}function $t(e,t){t&&(Je.get(e.layer)?.mesh===t&&(Mt(e.layer,null),be.set(e.layer,null),bt(e.layer,null)),_e(e.layer,t))}function bs(e){e.gpu?.params?.destroy(),e.gpu?.template?.destroy(),e.gpu?.points?.destroy(),e.gpu?.vehicles?.destroy(),e.gpu=null}function cy(e){e.request?.abort(),cancelAnimationFrame(e.frame),e.frame=void 0,e.layer._map.off("simulationtimechange layerremove",e.update).off("terrainchange",e.terrain),$t(e,e.mesh),$t(e,e.route),e.mesh=e.route=null,dt.delete(e.layer),bs(e),e.lanes.length=0,e.trips.length=0,e.tripsKey=e.loaded=null}function ly(e){e.ready=!0,e.layer._map&&Ms(e)}function Ls(e){let t=Xo.get(e.layer._map),r=t?t.live:!0;return{live:r,time:r?new Date:t.time}}function uy(e,t,r=8){let o=Math.round(e*t/3600/r),i=Array.from({length:o}),n;for(n=0;n<i.length;n++)i[n]=(n+.5)*e/o;return i}var ti=new Map;function sf(e){let t=e.split(":");return Number(t[0])*60+Number(t[1])}function dy(e,t){return e-t}function hy(e,{timeZone:t,duration:r,services:o}){let i=e instanceof Date?e:new Date(e);if(!Number.isFinite(i.getTime()))throw new Error("Invalid date");let n=ti.get(t);n||(n=new Intl.DateTimeFormat("en-GB",{timeZone:t,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hourCycle:"h23"}),ti.size>=32&&ti.delete(ti.keys().next().value),ti.set(t,n));let a={},s,m,f,p,c,l,u;for(s of n.formatToParts(i))s.type!=="literal"&&(a[s.type]=Number(s.value));let d=a.hour*60+a.minute+(a.second+i.getUTCMilliseconds()/1e3)/60,y=((Math.floor(Date.UTC(a.year,a.month-1,a.day)/864e5)+4)%7+7)%7,g=[];for({from:m,to:f,every:p=1/0,months:c,weekdays:l}of o)if(!(c?.includes(a.month)===!1||l?.includes(y)===!1))for(u=sf(m);u<=sf(f);u+=p)g.push(u);g.sort(dy);let x=[];for(u of g)d>=u&&d<u+r&&x.push({id:`${a.year}-${a.month}-${a.day}-${u}`,departure:`${String(Math.floor(u/60)).padStart(2,"0")}:${String(u%60).padStart(2,"0")}`,progress:(d-u)/r});return x}function gy(e,t,r){let o=[],i,n,a,s,m,f,p,c;for(i=0;i<t.length;i++)if(n=t[i],{timetable:a,flow:s=0}=n.properties,!!n.length)if(a)for(m of hy(e,a))o.push({id:`${i}-${m.id}`,lane:n,distance:m.progress*n.length,speed:n.length/(a.duration*60),properties:{...n.properties,departure:m.departure}});else for(f=e/1e3*r,p=n.offsets||=uy(n.length,s,r),c=0;c<p.length;c++)o.push({id:`${i}-${c}`,lane:n,distance:(p[c]+f)%n.length,speed:r,properties:n.properties});return o}function Bs(e,t){e.error=t,e.status.textContent=`${e.vehicle}: Error: ${t.message}`,e.status.setAttribute("role","alert"),console.error("Traffic layer",t)}var yy=Object.freeze({unlit:!0});function xy(e,t,r,o,i,n,a,s,m,f,p,c,l,u){let d=o[0]+n*f,y=o[1]+a*f,g=o[2]+(i[2]-o[2])*f+.4,x=o[0]+n*p,v=o[1]+a*p,P=o[2]+(i[2]-o[2])*p+.4,B;for(B=0;B<6;B++)B===0||B===3?e.push(d-s,g,y-m):B===1?e.push(d+s,g,y+m):B===5?e.push(x-s,P,v-m):e.push(x+s,P,v+m),t.push(0,1,0),r.push(c,l,u)}function vy(e,t,r,o,i,n,a,s,m){let f=o[n-1],p=o[n],c=p[0]-f[0],l=p[1]-f[1],u=i[n]-i[n-1];if(!u)return;let d=-l/u*2.5,y=c/u*2.5,g,x,v;for(g=Math.floor(i[n-1]/30)*30;g<i[n];g+=30)x=Math.max(0,(g-i[n-1])/u),v=Math.min(1,(g+18-i[n-1])/u),!(v<=x)&&xy(e,t,r,f,p,c,l,d,y,x,v,a,s,m)}function wy(e){let t=[],r=[],o=[],i,n,a,s,m,f,p,c,l;for({points:i,lengths:n,properties:a}of e)for(s=a?.route_color,m=/^[\da-f]{6}$/i.test(s)?Number.parseInt(s,16):null,f=m===null?.08:(m>>16&255)/255,p=m===null?.7:(m>>8&255)/255,c=m===null?.85:(m&255)/255,l=1;l<i.length;l++)vy(t,r,o,i,n,l,f,p,c);return{position:t,normal:r,color:o}}function Ts(e,t,r,o,i=0){let n=er(e.layer,t,o,i);return n.extras.featureFaces=r,n}function My(e){e.route=Ts(e,wy(e.lanes),[],yy)}function Ps(e){let t=20,r=5,o,i,n,a,s;for(o=0;o<e.template.position.length;o+=3)t=Math.max(t,Math.hypot(e.template.position[o],e.template.position[o+2])+Math.abs(e.side)),r=Math.max(r,e.template.position[o+1]);let m=[];for(i of e.lanes)for([n,a,s]of i.points)m.push(n-t,s,a-t,n+t,s+r,a+t);let f={attributes:{position:{data:m}}};Be(f),e.mesh.geometry.bounds=f.bounds}function by(e){let{trips:t,model:r,vertices:o}=e;if($t(e,e.mesh),e.mesh=null,!t.length)return;let i=[],n=[],a,s,m;for(a=0;a<t.length;a++){s=t[a];for(m of ei(r(a,s.properties)).color)i.push(m);n.push({id:s.id,properties:s.properties,faceStart:a*o/3,faceEnd:(a+1)*o/3,vertexStart:a*o,vertexEnd:(a+1)*o})}let f=i.length/3;e.mesh=Ts(e,{position:new Array(i.length).fill(0),normal:new Array(i.length).fill(0),color:i},n,ys,GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC),e.mesh.geometry.drawRange.count=f,e.mesh.extras.dynamicLights=!0,Ps(e)}function Ui(e,t){let r=e.createBuffer({size:Math.max(16,t.byteLength),usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});return e.queue.writeBuffer(r,0,t),r}function Ly(e,t){let r,o,i,n=0;for(r of e.lanes)n+=r.points.length;let a=new Float32Array(n*4),s=0;for(r of e.lanes)for(r.start=s/4,o=0;o<r.points.length;o++)i=r.points[o],a[s++]=i[0],a[s++]=i[1],a[s++]=i[2],a[s++]=r.lengths[o];e.gpu.points?.destroy(),e.gpu.points=Ui(t,a),e.lanesDirty=!1}function By(e){let{device:t}=w.get(e.layer);if(e.gpu?.device!==t){bs(e);let c=new Float32Array(e.template.position.length+e.template.normal.length);c.set(e.template.position),c.set(e.template.normal,e.template.position.length),e.gpu={device:t,pipeline:t.createComputePipeline({layout:"auto",compute:{module:t.createShaderModule({code:e.shader}),entryPoint:"main"}}),params:t.createBuffer({size:16,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),template:Ui(t,c)},e.lanesDirty=!0}let r,o,i;e.lanesDirty&&Ly(e,t);let n=new Float32Array(e.trips.length*4),a=new Uint32Array(n.buffer);for(r=0;r<e.trips.length;r++)o=e.trips[r],a[r*4]=o.lane.start,a[r*4+1]=o.lane.points.length,n[r*4+2]=o.distance,n[r*4+3]=o.speed,e.mesh.extras.featureFaces[r].properties=o.properties;e.gpu.vehicles?.size>=n.byteLength?t.queue.writeBuffer(e.gpu.vehicles,0,n):(e.gpu.vehicles?.destroy(),e.gpu.vehicles=Ui(t,n));let{position:s,normal:m}=e.mesh.geometry.attributes,f=[],p;for(i=0;i<6;i++)p=i===0?e.gpu.params:i===1?e.gpu.template:i===2?e.gpu.points:i===3?e.gpu.vehicles:i===4?s.buffer:m.buffer,f.push({binding:i,resource:{buffer:p}});e.gpu.bindGroup=t.createBindGroup({layout:e.gpu.pipeline.getBindGroupLayout(0),entries:f})}function Ty(e,t){return t?e.loaded?`${e.trips.length} ${e.vehicle==="boat"?"boats":e.vehicle}`:`${e.vehicle}: loading\u2026`:`${e.vehicle}: select a valid simulation date`}function Py(e,t,r,o){let i;try{o?e.trips=gy(t,e.lanes,e.velocity):e.trips.length=0,i=Ty(e,o)}catch(f){Bs(e,f);return}e.rebasedAt=r,e.nextCheck=r+1e3;let n="",a;for(a of e.trips)n+=`${n?",":""}${a.id}`;let s=e.outline&&!e.route&&e.lanes.length,m=n!==e.tripsKey||!!s;return s&&My(e),n!==e.tripsKey&&(by(e),e.tripsKey=n),e.mesh&&By(e),e.error||(e.status.textContent!==i&&(e.status.textContent=i),e.status.removeAttribute("role")),m}function Cy(e,t){let{device:r}=e.gpu;e.paramFloats[0]=e.elapsed=t,e.paramFloats[1]=e.side,e.paramInts[2]=e.vertices,e.paramInts[3]=e.trips.length*e.vertices,r.queue.writeBuffer(e.gpu.params,0,e.params);let o=r.createCommandEncoder(),i=o.beginComputePass();i.setPipeline(e.gpu.pipeline),i.setBindGroup(0,e.gpu.bindGroup),i.dispatchWorkgroups(e.trips.length),i.end(),r.queue.submit([o.finish()]),e.stale=!0}function Sy(e){e.litAt=performance.now();let t=[],r=e.position||={},o,i,n,a,s,m,f,p,c,l;for(o of e.trips){({x:i,y:n,z:a,dx:s,dz:m}=yo(e,o,r));for(l of e.lights)[f,p,c]=l.position,t.push({...l,position:[i-f*m-c*s,n+p,a+f*s-c*m]})}e.mesh.extras.lights=t}function Ey(e,t,r){e.mesh&&(Cy(e,(t-e.rebasedAt)/1e3),e.lights&&(!r||!(performance.now()-e.litAt<100))&&Sy(e))}function ky(e){if(e.frame=void 0,!e.ready||!e.layer._map)return;if(!w.get(e.layer)){e.frame=requestAnimationFrame(e.tick);return}e.mesh&&!(e.mesh.geometry.attributes.position.buffer.usage&GPUBufferUsage.STORAGE)&&(e.tripsKey=null,e.nextCheck=-1/0);let{live:t,time:r}=Ls(e),o=r?.getTime(),i=Number.isFinite(o),n=!1;(!t||!i||!(o>=e.rebasedAt&&o<e.nextCheck))&&(n=Py(e,r,o,i),n===void 0)||(Ey(e,o,t),(e.mesh||n)&&_(e.layer),t&&i&&(e.frame=requestAnimationFrame(e.tick)))}async function _y(e,t,r){let o=new URL(e.url,document.baseURI).href;if(/\.m?js(?:[?#]|$)/i.test(e.url))return(await import(o)).default(t,e.layer,r);if(!e.file){let i=await fetch(o,{signal:r});if(!i.ok)throw new Error(`HTTP ${i.status}`);e.file=await i.json()}return e.file}var Iy=Object.freeze([]);function zy({features:e=Iy}){let t=[],r,o,i,n,a,s,m,f;for({geometry:r,properties:o}of e)if(!(r?.type!=="LineString"&&r?.type!=="MultiLineString"))for(i=r.type==="MultiLineString"?r.coordinates:null,f=0;f<(i?i.length:1);f++){n=i?i[f]:r.coordinates,a=[];for([s,m]of n)a.push([m,s]);t.push({latlngs:a,properties:o??{},elevation:o?.elevation})}return t}X();b();function Ay(e){let t=ae.get(e);return ve.get(t)&&t}function Cs(e){let{layer:t,lanes:r}=e,o=Ay(t._map),i=L.get(t).position[1],n,a,s;for(n of r)for(a=0;a<n.points.length;a++)s=o&&(n.elevation??ct(t._map,n.latlngs[a])),n.points[a][2]=Number.isFinite(s)&&Number.isFinite(i)?s-i:0;e.lanesDirty=!0,e.nextCheck=-1/0}function Oy(e){let{layer:t,lanes:r}=e,o=t._map.options.crs,i=o.project(D.get(t)),n=Math.cos(D.get(t).lat*C),a,s,m,f,p;for(a of r){a.points=[];for([s,m]of a.latlngs)f=o.project(new h.LatLng(s,m)),a.points.push([(f.x-i.x)*n,-(f.y-i.y)*n,0]);for(a.lengths=[0],p=1;p<a.points.length;p++)a.lengths.push(a.lengths[p-1]+Math.hypot(a.points[p][0]-a.points[p-1][0],a.points[p][1]-a.points[p-1][1]));a.length=a.lengths.at(-1)}Cs(e),$t(e,e.route),e.route=null,e.tripsKey=null}function Dy(e,t,r){if(!(t.aborted||!e.layer._map)){if(e.error=null,r===e.loaded){e.nextCheck=-1/0,e.frame||e.tick();return}e.loaded=r,e.lanes=zy(r),Oy(e),e.frame||e.tick()}}function Gy(e,t,r){!t.aborted&&r.name!=="AbortError"&&Bs(e,r)}function Ry(e){let{time:t}=Ls(e);if(!Number.isFinite(t?.getTime()))return;e.request?.abort();let{signal:r}=e.request=new AbortController;_y(e,t,r).then(Dy.bind(null,e,r),Gy.bind(null,e,r))}function Uy(e,t){t?.layer&&!Pt.get(t.layer)?.time||(cancelAnimationFrame(e.frame),Ry(e),e.tick())}function Fy(e){e.lanes.length&&(Cs(e),$t(e,e.route),e.route=null,e.mesh&&Ps(e),e.frame||e.tick())}function Ny(e,{url:t,vehicle:r="car",side:o,outline:i,speed:n=8,...a}=ys){let{model:s,lights:m,side:f}=sy[r];o??=f,Lt(e,{tooltip:fy,nightLight:!!m,...a});let p=h.DomUtil.create("small","traffic-status");p.style.cssText="flex:0 1 auto;padding:1px 5px;border-radius:3px;background:#00000008;color:#555;",p.title=r,p.textContent=`${r}: loading\u2026`;let c=ei(s(0)),l=c.position.length,u=l/3,d=new ArrayBuffer(16),y=new Float32Array(d),g=new Uint32Array(d),x={layer:e,url:t,model:s,lights:m,side:o,outline:i,velocity:n,vehicle:r,status:p,template:c,stride:l,vertices:u,params:d,paramFloats:y,paramInts:g,ready:!1,frame:void 0,request:void 0,lanes:[],tripsKey:void 0,mesh:void 0,route:void 0,litAt:-1/0,trips:[],rebasedAt:0,nextCheck:-1/0,elapsed:0,gpu:null,lanesDirty:!0,stale:!1,loaded:void 0,file:void 0};x.shader=my,x.tick=ky.bind(null,x),x.update=Uy.bind(null,x),x.terrain=Fy.bind(null,x),dt.set(e,x),e.on("ready",ly.bind(null,x)),e.on("add",py.bind(null,x)),e.on("remove",cy.bind(null,x))}b();b();b();function jy(){this.keys.clear()}var Fi={KeyW:[1,0],ArrowUp:[1,0],KeyS:[-1,0],ArrowDown:[-1,0],KeyD:[0,1],ArrowRight:[0,1],KeyA:[0,-1],ArrowLeft:[0,-1]};b();da();or();H();W();function Wy(e){let t=this.layer._map;if(e.type==="pointerdown"){if(e.button!==0||e.target.closest(".leaflet-control"))return;this.dragX=e.clientX,this.dragY=e.clientY,this.dragging=!0,t.getContainer().setPointerCapture(e.pointerId)}else this.dragging&&e.type==="pointermove"?(ze(t,Math.max(20,Math.min(85,k(t)-(e.clientY-this.dragY)*.2)),S(t)-(e.clientX-this.dragX)*.25),this.dragX=e.clientX,this.dragY=e.clientY):this.dragging=!1}var Ni=[["body",0,0,0],["leg",-.09,.9,1],["leg",.09,.9,-1],["arm",-.25,1.42,-1],["arm",.25,1.42,1]];X();function St(e){let{layer:t,state:r}=this,o=t._map,i=o.options.crs,n=D.get(t),a=L.get(t),s=i.project(n),m=Math.cos(n.lat*C),f=i.project(r.latlng),p=ct(o,r.latlng)||0;return e[0]=(f.x-s.x)*m,e[1]=p+(r.height??0)-a.position[1],e[2]=-(f.y-s.y)*m,e}function Ss(){let[e,t,r]=St.call(this,this.local),o=-this.state.heading,i=Math.cos(o),n=Math.sin(o),a,s,m,f,p;for(a=0;a<Ni.length;a++)[,s,m,f]=Ni[a],p=this.meshes[a],p.position[0]=e+s*i,p.position[1]=t+m,p.position[2]=r-s*n,p.rotation[0]=f*this.swing*Math.sin(this.state.phase),p.rotation[1]=o;_(this.layer)}function Zy(){this.meshes&&Ss.call(this)}function Es(){let e=this.layer._map;cancelAnimationFrame(this.frame),this.keys.clear(),this.dragging=!1,this.state.height=this.verticalSpeed=0,h.DomEvent.off(document,"keydown keyup",this.onKey),h.DomEvent.off(window,"blur",this.onBlur);let t,r;if(this.meshes)for(t of this.meshes)_e(this.layer,t);if(this.meshes=null,this.button.setAttribute("aria-pressed","false"),this.button.style.background="#fff",this.hint.style.display="none",!(!e||!this.saved)){h.DomEvent.off(e.getContainer(),"pointerdown pointermove pointerup pointercancel",this.onPointer),e.off("terrainchange",this.onTerrain),e.options.scrollWheelZoom=this.saved.scrollWheelZoom;for(r of this.saved.handlers)e[r].enable();e.setView(this.state.latlng,this.saved.zoom,{animate:!1}),kr(e,this.saved.pitch),this.saved=null}}function $y(e){if(e.type==="keyup"&&e.code==="Space"&&this.keys.delete("Space"),!(e.target.closest?.("input:not([type=checkbox], [type=radio]), select, textarea, [contenteditable]")||e.ctrlKey||e.altKey||e.metaKey)){if(e.type==="keydown"&&e.code==="Escape"){this.stop();return}!Fi[e.code]&&e.code!=="Space"||(e.preventDefault(),e.type==="keydown"?this.keys.add(e.code):this.keys.delete(e.code))}}X();b();var Vy=["dragging","keyboard","doubleClickZoom","boxZoom"];H();W();da();function ks(e){return Math.atan2(Math.sin(e),Math.cos(e))}function qy(e,t){return e===t||Ut.get(e)==="terrain"||Ut.get(e)==="traffic"}function Hy(e){let t=te.get(this.layer),r=St.call(this,this.local),o=L.get(this.layer),i=o.position[0]+r[0]*o.scale[0],n=o.position[1]+r[1]*o.scale[1],a=o.position[2]+r[2]*o.scale[2];if(n>e||this.verticalSpeed>0)return;we(ee.get(this.layer)),t.origin[0]=i,t.origin[1]=e+.01,t.origin[2]=a,t.direction[0]=0,t.direction[1]=-1,t.direction[2]=0,t.meshes.length=0;let s,m;for(s of U.get(z.get(this.layer)))qy(s,this.layer)||I.get(s)==="raster"||s.options.nightLight||At(L.get(s),jn,t.meshes);for(m of Nn(t,t.meshes)){if(m.point[1]<n-.001)break;this.state.height+=(m.point[1]-n)/o.scale[1],this.verticalSpeed=0;break}t.meshes.length=0}b();X();var mf=new WeakMap;function Yy(e,t,r){let o,i,n;for(o=Math.floor(Math.min(t[0],t[3],t[6])/8);o<=Math.floor(Math.max(t[0],t[3],t[6])/8);o++)for(i=Math.floor(Math.min(t[2],t[5],t[8])/8);i<=Math.floor(Math.max(t[2],t[5],t[8])/8);i++)n=o+","+i,e.has(n)||e.set(n,[]),e.get(n).push(r)}function _s(e){let t=mf.get(e.geometry);if(t)return t;let r=e.worldMatrix,{position:{data:o},index:i,normal:n,uv:a,instanceOffset:s}=e.geometry.attributes,m=i?i.count:o.length/3,f=m*(s?.count??1),p=[],c=[],l=new Map,u=[0,0,0],d=[0,0,0],y=[0,0,0],g=[],x,v,P,B,T,O,K,G,N,J,pe,ye,Qe,Le,ft,Ge=-1/0;for(x=0;x<f;x+=3)v=i?i.data[x%m]:x%m,!(e.program.nightLight&&a&&a.data[v*2]<=2)&&(Fn(e,x,u,d,y),g[0]=r[0]*u[0]+r[4]*u[1]+r[8]*u[2]+r[12],g[1]=r[1]*u[0]+r[5]*u[1]+r[9]*u[2]+r[13],g[2]=r[2]*u[0]+r[6]*u[1]+r[10]*u[2]+r[14],g[3]=r[0]*d[0]+r[4]*d[1]+r[8]*d[2]+r[12],g[4]=r[1]*d[0]+r[5]*d[1]+r[9]*d[2]+r[13],g[5]=r[2]*d[0]+r[6]*d[1]+r[10]*d[2]+r[14],g[6]=r[0]*y[0]+r[4]*y[1]+r[8]*y[2]+r[12],g[7]=r[1]*y[0]+r[5]*y[1]+r[9]*y[2]+r[13],g[8]=r[2]*y[0]+r[6]*y[1]+r[10]*y[2]+r[14],B=g[3]-g[0],T=g[4]-g[1],O=g[5]-g[2],K=g[6]-g[0],G=g[7]-g[1],N=g[8]-g[2],J=T*N-O*G,pe=B*G-T*K,ye=O*K-B*N,Qe=Math.hypot(J,ye,pe),!(!Qe||Math.abs(ye)>.9*Qe)&&(n&&(P=v*3,(r[0]*n.data[P]+r[4]*n.data[P+1]+r[8]*n.data[P+2])*J+(r[2]*n.data[P]+r[6]*n.data[P+1]+r[10]*n.data[P+2])*pe<0&&(J=-J,pe=-pe)),Le=Math.hypot(J,pe),ft=c.length/2,p.push(...g),Ge=Math.max(Ge,g[0],g[3],g[6]),c.push(J/Le,pe/Le),Yy(l,g,ft)));return t={tri:Float32Array.from(p),nrm:Float32Array.from(c),cells:l,maxX:Ge,origin:[r[12],r[13],r[14]]},mf.set(e.geometry,t),t}function Is(e,t,r,o,i,n,a){let s=t*9,m=e[s+3]-e[s],f=e[s+4]-e[s+1],p=e[s+5]-e[s+2],c=e[s+6]-e[s],l=e[s+7]-e[s+1],u=e[s+8]-e[s+2],d=-a*l,y=a*c-n*u,g=n*l,x=m*d+f*y+p*g;if(Math.abs(x)<1e-9)return-1;let v=r-e[s],P=o-e[s+1],B=i-e[s+2],T=(v*d+P*y+B*g)/x;if(T<0||T>1)return-1;let O=P*p-B*f,K=B*m-v*p,G=v*f-P*m,N=(n*O+a*G)/x;return N<0||T+N>1?-1:(c*O+l*K+u*G)/x}function Xy(e,t,r,o,i,n){let{dx:a,dz:s,seen:m}=r,f,p,c;for(f of e)if(!(m.has(f)||a*t.nrm[f*2]+s*t.nrm[f*2+1]>=0))for(m.add(f),p=.4;p<2;p+=1.1)c=Is(t.tri,f,o,i+p,n,a,s),c>=0&&c<r.best&&(r.best=c,r.found=!0,r.normal[0]=t.nrm[f*2],r.normal[1]=t.nrm[f*2+1])}function Ky(e,t){if(!e.visible)return!0;if(!e.geometry?.attributes?.position?.data||e.program?.depthTest===!1)return;e.geometry.bounds||Be(e.geometry);let r=e.worldMatrix,{center:o,radius:i}=e.geometry.bounds,{x:n,y:a,z:s,dx:m,dz:f,reach:p}=t;if(Math.hypot(r[0]*o[0]+r[4]*o[1]+r[8]*o[2]+r[12]-n,r[2]*o[0]+r[6]*o[1]+r[10]*o[2]+r[14]-s)>i*Math.hypot(r[0],r[1],r[2])+p)return;let c=_s(e),l=n-r[12]+c.origin[0],u=a-r[13]+c.origin[1],d=s-r[14]+c.origin[2];t.seen.clear();let g,x,v;for(g=Math.floor(Math.min(l,l+m*p)/8);g<=Math.floor(Math.max(l,l+m*p)/8);g++)for(x=Math.floor(Math.min(d,d+f*p)/8);x<=Math.floor(Math.max(d,d+f*p)/8);x++)v=c.cells.get(g+","+x),v&&Xy(v,c,t,l,u,d)}function zs(e,t,r,o,i,n,a,s){let m=dt.get(e);if(!m?.mesh||!m.trips.length)return!1;let f=m.collisionBounds;if(!f){f=m.collisionBounds={radius:0,minY:1/0,maxY:-1/0};let J,pe,ye,Qe;for(J=0;J<m.template.position.length;J+=3)pe=m.template.position[J],ye=m.template.position[J+1],Qe=m.template.position[J+2],f.radius=Math.max(f.radius,Math.hypot(pe,Qe)),f.minY=Math.min(f.minY,ye),f.maxY=Math.max(f.maxY,ye)}let p=L.get(e),c=m.position||={},l=Math.max(p.scale[0],p.scale[1],p.scale[2]),u=f.radius*l+.35,d,y,g,x,v,P,B,T,O,K,G,N;for(d of m.trips)if({x:G,y:O,z:N}=yo(m,d,c),O=p.position[1]+(O+f.minY)*p.scale[1],K=p.position[1]+(c.y+f.maxY)*p.scale[1],!(O>r+1.7*l||K<r+.2*l)&&(G=p.position[0]+G*p.scale[0],N=p.position[2]+N*p.scale[2],y=(G-t)*i+(N-o)*n,g=Math.max(0,Math.min(a,y)),x=t+g*i-G,v=o+g*n-N,P=x*x+v*v,!(P>=u*u))){if(a===0){s.found=!0,T=Math.hypot(t-G,o-N),s.normal[0]=T?(t-G)/T:0,s.normal[1]=T?(o-N)/T:0;continue}B=Math.max(0,y-Math.sqrt(u*u-P)),!(B>a||B>=s.best)&&(s.best=B,s.found=!0,T=Math.hypot(t+B*i-G,o+B*n-N),T<1e-6?(s.normal[0]=-i,s.normal[1]=-n):(s.normal[0]=(t+B*i-G)/T,s.normal[1]=(o+B*n-N)/T))}return s.found}function Jy(e,t,r,o,i,n,a,s){we(ee.get(e)),s.x=t,s.y=r,s.z=o,s.dx=i,s.dz=n,s.reach=a,s.best=a,s.found=!1;let m;for(m of U.get(z.get(e)))if(!(m===e||I.get(m)==="terrain")){if(I.get(m)==="traffic"){zs(m,t,r,o,i,n,a,s);continue}At(L.get(m),Ky,s)}return s.found?s.normal:null}function ff(e,t,r){let o=Math.hypot(e,t);return o>1e-6&&Jy(this.layer,r[0],r[1],r[2],e/o,-t/o,o+.3,this.hitData)}function Qy(e,t){let r=e*this.speed*t,{lat:o,lng:i}=this.state.latlng,{position:n,scale:a}=L.get(this.layer),s=Math.sin(this.state.heading)*r,m=Math.cos(this.state.heading)*r,f=St.call(this,this.local),p;for(p=0;p<f.length;p++)f[p]=n[p]+a[p]*f[p];let c=ff.call(this,s,m,f);if(c){let l=s*c[0]-m*c[1];s-=l*c[0],m+=l*c[1],ff.call(this,s,m,f)&&(s=m=0)}this.state.latlng=new h.LatLng(o+m/111320,i+s/(111320*Math.cos(o*C))),this.state.phase+=Math.hypot(s,m)/1.6*Math.PI}function ex(e){return this.keys.has("Space")?(this.verticalSpeed=6,this.state.height+=this.verticalSpeed*e,!0):!this.verticalSpeed&&!this.state.height?!1:(this.state.height=Math.max(0,this.state.height+this.verticalSpeed*e-9.81*e*e/2),this.verticalSpeed=this.state.height>0?this.verticalSpeed-9.81*e:0,!0)}qr();X();W();or();H();function tx(e,t,r){let o=this.layer._map;if(e||t){let n=S(o)*C,a=ks(-this.state.heading-n);Math.abs(a)>.001&&ze(o,k(o),(n+a*Math.min(1,r*4))*He),o.setView(this.state.latlng,o.getZoom(),{animate:!1})}let i=e?.9:0;return Math.abs(this.swing-i)>.001?(this.swing+=(i-this.swing)*Math.min(1,r*10),!0):!1}b();function pf(e,t,r,o,i,n){let a=e.geometry;if(!e.visible||!a?.attributes?.position?.data||e.program?.depthTest===!1)return!1;a.bounds||Be(a);let s=a.bounds,m=e.worldMatrix,f=s.center,p=m[0]*f[0]+m[4]*f[1]+m[8]*f[2]+m[12],c=m[1]*f[0]+m[5]*f[1]+m[9]*f[2]+m[13],l=m[2]*f[0]+m[6]*f[1]+m[10]*f[2]+m[14],u=s.radius*Math.max(Math.hypot(m[0],m[1],m[2]),Math.hypot(m[4],m[5],m[6]),Math.hypot(m[8],m[9],m[10]));if(Math.hypot(p-t,c-r,l-o)>u)return!1;let d=_s(e),y=Math.floor(d.maxX/8);if(t>=d.maxX)return!1;let g=Math.floor(o/8),x=n;x.length=0,i.clear();let v,P,B,T;for(v=Math.floor(t/8);v<=y;v++)if(P=d.cells.get(`${v},${g}`),!!P)for(B of P)i.has(B)||(i.add(B),T=Is(d.tri,B,t,r,o,1,0),T>1e-4&&x.push(T));for(v=1;v<x.length;v++){T=x[v];let G=v-1;for(;G>=0&&x[G]>T;)x[G+1]=x[G--];x[G+1]=T}let O=0,K=-1/0;for(T of x)T-K>1e-4&&O++,K=T;return O%2===1}function cf(e){let{layer:t,local:r,hitData:o}=e,i=z.get(t);if(!i||!U.get(i))return!1;we(ee.get(t));let n=L.get(t),a=St.call(e,r),s=n.position[0]+a[0]*n.scale[0],m=n.position[1]+a[1]*n.scale[1],f=n.position[2]+a[2]*n.scale[2],p=U.get(i),c,l,u;for(c of p){if(c===t||I.get(c)==="terrain")continue;if(I.get(c)==="traffic"){if(o.best=0,o.found=!1,zs(c,s,m,f,0,0,0,o))return!0;continue}let d=o.nodes;for(d.length=0,L.get(c)&&d.push(L.get(c));d.length;)if(l=d.pop(),!!l.visible){if(l.geometry&&(pf(l,s,m+.45*n.scale[1],f,o.seen,o.intersections)||pf(l,s,m+1.35*n.scale[1],f,o.seen,o.intersections)))return!0;for(u of l.children)d.push(u)}}return!1}function As(){if(!this.saved||!cf(this))return!1;let e=this.layer._map,t=this.state.latlng,r=this.state.height,o,i,n;for(o=.5;o<=20;o+=.5)for(i=0;i<Math.PI*2;i+=Math.PI/4)if(n=new h.LatLng(t.lat+Math.cos(i)*o/111320,t.lng+Math.sin(i)*o/(111320*Math.cos(t.lat*Math.PI/180))),this.state.latlng=n,this.state.height=0,!cf(this))return this.verticalSpeed=0,e.setView(n,e.getZoom(),{animate:!1}),!0;return this.state.latlng=t,this.state.height=r,!1}function rx(e){let t=this.layer;this.frame=requestAnimationFrame(this.step);let r=Math.min(.1,(e-(this.last??e))/1e3);if(this.last=e,!w.get(t))return;let o=!1,i,n;if(e>=this.nextClearanceCheck&&(this.nextClearanceCheck=e+250,As.call(this)&&(o=!0)),!this.meshes){this.meshes=[];for([i]of Ni)this.meshes.push(er(t,ei(xs[i])));o=!0}let a=L.get(t).position[1]+St.call(this,this.local)[1]*L.get(t).scale[1];ex.call(this,r)&&(o=!0);let s=0,m=0;for(n of this.keys)s+=Fi[n]?.[0]||0,m+=Fi[n]?.[1]||0;s=Math.sign(s),m=Math.sign(m),m&&(this.state.heading=ks(this.state.heading+m*2.5*r),o=!0),s&&(Qy.call(this,s,r),o=!0),o&&Hy.call(this,a),tx.call(this,s,m,r)&&(o=!0),o&&Ss.call(this)}function Os(){let e=this.layer._map;if(this.saved||!e)return;this.state.latlng=e.getCenter(),this.state.height=this.verticalSpeed=0;let t=e.getSize().y*1.5/this.distance,r=Math.min(e.getMaxZoom(),Math.log2(t*Xt*Math.cos(this.state.latlng.lat*C)/256)),o;this.saved={zoom:e.getZoom(),pitch:k(e),scrollWheelZoom:e.options.scrollWheelZoom,handlers:[]};for(o of Vy)e[o]?.enabled()&&this.saved.handlers.push(o);for(o of this.saved.handlers)e[o].disable();e.options.scrollWheelZoom=this.saved.scrollWheelZoom&&"center",this.state.heading=-S(e)*C,e.setView(this.state.latlng,r,{animate:!1}),kr(e,75),As.call(this),h.DomEvent.on(document,"keydown keyup",this.onKey),h.DomEvent.on(window,"blur",this.onBlur),h.DomEvent.on(e.getContainer(),"pointerdown pointermove pointerup pointercancel",this.onPointer),e.on("terrainchange",this.onTerrain),this.button.setAttribute("aria-pressed","true"),this.button.style.background="#e4e4e4",this.hint.style.display="",this.last=void 0,this.nextClearanceCheck=0,this.frame=requestAnimationFrame(this.step)}function ox(){this.saved?Es.call(this):Os.call(this)}function ix(e,{speed:t,distance:r,...o}){let i=new h.Layer;Ut.set(i,"walk"),Lt(i,o);let n=new Set,a=h.DomUtil.create("div","leaflet-bar leaflet-control");a.style.cssText="display:flex;align-items:center;background:#fff;";let s=h.DomUtil.create("button","",a);s.type="button",s.title="Walk",s.setAttribute("aria-label","Walk"),s.setAttribute("aria-pressed","false"),s.textContent="\u{1F6B6}",s.style.cssText="width:30px;height:30px;padding:0;border:0;border-radius:4px;background:#fff;font-size:18px;line-height:30px;cursor:pointer;";let m=h.DomUtil.create("small","",a);m.style.cssText="display:none;padding:0 8px;color:#333;white-space:nowrap;",m.textContent="W/S: run \xB7 A/D: turn \xB7 hold Space: ascend \xB7 drag: look around \xB7 Esc: exit",h.DomEvent.disableClickPropagation(a);let f={layer:i,speed:t,distance:r,keys:n,container:a,button:s,hint:m,meshes:null,frame:null,last:void 0,nextClearanceCheck:0,swing:0,verticalSpeed:0,saved:null,hitData:null,local:null,state:e.walker={latlng:null,heading:0,phase:0,height:0}};ms.set(i,f.state),f.step=rx.bind(f),f.onKey=$y.bind(f),f.onBlur=jy.bind(f),f.onPointer=Wy.bind(f),f.onTerrain=Zy.bind(f),f.start=Os.bind(f),f.stop=Es.bind(f),f.toggle=ox.bind(f),e._walk=f,h.DomEvent.on(s,"click",f.toggle)}function nx(e){h.Util.setOptions(this,e),ix(this,this.options)}function ax(e){let t=It.get(e);if(t?.control&&t.control!==this)throw this._map=null,new Error("Only one Walk control can be active per map");return t||(t={control:null,hitData:{x:0,y:0,z:0,dx:0,dz:0,reach:0,best:0,found:!1,seen:new Set,intersections:[],nodes:[],normal:[0,0]},local:[0,0,0]},It.set(e,t)),t.control=this,t.local.fill(0),t.hitData.seen.clear(),t.hitData.normal.fill(0),this._walk.hitData=t.hitData,this._walk.local=t.local,this._walk.layer.addTo(e),this._walk.container}function sx(e){let t=It.get(e);t?.control===this&&(this._walk.stop(),this._walk.layer.remove(),t.control=null,t.hitData.seen.clear(),this._walk.hitData=null,this._walk.local=null)}h.Control.Walk=h.Control.extend({options:{position:"bottomright",speed:70,distance:20},initialize:nx,onAdd:ax,onRemove:sx});b();var Ds=new WeakMap;var Gs=new WeakMap;var Rs=new WeakMap;function mx(){return{}}function fx(e){return this._project(),this._parts=this._rings,Ds.get(this).call(this,e)}function px(){return this._project(),Gs.get(this).call(this)}function cx(){Rs.get(this).call(this),this._container.remove()}var Vt=new Map;var Et={value:null};function lx(e){Vt.delete(e),xr.set(e,null),!Vt.size&&Et.value!==null&&(cancelAnimationFrame(Et.value),Et.value=null)}function ux(){Et.value=null;let e=[...Vt],t,r;for([t,r]of e)Vt.get(t)===r&&(Vt.delete(t),xr.set(t,null),Us.call(t))}function dx(e){Vo.set(e,(Vo.get(e)||0)+1),Vt.set(e,Vo.get(e)),Et.value===null&&(Et.value=requestAnimationFrame(ux)),xr.set(e,Et.value)}function Us(){if(!this._map)return;let e=this,t=Date.now(),r=!1,o=!1,i,n;for(i in this._tiles)Object.hasOwn(this._tiles,i)&&(n=this._tiles[i],!(!n.current||!n.loaded)&&(n._gpuOpacity=this._map._fadeAnimated?Math.min(1,(t-n.loaded)/200):1,n._gpuOpacity<1?r=!0:n.active||(this._onOpaqueTile(n),n.active=!0,o=!0)));o&&!this._noPrune&&this._pruneTiles(),xt(this),lx(e),r&&dx(e)}var Fs=[];function hx(){Fs.shift()?.fire("load")}function gx(){this._image||this._initImage(),this._image.complete&&this._image.naturalWidth&&(Fs.push(this),queueMicrotask(hx))}function yx(){return xt(this),this}function xx(){this instanceof h.Polyline||this instanceof h.CircleMarker?(this.beforeAdd=this._updateBounds=at,this.redraw=yx,I.set(this,"path"),this instanceof h.Polyline&&(Ds.set(this,this.closestLayerPoint),this.closestLayerPoint=fx),this instanceof h.Circle&&(Gs.set(this,this.getBounds),this.getBounds=px)):this instanceof h.GridLayer?(Rs.set(this,this._initContainer),this._initContainer=cx,this._updateOpacity=Us):this instanceof h.ImageOverlay&&!(this instanceof h.VideoOverlay)&&!(this instanceof h.SVGOverlay)&&(I.set(this,"image"),this._reset=xt)}b();function vx(){jr.get(this).off(yr.get(this),this),jr.set(this,null),yr.set(this,null)}function wx(e,t){switch(I.get(e)){case"3d":return us(e,t);case"raster":return rg(e,t);case"terrain":return zg(e,t);case"image":return gx.call(e,t);case"time":return $g.call(e,t)}}function Mx(e){if(!e._map)return;let t;for(t of V.get(e).values())Rr(e,t);V.get(e).clear(),Ur(e)}function bx(e){let t={};return oe.get(e)&&(t.moveend=t.zoomend=t.rotate=t.pitch=t.resize=Ur.bind(null,e)),(q.get(e)||oe.get(e))&&(t.terrainchange=Mx.bind(null,e)),t}b();function Lx(e){return!cr.get(e)&&(e instanceof h.GridLayer||e instanceof h.Polyline||e instanceof h.CircleMarker||e instanceof h.Marker&&!(e.options.icon instanceof h.DivIcon)||e instanceof h.ImageOverlay&&!(e instanceof h.VideoOverlay)&&!(e instanceof h.SVGOverlay))}function Bx(e){let t=Lx(this);t&&((this instanceof h.GridLayer||this instanceof h.ImageOverlay)&&(this.options.crossOrigin||=!0),this instanceof h.Marker&&(this.options.icon.options.crossOrigin||=!0));let r=e.target;r.hasLayer(this)&&(I.get(this)?(this._map=r,this._zoomAnimated=r._zoomAnimated,I.get(this)!=="pending"&&I.get(this)!=="time"&&(yr.set(this,I.get(this)==="raster"?Kh(this):cr.get(this)?bx(this):mx()),jr.set(this,r),r.on(yr.get(this),this),this.once("remove",vx,this)),wx(this,r),this.fire("add"),r.fire("layeradd",{layer:this})):br.value._layerAdd.call(this,e),!(!t||!e.target.hasLayer(this))&&qn(this,e.target))}b();var Ns=[];var js={value:Promise.resolve()};function Tx(e,t){q.set(e,!0),Lt(e,t)}function Px(e,t,r){if(!Number.isSafeInteger(t)||!Number.isSafeInteger(r)||t<0||r<=0||r>32e6||!Number.isSafeInteger(t+r)||e.size!==void 0&&t+r>e.size)throw new Error("Invalid COG byte range")}function Cx(e,t,r,o){if(!t||Number(t[1])!==r||Number(t[2])!==r+o-1||!Number.isSafeInteger(Number(t[3]))||Number(t[3])<r+o||(e.containerSize??e.size)!==void 0&&(e.containerSize??e.size)!==Number(t[3]))throw new Error("Invalid COG range response")}function Sx(e){return e.status!==200||Number(e.headers.get("Content-Length"))>32e6}function Ex(e,t,r,o){let i=t.headers.get("ETag");if(e.etag&&e.etag!==i)throw new Error("COG changed; recreate the layer");i&&(e.etag=i);let n=/^bytes (\d+)-(\d+)\/(\d+)$/.exec(t.headers.get("Content-Range")||"");if(t.status===206)Cx(e,n,r,o),e.baseOffset===void 0&&(e.size=Number(n[3]));else if(Sx(t))throw new Error("COG server must support byte ranges for files over 32 MB")}async function kx(e,t){let r=e.body.getReader(),o=[],i=0,n;try{for(;!(n=await r.read()).done;){if(i+=n.value.byteLength,i>(e.status===206?t:32e6))throw await r.cancel(),new Error("Oversized COG response");o.push(n.value)}}finally{r.releaseLock()}let a=new Uint8Array(i),s=0,m;for(m of o)a.set(m,s),s+=m.length;return a}async function $e(e,t,r,o){if(o?.throwIfAborted(),Px(e,t,r),e.full)return e.full.slice(t,t+r);let i=(e.baseOffset||0)+t,n=await fetch(e.url,{headers:{Range:`bytes=${i}-${i+r-1}`},signal:o});if(!n.ok)throw new Error(`Unable to read COG: HTTP ${n.status}`);Ex(e,n,i,r);let a=await kx(n,r);if(n.status===200){if(e.baseOffset===void 0)e.size=a.byteLength;else if(a.byteLength!==e.containerSize)throw new Error("Truncated PMTiles COG container");e.full=e.baseOffset===void 0?a.buffer:a.slice(e.baseOffset,e.baseOffset+e.size)}let s=n.status===200?e.full.slice(t,t+r):a.buffer;if(s.byteLength!==r)throw new Error("Truncated COG byte range");return s}var _x=[256,257,258,259,262,277,284,317,322,323,324,325,339,33550,33922,34735];async function Ix(e,t,r,o,i){let n=t.getUint16(r*12+2,i),a=n===3?2:n===4?4:n===12?8:0,s=t.getUint32(r*12+4,i);if(!a||!s||s>1048576)throw new Error(`Unsupported COG tag ${o}`);let m=a*s<=4?new DataView(t.buffer,r*12+8,4):new DataView(await $e(e,t.getUint32(r*12+8,i),a*s)),f=[],p;for(p=0;p<s;p++)f.push(n===3?m.getUint16(p*a,i):n===4?m.getUint32(p*a,i):m.getFloat64(p*a,i));return f}async function zx(e,t){let r=e.little,o=new DataView(await $e(e,t,2)).getUint16(0,r);if(!o||o>128)throw new Error("Invalid COG directory size");let i=new DataView(await $e(e,t+2,o*12+4)),n=new Map,a,s;for(a=0;a<o;a++){if(s=i.getUint16(a*12,r),s===42113)throw new Error("COG nodata tags are not supported; export complete tiles");if(s===34264)throw new Error("COG affine transformation matrices are not supported");if(_x.includes(s)){if(n.has(s))throw new Error("Duplicate COG tag");n.set(s,await Ix(e,i,a,s,r))}}return{tags:n,next:i.getUint32(o*12,r)}}function Ax(e,t,r){return!!t&&!!r&&t%256===0&&r%256===0&&e.get(322)?.[0]===256&&e.get(323)?.[0]===256&&(e.get(259)?.[0]===1||e.get(259)?.[0]===8)&&(e.get(284)?.[0]??1)===1&&(e.get(317)?.[0]??1)===1}function Ox(e,t,r,o,i,n,a){return i?e.get(262)?.[0]===1:(t===3||t===4)&&r?.length===t&&n&&a&&e.get(262)?.[0]===2}function Dx(e){let t=e.get(256)?.[0],r=e.get(257)?.[0],o=e.get(277)?.[0]??1,i=e.get(258),n=e.get(339)||[1],a=!0,s=!0,m=!0,f;for(f of i||[])a&&=f===8;for(f of n)s&&=f===1,m&&=f===3;let p=o===1&&i?.length===1&&i[0]===32&&m;if(!Ax(e,t,r)||!Ox(e,o,i,n,p,a,s))throw new Error("Unsupported COG profile: expected tiled 256px RGB(A) Uint8 or Float32, DEFLATE without predictor");return{width:t,height:r,samples:o,elevation:p}}function Gx(e){let t=!1,r=!1,o;if(e)for(o=4;o<e.length;o+=4)e[o+1]!==0||e[o+2]!==1||(e[o]===3072&&e[o+3]===3857&&(t=!0),e[o]===1025&&e[o+3]===1&&(r=!0));return t&&r}function lf(e){let t;for(t of e||[])if(!Number.isFinite(t))return!1;return!0}function Rx(e,t,r){return!!e&&e[0]===1&&e.length===4+e[3]*4&&!!t&&t.length===3&&lf(t)&&t[0]>0&&Math.abs(t[0]-t[1])<=1e-8&&!!r&&r.length===6&&lf(r)&&r[0]===0&&r[1]===0}function Ux(e,t,r,o){let i=e.get(34735),n=e.get(33550),a=e.get(33922);if(!Rx(i,n,a)||!Gx(i))throw new Error("COG must use north-up EPSG:3857 PixelIsArea georeferencing");return{width:t,height:r,resolution:n[0],left:a[3],top:a[4],elevation:o}}function Fx(e,t,r,o,i,n,a){return o>=0&&o<=24&&Math.abs(20037508342789244e-9*2/(256*2**o)-a)<=a*1e-7&&(!r.elevation||Number.isInteger(i)&&Number.isInteger(n))&&Math.abs(t.width/r.width-t.height/r.height)<=1e-7&&r.elevation===t.elevation&&i>=0&&n>=0&&i+r.width/256<=2**o&&n+r.height/256<=2**o&&!e.levels.has(o)&&!(t.elevation&&e.levels.size)}function Nx(e,t){if(t.offsets?.length!==t.columns*t.rows||t.lengths?.length!==t.offsets.length)throw new Error("Invalid COG tile offsets or lengths");let r;for(r=0;r<t.offsets.length;r++)if(!t.offsets[r]||!t.lengths[r]||t.lengths[r]>1048576||t.offsets[r]+t.lengths[r]>e.size)throw new Error("Invalid COG tile offsets or lengths")}function jx(e,t,r){let o=t.tags,i=Dx(o);r.base||(r.base=Ux(o,i.width,i.height,i.elevation));let n=r.base,a=n.resolution*n.width/i.width,s=Math.round(Math.log2(20037508342789244e-9*2/(256*a))),m=20037508342789244e-9*2/2**s,f=(n.left+20037508342789244e-9)/m,p=(20037508342789244e-9-n.top)/m;if(Math.abs(f-Math.round(f))<1e-6&&(f=Math.round(f)),Math.abs(p-Math.round(p))<1e-6&&(p=Math.round(p)),!Fx(e,n,i,s,f,p,a))throw new Error("COG levels must align with the Web Mercator XYZ tile grid");let c={x:f,y:p,columns:i.width/256,rows:i.height/256,samples:i.samples,elevation:i.elevation,compression:o.get(259)[0],offsets:o.get(324),lengths:o.get(325)};Nx(e,c),e.levels.set(s,c),r.minZoom=Math.min(r.minZoom,s),r.maxZoom=Math.max(r.maxZoom,s)}async function Wx(e,t){let r={base:null,minZoom:1/0,maxZoom:-1/0},o=new Set,i;for(;t;){if(o.has(t)||o.size>=24)throw new Error("Cyclic or excessive COG directories");o.add(t),i=await zx(e,t),jx(e,i,r),t=i.next}if(!r.base)throw new Error("COG has no image directory");if(e.levels.size!==r.maxZoom-r.minZoom+1)throw new Error("COG overview zooms must be contiguous");return{base:r.base,minZoom:r.minZoom,maxZoom:r.maxZoom}}async function Zx(e,t,r){if(r===1){if(e.byteLength!==t)throw new Error("Invalid uncompressed COG tile size");return e}let i=new Blob([e]).stream().pipeThrough(new DecompressionStream("deflate")).getReader(),n=new Uint8Array(t),a=0,s;try{for(;!(s=await i.read()).done;){if(a+s.value.length>t)throw await i.cancel(),new Error("Oversized decoded COG tile");n.set(s.value,a),a+=s.value.length}}finally{i.releaseLock()}if(a!==t)throw new Error("Truncated decoded COG tile");return n.buffer}async function Ws(e,t,r,o,i){let n=o*t.columns+r;return Zx(await $e(e,t.offsets[n],t.lengths[n],i),256*256*(t.elevation?4:t.samples),t.compression)}async function $x(e,t,r,o,i){let n=await Ws(e,t,r-t.x,o-t.y,i);i?.throwIfAborted();let a=new DataView(n),s=new Float32Array(256*256),m,f;for(m=0;m<s.length;m++){if(f=a.getFloat32(m*4,e.little),!Number.isFinite(f)||f<-12e3||f>1e4)throw new Error("Invalid or missing COG elevation sample");s[m]=f}return{data:s.buffer}}async function Vx(e,t,r,o,i){let n=new OffscreenCanvas(256,256),a=n.getContext("2d");if(!a)throw new Error("Unable to create COG tile canvas");let s=(r-t.x)*256,m=(o-t.y)*256,f,p,c,l,u,d,y;for(p=Math.max(0,Math.floor(m/256));p<Math.min(t.rows,Math.ceil(m/256+1));p++)for(f=Math.max(0,Math.floor(s/256));f<Math.min(t.columns,Math.ceil(s/256+1));f++){for(c=new Uint8Array(await Ws(e,t,f,p,i)),i?.throwIfAborted(),l=new Uint8ClampedArray(256*256*4),u=0,d=0;u<c.length;u+=t.samples,d+=4)l[d]=c[u],l[d+1]=c[u+1],l[d+2]=c[u+2],l[d+3]=t.samples===4?c[u+3]:255;y=await createImageBitmap(new ImageData(l,256,256)),a.drawImage(y,f*256-s,p*256-m),y.close()}let g=n.transferToImageBitmap();return i?.aborted&&(g.close(),i.throwIfAborted()),{image:g}}function qx(e,t,r){return Number.isSafeInteger(e)&&Number.isSafeInteger(t)&&Number.isSafeInteger(r)&&e>=0&&e<=24&&t>=0&&r>=0&&t<2**e&&r<2**e}async function Hx(e,t,r,o,i){if(i?.throwIfAborted(),!qx(t,r,o))throw new Error("Invalid COG tile coordinates");let n=e.levels.get(t);if(!(!n||r+1<=n.x||o+1<=n.y||r>=n.x+n.columns||o>=n.y+n.rows))return n.elevation?$x(e,n,r,o,i):Vx(e,n,r,o,i)}function Yx(e){return e.header}function Xx(e,t){if(t.tileType!==0||t.tileCompression!==1||!Number.isSafeInteger(t.jsonMetadataOffset)||!Number.isSafeInteger(t.jsonMetadataLength)||t.jsonMetadataLength<=0||t.jsonMetadataLength>1048576||!Number.isSafeInteger(t.tileDataOffset)||!Number.isSafeInteger(t.tileDataLength)||t.tileDataOffset<127||t.tileDataOffset+t.tileDataLength>e.size)throw new Error("Invalid PMTiles COG asset container")}async function Kx(e,t,r){let o=JSON.parse(new TextDecoder().decode(await Go(await $e(e,t.jsonMetadataOffset,t.jsonMetadataLength),t.internalCompression))),i=o.cog_assets||{},n=Object.hasOwn(i,r)?o.cog_assets[r]:null;if(o.format!=="cog-assets-v1"||!n||!Number.isSafeInteger(n.offset)||!Number.isSafeInteger(n.length)||n.offset<0||n.length<8||n.offset+n.length>t.tileDataLength)throw new Error(`Invalid or missing PMTiles COG asset: ${r}`);return n}async function Jx(e,t){let r={url:e},o=Aa(await $e(r,0,127));Xx(r,o);let i=await Kx(r,o,t),n=o.tileDataOffset+i.offset;return{url:e,baseOffset:n,size:i.length,containerSize:r.size,etag:r.etag,full:r.full?.slice(n,n+i.length)}}async function Qx(e,t){let r=t===void 0?{url:e}:await Jx(e,t);r.levels=new Map;let o=new DataView(await $e(r,0,8)),i=o.getUint16(0);if(i!==18761&&i!==19789)throw new Error("Invalid TIFF byte order");if(r.little=i===18761,o.getUint16(2,r.little)!==42)throw new Error("Expected classic TIFF (BigTIFF is not supported)");let{base:n,minZoom:a,maxZoom:s}=await Wx(r,o.getUint32(4,r.little)),m=20037508342789244e-9,f=n.left+n.resolution/2,p=n.left+(n.width-.5)*n.resolution,c=n.top-n.resolution/2,l=n.top-(n.height-.5)*n.resolution;return r.header={minZoom:a,maxZoom:s,tileType:n.elevation?0:2,minLon:f/m*180,maxLon:p/m*180,minLat:Math.atan(Math.sinh(l/m*Math.PI))*180/Math.PI,maxLat:Math.atan(Math.sinh(c/m*Math.PI))*180/Math.PI},{getHeader:Yx.bind(null,r),getZxy:Hx.bind(null,r)}}function e0(e,t){ps(e,{ariaLabel:"COG raster",...t,archive:t.archive||Qx(new URL(t.url,document.baseURI).href,t.asset)})}function t0(e){switch(e){case"geojson":return Tx;case"pmtiles":return ps;case"cog":return e0;case"terrain":return Ag;case"traffic":return Ny;default:return null}}function r0(){let e=Ns.shift();return e.initialize=t0(e.type),e.initialize||(e.error=new Error(`Unknown layer type: ${e.type}`)),e}function o0(e){let{layer:t,ready:r}=e;if(e.error)return Vn(t,e.error),Promise.reject(e.error);try{let o=t._map;return o?.removeLayer(t),I.delete(t),e.initialize(t,e.settings),o?.addLayer(t),re.get(t)===r?t:re.get(t)}catch(o){throw t.fire("error",{error:o}),o}}function i0(e=go){if(vt.has(this)||vt.add(this),Object.getPrototypeOf(this)!==h.Layer.prototype||!e?.source){if(br.value.initialize)return br.value.initialize.apply(this,arguments);h.Util.setOptions(this,e);return}let{source:{type:t=e.source.data?.type==="FeatureCollection"?"geojson":/\.pmtiles(?:[?#]|$)/i.test(e.source.url)?"pmtiles":/\.tiff?(?:[?#]|$)/i.test(e.source.url)?"cog":"3d",...r},...o}=e,i={...r,...o};if(h.Util.setOptions(this,o),Ut.set(this,t),t==="3d"){Lt(this,i);return}I.set(this,"pending");let n={layer:this,type:t,settings:i,ready:null};Ns.push(n),js.value=js.value.catch(at).then(r0);let a=js.value.then(o0);re.set(this,a),n.ready=a,a.catch(at)}b();function n0(e,t){switch(I.get(e)){case"3d":return Yo(e,t);case"raster":return fg(e,t);case"terrain":return lg(e,t);case"time":return Vg.call(e,t)}}function a0(e){let t=h.Util.stamp(e);return this._layers[t]?I.get(e)?(this._loaded&&n0(e,this),delete this._layers[t],this._loaded&&(this.fire("layerremove",{layer:e}),e.fire("remove")),e._map=e._mapToAdd=null,this):Wi.value.call(this,e):this}H();function s0(){return k(this)}W();function m0(){return S(this)}function f0(e,t){if(!Number.isFinite(t))throw new TypeError("Marker rotation must be finite");return e.options.rotation=t,e.update(),xt(e),e}function p0(e){return f0(this,e)}function c0(){vt.has(this)||vt.add(this);let e=this._initHooksCalled;ji.value.call(this),e||xx.call(this)}br.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(h.Layer.prototype));ji.value=h.Layer.prototype.callInitHooks;h.Layer.include({initialize:i0,_layerAdd:Bx,callInitHooks:c0});Wi.value=h.Map.prototype.removeLayer;h.Map.include({removeLayer:a0,getPitch:s0,getBearing:m0});h.Marker.include({setRotation:p0});})();
|
|
4
|
+
`:""}${e.description}`),t.textContent=r,t}function Ls(e){e.layer._map.off("simulationtimechange layerremove",e.update).on("simulationtimechange layerremove",e.update),e.layer._map.off("terrainchange",e.terrain).on("terrainchange",e.terrain),$o(e.layer,e.status),e.update()}function hy(e){dt.set(e.layer,e),e.ready&&Ls(e)}function $t(e,t){t&&(Je.get(e.layer)?.mesh===t&&(Mt(e.layer,null),be.set(e.layer,null),bt(e.layer,null)),_e(e.layer,t))}function Bs(e){e.gpu?.params?.destroy(),e.gpu?.template?.destroy(),e.gpu?.points?.destroy(),e.gpu?.vehicles?.destroy(),e.gpu=null}function gy(e){e.request?.abort(),cancelAnimationFrame(e.frame),e.frame=void 0,e.layer._map.off("simulationtimechange layerremove",e.update).off("terrainchange",e.terrain),$t(e,e.mesh),$t(e,e.route),e.mesh=e.route=null,dt.delete(e.layer),Bs(e),e.lanes.length=0,e.trips.length=0,e.tripsKey=e.loaded=null}function yy(e){e.ready=!0,e.layer._map&&Ls(e)}function Ts(e){let t=Ko.get(e.layer._map),r=t?t.live:!0;return{live:r,time:r?new Date:t.time}}function xy(e,t,r=8){let o=Math.round(e*t/3600/r),i=Array.from({length:o}),n;for(n=0;n<i.length;n++)i[n]=(n+.5)*e/o;return i}var ri=new Map;function ff(e){let t=e.split(":");return Number(t[0])*60+Number(t[1])}function vy(e,t){return e-t}function wy(e,{timeZone:t,duration:r,services:o}){let i=e instanceof Date?e:new Date(e);if(!Number.isFinite(i.getTime()))throw new Error("Invalid date");let n=ri.get(t);n||(n=new Intl.DateTimeFormat("en-GB",{timeZone:t,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hourCycle:"h23"}),ri.size>=32&&ri.delete(ri.keys().next().value),ri.set(t,n));let a={},s,m,f,p,c,l,u;for(s of n.formatToParts(i))s.type!=="literal"&&(a[s.type]=Number(s.value));let d=a.hour*60+a.minute+(a.second+i.getUTCMilliseconds()/1e3)/60,y=((Math.floor(Date.UTC(a.year,a.month-1,a.day)/864e5)+4)%7+7)%7,g=[];for({from:m,to:f,every:p=1/0,months:c,weekdays:l}of o)if(!(c?.includes(a.month)===!1||l?.includes(y)===!1))for(u=ff(m);u<=ff(f);u+=p)g.push(u);g.sort(vy);let x=[];for(u of g)d>=u&&d<u+r&&x.push({id:`${a.year}-${a.month}-${a.day}-${u}`,departure:`${String(Math.floor(u/60)).padStart(2,"0")}:${String(u%60).padStart(2,"0")}`,progress:(d-u)/r});return x}function My(e,t,r){let o=[],i,n,a,s,m,f,p,c;for(i=0;i<t.length;i++)if(n=t[i],{timetable:a,flow:s=0}=n.properties,!!n.length)if(a)for(m of wy(e,a))o.push({id:`${i}-${m.id}`,lane:n,distance:m.progress*n.length,speed:n.length/(a.duration*60),properties:{...n.properties,departure:m.departure}});else for(f=e/1e3*r,p=n.offsets||=xy(n.length,s,r),c=0;c<p.length;c++)o.push({id:`${i}-${c}`,lane:n,distance:(p[c]+f)%n.length,speed:r,properties:n.properties});return o}function Ps(e,t){e.error=t,e.status.textContent=`${e.vehicle}: Error: ${t.message}`,e.status.setAttribute("role","alert"),console.error("Traffic layer",t)}var by=Object.freeze({unlit:!0});function Ly(e,t,r,o,i,n,a,s,m,f,p,c,l,u){let d=o[0]+n*f,y=o[1]+a*f,g=o[2]+(i[2]-o[2])*f+.4,x=o[0]+n*p,w=o[1]+a*p,C=o[2]+(i[2]-o[2])*p+.4,B;for(B=0;B<6;B++)B===0||B===3?e.push(d-s,g,y-m):B===1?e.push(d+s,g,y+m):B===5?e.push(x-s,C,w-m):e.push(x+s,C,w+m),t.push(0,1,0),r.push(c,l,u)}function By(e,t,r,o,i,n,a,s,m){let f=o[n-1],p=o[n],c=p[0]-f[0],l=p[1]-f[1],u=i[n]-i[n-1];if(!u)return;let d=-l/u*2.5,y=c/u*2.5,g,x,w;for(g=Math.floor(i[n-1]/30)*30;g<i[n];g+=30)x=Math.max(0,(g-i[n-1])/u),w=Math.min(1,(g+18-i[n-1])/u),!(w<=x)&&Ly(e,t,r,f,p,c,l,d,y,x,w,a,s,m)}function Ty(e){let t=[],r=[],o=[],i,n,a,s,m,f,p,c,l;for({points:i,lengths:n,properties:a}of e)for(s=a?.route_color,m=/^[\da-f]{6}$/i.test(s)?Number.parseInt(s,16):null,f=m===null?.08:(m>>16&255)/255,p=m===null?.7:(m>>8&255)/255,c=m===null?.85:(m&255)/255,l=1;l<i.length;l++)By(t,r,o,i,n,l,f,p,c);return{position:t,normal:r,color:o}}function Cs(e,t,r,o,i=0){let n=er(e.layer,t,o,i);return n.extras.featureFaces=r,n}function Py(e){e.route=Cs(e,Ty(e.lanes),[],by)}function Ss(e){let t=20,r=5,o,i,n,a,s;for(o=0;o<e.template.position.length;o+=3)t=Math.max(t,Math.hypot(e.template.position[o],e.template.position[o+2])+Math.abs(e.side)),r=Math.max(r,e.template.position[o+1]);let m=[];for(i of e.lanes)for([n,a,s]of i.points)m.push(n-t,s,a-t,n+t,s+r,a+t);let f={attributes:{position:{data:m}}};Be(f),e.mesh.geometry.bounds=f.bounds}function Cy(e){let{trips:t,model:r,vertices:o}=e;if($t(e,e.mesh),e.mesh=null,!t.length)return;let i=[],n=[],a,s,m;for(a=0;a<t.length;a++){s=t[a];for(m of ti(r(a,s.properties)).color)i.push(m);n.push({id:s.id,properties:s.properties,faceStart:a*o/3,faceEnd:(a+1)*o/3,vertexStart:a*o,vertexEnd:(a+1)*o})}let f=i.length/3;e.mesh=Cs(e,{position:new Array(i.length).fill(0),normal:new Array(i.length).fill(0),color:i},n,vs,GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC),e.mesh.geometry.drawRange.count=f,e.mesh.extras.dynamicLights=!0,Ss(e)}function Wi(e,t){let r=e.createBuffer({size:Math.max(16,t.byteLength),usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});return e.queue.writeBuffer(r,0,t),r}function Sy(e,t){let r,o,i,n=0;for(r of e.lanes)n+=r.points.length;let a=new Float32Array(n*4),s=0;for(r of e.lanes)for(r.start=s/4,o=0;o<r.points.length;o++)i=r.points[o],a[s++]=i[0],a[s++]=i[1],a[s++]=i[2],a[s++]=r.lengths[o];e.gpu.points?.destroy(),e.gpu.points=Wi(t,a),e.lanesDirty=!1}function Ey(e){let{device:t}=v.get(e.layer);if(e.gpu?.device!==t){Bs(e);let c=new Float32Array(e.template.position.length+e.template.normal.length);c.set(e.template.position),c.set(e.template.normal,e.template.position.length),e.gpu={device:t,pipeline:t.createComputePipeline({layout:"auto",compute:{module:t.createShaderModule({code:e.shader}),entryPoint:"main"}}),params:t.createBuffer({size:16,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),template:Wi(t,c)},e.lanesDirty=!0}let r,o,i;e.lanesDirty&&Sy(e,t);let n=new Float32Array(e.trips.length*4),a=new Uint32Array(n.buffer);for(r=0;r<e.trips.length;r++)o=e.trips[r],a[r*4]=o.lane.start,a[r*4+1]=o.lane.points.length,n[r*4+2]=o.distance,n[r*4+3]=o.speed,e.mesh.extras.featureFaces[r].properties=o.properties;e.gpu.vehicles?.size>=n.byteLength?t.queue.writeBuffer(e.gpu.vehicles,0,n):(e.gpu.vehicles?.destroy(),e.gpu.vehicles=Wi(t,n));let{position:s,normal:m}=e.mesh.geometry.attributes,f=[],p;for(i=0;i<6;i++)p=i===0?e.gpu.params:i===1?e.gpu.template:i===2?e.gpu.points:i===3?e.gpu.vehicles:i===4?s.buffer:m.buffer,f.push({binding:i,resource:{buffer:p}});e.gpu.bindGroup=t.createBindGroup({layout:e.gpu.pipeline.getBindGroupLayout(0),entries:f})}function ky(e,t){return t?e.loaded?`${e.trips.length} ${e.vehicle==="boat"?"boats":e.vehicle}`:`${e.vehicle}: loading\u2026`:`${e.vehicle}: select a valid simulation date`}function _y(e,t,r,o){let i;try{o?e.trips=My(t,e.lanes,e.velocity):e.trips.length=0,i=ky(e,o)}catch(f){Ps(e,f);return}e.rebasedAt=r,e.nextCheck=r+1e3;let n="",a;for(a of e.trips)n+=`${n?",":""}${a.id}`;let s=e.outline&&!e.route&&e.lanes.length,m=n!==e.tripsKey||!!s;return s&&Py(e),n!==e.tripsKey&&(Cy(e),e.tripsKey=n),e.mesh&&Ey(e),e.error||(e.status.textContent!==i&&(e.status.textContent=i),e.status.removeAttribute("role")),m}function Iy(e,t){let{device:r}=e.gpu;e.paramFloats[0]=e.elapsed=t,e.paramFloats[1]=e.side,e.paramInts[2]=e.vertices,e.paramInts[3]=e.trips.length*e.vertices,r.queue.writeBuffer(e.gpu.params,0,e.params);let o=r.createCommandEncoder(),i=o.beginComputePass();i.setPipeline(e.gpu.pipeline),i.setBindGroup(0,e.gpu.bindGroup),i.dispatchWorkgroups(e.trips.length),i.end(),r.queue.submit([o.finish()]),e.stale=!0}function zy(e){e.litAt=performance.now();let t=[],r=e.position||={},o,i,n,a,s,m,f,p,c,l;for(o of e.trips){({x:i,y:n,z:a,dx:s,dz:m}=vo(e,o,r));for(l of e.lights)[f,p,c]=l.position,t.push({...l,position:[i-f*m-c*s,n+p,a+f*s-c*m]})}e.mesh.extras.lights=t}function Ay(e,t,r){e.mesh&&(Iy(e,(t-e.rebasedAt)/1e3),e.lights&&(!r||!(performance.now()-e.litAt<100))&&zy(e))}function Oy(e){if(e.frame=void 0,!e.ready||!e.layer._map)return;if(!v.get(e.layer)){e.frame=requestAnimationFrame(e.tick);return}e.mesh&&!(e.mesh.geometry.attributes.position.buffer.usage&GPUBufferUsage.STORAGE)&&(e.tripsKey=null,e.nextCheck=-1/0);let{live:t,time:r}=Ts(e),o=r?.getTime(),i=Number.isFinite(o),n=!1;(!t||!i||!(o>=e.rebasedAt&&o<e.nextCheck))&&(n=_y(e,r,o,i),n===void 0)||(Ay(e,o,t),(e.mesh||n)&&_(e.layer),t&&i&&(e.frame=requestAnimationFrame(e.tick)))}async function Dy(e,t,r){let o=new URL(e.url,document.baseURI).href;if(/\.m?js(?:[?#]|$)/i.test(e.url))return(await import(o)).default(t,e.layer,r);if(!e.file){let i=await fetch(o,{signal:r});if(!i.ok)throw new Error(`HTTP ${i.status}`);e.file=await i.json()}return e.file}var Ry=Object.freeze([]);function Gy({features:e=Ry}){let t=[],r,o,i,n,a,s,m,f;for({geometry:r,properties:o}of e)if(!(r?.type!=="LineString"&&r?.type!=="MultiLineString"))for(i=r.type==="MultiLineString"?r.coordinates:null,f=0;f<(i?i.length:1);f++){n=i?i[f]:r.coordinates,a=[];for([s,m]of n)a.push([m,s]);t.push({latlngs:a,properties:o??{},elevation:o?.elevation})}return t}X();b();function Uy(e){let t=ae.get(e);return ve.get(t)&&t}function Es(e){let{layer:t,lanes:r}=e,o=Uy(t._map),i=L.get(t).position[1],n,a,s;for(n of r)for(a=0;a<n.points.length;a++)s=o&&(n.elevation??ct(t._map,n.latlngs[a])),n.points[a][2]=Number.isFinite(s)&&Number.isFinite(i)?s-i:0;e.lanesDirty=!0,e.nextCheck=-1/0}function Fy(e){let{layer:t,lanes:r}=e,o=t._map.options.crs,i=o.project(O.get(t)),n=Math.cos(O.get(t).lat*T),a,s,m,f,p;for(a of r){a.points=[];for([s,m]of a.latlngs)f=o.project(new h.LatLng(s,m)),a.points.push([(f.x-i.x)*n,-(f.y-i.y)*n,0]);for(a.lengths=[0],p=1;p<a.points.length;p++)a.lengths.push(a.lengths[p-1]+Math.hypot(a.points[p][0]-a.points[p-1][0],a.points[p][1]-a.points[p-1][1]));a.length=a.lengths.at(-1)}Es(e),$t(e,e.route),e.route=null,e.tripsKey=null}function Ny(e,t,r){if(!(t.aborted||!e.layer._map)){if(e.error=null,r===e.loaded){e.nextCheck=-1/0,e.frame||e.tick();return}e.loaded=r,e.lanes=Gy(r),Fy(e),e.frame||e.tick()}}function jy(e,t,r){!t.aborted&&r.name!=="AbortError"&&Ps(e,r)}function Wy(e){let{time:t}=Ts(e);if(!Number.isFinite(t?.getTime()))return;e.request?.abort();let{signal:r}=e.request=new AbortController;Dy(e,t,r).then(Ny.bind(null,e,r),jy.bind(null,e,r))}function Zy(e,t){t?.layer&&!Pt.get(t.layer)?.time||(cancelAnimationFrame(e.frame),Wy(e),e.tick())}function $y(e){e.lanes.length&&(Es(e),$t(e,e.route),e.route=null,e.mesh&&Ss(e),e.frame||e.tick())}function Vy(e,{url:t,vehicle:r="car",side:o,outline:i,speed:n=8,...a}=vs){let{model:s,lights:m,side:f}=ly[r];o??=f,Lt(e,{tooltip:dy,nightLight:!!m,...a});let p=h.DomUtil.create("small","traffic-status");p.style.cssText="flex:0 1 auto;padding:1px 5px;border-radius:3px;background:#00000008;color:#555;",p.title=r,p.textContent=`${r}: loading\u2026`;let c=ti(s(0)),l=c.position.length,u=l/3,d=new ArrayBuffer(16),y=new Float32Array(d),g=new Uint32Array(d),x={layer:e,url:t,model:s,lights:m,side:o,outline:i,velocity:n,vehicle:r,status:p,template:c,stride:l,vertices:u,params:d,paramFloats:y,paramInts:g,ready:!1,frame:void 0,request:void 0,lanes:[],tripsKey:void 0,mesh:void 0,route:void 0,litAt:-1/0,trips:[],rebasedAt:0,nextCheck:-1/0,elapsed:0,gpu:null,lanesDirty:!0,stale:!1,loaded:void 0,file:void 0};x.shader=uy,x.tick=Oy.bind(null,x),x.update=Zy.bind(null,x),x.terrain=$y.bind(null,x),dt.set(e,x),e.on("ready",yy.bind(null,x)),e.on("add",hy.bind(null,x)),e.on("remove",gy.bind(null,x))}b();b();b();function qy(){this.keys.clear()}var Zi={KeyW:[1,0],ArrowUp:[1,0],KeyS:[-1,0],ArrowDown:[-1,0],KeyD:[0,1],ArrowRight:[0,1],KeyA:[0,-1],ArrowLeft:[0,-1]};b();va();or();H();W();function Hy(e){let t=this.layer._map;if(e.type==="pointerdown"){if(e.button!==0||e.target.closest(".leaflet-control"))return;this.dragX=e.clientX,this.dragY=e.clientY,this.dragging=!0,t.getContainer().setPointerCapture(e.pointerId)}else this.dragging&&e.type==="pointermove"?(ze(t,Math.max(20,Math.min(85,k(t)-(e.clientY-this.dragY)*.2)),S(t)-(e.clientX-this.dragX)*.25),this.dragX=e.clientX,this.dragY=e.clientY):this.dragging=!1}var $i=[["body",0,0,0],["leg",-.09,.9,1],["leg",.09,.9,-1],["arm",-.25,1.42,-1],["arm",.25,1.42,1]];X();function St(e){let{layer:t,state:r}=this,o=t._map,i=o.options.crs,n=O.get(t),a=L.get(t),s=i.project(n),m=Math.cos(n.lat*T),f=i.project(r.latlng),p=ct(o,r.latlng)||0;return e[0]=(f.x-s.x)*m,e[1]=p+(r.height??0)-a.position[1],e[2]=-(f.y-s.y)*m,e}function ks(){let[e,t,r]=St.call(this,this.local),o=-this.state.heading,i=Math.cos(o),n=Math.sin(o),a,s,m,f,p;for(a=0;a<$i.length;a++)[,s,m,f]=$i[a],p=this.meshes[a],p.position[0]=e+s*i,p.position[1]=t+m,p.position[2]=r-s*n,p.rotation[0]=f*this.swing*Math.sin(this.state.phase),p.rotation[1]=o;_(this.layer)}function Yy(){this.meshes&&ks.call(this)}function _s(){let e=this.layer._map;cancelAnimationFrame(this.frame),this.keys.clear(),this.dragging=!1,this.state.height=this.verticalSpeed=0,h.DomEvent.off(document,"keydown keyup",this.onKey),h.DomEvent.off(window,"blur",this.onBlur);let t,r;if(this.meshes)for(t of this.meshes)_e(this.layer,t);if(this.meshes=null,this.button.setAttribute("aria-pressed","false"),this.button.style.background="#fff",this.hint.style.display="none",!(!e||!this.saved)){h.DomEvent.off(e.getContainer(),"pointerdown pointermove pointerup pointercancel",this.onPointer),e.off("terrainchange",this.onTerrain),e.options.scrollWheelZoom=this.saved.scrollWheelZoom;for(r of this.saved.handlers)e[r].enable();e.setView(this.state.latlng,this.saved.zoom,{animate:!1}),Ir(e,this.saved.pitch),this.saved=null}}function Xy(e){if(e.type==="keyup"&&e.code==="Space"&&this.keys.delete("Space"),!(e.target.closest?.("input:not([type=checkbox], [type=radio]), select, textarea, [contenteditable]")||e.ctrlKey||e.altKey||e.metaKey)){if(e.type==="keydown"&&e.code==="Escape"){this.stop();return}!Zi[e.code]&&e.code!=="Space"||(e.preventDefault(),e.type==="keydown"?this.keys.add(e.code):this.keys.delete(e.code))}}X();b();var Ky=["dragging","keyboard","doubleClickZoom","boxZoom"];H();W();va();function Jy(e){return this.keys.has("Space")?(this.verticalSpeed=6,this.state.height+=this.verticalSpeed*e,!0):!this.verticalSpeed&&!this.state.height?!1:(this.state.height=Math.max(0,this.state.height+this.verticalSpeed*e-9.81*e*e/2),this.verticalSpeed=this.state.height>0?this.verticalSpeed-9.81*e:0,!0)}b();var pf=new WeakMap;function Qy(e,t,r){let o,i,n;for(o=Math.floor(Math.min(t[0],t[3],t[6])/8);o<=Math.floor(Math.max(t[0],t[3],t[6])/8);o++)for(i=Math.floor(Math.min(t[2],t[5],t[8])/8);i<=Math.floor(Math.max(t[2],t[5],t[8])/8);i++)n=o+","+i,e.has(n)||e.set(n,[]),e.get(n).push(r)}function Is(e){let t=pf.get(e.geometry);if(t)return t;let r=e.worldMatrix,{position:o,index:i,normal:n,uv:a,instanceOffset:s}=e.geometry.attributes,m=Zn(o,i),f=m*(s?.count??1),p=[],c=[],l=new Map,u=[0,0,0],d=[0,0,0],y=[0,0,0],g=[],x,w,C,B,P,D,te,U,N,K,pe,ye,Qe,Le,ft,Ge=-1/0;for(x=0;x<f;x+=3)w=i?i.data[x%m]:x%m,!(e.program.nightLight&&a&&a.data[w*2]<=2)&&($n(e,x,u,d,y),g[0]=r[0]*u[0]+r[4]*u[1]+r[8]*u[2]+r[12],g[1]=r[1]*u[0]+r[5]*u[1]+r[9]*u[2]+r[13],g[2]=r[2]*u[0]+r[6]*u[1]+r[10]*u[2]+r[14],g[3]=r[0]*d[0]+r[4]*d[1]+r[8]*d[2]+r[12],g[4]=r[1]*d[0]+r[5]*d[1]+r[9]*d[2]+r[13],g[5]=r[2]*d[0]+r[6]*d[1]+r[10]*d[2]+r[14],g[6]=r[0]*y[0]+r[4]*y[1]+r[8]*y[2]+r[12],g[7]=r[1]*y[0]+r[5]*y[1]+r[9]*y[2]+r[13],g[8]=r[2]*y[0]+r[6]*y[1]+r[10]*y[2]+r[14],B=g[3]-g[0],P=g[4]-g[1],D=g[5]-g[2],te=g[6]-g[0],U=g[7]-g[1],N=g[8]-g[2],K=P*N-D*U,pe=B*U-P*te,ye=D*te-B*N,Qe=Math.hypot(K,ye,pe),!(!Qe||Math.abs(ye)>.9*Qe)&&(n&&(C=w*3,(r[0]*n.data[C]+r[4]*n.data[C+1]+r[8]*n.data[C+2])*K+(r[2]*n.data[C]+r[6]*n.data[C+1]+r[10]*n.data[C+2])*pe<0&&(K=-K,pe=-pe)),Le=Math.hypot(K,pe),ft=c.length/2,p.push(...g),Ge=Math.max(Ge,g[0],g[3],g[6]),c.push(K/Le,pe/Le),Qy(l,g,ft)));return t={tri:Float32Array.from(p),nrm:Float32Array.from(c),cells:l,maxX:Ge,origin:[r[12],r[13],r[14]]},pf.set(e.geometry,t),t}function zs(e,t,r,o,i,n,a){let s=t*9,m=e[s+3]-e[s],f=e[s+4]-e[s+1],p=e[s+5]-e[s+2],c=e[s+6]-e[s],l=e[s+7]-e[s+1],u=e[s+8]-e[s+2],d=-a*l,y=a*c-n*u,g=n*l,x=m*d+f*y+p*g;if(Math.abs(x)<1e-9)return-1;let w=r-e[s],C=o-e[s+1],B=i-e[s+2],P=(w*d+C*y+B*g)/x;if(P<0||P>1)return-1;let D=C*p-B*f,te=B*m-w*p,U=w*f-C*m,N=(n*D+a*U)/x;return N<0||P+N>1?-1:(c*D+l*te+u*U)/x}function ex(e,t,r,o,i,n,a,s){let m,f,p,c;for(m=Math.floor(t/8);m<=a;m++)if(f=e.cells.get(`${m},${s}`),!!f)for(p of f)i.has(p)||(i.add(p),c=zs(e.tri,p,t,r,o,1,0),c>1e-4&&n.push(c))}function tx(e){let t,r,o;for(t=1;t<e.length;t++){for(o=e[t],r=t-1;r>=0&&e[r]>o;)e[r+1]=e[r--];e[r+1]=o}let i=0,n=-1/0;for(o of e)o-n>1e-4&&i++,n=o;return i}function cf(e,t,r,o,i,n){let a=e.geometry;if(!e.visible||!a?.attributes?.position?.data||e.program?.depthTest===!1)return!1;a.bounds||Be(a);let s=a.bounds,m=e.worldMatrix,f=s.center,p=m[0]*f[0]+m[4]*f[1]+m[8]*f[2]+m[12],c=m[1]*f[0]+m[5]*f[1]+m[9]*f[2]+m[13],l=m[2]*f[0]+m[6]*f[1]+m[10]*f[2]+m[14],u=s.radius*Math.max(Math.hypot(m[0],m[1],m[2]),Math.hypot(m[4],m[5],m[6]),Math.hypot(m[8],m[9],m[10]));if(Math.hypot(p-t,c-r,l-o)>u)return!1;let d=Is(e),y=Math.floor(d.maxX/8);if(t>=d.maxX)return!1;let g=Math.floor(o/8),x=n;return x.length=0,i.clear(),ex(d,t,r,o,i,x,y,g),tx(x)%2===1}function rx(e,t,r,o,i,n){o<1e-6?(e.normal[0]=-i,e.normal[1]=-n):(e.normal[0]=t/o,e.normal[1]=r/o)}function As(e,t,r,o,i,n,a,s){let m=dt.get(e);if(!m?.mesh||!m.trips.length)return!1;let f=m.collisionBounds;if(!f){f=m.collisionBounds={radius:0,minY:1/0,maxY:-1/0};let K,pe,ye,Qe;for(K=0;K<m.template.position.length;K+=3)pe=m.template.position[K],ye=m.template.position[K+1],Qe=m.template.position[K+2],f.radius=Math.max(f.radius,Math.hypot(pe,Qe)),f.minY=Math.min(f.minY,ye),f.maxY=Math.max(f.maxY,ye)}let p=L.get(e),c=m.position||={},l=Math.max(p.scale[0],p.scale[1],p.scale[2]),u=f.radius*l+.35,d,y,g,x,w,C,B,P,D,te,U,N;for(d of m.trips)if({x:U,y:D,z:N}=vo(m,d,c),D=p.position[1]+(D+f.minY)*p.scale[1],te=p.position[1]+(c.y+f.maxY)*p.scale[1],!(D>r+1.7*l||te<r+.2*l)&&(U=p.position[0]+U*p.scale[0],N=p.position[2]+N*p.scale[2],y=(U-t)*i+(N-o)*n,g=Math.max(0,Math.min(a,y)),x=t+g*i-U,w=o+g*n-N,C=x*x+w*w,!(C>=u*u))){if(a===0){s.found=!0,P=Math.hypot(t-U,o-N),s.normal[0]=P?(t-U)/P:0,s.normal[1]=P?(o-N)/P:0;continue}B=Math.max(0,y-Math.sqrt(u*u-C)),!(B>a||B>=s.best)&&(s.best=B,s.found=!0,P=Math.hypot(t+B*i-U,o+B*n-N),rx(s,t+B*i-U,o+B*n-N,P,i,n))}return s.found}function lf(e){let{layer:t,local:r,hitData:o}=e,i=z.get(t);if(!i||!G.get(i))return!1;we(Q.get(t));let n=L.get(t),a=St.call(e,r),s=n.position[0]+a[0]*n.scale[0],m=n.position[1]+a[1]*n.scale[1],f=n.position[2]+a[2]*n.scale[2],p=G.get(i),c,l,u,d;for(c of p)if(!(c===t||I.get(c)==="terrain")){if(I.get(c)==="traffic"){if(o.best=0,o.found=!1,As(c,s,m,f,0,0,0,o))return!0;continue}for(d=o.nodes,d.length=0,L.get(c)&&d.push(L.get(c));d.length;)if(l=d.pop(),!!l.visible){if(l.geometry&&(cf(l,s,m+.45*n.scale[1],f,o.seen,o.intersections)||cf(l,s,m+1.35*n.scale[1],f,o.seen,o.intersections)))return!0;for(u of l.children)d.push(u)}}return!1}function Os(){if(!this.saved||!lf(this))return!1;let e=this.layer._map,t=this.state.latlng,r=this.state.height,o,i,n;for(o=.5;o<=20;o+=.5)for(i=0;i<Math.PI*2;i+=Math.PI/4)if(n=new h.LatLng(t.lat+Math.cos(i)*o/111320,t.lng+Math.sin(i)*o/(111320*Math.cos(t.lat*Math.PI/180))),this.state.latlng=n,this.state.height=0,!lf(this))return this.verticalSpeed=0,e.setView(n,e.getZoom(),{animate:!1}),!0;return this.state.latlng=t,this.state.height=r,!1}function Ds(e){return Math.atan2(Math.sin(e),Math.cos(e))}function ox(e,t){return e===t||Ut.get(e)==="terrain"||Ut.get(e)==="traffic"}function ix(e){let t=ee.get(this.layer),r=St.call(this,this.local),o=L.get(this.layer),i=o.position[0]+r[0]*o.scale[0],n=o.position[1]+r[1]*o.scale[1],a=o.position[2]+r[2]*o.scale[2];if(n>e||this.verticalSpeed>0)return;we(Q.get(this.layer)),t.origin[0]=i,t.origin[1]=e+.01,t.origin[2]=a,t.direction[0]=0,t.direction[1]=-1,t.direction[2]=0,t.meshes.length=0;let s,m;for(s of G.get(z.get(this.layer)))ox(s,this.layer)||I.get(s)==="raster"||s.options.nightLight||At(L.get(s),qn,t.meshes);for(m of Vn(t,t.meshes)){if(m.point[1]<n-.001)break;this.state.height+=(m.point[1]-n)/o.scale[1],this.verticalSpeed=0;break}t.meshes.length=0}b();X();function nx(e,t,r,o,i,n){let{dx:a,dz:s,seen:m}=r,f,p,c;for(f of e)if(!(m.has(f)||a*t.nrm[f*2]+s*t.nrm[f*2+1]>=0))for(m.add(f),p=.4;p<2;p+=1.1)c=zs(t.tri,f,o,i+p,n,a,s),c>=0&&c<r.best&&(r.best=c,r.found=!0,r.normal[0]=t.nrm[f*2],r.normal[1]=t.nrm[f*2+1])}function ax(e,t){if(!e.visible)return!0;if(!e.geometry?.attributes?.position?.data||e.program?.depthTest===!1)return;e.geometry.bounds||Be(e.geometry);let r=e.worldMatrix,{center:o,radius:i}=e.geometry.bounds,{x:n,y:a,z:s,dx:m,dz:f,reach:p}=t;if(Math.hypot(r[0]*o[0]+r[4]*o[1]+r[8]*o[2]+r[12]-n,r[2]*o[0]+r[6]*o[1]+r[10]*o[2]+r[14]-s)>i*Math.hypot(r[0],r[1],r[2])+p)return;let c=Is(e),l=n-r[12]+c.origin[0],u=a-r[13]+c.origin[1],d=s-r[14]+c.origin[2];t.seen.clear();let g,x,w;for(g=Math.floor(Math.min(l,l+m*p)/8);g<=Math.floor(Math.max(l,l+m*p)/8);g++)for(x=Math.floor(Math.min(d,d+f*p)/8);x<=Math.floor(Math.max(d,d+f*p)/8);x++)w=c.cells.get(g+","+x),w&&nx(w,c,t,l,u,d)}function sx(e,t,r,o,i,n,a,s){we(Q.get(e)),s.x=t,s.y=r,s.z=o,s.dx=i,s.dz=n,s.reach=a,s.best=a,s.found=!1;let m;for(m of G.get(z.get(e)))if(!(m===e||I.get(m)==="terrain")){if(I.get(m)==="traffic"){As(m,t,r,o,i,n,a,s);continue}At(L.get(m),ax,s)}return s.found?s.normal:null}function uf(e,t,r){let o=Math.hypot(e,t);return o>1e-6&&sx(this.layer,r[0],r[1],r[2],e/o,-t/o,o+.3,this.hitData)}function mx(e,t){let r=e*this.speed*t,{lat:o,lng:i}=this.state.latlng,{position:n,scale:a}=L.get(this.layer),s=Math.sin(this.state.heading)*r,m=Math.cos(this.state.heading)*r,f=St.call(this,this.local),p;for(p=0;p<f.length;p++)f[p]=n[p]+a[p]*f[p];let c=uf.call(this,s,m,f);if(c){let l=s*c[0]-m*c[1];s-=l*c[0],m+=l*c[1],uf.call(this,s,m,f)&&(s=m=0)}this.state.latlng=new h.LatLng(o+m/111320,i+s/(111320*Math.cos(o*T))),this.state.phase+=Math.hypot(s,m)/1.6*Math.PI}Yr();X();W();or();H();function fx(e,t,r){let o=this.layer._map;if(e||t){let n=S(o)*T,a=Ds(-this.state.heading-n);Math.abs(a)>.001&&ze(o,k(o),(n+a*Math.min(1,r*4))*He),o.setView(this.state.latlng,o.getZoom(),{animate:!1})}let i=e?.9:0;return Math.abs(this.swing-i)>.001?(this.swing+=(i-this.swing)*Math.min(1,r*10),!0):!1}function px(e,t,r,o,i,n){o&&(e.state.heading=Ds(e.state.heading+o*2.5*i),n=!0),r&&(mx.call(e,r,i),n=!0),n&&ix.call(e,t),fx.call(e,r,o,i)&&(n=!0),n&&ks.call(e)}function cx(e){let t=this.layer;this.frame=requestAnimationFrame(this.step);let r=Math.min(.1,(e-(this.last??e))/1e3);if(this.last=e,!v.get(t))return;let o=!1,i,n;if(e>=this.nextClearanceCheck&&(this.nextClearanceCheck=e+250,Os.call(this)&&(o=!0)),!this.meshes){this.meshes=[];for([i]of $i)this.meshes.push(er(t,ti(ws[i])));o=!0}let a=L.get(t).position[1]+St.call(this,this.local)[1]*L.get(t).scale[1];Jy.call(this,r)&&(o=!0);let s=0,m=0;for(n of this.keys)s+=Zi[n]?.[0]||0,m+=Zi[n]?.[1]||0;s=Math.sign(s),m=Math.sign(m),px(this,a,s,m,r,o)}function Rs(){let e=this.layer._map;if(this.saved||!e)return;this.state.latlng=e.getCenter(),this.state.height=this.verticalSpeed=0;let t=e.getSize().y*1.5/this.distance,r=Math.min(e.getMaxZoom(),Math.log2(t*Xt*Math.cos(this.state.latlng.lat*T)/256)),o;this.saved={zoom:e.getZoom(),pitch:k(e),scrollWheelZoom:e.options.scrollWheelZoom,handlers:[]};for(o of Ky)e[o]?.enabled()&&this.saved.handlers.push(o);for(o of this.saved.handlers)e[o].disable();e.options.scrollWheelZoom=this.saved.scrollWheelZoom&&"center",this.state.heading=-S(e)*T,e.setView(this.state.latlng,r,{animate:!1}),Ir(e,75),Os.call(this),h.DomEvent.on(document,"keydown keyup",this.onKey),h.DomEvent.on(window,"blur",this.onBlur),h.DomEvent.on(e.getContainer(),"pointerdown pointermove pointerup pointercancel",this.onPointer),e.on("terrainchange",this.onTerrain),this.button.setAttribute("aria-pressed","true"),this.button.style.background="#e4e4e4",this.hint.style.display="",this.last=void 0,this.nextClearanceCheck=0,this.frame=requestAnimationFrame(this.step)}function lx(){this.saved?_s.call(this):Rs.call(this)}function ux(e,{speed:t,distance:r,...o}){let i=new h.Layer;Ut.set(i,"walk"),Lt(i,o);let n=new Set,a=h.DomUtil.create("div","leaflet-bar leaflet-control");a.style.cssText="display:flex;align-items:center;background:#fff;";let s=h.DomUtil.create("button","",a);s.type="button",s.title="Walk",s.setAttribute("aria-label","Walk"),s.setAttribute("aria-pressed","false"),s.textContent="\u{1F6B6}",s.style.cssText="width:30px;height:30px;padding:0;border:0;border-radius:4px;background:#fff;font-size:18px;line-height:30px;cursor:pointer;";let m=h.DomUtil.create("small","",a);m.style.cssText="display:none;padding:0 8px;color:#333;white-space:nowrap;",m.textContent="W/S: run \xB7 A/D: turn \xB7 hold Space: ascend \xB7 drag: look around \xB7 Esc: exit",h.DomEvent.disableClickPropagation(a);let f={layer:i,speed:t,distance:r,keys:n,container:a,button:s,hint:m,meshes:null,frame:null,last:void 0,nextClearanceCheck:0,swing:0,verticalSpeed:0,saved:null,hitData:null,local:null,state:e.walker={latlng:null,heading:0,phase:0,height:0}};ps.set(i,f.state),f.step=cx.bind(f),f.onKey=Xy.bind(f),f.onBlur=qy.bind(f),f.onPointer=Hy.bind(f),f.onTerrain=Yy.bind(f),f.start=Rs.bind(f),f.stop=_s.bind(f),f.toggle=lx.bind(f),e._walk=f,h.DomEvent.on(s,"click",f.toggle)}function dx(e){h.Util.setOptions(this,e),ux(this,this.options)}function hx(e){let t=It.get(e);if(t?.control&&t.control!==this)throw this._map=null,new Error("Only one Walk control can be active per map");return t||(t={control:null,hitData:{x:0,y:0,z:0,dx:0,dz:0,reach:0,best:0,found:!1,seen:new Set,intersections:[],nodes:[],normal:[0,0]},local:[0,0,0]},It.set(e,t)),t.control=this,t.local.fill(0),t.hitData.seen.clear(),t.hitData.normal.fill(0),this._walk.hitData=t.hitData,this._walk.local=t.local,this._walk.layer.addTo(e),this._walk.container}function gx(e){let t=It.get(e);t?.control===this&&(this._walk.stop(),this._walk.layer.remove(),t.control=null,t.hitData.seen.clear(),this._walk.hitData=null,this._walk.local=null)}h.Control.Walk=h.Control.extend({options:{position:"bottomright",speed:70,distance:20},initialize:dx,onAdd:hx,onRemove:gx});b();var Gs=new WeakMap;var Us=new WeakMap;var Fs=new WeakMap;function yx(){return{}}function xx(e){return this._project(),this._parts=this._rings,Gs.get(this).call(this,e)}function vx(){return this._project(),Us.get(this).call(this)}function wx(){Fs.get(this).call(this),this._container.remove()}var Vt=new Map;var Et={value:null};function Mx(e){Vt.delete(e),wr.set(e,null),!Vt.size&&Et.value!==null&&(cancelAnimationFrame(Et.value),Et.value=null)}function bx(){Et.value=null;let e=[...Vt],t,r;for([t,r]of e)Vt.get(t)===r&&(Vt.delete(t),wr.set(t,null),Ns.call(t))}function Lx(e){qo.set(e,(qo.get(e)||0)+1),Vt.set(e,qo.get(e)),Et.value===null&&(Et.value=requestAnimationFrame(bx)),wr.set(e,Et.value)}function Ns(){if(!this._map)return;let e=this,t=Date.now(),r=!1,o=!1,i,n;for(i in this._tiles)Object.hasOwn(this._tiles,i)&&(n=this._tiles[i],!(!n.current||!n.loaded)&&(n._gpuOpacity=this._map._fadeAnimated?Math.min(1,(t-n.loaded)/200):1,n._gpuOpacity<1?r=!0:n.active||(this._onOpaqueTile(n),n.active=!0,o=!0)));o&&!this._noPrune&&this._pruneTiles(),xt(this),Mx(e),r&&Lx(e)}var js=[];function Bx(){js.shift()?.fire("load")}function Tx(){this._image||this._initImage(),this._image.complete&&this._image.naturalWidth&&(js.push(this),queueMicrotask(Bx))}function Px(){return xt(this),this}function Cx(){this instanceof h.Polyline||this instanceof h.CircleMarker?(this.beforeAdd=this._updateBounds=at,this.redraw=Px,I.set(this,"path"),this instanceof h.Polyline&&(Gs.set(this,this.closestLayerPoint),this.closestLayerPoint=xx),this instanceof h.Circle&&(Us.set(this,this.getBounds),this.getBounds=vx)):this instanceof h.GridLayer?(Fs.set(this,this._initContainer),this._initContainer=wx,this._updateOpacity=Ns):this instanceof h.ImageOverlay&&!(this instanceof h.VideoOverlay)&&!(this instanceof h.SVGOverlay)&&(I.set(this,"image"),this._reset=xt)}b();function Sx(){Zr.get(this).off(vr.get(this),this),Zr.set(this,null),vr.set(this,null)}function Ex(e,t){switch(I.get(e)){case"3d":return hs(e,t);case"raster":return sg(e,t);case"terrain":return Gg(e,t);case"image":return Tx.call(e,t);case"time":return Xg.call(e,t)}}function kx(e){if(!e._map)return;let t;for(t of V.get(e).values())Fr(e,t);V.get(e).clear(),Nr(e)}function _x(e){let t={};return oe.get(e)&&(t.moveend=t.zoomend=t.rotate=t.pitch=t.resize=Nr.bind(null,e)),(q.get(e)||oe.get(e))&&(t.terrainchange=kx.bind(null,e)),t}b();function Ix(e){return!ur.get(e)&&(e instanceof h.GridLayer||e instanceof h.Polyline||e instanceof h.CircleMarker||e instanceof h.Marker&&!(e.options.icon instanceof h.DivIcon)||e instanceof h.ImageOverlay&&!(e instanceof h.VideoOverlay)&&!(e instanceof h.SVGOverlay))}function zx(e){let t=Ix(this);t&&((this instanceof h.GridLayer||this instanceof h.ImageOverlay)&&(this.options.crossOrigin||=!0),this instanceof h.Marker&&(this.options.icon.options.crossOrigin||=!0));let r=e.target;r.hasLayer(this)&&(I.get(this)?(this._map=r,this._zoomAnimated=r._zoomAnimated,I.get(this)!=="pending"&&I.get(this)!=="time"&&(vr.set(this,I.get(this)==="raster"?rg(this):ur.get(this)?_x(this):yx()),Zr.set(this,r),r.on(vr.get(this),this),this.once("remove",Sx,this)),Ex(this,r),this.fire("add"),r.fire("layeradd",{layer:this})):Br.value._layerAdd.call(this,e),!(!t||!e.target.hasLayer(this))&&Jn(this,e.target))}b();var Ws=[];var Zs={value:Promise.resolve()};function Ax(e,t){q.set(e,!0),Lt(e,t)}function Ox(e,t,r){if(!Number.isSafeInteger(t)||!Number.isSafeInteger(r)||t<0||r<=0||r>32e6||!Number.isSafeInteger(t+r)||e.size!==void 0&&t+r>e.size)throw new Error("Invalid COG byte range")}function Dx(e,t,r,o){if(!t||Number(t[1])!==r||Number(t[2])!==r+o-1||!Number.isSafeInteger(Number(t[3]))||Number(t[3])<r+o||(e.containerSize??e.size)!==void 0&&(e.containerSize??e.size)!==Number(t[3]))throw new Error("Invalid COG range response")}function Rx(e){return e.status!==200||Number(e.headers.get("Content-Length"))>32e6}function Gx(e,t,r,o){let i=t.headers.get("ETag");if(e.etag&&e.etag!==i)throw new Error("COG changed; recreate the layer");i&&(e.etag=i);let n=/^bytes (\d+)-(\d+)\/(\d+)$/.exec(t.headers.get("Content-Range")||"");if(t.status===206)Dx(e,n,r,o),e.baseOffset===void 0&&(e.size=Number(n[3]));else if(Rx(t))throw new Error("COG server must support byte ranges for files over 32 MB")}async function Ux(e,t){let r=e.body.getReader(),o=[],i=0,n;try{for(;!(n=await r.read()).done;){if(i+=n.value.byteLength,i>(e.status===206?t:32e6))throw await r.cancel(),new Error("Oversized COG response");o.push(n.value)}}finally{r.releaseLock()}let a=new Uint8Array(i),s=0,m;for(m of o)a.set(m,s),s+=m.length;return a}async function $e(e,t,r,o){if(o?.throwIfAborted(),Ox(e,t,r),e.full)return e.full.slice(t,t+r);let i=(e.baseOffset||0)+t,n=await fetch(e.url,{headers:{Range:`bytes=${i}-${i+r-1}`},signal:o});if(!n.ok)throw new Error(`Unable to read COG: HTTP ${n.status}`);Gx(e,n,i,r);let a=await Ux(n,r);if(n.status===200){if(e.baseOffset===void 0)e.size=a.byteLength;else if(a.byteLength!==e.containerSize)throw new Error("Truncated PMTiles COG container");e.full=e.baseOffset===void 0?a.buffer:a.slice(e.baseOffset,e.baseOffset+e.size)}let s=n.status===200?e.full.slice(t,t+r):a.buffer;if(s.byteLength!==r)throw new Error("Truncated COG byte range");return s}var Fx=[256,257,258,259,262,277,284,317,322,323,324,325,339,33550,33922,34735];async function Nx(e,t,r,o,i){let n=t.getUint16(r*12+2,i),a=n===3?2:n===4?4:n===12?8:0,s=t.getUint32(r*12+4,i);if(!a||!s||s>1048576)throw new Error(`Unsupported COG tag ${o}`);let m=a*s<=4?new DataView(t.buffer,r*12+8,4):new DataView(await $e(e,t.getUint32(r*12+8,i),a*s)),f=[],p;for(p=0;p<s;p++)f.push(n===3?m.getUint16(p*a,i):n===4?m.getUint32(p*a,i):m.getFloat64(p*a,i));return f}async function jx(e,t){let r=e.little,o=new DataView(await $e(e,t,2)).getUint16(0,r);if(!o||o>128)throw new Error("Invalid COG directory size");let i=new DataView(await $e(e,t+2,o*12+4)),n=new Map,a,s;for(a=0;a<o;a++){if(s=i.getUint16(a*12,r),s===42113)throw new Error("COG nodata tags are not supported; export complete tiles");if(s===34264)throw new Error("COG affine transformation matrices are not supported");if(Fx.includes(s)){if(n.has(s))throw new Error("Duplicate COG tag");n.set(s,await Nx(e,i,a,s,r))}}return{tags:n,next:i.getUint32(o*12,r)}}function Wx(e,t,r){return!!t&&!!r&&t%256===0&&r%256===0&&e.get(322)?.[0]===256&&e.get(323)?.[0]===256&&(e.get(259)?.[0]===1||e.get(259)?.[0]===8)&&(e.get(284)?.[0]??1)===1&&(e.get(317)?.[0]??1)===1}function Zx(e,t,r,o,i,n,a){return i?e.get(262)?.[0]===1:(t===3||t===4)&&r?.length===t&&n&&a&&e.get(262)?.[0]===2}function $x(e){let t=e.get(256)?.[0],r=e.get(257)?.[0],o=e.get(277)?.[0]??1,i=e.get(258),n=e.get(339)||[1],a=!0,s=!0,m=!0,f;for(f of i||[])a&&=f===8;for(f of n)s&&=f===1,m&&=f===3;let p=o===1&&i?.length===1&&i[0]===32&&m;if(!Wx(e,t,r)||!Zx(e,o,i,n,p,a,s))throw new Error("Unsupported COG profile: expected tiled 256px RGB(A) Uint8 or Float32, DEFLATE without predictor");return{width:t,height:r,samples:o,elevation:p}}function Vx(e){let t=!1,r=!1,o;if(e)for(o=4;o<e.length;o+=4)e[o+1]!==0||e[o+2]!==1||(e[o]===3072&&e[o+3]===3857&&(t=!0),e[o]===1025&&e[o+3]===1&&(r=!0));return t&&r}function df(e){let t;for(t of e||[])if(!Number.isFinite(t))return!1;return!0}function qx(e,t,r){return!!e&&e[0]===1&&e.length===4+e[3]*4&&!!t&&t.length===3&&df(t)&&t[0]>0&&Math.abs(t[0]-t[1])<=1e-8&&!!r&&r.length===6&&df(r)&&r[0]===0&&r[1]===0}function Hx(e,t,r,o){let i=e.get(34735),n=e.get(33550),a=e.get(33922);if(!qx(i,n,a)||!Vx(i))throw new Error("COG must use north-up EPSG:3857 PixelIsArea georeferencing");return{width:t,height:r,resolution:n[0],left:a[3],top:a[4],elevation:o}}function Yx(e,t,r,o,i,n,a){return o>=0&&o<=24&&Math.abs(20037508342789244e-9*2/(256*2**o)-a)<=a*1e-7&&(!r.elevation||Number.isInteger(i)&&Number.isInteger(n))&&Math.abs(t.width/r.width-t.height/r.height)<=1e-7&&r.elevation===t.elevation&&i>=0&&n>=0&&i+r.width/256<=2**o&&n+r.height/256<=2**o&&!e.levels.has(o)&&!(t.elevation&&e.levels.size)}function Xx(e,t){if(t.offsets?.length!==t.columns*t.rows||t.lengths?.length!==t.offsets.length)throw new Error("Invalid COG tile offsets or lengths");let r;for(r=0;r<t.offsets.length;r++)if(!t.offsets[r]||!t.lengths[r]||t.lengths[r]>1048576||t.offsets[r]+t.lengths[r]>e.size)throw new Error("Invalid COG tile offsets or lengths")}function Kx(e,t,r){let o=t.tags,i=$x(o);r.base||(r.base=Hx(o,i.width,i.height,i.elevation));let n=r.base,a=n.resolution*n.width/i.width,s=Math.round(Math.log2(20037508342789244e-9*2/(256*a))),m=20037508342789244e-9*2/2**s,f=(n.left+20037508342789244e-9)/m,p=(20037508342789244e-9-n.top)/m;if(Math.abs(f-Math.round(f))<1e-6&&(f=Math.round(f)),Math.abs(p-Math.round(p))<1e-6&&(p=Math.round(p)),!Yx(e,n,i,s,f,p,a))throw new Error("COG levels must align with the Web Mercator XYZ tile grid");let c={x:f,y:p,columns:i.width/256,rows:i.height/256,samples:i.samples,elevation:i.elevation,compression:o.get(259)[0],offsets:o.get(324),lengths:o.get(325)};Xx(e,c),e.levels.set(s,c),r.minZoom=Math.min(r.minZoom,s),r.maxZoom=Math.max(r.maxZoom,s)}async function Jx(e,t){let r={base:null,minZoom:1/0,maxZoom:-1/0},o=new Set,i;for(;t;){if(o.has(t)||o.size>=24)throw new Error("Cyclic or excessive COG directories");o.add(t),i=await jx(e,t),Kx(e,i,r),t=i.next}if(!r.base)throw new Error("COG has no image directory");if(e.levels.size!==r.maxZoom-r.minZoom+1)throw new Error("COG overview zooms must be contiguous");return{base:r.base,minZoom:r.minZoom,maxZoom:r.maxZoom}}async function Qx(e,t,r){if(r===1){if(e.byteLength!==t)throw new Error("Invalid uncompressed COG tile size");return e}let i=new Blob([e]).stream().pipeThrough(new DecompressionStream("deflate")).getReader(),n=new Uint8Array(t),a=0,s;try{for(;!(s=await i.read()).done;){if(a+s.value.length>t)throw await i.cancel(),new Error("Oversized decoded COG tile");n.set(s.value,a),a+=s.value.length}}finally{i.releaseLock()}if(a!==t)throw new Error("Truncated decoded COG tile");return n.buffer}async function $s(e,t,r,o,i){let n=o*t.columns+r;return Qx(await $e(e,t.offsets[n],t.lengths[n],i),256*256*(t.elevation?4:t.samples),t.compression)}async function e0(e,t,r,o,i){let n=await $s(e,t,r-t.x,o-t.y,i);i?.throwIfAborted();let a=new DataView(n),s=new Float32Array(256*256),m,f;for(m=0;m<s.length;m++){if(f=a.getFloat32(m*4,e.little),!Number.isFinite(f)||f<-12e3||f>1e4)throw new Error("Invalid or missing COG elevation sample");s[m]=f}return{data:s.buffer}}async function t0(e,t,r,o,i){let n=new OffscreenCanvas(256,256),a=n.getContext("2d");if(!a)throw new Error("Unable to create COG tile canvas");let s=(r-t.x)*256,m=(o-t.y)*256,f,p,c,l,u,d,y;for(p=Math.max(0,Math.floor(m/256));p<Math.min(t.rows,Math.ceil(m/256+1));p++)for(f=Math.max(0,Math.floor(s/256));f<Math.min(t.columns,Math.ceil(s/256+1));f++){for(c=new Uint8Array(await $s(e,t,f,p,i)),i?.throwIfAborted(),l=new Uint8ClampedArray(256*256*4),u=0,d=0;u<c.length;u+=t.samples,d+=4)l[d]=c[u],l[d+1]=c[u+1],l[d+2]=c[u+2],l[d+3]=t.samples===4?c[u+3]:255;y=await createImageBitmap(new ImageData(l,256,256)),a.drawImage(y,f*256-s,p*256-m),y.close()}let g=n.transferToImageBitmap();return i?.aborted&&(g.close(),i.throwIfAborted()),{image:g}}function r0(e,t,r){return Number.isSafeInteger(e)&&Number.isSafeInteger(t)&&Number.isSafeInteger(r)&&e>=0&&e<=24&&t>=0&&r>=0&&t<2**e&&r<2**e}async function o0(e,t,r,o,i){if(i?.throwIfAborted(),!r0(t,r,o))throw new Error("Invalid COG tile coordinates");let n=e.levels.get(t);if(!(!n||r+1<=n.x||o+1<=n.y||r>=n.x+n.columns||o>=n.y+n.rows))return n.elevation?e0(e,n,r,o,i):t0(e,n,r,o,i)}function i0(e){return e.header}function n0(e,t){if(t.tileType!==0||t.tileCompression!==1||!Number.isSafeInteger(t.jsonMetadataOffset)||!Number.isSafeInteger(t.jsonMetadataLength)||t.jsonMetadataLength<=0||t.jsonMetadataLength>1048576||!Number.isSafeInteger(t.tileDataOffset)||!Number.isSafeInteger(t.tileDataLength)||t.tileDataOffset<127||t.tileDataOffset+t.tileDataLength>e.size)throw new Error("Invalid PMTiles COG asset container")}async function a0(e,t,r){let o=JSON.parse(new TextDecoder().decode(await Do(await $e(e,t.jsonMetadataOffset,t.jsonMetadataLength),t.internalCompression))),i=o.cog_assets||{},n=Object.hasOwn(i,r)?o.cog_assets[r]:null;if(o.format!=="cog-assets-v1"||!n||!Number.isSafeInteger(n.offset)||!Number.isSafeInteger(n.length)||n.offset<0||n.length<8||n.offset+n.length>t.tileDataLength)throw new Error(`Invalid or missing PMTiles COG asset: ${r}`);return n}async function s0(e,t){let r={url:e},o=Da(await $e(r,0,127));n0(r,o);let i=await a0(r,o,t),n=o.tileDataOffset+i.offset;return{url:e,baseOffset:n,size:i.length,containerSize:r.size,etag:r.etag,full:r.full?.slice(n,n+i.length)}}async function m0(e,t){let r=t===void 0?{url:e}:await s0(e,t);r.levels=new Map;let o=new DataView(await $e(r,0,8)),i=o.getUint16(0);if(i!==18761&&i!==19789)throw new Error("Invalid TIFF byte order");if(r.little=i===18761,o.getUint16(2,r.little)!==42)throw new Error("Expected classic TIFF (BigTIFF is not supported)");let{base:n,minZoom:a,maxZoom:s}=await Jx(r,o.getUint32(4,r.little)),m=20037508342789244e-9,f=n.left+n.resolution/2,p=n.left+(n.width-.5)*n.resolution,c=n.top-n.resolution/2,l=n.top-(n.height-.5)*n.resolution;return r.header={minZoom:a,maxZoom:s,tileType:n.elevation?0:2,minLon:f/m*180,maxLon:p/m*180,minLat:Math.atan(Math.sinh(l/m*Math.PI))*180/Math.PI,maxLat:Math.atan(Math.sinh(c/m*Math.PI))*180/Math.PI},{getHeader:i0.bind(null,r),getZxy:o0.bind(null,r)}}function f0(e,t){ls(e,{ariaLabel:"COG raster",...t,archive:t.archive||m0(new URL(t.url,document.baseURI).href,t.asset)})}function p0(e){switch(e){case"geojson":return Ax;case"pmtiles":return ls;case"cog":return f0;case"terrain":return Ug;case"traffic":return Vy;default:return null}}function c0(){let e=Ws.shift();return e.initialize=p0(e.type),e.initialize||(e.error=new Error(`Unknown layer type: ${e.type}`)),e}function l0(e){let{layer:t,ready:r}=e;if(e.error)return Kn(t,e.error),Promise.reject(e.error);try{let o=t._map;return o?.removeLayer(t),I.delete(t),e.initialize(t,e.settings),o?.addLayer(t),re.get(t)===r?t:re.get(t)}catch(o){throw t.fire("error",{error:o}),o}}function u0(e=xo){if(vt.has(this)||vt.add(this),Object.getPrototypeOf(this)!==h.Layer.prototype||!e?.source){if(Br.value.initialize)return Br.value.initialize.apply(this,arguments);h.Util.setOptions(this,e);return}let{source:{type:t=e.source.data?.type==="FeatureCollection"?"geojson":/\.pmtiles(?:[?#]|$)/i.test(e.source.url)?"pmtiles":/\.tiff?(?:[?#]|$)/i.test(e.source.url)?"cog":"3d",...r},...o}=e,i={...r,...o};if(h.Util.setOptions(this,o),Ut.set(this,t),t==="3d"){Lt(this,i);return}I.set(this,"pending");let n={layer:this,type:t,settings:i,ready:null};Ws.push(n),Zs.value=Zs.value.catch(at).then(c0);let a=Zs.value.then(l0);re.set(this,a),n.ready=a,a.catch(at)}b();function d0(e,t){switch(I.get(e)){case"3d":return Xo(e,t);case"raster":return dg(e,t);case"terrain":return yg(e,t);case"time":return Kg.call(e,t)}}function h0(e){let t=h.Util.stamp(e);return this._layers[t]?I.get(e)?(this._loaded&&d0(e,this),delete this._layers[t],this._loaded&&(this.fire("layerremove",{layer:e}),e.fire("remove")),e._map=e._mapToAdd=null,this):qi.value.call(this,e):this}H();function g0(){return k(this)}W();function y0(){return S(this)}function x0(e,t){if(!Number.isFinite(t))throw new TypeError("Marker rotation must be finite");return e.options.rotation=t,e.update(),xt(e),e}function v0(e){return x0(this,e)}function w0(){vt.has(this)||vt.add(this);let e=this._initHooksCalled;Vi.value.call(this),e||Cx.call(this)}Br.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(h.Layer.prototype));Vi.value=h.Layer.prototype.callInitHooks;h.Layer.include({initialize:u0,_layerAdd:zx,callInitHooks:w0});qi.value=h.Map.prototype.removeLayer;h.Map.include({removeLayer:h0,getPitch:g0,getBearing:y0});h.Marker.include({setRotation:v0});})();
|
|
5
5
|
//# sourceMappingURL=leaflet-city-mapper.js.map
|