agentscript
Version:
AgentScript Model in Model/View architecture
5 lines (4 loc) • 792 kB
JavaScript
var Px=Object.defineProperty;var Ui=(n,t)=>{for(var e in t)Px(n,e,{get:t[e],enumerable:!0})};var Nt={};Ui(Nt,{AsyncFunction:()=>Dx,PI:()=>js,RESTapi:()=>W0,addCssLink:()=>H0,addCssStyle:()=>mp,arrayExtent:()=>_0,arrayLast:()=>b0,arrayMax:()=>cp,arrayMin:()=>lp,arrayToMatrix:()=>M0,arraysDiff:()=>w0,arraysEqual:()=>uh,arraysToString:()=>fh,blobToData:()=>Ox,blobsEqual:()=>Bx,checkArg:()=>kx,checkArgs:()=>Gx,clamp:()=>Dn,classHasStartup:()=>a0,clearCtx:()=>$s,cloneCanvas:()=>pp,concatArrays:()=>dh,convertArrayType:()=>Or,createCanvas:()=>Fr,createCtx:()=>ue,cssTrace:()=>Xx,ctxImageColors:()=>Mh,ctxImageData:()=>ji,ctxImagePixels:()=>N0,degToHeading:()=>Jx,degToRad:()=>tp,degreesEqual:()=>ep,degreesTowardXY:()=>s0,difference:()=>x0,distance:()=>Gi,distance3:()=>Hi,downloadBlob:()=>vh,downloadCanvas:()=>za,downloadJson:()=>D0,downloadJsonModule:()=>O0,drawText:()=>wh,dump:()=>G0,fetchCssStyle:()=>V0,fetchData:()=>La,fetchImage:()=>F0,fetchImageBitmap:()=>z0,fetchJson:()=>Fx,fetchText:()=>zx,fillCtxWithImage:()=>li,floatRamp:()=>Da,forLoop:()=>zt,fps:()=>Vx,getEventXY:()=>X0,getQueryString:()=>gp,grep:()=>u0,hasCanvas:()=>Ix,headingAngleToRad:()=>e0,headingToDeg:()=>$x,headingToRad:()=>Kx,headingTowardXY:()=>r0,headingsEq:()=>i0,identityFcn:()=>hh,imagePromise:()=>Wi,imageToCanvas:()=>B0,imageToCtx:()=>Br,inCone:()=>lh,inDeno:()=>Ca,inMain:()=>Aa,inNode:()=>Rx,inWorker:()=>ih,integerRamp:()=>Js,intersection:()=>y0,isArray:()=>Oa,isArrayLike:()=>fp,isBetween:()=>Rn,isCanvas:()=>Fa,isColorLikeArray:()=>R0,isDataSet:()=>dp,isFloatArray:()=>P0,isFunction:()=>Ir,isImage:()=>A0,isImageable:()=>ci,isIntArray:()=>L0,isInteger:()=>up,isLittleEndian:()=>I0,isNumber:()=>ai,isObject:()=>oi,isOneOfTypes:()=>xh,isOofA:()=>mn,isPowerOf2:()=>Cr,isString:()=>Le,isType:()=>Rr,isTypedArray:()=>Dr,isUintArray:()=>C0,lerp:()=>qs,lerpScale:()=>sh,logAll:()=>jx,logOnce:()=>Qd,matrixToArray:()=>S0,mod:()=>ri,mod180180:()=>Qx,mod2pi:()=>Xs,mod360:()=>pn,nestedProperty:()=>v0,nextPowerOf2:()=>Zx,noopFcn:()=>l0,objectLength:()=>d0,objectToString:()=>f0,objectsEqual:()=>p0,oneKeyOf:()=>ap,oneOf:()=>Vi,oneValOf:()=>mh,oofaBuffers:()=>T0,oofaObject:()=>hp,otherOneOf:()=>ph,parseQueryString:()=>yp,pause:()=>$d,pps:()=>Wx,precision:()=>Ra,printToPage:()=>j0,propFcn:()=>Zs,radToDeg:()=>Pr,radToHeading:()=>Ia,radToHeadingAngle:()=>t0,radiansTowardXY:()=>si,radsEqual:()=>n0,randomCentered:()=>qx,randomFloat:()=>rh,randomFloat2:()=>ii,randomInt:()=>In,randomInt2:()=>ni,randomNormal:()=>Yx,randomSeed:()=>Kd,range:()=>h0,removeArrayItem:()=>On,repeat:()=>Qe,resizeCtx:()=>bh,runModel:()=>o0,sampleModel:()=>c0,setCanvasSize:()=>Na,setCtxImage:()=>U0,setIdentity:()=>zr,setTextProperties:()=>Nr,shuffle:()=>yh,sortNums:()=>m0,sortObjs:()=>gh,sqDistance:()=>Ys,sqDistance3:()=>rp,step:()=>op,stringMetrics:()=>_h,subtractDegrees:()=>ip,subtractHeadings:()=>ch,subtractRadians:()=>np,timeit:()=>Hx,timeoutLoop:()=>Pa,toAofO:()=>gn,toDataURL:()=>Nx,toDeg:()=>oh,toJSON:()=>sp,toOofA:()=>E0,toRad:()=>ah,toWindow:()=>k0,typeOf:()=>Ce,union:()=>g0,waitUntilDone:()=>Ux,warn:()=>ki,wrap:()=>Lr});function Aa(){return globalThis.document!==void 0}function ih(){return globalThis.WorkerGlobalScope!==void 0}function Rx(){return typeof globalThis.require<"u"}function Ca(){return typeof globalThis.Deno<"u"}function Ix(){return globalThis.canvas!=="undefined"}function Dx(n,t){let e=Object.getPrototypeOf(async function(){}).constructor;return new e(...n,t)}function Ox(n,t="dataURL"){t=t[0].toUpperCase()+t.slice(1);let e=["Text","ArrayBuffer","DataURL"];if(!e.includes(t))throw Error("blobToData: data must be one of "+e.toString());let i=new FileReader;return new Promise((r,s)=>{i.addEventListener("load",()=>r(i.result)),i.addEventListener("error",o=>s(o)),i["readAs"+t](n)})}async function La(n,t="blob"){let e=["arrayBuffer","blob","json","text"];if(!e.includes(t))throw Error("fetchData: data must be one of "+e.toString());return fetch(n).then(i=>i[t]())}async function Fx(n){return La(n,"json")}async function zx(n){return La(n,"text")}function Nx(n,t=void 0){return n.toDataURL?n.toDataURL(t,t):(t||(t="text/plain;charset=US-ASCII"),`data:${t};base64,${btoa(n)}}`)}async function Bx(n,t){let e=await n.text(),i=await t.text();return e===i}function $d(n=1e3){return new Promise(t=>{setTimeout(t,n)})}async function Pa(n,t=-1,e=0){let i=0;for(;i++!==t;)n(i-1),await $d(e)}function Ux(n,t=10){return new Promise(e=>{function i(){if(n())return e();setTimeout(i,t)}i()})}function kx(n,t="number",e="Function"){}function Gx(n,t="number",e="Function"){}var Jd=new Set;function Qd(n,t=!1){Jd.has(n)||(t?console.warn(n):console.log(n),Jd.add(n))}function ki(n){Qd(n,!0)}function Hx(n,t=1e5,e="test"){e=e+"-"+t,console.time(e);for(let i=0;i<t;i++)n(i);console.timeEnd(e)}function Vx(){let n=typeof performance>"u"?Date:performance,t=n.now(),e=0;function i(){e++;let r=n.now()-t,s=parseFloat((e/(r/1e3)).toFixed(2));Object.assign(i,{fps:s,ms:r,start:t,steps:e})}return i.steps=0,i}function Wx(n,t=""){t&&console.log(t);let e=1,i="";for(;n;){if(typeof n=="function")i=n.constructor.toString();else{let r=Object.keys(n);i=r.length>0?`[${r.join(", ")}]`:`[${n.constructor.name}]`}console.log(`[${e++}]: ${i}`),n=Object.getPrototypeOf(n)}}function jx(n){Object.keys(n).forEach(t=>console.log(" ",t,n[t]))}function Xx(n,t=["position","cursor","display","width","height"]){let e=document.querySelector(n);for(;e;){let i=window.getComputedStyle(e);console.log("element:",e),console.log("tag:",e.tagName),t.forEach(r=>console.log(r+":",i[r])),console.log("------------------------"),e=e.parentElement}}var js=Math.PI;function In(n){return Math.floor(Math.random()*n)}function ni(n,t){return n+Math.floor(Math.random()*(t-n))}function rh(n){return Math.random()*n}function ii(n,t){return n+Math.random()*(t-n)}function qx(n){return ii(-n/2,n/2)}function Yx(n=0,t=1){let[e,i]=[1-Math.random(),Math.random()];return Math.sqrt(-2*Math.log(e))*Math.cos(2*js*i)*t+n}function Kd(n=123456){n=n%2147483647,Math.random=()=>(n=n*16807%2147483647,(n-1)/2147483646)}function Ra(n,t=4){if(Math.abs(n)===0)return 0;if(Array.isArray(n))return n.map(i=>Ra(i,t));let e=10**t;return Math.round(n*e)/e}var Cr=n=>(n&n-1)===0,Zx=n=>Math.pow(2,Math.ceil(Math.log2(n)));function ri(n,t){return(n%t+t)%t}var Lr=(n,t,e)=>t+ri(n-t,e-t);function Dn(n,t,e){return n<t?t:n>e?e:n}var Rn=(n,t,e)=>t<=n&&n<=e,qs=(n,t,e)=>n<=t?n+(t-n)*e:n-(n-t)*e;function sh(n,t,e){if(t===e)throw Error("lerpScale: lo === hi");return n=Dn(n,t,e),(n-t)/(e-t)}var oh=180/Math.PI,ah=Math.PI/180;function tp(n){return Xs(n*ah)}function Pr(n){return pn(n*oh)}var Jx=n=>pn(90-n),$x=n=>pn(90-n);function pn(n){return ri(n,360)}function Xs(n){return ri(n,2*js)}function Qx(n){let t=pn(n);return t>180&&(t-=360),t}function Ia(n){let t=n*oh;return pn(90-t)}function Kx(n){return pn(90-n)*ah}function t0(n){return-Pr(n)}function e0(n){return-tp(n)}function ep(n,t){return pn(n)===pn(t)}function n0(n,t){return Xs(n)===Xs(t)}var i0=ep;function np(n,t){let e=Xs(n-t);return e>js&&(e=e-2*js),e}function ip(n,t){let e=pn(n-t);return e>180&&(e=e-360),e}function ch(n,t){return-ip(n,t)}function si(n,t,e,i){return Math.atan2(i-t,e-n)}function r0(n,t,e,i){return Ia(si(n,t,e,i))}function s0(n,t,e,i){return Pr(si(n,t,e,i))}function lh(n,t,e,i,r,s,o){if(Ys(s,o,n,t)>e*e)return!1;let a=si(s,o,n,t);return i/2>=Math.abs(np(r,a))}var Ys=(n,t,e,i)=>(n-e)**2+(t-i)**2,Gi=(n,t,e,i)=>Math.sqrt(Ys(n,t,e,i)),rp=(n,t,e,i,r,s)=>(n-i)**2+(t-r)**2+(e-s)**2,Hi=(n,t,e,i,r,s)=>Math.sqrt(rp(n,t,e,i,r,s));async function o0(n,t=500,e=!0){if(console.log("runModel: model",n),e&&Kd(),Le(n)&&(n=(await import(n)).default),Ir(n)&&(n=new n),await n.startup(),n.setup(),Aa())await Pa(()=>{n.step()},t);else for(let i=0;i<t;i++)n.step();return n}function a0(n){console.log("classHasStartup?",n);let e=n.toString().split(`
`);return e=e.filter(i=>!/^ *\/\//.test(i)),e=e.filter(i=>/startup\(\)/.test(i)),e.length>0}function sp(n,t=0,e=!0){let i=e,r=["rectCache"];return JSON.stringify(n,(o,a)=>r.includes(o)?void 0:Array.isArray(a)&&a.length>0&&Number.isInteger(a[0].id)&&!i?a.map(l=>l.id):(i=!1,a),t)}function c0(n){let t={ticks:n.ticks,model:Object.keys(n),patches:n.patches.length,patch:n.patches.oneOf(),turtles:n.turtles.length,turtle:n.turtles.oneOf(),links:n.links.length,link:n.links.oneOf()},e=sp(t);return JSON.parse(e)}var hh=n=>n,l0=()=>{},Zs=n=>t=>t[n];function uh(n,t){if(n.length!==t.length)return!1;for(let e=0;e<n.length;e++)if(n[e]!==t[e])return!1;return!0}function On(n,t){let e=n.indexOf(t);if(e!==-1)n.splice(e,1);else throw Error(`removeArrayItem: ${t} not in array`);return n}var fh=n=>n.map(t=>`${t}`).join(",");function zt(n,t){if(n.slice)for(let e=0,i=n.length;e<i;e++)t(n[e],e,n);else Object.keys(n).forEach(e=>t(n[e],e,n))}function Qe(n,t,e=[]){for(let i=0;i<n;i++)t(i,e);return e}function op(n,t,e){for(let i=0;i<n;i+=t)e(i)}function h0(n){return Qe(n,(t,e)=>{e[t]=t})}function u0(n,t){return n.reduce((e,i)=>(t.test(i)&&e.push(i),e),[])}function dh(n,t){let e=n.constructor;if(e===Array)return n.concat(Or(t,Array));let i=new e(n.length+t.length);return i.set(n),i.set(t,n.length),i}function f0(n,t=2,e=!0){let i=JSON.stringify(n,null,t);return e&&(i=i.replace(/"([^"]+)":/gm,"$1:")),i}function d0(n){return Object.keys(n).length}var p0=(n,t)=>JSON.stringify(n)===JSON.stringify(t);function Vi(n){return n[In(n.length)]}function ph(n,t){if(n.length<2)throw Error("otherOneOf: array.length < 2");let e;do e=Vi(n);while(t===e);return e}var ap=n=>Vi(Object.keys(n)),mh=n=>n[ap(n)];function m0(n,t=!0){return n.sort((e,i)=>t?e-i:i-e)}function gh(n,t,e=!0){typeof t=="string"&&(t=Zs(t));let i=(r,s)=>t(r)-t(s);return n.sort((r,s)=>e?i(r,s):-i(r,s))}function yh(n){for(let t=n.length-1;t>0;t--){let e=In(t);[n[e],n[t]]=[n[t],n[e]]}return n}function g0(n,t){return Array.from(new Set(n.concat(t)))}function y0(n,t){let e=new Set(t);return n.filter(i=>e.has(i))}function x0(n,t){let e=new Set(t);return n.filter(i=>!e.has(i))}function Da(n,t,e){if(e<=1)throw Error("floatRamp: numItems must be > 1");let i=[];for(let r=0;r<e;r++)i.push(n+(t-n)*(r/(e-1)));return i}function Js(n,t,e=t-n+1){return Da(n,t,e).map(i=>Math.round(i))}function v0(n,t){switch(typeof t=="string"&&(t=t.split(".")),t.length){case 1:return n[t[0]];case 2:return n[t[0]][t[1]];case 3:return n[t[0]][t[1]][t[2]];case 4:return n[t[0]][t[1]][t[2]][t[3]];default:return t.reduce((e,i)=>e[i],n)}}var b0=n=>n[n.length-1],cp=n=>n.reduce((t,e)=>Math.max(t,e)),lp=n=>n.reduce((t,e)=>Math.min(t,e)),_0=n=>[lp(n),cp(n)],w0=(n,t,e=i=>i)=>{if(n.length!==t.length)return console.log("lengths differ",n.length,t.length);let i=[];for(let r=0;r<n.length;r++)n[r]!==t[r]&&i.push([e(r),n[r],t[r]]);return i};function M0(n,t,e){if(n.length!==t*e)throw Error("arrayToMatrix: length !== width * height");let i=[];for(let r=0;r<e;r++){let s=n.slice(r*t,(r+1)*t);i.push(s)}return i}var S0=n=>n.flat();function mn(n){return oi(n)?Object.values(n).every(t=>Dr(t)):!1}function E0(n,t){let e=n.length,i=Object.keys(t),r={};return i.forEach(s=>{r[s]=new t[s](e)}),zt(n,(s,o)=>{i.forEach(a=>r[a][o]=s[a])}),r}function hp(n,t,e){let i={};return e.forEach(r=>{i[r]=n[r][t]}),i}function gn(n,t=Object.keys(n)){let e=n[t[0]].length,i=new Array(e);return zt(i,(r,s)=>{i[s]=hp(n,s,t)}),i}function T0(n){let t=[];return zt(n,e=>zt(e,i=>t.push(i.buffer))),t}var Ce=n=>({}).toString.call(n).match(/\s(\w+)/)[1].toLowerCase(),Rr=(n,t)=>Ce(n)===t,xh=(n,t)=>t.includes(Ce(n)),Le=n=>Rr(n,"string"),oi=n=>Rr(n,"object"),Oa=n=>Array.isArray(n),ai=n=>Rr(n,"number"),up=n=>Number.isInteger(n),Ir=n=>Rr(n,"function"),A0=n=>Rr(n,"image"),Fa=n=>xh(n,["htmlcanvaselement","offscreencanvas"]),ci=n=>xh(n,["image","htmlimageelement","htmlcanvaselement","offscreencanvas","imagebitmap"]),Dr=n=>Ce(n.buffer)==="arraybuffer",C0=n=>/^uint.*array$/.test(Ce(n)),L0=n=>/^int.*array$/.test(Ce(n)),P0=n=>/^float.*array$/.test(Ce(n)),fp=n=>Oa(n)||Dr(n),R0=n=>fp(n)&&[3,4].includes(n.length)&&n.every(t=>up(t)&&Rn(t,0,255)||ai(t)&&Rn(t,0,1));function I0(){let n=new Uint32Array([16909060]);return new Uint8ClampedArray(n.buffer)[0]===4}function Or(n,t){return n.constructor===t?n:t.from(n)}function dp(n){return Ce(n)==="object"&&n.width&&n.height&&n.data}function za(n,t="download.png",e=null){t.endsWith(".png")||t.endsWith(".jpeg")||(t=t+".png");let i=t.endsWith(".png")?"image/png":"image/jpeg",r=Ce(n)==="string"?n:n.toDataURL(i,e),s=document.createElement("a");s.download=t,s.href=r,s.click()}function vh(n,t="download",e=!0){dp(n)&&!Array.isArray(n.data)&&(n.data=Array.from(n.data)),Dr(n)&&(n=Array.from(n)),(oi(n)||Array.isArray(n))&&(n=e?JSON.stringify(n,null,2):JSON.stringify(n));let i=Ce(n)==="blob"?n:new Blob([n]),r=URL.createObjectURL(i),s=document.createElement("a");s.download=t,s.href=r,s.click(),URL.revokeObjectURL(r)}function D0(n,t="download.json"){vh(n,t)}function O0(n,t="json.js"){let i=`const json = ${JSON.stringify(n,null,2)}
export default json`;vh(i,t)}async function Wi(n,t=!0){if(Aa()&&t||Ca())return new Promise((e,i)=>{let r=new Image;r.crossOrigin="Anonymous",r.onload=()=>e(r),r.onerror=()=>i(`Could not load image ${n}`),r.src=n});if(ih()||!t){let e=await fetch(n).then(i=>i.blob());return createImageBitmap(e)}}async function F0(n){return new Promise((t,e)=>{let i=new Image;i.crossOrigin="Anonymous",i.onload=()=>t(i),i.onerror=()=>e(`Could not load image ${n}`),i.src=n})}async function z0(n){let t=await La(n,"blob");return createImageBitmap(t)}function Fr(n,t,e=!0){if(Aa()&&e){let i=document.createElement("canvas");return i.width=n,i.height=t,i}else{if(Ca())return globalThis.createCanvas(n,t);if(ih()||!e)return new OffscreenCanvas(n,t)}}function ue(n,t,e=!0,i={}){let r=Fr(n,t,e),s=r.getContext("2d",i);if(Ca()){let o={canvas:r};return Object.setPrototypeOf(o,s),o}else return s}function pp(n,t=!0){let e=ue(n.width,n.height,t);return e.drawImage(n,0,0),e.canvas}function bh(n,t,e){let i=pp(n.canvas);n.canvas.width=t,n.canvas.height=e,n.drawImage(i,0,0)}function Na(n,t,e){(n.width!==t||n.height!=e)&&(n.width=t,n.height=e)}function zr(n){n.save(),n.resetTransform()}function Nr(n,t,e="center",i="middle"){Object.assign(n,{font:t,textAlign:e,textBaseline:i})}var Ta;function _h(n,t,e="center",i="middle"){Ta||(Ta=ue(0,0)),Nr(Ta,t,e,i);let r=Ta.measureText(n);return r.height=r.actualBoundingBoxAscent+r.actualBoundingBoxDescent,r}function wh(n,t,e,i,r,s=!0){s&&zr(n),n.fillStyle=r.css||r,n.fillText(t,e,i),s&&n.restore()}function ji(n){return n.getImageData(0,0,n.canvas.width,n.canvas.height)}function Mh(n){let t=ji(n).data,e=[];return op(t.length,4,i=>e.push(t.subarray(i,i+4))),e}function N0(n){let t=ji(n);return new Uint32Array(t.data.buffer)}function $s(n,t=void 0){let{width:e,height:i}=n.canvas;zr(n),!t||t==="transparent"?n.clearRect(0,0,e,i):(t=t.css||t,n.fillStyle=t,n.fillRect(0,0,e,i)),n.restore()}function Br(n){let{width:t,height:e}=n,i=ue(t,e);return li(i,n),i}function B0(n){return Br(n).canvas}function li(n,t){zr(n),n.drawImage(t,0,0,n.canvas.width,n.canvas.height),n.restore()}function U0(n,t){Na(n.canvas,t.width,t.height),li(n,t)}function k0(n){Object.assign(window,n),console.log("toWindow:",Object.keys(n).join(", "))}function G0(n=window.model){let{patches:t,turtles:e,links:i}=n;Object.assign(window,{ps:t,ts:e,ls:i}),window.p=t.length>0?t.oneOf():{},window.t=e.length>0?e.oneOf():{},window.l=i.length>0?i.oneOf():{},console.log("debug: ps, ts, ls, p, t, l dumped to window")}function H0(n){let t=document.createElement("link");t.setAttribute("rel","stylesheet"),t.setAttribute("href",n),document.head.appendChild(t)}async function V0(n){n.startsWith("/")&&(console.log("fetchCssStyle relative url",n),n=import.meta.resolve(n),console.log(" absolute url",n));let t=await fetch(n);if(!t.ok)throw Error(`fetchCssStyle: Not found: ${n}`);let e=await t.text();return mp(e),e}function mp(n){let t=document.createElement("style");t.innerHTML=n,document.head.appendChild(t)}function gp(){return window.location.search.substr(1)}function yp(n=gp()){let t={},e=new URLSearchParams(n);for(let i of e.entries()){let[r,s]=i;(s.match(/^[0-9.]+$/)||s.match(/^[0-9.]+e[0-9]+$/))&&(s=Number(s)),["true","t",""].includes(s)&&(s=!0),["false","f"].includes(s)&&(s=!1),t[r]=s}return t}function W0(n){return Object.assign(n,yp())}function j0(n,t=document.body){typeof n=="object"&&(n=JSON.stringify(n,null,2)),n="<pre>"+n+"</pre>",typeof t=="string"&&(t=document.getElementById(t)),t.style.fontFamily="monospace",t.innerHTML+=n}function X0(n,t){let e=n.getBoundingClientRect();return[t.clientX-e.left,t.clientY-e.top]}var vp={};Ui(vp,{decode:()=>$0,encode:()=>J0,stegMsgSize:()=>Sh});async function xp(n){let t=Ce(n);switch(t){case"string":n=await Wi(n);case"htmlimageelement":return Br(n);case"htmlcanvaselement":case"offscreencanvas":return n.getContext("2d");case"canvasrenderingcontext2d":return n;default:throw Error("toContext: bad img type: "+t)}}function q0(n){let t=Ce(n);switch(t){case"number":n=String.fromCharCode(n);case"string":return new TextEncoder().encode(n);case"uint8array":case"uint8clampedarray":return n;default:throw Error("toUint8Array: bad msg type: "+t)}}function Y0(n){return[n>>Pe[0].shift,n>>Pe[1].shift&Pe[1].msgMask,n&Pe[2].msgMask]}var Pe=[{shift:5,msgMask:7,dataMask:248},{shift:3,msgMask:3,dataMask:252},{shift:0,msgMask:7,dataMask:248}];function Z0(n,t,e){let i=t*e;if(i<n.length)throw Error(`encode: image size < msg.length: ${i} ${n.length}`)}function Sh(n){for(let t=3;t<n.length;t=t+4)if(n[t]===254)return(t-3)/4;throw Error(`decode: no message terminator in image data, length = ${n.length}`)}async function J0(n,t){let e=await xp(n),{width:i,height:r}=e.canvas;Z0(t,i,r);let s=q0(t);console.log("msg buffer",s);let o=e.getImageData(0,0,i,r),a=o.data;console.log("imgageData.data",a);let c;return s.forEach((l,u)=>{let[h,d,f]=Y0(l);c=u*4,a[c]=(a[c++]&Pe[0].dataMask)+h,a[c]=(a[c++]&Pe[1].dataMask)+d,a[c]=(a[c++]&Pe[2].dataMask)+f,a[c]=255}),a[c+4]=254,console.log("encoded imgageData.data",a),e.putImageData(o,0,0),console.log("msg length",t.length),console.log("encode: embedded msg size",Sh(a)),e}async function $0(n,t=!1){let e=await xp(n),{width:i,height:r}=e.canvas,s=e.getImageData(0,0,i,r).data,o=Sh(s);console.log("decode: embedded msg size",o);let a=new Uint8Array(o);return a.forEach((c,l)=>{let u=l*4,h=(Pe[0].msgMask&s[u++])<<Pe[0].shift,d=(Pe[1].msgMask&s[u++])<<Pe[1].shift,f=(Pe[2].msgMask&s[u++])<<Pe[2].shift;a[l]=h+d+f}),console.log("decode msgArray",a),t?a:new TextDecoder().decode(a)}var Fp={};Ui(Fp,{bbox:()=>Qs,bboxPolygon:()=>xv,bearingToAzimuth:()=>rv,booleanPointInPolygon:()=>Sv,collectionOf:()=>wv,containsNumber:()=>Dp,convertArea:()=>av,convertLength:()=>ov,coordAll:()=>uv,coordEach:()=>Ur,coordReduce:()=>cv,feature:()=>yn,featureCollection:()=>ka,featureEach:()=>Lp,featureOf:()=>_v,featureReduce:()=>hv,findPoint:()=>yv,findSegment:()=>gv,flattenEach:()=>Ga,flattenReduce:()=>dv,geojsonType:()=>bv,geomEach:()=>Th,geomReduce:()=>fv,geometry:()=>Q0,geometryCollection:()=>nv,getCoord:()=>Ip,getCoords:()=>vv,getGeom:()=>Op,getType:()=>Mv,lengthToDegrees:()=>iv,lengthToRadians:()=>Eh,lineEach:()=>Rp,lineReduce:()=>mv,lineString:()=>zn,lineStrings:()=>ev,multiLineString:()=>Mp,multiPoint:()=>Sp,multiPolygon:()=>Ep,point:()=>Fn,points:()=>K0,polygon:()=>Ua,polygons:()=>tv,propEach:()=>Cp,propReduce:()=>lv,radiansToLength:()=>Tp,segmentEach:()=>Pp,segmentReduce:()=>pv});var Te=63710088e-1,wp={centimeters:Te*100,centimetres:Te*100,degrees:Te/111325,feet:Te*3.28084,inches:Te*39.37,kilometers:Te/1e3,kilometres:Te/1e3,meters:Te,metres:Te,miles:Te/1609.344,millimeters:Te*1e3,millimetres:Te*1e3,nauticalmiles:Te/1852,radians:1,yards:Te*1.0936},bp={acres:247105e-9,centimeters:1e4,centimetres:1e4,feet:10.763910417,hectares:1e-4,inches:1550.003100006,kilometers:1e-6,kilometres:1e-6,meters:1,metres:1,miles:386e-9,millimeters:1e6,millimetres:1e6,yards:1.195990046};function yn(n,t,e){e===void 0&&(e={});var i={type:"Feature"};return(e.id===0||e.id)&&(i.id=e.id),e.bbox&&(i.bbox=e.bbox),i.properties=t||{},i.geometry=n,i}function Q0(n,t,e){switch(n){case"Point":return Fn(t).geometry;case"LineString":return zn(t).geometry;case"Polygon":return Ua(t).geometry;case"MultiPoint":return Sp(t).geometry;case"MultiLineString":return Mp(t).geometry;case"MultiPolygon":return Ep(t).geometry;default:throw new Error(n+" is invalid")}}function Fn(n,t,e){if(e===void 0&&(e={}),!n)throw new Error("coordinates is required");if(!Array.isArray(n))throw new Error("coordinates must be an Array");if(n.length<2)throw new Error("coordinates must be at least 2 numbers long");if(!Ba(n[0])||!Ba(n[1]))throw new Error("coordinates must contain numbers");var i={type:"Point",coordinates:n};return yn(i,t,e)}function K0(n,t,e){return e===void 0&&(e={}),ka(n.map(function(i){return Fn(i,t)}),e)}function Ua(n,t,e){e===void 0&&(e={});for(var i=0,r=n;i<r.length;i++){var s=r[i];if(s.length<4)throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");for(var o=0;o<s[s.length-1].length;o++)if(s[s.length-1][o]!==s[0][o])throw new Error("First and last Position are not equivalent.")}var a={type:"Polygon",coordinates:n};return yn(a,t,e)}function tv(n,t,e){return e===void 0&&(e={}),ka(n.map(function(i){return Ua(i,t)}),e)}function zn(n,t,e){if(e===void 0&&(e={}),n.length<2)throw new Error("coordinates must be an array of two or more positions");var i={type:"LineString",coordinates:n};return yn(i,t,e)}function ev(n,t,e){return e===void 0&&(e={}),ka(n.map(function(i){return zn(i,t)}),e)}function ka(n,t){t===void 0&&(t={});var e={type:"FeatureCollection"};return t.id&&(e.id=t.id),t.bbox&&(e.bbox=t.bbox),e.features=n,e}function Mp(n,t,e){e===void 0&&(e={});var i={type:"MultiLineString",coordinates:n};return yn(i,t,e)}function Sp(n,t,e){e===void 0&&(e={});var i={type:"MultiPoint",coordinates:n};return yn(i,t,e)}function Ep(n,t,e){e===void 0&&(e={});var i={type:"MultiPolygon",coordinates:n};return yn(i,t,e)}function nv(n,t,e){e===void 0&&(e={});var i={type:"GeometryCollection",geometries:n};return yn(i,t,e)}function Tp(n,t){t===void 0&&(t="kilometers");var e=wp[t];if(!e)throw new Error(t+" units is invalid");return n*e}function Eh(n,t){t===void 0&&(t="kilometers");var e=wp[t];if(!e)throw new Error(t+" units is invalid");return n/e}function iv(n,t){return sv(Eh(n,t))}function rv(n){var t=n%360;return t<0&&(t+=360),t}function sv(n){var t=n%(2*Math.PI);return t*180/Math.PI}function ov(n,t,e){if(t===void 0&&(t="kilometers"),e===void 0&&(e="kilometers"),!(n>=0))throw new Error("length must be a positive number");return Tp(Eh(n,t),e)}function av(n,t,e){if(t===void 0&&(t="meters"),e===void 0&&(e="kilometers"),!(n>=0))throw new Error("area must be a positive number");var i=bp[t];if(!i)throw new Error("invalid original units");var r=bp[e];if(!r)throw new Error("invalid final units");return n/i*r}function Ba(n){return!isNaN(n)&&n!==null&&!Array.isArray(n)}function Ap(n){return!!n&&n.constructor===Object}function Ur(n,t,e){if(n!==null)for(var i,r,s,o,a,c,l,u=0,h=0,d,f=n.type,p=f==="FeatureCollection",y=f==="Feature",x=p?n.features.length:1,g=0;g<x;g++){l=p?n.features[g].geometry:y?n.geometry:n,d=l?l.type==="GeometryCollection":!1,a=d?l.geometries.length:1;for(var m=0;m<a;m++){var b=0,v=0;if(o=d?l.geometries[m]:l,o!==null){c=o.coordinates;var w=o.type;switch(u=e&&(w==="Polygon"||w==="MultiPolygon")?1:0,w){case null:break;case"Point":if(t(c,h,g,b,v)===!1)return!1;h++,b++;break;case"LineString":case"MultiPoint":for(i=0;i<c.length;i++){if(t(c[i],h,g,b,v)===!1)return!1;h++,w==="MultiPoint"&&b++}w==="LineString"&&b++;break;case"Polygon":case"MultiLineString":for(i=0;i<c.length;i++){for(r=0;r<c[i].length-u;r++){if(t(c[i][r],h,g,b,v)===!1)return!1;h++}w==="MultiLineString"&&b++,w==="Polygon"&&v++}w==="Polygon"&&b++;break;case"MultiPolygon":for(i=0;i<c.length;i++){for(v=0,r=0;r<c[i].length;r++){for(s=0;s<c[i][r].length-u;s++){if(t(c[i][r][s],h,g,b,v)===!1)return!1;h++}v++}b++}break;case"GeometryCollection":for(i=0;i<o.geometries.length;i++)if(Ur(o.geometries[i],t,e)===!1)return!1;break;default:throw new Error("Unknown Geometry Type")}}}}}function cv(n,t,e,i){var r=e;return Ur(n,function(s,o,a,c,l){o===0&&e===void 0?r=s:r=t(r,s,o,a,c,l)},i),r}function Cp(n,t){var e;switch(n.type){case"FeatureCollection":for(e=0;e<n.features.length&&t(n.features[e].properties,e)!==!1;e++);break;case"Feature":t(n.properties,0);break}}function lv(n,t,e){var i=e;return Cp(n,function(r,s){s===0&&e===void 0?i=r:i=t(i,r,s)}),i}function Lp(n,t){if(n.type==="Feature")t(n,0);else if(n.type==="FeatureCollection")for(var e=0;e<n.features.length&&t(n.features[e],e)!==!1;e++);}function hv(n,t,e){var i=e;return Lp(n,function(r,s){s===0&&e===void 0?i=r:i=t(i,r,s)}),i}function uv(n){var t=[];return Ur(n,function(e){t.push(e)}),t}function Th(n,t){var e,i,r,s,o,a,c,l,u,h,d=0,f=n.type==="FeatureCollection",p=n.type==="Feature",y=f?n.features.length:1;for(e=0;e<y;e++){for(a=f?n.features[e].geometry:p?n.geometry:n,l=f?n.features[e].properties:p?n.properties:{},u=f?n.features[e].bbox:p?n.bbox:void 0,h=f?n.features[e].id:p?n.id:void 0,c=a?a.type==="GeometryCollection":!1,o=c?a.geometries.length:1,r=0;r<o;r++){if(s=c?a.geometries[r]:a,s===null){if(t(null,d,l,u,h)===!1)return!1;continue}switch(s.type){case"Point":case"LineString":case"MultiPoint":case"Polygon":case"MultiLineString":case"MultiPolygon":{if(t(s,d,l,u,h)===!1)return!1;break}case"GeometryCollection":{for(i=0;i<s.geometries.length;i++)if(t(s.geometries[i],d,l,u,h)===!1)return!1;break}default:throw new Error("Unknown Geometry Type")}}d++}}function fv(n,t,e){var i=e;return Th(n,function(r,s,o,a,c){s===0&&e===void 0?i=r:i=t(i,r,s,o,a,c)}),i}function Ga(n,t){Th(n,function(e,i,r,s,o){var a=e===null?null:e.type;switch(a){case null:case"Point":case"LineString":case"Polygon":return t(yn(e,r,{bbox:s,id:o}),i,0)===!1?!1:void 0}var c;switch(a){case"MultiPoint":c="Point";break;case"MultiLineString":c="LineString";break;case"MultiPolygon":c="Polygon";break}for(var l=0;l<e.coordinates.length;l++){var u=e.coordinates[l],h={type:c,coordinates:u};if(t(yn(h,r),i,l)===!1)return!1}})}function dv(n,t,e){var i=e;return Ga(n,function(r,s,o){s===0&&o===0&&e===void 0?i=r:i=t(i,r,s,o)}),i}function Pp(n,t){Ga(n,function(e,i,r){var s=0;if(e.geometry){var o=e.geometry.type;if(!(o==="Point"||o==="MultiPoint")){var a,c=0,l=0,u=0;if(Ur(e,function(h,d,f,p,y){if(a===void 0||i>c||p>l||y>u){a=h,c=i,l=p,u=y,s=0;return}var x=zn([a,h],e.properties);if(t(x,i,r,y,s)===!1)return!1;s++,a=h})===!1)return!1}}})}function pv(n,t,e){var i=e,r=!1;return Pp(n,function(s,o,a,c,l){r===!1&&e===void 0?i=s:i=t(i,s,o,a,c,l),r=!0}),i}function Rp(n,t){if(!n)throw new Error("geojson is required");Ga(n,function(e,i,r){if(e.geometry!==null){var s=e.geometry.type,o=e.geometry.coordinates;switch(s){case"LineString":if(t(e,i,r,0,0)===!1)return!1;break;case"Polygon":for(var a=0;a<o.length;a++)if(t(zn(o[a],e.properties),i,r,a)===!1)return!1;break}}})}function mv(n,t,e){var i=e;return Rp(n,function(r,s,o,a){s===0&&e===void 0?i=r:i=t(i,r,s,o,a)}),i}function gv(n,t){if(t=t||{},!Ap(t))throw new Error("options is invalid");var e=t.featureIndex||0,i=t.multiFeatureIndex||0,r=t.geometryIndex||0,s=t.segmentIndex||0,o=t.properties,a;switch(n.type){case"FeatureCollection":e<0&&(e=n.features.length+e),o=o||n.features[e].properties,a=n.features[e].geometry;break;case"Feature":o=o||n.properties,a=n.geometry;break;case"Point":case"MultiPoint":return null;case"LineString":case"Polygon":case"MultiLineString":case"MultiPolygon":a=n;break;default:throw new Error("geojson is invalid")}if(a===null)return null;var c=a.coordinates;switch(a.type){case"Point":case"MultiPoint":return null;case"LineString":return s<0&&(s=c.length+s-1),zn([c[s],c[s+1]],o,t);case"Polygon":return r<0&&(r=c.length+r),s<0&&(s=c[r].length+s-1),zn([c[r][s],c[r][s+1]],o,t);case"MultiLineString":return i<0&&(i=c.length+i),s<0&&(s=c[i].length+s-1),zn([c[i][s],c[i][s+1]],o,t);case"MultiPolygon":return i<0&&(i=c.length+i),r<0&&(r=c[i].length+r),s<0&&(s=c[i][r].length-s-1),zn([c[i][r][s],c[i][r][s+1]],o,t)}throw new Error("geojson is invalid")}function yv(n,t){if(t=t||{},!Ap(t))throw new Error("options is invalid");var e=t.featureIndex||0,i=t.multiFeatureIndex||0,r=t.geometryIndex||0,s=t.coordIndex||0,o=t.properties,a;switch(n.type){case"FeatureCollection":e<0&&(e=n.features.length+e),o=o||n.features[e].properties,a=n.features[e].geometry;break;case"Feature":o=o||n.properties,a=n.geometry;break;case"Point":case"MultiPoint":return null;case"LineString":case"Polygon":case"MultiLineString":case"MultiPolygon":a=n;break;default:throw new Error("geojson is invalid")}if(a===null)return null;var c=a.coordinates;switch(a.type){case"Point":return Fn(c,o,t);case"MultiPoint":return i<0&&(i=c.length+i),Fn(c[i],o,t);case"LineString":return s<0&&(s=c.length+s),Fn(c[s],o,t);case"Polygon":return r<0&&(r=c.length+r),s<0&&(s=c[r].length+s),Fn(c[r][s],o,t);case"MultiLineString":return i<0&&(i=c.length+i),s<0&&(s=c[i].length+s),Fn(c[i][s],o,t);case"MultiPolygon":return i<0&&(i=c.length+i),r<0&&(r=c[i].length+r),s<0&&(s=c[i][r].length-s),Fn(c[i][r][s],o,t)}throw new Error("geojson is invalid")}function Qs(n){var t=[1/0,1/0,-1/0,-1/0];return Ur(n,function(e){t[0]>e[0]&&(t[0]=e[0]),t[1]>e[1]&&(t[1]=e[1]),t[2]<e[0]&&(t[2]=e[0]),t[3]<e[1]&&(t[3]=e[1])}),t}Qs.default=Qs;function xv(n,t){t===void 0&&(t={});var e=Number(n[0]),i=Number(n[1]),r=Number(n[2]),s=Number(n[3]);if(n.length===6)throw new Error("@turf/bbox-polygon does not support BBox with 6 positions");var o=[e,i],a=[e,s],c=[r,s],l=[r,i];return Ua([[o,l,c,a,o]],t.properties,{bbox:n,id:t.id})}function Ip(n){if(!n)throw new Error("coord is required");if(!Array.isArray(n)){if(n.type==="Feature"&&n.geometry!==null&&n.geometry.type==="Point")return n.geometry.coordinates;if(n.type==="Point")return n.coordinates}if(Array.isArray(n)&&n.length>=2&&!Array.isArray(n[0])&&!Array.isArray(n[1]))return n;throw new Error("coord must be GeoJSON Point or an Array of numbers")}function vv(n){if(Array.isArray(n))return n;if(n.type==="Feature"){if(n.geometry!==null)return n.geometry.coordinates}else if(n.coordinates)return n.coordinates;throw new Error("coords must be GeoJSON Feature, Geometry Object or an Array")}function Dp(n){if(n.length>1&&Ba(n[0])&&Ba(n[1]))return!0;if(Array.isArray(n[0])&&n[0].length)return Dp(n[0]);throw new Error("coordinates must only contain numbers")}function bv(n,t,e){if(!t||!e)throw new Error("type and name required");if(!n||n.type!==t)throw new Error("Invalid input to "+e+": must be a "+t+", given "+n.type)}function _v(n,t,e){if(!n)throw new Error("No feature passed");if(!e)throw new Error(".featureOf() requires a name");if(!n||n.type!=="Feature"||!n.geometry)throw new Error("Invalid input to "+e+", Feature with geometry required");if(!n.geometry||n.geometry.type!==t)throw new Error("Invalid input to "+e+": must be a "+t+", given "+n.geometry.type)}function wv(n,t,e){if(!n)throw new Error("No featureCollection passed");if(!e)throw new Error(".collectionOf() requires a name");if(!n||n.type!=="FeatureCollection")throw new Error("Invalid input to "+e+", FeatureCollection required");for(var i=0,r=n.features;i<r.length;i++){var s=r[i];if(!s||s.type!=="Feature"||!s.geometry)throw new Error("Invalid input to "+e+", Feature with geometry required");if(!s.geometry||s.geometry.type!==t)throw new Error("Invalid input to "+e+": must be a "+t+", given "+s.geometry.type)}}function Op(n){return n.type==="Feature"?n.geometry:n}function Mv(n,t){return n.type==="FeatureCollection"?"FeatureCollection":n.type==="GeometryCollection"?"GeometryCollection":n.type==="Feature"&&n.geometry!==null?n.geometry.type:n.type}function Sv(n,t,e){if(e===void 0&&(e={}),!n)throw new Error("point is required");if(!t)throw new Error("polygon is required");var i=Ip(n),r=Op(t),s=r.type,o=t.bbox,a=r.coordinates;if(o&&Ev(i,o)===!1)return!1;s==="Polygon"&&(a=[a]);for(var c=!1,l=0;l<a.length&&!c;l++)if(_p(i,a[l][0],e.ignoreBoundary)){for(var u=!1,h=1;h<a[l].length&&!u;)_p(i,a[l][h],!e.ignoreBoundary)&&(u=!0),h++;u||(c=!0)}return c}function _p(n,t,e){var i=!1;t[0][0]===t[t.length-1][0]&&t[0][1]===t[t.length-1][1]&&(t=t.slice(0,t.length-1));for(var r=0,s=t.length-1;r<t.length;s=r++){var o=t[r][0],a=t[r][1],c=t[s][0],l=t[s][1],u=n[1]*(o-c)+a*(c-n[0])+l*(n[0]-o)===0&&(o-n[0])*(c-n[0])<=0&&(a-n[1])*(l-n[1])<=0;if(u)return!e;var h=a>n[1]!=l>n[1]&&n[0]<(c-o)*(n[1]-a)/(l-a)+o;h&&(i=!i)}return i}function Ev(n,t){return t[0]<=n[0]&&t[1]<=n[1]&&t[2]>=n[0]&&t[3]>=n[1]}var Ah=class n extends Array{static get[Symbol.species](){return n}static fromArray(t){return Object.setPrototypeOf(t,n.prototype)}constructor(...t){super(...t)}toArray(){return Object.setPrototypeOf(this,Array.prototype),this}isEmpty(){return this.length===0}first(){return this[0]}last(){return this[this.length-1]}atIndex(t){if(this.length===0)return;let e=ri(t,this.length);return this[e]}all(t){return this.every(t)}props(t,e=n){let i=new e(this.length);for(let r=0;r<this.length;r++)i[r]=this[r][t];return i}typedSample(t){let e={};return zt(t,(i,r)=>{e[r]=this.props(r,i)}),e}uniq(){return n.from(new Set(this))}forLoop(t){for(let e=0,i=this.length;e<i;e++)t(this[e],e,this);return this}ask(t){let e=this.length;for(let i=0;i<Math.min(e,this.length);i++)t(this[i],i,this);if(e!=this.length){let i=this.name||this.constructor.name,r=this.length<e?"decreasing":"increasing";ki(`AgentArray.ask array mutation: ${i}: ${r}`)}}with(t){return this.filter(t)}other(t){return this.filter(e=>e!==t)}getValues(t){let e=new n;return Le(t)?this.forLoop(i=>e.push(i[t])):this.forLoop(i=>e.push(t(i))),e}count(t){return this.reduce((e,i)=>e+(t(i)?1:0),0)}sum(t){return this.reduce((e,i)=>e+(t?i[t]:i),0)}avg(t){return this.sum(t)/this.length}min(t){return this.reduce((e,i)=>Math.min(e,t?i[t]:i),1/0)}max(t){return this.reduce((e,i)=>Math.max(e,t?i[t]:i),-1/0)}extent(t){return[this.min(t),this.max(t)]}histogram(t,e=10,i=this.min(t),r=this.max(t)){let s=(r-i)/e,o=new n(e);return o.fill(0),this.ask(a=>{let c=t?a[t]:a;if(c<i||c>r)ki(`histogram bounds error: ${c}: ${i}-${r}`);else{let l=Math.floor((c-i)/s);l===e&&l--,o[l]++}}),o.parameters={key:t,bins:e,min:i,max:r,binSize:s,arraySize:this.length},o}clone(){return this.slice(0)}shuffle(){return yh(this)}sortBy(t,e=!0){return gh(this,t,e),this}remove(t,e){let i=this.agentIndex(t,e);return i!==-1?this.splice(i,1):console.log(`remove: ${t.id} not in AgentArray`),this}insert(t,e){let i=this.sortedIndex(t,e);if(this[i]===t){console.log(`insert: item ${t.id} already in AgentArray`);return}this.splice(i,0,t)}sortedIndex(t,e=hh){Le(e)&&(e=Zs(e));let i=e(t),r=0,s=this.length;for(;r<s;){let o=r+s>>>1;e(this[o])<i?r=o+1:s=o}return r}agentIndex(t,e){if(!e)return this.indexOf(t);let i=this.sortedIndex(t,e);return this[i]===t?i:-1}contains(t,e){return this.agentIndex(t,e)>=0}oneOf(){return Vi(this)}otherOneOf(t){return ph(this,t)}otherNOf(t,e){if(this.length<t)throw Error("AgentArray: otherNOf: length < N");return this.clone().remove(e).shuffle().slice(0,t)}minOrMaxOf(t,e,i=!1){if(this.isEmpty())throw Error("min/max OneOf: empty array");typeof e=="string"&&(e=Zs(e));let r=null,s=t?1/0:-1/0;for(let o=0;o<this.length;o++){let a=this[o],c=e(a);(t&&c<s||!t&&c>s)&&([r,s]=[a,c])}return i?[r,s]:r}minOneOf(t){return this.minOrMaxOf(!0,t)}maxOneOf(t){return this.minOrMaxOf(!1,t)}minValOf(t){return this.minOrMaxOf(!0,t,!0)}maxValOf(t){return this.minOrMaxOf(!1,t,!0)}nOf(t){if(t>this.length)throw Error(`nOf: n larger than AgentArray: ${t} ${this.length}`);if(t===this.length)return this;let e=new n;for(;e.length<t;){let i=this.oneOf();i in e||e.push(i)}return e}minOrMaxNOf(t,e,i){if(e>this.length)throw Error("min/max nOf: n larger than AgentArray");let r=this.clone().sortBy(i);return t?r.slice(0,e):r.slice(r.length-e)}minNOf(t,e){return this.minOrMaxNOf(!0,t,e)}maxNOf(t,e){return this.minOrMaxNOf(!1,t,e)}},xn=Ah;var Ch=class n extends xn{constructor(t,...e){if(!t)throw Error("AgentList requires model");super(...e),this.model=t}inRect(t,e,i=e,r=!1){let s=new n(this.model),o=t.x-e,a=t.x+e,c=t.y-i,l=t.y+i;return this.ask(u=>{o<=u.x&&u.x<=a&&c<=u.y&&u.y<=l&&(r||t!==u)&&s.push(u)}),s}inRadius(t,e,i=!1){let r=new n(this.model),s=e*e,o=Ys;return this.ask(a=>{o(t.x,t.y,a.x,a.y)<=s&&(i||t!==a)&&r.push(a)}),r}inCone(t,e,i,r,s=!1){r=this.model.toRads(r),i=this.model.toAngleRads(i);let o=new n(this.model);return this.ask(a=>{lh(a.x,a.y,e,i,r,t.x,t.y)&&(s||t!==a)&&o.push(a)}),o}},Ke=Ch;var Lh=class n extends xn{model;name;baseSet;AgentClass;static get[Symbol.species](){return xn}constructor(t,e,i,r=null){if(i.length===0)debugger;super(),r=r||this,Object.assign(this,{model:t,name:i,baseSet:r,AgentClass:e}),this.isBaseSet()?(this.breeds={},this.ID=0):(Object.setPrototypeOf(this,Object.getPrototypeOf(r)),this.baseSet.breeds[i]=this),this.protoMixin(e)}protoMixin(t){this.agentProto=new t;let e=this.agentProto;Object.assign(e,{agentSet:this,model:this.model}),e[this.baseSet.name]=this.baseSet,e.setBreed?console.log("protoMixin: agentClass.proto already set",t):(Object.assign(e,{setBreed(i){i.setBreed(this)},getBreed(){return this.agentSet},isBreed(i){return this.agentSet===i}}),Object.defineProperty(e,"breed",{get:function(){return this.agentSet}}))}addAgent(t=void 0){return t=t||this.agentProto.newInstance(this.agentProto),this.isBreedSet()?this.baseSet.addAgent(t):t.id=this.ID++,this.push(t),t}removeAgent(t){return t.id!=-1&&(this.isBreedSet()&&this.baseSet.remove(t,"id"),this.remove(t,"id")),this}setBreed(t){if(t.breed.name!==this.name)return t.agentSet.isBreedSet()&&t.agentSet.remove(t,"id"),this.isBreedSet()&&this.insert(t,"id"),Object.setPrototypeOf(t,this.agentProto)}setDefault(t,e){return this.agentProto[t]=e,this}getDefault(t){return this.agentProto[t]}newBreed(t){return new n(this.model,this.AgentClass,t,this)}isBreedSet(){return this.baseSet!==this}isBaseSet(){return this.baseSet===this}withBreed(t){return this.filter(e=>e.agentSet===t)}create(){console.log(`AgentSet: Abstract method called: ${this}`)}clear(){for(;!this.isEmpty();)this.last().die()}ask(t){if(this.length===0)return;let e=this.last().id;for(let i=0;i<this.length&&this[i].id<=e;i++)t(this[i],i,this)}},Xi=Lh;var Ph=class n{width;height;data;static emptyDataSet(t,e,i=Array){return new n(t,e,new i(t*e))}constructor(t,e,i){if(i.length!==t*e)throw Error(`new DataSet length: ${i.length} !== ${t} * ${e}`);Object.assign(this,{width:t,height:e,data:i})}checkXY(t,e){if(!this.inBounds(t,e))throw Error(`DataSet: x,y out of range: ${t}, ${e}`)}inBounds(t,e){return Rn(t,0,this.width-1)&&Rn(e,0,this.height-1)}dataType(){return this.data.constructor}type(){return this.constructor}toIndex(t,e){return t+e*this.width}toXY(t){return[t%this.width,Math.floor(t/this.width)]}getXY(t,e){return this.data[this.toIndex(t,e)]}setXY(t,e,i){this.data[this.toIndex(t,e)]=i}sample(t,e,i=!0){return this.checkXY(t,e),i?this.nearest(t,e):this.bilinear(t,e)}nearest(t,e){return this.getXY(Math.round(t),Math.round(e))}bilinear(t,e){let i=Math.floor(t),r=Math.floor(e),s=this.toIndex(i,r),o=this.width,a=t-i,c=e-r,l=1-a,u=1-c,h=this.data[s],d=this.data[s+1]||0,f=this.data[s+o]||0,p=this.data[s+1+o]||0;return h*l*u+d*a*u+f*l*c+p*a*c}clone(){return new n(this.width,this.height,this.data.slice(0))}emptyDataSet(t,e,i=this.dataType()){return n.emptyDataSet(t,e,i)}emptyArray(t){let e=this.type();return new e(t)}resample(t,e,i=!0,r=Array){if(t===this.width&&e===this.height)return this.clone();let s=n.emptyDataSet(t,e,r);for(let o=0;o<e;o++)for(let a=0;a<t;a++)s.setXY(a,o,this.sample(a*(this.width-1)/(t-1),o*(this.height-1)/(e-1),i));return s}scale(t,e){let i=this.min(),s=this.max()-i,a=(e-t)/s,c=t-a*i;return this.map(l=>a*l+c)}subset(t,e,i,r){if(t+i>this.width||e+r>this.height)throw console.log("subset: x+width",t+i,"this.width",this.width),console.log("subset: y+height",e+r,"this.height",this.height),Error("DataSet.subSet: params out of range");let s=this.emptyDataSet(i,r);for(let o=0;o<i;o++)for(let a=0;a<r;a++)s.setXY(o,a,this.getXY(o+t,a+e));return s}crop(t,e,i,r){if(e===void 0)var{top:t,bottom:e,left:i,right:r}=t;let s=this.width-i-r,o=this.height-t-e;return this.subset(i,t,s,o)}map(t){return new n(this.width,this.height,this.data.map(t))}col(t){let[e,i,r]=[this.width,this.height,this.data];if(t>=e)throw Error(`col: x out of range width: ${e} x: ${t}`);let s=this.emptyArray(i);for(let o=0;o<i;o++)s[o]=r[t+o*e];return s}row(t){let[e,i]=[this.width,this.height];if(t>=i)throw Error(`row: y out of range height: ${i} x: ${t}`);return this.data.slice(t*e,(t+1)*e)}convertType(t){this.data=Or(this.data,t)}concatEast(t){let[e,i]=[this.width,this.height],[r,s]=[t.width,t.height];if(i!==s)throw Error(`concatEast: heights not equal ${i}, ${s}`);let o=this.emptyDataSet(e+r,i);for(let a=0;a<e;a++)for(let c=0;c<i;c++)o.setXY(a,c,this.getXY(a,c));for(let a=0;a<r;a++)for(let c=0;c<s;c++)o.setXY(a+e,c,t.getXY(a,c));return o}concatSouth(t){let[e,i,r]=[this.width,this.height,this.data];if(e!==t.width)throw Error(`concatSouth: widths not equal ${e}, ${t.width}`);let s=dh(r,t.data);return new n(e,i+t.height,s)}transformCoords(t,e,i,r,s,o){let a=(t-i)*(this.width-1)/s,c=(r-e)*(this.height-1)/o;return[a,c]}coordSample(t,e,i,r,s,o,a=!0){let[c,l]=this.transformCoords(t,e,i,r,s,o);return this.sample(c,l,a)}neighborhood(t,e,i=[]){i.length=0;let r=t===0||t===this.width-1||e===0||e===this.height-1;for(let s=-1;s<=1;s++)for(let o=-1;o<=1;o++){let a=t+o,c=e+s;r&&(a=Dn(a,0,this.width-1),c=Dn(c,0,this.height-1)),i.push(this.data[this.toIndex(a,c)])}return i}convolve(t,e=1,i=!1){let[r,s,o,a]=i?[1,1,this.height-1,this.width-1]:[0,0,this.height,this.width],c=this.emptyDataSet(a,o),l=c.data,u=0;for(let h=s;h<o;h++)for(let d=r;d<a;d++){let f=this.neighborhood(d,h),p=0;for(let y=0;y<t.length;y++)p=p+t[y]*f[y];l[u++]=p*e}return c}dzdx(t=2,e=1/8){return this.convolve([-1,0,1,-t,0,t,-1,0,1],e)}dzdy(t=2,e=1/8){return this.convolve([1,t,1,0,0,0,-1,-t,-1],e)}laplace8(){return this.convolve([-1,-1,-1,-1,8,-1,-1,-1,-1])}laplace4(){return this.convolve([0,-1,0,-1,4,-1,0,-1,0])}blur(t=.0625){return this.convolve([1,2,1,2,4,2,1,2,1],t)}edge(){return this.convolve([1,1,1,1,-7,1,1,1,1])}slopeAndAspect(t=1,e=!0){let i=this.dzdx(),r=this.dzdy(),[s,o]=[[],[]],[a,c]=[i.height,i.width];for(let l=0;l<a;l++)for(let u=0;u<c;u++){let[h,d]=[i.getXY(u,l),r.getXY(u,l)];o.push(Math.atan(Gi(0,0,h,d))/t);let f=Math.atan2(-d,-h);e&&f<0&&(f+=2*Math.PI),s.push(f)}return o=new n(c,a,o),s=new n(c,a,s),{slope:o,aspect:s,dzdx:i,dzdy:r}}max(){return this.data.reduce((t,e)=>Math.max(t,e))}min(){return this.data.reduce((t,e)=>Math.min(t,e))}extent(){return[this.min(),this.max()]}sum(){return this.data.reduce((t,e)=>t+e)}normalize(t=0,e=1,i=!1){let[r,s]=this.extent(),o=1/(s-r),a=this.data.map(c=>qs(t,e,o*(c-r)));return i&&(a=a.map(c=>Math.round(c))),new n(this.width,this.height,a)}equals(t){return this.width===t.width&&this.height===t.height&&uh(this.data,t.data)}},Nn=Ph;var Rh=class n{static defaults={width:1,hidden:!1,agentSet:null,model:null,name:null};static variables={id:null,theta:0,x:0,y:0};constructor(){Object.assign(this,n.defaults)}newInstance(t){let e=Object.create(t);return Object.assign(e,n.variables),e}init(t,e){this.end0=t,this.end1=e,t.links.push(this),e.links.push(this)}die(){this.id!==-1&&(this.agentSet.removeAgent(this),On(this.end0.links,this),On(this.end1.links,this),this.id=-1)}isDead(){return this.id===-1}bothEnds(){return xn.fromArray([this.end0,this.end1])}length(){return this.end0.distance(this.end1)}get heading(){let{x0:t,x1:e,y0:i,y1:r}=this,s=Math.atan2(r-i,e-t);return this.model.fromRads(s)}otherEnd(t){if(t===this.end0)return this.end1;if(t===this.end1)return this.end0;throw Error(`Link.otherEnd: turtle not a link turtle: ${t}`)}distanceXY(t,e){return this.bothEnds().map(i=>i.distanceXY(t,e)).sum()-this.length()}get x0(){return this.end0.x}get y0(){return this.end0.y}get z0(){return this.end0.z?this.end0.z:0}get x1(){return this.end1.x}get y1(){return this.end1.y}get z1(){return this.end1.z?this.end1.z:0}},Ih=Rh;var Dh=class extends Xi{constructor(t,e,i,r=null){super(t,e,i,r)}createOne(t,e,i=r=>{}){let r=this.addAgent();return r.init(t,e),i(r),r}create(t,e,i=r=>{}){return Array.isArray(e)||(e=[e]),e.map(r=>this.createOne(t,r,i))}},Oh=Dh;var Fh=class n{maxX=16;minX=-16;maxY=16;minY=-16;maxZ=16;minZ=-16;static defaultOptions(t=16,e=t,i=Math.max(t,e)){return{minX:-t,maxX:t,minY:-e,maxY:e,minZ:-i,maxZ:i}}static defaultWorld(t=16,e=t,i=t){return new n(n.defaultOptions(t,e,i))}constructor(t={}){Object.assign(this,t),this.setWorld()}setWorld(){let{minX:t,maxX:e,minY:i,maxY:r,minZ:s,maxZ:o}=this;zt({minX:t,maxX:e,minY:i,maxY:r,minZ:s,maxZ:o},(a,c)=>{if(!Number.isInteger(a))throw Error(`World: ${c}:${a} must be an integer`)}),this.numX=this.width=e-t+1,this.numY=this.height=r-i+1,this.numZ=this.depth=o-s+1,this.minXcor=t-.5,this.maxXcor=e+.5,this.minYcor=i-.5,this.maxYcor=r+.5,this.minZcor=s-.5,this.maxZcor=o+.5,this.centerX=(t+e)/2,this.centerY=(i+r)/2,this.centerZ=(s+o)/2,this.numPatches=this.numX*this.numY}getOptions(){let{minX:t,minY:e,minZ:i,maxX:r,maxY:s,maxZ:o}=this;return{minX:t,minY:e,minZ:i,maxX:r,maxY:s,maxZ:o}}randomPoint(){return[ii(this.minXcor,this.maxXcor),ii(this.minYcor,this.maxYcor)]}random3DPoint(){return[ii(this.minXcor,this.maxXcor),ii(this.minYcor,this.maxYcor),ii(this.minZcor,this.maxZcor)]}randomPatchPoint(){return[ni(this.minX,this.maxX),ni(this.minY,this.maxY)]}isOnWorld(t,e,i=this.centerZ){return this.minXcor<=t&&t<=this.maxXcor&&this.minYcor<=e&&e<=this.maxYcor&&this.minZcor<=i&&i<=this.maxZcor}bboxTransform(t,e,i,r){return new zh(t,e,i,r,this)}getWorldSize(){return[this.numX,this.numY]}setEuclideanTransform(t,e){this.setCanvasSize(t.canvas,e),t.restore(),t.save(),t.scale(e,-e),t.translate(-this.minXcor,-this.maxYcor)}patchSize(t){let{numX:e,numY:i}=this,{clientWidth:r,clientHeight:s}=t,o=r/e,a=s/i;if(o!==a)throw Error(`World patchSize: x/y sizes differ ${o}, ${a}`);return o}setCanvasSize(t,e){Na(t,this.numX*e,this.numY*e)}pixelXYtoPatchXY(t,e,i){return[this.minXcor+t/i,this.maxYcor-e/i]}patchXYtoPixelXY(t,e,i){return[(t-this.minXcor)*i,(this.maxYcor-e)*i]}xyToPatchIndex(t,e){if(!this.isOnWorld(t,e))return;let{minX:i,maxX:r,maxY:s,numX:o,maxXcor:a,maxYcor:c}=this;return t=t===a?r:Math.round(t),e=e===c?s:Math.round(e),t-i+o*(s-e)}},Bn=Fh,zh=class{constructor(t,e,i,r,s){this.bbox=[t,e,i,r],t<i&&console.log("flipX"),r<e&&console.log("flipY"),t<i&&([t,i]=[i,t]),r<e&&([r,e]=[e,r]);let{maxXcor:o,maxYcor:a,minXcor:c,minYcor:l}=s,u=(t-i)/(o-c),h=(r-e)/(a-l),d=(t+i-u*(o+c))/2,f=(r+e-h*(a+l))/2;Object.assign(this,{mx:u,my:h,bx:d,by:f})}toWorld(t){let{mx:e,my:i,bx:r,by:s}=this,[o,a]=t,c=(o-r)/e,l=(a-s)/i;return[c,l]}toBBox(t){let{mx:e,my:i,bx:r,by:s}=this,[o,a]=t,c=e*o+r,l=i*a+s;return[c,l]}};var Va={};Ui(Va,{Lbounds2bbox:()=>jv,attribution:()=>sb,bboxAspect:()=>tb,bboxBounds:()=>Yv,bboxCenter:()=>eo,bboxCoords:()=>kr,bboxFeature:()=>Zh,bboxFromCenter:()=>Jh,bboxMetricAspect:()=>Qh,bboxMetricSize:()=>no,bboxSize:()=>Yp,elevationTemplate:()=>cb,fetchStreetsJson:()=>nb,getOsmURL:()=>Zp,isBBox:()=>qv,jsonToBBox:()=>Zv,latlon:()=>Vp,latz2y:()=>jp,latz2yFloat:()=>jh,lonLat2meters:()=>Vh,lonLatz2bbox:()=>Wv,lonlatz2xy:()=>Xh,lonlatz2xyFloat:()=>Xp,lonz2x:()=>Wp,lonz2xFloat:()=>Wh,newMexicoBBox:()=>qa,newMexicoCenter:()=>Qv,santaFeBBox:()=>Jv,santaFeCenter:()=>$h,santaFeSmallBBox:()=>$v,template:()=>ob,tilesBBox:()=>Xv,url:()=>ab,usaBBox:()=>qp,usaCenter:()=>Kv,xyInBBox:()=>Uh,xyz2bbox:()=>Xa,xyz2centerLonlat:()=>Vv,xyz2lonlat:()=>Hh,xz2lon:()=>qh,yz2lat:()=>Yh});var Bh={};Ui(Bh,{bboxFeature:()=>Cv,clone:()=>hi,flatten:()=>Ha,flattenMultiLineStrings:()=>zp,geojsonBBox:()=>Nh,getCoordinates:()=>Ks,isGeojson:()=>Tv,lineStringsToLinks:()=>Lv,minify:()=>Av});function Tv(n){return typeof n=="object"&&n.type==="FeatureCollection"}function hi(n){return JSON.parse(JSON.stringify(n))}function Av(n){return typeof n=="string"&&(n=JSON.parse(n)),JSON.stringify(n).replace(/},{/g,`},
{`)}function Cv(n,t={}){let e=kr(n);return e.push(e[0]),{type:"Feature",geometry:{cordinates:e,type:"Polygon"},properties:t}}function zp(n,t=!0){return t&&(n=hi(n)),(n.features||n).reduce((r,s)=>{let o=s.geometry;return o.type==="LineString"?(o.coordinates.properties=s.properties,r.push(o.coordinates)):o.type==="MultiLineString"&&o.coordinates.forEach(a=>{a.properties=s.properties,r.push(a)}),r},[])}function Lv(n,t,e){let i=n.world.xfm||n.world.bboxTransform(...t);e=zp(e);let r={},s=[],o=[];function a(u){let h=u.toString(),d=r[h];return d||(d=n.turtles.createOne(f=>{f.setxy(...i.toWorld(u)),f.lon=u[0],f.lat=u[1]}),r[h]=d,s.push(d),d)}function c(u,h){let d=a(u),f=a(h),p=n.links.createOne(d,f);return o.push(p),p}function l(u){u.reduce((h,d,f,p)=>{let y=c(p[f-1],d);return f===1?(h=[y],h.properties=u.properties):h.push(y),y.lineString=h,h})}return e.forEach(u=>l(u)),[s,o]}function Ha(n,t=!0){switch(t&&(n=hi(n)),n&&n.type||null){case"FeatureCollection":return n.features=n.features.reduce(function(e,i){return e.concat(Ha(i))},[]),n;case"Feature":return n.geometry?Ha(n.geometry).map(function(e){var i={type:"Feature",properties:JSON.parse(JSON.stringify(n.properties)),geometry:e};return n.id!==void 0&&(i.id=n.id),i}):[n];case"MultiPoint":return n.coordinates.map(function(e){return{type:"Point",coordinates:e}});case"MultiPolygon":return n.coordinates.map(function(e){return{type:"Polygon",coordinates:e}});case"MultiLineString":return n.coordinates.map(function(e){return{type:"LineString",coordinates:e}});case"GeometryCollection":return n.geometries.map(Ha).reduce(function(e,i){return e.concat(i)},[]);case"Point":case"Polygon":case"LineString":return[n]}}function Nh(n){var t,e;if(n.hasOwnProperty("type"))return t=Ks(n),e=[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],t.reduce(function(i,r){return[Math.min(r[0],i[0]),Math.min(r[1],i[1]),Math.max(r[0],i[2]),Math.max(r[1],i[3])]},e)}function Ks(n){switch(n.type){case"Point":return[n.coordinates];case"LineString":case"MultiPoint":return n.coordinates;case"Polygon":case"MultiLineString":return n.coordinates.reduce(function(t,e){return t.concat(e)},[]