From 64e557a6a0b3bbb2ec0d89055730152c504d9463 Mon Sep 17 00:00:00 2001 From: webreflection Date: Mon, 31 Mar 2025 15:38:00 +0200 Subject: [PATCH 1/9] Testing coincident with single payload --- docs/index.js | 2 +- docs/index.js.map | 2 +- docs/toml-CkEFU7ly.js | 103 +++++++++++++ docs/toml-CkEFU7ly.js.map | 1 + docs/zip-DPXsOtR5.js.map | 2 +- docs/zip-DXp-b1fY.js | 13 ++ docs/zip-DXp-b1fY.js.map | 1 + esm/interpreter/_python.js | 4 +- esm/worker/_template.js | 24 +-- package-lock.json | 303 +++++++++++++++++++++---------------- package.json | 10 +- rollup/build_xworker.cjs | 6 +- 12 files changed, 319 insertions(+), 152 deletions(-) create mode 100644 docs/toml-CkEFU7ly.js create mode 100644 docs/toml-CkEFU7ly.js.map create mode 100644 docs/zip-DXp-b1fY.js create mode 100644 docs/zip-DXp-b1fY.js.map diff --git a/docs/index.js b/docs/index.js index 419ba732..1fd13513 100644 --- a/docs/index.js +++ b/docs/index.js @@ -1,2 +1,2 @@ -const e=(e,t=document)=>[...t.querySelectorAll(e)],t=(e,t=document)=>{const n=(new XPathEvaluator).createExpression(e).evaluate(t,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE),r=[];for(let e=0,{snapshotLength:t}=n;e"function"==typeof e,s={get:(e,t)=>n.hasOwnProperty(t)?((e,t,{get:n,value:s})=>n||!r(s)?e.then((e=>e[t])):(...n)=>e.then((e=>e[t](...n))))(e,t,n[t]):((e,t)=>r(t)?t.bind(e):t)(e,e[t])};var o=(e,...t)=>new Proxy(fetch(e,...t),s);const{assign:a}=Object,i="entries",c="readonly",l="readwrite",u={durability:"default",prefix:"IDBMap"},p=({target:{result:e}})=>e;class d extends EventTarget{#e;#t;#n;async#r(e,t){const n=(await this.#e).transaction(i,t,this.#t);return new Promise(((t,r)=>a(e(n.objectStore(i)),{onsuccess:t,onerror:r})))}constructor(e,{durability:t=u.durability,prefix:n=u.prefix}=u){super(),this.#n=n,this.#t={durability:t},this.#e=new Promise(((t,n)=>{a(indexedDB.open(`${this.#n}/${e}`),{onupgradeneeded({target:{result:e,transaction:n}}){e.objectStoreNames.length||e.createObjectStore(i),n.oncomplete=()=>t(e)},onsuccess(e){t(p(e))},onerror(e){n(e),this.dispatchEvent(e)}})})).then((e=>{const t=this.dispatchEvent.bind(this);for(const n in e)n.startsWith("on")&&(e[n]=t);return e}))}dispatchEvent(e){const{type:t,message:n,isTrusted:r}=e;return super.dispatchEvent(r?a(new Event(t),{message:n}):e)}async close(){(await this.#e).close()}get size(){return this.#r((e=>e.count()),c).then(p)}async clear(){await this.#r((e=>e.clear()),l)}async delete(e){await this.#r((t=>t.delete(e)),l)}async entries(){const e=await this.keys();return Promise.all(e.map((e=>this.get(e).then((t=>[e,t])))))}async forEach(e,t=this){for(const[n,r]of await this.entries())await e.call(t,r,n,this)}async get(e){return await this.#r((t=>t.get(e)),c).then(p)}async has(e){return void 0!==await this.#r((t=>t.getKey(e)),c).then(p)}async keys(){return await this.#r((e=>e.getAllKeys()),c).then(p)}async set(e,t){return await this.#r((n=>n.put(t,e)),l),this}async values(){const e=await this.keys();return Promise.all(e.map((e=>this.get(e))))}get[Symbol.toStringTag](){return this.#n}}class f extends Map{#s;#o;constructor(...e){super(),this.#s=new d(...e),this.#o=this.#s.entries().then((e=>{for(const[t,n]of e)super.set(t,n)}))}async close(){await this.#o,await this.#s.close()}async sync(){await this.#o}clear(){return this.#o=this.#o.then((()=>this.#s.clear())),super.clear()}delete(e){return this.#o=this.#o.then((()=>this.#s.delete(e))),super.delete(e)}set(e,t){return this.#o=this.#o.then((()=>this.#s.set(e,t))),super.set(e,t)}}const h=new Proxy(new Map,{get:(e,t)=>(e.has(t)||e.set(t,Promise.withResolvers()),e.get(t))}),y=new Set(["__dict__","constructor","get","has","includes","next","set","then"]),m=new Proxy(Object.freeze({}),{get:(e,t)=>"string"!=typeof t||y.has(t)?void 0:h[t].promise.then((e=>e.sync))}),w="object"==typeof self?self:globalThis,g=e=>((e,t)=>{const n=(t,n)=>(e.set(n,t),t),r=s=>{if(e.has(s))return e.get(s);const[o,a]=t[s];switch(o){case 0:case-1:return n(a,s);case 1:{const e=n([],s);for(const t of a)e.push(r(t));return e}case 2:{const e=n({},s);for(const[t,n]of a)e[r(t)]=r(n);return e}case 3:return n(new Date(a),s);case 4:{const{source:e,flags:t}=a;return n(new RegExp(e,t),s)}case 5:{const e=n(new Map,s);for(const[t,n]of a)e.set(r(t),r(n));return e}case 6:{const e=n(new Set,s);for(const t of a)e.add(r(t));return e}case 7:{const{name:e,message:t}=a;return n(new w[e](t),s)}case 8:return n(BigInt(a),s);case"BigInt":return n(Object(BigInt(a)),s);case"ArrayBuffer":return n(new Uint8Array(a).buffer,a);case"DataView":{const{buffer:e}=new Uint8Array(a);return n(new DataView(e),a)}}return n(new w[o](a),s)};return r})(new Map,e)(0),_="",{toString:A}={},{keys:b}=Object,v=e=>{const t=typeof e;if("object"!==t||!e)return[0,t];const n=A.call(e).slice(8,-1);switch(n){case"Array":return[1,_];case"Object":return[2,_];case"Date":return[3,_];case"RegExp":return[4,_];case"Map":return[5,_];case"Set":return[6,_];case"DataView":return[1,n]}return n.includes("Array")?[1,n]:n.includes("Error")?[7,n]:[2,n]},E=([e,t])=>0===e&&("function"===t||"symbol"===t),k=(e,{json:t,lossy:n}={})=>{const r=[];return((e,t,n,r)=>{const s=(e,t)=>{const s=r.push(e)-1;return n.set(t,s),s},o=r=>{if(n.has(r))return n.get(r);let[a,i]=v(r);switch(a){case 0:{let t=r;switch(i){case"bigint":a=8,t=r.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+i);t=null;break;case"undefined":return s([-1],r)}return s([a,t],r)}case 1:{if(i){let e=r;return"DataView"===i?e=new Uint8Array(r.buffer):"ArrayBuffer"===i&&(e=new Uint8Array(r)),s([i,[...e]],r)}const e=[],t=s([a,e],r);for(const t of r)e.push(o(t));return t}case 2:{if(i)switch(i){case"BigInt":return s([i,r.toString()],r);case"Boolean":case"Number":case"String":return s([i,r.valueOf()],r)}if(t&&"toJSON"in r)return o(r.toJSON());const n=[],c=s([a,n],r);for(const t of b(r))!e&&E(v(r[t]))||n.push([o(t),o(r[t])]);return c}case 3:return s([a,r.toISOString()],r);case 4:{const{source:e,flags:t}=r;return s([a,{source:e,flags:t}],r)}case 5:{const t=[],n=s([a,t],r);for(const[n,s]of r)(e||!E(v(n))&&!E(v(s)))&&t.push([o(n),o(s)]);return n}case 6:{const t=[],n=s([a,t],r);for(const n of r)!e&&E(v(n))||t.push(o(n));return n}}const{message:c}=r;return s([a,{name:i,message:c}],r)};return o})(!(t||n),!!t,new Map,r)(e),r},{parse:S,stringify:j}=JSON,$={json:!0,lossy:!0};var x=Object.freeze({__proto__:null,parse:e=>g(S(e)),stringify:e=>j(k(e,$))});const B="ownKeys",R="destruct",T="destroy",P="c70de905-a212-4eca-80aa-dad8bd4e677b",M="="+P,F="-"+P,{ArrayBuffer:D,Atomics:O,Promise:L}=globalThis,{isArray:C}=Array,{create:I,getPrototypeOf:W,values:H}=Object,U=W(Int32Array),N=I(O),J=()=>L.withResolvers();let q=0;const z=new Map,G=(e,t)=>class extends e{constructor(e,...n){super(e,...n),e instanceof t&&z.set(this,[q++,0,J()])}},K=new WeakSet,V=e=>(K.add(e),e),X=(e,t)=>{const{data:n}=e,r=C(n)&&(n.at(0)===t||0===n.at(1)&&!t);return r&&(e.stopImmediatePropagation(),e.preventDefault()),r},Y=e=>null!==e&&"object"==typeof e&&!K.has(e),Z=new WeakMap,Q=(e,t,n)=>{if(z.has(e))t.set(e,z.get(e)[0]);else if(!(e instanceof U||e instanceof D))for(const r of H(e))Y(r)&&!n.has(r)&&(n.add(r),Q(r,t,n))},ee=(...e)=>({value:new L((t=>{let n=new Worker("data:application/javascript,onmessage%3De%3D%3EpostMessage(!Atomics.wait(...e.data))");n.onmessage=()=>t("ok"),n.postMessage(e)}))}),te=(e,t,n)=>{for(const[n,r]of t)Z.set(n,[r,e.currentTarget]);(({currentTarget:e,type:t,origin:n,lastEventId:r,source:s,ports:o},a)=>{e.dispatchEvent(new MessageEvent(t,{data:a,origin:n,lastEventId:r,source:s,ports:o}))})(e,n)};let{Int32Array:ne,SharedArrayBuffer:re,Worker:se}=globalThis,oe=e=>e,ae=!1;const ie=e=>({...e,type:"module"});try{new re(4),se=class extends se{constructor(e,t){super(e,ie(t))}},N.waitAsync||(N.waitAsync=ee)}catch(e){const t=crypto.randomUUID(),n=new Map,r=(e,t,n,...r)=>{e.addEventListener(t,n,...r)},s=({serviceWorker:e},s,o)=>{let a,i=!0;r(e,"message",(e=>{if(X(e,t)){const[r,s,o]=e.data,i=[s,o].join(","),c=e=>{n.delete(i),a.postMessage([t,s,o,e])},l=n.get(i);if(l)c(l);else{const{promise:e,resolve:t}=J();n.set(i,t),e.then(c)}}})),e.getRegistration(s).then((t=>t??e.register(s))).then((function t(n){i=i&&!!e.controller,a=n.installing||n.waiting||n.active,"activated"===a.state?i?o():location.reload():r(a,"statechange",(()=>t(n)),{once:!0})}))};oe=V,ae=!0,N.notify=(e,r)=>{const[s,o]=(e=>Z.get(e))(e),a=[s,r].join(","),i=n.get(a);return i?i(e):n.set(a,e),o.postMessage([t,1,e,s,r]),0},N.waitAsync=(e,...t)=>{const[n,r]=((e,t)=>{const n=z.get(e),[r,s,{promise:o}]=n;return n[1]=t,[r,o]})(e,...t);return{value:r}},re=class extends D{},ne=G(ne,re);let o=null;se=class extends se{constructor(e,n){let a=n?.serviceWorker||"";if(a){if(a=new URL(a,location.href).href,n={...n,serviceWorker:a},!o){const{promise:e,resolve:t}=J();s(navigator,a,t),o=e}o.then((()=>super.postMessage([t,3])))}super(e,ie(n)),super.postMessage([t,0,n]),r(this,"message",(e=>{if(X(e,t)){const[t,n,...r]=e.data;switch(n){case 1:((e,t,n)=>{for(const[r,[s,o,{resolve:a}]]of z)if(t===s&&n===o){for(let t=0;t{const n=new Map;return Y(t)&&Q(t,n,new Set),n.size?[e,2,n,t]:t})(t,e),...n)}}}const{BYTES_PER_ELEMENT:ce}=Int32Array,{BYTES_PER_ELEMENT:le}=Uint16Array,{notify:ue}=N,pe=new TextDecoder("utf-16"),de=new WeakSet,fe=(...e)=>(de.add(e),e);let he="";let ye=0;const me=([e,t,n,r,s,o,a,i,c],l)=>(...u)=>{let p=""!==he,d=0;p&&"="!==he[0]&&"-"!==he[0]&&(d=((e,t)=>setTimeout(console.warn,3e3,`💀🔒 - proxy.${e}() in proxy.${t}()`))(l,he));const f=ye++;let h=[];de.has(u.at(-1)||h)&&de.delete(h=u.pop());const y=n(i?u.map(i):u);let m=t(2*ce);return a([e,2,l,f,m,y,r],{transfer:h}),c(m,0).value.then((()=>{p&&clearTimeout(d);const n=m[1];if(!n)return;const r=le*n;return m=t(r+r%ce),a([e,1,f,m]),c(m,0).value.then((()=>{const e=new Uint16Array(m.buffer),t=o?e.subarray(0,n):e.slice(0,n);return s(pe.decode(t))}))}))};var we=({parse:e,stringify:t,transform:n}=JSON)=>{const r=((e,t)=>async(n,r,[s,o,a,i,c])=>{c&&(he=s);try{const s=await n(...i);if(void 0!==s){const n=e(t?t(s):s);r.set(o,n),a[1]=n.length}}finally{c&&(he=""),a[0]=1,ue(a,0)}})(t,n);return{Worker:class extends se{constructor(t,s){const o=crypto.randomUUID(),a=new Map,i=new Map;super(t,s),this.proxy=((e,t)=>new Proxy(t,{get:(t,n)=>{let r;return"then"!==n&&(r=t.get(n),r||(r=me(e,n),t.set(n,r))),r},set:(e,t,n)=>"then"!==t&&!!e.set(t,n)}))([o,e=>new ne(new re(e)),oe,!1,e,ae,(...e)=>this.postMessage(...e),n,N.waitAsync],a),this.postMessage(oe([o,0,s])),this.addEventListener("message",(e=>{if(X(e,o)){const[t,n,...s]=e.data;switch(n){case 2:((e,t,n,r)=>{const[s]=r,o=n.get(s);if(!o)throw new Error(`Unknown proxy.${s}()`);e(o,t,r)})(r,i,a,s);break;case 1:((e,[t,n])=>{const r=e.get(t);e.delete(t);for(let e=new Uint16Array(n.buffer),t=0,{length:s}=r;t[e,t])));const{[B]:$e}=Reflect,xe=new Map($e(Symbol).filter((e=>typeof Symbol[e]===ke)).map((e=>[Symbol[e],e]))),Be=e=>xe.get(e)||`.${Symbol.keyFor(e)||""}`,Re=new FinalizationRegistry((([e,t,n])=>{n&&console.debug(`%c${String(t)}`,"font-weight:bold","collected"),e(t)})),Te=Object.create(null),Pe=(e,t,{debug:n,handler:r,return:s,token:o=e}=Te)=>{const a=s||new Proxy(e,r||Te),i=[a,[t,e,!!n]];return!1!==o&&i.push(o),Re.register(...i),a},{addEventListener:Me}=EventTarget.prototype,Fe=new WeakMap;Reflect.defineProperty(EventTarget.prototype,"addEventListener",{value(e,t,...n){const r=n.at(0)?.invoke;if(r){let t=Fe.get(this);t||(t=new Map,Fe.set(this,t)),t.set(e,[].concat(r)),delete n[0].invoke}return Me.call(this,e,t,...n)}});const{isArray:De}=Array;var Oe=(e,t)=>{const{clear:n,drop:r,get:s,hold:o}=(()=>{const e=new Map,t=new Map;let n=0;return{clear:()=>{e.clear(),t.clear()},drop:n=>{const[r,s]=typeof n===be?[t,e]:[e,t],o=r.has(n);return o&&(s.delete(r.get(n)),r.delete(n)),o},get:e=>t.get(e),hold:r=>{if(!e.has(r)){let s;for(;t.has(s=n++););e.set(r,s),t.set(s,r)}return e.get(r)}}})(),a=new Map,i=e=>{a.delete(e),t(R,e)},c=e=>{const t=typeof e;switch(t){case ve:return null===e?[je[Ae],e]:e===globalThis?[je[ve],null]:De(e)?[je[ge],o(e)]:[je[ve],e instanceof U?e:o(e)];case _e:return[je[_e],o(e)];case ke:return[je[ke],Be(e)];default:return[je[t],e]}},l=([e,n])=>{switch(e){case je[ve]:if(null===n)return globalThis;if(typeof n===be)return s(n);if(!(n instanceof U))for(const e in n)n[e]=l(n[e]);return n;case je[ge]:return typeof n===be?s(n):n.map(l);case je[_e]:switch(typeof n){case be:return s(n);case Ee:{let e=a.get(n)?.deref();return e||(e=Pe(n,i,{token:!1,return:function(...e){return e.length&&e[0]instanceof Event&&(e=>{const{currentTarget:t,target:n,type:r}=e,s=Fe.get(t||n)?.get(r);if(s)for(const t of s)e[t]()})(e[0]),t("apply",n,c(this),e.map(c)).then(l)}}),a.set(n,new WeakRef(e))),e}}case je[ke]:return(e=>{if(e.startsWith("."))return Symbol.for(e.slice(1));for(const[t,n]of xe)if(n===e)return t})(n);default:return n}},u=(e,t,n)=>c(e(t,...n.map(l))),p=t=>import(e(t)),d=new Set;return(e,t,...o)=>{if(e===T)n();else if(e===R)d.has(t)||r(t);else{const n=Reflect[e],r=null==t?globalThis:s(t);switch(e){case"defineProperty":{const[e,t]=o.map(l);return c(n(r,e,t))}case"getOwnPropertyDescriptor":{const e=n(r,...o.map(l));if(e){const{get:t,set:n,value:r}=e;t&&(e.get=c(t)),n&&(e.set=c(n)),r&&(e.value=c(r))}return[je[e?ve:Se],e]}case B:return[je[ge],n(r).map(c)];case"get":if(null==t){const e="import"===o[0][1]?c(p):u(n,r,o);return d.add(e[1]),e}default:return u(n,r,o)}}}};const{url:Le}=import.meta,Ce=/import\((['"])([^)]+?\.js)\1\)/g,Ie=(e,t,n)=>`import(${t}${new URL(n,Le).href}${t})`,{Worker:We}=(e=>{const t=e?.import,n=we(e);class r extends n.Worker{constructor(e,n){const{proxy:r}=super(e,n);r[M]=Oe(n?.import||t||(e=>new URL(e,location.href)),r[F])}terminate(){this.proxy[M](T),super.terminate()}}return{...n,Worker:r}})(x);const He=new WeakMap,Ue=e=>{const t=e||console,n={buffered:Je,stderr:(t.stderr||console.error).bind(t),stdout:(t.stdout||console.log).bind(t)};return{stderr:(...e)=>n.stderr(...e),stdout:(...e)=>n.stdout(...e),async get(e){const t=await e;return He.set(t,n),t}}},Ne=new TextDecoder,Je=(e,t=10)=>{const n=[];return r=>{if(r instanceof Uint8Array)for(const s of r)s===t?e(Ne.decode(new Uint8Array(n.splice(0)))):n.push(s);else e(r)}},qe=new Map,ze=e=>qe.get(e),Ge=(e,t)=>{try{return Function("require",t)(ze)}catch(t){He.get(e).stderr(t)}};var Ke={type:"dummy",module:()=>"data:application/javascript,",engine:e=>Ue().get(e),registerJSModule(e,t,n){qe.set(t,n)},run:Ge,runAsync:Ge,runEvent:async(e,t,n)=>{try{await Function("require","e",`return ${t}(e)`)(ze,n)}catch(t){He.get(e).stderr(t)}},transform:(e,t)=>t,writeFile(){}};Promise.withResolvers||(Promise.withResolvers=function(){var e,t,n=new this((function(n,r){e=n,t=r}));return{resolve:e,reject:t,promise:n}});const Ve={object(...e){return this.string(function(e){for(var t=e[0],n=1,r=arguments.length;n",">":">","'":"'","'":"'",""":'"',""":'"'},Qe=e=>Ze[e],et=(e,...t)=>Ve[typeof e](e,...t),tt=e=>Xe.call(e,Ye,Qe),{isArray:nt}=Array,{assign:rt,create:st,defineProperties:ot,defineProperty:at,entries:it}=Object,{all:ct,resolve:lt}=new Proxy(Promise,{get:(e,t)=>e[t].bind(e)}),ut=(e,t=location.href)=>new URL(e,t.replace(/^blob:/,"")).href;function pt(e){return e.startsWith(".")?ut(e,this):e}let dt=0;const ft=(e,t)=>({id:e.id||(e.id=`${t}-w${dt++}`),tag:e.tagName}),ht=(e,t,n,r=!1,s=CustomEvent)=>{e.dispatchEvent(new s(`${t}:${n}`,{bubbles:!0,detail:{worker:r}}))},yt=(e,t,n,r)=>({type:t,config:n,interpreter:r,io:He.get(r),run:(t,...n)=>e.run(r,t,...n),runAsync:(t,...n)=>e.runAsync(r,t,...n),runEvent:(...t)=>e.runEvent(r,...t)}),mt=e=>e.replace(/^(?:\n|\r\n)/,""),wt=(e,t,n,r)=>{const s=e[t].bind(e);e[t]="run"===t?(e,t,...o)=>{n&&s(e,n,...o);const a=s(e,mt(t),...o);return r&&s(e,r,...o),a}:async(e,t,...o)=>{n&&await s(e,n,...o);const a=await s(e,mt(t),...o);return r&&await s(e,r,...o),a}},gt=Symbol.for("polyscript.js_modules"),_t=new Map;at(globalThis,gt,{value:_t});const At=new Proxy(_t,{get:(e,t)=>e.get(t),has:(e,t)=>e.has(t),ownKeys:e=>[...e.keys()]}),bt=(e,t)=>!t.startsWith("_"),vt=(e,t)=>new Proxy(e,{has:bt,get:(e,n)=>e[t][n]}),Et=(e,t,n,r)=>{if("pyodide"===e)return;const s="polyscript.js_modules";for(const e of Reflect.ownKeys(r))t.registerJSModule(n,`${s}.${e}`,vt(r,e));t.registerJSModule(n,s,r)},kt=(e,t)=>import(e).then((e=>{_t.set(t,{...e})})),St=e=>new Promise(((t,n)=>{document.querySelector(`link[rel="stylesheet"][href="${e}"]`)?t():document.head.append(rt(document.createElement("link"),{rel:"stylesheet",href:e,onload:t,onerror:n}))})),jt=e=>/\.css$/i.test(new URL(e).pathname),$t=e=>/^(?:false|0|no)$/i.test(e.getAttribute("async")),xt=!globalThis.window,Bt=({FS:e,PATH:t,PATH_FS:n},r,s)=>{const o=n.resolve(r),a=t.dirname(o);return e.mkdirTree?e.mkdirTree(a):Tt(e,a),e.writeFile(o,new Uint8Array(s),{canOwn:!0})},Rt=e=>{const t=e.split("/");return t.pop(),t.join("/")},Tt=(e,t)=>{const n=[];for(const r of t.split("/"))"."!==r&&".."!==r&&(n.push(r),r&&e.mkdir(n.join("/")))},Pt=(e,t)=>{const n=[];for(const e of t.split("/"))switch(e){case"":case".":break;case"..":n.pop();break;default:n.push(e)}return[e.cwd()].concat(n).join("/").replace(/^\/+/,"/")},Mt=e=>{const t=e.map((e=>e.trim().replace(/(^[/]*|[/]*$)/g,""))).filter((e=>""!==e&&"."!==e)).join("/");return e[0].startsWith("/")?`/${t}`:t},Ft=(e,t)=>o(ut(e,t)).arrayBuffer(),Dt=(e,t,n,r)=>ct((e=>{for(const{files:t,to_file:n,from:r=""}of e){if(void 0!==t&&void 0!==n)throw new Error("Cannot use 'to_file' and 'files' parameters together!");if(void 0===t&&void 0===n&&r.endsWith("/"))throw new Error(`Couldn't determine the filename from the path ${r}, please supply 'to_file' parameter.`)}return e.flatMap((({from:e="",to_folder:t=".",to_file:n,files:r})=>{if(nt(r))return r.map((n=>({url:Mt([e,n]),path:Mt([t,n])})));const s=n||e.slice(1+e.lastIndexOf("/"));return[{url:e,path:Mt([t,s])}]}))})(n).map((({url:n,path:s})=>Ft(n,r).then((n=>e.writeFile(t,s,n)))))),Ot=(e,t)=>t.endsWith("/")?`${t}${e.split("/").pop()}`:t,Lt=(e,t)=>e.replace(/\{.+?\}/g,(e=>{if(!t.has(e))throw new SyntaxError(`Invalid template: ${e}`);return t.get(e)})),Ct=(e,t,n,r)=>ct((e=>{const t=new Map,n=new Set,r=[];for(const[s,o]of it(e))if(/^\{.+\}$/.test(s)){if(t.has(s))throw new SyntaxError(`Duplicated template: ${s}`);t.set(s,Lt(o,t))}else{const e=Lt(s,t),a=Ot(e,Lt(o||"./",t));if(n.has(a)&&!a.endsWith("/*"))throw new SyntaxError(`Duplicated destination: ${a}`);n.add(a),r.push({url:e,path:a})}return r})(n).map((({url:n,path:s})=>Ft(n,r).then((r=>e.writeFile(t,s,r,n)))))),It=({main:e,worker:t},n)=>{const r=[];if(t&&xt)for(let[e,s]of it(t))e=ut(e,n),r.push(kt(e,s));if(e&&!xt)for(let[t,s]of it(e))t=ut(t,n),jt(t)?St(t):r.push(kt(t,s));return ct(r)},Wt=e=>t=>{dispatchEvent(new CustomEvent(`${e}:progress`,{detail:t}))},Ht=new WeakMap,Ut=async(e,t,n,r,s)=>{r.files&&(t("Loading files"),await Ct(e,n,r.files,s),t("Loaded files")),r.fetch&&(t("Loading fetch"),await Dt(e,n,r.fetch,s),t("Loaded fetch")),r.js_modules&&(t("Loading JS modules"),await It(r.js_modules,s),t("Loaded JS modules"))},Nt=(e,t,n)=>{"polyscript"===t&&(n.lazy_py_modules=async(...t)=>(await Ht.get(e)(t),t.map((t=>e.pyimport(t)))),n.storage=async e=>{const t=new f(e);return await t.sync(),t},n.JSON=x),e.registerJsModule(t,n)},Jt=(e,t)=>{if(e.endsWith("/*")){if(/\.(zip|whl|tgz|tar(?:\.gz)?)$/.test(t))return RegExp.$1;throw new Error(`Unsupported archive ${t}`)}return""},qt=(e,t,...n)=>{try{return e.runPython(et(t),...n)}catch(t){He.get(e).stderr(t)}},zt=async(e,t,...n)=>{try{return await e.runPythonAsync(et(t),...n)}catch(t){He.get(e).stderr(t)}},Gt=async(e,t,n)=>{const[r,...s]=t.split(".");let o,a=e.globals.get(r);for(const e of s)[o,a]=[a,a[e]];try{await a.call(o,n)}catch(t){He.get(e).stderr(t)}};var Kt=(new TextEncoder).encode("_F='github:'\n_E='user-agent'\n_D=True\n_C=False\n_B='/'\n_A=None\nfrom uio import StringIO\nimport sys\nclass Response:\n\tdef __init__(A,f):A.raw=f;A.encoding='utf-8';A._cached=_A\n\tdef close(A):\n\t\tif A.raw:A.raw.close();A.raw=_A\n\t\tA._cached=_A\n\t@property\n\tdef content(self):\n\t\tA=self\n\t\tif A._cached is _A:\n\t\t\ttry:A._cached=A.raw.read()\n\t\t\tfinally:A.raw.close();A.raw=_A\n\t\treturn A._cached\n\t@property\n\tdef text(self):return str(self.content,self.encoding)\n\tdef json(A):import ujson;return ujson.loads(A.content)\nHEADERS_TO_IGNORE=_E,\ntry:import js\nexcept Exception as err:raise OSError('This version of urequests can only be used in the browser')\nHEADERS_TO_IGNORE=_E,\ndef request(method,url,data=_A,json=_A,headers={},stream=_A,auth=_A,timeout=_A,parse_headers=_D):\n\tE=timeout;D=method;C=data;from js import XMLHttpRequest as G;A=G.new();A.withCredentials=_C\n\tif auth is not _A:import ubinascii;H,I=auth;A.open(D,url,_C,H,I)\n\telse:A.open(D,url,_C)\n\tfor(F,J)in headers.items():\n\t\tif F.lower()not in HEADERS_TO_IGNORE:A.setRequestHeader(F,J)\n\tif E:A.timeout=int(E*1000)\n\tif json is not _A:assert C is _A;import ujson;C=ujson.dumps(json);A.setRequestHeader('Content-Type','application/json')\n\tA.send(C);B=Response(StringIO(A.responseText));B.status_code=A.status;B.reason=A.statusText;B.headers=A.getAllResponseHeaders();return B\ndef get(url,**A):return request('GET',url,**A)\n_PACKAGE_INDEX=const('https://micropython.org/pi/v2')\n_CHUNK_SIZE=128\ndef _ensure_path_exists(path):\n\timport os;A=path.split(_B)\n\tif not A[0]:A.pop(0);A[0]=_B+A[0]\n\tB=''\n\tfor C in range(len(A)-1):\n\t\tB+=A[C]\n\t\ttry:os.stat(B)\n\t\texcept:os.mkdir(B)\n\t\tB+=_B\ndef _chunk(src,dest):\n\tA=memoryview(bytearray(_CHUNK_SIZE))\n\twhile _D:\n\t\tB=src.readinto(A)\n\t\tif B==0:break\n\t\tdest(A if B==_CHUNK_SIZE else A[:B])\ndef _check_exists(path,short_hash):\n\tA=short_hash;import os\n\ttry:\n\t\timport binascii as C,hashlib as D\n\t\twith open(path,'rb')as E:B=D.sha256();_chunk(E,B.update);F=str(C.hexlify(B.digest())[:len(A)],'utf-8');return F==A\n\texcept:return _C\ndef _rewrite_url(url,branch=_A):\n\tB=branch;A=url\n\tif not B:B='HEAD'\n\tif A.startswith(_F):A=A[7:].split(_B);A='https://raw.githubusercontent.com/'+A[0]+_B+A[1]+_B+B+_B+_B.join(A[2:])\n\treturn A\ndef _download_file(url,dest):\n\tB=dest;A=get(url)\n\ttry:\n\t\tif A.status_code!=200:print('Error',A.status_code,'requesting',url);return _C\n\t\tprint('Copying:',B);_ensure_path_exists(B)\n\t\twith open(B,'wb')as C:_chunk(A.raw,C.write)\n\t\treturn _D\n\tfinally:A.close()\ndef _install_json(package_json_url,index,target,version,mpy):\n\tK='File not found: {} {}';I=version;H=index;G=package_json_url;D=target;E=get(_rewrite_url(G,I))\n\ttry:\n\t\tif E.status_code!=200:print('Package not found:',G);return _C\n\t\tF=E.json()\n\tfinally:E.close()\n\tfor(A,C)in F.get('hashes',()):\n\t\tB=D+_B+A\n\t\tif _check_exists(B,C):print('Exists:',B)\n\t\telse:\n\t\t\tL='{}/file/{}/{}'.format(H,C[:2],C)\n\t\t\tif not _download_file(L,B):print(K.format(A,C));return _C\n\tfor(A,J)in F.get('urls',()):\n\t\tB=D+_B+A\n\t\tif not _download_file(_rewrite_url(J,I),B):print(K.format(A,J));return _C\n\tfor(M,N)in F.get('deps',()):\n\t\tif not _install_package(M,H,D,N,mpy):return _C\n\treturn _D\ndef _install_package(package,index,target,version,mpy):\n\tD=index;C=target;B=version;A=package\n\tif A.startswith('http://')or A.startswith('https://')or A.startswith(_F):\n\t\tif A.endswith('.py')or A.endswith('.mpy'):print('Downloading {} to {}'.format(A,C));return _download_file(_rewrite_url(A,B),C+_B+A.rsplit(_B)[-1])\n\t\telse:\n\t\t\tif not A.endswith('.json'):\n\t\t\t\tif not A.endswith(_B):A+=_B\n\t\t\t\tA+='package.json'\n\t\t\tprint('Installing {} to {}'.format(A,C))\n\telse:\n\t\tif not B:B='latest'\n\t\tprint('Installing {} ({}) from {} to {}'.format(A,B,D,C));E=sys.implementation._mpy&255 if mpy and hasattr(sys.implementation,'_mpy')else'py';A='{}/package/{}/{}/{}.json'.format(D,'py',A,B)\n\treturn _install_json(A,D,C,B,mpy)\ndef install(package,index=_A,target=_A,version=_A,mpy=_D):\n\tB=target;A=index\n\tif not B:\n\t\tfor C in sys.path:\n\t\t\tif C.endswith('/lib'):B=C;break\n\t\telse:print('Unable to find lib dir in sys.path');return\n\tif not A:A=_PACKAGE_INDEX\n\tif _install_package(package,A.rstrip(_B),B,version,mpy):print('Done')\n\telse:print('Package may be partially installed')");const Vt=async e=>(await import("./toml-DiUM0_qs.js")).parse(e);async function Xt(e,t){return new Promise(((n,r)=>{e.syncfs(t,(e=>{e?r(e):n()}))}))}function Yt(e){const t=e.FS,n=e.FS.filesystems.MEMFS,r=e.PATH,s={DIR_MODE:16895,FILE_MODE:33279,mount:function(e){if(!e.opts.fileSystemHandle)throw new Error("opts.fileSystemHandle is required");return n.mount.apply(null,arguments)},syncfs:async(e,t,n)=>{try{const r=s.getLocalSet(e),o=await s.getRemoteSet(e),a=t?o:r,i=t?r:o;await s.reconcile(e,a,i),n(null)}catch(e){n(e)}},getLocalSet:e=>{let n=Object.create(null);function s(e){return"."!==e&&".."!==e}function o(e){return t=>r.join2(e,t)}let a=t.readdir(e.mountpoint).filter(s).map(o(e.mountpoint));for(;a.length;){let e=a.pop(),r=t.stat(e);t.isDir(r.mode)&&a.push.apply(a,t.readdir(e).filter(s).map(o(e))),n[e]={timestamp:r.mtime,mode:r.mode}}return{type:"local",entries:n}},getRemoteSet:async e=>{const t=Object.create(null),n=await Zt(e.opts.fileSystemHandle);for(const[o,a]of n)"."!==o&&(t[r.join2(e.mountpoint,o)]={timestamp:"file"===a.kind?(await a.getFile()).lastModifiedDate:new Date,mode:"file"===a.kind?s.FILE_MODE:s.DIR_MODE});return{type:"remote",entries:t,handles:n}},loadLocalEntry:e=>{const r=t.lookupPath(e).node,s=t.stat(e);if(t.isDir(s.mode))return{timestamp:s.mtime,mode:s.mode};if(t.isFile(s.mode))return r.contents=n.getFileDataAsTypedArray(r),{timestamp:s.mtime,mode:s.mode,contents:r.contents};throw new Error("node type not supported")},storeLocalEntry:(e,n)=>{if(t.isDir(n.mode))t.mkdirTree(e,n.mode);else{if(!t.isFile(n.mode))throw new Error("node type not supported");t.writeFile(e,n.contents,{canOwn:!0})}t.chmod(e,n.mode),t.utime(e,n.timestamp,n.timestamp)},removeLocalEntry:e=>{var n=t.stat(e);t.isDir(n.mode)?t.rmdir(e):t.isFile(n.mode)&&t.unlink(e)},loadRemoteEntry:async e=>{if("file"===e.kind){const t=await e.getFile();return{contents:new Uint8Array(await t.arrayBuffer()),mode:s.FILE_MODE,timestamp:t.lastModifiedDate}}if("directory"===e.kind)return{mode:s.DIR_MODE,timestamp:new Date};throw new Error("unknown kind: "+e.kind)},storeRemoteEntry:async(e,n,s)=>{const o=e.get(r.dirname(n)),a=t.isFile(s.mode)?await o.getFileHandle(r.basename(n),{create:!0}):await o.getDirectoryHandle(r.basename(n),{create:!0});if("file"===a.kind){const e=await a.createWritable();await e.write(s.contents),await e.close()}e.set(n,a)},removeRemoteEntry:async(e,t)=>{const n=e.get(r.dirname(t));await n.removeEntry(r.basename(t)),e.delete(t)},reconcile:async(e,n,o)=>{let a=0;const i=[];Object.keys(n.entries).forEach((function(e){const r=n.entries[e],s=o.entries[e];(!s||t.isFile(r.mode)&&r.timestamp.getTime()>s.timestamp.getTime())&&(i.push(e),a++)})),i.sort();const c=[];if(Object.keys(o.entries).forEach((function(e){n.entries[e]||(c.push(e),a++)})),c.sort().reverse(),!a)return;const l="remote"===n.type?n.handles:o.handles;for(const t of i){const n=r.normalize(t.replace(e.mountpoint,"/")).substring(1);if("local"===o.type){const e=l.get(n),r=await s.loadRemoteEntry(e);s.storeLocalEntry(t,r)}else{const e=s.loadLocalEntry(t);await s.storeRemoteEntry(l,n,e)}}for(const t of c)if("local"===o.type)s.removeLocalEntry(t);else{const n=r.normalize(t.replace(e.mountpoint,"/")).substring(1);await s.removeRemoteEntry(l,n)}}};return e.FS.filesystems.NATIVEFS_ASYNC=s,async function(e,n){if("FileSystemDirectoryHandle"!==n.constructor.name)throw new TypeError("Expected argument 'fileSystemHandle' to be a FileSystemDirectoryHandle");return function(e){t.mkdirTree?t.mkdirTree(e):Tt(t,e);const{node:n}=t.lookupPath(e,{follow_mount:!1});if(t.isMountpoint(n))throw new Error(`path '${e}' is already a file system mount point`);if(!t.isDir(n.mode))throw new Error(`path '${e}' points to a file not a directory`);for(const t in n.contents)throw new Error(`directory '${e}' is not empty`)}(e),t.mount(t.filesystems.NATIVEFS_ASYNC,{fileSystemHandle:n},e),await Xt(t,!0),{syncfs:async()=>await Xt(t,!1)}}}const Zt=async e=>{const t=[];await async function e(n){for await(const r of n.values())t.push(r),"directory"===r.kind&&await e(r)}(e);const n=new Map;n.set(".",e);for(const r of t){const t=(await e.resolve(r)).join("/");n.set(t,r)}return n},Qt=(e,t)=>{try{e.mkdir(t)}catch(e){}},en=Wt("mpy");var tn={type:"micropython",module:(e="1.24.1")=>`https://cdn.jsdelivr.net/npm/@micropython/micropython-webassembly-pyscript@${e}/micropython.mjs`,async engine({loadMicroPython:e},t,n,r){const{stderr:s,stdout:o,get:a}=Ue({stderr:Je(console.error),stdout:Je(console.log)});n=n.replace(/\.m?js$/,".wasm"),en("Loading MicroPython");const i=await a(e({linebuffer:!1,stderr:s,stdout:o,url:n})),c=nn.bind(this,i,r);return Ht.set(i,c),await Ut(this,en,i,t,r),this.writeFile(i,"./mip.py",Kt),t.packages&&(en("Loading packages"),await c(t.packages.map(pt,r)),en("Loaded packages")),en("Loaded MicroPython"),i.mountNativeFS||(i.mountNativeFS=Yt(i._module)),i},registerJSModule:Nt,run:qt,runAsync:zt,runEvent:Gt,transform:(e,t)=>e.PyProxy.toJs(t),writeFile:(e,t,n,r)=>{const{FS:s,_module:{PATH:o,PATH_FS:a}}=e,i={FS:s,PATH:o,PATH_FS:a},c=Jt(t,r);if(c){const r=t.slice(0,-1);switch("./"!==r&&s.mkdir(r),c){case"whl":case"zip":{const e=new Blob([n],{type:"application/zip"});return import("./zip-DPXsOtR5.js").then((async({BlobReader:t,Uint8ArrayWriter:n,ZipReader:a})=>{const i=new a(new t(e));for(const e of await i.getEntries()){const{directory:t,filename:a}=e,i=r+a;if(t)Qt(s,i);else{Qt(s,o.dirname(i));const t=await e.getData(new n);s.writeFile(i,t,{canOwn:!0})}}i.close()}))}case"tgz":case"tar.gz":{const t="./_.tar.gz";return Bt(i,t,n),void e.runPython(`\n import os, gzip, tarfile\n tar = tarfile.TarFile(fileobj=gzip.GzipFile(fileobj=open("${t}", "rb")))\n for f in tar:\n name = f"${r}{f.name}"\n if f.type == tarfile.DIRTYPE:\n if f.name != "./":\n os.mkdir(name.strip("/"))\n else:\n dir = os.path.dirname(name)\n if not os.path.exists(dir):\n os.mkdir(dir)\n source = tar.extractfile(f)\n with open(name, "wb") as dest:\n dest.write(source.read())\n dest.close()\n tar.close()\n os.remove("${t}")\n `)}}}return Bt(i,t,n)}};async function nn(e,t,n){let r;for(const s of n)if(s.endsWith(".whl")){const n=ut(s,t),r=await o(n).arrayBuffer();await this.writeFile(e,"./*",r,n)}else r||(r=e.pyimport("mip")),r.install(s)}const rn={dict_converter:Object.fromEntries},{stringify:sn}=JSON;let on=!1;const an=e=>(...t)=>{try{return on=!0,e(...t)}finally{on=!1}};let cn=!1;const ln=()=>{if(cn)return;cn=!0;const e=new WeakMap,t=e=>e.destroy(),n=n=>{for(let r=0;r`https://cdn.jsdelivr.net/pyodide/v${e}/full/pyodide.mjs`,async engine({loadPyodide:e},t,n,r){xt||"auto"!==t.experimental_create_proxy||ln(),un("Loading Pyodide");let{packages:s,index_urls:o}=t;s&&(s=s.map(pt,r)),un("Loading Storage");const a=n.slice(0,n.lastIndexOf("/")),i=new f(a),c={indexURL:a},l="never"!==t.packages_cache;if(await i.sync(),l){if(s){s=s.sort();const e=sn(s);if(i.has(e)){const t=new Blob([i.get(e)],{type:"application/json"});c.lockFileURL=URL.createObjectURL(t),c.packages=s.map((e=>e.split(/[>=<]=/)[0])),s=null}}}else i.clear();un("Loaded Storage");const{stderr:u,stdout:p,get:d}=Ue(),h=await d(e({stderr:u,stdout:p,...c})),y=hn.bind(h);return o&&pn.set(h,o),Ht.set(h,y),await Ut(this,un,h,t,r),s&&await y(s,i,l),await i.close(),c.lockFileURL&&URL.revokeObjectURL(c.lockFileURL),un("Loaded Pyodide"),h},registerJSModule:Nt,run:an(qt),runAsync:an(zt),runEvent:an(Gt),transform:(e,t)=>fn.call(e,t),writeFile:(e,t,n,r)=>{const s=Jt(t,r);if(s)return e.unpackArchive(n,s,{extractDir:t.slice(0,-1)});const{FS:o,PATH:a,_module:{PATH_FS:i}}=e;return Bt({FS:o,PATH:a,PATH_FS:i},t,n)}};function fn(e){const{ffi:{PyProxy:t}}=this;if(e&&"object"==typeof e){if(e instanceof t)return e.toJs(rn);if(e instanceof Map)return new Map([...e.entries()]);if(nt(e))return e.map(fn,this)}return e}async function hn(e,t,n=!1){const{log:r}=console,s=(e,...t)=>{r(e,...t),console.log=r,un(e),console.log=s};console.log=s,await this.loadPackage("micropip");const o=this.pyimport("micropip");if(pn.has(this)&&o.set_index_urls(pn.get(this)),await o.install(e,{keep_going:!0}),console.log=r,n&&t instanceof f){const n=o.freeze();t.set(sn(e),n)}o.destroy()}const yn="ruby-wasm-wasi",mn=yn.replace(/\W+/g,"_");var wn={type:yn,experimental:!0,module:(e="2.7.1")=>`https://cdn.jsdelivr.net/npm/@ruby/3.2-wasm-wasi@${e}/dist/browser/+esm`,async engine({DefaultRubyVM:e},t,n,r){n=n.replace(/\/browser\/\+esm$/,"/ruby.wasm");const s=await o(n).arrayBuffer(),a=await WebAssembly.compile(s),{vm:i}=await e(a);return t.files&&await Ct(this,i,t.files,r),t.fetch&&await Dt(this,i,t.fetch,r),t.js_modules&&await It(t.js_modules,r),i},registerJSModule(e,t,n){t=t.replace(/\W+/g,"__");const r=`__module_${mn}_${t}`;globalThis[r]=n,this.run(e,`require "js";$${t}=JS.global[:${r}]`),delete globalThis[r]},run:(e,t,...n)=>e.eval(et(t),...n),runAsync:(e,t,...n)=>e.evalAsync(et(t),...n),async runEvent(e,t,n){if(/^xworker\.(on\w+)$/.test(t)){const{$1:t}=RegExp,r=`__module_${mn}_event`;globalThis[r]=n,this.run(e,`require "js";$xworker.call("${t}",JS.global[:${r}])`),delete globalThis[r]}else{const r=this.run(e,`method(:${t})`);await r.call(t,e.wrap(n))}},transform:(e,t)=>t,writeFile:()=>{throw new Error(`writeFile is not supported in ${yn}`)}};var gn={type:"wasmoon",module:(e="1.16.0")=>`https://cdn.jsdelivr.net/npm/wasmoon@${e}/+esm`,async engine({LuaFactory:e,LuaLibraries:t},n,r,s){const{stderr:o,stdout:a,get:i}=Ue(),c=await i((new e).createEngine());return c.global.getTable(t.Base,(e=>{c.global.setField(e,"print",a),c.global.setField(e,"printErr",o)})),n.files&&await Ct(this,c,n.files,s),n.fetch&&await Dt(this,c,n.fetch,s),n.js_modules&&await It(n.js_modules,s),c},registerJSModule:(e,t,n)=>{e.global.set(t,n)},run:(e,t,...n)=>{try{return e.doStringSync(et(t),...n)}catch(t){He.get(e).stderr(t)}},runAsync:async(e,t,...n)=>{try{return await e.doString(et(t),...n)}catch(t){He.get(e).stderr(t)}},runEvent:async(e,t,n)=>{const[r,...s]=t.split(".");let o,a=e.global.get(r);for(const e of s)[o,a]=[a,a[e]];try{await a.call(o,n)}catch(t){He.get(e).stderr(t)}},transform:(e,t)=>t,writeFile:({cmodule:{module:{FS:e}}},t,n)=>((e,t,n)=>(Tt(e,Rt(t)),t=Pt(e,t),e.writeFile(t,new Uint8Array(n),{canOwn:!0})))(e,t,n)};const _n=new WeakMap,An=async(e,t)=>{const{shelter:n,destroy:r,io:s}=_n.get(e),{output:o,result:a}=await n.captureR(et(t));for(const{type:e,data:t}of o)s[e](t);return Pe(a,r,{token:!1})};var bn={type:"webr",experimental:!0,module:(e="0.4.2")=>`https://cdn.jsdelivr.net/npm/webr@${e}/dist/webr.mjs`,async engine(e,t,n,r){const{get:s}=Ue(),o=new e.WebR;await s(o.init().then((()=>o)));const a=await new o.Shelter;return _n.set(o,{module:e,shelter:a,destroy:a.destroy.bind(a),io:He.get(o)}),t.files&&await Ct(this,o,t.files,r),t.fetch&&await Dt(this,o,t.fetch,r),t.js_modules&&await It(t.js_modules,r),o},registerJSModule(e,t){console.warn(`Experimental interpreter: module ${t} is not supported (yet)`)},run:An,runAsync:An,async runEvent(e,t,n){await e.evalRVoid(`${t}(event)`,{env:{event:{type:[n.type]}}})},transform:(e,t)=>(console.log("transforming",t),t),writeFile:()=>{}};const vn=new Map,En=new Map,kn=[],Sn=[],jn=new Proxy(new Map,{get(e,t){if(!e.has(t)){const[n,...r]=t.split("@"),s=vn.get(n),o=/^(?:\.?\.?\/|[a-z0-9-]+:\/\/)/i.test(r)?r.join("@"):s.module(...r);e.set(t,{url:o,module:import(o),engine:s.engine.bind(s)})}const{url:n,module:r,engine:s}=e.get(t);return(e,o)=>r.then((r=>(En.set(t,e),s(r,e,n,o))))}}),$n=e=>{for(const t of[].concat(e.type))vn.set(t,e),kn.push(`script[type="${t}"]`),Sn.push(`${t}-`)};for(const e of[Ke,tn,dn,wn,gn,bn])$n(e);const{parse:xn}=JSON,Bn=(e,t="./config.txt")=>{let n=typeof e;return"string"===n&&/\.(json|toml|txt)$/.test(e)?n=RegExp.$1:e=t,[ut(e),n]},Rn=(e,t,n={})=>{const[r,s]=Bn(e,t);return"json"===s?n=o(r).json():"toml"===s?n=o(r).text().then(Vt):"string"===s?n=Tn(e):"object"===s&&e?n=e:"txt"===s&&"string"==typeof n&&(n=Tn(n)),[n,e=r]},Tn=e=>{try{return xn(e)}catch(t){return Vt(e)}},Pn=(e,t,n,r={})=>(t&&([r,t]=Rn(t,n,r)),lt(r).then((n=>jn[e](n,t)))),Mn=(e,t="")=>`${e}@${t}`.replace(/@$/,"");function Fn(e=this){return String(e).replace(/^(async\s*)?(\bfunction\b)?(.*?)\(/,((e,t,n,r)=>r&&!n?`${t||""}function ${r}(`:e))}const Dn="BeforeRun",On="AfterRun",Ln=[`code${Dn}`,`code${Dn}Async`,`code${On}`,`code${On}Async`],Cn=["onWorker","onReady",`on${Dn}`,`on${Dn}Async`,`on${On}`,`on${On}Async`];function In(e,t){const{run:n,runAsync:r}=vn.get(this.type);return{...e,run:n.bind(this,t),runAsync:r.bind(this,t)}}const Wn=(e,t,n,r,s,o)=>{if(s||o){const a=In.bind(e,t),i=r?"runAsync":"run",c=e[i];e[i]=r?async function(e,t,...r){s&&await s.call(this,a(e),n);const i=await c.call(this,e,t,...r);return o&&await o.call(this,a(e),n),i}:function(e,t,...r){s&&s.call(this,a(e),n);const i=c.call(this,e,t,...r);return o&&o.call(this,a(e),n),i}}};let Hn=class{constructor(e,t={}){const{main:n,worker:r}=t;this.interpreter=e,this.onWorker=n?.onWorker;for(const e of Cn.slice(1))this[e]=r?.[e];for(const e of Ln)this[e]=r?.[e]}toJSON(){const e={};for(const t of Cn.slice(1))this[t]&&(e[t]=Fn(this[t]));for(const t of Ln)this[t]&&(e[t]=et(this[t]()));return e}};var Un=(...e)=>function(t,n){if(e.length){const[t,r]=e;(n=rt({},n||{type:t,version:r})).type||(n.type=t)}const[r]=Bn(n.config,n.configURL),s=((...e)=>new We(URL.createObjectURL(new Blob(['const{assign:e}=Object,t="entries",n="readonly",r="readwrite",s={durability:"default",prefix:"IDBMap"},o=({target:{result:e}})=>e;class a extends EventTarget{#e;#t;#n;async#r(n,r){const s=(await this.#e).transaction(t,r,this.#t);return new Promise(((r,o)=>e(n(s.objectStore(t)),{onsuccess:r,onerror:o})))}constructor(n,{durability:r=s.durability,prefix:a=s.prefix}=s){super(),this.#n=a,this.#t={durability:r},this.#e=new Promise(((r,s)=>{e(indexedDB.open(`${this.#n}/${n}`),{onupgradeneeded({target:{result:e,transaction:n}}){e.objectStoreNames.length||e.createObjectStore(t),n.oncomplete=()=>r(e)},onsuccess(e){r(o(e))},onerror(e){s(e),this.dispatchEvent(e)}})})).then((e=>{const t=this.dispatchEvent.bind(this);for(const n in e)n.startsWith("on")&&(e[n]=t);return e}))}dispatchEvent(t){const{type:n,message:r,isTrusted:s}=t;return super.dispatchEvent(s?e(new Event(n),{message:r}):t)}async close(){(await this.#e).close()}get size(){return this.#r((e=>e.count()),n).then(o)}async clear(){await this.#r((e=>e.clear()),r)}async delete(e){await this.#r((t=>t.delete(e)),r)}async entries(){const e=await this.keys();return Promise.all(e.map((e=>this.get(e).then((t=>[e,t])))))}async forEach(e,t=this){for(const[n,r]of await this.entries())await e.call(t,r,n,this)}async get(e){return await this.#r((t=>t.get(e)),n).then(o)}async has(e){return void 0!==await this.#r((t=>t.getKey(e)),n).then(o)}async keys(){return await this.#r((e=>e.getAllKeys()),n).then(o)}async set(e,t){return await this.#r((n=>n.put(t,e)),r),this}async values(){const e=await this.keys();return Promise.all(e.map((e=>this.get(e))))}get[Symbol.toStringTag](){return this.#n}}class i extends Map{#s;#o;constructor(...e){super(),this.#s=new a(...e),this.#o=this.#s.entries().then((e=>{for(const[t,n]of e)super.set(t,n)}))}async close(){await this.#o,await this.#s.close()}async sync(){await this.#o}clear(){return this.#o=this.#o.then((()=>this.#s.clear())),super.clear()}delete(e){return this.#o=this.#o.then((()=>this.#s.delete(e))),super.delete(e)}set(e,t){return this.#o=this.#o.then((()=>this.#s.set(e,t))),super.set(e,t)}}const c="object"==typeof self?self:globalThis,l=e=>((e,t)=>{const n=(t,n)=>(e.set(n,t),t),r=s=>{if(e.has(s))return e.get(s);const[o,a]=t[s];switch(o){case 0:case-1:return n(a,s);case 1:{const e=n([],s);for(const t of a)e.push(r(t));return e}case 2:{const e=n({},s);for(const[t,n]of a)e[r(t)]=r(n);return e}case 3:return n(new Date(a),s);case 4:{const{source:e,flags:t}=a;return n(new RegExp(e,t),s)}case 5:{const e=n(new Map,s);for(const[t,n]of a)e.set(r(t),r(n));return e}case 6:{const e=n(new Set,s);for(const t of a)e.add(r(t));return e}case 7:{const{name:e,message:t}=a;return n(new c[e](t),s)}case 8:return n(BigInt(a),s);case"BigInt":return n(Object(BigInt(a)),s);case"ArrayBuffer":return n(new Uint8Array(a).buffer,a);case"DataView":{const{buffer:e}=new Uint8Array(a);return n(new DataView(e),a)}}return n(new c[o](a),s)};return r})(new Map,e)(0),u="",{toString:p}={},{keys:d}=Object,f=e=>{const t=typeof e;if("object"!==t||!e)return[0,t];const n=p.call(e).slice(8,-1);switch(n){case"Array":return[1,u];case"Object":return[2,u];case"Date":return[3,u];case"RegExp":return[4,u];case"Map":return[5,u];case"Set":return[6,u];case"DataView":return[1,n]}return n.includes("Array")?[1,n]:n.includes("Error")?[7,n]:[2,n]},y=([e,t])=>0===e&&("function"===t||"symbol"===t),h=(e,{json:t,lossy:n}={})=>{const r=[];return((e,t,n,r)=>{const s=(e,t)=>{const s=r.push(e)-1;return n.set(t,s),s},o=r=>{if(n.has(r))return n.get(r);let[a,i]=f(r);switch(a){case 0:{let t=r;switch(i){case"bigint":a=8,t=r.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+i);t=null;break;case"undefined":return s([-1],r)}return s([a,t],r)}case 1:{if(i){let e=r;return"DataView"===i?e=new Uint8Array(r.buffer):"ArrayBuffer"===i&&(e=new Uint8Array(r)),s([i,[...e]],r)}const e=[],t=s([a,e],r);for(const t of r)e.push(o(t));return t}case 2:{if(i)switch(i){case"BigInt":return s([i,r.toString()],r);case"Boolean":case"Number":case"String":return s([i,r.valueOf()],r)}if(t&&"toJSON"in r)return o(r.toJSON());const n=[],c=s([a,n],r);for(const t of d(r))!e&&y(f(r[t]))||n.push([o(t),o(r[t])]);return c}case 3:return s([a,r.toISOString()],r);case 4:{const{source:e,flags:t}=r;return s([a,{source:e,flags:t}],r)}case 5:{const t=[],n=s([a,t],r);for(const[n,s]of r)(e||!y(f(n))&&!y(f(s)))&&t.push([o(n),o(s)]);return n}case 6:{const t=[],n=s([a,t],r);for(const n of r)!e&&y(f(n))||t.push(o(n));return n}}const{message:c}=r;return s([a,{name:i,message:c}],r)};return o})(!(t||n),!!t,new Map,r)(e),r},{parse:m,stringify:w}=JSON,g={json:!0,lossy:!0};var _=Object.freeze({__proto__:null,parse:e=>l(m(e)),stringify:e=>w(h(e,g))});const A="apply",b="construct",E="defineProperty",v="deleteProperty",k="get",S="getOwnPropertyDescriptor",j="getPrototypeOf",x="has",$="isExtensible",T="ownKeys",P="preventExtensions",B="set",R="setPrototypeOf";var F=Object.freeze({__proto__:null,APPLY:A,CONSTRUCT:b,DEFINE_PROPERTY:E,DELETE_PROPERTY:v,GET:k,GET_OWN_PROPERTY_DESCRIPTOR:S,GET_PROTOTYPE_OF:j,HAS:x,IS_EXTENSIBLE:$,OWN_KEYS:T,PREVENT_EXTENSION:P,SET:B,SET_PROTOTYPE_OF:R});const O="destruct",D="c70de905-a212-4eca-80aa-dad8bd4e677b",M="="+D,C="-"+D,{ArrayBuffer:I,Atomics:L,Promise:H}=globalThis,{isArray:W}=Array,{create:N,getPrototypeOf:U,values:J}=Object,q=U(Int32Array),z=N(L),K=({currentTarget:e,type:t,origin:n,lastEventId:r,source:s,ports:o},a)=>e.dispatchEvent(new MessageEvent(t,{data:a,origin:n,lastEventId:r,source:s,ports:o})),G=()=>H.withResolvers();let Y=0;const V=new Map,X=(e,t)=>class extends e{constructor(e,...n){super(e,...n),e instanceof t&&V.set(this,[Y++,0,G()])}},Z=new WeakSet,Q=e=>(Z.add(e),e),ee=(e,t)=>{const{data:n}=e,r=W(n)&&(n.at(0)===t||0===n.at(1)&&!t);return r&&(e.stopImmediatePropagation(),e.preventDefault()),r},te=e=>null!==e&&"object"==typeof e&&!Z.has(e),ne=new WeakMap,re=(e,t,n)=>{if(V.has(e))t.set(e,V.get(e)[0]);else if(!(e instanceof q||e instanceof I))for(const r of J(e))te(r)&&!n.has(r)&&(n.add(r),re(r,t,n))},se=(...e)=>({value:new H((t=>{let n=new Worker("data:application/javascript,onmessage%3De%3D%3EpostMessage(!Atomics.wait(...e.data))");n.onmessage=()=>t("ok"),n.postMessage(e)}))}),oe=(e,t)=>{const n=V.get(e),[r,s,{promise:o}]=n;return n[1]=t,[r,o]};let{Int32Array:ae,SharedArrayBuffer:ie,addEventListener:ce,postMessage:le}=globalThis,ue=!0,pe=e=>e,de=!1;const fe=G();try{new ie(4),z.waitAsync||(z.waitAsync=se),fe.resolve()}catch(e){const t=le,n=ce,r=[];let s="",o="";ie=class extends I{},ae=X(ae,ie),pe=Q,de=!0,z.notify=(e,n)=>{const[r]=(e=>ne.get(e))(e);return t([s,1,e,r,n]),0},z.waitAsync=(...e)=>{const[t,n]=oe(...e);return{value:n}},z.wait=(e,t,...n)=>{const[r]=oe(e,t,...n),a=new XMLHttpRequest;a.responseType="json",a.open("POST",`${o}?sabayon`,!1),a.setRequestHeader("Content-Type","application/json"),a.send(`["${s}",${r},${t}]`);const{response:i}=a;V.delete(e);for(let t=0;t{if(ee(e,s)){const[t,n,...r]=e.data;switch(n){case 0:s=t,o=r.at(0)?.serviceWorker||"",o||(z.wait=null,fe.resolve());break;case 1:((e,t,n)=>{for(const[r,[s,o,{resolve:a}]]of V)if(t===s&&n===o){for(let t=0;t{for(const[n,r]of t)ne.set(n,[r,e.currentTarget]);K(e,n)})(e,...r);break;case 3:fe.resolve()}}else if(ue){const{currentTarget:t,type:n,origin:s,lastEventId:o,source:a,ports:i}=e;r.push([{currentTarget:t,type:n,origin:s,lastEventId:o,source:a,ports:i},e.data])}})),ce=(e,...t)=>{if(n(e,...t),r.length)for(const e of r.splice(0))K(...e)},le=(e,...n)=>t(((e,t)=>{const n=new Map;return te(t)&&re(t,n,new Set),n.size?[e,2,n,t]:t})(s,e),...n)}await fe.promise,ue=!1;const{BYTES_PER_ELEMENT:ye}=Int32Array,{BYTES_PER_ELEMENT:he}=Uint16Array,{notify:me}=z,we=new TextDecoder("utf-16"),ge=new WeakSet,_e=(...e)=>(ge.add(e),e);let Ae="";const be=(e,t,n,r)=>{const[s]=r,o=n.get(s);if(!o)throw new Error(`Unknown proxy.${s}()`);e(o,t,r)};let Ee=0;const ve=([e,t,n,r,s,o,a,i,c],l)=>(...u)=>{let p=""!==Ae,d=0;p&&"="!==Ae[0]&&"-"!==Ae[0]&&(d=((e,t)=>setTimeout(console.warn,3e3,`💀🔒 - proxy.${e}() in proxy.${t}()`))(l,Ae));const f=Ee++;let y=[];ge.has(u.at(-1)||y)&&ge.delete(y=u.pop());const h=n(i?u.map(i):u);let m=t(2*ye);return a([e,2,l,f,m,h,r],{transfer:y}),c(m,0).value.then((()=>{p&&clearTimeout(d);const n=m[1];if(!n)return;const r=he*n;return m=t(r+r%ye),a([e,1,f,m]),c(m,0).value.then((()=>{const e=new Uint16Array(m.buffer),t=o?e.subarray(0,n):e.slice(0,n);return s(we.decode(t))}))}))},ke=(e,t)=>new Proxy(t,{get:(t,n)=>{let r;return"then"!==n&&(r=t.get(n),r||(r=ve(e,n),t.set(n,r))),r},set:(e,t,n)=>"then"!==t&&!!e.set(t,n)}),{wait:Se,waitAsync:je}=z;var xe=({parse:e,stringify:t,transform:n,interrupt:r}=JSON)=>{const s=((e,t)=>async(n,r,[s,o,a,i,c])=>{c&&(Ae=s);try{const s=await n(...i);if(void 0!==s){const n=e(t?t(s):s);r.set(o,n),a[1]=n.length}}finally{c&&(Ae=""),a[0]=1,me(a,0)}})(t,n),o=G(),a=new Map,i=new Map;let c="",l=Se;if(Se&&r){const{handler:e,timeout:t=42}=r;l=(n,r,s)=>{for(;"timed-out"===(s=Se(n,r,0,t));)e();return s}}return ce("message",(t=>{if(ee(t,c)){const[r,u,...p]=t.data;switch(u){case 0:{const t=!!Se;c=r,o.resolve({polyfill:de,sync:t,transfer:_e,proxy:ke([c,e=>new ae(new ie(e)),pe,t,e,de,le,n,t?(...e)=>({value:{then:t=>t(l(...e))}}):je],a)});break}case 2:a.size?be(s,i,a,p):setTimeout(be,0,s,i,a,p);break;case 1:((e,[t,n])=>{const r=e.get(t);e.delete(t);for(let e=new Uint16Array(n.buffer),t=0,{length:s}=r;t{n&&console.debug(`%c${String(t)}`,"font-weight:bold","collected"),e(t)})),Ce=Object.create(null),Ie=(e,t,{debug:n,handler:r,return:s,token:o=e}=Ce)=>{const a=s||new Proxy(e,r||Ce),i=[a,[t,e,!!n]];return!1!==o&&i.push(o),Me.register(...i),a},{Object:Le,Proxy:He,Reflect:We}=globalThis,{isArray:Ne}=Array,{ownKeys:Ue}=We,{create:Je,hasOwn:qe,values:ze}=Le,Ke=(e,t)=>t===$e?e[0]:t===Te?e():t===Re?e.$:e,Ge=(e,t,n,r)=>{const s={type:{value:t}},o=qe(e,"valueOf");for(const a of ze(F)){let i=r(e[a]||We[a]);if(o&&a===k){const{valueOf:r}=e,{value:s}=i;i={value(e,o,...a){return o===n?r.call(this,Ke(e,t)):s.call(this,e,o,...a)}}}s[a]=i}return Je(e,s)},Ye=(e,t,n,r=e)=>{if(r===e)switch(typeof e){case Re:case Oe:r||(r=!1);case Te:break;default:r=!1,t===e&&(t=Le(e))}const s=new He(t,n),{destruct:o}=n;return o?Ie(e,o,{token:r,return:s}):s},Ve=e=>t=>{const n=typeof t;return n===Re?t?e.get(t)?.[0]??(e=>Ne(e)?$e:Re)(t):Pe:n},Xe=e=>t=>{let n=typeof t;switch(n){case Re:if(!t){n=Pe;break}case Te:const r=e.get(t);r&&([n,t]=r)}return[n,t]},Ze=e=>((e=>{Me.unregister(e)})(e),e);var Qe=e=>{const t=new WeakMap,n=Symbol(),r={},s=(e,n,r)=>(t.set(e,[n,r]),e),o={proxy:r,release:Ze,pair:Xe(t),typeOf:Ve(t),isProxy:e=>t.has(e),valueOf:e=>e[n]??e.valueOf()};for(const t of Ue(e)){if(qe(o,t))continue;const a=e[t];switch(t){case $e:{const e=Ge(a,t,n,(e=>({value([t],...n){return e.call(this,t,...n)}})));r[t]=(t,...n)=>s(Ye(t,[t],e,...n),$e,t);break}case Te:{const e=Ge(a,t,n,(e=>({value(t,...n){return e.call(this,t(),...n)}})));r[t]=(t,...n)=>{return s(Ye(t,(r=t,De.bind(r)),e,...n),Te,t);var r};break}case Re:{const e=Ge(a,t,n,(e=>({value({$:t},...n){return e.call(this,t,...n)}})));r[t]=(t,...n)=>s(Ye(t,{$:t},e,...n),Re,t);break}default:{const e=Ge(a,t,n,(e=>({value:e})));r[t]=(n,...r)=>s(Ye(n,n,e,...r),t,n);break}}}return o};const{drop:et,get:tt,hold:nt}=(()=>{const e=new Map,t=new Map;let n=0;return{clear:()=>{e.clear(),t.clear()},drop:n=>{const[r,s]=typeof n===Be?[t,e]:[e,t],o=r.has(n);return o&&(s.delete(r.get(n)),r.delete(n)),o},get:e=>t.get(e),hold:r=>{if(!e.has(r)){let s;for(;t.has(s=n++););e.set(r,s),t.set(s,r)}return e.get(r)}}})();var rt=Object.fromEntries([$e,"bigint","boolean",Te,Pe,Be,Re,"string",Fe,Oe].map(((e,t)=>[e,t])));const{[T]:st}=Reflect,ot=new Map(st(Symbol).filter((e=>typeof Symbol[e]===Fe)).map((e=>[Symbol[e],e]))),at=e=>ot.get(e)||`.${Symbol.keyFor(e)||""}`,{isArray:it}=Array,{[A]:ct}=Reflect;var lt=(e,t)=>{const n=new Map,r=(e,t)=>{let r=n.get(e)?.deref();return r||n.set(e,new WeakRef(r=t(e))),r},s=([e,t])=>{switch(e){case rt[Re]:return null==t?globalThis:typeof t===Be?r(t,l.object):t;case rt[$e]:return typeof t===Be?r(t,l.array):t;case rt[Te]:return typeof t===Be?r(t,l.function):tt(parseInt(t));case rt[Fe]:return(e=>{if(e.startsWith("."))return Symbol.for(e.slice(1));for(const[t,n]of ot)if(n===e)return t})(t);default:return t}},o=e=>{let[n,r]=p(e);switch(n){case Re:if(r==globalThis||null==r)r=null;else if(typeof r===Re&&!(r instanceof q))if(r=t(r),it(r))r=r.map(o);else for(const e in r)r[e]=o(r[e]);return[rt[Re],r];case $e:return[rt[$e],typeof r===Be?r:t(r).map(o)];case Te:return[rt[Te],typeof r===Te?String(nt(t(r))):r];case Fe:return[rt[Fe],at(e)];default:return[rt[n],r]}},a=(...t)=>s(e(...t)),i={[E]:(e,t,n)=>a(E,e,o(t),o(n)),[v]:(e,t)=>a(v,e,o(t)),[k]:(e,t)=>a(k,e,o(t)),[j]:e=>a(j,e),[S]:(e,t)=>{const n=a(S,e,o(t));if(n){const{get:e,set:t,value:r}=n;e&&(n.get=s(e)),t&&(n.set=s(t)),r&&(n.value=s(r))}return n},[x]:(e,t)=>a(x,e,o(t)),[$]:e=>a($,e),[T]:e=>a(T,e).map(s),[P]:e=>a(P,e),[B]:(e,t,n)=>a(B,e,o(t),o(n)),[R]:(e,t)=>a(R,e,o(t)),[O](t){n.delete(t),e(O,t)}},c={[Re]:i,[$e]:i,[Te]:{...i,[A]:(e,...t)=>a(A,e,...t.map(o)),[b]:(e,...t)=>a(b,e,...t.map(o))}},{proxy:l,isProxy:u,pair:p}=Qe(c);return{isProxy:u,global:l.object(null),method:async(e,t,...n)=>{const r=parseInt(t);switch(e){case A:{const[e,t]=n;return o(await ct(tt(r),s(e),t.map(s)))}case O:et(r)}}}};const ut={object(...e){return this.string(function(e){for(var t=e[0],n=1,r=arguments.length;n{const t=e||console,n={buffered:yt,stderr:(t.stderr||console.error).bind(t),stdout:(t.stdout||console.log).bind(t)};return{stderr:(...e)=>n.stderr(...e),stdout:(...e)=>n.stdout(...e),async get(e){const t=await e;return pt.set(t,n),t}}},ft=new TextDecoder,yt=(e,t=10)=>{const n=[];return r=>{if(r instanceof Uint8Array)for(const s of r)s===t?e(ft.decode(new Uint8Array(n.splice(0)))):n.push(s);else e(r)}},ht=(e,...t)=>ut[typeof e](e,...t),{isArray:mt}=Array,{assign:wt,create:gt,defineProperty:_t,entries:At}=Object,{all:bt,resolve:Et}=new Proxy(Promise,{get:(e,t)=>e[t].bind(e)}),vt=(e,t=location.href)=>new URL(e,t.replace(/^blob:/,"")).href;function kt(e){return e.startsWith(".")?vt(e,this):e}const St=(e,t,n,r=!1,s=CustomEvent)=>{e.dispatchEvent(new s(`${t}:${n}`,{bubbles:!0,detail:{worker:r}}))},jt=e=>Function(`\'use strict\';return (${e})`)(),xt=e=>e.replace(/^(?:\\n|\\r\\n)/,""),$t=Symbol.for("polyscript.js_modules"),Tt=new Map;_t(globalThis,$t,{value:Tt}),new Proxy(Tt,{get:(e,t)=>e.get(t),has:(e,t)=>e.has(t),ownKeys:e=>[...e.keys()]});const Pt=(e,t)=>!t.startsWith("_"),Bt=(e,t)=>new Proxy(e,{has:Pt,get:(e,n)=>e[t][n]}),Rt=(e,t)=>import(e).then((e=>{Tt.set(t,{...e})})),Ft=e=>new Promise(((t,n)=>{document.querySelector(`link[rel="stylesheet"][href="${e}"]`)?t():document.head.append(wt(document.createElement("link"),{rel:"stylesheet",href:e,onload:t,onerror:n}))})),Ot=e=>/\\.css$/i.test(new URL(e).pathname),Dt=(e,t)=>e.has(t),Mt=e=>[...e.keys()];var Ct=(e,t,n,r)=>{const s=globalThis[$t];if(n)for(let[e,t]of At(n)){let n=s.get(t);n&&!mt(n)||(s.set(t,n||(n=[])),n.push(e))}return((e,t,n,r)=>new Proxy(e,{has:Dt,ownKeys:Mt,get:(e,s)=>{let o=e.get(s);if(mt(o)){let a=o;o=null;for(let e of a)e=vt(e,r),Ot(e)?n.importCSS(e):(n.importJS(e,s),o=t[$t].get(s));e.set(s,o)}return o}}))(s,e,t,r)};const It=new Map,Lt=e=>It.get(e),Ht=(e,t)=>{try{return Function("require",t)(Lt)}catch(t){pt.get(e).stderr(t)}};var Wt={type:"dummy",module:()=>"data:application/javascript,",engine:e=>dt().get(e),registerJSModule(e,t,n){It.set(t,n)},run:Ht,runAsync:Ht,runEvent:async(e,t,n)=>{try{await Function("require","e",`return ${t}(e)`)(Lt,n)}catch(t){pt.get(e).stderr(t)}},transform:(e,t)=>t,writeFile(){}};const Nt=Object.getOwnPropertyDescriptors(Response.prototype),Ut=e=>"function"==typeof e,Jt={get:(e,t)=>Nt.hasOwnProperty(t)?((e,t,{get:n,value:r})=>n||!Ut(r)?e.then((e=>e[t])):(...n)=>e.then((e=>e[t](...n))))(e,t,Nt[t]):((e,t)=>Ut(t)?t.bind(e):t)(e,e[t])};var qt=(e,...t)=>new Proxy(fetch(e,...t),Jt);Promise.withResolvers||(Promise.withResolvers=function(){var e,t,n=new this((function(n,r){e=n,t=r}));return{resolve:e,reject:t,promise:n}});const zt=!globalThis.window,Kt=({FS:e,PATH:t,PATH_FS:n},r,s)=>{const o=n.resolve(r),a=t.dirname(o);return e.mkdirTree?e.mkdirTree(a):Yt(e,a),e.writeFile(o,new Uint8Array(s),{canOwn:!0})},Gt=e=>{const t=e.split("/");return t.pop(),t.join("/")},Yt=(e,t)=>{const n=[];for(const r of t.split("/"))"."!==r&&".."!==r&&(n.push(r),r&&e.mkdir(n.join("/")))},Vt=(e,t)=>{const n=[];for(const e of t.split("/"))switch(e){case"":case".":break;case"..":n.pop();break;default:n.push(e)}return[e.cwd()].concat(n).join("/").replace(/^\\/+/,"/")},Xt=e=>{const t=e.map((e=>e.trim().replace(/(^[/]*|[/]*$)/g,""))).filter((e=>""!==e&&"."!==e)).join("/");return e[0].startsWith("/")?`/${t}`:t},Zt=(e,t)=>qt(vt(e,t)).arrayBuffer(),Qt=(e,t,n,r)=>bt((e=>{for(const{files:t,to_file:n,from:r=""}of e){if(void 0!==t&&void 0!==n)throw new Error("Cannot use \'to_file\' and \'files\' parameters together!");if(void 0===t&&void 0===n&&r.endsWith("/"))throw new Error(`Couldn\'t determine the filename from the path ${r}, please supply \'to_file\' parameter.`)}return e.flatMap((({from:e="",to_folder:t=".",to_file:n,files:r})=>{if(mt(r))return r.map((n=>({url:Xt([e,n]),path:Xt([t,n])})));const s=n||e.slice(1+e.lastIndexOf("/"));return[{url:e,path:Xt([t,s])}]}))})(n).map((({url:n,path:s})=>Zt(n,r).then((n=>e.writeFile(t,s,n)))))),en=(e,t)=>t.endsWith("/")?`${t}${e.split("/").pop()}`:t,tn=(e,t)=>e.replace(/\\{.+?\\}/g,(e=>{if(!t.has(e))throw new SyntaxError(`Invalid template: ${e}`);return t.get(e)})),nn=(e,t,n,r)=>bt((e=>{const t=new Map,n=new Set,r=[];for(const[s,o]of At(e))if(/^\\{.+\\}$/.test(s)){if(t.has(s))throw new SyntaxError(`Duplicated template: ${s}`);t.set(s,tn(o,t))}else{const e=tn(s,t),a=en(e,tn(o||"./",t));if(n.has(a)&&!a.endsWith("/*"))throw new SyntaxError(`Duplicated destination: ${a}`);n.add(a),r.push({url:e,path:a})}return r})(n).map((({url:n,path:s})=>Zt(n,r).then((r=>e.writeFile(t,s,r,n)))))),rn=({main:e,worker:t},n)=>{const r=[];if(t&&zt)for(let[e,s]of At(t))e=vt(e,n),r.push(Rt(e,s));if(e&&!zt)for(let[t,s]of At(e))t=vt(t,n),Ot(t)?Ft(t):r.push(Rt(t,s));return bt(r)},sn=e=>t=>{dispatchEvent(new CustomEvent(`${e}:progress`,{detail:t}))},on=new WeakMap,an=async(e,t,n,r,s)=>{r.files&&(t("Loading files"),await nn(e,n,r.files,s),t("Loaded files")),r.fetch&&(t("Loading fetch"),await Qt(e,n,r.fetch,s),t("Loaded fetch")),r.js_modules&&(t("Loading JS modules"),await rn(r.js_modules,s),t("Loaded JS modules"))},cn=(e,t,n)=>{"polyscript"===t&&(n.lazy_py_modules=async(...t)=>(await on.get(e)(t),t.map((t=>e.pyimport(t)))),n.storage=async e=>{const t=new i(e);return await t.sync(),t},n.JSON=_),e.registerJsModule(t,n)},ln=(e,t)=>{if(e.endsWith("/*")){if(/\\.(zip|whl|tgz|tar(?:\\.gz)?)$/.test(t))return RegExp.$1;throw new Error(`Unsupported archive ${t}`)}return""},un=(e,t,...n)=>{try{return e.runPython(ht(t),...n)}catch(t){pt.get(e).stderr(t)}},pn=async(e,t,...n)=>{try{return await e.runPythonAsync(ht(t),...n)}catch(t){pt.get(e).stderr(t)}},dn=async(e,t,n)=>{const[r,...s]=t.split(".");let o,a=e.globals.get(r);for(const e of s)[o,a]=[a,a[e]];try{await a.call(o,n)}catch(t){pt.get(e).stderr(t)}};var fn=(new TextEncoder).encode("_F=\'github:\'\\n_E=\'user-agent\'\\n_D=True\\n_C=False\\n_B=\'/\'\\n_A=None\\nfrom uio import StringIO\\nimport sys\\nclass Response:\\n\\tdef __init__(A,f):A.raw=f;A.encoding=\'utf-8\';A._cached=_A\\n\\tdef close(A):\\n\\t\\tif A.raw:A.raw.close();A.raw=_A\\n\\t\\tA._cached=_A\\n\\t@property\\n\\tdef content(self):\\n\\t\\tA=self\\n\\t\\tif A._cached is _A:\\n\\t\\t\\ttry:A._cached=A.raw.read()\\n\\t\\t\\tfinally:A.raw.close();A.raw=_A\\n\\t\\treturn A._cached\\n\\t@property\\n\\tdef text(self):return str(self.content,self.encoding)\\n\\tdef json(A):import ujson;return ujson.loads(A.content)\\nHEADERS_TO_IGNORE=_E,\\ntry:import js\\nexcept Exception as err:raise OSError(\'This version of urequests can only be used in the browser\')\\nHEADERS_TO_IGNORE=_E,\\ndef request(method,url,data=_A,json=_A,headers={},stream=_A,auth=_A,timeout=_A,parse_headers=_D):\\n\\tE=timeout;D=method;C=data;from js import XMLHttpRequest as G;A=G.new();A.withCredentials=_C\\n\\tif auth is not _A:import ubinascii;H,I=auth;A.open(D,url,_C,H,I)\\n\\telse:A.open(D,url,_C)\\n\\tfor(F,J)in headers.items():\\n\\t\\tif F.lower()not in HEADERS_TO_IGNORE:A.setRequestHeader(F,J)\\n\\tif E:A.timeout=int(E*1000)\\n\\tif json is not _A:assert C is _A;import ujson;C=ujson.dumps(json);A.setRequestHeader(\'Content-Type\',\'application/json\')\\n\\tA.send(C);B=Response(StringIO(A.responseText));B.status_code=A.status;B.reason=A.statusText;B.headers=A.getAllResponseHeaders();return B\\ndef get(url,**A):return request(\'GET\',url,**A)\\n_PACKAGE_INDEX=const(\'https://micropython.org/pi/v2\')\\n_CHUNK_SIZE=128\\ndef _ensure_path_exists(path):\\n\\timport os;A=path.split(_B)\\n\\tif not A[0]:A.pop(0);A[0]=_B+A[0]\\n\\tB=\'\'\\n\\tfor C in range(len(A)-1):\\n\\t\\tB+=A[C]\\n\\t\\ttry:os.stat(B)\\n\\t\\texcept:os.mkdir(B)\\n\\t\\tB+=_B\\ndef _chunk(src,dest):\\n\\tA=memoryview(bytearray(_CHUNK_SIZE))\\n\\twhile _D:\\n\\t\\tB=src.readinto(A)\\n\\t\\tif B==0:break\\n\\t\\tdest(A if B==_CHUNK_SIZE else A[:B])\\ndef _check_exists(path,short_hash):\\n\\tA=short_hash;import os\\n\\ttry:\\n\\t\\timport binascii as C,hashlib as D\\n\\t\\twith open(path,\'rb\')as E:B=D.sha256();_chunk(E,B.update);F=str(C.hexlify(B.digest())[:len(A)],\'utf-8\');return F==A\\n\\texcept:return _C\\ndef _rewrite_url(url,branch=_A):\\n\\tB=branch;A=url\\n\\tif not B:B=\'HEAD\'\\n\\tif A.startswith(_F):A=A[7:].split(_B);A=\'https://raw.githubusercontent.com/\'+A[0]+_B+A[1]+_B+B+_B+_B.join(A[2:])\\n\\treturn A\\ndef _download_file(url,dest):\\n\\tB=dest;A=get(url)\\n\\ttry:\\n\\t\\tif A.status_code!=200:print(\'Error\',A.status_code,\'requesting\',url);return _C\\n\\t\\tprint(\'Copying:\',B);_ensure_path_exists(B)\\n\\t\\twith open(B,\'wb\')as C:_chunk(A.raw,C.write)\\n\\t\\treturn _D\\n\\tfinally:A.close()\\ndef _install_json(package_json_url,index,target,version,mpy):\\n\\tK=\'File not found: {} {}\';I=version;H=index;G=package_json_url;D=target;E=get(_rewrite_url(G,I))\\n\\ttry:\\n\\t\\tif E.status_code!=200:print(\'Package not found:\',G);return _C\\n\\t\\tF=E.json()\\n\\tfinally:E.close()\\n\\tfor(A,C)in F.get(\'hashes\',()):\\n\\t\\tB=D+_B+A\\n\\t\\tif _check_exists(B,C):print(\'Exists:\',B)\\n\\t\\telse:\\n\\t\\t\\tL=\'{}/file/{}/{}\'.format(H,C[:2],C)\\n\\t\\t\\tif not _download_file(L,B):print(K.format(A,C));return _C\\n\\tfor(A,J)in F.get(\'urls\',()):\\n\\t\\tB=D+_B+A\\n\\t\\tif not _download_file(_rewrite_url(J,I),B):print(K.format(A,J));return _C\\n\\tfor(M,N)in F.get(\'deps\',()):\\n\\t\\tif not _install_package(M,H,D,N,mpy):return _C\\n\\treturn _D\\ndef _install_package(package,index,target,version,mpy):\\n\\tD=index;C=target;B=version;A=package\\n\\tif A.startswith(\'http://\')or A.startswith(\'https://\')or A.startswith(_F):\\n\\t\\tif A.endswith(\'.py\')or A.endswith(\'.mpy\'):print(\'Downloading {} to {}\'.format(A,C));return _download_file(_rewrite_url(A,B),C+_B+A.rsplit(_B)[-1])\\n\\t\\telse:\\n\\t\\t\\tif not A.endswith(\'.json\'):\\n\\t\\t\\t\\tif not A.endswith(_B):A+=_B\\n\\t\\t\\t\\tA+=\'package.json\'\\n\\t\\t\\tprint(\'Installing {} to {}\'.format(A,C))\\n\\telse:\\n\\t\\tif not B:B=\'latest\'\\n\\t\\tprint(\'Installing {} ({}) from {} to {}\'.format(A,B,D,C));E=sys.implementation._mpy&255 if mpy and hasattr(sys.implementation,\'_mpy\')else\'py\';A=\'{}/package/{}/{}/{}.json\'.format(D,\'py\',A,B)\\n\\treturn _install_json(A,D,C,B,mpy)\\ndef install(package,index=_A,target=_A,version=_A,mpy=_D):\\n\\tB=target;A=index\\n\\tif not B:\\n\\t\\tfor C in sys.path:\\n\\t\\t\\tif C.endswith(\'/lib\'):B=C;break\\n\\t\\telse:print(\'Unable to find lib dir in sys.path\');return\\n\\tif not A:A=_PACKAGE_INDEX\\n\\tif _install_package(package,A.rstrip(_B),B,version,mpy):print(\'Done\')\\n\\telse:print(\'Package may be partially installed\')");const yn=async e=>(await import("./toml-DiUM0_qs.js")).parse(e);async function hn(e,t){return new Promise(((n,r)=>{e.syncfs(t,(e=>{e?r(e):n()}))}))}function mn(e){const t=e.FS,n=e.FS.filesystems.MEMFS,r=e.PATH,s={DIR_MODE:16895,FILE_MODE:33279,mount:function(e){if(!e.opts.fileSystemHandle)throw new Error("opts.fileSystemHandle is required");return n.mount.apply(null,arguments)},syncfs:async(e,t,n)=>{try{const r=s.getLocalSet(e),o=await s.getRemoteSet(e),a=t?o:r,i=t?r:o;await s.reconcile(e,a,i),n(null)}catch(e){n(e)}},getLocalSet:e=>{let n=Object.create(null);function s(e){return"."!==e&&".."!==e}function o(e){return t=>r.join2(e,t)}let a=t.readdir(e.mountpoint).filter(s).map(o(e.mountpoint));for(;a.length;){let e=a.pop(),r=t.stat(e);t.isDir(r.mode)&&a.push.apply(a,t.readdir(e).filter(s).map(o(e))),n[e]={timestamp:r.mtime,mode:r.mode}}return{type:"local",entries:n}},getRemoteSet:async e=>{const t=Object.create(null),n=await wn(e.opts.fileSystemHandle);for(const[o,a]of n)"."!==o&&(t[r.join2(e.mountpoint,o)]={timestamp:"file"===a.kind?(await a.getFile()).lastModifiedDate:new Date,mode:"file"===a.kind?s.FILE_MODE:s.DIR_MODE});return{type:"remote",entries:t,handles:n}},loadLocalEntry:e=>{const r=t.lookupPath(e).node,s=t.stat(e);if(t.isDir(s.mode))return{timestamp:s.mtime,mode:s.mode};if(t.isFile(s.mode))return r.contents=n.getFileDataAsTypedArray(r),{timestamp:s.mtime,mode:s.mode,contents:r.contents};throw new Error("node type not supported")},storeLocalEntry:(e,n)=>{if(t.isDir(n.mode))t.mkdirTree(e,n.mode);else{if(!t.isFile(n.mode))throw new Error("node type not supported");t.writeFile(e,n.contents,{canOwn:!0})}t.chmod(e,n.mode),t.utime(e,n.timestamp,n.timestamp)},removeLocalEntry:e=>{var n=t.stat(e);t.isDir(n.mode)?t.rmdir(e):t.isFile(n.mode)&&t.unlink(e)},loadRemoteEntry:async e=>{if("file"===e.kind){const t=await e.getFile();return{contents:new Uint8Array(await t.arrayBuffer()),mode:s.FILE_MODE,timestamp:t.lastModifiedDate}}if("directory"===e.kind)return{mode:s.DIR_MODE,timestamp:new Date};throw new Error("unknown kind: "+e.kind)},storeRemoteEntry:async(e,n,s)=>{const o=e.get(r.dirname(n)),a=t.isFile(s.mode)?await o.getFileHandle(r.basename(n),{create:!0}):await o.getDirectoryHandle(r.basename(n),{create:!0});if("file"===a.kind){const e=await a.createWritable();await e.write(s.contents),await e.close()}e.set(n,a)},removeRemoteEntry:async(e,t)=>{const n=e.get(r.dirname(t));await n.removeEntry(r.basename(t)),e.delete(t)},reconcile:async(e,n,o)=>{let a=0;const i=[];Object.keys(n.entries).forEach((function(e){const r=n.entries[e],s=o.entries[e];(!s||t.isFile(r.mode)&&r.timestamp.getTime()>s.timestamp.getTime())&&(i.push(e),a++)})),i.sort();const c=[];if(Object.keys(o.entries).forEach((function(e){n.entries[e]||(c.push(e),a++)})),c.sort().reverse(),!a)return;const l="remote"===n.type?n.handles:o.handles;for(const t of i){const n=r.normalize(t.replace(e.mountpoint,"/")).substring(1);if("local"===o.type){const e=l.get(n),r=await s.loadRemoteEntry(e);s.storeLocalEntry(t,r)}else{const e=s.loadLocalEntry(t);await s.storeRemoteEntry(l,n,e)}}for(const t of c)if("local"===o.type)s.removeLocalEntry(t);else{const n=r.normalize(t.replace(e.mountpoint,"/")).substring(1);await s.removeRemoteEntry(l,n)}}};return e.FS.filesystems.NATIVEFS_ASYNC=s,async function(e,n){if("FileSystemDirectoryHandle"!==n.constructor.name)throw new TypeError("Expected argument \'fileSystemHandle\' to be a FileSystemDirectoryHandle");return function(e){t.mkdirTree?t.mkdirTree(e):Yt(t,e);const{node:n}=t.lookupPath(e,{follow_mount:!1});if(t.isMountpoint(n))throw new Error(`path \'${e}\' is already a file system mount point`);if(!t.isDir(n.mode))throw new Error(`path \'${e}\' points to a file not a directory`);for(const t in n.contents)throw new Error(`directory \'${e}\' is not empty`)}(e),t.mount(t.filesystems.NATIVEFS_ASYNC,{fileSystemHandle:n},e),await hn(t,!0),{syncfs:async()=>await hn(t,!1)}}}const wn=async e=>{const t=[];await async function e(n){for await(const r of n.values())t.push(r),"directory"===r.kind&&await e(r)}(e);const n=new Map;n.set(".",e);for(const r of t){const t=(await e.resolve(r)).join("/");n.set(t,r)}return n},gn=(e,t)=>{try{e.mkdir(t)}catch(e){}},_n=sn("mpy");var An={type:"micropython",module:(e="1.24.1")=>`https://cdn.jsdelivr.net/npm/@micropython/micropython-webassembly-pyscript@${e}/micropython.mjs`,async engine({loadMicroPython:e},t,n,r){const{stderr:s,stdout:o,get:a}=dt({stderr:yt(console.error),stdout:yt(console.log)});n=n.replace(/\\.m?js$/,".wasm"),_n("Loading MicroPython");const i=await a(e({linebuffer:!1,stderr:s,stdout:o,url:n})),c=bn.bind(this,i,r);return on.set(i,c),await an(this,_n,i,t,r),this.writeFile(i,"./mip.py",fn),t.packages&&(_n("Loading packages"),await c(t.packages.map(kt,r)),_n("Loaded packages")),_n("Loaded MicroPython"),i.mountNativeFS||(i.mountNativeFS=mn(i._module)),i},registerJSModule:cn,run:un,runAsync:pn,runEvent:dn,transform:(e,t)=>e.PyProxy.toJs(t),writeFile:(e,t,n,r)=>{const{FS:s,_module:{PATH:o,PATH_FS:a}}=e,i={FS:s,PATH:o,PATH_FS:a},c=ln(t,r);if(c){const r=t.slice(0,-1);switch("./"!==r&&s.mkdir(r),c){case"whl":case"zip":{const e=new Blob([n],{type:"application/zip"});return import("./zip-DPXsOtR5.js").then((async({BlobReader:t,Uint8ArrayWriter:n,ZipReader:a})=>{const i=new a(new t(e));for(const e of await i.getEntries()){const{directory:t,filename:a}=e,i=r+a;if(t)gn(s,i);else{gn(s,o.dirname(i));const t=await e.getData(new n);s.writeFile(i,t,{canOwn:!0})}}i.close()}))}case"tgz":case"tar.gz":{const t="./_.tar.gz";return Kt(i,t,n),void e.runPython(`\\n import os, gzip, tarfile\\n tar = tarfile.TarFile(fileobj=gzip.GzipFile(fileobj=open("${t}", "rb")))\\n for f in tar:\\n name = f"${r}{f.name}"\\n if f.type == tarfile.DIRTYPE:\\n if f.name != "./":\\n os.mkdir(name.strip("/"))\\n else:\\n dir = os.path.dirname(name)\\n if not os.path.exists(dir):\\n os.mkdir(dir)\\n source = tar.extractfile(f)\\n with open(name, "wb") as dest:\\n dest.write(source.read())\\n dest.close()\\n tar.close()\\n os.remove("${t}")\\n `)}}}return Kt(i,t,n)}};async function bn(e,t,n){let r;for(const s of n)if(s.endsWith(".whl")){const n=vt(s,t),r=await qt(n).arrayBuffer();await this.writeFile(e,"./*",r,n)}else r||(r=e.pyimport("mip")),r.install(s)}const En={dict_converter:Object.fromEntries},{stringify:vn}=JSON;let kn=!1;const Sn=e=>(...t)=>{try{return kn=!0,e(...t)}finally{kn=!1}};let jn=!1;const xn=()=>{if(jn)return;jn=!0;const e=new WeakMap,t=e=>e.destroy(),n=n=>{for(let r=0;r`https://cdn.jsdelivr.net/pyodide/v${e}/full/pyodide.mjs`,async engine({loadPyodide:e},t,n,r){zt||"auto"!==t.experimental_create_proxy||xn(),$n("Loading Pyodide");let{packages:s,index_urls:o}=t;s&&(s=s.map(kt,r)),$n("Loading Storage");const a=n.slice(0,n.lastIndexOf("/")),c=new i(a),l={indexURL:a},u="never"!==t.packages_cache;if(await c.sync(),u){if(s){s=s.sort();const e=vn(s);if(c.has(e)){const t=new Blob([c.get(e)],{type:"application/json"});l.lockFileURL=URL.createObjectURL(t),l.packages=s.map((e=>e.split(/[>=<]=/)[0])),s=null}}}else c.clear();$n("Loaded Storage");const{stderr:p,stdout:d,get:f}=dt(),y=await f(e({stderr:p,stdout:d,...l})),h=Rn.bind(y);return o&&Tn.set(y,o),on.set(y,h),await an(this,$n,y,t,r),s&&await h(s,c,u),await c.close(),l.lockFileURL&&URL.revokeObjectURL(l.lockFileURL),$n("Loaded Pyodide"),y},registerJSModule:cn,run:Sn(un),runAsync:Sn(pn),runEvent:Sn(dn),transform:(e,t)=>Bn.call(e,t),writeFile:(e,t,n,r)=>{const s=ln(t,r);if(s)return e.unpackArchive(n,s,{extractDir:t.slice(0,-1)});const{FS:o,PATH:a,_module:{PATH_FS:i}}=e;return Kt({FS:o,PATH:a,PATH_FS:i},t,n)}};function Bn(e){const{ffi:{PyProxy:t}}=this;if(e&&"object"==typeof e){if(e instanceof t)return e.toJs(En);if(e instanceof Map)return new Map([...e.entries()]);if(mt(e))return e.map(Bn,this)}return e}async function Rn(e,t,n=!1){const{log:r}=console,s=(e,...t)=>{r(e,...t),console.log=r,$n(e),console.log=s};console.log=s,await this.loadPackage("micropip");const o=this.pyimport("micropip");if(Tn.has(this)&&o.set_index_urls(Tn.get(this)),await o.install(e,{keep_going:!0}),console.log=r,n&&t instanceof i){const n=o.freeze();t.set(vn(e),n)}o.destroy()}const Fn="ruby-wasm-wasi",On=Fn.replace(/\\W+/g,"_");var Dn={type:Fn,experimental:!0,module:(e="2.7.1")=>`https://cdn.jsdelivr.net/npm/@ruby/3.2-wasm-wasi@${e}/dist/browser/+esm`,async engine({DefaultRubyVM:e},t,n,r){n=n.replace(/\\/browser\\/\\+esm$/,"/ruby.wasm");const s=await qt(n).arrayBuffer(),o=await WebAssembly.compile(s),{vm:a}=await e(o);return t.files&&await nn(this,a,t.files,r),t.fetch&&await Qt(this,a,t.fetch,r),t.js_modules&&await rn(t.js_modules,r),a},registerJSModule(e,t,n){t=t.replace(/\\W+/g,"__");const r=`__module_${On}_${t}`;globalThis[r]=n,this.run(e,`require "js";$${t}=JS.global[:${r}]`),delete globalThis[r]},run:(e,t,...n)=>e.eval(ht(t),...n),runAsync:(e,t,...n)=>e.evalAsync(ht(t),...n),async runEvent(e,t,n){if(/^xworker\\.(on\\w+)$/.test(t)){const{$1:t}=RegExp,r=`__module_${On}_event`;globalThis[r]=n,this.run(e,`require "js";$xworker.call("${t}",JS.global[:${r}])`),delete globalThis[r]}else{const r=this.run(e,`method(:${t})`);await r.call(t,e.wrap(n))}},transform:(e,t)=>t,writeFile:()=>{throw new Error(`writeFile is not supported in ${Fn}`)}};var Mn={type:"wasmoon",module:(e="1.16.0")=>`https://cdn.jsdelivr.net/npm/wasmoon@${e}/+esm`,async engine({LuaFactory:e,LuaLibraries:t},n,r,s){const{stderr:o,stdout:a,get:i}=dt(),c=await i((new e).createEngine());return c.global.getTable(t.Base,(e=>{c.global.setField(e,"print",a),c.global.setField(e,"printErr",o)})),n.files&&await nn(this,c,n.files,s),n.fetch&&await Qt(this,c,n.fetch,s),n.js_modules&&await rn(n.js_modules,s),c},registerJSModule:(e,t,n)=>{e.global.set(t,n)},run:(e,t,...n)=>{try{return e.doStringSync(ht(t),...n)}catch(t){pt.get(e).stderr(t)}},runAsync:async(e,t,...n)=>{try{return await e.doString(ht(t),...n)}catch(t){pt.get(e).stderr(t)}},runEvent:async(e,t,n)=>{const[r,...s]=t.split(".");let o,a=e.global.get(r);for(const e of s)[o,a]=[a,a[e]];try{await a.call(o,n)}catch(t){pt.get(e).stderr(t)}},transform:(e,t)=>t,writeFile:({cmodule:{module:{FS:e}}},t,n)=>((e,t,n)=>(Yt(e,Gt(t)),t=Vt(e,t),e.writeFile(t,new Uint8Array(n),{canOwn:!0})))(e,t,n)};const Cn=new WeakMap,In=async(e,t)=>{const{shelter:n,destroy:r,io:s}=Cn.get(e),{output:o,result:a}=await n.captureR(ht(t));for(const{type:e,data:t}of o)s[e](t);return Ie(a,r,{token:!1})};var Ln={type:"webr",experimental:!0,module:(e="0.4.2")=>`https://cdn.jsdelivr.net/npm/webr@${e}/dist/webr.mjs`,async engine(e,t,n,r){const{get:s}=dt(),o=new e.WebR;await s(o.init().then((()=>o)));const a=await new o.Shelter;return Cn.set(o,{module:e,shelter:a,destroy:a.destroy.bind(a),io:pt.get(o)}),t.files&&await nn(this,o,t.files,r),t.fetch&&await Qt(this,o,t.fetch,r),t.js_modules&&await rn(t.js_modules,r),o},registerJSModule(e,t){console.warn(`Experimental interpreter: module ${t} is not supported (yet)`)},run:In,runAsync:In,async runEvent(e,t,n){await e.evalRVoid(`${t}(event)`,{env:{event:{type:[n.type]}}})},transform:(e,t)=>(console.log("transforming",t),t),writeFile:()=>{}};const Hn=new Map,Wn=new Map,Nn=new Proxy(new Map,{get(e,t){if(!e.has(t)){const[n,...r]=t.split("@"),s=Hn.get(n),o=/^(?:\\.?\\.?\\/|[a-z0-9-]+:\\/\\/)/i.test(r)?r.join("@"):s.module(...r);e.set(t,{url:o,module:import(o),engine:s.engine.bind(s)})}const{url:n,module:r,engine:s}=e.get(t);return(e,o)=>r.then((r=>(Wn.set(t,e),s(r,e,n,o))))}}),Un=e=>{for(const t of[].concat(e.type))Hn.set(t,e)};for(const e of[Wt,An,Pn,Dn,Mn,Ln])Un(e);const{parse:Jn}=JSON,qn=(e,t,n={})=>{const[r,s]=((e,t="./config.txt")=>{let n=typeof e;return"string"===n&&/\\.(json|toml|txt)$/.test(e)?n=RegExp.$1:e=t,[vt(e),n]})(e,t);return"json"===s?n=qt(r).json():"toml"===s?n=qt(r).text().then(yn):"string"===s?n=zn(e):"object"===s&&e?n=e:"txt"===s&&"string"==typeof n&&(n=zn(n)),[n,e=r]},zn=e=>{try{return Jn(e)}catch(t){return yn(e)}},Kn="BeforeRun",Gn="AfterRun",Yn=[`code${Kn}`,`code${Kn}Async`,`code${Gn}`,`code${Gn}Async`],Vn=["onWorker","onReady",`on${Kn}`,`on${Kn}Async`,`on${Gn}`,`on${Gn}Async`];function Xn(e,t){const{run:n,runAsync:r}=Hn.get(this.type);return{...e,run:n.bind(this,t),runAsync:r.bind(this,t)}}const Zn=(e,t,n,r,s,o)=>{if(s||o){const a=Xn.bind(e,t),i=r?"runAsync":"run",c=e[i];e[i]=r?async function(e,t,...r){s&&await s.call(this,a(e),n);const i=await c.call(this,e,t,...r);return o&&await o.call(this,a(e),n),i}:function(e,t,...r){s&&s.call(this,a(e),n);const i=c.call(this,e,t,...r);return o&&o.call(this,a(e),n),i}}};let Qn,er,tr;const nr=(e,t)=>{addEventListener(e,t||(async t=>{try{await Qn,er(`xworker.on${e}`,t)}catch(e){postMessage(e)}}),!!t&&{once:!0})},{parse:rr,stringify:sr}=_,{proxy:or,sync:ar,polyfill:ir,window:cr,isWindowProxy:lr}=await(async e=>{const t=await xe(e),{isProxy:n,global:r,method:s}=lt(t.proxy[M],e?.transform||(e=>e));return t.proxy[C]=s,{...t,window:r,isWindowProxy:n}})({parse:rr,stringify:sr,transform:e=>tr?tr(e):e}),ur={polyfill:ir,sync:or,window:ar?cr:null,isWindowProxy:lr,onmessage:console.info,onerror:console.error,onmessageerror:console.warn,postMessage:postMessage.bind(self)};nr("message",(({data:{options:e,config:t,configURL:n,code:r,hooks:s}})=>{Qn=(async()=>{try{const{id:o,tag:c,type:l,custom:u,version:p,config:d,async:f}=e,y=((e,t="")=>`${e}@${t}`.replace(/@$/,""))(l,p),h=await((e,t,n,r={})=>(t&&([r,t]=qn(t,n,r)),Et(r).then((n=>Nn[e](n,t)))))(y,t,n,d),{js_modules:m}=Wn.get(y),w=m?.main,g=gt(Hn.get(l)),_=((e,t,n,r)=>({type:t,config:n,interpreter:r,io:pt.get(r),run:(t,...n)=>e.run(r,t,...n),runAsync:(t,...n)=>e.runAsync(r,t,...n),runEvent:(...t)=>e.runEvent(r,...t)}))(g,u||l,d||{},h);let A="run";if(f&&(A+="Async"),s){let e,t,n="",r="";for(const e of Yn){const t=s[e];if(t){const s=e.endsWith("Async");(s&&f||!s&&!f)&&(e.startsWith("codeBefore")?n=t:r=t)}}(n||r)&&((e,t,n,r)=>{const s=e[t].bind(e);e[t]="run"===t?(e,t,...o)=>{n&&s(e,n,...o);const a=s(e,xt(t),...o);return r&&s(e,r,...o),a}:async(e,t,...o)=>{n&&await s(e,n,...o);const a=await s(e,xt(t),...o);return r&&await s(e,r,...o),a}})(g,A,n,r);for(const n of Vn.slice(2)){const r=s[n];if(r){const s=n.endsWith("Async");if(s&&f||!s&&!f){const s=jt(r);n.startsWith("onBefore")?e=s:t=s}}}Zn(g,_,ur,f,e,t)}let b,E,v,k=null,S="";ar&&(({CustomEvent:b,document:E}=cr),k=o&&E.getElementById(o)||null,v=e=>St(k,u||l,e,!0,b));const j=Ct(cr,or,w,t);if(((e,t,n,r)=>{if("pyodide"===e)return;const s="polyscript.js_modules";for(const e of Reflect.ownKeys(r))t.registerJSModule(n,`${s}.${e}`,Bt(r,e));t.registerJSModule(n,s,r)})(l,g,h,j),g.registerJSModule(h,"polyscript",{IDBMap:a,IDBMapSync:i,xworker:ur,currentScript:k,config:_.config,js_modules:j,get target(){return!S&&k&&("SCRIPT"===c?k.after(wt(cr.document.createElement(`script-${u||l}`),{id:S=`${o}-target`})):(S=o,k.replaceChildren(),k.style.display="block")),S}}),er=g.runEvent.bind(g,h),tr=g.transform.bind(g,h),k&&v("ready"),s?.onReady&&jt(s?.onReady).call(g,Xn.call(g,_,h),ur),await g[A](h,r),["micropython","pyodide"].includes(g.type)){const e="polyscript",t=`__${e}_workers__`,n="__export__";h.runPython([`import js as ${t}`,`${t}.${t} = "${n}" in locals() and ${n} or []`,`del ${t}`].join("\\n"));const r=[...globalThis[t]];delete globalThis[t],r.length&&h.runPython([`from ${e} import xworker as ${t}`,...r.map((e=>`${t}.sync.${e} = ${e}`)),`del ${t}`].join("\\n"))}return k&&v("done"),postMessage("polyscript:done"),h}catch(e){postMessage(e)}})(),nr("error"),nr("message"),nr("messageerror"),ar&&addEventListener("py:progress",(({type:e,detail:t})=>{cr.dispatchEvent(new cr.CustomEvent(e,{detail:t}))}))}));\n'.replace(Ce,Ie)],{type:"application/javascript"})),...e))({serviceWorker:n?.serviceWorker||n?.service_worker}),{postMessage:a}=s,i=this instanceof Hn,c=rt(s.proxy,{importJS:kt,importCSS:St}),l=Promise.withResolvers();let u=o(t).text().then((e=>{const t=i?this.toJSON():void 0;a.call(s,{options:n,config:r,code:e,hooks:t})})).then((()=>{u={then:e=>e()}}));return ot(s,{sync:{value:c},ready:{value:l.promise},postMessage:{value:(e,...t)=>u.then((()=>a.call(s,e,...t)))},onerror:{writable:!0,configurable:!0,value:console.error}}),s.addEventListener("message",(e=>{const{data:t}=e,n=t instanceof Error;(n||"polyscript:done"===t)&&(e.stopImmediatePropagation(),n?(l.reject(t),s.onerror(st(e,{type:{value:"error"},error:{value:t}}))):l.resolve(s))})),i&&this.onWorker?.(this.interpreter,s),s};const Nn="Invalid content",Jn="Invalid worker attribute",qn="Invalid worker attribute";var zn=e=>{const{src:t,worker:n}=e.attributes;if(n){let{value:r}=n;if(r)throw new SyntaxError(qn);if(r=t?.value,!r){if(t)throw new SyntaxError(Jn);if(e.childElementCount){const{innerHTML:t,localName:n,type:s}=e,o=s||n.replace(/-script$/,"");r=tt(t),console.warn(`Deprecated: use `; + document.head.innerHTML = ``; await tick(); assert(pyodide.content, dedent(content)); assert(pyodide.target.tagName, "PYODIDE-SCRIPT"); diff --git a/versions/pyodide b/versions/pyodide index 9f222923..69bf493e 100644 --- a/versions/pyodide +++ b/versions/pyodide @@ -1 +1 @@ -0.27.4 +0.27.5 From 6dfc9358ce7862e6f4031e9bb6f659b98f978323 Mon Sep 17 00:00:00 2001 From: webreflection Date: Tue, 8 Apr 2025 16:11:15 +0200 Subject: [PATCH 3/9] 0.17.2 --- docs/index.js | 2 +- docs/index.js.map | 2 +- package-lock.json | 40 +++++++--------------------------------- package.json | 6 +++--- 4 files changed, 12 insertions(+), 38 deletions(-) diff --git a/docs/index.js b/docs/index.js index 271f54fa..15496d6b 100644 --- a/docs/index.js +++ b/docs/index.js @@ -1,2 +1,2 @@ -const e=(e,t=document)=>[...t.querySelectorAll(e)],t=(e,t=document)=>{const n=(new XPathEvaluator).createExpression(e).evaluate(t,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE),r=[];for(let e=0,{snapshotLength:t}=n;e"function"==typeof e,s={get:(e,t)=>n.hasOwnProperty(t)?((e,t,{get:n,value:s})=>n||!r(s)?e.then((e=>e[t])):(...n)=>e.then((e=>e[t](...n))))(e,t,n[t]):((e,t)=>r(t)?t.bind(e):t)(e,e[t])};var o=(e,...t)=>new Proxy(fetch(e,...t),s);const{assign:a}=Object,i="entries",c="readonly",l="readwrite",u={durability:"default",prefix:"IDBMap"},p=({target:{result:e}})=>e;class f extends EventTarget{#e;#t;#n;async#r(e,t){const n=(await this.#e).transaction(i,t,this.#t);return new Promise(((t,r)=>a(e(n.objectStore(i)),{onsuccess:t,onerror:r})))}constructor(e,{durability:t=u.durability,prefix:n=u.prefix}=u){super(),this.#n=n,this.#t={durability:t},this.#e=new Promise(((t,n)=>{a(indexedDB.open(`${this.#n}/${e}`),{onupgradeneeded({target:{result:e,transaction:n}}){e.objectStoreNames.length||e.createObjectStore(i),n.oncomplete=()=>t(e)},onsuccess(e){t(p(e))},onerror(e){n(e),this.dispatchEvent(e)}})})).then((e=>{const t=this.dispatchEvent.bind(this);for(const n in e)n.startsWith("on")&&(e[n]=t);return e}))}dispatchEvent(e){const{type:t,message:n,isTrusted:r}=e;return super.dispatchEvent(r?a(new Event(t),{message:n}):e)}async close(){(await this.#e).close()}get size(){return this.#r((e=>e.count()),c).then(p)}async clear(){await this.#r((e=>e.clear()),l)}async delete(e){await this.#r((t=>t.delete(e)),l)}async entries(){const e=await this.keys();return Promise.all(e.map((e=>this.get(e).then((t=>[e,t])))))}async forEach(e,t=this){for(const[n,r]of await this.entries())await e.call(t,r,n,this)}async get(e){return await this.#r((t=>t.get(e)),c).then(p)}async has(e){return void 0!==await this.#r((t=>t.getKey(e)),c).then(p)}async keys(){return await this.#r((e=>e.getAllKeys()),c).then(p)}async set(e,t){return await this.#r((n=>n.put(t,e)),l),this}async values(){const e=await this.keys();return Promise.all(e.map((e=>this.get(e))))}get[Symbol.toStringTag](){return this.#n}}class d extends Map{#s;#o;constructor(...e){super(),this.#s=new f(...e),this.#o=this.#s.entries().then((e=>{for(const[t,n]of e)super.set(t,n)}))}async close(){await this.#o,await this.#s.close()}async sync(){await this.#o}clear(){return this.#o=this.#o.then((()=>this.#s.clear())),super.clear()}delete(e){return this.#o=this.#o.then((()=>this.#s.delete(e))),super.delete(e)}set(e,t){return this.#o=this.#o.then((()=>this.#s.set(e,t))),super.set(e,t)}}const y=new Proxy(new Map,{get:(e,t)=>(e.has(t)||e.set(t,Promise.withResolvers()),e.get(t))}),h=new Set(["__dict__","constructor","get","has","includes","next","set","then"]),m=new Proxy(Object.freeze({}),{get:(e,t)=>"string"!=typeof t||h.has(t)?void 0:y[t].promise.then((e=>e.sync))});let w="coincident-";try{new SharedArrayBuffer(4,{maxByteLength:8}),w+=crypto.randomUUID()}catch(At){w+=Math.random().toString(36).substring(2)}const g=65535;var b={ref:0,array:1,object:2,number:3,string:4,true:5,false:6,null:7,buffer:8,view:9,symbol:10,date:11,bigint:12,undefined:13,map:14,set:15,regexp:16,error:17};const _=e=>{const t=typeof e;switch(t){case"function":case"undefined":return"";case"object":return null===e?"null":"object";default:return t}},{isArray:A}=Array,{isView:v}=ArrayBuffer,{stringify:E}=JSON,k=(e,t,n)=>{const r=t.get(n);return"number"==typeof r?(e.push(b.ref,r),!0):(t.set(n,e.length),!1)},S=(e,t,n,r=_(n))=>{switch(r){case"null":e.push(b.null);break;case"object":if(k(e,t,n))break;switch(!0){case A(n):{const r=n.length;e.push(b.array,r);for(let s=0;s({byteOffset:t})=>(n,r)=>{const s=e(n),o=s.length;r.byteLength<2*o+t&&r.grow(2*o+g);const a=new Uint16Array(r,t);for(let e=0;e{const t=[];return S(t,new Map,e),E(t)})),j="destroy",P="2d28b248-43f8-4fdc-b78e-514b8111e549",$="="+P,B="-"+P,{assign:O,create:F}=Object;let R="coincident-",T=!0;try{new SharedArrayBuffer(4,{maxByteLength:8}),R+=crypto.randomUUID()}catch(e){T=!1,R+=Math.random().toString(36).substring(2)}const D=2*Int32Array.BYTES_PER_ELEMENT,M={byteOffset:D,useUTF16:!0,circular:!0},L=new Map,C=e=>e,I=(e,t,n)=>{const r="then"!==t;return r&&(e[t]=n),r},W=()=>Promise.withResolvers();const{stringify:U}=JSON,N=(H=U,({byteOffset:e})=>(t,n)=>{const r=H(t),s=r.length;n.byteLength<2*s+e&&n.grow(2*s+65535);const o=new Uint16Array(n,e);for(let e=0;e{const t=e?.transform,n=(e?.encoder||N)(M);class r extends globalThis.Worker{constructor(e,r){const{port1:s,port2:o}=new MessageChannel,[a,i]=((e=C,t=0)=>[n=>{const r=W();do{n=e(t++)}while(L.has(n));return L.set(n,r),[n,r]},(e,t,n)=>{const r=L.get(e);L.delete(e),n?r.reject(n):r.resolve(t)}])(),c=new Map,l=F(null);let u="";super(e,O({type:"module"},r)).proxy=new Proxy(l,{get:(e,n)=>{if("then"===n)return;let r=c.get(n);return r||c.set(n,r=(...e)=>{const[r,o]=a();return s.postMessage([r,n,t?e.map(t):e]),(({promise:e},t)=>{if(u){const n=setTimeout(console.warn,3e3,`💀🔒 - is proxy.${u}() awaiting proxy.${t}() ?`);e=e.then((e=>(clearTimeout(n),e)),(e=>(clearTimeout(n),Promise.reject(e))))}return e})(o,n)}),r},set:I}),super.postMessage(J,[o]),T&&J&&super.addEventListener("message",(e=>{const{data:t}=e;t?.ID===J&&((e=>{e.stopImmediatePropagation(),e.preventDefault()})(e),s.onmessage(t))})),s.onmessage=async({data:e})=>{const[r,o,a]=e,c=typeof r;if("number"===c)i(r,o,a);else{u=o;const e=await(async(e,t,n,r)=>{const s=[e,null,null];try{const e=await t(...n);s[1]=r?r(e):e}catch(e){s[2]=e}return s})(r,l[o],a,t);if(u="","string"===c)s.postMessage(e);else{const t=e[2]||e[1];r[1]=void 0===t?0:n(t,r.buffer),r[0]=1,q(r,0)}}}}}return{Worker:r,native:T}};const K="ownKeys",X="destruct",G="array",V="function",Y="null",Z="number",Q="object",ee="string",te="symbol",ne="undefined";var re=Object.fromEntries([G,"bigint","boolean",V,Y,Z,Q,ee,te,ne].map(((e,t)=>[e,t])));const{[K]:se}=Reflect,oe=new Map(se(Symbol).filter((e=>typeof Symbol[e]===te)).map((e=>[Symbol[e],e]))),ae=e=>oe.get(e)||`.${Symbol.keyFor(e)||""}`,ie=new FinalizationRegistry((([e,t,n])=>{n&&console.debug(`%c${String(t)}`,"font-weight:bold","collected"),e(t)})),ce=Object.create(null),le=(e,t,{debug:n,handler:r,return:s,token:o=e}=ce)=>{const a=s||new Proxy(e,r||ce),i=[a,[t,e,!!n]];return!1!==o&&i.push(o),ie.register(...i),a},{addEventListener:ue}=EventTarget.prototype,pe=new WeakMap;Reflect.defineProperty(EventTarget.prototype,"addEventListener",{value(e,t,...n){const r=n.at(0)?.invoke;if(r){let t=pe.get(this);t||(t=new Map,pe.set(this,t)),t.set(e,[].concat(r)),delete n[0].invoke}return ue.call(this,e,t,...n)}});const{isArray:fe}=Array,{isView:de}=ArrayBuffer;var ye=(e,t)=>{const{clear:n,drop:r,get:s,hold:o}=(()=>{const e=new Map,t=new Map;let n=0;return{clear:()=>{e.clear(),t.clear()},drop:n=>{const[r,s]=typeof n===Z?[t,e]:[e,t],o=r.has(n);return o&&(s.delete(r.get(n)),r.delete(n)),o},get:e=>t.get(e),hold:r=>{if(!e.has(r)){let s;for(;t.has(s=n++););e.set(r,s),t.set(s,r)}return e.get(r)}}})(),a=new Map,i=e=>{a.delete(e),t(X,e)},c=e=>{const t=typeof e;switch(t){case Q:return null===e?[re[Y],e]:e===globalThis?[re[Q],null]:fe(e)?[re[G],o(e)]:[re[Q],de(e)?e:o(e)];case V:return[re[V],o(e)];case te:return[re[te],ae(e)];default:return[re[t],e]}},l=([e,n])=>{switch(e){case re[Q]:if(null===n)return globalThis;if(typeof n===Z)return s(n);if(!de(n))for(const e in n)n[e]=l(n[e]);return n;case re[G]:return typeof n===Z?s(n):n.map(l);case re[V]:switch(typeof n){case Z:return s(n);case ee:{let e=a.get(n)?.deref();return e||(e=le(n,i,{token:!1,return:function(...e){return e.length&&e[0]instanceof Event&&(e=>{const{currentTarget:t,target:n,type:r}=e,s=pe.get(t||n)?.get(r);if(s)for(const t of s)e[t]()})(e[0]),t("apply",n,c(this),e.map(c)).then(l)}}),a.set(n,new WeakRef(e))),e}}case re[te]:return(e=>{if(e.startsWith("."))return Symbol.for(e.slice(1));for(const[t,n]of oe)if(n===e)return t})(n);default:return n}},u=(e,t,n)=>c(e(t,...n.map(l))),p=t=>import(e(t)),f=new Set;return(e,t,...o)=>{if(e===j)n();else if(e===X)f.has(t)||r(t);else{const n=Reflect[e],r=null==t?globalThis:s(t);switch(e){case"defineProperty":{const[e,t]=o.map(l);return c(n(r,e,t))}case"getOwnPropertyDescriptor":{const e=n(r,...o.map(l));if(e){const{get:t,set:n,value:r}=e;t&&(e.get=c(t)),n&&(e.set=c(n)),r&&(e.value=c(r))}return[re[e?Q:ne],e]}case K:return[re[G],n(r).map(c)];case"get":if(null==t){const e="import"===o[0][1]?c(p):u(n,r,o);return f.add(e[1]),e}default:return u(n,r,o)}}}};const{url:he}=import.meta,me=/import\((['"])([^)]+?\.js)\1\)/g,we=(e,t,n)=>`import(${t}${new URL(n,he).href}${t})`,{Worker:ge}=(e=>{const t=e?.import,n=z(e);class r extends n.Worker{constructor(e,n){const{proxy:r}=super(e,n);r[$]=ye(n?.import||t||(e=>new URL(e,location.href)),r[B])}terminate(){this.proxy[$](j),super.terminate()}}return{...n,Worker:r}})({encoder:x});const be=new WeakMap,_e=e=>{const t=e||console,n={buffered:ve,stderr:(t.stderr||console.error).bind(t),stdout:(t.stdout||console.log).bind(t)};return{stderr:(...e)=>n.stderr(...e),stdout:(...e)=>n.stdout(...e),async get(e){const t=await e;return be.set(t,n),t}}},Ae=new TextDecoder,ve=(e,t=10)=>{const n=[];return r=>{if(r instanceof Uint8Array)for(const s of r)s===t?e(Ae.decode(new Uint8Array(n.splice(0)))):n.push(s);else e(r)}},Ee=new Map,ke=e=>Ee.get(e),Se=(e,t)=>{try{return Function("require",t)(ke)}catch(t){be.get(e).stderr(t)}};var xe={type:"dummy",module:()=>"data:application/javascript,",engine:e=>_e().get(e),registerJSModule(e,t,n){Ee.set(t,n)},run:Se,runAsync:Se,runEvent:async(e,t,n)=>{try{await Function("require","e",`return ${t}(e)`)(ke,n)}catch(t){be.get(e).stderr(t)}},transform:(e,t)=>t,writeFile(){}};Promise.withResolvers||(Promise.withResolvers=function(){var e,t,n=new this((function(n,r){e=n,t=r}));return{resolve:e,reject:t,promise:n}});const je={object(...e){return this.string(function(e){for(var t=e[0],n=1,r=arguments.length;n",">":">","'":"'","'":"'",""":'"',""":'"'},Oe=e=>Be[e],Fe=(e,...t)=>je[typeof e](e,...t),Re=e=>Pe.call(e,$e,Oe),{isArray:Te}=Array,{assign:De,create:Me,defineProperties:Le,defineProperty:Ce,entries:Ie}=Object,{all:We,resolve:Ue}=new Proxy(Promise,{get:(e,t)=>e[t].bind(e)}),Ne=(e,t=location.href)=>new URL(e,t.replace(/^blob:/,"")).href;function He(e){return e.startsWith(".")?Ne(e,this):e}let Je=0;const qe=(e,t)=>({id:e.id||(e.id=`${t}-w${Je++}`),tag:e.tagName}),ze=(e,t,n,r=!1,s=CustomEvent)=>{e.dispatchEvent(new s(`${t}:${n}`,{bubbles:!0,detail:{worker:r}}))},Ke=(e,t,n,r)=>({type:t,config:n,interpreter:r,io:be.get(r),run:(t,...n)=>e.run(r,t,...n),runAsync:(t,...n)=>e.runAsync(r,t,...n),runEvent:(...t)=>e.runEvent(r,...t)}),Xe=e=>e.replace(/^(?:\n|\r\n)/,""),Ge=(e,t,n,r)=>{const s=e[t].bind(e);e[t]="run"===t?(e,t,...o)=>{n&&s(e,n,...o);const a=s(e,Xe(t),...o);return r&&s(e,r,...o),a}:async(e,t,...o)=>{n&&await s(e,n,...o);const a=await s(e,Xe(t),...o);return r&&await s(e,r,...o),a}},Ve=Symbol.for("polyscript.js_modules"),Ye=new Map;Ce(globalThis,Ve,{value:Ye});const Ze=new Proxy(Ye,{get:(e,t)=>e.get(t),has:(e,t)=>e.has(t),ownKeys:e=>[...e.keys()]}),Qe=(e,t)=>!t.startsWith("_"),et=(e,t)=>new Proxy(e,{has:Qe,get:(e,n)=>e[t][n]}),tt=(e,t,n,r)=>{if("pyodide"===e)return;const s="polyscript.js_modules";for(const e of Reflect.ownKeys(r))t.registerJSModule(n,`${s}.${e}`,et(r,e));t.registerJSModule(n,s,r)},nt=(e,t)=>import(e).then((e=>{Ye.set(t,{...e})})),rt=e=>new Promise(((t,n)=>{document.querySelector(`link[rel="stylesheet"][href="${e}"]`)?t():document.head.append(De(document.createElement("link"),{rel:"stylesheet",href:e,onload:t,onerror:n}))})),st=e=>/\.css$/i.test(new URL(e).pathname),ot=e=>/^(?:false|0|no)$/i.test(e.getAttribute("async")),at=!globalThis.window,it=({FS:e,PATH:t,PATH_FS:n},r,s)=>{const o=n.resolve(r),a=t.dirname(o);return e.mkdirTree?e.mkdirTree(a):lt(e,a),e.writeFile(o,new Uint8Array(s),{canOwn:!0})},ct=e=>{const t=e.split("/");return t.pop(),t.join("/")},lt=(e,t)=>{const n=[];for(const r of t.split("/"))"."!==r&&".."!==r&&(n.push(r),r&&e.mkdir(n.join("/")))},ut=(e,t)=>{const n=[];for(const e of t.split("/"))switch(e){case"":case".":break;case"..":n.pop();break;default:n.push(e)}return[e.cwd()].concat(n).join("/").replace(/^\/+/,"/")},pt=e=>{const t=e.map((e=>e.trim().replace(/(^[/]*|[/]*$)/g,""))).filter((e=>""!==e&&"."!==e)).join("/");return e[0].startsWith("/")?`/${t}`:t},ft=(e,t)=>o(Ne(e,t)).arrayBuffer(),dt=(e,t,n,r)=>We((e=>{for(const{files:t,to_file:n,from:r=""}of e){if(void 0!==t&&void 0!==n)throw new Error("Cannot use 'to_file' and 'files' parameters together!");if(void 0===t&&void 0===n&&r.endsWith("/"))throw new Error(`Couldn't determine the filename from the path ${r}, please supply 'to_file' parameter.`)}return e.flatMap((({from:e="",to_folder:t=".",to_file:n,files:r})=>{if(Te(r))return r.map((n=>({url:pt([e,n]),path:pt([t,n])})));const s=n||e.slice(1+e.lastIndexOf("/"));return[{url:e,path:pt([t,s])}]}))})(n).map((({url:n,path:s})=>ft(n,r).then((n=>e.writeFile(t,s,n)))))),yt=(e,t)=>t.endsWith("/")?`${t}${e.split("/").pop()}`:t,ht=(e,t)=>e.replace(/\{.+?\}/g,(e=>{if(!t.has(e))throw new SyntaxError(`Invalid template: ${e}`);return t.get(e)})),mt=(e,t,n,r)=>We((e=>{const t=new Map,n=new Set,r=[];for(const[s,o]of Ie(e))if(/^\{.+\}$/.test(s)){if(t.has(s))throw new SyntaxError(`Duplicated template: ${s}`);t.set(s,ht(o,t))}else{const e=ht(s,t),a=yt(e,ht(o||"./",t));if(n.has(a)&&!a.endsWith("/*"))throw new SyntaxError(`Duplicated destination: ${a}`);n.add(a),r.push({url:e,path:a})}return r})(n).map((({url:n,path:s})=>ft(n,r).then((r=>e.writeFile(t,s,r,n)))))),wt=({main:e,worker:t},n)=>{const r=[];if(t&&at)for(let[e,s]of Ie(t))e=Ne(e,n),r.push(nt(e,s));if(e&&!at)for(let[t,s]of Ie(e))t=Ne(t,n),st(t)?rt(t):r.push(nt(t,s));return We(r)},gt=e=>t=>{dispatchEvent(new CustomEvent(`${e}:progress`,{detail:t}))};let bt="coincident-";try{new SharedArrayBuffer(4,{maxByteLength:8}),bt+=crypto.randomUUID()}catch(un){bt+=Math.random().toString(36).substring(2)}var _t={ref:0,array:1,object:2,number:3,string:4,true:5,false:6,null:7,buffer:8,view:9,symbol:10,date:11,bigint:12,undefined:13,map:14,set:15,regexp:16,error:17};const{defineProperty:At}=Object,vt=e=>{switch(e[kt++]){case _t.array:{const t=e[kt++],n=[];e[kt-2]=n;for(let r=0;r{const t=typeof e;switch(t){case"function":case"undefined":return"";case"object":return null===e?"null":"object";default:return t}},{isArray:xt}=Array,{isView:jt}=ArrayBuffer,{stringify:Pt}=JSON,$t=(e,t,n)=>{const r=t.get(n);return"number"==typeof r?(e.push(_t.ref,r),!0):(t.set(n,e.length),!1)},Bt=(e,t,n,r=St(n))=>{switch(r){case"null":e.push(_t.null);break;case"object":if($t(e,t,n))break;switch(!0){case xt(n):{const r=n.length;e.push(_t.array,r);for(let s=0;s{kt=0;const t=Et(e);return t.length?vt(t):void 0},stringify:e=>{const t=[];return Bt(t,new Map,e),Pt(t)}},Ft=new WeakMap,Rt=async(e,t,n,r,s)=>{r.files&&(t("Loading files"),await mt(e,n,r.files,s),t("Loaded files")),r.fetch&&(t("Loading fetch"),await dt(e,n,r.fetch,s),t("Loaded fetch")),r.js_modules&&(t("Loading JS modules"),await wt(r.js_modules,s),t("Loaded JS modules"))},Tt=(e,t,n)=>{"polyscript"===t&&(n.lazy_py_modules=async(...t)=>(await Ft.get(e)(t),t.map((t=>e.pyimport(t)))),n.storage=async e=>{const t=new d(e);return await t.sync(),t},n.JSON=Ot),e.registerJsModule(t,n)},Dt=(e,t)=>{if(e.endsWith("/*")){if(/\.(zip|whl|tgz|tar(?:\.gz)?)$/.test(t))return RegExp.$1;throw new Error(`Unsupported archive ${t}`)}return""},Mt=(e,t,...n)=>{try{return e.runPython(Fe(t),...n)}catch(t){be.get(e).stderr(t)}},Lt=async(e,t,...n)=>{try{return await e.runPythonAsync(Fe(t),...n)}catch(t){be.get(e).stderr(t)}},Ct=async(e,t,n)=>{const[r,...s]=t.split(".");let o,a=e.globals.get(r);for(const e of s)[o,a]=[a,a[e]];try{await a.call(o,n)}catch(t){be.get(e).stderr(t)}};var It=(new TextEncoder).encode("_F='github:'\n_E='user-agent'\n_D=True\n_C=False\n_B='/'\n_A=None\nfrom uio import StringIO\nimport sys\nclass Response:\n\tdef __init__(A,f):A.raw=f;A.encoding='utf-8';A._cached=_A\n\tdef close(A):\n\t\tif A.raw:A.raw.close();A.raw=_A\n\t\tA._cached=_A\n\t@property\n\tdef content(self):\n\t\tA=self\n\t\tif A._cached is _A:\n\t\t\ttry:A._cached=A.raw.read()\n\t\t\tfinally:A.raw.close();A.raw=_A\n\t\treturn A._cached\n\t@property\n\tdef text(self):return str(self.content,self.encoding)\n\tdef json(A):import ujson;return ujson.loads(A.content)\nHEADERS_TO_IGNORE=_E,\ntry:import js\nexcept Exception as err:raise OSError('This version of urequests can only be used in the browser')\nHEADERS_TO_IGNORE=_E,\ndef request(method,url,data=_A,json=_A,headers={},stream=_A,auth=_A,timeout=_A,parse_headers=_D):\n\tE=timeout;D=method;C=data;from js import XMLHttpRequest as G;A=G.new();A.withCredentials=_C\n\tif auth is not _A:import ubinascii;H,I=auth;A.open(D,url,_C,H,I)\n\telse:A.open(D,url,_C)\n\tfor(F,J)in headers.items():\n\t\tif F.lower()not in HEADERS_TO_IGNORE:A.setRequestHeader(F,J)\n\tif E:A.timeout=int(E*1000)\n\tif json is not _A:assert C is _A;import ujson;C=ujson.dumps(json);A.setRequestHeader('Content-Type','application/json')\n\tA.send(C);B=Response(StringIO(A.responseText));B.status_code=A.status;B.reason=A.statusText;B.headers=A.getAllResponseHeaders();return B\ndef get(url,**A):return request('GET',url,**A)\n_PACKAGE_INDEX=const('https://micropython.org/pi/v2')\n_CHUNK_SIZE=128\ndef _ensure_path_exists(path):\n\timport os;A=path.split(_B)\n\tif not A[0]:A.pop(0);A[0]=_B+A[0]\n\tB=''\n\tfor C in range(len(A)-1):\n\t\tB+=A[C]\n\t\ttry:os.stat(B)\n\t\texcept:os.mkdir(B)\n\t\tB+=_B\ndef _chunk(src,dest):\n\tA=memoryview(bytearray(_CHUNK_SIZE))\n\twhile _D:\n\t\tB=src.readinto(A)\n\t\tif B==0:break\n\t\tdest(A if B==_CHUNK_SIZE else A[:B])\ndef _check_exists(path,short_hash):\n\tA=short_hash;import os\n\ttry:\n\t\timport binascii as C,hashlib as D\n\t\twith open(path,'rb')as E:B=D.sha256();_chunk(E,B.update);F=str(C.hexlify(B.digest())[:len(A)],'utf-8');return F==A\n\texcept:return _C\ndef _rewrite_url(url,branch=_A):\n\tB=branch;A=url\n\tif not B:B='HEAD'\n\tif A.startswith(_F):A=A[7:].split(_B);A='https://raw.githubusercontent.com/'+A[0]+_B+A[1]+_B+B+_B+_B.join(A[2:])\n\treturn A\ndef _download_file(url,dest):\n\tB=dest;A=get(url)\n\ttry:\n\t\tif A.status_code!=200:print('Error',A.status_code,'requesting',url);return _C\n\t\tprint('Copying:',B);_ensure_path_exists(B)\n\t\twith open(B,'wb')as C:_chunk(A.raw,C.write)\n\t\treturn _D\n\tfinally:A.close()\ndef _install_json(package_json_url,index,target,version,mpy):\n\tK='File not found: {} {}';I=version;H=index;G=package_json_url;D=target;E=get(_rewrite_url(G,I))\n\ttry:\n\t\tif E.status_code!=200:print('Package not found:',G);return _C\n\t\tF=E.json()\n\tfinally:E.close()\n\tfor(A,C)in F.get('hashes',()):\n\t\tB=D+_B+A\n\t\tif _check_exists(B,C):print('Exists:',B)\n\t\telse:\n\t\t\tL='{}/file/{}/{}'.format(H,C[:2],C)\n\t\t\tif not _download_file(L,B):print(K.format(A,C));return _C\n\tfor(A,J)in F.get('urls',()):\n\t\tB=D+_B+A\n\t\tif not _download_file(_rewrite_url(J,I),B):print(K.format(A,J));return _C\n\tfor(M,N)in F.get('deps',()):\n\t\tif not _install_package(M,H,D,N,mpy):return _C\n\treturn _D\ndef _install_package(package,index,target,version,mpy):\n\tD=index;C=target;B=version;A=package\n\tif A.startswith('http://')or A.startswith('https://')or A.startswith(_F):\n\t\tif A.endswith('.py')or A.endswith('.mpy'):print('Downloading {} to {}'.format(A,C));return _download_file(_rewrite_url(A,B),C+_B+A.rsplit(_B)[-1])\n\t\telse:\n\t\t\tif not A.endswith('.json'):\n\t\t\t\tif not A.endswith(_B):A+=_B\n\t\t\t\tA+='package.json'\n\t\t\tprint('Installing {} to {}'.format(A,C))\n\telse:\n\t\tif not B:B='latest'\n\t\tprint('Installing {} ({}) from {} to {}'.format(A,B,D,C));E=sys.implementation._mpy&255 if mpy and hasattr(sys.implementation,'_mpy')else'py';A='{}/package/{}/{}/{}.json'.format(D,'py',A,B)\n\treturn _install_json(A,D,C,B,mpy)\ndef install(package,index=_A,target=_A,version=_A,mpy=_D):\n\tB=target;A=index\n\tif not B:\n\t\tfor C in sys.path:\n\t\t\tif C.endswith('/lib'):B=C;break\n\t\telse:print('Unable to find lib dir in sys.path');return\n\tif not A:A=_PACKAGE_INDEX\n\tif _install_package(package,A.rstrip(_B),B,version,mpy):print('Done')\n\telse:print('Package may be partially installed')");const Wt=async e=>(await import("./toml-DiUM0_qs.js")).parse(e);async function Ut(e,t){return new Promise(((n,r)=>{e.syncfs(t,(e=>{e?r(e):n()}))}))}function Nt(e){const t=e.FS,n=e.FS.filesystems.MEMFS,r=e.PATH,s={DIR_MODE:16895,FILE_MODE:33279,mount:function(e){if(!e.opts.fileSystemHandle)throw new Error("opts.fileSystemHandle is required");return n.mount.apply(null,arguments)},syncfs:async(e,t,n)=>{try{const r=s.getLocalSet(e),o=await s.getRemoteSet(e),a=t?o:r,i=t?r:o;await s.reconcile(e,a,i),n(null)}catch(e){n(e)}},getLocalSet:e=>{let n=Object.create(null);function s(e){return"."!==e&&".."!==e}function o(e){return t=>r.join2(e,t)}let a=t.readdir(e.mountpoint).filter(s).map(o(e.mountpoint));for(;a.length;){let e=a.pop(),r=t.stat(e);t.isDir(r.mode)&&a.push.apply(a,t.readdir(e).filter(s).map(o(e))),n[e]={timestamp:r.mtime,mode:r.mode}}return{type:"local",entries:n}},getRemoteSet:async e=>{const t=Object.create(null),n=await Ht(e.opts.fileSystemHandle);for(const[o,a]of n)"."!==o&&(t[r.join2(e.mountpoint,o)]={timestamp:"file"===a.kind?(await a.getFile()).lastModifiedDate:new Date,mode:"file"===a.kind?s.FILE_MODE:s.DIR_MODE});return{type:"remote",entries:t,handles:n}},loadLocalEntry:e=>{const r=t.lookupPath(e).node,s=t.stat(e);if(t.isDir(s.mode))return{timestamp:s.mtime,mode:s.mode};if(t.isFile(s.mode))return r.contents=n.getFileDataAsTypedArray(r),{timestamp:s.mtime,mode:s.mode,contents:r.contents};throw new Error("node type not supported")},storeLocalEntry:(e,n)=>{if(t.isDir(n.mode))t.mkdirTree(e,n.mode);else{if(!t.isFile(n.mode))throw new Error("node type not supported");t.writeFile(e,n.contents,{canOwn:!0})}t.chmod(e,n.mode),t.utime(e,n.timestamp,n.timestamp)},removeLocalEntry:e=>{var n=t.stat(e);t.isDir(n.mode)?t.rmdir(e):t.isFile(n.mode)&&t.unlink(e)},loadRemoteEntry:async e=>{if("file"===e.kind){const t=await e.getFile();return{contents:new Uint8Array(await t.arrayBuffer()),mode:s.FILE_MODE,timestamp:t.lastModifiedDate}}if("directory"===e.kind)return{mode:s.DIR_MODE,timestamp:new Date};throw new Error("unknown kind: "+e.kind)},storeRemoteEntry:async(e,n,s)=>{const o=e.get(r.dirname(n)),a=t.isFile(s.mode)?await o.getFileHandle(r.basename(n),{create:!0}):await o.getDirectoryHandle(r.basename(n),{create:!0});if("file"===a.kind){const e=await a.createWritable();await e.write(s.contents),await e.close()}e.set(n,a)},removeRemoteEntry:async(e,t)=>{const n=e.get(r.dirname(t));await n.removeEntry(r.basename(t)),e.delete(t)},reconcile:async(e,n,o)=>{let a=0;const i=[];Object.keys(n.entries).forEach((function(e){const r=n.entries[e],s=o.entries[e];(!s||t.isFile(r.mode)&&r.timestamp.getTime()>s.timestamp.getTime())&&(i.push(e),a++)})),i.sort();const c=[];if(Object.keys(o.entries).forEach((function(e){n.entries[e]||(c.push(e),a++)})),c.sort().reverse(),!a)return;const l="remote"===n.type?n.handles:o.handles;for(const t of i){const n=r.normalize(t.replace(e.mountpoint,"/")).substring(1);if("local"===o.type){const e=l.get(n),r=await s.loadRemoteEntry(e);s.storeLocalEntry(t,r)}else{const e=s.loadLocalEntry(t);await s.storeRemoteEntry(l,n,e)}}for(const t of c)if("local"===o.type)s.removeLocalEntry(t);else{const n=r.normalize(t.replace(e.mountpoint,"/")).substring(1);await s.removeRemoteEntry(l,n)}}};return e.FS.filesystems.NATIVEFS_ASYNC=s,async function(e,n){if("FileSystemDirectoryHandle"!==n.constructor.name)throw new TypeError("Expected argument 'fileSystemHandle' to be a FileSystemDirectoryHandle");return function(e){t.mkdirTree?t.mkdirTree(e):lt(t,e);const{node:n}=t.lookupPath(e,{follow_mount:!1});if(t.isMountpoint(n))throw new Error(`path '${e}' is already a file system mount point`);if(!t.isDir(n.mode))throw new Error(`path '${e}' points to a file not a directory`);for(const t in n.contents)throw new Error(`directory '${e}' is not empty`)}(e),t.mount(t.filesystems.NATIVEFS_ASYNC,{fileSystemHandle:n},e),await Ut(t,!0),{syncfs:async()=>await Ut(t,!1)}}}const Ht=async e=>{const t=[];await async function e(n){for await(const r of n.values())t.push(r),"directory"===r.kind&&await e(r)}(e);const n=new Map;n.set(".",e);for(const r of t){const t=(await e.resolve(r)).join("/");n.set(t,r)}return n},Jt=(e,t)=>{try{e.mkdir(t)}catch(e){}},qt=gt("mpy");var zt={type:"micropython",module:(e="1.24.1")=>`https://cdn.jsdelivr.net/npm/@micropython/micropython-webassembly-pyscript@${e}/micropython.mjs`,async engine({loadMicroPython:e},t,n,r){const{stderr:s,stdout:o,get:a}=_e({stderr:ve(console.error),stdout:ve(console.log)});n=n.replace(/\.m?js$/,".wasm"),qt("Loading MicroPython");const i=await a(e({linebuffer:!1,stderr:s,stdout:o,url:n})),c=Kt.bind(this,i,r);return Ft.set(i,c),await Rt(this,qt,i,t,r),this.writeFile(i,"./mip.py",It),t.packages&&(qt("Loading packages"),await c(t.packages.map(He,r)),qt("Loaded packages")),qt("Loaded MicroPython"),i.mountNativeFS||(i.mountNativeFS=Nt(i._module)),i},registerJSModule:Tt,run:Mt,runAsync:Lt,runEvent:Ct,transform:(e,t)=>e.PyProxy.toJs(t),writeFile:(e,t,n,r)=>{const{FS:s,_module:{PATH:o,PATH_FS:a}}=e,i={FS:s,PATH:o,PATH_FS:a},c=Dt(t,r);if(c){const r=t.slice(0,-1);switch("./"!==r&&s.mkdir(r),c){case"whl":case"zip":{const e=new Blob([n],{type:"application/zip"});return import("./zip-DxlTOqbw.js").then((async({BlobReader:t,Uint8ArrayWriter:n,ZipReader:a})=>{const i=new a(new t(e));for(const e of await i.getEntries()){const{directory:t,filename:a}=e,i=r+a;if(t)Jt(s,i);else{Jt(s,o.dirname(i));const t=await e.getData(new n);s.writeFile(i,t,{canOwn:!0})}}i.close()}))}case"tgz":case"tar.gz":{const t="./_.tar.gz";return it(i,t,n),void e.runPython(`\n import os, gzip, tarfile\n tar = tarfile.TarFile(fileobj=gzip.GzipFile(fileobj=open("${t}", "rb")))\n for f in tar:\n name = f"${r}{f.name}"\n if f.type == tarfile.DIRTYPE:\n if f.name != "./":\n os.mkdir(name.strip("/"))\n else:\n dir = os.path.dirname(name)\n if not os.path.exists(dir):\n os.mkdir(dir)\n source = tar.extractfile(f)\n with open(name, "wb") as dest:\n dest.write(source.read())\n dest.close()\n tar.close()\n os.remove("${t}")\n `)}}}return it(i,t,n)}};async function Kt(e,t,n){let r;for(const s of n)if(s.endsWith(".whl")){const n=Ne(s,t),r=await o(n).arrayBuffer();await this.writeFile(e,"./*",r,n)}else r||(r=e.pyimport("mip")),r.install(s)}const Xt={dict_converter:Object.fromEntries},{stringify:Gt}=JSON;let Vt=!1;const Yt=e=>(...t)=>{try{return Vt=!0,e(...t)}finally{Vt=!1}};let Zt=!1;const Qt=()=>{if(Zt)return;Zt=!0;const e=new WeakMap,t=e=>e.destroy(),n=n=>{for(let r=0;r`https://cdn.jsdelivr.net/pyodide/v${e}/full/pyodide.mjs`,async engine({loadPyodide:e},t,n,r){at||"auto"!==t.experimental_create_proxy||Qt(),en("Loading Pyodide");let{packages:s,index_urls:o}=t;s&&(s=s.map(He,r)),en("Loading Storage");const a=n.slice(0,n.lastIndexOf("/")),i=new d(a),c={indexURL:a},l="never"!==t.packages_cache;if(await i.sync(),l){if(s){s=s.sort();const e=Gt(s);if(i.has(e)){const t=new Blob([i.get(e)],{type:"application/json"});c.lockFileURL=URL.createObjectURL(t),c.packages=s.map((e=>e.split(/[>=<]=/)[0])),s=null}}}else i.clear();en("Loaded Storage");const{stderr:u,stdout:p,get:f}=_e(),y=await f(e({stderr:u,stdout:p,...c})),h=sn.bind(y);return o&&tn.set(y,o),Ft.set(y,h),await Rt(this,en,y,t,r),s&&await h(s,i,l),await i.close(),c.lockFileURL&&URL.revokeObjectURL(c.lockFileURL),en("Loaded Pyodide"),y},registerJSModule:Tt,run:Yt(Mt),runAsync:Yt(Lt),runEvent:Yt(Ct),transform:(e,t)=>rn.call(e,t),writeFile:(e,t,n,r)=>{const s=Dt(t,r);if(s)return e.unpackArchive(n,s,{extractDir:t.slice(0,-1)});const{FS:o,PATH:a,_module:{PATH_FS:i}}=e;return it({FS:o,PATH:a,PATH_FS:i},t,n)}};function rn(e){const{ffi:{PyProxy:t}}=this;if(e&&"object"==typeof e){if(e instanceof t)return e.toJs(Xt);if(e instanceof Map)return new Map([...e.entries()]);if(Te(e))return e.map(rn,this)}return e}async function sn(e,t,n=!1){const{log:r}=console,s=(e,...t)=>{r(e,...t),console.log=r,en(e),console.log=s};console.log=s,await this.loadPackage("micropip");const o=this.pyimport("micropip");if(tn.has(this)&&o.set_index_urls(tn.get(this)),await o.install(e,{keep_going:!0}),console.log=r,n&&t instanceof d){const n=o.freeze();t.set(Gt(e),n)}o.destroy()}const on="ruby-wasm-wasi",an=on.replace(/\W+/g,"_");var cn={type:on,experimental:!0,module:(e="2.7.1")=>`https://cdn.jsdelivr.net/npm/@ruby/3.2-wasm-wasi@${e}/dist/browser/+esm`,async engine({DefaultRubyVM:e},t,n,r){n=n.replace(/\/browser\/\+esm$/,"/ruby.wasm");const s=await o(n).arrayBuffer(),a=await WebAssembly.compile(s),{vm:i}=await e(a);return t.files&&await mt(this,i,t.files,r),t.fetch&&await dt(this,i,t.fetch,r),t.js_modules&&await wt(t.js_modules,r),i},registerJSModule(e,t,n){t=t.replace(/\W+/g,"__");const r=`__module_${an}_${t}`;globalThis[r]=n,this.run(e,`require "js";$${t}=JS.global[:${r}]`),delete globalThis[r]},run:(e,t,...n)=>e.eval(Fe(t),...n),runAsync:(e,t,...n)=>e.evalAsync(Fe(t),...n),async runEvent(e,t,n){if(/^xworker\.(on\w+)$/.test(t)){const{$1:t}=RegExp,r=`__module_${an}_event`;globalThis[r]=n,this.run(e,`require "js";$xworker.call("${t}",JS.global[:${r}])`),delete globalThis[r]}else{const r=this.run(e,`method(:${t})`);await r.call(t,e.wrap(n))}},transform:(e,t)=>t,writeFile:()=>{throw new Error(`writeFile is not supported in ${on}`)}};var ln={type:"wasmoon",module:(e="1.16.0")=>`https://cdn.jsdelivr.net/npm/wasmoon@${e}/+esm`,async engine({LuaFactory:e,LuaLibraries:t},n,r,s){const{stderr:o,stdout:a,get:i}=_e(),c=await i((new e).createEngine());return c.global.getTable(t.Base,(e=>{c.global.setField(e,"print",a),c.global.setField(e,"printErr",o)})),n.files&&await mt(this,c,n.files,s),n.fetch&&await dt(this,c,n.fetch,s),n.js_modules&&await wt(n.js_modules,s),c},registerJSModule:(e,t,n)=>{e.global.set(t,n)},run:(e,t,...n)=>{try{return e.doStringSync(Fe(t),...n)}catch(t){be.get(e).stderr(t)}},runAsync:async(e,t,...n)=>{try{return await e.doString(Fe(t),...n)}catch(t){be.get(e).stderr(t)}},runEvent:async(e,t,n)=>{const[r,...s]=t.split(".");let o,a=e.global.get(r);for(const e of s)[o,a]=[a,a[e]];try{await a.call(o,n)}catch(t){be.get(e).stderr(t)}},transform:(e,t)=>t,writeFile:({cmodule:{module:{FS:e}}},t,n)=>((e,t,n)=>(lt(e,ct(t)),t=ut(e,t),e.writeFile(t,new Uint8Array(n),{canOwn:!0})))(e,t,n)};const un=new WeakMap,pn=async(e,t)=>{const{shelter:n,destroy:r,io:s}=un.get(e),{output:o,result:a}=await n.captureR(Fe(t));for(const{type:e,data:t}of o)s[e](t);return le(a,r,{token:!1})};var fn={type:"webr",experimental:!0,module:(e="0.4.2")=>`https://cdn.jsdelivr.net/npm/webr@${e}/dist/webr.mjs`,async engine(e,t,n,r){const{get:s}=_e(),o=new e.WebR;await s(o.init().then((()=>o)));const a=await new o.Shelter;return un.set(o,{module:e,shelter:a,destroy:a.destroy.bind(a),io:be.get(o)}),t.files&&await mt(this,o,t.files,r),t.fetch&&await dt(this,o,t.fetch,r),t.js_modules&&await wt(t.js_modules,r),o},registerJSModule(e,t){console.warn(`Experimental interpreter: module ${t} is not supported (yet)`)},run:pn,runAsync:pn,async runEvent(e,t,n){await e.evalRVoid(`${t}(event)`,{env:{event:{type:[n.type]}}})},transform:(e,t)=>(console.log("transforming",t),t),writeFile:()=>{}};const dn=new Map,yn=new Map,hn=[],mn=[],wn=new Proxy(new Map,{get(e,t){if(!e.has(t)){const[n,...r]=t.split("@"),s=dn.get(n),o=/^(?:\.?\.?\/|[a-z0-9-]+:\/\/)/i.test(r)?r.join("@"):s.module(...r);e.set(t,{url:o,module:import(o),engine:s.engine.bind(s)})}const{url:n,module:r,engine:s}=e.get(t);return(e,o)=>r.then((r=>(yn.set(t,e),s(r,e,n,o))))}}),gn=e=>{for(const t of[].concat(e.type))dn.set(t,e),hn.push(`script[type="${t}"]`),mn.push(`${t}-`)};for(const e of[xe,zt,nn,cn,ln,fn])gn(e);const{parse:bn}=JSON,_n=(e,t="./config.txt")=>{let n=typeof e;return"string"===n&&/\.(json|toml|txt)$/.test(e)?n=RegExp.$1:e=t,[Ne(e),n]},An=(e,t,n={})=>{const[r,s]=_n(e,t);return"json"===s?n=o(r).json():"toml"===s?n=o(r).text().then(Wt):"string"===s?n=vn(e):"object"===s&&e?n=e:"txt"===s&&"string"==typeof n&&(n=vn(n)),[n,e=r]},vn=e=>{try{return bn(e)}catch(t){return Wt(e)}},En=(e,t,n,r={})=>(t&&([r,t]=An(t,n,r)),Ue(r).then((n=>wn[e](n,t)))),kn=(e,t="")=>`${e}@${t}`.replace(/@$/,"");function Sn(e=this){return String(e).replace(/^(async\s*)?(\bfunction\b)?(.*?)\(/,((e,t,n,r)=>r&&!n?`${t||""}function ${r}(`:e))}const xn="BeforeRun",jn="AfterRun",Pn=[`code${xn}`,`code${xn}Async`,`code${jn}`,`code${jn}Async`],$n=["onWorker","onReady",`on${xn}`,`on${xn}Async`,`on${jn}`,`on${jn}Async`];function Bn(e,t){const{run:n,runAsync:r}=dn.get(this.type);return{...e,run:n.bind(this,t),runAsync:r.bind(this,t)}}const On=(e,t,n,r,s,o)=>{if(s||o){const a=Bn.bind(e,t),i=r?"runAsync":"run",c=e[i];e[i]=r?async function(e,t,...r){s&&await s.call(this,a(e),n);const i=await c.call(this,e,t,...r);return o&&await o.call(this,a(e),n),i}:function(e,t,...r){s&&s.call(this,a(e),n);const i=c.call(this,e,t,...r);return o&&o.call(this,a(e),n),i}}};let Fn=class{constructor(e,t={}){const{main:n,worker:r}=t;this.interpreter=e,this.onWorker=n?.onWorker;for(const e of $n.slice(1))this[e]=r?.[e];for(const e of Pn)this[e]=r?.[e]}toJSON(){const e={};for(const t of $n.slice(1))this[t]&&(e[t]=Sn(this[t]));for(const t of Pn)this[t]&&(e[t]=Fe(this[t]()));return e}};var Rn=(...e)=>function(t,n){if(e.length){const[t,r]=e;(n=De({},n||{type:t,version:r})).type||(n.type=t)}const[r]=_n(n.config,n.configURL),s=((...e)=>new ge(URL.createObjectURL(new Blob(['const{assign:e}=Object,t="entries",n="readonly",r="readwrite",s={durability:"default",prefix:"IDBMap"},o=({target:{result:e}})=>e;class a extends EventTarget{#e;#t;#n;async#r(n,r){const s=(await this.#e).transaction(t,r,this.#t);return new Promise(((r,o)=>e(n(s.objectStore(t)),{onsuccess:r,onerror:o})))}constructor(n,{durability:r=s.durability,prefix:a=s.prefix}=s){super(),this.#n=a,this.#t={durability:r},this.#e=new Promise(((r,s)=>{e(indexedDB.open(`${this.#n}/${n}`),{onupgradeneeded({target:{result:e,transaction:n}}){e.objectStoreNames.length||e.createObjectStore(t),n.oncomplete=()=>r(e)},onsuccess(e){r(o(e))},onerror(e){s(e),this.dispatchEvent(e)}})})).then((e=>{const t=this.dispatchEvent.bind(this);for(const n in e)n.startsWith("on")&&(e[n]=t);return e}))}dispatchEvent(t){const{type:n,message:r,isTrusted:s}=t;return super.dispatchEvent(s?e(new Event(n),{message:r}):t)}async close(){(await this.#e).close()}get size(){return this.#r((e=>e.count()),n).then(o)}async clear(){await this.#r((e=>e.clear()),r)}async delete(e){await this.#r((t=>t.delete(e)),r)}async entries(){const e=await this.keys();return Promise.all(e.map((e=>this.get(e).then((t=>[e,t])))))}async forEach(e,t=this){for(const[n,r]of await this.entries())await e.call(t,r,n,this)}async get(e){return await this.#r((t=>t.get(e)),n).then(o)}async has(e){return void 0!==await this.#r((t=>t.getKey(e)),n).then(o)}async keys(){return await this.#r((e=>e.getAllKeys()),n).then(o)}async set(e,t){return await this.#r((n=>n.put(t,e)),r),this}async values(){const e=await this.keys();return Promise.all(e.map((e=>this.get(e))))}get[Symbol.toStringTag](){return this.#n}}class i extends Map{#s;#o;constructor(...e){super(),this.#s=new a(...e),this.#o=this.#s.entries().then((e=>{for(const[t,n]of e)super.set(t,n)}))}async close(){await this.#o,await this.#s.close()}async sync(){await this.#o}clear(){return this.#o=this.#o.then((()=>this.#s.clear())),super.clear()}delete(e){return this.#o=this.#o.then((()=>this.#s.delete(e))),super.delete(e)}set(e,t){return this.#o=this.#o.then((()=>this.#s.set(e,t))),super.set(e,t)}}let c="coincident-";try{new SharedArrayBuffer(4,{maxByteLength:8}),c+=crypto.randomUUID()}catch(Bt){c+=Math.random().toString(36).substring(2)}const{fromCharCode:l}=String,{min:u}=Math;const{defineProperty:p}=Object,d=e=>{switch(e[y++]){case 1:{const t=e[y++],n=[];e[y-2]=n;for(let r=0;r({byteOffset:t})=>(n,r)=>{const s=new Uint16Array(r,t);let o="",a=0;for(;a{y=0;const t=f(e);return t.length?d(t):void 0})),m="2d28b248-43f8-4fdc-b78e-514b8111e549",w="="+m,g="-"+m,{create:b}=Object;let _="coincident-",A=!0;try{new SharedArrayBuffer(4,{maxByteLength:8}),_+=crypto.randomUUID()}catch(e){A=!1,_+=Math.random().toString(36).substring(2)}const E=2*Int32Array.BYTES_PER_ELEMENT,v={byteOffset:E,useUTF16:!0,circular:!0},S=new Map,k=e=>e,x=(e,t,n)=>{const r="then"!==t;return r&&(e[t]=n),r},j=()=>Promise.withResolvers(),{fromCharCode:B}=String,{min:P}=Math;const{parse:$}=JSON,F=(R=$,({byteOffset:e})=>(t,n)=>{const r=new Uint16Array(n,e);let s="",o=0;for(;o{(e=>{e.stopImmediatePropagation(),e.preventDefault()})(e),O.resolve([e.data,e.ports[0]])}),{once:!0});var T=async e=>{const[t,n]=await O.promise,r=A&&!!t,s=e?.transform,o=(e?.decoder||F)(v);let a,i;if(A){const t=new SharedArrayBuffer(e?.minByteLength||65535,{maxByteLength:e?.maxByteLength||16777216});a=new Int32Array(t),i=Atomics.wait;const n=e?.interrupt;if(n){const{handler:e,timeout:t=42}=n;i=(n,r,s)=>{for(;"timed-out"===(s=wait(n,r,0,t));)e();return s}}}const[c,l]=((e=k,t=0)=>[n=>{const r=j();do{n=e(t++)}while(S.has(n));return S.set(n,r),[n,r]},(e,t,n)=>{const r=S.get(e);S.delete(e),n?r.reject(n):r.resolve(t)}])(String),u=new Map,p=b(null),d=new Proxy(p,{get(e,l){if("then"===l)return;let p=u.get(l);return p||u.set(l,p=(...e)=>{const u=[a,l,s?e.map(s):e];if(A){r?postMessage({ID:t,data:u}):n.postMessage(u),i(a,0),a[0]=0;const e=a[1]?o(a[1],a.buffer):void 0;if(e instanceof Error)throw e;return e}{const[e,t]=c();return u[0]=e,n.postMessage(u),t.promise}}),p},set:x});return n.onmessage=async({data:[e,t,r]})=>{if("string"==typeof e)l(e,t,r);else{const o=await(async(e,t,n,r)=>{const s=[e,null,null];try{const e=await t(...n);s[1]=r?r(e):e}catch(e){s[2]=e}return s})(e,p[t],r,s);n.postMessage(o)}},{native:A,proxy:d}};const D="apply",M="construct",C="defineProperty",L="deleteProperty",I="get",H="getOwnPropertyDescriptor",U="getPrototypeOf",W="has",N="isExtensible",J="ownKeys",q="preventExtensions",z="set",K="setPrototypeOf";var G=Object.freeze({__proto__:null,APPLY:D,CONSTRUCT:M,DEFINE_PROPERTY:C,DELETE_PROPERTY:L,GET:I,GET_OWN_PROPERTY_DESCRIPTOR:H,GET_PROTOTYPE_OF:U,HAS:W,IS_EXTENSIBLE:N,OWN_KEYS:J,PREVENT_EXTENSION:q,SET:z,SET_PROTOTYPE_OF:K});const Y="destruct",V="array",X="function",Z="null",Q="number",ee="object",te="symbol",ne="undefined";function re(){return this}const se=new FinalizationRegistry((([e,t,n])=>{n&&console.debug(`%c${String(t)}`,"font-weight:bold","collected"),e(t)})),oe=Object.create(null),ae=(e,t,{debug:n,handler:r,return:s,token:o=e}=oe)=>{const a=s||new Proxy(e,r||oe),i=[a,[t,e,!!n]];return!1!==o&&i.push(o),se.register(...i),a},{Object:ie,Proxy:ce,Reflect:le}=globalThis,{isArray:ue}=Array,{ownKeys:pe}=le,{create:de,hasOwn:fe,values:ye}=ie,he=(e,t)=>t===V?e[0]:t===X?e():t===ee?e.$:e,me=(e,t,n,r)=>{const s={type:{value:t}},o=fe(e,"valueOf");for(const a of ye(G)){let i=r(e[a]||le[a]);if(o&&a===I){const{valueOf:r}=e,{value:s}=i;i={value(e,o,...a){return o===n?r.call(this,he(e,t)):s.call(this,e,o,...a)}}}s[a]=i}return de(e,s)},we=(e,t,n,r=e)=>{if(r===e)switch(typeof e){case ee:case ne:r||(r=!1);case X:break;default:r=!1,t===e&&(t=ie(e))}const s=new ce(t,n),{destruct:o}=n;return o?ae(e,o,{token:r,return:s}):s},ge=e=>t=>{const n=typeof t;return n===ee?t?e.get(t)?.[0]??(e=>ue(e)?V:ee)(t):Z:n},be=e=>t=>{let n=typeof t;switch(n){case ee:if(!t){n=Z;break}case X:const r=e.get(t);r&&([n,t]=r)}return[n,t]},_e=e=>((e=>{se.unregister(e)})(e),e);var Ae=e=>{const t=new WeakMap,n=Symbol(),r={},s=(e,n,r)=>(t.set(e,[n,r]),e),o={proxy:r,release:_e,pair:be(t),typeOf:ge(t),isProxy:e=>t.has(e),valueOf:e=>e[n]??e.valueOf()};for(const t of pe(e)){if(fe(o,t))continue;const a=e[t];switch(t){case V:{const e=me(a,t,n,(e=>({value([t],...n){return e.call(this,t,...n)}})));r[t]=(t,...n)=>s(we(t,[t],e,...n),V,t);break}case X:{const e=me(a,t,n,(e=>({value(t,...n){return e.call(this,t(),...n)}})));r[t]=(t,...n)=>{return s(we(t,(r=t,re.bind(r)),e,...n),X,t);var r};break}case ee:{const e=me(a,t,n,(e=>({value({$:t},...n){return e.call(this,t,...n)}})));r[t]=(t,...n)=>s(we(t,{$:t},e,...n),ee,t);break}default:{const e=me(a,t,n,(e=>({value:e})));r[t]=(n,...r)=>s(we(n,n,e,...r),t,n);break}}}return o};const{drop:Ee,get:ve,hold:Se}=(()=>{const e=new Map,t=new Map;let n=0;return{clear:()=>{e.clear(),t.clear()},drop:n=>{const[r,s]=typeof n===Q?[t,e]:[e,t],o=r.has(n);return o&&(s.delete(r.get(n)),r.delete(n)),o},get:e=>t.get(e),hold:r=>{if(!e.has(r)){let s;for(;t.has(s=n++););e.set(r,s),t.set(s,r)}return e.get(r)}}})();var ke=Object.fromEntries([V,"bigint","boolean",X,Z,Q,ee,"string",te,ne].map(((e,t)=>[e,t])));const{[J]:xe}=Reflect,je=new Map(xe(Symbol).filter((e=>typeof Symbol[e]===te)).map((e=>[Symbol[e],e]))),Be=e=>je.get(e)||`.${Symbol.keyFor(e)||""}`,{isArray:Pe}=Array,{isView:$e}=ArrayBuffer,{[D]:Fe}=Reflect;var Re=(e,t)=>{const n=new Map,r=(e,t)=>{let r=n.get(e)?.deref();return r||n.set(e,new WeakRef(r=t(e))),r},s=([e,t])=>{switch(e){case ke[ee]:return null==t?globalThis:typeof t===Q?r(t,l.object):t;case ke[V]:return typeof t===Q?r(t,l.array):t;case ke[X]:return typeof t===Q?r(t,l.function):ve(parseInt(t));case ke[te]:return(e=>{if(e.startsWith("."))return Symbol.for(e.slice(1));for(const[t,n]of je)if(n===e)return t})(t);default:return t}},o=e=>{let[n,r]=p(e);switch(n){case ee:if(r==globalThis||null==r)r=null;else if(typeof r===ee&&!$e(r))if(r=t(r),Pe(r))r=r.map(o);else for(const e in r)r[e]=o(r[e]);return[ke[ee],r];case V:return[ke[V],typeof r===Q?r:t(r).map(o)];case X:return[ke[X],typeof r===X?String(Se(t(r))):r];case te:return[ke[te],Be(e)];default:return[ke[n],r]}},a=(...t)=>s(e(...t)),i={[C]:(e,t,n)=>a(C,e,o(t),o(n)),[L]:(e,t)=>a(L,e,o(t)),[I]:(e,t)=>a(I,e,o(t)),[U]:e=>a(U,e),[H]:(e,t)=>{const n=a(H,e,o(t));if(n){const{get:e,set:t,value:r}=n;e&&(n.get=s(e)),t&&(n.set=s(t)),r&&(n.value=s(r))}return n},[W]:(e,t)=>a(W,e,o(t)),[N]:e=>a(N,e),[J]:e=>a(J,e).map(s),[q]:e=>a(q,e),[z]:(e,t,n)=>a(z,e,o(t),o(n)),[K]:(e,t)=>a(K,e,o(t)),[Y](t){n.delete(t),e(Y,t)}},c={[ee]:i,[V]:i,[X]:{...i,[D]:(e,...t)=>a(D,e,...t.map(o)),[M]:(e,...t)=>a(M,e,...t.map(o))}},{proxy:l,isProxy:u,pair:p}=Ae(c);return{isProxy:u,global:l.object(null),method:async(e,t,...n)=>{const r=parseInt(t);switch(e){case D:{const[e,t]=n;return o(await Fe(ve(r),s(e),t.map(s)))}case Y:Ee(r)}}}};const Oe={object(...e){return this.string(function(e){for(var t=e[0],n=1,r=arguments.length;n{const t=e||console,n={buffered:Ce,stderr:(t.stderr||console.error).bind(t),stdout:(t.stdout||console.log).bind(t)};return{stderr:(...e)=>n.stderr(...e),stdout:(...e)=>n.stdout(...e),async get(e){const t=await e;return Te.set(t,n),t}}},Me=new TextDecoder,Ce=(e,t=10)=>{const n=[];return r=>{if(r instanceof Uint8Array)for(const s of r)s===t?e(Me.decode(new Uint8Array(n.splice(0)))):n.push(s);else e(r)}},Le=(e,...t)=>Oe[typeof e](e,...t),{isArray:Ie}=Array,{assign:He,create:Ue,defineProperty:We,entries:Ne}=Object,{all:Je,resolve:qe}=new Proxy(Promise,{get:(e,t)=>e[t].bind(e)}),ze=(e,t=location.href)=>new URL(e,t.replace(/^blob:/,"")).href;function Ke(e){return e.startsWith(".")?ze(e,this):e}const Ge=(e,t,n,r=!1,s=CustomEvent)=>{e.dispatchEvent(new s(`${t}:${n}`,{bubbles:!0,detail:{worker:r}}))},Ye=e=>Function(`\'use strict\';return (${e})`)(),Ve=e=>e.replace(/^(?:\\n|\\r\\n)/,""),Xe=Symbol.for("polyscript.js_modules"),Ze=new Map;We(globalThis,Xe,{value:Ze}),new Proxy(Ze,{get:(e,t)=>e.get(t),has:(e,t)=>e.has(t),ownKeys:e=>[...e.keys()]});const Qe=(e,t)=>!t.startsWith("_"),et=(e,t)=>new Proxy(e,{has:Qe,get:(e,n)=>e[t][n]}),tt=(e,t)=>import(e).then((e=>{Ze.set(t,{...e})})),nt=e=>new Promise(((t,n)=>{document.querySelector(`link[rel="stylesheet"][href="${e}"]`)?t():document.head.append(He(document.createElement("link"),{rel:"stylesheet",href:e,onload:t,onerror:n}))})),rt=e=>/\\.css$/i.test(new URL(e).pathname),st=(e,t)=>e.has(t),ot=e=>[...e.keys()];var at=(e,t,n,r)=>{const s=globalThis[Xe];if(n)for(let[e,t]of Ne(n)){let n=s.get(t);n&&!Ie(n)||(s.set(t,n||(n=[])),n.push(e))}return((e,t,n,r)=>new Proxy(e,{has:st,ownKeys:ot,get:(e,s)=>{let o=e.get(s);if(Ie(o)){let a=o;o=null;for(let e of a)e=ze(e,r),rt(e)?n.importCSS(e):(n.importJS(e,s),o=t[Xe].get(s));e.set(s,o)}return o}}))(s,e,t,r)};const it=new Map,ct=e=>it.get(e),lt=(e,t)=>{try{return Function("require",t)(ct)}catch(t){Te.get(e).stderr(t)}};var ut={type:"dummy",module:()=>"data:application/javascript,",engine:e=>De().get(e),registerJSModule(e,t,n){it.set(t,n)},run:lt,runAsync:lt,runEvent:async(e,t,n)=>{try{await Function("require","e",`return ${t}(e)`)(ct,n)}catch(t){Te.get(e).stderr(t)}},transform:(e,t)=>t,writeFile(){}};const pt=Object.getOwnPropertyDescriptors(Response.prototype),dt=e=>"function"==typeof e,ft={get:(e,t)=>pt.hasOwnProperty(t)?((e,t,{get:n,value:r})=>n||!dt(r)?e.then((e=>e[t])):(...n)=>e.then((e=>e[t](...n))))(e,t,pt[t]):((e,t)=>dt(t)?t.bind(e):t)(e,e[t])};var yt=(e,...t)=>new Proxy(fetch(e,...t),ft);Promise.withResolvers||(Promise.withResolvers=function(){var e,t,n=new this((function(n,r){e=n,t=r}));return{resolve:e,reject:t,promise:n}});const ht=!globalThis.window,mt=({FS:e,PATH:t,PATH_FS:n},r,s)=>{const o=n.resolve(r),a=t.dirname(o);return e.mkdirTree?e.mkdirTree(a):gt(e,a),e.writeFile(o,new Uint8Array(s),{canOwn:!0})},wt=e=>{const t=e.split("/");return t.pop(),t.join("/")},gt=(e,t)=>{const n=[];for(const r of t.split("/"))"."!==r&&".."!==r&&(n.push(r),r&&e.mkdir(n.join("/")))},bt=(e,t)=>{const n=[];for(const e of t.split("/"))switch(e){case"":case".":break;case"..":n.pop();break;default:n.push(e)}return[e.cwd()].concat(n).join("/").replace(/^\\/+/,"/")},_t=e=>{const t=e.map((e=>e.trim().replace(/(^[/]*|[/]*$)/g,""))).filter((e=>""!==e&&"."!==e)).join("/");return e[0].startsWith("/")?`/${t}`:t},At=(e,t)=>yt(ze(e,t)).arrayBuffer(),Et=(e,t,n,r)=>Je((e=>{for(const{files:t,to_file:n,from:r=""}of e){if(void 0!==t&&void 0!==n)throw new Error("Cannot use \'to_file\' and \'files\' parameters together!");if(void 0===t&&void 0===n&&r.endsWith("/"))throw new Error(`Couldn\'t determine the filename from the path ${r}, please supply \'to_file\' parameter.`)}return e.flatMap((({from:e="",to_folder:t=".",to_file:n,files:r})=>{if(Ie(r))return r.map((n=>({url:_t([e,n]),path:_t([t,n])})));const s=n||e.slice(1+e.lastIndexOf("/"));return[{url:e,path:_t([t,s])}]}))})(n).map((({url:n,path:s})=>At(n,r).then((n=>e.writeFile(t,s,n)))))),vt=(e,t)=>t.endsWith("/")?`${t}${e.split("/").pop()}`:t,St=(e,t)=>e.replace(/\\{.+?\\}/g,(e=>{if(!t.has(e))throw new SyntaxError(`Invalid template: ${e}`);return t.get(e)})),kt=(e,t,n,r)=>Je((e=>{const t=new Map,n=new Set,r=[];for(const[s,o]of Ne(e))if(/^\\{.+\\}$/.test(s)){if(t.has(s))throw new SyntaxError(`Duplicated template: ${s}`);t.set(s,St(o,t))}else{const e=St(s,t),a=vt(e,St(o||"./",t));if(n.has(a)&&!a.endsWith("/*"))throw new SyntaxError(`Duplicated destination: ${a}`);n.add(a),r.push({url:e,path:a})}return r})(n).map((({url:n,path:s})=>At(n,r).then((r=>e.writeFile(t,s,r,n)))))),xt=({main:e,worker:t},n)=>{const r=[];if(t&&ht)for(let[e,s]of Ne(t))e=ze(e,n),r.push(tt(e,s));if(e&&!ht)for(let[t,s]of Ne(e))t=ze(t,n),rt(t)?nt(t):r.push(tt(t,s));return Je(r)},jt=e=>t=>{dispatchEvent(new CustomEvent(`${e}:progress`,{detail:t}))};let Bt="coincident-";try{new SharedArrayBuffer(4,{maxByteLength:8}),Bt+=crypto.randomUUID()}catch(bn){Bt+=Math.random().toString(36).substring(2)}var Pt={ref:0,array:1,object:2,number:3,string:4,true:5,false:6,null:7,buffer:8,view:9,symbol:10,date:11,bigint:12,undefined:13,map:14,set:15,regexp:16,error:17};const{defineProperty:$t}=Object,Ft=e=>{switch(e[Ot++]){case Pt.array:{const t=e[Ot++],n=[];e[Ot-2]=n;for(let r=0;r{const t=typeof e;switch(t){case"function":case"undefined":return"";case"object":return null===e?"null":"object";default:return t}},{isArray:Dt}=Array,{isView:Mt}=ArrayBuffer,{stringify:Ct}=JSON,Lt=(e,t,n)=>{const r=t.get(n);return"number"==typeof r?(e.push(Pt.ref,r),!0):(t.set(n,e.length),!1)},It=(e,t,n,r=Tt(n))=>{switch(r){case"null":e.push(Pt.null);break;case"object":if(Lt(e,t,n))break;switch(!0){case Dt(n):{const r=n.length;e.push(Pt.array,r);for(let s=0;s{Ot=0;const t=Rt(e);return t.length?Ft(t):void 0},stringify:e=>{const t=[];return It(t,new Map,e),Ct(t)}},Ut=new WeakMap,Wt=async(e,t,n,r,s)=>{r.files&&(t("Loading files"),await kt(e,n,r.files,s),t("Loaded files")),r.fetch&&(t("Loading fetch"),await Et(e,n,r.fetch,s),t("Loaded fetch")),r.js_modules&&(t("Loading JS modules"),await xt(r.js_modules,s),t("Loaded JS modules"))},Nt=(e,t,n)=>{"polyscript"===t&&(n.lazy_py_modules=async(...t)=>(await Ut.get(e)(t),t.map((t=>e.pyimport(t)))),n.storage=async e=>{const t=new i(e);return await t.sync(),t},n.JSON=Ht),e.registerJsModule(t,n)},Jt=(e,t)=>{if(e.endsWith("/*")){if(/\\.(zip|whl|tgz|tar(?:\\.gz)?)$/.test(t))return RegExp.$1;throw new Error(`Unsupported archive ${t}`)}return""},qt=(e,t,...n)=>{try{return e.runPython(Le(t),...n)}catch(t){Te.get(e).stderr(t)}},zt=async(e,t,...n)=>{try{return await e.runPythonAsync(Le(t),...n)}catch(t){Te.get(e).stderr(t)}},Kt=async(e,t,n)=>{const[r,...s]=t.split(".");let o,a=e.globals.get(r);for(const e of s)[o,a]=[a,a[e]];try{await a.call(o,n)}catch(t){Te.get(e).stderr(t)}};var Gt=(new TextEncoder).encode("_F=\'github:\'\\n_E=\'user-agent\'\\n_D=True\\n_C=False\\n_B=\'/\'\\n_A=None\\nfrom uio import StringIO\\nimport sys\\nclass Response:\\n\\tdef __init__(A,f):A.raw=f;A.encoding=\'utf-8\';A._cached=_A\\n\\tdef close(A):\\n\\t\\tif A.raw:A.raw.close();A.raw=_A\\n\\t\\tA._cached=_A\\n\\t@property\\n\\tdef content(self):\\n\\t\\tA=self\\n\\t\\tif A._cached is _A:\\n\\t\\t\\ttry:A._cached=A.raw.read()\\n\\t\\t\\tfinally:A.raw.close();A.raw=_A\\n\\t\\treturn A._cached\\n\\t@property\\n\\tdef text(self):return str(self.content,self.encoding)\\n\\tdef json(A):import ujson;return ujson.loads(A.content)\\nHEADERS_TO_IGNORE=_E,\\ntry:import js\\nexcept Exception as err:raise OSError(\'This version of urequests can only be used in the browser\')\\nHEADERS_TO_IGNORE=_E,\\ndef request(method,url,data=_A,json=_A,headers={},stream=_A,auth=_A,timeout=_A,parse_headers=_D):\\n\\tE=timeout;D=method;C=data;from js import XMLHttpRequest as G;A=G.new();A.withCredentials=_C\\n\\tif auth is not _A:import ubinascii;H,I=auth;A.open(D,url,_C,H,I)\\n\\telse:A.open(D,url,_C)\\n\\tfor(F,J)in headers.items():\\n\\t\\tif F.lower()not in HEADERS_TO_IGNORE:A.setRequestHeader(F,J)\\n\\tif E:A.timeout=int(E*1000)\\n\\tif json is not _A:assert C is _A;import ujson;C=ujson.dumps(json);A.setRequestHeader(\'Content-Type\',\'application/json\')\\n\\tA.send(C);B=Response(StringIO(A.responseText));B.status_code=A.status;B.reason=A.statusText;B.headers=A.getAllResponseHeaders();return B\\ndef get(url,**A):return request(\'GET\',url,**A)\\n_PACKAGE_INDEX=const(\'https://micropython.org/pi/v2\')\\n_CHUNK_SIZE=128\\ndef _ensure_path_exists(path):\\n\\timport os;A=path.split(_B)\\n\\tif not A[0]:A.pop(0);A[0]=_B+A[0]\\n\\tB=\'\'\\n\\tfor C in range(len(A)-1):\\n\\t\\tB+=A[C]\\n\\t\\ttry:os.stat(B)\\n\\t\\texcept:os.mkdir(B)\\n\\t\\tB+=_B\\ndef _chunk(src,dest):\\n\\tA=memoryview(bytearray(_CHUNK_SIZE))\\n\\twhile _D:\\n\\t\\tB=src.readinto(A)\\n\\t\\tif B==0:break\\n\\t\\tdest(A if B==_CHUNK_SIZE else A[:B])\\ndef _check_exists(path,short_hash):\\n\\tA=short_hash;import os\\n\\ttry:\\n\\t\\timport binascii as C,hashlib as D\\n\\t\\twith open(path,\'rb\')as E:B=D.sha256();_chunk(E,B.update);F=str(C.hexlify(B.digest())[:len(A)],\'utf-8\');return F==A\\n\\texcept:return _C\\ndef _rewrite_url(url,branch=_A):\\n\\tB=branch;A=url\\n\\tif not B:B=\'HEAD\'\\n\\tif A.startswith(_F):A=A[7:].split(_B);A=\'https://raw.githubusercontent.com/\'+A[0]+_B+A[1]+_B+B+_B+_B.join(A[2:])\\n\\treturn A\\ndef _download_file(url,dest):\\n\\tB=dest;A=get(url)\\n\\ttry:\\n\\t\\tif A.status_code!=200:print(\'Error\',A.status_code,\'requesting\',url);return _C\\n\\t\\tprint(\'Copying:\',B);_ensure_path_exists(B)\\n\\t\\twith open(B,\'wb\')as C:_chunk(A.raw,C.write)\\n\\t\\treturn _D\\n\\tfinally:A.close()\\ndef _install_json(package_json_url,index,target,version,mpy):\\n\\tK=\'File not found: {} {}\';I=version;H=index;G=package_json_url;D=target;E=get(_rewrite_url(G,I))\\n\\ttry:\\n\\t\\tif E.status_code!=200:print(\'Package not found:\',G);return _C\\n\\t\\tF=E.json()\\n\\tfinally:E.close()\\n\\tfor(A,C)in F.get(\'hashes\',()):\\n\\t\\tB=D+_B+A\\n\\t\\tif _check_exists(B,C):print(\'Exists:\',B)\\n\\t\\telse:\\n\\t\\t\\tL=\'{}/file/{}/{}\'.format(H,C[:2],C)\\n\\t\\t\\tif not _download_file(L,B):print(K.format(A,C));return _C\\n\\tfor(A,J)in F.get(\'urls\',()):\\n\\t\\tB=D+_B+A\\n\\t\\tif not _download_file(_rewrite_url(J,I),B):print(K.format(A,J));return _C\\n\\tfor(M,N)in F.get(\'deps\',()):\\n\\t\\tif not _install_package(M,H,D,N,mpy):return _C\\n\\treturn _D\\ndef _install_package(package,index,target,version,mpy):\\n\\tD=index;C=target;B=version;A=package\\n\\tif A.startswith(\'http://\')or A.startswith(\'https://\')or A.startswith(_F):\\n\\t\\tif A.endswith(\'.py\')or A.endswith(\'.mpy\'):print(\'Downloading {} to {}\'.format(A,C));return _download_file(_rewrite_url(A,B),C+_B+A.rsplit(_B)[-1])\\n\\t\\telse:\\n\\t\\t\\tif not A.endswith(\'.json\'):\\n\\t\\t\\t\\tif not A.endswith(_B):A+=_B\\n\\t\\t\\t\\tA+=\'package.json\'\\n\\t\\t\\tprint(\'Installing {} to {}\'.format(A,C))\\n\\telse:\\n\\t\\tif not B:B=\'latest\'\\n\\t\\tprint(\'Installing {} ({}) from {} to {}\'.format(A,B,D,C));E=sys.implementation._mpy&255 if mpy and hasattr(sys.implementation,\'_mpy\')else\'py\';A=\'{}/package/{}/{}/{}.json\'.format(D,\'py\',A,B)\\n\\treturn _install_json(A,D,C,B,mpy)\\ndef install(package,index=_A,target=_A,version=_A,mpy=_D):\\n\\tB=target;A=index\\n\\tif not B:\\n\\t\\tfor C in sys.path:\\n\\t\\t\\tif C.endswith(\'/lib\'):B=C;break\\n\\t\\telse:print(\'Unable to find lib dir in sys.path\');return\\n\\tif not A:A=_PACKAGE_INDEX\\n\\tif _install_package(package,A.rstrip(_B),B,version,mpy):print(\'Done\')\\n\\telse:print(\'Package may be partially installed\')");const Yt=async e=>(await import("./toml-DiUM0_qs.js")).parse(e);async function Vt(e,t){return new Promise(((n,r)=>{e.syncfs(t,(e=>{e?r(e):n()}))}))}function Xt(e){const t=e.FS,n=e.FS.filesystems.MEMFS,r=e.PATH,s={DIR_MODE:16895,FILE_MODE:33279,mount:function(e){if(!e.opts.fileSystemHandle)throw new Error("opts.fileSystemHandle is required");return n.mount.apply(null,arguments)},syncfs:async(e,t,n)=>{try{const r=s.getLocalSet(e),o=await s.getRemoteSet(e),a=t?o:r,i=t?r:o;await s.reconcile(e,a,i),n(null)}catch(e){n(e)}},getLocalSet:e=>{let n=Object.create(null);function s(e){return"."!==e&&".."!==e}function o(e){return t=>r.join2(e,t)}let a=t.readdir(e.mountpoint).filter(s).map(o(e.mountpoint));for(;a.length;){let e=a.pop(),r=t.stat(e);t.isDir(r.mode)&&a.push.apply(a,t.readdir(e).filter(s).map(o(e))),n[e]={timestamp:r.mtime,mode:r.mode}}return{type:"local",entries:n}},getRemoteSet:async e=>{const t=Object.create(null),n=await Zt(e.opts.fileSystemHandle);for(const[o,a]of n)"."!==o&&(t[r.join2(e.mountpoint,o)]={timestamp:"file"===a.kind?(await a.getFile()).lastModifiedDate:new Date,mode:"file"===a.kind?s.FILE_MODE:s.DIR_MODE});return{type:"remote",entries:t,handles:n}},loadLocalEntry:e=>{const r=t.lookupPath(e).node,s=t.stat(e);if(t.isDir(s.mode))return{timestamp:s.mtime,mode:s.mode};if(t.isFile(s.mode))return r.contents=n.getFileDataAsTypedArray(r),{timestamp:s.mtime,mode:s.mode,contents:r.contents};throw new Error("node type not supported")},storeLocalEntry:(e,n)=>{if(t.isDir(n.mode))t.mkdirTree(e,n.mode);else{if(!t.isFile(n.mode))throw new Error("node type not supported");t.writeFile(e,n.contents,{canOwn:!0})}t.chmod(e,n.mode),t.utime(e,n.timestamp,n.timestamp)},removeLocalEntry:e=>{var n=t.stat(e);t.isDir(n.mode)?t.rmdir(e):t.isFile(n.mode)&&t.unlink(e)},loadRemoteEntry:async e=>{if("file"===e.kind){const t=await e.getFile();return{contents:new Uint8Array(await t.arrayBuffer()),mode:s.FILE_MODE,timestamp:t.lastModifiedDate}}if("directory"===e.kind)return{mode:s.DIR_MODE,timestamp:new Date};throw new Error("unknown kind: "+e.kind)},storeRemoteEntry:async(e,n,s)=>{const o=e.get(r.dirname(n)),a=t.isFile(s.mode)?await o.getFileHandle(r.basename(n),{create:!0}):await o.getDirectoryHandle(r.basename(n),{create:!0});if("file"===a.kind){const e=await a.createWritable();await e.write(s.contents),await e.close()}e.set(n,a)},removeRemoteEntry:async(e,t)=>{const n=e.get(r.dirname(t));await n.removeEntry(r.basename(t)),e.delete(t)},reconcile:async(e,n,o)=>{let a=0;const i=[];Object.keys(n.entries).forEach((function(e){const r=n.entries[e],s=o.entries[e];(!s||t.isFile(r.mode)&&r.timestamp.getTime()>s.timestamp.getTime())&&(i.push(e),a++)})),i.sort();const c=[];if(Object.keys(o.entries).forEach((function(e){n.entries[e]||(c.push(e),a++)})),c.sort().reverse(),!a)return;const l="remote"===n.type?n.handles:o.handles;for(const t of i){const n=r.normalize(t.replace(e.mountpoint,"/")).substring(1);if("local"===o.type){const e=l.get(n),r=await s.loadRemoteEntry(e);s.storeLocalEntry(t,r)}else{const e=s.loadLocalEntry(t);await s.storeRemoteEntry(l,n,e)}}for(const t of c)if("local"===o.type)s.removeLocalEntry(t);else{const n=r.normalize(t.replace(e.mountpoint,"/")).substring(1);await s.removeRemoteEntry(l,n)}}};return e.FS.filesystems.NATIVEFS_ASYNC=s,async function(e,n){if("FileSystemDirectoryHandle"!==n.constructor.name)throw new TypeError("Expected argument \'fileSystemHandle\' to be a FileSystemDirectoryHandle");return function(e){t.mkdirTree?t.mkdirTree(e):gt(t,e);const{node:n}=t.lookupPath(e,{follow_mount:!1});if(t.isMountpoint(n))throw new Error(`path \'${e}\' is already a file system mount point`);if(!t.isDir(n.mode))throw new Error(`path \'${e}\' points to a file not a directory`);for(const t in n.contents)throw new Error(`directory \'${e}\' is not empty`)}(e),t.mount(t.filesystems.NATIVEFS_ASYNC,{fileSystemHandle:n},e),await Vt(t,!0),{syncfs:async()=>await Vt(t,!1)}}}const Zt=async e=>{const t=[];await async function e(n){for await(const r of n.values())t.push(r),"directory"===r.kind&&await e(r)}(e);const n=new Map;n.set(".",e);for(const r of t){const t=(await e.resolve(r)).join("/");n.set(t,r)}return n},Qt=(e,t)=>{try{e.mkdir(t)}catch(e){}},en=jt("mpy");var tn={type:"micropython",module:(e="1.24.1")=>`https://cdn.jsdelivr.net/npm/@micropython/micropython-webassembly-pyscript@${e}/micropython.mjs`,async engine({loadMicroPython:e},t,n,r){const{stderr:s,stdout:o,get:a}=De({stderr:Ce(console.error),stdout:Ce(console.log)});n=n.replace(/\\.m?js$/,".wasm"),en("Loading MicroPython");const i=await a(e({linebuffer:!1,stderr:s,stdout:o,url:n})),c=nn.bind(this,i,r);return Ut.set(i,c),await Wt(this,en,i,t,r),this.writeFile(i,"./mip.py",Gt),t.packages&&(en("Loading packages"),await c(t.packages.map(Ke,r)),en("Loaded packages")),en("Loaded MicroPython"),i.mountNativeFS||(i.mountNativeFS=Xt(i._module)),i},registerJSModule:Nt,run:qt,runAsync:zt,runEvent:Kt,transform:(e,t)=>e.PyProxy.toJs(t),writeFile:(e,t,n,r)=>{const{FS:s,_module:{PATH:o,PATH_FS:a}}=e,i={FS:s,PATH:o,PATH_FS:a},c=Jt(t,r);if(c){const r=t.slice(0,-1);switch("./"!==r&&s.mkdir(r),c){case"whl":case"zip":{const e=new Blob([n],{type:"application/zip"});return import("./zip-DxlTOqbw.js").then((async({BlobReader:t,Uint8ArrayWriter:n,ZipReader:a})=>{const i=new a(new t(e));for(const e of await i.getEntries()){const{directory:t,filename:a}=e,i=r+a;if(t)Qt(s,i);else{Qt(s,o.dirname(i));const t=await e.getData(new n);s.writeFile(i,t,{canOwn:!0})}}i.close()}))}case"tgz":case"tar.gz":{const t="./_.tar.gz";return mt(i,t,n),void e.runPython(`\\n import os, gzip, tarfile\\n tar = tarfile.TarFile(fileobj=gzip.GzipFile(fileobj=open("${t}", "rb")))\\n for f in tar:\\n name = f"${r}{f.name}"\\n if f.type == tarfile.DIRTYPE:\\n if f.name != "./":\\n os.mkdir(name.strip("/"))\\n else:\\n dir = os.path.dirname(name)\\n if not os.path.exists(dir):\\n os.mkdir(dir)\\n source = tar.extractfile(f)\\n with open(name, "wb") as dest:\\n dest.write(source.read())\\n dest.close()\\n tar.close()\\n os.remove("${t}")\\n `)}}}return mt(i,t,n)}};async function nn(e,t,n){let r;for(const s of n)if(s.endsWith(".whl")){const n=ze(s,t),r=await yt(n).arrayBuffer();await this.writeFile(e,"./*",r,n)}else r||(r=e.pyimport("mip")),r.install(s)}const rn={dict_converter:Object.fromEntries},{stringify:sn}=JSON;let on=!1;const an=e=>(...t)=>{try{return on=!0,e(...t)}finally{on=!1}};let cn=!1;const ln=()=>{if(cn)return;cn=!0;const e=new WeakMap,t=e=>e.destroy(),n=n=>{for(let r=0;r`https://cdn.jsdelivr.net/pyodide/v${e}/full/pyodide.mjs`,async engine({loadPyodide:e},t,n,r){ht||"auto"!==t.experimental_create_proxy||ln(),un("Loading Pyodide");let{packages:s,index_urls:o}=t;s&&(s=s.map(Ke,r)),un("Loading Storage");const a=n.slice(0,n.lastIndexOf("/")),c=new i(a),l={indexURL:a},u="never"!==t.packages_cache;if(await c.sync(),u){if(s){s=s.sort();const e=sn(s);if(c.has(e)){const t=new Blob([c.get(e)],{type:"application/json"});l.lockFileURL=URL.createObjectURL(t),l.packages=s.map((e=>e.split(/[>=<]=/)[0])),s=null}}}else c.clear();un("Loaded Storage");const{stderr:p,stdout:d,get:f}=De(),y=await f(e({stderr:p,stdout:d,...l})),h=yn.bind(y);return o&&pn.set(y,o),Ut.set(y,h),await Wt(this,un,y,t,r),s&&await h(s,c,u),await c.close(),l.lockFileURL&&URL.revokeObjectURL(l.lockFileURL),un("Loaded Pyodide"),y},registerJSModule:Nt,run:an(qt),runAsync:an(zt),runEvent:an(Kt),transform:(e,t)=>fn.call(e,t),writeFile:(e,t,n,r)=>{const s=Jt(t,r);if(s)return e.unpackArchive(n,s,{extractDir:t.slice(0,-1)});const{FS:o,PATH:a,_module:{PATH_FS:i}}=e;return mt({FS:o,PATH:a,PATH_FS:i},t,n)}};function fn(e){const{ffi:{PyProxy:t}}=this;if(e&&"object"==typeof e){if(e instanceof t)return e.toJs(rn);if(e instanceof Map)return new Map([...e.entries()]);if(Ie(e))return e.map(fn,this)}return e}async function yn(e,t,n=!1){const{log:r}=console,s=(e,...t)=>{r(e,...t),console.log=r,un(e),console.log=s};console.log=s,await this.loadPackage("micropip");const o=this.pyimport("micropip");if(pn.has(this)&&o.set_index_urls(pn.get(this)),await o.install(e,{keep_going:!0}),console.log=r,n&&t instanceof i){const n=o.freeze();t.set(sn(e),n)}o.destroy()}const hn="ruby-wasm-wasi",mn=hn.replace(/\\W+/g,"_");var wn={type:hn,experimental:!0,module:(e="2.7.1")=>`https://cdn.jsdelivr.net/npm/@ruby/3.2-wasm-wasi@${e}/dist/browser/+esm`,async engine({DefaultRubyVM:e},t,n,r){n=n.replace(/\\/browser\\/\\+esm$/,"/ruby.wasm");const s=await yt(n).arrayBuffer(),o=await WebAssembly.compile(s),{vm:a}=await e(o);return t.files&&await kt(this,a,t.files,r),t.fetch&&await Et(this,a,t.fetch,r),t.js_modules&&await xt(t.js_modules,r),a},registerJSModule(e,t,n){t=t.replace(/\\W+/g,"__");const r=`__module_${mn}_${t}`;globalThis[r]=n,this.run(e,`require "js";$${t}=JS.global[:${r}]`),delete globalThis[r]},run:(e,t,...n)=>e.eval(Le(t),...n),runAsync:(e,t,...n)=>e.evalAsync(Le(t),...n),async runEvent(e,t,n){if(/^xworker\\.(on\\w+)$/.test(t)){const{$1:t}=RegExp,r=`__module_${mn}_event`;globalThis[r]=n,this.run(e,`require "js";$xworker.call("${t}",JS.global[:${r}])`),delete globalThis[r]}else{const r=this.run(e,`method(:${t})`);await r.call(t,e.wrap(n))}},transform:(e,t)=>t,writeFile:()=>{throw new Error(`writeFile is not supported in ${hn}`)}};var gn={type:"wasmoon",module:(e="1.16.0")=>`https://cdn.jsdelivr.net/npm/wasmoon@${e}/+esm`,async engine({LuaFactory:e,LuaLibraries:t},n,r,s){const{stderr:o,stdout:a,get:i}=De(),c=await i((new e).createEngine());return c.global.getTable(t.Base,(e=>{c.global.setField(e,"print",a),c.global.setField(e,"printErr",o)})),n.files&&await kt(this,c,n.files,s),n.fetch&&await Et(this,c,n.fetch,s),n.js_modules&&await xt(n.js_modules,s),c},registerJSModule:(e,t,n)=>{e.global.set(t,n)},run:(e,t,...n)=>{try{return e.doStringSync(Le(t),...n)}catch(t){Te.get(e).stderr(t)}},runAsync:async(e,t,...n)=>{try{return await e.doString(Le(t),...n)}catch(t){Te.get(e).stderr(t)}},runEvent:async(e,t,n)=>{const[r,...s]=t.split(".");let o,a=e.global.get(r);for(const e of s)[o,a]=[a,a[e]];try{await a.call(o,n)}catch(t){Te.get(e).stderr(t)}},transform:(e,t)=>t,writeFile:({cmodule:{module:{FS:e}}},t,n)=>((e,t,n)=>(gt(e,wt(t)),t=bt(e,t),e.writeFile(t,new Uint8Array(n),{canOwn:!0})))(e,t,n)};const bn=new WeakMap,_n=async(e,t)=>{const{shelter:n,destroy:r,io:s}=bn.get(e),{output:o,result:a}=await n.captureR(Le(t));for(const{type:e,data:t}of o)s[e](t);return ae(a,r,{token:!1})};var An={type:"webr",experimental:!0,module:(e="0.4.2")=>`https://cdn.jsdelivr.net/npm/webr@${e}/dist/webr.mjs`,async engine(e,t,n,r){const{get:s}=De(),o=new e.WebR;await s(o.init().then((()=>o)));const a=await new o.Shelter;return bn.set(o,{module:e,shelter:a,destroy:a.destroy.bind(a),io:Te.get(o)}),t.files&&await kt(this,o,t.files,r),t.fetch&&await Et(this,o,t.fetch,r),t.js_modules&&await xt(t.js_modules,r),o},registerJSModule(e,t){console.warn(`Experimental interpreter: module ${t} is not supported (yet)`)},run:_n,runAsync:_n,async runEvent(e,t,n){await e.evalRVoid(`${t}(event)`,{env:{event:{type:[n.type]}}})},transform:(e,t)=>(console.log("transforming",t),t),writeFile:()=>{}};const En=new Map,vn=new Map,Sn=new Proxy(new Map,{get(e,t){if(!e.has(t)){const[n,...r]=t.split("@"),s=En.get(n),o=/^(?:\\.?\\.?\\/|[a-z0-9-]+:\\/\\/)/i.test(r)?r.join("@"):s.module(...r);e.set(t,{url:o,module:import(o),engine:s.engine.bind(s)})}const{url:n,module:r,engine:s}=e.get(t);return(e,o)=>r.then((r=>(vn.set(t,e),s(r,e,n,o))))}}),kn=e=>{for(const t of[].concat(e.type))En.set(t,e)};for(const e of[ut,tn,dn,wn,gn,An])kn(e);const{parse:xn}=JSON,jn=(e,t,n={})=>{const[r,s]=((e,t="./config.txt")=>{let n=typeof e;return"string"===n&&/\\.(json|toml|txt)$/.test(e)?n=RegExp.$1:e=t,[ze(e),n]})(e,t);return"json"===s?n=yt(r).json():"toml"===s?n=yt(r).text().then(Yt):"string"===s?n=Bn(e):"object"===s&&e?n=e:"txt"===s&&"string"==typeof n&&(n=Bn(n)),[n,e=r]},Bn=e=>{try{return xn(e)}catch(t){return Yt(e)}},Pn="BeforeRun",$n="AfterRun",Fn=[`code${Pn}`,`code${Pn}Async`,`code${$n}`,`code${$n}Async`],Rn=["onWorker","onReady",`on${Pn}`,`on${Pn}Async`,`on${$n}`,`on${$n}Async`];function On(e,t){const{run:n,runAsync:r}=En.get(this.type);return{...e,run:n.bind(this,t),runAsync:r.bind(this,t)}}const Tn=(e,t,n,r,s,o)=>{if(s||o){const a=On.bind(e,t),i=r?"runAsync":"run",c=e[i];e[i]=r?async function(e,t,...r){s&&await s.call(this,a(e),n);const i=await c.call(this,e,t,...r);return o&&await o.call(this,a(e),n),i}:function(e,t,...r){s&&s.call(this,a(e),n);const i=c.call(this,e,t,...r);return o&&o.call(this,a(e),n),i}}};let Dn,Mn,Cn;const Ln=(e,t)=>{addEventListener(e,t||(async t=>{try{await Dn,Mn(`xworker.on${e}`,t)}catch(e){postMessage(e)}}),!!t&&{once:!0})},{proxy:In,native:Hn,window:Un,isWindowProxy:Wn}=await(async e=>{const t=await T(e),{isProxy:n,global:r,method:s}=Re(t.proxy[w],e?.transform||(e=>e));return t.proxy[g]=s,{...t,window:r,isWindowProxy:n}})({decoder:h,transform:e=>Cn?Cn(e):e}),Nn={polyfill:!Hn,sync:In,window:Hn?Un:null,isWindowProxy:Wn,onmessage:console.info,onerror:console.error,onmessageerror:console.warn,postMessage:postMessage.bind(self)};Ln("message",(({data:{options:e,config:t,configURL:n,code:r,hooks:s}})=>{Dn=(async()=>{try{const{id:o,tag:c,type:l,custom:u,version:p,config:d,async:f}=e,y=((e,t="")=>`${e}@${t}`.replace(/@$/,""))(l,p),h=await((e,t,n,r={})=>(t&&([r,t]=jn(t,n,r)),qe(r).then((n=>Sn[e](n,t)))))(y,t,n,d),{js_modules:m}=vn.get(y),w=m?.main,g=Ue(En.get(l)),b=((e,t,n,r)=>({type:t,config:n,interpreter:r,io:Te.get(r),run:(t,...n)=>e.run(r,t,...n),runAsync:(t,...n)=>e.runAsync(r,t,...n),runEvent:(...t)=>e.runEvent(r,...t)}))(g,u||l,d||{},h);let _="run";if(f&&(_+="Async"),s){let e,t,n="",r="";for(const e of Fn){const t=s[e];if(t){const s=e.endsWith("Async");(s&&f||!s&&!f)&&(e.startsWith("codeBefore")?n=t:r=t)}}(n||r)&&((e,t,n,r)=>{const s=e[t].bind(e);e[t]="run"===t?(e,t,...o)=>{n&&s(e,n,...o);const a=s(e,Ve(t),...o);return r&&s(e,r,...o),a}:async(e,t,...o)=>{n&&await s(e,n,...o);const a=await s(e,Ve(t),...o);return r&&await s(e,r,...o),a}})(g,_,n,r);for(const n of Rn.slice(2)){const r=s[n];if(r){const s=n.endsWith("Async");if(s&&f||!s&&!f){const s=Ye(r);n.startsWith("onBefore")?e=s:t=s}}}Tn(g,b,Nn,f,e,t)}let A,E,v,S=null,k="";Hn&&(({CustomEvent:A,document:E}=Un),S=o&&E.getElementById(o)||null,v=e=>Ge(S,u||l,e,!0,A));const x=at(Un,In,w,t);if(((e,t,n,r)=>{if("pyodide"===e)return;const s="polyscript.js_modules";for(const e of Reflect.ownKeys(r))t.registerJSModule(n,`${s}.${e}`,et(r,e));t.registerJSModule(n,s,r)})(l,g,h,x),g.registerJSModule(h,"polyscript",{IDBMap:a,IDBMapSync:i,xworker:Nn,currentScript:S,config:b.config,js_modules:x,get target(){return!k&&S&&("SCRIPT"===c?S.after(He(Un.document.createElement(`script-${u||l}`),{id:k=`${o}-target`})):(k=o,S.replaceChildren(),S.style.display="block")),k}}),Mn=g.runEvent.bind(g,h),Cn=g.transform.bind(g,h),S&&v("ready"),s?.onReady&&Ye(s?.onReady).call(g,On.call(g,b,h),Nn),await g[_](h,r),["micropython","pyodide"].includes(g.type)){const e="polyscript",t=`__${e}_workers__`,n="__export__";h.runPython([`import js as ${t}`,`${t}.${t} = "${n}" in locals() and ${n} or []`,`del ${t}`].join("\\n"));const r=[...globalThis[t]];delete globalThis[t],r.length&&h.runPython([`from ${e} import xworker as ${t}`,...r.map((e=>`${t}.sync.${e} = ${e}`)),`del ${t}`].join("\\n"))}return S&&v("done"),postMessage("polyscript:done"),h}catch(e){postMessage(e)}})(),Ln("error"),Ln("message"),Ln("messageerror"),Hn&&addEventListener("py:progress",(({type:e,detail:t})=>{Un.dispatchEvent(new Un.CustomEvent(e,{detail:t}))}))}));\n'.replace(me,we)],{type:"application/javascript"})),...e))({serviceWorker:n?.serviceWorker||n?.service_worker}),{postMessage:a}=s,i=this instanceof Fn,c=De(s.proxy,{importJS:nt,importCSS:rt}),l=Promise.withResolvers();let u=o(t).text().then((e=>{const t=i?this.toJSON():void 0;a.call(s,{options:n,config:r,code:e,hooks:t})})).then((()=>{u={then:e=>e()}}));return Le(s,{sync:{value:c},ready:{value:l.promise},postMessage:{value:(e,...t)=>u.then((()=>a.call(s,e,...t)))},onerror:{writable:!0,configurable:!0,value:console.error}}),s.addEventListener("message",(e=>{const{data:t}=e,n=t instanceof Error;(n||"polyscript:done"===t)&&(e.stopImmediatePropagation(),n?(l.reject(t),s.onerror(Me(e,{type:{value:"error"},error:{value:t}}))):l.resolve(s))})),i&&this.onWorker?.(this.interpreter,s),s};const Tn="Invalid content",Dn="Invalid worker attribute",Mn="Invalid worker attribute";var Ln=e=>{const{src:t,worker:n}=e.attributes;if(n){let{value:r}=n;if(r)throw new SyntaxError(Mn);if(r=t?.value,!r){if(t)throw new SyntaxError(Dn);if(e.childElementCount){const{innerHTML:t,localName:n,type:s}=e,o=s||n.replace(/-script$/,"");r=Re(t),console.warn(`Deprecated: use