From be1916dbd421b23751452525be55e1f5f4e36575 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 21 Aug 2026 17:06:46 +0000 Subject: [PATCH 1/4] Add render-token service UI: Wallet + Model Studio pages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Item 2 of the platform build backlog (design spec: Step 6 of the published design brief). The render-token API (PR #4) had no frontend — every wallet, catalogue, and publish interaction had to go through raw fetch calls. This adds the two Jekyll pages and their client TypeScript, matching the existing client/*.ts + esbuild build:* convention (fetchJson helper, escapeHtml, event-delegated forms, Bootstrap modals, brand.css tokens only). - client/wallet.ts + wallet/index.html: balance hero, token packs, on-chain purchase (send ETH to the treasury address, wait for the receipt, POST the tx hash to confirm — same wallet-connect + send-tx shape client/mint.ts already uses), and paginated ledger history. - client/models.ts + models/index.html + models/detail/index.html: public catalogue with a kind filter, "your models" + publish-a-model modal, and model detail (query-string routed like /p/?id=N and /t/?p=N&id=T, since Jekyll can't statically generate a page per D1 row) with the version/provenance list, an owner-only publish-version form whose fields adapt to the model's provider (training method / base model / dataset note / weights_ref only for fal_custom; system prompt only for code kind), and a render form with the cost shown before the click. - package.json: build:wallet / build:models scripts, wired into build:all. Testing: both new client files pass a manual strict tsc pass (client/ isn't in tsconfig's include, so this is on top of, not instead of, the project's own `npm run typecheck`) and bundle cleanly with esbuild; caught and fixed two real type issues in the process (a possibly-null form-field chain, and an `EIP1193Provider.request` overload mismatch from a `Hex | null` field passed where TS needs local narrowing to `Hex`). Full Jekyll build (`./bin/jekyll build`) succeeds with the three new pages producing balanced markup and no unresolved Liquid. API unit suite still 33/33. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01QuSa99HABSrWRarT9BQ5Tz --- assets/js/ga-models.js | 20 ++ assets/js/ga-models.js.map | 7 + assets/js/ga-wallet.js | 80 +++++++ assets/js/ga-wallet.js.map | 7 + models/detail/index.html | 123 +++++++++++ models/index.html | 122 ++++++++++ wallet/index.html | 118 ++++++++++ workers/api/client/models.ts | 417 +++++++++++++++++++++++++++++++++++ workers/api/client/wallet.ts | 361 ++++++++++++++++++++++++++++++ workers/api/package.json | 4 +- 10 files changed, 1258 insertions(+), 1 deletion(-) create mode 100644 assets/js/ga-models.js create mode 100644 assets/js/ga-models.js.map create mode 100644 assets/js/ga-wallet.js create mode 100644 assets/js/ga-wallet.js.map create mode 100644 models/detail/index.html create mode 100644 models/index.html create mode 100644 wallet/index.html create mode 100644 workers/api/client/models.ts create mode 100644 workers/api/client/wallet.ts diff --git a/assets/js/ga-models.js b/assets/js/ga-models.js new file mode 100644 index 0000000..40e6341 --- /dev/null +++ b/assets/js/ga-models.js @@ -0,0 +1,20 @@ +var T=Object.defineProperty;var $=(n,e,t)=>e in n?T(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var d=(n,e,t)=>$(n,typeof e!="symbol"?e+"":e,t);var g=new Set,w=10,v=!1,m=null;function y(n){v||(v=!0,m=n,window.addEventListener("error",e=>{let t=e.error&&e.error.message||e.message||"unknown_error",r=e.error&&e.error.stack||`${e.filename??""}:${e.lineno??0}:${e.colno??0}`;f(t,r)}),window.addEventListener("unhandledrejection",e=>{let t=e.reason,r=t instanceof Error?t.message:typeof t=="string"?t:"unhandled_rejection",o=t instanceof Error?t.stack??"":"";f(r,o)}))}function k(n){try{let e=new URL(n,location.origin);return`${e.origin}${e.pathname}`.slice(0,200)}catch{return n.split("?")[0].split("#")[0].slice(0,200)}}async function f(n,e){if(!m||g.size>=w)return;let t=`${n}::${e.slice(0,80)}`;if(!g.has(t)){g.add(t);try{await fetch(`${m.apiBase}/v1/internal/client-error`,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({message:String(n).slice(0,500),stack:String(e).slice(0,4e3),page:m.page,url:k(location.href),ts:Date.now()}),keepalive:!0})}catch{}}}function s(n){return n.replace(/[&<>"']/g,e=>{switch(e){case"&":return"&";case"<":return"<";case">":return">";case'"':return""";default:return"'"}})}async function c(n,e){let t=await fetch(n,{credentials:"include",...e});if(!t.ok){let r="";try{r=JSON.stringify(await t.json())}catch{}throw new Error(`${t.status}: ${r||t.statusText}`)}return await t.json()}var L={code:"Code",image:"Image"},_={anthropic:"Claude",workers_ai:"Workers AI",fal_custom:"Custom-trained",mock:"Mock"};function H(n){if(!n.base_model)return"";let e=n.training_method?` \xB7 ${s(n.training_method)}`:"";return`${s(n.base_model)}${e}`}function E(n){let e=n.owner?`@${s(n.owner.handle)}`:"",t=n.latest_price_tokens!==null?`${n.latest_price_tokens.toLocaleString()} tokens / run`:"unpublished";return` + +
+

${s(L[n.kind]||n.kind)} \xB7 ${s(_[n.provider]||n.provider)}

+

${s(n.title)}

+

${s(n.description||"No description yet.")}

+

${s(t)} \xB7 ${n.run_count} run${n.run_count===1?"":"s"}

+ ${e} +
+
`}function M(){return'

No models yet.

'}var p=class{constructor(){d(this,"cfg");d(this,"isAuthed",!1)}async mount(e){this.cfg=e;try{await c(`${e.apiBase}/v1/me`),this.isAuthed=!0}catch{this.isAuthed=!1}let t=e.rootEl.querySelector("#ga-models-mine-section");t&&t.classList.toggle("d-none",!this.isAuthed),await this.loadCatalogue(),this.isAuthed&&await this.loadMine(),this.attachEvents()}async loadCatalogue(e){let t=this.cfg.rootEl.querySelector("#ga-models-catalogue");if(t){t.innerHTML='
Loading\u2026
';try{let r=e?`?kind=${encodeURIComponent(e)}`:"",o=await c(`${this.cfg.apiBase}/v1/models${r}`);t.innerHTML=o.models.length?o.models.map(E).join(""):M()}catch(r){t.innerHTML=`
Failed to load: ${s(String(r))}
`}}}async loadMine(){let e=this.cfg.rootEl.querySelector("#ga-models-mine");if(e)try{let t=await c(`${this.cfg.apiBase}/v1/models/mine`);e.innerHTML=t.models.length?t.models.map(E).join(""):M()}catch(t){e.innerHTML=`
Failed to load: ${s(String(t))}
`}}attachEvents(){this.cfg.rootEl.querySelectorAll("[data-ga-kind-filter]").forEach(t=>{t.addEventListener("click",()=>{this.cfg.rootEl.querySelectorAll("[data-ga-kind-filter]").forEach(o=>o.classList.toggle("active",o===t));let r=t.dataset.gaKindFilter||"";this.loadCatalogue(r||void 0)})}),this.cfg.rootEl.querySelector("#ga-new-model-form")?.addEventListener("submit",async t=>{t.preventDefault();let r=this.cfg.rootEl.querySelector("#ga-new-model-error");r?.classList.add("d-none");let o=this.cfg.rootEl.querySelector("#ga-nm-title").value.trim(),a=this.cfg.rootEl.querySelector("#ga-nm-kind").value,l=this.cfg.rootEl.querySelector("#ga-nm-provider").value,u=this.cfg.rootEl.querySelector("#ga-nm-description").value.trim();try{let i=await c(`${this.cfg.apiBase}/v1/models`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({title:o,kind:a,provider:l,description:u||void 0,visibility:"private"})});window.location.href=`/models/detail/?slug=${encodeURIComponent(i.model.slug)}`}catch(i){r&&(r.textContent=`Couldn't create model: ${String(i)}`,r.classList.remove("d-none"))}})}},h=class{constructor(){d(this,"cfg");d(this,"slug","");d(this,"model",null);d(this,"versions",[]);d(this,"isOwner",!1)}async mount(e){this.cfg=e;let t=new URLSearchParams(window.location.search);if(this.slug=t.get("slug")||"",!this.slug){e.rootEl.innerHTML='

Bad URL \u2014 model pages look like /models/detail/?slug=your-model.

';return}let r=null;try{r=await c(`${e.apiBase}/v1/me`)}catch{r=null}try{let o=await c(`${e.apiBase}/v1/models/${encodeURIComponent(this.slug)}`);this.model=o.model,this.versions=o.versions}catch(o){e.rootEl.innerHTML=`

Model not found: ${s(String(o))}

`;return}this.isOwner=!!r&&!!this.model.owner&&r.user.handle===this.model.owner.handle,this.render(),this.attachEvents()}render(){let e=this.model,t=this.cfg.rootEl;t.querySelector("#ga-model-title").textContent=e.title,t.querySelector("#ga-model-desc").textContent=e.description||"No description yet.",t.querySelector("#ga-model-meta").textContent=`${L[e.kind]||e.kind} \xB7 ${_[e.provider]||e.provider} \xB7 ${e.visibility}`;let r=t.querySelector("#ga-model-versions");r&&(r.innerHTML=this.versions.length?this.versions.map(i=>` +
  • +
    + v${i.version} + ${i.price_tokens.toLocaleString()} tokens +
    +

    ${s(i.provider_model_id)}

    + ${H(i)} + ${i.dataset_note?`

    ${s(i.dataset_note)}

    `:""} +
  • `).join(""):'
  • No published versions yet.
  • '),t.querySelector("#ga-publish-version-section")?.classList.toggle("d-none",!this.isOwner);let a=t.querySelector("#ga-pv-provider-hint");a&&(a.textContent=e.provider==="fal_custom"?"This is a custom-trained model \u2014 base model, training method, and weights_ref are required.":e.provider==="anthropic"?"Provider model id, e.g. claude-opus-5.":"Provider model id from the Workers AI catalogue, e.g. @cf/black-forest-labs/flux-1-schnell."),t.querySelectorAll(".ga-fal-only").forEach(i=>i.classList.toggle("d-none",e.provider!=="fal_custom")),t.querySelectorAll(".ga-code-only").forEach(i=>i.classList.toggle("d-none",e.kind!=="code"));let l=this.versions[0],u=t.querySelector("#ga-render-section");if(u){u.classList.toggle("d-none",!l||e.status!=="active");let i=t.querySelector("#ga-render-price");i&&l&&(i.textContent=`${l.price_tokens.toLocaleString()} tokens`)}}async publishVersion(){let e=this.cfg.rootEl,t=e.querySelector("#ga-pv-error");t?.classList.add("d-none");let r=e.querySelector("#ga-pv-provider-model-id").value.trim(),o=parseInt(e.querySelector("#ga-pv-price").value,10),a={provider_model_id:r,price_tokens:o};this.model.provider==="fal_custom"?(a.training_method=e.querySelector("#ga-pv-training-method").value,a.base_model=e.querySelector("#ga-pv-base-model").value.trim(),a.dataset_note=e.querySelector("#ga-pv-dataset-note").value.trim(),a.weights_ref=e.querySelector("#ga-pv-weights-ref").value.trim()):this.model.kind==="code"&&(a.system_prompt=e.querySelector("#ga-pv-system-prompt")?.value.trim()||void 0);try{await c(`${this.cfg.apiBase}/v1/models/${encodeURIComponent(this.slug)}/versions`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}),window.location.reload()}catch(l){t&&(t.textContent=`Couldn't publish: ${String(l)}`,t.classList.remove("d-none"))}}async render_(e){let t=this.cfg.rootEl,r=t.querySelector("#ga-render-prompt").value.trim(),o=t.querySelector("#ga-render-result"),a=e.textContent;e.disabled=!0,e.textContent="Rendering\u2026",o.innerHTML="";try{let l=await c(`${this.cfg.apiBase}/v1/models/${encodeURIComponent(this.slug)}/render`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({prompt:r})});this.renderResult(l.job,o)}catch(l){o.innerHTML=`
    Render failed: ${s(String(l))}
    `}finally{e.disabled=!1,e.textContent=a}}renderResult(e,t){if(e.status==="failed"){t.innerHTML=`
    Render failed (${s(e.error_code||"unknown")}) \u2014 tokens refunded.
    `;return}let r=`

    seed ${s(e.seed)}

    `;if(e.output_kind==="code"&&e.output_text)t.innerHTML=`${r}
    ${s(e.output_text)}
    `;else if(e.output_kind==="image"&&e.output_key){let o=`${this.cfg.apiBase}/v1/captures/${e.output_key}`;t.innerHTML=`${r}Render result`}else t.innerHTML=`${r}

    Render succeeded with no returned output.

    `}attachEvents(){let e=this.cfg.rootEl;e.querySelector("#ga-publish-version-form")?.addEventListener("submit",t=>{t.preventDefault(),this.publishVersion()}),e.querySelector("#ga-render-btn")?.addEventListener("click",t=>{this.render_(t.currentTarget)})}},S={async mount(n){y({apiBase:n.apiBase,page:`models-${n.mode}`}),n.mode==="catalogue"?await new p().mount(n):await new h().mount(n)}};window.GAModels=S;var x=S;export{x as default}; +//# sourceMappingURL=ga-models.js.map diff --git a/assets/js/ga-models.js.map b/assets/js/ga-models.js.map new file mode 100644 index 0000000..3958018 --- /dev/null +++ b/assets/js/ga-models.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../workers/api/client/lib/clientErrors.ts", "../../workers/api/client/models.ts"], + "sourcesContent": ["// Window onerror / unhandledrejection \u2192 POST /v1/internal/client-error.\n// Per-page de-dupe and 10-report cap; the Worker rate-limits per IP\n// and forwards to Sentry via SENTRY_DSN_PUBLIC server-side.\n//\n// Why not @sentry/browser? Bundle size is the deciding factor:\n// @sentry/browser min+gz is ~25KB, which is larger than every\n// per-page bundle this app ships (galleries 18KB, studio 100KB,\n// dashboard 7KB). The proxy pattern below has equivalent delivery\n// (the worker uses ctx.waitUntil for the forward), preserves stack\n// fidelity (we POST the raw `Error.stack` string verbatim), and\n// keeps the public DSN out of the client where it would otherwise\n// be visible to scrapers. The trade-off is that we don't get the\n// SDK's auto-capture of breadcrumbs / fetch/console hooks; for v1\n// observability that's an acceptable gap given the size budget.\n\nconst SEEN = new Set();\nconst MAX_REPORTS_PER_PAGE = 10;\nlet installed = false;\nlet configured: { apiBase: string; page: string } | null = null;\n\nexport interface ClientErrorReporterConfig {\n apiBase: string;\n /** Short page identifier \u2014 \"studio\", \"dashboard\", \"galleries\" etc. */\n page: string;\n}\n\nexport function installClientErrorReporter(cfg: ClientErrorReporterConfig): void {\n if (installed) return;\n installed = true;\n configured = cfg;\n window.addEventListener(\"error\", (ev) => {\n const message =\n (ev.error && ev.error.message) || ev.message || \"unknown_error\";\n const stack =\n (ev.error && ev.error.stack) ||\n `${ev.filename ?? \"\"}:${ev.lineno ?? 0}:${ev.colno ?? 0}`;\n void report(message, stack);\n });\n window.addEventListener(\"unhandledrejection\", (ev) => {\n const reason = (ev as PromiseRejectionEvent).reason;\n const message =\n reason instanceof Error\n ? reason.message\n : typeof reason === \"string\"\n ? reason\n : \"unhandled_rejection\";\n const stack = reason instanceof Error ? reason.stack ?? \"\" : \"\";\n void report(message, stack);\n });\n}\n\n// PII scrub: strip query string and hash from any URL we forward\n// so signed-upload tokens, ?email=, ?invite=, fragment-encoded\n// session bits, etc. never leave the browser. Also caps length.\nfunction scrubUrl(raw: string): string {\n try {\n const u = new URL(raw, location.origin);\n return `${u.origin}${u.pathname}`.slice(0, 200);\n } catch {\n return raw.split(\"?\")[0].split(\"#\")[0].slice(0, 200);\n }\n}\n\nasync function report(message: string, stack: string): Promise {\n if (!configured) return;\n // Per-page de-dupe + cap so a hot-loop error doesn't DoS the\n // /v1/internal/client-error endpoint.\n if (SEEN.size >= MAX_REPORTS_PER_PAGE) return;\n const key = `${message}::${stack.slice(0, 80)}`;\n if (SEEN.has(key)) return;\n SEEN.add(key);\n\n try {\n await fetch(`${configured.apiBase}/v1/internal/client-error`, {\n method: \"POST\",\n credentials: \"include\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n message: String(message).slice(0, 500),\n stack: String(stack).slice(0, 4000),\n page: configured.page,\n url: scrubUrl(location.href),\n ts: Date.now(),\n }),\n keepalive: true,\n });\n } catch {\n // never escalate a reporter failure into another error event\n }\n}\n", "/**\n * /models/ \u2014 public catalogue + \"my models\" + publish flow.\n * /models/detail/?slug=X \u2014 one model: provenance, versions, publish a\n * new version (owner-only), and the render form (everyone, gated by\n * visibility/price).\n *\n * Two Jekyll pages share this module (query-string routed like\n * /p/?id=N and /t/?p=N&id=T) \u2014 `mount()` reads `cfg.mode` to pick\n * which one it's rendering into.\n */\nimport { installClientErrorReporter } from \"./lib/clientErrors\";\n\ninterface ModelsConfig {\n apiBase: string;\n rootEl: HTMLElement;\n mode: \"catalogue\" | \"detail\";\n}\n\ninterface Owner {\n handle: string;\n display_name: string | null;\n avatar_url: string | null;\n}\n\ninterface ModelSummary {\n id: number;\n slug: string;\n title: string;\n description: string | null;\n kind: string;\n provider: string;\n visibility: string;\n status: string;\n created_at: number;\n updated_at: number;\n latest_version: number | null;\n latest_price_tokens: number | null;\n run_count: number;\n owner?: Owner;\n}\n\ninterface ModelVersion {\n id: number;\n version: number;\n provider_model_id: string;\n system_prompt?: string;\n params_schema: unknown;\n price_tokens: number;\n training_method: string | null;\n base_model: string | null;\n dataset_note: string | null;\n weights_ref?: string;\n created_at: number;\n}\n\ninterface RenderJob {\n id: number;\n model_version_id: number;\n project_id: number | null;\n seed: string;\n params: Record | null;\n status: string;\n price_tokens: number;\n output_kind: string | null;\n output_text: string | null;\n output_key: string | null;\n output_hash: string | null;\n error_code: string | null;\n created_at: number;\n finished_at: number | null;\n}\n\nfunction escapeHtml(s: string): string {\n return s.replace(/[&<>\"']/g, (ch) => {\n switch (ch) {\n case \"&\": return \"&\";\n case \"<\": return \"<\";\n case \">\": return \">\";\n case '\"': return \""\";\n default: return \"'\";\n }\n });\n}\n\nasync function fetchJson(url: string, init?: RequestInit): Promise {\n const res = await fetch(url, { credentials: \"include\", ...init });\n if (!res.ok) {\n let detail = \"\";\n try { detail = JSON.stringify(await res.json()); } catch {}\n throw new Error(`${res.status}: ${detail || res.statusText}`);\n }\n return (await res.json()) as T;\n}\n\nconst KIND_LABELS: Record = { code: \"Code\", image: \"Image\" };\nconst PROVIDER_LABELS: Record = {\n anthropic: \"Claude\",\n workers_ai: \"Workers AI\",\n fal_custom: \"Custom-trained\",\n mock: \"Mock\",\n};\n\nfunction provenanceTag(v: Pick): string {\n if (!v.base_model) return \"\";\n const method = v.training_method ? ` \u00B7 ${escapeHtml(v.training_method)}` : \"\";\n return `${escapeHtml(v.base_model)}${method}`;\n}\n\nfunction renderModelCard(m: ModelSummary): string {\n const owner = m.owner\n ? `@${escapeHtml(m.owner.handle)}`\n : \"\";\n const price =\n m.latest_price_tokens !== null\n ? `${m.latest_price_tokens.toLocaleString()} tokens / run`\n : \"unpublished\";\n return `\n \n
    \n

    ${escapeHtml(KIND_LABELS[m.kind] || m.kind)} \u00B7 ${escapeHtml(PROVIDER_LABELS[m.provider] || m.provider)}

    \n

    ${escapeHtml(m.title)}

    \n

    ${escapeHtml(m.description || \"No description yet.\")}

    \n

    ${escapeHtml(price)} \u00B7 ${m.run_count} run${m.run_count === 1 ? \"\" : \"s\"}

    \n ${owner}\n
    \n
    `;\n}\n\nfunction renderEmptyModels(): string {\n return `

    No models yet.

    `;\n}\n\n// ---------------------------------------------------------------------------\n// Catalogue page\n// ---------------------------------------------------------------------------\n\nclass CataloguePage {\n private cfg!: ModelsConfig;\n private isAuthed = false;\n\n async mount(cfg: ModelsConfig): Promise {\n this.cfg = cfg;\n try {\n await fetchJson(`${cfg.apiBase}/v1/me`);\n this.isAuthed = true;\n } catch {\n this.isAuthed = false;\n }\n const mineSection = cfg.rootEl.querySelector(\"#ga-models-mine-section\");\n if (mineSection) mineSection.classList.toggle(\"d-none\", !this.isAuthed);\n\n await this.loadCatalogue();\n if (this.isAuthed) await this.loadMine();\n this.attachEvents();\n }\n\n private async loadCatalogue(kind?: string): Promise {\n const el = this.cfg.rootEl.querySelector(\"#ga-models-catalogue\");\n if (!el) return;\n el.innerHTML = `
    Loading\u2026
    `;\n try {\n const qs = kind ? `?kind=${encodeURIComponent(kind)}` : \"\";\n const data = await fetchJson<{ models: ModelSummary[] }>(`${this.cfg.apiBase}/v1/models${qs}`);\n el.innerHTML = data.models.length ? data.models.map(renderModelCard).join(\"\") : renderEmptyModels();\n } catch (err) {\n el.innerHTML = `
    Failed to load: ${escapeHtml(String(err))}
    `;\n }\n }\n\n private async loadMine(): Promise {\n const el = this.cfg.rootEl.querySelector(\"#ga-models-mine\");\n if (!el) return;\n try {\n const data = await fetchJson<{ models: ModelSummary[] }>(`${this.cfg.apiBase}/v1/models/mine`);\n el.innerHTML = data.models.length ? data.models.map(renderModelCard).join(\"\") : renderEmptyModels();\n } catch (err) {\n el.innerHTML = `
    Failed to load: ${escapeHtml(String(err))}
    `;\n }\n }\n\n private attachEvents(): void {\n this.cfg.rootEl.querySelectorAll(\"[data-ga-kind-filter]\").forEach((btn) => {\n btn.addEventListener(\"click\", () => {\n this.cfg.rootEl\n .querySelectorAll(\"[data-ga-kind-filter]\")\n .forEach((b) => b.classList.toggle(\"active\", b === btn));\n const kind = btn.dataset.gaKindFilter || \"\";\n void this.loadCatalogue(kind || undefined);\n });\n });\n\n const form = this.cfg.rootEl.querySelector(\"#ga-new-model-form\");\n form?.addEventListener(\"submit\", async (ev) => {\n ev.preventDefault();\n const errEl = this.cfg.rootEl.querySelector(\"#ga-new-model-error\");\n errEl?.classList.add(\"d-none\");\n const title = this.cfg.rootEl.querySelector(\"#ga-nm-title\")!.value.trim();\n const kind = this.cfg.rootEl.querySelector(\"#ga-nm-kind\")!.value;\n const provider = this.cfg.rootEl.querySelector(\"#ga-nm-provider\")!.value;\n const description = this.cfg.rootEl.querySelector(\"#ga-nm-description\")!.value.trim();\n try {\n const data = await fetchJson<{ model: ModelSummary }>(`${this.cfg.apiBase}/v1/models`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ title, kind, provider, description: description || undefined, visibility: \"private\" }),\n });\n window.location.href = `/models/detail/?slug=${encodeURIComponent(data.model.slug)}`;\n } catch (err) {\n if (errEl) {\n errEl.textContent = `Couldn't create model: ${String(err)}`;\n errEl.classList.remove(\"d-none\");\n }\n }\n });\n }\n}\n\n// ---------------------------------------------------------------------------\n// Detail page\n// ---------------------------------------------------------------------------\n\nclass DetailPage {\n private cfg!: ModelsConfig;\n private slug = \"\";\n private model: ModelSummary | null = null;\n private versions: ModelVersion[] = [];\n private isOwner = false;\n\n async mount(cfg: ModelsConfig): Promise {\n this.cfg = cfg;\n const params = new URLSearchParams(window.location.search);\n this.slug = params.get(\"slug\") || \"\";\n if (!this.slug) {\n cfg.rootEl.innerHTML = `

    Bad URL \u2014 model pages look like /models/detail/?slug=your-model.

    `;\n return;\n }\n\n let me: { user: { handle: string } } | null = null;\n try {\n me = await fetchJson(`${cfg.apiBase}/v1/me`);\n } catch {\n me = null;\n }\n\n try {\n const data = await fetchJson<{ model: ModelSummary; versions: ModelVersion[] }>(\n `${cfg.apiBase}/v1/models/${encodeURIComponent(this.slug)}`,\n );\n this.model = data.model;\n this.versions = data.versions;\n } catch (err) {\n cfg.rootEl.innerHTML = `

    Model not found: ${escapeHtml(String(err))}

    `;\n return;\n }\n\n this.isOwner = !!me && !!this.model.owner && me.user.handle === this.model.owner.handle;\n this.render();\n this.attachEvents();\n }\n\n private render(): void {\n const m = this.model!;\n const root = this.cfg.rootEl;\n root.querySelector(\"#ga-model-title\")!.textContent = m.title;\n root.querySelector(\"#ga-model-desc\")!.textContent = m.description || \"No description yet.\";\n root.querySelector(\"#ga-model-meta\")!.textContent =\n `${KIND_LABELS[m.kind] || m.kind} \u00B7 ${PROVIDER_LABELS[m.provider] || m.provider} \u00B7 ${m.visibility}`;\n\n const versionsEl = root.querySelector(\"#ga-model-versions\");\n if (versionsEl) {\n versionsEl.innerHTML = this.versions.length\n ? this.versions\n .map(\n (v) => `\n
  • \n
    \n v${v.version}\n ${v.price_tokens.toLocaleString()} tokens\n
    \n

    ${escapeHtml(v.provider_model_id)}

    \n ${provenanceTag(v)}\n ${v.dataset_note ? `

    ${escapeHtml(v.dataset_note)}

    ` : \"\"}\n
  • `,\n )\n .join(\"\")\n : `
  • No published versions yet.
  • `;\n }\n\n const publishSection = root.querySelector(\"#ga-publish-version-section\");\n publishSection?.classList.toggle(\"d-none\", !this.isOwner);\n const providerHint = root.querySelector(\"#ga-pv-provider-hint\");\n if (providerHint) {\n providerHint.textContent =\n m.provider === \"fal_custom\"\n ? \"This is a custom-trained model \u2014 base model, training method, and weights_ref are required.\"\n : m.provider === \"anthropic\"\n ? \"Provider model id, e.g. claude-opus-5.\"\n : \"Provider model id from the Workers AI catalogue, e.g. @cf/black-forest-labs/flux-1-schnell.\";\n }\n root.querySelectorAll(\".ga-fal-only\").forEach((el) =>\n el.classList.toggle(\"d-none\", m.provider !== \"fal_custom\"),\n );\n root.querySelectorAll(\".ga-code-only\").forEach((el) =>\n el.classList.toggle(\"d-none\", m.kind !== \"code\"),\n );\n\n const latest = this.versions[0];\n const renderSection = root.querySelector(\"#ga-render-section\");\n if (renderSection) {\n renderSection.classList.toggle(\"d-none\", !latest || m.status !== \"active\");\n const priceEl = root.querySelector(\"#ga-render-price\");\n if (priceEl && latest) priceEl.textContent = `${latest.price_tokens.toLocaleString()} tokens`;\n }\n }\n\n private async publishVersion(): Promise {\n const root = this.cfg.rootEl;\n const errEl = root.querySelector(\"#ga-pv-error\");\n errEl?.classList.add(\"d-none\");\n const providerModelId = root.querySelector(\"#ga-pv-provider-model-id\")!.value.trim();\n const priceTokens = parseInt(root.querySelector(\"#ga-pv-price\")!.value, 10);\n const body: Record = { provider_model_id: providerModelId, price_tokens: priceTokens };\n\n if (this.model!.provider === \"fal_custom\") {\n body.training_method = root.querySelector(\"#ga-pv-training-method\")!.value;\n body.base_model = root.querySelector(\"#ga-pv-base-model\")!.value.trim();\n body.dataset_note = root.querySelector(\"#ga-pv-dataset-note\")!.value.trim();\n body.weights_ref = root.querySelector(\"#ga-pv-weights-ref\")!.value.trim();\n } else if (this.model!.kind === \"code\") {\n body.system_prompt = root.querySelector(\"#ga-pv-system-prompt\")?.value.trim() || undefined;\n }\n\n try {\n await fetchJson(`${this.cfg.apiBase}/v1/models/${encodeURIComponent(this.slug)}/versions`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n });\n window.location.reload();\n } catch (err) {\n if (errEl) {\n errEl.textContent = `Couldn't publish: ${String(err)}`;\n errEl.classList.remove(\"d-none\");\n }\n }\n }\n\n private async render_(button: HTMLButtonElement): Promise {\n const root = this.cfg.rootEl;\n const prompt = root.querySelector(\"#ga-render-prompt\")!.value.trim();\n const resultEl = root.querySelector(\"#ga-render-result\")!;\n const original = button.textContent;\n button.disabled = true;\n button.textContent = \"Rendering\u2026\";\n resultEl.innerHTML = \"\";\n try {\n const data = await fetchJson<{ job: RenderJob }>(\n `${this.cfg.apiBase}/v1/models/${encodeURIComponent(this.slug)}/render`,\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ prompt }),\n },\n );\n this.renderResult(data.job, resultEl);\n } catch (err) {\n resultEl.innerHTML = `
    Render failed: ${escapeHtml(String(err))}
    `;\n } finally {\n button.disabled = false;\n button.textContent = original;\n }\n }\n\n private renderResult(job: RenderJob, el: HTMLElement): void {\n if (job.status === \"failed\") {\n el.innerHTML = `
    Render failed (${escapeHtml(job.error_code || \"unknown\")}) \u2014 tokens refunded.
    `;\n return;\n }\n const seedLine = `

    seed ${escapeHtml(job.seed)}

    `;\n if (job.output_kind === \"code\" && job.output_text) {\n el.innerHTML = `${seedLine}
    ${escapeHtml(job.output_text)}
    `;\n } else if (job.output_kind === \"image\" && job.output_key) {\n const src = `${this.cfg.apiBase}/v1/captures/${job.output_key}`;\n el.innerHTML = `${seedLine}\"Render`;\n } else {\n el.innerHTML = `${seedLine}

    Render succeeded with no returned output.

    `;\n }\n }\n\n private attachEvents(): void {\n const root = this.cfg.rootEl;\n root.querySelector(\"#ga-publish-version-form\")?.addEventListener(\"submit\", (ev) => {\n ev.preventDefault();\n void this.publishVersion();\n });\n root.querySelector(\"#ga-render-btn\")?.addEventListener(\"click\", (ev) => {\n void this.render_(ev.currentTarget as HTMLButtonElement);\n });\n }\n}\n\nconst GAModels = {\n async mount(cfg: ModelsConfig) {\n installClientErrorReporter({ apiBase: cfg.apiBase, page: `models-${cfg.mode}` });\n if (cfg.mode === \"catalogue\") await new CataloguePage().mount(cfg);\n else await new DetailPage().mount(cfg);\n },\n};\n\ndeclare global {\n interface Window {\n GAModels?: typeof GAModels;\n }\n}\n\nwindow.GAModels = GAModels;\nexport default GAModels;\n"], + "mappings": "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", + "names": ["SEEN", "MAX_REPORTS_PER_PAGE", "installed", "configured", "installClientErrorReporter", "cfg", "ev", "message", "stack", "report", "reason", "scrubUrl", "raw", "u", "key", "escapeHtml", "s", "ch", "fetchJson", "url", "init", "res", "detail", "KIND_LABELS", "PROVIDER_LABELS", "provenanceTag", "v", "method", "renderModelCard", "m", "owner", "price", "renderEmptyModels", "CataloguePage", "__publicField", "cfg", "mineSection", "kind", "el", "qs", "data", "err", "btn", "b", "ev", "errEl", "title", "provider", "description", "DetailPage", "params", "me", "root", "versionsEl", "providerHint", "latest", "renderSection", "priceEl", "providerModelId", "priceTokens", "body", "button", "prompt", "resultEl", "original", "job", "seedLine", "src", "GAModels", "installClientErrorReporter", "models_default"] +} diff --git a/assets/js/ga-wallet.js b/assets/js/ga-wallet.js new file mode 100644 index 0000000..0c3a892 --- /dev/null +++ b/assets/js/ga-wallet.js @@ -0,0 +1,80 @@ +var wd=Object.defineProperty;var Eb=(e,t,r)=>t in e?wd(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var R=(e,t)=>()=>(e&&(t=e(e=0)),t);var Ri=(e,t)=>{for(var r in t)wd(e,r,{get:t[r],enumerable:!0})};var Is=(e,t,r)=>Eb(e,typeof t!="symbol"?t+"":t,r);var vd,Ed=R(()=>{vd="1.2.3"});var ie,Vn=R(()=>{Ed();ie=class e extends Error{constructor(t,r={}){let n=r.cause instanceof e?r.cause.details:r.cause?.message?r.cause.message:r.details,o=r.cause instanceof e&&r.cause.docsPath||r.docsPath,s=[t||"An error occurred.","",...r.metaMessages?[...r.metaMessages,""]:[],...o?[`Docs: https://abitype.dev${o}`]:[],...n?[`Details: ${n}`]:[],`Version: abitype@${vd}`].join(` +`);super(s),Object.defineProperty(this,"details",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"docsPath",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"metaMessages",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"shortMessage",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"AbiTypeError"}),r.cause&&(this.cause=r.cause),this.details=n,this.docsPath=o,this.metaMessages=r.metaMessages,this.shortMessage=t}}});function Qe(e,t){return e.exec(t)?.groups}var Hu,Ru,Ci,Ss=R(()=>{Hu=/^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/,Ru=/^u?int(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/,Ci=/^\(.+?\).*?$/});function Ni(e){let t=e.type;if(Bd.test(e.type)&&"components"in e){t="(";let r=e.components.length;for(let o=0;o{Ss();Bd=/^tuple(?(\[(\d*)\])*)$/});function Yt(e){let t="",r=e.length;for(let n=0;n{Ad()});function un(e){return e.type==="function"?`function ${e.name}(${Yt(e.inputs)})${e.stateMutability&&e.stateMutability!=="nonpayable"?` ${e.stateMutability}`:""}${e.outputs?.length?` returns (${Yt(e.outputs)})`:""}`:e.type==="event"?`event ${e.name}(${Yt(e.inputs)})`:e.type==="error"?`error ${e.name}(${Yt(e.inputs)})`:e.type==="constructor"?`constructor(${Yt(e.inputs)})${e.stateMutability==="payable"?" payable":""}`:e.type==="fallback"?`fallback() external${e.stateMutability==="payable"?" payable":""}`:"receive() external payable"}var Id=R(()=>{Cu()});function Td(e){return Sd.test(e)}function Pd(e){return Qe(Sd,e)}function Hd(e){return kd.test(e)}function Rd(e){return Qe(kd,e)}function Nd(e){return Cd.test(e)}function $d(e){return Qe(Cd,e)}function Sr(e){return Od.test(e)}function Ud(e){return Qe(Od,e)}function Md(e){return Ld.test(e)}function _d(e){return Qe(Ld,e)}function Fd(e){return zd.test(e)}function jd(e){return Qe(zd,e)}function Dd(e){return Bb.test(e)}var Sd,kd,Cd,Od,Ld,zd,Bb,Nu,qd,$i,Wn=R(()=>{Ss();Sd=/^error (?[a-zA-Z$_][a-zA-Z0-9$_]*)\((?.*?)\)$/;kd=/^event (?[a-zA-Z$_][a-zA-Z0-9$_]*)\((?.*?)\)$/;Cd=/^function (?[a-zA-Z$_][a-zA-Z0-9$_]*)\((?.*?)\)(?: (?external|public{1}))?(?: (?pure|view|nonpayable|payable{1}))?(?: returns\s?\((?.*?)\))?$/;Od=/^struct (?[a-zA-Z$_][a-zA-Z0-9$_]*) \{(?.*?)\}$/;Ld=/^constructor\((?.*?)\)(?:\s(?payable{1}))?$/;zd=/^fallback\(\) external(?:\s(?payable{1}))?$/;Bb=/^receive\(\) external payable$/;Nu=new Set(["memory","indexed","storage","calldata"]),qd=new Set(["indexed"]),$i=new Set(["calldata","memory","storage"])});var Oi,Ui,Li,Mi=R(()=>{Vn();Oi=class extends ie{constructor({signature:t}){super("Failed to parse ABI item.",{details:`parseAbiItem(${JSON.stringify(t,null,2)})`,docsPath:"/api/human#parseabiitem-1"}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidAbiItemError"})}},Ui=class extends ie{constructor({type:t}){super("Unknown type.",{metaMessages:[`Type "${t}" is not a valid ABI type. Perhaps you forgot to include a struct signature?`]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"UnknownTypeError"})}},Li=class extends ie{constructor({type:t}){super("Unknown type.",{metaMessages:[`Type "${t}" is not a valid ABI type.`]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"UnknownSolidityTypeError"})}}});var _i,zi,Fi,ji,Di,qi,Gi=R(()=>{Vn();_i=class extends ie{constructor({params:t}){super("Failed to parse ABI parameters.",{details:`parseAbiParameters(${JSON.stringify(t,null,2)})`,docsPath:"/api/human#parseabiparameters-1"}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidAbiParametersError"})}},zi=class extends ie{constructor({param:t}){super("Invalid ABI parameter.",{details:t}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidParameterError"})}},Fi=class extends ie{constructor({param:t,name:r}){super("Invalid ABI parameter.",{details:t,metaMessages:[`"${r}" is a protected Solidity keyword. More info: https://docs.soliditylang.org/en/latest/cheatsheet.html`]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"SolidityProtectedKeywordError"})}},ji=class extends ie{constructor({param:t,type:r,modifier:n}){super("Invalid ABI parameter.",{details:t,metaMessages:[`Modifier "${n}" not allowed${r?` in "${r}" type`:""}.`]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidModifierError"})}},Di=class extends ie{constructor({param:t,type:r,modifier:n}){super("Invalid ABI parameter.",{details:t,metaMessages:[`Modifier "${n}" not allowed${r?` in "${r}" type`:""}.`,`Data location can only be specified for array, struct, or mapping types, but "${n}" was given.`]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidFunctionModifierError"})}},qi=class extends ie{constructor({abiParameter:t}){super("Invalid ABI parameter.",{details:JSON.stringify(t,null,2),metaMessages:["ABI parameter type is invalid."]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidAbiTypeParameterError"})}}});var Nt,Vi,Wi,$u=R(()=>{Vn();Nt=class extends ie{constructor({signature:t,type:r}){super(`Invalid ${r} signature.`,{details:t}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidSignatureError"})}},Vi=class extends ie{constructor({signature:t}){super("Unknown signature.",{details:t}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"UnknownSignatureError"})}},Wi=class extends ie{constructor({signature:t}){super("Invalid struct signature.",{details:t,metaMessages:["No properties exist."]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidStructSignatureError"})}}});var Zi,Gd=R(()=>{Vn();Zi=class extends ie{constructor({type:t}){super("Circular reference detected.",{metaMessages:[`Struct "${t}" is a circular reference.`]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"CircularReferenceError"})}}});var Ki,Vd=R(()=>{Vn();Ki=class extends ie{constructor({current:t,depth:r}){super("Unbalanced parentheses.",{metaMessages:[`"${t.trim()}" has too many ${r>0?"opening":"closing"} parentheses.`],details:`Depth "${r}"`}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidParenthesisError"})}}});function Wd(e,t,r){let n="";if(r)for(let o of Object.entries(r)){if(!o)continue;let s="";for(let i of o[1])s+=`[${i.type}${i.name?`:${i.name}`:""}]`;n+=`(${o[0]}{${s}})`}return t?`${t}:${e}${n}`:`${e}${n}`}var Yi,Zd=R(()=>{Yi=new Map([["address",{type:"address"}],["bool",{type:"bool"}],["bytes",{type:"bytes"}],["bytes32",{type:"bytes32"}],["int",{type:"int256"}],["int256",{type:"int256"}],["string",{type:"string"}],["uint",{type:"uint256"}],["uint8",{type:"uint8"}],["uint16",{type:"uint16"}],["uint24",{type:"uint24"}],["uint32",{type:"uint32"}],["uint64",{type:"uint64"}],["uint96",{type:"uint96"}],["uint112",{type:"uint112"}],["uint160",{type:"uint160"}],["uint192",{type:"uint192"}],["uint256",{type:"uint256"}],["address owner",{type:"address",name:"owner"}],["address to",{type:"address",name:"to"}],["bool approved",{type:"bool",name:"approved"}],["bytes _data",{type:"bytes",name:"_data"}],["bytes data",{type:"bytes",name:"data"}],["bytes signature",{type:"bytes",name:"signature"}],["bytes32 hash",{type:"bytes32",name:"hash"}],["bytes32 r",{type:"bytes32",name:"r"}],["bytes32 root",{type:"bytes32",name:"root"}],["bytes32 s",{type:"bytes32",name:"s"}],["string name",{type:"string",name:"name"}],["string symbol",{type:"string",name:"symbol"}],["string tokenURI",{type:"string",name:"tokenURI"}],["uint tokenId",{type:"uint256",name:"tokenId"}],["uint8 v",{type:"uint8",name:"v"}],["uint256 balance",{type:"uint256",name:"balance"}],["uint256 tokenId",{type:"uint256",name:"tokenId"}],["uint256 value",{type:"uint256",name:"value"}],["event:address indexed from",{type:"address",name:"from",indexed:!0}],["event:address indexed to",{type:"address",name:"to",indexed:!0}],["event:uint indexed tokenId",{type:"uint256",name:"tokenId",indexed:!0}],["event:uint256 indexed tokenId",{type:"uint256",name:"tokenId",indexed:!0}]])});function Ts(e,t={}){if(Nd(e))return Ab(e,t);if(Hd(e))return Ib(e,t);if(Td(e))return Sb(e,t);if(Md(e))return Tb(e,t);if(Fd(e))return Pb(e);if(Dd(e))return{type:"receive",stateMutability:"payable"};throw new Vi({signature:e})}function Ab(e,t={}){let r=$d(e);if(!r)throw new Nt({signature:e,type:"function"});let n=je(r.parameters),o=[],s=n.length;for(let a=0;a{Ss();Mi();Gi();$u();Vd();Zd();Wn();kb=/^(?[a-zA-Z$_][a-zA-Z0-9$_]*(?:\spayable)?)(?(?:\[\d*?\])+?)?(?:\s(?calldata|indexed|memory|storage{1}))?(?:\s(?[a-zA-Z$_][a-zA-Z0-9$_]*))?$/,Hb=/^\((?.+?)\)(?(?:\[\d*?\])+?)?(?:\s(?calldata|indexed|memory|storage{1}))?(?:\s(?[a-zA-Z$_][a-zA-Z0-9$_]*))?$/,Rb=/^u?int$/;Cb=/^(?:after|alias|anonymous|apply|auto|byte|calldata|case|catch|constant|copyof|default|defined|error|event|external|false|final|function|immutable|implements|in|indexed|inline|internal|let|mapping|match|memory|mutable|null|of|override|partial|private|promise|public|pure|reference|relocatable|return|returns|sizeof|static|storage|struct|super|supports|switch|this|true|try|typedef|typeof|var|view|virtual)$/});function Kn(e){let t={},r=e.length;for(let i=0;i{Ss();Mi();Gi();$u();Gd();Wn();Zn();Ob=/^(?[a-zA-Z$_][a-zA-Z0-9$_]*)(?(?:\[\d*?\])+?)?$/});function Ji(e){let t=Kn(e),r=[],n=e.length;for(let o=0;o{Wn();Xi();Zn()});function Qi(e){let t;if(typeof e=="string")t=Ts(e);else{let r=Kn(e),n=e.length;for(let o=0;o{Mi();Wn();Xi();Zn()});function ea(e){let t=[];if(typeof e=="string"){let r=je(e),n=r.length;for(let o=0;o{Gi();Wn();Xi();Zn();Zn()});var Ps=R(()=>{Id();Cu();Yd();Xd();Jd()});function me(e,{includeName:t=!1}={}){if(e.type!=="function"&&e.type!=="event"&&e.type!=="error")throw new ta(e.type);return`${e.name}(${ks(e.inputs,{includeName:t})})`}function ks(e,{includeName:t=!1}={}){return e?e.map(r=>Ub(r,{includeName:t})).join(t?", ":","):""}function Ub(e,{includeName:t}){return e.type.startsWith("tuple")?`(${ks(e.components,{includeName:t})})${e.type.slice(5)}`:e.type+(t&&e.name?` ${e.name}`:"")}var Xt=R(()=>{ae()});function ce(e,{strict:t=!0}={}){return!e||typeof e!="string"?!1:t?/^0x[0-9a-fA-F]*$/.test(e):e.startsWith("0x")}var vt=R(()=>{});function V(e){return ce(e,{strict:!1})?Math.ceil((e.length-2)/2):e.length}var ot=R(()=>{vt()});var Uu,el=R(()=>{Uu="2.48.8"});function tl(e,t){return t?.(e)?e:e&&typeof e=="object"&&"cause"in e&&e.cause!==void 0?tl(e.cause,t):t?null:e}var Lu,A,G=R(()=>{el();Lu={getDocsUrl:({docsBaseUrl:e,docsPath:t="",docsSlug:r})=>t?`${e??"https://viem.sh"}${t}${r?`#${r}`:""}`:void 0,version:`viem@${Uu}`},A=class e extends Error{constructor(t,r={}){let n=r.cause instanceof e?r.cause.details:r.cause?.message?r.cause.message:r.details,o=r.cause instanceof e&&r.cause.docsPath||r.docsPath,s=Lu.getDocsUrl?.({...r,docsPath:o}),i=[t||"An error occurred.","",...r.metaMessages?[...r.metaMessages,""]:[],...s?[`Docs: ${s}`]:[],...n?[`Details: ${n}`]:[],...Lu.version?[`Version: ${Lu.version}`]:[]].join(` +`);super(i,r.cause?{cause:r.cause}:void 0),Object.defineProperty(this,"details",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"docsPath",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"metaMessages",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"shortMessage",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"version",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"BaseError"}),this.details=n,this.docsPath=o,this.metaMessages=r.metaMessages,this.name=r.name??this.name,this.shortMessage=t,this.version=Uu}walk(t){return tl(this,t)}}});var ra,Hs,Yn,st,na,oa,sa,ia,Rs,Xn,aa,ca,Cs,Et,Jn,ua,fa,da,Jt,Tr,la,pa,Qn,ta,ae=R(()=>{Xt();ot();G();ra=class extends A{constructor({docsPath:t}){super(["A constructor was not found on the ABI.","Make sure you are using the correct ABI and that the constructor exists on it."].join(` +`),{docsPath:t,name:"AbiConstructorNotFoundError"})}},Hs=class extends A{constructor({docsPath:t}){super(["Constructor arguments were provided (`args`), but a constructor parameters (`inputs`) were not found on the ABI.","Make sure you are using the correct ABI, and that the `inputs` attribute on the constructor exists."].join(` +`),{docsPath:t,name:"AbiConstructorParamsNotFoundError"})}},Yn=class extends A{constructor({data:t,params:r,size:n}){super([`Data size of ${n} bytes is too small for given parameters.`].join(` +`),{metaMessages:[`Params: (${ks(r,{includeName:!0})})`,`Data: ${t} (${n} bytes)`],name:"AbiDecodingDataSizeTooSmallError"}),Object.defineProperty(this,"data",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"params",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"size",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.data=t,this.params=r,this.size=n}},st=class extends A{constructor({cause:t}={}){super('Cannot decode zero data ("0x") with ABI parameters.',{name:"AbiDecodingZeroDataError",cause:t})}},na=class extends A{constructor({expectedLength:t,givenLength:r,type:n}){super([`ABI encoding array length mismatch for type ${n}.`,`Expected length: ${t}`,`Given length: ${r}`].join(` +`),{name:"AbiEncodingArrayLengthMismatchError"})}},oa=class extends A{constructor({expectedSize:t,value:r}){super(`Size of bytes "${r}" (bytes${V(r)}) does not match expected size (bytes${t}).`,{name:"AbiEncodingBytesSizeMismatchError"})}},sa=class extends A{constructor({expectedLength:t,givenLength:r}){super(["ABI encoding params/values length mismatch.",`Expected length (params): ${t}`,`Given length (values): ${r}`].join(` +`),{name:"AbiEncodingLengthMismatchError"})}},ia=class extends A{constructor(t,{docsPath:r}){super([`Arguments (\`args\`) were provided to "${t}", but "${t}" on the ABI does not contain any parameters (\`inputs\`).`,"Cannot encode error result without knowing what the parameter types are.","Make sure you are using the correct ABI and that the inputs exist on it."].join(` +`),{docsPath:r,name:"AbiErrorInputsNotFoundError"})}},Rs=class extends A{constructor(t,{docsPath:r}={}){super([`Error ${t?`"${t}" `:""}not found on ABI.`,"Make sure you are using the correct ABI and that the error exists on it."].join(` +`),{docsPath:r,name:"AbiErrorNotFoundError"})}},Xn=class extends A{constructor(t,{docsPath:r,cause:n}){super([`Encoded error signature "${t}" not found on ABI.`,"Make sure you are using the correct ABI and that the error exists on it.",`You can look up the decoded signature here: https://4byte.sourcify.dev/?q=${t}.`].join(` +`),{docsPath:r,name:"AbiErrorSignatureNotFoundError",cause:n}),Object.defineProperty(this,"signature",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.signature=t}},aa=class extends A{constructor({docsPath:t}){super("Cannot extract event signature from empty topics.",{docsPath:t,name:"AbiEventSignatureEmptyTopicsError"})}},ca=class extends A{constructor(t,{docsPath:r}){super([`Encoded event signature "${t}" not found on ABI.`,"Make sure you are using the correct ABI and that the event exists on it.",`You can look up the signature here: https://4byte.sourcify.dev/?q=${t}.`].join(` +`),{docsPath:r,name:"AbiEventSignatureNotFoundError"})}},Cs=class extends A{constructor(t,{docsPath:r}={}){super([`Event ${t?`"${t}" `:""}not found on ABI.`,"Make sure you are using the correct ABI and that the event exists on it."].join(` +`),{docsPath:r,name:"AbiEventNotFoundError"})}},Et=class extends A{constructor(t,{docsPath:r}={}){super([`Function ${t?`"${t}" `:""}not found on ABI.`,"Make sure you are using the correct ABI and that the function exists on it."].join(` +`),{docsPath:r,name:"AbiFunctionNotFoundError"})}},Jn=class extends A{constructor(t,{docsPath:r}){super([`Function "${t}" does not contain any \`outputs\` on ABI.`,"Cannot decode function result without knowing what the parameter types are.","Make sure you are using the correct ABI and that the function exists on it."].join(` +`),{docsPath:r,name:"AbiFunctionOutputsNotFoundError"})}},ua=class extends A{constructor(t,{docsPath:r}){super([`Encoded function signature "${t}" not found on ABI.`,"Make sure you are using the correct ABI and that the function exists on it.",`You can look up the signature here: https://4byte.sourcify.dev/?q=${t}.`].join(` +`),{docsPath:r,name:"AbiFunctionSignatureNotFoundError"})}},fa=class extends A{constructor(t,r){super("Found ambiguous types in overloaded ABI items.",{metaMessages:[`\`${t.type}\` in \`${me(t.abiItem)}\`, and`,`\`${r.type}\` in \`${me(r.abiItem)}\``,"","These types encode differently and cannot be distinguished at runtime.","Remove one of the ambiguous items in the ABI."],name:"AbiItemAmbiguityError"})}},da=class extends A{constructor({expectedSize:t,givenSize:r}){super(`Expected bytes${t}, got bytes${r}.`,{name:"BytesSizeMismatchError"})}},Jt=class extends A{constructor({abiItem:t,data:r,params:n,size:o}){super([`Data size of ${o} bytes is too small for non-indexed event parameters.`].join(` +`),{metaMessages:[`Params: (${ks(n,{includeName:!0})})`,`Data: ${r} (${o} bytes)`],name:"DecodeLogDataMismatch"}),Object.defineProperty(this,"abiItem",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"data",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"params",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"size",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.abiItem=t,this.data=r,this.params=n,this.size=o}},Tr=class extends A{constructor({abiItem:t,param:r}){super([`Expected a topic for indexed event parameter${r.name?` "${r.name}"`:""} on event "${me(t,{includeName:!0})}".`].join(` +`),{name:"DecodeLogTopicsMismatch"}),Object.defineProperty(this,"abiItem",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.abiItem=t}},la=class extends A{constructor(t,{docsPath:r}){super([`Type "${t}" is not a valid encoding type.`,"Please provide a valid ABI type."].join(` +`),{docsPath:r,name:"InvalidAbiEncodingType"})}},pa=class extends A{constructor(t,{docsPath:r}){super([`Type "${t}" is not a valid decoding type.`,"Please provide a valid ABI type."].join(` +`),{docsPath:r,name:"InvalidAbiDecodingType"})}},Qn=class extends A{constructor(t){super([`Value "${t}" is not a valid array.`].join(` +`),{name:"InvalidArrayError"})}},ta=class extends A{constructor(t){super([`"${t}" is not a valid definition type.`,'Valid types: "function", "event", "error"'].join(` +`),{name:"InvalidDefinitionTypeError"})}}});var Ns,$s,Os,ha=R(()=>{G();Ns=class extends A{constructor({offset:t,position:r,size:n}){super(`Slice ${r==="start"?"starting":"ending"} at offset "${t}" is out-of-bounds (size: ${n}).`,{name:"SliceOffsetOutOfBoundsError"})}},$s=class extends A{constructor({size:t,targetSize:r,type:n}){super(`${n.charAt(0).toUpperCase()}${n.slice(1).toLowerCase()} size (${t}) exceeds padding size (${r}).`,{name:"SizeExceedsPaddingSizeError"})}},Os=class extends A{constructor({size:t,targetSize:r,type:n}){super(`${n.charAt(0).toUpperCase()}${n.slice(1).toLowerCase()} is expected to be ${r} ${n} long, but is ${t} ${n} long.`,{name:"InvalidBytesLengthError"})}}});function Pr(e,{dir:t,size:r=32}={}){return typeof e=="string"?Qt(e,{dir:t,size:r}):Lb(e,{dir:t,size:r})}function Qt(e,{dir:t,size:r=32}={}){if(r===null)return e;let n=e.replace("0x","");if(n.length>r*2)throw new $s({size:Math.ceil(n.length/2),targetSize:r,type:"hex"});return`0x${n[t==="right"?"padEnd":"padStart"](r*2,"0")}`}function Lb(e,{dir:t,size:r=32}={}){if(r===null)return e;if(e.length>r)throw new $s({size:e.length,targetSize:r,type:"bytes"});let n=new Uint8Array(r);for(let o=0;o{ha()});var kr,xa,ya,ga,Us=R(()=>{G();kr=class extends A{constructor({max:t,min:r,signed:n,size:o,value:s}){super(`Number "${s}" is not in safe ${o?`${o*8}-bit ${n?"signed":"unsigned"} `:""}integer range ${t?`(${r} to ${t})`:`(above ${r})`}`,{name:"IntegerOutOfRangeError"})}},xa=class extends A{constructor(t){super(`Bytes value "${t}" is not a valid boolean. The bytes array must contain a single byte of either a 0 or 1 value.`,{name:"InvalidBytesBooleanError"})}},ya=class extends A{constructor(t){super(`Hex value "${t}" is not a valid boolean. The hex value must be "0x0" (false) or "0x1" (true).`,{name:"InvalidHexBooleanError"})}},ga=class extends A{constructor({givenSize:t,maxSize:r}){super(`Size cannot exceed ${r} bytes. Given size: ${t} bytes.`,{name:"SizeOverflowError"})}}});function Bt(e,{dir:t="left"}={}){let r=typeof e=="string"?e.replace("0x",""):e,n=0;for(let o=0;o{});function De(e,{size:t}){if(V(e)>t)throw new ga({givenSize:V(e),maxSize:t})}function Ee(e,t={}){let{signed:r}=t;t.size&&De(e,{size:t.size});let n=BigInt(e);if(!r)return n;let o=(e.length-2)/2,s=(1n<{Us();ot();Ls()});function Te(e,t={}){return typeof e=="number"||typeof e=="bigint"?_(e,t):typeof e=="string"?eo(e,t):typeof e=="boolean"?_u(e,t):Y(e,t)}function _u(e,t={}){let r=`0x${Number(e)}`;return typeof t.size=="number"?(De(r,{size:t.size}),Pr(r,{size:t.size})):r}function Y(e,t={}){let r="";for(let o=0;os||o{Us();ba();Le();Mb=Array.from({length:256},(e,t)=>t.toString(16).padStart(2,"0"));_b=new TextEncoder});function it(e,t={}){return typeof e=="number"||typeof e=="bigint"?jb(e,t):typeof e=="boolean"?Fb(e,t):ce(e)?Be(e,t):At(e,t)}function Fb(e,t={}){let r=new Uint8Array(1);return r[0]=Number(e),typeof t.size=="number"?(De(r,{size:t.size}),Pr(r,{size:t.size})):r}function rl(e){if(e>=er.zero&&e<=er.nine)return e-er.zero;if(e>=er.A&&e<=er.F)return e-(er.A-10);if(e>=er.a&&e<=er.f)return e-(er.a-10)}function Be(e,t={}){let r=e;t.size&&(De(r,{size:t.size}),r=Pr(r,{dir:"right",size:t.size}));let n=r.slice(2);n.length%2&&(n=`0${n}`);let o=n.length/2,s=new Uint8Array(o);for(let i=0,a=0;i{G();vt();ba();Le();q();zb=new TextEncoder;er={zero:48,nine:57,A:65,F:70,a:97,f:102}});function Db(e,t=!1){return t?{h:Number(e&wa),l:Number(e>>nl&wa)}:{h:Number(e>>nl&wa)|0,l:Number(e&wa)|0}}function ol(e,t=!1){let r=e.length,n=new Uint32Array(r),o=new Uint32Array(r);for(let s=0;s{wa=BigInt(4294967295),nl=BigInt(32);sl=(e,t,r)=>e<>>32-r,il=(e,t,r)=>t<>>32-r,al=(e,t,r)=>t<>>64-r,cl=(e,t,r)=>e<>>64-r});var fn,fl=R(()=>{fn=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0});function qb(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name==="Uint8Array"}function dn(e){if(!Number.isSafeInteger(e)||e<0)throw new Error("positive integer expected, got "+e)}function $t(e,...t){if(!qb(e))throw new Error("Uint8Array expected");if(t.length>0&&!t.includes(e.length))throw new Error("Uint8Array expected of length "+t+", got length="+e.length)}function dl(e){if(typeof e!="function"||typeof e.create!="function")throw new Error("Hash should be wrapped by utils.createHasher");dn(e.outputLen),dn(e.blockLen)}function tr(e,t=!0){if(e.destroyed)throw new Error("Hash instance has been destroyed");if(t&&e.finished)throw new Error("Hash#digest() has already been called")}function va(e,t){$t(e);let r=t.outputLen;if(e.length>>t}function Vb(e){return e<<24&4278190080|e<<8&16711680|e>>>8&65280|e>>>24&255}function Wb(e){for(let t=0;te().update(ln(n)).digest(),r=e();return t.outputLen=r.outputLen,t.blockLen=r.blockLen,t.create=()=>e(),t}function Aa(e=32){if(fn&&typeof fn.getRandomValues=="function")return fn.getRandomValues(new Uint8Array(e));if(fn&&typeof fn.randomBytes=="function")return Uint8Array.from(fn.randomBytes(e));throw new Error("crypto.getRandomValues must be defined")}var Gb,zu,Hr,Rr=R(()=>{fl();Gb=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;zu=Gb?e=>e:Wb;Hr=class{}});function rx(e,t=24){let r=new Uint32Array(10);for(let n=24-t;n<24;n++){for(let i=0;i<10;i++)r[i]=e[i]^e[i+10]^e[i+20]^e[i+30]^e[i+40];for(let i=0;i<10;i+=2){let a=(i+8)%10,c=(i+2)%10,u=r[c],f=r[c+1],d=ml(u,f,1)^r[a],l=hl(u,f,1)^r[a+1];for(let m=0;m<50;m+=10)e[i+m]^=d,e[i+m+1]^=l}let o=e[2],s=e[3];for(let i=0;i<24;i++){let a=xl[i],c=ml(o,s,a),u=hl(o,s,a),f=bl[i];o=e[f],s=e[f+1],e[f]=c,e[f+1]=u}for(let i=0;i<50;i+=10){for(let a=0;a<10;a++)r[a]=e[i+a];for(let a=0;a<10;a++)e[i+a]^=~r[(a+2)%10]&r[(a+4)%10]}e[0]^=ex[n],e[1]^=tx[n]}Ot(r)}var Kb,Ms,Yb,Xb,Jb,Qb,bl,xl,yl,gl,ex,tx,ml,hl,Fu,nx,wl,vl=R(()=>{ul();Rr();Kb=BigInt(0),Ms=BigInt(1),Yb=BigInt(2),Xb=BigInt(7),Jb=BigInt(256),Qb=BigInt(113),bl=[],xl=[],yl=[];for(let e=0,t=Ms,r=1,n=0;e<24;e++){[r,n]=[n,(2*r+3*n)%5],bl.push(2*(5*n+r)),xl.push((e+1)*(e+2)/2%64);let o=Kb;for(let s=0;s<7;s++)t=(t<>Xb)*Qb)%Jb,t&Yb&&(o^=Ms<<(Ms<r>32?al(e,t,r):sl(e,t,r),hl=(e,t,r)=>r>32?cl(e,t,r):il(e,t,r);Fu=class e extends Hr{constructor(t,r,n,o=!1,s=24){if(super(),this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,this.enableXOF=!1,this.blockLen=t,this.suffix=r,this.outputLen=n,this.enableXOF=o,this.rounds=s,dn(n),!(0=n&&this.keccak();let i=Math.min(n-this.posOut,s-o);t.set(r.subarray(this.posOut,this.posOut+i),o),this.posOut+=i,o+=i}return t}xofInto(t){if(!this.enableXOF)throw new Error("XOF is not possible for this instance");return this.writeInto(t)}xof(t){return dn(t),this.xofInto(new Uint8Array(t))}digestInto(t){if(va(t,this),this.finished)throw new Error("digest() was already called");return this.writeInto(t),this.destroy(),t}digest(){return this.digestInto(new Uint8Array(this.outputLen))}destroy(){this.destroyed=!0,Ot(this.state)}_cloneInto(t){let{blockLen:r,suffix:n,outputLen:o,rounds:s,enableXOF:i}=this;return t||(t=new e(r,n,o,i,s)),t.state32.set(this.state32),t.pos=this.pos,t.posOut=this.posOut,t.finished=this.finished,t.rounds=s,t.suffix=n,t.outputLen=o,t.enableXOF=i,t.destroyed=this.destroyed,t}},nx=(e,t,r)=>Ba(()=>new Fu(t,e,r)),wl=nx(1,136,256/8)});function J(e,t){let r=t||"hex",n=wl(ce(e,{strict:!1})?it(e):e);return r==="bytes"?n:Te(n)}var St=R(()=>{vl();vt();Ae();q()});function El(e){return ox(e)}var ox,Bl=R(()=>{Ae();St();ox=e=>J(it(e))});function Al(e){let t=!0,r="",n=0,o="",s=!1;for(let i=0;i{G()});var Sl,Tl=R(()=>{Ps();Il();Sl=e=>{let t=typeof e=="string"?e:un(e);return Al(t)}});function Ia(e){return El(Sl(e))}var ju=R(()=>{Bl();Tl()});var Cr,_s=R(()=>{ju();Cr=Ia});var Pe,pn=R(()=>{G();Pe=class extends A{constructor({address:t}){super(`Address "${t}" is invalid.`,{metaMessages:["- Address must be a hex value of 20 bytes (40 hex characters).","- Address must match its checksum counterpart."],name:"InvalidAddressError"})}}});var Ut,zs=R(()=>{Ut=class extends Map{constructor(t){super(),Object.defineProperty(this,"maxSize",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.maxSize=t}get(t){let r=super.get(t);return super.has(t)&&(super.delete(t),super.set(t,r)),r}set(t,r){if(super.has(t)&&super.delete(t),super.set(t,r),this.maxSize&&this.size>this.maxSize){let n=super.keys().next().value;n!==void 0&&super.delete(n)}return this}}});function Nr(e,t){if(Du.has(`${e}.${t}`))return Du.get(`${e}.${t}`);let r=t?`${t}${e.toLowerCase()}`:e.substring(2).toLowerCase(),n=J(At(r),"bytes"),o=(t?r.substring(`${t}0x`.length):r).split("");for(let i=0;i<40;i+=2)n[i>>1]>>4>=8&&o[i]&&(o[i]=o[i].toUpperCase()),(n[i>>1]&15)>=8&&o[i+1]&&(o[i+1]=o[i+1].toUpperCase());let s=`0x${o.join("")}`;return Du.set(`${e}.${t}`,s),s}function Tt(e,t){if(!de(e,{strict:!1}))throw new Pe({address:e});return Nr(e,t)}var Du,$r=R(()=>{pn();Ae();St();zs();rr();Du=new Ut(8192)});function de(e,t){let{strict:r=!0}=t??{},n=`${e}.${r}`;if(qu.has(n))return qu.get(n);let o=sx.test(e)?e.toLowerCase()===e?!0:r?Nr(e)===e:!0:!1;return qu.set(n,o),o}var sx,qu,rr=R(()=>{zs();$r();sx=/^0x[a-fA-F0-9]{40}$/,qu=new Ut(8192)});function Ie(e){return typeof e[0]=="string"?Pt(e):ix(e)}function ix(e){let t=0;for(let o of e)t+=o.length;let r=new Uint8Array(t),n=0;for(let o of e)r.set(o,n),n+=o.length;return r}function Pt(e){return`0x${e.reduce((t,r)=>t+r.replace("0x",""),"")}`}var at=R(()=>{});function ct(e,t,r,{strict:n}={}){return ce(e,{strict:!1})?ax(e,t,r,{strict:n}):Gu(e,t,r,{strict:n})}function Pl(e,t){if(typeof t=="number"&&t>0&&t>V(e)-1)throw new Ns({offset:t,position:"start",size:V(e)})}function kl(e,t,r){if(typeof t=="number"&&typeof r=="number"&&V(e)!==r-t)throw new Ns({offset:r,position:"end",size:V(e)})}function Gu(e,t,r,{strict:n}={}){Pl(e,t);let o=e.slice(t,r);return n&&kl(o,t,r),o}function ax(e,t,r,{strict:n}={}){Pl(e,t);let o=`0x${e.replace("0x","").slice((t??0)*2,(r??e.length)*2)}`;return n&&kl(o,t,r),o}var mn=R(()=>{ha();vt();ot()});var Hl,Sa,Vu=R(()=>{Hl=/^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/,Sa=/^(u?int)(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/});function Me(e,t){if(e.length!==t.length)throw new sa({expectedLength:e.length,givenLength:t.length});let r=cx({params:e,values:t}),n=Zu(r);return n.length===0?"0x":n}function cx({params:e,values:t}){let r=[];for(let n=0;n0?Ie([a,i]):a}}if(o)return{dynamic:!0,encoded:i}}return{dynamic:!1,encoded:Ie(s.map(({encoded:i})=>i))}}function dx(e,{param:t}){let[,r]=t.type.split("bytes"),n=V(e);if(!r){let o=e;return n%32!==0&&(o=Qt(o,{dir:"right",size:Math.ceil((e.length-2)/2/32)*32})),{dynamic:!0,encoded:Ie([Qt(_(n,{size:32})),o])}}if(n!==Number.parseInt(r,10))throw new oa({expectedSize:Number.parseInt(r,10),value:e});return{dynamic:!1,encoded:Qt(e,{dir:"right"})}}function lx(e){if(typeof e!="boolean")throw new A(`Invalid boolean value: "${e}" (type: ${typeof e}). Expected: \`true\` or \`false\`.`);return{dynamic:!1,encoded:Qt(_u(e))}}function px(e,{signed:t,size:r=256}){if(typeof r=="number"){let n=2n**(BigInt(r)-(t?1n:0n))-1n,o=t?-n-1n:0n;if(e>n||eo))}}function Ta(e){let t=e.match(/^(.*)\[(\d+)?\]$/);return t?[t[2]?Number(t[2]):null,t[1]]:void 0}var nr=R(()=>{ae();pn();G();Us();rr();at();ba();ot();mn();q();Vu()});var Lt,to=R(()=>{mn();ju();Lt=e=>ct(Ia(e),0,4)});function qe(e){let{abi:t,args:r=[],name:n}=e,o=ce(n,{strict:!1}),s=t.filter(a=>o?a.type==="function"?Lt(a)===n:a.type==="event"?Cr(a)===n:!1:"name"in a&&a.name===n);if(s.length===0)return;if(s.length===1)return s[0];let i;for(let a of s){if(!("inputs"in a))continue;if(!r||r.length===0){if(!a.inputs||a.inputs.length===0)return a;continue}if(!a.inputs||a.inputs.length===0||a.inputs.length!==r.length)continue;if(r.every((u,f)=>{let d="inputs"in a&&a.inputs[f];return d?Ku(u,d):!1})){if(i&&"inputs"in i&&i.inputs){let u=Rl(a.inputs,i.inputs,r);if(u)throw new fa({abiItem:a,type:u[0]},{abiItem:i,type:u[1]})}i=a}}return i||s[0]}function Ku(e,t){let r=typeof e,n=t.type;switch(n){case"address":return de(e,{strict:!1});case"bool":return r==="boolean";case"function":return r==="string";case"string":return r==="string";default:return n==="tuple"&&"components"in t?Object.values(t.components).every((o,s)=>r==="object"&&Ku(Object.values(e)[s],o)):/^u?int(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/.test(n)?r==="number"||r==="bigint":/^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/.test(n)?r==="string"||e instanceof Uint8Array:/[a-z]+[1-9]{0,3}(\[[0-9]{0,}\])+$/.test(n)?Array.isArray(e)&&e.every(o=>Ku(o,{...t,type:n.replace(/(\[[0-9]{0,}\])$/,"")})):!1}}function Rl(e,t,r){for(let n in e){let o=e[n],s=t[n];if(o.type==="tuple"&&s.type==="tuple"&&"components"in o&&"components"in s)return Rl(o.components,s.components,r[n]);let i=[o.type,s.type];if(i.includes("address")&&i.includes("bytes20")?!0:i.includes("address")&&i.includes("string")?de(r[n],{strict:!1}):i.includes("address")&&i.includes("bytes")?de(r[n],{strict:!1}):!1)return i}}var Or=R(()=>{ae();vt();rr();_s();to()});function ee(e){return typeof e=="string"?{address:e,type:"json-rpc"}:e}var et=R(()=>{});function Ol(e){let{abi:t,args:r,functionName:n}=e,o=t[0];if(n){let s=qe({abi:t,args:r,name:n});if(!s)throw new Et(n,{docsPath:$l});o=s}if(o.type!=="function")throw new Et(void 0,{docsPath:$l});return{abi:[o],functionName:Lt(me(o))}}var $l,Ul=R(()=>{ae();to();Xt();Or();$l="/docs/contract/encodeFunctionData"});function ne(e){let{args:t}=e,{abi:r,functionName:n}=e.abi.length===1&&e.functionName?.startsWith("0x")?e:Ol(e),o=r[0],s=n,i="inputs"in o&&o.inputs?Me(o.inputs,t??[]):void 0;return Pt([s,i??"0x"])}var ut=R(()=>{at();nr();Ul()});var Ll,ka,Ml,Ha=R(()=>{Ll={1:"An `assert` condition failed.",17:"Arithmetic operation resulted in underflow or overflow.",18:"Division or modulo by zero (e.g. `5 / 0` or `23 % 0`).",33:"Attempted to convert to an invalid type.",34:"Attempted to access a storage byte array that is incorrectly encoded.",49:"Performed `.pop()` on an empty array",50:"Array index is out of bounds.",65:"Allocated too much memory or created an array which is too large.",81:"Attempted to call a zero-initialized variable of internal function type."},ka={inputs:[{name:"message",type:"string"}],name:"Error",type:"error"},Ml={inputs:[{name:"reason",type:"uint256"}],name:"Panic",type:"error"}});var Fs,ro,Ra,Yu=R(()=>{G();Fs=class extends A{constructor({offset:t}){super(`Offset \`${t}\` cannot be negative.`,{name:"NegativeOffsetError"})}},ro=class extends A{constructor({length:t,position:r}){super(`Position \`${r}\` is out of bounds (\`0 < position < ${t}\`).`,{name:"PositionOutOfBoundsError"})}},Ra=class extends A{constructor({count:t,limit:r}){super(`Recursive read limit of \`${r}\` exceeded (recursive read count: \`${t}\`).`,{name:"RecursiveReadLimitExceededError"})}}});function no(e,{recursiveReadLimit:t=8192}={}){let r=Object.create(bx);return r.bytes=e,r.dataView=new DataView(e.buffer??e,e.byteOffset,e.byteLength),r.positionReadCount=new Map,r.recursiveReadLimit=t,r}var bx,Ca=R(()=>{Yu();bx={bytes:new Uint8Array,dataView:new DataView(new ArrayBuffer(0)),position:0,positionReadCount:new Map,recursiveReadCount:0,recursiveReadLimit:Number.POSITIVE_INFINITY,assertReadLimit(){if(this.recursiveReadCount>=this.recursiveReadLimit)throw new Ra({count:this.recursiveReadCount+1,limit:this.recursiveReadLimit})},assertPosition(e){if(e<0||e>this.bytes.length-1)throw new ro({length:this.bytes.length,position:e})},decrementPosition(e){if(e<0)throw new Fs({offset:e});let t=this.position-e;this.assertPosition(t),this.position=t},getReadCount(e){return this.positionReadCount.get(e||this.position)||0},incrementPosition(e){if(e<0)throw new Fs({offset:e});let t=this.position+e;this.assertPosition(t),this.position=t},inspectByte(e){let t=e??this.position;return this.assertPosition(t),this.bytes[t]},inspectBytes(e,t){let r=t??this.position;return this.assertPosition(r+e-1),this.bytes.subarray(r,r+e)},inspectUint8(e){let t=e??this.position;return this.assertPosition(t),this.bytes[t]},inspectUint16(e){let t=e??this.position;return this.assertPosition(t+1),this.dataView.getUint16(t)},inspectUint24(e){let t=e??this.position;return this.assertPosition(t+2),(this.dataView.getUint16(t)<<8)+this.dataView.getUint8(t+2)},inspectUint32(e){let t=e??this.position;return this.assertPosition(t+3),this.dataView.getUint32(t)},pushByte(e){this.assertPosition(this.position),this.bytes[this.position]=e,this.position++},pushBytes(e){this.assertPosition(this.position+e.length-1),this.bytes.set(e,this.position),this.position+=e.length},pushUint8(e){this.assertPosition(this.position),this.bytes[this.position]=e,this.position++},pushUint16(e){this.assertPosition(this.position+1),this.dataView.setUint16(this.position,e),this.position+=2},pushUint24(e){this.assertPosition(this.position+2),this.dataView.setUint16(this.position,e>>8),this.dataView.setUint8(this.position+2,e&255),this.position+=3},pushUint32(e){this.assertPosition(this.position+3),this.dataView.setUint32(this.position,e),this.position+=4},readByte(){this.assertReadLimit(),this._touch();let e=this.inspectByte();return this.position++,e},readBytes(e,t){this.assertReadLimit(),this._touch();let r=this.inspectBytes(e);return this.position+=t??e,r},readUint8(){this.assertReadLimit(),this._touch();let e=this.inspectUint8();return this.position+=1,e},readUint16(){this.assertReadLimit(),this._touch();let e=this.inspectUint16();return this.position+=2,e},readUint24(){this.assertReadLimit(),this._touch();let e=this.inspectUint24();return this.position+=3,e},readUint32(){this.assertReadLimit(),this._touch();let e=this.inspectUint32();return this.position+=4,e},get remaining(){return this.bytes.length-this.position},setPosition(e){let t=this.position;return this.assertPosition(e),this.position=e,()=>this.position=t},_touch(){if(this.recursiveReadLimit===Number.POSITIVE_INFINITY)return;let e=this.getReadCount();this.positionReadCount.set(this.position,e+1),e>0&&this.recursiveReadCount++}}});function _l(e,t={}){typeof t.size<"u"&&De(e,{size:t.size});let r=Y(e,t);return Ee(r,t)}function zl(e,t={}){let r=e;if(typeof t.size<"u"&&(De(r,{size:t.size}),r=Bt(r)),r.length>1||r[0]>1)throw new xa(r);return!!r[0]}function _t(e,t={}){typeof t.size<"u"&&De(e,{size:t.size});let r=Y(e,t);return be(r,t)}function Fl(e,t={}){let r=e;return typeof t.size<"u"&&(De(r,{size:t.size}),r=Bt(r,{dir:"right"})),new TextDecoder().decode(r)}var jl=R(()=>{Us();Ls();Le();q()});function or(e,t){let r=typeof t=="string"?Be(t):t,n=no(r);if(V(r)===0&&e.length>0)throw new st;if(V(t)&&V(t)<32)throw new Yn({data:typeof t=="string"?t:Y(t),params:e,size:V(t)});let o=0,s=[];for(let i=0;i48?_l(o,{signed:r}):_t(o,{signed:r}),32]}function Ex(e,t,{staticPosition:r}){let n=t.components.length===0||t.components.some(({name:i})=>!i),o=n?[]:{},s=0;if(js(t)){let i=_t(e.readBytes(Xu)),a=r+i;for(let c=0;c{ae();$r();Ca();ot();mn();Ls();jl();Ae();q();nr();Dl=32,Xu=32});function Na(e){let{abi:t,data:r,cause:n}=e,o=ct(r,0,4);if(o==="0x")throw new st({cause:n});let i=[...t||[],ka,Ml].find(a=>a.type==="error"&&o===Lt(me(a)));if(!i)throw new Xn(o,{docsPath:"/docs/contract/decodeErrorResult",cause:n});return{abiItem:i,args:"inputs"in i&&i.inputs&&i.inputs.length>0?or(i.inputs,ct(r,4)):void 0,errorName:i.name}}var Ju=R(()=>{Ha();ae();mn();to();Ds();Xt()});var W,Ge=R(()=>{W=(e,t,r)=>JSON.stringify(e,(n,o)=>{let s=typeof o=="bigint"?o.toString():o;return typeof t=="function"?t(n,s):s},r)});function Qu({abiItem:e,args:t,includeFunctionName:r=!0,includeName:n=!1}){if("name"in e&&"inputs"in e&&e.inputs)return`${r?e.name:""}(${e.inputs.map((o,s)=>`${n&&o.name?`${o.name}: `:""}${typeof t[s]=="object"?W(t[s]):t[s]}`).join(", ")})`}var ql=R(()=>{Ge()});var Gl,Vl,ef=R(()=>{Gl={gwei:9,wei:18},Vl={ether:-9,wei:9}});function $a(e,t){let r=e.toString(),n=r.startsWith("-");n&&(r=r.slice(1)),r=r.padStart(t,"0");let[o,s]=[r.slice(0,r.length-t),r.slice(r.length-t)];return s=s.replace(/(0+)$/,""),`${n?"-":""}${o||"0"}${s?`.${s}`:""}`}var tf=R(()=>{});function so(e,t="wei"){return $a(e,Gl[t])}var Oa=R(()=>{ef();tf()});function he(e,t="wei"){return $a(e,Vl[t])}var io=R(()=>{ef();tf()});function Wl(e){return e.reduce((t,{slot:r,value:n})=>`${t} ${r}: ${n} +`,"")}function Zl(e){return e.reduce((t,{address:r,...n})=>{let o=`${t} ${r}: +`;return n.nonce&&(o+=` nonce: ${n.nonce} +`),n.balance&&(o+=` balance: ${n.balance} +`),n.code&&(o+=` code: ${n.code} +`),n.state&&(o+=` state: +`,o+=Wl(n.state)),n.stateDiff&&(o+=` stateDiff: +`,o+=Wl(n.stateDiff)),o},` State Override: +`).slice(0,-1)}var Ua,La,rf=R(()=>{G();Ua=class extends A{constructor({address:t}){super(`State for account "${t}" is set multiple times.`,{name:"AccountStateConflictError"})}},La=class extends A{constructor(){super("state and stateDiff are set on the same account.",{name:"StateAssignmentConflictError"})}}});function hn(e){let t=Object.entries(e).map(([n,o])=>o===void 0||o===!1?null:[n,o]).filter(Boolean),r=t.reduce((n,[o])=>Math.max(n,o.length),0);return t.map(([n,o])=>` ${`${n}:`.padEnd(r+1)} ${o}`).join(` +`)}var Ma,_a,ao,co,za,Fa,sr=R(()=>{Oa();io();G();Ma=class extends A{constructor({transaction:t}){super("Cannot infer a transaction type from provided transaction.",{metaMessages:["Provided Transaction:","{",hn(t),"}","","To infer the type, either provide:","- a `type` to the Transaction, or","- an EIP-1559 Transaction with `maxFeePerGas`, or","- an EIP-2930 Transaction with `gasPrice` & `accessList`, or","- an EIP-4844 Transaction with `blobs`, `blobVersionedHashes`, `sidecars`, or","- an EIP-7702 Transaction with `authorizationList`, or","- a Legacy Transaction with `gasPrice`"],name:"InvalidSerializableTransactionError"})}},_a=class extends A{constructor(t,{account:r,docsPath:n,chain:o,data:s,gas:i,gasPrice:a,maxFeePerGas:c,maxPriorityFeePerGas:u,nonce:f,to:d,value:l}){let m=hn({chain:o&&`${o?.name} (id: ${o?.id})`,from:r?.address,to:d,value:typeof l<"u"&&`${so(l)} ${o?.nativeCurrency?.symbol||"ETH"}`,data:s,gas:i,gasPrice:typeof a<"u"&&`${he(a)} gwei`,maxFeePerGas:typeof c<"u"&&`${he(c)} gwei`,maxPriorityFeePerGas:typeof u<"u"&&`${he(u)} gwei`,nonce:f});super(t.shortMessage,{cause:t,docsPath:n,metaMessages:[...t.metaMessages?[...t.metaMessages," "]:[],"Request Arguments:",m].filter(Boolean),name:"TransactionExecutionError"}),Object.defineProperty(this,"cause",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.cause=t}},ao=class extends A{constructor({blockHash:t,blockNumber:r,blockTag:n,hash:o,index:s}){let i="Transaction";n&&s!==void 0&&(i=`Transaction at block time "${n}" at index "${s}"`),t&&s!==void 0&&(i=`Transaction at block hash "${t}" at index "${s}"`),r&&s!==void 0&&(i=`Transaction at block number "${r}" at index "${s}"`),o&&(i=`Transaction with hash "${o}"`),super(`${i} could not be found.`,{name:"TransactionNotFoundError"})}},co=class extends A{constructor({hash:t}){super(`Transaction receipt with hash "${t}" could not be found. The Transaction may not be processed on a block yet.`,{name:"TransactionReceiptNotFoundError"})}},za=class extends A{constructor({receipt:t}){super(`Transaction with hash "${t.transactionHash}" reverted.`,{metaMessages:['The receipt marked the transaction as "reverted". This could mean that the function on the contract you are trying to call threw an error.'," ","You can attempt to extract the revert reason by:","- calling the `simulateContract` or `simulateCalls` Action with the `abi` and `functionName` of the contract","- using the `call` Action with raw `data`"],name:"TransactionReceiptRevertedError"}),Object.defineProperty(this,"receipt",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.receipt=t}},Fa=class extends A{constructor({hash:t}){super(`Timed out while waiting for transaction with hash "${t}" to be confirmed.`,{name:"WaitForTransactionReceiptTimeoutError"})}}});var Kl,bn,ja=R(()=>{Kl=e=>e,bn=e=>{try{let t=new URL(e);return!t.username&&!t.password?e:(t.username="",t.password="",t.toString())}catch{return e}}});var uo,fo,xn,Da,qa,zt,Lr=R(()=>{et();Ha();Ju();Xt();ql();Or();Oa();io();ae();G();rf();sr();ja();uo=class extends A{constructor(t,{account:r,docsPath:n,chain:o,data:s,gas:i,gasPrice:a,maxFeePerGas:c,maxPriorityFeePerGas:u,nonce:f,to:d,value:l,stateOverride:m}){let b=r?ee(r):void 0,h=hn({from:b?.address,to:d,value:typeof l<"u"&&`${so(l)} ${o?.nativeCurrency?.symbol||"ETH"}`,data:s,gas:i,gasPrice:typeof a<"u"&&`${he(a)} gwei`,maxFeePerGas:typeof c<"u"&&`${he(c)} gwei`,maxPriorityFeePerGas:typeof u<"u"&&`${he(u)} gwei`,nonce:f});m&&(h+=` +${Zl(m)}`),super(t.shortMessage,{cause:t,docsPath:n,metaMessages:[...t.metaMessages?[...t.metaMessages," "]:[],"Raw Call Arguments:",h].filter(Boolean),name:"CallExecutionError"}),Object.defineProperty(this,"cause",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.cause=t}},fo=class extends A{constructor(t,{abi:r,args:n,contractAddress:o,docsPath:s,functionName:i,sender:a}){let c=qe({abi:r,args:n,name:i}),u=c?Qu({abiItem:c,args:n,includeFunctionName:!1,includeName:!1}):void 0,f=c?me(c,{includeName:!0}):void 0,d=hn({address:o&&Kl(o),function:f,args:u&&u!=="()"&&`${[...Array(i?.length??0).keys()].map(()=>" ").join("")}${u}`,sender:a});super(t.shortMessage||`An unknown error occurred while executing the contract function "${i}".`,{cause:t,docsPath:s,metaMessages:[...t.metaMessages?[...t.metaMessages," "]:[],d&&"Contract Call:",d].filter(Boolean),name:"ContractFunctionExecutionError"}),Object.defineProperty(this,"abi",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"args",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"cause",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"contractAddress",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"formattedArgs",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"functionName",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"sender",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.abi=r,this.args=n,this.cause=t,this.contractAddress=o,this.functionName=i,this.sender=a}},xn=class extends A{constructor({abi:t,data:r,functionName:n,message:o,cause:s}){let i,a,c,u;if(r&&r!=="0x")try{a=Na({abi:t,data:r,cause:s});let{abiItem:d,errorName:l,args:m}=a;if(l==="Error")u=m[0];else if(l==="Panic"){let[b]=m;u=Ll[b]}else{let b=d?me(d,{includeName:!0}):void 0,h=d&&m?Qu({abiItem:d,args:m,includeFunctionName:!1,includeName:!1}):void 0;c=[b?`Error: ${b}`:"",h&&h!=="()"?` ${[...Array(l?.length??0).keys()].map(()=>" ").join("")}${h}`:""]}}catch(d){i=d}else o&&(u=o);let f;i instanceof Xn&&(f=i.signature,c=[`Unable to decode signature "${f}" as it was not found on the provided ABI.`,"Make sure you are using the correct ABI and that the error exists on it.",`You can look up the decoded signature here: https://4byte.sourcify.dev/?q=${f}.`]),super(u&&u!=="execution reverted"||f?[`The contract function "${n}" reverted with the following ${f?"signature":"reason"}:`,u||f].join(` +`):`The contract function "${n}" reverted.`,{cause:i??s,metaMessages:c,name:"ContractFunctionRevertedError"}),Object.defineProperty(this,"data",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"raw",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"reason",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"signature",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.data=a,this.raw=r,this.reason=u,this.signature=f}},Da=class extends A{constructor({functionName:t,cause:r}){super(`The contract function "${t}" returned no data ("0x").`,{metaMessages:["This could be due to any of the following:",` - The contract does not have the function "${t}",`," - The parameters passed to the contract function may be invalid, or"," - The address is not a contract."],name:"ContractFunctionZeroDataError",cause:r})}},qa=class extends A{constructor({factory:t}){super(`Deployment for counterfactual contract call failed${t?` for factory "${t}".`:""}`,{metaMessages:["Please ensure:","- The `factory` is a valid contract deployment factory (ie. Create2 Factory, ERC-4337 Factory, etc).","- The `factoryData` is a valid encoded function call for contract deployment function on the factory."],name:"CounterfactualDeploymentFailedError"})}},zt=class extends A{constructor({data:t,message:r}){super(r||"",{name:"RawContractError"}),Object.defineProperty(this,"code",{enumerable:!0,configurable:!0,writable:!0,value:3}),Object.defineProperty(this,"data",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.data=t}}});var ft,Mr,qs,yn=R(()=>{Ge();G();ja();ft=class extends A{constructor({body:t,cause:r,details:n,headers:o,status:s,url:i}){super("HTTP request failed.",{cause:r,details:n,metaMessages:[s&&`Status: ${s}`,`URL: ${bn(i)}`,t&&`Request body: ${W(t)}`].filter(Boolean),name:"HttpRequestError"}),Object.defineProperty(this,"body",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"headers",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"status",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"url",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.body=t,this.headers=o,this.status=s,this.url=i}},Mr=class extends A{constructor({body:t,error:r,url:n}){super("RPC Request failed.",{cause:r,details:r.message,metaMessages:[`URL: ${bn(n)}`,`Request body: ${W(t)}`],name:"RpcRequestError"}),Object.defineProperty(this,"code",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"data",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"url",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.code=r.code,this.data=r.data,this.url=n}},qs=class extends A{constructor({body:t,url:r}){super("The request took too long to respond.",{details:"The request timed out.",metaMessages:[`URL: ${bn(r)}`,`Request body: ${W(t)}`],name:"TimeoutError"}),Object.defineProperty(this,"url",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.url=r}}});var Ax,ke,He,lo,po,mo,ho,ir,dt,bo,xo,yo,_r,gn,go,wn,wo,vo,Eo,Bo,Ao,Io,So,To,Po,ko,Ho,Ro,Co,Ga,Gs=R(()=>{G();yn();Ax=-1,ke=class extends A{constructor(t,{code:r,docsPath:n,metaMessages:o,name:s,shortMessage:i}){super(i,{cause:t,docsPath:n,metaMessages:o||t?.metaMessages,name:s||"RpcError"}),Object.defineProperty(this,"code",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.name=s||t.name,this.code=t instanceof Mr?t.code:r??Ax}},He=class extends ke{constructor(t,r){super(t,r),Object.defineProperty(this,"data",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.data=r.data}},lo=class e extends ke{constructor(t){super(t,{code:e.code,name:"ParseRpcError",shortMessage:"Invalid JSON was received by the server. An error occurred on the server while parsing the JSON text."})}};Object.defineProperty(lo,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32700});po=class e extends ke{constructor(t){super(t,{code:e.code,name:"InvalidRequestRpcError",shortMessage:"JSON is not a valid request object."})}};Object.defineProperty(po,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32600});mo=class e extends ke{constructor(t,{method:r}={}){super(t,{code:e.code,name:"MethodNotFoundRpcError",shortMessage:`The method${r?` "${r}"`:""} does not exist / is not available.`})}};Object.defineProperty(mo,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32601});ho=class e extends ke{constructor(t){super(t,{code:e.code,name:"InvalidParamsRpcError",shortMessage:["Invalid parameters were provided to the RPC method.","Double check you have provided the correct parameters."].join(` +`)})}};Object.defineProperty(ho,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32602});ir=class e extends ke{constructor(t){super(t,{code:e.code,name:"InternalRpcError",shortMessage:"An internal error was received."})}};Object.defineProperty(ir,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32603});dt=class e extends ke{constructor(t){super(t,{code:e.code,name:"InvalidInputRpcError",shortMessage:["Missing or invalid parameters.","Double check you have provided the correct parameters."].join(` +`)})}};Object.defineProperty(dt,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32e3});bo=class e extends ke{constructor(t){super(t,{code:e.code,name:"ResourceNotFoundRpcError",shortMessage:"Requested resource not found."}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"ResourceNotFoundRpcError"})}};Object.defineProperty(bo,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32001});xo=class e extends ke{constructor(t){super(t,{code:e.code,name:"ResourceUnavailableRpcError",shortMessage:"Requested resource not available."})}};Object.defineProperty(xo,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32002});yo=class e extends ke{constructor(t){super(t,{code:e.code,name:"TransactionRejectedRpcError",shortMessage:"Transaction creation failed."})}};Object.defineProperty(yo,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32003});_r=class e extends ke{constructor(t,{method:r}={}){super(t,{code:e.code,name:"MethodNotSupportedRpcError",shortMessage:`Method${r?` "${r}"`:""} is not supported.`})}};Object.defineProperty(_r,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32004});gn=class e extends ke{constructor(t){super(t,{code:e.code,name:"LimitExceededRpcError",shortMessage:"Request exceeds defined limit."})}};Object.defineProperty(gn,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32005});go=class e extends ke{constructor(t){super(t,{code:e.code,name:"JsonRpcVersionUnsupportedError",shortMessage:"Version of JSON-RPC protocol is not supported."})}};Object.defineProperty(go,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32006});wn=class e extends He{constructor(t){super(t,{code:e.code,name:"UserRejectedRequestError",shortMessage:"User rejected the request."})}};Object.defineProperty(wn,"code",{enumerable:!0,configurable:!0,writable:!0,value:4001});wo=class e extends He{constructor(t){super(t,{code:e.code,name:"UnauthorizedProviderError",shortMessage:"The requested method and/or account has not been authorized by the user."})}};Object.defineProperty(wo,"code",{enumerable:!0,configurable:!0,writable:!0,value:4100});vo=class e extends He{constructor(t,{method:r}={}){super(t,{code:e.code,name:"UnsupportedProviderMethodError",shortMessage:`The Provider does not support the requested method${r?` " ${r}"`:""}.`})}};Object.defineProperty(vo,"code",{enumerable:!0,configurable:!0,writable:!0,value:4200});Eo=class e extends He{constructor(t){super(t,{code:e.code,name:"ProviderDisconnectedError",shortMessage:"The Provider is disconnected from all chains."})}};Object.defineProperty(Eo,"code",{enumerable:!0,configurable:!0,writable:!0,value:4900});Bo=class e extends He{constructor(t){super(t,{code:e.code,name:"ChainDisconnectedError",shortMessage:"The Provider is not connected to the requested chain."})}};Object.defineProperty(Bo,"code",{enumerable:!0,configurable:!0,writable:!0,value:4901});Ao=class e extends He{constructor(t){super(t,{code:e.code,name:"SwitchChainError",shortMessage:"An error occurred when attempting to switch chain."})}};Object.defineProperty(Ao,"code",{enumerable:!0,configurable:!0,writable:!0,value:4902});Io=class e extends He{constructor(t){super(t,{code:e.code,name:"UnsupportedNonOptionalCapabilityError",shortMessage:"This Wallet does not support a capability that was not marked as optional."})}};Object.defineProperty(Io,"code",{enumerable:!0,configurable:!0,writable:!0,value:5700});So=class e extends He{constructor(t){super(t,{code:e.code,name:"UnsupportedChainIdError",shortMessage:"This Wallet does not support the requested chain ID."})}};Object.defineProperty(So,"code",{enumerable:!0,configurable:!0,writable:!0,value:5710});To=class e extends He{constructor(t){super(t,{code:e.code,name:"DuplicateIdError",shortMessage:"There is already a bundle submitted with this ID."})}};Object.defineProperty(To,"code",{enumerable:!0,configurable:!0,writable:!0,value:5720});Po=class e extends He{constructor(t){super(t,{code:e.code,name:"UnknownBundleIdError",shortMessage:"This bundle id is unknown / has not been submitted"})}};Object.defineProperty(Po,"code",{enumerable:!0,configurable:!0,writable:!0,value:5730});ko=class e extends He{constructor(t){super(t,{code:e.code,name:"BundleTooLargeError",shortMessage:"The call bundle is too large for the Wallet to process."})}};Object.defineProperty(ko,"code",{enumerable:!0,configurable:!0,writable:!0,value:5740});Ho=class e extends He{constructor(t){super(t,{code:e.code,name:"AtomicReadyWalletRejectedUpgradeError",shortMessage:"The Wallet can support atomicity after an upgrade, but the user rejected the upgrade."})}};Object.defineProperty(Ho,"code",{enumerable:!0,configurable:!0,writable:!0,value:5750});Ro=class e extends He{constructor(t){super(t,{code:e.code,name:"AtomicityNotSupportedError",shortMessage:"The wallet does not support atomic execution but the request requires it."})}};Object.defineProperty(Ro,"code",{enumerable:!0,configurable:!0,writable:!0,value:5760});Co=class e extends He{constructor(t){super(t,{code:e.code,name:"WalletConnectSessionSettlementError",shortMessage:"WalletConnect session settlement failed."})}};Object.defineProperty(Co,"code",{enumerable:!0,configurable:!0,writable:!0,value:7e3});Ga=class extends ke{constructor(t){super(t,{name:"UnknownRpcError",shortMessage:"An unknown RPC error occurred."})}}});function Sx(e,t,r,n){if(typeof e.setBigUint64=="function")return e.setBigUint64(t,r,n);let o=BigInt(32),s=BigInt(4294967295),i=Number(r>>o&s),a=Number(r&s),c=n?4:0,u=n?0:4;e.setUint32(t+c,i,n),e.setUint32(t+u,a,n)}function Xl(e,t,r){return e&t^~e&r}function Jl(e,t,r){return e&t^e&r^t&r}var Va,ar,Ql=R(()=>{Rr();Va=class extends Hr{constructor(t,r,n,o){super(),this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.blockLen=t,this.outputLen=r,this.padOffset=n,this.isLE=o,this.buffer=new Uint8Array(t),this.view=Ea(this.buffer)}update(t){tr(this),t=ln(t),$t(t);let{view:r,buffer:n,blockLen:o}=this,s=t.length;for(let i=0;io-i&&(this.process(n,0),i=0);for(let d=i;df.length)throw new Error("_sha2: outputLen bigger than state");for(let d=0;d{Ql();Rr();Tx=Uint32Array.from([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),zr=new Uint32Array(64),Wa=class extends Va{constructor(t=32){super(64,t,8,!1),this.A=ar[0]|0,this.B=ar[1]|0,this.C=ar[2]|0,this.D=ar[3]|0,this.E=ar[4]|0,this.F=ar[5]|0,this.G=ar[6]|0,this.H=ar[7]|0}get(){let{A:t,B:r,C:n,D:o,E:s,F:i,G:a,H:c}=this;return[t,r,n,o,s,i,a,c]}set(t,r,n,o,s,i,a,c){this.A=t|0,this.B=r|0,this.C=n|0,this.D=o|0,this.E=s|0,this.F=i|0,this.G=a|0,this.H=c|0}process(t,r){for(let d=0;d<16;d++,r+=4)zr[d]=t.getUint32(r,!1);for(let d=16;d<64;d++){let l=zr[d-15],m=zr[d-2],b=It(l,7)^It(l,18)^l>>>3,h=It(m,17)^It(m,19)^m>>>10;zr[d]=h+zr[d-7]+b+zr[d-16]|0}let{A:n,B:o,C:s,D:i,E:a,F:c,G:u,H:f}=this;for(let d=0;d<64;d++){let l=It(a,6)^It(a,11)^It(a,25),m=f+l+Xl(a,c,u)+Tx[d]+zr[d]|0,h=(It(n,2)^It(n,13)^It(n,22))+Jl(n,o,s)|0;f=u,u=c,c=a,a=i+m|0,i=s,s=o,o=n,n=m+h|0}n=n+this.A|0,o=o+this.B|0,s=s+this.C|0,i=i+this.D|0,a=a+this.E|0,c=c+this.F|0,u=u+this.G|0,f=f+this.H|0,this.set(n,o,s,i,a,c,u,f)}roundClean(){Ot(zr)}destroy(){this.set(0,0,0,0,0,0,0,0),Ot(this.buffer)}},vn=Ba(()=>new Wa)});var Za,of,ep=R(()=>{Rr();Za=class extends Hr{constructor(t,r){super(),this.finished=!1,this.destroyed=!1,dl(t);let n=ln(r);if(this.iHash=t.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let o=this.blockLen,s=new Uint8Array(o);s.set(n.length>o?t.create().update(n).digest():n);for(let i=0;inew Za(e,t).update(r).digest();of.create=(e,t)=>new Za(e,t)});function No(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name==="Uint8Array"}function ur(e){if(!No(e))throw new Error("Uint8Array expected")}function $o(e,t){if(typeof t!="boolean")throw new Error(e+" boolean expected, got "+t)}function Vs(e){let t=e.toString(16);return t.length&1?"0"+t:t}function np(e){if(typeof e!="string")throw new Error("hex string expected, got "+typeof e);return e===""?uf:BigInt("0x"+e)}function Oo(e){if(ur(e),op)return e.toHex();let t="";for(let r=0;r=cr._0&&e<=cr._9)return e-cr._0;if(e>=cr.A&&e<=cr.F)return e-(cr.A-10);if(e>=cr.a&&e<=cr.f)return e-(cr.a-10)}function Ws(e){if(typeof e!="string")throw new Error("hex string expected, got "+typeof e);if(op)return Uint8Array.fromHex(e);let t=e.length,r=t/2;if(t%2)throw new Error("hex string expected, got unpadded hex of length "+t);let n=new Uint8Array(r);for(let o=0,s=0;ouf;e>>=cf,t+=1);return t}function ip(e,t,r){if(typeof e!="number"||e<2)throw new Error("hashLen must be a number");if(typeof t!="number"||t<2)throw new Error("qByteLen must be a number");if(typeof r!="function")throw new Error("hmacFn must be a function");let n=af(e),o=af(e),s=0,i=()=>{n.fill(1),o.fill(0),s=0},a=(...d)=>r(o,n,...d),c=(d=af(0))=>{o=a(rp([0]),d),n=a(),d.length!==0&&(o=a(rp([1]),d),n=a())},u=()=>{if(s++>=1e3)throw new Error("drbg: tried 1000 values");let d=0,l=[];for(;d{i(),c(d);let m;for(;!(m=l(u()));)c();return i(),m}}function dr(e,t,r={}){let n=(o,s,i)=>{let a=kx[s];if(typeof a!="function")throw new Error("invalid validator function");let c=e[o];if(!(i&&c===void 0)&&!a(c,e))throw new Error("param "+String(o)+" is invalid. Expected "+s+", got "+c)};for(let[o,s]of Object.entries(t))n(o,s,!1);for(let[o,s]of Object.entries(r))n(o,s,!0);return e}function lf(e){let t=new WeakMap;return(r,...n)=>{let o=t.get(r);if(o!==void 0)return o;let s=e(r,...n);return t.set(r,s),s}}var uf,cf,op,Px,cr,sf,Bn,af,rp,kx,Uo=R(()=>{uf=BigInt(0),cf=BigInt(1);op=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",Px=Array.from({length:256},(e,t)=>t.toString(16).padStart(2,"0"));cr={_0:48,_9:57,A:65,F:70,a:97,f:102};sf=e=>typeof e=="bigint"&&uf<=e;Bn=e=>(cf<new Uint8Array(e),rp=e=>Uint8Array.from(e);kx={bigint:e=>typeof e=="bigint",function:e=>typeof e=="function",boolean:e=>typeof e=="boolean",string:e=>typeof e=="string",stringOrUint8Array:e=>typeof e=="string"||No(e),isSafeInteger:e=>Number.isSafeInteger(e),array:e=>Array.isArray(e),field:(e,t)=>t.Fp.isValid(e),hash:e=>typeof e=="function"&&Number.isSafeInteger(e.outputLen)}});function ue(e,t){let r=e%t;return r>=ze?r:t+r}function tt(e,t,r){let n=e;for(;t-- >ze;)n*=n,n%=r;return n}function Ya(e,t){if(e===ze)throw new Error("invert: expected non-zero number");if(t<=ze)throw new Error("invert: expected positive modulus, got "+t);let r=ue(e,t),n=t,o=ze,s=Re,i=Re,a=ze;for(;r!==ze;){let u=n/r,f=n%r,d=o-i*u,l=s-a*u;n=r,r=f,o=i,s=a,i=d,a=l}if(n!==Re)throw new Error("invert: does not exist");return ue(o,t)}function dp(e,t){let r=(e.ORDER+Re)/cp,n=e.pow(t,r);if(!e.eql(e.sqr(n),t))throw new Error("Cannot find square root");return n}function Rx(e,t){let r=(e.ORDER-up)/fp,n=e.mul(t,An),o=e.pow(n,r),s=e.mul(t,o),i=e.mul(e.mul(s,An),o),a=e.mul(s,e.sub(i,e.ONE));if(!e.eql(e.sqr(a),t))throw new Error("Cannot find square root");return a}function Cx(e){if(e1e3)throw new Error("Cannot find square root: probably non-prime P");if(r===1)return dp;let s=o.pow(n,t),i=(t+Re)/An;return function(c,u){if(c.is0(u))return u;if(ap(c,u)!==1)throw new Error("Cannot find square root");let f=r,d=c.mul(c.ONE,s),l=c.pow(u,t),m=c.pow(u,i);for(;!c.eql(l,c.ONE);){if(c.is0(l))return c.ZERO;let b=1,h=c.sqr(l);for(;!c.eql(h,c.ONE);)if(b++,h=c.sqr(h),b===f)throw new Error("Cannot find square root");let T=Re<(n[o]="function",n),t);return dr(e,r)}function Ox(e,t,r){if(rze;)r&Re&&(n=e.mul(n,o)),o=e.sqr(o),r>>=Re;return n}function Lo(e,t,r=!1){let n=new Array(t.length).fill(r?e.ZERO:void 0),o=t.reduce((i,a,c)=>e.is0(a)?i:(n[c]=i,e.mul(i,a)),e.ONE),s=e.inv(o);return t.reduceRight((i,a,c)=>e.is0(a)?i:(n[c]=e.mul(i,n[c]),e.mul(i,a)),s),n}function ap(e,t){let r=(e.ORDER-Re)/An,n=e.pow(t,r),o=e.eql(n,e.ONE),s=e.eql(n,e.ZERO),i=e.eql(n,e.neg(e.ONE));if(!o&&!s&&!i)throw new Error("invalid Legendre symbol result");return o?1:s?0:-1}function pf(e,t){t!==void 0&&dn(t);let r=t!==void 0?t:e.toString(2).length,n=Math.ceil(r/8);return{nBitLength:r,nByteLength:n}}function Zs(e,t,r=!1,n={}){if(e<=ze)throw new Error("invalid field: expected ORDER > 0, got "+e);let{nBitLength:o,nByteLength:s}=pf(e,t);if(s>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");let i,a=Object.freeze({ORDER:e,isLE:r,BITS:o,BYTES:s,MASK:Bn(o),ZERO:ze,ONE:Re,create:c=>ue(c,e),isValid:c=>{if(typeof c!="bigint")throw new Error("invalid field element: expected bigint, got "+typeof c);return ze<=c&&cc===ze,isOdd:c=>(c&Re)===Re,neg:c=>ue(-c,e),eql:(c,u)=>c===u,sqr:c=>ue(c*c,e),add:(c,u)=>ue(c+u,e),sub:(c,u)=>ue(c-u,e),mul:(c,u)=>ue(c*u,e),pow:(c,u)=>Ox(a,c,u),div:(c,u)=>ue(c*Ya(u,e),e),sqrN:c=>c*c,addN:(c,u)=>c+u,subN:(c,u)=>c-u,mulN:(c,u)=>c*u,inv:c=>Ya(c,e),sqrt:n.sqrt||(c=>(i||(i=Nx(e)),i(a,c))),toBytes:c=>r?df(c,s):Ft(c,s),fromBytes:c=>{if(c.length!==s)throw new Error("Field.fromBytes: expected "+s+" bytes, got "+c.length);return r?ff(c):Ve(c)},invertBatch:c=>Lo(a,c),cmov:(c,u,f)=>f?u:c});return Object.freeze(a)}function lp(e){if(typeof e!="bigint")throw new Error("field order must be bigint");let t=e.toString(2).length;return Math.ceil(t/8)}function mf(e){let t=lp(e);return t+Math.ceil(t/2)}function pp(e,t,r=!1){let n=e.length,o=lp(t),s=mf(t);if(n<16||n1024)throw new Error("expected "+s+"-1024 bytes of input, got "+n);let i=r?ff(e):Ve(e),a=ue(i,t-Re)+Re;return r?df(a,o):Ft(a,o)}var ze,Re,An,Hx,cp,up,fp,$x,Ks=R(()=>{Rr();Uo();ze=BigInt(0),Re=BigInt(1),An=BigInt(2),Hx=BigInt(3),cp=BigInt(4),up=BigInt(5),fp=BigInt(8);$x=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"]});function hf(e,t){let r=t.negate();return e?r:t}function bp(e,t){if(!Number.isSafeInteger(e)||e<=0||e>t)throw new Error("invalid window size, expected [1.."+t+"], got W="+e)}function bf(e,t){bp(e,t);let r=Math.ceil(t/e)+1,n=2**(e-1),o=2**e,s=Bn(e),i=BigInt(e);return{windows:r,windowSize:n,mask:s,maxNumber:o,shiftBy:i}}function hp(e,t,r){let{windowSize:n,mask:o,maxNumber:s,shiftBy:i}=r,a=Number(e&o),c=e>>i;a>n&&(a-=s,c+=gf);let u=t*n,f=u+Math.abs(a)-1,d=a===0,l=a<0,m=t%2!==0;return{nextN:c,offset:f,isZero:d,isNeg:l,isNegF:m,offsetF:u}}function Ux(e,t){if(!Array.isArray(e))throw new Error("array expected");e.forEach((r,n)=>{if(!(r instanceof t))throw new Error("invalid point at index "+n)})}function Lx(e,t){if(!Array.isArray(e))throw new Error("array of scalars expected");e.forEach((r,n)=>{if(!t.isValid(r))throw new Error("invalid scalar at index "+n)})}function yf(e){return xp.get(e)||1}function yp(e,t){return{constTimeNegate:hf,hasPrecomputes(r){return yf(r)!==1},unsafeLadder(r,n,o=e.ZERO){let s=r;for(;n>mp;)n&gf&&(o=o.add(s)),s=s.double(),n>>=gf;return o},precomputeWindow(r,n){let{windows:o,windowSize:s}=bf(n,t),i=[],a=r,c=a;for(let u=0;u12?c=a-3:a>4?c=a-2:a>0&&(c=2);let u=Bn(c),f=new Array(Number(u)+1).fill(i),d=Math.floor((t.BITS-1)/c)*c,l=i;for(let m=d;m>=0;m-=c){f.fill(i);for(let h=0;h>BigInt(m)&u);f[g]=f[g].add(r[h])}let b=i;for(let h=f.length-1,T=i;h>0;h--)T=T.add(f[h]),b=b.add(T);if(l=l.add(b),m!==0)for(let h=0;h{Ks();Uo();mp=BigInt(0),gf=BigInt(1);xf=new WeakMap,xp=new WeakMap});function vp(e){e.lowS!==void 0&&$o("lowS",e.lowS),e.prehash!==void 0&&$o("prehash",e.prehash)}function Mx(e){let t=wf(e);dr(t,{a:"field",b:"field"},{allowInfinityPoint:"boolean",allowedPrivateKeyLengths:"array",clearCofactor:"function",fromBytes:"function",isTorsionFree:"function",toBytes:"function",wrapPrivateKey:"boolean"});let{endo:r,Fp:n,a:o}=t;if(r){if(!n.eql(o,n.ZERO))throw new Error("invalid endo: CURVE.a must be 0");if(typeof r!="object"||typeof r.beta!="bigint"||typeof r.splitScalar!="function")throw new Error('invalid endo: expected "beta": bigint and "splitScalar": function')}return Object.freeze({...t})}function vf(e,t){return Oo(Ft(e,t))}function _x(e){let t=Mx(e),{Fp:r}=t,n=Zs(t.n,t.nBitLength),o=t.toBytes||((y,p,x)=>{let E=p.toAffine();return _e(Uint8Array.from([4]),r.toBytes(E.x),r.toBytes(E.y))}),s=t.fromBytes||(y=>{let p=y.subarray(1),x=r.fromBytes(p.subarray(0,r.BYTES)),E=r.fromBytes(p.subarray(r.BYTES,2*r.BYTES));return{x,y:E}});function i(y){let{a:p,b:x}=t,E=r.sqr(y),B=r.mul(E,y);return r.add(r.add(B,r.mul(y,p)),x)}function a(y,p){let x=r.sqr(p),E=i(y);return r.eql(x,E)}if(!a(t.Gx,t.Gy))throw new Error("bad curve params: generator point");let c=r.mul(r.pow(t.a,Ys),Bf),u=r.mul(r.sqr(t.b),BigInt(27));if(r.is0(r.add(c,u)))throw new Error("bad curve params: a or b");function f(y){return En(y,X,t.n)}function d(y){let{allowedPrivateKeyLengths:p,nByteLength:x,wrapPrivateKey:E,n:B}=t;if(p&&typeof y!="bigint"){if(No(y)&&(y=Oo(y)),typeof y!="string"||!p.includes(y.length))throw new Error("invalid private key");y=y.padStart(x*2,"0")}let S;try{S=typeof y=="bigint"?y:Ve(le("private key",y,x))}catch{throw new Error("invalid private key, expected hex or "+x+" bytes, got "+typeof y)}return E&&(S=ue(S,B)),fr("private key",S,X,B),S}function l(y){if(!(y instanceof h))throw new Error("ProjectivePoint expected")}let m=lf((y,p)=>{let{px:x,py:E,pz:B}=y;if(r.eql(B,r.ONE))return{x,y:E};let S=y.is0();p==null&&(p=S?r.ONE:r.inv(B));let O=r.mul(x,p),I=r.mul(E,p),k=r.mul(B,p);if(S)return{x:r.ZERO,y:r.ZERO};if(!r.eql(k,r.ONE))throw new Error("invZ was invalid");return{x:O,y:I}}),b=lf(y=>{if(y.is0()){if(t.allowInfinityPoint&&!r.is0(y.py))return;throw new Error("bad point: ZERO")}let{x:p,y:x}=y.toAffine();if(!r.isValid(p)||!r.isValid(x))throw new Error("bad point: x or y not FE");if(!a(p,x))throw new Error("bad point: equation left != right");if(!y.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return!0});class h{constructor(p,x,E){if(p==null||!r.isValid(p))throw new Error("x required");if(x==null||!r.isValid(x)||r.is0(x))throw new Error("y required");if(E==null||!r.isValid(E))throw new Error("z required");this.px=p,this.py=x,this.pz=E,Object.freeze(this)}static fromAffine(p){let{x,y:E}=p||{};if(!p||!r.isValid(x)||!r.isValid(E))throw new Error("invalid affine point");if(p instanceof h)throw new Error("projective point not allowed");let B=S=>r.eql(S,r.ZERO);return B(x)&&B(E)?h.ZERO:new h(x,E,r.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(p){let x=Lo(r,p.map(E=>E.pz));return p.map((E,B)=>E.toAffine(x[B])).map(h.fromAffine)}static fromHex(p){let x=h.fromAffine(s(le("pointHex",p)));return x.assertValidity(),x}static fromPrivateKey(p){return h.BASE.multiply(d(p))}static msm(p,x){return gp(h,n,p,x)}_setWindowSize(p){P.setWindowSize(this,p)}assertValidity(){b(this)}hasEvenY(){let{y:p}=this.toAffine();if(r.isOdd)return!r.isOdd(p);throw new Error("Field doesn't support isOdd")}equals(p){l(p);let{px:x,py:E,pz:B}=this,{px:S,py:O,pz:I}=p,k=r.eql(r.mul(x,I),r.mul(S,B)),$=r.eql(r.mul(E,I),r.mul(O,B));return k&&$}negate(){return new h(this.px,r.neg(this.py),this.pz)}double(){let{a:p,b:x}=t,E=r.mul(x,Ys),{px:B,py:S,pz:O}=this,I=r.ZERO,k=r.ZERO,$=r.ZERO,N=r.mul(B,B),z=r.mul(S,S),v=r.mul(O,O),w=r.mul(B,S);return w=r.add(w,w),$=r.mul(B,O),$=r.add($,$),I=r.mul(p,$),k=r.mul(E,v),k=r.add(I,k),I=r.sub(z,k),k=r.add(z,k),k=r.mul(I,k),I=r.mul(w,I),$=r.mul(E,$),v=r.mul(p,v),w=r.sub(N,v),w=r.mul(p,w),w=r.add(w,$),$=r.add(N,N),N=r.add($,N),N=r.add(N,v),N=r.mul(N,w),k=r.add(k,N),v=r.mul(S,O),v=r.add(v,v),N=r.mul(v,w),I=r.sub(I,N),$=r.mul(v,z),$=r.add($,$),$=r.add($,$),new h(I,k,$)}add(p){l(p);let{px:x,py:E,pz:B}=this,{px:S,py:O,pz:I}=p,k=r.ZERO,$=r.ZERO,N=r.ZERO,z=t.a,v=r.mul(t.b,Ys),w=r.mul(x,S),C=r.mul(E,O),H=r.mul(B,I),U=r.add(x,E),L=r.add(S,O);U=r.mul(U,L),L=r.add(w,C),U=r.sub(U,L),L=r.add(x,B);let j=r.add(S,I);return L=r.mul(L,j),j=r.add(w,H),L=r.sub(L,j),j=r.add(E,B),k=r.add(O,I),j=r.mul(j,k),k=r.add(C,H),j=r.sub(j,k),N=r.mul(z,L),k=r.mul(v,H),N=r.add(k,N),k=r.sub(C,N),N=r.add(C,N),$=r.mul(k,N),C=r.add(w,w),C=r.add(C,w),H=r.mul(z,H),L=r.mul(v,L),C=r.add(C,H),H=r.sub(w,H),H=r.mul(z,H),L=r.add(L,H),w=r.mul(C,L),$=r.add($,w),w=r.mul(j,L),k=r.mul(U,k),k=r.sub(k,w),w=r.mul(U,C),N=r.mul(j,N),N=r.add(N,w),new h(k,$,N)}subtract(p){return this.add(p.negate())}is0(){return this.equals(h.ZERO)}wNAF(p){return P.wNAFCached(this,p,h.normalizeZ)}multiplyUnsafe(p){let{endo:x,n:E}=t;fr("scalar",p,Ht,E);let B=h.ZERO;if(p===Ht)return B;if(this.is0()||p===X)return this;if(!x||P.hasPrecomputes(this))return P.wNAFCachedUnsafe(this,p,h.normalizeZ);let{k1neg:S,k1:O,k2neg:I,k2:k}=x.splitScalar(p),$=B,N=B,z=this;for(;O>Ht||k>Ht;)O&X&&($=$.add(z)),k&X&&(N=N.add(z)),z=z.double(),O>>=X,k>>=X;return S&&($=$.negate()),I&&(N=N.negate()),N=new h(r.mul(N.px,x.beta),N.py,N.pz),$.add(N)}multiply(p){let{endo:x,n:E}=t;fr("scalar",p,X,E);let B,S;if(x){let{k1neg:O,k1:I,k2neg:k,k2:$}=x.splitScalar(p),{p:N,f:z}=this.wNAF(I),{p:v,f:w}=this.wNAF($);N=P.constTimeNegate(O,N),v=P.constTimeNegate(k,v),v=new h(r.mul(v.px,x.beta),v.py,v.pz),B=N.add(v),S=z.add(w)}else{let{p:O,f:I}=this.wNAF(p);B=O,S=I}return h.normalizeZ([B,S])[0]}multiplyAndAddUnsafe(p,x,E){let B=h.BASE,S=(I,k)=>k===Ht||k===X||!I.equals(B)?I.multiplyUnsafe(k):I.multiply(k),O=S(this,x).add(S(p,E));return O.is0()?void 0:O}toAffine(p){return m(this,p)}isTorsionFree(){let{h:p,isTorsionFree:x}=t;if(p===X)return!0;if(x)return x(h,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){let{h:p,clearCofactor:x}=t;return p===X?this:x?x(h,this):this.multiplyUnsafe(t.h)}toRawBytes(p=!0){return $o("isCompressed",p),this.assertValidity(),o(h,this,p)}toHex(p=!0){return $o("isCompressed",p),Oo(this.toRawBytes(p))}}h.BASE=new h(t.Gx,t.Gy,r.ONE),h.ZERO=new h(r.ZERO,r.ONE,r.ZERO);let{endo:T,nBitLength:g}=t,P=yp(h,T?Math.ceil(g/2):g);return{CURVE:t,ProjectivePoint:h,normPrivateKeyToScalar:d,weierstrassEquation:i,isWithinCurveOrder:f}}function zx(e){let t=wf(e);return dr(t,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...t})}function Ep(e){let t=zx(e),{Fp:r,n,nByteLength:o,nBitLength:s}=t,i=r.BYTES+1,a=2*r.BYTES+1;function c(v){return ue(v,n)}function u(v){return Ya(v,n)}let{ProjectivePoint:f,normPrivateKeyToScalar:d,weierstrassEquation:l,isWithinCurveOrder:m}=_x({...t,toBytes(v,w,C){let H=w.toAffine(),U=r.toBytes(H.x),L=_e;return $o("isCompressed",C),C?L(Uint8Array.from([w.hasEvenY()?2:3]),U):L(Uint8Array.from([4]),U,r.toBytes(H.y))},fromBytes(v){let w=v.length,C=v[0],H=v.subarray(1);if(w===i&&(C===2||C===3)){let U=Ve(H);if(!En(U,X,r.ORDER))throw new Error("Point is not on curve");let L=l(U),j;try{j=r.sqrt(L)}catch(Q){let K=Q instanceof Error?": "+Q.message:"";throw new Error("Point is not on curve"+K)}let D=(j&X)===X;return(C&1)===1!==D&&(j=r.neg(j)),{x:U,y:j}}else if(w===a&&C===4){let U=r.fromBytes(H.subarray(0,r.BYTES)),L=r.fromBytes(H.subarray(r.BYTES,2*r.BYTES));return{x:U,y:L}}else{let U=i,L=a;throw new Error("invalid Point, expected length of "+U+", or uncompressed "+L+", got "+w)}}});function b(v){let w=n>>X;return v>w}function h(v){return b(v)?c(-v):v}let T=(v,w,C)=>Ve(v.slice(w,C));class g{constructor(w,C,H){fr("r",w,X,n),fr("s",C,X,n),this.r=w,this.s=C,H!=null&&(this.recovery=H),Object.freeze(this)}static fromCompact(w){let C=o;return w=le("compactSignature",w,C*2),new g(T(w,0,C),T(w,C,2*C))}static fromDER(w){let{r:C,s:H}=lr.toSig(le("DER",w));return new g(C,H)}assertValidity(){}addRecoveryBit(w){return new g(this.r,this.s,w)}recoverPublicKey(w){let{r:C,s:H,recovery:U}=this,L=B(le("msgHash",w));if(U==null||![0,1,2,3].includes(U))throw new Error("recovery id invalid");let j=U===2||U===3?C+t.n:C;if(j>=r.ORDER)throw new Error("recovery id 2 or 3 invalid");let D=(U&1)===0?"02":"03",se=f.fromHex(D+vf(j,r.BYTES)),Q=u(j),K=c(-L*Q),Ye=c(H*Q),ve=f.BASE.multiplyAndAddUnsafe(se,K,Ye);if(!ve)throw new Error("point at infinify");return ve.assertValidity(),ve}hasHighS(){return b(this.s)}normalizeS(){return this.hasHighS()?new g(this.r,c(-this.s),this.recovery):this}toDERRawBytes(){return Ws(this.toDERHex())}toDERHex(){return lr.hexFromSig(this)}toCompactRawBytes(){return Ws(this.toCompactHex())}toCompactHex(){let w=o;return vf(this.r,w)+vf(this.s,w)}}let P={isValidPrivateKey(v){try{return d(v),!0}catch{return!1}},normPrivateKeyToScalar:d,randomPrivateKey:()=>{let v=mf(t.n);return pp(t.randomBytes(v),t.n)},precompute(v=8,w=f.BASE){return w._setWindowSize(v),w.multiply(BigInt(3)),w}};function y(v,w=!0){return f.fromPrivateKey(v).toRawBytes(w)}function p(v){if(typeof v=="bigint")return!1;if(v instanceof f)return!0;let C=le("key",v).length,H=r.BYTES,U=H+1,L=2*H+1;if(!(t.allowedPrivateKeyLengths||o===U))return C===U||C===L}function x(v,w,C=!0){if(p(v)===!0)throw new Error("first arg must be private key");if(p(w)===!1)throw new Error("second arg must be public key");return f.fromHex(w).multiply(d(v)).toRawBytes(C)}let E=t.bits2int||function(v){if(v.length>8192)throw new Error("input is too large");let w=Ve(v),C=v.length*8-s;return C>0?w>>BigInt(C):w},B=t.bits2int_modN||function(v){return c(E(v))},S=Bn(s);function O(v){return fr("num < 2^"+s,v,Ht,S),Ft(v,o)}function I(v,w,C=k){if(["recovered","canonical"].some(Oe=>Oe in C))throw new Error("sign() legacy options not supported");let{hash:H,randomBytes:U}=t,{lowS:L,prehash:j,extraEntropy:D}=C;L==null&&(L=!0),v=le("msgHash",v),vp(C),j&&(v=le("prehashed msgHash",H(v)));let se=B(v),Q=d(w),K=[O(Q),O(se)];if(D!=null&&D!==!1){let Oe=D===!0?U(r.BYTES):D;K.push(le("extraEntropy",Oe))}let Ye=_e(...K),ve=se;function an(Oe){let Xe=E(Oe);if(!m(Xe))return;let cn=u(Xe),yt=f.BASE.multiply(Xe).toAffine(),Ue=c(yt.x);if(Ue===Ht)return;let gt=c(cn*c(ve+Ue*Q));if(gt===Ht)return;let Je=(yt.x===Ue?0:2)|Number(yt.y&X),As=gt;return L&&b(gt)&&(As=h(gt),Je^=1),new g(Ue,As,Je)}return{seed:Ye,k2sig:an}}let k={lowS:t.lowS,prehash:!1},$={lowS:t.lowS,prehash:!1};function N(v,w,C=k){let{seed:H,k2sig:U}=I(v,w,C),L=t;return ip(L.hash.outputLen,L.nByteLength,L.hmac)(H,U)}f.BASE._setWindowSize(8);function z(v,w,C,H=$){let U=v;w=le("msgHash",w),C=le("publicKey",C);let{lowS:L,prehash:j,format:D}=H;if(vp(H),"strict"in H)throw new Error("options.strict was renamed to lowS");if(D!==void 0&&D!=="compact"&&D!=="der")throw new Error("format must be compact or der");let se=typeof U=="string"||No(U),Q=!se&&!D&&typeof U=="object"&&U!==null&&typeof U.r=="bigint"&&typeof U.s=="bigint";if(!se&&!Q)throw new Error("invalid signature, expected Uint8Array, hex string or Signature instance");let K,Ye;try{if(Q&&(K=new g(U.r,U.s)),se){try{D!=="compact"&&(K=g.fromDER(U))}catch(Je){if(!(Je instanceof lr.Err))throw Je}!K&&D!=="der"&&(K=g.fromCompact(U))}Ye=f.fromHex(C)}catch{return!1}if(!K||L&&K.hasHighS())return!1;j&&(w=t.hash(w));let{r:ve,s:an}=K,Oe=B(w),Xe=u(an),cn=c(Oe*Xe),yt=c(ve*Xe),Ue=f.BASE.multiplyAndAddUnsafe(Ye,cn,yt)?.toAffine();return Ue?c(Ue.x)===ve:!1}return{CURVE:t,getPublicKey:y,getSharedSecret:x,sign:N,verify:z,ProjectivePoint:f,Signature:g,utils:P}}function Fx(e,t){let r=e.ORDER,n=Ht;for(let b=r-X;b%Fr===Ht;b/=Fr)n+=X;let o=n,s=Fr<{let T=d,g=e.pow(h,u),P=e.sqr(g);P=e.mul(P,h);let y=e.mul(b,P);y=e.pow(y,c),y=e.mul(y,g),g=e.mul(y,h),P=e.mul(y,b);let p=e.mul(P,g);y=e.pow(p,f);let x=e.eql(y,e.ONE);g=e.mul(P,l),y=e.mul(p,T),P=e.cmov(g,P,x),p=e.cmov(y,p,x);for(let E=o;E>X;E--){let B=E-Fr;B=Fr<{let P=e.sqr(g),y=e.mul(T,g);P=e.mul(P,y);let p=e.pow(P,b);p=e.mul(p,y);let x=e.mul(p,h),E=e.mul(e.sqr(p),g),B=e.eql(E,T),S=e.cmov(x,p,B);return{isValid:B,value:S}}}return m}function Bp(e,t){if(Xa(e),!e.isValid(t.A)||!e.isValid(t.B)||!e.isValid(t.Z))throw new Error("mapToCurveSimpleSWU: invalid opts");let r=Fx(e,t.Z);if(!e.isOdd)throw new Error("Fp.isOdd is not implemented!");return n=>{let o,s,i,a,c,u,f,d;o=e.sqr(n),o=e.mul(o,t.Z),s=e.sqr(o),s=e.add(s,o),i=e.add(s,e.ONE),i=e.mul(i,t.B),a=e.cmov(t.Z,e.neg(s),!e.eql(s,e.ZERO)),a=e.mul(a,t.A),s=e.sqr(i),u=e.sqr(a),c=e.mul(u,t.A),s=e.add(s,c),s=e.mul(s,i),u=e.mul(u,a),c=e.mul(u,t.B),s=e.add(s,c),f=e.mul(o,i);let{isValid:l,value:m}=r(s,u);d=e.mul(o,n),d=e.mul(d,m),f=e.cmov(f,i,l),d=e.cmov(d,m,l);let b=e.isOdd(n)===e.isOdd(d);d=e.cmov(e.neg(d),d,b);let h=Lo(e,[a],!0)[0];return f=e.mul(f,h),{x:f,y:d}}}var Ef,lr,Ht,X,Fr,Ys,Bf,Af=R(()=>{wp();Ks();Uo();Ef=class extends Error{constructor(t=""){super(t)}},lr={Err:Ef,_tlv:{encode:(e,t)=>{let{Err:r}=lr;if(e<0||e>256)throw new r("tlv.encode: wrong tag");if(t.length&1)throw new r("tlv.encode: unpadded data");let n=t.length/2,o=Vs(n);if(o.length/2&128)throw new r("tlv.encode: long form length too big");let s=n>127?Vs(o.length/2|128):"";return Vs(e)+s+o+t},decode(e,t){let{Err:r}=lr,n=0;if(e<0||e>256)throw new r("tlv.encode: wrong tag");if(t.length<2||t[n++]!==e)throw new r("tlv.decode: wrong tlv");let o=t[n++],s=!!(o&128),i=0;if(!s)i=o;else{let c=o&127;if(!c)throw new r("tlv.decode(long): indefinite length not supported");if(c>4)throw new r("tlv.decode(long): byte length is too big");let u=t.subarray(n,n+c);if(u.length!==c)throw new r("tlv.decode: length bytes not complete");if(u[0]===0)throw new r("tlv.decode(long): zero leftmost byte");for(let f of u)i=i<<8|f;if(n+=c,i<128)throw new r("tlv.decode(long): not minimal encoding")}let a=t.subarray(n,n+i);if(a.length!==i)throw new r("tlv.decode: wrong value length");return{v:a,l:t.subarray(n+i)}}},_int:{encode(e){let{Err:t}=lr;if(eof(e,t,pl(...r)),randomBytes:Aa}}function Ap(e,t){let r=n=>Ep({...e,...jx(n)});return{...r(t),create:r}}var Ip=R(()=>{ep();Rr();Af();});function jr(e,t){if(Xs(e),Xs(t),e<0||e>=1<<8*t)throw new Error("invalid I2OSP input: "+e);let r=Array.from({length:t}).fill(0);for(let n=t-1;n>=0;n--)r[n]=e&255,e>>>=8;return new Uint8Array(r)}function qx(e,t){let r=new Uint8Array(e.length);for(let n=0;n255&&(t=n(_e(Ka("H2C-OVERSIZE-DST-"),t)));let{outputLen:o,blockLen:s}=n,i=Math.ceil(r/o);if(r>65535||i>255)throw new Error("expand_message_xmd: invalid lenInBytes");let a=_e(t,jr(t.length,1)),c=jr(0,s),u=jr(r,2),f=new Array(i),d=n(_e(c,e,u,jr(0,1),a));f[0]=n(_e(d,jr(1,1),a));for(let m=1;m<=i;m++){let b=[qx(d,f[m-1]),jr(m+1,1),a];f[m]=n(_e(...b))}return _e(...f).slice(0,r)}function Vx(e,t,r,n,o){if(ur(e),ur(t),Xs(r),t.length>255){let s=Math.ceil(2*n/8);t=o.create({dkLen:s}).update(Ka("H2C-OVERSIZE-DST-")).update(t).digest()}if(r>65535||t.length>255)throw new Error("expand_message_xof: invalid lenInBytes");return o.create({dkLen:r}).update(e).update(jr(r,2)).update(t).update(jr(t.length,1)).digest()}function Sp(e,t,r){dr(r,{DST:"stringOrUint8Array",p:"bigint",m:"isSafeInteger",k:"isSafeInteger",hash:"hash"});let{p:n,k:o,m:s,hash:i,expand:a,DST:c}=r;ur(e),Xs(t);let u=typeof c=="string"?Ka(c):c,f=n.toString(2).length,d=Math.ceil((f+o)/8),l=t*s*d,m;if(a==="xmd")m=Gx(e,u,l,i);else if(a==="xof")m=Vx(e,u,l,o,i);else if(a==="_internal_pass")m=e;else throw new Error('expand must be "xmd" or "xof"');let b=new Array(t);for(let h=0;hArray.from(n).reverse());return(n,o)=>{let[s,i,a,c]=r.map(d=>d.reduce((l,m)=>e.add(e.mul(l,n),m))),[u,f]=Lo(e,[i,c],!0);return n=e.mul(s,u),o=e.mul(o,e.mul(a,f)),{x:n,y:o}}}function Pp(e,t,r){if(typeof t!="function")throw new Error("mapToCurve() must be defined");function n(s){return e.fromAffine(t(s))}function o(s){let i=s.clearCofactor();return i.equals(e.ZERO)?e.ZERO:(i.assertValidity(),i)}return{defaults:r,hashToCurve(s,i){let a=Sp(s,2,{...r,DST:r.DST,...i}),c=n(a[0]),u=n(a[1]);return o(c.add(u))},encodeToCurve(s,i){let a=Sp(s,1,{...r,DST:r.encodeDST,...i});return o(n(a[0]))},mapToCurve(s){if(!Array.isArray(s))throw new Error("expected array of bigints");for(let i of s)if(typeof i!="bigint")throw new Error("expected array of bigints");return o(n(s))}}}var Dx,kp=R(()=>{Ks();Uo();Dx=Ve});var Up={};Ri(Up,{encodeToCurve:()=>e6,hashToCurve:()=>Qx,schnorr:()=>Yx,secp256k1:()=>In,secp256k1_hasher:()=>Rf});function Cp(e){let t=ei,r=BigInt(3),n=BigInt(6),o=BigInt(11),s=BigInt(22),i=BigInt(23),a=BigInt(44),c=BigInt(88),u=e*e*e%t,f=u*u*e%t,d=tt(f,r,t)*f%t,l=tt(d,r,t)*f%t,m=tt(l,Qa,t)*u%t,b=tt(m,o,t)*m%t,h=tt(b,s,t)*b%t,T=tt(h,a,t)*h%t,g=tt(T,c,t)*T%t,P=tt(g,a,t)*h%t,y=tt(P,r,t)*f%t,p=tt(y,i,t)*b%t,x=tt(p,n,t)*u%t,E=tt(x,Qa,t);if(!Dr.eql(Dr.sqr(E),e))throw new Error("Cannot find square root");return E}function ec(e,...t){let r=Rp[e];if(r===void 0){let n=vn(Uint8Array.from(e,o=>o.charCodeAt(0)));r=_e(n,n),Rp[e]=r}return vn(_e(r,...t))}function Tf(e){let t=In.utils.normPrivateKeyToScalar(e),r=Hf.fromPrivateKey(t);return{scalar:r.hasEvenY()?t:Qs(-t),bytes:kf(r)}}function Np(e){fr("x",e,Js,ei);let t=If(e*e),r=If(t*e+BigInt(7)),n=Cp(r);n%Qa!==Pf&&(n=If(-n));let o=new Hf(e,n,Js);return o.assertValidity(),o}function $p(...e){return Qs(Mo(ec("BIP0340/challenge",...e)))}function Zx(e){return Tf(e).bytes}function Kx(e,t,r=Aa(32)){let n=le("message",e),{bytes:o,scalar:s}=Tf(t),i=le("auxRand",r,32),a=Sf(s^Mo(ec("BIP0340/aux",i))),c=ec("BIP0340/nonce",a,o,n),u=Qs(Mo(c));if(u===Pf)throw new Error("sign failed: k is zero");let{bytes:f,scalar:d}=Tf(u),l=$p(f,o,n),m=new Uint8Array(64);if(m.set(f,0),m.set(Sf(Qs(d+l*s)),32),!Op(m,n,o))throw new Error("sign: Invalid signature produced");return m}function Op(e,t,r){let n=le("signature",e,64),o=le("message",t),s=le("publicKey",r,32);try{let i=Np(Mo(s)),a=Mo(n.subarray(0,32));if(!En(a,Js,ei))return!1;let c=Mo(n.subarray(32,64));if(!En(c,Js,Ja))return!1;let u=$p(Sf(a),kf(i),o),f=Wx(i,c,Qs(-u));return!(!f||!f.hasEvenY()||f.toAffine().x!==a)}catch{return!1}}var ei,Ja,Pf,Js,Qa,Hp,Dr,In,Rp,kf,Sf,If,Qs,Hf,Wx,Mo,Yx,Xx,Jx,Rf,Qx,e6,Cf=R(()=>{nf();Rr();Ip();kp();Ks();Uo();Af();ei=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),Ja=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),Pf=BigInt(0),Js=BigInt(1),Qa=BigInt(2),Hp=(e,t)=>(e+t/Qa)/t;Dr=Zs(ei,void 0,void 0,{sqrt:Cp}),In=Ap({a:Pf,b:BigInt(7),Fp:Dr,n:Ja,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:e=>{let t=Ja,r=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-Js*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),o=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),s=r,i=BigInt("0x100000000000000000000000000000000"),a=Hp(s*e,t),c=Hp(-n*e,t),u=ue(e-a*r-c*o,t),f=ue(-a*n-c*s,t),d=u>i,l=f>i;if(d&&(u=t-u),l&&(f=t-f),u>i||f>i)throw new Error("splitScalar: Endomorphism failed, k="+e);return{k1neg:d,k1:u,k2neg:l,k2:f}}}},vn),Rp={};kf=e=>e.toRawBytes(!0).slice(1),Sf=e=>Ft(e,32),If=e=>ue(e,ei),Qs=e=>ue(e,Ja),Hf=In.ProjectivePoint,Wx=(e,t,r)=>Hf.BASE.multiplyAndAddUnsafe(e,t,r);Mo=Ve;Yx={getPublicKey:Zx,sign:Kx,verify:Op,utils:{randomPrivateKey:In.utils.randomPrivateKey,lift_x:Np,pointToBytes:kf,numberToBytesBE:Ft,bytesToNumberBE:Ve,taggedHash:ec,mod:ue}},Xx=Tp(Dr,[["0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa8c7","0x7d3d4c80bc321d5b9f315cea7fd44c5d595d2fc0bf63b92dfff1044f17c6581","0x534c328d23f234e6e2a413deca25caece4506144037c40314ecbd0b53d9dd262","0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa88c"],["0xd35771193d94918a9ca34ccbb7b640dd86cd409542f8487d9fe6b745781eb49b","0xedadc6f64383dc1df7c4b2d51b54225406d36b641f5e41bbc52a56612a8c6d14","0x0000000000000000000000000000000000000000000000000000000000000001"],["0x4bda12f684bda12f684bda12f684bda12f684bda12f684bda12f684b8e38e23c","0xc75e0c32d5cb7c0fa9d0a54b12a0a6d5647ab046d686da6fdffc90fc201d71a3","0x29a6194691f91a73715209ef6512e576722830a201be2018a765e85a9ecee931","0x2f684bda12f684bda12f684bda12f684bda12f684bda12f684bda12f38e38d84"],["0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffff93b","0x7a06534bb8bdb49fd5e9e6632722c2989467c1bfc8e8d978dfb425d2685c2573","0x6484aa716545ca2cf3a70c3fa8fe337e0a3d21162f0d6299a7bf8192bfd2a76f","0x0000000000000000000000000000000000000000000000000000000000000001"]].map(e=>e.map(t=>BigInt(t)))),Jx=Bp(Dr,{A:BigInt("0x3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533"),B:BigInt("1771"),Z:Dr.create(BigInt("-11"))}),Rf=Pp(In.ProjectivePoint,e=>{let{x:t,y:r}=Jx(Dr.create(e[0]));return Xx(t,r)},{DST:"secp256k1_XMD:SHA-256_SSWU_RO_",encodeDST:"secp256k1_XMD:SHA-256_SSWU_NU_",p:Dr.ORDER,m:1,k:128,expand:"xmd",hash:vn}),Qx=Rf.hashToCurve,e6=Rf.encodeToCurve});var pr,qr,_o,zo,Fo,jo,Do,qo,Go,Vo,Gr,lt,Sn=R(()=>{io();G();pr=class extends A{constructor({cause:t,message:r}={}){let n=r?.replace("execution reverted: ","")?.replace("execution reverted","");super(`Execution reverted ${n?`with reason: ${n}`:"for an unknown reason"}.`,{cause:t,name:"ExecutionRevertedError"})}};Object.defineProperty(pr,"code",{enumerable:!0,configurable:!0,writable:!0,value:3});Object.defineProperty(pr,"nodeMessage",{enumerable:!0,configurable:!0,writable:!0,value:/execution reverted|gas required exceeds allowance/});qr=class extends A{constructor({cause:t,maxFeePerGas:r}={}){super(`The fee cap (\`maxFeePerGas\`${r?` = ${he(r)} gwei`:""}) cannot be higher than the maximum allowed value (2^256-1).`,{cause:t,name:"FeeCapTooHighError"})}};Object.defineProperty(qr,"nodeMessage",{enumerable:!0,configurable:!0,writable:!0,value:/max fee per gas higher than 2\^256-1|fee cap higher than 2\^256-1/});_o=class extends A{constructor({cause:t,maxFeePerGas:r}={}){super(`The fee cap (\`maxFeePerGas\`${r?` = ${he(r)}`:""} gwei) cannot be lower than the block base fee.`,{cause:t,name:"FeeCapTooLowError"})}};Object.defineProperty(_o,"nodeMessage",{enumerable:!0,configurable:!0,writable:!0,value:/max fee per gas less than block base fee|fee cap less than block base fee|transaction is outdated/});zo=class extends A{constructor({cause:t,nonce:r}={}){super(`Nonce provided for the transaction ${r?`(${r}) `:""}is higher than the next one expected.`,{cause:t,name:"NonceTooHighError"})}};Object.defineProperty(zo,"nodeMessage",{enumerable:!0,configurable:!0,writable:!0,value:/nonce too high/});Fo=class extends A{constructor({cause:t,nonce:r}={}){super([`Nonce provided for the transaction ${r?`(${r}) `:""}is lower than the current nonce of the account.`,"Try increasing the nonce or find the latest nonce with `getTransactionCount`."].join(` +`),{cause:t,name:"NonceTooLowError"})}};Object.defineProperty(Fo,"nodeMessage",{enumerable:!0,configurable:!0,writable:!0,value:/nonce too low|transaction already imported|already known/});jo=class extends A{constructor({cause:t,nonce:r}={}){super(`Nonce provided for the transaction ${r?`(${r}) `:""}exceeds the maximum allowed nonce.`,{cause:t,name:"NonceMaxValueError"})}};Object.defineProperty(jo,"nodeMessage",{enumerable:!0,configurable:!0,writable:!0,value:/nonce has max value/});Do=class extends A{constructor({cause:t}={}){super(["The total cost (gas * gas fee + value) of executing this transaction exceeds the balance of the account."].join(` +`),{cause:t,metaMessages:["This error could arise when the account does not have enough funds to:"," - pay for the total gas fee,"," - pay for the value to send."," ","The cost of the transaction is calculated as `gas * gas fee + value`, where:"," - `gas` is the amount of gas needed for transaction to execute,"," - `gas fee` is the gas fee,"," - `value` is the amount of ether to send to the recipient."],name:"InsufficientFundsError"})}};Object.defineProperty(Do,"nodeMessage",{enumerable:!0,configurable:!0,writable:!0,value:/insufficient funds|exceeds transaction sender account balance/});qo=class extends A{constructor({cause:t,gas:r}={}){super(`The amount of gas ${r?`(${r}) `:""}provided for the transaction exceeds the limit allowed for the block.`,{cause:t,name:"IntrinsicGasTooHighError"})}};Object.defineProperty(qo,"nodeMessage",{enumerable:!0,configurable:!0,writable:!0,value:/intrinsic gas too high|gas limit reached/});Go=class extends A{constructor({cause:t,gas:r}={}){super(`The amount of gas ${r?`(${r}) `:""}provided for the transaction is too low.`,{cause:t,name:"IntrinsicGasTooLowError"})}};Object.defineProperty(Go,"nodeMessage",{enumerable:!0,configurable:!0,writable:!0,value:/intrinsic gas too low/});Vo=class extends A{constructor({cause:t}){super("The transaction type is not supported for this chain.",{cause:t,name:"TransactionTypeNotSupportedError"})}};Object.defineProperty(Vo,"nodeMessage",{enumerable:!0,configurable:!0,writable:!0,value:/transaction type not valid/});Gr=class extends A{constructor({cause:t,maxPriorityFeePerGas:r,maxFeePerGas:n}={}){super([`The provided tip (\`maxPriorityFeePerGas\`${r?` = ${he(r)} gwei`:""}) cannot be higher than the fee cap (\`maxFeePerGas\`${n?` = ${he(n)} gwei`:""}).`].join(` +`),{cause:t,name:"TipAboveFeeCapError"})}};Object.defineProperty(Gr,"nodeMessage",{enumerable:!0,configurable:!0,writable:!0,value:/max priority fee per gas higher than max fee per gas|tip higher than fee cap/});lt=class extends A{constructor({cause:t}){super(`An error occurred while executing: ${t?.shortMessage}`,{cause:t,name:"UnknownNodeError"})}}});function Vr(e,t){let r=(e.details||"").toLowerCase(),n=e instanceof A?e.walk(o=>o?.code===pr.code):e;return n instanceof A?new pr({cause:e,message:n.details}):pr.nodeMessage.test(r)?new pr({cause:e,message:e.details}):qr.nodeMessage.test(r)?new qr({cause:e,maxFeePerGas:t?.maxFeePerGas}):_o.nodeMessage.test(r)?new _o({cause:e,maxFeePerGas:t?.maxFeePerGas}):zo.nodeMessage.test(r)?new zo({cause:e,nonce:t?.nonce}):Fo.nodeMessage.test(r)?new Fo({cause:e,nonce:t?.nonce}):jo.nodeMessage.test(r)?new jo({cause:e,nonce:t?.nonce}):Do.nodeMessage.test(r)?new Do({cause:e}):qo.nodeMessage.test(r)?new qo({cause:e,gas:t?.gas}):Go.nodeMessage.test(r)?new Go({cause:e,gas:t?.gas}):Vo.nodeMessage.test(r)?new Vo({cause:e}):Gr.nodeMessage.test(r)?new Gr({cause:e,maxFeePerGas:t?.maxFeePerGas,maxPriorityFeePerGas:t?.maxPriorityFeePerGas}):new lt({cause:e})}var ri=R(()=>{G();Sn()});function Wr(e,{format:t}){if(!t)return{};let r={};function n(s){let i=Object.keys(s);for(let a of i)a in e&&(r[a]=e[a]),s[a]&&typeof s[a]=="object"&&!Array.isArray(s[a])&&n(s[a])}let o=t(e||{});return n(o),r}var ni=R(()=>{});function jt(e,t){let r={};return typeof e.authorizationList<"u"&&(r.authorizationList=o6(e.authorizationList)),typeof e.accessList<"u"&&(r.accessList=e.accessList),typeof e.blobVersionedHashes<"u"&&(r.blobVersionedHashes=e.blobVersionedHashes),typeof e.blobs<"u"&&(typeof e.blobs[0]!="string"?r.blobs=e.blobs.map(n=>Y(n)):r.blobs=e.blobs),typeof e.data<"u"&&(r.data=e.data),e.account&&(r.from=e.account.address),typeof e.from<"u"&&(r.from=e.from),typeof e.gas<"u"&&(r.gas=_(e.gas)),typeof e.gasPrice<"u"&&(r.gasPrice=_(e.gasPrice)),typeof e.maxFeePerBlobGas<"u"&&(r.maxFeePerBlobGas=_(e.maxFeePerBlobGas)),typeof e.maxFeePerGas<"u"&&(r.maxFeePerGas=_(e.maxFeePerGas)),typeof e.maxPriorityFeePerGas<"u"&&(r.maxPriorityFeePerGas=_(e.maxPriorityFeePerGas)),typeof e.nonce<"u"&&(r.nonce=_(e.nonce)),typeof e.to<"u"&&(r.to=e.to),typeof e.type<"u"&&(r.type=n6[e.type]),typeof e.value<"u"&&(r.value=_(e.value)),r}function o6(e){return e.map(t=>({address:t.address,r:t.r?_(BigInt(t.r)):t.r,s:t.s?_(BigInt(t.s)):t.s,chainId:_(t.chainId),nonce:_(t.nonce),...typeof t.yParity<"u"?{yParity:_(t.yParity)}:{},...typeof t.v<"u"&&typeof t.yParity>"u"?{v:_(t.v)}:{}}))}var n6,Wo=R(()=>{q();n6={legacy:"0x0",eip2930:"0x1",eip1559:"0x2",eip4844:"0x3",eip7702:"0x4"}});function qp(e){if(!(!e||e.length===0))return e.reduce((t,{slot:r,value:n})=>{if(r.length!==66)throw new Os({size:r.length,targetSize:66,type:"hex"});if(n.length!==66)throw new Os({size:n.length,targetSize:66,type:"hex"});return t[r]=n,t},{})}function s6(e){let{balance:t,nonce:r,state:n,stateDiff:o,code:s}=e,i={};if(s!==void 0&&(i.code=s),t!==void 0&&(i.balance=_(t)),r!==void 0&&(i.nonce=_(r)),n!==void 0&&(i.state=qp(n)),o!==void 0){if(i.state)throw new La;i.stateDiff=qp(o)}return i}function Zo(e){if(!e)return;let t={};for(let{address:r,...n}of e){if(!de(r,{strict:!1}))throw new Pe({address:r});if(t[r])throw new Ua({address:r});t[r]=s6(n)}return t}var nc=R(()=>{pn();ha();rf();rr();q()});var r9,n9,o9,s9,i9,a9,c9,u9,f9,d9,l9,p9,m9,h9,b9,x9,y9,g9,w9,v9,E9,B9,A9,I9,S9,T9,P9,k9,H9,R9,C9,N9,$9,O9,U9,L9,M9,_9,z9,F9,j9,D9,q9,G9,V9,W9,Z9,K9,Y9,X9,J9,Q9,ev,tv,rv,nv,ov,sv,iv,av,cv,uv,fv,dv,lv,pv,mv,hv,bv,xv,yv,gv,wv,vv,Ev,Bv,Av,Iv,Sv,Tv,Pv,kv,Hv,Rv,Cv,Nv,$v,Ov,Uv,Lv,Mv,_v,zv,Fv,jv,Gp,Vp=R(()=>{r9=2n**(8n-1n)-1n,n9=2n**(16n-1n)-1n,o9=2n**(24n-1n)-1n,s9=2n**(32n-1n)-1n,i9=2n**(40n-1n)-1n,a9=2n**(48n-1n)-1n,c9=2n**(56n-1n)-1n,u9=2n**(64n-1n)-1n,f9=2n**(72n-1n)-1n,d9=2n**(80n-1n)-1n,l9=2n**(88n-1n)-1n,p9=2n**(96n-1n)-1n,m9=2n**(104n-1n)-1n,h9=2n**(112n-1n)-1n,b9=2n**(120n-1n)-1n,x9=2n**(128n-1n)-1n,y9=2n**(136n-1n)-1n,g9=2n**(144n-1n)-1n,w9=2n**(152n-1n)-1n,v9=2n**(160n-1n)-1n,E9=2n**(168n-1n)-1n,B9=2n**(176n-1n)-1n,A9=2n**(184n-1n)-1n,I9=2n**(192n-1n)-1n,S9=2n**(200n-1n)-1n,T9=2n**(208n-1n)-1n,P9=2n**(216n-1n)-1n,k9=2n**(224n-1n)-1n,H9=2n**(232n-1n)-1n,R9=2n**(240n-1n)-1n,C9=2n**(248n-1n)-1n,N9=2n**(256n-1n)-1n,$9=-(2n**(8n-1n)),O9=-(2n**(16n-1n)),U9=-(2n**(24n-1n)),L9=-(2n**(32n-1n)),M9=-(2n**(40n-1n)),_9=-(2n**(48n-1n)),z9=-(2n**(56n-1n)),F9=-(2n**(64n-1n)),j9=-(2n**(72n-1n)),D9=-(2n**(80n-1n)),q9=-(2n**(88n-1n)),G9=-(2n**(96n-1n)),V9=-(2n**(104n-1n)),W9=-(2n**(112n-1n)),Z9=-(2n**(120n-1n)),K9=-(2n**(128n-1n)),Y9=-(2n**(136n-1n)),X9=-(2n**(144n-1n)),J9=-(2n**(152n-1n)),Q9=-(2n**(160n-1n)),ev=-(2n**(168n-1n)),tv=-(2n**(176n-1n)),rv=-(2n**(184n-1n)),nv=-(2n**(192n-1n)),ov=-(2n**(200n-1n)),sv=-(2n**(208n-1n)),iv=-(2n**(216n-1n)),av=-(2n**(224n-1n)),cv=-(2n**(232n-1n)),uv=-(2n**(240n-1n)),fv=-(2n**(248n-1n)),dv=-(2n**(256n-1n)),lv=2n**8n-1n,pv=2n**16n-1n,mv=2n**24n-1n,hv=2n**32n-1n,bv=2n**40n-1n,xv=2n**48n-1n,yv=2n**56n-1n,gv=2n**64n-1n,wv=2n**72n-1n,vv=2n**80n-1n,Ev=2n**88n-1n,Bv=2n**96n-1n,Av=2n**104n-1n,Iv=2n**112n-1n,Sv=2n**120n-1n,Tv=2n**128n-1n,Pv=2n**136n-1n,kv=2n**144n-1n,Hv=2n**152n-1n,Rv=2n**160n-1n,Cv=2n**168n-1n,Nv=2n**176n-1n,$v=2n**184n-1n,Ov=2n**192n-1n,Uv=2n**200n-1n,Lv=2n**208n-1n,Mv=2n**216n-1n,_v=2n**224n-1n,zv=2n**232n-1n,Fv=2n**240n-1n,jv=2n**248n-1n,Gp=2n**256n-1n});function pt(e){let{account:t,maxFeePerGas:r,maxPriorityFeePerGas:n,to:o}=e,s=t?ee(t):void 0;if(s&&!de(s.address))throw new Pe({address:s.address});if(o&&!de(o))throw new Pe({address:o});if(r&&r>Gp)throw new qr({maxFeePerGas:r});if(n&&r&&n>r)throw new Gr({maxFeePerGas:r,maxPriorityFeePerGas:n})}var Tn=R(()=>{et();Vp();pn();Sn();rr()});function Rt(e,t){if(!de(e,{strict:!1}))throw new Pe({address:e});if(!de(t,{strict:!1}))throw new Pe({address:t});return e.toLowerCase()===t.toLowerCase()}var ts=R(()=>{pn();rr()});function Ce(e){let{abi:t,args:r,functionName:n,data:o}=e,s=t[0];if(n){let a=qe({abi:t,args:r,name:n});if(!a)throw new Et(n,{docsPath:Uf});s=a}if(s.type!=="function")throw new Et(void 0,{docsPath:Uf});if(!s.outputs)throw new Jn(s.name,{docsPath:Uf});let i=or(s.outputs,o);if(i&&i.length>1)return i;if(i&&i.length===1)return i[0]}var Uf,mr=R(()=>{ae();Ds();Or();Uf="/docs/contract/decodeFunctionResult"});function os(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name==="Uint8Array"}function Ff(e){if(!os(e))throw new Error("Uint8Array expected")}function ss(e,t){if(typeof t!="boolean")throw new Error(e+" boolean expected, got "+t)}function oi(e){let t=e.toString(16);return t.length&1?"0"+t:t}function cm(e){if(typeof e!="string")throw new Error("hex string expected, got "+typeof e);return e===""?zf:BigInt("0x"+e)}function is(e){if(Ff(e),um)return e.toHex();let t="";for(let r=0;r=hr._0&&e<=hr._9)return e-hr._0;if(e>=hr.A&&e<=hr.F)return e-(hr.A-10);if(e>=hr.a&&e<=hr.f)return e-(hr.a-10)}function si(e){if(typeof e!="string")throw new Error("hex string expected, got "+typeof e);if(um)return Uint8Array.fromHex(e);let t=e.length,r=t/2;if(t%2)throw new Error("hex string expected, got unpadded hex of length "+t);let n=new Uint8Array(r);for(let o=0,s=0;ozf;e>>=_f,t+=1);return t}function dm(e,t,r){if(typeof e!="number"||e<2)throw new Error("hashLen must be a number");if(typeof t!="number"||t<2)throw new Error("qByteLen must be a number");if(typeof r!="function")throw new Error("hmacFn must be a function");let n=Mf(e),o=Mf(e),s=0,i=()=>{n.fill(1),o.fill(0),s=0},a=(...d)=>r(o,n,...d),c=(d=Mf(0))=>{o=a(am([0]),d),n=a(),d.length!==0&&(o=a(am([1]),d),n=a())},u=()=>{if(s++>=1e3)throw new Error("drbg: tried 1000 values");let d=0,l=[];for(;d{i(),c(d);let m;for(;!(m=l(u()));)c();return i(),m}}function Cn(e,t,r={}){let n=(o,s,i)=>{let a=l6[s];if(typeof a!="function")throw new Error("invalid validator function");let c=e[o];if(!(i&&c===void 0)&&!a(c,e))throw new Error("param "+String(o)+" is invalid. Expected "+s+", got "+c)};for(let[o,s]of Object.entries(t))n(o,s,!1);for(let[o,s]of Object.entries(r))n(o,s,!0);return e}function qf(e){let t=new WeakMap;return(r,...n)=>{let o=t.get(r);if(o!==void 0)return o;let s=e(r,...n);return t.set(r,s),s}}var zf,_f,um,d6,hr,Lf,Rn,Mf,am,l6,bc=R(()=>{zf=BigInt(0),_f=BigInt(1);um=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",d6=Array.from({length:256},(e,t)=>t.toString(16).padStart(2,"0"));hr={_0:48,_9:57,A:65,F:70,a:97,f:102};Lf=e=>typeof e=="bigint"&&zf<=e;Rn=e=>(_f<new Uint8Array(e),am=e=>Uint8Array.from(e);l6={bigint:e=>typeof e=="bigint",function:e=>typeof e=="function",boolean:e=>typeof e=="boolean",string:e=>typeof e=="string",stringOrUint8Array:e=>typeof e=="string"||os(e),isSafeInteger:e=>Number.isSafeInteger(e),array:e=>Array.isArray(e),field:(e,t)=>t.Fp.isValid(e),hash:e=>typeof e=="function"&&Number.isSafeInteger(e.outputLen)}});var lm,pm=R(()=>{lm="0.1.1"});function mm(){return lm}var hm=R(()=>{pm()});function bm(e,t){return t?.(e)?e:e&&typeof e=="object"&&"cause"in e&&e.cause?bm(e.cause,t):t?null:e}var F,Ze=R(()=>{hm();F=class e extends Error{static setStaticOptions(t){e.prototype.docsOrigin=t.docsOrigin,e.prototype.showVersion=t.showVersion,e.prototype.version=t.version}constructor(t,r={}){let n=(()=>{if(r.cause instanceof e){if(r.cause.details)return r.cause.details;if(r.cause.shortMessage)return r.cause.shortMessage}return r.cause&&"details"in r.cause&&typeof r.cause.details=="string"?r.cause.details:r.cause?.message?r.cause.message:r.details})(),o=r.cause instanceof e&&r.cause.docsPath||r.docsPath,s=r.docsOrigin??e.prototype.docsOrigin,i=`${s}${o??""}`,a=!!(r.version??e.prototype.showVersion),c=r.version??e.prototype.version,u=[t||"An error occurred.",...r.metaMessages?["",...r.metaMessages]:[],...n||o||a?["",n?`Details: ${n}`:void 0,o?`See: ${i}`:void 0,a?`Version: ${c}`:void 0]:[]].filter(f=>typeof f=="string").join(` +`);super(u,r.cause?{cause:r.cause}:void 0),Object.defineProperty(this,"details",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"docs",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"docsOrigin",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"docsPath",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"shortMessage",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"showVersion",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"version",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"cause",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"BaseError"}),this.cause=r.cause,this.details=n,this.docs=i,this.docsOrigin=s,this.docsPath=o,this.shortMessage=t,this.showVersion=a,this.version=c}walk(t){return bm(this,t)}};Object.defineProperty(F,"defaultStaticOptions",{enumerable:!0,configurable:!0,writable:!0,value:{docsOrigin:"https://oxlib.sh",showVersion:!1,version:`ox@${mm()}`}});F.setStaticOptions(F.defaultStaticOptions)});function as(e,t){if(mt(e)>t)throw new xc({givenSize:mt(e),maxSize:t})}function xm(e,t){if(typeof t=="number"&&t>0&&t>mt(e)-1)throw new ai({offset:t,position:"start",size:mt(e)})}function ym(e,t,r){if(typeof t=="number"&&typeof r=="number"&&mt(e)!==r-t)throw new ai({offset:r,position:"end",size:mt(e)})}function Gf(e){if(e>=xr.zero&&e<=xr.nine)return e-xr.zero;if(e>=xr.A&&e<=xr.F)return e-(xr.A-10);if(e>=xr.a&&e<=xr.f)return e-(xr.a-10)}function gm(e,t={}){let{dir:r,size:n=32}=t;if(n===0)return e;if(e.length>n)throw new yc({size:e.length,targetSize:n,type:"Bytes"});let o=new Uint8Array(n);for(let s=0;s{Kr();xr={zero:48,nine:57,A:65,F:70,a:97,f:102}});function cs(e,t){if(te(e)>t)throw new gc({givenSize:te(e),maxSize:t})}function vm(e,t){if(typeof t=="number"&&t>0&&t>te(e)-1)throw new ci({offset:t,position:"start",size:te(e)})}function Em(e,t,r){if(typeof t=="number"&&typeof r=="number"&&te(e)!==r-t)throw new ci({offset:r,position:"end",size:te(e)})}function Wf(e,t={}){let{dir:r,size:n=32}=t;if(n===0)return e;let o=e.replace("0x","");if(o.length>n*2)throw new wc({size:Math.ceil(o.length/2),targetSize:n,type:"Hex"});return`0x${o[r==="right"?"padEnd":"padStart"](n*2,"0")}`}function Bm(e,t={}){let{dir:r="left"}=t,n=e.replace("0x",""),o=0;for(let s=0;s{ge()});function Yr(e,t,r){return JSON.stringify(e,(n,o)=>typeof t=="function"?t(n,o):typeof o=="bigint"?o.toString()+m6:o,r)}var m6,ui=R(()=>{m6="#__bigint"});function x6(e){if(!(e instanceof Uint8Array)){if(!e)throw new us(e);if(typeof e!="object")throw new us(e);if(!("BYTES_PER_ELEMENT"in e))throw new us(e);if(e.BYTES_PER_ELEMENT!==1||e.constructor.name!=="Uint8Array")throw new us(e)}}function Im(e){return e instanceof Uint8Array?e:typeof e=="string"?fs(e):y6(e)}function y6(e){return e instanceof Uint8Array?e:new Uint8Array(e)}function fs(e,t={}){let{size:r}=t,n=e;r&&(cs(e,r),n=qt(e,r));let o=n.slice(2);o.length%2&&(o=`0${o}`);let s=o.length/2,i=new Uint8Array(s);for(let a=0,c=0;a1||n[0]>1)throw new Kf(n);return!!n[0]}function Dt(e,t={}){let{size:r}=t;typeof r<"u"&&as(e,r);let n=fe(e,t);return Ec(n,t)}function Hm(e,t={}){let{size:r}=t,n=e;return typeof r<"u"&&(as(n,r),n=w6(n)),h6.decode(n)}function Yf(e){return Vf(e,{dir:"left"})}function w6(e){return Vf(e,{dir:"right"})}function Rm(e){try{return x6(e),!0}catch{return!1}}var h6,b6,Kf,us,xc,ai,yc,Kr=R(()=>{Ze();ge();wm();Zf();ui();h6=new TextDecoder,b6=new TextEncoder;Kf=class extends F{constructor(t){super(`Bytes value \`${t}\` is not a valid boolean.`,{metaMessages:["The bytes array must contain a single byte of either a `0` or `1` value."]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"Bytes.InvalidBytesBooleanError"})}},us=class extends F{constructor(t){super(`Value \`${typeof t=="object"?Yr(t):t}\` of type \`${typeof t}\` is an invalid Bytes value.`,{metaMessages:["Bytes values must be of type `Bytes`."]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"Bytes.InvalidBytesTypeError"})}},xc=class extends F{constructor({givenSize:t,maxSize:r}){super(`Size cannot exceed \`${r}\` bytes. Given size: \`${t}\` bytes.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"Bytes.SizeOverflowError"})}},ai=class extends F{constructor({offset:t,position:r,size:n}){super(`Slice ${r==="start"?"starting":"ending"} at offset \`${t}\` is out-of-bounds (size: \`${n}\`).`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"Bytes.SliceOffsetOutOfBoundsError"})}},yc=class extends F{constructor({size:t,targetSize:r,type:n}){super(`${n.charAt(0).toUpperCase()}${n.slice(1).toLowerCase()} size (\`${t}\`) exceeds padding size (\`${r}\`).`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"Bytes.SizeExceedsPaddingSizeError"})}}});function B6(e,t={}){let{strict:r=!1}=t;if(!e)throw new Bc(e);if(typeof e!="string")throw new Bc(e);if(r&&!/^0x[0-9a-fA-F]*$/.test(e))throw new Ac(e);if(!e.startsWith("0x"))throw new Ac(e)}function oe(...e){return`0x${e.reduce((t,r)=>t+r.replace("0x",""),"")}`}function ds(e){return e instanceof Uint8Array?fe(e):Array.isArray(e)?fe(new Uint8Array(e)):e}function Ic(e,t={}){let r=`0x${Number(e)}`;return typeof t.size=="number"?(cs(r,t.size),yr(r,t.size)):r}function fe(e,t={}){let r="";for(let o=0;os||o>1n;return n<=i?n:n-s-1n}function Ec(e,t={}){let{signed:r,size:n}=t;return Number(!r&&!n?e:Xf(e,t))}function di(e,t={}){let{strict:r=!1}=t;try{return B6(e,{strict:r}),!0}catch{return!1}}var v6,E6,fi,Bc,Ac,gc,ci,wc,ge=R(()=>{Ze();Zf();ui();v6=new TextEncoder,E6=Array.from({length:256},(e,t)=>t.toString(16).padStart(2,"0"));fi=class extends F{constructor({max:t,min:r,signed:n,size:o,value:s}){super(`Number \`${s}\` is not in safe${o?` ${o*8}-bit`:""}${n?" signed":" unsigned"} integer range ${t?`(\`${r}\` to \`${t}\`)`:`(above \`${r}\`)`}`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"Hex.IntegerOutOfRangeError"})}},Bc=class extends F{constructor(t){super(`Value \`${typeof t=="object"?Yr(t):t}\` of type \`${typeof t}\` is an invalid hex type.`,{metaMessages:['Hex types must be represented as `"0x${string}"`.']}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"Hex.InvalidHexTypeError"})}},Ac=class extends F{constructor(t){super(`Value \`${t}\` is an invalid hex value.`,{metaMessages:['Hex values must start with `"0x"` and contain only hexadecimal characters (0-9, a-f, A-F).']}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"Hex.InvalidHexValueError"})}},gc=class extends F{constructor({givenSize:t,maxSize:r}){super(`Size cannot exceed \`${r}\` bytes. Given size: \`${t}\` bytes.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"Hex.SizeOverflowError"})}},ci=class extends F{constructor({offset:t,position:r,size:n}){super(`Slice ${r==="start"?"starting":"ending"} at offset \`${t}\` is out-of-bounds (size: \`${n}\`).`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"Hex.SliceOffsetOutOfBoundsError"})}},wc=class extends F{constructor({size:t,targetSize:r,type:n}){super(`${n.charAt(0).toUpperCase()}${n.slice(1).toLowerCase()} size (\`${t}\`) exceeds padding size (\`${r}\`).`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"Hex.SizeExceedsPaddingSizeError"})}}});function Cm(e){return{address:e.address,amount:Z(e.amount),index:Z(e.index),validatorIndex:Z(e.validatorIndex)}}var Nm=R(()=>{ge()});function Sc(e){return{...typeof e.baseFeePerGas=="bigint"&&{baseFeePerGas:Z(e.baseFeePerGas)},...typeof e.blobBaseFee=="bigint"&&{blobBaseFee:Z(e.blobBaseFee)},...typeof e.feeRecipient=="string"&&{feeRecipient:e.feeRecipient},...typeof e.gasLimit=="bigint"&&{gasLimit:Z(e.gasLimit)},...typeof e.number=="bigint"&&{number:Z(e.number)},...typeof e.prevRandao=="bigint"&&{prevRandao:Z(e.prevRandao)},...typeof e.time=="bigint"&&{time:Z(e.time)},...e.withdrawals&&{withdrawals:e.withdrawals.map(Cm)}}}var Qf=R(()=>{ge();Nm()});var Gt,Tc,Om,Pc,Um,e0,t0,r0,n0,gr=R(()=>{Gt=[{inputs:[{components:[{name:"target",type:"address"},{name:"allowFailure",type:"bool"},{name:"callData",type:"bytes"}],name:"calls",type:"tuple[]"}],name:"aggregate3",outputs:[{components:[{name:"success",type:"bool"},{name:"returnData",type:"bytes"}],name:"returnData",type:"tuple[]"}],stateMutability:"view",type:"function"},{inputs:[{name:"addr",type:"address"}],name:"getEthBalance",outputs:[{name:"balance",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCurrentBlockTimestamp",outputs:[{internalType:"uint256",name:"timestamp",type:"uint256"}],stateMutability:"view",type:"function"}],Tc=[{name:"query",type:"function",stateMutability:"view",inputs:[{type:"tuple[]",name:"queries",components:[{type:"address",name:"sender"},{type:"string[]",name:"urls"},{type:"bytes",name:"data"}]}],outputs:[{type:"bool[]",name:"failures"},{type:"bytes[]",name:"responses"}]},{name:"HttpError",type:"error",inputs:[{type:"uint16",name:"status"},{type:"string",name:"message"}]}],Om=[{inputs:[{name:"dns",type:"bytes"}],name:"DNSDecodingFailed",type:"error"},{inputs:[{name:"ens",type:"string"}],name:"DNSEncodingFailed",type:"error"},{inputs:[],name:"EmptyAddress",type:"error"},{inputs:[{name:"status",type:"uint16"},{name:"message",type:"string"}],name:"HttpError",type:"error"},{inputs:[],name:"InvalidBatchGatewayResponse",type:"error"},{inputs:[{name:"errorData",type:"bytes"}],name:"ResolverError",type:"error"},{inputs:[{name:"name",type:"bytes"},{name:"resolver",type:"address"}],name:"ResolverNotContract",type:"error"},{inputs:[{name:"name",type:"bytes"}],name:"ResolverNotFound",type:"error"},{inputs:[{name:"primary",type:"string"},{name:"primaryAddress",type:"bytes"}],name:"ReverseAddressMismatch",type:"error"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"UnsupportedResolverProfile",type:"error"}],Pc=[...Om,{name:"resolveWithGateways",type:"function",stateMutability:"view",inputs:[{name:"name",type:"bytes"},{name:"data",type:"bytes"},{name:"gateways",type:"string[]"}],outputs:[{name:"",type:"bytes"},{name:"address",type:"address"}]}],Um=[...Om,{name:"reverseWithGateways",type:"function",stateMutability:"view",inputs:[{type:"bytes",name:"reverseName"},{type:"uint256",name:"coinType"},{type:"string[]",name:"gateways"}],outputs:[{type:"string",name:"resolvedName"},{type:"address",name:"resolver"},{type:"address",name:"reverseResolver"}]}],e0=[{name:"text",type:"function",stateMutability:"view",inputs:[{name:"name",type:"bytes32"},{name:"key",type:"string"}],outputs:[{name:"",type:"string"}]}],t0=[{name:"addr",type:"function",stateMutability:"view",inputs:[{name:"name",type:"bytes32"}],outputs:[{name:"",type:"address"}]},{name:"addr",type:"function",stateMutability:"view",inputs:[{name:"name",type:"bytes32"},{name:"coinType",type:"uint256"}],outputs:[{name:"",type:"bytes"}]}],r0=[{name:"isValidSignature",type:"function",stateMutability:"view",inputs:[{name:"hash",type:"bytes32"},{name:"signature",type:"bytes"}],outputs:[{name:"",type:"bytes4"}]}],n0=[{inputs:[{name:"_signer",type:"address"},{name:"_hash",type:"bytes32"},{name:"_signature",type:"bytes"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[{name:"_signer",type:"address"},{name:"_hash",type:"bytes32"},{name:"_signature",type:"bytes"}],outputs:[{type:"bool"}],stateMutability:"nonpayable",type:"function",name:"isValidSig"}]});var Lm,Mm=R(()=>{Lm="0x82ad56cb"});var kc,_m,zm,ps,li=R(()=>{kc="0x608060405234801561001057600080fd5b5060405161018e38038061018e83398101604081905261002f91610124565b6000808351602085016000f59050803b61004857600080fd5b6000808351602085016000855af16040513d6000823e81610067573d81fd5b3d81f35b634e487b7160e01b600052604160045260246000fd5b600082601f83011261009257600080fd5b81516001600160401b038111156100ab576100ab61006b565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100d9576100d961006b565b6040528181528382016020018510156100f157600080fd5b60005b82811015610110576020818601810151838301820152016100f4565b506000918101602001919091529392505050565b6000806040838503121561013757600080fd5b82516001600160401b0381111561014d57600080fd5b61015985828601610081565b602085015190935090506001600160401b0381111561017757600080fd5b61018385828601610081565b915050925092905056fe",_m="0x608060405234801561001057600080fd5b506040516102c03803806102c083398101604081905261002f916101e6565b836001600160a01b03163b6000036100e457600080836001600160a01b03168360405161005c9190610270565b6000604051808303816000865af19150503d8060008114610099576040519150601f19603f3d011682016040523d82523d6000602084013e61009e565b606091505b50915091508115806100b857506001600160a01b0386163b155b156100e1578060405163101bb98d60e01b81526004016100d8919061028c565b60405180910390fd5b50505b6000808451602086016000885af16040513d6000823e81610103573d81fd5b3d81f35b80516001600160a01b038116811461011e57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561015457818101518382015260200161013c565b50506000910152565b600082601f83011261016e57600080fd5b81516001600160401b0381111561018757610187610123565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101b5576101b5610123565b6040528181528382016020018510156101cd57600080fd5b6101de826020830160208701610139565b949350505050565b600080600080608085870312156101fc57600080fd5b61020585610107565b60208601519094506001600160401b0381111561022157600080fd5b61022d8782880161015d565b93505061023c60408601610107565b60608601519092506001600160401b0381111561025857600080fd5b6102648782880161015d565b91505092959194509250565b60008251610282818460208701610139565b9190910192915050565b60208152600082518060208401526102ab816040850160208701610139565b601f01601f1916919091016040019291505056fe",zm="0x608060405234801561001057600080fd5b5060405161069438038061069483398101604081905261002f9161051e565b600061003c848484610048565b9050806000526001601ff35b60007f64926492649264926492649264926492649264926492649264926492649264926100748361040c565b036101e7576000606080848060200190518101906100929190610577565b60405192955090935091506000906001600160a01b038516906100b69085906105dd565b6000604051808303816000865af19150503d80600081146100f3576040519150601f19603f3d011682016040523d82523d6000602084013e6100f8565b606091505b50509050876001600160a01b03163b60000361016057806101605760405162461bcd60e51b815260206004820152601e60248201527f5369676e617475726556616c696461746f723a206465706c6f796d656e74000060448201526064015b60405180910390fd5b604051630b135d3f60e11b808252906001600160a01b038a1690631626ba7e90610190908b9087906004016105f9565b602060405180830381865afa1580156101ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d19190610633565b6001600160e01b03191614945050505050610405565b6001600160a01b0384163b1561027a57604051630b135d3f60e11b808252906001600160a01b03861690631626ba7e9061022790879087906004016105f9565b602060405180830381865afa158015610244573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102689190610633565b6001600160e01b031916149050610405565b81516041146102df5760405162461bcd60e51b815260206004820152603a602482015260008051602061067483398151915260448201527f3a20696e76616c6964207369676e6174757265206c656e6774680000000000006064820152608401610157565b6102e7610425565b5060208201516040808401518451859392600091859190811061030c5761030c61065d565b016020015160f81c9050601b811480159061032b57508060ff16601c14155b1561038c5760405162461bcd60e51b815260206004820152603b602482015260008051602061067483398151915260448201527f3a20696e76616c6964207369676e617475726520762076616c756500000000006064820152608401610157565b60408051600081526020810180835289905260ff83169181019190915260608101849052608081018390526001600160a01b0389169060019060a0016020604051602081039080840390855afa1580156103ea573d6000803e3d6000fd5b505050602060405103516001600160a01b0316149450505050505b9392505050565b600060208251101561041d57600080fd5b508051015190565b60405180606001604052806003906020820280368337509192915050565b6001600160a01b038116811461045857600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561048c578181015183820152602001610474565b50506000910152565b600082601f8301126104a657600080fd5b81516001600160401b038111156104bf576104bf61045b565b604051601f8201601f19908116603f011681016001600160401b03811182821017156104ed576104ed61045b565b60405281815283820160200185101561050557600080fd5b610516826020830160208701610471565b949350505050565b60008060006060848603121561053357600080fd5b835161053e81610443565b6020850151604086015191945092506001600160401b0381111561056157600080fd5b61056d86828701610495565b9150509250925092565b60008060006060848603121561058c57600080fd5b835161059781610443565b60208501519093506001600160401b038111156105b357600080fd5b6105bf86828701610495565b604086015190935090506001600160401b0381111561056157600080fd5b600082516105ef818460208701610471565b9190910192915050565b828152604060208201526000825180604084015261061e816060850160208701610471565b601f01601f1916919091016060019392505050565b60006020828403121561064557600080fd5b81516001600160e01b03198116811461040557600080fd5b634e487b7160e01b600052603260045260246000fdfe5369676e617475726556616c696461746f72237265636f7665725369676e6572",ps="0x608060405234801561001057600080fd5b506115b9806100206000396000f3fe6080604052600436106100f35760003560e01c80634d2301cc1161008a578063a8b0574e11610059578063a8b0574e14610325578063bce38bd714610350578063c3077fa914610380578063ee82ac5e146103b2576100f3565b80634d2301cc1461026257806372425d9d1461029f57806382ad56cb146102ca57806386d516e8146102fa576100f3565b80633408e470116100c65780633408e470146101af578063399542e9146101da5780633e64a6961461020c57806342cbb15c14610237576100f3565b80630f28c97d146100f8578063174dea7114610123578063252dba421461015357806327e86d6e14610184575b600080fd5b34801561010457600080fd5b5061010d6103ef565b60405161011a9190610c0a565b60405180910390f35b61013d60048036038101906101389190610c94565b6103f7565b60405161014a9190610e94565b60405180910390f35b61016d60048036038101906101689190610f0c565b610615565b60405161017b92919061101b565b60405180910390f35b34801561019057600080fd5b506101996107ab565b6040516101a69190611064565b60405180910390f35b3480156101bb57600080fd5b506101c46107b7565b6040516101d19190610c0a565b60405180910390f35b6101f460048036038101906101ef91906110ab565b6107bf565b6040516102039392919061110b565b60405180910390f35b34801561021857600080fd5b506102216107e1565b60405161022e9190610c0a565b60405180910390f35b34801561024357600080fd5b5061024c6107e9565b6040516102599190610c0a565b60405180910390f35b34801561026e57600080fd5b50610289600480360381019061028491906111a7565b6107f1565b6040516102969190610c0a565b60405180910390f35b3480156102ab57600080fd5b506102b4610812565b6040516102c19190610c0a565b60405180910390f35b6102e460048036038101906102df919061122a565b61081a565b6040516102f19190610e94565b60405180910390f35b34801561030657600080fd5b5061030f6109e4565b60405161031c9190610c0a565b60405180910390f35b34801561033157600080fd5b5061033a6109ec565b6040516103479190611286565b60405180910390f35b61036a600480360381019061036591906110ab565b6109f4565b6040516103779190610e94565b60405180910390f35b61039a60048036038101906103959190610f0c565b610ba6565b6040516103a99392919061110b565b60405180910390f35b3480156103be57600080fd5b506103d960048036038101906103d491906112cd565b610bca565b6040516103e69190611064565b60405180910390f35b600042905090565b60606000808484905090508067ffffffffffffffff81111561041c5761041b6112fa565b5b60405190808252806020026020018201604052801561045557816020015b610442610bd5565b81526020019060019003908161043a5790505b5092503660005b828110156105c957600085828151811061047957610478611329565b5b6020026020010151905087878381811061049657610495611329565b5b90506020028101906104a89190611367565b925060008360400135905080860195508360000160208101906104cb91906111a7565b73ffffffffffffffffffffffffffffffffffffffff16818580606001906104f2919061138f565b604051610500929190611431565b60006040518083038185875af1925050503d806000811461053d576040519150601f19603f3d011682016040523d82523d6000602084013e610542565b606091505b5083600001846020018290528215151515815250505081516020850135176105bc577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260846000fd5b826001019250505061045c565b5082341461060c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610603906114a7565b60405180910390fd5b50505092915050565b6000606043915060008484905090508067ffffffffffffffff81111561063e5761063d6112fa565b5b60405190808252806020026020018201604052801561067157816020015b606081526020019060019003908161065c5790505b5091503660005b828110156107a157600087878381811061069557610694611329565b5b90506020028101906106a791906114c7565b92508260000160208101906106bc91906111a7565b73ffffffffffffffffffffffffffffffffffffffff168380602001906106e2919061138f565b6040516106f0929190611431565b6000604051808303816000865af19150503d806000811461072d576040519150601f19603f3d011682016040523d82523d6000602084013e610732565b606091505b5086848151811061074657610745611329565b5b60200260200101819052819250505080610795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078c9061153b565b60405180910390fd5b81600101915050610678565b5050509250929050565b60006001430340905090565b600046905090565b6000806060439250434091506107d68686866109f4565b905093509350939050565b600048905090565b600043905090565b60008173ffffffffffffffffffffffffffffffffffffffff16319050919050565b600044905090565b606060008383905090508067ffffffffffffffff81111561083e5761083d6112fa565b5b60405190808252806020026020018201604052801561087757816020015b610864610bd5565b81526020019060019003908161085c5790505b5091503660005b828110156109db57600084828151811061089b5761089a611329565b5b602002602001015190508686838181106108b8576108b7611329565b5b90506020028101906108ca919061155b565b92508260000160208101906108df91906111a7565b73ffffffffffffffffffffffffffffffffffffffff16838060400190610905919061138f565b604051610913929190611431565b6000604051808303816000865af19150503d8060008114610950576040519150601f19603f3d011682016040523d82523d6000602084013e610955565b606091505b5082600001836020018290528215151515815250505080516020840135176109cf577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260646000fd5b8160010191505061087e565b50505092915050565b600045905090565b600041905090565b606060008383905090508067ffffffffffffffff811115610a1857610a176112fa565b5b604051908082528060200260200182016040528015610a5157816020015b610a3e610bd5565b815260200190600190039081610a365790505b5091503660005b82811015610b9c576000848281518110610a7557610a74611329565b5b60200260200101519050868683818110610a9257610a91611329565b5b9050602002810190610aa491906114c7565b9250826000016020810190610ab991906111a7565b73ffffffffffffffffffffffffffffffffffffffff16838060200190610adf919061138f565b604051610aed929190611431565b6000604051808303816000865af19150503d8060008114610b2a576040519150601f19603f3d011682016040523d82523d6000602084013e610b2f565b606091505b508260000183602001829052821515151581525050508715610b90578060000151610b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b869061153b565b60405180910390fd5b5b81600101915050610a58565b5050509392505050565b6000806060610bb7600186866107bf565b8093508194508295505050509250925092565b600081409050919050565b6040518060400160405280600015158152602001606081525090565b6000819050919050565b610c0481610bf1565b82525050565b6000602082019050610c1f6000830184610bfb565b92915050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f840112610c5457610c53610c2f565b5b8235905067ffffffffffffffff811115610c7157610c70610c34565b5b602083019150836020820283011115610c8d57610c8c610c39565b5b9250929050565b60008060208385031215610cab57610caa610c25565b5b600083013567ffffffffffffffff811115610cc957610cc8610c2a565b5b610cd585828601610c3e565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60008115159050919050565b610d2281610d0d565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610d62578082015181840152602081019050610d47565b83811115610d71576000848401525b50505050565b6000601f19601f8301169050919050565b6000610d9382610d28565b610d9d8185610d33565b9350610dad818560208601610d44565b610db681610d77565b840191505092915050565b6000604083016000830151610dd96000860182610d19565b5060208301518482036020860152610df18282610d88565b9150508091505092915050565b6000610e0a8383610dc1565b905092915050565b6000602082019050919050565b6000610e2a82610ce1565b610e348185610cec565b935083602082028501610e4685610cfd565b8060005b85811015610e825784840389528151610e638582610dfe565b9450610e6e83610e12565b925060208a01995050600181019050610e4a565b50829750879550505050505092915050565b60006020820190508181036000830152610eae8184610e1f565b905092915050565b60008083601f840112610ecc57610ecb610c2f565b5b8235905067ffffffffffffffff811115610ee957610ee8610c34565b5b602083019150836020820283011115610f0557610f04610c39565b5b9250929050565b60008060208385031215610f2357610f22610c25565b5b600083013567ffffffffffffffff811115610f4157610f40610c2a565b5b610f4d85828601610eb6565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000610f918383610d88565b905092915050565b6000602082019050919050565b6000610fb182610f59565b610fbb8185610f64565b935083602082028501610fcd85610f75565b8060005b858110156110095784840389528151610fea8582610f85565b9450610ff583610f99565b925060208a01995050600181019050610fd1565b50829750879550505050505092915050565b60006040820190506110306000830185610bfb565b81810360208301526110428184610fa6565b90509392505050565b6000819050919050565b61105e8161104b565b82525050565b60006020820190506110796000830184611055565b92915050565b61108881610d0d565b811461109357600080fd5b50565b6000813590506110a58161107f565b92915050565b6000806000604084860312156110c4576110c3610c25565b5b60006110d286828701611096565b935050602084013567ffffffffffffffff8111156110f3576110f2610c2a565b5b6110ff86828701610eb6565b92509250509250925092565b60006060820190506111206000830186610bfb565b61112d6020830185611055565b818103604083015261113f8184610e1f565b9050949350505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061117482611149565b9050919050565b61118481611169565b811461118f57600080fd5b50565b6000813590506111a18161117b565b92915050565b6000602082840312156111bd576111bc610c25565b5b60006111cb84828501611192565b91505092915050565b60008083601f8401126111ea576111e9610c2f565b5b8235905067ffffffffffffffff81111561120757611206610c34565b5b60208301915083602082028301111561122357611222610c39565b5b9250929050565b6000806020838503121561124157611240610c25565b5b600083013567ffffffffffffffff81111561125f5761125e610c2a565b5b61126b858286016111d4565b92509250509250929050565b61128081611169565b82525050565b600060208201905061129b6000830184611277565b92915050565b6112aa81610bf1565b81146112b557600080fd5b50565b6000813590506112c7816112a1565b92915050565b6000602082840312156112e3576112e2610c25565b5b60006112f1848285016112b8565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008235600160800383360303811261138357611382611358565b5b80830191505092915050565b600080833560016020038436030381126113ac576113ab611358565b5b80840192508235915067ffffffffffffffff8211156113ce576113cd61135d565b5b6020830192506001820236038313156113ea576113e9611362565b5b509250929050565b600081905092915050565b82818337600083830152505050565b600061141883856113f2565b93506114258385846113fd565b82840190509392505050565b600061143e82848661140c565b91508190509392505050565b600082825260208201905092915050565b7f4d756c746963616c6c333a2076616c7565206d69736d61746368000000000000600082015250565b6000611491601a8361144a565b915061149c8261145b565b602082019050919050565b600060208201905081810360008301526114c081611484565b9050919050565b6000823560016040038336030381126114e3576114e2611358565b5b80830191505092915050565b7f4d756c746963616c6c333a2063616c6c206661696c6564000000000000000000600082015250565b600061152560178361144a565b9150611530826114ef565b602082019050919050565b6000602082019050818103600083015261155481611518565b9050919050565b60008235600160600383360303811261157757611576611358565b5b8083019150509291505056fea264697066735822122020c1bc9aacf8e4a6507193432a895a8e77094f45a1395583f07b24e860ef06cd64736f6c634300080c0033"});var $n,pi,o0=R(()=>{G();$n=class extends A{constructor({blockNumber:t,chain:r,contract:n}){super(`Chain "${r.name}" does not support contract "${n.name}".`,{metaMessages:["This could be due to any of the following:",...t&&n.blockCreated&&n.blockCreated>t?[`- The contract "${n.name}" was not deployed until block ${n.blockCreated} (current block ${t}).`]:[`- The chain does not have the contract "${n.name}" configured.`]],name:"ChainDoesNotSupportContract"})}},pi=class extends A{constructor(){super("No chain was provided to the Client.",{name:"ClientChainNotConfiguredError"})}}});function mi(e){let{abi:t,args:r,bytecode:n}=e;if(!r||r.length===0)return n;let o=t.find(i=>"type"in i&&i.type==="constructor");if(!o)throw new ra({docsPath:s0});if(!("inputs"in o))throw new Hs({docsPath:s0});if(!o.inputs||o.inputs.length===0)throw new Hs({docsPath:s0});let s=Me(o.inputs,r);return Pt([n,s])}var s0,i0=R(()=>{ae();at();nr();s0="/docs/contract/encodeDeployData"});function ht({blockNumber:e,chain:t,contract:r}){let n=t?.contracts?.[r];if(!n)throw new $n({chain:t,contract:{name:r}});if(e&&n.blockCreated&&n.blockCreated>e)throw new $n({blockNumber:e,chain:t,contract:{name:r,blockCreated:n.blockCreated}});return n.address}var On=R(()=>{o0()});function Hc(e,{docsPath:t,...r}){let n=(()=>{let o=Vr(e,r);return o instanceof lt?e:o})();return new uo(n,{docsPath:t,...r})}var a0=R(()=>{Lr();Sn();ri()});function Rc(){let e=()=>{},t=()=>{};return{promise:new Promise((n,o)=>{e=n,t=o}),resolve:e,reject:t}}var c0=R(()=>{});function Cc({fn:e,id:t,shouldSplitBatch:r,wait:n=0,sort:o}){let s=async()=>{let f=c();i();let d=f.map(({args:l})=>l);d.length!==0&&e(d).then(l=>{o&&Array.isArray(l)&&l.sort(o);for(let m=0;m{for(let m=0;mu0.delete(t),a=()=>c().map(({args:f})=>f),c=()=>u0.get(t)||[],u=f=>u0.set(t,[...c(),f]);return{flush:i,async schedule(f){let{promise:d,resolve:l,reject:m}=Rc();return r?.([...a(),f])&&s(),c().length>0?(u({args:f,resolve:l,reject:m}),d):(u({args:f,resolve:l,reject:m}),setTimeout(s,n),d)}}}var u0,f0=R(()=>{c0();u0=new Map});var Nc,$c,Oc,Fm=R(()=>{Ge();G();ja();Nc=class extends A{constructor({callbackSelector:t,cause:r,data:n,extraData:o,sender:s,urls:i}){super(r.shortMessage||"An error occurred while fetching for an offchain result.",{cause:r,metaMessages:[...r.metaMessages||[],r.metaMessages?.length?"":[],"Offchain Gateway Call:",i&&[" Gateway URL(s):",...i.map(a=>` ${bn(a)}`)],` Sender: ${s}`,` Data: ${n}`,` Callback selector: ${t}`,` Extra data: ${o}`].flat(),name:"OffchainLookupError"})}},$c=class extends A{constructor({result:t,url:r}){super("Offchain gateway response is malformed. Response data must be a hex value.",{metaMessages:[`Gateway URL: ${bn(r)}`,`Response: ${W(t)}`],name:"OffchainLookupResponseMalformedError"})}},Oc=class extends A{constructor({sender:t,to:r}){super("Reverted sender address does not match target contract address (`to`).",{metaMessages:[`Contract address: ${r}`,`OffchainLookup sender address: ${t}`],name:"OffchainLookupSenderMismatchError"})}}});function jm(e){let{abi:t,data:r}=e,n=ct(r,0,4),o=t.find(s=>s.type==="function"&&n===Lt(me(s)));if(!o)throw new ua(n,{docsPath:"/docs/contract/decodeFunctionData"});return{functionName:o.name,args:"inputs"in o&&o.inputs&&o.inputs.length>0?or(o.inputs,ct(r,4)):void 0}}var Dm=R(()=>{ae();mn();to();Ds();Xt()});function l0(e){let{abi:t,errorName:r,args:n}=e,o=t[0];if(r){let c=qe({abi:t,args:n,name:r});if(!c)throw new Rs(r,{docsPath:d0});o=c}if(o.type!=="error")throw new Rs(void 0,{docsPath:d0});let s=me(o),i=Lt(s),a="0x";if(n&&n.length>0){if(!o.inputs)throw new ia(o.name,{docsPath:d0});a=Me(o.inputs,n)}return Pt([i,a])}var d0,qm=R(()=>{ae();at();to();nr();Xt();Or();d0="/docs/contract/encodeErrorResult"});function Gm(e){let{abi:t,functionName:r,result:n}=e,o=t[0];if(r){let i=qe({abi:t,name:r});if(!i)throw new Et(r,{docsPath:p0});o=i}if(o.type!=="function")throw new Et(void 0,{docsPath:p0});if(!o.outputs)throw new Jn(o.name,{docsPath:p0});let s=(()=>{if(o.outputs.length===0)return[];if(o.outputs.length===1)return[n];if(Array.isArray(n))return n;throw new Qn(n)})();return Me(o.outputs,s)}var p0,Vm=R(()=>{ae();nr();Or();p0="/docs/contract/encodeFunctionResult"});async function m0(e){let{data:t,ccipRequest:r}=e,{args:[n]}=jm({abi:Tc,data:t}),o=[],s=[];return await Promise.all(n.map(async(i,a)=>{try{s[a]=i.urls.includes(wr)?await m0({data:i.data,ccipRequest:r}):await r(i),o[a]=!1}catch(c){o[a]=!0,s[a]=I6(c)}})),Gm({abi:Tc,functionName:"query",result:[o,s]})}function I6(e){return e.name==="HttpRequestError"&&e.status?l0({abi:Tc,errorName:"HttpError",args:[e.status,e.shortMessage]}):l0({abi:[ka],errorName:"Error",args:["shortMessage"in e?e.shortMessage:e.message]})}var wr,hi=R(()=>{gr();Ha();Dm();qm();Vm();wr="x-batch-gateway:true"});var Km={};Ri(Km,{ccipRequest:()=>Zm,offchainLookup:()=>T6,offchainLookupAbiItem:()=>Wm,offchainLookupSignature:()=>S6});async function T6(e,{blockNumber:t,blockTag:r,data:n,to:o}){let{args:s}=Na({data:n,abi:[Wm]}),[i,a,c,u,f]=s,{ccipRead:d}=e,l=d&&typeof d?.request=="function"?d.request:Zm;try{if(!Rt(o,i))throw new Oc({sender:i,to:o});let m=a.includes(wr)?await m0({data:c,ccipRequest:l}):await l({data:c,sender:i,urls:a}),{data:b}=await bt(e,{blockNumber:t,blockTag:r,data:Ie([u,Me([{type:"bytes"},{type:"bytes"}],[m,f])]),to:o});return b}catch(m){throw new Nc({callbackSelector:u,cause:m,data:n,extraData:f,sender:i,urls:a})}}async function Zm({data:e,sender:t,urls:r}){let n=new Error("An unknown error occurred.");for(let o=0;o{Un();Fm();yn();Ju();nr();ts();at();vt();hi();Ge();S6="0x556f1830",Wm={name:"OffchainLookup",type:"error",inputs:[{name:"sender",type:"address"},{name:"urls",type:"string[]"},{name:"callData",type:"bytes"},{name:"callbackFunction",type:"bytes4"},{name:"extraData",type:"bytes"}]}});async function bt(e,t){let{account:r=e.account,authorizationList:n,batch:o=!!e.batch?.multicall,blockNumber:s,blockTag:i=e.experimental_blockTag??"latest",accessList:a,blobs:c,blockOverrides:u,code:f,data:d,factory:l,factoryData:m,gas:b,gasPrice:h,maxFeePerBlobGas:T,maxFeePerGas:g,maxPriorityFeePerGas:P,nonce:y,to:p,value:x,stateOverride:E,...B}=t,S=r?ee(r):void 0;if(f&&(l||m))throw new A("Cannot provide both `code` & `factory`/`factoryData` as parameters.");if(f&&p)throw new A("Cannot provide both `code` & `to` as parameters.");let O=f&&d,I=l&&m&&p&&d,k=O||I,$=O?Xm({code:f,data:d}):I?H6({data:d,factory:l,factoryData:m,to:p}):d;try{pt(t);let z=(typeof s=="bigint"?_(s):void 0)||i,v=u?Sc(u):void 0,w=Zo(E),C=e.chain?.formatters?.transactionRequest?.format,U=(C||jt)({...Wr(B,{format:C}),accessList:a,account:S,authorizationList:n,blobs:c,data:$,gas:b,gasPrice:h,maxFeePerBlobGas:T,maxFeePerGas:g,maxPriorityFeePerGas:P,nonce:y,to:k?void 0:p,value:x},"call");if(o&&P6({request:U})&&!w&&!v)try{return await k6(e,{...U,blockNumber:s,blockTag:i})}catch(D){if(!(D instanceof pi)&&!(D instanceof $n))throw D}let L=(()=>{let D=[U,z];return w&&v?[...D,w,v]:w?[...D,w]:v?[...D,{},v]:D})(),j=await e.request({method:"eth_call",params:L});return j==="0x"?{data:void 0}:{data:j}}catch(N){let z=R6(N),{offchainLookup:v,offchainLookupSignature:w}=await Promise.resolve().then(()=>(Ym(),Km));if(e.ccipRead!==!1&&z?.slice(0,10)===w&&p)return{data:await v(e,{data:z,to:p})};throw k&&z?.slice(0,10)==="0x101bb98d"?new qa({factory:l}):Hc(N,{...t,account:S,chain:e.chain})}}function P6({request:e}){let{data:t,to:r,...n}=e;return!(!t||t.startsWith(Lm)||!r||Object.values(n).filter(o=>typeof o<"u").length>0)}async function k6(e,t){let{batchSize:r=1024,deployless:n=!1,wait:o=0}=typeof e.batch?.multicall=="object"?e.batch.multicall:{},{blockNumber:s,blockTag:i=e.experimental_blockTag??"latest",data:a,to:c}=t,u=(()=>{if(n)return null;if(t.multicallAddress)return t.multicallAddress;if(e.chain)return ht({blockNumber:s,chain:e.chain,contract:"multicall3"});throw new pi})(),d=(typeof s=="bigint"?_(s):void 0)||i,{schedule:l}=Cc({id:`${e.uid}.${d}`,wait:o,shouldSplitBatch(h){return h.reduce((g,{data:P})=>g+(P.length-2),0)>r*2},fn:async h=>{let T=h.map(y=>({allowFailure:!0,callData:y.data,target:y.to})),g=ne({abi:Gt,args:[T],functionName:"aggregate3"}),P=await e.request({method:"eth_call",params:[{...u===null?{data:Xm({code:ps,data:g})}:{to:u,data:g}},d]});return Ce({abi:Gt,args:[T],functionName:"aggregate3",data:P||"0x"})}}),[{returnData:m,success:b}]=await l({data:a,to:c});if(!b)throw new zt({data:m});return m==="0x"?{data:void 0}:{data:m}}function Xm(e){let{code:t,data:r}=e;return mi({abi:Ji(["constructor(bytes, bytes)"]),bytecode:kc,args:[t,r]})}function H6(e){let{data:t,factory:r,factoryData:n,to:o}=e;return mi({abi:Ji(["constructor(address, bytes, address, bytes)"]),bytecode:_m,args:[o,t,r,n]})}function R6(e){if(!(e instanceof A))return;let t=e.walk();return typeof t?.data=="object"?t.data?.data:t.data}var Un=R(()=>{Ps();Qf();et();gr();Mm();li();G();o0();Lr();mr();i0();ut();On();q();a0();ni();Wo();f0();nc();Tn()});function M(e,t,r){let n=e[t.name];if(typeof n=="function")return n;let o=e[r];return typeof o=="function"?o:s=>t(e,s)}ae();G();var ma=class extends A{constructor(t){super(`Filter type "${t}" is not supported.`,{name:"FilterTypeNotSupportedError"})}};Ae();St();_s();nr();Xt();Or();var Cl="/docs/contract/encodeEventTopics";function Mt(e){let{abi:t,eventName:r,args:n}=e,o=t[0];if(r){let c=qe({abi:t,name:r});if(!c)throw new Cs(r,{docsPath:Cl});o=c}if(o.type!=="event")throw new Cs(void 0,{docsPath:Cl});let s=me(o),i=Cr(s),a=[];if(n&&"inputs"in o){let c=o.inputs?.filter(f=>"indexed"in f&&f.indexed),u=Array.isArray(n)?n:Object.values(n).length>0?c?.map(f=>n[f.name])??[]:[];u.length>0&&(a=c?.map((f,d)=>Array.isArray(u[d])?u[d].map((l,m)=>Nl({param:f,value:u[d][m]})):typeof u[d]<"u"&&u[d]!==null?Nl({param:f,value:u[d]}):null)??[])}return[i,...a]}function Nl({param:e,value:t}){if(e.type==="string"||e.type==="bytes")return J(it(t));if(e.type==="tuple"||e.type.match(/^(.*)\[(\d+)?\]$/))throw new ma(e.type);return Me([e],[t])}q();function Ur(e,{method:t}){let r={};return e.transport.type==="fallback"&&e.transport.onResponse?.(({method:n,response:o,status:s,transport:i})=>{s==="success"&&t===n&&(r[o]=i.request)}),(n=>r[n]||e.request)}async function Pa(e,t){let{address:r,abi:n,args:o,eventName:s,fromBlock:i,strict:a,toBlock:c}=t,u=Ur(e,{method:"eth_newFilter"}),f=s?Mt({abi:n,args:o,eventName:s}):void 0,d=await e.request({method:"eth_newFilter",params:[{address:r,fromBlock:typeof i=="bigint"?_(i):i,toBlock:typeof c=="bigint"?_(c):c,topics:f}]});return{abi:n,args:o,eventName:s,id:d,request:u(d),strict:!!a,type:"event"}}et();ut();ae();G();Lr();yn();Gs();var Ix=3;function kt(e,{abi:t,address:r,args:n,docsPath:o,functionName:s,sender:i}){let a=e instanceof zt?e:e instanceof A?e.walk(b=>"data"in b)||e.walk():{},{code:c,data:u,details:f,message:d,shortMessage:l}=a,m=e instanceof st?new Da({functionName:s,cause:e}):[Ix,ir.code].includes(c)&&(u||f||d||l)||c===dt.code&&f==="execution reverted"&&u?new xn({abi:t,data:typeof u=="object"?u.data:u,functionName:s,message:a instanceof Mr?f:l??d,cause:e}):e;return new fo(m,{abi:t,args:n,contractAddress:r,docsPath:o,functionName:s,sender:i})}et();G();$r();St();function Yl(e){let t=J(`0x${e.substring(4)}`).substring(26);return Nr(`0x${t}`)}vt();ot();Le();q();async function Mp({hash:e,signature:t}){let r=ce(e)?e:Te(e),{secp256k1:n}=await Promise.resolve().then(()=>(Cf(),Up));return`0x${(()=>{if(typeof t=="object"&&"r"in t&&"s"in t){let{r:u,s:f,v:d,yParity:l}=t,m=Number(l??d),b=Lp(m);return new n.Signature(Ee(u),Ee(f)).addRecoveryBit(b)}let i=ce(t)?t:Te(t);if(V(i)!==65)throw new Error("invalid signature length");let a=be(`0x${i.slice(130)}`),c=Lp(a);return n.Signature.fromCompact(i.substring(2,130)).addRecoveryBit(c)})().recoverPublicKey(r.substring(2)).toHex(!1)}`}function Lp(e){if(e===0||e===1)return e;if(e===27)return 0;if(e===28)return 1;throw new Error("Invalid yParityOrV value")}async function ti({hash:e,signature:t}){return Yl(await Mp({hash:e,signature:t}))}at();Ae();q();G();Ca();Ae();q();function _p(e,t="hex"){let r=zp(e),n=no(new Uint8Array(r.length));return r.encode(n),t==="hex"?Y(n.bytes):n.bytes}function zp(e){return Array.isArray(e)?t6(e.map(t=>zp(t))):r6(e)}function t6(e){let t=e.reduce((o,s)=>o+s.length,0),r=Fp(t);return{length:t<=55?1+t:1+r+t,encode(o){t<=55?o.pushByte(192+t):(o.pushByte(247+r),r===1?o.pushUint8(t):r===2?o.pushUint16(t):r===3?o.pushUint24(t):o.pushUint32(t));for(let{encode:s}of e)s(o)}}}function r6(e){let t=typeof e=="string"?Be(e):e,r=Fp(t.length);return{length:t.length===1&&t[0]<128?1:t.length<=55?1+t.length:1+r+t.length,encode(o){t.length===1&&t[0]<128?o.pushBytes(t):t.length<=55?(o.pushByte(128+t.length),o.pushBytes(t)):(o.pushByte(183+r),r===1?o.pushUint8(t.length):r===2?o.pushUint16(t.length):r===3?o.pushUint24(t.length):o.pushUint32(t.length),o.pushBytes(t))}}}function Fp(e){if(e<2**8)return 1;if(e<2**16)return 2;if(e<2**24)return 3;if(e<2**32)return 4;throw new A("Length is too large.")}St();function jp(e){let{chainId:t,nonce:r,to:n}=e,o=e.contractAddress??e.address,s=J(Pt(["0x05",_p([t?_(t):"0x",o,r?_(r):"0x"])]));return n==="bytes"?Be(s):s}async function tc(e){let{authorization:t,signature:r}=e;return ti({hash:jp(t),signature:r??t})}q();Oa();io();G();sr();var rc=class extends A{constructor(t,{account:r,docsPath:n,chain:o,data:s,gas:i,gasPrice:a,maxFeePerGas:c,maxPriorityFeePerGas:u,nonce:f,to:d,value:l}){let m=hn({from:r?.address,to:d,value:typeof l<"u"&&`${so(l)} ${o?.nativeCurrency?.symbol||"ETH"}`,data:s,gas:i,gasPrice:typeof a<"u"&&`${he(a)} gwei`,maxFeePerGas:typeof c<"u"&&`${he(c)} gwei`,maxPriorityFeePerGas:typeof u<"u"&&`${he(u)} gwei`,nonce:f});super(t.shortMessage,{cause:t,docsPath:n,metaMessages:[...t.metaMessages?[...t.metaMessages," "]:[],"Estimate Gas Arguments:",m].filter(Boolean),name:"EstimateGasExecutionError"}),Object.defineProperty(this,"cause",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.cause=t}};Sn();ri();function Dp(e,{docsPath:t,...r}){let n=(()=>{let o=Vr(e,r);return o instanceof lt?e:o})();return new rc(n,{docsPath:t,...r})}ni();Wo();nc();Tn();et();io();G();var Ko=class extends A{constructor(){super("`baseFeeMultiplier` must be greater than 1.",{name:"BaseFeeScalarError"})}},Zr=class extends A{constructor(){super("Chain does not support EIP-1559 fees.",{name:"Eip1559FeesNotSupportedError"})}},oc=class extends A{constructor({maxPriorityFeePerGas:t}){super(`\`maxFeePerGas\` cannot be less than the \`maxPriorityFeePerGas\` (${he(t)} gwei).`,{name:"MaxFeePerGasTooLowError"})}};Le();G();var Yo=class extends A{constructor({blockHash:t,blockNumber:r}){let n="Block";t&&(n=`Block at hash "${t}"`),r&&(n=`Block at number "${r}"`),super(`${n} could not be found.`,{name:"BlockNotFoundError"})}};q();Le();var Nf={"0x0":"legacy","0x1":"eip2930","0x2":"eip1559","0x3":"eip4844","0x4":"eip7702"};function Xo(e,t){let r={...e,blockHash:e.blockHash?e.blockHash:null,blockNumber:e.blockNumber?BigInt(e.blockNumber):null,...e.blockTimestamp!=null&&{blockTimestamp:BigInt(e.blockTimestamp)},chainId:e.chainId?be(e.chainId):void 0,gas:e.gas?BigInt(e.gas):void 0,gasPrice:e.gasPrice?BigInt(e.gasPrice):void 0,maxFeePerBlobGas:e.maxFeePerBlobGas?BigInt(e.maxFeePerBlobGas):void 0,maxFeePerGas:e.maxFeePerGas?BigInt(e.maxFeePerGas):void 0,maxPriorityFeePerGas:e.maxPriorityFeePerGas?BigInt(e.maxPriorityFeePerGas):void 0,nonce:e.nonce?be(e.nonce):void 0,to:e.to?e.to:null,transactionIndex:e.transactionIndex?Number(e.transactionIndex):null,type:e.type?Nf[e.type]:void 0,typeHex:e.type?e.type:void 0,value:e.value?BigInt(e.value):void 0,v:e.v?BigInt(e.v):void 0};return e.authorizationList&&(r.authorizationList=i6(e.authorizationList)),r.yParity=(()=>{if(e.yParity)return Number(e.yParity);if(typeof r.v=="bigint"){if(r.v===0n||r.v===27n)return 0;if(r.v===1n||r.v===28n)return 1;if(r.v>=35n)return r.v%2n===0n?1:0}})(),r.type==="legacy"&&(delete r.accessList,delete r.maxFeePerBlobGas,delete r.maxFeePerGas,delete r.maxPriorityFeePerGas,delete r.yParity),r.type==="eip2930"&&(delete r.maxFeePerBlobGas,delete r.maxFeePerGas,delete r.maxPriorityFeePerGas),r.type==="eip1559"&&delete r.maxFeePerBlobGas,r}function i6(e){return e.map(t=>({address:t.address,chainId:Number(t.chainId),nonce:Number(t.nonce),r:t.r,s:t.s,yParity:Number(t.yParity)}))}function sc(e,t){let r=(e.transactions??[]).map(n=>typeof n=="string"?n:Xo(n));return{...e,baseFeePerGas:e.baseFeePerGas?BigInt(e.baseFeePerGas):null,blobGasUsed:e.blobGasUsed?BigInt(e.blobGasUsed):void 0,difficulty:e.difficulty?BigInt(e.difficulty):void 0,excessBlobGas:e.excessBlobGas?BigInt(e.excessBlobGas):void 0,gasLimit:e.gasLimit?BigInt(e.gasLimit):void 0,gasUsed:e.gasUsed?BigInt(e.gasUsed):void 0,hash:e.hash?e.hash:null,logsBloom:e.logsBloom?e.logsBloom:null,nonce:e.nonce?e.nonce:null,number:e.number?BigInt(e.number):null,size:e.size?BigInt(e.size):void 0,timestamp:e.timestamp?BigInt(e.timestamp):void 0,transactions:r,totalDifficulty:e.totalDifficulty?BigInt(e.totalDifficulty):null}}async function xe(e,{blockHash:t,blockNumber:r,blockTag:n=e.experimental_blockTag??"latest",includeTransactions:o}={}){let s=o??!1,i=r!==void 0?_(r):void 0,a=null;if(t?a=await e.request({method:"eth_getBlockByHash",params:[t,s]},{dedupe:!0}):a=await e.request({method:"eth_getBlockByNumber",params:[i||n,s]},{dedupe:!!i}),!a)throw new Yo({blockHash:t,blockNumber:r});return(e.chain?.formatters?.block?.format||sc)(a,"getBlock")}async function Jo(e){let t=await e.request({method:"eth_gasPrice"});return BigInt(t)}async function Wp(e,t){return $f(e,t)}async function $f(e,t){let{block:r,chain:n=e.chain,request:o}=t||{};try{let s=n?.fees?.maxPriorityFeePerGas??n?.fees?.defaultPriorityFee;if(typeof s=="function"){let a=r||await M(e,xe,"getBlock")({}),c=await s({block:a,client:e,request:o});if(c===null)throw new Error;return c}if(typeof s<"u")return s;let i=await e.request({method:"eth_maxPriorityFeePerGas"});return Ee(i)}catch{let[s,i]=await Promise.all([r?Promise.resolve(r):M(e,xe,"getBlock")({}),M(e,Jo,"getGasPrice")({})]);if(typeof s.baseFeePerGas!="bigint")throw new Zr;let a=i-s.baseFeePerGas;return a<0n?0n:a}}async function Zp(e,t){return ic(e,t)}async function ic(e,t){let{block:r,chain:n=e.chain,request:o,type:s="eip1559"}=t||{},i=await(async()=>typeof n?.fees?.baseFeeMultiplier=="function"?n.fees.baseFeeMultiplier({block:r,client:e,request:o}):n?.fees?.baseFeeMultiplier??1.2)();if(i<1)throw new Ko;let c=10**(i.toString().split(".")[1]?.length??0),u=l=>l*BigInt(Math.ceil(i*c))/BigInt(c),f=r||await M(e,xe,"getBlock")({});if(typeof n?.fees?.estimateFeesPerGas=="function"){let l=await n.fees.estimateFeesPerGas({block:r,client:e,multiply:u,request:o,type:s});if(l!==null)return l}if(s==="eip1559"){if(typeof f.baseFeePerGas!="bigint")throw new Zr;let l=typeof o?.maxPriorityFeePerGas=="bigint"?o.maxPriorityFeePerGas:await $f(e,{block:f,chain:n,request:o}),m=u(f.baseFeePerGas);return{maxFeePerGas:o?.maxFeePerGas??m+l,maxPriorityFeePerGas:l}}return{gasPrice:o?.gasPrice??u(await M(e,Jo,"getGasPrice")({}))}}Le();q();async function ac(e,{address:t,blockTag:r="latest",blockNumber:n}){let o=await e.request({method:"eth_getTransactionCount",params:[t,typeof n=="bigint"?_(n):r]},{dedupe:!!n});return be(o)}Ae();q();function cc(e){let{kzg:t}=e,r=e.to??(typeof e.blobs[0]=="string"?"hex":"bytes"),n=typeof e.blobs[0]=="string"?e.blobs.map(s=>Be(s)):e.blobs,o=[];for(let s of n)o.push(Uint8Array.from(t.blobToKzgCommitment(s)));return r==="bytes"?o:o.map(s=>Y(s))}Ae();q();function uc(e){let{kzg:t}=e,r=e.to??(typeof e.blobs[0]=="string"?"hex":"bytes"),n=typeof e.blobs[0]=="string"?e.blobs.map(i=>Be(i)):e.blobs,o=typeof e.commitments[0]=="string"?e.commitments.map(i=>Be(i)):e.commitments,s=[];for(let i=0;iY(i))}q();nf();var Kp=vn;vt();Ae();q();function Yp(e,t){let r=t||"hex",n=Kp(ce(e,{strict:!1})?it(e):e);return r==="bytes"?n:Te(n)}function Xp(e){let{commitment:t,version:r=1}=e,n=e.to??(typeof t=="string"?"hex":"bytes"),o=Yp(t,"bytes");return o.set([r],0),n==="bytes"?o:Y(o)}function Jp(e){let{commitments:t,version:r}=e,n=e.to??(typeof t[0]=="string"?"hex":"bytes"),o=[];for(let s of t)o.push(Xp({commitment:s,to:n,version:r}));return o}G();var fc=class extends A{constructor({maxSize:t,size:r}){super("Blob size is too large.",{metaMessages:[`Max: ${t} bytes`,`Given: ${r} bytes`],name:"BlobSizeTooLargeError"})}},dc=class extends A{constructor(){super("Blob data must not be empty.",{name:"EmptyBlobError"})}};Ca();ot();Ae();q();function Qp(e){let t=e.to??(typeof e.data=="string"?"hex":"bytes"),r=typeof e.data=="string"?Be(e.data):e.data,n=V(r);if(!n)throw new dc;if(n>761855)throw new fc({maxSize:761855,size:n});let o=[],s=!0,i=0;for(;s;){let a=no(new Uint8Array(131072)),c=0;for(;c<4096;){let u=r.slice(i,i+31);if(a.pushByte(0),a.pushBytes(u),u.length<31){a.pushByte(128),s=!1;break}c++,i+=31}o.push(a)}return t==="bytes"?o.map(a=>a.bytes):o.map(a=>Y(a.bytes))}function em(e){let{data:t,kzg:r,to:n}=e,o=e.blobs??Qp({data:t,to:n}),s=e.commitments??cc({blobs:o,kzg:r,to:n}),i=e.proofs??uc({blobs:o,commitments:s,kzg:r,to:n}),a=[];for(let c=0;c{let o=Vr(e,r);return o instanceof lt?e:o})();return new _a(n,{docsPath:t,...r})}ni();Wo();Tn();Le();async function Qo(e){let t=await e.request({method:"eth_chainId"},{dedupe:!0});return be(t)}async function lc(e,t){let{account:r=e.account,accessList:n,authorizationList:o,chain:s=e.chain,blobVersionedHashes:i,blobs:a,data:c,gas:u,gasPrice:f,maxFeePerBlobGas:d,maxFeePerGas:l,maxPriorityFeePerGas:m,nonce:b,nonceManager:h,to:T,type:g,value:P,...y}=t,p=await(async()=>{if(!r||!h||typeof b<"u")return b;let S=ee(r),O=s?s.id:await M(e,Qo,"getChainId")({});return await h.consume({address:S.address,chainId:O,client:e})})();pt(t);let x=s?.formatters?.transactionRequest?.format,B=(x||jt)({...Wr(y,{format:x}),account:r?ee(r):void 0,accessList:n,authorizationList:o,blobs:a,blobVersionedHashes:i,data:c,gas:u,gasPrice:f,maxFeePerBlobGas:d,maxFeePerGas:l,maxPriorityFeePerGas:m,nonce:p,to:T,type:g,value:P},"fillTransaction");try{let S=await e.request({method:"eth_fillTransaction",params:[B]}),I=(s?.formatters?.transaction?.format||Xo)(S.tx);delete I.blockHash,delete I.blockNumber,delete I.r,delete I.s,delete I.transactionIndex,delete I.v,delete I.yParity,I.data=I.input,I.gas&&(I.gas=t.gas??I.gas),I.gasPrice&&(I.gasPrice=t.gasPrice??I.gasPrice),I.maxFeePerBlobGas&&(I.maxFeePerBlobGas=t.maxFeePerBlobGas??I.maxFeePerBlobGas),I.maxFeePerGas&&(I.maxFeePerGas=t.maxFeePerGas??I.maxFeePerGas),I.maxPriorityFeePerGas&&(I.maxPriorityFeePerGas=t.maxPriorityFeePerGas??I.maxPriorityFeePerGas),typeof I.nonce<"u"&&(I.nonce=t.nonce??I.nonce);let k=await(async()=>{if(typeof s?.fees?.baseFeeMultiplier=="function"){let v=await M(e,xe,"getBlock")({});return s.fees.baseFeeMultiplier({block:v,client:e,request:t})}return s?.fees?.baseFeeMultiplier??1.2})();if(k<1)throw new Ko;let N=10**(k.toString().split(".")[1]?.length??0),z=v=>v*BigInt(Math.ceil(k*N))/BigInt(N);return I.feePayerSignature||(I.maxFeePerGas&&!t.maxFeePerGas&&(I.maxFeePerGas=z(I.maxFeePerGas)),I.gasPrice&&!t.gasPrice&&(I.gasPrice=z(I.gasPrice))),{raw:S.raw,transaction:{from:B.from,...I},...S.capabilities?{capabilities:S.capabilities}:{}}}catch(S){throw rm(S,{...t,chain:e.chain})}}var c6=["blobVersionedHashes","chainId","fees","gas","nonce","type"],nm=new Map,Of=new Ut(128);async function pc(e,t){let r=t;r.account??(r.account=e.account),r.parameters??(r.parameters=c6);let{account:n,chain:o=e.chain,nonceManager:s,parameters:i}=r,a=(()=>{if(typeof o?.prepareTransactionRequest=="function")return{fn:o.prepareTransactionRequest,runAt:["beforeFillTransaction"]};if(Array.isArray(o?.prepareTransactionRequest))return{fn:o.prepareTransactionRequest[0],runAt:o.prepareTransactionRequest[1].runAt}})(),c;async function u(){return c||(typeof r.chainId<"u"?r.chainId:o?o.id:(c=await M(e,Qo,"getChainId")({}),c))}let f=n&&ee(n),d=r.nonce;if(i.includes("nonce")&&typeof d>"u"&&f&&s){let p=await u();d=await s.consume({address:f.address,chainId:p,client:e})}a?.fn&&a.runAt?.includes("beforeFillTransaction")&&(r=await a.fn({...r,chain:o},{phase:"beforeFillTransaction"}),d??(d=r.nonce));let m=((i.includes("blobVersionedHashes")||i.includes("sidecars"))&&r.kzg&&r.blobs||Of.get(e.uid)===!1||!["fees","gas"].some(x=>i.includes(x))?!1:!!(i.includes("chainId")&&typeof r.chainId!="number"||i.includes("nonce")&&typeof d!="number"||i.includes("fees")&&typeof r.gasPrice!="bigint"&&(typeof r.maxFeePerGas!="bigint"||typeof r.maxPriorityFeePerGas!="bigint")||i.includes("gas")&&typeof r.gas!="bigint"))?await M(e,lc,"fillTransaction")({...r,nonce:d}).then(p=>{let{chainId:x,from:E,gas:B,gasPrice:S,nonce:O,maxFeePerBlobGas:I,maxFeePerGas:k,maxPriorityFeePerGas:$,type:N,...z}=p.transaction;return Of.set(e.uid,!0),{...r,...E?{from:E}:{},...N&&!r.type?{type:N}:{},...typeof x<"u"?{chainId:x}:{},...typeof B<"u"?{gas:B}:{},...typeof S<"u"?{gasPrice:S}:{},...typeof O<"u"?{nonce:O}:{},...typeof I<"u"&&r.type!=="legacy"&&r.type!=="eip2930"?{maxFeePerBlobGas:I}:{},...typeof k<"u"&&r.type!=="legacy"&&r.type!=="eip2930"?{maxFeePerGas:k}:{},...typeof $<"u"&&r.type!=="legacy"&&r.type!=="eip2930"?{maxPriorityFeePerGas:$}:{},..."nonceKey"in z&&typeof z.nonceKey<"u"?{nonceKey:z.nonceKey}:{},..."keyAuthorization"in z&&typeof z.keyAuthorization<"u"&&z.keyAuthorization!==null&&!("keyAuthorization"in r)?{keyAuthorization:z.keyAuthorization}:{},..."feePayerSignature"in z&&typeof z.feePayerSignature<"u"&&z.feePayerSignature!==null?{feePayerSignature:z.feePayerSignature}:{},..."feeToken"in z&&typeof z.feeToken<"u"&&z.feeToken!==null&&!("feeToken"in r)?{feeToken:z.feeToken}:{},...p.capabilities?{_capabilities:p.capabilities}:{}}}).catch(p=>{let x=p;if(x.name!=="TransactionExecutionError")return r;if(x.walk?.(S=>S.name==="ExecutionRevertedError"))throw p;return x.walk?.(S=>{let O=S;return O.name==="MethodNotFoundRpcError"||O.name==="MethodNotSupportedRpcError"||O.message?.includes("eth_fillTransaction is not available")})&&Of.set(e.uid,!1),r}):r;d??(d=m.nonce),r={...m,...f?{from:f?.address}:{},...typeof d<"u"?{nonce:d}:{}};let{blobs:b,gas:h,kzg:T,type:g}=r;a?.fn&&a.runAt?.includes("beforeFillParameters")&&(r=await a.fn({...r,chain:o},{phase:"beforeFillParameters"}));let P;async function y(){return P||(P=await M(e,xe,"getBlock")({blockTag:"latest"}),P)}if(i.includes("nonce")&&typeof d>"u"&&f&&!s&&(r.nonce=await M(e,ac,"getTransactionCount")({address:f.address,blockTag:"pending"})),(i.includes("blobVersionedHashes")||i.includes("sidecars"))&&b&&T){let p=cc({blobs:b,kzg:T});if(i.includes("blobVersionedHashes")){let x=Jp({commitments:p,to:"hex"});r.blobVersionedHashes=x}if(i.includes("sidecars")){let x=uc({blobs:b,commitments:p,kzg:T}),E=em({blobs:b,commitments:p,proofs:x,to:"hex"});r.sidecars=E}}if(i.includes("chainId")&&(r.chainId=await u()),(i.includes("fees")||i.includes("type"))&&typeof g>"u")try{r.type=tm(r)}catch{let p=nm.get(e.uid);typeof p>"u"&&(p=typeof(await y())?.baseFeePerGas=="bigint",nm.set(e.uid,p)),r.type=p?"eip1559":"legacy"}if(i.includes("fees"))if(r.type!=="legacy"&&r.type!=="eip2930"){if(typeof r.maxFeePerGas>"u"||typeof r.maxPriorityFeePerGas>"u"){let p=await y(),{maxFeePerGas:x,maxPriorityFeePerGas:E}=await ic(e,{block:p,chain:o,request:r});if(typeof r.maxPriorityFeePerGas>"u"&&r.maxFeePerGas&&r.maxFeePerGas"u"){let p=await y(),{gasPrice:x}=await ic(e,{block:p,chain:o,request:r,type:"legacy"});r.gasPrice=x}}return i.includes("gas")&&typeof h>"u"&&(r.gas=await M(e,es,"estimateGas")({...r,account:f,prepare:f?.type==="local"?[]:["blobVersionedHashes"]})),a?.fn&&a.runAt?.includes("afterFillParameters")&&(r=await a.fn({...r,chain:o},{phase:"afterFillParameters"})),pt(r),delete r.parameters,r}async function es(e,t){let{account:r=e.account,prepare:n=!0}=t,o=r?ee(r):void 0,s=(()=>{if(Array.isArray(n))return n;if(o?.type!=="local")return["blobVersionedHashes"]})();try{let i=await(async()=>{if(t.to)return t.to;if(t.authorizationList&&t.authorizationList.length>0)return await tc({authorization:t.authorizationList[0]}).catch(()=>{throw new A("`to` is required. Could not infer from `authorizationList`")})})(),{accessList:a,authorizationList:c,blobs:u,blobVersionedHashes:f,blockNumber:d,blockTag:l,data:m,gas:b,gasPrice:h,maxFeePerBlobGas:T,maxFeePerGas:g,maxPriorityFeePerGas:P,nonce:y,value:p,stateOverride:x,...E}=n?await pc(e,{...t,parameters:s,to:i}):t;if(b&&t.gas!==b)return b;let S=(typeof d=="bigint"?_(d):void 0)||l,O=Zo(x);pt(t);let I=e.chain?.formatters?.transactionRequest?.format,$=(I||jt)({...Wr(E,{format:I}),account:o,accessList:a,authorizationList:c,blobs:u,blobVersionedHashes:f,data:m,gasPrice:h,maxFeePerBlobGas:T,maxFeePerGas:g,maxPriorityFeePerGas:P,nonce:y,to:i,value:p},"estimateGas");return BigInt(await e.request({method:"eth_estimateGas",params:O?[$,S??e.experimental_blockTag??"latest",O]:S?[$,S]:[$]}))}catch(i){throw Dp(i,{...t,account:o,chain:e.chain})}}async function om(e,t){let{abi:r,address:n,args:o,functionName:s,dataSuffix:i=typeof e.dataSuffix=="string"?e.dataSuffix:e.dataSuffix?.value,...a}=t,c=ne({abi:r,args:o,functionName:s});try{return await M(e,es,"estimateGas")({data:`${c}${i?i.replace("0x",""):""}`,to:n,...a})}catch(u){let f=a.account?ee(a.account):void 0;throw kt(u,{abi:r,address:n,args:o,docsPath:"/docs/contract/estimateContractGas",functionName:s,sender:f?.address})}}Or();ts();Ae();function ye(e,{args:t,eventName:r}={}){return{...e,blockHash:e.blockHash?e.blockHash:null,blockNumber:e.blockNumber?BigInt(e.blockNumber):null,blockTimestamp:e.blockTimestamp?BigInt(e.blockTimestamp):e.blockTimestamp===null?null:void 0,logIndex:e.logIndex?Number(e.logIndex):null,transactionHash:e.transactionHash?e.transactionHash:null,transactionIndex:e.transactionIndex?Number(e.transactionIndex):null,...r?{args:t,eventName:r}:{}}}St();_s();ae();Yu();ot();_s();Ds();Xt();var sm="/docs/contract/decodeEventLog";function Pn(e){let{abi:t,data:r,strict:n,topics:o}=e,s=n??!0,[i,...a]=o;if(!i)throw new aa({docsPath:sm});let c=t.find(g=>g.type==="event"&&i===Cr(me(g)));if(!(c&&"name"in c)||c.type!=="event")throw new ca(i,{docsPath:sm});let{name:u,inputs:f}=c,d=f?.some(g=>!("name"in g&&g.name)),l=d?[]:{},m=f.map((g,P)=>[g,P]).filter(([g])=>"indexed"in g&&g.indexed),b=[];for(let g=0;g!("indexed"in g&&g.indexed)),T=s?h:[...b.map(([g])=>g),...h];if(T.length>0){if(r&&r!=="0x")try{let g=or(T,r);if(g){let P=0;if(!s)for(let[y,p]of b)l[d?p:y.name||p]=g[P++];if(d)for(let y=0;y0?l:void 0}}function u6({param:e,value:t}){return e.type==="string"||e.type==="bytes"||e.type==="tuple"||e.type.match(/^(.*)\[(\d+)?\]$/)?t:(or([e],t)||[])[0]}function rs(e){let{abi:t,args:r,logs:n,strict:o=!0}=e,s=(()=>{if(e.eventName)return Array.isArray(e.eventName)?e.eventName:[e.eventName]})(),i=t.filter(a=>a.type==="event").map(a=>({abi:a,selector:Cr(a)}));return n.map(a=>{let c=typeof a.blockNumber=="string"?ye(a):a,u=i.filter(l=>c.topics[0]===l.selector);if(u.length===0)return null;let f,d;for(let l of u)try{f=Pn({...c,abi:[l.abi],strict:!0}),d=l;break}catch{}if(!f&&!o){d=u[0];try{f=Pn({data:c.data,topics:c.topics,abi:[d.abi],strict:!1})}catch{let l=d.abi.inputs?.some(m=>!("name"in m&&m.name));return{...c,args:l?[]:{},eventName:d.abi.name}}}return!f||!d||s&&!s.includes(f.eventName)||!f6({args:f.args,inputs:d.abi.inputs,matchArgs:r})?null:{...f,...c}}).filter(Boolean)}function f6(e){let{args:t,inputs:r,matchArgs:n}=e;if(!n)return!0;if(!t)return!1;function o(s,i,a){try{return s.type==="address"?Rt(i,a):s.type==="string"||s.type==="bytes"?J(it(i))===a:i===a}catch{return!1}}return Array.isArray(t)&&Array.isArray(n)?n.every((s,i)=>{if(s==null)return!0;let a=r[i];return a?(Array.isArray(s)?s:[s]).some(u=>o(a,u,t[i])):!1}):typeof t=="object"&&!Array.isArray(t)&&typeof n=="object"&&!Array.isArray(n)?Object.entries(n).every(([s,i])=>{if(i==null)return!0;let a=r.find(u=>u.name===s);return a?(Array.isArray(i)?i:[i]).some(u=>o(a,u,t[s])):!1}):!1}q();async function ns(e,{address:t,blockHash:r,fromBlock:n,toBlock:o,event:s,events:i,args:a,strict:c}={}){let u=c??!1,f=i??(s?[s]:void 0),d=[];f&&(d=[f.flatMap(h=>Mt({abi:[h],eventName:h.name,args:i?void 0:a}))],s&&(d=d[0]));let l;r?l=await e.request({method:"eth_getLogs",params:[{address:t,topics:d,blockHash:r}]}):l=await e.request({method:"eth_getLogs",params:[{address:t,topics:d,fromBlock:typeof n=="bigint"?_(n):n,toBlock:typeof o=="bigint"?_(o):o}]});let m=l.map(b=>ye(b));return f?rs({abi:f,args:a,logs:m,strict:u}):m}async function mc(e,t){let{abi:r,address:n,args:o,blockHash:s,eventName:i,fromBlock:a,toBlock:c,strict:u}=t,f=i?qe({abi:r,name:i}):void 0,d=f?void 0:r.filter(l=>l.type==="event");return M(e,ns,"getLogs")({address:n,args:o,blockHash:s,event:f,events:d,fromBlock:a,toBlock:c,strict:u})}mr();ut();Un();async function pe(e,t){let{abi:r,address:n,args:o,functionName:s,...i}=t,a=ne({abi:r,args:o,functionName:s});try{let{data:c}=await M(e,bt,"call")({...i,data:a,to:n});return Ce({abi:r,args:o,functionName:s,data:c||"0x"})}catch(c){throw kt(c,{abi:r,address:n,args:o,docsPath:"/docs/contract/readContract",functionName:s})}}et();mr();ut();Un();async function Jm(e,t){let{abi:r,address:n,args:o,functionName:s,dataSuffix:i=typeof e.dataSuffix=="string"?e.dataSuffix:e.dataSuffix?.value,...a}=t,c=a.account?ee(a.account):e.account,u=ne({abi:r,args:o,functionName:s});try{let{data:f}=await M(e,bt,"call")({batch:!1,data:`${u}${i?i.replace("0x",""):""}`,to:n,...a,account:c}),d=Ce({abi:r,args:o,functionName:s,data:f||"0x"}),l=r.filter(m=>"name"in m&&m.name===t.functionName);return{result:d,request:{abi:l,address:n,args:o,dataSuffix:i,functionName:s,...a,account:c}}}catch(f){throw kt(f,{abi:r,address:n,args:o,docsPath:"/docs/contract/simulateContract",functionName:s,sender:c?.address})}}ae();Gs();var h0=new Map,Qm=new Map,C6=0;function Ke(e,t,r){let n=++C6,o=()=>h0.get(e)||[],s=()=>{let f=o();h0.set(e,f.filter(d=>d.id!==n))},i=()=>{let f=o();if(!f.some(l=>l.id===n))return;let d=Qm.get(e);if(f.length===1&&d){let l=d();l instanceof Promise&&l.catch(()=>{})}s()},a=o();if(h0.set(e,[...a,{id:n,fns:t}]),a&&a.length>0)return i;let c={};for(let f in t)c[f]=((...d)=>{let l=o();if(l.length!==0)for(let m of l)m.fns[f]?.(...d)});let u=r(c);return typeof u=="function"&&Qm.set(e,u),i}async function bi(e){return new Promise(t=>setTimeout(t,e))}function Vt(e,{emitOnBegin:t,initialWaitTime:r,interval:n}){let o=!0,s=()=>o=!1;return(async()=>{let a;t&&(a=await e({unpoll:s}));let c=await r?.(a)??n;await bi(c);let u=async()=>{o&&(await e({unpoll:s}),await bi(n),u())};u()})(),s}Ge();var N6=new Map,$6=new Map;function e1(e){let t=(o,s)=>({clear:()=>s.delete(o),get:()=>s.get(o),set:i=>s.set(o,i)}),r=t(e,N6),n=t(e,$6);return{clear:()=>{r.clear(),n.clear()},promise:r,response:n}}async function t1(e,{cacheKey:t,cacheTime:r=Number.POSITIVE_INFINITY}){let n=e1(t),o=n.response.get();if(o&&r>0&&Date.now()-o.created.getTime()`blockNumber.${e}`;async function Wt(e,{cacheTime:t=e.cacheTime}={}){let r=await t1(()=>e.request({method:"eth_blockNumber"}),{cacheKey:O6(e.uid),cacheTime:t});return BigInt(r)}async function Xr(e,{filter:t}){let r="strict"in t&&t.strict,n=await t.request({method:"eth_getFilterChanges",params:[t.id]});if(typeof n[0]=="string")return n;let o=n.map(s=>ye(s));return!("abi"in t)||!t.abi?o:rs({abi:t.abi,logs:o,strict:r})}async function Jr(e,{filter:t}){return t.request({method:"eth_uninstallFilter",params:[t.id]})}function r1(e,t){let{abi:r,address:n,args:o,batch:s=!0,eventName:i,fromBlock:a,onError:c,onLogs:u,poll:f,pollingInterval:d=e.pollingInterval,strict:l}=t;return(typeof f<"u"?f:typeof a=="bigint"?!0:!(e.transport.type==="webSocket"||e.transport.type==="ipc"||e.transport.type==="fallback"&&(e.transport.transports[0].config.type==="webSocket"||e.transport.transports[0].config.type==="ipc")))?(()=>{let T=l??!1,g=W(["watchContractEvent",n,o,s,e.uid,i,d,T,a]);return Ke(g,{onLogs:u,onError:c},P=>{let y;a!==void 0&&(y=a-1n);let p,x=!1,E=Vt(async()=>{if(!x){try{p=await M(e,Pa,"createContractEventFilter")({abi:r,address:n,args:o,eventName:i,strict:T,fromBlock:a})}catch{}x=!0;return}try{let B;if(p)B=await M(e,Xr,"getFilterChanges")({filter:p});else{let S=await M(e,Wt,"getBlockNumber")({});y&&y{p&&await M(e,Jr,"uninstallFilter")({filter:p}),E()}})})():(()=>{let T=l??!1,g=W(["watchContractEvent",n,o,s,e.uid,i,d,T]),P=!0,y=()=>P=!1;return Ke(g,{onLogs:u,onError:c},p=>((async()=>{try{let x=(()=>{if(e.transport.type==="fallback"){let S=e.transport.transports.find(O=>O.config.type==="webSocket"||O.config.type==="ipc");return S?S.value:e.transport}return e.transport})(),E=i?Mt({abi:r,eventName:i,args:o}):[],{unsubscribe:B}=await x.subscribe({params:["logs",{address:n,topics:E}],onData(S){if(!P)return;let O=S.result;try{let{eventName:I,args:k}=Pn({abi:r,data:O.data,topics:O.topics,strict:l}),$=ye(O,{args:k,eventName:I});p.onLogs([$])}catch(I){let k,$;if(I instanceof Jt||I instanceof Tr){if(l)return;k=I.abiItem.name,$=I.abiItem.inputs?.some(z=>!("name"in z&&z.name))}let N=ye(O,{args:$?[]:{},eventName:k});p.onLogs([N])}},onError(S){p.onError?.(S)}});y=B,P||y()}catch(x){c?.(x)}})(),()=>y()))})()}async function n1(e,{serializedTransaction:t}){return e.request({method:"eth_sendRawTransaction",params:[t]},{retryCount:0})}function xi(e,{delay:t=100,retryCount:r=2,shouldRetry:n=()=>!0}={}){return new Promise((o,s)=>{let i=async({count:a=0}={})=>{let c=async({error:u})=>{let f=typeof t=="function"?t({count:a,error:u}):t;f&&await bi(f),i({count:a+1})};try{let u=await e();o(u)}catch(u){if(aye(n)):null,to:e.to?e.to:null,transactionIndex:e.transactionIndex?be(e.transactionIndex):null,status:e.status?U6[e.status]:null,type:e.type?Nf[e.type]||e.type:null};return e.blobGasPrice&&(r.blobGasPrice=BigInt(e.blobGasPrice)),e.blobGasUsed&&(r.blobGasUsed=BigInt(e.blobGasUsed)),r}et();var Lc=256,Mc;function _c(e=11){if(!Mc||Lc+e>256*2){Mc="",Lc=0;for(let t=0;t<256;t++)Mc+=(256+Math.random()*256|0).toString(16).substring(1)}return Mc.substring(Lc,Lc+++e)}function o1(e){let{batch:t,chain:r,ccipRead:n,dataSuffix:o,key:s="base",name:i="Base Client",type:a="base"}=e,c=e.experimental_blockTag??(typeof r?.experimental_preconfirmationTime=="number"?"pending":void 0),u=r?.blockTime??12e3,f=Math.min(Math.max(Math.floor(u/2),500),4e3),d=e.pollingInterval??f,l=e.cacheTime??d,m=e.account?ee(e.account):void 0,{config:b,request:h,value:T}=e.transport({account:m,chain:r,pollingInterval:d}),g={...b,...T},P={account:m,batch:t,cacheTime:l,ccipRead:n,chain:r,dataSuffix:o,key:s,name:i,pollingInterval:d,request:h,transport:g,type:a,uid:_c(),...c?{experimental_blockTag:c}:{}};function y(p){return x=>{let E=x(p);for(let S in P)delete E[S];let B={...p,...E};return Object.assign(B,{extend:y(B)})}}return Object.assign(P,{extend:y(P)})}gr();mr();ut();On();Ls();q();G();Lr();function ms(e){if(!(e instanceof A))return!1;let t=e.walk(r=>r instanceof xn);return t instanceof xn?t.data?.errorName==="HttpError"||t.data?.errorName==="ResolverError"||t.data?.errorName==="ResolverNotContract"||t.data?.errorName==="ResolverNotFound"||t.data?.errorName==="ReverseAddressMismatch"||t.data?.errorName==="UnsupportedResolverProfile":!1}hi();at();Ae();q();St();vt();function zc(e){if(e.length!==66||e.indexOf("[")!==0||e.indexOf("]")!==65)return null;let t=`0x${e.slice(1,65)}`;return ce(t)?t:null}function yi(e){let t=new Uint8Array(32).fill(0);if(!e)return Y(t);let r=e.split(".");for(let n=r.length-1;n>=0;n-=1){let o=zc(r[n]),s=o?it(o):J(At(r[n]),"bytes");t=J(Ie([t,s]),"bytes")}return Y(t)}Ae();function s1(e){return`[${e.slice(2)}]`}Ae();q();St();function i1(e){let t=new Uint8Array(32).fill(0);return e?zc(e)||J(At(e)):Y(t)}function hs(e){let t=e.replace(/^\.|\.$/gm,"");if(t.length===0)return new Uint8Array(1);let r=new Uint8Array(At(t).byteLength+2),n=0,o=t.split(".");for(let s=0;s255&&(i=At(s1(i1(o[s])))),r[n]=i.length,r.set(i,n+1),n+=i.length+1}return r.byteLength!==n+1?r.slice(0,n+1):r}async function a1(e,t){let{blockNumber:r,blockTag:n,coinType:o,name:s,gatewayUrls:i,strict:a}=t,{chain:c}=e,u=(()=>{if(t.universalResolverAddress)return t.universalResolverAddress;if(!c)throw new Error("client chain not configured. universalResolverAddress is required.");return ht({blockNumber:r,chain:c,contract:"ensUniversalResolver"})})(),f=c?.ensTlds;if(f&&!f.some(l=>s.endsWith(l)))return null;let d=o!=null?[yi(s),BigInt(o)]:[yi(s)];try{let l=ne({abi:t0,functionName:"addr",args:d}),m={address:u,abi:Pc,functionName:"resolveWithGateways",args:[Te(hs(s)),l,i??[wr]],blockNumber:r,blockTag:n},h=await M(e,pe,"readContract")(m);if(h[0]==="0x")return null;let T=Ce({abi:t0,args:d,functionName:"addr",data:h[0]});return T==="0x"||Bt(T)==="0x00"?null:T}catch(l){if(a)throw l;if(ms(l))return null;throw l}}G();var Fc=class extends A{constructor({data:t}){super("Unable to extract image from metadata. The metadata may be malformed or invalid.",{metaMessages:["- Metadata must be a JSON object with at least an `image`, `image_url` or `image_data` property.","",`Provided data: ${JSON.stringify(t)}`],name:"EnsAvatarInvalidMetadataError"})}},Qr=class extends A{constructor({reason:t}){super(`ENS NFT avatar URI is invalid. ${t}`,{name:"EnsAvatarInvalidNftUriError"})}},bs=class extends A{constructor({uri:t}){super(`Unable to resolve ENS avatar URI "${t}". The URI may be malformed, invalid, or does not respond with a valid image.`,{name:"EnsAvatarUriResolutionError"})}},jc=class extends A{constructor({namespace:t}){super(`ENS NFT avatar namespace "${t}" is not supported. Must be "erc721" or "erc1155".`,{name:"EnsAvatarUnsupportedNamespaceError"})}};var L6=/(?https?:\/\/[^/]*|ipfs:\/|ipns:\/|ar:\/)?(?\/)?(?ipfs\/|ipns\/)?(?[\w\-.]+)(?\/.*)?/,M6=/^(Qm[1-9A-HJ-NP-Za-km-z]{44,}|b[A-Za-z2-7]{58,}|B[A-Z2-7]{58,}|z[1-9A-HJ-NP-Za-km-z]{48,}|F[0-9A-F]{50,})(\/(?[\w\-.]+))?(?\/.*)?$/,_6=/^data:([a-zA-Z\-/+]*);base64,([^"].*)/,z6=/^data:([a-zA-Z\-/+]*)?(;[a-zA-Z0-9].*?)?(,)/;async function F6(e){try{let t=await fetch(e,{method:"HEAD"});return t.status===200?t.headers.get("content-type")?.startsWith("image/"):!1}catch(t){return typeof t=="object"&&typeof t.response<"u"||!Object.hasOwn(globalThis,"Image")?!1:new Promise(r=>{let n=new Image;n.onload=()=>{r(!0)},n.onerror=()=>{r(!1)},n.src=e})}}function c1(e,t){return e?e.endsWith("/")?e.slice(0,-1):e:t}function b0({uri:e,gatewayUrls:t}){let r=_6.test(e);if(r)return{uri:e,isOnChain:!0,isEncoded:r};let n=c1(t?.ipfs,"https://ipfs.io"),o=c1(t?.arweave,"https://arweave.net"),s=e.match(L6),{protocol:i,subpath:a,target:c,subtarget:u=""}=s?.groups||{},f=i==="ipns:/"||a==="ipns/",d=i==="ipfs:/"||a==="ipfs/"||M6.test(e);if(e.startsWith("http")&&!f&&!d){let m=e;return t?.arweave&&(m=e.replace(/https:\/\/arweave.net/g,t?.arweave)),{uri:m,isOnChain:!1,isEncoded:!1}}if((f||d)&&c)return{uri:`${n}/${f?"ipns":"ipfs"}/${c}${u}`,isOnChain:!1,isEncoded:!1};if(i==="ar:/"&&c)return{uri:`${o}/${c}${u||""}`,isOnChain:!1,isEncoded:!1};let l=e.replace(z6,"");if(l.startsWith("o.json());return await Dc({gatewayUrls:e,uri:x0(r)})}catch{throw new bs({uri:t})}}async function Dc({gatewayUrls:e,uri:t}){let{uri:r,isOnChain:n}=b0({uri:t,gatewayUrls:e});if(n||await F6(r))return r;throw new bs({uri:t})}function f1(e){let t=e;t.startsWith("did:nft:")&&(t=t.replace("did:nft:","").replace(/_/g,"/"));let[r,n,o]=t.split("/"),[s,i]=r.split(":"),[a,c]=n.split(":");if(!s||s.toLowerCase()!=="eip155")throw new Qr({reason:"Only EIP-155 supported"});if(!i)throw new Qr({reason:"Chain ID not found"});if(!c)throw new Qr({reason:"Contract address not found"});if(!o)throw new Qr({reason:"Token ID not found"});if(!a)throw new Qr({reason:"ERC namespace not found"});return{chainID:Number.parseInt(i,10),namespace:a.toLowerCase(),contractAddress:c,tokenID:o}}async function d1(e,{nft:t}){if(t.namespace==="erc721")return pe(e,{address:t.contractAddress,abi:[{name:"tokenURI",type:"function",stateMutability:"view",inputs:[{name:"tokenId",type:"uint256"}],outputs:[{name:"",type:"string"}]}],functionName:"tokenURI",args:[BigInt(t.tokenID)]});if(t.namespace==="erc1155")return pe(e,{address:t.contractAddress,abi:[{name:"uri",type:"function",stateMutability:"view",inputs:[{name:"_id",type:"uint256"}],outputs:[{name:"",type:"string"}]}],functionName:"uri",args:[BigInt(t.tokenID)]});throw new jc({namespace:t.namespace})}async function l1(e,{gatewayUrls:t,record:r}){return/eip155:/i.test(r)?j6(e,{gatewayUrls:t,record:r}):Dc({uri:r,gatewayUrls:t})}async function j6(e,{gatewayUrls:t,record:r}){let n=f1(r),o=await d1(e,{nft:n}),{uri:s,isOnChain:i,isEncoded:a}=b0({uri:o,gatewayUrls:t});if(i&&(s.includes("data:application/json;base64,")||s.startsWith("{"))){let u=a?atob(s.replace("data:application/json;base64,","")):s,f=JSON.parse(u);return Dc({uri:x0(f),gatewayUrls:t})}let c=n.tokenID;return n.namespace==="erc1155"&&(c=c.replace("0x","").padStart(64,"0")),u1({gatewayUrls:t,uri:s.replace(/(?:0x)?{id}/,c)})}gr();mr();ut();On();q();hi();async function qc(e,t){let{blockNumber:r,blockTag:n,key:o,name:s,gatewayUrls:i,strict:a}=t,{chain:c}=e,u=(()=>{if(t.universalResolverAddress)return t.universalResolverAddress;if(!c)throw new Error("client chain not configured. universalResolverAddress is required.");return ht({blockNumber:r,chain:c,contract:"ensUniversalResolver"})})(),f=c?.ensTlds;if(f&&!f.some(d=>s.endsWith(d)))return null;try{let d={address:u,abi:Pc,args:[Te(hs(s)),ne({abi:e0,functionName:"text",args:[yi(s),o]}),i??[wr]],functionName:"resolveWithGateways",blockNumber:r,blockTag:n},m=await M(e,pe,"readContract")(d);if(m[0]==="0x")return null;let b=Ce({abi:e0,functionName:"text",data:m[0]});return b===""?null:b}catch(d){if(a)throw d;if(ms(d))return null;throw d}}async function p1(e,{blockNumber:t,blockTag:r,assetGatewayUrls:n,name:o,gatewayUrls:s,strict:i,universalResolverAddress:a}){let c=await M(e,qc,"getEnsText")({blockNumber:t,blockTag:r,key:"avatar",name:o,universalResolverAddress:a,gatewayUrls:s,strict:i});if(!c)return null;try{return await l1(e,{record:c,gatewayUrls:n})}catch{return null}}gr();On();hi();async function m1(e,t){let{address:r,blockNumber:n,blockTag:o,coinType:s=60n,gatewayUrls:i,strict:a}=t,{chain:c}=e,u=(()=>{if(t.universalResolverAddress)return t.universalResolverAddress;if(!c)throw new Error("client chain not configured. universalResolverAddress is required.");return ht({blockNumber:n,chain:c,contract:"ensUniversalResolver"})})();try{let f={address:u,abi:Um,args:[r,s,i??[wr]],functionName:"reverseWithGateways",blockNumber:n,blockTag:o},d=M(e,pe,"readContract"),[l]=await d(f);return l||null}catch(f){if(a)throw f;if(ms(f))return null;throw f}}On();q();async function h1(e,t){let{blockNumber:r,blockTag:n,name:o}=t,{chain:s}=e,i=(()=>{if(t.universalResolverAddress)return t.universalResolverAddress;if(!s)throw new Error("client chain not configured. universalResolverAddress is required.");return ht({blockNumber:r,chain:s,contract:"ensUniversalResolver"})})(),a=s?.ensTlds;if(a&&!a.some(u=>o.endsWith(u)))throw new Error(`${o} is not a valid ENS TLD (${a?.join(", ")}) for chain "${s.name}" (id: ${s.id}).`);let[c]=await M(e,pe,"readContract")({address:i,abi:[{inputs:[{type:"bytes"}],name:"findResolver",outputs:[{type:"address"},{type:"bytes32"},{type:"uint256"}],stateMutability:"view",type:"function"}],functionName:"findResolver",args:[Te(hs(o))],blockNumber:r,blockTag:n});return c}Un();et();q();a0();ni();Wo();Tn();async function Gc(e,t){let{account:r=e.account,blockNumber:n,blockTag:o="latest",blobs:s,data:i,gas:a,gasPrice:c,maxFeePerBlobGas:u,maxFeePerGas:f,maxPriorityFeePerGas:d,to:l,value:m,...b}=t,h=r?ee(r):void 0;try{pt(t);let g=(typeof n=="bigint"?_(n):void 0)||o,P=e.chain?.formatters?.transactionRequest?.format,p=(P||jt)({...Wr(b,{format:P}),account:h,blobs:s,data:i,gas:a,gasPrice:c,maxFeePerBlobGas:u,maxFeePerGas:f,maxPriorityFeePerGas:d,to:l,value:m},"createAccessList"),x=await e.request({method:"eth_createAccessList",params:[p,g]});return{accessList:x.accessList,gasUsed:BigInt(x.gasUsed)}}catch(T){throw Hc(T,{...t,account:h,chain:e.chain})}}async function b1(e){let t=Ur(e,{method:"eth_newBlockFilter"}),r=await e.request({method:"eth_newBlockFilter"});return{id:r,request:t(r),type:"block"}}q();async function Vc(e,{address:t,args:r,event:n,events:o,fromBlock:s,strict:i,toBlock:a}={}){let c=o??(n?[n]:void 0),u=Ur(e,{method:"eth_newFilter"}),f=[];c&&(f=[c.flatMap(m=>Mt({abi:[m],eventName:m.name,args:r}))],n&&(f=f[0]));let d=await e.request({method:"eth_newFilter",params:[{address:t,fromBlock:typeof s=="bigint"?_(s):s,toBlock:typeof a=="bigint"?_(a):a,...f.length?{topics:f}:{}}]});return{abi:c,args:r,eventName:n?n.name:void 0,fromBlock:s,id:d,request:u(d),strict:!!i,toBlock:a,type:"event"}}async function Wc(e){let t=Ur(e,{method:"eth_newPendingTransactionFilter"}),r=await e.request({method:"eth_newPendingTransactionFilter"});return{id:r,request:t(r),type:"transaction"}}gr();mr();ut();q();Un();async function x1(e,{address:t,blockNumber:r,blockTag:n=e.experimental_blockTag??"latest"}){if(e.batch?.multicall&&e.chain?.contracts?.multicall3){let i=e.chain.contracts.multicall3.address,a=ne({abi:Gt,functionName:"getEthBalance",args:[t]}),{data:c}=await M(e,bt,"call")({to:i,data:a,blockNumber:r,blockTag:n});return Ce({abi:Gt,functionName:"getEthBalance",args:[t],data:c||"0x"})}let o=typeof r=="bigint"?_(r):void 0,s=await e.request({method:"eth_getBalance",params:[t,o||n]});return BigInt(s)}async function y1(e){let t=await e.request({method:"eth_blobBaseFee"});return BigInt(t)}Le();q();async function g1(e,{blockHash:t,blockNumber:r,blockTag:n="latest"}={}){let o=r!==void 0?_(r):void 0,s;return t?s=await e.request({method:"eth_getBlockTransactionCountByHash",params:[t]},{dedupe:!0}):s=await e.request({method:"eth_getBlockTransactionCountByNumber",params:[o||n]},{dedupe:!!o}),be(s)}q();async function Ln(e,{address:t,blockNumber:r,blockTag:n="latest"}){let o=r!==void 0?_(r):void 0,s=await e.request({method:"eth_getCode",params:[t,o||n]},{dedupe:!!o});if(s!=="0x")return s}$r();ot();mn();async function w1(e,{address:t,blockNumber:r,blockTag:n="latest"}){let o=await Ln(e,{address:t,...r!==void 0?{blockNumber:r}:{blockTag:n}});if(o&&V(o)===23&&o.startsWith("0xef0100"))return Tt(ct(o,3,23))}G();var Zc=class extends A{constructor({address:t}){super(`No EIP-712 domain found on contract "${t}".`,{metaMessages:["Ensure that:",`- The contract is deployed at the address "${t}".`,"- `eip712Domain()` function exists on the contract.","- `eip712Domain()` function matches signature to ERC-5267 specification."],name:"Eip712DomainNotFoundError"})}};async function v1(e,t){let{address:r,factory:n,factoryData:o}=t;try{let[s,i,a,c,u,f,d]=await M(e,pe,"readContract")({abi:D6,address:r,functionName:"eip712Domain",factory:n,factoryData:o});return{domain:{name:i,version:a,chainId:Number(c),verifyingContract:u,salt:f},extensions:d,fields:s}}catch(s){let i=s;throw i.name==="ContractFunctionExecutionError"&&i.cause.name==="ContractFunctionZeroDataError"?new Zc({address:r}):i}}var D6=[{inputs:[],name:"eip712Domain",outputs:[{name:"fields",type:"bytes1"},{name:"name",type:"string"},{name:"version",type:"string"},{name:"chainId",type:"uint256"},{name:"verifyingContract",type:"address"},{name:"salt",type:"bytes32"},{name:"extensions",type:"uint256[]"}],stateMutability:"view",type:"function"}];q();function E1(e){return{baseFeePerGas:e.baseFeePerGas.map(t=>BigInt(t)),gasUsedRatio:e.gasUsedRatio,oldestBlock:BigInt(e.oldestBlock),reward:e.reward?.map(t=>t.map(r=>BigInt(r)))}}async function B1(e,{blockCount:t,blockNumber:r,blockTag:n="latest",rewardPercentiles:o}){let s=typeof r=="bigint"?_(r):void 0,i=await e.request({method:"eth_feeHistory",params:[_(t),s||n,o]},{dedupe:!!s});return E1(i)}async function A1(e,{filter:t}){let r=t.strict??!1,o=(await t.request({method:"eth_getFilterLogs",params:[t.id]})).map(s=>ye(s));return t.abi?rs({abi:t.abi,logs:o,strict:r}):o}q();$r();ts();async function I1({address:e,authorization:t,signature:r}){return Rt(Tt(e),await tc({authorization:t,signature:r}))}G();yn();Gs();zs();var Kc=new Ut(8192);function S1(e,{enabled:t=!0,id:r}){if(!t||!r)return e();if(Kc.get(r))return Kc.get(r);let n=e().finally(()=>Kc.delete(r));return Kc.set(r,n),n}Ge();function T1(e,t={}){return async(r,n={})=>{let{dedupe:o=!1,methods:s,retryDelay:i=150,retryCount:a=3,uid:c}={...t,...n},{method:u}=r;if(s?.exclude?.includes(u))throw new _r(new Error("method not supported"),{method:u});if(s?.include&&!s.include.includes(u))throw new _r(new Error("method not supported"),{method:u});let f=o?G6(`${c}.${W(r)}`):void 0;return S1(()=>xi(async()=>{try{return await e(r)}catch(d){let l=d;switch(l.code){case lo.code:throw new lo(l);case po.code:throw new po(l);case mo.code:throw new mo(l,{method:r.method});case ho.code:throw new ho(l);case ir.code:throw new ir(l);case dt.code:throw new dt(l);case bo.code:throw new bo(l);case xo.code:throw new xo(l);case yo.code:throw new yo(l);case _r.code:throw new _r(l,{method:r.method});case gn.code:throw new gn(l);case go.code:throw new go(l);case wn.code:throw new wn(l);case wo.code:throw new wo(l);case vo.code:throw new vo(l);case Eo.code:throw new Eo(l);case Bo.code:throw new Bo(l);case Ao.code:throw new Ao(l);case Io.code:throw new Io(l);case So.code:throw new So(l);case To.code:throw new To(l);case Po.code:throw new Po(l);case ko.code:throw new ko(l);case Ho.code:throw new Ho(l);case Ro.code:throw new Ro(l);case 5e3:throw new wn(l);case Co.code:throw new Co(l);default:throw d instanceof A?d:new Ga(l)}}},{delay:({count:d,error:l})=>{if(l&&l instanceof ft){let m=l?.headers?.get("Retry-After");if(m?.match(/\d/))return Number.parseInt(m,10)*1e3}return~~(1<q6(d)}),{enabled:o,id:f})}}function q6(e){return"code"in e&&typeof e.code=="number"?e.code===-1||e.code===gn.code||e.code===ir.code||e.code===429:e instanceof ft&&e.status?e.status===403||e.status===408||e.status===413||e.status===429||e.status===500||e.status===502||e.status===503||e.status===504:!0}function G6(e,t=0){let r=3735928559^t,n=1103547991^t;for(let o=0;o>>16,2246822507),r^=Math.imul(n^n>>>16,3266489909),n=Math.imul(n^n>>>16,2246822507),n^=Math.imul(r^r>>>16,3266489909),(4294967296*(2097151&n)+(r>>>0)).toString(36)}Le();yn();function P1(e,{errorInstance:t=new Error("timed out"),timeout:r,signal:n}){return new Promise((o,s)=>{(async()=>{let i;try{let a=new AbortController;r>0&&(i=setTimeout(()=>{n?a.abort():s(t)},r)),o(await e({signal:a?.signal||null}))}catch(a){a?.name==="AbortError"&&s(t),s(a)}finally{clearTimeout(i)}})()})}Ge();function V6(){return{current:0,take(){return this.current++},reset(){this.current=0}}}var y0=V6();function k1(e,t={}){let{url:r,headers:n}=W6(e);return{async request(o){let{body:s,fetchFn:i=t.fetchFn??fetch,onRequest:a=t.onRequest,onResponse:c=t.onResponse,timeout:u=t.timeout??1e4}=o,f={...t.fetchOptions??{},...o.fetchOptions??{}},{headers:d,method:l,signal:m}=f;try{let b=await P1(async({signal:T})=>{let g={...f,body:Array.isArray(s)?W(s.map(x=>({jsonrpc:"2.0",id:x.id??y0.take(),...x}))):W({jsonrpc:"2.0",id:s.id??y0.take(),...s}),headers:{...n,"Content-Type":"application/json",...d},method:l||"POST",signal:m||(u>0?T:null)},P=new Request(r,g),y=await a?.(P,g)??{...g,url:r};return await i(y.url??r,y)},{errorInstance:new qs({body:s,url:r}),timeout:u,signal:!0});c&&await c(b);let h;if(b.headers.get("Content-Type")?.startsWith("application/json"))h=await b.json();else{h=await b.text();try{h=JSON.parse(h||"{}")}catch(T){if(b.ok)throw T;h={error:h}}}if(!b.ok){if(typeof h.error?.code=="number"&&typeof h.error?.message=="string")return h;throw new ft({body:s,details:W(h.error)||b.statusText,headers:b.headers,status:b.status,url:r})}return h}catch(b){throw b instanceof ft||b instanceof qs?b:new ft({body:s,cause:b,url:r})}}}}function W6(e){try{let t=new URL(e),r=(()=>{if(t.username){let n=`${decodeURIComponent(t.username)}:${decodeURIComponent(t.password)}`;return t.username="",t.password="",{url:t.toString(),headers:{Authorization:`Basic ${btoa(n)}`}}}})();return{url:t.toString(),...r}}catch{return{url:e}}}St();var H1=`Ethereum Signed Message: +`;at();ot();q();function R1(e){let t=typeof e=="string"?eo(e):typeof e.raw=="string"?e.raw:Y(e.raw),r=eo(`${H1}${V(t)}`);return Ie([r,t])}function Yc(e,t){return J(R1(e),t)}nr();at();q();St();ae();pn();Ge();G();var Xc=class extends A{constructor({domain:t}){super(`Invalid domain "${W(t)}".`,{metaMessages:["Must be a valid EIP-712 domain."]})}},Jc=class extends A{constructor({primaryType:t,types:r}){super(`Invalid primary type \`${t}\` must be one of \`${JSON.stringify(Object.keys(r))}\`.`,{docsPath:"/api/glossary/Errors#typeddatainvalidprimarytypeerror",metaMessages:["Check that the primary type is a key in `types`."]})}},Qc=class extends A{constructor({type:t}){super(`Struct type "${t}" is invalid.`,{metaMessages:["Struct type must not be a Solidity type."],name:"InvalidStructTypeError"})}};rr();ot();q();Vu();function C1(e){let{domain:t,message:r,primaryType:n,types:o}=e,s=(i,a)=>{for(let c of i){let{name:u,type:f}=c,d=a[u],l=f.match(Sa);if(l&&(typeof d=="number"||typeof d=="bigint")){let[h,T,g]=l;_(d,{signed:T==="int",size:Number.parseInt(g,10)/8})}if(f==="address"&&typeof d=="string"&&!de(d))throw new Pe({address:d});let m=f.match(Hl);if(m){let[h,T]=m;if(T&&V(d)!==Number.parseInt(T,10))throw new da({expectedSize:Number.parseInt(T,10),givenSize:V(d)})}let b=o[f];b&&(Z6(f),s(b,d))}};if(o.EIP712Domain&&t){if(typeof t!="object")throw new Xc({domain:t});s(o.EIP712Domain,t)}if(n!=="EIP712Domain")if(o[n])s(o[n],r);else throw new Jc({primaryType:n,types:o})}function N1({domain:e}){return[typeof e?.name=="string"&&{name:"name",type:"string"},e?.version&&{name:"version",type:"string"},(typeof e?.chainId=="number"||typeof e?.chainId=="bigint")&&{name:"chainId",type:"uint256"},e?.verifyingContract&&{name:"verifyingContract",type:"address"},e?.salt&&{name:"salt",type:"bytes32"}].filter(Boolean)}function Z6(e){if(e==="address"||e==="bool"||e==="string"||e.startsWith("bytes")||e.startsWith("uint")||e.startsWith("int"))throw new Qc({type:e})}function $1(e){let{domain:t={},message:r,primaryType:n}=e,o={EIP712Domain:N1({domain:t}),...e.types};C1({domain:t,message:r,primaryType:n,types:o});let s=["0x1901"];return t&&s.push(K6({domain:t,types:o})),n!=="EIP712Domain"&&s.push(O1({data:r,primaryType:n,types:o})),J(Ie(s))}function K6({domain:e,types:t}){return O1({data:e,primaryType:"EIP712Domain",types:t})}function O1({data:e,primaryType:t,types:r}){let n=U1({data:e,primaryType:t,types:r});return J(n)}function U1({data:e,primaryType:t,types:r}){let n=[{type:"bytes32"}],o=[Y6({primaryType:t,types:r})];for(let s of r[t]){let[i,a]=M1({types:r,name:s.name,type:s.type,value:e[s.name]});n.push(i),o.push(a)}return Me(n,o)}function Y6({primaryType:e,types:t}){let r=Te(X6({primaryType:e,types:t}));return J(r)}function X6({primaryType:e,types:t}){let r="",n=L1({primaryType:e,types:t});n.delete(e);let o=[e,...Array.from(n).sort()];for(let s of o)r+=`${s}(${t[s].map(({name:i,type:a})=>`${a} ${i}`).join(",")})`;return r}function L1({primaryType:e,types:t},r=new Set){let o=e.match(/^\w*/u)?.[0];if(r.has(o)||t[o]===void 0)return r;r.add(o);for(let s of t[o])L1({primaryType:s.type,types:t},r);return r}function M1({types:e,name:t,type:r,value:n}){if(e[r]!==void 0)return[{type:"bytes32"},J(U1({data:n,primaryType:r,types:e}))];if(r==="bytes")return[{type:"bytes32"},J(n)];if(r==="string")return[{type:"bytes32"},J(Te(n))];if(r.lastIndexOf("]")===r.length-1){let o=r.slice(0,r.lastIndexOf("[")),s=n.map(i=>M1({name:t,type:o,types:e,value:i}));return[{type:"bytes32"},J(Me(s.map(([i])=>i),s.map(([,i])=>i)))]}return[{type:r},n]}var Ti={};Ri(Ti,{InvalidWrappedSignatureError:()=>vu,assert:()=>Eu,from:()=>d5,magicBytes:()=>ud,suffixParameters:()=>fd,unwrap:()=>Gh,validate:()=>p5,wrap:()=>l5});Ps();Kr();var eu=class extends Map{constructor(t){super(),Object.defineProperty(this,"maxSize",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.maxSize=t}get(t){let r=super.get(t);return super.has(t)&&r!==void 0&&(this.delete(t),super.set(t,r)),r}set(t,r){if(super.set(t,r),this.maxSize&&this.size>this.maxSize){let n=this.keys().next().value;n&&this.delete(n)}return this}};var J6={checksum:new eu(8192)},tu=J6.checksum;Ze();var Mn=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;function ey(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name==="Uint8Array"}function _n(e){if(!Number.isSafeInteger(e)||e<0)throw new Error("positive integer expected, got "+e)}function Zt(e,...t){if(!ey(e))throw new Error("Uint8Array expected");if(t.length>0&&!t.includes(e.length))throw new Error("Uint8Array expected of length "+t+", got length="+e.length)}function _1(e){if(typeof e!="function"||typeof e.create!="function")throw new Error("Hash should be wrapped by utils.createHasher");_n(e.outputLen),_n(e.blockLen)}function vr(e,t=!0){if(e.destroyed)throw new Error("Hash instance has been destroyed");if(t&&e.finished)throw new Error("Hash#digest() has already been called")}function ru(e,t){Zt(e);let r=t.outputLen;if(e.length>>t}var ty=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function ry(e){return e<<24&4278190080|e<<8&16711680|e>>>8&65280|e>>>24&255}function ny(e){for(let t=0;te:ny;function oy(e){if(typeof e!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(e))}function zn(e){return typeof e=="string"&&(e=oy(e)),Zt(e),e}function F1(...e){let t=0;for(let n=0;ne().update(zn(n)).digest(),r=e();return t.outputLen=r.outputLen,t.blockLen=r.blockLen,t.create=()=>e(),t}function j1(e=32){if(Mn&&typeof Mn.getRandomValues=="function")return Mn.getRandomValues(new Uint8Array(e));if(Mn&&typeof Mn.randomBytes=="function")return Uint8Array.from(Mn.randomBytes(e));throw new Error("crypto.getRandomValues must be defined")}var su=class extends en{constructor(t,r){super(),this.finished=!1,this.destroyed=!1,_1(t);let n=zn(r);if(this.iHash=t.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let o=this.blockLen,s=new Uint8Array(o);s.set(n.length>o?t.create().update(n).digest():n);for(let i=0;inew su(e,t).update(r).digest();w0.create=(e,t)=>new su(e,t);function sy(e,t,r,n){if(typeof e.setBigUint64=="function")return e.setBigUint64(t,r,n);let o=BigInt(32),s=BigInt(4294967295),i=Number(r>>o&s),a=Number(r&s),c=n?4:0,u=n?0:4;e.setUint32(t+c,i,n),e.setUint32(t+u,a,n)}function D1(e,t,r){return e&t^~e&r}function q1(e,t,r){return e&t^e&r^t&r}var iu=class extends en{constructor(t,r,n,o){super(),this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.blockLen=t,this.outputLen=r,this.padOffset=n,this.isLE=o,this.buffer=new Uint8Array(t),this.view=nu(this.buffer)}update(t){vr(this),t=zn(t),Zt(t);let{view:r,buffer:n,blockLen:o}=this,s=t.length;for(let i=0;io-i&&(this.process(n,0),i=0);for(let d=i;df.length)throw new Error("_sha2: outputLen bigger than state");for(let d=0;d>G1&au)}:{h:Number(e>>G1&au)|0,l:Number(e&au)|0}}function V1(e,t=!1){let r=e.length,n=new Uint32Array(r),o=new Uint32Array(r);for(let s=0;se<>>32-r,Z1=(e,t,r)=>t<>>32-r,K1=(e,t,r)=>t<>>64-r,Y1=(e,t,r)=>e<>>64-r;var ay=BigInt(0),gi=BigInt(1),cy=BigInt(2),uy=BigInt(7),fy=BigInt(256),dy=BigInt(113),Q1=[],eh=[],th=[];for(let e=0,t=gi,r=1,n=0;e<24;e++){[r,n]=[n,(2*r+3*n)%5],Q1.push(2*(5*n+r)),eh.push((e+1)*(e+2)/2%64);let o=ay;for(let s=0;s<7;s++)t=(t<>uy)*dy)%fy,t&cy&&(o^=gi<<(gi<r>32?K1(e,t,r):W1(e,t,r),J1=(e,t,r)=>r>32?Y1(e,t,r):Z1(e,t,r);function my(e,t=24){let r=new Uint32Array(10);for(let n=24-t;n<24;n++){for(let i=0;i<10;i++)r[i]=e[i]^e[i+10]^e[i+20]^e[i+30]^e[i+40];for(let i=0;i<10;i+=2){let a=(i+8)%10,c=(i+2)%10,u=r[c],f=r[c+1],d=X1(u,f,1)^r[a],l=J1(u,f,1)^r[a+1];for(let m=0;m<50;m+=10)e[i+m]^=d,e[i+m+1]^=l}let o=e[2],s=e[3];for(let i=0;i<24;i++){let a=eh[i],c=X1(o,s,a),u=J1(o,s,a),f=Q1[i];o=e[f],s=e[f+1],e[f]=c,e[f+1]=u}for(let i=0;i<50;i+=10){for(let a=0;a<10;a++)r[a]=e[i+a];for(let a=0;a<10;a++)e[i+a]^=~r[(a+2)%10]&r[(a+4)%10]}e[0]^=ly[n],e[1]^=py[n]}Kt(r)}var v0=class e extends en{constructor(t,r,n,o=!1,s=24){if(super(),this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,this.enableXOF=!1,this.blockLen=t,this.suffix=r,this.outputLen=n,this.enableXOF=o,this.rounds=s,_n(n),!(0=n&&this.keccak();let i=Math.min(n-this.posOut,s-o);t.set(r.subarray(this.posOut,this.posOut+i),o),this.posOut+=i,o+=i}return t}xofInto(t){if(!this.enableXOF)throw new Error("XOF is not possible for this instance");return this.writeInto(t)}xof(t){return _n(t),this.xofInto(new Uint8Array(t))}digestInto(t){if(ru(t,this),this.finished)throw new Error("digest() was already called");return this.writeInto(t),this.destroy(),t}digest(){return this.digestInto(new Uint8Array(this.outputLen))}destroy(){this.destroyed=!0,Kt(this.state)}_cloneInto(t){let{blockLen:r,suffix:n,outputLen:o,rounds:s,enableXOF:i}=this;return t||(t=new e(r,n,o,i,s)),t.state32.set(this.state32),t.pos=this.pos,t.posOut=this.posOut,t.finished=this.finished,t.rounds=s,t.suffix=n,t.outputLen=o,t.enableXOF=i,t.destroyed=this.destroyed,t}},hy=(e,t,r)=>ou(()=>new v0(t,e,r));var nh=hy(1,136,256/8);var by=Uint32Array.from([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),tn=new Uint32Array(64),E0=class extends iu{constructor(t=32){super(64,t,8,!1),this.A=Er[0]|0,this.B=Er[1]|0,this.C=Er[2]|0,this.D=Er[3]|0,this.E=Er[4]|0,this.F=Er[5]|0,this.G=Er[6]|0,this.H=Er[7]|0}get(){let{A:t,B:r,C:n,D:o,E:s,F:i,G:a,H:c}=this;return[t,r,n,o,s,i,a,c]}set(t,r,n,o,s,i,a,c){this.A=t|0,this.B=r|0,this.C=n|0,this.D=o|0,this.E=s|0,this.F=i|0,this.G=a|0,this.H=c|0}process(t,r){for(let d=0;d<16;d++,r+=4)tn[d]=t.getUint32(r,!1);for(let d=16;d<64;d++){let l=tn[d-15],m=tn[d-2],b=Ct(l,7)^Ct(l,18)^l>>>3,h=Ct(m,17)^Ct(m,19)^m>>>10;tn[d]=h+tn[d-7]+b+tn[d-16]|0}let{A:n,B:o,C:s,D:i,E:a,F:c,G:u,H:f}=this;for(let d=0;d<64;d++){let l=Ct(a,6)^Ct(a,11)^Ct(a,25),m=f+l+D1(a,c,u)+by[d]+tn[d]|0,h=(Ct(n,2)^Ct(n,13)^Ct(n,22))+q1(n,o,s)|0;f=u,u=c,c=a,a=i+m|0,i=s,s=o,o=n,n=m+h|0}n=n+this.A|0,o=o+this.B|0,s=s+this.C|0,i=i+this.D|0,a=a+this.E|0,c=c+this.F|0,u=u+this.G|0,f=f+this.H|0,this.set(n,o,s,i,a,c,u,f)}roundClean(){Kt(tn)}destroy(){this.set(0,0,0,0,0,0,0,0),Kt(this.buffer)}};var oh=ou(()=>new E0);Kr();ge();function Fn(e,t={}){let{as:r=typeof e=="string"?"Hex":"Bytes"}=t,n=nh(Im(e));return r==="Bytes"?n:fe(n)}Kr();Ze();ge();ui();function sh(e,t={}){let{compressed:r}=t,{prefix:n,x:o,y:s}=e;if(r===!1||typeof o=="bigint"&&typeof s=="bigint"){if(n!==4)throw new cu({prefix:n,cause:new S0});return}if(r===!0||typeof o=="bigint"&&typeof s>"u"){if(n!==3&&n!==2)throw new cu({prefix:n,cause:new I0});return}throw new A0({publicKey:e})}function ih(e){let t=(()=>{if(di(e))return ah(e);if(Rm(e))return xy(e);let{prefix:r,x:n,y:o}=e;return typeof n=="bigint"&&typeof o=="bigint"?{prefix:r??4,x:n,y:o}:{prefix:r,x:n}})();return sh(t),t}function xy(e){return ah(fe(e))}function ah(e){if(e.length!==132&&e.length!==130&&e.length!==68)throw new T0({publicKey:e});if(e.length===130){let n=BigInt(re(e,0,32)),o=BigInt(re(e,32,64));return{prefix:4,x:n,y:o}}if(e.length===132){let n=Number(re(e,0,1)),o=BigInt(re(e,1,33)),s=BigInt(re(e,33,65));return{prefix:n,x:o,y:s}}let t=Number(re(e,0,1)),r=BigInt(re(e,1,33));return{prefix:t,x:r}}function P0(e,t={}){sh(e);let{prefix:r,x:n,y:o}=e,{includePrefix:s=!0}=t;return oe(s?Z(r,{size:1}):"0x",Z(n,{size:32}),typeof o=="bigint"?Z(o,{size:32}):"0x")}var A0=class extends F{constructor({publicKey:t}){super(`Value \`${Yr(t)}\` is not a valid public key.`,{metaMessages:["Public key must contain:","- an `x` and `prefix` value (compressed)","- an `x`, `y`, and `prefix` value (uncompressed)"]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"PublicKey.InvalidError"})}},cu=class extends F{constructor({prefix:t,cause:r}){super(`Prefix "${t}" is invalid.`,{cause:r}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"PublicKey.InvalidPrefixError"})}},I0=class extends F{constructor(){super("Prefix must be 2 or 3 for compressed public keys."),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"PublicKey.InvalidCompressedPrefixError"})}},S0=class extends F{constructor(){super("Prefix must be 4 for uncompressed public keys."),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"PublicKey.InvalidUncompressedPrefixError"})}},T0=class extends F{constructor({publicKey:t}){super(`Value \`${t}\` is an invalid public key size.`,{metaMessages:["Expected: 33 bytes (compressed + prefix), 64 bytes (uncompressed) or 65 bytes (uncompressed + prefix).",`Received ${te(ds(t))} bytes.`]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"PublicKey.InvalidSerializedSizeError"})}};var yy=/^0x[a-fA-F0-9]{40}$/;function jn(e,t={}){let{strict:r=!0}=t;if(!yy.test(e))throw new uu({address:e,cause:new k0});if(r){if(e.toLowerCase()===e)return;if(fu(e)!==e)throw new uu({address:e,cause:new H0})}}function fu(e){if(tu.has(e))return tu.get(e);jn(e,{strict:!1});let t=e.substring(2).toLowerCase(),r=Fn(Sm(t),{as:"Bytes"}),n=t.split("");for(let s=0;s<40;s+=2)r[s>>1]>>4>=8&&n[s]&&(n[s]=n[s].toUpperCase()),(r[s>>1]&15)>=8&&n[s+1]&&(n[s+1]=n[s+1].toUpperCase());let o=`0x${n.join("")}`;return tu.set(e,o),o}function gy(e,t={}){let{checksum:r=!1}=t;return jn(e),r?fu(e):e}function uh(e,t={}){let r=Fn(`0x${P0(e).slice(4)}`).substring(26);return gy(`0x${r}`,t)}function du(e,t={}){let{strict:r=!0}=t??{};try{return jn(e,{strict:r}),!0}catch{return!1}}var uu=class extends F{constructor({address:t,cause:r}){super(`Address "${t}" is invalid.`,{cause:r}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"Address.InvalidAddressError"})}},k0=class extends F{constructor(){super("Address is not a 20 byte (40 hexadecimal character) value."),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"Address.InvalidInputError"})}},H0=class extends F{constructor(){super("Address does not match its checksum counterpart."),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"Address.InvalidChecksumError"})}};Kr();Ze();ge();Kr();Ze();ge();var fh=/^(.*)\[([0-9]*)\]$/,dh=/^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/,pu=/^(u?int)(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/,Sk=2n**(8n-1n)-1n,Tk=2n**(16n-1n)-1n,Pk=2n**(24n-1n)-1n,kk=2n**(32n-1n)-1n,Hk=2n**(40n-1n)-1n,Rk=2n**(48n-1n)-1n,Ck=2n**(56n-1n)-1n,Nk=2n**(64n-1n)-1n,$k=2n**(72n-1n)-1n,Ok=2n**(80n-1n)-1n,Uk=2n**(88n-1n)-1n,Lk=2n**(96n-1n)-1n,Mk=2n**(104n-1n)-1n,_k=2n**(112n-1n)-1n,zk=2n**(120n-1n)-1n,Fk=2n**(128n-1n)-1n,jk=2n**(136n-1n)-1n,Dk=2n**(144n-1n)-1n,qk=2n**(152n-1n)-1n,Gk=2n**(160n-1n)-1n,Vk=2n**(168n-1n)-1n,Wk=2n**(176n-1n)-1n,Zk=2n**(184n-1n)-1n,Kk=2n**(192n-1n)-1n,Yk=2n**(200n-1n)-1n,Xk=2n**(208n-1n)-1n,Jk=2n**(216n-1n)-1n,Qk=2n**(224n-1n)-1n,eH=2n**(232n-1n)-1n,tH=2n**(240n-1n)-1n,rH=2n**(248n-1n)-1n,nH=2n**(256n-1n)-1n,oH=-(2n**(8n-1n)),sH=-(2n**(16n-1n)),iH=-(2n**(24n-1n)),aH=-(2n**(32n-1n)),cH=-(2n**(40n-1n)),uH=-(2n**(48n-1n)),fH=-(2n**(56n-1n)),dH=-(2n**(64n-1n)),lH=-(2n**(72n-1n)),pH=-(2n**(80n-1n)),mH=-(2n**(88n-1n)),hH=-(2n**(96n-1n)),bH=-(2n**(104n-1n)),xH=-(2n**(112n-1n)),yH=-(2n**(120n-1n)),gH=-(2n**(128n-1n)),wH=-(2n**(136n-1n)),vH=-(2n**(144n-1n)),EH=-(2n**(152n-1n)),BH=-(2n**(160n-1n)),AH=-(2n**(168n-1n)),IH=-(2n**(176n-1n)),SH=-(2n**(184n-1n)),TH=-(2n**(192n-1n)),PH=-(2n**(200n-1n)),kH=-(2n**(208n-1n)),HH=-(2n**(216n-1n)),RH=-(2n**(224n-1n)),CH=-(2n**(232n-1n)),NH=-(2n**(240n-1n)),$H=-(2n**(248n-1n)),OH=-(2n**(256n-1n)),UH=2n**8n-1n,LH=2n**16n-1n,MH=2n**24n-1n,_H=2n**32n-1n,zH=2n**40n-1n,FH=2n**48n-1n,jH=2n**56n-1n,DH=2n**64n-1n,qH=2n**72n-1n,GH=2n**80n-1n,VH=2n**88n-1n,WH=2n**96n-1n,ZH=2n**104n-1n,KH=2n**112n-1n,YH=2n**120n-1n,XH=2n**128n-1n,JH=2n**136n-1n,QH=2n**144n-1n,eR=2n**152n-1n,tR=2n**160n-1n,rR=2n**168n-1n,nR=2n**176n-1n,oR=2n**184n-1n,sR=2n**192n-1n,iR=2n**200n-1n,aR=2n**208n-1n,cR=2n**216n-1n,uR=2n**224n-1n,fR=2n**232n-1n,dR=2n**240n-1n,lR=2n**248n-1n,R0=2n**256n-1n;function Dn(e,t,r){let{checksumAddress:n,staticPosition:o}=r,s=$0(t.type);if(s){let[i,a]=s;return vy(e,{...t,type:a},{checksumAddress:n,length:i,staticPosition:o})}if(t.type==="tuple")return Iy(e,t,{checksumAddress:n,staticPosition:o});if(t.type==="address")return wy(e,{checksum:n});if(t.type==="bool")return Ey(e);if(t.type.startsWith("bytes"))return By(e,t,{staticPosition:o});if(t.type.startsWith("uint")||t.type.startsWith("int"))return Ay(e,t);if(t.type==="string")return Sy(e,{staticPosition:o});throw new xs(t.type)}var ph=32,C0=32;function wy(e,t={}){let{checksum:r=!1}=t,n=e.readBytes(32);return[(s=>r?fu(s):s)(fe(Tm(n,-20))),32]}function vy(e,t,r){let{checksumAddress:n,length:o,staticPosition:s}=r;if(!o){let c=Dt(e.readBytes(C0)),u=s+c,f=u+ph;e.setPosition(u);let d=Dt(e.readBytes(ph)),l=wi(t),m=0,b=[];for(let h=0;h48?Pm(o,{signed:r}):Dt(o,{signed:r}),32]}function Iy(e,t,r){let{checksumAddress:n,staticPosition:o}=r,s=t.components.length===0||t.components.some(({name:c})=>!c),i=s?[]:{},a=0;if(wi(t)){let c=Dt(e.readBytes(C0)),u=o+c;for(let f=0;f0?oe(u,c):u}}if(i)return{dynamic:!0,encoded:c}}return{dynamic:!1,encoded:oe(...a.map(({encoded:c})=>c))}}function ky(e,{type:t}){let[,r]=t.split("bytes"),n=te(e);if(!r){let o=e;return n%32!==0&&(o=qt(o,Math.ceil((e.length-2)/2/32)*32)),{dynamic:!0,encoded:oe(yr(Z(n,{size:32})),o)}}if(n!==Number.parseInt(r,10))throw new vi({expectedSize:Number.parseInt(r,10),value:e});return{dynamic:!1,encoded:qt(e)}}function Hy(e){if(typeof e!="boolean")throw new F(`Invalid boolean value: "${e}" (type: ${typeof e}). Expected: \`true\` or \`false\`.`);return{dynamic:!1,encoded:yr(Ic(e))}}function Ry(e,{signed:t,size:r}){if(typeof r=="number"){let n=2n**(BigInt(r)-(t?1n:0n))-1n,o=t?-n-1n:0n;if(e>n||ei))}}function $0(e){let t=e.match(/^(.*)\[(\d+)?\]$/);return t?[t[2]?Number(t[2]):null,t[1]]:void 0}function wi(e){let{type:t}=e;if(t==="string"||t==="bytes"||t.endsWith("[]"))return!0;if(t==="tuple")return e.components?.some(wi);let r=$0(e.type);return!!(r&&wi({...e,type:r[1]}))}Ze();var Oy={bytes:new Uint8Array,dataView:new DataView(new ArrayBuffer(0)),position:0,positionReadCount:new Map,recursiveReadCount:0,recursiveReadLimit:Number.POSITIVE_INFINITY,assertReadLimit(){if(this.recursiveReadCount>=this.recursiveReadLimit)throw new U0({count:this.recursiveReadCount+1,limit:this.recursiveReadLimit})},assertPosition(e){if(e<0||e>this.bytes.length-1)throw new O0({length:this.bytes.length,position:e})},decrementPosition(e){if(e<0)throw new xu({offset:e});let t=this.position-e;this.assertPosition(t),this.position=t},getReadCount(e){return this.positionReadCount.get(e||this.position)||0},incrementPosition(e){if(e<0)throw new xu({offset:e});let t=this.position+e;this.assertPosition(t),this.position=t},inspectByte(e){let t=e??this.position;return this.assertPosition(t),this.bytes[t]},inspectBytes(e,t){let r=t??this.position;return this.assertPosition(r+e-1),this.bytes.subarray(r,r+e)},inspectUint8(e){let t=e??this.position;return this.assertPosition(t),this.bytes[t]},inspectUint16(e){let t=e??this.position;return this.assertPosition(t+1),this.dataView.getUint16(t)},inspectUint24(e){let t=e??this.position;return this.assertPosition(t+2),(this.dataView.getUint16(t)<<8)+this.dataView.getUint8(t+2)},inspectUint32(e){let t=e??this.position;return this.assertPosition(t+3),this.dataView.getUint32(t)},pushByte(e){this.assertPosition(this.position),this.bytes[this.position]=e,this.position++},pushBytes(e){this.assertPosition(this.position+e.length-1),this.bytes.set(e,this.position),this.position+=e.length},pushUint8(e){this.assertPosition(this.position),this.bytes[this.position]=e,this.position++},pushUint16(e){this.assertPosition(this.position+1),this.dataView.setUint16(this.position,e),this.position+=2},pushUint24(e){this.assertPosition(this.position+2),this.dataView.setUint16(this.position,e>>8),this.dataView.setUint8(this.position+2,e&255),this.position+=3},pushUint32(e){this.assertPosition(this.position+3),this.dataView.setUint32(this.position,e),this.position+=4},readByte(){this.assertReadLimit(),this._touch();let e=this.inspectByte();return this.position++,e},readBytes(e,t){this.assertReadLimit(),this._touch();let r=this.inspectBytes(e);return this.position+=t??e,r},readUint8(){this.assertReadLimit(),this._touch();let e=this.inspectUint8();return this.position+=1,e},readUint16(){this.assertReadLimit(),this._touch();let e=this.inspectUint16();return this.position+=2,e},readUint24(){this.assertReadLimit(),this._touch();let e=this.inspectUint24();return this.position+=3,e},readUint32(){this.assertReadLimit(),this._touch();let e=this.inspectUint32();return this.position+=4,e},get remaining(){return this.bytes.length-this.position},setPosition(e){let t=this.position;return this.assertPosition(e),this.position=e,()=>this.position=t},_touch(){if(this.recursiveReadLimit===Number.POSITIVE_INFINITY)return;let e=this.getReadCount();this.positionReadCount.set(this.position,e+1),e>0&&this.recursiveReadCount++}};function yu(e,{recursiveReadLimit:t=8192}={}){let r=Object.create(Oy);return r.bytes=e,r.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength),r.positionReadCount=new Map,r.recursiveReadLimit=t,r}var xu=class extends F{constructor({offset:t}){super(`Offset \`${t}\` cannot be negative.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"Cursor.NegativeOffsetError"})}},O0=class extends F{constructor({length:t,position:r}){super(`Position \`${r}\` is out of bounds (\`0 < position < ${t}\`).`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"Cursor.PositionOutOfBoundsError"})}},U0=class extends F{constructor({count:t,limit:r}){super(`Recursive read limit of \`${r}\` exceeded (recursive read count: \`${t}\`).`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"Cursor.RecursiveReadLimitExceededError"})}};function ys(e,t,r={}){let{as:n="Array",checksumAddress:o=!1}=r,s=typeof t=="string"?fs(t):t,i=yu(s);if(mt(s)===0&&e.length>0)throw new _0;if(mt(s)&&mt(s)<32)throw new M0({data:typeof t=="string"?t:fe(t),parameters:e,size:mt(s)});let a=0,c=n==="Array"?[]:{};for(let u=0;uxh(t))):My(e)}function Ly(e){let t=e.reduce((o,s)=>o+s.length,0),r=yh(t);return{length:t<=55?1+t:1+r+t,encode(o){t<=55?o.pushByte(192+t):(o.pushByte(247+r),r===1?o.pushUint8(t):r===2?o.pushUint16(t):r===3?o.pushUint24(t):o.pushUint32(t));for(let{encode:s}of e)s(o)}}}function My(e){let t=typeof e=="string"?fs(e):e,r=yh(t.length);return{length:t.length===1&&t[0]<128?1:t.length<=55?1+t.length:1+r+t.length,encode(o){t.length===1&&t[0]<128?o.pushBytes(t):t.length<=55?(o.pushByte(128+t.length),o.pushBytes(t)):(o.pushByte(183+r),r===1?o.pushUint8(t.length):r===2?o.pushUint16(t.length):r===3?o.pushUint24(t.length):o.pushUint32(t.length),o.pushBytes(t))}}}function yh(e){if(e<=255)return 1;if(e<=65535)return 2;if(e<=16777215)return 3;if(e<=4294967295)return 4;throw new F("Length is too large.")}bc();var Fe=BigInt(0),$e=BigInt(1),qn=BigInt(2),zy=BigInt(3),wh=BigInt(4),vh=BigInt(5),Eh=BigInt(8);function Ne(e,t){let r=e%t;return r>=Fe?r:t+r}function nt(e,t,r){let n=e;for(;t-- >Fe;)n*=n,n%=r;return n}function wu(e,t){if(e===Fe)throw new Error("invert: expected non-zero number");if(t<=Fe)throw new Error("invert: expected positive modulus, got "+t);let r=Ne(e,t),n=t,o=Fe,s=$e,i=$e,a=Fe;for(;r!==Fe;){let u=n/r,f=n%r,d=o-i*u,l=s-a*u;n=r,r=f,o=i,s=a,i=d,a=l}if(n!==$e)throw new Error("invert: does not exist");return Ne(o,t)}function Bh(e,t){let r=(e.ORDER+$e)/wh,n=e.pow(t,r);if(!e.eql(e.sqr(n),t))throw new Error("Cannot find square root");return n}function Fy(e,t){let r=(e.ORDER-vh)/Eh,n=e.mul(t,qn),o=e.pow(n,r),s=e.mul(t,o),i=e.mul(e.mul(s,qn),o),a=e.mul(s,e.sub(i,e.ONE));if(!e.eql(e.sqr(a),t))throw new Error("Cannot find square root");return a}function jy(e){if(e1e3)throw new Error("Cannot find square root: probably non-prime P");if(r===1)return Bh;let s=o.pow(n,t),i=(t+$e)/qn;return function(c,u){if(c.is0(u))return u;if(gh(c,u)!==1)throw new Error("Cannot find square root");let f=r,d=c.mul(c.ONE,s),l=c.pow(u,t),m=c.pow(u,i);for(;!c.eql(l,c.ONE);){if(c.is0(l))return c.ZERO;let b=1,h=c.sqr(l);for(;!c.eql(h,c.ONE);)if(b++,h=c.sqr(h),b===f)throw new Error("Cannot find square root");let T=$e<(n[o]="function",n),t);return Cn(e,r)}function Gy(e,t,r){if(rFe;)r&$e&&(n=e.mul(n,o)),o=e.sqr(o),r>>=$e;return n}function F0(e,t,r=!1){let n=new Array(t.length).fill(r?e.ZERO:void 0),o=t.reduce((i,a,c)=>e.is0(a)?i:(n[c]=i,e.mul(i,a)),e.ONE),s=e.inv(o);return t.reduceRight((i,a,c)=>e.is0(a)?i:(n[c]=e.mul(i,n[c]),e.mul(i,a)),s),n}function gh(e,t){let r=(e.ORDER-$e)/qn,n=e.pow(t,r),o=e.eql(n,e.ONE),s=e.eql(n,e.ZERO),i=e.eql(n,e.neg(e.ONE));if(!o&&!s&&!i)throw new Error("invalid Legendre symbol result");return o?1:s?0:-1}function j0(e,t){t!==void 0&&_n(t);let r=t!==void 0?t:e.toString(2).length,n=Math.ceil(r/8);return{nBitLength:r,nByteLength:n}}function Ai(e,t,r=!1,n={}){if(e<=Fe)throw new Error("invalid field: expected ORDER > 0, got "+e);let{nBitLength:o,nByteLength:s}=j0(e,t);if(s>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");let i,a=Object.freeze({ORDER:e,isLE:r,BITS:o,BYTES:s,MASK:Rn(o),ZERO:Fe,ONE:$e,create:c=>Ne(c,e),isValid:c=>{if(typeof c!="bigint")throw new Error("invalid field element: expected bigint, got "+typeof c);return Fe<=c&&cc===Fe,isOdd:c=>(c&$e)===$e,neg:c=>Ne(-c,e),eql:(c,u)=>c===u,sqr:c=>Ne(c*c,e),add:(c,u)=>Ne(c+u,e),sub:(c,u)=>Ne(c-u,e),mul:(c,u)=>Ne(c*u,e),pow:(c,u)=>Gy(a,c,u),div:(c,u)=>Ne(c*wu(u,e),e),sqrN:c=>c*c,addN:(c,u)=>c+u,subN:(c,u)=>c-u,mulN:(c,u)=>c*u,inv:c=>wu(c,e),sqrt:n.sqrt||(c=>(i||(i=Dy(e)),i(a,c))),toBytes:c=>r?Df(c,s):kn(c,s),fromBytes:c=>{if(c.length!==s)throw new Error("Field.fromBytes: expected "+s+" bytes, got "+c.length);return r?jf(c):br(c)},invertBatch:c=>F0(a,c),cmov:(c,u,f)=>f?u:c});return Object.freeze(a)}function Ah(e){if(typeof e!="bigint")throw new Error("field order must be bigint");let t=e.toString(2).length;return Math.ceil(t/8)}function D0(e){let t=Ah(e);return t+Math.ceil(t/2)}function Ih(e,t,r=!1){let n=e.length,o=Ah(t),s=D0(t);if(n<16||n1024)throw new Error("expected "+s+"-1024 bytes of input, got "+n);let i=r?jf(e):br(e),a=Ne(i,t-$e)+$e;return r?Df(a,o):kn(a,o)}bc();var Sh=BigInt(0),Z0=BigInt(1);function q0(e,t){let r=t.negate();return e?r:t}function Ph(e,t){if(!Number.isSafeInteger(e)||e<=0||e>t)throw new Error("invalid window size, expected [1.."+t+"], got W="+e)}function G0(e,t){Ph(e,t);let r=Math.ceil(t/e)+1,n=2**(e-1),o=2**e,s=Rn(e),i=BigInt(e);return{windows:r,windowSize:n,mask:s,maxNumber:o,shiftBy:i}}function Th(e,t,r){let{windowSize:n,mask:o,maxNumber:s,shiftBy:i}=r,a=Number(e&o),c=e>>i;a>n&&(a-=s,c+=Z0);let u=t*n,f=u+Math.abs(a)-1,d=a===0,l=a<0,m=t%2!==0;return{nextN:c,offset:f,isZero:d,isNeg:l,isNegF:m,offsetF:u}}function Vy(e,t){if(!Array.isArray(e))throw new Error("array expected");e.forEach((r,n)=>{if(!(r instanceof t))throw new Error("invalid point at index "+n)})}function Wy(e,t){if(!Array.isArray(e))throw new Error("array of scalars expected");e.forEach((r,n)=>{if(!t.isValid(r))throw new Error("invalid scalar at index "+n)})}var V0=new WeakMap,kh=new WeakMap;function W0(e){return kh.get(e)||1}function Hh(e,t){return{constTimeNegate:q0,hasPrecomputes(r){return W0(r)!==1},unsafeLadder(r,n,o=e.ZERO){let s=r;for(;n>Sh;)n&Z0&&(o=o.add(s)),s=s.double(),n>>=Z0;return o},precomputeWindow(r,n){let{windows:o,windowSize:s}=G0(n,t),i=[],a=r,c=a;for(let u=0;u12?c=a-3:a>4?c=a-2:a>0&&(c=2);let u=Rn(c),f=new Array(Number(u)+1).fill(i),d=Math.floor((t.BITS-1)/c)*c,l=i;for(let m=d;m>=0;m-=c){f.fill(i);for(let h=0;h>BigInt(m)&u);f[g]=f[g].add(r[h])}let b=i;for(let h=f.length-1,T=i;h>0;h--)T=T.add(f[h]),b=b.add(T);if(l=l.add(b),m!==0)for(let h=0;h{let{Err:r}=Br;if(e<0||e>256)throw new r("tlv.encode: wrong tag");if(t.length&1)throw new r("tlv.encode: unpadded data");let n=t.length/2,o=oi(n);if(o.length/2&128)throw new r("tlv.encode: long form length too big");let s=n>127?oi(o.length/2|128):"";return oi(e)+s+o+t},decode(e,t){let{Err:r}=Br,n=0;if(e<0||e>256)throw new r("tlv.encode: wrong tag");if(t.length<2||t[n++]!==e)throw new r("tlv.decode: wrong tlv");let o=t[n++],s=!!(o&128),i=0;if(!s)i=o;else{let c=o&127;if(!c)throw new r("tlv.decode(long): indefinite length not supported");if(c>4)throw new r("tlv.decode(long): byte length is too big");let u=t.subarray(n,n+c);if(u.length!==c)throw new r("tlv.decode: length bytes not complete");if(u[0]===0)throw new r("tlv.decode(long): zero leftmost byte");for(let f of u)i=i<<8|f;if(n+=c,i<128)throw new r("tlv.decode(long): not minimal encoding")}let a=t.subarray(n,n+i);if(a.length!==i)throw new r("tlv.decode: wrong value length");return{v:a,l:t.subarray(n+i)}}},_int:{encode(e){let{Err:t}=Br;if(e{let E=p.toAffine();return ii(Uint8Array.from([4]),r.toBytes(E.x),r.toBytes(E.y))}),s=t.fromBytes||(y=>{let p=y.subarray(1),x=r.fromBytes(p.subarray(0,r.BYTES)),E=r.fromBytes(p.subarray(r.BYTES,2*r.BYTES));return{x,y:E}});function i(y){let{a:p,b:x}=t,E=r.sqr(y),B=r.mul(E,y);return r.add(r.add(B,r.mul(y,p)),x)}function a(y,p){let x=r.sqr(p),E=i(y);return r.eql(x,E)}if(!a(t.Gx,t.Gy))throw new Error("bad curve params: generator point");let c=r.mul(r.pow(t.a,X0),Ky),u=r.mul(r.sqr(t.b),BigInt(27));if(r.is0(r.add(c,u)))throw new Error("bad curve params: a or b");function f(y){return hc(y,we,t.n)}function d(y){let{allowedPrivateKeyLengths:p,nByteLength:x,wrapPrivateKey:E,n:B}=t;if(p&&typeof y!="bigint"){if(os(y)&&(y=is(y)),typeof y!="string"||!p.includes(y.length))throw new Error("invalid private key");y=y.padStart(x*2,"0")}let S;try{S=typeof y=="bigint"?y:br(We("private key",y,x))}catch{throw new Error("invalid private key, expected hex or "+x+" bytes, got "+typeof y)}return E&&(S=Ne(S,B)),Hn("private key",S,we,B),S}function l(y){if(!(y instanceof h))throw new Error("ProjectivePoint expected")}let m=qf((y,p)=>{let{px:x,py:E,pz:B}=y;if(r.eql(B,r.ONE))return{x,y:E};let S=y.is0();p==null&&(p=S?r.ONE:r.inv(B));let O=r.mul(x,p),I=r.mul(E,p),k=r.mul(B,p);if(S)return{x:r.ZERO,y:r.ZERO};if(!r.eql(k,r.ONE))throw new Error("invZ was invalid");return{x:O,y:I}}),b=qf(y=>{if(y.is0()){if(t.allowInfinityPoint&&!r.is0(y.py))return;throw new Error("bad point: ZERO")}let{x:p,y:x}=y.toAffine();if(!r.isValid(p)||!r.isValid(x))throw new Error("bad point: x or y not FE");if(!a(p,x))throw new Error("bad point: equation left != right");if(!y.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return!0});class h{constructor(p,x,E){if(p==null||!r.isValid(p))throw new Error("x required");if(x==null||!r.isValid(x)||r.is0(x))throw new Error("y required");if(E==null||!r.isValid(E))throw new Error("z required");this.px=p,this.py=x,this.pz=E,Object.freeze(this)}static fromAffine(p){let{x,y:E}=p||{};if(!p||!r.isValid(x)||!r.isValid(E))throw new Error("invalid affine point");if(p instanceof h)throw new Error("projective point not allowed");let B=S=>r.eql(S,r.ZERO);return B(x)&&B(E)?h.ZERO:new h(x,E,r.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(p){let x=F0(r,p.map(E=>E.pz));return p.map((E,B)=>E.toAffine(x[B])).map(h.fromAffine)}static fromHex(p){let x=h.fromAffine(s(We("pointHex",p)));return x.assertValidity(),x}static fromPrivateKey(p){return h.BASE.multiply(d(p))}static msm(p,x){return Rh(h,n,p,x)}_setWindowSize(p){P.setWindowSize(this,p)}assertValidity(){b(this)}hasEvenY(){let{y:p}=this.toAffine();if(r.isOdd)return!r.isOdd(p);throw new Error("Field doesn't support isOdd")}equals(p){l(p);let{px:x,py:E,pz:B}=this,{px:S,py:O,pz:I}=p,k=r.eql(r.mul(x,I),r.mul(S,B)),$=r.eql(r.mul(E,I),r.mul(O,B));return k&&$}negate(){return new h(this.px,r.neg(this.py),this.pz)}double(){let{a:p,b:x}=t,E=r.mul(x,X0),{px:B,py:S,pz:O}=this,I=r.ZERO,k=r.ZERO,$=r.ZERO,N=r.mul(B,B),z=r.mul(S,S),v=r.mul(O,O),w=r.mul(B,S);return w=r.add(w,w),$=r.mul(B,O),$=r.add($,$),I=r.mul(p,$),k=r.mul(E,v),k=r.add(I,k),I=r.sub(z,k),k=r.add(z,k),k=r.mul(I,k),I=r.mul(w,I),$=r.mul(E,$),v=r.mul(p,v),w=r.sub(N,v),w=r.mul(p,w),w=r.add(w,$),$=r.add(N,N),N=r.add($,N),N=r.add(N,v),N=r.mul(N,w),k=r.add(k,N),v=r.mul(S,O),v=r.add(v,v),N=r.mul(v,w),I=r.sub(I,N),$=r.mul(v,z),$=r.add($,$),$=r.add($,$),new h(I,k,$)}add(p){l(p);let{px:x,py:E,pz:B}=this,{px:S,py:O,pz:I}=p,k=r.ZERO,$=r.ZERO,N=r.ZERO,z=t.a,v=r.mul(t.b,X0),w=r.mul(x,S),C=r.mul(E,O),H=r.mul(B,I),U=r.add(x,E),L=r.add(S,O);U=r.mul(U,L),L=r.add(w,C),U=r.sub(U,L),L=r.add(x,B);let j=r.add(S,I);return L=r.mul(L,j),j=r.add(w,H),L=r.sub(L,j),j=r.add(E,B),k=r.add(O,I),j=r.mul(j,k),k=r.add(C,H),j=r.sub(j,k),N=r.mul(z,L),k=r.mul(v,H),N=r.add(k,N),k=r.sub(C,N),N=r.add(C,N),$=r.mul(k,N),C=r.add(w,w),C=r.add(C,w),H=r.mul(z,H),L=r.mul(v,L),C=r.add(C,H),H=r.sub(w,H),H=r.mul(z,H),L=r.add(L,H),w=r.mul(C,L),$=r.add($,w),w=r.mul(j,L),k=r.mul(U,k),k=r.sub(k,w),w=r.mul(U,C),N=r.mul(j,N),N=r.add(N,w),new h(k,$,N)}subtract(p){return this.add(p.negate())}is0(){return this.equals(h.ZERO)}wNAF(p){return P.wNAFCached(this,p,h.normalizeZ)}multiplyUnsafe(p){let{endo:x,n:E}=t;Hn("scalar",p,Ar,E);let B=h.ZERO;if(p===Ar)return B;if(this.is0()||p===we)return this;if(!x||P.hasPrecomputes(this))return P.wNAFCachedUnsafe(this,p,h.normalizeZ);let{k1neg:S,k1:O,k2neg:I,k2:k}=x.splitScalar(p),$=B,N=B,z=this;for(;O>Ar||k>Ar;)O&we&&($=$.add(z)),k&we&&(N=N.add(z)),z=z.double(),O>>=we,k>>=we;return S&&($=$.negate()),I&&(N=N.negate()),N=new h(r.mul(N.px,x.beta),N.py,N.pz),$.add(N)}multiply(p){let{endo:x,n:E}=t;Hn("scalar",p,we,E);let B,S;if(x){let{k1neg:O,k1:I,k2neg:k,k2:$}=x.splitScalar(p),{p:N,f:z}=this.wNAF(I),{p:v,f:w}=this.wNAF($);N=P.constTimeNegate(O,N),v=P.constTimeNegate(k,v),v=new h(r.mul(v.px,x.beta),v.py,v.pz),B=N.add(v),S=z.add(w)}else{let{p:O,f:I}=this.wNAF(p);B=O,S=I}return h.normalizeZ([B,S])[0]}multiplyAndAddUnsafe(p,x,E){let B=h.BASE,S=(I,k)=>k===Ar||k===we||!I.equals(B)?I.multiplyUnsafe(k):I.multiply(k),O=S(this,x).add(S(p,E));return O.is0()?void 0:O}toAffine(p){return m(this,p)}isTorsionFree(){let{h:p,isTorsionFree:x}=t;if(p===we)return!0;if(x)return x(h,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){let{h:p,clearCofactor:x}=t;return p===we?this:x?x(h,this):this.multiplyUnsafe(t.h)}toRawBytes(p=!0){return ss("isCompressed",p),this.assertValidity(),o(h,this,p)}toHex(p=!0){return ss("isCompressed",p),is(this.toRawBytes(p))}}h.BASE=new h(t.Gx,t.Gy,r.ONE),h.ZERO=new h(r.ZERO,r.ONE,r.ZERO);let{endo:T,nBitLength:g}=t,P=Hh(h,T?Math.ceil(g/2):g);return{CURVE:t,ProjectivePoint:h,normPrivateKeyToScalar:d,weierstrassEquation:i,isWithinCurveOrder:f}}function Xy(e){let t=K0(e);return Cn(t,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...t})}function Nh(e){let t=Xy(e),{Fp:r,n,nByteLength:o,nBitLength:s}=t,i=r.BYTES+1,a=2*r.BYTES+1;function c(v){return Ne(v,n)}function u(v){return wu(v,n)}let{ProjectivePoint:f,normPrivateKeyToScalar:d,weierstrassEquation:l,isWithinCurveOrder:m}=Yy({...t,toBytes(v,w,C){let H=w.toAffine(),U=r.toBytes(H.x),L=ii;return ss("isCompressed",C),C?L(Uint8Array.from([w.hasEvenY()?2:3]),U):L(Uint8Array.from([4]),U,r.toBytes(H.y))},fromBytes(v){let w=v.length,C=v[0],H=v.subarray(1);if(w===i&&(C===2||C===3)){let U=br(H);if(!hc(U,we,r.ORDER))throw new Error("Point is not on curve");let L=l(U),j;try{j=r.sqrt(L)}catch(Q){let K=Q instanceof Error?": "+Q.message:"";throw new Error("Point is not on curve"+K)}let D=(j&we)===we;return(C&1)===1!==D&&(j=r.neg(j)),{x:U,y:j}}else if(w===a&&C===4){let U=r.fromBytes(H.subarray(0,r.BYTES)),L=r.fromBytes(H.subarray(r.BYTES,2*r.BYTES));return{x:U,y:L}}else{let U=i,L=a;throw new Error("invalid Point, expected length of "+U+", or uncompressed "+L+", got "+w)}}});function b(v){let w=n>>we;return v>w}function h(v){return b(v)?c(-v):v}let T=(v,w,C)=>br(v.slice(w,C));class g{constructor(w,C,H){Hn("r",w,we,n),Hn("s",C,we,n),this.r=w,this.s=C,H!=null&&(this.recovery=H),Object.freeze(this)}static fromCompact(w){let C=o;return w=We("compactSignature",w,C*2),new g(T(w,0,C),T(w,C,2*C))}static fromDER(w){let{r:C,s:H}=Br.toSig(We("DER",w));return new g(C,H)}assertValidity(){}addRecoveryBit(w){return new g(this.r,this.s,w)}recoverPublicKey(w){let{r:C,s:H,recovery:U}=this,L=B(We("msgHash",w));if(U==null||![0,1,2,3].includes(U))throw new Error("recovery id invalid");let j=U===2||U===3?C+t.n:C;if(j>=r.ORDER)throw new Error("recovery id 2 or 3 invalid");let D=(U&1)===0?"02":"03",se=f.fromHex(D+Y0(j,r.BYTES)),Q=u(j),K=c(-L*Q),Ye=c(H*Q),ve=f.BASE.multiplyAndAddUnsafe(se,K,Ye);if(!ve)throw new Error("point at infinify");return ve.assertValidity(),ve}hasHighS(){return b(this.s)}normalizeS(){return this.hasHighS()?new g(this.r,c(-this.s),this.recovery):this}toDERRawBytes(){return si(this.toDERHex())}toDERHex(){return Br.hexFromSig(this)}toCompactRawBytes(){return si(this.toCompactHex())}toCompactHex(){let w=o;return Y0(this.r,w)+Y0(this.s,w)}}let P={isValidPrivateKey(v){try{return d(v),!0}catch{return!1}},normPrivateKeyToScalar:d,randomPrivateKey:()=>{let v=D0(t.n);return Ih(t.randomBytes(v),t.n)},precompute(v=8,w=f.BASE){return w._setWindowSize(v),w.multiply(BigInt(3)),w}};function y(v,w=!0){return f.fromPrivateKey(v).toRawBytes(w)}function p(v){if(typeof v=="bigint")return!1;if(v instanceof f)return!0;let C=We("key",v).length,H=r.BYTES,U=H+1,L=2*H+1;if(!(t.allowedPrivateKeyLengths||o===U))return C===U||C===L}function x(v,w,C=!0){if(p(v)===!0)throw new Error("first arg must be private key");if(p(w)===!1)throw new Error("second arg must be public key");return f.fromHex(w).multiply(d(v)).toRawBytes(C)}let E=t.bits2int||function(v){if(v.length>8192)throw new Error("input is too large");let w=br(v),C=v.length*8-s;return C>0?w>>BigInt(C):w},B=t.bits2int_modN||function(v){return c(E(v))},S=Rn(s);function O(v){return Hn("num < 2^"+s,v,Ar,S),kn(v,o)}function I(v,w,C=k){if(["recovered","canonical"].some(Oe=>Oe in C))throw new Error("sign() legacy options not supported");let{hash:H,randomBytes:U}=t,{lowS:L,prehash:j,extraEntropy:D}=C;L==null&&(L=!0),v=We("msgHash",v),Ch(C),j&&(v=We("prehashed msgHash",H(v)));let se=B(v),Q=d(w),K=[O(Q),O(se)];if(D!=null&&D!==!1){let Oe=D===!0?U(r.BYTES):D;K.push(We("extraEntropy",Oe))}let Ye=ii(...K),ve=se;function an(Oe){let Xe=E(Oe);if(!m(Xe))return;let cn=u(Xe),yt=f.BASE.multiply(Xe).toAffine(),Ue=c(yt.x);if(Ue===Ar)return;let gt=c(cn*c(ve+Ue*Q));if(gt===Ar)return;let Je=(yt.x===Ue?0:2)|Number(yt.y&we),As=gt;return L&&b(gt)&&(As=h(gt),Je^=1),new g(Ue,As,Je)}return{seed:Ye,k2sig:an}}let k={lowS:t.lowS,prehash:!1},$={lowS:t.lowS,prehash:!1};function N(v,w,C=k){let{seed:H,k2sig:U}=I(v,w,C),L=t;return dm(L.hash.outputLen,L.nByteLength,L.hmac)(H,U)}f.BASE._setWindowSize(8);function z(v,w,C,H=$){let U=v;w=We("msgHash",w),C=We("publicKey",C);let{lowS:L,prehash:j,format:D}=H;if(Ch(H),"strict"in H)throw new Error("options.strict was renamed to lowS");if(D!==void 0&&D!=="compact"&&D!=="der")throw new Error("format must be compact or der");let se=typeof U=="string"||os(U),Q=!se&&!D&&typeof U=="object"&&U!==null&&typeof U.r=="bigint"&&typeof U.s=="bigint";if(!se&&!Q)throw new Error("invalid signature, expected Uint8Array, hex string or Signature instance");let K,Ye;try{if(Q&&(K=new g(U.r,U.s)),se){try{D!=="compact"&&(K=g.fromDER(U))}catch(Je){if(!(Je instanceof Br.Err))throw Je}!K&&D!=="der"&&(K=g.fromCompact(U))}Ye=f.fromHex(C)}catch{return!1}if(!K||L&&K.hasHighS())return!1;j&&(w=t.hash(w));let{r:ve,s:an}=K,Oe=B(w),Xe=u(an),cn=c(Oe*Xe),yt=c(ve*Xe),Ue=f.BASE.multiplyAndAddUnsafe(Ye,cn,yt)?.toAffine();return Ue?c(Ue.x)===ve:!1}return{CURVE:t,getPublicKey:y,getSharedSecret:x,sign:N,verify:z,ProjectivePoint:f,Signature:g,utils:P}}function Jy(e){return{hash:e,hmac:(t,...r)=>w0(e,t,F1(...r)),randomBytes:j1}}function $h(e,t){let r=n=>Nh({...e,...Jy(n)});return{...r(t),create:r}}var Lh=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),Oh=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),Qy=BigInt(0),e5=BigInt(1),Q0=BigInt(2),Uh=(e,t)=>(e+t/Q0)/t;function t5(e){let t=Lh,r=BigInt(3),n=BigInt(6),o=BigInt(11),s=BigInt(22),i=BigInt(23),a=BigInt(44),c=BigInt(88),u=e*e*e%t,f=u*u*e%t,d=nt(f,r,t)*f%t,l=nt(d,r,t)*f%t,m=nt(l,Q0,t)*u%t,b=nt(m,o,t)*m%t,h=nt(b,s,t)*b%t,T=nt(h,a,t)*h%t,g=nt(T,c,t)*T%t,P=nt(g,a,t)*h%t,y=nt(P,r,t)*f%t,p=nt(y,i,t)*b%t,x=nt(p,n,t)*u%t,E=nt(x,Q0,t);if(!ed.eql(ed.sqr(E),e))throw new Error("Cannot find square root");return E}var ed=Ai(Lh,void 0,void 0,{sqrt:t5}),Mh=$h({a:Qy,b:BigInt(7),Fp:ed,n:Oh,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:e=>{let t=Oh,r=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-e5*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),o=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),s=r,i=BigInt("0x100000000000000000000000000000000"),a=Uh(s*e,t),c=Uh(-n*e,t),u=Ne(e-a*r-c*o,t),f=Ne(-a*n-c*s,t),d=u>i,l=f>i;if(d&&(u=t-u),l&&(f=t-f),u>i||f>i)throw new Error("splitScalar: Endomorphism failed, k="+e);return{k1neg:d,k1:u,k2neg:l,k2:f}}}},oh);Ze();ge();ui();function sd(e,t={}){let{recovered:r}=t;if(typeof e.r>"u")throw new Ii({signature:e});if(typeof e.s>"u")throw new Ii({signature:e});if(r&&typeof e.yParity>"u")throw new Ii({signature:e});if(e.r<0n||e.r>R0)throw new rd({value:e.r});if(e.s<0n||e.s>R0)throw new nd({value:e.s});if(typeof e.yParity=="number"&&e.yParity!==0&&e.yParity!==1)throw new Si({value:e.yParity})}function r5(e){return _h(fe(e))}function _h(e){if(e.length!==130&&e.length!==132)throw new td({signature:e});let t=BigInt(re(e,0,32)),r=BigInt(re(e,32,64)),n=(()=>{let o=+`0x${e.slice(130)}`;if(!Number.isNaN(o))try{return cd(o)}catch{throw new Si({value:o})}})();return typeof n>"u"?{r:t,s:r}:{r:t,s:r,yParity:n}}function id(e){if(!(typeof e.r>"u")&&!(typeof e.s>"u"))return ad(e)}function ad(e){let t=typeof e=="string"?_h(e):e instanceof Uint8Array?r5(e):typeof e.r=="string"?o5(e):e.v?n5(e):{r:e.r,s:e.s,...typeof e.yParity<"u"?{yParity:e.yParity}:{}};return sd(t),t}function n5(e){return{r:e.r,s:e.s,yParity:cd(e.v)}}function o5(e){let t=(()=>{let r=e.v?Number(e.v):void 0,n=e.yParity?Number(e.yParity):void 0;if(typeof r=="number"&&typeof n!="number"&&(n=cd(r)),typeof n!="number")throw new Si({value:e.yParity});return n})();return{r:BigInt(e.r),s:BigInt(e.s),yParity:t}}function zh(e){let{r:t,s:r,yParity:n}=e;return[n?"0x01":"0x",t===0n?"0x":Jf(Z(t)),r===0n?"0x":Jf(Z(r))]}function cd(e){if(e===0||e===27)return 0;if(e===1||e===28)return 1;if(e>=35)return e%2===0?1:0;throw new od({value:e})}var td=class extends F{constructor({signature:t}){super(`Value \`${t}\` is an invalid signature size.`,{metaMessages:["Expected: 64 bytes or 65 bytes.",`Received ${te(ds(t))} bytes.`]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"Signature.InvalidSerializedSizeError"})}},Ii=class extends F{constructor({signature:t}){super(`Signature \`${Yr(t)}\` is missing either an \`r\`, \`s\`, or \`yParity\` property.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"Signature.MissingPropertiesError"})}},rd=class extends F{constructor({value:t}){super(`Value \`${t}\` is an invalid r value. r must be a positive integer less than 2^256.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"Signature.InvalidRError"})}},nd=class extends F{constructor({value:t}){super(`Value \`${t}\` is an invalid s value. s must be a positive integer less than 2^256.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"Signature.InvalidSError"})}},Si=class extends F{constructor({value:t}){super(`Value \`${t}\` is an invalid y-parity value. Y-parity must be 0 or 1.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"Signature.InvalidYParityError"})}},od=class extends F{constructor({value:t}){super(`Value \`${t}\` is an invalid v value. v must be 27, 28 or >=35.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"Signature.InvalidVError"})}};function jh(e,t={}){return typeof e.chainId=="string"?s5(e):{...e,...t.signature}}function s5(e){let{address:t,chainId:r,nonce:n}=e,o=id(e);return{address:t,chainId:Number(r),nonce:BigInt(n),...o}}function Dh(e){return i5(e,{presign:!0})}function i5(e,t={}){let{presign:r}=t;return Fn(oe("0x05",bh(a5(r?{address:e.address,chainId:e.chainId,nonce:e.nonce}:e))))}function a5(e){let{address:t,chainId:r,nonce:n}=e,o=id(e);return[r?Z(r):"0x",t,n?Z(n):"0x",...o?zh(o):[]]}Ze();ge();ge();function qh(e){return uh(u5(e))}function u5(e){let{payload:t,signature:r}=e,{r:n,s:o,yParity:s}=r,a=new Mh.Signature(BigInt(n),BigInt(o)).addRecoveryBit(s).recoverPublicKey(ds(t).substring(2));return ih(a)}var ud="0x8010801080108010801080108010801080108010801080108010801080108010",fd=Bi("(uint256 chainId, address delegation, uint256 nonce, uint8 yParity, uint256 r, uint256 s), address to, bytes data");function Eu(e){if(typeof e=="string"){if(re(e,-32)!==ud)throw new vu(e)}else sd(e.authorization)}function d5(e){return typeof e=="string"?Gh(e):e}function Gh(e){Eu(e);let t=Ec(re(e,-64,-32)),r=re(e,-t-64,-64),n=re(e,0,-t-64),[o,s,i]=ys(fd,r);return{authorization:jh({address:o.delegation,chainId:Number(o.chainId),nonce:o.nonce,yParity:o.yParity,r:o.r,s:o.s}),signature:n,...i&&i!=="0x"?{data:i,to:s}:{}}}function l5(e){let{data:t,signature:r}=e;Eu(e);let n=qh({payload:Dh(e.authorization),signature:ad(e.authorization)}),o=rn(fd,[{...e.authorization,delegation:e.authorization.address,chainId:BigInt(e.authorization.chainId)},e.to??n,t??"0x"]),s=Z(te(o),{size:32});return oe(r,o,s,ud)}function p5(e){try{return Eu(e),!0}catch{return!1}}var vu=class extends F{constructor(t){super(`Value \`${t}\` is an invalid ERC-8010 wrapped signature.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"SignatureErc8010.InvalidWrappedSignatureError"})}};function m5(e){return e.map(t=>({...t,value:BigInt(t.value)}))}function Vh(e){return{...e,balance:e.balance?BigInt(e.balance):void 0,nonce:e.nonce?be(e.nonce):void 0,storageProof:e.storageProof?m5(e.storageProof):void 0}}async function Wh(e,{address:t,blockNumber:r,blockTag:n,storageKeys:o}){let s=n??"latest",i=r!==void 0?_(r):void 0,a=await e.request({method:"eth_getProof",params:[t,o,i||s]});return Vh(a)}q();async function Zh(e,{address:t,blockNumber:r,blockTag:n="latest",slot:o}){let s=r!==void 0?_(r):void 0;return await e.request({method:"eth_getStorageAt",params:[t,o,s||n]})}sr();q();async function gs(e,{blockHash:t,blockNumber:r,blockTag:n,hash:o,index:s,sender:i,nonce:a}){let c=n||"latest",u=r!==void 0?_(r):void 0,f=null;if(o?f=await e.request({method:"eth_getTransactionByHash",params:[o]},{dedupe:!0}):t?f=await e.request({method:"eth_getTransactionByBlockHashAndIndex",params:[t,_(s)]},{dedupe:!0}):(u||c)&&typeof s=="number"?f=await e.request({method:"eth_getTransactionByBlockNumberAndIndex",params:[u||c,_(s)]},{dedupe:!!u}):i&&typeof a=="number"&&(f=await e.request({method:"eth_getTransactionBySenderAndNonce",params:[i,_(a)]},{dedupe:!0})),!f)throw new ao({blockHash:t,blockNumber:r,blockTag:c,hash:o,index:s});return(e.chain?.formatters?.transaction?.format||Xo)(f,"getTransaction")}async function Kh(e,{hash:t,transactionReceipt:r}){let[n,o]=await Promise.all([M(e,Wt,"getBlockNumber")({}),t?M(e,gs,"getTransaction")({hash:t}):void 0]),s=r?.blockNumber||o?.blockNumber;return s?n-s+1n:0n}sr();async function ws(e,{hash:t}){let r=await e.request({method:"eth_getTransactionReceipt",params:[t]},{dedupe:!0});if(!r)throw new co({hash:t});return(e.chain?.formatters?.transactionReceipt?.format||Uc)(r,"getTransactionReceipt")}gr();li();ae();G();Lr();mr();ut();On();async function Yh(e,t){let{account:r,authorizationList:n,allowFailure:o=!0,blockNumber:s,blockOverrides:i,blockTag:a,stateOverride:c}=t,u=t.contracts,{batchSize:f=t.batchSize??1024,deployless:d=t.deployless??!1}=typeof e.batch?.multicall=="object"?e.batch.multicall:{},l=(()=>{if(t.multicallAddress)return t.multicallAddress;if(d)return null;if(e.chain)return ht({blockNumber:s,chain:e.chain,contract:"multicall3"});throw new Error("client chain not configured. multicallAddress is required.")})(),m=[[]],b=0,h=0;for(let P=0;P0&&h>f&&m[b].length>0&&(b++,h=(B.length-2)/2,m[b]=[]),m[b]=[...m[b],{allowFailure:!0,callData:B,target:p}]}catch(B){let S=kt(B,{abi:y,address:p,args:x,docsPath:"/docs/contract/multicall",functionName:E,sender:r});if(!o)throw S;m[b]=[...m[b],{allowFailure:!0,callData:"0x",target:p}]}}let T=await Promise.allSettled(m.map(P=>M(e,pe,"readContract")({...l===null?{code:ps}:{address:l},abi:Gt,account:r,args:[P],authorizationList:n,blockNumber:s,blockOverrides:i,blockTag:a,functionName:"aggregate3",stateOverride:c}))),g=[];for(let P=0;P{let g=T,P=g.account?ee(g.account):void 0,y=g.abi?ne(g):g.data,p={...g,account:P,data:g.dataSuffix?Ie([y||"0x",g.dataSuffix]):y,from:g.from??P?.address};return pt(p),jt(p)}),h=l.stateOverrides?Zo(l.stateOverrides):void 0;c.push({blockOverrides:m,calls:b,stateOverrides:h})}let f=(typeof r=="bigint"?_(r):void 0)||n;return(await e.request({method:"eth_simulateV1",params:[{blockStateCalls:c,returnFullTransactions:s,traceTransfers:i,validation:a},f]})).map((l,m)=>({...sc(l),calls:l.calls.map((b,h)=>{let{abi:T,args:g,functionName:P,to:y}=o[m].calls[h],p=b.error?.data??b.returnData,x=BigInt(b.gasUsed),E=b.logs?.map(I=>ye(I)),B=b.status==="0x1"?"success":"failure",S=T&&B==="success"&&p!=="0x"?Ce({abi:T,data:p,functionName:P}):null,O=(()=>{if(B==="success")return;let I;if(p==="0x"?I=new st:p&&(I=new zt({data:p})),!!I)return kt(I,{abi:T??[],address:y??"0x",args:g,functionName:P??""})})();return{data:p,gasUsed:x,logs:E,status:B,...B==="success"?{result:S}:{error:O}}})}))}catch(c){let u=c,f=Vr(u,{});throw f instanceof lt?u:f}}Ps();Ze();ge();Ze();function Au(e){let t=!0,r="",n=0,o="",s=!1;for(let i=0;iBu(Object.values(e)[s],o)):/^u?int(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/.test(n)?r==="number"||r==="bigint":/^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/.test(n)?r==="string"||e instanceof Uint8Array:/[a-z]+[1-9]{0,3}(\[[0-9]{0,}\])+$/.test(n)?Array.isArray(e)&&e.every(o=>Bu(o,{...t,type:n.replace(/(\[[0-9]{0,}\])$/,"")})):!1}}function dd(e,t,r){for(let n in e){let o=e[n],s=t[n];if(o.type==="tuple"&&s.type==="tuple"&&"components"in o&&"components"in s)return dd(o.components,s.components,r[n]);let i=[o.type,s.type];if(i.includes("address")&&i.includes("bytes20")?!0:i.includes("address")&&i.includes("string")?du(r[n],{strict:!1}):i.includes("address")&&i.includes("bytes")?du(r[n],{strict:!1}):!1)return i}}function Iu(e,t={}){let{prepare:r=!0}=t,n=Array.isArray(e)?Qi(e):typeof e=="string"?Qi(e):e;return{...n,...r?{hash:vs(n)}:{}}}function ki(e,t,r){let{args:n=[],prepare:o=!0}=r??{},s=di(t,{strict:!1}),i=e.filter(u=>s?u.type==="function"||u.type==="error"?pd(u)===re(t,0,4):u.type==="event"?vs(u)===t:!1:"name"in u&&u.name===t);if(i.length===0)throw new nn({name:t});if(i.length===1)return{...i[0],...o?{hash:vs(i[0])}:{}};let a;for(let u of i){if(!("inputs"in u))continue;if(!n||n.length===0){if(!u.inputs||u.inputs.length===0)return{...u,...o?{hash:vs(u)}:{}};continue}if(!u.inputs||u.inputs.length===0||u.inputs.length!==n.length)continue;if(n.every((d,l)=>{let m="inputs"in u&&u.inputs[l];return m?Bu(d,m):!1})){if(a&&"inputs"in a&&a.inputs){let d=dd(u.inputs,a.inputs,n);if(d)throw new ld({abiItem:u,type:d[0]},{abiItem:a,type:d[1]})}a=u}}let c=(()=>{if(a)return a;let[u,...f]=i;return{...u,overloads:f}})();if(!c)throw new nn({name:t});return{...c,...o?{hash:vs(c)}:{}}}function pd(...e){let t=(()=>{if(Array.isArray(e[0])){let[r,n]=e;return ki(r,n)}return e[0]})();return re(vs(t),0,4)}function b5(...e){let t=(()=>{if(Array.isArray(e[0])){let[n,o]=e;return ki(n,o)}return e[0]})(),r=typeof t=="string"?t:un(t);return Au(r)}function vs(...e){let t=(()=>{if(Array.isArray(e[0])){let[r,n]=e;return ki(r,n)}return e[0]})();return typeof t!="string"&&"hash"in t&&t.hash?t.hash:Fn(ls(b5(t)))}var ld=class extends F{constructor(t,r){super("Found ambiguous types in overloaded ABI Items.",{metaMessages:[`\`${t.type}\` in \`${Au(un(t.abiItem))}\`, and`,`\`${r.type}\` in \`${Au(un(r.abiItem))}\``,"","These types encode differently and cannot be distinguished at runtime.","Remove one of the ambiguous items in the ABI."]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"AbiItem.AmbiguityError"})}},nn=class extends F{constructor({name:t,data:r,type:n="item"}){let o=t?` with name "${t}"`:r?` with data "${r}"`:"";super(`ABI ${n}${o} not found.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"AbiItem.NotFoundError"})}};ge();function Jh(...e){let[t,r]=(()=>{if(Array.isArray(e[0])){let[s,i]=e;return[x5(s),i]}return e})(),{bytecode:n,args:o}=r;return oe(n,t.inputs?.length&&o?.length?rn(t.inputs,o):"0x")}function Qh(e){return Iu(e)}function x5(e){let t=e.find(r=>r.type==="constructor");if(!t)throw new nn({name:"constructor"});return t}ge();function tb(...e){let[t,r=[]]=(()=>{if(Array.isArray(e[0])){let[u,f,d]=e;return[eb(u,f,{args:d}),d]}let[a,c]=e;return[a,c]})(),{overloads:n}=t,o=n?eb([t,...n],t.name,{args:r}):t,s=g5(o),i=r.length>0?rn(o.inputs,r):void 0;return i?oe(s,i):s}function Gn(e,t={}){return Iu(e,t)}function eb(e,t,r){let n=ki(e,t,r);if(n.type!=="function")throw new nn({name:t,type:"function"});return n}function g5(e){return pd(e)}et();var rb="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",xt="0x0000000000000000000000000000000000000000";li();G();ut();var v5="0x6080604052348015600e575f80fd5b5061016d8061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063f8b2cb4f1461002d575b5f80fd5b610047600480360381019061004291906100db565b61005d565b604051610054919061011e565b60405180910390f35b5f8173ffffffffffffffffffffffffffffffffffffffff16319050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6100aa82610081565b9050919050565b6100ba816100a0565b81146100c4575f80fd5b50565b5f813590506100d5816100b1565b92915050565b5f602082840312156100f0576100ef61007d565b5b5f6100fd848285016100c7565b91505092915050565b5f819050919050565b61011881610106565b82525050565b5f6020820190506101315f83018461010f565b9291505056fea26469706673582212203b9fe929fe995c7cf9887f0bdba8a36dd78e8b73f149b17d2d9ad7cd09d2dc6264736f6c634300081a0033";async function nb(e,t){let{blockNumber:r,blockTag:n,calls:o,stateOverrides:s,traceAssetChanges:i,traceTransfers:a,validation:c}=t,u=t.account?ee(t.account):void 0;if(i&&!u)throw new A("`account` is required when `traceAssetChanges` is true");let f=u?Jh(Qh("constructor(bytes, bytes)"),{bytecode:kc,args:[v5,tb(Gn("function getBalance(address)"),[u.address])]}):void 0,d=i?await Promise.all(t.calls.map(async H=>{if(!H.data&&!H.abi)return;let{accessList:U}=await Gc(e,{account:u.address,...H,data:H.abi?ne(H):H.data});return U.map(({address:L,storageKeys:j})=>j.length>0?L:null)})).then(H=>H.flat().filter(Boolean)):[],l=await Pi(e,{blockNumber:r,blockTag:n,blocks:[...i?[{calls:[{data:f}],stateOverrides:s},{calls:d.map((H,U)=>({abi:[Gn("function balanceOf(address) returns (uint256)")],functionName:"balanceOf",args:[u.address],to:H,from:xt,nonce:U})),stateOverrides:[{address:xt,nonce:0}]}]:[],{calls:[...o,{to:xt}].map(H=>({...H,from:u?.address})),stateOverrides:s},...i?[{calls:[{data:f}]},{calls:d.map((H,U)=>({abi:[Gn("function balanceOf(address) returns (uint256)")],functionName:"balanceOf",args:[u.address],to:H,from:xt,nonce:U})),stateOverrides:[{address:xt,nonce:0}]},{calls:d.map((H,U)=>({to:H,abi:[Gn("function decimals() returns (uint256)")],functionName:"decimals",from:xt,nonce:U})),stateOverrides:[{address:xt,nonce:0}]},{calls:d.map((H,U)=>({to:H,abi:[Gn("function tokenURI(uint256) returns (string)")],functionName:"tokenURI",args:[0n],from:xt,nonce:U})),stateOverrides:[{address:xt,nonce:0}]},{calls:d.map((H,U)=>({to:H,abi:[Gn("function symbol() returns (string)")],functionName:"symbol",from:xt,nonce:U})),stateOverrides:[{address:xt,nonce:0}]}]:[]],traceTransfers:a,validation:c}),m=i?l[2]:l[0],[b,h,,T,g,P,y,p]=i?l:[],{calls:x,...E}=m,B=x.slice(0,-1)??[],S=b?.calls??[],O=h?.calls??[],I=[...S,...O].map(H=>H.status==="success"?Ee(H.data):null),k=T?.calls??[],$=g?.calls??[],N=[...k,...$].map(H=>H.status==="success"?Ee(H.data):null),z=(P?.calls??[]).map(H=>H.status==="success"?H.result:null),v=(p?.calls??[]).map(H=>H.status==="success"?H.result:null),w=(y?.calls??[]).map(H=>H.status==="success"?H.result:null),C=[];for(let[H,U]of N.entries()){let L=I[H];if(typeof U!="bigint"||typeof L!="bigint")continue;let j=z[H-1],D=v[H-1],se=w[H-1],Q=H===0?{address:rb,decimals:18,symbol:"ETH"}:{address:d[H-1],decimals:se||j?Number(j??1):void 0,symbol:D??void 0};C.some(K=>K.token.address===Q.address)||C.push({token:Q,value:{pre:L,post:U,diff:U-L}})}return{assetChanges:C,block:E,results:B}}var Hi={};Ri(Hi,{InvalidWrappedSignatureError:()=>Su,assert:()=>hd,from:()=>A5,magicBytes:()=>md,universalSignatureValidatorAbi:()=>B5,universalSignatureValidatorBytecode:()=>E5,unwrap:()=>ob,validate:()=>S5,wrap:()=>I5});Ze();ge();var md="0x6492649264926492649264926492649264926492649264926492649264926492",E5="0x608060405234801561001057600080fd5b5060405161069438038061069483398101604081905261002f9161051e565b600061003c848484610048565b9050806000526001601ff35b60007f64926492649264926492649264926492649264926492649264926492649264926100748361040c565b036101e7576000606080848060200190518101906100929190610577565b60405192955090935091506000906001600160a01b038516906100b69085906105dd565b6000604051808303816000865af19150503d80600081146100f3576040519150601f19603f3d011682016040523d82523d6000602084013e6100f8565b606091505b50509050876001600160a01b03163b60000361016057806101605760405162461bcd60e51b815260206004820152601e60248201527f5369676e617475726556616c696461746f723a206465706c6f796d656e74000060448201526064015b60405180910390fd5b604051630b135d3f60e11b808252906001600160a01b038a1690631626ba7e90610190908b9087906004016105f9565b602060405180830381865afa1580156101ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d19190610633565b6001600160e01b03191614945050505050610405565b6001600160a01b0384163b1561027a57604051630b135d3f60e11b808252906001600160a01b03861690631626ba7e9061022790879087906004016105f9565b602060405180830381865afa158015610244573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102689190610633565b6001600160e01b031916149050610405565b81516041146102df5760405162461bcd60e51b815260206004820152603a602482015260008051602061067483398151915260448201527f3a20696e76616c6964207369676e6174757265206c656e6774680000000000006064820152608401610157565b6102e7610425565b5060208201516040808401518451859392600091859190811061030c5761030c61065d565b016020015160f81c9050601b811480159061032b57508060ff16601c14155b1561038c5760405162461bcd60e51b815260206004820152603b602482015260008051602061067483398151915260448201527f3a20696e76616c6964207369676e617475726520762076616c756500000000006064820152608401610157565b60408051600081526020810180835289905260ff83169181019190915260608101849052608081018390526001600160a01b0389169060019060a0016020604051602081039080840390855afa1580156103ea573d6000803e3d6000fd5b505050602060405103516001600160a01b0316149450505050505b9392505050565b600060208251101561041d57600080fd5b508051015190565b60405180606001604052806003906020820280368337509192915050565b6001600160a01b038116811461045857600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561048c578181015183820152602001610474565b50506000910152565b600082601f8301126104a657600080fd5b81516001600160401b038111156104bf576104bf61045b565b604051601f8201601f19908116603f011681016001600160401b03811182821017156104ed576104ed61045b565b60405281815283820160200185101561050557600080fd5b610516826020830160208701610471565b949350505050565b60008060006060848603121561053357600080fd5b835161053e81610443565b6020850151604086015191945092506001600160401b0381111561056157600080fd5b61056d86828701610495565b9150509250925092565b60008060006060848603121561058c57600080fd5b835161059781610443565b60208501519093506001600160401b038111156105b357600080fd5b6105bf86828701610495565b604086015190935090506001600160401b0381111561056157600080fd5b600082516105ef818460208701610471565b9190910192915050565b828152604060208201526000825180604084015261061e816060850160208701610471565b601f01601f1916919091016060019392505050565b60006020828403121561064557600080fd5b81516001600160e01b03198116811461040557600080fd5b634e487b7160e01b600052603260045260246000fdfe5369676e617475726556616c696461746f72237265636f7665725369676e6572",B5=[{inputs:[{name:"_signer",type:"address"},{name:"_hash",type:"bytes32"},{name:"_signature",type:"bytes"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[{name:"_signer",type:"address"},{name:"_hash",type:"bytes32"},{name:"_signature",type:"bytes"}],outputs:[{type:"bool"}],stateMutability:"nonpayable",type:"function",name:"isValidSig"}];function hd(e){if(re(e,-32)!==md)throw new Su(e)}function A5(e){return typeof e=="string"?ob(e):e}function ob(e){hd(e);let[t,r,n]=ys(Bi("address, bytes, bytes"),e);return{data:r,signature:n,to:t}}function I5(e){let{data:t,signature:r,to:n}=e;return oe(rn(Bi("address, bytes, bytes"),[n,t,r]),md)}function S5(e){try{return hd(e),!0}catch{return!1}}var Su=class extends F{constructor(t){super(`Value \`${t}\` is an invalid ERC-6492 wrapped signature.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"SignatureErc6492.InvalidWrappedSignatureError"})}};gr();li();Lr();i0();ut();$r();ts();at();vt();Le();q();Cf();Le();Ae();function sb({r:e,s:t,to:r="hex",v:n,yParity:o}){let s=(()=>{if(o===0||o===1)return o;if(n&&(n===27n||n===28n||n>=35n))return n%2n===0n?1:0;throw new Error("Invalid `v` or `yParity` value")})(),i=`0x${new In.Signature(Ee(e),Ee(t)).toCompactHex()}${s===0?"1b":"1c"}`;return r==="hex"?i:Be(i)}Un();async function on(e,t){let{address:r,chain:n=e.chain,hash:o,erc6492VerifierAddress:s=t.universalSignatureVerifierAddress??n?.contracts?.erc6492Verifier?.address,multicallAddress:i=t.multicallAddress??n?.contracts?.multicall3?.address,mode:a="auto"}=t;if(n?.verifyHash)return await n.verifyHash(e,t);let c=(()=>{let u=t.signature;return ce(u)?u:typeof u=="object"&&"r"in u&&"s"in u?sb(u):Y(u)})();try{if(a==="eoa")try{if(Rt(Tt(r),await ti({hash:o,signature:c})))return!0}catch{}return Ti.validate(c)?await T5(e,{...t,multicallAddress:i,signature:c}):await P5(e,{...t,verifierAddress:s,signature:c})}catch(u){if(a!=="eoa")try{if(Rt(Tt(r),await ti({hash:o,signature:c})))return!0}catch{}if(u instanceof Ir)return!1;throw u}}async function T5(e,t){let{address:r,blockNumber:n,blockTag:o,hash:s,multicallAddress:i}=t,{authorization:a,data:c,signature:u,to:f}=Ti.unwrap(t.signature);if(await Ln(e,{address:r,blockNumber:n,blockTag:o})===Pt(["0xef0100",a.address]))return await k5(e,{address:r,blockNumber:n,blockTag:o,hash:s,signature:u});let l={address:a.address,chainId:Number(a.chainId),nonce:Number(a.nonce),r:_(a.r,{size:32}),s:_(a.s,{size:32}),yParity:a.yParity};if(!await I1({address:r,authorization:l}))throw new Ir;let b=await M(e,pe,"readContract")({...i?{address:i}:{code:ps},authorizationList:[l],abi:Gt,blockNumber:n,blockTag:"pending",functionName:"aggregate3",args:[[...c?[{allowFailure:!0,target:f??r,callData:c}]:[],{allowFailure:!0,target:r,callData:ne({abi:r0,functionName:"isValidSignature",args:[s,u]})}]]});if(b[b.length-1]?.returnData?.startsWith("0x1626ba7e"))return!0;throw new Ir}async function P5(e,t){let{address:r,factory:n,factoryData:o,hash:s,signature:i,verifierAddress:a,...c}=t,u=await(async()=>!n&&!o||Hi.validate(i)?i:Hi.wrap({data:o,signature:i,to:n}))(),f=a?{to:a,data:ne({abi:n0,functionName:"isValidSig",args:[r,s,u]}),...c}:{data:mi({abi:n0,args:[r,s,u],bytecode:zm}),...c},{data:d}=await M(e,bt,"call")(f).catch(l=>{throw l instanceof uo?new Ir:l});if(Mu(d??"0x0"))return!0;throw new Ir}async function k5(e,t){let{address:r,blockNumber:n,blockTag:o,hash:s,signature:i}=t;if((await M(e,pe,"readContract")({address:r,abi:r0,args:[s,i],blockNumber:n,blockTag:o,functionName:"isValidSignature"}).catch(c=>{throw c instanceof fo?new Ir:c})).startsWith("0x1626ba7e"))return!0;throw new Ir}var Ir=class extends Error{};async function ib(e,{address:t,message:r,factory:n,factoryData:o,signature:s,...i}){let a=Yc(r);return M(e,on,"verifyHash")({address:t,factory:n,factoryData:o,hash:a,signature:s,...i})}async function ab(e,t){let{address:r,factory:n,factoryData:o,signature:s,message:i,primaryType:a,types:c,domain:u,...f}=t,d=$1({message:i,primaryType:a,types:c,domain:u});return M(e,on,"verifyHash")({address:r,factory:n,factoryData:o,hash:d,signature:s,...f})}sr();c0();Ge();Le();Ge();function Tu(e,{emitOnBegin:t=!1,emitMissed:r=!1,onBlockNumber:n,onError:o,poll:s,pollingInterval:i=e.pollingInterval}){let a=typeof s<"u"?s:!(e.transport.type==="webSocket"||e.transport.type==="ipc"||e.transport.type==="fallback"&&(e.transport.transports[0].config.type==="webSocket"||e.transport.transports[0].config.type==="ipc")),c;return a?(()=>{let d=W(["watchBlockNumber",e.uid,t,r,i]);return Ke(d,{onBlockNumber:n,onError:o},l=>Vt(async()=>{try{let m=await M(e,Wt,"getBlockNumber")({cacheTime:0});if(c!==void 0){if(m===c)return;if(m-c>1&&r)for(let b=c+1n;bc)&&(l.onBlockNumber(m,c),c=m)}catch(m){l.onError?.(m)}},{emitOnBegin:t,interval:i}))})():(()=>{let d=W(["watchBlockNumber",e.uid,t,r]);return Ke(d,{onBlockNumber:n,onError:o},l=>{let m=!0,b=()=>m=!1;return(async()=>{try{let h=(()=>{if(e.transport.type==="fallback"){let g=e.transport.transports.find(P=>P.config.type==="webSocket"||P.config.type==="ipc");return g?g.value:e.transport}return e.transport})(),{unsubscribe:T}=await h.subscribe({params:["newHeads"],onData(g){if(!m)return;let P=Ee(g.result?.number);l.onBlockNumber(P,c),c=P},onError(g){l.onError?.(g)}});b=T,m||b()}catch(h){o?.(h)}})(),()=>b()})})()}async function cb(e,t){let{checkReplacement:r=!0,confirmations:n=1,hash:o,onReplaced:s,retryCount:i=6,retryDelay:a=({count:x})=>~~(1<{T?.(),h?.(),y(new Fa({hash:o}))},c):void 0;return h=Ke(u,{onReplaced:s,resolve:P,reject:y},async x=>{if(m=await M(e,ws,"getTransactionReceipt")({hash:o}).catch(()=>{}),m&&n<=1){clearTimeout(p),x.resolve(m),h?.();return}T=M(e,Tu,"watchBlockNumber")({emitMissed:!0,emitOnBegin:!0,poll:!0,pollingInterval:f,async onBlockNumber(E){let B=O=>{clearTimeout(p),T?.(),O(),h?.()},S=E;if(!b)try{if(m){if(n>1&&(!m.blockNumber||S-m.blockNumber+1nx.resolve(m));return}if(r&&!d&&(b=!0,await xi(async()=>{d=await M(e,gs,"getTransaction")({hash:o}),d.blockNumber&&(S=d.blockNumber)},{delay:a,retryCount:i}),b=!1),m=await M(e,ws,"getTransactionReceipt")({hash:o}),n>1&&(!m.blockNumber||S-m.blockNumber+1nx.resolve(m))}catch(O){if(O instanceof ao||O instanceof co){if(!d){b=!1;return}try{l=d,b=!0;let I=await xi(()=>M(e,xe,"getBlock")({blockNumber:S,includeTransactions:!0}),{delay:a,retryCount:i,shouldRetry:({error:N})=>N instanceof Yo});b=!1;let k=I.transactions.find(({from:N,nonce:z})=>N===l.from&&z===l.nonce);if(!k||(m=await M(e,ws,"getTransactionReceipt")({hash:k.hash}),n>1&&(!m.blockNumber||S-m.blockNumber+1n{x.onReplaced?.({reason:$,replacedTransaction:l,transaction:k,transactionReceipt:m}),x.resolve(m)})}catch(I){B(()=>x.reject(I))}}else B(()=>x.reject(O))}}})}),g}Ge();function ub(e,{blockTag:t=e.experimental_blockTag??"latest",emitMissed:r=!1,emitOnBegin:n=!1,onBlock:o,onError:s,includeTransactions:i,poll:a,pollingInterval:c=e.pollingInterval}){let u=typeof a<"u"?a:!(e.transport.type==="webSocket"||e.transport.type==="ipc"||e.transport.type==="fallback"&&(e.transport.transports[0].config.type==="webSocket"||e.transport.transports[0].config.type==="ipc")),f=i??!1,d;return u?(()=>{let b=W(["watchBlocks",e.uid,t,r,n,f,c]);return Ke(b,{onBlock:o,onError:s},h=>Vt(async()=>{try{let T=await M(e,xe,"getBlock")({blockTag:t,includeTransactions:f});if(T.number!==null&&d?.number!=null){if(T.number===d.number)return;if(T.number-d.number>1&&r)for(let g=d?.number+1n;gd.number)&&(h.onBlock(T,d),d=T)}catch(T){h.onError?.(T)}},{emitOnBegin:n,interval:c}))})():(()=>{let b=!0,h=!0,T=()=>b=!1;return(async()=>{try{n&&M(e,xe,"getBlock")({blockTag:t,includeTransactions:f}).then(y=>{b&&h&&(o(y,void 0),h=!1)}).catch(s);let g=(()=>{if(e.transport.type==="fallback"){let y=e.transport.transports.find(p=>p.config.type==="webSocket"||p.config.type==="ipc");return y?y.value:e.transport}return e.transport})(),{unsubscribe:P}=await g.subscribe({params:["newHeads"],async onData(y){if(!b)return;let p=await M(e,xe,"getBlock")({blockNumber:y.result?.number,includeTransactions:f}).catch(()=>{});b&&(o(p,d),h=!1,d=p)},onError(y){s?.(y)}});T=P,b||T()}catch(g){s?.(g)}})(),()=>T()})()}ae();Gs();Ge();function fb(e,{address:t,args:r,batch:n=!0,event:o,events:s,fromBlock:i,onError:a,onLogs:c,poll:u,pollingInterval:f=e.pollingInterval,strict:d}){let l=typeof u<"u"?u:typeof i=="bigint"?!0:!(e.transport.type==="webSocket"||e.transport.type==="ipc"||e.transport.type==="fallback"&&(e.transport.transports[0].config.type==="webSocket"||e.transport.transports[0].config.type==="ipc")),m=d??!1;return l?(()=>{let T=W(["watchEvent",t,r,n,e.uid,o,f,i]);return Ke(T,{onLogs:c,onError:a},g=>{let P;i!==void 0&&(P=i-1n);let y,p=!1,x=Vt(async()=>{if(!p){try{y=await M(e,Vc,"createEventFilter")({address:t,args:r,event:o,events:s,strict:m,fromBlock:i})}catch{}p=!0;return}try{let E;if(y)E=await M(e,Xr,"getFilterChanges")({filter:y});else{let B=await M(e,Wt,"getBlockNumber")({});P&&P!==B?E=await M(e,ns,"getLogs")({address:t,args:r,event:o,events:s,fromBlock:P+1n,toBlock:B}):E=[],P=B}if(E.length===0)return;if(n)g.onLogs(E);else for(let B of E)g.onLogs([B])}catch(E){y&&E instanceof dt&&(p=!1),g.onError?.(E)}},{emitOnBegin:!0,interval:f});return async()=>{y&&await M(e,Jr,"uninstallFilter")({filter:y}),x()}})})():(()=>{let T=!0,g=()=>T=!1;return(async()=>{try{let P=(()=>{if(e.transport.type==="fallback"){let E=e.transport.transports.find(B=>B.config.type==="webSocket"||B.config.type==="ipc");return E?E.value:e.transport}return e.transport})(),y=s??(o?[o]:void 0),p=[];y&&(p=[y.flatMap(B=>Mt({abi:[B],eventName:B.name,args:r}))],o&&(p=p[0]));let{unsubscribe:x}=await P.subscribe({params:["logs",{address:t,topics:p}],onData(E){if(!T)return;let B=E.result;try{let{eventName:S,args:O}=Pn({abi:y??[],data:B.data,topics:B.topics,strict:m}),I=ye(B,{args:O,eventName:S});c([I])}catch(S){let O,I;if(S instanceof Jt||S instanceof Tr){if(d)return;O=S.abiItem.name,I=S.abiItem.inputs?.some($=>!("name"in $&&$.name))}let k=ye(B,{args:I?[]:{},eventName:O});c([k])}},onError(E){a?.(E)}});g=x,T||g()}catch(P){a?.(P)}})(),()=>g()})()}Ge();function db(e,{batch:t=!0,onError:r,onTransactions:n,poll:o,pollingInterval:s=e.pollingInterval}){return(typeof o<"u"?o:e.transport.type!=="webSocket"&&e.transport.type!=="ipc")?(()=>{let u=W(["watchPendingTransactions",e.uid,t,s]);return Ke(u,{onTransactions:n,onError:r},f=>{let d,l=Vt(async()=>{try{if(!d)try{d=await M(e,Wc,"createPendingTransactionFilter")({});return}catch(b){throw l(),b}let m=await M(e,Xr,"getFilterChanges")({filter:d});if(m.length===0)return;if(t)f.onTransactions(m);else for(let b of m)f.onTransactions([b])}catch(m){f.onError?.(m)}},{emitOnBegin:!0,interval:s});return async()=>{d&&await M(e,Jr,"uninstallFilter")({filter:d}),l()}})})():(()=>{let u=!0,f=()=>u=!1;return(async()=>{try{let{unsubscribe:d}=await e.transport.subscribe({params:["newPendingTransactions"],onData(l){if(!u)return;let m=l.result;n([m])},onError(l){r?.(l)}});f=d,u||f()}catch(d){r?.(d)}})(),()=>f()})()}function lb(e){let{scheme:t,statement:r,...n}=e.match(H5)?.groups??{},{chainId:o,expirationTime:s,issuedAt:i,notBefore:a,requestId:c,...u}=e.match(R5)?.groups??{},f=e.split("Resources:")[1]?.split(` +- `).slice(1);return{...n,...u,...o?{chainId:Number(o)}:{},...s?{expirationTime:new Date(s)}:{},...i?{issuedAt:new Date(i)}:{},...a?{notBefore:new Date(a)}:{},...c?{requestId:c}:{},...f?{resources:f}:{},...t?{scheme:t}:{},...r?{statement:r}:{}}}var H5=/^(?:(?[a-zA-Z][a-zA-Z0-9+-.]*):\/\/)?(?[a-zA-Z0-9+-.]*(?::[0-9]{1,5})?) (?:wants you to sign in with your Ethereum account:\n)(?
    0x[a-fA-F0-9]{40})\n\n(?:(?.*)\n\n)?/,R5=/(?:URI: (?.+))\n(?:Version: (?.+))\n(?:Chain ID: (?\d+))\n(?:Nonce: (?[a-zA-Z0-9]+))\n(?:Issued At: (?.+))(?:\nExpiration Time: (?.+))?(?:\nNot Before: (?.+))?(?:\nRequest ID: (?.+))?/;rr();ts();function pb(e){let{address:t,domain:r,message:n,nonce:o,scheme:s,time:i=new Date}=e;if(r&&n.domain!==r||o&&n.nonce!==o||s&&n.scheme!==s||n.expirationTime&&i>=n.expirationTime||n.notBefore&&ibt(e,t),createAccessList:t=>Gc(e,t),createBlockFilter:()=>b1(e),createContractEventFilter:t=>Pa(e,t),createEventFilter:t=>Vc(e,t),createPendingTransactionFilter:()=>Wc(e),estimateContractGas:t=>om(e,t),estimateGas:t=>es(e,t),getBalance:t=>x1(e,t),getBlobBaseFee:()=>y1(e),getBlock:t=>xe(e,t),getBlockNumber:t=>Wt(e,t),getBlockTransactionCount:t=>g1(e,t),getBytecode:t=>Ln(e,t),getChainId:()=>Qo(e),getCode:t=>Ln(e,t),getContractEvents:t=>mc(e,t),getDelegation:t=>w1(e,t),getEip712Domain:t=>v1(e,t),getEnsAddress:t=>a1(e,t),getEnsAvatar:t=>p1(e,t),getEnsName:t=>m1(e,t),getEnsResolver:t=>h1(e,t),getEnsText:t=>qc(e,t),getFeeHistory:t=>B1(e,t),estimateFeesPerGas:t=>Zp(e,t),getFilterChanges:t=>Xr(e,t),getFilterLogs:t=>A1(e,t),getGasPrice:()=>Jo(e),getLogs:t=>ns(e,t),getProof:t=>Wh(e,t),estimateMaxPriorityFeePerGas:t=>Wp(e,t),fillTransaction:t=>lc(e,t),getStorageAt:t=>Zh(e,t),getTransaction:t=>gs(e,t),getTransactionConfirmations:t=>Kh(e,t),getTransactionCount:t=>ac(e,t),getTransactionReceipt:t=>ws(e,t),multicall:t=>Yh(e,t),prepareTransactionRequest:t=>pc(e,t),readContract:t=>pe(e,t),sendRawTransaction:t=>n1(e,t),sendRawTransactionSync:t=>hb(e,t),simulate:t=>Pi(e,t),simulateBlocks:t=>Pi(e,t),simulateCalls:t=>nb(e,t),simulateContract:t=>Jm(e,t),verifyHash:t=>on(e,t),verifyMessage:t=>ib(e,t),verifySiweMessage:t=>mb(e,t),verifyTypedData:t=>ab(e,t),uninstallFilter:t=>Jr(e,t),waitForTransactionReceipt:t=>cb(e,t),watchBlocks:t=>ub(e,t),watchBlockNumber:t=>Tu(e,t),watchContractEvent:t=>r1(e,t),watchEvent:t=>fb(e,t),watchPendingTransactions:t=>db(e,t)}}function bd(e){let{key:t="public",name:r="Public Client"}=e;return o1({...e,key:t,name:r,type:"publicClient"}).extend(bb)}function xb({key:e,methods:t,name:r,request:n,retryCount:o=3,retryDelay:s=150,timeout:i,type:a},c){let u=_c();return{config:{key:e,methods:t,name:r,request:n,retryCount:o,retryDelay:s,timeout:i,type:a},request:T1(n,{methods:t,retryCount:o,retryDelay:s,uid:u}),value:c}}yn();G();var Pu=class extends A{constructor(){super("No URL was provided to the Transport. Please provide a valid RPC URL to the Transport.",{docsPath:"/docs/clients/intro",name:"UrlRequiredError"})}};f0();function xd(e,t={}){let{batch:r,fetchFn:n,fetchOptions:o,key:s="http",methods:i,name:a="HTTP JSON-RPC",onFetchRequest:c,onFetchResponse:u,retryDelay:f,raw:d}=t;return({chain:l,retryCount:m,timeout:b})=>{let{batchSize:h=1e3,wait:T=0}=typeof r=="object"?r:{},g=t.retryCount??m,P=b??t.timeout??1e4,y=e||l?.rpcUrls.default.http[0];if(!y)throw new Pu;let p=k1(y,{fetchFn:n,fetchOptions:o,onRequest:c,onResponse:u,timeout:P});return xb({key:s,methods:i,name:a,async request({method:x,params:E}){let B={method:x,params:E},{schedule:S}=Cc({id:y,wait:T,shouldSplitBatch($){return $.length>h},fn:$=>p.request({body:$}),sort:($,N)=>$.id-N.id}),O=async $=>r?S($):[await p.request({body:$})],[{error:I,result:k}]=await O(B);if(d)return{error:I,result:k};if(I)throw new Mr({body:B,error:I,url:y});return k},retryCount:g,retryDelay:f,timeout:P,type:"http"},{fetchOptions:o,url:y})}}$r();var yd=new Set,C5=10,yb=!1,ku=null;function wb(e){yb||(yb=!0,ku=e,window.addEventListener("error",t=>{let r=t.error&&t.error.message||t.message||"unknown_error",n=t.error&&t.error.stack||`${t.filename??""}:${t.lineno??0}:${t.colno??0}`;gb(r,n)}),window.addEventListener("unhandledrejection",t=>{let r=t.reason,n=r instanceof Error?r.message:typeof r=="string"?r:"unhandled_rejection",o=r instanceof Error?r.stack??"":"";gb(n,o)}))}function N5(e){try{let t=new URL(e,location.origin);return`${t.origin}${t.pathname}`.slice(0,200)}catch{return e.split("?")[0].split("#")[0].slice(0,200)}}async function gb(e,t){if(!ku||yd.size>=C5)return;let r=`${e}::${t.slice(0,80)}`;if(!yd.has(r)){yd.add(r);try{await fetch(`${ku.apiBase}/v1/internal/client-error`,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({message:String(e).slice(0,500),stack:String(t).slice(0,4e3),page:ku.page,url:N5(location.href),ts:Date.now()}),keepalive:!0})}catch{}}}function Bs(e){return e.replace(/[&<>"']/g,t=>{switch(t){case"&":return"&";case"<":return"<";case">":return">";case'"':return""";default:return"'"}})}function sn(e){return e.toLocaleString("en-US")}function $5(e){let t=BigInt(e),r=t/1000000000000000000n,o=(t%1000000000000000000n).toString().padStart(18,"0").slice(0,6).replace(/0+$/,"");return o?`${r}.${o}`:`${r}`}async function Es(e,t){let r=await fetch(e,{credentials:"include",...t});if(!r.ok){let n="";try{n=JSON.stringify(await r.json())}catch{}throw new Error(`${r.status}: ${n||r.statusText}`)}return await r.json()}var O5={grant:"Grant",purchase:"Purchase",debit:"Spend",refund:"Refund",earn:"Earned",adjust:"Adjustment"};function U5(e){let t=e.delta>0?"+":"",r=e.delta>0?"ga-ledger-credit":"ga-ledger-debit",n=new Date(e.created_at*1e3).toLocaleString();return` + + ${Bs(n)} + ${Bs(O5[e.kind]||e.kind)} + ${Bs(e.memo||"\u2014")} + ${t}${sn(e.delta)} + ${sn(e.balance_after)} + `}function L5(e,t){return` +
    +

    ${Bs(e.title)}

    +

    ${sn(e.tokens)} tokens

    +

    ${$5(e.price_wei)} ETH

    + +
    `}var gd=class{constructor(){Is(this,"cfg");Is(this,"treasury",null);Is(this,"chainId",null);Is(this,"connectedAddress",null)}async mount(t){this.cfg=t,wb({apiBase:t.apiBase,page:"wallet"});let r=null;try{r=await Es(`${t.apiBase}/v1/me`)}catch{r=null}if(!r){t.onUnauthenticated?.();return}await this.loadAccount(),await this.loadPacks(),await this.loadLedger(),this.attachEvents()}async loadAccount(){let t=this.cfg.rootEl.querySelector("#ga-wallet-balance"),r=this.cfg.rootEl.querySelector("#ga-wallet-purchased"),n=this.cfg.rootEl.querySelector("#ga-wallet-spent"),o=this.cfg.rootEl.querySelector("#ga-wallet-earned");if(t)try{let s=await Es(`${this.cfg.apiBase}/v1/tokens/account`);t.textContent=sn(s.balance),r&&(r.textContent=sn(s.lifetime_purchased)),n&&(n.textContent=sn(s.lifetime_spent)),o&&(o.textContent=sn(s.lifetime_earned))}catch{t.textContent="\u2014"}}async loadPacks(){let t=this.cfg.rootEl.querySelector("#ga-wallet-packs");if(t)try{let r=await Es(`${this.cfg.apiBase}/v1/tokens/packs`);try{this.treasury=r.treasury_address?Tt(r.treasury_address):null}catch{this.treasury=null}this.chainId=r.chain_id,r.purchase_configured||t.insertAdjacentHTML("beforebegin",`

    Purchasing isn't configured yet \u2014 packs are shown, but Buy is disabled.

    `),t.innerHTML=r.packs.map(n=>L5(n,r.purchase_configured)).join("")}catch(r){t.innerHTML=`
    Failed to load packs: ${Bs(String(r))}
    `}}async loadLedger(t){let r=this.cfg.rootEl.querySelector("#ga-ledger-body"),n=this.cfg.rootEl.querySelector("#ga-ledger-more");if(r)try{let o=t?`?before=${t}`:"",s=await Es(`${this.cfg.apiBase}/v1/tokens/ledger${o}`),i=s.entries.map(U5).join("");r.insertAdjacentHTML("beforeend",i),!t&&!s.entries.length&&(r.innerHTML='No activity yet.'),n&&(s.next_before?(n.classList.remove("d-none"),n.dataset.before=String(s.next_before)):n.classList.add("d-none"))}catch(o){r.innerHTML=`Failed to load: ${Bs(String(o))}`}}feedback(t){let r=this.cfg.rootEl.querySelector("#ga-wallet-feedback");r&&(r.textContent=t)}async ensureConnected(){if(this.connectedAddress)return!0;if(!window.ethereum)return this.feedback("No injected wallet found. Install MetaMask or a Base-compatible wallet."),!1;try{let t=await window.ethereum.request({method:"eth_requestAccounts"});return t?.length?(this.connectedAddress=Tt(t[0]),!0):!1}catch(t){return this.feedback(`Wallet connect failed: ${t.message}`),!1}}async buy(t,r){let n=this.treasury;if(!n||this.chainId===null){this.feedback("Purchasing isn't configured yet.");return}if(!await this.ensureConnected())return;let o=this.connectedAddress;if(!o)return;let s=r.textContent;r.disabled=!0;try{r.textContent="Preparing\u2026";let a=(await Es(`${this.cfg.apiBase}/v1/tokens/packs`)).packs.find(l=>l.id===t);if(!a)throw new Error("pack no longer available");await this.ensureChain(this.chainId),r.textContent="Awaiting wallet\u2026";let c="0x"+BigInt(a.price_wei).toString(16),u=await window.ethereum.request({method:"eth_sendTransaction",params:[{from:o,to:n,value:c}]});if(this.feedback(`Transaction sent: ${u.slice(0,10)}\u2026`),r.textContent="Confirming on-chain\u2026",(await bd({transport:xd()}).waitForTransactionReceipt({hash:u})).status!=="success"){this.feedback("Transaction reverted on-chain.");return}r.textContent="Crediting account\u2026",await Es(`${this.cfg.apiBase}/v1/tokens/purchase/confirm`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({pack_id:a.id,tx_hash:u})}),this.feedback(`Purchased ${sn(a.tokens)} tokens.`),await this.loadAccount()}catch(i){this.feedback(`Purchase failed: ${i.message}`)}finally{r.disabled=!1,r.textContent=s}}async ensureChain(t){if(!window.ethereum)return;let r=await window.ethereum.request({method:"eth_chainId"}),n="0x"+t.toString(16);if(r.toLowerCase()!==n.toLowerCase())try{await window.ethereum.request({method:"wallet_switchEthereumChain",params:[{chainId:n}]})}catch{}}attachEvents(){this.cfg.rootEl.addEventListener("click",t=>{let r=t.target,n=r.closest(".ga-buy-btn");if(n){let s=parseInt(n.dataset.packId||"",10);s&&this.buy(s,n);return}let o=r.closest("#ga-ledger-more");if(o){let s=parseInt(o.dataset.before||"",10);s&&this.loadLedger(s)}})}},vb={async mount(e){await new gd().mount(e)}};window.GAWallet=vb;var sU=vb;export{sU as default}; +/*! Bundled license information: + +@noble/hashes/esm/utils.js: +@noble/hashes/esm/utils.js: + (*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) *) + +@noble/curves/esm/abstract/utils.js: +@noble/curves/esm/abstract/modular.js: +@noble/curves/esm/abstract/curve.js: +@noble/curves/esm/abstract/weierstrass.js: +@noble/curves/esm/_shortw_utils.js: +@noble/curves/esm/secp256k1.js: +@noble/curves/esm/abstract/utils.js: +@noble/curves/esm/abstract/modular.js: +@noble/curves/esm/abstract/curve.js: +@noble/curves/esm/abstract/weierstrass.js: +@noble/curves/esm/_shortw_utils.js: +@noble/curves/esm/secp256k1.js: + (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *) +*/ +//# sourceMappingURL=ga-wallet.js.map diff --git a/assets/js/ga-wallet.js.map b/assets/js/ga-wallet.js.map new file mode 100644 index 0000000..8d9980a --- /dev/null +++ b/assets/js/ga-wallet.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../workers/api/node_modules/abitype/src/version.ts", "../../workers/api/node_modules/abitype/src/errors.ts", "../../workers/api/node_modules/abitype/src/regex.ts", "../../workers/api/node_modules/abitype/src/human-readable/formatAbiParameter.ts", "../../workers/api/node_modules/abitype/src/human-readable/formatAbiParameters.ts", "../../workers/api/node_modules/abitype/src/human-readable/formatAbiItem.ts", "../../workers/api/node_modules/abitype/src/human-readable/runtime/signatures.ts", "../../workers/api/node_modules/abitype/src/human-readable/errors/abiItem.ts", "../../workers/api/node_modules/abitype/src/human-readable/errors/abiParameter.ts", "../../workers/api/node_modules/abitype/src/human-readable/errors/signature.ts", "../../workers/api/node_modules/abitype/src/human-readable/errors/struct.ts", "../../workers/api/node_modules/abitype/src/human-readable/errors/splitParameters.ts", "../../workers/api/node_modules/abitype/src/human-readable/runtime/cache.ts", "../../workers/api/node_modules/abitype/src/human-readable/runtime/utils.ts", "../../workers/api/node_modules/abitype/src/human-readable/runtime/structs.ts", "../../workers/api/node_modules/abitype/src/human-readable/parseAbi.ts", "../../workers/api/node_modules/abitype/src/human-readable/parseAbiItem.ts", "../../workers/api/node_modules/abitype/src/human-readable/parseAbiParameters.ts", "../../workers/api/node_modules/abitype/src/exports/index.ts", "../../workers/api/node_modules/viem/utils/abi/formatAbiItem.ts", "../../workers/api/node_modules/viem/utils/data/isHex.ts", "../../workers/api/node_modules/viem/utils/data/size.ts", "../../workers/api/node_modules/viem/errors/version.ts", "../../workers/api/node_modules/viem/errors/base.ts", "../../workers/api/node_modules/viem/errors/abi.ts", "../../workers/api/node_modules/viem/errors/data.ts", "../../workers/api/node_modules/viem/utils/data/pad.ts", "../../workers/api/node_modules/viem/errors/encoding.ts", "../../workers/api/node_modules/viem/utils/data/trim.ts", "../../workers/api/node_modules/viem/utils/encoding/fromHex.ts", "../../workers/api/node_modules/viem/utils/encoding/toHex.ts", "../../workers/api/node_modules/viem/utils/encoding/toBytes.ts", "../../workers/api/node_modules/viem/node_modules/@noble/hashes/src/_u64.ts", "../../workers/api/node_modules/viem/node_modules/@noble/hashes/src/crypto.ts", "../../workers/api/node_modules/viem/node_modules/@noble/hashes/src/utils.ts", "../../workers/api/node_modules/viem/node_modules/@noble/hashes/src/sha3.ts", "../../workers/api/node_modules/viem/utils/hash/keccak256.ts", "../../workers/api/node_modules/viem/utils/hash/hashSignature.ts", "../../workers/api/node_modules/viem/utils/hash/normalizeSignature.ts", "../../workers/api/node_modules/viem/utils/hash/toSignature.ts", "../../workers/api/node_modules/viem/utils/hash/toSignatureHash.ts", "../../workers/api/node_modules/viem/utils/hash/toEventSelector.ts", "../../workers/api/node_modules/viem/errors/address.ts", "../../workers/api/node_modules/viem/utils/lru.ts", "../../workers/api/node_modules/viem/utils/address/getAddress.ts", "../../workers/api/node_modules/viem/utils/address/isAddress.ts", "../../workers/api/node_modules/viem/utils/data/concat.ts", "../../workers/api/node_modules/viem/utils/data/slice.ts", "../../workers/api/node_modules/viem/utils/regex.ts", "../../workers/api/node_modules/viem/utils/abi/encodeAbiParameters.ts", "../../workers/api/node_modules/viem/utils/hash/toFunctionSelector.ts", "../../workers/api/node_modules/viem/utils/abi/getAbiItem.ts", "../../workers/api/node_modules/viem/accounts/utils/parseAccount.ts", "../../workers/api/node_modules/viem/utils/abi/prepareEncodeFunctionData.ts", "../../workers/api/node_modules/viem/utils/abi/encodeFunctionData.ts", "../../workers/api/node_modules/viem/constants/solidity.ts", "../../workers/api/node_modules/viem/errors/cursor.ts", "../../workers/api/node_modules/viem/utils/cursor.ts", "../../workers/api/node_modules/viem/utils/encoding/fromBytes.ts", "../../workers/api/node_modules/viem/utils/abi/decodeAbiParameters.ts", "../../workers/api/node_modules/viem/utils/abi/decodeErrorResult.ts", "../../workers/api/node_modules/viem/utils/stringify.ts", "../../workers/api/node_modules/viem/utils/abi/formatAbiItemWithArgs.ts", "../../workers/api/node_modules/viem/constants/unit.ts", "../../workers/api/node_modules/viem/utils/unit/formatUnits.ts", "../../workers/api/node_modules/viem/utils/unit/formatEther.ts", "../../workers/api/node_modules/viem/utils/unit/formatGwei.ts", "../../workers/api/node_modules/viem/errors/stateOverride.ts", "../../workers/api/node_modules/viem/errors/transaction.ts", "../../workers/api/node_modules/viem/errors/utils.ts", "../../workers/api/node_modules/viem/errors/contract.ts", "../../workers/api/node_modules/viem/errors/request.ts", "../../workers/api/node_modules/viem/errors/rpc.ts", "../../workers/api/node_modules/viem/node_modules/@noble/hashes/src/_md.ts", "../../workers/api/node_modules/viem/node_modules/@noble/hashes/src/sha2.ts", "../../workers/api/node_modules/viem/node_modules/@noble/hashes/src/hmac.ts", "../../workers/api/node_modules/viem/node_modules/@noble/curves/src/abstract/utils.ts", "../../workers/api/node_modules/viem/node_modules/@noble/curves/src/abstract/modular.ts", "../../workers/api/node_modules/viem/node_modules/@noble/curves/src/abstract/curve.ts", "../../workers/api/node_modules/viem/node_modules/@noble/curves/src/abstract/weierstrass.ts", "../../workers/api/node_modules/viem/node_modules/@noble/curves/src/_shortw_utils.ts", "../../workers/api/node_modules/viem/node_modules/@noble/curves/src/abstract/hash-to-curve.ts", "../../workers/api/node_modules/viem/node_modules/@noble/curves/src/secp256k1.ts", "../../workers/api/node_modules/viem/errors/node.ts", "../../workers/api/node_modules/viem/utils/errors/getNodeError.ts", "../../workers/api/node_modules/viem/utils/formatters/extract.ts", "../../workers/api/node_modules/viem/utils/formatters/transactionRequest.ts", "../../workers/api/node_modules/viem/utils/stateOverride.ts", "../../workers/api/node_modules/viem/constants/number.ts", "../../workers/api/node_modules/viem/utils/transaction/assertRequest.ts", "../../workers/api/node_modules/viem/utils/address/isAddressEqual.ts", "../../workers/api/node_modules/viem/utils/abi/decodeFunctionResult.ts", "../../workers/api/node_modules/ox/node_modules/@noble/curves/src/abstract/utils.ts", "../../workers/api/node_modules/ox/core/version.ts", "../../workers/api/node_modules/ox/core/internal/errors.ts", "../../workers/api/node_modules/ox/core/Errors.ts", "../../workers/api/node_modules/ox/core/internal/bytes.ts", "../../workers/api/node_modules/ox/core/internal/hex.ts", "../../workers/api/node_modules/ox/core/Json.ts", "../../workers/api/node_modules/ox/core/Bytes.ts", "../../workers/api/node_modules/ox/core/Hex.ts", "../../workers/api/node_modules/ox/core/Withdrawal.ts", "../../workers/api/node_modules/ox/core/BlockOverrides.ts", "../../workers/api/node_modules/viem/constants/abis.ts", "../../workers/api/node_modules/viem/constants/contract.ts", "../../workers/api/node_modules/viem/constants/contracts.ts", "../../workers/api/node_modules/viem/errors/chain.ts", "../../workers/api/node_modules/viem/utils/abi/encodeDeployData.ts", "../../workers/api/node_modules/viem/utils/chain/getChainContractAddress.ts", "../../workers/api/node_modules/viem/utils/errors/getCallError.ts", "../../workers/api/node_modules/viem/utils/promise/withResolvers.ts", "../../workers/api/node_modules/viem/utils/promise/createBatchScheduler.ts", "../../workers/api/node_modules/viem/errors/ccip.ts", "../../workers/api/node_modules/viem/utils/abi/decodeFunctionData.ts", "../../workers/api/node_modules/viem/utils/abi/encodeErrorResult.ts", "../../workers/api/node_modules/viem/utils/abi/encodeFunctionResult.ts", "../../workers/api/node_modules/viem/utils/ens/localBatchGatewayRequest.ts", "../../workers/api/node_modules/viem/utils/ccip.ts", "../../workers/api/node_modules/viem/actions/public/call.ts", "../../workers/api/node_modules/viem/utils/getAction.ts", "../../workers/api/node_modules/viem/utils/abi/encodeEventTopics.ts", "../../workers/api/node_modules/viem/errors/log.ts", "../../workers/api/node_modules/viem/actions/public/createContractEventFilter.ts", "../../workers/api/node_modules/viem/utils/filters/createFilterRequestScope.ts", "../../workers/api/node_modules/viem/actions/public/estimateContractGas.ts", "../../workers/api/node_modules/viem/utils/errors/getContractError.ts", "../../workers/api/node_modules/viem/actions/public/estimateGas.ts", "../../workers/api/node_modules/viem/accounts/utils/publicKeyToAddress.ts", "../../workers/api/node_modules/viem/utils/signature/recoverPublicKey.ts", "../../workers/api/node_modules/viem/utils/signature/recoverAddress.ts", "../../workers/api/node_modules/viem/utils/authorization/hashAuthorization.ts", "../../workers/api/node_modules/viem/utils/encoding/toRlp.ts", "../../workers/api/node_modules/viem/utils/authorization/recoverAuthorizationAddress.ts", "../../workers/api/node_modules/viem/errors/estimateGas.ts", "../../workers/api/node_modules/viem/utils/errors/getEstimateGasError.ts", "../../workers/api/node_modules/viem/actions/wallet/prepareTransactionRequest.ts", "../../workers/api/node_modules/viem/errors/fee.ts", "../../workers/api/node_modules/viem/actions/public/estimateMaxPriorityFeePerGas.ts", "../../workers/api/node_modules/viem/errors/block.ts", "../../workers/api/node_modules/viem/actions/public/getBlock.ts", "../../workers/api/node_modules/viem/utils/formatters/transaction.ts", "../../workers/api/node_modules/viem/utils/formatters/block.ts", "../../workers/api/node_modules/viem/actions/public/getGasPrice.ts", "../../workers/api/node_modules/viem/actions/public/estimateFeesPerGas.ts", "../../workers/api/node_modules/viem/actions/public/getTransactionCount.ts", "../../workers/api/node_modules/viem/utils/blob/blobsToCommitments.ts", "../../workers/api/node_modules/viem/utils/blob/blobsToProofs.ts", "../../workers/api/node_modules/viem/utils/blob/commitmentToVersionedHash.ts", "../../workers/api/node_modules/viem/node_modules/@noble/hashes/src/sha256.ts", "../../workers/api/node_modules/viem/utils/hash/sha256.ts", "../../workers/api/node_modules/viem/utils/blob/commitmentsToVersionedHashes.ts", "../../workers/api/node_modules/viem/errors/blob.ts", "../../workers/api/node_modules/viem/utils/blob/toBlobs.ts", "../../workers/api/node_modules/viem/utils/blob/toBlobSidecars.ts", "../../workers/api/node_modules/viem/utils/transaction/getTransactionType.ts", "../../workers/api/node_modules/viem/actions/public/fillTransaction.ts", "../../workers/api/node_modules/viem/utils/errors/getTransactionError.ts", "../../workers/api/node_modules/viem/actions/public/getChainId.ts", "../../workers/api/node_modules/viem/actions/public/getContractEvents.ts", "../../workers/api/node_modules/viem/utils/abi/parseEventLogs.ts", "../../workers/api/node_modules/viem/utils/formatters/log.ts", "../../workers/api/node_modules/viem/utils/abi/decodeEventLog.ts", "../../workers/api/node_modules/viem/actions/public/getLogs.ts", "../../workers/api/node_modules/viem/actions/public/readContract.ts", "../../workers/api/node_modules/viem/actions/public/simulateContract.ts", "../../workers/api/node_modules/viem/actions/public/watchContractEvent.ts", "../../workers/api/node_modules/viem/utils/observe.ts", "../../workers/api/node_modules/viem/utils/wait.ts", "../../workers/api/node_modules/viem/utils/poll.ts", "../../workers/api/node_modules/viem/utils/promise/withCache.ts", "../../workers/api/node_modules/viem/actions/public/getBlockNumber.ts", "../../workers/api/node_modules/viem/actions/public/getFilterChanges.ts", "../../workers/api/node_modules/viem/actions/public/uninstallFilter.ts", "../../workers/api/node_modules/viem/actions/wallet/sendRawTransaction.ts", "../../workers/api/node_modules/viem/utils/promise/withRetry.ts", "../../workers/api/node_modules/viem/utils/formatters/transactionReceipt.ts", "../../workers/api/node_modules/viem/clients/createClient.ts", "../../workers/api/node_modules/viem/utils/uid.ts", "../../workers/api/node_modules/viem/actions/ens/getEnsAddress.ts", "../../workers/api/node_modules/viem/utils/ens/errors.ts", "../../workers/api/node_modules/viem/utils/ens/namehash.ts", "../../workers/api/node_modules/viem/utils/ens/encodedLabelToLabelhash.ts", "../../workers/api/node_modules/viem/utils/ens/packetToBytes.ts", "../../workers/api/node_modules/viem/utils/ens/encodeLabelhash.ts", "../../workers/api/node_modules/viem/utils/ens/labelhash.ts", "../../workers/api/node_modules/viem/errors/ens.ts", "../../workers/api/node_modules/viem/utils/ens/avatar/utils.ts", "../../workers/api/node_modules/viem/utils/ens/avatar/parseAvatarRecord.ts", "../../workers/api/node_modules/viem/actions/ens/getEnsText.ts", "../../workers/api/node_modules/viem/actions/ens/getEnsAvatar.ts", "../../workers/api/node_modules/viem/actions/ens/getEnsName.ts", "../../workers/api/node_modules/viem/actions/ens/getEnsResolver.ts", "../../workers/api/node_modules/viem/clients/decorators/public.ts", "../../workers/api/node_modules/viem/actions/public/createAccessList.ts", "../../workers/api/node_modules/viem/actions/public/createBlockFilter.ts", "../../workers/api/node_modules/viem/actions/public/createEventFilter.ts", "../../workers/api/node_modules/viem/actions/public/createPendingTransactionFilter.ts", "../../workers/api/node_modules/viem/actions/public/getBalance.ts", "../../workers/api/node_modules/viem/actions/public/getBlobBaseFee.ts", "../../workers/api/node_modules/viem/actions/public/getBlockTransactionCount.ts", "../../workers/api/node_modules/viem/actions/public/getCode.ts", "../../workers/api/node_modules/viem/actions/public/getDelegation.ts", "../../workers/api/node_modules/viem/errors/eip712.ts", "../../workers/api/node_modules/viem/actions/public/getEip712Domain.ts", "../../workers/api/node_modules/viem/actions/public/getFeeHistory.ts", "../../workers/api/node_modules/viem/utils/formatters/feeHistory.ts", "../../workers/api/node_modules/viem/actions/public/getFilterLogs.ts", "../../workers/api/node_modules/viem/actions/public/getProof.ts", "../../workers/api/node_modules/viem/utils/authorization/verifyAuthorization.ts", "../../workers/api/node_modules/viem/utils/buildRequest.ts", "../../workers/api/node_modules/viem/utils/promise/withDedupe.ts", "../../workers/api/node_modules/viem/utils/index.ts", "../../workers/api/node_modules/viem/utils/rpc/http.ts", "../../workers/api/node_modules/viem/utils/promise/withTimeout.ts", "../../workers/api/node_modules/viem/utils/rpc/id.ts", "../../workers/api/node_modules/viem/utils/signature/hashMessage.ts", "../../workers/api/node_modules/viem/constants/strings.ts", "../../workers/api/node_modules/viem/utils/signature/toPrefixedMessage.ts", "../../workers/api/node_modules/viem/utils/signature/hashTypedData.ts", "../../workers/api/node_modules/viem/utils/typedData.ts", "../../workers/api/node_modules/viem/errors/typedData.ts", "../../workers/api/node_modules/ox/erc8010/SignatureErc8010.ts", "../../workers/api/node_modules/ox/core/AbiParameters.ts", "../../workers/api/node_modules/ox/core/Address.ts", "../../workers/api/node_modules/ox/core/internal/lru.ts", "../../workers/api/node_modules/ox/core/Caches.ts", "../../workers/api/node_modules/ox/node_modules/@noble/hashes/src/crypto.ts", "../../workers/api/node_modules/ox/node_modules/@noble/hashes/src/utils.ts", "../../workers/api/node_modules/ox/node_modules/@noble/hashes/src/hmac.ts", "../../workers/api/node_modules/ox/node_modules/@noble/hashes/src/_md.ts", "../../workers/api/node_modules/ox/node_modules/@noble/hashes/src/_u64.ts", "../../workers/api/node_modules/ox/node_modules/@noble/hashes/src/sha3.ts", "../../workers/api/node_modules/ox/node_modules/@noble/hashes/src/sha2.ts", "../../workers/api/node_modules/ox/core/Hash.ts", "../../workers/api/node_modules/ox/core/PublicKey.ts", "../../workers/api/node_modules/ox/core/internal/abiParameters.ts", "../../workers/api/node_modules/ox/core/Solidity.ts", "../../workers/api/node_modules/ox/core/internal/cursor.ts", "../../workers/api/node_modules/ox/core/Authorization.ts", "../../workers/api/node_modules/ox/core/Rlp.ts", "../../workers/api/node_modules/ox/node_modules/@noble/curves/src/abstract/modular.ts", "../../workers/api/node_modules/ox/node_modules/@noble/curves/src/abstract/curve.ts", "../../workers/api/node_modules/ox/node_modules/@noble/curves/src/abstract/weierstrass.ts", "../../workers/api/node_modules/ox/node_modules/@noble/curves/src/_shortw_utils.ts", "../../workers/api/node_modules/ox/node_modules/@noble/curves/src/secp256k1.ts", "../../workers/api/node_modules/ox/core/Signature.ts", "../../workers/api/node_modules/ox/core/Secp256k1.ts", "../../workers/api/node_modules/viem/utils/formatters/proof.ts", "../../workers/api/node_modules/viem/actions/public/getStorageAt.ts", "../../workers/api/node_modules/viem/actions/public/getTransaction.ts", "../../workers/api/node_modules/viem/actions/public/getTransactionConfirmations.ts", "../../workers/api/node_modules/viem/actions/public/getTransactionReceipt.ts", "../../workers/api/node_modules/viem/actions/public/multicall.ts", "../../workers/api/node_modules/viem/actions/public/simulateBlocks.ts", "../../workers/api/node_modules/ox/core/AbiItem.ts", "../../workers/api/node_modules/ox/core/internal/abiItem.ts", "../../workers/api/node_modules/ox/core/AbiConstructor.ts", "../../workers/api/node_modules/ox/core/AbiFunction.ts", "../../workers/api/node_modules/viem/actions/public/simulateCalls.ts", "../../workers/api/node_modules/viem/constants/address.ts", "../../workers/api/node_modules/ox/erc6492/SignatureErc6492.ts", "../../workers/api/node_modules/viem/actions/public/verifyHash.ts", "../../workers/api/node_modules/viem/utils/signature/serializeSignature.ts", "../../workers/api/node_modules/viem/actions/public/verifyMessage.ts", "../../workers/api/node_modules/viem/actions/public/verifyTypedData.ts", "../../workers/api/node_modules/viem/actions/public/waitForTransactionReceipt.ts", "../../workers/api/node_modules/viem/actions/public/watchBlockNumber.ts", "../../workers/api/node_modules/viem/actions/public/watchBlocks.ts", "../../workers/api/node_modules/viem/actions/public/watchEvent.ts", "../../workers/api/node_modules/viem/actions/public/watchPendingTransactions.ts", "../../workers/api/node_modules/viem/utils/siwe/parseSiweMessage.ts", "../../workers/api/node_modules/viem/utils/siwe/validateSiweMessage.ts", "../../workers/api/node_modules/viem/actions/siwe/verifySiweMessage.ts", "../../workers/api/node_modules/viem/actions/wallet/sendRawTransactionSync.ts", "../../workers/api/node_modules/viem/clients/createPublicClient.ts", "../../workers/api/node_modules/viem/clients/transports/createTransport.ts", "../../workers/api/node_modules/viem/clients/transports/http.ts", "../../workers/api/node_modules/viem/errors/transport.ts", "../../workers/api/node_modules/viem/index.ts", "../../workers/api/client/lib/clientErrors.ts", "../../workers/api/client/wallet.ts"], + "sourcesContent": ["export const version = '1.2.3'\n", "import type { OneOf, Pretty } from './types.js'\nimport { version } from './version.js'\n\ntype BaseErrorArgs = Pretty<\n {\n docsPath?: string | undefined\n metaMessages?: string[] | undefined\n } & OneOf<{ details?: string | undefined } | { cause?: BaseError | Error }>\n>\n\nexport class BaseError extends Error {\n details: string\n docsPath?: string | undefined\n metaMessages?: string[] | undefined\n shortMessage: string\n\n override name = 'AbiTypeError'\n\n constructor(shortMessage: string, args: BaseErrorArgs = {}) {\n const details =\n args.cause instanceof BaseError\n ? args.cause.details\n : args.cause?.message\n ? args.cause.message\n : args.details!\n const docsPath =\n args.cause instanceof BaseError\n ? args.cause.docsPath || args.docsPath\n : args.docsPath\n const message = [\n shortMessage || 'An error occurred.',\n '',\n ...(args.metaMessages ? [...args.metaMessages, ''] : []),\n ...(docsPath ? [`Docs: https://abitype.dev${docsPath}`] : []),\n ...(details ? [`Details: ${details}`] : []),\n `Version: abitype@${version}`,\n ].join('\\n')\n\n super(message)\n\n if (args.cause) this.cause = args.cause\n this.details = details\n this.docsPath = docsPath\n this.metaMessages = args.metaMessages\n this.shortMessage = shortMessage\n }\n}\n", "// TODO: This looks cool. Need to check the performance of `new RegExp` versus defined inline though.\n// https://twitter.com/GabrielVergnaud/status/1622906834343366657\nexport function execTyped(regex: RegExp, string: string) {\n const match = regex.exec(string)\n return match?.groups as type | undefined\n}\n\n// `bytes`: binary type of `M` bytes, `0 < M <= 32`\n// https://regexr.com/6va55\nexport const bytesRegex = /^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/\n\n// `(u)int`: (un)signed integer type of `M` bits, `0 < M <= 256`, `M % 8 == 0`\n// https://regexr.com/6v8hp\nexport const integerRegex =\n /^u?int(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/\n\nexport const isTupleRegex = /^\\(.+?\\).*?$/\n", "import type { AbiEventParameter, AbiParameter } from '../abi.js'\nimport { execTyped } from '../regex.js'\nimport type { IsNarrowable, Join } from '../types.js'\nimport type { AssertName } from './types/signatures.js'\n\n/**\n * Formats {@link AbiParameter} to human-readable ABI parameter.\n *\n * @param abiParameter - ABI parameter\n * @returns Human-readable ABI parameter\n *\n * @example\n * type Result = FormatAbiParameter<{ type: 'address'; name: 'from'; }>\n * // ^? type Result = 'address from'\n */\nexport type FormatAbiParameter<\n abiParameter extends AbiParameter | AbiEventParameter,\n> = abiParameter extends {\n name?: infer name extends string\n type: `tuple${infer array}`\n components: infer components extends readonly AbiParameter[]\n indexed?: infer indexed extends boolean\n}\n ? FormatAbiParameter<\n {\n type: `(${Join<\n {\n [key in keyof components]: FormatAbiParameter<\n {\n type: components[key]['type']\n } & (IsNarrowable extends true\n ? { name: components[key]['name'] }\n : unknown) &\n (components[key] extends { components: readonly AbiParameter[] }\n ? { components: components[key]['components'] }\n : unknown)\n >\n },\n ', '\n >})${array}`\n } & (IsNarrowable extends true ? { name: name } : unknown) &\n (IsNarrowable extends true\n ? { indexed: indexed }\n : unknown)\n >\n : `${abiParameter['type']}${abiParameter extends { indexed: true }\n ? ' indexed'\n : ''}${abiParameter['name'] extends infer name extends string\n ? name extends ''\n ? ''\n : ` ${AssertName}`\n : ''}`\n\n// https://regexr.com/7f7rv\nconst tupleRegex = /^tuple(?(\\[(\\d*)\\])*)$/\n\n/**\n * Formats {@link AbiParameter} to human-readable ABI parameter.\n *\n * @param abiParameter - ABI parameter\n * @returns Human-readable ABI parameter\n *\n * @example\n * const result = formatAbiParameter({ type: 'address', name: 'from' })\n * // ^? const result: 'address from'\n */\nexport function formatAbiParameter<\n const abiParameter extends AbiParameter | AbiEventParameter,\n>(abiParameter: abiParameter): FormatAbiParameter {\n type Result = FormatAbiParameter\n\n let type = abiParameter.type\n if (tupleRegex.test(abiParameter.type) && 'components' in abiParameter) {\n type = '('\n const length = abiParameter.components.length as number\n for (let i = 0; i < length; i++) {\n const component = abiParameter.components[i]!\n type += formatAbiParameter(component)\n if (i < length - 1) type += ', '\n }\n const result = execTyped<{ array?: string }>(tupleRegex, abiParameter.type)\n type += `)${result?.array || ''}`\n return formatAbiParameter({\n ...abiParameter,\n type,\n }) as Result\n }\n // Add `indexed` to type if in `abiParameter`\n if ('indexed' in abiParameter && abiParameter.indexed)\n type = `${type} indexed`\n // Return human-readable ABI parameter\n if (abiParameter.name) return `${type} ${abiParameter.name}` as Result\n return type as Result\n}\n", "import type { AbiEventParameter, AbiParameter } from '../abi.js'\nimport type { Join } from '../types.js'\nimport {\n type FormatAbiParameter,\n formatAbiParameter,\n} from './formatAbiParameter.js'\n\n/**\n * Formats {@link AbiParameter}s to human-readable ABI parameter.\n *\n * @param abiParameters - ABI parameters\n * @returns Human-readable ABI parameters\n *\n * @example\n * type Result = FormatAbiParameters<[\n * // ^? type Result = 'address from, uint256 tokenId'\n * { type: 'address'; name: 'from'; },\n * { type: 'uint256'; name: 'tokenId'; },\n * ]>\n */\nexport type FormatAbiParameters<\n abiParameters extends readonly [\n AbiParameter | AbiEventParameter,\n ...(readonly (AbiParameter | AbiEventParameter)[]),\n ],\n> = Join<\n {\n [key in keyof abiParameters]: FormatAbiParameter\n },\n ', '\n>\n\n/**\n * Formats {@link AbiParameter}s to human-readable ABI parameters.\n *\n * @param abiParameters - ABI parameters\n * @returns Human-readable ABI parameters\n *\n * @example\n * const result = formatAbiParameters([\n * // ^? const result: 'address from, uint256 tokenId'\n * { type: 'address', name: 'from' },\n * { type: 'uint256', name: 'tokenId' },\n * ])\n */\nexport function formatAbiParameters<\n const abiParameters extends readonly [\n AbiParameter | AbiEventParameter,\n ...(readonly (AbiParameter | AbiEventParameter)[]),\n ],\n>(abiParameters: abiParameters): FormatAbiParameters {\n let params = ''\n const length = abiParameters.length\n for (let i = 0; i < length; i++) {\n const abiParameter = abiParameters[i]!\n params += formatAbiParameter(abiParameter)\n if (i !== length - 1) params += ', '\n }\n return params as FormatAbiParameters\n}\n", "import type {\n Abi,\n AbiConstructor,\n AbiError,\n AbiEvent,\n AbiEventParameter,\n AbiFallback,\n AbiFunction,\n AbiParameter,\n AbiReceive,\n AbiStateMutability,\n} from '../abi.js'\nimport {\n type FormatAbiParameters as FormatAbiParameters_,\n formatAbiParameters,\n} from './formatAbiParameters.js'\nimport type { AssertName } from './types/signatures.js'\n\n/**\n * Formats ABI item (e.g. error, event, function) into human-readable ABI item\n *\n * @param abiItem - ABI item\n * @returns Human-readable ABI item\n */\nexport type FormatAbiItem =\n Abi[number] extends abiItem\n ? string\n :\n | (abiItem extends AbiFunction\n ? AbiFunction extends abiItem\n ? string\n : `function ${AssertName}(${FormatAbiParameters<\n abiItem['inputs']\n >})${abiItem['stateMutability'] extends Exclude<\n AbiStateMutability,\n 'nonpayable'\n >\n ? ` ${abiItem['stateMutability']}`\n : ''}${abiItem['outputs']['length'] extends 0\n ? ''\n : ` returns (${FormatAbiParameters})`}`\n : never)\n | (abiItem extends AbiEvent\n ? AbiEvent extends abiItem\n ? string\n : `event ${AssertName}(${FormatAbiParameters<\n abiItem['inputs']\n >})`\n : never)\n | (abiItem extends AbiError\n ? AbiError extends abiItem\n ? string\n : `error ${AssertName}(${FormatAbiParameters<\n abiItem['inputs']\n >})`\n : never)\n | (abiItem extends AbiConstructor\n ? AbiConstructor extends abiItem\n ? string\n : `constructor(${FormatAbiParameters<\n abiItem['inputs']\n >})${abiItem['stateMutability'] extends 'payable'\n ? ' payable'\n : ''}`\n : never)\n | (abiItem extends AbiFallback\n ? AbiFallback extends abiItem\n ? string\n : `fallback() external${abiItem['stateMutability'] extends 'payable'\n ? ' payable'\n : ''}`\n : never)\n | (abiItem extends AbiReceive\n ? AbiReceive extends abiItem\n ? string\n : 'receive() external payable'\n : never)\n\ntype FormatAbiParameters<\n abiParameters extends readonly (AbiParameter | AbiEventParameter)[],\n> = abiParameters['length'] extends 0\n ? ''\n : FormatAbiParameters_<\n abiParameters extends readonly [\n AbiParameter | AbiEventParameter,\n ...(readonly (AbiParameter | AbiEventParameter)[]),\n ]\n ? abiParameters\n : never\n >\n\n/**\n * Formats ABI item (e.g. error, event, function) into human-readable ABI item\n *\n * @param abiItem - ABI item\n * @returns Human-readable ABI item\n */\nexport function formatAbiItem(\n abiItem: abiItem,\n): FormatAbiItem {\n type Result = FormatAbiItem\n type Params = readonly [\n AbiParameter | AbiEventParameter,\n ...(readonly (AbiParameter | AbiEventParameter)[]),\n ]\n\n if (abiItem.type === 'function')\n return `function ${abiItem.name}(${formatAbiParameters(\n abiItem.inputs as Params,\n )})${\n abiItem.stateMutability && abiItem.stateMutability !== 'nonpayable'\n ? ` ${abiItem.stateMutability}`\n : ''\n }${\n abiItem.outputs?.length\n ? ` returns (${formatAbiParameters(abiItem.outputs as Params)})`\n : ''\n }`\n if (abiItem.type === 'event')\n return `event ${abiItem.name}(${formatAbiParameters(\n abiItem.inputs as Params,\n )})`\n if (abiItem.type === 'error')\n return `error ${abiItem.name}(${formatAbiParameters(\n abiItem.inputs as Params,\n )})`\n if (abiItem.type === 'constructor')\n return `constructor(${formatAbiParameters(abiItem.inputs as Params)})${\n abiItem.stateMutability === 'payable' ? ' payable' : ''\n }`\n if (abiItem.type === 'fallback')\n return `fallback() external${\n abiItem.stateMutability === 'payable' ? ' payable' : ''\n }` as Result\n return 'receive() external payable' as Result\n}\n", "import type { AbiStateMutability } from '../../abi.js'\nimport { execTyped } from '../../regex.js'\nimport type {\n EventModifier,\n FunctionModifier,\n Modifier,\n} from '../types/signatures.js'\n\n// https://regexr.com/7gmok\nconst errorSignatureRegex =\n /^error (?[a-zA-Z$_][a-zA-Z0-9$_]*)\\((?.*?)\\)$/\nexport function isErrorSignature(signature: string) {\n return errorSignatureRegex.test(signature)\n}\nexport function execErrorSignature(signature: string) {\n return execTyped<{ name: string; parameters: string }>(\n errorSignatureRegex,\n signature,\n )\n}\n\n// https://regexr.com/7gmoq\nconst eventSignatureRegex =\n /^event (?[a-zA-Z$_][a-zA-Z0-9$_]*)\\((?.*?)\\)$/\nexport function isEventSignature(signature: string) {\n return eventSignatureRegex.test(signature)\n}\nexport function execEventSignature(signature: string) {\n return execTyped<{ name: string; parameters: string }>(\n eventSignatureRegex,\n signature,\n )\n}\n\n// https://regexr.com/7gmot\nconst functionSignatureRegex =\n /^function (?[a-zA-Z$_][a-zA-Z0-9$_]*)\\((?.*?)\\)(?: (?external|public{1}))?(?: (?pure|view|nonpayable|payable{1}))?(?: returns\\s?\\((?.*?)\\))?$/\nexport function isFunctionSignature(signature: string) {\n return functionSignatureRegex.test(signature)\n}\nexport function execFunctionSignature(signature: string) {\n return execTyped<{\n name: string\n parameters: string\n stateMutability?: AbiStateMutability\n returns?: string\n }>(functionSignatureRegex, signature)\n}\n\n// https://regexr.com/7gmp3\nconst structSignatureRegex =\n /^struct (?[a-zA-Z$_][a-zA-Z0-9$_]*) \\{(?.*?)\\}$/\nexport function isStructSignature(signature: string) {\n return structSignatureRegex.test(signature)\n}\nexport function execStructSignature(signature: string) {\n return execTyped<{ name: string; properties: string }>(\n structSignatureRegex,\n signature,\n )\n}\n\n// https://regexr.com/78u01\nconst constructorSignatureRegex =\n /^constructor\\((?.*?)\\)(?:\\s(?payable{1}))?$/\nexport function isConstructorSignature(signature: string) {\n return constructorSignatureRegex.test(signature)\n}\nexport function execConstructorSignature(signature: string) {\n return execTyped<{\n parameters: string\n stateMutability?: Extract\n }>(constructorSignatureRegex, signature)\n}\n\n// https://regexr.com/7srtn\nconst fallbackSignatureRegex =\n /^fallback\\(\\) external(?:\\s(?payable{1}))?$/\nexport function isFallbackSignature(signature: string) {\n return fallbackSignatureRegex.test(signature)\n}\nexport function execFallbackSignature(signature: string) {\n return execTyped<{\n parameters: string\n stateMutability?: Extract\n }>(fallbackSignatureRegex, signature)\n}\n\n// https://regexr.com/78u1k\nconst receiveSignatureRegex = /^receive\\(\\) external payable$/\nexport function isReceiveSignature(signature: string) {\n return receiveSignatureRegex.test(signature)\n}\n\nexport const modifiers = new Set([\n 'memory',\n 'indexed',\n 'storage',\n 'calldata',\n])\nexport const eventModifiers = new Set(['indexed'])\nexport const functionModifiers = new Set([\n 'calldata',\n 'memory',\n 'storage',\n])\n", "import { BaseError } from '../../errors.js'\n\nexport class InvalidAbiItemError extends BaseError {\n override name = 'InvalidAbiItemError'\n\n constructor({ signature }: { signature: string | object }) {\n super('Failed to parse ABI item.', {\n details: `parseAbiItem(${JSON.stringify(signature, null, 2)})`,\n docsPath: '/api/human#parseabiitem-1',\n })\n }\n}\n\nexport class UnknownTypeError extends BaseError {\n override name = 'UnknownTypeError'\n\n constructor({ type }: { type: string }) {\n super('Unknown type.', {\n metaMessages: [\n `Type \"${type}\" is not a valid ABI type. Perhaps you forgot to include a struct signature?`,\n ],\n })\n }\n}\n\nexport class UnknownSolidityTypeError extends BaseError {\n override name = 'UnknownSolidityTypeError'\n\n constructor({ type }: { type: string }) {\n super('Unknown type.', {\n metaMessages: [`Type \"${type}\" is not a valid ABI type.`],\n })\n }\n}\n", "import type { AbiItemType, AbiParameter } from '../../abi.js'\nimport { BaseError } from '../../errors.js'\nimport type { Modifier } from '../types/signatures.js'\n\nexport class InvalidAbiParameterError extends BaseError {\n override name = 'InvalidAbiParameterError'\n\n constructor({ param }: { param: string | object }) {\n super('Failed to parse ABI parameter.', {\n details: `parseAbiParameter(${JSON.stringify(param, null, 2)})`,\n docsPath: '/api/human#parseabiparameter-1',\n })\n }\n}\n\nexport class InvalidAbiParametersError extends BaseError {\n override name = 'InvalidAbiParametersError'\n\n constructor({ params }: { params: string | object }) {\n super('Failed to parse ABI parameters.', {\n details: `parseAbiParameters(${JSON.stringify(params, null, 2)})`,\n docsPath: '/api/human#parseabiparameters-1',\n })\n }\n}\n\nexport class InvalidParameterError extends BaseError {\n override name = 'InvalidParameterError'\n\n constructor({ param }: { param: string }) {\n super('Invalid ABI parameter.', {\n details: param,\n })\n }\n}\n\nexport class SolidityProtectedKeywordError extends BaseError {\n override name = 'SolidityProtectedKeywordError'\n\n constructor({ param, name }: { param: string; name: string }) {\n super('Invalid ABI parameter.', {\n details: param,\n metaMessages: [\n `\"${name}\" is a protected Solidity keyword. More info: https://docs.soliditylang.org/en/latest/cheatsheet.html`,\n ],\n })\n }\n}\n\nexport class InvalidModifierError extends BaseError {\n override name = 'InvalidModifierError'\n\n constructor({\n param,\n type,\n modifier,\n }: {\n param: string\n type?: AbiItemType | 'struct' | undefined\n modifier: Modifier\n }) {\n super('Invalid ABI parameter.', {\n details: param,\n metaMessages: [\n `Modifier \"${modifier}\" not allowed${\n type ? ` in \"${type}\" type` : ''\n }.`,\n ],\n })\n }\n}\n\nexport class InvalidFunctionModifierError extends BaseError {\n override name = 'InvalidFunctionModifierError'\n\n constructor({\n param,\n type,\n modifier,\n }: {\n param: string\n type?: AbiItemType | 'struct' | undefined\n modifier: Modifier\n }) {\n super('Invalid ABI parameter.', {\n details: param,\n metaMessages: [\n `Modifier \"${modifier}\" not allowed${\n type ? ` in \"${type}\" type` : ''\n }.`,\n `Data location can only be specified for array, struct, or mapping types, but \"${modifier}\" was given.`,\n ],\n })\n }\n}\n\nexport class InvalidAbiTypeParameterError extends BaseError {\n override name = 'InvalidAbiTypeParameterError'\n\n constructor({\n abiParameter,\n }: {\n abiParameter: AbiParameter & { indexed?: boolean | undefined }\n }) {\n super('Invalid ABI parameter.', {\n details: JSON.stringify(abiParameter, null, 2),\n metaMessages: ['ABI parameter type is invalid.'],\n })\n }\n}\n", "import type { AbiItemType } from '../../abi.js'\nimport { BaseError } from '../../errors.js'\n\nexport class InvalidSignatureError extends BaseError {\n override name = 'InvalidSignatureError'\n\n constructor({\n signature,\n type,\n }: {\n signature: string\n type: AbiItemType | 'struct'\n }) {\n super(`Invalid ${type} signature.`, {\n details: signature,\n })\n }\n}\n\nexport class UnknownSignatureError extends BaseError {\n override name = 'UnknownSignatureError'\n\n constructor({ signature }: { signature: string }) {\n super('Unknown signature.', {\n details: signature,\n })\n }\n}\n\nexport class InvalidStructSignatureError extends BaseError {\n override name = 'InvalidStructSignatureError'\n\n constructor({ signature }: { signature: string }) {\n super('Invalid struct signature.', {\n details: signature,\n metaMessages: ['No properties exist.'],\n })\n }\n}\n", "import { BaseError } from '../../errors.js'\n\nexport class CircularReferenceError extends BaseError {\n override name = 'CircularReferenceError'\n\n constructor({ type }: { type: string }) {\n super('Circular reference detected.', {\n metaMessages: [`Struct \"${type}\" is a circular reference.`],\n })\n }\n}\n", "import { BaseError } from '../../errors.js'\n\nexport class InvalidParenthesisError extends BaseError {\n override name = 'InvalidParenthesisError'\n\n constructor({ current, depth }: { current: string; depth: number }) {\n super('Unbalanced parentheses.', {\n metaMessages: [\n `\"${current.trim()}\" has too many ${\n depth > 0 ? 'opening' : 'closing'\n } parentheses.`,\n ],\n details: `Depth \"${depth}\"`,\n })\n }\n}\n", "import type { AbiItemType, AbiParameter } from '../../abi.js'\nimport type { StructLookup } from '../types/structs.js'\n\n/**\n * Gets {@link parameterCache} cache key namespaced by {@link type} and {@link structs}. This prevents parameters from being accessible to types that don't allow them (e.g. `string indexed foo` not allowed outside of `type: 'event'`) and ensures different struct definitions with the same name are cached separately.\n * @param param ABI parameter string\n * @param type ABI parameter type\n * @param structs Struct definitions to include in cache key\n * @returns Cache key for {@link parameterCache}\n */\nexport function getParameterCacheKey(\n param: string,\n type?: AbiItemType | 'struct',\n structs?: StructLookup,\n) {\n let structKey = ''\n if (structs)\n for (const struct of Object.entries(structs)) {\n if (!struct) continue\n let propertyKey = ''\n for (const property of struct[1]) {\n propertyKey += `[${property.type}${property.name ? `:${property.name}` : ''}]`\n }\n structKey += `(${struct[0]}{${propertyKey}})`\n }\n if (type) return `${type}:${param}${structKey}`\n return `${param}${structKey}`\n}\n\n/**\n * Basic cache seeded with common ABI parameter strings.\n *\n * **Note: When seeding more parameters, make sure you benchmark performance. The current number is the ideal balance between performance and having an already existing cache.**\n */\nexport const parameterCache = new Map<\n string,\n AbiParameter & { indexed?: boolean }\n>([\n // Unnamed\n ['address', { type: 'address' }],\n ['bool', { type: 'bool' }],\n ['bytes', { type: 'bytes' }],\n ['bytes32', { type: 'bytes32' }],\n ['int', { type: 'int256' }],\n ['int256', { type: 'int256' }],\n ['string', { type: 'string' }],\n ['uint', { type: 'uint256' }],\n ['uint8', { type: 'uint8' }],\n ['uint16', { type: 'uint16' }],\n ['uint24', { type: 'uint24' }],\n ['uint32', { type: 'uint32' }],\n ['uint64', { type: 'uint64' }],\n ['uint96', { type: 'uint96' }],\n ['uint112', { type: 'uint112' }],\n ['uint160', { type: 'uint160' }],\n ['uint192', { type: 'uint192' }],\n ['uint256', { type: 'uint256' }],\n\n // Named\n ['address owner', { type: 'address', name: 'owner' }],\n ['address to', { type: 'address', name: 'to' }],\n ['bool approved', { type: 'bool', name: 'approved' }],\n ['bytes _data', { type: 'bytes', name: '_data' }],\n ['bytes data', { type: 'bytes', name: 'data' }],\n ['bytes signature', { type: 'bytes', name: 'signature' }],\n ['bytes32 hash', { type: 'bytes32', name: 'hash' }],\n ['bytes32 r', { type: 'bytes32', name: 'r' }],\n ['bytes32 root', { type: 'bytes32', name: 'root' }],\n ['bytes32 s', { type: 'bytes32', name: 's' }],\n ['string name', { type: 'string', name: 'name' }],\n ['string symbol', { type: 'string', name: 'symbol' }],\n ['string tokenURI', { type: 'string', name: 'tokenURI' }],\n ['uint tokenId', { type: 'uint256', name: 'tokenId' }],\n ['uint8 v', { type: 'uint8', name: 'v' }],\n ['uint256 balance', { type: 'uint256', name: 'balance' }],\n ['uint256 tokenId', { type: 'uint256', name: 'tokenId' }],\n ['uint256 value', { type: 'uint256', name: 'value' }],\n\n // Indexed\n [\n 'event:address indexed from',\n { type: 'address', name: 'from', indexed: true },\n ],\n ['event:address indexed to', { type: 'address', name: 'to', indexed: true }],\n [\n 'event:uint indexed tokenId',\n { type: 'uint256', name: 'tokenId', indexed: true },\n ],\n [\n 'event:uint256 indexed tokenId',\n { type: 'uint256', name: 'tokenId', indexed: true },\n ],\n])\n", "import type {\n AbiItemType,\n AbiType,\n SolidityArray,\n SolidityBytes,\n SolidityString,\n SolidityTuple,\n} from '../../abi.js'\nimport {\n bytesRegex,\n execTyped,\n integerRegex,\n isTupleRegex,\n} from '../../regex.js'\nimport { UnknownSolidityTypeError } from '../errors/abiItem.js'\nimport {\n InvalidFunctionModifierError,\n InvalidModifierError,\n InvalidParameterError,\n SolidityProtectedKeywordError,\n} from '../errors/abiParameter.js'\nimport {\n InvalidSignatureError,\n UnknownSignatureError,\n} from '../errors/signature.js'\nimport { InvalidParenthesisError } from '../errors/splitParameters.js'\nimport type { FunctionModifier, Modifier } from '../types/signatures.js'\nimport type { StructLookup } from '../types/structs.js'\nimport { getParameterCacheKey, parameterCache } from './cache.js'\nimport {\n eventModifiers,\n execConstructorSignature,\n execErrorSignature,\n execEventSignature,\n execFallbackSignature,\n execFunctionSignature,\n functionModifiers,\n isConstructorSignature,\n isErrorSignature,\n isEventSignature,\n isFallbackSignature,\n isFunctionSignature,\n isReceiveSignature,\n} from './signatures.js'\n\nexport function parseSignature(signature: string, structs: StructLookup = {}) {\n if (isFunctionSignature(signature))\n return parseFunctionSignature(signature, structs)\n\n if (isEventSignature(signature))\n return parseEventSignature(signature, structs)\n\n if (isErrorSignature(signature))\n return parseErrorSignature(signature, structs)\n\n if (isConstructorSignature(signature))\n return parseConstructorSignature(signature, structs)\n\n if (isFallbackSignature(signature)) return parseFallbackSignature(signature)\n\n if (isReceiveSignature(signature))\n return {\n type: 'receive',\n stateMutability: 'payable',\n }\n\n throw new UnknownSignatureError({ signature })\n}\n\nexport function parseFunctionSignature(\n signature: string,\n structs: StructLookup = {},\n) {\n const match = execFunctionSignature(signature)\n if (!match) throw new InvalidSignatureError({ signature, type: 'function' })\n\n const inputParams = splitParameters(match.parameters)\n const inputs = []\n const inputLength = inputParams.length\n for (let i = 0; i < inputLength; i++) {\n inputs.push(\n parseAbiParameter(inputParams[i]!, {\n modifiers: functionModifiers,\n structs,\n type: 'function',\n }),\n )\n }\n\n const outputs = []\n if (match.returns) {\n const outputParams = splitParameters(match.returns)\n const outputLength = outputParams.length\n for (let i = 0; i < outputLength; i++) {\n outputs.push(\n parseAbiParameter(outputParams[i]!, {\n modifiers: functionModifiers,\n structs,\n type: 'function',\n }),\n )\n }\n }\n\n return {\n name: match.name,\n type: 'function',\n stateMutability: match.stateMutability ?? 'nonpayable',\n inputs,\n outputs,\n }\n}\n\nexport function parseEventSignature(\n signature: string,\n structs: StructLookup = {},\n) {\n const match = execEventSignature(signature)\n if (!match) throw new InvalidSignatureError({ signature, type: 'event' })\n\n const params = splitParameters(match.parameters)\n const abiParameters = []\n const length = params.length\n for (let i = 0; i < length; i++)\n abiParameters.push(\n parseAbiParameter(params[i]!, {\n modifiers: eventModifiers,\n structs,\n type: 'event',\n }),\n )\n return { name: match.name, type: 'event', inputs: abiParameters }\n}\n\nexport function parseErrorSignature(\n signature: string,\n structs: StructLookup = {},\n) {\n const match = execErrorSignature(signature)\n if (!match) throw new InvalidSignatureError({ signature, type: 'error' })\n\n const params = splitParameters(match.parameters)\n const abiParameters = []\n const length = params.length\n for (let i = 0; i < length; i++)\n abiParameters.push(\n parseAbiParameter(params[i]!, { structs, type: 'error' }),\n )\n return { name: match.name, type: 'error', inputs: abiParameters }\n}\n\nexport function parseConstructorSignature(\n signature: string,\n structs: StructLookup = {},\n) {\n const match = execConstructorSignature(signature)\n if (!match)\n throw new InvalidSignatureError({ signature, type: 'constructor' })\n\n const params = splitParameters(match.parameters)\n const abiParameters = []\n const length = params.length\n for (let i = 0; i < length; i++)\n abiParameters.push(\n parseAbiParameter(params[i]!, { structs, type: 'constructor' }),\n )\n return {\n type: 'constructor',\n stateMutability: match.stateMutability ?? 'nonpayable',\n inputs: abiParameters,\n }\n}\n\nexport function parseFallbackSignature(signature: string) {\n const match = execFallbackSignature(signature)\n if (!match) throw new InvalidSignatureError({ signature, type: 'fallback' })\n\n return {\n type: 'fallback',\n stateMutability: match.stateMutability ?? 'nonpayable',\n }\n}\n\nconst abiParameterWithoutTupleRegex =\n /^(?[a-zA-Z$_][a-zA-Z0-9$_]*(?:\\spayable)?)(?(?:\\[\\d*?\\])+?)?(?:\\s(?calldata|indexed|memory|storage{1}))?(?:\\s(?[a-zA-Z$_][a-zA-Z0-9$_]*))?$/\nconst abiParameterWithTupleRegex =\n /^\\((?.+?)\\)(?(?:\\[\\d*?\\])+?)?(?:\\s(?calldata|indexed|memory|storage{1}))?(?:\\s(?[a-zA-Z$_][a-zA-Z0-9$_]*))?$/\nconst dynamicIntegerRegex = /^u?int$/\n\ntype ParseOptions = {\n modifiers?: Set\n structs?: StructLookup\n type?: AbiItemType | 'struct'\n}\n\nexport function parseAbiParameter(param: string, options?: ParseOptions) {\n // optional namespace cache by `type`\n const parameterCacheKey = getParameterCacheKey(\n param,\n options?.type,\n options?.structs,\n )\n if (parameterCache.has(parameterCacheKey))\n return parameterCache.get(parameterCacheKey)!\n\n const isTuple = isTupleRegex.test(param)\n const match = execTyped<{\n array?: string\n modifier?: Modifier\n name?: string\n type: string\n }>(\n isTuple ? abiParameterWithTupleRegex : abiParameterWithoutTupleRegex,\n param,\n )\n if (!match) throw new InvalidParameterError({ param })\n\n if (match.name && isSolidityKeyword(match.name))\n throw new SolidityProtectedKeywordError({ param, name: match.name })\n\n const name = match.name ? { name: match.name } : {}\n const indexed = match.modifier === 'indexed' ? { indexed: true } : {}\n const structs = options?.structs ?? {}\n let type: string\n let components = {}\n if (isTuple) {\n type = 'tuple'\n const params = splitParameters(match.type)\n const components_ = []\n const length = params.length\n for (let i = 0; i < length; i++) {\n // remove `modifiers` from `options` to prevent from being added to tuple components\n components_.push(parseAbiParameter(params[i]!, { structs }))\n }\n components = { components: components_ }\n } else if (match.type in structs) {\n type = 'tuple'\n components = { components: structs[match.type] }\n } else if (dynamicIntegerRegex.test(match.type)) {\n type = `${match.type}256`\n } else if (match.type === 'address payable') {\n type = 'address'\n } else {\n type = match.type\n if (!(options?.type === 'struct') && !isSolidityType(type))\n throw new UnknownSolidityTypeError({ type })\n }\n\n if (match.modifier) {\n // Check if modifier exists, but is not allowed (e.g. `indexed` in `functionModifiers`)\n if (!options?.modifiers?.has?.(match.modifier))\n throw new InvalidModifierError({\n param,\n type: options?.type,\n modifier: match.modifier,\n })\n\n // Check if resolved `type` is valid if there is a function modifier\n if (\n functionModifiers.has(match.modifier as FunctionModifier) &&\n !isValidDataLocation(type, !!match.array)\n )\n throw new InvalidFunctionModifierError({\n param,\n type: options?.type,\n modifier: match.modifier,\n })\n }\n\n const abiParameter = {\n type: `${type}${match.array ?? ''}`,\n ...name,\n ...indexed,\n ...components,\n }\n parameterCache.set(parameterCacheKey, abiParameter)\n return abiParameter\n}\n\n// s/o latika for this\nexport function splitParameters(\n params: string,\n result: string[] = [],\n current = '',\n depth = 0,\n): readonly string[] {\n const length = params.trim().length\n // biome-ignore lint/correctness/noUnreachable: recursive\n for (let i = 0; i < length; i++) {\n const char = params[i]\n const tail = params.slice(i + 1)\n switch (char) {\n case ',':\n return depth === 0\n ? splitParameters(tail, [...result, current.trim()])\n : splitParameters(tail, result, `${current}${char}`, depth)\n case '(':\n return splitParameters(tail, result, `${current}${char}`, depth + 1)\n case ')':\n return splitParameters(tail, result, `${current}${char}`, depth - 1)\n default:\n return splitParameters(tail, result, `${current}${char}`, depth)\n }\n }\n\n if (current === '') return result\n if (depth !== 0) throw new InvalidParenthesisError({ current, depth })\n\n result.push(current.trim())\n return result\n}\n\nexport function isSolidityType(\n type: string,\n): type is Exclude {\n return (\n type === 'address' ||\n type === 'bool' ||\n type === 'function' ||\n type === 'string' ||\n bytesRegex.test(type) ||\n integerRegex.test(type)\n )\n}\n\nconst protectedKeywordsRegex =\n /^(?:after|alias|anonymous|apply|auto|byte|calldata|case|catch|constant|copyof|default|defined|error|event|external|false|final|function|immutable|implements|in|indexed|inline|internal|let|mapping|match|memory|mutable|null|of|override|partial|private|promise|public|pure|reference|relocatable|return|returns|sizeof|static|storage|struct|super|supports|switch|this|true|try|typedef|typeof|var|view|virtual)$/\n\n/** @internal */\nexport function isSolidityKeyword(name: string) {\n return (\n name === 'address' ||\n name === 'bool' ||\n name === 'function' ||\n name === 'string' ||\n name === 'tuple' ||\n bytesRegex.test(name) ||\n integerRegex.test(name) ||\n protectedKeywordsRegex.test(name)\n )\n}\n\n/** @internal */\nexport function isValidDataLocation(\n type: string,\n isArray: boolean,\n): type is Exclude<\n AbiType,\n SolidityString | Extract | SolidityArray\n> {\n return isArray || type === 'bytes' || type === 'string' || type === 'tuple'\n}\n", "import type { AbiParameter } from '../../abi.js'\nimport { execTyped, isTupleRegex } from '../../regex.js'\nimport { UnknownTypeError } from '../errors/abiItem.js'\nimport { InvalidAbiTypeParameterError } from '../errors/abiParameter.js'\nimport {\n InvalidSignatureError,\n InvalidStructSignatureError,\n} from '../errors/signature.js'\nimport { CircularReferenceError } from '../errors/struct.js'\nimport type { StructLookup } from '../types/structs.js'\nimport { execStructSignature, isStructSignature } from './signatures.js'\nimport { isSolidityType, parseAbiParameter } from './utils.js'\n\nexport function parseStructs(signatures: readonly string[]) {\n // Create \"shallow\" version of each struct (and filter out non-structs or invalid structs)\n const shallowStructs: StructLookup = {}\n const signaturesLength = signatures.length\n for (let i = 0; i < signaturesLength; i++) {\n const signature = signatures[i]!\n if (!isStructSignature(signature)) continue\n\n const match = execStructSignature(signature)\n if (!match) throw new InvalidSignatureError({ signature, type: 'struct' })\n\n const properties = match.properties.split(';')\n\n const components: AbiParameter[] = []\n const propertiesLength = properties.length\n for (let k = 0; k < propertiesLength; k++) {\n const property = properties[k]!\n const trimmed = property.trim()\n if (!trimmed) continue\n const abiParameter = parseAbiParameter(trimmed, {\n type: 'struct',\n })\n components.push(abiParameter)\n }\n\n if (!components.length) throw new InvalidStructSignatureError({ signature })\n shallowStructs[match.name] = components\n }\n\n // Resolve nested structs inside each parameter\n const resolvedStructs: StructLookup = {}\n const entries = Object.entries(shallowStructs)\n const entriesLength = entries.length\n for (let i = 0; i < entriesLength; i++) {\n const [name, parameters] = entries[i]!\n resolvedStructs[name] = resolveStructs(parameters, shallowStructs)\n }\n\n return resolvedStructs\n}\n\nconst typeWithoutTupleRegex =\n /^(?[a-zA-Z$_][a-zA-Z0-9$_]*)(?(?:\\[\\d*?\\])+?)?$/\n\nfunction resolveStructs(\n abiParameters: readonly (AbiParameter & { indexed?: true })[] = [],\n structs: StructLookup = {},\n ancestors = new Set(),\n) {\n const components: AbiParameter[] = []\n const length = abiParameters.length\n for (let i = 0; i < length; i++) {\n const abiParameter = abiParameters[i]!\n const isTuple = isTupleRegex.test(abiParameter.type)\n if (isTuple) components.push(abiParameter)\n else {\n const match = execTyped<{ array?: string; type: string }>(\n typeWithoutTupleRegex,\n abiParameter.type,\n )\n if (!match?.type) throw new InvalidAbiTypeParameterError({ abiParameter })\n\n const { array, type } = match\n if (type in structs) {\n if (ancestors.has(type)) throw new CircularReferenceError({ type })\n\n components.push({\n ...abiParameter,\n type: `tuple${array ?? ''}`,\n components: resolveStructs(\n structs[type],\n structs,\n new Set([...ancestors, type]),\n ),\n })\n } else {\n if (isSolidityType(type)) components.push(abiParameter)\n else throw new UnknownTypeError({ type })\n }\n }\n }\n\n return components\n}\n", "import type { Abi } from '../abi.js'\nimport type { Error, Filter } from '../types.js'\nimport { isStructSignature } from './runtime/signatures.js'\nimport { parseStructs } from './runtime/structs.js'\nimport { parseSignature } from './runtime/utils.js'\nimport type { Signatures } from './types/signatures.js'\nimport type { ParseStructs } from './types/structs.js'\nimport type { ParseSignature } from './types/utils.js'\n\n/**\n * Parses human-readable ABI into JSON {@link Abi}\n *\n * @param signatures - Human-readable ABI\n * @returns Parsed {@link Abi}\n *\n * @example\n * type Result = ParseAbi<\n * // ^? type Result = readonly [{ name: \"balanceOf\"; type: \"function\"; stateMutability:...\n * [\n * 'function balanceOf(address owner) view returns (uint256)',\n * 'event Transfer(address indexed from, address indexed to, uint256 amount)',\n * ]\n * >\n */\nexport type ParseAbi =\n string[] extends signatures\n ? Abi // If `T` was not able to be inferred (e.g. just `string[]`), return `Abi`\n : signatures extends readonly string[]\n ? signatures extends Signatures // Validate signatures\n ? ParseStructs extends infer structs\n ? {\n [key in keyof signatures]: signatures[key] extends string\n ? ParseSignature\n : never\n } extends infer mapped extends readonly unknown[]\n ? Filter extends infer result\n ? result extends readonly []\n ? never\n : result\n : never\n : never\n : never\n : never\n : never\n\n/**\n * Parses human-readable ABI into JSON {@link Abi}\n *\n * @param signatures - Human-Readable ABI\n * @returns Parsed {@link Abi}\n *\n * @example\n * const abi = parseAbi([\n * // ^? const abi: readonly [{ name: \"balanceOf\"; type: \"function\"; stateMutability:...\n * 'function balanceOf(address owner) view returns (uint256)',\n * 'event Transfer(address indexed from, address indexed to, uint256 amount)',\n * ])\n */\nexport function parseAbi(\n signatures: signatures['length'] extends 0\n ? Error<'At least one signature required'>\n : Signatures extends signatures\n ? signatures\n : Signatures,\n): ParseAbi {\n const structs = parseStructs(signatures as readonly string[])\n const abi = []\n const length = signatures.length as number\n for (let i = 0; i < length; i++) {\n const signature = (signatures as readonly string[])[i]!\n if (isStructSignature(signature)) continue\n abi.push(parseSignature(signature, structs))\n }\n return abi as unknown as ParseAbi\n}\n", "import type { Abi } from '../abi.js'\nimport type { Narrow } from '../narrow.js'\nimport type { Error, Filter } from '../types.js'\nimport { InvalidAbiItemError } from './errors/abiItem.js'\nimport { isStructSignature } from './runtime/signatures.js'\nimport { parseStructs } from './runtime/structs.js'\nimport { parseSignature } from './runtime/utils.js'\nimport type { Signature, Signatures } from './types/signatures.js'\nimport type { ParseStructs } from './types/structs.js'\nimport type { ParseSignature } from './types/utils.js'\n\n/**\n * Parses human-readable ABI item (e.g. error, event, function) into {@link Abi} item\n *\n * @param signature - Human-readable ABI item\n * @returns Parsed {@link Abi} item\n *\n * @example\n * type Result = ParseAbiItem<'function balanceOf(address owner) view returns (uint256)'>\n * // ^? type Result = { name: \"balanceOf\"; type: \"function\"; stateMutability: \"view\";...\n *\n * @example\n * type Result = ParseAbiItem<\n * // ^? type Result = { name: \"foo\"; type: \"function\"; stateMutability: \"view\"; inputs:...\n * ['function foo(Baz bar) view returns (string)', 'struct Baz { string name; }']\n * >\n */\nexport type ParseAbiItem<\n signature extends string | readonly string[] | readonly unknown[],\n> =\n | (signature extends string\n ? string extends signature\n ? Abi[number]\n : signature extends Signature // Validate signature\n ? ParseSignature\n : never\n : never)\n | (signature extends readonly string[]\n ? string[] extends signature\n ? Abi[number] // Return generic Abi item since type was no inferrable\n : signature extends Signatures // Validate signature\n ? ParseStructs extends infer structs\n ? {\n [key in keyof signature]: ParseSignature<\n signature[key] extends string ? signature[key] : never,\n structs\n >\n } extends infer mapped extends readonly unknown[]\n ? // Filter out `never` since those are structs\n Filter[0] extends infer result\n ? result extends undefined // convert `undefined` to `never` (e.g. `ParseAbiItem<['struct Foo { string name; }']>`)\n ? never\n : result\n : never\n : never\n : never\n : never\n : never)\n\n/**\n * Parses human-readable ABI item (e.g. error, event, function) into {@link Abi} item\n *\n * @param signature - Human-readable ABI item\n * @returns Parsed {@link Abi} item\n *\n * @example\n * const abiItem = parseAbiItem('function balanceOf(address owner) view returns (uint256)')\n * // ^? const abiItem: { name: \"balanceOf\"; type: \"function\"; stateMutability: \"view\";...\n *\n * @example\n * const abiItem = parseAbiItem([\n * // ^? const abiItem: { name: \"foo\"; type: \"function\"; stateMutability: \"view\"; inputs:...\n * 'function foo(Baz bar) view returns (string)',\n * 'struct Baz { string name; }',\n * ])\n */\nexport function parseAbiItem<\n signature extends string | readonly string[] | readonly unknown[],\n>(\n signature: Narrow &\n (\n | (signature extends string\n ? string extends signature\n ? unknown\n : Signature\n : never)\n | (signature extends readonly string[]\n ? signature extends readonly [] // empty array\n ? Error<'At least one signature required.'>\n : string[] extends signature\n ? unknown\n : Signatures\n : never)\n ),\n): ParseAbiItem {\n let abiItem: ParseAbiItem | undefined\n if (typeof signature === 'string')\n abiItem = parseSignature(signature) as ParseAbiItem\n else {\n const structs = parseStructs(signature as readonly string[])\n const length = signature.length as number\n for (let i = 0; i < length; i++) {\n const signature_ = (signature as readonly string[])[i]!\n if (isStructSignature(signature_)) continue\n abiItem = parseSignature(signature_, structs) as ParseAbiItem\n break\n }\n }\n\n if (!abiItem) throw new InvalidAbiItemError({ signature })\n return abiItem as ParseAbiItem\n}\n", "import type { AbiParameter } from '../abi.js'\nimport type { Narrow } from '../narrow.js'\nimport type { Error, Filter } from '../types.js'\nimport { InvalidAbiParametersError } from './errors/abiParameter.js'\nimport { isStructSignature, modifiers } from './runtime/signatures.js'\nimport { parseStructs } from './runtime/structs.js'\nimport { splitParameters } from './runtime/utils.js'\nimport { parseAbiParameter as parseAbiParameter_ } from './runtime/utils.js'\nimport type { IsStructSignature, Modifier } from './types/signatures.js'\nimport type { ParseStructs } from './types/structs.js'\nimport type { SplitParameters } from './types/utils.js'\nimport type { ParseAbiParameters as ParseAbiParameters_ } from './types/utils.js'\n\n/**\n * Parses human-readable ABI parameters into {@link AbiParameter}s\n *\n * @param params - Human-readable ABI parameters\n * @returns Parsed {@link AbiParameter}s\n *\n * @example\n * type Result = ParseAbiParameters('address from, address to, uint256 amount')\n * // ^? type Result: [{ type: \"address\"; name: \"from\"; }, { type: \"address\";...\n *\n * @example\n * type Result = ParseAbiParameters<\n * // ^? type Result: [{ type: \"tuple\"; components: [{ type: \"string\"; name:...\n * ['Baz bar', 'struct Baz { string name; }']\n * >\n */\nexport type ParseAbiParameters<\n params extends string | readonly string[] | readonly unknown[],\n> =\n | (params extends string\n ? params extends ''\n ? never\n : string extends params\n ? readonly AbiParameter[]\n : ParseAbiParameters_, { modifier: Modifier }>\n : never)\n | (params extends readonly string[]\n ? string[] extends params\n ? AbiParameter // Return generic AbiParameter item since type was no inferrable\n : ParseStructs extends infer structs\n ? {\n [key in keyof params]: params[key] extends string\n ? IsStructSignature extends true\n ? never\n : ParseAbiParameters_<\n SplitParameters,\n { modifier: Modifier; structs: structs }\n >\n : never\n } extends infer mapped extends readonly unknown[]\n ? Filter extends readonly [...infer content]\n ? content['length'] extends 0\n ? never\n : DeepFlatten\n : never\n : never\n : never\n : never)\n\n/**\n * Flatten all members of {@link T}\n *\n * @param T - List of items to flatten\n * @param Acc - The accumulator used while recursing\n * @returns The flattened array\n *\n * @example\n * type Result = DeepFlatten<[['a', 'b'], [['c']]]>\n * // ^? type Result = ['a', 'b', 'c']\n */\ntype DeepFlatten<\n T extends readonly unknown[],\n Acc extends readonly unknown[] = readonly [],\n> = T extends readonly [infer head, ...infer tail]\n ? tail extends undefined\n ? never\n : head extends readonly unknown[]\n ? DeepFlatten]>\n : DeepFlatten\n : Acc\n\n/**\n * Parses human-readable ABI parameters into {@link AbiParameter}s\n *\n * @param params - Human-readable ABI parameters\n * @returns Parsed {@link AbiParameter}s\n *\n * @example\n * const abiParameters = parseAbiParameters('address from, address to, uint256 amount')\n * // ^? const abiParameters: [{ type: \"address\"; name: \"from\"; }, { type: \"address\";...\n *\n * @example\n * const abiParameters = parseAbiParameters([\n * // ^? const abiParameters: [{ type: \"tuple\"; components: [{ type: \"string\"; name:...\n * 'Baz bar',\n * 'struct Baz { string name; }',\n * ])\n */\nexport function parseAbiParameters<\n params extends string | readonly string[] | readonly unknown[],\n>(\n params: Narrow &\n (\n | (params extends string\n ? params extends ''\n ? Error<'Empty string is not allowed.'>\n : unknown\n : never)\n | (params extends readonly string[]\n ? params extends readonly [] // empty array\n ? Error<'At least one parameter required.'>\n : string[] extends params\n ? unknown\n : unknown // TODO: Validate param string\n : never)\n ),\n): ParseAbiParameters {\n const abiParameters: AbiParameter[] = []\n if (typeof params === 'string') {\n const parameters = splitParameters(params)\n const length = parameters.length\n for (let i = 0; i < length; i++) {\n abiParameters.push(parseAbiParameter_(parameters[i]!, { modifiers }))\n }\n } else {\n const structs = parseStructs(params as readonly string[])\n const length = params.length as number\n for (let i = 0; i < length; i++) {\n const signature = (params as readonly string[])[i]!\n if (isStructSignature(signature)) continue\n const parameters = splitParameters(signature)\n const length = parameters.length\n for (let k = 0; k < length; k++) {\n abiParameters.push(\n parseAbiParameter_(parameters[k]!, { modifiers, structs }),\n )\n }\n }\n }\n\n if (abiParameters.length === 0)\n throw new InvalidAbiParametersError({ params })\n\n return abiParameters as ParseAbiParameters\n}\n", "export type {\n Abi,\n AbiConstructor,\n AbiError,\n AbiEvent,\n AbiEventParameter,\n AbiFallback,\n AbiFunction,\n AbiInternalType,\n AbiItemType,\n AbiParameter,\n AbiParameterKind,\n AbiReceive,\n AbiStateMutability,\n AbiType,\n Address,\n SolidityAddress,\n SolidityArray,\n SolidityArrayWithoutTuple,\n SolidityArrayWithTuple,\n SolidityBool,\n SolidityBytes,\n SolidityFixedArrayRange,\n SolidityFixedArraySizeLookup,\n SolidityFunction,\n SolidityInt,\n SolidityString,\n SolidityTuple,\n TypedData,\n TypedDataDomain,\n TypedDataParameter,\n TypedDataType,\n} from '../abi.js'\n\n// biome-ignore lint/performance/noBarrelFile: \nexport { BaseError } from '../errors.js'\n\nexport type { Narrow } from '../narrow.js'\nexport { narrow } from '../narrow.js'\n\nexport type {\n Register,\n DefaultRegister,\n ResolvedRegister,\n} from '../register.js'\n\nexport type {\n AbiParameterToPrimitiveType,\n AbiParametersToPrimitiveTypes,\n AbiTypeToPrimitiveType,\n ExtractAbiError,\n ExtractAbiErrorNames,\n ExtractAbiErrors,\n ExtractAbiEvent,\n ExtractAbiEventNames,\n ExtractAbiEvents,\n ExtractAbiFunction,\n ExtractAbiFunctionNames,\n ExtractAbiFunctions,\n IsAbi,\n IsTypedData,\n TypedDataToPrimitiveTypes,\n} from '../utils.js'\n\n////////////////////////////////////////////////////////////////////////////////////////////////////\n// Human-Readable\n\nexport {\n formatAbi,\n type FormatAbi,\n} from '../human-readable/formatAbi.js'\n\nexport {\n formatAbiItem,\n type FormatAbiItem,\n} from '../human-readable/formatAbiItem.js'\n\nexport {\n formatAbiParameter,\n type FormatAbiParameter,\n} from '../human-readable/formatAbiParameter.js'\n\nexport {\n formatAbiParameters,\n type FormatAbiParameters,\n} from '../human-readable/formatAbiParameters.js'\n\nexport { parseAbi, type ParseAbi } from '../human-readable/parseAbi.js'\n\nexport {\n parseAbiItem,\n type ParseAbiItem,\n} from '../human-readable/parseAbiItem.js'\n\nexport {\n parseAbiParameter,\n type ParseAbiParameter,\n} from '../human-readable/parseAbiParameter.js'\n\nexport {\n parseAbiParameters,\n type ParseAbiParameters,\n} from '../human-readable/parseAbiParameters.js'\n\nexport {\n UnknownTypeError,\n InvalidAbiItemError,\n UnknownSolidityTypeError,\n} from '../human-readable/errors/abiItem.js'\n\nexport {\n InvalidAbiTypeParameterError,\n InvalidFunctionModifierError,\n InvalidModifierError,\n SolidityProtectedKeywordError,\n InvalidParameterError,\n InvalidAbiParametersError,\n InvalidAbiParameterError,\n} from '../human-readable/errors/abiParameter.js'\n\nexport {\n InvalidStructSignatureError,\n InvalidSignatureError,\n UnknownSignatureError,\n} from '../human-readable/errors/signature.js'\n\nexport { InvalidParenthesisError } from '../human-readable/errors/splitParameters.js'\n\nexport { CircularReferenceError } from '../human-readable/errors/struct.js'\n", "import type { AbiParameter } from 'abitype'\n\nimport {\n InvalidDefinitionTypeError,\n type InvalidDefinitionTypeErrorType,\n} from '../../errors/abi.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { AbiItem } from '../../types/contract.js'\n\nexport type FormatAbiItemErrorType =\n | FormatAbiParamsErrorType\n | InvalidDefinitionTypeErrorType\n | ErrorType\n\nexport function formatAbiItem(\n abiItem: AbiItem,\n { includeName = false }: { includeName?: boolean | undefined } = {},\n) {\n if (\n abiItem.type !== 'function' &&\n abiItem.type !== 'event' &&\n abiItem.type !== 'error'\n )\n throw new InvalidDefinitionTypeError(abiItem.type)\n\n return `${abiItem.name}(${formatAbiParams(abiItem.inputs, { includeName })})`\n}\n\nexport type FormatAbiParamsErrorType = ErrorType\n\nexport function formatAbiParams(\n params: readonly AbiParameter[] | undefined,\n { includeName = false }: { includeName?: boolean | undefined } = {},\n): string {\n if (!params) return ''\n return params\n .map((param) => formatAbiParam(param, { includeName }))\n .join(includeName ? ', ' : ',')\n}\n\nexport type FormatAbiParamErrorType = ErrorType\n\nfunction formatAbiParam(\n param: AbiParameter,\n { includeName }: { includeName: boolean },\n): string {\n if (param.type.startsWith('tuple')) {\n return `(${formatAbiParams(\n (param as unknown as { components: AbiParameter[] }).components,\n { includeName },\n )})${param.type.slice('tuple'.length)}`\n }\n return param.type + (includeName && param.name ? ` ${param.name}` : '')\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\n\nexport type IsHexErrorType = ErrorType\n\nexport function isHex(\n value: unknown,\n { strict = true }: { strict?: boolean | undefined } = {},\n): value is Hex {\n if (!value) return false\n if (typeof value !== 'string') return false\n return strict ? /^0x[0-9a-fA-F]*$/.test(value) : value.startsWith('0x')\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\n\nimport { type IsHexErrorType, isHex } from './isHex.js'\n\nexport type SizeErrorType = IsHexErrorType | ErrorType\n\n/**\n * @description Retrieves the size of the value (in bytes).\n *\n * @param value The value (hex or byte array) to retrieve the size of.\n * @returns The size of the value (in bytes).\n */\nexport function size(value: Hex | ByteArray) {\n if (isHex(value, { strict: false })) return Math.ceil((value.length - 2) / 2)\n return value.length\n}\n", "export const version = '2.48.8'\n", "import { version } from './version.js'\n\ntype ErrorConfig = {\n getDocsUrl?: ((args: BaseErrorParameters) => string | undefined) | undefined\n version?: string | undefined\n}\n\nlet errorConfig: ErrorConfig = {\n getDocsUrl: ({\n docsBaseUrl,\n docsPath = '',\n docsSlug,\n }: BaseErrorParameters) =>\n docsPath\n ? `${docsBaseUrl ?? 'https://viem.sh'}${docsPath}${\n docsSlug ? `#${docsSlug}` : ''\n }`\n : undefined,\n version: `viem@${version}`,\n}\n\nexport function setErrorConfig(config: ErrorConfig) {\n errorConfig = config\n}\n\ntype BaseErrorParameters = {\n cause?: BaseError | Error | undefined\n details?: string | undefined\n docsBaseUrl?: string | undefined\n docsPath?: string | undefined\n docsSlug?: string | undefined\n metaMessages?: string[] | undefined\n name?: string | undefined\n}\n\nexport type BaseErrorType = BaseError & { name: 'BaseError' }\nexport class BaseError extends Error {\n details: string\n docsPath?: string | undefined\n metaMessages?: string[] | undefined\n shortMessage: string\n version: string\n\n override name = 'BaseError'\n\n constructor(shortMessage: string, args: BaseErrorParameters = {}) {\n const details = (() => {\n if (args.cause instanceof BaseError) return args.cause.details\n if (args.cause?.message) return args.cause.message\n return args.details!\n })()\n const docsPath = (() => {\n if (args.cause instanceof BaseError)\n return args.cause.docsPath || args.docsPath\n return args.docsPath\n })()\n const docsUrl = errorConfig.getDocsUrl?.({ ...args, docsPath })\n\n const message = [\n shortMessage || 'An error occurred.',\n '',\n ...(args.metaMessages ? [...args.metaMessages, ''] : []),\n ...(docsUrl ? [`Docs: ${docsUrl}`] : []),\n ...(details ? [`Details: ${details}`] : []),\n ...(errorConfig.version ? [`Version: ${errorConfig.version}`] : []),\n ].join('\\n')\n\n super(message, args.cause ? { cause: args.cause } : undefined)\n\n this.details = details\n this.docsPath = docsPath\n this.metaMessages = args.metaMessages\n this.name = args.name ?? this.name\n this.shortMessage = shortMessage\n this.version = version\n }\n\n walk(): Error\n walk(fn: (err: unknown) => boolean): Error | null\n walk(fn?: any): any {\n return walk(this, fn)\n }\n}\n\nfunction walk(\n err: unknown,\n fn?: ((err: unknown) => boolean) | undefined,\n): unknown {\n if (fn?.(err)) return err\n if (\n err &&\n typeof err === 'object' &&\n 'cause' in err &&\n err.cause !== undefined\n )\n return walk(err.cause, fn)\n return fn ? null : err\n}\n", "import type { Abi, AbiEvent, AbiParameter } from 'abitype'\n\nimport type { Hex } from '../types/misc.js'\nimport { formatAbiItem, formatAbiParams } from '../utils/abi/formatAbiItem.js'\nimport { size } from '../utils/data/size.js'\n\nimport { BaseError } from './base.js'\n\nexport type AbiConstructorNotFoundErrorType = AbiConstructorNotFoundError & {\n name: 'AbiConstructorNotFoundError'\n}\nexport class AbiConstructorNotFoundError extends BaseError {\n constructor({ docsPath }: { docsPath: string }) {\n super(\n [\n 'A constructor was not found on the ABI.',\n 'Make sure you are using the correct ABI and that the constructor exists on it.',\n ].join('\\n'),\n {\n docsPath,\n name: 'AbiConstructorNotFoundError',\n },\n )\n }\n}\n\nexport type AbiConstructorParamsNotFoundErrorType =\n AbiConstructorParamsNotFoundError & {\n name: 'AbiConstructorParamsNotFoundError'\n }\n\nexport class AbiConstructorParamsNotFoundError extends BaseError {\n constructor({ docsPath }: { docsPath: string }) {\n super(\n [\n 'Constructor arguments were provided (`args`), but a constructor parameters (`inputs`) were not found on the ABI.',\n 'Make sure you are using the correct ABI, and that the `inputs` attribute on the constructor exists.',\n ].join('\\n'),\n {\n docsPath,\n name: 'AbiConstructorParamsNotFoundError',\n },\n )\n }\n}\n\nexport type AbiDecodingDataSizeInvalidErrorType =\n AbiDecodingDataSizeInvalidError & {\n name: 'AbiDecodingDataSizeInvalidError'\n }\nexport class AbiDecodingDataSizeInvalidError extends BaseError {\n constructor({ data, size }: { data: Hex; size: number }) {\n super(\n [\n `Data size of ${size} bytes is invalid.`,\n 'Size must be in increments of 32 bytes (size % 32 === 0).',\n ].join('\\n'),\n {\n metaMessages: [`Data: ${data} (${size} bytes)`],\n name: 'AbiDecodingDataSizeInvalidError',\n },\n )\n }\n}\n\nexport type AbiDecodingDataSizeTooSmallErrorType =\n AbiDecodingDataSizeTooSmallError & {\n name: 'AbiDecodingDataSizeTooSmallError'\n }\nexport class AbiDecodingDataSizeTooSmallError extends BaseError {\n data: Hex\n params: readonly AbiParameter[]\n size: number\n\n constructor({\n data,\n params,\n size,\n }: { data: Hex; params: readonly AbiParameter[]; size: number }) {\n super(\n [`Data size of ${size} bytes is too small for given parameters.`].join(\n '\\n',\n ),\n {\n metaMessages: [\n `Params: (${formatAbiParams(params, { includeName: true })})`,\n `Data: ${data} (${size} bytes)`,\n ],\n name: 'AbiDecodingDataSizeTooSmallError',\n },\n )\n\n this.data = data\n this.params = params\n this.size = size\n }\n}\n\nexport type AbiDecodingZeroDataErrorType = AbiDecodingZeroDataError & {\n name: 'AbiDecodingZeroDataError'\n}\nexport class AbiDecodingZeroDataError extends BaseError {\n constructor({ cause }: { cause?: BaseError | Error | undefined } = {}) {\n super('Cannot decode zero data (\"0x\") with ABI parameters.', {\n name: 'AbiDecodingZeroDataError',\n cause,\n })\n }\n}\n\nexport type AbiEncodingArrayLengthMismatchErrorType =\n AbiEncodingArrayLengthMismatchError & {\n name: 'AbiEncodingArrayLengthMismatchError'\n }\nexport class AbiEncodingArrayLengthMismatchError extends BaseError {\n constructor({\n expectedLength,\n givenLength,\n type,\n }: { expectedLength: number; givenLength: number; type: string }) {\n super(\n [\n `ABI encoding array length mismatch for type ${type}.`,\n `Expected length: ${expectedLength}`,\n `Given length: ${givenLength}`,\n ].join('\\n'),\n { name: 'AbiEncodingArrayLengthMismatchError' },\n )\n }\n}\n\nexport type AbiEncodingBytesSizeMismatchErrorType =\n AbiEncodingBytesSizeMismatchError & {\n name: 'AbiEncodingBytesSizeMismatchError'\n }\nexport class AbiEncodingBytesSizeMismatchError extends BaseError {\n constructor({ expectedSize, value }: { expectedSize: number; value: Hex }) {\n super(\n `Size of bytes \"${value}\" (bytes${size(\n value,\n )}) does not match expected size (bytes${expectedSize}).`,\n { name: 'AbiEncodingBytesSizeMismatchError' },\n )\n }\n}\n\nexport type AbiEncodingLengthMismatchErrorType =\n AbiEncodingLengthMismatchError & {\n name: 'AbiEncodingLengthMismatchError'\n }\nexport class AbiEncodingLengthMismatchError extends BaseError {\n constructor({\n expectedLength,\n givenLength,\n }: { expectedLength: number; givenLength: number }) {\n super(\n [\n 'ABI encoding params/values length mismatch.',\n `Expected length (params): ${expectedLength}`,\n `Given length (values): ${givenLength}`,\n ].join('\\n'),\n { name: 'AbiEncodingLengthMismatchError' },\n )\n }\n}\n\nexport type AbiErrorInputsNotFoundErrorType = AbiErrorInputsNotFoundError & {\n name: 'AbiErrorInputsNotFoundError'\n}\nexport class AbiErrorInputsNotFoundError extends BaseError {\n constructor(errorName: string, { docsPath }: { docsPath: string }) {\n super(\n [\n `Arguments (\\`args\\`) were provided to \"${errorName}\", but \"${errorName}\" on the ABI does not contain any parameters (\\`inputs\\`).`,\n 'Cannot encode error result without knowing what the parameter types are.',\n 'Make sure you are using the correct ABI and that the inputs exist on it.',\n ].join('\\n'),\n {\n docsPath,\n name: 'AbiErrorInputsNotFoundError',\n },\n )\n }\n}\n\nexport type AbiErrorNotFoundErrorType = AbiErrorNotFoundError & {\n name: 'AbiErrorNotFoundError'\n}\nexport class AbiErrorNotFoundError extends BaseError {\n constructor(\n errorName?: string | undefined,\n { docsPath }: { docsPath?: string | undefined } = {},\n ) {\n super(\n [\n `Error ${errorName ? `\"${errorName}\" ` : ''}not found on ABI.`,\n 'Make sure you are using the correct ABI and that the error exists on it.',\n ].join('\\n'),\n {\n docsPath,\n name: 'AbiErrorNotFoundError',\n },\n )\n }\n}\n\nexport type AbiErrorSignatureNotFoundErrorType =\n AbiErrorSignatureNotFoundError & {\n name: 'AbiErrorSignatureNotFoundError'\n }\nexport class AbiErrorSignatureNotFoundError extends BaseError {\n signature: Hex\n\n constructor(\n signature: Hex,\n {\n docsPath,\n cause,\n }: { docsPath: string; cause?: BaseError | Error | undefined },\n ) {\n super(\n [\n `Encoded error signature \"${signature}\" not found on ABI.`,\n 'Make sure you are using the correct ABI and that the error exists on it.',\n `You can look up the decoded signature here: https://4byte.sourcify.dev/?q=${signature}.`,\n ].join('\\n'),\n {\n docsPath,\n name: 'AbiErrorSignatureNotFoundError',\n cause,\n },\n )\n this.signature = signature\n }\n}\n\nexport type AbiEventSignatureEmptyTopicsErrorType =\n AbiEventSignatureEmptyTopicsError & {\n name: 'AbiEventSignatureEmptyTopicsError'\n }\nexport class AbiEventSignatureEmptyTopicsError extends BaseError {\n constructor({ docsPath }: { docsPath: string }) {\n super('Cannot extract event signature from empty topics.', {\n docsPath,\n name: 'AbiEventSignatureEmptyTopicsError',\n })\n }\n}\n\nexport type AbiEventSignatureNotFoundErrorType =\n AbiEventSignatureNotFoundError & {\n name: 'AbiEventSignatureNotFoundError'\n }\nexport class AbiEventSignatureNotFoundError extends BaseError {\n constructor(signature: Hex, { docsPath }: { docsPath: string }) {\n super(\n [\n `Encoded event signature \"${signature}\" not found on ABI.`,\n 'Make sure you are using the correct ABI and that the event exists on it.',\n `You can look up the signature here: https://4byte.sourcify.dev/?q=${signature}.`,\n ].join('\\n'),\n {\n docsPath,\n name: 'AbiEventSignatureNotFoundError',\n },\n )\n }\n}\n\nexport type AbiEventNotFoundErrorType = AbiEventNotFoundError & {\n name: 'AbiEventNotFoundError'\n}\nexport class AbiEventNotFoundError extends BaseError {\n constructor(\n eventName?: string | undefined,\n { docsPath }: { docsPath?: string | undefined } = {},\n ) {\n super(\n [\n `Event ${eventName ? `\"${eventName}\" ` : ''}not found on ABI.`,\n 'Make sure you are using the correct ABI and that the event exists on it.',\n ].join('\\n'),\n {\n docsPath,\n name: 'AbiEventNotFoundError',\n },\n )\n }\n}\n\nexport type AbiFunctionNotFoundErrorType = AbiFunctionNotFoundError & {\n name: 'AbiFunctionNotFoundError'\n}\nexport class AbiFunctionNotFoundError extends BaseError {\n constructor(\n functionName?: string | undefined,\n { docsPath }: { docsPath?: string | undefined } = {},\n ) {\n super(\n [\n `Function ${functionName ? `\"${functionName}\" ` : ''}not found on ABI.`,\n 'Make sure you are using the correct ABI and that the function exists on it.',\n ].join('\\n'),\n {\n docsPath,\n name: 'AbiFunctionNotFoundError',\n },\n )\n }\n}\n\nexport type AbiFunctionOutputsNotFoundErrorType =\n AbiFunctionOutputsNotFoundError & {\n name: 'AbiFunctionOutputsNotFoundError'\n }\nexport class AbiFunctionOutputsNotFoundError extends BaseError {\n constructor(functionName: string, { docsPath }: { docsPath: string }) {\n super(\n [\n `Function \"${functionName}\" does not contain any \\`outputs\\` on ABI.`,\n 'Cannot decode function result without knowing what the parameter types are.',\n 'Make sure you are using the correct ABI and that the function exists on it.',\n ].join('\\n'),\n {\n docsPath,\n name: 'AbiFunctionOutputsNotFoundError',\n },\n )\n }\n}\n\nexport type AbiFunctionSignatureNotFoundErrorType =\n AbiFunctionSignatureNotFoundError & {\n name: 'AbiFunctionSignatureNotFoundError'\n }\nexport class AbiFunctionSignatureNotFoundError extends BaseError {\n constructor(signature: Hex, { docsPath }: { docsPath: string }) {\n super(\n [\n `Encoded function signature \"${signature}\" not found on ABI.`,\n 'Make sure you are using the correct ABI and that the function exists on it.',\n `You can look up the signature here: https://4byte.sourcify.dev/?q=${signature}.`,\n ].join('\\n'),\n {\n docsPath,\n name: 'AbiFunctionSignatureNotFoundError',\n },\n )\n }\n}\n\nexport type AbiItemAmbiguityErrorType = AbiItemAmbiguityError & {\n name: 'AbiItemAmbiguityError'\n}\nexport class AbiItemAmbiguityError extends BaseError {\n constructor(\n x: { abiItem: Abi[number]; type: string },\n y: { abiItem: Abi[number]; type: string },\n ) {\n super('Found ambiguous types in overloaded ABI items.', {\n metaMessages: [\n `\\`${x.type}\\` in \\`${formatAbiItem(x.abiItem)}\\`, and`,\n `\\`${y.type}\\` in \\`${formatAbiItem(y.abiItem)}\\``,\n '',\n 'These types encode differently and cannot be distinguished at runtime.',\n 'Remove one of the ambiguous items in the ABI.',\n ],\n name: 'AbiItemAmbiguityError',\n })\n }\n}\n\nexport type BytesSizeMismatchErrorType = BytesSizeMismatchError & {\n name: 'BytesSizeMismatchError'\n}\nexport class BytesSizeMismatchError extends BaseError {\n constructor({\n expectedSize,\n givenSize,\n }: { expectedSize: number; givenSize: number }) {\n super(`Expected bytes${expectedSize}, got bytes${givenSize}.`, {\n name: 'BytesSizeMismatchError',\n })\n }\n}\n\nexport type DecodeLogDataMismatchErrorType = DecodeLogDataMismatch & {\n name: 'DecodeLogDataMismatch'\n}\nexport class DecodeLogDataMismatch extends BaseError {\n abiItem: AbiEvent\n data: Hex\n params: readonly AbiParameter[]\n size: number\n\n constructor({\n abiItem,\n data,\n params,\n size,\n }: {\n abiItem: AbiEvent\n data: Hex\n params: readonly AbiParameter[]\n size: number\n }) {\n super(\n [\n `Data size of ${size} bytes is too small for non-indexed event parameters.`,\n ].join('\\n'),\n {\n metaMessages: [\n `Params: (${formatAbiParams(params, { includeName: true })})`,\n `Data: ${data} (${size} bytes)`,\n ],\n name: 'DecodeLogDataMismatch',\n },\n )\n\n this.abiItem = abiItem\n this.data = data\n this.params = params\n this.size = size\n }\n}\n\nexport type DecodeLogTopicsMismatchErrorType = DecodeLogTopicsMismatch & {\n name: 'DecodeLogTopicsMismatch'\n}\nexport class DecodeLogTopicsMismatch extends BaseError {\n abiItem: AbiEvent\n\n constructor({\n abiItem,\n param,\n }: {\n abiItem: AbiEvent\n param: AbiParameter & { indexed: boolean }\n }) {\n super(\n [\n `Expected a topic for indexed event parameter${\n param.name ? ` \"${param.name}\"` : ''\n } on event \"${formatAbiItem(abiItem, { includeName: true })}\".`,\n ].join('\\n'),\n { name: 'DecodeLogTopicsMismatch' },\n )\n\n this.abiItem = abiItem\n }\n}\n\nexport type InvalidAbiEncodingTypeErrorType = InvalidAbiEncodingTypeError & {\n name: 'InvalidAbiEncodingTypeError'\n}\nexport class InvalidAbiEncodingTypeError extends BaseError {\n constructor(type: string, { docsPath }: { docsPath: string }) {\n super(\n [\n `Type \"${type}\" is not a valid encoding type.`,\n 'Please provide a valid ABI type.',\n ].join('\\n'),\n { docsPath, name: 'InvalidAbiEncodingType' },\n )\n }\n}\n\nexport type InvalidAbiDecodingTypeErrorType = InvalidAbiDecodingTypeError & {\n name: 'InvalidAbiDecodingTypeError'\n}\nexport class InvalidAbiDecodingTypeError extends BaseError {\n constructor(type: string, { docsPath }: { docsPath: string }) {\n super(\n [\n `Type \"${type}\" is not a valid decoding type.`,\n 'Please provide a valid ABI type.',\n ].join('\\n'),\n { docsPath, name: 'InvalidAbiDecodingType' },\n )\n }\n}\n\nexport type InvalidArrayErrorType = InvalidArrayError & {\n name: 'InvalidArrayError'\n}\nexport class InvalidArrayError extends BaseError {\n constructor(value: unknown) {\n super([`Value \"${value}\" is not a valid array.`].join('\\n'), {\n name: 'InvalidArrayError',\n })\n }\n}\n\nexport type InvalidDefinitionTypeErrorType = InvalidDefinitionTypeError & {\n name: 'InvalidDefinitionTypeError'\n}\nexport class InvalidDefinitionTypeError extends BaseError {\n constructor(type: string) {\n super(\n [\n `\"${type}\" is not a valid definition type.`,\n 'Valid types: \"function\", \"event\", \"error\"',\n ].join('\\n'),\n { name: 'InvalidDefinitionTypeError' },\n )\n }\n}\n\nexport type UnsupportedPackedAbiTypeErrorType = UnsupportedPackedAbiType & {\n name: 'UnsupportedPackedAbiType'\n}\nexport class UnsupportedPackedAbiType extends BaseError {\n constructor(type: unknown) {\n super(`Type \"${type}\" is not supported for packed encoding.`, {\n name: 'UnsupportedPackedAbiType',\n })\n }\n}\n", "import { BaseError } from './base.js'\n\nexport type SliceOffsetOutOfBoundsErrorType = SliceOffsetOutOfBoundsError & {\n name: 'SliceOffsetOutOfBoundsError'\n}\nexport class SliceOffsetOutOfBoundsError extends BaseError {\n constructor({\n offset,\n position,\n size,\n }: { offset: number; position: 'start' | 'end'; size: number }) {\n super(\n `Slice ${\n position === 'start' ? 'starting' : 'ending'\n } at offset \"${offset}\" is out-of-bounds (size: ${size}).`,\n { name: 'SliceOffsetOutOfBoundsError' },\n )\n }\n}\n\nexport type SizeExceedsPaddingSizeErrorType = SizeExceedsPaddingSizeError & {\n name: 'SizeExceedsPaddingSizeError'\n}\nexport class SizeExceedsPaddingSizeError extends BaseError {\n constructor({\n size,\n targetSize,\n type,\n }: {\n size: number\n targetSize: number\n type: 'hex' | 'bytes'\n }) {\n super(\n `${type.charAt(0).toUpperCase()}${type\n .slice(1)\n .toLowerCase()} size (${size}) exceeds padding size (${targetSize}).`,\n { name: 'SizeExceedsPaddingSizeError' },\n )\n }\n}\n\nexport type InvalidBytesLengthErrorType = InvalidBytesLengthError & {\n name: 'InvalidBytesLengthError'\n}\nexport class InvalidBytesLengthError extends BaseError {\n constructor({\n size,\n targetSize,\n type,\n }: {\n size: number\n targetSize: number\n type: 'hex' | 'bytes'\n }) {\n super(\n `${type.charAt(0).toUpperCase()}${type\n .slice(1)\n .toLowerCase()} is expected to be ${targetSize} ${type} long, but is ${size} ${type} long.`,\n { name: 'InvalidBytesLengthError' },\n )\n }\n}\n", "import {\n SizeExceedsPaddingSizeError,\n type SizeExceedsPaddingSizeErrorType,\n} from '../../errors/data.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\n\ntype PadOptions = {\n dir?: 'left' | 'right' | undefined\n size?: number | null | undefined\n}\nexport type PadReturnType = value extends Hex\n ? Hex\n : ByteArray\n\nexport type PadErrorType = PadHexErrorType | PadBytesErrorType | ErrorType\n\nexport function pad(\n hexOrBytes: value,\n { dir, size = 32 }: PadOptions = {},\n): PadReturnType {\n if (typeof hexOrBytes === 'string')\n return padHex(hexOrBytes, { dir, size }) as PadReturnType\n return padBytes(hexOrBytes, { dir, size }) as PadReturnType\n}\n\nexport type PadHexErrorType = SizeExceedsPaddingSizeErrorType | ErrorType\n\nexport function padHex(hex_: Hex, { dir, size = 32 }: PadOptions = {}) {\n if (size === null) return hex_\n const hex = hex_.replace('0x', '')\n if (hex.length > size * 2)\n throw new SizeExceedsPaddingSizeError({\n size: Math.ceil(hex.length / 2),\n targetSize: size,\n type: 'hex',\n })\n\n return `0x${hex[dir === 'right' ? 'padEnd' : 'padStart'](\n size * 2,\n '0',\n )}` as Hex\n}\n\nexport type PadBytesErrorType = SizeExceedsPaddingSizeErrorType | ErrorType\n\nexport function padBytes(\n bytes: ByteArray,\n { dir, size = 32 }: PadOptions = {},\n) {\n if (size === null) return bytes\n if (bytes.length > size)\n throw new SizeExceedsPaddingSizeError({\n size: bytes.length,\n targetSize: size,\n type: 'bytes',\n })\n const paddedBytes = new Uint8Array(size)\n for (let i = 0; i < size; i++) {\n const padEnd = dir === 'right'\n paddedBytes[padEnd ? i : size - i - 1] =\n bytes[padEnd ? i : bytes.length - i - 1]\n }\n return paddedBytes\n}\n", "import type { ByteArray, Hex } from '../types/misc.js'\n\nimport { BaseError } from './base.js'\n\nexport type IntegerOutOfRangeErrorType = IntegerOutOfRangeError & {\n name: 'IntegerOutOfRangeError'\n}\nexport class IntegerOutOfRangeError extends BaseError {\n constructor({\n max,\n min,\n signed,\n size,\n value,\n }: {\n max?: string | undefined\n min: string\n signed?: boolean | undefined\n size?: number | undefined\n value: string\n }) {\n super(\n `Number \"${value}\" is not in safe ${\n size ? `${size * 8}-bit ${signed ? 'signed' : 'unsigned'} ` : ''\n }integer range ${max ? `(${min} to ${max})` : `(above ${min})`}`,\n { name: 'IntegerOutOfRangeError' },\n )\n }\n}\n\nexport type InvalidBytesBooleanErrorType = InvalidBytesBooleanError & {\n name: 'InvalidBytesBooleanError'\n}\nexport class InvalidBytesBooleanError extends BaseError {\n constructor(bytes: ByteArray) {\n super(\n `Bytes value \"${bytes}\" is not a valid boolean. The bytes array must contain a single byte of either a 0 or 1 value.`,\n {\n name: 'InvalidBytesBooleanError',\n },\n )\n }\n}\n\nexport type InvalidHexBooleanErrorType = InvalidHexBooleanError & {\n name: 'InvalidHexBooleanError'\n}\nexport class InvalidHexBooleanError extends BaseError {\n constructor(hex: Hex) {\n super(\n `Hex value \"${hex}\" is not a valid boolean. The hex value must be \"0x0\" (false) or \"0x1\" (true).`,\n { name: 'InvalidHexBooleanError' },\n )\n }\n}\n\nexport type InvalidHexValueErrorType = InvalidHexValueError & {\n name: 'InvalidHexValueError'\n}\nexport class InvalidHexValueError extends BaseError {\n constructor(value: Hex) {\n super(\n `Hex value \"${value}\" is an odd length (${value.length}). It must be an even length.`,\n { name: 'InvalidHexValueError' },\n )\n }\n}\n\nexport type SizeOverflowErrorType = SizeOverflowError & {\n name: 'SizeOverflowError'\n}\nexport class SizeOverflowError extends BaseError {\n constructor({ givenSize, maxSize }: { givenSize: number; maxSize: number }) {\n super(\n `Size cannot exceed ${maxSize} bytes. Given size: ${givenSize} bytes.`,\n { name: 'SizeOverflowError' },\n )\n }\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\n\ntype TrimOptions = {\n dir?: 'left' | 'right' | undefined\n}\nexport type TrimReturnType = value extends Hex\n ? Hex\n : ByteArray\n\nexport type TrimErrorType = ErrorType\n\nexport function trim(\n hexOrBytes: value,\n { dir = 'left' }: TrimOptions = {},\n): TrimReturnType {\n let data: any =\n typeof hexOrBytes === 'string' ? hexOrBytes.replace('0x', '') : hexOrBytes\n\n let sliceLength = 0\n for (let i = 0; i < data.length - 1; i++) {\n if (data[dir === 'left' ? i : data.length - i - 1].toString() === '0')\n sliceLength++\n else break\n }\n data =\n dir === 'left'\n ? data.slice(sliceLength)\n : data.slice(0, data.length - sliceLength)\n\n if (typeof hexOrBytes === 'string') {\n if (data.length === 1 && dir === 'right') data = `${data}0`\n return `0x${\n data.length % 2 === 1 ? `0${data}` : data\n }` as TrimReturnType\n }\n return data as TrimReturnType\n}\n", "import {\n IntegerOutOfRangeError,\n type IntegerOutOfRangeErrorType,\n InvalidHexBooleanError,\n type InvalidHexBooleanErrorType,\n SizeOverflowError,\n type SizeOverflowErrorType,\n} from '../../errors/encoding.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type SizeErrorType, size as size_ } from '../data/size.js'\nimport { type TrimErrorType, trim } from '../data/trim.js'\n\nimport { type HexToBytesErrorType, hexToBytes } from './toBytes.js'\n\nexport type AssertSizeErrorType =\n | SizeOverflowErrorType\n | SizeErrorType\n | ErrorType\n\nexport function assertSize(\n hexOrBytes: Hex | ByteArray,\n { size }: { size: number },\n): void {\n if (size_(hexOrBytes) > size)\n throw new SizeOverflowError({\n givenSize: size_(hexOrBytes),\n maxSize: size,\n })\n}\n\nexport type FromHexParameters<\n to extends 'string' | 'bigint' | 'number' | 'bytes' | 'boolean',\n> =\n | to\n | {\n /** Size (in bytes) of the hex value. */\n size?: number | undefined\n /** Type to convert to. */\n to: to\n }\n\nexport type FromHexReturnType = to extends 'string'\n ? string\n : to extends 'bigint'\n ? bigint\n : to extends 'number'\n ? number\n : to extends 'bytes'\n ? ByteArray\n : to extends 'boolean'\n ? boolean\n : never\n\nexport type FromHexErrorType =\n | HexToNumberErrorType\n | HexToBigIntErrorType\n | HexToBoolErrorType\n | HexToStringErrorType\n | HexToBytesErrorType\n | ErrorType\n\n/**\n * Decodes a hex string into a string, number, bigint, boolean, or byte array.\n *\n * - Docs: https://viem.sh/docs/utilities/fromHex\n * - Example: https://viem.sh/docs/utilities/fromHex#usage\n *\n * @param hex Hex string to decode.\n * @param toOrOpts Type to convert to or options.\n * @returns Decoded value.\n *\n * @example\n * import { fromHex } from 'viem'\n * const data = fromHex('0x1a4', 'number')\n * // 420\n *\n * @example\n * import { fromHex } from 'viem'\n * const data = fromHex('0x48656c6c6f20576f726c6421', 'string')\n * // 'Hello world'\n *\n * @example\n * import { fromHex } from 'viem'\n * const data = fromHex('0x48656c6c6f20576f726c64210000000000000000000000000000000000000000', {\n * size: 32,\n * to: 'string'\n * })\n * // 'Hello world'\n */\nexport function fromHex<\n to extends 'string' | 'bigint' | 'number' | 'bytes' | 'boolean',\n>(hex: Hex, toOrOpts: FromHexParameters): FromHexReturnType {\n const opts = typeof toOrOpts === 'string' ? { to: toOrOpts } : toOrOpts\n const to = opts.to\n\n if (to === 'number') return hexToNumber(hex, opts) as FromHexReturnType\n if (to === 'bigint') return hexToBigInt(hex, opts) as FromHexReturnType\n if (to === 'string') return hexToString(hex, opts) as FromHexReturnType\n if (to === 'boolean') return hexToBool(hex, opts) as FromHexReturnType\n return hexToBytes(hex, opts) as FromHexReturnType\n}\n\nexport type HexToBigIntOpts = {\n /** Whether or not the number of a signed representation. */\n signed?: boolean | undefined\n /** Size (in bytes) of the hex value. */\n size?: number | undefined\n}\n\nexport type HexToBigIntErrorType = AssertSizeErrorType | ErrorType\n\n/**\n * Decodes a hex value into a bigint.\n *\n * - Docs: https://viem.sh/docs/utilities/fromHex#hextobigint\n *\n * @param hex Hex value to decode.\n * @param opts Options.\n * @returns BigInt value.\n *\n * @example\n * import { hexToBigInt } from 'viem'\n * const data = hexToBigInt('0x1a4', { signed: true })\n * // 420n\n *\n * @example\n * import { hexToBigInt } from 'viem'\n * const data = hexToBigInt('0x00000000000000000000000000000000000000000000000000000000000001a4', { size: 32 })\n * // 420n\n */\nexport function hexToBigInt(hex: Hex, opts: HexToBigIntOpts = {}): bigint {\n const { signed } = opts\n\n if (opts.size) assertSize(hex, { size: opts.size })\n\n const value = BigInt(hex)\n if (!signed) return value\n\n const size = (hex.length - 2) / 2\n const max = (1n << (BigInt(size) * 8n - 1n)) - 1n\n if (value <= max) return value\n\n return value - BigInt(`0x${'f'.padStart(size * 2, 'f')}`) - 1n\n}\n\nexport type HexToBoolOpts = {\n /** Size (in bytes) of the hex value. */\n size?: number | undefined\n}\n\nexport type HexToBoolErrorType =\n | AssertSizeErrorType\n | InvalidHexBooleanErrorType\n | TrimErrorType\n | ErrorType\n\n/**\n * Decodes a hex value into a boolean.\n *\n * - Docs: https://viem.sh/docs/utilities/fromHex#hextobool\n *\n * @param hex Hex value to decode.\n * @param opts Options.\n * @returns Boolean value.\n *\n * @example\n * import { hexToBool } from 'viem'\n * const data = hexToBool('0x01')\n * // true\n *\n * @example\n * import { hexToBool } from 'viem'\n * const data = hexToBool('0x0000000000000000000000000000000000000000000000000000000000000001', { size: 32 })\n * // true\n */\nexport function hexToBool(hex_: Hex, opts: HexToBoolOpts = {}): boolean {\n let hex = hex_\n if (opts.size) {\n assertSize(hex, { size: opts.size })\n hex = trim(hex)\n }\n if (trim(hex) === '0x00') return false\n if (trim(hex) === '0x01') return true\n throw new InvalidHexBooleanError(hex)\n}\n\nexport type HexToNumberOpts = HexToBigIntOpts\n\nexport type HexToNumberErrorType =\n | HexToBigIntErrorType\n | IntegerOutOfRangeErrorType\n | ErrorType\n\n/**\n * Decodes a hex string into a number.\n *\n * - Docs: https://viem.sh/docs/utilities/fromHex#hextonumber\n *\n * @param hex Hex value to decode.\n * @param opts Options.\n * @returns Number value.\n *\n * @example\n * import { hexToNumber } from 'viem'\n * const data = hexToNumber('0x1a4')\n * // 420\n *\n * @example\n * import { hexToNumber } from 'viem'\n * const data = hexToBigInt('0x00000000000000000000000000000000000000000000000000000000000001a4', { size: 32 })\n * // 420\n */\nexport function hexToNumber(hex: Hex, opts: HexToNumberOpts = {}): number {\n const value = hexToBigInt(hex, opts)\n const number = Number(value)\n if (!Number.isSafeInteger(number))\n throw new IntegerOutOfRangeError({\n max: `${Number.MAX_SAFE_INTEGER}`,\n min: `${Number.MIN_SAFE_INTEGER}`,\n signed: opts.signed,\n size: opts.size,\n value: `${value}n`,\n })\n return number\n}\n\nexport type HexToStringOpts = {\n /** Size (in bytes) of the hex value. */\n size?: number | undefined\n}\n\nexport type HexToStringErrorType =\n | AssertSizeErrorType\n | HexToBytesErrorType\n | TrimErrorType\n | ErrorType\n\n/**\n * Decodes a hex value into a UTF-8 string.\n *\n * - Docs: https://viem.sh/docs/utilities/fromHex#hextostring\n *\n * @param hex Hex value to decode.\n * @param opts Options.\n * @returns String value.\n *\n * @example\n * import { hexToString } from 'viem'\n * const data = hexToString('0x48656c6c6f20576f726c6421')\n * // 'Hello world!'\n *\n * @example\n * import { hexToString } from 'viem'\n * const data = hexToString('0x48656c6c6f20576f726c64210000000000000000000000000000000000000000', {\n * size: 32,\n * })\n * // 'Hello world'\n */\nexport function hexToString(hex: Hex, opts: HexToStringOpts = {}): string {\n let bytes = hexToBytes(hex)\n if (opts.size) {\n assertSize(bytes, { size: opts.size })\n bytes = trim(bytes, { dir: 'right' })\n }\n return new TextDecoder().decode(bytes)\n}\n", "import {\n IntegerOutOfRangeError,\n type IntegerOutOfRangeErrorType,\n} from '../../errors/encoding.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type PadErrorType, pad } from '../data/pad.js'\n\nimport { type AssertSizeErrorType, assertSize } from './fromHex.js'\n\nconst hexes = /*#__PURE__*/ Array.from({ length: 256 }, (_v, i) =>\n i.toString(16).padStart(2, '0'),\n)\n\nexport type ToHexParameters = {\n /** The size (in bytes) of the output hex value. */\n size?: number | undefined\n}\n\nexport type ToHexErrorType =\n | BoolToHexErrorType\n | BytesToHexErrorType\n | NumberToHexErrorType\n | StringToHexErrorType\n | ErrorType\n\n/**\n * Encodes a string, number, bigint, or ByteArray into a hex string\n *\n * - Docs: https://viem.sh/docs/utilities/toHex\n * - Example: https://viem.sh/docs/utilities/toHex#usage\n *\n * @param value Value to encode.\n * @param opts Options.\n * @returns Hex value.\n *\n * @example\n * import { toHex } from 'viem'\n * const data = toHex('Hello world')\n * // '0x48656c6c6f20776f726c6421'\n *\n * @example\n * import { toHex } from 'viem'\n * const data = toHex(420)\n * // '0x1a4'\n *\n * @example\n * import { toHex } from 'viem'\n * const data = toHex('Hello world', { size: 32 })\n * // '0x48656c6c6f20776f726c64210000000000000000000000000000000000000000'\n */\nexport function toHex(\n value: string | number | bigint | boolean | ByteArray,\n opts: ToHexParameters = {},\n): Hex {\n if (typeof value === 'number' || typeof value === 'bigint')\n return numberToHex(value, opts)\n if (typeof value === 'string') {\n return stringToHex(value, opts)\n }\n if (typeof value === 'boolean') return boolToHex(value, opts)\n return bytesToHex(value, opts)\n}\n\nexport type BoolToHexOpts = {\n /** The size (in bytes) of the output hex value. */\n size?: number | undefined\n}\n\nexport type BoolToHexErrorType = AssertSizeErrorType | PadErrorType | ErrorType\n\n/**\n * Encodes a boolean into a hex string\n *\n * - Docs: https://viem.sh/docs/utilities/toHex#booltohex\n *\n * @param value Value to encode.\n * @param opts Options.\n * @returns Hex value.\n *\n * @example\n * import { boolToHex } from 'viem'\n * const data = boolToHex(true)\n * // '0x1'\n *\n * @example\n * import { boolToHex } from 'viem'\n * const data = boolToHex(false)\n * // '0x0'\n *\n * @example\n * import { boolToHex } from 'viem'\n * const data = boolToHex(true, { size: 32 })\n * // '0x0000000000000000000000000000000000000000000000000000000000000001'\n */\nexport function boolToHex(value: boolean, opts: BoolToHexOpts = {}): Hex {\n const hex: Hex = `0x${Number(value)}`\n if (typeof opts.size === 'number') {\n assertSize(hex, { size: opts.size })\n return pad(hex, { size: opts.size })\n }\n return hex\n}\n\nexport type BytesToHexOpts = {\n /** The size (in bytes) of the output hex value. */\n size?: number | undefined\n}\n\nexport type BytesToHexErrorType = AssertSizeErrorType | PadErrorType | ErrorType\n\n/**\n * Encodes a bytes array into a hex string\n *\n * - Docs: https://viem.sh/docs/utilities/toHex#bytestohex\n *\n * @param value Value to encode.\n * @param opts Options.\n * @returns Hex value.\n *\n * @example\n * import { bytesToHex } from 'viem'\n * const data = bytesToHex(Uint8Array.from([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33])\n * // '0x48656c6c6f20576f726c6421'\n *\n * @example\n * import { bytesToHex } from 'viem'\n * const data = bytesToHex(Uint8Array.from([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]), { size: 32 })\n * // '0x48656c6c6f20576f726c64210000000000000000000000000000000000000000'\n */\nexport function bytesToHex(value: ByteArray, opts: BytesToHexOpts = {}): Hex {\n let string = ''\n for (let i = 0; i < value.length; i++) {\n string += hexes[value[i]]\n }\n const hex = `0x${string}` as const\n\n if (typeof opts.size === 'number') {\n assertSize(hex, { size: opts.size })\n return pad(hex, { dir: 'right', size: opts.size })\n }\n return hex\n}\n\nexport type NumberToHexOpts =\n | {\n /** Whether or not the number of a signed representation. */\n signed?: boolean | undefined\n /** The size (in bytes) of the output hex value. */\n size: number\n }\n | {\n signed?: undefined\n /** The size (in bytes) of the output hex value. */\n size?: number | undefined\n }\n\nexport type NumberToHexErrorType =\n | IntegerOutOfRangeErrorType\n | PadErrorType\n | ErrorType\n\n/**\n * Encodes a number or bigint into a hex string\n *\n * - Docs: https://viem.sh/docs/utilities/toHex#numbertohex\n *\n * @param value Value to encode.\n * @param opts Options.\n * @returns Hex value.\n *\n * @example\n * import { numberToHex } from 'viem'\n * const data = numberToHex(420)\n * // '0x1a4'\n *\n * @example\n * import { numberToHex } from 'viem'\n * const data = numberToHex(420, { size: 32 })\n * // '0x00000000000000000000000000000000000000000000000000000000000001a4'\n */\nexport function numberToHex(\n value_: number | bigint,\n opts: NumberToHexOpts = {},\n): Hex {\n const { signed, size } = opts\n\n const value = BigInt(value_)\n\n let maxValue: bigint | number | undefined\n if (size) {\n if (signed) maxValue = (1n << (BigInt(size) * 8n - 1n)) - 1n\n else maxValue = 2n ** (BigInt(size) * 8n) - 1n\n } else if (typeof value_ === 'number') {\n maxValue = BigInt(Number.MAX_SAFE_INTEGER)\n }\n\n const minValue = typeof maxValue === 'bigint' && signed ? -maxValue - 1n : 0\n\n if ((maxValue && value > maxValue) || value < minValue) {\n const suffix = typeof value_ === 'bigint' ? 'n' : ''\n throw new IntegerOutOfRangeError({\n max: maxValue ? `${maxValue}${suffix}` : undefined,\n min: `${minValue}${suffix}`,\n signed,\n size,\n value: `${value_}${suffix}`,\n })\n }\n\n const hex = `0x${(\n signed && value < 0 ? (1n << BigInt(size * 8)) + BigInt(value) : value\n ).toString(16)}` as Hex\n if (size) return pad(hex, { size }) as Hex\n return hex\n}\n\nexport type StringToHexOpts = {\n /** The size (in bytes) of the output hex value. */\n size?: number | undefined\n}\n\nexport type StringToHexErrorType = BytesToHexErrorType | ErrorType\n\nconst encoder = /*#__PURE__*/ new TextEncoder()\n\n/**\n * Encodes a UTF-8 string into a hex string\n *\n * - Docs: https://viem.sh/docs/utilities/toHex#stringtohex\n *\n * @param value Value to encode.\n * @param opts Options.\n * @returns Hex value.\n *\n * @example\n * import { stringToHex } from 'viem'\n * const data = stringToHex('Hello World!')\n * // '0x48656c6c6f20576f726c6421'\n *\n * @example\n * import { stringToHex } from 'viem'\n * const data = stringToHex('Hello World!', { size: 32 })\n * // '0x48656c6c6f20576f726c64210000000000000000000000000000000000000000'\n */\nexport function stringToHex(value_: string, opts: StringToHexOpts = {}): Hex {\n const value = encoder.encode(value_)\n return bytesToHex(value, opts)\n}\n", "import { BaseError } from '../../errors/base.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type IsHexErrorType, isHex } from '../data/isHex.js'\nimport { type PadErrorType, pad } from '../data/pad.js'\n\nimport { type AssertSizeErrorType, assertSize } from './fromHex.js'\nimport {\n type NumberToHexErrorType,\n type NumberToHexOpts,\n numberToHex,\n} from './toHex.js'\n\nconst encoder = /*#__PURE__*/ new TextEncoder()\n\nexport type ToBytesParameters = {\n /** Size of the output bytes. */\n size?: number | undefined\n}\n\nexport type ToBytesErrorType =\n | NumberToBytesErrorType\n | BoolToBytesErrorType\n | HexToBytesErrorType\n | StringToBytesErrorType\n | IsHexErrorType\n | ErrorType\n\n/**\n * Encodes a UTF-8 string, hex value, bigint, number or boolean to a byte array.\n *\n * - Docs: https://viem.sh/docs/utilities/toBytes\n * - Example: https://viem.sh/docs/utilities/toBytes#usage\n *\n * @param value Value to encode.\n * @param opts Options.\n * @returns Byte array value.\n *\n * @example\n * import { toBytes } from 'viem'\n * const data = toBytes('Hello world')\n * // Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33])\n *\n * @example\n * import { toBytes } from 'viem'\n * const data = toBytes(420)\n * // Uint8Array([1, 164])\n *\n * @example\n * import { toBytes } from 'viem'\n * const data = toBytes(420, { size: 4 })\n * // Uint8Array([0, 0, 1, 164])\n */\nexport function toBytes(\n value: string | bigint | number | boolean | Hex,\n opts: ToBytesParameters = {},\n): ByteArray {\n if (typeof value === 'number' || typeof value === 'bigint')\n return numberToBytes(value, opts)\n if (typeof value === 'boolean') return boolToBytes(value, opts)\n if (isHex(value)) return hexToBytes(value, opts)\n return stringToBytes(value, opts)\n}\n\nexport type BoolToBytesOpts = {\n /** Size of the output bytes. */\n size?: number | undefined\n}\n\nexport type BoolToBytesErrorType =\n | AssertSizeErrorType\n | PadErrorType\n | ErrorType\n\n/**\n * Encodes a boolean into a byte array.\n *\n * - Docs: https://viem.sh/docs/utilities/toBytes#booltobytes\n *\n * @param value Boolean value to encode.\n * @param opts Options.\n * @returns Byte array value.\n *\n * @example\n * import { boolToBytes } from 'viem'\n * const data = boolToBytes(true)\n * // Uint8Array([1])\n *\n * @example\n * import { boolToBytes } from 'viem'\n * const data = boolToBytes(true, { size: 32 })\n * // Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1])\n */\nexport function boolToBytes(value: boolean, opts: BoolToBytesOpts = {}) {\n const bytes = new Uint8Array(1)\n bytes[0] = Number(value)\n if (typeof opts.size === 'number') {\n assertSize(bytes, { size: opts.size })\n return pad(bytes, { size: opts.size })\n }\n return bytes\n}\n\n// We use very optimized technique to convert hex string to byte array\nconst charCodeMap = {\n zero: 48,\n nine: 57,\n A: 65,\n F: 70,\n a: 97,\n f: 102,\n} as const\n\nfunction charCodeToBase16(char: number) {\n if (char >= charCodeMap.zero && char <= charCodeMap.nine)\n return char - charCodeMap.zero\n if (char >= charCodeMap.A && char <= charCodeMap.F)\n return char - (charCodeMap.A - 10)\n if (char >= charCodeMap.a && char <= charCodeMap.f)\n return char - (charCodeMap.a - 10)\n return undefined\n}\n\nexport type HexToBytesOpts = {\n /** Size of the output bytes. */\n size?: number | undefined\n}\n\nexport type HexToBytesErrorType = AssertSizeErrorType | PadErrorType | ErrorType\n\n/**\n * Encodes a hex string into a byte array.\n *\n * - Docs: https://viem.sh/docs/utilities/toBytes#hextobytes\n *\n * @param hex Hex string to encode.\n * @param opts Options.\n * @returns Byte array value.\n *\n * @example\n * import { hexToBytes } from 'viem'\n * const data = hexToBytes('0x48656c6c6f20776f726c6421')\n * // Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33])\n *\n * @example\n * import { hexToBytes } from 'viem'\n * const data = hexToBytes('0x48656c6c6f20776f726c6421', { size: 32 })\n * // Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])\n */\nexport function hexToBytes(hex_: Hex, opts: HexToBytesOpts = {}): ByteArray {\n let hex = hex_\n if (opts.size) {\n assertSize(hex, { size: opts.size })\n hex = pad(hex, { dir: 'right', size: opts.size })\n }\n\n let hexString = hex.slice(2) as string\n if (hexString.length % 2) hexString = `0${hexString}`\n\n const length = hexString.length / 2\n const bytes = new Uint8Array(length)\n for (let index = 0, j = 0; index < length; index++) {\n const nibbleLeft = charCodeToBase16(hexString.charCodeAt(j++))\n const nibbleRight = charCodeToBase16(hexString.charCodeAt(j++))\n if (nibbleLeft === undefined || nibbleRight === undefined) {\n throw new BaseError(\n `Invalid byte sequence (\"${hexString[j - 2]}${\n hexString[j - 1]\n }\" in \"${hexString}\").`,\n )\n }\n bytes[index] = nibbleLeft * 16 + nibbleRight\n }\n return bytes\n}\n\nexport type NumberToBytesErrorType =\n | NumberToHexErrorType\n | HexToBytesErrorType\n | ErrorType\n\n/**\n * Encodes a number into a byte array.\n *\n * - Docs: https://viem.sh/docs/utilities/toBytes#numbertobytes\n *\n * @param value Number to encode.\n * @param opts Options.\n * @returns Byte array value.\n *\n * @example\n * import { numberToBytes } from 'viem'\n * const data = numberToBytes(420)\n * // Uint8Array([1, 164])\n *\n * @example\n * import { numberToBytes } from 'viem'\n * const data = numberToBytes(420, { size: 4 })\n * // Uint8Array([0, 0, 1, 164])\n */\nexport function numberToBytes(\n value: bigint | number,\n opts?: NumberToHexOpts | undefined,\n) {\n const hex = numberToHex(value, opts)\n return hexToBytes(hex)\n}\n\nexport type StringToBytesOpts = {\n /** Size of the output bytes. */\n size?: number | undefined\n}\n\nexport type StringToBytesErrorType =\n | AssertSizeErrorType\n | PadErrorType\n | ErrorType\n\n/**\n * Encodes a UTF-8 string into a byte array.\n *\n * - Docs: https://viem.sh/docs/utilities/toBytes#stringtobytes\n *\n * @param value String to encode.\n * @param opts Options.\n * @returns Byte array value.\n *\n * @example\n * import { stringToBytes } from 'viem'\n * const data = stringToBytes('Hello world!')\n * // Uint8Array([72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 33])\n *\n * @example\n * import { stringToBytes } from 'viem'\n * const data = stringToBytes('Hello world!', { size: 32 })\n * // Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])\n */\nexport function stringToBytes(\n value: string,\n opts: StringToBytesOpts = {},\n): ByteArray {\n const bytes = encoder.encode(value)\n if (typeof opts.size === 'number') {\n assertSize(bytes, { size: opts.size })\n return pad(bytes, { dir: 'right', size: opts.size })\n }\n return bytes\n}\n", "/**\n * Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.\n * @todo re-check https://issues.chromium.org/issues/42212588\n * @module\n */\nconst U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n\nfunction fromBig(\n n: bigint,\n le = false\n): {\n h: number;\n l: number;\n} {\n if (le) return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\n\nfunction split(lst: bigint[], le = false): Uint32Array[] {\n const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for (let i = 0; i < len; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\n\nconst toBig = (h: number, l: number): bigint => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h: number, _l: number, s: number): number => h >>> s;\nconst shrSL = (h: number, l: number, s: number): number => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h: number, l: number, s: number): number => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h: number, l: number, s: number): number => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h: number, l: number, s: number): number => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h: number, l: number, s: number): number => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h: number, l: number): number => l;\nconst rotr32L = (h: number, _l: number): number => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h: number, l: number, s: number): number => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h: number, l: number, s: number): number => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h: number, l: number, s: number): number => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h: number, l: number, s: number): number => (h << (s - 32)) | (l >>> (64 - s));\n\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(\n Ah: number,\n Al: number,\n Bh: number,\n Bl: number\n): {\n h: number;\n l: number;\n} {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al: number, Bl: number, Cl: number): number => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low: number, Ah: number, Bh: number, Ch: number): number =>\n (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al: number, Bl: number, Cl: number, Dl: number): number =>\n (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number): number =>\n (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al: number, Bl: number, Cl: number, Dl: number, El: number): number =>\n (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number): number =>\n (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n\n// prettier-ignore\nexport {\n add, add3H, add3L, add4H, add4L, add5H, add5L, fromBig, rotlBH, rotlBL, rotlSH, rotlSL, rotr32H, rotr32L, rotrBH, rotrBL, rotrSH, rotrSL, shrSH, shrSL, split, toBig\n};\n// prettier-ignore\nconst u64: { fromBig: typeof fromBig; split: typeof split; toBig: (h: number, l: number) => bigint; shrSH: (h: number, _l: number, s: number) => number; shrSL: (h: number, l: number, s: number) => number; rotrSH: (h: number, l: number, s: number) => number; rotrSL: (h: number, l: number, s: number) => number; rotrBH: (h: number, l: number, s: number) => number; rotrBL: (h: number, l: number, s: number) => number; rotr32H: (_h: number, l: number) => number; rotr32L: (h: number, _l: number) => number; rotlSH: (h: number, l: number, s: number) => number; rotlSL: (h: number, l: number, s: number) => number; rotlBH: (h: number, l: number, s: number) => number; rotlBL: (h: number, l: number, s: number) => number; add: typeof add; add3L: (Al: number, Bl: number, Cl: number) => number; add3H: (low: number, Ah: number, Bh: number, Ch: number) => number; add4L: (Al: number, Bl: number, Cl: number, Dl: number) => number; add4H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number) => number; add5H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number) => number; add5L: (Al: number, Bl: number, Cl: number, Dl: number, El: number) => number; } = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n", "/**\n * Internal webcrypto alias.\n * We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n * See utils.ts for details.\n * @module\n */\ndeclare const globalThis: Record | undefined;\nexport const crypto: any =\n typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\n", "/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\n\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nexport function isBytes(a: unknown): a is Uint8Array {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n\n/** Asserts something is positive integer. */\nexport function anumber(n: number): void {\n if (!Number.isSafeInteger(n) || n < 0) throw new Error('positive integer expected, got ' + n);\n}\n\n/** Asserts something is Uint8Array. */\nexport function abytes(b: Uint8Array | undefined, ...lengths: number[]): void {\n if (!isBytes(b)) throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\n\n/** Asserts something is hash */\nexport function ahash(h: IHash): void {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash should be wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n\n/** Asserts a hash instance has not been destroyed / finished */\nexport function aexists(instance: any, checkFinished = true): void {\n if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\n\n/** Asserts output is properly-sized byte array */\nexport function aoutput(out: any, instance: any): void {\n abytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('digestInto() expects output buffer of length at least ' + min);\n }\n}\n\n/** Generic type encompassing 8/16/32-byte arrays - but not 64-byte. */\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n/** Cast u8 / u16 / u32 to u8. */\nexport function u8(arr: TypedArray): Uint8Array {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** Cast u8 / u16 / u32 to u32. */\nexport function u32(arr: TypedArray): Uint32Array {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nexport function clean(...arrays: TypedArray[]): void {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n\n/** Create DataView of an array for easy byte-level manipulation. */\nexport function createView(arr: TypedArray): DataView {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** The rotate right (circular right shift) operation for uint32 */\nexport function rotr(word: number, shift: number): number {\n return (word << (32 - shift)) | (word >>> shift);\n}\n\n/** The rotate left (circular left shift) operation for uint32 */\nexport function rotl(word: number, shift: number): number {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexport const isLE: boolean = /* @__PURE__ */ (() =>\n new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n\n/** The byte swap operation for uint32 */\nexport function byteSwap(word: number): number {\n return (\n ((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff)\n );\n}\n/** Conditionally byte swap if on a big-endian platform */\nexport const swap8IfBE: (n: number) => number = isLE\n ? (n: number) => n\n : (n: number) => byteSwap(n);\n\n/** @deprecated */\nexport const byteSwapIfBE: typeof swap8IfBE = swap8IfBE;\n/** In place byte swap for Uint32Array */\nexport function byteSwap32(arr: Uint32Array): Uint32Array {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\n\nexport const swap32IfBE: (u: Uint32Array) => Uint32Array = isLE\n ? (u: Uint32Array) => u\n : byteSwap32;\n\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin: boolean = /* @__PURE__ */ (() =>\n // @ts-ignore\n typeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n i.toString(16).padStart(2, '0')\n);\n\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin) return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 } as const;\nfunction asciiToBase16(ch: number): number | undefined {\n if (ch >= asciis._0 && ch <= asciis._9) return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F) return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f) return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin) return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2) throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nexport const nextTick = async (): Promise => {};\n\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nexport async function asyncLoop(\n iters: number,\n tick: number,\n cb: (i: number) => void\n): Promise {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick) continue;\n await nextTick();\n ts += diff;\n }\n}\n\n// Global symbols, but ts doesn't see them: https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\ndeclare const TextDecoder: any;\n\n/**\n * Converts string to bytes using UTF8 encoding.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n if (typeof str !== 'string') throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n/**\n * Converts bytes to string using UTF8 encoding.\n * @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'\n */\nexport function bytesToUtf8(bytes: Uint8Array): string {\n return new TextDecoder().decode(bytes);\n}\n\n/** Accepted input of hash functions. Strings are converted to byte arrays. */\nexport type Input = string | Uint8Array;\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data: Input): Uint8Array {\n if (typeof data === 'string') data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n\n/** KDFs can accept string or Uint8Array for user convenience. */\nexport type KDFInput = string | Uint8Array;\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nexport function kdfInputToBytes(data: KDFInput): Uint8Array {\n if (typeof data === 'string') data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n\n/** Copies several Uint8Arrays into one. */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\n\ntype EmptyObj = {};\nexport function checkOpts(\n defaults: T1,\n opts?: T2\n): T1 & T2 {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged as T1 & T2;\n}\n\n/** Hash interface. */\nexport type IHash = {\n (data: Uint8Array): Uint8Array;\n blockLen: number;\n outputLen: number;\n create: any;\n};\n\n/** For runtime check if class implements interface */\nexport abstract class Hash> {\n abstract blockLen: number; // Bytes per block\n abstract outputLen: number; // Bytes in output\n abstract update(buf: Input): this;\n // Writes digest into buf\n abstract digestInto(buf: Uint8Array): void;\n abstract digest(): Uint8Array;\n /**\n * Resets internal state. Makes Hash instance unusable.\n * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n * by user, they will need to manually call `destroy()` when zeroing is necessary.\n */\n abstract destroy(): void;\n /**\n * Clones hash instance. Unsafe: doesn't check whether `to` is valid. Can be used as `clone()`\n * when no options are passed.\n * Reasons to use `_cloneInto` instead of clone: 1) performance 2) reuse instance => all internal\n * buffers are overwritten => causes buffer overwrite which is used for digest in some cases.\n * There are no guarantees for clean-up because it's impossible in JS.\n */\n abstract _cloneInto(to?: T): T;\n // Safe version that clones internal state\n abstract clone(): T;\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF> = Hash & {\n xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\n/** Hash function */\nexport type CHash = ReturnType;\n/** Hash function with output */\nexport type CHashO = ReturnType;\n/** XOF with output */\nexport type CHashXO = ReturnType;\n\n/** Wraps hash function, creating an interface on top of it */\nexport function createHasher>(\n hashCons: () => Hash\n): {\n (msg: Input): Uint8Array;\n outputLen: number;\n blockLen: number;\n create(): Hash;\n} {\n const hashC = (msg: Input): Uint8Array => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\n\nexport function createOptHasher, T extends Object>(\n hashCons: (opts?: T) => Hash\n): {\n (msg: Input, opts?: T): Uint8Array;\n outputLen: number;\n blockLen: number;\n create(opts?: T): Hash;\n} {\n const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({} as T);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts?: T) => hashCons(opts);\n return hashC;\n}\n\nexport function createXOFer, T extends Object>(\n hashCons: (opts?: T) => HashXOF\n): {\n (msg: Input, opts?: T): Uint8Array;\n outputLen: number;\n blockLen: number;\n create(opts?: T): HashXOF;\n} {\n const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({} as T);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts?: T) => hashCons(opts);\n return hashC;\n}\nexport const wrapConstructor: typeof createHasher = createHasher;\nexport const wrapConstructorWithOpts: typeof createOptHasher = createOptHasher;\nexport const wrapXOFConstructorWithOpts: typeof createXOFer = createXOFer;\n\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n // Legacy Node.js compatibility\n if (crypto && typeof crypto.randomBytes === 'function') {\n return Uint8Array.from(crypto.randomBytes(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n", "/**\n * SHA3 (keccak) hash function, based on a new \"Sponge function\" design.\n * Different from older hashes, the internal state is bigger than output size.\n *\n * Check out [FIPS-202](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf),\n * [Website](https://keccak.team/keccak.html),\n * [the differences between SHA-3 and Keccak](https://crypto.stackexchange.com/questions/15727/what-are-the-key-differences-between-the-draft-sha-3-standard-and-the-keccak-sub).\n *\n * Check out `sha3-addons` module for cSHAKE, k12, and others.\n * @module\n */\nimport { rotlBH, rotlBL, rotlSH, rotlSL, split } from './_u64.ts';\n// prettier-ignore\nimport {\n abytes, aexists, anumber, aoutput,\n clean, createHasher, createXOFer, Hash,\n swap32IfBE,\n toBytes, u32,\n type CHash, type CHashXO, type HashXOF, type Input\n} from './utils.ts';\n\n// No __PURE__ annotations in sha3 header:\n// EVERYTHING is in fact used on every export.\n// Various per round constants calculations\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _7n = BigInt(7);\nconst _256n = BigInt(256);\nconst _0x71n = BigInt(0x71);\nconst SHA3_PI: number[] = [];\nconst SHA3_ROTL: number[] = [];\nconst _SHA3_IOTA: bigint[] = [];\nfor (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {\n // Pi\n [x, y] = [y, (2 * x + 3 * y) % 5];\n SHA3_PI.push(2 * (5 * y + x));\n // Rotational\n SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n // Iota\n let t = _0n;\n for (let j = 0; j < 7; j++) {\n R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n if (R & _2n) t ^= _1n << ((_1n << /* @__PURE__ */ BigInt(j)) - _1n);\n }\n _SHA3_IOTA.push(t);\n}\nconst IOTAS = split(_SHA3_IOTA, true);\nconst SHA3_IOTA_H = IOTAS[0];\nconst SHA3_IOTA_L = IOTAS[1];\n\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h: number, l: number, s: number) => (s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s));\nconst rotlL = (h: number, l: number, s: number) => (s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s));\n\n/** `keccakf1600` internal function, additionally allows to adjust round count. */\nexport function keccakP(s: Uint32Array, rounds: number = 24): void {\n const B = new Uint32Array(5 * 2);\n // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n for (let round = 24 - rounds; round < 24; round++) {\n // Theta \u03B8\n for (let x = 0; x < 10; x++) B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n for (let x = 0; x < 10; x += 2) {\n const idx1 = (x + 8) % 10;\n const idx0 = (x + 2) % 10;\n const B0 = B[idx0];\n const B1 = B[idx0 + 1];\n const Th = rotlH(B0, B1, 1) ^ B[idx1];\n const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n for (let y = 0; y < 50; y += 10) {\n s[x + y] ^= Th;\n s[x + y + 1] ^= Tl;\n }\n }\n // Rho (\u03C1) and Pi (\u03C0)\n let curH = s[2];\n let curL = s[3];\n for (let t = 0; t < 24; t++) {\n const shift = SHA3_ROTL[t];\n const Th = rotlH(curH, curL, shift);\n const Tl = rotlL(curH, curL, shift);\n const PI = SHA3_PI[t];\n curH = s[PI];\n curL = s[PI + 1];\n s[PI] = Th;\n s[PI + 1] = Tl;\n }\n // Chi (\u03C7)\n for (let y = 0; y < 50; y += 10) {\n for (let x = 0; x < 10; x++) B[x] = s[y + x];\n for (let x = 0; x < 10; x++) s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n }\n // Iota (\u03B9)\n s[0] ^= SHA3_IOTA_H[round];\n s[1] ^= SHA3_IOTA_L[round];\n }\n clean(B);\n}\n\n/** Keccak sponge function. */\nexport class Keccak extends Hash implements HashXOF {\n protected state: Uint8Array;\n protected pos = 0;\n protected posOut = 0;\n protected finished = false;\n protected state32: Uint32Array;\n protected destroyed = false;\n\n public blockLen: number;\n public suffix: number;\n public outputLen: number;\n protected enableXOF = false;\n protected rounds: number;\n\n // NOTE: we accept arguments in bytes instead of bits here.\n constructor(\n blockLen: number,\n suffix: number,\n outputLen: number,\n enableXOF = false,\n rounds: number = 24\n ) {\n super();\n this.blockLen = blockLen;\n this.suffix = suffix;\n this.outputLen = outputLen;\n this.enableXOF = enableXOF;\n this.rounds = rounds;\n // Can be passed from user as dkLen\n anumber(outputLen);\n // 1600 = 5x5 matrix of 64bit. 1600 bits === 200 bytes\n // 0 < blockLen < 200\n if (!(0 < blockLen && blockLen < 200))\n throw new Error('only keccak-f1600 function is supported');\n this.state = new Uint8Array(200);\n this.state32 = u32(this.state);\n }\n clone(): Keccak {\n return this._cloneInto();\n }\n protected keccak(): void {\n swap32IfBE(this.state32);\n keccakP(this.state32, this.rounds);\n swap32IfBE(this.state32);\n this.posOut = 0;\n this.pos = 0;\n }\n update(data: Input): this {\n aexists(this);\n data = toBytes(data);\n abytes(data);\n const { blockLen, state } = this;\n const len = data.length;\n for (let pos = 0; pos < len; ) {\n const take = Math.min(blockLen - this.pos, len - pos);\n for (let i = 0; i < take; i++) state[this.pos++] ^= data[pos++];\n if (this.pos === blockLen) this.keccak();\n }\n return this;\n }\n protected finish(): void {\n if (this.finished) return;\n this.finished = true;\n const { state, suffix, pos, blockLen } = this;\n // Do the padding\n state[pos] ^= suffix;\n if ((suffix & 0x80) !== 0 && pos === blockLen - 1) this.keccak();\n state[blockLen - 1] ^= 0x80;\n this.keccak();\n }\n protected writeInto(out: Uint8Array): Uint8Array {\n aexists(this, false);\n abytes(out);\n this.finish();\n const bufferOut = this.state;\n const { blockLen } = this;\n for (let pos = 0, len = out.length; pos < len; ) {\n if (this.posOut >= blockLen) this.keccak();\n const take = Math.min(blockLen - this.posOut, len - pos);\n out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n this.posOut += take;\n pos += take;\n }\n return out;\n }\n xofInto(out: Uint8Array): Uint8Array {\n // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n if (!this.enableXOF) throw new Error('XOF is not possible for this instance');\n return this.writeInto(out);\n }\n xof(bytes: number): Uint8Array {\n anumber(bytes);\n return this.xofInto(new Uint8Array(bytes));\n }\n digestInto(out: Uint8Array): Uint8Array {\n aoutput(out, this);\n if (this.finished) throw new Error('digest() was already called');\n this.writeInto(out);\n this.destroy();\n return out;\n }\n digest(): Uint8Array {\n return this.digestInto(new Uint8Array(this.outputLen));\n }\n destroy(): void {\n this.destroyed = true;\n clean(this.state);\n }\n _cloneInto(to?: Keccak): Keccak {\n const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n to ||= new Keccak(blockLen, suffix, outputLen, enableXOF, rounds);\n to.state32.set(this.state32);\n to.pos = this.pos;\n to.posOut = this.posOut;\n to.finished = this.finished;\n to.rounds = rounds;\n // Suffix can change in cSHAKE\n to.suffix = suffix;\n to.outputLen = outputLen;\n to.enableXOF = enableXOF;\n to.destroyed = this.destroyed;\n return to;\n }\n}\n\nconst gen = (suffix: number, blockLen: number, outputLen: number) =>\n createHasher(() => new Keccak(blockLen, suffix, outputLen));\n\n/** SHA3-224 hash function. */\nexport const sha3_224: CHash = /* @__PURE__ */ (() => gen(0x06, 144, 224 / 8))();\n/** SHA3-256 hash function. Different from keccak-256. */\nexport const sha3_256: CHash = /* @__PURE__ */ (() => gen(0x06, 136, 256 / 8))();\n/** SHA3-384 hash function. */\nexport const sha3_384: CHash = /* @__PURE__ */ (() => gen(0x06, 104, 384 / 8))();\n/** SHA3-512 hash function. */\nexport const sha3_512: CHash = /* @__PURE__ */ (() => gen(0x06, 72, 512 / 8))();\n\n/** keccak-224 hash function. */\nexport const keccak_224: CHash = /* @__PURE__ */ (() => gen(0x01, 144, 224 / 8))();\n/** keccak-256 hash function. Different from SHA3-256. */\nexport const keccak_256: CHash = /* @__PURE__ */ (() => gen(0x01, 136, 256 / 8))();\n/** keccak-384 hash function. */\nexport const keccak_384: CHash = /* @__PURE__ */ (() => gen(0x01, 104, 384 / 8))();\n/** keccak-512 hash function. */\nexport const keccak_512: CHash = /* @__PURE__ */ (() => gen(0x01, 72, 512 / 8))();\n\nexport type ShakeOpts = { dkLen?: number };\n\nconst genShake = (suffix: number, blockLen: number, outputLen: number) =>\n createXOFer, ShakeOpts>(\n (opts: ShakeOpts = {}) =>\n new Keccak(blockLen, suffix, opts.dkLen === undefined ? outputLen : opts.dkLen, true)\n );\n\n/** SHAKE128 XOF with 128-bit security. */\nexport const shake128: CHashXO = /* @__PURE__ */ (() => genShake(0x1f, 168, 128 / 8))();\n/** SHAKE256 XOF with 256-bit security. */\nexport const shake256: CHashXO = /* @__PURE__ */ (() => genShake(0x1f, 136, 256 / 8))();\n", "import { keccak_256 } from '@noble/hashes/sha3'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type IsHexErrorType, isHex } from '../data/isHex.js'\nimport { type ToBytesErrorType, toBytes } from '../encoding/toBytes.js'\nimport { type ToHexErrorType, toHex } from '../encoding/toHex.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type Keccak256Hash =\n | (to extends 'bytes' ? ByteArray : never)\n | (to extends 'hex' ? Hex : never)\n\nexport type Keccak256ErrorType =\n | IsHexErrorType\n | ToBytesErrorType\n | ToHexErrorType\n | ErrorType\n\nexport function keccak256(\n value: Hex | ByteArray,\n to_?: to | undefined,\n): Keccak256Hash {\n const to = to_ || 'hex'\n const bytes = keccak_256(\n isHex(value, { strict: false }) ? toBytes(value) : value,\n )\n if (to === 'bytes') return bytes as Keccak256Hash\n return toHex(bytes) as Keccak256Hash\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport { type ToBytesErrorType, toBytes } from '../encoding/toBytes.js'\nimport { type Keccak256ErrorType, keccak256 } from './keccak256.js'\n\nconst hash = (value: string) => keccak256(toBytes(value))\n\nexport type HashSignatureErrorType =\n | Keccak256ErrorType\n | ToBytesErrorType\n | ErrorType\n\nexport function hashSignature(sig: string) {\n return hash(sig)\n}\n", "import { BaseError } from '../../errors/base.js'\nimport type { ErrorType } from '../../errors/utils.js'\n\ntype NormalizeSignatureParameters = string\ntype NormalizeSignatureReturnType = string\nexport type NormalizeSignatureErrorType = ErrorType\n\nexport function normalizeSignature(\n signature: NormalizeSignatureParameters,\n): NormalizeSignatureReturnType {\n let active = true\n let current = ''\n let level = 0\n let result = ''\n let valid = false\n\n for (let i = 0; i < signature.length; i++) {\n const char = signature[i]\n\n // If the character is a separator, we want to reactivate.\n if (['(', ')', ','].includes(char)) active = true\n\n // If the character is a \"level\" token, we want to increment/decrement.\n if (char === '(') level++\n if (char === ')') level--\n\n // If we aren't active, we don't want to mutate the result.\n if (!active) continue\n\n // If level === 0, we are at the definition level.\n if (level === 0) {\n if (char === ' ' && ['event', 'function', ''].includes(result))\n result = ''\n else {\n result += char\n\n // If we are at the end of the definition, we must be finished.\n if (char === ')') {\n valid = true\n break\n }\n }\n\n continue\n }\n\n // Ignore spaces\n if (char === ' ') {\n // If the previous character is a separator, and the current section isn't empty, we want to deactivate.\n if (signature[i - 1] !== ',' && current !== ',' && current !== ',(') {\n current = ''\n active = false\n }\n continue\n }\n\n result += char\n current += char\n }\n\n if (!valid) throw new BaseError('Unable to normalize signature.')\n\n return result\n}\n", "import { type AbiEvent, type AbiFunction, formatAbiItem } from 'abitype'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport {\n type NormalizeSignatureErrorType,\n normalizeSignature,\n} from './normalizeSignature.js'\n\nexport type ToSignatureErrorType = NormalizeSignatureErrorType | ErrorType\n\n/**\n * Returns the signature for a given function or event definition.\n *\n * @example\n * const signature = toSignature('function ownerOf(uint256 tokenId)')\n * // 'ownerOf(uint256)'\n *\n * @example\n * const signature_3 = toSignature({\n * name: 'ownerOf',\n * type: 'function',\n * inputs: [{ name: 'tokenId', type: 'uint256' }],\n * outputs: [],\n * stateMutability: 'view',\n * })\n * // 'ownerOf(uint256)'\n */\nexport const toSignature = (def: string | AbiFunction | AbiEvent) => {\n const def_ = (() => {\n if (typeof def === 'string') return def\n return formatAbiItem(def)\n })()\n return normalizeSignature(def_)\n}\n", "import type { AbiEvent, AbiFunction } from 'abitype'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport { type HashSignatureErrorType, hashSignature } from './hashSignature.js'\nimport { type ToSignatureErrorType, toSignature } from './toSignature.js'\n\nexport type ToSignatureHashErrorType =\n | HashSignatureErrorType\n | ToSignatureErrorType\n | ErrorType\n\n/**\n * Returns the hash (of the function/event signature) for a given event or function definition.\n */\nexport function toSignatureHash(fn: string | AbiFunction | AbiEvent) {\n return hashSignature(toSignature(fn))\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport {\n type ToSignatureHashErrorType,\n toSignatureHash,\n} from './toSignatureHash.js'\n\nexport type ToEventSelectorErrorType = ToSignatureHashErrorType | ErrorType\n\n/**\n * Returns the event selector for a given event definition.\n *\n * @example\n * const selector = toEventSelector('Transfer(address indexed from, address indexed to, uint256 amount)')\n * // 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\n */\nexport const toEventSelector = toSignatureHash\n", "import { BaseError } from './base.js'\n\nexport type InvalidAddressErrorType = InvalidAddressError & {\n name: 'InvalidAddressError'\n}\nexport class InvalidAddressError extends BaseError {\n constructor({ address }: { address: string }) {\n super(`Address \"${address}\" is invalid.`, {\n metaMessages: [\n '- Address must be a hex value of 20 bytes (40 hex characters).',\n '- Address must match its checksum counterpart.',\n ],\n name: 'InvalidAddressError',\n })\n }\n}\n", "/**\n * Map with a LRU (Least recently used) policy.\n *\n * @link https://en.wikipedia.org/wiki/Cache_replacement_policies#LRU\n */\nexport class LruMap extends Map {\n maxSize: number\n\n constructor(size: number) {\n super()\n this.maxSize = size\n }\n\n override get(key: string) {\n const value = super.get(key)\n\n if (super.has(key)) {\n super.delete(key)\n super.set(key, value as value)\n }\n\n return value\n }\n\n override set(key: string, value: value) {\n if (super.has(key)) super.delete(key)\n super.set(key, value)\n if (this.maxSize && this.size > this.maxSize) {\n const firstKey = super.keys().next().value\n if (firstKey !== undefined) super.delete(firstKey)\n }\n return this\n }\n}\n", "import type { Address } from 'abitype'\n\nimport { InvalidAddressError } from '../../errors/address.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport {\n type StringToBytesErrorType,\n stringToBytes,\n} from '../encoding/toBytes.js'\nimport { type Keccak256ErrorType, keccak256 } from '../hash/keccak256.js'\nimport { LruMap } from '../lru.js'\nimport { type IsAddressErrorType, isAddress } from './isAddress.js'\n\nconst checksumAddressCache = /*#__PURE__*/ new LruMap
    (8192)\n\nexport type ChecksumAddressErrorType =\n | Keccak256ErrorType\n | StringToBytesErrorType\n | ErrorType\n\nexport function checksumAddress(\n address_: Address,\n /**\n * Warning: EIP-1191 checksum addresses are generally not backwards compatible with the\n * wider Ethereum ecosystem, meaning it will break when validated against an application/tool\n * that relies on EIP-55 checksum encoding (checksum without chainId).\n *\n * It is highly recommended to not use this feature unless you\n * know what you are doing.\n *\n * See more: https://github.com/ethereum/EIPs/issues/1121\n */\n chainId?: number | undefined,\n): Address {\n if (checksumAddressCache.has(`${address_}.${chainId}`))\n return checksumAddressCache.get(`${address_}.${chainId}`)!\n\n const hexAddress = chainId\n ? `${chainId}${address_.toLowerCase()}`\n : address_.substring(2).toLowerCase()\n const hash = keccak256(stringToBytes(hexAddress), 'bytes')\n\n const address = (\n chainId ? hexAddress.substring(`${chainId}0x`.length) : hexAddress\n ).split('')\n for (let i = 0; i < 40; i += 2) {\n if (hash[i >> 1] >> 4 >= 8 && address[i]) {\n address[i] = address[i].toUpperCase()\n }\n if ((hash[i >> 1] & 0x0f) >= 8 && address[i + 1]) {\n address[i + 1] = address[i + 1].toUpperCase()\n }\n }\n\n const result = `0x${address.join('')}` as const\n checksumAddressCache.set(`${address_}.${chainId}`, result)\n return result\n}\n\nexport type GetAddressErrorType =\n | ChecksumAddressErrorType\n | IsAddressErrorType\n | ErrorType\n\nexport function getAddress(\n address: string,\n /**\n * Warning: EIP-1191 checksum addresses are generally not backwards compatible with the\n * wider Ethereum ecosystem, meaning it will break when validated against an application/tool\n * that relies on EIP-55 checksum encoding (checksum without chainId).\n *\n * It is highly recommended to not use this feature unless you\n * know what you are doing.\n *\n * See more: https://github.com/ethereum/EIPs/issues/1121\n */\n chainId?: number,\n): Address {\n if (!isAddress(address, { strict: false }))\n throw new InvalidAddressError({ address })\n return checksumAddress(address, chainId)\n}\n", "import type { Address } from 'abitype'\nimport type { ErrorType } from '../../errors/utils.js'\nimport { LruMap } from '../lru.js'\nimport { checksumAddress } from './getAddress.js'\n\nconst addressRegex = /^0x[a-fA-F0-9]{40}$/\n\n/** @internal */\nexport const isAddressCache = /*#__PURE__*/ new LruMap(8192)\n\nexport type IsAddressOptions = {\n /**\n * Enables strict mode. Whether or not to compare the address against its checksum.\n *\n * @default true\n */\n strict?: boolean | undefined\n}\n\nexport type IsAddressErrorType = ErrorType\n\nexport function isAddress(\n address: string,\n options?: IsAddressOptions | undefined,\n): address is Address {\n const { strict = true } = options ?? {}\n const cacheKey = `${address}.${strict}`\n\n if (isAddressCache.has(cacheKey)) return isAddressCache.get(cacheKey)!\n\n const result = (() => {\n if (!addressRegex.test(address)) return false\n if (address.toLowerCase() === address) return true\n if (strict) return checksumAddress(address as Address) === address\n return true\n })()\n isAddressCache.set(cacheKey, result)\n return result\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\n\nexport type ConcatReturnType = value extends Hex\n ? Hex\n : ByteArray\n\nexport type ConcatErrorType =\n | ConcatBytesErrorType\n | ConcatHexErrorType\n | ErrorType\n\nexport function concat(\n values: readonly value[],\n): ConcatReturnType {\n if (typeof values[0] === 'string')\n return concatHex(values as readonly Hex[]) as ConcatReturnType\n return concatBytes(values as readonly ByteArray[]) as ConcatReturnType\n}\n\nexport type ConcatBytesErrorType = ErrorType\n\nexport function concatBytes(values: readonly ByteArray[]): ByteArray {\n let length = 0\n for (const arr of values) {\n length += arr.length\n }\n const result = new Uint8Array(length)\n let offset = 0\n for (const arr of values) {\n result.set(arr, offset)\n offset += arr.length\n }\n return result\n}\n\nexport type ConcatHexErrorType = ErrorType\n\nexport function concatHex(values: readonly Hex[]): Hex {\n return `0x${(values as Hex[]).reduce(\n (acc, x) => acc + x.replace('0x', ''),\n '',\n )}`\n}\n", "import {\n SliceOffsetOutOfBoundsError,\n type SliceOffsetOutOfBoundsErrorType,\n} from '../../errors/data.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\n\nimport { type IsHexErrorType, isHex } from './isHex.js'\nimport { type SizeErrorType, size } from './size.js'\n\nexport type SliceReturnType = value extends Hex\n ? Hex\n : ByteArray\n\nexport type SliceErrorType =\n | IsHexErrorType\n | SliceBytesErrorType\n | SliceHexErrorType\n | ErrorType\n\n/**\n * @description Returns a section of the hex or byte array given a start/end bytes offset.\n *\n * @param value The hex or byte array to slice.\n * @param start The start offset (in bytes).\n * @param end The end offset (in bytes).\n */\nexport function slice(\n value: value,\n start?: number | undefined,\n end?: number | undefined,\n { strict }: { strict?: boolean | undefined } = {},\n): SliceReturnType {\n if (isHex(value, { strict: false }))\n return sliceHex(value as Hex, start, end, {\n strict,\n }) as SliceReturnType\n return sliceBytes(value as ByteArray, start, end, {\n strict,\n }) as SliceReturnType\n}\n\nexport type AssertStartOffsetErrorType =\n | SliceOffsetOutOfBoundsErrorType\n | SizeErrorType\n | ErrorType\n\nfunction assertStartOffset(value: Hex | ByteArray, start?: number | undefined) {\n if (typeof start === 'number' && start > 0 && start > size(value) - 1)\n throw new SliceOffsetOutOfBoundsError({\n offset: start,\n position: 'start',\n size: size(value),\n })\n}\n\nexport type AssertEndOffsetErrorType =\n | SliceOffsetOutOfBoundsErrorType\n | SizeErrorType\n | ErrorType\n\nfunction assertEndOffset(\n value: Hex | ByteArray,\n start?: number | undefined,\n end?: number | undefined,\n) {\n if (\n typeof start === 'number' &&\n typeof end === 'number' &&\n size(value) !== end - start\n ) {\n throw new SliceOffsetOutOfBoundsError({\n offset: end,\n position: 'end',\n size: size(value),\n })\n }\n}\n\nexport type SliceBytesErrorType =\n | AssertStartOffsetErrorType\n | AssertEndOffsetErrorType\n | ErrorType\n\n/**\n * @description Returns a section of the byte array given a start/end bytes offset.\n *\n * @param value The byte array to slice.\n * @param start The start offset (in bytes).\n * @param end The end offset (in bytes).\n */\nexport function sliceBytes(\n value_: ByteArray,\n start?: number | undefined,\n end?: number | undefined,\n { strict }: { strict?: boolean | undefined } = {},\n): ByteArray {\n assertStartOffset(value_, start)\n const value = value_.slice(start, end)\n if (strict) assertEndOffset(value, start, end)\n return value\n}\n\nexport type SliceHexErrorType =\n | AssertStartOffsetErrorType\n | AssertEndOffsetErrorType\n | ErrorType\n\n/**\n * @description Returns a section of the hex value given a start/end bytes offset.\n *\n * @param value The hex value to slice.\n * @param start The start offset (in bytes).\n * @param end The end offset (in bytes).\n */\nexport function sliceHex(\n value_: Hex,\n start?: number | undefined,\n end?: number | undefined,\n { strict }: { strict?: boolean | undefined } = {},\n): Hex {\n assertStartOffset(value_, start)\n const value = `0x${value_\n .replace('0x', '')\n .slice((start ?? 0) * 2, (end ?? value_.length) * 2)}` as const\n if (strict) assertEndOffset(value, start, end)\n return value\n}\n", "export const arrayRegex = /^(.*)\\[([0-9]*)\\]$/\n\n// `bytes`: binary type of `M` bytes, `0 < M <= 32`\n// https://regexr.com/6va55\nexport const bytesRegex = /^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/\n\n// `(u)int`: (un)signed integer type of `M` bits, `0 < M <= 256`, `M % 8 == 0`\n// https://regexr.com/6v8hp\nexport const integerRegex =\n /^(u?int)(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/\n", "import type {\n AbiParameter,\n AbiParameterKind,\n AbiParametersToPrimitiveTypes,\n AbiParameterToPrimitiveType,\n} from 'abitype'\n\nimport {\n AbiEncodingArrayLengthMismatchError,\n type AbiEncodingArrayLengthMismatchErrorType,\n AbiEncodingBytesSizeMismatchError,\n type AbiEncodingBytesSizeMismatchErrorType,\n AbiEncodingLengthMismatchError,\n type AbiEncodingLengthMismatchErrorType,\n InvalidAbiEncodingTypeError,\n type InvalidAbiEncodingTypeErrorType,\n InvalidArrayError,\n type InvalidArrayErrorType,\n} from '../../errors/abi.js'\nimport {\n InvalidAddressError,\n type InvalidAddressErrorType,\n} from '../../errors/address.js'\nimport { BaseError } from '../../errors/base.js'\nimport { IntegerOutOfRangeError } from '../../errors/encoding.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\nimport { type IsAddressErrorType, isAddress } from '../address/isAddress.js'\nimport { type ConcatErrorType, concat } from '../data/concat.js'\nimport { type PadHexErrorType, padHex } from '../data/pad.js'\nimport { type SizeErrorType, size } from '../data/size.js'\nimport { type SliceErrorType, slice } from '../data/slice.js'\nimport {\n type BoolToHexErrorType,\n boolToHex,\n type NumberToHexErrorType,\n numberToHex,\n type StringToHexErrorType,\n stringToHex,\n} from '../encoding/toHex.js'\nimport { integerRegex } from '../regex.js'\n\nexport type EncodeAbiParametersReturnType = Hex\n\nexport type EncodeAbiParametersErrorType =\n | AbiEncodingLengthMismatchErrorType\n | PrepareParamsErrorType\n | EncodeParamsErrorType\n | ErrorType\n\n/**\n * @description Encodes a list of primitive values into an ABI-encoded hex value.\n *\n * - Docs: https://viem.sh/docs/abi/encodeAbiParameters#encodeabiparameters\n *\n * Generates ABI encoded data using the [ABI specification](https://docs.soliditylang.org/en/latest/abi-spec), given a set of ABI parameters (inputs/outputs) and their corresponding values.\n *\n * @param params - a set of ABI Parameters (params), that can be in the shape of the inputs or outputs attribute of an ABI Item.\n * @param values - a set of values (values) that correspond to the given params.\n * @example\n * ```typescript\n * import { encodeAbiParameters } from 'viem'\n *\n * const encodedData = encodeAbiParameters(\n * [\n * { name: 'x', type: 'string' },\n * { name: 'y', type: 'uint' },\n * { name: 'z', type: 'bool' }\n * ],\n * ['wagmi', 420n, true]\n * )\n * ```\n *\n * You can also pass in Human Readable parameters with the parseAbiParameters utility.\n *\n * @example\n * ```typescript\n * import { encodeAbiParameters, parseAbiParameters } from 'viem'\n *\n * const encodedData = encodeAbiParameters(\n * parseAbiParameters('string x, uint y, bool z'),\n * ['wagmi', 420n, true]\n * )\n * ```\n */\nexport function encodeAbiParameters<\n const params extends readonly AbiParameter[] | readonly unknown[],\n>(\n params: params,\n values: params extends readonly AbiParameter[]\n ? AbiParametersToPrimitiveTypes\n : never,\n): EncodeAbiParametersReturnType {\n if (params.length !== values.length)\n throw new AbiEncodingLengthMismatchError({\n expectedLength: params.length as number,\n givenLength: values.length as any,\n })\n // Prepare the parameters to determine dynamic types to encode.\n const preparedParams = prepareParams({\n params: params as readonly AbiParameter[],\n values: values as any,\n })\n const data = encodeParams(preparedParams)\n if (data.length === 0) return '0x'\n return data\n}\n\n/////////////////////////////////////////////////////////////////\n\ntype PreparedParam = { dynamic: boolean; encoded: Hex }\n\ntype TupleAbiParameter = AbiParameter & { components: readonly AbiParameter[] }\ntype Tuple = AbiParameterToPrimitiveType\n\ntype PrepareParamsErrorType = PrepareParamErrorType | ErrorType\n\nfunction prepareParams({\n params,\n values,\n}: {\n params: params\n values: AbiParametersToPrimitiveTypes\n}) {\n const preparedParams: PreparedParam[] = []\n for (let i = 0; i < params.length; i++) {\n preparedParams.push(prepareParam({ param: params[i], value: values[i] }))\n }\n return preparedParams\n}\n\ntype PrepareParamErrorType =\n | EncodeAddressErrorType\n | EncodeArrayErrorType\n | EncodeBytesErrorType\n | EncodeBoolErrorType\n | EncodeNumberErrorType\n | EncodeStringErrorType\n | EncodeTupleErrorType\n | GetArrayComponentsErrorType\n | InvalidAbiEncodingTypeErrorType\n | ErrorType\n\nfunction prepareParam({\n param,\n value,\n}: {\n param: param\n value: AbiParameterToPrimitiveType\n}): PreparedParam {\n const arrayComponents = getArrayComponents(param.type)\n if (arrayComponents) {\n const [length, type] = arrayComponents\n return encodeArray(value, { length, param: { ...param, type } })\n }\n if (param.type === 'tuple') {\n return encodeTuple(value as unknown as Tuple, {\n param: param as TupleAbiParameter,\n })\n }\n if (param.type === 'address') {\n return encodeAddress(value as unknown as Hex)\n }\n if (param.type === 'bool') {\n return encodeBool(value as unknown as boolean)\n }\n if (param.type.startsWith('uint') || param.type.startsWith('int')) {\n const signed = param.type.startsWith('int')\n const [, , size = '256'] = integerRegex.exec(param.type) ?? []\n return encodeNumber(value as unknown as number, {\n signed,\n size: Number(size),\n })\n }\n if (param.type.startsWith('bytes')) {\n return encodeBytes(value as unknown as Hex, { param })\n }\n if (param.type === 'string') {\n return encodeString(value as unknown as string)\n }\n throw new InvalidAbiEncodingTypeError(param.type, {\n docsPath: '/docs/contract/encodeAbiParameters',\n })\n}\n\n/////////////////////////////////////////////////////////////////\n\ntype EncodeParamsErrorType = NumberToHexErrorType | SizeErrorType | ErrorType\n\nfunction encodeParams(preparedParams: PreparedParam[]): Hex {\n // 1. Compute the size of the static part of the parameters.\n let staticSize = 0\n for (let i = 0; i < preparedParams.length; i++) {\n const { dynamic, encoded } = preparedParams[i]\n if (dynamic) staticSize += 32\n else staticSize += size(encoded)\n }\n\n // 2. Split the parameters into static and dynamic parts.\n const staticParams: Hex[] = []\n const dynamicParams: Hex[] = []\n let dynamicSize = 0\n for (let i = 0; i < preparedParams.length; i++) {\n const { dynamic, encoded } = preparedParams[i]\n if (dynamic) {\n staticParams.push(numberToHex(staticSize + dynamicSize, { size: 32 }))\n dynamicParams.push(encoded)\n dynamicSize += size(encoded)\n } else {\n staticParams.push(encoded)\n }\n }\n\n // 3. Concatenate static and dynamic parts.\n return concat([...staticParams, ...dynamicParams])\n}\n\n/////////////////////////////////////////////////////////////////\n\ntype EncodeAddressErrorType =\n | InvalidAddressErrorType\n | IsAddressErrorType\n | ErrorType\n\nfunction encodeAddress(value: Hex): PreparedParam {\n if (!isAddress(value)) throw new InvalidAddressError({ address: value })\n return { dynamic: false, encoded: padHex(value.toLowerCase() as Hex) }\n}\n\ntype EncodeArrayErrorType =\n | AbiEncodingArrayLengthMismatchErrorType\n | ConcatErrorType\n | EncodeParamsErrorType\n | InvalidArrayErrorType\n | NumberToHexErrorType\n // TODO: Add back once circular type reference is resolved\n // | PrepareParamErrorType\n | ErrorType\n\nfunction encodeArray(\n value: AbiParameterToPrimitiveType,\n {\n length,\n param,\n }: {\n length: number | null\n param: param\n },\n): PreparedParam {\n const dynamic = length === null\n\n if (!Array.isArray(value)) throw new InvalidArrayError(value)\n if (!dynamic && value.length !== length)\n throw new AbiEncodingArrayLengthMismatchError({\n expectedLength: length!,\n givenLength: value.length,\n type: `${param.type}[${length}]`,\n })\n\n let dynamicChild = false\n const preparedParams: PreparedParam[] = []\n for (let i = 0; i < value.length; i++) {\n const preparedParam = prepareParam({ param, value: value[i] })\n if (preparedParam.dynamic) dynamicChild = true\n preparedParams.push(preparedParam)\n }\n\n if (dynamic || dynamicChild) {\n const data = encodeParams(preparedParams)\n if (dynamic) {\n const length = numberToHex(preparedParams.length, { size: 32 })\n return {\n dynamic: true,\n encoded: preparedParams.length > 0 ? concat([length, data]) : length,\n }\n }\n if (dynamicChild) return { dynamic: true, encoded: data }\n }\n return {\n dynamic: false,\n encoded: concat(preparedParams.map(({ encoded }) => encoded)),\n }\n}\n\ntype EncodeBytesErrorType =\n | AbiEncodingBytesSizeMismatchErrorType\n | ConcatErrorType\n | PadHexErrorType\n | NumberToHexErrorType\n | SizeErrorType\n | ErrorType\n\nfunction encodeBytes(\n value: Hex,\n { param }: { param: param },\n): PreparedParam {\n const [, paramSize] = param.type.split('bytes')\n const bytesSize = size(value)\n if (!paramSize) {\n let value_ = value\n // If the size is not divisible by 32 bytes, pad the end\n // with empty bytes to the ceiling 32 bytes.\n if (bytesSize % 32 !== 0)\n value_ = padHex(value_, {\n dir: 'right',\n size: Math.ceil((value.length - 2) / 2 / 32) * 32,\n })\n return {\n dynamic: true,\n encoded: concat([padHex(numberToHex(bytesSize, { size: 32 })), value_]),\n }\n }\n if (bytesSize !== Number.parseInt(paramSize, 10))\n throw new AbiEncodingBytesSizeMismatchError({\n expectedSize: Number.parseInt(paramSize, 10),\n value,\n })\n return { dynamic: false, encoded: padHex(value, { dir: 'right' }) }\n}\n\ntype EncodeBoolErrorType = PadHexErrorType | BoolToHexErrorType | ErrorType\n\nfunction encodeBool(value: boolean): PreparedParam {\n if (typeof value !== 'boolean')\n throw new BaseError(\n `Invalid boolean value: \"${value}\" (type: ${typeof value}). Expected: \\`true\\` or \\`false\\`.`,\n )\n return { dynamic: false, encoded: padHex(boolToHex(value)) }\n}\n\ntype EncodeNumberErrorType = NumberToHexErrorType | ErrorType\n\nfunction encodeNumber(\n value: number,\n { signed, size = 256 }: { signed: boolean; size?: number | undefined },\n): PreparedParam {\n if (typeof size === 'number') {\n const max = 2n ** (BigInt(size) - (signed ? 1n : 0n)) - 1n\n const min = signed ? -max - 1n : 0n\n if (value > max || value < min)\n throw new IntegerOutOfRangeError({\n max: max.toString(),\n min: min.toString(),\n signed,\n size: size / 8,\n value: value.toString(),\n })\n }\n return {\n dynamic: false,\n encoded: numberToHex(value, {\n size: 32,\n signed,\n }),\n }\n}\n\ntype EncodeStringErrorType =\n | ConcatErrorType\n | NumberToHexErrorType\n | PadHexErrorType\n | SizeErrorType\n | SliceErrorType\n | StringToHexErrorType\n | ErrorType\n\nfunction encodeString(value: string): PreparedParam {\n const hexValue = stringToHex(value)\n const partsLength = Math.ceil(size(hexValue) / 32)\n const parts: Hex[] = []\n for (let i = 0; i < partsLength; i++) {\n parts.push(\n padHex(slice(hexValue, i * 32, (i + 1) * 32), {\n dir: 'right',\n }),\n )\n }\n return {\n dynamic: true,\n encoded: concat([\n padHex(numberToHex(size(hexValue), { size: 32 })),\n ...parts,\n ]),\n }\n}\n\ntype EncodeTupleErrorType =\n | ConcatErrorType\n | EncodeParamsErrorType\n // TODO: Add back once circular type reference is resolved\n // | PrepareParamErrorType\n | ErrorType\n\nfunction encodeTuple<\n const param extends AbiParameter & { components: readonly AbiParameter[] },\n>(\n value: AbiParameterToPrimitiveType,\n { param }: { param: param },\n): PreparedParam {\n let dynamic = false\n const preparedParams: PreparedParam[] = []\n for (let i = 0; i < param.components.length; i++) {\n const param_ = param.components[i]\n const index = Array.isArray(value) ? i : param_.name\n const preparedParam = prepareParam({\n param: param_,\n value: (value as any)[index!] as readonly unknown[],\n })\n preparedParams.push(preparedParam)\n if (preparedParam.dynamic) dynamic = true\n }\n return {\n dynamic,\n encoded: dynamic\n ? encodeParams(preparedParams)\n : concat(preparedParams.map(({ encoded }) => encoded)),\n }\n}\n\ntype GetArrayComponentsErrorType = ErrorType\n\nexport function getArrayComponents(\n type: string,\n): [length: number | null, innerType: string] | undefined {\n const matches = type.match(/^(.*)\\[(\\d+)?\\]$/)\n return matches\n ? // Return `null` if the array is dynamic.\n [matches[2] ? Number(matches[2]) : null, matches[1]]\n : undefined\n}\n", "import type { AbiFunction } from 'abitype'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport { type SliceErrorType, slice } from '../data/slice.js'\nimport {\n type ToSignatureHashErrorType,\n toSignatureHash,\n} from './toSignatureHash.js'\n\nexport type ToFunctionSelectorErrorType =\n | ToSignatureHashErrorType\n | SliceErrorType\n | ErrorType\n\n/**\n * Returns the function selector for a given function definition.\n *\n * @example\n * const selector = toFunctionSelector('function ownerOf(uint256 tokenId)')\n * // 0x6352211e\n */\nexport const toFunctionSelector = (fn: string | AbiFunction) =>\n slice(toSignatureHash(fn), 0, 4)\n", "import type { Abi, AbiParameter, Address } from 'abitype'\n\nimport {\n AbiItemAmbiguityError,\n type AbiItemAmbiguityErrorType,\n} from '../../errors/abi.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n AbiItem,\n AbiItemArgs,\n AbiItemName,\n ExtractAbiItemForArgs,\n Widen,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { UnionEvaluate } from '../../types/utils.js'\nimport { type IsHexErrorType, isHex } from '../../utils/data/isHex.js'\nimport { type IsAddressErrorType, isAddress } from '../address/isAddress.js'\nimport { toEventSelector } from '../hash/toEventSelector.js'\nimport {\n type ToFunctionSelectorErrorType,\n toFunctionSelector,\n} from '../hash/toFunctionSelector.js'\n\nexport type GetAbiItemParameters<\n abi extends Abi | readonly unknown[] = Abi,\n name extends AbiItemName = AbiItemName,\n args extends AbiItemArgs | undefined = AbiItemArgs,\n ///\n allArgs = AbiItemArgs,\n allNames = AbiItemName,\n> = {\n abi: abi\n name:\n | allNames // show all options\n | (name extends allNames ? name : never) // infer value\n | Hex // function selector\n} & UnionEvaluate<\n readonly [] extends allArgs\n ? {\n args?:\n | allArgs // show all options\n // infer value, widen inferred value of `args` conditionally to match `allArgs`\n | (abi extends Abi\n ? args extends allArgs\n ? Widen\n : never\n : never)\n | undefined\n }\n : {\n args?:\n | allArgs // show all options\n | (Widen & (args extends allArgs ? unknown : never)) // infer value, widen inferred value of `args` match `allArgs` (e.g. avoid union `args: readonly [123n] | readonly [bigint]`)\n | undefined\n }\n>\n\nexport type GetAbiItemErrorType =\n | IsArgOfTypeErrorType\n | IsHexErrorType\n | ToFunctionSelectorErrorType\n | AbiItemAmbiguityErrorType\n | ErrorType\n\nexport type GetAbiItemReturnType<\n abi extends Abi | readonly unknown[] = Abi,\n name extends AbiItemName = AbiItemName,\n args extends AbiItemArgs | undefined = AbiItemArgs,\n> = abi extends Abi\n ? Abi extends abi\n ? AbiItem | undefined\n : ExtractAbiItemForArgs<\n abi,\n name,\n args extends AbiItemArgs ? args : AbiItemArgs\n >\n : AbiItem | undefined\n\nexport function getAbiItem<\n const abi extends Abi | readonly unknown[],\n name extends AbiItemName,\n const args extends AbiItemArgs | undefined = undefined,\n>(\n parameters: GetAbiItemParameters,\n): GetAbiItemReturnType {\n const { abi, args = [], name } = parameters as unknown as GetAbiItemParameters\n\n const isSelector = isHex(name, { strict: false })\n const abiItems = (abi as Abi).filter((abiItem) => {\n if (isSelector) {\n if (abiItem.type === 'function')\n return toFunctionSelector(abiItem) === name\n if (abiItem.type === 'event') return toEventSelector(abiItem) === name\n return false\n }\n return 'name' in abiItem && abiItem.name === name\n })\n\n if (abiItems.length === 0)\n return undefined as GetAbiItemReturnType\n if (abiItems.length === 1)\n return abiItems[0] as GetAbiItemReturnType\n\n let matchedAbiItem: AbiItem | undefined\n for (const abiItem of abiItems) {\n if (!('inputs' in abiItem)) continue\n if (!args || args.length === 0) {\n if (!abiItem.inputs || abiItem.inputs.length === 0)\n return abiItem as GetAbiItemReturnType\n continue\n }\n if (!abiItem.inputs) continue\n if (abiItem.inputs.length === 0) continue\n if (abiItem.inputs.length !== args.length) continue\n const matched = args.every((arg, index) => {\n const abiParameter = 'inputs' in abiItem && abiItem.inputs![index]\n if (!abiParameter) return false\n return isArgOfType(arg, abiParameter)\n })\n if (matched) {\n // Check for ambiguity against already matched parameters (e.g. `address` vs `bytes20`).\n if (\n matchedAbiItem &&\n 'inputs' in matchedAbiItem &&\n matchedAbiItem.inputs\n ) {\n const ambiguousTypes = getAmbiguousTypes(\n abiItem.inputs,\n matchedAbiItem.inputs,\n args as readonly unknown[],\n )\n if (ambiguousTypes)\n throw new AbiItemAmbiguityError(\n {\n abiItem,\n type: ambiguousTypes[0],\n },\n {\n abiItem: matchedAbiItem,\n type: ambiguousTypes[1],\n },\n )\n }\n\n matchedAbiItem = abiItem\n }\n }\n\n if (matchedAbiItem)\n return matchedAbiItem as GetAbiItemReturnType\n return abiItems[0] as GetAbiItemReturnType\n}\n\ntype IsArgOfTypeErrorType = IsAddressErrorType | ErrorType\n\n/** @internal */\nexport function isArgOfType(arg: unknown, abiParameter: AbiParameter): boolean {\n const argType = typeof arg\n const abiParameterType = abiParameter.type\n switch (abiParameterType) {\n case 'address':\n return isAddress(arg as Address, { strict: false })\n case 'bool':\n return argType === 'boolean'\n case 'function':\n return argType === 'string'\n case 'string':\n return argType === 'string'\n default: {\n if (abiParameterType === 'tuple' && 'components' in abiParameter)\n return Object.values(abiParameter.components).every(\n (component, index) => {\n return (\n argType === 'object' &&\n isArgOfType(\n Object.values(arg as unknown[] | Record)[\n index\n ],\n component as AbiParameter,\n )\n )\n },\n )\n\n // `(u)int`: (un)signed integer type of `M` bits, `0 < M <= 256`, `M % 8 == 0`\n // https://regexr.com/6v8hp\n if (\n /^u?int(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/.test(\n abiParameterType,\n )\n )\n return argType === 'number' || argType === 'bigint'\n\n // `bytes`: binary type of `M` bytes, `0 < M <= 32`\n // https://regexr.com/6va55\n if (/^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/.test(abiParameterType))\n return argType === 'string' || arg instanceof Uint8Array\n\n // fixed-length (`[M]`) and dynamic (`[]`) arrays\n // https://regexr.com/6va6i\n if (/[a-z]+[1-9]{0,3}(\\[[0-9]{0,}\\])+$/.test(abiParameterType)) {\n return (\n Array.isArray(arg) &&\n arg.every((x: unknown) =>\n isArgOfType(x, {\n ...abiParameter,\n // Pop off `[]` or `[M]` from end of type\n type: abiParameterType.replace(/(\\[[0-9]{0,}\\])$/, ''),\n } as AbiParameter),\n )\n )\n }\n\n return false\n }\n }\n}\n\n/** @internal */\nexport function getAmbiguousTypes(\n sourceParameters: readonly AbiParameter[],\n targetParameters: readonly AbiParameter[],\n args: AbiItemArgs,\n): AbiParameter['type'][] | undefined {\n for (const parameterIndex in sourceParameters) {\n const sourceParameter = sourceParameters[parameterIndex]\n const targetParameter = targetParameters[parameterIndex]\n\n if (\n sourceParameter.type === 'tuple' &&\n targetParameter.type === 'tuple' &&\n 'components' in sourceParameter &&\n 'components' in targetParameter\n )\n return getAmbiguousTypes(\n sourceParameter.components,\n targetParameter.components,\n (args as any)[parameterIndex],\n )\n\n const types = [sourceParameter.type, targetParameter.type]\n\n const ambiguous = (() => {\n if (types.includes('address') && types.includes('bytes20')) return true\n if (types.includes('address') && types.includes('string'))\n return isAddress(args[parameterIndex] as Address, { strict: false })\n if (types.includes('address') && types.includes('bytes'))\n return isAddress(args[parameterIndex] as Address, { strict: false })\n return false\n })()\n\n if (ambiguous) return types\n }\n\n return\n}\n", "import type { Address } from 'abitype'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../types.js'\n\nexport type ParseAccountErrorType = ErrorType\n\nexport function parseAccount(\n account: accountOrAddress,\n): accountOrAddress extends Address ? Account : accountOrAddress {\n if (typeof account === 'string')\n return { address: account, type: 'json-rpc' } as any\n return account as any\n}\n", "import type {\n Abi,\n AbiStateMutability,\n ExtractAbiFunction,\n ExtractAbiFunctions,\n} from 'abitype'\n\nimport {\n AbiFunctionNotFoundError,\n type AbiFunctionNotFoundErrorType,\n} from '../../errors/abi.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n ContractFunctionArgs,\n ContractFunctionName,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { IsNarrowable, UnionEvaluate } from '../../types/utils.js'\nimport type { ConcatHexErrorType } from '../data/concat.js'\nimport {\n type ToFunctionSelectorErrorType,\n toFunctionSelector,\n} from '../hash/toFunctionSelector.js'\nimport { type FormatAbiItemErrorType, formatAbiItem } from './formatAbiItem.js'\nimport { type GetAbiItemErrorType, getAbiItem } from './getAbiItem.js'\n\nconst docsPath = '/docs/contract/encodeFunctionData'\n\nexport type PrepareEncodeFunctionDataParameters<\n abi extends Abi | readonly unknown[] = Abi,\n functionName extends\n | ContractFunctionName\n | undefined = ContractFunctionName,\n ///\n hasFunctions = abi extends Abi\n ? Abi extends abi\n ? true\n : [ExtractAbiFunctions] extends [never]\n ? false\n : true\n : true,\n allArgs = ContractFunctionArgs<\n abi,\n AbiStateMutability,\n functionName extends ContractFunctionName\n ? functionName\n : ContractFunctionName\n >,\n allFunctionNames = ContractFunctionName,\n> = {\n abi: abi\n} & UnionEvaluate<\n IsNarrowable extends true\n ? abi['length'] extends 1\n ? { functionName?: functionName | allFunctionNames | Hex | undefined }\n : { functionName: functionName | allFunctionNames | Hex }\n : { functionName?: functionName | allFunctionNames | Hex | undefined }\n> &\n UnionEvaluate<{ args?: allArgs | undefined }> &\n (hasFunctions extends true ? unknown : never)\n\nexport type PrepareEncodeFunctionDataReturnType<\n abi extends Abi | readonly unknown[] = Abi,\n functionName extends\n | ContractFunctionName\n | undefined = ContractFunctionName,\n> = {\n abi: abi extends Abi\n ? functionName extends ContractFunctionName\n ? [ExtractAbiFunction]\n : abi\n : Abi\n functionName: Hex\n}\n\nexport type PrepareEncodeFunctionDataErrorType =\n | AbiFunctionNotFoundErrorType\n | ConcatHexErrorType\n | FormatAbiItemErrorType\n | GetAbiItemErrorType\n | ToFunctionSelectorErrorType\n | ErrorType\n\nexport function prepareEncodeFunctionData<\n const abi extends Abi | readonly unknown[],\n functionName extends ContractFunctionName | undefined = undefined,\n>(\n parameters: PrepareEncodeFunctionDataParameters,\n): PrepareEncodeFunctionDataReturnType {\n const { abi, args, functionName } =\n parameters as PrepareEncodeFunctionDataParameters\n\n let abiItem = abi[0]\n if (functionName) {\n const item = getAbiItem({\n abi,\n args,\n name: functionName,\n })\n if (!item) throw new AbiFunctionNotFoundError(functionName, { docsPath })\n abiItem = item\n }\n\n if (abiItem.type !== 'function')\n throw new AbiFunctionNotFoundError(undefined, { docsPath })\n\n return {\n abi: [abiItem],\n functionName: toFunctionSelector(formatAbiItem(abiItem)),\n } as unknown as PrepareEncodeFunctionDataReturnType\n}\n", "import type { Abi, AbiStateMutability, ExtractAbiFunctions } from 'abitype'\n\nimport type { AbiFunctionNotFoundErrorType } from '../../errors/abi.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n ContractFunctionArgs,\n ContractFunctionName,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { IsNarrowable, UnionEvaluate } from '../../types/utils.js'\nimport { type ConcatHexErrorType, concatHex } from '../data/concat.js'\nimport type { ToFunctionSelectorErrorType } from '../hash/toFunctionSelector.js'\nimport {\n type EncodeAbiParametersErrorType,\n encodeAbiParameters,\n} from './encodeAbiParameters.js'\nimport type { FormatAbiItemErrorType } from './formatAbiItem.js'\nimport type { GetAbiItemErrorType } from './getAbiItem.js'\nimport { prepareEncodeFunctionData } from './prepareEncodeFunctionData.js'\n\nexport type EncodeFunctionDataParameters<\n abi extends Abi | readonly unknown[] = Abi,\n functionName extends\n | ContractFunctionName\n | Hex\n | undefined = ContractFunctionName,\n ///\n hasFunctions = abi extends Abi\n ? Abi extends abi\n ? true\n : [ExtractAbiFunctions] extends [never]\n ? false\n : true\n : true,\n allArgs = ContractFunctionArgs<\n abi,\n AbiStateMutability,\n functionName extends ContractFunctionName\n ? functionName\n : ContractFunctionName\n >,\n allFunctionNames = ContractFunctionName,\n> = {\n abi: abi\n} & UnionEvaluate<\n IsNarrowable extends true\n ? abi['length'] extends 1\n ? { functionName?: functionName | allFunctionNames | Hex | undefined }\n : { functionName: functionName | allFunctionNames | Hex }\n : { functionName?: functionName | allFunctionNames | Hex | undefined }\n> &\n UnionEvaluate<\n readonly [] extends allArgs\n ? { args?: allArgs | undefined }\n : { args: allArgs }\n > &\n (hasFunctions extends true ? unknown : never)\n\nexport type EncodeFunctionDataReturnType = Hex\n\nexport type EncodeFunctionDataErrorType =\n | AbiFunctionNotFoundErrorType\n | ConcatHexErrorType\n | EncodeAbiParametersErrorType\n | FormatAbiItemErrorType\n | GetAbiItemErrorType\n | ToFunctionSelectorErrorType\n | ErrorType\n\nexport function encodeFunctionData<\n const abi extends Abi | readonly unknown[],\n functionName extends ContractFunctionName | undefined = undefined,\n>(\n parameters: EncodeFunctionDataParameters,\n): EncodeFunctionDataReturnType {\n const { args } = parameters as EncodeFunctionDataParameters\n\n const { abi, functionName } = (() => {\n if (\n parameters.abi.length === 1 &&\n parameters.functionName?.startsWith('0x')\n )\n return parameters as { abi: Abi; functionName: Hex }\n return prepareEncodeFunctionData(parameters)\n })()\n\n const abiItem = abi[0]\n const signature = functionName\n\n const data =\n 'inputs' in abiItem && abiItem.inputs\n ? encodeAbiParameters(abiItem.inputs, args ?? [])\n : undefined\n return concatHex([signature, data ?? '0x'])\n}\n", "import type { AbiError } from 'abitype'\n\n// https://docs.soliditylang.org/en/v0.8.16/control-structures.html#panic-via-assert-and-error-via-require\nexport const panicReasons = {\n 1: 'An `assert` condition failed.',\n 17: 'Arithmetic operation resulted in underflow or overflow.',\n 18: 'Division or modulo by zero (e.g. `5 / 0` or `23 % 0`).',\n 33: 'Attempted to convert to an invalid type.',\n 34: 'Attempted to access a storage byte array that is incorrectly encoded.',\n 49: 'Performed `.pop()` on an empty array',\n 50: 'Array index is out of bounds.',\n 65: 'Allocated too much memory or created an array which is too large.',\n 81: 'Attempted to call a zero-initialized variable of internal function type.',\n} as const\n\nexport const solidityError: AbiError = {\n inputs: [\n {\n name: 'message',\n type: 'string',\n },\n ],\n name: 'Error',\n type: 'error',\n}\nexport const solidityPanic: AbiError = {\n inputs: [\n {\n name: 'reason',\n type: 'uint256',\n },\n ],\n name: 'Panic',\n type: 'error',\n}\n", "import { BaseError } from './base.js'\n\nexport type NegativeOffsetErrorType = NegativeOffsetError & {\n name: 'NegativeOffsetError'\n}\nexport class NegativeOffsetError extends BaseError {\n constructor({ offset }: { offset: number }) {\n super(`Offset \\`${offset}\\` cannot be negative.`, {\n name: 'NegativeOffsetError',\n })\n }\n}\n\nexport type PositionOutOfBoundsErrorType = PositionOutOfBoundsError & {\n name: 'PositionOutOfBoundsError'\n}\nexport class PositionOutOfBoundsError extends BaseError {\n constructor({ length, position }: { length: number; position: number }) {\n super(\n `Position \\`${position}\\` is out of bounds (\\`0 < position < ${length}\\`).`,\n { name: 'PositionOutOfBoundsError' },\n )\n }\n}\n\nexport type RecursiveReadLimitExceededErrorType =\n RecursiveReadLimitExceededError & {\n name: 'RecursiveReadLimitExceededError'\n }\nexport class RecursiveReadLimitExceededError extends BaseError {\n constructor({ count, limit }: { count: number; limit: number }) {\n super(\n `Recursive read limit of \\`${limit}\\` exceeded (recursive read count: \\`${count}\\`).`,\n { name: 'RecursiveReadLimitExceededError' },\n )\n }\n}\n", "import {\n NegativeOffsetError,\n type NegativeOffsetErrorType,\n PositionOutOfBoundsError,\n type PositionOutOfBoundsErrorType,\n RecursiveReadLimitExceededError,\n type RecursiveReadLimitExceededErrorType,\n} from '../errors/cursor.js'\nimport type { ErrorType } from '../errors/utils.js'\nimport type { ByteArray } from '../types/misc.js'\n\nexport type Cursor = {\n bytes: ByteArray\n dataView: DataView\n position: number\n positionReadCount: Map\n recursiveReadCount: number\n recursiveReadLimit: number\n remaining: number\n assertReadLimit(position?: number): void\n assertPosition(position: number): void\n decrementPosition(offset: number): void\n getReadCount(position?: number): number\n incrementPosition(offset: number): void\n inspectByte(position?: number): ByteArray[number]\n inspectBytes(length: number, position?: number): ByteArray\n inspectUint8(position?: number): number\n inspectUint16(position?: number): number\n inspectUint24(position?: number): number\n inspectUint32(position?: number): number\n pushByte(byte: ByteArray[number]): void\n pushBytes(bytes: ByteArray): void\n pushUint8(value: number): void\n pushUint16(value: number): void\n pushUint24(value: number): void\n pushUint32(value: number): void\n readByte(): ByteArray[number]\n readBytes(length: number, size?: number): ByteArray\n readUint8(): number\n readUint16(): number\n readUint24(): number\n readUint32(): number\n setPosition(position: number): () => void\n _touch(): void\n}\n\ntype CursorErrorType =\n | CursorAssertPositionErrorType\n | CursorDecrementPositionErrorType\n | CursorIncrementPositionErrorType\n | ErrorType\n\ntype CursorAssertPositionErrorType = PositionOutOfBoundsErrorType | ErrorType\n\ntype CursorDecrementPositionErrorType = NegativeOffsetErrorType | ErrorType\n\ntype CursorIncrementPositionErrorType = NegativeOffsetErrorType | ErrorType\n\ntype StaticCursorErrorType =\n | NegativeOffsetErrorType\n | RecursiveReadLimitExceededErrorType\n\nconst staticCursor: Cursor = {\n bytes: new Uint8Array(),\n dataView: new DataView(new ArrayBuffer(0)),\n position: 0,\n positionReadCount: new Map(),\n recursiveReadCount: 0,\n recursiveReadLimit: Number.POSITIVE_INFINITY,\n assertReadLimit() {\n if (this.recursiveReadCount >= this.recursiveReadLimit)\n throw new RecursiveReadLimitExceededError({\n count: this.recursiveReadCount + 1,\n limit: this.recursiveReadLimit,\n })\n },\n assertPosition(position) {\n if (position < 0 || position > this.bytes.length - 1)\n throw new PositionOutOfBoundsError({\n length: this.bytes.length,\n position,\n })\n },\n decrementPosition(offset) {\n if (offset < 0) throw new NegativeOffsetError({ offset })\n const position = this.position - offset\n this.assertPosition(position)\n this.position = position\n },\n getReadCount(position) {\n return this.positionReadCount.get(position || this.position) || 0\n },\n incrementPosition(offset) {\n if (offset < 0) throw new NegativeOffsetError({ offset })\n const position = this.position + offset\n this.assertPosition(position)\n this.position = position\n },\n inspectByte(position_) {\n const position = position_ ?? this.position\n this.assertPosition(position)\n return this.bytes[position]\n },\n inspectBytes(length, position_) {\n const position = position_ ?? this.position\n this.assertPosition(position + length - 1)\n return this.bytes.subarray(position, position + length)\n },\n inspectUint8(position_) {\n const position = position_ ?? this.position\n this.assertPosition(position)\n return this.bytes[position]\n },\n inspectUint16(position_) {\n const position = position_ ?? this.position\n this.assertPosition(position + 1)\n return this.dataView.getUint16(position)\n },\n inspectUint24(position_) {\n const position = position_ ?? this.position\n this.assertPosition(position + 2)\n return (\n (this.dataView.getUint16(position) << 8) +\n this.dataView.getUint8(position + 2)\n )\n },\n inspectUint32(position_) {\n const position = position_ ?? this.position\n this.assertPosition(position + 3)\n return this.dataView.getUint32(position)\n },\n pushByte(byte: ByteArray[number]) {\n this.assertPosition(this.position)\n this.bytes[this.position] = byte\n this.position++\n },\n pushBytes(bytes: ByteArray) {\n this.assertPosition(this.position + bytes.length - 1)\n this.bytes.set(bytes, this.position)\n this.position += bytes.length\n },\n pushUint8(value: number) {\n this.assertPosition(this.position)\n this.bytes[this.position] = value\n this.position++\n },\n pushUint16(value: number) {\n this.assertPosition(this.position + 1)\n this.dataView.setUint16(this.position, value)\n this.position += 2\n },\n pushUint24(value: number) {\n this.assertPosition(this.position + 2)\n this.dataView.setUint16(this.position, value >> 8)\n this.dataView.setUint8(this.position + 2, value & ~4294967040)\n this.position += 3\n },\n pushUint32(value: number) {\n this.assertPosition(this.position + 3)\n this.dataView.setUint32(this.position, value)\n this.position += 4\n },\n readByte() {\n this.assertReadLimit()\n this._touch()\n const value = this.inspectByte()\n this.position++\n return value\n },\n readBytes(length, size) {\n this.assertReadLimit()\n this._touch()\n const value = this.inspectBytes(length)\n this.position += size ?? length\n return value\n },\n readUint8() {\n this.assertReadLimit()\n this._touch()\n const value = this.inspectUint8()\n this.position += 1\n return value\n },\n readUint16() {\n this.assertReadLimit()\n this._touch()\n const value = this.inspectUint16()\n this.position += 2\n return value\n },\n readUint24() {\n this.assertReadLimit()\n this._touch()\n const value = this.inspectUint24()\n this.position += 3\n return value\n },\n readUint32() {\n this.assertReadLimit()\n this._touch()\n const value = this.inspectUint32()\n this.position += 4\n return value\n },\n get remaining() {\n return this.bytes.length - this.position\n },\n setPosition(position) {\n const oldPosition = this.position\n this.assertPosition(position)\n this.position = position\n return () => (this.position = oldPosition)\n },\n _touch() {\n if (this.recursiveReadLimit === Number.POSITIVE_INFINITY) return\n const count = this.getReadCount()\n this.positionReadCount.set(this.position, count + 1)\n if (count > 0) this.recursiveReadCount++\n },\n}\n\ntype CursorConfig = { recursiveReadLimit?: number | undefined }\n\nexport type CreateCursorErrorType =\n | CursorErrorType\n | StaticCursorErrorType\n | ErrorType\n\nexport function createCursor(\n bytes: ByteArray,\n { recursiveReadLimit = 8_192 }: CursorConfig = {},\n): Cursor {\n const cursor: Cursor = Object.create(staticCursor)\n cursor.bytes = bytes\n cursor.dataView = new DataView(\n bytes.buffer ?? bytes,\n bytes.byteOffset,\n bytes.byteLength,\n )\n cursor.positionReadCount = new Map()\n cursor.recursiveReadLimit = recursiveReadLimit\n return cursor\n}\n", "import { InvalidBytesBooleanError } from '../../errors/encoding.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type TrimErrorType, trim } from '../data/trim.js'\n\nimport {\n type AssertSizeErrorType,\n assertSize,\n type HexToBigIntErrorType,\n type HexToNumberErrorType,\n hexToBigInt,\n hexToNumber,\n} from './fromHex.js'\nimport { type BytesToHexErrorType, bytesToHex } from './toHex.js'\n\nexport type FromBytesParameters<\n to extends 'string' | 'hex' | 'bigint' | 'number' | 'boolean',\n> =\n | to\n | {\n /** Size of the bytes. */\n size?: number | undefined\n /** Type to convert to. */\n to: to\n }\n\nexport type FromBytesReturnType = to extends 'string'\n ? string\n : to extends 'hex'\n ? Hex\n : to extends 'bigint'\n ? bigint\n : to extends 'number'\n ? number\n : to extends 'boolean'\n ? boolean\n : never\n\nexport type FromBytesErrorType =\n | BytesToHexErrorType\n | BytesToBigIntErrorType\n | BytesToBoolErrorType\n | BytesToNumberErrorType\n | BytesToStringErrorType\n | ErrorType\n\n/**\n * Decodes a byte array into a UTF-8 string, hex value, number, bigint or boolean.\n *\n * - Docs: https://viem.sh/docs/utilities/fromBytes\n * - Example: https://viem.sh/docs/utilities/fromBytes#usage\n *\n * @param bytes Byte array to decode.\n * @param toOrOpts Type to convert to or options.\n * @returns Decoded value.\n *\n * @example\n * import { fromBytes } from 'viem'\n * const data = fromBytes(new Uint8Array([1, 164]), 'number')\n * // 420\n *\n * @example\n * import { fromBytes } from 'viem'\n * const data = fromBytes(\n * new Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]),\n * 'string'\n * )\n * // 'Hello world'\n */\nexport function fromBytes<\n to extends 'string' | 'hex' | 'bigint' | 'number' | 'boolean',\n>(\n bytes: ByteArray,\n toOrOpts: FromBytesParameters,\n): FromBytesReturnType {\n const opts = typeof toOrOpts === 'string' ? { to: toOrOpts } : toOrOpts\n const to = opts.to\n\n if (to === 'number')\n return bytesToNumber(bytes, opts) as FromBytesReturnType\n if (to === 'bigint')\n return bytesToBigInt(bytes, opts) as FromBytesReturnType\n if (to === 'boolean')\n return bytesToBool(bytes, opts) as FromBytesReturnType\n if (to === 'string')\n return bytesToString(bytes, opts) as FromBytesReturnType\n return bytesToHex(bytes, opts) as FromBytesReturnType\n}\n\nexport type BytesToBigIntOpts = {\n /** Whether or not the number of a signed representation. */\n signed?: boolean | undefined\n /** Size of the bytes. */\n size?: number | undefined\n}\n\nexport type BytesToBigIntErrorType =\n | BytesToHexErrorType\n | HexToBigIntErrorType\n | ErrorType\n\n/**\n * Decodes a byte array into a bigint.\n *\n * - Docs: https://viem.sh/docs/utilities/fromBytes#bytestobigint\n *\n * @param bytes Byte array to decode.\n * @param opts Options.\n * @returns BigInt value.\n *\n * @example\n * import { bytesToBigInt } from 'viem'\n * const data = bytesToBigInt(new Uint8Array([1, 164]))\n * // 420n\n */\nexport function bytesToBigInt(\n bytes: ByteArray,\n opts: BytesToBigIntOpts = {},\n): bigint {\n if (typeof opts.size !== 'undefined') assertSize(bytes, { size: opts.size })\n const hex = bytesToHex(bytes, opts)\n return hexToBigInt(hex, opts)\n}\n\nexport type BytesToBoolOpts = {\n /** Size of the bytes. */\n size?: number | undefined\n}\n\nexport type BytesToBoolErrorType =\n | AssertSizeErrorType\n | TrimErrorType\n | ErrorType\n\n/**\n * Decodes a byte array into a boolean.\n *\n * - Docs: https://viem.sh/docs/utilities/fromBytes#bytestobool\n *\n * @param bytes Byte array to decode.\n * @param opts Options.\n * @returns Boolean value.\n *\n * @example\n * import { bytesToBool } from 'viem'\n * const data = bytesToBool(new Uint8Array([1]))\n * // true\n */\nexport function bytesToBool(\n bytes_: ByteArray,\n opts: BytesToBoolOpts = {},\n): boolean {\n let bytes = bytes_\n if (typeof opts.size !== 'undefined') {\n assertSize(bytes, { size: opts.size })\n bytes = trim(bytes)\n }\n if (bytes.length > 1 || bytes[0] > 1)\n throw new InvalidBytesBooleanError(bytes)\n return Boolean(bytes[0])\n}\n\nexport type BytesToNumberOpts = BytesToBigIntOpts\n\nexport type BytesToNumberErrorType =\n | BytesToHexErrorType\n | HexToNumberErrorType\n | ErrorType\n\n/**\n * Decodes a byte array into a number.\n *\n * - Docs: https://viem.sh/docs/utilities/fromBytes#bytestonumber\n *\n * @param bytes Byte array to decode.\n * @param opts Options.\n * @returns Number value.\n *\n * @example\n * import { bytesToNumber } from 'viem'\n * const data = bytesToNumber(new Uint8Array([1, 164]))\n * // 420\n */\nexport function bytesToNumber(\n bytes: ByteArray,\n opts: BytesToNumberOpts = {},\n): number {\n if (typeof opts.size !== 'undefined') assertSize(bytes, { size: opts.size })\n const hex = bytesToHex(bytes, opts)\n return hexToNumber(hex, opts)\n}\n\nexport type BytesToStringOpts = {\n /** Size of the bytes. */\n size?: number | undefined\n}\n\nexport type BytesToStringErrorType =\n | AssertSizeErrorType\n | TrimErrorType\n | ErrorType\n\n/**\n * Decodes a byte array into a UTF-8 string.\n *\n * - Docs: https://viem.sh/docs/utilities/fromBytes#bytestostring\n *\n * @param bytes Byte array to decode.\n * @param opts Options.\n * @returns String value.\n *\n * @example\n * import { bytesToString } from 'viem'\n * const data = bytesToString(new Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]))\n * // 'Hello world'\n */\nexport function bytesToString(\n bytes_: ByteArray,\n opts: BytesToStringOpts = {},\n): string {\n let bytes = bytes_\n if (typeof opts.size !== 'undefined') {\n assertSize(bytes, { size: opts.size })\n bytes = trim(bytes, { dir: 'right' })\n }\n return new TextDecoder().decode(bytes)\n}\n", "import type {\n AbiParameter,\n AbiParameterKind,\n AbiParametersToPrimitiveTypes,\n} from 'abitype'\nimport {\n AbiDecodingDataSizeTooSmallError,\n AbiDecodingZeroDataError,\n InvalidAbiDecodingTypeError,\n type InvalidAbiDecodingTypeErrorType,\n} from '../../errors/abi.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport {\n type ChecksumAddressErrorType,\n checksumAddress,\n} from '../address/getAddress.js'\nimport {\n type CreateCursorErrorType,\n type Cursor,\n createCursor,\n} from '../cursor.js'\nimport { type SizeErrorType, size } from '../data/size.js'\nimport { type SliceBytesErrorType, sliceBytes } from '../data/slice.js'\nimport { type TrimErrorType, trim } from '../data/trim.js'\nimport {\n type BytesToBigIntErrorType,\n type BytesToBoolErrorType,\n type BytesToNumberErrorType,\n type BytesToStringErrorType,\n bytesToBigInt,\n bytesToBool,\n bytesToNumber,\n bytesToString,\n} from '../encoding/fromBytes.js'\nimport { type HexToBytesErrorType, hexToBytes } from '../encoding/toBytes.js'\nimport { type BytesToHexErrorType, bytesToHex } from '../encoding/toHex.js'\nimport { getArrayComponents } from './encodeAbiParameters.js'\n\nexport type DecodeAbiParametersReturnType<\n params extends readonly AbiParameter[] = readonly AbiParameter[],\n> = AbiParametersToPrimitiveTypes<\n params extends readonly AbiParameter[] ? params : AbiParameter[],\n AbiParameterKind,\n true\n>\n\nexport type DecodeAbiParametersErrorType =\n | HexToBytesErrorType\n | BytesToHexErrorType\n | DecodeParameterErrorType\n | SizeErrorType\n | CreateCursorErrorType\n | ErrorType\n\nexport function decodeAbiParameters<\n const params extends readonly AbiParameter[],\n>(\n params: params,\n data: ByteArray | Hex,\n): DecodeAbiParametersReturnType {\n const bytes = typeof data === 'string' ? hexToBytes(data) : data\n const cursor = createCursor(bytes)\n\n if (size(bytes) === 0 && params.length > 0)\n throw new AbiDecodingZeroDataError()\n if (size(data) && size(data) < 32)\n throw new AbiDecodingDataSizeTooSmallError({\n data: typeof data === 'string' ? data : bytesToHex(data),\n params: params as readonly AbiParameter[],\n size: size(data),\n })\n\n let consumed = 0\n const values = []\n for (let i = 0; i < params.length; ++i) {\n const param = params[i]\n cursor.setPosition(consumed)\n const [data, consumed_] = decodeParameter(cursor, param, {\n staticPosition: 0,\n })\n consumed += consumed_\n values.push(data)\n }\n return values as never\n}\n\ntype DecodeParameterErrorType =\n | DecodeArrayErrorType\n | DecodeTupleErrorType\n | DecodeAddressErrorType\n | DecodeBoolErrorType\n | DecodeBytesErrorType\n | DecodeNumberErrorType\n | DecodeStringErrorType\n | InvalidAbiDecodingTypeErrorType\n\nfunction decodeParameter(\n cursor: Cursor,\n param: AbiParameter,\n { staticPosition }: { staticPosition: number },\n) {\n const arrayComponents = getArrayComponents(param.type)\n if (arrayComponents) {\n const [length, type] = arrayComponents\n return decodeArray(cursor, { ...param, type }, { length, staticPosition })\n }\n if (param.type === 'tuple')\n return decodeTuple(cursor, param as TupleAbiParameter, { staticPosition })\n\n if (param.type === 'address') return decodeAddress(cursor)\n if (param.type === 'bool') return decodeBool(cursor)\n if (param.type.startsWith('bytes'))\n return decodeBytes(cursor, param, { staticPosition })\n if (param.type.startsWith('uint') || param.type.startsWith('int'))\n return decodeNumber(cursor, param)\n if (param.type === 'string') return decodeString(cursor, { staticPosition })\n throw new InvalidAbiDecodingTypeError(param.type, {\n docsPath: '/docs/contract/decodeAbiParameters',\n })\n}\n\n////////////////////////////////////////////////////////////////////\n// Type Decoders\n\nconst sizeOfLength = 32\nconst sizeOfOffset = 32\n\ntype DecodeAddressErrorType =\n | ChecksumAddressErrorType\n | BytesToHexErrorType\n | SliceBytesErrorType\n | ErrorType\n\nfunction decodeAddress(cursor: Cursor) {\n const value = cursor.readBytes(32)\n return [checksumAddress(bytesToHex(sliceBytes(value, -20))), 32]\n}\n\ntype DecodeArrayErrorType = BytesToNumberErrorType | ErrorType\n\nfunction decodeArray(\n cursor: Cursor,\n param: AbiParameter,\n { length, staticPosition }: { length: number | null; staticPosition: number },\n) {\n // If the length of the array is not known in advance (dynamic array),\n // this means we will need to wonder off to the pointer and decode.\n if (!length) {\n // Dealing with a dynamic type, so get the offset of the array data.\n const offset = bytesToNumber(cursor.readBytes(sizeOfOffset))\n\n // Start is the static position of current slot + offset.\n const start = staticPosition + offset\n const startOfData = start + sizeOfLength\n\n // Get the length of the array from the offset.\n cursor.setPosition(start)\n const length = bytesToNumber(cursor.readBytes(sizeOfLength))\n\n // Check if the array has any dynamic children.\n const dynamicChild = hasDynamicChild(param)\n\n let consumed = 0\n const value: unknown[] = []\n for (let i = 0; i < length; ++i) {\n // If any of the children is dynamic, then all elements will be offset pointer, thus size of one slot (32 bytes).\n // Otherwise, elements will be the size of their encoding (consumed bytes).\n cursor.setPosition(startOfData + (dynamicChild ? i * 32 : consumed))\n const [data, consumed_] = decodeParameter(cursor, param, {\n staticPosition: startOfData,\n })\n consumed += consumed_\n value.push(data)\n }\n\n // As we have gone wondering, restore to the original position + next slot.\n cursor.setPosition(staticPosition + 32)\n return [value, 32]\n }\n\n // If the length of the array is known in advance,\n // and the length of an element deeply nested in the array is not known,\n // we need to decode the offset of the array data.\n if (hasDynamicChild(param)) {\n // Dealing with dynamic types, so get the offset of the array data.\n const offset = bytesToNumber(cursor.readBytes(sizeOfOffset))\n\n // Start is the static position of current slot + offset.\n const start = staticPosition + offset\n\n const value: unknown[] = []\n for (let i = 0; i < length; ++i) {\n // Move cursor along to the next slot (next offset pointer).\n cursor.setPosition(start + i * 32)\n const [data] = decodeParameter(cursor, param, {\n staticPosition: start,\n })\n value.push(data)\n }\n\n // As we have gone wondering, restore to the original position + next slot.\n cursor.setPosition(staticPosition + 32)\n return [value, 32]\n }\n\n // If the length of the array is known in advance and the array is deeply static,\n // then we can just decode each element in sequence.\n let consumed = 0\n const value: unknown[] = []\n for (let i = 0; i < length; ++i) {\n const [data, consumed_] = decodeParameter(cursor, param, {\n staticPosition: staticPosition + consumed,\n })\n consumed += consumed_\n value.push(data)\n }\n return [value, consumed]\n}\n\ntype DecodeBoolErrorType = BytesToBoolErrorType | ErrorType\n\nfunction decodeBool(cursor: Cursor) {\n return [bytesToBool(cursor.readBytes(32), { size: 32 }), 32]\n}\n\ntype DecodeBytesErrorType =\n | BytesToNumberErrorType\n | BytesToHexErrorType\n | ErrorType\n\nfunction decodeBytes(\n cursor: Cursor,\n param: AbiParameter,\n { staticPosition }: { staticPosition: number },\n) {\n const [_, size] = param.type.split('bytes')\n if (!size) {\n // Dealing with dynamic types, so get the offset of the bytes data.\n const offset = bytesToNumber(cursor.readBytes(32))\n\n // Set position of the cursor to start of bytes data.\n cursor.setPosition(staticPosition + offset)\n\n const length = bytesToNumber(cursor.readBytes(32))\n\n // If there is no length, we have zero data.\n if (length === 0) {\n // As we have gone wondering, restore to the original position + next slot.\n cursor.setPosition(staticPosition + 32)\n return ['0x', 32]\n }\n\n const data = cursor.readBytes(length)\n\n // As we have gone wondering, restore to the original position + next slot.\n cursor.setPosition(staticPosition + 32)\n return [bytesToHex(data), 32]\n }\n\n const value = bytesToHex(cursor.readBytes(Number.parseInt(size, 10), 32))\n return [value, 32]\n}\n\ntype DecodeNumberErrorType =\n | BytesToNumberErrorType\n | BytesToBigIntErrorType\n | ErrorType\n\nfunction decodeNumber(cursor: Cursor, param: AbiParameter) {\n const signed = param.type.startsWith('int')\n const size = Number.parseInt(param.type.split('int')[1] || '256', 10)\n const value = cursor.readBytes(32)\n return [\n size > 48\n ? bytesToBigInt(value, { signed })\n : bytesToNumber(value, { signed }),\n 32,\n ]\n}\n\ntype TupleAbiParameter = AbiParameter & { components: readonly AbiParameter[] }\n\ntype DecodeTupleErrorType = BytesToNumberErrorType | ErrorType\n\nfunction decodeTuple(\n cursor: Cursor,\n param: TupleAbiParameter,\n { staticPosition }: { staticPosition: number },\n) {\n // Tuples can have unnamed components (i.e. they are arrays), so we must\n // determine whether the tuple is named or unnamed. In the case of a named\n // tuple, the value will be an object where each property is the name of the\n // component. In the case of an unnamed tuple, the value will be an array.\n const hasUnnamedChild =\n param.components.length === 0 || param.components.some(({ name }) => !name)\n\n // Initialize the value to an object or an array, depending on whether the\n // tuple is named or unnamed.\n const value: any = hasUnnamedChild ? [] : {}\n let consumed = 0\n\n // If the tuple has a dynamic child, we must first decode the offset to the\n // tuple data.\n if (hasDynamicChild(param)) {\n // Dealing with dynamic types, so get the offset of the tuple data.\n const offset = bytesToNumber(cursor.readBytes(sizeOfOffset))\n\n // Start is the static position of referencing slot + offset.\n const start = staticPosition + offset\n\n for (let i = 0; i < param.components.length; ++i) {\n const component = param.components[i]\n cursor.setPosition(start + consumed)\n const [data, consumed_] = decodeParameter(cursor, component, {\n staticPosition: start,\n })\n consumed += consumed_\n value[hasUnnamedChild ? i : component?.name!] = data\n }\n\n // As we have gone wondering, restore to the original position + next slot.\n cursor.setPosition(staticPosition + 32)\n return [value, 32]\n }\n\n // If the tuple has static children, we can just decode each component\n // in sequence.\n for (let i = 0; i < param.components.length; ++i) {\n const component = param.components[i]\n const [data, consumed_] = decodeParameter(cursor, component, {\n staticPosition,\n })\n value[hasUnnamedChild ? i : component?.name!] = data\n consumed += consumed_\n }\n return [value, consumed]\n}\n\ntype DecodeStringErrorType =\n | BytesToNumberErrorType\n | BytesToStringErrorType\n | TrimErrorType\n | ErrorType\n\nfunction decodeString(\n cursor: Cursor,\n { staticPosition }: { staticPosition: number },\n) {\n // Get offset to start of string data.\n const offset = bytesToNumber(cursor.readBytes(32))\n\n // Start is the static position of current slot + offset.\n const start = staticPosition + offset\n cursor.setPosition(start)\n\n const length = bytesToNumber(cursor.readBytes(32))\n\n // If there is no length, we have zero data (empty string).\n if (length === 0) {\n cursor.setPosition(staticPosition + 32)\n return ['', 32]\n }\n\n const data = cursor.readBytes(length, 32)\n const value = bytesToString(trim(data))\n\n // As we have gone wondering, restore to the original position + next slot.\n cursor.setPosition(staticPosition + 32)\n\n return [value, 32]\n}\n\nfunction hasDynamicChild(param: AbiParameter) {\n const { type } = param\n if (type === 'string') return true\n if (type === 'bytes') return true\n if (type.endsWith('[]')) return true\n\n if (type === 'tuple') return (param as any).components?.some(hasDynamicChild)\n\n const arrayComponents = getArrayComponents(param.type)\n if (\n arrayComponents &&\n hasDynamicChild({ ...param, type: arrayComponents[1] } as AbiParameter)\n )\n return true\n\n return false\n}\n", "import type { Abi, ExtractAbiError } from 'abitype'\n\nimport { solidityError, solidityPanic } from '../../constants/solidity.js'\nimport {\n AbiDecodingZeroDataError,\n type AbiDecodingZeroDataErrorType,\n AbiErrorSignatureNotFoundError,\n type AbiErrorSignatureNotFoundErrorType,\n} from '../../errors/abi.js'\nimport type { BaseError } from '../../errors/base.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n AbiItem,\n ContractErrorArgs,\n ContractErrorName,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { IsNarrowable, UnionEvaluate } from '../../types/utils.js'\nimport { slice } from '../data/slice.js'\nimport {\n type ToFunctionSelectorErrorType,\n toFunctionSelector,\n} from '../hash/toFunctionSelector.js'\nimport {\n type DecodeAbiParametersErrorType,\n decodeAbiParameters,\n} from './decodeAbiParameters.js'\nimport { type FormatAbiItemErrorType, formatAbiItem } from './formatAbiItem.js'\n\nexport type DecodeErrorResultParameters<\n abi extends Abi | readonly unknown[] = Abi,\n> = { abi?: abi | undefined; data: Hex; cause?: BaseError | Error | undefined }\n\nexport type DecodeErrorResultReturnType<\n abi extends Abi | readonly unknown[] = Abi,\n ///\n allErrorNames extends ContractErrorName = ContractErrorName,\n> = IsNarrowable extends true\n ? UnionEvaluate<\n {\n [errorName in allErrorNames]: {\n abiItem: abi extends Abi\n ? Abi extends abi\n ? AbiItem\n : ExtractAbiError\n : AbiItem\n args: ContractErrorArgs\n errorName: errorName\n }\n }[allErrorNames]\n >\n : {\n abiItem: AbiItem\n args: readonly unknown[] | undefined\n errorName: string\n }\n\nexport type DecodeErrorResultErrorType =\n | AbiDecodingZeroDataErrorType\n | AbiErrorSignatureNotFoundErrorType\n | DecodeAbiParametersErrorType\n | FormatAbiItemErrorType\n | ToFunctionSelectorErrorType\n | ErrorType\n\nexport function decodeErrorResult(\n parameters: DecodeErrorResultParameters,\n): DecodeErrorResultReturnType {\n const { abi, data, cause } = parameters as DecodeErrorResultParameters\n\n const signature = slice(data, 0, 4)\n if (signature === '0x') throw new AbiDecodingZeroDataError({ cause })\n\n const abi_ = [...(abi || []), solidityError, solidityPanic]\n const abiItem = abi_.find(\n (x) =>\n x.type === 'error' && signature === toFunctionSelector(formatAbiItem(x)),\n )\n if (!abiItem)\n throw new AbiErrorSignatureNotFoundError(signature, {\n docsPath: '/docs/contract/decodeErrorResult',\n cause,\n })\n return {\n abiItem,\n args:\n 'inputs' in abiItem && abiItem.inputs && abiItem.inputs.length > 0\n ? decodeAbiParameters(abiItem.inputs, slice(data, 4))\n : undefined,\n errorName: (abiItem as { name: string }).name,\n } as DecodeErrorResultReturnType\n}\n", "import type { ErrorType } from '../errors/utils.js'\n\nexport type StringifyErrorType = ErrorType\n\nexport const stringify: typeof JSON.stringify = (value, replacer, space) =>\n JSON.stringify(\n value,\n (key, value_) => {\n const value = typeof value_ === 'bigint' ? value_.toString() : value_\n return typeof replacer === 'function' ? replacer(key, value) : value\n },\n space,\n )\n", "import type { AbiParameter } from 'abitype'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { AbiItem } from '../../types/contract.js'\nimport { stringify } from '../stringify.js'\n\nexport type FormatAbiItemWithArgsErrorType = ErrorType\n\nexport function formatAbiItemWithArgs({\n abiItem,\n args,\n includeFunctionName = true,\n includeName = false,\n}: {\n abiItem: AbiItem\n args: readonly unknown[]\n includeFunctionName?: boolean | undefined\n includeName?: boolean | undefined\n}) {\n if (!('name' in abiItem)) return\n if (!('inputs' in abiItem)) return\n if (!abiItem.inputs) return\n return `${includeFunctionName ? abiItem.name : ''}(${abiItem.inputs\n .map(\n (input: AbiParameter, i: number) =>\n `${includeName && input.name ? `${input.name}: ` : ''}${\n typeof args[i] === 'object' ? stringify(args[i]) : args[i]\n }`,\n )\n .join(', ')})`\n}\n", "export const etherUnits = {\n gwei: 9,\n wei: 18,\n}\nexport const gweiUnits = {\n ether: -9,\n wei: 9,\n}\nexport const weiUnits = {\n ether: -18,\n gwei: -9,\n}\n", "import type { ErrorType } from '../../errors/utils.js'\n\nexport type FormatUnitsErrorType = ErrorType\n\n/**\n * Divides a number by a given exponent of base 10 (10exponent), and formats it into a string representation of the number..\n *\n * - Docs: https://viem.sh/docs/utilities/formatUnits\n *\n * @example\n * import { formatUnits } from 'viem'\n *\n * formatUnits(420000000000n, 9)\n * // '420'\n */\nexport function formatUnits(value: bigint, decimals: number) {\n let display = value.toString()\n\n const negative = display.startsWith('-')\n if (negative) display = display.slice(1)\n\n display = display.padStart(decimals, '0')\n\n let [integer, fraction] = [\n display.slice(0, display.length - decimals),\n display.slice(display.length - decimals),\n ]\n fraction = fraction.replace(/(0+)$/, '')\n return `${negative ? '-' : ''}${integer || '0'}${\n fraction ? `.${fraction}` : ''\n }`\n}\n", "import { etherUnits } from '../../constants/unit.js'\n\nimport { type FormatUnitsErrorType, formatUnits } from './formatUnits.js'\n\nexport type FormatEtherErrorType = FormatUnitsErrorType\n\n/**\n * Converts numerical wei to a string representation of ether.\n *\n * - Docs: https://viem.sh/docs/utilities/formatEther\n *\n * @example\n * import { formatEther } from 'viem'\n *\n * formatEther(1000000000000000000n)\n * // '1'\n */\nexport function formatEther(wei: bigint, unit: 'wei' | 'gwei' = 'wei') {\n return formatUnits(wei, etherUnits[unit])\n}\n", "import { gweiUnits } from '../../constants/unit.js'\n\nimport { type FormatUnitsErrorType, formatUnits } from './formatUnits.js'\n\nexport type FormatGweiErrorType = FormatUnitsErrorType\n\n/**\n * Converts numerical wei to a string representation of gwei.\n *\n * - Docs: https://viem.sh/docs/utilities/formatGwei\n *\n * @example\n * import { formatGwei } from 'viem'\n *\n * formatGwei(1000000000n)\n * // '1'\n */\nexport function formatGwei(wei: bigint, unit: 'wei' = 'wei') {\n return formatUnits(wei, gweiUnits[unit])\n}\n", "import type { StateMapping, StateOverride } from '../types/stateOverride.js'\nimport { BaseError } from './base.js'\n\nexport type AccountStateConflictErrorType = AccountStateConflictError & {\n name: 'AccountStateConflictError'\n}\n\nexport class AccountStateConflictError extends BaseError {\n constructor({ address }: { address: string }) {\n super(`State for account \"${address}\" is set multiple times.`, {\n name: 'AccountStateConflictError',\n })\n }\n}\n\nexport type StateAssignmentConflictErrorType = StateAssignmentConflictError & {\n name: 'StateAssignmentConflictError'\n}\n\nexport class StateAssignmentConflictError extends BaseError {\n constructor() {\n super('state and stateDiff are set on the same account.', {\n name: 'StateAssignmentConflictError',\n })\n }\n}\n\n/** @internal */\nexport function prettyStateMapping(stateMapping: StateMapping) {\n return stateMapping.reduce((pretty, { slot, value }) => {\n return `${pretty} ${slot}: ${value}\\n`\n }, '')\n}\n\nexport function prettyStateOverride(stateOverride: StateOverride) {\n return stateOverride\n .reduce((pretty, { address, ...state }) => {\n let val = `${pretty} ${address}:\\n`\n if (state.nonce) val += ` nonce: ${state.nonce}\\n`\n if (state.balance) val += ` balance: ${state.balance}\\n`\n if (state.code) val += ` code: ${state.code}\\n`\n if (state.state) {\n val += ' state:\\n'\n val += prettyStateMapping(state.state)\n }\n if (state.stateDiff) {\n val += ' stateDiff:\\n'\n val += prettyStateMapping(state.stateDiff)\n }\n return val\n }, ' State Override:\\n')\n .slice(0, -1)\n}\n", "import type { Account } from '../accounts/types.js'\nimport type { SendTransactionParameters } from '../actions/wallet/sendTransaction.js'\nimport type { BlockTag } from '../types/block.js'\nimport type { Chain } from '../types/chain.js'\nimport type { Hash, Hex } from '../types/misc.js'\nimport type {\n TransactionReceipt,\n TransactionType,\n} from '../types/transaction.js'\nimport { formatEther } from '../utils/unit/formatEther.js'\nimport { formatGwei } from '../utils/unit/formatGwei.js'\n\nimport { BaseError } from './base.js'\n\nexport function prettyPrint(\n args: Record,\n) {\n const entries = Object.entries(args)\n .map(([key, value]) => {\n if (value === undefined || value === false) return null\n return [key, value]\n })\n .filter(Boolean) as [string, string][]\n const maxLength = entries.reduce((acc, [key]) => Math.max(acc, key.length), 0)\n return entries\n .map(([key, value]) => ` ${`${key}:`.padEnd(maxLength + 1)} ${value}`)\n .join('\\n')\n}\n\nexport type FeeConflictErrorType = FeeConflictError & {\n name: 'FeeConflictError'\n}\nexport class FeeConflictError extends BaseError {\n constructor() {\n super(\n [\n 'Cannot specify both a `gasPrice` and a `maxFeePerGas`/`maxPriorityFeePerGas`.',\n 'Use `maxFeePerGas`/`maxPriorityFeePerGas` for EIP-1559 compatible networks, and `gasPrice` for others.',\n ].join('\\n'),\n { name: 'FeeConflictError' },\n )\n }\n}\n\nexport type InvalidLegacyVErrorType = InvalidLegacyVError & {\n name: 'InvalidLegacyVError'\n}\nexport class InvalidLegacyVError extends BaseError {\n constructor({ v }: { v: bigint }) {\n super(`Invalid \\`v\\` value \"${v}\". Expected 27 or 28.`, {\n name: 'InvalidLegacyVError',\n })\n }\n}\n\nexport type InvalidSerializableTransactionErrorType =\n InvalidSerializableTransactionError & {\n name: 'InvalidSerializableTransactionError'\n }\nexport class InvalidSerializableTransactionError extends BaseError {\n constructor({ transaction }: { transaction: Record }) {\n super('Cannot infer a transaction type from provided transaction.', {\n metaMessages: [\n 'Provided Transaction:',\n '{',\n prettyPrint(transaction),\n '}',\n '',\n 'To infer the type, either provide:',\n '- a `type` to the Transaction, or',\n '- an EIP-1559 Transaction with `maxFeePerGas`, or',\n '- an EIP-2930 Transaction with `gasPrice` & `accessList`, or',\n '- an EIP-4844 Transaction with `blobs`, `blobVersionedHashes`, `sidecars`, or',\n '- an EIP-7702 Transaction with `authorizationList`, or',\n '- a Legacy Transaction with `gasPrice`',\n ],\n name: 'InvalidSerializableTransactionError',\n })\n }\n}\n\nexport type InvalidSerializedTransactionTypeErrorType =\n InvalidSerializedTransactionTypeError & {\n name: 'InvalidSerializedTransactionTypeError'\n }\nexport class InvalidSerializedTransactionTypeError extends BaseError {\n serializedType: Hex\n\n constructor({ serializedType }: { serializedType: Hex }) {\n super(`Serialized transaction type \"${serializedType}\" is invalid.`, {\n name: 'InvalidSerializedTransactionType',\n })\n\n this.serializedType = serializedType\n }\n}\n\nexport type InvalidSerializedTransactionErrorType =\n InvalidSerializedTransactionError & {\n name: 'InvalidSerializedTransactionError'\n }\nexport class InvalidSerializedTransactionError extends BaseError {\n serializedTransaction: Hex\n type: TransactionType\n\n constructor({\n attributes,\n serializedTransaction,\n type,\n }: {\n attributes: Record\n serializedTransaction: Hex\n type: TransactionType\n }) {\n const missing = Object.entries(attributes)\n .map(([key, value]) => (typeof value === 'undefined' ? key : undefined))\n .filter(Boolean)\n super(`Invalid serialized transaction of type \"${type}\" was provided.`, {\n metaMessages: [\n `Serialized Transaction: \"${serializedTransaction}\"`,\n missing.length > 0 ? `Missing Attributes: ${missing.join(', ')}` : '',\n ].filter(Boolean),\n name: 'InvalidSerializedTransactionError',\n })\n\n this.serializedTransaction = serializedTransaction\n this.type = type\n }\n}\n\nexport type InvalidStorageKeySizeErrorType = InvalidStorageKeySizeError & {\n name: 'InvalidStorageKeySizeError'\n}\nexport class InvalidStorageKeySizeError extends BaseError {\n constructor({ storageKey }: { storageKey: Hex }) {\n super(\n `Size for storage key \"${storageKey}\" is invalid. Expected 32 bytes. Got ${Math.floor(\n (storageKey.length - 2) / 2,\n )} bytes.`,\n { name: 'InvalidStorageKeySizeError' },\n )\n }\n}\n\nexport type TransactionExecutionErrorType = TransactionExecutionError & {\n name: 'TransactionExecutionError'\n}\nexport class TransactionExecutionError extends BaseError {\n override cause: BaseError\n\n constructor(\n cause: BaseError,\n {\n account,\n docsPath,\n chain,\n data,\n gas,\n gasPrice,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce,\n to,\n value,\n }: Omit & {\n account: Account | null\n chain?: Chain | undefined\n docsPath?: string | undefined\n },\n ) {\n const prettyArgs = prettyPrint({\n chain: chain && `${chain?.name} (id: ${chain?.id})`,\n from: account?.address,\n to,\n value:\n typeof value !== 'undefined' &&\n `${formatEther(value)} ${chain?.nativeCurrency?.symbol || 'ETH'}`,\n data,\n gas,\n gasPrice:\n typeof gasPrice !== 'undefined' && `${formatGwei(gasPrice)} gwei`,\n maxFeePerGas:\n typeof maxFeePerGas !== 'undefined' &&\n `${formatGwei(maxFeePerGas)} gwei`,\n maxPriorityFeePerGas:\n typeof maxPriorityFeePerGas !== 'undefined' &&\n `${formatGwei(maxPriorityFeePerGas)} gwei`,\n nonce,\n })\n\n super(cause.shortMessage, {\n cause,\n docsPath,\n metaMessages: [\n ...(cause.metaMessages ? [...cause.metaMessages, ' '] : []),\n 'Request Arguments:',\n prettyArgs,\n ].filter(Boolean) as string[],\n name: 'TransactionExecutionError',\n })\n this.cause = cause\n }\n}\n\nexport type TransactionNotFoundErrorType = TransactionNotFoundError & {\n name: 'TransactionNotFoundError'\n}\nexport class TransactionNotFoundError extends BaseError {\n constructor({\n blockHash,\n blockNumber,\n blockTag,\n hash,\n index,\n }: {\n blockHash?: Hash | undefined\n blockNumber?: bigint | undefined\n blockTag?: BlockTag | undefined\n hash?: Hash | undefined\n index?: number | undefined\n }) {\n let identifier = 'Transaction'\n if (blockTag && index !== undefined)\n identifier = `Transaction at block time \"${blockTag}\" at index \"${index}\"`\n if (blockHash && index !== undefined)\n identifier = `Transaction at block hash \"${blockHash}\" at index \"${index}\"`\n if (blockNumber && index !== undefined)\n identifier = `Transaction at block number \"${blockNumber}\" at index \"${index}\"`\n if (hash) identifier = `Transaction with hash \"${hash}\"`\n super(`${identifier} could not be found.`, {\n name: 'TransactionNotFoundError',\n })\n }\n}\n\nexport type TransactionReceiptNotFoundErrorType =\n TransactionReceiptNotFoundError & {\n name: 'TransactionReceiptNotFoundError'\n }\nexport class TransactionReceiptNotFoundError extends BaseError {\n constructor({ hash }: { hash: Hash }) {\n super(\n `Transaction receipt with hash \"${hash}\" could not be found. The Transaction may not be processed on a block yet.`,\n {\n name: 'TransactionReceiptNotFoundError',\n },\n )\n }\n}\n\nexport type TransactionReceiptRevertedErrorType =\n TransactionReceiptRevertedError & {\n name: 'TransactionReceiptRevertedError'\n }\nexport class TransactionReceiptRevertedError extends BaseError {\n receipt: TransactionReceipt\n\n constructor({ receipt }: { receipt: TransactionReceipt }) {\n super(`Transaction with hash \"${receipt.transactionHash}\" reverted.`, {\n metaMessages: [\n 'The receipt marked the transaction as \"reverted\". This could mean that the function on the contract you are trying to call threw an error.',\n ' ',\n 'You can attempt to extract the revert reason by:',\n '- calling the `simulateContract` or `simulateCalls` Action with the `abi` and `functionName` of the contract',\n '- using the `call` Action with raw `data`',\n ],\n name: 'TransactionReceiptRevertedError',\n })\n\n this.receipt = receipt\n }\n}\n\nexport type WaitForTransactionReceiptTimeoutErrorType =\n WaitForTransactionReceiptTimeoutError & {\n name: 'WaitForTransactionReceiptTimeoutError'\n }\nexport class WaitForTransactionReceiptTimeoutError extends BaseError {\n constructor({ hash }: { hash: Hash }) {\n super(\n `Timed out while waiting for transaction with hash \"${hash}\" to be confirmed.`,\n { name: 'WaitForTransactionReceiptTimeoutError' },\n )\n }\n}\n", "import type { Address } from 'abitype'\n\nexport type ErrorType = Error & { name: name }\n\nexport const getContractAddress = (address: Address) => address\n\n/**\n * Returns the URL with any embedded basic-auth credentials stripped, so\n * error messages and logs don't leak secrets when an RPC URL like\n * `https://user:pass@host` is used.\n */\nexport const getUrl = (url: string) => {\n try {\n const parsed = new URL(url)\n if (!parsed.username && !parsed.password) return url\n parsed.username = ''\n parsed.password = ''\n return parsed.toString()\n } catch {\n return url\n }\n}\n", "import type { Abi, Address } from 'abitype'\n\nimport { parseAccount } from '../accounts/utils/parseAccount.js'\nimport type { CallParameters } from '../actions/public/call.js'\nimport { panicReasons } from '../constants/solidity.js'\nimport type { Chain } from '../types/chain.js'\nimport type { Hex } from '../types/misc.js'\nimport {\n type DecodeErrorResultReturnType,\n decodeErrorResult,\n} from '../utils/abi/decodeErrorResult.js'\nimport { formatAbiItem } from '../utils/abi/formatAbiItem.js'\nimport { formatAbiItemWithArgs } from '../utils/abi/formatAbiItemWithArgs.js'\nimport { getAbiItem } from '../utils/abi/getAbiItem.js'\nimport { formatEther } from '../utils/unit/formatEther.js'\nimport { formatGwei } from '../utils/unit/formatGwei.js'\n\nimport { AbiErrorSignatureNotFoundError } from './abi.js'\nimport { BaseError } from './base.js'\nimport { prettyStateOverride } from './stateOverride.js'\nimport { prettyPrint } from './transaction.js'\nimport { getContractAddress } from './utils.js'\n\nexport type CallExecutionErrorType = CallExecutionError & {\n name: 'CallExecutionError'\n}\nexport class CallExecutionError extends BaseError {\n override cause: BaseError\n\n constructor(\n cause: BaseError,\n {\n account: account_,\n docsPath,\n chain,\n data,\n gas,\n gasPrice,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce,\n to,\n value,\n stateOverride,\n }: CallParameters & {\n chain?: Chain | undefined\n docsPath?: string | undefined\n },\n ) {\n const account = account_ ? parseAccount(account_) : undefined\n let prettyArgs = prettyPrint({\n from: account?.address,\n to,\n value:\n typeof value !== 'undefined' &&\n `${formatEther(value)} ${chain?.nativeCurrency?.symbol || 'ETH'}`,\n data,\n gas,\n gasPrice:\n typeof gasPrice !== 'undefined' && `${formatGwei(gasPrice)} gwei`,\n maxFeePerGas:\n typeof maxFeePerGas !== 'undefined' &&\n `${formatGwei(maxFeePerGas)} gwei`,\n maxPriorityFeePerGas:\n typeof maxPriorityFeePerGas !== 'undefined' &&\n `${formatGwei(maxPriorityFeePerGas)} gwei`,\n nonce,\n })\n\n if (stateOverride) {\n prettyArgs += `\\n${prettyStateOverride(stateOverride)}`\n }\n\n super(cause.shortMessage, {\n cause,\n docsPath,\n metaMessages: [\n ...(cause.metaMessages ? [...cause.metaMessages, ' '] : []),\n 'Raw Call Arguments:',\n prettyArgs,\n ].filter(Boolean) as string[],\n name: 'CallExecutionError',\n })\n this.cause = cause\n }\n}\n\nexport type ContractFunctionExecutionErrorType =\n ContractFunctionExecutionError & {\n name: 'ContractFunctionExecutionError'\n }\nexport class ContractFunctionExecutionError extends BaseError {\n abi: Abi\n args?: unknown[] | undefined\n override cause: BaseError\n contractAddress?: Address | undefined\n formattedArgs?: string | undefined\n functionName: string\n sender?: Address | undefined\n\n constructor(\n cause: BaseError,\n {\n abi,\n args,\n contractAddress,\n docsPath,\n functionName,\n sender,\n }: {\n abi: Abi\n args?: any | undefined\n contractAddress?: Address | undefined\n docsPath?: string | undefined\n functionName: string\n sender?: Address | undefined\n },\n ) {\n const abiItem = getAbiItem({ abi, args, name: functionName })\n const formattedArgs = abiItem\n ? formatAbiItemWithArgs({\n abiItem,\n args,\n includeFunctionName: false,\n includeName: false,\n })\n : undefined\n const functionWithParams = abiItem\n ? formatAbiItem(abiItem, { includeName: true })\n : undefined\n\n const prettyArgs = prettyPrint({\n address: contractAddress && getContractAddress(contractAddress),\n function: functionWithParams,\n args:\n formattedArgs &&\n formattedArgs !== '()' &&\n `${[...Array(functionName?.length ?? 0).keys()]\n .map(() => ' ')\n .join('')}${formattedArgs}`,\n sender,\n })\n\n super(\n cause.shortMessage ||\n `An unknown error occurred while executing the contract function \"${functionName}\".`,\n {\n cause,\n docsPath,\n metaMessages: [\n ...(cause.metaMessages ? [...cause.metaMessages, ' '] : []),\n prettyArgs && 'Contract Call:',\n prettyArgs,\n ].filter(Boolean) as string[],\n name: 'ContractFunctionExecutionError',\n },\n )\n this.abi = abi\n this.args = args\n this.cause = cause\n this.contractAddress = contractAddress\n this.functionName = functionName\n this.sender = sender\n }\n}\n\nexport type ContractFunctionRevertedErrorType =\n ContractFunctionRevertedError & {\n name: 'ContractFunctionRevertedError'\n }\nexport class ContractFunctionRevertedError extends BaseError {\n data?: DecodeErrorResultReturnType | undefined\n raw?: Hex | undefined\n reason?: string | undefined\n signature?: Hex | undefined\n\n constructor({\n abi,\n data,\n functionName,\n message,\n cause: error,\n }: {\n abi: Abi\n data?: Hex | undefined\n functionName: string\n message?: string | undefined\n cause?: BaseError | Error | undefined\n }) {\n let cause: Error | undefined\n let decodedData: DecodeErrorResultReturnType | undefined\n let metaMessages: string[] | undefined\n let reason: string | undefined\n if (data && data !== '0x') {\n try {\n decodedData = decodeErrorResult({ abi, data, cause: error })\n const { abiItem, errorName, args: errorArgs } = decodedData\n if (errorName === 'Error') {\n reason = (errorArgs as [string])[0]\n } else if (errorName === 'Panic') {\n const [firstArg] = errorArgs as [number]\n reason = panicReasons[firstArg as keyof typeof panicReasons]\n } else {\n const errorWithParams = abiItem\n ? formatAbiItem(abiItem, { includeName: true })\n : undefined\n const formattedArgs =\n abiItem && errorArgs\n ? formatAbiItemWithArgs({\n abiItem,\n args: errorArgs,\n includeFunctionName: false,\n includeName: false,\n })\n : undefined\n\n metaMessages = [\n errorWithParams ? `Error: ${errorWithParams}` : '',\n formattedArgs && formattedArgs !== '()'\n ? ` ${[...Array(errorName?.length ?? 0).keys()]\n .map(() => ' ')\n .join('')}${formattedArgs}`\n : '',\n ]\n }\n } catch (err) {\n cause = err as Error\n }\n } else if (message) reason = message\n\n let signature: Hex | undefined\n if (cause instanceof AbiErrorSignatureNotFoundError) {\n signature = cause.signature\n metaMessages = [\n `Unable to decode signature \"${signature}\" as it was not found on the provided ABI.`,\n 'Make sure you are using the correct ABI and that the error exists on it.',\n `You can look up the decoded signature here: https://4byte.sourcify.dev/?q=${signature}.`,\n ]\n }\n\n super(\n (reason && reason !== 'execution reverted') || signature\n ? [\n `The contract function \"${functionName}\" reverted with the following ${\n signature ? 'signature' : 'reason'\n }:`,\n reason || signature,\n ].join('\\n')\n : `The contract function \"${functionName}\" reverted.`,\n {\n cause: cause ?? error,\n metaMessages,\n name: 'ContractFunctionRevertedError',\n },\n )\n\n this.data = decodedData\n this.raw = data\n this.reason = reason\n this.signature = signature\n }\n}\n\nexport type ContractFunctionZeroDataErrorType =\n ContractFunctionZeroDataError & {\n name: 'ContractFunctionZeroDataError'\n }\nexport class ContractFunctionZeroDataError extends BaseError {\n constructor({\n functionName,\n cause,\n }: {\n functionName: string\n cause?: BaseError | Error | undefined\n }) {\n super(`The contract function \"${functionName}\" returned no data (\"0x\").`, {\n metaMessages: [\n 'This could be due to any of the following:',\n ` - The contract does not have the function \"${functionName}\",`,\n ' - The parameters passed to the contract function may be invalid, or',\n ' - The address is not a contract.',\n ],\n name: 'ContractFunctionZeroDataError',\n cause,\n })\n }\n}\n\nexport type CounterfactualDeploymentFailedErrorType =\n CounterfactualDeploymentFailedError & {\n name: 'CounterfactualDeploymentFailedError'\n }\nexport class CounterfactualDeploymentFailedError extends BaseError {\n constructor({ factory }: { factory?: Address | undefined }) {\n super(\n `Deployment for counterfactual contract call failed${\n factory ? ` for factory \"${factory}\".` : ''\n }`,\n {\n metaMessages: [\n 'Please ensure:',\n '- The `factory` is a valid contract deployment factory (ie. Create2 Factory, ERC-4337 Factory, etc).',\n '- The `factoryData` is a valid encoded function call for contract deployment function on the factory.',\n ],\n name: 'CounterfactualDeploymentFailedError',\n },\n )\n }\n}\n\nexport type RawContractErrorType = RawContractError & {\n name: 'RawContractError'\n}\nexport class RawContractError extends BaseError {\n code = 3\n\n data?: Hex | { data?: Hex | undefined } | undefined\n\n constructor({\n data,\n message,\n }: {\n data?: Hex | { data?: Hex | undefined } | undefined\n message?: string | undefined\n }) {\n super(message || '', { name: 'RawContractError' })\n this.data = data\n }\n}\n", "import { stringify } from '../utils/stringify.js'\n\nimport { BaseError } from './base.js'\nimport { getUrl } from './utils.js'\n\nexport type HttpRequestErrorType = HttpRequestError & {\n name: 'HttpRequestError'\n}\nexport class HttpRequestError extends BaseError {\n body?: { [x: string]: unknown } | { [y: string]: unknown }[] | undefined\n headers?: Headers | undefined\n status?: number | undefined\n url: string\n\n constructor({\n body,\n cause,\n details,\n headers,\n status,\n url,\n }: {\n body?: { [x: string]: unknown } | { [y: string]: unknown }[] | undefined\n cause?: Error | undefined\n details?: string | undefined\n headers?: Headers | undefined\n status?: number | undefined\n url: string\n }) {\n super('HTTP request failed.', {\n cause,\n details,\n metaMessages: [\n status && `Status: ${status}`,\n `URL: ${getUrl(url)}`,\n body && `Request body: ${stringify(body)}`,\n ].filter(Boolean) as string[],\n name: 'HttpRequestError',\n })\n this.body = body\n this.headers = headers\n this.status = status\n this.url = url\n }\n}\n\nexport type WebSocketRequestErrorType = WebSocketRequestError & {\n name: 'WebSocketRequestError'\n}\nexport class WebSocketRequestError extends BaseError {\n url: string\n constructor({\n body,\n cause,\n details,\n url,\n }: {\n body?: { [key: string]: unknown } | undefined\n cause?: Error | undefined\n details?: string | undefined\n url: string\n }) {\n super('WebSocket request failed.', {\n cause,\n details,\n metaMessages: [\n `URL: ${getUrl(url)}`,\n body && `Request body: ${stringify(body)}`,\n ].filter(Boolean) as string[],\n name: 'WebSocketRequestError',\n })\n this.url = url\n }\n}\n\nexport type RpcRequestErrorType = RpcRequestError & {\n name: 'RpcRequestError'\n}\nexport class RpcRequestError extends BaseError {\n code: number\n data?: unknown\n url: string\n constructor({\n body,\n error,\n url,\n }: {\n body: { [x: string]: unknown } | { [y: string]: unknown }[]\n error: { code: number; data?: unknown; message: string }\n url: string\n }) {\n super('RPC Request failed.', {\n cause: error as any,\n details: error.message,\n metaMessages: [`URL: ${getUrl(url)}`, `Request body: ${stringify(body)}`],\n name: 'RpcRequestError',\n })\n this.code = error.code\n this.data = error.data\n this.url = url\n }\n}\n\nexport type SocketClosedErrorType = SocketClosedError & {\n name: 'SocketClosedError'\n}\nexport class SocketClosedError extends BaseError {\n url: string | undefined\n constructor({\n url,\n }: {\n url?: string | undefined\n } = {}) {\n super('The socket has been closed.', {\n metaMessages: [url && `URL: ${getUrl(url)}`].filter(Boolean) as string[],\n name: 'SocketClosedError',\n })\n this.url = url\n }\n}\n\nexport type TimeoutErrorType = TimeoutError & {\n name: 'TimeoutError'\n}\nexport class TimeoutError extends BaseError {\n url: string\n constructor({\n body,\n url,\n }: {\n body: { [x: string]: unknown } | { [y: string]: unknown }[]\n url: string\n }) {\n super('The request took too long to respond.', {\n details: 'The request timed out.',\n metaMessages: [`URL: ${getUrl(url)}`, `Request body: ${stringify(body)}`],\n name: 'TimeoutError',\n })\n this.url = url\n }\n}\n", "import type { Prettify } from '../types/utils.js'\nimport { BaseError } from './base.js'\nimport { RpcRequestError } from './request.js'\n\nconst unknownErrorCode = -1\n\nexport type RpcErrorCode =\n | -1\n | -32700 // Parse error\n | -32600 // Invalid request\n | -32601 // Method not found\n | -32602 // Invalid params\n | -32603 // Internal error\n | -32000 // Invalid input\n | -32001 // Resource not found\n | -32002 // Resource unavailable\n | -32003 // Transaction rejected\n | -32004 // Method not supported\n | -32005 // Limit exceeded\n | -32006 // JSON-RPC version not supported\n | -32042 // Method not found\n\ntype RpcErrorOptions = {\n code?: code | (number & {}) | undefined\n docsPath?: string | undefined\n metaMessages?: string[] | undefined\n name?: string | undefined\n shortMessage: string\n}\n\n/**\n * Error subclass implementing JSON RPC 2.0 errors and Ethereum RPC errors per EIP-1474.\n *\n * - EIP https://eips.ethereum.org/EIPS/eip-1474\n */\nexport type RpcErrorType = RpcError & { name: 'RpcError' }\nexport class RpcError extends BaseError {\n code: code_ | (number & {})\n\n constructor(\n cause: Error,\n {\n code,\n docsPath,\n metaMessages,\n name,\n shortMessage,\n }: RpcErrorOptions,\n ) {\n super(shortMessage, {\n cause,\n docsPath,\n metaMessages:\n metaMessages || (cause as { metaMessages?: string[] })?.metaMessages,\n name: name || 'RpcError',\n })\n this.name = name || cause.name\n this.code = (\n cause instanceof RpcRequestError ? cause.code : (code ?? unknownErrorCode)\n ) as code_\n }\n}\n\nexport type ProviderRpcErrorCode =\n | 4001 // User Rejected Request\n | 4100 // Unauthorized\n | 4200 // Unsupported Method\n | 4900 // Disconnected\n | 4901 // Chain Disconnected\n | 4902 // Chain Not Recognized\n | 5700 // Unsupported non-optional capability\n | 5710 // Unsupported chain id\n | 5720 // Duplicate ID\n | 5730 // Unknown bundle id\n | 5740 // Bundle too large\n | 5750 // Atomic-ready wallet rejected upgrade\n | 5760 // Atomicity not supported\n | 7000 // WalletConnect Session Settlement Failed\n\n/**\n * Error subclass implementing Ethereum Provider errors per EIP-1193.\n *\n * - EIP https://eips.ethereum.org/EIPS/eip-1193\n */\nexport type ProviderRpcErrorType = ProviderRpcError & {\n name: 'ProviderRpcError'\n}\nexport class ProviderRpcError<\n T = undefined,\n> extends RpcError {\n data?: T | undefined\n\n constructor(\n cause: Error,\n options: Prettify<\n RpcErrorOptions & {\n data?: T | undefined\n }\n >,\n ) {\n super(cause, options)\n\n this.data = options.data\n }\n}\n\n/**\n * Subclass for a \"Parse error\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type ParseRpcErrorType = ParseRpcError & {\n code: -32700\n name: 'ParseRpcError'\n}\nexport class ParseRpcError extends RpcError {\n static code = -32700 as const\n\n constructor(cause: Error) {\n super(cause, {\n code: ParseRpcError.code,\n name: 'ParseRpcError',\n shortMessage:\n 'Invalid JSON was received by the server. An error occurred on the server while parsing the JSON text.',\n })\n }\n}\n\n/**\n * Subclass for a \"Invalid request\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type InvalidRequestRpcErrorType = InvalidRequestRpcError & {\n code: -32600\n name: 'InvalidRequestRpcError'\n}\nexport class InvalidRequestRpcError extends RpcError {\n static code = -32600 as const\n\n constructor(cause: Error) {\n super(cause, {\n code: InvalidRequestRpcError.code,\n name: 'InvalidRequestRpcError',\n shortMessage: 'JSON is not a valid request object.',\n })\n }\n}\n\n/**\n * Subclass for a \"Method not found\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type MethodNotFoundRpcErrorType = MethodNotFoundRpcError & {\n code: -32601\n name: 'MethodNotFoundRpcError'\n}\nexport class MethodNotFoundRpcError extends RpcError {\n static code = -32601 as const\n\n constructor(cause: Error, { method }: { method?: string } = {}) {\n super(cause, {\n code: MethodNotFoundRpcError.code,\n name: 'MethodNotFoundRpcError',\n shortMessage: `The method${method ? ` \"${method}\"` : ''} does not exist / is not available.`,\n })\n }\n}\n\n/**\n * Subclass for an \"Invalid params\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type InvalidParamsRpcErrorType = InvalidParamsRpcError & {\n code: -32602\n name: 'InvalidParamsRpcError'\n}\nexport class InvalidParamsRpcError extends RpcError {\n static code = -32602 as const\n\n constructor(cause: Error) {\n super(cause, {\n code: InvalidParamsRpcError.code,\n name: 'InvalidParamsRpcError',\n shortMessage: [\n 'Invalid parameters were provided to the RPC method.',\n 'Double check you have provided the correct parameters.',\n ].join('\\n'),\n })\n }\n}\n\n/**\n * Subclass for an \"Internal error\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type InternalRpcErrorType = InternalRpcError & {\n code: -32603\n name: 'InternalRpcError'\n}\nexport class InternalRpcError extends RpcError {\n static code = -32603 as const\n\n constructor(cause: Error) {\n super(cause, {\n code: InternalRpcError.code,\n name: 'InternalRpcError',\n shortMessage: 'An internal error was received.',\n })\n }\n}\n\n/**\n * Subclass for an \"Invalid input\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type InvalidInputRpcErrorType = InvalidInputRpcError & {\n code: -32000\n name: 'InvalidInputRpcError'\n}\nexport class InvalidInputRpcError extends RpcError {\n static code = -32000 as const\n\n constructor(cause: Error) {\n super(cause, {\n code: InvalidInputRpcError.code,\n name: 'InvalidInputRpcError',\n shortMessage: [\n 'Missing or invalid parameters.',\n 'Double check you have provided the correct parameters.',\n ].join('\\n'),\n })\n }\n}\n\n/**\n * Subclass for a \"Resource not found\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type ResourceNotFoundRpcErrorType = ResourceNotFoundRpcError & {\n code: -32001\n name: 'ResourceNotFoundRpcError'\n}\nexport class ResourceNotFoundRpcError extends RpcError {\n override name = 'ResourceNotFoundRpcError'\n static code = -32001 as const\n\n constructor(cause: Error) {\n super(cause, {\n code: ResourceNotFoundRpcError.code,\n name: 'ResourceNotFoundRpcError',\n shortMessage: 'Requested resource not found.',\n })\n }\n}\n\n/**\n * Subclass for a \"Resource unavailable\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type ResourceUnavailableRpcErrorType = ResourceUnavailableRpcError & {\n code: -32002\n name: 'ResourceUnavailableRpcError'\n}\nexport class ResourceUnavailableRpcError extends RpcError {\n static code = -32002 as const\n\n constructor(cause: Error) {\n super(cause, {\n code: ResourceUnavailableRpcError.code,\n name: 'ResourceUnavailableRpcError',\n shortMessage: 'Requested resource not available.',\n })\n }\n}\n\n/**\n * Subclass for a \"Transaction rejected\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type TransactionRejectedRpcErrorType = TransactionRejectedRpcError & {\n code: -32003\n name: 'TransactionRejectedRpcError'\n}\nexport class TransactionRejectedRpcError extends RpcError {\n static code = -32003 as const\n\n constructor(cause: Error) {\n super(cause, {\n code: TransactionRejectedRpcError.code,\n name: 'TransactionRejectedRpcError',\n shortMessage: 'Transaction creation failed.',\n })\n }\n}\n\n/**\n * Subclass for a \"Method not supported\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type MethodNotSupportedRpcErrorType = MethodNotSupportedRpcError & {\n code: -32004\n name: 'MethodNotSupportedRpcError'\n}\nexport class MethodNotSupportedRpcError extends RpcError {\n static code = -32004 as const\n\n constructor(cause: Error, { method }: { method?: string } = {}) {\n super(cause, {\n code: MethodNotSupportedRpcError.code,\n name: 'MethodNotSupportedRpcError',\n shortMessage: `Method${method ? ` \"${method}\"` : ''} is not supported.`,\n })\n }\n}\n\n/**\n * Subclass for a \"Limit exceeded\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type LimitExceededRpcErrorType = LimitExceededRpcError & {\n code: -32005\n name: 'LimitExceededRpcError'\n}\nexport class LimitExceededRpcError extends RpcError {\n static code = -32005 as const\n\n constructor(cause: Error) {\n super(cause, {\n code: LimitExceededRpcError.code,\n name: 'LimitExceededRpcError',\n shortMessage: 'Request exceeds defined limit.',\n })\n }\n}\n\n/**\n * Subclass for a \"JSON-RPC version not supported\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type JsonRpcVersionUnsupportedErrorType =\n JsonRpcVersionUnsupportedError & {\n code: -32006\n name: 'JsonRpcVersionUnsupportedError'\n }\nexport class JsonRpcVersionUnsupportedError extends RpcError {\n static code = -32006 as const\n\n constructor(cause: Error) {\n super(cause, {\n code: JsonRpcVersionUnsupportedError.code,\n name: 'JsonRpcVersionUnsupportedError',\n shortMessage: 'Version of JSON-RPC protocol is not supported.',\n })\n }\n}\n\n/**\n * Subclass for a \"User Rejected Request\" EIP-1193 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1193#provider-errors\n */\nexport type UserRejectedRequestErrorType = UserRejectedRequestError & {\n code: 4001\n name: 'UserRejectedRequestError'\n}\nexport class UserRejectedRequestError extends ProviderRpcError {\n static code = 4001 as const\n\n constructor(cause: Error) {\n super(cause, {\n code: UserRejectedRequestError.code,\n name: 'UserRejectedRequestError',\n shortMessage: 'User rejected the request.',\n })\n }\n}\n\n/**\n * Subclass for an \"Unauthorized\" EIP-1193 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1193#provider-errors\n */\nexport type UnauthorizedProviderErrorType = UnauthorizedProviderError & {\n code: 4100\n name: 'UnauthorizedProviderError'\n}\nexport class UnauthorizedProviderError extends ProviderRpcError {\n static code = 4100 as const\n\n constructor(cause: Error) {\n super(cause, {\n code: UnauthorizedProviderError.code,\n name: 'UnauthorizedProviderError',\n shortMessage:\n 'The requested method and/or account has not been authorized by the user.',\n })\n }\n}\n\n/**\n * Subclass for an \"Unsupported Method\" EIP-1193 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1193#provider-errors\n */\nexport type UnsupportedProviderMethodErrorType =\n UnsupportedProviderMethodError & {\n code: 4200\n name: 'UnsupportedProviderMethodError'\n }\nexport class UnsupportedProviderMethodError extends ProviderRpcError {\n static code = 4200 as const\n\n constructor(cause: Error, { method }: { method?: string } = {}) {\n super(cause, {\n code: UnsupportedProviderMethodError.code,\n name: 'UnsupportedProviderMethodError',\n shortMessage: `The Provider does not support the requested method${method ? ` \" ${method}\"` : ''}.`,\n })\n }\n}\n\n/**\n * Subclass for an \"Disconnected\" EIP-1193 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1193#provider-errors\n */\nexport type ProviderDisconnectedErrorType = ProviderDisconnectedError & {\n code: 4900\n name: 'ProviderDisconnectedError'\n}\nexport class ProviderDisconnectedError extends ProviderRpcError {\n static code = 4900 as const\n\n constructor(cause: Error) {\n super(cause, {\n code: ProviderDisconnectedError.code,\n name: 'ProviderDisconnectedError',\n shortMessage: 'The Provider is disconnected from all chains.',\n })\n }\n}\n\n/**\n * Subclass for an \"Chain Disconnected\" EIP-1193 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1193#provider-errors\n */\nexport type ChainDisconnectedErrorType = ChainDisconnectedError & {\n code: 4901\n name: 'ChainDisconnectedError'\n}\nexport class ChainDisconnectedError extends ProviderRpcError {\n static code = 4901 as const\n\n constructor(cause: Error) {\n super(cause, {\n code: ChainDisconnectedError.code,\n name: 'ChainDisconnectedError',\n shortMessage: 'The Provider is not connected to the requested chain.',\n })\n }\n}\n\n/**\n * Subclass for an \"Switch Chain\" EIP-1193 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1193#provider-errors\n */\nexport type SwitchChainErrorType = SwitchChainError & {\n code: 4902\n name: 'SwitchChainError'\n}\nexport class SwitchChainError extends ProviderRpcError {\n static code = 4902 as const\n\n constructor(cause: Error) {\n super(cause, {\n code: SwitchChainError.code,\n name: 'SwitchChainError',\n shortMessage: 'An error occurred when attempting to switch chain.',\n })\n }\n}\n\n/**\n * Subclass for an \"Unsupported non-optional capability\" EIP-5792 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-5792#error-codes\n */\nexport type UnsupportedNonOptionalCapabilityErrorType =\n UnsupportedNonOptionalCapabilityError & {\n code: 5700\n name: 'UnsupportedNonOptionalCapabilityError'\n }\nexport class UnsupportedNonOptionalCapabilityError extends ProviderRpcError {\n static code = 5700 as const\n\n constructor(cause: Error) {\n super(cause, {\n code: UnsupportedNonOptionalCapabilityError.code,\n name: 'UnsupportedNonOptionalCapabilityError',\n shortMessage:\n 'This Wallet does not support a capability that was not marked as optional.',\n })\n }\n}\n\n/**\n * Subclass for an \"Unsupported chain id\" EIP-5792 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-5792#error-codes\n */\nexport type UnsupportedChainIdErrorType = UnsupportedChainIdError & {\n code: 5710\n name: 'UnsupportedChainIdError'\n}\nexport class UnsupportedChainIdError extends ProviderRpcError {\n static code = 5710 as const\n\n constructor(cause: Error) {\n super(cause, {\n code: UnsupportedChainIdError.code,\n name: 'UnsupportedChainIdError',\n shortMessage: 'This Wallet does not support the requested chain ID.',\n })\n }\n}\n\n/**\n * Subclass for an \"Duplicate ID\" EIP-5792 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-5792#error-codes\n */\nexport type DuplicateIdErrorType = DuplicateIdError & {\n code: 5720\n name: 'DuplicateIdError'\n}\nexport class DuplicateIdError extends ProviderRpcError {\n static code = 5720 as const\n\n constructor(cause: Error) {\n super(cause, {\n code: DuplicateIdError.code,\n name: 'DuplicateIdError',\n shortMessage: 'There is already a bundle submitted with this ID.',\n })\n }\n}\n\n/**\n * Subclass for an \"Unknown bundle ID\" EIP-5792 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-5792#error-codes\n */\nexport type UnknownBundleIdErrorType = UnknownBundleIdError & {\n code: 5730\n name: 'UnknownBundleIdError'\n}\nexport class UnknownBundleIdError extends ProviderRpcError {\n static code = 5730 as const\n\n constructor(cause: Error) {\n super(cause, {\n code: UnknownBundleIdError.code,\n name: 'UnknownBundleIdError',\n shortMessage: 'This bundle id is unknown / has not been submitted',\n })\n }\n}\n\n/**\n * Subclass for an \"Bundle too large\" EIP-5792 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-5792#error-codes\n */\nexport type BundleTooLargeErrorType = BundleTooLargeError & {\n code: 5740\n name: 'BundleTooLargeError'\n}\nexport class BundleTooLargeError extends ProviderRpcError {\n static code = 5740 as const\n\n constructor(cause: Error) {\n super(cause, {\n code: BundleTooLargeError.code,\n name: 'BundleTooLargeError',\n shortMessage: 'The call bundle is too large for the Wallet to process.',\n })\n }\n}\n\n/**\n * Subclass for an \"Atomic-ready wallet rejected upgrade\" EIP-5792 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-5792#error-codes\n */\nexport type AtomicReadyWalletRejectedUpgradeErrorType =\n AtomicReadyWalletRejectedUpgradeError & {\n code: 5750\n name: 'AtomicReadyWalletRejectedUpgradeError'\n }\nexport class AtomicReadyWalletRejectedUpgradeError extends ProviderRpcError {\n static code = 5750 as const\n\n constructor(cause: Error) {\n super(cause, {\n code: AtomicReadyWalletRejectedUpgradeError.code,\n name: 'AtomicReadyWalletRejectedUpgradeError',\n shortMessage:\n 'The Wallet can support atomicity after an upgrade, but the user rejected the upgrade.',\n })\n }\n}\n\n/**\n * Subclass for an \"Atomicity not supported\" EIP-5792 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-5792#error-codes\n */\nexport type AtomicityNotSupportedErrorType = AtomicityNotSupportedError & {\n code: 5760\n name: 'AtomicityNotSupportedError'\n}\nexport class AtomicityNotSupportedError extends ProviderRpcError {\n static code = 5760 as const\n\n constructor(cause: Error) {\n super(cause, {\n code: AtomicityNotSupportedError.code,\n name: 'AtomicityNotSupportedError',\n shortMessage:\n 'The wallet does not support atomic execution but the request requires it.',\n })\n }\n}\n\n/**\n * Subclass for a \"Session Settlement Failed\" WalletConnect error.\n *\n * WalletConnect https://docs.walletconnect.com/2.0/specs/clients/sign/error-codes\n */\nexport type WalletConnectSessionSettlementErrorType =\n WalletConnectSessionSettlementError & {\n code: 7000\n name: 'WalletConnectSessionSettlementError'\n }\nexport class WalletConnectSessionSettlementError extends ProviderRpcError {\n static code = 7000 as const\n\n constructor(cause: Error) {\n super(cause, {\n code: WalletConnectSessionSettlementError.code,\n name: 'WalletConnectSessionSettlementError',\n shortMessage: 'WalletConnect session settlement failed.',\n })\n }\n}\n\n/**\n * Subclass for an unknown RPC error.\n */\nexport type UnknownRpcErrorType = UnknownRpcError & {\n name: 'UnknownRpcError'\n}\nexport class UnknownRpcError extends RpcError {\n constructor(cause: Error) {\n super(cause, {\n name: 'UnknownRpcError',\n shortMessage: 'An unknown RPC error occurred.',\n })\n }\n}\n", "/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nimport { type Input, Hash, abytes, aexists, aoutput, clean, createView, toBytes } from './utils.ts';\n\n/** Polyfill for Safari 14. https://caniuse.com/mdn-javascript_builtins_dataview_setbiguint64 */\nexport function setBigUint64(\n view: DataView,\n byteOffset: number,\n value: bigint,\n isLE: boolean\n): void {\n if (typeof view.setBigUint64 === 'function') return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number((value >> _32n) & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\n\n/** Choice: a ? b : c */\nexport function Chi(a: number, b: number, c: number): number {\n return (a & b) ^ (~a & c);\n}\n\n/** Majority function, true if any two inputs is true. */\nexport function Maj(a: number, b: number, c: number): number {\n return (a & b) ^ (a & c) ^ (b & c);\n}\n\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport abstract class HashMD> extends Hash {\n protected abstract process(buf: DataView, offset: number): void;\n protected abstract get(): number[];\n protected abstract set(...args: number[]): void;\n abstract destroy(): void;\n protected abstract roundClean(): void;\n\n readonly blockLen: number;\n readonly outputLen: number;\n readonly padOffset: number;\n readonly isLE: boolean;\n\n // For partial updates less than block size\n protected buffer: Uint8Array;\n protected view: DataView;\n protected finished = false;\n protected length = 0;\n protected pos = 0;\n protected destroyed = false;\n\n constructor(blockLen: number, outputLen: number, padOffset: number, isLE: boolean) {\n super();\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data: Input): this {\n aexists(this);\n data = toBytes(data);\n abytes(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n for (let pos = 0; pos < len; ) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen) this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out: Uint8Array): void {\n aexists(this);\n aoutput(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n clean(this.buffer.subarray(pos));\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++) buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n if (len % 4) throw new Error('_sha2: outputLen should be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length) throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++) oview.setUint32(4 * i, state[i], isLE);\n }\n digest(): Uint8Array {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to?: T): T {\n to ||= new (this.constructor as any)() as T;\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n if (length % blockLen) to.buffer.set(buffer);\n return to;\n }\n clone(): T {\n return this._cloneInto();\n }\n}\n\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n\n/** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */\nexport const SHA256_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */\nexport const SHA224_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */\nexport const SHA384_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */\nexport const SHA512_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n", "/**\n * SHA2 hash function. A.k.a. sha256, sha384, sha512, sha512_224, sha512_256.\n * SHA256 is the fastest hash implementable in JS, even faster than Blake3.\n * Check out [RFC 4634](https://datatracker.ietf.org/doc/html/rfc4634) and\n * [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n */\nimport { Chi, HashMD, Maj, SHA224_IV, SHA256_IV, SHA384_IV, SHA512_IV } from './_md.ts';\nimport * as u64 from './_u64.ts';\nimport { type CHash, clean, createHasher, rotr } from './utils.ts';\n\n/**\n * Round constants:\n * First 32 bits of fractional parts of the cube roots of the first 64 primes 2..311)\n */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n\n/** Reusable temporary buffer. \"W\" comes straight from spec. */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nexport class SHA256 extends HashMD {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n protected A: number = SHA256_IV[0] | 0;\n protected B: number = SHA256_IV[1] | 0;\n protected C: number = SHA256_IV[2] | 0;\n protected D: number = SHA256_IV[3] | 0;\n protected E: number = SHA256_IV[4] | 0;\n protected F: number = SHA256_IV[5] | 0;\n protected G: number = SHA256_IV[6] | 0;\n protected H: number = SHA256_IV[7] | 0;\n\n constructor(outputLen: number = 32) {\n super(64, outputLen, 8, false);\n }\n protected get(): [number, number, number, number, number, number, number, number] {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n protected set(\n A: number, B: number, C: number, D: number, E: number, F: number, G: number, H: number\n ): void {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n protected process(view: DataView, offset: number): void {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = (sigma0 + Maj(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n protected roundClean(): void {\n clean(SHA256_W);\n }\n destroy(): void {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n clean(this.buffer);\n }\n}\n\nexport class SHA224 extends SHA256 {\n protected A: number = SHA224_IV[0] | 0;\n protected B: number = SHA224_IV[1] | 0;\n protected C: number = SHA224_IV[2] | 0;\n protected D: number = SHA224_IV[3] | 0;\n protected E: number = SHA224_IV[4] | 0;\n protected F: number = SHA224_IV[5] | 0;\n protected G: number = SHA224_IV[6] | 0;\n protected H: number = SHA224_IV[7] | 0;\n constructor() {\n super(28);\n }\n}\n\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n\n// Round contants\n// First 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (() => u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (() => K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (() => K512[1])();\n\n// Reusable temporary buffers\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\n\nexport class SHA512 extends HashMD {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n // h -- high 32 bits, l -- low 32 bits\n protected Ah: number = SHA512_IV[0] | 0;\n protected Al: number = SHA512_IV[1] | 0;\n protected Bh: number = SHA512_IV[2] | 0;\n protected Bl: number = SHA512_IV[3] | 0;\n protected Ch: number = SHA512_IV[4] | 0;\n protected Cl: number = SHA512_IV[5] | 0;\n protected Dh: number = SHA512_IV[6] | 0;\n protected Dl: number = SHA512_IV[7] | 0;\n protected Eh: number = SHA512_IV[8] | 0;\n protected El: number = SHA512_IV[9] | 0;\n protected Fh: number = SHA512_IV[10] | 0;\n protected Fl: number = SHA512_IV[11] | 0;\n protected Gh: number = SHA512_IV[12] | 0;\n protected Gl: number = SHA512_IV[13] | 0;\n protected Hh: number = SHA512_IV[14] | 0;\n protected Hl: number = SHA512_IV[15] | 0;\n\n constructor(outputLen: number = 64) {\n super(128, outputLen, 16, false);\n }\n // prettier-ignore\n protected get(): [\n number, number, number, number, number, number, number, number,\n number, number, number, number, number, number, number, number\n ] {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n protected set(\n Ah: number, Al: number, Bh: number, Bl: number, Ch: number, Cl: number, Dh: number, Dl: number,\n Eh: number, El: number, Fh: number, Fl: number, Gh: number, Gl: number, Hh: number, Hl: number\n ): void {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n protected process(view: DataView, offset: number): void {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n protected roundClean(): void {\n clean(SHA512_W_H, SHA512_W_L);\n }\n destroy(): void {\n clean(this.buffer);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\n\nexport class SHA384 extends SHA512 {\n protected Ah: number = SHA384_IV[0] | 0;\n protected Al: number = SHA384_IV[1] | 0;\n protected Bh: number = SHA384_IV[2] | 0;\n protected Bl: number = SHA384_IV[3] | 0;\n protected Ch: number = SHA384_IV[4] | 0;\n protected Cl: number = SHA384_IV[5] | 0;\n protected Dh: number = SHA384_IV[6] | 0;\n protected Dl: number = SHA384_IV[7] | 0;\n protected Eh: number = SHA384_IV[8] | 0;\n protected El: number = SHA384_IV[9] | 0;\n protected Fh: number = SHA384_IV[10] | 0;\n protected Fl: number = SHA384_IV[11] | 0;\n protected Gh: number = SHA384_IV[12] | 0;\n protected Gl: number = SHA384_IV[13] | 0;\n protected Hh: number = SHA384_IV[14] | 0;\n protected Hl: number = SHA384_IV[15] | 0;\n\n constructor() {\n super(48);\n }\n}\n\n/**\n * Truncated SHA512/256 and SHA512/224.\n * SHA512_IV is XORed with 0xa5a5a5a5a5a5a5a5, then used as \"intermediary\" IV of SHA512/t.\n * Then t hashes string to produce result IV.\n * See `test/misc/sha2-gen-iv.js`.\n */\n\n/** SHA512/224 IV */\nconst T224_IV = /* @__PURE__ */ Uint32Array.from([\n 0x8c3d37c8, 0x19544da2, 0x73e19966, 0x89dcd4d6, 0x1dfab7ae, 0x32ff9c82, 0x679dd514, 0x582f9fcf,\n 0x0f6d2b69, 0x7bd44da8, 0x77e36f73, 0x04c48942, 0x3f9d85a8, 0x6a1d36c8, 0x1112e6ad, 0x91d692a1,\n]);\n\n/** SHA512/256 IV */\nconst T256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x22312194, 0xfc2bf72c, 0x9f555fa3, 0xc84c64c2, 0x2393b86b, 0x6f53b151, 0x96387719, 0x5940eabd,\n 0x96283ee2, 0xa88effe3, 0xbe5e1e25, 0x53863992, 0x2b0199fc, 0x2c85b8aa, 0x0eb72ddc, 0x81c52ca2,\n]);\n\nexport class SHA512_224 extends SHA512 {\n protected Ah: number = T224_IV[0] | 0;\n protected Al: number = T224_IV[1] | 0;\n protected Bh: number = T224_IV[2] | 0;\n protected Bl: number = T224_IV[3] | 0;\n protected Ch: number = T224_IV[4] | 0;\n protected Cl: number = T224_IV[5] | 0;\n protected Dh: number = T224_IV[6] | 0;\n protected Dl: number = T224_IV[7] | 0;\n protected Eh: number = T224_IV[8] | 0;\n protected El: number = T224_IV[9] | 0;\n protected Fh: number = T224_IV[10] | 0;\n protected Fl: number = T224_IV[11] | 0;\n protected Gh: number = T224_IV[12] | 0;\n protected Gl: number = T224_IV[13] | 0;\n protected Hh: number = T224_IV[14] | 0;\n protected Hl: number = T224_IV[15] | 0;\n\n constructor() {\n super(28);\n }\n}\n\nexport class SHA512_256 extends SHA512 {\n protected Ah: number = T256_IV[0] | 0;\n protected Al: number = T256_IV[1] | 0;\n protected Bh: number = T256_IV[2] | 0;\n protected Bl: number = T256_IV[3] | 0;\n protected Ch: number = T256_IV[4] | 0;\n protected Cl: number = T256_IV[5] | 0;\n protected Dh: number = T256_IV[6] | 0;\n protected Dl: number = T256_IV[7] | 0;\n protected Eh: number = T256_IV[8] | 0;\n protected El: number = T256_IV[9] | 0;\n protected Fh: number = T256_IV[10] | 0;\n protected Fl: number = T256_IV[11] | 0;\n protected Gh: number = T256_IV[12] | 0;\n protected Gl: number = T256_IV[13] | 0;\n protected Hh: number = T256_IV[14] | 0;\n protected Hl: number = T256_IV[15] | 0;\n\n constructor() {\n super(32);\n }\n}\n\n/**\n * SHA2-256 hash function from RFC 4634.\n *\n * It is the fastest JS hash, even faster than Blake3.\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n */\nexport const sha256: CHash = /* @__PURE__ */ createHasher(() => new SHA256());\n/** SHA2-224 hash function from RFC 4634 */\nexport const sha224: CHash = /* @__PURE__ */ createHasher(() => new SHA224());\n\n/** SHA2-512 hash function from RFC 4634. */\nexport const sha512: CHash = /* @__PURE__ */ createHasher(() => new SHA512());\n/** SHA2-384 hash function from RFC 4634. */\nexport const sha384: CHash = /* @__PURE__ */ createHasher(() => new SHA384());\n\n/**\n * SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_256: CHash = /* @__PURE__ */ createHasher(() => new SHA512_256());\n/**\n * SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_224: CHash = /* @__PURE__ */ createHasher(() => new SHA512_224());\n", "/**\n * HMAC: RFC2104 message authentication code.\n * @module\n */\nimport { abytes, aexists, ahash, clean, Hash, toBytes, type CHash, type Input } from './utils.ts';\n\nexport class HMAC> extends Hash> {\n oHash: T;\n iHash: T;\n blockLen: number;\n outputLen: number;\n private finished = false;\n private destroyed = false;\n\n constructor(hash: CHash, _key: Input) {\n super();\n ahash(hash);\n const key = toBytes(_key);\n this.iHash = hash.create() as T;\n if (typeof this.iHash.update !== 'function')\n throw new Error('Expected instance of class which extends utils.Hash');\n this.blockLen = this.iHash.blockLen;\n this.outputLen = this.iHash.outputLen;\n const blockLen = this.blockLen;\n const pad = new Uint8Array(blockLen);\n // blockLen can be bigger than outputLen\n pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36;\n this.iHash.update(pad);\n // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone\n this.oHash = hash.create() as T;\n // Undo internal XOR && apply outer XOR\n for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36 ^ 0x5c;\n this.oHash.update(pad);\n clean(pad);\n }\n update(buf: Input): this {\n aexists(this);\n this.iHash.update(buf);\n return this;\n }\n digestInto(out: Uint8Array): void {\n aexists(this);\n abytes(out, this.outputLen);\n this.finished = true;\n this.iHash.digestInto(out);\n this.oHash.update(out);\n this.oHash.digestInto(out);\n this.destroy();\n }\n digest(): Uint8Array {\n const out = new Uint8Array(this.oHash.outputLen);\n this.digestInto(out);\n return out;\n }\n _cloneInto(to?: HMAC): HMAC {\n // Create new instance without calling constructor since key already in state and we don't know it.\n to ||= Object.create(Object.getPrototypeOf(this), {});\n const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n to = to as this;\n to.finished = finished;\n to.destroyed = destroyed;\n to.blockLen = blockLen;\n to.outputLen = outputLen;\n to.oHash = oHash._cloneInto(to.oHash);\n to.iHash = iHash._cloneInto(to.iHash);\n return to;\n }\n clone(): HMAC {\n return this._cloneInto();\n }\n destroy(): void {\n this.destroyed = true;\n this.oHash.destroy();\n this.iHash.destroy();\n }\n}\n\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - message key\n * @param message - message data\n * @example\n * import { hmac } from '@noble/hashes/hmac';\n * import { sha256 } from '@noble/hashes/sha2';\n * const mac1 = hmac(sha256, 'key', 'message');\n */\nexport const hmac: {\n (hash: CHash, key: Input, message: Input): Uint8Array;\n create(hash: CHash, key: Input): HMAC;\n} = (hash: CHash, key: Input, message: Input): Uint8Array =>\n new HMAC(hash, key).update(message).digest();\nhmac.create = (hash: CHash, key: Input) => new HMAC(hash, key);\n", "/**\n * Hex, bytes and number utilities.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\n// 100 lines of code in the file are duplicated from noble-hashes (utils).\n// This is OK: `abstract` directory does not use noble-hashes.\n// User may opt-in into using different hashing library. This way, noble-hashes\n// won't be included into their bundle.\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nexport type Hex = Uint8Array | string; // hex strings are accepted for simplicity\nexport type PrivKey = Hex | bigint; // bigints are accepted to ease learning curve\nexport type CHash = {\n (message: Uint8Array | string): Uint8Array;\n blockLen: number;\n outputLen: number;\n create(opts?: { dkLen?: number }): any; // For shake\n};\nexport type FHash = (message: Uint8Array | string) => Uint8Array;\n\nexport function isBytes(a: unknown): a is Uint8Array {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n\nexport function abytes(item: unknown): void {\n if (!isBytes(item)) throw new Error('Uint8Array expected');\n}\n\nexport function abool(title: string, value: boolean): void {\n if (typeof value !== 'boolean') throw new Error(title + ' boolean expected, got ' + value);\n}\n\n// Used in weierstrass, der\nexport function numberToHexUnpadded(num: number | bigint): string {\n const hex = num.toString(16);\n return hex.length & 1 ? '0' + hex : hex;\n}\n\nexport function hexToNumber(hex: string): bigint {\n if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n return hex === '' ? _0n : BigInt('0x' + hex); // Big Endian\n}\n\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin: boolean =\n // @ts-ignore\n typeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function';\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n i.toString(16).padStart(2, '0')\n);\n\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin) return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 } as const;\nfunction asciiToBase16(ch: number): number | undefined {\n if (ch >= asciis._0 && ch <= asciis._9) return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F) return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f) return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin) return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2) throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n\n// BE: Big Endian, LE: Little Endian\nexport function bytesToNumberBE(bytes: Uint8Array): bigint {\n return hexToNumber(bytesToHex(bytes));\n}\nexport function bytesToNumberLE(bytes: Uint8Array): bigint {\n abytes(bytes);\n return hexToNumber(bytesToHex(Uint8Array.from(bytes).reverse()));\n}\n\nexport function numberToBytesBE(n: number | bigint, len: number): Uint8Array {\n return hexToBytes(n.toString(16).padStart(len * 2, '0'));\n}\nexport function numberToBytesLE(n: number | bigint, len: number): Uint8Array {\n return numberToBytesBE(n, len).reverse();\n}\n// Unpadded, rarely used\nexport function numberToVarBytesBE(n: number | bigint): Uint8Array {\n return hexToBytes(numberToHexUnpadded(n));\n}\n\n/**\n * Takes hex string or Uint8Array, converts to Uint8Array.\n * Validates output length.\n * Will throw error for other types.\n * @param title descriptive title for an error e.g. 'private key'\n * @param hex hex string or Uint8Array\n * @param expectedLength optional, will compare to result array's length\n * @returns\n */\nexport function ensureBytes(title: string, hex: Hex, expectedLength?: number): Uint8Array {\n let res: Uint8Array;\n if (typeof hex === 'string') {\n try {\n res = hexToBytes(hex);\n } catch (e) {\n throw new Error(title + ' must be hex string or Uint8Array, cause: ' + e);\n }\n } else if (isBytes(hex)) {\n // Uint8Array.from() instead of hash.slice() because node.js Buffer\n // is instance of Uint8Array, and its slice() creates **mutable** copy\n res = Uint8Array.from(hex);\n } else {\n throw new Error(title + ' must be hex string or Uint8Array');\n }\n const len = res.length;\n if (typeof expectedLength === 'number' && len !== expectedLength)\n throw new Error(title + ' of length ' + expectedLength + ' expected, got ' + len);\n return res;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\n\n// Compares 2 u8a-s in kinda constant time\nexport function equalBytes(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false;\n let diff = 0;\n for (let i = 0; i < a.length; i++) diff |= a[i] ^ b[i];\n return diff === 0;\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n if (typeof str !== 'string') throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n// Is positive bigint\nconst isPosBig = (n: bigint) => typeof n === 'bigint' && _0n <= n;\n\nexport function inRange(n: bigint, min: bigint, max: bigint): boolean {\n return isPosBig(n) && isPosBig(min) && isPosBig(max) && min <= n && n < max;\n}\n\n/**\n * Asserts min <= n < max. NOTE: It's < max and not <= max.\n * @example\n * aInRange('x', x, 1n, 256n); // would assume x is in (1n..255n)\n */\nexport function aInRange(title: string, n: bigint, min: bigint, max: bigint): void {\n // Why min <= n < max and not a (min < n < max) OR b (min <= n <= max)?\n // consider P=256n, min=0n, max=P\n // - a for min=0 would require -1: `inRange('x', x, -1n, P)`\n // - b would commonly require subtraction: `inRange('x', x, 0n, P - 1n)`\n // - our way is the cleanest: `inRange('x', x, 0n, P)\n if (!inRange(n, min, max))\n throw new Error('expected valid ' + title + ': ' + min + ' <= n < ' + max + ', got ' + n);\n}\n\n// Bit operations\n\n/**\n * Calculates amount of bits in a bigint.\n * Same as `n.toString(2).length`\n * TODO: merge with nLength in modular\n */\nexport function bitLen(n: bigint): number {\n let len;\n for (len = 0; n > _0n; n >>= _1n, len += 1);\n return len;\n}\n\n/**\n * Gets single bit at position.\n * NOTE: first bit position is 0 (same as arrays)\n * Same as `!!+Array.from(n.toString(2)).reverse()[pos]`\n */\nexport function bitGet(n: bigint, pos: number): bigint {\n return (n >> BigInt(pos)) & _1n;\n}\n\n/**\n * Sets single bit at position.\n */\nexport function bitSet(n: bigint, pos: number, value: boolean): bigint {\n return n | ((value ? _1n : _0n) << BigInt(pos));\n}\n\n/**\n * Calculate mask for N bits. Not using ** operator with bigints because of old engines.\n * Same as BigInt(`0b${Array(i).fill('1').join('')}`)\n */\nexport const bitMask = (n: number): bigint => (_1n << BigInt(n)) - _1n;\n\n// DRBG\n\nconst u8n = (len: number) => new Uint8Array(len); // creates Uint8Array\nconst u8fr = (arr: ArrayLike) => Uint8Array.from(arr); // another shortcut\ntype Pred = (v: Uint8Array) => T | undefined;\n/**\n * Minimal HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n * @returns function that will call DRBG until 2nd arg returns something meaningful\n * @example\n * const drbg = createHmacDRBG(32, 32, hmac);\n * drbg(seed, bytesToKey); // bytesToKey must return Key or undefined\n */\nexport function createHmacDrbg(\n hashLen: number,\n qByteLen: number,\n hmacFn: (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array\n): (seed: Uint8Array, predicate: Pred) => T {\n if (typeof hashLen !== 'number' || hashLen < 2) throw new Error('hashLen must be a number');\n if (typeof qByteLen !== 'number' || qByteLen < 2) throw new Error('qByteLen must be a number');\n if (typeof hmacFn !== 'function') throw new Error('hmacFn must be a function');\n // Step B, Step C: set hashLen to 8*ceil(hlen/8)\n let v = u8n(hashLen); // Minimal non-full-spec HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n let k = u8n(hashLen); // Steps B and C of RFC6979 3.2: set hashLen, in our case always same\n let i = 0; // Iterations counter, will throw when over 1000\n const reset = () => {\n v.fill(1);\n k.fill(0);\n i = 0;\n };\n const h = (...b: Uint8Array[]) => hmacFn(k, v, ...b); // hmac(k)(v, ...values)\n const reseed = (seed = u8n(0)) => {\n // HMAC-DRBG reseed() function. Steps D-G\n k = h(u8fr([0x00]), seed); // k = hmac(k || v || 0x00 || seed)\n v = h(); // v = hmac(k || v)\n if (seed.length === 0) return;\n k = h(u8fr([0x01]), seed); // k = hmac(k || v || 0x01 || seed)\n v = h(); // v = hmac(k || v)\n };\n const gen = () => {\n // HMAC-DRBG generate() function\n if (i++ >= 1000) throw new Error('drbg: tried 1000 values');\n let len = 0;\n const out: Uint8Array[] = [];\n while (len < qByteLen) {\n v = h();\n const sl = v.slice();\n out.push(sl);\n len += v.length;\n }\n return concatBytes(...out);\n };\n const genUntil = (seed: Uint8Array, pred: Pred): T => {\n reset();\n reseed(seed); // Steps D-G\n let res: T | undefined = undefined; // Step H: grind until k is in [1..n-1]\n while (!(res = pred(gen()))) reseed();\n reset();\n return res;\n };\n return genUntil;\n}\n\n// Validating curves and fields\n\nconst validatorFns = {\n bigint: (val: any): boolean => typeof val === 'bigint',\n function: (val: any): boolean => typeof val === 'function',\n boolean: (val: any): boolean => typeof val === 'boolean',\n string: (val: any): boolean => typeof val === 'string',\n stringOrUint8Array: (val: any): boolean => typeof val === 'string' || isBytes(val),\n isSafeInteger: (val: any): boolean => Number.isSafeInteger(val),\n array: (val: any): boolean => Array.isArray(val),\n field: (val: any, object: any): any => (object as any).Fp.isValid(val),\n hash: (val: any): boolean => typeof val === 'function' && Number.isSafeInteger(val.outputLen),\n} as const;\ntype Validator = keyof typeof validatorFns;\ntype ValMap> = { [K in keyof T]?: Validator };\n// type Record = { [P in K]: T; }\n\nexport function validateObject>(\n object: T,\n validators: ValMap,\n optValidators: ValMap = {}\n): T {\n const checkField = (fieldName: keyof T, type: Validator, isOptional: boolean) => {\n const checkVal = validatorFns[type];\n if (typeof checkVal !== 'function') throw new Error('invalid validator function');\n\n const val = object[fieldName as keyof typeof object];\n if (isOptional && val === undefined) return;\n if (!checkVal(val, object)) {\n throw new Error(\n 'param ' + String(fieldName) + ' is invalid. Expected ' + type + ', got ' + val\n );\n }\n };\n for (const [fieldName, type] of Object.entries(validators)) checkField(fieldName, type!, false);\n for (const [fieldName, type] of Object.entries(optValidators)) checkField(fieldName, type!, true);\n return object;\n}\n// validate type tests\n// const o: { a: number; b: number; c: number } = { a: 1, b: 5, c: 6 };\n// const z0 = validateObject(o, { a: 'isSafeInteger' }, { c: 'bigint' }); // Ok!\n// // Should fail type-check\n// const z1 = validateObject(o, { a: 'tmp' }, { c: 'zz' });\n// const z2 = validateObject(o, { a: 'isSafeInteger' }, { c: 'zz' });\n// const z3 = validateObject(o, { test: 'boolean', z: 'bug' });\n// const z4 = validateObject(o, { a: 'boolean', z: 'bug' });\n\n/**\n * throws not implemented error\n */\nexport const notImplemented = (): never => {\n throw new Error('not implemented');\n};\n\n/**\n * Memoizes (caches) computation result.\n * Uses WeakMap: the value is going auto-cleaned by GC after last reference is removed.\n */\nexport function memoized(\n fn: (arg: T, ...args: O) => R\n): (arg: T, ...args: O) => R {\n const map = new WeakMap();\n return (arg: T, ...args: O): R => {\n const val = map.get(arg);\n if (val !== undefined) return val;\n const computed = fn(arg, ...args);\n map.set(arg, computed);\n return computed;\n };\n}\n", "/**\n * Utils for modular division and finite fields.\n * A finite field over 11 is integer number operations `mod 11`.\n * There is no division: it is replaced by modular multiplicative inverse.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { anumber } from '@noble/hashes/utils';\nimport {\n bitMask,\n bytesToNumberBE,\n bytesToNumberLE,\n ensureBytes,\n numberToBytesBE,\n numberToBytesLE,\n validateObject,\n} from './utils.ts';\n\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = /* @__PURE__ */ BigInt(2), _3n = /* @__PURE__ */ BigInt(3);\n// prettier-ignore\nconst _4n = /* @__PURE__ */ BigInt(4), _5n = /* @__PURE__ */ BigInt(5), _8n = /* @__PURE__ */ BigInt(8);\n\n// Calculates a modulo b\nexport function mod(a: bigint, b: bigint): bigint {\n const result = a % b;\n return result >= _0n ? result : b + result;\n}\n/**\n * Efficiently raise num to power and do modular division.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n * TODO: remove.\n * @example\n * pow(2n, 6n, 11n) // 64n % 11n == 9n\n */\nexport function pow(num: bigint, power: bigint, modulo: bigint): bigint {\n return FpPow(Field(modulo), num, power);\n}\n\n/** Does `x^(2^power)` mod p. `pow2(30, 4)` == `30^(2^4)` */\nexport function pow2(x: bigint, power: bigint, modulo: bigint): bigint {\n let res = x;\n while (power-- > _0n) {\n res *= res;\n res %= modulo;\n }\n return res;\n}\n\n/**\n * Inverses number over modulo.\n * Implemented using [Euclidean GCD](https://brilliant.org/wiki/extended-euclidean-algorithm/).\n */\nexport function invert(number: bigint, modulo: bigint): bigint {\n if (number === _0n) throw new Error('invert: expected non-zero number');\n if (modulo <= _0n) throw new Error('invert: expected positive modulus, got ' + modulo);\n // Fermat's little theorem \"CT-like\" version inv(n) = n^(m-2) mod m is 30x slower.\n let a = mod(number, modulo);\n let b = modulo;\n // prettier-ignore\n let x = _0n, y = _1n, u = _1n, v = _0n;\n while (a !== _0n) {\n // JIT applies optimization if those two lines follow each other\n const q = b / a;\n const r = b % a;\n const m = x - u * q;\n const n = y - v * q;\n // prettier-ignore\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n const gcd = b;\n if (gcd !== _1n) throw new Error('invert: does not exist');\n return mod(x, modulo);\n}\n\n// Not all roots are possible! Example which will throw:\n// const NUM =\n// n = 72057594037927816n;\n// Fp = Field(BigInt('0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab'));\nfunction sqrt3mod4(Fp: IField, n: T) {\n const p1div4 = (Fp.ORDER + _1n) / _4n;\n const root = Fp.pow(n, p1div4);\n // Throw if root^2 != n\n if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n return root;\n}\n\nfunction sqrt5mod8(Fp: IField, n: T) {\n const p5div8 = (Fp.ORDER - _5n) / _8n;\n const n2 = Fp.mul(n, _2n);\n const v = Fp.pow(n2, p5div8);\n const nv = Fp.mul(n, v);\n const i = Fp.mul(Fp.mul(nv, _2n), v);\n const root = Fp.mul(nv, Fp.sub(i, Fp.ONE));\n if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n return root;\n}\n\n// TODO: Commented-out for now. Provide test vectors.\n// Tonelli is too slow for extension fields Fp2.\n// That means we can't use sqrt (c1, c2...) even for initialization constants.\n// if (P % _16n === _9n) return sqrt9mod16;\n// // prettier-ignore\n// function sqrt9mod16(Fp: IField, n: T, p7div16?: bigint) {\n// if (p7div16 === undefined) p7div16 = (Fp.ORDER + BigInt(7)) / _16n;\n// const c1 = Fp.sqrt(Fp.neg(Fp.ONE)); // 1. c1 = sqrt(-1) in F, i.e., (c1^2) == -1 in F\n// const c2 = Fp.sqrt(c1); // 2. c2 = sqrt(c1) in F, i.e., (c2^2) == c1 in F\n// const c3 = Fp.sqrt(Fp.neg(c1)); // 3. c3 = sqrt(-c1) in F, i.e., (c3^2) == -c1 in F\n// const c4 = p7div16; // 4. c4 = (q + 7) / 16 # Integer arithmetic\n// let tv1 = Fp.pow(n, c4); // 1. tv1 = x^c4\n// let tv2 = Fp.mul(c1, tv1); // 2. tv2 = c1 * tv1\n// const tv3 = Fp.mul(c2, tv1); // 3. tv3 = c2 * tv1\n// let tv4 = Fp.mul(c3, tv1); // 4. tv4 = c3 * tv1\n// const e1 = Fp.eql(Fp.sqr(tv2), n); // 5. e1 = (tv2^2) == x\n// const e2 = Fp.eql(Fp.sqr(tv3), n); // 6. e2 = (tv3^2) == x\n// tv1 = Fp.cmov(tv1, tv2, e1); // 7. tv1 = CMOV(tv1, tv2, e1) # Select tv2 if (tv2^2) == x\n// tv2 = Fp.cmov(tv4, tv3, e2); // 8. tv2 = CMOV(tv4, tv3, e2) # Select tv3 if (tv3^2) == x\n// const e3 = Fp.eql(Fp.sqr(tv2), n); // 9. e3 = (tv2^2) == x\n// return Fp.cmov(tv1, tv2, e3); // 10. z = CMOV(tv1, tv2, e3) # Select the sqrt from tv1 and tv2\n// }\n\n/**\n * Tonelli-Shanks square root search algorithm.\n * 1. https://eprint.iacr.org/2012/685.pdf (page 12)\n * 2. Square Roots from 1; 24, 51, 10 to Dan Shanks\n * @param P field order\n * @returns function that takes field Fp (created from P) and number n\n */\nexport function tonelliShanks(P: bigint): (Fp: IField, n: T) => T {\n // Initialization (precomputation).\n if (P < BigInt(3)) throw new Error('sqrt is not defined for small field');\n // Factor P - 1 = Q * 2^S, where Q is odd\n let Q = P - _1n;\n let S = 0;\n while (Q % _2n === _0n) {\n Q /= _2n;\n S++;\n }\n\n // Find the first quadratic non-residue Z >= 2\n let Z = _2n;\n const _Fp = Field(P);\n while (FpLegendre(_Fp, Z) === 1) {\n // Basic primality test for P. After x iterations, chance of\n // not finding quadratic non-residue is 2^x, so 2^1000.\n if (Z++ > 1000) throw new Error('Cannot find square root: probably non-prime P');\n }\n // Fast-path; usually done before Z, but we do \"primality test\".\n if (S === 1) return sqrt3mod4;\n\n // Slow-path\n // TODO: test on Fp2 and others\n let cc = _Fp.pow(Z, Q); // c = z^Q\n const Q1div2 = (Q + _1n) / _2n;\n return function tonelliSlow(Fp: IField, n: T): T {\n if (Fp.is0(n)) return n;\n // Check if n is a quadratic residue using Legendre symbol\n if (FpLegendre(Fp, n) !== 1) throw new Error('Cannot find square root');\n\n // Initialize variables for the main loop\n let M = S;\n let c = Fp.mul(Fp.ONE, cc); // c = z^Q, move cc from field _Fp into field Fp\n let t = Fp.pow(n, Q); // t = n^Q, first guess at the fudge factor\n let R = Fp.pow(n, Q1div2); // R = n^((Q+1)/2), first guess at the square root\n\n // Main loop\n // while t != 1\n while (!Fp.eql(t, Fp.ONE)) {\n if (Fp.is0(t)) return Fp.ZERO; // if t=0 return R=0\n let i = 1;\n\n // Find the smallest i >= 1 such that t^(2^i) \u2261 1 (mod P)\n let t_tmp = Fp.sqr(t); // t^(2^1)\n while (!Fp.eql(t_tmp, Fp.ONE)) {\n i++;\n t_tmp = Fp.sqr(t_tmp); // t^(2^2)...\n if (i === M) throw new Error('Cannot find square root');\n }\n\n // Calculate the exponent for b: 2^(M - i - 1)\n const exponent = _1n << BigInt(M - i - 1); // bigint is important\n const b = Fp.pow(c, exponent); // b = 2^(M - i - 1)\n\n // Update variables\n M = i;\n c = Fp.sqr(b); // c = b^2\n t = Fp.mul(t, c); // t = (t * b^2)\n R = Fp.mul(R, b); // R = R*b\n }\n return R;\n };\n}\n\n/**\n * Square root for a finite field. Will try optimized versions first:\n *\n * 1. P \u2261 3 (mod 4)\n * 2. P \u2261 5 (mod 8)\n * 3. Tonelli-Shanks algorithm\n *\n * Different algorithms can give different roots, it is up to user to decide which one they want.\n * For example there is FpSqrtOdd/FpSqrtEven to choice root based on oddness (used for hash-to-curve).\n */\nexport function FpSqrt(P: bigint): (Fp: IField, n: T) => T {\n // P \u2261 3 (mod 4) => \u221An = n^((P+1)/4)\n if (P % _4n === _3n) return sqrt3mod4;\n // P \u2261 5 (mod 8) => Atkin algorithm, page 10 of https://eprint.iacr.org/2012/685.pdf\n if (P % _8n === _5n) return sqrt5mod8;\n // P \u2261 9 (mod 16) not implemented, see above\n // Tonelli-Shanks algorithm\n return tonelliShanks(P);\n}\n\n// Little-endian check for first LE bit (last BE bit);\nexport const isNegativeLE = (num: bigint, modulo: bigint): boolean =>\n (mod(num, modulo) & _1n) === _1n;\n\n/** Field is not always over prime: for example, Fp2 has ORDER(q)=p^m. */\nexport interface IField {\n ORDER: bigint;\n isLE: boolean;\n BYTES: number;\n BITS: number;\n MASK: bigint;\n ZERO: T;\n ONE: T;\n // 1-arg\n create: (num: T) => T;\n isValid: (num: T) => boolean;\n is0: (num: T) => boolean;\n neg(num: T): T;\n inv(num: T): T;\n sqrt(num: T): T;\n sqr(num: T): T;\n // 2-args\n eql(lhs: T, rhs: T): boolean;\n add(lhs: T, rhs: T): T;\n sub(lhs: T, rhs: T): T;\n mul(lhs: T, rhs: T | bigint): T;\n pow(lhs: T, power: bigint): T;\n div(lhs: T, rhs: T | bigint): T;\n // N for NonNormalized (for now)\n addN(lhs: T, rhs: T): T;\n subN(lhs: T, rhs: T): T;\n mulN(lhs: T, rhs: T | bigint): T;\n sqrN(num: T): T;\n\n // Optional\n // Should be same as sgn0 function in\n // [RFC9380](https://www.rfc-editor.org/rfc/rfc9380#section-4.1).\n // NOTE: sgn0 is 'negative in LE', which is same as odd. And negative in LE is kinda strange definition anyway.\n isOdd?(num: T): boolean; // Odd instead of even since we have it for Fp2\n // legendre?(num: T): T;\n invertBatch: (lst: T[]) => T[];\n toBytes(num: T): Uint8Array;\n fromBytes(bytes: Uint8Array): T;\n // If c is False, CMOV returns a, otherwise it returns b.\n cmov(a: T, b: T, c: boolean): T;\n}\n// prettier-ignore\nconst FIELD_FIELDS = [\n 'create', 'isValid', 'is0', 'neg', 'inv', 'sqrt', 'sqr',\n 'eql', 'add', 'sub', 'mul', 'pow', 'div',\n 'addN', 'subN', 'mulN', 'sqrN'\n] as const;\nexport function validateField(field: IField): IField {\n const initial = {\n ORDER: 'bigint',\n MASK: 'bigint',\n BYTES: 'isSafeInteger',\n BITS: 'isSafeInteger',\n } as Record;\n const opts = FIELD_FIELDS.reduce((map, val: string) => {\n map[val] = 'function';\n return map;\n }, initial);\n return validateObject(field, opts);\n}\n\n// Generic field functions\n\n/**\n * Same as `pow` but for Fp: non-constant-time.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n */\nexport function FpPow(Fp: IField, num: T, power: bigint): T {\n if (power < _0n) throw new Error('invalid exponent, negatives unsupported');\n if (power === _0n) return Fp.ONE;\n if (power === _1n) return num;\n let p = Fp.ONE;\n let d = num;\n while (power > _0n) {\n if (power & _1n) p = Fp.mul(p, d);\n d = Fp.sqr(d);\n power >>= _1n;\n }\n return p;\n}\n\n/**\n * Efficiently invert an array of Field elements.\n * Exception-free. Will return `undefined` for 0 elements.\n * @param passZero map 0 to 0 (instead of undefined)\n */\nexport function FpInvertBatch(Fp: IField, nums: T[], passZero = false): T[] {\n const inverted = new Array(nums.length).fill(passZero ? Fp.ZERO : undefined);\n // Walk from first to last, multiply them by each other MOD p\n const multipliedAcc = nums.reduce((acc, num, i) => {\n if (Fp.is0(num)) return acc;\n inverted[i] = acc;\n return Fp.mul(acc, num);\n }, Fp.ONE);\n // Invert last element\n const invertedAcc = Fp.inv(multipliedAcc);\n // Walk from last to first, multiply them by inverted each other MOD p\n nums.reduceRight((acc, num, i) => {\n if (Fp.is0(num)) return acc;\n inverted[i] = Fp.mul(acc, inverted[i]);\n return Fp.mul(acc, num);\n }, invertedAcc);\n return inverted;\n}\n\n// TODO: remove\nexport function FpDiv(Fp: IField, lhs: T, rhs: T | bigint): T {\n return Fp.mul(lhs, typeof rhs === 'bigint' ? invert(rhs, Fp.ORDER) : Fp.inv(rhs));\n}\n\n/**\n * Legendre symbol.\n * Legendre constant is used to calculate Legendre symbol (a | p)\n * which denotes the value of a^((p-1)/2) (mod p).\n *\n * * (a | p) \u2261 1 if a is a square (mod p), quadratic residue\n * * (a | p) \u2261 -1 if a is not a square (mod p), quadratic non residue\n * * (a | p) \u2261 0 if a \u2261 0 (mod p)\n */\nexport function FpLegendre(Fp: IField, n: T): -1 | 0 | 1 {\n // We can use 3rd argument as optional cache of this value\n // but seems unneeded for now. The operation is very fast.\n const p1mod2 = (Fp.ORDER - _1n) / _2n;\n const powered = Fp.pow(n, p1mod2);\n const yes = Fp.eql(powered, Fp.ONE);\n const zero = Fp.eql(powered, Fp.ZERO);\n const no = Fp.eql(powered, Fp.neg(Fp.ONE));\n if (!yes && !zero && !no) throw new Error('invalid Legendre symbol result');\n return yes ? 1 : zero ? 0 : -1;\n}\n\n// This function returns True whenever the value x is a square in the field F.\nexport function FpIsSquare(Fp: IField, n: T): boolean {\n const l = FpLegendre(Fp, n);\n return l === 1;\n}\n\n// CURVE.n lengths\nexport function nLength(\n n: bigint,\n nBitLength?: number\n): {\n nBitLength: number;\n nByteLength: number;\n} {\n // Bit size, byte size of CURVE.n\n if (nBitLength !== undefined) anumber(nBitLength);\n const _nBitLength = nBitLength !== undefined ? nBitLength : n.toString(2).length;\n const nByteLength = Math.ceil(_nBitLength / 8);\n return { nBitLength: _nBitLength, nByteLength };\n}\n\ntype FpField = IField & Required, 'isOdd'>>;\n/**\n * Initializes a finite field over prime.\n * Major performance optimizations:\n * * a) denormalized operations like mulN instead of mul\n * * b) same object shape: never add or remove keys\n * * c) Object.freeze\n * Fragile: always run a benchmark on a change.\n * Security note: operations don't check 'isValid' for all elements for performance reasons,\n * it is caller responsibility to check this.\n * This is low-level code, please make sure you know what you're doing.\n * @param ORDER prime positive bigint\n * @param bitLen how many bits the field consumes\n * @param isLE (def: false) if encoding / decoding should be in little-endian\n * @param redef optional faster redefinitions of sqrt and other methods\n */\nexport function Field(\n ORDER: bigint,\n bitLen?: number,\n isLE = false,\n redef: Partial> = {}\n): Readonly {\n if (ORDER <= _0n) throw new Error('invalid field: expected ORDER > 0, got ' + ORDER);\n const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, bitLen);\n if (BYTES > 2048) throw new Error('invalid field: expected ORDER of <= 2048 bytes');\n let sqrtP: ReturnType; // cached sqrtP\n const f: Readonly = Object.freeze({\n ORDER,\n isLE,\n BITS,\n BYTES,\n MASK: bitMask(BITS),\n ZERO: _0n,\n ONE: _1n,\n create: (num) => mod(num, ORDER),\n isValid: (num) => {\n if (typeof num !== 'bigint')\n throw new Error('invalid field element: expected bigint, got ' + typeof num);\n return _0n <= num && num < ORDER; // 0 is valid element, but it's not invertible\n },\n is0: (num) => num === _0n,\n isOdd: (num) => (num & _1n) === _1n,\n neg: (num) => mod(-num, ORDER),\n eql: (lhs, rhs) => lhs === rhs,\n\n sqr: (num) => mod(num * num, ORDER),\n add: (lhs, rhs) => mod(lhs + rhs, ORDER),\n sub: (lhs, rhs) => mod(lhs - rhs, ORDER),\n mul: (lhs, rhs) => mod(lhs * rhs, ORDER),\n pow: (num, power) => FpPow(f, num, power),\n div: (lhs, rhs) => mod(lhs * invert(rhs, ORDER), ORDER),\n\n // Same as above, but doesn't normalize\n sqrN: (num) => num * num,\n addN: (lhs, rhs) => lhs + rhs,\n subN: (lhs, rhs) => lhs - rhs,\n mulN: (lhs, rhs) => lhs * rhs,\n\n inv: (num) => invert(num, ORDER),\n sqrt:\n redef.sqrt ||\n ((n) => {\n if (!sqrtP) sqrtP = FpSqrt(ORDER);\n return sqrtP(f, n);\n }),\n toBytes: (num) => (isLE ? numberToBytesLE(num, BYTES) : numberToBytesBE(num, BYTES)),\n fromBytes: (bytes) => {\n if (bytes.length !== BYTES)\n throw new Error('Field.fromBytes: expected ' + BYTES + ' bytes, got ' + bytes.length);\n return isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n },\n // TODO: we don't need it here, move out to separate fn\n invertBatch: (lst) => FpInvertBatch(f, lst),\n // We can't move this out because Fp6, Fp12 implement it\n // and it's unclear what to return in there.\n cmov: (a, b, c) => (c ? b : a),\n } as FpField);\n return Object.freeze(f);\n}\n\nexport function FpSqrtOdd(Fp: IField, elm: T): T {\n if (!Fp.isOdd) throw new Error(\"Field doesn't have isOdd\");\n const root = Fp.sqrt(elm);\n return Fp.isOdd(root) ? root : Fp.neg(root);\n}\n\nexport function FpSqrtEven(Fp: IField, elm: T): T {\n if (!Fp.isOdd) throw new Error(\"Field doesn't have isOdd\");\n const root = Fp.sqrt(elm);\n return Fp.isOdd(root) ? Fp.neg(root) : root;\n}\n\n/**\n * \"Constant-time\" private key generation utility.\n * Same as mapKeyToField, but accepts less bytes (40 instead of 48 for 32-byte field).\n * Which makes it slightly more biased, less secure.\n * @deprecated use `mapKeyToField` instead\n */\nexport function hashToPrivateScalar(\n hash: string | Uint8Array,\n groupOrder: bigint,\n isLE = false\n): bigint {\n hash = ensureBytes('privateHash', hash);\n const hashLen = hash.length;\n const minLen = nLength(groupOrder).nByteLength + 8;\n if (minLen < 24 || hashLen < minLen || hashLen > 1024)\n throw new Error(\n 'hashToPrivateScalar: expected ' + minLen + '-1024 bytes of input, got ' + hashLen\n );\n const num = isLE ? bytesToNumberLE(hash) : bytesToNumberBE(hash);\n return mod(num, groupOrder - _1n) + _1n;\n}\n\n/**\n * Returns total number of bytes consumed by the field element.\n * For example, 32 bytes for usual 256-bit weierstrass curve.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of field\n */\nexport function getFieldBytesLength(fieldOrder: bigint): number {\n if (typeof fieldOrder !== 'bigint') throw new Error('field order must be bigint');\n const bitLength = fieldOrder.toString(2).length;\n return Math.ceil(bitLength / 8);\n}\n\n/**\n * Returns minimal amount of bytes that can be safely reduced\n * by field order.\n * Should be 2^-128 for 128-bit curve such as P256.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of target hash\n */\nexport function getMinHashLength(fieldOrder: bigint): number {\n const length = getFieldBytesLength(fieldOrder);\n return length + Math.ceil(length / 2);\n}\n\n/**\n * \"Constant-time\" private key generation utility.\n * Can take (n + n/2) or more bytes of uniform input e.g. from CSPRNG or KDF\n * and convert them into private scalar, with the modulo bias being negligible.\n * Needs at least 48 bytes of input for 32-byte private key.\n * https://research.kudelskisecurity.com/2020/07/28/the-definitive-guide-to-modulo-bias-and-how-to-avoid-it/\n * FIPS 186-5, A.2 https://csrc.nist.gov/publications/detail/fips/186/5/final\n * RFC 9380, https://www.rfc-editor.org/rfc/rfc9380#section-5\n * @param hash hash output from SHA3 or a similar function\n * @param groupOrder size of subgroup - (e.g. secp256k1.CURVE.n)\n * @param isLE interpret hash bytes as LE num\n * @returns valid private scalar\n */\nexport function mapHashToField(key: Uint8Array, fieldOrder: bigint, isLE = false): Uint8Array {\n const len = key.length;\n const fieldLen = getFieldBytesLength(fieldOrder);\n const minLen = getMinHashLength(fieldOrder);\n // No small numbers: need to understand bias story. No huge numbers: easier to detect JS timings.\n if (len < 16 || len < minLen || len > 1024)\n throw new Error('expected ' + minLen + '-1024 bytes of input, got ' + len);\n const num = isLE ? bytesToNumberLE(key) : bytesToNumberBE(key);\n // `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0\n const reduced = mod(num, fieldOrder - _1n) + _1n;\n return isLE ? numberToBytesLE(reduced, fieldLen) : numberToBytesBE(reduced, fieldLen);\n}\n", "/**\n * Methods for elliptic curve multiplication by scalars.\n * Contains wNAF, pippenger\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { type IField, nLength, validateField } from './modular.ts';\nimport { bitLen, bitMask, validateObject } from './utils.ts';\n\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\n\nexport type AffinePoint = {\n x: T;\n y: T;\n} & { z?: never; t?: never };\n\nexport interface Group> {\n double(): T;\n negate(): T;\n add(other: T): T;\n subtract(other: T): T;\n equals(other: T): boolean;\n multiply(scalar: bigint): T;\n}\n\nexport type GroupConstructor = {\n BASE: T;\n ZERO: T;\n};\nexport type Mapper = (i: T[]) => T[];\n\nfunction constTimeNegate>(condition: boolean, item: T): T {\n const neg = item.negate();\n return condition ? neg : item;\n}\n\nfunction validateW(W: number, bits: number) {\n if (!Number.isSafeInteger(W) || W <= 0 || W > bits)\n throw new Error('invalid window size, expected [1..' + bits + '], got W=' + W);\n}\n\n/** Internal wNAF opts for specific W and scalarBits */\nexport type WOpts = {\n windows: number;\n windowSize: number;\n mask: bigint;\n maxNumber: number;\n shiftBy: bigint;\n};\n\nfunction calcWOpts(W: number, scalarBits: number): WOpts {\n validateW(W, scalarBits);\n const windows = Math.ceil(scalarBits / W) + 1; // W=8 33. Not 32, because we skip zero\n const windowSize = 2 ** (W - 1); // W=8 128. Not 256, because we skip zero\n const maxNumber = 2 ** W; // W=8 256\n const mask = bitMask(W); // W=8 255 == mask 0b11111111\n const shiftBy = BigInt(W); // W=8 8\n return { windows, windowSize, mask, maxNumber, shiftBy };\n}\n\nfunction calcOffsets(n: bigint, window: number, wOpts: WOpts) {\n const { windowSize, mask, maxNumber, shiftBy } = wOpts;\n let wbits = Number(n & mask); // extract W bits.\n let nextN = n >> shiftBy; // shift number by W bits.\n\n // What actually happens here:\n // const highestBit = Number(mask ^ (mask >> 1n));\n // let wbits2 = wbits - 1; // skip zero\n // if (wbits2 & highestBit) { wbits2 ^= Number(mask); // (~);\n\n // split if bits > max: +224 => 256-32\n if (wbits > windowSize) {\n // we skip zero, which means instead of `>= size-1`, we do `> size`\n wbits -= maxNumber; // -32, can be maxNumber - wbits, but then we need to set isNeg here.\n nextN += _1n; // +256 (carry)\n }\n const offsetStart = window * windowSize;\n const offset = offsetStart + Math.abs(wbits) - 1; // -1 because we skip zero\n const isZero = wbits === 0; // is current window slice a 0?\n const isNeg = wbits < 0; // is current window slice negative?\n const isNegF = window % 2 !== 0; // fake random statement for noise\n const offsetF = offsetStart; // fake offset for noise\n return { nextN, offset, isZero, isNeg, isNegF, offsetF };\n}\n\nfunction validateMSMPoints(points: any[], c: any) {\n if (!Array.isArray(points)) throw new Error('array expected');\n points.forEach((p, i) => {\n if (!(p instanceof c)) throw new Error('invalid point at index ' + i);\n });\n}\nfunction validateMSMScalars(scalars: any[], field: any) {\n if (!Array.isArray(scalars)) throw new Error('array of scalars expected');\n scalars.forEach((s, i) => {\n if (!field.isValid(s)) throw new Error('invalid scalar at index ' + i);\n });\n}\n\n// Since points in different groups cannot be equal (different object constructor),\n// we can have single place to store precomputes.\n// Allows to make points frozen / immutable.\nconst pointPrecomputes = new WeakMap();\nconst pointWindowSizes = new WeakMap();\n\nfunction getW(P: any): number {\n return pointWindowSizes.get(P) || 1;\n}\n\nexport type IWNAF> = {\n constTimeNegate: >(condition: boolean, item: T) => T;\n hasPrecomputes(elm: T): boolean;\n unsafeLadder(elm: T, n: bigint, p?: T): T;\n precomputeWindow(elm: T, W: number): Group[];\n getPrecomputes(W: number, P: T, transform: Mapper): T[];\n wNAF(W: number, precomputes: T[], n: bigint): { p: T; f: T };\n wNAFUnsafe(W: number, precomputes: T[], n: bigint, acc?: T): T;\n wNAFCached(P: T, n: bigint, transform: Mapper): { p: T; f: T };\n wNAFCachedUnsafe(P: T, n: bigint, transform: Mapper, prev?: T): T;\n setWindowSize(P: T, W: number): void;\n};\n\n/**\n * Elliptic curve multiplication of Point by scalar. Fragile.\n * Scalars should always be less than curve order: this should be checked inside of a curve itself.\n * Creates precomputation tables for fast multiplication:\n * - private scalar is split by fixed size windows of W bits\n * - every window point is collected from window's table & added to accumulator\n * - since windows are different, same point inside tables won't be accessed more than once per calc\n * - each multiplication is 'Math.ceil(CURVE_ORDER / \uD835\uDC4A) + 1' point additions (fixed for any scalar)\n * - +1 window is neccessary for wNAF\n * - wNAF reduces table size: 2x less memory + 2x faster generation, but 10% slower multiplication\n *\n * @todo Research returning 2d JS array of windows, instead of a single window.\n * This would allow windows to be in different memory locations\n */\nexport function wNAF>(c: GroupConstructor, bits: number): IWNAF {\n return {\n constTimeNegate,\n\n hasPrecomputes(elm: T) {\n return getW(elm) !== 1;\n },\n\n // non-const time multiplication ladder\n unsafeLadder(elm: T, n: bigint, p = c.ZERO) {\n let d: T = elm;\n while (n > _0n) {\n if (n & _1n) p = p.add(d);\n d = d.double();\n n >>= _1n;\n }\n return p;\n },\n\n /**\n * Creates a wNAF precomputation window. Used for caching.\n * Default window size is set by `utils.precompute()` and is equal to 8.\n * Number of precomputed points depends on the curve size:\n * 2^(\uD835\uDC4A\u22121) * (Math.ceil(\uD835\uDC5B / \uD835\uDC4A) + 1), where:\n * - \uD835\uDC4A is the window size\n * - \uD835\uDC5B is the bitlength of the curve order.\n * For a 256-bit curve and window size 8, the number of precomputed points is 128 * 33 = 4224.\n * @param elm Point instance\n * @param W window size\n * @returns precomputed point tables flattened to a single array\n */\n precomputeWindow(elm: T, W: number): Group[] {\n const { windows, windowSize } = calcWOpts(W, bits);\n const points: T[] = [];\n let p: T = elm;\n let base = p;\n for (let window = 0; window < windows; window++) {\n base = p;\n points.push(base);\n // i=1, bc we skip 0\n for (let i = 1; i < windowSize; i++) {\n base = base.add(p);\n points.push(base);\n }\n p = base.double();\n }\n return points;\n },\n\n /**\n * Implements ec multiplication using precomputed tables and w-ary non-adjacent form.\n * @param W window size\n * @param precomputes precomputed tables\n * @param n scalar (we don't check here, but should be less than curve order)\n * @returns real and fake (for const-time) points\n */\n wNAF(W: number, precomputes: T[], n: bigint): { p: T; f: T } {\n // Smaller version:\n // https://github.com/paulmillr/noble-secp256k1/blob/47cb1669b6e506ad66b35fe7d76132ae97465da2/index.ts#L502-L541\n // TODO: check the scalar is less than group order?\n // wNAF behavior is undefined otherwise. But have to carefully remove\n // other checks before wNAF. ORDER == bits here.\n // Accumulators\n let p = c.ZERO;\n let f = c.BASE;\n // This code was first written with assumption that 'f' and 'p' will never be infinity point:\n // since each addition is multiplied by 2 ** W, it cannot cancel each other. However,\n // there is negate now: it is possible that negated element from low value\n // would be the same as high element, which will create carry into next window.\n // It's not obvious how this can fail, but still worth investigating later.\n const wo = calcWOpts(W, bits);\n for (let window = 0; window < wo.windows; window++) {\n // (n === _0n) is handled and not early-exited. isEven and offsetF are used for noise\n const { nextN, offset, isZero, isNeg, isNegF, offsetF } = calcOffsets(n, window, wo);\n n = nextN;\n if (isZero) {\n // bits are 0: add garbage to fake point\n // Important part for const-time getPublicKey: add random \"noise\" point to f.\n f = f.add(constTimeNegate(isNegF, precomputes[offsetF]));\n } else {\n // bits are 1: add to result point\n p = p.add(constTimeNegate(isNeg, precomputes[offset]));\n }\n }\n // Return both real and fake points: JIT won't eliminate f.\n // At this point there is a way to F be infinity-point even if p is not,\n // which makes it less const-time: around 1 bigint multiply.\n return { p, f };\n },\n\n /**\n * Implements ec unsafe (non const-time) multiplication using precomputed tables and w-ary non-adjacent form.\n * @param W window size\n * @param precomputes precomputed tables\n * @param n scalar (we don't check here, but should be less than curve order)\n * @param acc accumulator point to add result of multiplication\n * @returns point\n */\n wNAFUnsafe(W: number, precomputes: T[], n: bigint, acc: T = c.ZERO): T {\n const wo = calcWOpts(W, bits);\n for (let window = 0; window < wo.windows; window++) {\n if (n === _0n) break; // Early-exit, skip 0 value\n const { nextN, offset, isZero, isNeg } = calcOffsets(n, window, wo);\n n = nextN;\n if (isZero) {\n // Window bits are 0: skip processing.\n // Move to next window.\n continue;\n } else {\n const item = precomputes[offset];\n acc = acc.add(isNeg ? item.negate() : item); // Re-using acc allows to save adds in MSM\n }\n }\n return acc;\n },\n\n getPrecomputes(W: number, P: T, transform: Mapper): T[] {\n // Calculate precomputes on a first run, reuse them after\n let comp = pointPrecomputes.get(P);\n if (!comp) {\n comp = this.precomputeWindow(P, W) as T[];\n if (W !== 1) pointPrecomputes.set(P, transform(comp));\n }\n return comp;\n },\n\n wNAFCached(P: T, n: bigint, transform: Mapper): { p: T; f: T } {\n const W = getW(P);\n return this.wNAF(W, this.getPrecomputes(W, P, transform), n);\n },\n\n wNAFCachedUnsafe(P: T, n: bigint, transform: Mapper, prev?: T): T {\n const W = getW(P);\n if (W === 1) return this.unsafeLadder(P, n, prev); // For W=1 ladder is ~x2 faster\n return this.wNAFUnsafe(W, this.getPrecomputes(W, P, transform), n, prev);\n },\n\n // We calculate precomputes for elliptic curve point multiplication\n // using windowed method. This specifies window size and\n // stores precomputed values. Usually only base point would be precomputed.\n\n setWindowSize(P: T, W: number) {\n validateW(W, bits);\n pointWindowSizes.set(P, W);\n pointPrecomputes.delete(P);\n },\n };\n}\n\n/**\n * Pippenger algorithm for multi-scalar multiplication (MSM, Pa + Qb + Rc + ...).\n * 30x faster vs naive addition on L=4096, 10x faster than precomputes.\n * For N=254bit, L=1, it does: 1024 ADD + 254 DBL. For L=5: 1536 ADD + 254 DBL.\n * Algorithmically constant-time (for same L), even when 1 point + scalar, or when scalar = 0.\n * @param c Curve Point constructor\n * @param fieldN field over CURVE.N - important that it's not over CURVE.P\n * @param points array of L curve points\n * @param scalars array of L scalars (aka private keys / bigints)\n */\nexport function pippenger>(\n c: GroupConstructor,\n fieldN: IField,\n points: T[],\n scalars: bigint[]\n): T {\n // If we split scalars by some window (let's say 8 bits), every chunk will only\n // take 256 buckets even if there are 4096 scalars, also re-uses double.\n // TODO:\n // - https://eprint.iacr.org/2024/750.pdf\n // - https://tches.iacr.org/index.php/TCHES/article/view/10287\n // 0 is accepted in scalars\n validateMSMPoints(points, c);\n validateMSMScalars(scalars, fieldN);\n const plength = points.length;\n const slength = scalars.length;\n if (plength !== slength) throw new Error('arrays of points and scalars must have equal length');\n // if (plength === 0) throw new Error('array must be of length >= 2');\n const zero = c.ZERO;\n const wbits = bitLen(BigInt(plength));\n let windowSize = 1; // bits\n if (wbits > 12) windowSize = wbits - 3;\n else if (wbits > 4) windowSize = wbits - 2;\n else if (wbits > 0) windowSize = 2;\n const MASK = bitMask(windowSize);\n const buckets = new Array(Number(MASK) + 1).fill(zero); // +1 for zero array\n const lastBits = Math.floor((fieldN.BITS - 1) / windowSize) * windowSize;\n let sum = zero;\n for (let i = lastBits; i >= 0; i -= windowSize) {\n buckets.fill(zero);\n for (let j = 0; j < slength; j++) {\n const scalar = scalars[j];\n const wbits = Number((scalar >> BigInt(i)) & MASK);\n buckets[wbits] = buckets[wbits].add(points[j]);\n }\n let resI = zero; // not using this will do small speed-up, but will lose ct\n // Skip first bucket, because it is zero\n for (let j = buckets.length - 1, sumI = zero; j > 0; j--) {\n sumI = sumI.add(buckets[j]);\n resI = resI.add(sumI);\n }\n sum = sum.add(resI);\n if (i !== 0) for (let j = 0; j < windowSize; j++) sum = sum.double();\n }\n return sum as T;\n}\n/**\n * Precomputed multi-scalar multiplication (MSM, Pa + Qb + Rc + ...).\n * @param c Curve Point constructor\n * @param fieldN field over CURVE.N - important that it's not over CURVE.P\n * @param points array of L curve points\n * @returns function which multiplies points with scaars\n */\nexport function precomputeMSMUnsafe>(\n c: GroupConstructor,\n fieldN: IField,\n points: T[],\n windowSize: number\n): (scalars: bigint[]) => T {\n /**\n * Performance Analysis of Window-based Precomputation\n *\n * Base Case (256-bit scalar, 8-bit window):\n * - Standard precomputation requires:\n * - 31 additions per scalar \u00D7 256 scalars = 7,936 ops\n * - Plus 255 summary additions = 8,191 total ops\n * Note: Summary additions can be optimized via accumulator\n *\n * Chunked Precomputation Analysis:\n * - Using 32 chunks requires:\n * - 255 additions per chunk\n * - 256 doublings\n * - Total: (255 \u00D7 32) + 256 = 8,416 ops\n *\n * Memory Usage Comparison:\n * Window Size | Standard Points | Chunked Points\n * ------------|-----------------|---------------\n * 4-bit | 520 | 15\n * 8-bit | 4,224 | 255\n * 10-bit | 13,824 | 1,023\n * 16-bit | 557,056 | 65,535\n *\n * Key Advantages:\n * 1. Enables larger window sizes due to reduced memory overhead\n * 2. More efficient for smaller scalar counts:\n * - 16 chunks: (16 \u00D7 255) + 256 = 4,336 ops\n * - ~2x faster than standard 8,191 ops\n *\n * Limitations:\n * - Not suitable for plain precomputes (requires 256 constant doublings)\n * - Performance degrades with larger scalar counts:\n * - Optimal for ~256 scalars\n * - Less efficient for 4096+ scalars (Pippenger preferred)\n */\n validateW(windowSize, fieldN.BITS);\n validateMSMPoints(points, c);\n const zero = c.ZERO;\n const tableSize = 2 ** windowSize - 1; // table size (without zero)\n const chunks = Math.ceil(fieldN.BITS / windowSize); // chunks of item\n const MASK = bitMask(windowSize);\n const tables = points.map((p: T) => {\n const res = [];\n for (let i = 0, acc = p; i < tableSize; i++) {\n res.push(acc);\n acc = acc.add(p);\n }\n return res;\n });\n return (scalars: bigint[]): T => {\n validateMSMScalars(scalars, fieldN);\n if (scalars.length > points.length)\n throw new Error('array of scalars must be smaller than array of points');\n let res = zero;\n for (let i = 0; i < chunks; i++) {\n // No need to double if accumulator is still zero.\n if (res !== zero) for (let j = 0; j < windowSize; j++) res = res.double();\n const shiftBy = BigInt(chunks * windowSize - (i + 1) * windowSize);\n for (let j = 0; j < scalars.length; j++) {\n const n = scalars[j];\n const curr = Number((n >> shiftBy) & MASK);\n if (!curr) continue; // skip zero scalars chunks\n res = res.add(tables[j][curr - 1]);\n }\n }\n return res;\n };\n}\n\n/**\n * Generic BasicCurve interface: works even for polynomial fields (BLS): P, n, h would be ok.\n * Though generator can be different (Fp2 / Fp6 for BLS).\n */\nexport type BasicCurve = {\n Fp: IField; // Field over which we'll do calculations (Fp)\n n: bigint; // Curve order, total count of valid points in the field\n nBitLength?: number; // bit length of curve order\n nByteLength?: number; // byte length of curve order\n h: bigint; // cofactor. we can assign default=1, but users will just ignore it w/o validation\n hEff?: bigint; // Number to multiply to clear cofactor\n Gx: T; // base point X coordinate\n Gy: T; // base point Y coordinate\n allowInfinityPoint?: boolean; // bls12-381 requires it. ZERO point is valid, but invalid pubkey\n};\n\nexport function validateBasic(\n curve: BasicCurve & T\n): Readonly<\n {\n readonly nBitLength: number;\n readonly nByteLength: number;\n } & BasicCurve &\n T & {\n p: bigint;\n }\n> {\n validateField(curve.Fp);\n validateObject(\n curve,\n {\n n: 'bigint',\n h: 'bigint',\n Gx: 'field',\n Gy: 'field',\n },\n {\n nBitLength: 'isSafeInteger',\n nByteLength: 'isSafeInteger',\n }\n );\n // Set defaults\n return Object.freeze({\n ...nLength(curve.n, curve.nBitLength),\n ...curve,\n ...{ p: curve.Fp.ORDER },\n } as const);\n}\n", "/**\n * Short Weierstrass curve methods. The formula is: y\u00B2 = x\u00B3 + ax + b.\n *\n * ### Parameters\n *\n * To initialize a weierstrass curve, one needs to pass following params:\n *\n * * a: formula param\n * * b: formula param\n * * Fp: finite field of prime characteristic P; may be complex (Fp2). Arithmetics is done in field\n * * n: order of prime subgroup a.k.a total amount of valid curve points\n * * Gx: Base point (x, y) aka generator point. Gx = x coordinate\n * * Gy: ...y coordinate\n * * h: cofactor, usually 1. h*n = curve group order (n is only subgroup order)\n * * lowS: whether to enable (default) or disable \"low-s\" non-malleable signatures\n *\n * ### Design rationale for types\n *\n * * Interaction between classes from different curves should fail:\n * `k256.Point.BASE.add(p256.Point.BASE)`\n * * For this purpose we want to use `instanceof` operator, which is fast and works during runtime\n * * Different calls of `curve()` would return different classes -\n * `curve(params) !== curve(params)`: if somebody decided to monkey-patch their curve,\n * it won't affect others\n *\n * TypeScript can't infer types for classes created inside a function. Classes is one instance\n * of nominative types in TypeScript and interfaces only check for shape, so it's hard to create\n * unique type for every function call.\n *\n * We can use generic types via some param, like curve opts, but that would:\n * 1. Enable interaction between `curve(params)` and `curve(params)` (curves of same params)\n * which is hard to debug.\n * 2. Params can be generic and we can't enforce them to be constant value:\n * if somebody creates curve from non-constant params,\n * it would be allowed to interact with other curves with non-constant params\n *\n * @todo https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html#unique-symbol\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// prettier-ignore\nimport {\n pippenger, validateBasic, wNAF,\n type AffinePoint, type BasicCurve, type Group, type GroupConstructor\n} from './curve.ts';\n// prettier-ignore\nimport {\n Field,\n FpInvertBatch,\n getMinHashLength, invert, mapHashToField, mod, validateField,\n type IField\n} from './modular.ts';\n// prettier-ignore\nimport {\n aInRange, abool,\n bitMask,\n bytesToHex, bytesToNumberBE, concatBytes, createHmacDrbg, ensureBytes, hexToBytes,\n inRange, isBytes, memoized, numberToBytesBE, numberToHexUnpadded, validateObject,\n type CHash, type Hex, type PrivKey\n} from './utils.ts';\n\nexport type { AffinePoint };\ntype HmacFnSync = (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array;\n/**\n * When Weierstrass curve has `a=0`, it becomes Koblitz curve.\n * Koblitz curves allow using **efficiently-computable GLV endomorphism \u03C8**.\n * Endomorphism uses 2x less RAM, speeds up precomputation by 2x and ECDH / key recovery by 20%.\n * For precomputed wNAF it trades off 1/2 init time & 1/3 ram for 20% perf hit.\n *\n * Endomorphism consists of beta, lambda and splitScalar:\n *\n * 1. GLV endomorphism \u03C8 transforms a point: `P = (x, y) \u21A6 \u03C8(P) = (\u03B2\u00B7x mod p, y)`\n * 2. GLV scalar decomposition transforms a scalar: `k \u2261 k\u2081 + k\u2082\u00B7\u03BB (mod n)`\n * 3. Then these are combined: `k\u00B7P = k\u2081\u00B7P + k\u2082\u00B7\u03C8(P)`\n * 4. Two 128-bit point-by-scalar multiplications + one point addition is faster than\n * one 256-bit multiplication.\n *\n * where\n * * beta: \u03B2 \u2208 F\u209A with \u03B2\u00B3 = 1, \u03B2 \u2260 1\n * * lambda: \u03BB \u2208 F\u2099 with \u03BB\u00B3 = 1, \u03BB \u2260 1\n * * splitScalar decomposes k \u21A6 k\u2081, k\u2082, by using reduced basis vectors.\n * Gauss lattice reduction calculates them from initial basis vectors `(n, 0), (-\u03BB, 0)`\n *\n * Check out `test/misc/endomorphism.js` and\n * [gist](https://gist.github.com/paulmillr/eb670806793e84df628a7c434a873066).\n */\nexport type EndomorphismOpts = {\n beta: bigint;\n splitScalar: (k: bigint) => { k1neg: boolean; k1: bigint; k2neg: boolean; k2: bigint };\n};\nexport type BasicWCurve = BasicCurve & {\n // Params: a, b\n a: T;\n b: T;\n\n // Optional params\n allowedPrivateKeyLengths?: readonly number[]; // for P521\n wrapPrivateKey?: boolean; // bls12-381 requires mod(n) instead of rejecting keys >= n\n endo?: EndomorphismOpts;\n // When a cofactor != 1, there can be an effective methods to:\n // 1. Determine whether a point is torsion-free\n isTorsionFree?: (c: ProjConstructor, point: ProjPointType) => boolean;\n // 2. Clear torsion component\n clearCofactor?: (c: ProjConstructor, point: ProjPointType) => ProjPointType;\n};\n\nexport type Entropy = Hex | boolean;\nexport type SignOpts = { lowS?: boolean; extraEntropy?: Entropy; prehash?: boolean };\nexport type VerOpts = { lowS?: boolean; prehash?: boolean; format?: 'compact' | 'der' | undefined };\n\nfunction validateSigVerOpts(opts: SignOpts | VerOpts) {\n if (opts.lowS !== undefined) abool('lowS', opts.lowS);\n if (opts.prehash !== undefined) abool('prehash', opts.prehash);\n}\n\n// Instance for 3d XYZ points\nexport interface ProjPointType extends Group> {\n readonly px: T;\n readonly py: T;\n readonly pz: T;\n get x(): T;\n get y(): T;\n toAffine(iz?: T): AffinePoint;\n toHex(isCompressed?: boolean): string;\n toRawBytes(isCompressed?: boolean): Uint8Array;\n\n assertValidity(): void;\n hasEvenY(): boolean;\n multiplyUnsafe(scalar: bigint): ProjPointType;\n multiplyAndAddUnsafe(Q: ProjPointType, a: bigint, b: bigint): ProjPointType | undefined;\n isTorsionFree(): boolean;\n clearCofactor(): ProjPointType;\n _setWindowSize(windowSize: number): void;\n}\n// Static methods for 3d XYZ points\nexport interface ProjConstructor extends GroupConstructor> {\n new (x: T, y: T, z: T): ProjPointType;\n fromAffine(p: AffinePoint): ProjPointType;\n fromHex(hex: Hex): ProjPointType;\n fromPrivateKey(privateKey: PrivKey): ProjPointType;\n normalizeZ(points: ProjPointType[]): ProjPointType[];\n msm(points: ProjPointType[], scalars: bigint[]): ProjPointType;\n}\n\nexport type CurvePointsType = BasicWCurve & {\n // Bytes\n fromBytes?: (bytes: Uint8Array) => AffinePoint;\n toBytes?: (c: ProjConstructor, point: ProjPointType, isCompressed: boolean) => Uint8Array;\n};\n\nexport type CurvePointsTypeWithLength = Readonly<\n CurvePointsType & { nByteLength: number; nBitLength: number }\n>;\n\nfunction validatePointOpts(curve: CurvePointsType): CurvePointsTypeWithLength {\n const opts = validateBasic(curve);\n validateObject(\n opts,\n {\n a: 'field',\n b: 'field',\n },\n {\n allowInfinityPoint: 'boolean',\n allowedPrivateKeyLengths: 'array',\n clearCofactor: 'function',\n fromBytes: 'function',\n isTorsionFree: 'function',\n toBytes: 'function',\n wrapPrivateKey: 'boolean',\n }\n );\n const { endo, Fp, a } = opts;\n if (endo) {\n if (!Fp.eql(a, Fp.ZERO)) {\n throw new Error('invalid endo: CURVE.a must be 0');\n }\n if (\n typeof endo !== 'object' ||\n typeof endo.beta !== 'bigint' ||\n typeof endo.splitScalar !== 'function'\n ) {\n throw new Error('invalid endo: expected \"beta\": bigint and \"splitScalar\": function');\n }\n }\n return Object.freeze({ ...opts } as const);\n}\n\nexport type CurvePointsRes = {\n CURVE: ReturnType>;\n ProjectivePoint: ProjConstructor;\n normPrivateKeyToScalar: (key: PrivKey) => bigint;\n weierstrassEquation: (x: T) => T;\n isWithinCurveOrder: (num: bigint) => boolean;\n};\n\nexport class DERErr extends Error {\n constructor(m = '') {\n super(m);\n }\n}\nexport type IDER = {\n // asn.1 DER encoding utils\n Err: typeof DERErr;\n // Basic building block is TLV (Tag-Length-Value)\n _tlv: {\n encode: (tag: number, data: string) => string;\n // v - value, l - left bytes (unparsed)\n decode(tag: number, data: Uint8Array): { v: Uint8Array; l: Uint8Array };\n };\n // https://crypto.stackexchange.com/a/57734 Leftmost bit of first byte is 'negative' flag,\n // since we always use positive integers here. It must always be empty:\n // - add zero byte if exists\n // - if next byte doesn't have a flag, leading zero is not allowed (minimal encoding)\n _int: {\n encode(num: bigint): string;\n decode(data: Uint8Array): bigint;\n };\n toSig(hex: string | Uint8Array): { r: bigint; s: bigint };\n hexFromSig(sig: { r: bigint; s: bigint }): string;\n};\n/**\n * ASN.1 DER encoding utilities. ASN is very complex & fragile. Format:\n *\n * [0x30 (SEQUENCE), bytelength, 0x02 (INTEGER), intLength, R, 0x02 (INTEGER), intLength, S]\n *\n * Docs: https://letsencrypt.org/docs/a-warm-welcome-to-asn1-and-der/, https://luca.ntop.org/Teaching/Appunti/asn1.html\n */\nexport const DER: IDER = {\n // asn.1 DER encoding utils\n Err: DERErr,\n // Basic building block is TLV (Tag-Length-Value)\n _tlv: {\n encode: (tag: number, data: string): string => {\n const { Err: E } = DER;\n if (tag < 0 || tag > 256) throw new E('tlv.encode: wrong tag');\n if (data.length & 1) throw new E('tlv.encode: unpadded data');\n const dataLen = data.length / 2;\n const len = numberToHexUnpadded(dataLen);\n if ((len.length / 2) & 0b1000_0000) throw new E('tlv.encode: long form length too big');\n // length of length with long form flag\n const lenLen = dataLen > 127 ? numberToHexUnpadded((len.length / 2) | 0b1000_0000) : '';\n const t = numberToHexUnpadded(tag);\n return t + lenLen + len + data;\n },\n // v - value, l - left bytes (unparsed)\n decode(tag: number, data: Uint8Array): { v: Uint8Array; l: Uint8Array } {\n const { Err: E } = DER;\n let pos = 0;\n if (tag < 0 || tag > 256) throw new E('tlv.encode: wrong tag');\n if (data.length < 2 || data[pos++] !== tag) throw new E('tlv.decode: wrong tlv');\n const first = data[pos++];\n const isLong = !!(first & 0b1000_0000); // First bit of first length byte is flag for short/long form\n let length = 0;\n if (!isLong) length = first;\n else {\n // Long form: [longFlag(1bit), lengthLength(7bit), length (BE)]\n const lenLen = first & 0b0111_1111;\n if (!lenLen) throw new E('tlv.decode(long): indefinite length not supported');\n if (lenLen > 4) throw new E('tlv.decode(long): byte length is too big'); // this will overflow u32 in js\n const lengthBytes = data.subarray(pos, pos + lenLen);\n if (lengthBytes.length !== lenLen) throw new E('tlv.decode: length bytes not complete');\n if (lengthBytes[0] === 0) throw new E('tlv.decode(long): zero leftmost byte');\n for (const b of lengthBytes) length = (length << 8) | b;\n pos += lenLen;\n if (length < 128) throw new E('tlv.decode(long): not minimal encoding');\n }\n const v = data.subarray(pos, pos + length);\n if (v.length !== length) throw new E('tlv.decode: wrong value length');\n return { v, l: data.subarray(pos + length) };\n },\n },\n // https://crypto.stackexchange.com/a/57734 Leftmost bit of first byte is 'negative' flag,\n // since we always use positive integers here. It must always be empty:\n // - add zero byte if exists\n // - if next byte doesn't have a flag, leading zero is not allowed (minimal encoding)\n _int: {\n encode(num: bigint): string {\n const { Err: E } = DER;\n if (num < _0n) throw new E('integer: negative integers are not allowed');\n let hex = numberToHexUnpadded(num);\n // Pad with zero byte if negative flag is present\n if (Number.parseInt(hex[0], 16) & 0b1000) hex = '00' + hex;\n if (hex.length & 1) throw new E('unexpected DER parsing assertion: unpadded hex');\n return hex;\n },\n decode(data: Uint8Array): bigint {\n const { Err: E } = DER;\n if (data[0] & 0b1000_0000) throw new E('invalid signature integer: negative');\n if (data[0] === 0x00 && !(data[1] & 0b1000_0000))\n throw new E('invalid signature integer: unnecessary leading zero');\n return bytesToNumberBE(data);\n },\n },\n toSig(hex: string | Uint8Array): { r: bigint; s: bigint } {\n // parse DER signature\n const { Err: E, _int: int, _tlv: tlv } = DER;\n const data = ensureBytes('signature', hex);\n const { v: seqBytes, l: seqLeftBytes } = tlv.decode(0x30, data);\n if (seqLeftBytes.length) throw new E('invalid signature: left bytes after parsing');\n const { v: rBytes, l: rLeftBytes } = tlv.decode(0x02, seqBytes);\n const { v: sBytes, l: sLeftBytes } = tlv.decode(0x02, rLeftBytes);\n if (sLeftBytes.length) throw new E('invalid signature: left bytes after parsing');\n return { r: int.decode(rBytes), s: int.decode(sBytes) };\n },\n hexFromSig(sig: { r: bigint; s: bigint }): string {\n const { _tlv: tlv, _int: int } = DER;\n const rs = tlv.encode(0x02, int.encode(sig.r));\n const ss = tlv.encode(0x02, int.encode(sig.s));\n const seq = rs + ss;\n return tlv.encode(0x30, seq);\n },\n};\n\nfunction numToSizedHex(num: bigint, size: number): string {\n return bytesToHex(numberToBytesBE(num, size));\n}\n\n// Be friendly to bad ECMAScript parsers by not using bigint literals\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3), _4n = BigInt(4);\n\nexport function weierstrassPoints(opts: CurvePointsType): CurvePointsRes {\n const CURVE = validatePointOpts(opts);\n const { Fp } = CURVE; // All curves has same field / group length as for now, but they can differ\n const Fn = Field(CURVE.n, CURVE.nBitLength);\n\n const toBytes =\n CURVE.toBytes ||\n ((_c: ProjConstructor, point: ProjPointType, _isCompressed: boolean) => {\n const a = point.toAffine();\n return concatBytes(Uint8Array.from([0x04]), Fp.toBytes(a.x), Fp.toBytes(a.y));\n });\n const fromBytes =\n CURVE.fromBytes ||\n ((bytes: Uint8Array) => {\n // const head = bytes[0];\n const tail = bytes.subarray(1);\n // if (head !== 0x04) throw new Error('Only non-compressed encoding is supported');\n const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n return { x, y };\n });\n\n /**\n * y\u00B2 = x\u00B3 + ax + b: Short weierstrass curve formula. Takes x, returns y\u00B2.\n * @returns y\u00B2\n */\n function weierstrassEquation(x: T): T {\n const { a, b } = CURVE;\n const x2 = Fp.sqr(x); // x * x\n const x3 = Fp.mul(x2, x); // x\u00B2 * x\n return Fp.add(Fp.add(x3, Fp.mul(x, a)), b); // x\u00B3 + a * x + b\n }\n\n function isValidXY(x: T, y: T): boolean {\n const left = Fp.sqr(y); // y\u00B2\n const right = weierstrassEquation(x); // x\u00B3 + ax + b\n return Fp.eql(left, right);\n }\n\n // Validate whether the passed curve params are valid.\n // Test 1: equation y\u00B2 = x\u00B3 + ax + b should work for generator point.\n if (!isValidXY(CURVE.Gx, CURVE.Gy)) throw new Error('bad curve params: generator point');\n\n // Test 2: discriminant \u0394 part should be non-zero: 4a\u00B3 + 27b\u00B2 != 0.\n // Guarantees curve is genus-1, smooth (non-singular).\n const _4a3 = Fp.mul(Fp.pow(CURVE.a, _3n), _4n);\n const _27b2 = Fp.mul(Fp.sqr(CURVE.b), BigInt(27));\n if (Fp.is0(Fp.add(_4a3, _27b2))) throw new Error('bad curve params: a or b');\n\n // Valid group elements reside in range 1..n-1\n function isWithinCurveOrder(num: bigint): boolean {\n return inRange(num, _1n, CURVE.n);\n }\n // Validates if priv key is valid and converts it to bigint.\n // Supports options allowedPrivateKeyLengths and wrapPrivateKey.\n function normPrivateKeyToScalar(key: PrivKey): bigint {\n const { allowedPrivateKeyLengths: lengths, nByteLength, wrapPrivateKey, n: N } = CURVE;\n if (lengths && typeof key !== 'bigint') {\n if (isBytes(key)) key = bytesToHex(key);\n // Normalize to hex string, pad. E.g. P521 would norm 130-132 char hex to 132-char bytes\n if (typeof key !== 'string' || !lengths.includes(key.length))\n throw new Error('invalid private key');\n key = key.padStart(nByteLength * 2, '0');\n }\n let num: bigint;\n try {\n num =\n typeof key === 'bigint'\n ? key\n : bytesToNumberBE(ensureBytes('private key', key, nByteLength));\n } catch (error) {\n throw new Error(\n 'invalid private key, expected hex or ' + nByteLength + ' bytes, got ' + typeof key\n );\n }\n if (wrapPrivateKey) num = mod(num, N); // disabled by default, enabled for BLS\n aInRange('private key', num, _1n, N); // num in range [1..N-1]\n return num;\n }\n\n function aprjpoint(other: unknown) {\n if (!(other instanceof Point)) throw new Error('ProjectivePoint expected');\n }\n\n // Memoized toAffine / validity check. They are heavy. Points are immutable.\n\n // Converts Projective point to affine (x, y) coordinates.\n // Can accept precomputed Z^-1 - for example, from invertBatch.\n // (X, Y, Z) \u220B (x=X/Z, y=Y/Z)\n const toAffineMemo = memoized((p: Point, iz?: T): AffinePoint => {\n const { px: x, py: y, pz: z } = p;\n // Fast-path for normalized points\n if (Fp.eql(z, Fp.ONE)) return { x, y };\n const is0 = p.is0();\n // If invZ was 0, we return zero point. However we still want to execute\n // all operations, so we replace invZ with a random number, 1.\n if (iz == null) iz = is0 ? Fp.ONE : Fp.inv(z);\n const ax = Fp.mul(x, iz);\n const ay = Fp.mul(y, iz);\n const zz = Fp.mul(z, iz);\n if (is0) return { x: Fp.ZERO, y: Fp.ZERO };\n if (!Fp.eql(zz, Fp.ONE)) throw new Error('invZ was invalid');\n return { x: ax, y: ay };\n });\n // NOTE: on exception this will crash 'cached' and no value will be set.\n // Otherwise true will be return\n const assertValidMemo = memoized((p: Point) => {\n if (p.is0()) {\n // (0, 1, 0) aka ZERO is invalid in most contexts.\n // In BLS, ZERO can be serialized, so we allow it.\n // (0, 0, 0) is invalid representation of ZERO.\n if (CURVE.allowInfinityPoint && !Fp.is0(p.py)) return;\n throw new Error('bad point: ZERO');\n }\n // Some 3rd-party test vectors require different wording between here & `fromCompressedHex`\n const { x, y } = p.toAffine();\n // Check if x, y are valid field elements\n if (!Fp.isValid(x) || !Fp.isValid(y)) throw new Error('bad point: x or y not FE');\n if (!isValidXY(x, y)) throw new Error('bad point: equation left != right');\n if (!p.isTorsionFree()) throw new Error('bad point: not in prime-order subgroup');\n return true;\n });\n\n /**\n * Projective Point works in 3d / projective (homogeneous) coordinates: (X, Y, Z) \u220B (x=X/Z, y=Y/Z)\n * Default Point works in 2d / affine coordinates: (x, y)\n * We're doing calculations in projective, because its operations don't require costly inversion.\n */\n class Point implements ProjPointType {\n // base / generator point\n static readonly BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);\n // zero / infinity / identity point\n static readonly ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO); // 0, 1, 0\n readonly px: T;\n readonly py: T;\n readonly pz: T;\n\n constructor(px: T, py: T, pz: T) {\n if (px == null || !Fp.isValid(px)) throw new Error('x required');\n if (py == null || !Fp.isValid(py) || Fp.is0(py)) throw new Error('y required');\n if (pz == null || !Fp.isValid(pz)) throw new Error('z required');\n this.px = px;\n this.py = py;\n this.pz = pz;\n Object.freeze(this);\n }\n\n // Does not validate if the point is on-curve.\n // Use fromHex instead, or call assertValidity() later.\n static fromAffine(p: AffinePoint): Point {\n const { x, y } = p || {};\n if (!p || !Fp.isValid(x) || !Fp.isValid(y)) throw new Error('invalid affine point');\n if (p instanceof Point) throw new Error('projective point not allowed');\n const is0 = (i: T) => Fp.eql(i, Fp.ZERO);\n // fromAffine(x:0, y:0) would produce (x:0, y:0, z:1), but we need (x:0, y:1, z:0)\n if (is0(x) && is0(y)) return Point.ZERO;\n return new Point(x, y, Fp.ONE);\n }\n\n get x(): T {\n return this.toAffine().x;\n }\n get y(): T {\n return this.toAffine().y;\n }\n\n /**\n * Takes a bunch of Projective Points but executes only one\n * inversion on all of them. Inversion is very slow operation,\n * so this improves performance massively.\n * Optimization: converts a list of projective points to a list of identical points with Z=1.\n */\n static normalizeZ(points: Point[]): Point[] {\n const toInv = FpInvertBatch(\n Fp,\n points.map((p) => p.pz)\n );\n return points.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n }\n\n /**\n * Converts hash string or Uint8Array to Point.\n * @param hex short/long ECDSA hex\n */\n static fromHex(hex: Hex): Point {\n const P = Point.fromAffine(fromBytes(ensureBytes('pointHex', hex)));\n P.assertValidity();\n return P;\n }\n\n // Multiplies generator point by privateKey.\n static fromPrivateKey(privateKey: PrivKey) {\n return Point.BASE.multiply(normPrivateKeyToScalar(privateKey));\n }\n\n // Multiscalar Multiplication\n static msm(points: Point[], scalars: bigint[]): Point {\n return pippenger(Point, Fn, points, scalars);\n }\n\n // \"Private method\", don't use it directly\n _setWindowSize(windowSize: number) {\n wnaf.setWindowSize(this, windowSize);\n }\n\n // A point on curve is valid if it conforms to equation.\n assertValidity(): void {\n assertValidMemo(this);\n }\n\n hasEvenY(): boolean {\n const { y } = this.toAffine();\n if (Fp.isOdd) return !Fp.isOdd(y);\n throw new Error(\"Field doesn't support isOdd\");\n }\n\n /**\n * Compare one point to another.\n */\n equals(other: Point): boolean {\n aprjpoint(other);\n const { px: X1, py: Y1, pz: Z1 } = this;\n const { px: X2, py: Y2, pz: Z2 } = other;\n const U1 = Fp.eql(Fp.mul(X1, Z2), Fp.mul(X2, Z1));\n const U2 = Fp.eql(Fp.mul(Y1, Z2), Fp.mul(Y2, Z1));\n return U1 && U2;\n }\n\n /**\n * Flips point to one corresponding to (x, -y) in Affine coordinates.\n */\n negate(): Point {\n return new Point(this.px, Fp.neg(this.py), this.pz);\n }\n\n // Renes-Costello-Batina exception-free doubling formula.\n // There is 30% faster Jacobian formula, but it is not complete.\n // https://eprint.iacr.org/2015/1060, algorithm 3\n // Cost: 8M + 3S + 3*a + 2*b3 + 15add.\n double() {\n const { a, b } = CURVE;\n const b3 = Fp.mul(b, _3n);\n const { px: X1, py: Y1, pz: Z1 } = this;\n let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n let t0 = Fp.mul(X1, X1); // step 1\n let t1 = Fp.mul(Y1, Y1);\n let t2 = Fp.mul(Z1, Z1);\n let t3 = Fp.mul(X1, Y1);\n t3 = Fp.add(t3, t3); // step 5\n Z3 = Fp.mul(X1, Z1);\n Z3 = Fp.add(Z3, Z3);\n X3 = Fp.mul(a, Z3);\n Y3 = Fp.mul(b3, t2);\n Y3 = Fp.add(X3, Y3); // step 10\n X3 = Fp.sub(t1, Y3);\n Y3 = Fp.add(t1, Y3);\n Y3 = Fp.mul(X3, Y3);\n X3 = Fp.mul(t3, X3);\n Z3 = Fp.mul(b3, Z3); // step 15\n t2 = Fp.mul(a, t2);\n t3 = Fp.sub(t0, t2);\n t3 = Fp.mul(a, t3);\n t3 = Fp.add(t3, Z3);\n Z3 = Fp.add(t0, t0); // step 20\n t0 = Fp.add(Z3, t0);\n t0 = Fp.add(t0, t2);\n t0 = Fp.mul(t0, t3);\n Y3 = Fp.add(Y3, t0);\n t2 = Fp.mul(Y1, Z1); // step 25\n t2 = Fp.add(t2, t2);\n t0 = Fp.mul(t2, t3);\n X3 = Fp.sub(X3, t0);\n Z3 = Fp.mul(t2, t1);\n Z3 = Fp.add(Z3, Z3); // step 30\n Z3 = Fp.add(Z3, Z3);\n return new Point(X3, Y3, Z3);\n }\n\n // Renes-Costello-Batina exception-free addition formula.\n // There is 30% faster Jacobian formula, but it is not complete.\n // https://eprint.iacr.org/2015/1060, algorithm 1\n // Cost: 12M + 0S + 3*a + 3*b3 + 23add.\n add(other: Point): Point {\n aprjpoint(other);\n const { px: X1, py: Y1, pz: Z1 } = this;\n const { px: X2, py: Y2, pz: Z2 } = other;\n let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n const a = CURVE.a;\n const b3 = Fp.mul(CURVE.b, _3n);\n let t0 = Fp.mul(X1, X2); // step 1\n let t1 = Fp.mul(Y1, Y2);\n let t2 = Fp.mul(Z1, Z2);\n let t3 = Fp.add(X1, Y1);\n let t4 = Fp.add(X2, Y2); // step 5\n t3 = Fp.mul(t3, t4);\n t4 = Fp.add(t0, t1);\n t3 = Fp.sub(t3, t4);\n t4 = Fp.add(X1, Z1);\n let t5 = Fp.add(X2, Z2); // step 10\n t4 = Fp.mul(t4, t5);\n t5 = Fp.add(t0, t2);\n t4 = Fp.sub(t4, t5);\n t5 = Fp.add(Y1, Z1);\n X3 = Fp.add(Y2, Z2); // step 15\n t5 = Fp.mul(t5, X3);\n X3 = Fp.add(t1, t2);\n t5 = Fp.sub(t5, X3);\n Z3 = Fp.mul(a, t4);\n X3 = Fp.mul(b3, t2); // step 20\n Z3 = Fp.add(X3, Z3);\n X3 = Fp.sub(t1, Z3);\n Z3 = Fp.add(t1, Z3);\n Y3 = Fp.mul(X3, Z3);\n t1 = Fp.add(t0, t0); // step 25\n t1 = Fp.add(t1, t0);\n t2 = Fp.mul(a, t2);\n t4 = Fp.mul(b3, t4);\n t1 = Fp.add(t1, t2);\n t2 = Fp.sub(t0, t2); // step 30\n t2 = Fp.mul(a, t2);\n t4 = Fp.add(t4, t2);\n t0 = Fp.mul(t1, t4);\n Y3 = Fp.add(Y3, t0);\n t0 = Fp.mul(t5, t4); // step 35\n X3 = Fp.mul(t3, X3);\n X3 = Fp.sub(X3, t0);\n t0 = Fp.mul(t3, t1);\n Z3 = Fp.mul(t5, Z3);\n Z3 = Fp.add(Z3, t0); // step 40\n return new Point(X3, Y3, Z3);\n }\n\n subtract(other: Point) {\n return this.add(other.negate());\n }\n\n is0() {\n return this.equals(Point.ZERO);\n }\n\n private wNAF(n: bigint): { p: Point; f: Point } {\n return wnaf.wNAFCached(this, n, Point.normalizeZ);\n }\n\n /**\n * Non-constant-time multiplication. Uses double-and-add algorithm.\n * It's faster, but should only be used when you don't care about\n * an exposed private key e.g. sig verification, which works over *public* keys.\n */\n multiplyUnsafe(sc: bigint): Point {\n const { endo, n: N } = CURVE;\n aInRange('scalar', sc, _0n, N);\n const I = Point.ZERO;\n if (sc === _0n) return I;\n if (this.is0() || sc === _1n) return this;\n\n // Case a: no endomorphism. Case b: has precomputes.\n if (!endo || wnaf.hasPrecomputes(this))\n return wnaf.wNAFCachedUnsafe(this, sc, Point.normalizeZ);\n\n // Case c: endomorphism\n /** See docs for {@link EndomorphismOpts} */\n let { k1neg, k1, k2neg, k2 } = endo.splitScalar(sc);\n let k1p = I;\n let k2p = I;\n let d: Point = this;\n while (k1 > _0n || k2 > _0n) {\n if (k1 & _1n) k1p = k1p.add(d);\n if (k2 & _1n) k2p = k2p.add(d);\n d = d.double();\n k1 >>= _1n;\n k2 >>= _1n;\n }\n if (k1neg) k1p = k1p.negate();\n if (k2neg) k2p = k2p.negate();\n k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n return k1p.add(k2p);\n }\n\n /**\n * Constant time multiplication.\n * Uses wNAF method. Windowed method may be 10% faster,\n * but takes 2x longer to generate and consumes 2x memory.\n * Uses precomputes when available.\n * Uses endomorphism for Koblitz curves.\n * @param scalar by which the point would be multiplied\n * @returns New point\n */\n multiply(scalar: bigint): Point {\n const { endo, n: N } = CURVE;\n aInRange('scalar', scalar, _1n, N);\n let point: Point, fake: Point; // Fake point is used to const-time mult\n /** See docs for {@link EndomorphismOpts} */\n if (endo) {\n const { k1neg, k1, k2neg, k2 } = endo.splitScalar(scalar);\n let { p: k1p, f: f1p } = this.wNAF(k1);\n let { p: k2p, f: f2p } = this.wNAF(k2);\n k1p = wnaf.constTimeNegate(k1neg, k1p);\n k2p = wnaf.constTimeNegate(k2neg, k2p);\n k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n point = k1p.add(k2p);\n fake = f1p.add(f2p);\n } else {\n const { p, f } = this.wNAF(scalar);\n point = p;\n fake = f;\n }\n // Normalize `z` for both points, but return only real one\n return Point.normalizeZ([point, fake])[0];\n }\n\n /**\n * Efficiently calculate `aP + bQ`. Unsafe, can expose private key, if used incorrectly.\n * Not using Strauss-Shamir trick: precomputation tables are faster.\n * The trick could be useful if both P and Q are not G (not in our case).\n * @returns non-zero affine point\n */\n multiplyAndAddUnsafe(Q: Point, a: bigint, b: bigint): Point | undefined {\n const G = Point.BASE; // No Strauss-Shamir trick: we have 10% faster G precomputes\n const mul = (\n P: Point,\n a: bigint // Select faster multiply() method\n ) => (a === _0n || a === _1n || !P.equals(G) ? P.multiplyUnsafe(a) : P.multiply(a));\n const sum = mul(this, a).add(mul(Q, b));\n return sum.is0() ? undefined : sum;\n }\n\n // Converts Projective point to affine (x, y) coordinates.\n // Can accept precomputed Z^-1 - for example, from invertBatch.\n // (x, y, z) \u220B (x=x/z, y=y/z)\n toAffine(iz?: T): AffinePoint {\n return toAffineMemo(this, iz);\n }\n isTorsionFree(): boolean {\n const { h: cofactor, isTorsionFree } = CURVE;\n if (cofactor === _1n) return true; // No subgroups, always torsion-free\n if (isTorsionFree) return isTorsionFree(Point, this);\n throw new Error('isTorsionFree() has not been declared for the elliptic curve');\n }\n clearCofactor(): Point {\n const { h: cofactor, clearCofactor } = CURVE;\n if (cofactor === _1n) return this; // Fast-path\n if (clearCofactor) return clearCofactor(Point, this) as Point;\n return this.multiplyUnsafe(CURVE.h);\n }\n\n toRawBytes(isCompressed = true): Uint8Array {\n abool('isCompressed', isCompressed);\n this.assertValidity();\n return toBytes(Point, this, isCompressed);\n }\n\n toHex(isCompressed = true): string {\n abool('isCompressed', isCompressed);\n return bytesToHex(this.toRawBytes(isCompressed));\n }\n }\n const { endo, nBitLength } = CURVE;\n const wnaf = wNAF(Point, endo ? Math.ceil(nBitLength / 2) : nBitLength);\n return {\n CURVE,\n ProjectivePoint: Point as ProjConstructor,\n normPrivateKeyToScalar,\n weierstrassEquation,\n isWithinCurveOrder,\n };\n}\n\n// Instance\nexport interface SignatureType {\n readonly r: bigint;\n readonly s: bigint;\n readonly recovery?: number;\n assertValidity(): void;\n addRecoveryBit(recovery: number): RecoveredSignatureType;\n hasHighS(): boolean;\n normalizeS(): SignatureType;\n recoverPublicKey(msgHash: Hex): ProjPointType;\n toCompactRawBytes(): Uint8Array;\n toCompactHex(): string;\n toDERRawBytes(isCompressed?: boolean): Uint8Array;\n toDERHex(isCompressed?: boolean): string;\n}\nexport type RecoveredSignatureType = SignatureType & {\n readonly recovery: number;\n};\n// Static methods\nexport type SignatureConstructor = {\n new (r: bigint, s: bigint): SignatureType;\n fromCompact(hex: Hex): SignatureType;\n fromDER(hex: Hex): SignatureType;\n};\ntype SignatureLike = { r: bigint; s: bigint };\n\nexport type PubKey = Hex | ProjPointType;\n\nexport type CurveType = BasicWCurve & {\n hash: CHash; // CHash not FHash because we need outputLen for DRBG\n hmac: HmacFnSync;\n randomBytes: (bytesLength?: number) => Uint8Array;\n lowS?: boolean;\n bits2int?: (bytes: Uint8Array) => bigint;\n bits2int_modN?: (bytes: Uint8Array) => bigint;\n};\n\nfunction validateOpts(\n curve: CurveType\n): Readonly {\n const opts = validateBasic(curve);\n validateObject(\n opts,\n {\n hash: 'hash',\n hmac: 'function',\n randomBytes: 'function',\n },\n {\n bits2int: 'function',\n bits2int_modN: 'function',\n lowS: 'boolean',\n }\n );\n return Object.freeze({ lowS: true, ...opts } as const);\n}\n\nexport type CurveFn = {\n CURVE: ReturnType;\n getPublicKey: (privateKey: PrivKey, isCompressed?: boolean) => Uint8Array;\n getSharedSecret: (privateA: PrivKey, publicB: Hex, isCompressed?: boolean) => Uint8Array;\n sign: (msgHash: Hex, privKey: PrivKey, opts?: SignOpts) => RecoveredSignatureType;\n verify: (signature: Hex | SignatureLike, msgHash: Hex, publicKey: Hex, opts?: VerOpts) => boolean;\n ProjectivePoint: ProjConstructor;\n Signature: SignatureConstructor;\n utils: {\n normPrivateKeyToScalar: (key: PrivKey) => bigint;\n isValidPrivateKey(privateKey: PrivKey): boolean;\n randomPrivateKey: () => Uint8Array;\n precompute: (windowSize?: number, point?: ProjPointType) => ProjPointType;\n };\n};\n\n/**\n * Creates short weierstrass curve and ECDSA signature methods for it.\n * @example\n * import { Field } from '@noble/curves/abstract/modular';\n * // Before that, define BigInt-s: a, b, p, n, Gx, Gy\n * const curve = weierstrass({ a, b, Fp: Field(p), n, Gx, Gy, h: 1n })\n */\nexport function weierstrass(curveDef: CurveType): CurveFn {\n const CURVE = validateOpts(curveDef) as ReturnType;\n const { Fp, n: CURVE_ORDER, nByteLength, nBitLength } = CURVE;\n const compressedLen = Fp.BYTES + 1; // e.g. 33 for 32\n const uncompressedLen = 2 * Fp.BYTES + 1; // e.g. 65 for 32\n\n function modN(a: bigint) {\n return mod(a, CURVE_ORDER);\n }\n function invN(a: bigint) {\n return invert(a, CURVE_ORDER);\n }\n\n const {\n ProjectivePoint: Point,\n normPrivateKeyToScalar,\n weierstrassEquation,\n isWithinCurveOrder,\n } = weierstrassPoints({\n ...CURVE,\n toBytes(_c, point, isCompressed: boolean): Uint8Array {\n const a = point.toAffine();\n const x = Fp.toBytes(a.x);\n const cat = concatBytes;\n abool('isCompressed', isCompressed);\n if (isCompressed) {\n return cat(Uint8Array.from([point.hasEvenY() ? 0x02 : 0x03]), x);\n } else {\n return cat(Uint8Array.from([0x04]), x, Fp.toBytes(a.y));\n }\n },\n fromBytes(bytes: Uint8Array) {\n const len = bytes.length;\n const head = bytes[0];\n const tail = bytes.subarray(1);\n // this.assertValidity() is done inside of fromHex\n if (len === compressedLen && (head === 0x02 || head === 0x03)) {\n const x = bytesToNumberBE(tail);\n if (!inRange(x, _1n, Fp.ORDER)) throw new Error('Point is not on curve');\n const y2 = weierstrassEquation(x); // y\u00B2 = x\u00B3 + ax + b\n let y: bigint;\n try {\n y = Fp.sqrt(y2); // y = y\u00B2 ^ (p+1)/4\n } catch (sqrtError) {\n const suffix = sqrtError instanceof Error ? ': ' + sqrtError.message : '';\n throw new Error('Point is not on curve' + suffix);\n }\n const isYOdd = (y & _1n) === _1n;\n // ECDSA\n const isHeadOdd = (head & 1) === 1;\n if (isHeadOdd !== isYOdd) y = Fp.neg(y);\n return { x, y };\n } else if (len === uncompressedLen && head === 0x04) {\n const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n return { x, y };\n } else {\n const cl = compressedLen;\n const ul = uncompressedLen;\n throw new Error(\n 'invalid Point, expected length of ' + cl + ', or uncompressed ' + ul + ', got ' + len\n );\n }\n },\n });\n\n function isBiggerThanHalfOrder(number: bigint) {\n const HALF = CURVE_ORDER >> _1n;\n return number > HALF;\n }\n\n function normalizeS(s: bigint) {\n return isBiggerThanHalfOrder(s) ? modN(-s) : s;\n }\n // slice bytes num\n const slcNum = (b: Uint8Array, from: number, to: number) => bytesToNumberBE(b.slice(from, to));\n\n /**\n * ECDSA signature with its (r, s) properties. Supports DER & compact representations.\n */\n class Signature implements SignatureType {\n readonly r: bigint;\n readonly s: bigint;\n readonly recovery?: number;\n constructor(r: bigint, s: bigint, recovery?: number) {\n aInRange('r', r, _1n, CURVE_ORDER); // r in [1..N]\n aInRange('s', s, _1n, CURVE_ORDER); // s in [1..N]\n this.r = r;\n this.s = s;\n if (recovery != null) this.recovery = recovery;\n Object.freeze(this);\n }\n\n // pair (bytes of r, bytes of s)\n static fromCompact(hex: Hex) {\n const l = nByteLength;\n hex = ensureBytes('compactSignature', hex, l * 2);\n return new Signature(slcNum(hex, 0, l), slcNum(hex, l, 2 * l));\n }\n\n // DER encoded ECDSA signature\n // https://bitcoin.stackexchange.com/questions/57644/what-are-the-parts-of-a-bitcoin-transaction-input-script\n static fromDER(hex: Hex) {\n const { r, s } = DER.toSig(ensureBytes('DER', hex));\n return new Signature(r, s);\n }\n\n /**\n * @todo remove\n * @deprecated\n */\n assertValidity(): void {}\n\n addRecoveryBit(recovery: number): RecoveredSignature {\n return new Signature(this.r, this.s, recovery) as RecoveredSignature;\n }\n\n recoverPublicKey(msgHash: Hex): typeof Point.BASE {\n const { r, s, recovery: rec } = this;\n const h = bits2int_modN(ensureBytes('msgHash', msgHash)); // Truncate hash\n if (rec == null || ![0, 1, 2, 3].includes(rec)) throw new Error('recovery id invalid');\n const radj = rec === 2 || rec === 3 ? r + CURVE.n : r;\n if (radj >= Fp.ORDER) throw new Error('recovery id 2 or 3 invalid');\n const prefix = (rec & 1) === 0 ? '02' : '03';\n const R = Point.fromHex(prefix + numToSizedHex(radj, Fp.BYTES));\n const ir = invN(radj); // r^-1\n const u1 = modN(-h * ir); // -hr^-1\n const u2 = modN(s * ir); // sr^-1\n const Q = Point.BASE.multiplyAndAddUnsafe(R, u1, u2); // (sr^-1)R-(hr^-1)G = -(hr^-1)G + (sr^-1)\n if (!Q) throw new Error('point at infinify'); // unsafe is fine: no priv data leaked\n Q.assertValidity();\n return Q;\n }\n\n // Signatures should be low-s, to prevent malleability.\n hasHighS(): boolean {\n return isBiggerThanHalfOrder(this.s);\n }\n\n normalizeS() {\n return this.hasHighS() ? new Signature(this.r, modN(-this.s), this.recovery) : this;\n }\n\n // DER-encoded\n toDERRawBytes() {\n return hexToBytes(this.toDERHex());\n }\n toDERHex() {\n return DER.hexFromSig(this);\n }\n\n // padded bytes of r, then padded bytes of s\n toCompactRawBytes() {\n return hexToBytes(this.toCompactHex());\n }\n toCompactHex() {\n const l = nByteLength;\n return numToSizedHex(this.r, l) + numToSizedHex(this.s, l);\n }\n }\n type RecoveredSignature = Signature & { recovery: number };\n\n const utils = {\n isValidPrivateKey(privateKey: PrivKey) {\n try {\n normPrivateKeyToScalar(privateKey);\n return true;\n } catch (error) {\n return false;\n }\n },\n normPrivateKeyToScalar: normPrivateKeyToScalar,\n\n /**\n * Produces cryptographically secure private key from random of size\n * (groupLen + ceil(groupLen / 2)) with modulo bias being negligible.\n */\n randomPrivateKey: (): Uint8Array => {\n const length = getMinHashLength(CURVE.n);\n return mapHashToField(CURVE.randomBytes(length), CURVE.n);\n },\n\n /**\n * Creates precompute table for an arbitrary EC point. Makes point \"cached\".\n * Allows to massively speed-up `point.multiply(scalar)`.\n * @returns cached point\n * @example\n * const fast = utils.precompute(8, ProjectivePoint.fromHex(someonesPubKey));\n * fast.multiply(privKey); // much faster ECDH now\n */\n precompute(windowSize = 8, point = Point.BASE): typeof Point.BASE {\n point._setWindowSize(windowSize);\n point.multiply(BigInt(3)); // 3 is arbitrary, just need any number here\n return point;\n },\n };\n\n /**\n * Computes public key for a private key. Checks for validity of the private key.\n * @param privateKey private key\n * @param isCompressed whether to return compact (default), or full key\n * @returns Public key, full when isCompressed=false; short when isCompressed=true\n */\n function getPublicKey(privateKey: PrivKey, isCompressed = true): Uint8Array {\n return Point.fromPrivateKey(privateKey).toRawBytes(isCompressed);\n }\n\n /**\n * Quick and dirty check for item being public key. Does not validate hex, or being on-curve.\n */\n function isProbPub(item: PrivKey | PubKey): boolean | undefined {\n if (typeof item === 'bigint') return false;\n if (item instanceof Point) return true;\n const arr = ensureBytes('key', item);\n const len = arr.length;\n const fpl = Fp.BYTES;\n const compLen = fpl + 1; // e.g. 33 for 32\n const uncompLen = 2 * fpl + 1; // e.g. 65 for 32\n if (CURVE.allowedPrivateKeyLengths || nByteLength === compLen) {\n return undefined;\n } else {\n return len === compLen || len === uncompLen;\n }\n }\n\n /**\n * ECDH (Elliptic Curve Diffie Hellman).\n * Computes shared public key from private key and public key.\n * Checks: 1) private key validity 2) shared key is on-curve.\n * Does NOT hash the result.\n * @param privateA private key\n * @param publicB different public key\n * @param isCompressed whether to return compact (default), or full key\n * @returns shared public key\n */\n function getSharedSecret(privateA: PrivKey, publicB: Hex, isCompressed = true): Uint8Array {\n if (isProbPub(privateA) === true) throw new Error('first arg must be private key');\n if (isProbPub(publicB) === false) throw new Error('second arg must be public key');\n const b = Point.fromHex(publicB); // check for being on-curve\n return b.multiply(normPrivateKeyToScalar(privateA)).toRawBytes(isCompressed);\n }\n\n // RFC6979: ensure ECDSA msg is X bytes and < N. RFC suggests optional truncating via bits2octets.\n // FIPS 186-4 4.6 suggests the leftmost min(nBitLen, outLen) bits, which matches bits2int.\n // bits2int can produce res>N, we can do mod(res, N) since the bitLen is the same.\n // int2octets can't be used; pads small msgs with 0: unacceptatble for trunc as per RFC vectors\n const bits2int =\n CURVE.bits2int ||\n function (bytes: Uint8Array): bigint {\n // Our custom check \"just in case\", for protection against DoS\n if (bytes.length > 8192) throw new Error('input is too large');\n // For curves with nBitLength % 8 !== 0: bits2octets(bits2octets(m)) !== bits2octets(m)\n // for some cases, since bytes.length * 8 is not actual bitLength.\n const num = bytesToNumberBE(bytes); // check for == u8 done here\n const delta = bytes.length * 8 - nBitLength; // truncate to nBitLength leftmost bits\n return delta > 0 ? num >> BigInt(delta) : num;\n };\n const bits2int_modN =\n CURVE.bits2int_modN ||\n function (bytes: Uint8Array): bigint {\n return modN(bits2int(bytes)); // can't use bytesToNumberBE here\n };\n // NOTE: pads output with zero as per spec\n const ORDER_MASK = bitMask(nBitLength);\n /**\n * Converts to bytes. Checks if num in `[0..ORDER_MASK-1]` e.g.: `[0..2^256-1]`.\n */\n function int2octets(num: bigint): Uint8Array {\n aInRange('num < 2^' + nBitLength, num, _0n, ORDER_MASK);\n // works with order, can have different size than numToField!\n return numberToBytesBE(num, nByteLength);\n }\n\n // Steps A, D of RFC6979 3.2\n // Creates RFC6979 seed; converts msg/privKey to numbers.\n // Used only in sign, not in verify.\n // NOTE: we cannot assume here that msgHash has same amount of bytes as curve order,\n // this will be invalid at least for P521. Also it can be bigger for P224 + SHA256\n function prepSig(msgHash: Hex, privateKey: PrivKey, opts = defaultSigOpts) {\n if (['recovered', 'canonical'].some((k) => k in opts))\n throw new Error('sign() legacy options not supported');\n const { hash, randomBytes } = CURVE;\n let { lowS, prehash, extraEntropy: ent } = opts; // generates low-s sigs by default\n if (lowS == null) lowS = true; // RFC6979 3.2: we skip step A, because we already provide hash\n msgHash = ensureBytes('msgHash', msgHash);\n validateSigVerOpts(opts);\n if (prehash) msgHash = ensureBytes('prehashed msgHash', hash(msgHash));\n\n // We can't later call bits2octets, since nested bits2int is broken for curves\n // with nBitLength % 8 !== 0. Because of that, we unwrap it here as int2octets call.\n // const bits2octets = (bits) => int2octets(bits2int_modN(bits))\n const h1int = bits2int_modN(msgHash);\n const d = normPrivateKeyToScalar(privateKey); // validate private key, convert to bigint\n const seedArgs = [int2octets(d), int2octets(h1int)];\n // extraEntropy. RFC6979 3.6: additional k' (optional).\n if (ent != null && ent !== false) {\n // K = HMAC_K(V || 0x00 || int2octets(x) || bits2octets(h1) || k')\n const e = ent === true ? randomBytes(Fp.BYTES) : ent; // generate random bytes OR pass as-is\n seedArgs.push(ensureBytes('extraEntropy', e)); // check for being bytes\n }\n const seed = concatBytes(...seedArgs); // Step D of RFC6979 3.2\n const m = h1int; // NOTE: no need to call bits2int second time here, it is inside truncateHash!\n // Converts signature params into point w r/s, checks result for validity.\n function k2sig(kBytes: Uint8Array): RecoveredSignature | undefined {\n // RFC 6979 Section 3.2, step 3: k = bits2int(T)\n const k = bits2int(kBytes); // Cannot use fields methods, since it is group element\n if (!isWithinCurveOrder(k)) return; // Important: all mod() calls here must be done over N\n const ik = invN(k); // k^-1 mod n\n const q = Point.BASE.multiply(k).toAffine(); // q = Gk\n const r = modN(q.x); // r = q.x mod n\n if (r === _0n) return;\n // Can use scalar blinding b^-1(bm + bdr) where b \u2208 [1,q\u22121] according to\n // https://tches.iacr.org/index.php/TCHES/article/view/7337/6509. We've decided against it:\n // a) dependency on CSPRNG b) 15% slowdown c) doesn't really help since bigints are not CT\n const s = modN(ik * modN(m + r * d)); // Not using blinding here\n if (s === _0n) return;\n let recovery = (q.x === r ? 0 : 2) | Number(q.y & _1n); // recovery bit (2 or 3, when q.x > n)\n let normS = s;\n if (lowS && isBiggerThanHalfOrder(s)) {\n normS = normalizeS(s); // if lowS was passed, ensure s is always\n recovery ^= 1; // // in the bottom half of N\n }\n return new Signature(r, normS, recovery) as RecoveredSignature; // use normS, not s\n }\n return { seed, k2sig };\n }\n const defaultSigOpts: SignOpts = { lowS: CURVE.lowS, prehash: false };\n const defaultVerOpts: VerOpts = { lowS: CURVE.lowS, prehash: false };\n\n /**\n * Signs message hash with a private key.\n * ```\n * sign(m, d, k) where\n * (x, y) = G \u00D7 k\n * r = x mod n\n * s = (m + dr)/k mod n\n * ```\n * @param msgHash NOT message. msg needs to be hashed to `msgHash`, or use `prehash`.\n * @param privKey private key\n * @param opts lowS for non-malleable sigs. extraEntropy for mixing randomness into k. prehash will hash first arg.\n * @returns signature with recovery param\n */\n function sign(msgHash: Hex, privKey: PrivKey, opts = defaultSigOpts): RecoveredSignature {\n const { seed, k2sig } = prepSig(msgHash, privKey, opts); // Steps A, D of RFC6979 3.2.\n const C = CURVE;\n const drbg = createHmacDrbg(C.hash.outputLen, C.nByteLength, C.hmac);\n return drbg(seed, k2sig); // Steps B, C, D, E, F, G\n }\n\n // Enable precomputes. Slows down first publicKey computation by 20ms.\n Point.BASE._setWindowSize(8);\n // utils.precompute(8, ProjectivePoint.BASE)\n\n /**\n * Verifies a signature against message hash and public key.\n * Rejects lowS signatures by default: to override,\n * specify option `{lowS: false}`. Implements section 4.1.4 from https://www.secg.org/sec1-v2.pdf:\n *\n * ```\n * verify(r, s, h, P) where\n * U1 = hs^-1 mod n\n * U2 = rs^-1 mod n\n * R = U1\u22C5G - U2\u22C5P\n * mod(R.x, n) == r\n * ```\n */\n function verify(\n signature: Hex | SignatureLike,\n msgHash: Hex,\n publicKey: Hex,\n opts = defaultVerOpts\n ): boolean {\n const sg = signature;\n msgHash = ensureBytes('msgHash', msgHash);\n publicKey = ensureBytes('publicKey', publicKey);\n const { lowS, prehash, format } = opts;\n\n // Verify opts, deduce signature format\n validateSigVerOpts(opts);\n if ('strict' in opts) throw new Error('options.strict was renamed to lowS');\n if (format !== undefined && format !== 'compact' && format !== 'der')\n throw new Error('format must be compact or der');\n const isHex = typeof sg === 'string' || isBytes(sg);\n const isObj =\n !isHex &&\n !format &&\n typeof sg === 'object' &&\n sg !== null &&\n typeof sg.r === 'bigint' &&\n typeof sg.s === 'bigint';\n if (!isHex && !isObj)\n throw new Error('invalid signature, expected Uint8Array, hex string or Signature instance');\n\n let _sig: Signature | undefined = undefined;\n let P: ProjPointType;\n try {\n if (isObj) _sig = new Signature(sg.r, sg.s);\n if (isHex) {\n // Signature can be represented in 2 ways: compact (2*nByteLength) & DER (variable-length).\n // Since DER can also be 2*nByteLength bytes, we check for it first.\n try {\n if (format !== 'compact') _sig = Signature.fromDER(sg);\n } catch (derError) {\n if (!(derError instanceof DER.Err)) throw derError;\n }\n if (!_sig && format !== 'der') _sig = Signature.fromCompact(sg);\n }\n P = Point.fromHex(publicKey);\n } catch (error) {\n return false;\n }\n if (!_sig) return false;\n if (lowS && _sig.hasHighS()) return false;\n if (prehash) msgHash = CURVE.hash(msgHash);\n const { r, s } = _sig;\n const h = bits2int_modN(msgHash); // Cannot use fields methods, since it is group element\n const is = invN(s); // s^-1\n const u1 = modN(h * is); // u1 = hs^-1 mod n\n const u2 = modN(r * is); // u2 = rs^-1 mod n\n const R = Point.BASE.multiplyAndAddUnsafe(P, u1, u2)?.toAffine(); // R = u1\u22C5G + u2\u22C5P\n if (!R) return false;\n const v = modN(R.x);\n return v === r;\n }\n return {\n CURVE,\n getPublicKey,\n getSharedSecret,\n sign,\n verify,\n ProjectivePoint: Point,\n Signature,\n utils,\n };\n}\n\n/**\n * Implementation of the Shallue and van de Woestijne method for any weierstrass curve.\n * TODO: check if there is a way to merge this with uvRatio in Edwards; move to modular.\n * b = True and y = sqrt(u / v) if (u / v) is square in F, and\n * b = False and y = sqrt(Z * (u / v)) otherwise.\n * @param Fp\n * @param Z\n * @returns\n */\nexport function SWUFpSqrtRatio(\n Fp: IField,\n Z: T\n): (u: T, v: T) => { isValid: boolean; value: T } {\n // Generic implementation\n const q = Fp.ORDER;\n let l = _0n;\n for (let o = q - _1n; o % _2n === _0n; o /= _2n) l += _1n;\n const c1 = l; // 1. c1, the largest integer such that 2^c1 divides q - 1.\n // We need 2n ** c1 and 2n ** (c1-1). We can't use **; but we can use <<.\n // 2n ** c1 == 2n << (c1-1)\n const _2n_pow_c1_1 = _2n << (c1 - _1n - _1n);\n const _2n_pow_c1 = _2n_pow_c1_1 * _2n;\n const c2 = (q - _1n) / _2n_pow_c1; // 2. c2 = (q - 1) / (2^c1) # Integer arithmetic\n const c3 = (c2 - _1n) / _2n; // 3. c3 = (c2 - 1) / 2 # Integer arithmetic\n const c4 = _2n_pow_c1 - _1n; // 4. c4 = 2^c1 - 1 # Integer arithmetic\n const c5 = _2n_pow_c1_1; // 5. c5 = 2^(c1 - 1) # Integer arithmetic\n const c6 = Fp.pow(Z, c2); // 6. c6 = Z^c2\n const c7 = Fp.pow(Z, (c2 + _1n) / _2n); // 7. c7 = Z^((c2 + 1) / 2)\n let sqrtRatio = (u: T, v: T): { isValid: boolean; value: T } => {\n let tv1 = c6; // 1. tv1 = c6\n let tv2 = Fp.pow(v, c4); // 2. tv2 = v^c4\n let tv3 = Fp.sqr(tv2); // 3. tv3 = tv2^2\n tv3 = Fp.mul(tv3, v); // 4. tv3 = tv3 * v\n let tv5 = Fp.mul(u, tv3); // 5. tv5 = u * tv3\n tv5 = Fp.pow(tv5, c3); // 6. tv5 = tv5^c3\n tv5 = Fp.mul(tv5, tv2); // 7. tv5 = tv5 * tv2\n tv2 = Fp.mul(tv5, v); // 8. tv2 = tv5 * v\n tv3 = Fp.mul(tv5, u); // 9. tv3 = tv5 * u\n let tv4 = Fp.mul(tv3, tv2); // 10. tv4 = tv3 * tv2\n tv5 = Fp.pow(tv4, c5); // 11. tv5 = tv4^c5\n let isQR = Fp.eql(tv5, Fp.ONE); // 12. isQR = tv5 == 1\n tv2 = Fp.mul(tv3, c7); // 13. tv2 = tv3 * c7\n tv5 = Fp.mul(tv4, tv1); // 14. tv5 = tv4 * tv1\n tv3 = Fp.cmov(tv2, tv3, isQR); // 15. tv3 = CMOV(tv2, tv3, isQR)\n tv4 = Fp.cmov(tv5, tv4, isQR); // 16. tv4 = CMOV(tv5, tv4, isQR)\n // 17. for i in (c1, c1 - 1, ..., 2):\n for (let i = c1; i > _1n; i--) {\n let tv5 = i - _2n; // 18. tv5 = i - 2\n tv5 = _2n << (tv5 - _1n); // 19. tv5 = 2^tv5\n let tvv5 = Fp.pow(tv4, tv5); // 20. tv5 = tv4^tv5\n const e1 = Fp.eql(tvv5, Fp.ONE); // 21. e1 = tv5 == 1\n tv2 = Fp.mul(tv3, tv1); // 22. tv2 = tv3 * tv1\n tv1 = Fp.mul(tv1, tv1); // 23. tv1 = tv1 * tv1\n tvv5 = Fp.mul(tv4, tv1); // 24. tv5 = tv4 * tv1\n tv3 = Fp.cmov(tv2, tv3, e1); // 25. tv3 = CMOV(tv2, tv3, e1)\n tv4 = Fp.cmov(tvv5, tv4, e1); // 26. tv4 = CMOV(tv5, tv4, e1)\n }\n return { isValid: isQR, value: tv3 };\n };\n if (Fp.ORDER % _4n === _3n) {\n // sqrt_ratio_3mod4(u, v)\n const c1 = (Fp.ORDER - _3n) / _4n; // 1. c1 = (q - 3) / 4 # Integer arithmetic\n const c2 = Fp.sqrt(Fp.neg(Z)); // 2. c2 = sqrt(-Z)\n sqrtRatio = (u: T, v: T) => {\n let tv1 = Fp.sqr(v); // 1. tv1 = v^2\n const tv2 = Fp.mul(u, v); // 2. tv2 = u * v\n tv1 = Fp.mul(tv1, tv2); // 3. tv1 = tv1 * tv2\n let y1 = Fp.pow(tv1, c1); // 4. y1 = tv1^c1\n y1 = Fp.mul(y1, tv2); // 5. y1 = y1 * tv2\n const y2 = Fp.mul(y1, c2); // 6. y2 = y1 * c2\n const tv3 = Fp.mul(Fp.sqr(y1), v); // 7. tv3 = y1^2; 8. tv3 = tv3 * v\n const isQR = Fp.eql(tv3, u); // 9. isQR = tv3 == u\n let y = Fp.cmov(y2, y1, isQR); // 10. y = CMOV(y2, y1, isQR)\n return { isValid: isQR, value: y }; // 11. return (isQR, y) isQR ? y : y*c2\n };\n }\n // No curves uses that\n // if (Fp.ORDER % _8n === _5n) // sqrt_ratio_5mod8\n return sqrtRatio;\n}\n/**\n * Simplified Shallue-van de Woestijne-Ulas Method\n * https://www.rfc-editor.org/rfc/rfc9380#section-6.6.2\n */\nexport function mapToCurveSimpleSWU(\n Fp: IField,\n opts: {\n A: T;\n B: T;\n Z: T;\n }\n): (u: T) => { x: T; y: T } {\n validateField(Fp);\n if (!Fp.isValid(opts.A) || !Fp.isValid(opts.B) || !Fp.isValid(opts.Z))\n throw new Error('mapToCurveSimpleSWU: invalid opts');\n const sqrtRatio = SWUFpSqrtRatio(Fp, opts.Z);\n if (!Fp.isOdd) throw new Error('Fp.isOdd is not implemented!');\n // Input: u, an element of F.\n // Output: (x, y), a point on E.\n return (u: T): { x: T; y: T } => {\n // prettier-ignore\n let tv1, tv2, tv3, tv4, tv5, tv6, x, y;\n tv1 = Fp.sqr(u); // 1. tv1 = u^2\n tv1 = Fp.mul(tv1, opts.Z); // 2. tv1 = Z * tv1\n tv2 = Fp.sqr(tv1); // 3. tv2 = tv1^2\n tv2 = Fp.add(tv2, tv1); // 4. tv2 = tv2 + tv1\n tv3 = Fp.add(tv2, Fp.ONE); // 5. tv3 = tv2 + 1\n tv3 = Fp.mul(tv3, opts.B); // 6. tv3 = B * tv3\n tv4 = Fp.cmov(opts.Z, Fp.neg(tv2), !Fp.eql(tv2, Fp.ZERO)); // 7. tv4 = CMOV(Z, -tv2, tv2 != 0)\n tv4 = Fp.mul(tv4, opts.A); // 8. tv4 = A * tv4\n tv2 = Fp.sqr(tv3); // 9. tv2 = tv3^2\n tv6 = Fp.sqr(tv4); // 10. tv6 = tv4^2\n tv5 = Fp.mul(tv6, opts.A); // 11. tv5 = A * tv6\n tv2 = Fp.add(tv2, tv5); // 12. tv2 = tv2 + tv5\n tv2 = Fp.mul(tv2, tv3); // 13. tv2 = tv2 * tv3\n tv6 = Fp.mul(tv6, tv4); // 14. tv6 = tv6 * tv4\n tv5 = Fp.mul(tv6, opts.B); // 15. tv5 = B * tv6\n tv2 = Fp.add(tv2, tv5); // 16. tv2 = tv2 + tv5\n x = Fp.mul(tv1, tv3); // 17. x = tv1 * tv3\n const { isValid, value } = sqrtRatio(tv2, tv6); // 18. (is_gx1_square, y1) = sqrt_ratio(tv2, tv6)\n y = Fp.mul(tv1, u); // 19. y = tv1 * u -> Z * u^3 * y1\n y = Fp.mul(y, value); // 20. y = y * y1\n x = Fp.cmov(x, tv3, isValid); // 21. x = CMOV(x, tv3, is_gx1_square)\n y = Fp.cmov(y, value, isValid); // 22. y = CMOV(y, y1, is_gx1_square)\n const e1 = Fp.isOdd!(u) === Fp.isOdd!(y); // 23. e1 = sgn0(u) == sgn0(y)\n y = Fp.cmov(Fp.neg(y), y, e1); // 24. y = CMOV(-y, y, e1)\n const tv4_inv = FpInvertBatch(Fp, [tv4], true)[0];\n x = Fp.mul(x, tv4_inv); // 25. x = x / tv4\n return { x, y };\n };\n}\n", "/**\n * Utilities for short weierstrass curves, combined with noble-hashes.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { hmac } from '@noble/hashes/hmac';\nimport { concatBytes, randomBytes } from '@noble/hashes/utils';\nimport type { CHash } from './abstract/utils.ts';\nimport { type CurveFn, type CurveType, weierstrass } from './abstract/weierstrass.ts';\n\n/** connects noble-curves to noble-hashes */\nexport function getHash(hash: CHash): {\n hash: CHash;\n hmac: (key: Uint8Array, ...msgs: Uint8Array[]) => Uint8Array;\n randomBytes: typeof randomBytes;\n} {\n return {\n hash,\n hmac: (key: Uint8Array, ...msgs: Uint8Array[]) => hmac(hash, key, concatBytes(...msgs)),\n randomBytes,\n };\n}\n/** Same API as @noble/hashes, with ability to create curve with custom hash */\nexport type CurveDef = Readonly>;\nexport type CurveFnWithCreate = CurveFn & { create: (hash: CHash) => CurveFn };\n\nexport function createCurve(curveDef: CurveDef, defHash: CHash): CurveFnWithCreate {\n const create = (hash: CHash): CurveFn => weierstrass({ ...curveDef, ...getHash(hash) });\n return { ...create(defHash), create };\n}\n", "/**\n * hash-to-curve from RFC 9380.\n * Hashes arbitrary-length byte strings to a list of one or more elements of a finite field F.\n * https://www.rfc-editor.org/rfc/rfc9380\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport type { AffinePoint, Group, GroupConstructor } from './curve.ts';\nimport { FpInvertBatch, type IField, mod } from './modular.ts';\nimport type { CHash } from './utils.ts';\nimport { abytes, bytesToNumberBE, concatBytes, utf8ToBytes, validateObject } from './utils.ts';\n\nexport type UnicodeOrBytes = string | Uint8Array;\n\n/**\n * * `DST` is a domain separation tag, defined in section 2.2.5\n * * `p` characteristic of F, where F is a finite field of characteristic p and order q = p^m\n * * `m` is extension degree (1 for prime fields)\n * * `k` is the target security target in bits (e.g. 128), from section 5.1\n * * `expand` is `xmd` (SHA2, SHA3, BLAKE) or `xof` (SHAKE, BLAKE-XOF)\n * * `hash` conforming to `utils.CHash` interface, with `outputLen` / `blockLen` props\n */\nexport type Opts = {\n DST: UnicodeOrBytes;\n p: bigint;\n m: number;\n k: number;\n expand: 'xmd' | 'xof';\n hash: CHash;\n};\n\n// Octet Stream to Integer. \"spec\" implementation of os2ip is 2.5x slower vs bytesToNumberBE.\nconst os2ip = bytesToNumberBE;\n\n// Integer to Octet Stream (numberToBytesBE)\nfunction i2osp(value: number, length: number): Uint8Array {\n anum(value);\n anum(length);\n if (value < 0 || value >= 1 << (8 * length)) throw new Error('invalid I2OSP input: ' + value);\n const res = Array.from({ length }).fill(0) as number[];\n for (let i = length - 1; i >= 0; i--) {\n res[i] = value & 0xff;\n value >>>= 8;\n }\n return new Uint8Array(res);\n}\n\nfunction strxor(a: Uint8Array, b: Uint8Array): Uint8Array {\n const arr = new Uint8Array(a.length);\n for (let i = 0; i < a.length; i++) {\n arr[i] = a[i] ^ b[i];\n }\n return arr;\n}\n\nfunction anum(item: unknown): void {\n if (!Number.isSafeInteger(item)) throw new Error('number expected');\n}\n\n/**\n * Produces a uniformly random byte string using a cryptographic hash function H that outputs b bits.\n * [RFC 9380 5.3.1](https://www.rfc-editor.org/rfc/rfc9380#section-5.3.1).\n */\nexport function expand_message_xmd(\n msg: Uint8Array,\n DST: Uint8Array,\n lenInBytes: number,\n H: CHash\n): Uint8Array {\n abytes(msg);\n abytes(DST);\n anum(lenInBytes);\n // https://www.rfc-editor.org/rfc/rfc9380#section-5.3.3\n if (DST.length > 255) DST = H(concatBytes(utf8ToBytes('H2C-OVERSIZE-DST-'), DST));\n const { outputLen: b_in_bytes, blockLen: r_in_bytes } = H;\n const ell = Math.ceil(lenInBytes / b_in_bytes);\n if (lenInBytes > 65535 || ell > 255) throw new Error('expand_message_xmd: invalid lenInBytes');\n const DST_prime = concatBytes(DST, i2osp(DST.length, 1));\n const Z_pad = i2osp(0, r_in_bytes);\n const l_i_b_str = i2osp(lenInBytes, 2); // len_in_bytes_str\n const b = new Array(ell);\n const b_0 = H(concatBytes(Z_pad, msg, l_i_b_str, i2osp(0, 1), DST_prime));\n b[0] = H(concatBytes(b_0, i2osp(1, 1), DST_prime));\n for (let i = 1; i <= ell; i++) {\n const args = [strxor(b_0, b[i - 1]), i2osp(i + 1, 1), DST_prime];\n b[i] = H(concatBytes(...args));\n }\n const pseudo_random_bytes = concatBytes(...b);\n return pseudo_random_bytes.slice(0, lenInBytes);\n}\n\n/**\n * Produces a uniformly random byte string using an extendable-output function (XOF) H.\n * 1. The collision resistance of H MUST be at least k bits.\n * 2. H MUST be an XOF that has been proved indifferentiable from\n * a random oracle under a reasonable cryptographic assumption.\n * [RFC 9380 5.3.2](https://www.rfc-editor.org/rfc/rfc9380#section-5.3.2).\n */\nexport function expand_message_xof(\n msg: Uint8Array,\n DST: Uint8Array,\n lenInBytes: number,\n k: number,\n H: CHash\n): Uint8Array {\n abytes(msg);\n abytes(DST);\n anum(lenInBytes);\n // https://www.rfc-editor.org/rfc/rfc9380#section-5.3.3\n // DST = H('H2C-OVERSIZE-DST-' || a_very_long_DST, Math.ceil((lenInBytes * k) / 8));\n if (DST.length > 255) {\n const dkLen = Math.ceil((2 * k) / 8);\n DST = H.create({ dkLen }).update(utf8ToBytes('H2C-OVERSIZE-DST-')).update(DST).digest();\n }\n if (lenInBytes > 65535 || DST.length > 255)\n throw new Error('expand_message_xof: invalid lenInBytes');\n return (\n H.create({ dkLen: lenInBytes })\n .update(msg)\n .update(i2osp(lenInBytes, 2))\n // 2. DST_prime = DST || I2OSP(len(DST), 1)\n .update(DST)\n .update(i2osp(DST.length, 1))\n .digest()\n );\n}\n\n/**\n * Hashes arbitrary-length byte strings to a list of one or more elements of a finite field F.\n * [RFC 9380 5.2](https://www.rfc-editor.org/rfc/rfc9380#section-5.2).\n * @param msg a byte string containing the message to hash\n * @param count the number of elements of F to output\n * @param options `{DST: string, p: bigint, m: number, k: number, expand: 'xmd' | 'xof', hash: H}`, see above\n * @returns [u_0, ..., u_(count - 1)], a list of field elements.\n */\nexport function hash_to_field(msg: Uint8Array, count: number, options: Opts): bigint[][] {\n validateObject(options, {\n DST: 'stringOrUint8Array',\n p: 'bigint',\n m: 'isSafeInteger',\n k: 'isSafeInteger',\n hash: 'hash',\n });\n const { p, k, m, hash, expand, DST: _DST } = options;\n abytes(msg);\n anum(count);\n const DST = typeof _DST === 'string' ? utf8ToBytes(_DST) : _DST;\n const log2p = p.toString(2).length;\n const L = Math.ceil((log2p + k) / 8); // section 5.1 of ietf draft link above\n const len_in_bytes = count * m * L;\n let prb; // pseudo_random_bytes\n if (expand === 'xmd') {\n prb = expand_message_xmd(msg, DST, len_in_bytes, hash);\n } else if (expand === 'xof') {\n prb = expand_message_xof(msg, DST, len_in_bytes, k, hash);\n } else if (expand === '_internal_pass') {\n // for internal tests only\n prb = msg;\n } else {\n throw new Error('expand must be \"xmd\" or \"xof\"');\n }\n const u = new Array(count);\n for (let i = 0; i < count; i++) {\n const e = new Array(m);\n for (let j = 0; j < m; j++) {\n const elm_offset = L * (j + i * m);\n const tv = prb.subarray(elm_offset, elm_offset + L);\n e[j] = mod(os2ip(tv), p);\n }\n u[i] = e;\n }\n return u;\n}\n\nexport type XY = (x: T, y: T) => { x: T; y: T };\nexport type XYRatio = [T[], T[], T[], T[]]; // xn/xd, yn/yd\nexport function isogenyMap>(field: F, map: XYRatio): XY {\n // Make same order as in spec\n const coeff = map.map((i) => Array.from(i).reverse());\n return (x: T, y: T) => {\n const [xn, xd, yn, yd] = coeff.map((val) =>\n val.reduce((acc, i) => field.add(field.mul(acc, x), i))\n );\n // 6.6.3\n // Exceptional cases of iso_map are inputs that cause the denominator of\n // either rational function to evaluate to zero; such cases MUST return\n // the identity point on E.\n const [xd_inv, yd_inv] = FpInvertBatch(field, [xd, yd], true);\n x = field.mul(xn, xd_inv); // xNum / xDen\n y = field.mul(y, field.mul(yn, yd_inv)); // y * (yNum / yDev)\n return { x, y };\n };\n}\n\n/** Point interface, which curves must implement to work correctly with the module. */\nexport interface H2CPoint extends Group> {\n add(rhs: H2CPoint): H2CPoint;\n toAffine(iz?: bigint): AffinePoint;\n clearCofactor(): H2CPoint;\n assertValidity(): void;\n}\n\nexport interface H2CPointConstructor extends GroupConstructor> {\n fromAffine(ap: AffinePoint): H2CPoint;\n}\n\nexport type MapToCurve = (scalar: bigint[]) => AffinePoint;\n\n// Separated from initialization opts, so users won't accidentally change per-curve parameters\n// (changing DST is ok!)\nexport type htfBasicOpts = { DST: UnicodeOrBytes };\nexport type HTFMethod = (msg: Uint8Array, options?: htfBasicOpts) => H2CPoint;\nexport type MapMethod = (scalars: bigint[]) => H2CPoint;\nexport type Hasher = {\n hashToCurve: HTFMethod;\n encodeToCurve: HTFMethod;\n mapToCurve: MapMethod;\n defaults: Opts & { encodeDST?: UnicodeOrBytes };\n};\n\n/** Creates hash-to-curve methods from EC Point and mapToCurve function. */\nexport function createHasher(\n Point: H2CPointConstructor,\n mapToCurve: MapToCurve,\n defaults: Opts & { encodeDST?: UnicodeOrBytes }\n): Hasher {\n if (typeof mapToCurve !== 'function') throw new Error('mapToCurve() must be defined');\n function map(num: bigint[]) {\n return Point.fromAffine(mapToCurve(num));\n }\n function clear(initial: H2CPoint) {\n const P = initial.clearCofactor();\n if (P.equals(Point.ZERO)) return Point.ZERO; // zero will throw in assert\n P.assertValidity();\n return P;\n }\n\n return {\n defaults,\n\n // Encodes byte string to elliptic curve.\n // hash_to_curve from https://www.rfc-editor.org/rfc/rfc9380#section-3\n hashToCurve(msg: Uint8Array, options?: htfBasicOpts): H2CPoint {\n const u = hash_to_field(msg, 2, { ...defaults, DST: defaults.DST, ...options } as Opts);\n const u0 = map(u[0]);\n const u1 = map(u[1]);\n return clear(u0.add(u1));\n },\n\n // Encodes byte string to elliptic curve.\n // encode_to_curve from https://www.rfc-editor.org/rfc/rfc9380#section-3\n encodeToCurve(msg: Uint8Array, options?: htfBasicOpts): H2CPoint {\n const u = hash_to_field(msg, 1, { ...defaults, DST: defaults.encodeDST, ...options } as Opts);\n return clear(map(u[0]));\n },\n\n // Same as encodeToCurve, but without hash\n mapToCurve(scalars: bigint[]): H2CPoint {\n if (!Array.isArray(scalars)) throw new Error('expected array of bigints');\n for (const i of scalars)\n if (typeof i !== 'bigint') throw new Error('expected array of bigints');\n return clear(map(scalars));\n },\n };\n}\n", "/**\n * NIST secp256k1. See [pdf](https://www.secg.org/sec2-v2.pdf).\n *\n * Seems to be rigid (not backdoored)\n * [as per discussion](https://bitcointalk.org/index.php?topic=289795.msg3183975#msg3183975).\n *\n * secp256k1 belongs to Koblitz curves: it has efficiently computable endomorphism.\n * Endomorphism uses 2x less RAM, speeds up precomputation by 2x and ECDH / key recovery by 20%.\n * For precomputed wNAF it trades off 1/2 init time & 1/3 ram for 20% perf hit.\n * [See explanation](https://gist.github.com/paulmillr/eb670806793e84df628a7c434a873066).\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha256 } from '@noble/hashes/sha2';\nimport { randomBytes } from '@noble/hashes/utils';\nimport { createCurve, type CurveFnWithCreate } from './_shortw_utils.ts';\nimport { createHasher, type Hasher, type HTFMethod, isogenyMap } from './abstract/hash-to-curve.ts';\nimport { Field, mod, pow2 } from './abstract/modular.ts';\nimport type { Hex, PrivKey } from './abstract/utils.ts';\nimport {\n aInRange,\n bytesToNumberBE,\n concatBytes,\n ensureBytes,\n inRange,\n numberToBytesBE,\n} from './abstract/utils.ts';\nimport { mapToCurveSimpleSWU, type ProjPointType as PointType } from './abstract/weierstrass.ts';\n\nconst secp256k1P = BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f');\nconst secp256k1N = BigInt('0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141');\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst divNearest = (a: bigint, b: bigint) => (a + b / _2n) / b;\n\n/**\n * \u221An = n^((p+1)/4) for fields p = 3 mod 4. We unwrap the loop and multiply bit-by-bit.\n * (P+1n/4n).toString(2) would produce bits [223x 1, 0, 22x 1, 4x 0, 11, 00]\n */\nfunction sqrtMod(y: bigint): bigint {\n const P = secp256k1P;\n // prettier-ignore\n const _3n = BigInt(3), _6n = BigInt(6), _11n = BigInt(11), _22n = BigInt(22);\n // prettier-ignore\n const _23n = BigInt(23), _44n = BigInt(44), _88n = BigInt(88);\n const b2 = (y * y * y) % P; // x^3, 11\n const b3 = (b2 * b2 * y) % P; // x^7\n const b6 = (pow2(b3, _3n, P) * b3) % P;\n const b9 = (pow2(b6, _3n, P) * b3) % P;\n const b11 = (pow2(b9, _2n, P) * b2) % P;\n const b22 = (pow2(b11, _11n, P) * b11) % P;\n const b44 = (pow2(b22, _22n, P) * b22) % P;\n const b88 = (pow2(b44, _44n, P) * b44) % P;\n const b176 = (pow2(b88, _88n, P) * b88) % P;\n const b220 = (pow2(b176, _44n, P) * b44) % P;\n const b223 = (pow2(b220, _3n, P) * b3) % P;\n const t1 = (pow2(b223, _23n, P) * b22) % P;\n const t2 = (pow2(t1, _6n, P) * b2) % P;\n const root = pow2(t2, _2n, P);\n if (!Fpk1.eql(Fpk1.sqr(root), y)) throw new Error('Cannot find square root');\n return root;\n}\n\nconst Fpk1 = Field(secp256k1P, undefined, undefined, { sqrt: sqrtMod });\n\n/**\n * secp256k1 curve, ECDSA and ECDH methods.\n *\n * Field: `2n**256n - 2n**32n - 2n**9n - 2n**8n - 2n**7n - 2n**6n - 2n**4n - 1n`\n *\n * @example\n * ```js\n * import { secp256k1 } from '@noble/curves/secp256k1';\n * const priv = secp256k1.utils.randomPrivateKey();\n * const pub = secp256k1.getPublicKey(priv);\n * const msg = new Uint8Array(32).fill(1); // message hash (not message) in ecdsa\n * const sig = secp256k1.sign(msg, priv); // `{prehash: true}` option is available\n * const isValid = secp256k1.verify(sig, msg, pub) === true;\n * ```\n */\nexport const secp256k1: CurveFnWithCreate = createCurve(\n {\n a: _0n,\n b: BigInt(7),\n Fp: Fpk1,\n n: secp256k1N,\n Gx: BigInt('55066263022277343669578718895168534326250603453777594175500187360389116729240'),\n Gy: BigInt('32670510020758816978083085130507043184471273380659243275938904335757337482424'),\n h: BigInt(1),\n lowS: true, // Allow only low-S signatures by default in sign() and verify()\n endo: {\n // Endomorphism, see above\n beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'),\n splitScalar: (k: bigint) => {\n const n = secp256k1N;\n const a1 = BigInt('0x3086d221a7d46bcde86c90e49284eb15');\n const b1 = -_1n * BigInt('0xe4437ed6010e88286f547fa90abfe4c3');\n const a2 = BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8');\n const b2 = a1;\n const POW_2_128 = BigInt('0x100000000000000000000000000000000'); // (2n**128n).toString(16)\n\n const c1 = divNearest(b2 * k, n);\n const c2 = divNearest(-b1 * k, n);\n let k1 = mod(k - c1 * a1 - c2 * a2, n);\n let k2 = mod(-c1 * b1 - c2 * b2, n);\n const k1neg = k1 > POW_2_128;\n const k2neg = k2 > POW_2_128;\n if (k1neg) k1 = n - k1;\n if (k2neg) k2 = n - k2;\n if (k1 > POW_2_128 || k2 > POW_2_128) {\n throw new Error('splitScalar: Endomorphism failed, k=' + k);\n }\n return { k1neg, k1, k2neg, k2 };\n },\n },\n },\n sha256\n);\n\n// Schnorr signatures are superior to ECDSA from above. Below is Schnorr-specific BIP0340 code.\n// https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki\n/** An object mapping tags to their tagged hash prefix of [SHA256(tag) | SHA256(tag)] */\nconst TAGGED_HASH_PREFIXES: { [tag: string]: Uint8Array } = {};\nfunction taggedHash(tag: string, ...messages: Uint8Array[]): Uint8Array {\n let tagP = TAGGED_HASH_PREFIXES[tag];\n if (tagP === undefined) {\n const tagH = sha256(Uint8Array.from(tag, (c) => c.charCodeAt(0)));\n tagP = concatBytes(tagH, tagH);\n TAGGED_HASH_PREFIXES[tag] = tagP;\n }\n return sha256(concatBytes(tagP, ...messages));\n}\n\n// ECDSA compact points are 33-byte. Schnorr is 32: we strip first byte 0x02 or 0x03\nconst pointToBytes = (point: PointType) => point.toRawBytes(true).slice(1);\nconst numTo32b = (n: bigint) => numberToBytesBE(n, 32);\nconst modP = (x: bigint) => mod(x, secp256k1P);\nconst modN = (x: bigint) => mod(x, secp256k1N);\nconst Point = /* @__PURE__ */ (() => secp256k1.ProjectivePoint)();\nconst GmulAdd = (Q: PointType, a: bigint, b: bigint) =>\n Point.BASE.multiplyAndAddUnsafe(Q, a, b);\n\n// Calculate point, scalar and bytes\nfunction schnorrGetExtPubKey(priv: PrivKey) {\n let d_ = secp256k1.utils.normPrivateKeyToScalar(priv); // same method executed in fromPrivateKey\n let p = Point.fromPrivateKey(d_); // P = d'\u22C5G; 0 < d' < n check is done inside\n const scalar = p.hasEvenY() ? d_ : modN(-d_);\n return { scalar: scalar, bytes: pointToBytes(p) };\n}\n/**\n * lift_x from BIP340. Convert 32-byte x coordinate to elliptic curve point.\n * @returns valid point checked for being on-curve\n */\nfunction lift_x(x: bigint): PointType {\n aInRange('x', x, _1n, secp256k1P); // Fail if x \u2265 p.\n const xx = modP(x * x);\n const c = modP(xx * x + BigInt(7)); // Let c = x\u00B3 + 7 mod p.\n let y = sqrtMod(c); // Let y = c^(p+1)/4 mod p.\n if (y % _2n !== _0n) y = modP(-y); // Return the unique point P such that x(P) = x and\n const p = new Point(x, y, _1n); // y(P) = y if y mod 2 = 0 or y(P) = p-y otherwise.\n p.assertValidity();\n return p;\n}\nconst num = bytesToNumberBE;\n/**\n * Create tagged hash, convert it to bigint, reduce modulo-n.\n */\nfunction challenge(...args: Uint8Array[]): bigint {\n return modN(num(taggedHash('BIP0340/challenge', ...args)));\n}\n\n/**\n * Schnorr public key is just `x` coordinate of Point as per BIP340.\n */\nfunction schnorrGetPublicKey(privateKey: Hex): Uint8Array {\n return schnorrGetExtPubKey(privateKey).bytes; // d'=int(sk). Fail if d'=0 or d'\u2265n. Ret bytes(d'\u22C5G)\n}\n\n/**\n * Creates Schnorr signature as per BIP340. Verifies itself before returning anything.\n * auxRand is optional and is not the sole source of k generation: bad CSPRNG won't be dangerous.\n */\nfunction schnorrSign(\n message: Hex,\n privateKey: PrivKey,\n auxRand: Hex = randomBytes(32)\n): Uint8Array {\n const m = ensureBytes('message', message);\n const { bytes: px, scalar: d } = schnorrGetExtPubKey(privateKey); // checks for isWithinCurveOrder\n const a = ensureBytes('auxRand', auxRand, 32); // Auxiliary random data a: a 32-byte array\n const t = numTo32b(d ^ num(taggedHash('BIP0340/aux', a))); // Let t be the byte-wise xor of bytes(d) and hash/aux(a)\n const rand = taggedHash('BIP0340/nonce', t, px, m); // Let rand = hash/nonce(t || bytes(P) || m)\n const k_ = modN(num(rand)); // Let k' = int(rand) mod n\n if (k_ === _0n) throw new Error('sign failed: k is zero'); // Fail if k' = 0.\n const { bytes: rx, scalar: k } = schnorrGetExtPubKey(k_); // Let R = k'\u22C5G.\n const e = challenge(rx, px, m); // Let e = int(hash/challenge(bytes(R) || bytes(P) || m)) mod n.\n const sig = new Uint8Array(64); // Let sig = bytes(R) || bytes((k + ed) mod n).\n sig.set(rx, 0);\n sig.set(numTo32b(modN(k + e * d)), 32);\n // If Verify(bytes(P), m, sig) (see below) returns failure, abort\n if (!schnorrVerify(sig, m, px)) throw new Error('sign: Invalid signature produced');\n return sig;\n}\n\n/**\n * Verifies Schnorr signature.\n * Will swallow errors & return false except for initial type validation of arguments.\n */\nfunction schnorrVerify(signature: Hex, message: Hex, publicKey: Hex): boolean {\n const sig = ensureBytes('signature', signature, 64);\n const m = ensureBytes('message', message);\n const pub = ensureBytes('publicKey', publicKey, 32);\n try {\n const P = lift_x(num(pub)); // P = lift_x(int(pk)); fail if that fails\n const r = num(sig.subarray(0, 32)); // Let r = int(sig[0:32]); fail if r \u2265 p.\n if (!inRange(r, _1n, secp256k1P)) return false;\n const s = num(sig.subarray(32, 64)); // Let s = int(sig[32:64]); fail if s \u2265 n.\n if (!inRange(s, _1n, secp256k1N)) return false;\n const e = challenge(numTo32b(r), pointToBytes(P), m); // int(challenge(bytes(r)||bytes(P)||m))%n\n const R = GmulAdd(P, s, modN(-e)); // R = s\u22C5G - e\u22C5P\n if (!R || !R.hasEvenY() || R.toAffine().x !== r) return false; // -eP == (n-e)P\n return true; // Fail if is_infinite(R) / not has_even_y(R) / x(R) \u2260 r.\n } catch (error) {\n return false;\n }\n}\n\nexport type SecpSchnorr = {\n getPublicKey: typeof schnorrGetPublicKey;\n sign: typeof schnorrSign;\n verify: typeof schnorrVerify;\n utils: {\n randomPrivateKey: () => Uint8Array;\n lift_x: typeof lift_x;\n pointToBytes: (point: PointType) => Uint8Array;\n numberToBytesBE: typeof numberToBytesBE;\n bytesToNumberBE: typeof bytesToNumberBE;\n taggedHash: typeof taggedHash;\n mod: typeof mod;\n };\n};\n/**\n * Schnorr signatures over secp256k1.\n * https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki\n * @example\n * ```js\n * import { schnorr } from '@noble/curves/secp256k1';\n * const priv = schnorr.utils.randomPrivateKey();\n * const pub = schnorr.getPublicKey(priv);\n * const msg = new TextEncoder().encode('hello');\n * const sig = schnorr.sign(msg, priv);\n * const isValid = schnorr.verify(sig, msg, pub);\n * ```\n */\nexport const schnorr: SecpSchnorr = /* @__PURE__ */ (() => ({\n getPublicKey: schnorrGetPublicKey,\n sign: schnorrSign,\n verify: schnorrVerify,\n utils: {\n randomPrivateKey: secp256k1.utils.randomPrivateKey,\n lift_x,\n pointToBytes,\n numberToBytesBE,\n bytesToNumberBE,\n taggedHash,\n mod,\n },\n}))();\n\nconst isoMap = /* @__PURE__ */ (() =>\n isogenyMap(\n Fpk1,\n [\n // xNum\n [\n '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa8c7',\n '0x7d3d4c80bc321d5b9f315cea7fd44c5d595d2fc0bf63b92dfff1044f17c6581',\n '0x534c328d23f234e6e2a413deca25caece4506144037c40314ecbd0b53d9dd262',\n '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa88c',\n ],\n // xDen\n [\n '0xd35771193d94918a9ca34ccbb7b640dd86cd409542f8487d9fe6b745781eb49b',\n '0xedadc6f64383dc1df7c4b2d51b54225406d36b641f5e41bbc52a56612a8c6d14',\n '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n ],\n // yNum\n [\n '0x4bda12f684bda12f684bda12f684bda12f684bda12f684bda12f684b8e38e23c',\n '0xc75e0c32d5cb7c0fa9d0a54b12a0a6d5647ab046d686da6fdffc90fc201d71a3',\n '0x29a6194691f91a73715209ef6512e576722830a201be2018a765e85a9ecee931',\n '0x2f684bda12f684bda12f684bda12f684bda12f684bda12f684bda12f38e38d84',\n ],\n // yDen\n [\n '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffff93b',\n '0x7a06534bb8bdb49fd5e9e6632722c2989467c1bfc8e8d978dfb425d2685c2573',\n '0x6484aa716545ca2cf3a70c3fa8fe337e0a3d21162f0d6299a7bf8192bfd2a76f',\n '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n ],\n ].map((i) => i.map((j) => BigInt(j))) as [bigint[], bigint[], bigint[], bigint[]]\n ))();\nconst mapSWU = /* @__PURE__ */ (() =>\n mapToCurveSimpleSWU(Fpk1, {\n A: BigInt('0x3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533'),\n B: BigInt('1771'),\n Z: Fpk1.create(BigInt('-11')),\n }))();\n/** Hashing / encoding to secp256k1 points / field. RFC 9380 methods. */\nexport const secp256k1_hasher: Hasher = /* @__PURE__ */ (() =>\n createHasher(\n secp256k1.ProjectivePoint,\n (scalars: bigint[]) => {\n const { x, y } = mapSWU(Fpk1.create(scalars[0]));\n return isoMap(x, y);\n },\n {\n DST: 'secp256k1_XMD:SHA-256_SSWU_RO_',\n encodeDST: 'secp256k1_XMD:SHA-256_SSWU_NU_',\n p: Fpk1.ORDER,\n m: 1,\n k: 128,\n expand: 'xmd',\n hash: sha256,\n } as const\n ))();\n\nexport const hashToCurve: HTFMethod = /* @__PURE__ */ (() =>\n secp256k1_hasher.hashToCurve)();\n\nexport const encodeToCurve: HTFMethod = /* @__PURE__ */ (() =>\n secp256k1_hasher.encodeToCurve)();\n", "import { formatGwei } from '../utils/unit/formatGwei.js'\n\nimport { BaseError } from './base.js'\n\n/**\n * geth: https://github.com/ethereum/go-ethereum/blob/master/core/error.go\n * https://github.com/ethereum/go-ethereum/blob/master/core/types/transaction.go#L34-L41\n *\n * erigon: https://github.com/ledgerwatch/erigon/blob/master/core/error.go\n * https://github.com/ledgerwatch/erigon/blob/master/core/types/transaction.go#L41-L46\n *\n * anvil: https://github.com/foundry-rs/foundry/blob/master/anvil/src/eth/error.rs#L108\n */\nexport type ExecutionRevertedErrorType = ExecutionRevertedError & {\n code: 3\n name: 'ExecutionRevertedError'\n}\nexport class ExecutionRevertedError extends BaseError {\n static code = 3\n static nodeMessage = /execution reverted|gas required exceeds allowance/\n\n constructor({\n cause,\n message,\n }: { cause?: BaseError | undefined; message?: string | undefined } = {}) {\n const reason = message\n ?.replace('execution reverted: ', '')\n ?.replace('execution reverted', '')\n super(\n `Execution reverted ${\n reason ? `with reason: ${reason}` : 'for an unknown reason'\n }.`,\n {\n cause,\n name: 'ExecutionRevertedError',\n },\n )\n }\n}\n\nexport type FeeCapTooHighErrorType = FeeCapTooHighError & {\n name: 'FeeCapTooHighError'\n}\nexport class FeeCapTooHighError extends BaseError {\n static nodeMessage =\n /max fee per gas higher than 2\\^256-1|fee cap higher than 2\\^256-1/\n constructor({\n cause,\n maxFeePerGas,\n }: {\n cause?: BaseError | undefined\n maxFeePerGas?: bigint | undefined\n } = {}) {\n super(\n `The fee cap (\\`maxFeePerGas\\`${\n maxFeePerGas ? ` = ${formatGwei(maxFeePerGas)} gwei` : ''\n }) cannot be higher than the maximum allowed value (2^256-1).`,\n {\n cause,\n name: 'FeeCapTooHighError',\n },\n )\n }\n}\n\nexport type FeeCapTooLowErrorType = FeeCapTooLowError & {\n name: 'FeeCapTooLowError'\n}\nexport class FeeCapTooLowError extends BaseError {\n static nodeMessage =\n /max fee per gas less than block base fee|fee cap less than block base fee|transaction is outdated/\n constructor({\n cause,\n maxFeePerGas,\n }: {\n cause?: BaseError | undefined\n maxFeePerGas?: bigint | undefined\n } = {}) {\n super(\n `The fee cap (\\`maxFeePerGas\\`${\n maxFeePerGas ? ` = ${formatGwei(maxFeePerGas)}` : ''\n } gwei) cannot be lower than the block base fee.`,\n {\n cause,\n name: 'FeeCapTooLowError',\n },\n )\n }\n}\n\nexport type NonceTooHighErrorType = NonceTooHighError & {\n name: 'NonceTooHighError'\n}\nexport class NonceTooHighError extends BaseError {\n static nodeMessage = /nonce too high/\n constructor({\n cause,\n nonce,\n }: { cause?: BaseError | undefined; nonce?: number | undefined } = {}) {\n super(\n `Nonce provided for the transaction ${\n nonce ? `(${nonce}) ` : ''\n }is higher than the next one expected.`,\n { cause, name: 'NonceTooHighError' },\n )\n }\n}\n\nexport type NonceTooLowErrorType = NonceTooLowError & {\n name: 'NonceTooLowError'\n}\nexport class NonceTooLowError extends BaseError {\n static nodeMessage =\n /nonce too low|transaction already imported|already known/\n constructor({\n cause,\n nonce,\n }: { cause?: BaseError | undefined; nonce?: number | undefined } = {}) {\n super(\n [\n `Nonce provided for the transaction ${\n nonce ? `(${nonce}) ` : ''\n }is lower than the current nonce of the account.`,\n 'Try increasing the nonce or find the latest nonce with `getTransactionCount`.',\n ].join('\\n'),\n { cause, name: 'NonceTooLowError' },\n )\n }\n}\n\nexport type NonceMaxValueErrorType = NonceMaxValueError & {\n name: 'NonceMaxValueError'\n}\nexport class NonceMaxValueError extends BaseError {\n static nodeMessage = /nonce has max value/\n constructor({\n cause,\n nonce,\n }: { cause?: BaseError | undefined; nonce?: number | undefined } = {}) {\n super(\n `Nonce provided for the transaction ${\n nonce ? `(${nonce}) ` : ''\n }exceeds the maximum allowed nonce.`,\n { cause, name: 'NonceMaxValueError' },\n )\n }\n}\n\nexport type InsufficientFundsErrorType = InsufficientFundsError & {\n name: 'InsufficientFundsError'\n}\nexport class InsufficientFundsError extends BaseError {\n static nodeMessage =\n /insufficient funds|exceeds transaction sender account balance/\n constructor({ cause }: { cause?: BaseError | undefined } = {}) {\n super(\n [\n 'The total cost (gas * gas fee + value) of executing this transaction exceeds the balance of the account.',\n ].join('\\n'),\n {\n cause,\n metaMessages: [\n 'This error could arise when the account does not have enough funds to:',\n ' - pay for the total gas fee,',\n ' - pay for the value to send.',\n ' ',\n 'The cost of the transaction is calculated as `gas * gas fee + value`, where:',\n ' - `gas` is the amount of gas needed for transaction to execute,',\n ' - `gas fee` is the gas fee,',\n ' - `value` is the amount of ether to send to the recipient.',\n ],\n name: 'InsufficientFundsError',\n },\n )\n }\n}\n\nexport type IntrinsicGasTooHighErrorType = IntrinsicGasTooHighError & {\n name: 'IntrinsicGasTooHighError'\n}\nexport class IntrinsicGasTooHighError extends BaseError {\n static nodeMessage = /intrinsic gas too high|gas limit reached/\n constructor({\n cause,\n gas,\n }: { cause?: BaseError | undefined; gas?: bigint | undefined } = {}) {\n super(\n `The amount of gas ${\n gas ? `(${gas}) ` : ''\n }provided for the transaction exceeds the limit allowed for the block.`,\n {\n cause,\n name: 'IntrinsicGasTooHighError',\n },\n )\n }\n}\n\nexport type IntrinsicGasTooLowErrorType = IntrinsicGasTooLowError & {\n name: 'IntrinsicGasTooLowError'\n}\nexport class IntrinsicGasTooLowError extends BaseError {\n static nodeMessage = /intrinsic gas too low/\n constructor({\n cause,\n gas,\n }: { cause?: BaseError | undefined; gas?: bigint | undefined } = {}) {\n super(\n `The amount of gas ${\n gas ? `(${gas}) ` : ''\n }provided for the transaction is too low.`,\n {\n cause,\n name: 'IntrinsicGasTooLowError',\n },\n )\n }\n}\n\nexport type TransactionTypeNotSupportedErrorType =\n TransactionTypeNotSupportedError & {\n name: 'TransactionTypeNotSupportedError'\n }\nexport class TransactionTypeNotSupportedError extends BaseError {\n static nodeMessage = /transaction type not valid/\n constructor({ cause }: { cause?: BaseError | undefined }) {\n super('The transaction type is not supported for this chain.', {\n cause,\n name: 'TransactionTypeNotSupportedError',\n })\n }\n}\n\nexport type TipAboveFeeCapErrorType = TipAboveFeeCapError & {\n name: 'TipAboveFeeCapError'\n}\nexport class TipAboveFeeCapError extends BaseError {\n static nodeMessage =\n /max priority fee per gas higher than max fee per gas|tip higher than fee cap/\n constructor({\n cause,\n maxPriorityFeePerGas,\n maxFeePerGas,\n }: {\n cause?: BaseError | undefined\n maxPriorityFeePerGas?: bigint | undefined\n maxFeePerGas?: bigint | undefined\n } = {}) {\n super(\n [\n `The provided tip (\\`maxPriorityFeePerGas\\`${\n maxPriorityFeePerGas\n ? ` = ${formatGwei(maxPriorityFeePerGas)} gwei`\n : ''\n }) cannot be higher than the fee cap (\\`maxFeePerGas\\`${\n maxFeePerGas ? ` = ${formatGwei(maxFeePerGas)} gwei` : ''\n }).`,\n ].join('\\n'),\n {\n cause,\n name: 'TipAboveFeeCapError',\n },\n )\n }\n}\n\nexport type UnknownNodeErrorType = UnknownNodeError & {\n name: 'UnknownNodeError'\n}\nexport class UnknownNodeError extends BaseError {\n constructor({ cause }: { cause?: BaseError | undefined }) {\n super(`An error occurred while executing: ${cause?.shortMessage}`, {\n cause,\n name: 'UnknownNodeError',\n })\n }\n}\n", "import type { SendTransactionParameters } from '../../actions/wallet/sendTransaction.js'\nimport { BaseError } from '../../errors/base.js'\nimport {\n ExecutionRevertedError,\n type ExecutionRevertedErrorType,\n FeeCapTooHighError,\n type FeeCapTooHighErrorType,\n FeeCapTooLowError,\n type FeeCapTooLowErrorType,\n InsufficientFundsError,\n type InsufficientFundsErrorType,\n IntrinsicGasTooHighError,\n type IntrinsicGasTooHighErrorType,\n IntrinsicGasTooLowError,\n type IntrinsicGasTooLowErrorType,\n NonceMaxValueError,\n type NonceMaxValueErrorType,\n NonceTooHighError,\n type NonceTooHighErrorType,\n NonceTooLowError,\n type NonceTooLowErrorType,\n TipAboveFeeCapError,\n type TipAboveFeeCapErrorType,\n TransactionTypeNotSupportedError,\n type TransactionTypeNotSupportedErrorType,\n UnknownNodeError,\n type UnknownNodeErrorType,\n} from '../../errors/node.js'\nimport { RpcRequestError } from '../../errors/request.js'\nimport {\n InvalidInputRpcError,\n TransactionRejectedRpcError,\n} from '../../errors/rpc.js'\nimport type { ExactPartial } from '../../types/utils.js'\n\nexport function containsNodeError(err: BaseError) {\n return (\n err instanceof TransactionRejectedRpcError ||\n err instanceof InvalidInputRpcError ||\n (err instanceof RpcRequestError && err.code === ExecutionRevertedError.code)\n )\n}\n\nexport type GetNodeErrorParameters = ExactPartial<\n SendTransactionParameters\n>\n\nexport type GetNodeErrorReturnType =\n | ExecutionRevertedErrorType\n | FeeCapTooHighErrorType\n | FeeCapTooLowErrorType\n | NonceTooHighErrorType\n | NonceTooLowErrorType\n | NonceMaxValueErrorType\n | InsufficientFundsErrorType\n | IntrinsicGasTooHighErrorType\n | IntrinsicGasTooLowErrorType\n | TransactionTypeNotSupportedErrorType\n | TipAboveFeeCapErrorType\n | UnknownNodeErrorType\n\nexport function getNodeError(\n err: BaseError,\n args: GetNodeErrorParameters,\n): GetNodeErrorReturnType {\n const message = (err.details || '').toLowerCase()\n\n const executionRevertedError =\n err instanceof BaseError\n ? err.walk(\n (e) =>\n (e as { code: number } | null | undefined)?.code ===\n ExecutionRevertedError.code,\n )\n : err\n if (executionRevertedError instanceof BaseError)\n return new ExecutionRevertedError({\n cause: err,\n message: executionRevertedError.details,\n }) as any\n if (ExecutionRevertedError.nodeMessage.test(message))\n return new ExecutionRevertedError({\n cause: err,\n message: err.details,\n }) as any\n if (FeeCapTooHighError.nodeMessage.test(message))\n return new FeeCapTooHighError({\n cause: err,\n maxFeePerGas: args?.maxFeePerGas,\n }) as any\n if (FeeCapTooLowError.nodeMessage.test(message))\n return new FeeCapTooLowError({\n cause: err,\n maxFeePerGas: args?.maxFeePerGas,\n }) as any\n if (NonceTooHighError.nodeMessage.test(message))\n return new NonceTooHighError({ cause: err, nonce: args?.nonce }) as any\n if (NonceTooLowError.nodeMessage.test(message))\n return new NonceTooLowError({ cause: err, nonce: args?.nonce }) as any\n if (NonceMaxValueError.nodeMessage.test(message))\n return new NonceMaxValueError({ cause: err, nonce: args?.nonce }) as any\n if (InsufficientFundsError.nodeMessage.test(message))\n return new InsufficientFundsError({ cause: err }) as any\n if (IntrinsicGasTooHighError.nodeMessage.test(message))\n return new IntrinsicGasTooHighError({ cause: err, gas: args?.gas }) as any\n if (IntrinsicGasTooLowError.nodeMessage.test(message))\n return new IntrinsicGasTooLowError({ cause: err, gas: args?.gas }) as any\n if (TransactionTypeNotSupportedError.nodeMessage.test(message))\n return new TransactionTypeNotSupportedError({ cause: err }) as any\n if (TipAboveFeeCapError.nodeMessage.test(message))\n return new TipAboveFeeCapError({\n cause: err,\n maxFeePerGas: args?.maxFeePerGas,\n maxPriorityFeePerGas: args?.maxPriorityFeePerGas,\n }) as any\n return new UnknownNodeError({\n cause: err,\n }) as any\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { ChainFormatter } from '../../types/chain.js'\n\nexport type ExtractErrorType = ErrorType\n\n/**\n * @description Picks out the keys from `value` that exist in the formatter..\n */\nexport function extract(\n value_: Record,\n { format }: { format?: ChainFormatter['format'] | undefined },\n) {\n if (!format) return {}\n\n const value: Record = {}\n function extract_(formatted: Record) {\n const keys = Object.keys(formatted)\n for (const key of keys) {\n if (key in value_) value[key] = value_[key]\n if (\n formatted[key] &&\n typeof formatted[key] === 'object' &&\n !Array.isArray(formatted[key])\n )\n extract_(formatted[key])\n }\n }\n\n const formatted = format(value_ || {})\n extract_(formatted)\n\n return value\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { AuthorizationList } from '../../types/authorization.js'\nimport type {\n Chain,\n ExtractChainFormatterParameters,\n} from '../../types/chain.js'\nimport type { ByteArray } from '../../types/misc.js'\nimport type {\n RpcAuthorizationList,\n RpcTransactionRequest,\n} from '../../types/rpc.js'\nimport type { TransactionRequest } from '../../types/transaction.js'\nimport type { ExactPartial } from '../../types/utils.js'\nimport { bytesToHex, numberToHex } from '../encoding/toHex.js'\nimport { type DefineFormatterErrorType, defineFormatter } from './formatter.js'\n\nexport type FormattedTransactionRequest<\n chain extends Chain | undefined = Chain | undefined,\n> = ExtractChainFormatterParameters<\n chain,\n 'transactionRequest',\n TransactionRequest\n>\n\nexport const rpcTransactionType = {\n legacy: '0x0',\n eip2930: '0x1',\n eip1559: '0x2',\n eip4844: '0x3',\n eip7702: '0x4',\n} as const\n\nexport type FormatTransactionRequestErrorType = ErrorType\n\nexport function formatTransactionRequest(\n request: ExactPartial & { account?: Account | undefined },\n _?: string | undefined,\n) {\n const rpcRequest = {} as RpcTransactionRequest\n\n if (typeof request.authorizationList !== 'undefined')\n rpcRequest.authorizationList = formatAuthorizationList(\n request.authorizationList,\n )\n if (typeof request.accessList !== 'undefined')\n rpcRequest.accessList = request.accessList\n if (typeof request.blobVersionedHashes !== 'undefined')\n rpcRequest.blobVersionedHashes = request.blobVersionedHashes\n if (typeof request.blobs !== 'undefined') {\n if (typeof request.blobs[0] !== 'string')\n rpcRequest.blobs = (request.blobs as ByteArray[]).map((x) =>\n bytesToHex(x),\n )\n else rpcRequest.blobs = request.blobs\n }\n if (typeof request.data !== 'undefined') rpcRequest.data = request.data\n if (request.account) rpcRequest.from = request.account.address\n if (typeof request.from !== 'undefined') rpcRequest.from = request.from\n if (typeof request.gas !== 'undefined')\n rpcRequest.gas = numberToHex(request.gas)\n if (typeof request.gasPrice !== 'undefined')\n rpcRequest.gasPrice = numberToHex(request.gasPrice)\n if (typeof request.maxFeePerBlobGas !== 'undefined')\n rpcRequest.maxFeePerBlobGas = numberToHex(request.maxFeePerBlobGas)\n if (typeof request.maxFeePerGas !== 'undefined')\n rpcRequest.maxFeePerGas = numberToHex(request.maxFeePerGas)\n if (typeof request.maxPriorityFeePerGas !== 'undefined')\n rpcRequest.maxPriorityFeePerGas = numberToHex(request.maxPriorityFeePerGas)\n if (typeof request.nonce !== 'undefined')\n rpcRequest.nonce = numberToHex(request.nonce)\n if (typeof request.to !== 'undefined') rpcRequest.to = request.to\n if (typeof request.type !== 'undefined')\n rpcRequest.type = rpcTransactionType[request.type]\n if (typeof request.value !== 'undefined')\n rpcRequest.value = numberToHex(request.value)\n\n return rpcRequest\n}\n\nexport type DefineTransactionRequestErrorType =\n | DefineFormatterErrorType\n | ErrorType\n\nexport const defineTransactionRequest = /*#__PURE__*/ defineFormatter(\n 'transactionRequest',\n formatTransactionRequest,\n)\n\n//////////////////////////////////////////////////////////////////////////////\n\nfunction formatAuthorizationList(\n authorizationList: AuthorizationList,\n): RpcAuthorizationList {\n return authorizationList.map(\n (authorization) =>\n ({\n address: authorization.address,\n r: authorization.r\n ? numberToHex(BigInt(authorization.r))\n : authorization.r,\n s: authorization.s\n ? numberToHex(BigInt(authorization.s))\n : authorization.s,\n chainId: numberToHex(authorization.chainId),\n nonce: numberToHex(authorization.nonce),\n ...(typeof authorization.yParity !== 'undefined'\n ? { yParity: numberToHex(authorization.yParity) }\n : {}),\n ...(typeof authorization.v !== 'undefined' &&\n typeof authorization.yParity === 'undefined'\n ? { v: numberToHex(authorization.v) }\n : {}),\n }) as any,\n ) as RpcAuthorizationList\n}\n", "import {\n InvalidAddressError,\n type InvalidAddressErrorType,\n} from '../errors/address.js'\nimport {\n InvalidBytesLengthError,\n type InvalidBytesLengthErrorType,\n} from '../errors/data.js'\nimport {\n AccountStateConflictError,\n type AccountStateConflictErrorType,\n StateAssignmentConflictError,\n type StateAssignmentConflictErrorType,\n} from '../errors/stateOverride.js'\nimport type {\n RpcAccountStateOverride,\n RpcStateMapping,\n RpcStateOverride,\n} from '../types/rpc.js'\nimport type { StateMapping, StateOverride } from '../types/stateOverride.js'\nimport { isAddress } from './address/isAddress.js'\nimport { type NumberToHexErrorType, numberToHex } from './encoding/toHex.js'\n\ntype SerializeStateMappingParameters = StateMapping | undefined\n\ntype SerializeStateMappingErrorType = InvalidBytesLengthErrorType\n\n/** @internal */\nexport function serializeStateMapping(\n stateMapping: SerializeStateMappingParameters,\n): RpcStateMapping | undefined {\n if (!stateMapping || stateMapping.length === 0) return undefined\n return stateMapping.reduce((acc, { slot, value }) => {\n if (slot.length !== 66)\n throw new InvalidBytesLengthError({\n size: slot.length,\n targetSize: 66,\n type: 'hex',\n })\n if (value.length !== 66)\n throw new InvalidBytesLengthError({\n size: value.length,\n targetSize: 66,\n type: 'hex',\n })\n acc[slot] = value\n return acc\n }, {} as RpcStateMapping)\n}\n\ntype SerializeAccountStateOverrideParameters = Omit<\n StateOverride[number],\n 'address'\n>\n\ntype SerializeAccountStateOverrideErrorType =\n | NumberToHexErrorType\n | StateAssignmentConflictErrorType\n | SerializeStateMappingErrorType\n\n/** @internal */\nexport function serializeAccountStateOverride(\n parameters: SerializeAccountStateOverrideParameters,\n): RpcAccountStateOverride {\n const { balance, nonce, state, stateDiff, code } = parameters\n const rpcAccountStateOverride: RpcAccountStateOverride = {}\n if (code !== undefined) rpcAccountStateOverride.code = code\n if (balance !== undefined)\n rpcAccountStateOverride.balance = numberToHex(balance)\n if (nonce !== undefined) rpcAccountStateOverride.nonce = numberToHex(nonce)\n if (state !== undefined)\n rpcAccountStateOverride.state = serializeStateMapping(state)\n if (stateDiff !== undefined) {\n if (rpcAccountStateOverride.state) throw new StateAssignmentConflictError()\n rpcAccountStateOverride.stateDiff = serializeStateMapping(stateDiff)\n }\n return rpcAccountStateOverride\n}\n\ntype SerializeStateOverrideParameters = StateOverride | undefined\n\nexport type SerializeStateOverrideErrorType =\n | InvalidAddressErrorType\n | AccountStateConflictErrorType\n | SerializeAccountStateOverrideErrorType\n\n/** @internal */\nexport function serializeStateOverride(\n parameters?: SerializeStateOverrideParameters,\n): RpcStateOverride | undefined {\n if (!parameters) return undefined\n const rpcStateOverride: RpcStateOverride = {}\n for (const { address, ...accountState } of parameters) {\n if (!isAddress(address, { strict: false }))\n throw new InvalidAddressError({ address })\n if (rpcStateOverride[address])\n throw new AccountStateConflictError({ address: address })\n rpcStateOverride[address] = serializeAccountStateOverride(accountState)\n }\n return rpcStateOverride\n}\n", "export const maxInt8 = 2n ** (8n - 1n) - 1n\nexport const maxInt16 = 2n ** (16n - 1n) - 1n\nexport const maxInt24 = 2n ** (24n - 1n) - 1n\nexport const maxInt32 = 2n ** (32n - 1n) - 1n\nexport const maxInt40 = 2n ** (40n - 1n) - 1n\nexport const maxInt48 = 2n ** (48n - 1n) - 1n\nexport const maxInt56 = 2n ** (56n - 1n) - 1n\nexport const maxInt64 = 2n ** (64n - 1n) - 1n\nexport const maxInt72 = 2n ** (72n - 1n) - 1n\nexport const maxInt80 = 2n ** (80n - 1n) - 1n\nexport const maxInt88 = 2n ** (88n - 1n) - 1n\nexport const maxInt96 = 2n ** (96n - 1n) - 1n\nexport const maxInt104 = 2n ** (104n - 1n) - 1n\nexport const maxInt112 = 2n ** (112n - 1n) - 1n\nexport const maxInt120 = 2n ** (120n - 1n) - 1n\nexport const maxInt128 = 2n ** (128n - 1n) - 1n\nexport const maxInt136 = 2n ** (136n - 1n) - 1n\nexport const maxInt144 = 2n ** (144n - 1n) - 1n\nexport const maxInt152 = 2n ** (152n - 1n) - 1n\nexport const maxInt160 = 2n ** (160n - 1n) - 1n\nexport const maxInt168 = 2n ** (168n - 1n) - 1n\nexport const maxInt176 = 2n ** (176n - 1n) - 1n\nexport const maxInt184 = 2n ** (184n - 1n) - 1n\nexport const maxInt192 = 2n ** (192n - 1n) - 1n\nexport const maxInt200 = 2n ** (200n - 1n) - 1n\nexport const maxInt208 = 2n ** (208n - 1n) - 1n\nexport const maxInt216 = 2n ** (216n - 1n) - 1n\nexport const maxInt224 = 2n ** (224n - 1n) - 1n\nexport const maxInt232 = 2n ** (232n - 1n) - 1n\nexport const maxInt240 = 2n ** (240n - 1n) - 1n\nexport const maxInt248 = 2n ** (248n - 1n) - 1n\nexport const maxInt256 = 2n ** (256n - 1n) - 1n\n\nexport const minInt8 = -(2n ** (8n - 1n))\nexport const minInt16 = -(2n ** (16n - 1n))\nexport const minInt24 = -(2n ** (24n - 1n))\nexport const minInt32 = -(2n ** (32n - 1n))\nexport const minInt40 = -(2n ** (40n - 1n))\nexport const minInt48 = -(2n ** (48n - 1n))\nexport const minInt56 = -(2n ** (56n - 1n))\nexport const minInt64 = -(2n ** (64n - 1n))\nexport const minInt72 = -(2n ** (72n - 1n))\nexport const minInt80 = -(2n ** (80n - 1n))\nexport const minInt88 = -(2n ** (88n - 1n))\nexport const minInt96 = -(2n ** (96n - 1n))\nexport const minInt104 = -(2n ** (104n - 1n))\nexport const minInt112 = -(2n ** (112n - 1n))\nexport const minInt120 = -(2n ** (120n - 1n))\nexport const minInt128 = -(2n ** (128n - 1n))\nexport const minInt136 = -(2n ** (136n - 1n))\nexport const minInt144 = -(2n ** (144n - 1n))\nexport const minInt152 = -(2n ** (152n - 1n))\nexport const minInt160 = -(2n ** (160n - 1n))\nexport const minInt168 = -(2n ** (168n - 1n))\nexport const minInt176 = -(2n ** (176n - 1n))\nexport const minInt184 = -(2n ** (184n - 1n))\nexport const minInt192 = -(2n ** (192n - 1n))\nexport const minInt200 = -(2n ** (200n - 1n))\nexport const minInt208 = -(2n ** (208n - 1n))\nexport const minInt216 = -(2n ** (216n - 1n))\nexport const minInt224 = -(2n ** (224n - 1n))\nexport const minInt232 = -(2n ** (232n - 1n))\nexport const minInt240 = -(2n ** (240n - 1n))\nexport const minInt248 = -(2n ** (248n - 1n))\nexport const minInt256 = -(2n ** (256n - 1n))\n\nexport const maxUint8 = 2n ** 8n - 1n\nexport const maxUint16 = 2n ** 16n - 1n\nexport const maxUint24 = 2n ** 24n - 1n\nexport const maxUint32 = 2n ** 32n - 1n\nexport const maxUint40 = 2n ** 40n - 1n\nexport const maxUint48 = 2n ** 48n - 1n\nexport const maxUint56 = 2n ** 56n - 1n\nexport const maxUint64 = 2n ** 64n - 1n\nexport const maxUint72 = 2n ** 72n - 1n\nexport const maxUint80 = 2n ** 80n - 1n\nexport const maxUint88 = 2n ** 88n - 1n\nexport const maxUint96 = 2n ** 96n - 1n\nexport const maxUint104 = 2n ** 104n - 1n\nexport const maxUint112 = 2n ** 112n - 1n\nexport const maxUint120 = 2n ** 120n - 1n\nexport const maxUint128 = 2n ** 128n - 1n\nexport const maxUint136 = 2n ** 136n - 1n\nexport const maxUint144 = 2n ** 144n - 1n\nexport const maxUint152 = 2n ** 152n - 1n\nexport const maxUint160 = 2n ** 160n - 1n\nexport const maxUint168 = 2n ** 168n - 1n\nexport const maxUint176 = 2n ** 176n - 1n\nexport const maxUint184 = 2n ** 184n - 1n\nexport const maxUint192 = 2n ** 192n - 1n\nexport const maxUint200 = 2n ** 200n - 1n\nexport const maxUint208 = 2n ** 208n - 1n\nexport const maxUint216 = 2n ** 216n - 1n\nexport const maxUint224 = 2n ** 224n - 1n\nexport const maxUint232 = 2n ** 232n - 1n\nexport const maxUint240 = 2n ** 240n - 1n\nexport const maxUint248 = 2n ** 248n - 1n\nexport const maxUint256 = 2n ** 256n - 1n\n", "import {\n type ParseAccountErrorType,\n parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport type { SendTransactionParameters } from '../../actions/wallet/sendTransaction.js'\nimport { maxUint256 } from '../../constants/number.js'\nimport {\n InvalidAddressError,\n type InvalidAddressErrorType,\n} from '../../errors/address.js'\nimport {\n FeeCapTooHighError,\n type FeeCapTooHighErrorType,\n TipAboveFeeCapError,\n type TipAboveFeeCapErrorType,\n} from '../../errors/node.js'\nimport type { FeeConflictErrorType } from '../../errors/transaction.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { ExactPartial } from '../../types/utils.js'\nimport { isAddress } from '../address/isAddress.js'\n\nexport type AssertRequestParameters = ExactPartial<\n SendTransactionParameters\n>\n\nexport type AssertRequestErrorType =\n | InvalidAddressErrorType\n | FeeConflictErrorType\n | FeeCapTooHighErrorType\n | ParseAccountErrorType\n | TipAboveFeeCapErrorType\n | ErrorType\n\nexport function assertRequest(args: AssertRequestParameters) {\n const { account: account_, maxFeePerGas, maxPriorityFeePerGas, to } = args\n const account = account_ ? parseAccount(account_) : undefined\n if (account && !isAddress(account.address))\n throw new InvalidAddressError({ address: account.address })\n if (to && !isAddress(to)) throw new InvalidAddressError({ address: to })\n\n if (maxFeePerGas && maxFeePerGas > maxUint256)\n throw new FeeCapTooHighError({ maxFeePerGas })\n if (\n maxPriorityFeePerGas &&\n maxFeePerGas &&\n maxPriorityFeePerGas > maxFeePerGas\n )\n throw new TipAboveFeeCapError({ maxFeePerGas, maxPriorityFeePerGas })\n}\n", "import type { Address } from 'abitype'\n\nimport {\n InvalidAddressError,\n type InvalidAddressErrorType,\n} from '../../errors/address.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport { isAddress } from './isAddress.js'\n\nexport type IsAddressEqualReturnType = boolean\nexport type IsAddressEqualErrorType = InvalidAddressErrorType | ErrorType\n\nexport function isAddressEqual(a: Address, b: Address) {\n if (!isAddress(a, { strict: false }))\n throw new InvalidAddressError({ address: a })\n if (!isAddress(b, { strict: false }))\n throw new InvalidAddressError({ address: b })\n return a.toLowerCase() === b.toLowerCase()\n}\n", "import type { Abi, AbiStateMutability, ExtractAbiFunctions } from 'abitype'\n\nimport {\n AbiFunctionNotFoundError,\n type AbiFunctionNotFoundErrorType,\n AbiFunctionOutputsNotFoundError,\n type AbiFunctionOutputsNotFoundErrorType,\n} from '../../errors/abi.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n ContractFunctionArgs,\n ContractFunctionName,\n ContractFunctionReturnType,\n Widen,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { IsNarrowable, UnionEvaluate } from '../../types/utils.js'\nimport {\n type DecodeAbiParametersErrorType,\n decodeAbiParameters,\n} from './decodeAbiParameters.js'\nimport { type GetAbiItemErrorType, getAbiItem } from './getAbiItem.js'\n\nconst docsPath = '/docs/contract/decodeFunctionResult'\n\nexport type DecodeFunctionResultParameters<\n abi extends Abi | readonly unknown[] = Abi,\n functionName extends\n | ContractFunctionName\n | undefined = ContractFunctionName,\n args extends ContractFunctionArgs<\n abi,\n AbiStateMutability,\n functionName extends ContractFunctionName\n ? functionName\n : ContractFunctionName\n > = ContractFunctionArgs<\n abi,\n AbiStateMutability,\n functionName extends ContractFunctionName\n ? functionName\n : ContractFunctionName\n >,\n ///\n hasFunctions = abi extends Abi\n ? Abi extends abi\n ? true\n : [ExtractAbiFunctions] extends [never]\n ? false\n : true\n : true,\n allArgs = ContractFunctionArgs<\n abi,\n AbiStateMutability,\n functionName extends ContractFunctionName\n ? functionName\n : ContractFunctionName\n >,\n allFunctionNames = ContractFunctionName,\n> = {\n abi: abi\n data: Hex\n} & UnionEvaluate<\n IsNarrowable extends true\n ? abi['length'] extends 1\n ? { functionName?: functionName | allFunctionNames | undefined }\n : { functionName: functionName | allFunctionNames }\n : { functionName?: functionName | allFunctionNames | undefined }\n> &\n UnionEvaluate<\n readonly [] extends allArgs\n ? {\n args?:\n | allArgs // show all options\n // infer value, widen inferred value of `args` conditionally to match `allArgs`\n | (abi extends Abi\n ? args extends allArgs\n ? Widen\n : never\n : never)\n | undefined\n }\n : {\n args?:\n | allArgs // show all options\n | (Widen & (args extends allArgs ? unknown : never)) // infer value, widen inferred value of `args` match `allArgs` (e.g. avoid union `args: readonly [123n] | readonly [bigint]`)\n | undefined\n }\n > &\n (hasFunctions extends true ? unknown : never)\n\nexport type DecodeFunctionResultReturnType<\n abi extends Abi | readonly unknown[] = Abi,\n functionName extends\n | ContractFunctionName\n | undefined = ContractFunctionName,\n args extends ContractFunctionArgs<\n abi,\n AbiStateMutability,\n functionName extends ContractFunctionName\n ? functionName\n : ContractFunctionName\n > = ContractFunctionArgs<\n abi,\n AbiStateMutability,\n functionName extends ContractFunctionName\n ? functionName\n : ContractFunctionName\n >,\n> = ContractFunctionReturnType<\n abi,\n AbiStateMutability,\n functionName extends ContractFunctionName\n ? functionName\n : ContractFunctionName,\n args\n>\n\nexport type DecodeFunctionResultErrorType =\n | AbiFunctionNotFoundErrorType\n | AbiFunctionOutputsNotFoundErrorType\n | DecodeAbiParametersErrorType\n | GetAbiItemErrorType\n | ErrorType\n\nexport function decodeFunctionResult<\n const abi extends Abi | readonly unknown[],\n functionName extends ContractFunctionName | undefined = undefined,\n const args extends ContractFunctionArgs<\n abi,\n AbiStateMutability,\n functionName extends ContractFunctionName\n ? functionName\n : ContractFunctionName\n > = ContractFunctionArgs<\n abi,\n AbiStateMutability,\n functionName extends ContractFunctionName\n ? functionName\n : ContractFunctionName\n >,\n>(\n parameters: DecodeFunctionResultParameters,\n): DecodeFunctionResultReturnType {\n const { abi, args, functionName, data } =\n parameters as DecodeFunctionResultParameters\n\n let abiItem = abi[0]\n if (functionName) {\n const item = getAbiItem({ abi, args, name: functionName })\n if (!item) throw new AbiFunctionNotFoundError(functionName, { docsPath })\n abiItem = item\n }\n\n if (abiItem.type !== 'function')\n throw new AbiFunctionNotFoundError(undefined, { docsPath })\n if (!abiItem.outputs)\n throw new AbiFunctionOutputsNotFoundError(abiItem.name, { docsPath })\n\n const values = decodeAbiParameters(abiItem.outputs, data)\n if (values && values.length > 1)\n return values as DecodeFunctionResultReturnType\n if (values && values.length === 1)\n return values[0] as DecodeFunctionResultReturnType\n return undefined as DecodeFunctionResultReturnType\n}\n", "/**\n * Hex, bytes and number utilities.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\n// 100 lines of code in the file are duplicated from noble-hashes (utils).\n// This is OK: `abstract` directory does not use noble-hashes.\n// User may opt-in into using different hashing library. This way, noble-hashes\n// won't be included into their bundle.\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nexport type Hex = Uint8Array | string; // hex strings are accepted for simplicity\nexport type PrivKey = Hex | bigint; // bigints are accepted to ease learning curve\nexport type CHash = {\n (message: Uint8Array | string): Uint8Array;\n blockLen: number;\n outputLen: number;\n create(opts?: { dkLen?: number }): any; // For shake\n};\nexport type FHash = (message: Uint8Array | string) => Uint8Array;\n\nexport function isBytes(a: unknown): a is Uint8Array {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n\nexport function abytes(item: unknown): void {\n if (!isBytes(item)) throw new Error('Uint8Array expected');\n}\n\nexport function abool(title: string, value: boolean): void {\n if (typeof value !== 'boolean') throw new Error(title + ' boolean expected, got ' + value);\n}\n\n// Used in weierstrass, der\nexport function numberToHexUnpadded(num: number | bigint): string {\n const hex = num.toString(16);\n return hex.length & 1 ? '0' + hex : hex;\n}\n\nexport function hexToNumber(hex: string): bigint {\n if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n return hex === '' ? _0n : BigInt('0x' + hex); // Big Endian\n}\n\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin: boolean =\n // @ts-ignore\n typeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function';\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n i.toString(16).padStart(2, '0')\n);\n\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin) return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 } as const;\nfunction asciiToBase16(ch: number): number | undefined {\n if (ch >= asciis._0 && ch <= asciis._9) return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F) return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f) return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin) return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2) throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n\n// BE: Big Endian, LE: Little Endian\nexport function bytesToNumberBE(bytes: Uint8Array): bigint {\n return hexToNumber(bytesToHex(bytes));\n}\nexport function bytesToNumberLE(bytes: Uint8Array): bigint {\n abytes(bytes);\n return hexToNumber(bytesToHex(Uint8Array.from(bytes).reverse()));\n}\n\nexport function numberToBytesBE(n: number | bigint, len: number): Uint8Array {\n return hexToBytes(n.toString(16).padStart(len * 2, '0'));\n}\nexport function numberToBytesLE(n: number | bigint, len: number): Uint8Array {\n return numberToBytesBE(n, len).reverse();\n}\n// Unpadded, rarely used\nexport function numberToVarBytesBE(n: number | bigint): Uint8Array {\n return hexToBytes(numberToHexUnpadded(n));\n}\n\n/**\n * Takes hex string or Uint8Array, converts to Uint8Array.\n * Validates output length.\n * Will throw error for other types.\n * @param title descriptive title for an error e.g. 'private key'\n * @param hex hex string or Uint8Array\n * @param expectedLength optional, will compare to result array's length\n * @returns\n */\nexport function ensureBytes(title: string, hex: Hex, expectedLength?: number): Uint8Array {\n let res: Uint8Array;\n if (typeof hex === 'string') {\n try {\n res = hexToBytes(hex);\n } catch (e) {\n throw new Error(title + ' must be hex string or Uint8Array, cause: ' + e);\n }\n } else if (isBytes(hex)) {\n // Uint8Array.from() instead of hash.slice() because node.js Buffer\n // is instance of Uint8Array, and its slice() creates **mutable** copy\n res = Uint8Array.from(hex);\n } else {\n throw new Error(title + ' must be hex string or Uint8Array');\n }\n const len = res.length;\n if (typeof expectedLength === 'number' && len !== expectedLength)\n throw new Error(title + ' of length ' + expectedLength + ' expected, got ' + len);\n return res;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\n\n// Compares 2 u8a-s in kinda constant time\nexport function equalBytes(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false;\n let diff = 0;\n for (let i = 0; i < a.length; i++) diff |= a[i] ^ b[i];\n return diff === 0;\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n if (typeof str !== 'string') throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n// Is positive bigint\nconst isPosBig = (n: bigint) => typeof n === 'bigint' && _0n <= n;\n\nexport function inRange(n: bigint, min: bigint, max: bigint): boolean {\n return isPosBig(n) && isPosBig(min) && isPosBig(max) && min <= n && n < max;\n}\n\n/**\n * Asserts min <= n < max. NOTE: It's < max and not <= max.\n * @example\n * aInRange('x', x, 1n, 256n); // would assume x is in (1n..255n)\n */\nexport function aInRange(title: string, n: bigint, min: bigint, max: bigint): void {\n // Why min <= n < max and not a (min < n < max) OR b (min <= n <= max)?\n // consider P=256n, min=0n, max=P\n // - a for min=0 would require -1: `inRange('x', x, -1n, P)`\n // - b would commonly require subtraction: `inRange('x', x, 0n, P - 1n)`\n // - our way is the cleanest: `inRange('x', x, 0n, P)\n if (!inRange(n, min, max))\n throw new Error('expected valid ' + title + ': ' + min + ' <= n < ' + max + ', got ' + n);\n}\n\n// Bit operations\n\n/**\n * Calculates amount of bits in a bigint.\n * Same as `n.toString(2).length`\n * TODO: merge with nLength in modular\n */\nexport function bitLen(n: bigint): number {\n let len;\n for (len = 0; n > _0n; n >>= _1n, len += 1);\n return len;\n}\n\n/**\n * Gets single bit at position.\n * NOTE: first bit position is 0 (same as arrays)\n * Same as `!!+Array.from(n.toString(2)).reverse()[pos]`\n */\nexport function bitGet(n: bigint, pos: number): bigint {\n return (n >> BigInt(pos)) & _1n;\n}\n\n/**\n * Sets single bit at position.\n */\nexport function bitSet(n: bigint, pos: number, value: boolean): bigint {\n return n | ((value ? _1n : _0n) << BigInt(pos));\n}\n\n/**\n * Calculate mask for N bits. Not using ** operator with bigints because of old engines.\n * Same as BigInt(`0b${Array(i).fill('1').join('')}`)\n */\nexport const bitMask = (n: number): bigint => (_1n << BigInt(n)) - _1n;\n\n// DRBG\n\nconst u8n = (len: number) => new Uint8Array(len); // creates Uint8Array\nconst u8fr = (arr: ArrayLike) => Uint8Array.from(arr); // another shortcut\ntype Pred = (v: Uint8Array) => T | undefined;\n/**\n * Minimal HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n * @returns function that will call DRBG until 2nd arg returns something meaningful\n * @example\n * const drbg = createHmacDRBG(32, 32, hmac);\n * drbg(seed, bytesToKey); // bytesToKey must return Key or undefined\n */\nexport function createHmacDrbg(\n hashLen: number,\n qByteLen: number,\n hmacFn: (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array\n): (seed: Uint8Array, predicate: Pred) => T {\n if (typeof hashLen !== 'number' || hashLen < 2) throw new Error('hashLen must be a number');\n if (typeof qByteLen !== 'number' || qByteLen < 2) throw new Error('qByteLen must be a number');\n if (typeof hmacFn !== 'function') throw new Error('hmacFn must be a function');\n // Step B, Step C: set hashLen to 8*ceil(hlen/8)\n let v = u8n(hashLen); // Minimal non-full-spec HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n let k = u8n(hashLen); // Steps B and C of RFC6979 3.2: set hashLen, in our case always same\n let i = 0; // Iterations counter, will throw when over 1000\n const reset = () => {\n v.fill(1);\n k.fill(0);\n i = 0;\n };\n const h = (...b: Uint8Array[]) => hmacFn(k, v, ...b); // hmac(k)(v, ...values)\n const reseed = (seed = u8n(0)) => {\n // HMAC-DRBG reseed() function. Steps D-G\n k = h(u8fr([0x00]), seed); // k = hmac(k || v || 0x00 || seed)\n v = h(); // v = hmac(k || v)\n if (seed.length === 0) return;\n k = h(u8fr([0x01]), seed); // k = hmac(k || v || 0x01 || seed)\n v = h(); // v = hmac(k || v)\n };\n const gen = () => {\n // HMAC-DRBG generate() function\n if (i++ >= 1000) throw new Error('drbg: tried 1000 values');\n let len = 0;\n const out: Uint8Array[] = [];\n while (len < qByteLen) {\n v = h();\n const sl = v.slice();\n out.push(sl);\n len += v.length;\n }\n return concatBytes(...out);\n };\n const genUntil = (seed: Uint8Array, pred: Pred): T => {\n reset();\n reseed(seed); // Steps D-G\n let res: T | undefined = undefined; // Step H: grind until k is in [1..n-1]\n while (!(res = pred(gen()))) reseed();\n reset();\n return res;\n };\n return genUntil;\n}\n\n// Validating curves and fields\n\nconst validatorFns = {\n bigint: (val: any): boolean => typeof val === 'bigint',\n function: (val: any): boolean => typeof val === 'function',\n boolean: (val: any): boolean => typeof val === 'boolean',\n string: (val: any): boolean => typeof val === 'string',\n stringOrUint8Array: (val: any): boolean => typeof val === 'string' || isBytes(val),\n isSafeInteger: (val: any): boolean => Number.isSafeInteger(val),\n array: (val: any): boolean => Array.isArray(val),\n field: (val: any, object: any): any => (object as any).Fp.isValid(val),\n hash: (val: any): boolean => typeof val === 'function' && Number.isSafeInteger(val.outputLen),\n} as const;\ntype Validator = keyof typeof validatorFns;\ntype ValMap> = { [K in keyof T]?: Validator };\n// type Record = { [P in K]: T; }\n\nexport function validateObject>(\n object: T,\n validators: ValMap,\n optValidators: ValMap = {}\n): T {\n const checkField = (fieldName: keyof T, type: Validator, isOptional: boolean) => {\n const checkVal = validatorFns[type];\n if (typeof checkVal !== 'function') throw new Error('invalid validator function');\n\n const val = object[fieldName as keyof typeof object];\n if (isOptional && val === undefined) return;\n if (!checkVal(val, object)) {\n throw new Error(\n 'param ' + String(fieldName) + ' is invalid. Expected ' + type + ', got ' + val\n );\n }\n };\n for (const [fieldName, type] of Object.entries(validators)) checkField(fieldName, type!, false);\n for (const [fieldName, type] of Object.entries(optValidators)) checkField(fieldName, type!, true);\n return object;\n}\n// validate type tests\n// const o: { a: number; b: number; c: number } = { a: 1, b: 5, c: 6 };\n// const z0 = validateObject(o, { a: 'isSafeInteger' }, { c: 'bigint' }); // Ok!\n// // Should fail type-check\n// const z1 = validateObject(o, { a: 'tmp' }, { c: 'zz' });\n// const z2 = validateObject(o, { a: 'isSafeInteger' }, { c: 'zz' });\n// const z3 = validateObject(o, { test: 'boolean', z: 'bug' });\n// const z4 = validateObject(o, { a: 'boolean', z: 'bug' });\n\n/**\n * throws not implemented error\n */\nexport const notImplemented = (): never => {\n throw new Error('not implemented');\n};\n\n/**\n * Memoizes (caches) computation result.\n * Uses WeakMap: the value is going auto-cleaned by GC after last reference is removed.\n */\nexport function memoized(\n fn: (arg: T, ...args: O) => R\n): (arg: T, ...args: O) => R {\n const map = new WeakMap();\n return (arg: T, ...args: O): R => {\n const val = map.get(arg);\n if (val !== undefined) return val;\n const computed = fn(arg, ...args);\n map.set(arg, computed);\n return computed;\n };\n}\n", "/** @internal */\nexport const version = '0.1.1'\n", "import { version } from '../version.js'\n\n/** @internal */\nexport function getUrl(url: string) {\n return url\n}\n\n/** @internal */\nexport function getVersion() {\n return version\n}\n\n/** @internal */\nexport function prettyPrint(args: unknown) {\n if (!args) return ''\n const entries = Object.entries(args)\n .map(([key, value]) => {\n if (value === undefined || value === false) return null\n return [key, value]\n })\n .filter(Boolean) as [string, string][]\n const maxLength = entries.reduce((acc, [key]) => Math.max(acc, key.length), 0)\n return entries\n .map(([key, value]) => ` ${`${key}:`.padEnd(maxLength + 1)} ${value}`)\n .join('\\n')\n}\n", "import { getVersion } from './internal/errors.js'\n\nexport type GlobalErrorType = Error & {\n name: name\n}\n\n/**\n * Base error class inherited by all errors thrown by ox.\n *\n * @example\n * ```ts\n * import { Errors } from 'ox'\n * throw new Errors.BaseError('An error occurred')\n * ```\n */\nexport class BaseError<\n cause extends Error | undefined = undefined,\n> extends Error {\n details: string\n docs?: string | undefined\n docsOrigin?: string | undefined\n docsPath?: string | undefined\n shortMessage: string\n showVersion?: boolean | undefined\n version?: string | undefined\n\n override cause: cause\n override name = 'BaseError'\n\n static defaultStaticOptions = {\n docsOrigin: 'https://oxlib.sh',\n showVersion: false,\n version: `ox@${getVersion()}`,\n } satisfies BaseError.GlobalOptions\n\n static setStaticOptions(options: BaseError.GlobalOptions) {\n BaseError.prototype.docsOrigin = options.docsOrigin\n BaseError.prototype.showVersion = options.showVersion\n BaseError.prototype.version = options.version\n }\n\n static {\n BaseError.setStaticOptions(BaseError.defaultStaticOptions)\n }\n\n constructor(shortMessage: string, options: BaseError.Options = {}) {\n const details = (() => {\n if (options.cause instanceof BaseError) {\n if (options.cause.details) return options.cause.details\n if (options.cause.shortMessage) return options.cause.shortMessage\n }\n if (\n options.cause &&\n 'details' in options.cause &&\n typeof options.cause.details === 'string'\n )\n return options.cause.details\n if (options.cause?.message) return options.cause.message\n return options.details!\n })()\n const docsPath = (() => {\n if (options.cause instanceof BaseError)\n return options.cause.docsPath || options.docsPath\n return options.docsPath\n })()\n\n const docsBaseUrl = options.docsOrigin ?? BaseError.prototype.docsOrigin\n const docs = `${docsBaseUrl}${docsPath ?? ''}`\n const showVersion = Boolean(\n options.version ?? BaseError.prototype.showVersion,\n )\n const version = options.version ?? BaseError.prototype.version\n\n const message = [\n shortMessage || 'An error occurred.',\n ...(options.metaMessages ? ['', ...options.metaMessages] : []),\n ...(details || docsPath || showVersion\n ? [\n '',\n details ? `Details: ${details}` : undefined,\n docsPath ? `See: ${docs}` : undefined,\n showVersion ? `Version: ${version}` : undefined,\n ]\n : []),\n ]\n .filter((x) => typeof x === 'string')\n .join('\\n')\n\n super(message, options.cause ? { cause: options.cause } : undefined)\n\n this.cause = options.cause as any\n this.details = details\n this.docs = docs\n this.docsOrigin = docsBaseUrl\n this.docsPath = docsPath\n this.shortMessage = shortMessage\n this.showVersion = showVersion\n this.version = version\n }\n\n walk(): Error\n walk(fn: (err: unknown) => boolean): Error | null\n walk(fn?: any): any {\n return walk(this, fn)\n }\n}\n\nexport declare namespace BaseError {\n type Options = {\n /** Cause of the error. */\n cause?: cause | undefined\n /** Details of the error. */\n details?: string | undefined\n /** Origin of the docs. */\n docsOrigin?: string | undefined\n /** Path of the docs. */\n docsPath?: string | undefined\n /** Meta messages to add to the error. */\n metaMessages?: (string | undefined)[] | undefined\n /** Version of the library to attribute the error to. */\n version?: string | undefined\n }\n\n type GlobalOptions = {\n /** Origin of the docs. */\n docsOrigin?: string | undefined\n /** Whether to show the version of the library in the error message. */\n showVersion?: boolean | undefined\n /** Version of the library to attribute the error to. */\n version?: string | undefined\n }\n}\n\n/** @internal */\nfunction walk(\n err: unknown,\n fn?: ((err: unknown) => boolean) | undefined,\n): unknown {\n if (fn?.(err)) return err\n if (err && typeof err === 'object' && 'cause' in err && err.cause)\n return walk(err.cause, fn)\n return fn ? null : err\n}\n", "import * as Bytes from '../Bytes.js'\nimport type * as Errors from '../Errors.js'\n\n/** @internal */\nexport function assertSize(bytes: Bytes.Bytes, size_: number): void {\n if (Bytes.size(bytes) > size_)\n throw new Bytes.SizeOverflowError({\n givenSize: Bytes.size(bytes),\n maxSize: size_,\n })\n}\n\n/** @internal */\nexport declare namespace assertSize {\n type ErrorType =\n | Bytes.size.ErrorType\n | Bytes.SizeOverflowError\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function assertStartOffset(\n value: Bytes.Bytes,\n start?: number | undefined,\n) {\n if (typeof start === 'number' && start > 0 && start > Bytes.size(value) - 1)\n throw new Bytes.SliceOffsetOutOfBoundsError({\n offset: start,\n position: 'start',\n size: Bytes.size(value),\n })\n}\n\nexport declare namespace assertStartOffset {\n export type ErrorType =\n | Bytes.SliceOffsetOutOfBoundsError\n | Bytes.size.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function assertEndOffset(\n value: Bytes.Bytes,\n start?: number | undefined,\n end?: number | undefined,\n) {\n if (\n typeof start === 'number' &&\n typeof end === 'number' &&\n Bytes.size(value) !== end - start\n ) {\n throw new Bytes.SliceOffsetOutOfBoundsError({\n offset: end,\n position: 'end',\n size: Bytes.size(value),\n })\n }\n}\n\n/** @internal */\nexport declare namespace assertEndOffset {\n type ErrorType =\n | Bytes.SliceOffsetOutOfBoundsError\n | Bytes.size.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport const charCodeMap = {\n zero: 48,\n nine: 57,\n A: 65,\n F: 70,\n a: 97,\n f: 102,\n} as const\n\n/** @internal */\nexport function charCodeToBase16(char: number) {\n if (char >= charCodeMap.zero && char <= charCodeMap.nine)\n return char - charCodeMap.zero\n if (char >= charCodeMap.A && char <= charCodeMap.F)\n return char - (charCodeMap.A - 10)\n if (char >= charCodeMap.a && char <= charCodeMap.f)\n return char - (charCodeMap.a - 10)\n return undefined\n}\n\n/** @internal */\nexport function pad(bytes: Bytes.Bytes, options: pad.Options = {}) {\n const { dir, size = 32 } = options\n if (size === 0) return bytes\n if (bytes.length > size)\n throw new Bytes.SizeExceedsPaddingSizeError({\n size: bytes.length,\n targetSize: size,\n type: 'Bytes',\n })\n const paddedBytes = new Uint8Array(size)\n for (let i = 0; i < size; i++) {\n const padEnd = dir === 'right'\n paddedBytes[padEnd ? i : size - i - 1] =\n bytes[padEnd ? i : bytes.length - i - 1]!\n }\n return paddedBytes\n}\n\n/** @internal */\nexport declare namespace pad {\n type Options = {\n dir?: 'left' | 'right' | undefined\n size?: number | undefined\n }\n\n type ReturnType = Bytes.Bytes\n\n type ErrorType = Bytes.SizeExceedsPaddingSizeError | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function trim(\n value: Bytes.Bytes,\n options: trim.Options = {},\n): trim.ReturnType {\n const { dir = 'left' } = options\n\n let data = value\n\n let sliceLength = 0\n for (let i = 0; i < data.length - 1; i++) {\n if (data[dir === 'left' ? i : data.length - i - 1]!.toString() === '0')\n sliceLength++\n else break\n }\n data =\n dir === 'left'\n ? data.slice(sliceLength)\n : data.slice(0, data.length - sliceLength)\n\n return data as trim.ReturnType\n}\n\n/** @internal */\nexport declare namespace trim {\n type Options = {\n dir?: 'left' | 'right' | undefined\n }\n\n type ReturnType = Bytes.Bytes\n\n type ErrorType = Errors.GlobalErrorType\n}\n", "import type * as Errors from '../Errors.js'\nimport * as Hex from '../Hex.js'\n\n/** @internal */\nexport function assertSize(hex: Hex.Hex, size_: number): void {\n if (Hex.size(hex) > size_)\n throw new Hex.SizeOverflowError({\n givenSize: Hex.size(hex),\n maxSize: size_,\n })\n}\n\n/** @internal */\nexport declare namespace assertSize {\n type ErrorType =\n | Hex.size.ErrorType\n | Hex.SizeOverflowError\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function assertStartOffset(value: Hex.Hex, start?: number | undefined) {\n if (typeof start === 'number' && start > 0 && start > Hex.size(value) - 1)\n throw new Hex.SliceOffsetOutOfBoundsError({\n offset: start,\n position: 'start',\n size: Hex.size(value),\n })\n}\n\nexport declare namespace assertStartOffset {\n type ErrorType =\n | Hex.SliceOffsetOutOfBoundsError\n | Hex.size.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function assertEndOffset(\n value: Hex.Hex,\n start?: number | undefined,\n end?: number | undefined,\n) {\n if (\n typeof start === 'number' &&\n typeof end === 'number' &&\n Hex.size(value) !== end - start\n ) {\n throw new Hex.SliceOffsetOutOfBoundsError({\n offset: end,\n position: 'end',\n size: Hex.size(value),\n })\n }\n}\n\nexport declare namespace assertEndOffset {\n type ErrorType =\n | Hex.SliceOffsetOutOfBoundsError\n | Hex.size.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function pad(hex_: Hex.Hex, options: pad.Options = {}) {\n const { dir, size = 32 } = options\n\n if (size === 0) return hex_\n\n const hex = hex_.replace('0x', '')\n if (hex.length > size * 2)\n throw new Hex.SizeExceedsPaddingSizeError({\n size: Math.ceil(hex.length / 2),\n targetSize: size,\n type: 'Hex',\n })\n\n return `0x${hex[dir === 'right' ? 'padEnd' : 'padStart'](size * 2, '0')}` as Hex.Hex\n}\n\n/** @internal */\nexport declare namespace pad {\n type Options = {\n dir?: 'left' | 'right' | undefined\n size?: number | undefined\n }\n type ErrorType = Hex.SizeExceedsPaddingSizeError | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function trim(\n value: Hex.Hex,\n options: trim.Options = {},\n): trim.ReturnType {\n const { dir = 'left' } = options\n\n let data = value.replace('0x', '')\n\n let sliceLength = 0\n for (let i = 0; i < data.length - 1; i++) {\n if (data[dir === 'left' ? i : data.length - i - 1]!.toString() === '0')\n sliceLength++\n else break\n }\n data =\n dir === 'left'\n ? data.slice(sliceLength)\n : data.slice(0, data.length - sliceLength)\n\n if (data === '0') return '0x'\n if (dir === 'right' && data.length % 2 === 1) return `0x${data}0`\n return `0x${data}` as trim.ReturnType\n}\n\n/** @internal */\nexport declare namespace trim {\n type Options = {\n dir?: 'left' | 'right' | undefined\n }\n\n type ReturnType = Hex.Hex\n\n type ErrorType = Errors.GlobalErrorType\n}\n", "import type * as Errors from './Errors.js'\n\nconst bigIntSuffix = '#__bigint'\n\n/**\n * Serializes a value to a canonical JSON string as defined by\n * [RFC 8785 (JSON Canonicalization Scheme)](https://www.rfc-editor.org/rfc/rfc8785).\n *\n * - Object keys are sorted recursively by UTF-16 code unit comparison.\n * - Primitives are serialized per ECMAScript rules (no trailing zeros on numbers, etc.).\n * - No whitespace is inserted.\n *\n * @example\n * ```ts twoslash\n * import { Json } from 'ox'\n *\n * const json = Json.canonicalize({ b: 2, a: 1 })\n * // @log: '{\"a\":1,\"b\":2}'\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Json } from 'ox'\n *\n * const json = Json.canonicalize({ z: [3, { y: 1, x: 2 }], a: 'hello' })\n * // @log: '{\"a\":\"hello\",\"z\":[3,{\"x\":2,\"y\":1}]}'\n * ```\n *\n * @param value - The value to canonicalize.\n * @returns The canonical JSON string.\n */\nexport function canonicalize(value: unknown): string {\n if (value === null || typeof value === 'boolean' || typeof value === 'string')\n return JSON.stringify(value)\n if (typeof value === 'number') {\n if (!Number.isFinite(value))\n throw new TypeError('Cannot canonicalize non-finite number')\n return Object.is(value, -0) ? '0' : JSON.stringify(value)\n }\n if (typeof value === 'bigint')\n throw new TypeError('Cannot canonicalize bigint')\n if (Array.isArray(value))\n return `[${value.map((item) => canonicalize(item)).join(',')}]`\n if (typeof value === 'object') {\n const entries = Object.keys(value as Record)\n .sort()\n .reduce((acc, key) => {\n const v = (value as Record)[key]\n if (v !== undefined)\n acc.push(`${JSON.stringify(key)}:${canonicalize(v)}`)\n return acc\n }, [])\n return `{${entries.join(',')}}`\n }\n return undefined as never\n}\n\nexport declare namespace canonicalize {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Parses a JSON string, with support for `bigint`.\n *\n * @example\n * ```ts twoslash\n * import { Json } from 'ox'\n *\n * const json = Json.parse('{\"foo\":\"bar\",\"baz\":\"69420694206942069420694206942069420694206942069420#__bigint\"}')\n * // @log: {\n * // @log: foo: 'bar',\n * // @log: baz: 69420694206942069420694206942069420694206942069420n\n * // @log: }\n * ```\n *\n * @param string - The value to parse.\n * @param reviver - A function that transforms the results.\n * @returns The parsed value.\n */\nexport function parse(\n string: string,\n reviver?: ((this: any, key: string, value: any) => any) | undefined,\n) {\n return JSON.parse(string, (key, value_) => {\n const value = value_\n if (typeof value === 'string' && value.endsWith(bigIntSuffix))\n return BigInt(value.slice(0, -bigIntSuffix.length))\n return typeof reviver === 'function' ? reviver(key, value) : value\n })\n}\n\nexport declare namespace parse {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Stringifies a value to its JSON representation, with support for `bigint`.\n *\n * @example\n * ```ts twoslash\n * import { Json } from 'ox'\n *\n * const json = Json.stringify({\n * foo: 'bar',\n * baz: 69420694206942069420694206942069420694206942069420n,\n * })\n * // @log: '{\"foo\":\"bar\",\"baz\":\"69420694206942069420694206942069420694206942069420#__bigint\"}'\n * ```\n *\n * @param value - The value to stringify.\n * @param replacer - A function that transforms the results. It is passed the key and value of the property, and must return the value to be used in the JSON string. If this function returns `undefined`, the property is not included in the resulting JSON string.\n * @param space - A string or number that determines the indentation of the JSON string. If it is a number, it indicates the number of spaces to use as indentation; if it is a string (e.g. `'\\t'`), it uses the string as the indentation character.\n * @returns The JSON string.\n */\nexport function stringify(\n value: any,\n replacer?: ((this: any, key: string, value: any) => any) | null | undefined,\n space?: string | number | undefined,\n) {\n return JSON.stringify(\n value,\n (key, value) => {\n if (typeof replacer === 'function') return replacer(key, value)\n if (typeof value === 'bigint') return value.toString() + bigIntSuffix\n return value\n },\n space,\n )\n}\n\nexport declare namespace stringify {\n type ErrorType = Errors.GlobalErrorType\n}\n", "import { equalBytes } from '@noble/curves/abstract/utils'\nimport * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport * as internal from './internal/bytes.js'\nimport * as internal_hex from './internal/hex.js'\nimport * as Json from './Json.js'\n\nconst decoder = /*#__PURE__*/ new TextDecoder()\nconst encoder = /*#__PURE__*/ new TextEncoder()\n\n/** Root type for a Bytes array. */\nexport type Bytes = Uint8Array\n\n/**\n * Asserts if the given value is {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.assert('abc')\n * // @error: Bytes.InvalidBytesTypeError:\n * // @error: Value `\"abc\"` of type `string` is an invalid Bytes value.\n * // @error: Bytes values must be of type `Uint8Array`.\n * ```\n *\n * @param value - Value to assert.\n */\nexport function assert(value: unknown): asserts value is Bytes {\n if (value instanceof Uint8Array) return\n if (!value) throw new InvalidBytesTypeError(value)\n if (typeof value !== 'object') throw new InvalidBytesTypeError(value)\n if (!('BYTES_PER_ELEMENT' in value)) throw new InvalidBytesTypeError(value)\n if (value.BYTES_PER_ELEMENT !== 1 || value.constructor.name !== 'Uint8Array')\n throw new InvalidBytesTypeError(value)\n}\n\nexport declare namespace assert {\n type ErrorType = InvalidBytesTypeError | Errors.GlobalErrorType\n}\n\n/**\n * Concatenates two or more {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const bytes = Bytes.concat(\n * Bytes.from([1]),\n * Bytes.from([69]),\n * Bytes.from([420, 69]),\n * )\n * // @log: Uint8Array [ 1, 69, 420, 69 ]\n * ```\n *\n * @param values - Values to concatenate.\n * @returns Concatenated {@link ox#Bytes.Bytes}.\n */\nexport function concat(...values: readonly Bytes[]): Bytes {\n let length = 0\n for (const arr of values) {\n length += arr.length\n }\n const result = new Uint8Array(length)\n for (let i = 0, index = 0; i < values.length; i++) {\n const arr = values[i]\n result.set(arr!, index)\n index += arr!.length\n }\n return result\n}\n\nexport declare namespace concat {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Instantiates a {@link ox#Bytes.Bytes} value from a `Uint8Array`, a hex string, or an array of unsigned 8-bit integers.\n *\n * :::tip\n *\n * To instantiate from a **Boolean**, **String**, or **Number**, use one of the following:\n *\n * - `Bytes.fromBoolean`\n *\n * - `Bytes.fromString`\n *\n * - `Bytes.fromNumber`\n *\n * :::\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.from([255, 124, 5, 4])\n * // @log: Uint8Array([255, 124, 5, 4])\n *\n * const data = Bytes.from('0xdeadbeef')\n * // @log: Uint8Array([222, 173, 190, 239])\n * ```\n *\n * @param value - Value to convert.\n * @returns A {@link ox#Bytes.Bytes} instance.\n */\nexport function from(value: Hex.Hex | Bytes | readonly number[]): Bytes {\n if (value instanceof Uint8Array) return value\n if (typeof value === 'string') return fromHex(value)\n return fromArray(value)\n}\n\nexport declare namespace from {\n type ErrorType =\n | fromHex.ErrorType\n | fromArray.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Converts an array of unsigned 8-bit integers into {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromArray([255, 124, 5, 4])\n * // @log: Uint8Array([255, 124, 5, 4])\n * ```\n *\n * @param value - Value to convert.\n * @returns A {@link ox#Bytes.Bytes} instance.\n */\nexport function fromArray(value: readonly number[] | Uint8Array): Bytes {\n return value instanceof Uint8Array ? value : new Uint8Array(value)\n}\n\nexport declare namespace fromArray {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Encodes a boolean value into {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromBoolean(true)\n * // @log: Uint8Array([1])\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromBoolean(true, { size: 32 })\n * // @log: Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1])\n * ```\n *\n * @param value - Boolean value to encode.\n * @param options - Encoding options.\n * @returns Encoded {@link ox#Bytes.Bytes}.\n */\nexport function fromBoolean(value: boolean, options: fromBoolean.Options = {}) {\n const { size } = options\n const bytes = new Uint8Array(1)\n bytes[0] = Number(value)\n if (typeof size === 'number') {\n internal.assertSize(bytes, size)\n return padLeft(bytes, size)\n }\n return bytes\n}\n\nexport declare namespace fromBoolean {\n type Options = {\n /** Size of the output bytes. */\n size?: number | undefined\n }\n\n type ErrorType =\n | internal.assertSize.ErrorType\n | padLeft.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a {@link ox#Hex.Hex} value into {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromHex('0x48656c6c6f20776f726c6421')\n * // @log: Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33])\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromHex('0x48656c6c6f20776f726c6421', { size: 32 })\n * // @log: Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])\n * ```\n *\n * @param value - {@link ox#Hex.Hex} value to encode.\n * @param options - Encoding options.\n * @returns Encoded {@link ox#Bytes.Bytes}.\n */\nexport function fromHex(value: Hex.Hex, options: fromHex.Options = {}): Bytes {\n const { size } = options\n\n let hex = value\n if (size) {\n internal_hex.assertSize(value, size)\n hex = Hex.padRight(value, size)\n }\n\n let hexString = hex.slice(2) as string\n if (hexString.length % 2) hexString = `0${hexString}`\n\n const length = hexString.length / 2\n const bytes = new Uint8Array(length)\n for (let index = 0, j = 0; index < length; index++) {\n const nibbleLeft = internal.charCodeToBase16(hexString.charCodeAt(j++))\n const nibbleRight = internal.charCodeToBase16(hexString.charCodeAt(j++))\n if (nibbleLeft === undefined || nibbleRight === undefined) {\n throw new Errors.BaseError(\n `Invalid byte sequence (\"${hexString[j - 2]}${hexString[j - 1]}\" in \"${hexString}\").`,\n )\n }\n bytes[index] = (nibbleLeft << 4) | nibbleRight\n }\n return bytes\n}\n\nexport declare namespace fromHex {\n type Options = {\n /** Size of the output bytes. */\n size?: number | undefined\n }\n\n type ErrorType =\n | internal_hex.assertSize.ErrorType\n | Hex.padRight.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a number value into {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromNumber(420)\n * // @log: Uint8Array([1, 164])\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromNumber(420, { size: 4 })\n * // @log: Uint8Array([0, 0, 1, 164])\n * ```\n *\n * @param value - Number value to encode.\n * @param options - Encoding options.\n * @returns Encoded {@link ox#Bytes.Bytes}.\n */\nexport function fromNumber(\n value: bigint | number,\n options?: fromNumber.Options | undefined,\n) {\n const hex = Hex.fromNumber(value, options)\n return fromHex(hex)\n}\n\nexport declare namespace fromNumber {\n export type Options = Hex.fromNumber.Options\n\n export type ErrorType =\n | Hex.fromNumber.ErrorType\n | fromHex.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a string into {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromString('Hello world!')\n * // @log: Uint8Array([72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 33])\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromString('Hello world!', { size: 32 })\n * // @log: Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])\n * ```\n *\n * @param value - String to encode.\n * @param options - Encoding options.\n * @returns Encoded {@link ox#Bytes.Bytes}.\n */\nexport function fromString(\n value: string,\n options: fromString.Options = {},\n): Bytes {\n const { size } = options\n\n const bytes = encoder.encode(value)\n if (typeof size === 'number') {\n internal.assertSize(bytes, size)\n return padRight(bytes, size)\n }\n return bytes\n}\n\nexport declare namespace fromString {\n type Options = {\n /** Size of the output bytes. */\n size?: number | undefined\n }\n\n type ErrorType =\n | internal.assertSize.ErrorType\n | padRight.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Checks if two {@link ox#Bytes.Bytes} values are equal.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.isEqual(Bytes.from([1]), Bytes.from([1]))\n * // @log: true\n *\n * Bytes.isEqual(Bytes.from([1]), Bytes.from([2]))\n * // @log: false\n * ```\n *\n * @param bytesA - First {@link ox#Bytes.Bytes} value.\n * @param bytesB - Second {@link ox#Bytes.Bytes} value.\n * @returns `true` if the two values are equal, otherwise `false`.\n */\nexport function isEqual(bytesA: Bytes, bytesB: Bytes) {\n return equalBytes(bytesA, bytesB)\n}\n\nexport declare namespace isEqual {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Pads a {@link ox#Bytes.Bytes} value to the left with zero bytes until it reaches the given `size` (default: 32 bytes).\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.padLeft(Bytes.from([1]), 4)\n * // @log: Uint8Array([0, 0, 0, 1])\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} value to pad.\n * @param size - Size to pad the {@link ox#Bytes.Bytes} value to.\n * @returns Padded {@link ox#Bytes.Bytes} value.\n */\nexport function padLeft(\n value: Bytes,\n size?: number | undefined,\n): padLeft.ReturnType {\n return internal.pad(value, { dir: 'left', size })\n}\n\nexport declare namespace padLeft {\n type ReturnType = internal.pad.ReturnType\n type ErrorType = internal.pad.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Pads a {@link ox#Bytes.Bytes} value to the right with zero bytes until it reaches the given `size` (default: 32 bytes).\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.padRight(Bytes.from([1]), 4)\n * // @log: Uint8Array([1, 0, 0, 0])\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} value to pad.\n * @param size - Size to pad the {@link ox#Bytes.Bytes} value to.\n * @returns Padded {@link ox#Bytes.Bytes} value.\n */\nexport function padRight(\n value: Bytes,\n size?: number | undefined,\n): padRight.ReturnType {\n return internal.pad(value, { dir: 'right', size })\n}\n\nexport declare namespace padRight {\n type ReturnType = internal.pad.ReturnType\n type ErrorType = internal.pad.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Generates random {@link ox#Bytes.Bytes} of the specified length.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const bytes = Bytes.random(32)\n * // @log: Uint8Array([... x32])\n * ```\n *\n * @param length - Length of the random {@link ox#Bytes.Bytes} to generate.\n * @returns Random {@link ox#Bytes.Bytes} of the specified length.\n */\nexport function random(length: number): Bytes {\n return crypto.getRandomValues(new Uint8Array(length))\n}\n\nexport declare namespace random {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Retrieves the size of a {@link ox#Bytes.Bytes} value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.size(Bytes.from([1, 2, 3, 4]))\n * // @log: 4\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} value.\n * @returns Size of the {@link ox#Bytes.Bytes} value.\n */\nexport function size(value: Bytes): number {\n return value.length\n}\n\nexport declare namespace size {\n export type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Returns a section of a {@link ox#Bytes.Bytes} value given a start/end bytes offset.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.slice(\n * Bytes.from([1, 2, 3, 4, 5, 6, 7, 8, 9]),\n * 1,\n * 4,\n * )\n * // @log: Uint8Array([2, 3, 4])\n * ```\n *\n * @param value - The {@link ox#Bytes.Bytes} value.\n * @param start - Start offset.\n * @param end - End offset.\n * @param options - Slice options.\n * @returns Sliced {@link ox#Bytes.Bytes} value.\n */\nexport function slice(\n value: Bytes,\n start?: number | undefined,\n end?: number | undefined,\n options: slice.Options = {},\n): Bytes {\n const { strict } = options\n internal.assertStartOffset(value, start)\n const value_ = value.slice(start, end)\n if (strict) internal.assertEndOffset(value_, start, end)\n return value_\n}\n\nexport declare namespace slice {\n type Options = {\n /** Asserts that the sliced value is the same size as the given start/end offsets. */\n strict?: boolean | undefined\n }\n\n export type ErrorType =\n | internal.assertStartOffset.ErrorType\n | internal.assertEndOffset.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Bytes.Bytes} into a bigint.\n *\n * @example\n * ```ts\n * import { Bytes } from 'ox'\n *\n * Bytes.toBigInt(Bytes.from([1, 164]))\n * // @log: 420n\n * ```\n *\n * @param bytes - The {@link ox#Bytes.Bytes} to decode.\n * @param options - Decoding options.\n * @returns Decoded bigint.\n */\nexport function toBigInt(bytes: Bytes, options: toBigInt.Options = {}): bigint {\n const { size } = options\n if (typeof size !== 'undefined') internal.assertSize(bytes, size)\n const hex = Hex.fromBytes(bytes, options)\n return Hex.toBigInt(hex, options)\n}\n\nexport declare namespace toBigInt {\n type Options = {\n /** Whether or not the number of a signed representation. */\n signed?: boolean | undefined\n /** Size of the bytes. */\n size?: number | undefined\n }\n\n type ErrorType =\n | Hex.fromBytes.ErrorType\n | Hex.toBigInt.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Bytes.Bytes} into a boolean.\n *\n * @example\n * ```ts\n * import { Bytes } from 'ox'\n *\n * Bytes.toBoolean(Bytes.from([1]))\n * // @log: true\n * ```\n *\n * @param bytes - The {@link ox#Bytes.Bytes} to decode.\n * @param options - Decoding options.\n * @returns Decoded boolean.\n */\nexport function toBoolean(\n bytes: Bytes,\n options: toBoolean.Options = {},\n): boolean {\n const { size } = options\n let bytes_ = bytes\n if (typeof size !== 'undefined') {\n internal.assertSize(bytes_, size)\n bytes_ = trimLeft(bytes_)\n }\n if (bytes_.length > 1 || bytes_[0]! > 1)\n throw new InvalidBytesBooleanError(bytes_)\n return Boolean(bytes_[0])\n}\n\nexport declare namespace toBoolean {\n type Options = {\n /** Size of the bytes. */\n size?: number | undefined\n }\n\n type ErrorType =\n | internal.assertSize.ErrorType\n | trimLeft.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a {@link ox#Bytes.Bytes} value into a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.toHex(Bytes.from([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]))\n * // '0x48656c6c6f20576f726c6421'\n * ```\n *\n * @param value - The {@link ox#Bytes.Bytes} to decode.\n * @param options - Options.\n * @returns Decoded {@link ox#Hex.Hex} value.\n */\nexport function toHex(value: Bytes, options: toHex.Options = {}): Hex.Hex {\n return Hex.fromBytes(value, options)\n}\n\nexport declare namespace toHex {\n type Options = {\n /** Size of the bytes. */\n size?: number | undefined\n }\n\n type ErrorType = Hex.fromBytes.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Bytes.Bytes} into a number.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.toNumber(Bytes.from([1, 164]))\n * // @log: 420\n * ```\n */\nexport function toNumber(bytes: Bytes, options: toNumber.Options = {}): number {\n const { size } = options\n if (typeof size !== 'undefined') internal.assertSize(bytes, size)\n const hex = Hex.fromBytes(bytes, options)\n return Hex.toNumber(hex, options)\n}\n\nexport declare namespace toNumber {\n type Options = {\n /** Whether or not the number of a signed representation. */\n signed?: boolean | undefined\n /** Size of the bytes. */\n size?: number | undefined\n }\n\n type ErrorType =\n | Hex.fromBytes.ErrorType\n | Hex.toNumber.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Bytes.Bytes} into a string.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.toString(Bytes.from([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]))\n * // @log: 'Hello world'\n * ```\n *\n * @param bytes - The {@link ox#Bytes.Bytes} to decode.\n * @param options - Options.\n * @returns Decoded string.\n */\nexport function toString(bytes: Bytes, options: toString.Options = {}): string {\n const { size } = options\n\n let bytes_ = bytes\n if (typeof size !== 'undefined') {\n internal.assertSize(bytes_, size)\n bytes_ = trimRight(bytes_)\n }\n return decoder.decode(bytes_)\n}\n\nexport declare namespace toString {\n export type Options = {\n /** Size of the bytes. */\n size?: number | undefined\n }\n\n export type ErrorType =\n | internal.assertSize.ErrorType\n | trimRight.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Trims leading zeros from a {@link ox#Bytes.Bytes} value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.trimLeft(Bytes.from([0, 0, 0, 0, 1, 2, 3]))\n * // @log: Uint8Array([1, 2, 3])\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} value.\n * @returns Trimmed {@link ox#Bytes.Bytes} value.\n */\nexport function trimLeft(value: Bytes): Bytes {\n return internal.trim(value, { dir: 'left' })\n}\n\nexport declare namespace trimLeft {\n type ErrorType = internal.trim.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Trims trailing zeros from a {@link ox#Bytes.Bytes} value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.trimRight(Bytes.from([1, 2, 3, 0, 0, 0, 0]))\n * // @log: Uint8Array([1, 2, 3])\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} value.\n * @returns Trimmed {@link ox#Bytes.Bytes} value.\n */\nexport function trimRight(value: Bytes): Bytes {\n return internal.trim(value, { dir: 'right' })\n}\n\nexport declare namespace trimRight {\n export type ErrorType = internal.trim.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Checks if the given value is {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.validate('0x')\n * // @log: false\n *\n * Bytes.validate(Bytes.from([1, 2, 3]))\n * // @log: true\n * ```\n *\n * @param value - Value to check.\n * @returns `true` if the value is {@link ox#Bytes.Bytes}, otherwise `false`.\n */\nexport function validate(value: unknown): value is Bytes {\n try {\n assert(value)\n return true\n } catch {\n return false\n }\n}\n\nexport declare namespace validate {\n export type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Thrown when the bytes value cannot be represented as a boolean.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.toBoolean(Bytes.from([5]))\n * // @error: Bytes.InvalidBytesBooleanError: Bytes value `[5]` is not a valid boolean.\n * // @error: The bytes array must contain a single byte of either a `0` or `1` value.\n * ```\n */\nexport class InvalidBytesBooleanError extends Errors.BaseError {\n override readonly name = 'Bytes.InvalidBytesBooleanError'\n\n constructor(bytes: Bytes) {\n super(`Bytes value \\`${bytes}\\` is not a valid boolean.`, {\n metaMessages: [\n 'The bytes array must contain a single byte of either a `0` or `1` value.',\n ],\n })\n }\n}\n\n/**\n * Thrown when a value cannot be converted to bytes.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Bytes } from 'ox'\n *\n * Bytes.from('foo')\n * // @error: Bytes.InvalidBytesTypeError: Value `foo` of type `string` is an invalid Bytes value.\n * ```\n */\nexport class InvalidBytesTypeError extends Errors.BaseError {\n override readonly name = 'Bytes.InvalidBytesTypeError'\n\n constructor(value: unknown) {\n super(\n `Value \\`${typeof value === 'object' ? Json.stringify(value) : value}\\` of type \\`${typeof value}\\` is an invalid Bytes value.`,\n {\n metaMessages: ['Bytes values must be of type `Bytes`.'],\n },\n )\n }\n}\n\n/**\n * Thrown when a size exceeds the maximum allowed size.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.fromString('Hello World!', { size: 8 })\n * // @error: Bytes.SizeOverflowError: Size cannot exceed `8` bytes. Given size: `12` bytes.\n * ```\n */\nexport class SizeOverflowError extends Errors.BaseError {\n override readonly name = 'Bytes.SizeOverflowError'\n\n constructor({ givenSize, maxSize }: { givenSize: number; maxSize: number }) {\n super(\n `Size cannot exceed \\`${maxSize}\\` bytes. Given size: \\`${givenSize}\\` bytes.`,\n )\n }\n}\n\n/**\n * Thrown when a slice offset is out-of-bounds.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.slice(Bytes.from([1, 2, 3]), 4)\n * // @error: Bytes.SliceOffsetOutOfBoundsError: Slice starting at offset `4` is out-of-bounds (size: `3`).\n * ```\n */\nexport class SliceOffsetOutOfBoundsError extends Errors.BaseError {\n override readonly name = 'Bytes.SliceOffsetOutOfBoundsError'\n\n constructor({\n offset,\n position,\n size,\n }: { offset: number; position: 'start' | 'end'; size: number }) {\n super(\n `Slice ${\n position === 'start' ? 'starting' : 'ending'\n } at offset \\`${offset}\\` is out-of-bounds (size: \\`${size}\\`).`,\n )\n }\n}\n\n/**\n * Thrown when a the padding size exceeds the maximum allowed size.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.padLeft(Bytes.fromString('Hello World!'), 8)\n * // @error: [Bytes.SizeExceedsPaddingSizeError: Bytes size (`12`) exceeds padding size (`8`).\n * ```\n */\nexport class SizeExceedsPaddingSizeError extends Errors.BaseError {\n override readonly name = 'Bytes.SizeExceedsPaddingSizeError'\n\n constructor({\n size,\n targetSize,\n type,\n }: {\n size: number\n targetSize: number\n type: 'Hex' | 'Bytes'\n }) {\n super(\n `${type.charAt(0).toUpperCase()}${type\n .slice(1)\n .toLowerCase()} size (\\`${size}\\`) exceeds padding size (\\`${targetSize}\\`).`,\n )\n }\n}\n", "import { equalBytes } from '@noble/curves/abstract/utils'\nimport * as Bytes from './Bytes.js'\nimport * as Errors from './Errors.js'\nimport * as internal_bytes from './internal/bytes.js'\nimport * as internal from './internal/hex.js'\nimport * as Json from './Json.js'\n\nconst encoder = /*#__PURE__*/ new TextEncoder()\n\nconst hexes = /*#__PURE__*/ Array.from({ length: 256 }, (_v, i) =>\n i.toString(16).padStart(2, '0'),\n)\n\n/** Root type for a Hex string. */\nexport type Hex = `0x${string}`\n\n/**\n * Asserts if the given value is {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.assert('abc')\n * // @error: InvalidHexValueTypeError:\n * // @error: Value `\"abc\"` of type `string` is an invalid hex type.\n * // @error: Hex types must be represented as `\"0x\\${string}\"`.\n * ```\n *\n * @param value - The value to assert.\n * @param options - Options.\n */\nexport function assert(\n value: unknown,\n options: assert.Options = {},\n): asserts value is Hex {\n const { strict = false } = options\n if (!value) throw new InvalidHexTypeError(value)\n if (typeof value !== 'string') throw new InvalidHexTypeError(value)\n if (strict) {\n if (!/^0x[0-9a-fA-F]*$/.test(value)) throw new InvalidHexValueError(value)\n }\n if (!value.startsWith('0x')) throw new InvalidHexValueError(value)\n}\n\nexport declare namespace assert {\n type Options = {\n /** Checks if the {@link ox#Hex.Hex} value contains invalid hexadecimal characters. @default false */\n strict?: boolean | undefined\n }\n\n type ErrorType =\n | InvalidHexTypeError\n | InvalidHexValueError\n | Errors.GlobalErrorType\n}\n\n/**\n * Concatenates two or more {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.concat('0x123', '0x456')\n * // @log: '0x123456'\n * ```\n *\n * @param values - The {@link ox#Hex.Hex} values to concatenate.\n * @returns The concatenated {@link ox#Hex.Hex} value.\n */\nexport function concat(...values: readonly Hex[]): Hex {\n return `0x${(values as Hex[]).reduce((acc, x) => acc + x.replace('0x', ''), '')}`\n}\n\nexport declare namespace concat {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Instantiates a {@link ox#Hex.Hex} value from a hex string or {@link ox#Bytes.Bytes} value.\n *\n * :::tip\n *\n * To instantiate from a **Boolean**, **String**, or **Number**, use one of the following:\n *\n * - `Hex.fromBoolean`\n *\n * - `Hex.fromString`\n *\n * - `Hex.fromNumber`\n *\n * :::\n *\n * @example\n * ```ts twoslash\n * import { Bytes, Hex } from 'ox'\n *\n * Hex.from('0x48656c6c6f20576f726c6421')\n * // @log: '0x48656c6c6f20576f726c6421'\n *\n * Hex.from(Bytes.from([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]))\n * // @log: '0x48656c6c6f20576f726c6421'\n * ```\n *\n * @param value - The {@link ox#Bytes.Bytes} value to encode.\n * @returns The encoded {@link ox#Hex.Hex} value.\n */\nexport function from(value: Hex | Bytes.Bytes | readonly number[]): Hex {\n if (value instanceof Uint8Array) return fromBytes(value)\n if (Array.isArray(value)) return fromBytes(new Uint8Array(value))\n return value as never\n}\n\nexport declare namespace from {\n type Options = {\n /** The size (in bytes) of the output hex value. */\n size?: number | undefined\n }\n\n type ErrorType = fromBytes.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a boolean into a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.fromBoolean(true)\n * // @log: '0x1'\n *\n * Hex.fromBoolean(false)\n * // @log: '0x0'\n *\n * Hex.fromBoolean(true, { size: 32 })\n * // @log: '0x0000000000000000000000000000000000000000000000000000000000000001'\n * ```\n *\n * @param value - The boolean value to encode.\n * @param options - Options.\n * @returns The encoded {@link ox#Hex.Hex} value.\n */\nexport function fromBoolean(\n value: boolean,\n options: fromBoolean.Options = {},\n): Hex {\n const hex: Hex = `0x${Number(value)}`\n if (typeof options.size === 'number') {\n internal.assertSize(hex, options.size)\n return padLeft(hex, options.size)\n }\n return hex\n}\n\nexport declare namespace fromBoolean {\n type Options = {\n /** The size (in bytes) of the output hex value. */\n size?: number | undefined\n }\n\n type ErrorType =\n | internal.assertSize.ErrorType\n | padLeft.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a {@link ox#Bytes.Bytes} value into a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes, Hex } from 'ox'\n *\n * Hex.fromBytes(Bytes.from([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]))\n * // @log: '0x48656c6c6f20576f726c6421'\n * ```\n *\n * @param value - The {@link ox#Bytes.Bytes} value to encode.\n * @param options - Options.\n * @returns The encoded {@link ox#Hex.Hex} value.\n */\nexport function fromBytes(\n value: Bytes.Bytes,\n options: fromBytes.Options = {},\n): Hex {\n let string = ''\n for (let i = 0; i < value.length; i++) string += hexes[value[i]!]\n const hex = `0x${string}` as const\n\n if (typeof options.size === 'number') {\n internal.assertSize(hex, options.size)\n return padRight(hex, options.size)\n }\n return hex\n}\n\nexport declare namespace fromBytes {\n type Options = {\n /** The size (in bytes) of the output hex value. */\n size?: number | undefined\n }\n\n type ErrorType =\n | internal.assertSize.ErrorType\n | padRight.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a number or bigint into a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.fromNumber(420)\n * // @log: '0x1a4'\n *\n * Hex.fromNumber(420, { size: 32 })\n * // @log: '0x00000000000000000000000000000000000000000000000000000000000001a4'\n * ```\n *\n * @param value - The number or bigint value to encode.\n * @param options - Options.\n * @returns The encoded {@link ox#Hex.Hex} value.\n */\nexport function fromNumber(\n value: number | bigint,\n options: fromNumber.Options = {},\n): Hex {\n const { signed, size } = options\n\n const value_ = BigInt(value)\n\n let maxValue: bigint | number | undefined\n if (size) {\n if (signed) maxValue = (1n << (BigInt(size) * 8n - 1n)) - 1n\n else maxValue = 2n ** (BigInt(size) * 8n) - 1n\n } else if (typeof value === 'number') {\n maxValue = BigInt(Number.MAX_SAFE_INTEGER)\n }\n\n const minValue = typeof maxValue === 'bigint' && signed ? -maxValue - 1n : 0\n\n if ((maxValue && value_ > maxValue) || value_ < minValue) {\n const suffix = typeof value === 'bigint' ? 'n' : ''\n throw new IntegerOutOfRangeError({\n max: maxValue ? `${maxValue}${suffix}` : undefined,\n min: `${minValue}${suffix}`,\n signed,\n size,\n value: `${value}${suffix}`,\n })\n }\n\n const stringValue = (\n signed && value_ < 0 ? BigInt.asUintN(size * 8, BigInt(value_)) : value_\n ).toString(16)\n\n const hex = `0x${stringValue}` as Hex\n if (size) return padLeft(hex, size) as Hex\n return hex\n}\n\nexport declare namespace fromNumber {\n type Options =\n | {\n /** Whether or not the number of a signed representation. */\n signed?: boolean | undefined\n /** The size (in bytes) of the output hex value. */\n size: number\n }\n | {\n signed?: undefined\n /** The size (in bytes) of the output hex value. */\n size?: number | undefined\n }\n\n type ErrorType =\n | IntegerOutOfRangeError\n | padLeft.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a string into a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n * Hex.fromString('Hello World!')\n * // '0x48656c6c6f20576f726c6421'\n *\n * Hex.fromString('Hello World!', { size: 32 })\n * // '0x48656c6c6f20576f726c64210000000000000000000000000000000000000000'\n * ```\n *\n * @param value - The string value to encode.\n * @param options - Options.\n * @returns The encoded {@link ox#Hex.Hex} value.\n */\nexport function fromString(\n value: string,\n options: fromString.Options = {},\n): Hex {\n return fromBytes(encoder.encode(value), options)\n}\n\nexport declare namespace fromString {\n type Options = {\n /** The size (in bytes) of the output hex value. */\n size?: number | undefined\n }\n\n type ErrorType = fromBytes.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Checks if two {@link ox#Hex.Hex} values are equal.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.isEqual('0xdeadbeef', '0xdeadbeef')\n * // @log: true\n *\n * Hex.isEqual('0xda', '0xba')\n * // @log: false\n * ```\n *\n * @param hexA - The first {@link ox#Hex.Hex} value.\n * @param hexB - The second {@link ox#Hex.Hex} value.\n * @returns `true` if the two {@link ox#Hex.Hex} values are equal, `false` otherwise.\n */\nexport function isEqual(hexA: Hex, hexB: Hex) {\n return equalBytes(Bytes.fromHex(hexA), Bytes.fromHex(hexB))\n}\n\nexport declare namespace isEqual {\n type ErrorType = Bytes.fromHex.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Pads a {@link ox#Hex.Hex} value to the left with zero bytes until it reaches the given `size` (default: 32 bytes).\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.padLeft('0x1234', 4)\n * // @log: '0x00001234'\n * ```\n *\n * @param value - The {@link ox#Hex.Hex} value to pad.\n * @param size - The size (in bytes) of the output hex value.\n * @returns The padded {@link ox#Hex.Hex} value.\n */\nexport function padLeft(\n value: Hex,\n size?: number | undefined,\n): padLeft.ReturnType {\n return internal.pad(value, { dir: 'left', size })\n}\n\nexport declare namespace padLeft {\n type ReturnType = Hex\n type ErrorType = internal.pad.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Pads a {@link ox#Hex.Hex} value to the right with zero bytes until it reaches the given `size` (default: 32 bytes).\n *\n * @example\n * ```ts\n * import { Hex } from 'ox'\n *\n * Hex.padRight('0x1234', 4)\n * // @log: '0x12340000'\n * ```\n *\n * @param value - The {@link ox#Hex.Hex} value to pad.\n * @param size - The size (in bytes) of the output hex value.\n * @returns The padded {@link ox#Hex.Hex} value.\n */\nexport function padRight(\n value: Hex,\n size?: number | undefined,\n): padRight.ReturnType {\n return internal.pad(value, { dir: 'right', size })\n}\n\nexport declare namespace padRight {\n type ReturnType = Hex\n type ErrorType = internal.pad.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Generates a random {@link ox#Hex.Hex} value of the specified length.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * const hex = Hex.random(32)\n * // @log: '0x...'\n * ```\n *\n * @returns Random {@link ox#Hex.Hex} value.\n */\nexport function random(length: number): Hex {\n return fromBytes(Bytes.random(length))\n}\n\nexport declare namespace random {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Returns a section of a {@link ox#Bytes.Bytes} value given a start/end bytes offset.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.slice('0x0123456789', 1, 4)\n * // @log: '0x234567'\n * ```\n *\n * @param value - The {@link ox#Hex.Hex} value to slice.\n * @param start - The start offset (in bytes).\n * @param end - The end offset (in bytes).\n * @param options - Options.\n * @returns The sliced {@link ox#Hex.Hex} value.\n */\nexport function slice(\n value: Hex,\n start?: number | undefined,\n end?: number | undefined,\n options: slice.Options = {},\n): Hex {\n const { strict } = options\n internal.assertStartOffset(value, start)\n const value_ = `0x${value\n .replace('0x', '')\n .slice((start ?? 0) * 2, (end ?? value.length) * 2)}` as const\n if (strict) internal.assertEndOffset(value_, start, end)\n return value_\n}\n\nexport declare namespace slice {\n type Options = {\n /** Asserts that the sliced value is the same size as the given start/end offsets. */\n strict?: boolean | undefined\n }\n\n type ErrorType =\n | internal.assertStartOffset.ErrorType\n | internal.assertEndOffset.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Retrieves the size of a {@link ox#Hex.Hex} value (in bytes).\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.size('0xdeadbeef')\n * // @log: 4\n * ```\n *\n * @param value - The {@link ox#Hex.Hex} value to get the size of.\n * @returns The size of the {@link ox#Hex.Hex} value (in bytes).\n */\nexport function size(value: Hex): number {\n return Math.ceil((value.length - 2) / 2)\n}\n\nexport declare namespace size {\n export type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Trims leading zeros from a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.trimLeft('0x00000000deadbeef')\n * // @log: '0xdeadbeef'\n * ```\n *\n * @param value - The {@link ox#Hex.Hex} value to trim.\n * @returns The trimmed {@link ox#Hex.Hex} value.\n */\nexport function trimLeft(value: Hex): trimLeft.ReturnType {\n return internal.trim(value, { dir: 'left' })\n}\n\nexport declare namespace trimLeft {\n type ReturnType = Hex\n\n type ErrorType = internal.trim.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Trims trailing zeros from a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.trimRight('0xdeadbeef00000000')\n * // @log: '0xdeadbeef'\n * ```\n *\n * @param value - The {@link ox#Hex.Hex} value to trim.\n * @returns The trimmed {@link ox#Hex.Hex} value.\n */\nexport function trimRight(value: Hex): trimRight.ReturnType {\n return internal.trim(value, { dir: 'right' })\n}\n\nexport declare namespace trimRight {\n type ReturnType = Hex\n\n type ErrorType = internal.trim.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Hex.Hex} value into a BigInt.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.toBigInt('0x1a4')\n * // @log: 420n\n *\n * Hex.toBigInt('0x00000000000000000000000000000000000000000000000000000000000001a4', { size: 32 })\n * // @log: 420n\n * ```\n *\n * @param hex - The {@link ox#Hex.Hex} value to decode.\n * @param options - Options.\n * @returns The decoded BigInt.\n */\nexport function toBigInt(hex: Hex, options: toBigInt.Options = {}): bigint {\n const { signed } = options\n\n if (options.size) internal.assertSize(hex, options.size)\n\n const value = BigInt(hex)\n if (!signed) return value\n\n const size = (hex.length - 2) / 2\n\n const max_unsigned = (1n << (BigInt(size) * 8n)) - 1n\n const max_signed = max_unsigned >> 1n\n\n if (value <= max_signed) return value\n return value - max_unsigned - 1n\n}\n\nexport declare namespace toBigInt {\n type Options = {\n /** Whether or not the number of a signed representation. */\n signed?: boolean | undefined\n /** Size (in bytes) of the hex value. */\n size?: number | undefined\n }\n\n type ErrorType = internal.assertSize.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Hex.Hex} value into a boolean.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.toBoolean('0x01')\n * // @log: true\n *\n * Hex.toBoolean('0x0000000000000000000000000000000000000000000000000000000000000001', { size: 32 })\n * // @log: true\n * ```\n *\n * @param hex - The {@link ox#Hex.Hex} value to decode.\n * @param options - Options.\n * @returns The decoded boolean.\n */\nexport function toBoolean(hex: Hex, options: toBoolean.Options = {}): boolean {\n if (options.size) internal.assertSize(hex, options.size)\n const hex_ = trimLeft(hex)\n if (hex_ === '0x') return false\n if (hex_ === '0x1') return true\n throw new InvalidHexBooleanError(hex)\n}\n\nexport declare namespace toBoolean {\n type Options = {\n /** Size (in bytes) of the hex value. */\n size?: number | undefined\n }\n\n type ErrorType =\n | internal.assertSize.ErrorType\n | trimLeft.ErrorType\n | InvalidHexBooleanError\n | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Hex.Hex} value into a {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * const data = Hex.toBytes('0x48656c6c6f20776f726c6421')\n * // @log: Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33])\n * ```\n *\n * @param hex - The {@link ox#Hex.Hex} value to decode.\n * @param options - Options.\n * @returns The decoded {@link ox#Bytes.Bytes}.\n */\nexport function toBytes(hex: Hex, options: toBytes.Options = {}): Bytes.Bytes {\n return Bytes.fromHex(hex, options)\n}\n\nexport declare namespace toBytes {\n type Options = {\n /** Size (in bytes) of the hex value. */\n size?: number | undefined\n }\n\n type ErrorType = Bytes.fromHex.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Hex.Hex} value into a number.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.toNumber('0x1a4')\n * // @log: 420\n *\n * Hex.toNumber('0x00000000000000000000000000000000000000000000000000000000000001a4', { size: 32 })\n * // @log: 420\n * ```\n *\n * @param hex - The {@link ox#Hex.Hex} value to decode.\n * @param options - Options.\n * @returns The decoded number.\n */\nexport function toNumber(hex: Hex, options: toNumber.Options = {}): number {\n const { signed, size } = options\n if (!signed && !size) return Number(hex)\n return Number(toBigInt(hex, options))\n}\n\nexport declare namespace toNumber {\n type Options = toBigInt.Options\n\n type ErrorType = toBigInt.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Hex.Hex} value into a string.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.toString('0x48656c6c6f20576f726c6421')\n * // @log: 'Hello world!'\n *\n * Hex.toString('0x48656c6c6f20576f726c64210000000000000000000000000000000000000000', {\n * size: 32,\n * })\n * // @log: 'Hello world'\n * ```\n *\n * @param hex - The {@link ox#Hex.Hex} value to decode.\n * @param options - Options.\n * @returns The decoded string.\n */\nexport function toString(hex: Hex, options: toString.Options = {}): string {\n const { size } = options\n\n let bytes = Bytes.fromHex(hex)\n if (size) {\n internal_bytes.assertSize(bytes, size)\n bytes = Bytes.trimRight(bytes)\n }\n return new TextDecoder().decode(bytes)\n}\n\nexport declare namespace toString {\n type Options = {\n /** Size (in bytes) of the hex value. */\n size?: number | undefined\n }\n\n type ErrorType =\n | internal_bytes.assertSize.ErrorType\n | Bytes.fromHex.ErrorType\n | Bytes.trimRight.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Checks if the given value is {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes, Hex } from 'ox'\n *\n * Hex.validate('0xdeadbeef')\n * // @log: true\n *\n * Hex.validate(Bytes.from([1, 2, 3]))\n * // @log: false\n * ```\n *\n * @param value - The value to check.\n * @param options - Options.\n * @returns `true` if the value is a {@link ox#Hex.Hex}, `false` otherwise.\n */\nexport function validate(\n value: unknown,\n options: validate.Options = {},\n): value is Hex {\n const { strict = false } = options\n try {\n assert(value, { strict })\n return true\n } catch {\n return false\n }\n}\n\nexport declare namespace validate {\n type Options = {\n /** Checks if the {@link ox#Hex.Hex} value contains invalid hexadecimal characters. @default false */\n strict?: boolean | undefined\n }\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Thrown when the provided integer is out of range, and cannot be represented as a hex value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.fromNumber(420182738912731283712937129)\n * // @error: Hex.IntegerOutOfRangeError: Number \\`4.2018273891273126e+26\\` is not in safe unsigned integer range (`0` to `9007199254740991`)\n * ```\n */\nexport class IntegerOutOfRangeError extends Errors.BaseError {\n override readonly name = 'Hex.IntegerOutOfRangeError'\n\n constructor({\n max,\n min,\n signed,\n size,\n value,\n }: {\n max?: string | undefined\n min: string\n signed?: boolean | undefined\n size?: number | undefined\n value: string\n }) {\n super(\n `Number \\`${value}\\` is not in safe${\n size ? ` ${size * 8}-bit` : ''\n }${signed ? ' signed' : ' unsigned'} integer range ${max ? `(\\`${min}\\` to \\`${max}\\`)` : `(above \\`${min}\\`)`}`,\n )\n }\n}\n\n/**\n * Thrown when the provided hex value cannot be represented as a boolean.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.toBoolean('0xa')\n * // @error: Hex.InvalidHexBooleanError: Hex value `\"0xa\"` is not a valid boolean.\n * // @error: The hex value must be `\"0x0\"` (false) or `\"0x1\"` (true).\n * ```\n */\nexport class InvalidHexBooleanError extends Errors.BaseError {\n override readonly name = 'Hex.InvalidHexBooleanError'\n\n constructor(hex: Hex) {\n super(`Hex value \\`\"${hex}\"\\` is not a valid boolean.`, {\n metaMessages: [\n 'The hex value must be `\"0x0\"` (false) or `\"0x1\"` (true).',\n ],\n })\n }\n}\n\n/**\n * Thrown when the provided value is not a valid hex type.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.assert(1)\n * // @error: Hex.InvalidHexTypeError: Value `1` of type `number` is an invalid hex type.\n * ```\n */\nexport class InvalidHexTypeError extends Errors.BaseError {\n override readonly name = 'Hex.InvalidHexTypeError'\n\n constructor(value: unknown) {\n super(\n `Value \\`${typeof value === 'object' ? Json.stringify(value) : value}\\` of type \\`${typeof value}\\` is an invalid hex type.`,\n {\n metaMessages: ['Hex types must be represented as `\"0x${string}\"`.'],\n },\n )\n }\n}\n\n/**\n * Thrown when the provided hex value is invalid.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.assert('0x0123456789abcdefg')\n * // @error: Hex.InvalidHexValueError: Value `0x0123456789abcdefg` is an invalid hex value.\n * // @error: Hex values must start with `\"0x\"` and contain only hexadecimal characters (0-9, a-f, A-F).\n * ```\n */\nexport class InvalidHexValueError extends Errors.BaseError {\n override readonly name = 'Hex.InvalidHexValueError'\n\n constructor(value: unknown) {\n super(`Value \\`${value}\\` is an invalid hex value.`, {\n metaMessages: [\n 'Hex values must start with `\"0x\"` and contain only hexadecimal characters (0-9, a-f, A-F).',\n ],\n })\n }\n}\n\n/**\n * Thrown when the provided hex value is an odd length.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.fromHex('0xabcde')\n * // @error: Hex.InvalidLengthError: Hex value `\"0xabcde\"` is an odd length (5 nibbles).\n * ```\n */\nexport class InvalidLengthError extends Errors.BaseError {\n override readonly name = 'Hex.InvalidLengthError'\n\n constructor(value: Hex) {\n super(\n `Hex value \\`\"${value}\"\\` is an odd length (${value.length - 2} nibbles).`,\n {\n metaMessages: ['It must be an even length.'],\n },\n )\n }\n}\n\n/**\n * Thrown when the size of the value exceeds the expected max size.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.fromString('Hello World!', { size: 8 })\n * // @error: Hex.SizeOverflowError: Size cannot exceed `8` bytes. Given size: `12` bytes.\n * ```\n */\nexport class SizeOverflowError extends Errors.BaseError {\n override readonly name = 'Hex.SizeOverflowError'\n\n constructor({ givenSize, maxSize }: { givenSize: number; maxSize: number }) {\n super(\n `Size cannot exceed \\`${maxSize}\\` bytes. Given size: \\`${givenSize}\\` bytes.`,\n )\n }\n}\n\n/**\n * Thrown when the slice offset exceeds the bounds of the value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.slice('0x0123456789', 6)\n * // @error: Hex.SliceOffsetOutOfBoundsError: Slice starting at offset `6` is out-of-bounds (size: `5`).\n * ```\n */\nexport class SliceOffsetOutOfBoundsError extends Errors.BaseError {\n override readonly name = 'Hex.SliceOffsetOutOfBoundsError'\n\n constructor({\n offset,\n position,\n size,\n }: { offset: number; position: 'start' | 'end'; size: number }) {\n super(\n `Slice ${\n position === 'start' ? 'starting' : 'ending'\n } at offset \\`${offset}\\` is out-of-bounds (size: \\`${size}\\`).`,\n )\n }\n}\n\n/**\n * Thrown when the size of the value exceeds the pad size.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.padLeft('0x1a4e12a45a21323123aaa87a897a897a898a6567a578a867a98778a667a85a875a87a6a787a65a675a6a9', 32)\n * // @error: Hex.SizeExceedsPaddingSizeError: Hex size (`43`) exceeds padding size (`32`).\n * ```\n */\nexport class SizeExceedsPaddingSizeError extends Errors.BaseError {\n override readonly name = 'Hex.SizeExceedsPaddingSizeError'\n\n constructor({\n size,\n targetSize,\n type,\n }: {\n size: number\n targetSize: number\n type: 'Hex' | 'Bytes'\n }) {\n super(\n `${type.charAt(0).toUpperCase()}${type\n .slice(1)\n .toLowerCase()} size (\\`${size}\\`) exceeds padding size (\\`${targetSize}\\`).`,\n )\n }\n}\n", "import type * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\n\n/** A Withdrawal as defined in the [Execution API specification](https://github.com/ethereum/execution-apis/blob/main/src/schemas/withdrawal.yaml). */\nexport type Withdrawal = {\n address: Hex.Hex\n amount: bigintType\n index: numberType\n validatorIndex: numberType\n}\n\n/** An RPC Withdrawal as defined in the [Execution API specification](https://github.com/ethereum/execution-apis/blob/main/src/schemas/withdrawal.yaml). */\nexport type Rpc = Withdrawal\n\n/**\n * Converts a {@link ox#Withdrawal.Rpc} to an {@link ox#Withdrawal.Withdrawal}.\n *\n * @example\n * ```ts twoslash\n * import { Withdrawal } from 'ox'\n *\n * const withdrawal = Withdrawal.fromRpc({\n * address: '0x00000000219ab540356cBB839Cbe05303d7705Fa',\n * amount: '0x620323',\n * index: '0x0',\n * validatorIndex: '0x1',\n * })\n * // @log: {\n * // @log: address: '0x00000000219ab540356cBB839Cbe05303d7705Fa',\n * // @log: amount: 6423331n,\n * // @log: index: 0,\n * // @log: validatorIndex: 1\n * // @log: }\n * ```\n *\n * @param withdrawal - The RPC withdrawal to convert.\n * @returns An instantiated {@link ox#Withdrawal.Withdrawal}.\n */\nexport function fromRpc(withdrawal: Rpc): Withdrawal {\n return {\n ...withdrawal,\n amount: BigInt(withdrawal.amount),\n index: Number(withdrawal.index),\n validatorIndex: Number(withdrawal.validatorIndex),\n }\n}\n\nexport declare namespace fromRpc {\n export type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Withdrawal.Withdrawal} to an {@link ox#Withdrawal.Rpc}.\n *\n * @example\n * ```ts twoslash\n * import { Withdrawal } from 'ox'\n *\n * const withdrawal = Withdrawal.toRpc({\n * address: '0x00000000219ab540356cBB839Cbe05303d7705Fa',\n * amount: 6423331n,\n * index: 0,\n * validatorIndex: 1,\n * })\n * // @log: {\n * // @log: address: '0x00000000219ab540356cBB839Cbe05303d7705Fa',\n * // @log: amount: '0x620323',\n * // @log: index: '0x0',\n * // @log: validatorIndex: '0x1',\n * // @log: }\n * ```\n *\n * @param withdrawal - The Withdrawal to convert.\n * @returns An RPC Withdrawal.\n */\nexport function toRpc(withdrawal: Withdrawal): Rpc {\n return {\n address: withdrawal.address,\n amount: Hex.fromNumber(withdrawal.amount),\n index: Hex.fromNumber(withdrawal.index),\n validatorIndex: Hex.fromNumber(withdrawal.validatorIndex),\n }\n}\n\nexport declare namespace toRpc {\n export type ErrorType = Errors.GlobalErrorType\n}\n", "import type * as Address from './Address.js'\nimport * as Hex from './Hex.js'\nimport * as Withdrawal from './Withdrawal.js'\n\n/**\n * Block overrides.\n */\nexport type BlockOverrides = {\n /** Base fee per gas. */\n baseFeePerGas?: bigintType | undefined\n /** Blob base fee. */\n blobBaseFee?: bigintType | undefined\n /** Fee recipient (also known as coinbase). */\n feeRecipient?: Address.Address | undefined\n /** Gas limit. */\n gasLimit?: bigintType | undefined\n /** Block number. */\n number?: bigintType | undefined\n /** The previous value of randomness beacon. */\n prevRandao?: bigintType | undefined\n /** Block timestamp. */\n time?: bigintType | undefined\n /** Withdrawals made by validators. */\n withdrawals?: Withdrawal.Withdrawal[] | undefined\n}\n\n/**\n * RPC block overrides.\n */\nexport type Rpc = BlockOverrides\n\n/**\n * Converts an {@link ox#BlockOverrides.Rpc} to an {@link ox#BlockOverrides.BlockOverrides}.\n *\n * @example\n * ```ts twoslash\n * import { BlockOverrides } from 'ox'\n *\n * const blockOverrides = BlockOverrides.fromRpc({\n * baseFeePerGas: '0x1',\n * blobBaseFee: '0x2',\n * feeRecipient: '0x0000000000000000000000000000000000000000',\n * gasLimit: '0x4',\n * number: '0x5',\n * prevRandao: '0x6',\n * time: '0x1234567890',\n * withdrawals: [\n * {\n * address: '0x0000000000000000000000000000000000000000',\n * amount: '0x1',\n * index: '0x0',\n * validatorIndex: '0x1',\n * },\n * ],\n * })\n * ```\n *\n * @param rpcBlockOverrides - The RPC block overrides to convert.\n * @returns An instantiated {@link ox#BlockOverrides.BlockOverrides}.\n */\nexport function fromRpc(rpcBlockOverrides: Rpc): BlockOverrides {\n return {\n ...(rpcBlockOverrides.baseFeePerGas && {\n baseFeePerGas: BigInt(rpcBlockOverrides.baseFeePerGas),\n }),\n ...(rpcBlockOverrides.blobBaseFee && {\n blobBaseFee: BigInt(rpcBlockOverrides.blobBaseFee),\n }),\n ...(rpcBlockOverrides.feeRecipient && {\n feeRecipient: rpcBlockOverrides.feeRecipient,\n }),\n ...(rpcBlockOverrides.gasLimit && {\n gasLimit: BigInt(rpcBlockOverrides.gasLimit),\n }),\n ...(rpcBlockOverrides.number && {\n number: BigInt(rpcBlockOverrides.number),\n }),\n ...(rpcBlockOverrides.prevRandao && {\n prevRandao: BigInt(rpcBlockOverrides.prevRandao),\n }),\n ...(rpcBlockOverrides.time && {\n time: BigInt(rpcBlockOverrides.time),\n }),\n ...(rpcBlockOverrides.withdrawals && {\n withdrawals: rpcBlockOverrides.withdrawals.map(Withdrawal.fromRpc),\n }),\n }\n}\n\n/**\n * Converts an {@link ox#BlockOverrides.BlockOverrides} to an {@link ox#BlockOverrides.Rpc}.\n *\n * @example\n * ```ts twoslash\n * import { BlockOverrides } from 'ox'\n *\n * const blockOverrides = BlockOverrides.toRpc({\n * baseFeePerGas: 1n,\n * blobBaseFee: 2n,\n * feeRecipient: '0x0000000000000000000000000000000000000000',\n * gasLimit: 4n,\n * number: 5n,\n * prevRandao: 6n,\n * time: 78187493520n,\n * withdrawals: [\n * {\n * address: '0x0000000000000000000000000000000000000000',\n * amount: 1n,\n * index: 0,\n * validatorIndex: 1,\n * },\n * ],\n * })\n * ```\n *\n * @param blockOverrides - The block overrides to convert.\n * @returns An instantiated {@link ox#BlockOverrides.Rpc}.\n */\nexport function toRpc(blockOverrides: BlockOverrides): Rpc {\n return {\n ...(typeof blockOverrides.baseFeePerGas === 'bigint' && {\n baseFeePerGas: Hex.fromNumber(blockOverrides.baseFeePerGas),\n }),\n ...(typeof blockOverrides.blobBaseFee === 'bigint' && {\n blobBaseFee: Hex.fromNumber(blockOverrides.blobBaseFee),\n }),\n ...(typeof blockOverrides.feeRecipient === 'string' && {\n feeRecipient: blockOverrides.feeRecipient,\n }),\n ...(typeof blockOverrides.gasLimit === 'bigint' && {\n gasLimit: Hex.fromNumber(blockOverrides.gasLimit),\n }),\n ...(typeof blockOverrides.number === 'bigint' && {\n number: Hex.fromNumber(blockOverrides.number),\n }),\n ...(typeof blockOverrides.prevRandao === 'bigint' && {\n prevRandao: Hex.fromNumber(blockOverrides.prevRandao),\n }),\n ...(typeof blockOverrides.time === 'bigint' && {\n time: Hex.fromNumber(blockOverrides.time),\n }),\n ...(blockOverrides.withdrawals && {\n withdrawals: blockOverrides.withdrawals.map(Withdrawal.toRpc),\n }),\n }\n}\n", "/* [Multicall3](https://github.com/mds1/multicall) */\nexport const multicall3Abi = [\n {\n inputs: [\n {\n components: [\n {\n name: 'target',\n type: 'address',\n },\n {\n name: 'allowFailure',\n type: 'bool',\n },\n {\n name: 'callData',\n type: 'bytes',\n },\n ],\n name: 'calls',\n type: 'tuple[]',\n },\n ],\n name: 'aggregate3',\n outputs: [\n {\n components: [\n {\n name: 'success',\n type: 'bool',\n },\n {\n name: 'returnData',\n type: 'bytes',\n },\n ],\n name: 'returnData',\n type: 'tuple[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'addr',\n type: 'address',\n },\n ],\n name: 'getEthBalance',\n outputs: [\n {\n name: 'balance',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'getCurrentBlockTimestamp',\n outputs: [\n {\n internalType: 'uint256',\n name: 'timestamp',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n] as const\n\nexport const batchGatewayAbi = [\n {\n name: 'query',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n {\n type: 'tuple[]',\n name: 'queries',\n components: [\n {\n type: 'address',\n name: 'sender',\n },\n {\n type: 'string[]',\n name: 'urls',\n },\n {\n type: 'bytes',\n name: 'data',\n },\n ],\n },\n ],\n outputs: [\n {\n type: 'bool[]',\n name: 'failures',\n },\n {\n type: 'bytes[]',\n name: 'responses',\n },\n ],\n },\n {\n name: 'HttpError',\n type: 'error',\n inputs: [\n {\n type: 'uint16',\n name: 'status',\n },\n {\n type: 'string',\n name: 'message',\n },\n ],\n },\n] as const\n\nconst universalResolverErrors = [\n {\n inputs: [\n {\n name: 'dns',\n type: 'bytes',\n },\n ],\n name: 'DNSDecodingFailed',\n type: 'error',\n },\n {\n inputs: [\n {\n name: 'ens',\n type: 'string',\n },\n ],\n name: 'DNSEncodingFailed',\n type: 'error',\n },\n {\n inputs: [],\n name: 'EmptyAddress',\n type: 'error',\n },\n {\n inputs: [\n {\n name: 'status',\n type: 'uint16',\n },\n {\n name: 'message',\n type: 'string',\n },\n ],\n name: 'HttpError',\n type: 'error',\n },\n {\n inputs: [],\n name: 'InvalidBatchGatewayResponse',\n type: 'error',\n },\n {\n inputs: [\n {\n name: 'errorData',\n type: 'bytes',\n },\n ],\n name: 'ResolverError',\n type: 'error',\n },\n {\n inputs: [\n {\n name: 'name',\n type: 'bytes',\n },\n {\n name: 'resolver',\n type: 'address',\n },\n ],\n name: 'ResolverNotContract',\n type: 'error',\n },\n {\n inputs: [\n {\n name: 'name',\n type: 'bytes',\n },\n ],\n name: 'ResolverNotFound',\n type: 'error',\n },\n {\n inputs: [\n {\n name: 'primary',\n type: 'string',\n },\n {\n name: 'primaryAddress',\n type: 'bytes',\n },\n ],\n name: 'ReverseAddressMismatch',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'bytes4',\n name: 'selector',\n type: 'bytes4',\n },\n ],\n name: 'UnsupportedResolverProfile',\n type: 'error',\n },\n] as const\n\nexport const universalResolverResolveAbi = [\n ...universalResolverErrors,\n {\n name: 'resolveWithGateways',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'name', type: 'bytes' },\n { name: 'data', type: 'bytes' },\n { name: 'gateways', type: 'string[]' },\n ],\n outputs: [\n { name: '', type: 'bytes' },\n { name: 'address', type: 'address' },\n ],\n },\n] as const\n\nexport const universalResolverReverseAbi = [\n ...universalResolverErrors,\n {\n name: 'reverseWithGateways',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { type: 'bytes', name: 'reverseName' },\n { type: 'uint256', name: 'coinType' },\n { type: 'string[]', name: 'gateways' },\n ],\n outputs: [\n { type: 'string', name: 'resolvedName' },\n { type: 'address', name: 'resolver' },\n { type: 'address', name: 'reverseResolver' },\n ],\n },\n] as const\n\nexport const textResolverAbi = [\n {\n name: 'text',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'name', type: 'bytes32' },\n { name: 'key', type: 'string' },\n ],\n outputs: [{ name: '', type: 'string' }],\n },\n] as const\n\nexport const addressResolverAbi = [\n {\n name: 'addr',\n type: 'function',\n stateMutability: 'view',\n inputs: [{ name: 'name', type: 'bytes32' }],\n outputs: [{ name: '', type: 'address' }],\n },\n {\n name: 'addr',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'name', type: 'bytes32' },\n { name: 'coinType', type: 'uint256' },\n ],\n outputs: [{ name: '', type: 'bytes' }],\n },\n] as const\n\n// ERC-1271\n// isValidSignature(bytes32 hash, bytes signature) \u2192 bytes4 magicValue\n/** @internal */\nexport const erc1271Abi = [\n {\n name: 'isValidSignature',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'hash', type: 'bytes32' },\n { name: 'signature', type: 'bytes' },\n ],\n outputs: [{ name: '', type: 'bytes4' }],\n },\n] as const\n\n// ERC-6492 - universal deployless signature validator contract\n// constructor(address _signer, bytes32 _hash, bytes _signature) \u2192 bytes4 returnValue\n// returnValue is either 0x1 (valid) or 0x0 (invalid)\nexport const erc6492SignatureValidatorAbi = [\n {\n inputs: [\n {\n name: '_signer',\n type: 'address',\n },\n {\n name: '_hash',\n type: 'bytes32',\n },\n {\n name: '_signature',\n type: 'bytes',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'constructor',\n },\n {\n inputs: [\n {\n name: '_signer',\n type: 'address',\n },\n {\n name: '_hash',\n type: 'bytes32',\n },\n {\n name: '_signature',\n type: 'bytes',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n name: 'isValidSig',\n },\n] as const\n\n/** [ERC-20 Token Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-20) */\nexport const erc20Abi = [\n {\n type: 'event',\n name: 'Approval',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'event',\n name: 'Transfer',\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'allowance',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'spender',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'approve',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'balanceOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'decimals',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint8',\n },\n ],\n },\n {\n type: 'function',\n name: 'name',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'symbol',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'totalSupply',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'transfer',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'transferFrom',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'sender',\n type: 'address',\n },\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n] as const\n\n/**\n * [bytes32-flavored ERC-20](https://docs.makerdao.com/smart-contract-modules/mkr-module#4.-gotchas-potential-source-of-user-error)\n * for tokens (ie. Maker) that use bytes32 instead of string.\n */\nexport const erc20Abi_bytes32 = [\n {\n type: 'event',\n name: 'Approval',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'event',\n name: 'Transfer',\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'allowance',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'spender',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'approve',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'balanceOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'decimals',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint8',\n },\n ],\n },\n {\n type: 'function',\n name: 'name',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'bytes32',\n },\n ],\n },\n {\n type: 'function',\n name: 'symbol',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'bytes32',\n },\n ],\n },\n {\n type: 'function',\n name: 'totalSupply',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'transfer',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'transferFrom',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'sender',\n type: 'address',\n },\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n] as const\n\n/** [ERC-1155 Multi Token Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-1155) */\nexport const erc1155Abi = [\n {\n inputs: [\n {\n internalType: 'address',\n name: 'sender',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'balance',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'needed',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n name: 'ERC1155InsufficientBalance',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'approver',\n type: 'address',\n },\n ],\n name: 'ERC1155InvalidApprover',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'idsLength',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'valuesLength',\n type: 'uint256',\n },\n ],\n name: 'ERC1155InvalidArrayLength',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'operator',\n type: 'address',\n },\n ],\n name: 'ERC1155InvalidOperator',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'receiver',\n type: 'address',\n },\n ],\n name: 'ERC1155InvalidReceiver',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'sender',\n type: 'address',\n },\n ],\n name: 'ERC1155InvalidSender',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'operator',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'ERC1155MissingApprovalForAll',\n type: 'error',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'operator',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'bool',\n name: 'approved',\n type: 'bool',\n },\n ],\n name: 'ApprovalForAll',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'operator',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256[]',\n name: 'ids',\n type: 'uint256[]',\n },\n {\n indexed: false,\n internalType: 'uint256[]',\n name: 'values',\n type: 'uint256[]',\n },\n ],\n name: 'TransferBatch',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'operator',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'id',\n type: 'uint256',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'TransferSingle',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'string',\n name: 'value',\n type: 'string',\n },\n {\n indexed: true,\n internalType: 'uint256',\n name: 'id',\n type: 'uint256',\n },\n ],\n name: 'URI',\n type: 'event',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'id',\n type: 'uint256',\n },\n ],\n name: 'balanceOf',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address[]',\n name: 'accounts',\n type: 'address[]',\n },\n {\n internalType: 'uint256[]',\n name: 'ids',\n type: 'uint256[]',\n },\n ],\n name: 'balanceOfBatch',\n outputs: [\n {\n internalType: 'uint256[]',\n name: '',\n type: 'uint256[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'operator',\n type: 'address',\n },\n ],\n name: 'isApprovedForAll',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'from',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n internalType: 'uint256[]',\n name: 'ids',\n type: 'uint256[]',\n },\n {\n internalType: 'uint256[]',\n name: 'values',\n type: 'uint256[]',\n },\n {\n internalType: 'bytes',\n name: 'data',\n type: 'bytes',\n },\n ],\n name: 'safeBatchTransferFrom',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'from',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'id',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'value',\n type: 'uint256',\n },\n {\n internalType: 'bytes',\n name: 'data',\n type: 'bytes',\n },\n ],\n name: 'safeTransferFrom',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'operator',\n type: 'address',\n },\n {\n internalType: 'bool',\n name: 'approved',\n type: 'bool',\n },\n ],\n name: 'setApprovalForAll',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes4',\n name: 'interfaceId',\n type: 'bytes4',\n },\n ],\n name: 'supportsInterface',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n name: 'uri',\n outputs: [\n {\n internalType: 'string',\n name: '',\n type: 'string',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n] as const\n\n/** [ERC-721 Non-Fungible Token Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-721) */\nexport const erc721Abi = [\n {\n type: 'event',\n name: 'Approval',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: true,\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'event',\n name: 'ApprovalForAll',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'operator',\n type: 'address',\n },\n {\n indexed: false,\n name: 'approved',\n type: 'bool',\n },\n ],\n },\n {\n type: 'event',\n name: 'Transfer',\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: true,\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'approve',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'balanceOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'getApproved',\n stateMutability: 'view',\n inputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'address',\n },\n ],\n },\n {\n type: 'function',\n name: 'isApprovedForAll',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'operator',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'name',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'ownerOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n name: 'owner',\n type: 'address',\n },\n ],\n },\n {\n type: 'function',\n name: 'safeTransferFrom',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'from',\n type: 'address',\n },\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'safeTransferFrom',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'from',\n type: 'address',\n },\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'id',\n type: 'uint256',\n },\n {\n name: 'data',\n type: 'bytes',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'setApprovalForAll',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'operator',\n type: 'address',\n },\n {\n name: 'approved',\n type: 'bool',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'symbol',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'tokenByIndex',\n stateMutability: 'view',\n inputs: [\n {\n name: 'index',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'tokenByIndex',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'index',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'tokenURI',\n stateMutability: 'view',\n inputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'totalSupply',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'transferFrom',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'sender',\n type: 'address',\n },\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [],\n },\n] as const\n\n/** [ERC-4626 Tokenized Vaults Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-4626) */\nexport const erc4626Abi = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'Approval',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'sender',\n type: 'address',\n },\n {\n indexed: true,\n name: 'receiver',\n type: 'address',\n },\n {\n indexed: false,\n name: 'assets',\n type: 'uint256',\n },\n {\n indexed: false,\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'Deposit',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'Transfer',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'sender',\n type: 'address',\n },\n {\n indexed: true,\n name: 'receiver',\n type: 'address',\n },\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: false,\n name: 'assets',\n type: 'uint256',\n },\n {\n indexed: false,\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'Withdraw',\n type: 'event',\n },\n {\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'spender',\n type: 'address',\n },\n ],\n name: 'allowance',\n outputs: [\n {\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'approve',\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'asset',\n outputs: [\n {\n name: 'assetTokenAddress',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n name: 'balanceOf',\n outputs: [\n {\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'convertToAssets',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n name: 'convertToShares',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n ],\n name: 'deposit',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'caller',\n type: 'address',\n },\n ],\n name: 'maxDeposit',\n outputs: [\n {\n name: 'maxAssets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'caller',\n type: 'address',\n },\n ],\n name: 'maxMint',\n outputs: [\n {\n name: 'maxShares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'maxRedeem',\n outputs: [\n {\n name: 'maxShares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'maxWithdraw',\n outputs: [\n {\n name: 'maxAssets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n ],\n name: 'mint',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n name: 'previewDeposit',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'previewMint',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'previewRedeem',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n name: 'previewWithdraw',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'redeem',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'totalAssets',\n outputs: [\n {\n name: 'totalManagedAssets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'totalSupply',\n outputs: [\n {\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'transfer',\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'from',\n type: 'address',\n },\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'transferFrom',\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'withdraw',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const\n", "export const aggregate3Signature = '0x82ad56cb'\n", "export const deploylessCallViaBytecodeBytecode =\n '0x608060405234801561001057600080fd5b5060405161018e38038061018e83398101604081905261002f91610124565b6000808351602085016000f59050803b61004857600080fd5b6000808351602085016000855af16040513d6000823e81610067573d81fd5b3d81f35b634e487b7160e01b600052604160045260246000fd5b600082601f83011261009257600080fd5b81516001600160401b038111156100ab576100ab61006b565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100d9576100d961006b565b6040528181528382016020018510156100f157600080fd5b60005b82811015610110576020818601810151838301820152016100f4565b506000918101602001919091529392505050565b6000806040838503121561013757600080fd5b82516001600160401b0381111561014d57600080fd5b61015985828601610081565b602085015190935090506001600160401b0381111561017757600080fd5b61018385828601610081565b915050925092905056fe'\n\nexport const deploylessCallViaFactoryBytecode =\n '0x608060405234801561001057600080fd5b506040516102c03803806102c083398101604081905261002f916101e6565b836001600160a01b03163b6000036100e457600080836001600160a01b03168360405161005c9190610270565b6000604051808303816000865af19150503d8060008114610099576040519150601f19603f3d011682016040523d82523d6000602084013e61009e565b606091505b50915091508115806100b857506001600160a01b0386163b155b156100e1578060405163101bb98d60e01b81526004016100d8919061028c565b60405180910390fd5b50505b6000808451602086016000885af16040513d6000823e81610103573d81fd5b3d81f35b80516001600160a01b038116811461011e57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561015457818101518382015260200161013c565b50506000910152565b600082601f83011261016e57600080fd5b81516001600160401b0381111561018757610187610123565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101b5576101b5610123565b6040528181528382016020018510156101cd57600080fd5b6101de826020830160208701610139565b949350505050565b600080600080608085870312156101fc57600080fd5b61020585610107565b60208601519094506001600160401b0381111561022157600080fd5b61022d8782880161015d565b93505061023c60408601610107565b60608601519092506001600160401b0381111561025857600080fd5b6102648782880161015d565b91505092959194509250565b60008251610282818460208701610139565b9190910192915050565b60208152600082518060208401526102ab816040850160208701610139565b601f01601f1916919091016040019291505056fe'\n\nexport const erc6492SignatureValidatorByteCode =\n '0x608060405234801561001057600080fd5b5060405161069438038061069483398101604081905261002f9161051e565b600061003c848484610048565b9050806000526001601ff35b60007f64926492649264926492649264926492649264926492649264926492649264926100748361040c565b036101e7576000606080848060200190518101906100929190610577565b60405192955090935091506000906001600160a01b038516906100b69085906105dd565b6000604051808303816000865af19150503d80600081146100f3576040519150601f19603f3d011682016040523d82523d6000602084013e6100f8565b606091505b50509050876001600160a01b03163b60000361016057806101605760405162461bcd60e51b815260206004820152601e60248201527f5369676e617475726556616c696461746f723a206465706c6f796d656e74000060448201526064015b60405180910390fd5b604051630b135d3f60e11b808252906001600160a01b038a1690631626ba7e90610190908b9087906004016105f9565b602060405180830381865afa1580156101ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d19190610633565b6001600160e01b03191614945050505050610405565b6001600160a01b0384163b1561027a57604051630b135d3f60e11b808252906001600160a01b03861690631626ba7e9061022790879087906004016105f9565b602060405180830381865afa158015610244573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102689190610633565b6001600160e01b031916149050610405565b81516041146102df5760405162461bcd60e51b815260206004820152603a602482015260008051602061067483398151915260448201527f3a20696e76616c6964207369676e6174757265206c656e6774680000000000006064820152608401610157565b6102e7610425565b5060208201516040808401518451859392600091859190811061030c5761030c61065d565b016020015160f81c9050601b811480159061032b57508060ff16601c14155b1561038c5760405162461bcd60e51b815260206004820152603b602482015260008051602061067483398151915260448201527f3a20696e76616c6964207369676e617475726520762076616c756500000000006064820152608401610157565b60408051600081526020810180835289905260ff83169181019190915260608101849052608081018390526001600160a01b0389169060019060a0016020604051602081039080840390855afa1580156103ea573d6000803e3d6000fd5b505050602060405103516001600160a01b0316149450505050505b9392505050565b600060208251101561041d57600080fd5b508051015190565b60405180606001604052806003906020820280368337509192915050565b6001600160a01b038116811461045857600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561048c578181015183820152602001610474565b50506000910152565b600082601f8301126104a657600080fd5b81516001600160401b038111156104bf576104bf61045b565b604051601f8201601f19908116603f011681016001600160401b03811182821017156104ed576104ed61045b565b60405281815283820160200185101561050557600080fd5b610516826020830160208701610471565b949350505050565b60008060006060848603121561053357600080fd5b835161053e81610443565b6020850151604086015191945092506001600160401b0381111561056157600080fd5b61056d86828701610495565b9150509250925092565b60008060006060848603121561058c57600080fd5b835161059781610443565b60208501519093506001600160401b038111156105b357600080fd5b6105bf86828701610495565b604086015190935090506001600160401b0381111561056157600080fd5b600082516105ef818460208701610471565b9190910192915050565b828152604060208201526000825180604084015261061e816060850160208701610471565b601f01601f1916919091016060019392505050565b60006020828403121561064557600080fd5b81516001600160e01b03198116811461040557600080fd5b634e487b7160e01b600052603260045260246000fdfe5369676e617475726556616c696461746f72237265636f7665725369676e6572'\n\nexport const multicall3Bytecode =\n '0x608060405234801561001057600080fd5b506115b9806100206000396000f3fe6080604052600436106100f35760003560e01c80634d2301cc1161008a578063a8b0574e11610059578063a8b0574e14610325578063bce38bd714610350578063c3077fa914610380578063ee82ac5e146103b2576100f3565b80634d2301cc1461026257806372425d9d1461029f57806382ad56cb146102ca57806386d516e8146102fa576100f3565b80633408e470116100c65780633408e470146101af578063399542e9146101da5780633e64a6961461020c57806342cbb15c14610237576100f3565b80630f28c97d146100f8578063174dea7114610123578063252dba421461015357806327e86d6e14610184575b600080fd5b34801561010457600080fd5b5061010d6103ef565b60405161011a9190610c0a565b60405180910390f35b61013d60048036038101906101389190610c94565b6103f7565b60405161014a9190610e94565b60405180910390f35b61016d60048036038101906101689190610f0c565b610615565b60405161017b92919061101b565b60405180910390f35b34801561019057600080fd5b506101996107ab565b6040516101a69190611064565b60405180910390f35b3480156101bb57600080fd5b506101c46107b7565b6040516101d19190610c0a565b60405180910390f35b6101f460048036038101906101ef91906110ab565b6107bf565b6040516102039392919061110b565b60405180910390f35b34801561021857600080fd5b506102216107e1565b60405161022e9190610c0a565b60405180910390f35b34801561024357600080fd5b5061024c6107e9565b6040516102599190610c0a565b60405180910390f35b34801561026e57600080fd5b50610289600480360381019061028491906111a7565b6107f1565b6040516102969190610c0a565b60405180910390f35b3480156102ab57600080fd5b506102b4610812565b6040516102c19190610c0a565b60405180910390f35b6102e460048036038101906102df919061122a565b61081a565b6040516102f19190610e94565b60405180910390f35b34801561030657600080fd5b5061030f6109e4565b60405161031c9190610c0a565b60405180910390f35b34801561033157600080fd5b5061033a6109ec565b6040516103479190611286565b60405180910390f35b61036a600480360381019061036591906110ab565b6109f4565b6040516103779190610e94565b60405180910390f35b61039a60048036038101906103959190610f0c565b610ba6565b6040516103a99392919061110b565b60405180910390f35b3480156103be57600080fd5b506103d960048036038101906103d491906112cd565b610bca565b6040516103e69190611064565b60405180910390f35b600042905090565b60606000808484905090508067ffffffffffffffff81111561041c5761041b6112fa565b5b60405190808252806020026020018201604052801561045557816020015b610442610bd5565b81526020019060019003908161043a5790505b5092503660005b828110156105c957600085828151811061047957610478611329565b5b6020026020010151905087878381811061049657610495611329565b5b90506020028101906104a89190611367565b925060008360400135905080860195508360000160208101906104cb91906111a7565b73ffffffffffffffffffffffffffffffffffffffff16818580606001906104f2919061138f565b604051610500929190611431565b60006040518083038185875af1925050503d806000811461053d576040519150601f19603f3d011682016040523d82523d6000602084013e610542565b606091505b5083600001846020018290528215151515815250505081516020850135176105bc577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260846000fd5b826001019250505061045c565b5082341461060c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610603906114a7565b60405180910390fd5b50505092915050565b6000606043915060008484905090508067ffffffffffffffff81111561063e5761063d6112fa565b5b60405190808252806020026020018201604052801561067157816020015b606081526020019060019003908161065c5790505b5091503660005b828110156107a157600087878381811061069557610694611329565b5b90506020028101906106a791906114c7565b92508260000160208101906106bc91906111a7565b73ffffffffffffffffffffffffffffffffffffffff168380602001906106e2919061138f565b6040516106f0929190611431565b6000604051808303816000865af19150503d806000811461072d576040519150601f19603f3d011682016040523d82523d6000602084013e610732565b606091505b5086848151811061074657610745611329565b5b60200260200101819052819250505080610795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078c9061153b565b60405180910390fd5b81600101915050610678565b5050509250929050565b60006001430340905090565b600046905090565b6000806060439250434091506107d68686866109f4565b905093509350939050565b600048905090565b600043905090565b60008173ffffffffffffffffffffffffffffffffffffffff16319050919050565b600044905090565b606060008383905090508067ffffffffffffffff81111561083e5761083d6112fa565b5b60405190808252806020026020018201604052801561087757816020015b610864610bd5565b81526020019060019003908161085c5790505b5091503660005b828110156109db57600084828151811061089b5761089a611329565b5b602002602001015190508686838181106108b8576108b7611329565b5b90506020028101906108ca919061155b565b92508260000160208101906108df91906111a7565b73ffffffffffffffffffffffffffffffffffffffff16838060400190610905919061138f565b604051610913929190611431565b6000604051808303816000865af19150503d8060008114610950576040519150601f19603f3d011682016040523d82523d6000602084013e610955565b606091505b5082600001836020018290528215151515815250505080516020840135176109cf577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260646000fd5b8160010191505061087e565b50505092915050565b600045905090565b600041905090565b606060008383905090508067ffffffffffffffff811115610a1857610a176112fa565b5b604051908082528060200260200182016040528015610a5157816020015b610a3e610bd5565b815260200190600190039081610a365790505b5091503660005b82811015610b9c576000848281518110610a7557610a74611329565b5b60200260200101519050868683818110610a9257610a91611329565b5b9050602002810190610aa491906114c7565b9250826000016020810190610ab991906111a7565b73ffffffffffffffffffffffffffffffffffffffff16838060200190610adf919061138f565b604051610aed929190611431565b6000604051808303816000865af19150503d8060008114610b2a576040519150601f19603f3d011682016040523d82523d6000602084013e610b2f565b606091505b508260000183602001829052821515151581525050508715610b90578060000151610b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b869061153b565b60405180910390fd5b5b81600101915050610a58565b5050509392505050565b6000806060610bb7600186866107bf565b8093508194508295505050509250925092565b600081409050919050565b6040518060400160405280600015158152602001606081525090565b6000819050919050565b610c0481610bf1565b82525050565b6000602082019050610c1f6000830184610bfb565b92915050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f840112610c5457610c53610c2f565b5b8235905067ffffffffffffffff811115610c7157610c70610c34565b5b602083019150836020820283011115610c8d57610c8c610c39565b5b9250929050565b60008060208385031215610cab57610caa610c25565b5b600083013567ffffffffffffffff811115610cc957610cc8610c2a565b5b610cd585828601610c3e565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60008115159050919050565b610d2281610d0d565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610d62578082015181840152602081019050610d47565b83811115610d71576000848401525b50505050565b6000601f19601f8301169050919050565b6000610d9382610d28565b610d9d8185610d33565b9350610dad818560208601610d44565b610db681610d77565b840191505092915050565b6000604083016000830151610dd96000860182610d19565b5060208301518482036020860152610df18282610d88565b9150508091505092915050565b6000610e0a8383610dc1565b905092915050565b6000602082019050919050565b6000610e2a82610ce1565b610e348185610cec565b935083602082028501610e4685610cfd565b8060005b85811015610e825784840389528151610e638582610dfe565b9450610e6e83610e12565b925060208a01995050600181019050610e4a565b50829750879550505050505092915050565b60006020820190508181036000830152610eae8184610e1f565b905092915050565b60008083601f840112610ecc57610ecb610c2f565b5b8235905067ffffffffffffffff811115610ee957610ee8610c34565b5b602083019150836020820283011115610f0557610f04610c39565b5b9250929050565b60008060208385031215610f2357610f22610c25565b5b600083013567ffffffffffffffff811115610f4157610f40610c2a565b5b610f4d85828601610eb6565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000610f918383610d88565b905092915050565b6000602082019050919050565b6000610fb182610f59565b610fbb8185610f64565b935083602082028501610fcd85610f75565b8060005b858110156110095784840389528151610fea8582610f85565b9450610ff583610f99565b925060208a01995050600181019050610fd1565b50829750879550505050505092915050565b60006040820190506110306000830185610bfb565b81810360208301526110428184610fa6565b90509392505050565b6000819050919050565b61105e8161104b565b82525050565b60006020820190506110796000830184611055565b92915050565b61108881610d0d565b811461109357600080fd5b50565b6000813590506110a58161107f565b92915050565b6000806000604084860312156110c4576110c3610c25565b5b60006110d286828701611096565b935050602084013567ffffffffffffffff8111156110f3576110f2610c2a565b5b6110ff86828701610eb6565b92509250509250925092565b60006060820190506111206000830186610bfb565b61112d6020830185611055565b818103604083015261113f8184610e1f565b9050949350505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061117482611149565b9050919050565b61118481611169565b811461118f57600080fd5b50565b6000813590506111a18161117b565b92915050565b6000602082840312156111bd576111bc610c25565b5b60006111cb84828501611192565b91505092915050565b60008083601f8401126111ea576111e9610c2f565b5b8235905067ffffffffffffffff81111561120757611206610c34565b5b60208301915083602082028301111561122357611222610c39565b5b9250929050565b6000806020838503121561124157611240610c25565b5b600083013567ffffffffffffffff81111561125f5761125e610c2a565b5b61126b858286016111d4565b92509250509250929050565b61128081611169565b82525050565b600060208201905061129b6000830184611277565b92915050565b6112aa81610bf1565b81146112b557600080fd5b50565b6000813590506112c7816112a1565b92915050565b6000602082840312156112e3576112e2610c25565b5b60006112f1848285016112b8565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008235600160800383360303811261138357611382611358565b5b80830191505092915050565b600080833560016020038436030381126113ac576113ab611358565b5b80840192508235915067ffffffffffffffff8211156113ce576113cd61135d565b5b6020830192506001820236038313156113ea576113e9611362565b5b509250929050565b600081905092915050565b82818337600083830152505050565b600061141883856113f2565b93506114258385846113fd565b82840190509392505050565b600061143e82848661140c565b91508190509392505050565b600082825260208201905092915050565b7f4d756c746963616c6c333a2076616c7565206d69736d61746368000000000000600082015250565b6000611491601a8361144a565b915061149c8261145b565b602082019050919050565b600060208201905081810360008301526114c081611484565b9050919050565b6000823560016040038336030381126114e3576114e2611358565b5b80830191505092915050565b7f4d756c746963616c6c333a2063616c6c206661696c6564000000000000000000600082015250565b600061152560178361144a565b9150611530826114ef565b602082019050919050565b6000602082019050818103600083015261155481611518565b9050919050565b60008235600160600383360303811261157757611576611358565b5b8083019150509291505056fea264697066735822122020c1bc9aacf8e4a6507193432a895a8e77094f45a1395583f07b24e860ef06cd64736f6c634300080c0033'\n", "import type { Chain } from '../types/chain.js'\n\nimport { BaseError } from './base.js'\n\nexport type ChainDoesNotSupportContractErrorType =\n ChainDoesNotSupportContract & {\n name: 'ChainDoesNotSupportContract'\n }\nexport class ChainDoesNotSupportContract extends BaseError {\n constructor({\n blockNumber,\n chain,\n contract,\n }: {\n blockNumber?: bigint | undefined\n chain: Chain\n contract: { name: string; blockCreated?: number | undefined }\n }) {\n super(\n `Chain \"${chain.name}\" does not support contract \"${contract.name}\".`,\n {\n metaMessages: [\n 'This could be due to any of the following:',\n ...(blockNumber &&\n contract.blockCreated &&\n contract.blockCreated > blockNumber\n ? [\n `- The contract \"${contract.name}\" was not deployed until block ${contract.blockCreated} (current block ${blockNumber}).`,\n ]\n : [\n `- The chain does not have the contract \"${contract.name}\" configured.`,\n ]),\n ],\n name: 'ChainDoesNotSupportContract',\n },\n )\n }\n}\n\nexport type ChainMismatchErrorType = ChainMismatchError & {\n name: 'ChainMismatchError'\n}\nexport class ChainMismatchError extends BaseError {\n constructor({\n chain,\n currentChainId,\n }: {\n chain: Chain\n currentChainId: number\n }) {\n super(\n `The current chain of the wallet (id: ${currentChainId}) does not match the target chain for the transaction (id: ${chain.id} \u2013 ${chain.name}).`,\n {\n metaMessages: [\n `Current Chain ID: ${currentChainId}`,\n `Expected Chain ID: ${chain.id} \u2013 ${chain.name}`,\n ],\n name: 'ChainMismatchError',\n },\n )\n }\n}\n\nexport type ChainNotFoundErrorType = ChainNotFoundError & {\n name: 'ChainNotFoundError'\n}\nexport class ChainNotFoundError extends BaseError {\n constructor() {\n super(\n [\n 'No chain was provided to the request.',\n 'Please provide a chain with the `chain` argument on the Action, or by supplying a `chain` to WalletClient.',\n ].join('\\n'),\n {\n name: 'ChainNotFoundError',\n },\n )\n }\n}\n\nexport type ClientChainNotConfiguredErrorType =\n ClientChainNotConfiguredError & {\n name: 'ClientChainNotConfiguredError'\n }\nexport class ClientChainNotConfiguredError extends BaseError {\n constructor() {\n super('No chain was provided to the Client.', {\n name: 'ClientChainNotConfiguredError',\n })\n }\n}\n\nexport type InvalidChainIdErrorType = InvalidChainIdError & {\n name: 'InvalidChainIdError'\n}\nexport class InvalidChainIdError extends BaseError {\n constructor({ chainId }: { chainId?: number | undefined }) {\n super(\n typeof chainId === 'number'\n ? `Chain ID \"${chainId}\" is invalid.`\n : 'Chain ID is invalid.',\n { name: 'InvalidChainIdError' },\n )\n }\n}\n", "import type { Abi } from 'abitype'\n\nimport {\n AbiConstructorNotFoundError,\n type AbiConstructorNotFoundErrorType,\n AbiConstructorParamsNotFoundError,\n} from '../../errors/abi.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ContractConstructorArgs } from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { UnionEvaluate } from '../../types/utils.js'\nimport { type ConcatHexErrorType, concatHex } from '../data/concat.js'\nimport {\n type EncodeAbiParametersErrorType,\n encodeAbiParameters,\n} from './encodeAbiParameters.js'\n\nconst docsPath = '/docs/contract/encodeDeployData'\n\nexport type EncodeDeployDataParameters<\n abi extends Abi | readonly unknown[] = Abi,\n ///\n hasConstructor = abi extends Abi\n ? Abi extends abi\n ? true\n : [Extract] extends [never]\n ? false\n : true\n : true,\n allArgs = ContractConstructorArgs,\n> = {\n abi: abi\n bytecode: Hex\n} & UnionEvaluate<\n hasConstructor extends false\n ? { args?: undefined }\n : readonly [] extends allArgs\n ? { args?: allArgs | undefined }\n : { args: allArgs }\n>\n\nexport type EncodeDeployDataReturnType = Hex\n\nexport type EncodeDeployDataErrorType =\n | AbiConstructorNotFoundErrorType\n | ConcatHexErrorType\n | EncodeAbiParametersErrorType\n | ErrorType\n\nexport function encodeDeployData(\n parameters: EncodeDeployDataParameters,\n): EncodeDeployDataReturnType {\n const { abi, args, bytecode } = parameters as EncodeDeployDataParameters\n if (!args || args.length === 0) return bytecode\n\n const description = abi.find((x) => 'type' in x && x.type === 'constructor')\n if (!description) throw new AbiConstructorNotFoundError({ docsPath })\n if (!('inputs' in description))\n throw new AbiConstructorParamsNotFoundError({ docsPath })\n if (!description.inputs || description.inputs.length === 0)\n throw new AbiConstructorParamsNotFoundError({ docsPath })\n\n const data = encodeAbiParameters(description.inputs, args)\n return concatHex([bytecode, data!])\n}\n", "import {\n ChainDoesNotSupportContract,\n type ChainDoesNotSupportContractErrorType,\n} from '../../errors/chain.js'\nimport type { Chain, ChainContract } from '../../types/chain.js'\n\nexport type GetChainContractAddressErrorType =\n ChainDoesNotSupportContractErrorType\n\nexport function getChainContractAddress({\n blockNumber,\n chain,\n contract: name,\n}: {\n blockNumber?: bigint | undefined\n chain: Chain\n contract: string\n}) {\n const contract = (chain?.contracts as Record)?.[name]\n if (!contract)\n throw new ChainDoesNotSupportContract({\n chain,\n contract: { name },\n })\n\n if (\n blockNumber &&\n contract.blockCreated &&\n contract.blockCreated > blockNumber\n )\n throw new ChainDoesNotSupportContract({\n blockNumber,\n chain,\n contract: {\n name,\n blockCreated: contract.blockCreated,\n },\n })\n\n return contract.address\n}\n", "import type { CallParameters } from '../../actions/public/call.js'\nimport type { BaseError } from '../../errors/base.js'\nimport {\n CallExecutionError,\n type CallExecutionErrorType,\n} from '../../errors/contract.js'\nimport { UnknownNodeError } from '../../errors/node.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\n\nimport {\n type GetNodeErrorParameters,\n type GetNodeErrorReturnType,\n getNodeError,\n} from './getNodeError.js'\n\nexport type GetCallErrorReturnType = Omit<\n CallExecutionErrorType,\n 'cause'\n> & {\n cause: cause | GetNodeErrorReturnType\n}\n\nexport function getCallError>(\n err: err,\n {\n docsPath,\n ...args\n }: CallParameters & {\n chain?: Chain | undefined\n docsPath?: string | undefined\n },\n): GetCallErrorReturnType {\n const cause = (() => {\n const cause = getNodeError(\n err as {} as BaseError,\n args as GetNodeErrorParameters,\n )\n if (cause instanceof UnknownNodeError) return err as {} as BaseError\n return cause\n })()\n return new CallExecutionError(cause, {\n docsPath,\n ...args,\n }) as GetCallErrorReturnType\n}\n", "/** @internal */\nexport type PromiseWithResolvers = {\n promise: Promise\n resolve: (value: type | PromiseLike) => void\n reject: (reason?: unknown) => void\n}\n\n/** @internal */\nexport function withResolvers(): PromiseWithResolvers {\n let resolve: PromiseWithResolvers['resolve'] = () => undefined\n let reject: PromiseWithResolvers['reject'] = () => undefined\n\n const promise = new Promise((resolve_, reject_) => {\n resolve = resolve_\n reject = reject_\n })\n\n return { promise, resolve, reject }\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport { type PromiseWithResolvers, withResolvers } from './withResolvers.js'\n\ntype Resolved = [\n result: returnType[number],\n results: returnType,\n]\n\ntype SchedulerItem = {\n args: unknown\n resolve: PromiseWithResolvers['resolve']\n reject: PromiseWithResolvers['reject']\n}\n\ntype BatchResultsCompareFn = (a: result, b: result) => number\n\ntype CreateBatchSchedulerArguments<\n parameters = unknown,\n returnType extends readonly unknown[] = readonly unknown[],\n> = {\n fn: (args: parameters[]) => Promise\n id: number | string\n shouldSplitBatch?: ((args: parameters[]) => boolean) | undefined\n wait?: number | undefined\n sort?: BatchResultsCompareFn | undefined\n}\n\ntype CreateBatchSchedulerReturnType<\n parameters = unknown,\n returnType extends readonly unknown[] = readonly unknown[],\n> = {\n flush: () => void\n schedule: parameters extends undefined\n ? (args?: parameters | undefined) => Promise>\n : (args: parameters) => Promise>\n}\n\nexport type CreateBatchSchedulerErrorType = ErrorType\n\nconst schedulerCache = /*#__PURE__*/ new Map()\n\n/** @internal */\nexport function createBatchScheduler<\n parameters,\n returnType extends readonly unknown[],\n>({\n fn,\n id,\n shouldSplitBatch,\n wait = 0,\n sort,\n}: CreateBatchSchedulerArguments<\n parameters,\n returnType\n>): CreateBatchSchedulerReturnType {\n const exec = async () => {\n const scheduler = getScheduler()\n flush()\n\n const args = scheduler.map(({ args }) => args)\n\n if (args.length === 0) return\n\n fn(args as parameters[])\n .then((data) => {\n if (sort && Array.isArray(data)) data.sort(sort)\n for (let i = 0; i < scheduler.length; i++) {\n const { resolve } = scheduler[i]\n resolve?.([data[i], data])\n }\n })\n .catch((err) => {\n for (let i = 0; i < scheduler.length; i++) {\n const { reject } = scheduler[i]\n reject?.(err)\n }\n })\n }\n\n const flush = () => schedulerCache.delete(id)\n\n const getBatchedArgs = () =>\n getScheduler().map(({ args }) => args) as parameters[]\n\n const getScheduler = () => schedulerCache.get(id) || []\n\n const setScheduler = (item: SchedulerItem) =>\n schedulerCache.set(id, [...getScheduler(), item])\n\n return {\n flush,\n async schedule(args: parameters) {\n const { promise, resolve, reject } = withResolvers()\n\n const split = shouldSplitBatch?.([...getBatchedArgs(), args])\n\n if (split) exec()\n\n const hasActiveScheduler = getScheduler().length > 0\n if (hasActiveScheduler) {\n setScheduler({ args, resolve, reject })\n return promise\n }\n\n setScheduler({ args, resolve, reject })\n setTimeout(exec, wait)\n return promise\n },\n } as unknown as CreateBatchSchedulerReturnType\n}\n", "import type { Address } from 'abitype'\n\nimport type { Hex } from '../types/misc.js'\nimport { stringify } from '../utils/stringify.js'\n\nimport { BaseError } from './base.js'\nimport { getUrl } from './utils.js'\n\nexport type OffchainLookupErrorType = OffchainLookupError & {\n name: 'OffchainLookupError'\n}\nexport class OffchainLookupError extends BaseError {\n constructor({\n callbackSelector,\n cause,\n data,\n extraData,\n sender,\n urls,\n }: {\n callbackSelector: Hex\n cause: BaseError\n data: Hex\n extraData: Hex\n sender: Address\n urls: readonly string[]\n }) {\n super(\n cause.shortMessage ||\n 'An error occurred while fetching for an offchain result.',\n {\n cause,\n metaMessages: [\n ...(cause.metaMessages || []),\n cause.metaMessages?.length ? '' : [],\n 'Offchain Gateway Call:',\n urls && [\n ' Gateway URL(s):',\n ...urls.map((url) => ` ${getUrl(url)}`),\n ],\n ` Sender: ${sender}`,\n ` Data: ${data}`,\n ` Callback selector: ${callbackSelector}`,\n ` Extra data: ${extraData}`,\n ].flat(),\n name: 'OffchainLookupError',\n },\n )\n }\n}\n\nexport type OffchainLookupResponseMalformedErrorType =\n OffchainLookupResponseMalformedError & {\n name: 'OffchainLookupResponseMalformedError'\n }\nexport class OffchainLookupResponseMalformedError extends BaseError {\n constructor({ result, url }: { result: any; url: string }) {\n super(\n 'Offchain gateway response is malformed. Response data must be a hex value.',\n {\n metaMessages: [\n `Gateway URL: ${getUrl(url)}`,\n `Response: ${stringify(result)}`,\n ],\n name: 'OffchainLookupResponseMalformedError',\n },\n )\n }\n}\n\n/** @internal */\nexport type OffchainLookupSenderMismatchErrorType =\n OffchainLookupSenderMismatchError & {\n name: 'OffchainLookupSenderMismatchError'\n }\nexport class OffchainLookupSenderMismatchError extends BaseError {\n constructor({ sender, to }: { sender: Address; to: Address }) {\n super(\n 'Reverted sender address does not match target contract address (`to`).',\n {\n metaMessages: [\n `Contract address: ${to}`,\n `OffchainLookup sender address: ${sender}`,\n ],\n name: 'OffchainLookupSenderMismatchError',\n },\n )\n }\n}\n", "import type { Abi, AbiStateMutability } from 'abitype'\n\nimport { AbiFunctionSignatureNotFoundError } from '../../errors/abi.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n ContractFunctionArgs,\n ContractFunctionName,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { IsNarrowable, UnionEvaluate } from '../../types/utils.js'\nimport { type SliceErrorType, slice } from '../data/slice.js'\nimport {\n type ToFunctionSelectorErrorType,\n toFunctionSelector,\n} from '../hash/toFunctionSelector.js'\nimport {\n type DecodeAbiParametersErrorType,\n decodeAbiParameters,\n} from './decodeAbiParameters.js'\nimport { type FormatAbiItemErrorType, formatAbiItem } from './formatAbiItem.js'\n\nexport type DecodeFunctionDataParameters<\n abi extends Abi | readonly unknown[] = Abi,\n> = {\n abi: abi\n data: Hex\n}\n\nexport type DecodeFunctionDataReturnType<\n abi extends Abi | readonly unknown[] = Abi,\n ///\n allFunctionNames extends\n ContractFunctionName = ContractFunctionName,\n> = IsNarrowable extends true\n ? UnionEvaluate<\n {\n [functionName in allFunctionNames]: {\n args: ContractFunctionArgs\n functionName: functionName\n }\n }[allFunctionNames]\n >\n : {\n args: readonly unknown[] | undefined\n functionName: string\n }\n\nexport type DecodeFunctionDataErrorType =\n | AbiFunctionSignatureNotFoundError\n | DecodeAbiParametersErrorType\n | FormatAbiItemErrorType\n | ToFunctionSelectorErrorType\n | SliceErrorType\n | ErrorType\n\nexport function decodeFunctionData(\n parameters: DecodeFunctionDataParameters,\n) {\n const { abi, data } = parameters as DecodeFunctionDataParameters\n const signature = slice(data, 0, 4)\n const description = abi.find(\n (x) =>\n x.type === 'function' &&\n signature === toFunctionSelector(formatAbiItem(x)),\n )\n if (!description)\n throw new AbiFunctionSignatureNotFoundError(signature, {\n docsPath: '/docs/contract/decodeFunctionData',\n })\n return {\n functionName: (description as { name: string }).name,\n args: ('inputs' in description &&\n description.inputs &&\n description.inputs.length > 0\n ? decodeAbiParameters(description.inputs, slice(data, 4))\n : undefined) as readonly unknown[] | undefined,\n } as DecodeFunctionDataReturnType\n}\n", "import type { Abi, ExtractAbiErrors } from 'abitype'\n\nimport {\n AbiErrorInputsNotFoundError,\n AbiErrorNotFoundError,\n} from '../../errors/abi.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n ContractErrorArgs,\n ContractErrorName,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { IsNarrowable, UnionEvaluate } from '../../types/utils.js'\nimport { type ConcatHexErrorType, concatHex } from '../data/concat.js'\nimport {\n type ToFunctionSelectorErrorType,\n toFunctionSelector,\n} from '../hash/toFunctionSelector.js'\nimport {\n type EncodeAbiParametersErrorType,\n encodeAbiParameters,\n} from './encodeAbiParameters.js'\nimport { type FormatAbiItemErrorType, formatAbiItem } from './formatAbiItem.js'\nimport { type GetAbiItemErrorType, getAbiItem } from './getAbiItem.js'\n\nconst docsPath = '/docs/contract/encodeErrorResult'\n\nexport type EncodeErrorResultParameters<\n abi extends Abi | readonly unknown[] = Abi,\n errorName extends ContractErrorName | undefined = ContractErrorName,\n ///\n hasErrors = abi extends Abi\n ? Abi extends abi\n ? true\n : [ExtractAbiErrors] extends [never]\n ? false\n : true\n : true,\n allArgs = ContractErrorArgs<\n abi,\n errorName extends ContractErrorName\n ? errorName\n : ContractErrorName\n >,\n allErrorNames = ContractErrorName,\n> = {\n abi: abi\n args?: allArgs | undefined\n} & UnionEvaluate<\n IsNarrowable extends true\n ? abi['length'] extends 1\n ? { errorName?: errorName | allErrorNames | undefined }\n : { errorName: errorName | allErrorNames }\n : { errorName?: errorName | allErrorNames | undefined }\n> &\n (hasErrors extends true ? unknown : never)\n\nexport type EncodeErrorResultReturnType = Hex\n\nexport type EncodeErrorResultErrorType =\n | GetAbiItemErrorType\n | FormatAbiItemErrorType\n | ToFunctionSelectorErrorType\n | EncodeAbiParametersErrorType\n | ConcatHexErrorType\n | ErrorType\n\nexport function encodeErrorResult<\n const abi extends Abi | readonly unknown[],\n errorName extends ContractErrorName | undefined = undefined,\n>(\n parameters: EncodeErrorResultParameters,\n): EncodeErrorResultReturnType {\n const { abi, errorName, args } = parameters as EncodeErrorResultParameters\n\n let abiItem = abi[0]\n if (errorName) {\n const item = getAbiItem({ abi, args, name: errorName })\n if (!item) throw new AbiErrorNotFoundError(errorName, { docsPath })\n abiItem = item\n }\n\n if (abiItem.type !== 'error')\n throw new AbiErrorNotFoundError(undefined, { docsPath })\n\n const definition = formatAbiItem(abiItem)\n const signature = toFunctionSelector(definition)\n\n let data: Hex = '0x'\n if (args && args.length > 0) {\n if (!abiItem.inputs)\n throw new AbiErrorInputsNotFoundError(abiItem.name, { docsPath })\n data = encodeAbiParameters(abiItem.inputs, args)\n }\n return concatHex([signature, data])\n}\n", "import type { Abi, AbiStateMutability, ExtractAbiFunctions } from 'abitype'\n\nimport {\n AbiFunctionNotFoundError,\n AbiFunctionOutputsNotFoundError,\n InvalidArrayError,\n} from '../../errors/abi.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n ContractFunctionName,\n ContractFunctionReturnType,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { IsNarrowable, UnionEvaluate } from '../../types/utils.js'\nimport {\n type EncodeAbiParametersErrorType,\n encodeAbiParameters,\n} from './encodeAbiParameters.js'\nimport { type GetAbiItemErrorType, getAbiItem } from './getAbiItem.js'\n\nconst docsPath = '/docs/contract/encodeFunctionResult'\n\nexport type EncodeFunctionResultParameters<\n abi extends Abi | readonly unknown[] = Abi,\n functionName extends\n | ContractFunctionName\n | undefined = ContractFunctionName,\n ///\n hasFunctions = abi extends Abi\n ? Abi extends abi\n ? true\n : [ExtractAbiFunctions] extends [never]\n ? false\n : true\n : true,\n allFunctionNames = ContractFunctionName,\n> = {\n abi: abi\n result?:\n | ContractFunctionReturnType<\n abi,\n AbiStateMutability,\n functionName extends ContractFunctionName\n ? functionName\n : ContractFunctionName,\n never // allow all args. required for overloads to work.\n >\n | undefined\n} & UnionEvaluate<\n IsNarrowable extends true\n ? abi['length'] extends 1\n ? { functionName?: functionName | allFunctionNames | undefined }\n : { functionName: functionName | allFunctionNames }\n : { functionName?: functionName | allFunctionNames | undefined }\n> &\n (hasFunctions extends true ? unknown : never)\n\nexport type EncodeFunctionResultReturnType = Hex\n\nexport type EncodeFunctionResultErrorType =\n | AbiFunctionOutputsNotFoundError\n | AbiFunctionNotFoundError\n | EncodeAbiParametersErrorType\n | GetAbiItemErrorType\n | ErrorType\n\nexport function encodeFunctionResult<\n const abi extends Abi | readonly unknown[],\n functionName extends ContractFunctionName | undefined = undefined,\n>(\n parameters: EncodeFunctionResultParameters,\n): EncodeFunctionResultReturnType {\n const { abi, functionName, result } =\n parameters as EncodeFunctionResultParameters\n\n let abiItem = abi[0]\n if (functionName) {\n const item = getAbiItem({ abi, name: functionName })\n if (!item) throw new AbiFunctionNotFoundError(functionName, { docsPath })\n abiItem = item\n }\n\n if (abiItem.type !== 'function')\n throw new AbiFunctionNotFoundError(undefined, { docsPath })\n\n if (!abiItem.outputs)\n throw new AbiFunctionOutputsNotFoundError(abiItem.name, { docsPath })\n\n const values = (() => {\n if (abiItem.outputs.length === 0) return []\n if (abiItem.outputs.length === 1) return [result]\n if (Array.isArray(result)) return result\n throw new InvalidArrayError(result)\n })()\n\n return encodeAbiParameters(abiItem.outputs, values)\n}\n", "import { batchGatewayAbi } from '../../constants/abis.js'\nimport { solidityError } from '../../constants/solidity.js'\nimport type { Hex } from '../../types/misc.js'\nimport { decodeFunctionData } from '../abi/decodeFunctionData.js'\nimport { encodeErrorResult } from '../abi/encodeErrorResult.js'\nimport { encodeFunctionResult } from '../abi/encodeFunctionResult.js'\nimport type {\n CcipRequestErrorType,\n CcipRequestParameters,\n CcipRequestReturnType,\n} from '../ccip.js'\n\nexport const localBatchGatewayUrl = 'x-batch-gateway:true'\n\nexport async function localBatchGatewayRequest(parameters: {\n data: Hex\n ccipRequest: (\n parameters: CcipRequestParameters,\n ) => Promise\n}): Promise {\n const { data, ccipRequest } = parameters\n\n const {\n args: [queries],\n } = decodeFunctionData({ abi: batchGatewayAbi, data })\n\n const failures: boolean[] = []\n const responses: Hex[] = []\n await Promise.all(\n queries.map(async (query, i) => {\n try {\n responses[i] = query.urls.includes(localBatchGatewayUrl)\n ? await localBatchGatewayRequest({ data: query.data, ccipRequest })\n : await ccipRequest(query)\n failures[i] = false\n } catch (err) {\n failures[i] = true\n responses[i] = encodeError(err as CcipRequestErrorType)\n }\n }),\n )\n\n return encodeFunctionResult({\n abi: batchGatewayAbi,\n functionName: 'query',\n result: [failures, responses],\n })\n}\n\nfunction encodeError(error: CcipRequestErrorType): Hex {\n if (error.name === 'HttpRequestError' && error.status)\n return encodeErrorResult({\n abi: batchGatewayAbi,\n errorName: 'HttpError',\n args: [error.status, error.shortMessage],\n })\n return encodeErrorResult({\n abi: [solidityError],\n errorName: 'Error',\n args: ['shortMessage' in error ? error.shortMessage : error.message],\n })\n}\n", "import type { Abi, Address } from 'abitype'\n\nimport { type CallParameters, call } from '../actions/public/call.js'\nimport type { Client } from '../clients/createClient.js'\nimport type { Transport } from '../clients/transports/createTransport.js'\nimport type { BaseError } from '../errors/base.js'\nimport {\n OffchainLookupError,\n type OffchainLookupErrorType as OffchainLookupErrorType_,\n OffchainLookupResponseMalformedError,\n type OffchainLookupResponseMalformedErrorType,\n OffchainLookupSenderMismatchError,\n} from '../errors/ccip.js'\nimport {\n HttpRequestError,\n type HttpRequestErrorType,\n} from '../errors/request.js'\nimport type { ErrorType } from '../errors/utils.js'\nimport type { Chain } from '../types/chain.js'\nimport type { Hex } from '../types/misc.js'\nimport { decodeErrorResult } from './abi/decodeErrorResult.js'\nimport { encodeAbiParameters } from './abi/encodeAbiParameters.js'\nimport { isAddressEqual } from './address/isAddressEqual.js'\nimport { concat } from './data/concat.js'\nimport { isHex } from './data/isHex.js'\nimport {\n localBatchGatewayRequest,\n localBatchGatewayUrl,\n} from './ens/localBatchGatewayRequest.js'\nimport { stringify } from './stringify.js'\n\nexport const offchainLookupSignature = '0x556f1830'\nexport const offchainLookupAbiItem = {\n name: 'OffchainLookup',\n type: 'error',\n inputs: [\n {\n name: 'sender',\n type: 'address',\n },\n {\n name: 'urls',\n type: 'string[]',\n },\n {\n name: 'callData',\n type: 'bytes',\n },\n {\n name: 'callbackFunction',\n type: 'bytes4',\n },\n {\n name: 'extraData',\n type: 'bytes',\n },\n ],\n} as const satisfies Abi[number]\n\nexport type OffchainLookupErrorType = OffchainLookupErrorType_ | ErrorType\n\nexport async function offchainLookup(\n client: Client,\n {\n blockNumber,\n blockTag,\n data,\n to,\n }: Pick & {\n data: Hex\n to: Address\n },\n): Promise {\n const { args } = decodeErrorResult({\n data,\n abi: [offchainLookupAbiItem],\n })\n const [sender, urls, callData, callbackSelector, extraData] = args\n\n const { ccipRead } = client\n const ccipRequest_ =\n ccipRead && typeof ccipRead?.request === 'function'\n ? ccipRead.request\n : ccipRequest\n\n try {\n if (!isAddressEqual(to, sender))\n throw new OffchainLookupSenderMismatchError({ sender, to })\n\n const result = urls.includes(localBatchGatewayUrl)\n ? await localBatchGatewayRequest({\n data: callData,\n ccipRequest: ccipRequest_,\n })\n : await ccipRequest_({ data: callData, sender, urls })\n\n const { data: data_ } = await call(client, {\n blockNumber,\n blockTag,\n data: concat([\n callbackSelector,\n encodeAbiParameters(\n [{ type: 'bytes' }, { type: 'bytes' }],\n [result, extraData],\n ),\n ]),\n to,\n } as CallParameters)\n\n return data_!\n } catch (err) {\n throw new OffchainLookupError({\n callbackSelector,\n cause: err as BaseError,\n data,\n extraData,\n sender,\n urls,\n })\n }\n}\n\nexport type CcipRequestParameters = {\n data: Hex\n sender: Address\n urls: readonly string[]\n}\n\nexport type CcipRequestReturnType = Hex\n\nexport type CcipRequestErrorType =\n | HttpRequestErrorType\n | OffchainLookupResponseMalformedErrorType\n | ErrorType\n\nexport async function ccipRequest({\n data,\n sender,\n urls,\n}: CcipRequestParameters): Promise {\n let error = new Error('An unknown error occurred.')\n\n for (let i = 0; i < urls.length; i++) {\n const url = urls[i]\n const method = url.includes('{data}') ? 'GET' : 'POST'\n const body = method === 'POST' ? { data, sender } : undefined\n const headers: HeadersInit =\n method === 'POST' ? { 'Content-Type': 'application/json' } : {}\n\n try {\n const response = await fetch(\n url.replace('{sender}', sender.toLowerCase()).replace('{data}', data),\n {\n body: JSON.stringify(body),\n headers,\n method,\n },\n )\n\n let result: any\n if (\n response.headers.get('Content-Type')?.startsWith('application/json')\n ) {\n result = (await response.json()).data\n } else {\n result = (await response.text()) as any\n }\n\n if (!response.ok) {\n error = new HttpRequestError({\n body,\n details: result?.error\n ? stringify(result.error)\n : response.statusText,\n headers: response.headers,\n status: response.status,\n url,\n })\n continue\n }\n\n if (!isHex(result)) {\n error = new OffchainLookupResponseMalformedError({\n result,\n url,\n })\n continue\n }\n\n return result\n } catch (err) {\n error = new HttpRequestError({\n body,\n details: (err as Error).message,\n url,\n })\n }\n }\n\n throw error\n}\n", "import { type Address, parseAbi } from 'abitype'\nimport * as BlockOverrides from 'ox/BlockOverrides'\n\nimport type { Account } from '../../accounts/types.js'\nimport {\n type ParseAccountErrorType,\n parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { multicall3Abi } from '../../constants/abis.js'\nimport { aggregate3Signature } from '../../constants/contract.js'\nimport {\n deploylessCallViaBytecodeBytecode,\n deploylessCallViaFactoryBytecode,\n multicall3Bytecode,\n} from '../../constants/contracts.js'\nimport { BaseError } from '../../errors/base.js'\nimport {\n ChainDoesNotSupportContract,\n ClientChainNotConfiguredError,\n} from '../../errors/chain.js'\nimport {\n CounterfactualDeploymentFailedError,\n RawContractError,\n type RawContractErrorType,\n} from '../../errors/contract.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { RpcTransactionRequest } from '../../types/rpc.js'\nimport type { StateOverride } from '../../types/stateOverride.js'\nimport type { TransactionRequest } from '../../types/transaction.js'\nimport type { ExactPartial, UnionOmit } from '../../types/utils.js'\nimport {\n type DecodeFunctionResultErrorType,\n decodeFunctionResult,\n} from '../../utils/abi/decodeFunctionResult.js'\nimport {\n type EncodeDeployDataErrorType,\n encodeDeployData,\n} from '../../utils/abi/encodeDeployData.js'\nimport {\n type EncodeFunctionDataErrorType,\n encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type GetChainContractAddressErrorType,\n getChainContractAddress,\n} from '../../utils/chain/getChainContractAddress.js'\nimport {\n type NumberToHexErrorType,\n numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport {\n type GetCallErrorReturnType,\n getCallError,\n} from '../../utils/errors/getCallError.js'\nimport { extract } from '../../utils/formatters/extract.js'\nimport {\n type FormatTransactionRequestErrorType,\n type FormattedTransactionRequest,\n formatTransactionRequest,\n} from '../../utils/formatters/transactionRequest.js'\nimport {\n type CreateBatchSchedulerErrorType,\n createBatchScheduler,\n} from '../../utils/promise/createBatchScheduler.js'\nimport {\n type SerializeStateOverrideErrorType,\n serializeStateOverride,\n} from '../../utils/stateOverride.js'\nimport type {\n AssertRequestErrorType,\n AssertRequestParameters,\n} from '../../utils/transaction/assertRequest.js'\nimport { assertRequest } from '../../utils/transaction/assertRequest.js'\n\nexport type CallParameters<\n chain extends Chain | undefined = Chain | undefined,\n> = UnionOmit, 'from'> & {\n /** Account attached to the call (msg.sender). */\n account?: Account | Address | undefined\n /** Whether or not to enable multicall batching on this call. */\n batch?: boolean | undefined\n /** Block overrides for the call. */\n blockOverrides?: BlockOverrides.BlockOverrides | undefined\n /** Bytecode to perform the call on. */\n code?: Hex | undefined\n /** Contract deployment factory address (ie. Create2 factory, Smart Account factory, etc). */\n factory?: Address | undefined\n /** Calldata to execute on the factory to deploy the contract. */\n factoryData?: Hex | undefined\n /** State overrides for the call. */\n stateOverride?: StateOverride | undefined\n} & (\n | {\n /** The balance of the account at a block number. */\n blockNumber?: bigint | undefined\n blockTag?: undefined\n }\n | {\n blockNumber?: undefined\n /**\n * The balance of the account at a block tag.\n * @default 'latest'\n */\n blockTag?: BlockTag | undefined\n }\n )\ntype FormattedCall =\n FormattedTransactionRequest\n\nexport type CallReturnType = { data: Hex | undefined }\n\nexport type CallErrorType = GetCallErrorReturnType<\n | ParseAccountErrorType\n | SerializeStateOverrideErrorType\n | AssertRequestErrorType\n | NumberToHexErrorType\n | FormatTransactionRequestErrorType\n | ScheduleMulticallErrorType\n | RequestErrorType\n | ToDeploylessCallViaBytecodeDataErrorType\n | ToDeploylessCallViaFactoryDataErrorType\n>\n\n/**\n * Executes a new message call immediately without submitting a transaction to the network.\n *\n * - Docs: https://viem.sh/docs/actions/public/call\n * - JSON-RPC Methods: [`eth_call`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_call)\n *\n * @param client - Client to use\n * @param parameters - {@link CallParameters}\n * @returns The call data. {@link CallReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { call } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const data = await call(client, {\n * account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',\n * data: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * })\n */\nexport async function call(\n client: Client,\n args: CallParameters,\n): Promise {\n const {\n account: account_ = client.account,\n authorizationList,\n batch = Boolean(client.batch?.multicall),\n blockNumber,\n blockTag = client.experimental_blockTag ?? 'latest',\n accessList,\n blobs,\n blockOverrides,\n code,\n data: data_,\n factory,\n factoryData,\n gas,\n gasPrice,\n maxFeePerBlobGas,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce,\n to,\n value,\n stateOverride,\n ...rest\n } = args\n const account = account_ ? parseAccount(account_) : undefined\n\n if (code && (factory || factoryData))\n throw new BaseError(\n 'Cannot provide both `code` & `factory`/`factoryData` as parameters.',\n )\n if (code && to)\n throw new BaseError('Cannot provide both `code` & `to` as parameters.')\n\n // Check if the call is deployless via bytecode.\n const deploylessCallViaBytecode = code && data_\n // Check if the call is deployless via a factory.\n const deploylessCallViaFactory = factory && factoryData && to && data_\n const deploylessCall = deploylessCallViaBytecode || deploylessCallViaFactory\n\n const data = (() => {\n if (deploylessCallViaBytecode)\n return toDeploylessCallViaBytecodeData({\n code,\n data: data_,\n })\n if (deploylessCallViaFactory)\n return toDeploylessCallViaFactoryData({\n data: data_,\n factory,\n factoryData,\n to,\n })\n return data_\n })()\n\n try {\n assertRequest(args as AssertRequestParameters)\n\n const blockNumberHex =\n typeof blockNumber === 'bigint' ? numberToHex(blockNumber) : undefined\n const block = blockNumberHex || blockTag\n\n const rpcBlockOverrides = blockOverrides\n ? BlockOverrides.toRpc(blockOverrides)\n : undefined\n const rpcStateOverride = serializeStateOverride(stateOverride)\n\n const chainFormat = client.chain?.formatters?.transactionRequest?.format\n const format = chainFormat || formatTransactionRequest\n\n const request = format(\n {\n // Pick out extra data that might exist on the chain's transaction request type.\n ...extract(rest, { format: chainFormat }),\n accessList,\n account,\n authorizationList,\n blobs,\n data,\n gas,\n gasPrice,\n maxFeePerBlobGas,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce,\n to: deploylessCall ? undefined : to,\n value,\n } as TransactionRequest,\n 'call',\n ) as TransactionRequest\n\n if (\n batch &&\n shouldPerformMulticall({ request }) &&\n !rpcStateOverride &&\n !rpcBlockOverrides\n ) {\n try {\n return await scheduleMulticall(client, {\n ...request,\n blockNumber,\n blockTag,\n } as unknown as ScheduleMulticallParameters)\n } catch (err) {\n if (\n !(err instanceof ClientChainNotConfiguredError) &&\n !(err instanceof ChainDoesNotSupportContract)\n )\n throw err\n }\n }\n\n const params = (() => {\n const base = [\n request as ExactPartial,\n block,\n ] as const\n if (rpcStateOverride && rpcBlockOverrides)\n return [...base, rpcStateOverride, rpcBlockOverrides] as const\n if (rpcStateOverride) return [...base, rpcStateOverride] as const\n if (rpcBlockOverrides) return [...base, {}, rpcBlockOverrides] as const\n return base\n })()\n\n const response = await client.request({\n method: 'eth_call',\n params,\n })\n if (response === '0x') return { data: undefined }\n return { data: response }\n } catch (err) {\n const data = getRevertErrorData(err)\n\n // Check for CCIP-Read offchain lookup signature.\n const { offchainLookup, offchainLookupSignature } = await import(\n '../../utils/ccip.js'\n )\n if (\n client.ccipRead !== false &&\n data?.slice(0, 10) === offchainLookupSignature &&\n to\n )\n return { data: await offchainLookup(client, { data, to }) }\n\n // Check for counterfactual deployment error.\n if (deploylessCall && data?.slice(0, 10) === '0x101bb98d')\n throw new CounterfactualDeploymentFailedError({ factory })\n\n throw getCallError(err as ErrorType, {\n ...args,\n account,\n chain: client.chain,\n })\n }\n}\n\n// We only want to perform a scheduled multicall if:\n// - The request has calldata,\n// - The request has a target address,\n// - The target address is not already the aggregate3 signature,\n// - The request has no other properties (`nonce`, `gas`, etc cannot be sent with a multicall).\nfunction shouldPerformMulticall({ request }: { request: TransactionRequest }) {\n const { data, to, ...request_ } = request\n if (!data) return false\n if (data.startsWith(aggregate3Signature)) return false\n if (!to) return false\n if (\n Object.values(request_).filter((x) => typeof x !== 'undefined').length > 0\n )\n return false\n return true\n}\n\ntype ScheduleMulticallParameters = Pick<\n CallParameters,\n 'blockNumber' | 'blockTag'\n> & {\n data: Hex\n multicallAddress?: Address | undefined\n to: Address\n}\n\ntype ScheduleMulticallErrorType =\n | GetChainContractAddressErrorType\n | NumberToHexErrorType\n | CreateBatchSchedulerErrorType\n | EncodeFunctionDataErrorType\n | DecodeFunctionResultErrorType\n | RawContractErrorType\n | ErrorType\n\nasync function scheduleMulticall(\n client: Client,\n args: ScheduleMulticallParameters,\n) {\n const {\n batchSize = 1024,\n deployless = false,\n wait = 0,\n } = typeof client.batch?.multicall === 'object' ? client.batch.multicall : {}\n const {\n blockNumber,\n blockTag = client.experimental_blockTag ?? 'latest',\n data,\n to,\n } = args\n\n const multicallAddress = (() => {\n if (deployless) return null\n if (args.multicallAddress) return args.multicallAddress\n if (client.chain) {\n return getChainContractAddress({\n blockNumber,\n chain: client.chain,\n contract: 'multicall3',\n })\n }\n throw new ClientChainNotConfiguredError()\n })()\n\n const blockNumberHex =\n typeof blockNumber === 'bigint' ? numberToHex(blockNumber) : undefined\n const block = blockNumberHex || blockTag\n\n const { schedule } = createBatchScheduler({\n id: `${client.uid}.${block}`,\n wait,\n shouldSplitBatch(args) {\n const size = args.reduce((size, { data }) => size + (data.length - 2), 0)\n return size > batchSize * 2\n },\n fn: async (\n requests: {\n data: Hex\n to: Address\n }[],\n ) => {\n const calls = requests.map((request) => ({\n allowFailure: true,\n callData: request.data,\n target: request.to,\n }))\n\n const calldata = encodeFunctionData({\n abi: multicall3Abi,\n args: [calls],\n functionName: 'aggregate3',\n })\n\n const data = await client.request({\n method: 'eth_call',\n params: [\n {\n ...(multicallAddress === null\n ? {\n data: toDeploylessCallViaBytecodeData({\n code: multicall3Bytecode,\n data: calldata,\n }),\n }\n : { to: multicallAddress, data: calldata }),\n },\n block,\n ],\n })\n\n return decodeFunctionResult({\n abi: multicall3Abi,\n args: [calls],\n functionName: 'aggregate3',\n data: data || '0x',\n })\n },\n })\n\n const [{ returnData, success }] = await schedule({ data, to })\n\n if (!success) throw new RawContractError({ data: returnData })\n if (returnData === '0x') return { data: undefined }\n return { data: returnData }\n}\n\ntype ToDeploylessCallViaBytecodeDataErrorType =\n | EncodeDeployDataErrorType\n | ErrorType\n\nfunction toDeploylessCallViaBytecodeData(parameters: { code: Hex; data: Hex }) {\n const { code, data } = parameters\n return encodeDeployData({\n abi: parseAbi(['constructor(bytes, bytes)']),\n bytecode: deploylessCallViaBytecodeBytecode,\n args: [code, data],\n })\n}\n\ntype ToDeploylessCallViaFactoryDataErrorType =\n | EncodeDeployDataErrorType\n | ErrorType\n\nfunction toDeploylessCallViaFactoryData(parameters: {\n data: Hex\n factory: Address\n factoryData: Hex\n to: Address\n}) {\n const { data, factory, factoryData, to } = parameters\n return encodeDeployData({\n abi: parseAbi(['constructor(address, bytes, address, bytes)']),\n bytecode: deploylessCallViaFactoryBytecode,\n args: [to, data, factory, factoryData],\n })\n}\n\n/** @internal */\nexport type GetRevertErrorDataErrorType = ErrorType\n\n/** @internal */\nexport function getRevertErrorData(err: unknown) {\n if (!(err instanceof BaseError)) return undefined\n const error = err.walk() as RawContractError\n return typeof error?.data === 'object' ? error.data?.data : error.data\n}\n", "import type { Client } from '../clients/createClient.js'\nimport type { PublicActions } from '../clients/decorators/public.js'\nimport type { WalletActions } from '../clients/decorators/wallet.js'\nimport type { Transport } from '../clients/transports/createTransport.js'\nimport type { Account } from '../types/account.js'\nimport type { Chain } from '../types/chain.js'\nimport type { RpcSchema } from '../types/eip1193.js'\n\n/**\n * Retrieves and returns an action from the client (if exists), and falls\n * back to the tree-shakable action.\n *\n * Useful for extracting overridden actions from a client (ie. if a consumer\n * wants to override the `sendTransaction` implementation).\n */\nexport function getAction<\n transport extends Transport,\n chain extends Chain | undefined,\n account extends Account | undefined,\n rpcSchema extends RpcSchema | undefined,\n extended extends { [key: string]: unknown },\n client extends Client,\n parameters,\n returnType,\n>(\n client: client,\n actionFn: (_: any, parameters: parameters) => returnType,\n // Some minifiers drop `Function.prototype.name`, or replace it with short letters,\n // meaning that `actionFn.name` will not always work. For that case, the consumer\n // needs to pass the name explicitly.\n name: keyof PublicActions | keyof WalletActions | (string & {}),\n): (parameters: parameters) => returnType {\n const action_implicit = client[actionFn.name]\n if (typeof action_implicit === 'function')\n return action_implicit as (params: parameters) => returnType\n\n const action_explicit = client[name]\n if (typeof action_explicit === 'function')\n return action_explicit as (params: parameters) => returnType\n\n return (params) => actionFn(client, params)\n}\n", "import type {\n Abi,\n AbiParameter,\n AbiParameterToPrimitiveType,\n ExtractAbiEvents,\n} from 'abitype'\n\nimport {\n AbiEventNotFoundError,\n type AbiEventNotFoundErrorType,\n} from '../../errors/abi.js'\nimport {\n FilterTypeNotSupportedError,\n type FilterTypeNotSupportedErrorType,\n} from '../../errors/log.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n ContractEventArgs,\n ContractEventName,\n EventDefinition,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { IsNarrowable, UnionEvaluate } from '../../types/utils.js'\nimport { type ToBytesErrorType, toBytes } from '../encoding/toBytes.js'\nimport { type Keccak256ErrorType, keccak256 } from '../hash/keccak256.js'\nimport {\n type ToEventSelectorErrorType,\n toEventSelector,\n} from '../hash/toEventSelector.js'\nimport {\n type EncodeAbiParametersErrorType,\n encodeAbiParameters,\n} from './encodeAbiParameters.js'\nimport { type FormatAbiItemErrorType, formatAbiItem } from './formatAbiItem.js'\nimport { type GetAbiItemErrorType, getAbiItem } from './getAbiItem.js'\n\nconst docsPath = '/docs/contract/encodeEventTopics'\n\nexport type EncodeEventTopicsParameters<\n abi extends Abi | readonly unknown[] = Abi,\n eventName extends ContractEventName | undefined = ContractEventName,\n ///\n hasEvents = abi extends Abi\n ? Abi extends abi\n ? true\n : [ExtractAbiEvents] extends [never]\n ? false\n : true\n : true,\n allArgs = ContractEventArgs<\n abi,\n eventName extends ContractEventName\n ? eventName\n : ContractEventName\n >,\n allErrorNames = ContractEventName,\n> = {\n abi: abi\n args?: allArgs | undefined\n} & UnionEvaluate<\n IsNarrowable extends true\n ? abi['length'] extends 1\n ? { eventName?: eventName | allErrorNames | undefined }\n : { eventName: eventName | allErrorNames }\n : { eventName?: eventName | allErrorNames | undefined }\n> &\n (hasEvents extends true ? unknown : never)\n\nexport type EncodeEventTopicsReturnType = [Hex, ...(Hex | Hex[] | null)[]]\n\nexport type EncodeEventTopicsErrorType =\n | AbiEventNotFoundErrorType\n | EncodeArgErrorType\n | FormatAbiItemErrorType\n | GetAbiItemErrorType\n | ToEventSelectorErrorType\n | ErrorType\n\nexport function encodeEventTopics<\n const abi extends Abi | readonly unknown[],\n eventName extends ContractEventName | undefined = undefined,\n>(\n parameters: EncodeEventTopicsParameters,\n): EncodeEventTopicsReturnType {\n const { abi, eventName, args } = parameters as EncodeEventTopicsParameters\n\n let abiItem = abi[0]\n if (eventName) {\n const item = getAbiItem({ abi, name: eventName })\n if (!item) throw new AbiEventNotFoundError(eventName, { docsPath })\n abiItem = item\n }\n\n if (abiItem.type !== 'event')\n throw new AbiEventNotFoundError(undefined, { docsPath })\n\n const definition = formatAbiItem(abiItem)\n const signature = toEventSelector(definition as EventDefinition)\n\n let topics: (Hex | Hex[] | null)[] = []\n if (args && 'inputs' in abiItem) {\n const indexedInputs = abiItem.inputs?.filter(\n (param) => 'indexed' in param && param.indexed,\n )\n const args_ = Array.isArray(args)\n ? args\n : Object.values(args).length > 0\n ? (indexedInputs?.map((x: any) => (args as any)[x.name]) ?? [])\n : []\n\n if (args_.length > 0) {\n topics =\n indexedInputs?.map((param, i) => {\n if (Array.isArray(args_[i]))\n return args_[i].map((_: any, j: number) =>\n encodeArg({ param, value: args_[i][j] }),\n )\n return typeof args_[i] !== 'undefined' && args_[i] !== null\n ? encodeArg({ param, value: args_[i] })\n : null\n }) ?? []\n }\n }\n return [signature, ...topics]\n}\n\nexport type EncodeArgErrorType =\n | Keccak256ErrorType\n | ToBytesErrorType\n | EncodeAbiParametersErrorType\n | FilterTypeNotSupportedErrorType\n | ErrorType\n\nfunction encodeArg({\n param,\n value,\n}: {\n param: AbiParameter\n value: AbiParameterToPrimitiveType\n}) {\n if (param.type === 'string' || param.type === 'bytes')\n return keccak256(toBytes(value as string))\n if (param.type === 'tuple' || param.type.match(/^(.*)\\[(\\d+)?\\]$/))\n throw new FilterTypeNotSupportedError(param.type)\n return encodeAbiParameters([param], [value])\n}\n", "import { BaseError } from './base.js'\n\nexport type FilterTypeNotSupportedErrorType = FilterTypeNotSupportedError & {\n name: 'FilterTypeNotSupportedError'\n}\nexport class FilterTypeNotSupportedError extends BaseError {\n constructor(type: string) {\n super(`Filter type \"${type}\" is not supported.`, {\n name: 'FilterTypeNotSupportedError',\n })\n }\n}\n", "import type { Abi, Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockNumber, BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n ContractEventName,\n MaybeExtractEventArgsFromAbi,\n} from '../../types/contract.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { Hex } from '../../types/misc.js'\nimport {\n type EncodeEventTopicsErrorType,\n type EncodeEventTopicsParameters,\n encodeEventTopics,\n} from '../../utils/abi/encodeEventTopics.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type NumberToHexErrorType,\n numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport { createFilterRequestScope } from '../../utils/filters/createFilterRequestScope.js'\n\nexport type CreateContractEventFilterParameters<\n abi extends Abi | readonly unknown[] = Abi,\n eventName extends ContractEventName | undefined = undefined,\n args extends\n | MaybeExtractEventArgsFromAbi\n | undefined = undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n> = {\n address?: Address | Address[] | undefined\n abi: abi\n eventName?: eventName | ContractEventName | undefined\n fromBlock?: fromBlock | BlockNumber | BlockTag | undefined\n /**\n * Whether or not the logs must match the indexed/non-indexed arguments in the event ABI item.\n * @default false\n */\n strict?: strict | boolean | undefined\n toBlock?: toBlock | BlockNumber | BlockTag | undefined\n} & (undefined extends eventName\n ? {\n args?: undefined\n }\n : MaybeExtractEventArgsFromAbi extends infer eventFilterArgs\n ? {\n args?:\n | eventFilterArgs\n | (args extends eventFilterArgs ? args : never)\n | undefined\n }\n : {\n args?: undefined\n })\n\nexport type CreateContractEventFilterReturnType<\n abi extends Abi | readonly unknown[] = Abi,\n eventName extends ContractEventName | undefined = undefined,\n args extends\n | MaybeExtractEventArgsFromAbi\n | undefined = undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n> = Filter<'event', abi, eventName, args, strict, fromBlock, toBlock>\n\nexport type CreateContractEventFilterErrorType =\n | EncodeEventTopicsErrorType\n | RequestErrorType\n | NumberToHexErrorType\n | ErrorType\n\n/**\n * Creates a Filter to retrieve event logs that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges) or [`getFilterLogs`](https://viem.sh/docs/actions/public/getFilterLogs).\n *\n * - Docs: https://viem.sh/docs/contract/createContractEventFilter\n *\n * @param client - Client to use\n * @param parameters - {@link CreateContractEventFilterParameters}\n * @returns [`Filter`](https://viem.sh/docs/glossary/types#filter). {@link CreateContractEventFilterReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createContractEventFilter } from 'viem/contract'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await createContractEventFilter(client, {\n * abi: parseAbi(['event Transfer(address indexed, address indexed, uint256)']),\n * })\n */\nexport async function createContractEventFilter<\n chain extends Chain | undefined,\n const abi extends Abi | readonly unknown[],\n eventName extends ContractEventName | undefined,\n args extends MaybeExtractEventArgsFromAbi | undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n>(\n client: Client,\n parameters: CreateContractEventFilterParameters<\n abi,\n eventName,\n args,\n strict,\n fromBlock,\n toBlock\n >,\n): Promise<\n CreateContractEventFilterReturnType<\n abi,\n eventName,\n args,\n strict,\n fromBlock,\n toBlock\n >\n> {\n const { address, abi, args, eventName, fromBlock, strict, toBlock } =\n parameters as CreateContractEventFilterParameters\n\n const getRequest = createFilterRequestScope(client, {\n method: 'eth_newFilter',\n })\n\n const topics = eventName\n ? encodeEventTopics({\n abi,\n args,\n eventName,\n } as unknown as EncodeEventTopicsParameters)\n : undefined\n const id: Hex = await client.request({\n method: 'eth_newFilter',\n params: [\n {\n address,\n fromBlock:\n typeof fromBlock === 'bigint' ? numberToHex(fromBlock) : fromBlock,\n toBlock: typeof toBlock === 'bigint' ? numberToHex(toBlock) : toBlock,\n topics,\n },\n ],\n })\n\n return {\n abi,\n args,\n eventName,\n id,\n request: getRequest(id),\n strict: Boolean(strict),\n type: 'event',\n } as unknown as CreateContractEventFilterReturnType<\n abi,\n eventName,\n args,\n strict,\n fromBlock,\n toBlock\n >\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { OnResponseFn } from '../../clients/transports/fallback.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { EIP1193RequestFn, PublicRpcSchema } from '../../types/eip1193.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { Filter } from '../../types/utils.js'\n\ntype CreateFilterRequestScopeParameters = {\n method:\n | 'eth_newFilter'\n | 'eth_newPendingTransactionFilter'\n | 'eth_newBlockFilter'\n}\n\ntype FilterRpcSchema = Filter<\n PublicRpcSchema,\n { Method: 'eth_getFilterLogs' | 'eth_getFilterChanges' }\n>\n\ntype CreateFilterRequestScopeReturnType = (\n id: Hex,\n) => EIP1193RequestFn\n\n/**\n * Scopes `request` to the filter ID. If the client is a fallback, it will\n * listen for responses and scope the child transport `request` function\n * to the successful filter ID.\n */\nexport function createFilterRequestScope(\n client: Client,\n { method }: CreateFilterRequestScopeParameters,\n): CreateFilterRequestScopeReturnType {\n const requestMap: Record = {}\n\n if (client.transport.type === 'fallback')\n client.transport.onResponse?.(\n ({\n method: method_,\n response: id,\n status,\n transport,\n }: Parameters[0]) => {\n if (status === 'success' && method === method_)\n requestMap[id as Hex] = transport.request\n },\n )\n\n return ((id) =>\n requestMap[id] || client.request) as CreateFilterRequestScopeReturnType\n}\n", "import type { Abi } from 'abitype'\n\nimport type { Account } from '../../accounts/types.js'\nimport {\n type ParseAccountErrorType,\n parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { BaseError } from '../../errors/base.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n ContractFunctionArgs,\n ContractFunctionName,\n ContractFunctionParameters,\n GetValue,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { UnionOmit } from '../../types/utils.js'\nimport {\n type EncodeFunctionDataErrorType,\n type EncodeFunctionDataParameters,\n encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport {\n type GetContractErrorReturnType,\n getContractError,\n} from '../../utils/errors/getContractError.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n type EstimateGasErrorType,\n type EstimateGasParameters,\n estimateGas,\n} from './estimateGas.js'\n\nexport type EstimateContractGasParameters<\n abi extends Abi | readonly unknown[] = Abi,\n functionName extends ContractFunctionName<\n abi,\n 'nonpayable' | 'payable'\n > = ContractFunctionName,\n args extends ContractFunctionArgs<\n abi,\n 'nonpayable' | 'payable',\n functionName\n > = ContractFunctionArgs,\n chain extends Chain | undefined = Chain | undefined,\n> = ContractFunctionParameters<\n abi,\n 'nonpayable' | 'payable',\n functionName,\n args\n> &\n UnionOmit, 'data' | 'to' | 'value'> &\n GetValue<\n abi,\n functionName,\n EstimateGasParameters extends EstimateGasParameters\n ? EstimateGasParameters['value']\n : EstimateGasParameters['value']\n > & {\n /** Data to append to the end of the calldata. Useful for adding a [\"domain\" tag](https://opensea.notion.site/opensea/Seaport-Order-Attributions-ec2d69bf455041a5baa490941aad307f). */\n dataSuffix?: Hex | undefined\n }\n\nexport type EstimateContractGasReturnType = bigint\n\nexport type EstimateContractGasErrorType = GetContractErrorReturnType<\n EncodeFunctionDataErrorType | EstimateGasErrorType | ParseAccountErrorType\n>\n\n/**\n * Estimates the gas required to successfully execute a contract write function call.\n *\n * - Docs: https://viem.sh/docs/contract/estimateContractGas\n *\n * Internally, uses a [Public Client](https://viem.sh/docs/clients/public) to call the [`estimateGas` action](https://viem.sh/docs/actions/public/estimateGas) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n *\n * @param client - Client to use\n * @param parameters - {@link EstimateContractGasParameters}\n * @returns The gas estimate (in wei). {@link EstimateContractGasReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { estimateContractGas } from 'viem/contract'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const gas = await estimateContractGas(client, {\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi: parseAbi(['function mint() public']),\n * functionName: 'mint',\n * account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',\n * })\n */\nexport async function estimateContractGas<\n const abi extends Abi | readonly unknown[],\n functionName extends ContractFunctionName,\n args extends ContractFunctionArgs,\n chain extends Chain | undefined,\n account extends Account | undefined = undefined,\n>(\n client: Client,\n parameters: EstimateContractGasParameters,\n): Promise {\n const {\n abi,\n address,\n args,\n functionName,\n dataSuffix = typeof client.dataSuffix === 'string'\n ? client.dataSuffix\n : client.dataSuffix?.value,\n ...request\n } = parameters as EstimateContractGasParameters\n const data = encodeFunctionData({\n abi,\n args,\n functionName,\n } as EncodeFunctionDataParameters)\n\n try {\n const gas = await getAction(\n client,\n estimateGas,\n 'estimateGas',\n )({\n data: `${data}${dataSuffix ? dataSuffix.replace('0x', '') : ''}`,\n to: address,\n ...request,\n } as unknown as EstimateGasParameters)\n return gas\n } catch (error) {\n const account = request.account ? parseAccount(request.account) : undefined\n throw getContractError(error as BaseError, {\n abi,\n address,\n args,\n docsPath: '/docs/contract/estimateContractGas',\n functionName,\n sender: account?.address,\n })\n }\n}\n", "import type { Abi, Address } from 'abitype'\n\nimport { AbiDecodingZeroDataError } from '../../errors/abi.js'\nimport { BaseError } from '../../errors/base.js'\nimport {\n ContractFunctionExecutionError,\n type ContractFunctionExecutionErrorType,\n ContractFunctionRevertedError,\n type ContractFunctionRevertedErrorType,\n ContractFunctionZeroDataError,\n type ContractFunctionZeroDataErrorType,\n RawContractError,\n} from '../../errors/contract.js'\nimport { RpcRequestError } from '../../errors/request.js'\nimport { InternalRpcError, InvalidInputRpcError } from '../../errors/rpc.js'\nimport type { ErrorType } from '../../errors/utils.js'\n\nconst EXECUTION_REVERTED_ERROR_CODE = 3\n\nexport type GetContractErrorReturnType = Omit<\n ContractFunctionExecutionErrorType,\n 'cause'\n> & {\n cause:\n | cause\n | ContractFunctionZeroDataErrorType\n | ContractFunctionRevertedErrorType\n}\n\nexport function getContractError>(\n err: err,\n {\n abi,\n address,\n args,\n docsPath,\n functionName,\n sender,\n }: {\n abi: Abi\n args: any\n address?: Address | undefined\n docsPath?: string | undefined\n functionName: string\n sender?: Address | undefined\n },\n): GetContractErrorReturnType {\n const error = (\n err instanceof RawContractError\n ? err\n : err instanceof BaseError\n ? err.walk((err) => 'data' in (err as Error)) || err.walk()\n : {}\n ) as BaseError\n const { code, data, details, message, shortMessage } =\n error as RawContractError\n\n const cause = (() => {\n if (err instanceof AbiDecodingZeroDataError)\n return new ContractFunctionZeroDataError({ functionName, cause: err })\n if (\n ([EXECUTION_REVERTED_ERROR_CODE, InternalRpcError.code].includes(code) &&\n (data || details || message || shortMessage)) ||\n (code === InvalidInputRpcError.code &&\n details === 'execution reverted' &&\n data)\n ) {\n return new ContractFunctionRevertedError({\n abi,\n data: typeof data === 'object' ? data.data : data,\n functionName,\n message:\n error instanceof RpcRequestError\n ? details\n : (shortMessage ?? message),\n cause: err,\n })\n }\n return err\n })()\n\n return new ContractFunctionExecutionError(cause as BaseError, {\n abi,\n args,\n contractAddress: address,\n docsPath,\n functionName,\n sender,\n }) as GetContractErrorReturnType\n}\n", "import type { Address } from 'abitype'\nimport type { Account } from '../../accounts/types.js'\nimport {\n type ParseAccountErrorType,\n parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { BaseError } from '../../errors/base.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { StateOverride } from '../../types/stateOverride.js'\nimport type { TransactionRequest } from '../../types/transaction.js'\nimport type { UnionOmit } from '../../types/utils.js'\nimport {\n type RecoverAuthorizationAddressErrorType,\n recoverAuthorizationAddress,\n} from '../../utils/authorization/recoverAuthorizationAddress.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type NumberToHexErrorType,\n numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport {\n type GetEstimateGasErrorReturnType,\n getEstimateGasError,\n} from '../../utils/errors/getEstimateGasError.js'\nimport { extract } from '../../utils/formatters/extract.js'\nimport {\n type FormattedTransactionRequest,\n formatTransactionRequest,\n} from '../../utils/formatters/transactionRequest.js'\nimport { serializeStateOverride } from '../../utils/stateOverride.js'\nimport {\n type AssertRequestErrorType,\n type AssertRequestParameters,\n assertRequest,\n} from '../../utils/transaction/assertRequest.js'\nimport {\n type PrepareTransactionRequestParameters,\n type PrepareTransactionRequestParameterType,\n prepareTransactionRequest,\n} from '../wallet/prepareTransactionRequest.js'\n\nexport type EstimateGasParameters<\n chain extends Chain | undefined = Chain | undefined,\n> = UnionOmit, 'from'> & {\n account?: Account | Address | undefined\n prepare?:\n | boolean\n | readonly PrepareTransactionRequestParameterType[]\n | undefined\n stateOverride?: StateOverride | undefined\n} & (\n | {\n /** The balance of the account at a block number. */\n blockNumber?: bigint | undefined\n blockTag?: undefined\n }\n | {\n blockNumber?: undefined\n /**\n * The balance of the account at a block tag.\n * @default 'latest'\n */\n blockTag?: BlockTag | undefined\n }\n )\ntype FormattedEstimateGas =\n FormattedTransactionRequest\n\nexport type EstimateGasReturnType = bigint\n\nexport type EstimateGasErrorType = GetEstimateGasErrorReturnType<\n | ParseAccountErrorType\n | NumberToHexErrorType\n | RequestErrorType\n | RecoverAuthorizationAddressErrorType\n | AssertRequestErrorType\n>\n\n/**\n * Estimates the gas necessary to complete a transaction without submitting it to the network.\n *\n * - Docs: https://viem.sh/docs/actions/public/estimateGas\n * - JSON-RPC Methods: [`eth_estimateGas`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_estimategas)\n *\n * @param client - Client to use\n * @param parameters - {@link EstimateGasParameters}\n * @returns The gas estimate (in gas units). {@link EstimateGasReturnType}\n *\n * @example\n * import { createPublicClient, http, parseEther } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { estimateGas } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const gasEstimate = await estimateGas(client, {\n * account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * value: parseEther('1'),\n * })\n */\nexport async function estimateGas<\n chain extends Chain | undefined,\n account extends Account | undefined = undefined,\n>(\n client: Client,\n args: EstimateGasParameters,\n): Promise {\n const { account: account_ = client.account, prepare = true } = args\n const account = account_ ? parseAccount(account_) : undefined\n\n const parameters = (() => {\n if (Array.isArray(prepare)) return prepare\n // Some RPC Providers do not compute versioned hashes from blobs. We will need\n // to compute them.\n if (account?.type !== 'local') return ['blobVersionedHashes']\n return undefined\n })()\n\n try {\n const to = await (async () => {\n // If `to` exists on the parameters, use that.\n if (args.to) return args.to\n\n // If no `to` exists, and we are sending a EIP-7702 transaction, use the\n // address of the first authorization in the list.\n if (args.authorizationList && args.authorizationList.length > 0)\n return await recoverAuthorizationAddress({\n authorization: args.authorizationList[0],\n }).catch(() => {\n throw new BaseError(\n '`to` is required. Could not infer from `authorizationList`',\n )\n })\n\n // Otherwise, we are sending a deployment transaction.\n return undefined\n })()\n\n const {\n accessList,\n authorizationList,\n blobs,\n blobVersionedHashes,\n blockNumber,\n blockTag,\n data,\n gas,\n gasPrice,\n maxFeePerBlobGas,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce,\n value,\n stateOverride,\n ...rest\n } = prepare\n ? ((await prepareTransactionRequest(client, {\n ...args,\n parameters,\n to,\n } as PrepareTransactionRequestParameters)) as EstimateGasParameters)\n : args\n\n // If we get `gas` back from the prepared transaction request, which is\n // different from the `gas` we provided, it was likely filled by other means\n // during request preparation (e.g. `eth_fillTransaction` or `chain.transactionRequest.prepare`).\n // (e.g. `eth_fillTransaction` or `chain.transactionRequest.prepare`).\n if (gas && args.gas !== gas) return gas\n\n const blockNumberHex =\n typeof blockNumber === 'bigint' ? numberToHex(blockNumber) : undefined\n const block = blockNumberHex || blockTag\n\n const rpcStateOverride = serializeStateOverride(stateOverride)\n\n assertRequest(args as AssertRequestParameters)\n\n const chainFormat = client.chain?.formatters?.transactionRequest?.format\n const format = chainFormat || formatTransactionRequest\n\n const request = format(\n {\n // Pick out extra data that might exist on the chain's transaction request type.\n ...extract(rest, { format: chainFormat }),\n account,\n accessList,\n authorizationList,\n blobs,\n blobVersionedHashes,\n data,\n gasPrice,\n maxFeePerBlobGas,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce,\n to,\n value,\n } as TransactionRequest,\n 'estimateGas',\n )\n\n return BigInt(\n await client.request({\n method: 'eth_estimateGas',\n params: rpcStateOverride\n ? [\n request,\n block ?? client.experimental_blockTag ?? 'latest',\n rpcStateOverride,\n ]\n : block\n ? [request, block]\n : [request],\n }),\n )\n } catch (err) {\n throw getEstimateGasError(err as BaseError, {\n ...args,\n account,\n chain: client.chain,\n })\n }\n}\n", "import type { Address } from 'abitype'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\nimport {\n type ChecksumAddressErrorType,\n checksumAddress,\n} from '../../utils/address/getAddress.js'\nimport {\n type Keccak256ErrorType,\n keccak256,\n} from '../../utils/hash/keccak256.js'\n\nexport type PublicKeyToAddressErrorType =\n | ChecksumAddressErrorType\n | Keccak256ErrorType\n | ErrorType\n\n/**\n * @description Converts an ECDSA public key to an address.\n *\n * @param publicKey The public key to convert.\n *\n * @returns The address.\n */\nexport function publicKeyToAddress(publicKey: Hex): Address {\n const address = keccak256(`0x${publicKey.substring(4)}`).substring(26)\n return checksumAddress(`0x${address}`) as Address\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex, Signature } from '../../types/misc.js'\nimport { type IsHexErrorType, isHex } from '../data/isHex.js'\nimport { size } from '../data/size.js'\nimport {\n type HexToNumberErrorType,\n hexToBigInt,\n hexToNumber,\n} from '../encoding/fromHex.js'\nimport { toHex } from '../encoding/toHex.js'\n\nexport type RecoverPublicKeyParameters = {\n hash: Hex | ByteArray\n signature: Hex | ByteArray | Signature\n}\n\nexport type RecoverPublicKeyReturnType = Hex\n\nexport type RecoverPublicKeyErrorType =\n | HexToNumberErrorType\n | IsHexErrorType\n | ErrorType\n\nexport async function recoverPublicKey({\n hash,\n signature,\n}: RecoverPublicKeyParameters): Promise {\n const hashHex = isHex(hash) ? hash : toHex(hash)\n\n const { secp256k1 } = await import('@noble/curves/secp256k1')\n const signature_ = (() => {\n // typeof signature: `Signature`\n if (typeof signature === 'object' && 'r' in signature && 's' in signature) {\n const { r, s, v, yParity } = signature\n const yParityOrV = Number(yParity ?? v)!\n const recoveryBit = toRecoveryBit(yParityOrV)\n return new secp256k1.Signature(\n hexToBigInt(r),\n hexToBigInt(s),\n ).addRecoveryBit(recoveryBit)\n }\n\n // typeof signature: `Hex | ByteArray`\n const signatureHex = isHex(signature) ? signature : toHex(signature)\n if (size(signatureHex) !== 65) throw new Error('invalid signature length')\n const yParityOrV = hexToNumber(`0x${signatureHex.slice(130)}`)\n const recoveryBit = toRecoveryBit(yParityOrV)\n return secp256k1.Signature.fromCompact(\n signatureHex.substring(2, 130),\n ).addRecoveryBit(recoveryBit)\n })()\n\n const publicKey = signature_\n .recoverPublicKey(hashHex.substring(2))\n .toHex(false)\n return `0x${publicKey}`\n}\n\nfunction toRecoveryBit(yParityOrV: number) {\n if (yParityOrV === 0 || yParityOrV === 1) return yParityOrV\n if (yParityOrV === 27) return 0\n if (yParityOrV === 28) return 1\n throw new Error('Invalid yParityOrV value')\n}\n", "import type { Address } from 'abitype'\n\nimport { publicKeyToAddress } from '../../accounts/utils/publicKeyToAddress.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex, Signature } from '../../types/misc.js'\nimport { recoverPublicKey } from './recoverPublicKey.js'\n\nexport type RecoverAddressParameters = {\n hash: Hex | ByteArray\n signature: Hex | ByteArray | Signature\n}\n\nexport type RecoverAddressReturnType = Address\n\nexport type RecoverAddressErrorType = ErrorType\n\nexport async function recoverAddress({\n hash,\n signature,\n}: RecoverAddressParameters): Promise {\n return publicKeyToAddress(await recoverPublicKey({ hash, signature }))\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { AuthorizationRequest } from '../../types/authorization.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type ConcatHexErrorType, concatHex } from '../data/concat.js'\nimport { type HexToBytesErrorType, hexToBytes } from '../encoding/toBytes.js'\nimport { type NumberToHexErrorType, numberToHex } from '../encoding/toHex.js'\nimport { type ToRlpErrorType, toRlp } from '../encoding/toRlp.js'\nimport { type Keccak256ErrorType, keccak256 } from '../hash/keccak256.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type HashAuthorizationParameters =\n AuthorizationRequest & {\n /** Output format. @default \"hex\" */\n to?: to | To | undefined\n }\n\nexport type HashAuthorizationReturnType =\n | (to extends 'bytes' ? ByteArray : never)\n | (to extends 'hex' ? Hex : never)\n\nexport type HashAuthorizationErrorType =\n | Keccak256ErrorType\n | ConcatHexErrorType\n | ToRlpErrorType\n | NumberToHexErrorType\n | HexToBytesErrorType\n | ErrorType\n\n/**\n * Computes an Authorization hash in [EIP-7702 format](https://eips.ethereum.org/EIPS/eip-7702): `keccak256('0x05' || rlp([chain_id, address, nonce]))`.\n */\nexport function hashAuthorization(\n parameters: HashAuthorizationParameters,\n): HashAuthorizationReturnType {\n const { chainId, nonce, to } = parameters\n const address = parameters.contractAddress ?? parameters.address\n const hash = keccak256(\n concatHex([\n '0x05',\n toRlp([\n chainId ? numberToHex(chainId) : '0x',\n address,\n nonce ? numberToHex(nonce) : '0x',\n ]),\n ]),\n )\n if (to === 'bytes') return hexToBytes(hash) as HashAuthorizationReturnType\n return hash as HashAuthorizationReturnType\n}\n", "import { BaseError } from '../../errors/base.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport {\n type CreateCursorErrorType,\n type Cursor,\n createCursor,\n} from '../cursor.js'\n\nimport { type HexToBytesErrorType, hexToBytes } from './toBytes.js'\nimport { type BytesToHexErrorType, bytesToHex } from './toHex.js'\n\nexport type RecursiveArray = T | readonly RecursiveArray[]\n\ntype To = 'hex' | 'bytes'\n\ntype Encodable = {\n length: number\n encode(cursor: Cursor): void\n}\n\nexport type ToRlpReturnType =\n | (to extends 'bytes' ? ByteArray : never)\n | (to extends 'hex' ? Hex : never)\n\nexport type ToRlpErrorType =\n | CreateCursorErrorType\n | BytesToHexErrorType\n | HexToBytesErrorType\n | ErrorType\n\nexport function toRlp(\n bytes: RecursiveArray | RecursiveArray,\n to: to | To | undefined = 'hex',\n): ToRlpReturnType {\n const encodable = getEncodable(bytes)\n const cursor = createCursor(new Uint8Array(encodable.length))\n encodable.encode(cursor)\n\n if (to === 'hex') return bytesToHex(cursor.bytes) as ToRlpReturnType\n return cursor.bytes as ToRlpReturnType\n}\n\nexport type BytesToRlpErrorType = ToRlpErrorType | ErrorType\n\nexport function bytesToRlp(\n bytes: RecursiveArray,\n to: to | To | undefined = 'bytes',\n): ToRlpReturnType {\n return toRlp(bytes, to)\n}\n\nexport type HexToRlpErrorType = ToRlpErrorType | ErrorType\n\nexport function hexToRlp(\n hex: RecursiveArray,\n to: to | To | undefined = 'hex',\n): ToRlpReturnType {\n return toRlp(hex, to)\n}\n\nfunction getEncodable(\n bytes: RecursiveArray | RecursiveArray,\n): Encodable {\n if (Array.isArray(bytes))\n return getEncodableList(bytes.map((x) => getEncodable(x)))\n return getEncodableBytes(bytes as any)\n}\n\nfunction getEncodableList(list: Encodable[]): Encodable {\n const bodyLength = list.reduce((acc, x) => acc + x.length, 0)\n\n const sizeOfBodyLength = getSizeOfLength(bodyLength)\n const length = (() => {\n if (bodyLength <= 55) return 1 + bodyLength\n return 1 + sizeOfBodyLength + bodyLength\n })()\n\n return {\n length,\n encode(cursor: Cursor) {\n if (bodyLength <= 55) {\n cursor.pushByte(0xc0 + bodyLength)\n } else {\n cursor.pushByte(0xc0 + 55 + sizeOfBodyLength)\n if (sizeOfBodyLength === 1) cursor.pushUint8(bodyLength)\n else if (sizeOfBodyLength === 2) cursor.pushUint16(bodyLength)\n else if (sizeOfBodyLength === 3) cursor.pushUint24(bodyLength)\n else cursor.pushUint32(bodyLength)\n }\n for (const { encode } of list) {\n encode(cursor)\n }\n },\n }\n}\n\nfunction getEncodableBytes(bytesOrHex: ByteArray | Hex): Encodable {\n const bytes =\n typeof bytesOrHex === 'string' ? hexToBytes(bytesOrHex) : bytesOrHex\n\n const sizeOfBytesLength = getSizeOfLength(bytes.length)\n const length = (() => {\n if (bytes.length === 1 && bytes[0] < 0x80) return 1\n if (bytes.length <= 55) return 1 + bytes.length\n return 1 + sizeOfBytesLength + bytes.length\n })()\n\n return {\n length,\n encode(cursor: Cursor) {\n if (bytes.length === 1 && bytes[0] < 0x80) {\n cursor.pushBytes(bytes)\n } else if (bytes.length <= 55) {\n cursor.pushByte(0x80 + bytes.length)\n cursor.pushBytes(bytes)\n } else {\n cursor.pushByte(0x80 + 55 + sizeOfBytesLength)\n if (sizeOfBytesLength === 1) cursor.pushUint8(bytes.length)\n else if (sizeOfBytesLength === 2) cursor.pushUint16(bytes.length)\n else if (sizeOfBytesLength === 3) cursor.pushUint24(bytes.length)\n else cursor.pushUint32(bytes.length)\n cursor.pushBytes(bytes)\n }\n },\n }\n}\n\nfunction getSizeOfLength(length: number) {\n if (length < 2 ** 8) return 1\n if (length < 2 ** 16) return 2\n if (length < 2 ** 24) return 3\n if (length < 2 ** 32) return 4\n throw new BaseError('Length is too large.')\n}\n", "import type { Address } from 'abitype'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n Authorization,\n AuthorizationRequest,\n SignedAuthorization,\n} from '../../types/authorization.js'\nimport type { ByteArray, Hex, Signature } from '../../types/misc.js'\nimport type { OneOf } from '../../types/utils.js'\nimport {\n type RecoverAddressErrorType,\n recoverAddress,\n} from '../signature/recoverAddress.js'\nimport {\n type HashAuthorizationErrorType,\n hashAuthorization,\n} from './hashAuthorization.js'\n\nexport type RecoverAuthorizationAddressParameters<\n authorization extends OneOf<\n Authorization | AuthorizationRequest | SignedAuthorization\n > = OneOf,\n //\n _signature = Hex | ByteArray | OneOf,\n> = {\n /**\n * The Authorization object.\n *\n * - If an unsigned `authorization` is provided, the `signature` property is required.\n * - If a signed `authorization` is provided, the `signature` property does not need to be provided.\n */\n authorization:\n | authorization\n | OneOf\n} & (authorization extends SignedAuthorization\n ? {\n /** Signature of the Authorization. Not required if the `authorization` is signed. */\n signature?: _signature | undefined\n }\n : {\n /** Signature of the Authorization. Not required if the `authorization` is signed. */\n signature: _signature\n })\n\nexport type RecoverAuthorizationAddressReturnType = Address\n\nexport type RecoverAuthorizationAddressErrorType =\n | HashAuthorizationErrorType\n | RecoverAddressErrorType\n | ErrorType\n\nexport async function recoverAuthorizationAddress<\n const authorization extends OneOf<\n Authorization | AuthorizationRequest | SignedAuthorization\n >,\n>(\n parameters: RecoverAuthorizationAddressParameters,\n): Promise {\n const { authorization, signature } = parameters\n\n return recoverAddress({\n hash: hashAuthorization(authorization as AuthorizationRequest),\n signature: (signature ?? authorization) as Signature,\n })\n}\n", "import type { Account } from '../accounts/types.js'\nimport type { EstimateGasParameters } from '../actions/public/estimateGas.js'\nimport type { Chain } from '../types/chain.js'\nimport { formatEther } from '../utils/unit/formatEther.js'\nimport { formatGwei } from '../utils/unit/formatGwei.js'\n\nimport { BaseError } from './base.js'\nimport { prettyPrint } from './transaction.js'\n\nexport type EstimateGasExecutionErrorType = EstimateGasExecutionError & {\n name: 'EstimateGasExecutionError'\n}\nexport class EstimateGasExecutionError extends BaseError {\n override cause: BaseError\n\n constructor(\n cause: BaseError,\n {\n account,\n docsPath,\n chain,\n data,\n gas,\n gasPrice,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce,\n to,\n value,\n }: Omit, 'account'> & {\n account?: Account | undefined\n chain?: Chain | undefined\n docsPath?: string | undefined\n },\n ) {\n const prettyArgs = prettyPrint({\n from: account?.address,\n to,\n value:\n typeof value !== 'undefined' &&\n `${formatEther(value)} ${chain?.nativeCurrency?.symbol || 'ETH'}`,\n data,\n gas,\n gasPrice:\n typeof gasPrice !== 'undefined' && `${formatGwei(gasPrice)} gwei`,\n maxFeePerGas:\n typeof maxFeePerGas !== 'undefined' &&\n `${formatGwei(maxFeePerGas)} gwei`,\n maxPriorityFeePerGas:\n typeof maxPriorityFeePerGas !== 'undefined' &&\n `${formatGwei(maxPriorityFeePerGas)} gwei`,\n nonce,\n })\n\n super(cause.shortMessage, {\n cause,\n docsPath,\n metaMessages: [\n ...(cause.metaMessages ? [...cause.metaMessages, ' '] : []),\n 'Estimate Gas Arguments:',\n prettyArgs,\n ].filter(Boolean) as string[],\n name: 'EstimateGasExecutionError',\n })\n this.cause = cause\n }\n}\n", "import type { Account } from '../../accounts/types.js'\nimport type { EstimateGasParameters } from '../../actions/public/estimateGas.js'\nimport type { BaseError } from '../../errors/base.js'\nimport {\n EstimateGasExecutionError,\n type EstimateGasExecutionErrorType,\n} from '../../errors/estimateGas.js'\nimport { UnknownNodeError } from '../../errors/node.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\n\nimport {\n type GetNodeErrorParameters,\n type GetNodeErrorReturnType,\n getNodeError,\n} from './getNodeError.js'\n\nexport type GetEstimateGasErrorReturnType = Omit<\n EstimateGasExecutionErrorType,\n 'cause'\n> & { cause: cause | GetNodeErrorReturnType }\n\nexport function getEstimateGasError>(\n err: err,\n {\n docsPath,\n ...args\n }: Omit & {\n account?: Account | undefined\n chain?: Chain | undefined\n docsPath?: string | undefined\n },\n): GetEstimateGasErrorReturnType {\n const cause = (() => {\n const cause = getNodeError(\n err as {} as BaseError,\n args as GetNodeErrorParameters,\n )\n if (cause instanceof UnknownNodeError) return err as {} as BaseError\n return cause\n })()\n return new EstimateGasExecutionError(cause, {\n docsPath,\n ...args,\n }) as GetEstimateGasErrorReturnType\n}\n", "import type { Address } from 'abitype'\nimport type { Account } from '../../accounts/types.js'\nimport {\n type ParseAccountErrorType,\n parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport {\n type EstimateFeesPerGasErrorType,\n internal_estimateFeesPerGas,\n} from '../../actions/public/estimateFeesPerGas.js'\nimport {\n type EstimateGasErrorType,\n type EstimateGasParameters,\n estimateGas,\n} from '../../actions/public/estimateGas.js'\nimport {\n type GetBlockErrorType,\n getBlock as getBlock_,\n} from '../../actions/public/getBlock.js'\nimport {\n type GetTransactionCountErrorType,\n getTransactionCount,\n} from '../../actions/public/getTransactionCount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { AccountNotFoundErrorType } from '../../errors/account.js'\nimport type { BaseError } from '../../errors/base.js'\nimport {\n Eip1559FeesNotSupportedError,\n MaxFeePerGasTooLowError,\n} from '../../errors/fee.js'\nimport type { DeriveAccount, GetAccountParameter } from '../../types/account.js'\nimport type { Block } from '../../types/block.js'\nimport type { ExtractCapabilities } from '../../types/capabilities.js'\nimport type {\n Chain,\n DeriveChain,\n GetChainParameter,\n} from '../../types/chain.js'\nimport type { GetTransactionRequestKzgParameter } from '../../types/kzg.js'\nimport type {\n TransactionRequest,\n TransactionRequestEIP1559,\n TransactionRequestEIP2930,\n TransactionRequestEIP4844,\n TransactionRequestEIP7702,\n TransactionRequestLegacy,\n TransactionSerializable,\n} from '../../types/transaction.js'\nimport type {\n ExactPartial,\n IsNever,\n Prettify,\n UnionOmit,\n UnionRequiredBy,\n} from '../../types/utils.js'\nimport { blobsToCommitments } from '../../utils/blob/blobsToCommitments.js'\nimport { blobsToProofs } from '../../utils/blob/blobsToProofs.js'\nimport { commitmentsToVersionedHashes } from '../../utils/blob/commitmentsToVersionedHashes.js'\nimport { toBlobSidecars } from '../../utils/blob/toBlobSidecars.js'\nimport type { FormattedTransactionRequest } from '../../utils/formatters/transactionRequest.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { LruMap } from '../../utils/lru.js'\nimport type { NonceManager } from '../../utils/nonceManager.js'\nimport {\n type AssertRequestErrorType,\n type AssertRequestParameters,\n assertRequest,\n} from '../../utils/transaction/assertRequest.js'\nimport {\n type GetTransactionType,\n getTransactionType,\n} from '../../utils/transaction/getTransactionType.js'\nimport {\n type FillTransactionErrorType,\n type FillTransactionParameters,\n fillTransaction,\n} from '../public/fillTransaction.js'\nimport { getChainId as getChainId_ } from '../public/getChainId.js'\n\nexport const defaultParameters = [\n 'blobVersionedHashes',\n 'chainId',\n 'fees',\n 'gas',\n 'nonce',\n 'type',\n] as const\n\n/** @internal */\nexport const eip1559NetworkCache = /*#__PURE__*/ new Map()\n\n/** @internal */\nexport const supportsFillTransaction = /*#__PURE__*/ new LruMap(128)\n\nexport type PrepareTransactionRequestParameterType =\n | 'blobVersionedHashes'\n | 'chainId'\n | 'fees'\n | 'gas'\n | 'nonce'\n | 'sidecars'\n | 'type'\ntype ParameterTypeToParameters<\n parameterType extends PrepareTransactionRequestParameterType,\n> = parameterType extends 'fees'\n ? 'maxFeePerGas' | 'maxPriorityFeePerGas' | 'gasPrice'\n : parameterType\n\nexport type PrepareTransactionRequestRequest<\n chain extends Chain | undefined = Chain | undefined,\n chainOverride extends Chain | undefined = Chain | undefined,\n ///\n _derivedChain extends Chain | undefined = DeriveChain,\n> = UnionOmit, 'from'> &\n GetTransactionRequestKzgParameter & {\n /**\n * Nonce manager to use for the transaction request.\n */\n nonceManager?: NonceManager | undefined\n /**\n * Parameters to prepare for the transaction request.\n *\n * @default ['blobVersionedHashes', 'chainId', 'fees', 'gas', 'nonce', 'type']\n */\n parameters?: readonly PrepareTransactionRequestParameterType[] | undefined\n }\n\nexport type PrepareTransactionRequestParameters<\n chain extends Chain | undefined = Chain | undefined,\n account extends Account | undefined = Account | undefined,\n chainOverride extends Chain | undefined = Chain | undefined,\n accountOverride extends Account | Address | undefined =\n | Account\n | Address\n | undefined,\n request extends PrepareTransactionRequestRequest<\n chain,\n chainOverride\n > = PrepareTransactionRequestRequest,\n> = request &\n GetAccountParameter &\n GetChainParameter &\n GetTransactionRequestKzgParameter & { chainId?: number | undefined }\n\nexport type PrepareTransactionRequestReturnType<\n chain extends Chain | undefined = Chain | undefined,\n account extends Account | undefined = Account | undefined,\n chainOverride extends Chain | undefined = Chain | undefined,\n accountOverride extends Account | Address | undefined =\n | Account\n | Address\n | undefined,\n request extends PrepareTransactionRequestRequest<\n chain,\n chainOverride\n > = PrepareTransactionRequestRequest,\n ///\n _derivedAccount extends Account | Address | undefined = DeriveAccount<\n account,\n accountOverride\n >,\n _derivedChain extends Chain | undefined = DeriveChain,\n _transactionType = request['type'] extends string | undefined\n ? request['type']\n : GetTransactionType extends 'legacy'\n ? unknown\n : GetTransactionType,\n _transactionRequest extends TransactionRequest =\n | (_transactionType extends 'legacy' ? TransactionRequestLegacy : never)\n | (_transactionType extends 'eip1559' ? TransactionRequestEIP1559 : never)\n | (_transactionType extends 'eip2930' ? TransactionRequestEIP2930 : never)\n | (_transactionType extends 'eip4844' ? TransactionRequestEIP4844 : never)\n | (_transactionType extends 'eip7702' ? TransactionRequestEIP7702 : never),\n> = Prettify<\n UnionRequiredBy<\n Extract<\n UnionOmit, 'from'> &\n (_derivedChain extends Chain\n ? { chain: _derivedChain }\n : { chain?: undefined }) &\n (_derivedAccount extends Account\n ? { account: _derivedAccount; from: Address }\n : { account?: undefined; from?: undefined }),\n IsNever<_transactionRequest> extends true\n ? unknown\n : ExactPartial<_transactionRequest>\n > & { chainId?: number | undefined },\n ParameterTypeToParameters<\n request['parameters'] extends readonly PrepareTransactionRequestParameterType[]\n ? request['parameters'][number]\n : (typeof defaultParameters)[number]\n >\n > &\n (unknown extends request['kzg'] ? {} : Pick) & {\n // TODO(v3): Extract `prepareTransactionRequest` response into a named object of `{ capabilities, request }.\n _capabilities?:\n | ExtractCapabilities<'fillTransaction', 'ReturnType'>\n | undefined\n }\n>\n\nexport type PrepareTransactionRequestErrorType =\n | AccountNotFoundErrorType\n | AssertRequestErrorType\n | ParseAccountErrorType\n | GetBlockErrorType\n | GetTransactionCountErrorType\n | EstimateGasErrorType\n | EstimateFeesPerGasErrorType\n\n/**\n * Prepares a transaction request for signing.\n *\n * - Docs: https://viem.sh/docs/actions/wallet/prepareTransactionRequest\n *\n * @param args - {@link PrepareTransactionRequestParameters}\n * @returns The transaction request. {@link PrepareTransactionRequestReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { prepareTransactionRequest } from 'viem/actions'\n *\n * const client = createWalletClient({\n * chain: mainnet,\n * transport: custom(window.ethereum),\n * })\n * const request = await prepareTransactionRequest(client, {\n * account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * to: '0x0000000000000000000000000000000000000000',\n * value: 1n,\n * })\n *\n * @example\n * // Account Hoisting\n * import { createWalletClient, http } from 'viem'\n * import { privateKeyToAccount } from 'viem/accounts'\n * import { mainnet } from 'viem/chains'\n * import { prepareTransactionRequest } from 'viem/actions'\n *\n * const client = createWalletClient({\n * account: privateKeyToAccount('0x\u2026'),\n * chain: mainnet,\n * transport: custom(window.ethereum),\n * })\n * const request = await prepareTransactionRequest(client, {\n * to: '0x0000000000000000000000000000000000000000',\n * value: 1n,\n * })\n */\nexport async function prepareTransactionRequest<\n chain extends Chain | undefined,\n account extends Account | undefined,\n const request extends PrepareTransactionRequestRequest,\n accountOverride extends Account | Address | undefined = undefined,\n chainOverride extends Chain | undefined = undefined,\n>(\n client: Client,\n args: PrepareTransactionRequestParameters<\n chain,\n account,\n chainOverride,\n accountOverride,\n request\n >,\n): Promise<\n PrepareTransactionRequestReturnType<\n chain,\n account,\n chainOverride,\n accountOverride,\n request\n >\n> {\n let request = args as PrepareTransactionRequestParameters\n\n request.account ??= client.account\n request.parameters ??= defaultParameters\n\n const {\n account: account_,\n chain = client.chain,\n nonceManager,\n parameters,\n } = request\n\n const prepareTransactionRequest = (() => {\n if (typeof chain?.prepareTransactionRequest === 'function')\n return {\n fn: chain.prepareTransactionRequest,\n runAt: ['beforeFillTransaction'],\n }\n if (Array.isArray(chain?.prepareTransactionRequest))\n return {\n fn: chain.prepareTransactionRequest[0],\n runAt: chain.prepareTransactionRequest[1].runAt,\n }\n return undefined\n })()\n\n let chainId: number | undefined\n async function getChainId(): Promise {\n if (chainId) return chainId\n if (typeof request.chainId !== 'undefined') return request.chainId\n if (chain) return chain.id\n const chainId_ = await getAction(client, getChainId_, 'getChainId')({})\n chainId = chainId_\n return chainId\n }\n\n const account = account_ ? parseAccount(account_) : account_\n\n let nonce = request.nonce\n if (\n parameters.includes('nonce') &&\n typeof nonce === 'undefined' &&\n account &&\n nonceManager\n ) {\n const chainId = await getChainId()\n nonce = await nonceManager.consume({\n address: account.address,\n chainId,\n client,\n })\n }\n\n if (\n prepareTransactionRequest?.fn &&\n prepareTransactionRequest.runAt?.includes('beforeFillTransaction')\n ) {\n request = await prepareTransactionRequest.fn(\n { ...request, chain },\n {\n phase: 'beforeFillTransaction',\n },\n )\n nonce ??= request.nonce\n }\n\n const attemptFill = (() => {\n // Do not attempt if blobs are provided.\n if (\n (parameters.includes('blobVersionedHashes') ||\n parameters.includes('sidecars')) &&\n request.kzg &&\n request.blobs\n )\n return false\n\n // Do not attempt if `eth_fillTransaction` is not supported.\n if (supportsFillTransaction.get(client.uid) === false) return false\n\n // Should attempt `eth_fillTransaction` if \"fees\" or \"gas\" are required to be populated,\n // otherwise, can just use the other individual calls.\n const shouldAttempt = ['fees', 'gas'].some((parameter) =>\n parameters.includes(parameter as PrepareTransactionRequestParameterType),\n )\n if (!shouldAttempt) return false\n\n // Check if `eth_fillTransaction` needs to be called.\n if (parameters.includes('chainId') && typeof request.chainId !== 'number')\n return true\n if (parameters.includes('nonce') && typeof nonce !== 'number') return true\n if (\n parameters.includes('fees') &&\n typeof request.gasPrice !== 'bigint' &&\n (typeof request.maxFeePerGas !== 'bigint' ||\n typeof (request as any).maxPriorityFeePerGas !== 'bigint')\n )\n return true\n if (parameters.includes('gas') && typeof request.gas !== 'bigint')\n return true\n return false\n })()\n\n const fillResult = attemptFill\n ? await getAction(\n client,\n fillTransaction,\n 'fillTransaction',\n )({ ...request, nonce } as FillTransactionParameters)\n .then((result) => {\n const {\n chainId,\n from,\n gas,\n gasPrice,\n nonce,\n maxFeePerBlobGas,\n maxFeePerGas,\n maxPriorityFeePerGas,\n type,\n ...rest\n } = result.transaction\n supportsFillTransaction.set(client.uid, true)\n return {\n ...request,\n ...(from ? { from } : {}),\n ...(type && !request.type ? { type } : {}),\n ...(typeof chainId !== 'undefined' ? { chainId } : {}),\n ...(typeof gas !== 'undefined' ? { gas } : {}),\n ...(typeof gasPrice !== 'undefined' ? { gasPrice } : {}),\n ...(typeof nonce !== 'undefined' ? { nonce } : {}),\n ...(typeof maxFeePerBlobGas !== 'undefined' &&\n request.type !== 'legacy' &&\n request.type !== 'eip2930'\n ? { maxFeePerBlobGas }\n : {}),\n ...(typeof maxFeePerGas !== 'undefined' &&\n request.type !== 'legacy' &&\n request.type !== 'eip2930'\n ? { maxFeePerGas }\n : {}),\n ...(typeof maxPriorityFeePerGas !== 'undefined' &&\n request.type !== 'legacy' &&\n request.type !== 'eip2930'\n ? { maxPriorityFeePerGas }\n : {}),\n ...('nonceKey' in rest && typeof rest.nonceKey !== 'undefined'\n ? { nonceKey: rest.nonceKey }\n : {}),\n ...('keyAuthorization' in rest &&\n typeof rest.keyAuthorization !== 'undefined' &&\n rest.keyAuthorization !== null &&\n !('keyAuthorization' in request)\n ? { keyAuthorization: rest.keyAuthorization }\n : {}),\n ...('feePayerSignature' in rest &&\n typeof rest.feePayerSignature !== 'undefined' &&\n rest.feePayerSignature !== null\n ? { feePayerSignature: rest.feePayerSignature }\n : {}),\n ...('feeToken' in rest &&\n typeof rest.feeToken !== 'undefined' &&\n rest.feeToken !== null &&\n !('feeToken' in request)\n ? { feeToken: rest.feeToken }\n : {}),\n ...(result.capabilities\n ? { _capabilities: result.capabilities }\n : {}),\n }\n })\n .catch((e) => {\n const error = e as FillTransactionErrorType\n\n if (error.name !== 'TransactionExecutionError') return request\n\n const executionReverted = error.walk?.((e) => {\n const error = e as BaseError\n return error.name === 'ExecutionRevertedError'\n })\n if (executionReverted) throw e\n\n const unsupported = error.walk?.((e) => {\n const error = e as BaseError\n return (\n error.name === 'MethodNotFoundRpcError' ||\n error.name === 'MethodNotSupportedRpcError' ||\n error.message?.includes('eth_fillTransaction is not available')\n )\n })\n if (unsupported) supportsFillTransaction.set(client.uid, false)\n\n return request\n })\n : request\n\n nonce ??= fillResult.nonce\n\n request = {\n ...(fillResult as any),\n ...(account ? { from: account?.address } : {}),\n ...(typeof nonce !== 'undefined' ? { nonce } : {}),\n }\n const { blobs, gas, kzg, type } = request\n\n if (\n prepareTransactionRequest?.fn &&\n prepareTransactionRequest.runAt?.includes('beforeFillParameters')\n ) {\n request = await prepareTransactionRequest.fn(\n { ...request, chain },\n {\n phase: 'beforeFillParameters',\n },\n )\n }\n\n let block: Block | undefined\n async function getBlock(): Promise {\n if (block) return block\n block = await getAction(\n client,\n getBlock_,\n 'getBlock',\n )({ blockTag: 'latest' })\n return block\n }\n\n if (\n parameters.includes('nonce') &&\n typeof nonce === 'undefined' &&\n account &&\n !nonceManager\n )\n request.nonce = await getAction(\n client,\n getTransactionCount,\n 'getTransactionCount',\n )({\n address: account.address,\n blockTag: 'pending',\n })\n\n if (\n (parameters.includes('blobVersionedHashes') ||\n parameters.includes('sidecars')) &&\n blobs &&\n kzg\n ) {\n const commitments = blobsToCommitments({ blobs, kzg })\n\n if (parameters.includes('blobVersionedHashes')) {\n const versionedHashes = commitmentsToVersionedHashes({\n commitments,\n to: 'hex',\n })\n request.blobVersionedHashes = versionedHashes\n }\n if (parameters.includes('sidecars')) {\n const proofs = blobsToProofs({ blobs, commitments, kzg })\n const sidecars = toBlobSidecars({\n blobs,\n commitments,\n proofs,\n to: 'hex',\n })\n request.sidecars = sidecars\n }\n }\n\n if (parameters.includes('chainId')) request.chainId = await getChainId()\n\n if (\n (parameters.includes('fees') || parameters.includes('type')) &&\n typeof type === 'undefined'\n ) {\n try {\n request.type = getTransactionType(\n request as TransactionSerializable,\n ) as any\n } catch {\n let isEip1559Network = eip1559NetworkCache.get(client.uid)\n if (typeof isEip1559Network === 'undefined') {\n const block = await getBlock()\n isEip1559Network = typeof block?.baseFeePerGas === 'bigint'\n eip1559NetworkCache.set(client.uid, isEip1559Network)\n }\n request.type = isEip1559Network ? 'eip1559' : 'legacy'\n }\n }\n\n if (parameters.includes('fees')) {\n // TODO(4844): derive blob base fees once https://github.com/ethereum/execution-apis/pull/486 is merged.\n\n if (request.type !== 'legacy' && request.type !== 'eip2930') {\n // EIP-1559 fees\n if (\n typeof request.maxFeePerGas === 'undefined' ||\n typeof request.maxPriorityFeePerGas === 'undefined'\n ) {\n const block = await getBlock()\n const { maxFeePerGas, maxPriorityFeePerGas } =\n await internal_estimateFeesPerGas(client, {\n block: block as Block,\n chain,\n request: request as PrepareTransactionRequestParameters,\n })\n\n if (\n typeof request.maxPriorityFeePerGas === 'undefined' &&\n request.maxFeePerGas &&\n request.maxFeePerGas < maxPriorityFeePerGas\n )\n throw new MaxFeePerGasTooLowError({\n maxPriorityFeePerGas,\n })\n\n request.maxPriorityFeePerGas = maxPriorityFeePerGas\n request.maxFeePerGas = maxFeePerGas\n }\n } else {\n // Legacy fees\n if (\n typeof request.maxFeePerGas !== 'undefined' ||\n typeof request.maxPriorityFeePerGas !== 'undefined'\n )\n throw new Eip1559FeesNotSupportedError()\n\n if (typeof request.gasPrice === 'undefined') {\n const block = await getBlock()\n const { gasPrice: gasPrice_ } = await internal_estimateFeesPerGas(\n client,\n {\n block: block as Block,\n chain,\n request: request as PrepareTransactionRequestParameters,\n type: 'legacy',\n },\n )\n request.gasPrice = gasPrice_\n }\n }\n }\n\n if (parameters.includes('gas') && typeof gas === 'undefined')\n request.gas = await getAction(\n client,\n estimateGas,\n 'estimateGas',\n )({\n ...request,\n account,\n prepare: account?.type === 'local' ? [] : ['blobVersionedHashes'],\n } as EstimateGasParameters)\n\n if (\n prepareTransactionRequest?.fn &&\n prepareTransactionRequest.runAt?.includes('afterFillParameters')\n )\n request = await prepareTransactionRequest.fn(\n { ...request, chain },\n {\n phase: 'afterFillParameters',\n },\n )\n\n assertRequest(request as AssertRequestParameters)\n\n delete request.parameters\n\n return request as any\n}\n", "import { formatGwei } from '../utils/unit/formatGwei.js'\nimport { BaseError } from './base.js'\n\nexport type BaseFeeScalarErrorType = BaseFeeScalarError & {\n name: 'BaseFeeScalarError'\n}\nexport class BaseFeeScalarError extends BaseError {\n constructor() {\n super('`baseFeeMultiplier` must be greater than 1.', {\n name: 'BaseFeeScalarError',\n })\n }\n}\n\nexport type Eip1559FeesNotSupportedErrorType = Eip1559FeesNotSupportedError & {\n name: 'Eip1559FeesNotSupportedError'\n}\nexport class Eip1559FeesNotSupportedError extends BaseError {\n constructor() {\n super('Chain does not support EIP-1559 fees.', {\n name: 'Eip1559FeesNotSupportedError',\n })\n }\n}\n\nexport type MaxFeePerGasTooLowErrorType = MaxFeePerGasTooLowError & {\n name: 'MaxFeePerGasTooLowError'\n}\nexport class MaxFeePerGasTooLowError extends BaseError {\n constructor({ maxPriorityFeePerGas }: { maxPriorityFeePerGas: bigint }) {\n super(\n `\\`maxFeePerGas\\` cannot be less than the \\`maxPriorityFeePerGas\\` (${formatGwei(\n maxPriorityFeePerGas,\n )} gwei).`,\n { name: 'MaxFeePerGasTooLowError' },\n )\n }\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n Eip1559FeesNotSupportedError,\n type Eip1559FeesNotSupportedErrorType,\n} from '../../errors/fee.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Block } from '../../types/block.js'\nimport type {\n Chain,\n ChainFeesFnParameters,\n GetChainParameter,\n} from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type HexToBigIntErrorType,\n hexToBigInt,\n} from '../../utils/encoding/fromHex.js'\nimport { getAction } from '../../utils/getAction.js'\nimport type { PrepareTransactionRequestParameters } from '../wallet/prepareTransactionRequest.js'\nimport { type GetBlockErrorType, getBlock } from './getBlock.js'\nimport { type GetGasPriceErrorType, getGasPrice } from './getGasPrice.js'\n\nexport type EstimateMaxPriorityFeePerGasParameters<\n chain extends Chain | undefined = Chain | undefined,\n chainOverride extends Chain | undefined = Chain | undefined,\n> = GetChainParameter\n\nexport type EstimateMaxPriorityFeePerGasReturnType = bigint\n\nexport type EstimateMaxPriorityFeePerGasErrorType =\n | GetBlockErrorType\n | HexToBigIntErrorType\n | RequestErrorType\n | GetBlockErrorType\n | GetGasPriceErrorType\n | Eip1559FeesNotSupportedErrorType\n | ErrorType\n\n/**\n * Returns an estimate for the max priority fee per gas (in wei) for a\n * transaction to be likely included in the next block.\n * Defaults to [`chain.fees.defaultPriorityFee`](/docs/clients/chains#fees-defaultpriorityfee) if set.\n *\n * - Docs: https://viem.sh/docs/actions/public/estimateMaxPriorityFeePerGas\n *\n * @param client - Client to use\n * @returns An estimate (in wei) for the max priority fee per gas. {@link EstimateMaxPriorityFeePerGasReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { estimateMaxPriorityFeePerGas } from 'viem/actions'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const maxPriorityFeePerGas = await estimateMaxPriorityFeePerGas(client)\n * // 10000000n\n */\nexport async function estimateMaxPriorityFeePerGas<\n chain extends Chain | undefined,\n chainOverride extends Chain | undefined,\n>(\n client: Client,\n args?:\n | EstimateMaxPriorityFeePerGasParameters\n | undefined,\n): Promise {\n return internal_estimateMaxPriorityFeePerGas(client, args as any)\n}\n\nexport async function internal_estimateMaxPriorityFeePerGas<\n chain extends Chain | undefined,\n chainOverride extends Chain | undefined,\n>(\n client: Client,\n args: EstimateMaxPriorityFeePerGasParameters & {\n block?: Block | undefined\n request?:\n | PrepareTransactionRequestParameters<\n chain,\n Account | undefined,\n chainOverride\n >\n | undefined\n },\n): Promise {\n const { block: block_, chain = client.chain, request } = args || {}\n\n try {\n const maxPriorityFeePerGas =\n chain?.fees?.maxPriorityFeePerGas ?? chain?.fees?.defaultPriorityFee\n\n if (typeof maxPriorityFeePerGas === 'function') {\n const block =\n block_ || (await getAction(client, getBlock, 'getBlock')({}))\n const maxPriorityFeePerGas_ = await maxPriorityFeePerGas({\n block,\n client,\n request,\n } as ChainFeesFnParameters)\n if (maxPriorityFeePerGas_ === null) throw new Error()\n return maxPriorityFeePerGas_\n }\n\n if (typeof maxPriorityFeePerGas !== 'undefined') return maxPriorityFeePerGas\n\n const maxPriorityFeePerGasHex = await client.request({\n method: 'eth_maxPriorityFeePerGas',\n })\n return hexToBigInt(maxPriorityFeePerGasHex)\n } catch {\n // If the RPC Provider does not support `eth_maxPriorityFeePerGas`\n // fall back to calculating it manually via `gasPrice - baseFeePerGas`.\n // See: https://github.com/ethereum/pm/issues/328#:~:text=eth_maxPriorityFeePerGas%20after%20London%20will%20effectively%20return%20eth_gasPrice%20%2D%20baseFee\n const [block, gasPrice] = await Promise.all([\n block_\n ? Promise.resolve(block_)\n : getAction(client, getBlock, 'getBlock')({}),\n getAction(client, getGasPrice, 'getGasPrice')({}),\n ])\n\n if (typeof block.baseFeePerGas !== 'bigint')\n throw new Eip1559FeesNotSupportedError()\n\n const maxPriorityFeePerGas = gasPrice - block.baseFeePerGas\n\n if (maxPriorityFeePerGas < 0n) return 0n\n return maxPriorityFeePerGas\n }\n}\n", "import type { Hash } from '../types/misc.js'\n\nimport { BaseError } from './base.js'\n\nexport type BlockNotFoundErrorType = BlockNotFoundError & {\n name: 'BlockNotFoundError'\n}\nexport class BlockNotFoundError extends BaseError {\n constructor({\n blockHash,\n blockNumber,\n }: {\n blockHash?: Hash | undefined\n blockNumber?: bigint | undefined\n }) {\n let identifier = 'Block'\n if (blockHash) identifier = `Block at hash \"${blockHash}\"`\n if (blockNumber) identifier = `Block at number \"${blockNumber}\"`\n super(`${identifier} could not be found.`, { name: 'BlockNotFoundError' })\n }\n}\n", "import type { Account } from '../../accounts/types.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n BlockNotFoundError,\n type BlockNotFoundErrorType,\n} from '../../errors/block.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { RpcBlock } from '../../types/rpc.js'\nimport type { Prettify } from '../../types/utils.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type NumberToHexErrorType,\n numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport {\n type FormattedBlock,\n formatBlock,\n} from '../../utils/formatters/block.js'\n\nexport type GetBlockParameters<\n includeTransactions extends boolean = false,\n blockTag extends BlockTag = 'latest',\n> = {\n /** Whether or not to include transaction data in the response. */\n includeTransactions?: includeTransactions | undefined\n} & (\n | {\n /** Hash of the block. */\n blockHash?: Hash | undefined\n blockNumber?: undefined\n blockTag?: undefined\n }\n | {\n blockHash?: undefined\n /** The block number. */\n blockNumber?: bigint | undefined\n blockTag?: undefined\n }\n | {\n blockHash?: undefined\n blockNumber?: undefined\n /**\n * The block tag.\n * @default 'latest'\n */\n blockTag?: blockTag | BlockTag | undefined\n }\n)\n\nexport type GetBlockReturnType<\n chain extends Chain | undefined = undefined,\n includeTransactions extends boolean = false,\n blockTag extends BlockTag = 'latest',\n> = Prettify>\n\nexport type GetBlockErrorType =\n | BlockNotFoundErrorType\n | NumberToHexErrorType\n | RequestErrorType\n | ErrorType\n\n/**\n * Returns information about a block at a block number, hash, or tag.\n *\n * - Docs: https://viem.sh/docs/actions/public/getBlock\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/blocks_fetching-blocks\n * - JSON-RPC Methods:\n * - Calls [`eth_getBlockByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblockbynumber) for `blockNumber` & `blockTag`.\n * - Calls [`eth_getBlockByHash`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblockbyhash) for `blockHash`.\n *\n * @param client - Client to use\n * @param parameters - {@link GetBlockParameters}\n * @returns Information about the block. {@link GetBlockReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getBlock } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const block = await getBlock(client)\n */\nexport async function getBlock<\n chain extends Chain | undefined,\n account extends Account | undefined,\n includeTransactions extends boolean = false,\n blockTag extends BlockTag = 'latest',\n>(\n client: Client,\n {\n blockHash,\n blockNumber,\n blockTag = client.experimental_blockTag ?? 'latest',\n includeTransactions: includeTransactions_,\n }: GetBlockParameters = {},\n): Promise> {\n const includeTransactions = includeTransactions_ ?? false\n\n const blockNumberHex =\n blockNumber !== undefined ? numberToHex(blockNumber) : undefined\n\n let block: RpcBlock | null = null\n if (blockHash) {\n block = await client.request(\n {\n method: 'eth_getBlockByHash',\n params: [blockHash, includeTransactions],\n },\n { dedupe: true },\n )\n } else {\n block = await client.request(\n {\n method: 'eth_getBlockByNumber',\n params: [blockNumberHex || blockTag, includeTransactions],\n },\n { dedupe: Boolean(blockNumberHex) },\n )\n }\n\n if (!block) throw new BlockNotFoundError({ blockHash, blockNumber })\n\n const format = client.chain?.formatters?.block?.format || formatBlock\n return format(block, 'getBlock')\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { SignedAuthorizationList } from '../../types/authorization.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type {\n Chain,\n ExtractChainFormatterExclude,\n ExtractChainFormatterReturnType,\n} from '../../types/chain.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { RpcAuthorizationList, RpcTransaction } from '../../types/rpc.js'\nimport type { Transaction, TransactionType } from '../../types/transaction.js'\nimport type { ExactPartial, UnionLooseOmit } from '../../types/utils.js'\nimport { hexToNumber } from '../encoding/fromHex.js'\nimport { type DefineFormatterErrorType, defineFormatter } from './formatter.js'\n\ntype TransactionPendingDependencies =\n | 'blockHash'\n | 'blockNumber'\n | 'transactionIndex'\n\nexport type FormattedTransaction<\n chain extends Chain | undefined = undefined,\n blockTag extends BlockTag = BlockTag,\n _FormatterReturnType = ExtractChainFormatterReturnType<\n chain,\n 'transaction',\n Transaction\n >,\n _ExcludedPendingDependencies extends string = TransactionPendingDependencies &\n ExtractChainFormatterExclude,\n> = UnionLooseOmit<_FormatterReturnType, TransactionPendingDependencies> & {\n [_K in _ExcludedPendingDependencies]: never\n} & Pick<\n Transaction,\n TransactionPendingDependencies\n >\n\nexport const transactionType = {\n '0x0': 'legacy',\n '0x1': 'eip2930',\n '0x2': 'eip1559',\n '0x3': 'eip4844',\n '0x4': 'eip7702',\n} as const satisfies Record\n\nexport type FormatTransactionErrorType = ErrorType\n\nexport function formatTransaction(\n transaction: ExactPartial,\n _?: string | undefined,\n) {\n const transaction_ = {\n ...transaction,\n blockHash: transaction.blockHash ? transaction.blockHash : null,\n blockNumber: transaction.blockNumber\n ? BigInt(transaction.blockNumber)\n : null,\n ...(transaction.blockTimestamp != null && {\n blockTimestamp: BigInt(transaction.blockTimestamp),\n }),\n chainId: transaction.chainId ? hexToNumber(transaction.chainId) : undefined,\n gas: transaction.gas ? BigInt(transaction.gas) : undefined,\n gasPrice: transaction.gasPrice ? BigInt(transaction.gasPrice) : undefined,\n maxFeePerBlobGas: transaction.maxFeePerBlobGas\n ? BigInt(transaction.maxFeePerBlobGas)\n : undefined,\n maxFeePerGas: transaction.maxFeePerGas\n ? BigInt(transaction.maxFeePerGas)\n : undefined,\n maxPriorityFeePerGas: transaction.maxPriorityFeePerGas\n ? BigInt(transaction.maxPriorityFeePerGas)\n : undefined,\n nonce: transaction.nonce ? hexToNumber(transaction.nonce) : undefined,\n to: transaction.to ? transaction.to : null,\n transactionIndex: transaction.transactionIndex\n ? Number(transaction.transactionIndex)\n : null,\n type: transaction.type\n ? (transactionType as any)[transaction.type]\n : undefined,\n typeHex: transaction.type ? transaction.type : undefined,\n value: transaction.value ? BigInt(transaction.value) : undefined,\n v: transaction.v ? BigInt(transaction.v) : undefined,\n } as Transaction\n\n if (transaction.authorizationList)\n transaction_.authorizationList = formatAuthorizationList(\n transaction.authorizationList,\n )\n\n transaction_.yParity = (() => {\n // If `yParity` is provided, we will use it.\n if (transaction.yParity) return Number(transaction.yParity)\n\n // If no `yParity` provided, try derive from `v`.\n if (typeof transaction_.v === 'bigint') {\n if (transaction_.v === 0n || transaction_.v === 27n) return 0\n if (transaction_.v === 1n || transaction_.v === 28n) return 1\n if (transaction_.v >= 35n) return transaction_.v % 2n === 0n ? 1 : 0\n }\n\n return undefined\n })()\n\n if (transaction_.type === 'legacy') {\n delete transaction_.accessList\n delete transaction_.maxFeePerBlobGas\n delete transaction_.maxFeePerGas\n delete transaction_.maxPriorityFeePerGas\n delete transaction_.yParity\n }\n if (transaction_.type === 'eip2930') {\n delete transaction_.maxFeePerBlobGas\n delete transaction_.maxFeePerGas\n delete transaction_.maxPriorityFeePerGas\n }\n if (transaction_.type === 'eip1559') delete transaction_.maxFeePerBlobGas\n\n return transaction_\n}\n\nexport type DefineTransactionErrorType = DefineFormatterErrorType | ErrorType\n\nexport const defineTransaction = /*#__PURE__*/ defineFormatter(\n 'transaction',\n formatTransaction,\n)\n\n//////////////////////////////////////////////////////////////////////////////\n\nfunction formatAuthorizationList(\n authorizationList: RpcAuthorizationList,\n): SignedAuthorizationList {\n return authorizationList.map((authorization) => ({\n address: (authorization as any).address,\n chainId: Number(authorization.chainId),\n nonce: Number(authorization.nonce),\n r: authorization.r,\n s: authorization.s,\n yParity: Number(authorization.yParity),\n })) as SignedAuthorizationList\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Block, BlockTag } from '../../types/block.js'\nimport type {\n Chain,\n ExtractChainFormatterExclude,\n ExtractChainFormatterReturnType,\n} from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { RpcBlock } from '../../types/rpc.js'\nimport type { ExactPartial, Prettify } from '../../types/utils.js'\n\nimport { type DefineFormatterErrorType, defineFormatter } from './formatter.js'\nimport { type FormattedTransaction, formatTransaction } from './transaction.js'\n\ntype BlockPendingDependencies = 'hash' | 'logsBloom' | 'nonce' | 'number'\n\nexport type FormattedBlock<\n chain extends Chain | undefined = undefined,\n includeTransactions extends boolean = boolean,\n blockTag extends BlockTag = BlockTag,\n _FormatterReturnType = ExtractChainFormatterReturnType<\n chain,\n 'block',\n Block\n >,\n _ExcludedPendingDependencies extends string = BlockPendingDependencies &\n ExtractChainFormatterExclude,\n _Formatted = Omit<_FormatterReturnType, BlockPendingDependencies> & {\n [_key in _ExcludedPendingDependencies]: never\n } & Pick<\n Block,\n BlockPendingDependencies\n >,\n _Transactions = includeTransactions extends true\n ? Prettify>[]\n : Hash[],\n> = Omit<_Formatted, 'transactions'> & {\n transactions: _Transactions\n}\n\nexport type FormatBlockErrorType = ErrorType\n\nexport function formatBlock(\n block: ExactPartial,\n _?: string | undefined,\n) {\n const transactions = (block.transactions ?? []).map((transaction) => {\n if (typeof transaction === 'string') return transaction\n return formatTransaction(transaction)\n })\n return {\n ...block,\n baseFeePerGas: block.baseFeePerGas ? BigInt(block.baseFeePerGas) : null,\n blobGasUsed: block.blobGasUsed ? BigInt(block.blobGasUsed) : undefined,\n difficulty: block.difficulty ? BigInt(block.difficulty) : undefined,\n excessBlobGas: block.excessBlobGas\n ? BigInt(block.excessBlobGas)\n : undefined,\n gasLimit: block.gasLimit ? BigInt(block.gasLimit) : undefined,\n gasUsed: block.gasUsed ? BigInt(block.gasUsed) : undefined,\n hash: block.hash ? block.hash : null,\n logsBloom: block.logsBloom ? block.logsBloom : null,\n nonce: block.nonce ? block.nonce : null,\n number: block.number ? BigInt(block.number) : null,\n size: block.size ? BigInt(block.size) : undefined,\n timestamp: block.timestamp ? BigInt(block.timestamp) : undefined,\n transactions,\n totalDifficulty: block.totalDifficulty\n ? BigInt(block.totalDifficulty)\n : null,\n } as Block\n}\n\nexport type DefineBlockErrorType = DefineFormatterErrorType | ErrorType\n\nexport const defineBlock = /*#__PURE__*/ defineFormatter('block', formatBlock)\n", "import type { Account } from '../../accounts/types.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type GetGasPriceReturnType = bigint\n\nexport type GetGasPriceErrorType = RequestErrorType | ErrorType\n\n/**\n * Returns the current price of gas (in wei).\n *\n * - Docs: https://viem.sh/docs/actions/public/getGasPrice\n * - JSON-RPC Methods: [`eth_gasPrice`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_gasprice)\n *\n * @param client - Client to use\n * @returns The gas price (in wei). {@link GetGasPriceReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getGasPrice } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const gasPrice = await getGasPrice(client)\n */\nexport async function getGasPrice<\n chain extends Chain | undefined,\n account extends Account | undefined,\n>(client: Client): Promise {\n const gasPrice = await client.request({\n method: 'eth_gasPrice',\n })\n return BigInt(gasPrice)\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n BaseFeeScalarError,\n type BaseFeeScalarErrorType,\n Eip1559FeesNotSupportedError,\n type Eip1559FeesNotSupportedErrorType,\n} from '../../errors/fee.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Block } from '../../types/block.js'\nimport type {\n Chain,\n ChainEstimateFeesPerGasFnParameters,\n ChainFeesFnParameters,\n GetChainParameter,\n} from '../../types/chain.js'\nimport type {\n FeeValuesEIP1559,\n FeeValuesLegacy,\n FeeValuesType,\n} from '../../types/fee.js'\nimport { getAction } from '../../utils/getAction.js'\nimport type { PrepareTransactionRequestParameters } from '../wallet/prepareTransactionRequest.js'\nimport {\n type EstimateMaxPriorityFeePerGasErrorType,\n internal_estimateMaxPriorityFeePerGas,\n} from './estimateMaxPriorityFeePerGas.js'\nimport { getBlock } from './getBlock.js'\nimport { type GetGasPriceErrorType, getGasPrice } from './getGasPrice.js'\n\nexport type EstimateFeesPerGasParameters<\n chain extends Chain | undefined = Chain | undefined,\n chainOverride extends Chain | undefined = Chain | undefined,\n type extends FeeValuesType = FeeValuesType,\n> = {\n /**\n * The type of fee values to return.\n *\n * - `legacy`: Returns the legacy gas price.\n * - `eip1559`: Returns the max fee per gas and max priority fee per gas.\n *\n * @default 'eip1559'\n */\n type?: type | FeeValuesType | undefined\n} & GetChainParameter\n\nexport type EstimateFeesPerGasReturnType<\n type extends FeeValuesType = FeeValuesType,\n> =\n | (type extends 'legacy' ? FeeValuesLegacy : never)\n | (type extends 'eip1559' ? FeeValuesEIP1559 : never)\n\nexport type EstimateFeesPerGasErrorType =\n | BaseFeeScalarErrorType\n | EstimateMaxPriorityFeePerGasErrorType\n | GetGasPriceErrorType\n | Eip1559FeesNotSupportedErrorType\n | ErrorType\n\n/**\n * Returns an estimate for the fees per gas (in wei) for a\n * transaction to be likely included in the next block.\n * Defaults to [`chain.fees.estimateFeesPerGas`](/docs/clients/chains#fees-estimatefeespergas) if set.\n *\n * - Docs: https://viem.sh/docs/actions/public/estimateFeesPerGas\n *\n * @param client - Client to use\n * @param parameters - {@link EstimateFeesPerGasParameters}\n * @returns An estimate (in wei) for the fees per gas. {@link EstimateFeesPerGasReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { estimateFeesPerGas } from 'viem/actions'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const maxPriorityFeePerGas = await estimateFeesPerGas(client)\n * // { maxFeePerGas: ..., maxPriorityFeePerGas: ... }\n */\nexport async function estimateFeesPerGas<\n chain extends Chain | undefined,\n chainOverride extends Chain | undefined,\n type extends FeeValuesType = 'eip1559',\n>(\n client: Client,\n args?: EstimateFeesPerGasParameters | undefined,\n): Promise> {\n return internal_estimateFeesPerGas(client, args as any)\n}\n\nexport async function internal_estimateFeesPerGas<\n chain extends Chain | undefined,\n chainOverride extends Chain | undefined,\n type extends FeeValuesType = 'eip1559',\n>(\n client: Client,\n args: EstimateFeesPerGasParameters & {\n block?: Block | undefined\n request?: PrepareTransactionRequestParameters | undefined\n },\n): Promise> {\n const {\n block: block_,\n chain = client.chain,\n request,\n type = 'eip1559',\n } = args || {}\n\n const baseFeeMultiplier = await (async () => {\n if (typeof chain?.fees?.baseFeeMultiplier === 'function')\n return chain.fees.baseFeeMultiplier({\n block: block_ as Block,\n client,\n request,\n } as ChainFeesFnParameters)\n return chain?.fees?.baseFeeMultiplier ?? 1.2\n })()\n if (baseFeeMultiplier < 1) throw new BaseFeeScalarError()\n\n const decimals = baseFeeMultiplier.toString().split('.')[1]?.length ?? 0\n const denominator = 10 ** decimals\n const multiply = (base: bigint) =>\n (base * BigInt(Math.ceil(baseFeeMultiplier * denominator))) /\n BigInt(denominator)\n\n const block = block_\n ? block_\n : await getAction(client, getBlock, 'getBlock')({})\n\n if (typeof chain?.fees?.estimateFeesPerGas === 'function') {\n const fees = (await chain.fees.estimateFeesPerGas({\n block: block_ as Block,\n client,\n multiply,\n request,\n type,\n } as ChainEstimateFeesPerGasFnParameters)) as unknown as EstimateFeesPerGasReturnType\n\n if (fees !== null) return fees\n }\n\n if (type === 'eip1559') {\n if (typeof block.baseFeePerGas !== 'bigint')\n throw new Eip1559FeesNotSupportedError()\n\n const maxPriorityFeePerGas =\n typeof request?.maxPriorityFeePerGas === 'bigint'\n ? request.maxPriorityFeePerGas\n : await internal_estimateMaxPriorityFeePerGas(\n client as Client,\n {\n block: block as Block,\n chain,\n request,\n },\n )\n\n const baseFeePerGas = multiply(block.baseFeePerGas)\n const maxFeePerGas =\n request?.maxFeePerGas ?? baseFeePerGas + maxPriorityFeePerGas\n\n return {\n maxFeePerGas,\n maxPriorityFeePerGas,\n } as EstimateFeesPerGasReturnType\n }\n\n const gasPrice =\n request?.gasPrice ??\n multiply(await getAction(client, getGasPrice, 'getGasPrice')({}))\n return {\n gasPrice,\n } as EstimateFeesPerGasReturnType\n}\n", "import type { Address } from 'abitype'\n\nimport type { Account } from '../../accounts/types.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type HexToNumberErrorType,\n hexToNumber,\n} from '../../utils/encoding/fromHex.js'\nimport {\n type NumberToHexErrorType,\n numberToHex,\n} from '../../utils/encoding/toHex.js'\n\nexport type GetTransactionCountParameters = {\n /** The account address. */\n address: Address\n} & (\n | {\n /** The block number. */\n blockNumber?: bigint | undefined\n blockTag?: undefined\n }\n | {\n blockNumber?: undefined\n /** The block tag. Defaults to 'latest'. */\n blockTag?: BlockTag | undefined\n }\n)\nexport type GetTransactionCountReturnType = number\n\nexport type GetTransactionCountErrorType =\n | RequestErrorType\n | NumberToHexErrorType\n | HexToNumberErrorType\n | ErrorType\n\n/**\n * Returns the number of [Transactions](https://viem.sh/docs/glossary/terms#transaction) an Account has sent.\n *\n * - Docs: https://viem.sh/docs/actions/public/getTransactionCount\n * - JSON-RPC Methods: [`eth_getTransactionCount`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_gettransactioncount)\n *\n * @param client - Client to use\n * @param parameters - {@link GetTransactionCountParameters}\n * @returns The number of transactions an account has sent. {@link GetTransactionCountReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getTransactionCount } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const transactionCount = await getTransactionCount(client, {\n * address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n */\nexport async function getTransactionCount<\n chain extends Chain | undefined,\n account extends Account | undefined,\n>(\n client: Client,\n { address, blockTag = 'latest', blockNumber }: GetTransactionCountParameters,\n): Promise {\n const count = await client.request(\n {\n method: 'eth_getTransactionCount',\n params: [\n address,\n typeof blockNumber === 'bigint' ? numberToHex(blockNumber) : blockTag,\n ],\n },\n {\n dedupe: Boolean(blockNumber),\n },\n )\n return hexToNumber(count)\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Kzg } from '../../types/kzg.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type HexToBytesErrorType, hexToBytes } from '../encoding/toBytes.js'\nimport { type BytesToHexErrorType, bytesToHex } from '../encoding/toHex.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type BlobsToCommitmentsParameters<\n blobs extends readonly ByteArray[] | readonly Hex[] =\n | readonly ByteArray[]\n | readonly Hex[],\n to extends To | undefined = undefined,\n> = {\n /** Blobs to transform into commitments. */\n blobs: blobs | readonly ByteArray[] | readonly Hex[]\n /** KZG implementation. */\n kzg: Pick\n /** Return type. */\n to?: to | To | undefined\n}\n\nexport type BlobsToCommitmentsReturnType =\n | (to extends 'bytes' ? readonly ByteArray[] : never)\n | (to extends 'hex' ? readonly Hex[] : never)\n\nexport type BlobsToCommitmentsErrorType =\n | HexToBytesErrorType\n | BytesToHexErrorType\n | ErrorType\n\n/**\n * Compute commitments from a list of blobs.\n *\n * @example\n * ```ts\n * import { blobsToCommitments, toBlobs } from 'viem'\n * import { kzg } from './kzg'\n *\n * const blobs = toBlobs({ data: '0x1234' })\n * const commitments = blobsToCommitments({ blobs, kzg })\n * ```\n */\nexport function blobsToCommitments<\n const blobs extends readonly ByteArray[] | readonly Hex[],\n to extends To =\n | (blobs extends readonly Hex[] ? 'hex' : never)\n | (blobs extends readonly ByteArray[] ? 'bytes' : never),\n>(\n parameters: BlobsToCommitmentsParameters,\n): BlobsToCommitmentsReturnType {\n const { kzg } = parameters\n\n const to =\n parameters.to ?? (typeof parameters.blobs[0] === 'string' ? 'hex' : 'bytes')\n const blobs = (\n typeof parameters.blobs[0] === 'string'\n ? parameters.blobs.map((x) => hexToBytes(x as any))\n : parameters.blobs\n ) as ByteArray[]\n\n const commitments: ByteArray[] = []\n for (const blob of blobs)\n commitments.push(Uint8Array.from(kzg.blobToKzgCommitment(blob)))\n\n return (to === 'bytes'\n ? commitments\n : commitments.map((x) =>\n bytesToHex(x),\n )) as {} as BlobsToCommitmentsReturnType\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Kzg } from '../../types/kzg.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type HexToBytesErrorType, hexToBytes } from '../encoding/toBytes.js'\nimport { type BytesToHexErrorType, bytesToHex } from '../encoding/toHex.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type blobsToProofsParameters<\n blobs extends readonly ByteArray[] | readonly Hex[],\n commitments extends readonly ByteArray[] | readonly Hex[],\n to extends To =\n | (blobs extends readonly Hex[] ? 'hex' : never)\n | (blobs extends readonly ByteArray[] ? 'bytes' : never),\n ///\n _blobsType =\n | (blobs extends readonly Hex[] ? readonly Hex[] : never)\n | (blobs extends readonly ByteArray[] ? readonly ByteArray[] : never),\n> = {\n /** Blobs to transform into proofs. */\n blobs: blobs\n /** Commitments for the blobs. */\n commitments: commitments &\n (commitments extends _blobsType\n ? {}\n : `commitments must be the same type as blobs`)\n /** KZG implementation. */\n kzg: Pick\n /** Return type. */\n to?: to | To | undefined\n}\n\nexport type blobsToProofsReturnType =\n | (to extends 'bytes' ? ByteArray[] : never)\n | (to extends 'hex' ? Hex[] : never)\n\nexport type blobsToProofsErrorType =\n | BytesToHexErrorType\n | HexToBytesErrorType\n | ErrorType\n\n/**\n * Compute the proofs for a list of blobs and their commitments.\n *\n * @example\n * ```ts\n * import {\n * blobsToCommitments,\n * toBlobs\n * } from 'viem'\n * import { kzg } from './kzg'\n *\n * const blobs = toBlobs({ data: '0x1234' })\n * const commitments = blobsToCommitments({ blobs, kzg })\n * const proofs = blobsToProofs({ blobs, commitments, kzg })\n * ```\n */\nexport function blobsToProofs<\n const blobs extends readonly ByteArray[] | readonly Hex[],\n const commitments extends readonly ByteArray[] | readonly Hex[],\n to extends To =\n | (blobs extends readonly Hex[] ? 'hex' : never)\n | (blobs extends readonly ByteArray[] ? 'bytes' : never),\n>(\n parameters: blobsToProofsParameters,\n): blobsToProofsReturnType {\n const { kzg } = parameters\n\n const to =\n parameters.to ?? (typeof parameters.blobs[0] === 'string' ? 'hex' : 'bytes')\n\n const blobs = (\n typeof parameters.blobs[0] === 'string'\n ? parameters.blobs.map((x) => hexToBytes(x as any))\n : parameters.blobs\n ) as ByteArray[]\n const commitments = (\n typeof parameters.commitments[0] === 'string'\n ? parameters.commitments.map((x) => hexToBytes(x as any))\n : parameters.commitments\n ) as ByteArray[]\n\n const proofs: ByteArray[] = []\n for (let i = 0; i < blobs.length; i++) {\n const blob = blobs[i]\n const commitment = commitments[i]\n proofs.push(Uint8Array.from(kzg.computeBlobKzgProof(blob, commitment)))\n }\n\n return (to === 'bytes'\n ? proofs\n : proofs.map((x) => bytesToHex(x))) as {} as blobsToProofsReturnType\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type BytesToHexErrorType, bytesToHex } from '../encoding/toHex.js'\nimport { type Sha256ErrorType, sha256 } from '../hash/sha256.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type CommitmentToVersionedHashParameters<\n commitment extends Uint8Array | Hex = Uint8Array | Hex,\n to extends To | undefined = undefined,\n> = {\n /** Commitment from blob. */\n commitment: commitment | Uint8Array | Hex\n /** Return type. */\n to?: to | To | undefined\n /** Version to tag onto the hash. */\n version?: number | undefined\n}\n\nexport type CommitmentToVersionedHashReturnType =\n | (to extends 'bytes' ? ByteArray : never)\n | (to extends 'hex' ? Hex : never)\n\nexport type CommitmentToVersionedHashErrorType =\n | Sha256ErrorType\n | BytesToHexErrorType\n | ErrorType\n\n/**\n * Transform a commitment to it's versioned hash.\n *\n * @example\n * ```ts\n * import {\n * blobsToCommitments,\n * commitmentToVersionedHash,\n * toBlobs\n * } from 'viem'\n * import { kzg } from './kzg'\n *\n * const blobs = toBlobs({ data: '0x1234' })\n * const [commitment] = blobsToCommitments({ blobs, kzg })\n * const versionedHash = commitmentToVersionedHash({ commitment })\n * ```\n */\nexport function commitmentToVersionedHash<\n const commitment extends Hex | ByteArray,\n to extends To =\n | (commitment extends Hex ? 'hex' : never)\n | (commitment extends ByteArray ? 'bytes' : never),\n>(\n parameters: CommitmentToVersionedHashParameters,\n): CommitmentToVersionedHashReturnType {\n const { commitment, version = 1 } = parameters\n const to = parameters.to ?? (typeof commitment === 'string' ? 'hex' : 'bytes')\n\n const versionedHash = sha256(commitment, 'bytes')\n versionedHash.set([version], 0)\n return (\n to === 'bytes' ? versionedHash : bytesToHex(versionedHash)\n ) as CommitmentToVersionedHashReturnType\n}\n", "/**\n * SHA2-256 a.k.a. sha256. In JS, it is the fastest hash, even faster than Blake3.\n *\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n *\n * Check out [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n * @deprecated\n */\nimport {\n SHA224 as SHA224n,\n sha224 as sha224n,\n SHA256 as SHA256n,\n sha256 as sha256n,\n} from './sha2.ts';\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexport const SHA256: typeof SHA256n = SHA256n;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexport const sha256: typeof sha256n = sha256n;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexport const SHA224: typeof SHA224n = SHA224n;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexport const sha224: typeof sha224n = sha224n;\n", "import { sha256 as noble_sha256 } from '@noble/hashes/sha256'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type IsHexErrorType, isHex } from '../data/isHex.js'\nimport { type ToBytesErrorType, toBytes } from '../encoding/toBytes.js'\nimport { type ToHexErrorType, toHex } from '../encoding/toHex.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type Sha256Hash =\n | (to extends 'bytes' ? ByteArray : never)\n | (to extends 'hex' ? Hex : never)\n\nexport type Sha256ErrorType =\n | IsHexErrorType\n | ToBytesErrorType\n | ToHexErrorType\n | ErrorType\n\nexport function sha256(\n value: Hex | ByteArray,\n to_?: to | undefined,\n): Sha256Hash {\n const to = to_ || 'hex'\n const bytes = noble_sha256(\n isHex(value, { strict: false }) ? toBytes(value) : value,\n )\n if (to === 'bytes') return bytes as Sha256Hash\n return toHex(bytes) as Sha256Hash\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport {\n type CommitmentToVersionedHashErrorType,\n commitmentToVersionedHash,\n} from './commitmentToVersionedHash.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type CommitmentsToVersionedHashesParameters<\n commitments extends readonly Uint8Array[] | readonly Hex[] =\n | readonly Uint8Array[]\n | readonly Hex[],\n to extends To | undefined = undefined,\n> = {\n /** Commitments from blobs. */\n commitments: commitments | readonly Uint8Array[] | readonly Hex[]\n /** Return type. */\n to?: to | To | undefined\n /** Version to tag onto the hashes. */\n version?: number | undefined\n}\n\nexport type CommitmentsToVersionedHashesReturnType =\n | (to extends 'bytes' ? readonly ByteArray[] : never)\n | (to extends 'hex' ? readonly Hex[] : never)\n\nexport type CommitmentsToVersionedHashesErrorType =\n | CommitmentToVersionedHashErrorType\n | ErrorType\n\n/**\n * Transform a list of commitments to their versioned hashes.\n *\n * @example\n * ```ts\n * import {\n * blobsToCommitments,\n * commitmentsToVersionedHashes,\n * toBlobs\n * } from 'viem'\n * import { kzg } from './kzg'\n *\n * const blobs = toBlobs({ data: '0x1234' })\n * const commitments = blobsToCommitments({ blobs, kzg })\n * const versionedHashes = commitmentsToVersionedHashes({ commitments })\n * ```\n */\nexport function commitmentsToVersionedHashes<\n const commitments extends readonly Uint8Array[] | readonly Hex[],\n to extends To =\n | (commitments extends readonly Hex[] ? 'hex' : never)\n | (commitments extends readonly ByteArray[] ? 'bytes' : never),\n>(\n parameters: CommitmentsToVersionedHashesParameters,\n): CommitmentsToVersionedHashesReturnType {\n const { commitments, version } = parameters\n\n const to =\n parameters.to ?? (typeof commitments[0] === 'string' ? 'hex' : 'bytes')\n\n const hashes: Uint8Array[] | Hex[] = []\n for (const commitment of commitments) {\n hashes.push(\n commitmentToVersionedHash({\n commitment,\n to,\n version,\n }) as any,\n )\n }\n return hashes as any\n}\n", "import { versionedHashVersionKzg } from '../constants/kzg.js'\nimport type { Hash } from '../types/misc.js'\n\nimport { BaseError } from './base.js'\n\nexport type BlobSizeTooLargeErrorType = BlobSizeTooLargeError & {\n name: 'BlobSizeTooLargeError'\n}\nexport class BlobSizeTooLargeError extends BaseError {\n constructor({ maxSize, size }: { maxSize: number; size: number }) {\n super('Blob size is too large.', {\n metaMessages: [`Max: ${maxSize} bytes`, `Given: ${size} bytes`],\n name: 'BlobSizeTooLargeError',\n })\n }\n}\n\nexport type EmptyBlobErrorType = EmptyBlobError & {\n name: 'EmptyBlobError'\n}\nexport class EmptyBlobError extends BaseError {\n constructor() {\n super('Blob data must not be empty.', { name: 'EmptyBlobError' })\n }\n}\n\nexport type InvalidVersionedHashSizeErrorType =\n InvalidVersionedHashSizeError & {\n name: 'InvalidVersionedHashSizeError'\n }\nexport class InvalidVersionedHashSizeError extends BaseError {\n constructor({\n hash,\n size,\n }: {\n hash: Hash\n size: number\n }) {\n super(`Versioned hash \"${hash}\" size is invalid.`, {\n metaMessages: ['Expected: 32', `Received: ${size}`],\n name: 'InvalidVersionedHashSizeError',\n })\n }\n}\n\nexport type InvalidVersionedHashVersionErrorType =\n InvalidVersionedHashVersionError & {\n name: 'InvalidVersionedHashVersionError'\n }\nexport class InvalidVersionedHashVersionError extends BaseError {\n constructor({\n hash,\n version,\n }: {\n hash: Hash\n version: number\n }) {\n super(`Versioned hash \"${hash}\" version is invalid.`, {\n metaMessages: [\n `Expected: ${versionedHashVersionKzg}`,\n `Received: ${version}`,\n ],\n name: 'InvalidVersionedHashVersionError',\n })\n }\n}\n", "import {\n bytesPerBlob,\n bytesPerFieldElement,\n fieldElementsPerBlob,\n maxBytesPerTransaction,\n} from '../../constants/blob.js'\nimport {\n BlobSizeTooLargeError,\n type BlobSizeTooLargeErrorType,\n EmptyBlobError,\n type EmptyBlobErrorType,\n} from '../../errors/blob.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type CreateCursorErrorType, createCursor } from '../cursor.js'\nimport { type SizeErrorType, size } from '../data/size.js'\nimport { type HexToBytesErrorType, hexToBytes } from '../encoding/toBytes.js'\nimport { type BytesToHexErrorType, bytesToHex } from '../encoding/toHex.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type ToBlobsParameters<\n data extends Hex | ByteArray = Hex | ByteArray,\n to extends To | undefined = undefined,\n> = {\n /** Data to transform to a blob. */\n data: data | Hex | ByteArray\n /** Return type. */\n to?: to | To | undefined\n}\n\nexport type ToBlobsReturnType =\n | (to extends 'bytes' ? readonly ByteArray[] : never)\n | (to extends 'hex' ? readonly Hex[] : never)\n\nexport type ToBlobsErrorType =\n | BlobSizeTooLargeErrorType\n | BytesToHexErrorType\n | CreateCursorErrorType\n | EmptyBlobErrorType\n | HexToBytesErrorType\n | SizeErrorType\n | ErrorType\n\n/**\n * Transforms arbitrary data to blobs.\n *\n * @example\n * ```ts\n * import { toBlobs, stringToHex } from 'viem'\n *\n * const blobs = toBlobs({ data: stringToHex('hello world') })\n * ```\n */\nexport function toBlobs<\n const data extends Hex | ByteArray,\n to extends To =\n | (data extends Hex ? 'hex' : never)\n | (data extends ByteArray ? 'bytes' : never),\n>(parameters: ToBlobsParameters): ToBlobsReturnType {\n const to =\n parameters.to ?? (typeof parameters.data === 'string' ? 'hex' : 'bytes')\n const data = (\n typeof parameters.data === 'string'\n ? hexToBytes(parameters.data)\n : parameters.data\n ) as ByteArray\n\n const size_ = size(data)\n if (!size_) throw new EmptyBlobError()\n if (size_ > maxBytesPerTransaction)\n throw new BlobSizeTooLargeError({\n maxSize: maxBytesPerTransaction,\n size: size_,\n })\n\n const blobs = []\n\n let active = true\n let position = 0\n while (active) {\n const blob = createCursor(new Uint8Array(bytesPerBlob))\n\n let size = 0\n while (size < fieldElementsPerBlob) {\n const bytes = data.slice(position, position + (bytesPerFieldElement - 1))\n\n // Push a zero byte so the field element doesn't overflow the BLS modulus.\n blob.pushByte(0x00)\n\n // Push the current segment of data bytes.\n blob.pushBytes(bytes)\n\n // If we detect that the current segment of data bytes is less than 31 bytes,\n // we can stop processing and push a terminator byte to indicate the end of the blob.\n if (bytes.length < 31) {\n blob.pushByte(0x80)\n active = false\n break\n }\n\n size++\n position += 31\n }\n\n blobs.push(blob)\n }\n\n return (\n to === 'bytes'\n ? blobs.map((x) => x.bytes)\n : blobs.map((x) => bytesToHex(x.bytes))\n ) as any\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { BlobSidecars } from '../../types/eip4844.js'\nimport type { Kzg } from '../../types/kzg.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport type { OneOf } from '../../types/utils.js'\nimport {\n type BlobsToCommitmentsErrorType,\n blobsToCommitments,\n} from './blobsToCommitments.js'\nimport { blobsToProofs, type blobsToProofsErrorType } from './blobsToProofs.js'\nimport { type ToBlobsErrorType, toBlobs } from './toBlobs.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type ToBlobSidecarsParameters<\n data extends Hex | ByteArray | undefined = undefined,\n blobs extends readonly Hex[] | readonly ByteArray[] | undefined = undefined,\n to extends To =\n | (blobs extends readonly Hex[] ? 'hex' : never)\n | (blobs extends readonly ByteArray[] ? 'bytes' : never),\n ///\n _blobsType =\n | (blobs extends readonly Hex[] ? readonly Hex[] : never)\n | (blobs extends readonly ByteArray[] ? readonly ByteArray[] : never),\n> = {\n /** Return type. */\n to?: to | To | undefined\n} & OneOf<\n | {\n /** Data to transform into blobs. */\n data: data | Hex | ByteArray\n /** KZG implementation. */\n kzg: Kzg\n }\n | {\n /** Blobs. */\n blobs: blobs | readonly Hex[] | readonly ByteArray[]\n /** Commitment for each blob. */\n commitments: _blobsType | readonly Hex[] | readonly ByteArray[]\n /** Proof for each blob. */\n proofs: _blobsType | readonly Hex[] | readonly ByteArray[]\n }\n>\n\nexport type ToBlobSidecarsReturnType =\n | (to extends 'bytes' ? BlobSidecars : never)\n | (to extends 'hex' ? BlobSidecars : never)\n\nexport type ToBlobSidecarsErrorType =\n | BlobsToCommitmentsErrorType\n | ToBlobsErrorType\n | blobsToProofsErrorType\n | ErrorType\n\n/**\n * Transforms arbitrary data (or blobs, commitments, & proofs) into a sidecar array.\n *\n * @example\n * ```ts\n * import { toBlobSidecars, stringToHex } from 'viem'\n *\n * const sidecars = toBlobSidecars({ data: stringToHex('hello world') })\n * ```\n *\n * @example\n * ```ts\n * import {\n * blobsToCommitments,\n * toBlobs,\n * blobsToProofs,\n * toBlobSidecars,\n * stringToHex\n * } from 'viem'\n *\n * const blobs = toBlobs({ data: stringToHex('hello world') })\n * const commitments = blobsToCommitments({ blobs, kzg })\n * const proofs = blobsToProofs({ blobs, commitments, kzg })\n *\n * const sidecars = toBlobSidecars({ blobs, commitments, proofs })\n * ```\n */\nexport function toBlobSidecars<\n const data extends Hex | ByteArray | undefined = undefined,\n const blobs extends\n | readonly Hex[]\n | readonly ByteArray[]\n | undefined = undefined,\n to extends To =\n | (data extends Hex ? 'hex' : never)\n | (data extends ByteArray ? 'bytes' : never)\n | (blobs extends readonly Hex[] ? 'hex' : never)\n | (blobs extends readonly ByteArray[] ? 'bytes' : never),\n>(\n parameters: ToBlobSidecarsParameters,\n): ToBlobSidecarsReturnType {\n const { data, kzg, to } = parameters\n const blobs = parameters.blobs ?? toBlobs({ data: data!, to })\n const commitments =\n parameters.commitments ?? blobsToCommitments({ blobs, kzg: kzg!, to })\n const proofs =\n parameters.proofs ?? blobsToProofs({ blobs, commitments, kzg: kzg!, to })\n\n const sidecars: BlobSidecars = []\n for (let i = 0; i < blobs.length; i++)\n sidecars.push({\n blob: blobs[i],\n commitment: commitments[i],\n proof: proofs[i],\n })\n\n return sidecars as ToBlobSidecarsReturnType\n}\n", "import {\n InvalidSerializableTransactionError,\n type InvalidSerializableTransactionErrorType,\n} from '../../errors/transaction.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n FeeValuesEIP1559,\n FeeValuesEIP4844,\n FeeValuesLegacy,\n} from '../../index.js'\nimport type {\n TransactionRequestGeneric,\n TransactionSerializableEIP2930,\n TransactionSerializableEIP4844,\n TransactionSerializableEIP7702,\n TransactionSerializableGeneric,\n} from '../../types/transaction.js'\nimport type { Assign, ExactPartial, IsNever, OneOf } from '../../types/utils.js'\n\nexport type GetTransactionType<\n transaction extends OneOf<\n TransactionSerializableGeneric | TransactionRequestGeneric\n > = TransactionSerializableGeneric,\n result =\n | (transaction extends LegacyProperties ? 'legacy' : never)\n | (transaction extends EIP1559Properties ? 'eip1559' : never)\n | (transaction extends EIP2930Properties ? 'eip2930' : never)\n | (transaction extends EIP4844Properties ? 'eip4844' : never)\n | (transaction extends EIP7702Properties ? 'eip7702' : never)\n | (transaction['type'] extends TransactionSerializableGeneric['type']\n ? Extract\n : never),\n> = IsNever extends true\n ? string\n : IsNever extends false\n ? result\n : string\n\nexport type GetTransactionTypeErrorType =\n | InvalidSerializableTransactionErrorType\n | ErrorType\n\nexport function getTransactionType<\n const transaction extends OneOf<\n TransactionSerializableGeneric | TransactionRequestGeneric\n >,\n>(transaction: transaction): GetTransactionType {\n if (transaction.type)\n return transaction.type as GetTransactionType\n\n if (typeof transaction.authorizationList !== 'undefined')\n return 'eip7702' as any\n\n if (\n typeof transaction.blobs !== 'undefined' ||\n typeof transaction.blobVersionedHashes !== 'undefined' ||\n typeof transaction.maxFeePerBlobGas !== 'undefined' ||\n typeof transaction.sidecars !== 'undefined'\n )\n return 'eip4844' as any\n\n if (\n typeof transaction.maxFeePerGas !== 'undefined' ||\n typeof transaction.maxPriorityFeePerGas !== 'undefined'\n ) {\n return 'eip1559' as any\n }\n\n if (typeof transaction.gasPrice !== 'undefined') {\n if (typeof transaction.accessList !== 'undefined') return 'eip2930' as any\n return 'legacy' as any\n }\n\n throw new InvalidSerializableTransactionError({ transaction })\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////\n// Types\n\ntype BaseProperties = {\n accessList?: undefined\n authorizationList?: undefined\n blobs?: undefined\n blobVersionedHashes?: undefined\n gasPrice?: undefined\n maxFeePerBlobGas?: undefined\n maxFeePerGas?: undefined\n maxPriorityFeePerGas?: undefined\n sidecars?: undefined\n}\n\ntype LegacyProperties = Assign\ntype EIP1559Properties = Assign<\n BaseProperties,\n OneOf<\n | {\n maxFeePerGas: FeeValuesEIP1559['maxFeePerGas']\n }\n | {\n maxPriorityFeePerGas: FeeValuesEIP1559['maxPriorityFeePerGas']\n },\n FeeValuesEIP1559\n > & {\n accessList?: TransactionSerializableEIP2930['accessList'] | undefined\n }\n>\ntype EIP2930Properties = Assign<\n ExactPartial,\n {\n accessList: TransactionSerializableEIP2930['accessList']\n }\n>\ntype EIP4844Properties = Assign<\n ExactPartial,\n ExactPartial &\n OneOf<\n | {\n blobs: TransactionSerializableEIP4844['blobs']\n }\n | {\n blobVersionedHashes: TransactionSerializableEIP4844['blobVersionedHashes']\n }\n | {\n sidecars: TransactionSerializableEIP4844['sidecars']\n },\n TransactionSerializableEIP4844\n >\n>\ntype EIP7702Properties = Assign<\n ExactPartial,\n {\n authorizationList: TransactionSerializableEIP7702['authorizationList']\n }\n>\n", "import type { Address } from 'abitype'\nimport { parseAccount } from '../../accounts/utils/parseAccount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { BaseError } from '../../errors/base.js'\nimport { BaseFeeScalarError } from '../../errors/fee.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account, GetAccountParameter } from '../../types/account.js'\nimport type { ExtractCapabilities } from '../../types/capabilities.js'\nimport type {\n Chain,\n ChainFeesFnParameters,\n DeriveChain,\n GetChainParameter,\n} from '../../types/chain.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { TransactionRequest } from '../../types/transaction.js'\nimport type { UnionOmit } from '../../types/utils.js'\nimport {\n type GetTransactionErrorReturnType,\n getTransactionError,\n} from '../../utils/errors/getTransactionError.js'\nimport { extract } from '../../utils/formatters/extract.js'\nimport {\n type FormattedTransaction,\n formatTransaction,\n} from '../../utils/formatters/transaction.js'\nimport {\n type FormattedTransactionRequest,\n formatTransactionRequest,\n} from '../../utils/formatters/transactionRequest.js'\nimport { getAction } from '../../utils/getAction.js'\nimport type { NonceManager } from '../../utils/nonceManager.js'\nimport { assertRequest } from '../../utils/transaction/assertRequest.js'\nimport { getBlock } from './getBlock.js'\nimport { getChainId as getChainId_ } from './getChainId.js'\n\nexport type FillTransactionParameters<\n chain extends Chain | undefined = Chain | undefined,\n account extends Account | undefined = Account | undefined,\n chainOverride extends Chain | undefined = Chain | undefined,\n accountOverride extends Account | Address | undefined =\n | Account\n | Address\n | undefined,\n ///\n _derivedChain extends Chain | undefined = DeriveChain,\n> = UnionOmit, 'from'> &\n GetAccountParameter &\n GetChainParameter & {\n /**\n * Nonce manager to use for the transaction request.\n */\n nonceManager?: NonceManager | undefined\n }\n\nexport type FillTransactionReturnType<\n chain extends Chain | undefined = Chain | undefined,\n chainOverride extends Chain | undefined = Chain | undefined,\n ///\n _derivedChain extends Chain | undefined = DeriveChain,\n> = {\n capabilities?:\n | ExtractCapabilities<'fillTransaction', 'ReturnType'>\n | undefined\n raw: Hex\n transaction: FormattedTransaction<_derivedChain>\n}\n\nexport type FillTransactionErrorType =\n | GetTransactionErrorReturnType\n | ErrorType\n\n/**\n * Fills a transaction request with the necessary fields to be signed over.\n *\n * - Docs: https://viem.sh/docs/actions/public/fillTransaction\n *\n * @param client - Client to use\n * @param parameters - {@link FillTransactionParameters}\n * @returns The filled transaction. {@link FillTransactionReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { fillTransaction } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const result = await fillTransaction(client, {\n * account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * value: parseEther('1'),\n * })\n */\nexport async function fillTransaction<\n chain extends Chain | undefined,\n account extends Account | undefined,\n chainOverride extends Chain | undefined = undefined,\n accountOverride extends Account | Address | undefined = undefined,\n>(\n client: Client,\n parameters: FillTransactionParameters<\n chain,\n account,\n chainOverride,\n accountOverride\n >,\n): Promise> {\n const {\n account = client.account,\n accessList,\n authorizationList,\n chain = client.chain,\n blobVersionedHashes,\n blobs,\n data,\n gas,\n gasPrice,\n maxFeePerBlobGas,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce: nonce_,\n nonceManager,\n to,\n type,\n value,\n ...rest\n } = parameters\n\n const nonce = await (async () => {\n if (!account) return nonce_\n if (!nonceManager) return nonce_\n if (typeof nonce_ !== 'undefined') return nonce_\n const account_ = parseAccount(account)\n const chainId = chain\n ? chain.id\n : await getAction(client, getChainId_, 'getChainId')({})\n return await nonceManager.consume({\n address: account_.address,\n chainId,\n client,\n })\n })()\n\n assertRequest(parameters)\n\n const chainFormat = chain?.formatters?.transactionRequest?.format\n const format = chainFormat || formatTransactionRequest\n\n const request = format(\n {\n // Pick out extra data that might exist on the chain's transaction request type.\n ...extract(rest, { format: chainFormat }),\n account: account ? parseAccount(account) : undefined,\n accessList,\n authorizationList,\n blobs,\n blobVersionedHashes,\n data,\n gas,\n gasPrice,\n maxFeePerBlobGas,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce,\n to,\n type,\n value,\n } as TransactionRequest,\n 'fillTransaction',\n )\n\n try {\n const response = await client.request({\n method: 'eth_fillTransaction',\n params: [request],\n })\n const format = chain?.formatters?.transaction?.format || formatTransaction\n\n const transaction = format(response.tx)\n\n // Remove unnecessary fields.\n delete transaction.blockHash\n delete transaction.blockNumber\n delete transaction.r\n delete transaction.s\n delete transaction.transactionIndex\n delete transaction.v\n delete transaction.yParity\n\n // Rewrite fields.\n transaction.data = transaction.input\n\n // Preference supplied fees (some nodes do not take these preferences).\n if (transaction.gas) transaction.gas = parameters.gas ?? transaction.gas\n if (transaction.gasPrice)\n transaction.gasPrice = parameters.gasPrice ?? transaction.gasPrice\n if (transaction.maxFeePerBlobGas)\n transaction.maxFeePerBlobGas =\n parameters.maxFeePerBlobGas ?? transaction.maxFeePerBlobGas\n if (transaction.maxFeePerGas)\n transaction.maxFeePerGas =\n parameters.maxFeePerGas ?? transaction.maxFeePerGas\n if (transaction.maxPriorityFeePerGas)\n transaction.maxPriorityFeePerGas =\n parameters.maxPriorityFeePerGas ?? transaction.maxPriorityFeePerGas\n if (typeof transaction.nonce !== 'undefined')\n transaction.nonce = parameters.nonce ?? transaction.nonce\n\n // Build fee multiplier function.\n const feeMultiplier = await (async () => {\n if (typeof chain?.fees?.baseFeeMultiplier === 'function') {\n const block = await getAction(client, getBlock, 'getBlock')({})\n return chain.fees.baseFeeMultiplier({\n block,\n client,\n request: parameters,\n } as ChainFeesFnParameters)\n }\n return chain?.fees?.baseFeeMultiplier ?? 1.2\n })()\n if (feeMultiplier < 1) throw new BaseFeeScalarError()\n\n const decimals = feeMultiplier.toString().split('.')[1]?.length ?? 0\n const denominator = 10 ** decimals\n const multiplyFee = (base: bigint) =>\n (base * BigInt(Math.ceil(feeMultiplier * denominator))) /\n BigInt(denominator)\n\n // Apply fee multiplier.\n if (!transaction.feePayerSignature) {\n if (transaction.maxFeePerGas && !parameters.maxFeePerGas)\n transaction.maxFeePerGas = multiplyFee(transaction.maxFeePerGas)\n if (transaction.gasPrice && !parameters.gasPrice)\n transaction.gasPrice = multiplyFee(transaction.gasPrice)\n }\n\n return {\n raw: response.raw,\n transaction: {\n from: request.from,\n ...transaction,\n },\n ...(response.capabilities ? { capabilities: response.capabilities } : {}),\n }\n } catch (err) {\n throw getTransactionError(\n err as BaseError,\n {\n ...parameters,\n chain: client.chain,\n } as never,\n )\n }\n}\n", "import type { Account } from '../../accounts/types.js'\nimport type { SendTransactionParameters } from '../../actions/wallet/sendTransaction.js'\nimport type { BaseError } from '../../errors/base.js'\nimport { UnknownNodeError } from '../../errors/node.js'\nimport {\n TransactionExecutionError,\n type TransactionExecutionErrorType,\n} from '../../errors/transaction.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\n\nimport {\n type GetNodeErrorParameters,\n type GetNodeErrorReturnType,\n getNodeError,\n} from './getNodeError.js'\n\nexport type GetTransactionErrorParameters = Omit<\n SendTransactionParameters,\n 'account' | 'chain'\n> & {\n account: Account | null\n chain?: Chain | undefined\n docsPath?: string | undefined\n}\n\nexport type GetTransactionErrorReturnType = Omit<\n TransactionExecutionErrorType,\n 'cause'\n> & { cause: cause | GetNodeErrorReturnType }\n\nexport function getTransactionError>(\n err: err,\n { docsPath, ...args }: GetTransactionErrorParameters,\n): GetTransactionErrorReturnType {\n const cause = (() => {\n const cause = getNodeError(\n err as {} as BaseError,\n args as GetNodeErrorParameters,\n )\n if (cause instanceof UnknownNodeError) return err as {} as BaseError\n return cause\n })()\n return new TransactionExecutionError(cause, {\n docsPath,\n ...args,\n }) as GetTransactionErrorReturnType\n}\n", "import type { Account } from '../../accounts/types.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type HexToNumberErrorType,\n hexToNumber,\n} from '../../utils/encoding/fromHex.js'\n\nexport type GetChainIdReturnType = number\n\nexport type GetChainIdErrorType =\n | HexToNumberErrorType\n | RequestErrorType\n | ErrorType\n\n/**\n * Returns the chain ID associated with the current network.\n *\n * - Docs: https://viem.sh/docs/actions/public/getChainId\n * - JSON-RPC Methods: [`eth_chainId`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_chainid)\n *\n * @param client - Client to use\n * @returns The current chain ID. {@link GetChainIdReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getChainId } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const chainId = await getChainId(client)\n * // 1\n */\nexport async function getChainId<\n chain extends Chain | undefined,\n account extends Account | undefined,\n>(client: Client): Promise {\n const chainIdHex = await client.request(\n {\n method: 'eth_chainId',\n },\n { dedupe: true },\n )\n return hexToNumber(chainIdHex)\n}\n", "import type { Abi, Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockNumber, BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n ContractEventArgs,\n ContractEventName,\n} from '../../types/contract.js'\nimport type { Log } from '../../types/log.js'\nimport type { Hash } from '../../types/misc.js'\nimport {\n type GetAbiItemErrorType,\n type GetAbiItemParameters,\n getAbiItem,\n} from '../../utils/abi/getAbiItem.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n type GetLogsErrorType,\n type GetLogsParameters,\n getLogs,\n} from './getLogs.js'\n\nexport type GetContractEventsParameters<\n abi extends Abi | readonly unknown[] = Abi,\n eventName extends ContractEventName | undefined =\n | ContractEventName\n | undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n> = {\n /** The address of the contract. */\n address?: Address | Address[] | undefined\n /** Contract ABI. */\n abi: abi\n args?:\n | ContractEventArgs<\n abi,\n eventName extends ContractEventName\n ? eventName\n : ContractEventName\n >\n | undefined\n /** Contract event. */\n eventName?: eventName | ContractEventName | undefined\n /**\n * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n * @default false\n */\n strict?: strict | boolean | undefined\n} & (\n | {\n /** Block number or tag after which to include logs */\n fromBlock?: fromBlock | BlockNumber | BlockTag | undefined\n /** Block number or tag before which to include logs */\n toBlock?: toBlock | BlockNumber | BlockTag | undefined\n blockHash?: undefined\n }\n | {\n fromBlock?: undefined\n toBlock?: undefined\n /** Hash of block to include logs from */\n blockHash?: Hash | undefined\n }\n)\n\nexport type GetContractEventsReturnType<\n abi extends Abi | readonly unknown[] = readonly unknown[],\n eventName extends ContractEventName | undefined =\n | ContractEventName\n | undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n ///\n isPending extends boolean =\n | (fromBlock extends 'pending' ? true : false)\n | (toBlock extends 'pending' ? true : false),\n> = Log[]\n\nexport type GetContractEventsErrorType =\n | GetAbiItemErrorType\n | GetLogsErrorType\n | ErrorType\n\n/**\n * Returns a list of event logs emitted by a contract.\n *\n * - Docs: https://viem.sh/docs/contract/getContractEvents#getcontractevents\n * - JSON-RPC Methods: [`eth_getLogs`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getlogs)\n *\n * @param client - Client to use\n * @param parameters - {@link GetContractEventsParameters}\n * @returns A list of event logs. {@link GetContractEventsReturnType}\n *\n * @example\n * import { createClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getContractEvents } from 'viem/public'\n * import { wagmiAbi } from './abi'\n *\n * const client = createClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const logs = await getContractEvents(client, {\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi: wagmiAbi,\n * eventName: 'Transfer'\n * })\n */\nexport async function getContractEvents<\n chain extends Chain | undefined,\n const abi extends Abi | readonly unknown[],\n eventName extends ContractEventName | undefined = undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n>(\n client: Client,\n parameters: GetContractEventsParameters<\n abi,\n eventName,\n strict,\n fromBlock,\n toBlock\n >,\n): Promise<\n GetContractEventsReturnType\n> {\n const {\n abi,\n address,\n args,\n blockHash,\n eventName,\n fromBlock,\n toBlock,\n strict,\n } = parameters\n const event = eventName\n ? getAbiItem({ abi, name: eventName } as GetAbiItemParameters)\n : undefined\n const events = !event\n ? (abi as Abi).filter((x) => x.type === 'event')\n : undefined\n return getAction(\n client,\n getLogs,\n 'getLogs',\n )({\n address,\n args,\n blockHash,\n event,\n events,\n fromBlock,\n toBlock,\n strict,\n } as {} as GetLogsParameters) as unknown as GetContractEventsReturnType<\n abi,\n eventName,\n strict,\n fromBlock,\n toBlock\n >\n}\n", "// TODO(v3): checksum address.\n\nimport type { Abi, AbiEvent, AbiEventParameter, Address } from 'abitype'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ContractEventName, GetEventArgs } from '../../types/contract.js'\nimport type { Log } from '../../types/log.js'\nimport type { RpcLog } from '../../types/rpc.js'\nimport { isAddressEqual } from '../address/isAddressEqual.js'\nimport { toBytes } from '../encoding/toBytes.js'\nimport { formatLog } from '../formatters/log.js'\nimport { keccak256 } from '../hash/keccak256.js'\nimport { toEventSelector } from '../hash/toEventSelector.js'\nimport {\n type DecodeEventLogErrorType,\n decodeEventLog,\n} from './decodeEventLog.js'\n\nexport type ParseEventLogsParameters<\n abi extends Abi | readonly unknown[] = Abi,\n eventName extends\n | ContractEventName\n | ContractEventName[]\n | undefined = ContractEventName,\n strict extends boolean | undefined = boolean | undefined,\n ///\n allArgs = GetEventArgs<\n abi,\n eventName extends ContractEventName\n ? eventName\n : ContractEventName,\n {\n EnableUnion: true\n IndexedOnly: false\n Required: false\n }\n >,\n> = {\n /** Contract ABI. */\n abi: abi\n /** Arguments for the event. */\n args?: allArgs | undefined\n /** Contract event. */\n eventName?:\n | eventName\n | ContractEventName\n | ContractEventName[]\n | undefined\n /** List of logs. */\n logs: (Log | RpcLog)[]\n strict?: strict | boolean | undefined\n}\n\nexport type ParseEventLogsReturnType<\n abi extends Abi | readonly unknown[] = Abi,\n eventName extends\n | ContractEventName\n | ContractEventName[]\n | undefined = ContractEventName,\n strict extends boolean | undefined = boolean | undefined,\n ///\n derivedEventName extends\n | ContractEventName\n | undefined = eventName extends ContractEventName[]\n ? eventName[number]\n : eventName,\n> = Log[]\n\nexport type ParseEventLogsErrorType = DecodeEventLogErrorType | ErrorType\n\n/**\n * Extracts & decodes logs matching the provided signature(s) (`abi` + optional `eventName`)\n * from a set of opaque logs.\n *\n * @param parameters - {@link ParseEventLogsParameters}\n * @returns The logs. {@link ParseEventLogsReturnType}\n *\n * @example\n * import { createClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { parseEventLogs } from 'viem/op-stack'\n *\n * const client = createClient({\n * chain: mainnet,\n * transport: http(),\n * })\n *\n * const receipt = await getTransactionReceipt(client, {\n * hash: '0xec23b2ba4bc59ba61554507c1b1bc91649e6586eb2dd00c728e8ed0db8bb37ea',\n * })\n *\n * const logs = parseEventLogs({ logs: receipt.logs })\n * // [{ args: { ... }, eventName: 'TransactionDeposited', ... }, ...]\n */\nexport function parseEventLogs<\n abi extends Abi | readonly unknown[],\n strict extends boolean | undefined = true,\n eventName extends\n | ContractEventName\n | ContractEventName[]\n | undefined = undefined,\n>(\n parameters: ParseEventLogsParameters,\n): ParseEventLogsReturnType {\n const { abi, args, logs, strict = true } = parameters\n\n const eventName = (() => {\n if (!parameters.eventName) return undefined\n if (Array.isArray(parameters.eventName)) return parameters.eventName\n return [parameters.eventName as string]\n })()\n\n const abiTopics = (abi as Abi)\n .filter((abiItem) => abiItem.type === 'event')\n .map((abiItem) => ({\n abi: abiItem,\n selector: toEventSelector(abiItem),\n }))\n\n return logs\n .map((log) => {\n // Normalize RpcLog (hex-encoded quantities) to Log (bigint/number).\n // When logs come directly from an RPC response (e.g. eth_getLogs),\n // fields like blockNumber are hex strings instead of bigints.\n const formattedLog =\n typeof log.blockNumber === 'string' ? formatLog(log as RpcLog) : log\n\n // Find all matching ABI items with the same selector.\n // Multiple events can share the same selector but differ in indexed parameters\n // (e.g., ERC20 vs ERC721 Transfer events).\n const abiItems = abiTopics.filter(\n (abiTopic) => formattedLog.topics[0] === abiTopic.selector,\n )\n if (abiItems.length === 0) return null\n\n // Try each matching ABI item until one successfully decodes.\n let event: { eventName: string; args: unknown } | undefined\n let abiItem: { abi: AbiEvent; selector: Address } | undefined\n\n for (const item of abiItems) {\n try {\n event = decodeEventLog({\n ...formattedLog,\n abi: [item.abi],\n strict: true,\n })\n abiItem = item\n break\n } catch {\n // Try next ABI item\n }\n }\n\n // If strict decoding failed for all, and we're in non-strict mode,\n // fall back to the first matching ABI item.\n if (!event && !strict) {\n abiItem = abiItems[0]\n try {\n event = decodeEventLog({\n data: formattedLog.data,\n topics: formattedLog.topics,\n abi: [abiItem.abi],\n strict: false,\n })\n } catch {\n // If decoding still fails, return partial log in non-strict mode.\n const isUnnamed = abiItem.abi.inputs?.some(\n (x) => !('name' in x && x.name),\n )\n return {\n ...formattedLog,\n args: isUnnamed ? [] : {},\n eventName: abiItem.abi.name,\n }\n }\n }\n\n // If no event was found, return null.\n if (!event || !abiItem) return null\n\n // Check that the decoded event name matches the provided event name.\n if (eventName && !eventName.includes(event.eventName)) return null\n\n // Check that the decoded event args match the provided args.\n if (\n !includesArgs({\n args: event.args,\n inputs: abiItem.abi.inputs,\n matchArgs: args,\n })\n )\n return null\n\n return { ...event, ...formattedLog }\n })\n .filter(Boolean) as unknown as ParseEventLogsReturnType<\n abi,\n eventName,\n strict\n >\n}\n\nfunction includesArgs(parameters: {\n args: unknown\n inputs: AbiEvent['inputs']\n matchArgs: unknown\n}) {\n const { args, inputs, matchArgs } = parameters\n\n if (!matchArgs) return true\n if (!args) return false\n\n function isEqual(input: AbiEventParameter, value: unknown, arg: unknown) {\n try {\n if (input.type === 'address')\n return isAddressEqual(value as Address, arg as Address)\n if (input.type === 'string' || input.type === 'bytes')\n return keccak256(toBytes(value as string)) === arg\n return value === arg\n } catch {\n return false\n }\n }\n\n if (Array.isArray(args) && Array.isArray(matchArgs)) {\n return matchArgs.every((value, index) => {\n if (value === null || value === undefined) return true\n const input = inputs[index]\n if (!input) return false\n const value_ = Array.isArray(value) ? value : [value]\n return value_.some((value) => isEqual(input, value, args[index]))\n })\n }\n\n if (\n typeof args === 'object' &&\n !Array.isArray(args) &&\n typeof matchArgs === 'object' &&\n !Array.isArray(matchArgs)\n )\n return Object.entries(matchArgs).every(([key, value]) => {\n if (value === null || value === undefined) return true\n const input = inputs.find((input) => input.name === key)\n if (!input) return false\n const value_ = Array.isArray(value) ? value : [value]\n return value_.some((value) =>\n isEqual(input, value, (args as Record)[key]),\n )\n })\n\n return false\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Log } from '../../types/log.js'\nimport type { RpcLog } from '../../types/rpc.js'\nimport type { ExactPartial } from '../../types/utils.js'\n\nexport type FormatLogErrorType = ErrorType\n\nexport function formatLog(\n log: ExactPartial,\n {\n args,\n eventName,\n }: { args?: unknown | undefined; eventName?: string | undefined } = {},\n) {\n return {\n ...log,\n blockHash: log.blockHash ? log.blockHash : null,\n blockNumber: log.blockNumber ? BigInt(log.blockNumber) : null,\n blockTimestamp: log.blockTimestamp\n ? BigInt(log.blockTimestamp)\n : log.blockTimestamp === null\n ? null\n : undefined,\n logIndex: log.logIndex ? Number(log.logIndex) : null,\n transactionHash: log.transactionHash ? log.transactionHash : null,\n transactionIndex: log.transactionIndex\n ? Number(log.transactionIndex)\n : null,\n ...(eventName ? { args, eventName } : {}),\n } as Log\n}\n", "import type { Abi, AbiParameter } from 'abitype'\n\nimport {\n AbiDecodingDataSizeTooSmallError,\n type AbiDecodingDataSizeTooSmallErrorType,\n AbiEventSignatureEmptyTopicsError,\n type AbiEventSignatureEmptyTopicsErrorType,\n AbiEventSignatureNotFoundError,\n type AbiEventSignatureNotFoundErrorType,\n DecodeLogDataMismatch,\n type DecodeLogDataMismatchErrorType,\n DecodeLogTopicsMismatch,\n type DecodeLogTopicsMismatchErrorType,\n} from '../../errors/abi.js'\nimport { PositionOutOfBoundsError } from '../../errors/cursor.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n ContractEventArgsFromTopics,\n ContractEventName,\n EventDefinition,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type {\n IsNarrowable,\n Prettify,\n UnionEvaluate,\n} from '../../types/utils.js'\nimport { size } from '../data/size.js'\nimport {\n type ToEventSelectorErrorType,\n toEventSelector,\n} from '../hash/toEventSelector.js'\nimport {\n type DecodeAbiParametersErrorType,\n decodeAbiParameters,\n} from './decodeAbiParameters.js'\nimport { type FormatAbiItemErrorType, formatAbiItem } from './formatAbiItem.js'\n\nexport type DecodeEventLogParameters<\n abi extends Abi | readonly unknown[] = Abi,\n eventName extends ContractEventName | undefined = ContractEventName,\n topics extends Hex[] = Hex[],\n data extends Hex | undefined = undefined,\n strict extends boolean = true,\n> = {\n abi: abi\n data?: data | undefined\n eventName?: eventName | ContractEventName | undefined\n strict?: strict | boolean | undefined\n topics: [signature: Hex, ...args: topics] | []\n}\n\nexport type DecodeEventLogReturnType<\n abi extends Abi | readonly unknown[] = Abi,\n eventName extends ContractEventName | undefined = ContractEventName,\n topics extends Hex[] = Hex[],\n data extends Hex | undefined = undefined,\n strict extends boolean = true,\n ///\n allEventNames extends\n ContractEventName = eventName extends ContractEventName\n ? eventName\n : ContractEventName,\n> = IsNarrowable extends true\n ? {\n [name in allEventNames]: Prettify<\n {\n eventName: name\n } & UnionEvaluate<\n ContractEventArgsFromTopics extends infer allArgs\n ? topics extends readonly []\n ? data extends undefined\n ? { args?: undefined }\n : { args?: allArgs | undefined }\n : { args: allArgs }\n : never\n >\n >\n }[allEventNames]\n : {\n eventName: eventName\n args: readonly unknown[] | undefined\n }\n\nexport type DecodeEventLogErrorType =\n | AbiDecodingDataSizeTooSmallErrorType\n | AbiEventSignatureEmptyTopicsErrorType\n | AbiEventSignatureNotFoundErrorType\n | DecodeAbiParametersErrorType\n | DecodeLogTopicsMismatchErrorType\n | DecodeLogDataMismatchErrorType\n | FormatAbiItemErrorType\n | ToEventSelectorErrorType\n | ErrorType\n\nconst docsPath = '/docs/contract/decodeEventLog'\n\nexport function decodeEventLog<\n const abi extends Abi | readonly unknown[],\n eventName extends ContractEventName | undefined = undefined,\n topics extends Hex[] = Hex[],\n data extends Hex | undefined = undefined,\n strict extends boolean = true,\n>(\n parameters: DecodeEventLogParameters,\n): DecodeEventLogReturnType {\n const {\n abi,\n data,\n strict: strict_,\n topics,\n } = parameters as DecodeEventLogParameters\n\n const strict = strict_ ?? true\n const [signature, ...argTopics] = topics\n if (!signature) throw new AbiEventSignatureEmptyTopicsError({ docsPath })\n\n const abiItem = abi.find(\n (x) =>\n x.type === 'event' &&\n signature === toEventSelector(formatAbiItem(x) as EventDefinition),\n )\n\n if (!(abiItem && 'name' in abiItem) || abiItem.type !== 'event')\n throw new AbiEventSignatureNotFoundError(signature, { docsPath })\n\n const { name, inputs } = abiItem\n const isUnnamed = inputs?.some((x) => !('name' in x && x.name))\n\n const args: any = isUnnamed ? [] : {}\n\n // Decode topics (indexed args).\n const indexedInputs = inputs\n .map((x, i) => [x, i] as const)\n .filter(([x]) => 'indexed' in x && x.indexed)\n\n const missingIndexedInputs: [AbiParameter, number][] = []\n\n for (let i = 0; i < indexedInputs.length; i++) {\n const [param, argIndex] = indexedInputs[i]\n const topic = argTopics[i]\n if (!topic) {\n if (strict)\n throw new DecodeLogTopicsMismatch({\n abiItem,\n param: param as AbiParameter & { indexed: boolean },\n })\n // Track missing indexed inputs to decode from data when strict is false\n missingIndexedInputs.push([param, argIndex])\n continue\n }\n args[isUnnamed ? argIndex : param.name || argIndex] = decodeTopic({\n param,\n value: topic,\n })\n }\n\n // Decode data (non-indexed args + missing indexed args when strict is false).\n const nonIndexedInputs = inputs.filter((x) => !('indexed' in x && x.indexed))\n\n // When strict is false, missing indexed inputs should be decoded from data\n const inputsToDecode = strict\n ? nonIndexedInputs\n : [...missingIndexedInputs.map(([param]) => param), ...nonIndexedInputs]\n\n if (inputsToDecode.length > 0) {\n if (data && data !== '0x') {\n try {\n const decodedData = decodeAbiParameters(\n inputsToDecode,\n data,\n ) as unknown[]\n if (decodedData) {\n let dataIndex = 0\n // First, assign missing indexed parameters (when strict is false)\n if (!strict) {\n for (const [param, argIndex] of missingIndexedInputs) {\n args[isUnnamed ? argIndex : param.name || argIndex] =\n decodedData[dataIndex++]\n }\n }\n // Then, assign non-indexed parameters\n if (isUnnamed) {\n for (let i = 0; i < inputs.length; i++)\n if (args[i] === undefined && dataIndex < decodedData.length)\n args[i] = decodedData[dataIndex++]\n } else\n for (let i = 0; i < nonIndexedInputs.length; i++)\n args[nonIndexedInputs[i].name!] = decodedData[dataIndex++]\n }\n } catch (err) {\n if (strict) {\n if (\n err instanceof AbiDecodingDataSizeTooSmallError ||\n err instanceof PositionOutOfBoundsError\n )\n throw new DecodeLogDataMismatch({\n abiItem,\n data: data,\n params: inputsToDecode,\n size: size(data),\n })\n throw err\n }\n }\n } else if (strict) {\n throw new DecodeLogDataMismatch({\n abiItem,\n data: '0x',\n params: inputsToDecode,\n size: 0,\n })\n }\n }\n\n return {\n eventName: name,\n args: Object.values(args).length > 0 ? args : undefined,\n } as unknown as DecodeEventLogReturnType\n}\n\nfunction decodeTopic({ param, value }: { param: AbiParameter; value: Hex }) {\n if (\n param.type === 'string' ||\n param.type === 'bytes' ||\n param.type === 'tuple' ||\n param.type.match(/^(.*)\\[(\\d+)?\\]$/)\n )\n return value\n const decodedArg = decodeAbiParameters([param], value) || []\n return decodedArg[0]\n}\n", "import type { AbiEvent, Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockNumber, BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n MaybeAbiEventName,\n MaybeExtractEventArgsFromAbi,\n} from '../../types/contract.js'\nimport type { Log } from '../../types/log.js'\nimport type { Hash, LogTopic } from '../../types/misc.js'\nimport type { RpcLog } from '../../types/rpc.js'\nimport type { DecodeEventLogErrorType } from '../../utils/abi/decodeEventLog.js'\nimport {\n type EncodeEventTopicsErrorType,\n type EncodeEventTopicsParameters,\n encodeEventTopics,\n} from '../../utils/abi/encodeEventTopics.js'\nimport { parseEventLogs } from '../../utils/abi/parseEventLogs.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type NumberToHexErrorType,\n numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport {\n type FormatLogErrorType,\n formatLog,\n} from '../../utils/formatters/log.js'\n\nexport type GetLogsParameters<\n abiEvent extends AbiEvent | undefined = undefined,\n abiEvents extends\n | readonly AbiEvent[]\n | readonly unknown[]\n | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n //\n _eventName extends string | undefined = MaybeAbiEventName,\n> = {\n /** Address or list of addresses from which logs originated */\n address?: Address | Address[] | undefined\n} & (\n | {\n event: abiEvent\n events?: undefined\n args?: MaybeExtractEventArgsFromAbi | undefined\n /**\n * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n * @default false\n */\n strict?: strict | undefined\n }\n | {\n event?: undefined\n events: abiEvents\n args?: undefined\n /**\n * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n * @default false\n */\n strict?: strict | undefined\n }\n | {\n event?: undefined\n events?: undefined\n args?: undefined\n strict?: undefined\n }\n) &\n (\n | {\n /** Block number or tag after which to include logs */\n fromBlock?: fromBlock | BlockNumber | BlockTag | undefined\n /** Block number or tag before which to include logs */\n toBlock?: toBlock | BlockNumber | BlockTag | undefined\n blockHash?: undefined\n }\n | {\n fromBlock?: undefined\n toBlock?: undefined\n /** Hash of block to include logs from */\n blockHash?: Hash | undefined\n }\n )\n\nexport type GetLogsReturnType<\n abiEvent extends AbiEvent | undefined = undefined,\n abiEvents extends\n | readonly AbiEvent[]\n | readonly unknown[]\n | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n //\n _eventName extends string | undefined = MaybeAbiEventName,\n _pending extends boolean =\n | (fromBlock extends 'pending' ? true : false)\n | (toBlock extends 'pending' ? true : false),\n> = Log[]\n\nexport type GetLogsErrorType =\n | DecodeEventLogErrorType\n | EncodeEventTopicsErrorType\n | FormatLogErrorType\n | NumberToHexErrorType\n | RequestErrorType\n | ErrorType\n\n/**\n * Returns a list of event logs matching the provided parameters.\n *\n * - Docs: https://viem.sh/docs/actions/public/getLogs\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/logs_event-logs\n * - JSON-RPC Methods: [`eth_getLogs`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getlogs)\n *\n * @param client - Client to use\n * @param parameters - {@link GetLogsParameters}\n * @returns A list of event logs. {@link GetLogsReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbiItem } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getLogs } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const logs = await getLogs(client)\n */\nexport async function getLogs<\n chain extends Chain | undefined,\n const abiEvent extends AbiEvent | undefined = undefined,\n const abiEvents extends\n | readonly AbiEvent[]\n | readonly unknown[]\n | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n>(\n client: Client,\n {\n address,\n blockHash,\n fromBlock,\n toBlock,\n event,\n events: events_,\n args,\n strict: strict_,\n }: GetLogsParameters = {},\n): Promise> {\n const strict = strict_ ?? false\n const events = events_ ?? (event ? [event] : undefined)\n\n let topics: LogTopic[] = []\n if (events) {\n const encoded = (events as AbiEvent[]).flatMap((event) =>\n encodeEventTopics({\n abi: [event],\n eventName: (event as AbiEvent).name,\n args: events_ ? undefined : args,\n } as EncodeEventTopicsParameters),\n )\n // TODO: Clean up type casting\n topics = [encoded as LogTopic]\n if (event) topics = topics[0] as LogTopic[]\n }\n\n let logs: RpcLog[]\n if (blockHash) {\n logs = await client.request({\n method: 'eth_getLogs',\n params: [{ address, topics, blockHash }],\n })\n } else {\n logs = await client.request({\n method: 'eth_getLogs',\n params: [\n {\n address,\n topics,\n fromBlock:\n typeof fromBlock === 'bigint' ? numberToHex(fromBlock) : fromBlock,\n toBlock: typeof toBlock === 'bigint' ? numberToHex(toBlock) : toBlock,\n },\n ],\n })\n }\n\n const formattedLogs = logs.map((log) => formatLog(log))\n if (!events)\n return formattedLogs as GetLogsReturnType<\n abiEvent,\n abiEvents,\n strict,\n fromBlock,\n toBlock\n >\n return parseEventLogs({\n abi: events,\n args: args as any,\n logs: formattedLogs,\n strict,\n }) as unknown as GetLogsReturnType<\n abiEvent,\n abiEvents,\n strict,\n fromBlock,\n toBlock\n >\n}\n", "import type { Abi } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { BaseError } from '../../errors/base.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n ContractFunctionArgs,\n ContractFunctionName,\n ContractFunctionParameters,\n ContractFunctionReturnType,\n} from '../../types/contract.js'\nimport type { UnionEvaluate } from '../../types/utils.js'\nimport {\n type DecodeFunctionResultErrorType,\n decodeFunctionResult,\n} from '../../utils/abi/decodeFunctionResult.js'\nimport {\n type EncodeFunctionDataErrorType,\n type EncodeFunctionDataParameters,\n encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport {\n type GetContractErrorReturnType,\n getContractError,\n} from '../../utils/errors/getContractError.js'\nimport { getAction } from '../../utils/getAction.js'\n\nimport { type CallErrorType, type CallParameters, call } from './call.js'\n\nexport type ReadContractParameters<\n abi extends Abi | readonly unknown[] = Abi,\n functionName extends ContractFunctionName<\n abi,\n 'pure' | 'view'\n > = ContractFunctionName,\n args extends ContractFunctionArgs<\n abi,\n 'pure' | 'view',\n functionName\n > = ContractFunctionArgs,\n> = UnionEvaluate<\n Pick<\n CallParameters,\n | 'account'\n | 'authorizationList'\n | 'blockNumber'\n | 'blockOverrides'\n | 'blockTag'\n | 'factory'\n | 'factoryData'\n | 'stateOverride'\n >\n> &\n ContractFunctionParameters\n\nexport type ReadContractReturnType<\n abi extends Abi | readonly unknown[] = Abi,\n functionName extends ContractFunctionName<\n abi,\n 'pure' | 'view'\n > = ContractFunctionName,\n args extends ContractFunctionArgs<\n abi,\n 'pure' | 'view',\n functionName\n > = ContractFunctionArgs,\n> = ContractFunctionReturnType\n\nexport type ReadContractErrorType = GetContractErrorReturnType<\n CallErrorType | EncodeFunctionDataErrorType | DecodeFunctionResultErrorType\n>\n\n/**\n * Calls a read-only function on a contract, and returns the response.\n *\n * - Docs: https://viem.sh/docs/contract/readContract\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/contracts_reading-contracts\n *\n * A \"read-only\" function (constant function) on a Solidity contract is denoted by a `view` or `pure` keyword. They can only read the state of the contract, and cannot make any changes to it. Since read-only methods do not change the state of the contract, they do not require any gas to be executed, and can be called by any user without the need to pay for gas.\n *\n * Internally, uses a [Public Client](https://viem.sh/docs/clients/public) to call the [`call` action](https://viem.sh/docs/actions/public/call) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n *\n * @param client - Client to use\n * @param parameters - {@link ReadContractParameters}\n * @returns The response from the contract. Type is inferred. {@link ReadContractReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { readContract } from 'viem/contract'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const result = await readContract(client, {\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi: parseAbi(['function balanceOf(address) view returns (uint256)']),\n * functionName: 'balanceOf',\n * args: ['0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'],\n * })\n * // 424122n\n */\nexport async function readContract<\n chain extends Chain | undefined,\n const abi extends Abi | readonly unknown[],\n functionName extends ContractFunctionName,\n const args extends ContractFunctionArgs,\n>(\n client: Client,\n parameters: ReadContractParameters,\n): Promise> {\n const { abi, address, args, functionName, ...rest } =\n parameters as ReadContractParameters\n const calldata = encodeFunctionData({\n abi,\n args,\n functionName,\n } as EncodeFunctionDataParameters)\n try {\n const { data } = await getAction(\n client,\n call,\n 'call',\n )({\n ...(rest as CallParameters),\n data: calldata,\n to: address!,\n })\n return decodeFunctionResult({\n abi,\n args,\n functionName,\n data: data || '0x',\n }) as ReadContractReturnType\n } catch (error) {\n throw getContractError(error as BaseError, {\n abi,\n address,\n args,\n docsPath: '/docs/contract/readContract',\n functionName,\n })\n }\n}\n", "import type { Abi, AbiFunction, AbiStateMutability, Address } from 'abitype'\n\nimport {\n type ParseAccountErrorType,\n parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { BaseError } from '../../errors/base.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account, ParseAccount } from '../../types/account.js'\nimport type { Chain, DeriveChain } from '../../types/chain.js'\nimport type {\n ContractFunctionArgs,\n ContractFunctionName,\n ContractFunctionParameters,\n ContractFunctionReturnType,\n ExtractAbiFunctionForArgs,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { TransactionRequest } from '../../types/transaction.js'\nimport type {\n IsNarrowable,\n NoInfer,\n Prettify,\n UnionEvaluate,\n UnionOmit,\n} from '../../types/utils.js'\nimport {\n type DecodeFunctionResultErrorType,\n decodeFunctionResult,\n} from '../../utils/abi/decodeFunctionResult.js'\nimport {\n type EncodeFunctionDataErrorType,\n encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport {\n type GetContractErrorReturnType,\n getContractError,\n} from '../../utils/errors/getContractError.js'\nimport { getAction } from '../../utils/getAction.js'\nimport type { WriteContractParameters } from '../wallet/writeContract.js'\nimport { type CallErrorType, type CallParameters, call } from './call.js'\n\nexport type GetMutabilityAwareValue<\n abi extends Abi | readonly unknown[],\n mutability extends AbiStateMutability = AbiStateMutability,\n functionName extends ContractFunctionName<\n abi,\n mutability\n > = ContractFunctionName,\n valueType = TransactionRequest['value'],\n args extends ContractFunctionArgs<\n abi,\n mutability,\n functionName\n > = ContractFunctionArgs,\n abiFunction extends AbiFunction = abi extends Abi\n ? ExtractAbiFunctionForArgs\n : AbiFunction,\n _Narrowable extends boolean = IsNarrowable,\n> = _Narrowable extends true\n ? abiFunction['stateMutability'] extends 'payable'\n ? { value?: NoInfer | undefined }\n : abiFunction['payable'] extends true\n ? { value?: NoInfer | undefined }\n : { value?: undefined }\n : { value?: NoInfer | undefined }\n\nexport type SimulateContractParameters<\n abi extends Abi | readonly unknown[] = Abi,\n functionName extends ContractFunctionName<\n abi,\n 'nonpayable' | 'payable'\n > = ContractFunctionName,\n args extends ContractFunctionArgs<\n abi,\n 'nonpayable' | 'payable',\n functionName\n > = ContractFunctionArgs,\n chain extends Chain | undefined = Chain | undefined,\n chainOverride extends Chain | undefined = Chain | undefined,\n accountOverride extends Account | Address | null | undefined = undefined,\n ///\n derivedChain extends Chain | undefined = DeriveChain,\n callParameters extends\n CallParameters = CallParameters,\n> = {\n account?: accountOverride | null | undefined\n chain?: chainOverride | undefined\n /** Data to append to the end of the calldata. Useful for adding a [\"domain\" tag](https://opensea.notion.site/opensea/Seaport-Order-Attributions-ec2d69bf455041a5baa490941aad307f). */\n dataSuffix?: Hex | undefined\n} & ContractFunctionParameters<\n abi,\n 'nonpayable' | 'payable',\n functionName,\n args\n> &\n UnionOmit<\n callParameters,\n | 'account'\n | 'batch'\n | 'code'\n | 'to'\n | 'data'\n | 'factory'\n | 'factoryData'\n | 'value'\n > &\n GetMutabilityAwareValue<\n abi,\n 'nonpayable' | 'payable',\n functionName,\n callParameters['value'],\n args\n >\n\nexport type SimulateContractReturnType<\n out abi extends Abi | readonly unknown[] = Abi,\n in out functionName extends ContractFunctionName<\n abi,\n 'nonpayable' | 'payable'\n > = ContractFunctionName,\n in out args extends ContractFunctionArgs<\n abi,\n 'nonpayable' | 'payable',\n functionName\n > = ContractFunctionArgs,\n /** @ts-expect-error cast variance */\n out chain extends Chain | undefined = Chain | undefined,\n out account extends Account | undefined = Account | undefined,\n out chainOverride extends Chain | undefined = Chain | undefined,\n out accountOverride extends Account | Address | null | undefined =\n | Account\n | Address\n | null\n | undefined,\n ///\n in out minimizedAbi extends Abi = readonly [\n ExtractAbiFunctionForArgs<\n abi extends Abi ? abi : Abi,\n 'nonpayable' | 'payable',\n functionName,\n args\n >,\n ],\n out resolvedAccount extends\n | Account\n | null\n | undefined = accountOverride extends Account | Address | null\n ? ParseAccount\n : account,\n> = {\n result: ContractFunctionReturnType<\n minimizedAbi,\n 'nonpayable' | 'payable',\n functionName,\n args\n >\n request: Prettify<\n UnionEvaluate<\n UnionOmit<\n WriteContractParameters<\n minimizedAbi,\n functionName,\n args,\n chain,\n undefined,\n chainOverride\n >,\n 'account' | 'abi' | 'args' | 'chain' | 'functionName'\n >\n > &\n ContractFunctionParameters<\n minimizedAbi,\n 'nonpayable' | 'payable',\n functionName,\n args\n > & {\n chain: DeriveChain\n } & (resolvedAccount extends Account | null\n ? { account: resolvedAccount }\n : { account?: undefined })\n >\n}\n\nexport type SimulateContractErrorType =\n | ParseAccountErrorType\n | EncodeFunctionDataErrorType\n | GetContractErrorReturnType\n | ErrorType\n\n/**\n * Simulates/validates a contract interaction. This is useful for retrieving **return data** and **revert reasons** of contract write functions.\n *\n * - Docs: https://viem.sh/docs/contract/simulateContract\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/contracts_writing-to-contracts\n *\n * This function does not require gas to execute and _**does not**_ change the state of the blockchain. It is almost identical to [`readContract`](https://viem.sh/docs/contract/readContract), but also supports contract write functions.\n *\n * Internally, uses a [Public Client](https://viem.sh/docs/clients/public) to call the [`call` action](https://viem.sh/docs/actions/public/call) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n *\n * @param client - Client to use\n * @param parameters - {@link SimulateContractParameters}\n * @returns The simulation result and write request. {@link SimulateContractReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { simulateContract } from 'viem/contract'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const result = await simulateContract(client, {\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi: parseAbi(['function mint(uint32) view returns (uint32)']),\n * functionName: 'mint',\n * args: ['69420'],\n * account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n */\nexport async function simulateContract<\n chain extends Chain | undefined,\n account extends Account | undefined,\n const abi extends Abi | readonly unknown[],\n functionName extends ContractFunctionName,\n const args extends ContractFunctionArgs<\n abi,\n 'nonpayable' | 'payable',\n functionName\n >,\n chainOverride extends Chain | undefined = undefined,\n accountOverride extends Account | Address | null | undefined = undefined,\n>(\n client: Client,\n parameters: SimulateContractParameters<\n abi,\n functionName,\n args,\n chain,\n chainOverride,\n accountOverride\n >,\n): Promise<\n SimulateContractReturnType<\n abi,\n functionName,\n args,\n chain,\n account,\n chainOverride,\n accountOverride\n >\n> {\n const {\n abi,\n address,\n args,\n functionName,\n dataSuffix = typeof client.dataSuffix === 'string'\n ? client.dataSuffix\n : client.dataSuffix?.value,\n ...callRequest\n } = parameters as SimulateContractParameters\n\n const account = callRequest.account\n ? parseAccount(callRequest.account)\n : client.account\n const calldata = encodeFunctionData({ abi, args, functionName })\n\n try {\n const { data } = await getAction(\n client,\n call,\n 'call',\n )({\n batch: false,\n data: `${calldata}${dataSuffix ? dataSuffix.replace('0x', '') : ''}`,\n to: address,\n ...callRequest,\n account,\n })\n const result = decodeFunctionResult({\n abi,\n args,\n functionName,\n data: data || '0x',\n })\n const minimizedAbi = abi.filter(\n (abiItem) =>\n 'name' in abiItem && abiItem.name === parameters.functionName,\n )\n return {\n result,\n request: {\n abi: minimizedAbi,\n address,\n args,\n dataSuffix,\n functionName,\n ...callRequest,\n account,\n },\n } as unknown as SimulateContractReturnType<\n abi,\n functionName,\n args,\n chain,\n account,\n chainOverride,\n accountOverride\n >\n } catch (error) {\n throw getContractError(error as BaseError, {\n abi,\n address,\n args,\n docsPath: '/docs/contract/simulateContract',\n functionName,\n sender: account?.address,\n })\n }\n}\n", "import type { Abi, Address, ExtractAbiEvent } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n DecodeLogDataMismatch,\n DecodeLogTopicsMismatch,\n} from '../../errors/abi.js'\nimport { InvalidInputRpcError } from '../../errors/rpc.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockNumber } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n ContractEventArgs,\n ContractEventName,\n} from '../../types/contract.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { Log } from '../../types/log.js'\nimport type { LogTopic } from '../../types/misc.js'\nimport type { GetPollOptions } from '../../types/transport.js'\nimport { decodeEventLog } from '../../utils/abi/decodeEventLog.js'\nimport {\n type EncodeEventTopicsParameters,\n encodeEventTopics,\n} from '../../utils/abi/encodeEventTopics.js'\nimport { formatLog } from '../../utils/formatters/log.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { type ObserveErrorType, observe } from '../../utils/observe.js'\nimport { poll } from '../../utils/poll.js'\nimport { type StringifyErrorType, stringify } from '../../utils/stringify.js'\nimport { createContractEventFilter } from './createContractEventFilter.js'\nimport { getBlockNumber } from './getBlockNumber.js'\nimport {\n type GetContractEventsParameters,\n getContractEvents,\n} from './getContractEvents.js'\nimport { getFilterChanges } from './getFilterChanges.js'\nimport { uninstallFilter } from './uninstallFilter.js'\n\nexport type WatchContractEventOnLogsParameter<\n abi extends Abi | readonly unknown[] = Abi,\n eventName extends ContractEventName = ContractEventName,\n strict extends boolean | undefined = undefined,\n> = abi extends Abi\n ? Abi extends abi\n ? Log[]\n : Log, strict>[]\n : Log[]\n\nexport type WatchContractEventOnLogsFn<\n abi extends Abi | readonly unknown[] = Abi,\n eventName extends ContractEventName = ContractEventName,\n strict extends boolean | undefined = undefined,\n> = (logs: WatchContractEventOnLogsParameter) => void\n\nexport type WatchContractEventParameters<\n abi extends Abi | readonly unknown[] = Abi,\n eventName extends ContractEventName | undefined = ContractEventName,\n strict extends boolean | undefined = undefined,\n transport extends Transport = Transport,\n> = {\n /** The address of the contract. */\n address?: Address | Address[] | undefined\n /** Contract ABI. */\n abi: abi\n args?:\n | ContractEventArgs<\n abi,\n eventName extends ContractEventName\n ? eventName\n : ContractEventName\n >\n | undefined\n /** Contract event. */\n eventName?: eventName | ContractEventName | undefined\n /** Block to start listening from. */\n fromBlock?: BlockNumber | undefined\n /** The callback to call when an error occurred when trying to get for a new block. */\n onError?: ((error: Error) => void) | undefined\n /** The callback to call when new event logs are received. */\n onLogs: WatchContractEventOnLogsFn<\n abi,\n eventName extends ContractEventName\n ? eventName\n : ContractEventName,\n strict\n >\n /**\n * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n * @default false\n */\n strict?: strict | boolean | undefined\n} & GetPollOptions\n\nexport type WatchContractEventReturnType = () => void\n\nexport type WatchContractEventErrorType =\n | StringifyErrorType\n | ObserveErrorType\n | ErrorType\n\n/**\n * Watches and returns emitted contract event logs.\n *\n * - Docs: https://viem.sh/docs/contract/watchContractEvent\n *\n * This Action will batch up all the event logs found within the [`pollingInterval`](https://viem.sh/docs/contract/watchContractEvent#pollinginterval-optional), and invoke them via [`onLogs`](https://viem.sh/docs/contract/watchContractEvent#onLogs).\n *\n * `watchContractEvent` will attempt to create an [Event Filter](https://viem.sh/docs/contract/createContractEventFilter) and listen to changes to the Filter per polling interval, however, if the RPC Provider does not support Filters (e.g. `eth_newFilter`), then `watchContractEvent` will fall back to using [`getLogs`](https://viem.sh/docs/actions/public/getLogs) instead.\n *\n * @param client - Client to use\n * @param parameters - {@link WatchContractEventParameters}\n * @returns A function that can be invoked to stop watching for new event logs. {@link WatchContractEventReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { watchContractEvent } from 'viem/contract'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const unwatch = watchContractEvent(client, {\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi: parseAbi(['event Transfer(address indexed from, address indexed to, uint256 value)']),\n * eventName: 'Transfer',\n * args: { from: '0xc961145a54C96E3aE9bAA048c4F4D6b04C13916b' },\n * onLogs: (logs) => console.log(logs),\n * })\n */\nexport function watchContractEvent<\n chain extends Chain | undefined,\n const abi extends Abi | readonly unknown[],\n eventName extends ContractEventName | undefined = undefined,\n strict extends boolean | undefined = undefined,\n transport extends Transport = Transport,\n>(\n client: Client,\n parameters: WatchContractEventParameters,\n): WatchContractEventReturnType {\n const {\n abi,\n address,\n args,\n batch = true,\n eventName,\n fromBlock,\n onError,\n onLogs,\n poll: poll_,\n pollingInterval = client.pollingInterval,\n strict: strict_,\n } = parameters\n\n const enablePolling = (() => {\n if (typeof poll_ !== 'undefined') return poll_\n if (typeof fromBlock === 'bigint') return true\n if (\n client.transport.type === 'webSocket' ||\n client.transport.type === 'ipc'\n )\n return false\n if (\n client.transport.type === 'fallback' &&\n (client.transport.transports[0].config.type === 'webSocket' ||\n client.transport.transports[0].config.type === 'ipc')\n )\n return false\n return true\n })()\n\n const pollContractEvent = () => {\n const strict = strict_ ?? false\n const observerId = stringify([\n 'watchContractEvent',\n address,\n args,\n batch,\n client.uid,\n eventName,\n pollingInterval,\n strict,\n fromBlock,\n ])\n\n return observe(observerId, { onLogs, onError }, (emit) => {\n let previousBlockNumber: bigint\n if (fromBlock !== undefined) previousBlockNumber = fromBlock - 1n\n let filter: Filter<'event', abi, eventName> | undefined\n let initialized = false\n\n const unwatch = poll(\n async () => {\n if (!initialized) {\n try {\n filter = (await getAction(\n client,\n createContractEventFilter,\n 'createContractEventFilter',\n )({\n abi,\n address,\n args: args as any,\n eventName: eventName as any,\n strict: strict as any,\n fromBlock,\n })) as Filter<'event', abi, eventName>\n } catch {}\n initialized = true\n return\n }\n\n try {\n let logs: Log[]\n if (filter) {\n logs = await getAction(\n client,\n getFilterChanges,\n 'getFilterChanges',\n )({ filter })\n } else {\n // If the filter doesn't exist, we will fall back to use `getLogs`.\n // The fall back exists because some RPC Providers do not support filters.\n\n // Fetch the block number to use for `getLogs`.\n const blockNumber = await getAction(\n client,\n getBlockNumber,\n 'getBlockNumber',\n )({})\n\n // If the block number has changed, we will need to fetch the logs.\n // If the block number doesn't exist, we are yet to reach the first poll interval,\n // so do not emit any logs.\n if (previousBlockNumber && previousBlockNumber < blockNumber) {\n logs = await getAction(\n client,\n getContractEvents,\n 'getContractEvents',\n )({\n abi,\n address,\n args,\n eventName,\n fromBlock: previousBlockNumber + 1n,\n toBlock: blockNumber,\n strict,\n } as {} as GetContractEventsParameters)\n } else {\n logs = []\n }\n previousBlockNumber = blockNumber\n }\n\n if (logs.length === 0) return\n if (batch) emit.onLogs(logs as any)\n else for (const log of logs) emit.onLogs([log] as any)\n } catch (err) {\n // If a filter has been set and gets uninstalled, providers will throw an InvalidInput error.\n // Reinitialize the filter when this occurs\n if (filter && err instanceof InvalidInputRpcError)\n initialized = false\n emit.onError?.(err as Error)\n }\n },\n {\n emitOnBegin: true,\n interval: pollingInterval,\n },\n )\n\n return async () => {\n if (filter)\n await getAction(\n client,\n uninstallFilter,\n 'uninstallFilter',\n )({ filter })\n unwatch()\n }\n })\n }\n\n const subscribeContractEvent = () => {\n const strict = strict_ ?? false\n const observerId = stringify([\n 'watchContractEvent',\n address,\n args,\n batch,\n client.uid,\n eventName,\n pollingInterval,\n strict,\n ])\n\n let active = true\n let unsubscribe = () => (active = false)\n return observe(observerId, { onLogs, onError }, (emit) => {\n ;(async () => {\n try {\n const transport = (() => {\n if (client.transport.type === 'fallback') {\n const transport = client.transport.transports.find(\n (transport: ReturnType) =>\n transport.config.type === 'webSocket' ||\n transport.config.type === 'ipc',\n )\n if (!transport) return client.transport\n return transport.value\n }\n return client.transport\n })()\n\n const topics: LogTopic[] = eventName\n ? encodeEventTopics({\n abi: abi,\n eventName: eventName,\n args,\n } as EncodeEventTopicsParameters)\n : []\n\n const { unsubscribe: unsubscribe_ } = await transport.subscribe({\n params: ['logs', { address, topics }],\n onData(data: any) {\n if (!active) return\n const log = data.result\n try {\n const { eventName, args } = decodeEventLog({\n abi: abi,\n data: log.data,\n topics: log.topics as any,\n strict: strict_,\n })\n const formatted = formatLog(log, {\n args,\n eventName: eventName as string,\n })\n emit.onLogs([formatted] as any)\n } catch (err) {\n let eventName: string | undefined\n let isUnnamed: boolean | undefined\n if (\n err instanceof DecodeLogDataMismatch ||\n err instanceof DecodeLogTopicsMismatch\n ) {\n // If strict mode is on, and log data/topics do not match event definition, skip.\n if (strict_) return\n eventName = err.abiItem.name\n isUnnamed = err.abiItem.inputs?.some(\n (x) => !('name' in x && x.name),\n )\n }\n\n // Set args to empty if there is an error decoding (e.g. indexed/non-indexed params mismatch).\n const formatted = formatLog(log, {\n args: isUnnamed ? [] : {},\n eventName,\n })\n emit.onLogs([formatted] as any)\n }\n },\n onError(error: Error) {\n emit.onError?.(error)\n },\n })\n unsubscribe = unsubscribe_\n if (!active) unsubscribe()\n } catch (err) {\n onError?.(err as Error)\n }\n })()\n return () => unsubscribe()\n })\n }\n\n return enablePolling ? pollContractEvent() : subscribeContractEvent()\n}\n", "import type { ErrorType } from '../errors/utils.js'\nimport type { MaybePromise } from '../types/utils.js'\n\ntype Callback = ((...args: any[]) => any) | undefined\ntype Callbacks = Record\n\nexport type ObserveErrorType = ErrorType\n\n/** @internal */\nexport const listenersCache = /*#__PURE__*/ new Map<\n string,\n { id: number; fns: Callbacks }[]\n>()\n/** @internal */\nexport const cleanupCache = /*#__PURE__*/ new Map<\n string,\n () => void | Promise\n>()\n\ntype EmitFunction = (\n emit: callbacks,\n) => MaybePromise void) | (() => Promise)>\n\nlet callbackCount = 0\n\n/**\n * @description Sets up an observer for a given function. If another function\n * is set up under the same observer id, the function will only be called once\n * for both instances of the observer.\n */\nexport function observe(\n observerId: string,\n callbacks: callbacks,\n fn: EmitFunction,\n) {\n const callbackId = ++callbackCount\n\n const getListeners = () => listenersCache.get(observerId) || []\n\n const unsubscribe = () => {\n const listeners = getListeners()\n listenersCache.set(\n observerId,\n listeners.filter((cb: any) => cb.id !== callbackId),\n )\n }\n\n const unwatch = () => {\n const listeners = getListeners()\n if (!listeners.some((cb: any) => cb.id === callbackId)) return\n const cleanup = cleanupCache.get(observerId)\n if (listeners.length === 1 && cleanup) {\n const p = cleanup()\n if (p instanceof Promise) p.catch(() => {})\n }\n unsubscribe()\n }\n\n const listeners = getListeners()\n listenersCache.set(observerId, [\n ...listeners,\n { id: callbackId, fns: callbacks },\n ])\n\n if (listeners && listeners.length > 0) return unwatch\n\n const emit: callbacks = {} as callbacks\n for (const key in callbacks) {\n emit[key] = ((\n ...args: Parameters>\n ) => {\n const listeners = getListeners()\n if (listeners.length === 0) return\n for (const listener of listeners) listener.fns[key]?.(...args)\n }) as callbacks[Extract]\n }\n\n const cleanup = fn(emit)\n if (typeof cleanup === 'function') cleanupCache.set(observerId, cleanup)\n\n return unwatch\n}\n", "export async function wait(time: number) {\n return new Promise((res) => setTimeout(res, time))\n}\n", "import type { ErrorType } from '../errors/utils.js'\nimport { wait } from './wait.js'\n\ntype PollOptions = {\n // Whether or not to emit when the polling starts.\n emitOnBegin?: boolean | undefined\n // The initial wait time (in ms) before polling.\n initialWaitTime?: ((data: data | void) => Promise) | undefined\n // The interval (in ms).\n interval: number\n}\n\nexport type PollErrorType = ErrorType\n\n/**\n * @description Polls a function at a specified interval.\n */\nexport function poll(\n fn: ({ unpoll }: { unpoll: () => void }) => Promise,\n { emitOnBegin, initialWaitTime, interval }: PollOptions,\n) {\n let active = true\n\n const unwatch = () => (active = false)\n\n const watch = async () => {\n let data: data | undefined | void\n if (emitOnBegin) data = await fn({ unpoll: unwatch })\n\n const initialWait = (await initialWaitTime?.(data)) ?? interval\n await wait(initialWait)\n\n const poll = async () => {\n if (!active) return\n await fn({ unpoll: unwatch })\n await wait(interval)\n poll()\n }\n\n poll()\n }\n watch()\n\n return unwatch\n}\n", "import type { ErrorType } from '../../errors/utils.js'\n\n/** @internal */\nexport const promiseCache = /*#__PURE__*/ new Map()\n/** @internal */\nexport const responseCache = /*#__PURE__*/ new Map()\n\nexport type GetCacheErrorType = ErrorType\n\nexport function getCache(cacheKey: string) {\n const buildCache = (cacheKey: string, cache: Map) => ({\n clear: () => cache.delete(cacheKey),\n get: () => cache.get(cacheKey),\n set: (data: data) => cache.set(cacheKey, data),\n })\n\n const promise = buildCache>(cacheKey, promiseCache)\n const response = buildCache<{ created: Date; data: data }>(\n cacheKey,\n responseCache,\n )\n\n return {\n clear: () => {\n promise.clear()\n response.clear()\n },\n promise,\n response,\n }\n}\n\ntype WithCacheParameters = {\n /** The key to cache the data against. */\n cacheKey: string\n /** The time that cached data will remain in memory. Default: Infinity (no expiry) */\n cacheTime?: number | undefined\n}\n\n/**\n * @description Returns the result of a given promise, and caches the result for\n * subsequent invocations against a provided cache key.\n */\nexport async function withCache(\n fn: () => Promise,\n { cacheKey, cacheTime = Number.POSITIVE_INFINITY }: WithCacheParameters,\n) {\n const cache = getCache(cacheKey)\n\n // If a response exists in the cache, and it's not expired, return it\n // and do not invoke the promise.\n // If the max age is 0, the cache is disabled.\n const response = cache.response.get()\n if (response && cacheTime > 0) {\n const age = Date.now() - response.created.getTime()\n if (age < cacheTime) return response.data\n }\n\n let promise = cache.promise.get()\n if (!promise) {\n promise = fn()\n\n // Store the promise in the cache so that subsequent invocations\n // will wait for the same promise to resolve (deduping).\n cache.promise.set(promise)\n }\n\n try {\n const data = await promise\n\n // Store the response in the cache so that subsequent invocations\n // will return the same response.\n cache.response.set({ created: new Date(), data })\n\n return data\n } finally {\n // Clear the promise cache so that subsequent invocations will\n // invoke the promise again.\n cache.promise.clear()\n }\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type GetCacheErrorType,\n getCache,\n withCache,\n} from '../../utils/promise/withCache.js'\n\nexport type GetBlockNumberParameters = {\n /** Time (in ms) that cached block number will remain in memory. */\n cacheTime?: number | undefined\n}\n\nexport type GetBlockNumberReturnType = bigint\n\nexport type GetBlockNumberErrorType = RequestErrorType | ErrorType\n\nconst cacheKey = (id: string) => `blockNumber.${id}`\n\n/** @internal */\nexport type GetBlockNumberCacheErrorType = GetCacheErrorType | ErrorType\n\n/** @internal */\nexport function getBlockNumberCache(id: string) {\n return getCache(cacheKey(id))\n}\n\n/**\n * Returns the number of the most recent block seen.\n *\n * - Docs: https://viem.sh/docs/actions/public/getBlockNumber\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/blocks_fetching-blocks\n * - JSON-RPC Methods: [`eth_blockNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_blocknumber)\n *\n * @param client - Client to use\n * @param parameters - {@link GetBlockNumberParameters}\n * @returns The number of the block. {@link GetBlockNumberReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getBlockNumber } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const blockNumber = await getBlockNumber(client)\n * // 69420n\n */\nexport async function getBlockNumber(\n client: Client,\n { cacheTime = client.cacheTime }: GetBlockNumberParameters = {},\n): Promise {\n const blockNumberHex = await withCache(\n () =>\n client.request({\n method: 'eth_blockNumber',\n }),\n { cacheKey: cacheKey(client.uid), cacheTime },\n )\n return BigInt(blockNumberHex)\n}\n", "import type { Abi, AbiEvent, ExtractAbiEvent } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { RpcLog } from '../../index.js'\nimport type { BlockNumber, BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Filter, FilterType } from '../../types/filter.js'\nimport type { Log } from '../../types/log.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { DecodeEventLogErrorType } from '../../utils/abi/decodeEventLog.js'\nimport { parseEventLogs } from '../../utils/abi/parseEventLogs.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type FormatLogErrorType,\n formatLog,\n} from '../../utils/formatters/log.js'\n\nexport type GetFilterChangesParameters<\n filterType extends FilterType = FilterType,\n abi extends Abi | readonly unknown[] | undefined = undefined,\n eventName extends string | undefined = undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n> = {\n filter: Filter\n}\n\nexport type GetFilterChangesReturnType<\n filterType extends FilterType = FilterType,\n abi extends Abi | readonly unknown[] | undefined = undefined,\n eventName extends string | undefined = undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n _AbiEvent extends AbiEvent | undefined = abi extends Abi\n ? eventName extends string\n ? ExtractAbiEvent\n : undefined\n : undefined,\n _Pending extends boolean =\n | (fromBlock extends 'pending' ? true : false)\n | (toBlock extends 'pending' ? true : false),\n> = filterType extends 'event'\n ? Log[]\n : Hash[]\n\nexport type GetFilterChangesErrorType =\n | RequestErrorType\n | DecodeEventLogErrorType\n | FormatLogErrorType\n | ErrorType\n\n/**\n * Returns a list of logs or hashes based on a [Filter](/docs/glossary/terms#filter) since the last time it was called.\n *\n * - Docs: https://viem.sh/docs/actions/public/getFilterChanges\n * - JSON-RPC Methods: [`eth_getFilterChanges`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getfilterchanges)\n *\n * A Filter can be created from the following actions:\n *\n * - [`createBlockFilter`](https://viem.sh/docs/actions/public/createBlockFilter)\n * - [`createContractEventFilter`](https://viem.sh/docs/contract/createContractEventFilter)\n * - [`createEventFilter`](https://viem.sh/docs/actions/public/createEventFilter)\n * - [`createPendingTransactionFilter`](https://viem.sh/docs/actions/public/createPendingTransactionFilter)\n *\n * Depending on the type of filter, the return value will be different:\n *\n * - If the filter was created with `createContractEventFilter` or `createEventFilter`, it returns a list of logs.\n * - If the filter was created with `createPendingTransactionFilter`, it returns a list of transaction hashes.\n * - If the filter was created with `createBlockFilter`, it returns a list of block hashes.\n *\n * @param client - Client to use\n * @param parameters - {@link GetFilterChangesParameters}\n * @returns Logs or hashes. {@link GetFilterChangesReturnType}\n *\n * @example\n * // Blocks\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createBlockFilter, getFilterChanges } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await createBlockFilter(client)\n * const hashes = await getFilterChanges(client, { filter })\n *\n * @example\n * // Contract Events\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createContractEventFilter, getFilterChanges } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await createContractEventFilter(client, {\n * address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',\n * abi: parseAbi(['event Transfer(address indexed, address indexed, uint256)']),\n * eventName: 'Transfer',\n * })\n * const logs = await getFilterChanges(client, { filter })\n *\n * @example\n * // Raw Events\n * import { createPublicClient, http, parseAbiItem } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createEventFilter, getFilterChanges } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await createEventFilter(client, {\n * address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',\n * event: parseAbiItem('event Transfer(address indexed, address indexed, uint256)'),\n * })\n * const logs = await getFilterChanges(client, { filter })\n *\n * @example\n * // Transactions\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createPendingTransactionFilter, getFilterChanges } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await createPendingTransactionFilter(client)\n * const hashes = await getFilterChanges(client, { filter })\n */\nexport async function getFilterChanges<\n transport extends Transport,\n chain extends Chain | undefined,\n filterType extends FilterType,\n const abi extends Abi | readonly unknown[] | undefined,\n eventName extends string | undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n>(\n _client: Client,\n {\n filter,\n }: GetFilterChangesParameters<\n filterType,\n abi,\n eventName,\n strict,\n fromBlock,\n toBlock\n >,\n): Promise<\n GetFilterChangesReturnType<\n filterType,\n abi,\n eventName,\n strict,\n fromBlock,\n toBlock\n >\n> {\n const strict = 'strict' in filter && filter.strict\n\n const logs = await filter.request({\n method: 'eth_getFilterChanges',\n params: [filter.id],\n })\n\n if (typeof logs[0] === 'string')\n return logs as GetFilterChangesReturnType<\n filterType,\n abi,\n eventName,\n strict,\n fromBlock,\n toBlock\n >\n\n const formattedLogs = logs.map((log) => formatLog(log as RpcLog))\n if (!('abi' in filter) || !filter.abi)\n return formattedLogs as GetFilterChangesReturnType<\n filterType,\n abi,\n eventName,\n strict,\n fromBlock,\n toBlock\n >\n return parseEventLogs({\n abi: filter.abi,\n logs: formattedLogs,\n strict,\n }) as unknown as GetFilterChangesReturnType<\n filterType,\n abi,\n eventName,\n strict,\n fromBlock,\n toBlock\n >\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type UninstallFilterParameters = {\n filter: Filter\n}\nexport type UninstallFilterReturnType = boolean\n\nexport type UninstallFilterErrorType = RequestErrorType | ErrorType\n\n/**\n * Destroys a [`Filter`](https://viem.sh/docs/glossary/types#filter).\n *\n * - Docs: https://viem.sh/docs/actions/public/uninstallFilter\n * - JSON-RPC Methods: [`eth_uninstallFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_uninstallFilter)\n *\n * Destroys a Filter that was created from one of the following Actions:\n * - [`createBlockFilter`](https://viem.sh/docs/actions/public/createBlockFilter)\n * - [`createEventFilter`](https://viem.sh/docs/actions/public/createEventFilter)\n * - [`createPendingTransactionFilter`](https://viem.sh/docs/actions/public/createPendingTransactionFilter)\n *\n * @param client - Client to use\n * @param parameters - {@link UninstallFilterParameters}\n * @returns A boolean indicating if the Filter was successfully uninstalled. {@link UninstallFilterReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createPendingTransactionFilter, uninstallFilter } from 'viem/public'\n *\n * const filter = await createPendingTransactionFilter(client)\n * const uninstalled = await uninstallFilter(client, { filter })\n * // true\n */\nexport async function uninstallFilter<\n transport extends Transport,\n chain extends Chain | undefined,\n>(\n _client: Client,\n { filter }: UninstallFilterParameters,\n): Promise {\n return filter.request({\n method: 'eth_uninstallFilter',\n params: [filter.id],\n })\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { TransactionSerializedGeneric } from '../../types/transaction.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type SendRawTransactionParameters = {\n /** The signed serialized transaction. */\n serializedTransaction: TransactionSerializedGeneric\n}\n\nexport type SendRawTransactionReturnType = Hash\n\nexport type SendRawTransactionErrorType = RequestErrorType | ErrorType\n\n/**\n * Sends a **signed** transaction to the network\n *\n * - Docs: https://viem.sh/docs/actions/wallet/sendRawTransaction\n * - JSON-RPC Method: [`eth_sendRawTransaction`](https://ethereum.github.io/execution-apis/api-documentation/)\n *\n * @param client - Client to use\n * @param parameters - {@link SendRawTransactionParameters}\n * @returns The transaction hash. {@link SendRawTransactionReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { sendRawTransaction } from 'viem/wallet'\n *\n * const client = createWalletClient({\n * chain: mainnet,\n * transport: custom(window.ethereum),\n * })\n *\n * const hash = await sendRawTransaction(client, {\n * serializedTransaction: '0x02f850018203118080825208808080c080a04012522854168b27e5dc3d5839bab5e6b39e1a0ffd343901ce1622e3d64b48f1a04e00902ae0502c4728cbf12156290df99c3ed7de85b1dbfe20b5c36931733a33'\n * })\n */\nexport async function sendRawTransaction(\n client: Client,\n { serializedTransaction }: SendRawTransactionParameters,\n): Promise {\n return client.request(\n {\n method: 'eth_sendRawTransaction',\n params: [serializedTransaction],\n },\n { retryCount: 0 },\n )\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport { wait } from '../wait.js'\n\nexport type WithRetryParameters = {\n // The delay (in ms) between retries.\n delay?:\n | ((config: { count: number; error: Error }) => number)\n | number\n | undefined\n // The max number of times to retry.\n retryCount?: number | undefined\n // Whether or not to retry when an error is thrown.\n shouldRetry?:\n | (({\n count,\n error,\n }: {\n count: number\n error: Error\n }) => Promise | boolean)\n | undefined\n}\n\nexport type WithRetryErrorType = ErrorType\n\nexport function withRetry(\n fn: () => Promise,\n {\n delay: delay_ = 100,\n retryCount = 2,\n shouldRetry = () => true,\n }: WithRetryParameters = {},\n) {\n return new Promise((resolve, reject) => {\n const attemptRetry = async ({ count = 0 } = {}) => {\n const retry = async ({ error }: { error: Error }) => {\n const delay =\n typeof delay_ === 'function' ? delay_({ count, error }) : delay_\n if (delay) await wait(delay)\n attemptRetry({ count: count + 1 })\n }\n\n try {\n const data = await fn()\n resolve(data)\n } catch (err) {\n if (\n count < retryCount &&\n (await shouldRetry({ count, error: err as Error }))\n )\n return retry({ error: err as Error })\n reject(err)\n }\n }\n attemptRetry()\n })\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type {\n Chain,\n ExtractChainFormatterReturnType,\n} from '../../types/chain.js'\nimport type { RpcTransactionReceipt } from '../../types/rpc.js'\nimport type { TransactionReceipt } from '../../types/transaction.js'\nimport type { ExactPartial } from '../../types/utils.js'\nimport { hexToNumber } from '../encoding/fromHex.js'\n\nimport { type DefineFormatterErrorType, defineFormatter } from './formatter.js'\nimport { formatLog } from './log.js'\nimport { transactionType } from './transaction.js'\n\nexport type FormattedTransactionReceipt<\n chain extends Chain | undefined = undefined,\n> = ExtractChainFormatterReturnType<\n chain,\n 'transactionReceipt',\n TransactionReceipt\n>\n\nexport const receiptStatuses = {\n '0x0': 'reverted',\n '0x1': 'success',\n} as const\n\nexport type FormatTransactionReceiptErrorType = ErrorType\n\nexport function formatTransactionReceipt(\n transactionReceipt: ExactPartial,\n _?: string | undefined,\n) {\n const receipt = {\n ...transactionReceipt,\n blockNumber: transactionReceipt.blockNumber\n ? BigInt(transactionReceipt.blockNumber)\n : null,\n contractAddress: transactionReceipt.contractAddress\n ? transactionReceipt.contractAddress\n : null,\n cumulativeGasUsed: transactionReceipt.cumulativeGasUsed\n ? BigInt(transactionReceipt.cumulativeGasUsed)\n : null,\n effectiveGasPrice: transactionReceipt.effectiveGasPrice\n ? BigInt(transactionReceipt.effectiveGasPrice)\n : null,\n gasUsed: transactionReceipt.gasUsed\n ? BigInt(transactionReceipt.gasUsed)\n : null,\n logs: transactionReceipt.logs\n ? transactionReceipt.logs.map((log) => formatLog(log))\n : null,\n to: transactionReceipt.to ? transactionReceipt.to : null,\n transactionIndex: transactionReceipt.transactionIndex\n ? hexToNumber(transactionReceipt.transactionIndex)\n : null,\n status: transactionReceipt.status\n ? receiptStatuses[transactionReceipt.status]\n : null,\n type: transactionReceipt.type\n ? transactionType[\n transactionReceipt.type as keyof typeof transactionType\n ] || transactionReceipt.type\n : null,\n } as TransactionReceipt\n\n if (transactionReceipt.blobGasPrice)\n receipt.blobGasPrice = BigInt(transactionReceipt.blobGasPrice)\n if (transactionReceipt.blobGasUsed)\n receipt.blobGasUsed = BigInt(transactionReceipt.blobGasUsed)\n\n return receipt\n}\n\nexport type DefineTransactionReceiptErrorType =\n | DefineFormatterErrorType\n | ErrorType\n\nexport const defineTransactionReceipt = /*#__PURE__*/ defineFormatter(\n 'transactionReceipt',\n formatTransactionReceipt,\n)\n", "import type { Address } from 'abitype'\n\nimport type { JsonRpcAccount } from '../accounts/types.js'\nimport {\n type ParseAccountErrorType,\n parseAccount,\n} from '../accounts/utils/parseAccount.js'\nimport type { ErrorType } from '../errors/utils.js'\nimport type { Account } from '../types/account.js'\nimport type { BlockTag } from '../types/block.js'\nimport type { Chain } from '../types/chain.js'\nimport type { DataSuffix } from '../types/dataSuffix.js'\nimport type {\n EIP1193RequestFn,\n EIP1474Methods,\n RpcSchema,\n} from '../types/eip1193.js'\nimport type { ExactPartial, Prettify } from '../types/utils.js'\nimport type {\n CcipRequestParameters,\n CcipRequestReturnType,\n} from '../utils/ccip.js'\nimport { uid } from '../utils/uid.js'\nimport type { PublicActions } from './decorators/public.js'\nimport type { WalletActions } from './decorators/wallet.js'\nimport type { Transport } from './transports/createTransport.js'\n\nexport type ClientConfig<\n transport extends Transport = Transport,\n chain extends Chain | undefined = Chain | undefined,\n accountOrAddress extends Account | Address | undefined =\n | Account\n | Address\n | undefined,\n rpcSchema extends RpcSchema | undefined = undefined,\n> = {\n /** The Account to use for the Client. This will be used for Actions that require an account as an argument. */\n account?: accountOrAddress | Account | Address | undefined\n /** Flags for batch settings. */\n batch?:\n | {\n /** Toggle to enable `eth_call` multicall aggregation. */\n multicall?: boolean | Prettify | undefined\n }\n | undefined\n /**\n * Default block tag to use for RPC requests.\n *\n * If the chain supports a pre-confirmation mechanism\n * (set via `chain.experimental_preconfirmationTime`), defaults to `'pending'`.\n *\n * @default 'latest'\n */\n experimental_blockTag?: BlockTag | undefined\n /**\n * Time (in ms) that cached data will remain in memory.\n * @default chain.blockTime / 3\n */\n cacheTime?: number | undefined\n /**\n * [CCIP Read](https://eips.ethereum.org/EIPS/eip-3668) configuration.\n * If `false`, the client will not support offchain CCIP lookups.\n */\n ccipRead?:\n | {\n /**\n * A function that will be called to make the offchain CCIP lookup request.\n * @see https://eips.ethereum.org/EIPS/eip-3668#client-lookup-protocol\n */\n request?: (\n parameters: CcipRequestParameters,\n ) => Promise\n }\n | false\n | undefined\n /** Chain for the client. */\n chain?: Chain | undefined | chain\n /** Data suffix to append to transaction data. */\n dataSuffix?: DataSuffix | undefined\n /** A key for the client. */\n key?: string | undefined\n /** A name for the client. */\n name?: string | undefined\n /**\n * Frequency (in ms) for polling enabled actions & events.\n * @default chain.blockTime / 3\n */\n pollingInterval?: number | undefined\n /**\n * Typed JSON-RPC schema for the client.\n */\n rpcSchema?: rpcSchema | undefined\n /** The RPC transport */\n transport: transport\n /** The type of client. */\n type?: string | undefined\n}\n\n// Actions that are used internally by other Actions (ie. `call` is used by `readContract`).\n// They are allowed to be extended, but must conform to their parameter & return type interfaces.\n// Example: an extended `call` action must accept `CallParameters` as parameters,\n// and conform to the `CallReturnType` return type.\ntype ExtendableProtectedActions<\n transport extends Transport = Transport,\n chain extends Chain | undefined = Chain | undefined,\n account extends Account | undefined = Account | undefined,\n> = Pick<\n PublicActions,\n | 'call'\n | 'createContractEventFilter'\n | 'createEventFilter'\n | 'estimateContractGas'\n | 'estimateGas'\n | 'getBlock'\n | 'getBlockNumber'\n | 'getChainId'\n | 'getContractEvents'\n | 'getEnsText'\n | 'getFilterChanges'\n | 'getGasPrice'\n | 'getLogs'\n | 'getTransaction'\n | 'getTransactionCount'\n | 'getTransactionReceipt'\n | 'prepareTransactionRequest'\n | 'readContract'\n | 'sendRawTransaction'\n | 'simulateContract'\n | 'uninstallFilter'\n | 'watchBlockNumber'\n | 'watchContractEvent'\n> &\n Pick, 'sendTransaction' | 'writeContract'>\n\n// TODO: Move `transport` to slot index 2 since `chain` and `account` used more frequently.\n// Otherwise, we end up with a lot of `Client` in actions.\nexport type Client<\n transport extends Transport = Transport,\n chain extends Chain | undefined = Chain | undefined,\n account extends Account | undefined = Account | undefined,\n rpcSchema extends RpcSchema | undefined = undefined,\n extended extends Extended | undefined = Extended | undefined,\n> = Client_Base &\n (extended extends Extended ? extended : unknown) & {\n extend: <\n const client extends Extended &\n ExactPartial>,\n >(\n fn: (\n client: Client,\n ) => client,\n ) => Client<\n transport,\n chain,\n account,\n rpcSchema,\n Prettify & (extended extends Extended ? extended : unknown)\n >\n }\n\ntype Client_Base<\n transport extends Transport = Transport,\n chain extends Chain | undefined = Chain | undefined,\n account extends Account | undefined = Account | undefined,\n rpcSchema extends RpcSchema | undefined = undefined,\n> = {\n /** The Account of the Client. */\n account: account\n /** Flags for batch settings. */\n batch?: ClientConfig['batch'] | undefined\n /** Time (in ms) that cached data will remain in memory. */\n cacheTime: number\n /** [CCIP Read](https://eips.ethereum.org/EIPS/eip-3668) configuration. */\n ccipRead?: ClientConfig['ccipRead'] | undefined\n /** Chain for the client. */\n chain: chain\n /** Data suffix to append to transaction data. */\n dataSuffix?: DataSuffix | undefined\n /** Default block tag to use for RPC requests. */\n experimental_blockTag?: BlockTag | undefined\n /** A key for the client. */\n key: string\n /** A name for the client. */\n name: string\n /** Frequency (in ms) for polling enabled actions & events. Defaults to 4_000 milliseconds. */\n pollingInterval: number\n /** Request function wrapped with friendly error handling */\n request: EIP1193RequestFn<\n rpcSchema extends undefined ? EIP1474Methods : rpcSchema\n >\n /** The RPC transport */\n transport: ReturnType['config'] & ReturnType['value']\n /** The type of client. */\n type: string\n /** A unique ID for the client. */\n uid: string\n}\n\ntype Extended = Prettify<\n // disallow redefining base properties\n { [_ in keyof Client_Base]?: undefined } & {\n [key: string]: unknown\n }\n>\n\nexport type MulticallBatchOptions = {\n /** The maximum size (in bytes) for each calldata chunk. @default 1_024 */\n batchSize?: number | undefined\n /** Enable deployless multicall. */\n deployless?: boolean | undefined\n /** The maximum number of milliseconds to wait before sending a batch. @default 0 */\n wait?: number | undefined\n}\n\nexport type CreateClientErrorType = ParseAccountErrorType | ErrorType\n\nexport function createClient<\n transport extends Transport,\n chain extends Chain | undefined = undefined,\n accountOrAddress extends Account | Address | undefined = undefined,\n rpcSchema extends RpcSchema | undefined = undefined,\n>(\n parameters: ClientConfig,\n): Prettify<\n Client<\n transport,\n chain,\n accountOrAddress extends Address\n ? Prettify>\n : accountOrAddress,\n rpcSchema\n >\n>\n\nexport function createClient(parameters: ClientConfig): Client {\n const {\n batch,\n chain,\n ccipRead,\n dataSuffix,\n key = 'base',\n name = 'Base Client',\n type = 'base',\n } = parameters\n\n const experimental_blockTag =\n parameters.experimental_blockTag ??\n (typeof chain?.experimental_preconfirmationTime === 'number'\n ? 'pending'\n : undefined)\n const blockTime = chain?.blockTime ?? 12_000\n\n const defaultPollingInterval = Math.min(\n Math.max(Math.floor(blockTime / 2), 500),\n 4_000,\n )\n const pollingInterval = parameters.pollingInterval ?? defaultPollingInterval\n const cacheTime = parameters.cacheTime ?? pollingInterval\n\n const account = parameters.account\n ? parseAccount(parameters.account)\n : undefined\n const { config, request, value } = parameters.transport({\n account,\n chain,\n pollingInterval,\n })\n const transport = { ...config, ...value }\n\n const client = {\n account,\n batch,\n cacheTime,\n ccipRead,\n chain,\n dataSuffix,\n key,\n name,\n pollingInterval,\n request,\n transport,\n type,\n uid: uid(),\n ...(experimental_blockTag ? { experimental_blockTag } : {}),\n }\n\n function extend(base: typeof client) {\n type ExtendFn = (base: typeof client) => unknown\n return (extendFn: ExtendFn) => {\n const extended = extendFn(base) as Extended\n for (const key in client) delete extended[key]\n const combined = { ...base, ...extended }\n return Object.assign(combined, { extend: extend(combined as any) })\n }\n }\n\n return Object.assign(client, { extend: extend(client) as any })\n}\n\n/**\n * Defines a typed JSON-RPC schema for the client.\n * Note: This is a runtime noop function.\n */\nexport function rpcSchema(): rpcSchema {\n return null as any\n}\n", "const size = 256\nlet index = size\nlet buffer: string\n\nexport function uid(length = 11) {\n if (!buffer || index + length > size * 2) {\n buffer = ''\n index = 0\n for (let i = 0; i < size; i++) {\n buffer += ((256 + Math.random() * 256) | 0).toString(16).substring(1)\n }\n }\n return buffer.substring(index, index++ + length)\n}\n", "import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n addressResolverAbi,\n universalResolverResolveAbi,\n} from '../../constants/abis.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Prettify } from '../../types/utils.js'\nimport {\n type DecodeFunctionResultErrorType,\n decodeFunctionResult,\n} from '../../utils/abi/decodeFunctionResult.js'\nimport {\n type EncodeFunctionDataErrorType,\n encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport {\n type GetChainContractAddressErrorType,\n getChainContractAddress,\n} from '../../utils/chain/getChainContractAddress.js'\nimport { type TrimErrorType, trim } from '../../utils/data/trim.js'\nimport { type ToHexErrorType, toHex } from '../../utils/encoding/toHex.js'\nimport { isNullUniversalResolverError } from '../../utils/ens/errors.js'\nimport { localBatchGatewayUrl } from '../../utils/ens/localBatchGatewayRequest.js'\nimport { type NamehashErrorType, namehash } from '../../utils/ens/namehash.js'\nimport {\n type PacketToBytesErrorType,\n packetToBytes,\n} from '../../utils/ens/packetToBytes.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n type ReadContractParameters,\n readContract,\n} from '../public/readContract.js'\n\nexport type GetEnsAddressParameters = Prettify<\n Pick & {\n /**\n * ENSIP-9 compliant coinType (chain) to get ENS address for.\n *\n * To get the `coinType` for a chain id, use the `toCoinType` function:\n * ```ts\n * import { toCoinType } from 'viem'\n * import { base } from 'viem/chains'\n *\n * const coinType = toCoinType(base.id)\n * ```\n *\n * @default 60n\n */\n coinType?: bigint | undefined\n /**\n * Universal Resolver gateway URLs to use for resolving CCIP-read requests.\n */\n gatewayUrls?: string[] | undefined\n /**\n * Name to get the address for.\n */\n name: string\n /**\n * Whether or not to throw errors propagated from the ENS Universal Resolver Contract.\n */\n strict?: boolean | undefined\n /**\n * Address of ENS Universal Resolver Contract.\n */\n universalResolverAddress?: Address | undefined\n }\n>\n\nexport type GetEnsAddressReturnType = Address | null\n\nexport type GetEnsAddressErrorType =\n | GetChainContractAddressErrorType\n | EncodeFunctionDataErrorType\n | NamehashErrorType\n | ToHexErrorType\n | PacketToBytesErrorType\n | DecodeFunctionResultErrorType\n | TrimErrorType\n | ErrorType\n\n/**\n * Gets address for ENS name.\n *\n * - Docs: https://viem.sh/docs/ens/actions/getEnsAddress\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n *\n * Calls `resolve(bytes, bytes)` on ENS Universal Resolver Contract.\n *\n * Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `getEnsAddress`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n *\n * @param client - Client to use\n * @param parameters - {@link GetEnsAddressParameters}\n * @returns Address for ENS name or `null` if not found. {@link GetEnsAddressReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getEnsAddress, normalize } from 'viem/ens'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const ensAddress = await getEnsAddress(client, {\n * name: normalize('wevm.eth'),\n * })\n * // '0xd2135CfB216b74109775236E36d4b433F1DF507B'\n */\nexport async function getEnsAddress(\n client: Client,\n parameters: GetEnsAddressParameters,\n): Promise {\n const { blockNumber, blockTag, coinType, name, gatewayUrls, strict } =\n parameters\n const { chain } = client\n\n const universalResolverAddress = (() => {\n if (parameters.universalResolverAddress)\n return parameters.universalResolverAddress\n if (!chain)\n throw new Error(\n 'client chain not configured. universalResolverAddress is required.',\n )\n return getChainContractAddress({\n blockNumber,\n chain,\n contract: 'ensUniversalResolver',\n })\n })()\n\n const tlds = chain?.ensTlds\n if (tlds && !tlds.some((tld) => name.endsWith(tld))) return null\n\n const args = (() => {\n if (coinType != null) return [namehash(name), BigInt(coinType)] as const\n return [namehash(name)] as const\n })()\n\n try {\n const functionData = encodeFunctionData({\n abi: addressResolverAbi,\n functionName: 'addr',\n args,\n })\n\n const readContractParameters = {\n address: universalResolverAddress,\n abi: universalResolverResolveAbi,\n functionName: 'resolveWithGateways',\n args: [\n toHex(packetToBytes(name)),\n functionData,\n gatewayUrls ?? [localBatchGatewayUrl],\n ],\n blockNumber,\n blockTag,\n } as const\n\n const readContractAction = getAction(client, readContract, 'readContract')\n\n const res = await readContractAction(readContractParameters)\n\n if (res[0] === '0x') return null\n\n const address = decodeFunctionResult({\n abi: addressResolverAbi,\n args,\n functionName: 'addr',\n data: res[0],\n })\n\n if (address === '0x') return null\n if (trim(address) === '0x00') return null\n return address\n } catch (err) {\n if (strict) throw err\n if (isNullUniversalResolverError(err)) return null\n throw err\n }\n}\n", "import { BaseError } from '../../errors/base.js'\nimport { ContractFunctionRevertedError } from '../../errors/contract.js'\nimport type { ErrorType } from '../../errors/utils.js'\n\n/** @internal */\nexport type IsNullUniversalResolverErrorErrorType = ErrorType\n\n/*\n * @description Checks if error is a valid null result UniversalResolver error\n */\nexport function isNullUniversalResolverError(err: unknown): boolean {\n if (!(err instanceof BaseError)) return false\n const cause = err.walk((e) => e instanceof ContractFunctionRevertedError)\n if (!(cause instanceof ContractFunctionRevertedError)) return false\n\n if (cause.data?.errorName === 'HttpError') return true\n if (cause.data?.errorName === 'ResolverError') return true\n if (cause.data?.errorName === 'ResolverNotContract') return true\n if (cause.data?.errorName === 'ResolverNotFound') return true\n if (cause.data?.errorName === 'ReverseAddressMismatch') return true\n if (cause.data?.errorName === 'UnsupportedResolverProfile') return true\n\n return false\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray } from '../../types/misc.js'\nimport { type ConcatErrorType, concat } from '../data/concat.js'\nimport {\n type StringToBytesErrorType,\n stringToBytes,\n type ToBytesErrorType,\n toBytes,\n} from '../encoding/toBytes.js'\nimport { type BytesToHexErrorType, bytesToHex } from '../encoding/toHex.js'\nimport { type Keccak256ErrorType, keccak256 } from '../hash/keccak256.js'\nimport {\n type EncodedLabelToLabelhashErrorType,\n encodedLabelToLabelhash,\n} from './encodedLabelToLabelhash.js'\n\nexport type NamehashErrorType =\n | BytesToHexErrorType\n | EncodedLabelToLabelhashErrorType\n | ToBytesErrorType\n | Keccak256ErrorType\n | StringToBytesErrorType\n | ConcatErrorType\n | ErrorType\n\n/**\n * @description Hashes ENS name\n *\n * - Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `namehash`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n *\n * @example\n * namehash('wevm.eth')\n * '0x08c85f2f4059e930c45a6aeff9dcd3bd95dc3c5c1cddef6a0626b31152248560'\n *\n * @link https://eips.ethereum.org/EIPS/eip-137\n */\nexport function namehash(name: string) {\n let result = new Uint8Array(32).fill(0) as ByteArray\n if (!name) return bytesToHex(result)\n\n const labels = name.split('.')\n // Iterate in reverse order building up hash\n for (let i = labels.length - 1; i >= 0; i -= 1) {\n const hashFromEncodedLabel = encodedLabelToLabelhash(labels[i])\n const hashed = hashFromEncodedLabel\n ? toBytes(hashFromEncodedLabel)\n : keccak256(stringToBytes(labels[i]), 'bytes')\n result = keccak256(concat([result, hashed]), 'bytes')\n }\n\n return bytesToHex(result)\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\nimport { type IsHexErrorType, isHex } from '../data/isHex.js'\n\nexport type EncodedLabelToLabelhashErrorType = IsHexErrorType | ErrorType\n\nexport function encodedLabelToLabelhash(label: string): Hex | null {\n if (label.length !== 66) return null\n if (label.indexOf('[') !== 0) return null\n if (label.indexOf(']') !== 65) return null\n const hash = `0x${label.slice(1, 65)}`\n if (!isHex(hash)) return null\n return hash\n}\n", "// Adapted from https://github.com/mafintosh/dns-packet\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray } from '../../types/misc.js'\nimport {\n type StringToBytesErrorType,\n stringToBytes,\n} from '../encoding/toBytes.js'\nimport {\n type EncodeLabelhashErrorType,\n encodeLabelhash,\n} from './encodeLabelhash.js'\nimport { type LabelhashErrorType, labelhash } from './labelhash.js'\n\nexport type PacketToBytesErrorType =\n | EncodeLabelhashErrorType\n | LabelhashErrorType\n | StringToBytesErrorType\n | ErrorType\n\n/*\n * @description Encodes a DNS packet into a ByteArray containing a UDP payload.\n *\n * @example\n * packetToBytes('awkweb.eth')\n * '0x0661776b7765620365746800'\n *\n * @see https://docs.ens.domains/resolution/names#dns\n *\n */\nexport function packetToBytes(packet: string): ByteArray {\n // strip leading and trailing `.`\n const value = packet.replace(/^\\.|\\.$/gm, '')\n if (value.length === 0) return new Uint8Array(1)\n\n const bytes = new Uint8Array(stringToBytes(value).byteLength + 2)\n\n let offset = 0\n const list = value.split('.')\n for (let i = 0; i < list.length; i++) {\n let encoded = stringToBytes(list[i])\n // if the length is > 255, make the encoded label value a labelhash\n // this is compatible with the universal resolver\n if (encoded.byteLength > 255)\n encoded = stringToBytes(encodeLabelhash(labelhash(list[i])))\n bytes[offset] = encoded.length\n bytes.set(encoded, offset + 1)\n offset += encoded.length + 1\n }\n\n if (bytes.byteLength !== offset + 1) return bytes.slice(0, offset + 1)\n\n return bytes\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\n\nexport type EncodeLabelhashErrorType = ErrorType\n\nexport function encodeLabelhash(hash: Hex): `[${string}]` {\n return `[${hash.slice(2)}]`\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport {\n type StringToBytesErrorType,\n stringToBytes,\n} from '../encoding/toBytes.js'\nimport { type BytesToHexErrorType, bytesToHex } from '../encoding/toHex.js'\nimport { type Keccak256ErrorType, keccak256 } from '../hash/keccak256.js'\nimport {\n type EncodedLabelToLabelhashErrorType,\n encodedLabelToLabelhash,\n} from './encodedLabelToLabelhash.js'\n\nexport type LabelhashErrorType =\n | BytesToHexErrorType\n | EncodedLabelToLabelhashErrorType\n | Keccak256ErrorType\n | StringToBytesErrorType\n | ErrorType\n\n/**\n * @description Hashes ENS label\n *\n * - Since ENS labels prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS labels](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `labelhash`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n *\n * @example\n * labelhash('eth')\n * '0x4f5b812789fc606be1b3b16908db13fc7a9adf7ca72641f84d75b47069d3d7f0'\n */\nexport function labelhash(label: string) {\n const result = new Uint8Array(32).fill(0)\n if (!label) return bytesToHex(result)\n return encodedLabelToLabelhash(label) || keccak256(stringToBytes(label))\n}\n", "import { BaseError } from './base.js'\n\nexport type EnsAvatarInvalidMetadataErrorType =\n EnsAvatarInvalidMetadataError & {\n name: 'EnsAvatarInvalidMetadataError'\n }\nexport class EnsAvatarInvalidMetadataError extends BaseError {\n constructor({ data }: { data: any }) {\n super(\n 'Unable to extract image from metadata. The metadata may be malformed or invalid.',\n {\n metaMessages: [\n '- Metadata must be a JSON object with at least an `image`, `image_url` or `image_data` property.',\n '',\n `Provided data: ${JSON.stringify(data)}`,\n ],\n name: 'EnsAvatarInvalidMetadataError',\n },\n )\n }\n}\n\nexport type EnsAvatarInvalidNftUriErrorType = EnsAvatarInvalidNftUriError & {\n name: 'EnsAvatarInvalidNftUriError'\n}\nexport class EnsAvatarInvalidNftUriError extends BaseError {\n constructor({ reason }: { reason: string }) {\n super(`ENS NFT avatar URI is invalid. ${reason}`, {\n name: 'EnsAvatarInvalidNftUriError',\n })\n }\n}\n\nexport type EnsAvatarUriResolutionErrorType = EnsAvatarUriResolutionError & {\n name: 'EnsAvatarUriResolutionError'\n}\nexport class EnsAvatarUriResolutionError extends BaseError {\n constructor({ uri }: { uri: string }) {\n super(\n `Unable to resolve ENS avatar URI \"${uri}\". The URI may be malformed, invalid, or does not respond with a valid image.`,\n { name: 'EnsAvatarUriResolutionError' },\n )\n }\n}\n\nexport type EnsAvatarUnsupportedNamespaceErrorType =\n EnsAvatarUnsupportedNamespaceError & {\n name: 'EnsAvatarUnsupportedNamespaceError'\n }\nexport class EnsAvatarUnsupportedNamespaceError extends BaseError {\n constructor({ namespace }: { namespace: string }) {\n super(\n `ENS NFT avatar namespace \"${namespace}\" is not supported. Must be \"erc721\" or \"erc1155\".`,\n { name: 'EnsAvatarUnsupportedNamespaceError' },\n )\n }\n}\n\nexport type EnsInvalidChainIdErrorType = EnsInvalidChainIdError & {\n name: 'EnsInvalidChainIdError'\n}\nexport class EnsInvalidChainIdError extends BaseError {\n constructor({ chainId }: { chainId: number }) {\n super(\n `Invalid ENSIP-11 chainId: ${chainId}. Must be between 0 and 0x7fffffff, or 1.`,\n {\n name: 'EnsInvalidChainIdError',\n },\n )\n }\n}\n", "import type { Address } from 'abitype'\n\nimport {\n type ReadContractErrorType,\n readContract,\n} from '../../../actions/public/readContract.js'\nimport type { Client } from '../../../clients/createClient.js'\nimport type { Transport } from '../../../clients/transports/createTransport.js'\nimport {\n EnsAvatarInvalidMetadataError,\n type EnsAvatarInvalidMetadataErrorType,\n EnsAvatarInvalidNftUriError,\n type EnsAvatarInvalidNftUriErrorType,\n EnsAvatarUnsupportedNamespaceError,\n type EnsAvatarUnsupportedNamespaceErrorType,\n EnsAvatarUriResolutionError,\n type EnsAvatarUriResolutionErrorType,\n} from '../../../errors/ens.js'\nimport type { ErrorType } from '../../../errors/utils.js'\nimport type { Chain } from '../../../types/chain.js'\nimport type { AssetGatewayUrls } from '../../../types/ens.js'\n\ntype UriItem = {\n uri: string\n isOnChain: boolean\n isEncoded: boolean\n}\n\nconst networkRegex =\n /(?https?:\\/\\/[^/]*|ipfs:\\/|ipns:\\/|ar:\\/)?(?\\/)?(?ipfs\\/|ipns\\/)?(?[\\w\\-.]+)(?\\/.*)?/\nconst ipfsHashRegex =\n /^(Qm[1-9A-HJ-NP-Za-km-z]{44,}|b[A-Za-z2-7]{58,}|B[A-Z2-7]{58,}|z[1-9A-HJ-NP-Za-km-z]{48,}|F[0-9A-F]{50,})(\\/(?[\\w\\-.]+))?(?\\/.*)?$/\nconst base64Regex = /^data:([a-zA-Z\\-/+]*);base64,([^\"].*)/\nconst dataURIRegex = /^data:([a-zA-Z\\-/+]*)?(;[a-zA-Z0-9].*?)?(,)/\n\ntype IsImageUriErrorType = ErrorType\n\n/** @internal */\nexport async function isImageUri(uri: string) {\n try {\n const res = await fetch(uri, { method: 'HEAD' })\n // retrieve content type header to check if content is image\n if (res.status === 200) {\n const contentType = res.headers.get('content-type')\n return contentType?.startsWith('image/')\n }\n return false\n } catch (error: any) {\n // if error is not cors related then fail\n if (typeof error === 'object' && typeof error.response !== 'undefined') {\n return false\n }\n // fail in NodeJS, since the error is not cors but any other network issue\n if (!Object.hasOwn(globalThis, 'Image')) return false\n // in case of cors, use image api to validate if given url is an actual image\n return new Promise((resolve) => {\n const img = new Image()\n img.onload = () => {\n resolve(true)\n }\n img.onerror = () => {\n resolve(false)\n }\n img.src = uri\n })\n }\n}\n\ntype GetGatewayErrorType = ErrorType\n\n/** @internal */\nexport function getGateway(custom: string | undefined, defaultGateway: string) {\n if (!custom) return defaultGateway\n if (custom.endsWith('/')) return custom.slice(0, -1)\n return custom\n}\n\nexport type ResolveAvatarUriErrorType =\n | GetGatewayErrorType\n | EnsAvatarUriResolutionErrorType\n | ErrorType\n\nexport function resolveAvatarUri({\n uri,\n gatewayUrls,\n}: {\n uri: string\n gatewayUrls?: AssetGatewayUrls | undefined\n}): UriItem {\n const isEncoded = base64Regex.test(uri)\n if (isEncoded) return { uri, isOnChain: true, isEncoded }\n\n const ipfsGateway = getGateway(gatewayUrls?.ipfs, 'https://ipfs.io')\n const arweaveGateway = getGateway(gatewayUrls?.arweave, 'https://arweave.net')\n\n const networkRegexMatch = uri.match(networkRegex)\n const {\n protocol,\n subpath,\n target,\n subtarget = '',\n } = networkRegexMatch?.groups || {}\n\n const isIPNS = protocol === 'ipns:/' || subpath === 'ipns/'\n const isIPFS =\n protocol === 'ipfs:/' || subpath === 'ipfs/' || ipfsHashRegex.test(uri)\n\n if (uri.startsWith('http') && !isIPNS && !isIPFS) {\n let replacedUri = uri\n if (gatewayUrls?.arweave)\n replacedUri = uri.replace(/https:\\/\\/arweave.net/g, gatewayUrls?.arweave)\n return { uri: replacedUri, isOnChain: false, isEncoded: false }\n }\n\n if ((isIPNS || isIPFS) && target) {\n return {\n uri: `${ipfsGateway}/${isIPNS ? 'ipns' : 'ipfs'}/${target}${subtarget}`,\n isOnChain: false,\n isEncoded: false,\n }\n }\n\n if (protocol === 'ar:/' && target) {\n return {\n uri: `${arweaveGateway}/${target}${subtarget || ''}`,\n isOnChain: false,\n isEncoded: false,\n }\n }\n\n let parsedUri = uri.replace(dataURIRegex, '')\n if (parsedUri.startsWith(' {\n try {\n const res = await fetch(uri).then((res) => res.json())\n const image = await parseAvatarUri({\n gatewayUrls,\n uri: getJsonImage(res),\n })\n return image\n } catch {\n throw new EnsAvatarUriResolutionError({ uri })\n }\n}\n\nexport type ParseAvatarUriErrorType =\n | ResolveAvatarUriErrorType\n | IsImageUriErrorType\n | EnsAvatarUriResolutionErrorType\n | ErrorType\n\nexport async function parseAvatarUri({\n gatewayUrls,\n uri,\n}: {\n gatewayUrls?: AssetGatewayUrls | undefined\n uri: string\n}): Promise {\n const { uri: resolvedURI, isOnChain } = resolveAvatarUri({ uri, gatewayUrls })\n if (isOnChain) return resolvedURI\n\n // check if resolvedURI is an image, if it is return the url\n const isImage = await isImageUri(resolvedURI)\n if (isImage) return resolvedURI\n\n throw new EnsAvatarUriResolutionError({ uri })\n}\n\ntype ParsedNft = {\n chainID: number\n namespace: string\n contractAddress: Address\n tokenID: string\n}\n\nexport type ParseNftUriErrorType = EnsAvatarInvalidNftUriErrorType | ErrorType\n\nexport function parseNftUri(uri_: string): ParsedNft {\n let uri = uri_\n // parse valid nft spec (CAIP-22/CAIP-29)\n // @see: https://github.com/ChainAgnostic/CAIPs/tree/master/CAIPs\n if (uri.startsWith('did:nft:')) {\n // convert DID to CAIP\n uri = uri.replace('did:nft:', '').replace(/_/g, '/')\n }\n\n const [reference, asset_namespace, tokenID] = uri.split('/')\n const [eip_namespace, chainID] = reference.split(':')\n const [erc_namespace, contractAddress] = asset_namespace.split(':')\n\n if (!eip_namespace || eip_namespace.toLowerCase() !== 'eip155')\n throw new EnsAvatarInvalidNftUriError({ reason: 'Only EIP-155 supported' })\n if (!chainID)\n throw new EnsAvatarInvalidNftUriError({ reason: 'Chain ID not found' })\n if (!contractAddress)\n throw new EnsAvatarInvalidNftUriError({\n reason: 'Contract address not found',\n })\n if (!tokenID)\n throw new EnsAvatarInvalidNftUriError({ reason: 'Token ID not found' })\n if (!erc_namespace)\n throw new EnsAvatarInvalidNftUriError({ reason: 'ERC namespace not found' })\n\n return {\n chainID: Number.parseInt(chainID, 10),\n namespace: erc_namespace.toLowerCase(),\n contractAddress: contractAddress as Address,\n tokenID,\n }\n}\n\nexport type GetNftTokenUriErrorType =\n | ReadContractErrorType\n | EnsAvatarUnsupportedNamespaceErrorType\n | ErrorType\n\nexport async function getNftTokenUri(\n client: Client,\n { nft }: { nft: ParsedNft },\n) {\n if (nft.namespace === 'erc721') {\n return readContract(client, {\n address: nft.contractAddress,\n abi: [\n {\n name: 'tokenURI',\n type: 'function',\n stateMutability: 'view',\n inputs: [{ name: 'tokenId', type: 'uint256' }],\n outputs: [{ name: '', type: 'string' }],\n },\n ],\n functionName: 'tokenURI',\n args: [BigInt(nft.tokenID)],\n })\n }\n if (nft.namespace === 'erc1155') {\n return readContract(client, {\n address: nft.contractAddress,\n abi: [\n {\n name: 'uri',\n type: 'function',\n stateMutability: 'view',\n inputs: [{ name: '_id', type: 'uint256' }],\n outputs: [{ name: '', type: 'string' }],\n },\n ],\n functionName: 'uri',\n args: [BigInt(nft.tokenID)],\n })\n }\n throw new EnsAvatarUnsupportedNamespaceError({ namespace: nft.namespace })\n}\n", "import type { Client } from '../../../clients/createClient.js'\nimport type { Transport } from '../../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../../errors/utils.js'\nimport type { Chain } from '../../../types/chain.js'\nimport type { AssetGatewayUrls } from '../../../types/ens.js'\n\nimport {\n type GetJsonImageErrorType,\n type GetMetadataAvatarUriErrorType,\n type GetNftTokenUriErrorType,\n getJsonImage,\n getMetadataAvatarUri,\n getNftTokenUri,\n type ParseAvatarUriErrorType,\n type ParseNftUriErrorType,\n parseAvatarUri,\n parseNftUri,\n type ResolveAvatarUriErrorType,\n resolveAvatarUri,\n} from './utils.js'\n\nexport type ParseAvatarRecordErrorType =\n | ParseNftAvatarUriErrorType\n | ParseAvatarUriErrorType\n | ErrorType\n\n/*\n * @description Parses an ENS avatar record.\n *\n * @example\n * parseAvatarRecord('eip155:1/erc1155:0xb32979486938aa9694bfc898f35dbed459f44424/10063')\n * 'https://ipfs.io/ipfs/QmSP4nq9fnN9dAiCj42ug9Wa79rqmQerZXZch82VqpiH7U/image.gif'\n *\n * @see https://docs.ens.domains/web/avatars\n *\n */\nexport async function parseAvatarRecord(\n client: Client,\n {\n gatewayUrls,\n record,\n }: {\n gatewayUrls?: AssetGatewayUrls | undefined\n record: string\n },\n): Promise {\n if (/eip155:/i.test(record))\n return parseNftAvatarUri(client, { gatewayUrls, record })\n return parseAvatarUri({ uri: record, gatewayUrls })\n}\n\ntype ParseNftAvatarUriErrorType =\n | ParseNftUriErrorType\n | GetNftTokenUriErrorType\n | ResolveAvatarUriErrorType\n | ParseAvatarUriErrorType\n | GetJsonImageErrorType\n | GetMetadataAvatarUriErrorType\n | ErrorType\n\nasync function parseNftAvatarUri(\n client: Client,\n {\n gatewayUrls,\n record,\n }: {\n gatewayUrls?: AssetGatewayUrls | undefined\n record: string\n },\n): Promise {\n // parse NFT URI into properties\n const nft = parseNftUri(record)\n // fetch tokenURI from the NFT contract\n const nftUri = await getNftTokenUri(client, { nft })\n // resolve the URI from the fetched tokenURI\n const {\n uri: resolvedNftUri,\n isOnChain,\n isEncoded,\n } = resolveAvatarUri({ uri: nftUri, gatewayUrls })\n\n // if the resolved URI is on chain, return the data\n if (\n isOnChain &&\n (resolvedNftUri.includes('data:application/json;base64,') ||\n resolvedNftUri.startsWith('{'))\n ) {\n const encodedJson = isEncoded\n ? // if it is encoded, decode it\n atob(resolvedNftUri.replace('data:application/json;base64,', ''))\n : // if it isn't encoded assume it is a JSON string, but it could be anything (it will error if it is)\n resolvedNftUri\n\n const decoded = JSON.parse(encodedJson)\n return parseAvatarUri({ uri: getJsonImage(decoded), gatewayUrls })\n }\n\n let uriTokenId = nft.tokenID\n if (nft.namespace === 'erc1155')\n uriTokenId = uriTokenId.replace('0x', '').padStart(64, '0')\n\n return getMetadataAvatarUri({\n gatewayUrls,\n uri: resolvedNftUri.replace(/(?:0x)?{id}/, uriTokenId),\n })\n}\n", "import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n textResolverAbi,\n universalResolverResolveAbi,\n} from '../../constants/abis.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Prettify } from '../../types/utils.js'\nimport {\n type DecodeFunctionResultErrorType,\n decodeFunctionResult,\n} from '../../utils/abi/decodeFunctionResult.js'\nimport {\n type EncodeFunctionDataErrorType,\n encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport {\n type GetChainContractAddressErrorType,\n getChainContractAddress,\n} from '../../utils/chain/getChainContractAddress.js'\nimport { type ToHexErrorType, toHex } from '../../utils/encoding/toHex.js'\nimport { isNullUniversalResolverError } from '../../utils/ens/errors.js'\nimport { localBatchGatewayUrl } from '../../utils/ens/localBatchGatewayRequest.js'\nimport { type NamehashErrorType, namehash } from '../../utils/ens/namehash.js'\nimport {\n type PacketToBytesErrorType,\n packetToBytes,\n} from '../../utils/ens/packetToBytes.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n type ReadContractErrorType,\n type ReadContractParameters,\n readContract,\n} from '../public/readContract.js'\n\nexport type GetEnsTextParameters = Prettify<\n Pick & {\n /** ENS name to get Text for. */\n name: string\n /** Universal Resolver gateway URLs to use for resolving CCIP-read requests. */\n gatewayUrls?: string[] | undefined\n /** Text record to retrieve. */\n key: string\n /** Whether or not to throw errors propagated from the ENS Universal Resolver Contract. */\n strict?: boolean | undefined\n /** Address of ENS Universal Resolver Contract. */\n universalResolverAddress?: Address | undefined\n }\n>\n\nexport type GetEnsTextReturnType = string | null\n\nexport type GetEnsTextErrorType =\n | GetChainContractAddressErrorType\n | ReadContractErrorType\n | ToHexErrorType\n | PacketToBytesErrorType\n | EncodeFunctionDataErrorType\n | NamehashErrorType\n | DecodeFunctionResultErrorType\n\n/**\n * Gets a text record for specified ENS name.\n *\n * - Docs: https://viem.sh/docs/ens/actions/getEnsResolver\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n *\n * Calls `resolve(bytes, bytes)` on ENS Universal Resolver Contract.\n *\n * Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `getEnsAddress`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n *\n * @param client - Client to use\n * @param parameters - {@link GetEnsTextParameters}\n * @returns Address for ENS resolver. {@link GetEnsTextReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getEnsText, normalize } from 'viem/ens'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const twitterRecord = await getEnsText(client, {\n * name: normalize('wevm.eth'),\n * key: 'com.twitter',\n * })\n * // 'wevm_dev'\n */\nexport async function getEnsText(\n client: Client,\n parameters: GetEnsTextParameters,\n): Promise {\n const { blockNumber, blockTag, key, name, gatewayUrls, strict } = parameters\n const { chain } = client\n\n const universalResolverAddress = (() => {\n if (parameters.universalResolverAddress)\n return parameters.universalResolverAddress\n if (!chain)\n throw new Error(\n 'client chain not configured. universalResolverAddress is required.',\n )\n return getChainContractAddress({\n blockNumber,\n chain,\n contract: 'ensUniversalResolver',\n })\n })()\n\n const tlds = chain?.ensTlds\n if (tlds && !tlds.some((tld) => name.endsWith(tld))) return null\n\n try {\n const readContractParameters = {\n address: universalResolverAddress,\n abi: universalResolverResolveAbi,\n args: [\n toHex(packetToBytes(name)),\n encodeFunctionData({\n abi: textResolverAbi,\n functionName: 'text',\n args: [namehash(name), key],\n }),\n gatewayUrls ?? [localBatchGatewayUrl],\n ],\n functionName: 'resolveWithGateways',\n blockNumber,\n blockTag,\n } as const\n\n const readContractAction = getAction(client, readContract, 'readContract')\n\n const res = await readContractAction(readContractParameters)\n\n if (res[0] === '0x') return null\n\n const record = decodeFunctionResult({\n abi: textResolverAbi,\n functionName: 'text',\n data: res[0],\n })\n\n return record === '' ? null : record\n } catch (err) {\n if (strict) throw err\n if (isNullUniversalResolverError(err)) return null\n throw err\n }\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { AssetGatewayUrls } from '../../types/ens.js'\nimport type { Prettify } from '../../types/utils.js'\nimport {\n type ParseAvatarRecordErrorType,\n parseAvatarRecord,\n} from '../../utils/ens/avatar/parseAvatarRecord.js'\nimport { getAction } from '../../utils/getAction.js'\n\nimport {\n type GetEnsTextErrorType,\n type GetEnsTextParameters,\n getEnsText,\n} from './getEnsText.js'\n\nexport type GetEnsAvatarParameters = Prettify<\n Omit & {\n /** Gateway urls to resolve IPFS and/or Arweave assets. */\n assetGatewayUrls?: AssetGatewayUrls | undefined\n }\n>\n\nexport type GetEnsAvatarReturnType = string | null\n\nexport type GetEnsAvatarErrorType =\n | GetEnsTextErrorType\n | ParseAvatarRecordErrorType\n | ErrorType\n\n/**\n * Gets the avatar of an ENS name.\n *\n * - Docs: https://viem.sh/docs/ens/actions/getEnsAvatar\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n *\n * Calls [`getEnsText`](https://viem.sh/docs/ens/actions/getEnsText) with `key` set to `'avatar'`.\n *\n * Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `getEnsAddress`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n *\n * @param client - Client to use\n * @param parameters - {@link GetEnsAvatarParameters}\n * @returns Avatar URI or `null` if not found. {@link GetEnsAvatarReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getEnsAvatar, normalize } from 'viem/ens'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const ensAvatar = await getEnsAvatar(client, {\n * name: normalize('wevm.eth'),\n * })\n * // 'https://ipfs.io/ipfs/Qma8mnp6xV3J2cRNf3mTth5C8nV11CAnceVinc3y8jSbio'\n */\nexport async function getEnsAvatar(\n client: Client,\n {\n blockNumber,\n blockTag,\n assetGatewayUrls,\n name,\n gatewayUrls,\n strict,\n universalResolverAddress,\n }: GetEnsAvatarParameters,\n): Promise {\n const record = await getAction(\n client,\n getEnsText,\n 'getEnsText',\n )({\n blockNumber,\n blockTag,\n key: 'avatar',\n name,\n universalResolverAddress,\n gatewayUrls,\n strict,\n })\n if (!record) return null\n try {\n return await parseAvatarRecord(client, {\n record,\n gatewayUrls: assetGatewayUrls,\n })\n } catch {\n return null\n }\n}\n", "import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { universalResolverReverseAbi } from '../../constants/abis.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Prettify } from '../../types/utils.js'\nimport {\n type GetChainContractAddressErrorType,\n getChainContractAddress,\n} from '../../utils/chain/getChainContractAddress.js'\nimport { isNullUniversalResolverError } from '../../utils/ens/errors.js'\nimport { localBatchGatewayUrl } from '../../utils/ens/localBatchGatewayRequest.js'\nimport type { PacketToBytesErrorType } from '../../utils/ens/packetToBytes.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n type ReadContractErrorType,\n type ReadContractParameters,\n readContract,\n} from '../public/readContract.js'\n\nexport type GetEnsNameParameters = Prettify<\n Pick & {\n /**\n * Address to get ENS name for.\n */\n address: Address\n /**\n * ENSIP-9 compliant coinType (chain) to get ENS name for.\n *\n * To get the `coinType` for a chain id, use the `toCoinType` function:\n * ```ts\n * import { toCoinType } from 'viem'\n * import { base } from 'viem/chains'\n *\n * const coinType = toCoinType(base.id)\n * ```\n *\n * @default 60n\n */\n coinType?: bigint | undefined\n /**\n * Universal Resolver gateway URLs to use for resolving CCIP-read requests.\n */\n gatewayUrls?: string[] | undefined\n /**\n * Whether or not to throw errors propagated from the ENS Universal Resolver Contract.\n */\n strict?: boolean | undefined\n /**\n * Address of ENS Universal Resolver Contract.\n */\n universalResolverAddress?: Address | undefined\n }\n>\n\nexport type GetEnsNameReturnType = string | null\n\nexport type GetEnsNameErrorType =\n | GetChainContractAddressErrorType\n | ReadContractErrorType\n | PacketToBytesErrorType\n | ErrorType\n\n/**\n * Gets primary name for specified address.\n *\n * - Docs: https://viem.sh/docs/ens/actions/getEnsName\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n *\n * Calls `reverse(bytes)` on ENS Universal Resolver Contract to \"reverse resolve\" the address to the primary ENS name.\n *\n * @param client - Client to use\n * @param parameters - {@link GetEnsNameParameters}\n * @returns Name or `null` if not found. {@link GetEnsNameReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getEnsName } from 'viem/ens'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const ensName = await getEnsName(client, {\n * address: '0xd2135CfB216b74109775236E36d4b433F1DF507B',\n * })\n * // 'wevm.eth'\n */\nexport async function getEnsName(\n client: Client,\n parameters: GetEnsNameParameters,\n): Promise {\n const {\n address,\n blockNumber,\n blockTag,\n coinType = 60n,\n gatewayUrls,\n strict,\n } = parameters\n const { chain } = client\n\n const universalResolverAddress = (() => {\n if (parameters.universalResolverAddress)\n return parameters.universalResolverAddress\n if (!chain)\n throw new Error(\n 'client chain not configured. universalResolverAddress is required.',\n )\n return getChainContractAddress({\n blockNumber,\n chain,\n contract: 'ensUniversalResolver',\n })\n })()\n\n try {\n const readContractParameters = {\n address: universalResolverAddress,\n abi: universalResolverReverseAbi,\n args: [address, coinType, gatewayUrls ?? [localBatchGatewayUrl]],\n functionName: 'reverseWithGateways',\n blockNumber,\n blockTag,\n } as const\n\n const readContractAction = getAction(client, readContract, 'readContract')\n\n const [name] = await readContractAction(readContractParameters)\n\n return name || null\n } catch (err) {\n if (strict) throw err\n if (isNullUniversalResolverError(err)) return null\n throw err\n }\n}\n", "import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Prettify } from '../../types/utils.js'\nimport {\n type GetChainContractAddressErrorType,\n getChainContractAddress,\n} from '../../utils/chain/getChainContractAddress.js'\nimport { type ToHexErrorType, toHex } from '../../utils/encoding/toHex.js'\nimport {\n type PacketToBytesErrorType,\n packetToBytes,\n} from '../../utils/ens/packetToBytes.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n type ReadContractParameters,\n readContract,\n} from '../public/readContract.js'\n\nexport type GetEnsResolverParameters = Prettify<\n Pick & {\n /** Name to get the address for. */\n name: string\n /** Address of ENS Universal Resolver Contract. */\n universalResolverAddress?: Address | undefined\n }\n>\n\nexport type GetEnsResolverReturnType = Address\n\nexport type GetEnsResolverErrorType =\n | GetChainContractAddressErrorType\n | ToHexErrorType\n | PacketToBytesErrorType\n | ErrorType\n\n/**\n * Gets resolver for ENS name.\n *\n * - Docs: https://viem.sh/docs/ens/actions/getEnsResolver\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n *\n * Calls `findResolver(bytes)` on ENS Universal Resolver Contract to retrieve the resolver of an ENS name.\n *\n * Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `getEnsAddress`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n *\n * @param client - Client to use\n * @param parameters - {@link GetEnsResolverParameters}\n * @returns Address for ENS resolver. {@link GetEnsResolverReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getEnsResolver, normalize } from 'viem/ens'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const resolverAddress = await getEnsResolver(client, {\n * name: normalize('wevm.eth'),\n * })\n * // '0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41'\n */\nexport async function getEnsResolver(\n client: Client,\n parameters: GetEnsResolverParameters,\n): Promise {\n const { blockNumber, blockTag, name } = parameters\n const { chain } = client\n\n const universalResolverAddress = (() => {\n if (parameters.universalResolverAddress)\n return parameters.universalResolverAddress\n if (!chain)\n throw new Error(\n 'client chain not configured. universalResolverAddress is required.',\n )\n return getChainContractAddress({\n blockNumber,\n chain,\n contract: 'ensUniversalResolver',\n })\n })()\n\n const tlds = chain?.ensTlds\n if (tlds && !tlds.some((tld) => name.endsWith(tld)))\n throw new Error(\n `${name} is not a valid ENS TLD (${tlds?.join(', ')}) for chain \"${chain.name}\" (id: ${chain.id}).`,\n )\n\n const [resolverAddress] = await getAction(\n client,\n readContract,\n 'readContract',\n )({\n address: universalResolverAddress,\n abi: [\n {\n inputs: [{ type: 'bytes' }],\n name: 'findResolver',\n outputs: [\n { type: 'address' },\n { type: 'bytes32' },\n { type: 'uint256' },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n ],\n functionName: 'findResolver',\n args: [toHex(packetToBytes(name))],\n blockNumber,\n blockTag,\n })\n return resolverAddress\n}\n", "import type { Abi, AbiEvent, Address } from 'abitype'\n\nimport {\n type GetEnsAddressParameters,\n type GetEnsAddressReturnType,\n getEnsAddress,\n} from '../../actions/ens/getEnsAddress.js'\nimport {\n type GetEnsAvatarParameters,\n type GetEnsAvatarReturnType,\n getEnsAvatar,\n} from '../../actions/ens/getEnsAvatar.js'\nimport {\n type GetEnsNameParameters,\n type GetEnsNameReturnType,\n getEnsName,\n} from '../../actions/ens/getEnsName.js'\nimport {\n type GetEnsResolverParameters,\n type GetEnsResolverReturnType,\n getEnsResolver,\n} from '../../actions/ens/getEnsResolver.js'\nimport {\n type GetEnsTextParameters,\n type GetEnsTextReturnType,\n getEnsText,\n} from '../../actions/ens/getEnsText.js'\nimport {\n type CallParameters,\n type CallReturnType,\n call,\n} from '../../actions/public/call.js'\nimport {\n type CreateAccessListParameters,\n type CreateAccessListReturnType,\n createAccessList,\n} from '../../actions/public/createAccessList.js'\nimport {\n type CreateBlockFilterReturnType,\n createBlockFilter,\n} from '../../actions/public/createBlockFilter.js'\nimport {\n type CreateContractEventFilterParameters,\n type CreateContractEventFilterReturnType,\n createContractEventFilter,\n} from '../../actions/public/createContractEventFilter.js'\nimport {\n type CreateEventFilterParameters,\n type CreateEventFilterReturnType,\n createEventFilter,\n} from '../../actions/public/createEventFilter.js'\nimport {\n type CreatePendingTransactionFilterReturnType,\n createPendingTransactionFilter,\n} from '../../actions/public/createPendingTransactionFilter.js'\nimport {\n type EstimateContractGasParameters,\n type EstimateContractGasReturnType,\n estimateContractGas,\n} from '../../actions/public/estimateContractGas.js'\nimport {\n type EstimateFeesPerGasParameters,\n type EstimateFeesPerGasReturnType,\n estimateFeesPerGas,\n} from '../../actions/public/estimateFeesPerGas.js'\nimport {\n type EstimateGasParameters,\n type EstimateGasReturnType,\n estimateGas,\n} from '../../actions/public/estimateGas.js'\nimport {\n type EstimateMaxPriorityFeePerGasParameters,\n type EstimateMaxPriorityFeePerGasReturnType,\n estimateMaxPriorityFeePerGas,\n} from '../../actions/public/estimateMaxPriorityFeePerGas.js'\nimport {\n type FillTransactionParameters,\n type FillTransactionReturnType,\n fillTransaction,\n} from '../../actions/public/fillTransaction.js'\nimport {\n type GetBalanceParameters,\n type GetBalanceReturnType,\n getBalance,\n} from '../../actions/public/getBalance.js'\nimport {\n type GetBlobBaseFeeReturnType,\n getBlobBaseFee,\n} from '../../actions/public/getBlobBaseFee.js'\nimport {\n type GetBlockParameters,\n type GetBlockReturnType,\n getBlock,\n} from '../../actions/public/getBlock.js'\nimport {\n type GetBlockNumberParameters,\n type GetBlockNumberReturnType,\n getBlockNumber,\n} from '../../actions/public/getBlockNumber.js'\nimport {\n type GetBlockTransactionCountParameters,\n type GetBlockTransactionCountReturnType,\n getBlockTransactionCount,\n} from '../../actions/public/getBlockTransactionCount.js'\nimport {\n type GetChainIdReturnType,\n getChainId,\n} from '../../actions/public/getChainId.js'\nimport {\n type GetCodeParameters,\n type GetCodeReturnType,\n getCode,\n} from '../../actions/public/getCode.js'\nimport {\n type GetContractEventsParameters,\n type GetContractEventsReturnType,\n getContractEvents,\n} from '../../actions/public/getContractEvents.js'\nimport {\n type GetDelegationParameters,\n type GetDelegationReturnType,\n getDelegation,\n} from '../../actions/public/getDelegation.js'\nimport {\n type GetEip712DomainParameters,\n type GetEip712DomainReturnType,\n getEip712Domain,\n} from '../../actions/public/getEip712Domain.js'\nimport {\n type GetFeeHistoryParameters,\n type GetFeeHistoryReturnType,\n getFeeHistory,\n} from '../../actions/public/getFeeHistory.js'\nimport {\n type GetFilterChangesParameters,\n type GetFilterChangesReturnType,\n getFilterChanges,\n} from '../../actions/public/getFilterChanges.js'\nimport {\n type GetFilterLogsParameters,\n type GetFilterLogsReturnType,\n getFilterLogs,\n} from '../../actions/public/getFilterLogs.js'\nimport {\n type GetGasPriceReturnType,\n getGasPrice,\n} from '../../actions/public/getGasPrice.js'\nimport {\n type GetLogsParameters,\n type GetLogsReturnType,\n getLogs,\n} from '../../actions/public/getLogs.js'\nimport {\n type GetProofParameters,\n type GetProofReturnType,\n getProof,\n} from '../../actions/public/getProof.js'\nimport {\n type GetStorageAtParameters,\n type GetStorageAtReturnType,\n getStorageAt,\n} from '../../actions/public/getStorageAt.js'\nimport {\n type GetTransactionParameters,\n type GetTransactionReturnType,\n getTransaction,\n} from '../../actions/public/getTransaction.js'\nimport {\n type GetTransactionConfirmationsParameters,\n type GetTransactionConfirmationsReturnType,\n getTransactionConfirmations,\n} from '../../actions/public/getTransactionConfirmations.js'\nimport {\n type GetTransactionCountParameters,\n type GetTransactionCountReturnType,\n getTransactionCount,\n} from '../../actions/public/getTransactionCount.js'\nimport {\n type GetTransactionReceiptParameters,\n type GetTransactionReceiptReturnType,\n getTransactionReceipt,\n} from '../../actions/public/getTransactionReceipt.js'\nimport {\n type MulticallParameters,\n type MulticallReturnType,\n multicall,\n} from '../../actions/public/multicall.js'\nimport {\n type ReadContractParameters,\n type ReadContractReturnType,\n readContract,\n} from '../../actions/public/readContract.js'\nimport {\n type SimulateBlocksParameters,\n type SimulateBlocksReturnType,\n simulateBlocks,\n} from '../../actions/public/simulateBlocks.js'\nimport {\n type SimulateCallsParameters,\n type SimulateCallsReturnType,\n simulateCalls,\n} from '../../actions/public/simulateCalls.js'\nimport {\n type SimulateContractParameters,\n type SimulateContractReturnType,\n simulateContract,\n} from '../../actions/public/simulateContract.js'\nimport {\n type UninstallFilterParameters,\n type UninstallFilterReturnType,\n uninstallFilter,\n} from '../../actions/public/uninstallFilter.js'\nimport {\n type VerifyHashParameters,\n type VerifyHashReturnType,\n verifyHash,\n} from '../../actions/public/verifyHash.js'\nimport {\n type VerifyMessageParameters,\n type VerifyMessageReturnType,\n verifyMessage,\n} from '../../actions/public/verifyMessage.js'\nimport {\n type VerifyTypedDataParameters,\n type VerifyTypedDataReturnType,\n verifyTypedData,\n} from '../../actions/public/verifyTypedData.js'\nimport {\n type WaitForTransactionReceiptParameters,\n type WaitForTransactionReceiptReturnType,\n waitForTransactionReceipt,\n} from '../../actions/public/waitForTransactionReceipt.js'\nimport {\n type WatchBlockNumberParameters,\n type WatchBlockNumberReturnType,\n watchBlockNumber,\n} from '../../actions/public/watchBlockNumber.js'\nimport {\n type WatchBlocksParameters,\n type WatchBlocksReturnType,\n watchBlocks,\n} from '../../actions/public/watchBlocks.js'\nimport {\n type WatchContractEventParameters,\n type WatchContractEventReturnType,\n watchContractEvent,\n} from '../../actions/public/watchContractEvent.js'\nimport {\n type WatchEventParameters,\n type WatchEventReturnType,\n watchEvent,\n} from '../../actions/public/watchEvent.js'\nimport {\n type WatchPendingTransactionsParameters,\n type WatchPendingTransactionsReturnType,\n watchPendingTransactions,\n} from '../../actions/public/watchPendingTransactions.js'\nimport {\n type VerifySiweMessageParameters,\n type VerifySiweMessageReturnType,\n verifySiweMessage,\n} from '../../actions/siwe/verifySiweMessage.js'\nimport {\n type PrepareTransactionRequestParameters,\n type PrepareTransactionRequestRequest,\n type PrepareTransactionRequestReturnType,\n prepareTransactionRequest,\n} from '../../actions/wallet/prepareTransactionRequest.js'\nimport {\n type SendRawTransactionParameters,\n type SendRawTransactionReturnType,\n sendRawTransaction,\n} from '../../actions/wallet/sendRawTransaction.js'\nimport {\n type SendRawTransactionSyncParameters,\n type SendRawTransactionSyncReturnType,\n sendRawTransactionSync,\n} from '../../actions/wallet/sendRawTransactionSync.js'\nimport type { Account } from '../../types/account.js'\nimport type { BlockNumber, BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n ContractEventName,\n ContractFunctionArgs,\n ContractFunctionName,\n MaybeAbiEventName,\n MaybeExtractEventArgsFromAbi,\n} from '../../types/contract.js'\nimport type { FeeValuesType } from '../../types/fee.js'\nimport type { FilterType } from '../../types/filter.js'\nimport type { Client } from '../createClient.js'\nimport type { Transport } from '../transports/createTransport.js'\n\nexport type PublicActions<\n transport extends Transport = Transport,\n chain extends Chain | undefined = Chain | undefined,\n account extends Account | undefined = Account | undefined,\n> = {\n /**\n * Executes a new message call immediately without submitting a transaction to the network.\n *\n * - Docs: https://viem.sh/docs/actions/public/call\n * - JSON-RPC Methods: [`eth_call`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_call)\n *\n * @param args - {@link CallParameters}\n * @returns The call data. {@link CallReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const data = await client.call({\n * account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',\n * data: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * })\n */\n call: (parameters: CallParameters) => Promise\n /**\n * Creates an EIP-2930 access list that you can include in a transaction.\n *\n * - Docs: https://viem.sh/docs/actions/public/createAccessList\n * - JSON-RPC Methods: `eth_createAccessList`\n *\n * @param args - {@link CreateAccessListParameters}\n * @returns The call data. {@link CreateAccessListReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n *\n * const data = await client.createAccessList({\n * data: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * })\n */\n createAccessList: (\n parameters: CreateAccessListParameters,\n ) => Promise\n /**\n * Creates a Filter to listen for new block hashes that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges).\n *\n * - Docs: https://viem.sh/docs/actions/public/createBlockFilter\n * - JSON-RPC Methods: [`eth_newBlockFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newBlockFilter)\n *\n * @returns Filter. {@link CreateBlockFilterReturnType}\n *\n * @example\n * import { createPublicClient, createBlockFilter, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await createBlockFilter(client)\n * // { id: \"0x345a6572337856574a76364e457a4366\", type: 'block' }\n */\n createBlockFilter: () => Promise\n /**\n * Creates a Filter to retrieve event logs that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges) or [`getFilterLogs`](https://viem.sh/docs/actions/public/getFilterLogs).\n *\n * - Docs: https://viem.sh/docs/contract/createContractEventFilter\n *\n * @param args - {@link CreateContractEventFilterParameters}\n * @returns [`Filter`](https://viem.sh/docs/glossary/types#filter). {@link CreateContractEventFilterReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await client.createContractEventFilter({\n * abi: parseAbi(['event Transfer(address indexed, address indexed, uint256)']),\n * })\n */\n createContractEventFilter: <\n const abi extends Abi | readonly unknown[],\n eventName extends ContractEventName | undefined,\n args extends MaybeExtractEventArgsFromAbi | undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n >(\n args: CreateContractEventFilterParameters<\n abi,\n eventName,\n args,\n strict,\n fromBlock,\n toBlock\n >,\n ) => Promise<\n CreateContractEventFilterReturnType<\n abi,\n eventName,\n args,\n strict,\n fromBlock,\n toBlock\n >\n >\n /**\n * Creates a [`Filter`](https://viem.sh/docs/glossary/types#filter) to listen for new events that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges).\n *\n * - Docs: https://viem.sh/docs/actions/public/createEventFilter\n * - JSON-RPC Methods: [`eth_newFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newfilter)\n *\n * @param args - {@link CreateEventFilterParameters}\n * @returns [`Filter`](https://viem.sh/docs/glossary/types#filter). {@link CreateEventFilterReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await client.createEventFilter({\n * address: '0xfba3912ca04dd458c843e2ee08967fc04f3579c2',\n * })\n */\n createEventFilter: <\n const abiEvent extends AbiEvent | undefined = undefined,\n const abiEvents extends\n | readonly AbiEvent[]\n | readonly unknown[]\n | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n _EventName extends string | undefined = MaybeAbiEventName,\n _Args extends\n | MaybeExtractEventArgsFromAbi\n | undefined = undefined,\n >(\n args?:\n | CreateEventFilterParameters<\n abiEvent,\n abiEvents,\n strict,\n fromBlock,\n toBlock,\n _EventName,\n _Args\n >\n | undefined,\n ) => Promise<\n CreateEventFilterReturnType<\n abiEvent,\n abiEvents,\n strict,\n fromBlock,\n toBlock,\n _EventName,\n _Args\n >\n >\n /**\n * Creates a Filter to listen for new pending transaction hashes that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges).\n *\n * - Docs: https://viem.sh/docs/actions/public/createPendingTransactionFilter\n * - JSON-RPC Methods: [`eth_newPendingTransactionFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newpendingtransactionfilter)\n *\n * @returns [`Filter`](https://viem.sh/docs/glossary/types#filter). {@link CreateBlockFilterReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await client.createPendingTransactionFilter()\n * // { id: \"0x345a6572337856574a76364e457a4366\", type: 'transaction' }\n */\n createPendingTransactionFilter: () => Promise\n /**\n * Estimates the gas required to successfully execute a contract write function call.\n *\n * - Docs: https://viem.sh/docs/contract/estimateContractGas\n *\n * @remarks\n * Internally, uses a [Public Client](https://viem.sh/docs/clients/public) to call the [`estimateGas` action](https://viem.sh/docs/actions/public/estimateGas) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n *\n * @param args - {@link EstimateContractGasParameters}\n * @returns The gas estimate (in wei). {@link EstimateContractGasReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const gas = await client.estimateContractGas({\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi: parseAbi(['function mint() public']),\n * functionName: 'mint',\n * account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',\n * })\n */\n estimateContractGas: <\n chain extends Chain | undefined,\n const abi extends Abi | readonly unknown[],\n functionName extends ContractFunctionName,\n args extends ContractFunctionArgs<\n abi,\n 'nonpayable' | 'payable',\n functionName\n >,\n >(\n args: EstimateContractGasParameters,\n ) => Promise\n /**\n * Estimates the gas necessary to complete a transaction without submitting it to the network.\n *\n * - Docs: https://viem.sh/docs/actions/public/estimateGas\n * - JSON-RPC Methods: [`eth_estimateGas`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_estimategas)\n *\n * @param args - {@link EstimateGasParameters}\n * @returns The gas estimate (in wei). {@link EstimateGasReturnType}\n *\n * @example\n * import { createPublicClient, http, parseEther } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const gasEstimate = await client.estimateGas({\n * account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * value: parseEther('1'),\n * })\n */\n estimateGas: (\n args: EstimateGasParameters,\n ) => Promise\n /**\n * Fills a transaction request with the necessary fields to be signed over.\n *\n * - Docs: https://viem.sh/docs/actions/public/fillTransaction\n *\n * @param client - Client to use\n * @param parameters - {@link FillTransactionParameters}\n * @returns The filled transaction. {@link FillTransactionReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const result = await client.fillTransaction({\n * account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * value: parseEther('1'),\n * })\n */\n fillTransaction: <\n chainOverride extends Chain | undefined = undefined,\n accountOverride extends Account | Address | undefined = undefined,\n >(\n args: FillTransactionParameters<\n chain,\n account,\n chainOverride,\n accountOverride\n >,\n ) => Promise>\n /**\n * Returns the balance of an address in wei.\n *\n * - Docs: https://viem.sh/docs/actions/public/getBalance\n * - JSON-RPC Methods: [`eth_getBalance`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getbalance)\n *\n * @remarks\n * You can convert the balance to ether units with [`formatEther`](https://viem.sh/docs/utilities/formatEther).\n *\n * ```ts\n * const balance = await getBalance(client, {\n * address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * blockTag: 'safe'\n * })\n * const balanceAsEther = formatEther(balance)\n * // \"6.942\"\n * ```\n *\n * @param args - {@link GetBalanceParameters}\n * @returns The balance of the address in wei. {@link GetBalanceReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const balance = await client.getBalance({\n * address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n * // 10000000000000000000000n (wei)\n */\n getBalance: (args: GetBalanceParameters) => Promise\n /**\n * Returns the base fee per blob gas in wei.\n *\n * - Docs: https://viem.sh/docs/actions/public/getBlobBaseFee\n * - JSON-RPC Methods: [`eth_blobBaseFee`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_blobBaseFee)\n *\n * @param client - Client to use\n * @returns The blob base fee (in wei). {@link GetBlobBaseFeeReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getBlobBaseFee } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const blobBaseFee = await client.getBlobBaseFee()\n */\n getBlobBaseFee: () => Promise\n /**\n * Returns information about a block at a block number, hash, or tag.\n *\n * - Docs: https://viem.sh/docs/actions/public/getBlock\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/blocks_fetching-blocks\n * - JSON-RPC Methods:\n * - Calls [`eth_getBlockByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblockbynumber) for `blockNumber` & `blockTag`.\n * - Calls [`eth_getBlockByHash`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblockbyhash) for `blockHash`.\n *\n * @param args - {@link GetBlockParameters}\n * @returns Information about the block. {@link GetBlockReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const block = await client.getBlock()\n */\n getBlock: <\n includeTransactions extends boolean = false,\n blockTag extends BlockTag = 'latest',\n >(\n args?: GetBlockParameters | undefined,\n ) => Promise>\n /**\n * Returns the number of the most recent block seen.\n *\n * - Docs: https://viem.sh/docs/actions/public/getBlockNumber\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/blocks_fetching-blocks\n * - JSON-RPC Methods: [`eth_blockNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_blocknumber)\n *\n * @param args - {@link GetBlockNumberParameters}\n * @returns The number of the block. {@link GetBlockNumberReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const blockNumber = await client.getBlockNumber()\n * // 69420n\n */\n getBlockNumber: (\n args?: GetBlockNumberParameters | undefined,\n ) => Promise\n /**\n * Returns the number of Transactions at a block number, hash, or tag.\n *\n * - Docs: https://viem.sh/docs/actions/public/getBlockTransactionCount\n * - JSON-RPC Methods:\n * - Calls [`eth_getBlockTransactionCountByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblocktransactioncountbynumber) for `blockNumber` & `blockTag`.\n * - Calls [`eth_getBlockTransactionCountByHash`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblocktransactioncountbyhash) for `blockHash`.\n *\n * @param args - {@link GetBlockTransactionCountParameters}\n * @returns The block transaction count. {@link GetBlockTransactionCountReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const count = await client.getBlockTransactionCount()\n */\n getBlockTransactionCount: (\n args?: GetBlockTransactionCountParameters | undefined,\n ) => Promise\n /** @deprecated Use `getCode` instead. */\n getBytecode: (args: GetCodeParameters) => Promise\n /**\n * Returns the chain ID associated with the current network.\n *\n * - Docs: https://viem.sh/docs/actions/public/getChainId\n * - JSON-RPC Methods: [`eth_chainId`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_chainid)\n *\n * @returns The current chain ID. {@link GetChainIdReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const chainId = await client.getChainId()\n * // 1\n */\n getChainId: () => Promise\n /**\n * Retrieves the bytecode at an address.\n *\n * - Docs: https://viem.sh/docs/contract/getCode\n * - JSON-RPC Methods: [`eth_getCode`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getcode)\n *\n * @param args - {@link GetBytecodeParameters}\n * @returns The contract's bytecode. {@link GetBytecodeReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const code = await client.getCode({\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * })\n */\n getCode: (args: GetCodeParameters) => Promise\n /**\n * Returns a list of event logs emitted by a contract.\n *\n * - Docs: https://viem.sh/docs/actions/public/getContractEvents\n * - JSON-RPC Methods: [`eth_getLogs`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getlogs)\n *\n * @param client - Client to use\n * @param parameters - {@link GetContractEventsParameters}\n * @returns A list of event logs. {@link GetContractEventsReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { wagmiAbi } from './abi'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const logs = await client.getContractEvents(client, {\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi: wagmiAbi,\n * eventName: 'Transfer'\n * })\n */\n getContractEvents: <\n const abi extends Abi | readonly unknown[],\n eventName extends ContractEventName | undefined = undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n >(\n args: GetContractEventsParameters<\n abi,\n eventName,\n strict,\n fromBlock,\n toBlock\n >,\n ) => Promise<\n GetContractEventsReturnType\n >\n /**\n * Returns the address that an account has delegated to via EIP-7702.\n *\n * - Docs: https://viem.sh/docs/actions/public/getDelegation\n *\n * @param args - {@link GetDelegationParameters}\n * @returns The delegated address, or undefined if not delegated. {@link GetDelegationReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const delegation = await client.getDelegation({\n * address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n */\n getDelegation: (\n args: GetDelegationParameters,\n ) => Promise\n /**\n * Reads the EIP-712 domain from a contract, based on the ERC-5267 specification.\n *\n * @param client - A {@link Client} instance.\n * @param parameters - The parameters of the action. {@link GetEip712DomainParameters}\n * @returns The EIP-712 domain, fields, and extensions. {@link GetEip712DomainReturnType}\n *\n * @example\n * ```ts\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n *\n * const domain = await client.getEip712Domain({\n * address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n * })\n * // {\n * // domain: {\n * // name: 'ExampleContract',\n * // version: '1',\n * // chainId: 1,\n * // verifyingContract: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n * // },\n * // fields: '0x0f',\n * // extensions: [],\n * // }\n * ```\n */\n getEip712Domain: (\n args: GetEip712DomainParameters,\n ) => Promise\n /**\n * Gets address for ENS name.\n *\n * - Docs: https://viem.sh/docs/ens/actions/getEnsAddress\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n *\n * @remarks\n * Calls `resolve(bytes, bytes)` on ENS Universal Resolver Contract.\n *\n * Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `getEnsAddress`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n *\n * @param args - {@link GetEnsAddressParameters}\n * @returns Address for ENS name or `null` if not found. {@link GetEnsAddressReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { normalize } from 'viem/ens'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const ensAddress = await client.getEnsAddress({\n * name: normalize('wevm.eth'),\n * })\n * // '0xd2135CfB216b74109775236E36d4b433F1DF507B'\n */\n getEnsAddress: (\n args: GetEnsAddressParameters,\n ) => Promise\n /**\n * Gets the avatar of an ENS name.\n *\n * - Docs: https://viem.sh/docs/ens/actions/getEnsAvatar\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n *\n * @remarks\n * Calls [`getEnsText`](https://viem.sh/docs/ens/actions/getEnsText) with `key` set to `'avatar'`.\n *\n * Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `getEnsAddress`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n *\n * @param args - {@link GetEnsAvatarParameters}\n * @returns Avatar URI or `null` if not found. {@link GetEnsAvatarReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { normalize } from 'viem/ens'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const ensAvatar = await client.getEnsAvatar({\n * name: normalize('wevm.eth'),\n * })\n * // 'https://ipfs.io/ipfs/Qma8mnp6xV3J2cRNf3mTth5C8nV11CAnceVinc3y8jSbio'\n */\n getEnsAvatar: (\n args: GetEnsAvatarParameters,\n ) => Promise\n /**\n * Gets primary name for specified address.\n *\n * - Docs: https://viem.sh/docs/ens/actions/getEnsName\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n *\n * @remarks\n * Calls `reverse(bytes)` on ENS Universal Resolver Contract to \"reverse resolve\" the address to the primary ENS name.\n *\n * @param args - {@link GetEnsNameParameters}\n * @returns Name or `null` if not found. {@link GetEnsNameReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const ensName = await client.getEnsName({\n * address: '0xd2135CfB216b74109775236E36d4b433F1DF507B',\n * })\n * // 'wevm.eth'\n */\n getEnsName: (args: GetEnsNameParameters) => Promise\n /**\n * Gets resolver for ENS name.\n *\n * - Docs: https://viem.sh/docs/ens/actions/getEnsResolver\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n *\n * @remarks\n * Calls `findResolver(bytes)` on ENS Universal Resolver Contract to retrieve the resolver of an ENS name.\n *\n * Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `getEnsAddress`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n *\n * @param args - {@link GetEnsResolverParameters}\n * @returns Address for ENS resolver. {@link GetEnsResolverReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { normalize } from 'viem/ens'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const resolverAddress = await client.getEnsResolver({\n * name: normalize('wevm.eth'),\n * })\n * // '0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41'\n */\n getEnsResolver: (\n args: GetEnsResolverParameters,\n ) => Promise\n /**\n * Gets a text record for specified ENS name.\n *\n * - Docs: https://viem.sh/docs/ens/actions/getEnsResolver\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n *\n * @remarks\n * Calls `resolve(bytes, bytes)` on ENS Universal Resolver Contract.\n *\n * Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `getEnsAddress`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n *\n * @param args - {@link GetEnsTextParameters}\n * @returns Address for ENS resolver. {@link GetEnsTextReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { normalize } from 'viem/ens'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const twitterRecord = await client.getEnsText({\n * name: normalize('wevm.eth'),\n * key: 'com.twitter',\n * })\n * // 'wevm_dev'\n */\n getEnsText: (args: GetEnsTextParameters) => Promise\n /**\n * Returns a collection of historical gas information.\n *\n * - Docs: https://viem.sh/docs/actions/public/getFeeHistory\n * - JSON-RPC Methods: [`eth_feeHistory`](https://docs.alchemy.com/reference/eth-feehistory)\n *\n * @param args - {@link GetFeeHistoryParameters}\n * @returns The gas estimate (in wei). {@link GetFeeHistoryReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const feeHistory = await client.getFeeHistory({\n * blockCount: 4,\n * rewardPercentiles: [25, 75],\n * })\n */\n getFeeHistory: (\n args: GetFeeHistoryParameters,\n ) => Promise\n /**\n * Returns an estimate for the fees per gas for a transaction to be included\n * in the next block.\n *\n * - Docs: https://viem.sh/docs/actions/public/estimateFeesPerGas\n *\n * @param client - Client to use\n * @param parameters - {@link EstimateFeesPerGasParameters}\n * @returns An estimate (in wei) for the fees per gas. {@link EstimateFeesPerGasReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const maxPriorityFeePerGas = await client.estimateFeesPerGas()\n * // { maxFeePerGas: ..., maxPriorityFeePerGas: ... }\n */\n estimateFeesPerGas: <\n chainOverride extends Chain | undefined = undefined,\n type extends FeeValuesType = 'eip1559',\n >(\n args?: EstimateFeesPerGasParameters | undefined,\n ) => Promise>\n /**\n * Returns a list of logs or hashes based on a [Filter](/docs/glossary/terms#filter) since the last time it was called.\n *\n * - Docs: https://viem.sh/docs/actions/public/getFilterChanges\n * - JSON-RPC Methods: [`eth_getFilterChanges`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getfilterchanges)\n *\n * @remarks\n * A Filter can be created from the following actions:\n *\n * - [`createBlockFilter`](https://viem.sh/docs/actions/public/createBlockFilter)\n * - [`createContractEventFilter`](https://viem.sh/docs/contract/createContractEventFilter)\n * - [`createEventFilter`](https://viem.sh/docs/actions/public/createEventFilter)\n * - [`createPendingTransactionFilter`](https://viem.sh/docs/actions/public/createPendingTransactionFilter)\n *\n * Depending on the type of filter, the return value will be different:\n *\n * - If the filter was created with `createContractEventFilter` or `createEventFilter`, it returns a list of logs.\n * - If the filter was created with `createPendingTransactionFilter`, it returns a list of transaction hashes.\n * - If the filter was created with `createBlockFilter`, it returns a list of block hashes.\n *\n * @param args - {@link GetFilterChangesParameters}\n * @returns Logs or hashes. {@link GetFilterChangesReturnType}\n *\n * @example\n * // Blocks\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await client.createBlockFilter()\n * const hashes = await client.getFilterChanges({ filter })\n *\n * @example\n * // Contract Events\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await client.createContractEventFilter({\n * address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',\n * abi: parseAbi(['event Transfer(address indexed, address indexed, uint256)']),\n * eventName: 'Transfer',\n * })\n * const logs = await client.getFilterChanges({ filter })\n *\n * @example\n * // Raw Events\n * import { createPublicClient, http, parseAbiItem } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await client.createEventFilter({\n * address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',\n * event: parseAbiItem('event Transfer(address indexed, address indexed, uint256)'),\n * })\n * const logs = await client.getFilterChanges({ filter })\n *\n * @example\n * // Transactions\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await client.createPendingTransactionFilter()\n * const hashes = await client.getFilterChanges({ filter })\n */\n getFilterChanges: <\n filterType extends FilterType,\n const abi extends Abi | readonly unknown[] | undefined,\n eventName extends string | undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n >(\n args: GetFilterChangesParameters<\n filterType,\n abi,\n eventName,\n strict,\n fromBlock,\n toBlock\n >,\n ) => Promise<\n GetFilterChangesReturnType<\n filterType,\n abi,\n eventName,\n strict,\n fromBlock,\n toBlock\n >\n >\n /**\n * Returns a list of event logs since the filter was created.\n *\n * - Docs: https://viem.sh/docs/actions/public/getFilterLogs\n * - JSON-RPC Methods: [`eth_getFilterLogs`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getfilterlogs)\n *\n * @remarks\n * `getFilterLogs` is only compatible with **event filters**.\n *\n * @param args - {@link GetFilterLogsParameters}\n * @returns A list of event logs. {@link GetFilterLogsReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbiItem } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await client.createEventFilter({\n * address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',\n * event: parseAbiItem('event Transfer(address indexed, address indexed, uint256)'),\n * })\n * const logs = await client.getFilterLogs({ filter })\n */\n getFilterLogs: <\n const abi extends Abi | readonly unknown[] | undefined,\n eventName extends string | undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n >(\n args: GetFilterLogsParameters,\n ) => Promise<\n GetFilterLogsReturnType\n >\n /**\n * Returns the current price of gas (in wei).\n *\n * - Docs: https://viem.sh/docs/actions/public/getGasPrice\n * - JSON-RPC Methods: [`eth_gasPrice`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_gasprice)\n *\n * @returns The gas price (in wei). {@link GetGasPriceReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const gasPrice = await client.getGasPrice()\n */\n getGasPrice: () => Promise\n /**\n * Returns a list of event logs matching the provided parameters.\n *\n * - Docs: https://viem.sh/docs/actions/public/getLogs\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/logs_event-logs\n * - JSON-RPC Methods: [`eth_getLogs`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getlogs)\n *\n * @param args - {@link GetLogsParameters}\n * @returns A list of event logs. {@link GetLogsReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbiItem } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const logs = await client.getLogs()\n */\n getLogs: <\n const abiEvent extends AbiEvent | undefined = undefined,\n const abiEvents extends\n | readonly AbiEvent[]\n | readonly unknown[]\n | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n >(\n args?:\n | GetLogsParameters\n | undefined,\n ) => Promise<\n GetLogsReturnType\n >\n /**\n * Returns the account and storage values of the specified account including the Merkle-proof.\n *\n * - Docs: https://viem.sh/docs/actions/public/getProof\n * - JSON-RPC Methods:\n * - Calls [`eth_getProof`](https://eips.ethereum.org/EIPS/eip-1186)\n *\n * @param client - Client to use\n * @param parameters - {@link GetProofParameters}\n * @returns Proof data. {@link GetProofReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const block = await client.getProof({\n * address: '0x...',\n * storageKeys: ['0x...'],\n * })\n */\n getProof: (args: GetProofParameters) => Promise\n /**\n * Returns an estimate for the max priority fee per gas (in wei) for a transaction\n * to be included in the next block.\n *\n * - Docs: https://viem.sh/docs/actions/public/estimateMaxPriorityFeePerGas\n *\n * @param client - Client to use\n * @returns An estimate (in wei) for the max priority fee per gas. {@link EstimateMaxPriorityFeePerGasReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const maxPriorityFeePerGas = await client.estimateMaxPriorityFeePerGas()\n * // 10000000n\n */\n estimateMaxPriorityFeePerGas: <\n chainOverride extends Chain | undefined = undefined,\n >(\n args?:\n | EstimateMaxPriorityFeePerGasParameters\n | undefined,\n ) => Promise\n /**\n * Returns the value from a storage slot at a given address.\n *\n * - Docs: https://viem.sh/docs/contract/getStorageAt\n * - JSON-RPC Methods: [`eth_getStorageAt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getstorageat)\n *\n * @param args - {@link GetStorageAtParameters}\n * @returns The value of the storage slot. {@link GetStorageAtReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getStorageAt } from 'viem/contract'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const code = await client.getStorageAt({\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * slot: toHex(0),\n * })\n */\n getStorageAt: (\n args: GetStorageAtParameters,\n ) => Promise\n /**\n * Returns information about a [Transaction](https://viem.sh/docs/glossary/terms#transaction) given a hash or block identifier.\n *\n * - Docs: https://viem.sh/docs/actions/public/getTransaction\n * - Example: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_fetching-transactions\n * - JSON-RPC Methods: [`eth_getTransactionByHash`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionByHash)\n *\n * @param args - {@link GetTransactionParameters}\n * @returns The transaction information. {@link GetTransactionReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const transaction = await client.getTransaction({\n * hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',\n * })\n */\n getTransaction: (\n args: GetTransactionParameters,\n ) => Promise>\n /**\n * Returns the number of blocks passed (confirmations) since the transaction was processed on a block.\n *\n * - Docs: https://viem.sh/docs/actions/public/getTransactionConfirmations\n * - Example: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_fetching-transactions\n * - JSON-RPC Methods: [`eth_getTransactionConfirmations`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionConfirmations)\n *\n * @param args - {@link GetTransactionConfirmationsParameters}\n * @returns The number of blocks passed since the transaction was processed. If confirmations is 0, then the Transaction has not been confirmed & processed yet. {@link GetTransactionConfirmationsReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const confirmations = await client.getTransactionConfirmations({\n * hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',\n * })\n */\n getTransactionConfirmations: (\n args: GetTransactionConfirmationsParameters,\n ) => Promise\n /**\n * Returns the number of [Transactions](https://viem.sh/docs/glossary/terms#transaction) an Account has broadcast / sent.\n *\n * - Docs: https://viem.sh/docs/actions/public/getTransactionCount\n * - JSON-RPC Methods: [`eth_getTransactionCount`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_gettransactioncount)\n *\n * @param args - {@link GetTransactionCountParameters}\n * @returns The number of transactions an account has sent. {@link GetTransactionCountReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const transactionCount = await client.getTransactionCount({\n * address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n */\n getTransactionCount: (\n args: GetTransactionCountParameters,\n ) => Promise\n /**\n * Returns the [Transaction Receipt](https://viem.sh/docs/glossary/terms#transaction-receipt) given a [Transaction](https://viem.sh/docs/glossary/terms#transaction) hash.\n *\n * - Docs: https://viem.sh/docs/actions/public/getTransactionReceipt\n * - Example: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_fetching-transactions\n * - JSON-RPC Methods: [`eth_getTransactionReceipt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionReceipt)\n *\n * @param args - {@link GetTransactionReceiptParameters}\n * @returns The transaction receipt. {@link GetTransactionReceiptReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const transactionReceipt = await client.getTransactionReceipt({\n * hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',\n * })\n */\n getTransactionReceipt: (\n args: GetTransactionReceiptParameters,\n ) => Promise>\n /**\n * Similar to [`readContract`](https://viem.sh/docs/contract/readContract), but batches up multiple functions on a contract in a single RPC call via the [`multicall3` contract](https://github.com/mds1/multicall).\n *\n * - Docs: https://viem.sh/docs/contract/multicall\n *\n * @param args - {@link MulticallParameters}\n * @returns An array of results with accompanying status. {@link MulticallReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const abi = parseAbi([\n * 'function balanceOf(address) view returns (uint256)',\n * 'function totalSupply() view returns (uint256)',\n * ])\n * const result = await client.multicall({\n * contracts: [\n * {\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi,\n * functionName: 'balanceOf',\n * args: ['0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'],\n * },\n * {\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi,\n * functionName: 'totalSupply',\n * },\n * ],\n * })\n * // [{ result: 424122n, status: 'success' }, { result: 1000000n, status: 'success' }]\n */\n multicall: <\n const contracts extends readonly unknown[],\n allowFailure extends boolean = true,\n >(\n args: MulticallParameters,\n ) => Promise>\n /**\n * Prepares a transaction request for signing.\n *\n * - Docs: https://viem.sh/docs/actions/wallet/prepareTransactionRequest\n *\n * @param args - {@link PrepareTransactionRequestParameters}\n * @returns The transaction request. {@link PrepareTransactionRequestReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createWalletClient({\n * chain: mainnet,\n * transport: custom(window.ethereum),\n * })\n * const request = await client.prepareTransactionRequest({\n * account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * to: '0x0000000000000000000000000000000000000000',\n * value: 1n,\n * })\n *\n * @example\n * // Account Hoisting\n * import { createWalletClient, http } from 'viem'\n * import { privateKeyToAccount } from 'viem/accounts'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createWalletClient({\n * account: privateKeyToAccount('0x\u2026'),\n * chain: mainnet,\n * transport: custom(window.ethereum),\n * })\n * const request = await client.prepareTransactionRequest({\n * to: '0x0000000000000000000000000000000000000000',\n * value: 1n,\n * })\n */\n prepareTransactionRequest: <\n const request extends PrepareTransactionRequestRequest<\n chain,\n chainOverride\n >,\n chainOverride extends Chain | undefined = undefined,\n accountOverride extends Account | Address | undefined = undefined,\n >(\n args: PrepareTransactionRequestParameters<\n chain,\n account,\n chainOverride,\n accountOverride,\n request\n >,\n ) => Promise<\n PrepareTransactionRequestReturnType<\n chain,\n account,\n chainOverride,\n accountOverride,\n request\n >\n >\n /**\n * Calls a read-only function on a contract, and returns the response.\n *\n * - Docs: https://viem.sh/docs/contract/readContract\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/contracts_reading-contracts\n *\n * @remarks\n * A \"read-only\" function (constant function) on a Solidity contract is denoted by a `view` or `pure` keyword. They can only read the state of the contract, and cannot make any changes to it. Since read-only methods do not change the state of the contract, they do not require any gas to be executed, and can be called by any user without the need to pay for gas.\n *\n * Internally, uses a [Public Client](https://viem.sh/docs/clients/public) to call the [`call` action](https://viem.sh/docs/actions/public/call) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n *\n * @param args - {@link ReadContractParameters}\n * @returns The response from the contract. Type is inferred. {@link ReadContractReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { readContract } from 'viem/contract'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const result = await client.readContract({\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi: parseAbi(['function balanceOf(address) view returns (uint256)']),\n * functionName: 'balanceOf',\n * args: ['0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'],\n * })\n * // 424122n\n */\n readContract: <\n const abi extends Abi | readonly unknown[],\n functionName extends ContractFunctionName,\n const args extends ContractFunctionArgs,\n >(\n args: ReadContractParameters,\n ) => Promise>\n /**\n * Sends a **signed** transaction to the network\n *\n * - Docs: https://viem.sh/docs/actions/wallet/sendRawTransaction\n * - JSON-RPC Method: [`eth_sendRawTransaction`](https://ethereum.github.io/execution-apis/api-documentation/)\n *\n * @param client - Client to use\n * @param parameters - {@link SendRawTransactionParameters}\n * @returns The transaction hash. {@link SendRawTransactionReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { sendRawTransaction } from 'viem/wallet'\n *\n * const client = createWalletClient({\n * chain: mainnet,\n * transport: custom(window.ethereum),\n * })\n *\n * const hash = await client.sendRawTransaction({\n * serializedTransaction: '0x02f850018203118080825208808080c080a04012522854168b27e5dc3d5839bab5e6b39e1a0ffd343901ce1622e3d64b48f1a04e00902ae0502c4728cbf12156290df99c3ed7de85b1dbfe20b5c36931733a33'\n * })\n */\n sendRawTransaction: (\n args: SendRawTransactionParameters,\n ) => Promise\n /**\n * Sends a **signed** transaction to the network\n *\n * - Docs: https://viem.sh/docs/actions/wallet/sendRawTransactionSync\n * - JSON-RPC Method: [`eth_sendRawTransactionSync`](https://eips.ethereum.org/EIPS/eip-7966)\n *\n * @param client - Client to use\n * @param parameters - {@link SendRawTransactionSyncParameters}\n * @returns The transaction receipt. {@link SendRawTransactionSyncReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { sendRawTransactionSync } from 'viem/wallet'\n *\n * const client = createWalletClient({\n * chain: mainnet,\n * transport: custom(window.ethereum),\n * })\n *\n * const receipt = await client.sendRawTransactionSync({\n * serializedTransaction: '0x02f850018203118080825208808080c080a04012522854168b27e5dc3d5839bab5e6b39e1a0ffd343901ce1622e3d64b48f1a04e00902ae0502c4728cbf12156290df99c3ed7de85b1dbfe20b5c36931733a33'\n * })\n */\n sendRawTransactionSync: (\n args: SendRawTransactionSyncParameters,\n ) => Promise>\n /**\n * @deprecated Use `simulateBlocks` instead.\n */\n simulate: (\n args: SimulateBlocksParameters,\n ) => Promise>\n /**\n * Simulates a set of calls on block(s) with optional block and state overrides.\n *\n * @example\n * ```ts\n * import { createPublicClient, http, parseEther } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n *\n * const result = await client.simulateBlocks({\n * blocks: [{\n * blockOverrides: {\n * number: 69420n,\n * },\n * calls: [{\n * {\n * account: '0x5a0b54d5dc17e482fe8b0bdca5320161b95fb929',\n * data: '0xdeadbeef',\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * },\n * {\n * account: '0x5a0b54d5dc17e482fe8b0bdca5320161b95fb929',\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * value: parseEther('1'),\n * },\n * }],\n * stateOverrides: [{\n * address: '0x5a0b54d5dc17e482fe8b0bdca5320161b95fb929',\n * balance: parseEther('10'),\n * }],\n * }]\n * })\n * ```\n *\n * @param client - Client to use.\n * @param parameters - {@link SimulateParameters}\n * @returns Simulated blocks. {@link SimulateReturnType}\n */\n simulateBlocks: (\n args: SimulateBlocksParameters,\n ) => Promise>\n /**\n * Simulates a set of calls.\n *\n * @example\n * ```ts\n * import { createPublicClient, http, parseEther } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n *\n * const result = await client.simulateCalls({\n * account: '0x5a0b54d5dc17e482fe8b0bdca5320161b95fb929',\n * calls: [{\n * {\n * data: '0xdeadbeef',\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * },\n * {\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * value: parseEther('1'),\n * },\n * ]\n * })\n * ```\n *\n * @param client - Client to use.\n * @param parameters - {@link SimulateCallsParameters}\n * @returns Results. {@link SimulateCallsReturnType}\n */\n simulateCalls: (\n args: SimulateCallsParameters,\n ) => Promise>\n /**\n * Simulates/validates a contract interaction. This is useful for retrieving **return data** and **revert reasons** of contract write functions.\n *\n * - Docs: https://viem.sh/docs/contract/simulateContract\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/contracts_writing-to-contracts\n *\n * @remarks\n * This function does not require gas to execute and _**does not**_ change the state of the blockchain. It is almost identical to [`readContract`](https://viem.sh/docs/contract/readContract), but also supports contract write functions.\n *\n * Internally, uses a [Public Client](https://viem.sh/docs/clients/public) to call the [`call` action](https://viem.sh/docs/actions/public/call) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n *\n * @param args - {@link SimulateContractParameters}\n * @returns The simulation result and write request. {@link SimulateContractReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const result = await client.simulateContract({\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi: parseAbi(['function mint(uint32) view returns (uint32)']),\n * functionName: 'mint',\n * args: ['69420'],\n * account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n */\n simulateContract: <\n const abi extends Abi | readonly unknown[],\n functionName extends ContractFunctionName,\n const args extends ContractFunctionArgs<\n abi,\n 'nonpayable' | 'payable',\n functionName\n >,\n chainOverride extends Chain | undefined,\n accountOverride extends Account | Address | undefined = undefined,\n >(\n args: SimulateContractParameters<\n abi,\n functionName,\n args,\n chain,\n chainOverride,\n accountOverride\n >,\n ) => Promise<\n SimulateContractReturnType<\n abi,\n functionName,\n args,\n chain,\n account,\n chainOverride,\n accountOverride\n >\n >\n /**\n * Verify that a hash was signed by the provided address.\n *\n * - Docs {@link https://viem.sh/docs/actions/public/verifyHash}\n *\n * @param parameters - {@link VerifyHashParameters}\n * @returns Whether or not the signature is valid. {@link VerifyHashReturnType}\n */\n verifyHash: (args: VerifyHashParameters) => Promise\n /**\n * Verify that a message was signed by the provided address.\n *\n * Compatible with Smart Contract Accounts & Externally Owned Accounts via [ERC-6492](https://eips.ethereum.org/EIPS/eip-6492).\n *\n * - Docs {@link https://viem.sh/docs/actions/public/verifyMessage}\n *\n * @param parameters - {@link VerifyMessageParameters}\n * @returns Whether or not the signature is valid. {@link VerifyMessageReturnType}\n */\n verifyMessage: (\n args: VerifyMessageParameters,\n ) => Promise\n /**\n * Verifies [EIP-4361](https://eips.ethereum.org/EIPS/eip-4361) formatted message was signed.\n *\n * Compatible with Smart Contract Accounts & Externally Owned Accounts via [ERC-6492](https://eips.ethereum.org/EIPS/eip-6492).\n *\n * - Docs {@link https://viem.sh/docs/siwe/actions/verifySiweMessage}\n *\n * @param parameters - {@link VerifySiweMessageParameters}\n * @returns Whether or not the signature is valid. {@link VerifySiweMessageReturnType}\n */\n verifySiweMessage: (\n args: VerifySiweMessageParameters,\n ) => Promise\n /**\n * Verify that typed data was signed by the provided address.\n *\n * - Docs {@link https://viem.sh/docs/actions/public/verifyTypedData}\n *\n * @param parameters - {@link VerifyTypedDataParameters}\n * @returns Whether or not the signature is valid. {@link VerifyTypedDataReturnType}\n */\n verifyTypedData: (\n args: VerifyTypedDataParameters,\n ) => Promise\n /**\n * Destroys a Filter that was created from one of the following Actions:\n *\n * - [`createBlockFilter`](https://viem.sh/docs/actions/public/createBlockFilter)\n * - [`createEventFilter`](https://viem.sh/docs/actions/public/createEventFilter)\n * - [`createPendingTransactionFilter`](https://viem.sh/docs/actions/public/createPendingTransactionFilter)\n *\n * - Docs: https://viem.sh/docs/actions/public/uninstallFilter\n * - JSON-RPC Methods: [`eth_uninstallFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_uninstallFilter)\n *\n * @param args - {@link UninstallFilterParameters}\n * @returns A boolean indicating if the Filter was successfully uninstalled. {@link UninstallFilterReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createPendingTransactionFilter, uninstallFilter } from 'viem/public'\n *\n * const filter = await client.createPendingTransactionFilter()\n * const uninstalled = await client.uninstallFilter({ filter })\n * // true\n */\n uninstallFilter: (\n args: UninstallFilterParameters,\n ) => Promise\n /**\n * Waits for the [Transaction](https://viem.sh/docs/glossary/terms#transaction) to be included on a [Block](https://viem.sh/docs/glossary/terms#block) (one confirmation), and then returns the [Transaction Receipt](https://viem.sh/docs/glossary/terms#transaction-receipt). If the Transaction reverts, then the action will throw an error.\n *\n * - Docs: https://viem.sh/docs/actions/public/waitForTransactionReceipt\n * - Example: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_sending-transactions\n * - JSON-RPC Methods:\n * - Polls [`eth_getTransactionReceipt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionReceipt) on each block until it has been processed.\n * - If a Transaction has been replaced:\n * - Calls [`eth_getBlockByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblockbynumber) and extracts the transactions\n * - Checks if one of the Transactions is a replacement\n * - If so, calls [`eth_getTransactionReceipt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionReceipt).\n *\n * @remarks\n * The `waitForTransactionReceipt` action additionally supports Replacement detection (e.g. sped up Transactions).\n *\n * Transactions can be replaced when a user modifies their transaction in their wallet (to speed up or cancel). Transactions are replaced when they are sent from the same nonce.\n *\n * There are 3 types of Transaction Replacement reasons:\n *\n * - `repriced`: The gas price has been modified (e.g. different `maxFeePerGas`)\n * - `cancelled`: The Transaction has been cancelled (e.g. `value === 0n`)\n * - `replaced`: The Transaction has been replaced (e.g. different `value` or `data`)\n *\n * @param args - {@link WaitForTransactionReceiptParameters}\n * @returns The transaction receipt. {@link WaitForTransactionReceiptReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const transactionReceipt = await client.waitForTransactionReceipt({\n * hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',\n * })\n */\n waitForTransactionReceipt: (\n args: WaitForTransactionReceiptParameters,\n ) => Promise>\n /**\n * Watches and returns incoming block numbers.\n *\n * - Docs: https://viem.sh/docs/actions/public/watchBlockNumber\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/blocks_watching-blocks\n * - JSON-RPC Methods:\n * - When `poll: true`, calls [`eth_blockNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_blocknumber) on a polling interval.\n * - When `poll: false` & WebSocket Transport, uses a WebSocket subscription via [`eth_subscribe`](https://docs.alchemy.com/reference/eth-subscribe-polygon) and the `\"newHeads\"` event.\n *\n * @param args - {@link WatchBlockNumberParameters}\n * @returns A function that can be invoked to stop watching for new block numbers. {@link WatchBlockNumberReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const unwatch = await client.watchBlockNumber({\n * onBlockNumber: (blockNumber) => console.log(blockNumber),\n * })\n */\n watchBlockNumber: (\n args: WatchBlockNumberParameters,\n ) => WatchBlockNumberReturnType\n /**\n * Watches and returns information for incoming blocks.\n *\n * - Docs: https://viem.sh/docs/actions/public/watchBlocks\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/blocks_watching-blocks\n * - JSON-RPC Methods:\n * - When `poll: true`, calls [`eth_getBlockByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getBlockByNumber) on a polling interval.\n * - When `poll: false` & WebSocket Transport, uses a WebSocket subscription via [`eth_subscribe`](https://docs.alchemy.com/reference/eth-subscribe-polygon) and the `\"newHeads\"` event.\n *\n * @param args - {@link WatchBlocksParameters}\n * @returns A function that can be invoked to stop watching for new block numbers. {@link WatchBlocksReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const unwatch = await client.watchBlocks({\n * onBlock: (block) => console.log(block),\n * })\n */\n watchBlocks: <\n includeTransactions extends boolean = false,\n blockTag extends BlockTag = 'latest',\n >(\n args: WatchBlocksParameters<\n transport,\n chain,\n includeTransactions,\n blockTag\n >,\n ) => WatchBlocksReturnType\n /**\n * Watches and returns emitted contract event logs.\n *\n * - Docs: https://viem.sh/docs/contract/watchContractEvent\n *\n * @remarks\n * This Action will batch up all the event logs found within the [`pollingInterval`](https://viem.sh/docs/contract/watchContractEvent#pollinginterval-optional), and invoke them via [`onLogs`](https://viem.sh/docs/contract/watchContractEvent#onLogs).\n *\n * `watchContractEvent` will attempt to create an [Event Filter](https://viem.sh/docs/contract/createContractEventFilter) and listen to changes to the Filter per polling interval, however, if the RPC Provider does not support Filters (e.g. `eth_newFilter`), then `watchContractEvent` will fall back to using [`getLogs`](https://viem.sh/docs/actions/public/getLogs) instead.\n *\n * @param args - {@link WatchContractEventParameters}\n * @returns A function that can be invoked to stop watching for new event logs. {@link WatchContractEventReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const unwatch = client.watchContractEvent({\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi: parseAbi(['event Transfer(address indexed from, address indexed to, uint256 value)']),\n * eventName: 'Transfer',\n * args: { from: '0xc961145a54C96E3aE9bAA048c4F4D6b04C13916b' },\n * onLogs: (logs) => console.log(logs),\n * })\n */\n watchContractEvent: <\n const abi extends Abi | readonly unknown[],\n eventName extends ContractEventName,\n strict extends boolean | undefined = undefined,\n >(\n args: WatchContractEventParameters,\n ) => WatchContractEventReturnType\n /**\n * Watches and returns emitted [Event Logs](https://viem.sh/docs/glossary/terms#event-log).\n *\n * - Docs: https://viem.sh/docs/actions/public/watchEvent\n * - JSON-RPC Methods:\n * - **RPC Provider supports `eth_newFilter`:**\n * - Calls [`eth_newFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newfilter) to create a filter (called on initialize).\n * - On a polling interval, it will call [`eth_getFilterChanges`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getfilterchanges).\n * - **RPC Provider does not support `eth_newFilter`:**\n * - Calls [`eth_getLogs`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getlogs) for each block between the polling interval.\n *\n * @remarks\n * This Action will batch up all the Event Logs found within the [`pollingInterval`](https://viem.sh/docs/actions/public/watchEvent#pollinginterval-optional), and invoke them via [`onLogs`](https://viem.sh/docs/actions/public/watchEvent#onLogs).\n *\n * `watchEvent` will attempt to create an [Event Filter](https://viem.sh/docs/actions/public/createEventFilter) and listen to changes to the Filter per polling interval, however, if the RPC Provider does not support Filters (e.g. `eth_newFilter`), then `watchEvent` will fall back to using [`getLogs`](https://viem.sh/docs/actions/public/getLogs) instead.\n *\n * @param args - {@link WatchEventParameters}\n * @returns A function that can be invoked to stop watching for new Event Logs. {@link WatchEventReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const unwatch = client.watchEvent({\n * onLogs: (logs) => console.log(logs),\n * })\n */\n watchEvent: <\n const abiEvent extends AbiEvent | undefined = undefined,\n const abiEvents extends\n | readonly AbiEvent[]\n | readonly unknown[]\n | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n strict extends boolean | undefined = undefined,\n >(\n args: WatchEventParameters,\n ) => WatchEventReturnType\n /**\n * Watches and returns pending transaction hashes.\n *\n * - Docs: https://viem.sh/docs/actions/public/watchPendingTransactions\n * - JSON-RPC Methods:\n * - When `poll: true`\n * - Calls [`eth_newPendingTransactionFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newpendingtransactionfilter) to initialize the filter.\n * - Calls [`eth_getFilterChanges`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getFilterChanges) on a polling interval.\n * - When `poll: false` & WebSocket Transport, uses a WebSocket subscription via [`eth_subscribe`](https://docs.alchemy.com/reference/eth-subscribe-polygon) and the `\"newPendingTransactions\"` event.\n *\n * @remarks\n * This Action will batch up all the pending transactions found within the [`pollingInterval`](https://viem.sh/docs/actions/public/watchPendingTransactions#pollinginterval-optional), and invoke them via [`onTransactions`](https://viem.sh/docs/actions/public/watchPendingTransactions#ontransactions).\n *\n * @param args - {@link WatchPendingTransactionsParameters}\n * @returns A function that can be invoked to stop watching for new pending transaction hashes. {@link WatchPendingTransactionsReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const unwatch = await client.watchPendingTransactions({\n * onTransactions: (hashes) => console.log(hashes),\n * })\n */\n watchPendingTransactions: (\n args: WatchPendingTransactionsParameters,\n ) => WatchPendingTransactionsReturnType\n}\n\nexport function publicActions<\n transport extends Transport = Transport,\n chain extends Chain | undefined = Chain | undefined,\n account extends Account | undefined = Account | undefined,\n>(\n client: Client,\n): PublicActions {\n return {\n call: (args) => call(client, args),\n createAccessList: (args) => createAccessList(client, args),\n createBlockFilter: () => createBlockFilter(client),\n createContractEventFilter: (args) =>\n createContractEventFilter(client, args),\n createEventFilter: (args) => createEventFilter(client, args),\n createPendingTransactionFilter: () =>\n createPendingTransactionFilter(client),\n estimateContractGas: (args) => estimateContractGas(client, args as any),\n estimateGas: (args) => estimateGas(client, args),\n getBalance: (args) => getBalance(client, args),\n getBlobBaseFee: () => getBlobBaseFee(client),\n getBlock: (args) => getBlock(client, args),\n getBlockNumber: (args) => getBlockNumber(client, args),\n getBlockTransactionCount: (args) => getBlockTransactionCount(client, args),\n getBytecode: (args) => getCode(client, args),\n getChainId: () => getChainId(client),\n getCode: (args) => getCode(client, args),\n getContractEvents: (args) => getContractEvents(client, args),\n getDelegation: (args) => getDelegation(client, args),\n getEip712Domain: (args) => getEip712Domain(client, args),\n getEnsAddress: (args) => getEnsAddress(client, args),\n getEnsAvatar: (args) => getEnsAvatar(client, args),\n getEnsName: (args) => getEnsName(client, args),\n getEnsResolver: (args) => getEnsResolver(client, args),\n getEnsText: (args) => getEnsText(client, args),\n getFeeHistory: (args) => getFeeHistory(client, args),\n estimateFeesPerGas: (args) => estimateFeesPerGas(client, args),\n getFilterChanges: (args) => getFilterChanges(client, args),\n getFilterLogs: (args) => getFilterLogs(client, args),\n getGasPrice: () => getGasPrice(client),\n getLogs: (args) => getLogs(client, args as any),\n getProof: (args) => getProof(client, args),\n estimateMaxPriorityFeePerGas: (args) =>\n estimateMaxPriorityFeePerGas(client, args),\n fillTransaction: (args) => fillTransaction(client, args),\n getStorageAt: (args) => getStorageAt(client, args),\n getTransaction: (args) => getTransaction(client, args),\n getTransactionConfirmations: (args) =>\n getTransactionConfirmations(client, args),\n getTransactionCount: (args) => getTransactionCount(client, args),\n getTransactionReceipt: (args) => getTransactionReceipt(client, args),\n multicall: (args) => multicall(client, args),\n prepareTransactionRequest: (args) =>\n prepareTransactionRequest(client as any, args as any) as any,\n readContract: (args) => readContract(client, args),\n sendRawTransaction: (args) => sendRawTransaction(client, args),\n sendRawTransactionSync: (args) => sendRawTransactionSync(client, args),\n simulate: (args) => simulateBlocks(client, args),\n simulateBlocks: (args) => simulateBlocks(client, args),\n simulateCalls: (args) => simulateCalls(client, args),\n simulateContract: (args) => simulateContract(client, args),\n verifyHash: (args) => verifyHash(client, args),\n verifyMessage: (args) => verifyMessage(client, args),\n verifySiweMessage: (args) => verifySiweMessage(client, args),\n verifyTypedData: (args) => verifyTypedData(client, args),\n uninstallFilter: (args) => uninstallFilter(client, args),\n waitForTransactionReceipt: (args) =>\n waitForTransactionReceipt(client, args),\n watchBlocks: (args) => watchBlocks(client, args),\n watchBlockNumber: (args) => watchBlockNumber(client, args),\n watchContractEvent: (args) => watchContractEvent(client, args),\n watchEvent: (args) => watchEvent(client, args),\n watchPendingTransactions: (args) => watchPendingTransactions(client, args),\n }\n}\n", "import type { Address } from 'abitype'\n\nimport type { Account } from '../../accounts/types.js'\nimport {\n type ParseAccountErrorType,\n parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RpcTransactionRequest } from '../../types/rpc.js'\nimport type { AccessList, TransactionRequest } from '../../types/transaction.js'\nimport type { ExactPartial, Prettify, UnionOmit } from '../../types/utils.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type NumberToHexErrorType,\n numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport {\n type GetCallErrorReturnType,\n getCallError,\n} from '../../utils/errors/getCallError.js'\nimport { extract } from '../../utils/formatters/extract.js'\nimport {\n type FormatTransactionRequestErrorType,\n type FormattedTransactionRequest,\n formatTransactionRequest,\n} from '../../utils/formatters/transactionRequest.js'\nimport type {\n AssertRequestErrorType,\n AssertRequestParameters,\n} from '../../utils/transaction/assertRequest.js'\nimport { assertRequest } from '../../utils/transaction/assertRequest.js'\n\nexport type CreateAccessListParameters<\n chain extends Chain | undefined = Chain | undefined,\n> = UnionOmit<\n FormattedTransactionRequest,\n 'from' | 'nonce' | 'accessList'\n> & {\n /** Account attached to the call (msg.sender). */\n account?: Account | Address | undefined\n} & (\n | {\n /** The balance of the account at a block number. */\n blockNumber?: bigint | undefined\n blockTag?: undefined\n }\n | {\n blockNumber?: undefined\n /**\n * The balance of the account at a block tag.\n * @default 'latest'\n */\n blockTag?: BlockTag | undefined\n }\n )\n\nexport type CreateAccessListReturnType = Prettify<{\n accessList: AccessList\n gasUsed: bigint\n}>\n\nexport type CreateAccessListErrorType = GetCallErrorReturnType<\n | ParseAccountErrorType\n | AssertRequestErrorType\n | NumberToHexErrorType\n | FormatTransactionRequestErrorType\n | RequestErrorType\n>\n\n/**\n * Creates an EIP-2930 access list.\n *\n * - Docs: https://viem.sh/docs/actions/public/createAccessList\n * - JSON-RPC Methods: `eth_createAccessList`\n *\n * @param client - Client to use\n * @param parameters - {@link CreateAccessListParameters}\n * @returns The access list. {@link CreateAccessListReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createAccessList } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const data = await createAccessList(client, {\n * account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',\n * data: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * })\n */\nexport async function createAccessList(\n client: Client,\n args: CreateAccessListParameters,\n): Promise {\n const {\n account: account_ = client.account,\n blockNumber,\n blockTag = 'latest',\n blobs,\n data,\n gas,\n gasPrice,\n maxFeePerBlobGas,\n maxFeePerGas,\n maxPriorityFeePerGas,\n to,\n value,\n ...rest\n } = args\n const account = account_ ? parseAccount(account_) : undefined\n\n try {\n assertRequest(args as AssertRequestParameters)\n\n const blockNumberHex =\n typeof blockNumber === 'bigint' ? numberToHex(blockNumber) : undefined\n const block = blockNumberHex || blockTag\n\n const chainFormat = client.chain?.formatters?.transactionRequest?.format\n const format = chainFormat || formatTransactionRequest\n\n const request = format(\n {\n // Pick out extra data that might exist on the chain's transaction request type.\n ...extract(rest, { format: chainFormat }),\n account,\n blobs,\n data,\n gas,\n gasPrice,\n maxFeePerBlobGas,\n maxFeePerGas,\n maxPriorityFeePerGas,\n to,\n value,\n } as TransactionRequest,\n 'createAccessList',\n ) as TransactionRequest\n\n const response = await client.request({\n method: 'eth_createAccessList',\n params: [request as ExactPartial, block],\n })\n return {\n accessList: response.accessList,\n gasUsed: BigInt(response.gasUsed),\n }\n } catch (err) {\n throw getCallError(err as ErrorType, {\n ...args,\n account,\n chain: client.chain,\n })\n }\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport { createFilterRequestScope } from '../../utils/filters/createFilterRequestScope.js'\n\nexport type CreateBlockFilterReturnType = Filter<'block'>\n\nexport type CreateBlockFilterErrorType = RequestErrorType | ErrorType\n\n/**\n * Creates a [`Filter`](https://viem.sh/docs/glossary/types#filter) to listen for new block hashes that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges).\n *\n * - Docs: https://viem.sh/docs/actions/public/createBlockFilter\n * - JSON-RPC Methods: [`eth_newBlockFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newBlockFilter)\n *\n * @param client - Client to use\n * @returns [`Filter`](https://viem.sh/docs/glossary/types#filter). {@link CreateBlockFilterReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createBlockFilter } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await createBlockFilter(client)\n * // { id: \"0x345a6572337856574a76364e457a4366\", type: 'block' }\n */\nexport async function createBlockFilter(\n client: Client,\n): Promise {\n const getRequest = createFilterRequestScope(client, {\n method: 'eth_newBlockFilter',\n })\n const id = await client.request({\n method: 'eth_newBlockFilter',\n })\n return { id, request: getRequest(id), type: 'block' }\n}\n", "import type { AbiEvent, Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockNumber, BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n MaybeAbiEventName,\n MaybeExtractEventArgsFromAbi,\n} from '../../types/contract.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { Hex, LogTopic } from '../../types/misc.js'\nimport type { Prettify } from '../../types/utils.js'\nimport {\n type EncodeEventTopicsErrorType,\n type EncodeEventTopicsParameters,\n encodeEventTopics,\n} from '../../utils/abi/encodeEventTopics.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type NumberToHexErrorType,\n numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport { createFilterRequestScope } from '../../utils/filters/createFilterRequestScope.js'\n\nexport type CreateEventFilterParameters<\n abiEvent extends AbiEvent | undefined = undefined,\n abiEvents extends\n | readonly AbiEvent[]\n | readonly unknown[]\n | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n //\n _eventName extends string | undefined = MaybeAbiEventName,\n _args extends\n | MaybeExtractEventArgsFromAbi\n | undefined = undefined,\n> = {\n address?: Address | Address[] | undefined\n fromBlock?: fromBlock | BlockNumber | BlockTag | undefined\n toBlock?: toBlock | BlockNumber | BlockTag | undefined\n} & (MaybeExtractEventArgsFromAbi<\n abiEvents,\n _eventName\n> extends infer eventFilterArgs\n ?\n | {\n args:\n | eventFilterArgs\n | (_args extends eventFilterArgs ? _args : never)\n event: abiEvent\n events?: undefined\n /**\n * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n * @default false\n */\n strict?: strict | undefined\n }\n | {\n args?: undefined\n event?: abiEvent | undefined\n events?: undefined\n /**\n * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n * @default false\n */\n strict?: strict | undefined\n }\n | {\n args?: undefined\n event?: undefined\n events: abiEvents | undefined\n /**\n * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n * @default false\n */\n strict?: strict | undefined\n }\n | {\n args?: undefined\n event?: undefined\n events?: undefined\n strict?: undefined\n }\n : {\n args?: undefined\n event?: undefined\n events?: undefined\n strict?: undefined\n })\n\nexport type CreateEventFilterReturnType<\n abiEvent extends AbiEvent | undefined = undefined,\n abiEvents extends\n | readonly AbiEvent[]\n | readonly unknown[]\n | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n _eventName extends string | undefined = MaybeAbiEventName,\n _args extends\n | MaybeExtractEventArgsFromAbi\n | undefined = undefined,\n> = Prettify<\n Filter<'event', abiEvents, _eventName, _args, strict, fromBlock, toBlock>\n>\n\nexport type CreateEventFilterErrorType =\n | EncodeEventTopicsErrorType\n | RequestErrorType\n | NumberToHexErrorType\n | ErrorType\n\n/**\n * Creates a [`Filter`](https://viem.sh/docs/glossary/types#filter) to listen for new events that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges).\n *\n * - Docs: https://viem.sh/docs/actions/public/createEventFilter\n * - JSON-RPC Methods: [`eth_newFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newfilter)\n *\n * @param client - Client to use\n * @param parameters - {@link CreateEventFilterParameters}\n * @returns [`Filter`](https://viem.sh/docs/glossary/types#filter). {@link CreateEventFilterReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createEventFilter } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await createEventFilter(client, {\n * address: '0xfba3912ca04dd458c843e2ee08967fc04f3579c2',\n * })\n */\nexport async function createEventFilter<\n chain extends Chain | undefined,\n const abiEvent extends AbiEvent | undefined = undefined,\n const abiEvents extends\n | readonly AbiEvent[]\n | readonly unknown[]\n | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n _eventName extends string | undefined = MaybeAbiEventName,\n _args extends\n | MaybeExtractEventArgsFromAbi\n | undefined = undefined,\n>(\n client: Client,\n {\n address,\n args,\n event,\n events: events_,\n fromBlock,\n strict,\n toBlock,\n }: CreateEventFilterParameters<\n abiEvent,\n abiEvents,\n strict,\n fromBlock,\n toBlock,\n _eventName,\n _args\n > = {} as any,\n): Promise<\n CreateEventFilterReturnType<\n abiEvent,\n abiEvents,\n strict,\n fromBlock,\n toBlock,\n _eventName,\n _args\n >\n> {\n const events = events_ ?? (event ? [event] : undefined)\n\n const getRequest = createFilterRequestScope(client, {\n method: 'eth_newFilter',\n })\n\n let topics: LogTopic[] = []\n if (events) {\n const encoded = (events as AbiEvent[]).flatMap((event) =>\n encodeEventTopics({\n abi: [event],\n eventName: (event as AbiEvent).name,\n args,\n } as EncodeEventTopicsParameters),\n )\n // TODO: Clean up type casting\n topics = [encoded as LogTopic]\n if (event) topics = topics[0] as LogTopic[]\n }\n\n const id: Hex = await client.request({\n method: 'eth_newFilter',\n params: [\n {\n address,\n fromBlock:\n typeof fromBlock === 'bigint' ? numberToHex(fromBlock) : fromBlock,\n toBlock: typeof toBlock === 'bigint' ? numberToHex(toBlock) : toBlock,\n ...(topics.length ? { topics } : {}),\n },\n ],\n })\n\n return {\n abi: events,\n args,\n eventName: event ? (event as AbiEvent).name : undefined,\n fromBlock,\n id,\n request: getRequest(id),\n strict: Boolean(strict),\n toBlock,\n type: 'event',\n } as unknown as CreateEventFilterReturnType<\n abiEvent,\n abiEvents,\n strict,\n fromBlock,\n toBlock,\n _eventName,\n _args\n >\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport { createFilterRequestScope } from '../../utils/filters/createFilterRequestScope.js'\n\nexport type CreatePendingTransactionFilterReturnType = Filter<'transaction'>\n\nexport type CreatePendingTransactionFilterErrorType =\n | RequestErrorType\n | ErrorType\n\n/**\n * Creates a Filter to listen for new pending transaction hashes that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges).\n *\n * - Docs: https://viem.sh/docs/actions/public/createPendingTransactionFilter\n * - JSON-RPC Methods: [`eth_newPendingTransactionFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newpendingtransactionfilter)\n *\n * @param client - Client to use\n * @returns [`Filter`](https://viem.sh/docs/glossary/types#filter). {@link CreateBlockFilterReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createPendingTransactionFilter } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await createPendingTransactionFilter(client)\n * // { id: \"0x345a6572337856574a76364e457a4366\", type: 'transaction' }\n */\nexport async function createPendingTransactionFilter<\n transport extends Transport,\n chain extends Chain | undefined,\n>(\n client: Client,\n): Promise {\n const getRequest = createFilterRequestScope(client, {\n method: 'eth_newPendingTransactionFilter',\n })\n const id = await client.request({\n method: 'eth_newPendingTransactionFilter',\n })\n return { id, request: getRequest(id), type: 'transaction' }\n}\n", "import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { multicall3Abi } from '../../constants/abis.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport { decodeFunctionResult } from '../../utils/abi/decodeFunctionResult.js'\nimport { encodeFunctionData } from '../../utils/abi/encodeFunctionData.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type NumberToHexErrorType,\n numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { type CallParameters, call } from './call.js'\n\nexport type GetBalanceParameters = {\n /** The address of the account. */\n address: Address\n} & (\n | {\n /** The balance of the account at a block number. */\n blockNumber?: bigint | undefined\n blockTag?: undefined\n }\n | {\n blockNumber?: undefined\n /** The balance of the account at a block tag. */\n blockTag?: BlockTag | undefined\n }\n)\n\nexport type GetBalanceReturnType = bigint\n\nexport type GetBalanceErrorType =\n | NumberToHexErrorType\n | RequestErrorType\n | ErrorType\n\n/**\n * Returns the balance of an address in wei.\n *\n * - Docs: https://viem.sh/docs/actions/public/getBalance\n * - JSON-RPC Methods: [`eth_getBalance`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getbalance)\n *\n * You can convert the balance to ether units with [`formatEther`](https://viem.sh/docs/utilities/formatEther).\n *\n * ```ts\n * const balance = await getBalance(client, {\n * address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * blockTag: 'safe'\n * })\n * const balanceAsEther = formatEther(balance)\n * // \"6.942\"\n * ```\n *\n * @param client - Client to use\n * @param parameters - {@link GetBalanceParameters}\n * @returns The balance of the address in wei. {@link GetBalanceReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getBalance } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const balance = await getBalance(client, {\n * address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n * // 10000000000000000000000n (wei)\n */\nexport async function getBalance(\n client: Client,\n {\n address,\n blockNumber,\n blockTag = client.experimental_blockTag ?? 'latest',\n }: GetBalanceParameters,\n): Promise {\n if (client.batch?.multicall && client.chain?.contracts?.multicall3) {\n const multicall3Address = client.chain.contracts.multicall3.address\n\n const calldata = encodeFunctionData({\n abi: multicall3Abi,\n functionName: 'getEthBalance',\n args: [address],\n })\n\n const { data } = await getAction(\n client,\n call,\n 'call',\n )({\n to: multicall3Address,\n data: calldata,\n blockNumber,\n blockTag,\n } as unknown as CallParameters)\n\n return decodeFunctionResult({\n abi: multicall3Abi,\n functionName: 'getEthBalance',\n args: [address],\n data: data || '0x',\n })\n }\n\n const blockNumberHex =\n typeof blockNumber === 'bigint' ? numberToHex(blockNumber) : undefined\n\n const balance = await client.request({\n method: 'eth_getBalance',\n params: [address, blockNumberHex || blockTag],\n })\n return BigInt(balance)\n}\n", "import type { Account } from '../../accounts/types.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type GetBlobBaseFeeReturnType = bigint\n\nexport type GetBlobBaseFeeErrorType = RequestErrorType | ErrorType\n\n/**\n * Returns the base fee per blob gas in wei.\n *\n * - Docs: https://viem.sh/docs/actions/public/getBlobBaseFee\n * - JSON-RPC Methods: [`eth_blobBaseFee`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_blobBaseFee)\n *\n * @param client - Client to use\n * @returns The blob base fee (in wei). {@link GetBlobBaseFeeReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getBlobBaseFee } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const blobBaseFee = await getBlobBaseFee(client)\n */\nexport async function getBlobBaseFee<\n chain extends Chain | undefined,\n account extends Account | undefined,\n>(\n client: Client,\n): Promise {\n const baseFee = await client.request({\n method: 'eth_blobBaseFee',\n })\n return BigInt(baseFee)\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { Quantity } from '../../types/rpc.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type HexToNumberErrorType,\n hexToNumber,\n} from '../../utils/encoding/fromHex.js'\nimport {\n type NumberToHexErrorType,\n numberToHex,\n} from '../../utils/encoding/toHex.js'\n\nexport type GetBlockTransactionCountParameters =\n | {\n /** Hash of the block. */\n blockHash?: Hash | undefined\n blockNumber?: undefined\n blockTag?: undefined\n }\n | {\n blockHash?: undefined\n /** The block number. */\n blockNumber?: bigint | undefined\n blockTag?: undefined\n }\n | {\n blockHash?: undefined\n blockNumber?: undefined\n /** The block tag. Defaults to 'latest'. */\n blockTag?: BlockTag | undefined\n }\n\nexport type GetBlockTransactionCountReturnType = number\n\nexport type GetBlockTransactionCountErrorType =\n | NumberToHexErrorType\n | HexToNumberErrorType\n | RequestErrorType\n | ErrorType\n\n/**\n * Returns the number of Transactions at a block number, hash, or tag.\n *\n * - Docs: https://viem.sh/docs/actions/public/getBlockTransactionCount\n * - JSON-RPC Methods:\n * - Calls [`eth_getBlockTransactionCountByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblocktransactioncountbynumber) for `blockNumber` & `blockTag`.\n * - Calls [`eth_getBlockTransactionCountByHash`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblocktransactioncountbyhash) for `blockHash`.\n *\n * @param client - Client to use\n * @param parameters - {@link GetBlockTransactionCountParameters}\n * @returns The block transaction count. {@link GetBlockTransactionCountReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getBlockTransactionCount } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const count = await getBlockTransactionCount(client)\n */\nexport async function getBlockTransactionCount(\n client: Client,\n {\n blockHash,\n blockNumber,\n blockTag = 'latest',\n }: GetBlockTransactionCountParameters = {},\n): Promise {\n const blockNumberHex =\n blockNumber !== undefined ? numberToHex(blockNumber) : undefined\n\n let count: Quantity\n if (blockHash) {\n count = await client.request(\n {\n method: 'eth_getBlockTransactionCountByHash',\n params: [blockHash],\n },\n { dedupe: true },\n )\n } else {\n count = await client.request(\n {\n method: 'eth_getBlockTransactionCountByNumber',\n params: [blockNumberHex || blockTag],\n },\n { dedupe: Boolean(blockNumberHex) },\n )\n }\n\n return hexToNumber(count)\n}\n", "import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type NumberToHexErrorType,\n numberToHex,\n} from '../../utils/encoding/toHex.js'\n\nexport type GetCodeParameters = {\n address: Address\n} & (\n | {\n blockNumber?: undefined\n blockTag?: BlockTag | undefined\n }\n | {\n blockNumber?: bigint | undefined\n blockTag?: undefined\n }\n)\n\nexport type GetCodeReturnType = Hex | undefined\n\nexport type GetCodeErrorType =\n | NumberToHexErrorType\n | RequestErrorType\n | ErrorType\n\n/**\n * Retrieves the bytecode at an address.\n *\n * - Docs: https://viem.sh/docs/contract/getCode\n * - JSON-RPC Methods: [`eth_getCode`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getcode)\n *\n * @param client - Client to use\n * @param parameters - {@link GetCodeParameters}\n * @returns The contract's bytecode. {@link GetCodeReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getCode } from 'viem/contract'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const code = await getCode(client, {\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * })\n */\nexport async function getCode(\n client: Client,\n { address, blockNumber, blockTag = 'latest' }: GetCodeParameters,\n): Promise {\n const blockNumberHex =\n blockNumber !== undefined ? numberToHex(blockNumber) : undefined\n const hex = await client.request(\n {\n method: 'eth_getCode',\n params: [address, blockNumberHex || blockTag],\n },\n { dedupe: Boolean(blockNumberHex) },\n )\n if (hex === '0x') return undefined\n return hex\n}\n", "import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport {\n type GetAddressErrorType,\n getAddress,\n} from '../../utils/address/getAddress.js'\nimport { type SizeErrorType, size } from '../../utils/data/size.js'\nimport { type SliceErrorType, slice } from '../../utils/data/slice.js'\nimport { type GetCodeErrorType, getCode } from './getCode.js'\n\nexport type GetDelegationParameters = {\n /** The address to check for delegation. */\n address: Address\n} & (\n | {\n blockNumber?: undefined\n blockTag?: BlockTag | undefined\n }\n | {\n blockNumber?: bigint | undefined\n blockTag?: undefined\n }\n)\n\nexport type GetDelegationReturnType = Address | undefined\n\nexport type GetDelegationErrorType =\n | GetAddressErrorType\n | GetCodeErrorType\n | SliceErrorType\n | SizeErrorType\n | ErrorType\n\n/**\n * Returns the address that an account has delegated to via EIP-7702.\n *\n * - Docs: https://viem.sh/docs/actions/public/getDelegation\n *\n * @param client - Client to use\n * @param parameters - {@link GetDelegationParameters}\n * @returns The delegated address, or undefined if not delegated. {@link GetDelegationReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getDelegation } from 'viem/actions'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const delegation = await getDelegation(client, {\n * address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n */\nexport async function getDelegation(\n client: Client,\n { address, blockNumber, blockTag = 'latest' }: GetDelegationParameters,\n): Promise {\n const code = await getCode(client, {\n address,\n ...(blockNumber !== undefined ? { blockNumber } : { blockTag }),\n } as GetDelegationParameters)\n\n if (!code) return undefined\n\n // EIP-7702 delegation designator: 0xef0100 prefix (3 bytes) + address (20 bytes) = 23 bytes\n if (size(code) !== 23) return undefined\n\n // Check for EIP-7702 delegation designator prefix\n if (!code.startsWith('0xef0100')) return undefined\n\n // Extract the delegated address (bytes 3-23) and checksum it\n return getAddress(slice(code, 3, 23))\n}\n", "import type { Address } from 'abitype'\nimport { BaseError } from './base.js'\n\nexport type Eip712DomainNotFoundErrorType = Eip712DomainNotFoundError & {\n name: 'Eip712DomainNotFoundError'\n}\nexport class Eip712DomainNotFoundError extends BaseError {\n constructor({ address }: { address: Address }) {\n super(`No EIP-712 domain found on contract \"${address}\".`, {\n metaMessages: [\n 'Ensure that:',\n `- The contract is deployed at the address \"${address}\".`,\n '- `eip712Domain()` function exists on the contract.',\n '- `eip712Domain()` function matches signature to ERC-5267 specification.',\n ],\n name: 'Eip712DomainNotFoundError',\n })\n }\n}\n", "import type { Address, TypedDataDomain } from 'abitype'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n Eip712DomainNotFoundError,\n type Eip712DomainNotFoundErrorType,\n} from '../../errors/eip712.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { RequiredBy } from '../../types/utils.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n type ReadContractErrorType,\n type ReadContractParameters,\n readContract,\n} from './readContract.js'\n\nexport type GetEip712DomainParameters = {\n address: Address\n} & Pick\n\nexport type GetEip712DomainReturnType = {\n domain: RequiredBy<\n TypedDataDomain,\n 'chainId' | 'name' | 'verifyingContract' | 'salt' | 'version'\n >\n fields: Hex\n extensions: readonly bigint[]\n}\n\nexport type GetEip712DomainErrorType =\n | Eip712DomainNotFoundErrorType\n | ReadContractErrorType\n | ErrorType\n\n/**\n * Reads the EIP-712 domain from a contract, based on the ERC-5267 specification.\n *\n * @param client - A {@link Client} instance.\n * @param parameters - The parameters of the action. {@link GetEip712DomainParameters}\n * @returns The EIP-712 domain, fields, and extensions. {@link GetEip712DomainReturnType}\n *\n * @example\n * ```ts\n * import { createPublicClient, http, getEip712Domain } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n *\n * const domain = await getEip712Domain(client, {\n * address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n * })\n * // {\n * // domain: {\n * // name: 'ExampleContract',\n * // version: '1',\n * // chainId: 1,\n * // verifyingContract: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n * // },\n * // fields: '0x0f',\n * // extensions: [],\n * // }\n * ```\n */\nexport async function getEip712Domain(\n client: Client,\n parameters: GetEip712DomainParameters,\n): Promise {\n const { address, factory, factoryData } = parameters\n\n try {\n const [\n fields,\n name,\n version,\n chainId,\n verifyingContract,\n salt,\n extensions,\n ] = await getAction(\n client,\n readContract,\n 'readContract',\n )({\n abi,\n address,\n functionName: 'eip712Domain',\n factory,\n factoryData,\n })\n\n return {\n domain: {\n name,\n version,\n chainId: Number(chainId),\n verifyingContract,\n salt,\n },\n extensions,\n fields,\n }\n } catch (e) {\n const error = e as ReadContractErrorType\n if (\n error.name === 'ContractFunctionExecutionError' &&\n error.cause.name === 'ContractFunctionZeroDataError'\n ) {\n throw new Eip712DomainNotFoundError({ address })\n }\n throw error\n }\n}\n\nconst abi = [\n {\n inputs: [],\n name: 'eip712Domain',\n outputs: [\n { name: 'fields', type: 'bytes1' },\n { name: 'name', type: 'string' },\n { name: 'version', type: 'string' },\n { name: 'chainId', type: 'uint256' },\n { name: 'verifyingContract', type: 'address' },\n { name: 'salt', type: 'bytes32' },\n { name: 'extensions', type: 'uint256[]' },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n] as const\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { FeeHistory } from '../../types/fee.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type NumberToHexErrorType,\n numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport {\n type FormatFeeHistoryErrorType,\n formatFeeHistory,\n} from '../../utils/formatters/feeHistory.js'\n\nexport type GetFeeHistoryParameters = {\n /**\n * Number of blocks in the requested range. Between 1 and 1024 blocks can be requested in a single query. Less than requested may be returned if not all blocks are available.\n */\n blockCount: number\n /**\n * A monotonically increasing list of percentile values to sample from each block's effective priority fees per gas in ascending order, weighted by gas used.\n */\n rewardPercentiles: number[]\n} & (\n | {\n blockNumber?: undefined\n /**\n * Highest number block of the requested range.\n * @default 'latest'\n */\n blockTag?: BlockTag | undefined\n }\n | {\n /** Highest number block of the requested range. */\n blockNumber?: bigint | undefined\n blockTag?: undefined\n }\n)\nexport type GetFeeHistoryReturnType = FeeHistory\n\nexport type GetFeeHistoryErrorType =\n | NumberToHexErrorType\n | RequestErrorType\n | FormatFeeHistoryErrorType\n\n/**\n * Returns a collection of historical gas information.\n *\n * - Docs: https://viem.sh/docs/actions/public/getFeeHistory\n * - JSON-RPC Methods: [`eth_feeHistory`](https://docs.alchemy.com/reference/eth-feehistory)\n *\n * @param client - Client to use\n * @param parameters - {@link GetFeeHistoryParameters}\n * @returns The gas estimate (in wei). {@link GetFeeHistoryReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getFeeHistory } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const feeHistory = await getFeeHistory(client, {\n * blockCount: 4,\n * rewardPercentiles: [25, 75],\n * })\n */\nexport async function getFeeHistory(\n client: Client,\n {\n blockCount,\n blockNumber,\n blockTag = 'latest',\n rewardPercentiles,\n }: GetFeeHistoryParameters,\n): Promise {\n const blockNumberHex =\n typeof blockNumber === 'bigint' ? numberToHex(blockNumber) : undefined\n const feeHistory = await client.request(\n {\n method: 'eth_feeHistory',\n params: [\n numberToHex(blockCount),\n blockNumberHex || blockTag,\n rewardPercentiles,\n ],\n },\n { dedupe: Boolean(blockNumberHex) },\n )\n return formatFeeHistory(feeHistory)\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { FeeHistory } from '../../types/fee.js'\nimport type { RpcFeeHistory } from '../../types/rpc.js'\n\nexport type FormatFeeHistoryErrorType = ErrorType\n\nexport function formatFeeHistory(feeHistory: RpcFeeHistory): FeeHistory {\n return {\n baseFeePerGas: feeHistory.baseFeePerGas.map((value) => BigInt(value)),\n gasUsedRatio: feeHistory.gasUsedRatio,\n oldestBlock: BigInt(feeHistory.oldestBlock),\n reward: feeHistory.reward?.map((reward) =>\n reward.map((value) => BigInt(value)),\n ),\n }\n}\n", "import type { Abi, AbiEvent, ExtractAbiEvent } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockNumber, BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { Log } from '../../types/log.js'\nimport type { DecodeEventLogErrorType } from '../../utils/abi/decodeEventLog.js'\nimport { parseEventLogs } from '../../utils/abi/parseEventLogs.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type FormatLogErrorType,\n formatLog,\n} from '../../utils/formatters/log.js'\n\nexport type GetFilterLogsParameters<\n abi extends Abi | readonly unknown[] | undefined = undefined,\n eventName extends string | undefined = undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n> = {\n filter: Filter<'event', abi, eventName, any, strict, fromBlock, toBlock>\n}\nexport type GetFilterLogsReturnType<\n abi extends Abi | readonly unknown[] | undefined = undefined,\n eventName extends string | undefined = undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n _AbiEvent extends AbiEvent | undefined = abi extends Abi\n ? eventName extends string\n ? ExtractAbiEvent\n : undefined\n : undefined,\n _Pending extends boolean =\n | (fromBlock extends 'pending' ? true : false)\n | (toBlock extends 'pending' ? true : false),\n> = Log[]\n\nexport type GetFilterLogsErrorType =\n | RequestErrorType\n | DecodeEventLogErrorType\n | FormatLogErrorType\n | ErrorType\n\n/**\n * Returns a list of event logs since the filter was created.\n *\n * - Docs: https://viem.sh/docs/actions/public/getFilterLogs\n * - JSON-RPC Methods: [`eth_getFilterLogs`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getfilterlogs)\n *\n * `getFilterLogs` is only compatible with **event filters**.\n *\n * @param client - Client to use\n * @param parameters - {@link GetFilterLogsParameters}\n * @returns A list of event logs. {@link GetFilterLogsReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbiItem } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createEventFilter, getFilterLogs } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await createEventFilter(client, {\n * address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',\n * event: parseAbiItem('event Transfer(address indexed, address indexed, uint256)'),\n * })\n * const logs = await getFilterLogs(client, { filter })\n */\nexport async function getFilterLogs<\n chain extends Chain | undefined,\n const abi extends Abi | readonly unknown[] | undefined,\n eventName extends string | undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n>(\n _client: Client,\n {\n filter,\n }: GetFilterLogsParameters,\n): Promise<\n GetFilterLogsReturnType\n> {\n const strict = filter.strict ?? false\n\n const logs = await filter.request({\n method: 'eth_getFilterLogs',\n params: [filter.id],\n })\n\n const formattedLogs = logs.map((log) => formatLog(log))\n if (!filter.abi)\n return formattedLogs as GetFilterLogsReturnType<\n abi,\n eventName,\n strict,\n fromBlock,\n toBlock\n >\n return parseEventLogs({\n abi: filter.abi,\n logs: formattedLogs,\n strict,\n }) as unknown as GetFilterLogsReturnType<\n abi,\n eventName,\n strict,\n fromBlock,\n toBlock\n >\n}\n", "import type { Address } from 'abitype'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { Proof } from '../../types/proof.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type NumberToHexErrorType,\n numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport {\n type FormatProofErrorType,\n formatProof,\n} from '../../utils/formatters/proof.js'\n\nexport type GetProofParameters = {\n /** Account address. */\n address: Address\n /** Array of storage-keys that should be proofed and included. */\n storageKeys: Hash[]\n} & (\n | {\n /** The block number. */\n blockNumber?: bigint | undefined\n blockTag?: undefined\n }\n | {\n blockNumber?: undefined\n /**\n * The block tag.\n * @default 'latest'\n */\n blockTag?: BlockTag | undefined\n }\n)\n\nexport type GetProofReturnType = Proof\n\nexport type GetProofErrorType =\n | NumberToHexErrorType\n | FormatProofErrorType\n | RequestErrorType\n | ErrorType\n\n/**\n * Returns the account and storage values of the specified account including the Merkle-proof.\n *\n * - Docs: https://viem.sh/docs/actions/public/getProof\n * - JSON-RPC Methods:\n * - Calls [`eth_getProof`](https://eips.ethereum.org/EIPS/eip-1186)\n *\n * @param client - Client to use\n * @param parameters - {@link GetProofParameters}\n * @returns Proof data. {@link GetProofReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getProof } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const block = await getProof(client, {\n * address: '0x...',\n * storageKeys: ['0x...'],\n * })\n */\nexport async function getProof(\n client: Client,\n {\n address,\n blockNumber,\n blockTag: blockTag_,\n storageKeys,\n }: GetProofParameters,\n): Promise {\n const blockTag = blockTag_ ?? 'latest'\n\n const blockNumberHex =\n blockNumber !== undefined ? numberToHex(blockNumber) : undefined\n\n const proof = await client.request({\n method: 'eth_getProof',\n params: [address, storageKeys, blockNumberHex || blockTag],\n })\n\n return formatProof(proof)\n}\n", "import type { Address } from 'abitype'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport { type GetAddressErrorType, getAddress } from '../address/getAddress.js'\nimport {\n type IsAddressEqualErrorType,\n isAddressEqual,\n} from '../address/isAddressEqual.js'\nimport {\n type RecoverAuthorizationAddressErrorType,\n type RecoverAuthorizationAddressParameters,\n recoverAuthorizationAddress,\n} from './recoverAuthorizationAddress.js'\n\nexport type VerifyAuthorizationParameters =\n RecoverAuthorizationAddressParameters & {\n /** The address that signed the Authorization object. */\n address: Address\n }\n\nexport type VerifyAuthorizationReturnType = boolean\n\nexport type VerifyAuthorizationErrorType =\n | IsAddressEqualErrorType\n | GetAddressErrorType\n | RecoverAuthorizationAddressErrorType\n | ErrorType\n\n/**\n * Verify that an Authorization object was signed by the provided address.\n *\n * - Docs {@link https://viem.sh/docs/utilities/verifyAuthorization}\n *\n * @param parameters - {@link VerifyAuthorizationParameters}\n * @returns Whether or not the signature is valid. {@link VerifyAuthorizationReturnType}\n */\nexport async function verifyAuthorization({\n address,\n authorization,\n signature,\n}: VerifyAuthorizationParameters): Promise {\n return isAddressEqual(\n getAddress(address),\n await recoverAuthorizationAddress({\n authorization,\n signature,\n }),\n )\n}\n", "import { BaseError } from '../errors/base.js'\nimport {\n HttpRequestError,\n type HttpRequestErrorType,\n type RpcRequestErrorType,\n type TimeoutErrorType,\n type WebSocketRequestErrorType,\n} from '../errors/request.js'\nimport {\n AtomicityNotSupportedError,\n type AtomicityNotSupportedErrorType,\n AtomicReadyWalletRejectedUpgradeError,\n type AtomicReadyWalletRejectedUpgradeErrorType,\n BundleTooLargeError,\n type BundleTooLargeErrorType,\n ChainDisconnectedError,\n type ChainDisconnectedErrorType,\n DuplicateIdError,\n type DuplicateIdErrorType,\n InternalRpcError,\n type InternalRpcErrorType,\n InvalidInputRpcError,\n type InvalidInputRpcErrorType,\n InvalidParamsRpcError,\n type InvalidParamsRpcErrorType,\n InvalidRequestRpcError,\n type InvalidRequestRpcErrorType,\n JsonRpcVersionUnsupportedError,\n type JsonRpcVersionUnsupportedErrorType,\n LimitExceededRpcError,\n type LimitExceededRpcErrorType,\n MethodNotFoundRpcError,\n type MethodNotFoundRpcErrorType,\n MethodNotSupportedRpcError,\n type MethodNotSupportedRpcErrorType,\n ParseRpcError,\n type ParseRpcErrorType,\n ProviderDisconnectedError,\n type ProviderDisconnectedErrorType,\n type ProviderRpcErrorCode,\n ResourceNotFoundRpcError,\n type ResourceNotFoundRpcErrorType,\n ResourceUnavailableRpcError,\n type ResourceUnavailableRpcErrorType,\n type RpcError,\n type RpcErrorCode,\n type RpcErrorType,\n SwitchChainError,\n type SwitchChainErrorType,\n TransactionRejectedRpcError,\n type TransactionRejectedRpcErrorType,\n UnauthorizedProviderError,\n type UnauthorizedProviderErrorType,\n UnknownBundleIdError,\n type UnknownBundleIdErrorType,\n UnknownRpcError,\n type UnknownRpcErrorType,\n UnsupportedChainIdError,\n type UnsupportedChainIdErrorType,\n UnsupportedNonOptionalCapabilityError,\n type UnsupportedNonOptionalCapabilityErrorType,\n UnsupportedProviderMethodError,\n type UnsupportedProviderMethodErrorType,\n UserRejectedRequestError,\n type UserRejectedRequestErrorType,\n WalletConnectSessionSettlementError,\n type WalletConnectSessionSettlementErrorType,\n} from '../errors/rpc.js'\nimport type { ErrorType } from '../errors/utils.js'\nimport type {\n EIP1193RequestFn,\n EIP1193RequestOptions,\n} from '../types/eip1193.js'\nimport type { CreateBatchSchedulerErrorType } from './promise/createBatchScheduler.js'\nimport { withDedupe } from './promise/withDedupe.js'\nimport { type WithRetryErrorType, withRetry } from './promise/withRetry.js'\nimport type { GetSocketRpcClientErrorType } from './rpc/socket.js'\nimport { stringify } from './stringify.js'\n\nexport type RequestErrorType =\n | AtomicityNotSupportedErrorType\n | AtomicReadyWalletRejectedUpgradeErrorType\n | BundleTooLargeErrorType\n | ChainDisconnectedErrorType\n | CreateBatchSchedulerErrorType\n | DuplicateIdErrorType\n | HttpRequestErrorType\n | InternalRpcErrorType\n | InvalidInputRpcErrorType\n | InvalidParamsRpcErrorType\n | InvalidRequestRpcErrorType\n | GetSocketRpcClientErrorType\n | JsonRpcVersionUnsupportedErrorType\n | LimitExceededRpcErrorType\n | MethodNotFoundRpcErrorType\n | MethodNotSupportedRpcErrorType\n | ParseRpcErrorType\n | ProviderDisconnectedErrorType\n | ResourceNotFoundRpcErrorType\n | ResourceUnavailableRpcErrorType\n | RpcErrorType\n | RpcRequestErrorType\n | SwitchChainErrorType\n | TimeoutErrorType\n | TransactionRejectedRpcErrorType\n | UnauthorizedProviderErrorType\n | UnknownBundleIdErrorType\n | UnknownRpcErrorType\n | UnsupportedChainIdErrorType\n | UnsupportedNonOptionalCapabilityErrorType\n | UnsupportedProviderMethodErrorType\n | UserRejectedRequestErrorType\n | WalletConnectSessionSettlementErrorType\n | WebSocketRequestErrorType\n | WithRetryErrorType\n | ErrorType\n\nexport function buildRequest Promise>(\n request: request,\n options: EIP1193RequestOptions = {},\n): EIP1193RequestFn {\n return async (args, overrideOptions = {}) => {\n const {\n dedupe = false,\n methods,\n retryDelay = 150,\n retryCount = 3,\n uid,\n } = {\n ...options,\n ...overrideOptions,\n }\n\n const { method } = args\n if (methods?.exclude?.includes(method))\n throw new MethodNotSupportedRpcError(new Error('method not supported'), {\n method,\n })\n if (methods?.include && !methods.include.includes(method))\n throw new MethodNotSupportedRpcError(new Error('method not supported'), {\n method,\n })\n\n const requestId = dedupe\n ? hashString(`${uid}.${stringify(args)}`)\n : undefined\n return withDedupe(\n () =>\n withRetry(\n async () => {\n try {\n return await request(args)\n } catch (err_) {\n const err = err_ as unknown as RpcError<\n RpcErrorCode | ProviderRpcErrorCode\n >\n switch (err.code) {\n // -32700\n case ParseRpcError.code:\n throw new ParseRpcError(err)\n // -32600\n case InvalidRequestRpcError.code:\n throw new InvalidRequestRpcError(err)\n // -32601\n case MethodNotFoundRpcError.code:\n throw new MethodNotFoundRpcError(err, { method: args.method })\n // -32602\n case InvalidParamsRpcError.code:\n throw new InvalidParamsRpcError(err)\n // -32603\n case InternalRpcError.code:\n throw new InternalRpcError(err)\n // -32000\n case InvalidInputRpcError.code:\n throw new InvalidInputRpcError(err)\n // -32001\n case ResourceNotFoundRpcError.code:\n throw new ResourceNotFoundRpcError(err)\n // -32002\n case ResourceUnavailableRpcError.code:\n throw new ResourceUnavailableRpcError(err)\n // -32003\n case TransactionRejectedRpcError.code:\n throw new TransactionRejectedRpcError(err)\n // -32004\n case MethodNotSupportedRpcError.code:\n throw new MethodNotSupportedRpcError(err, {\n method: args.method,\n })\n // -32005\n case LimitExceededRpcError.code:\n throw new LimitExceededRpcError(err)\n // -32006\n case JsonRpcVersionUnsupportedError.code:\n throw new JsonRpcVersionUnsupportedError(err)\n\n // 4001\n case UserRejectedRequestError.code:\n throw new UserRejectedRequestError(err)\n // 4100\n case UnauthorizedProviderError.code:\n throw new UnauthorizedProviderError(err)\n // 4200\n case UnsupportedProviderMethodError.code:\n throw new UnsupportedProviderMethodError(err)\n // 4900\n case ProviderDisconnectedError.code:\n throw new ProviderDisconnectedError(err)\n // 4901\n case ChainDisconnectedError.code:\n throw new ChainDisconnectedError(err)\n // 4902\n case SwitchChainError.code:\n throw new SwitchChainError(err)\n\n // 5700\n case UnsupportedNonOptionalCapabilityError.code:\n throw new UnsupportedNonOptionalCapabilityError(err)\n // 5710\n case UnsupportedChainIdError.code:\n throw new UnsupportedChainIdError(err)\n // 5720\n case DuplicateIdError.code:\n throw new DuplicateIdError(err)\n // 5730\n case UnknownBundleIdError.code:\n throw new UnknownBundleIdError(err)\n // 5740\n case BundleTooLargeError.code:\n throw new BundleTooLargeError(err)\n // 5750\n case AtomicReadyWalletRejectedUpgradeError.code:\n throw new AtomicReadyWalletRejectedUpgradeError(err)\n // 5760\n case AtomicityNotSupportedError.code:\n throw new AtomicityNotSupportedError(err)\n\n // CAIP-25: User Rejected Error\n // https://docs.walletconnect.com/2.0/specs/clients/sign/error-codes#rejected-caip-25\n case 5000:\n throw new UserRejectedRequestError(err)\n\n // WalletConnect: Session Settlement Failed\n // https://docs.walletconnect.com/2.0/specs/clients/sign/error-codes\n case WalletConnectSessionSettlementError.code:\n throw new WalletConnectSessionSettlementError(err)\n\n default:\n if (err_ instanceof BaseError) throw err_\n throw new UnknownRpcError(err as Error)\n }\n }\n },\n {\n delay: ({ count, error }) => {\n // If we find a Retry-After header, let's retry after the given time.\n if (error && error instanceof HttpRequestError) {\n const retryAfter = error?.headers?.get('Retry-After')\n if (retryAfter?.match(/\\d/))\n return Number.parseInt(retryAfter, 10) * 1000\n }\n\n // Otherwise, let's retry with an exponential backoff.\n return ~~(1 << count) * retryDelay\n },\n retryCount,\n shouldRetry: ({ error }) => shouldRetry(error),\n },\n ),\n { enabled: dedupe, id: requestId },\n )\n }\n}\n\n/** @internal */\nexport function shouldRetry(error: Error) {\n if ('code' in error && typeof error.code === 'number') {\n if (error.code === -1) return true // Unknown error\n if (error.code === LimitExceededRpcError.code) return true\n if (error.code === InternalRpcError.code) return true\n // Too Many Requests \u2014 some providers (e.g. Alchemy in batch mode) return\n // HTTP 200 with a JSON-RPC body of `{ code: 429 }` instead of an HTTP 429,\n // so we need to handle this code in addition to the HTTP status check below.\n if (error.code === 429) return true\n return false\n }\n if (error instanceof HttpRequestError && error.status) {\n // Forbidden\n if (error.status === 403) return true\n // Request Timeout\n if (error.status === 408) return true\n // Request Entity Too Large\n if (error.status === 413) return true\n // Too Many Requests\n if (error.status === 429) return true\n // Internal Server Error\n if (error.status === 500) return true\n // Bad Gateway\n if (error.status === 502) return true\n // Service Unavailable\n if (error.status === 503) return true\n // Gateway Timeout\n if (error.status === 504) return true\n return false\n }\n return true\n}\n\n/** @internal cyrb53 \u2013 fast, non-cryptographic 53-bit string hash */\nfunction hashString(str: string, seed = 0): string {\n let h1 = 0xdeadbeef ^ seed\n let h2 = 0x41c6ce57 ^ seed\n for (let i = 0; i < str.length; i++) {\n const ch = str.charCodeAt(i)\n h1 = Math.imul(h1 ^ ch, 2654435761)\n h2 = Math.imul(h2 ^ ch, 1597334677)\n }\n h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507)\n h1 ^= Math.imul(h2 ^ (h2 >>> 16), 3266489909)\n h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507)\n h2 ^= Math.imul(h1 ^ (h1 >>> 16), 3266489909)\n return (4294967296 * (2097151 & h2) + (h1 >>> 0)).toString(36)\n}\n", "import { LruMap } from '../lru.js'\n\n/** @internal */\nexport const promiseCache = /*#__PURE__*/ new LruMap>(8192)\n\ntype WithDedupeOptions = {\n enabled?: boolean | undefined\n id?: string | undefined\n}\n\n/** Deduplicates in-flight promises. */\nexport function withDedupe(\n fn: () => Promise,\n { enabled = true, id }: WithDedupeOptions,\n): Promise {\n if (!enabled || !id) return fn()\n if (promiseCache.get(id)) return promiseCache.get(id)!\n const promise = fn().finally(() => promiseCache.delete(id))\n promiseCache.set(id, promise)\n return promise\n}\n", "// biome-ignore lint/performance/noBarrelFile: entrypoint module\nexport {\n type ParseAbi,\n type ParseAbiItem,\n type ParseAbiParameter,\n type ParseAbiParameters,\n parseAbi,\n parseAbiItem,\n parseAbiParameter,\n parseAbiParameters,\n} from 'abitype'\nexport {\n type ParseAccountErrorType,\n parseAccount,\n} from '../accounts/utils/parseAccount.js'\nexport {\n type PublicKeyToAddressErrorType,\n publicKeyToAddress,\n} from '../accounts/utils/publicKeyToAddress.js'\nexport {\n type DecodeAbiParametersErrorType,\n type DecodeAbiParametersReturnType,\n decodeAbiParameters,\n} from './abi/decodeAbiParameters.js'\nexport {\n type DecodeErrorResultErrorType,\n type DecodeErrorResultParameters,\n type DecodeErrorResultReturnType,\n decodeErrorResult,\n} from './abi/decodeErrorResult.js'\nexport {\n type DecodeEventLogErrorType,\n type DecodeEventLogParameters,\n type DecodeEventLogReturnType,\n decodeEventLog,\n} from './abi/decodeEventLog.js'\nexport {\n type DecodeFunctionDataErrorType,\n type DecodeFunctionDataParameters,\n type DecodeFunctionDataReturnType,\n decodeFunctionData,\n} from './abi/decodeFunctionData.js'\nexport {\n type DecodeFunctionResultErrorType,\n type DecodeFunctionResultParameters,\n type DecodeFunctionResultReturnType,\n decodeFunctionResult,\n} from './abi/decodeFunctionResult.js'\nexport {\n type EncodeAbiParametersErrorType,\n type EncodeAbiParametersReturnType,\n encodeAbiParameters,\n} from './abi/encodeAbiParameters.js'\nexport {\n type EncodeDeployDataErrorType,\n type EncodeDeployDataParameters,\n encodeDeployData,\n} from './abi/encodeDeployData.js'\nexport {\n type EncodeErrorResultErrorType,\n type EncodeErrorResultParameters,\n encodeErrorResult,\n} from './abi/encodeErrorResult.js'\nexport {\n type EncodeArgErrorType,\n type EncodeEventTopicsParameters,\n type EncodeEventTopicsReturnType,\n encodeEventTopics,\n} from './abi/encodeEventTopics.js'\nexport {\n type EncodeFunctionDataErrorType,\n type EncodeFunctionDataParameters,\n encodeFunctionData,\n} from './abi/encodeFunctionData.js'\nexport {\n type EncodeFunctionResultErrorType,\n type EncodeFunctionResultParameters,\n encodeFunctionResult,\n} from './abi/encodeFunctionResult.js'\nexport { type EncodePackedErrorType, encodePacked } from './abi/encodePacked.js'\nexport {\n type FormatAbiItemErrorType,\n type FormatAbiParamErrorType,\n type FormatAbiParamsErrorType,\n formatAbiItem,\n formatAbiParams,\n} from './abi/formatAbiItem.js'\nexport {\n type FormatAbiItemWithArgsErrorType,\n formatAbiItemWithArgs,\n} from './abi/formatAbiItemWithArgs.js'\nexport {\n type GetAbiItemErrorType,\n type GetAbiItemParameters,\n getAbiItem,\n} from './abi/getAbiItem.js'\nexport {\n type ParseEventLogsErrorType,\n type ParseEventLogsParameters,\n type ParseEventLogsReturnType,\n parseEventLogs,\n} from './abi/parseEventLogs.js'\nexport {\n type ChecksumAddressErrorType,\n getAddress,\n} from './address/getAddress.js'\nexport {\n type GetContractAddressOptions,\n type GetCreate2AddressErrorType,\n type GetCreate2AddressOptions,\n type GetCreateAddressErrorType,\n type GetCreateAddressOptions,\n getContractAddress,\n getCreate2Address,\n getCreateAddress,\n} from './address/getContractAddress.js'\nexport { type IsAddressErrorType, isAddress } from './address/isAddress.js'\nexport {\n type IsAddressEqualErrorType,\n isAddressEqual,\n} from './address/isAddressEqual.js'\nexport {\n type HashAuthorizationErrorType,\n type HashAuthorizationParameters,\n type HashAuthorizationReturnType,\n hashAuthorization,\n} from './authorization/hashAuthorization.js'\nexport {\n type RecoverAuthorizationAddressErrorType,\n type RecoverAuthorizationAddressParameters,\n type RecoverAuthorizationAddressReturnType,\n recoverAuthorizationAddress,\n} from './authorization/recoverAuthorizationAddress.js'\nexport {\n type SerializeAuthorizationListErrorType,\n type SerializeAuthorizationListReturnType,\n serializeAuthorizationList,\n} from './authorization/serializeAuthorizationList.js'\nexport {\n type VerifyAuthorizationErrorType,\n type VerifyAuthorizationParameters,\n type VerifyAuthorizationReturnType,\n verifyAuthorization,\n} from './authorization/verifyAuthorization.js'\nexport {\n buildRequest,\n type RequestErrorType,\n} from './buildRequest.js'\nexport {\n ccipRequest,\n /** @deprecated Use `ccipRequest`. */\n ccipRequest as ccipFetch,\n type OffchainLookupErrorType,\n offchainLookup,\n offchainLookupAbiItem,\n offchainLookupSignature,\n} from './ccip.js'\nexport {\n type AssertCurrentChainErrorType,\n type AssertCurrentChainParameters,\n assertCurrentChain,\n} from './chain/assertCurrentChain.js'\nexport { defineChain } from './chain/defineChain.js'\nexport {\n type ExtractChainErrorType,\n type ExtractChainParameters,\n type ExtractChainReturnType,\n extractChain,\n} from './chain/extractChain.js'\nexport {\n type GetChainContractAddressErrorType,\n getChainContractAddress,\n} from './chain/getChainContractAddress.js'\nexport {\n type ConcatBytesErrorType,\n type ConcatErrorType,\n type ConcatHexErrorType,\n concat,\n concatBytes,\n concatHex,\n} from './data/concat.js'\nexport { type IsBytesErrorType, isBytes } from './data/isBytes.js'\nexport { type IsHexErrorType, isHex } from './data/isHex.js'\nexport {\n type PadBytesErrorType,\n type PadErrorType,\n type PadHexErrorType,\n pad,\n padBytes,\n padHex,\n} from './data/pad.js'\nexport { type SizeErrorType, size } from './data/size.js'\nexport {\n type AssertEndOffsetErrorType,\n type AssertStartOffsetErrorType,\n type SliceBytesErrorType,\n type SliceErrorType,\n type SliceHexErrorType,\n type SliceReturnType,\n slice,\n sliceBytes,\n sliceHex,\n} from './data/slice.js'\nexport { type TrimErrorType, type TrimReturnType, trim } from './data/trim.js'\nexport {\n type BytesToBigIntErrorType,\n type BytesToBigIntOpts,\n type BytesToBoolErrorType,\n type BytesToBoolOpts,\n type BytesToNumberErrorType,\n type BytesToNumberOpts,\n type BytesToStringErrorType,\n type BytesToStringOpts,\n bytesToBigInt,\n bytesToBigInt as bytesToBigint,\n bytesToBool,\n bytesToNumber,\n bytesToString,\n type FromBytesErrorType,\n type FromBytesParameters,\n type FromBytesReturnType,\n fromBytes,\n} from './encoding/fromBytes.js'\nexport {\n type AssertSizeErrorType,\n type FromHexErrorType,\n type FromHexParameters,\n type FromHexReturnType,\n fromHex,\n type HexToBigIntErrorType,\n type HexToBigIntOpts,\n type HexToBoolErrorType,\n type HexToBoolOpts,\n type HexToNumberErrorType,\n type HexToNumberOpts,\n type HexToStringErrorType,\n type HexToStringOpts,\n hexToBigInt,\n hexToBool,\n hexToNumber,\n hexToString,\n} from './encoding/fromHex.js'\nexport {\n type FromRlpErrorType,\n fromRlp,\n} from './encoding/fromRlp.js'\nexport {\n type BoolToBytesErrorType,\n type BoolToBytesOpts,\n boolToBytes,\n type HexToBytesErrorType,\n type HexToBytesOpts,\n hexToBytes,\n type NumberToBytesErrorType,\n numberToBytes,\n type StringToBytesErrorType,\n type StringToBytesOpts,\n stringToBytes,\n type ToBytesErrorType,\n type ToBytesParameters,\n toBytes,\n} from './encoding/toBytes.js'\nexport {\n type BoolToHexErrorType,\n type BoolToHexOpts,\n type BytesToHexErrorType,\n type BytesToHexOpts,\n boolToHex,\n bytesToHex,\n type NumberToHexErrorType,\n type NumberToHexOpts,\n numberToHex,\n type StringToHexErrorType,\n type StringToHexOpts,\n stringToHex,\n type ToHexErrorType,\n type ToHexParameters,\n toHex,\n} from './encoding/toHex.js'\nexport {\n type BytesToRlpErrorType,\n type HexToRlpErrorType,\n type ToRlpErrorType,\n type ToRlpReturnType,\n toRlp,\n} from './encoding/toRlp.js'\nexport {\n type GetCallErrorReturnType,\n getCallError,\n} from './errors/getCallError.js'\nexport {\n type GetContractErrorReturnType,\n getContractError,\n} from './errors/getContractError.js'\nexport {\n type GetEstimateGasErrorReturnType,\n getEstimateGasError,\n} from './errors/getEstimateGasError.js'\nexport {\n containsNodeError,\n type GetNodeErrorParameters,\n type GetNodeErrorReturnType,\n getNodeError,\n} from './errors/getNodeError.js'\nexport {\n type GetTransactionErrorParameters,\n type GetTransactionErrorReturnType,\n getTransactionError,\n} from './errors/getTransactionError.js'\nexport {\n type DefineBlockErrorType,\n defineBlock,\n type FormatBlockErrorType,\n type FormattedBlock,\n formatBlock,\n} from './formatters/block.js'\nexport { type ExtractErrorType, extract } from './formatters/extract.js'\nexport {\n type DefineFormatterErrorType,\n defineFormatter,\n} from './formatters/formatter.js'\nexport { type FormatLogErrorType, formatLog } from './formatters/log.js'\nexport {\n type DefineTransactionErrorType,\n defineTransaction,\n type FormatTransactionErrorType,\n type FormattedTransaction,\n formatTransaction,\n transactionType,\n} from './formatters/transaction.js'\nexport {\n type DefineTransactionReceiptErrorType,\n defineTransactionReceipt,\n type FormatTransactionReceiptErrorType,\n type FormattedTransactionReceipt,\n} from './formatters/transactionReceipt.js'\nexport {\n type DefineTransactionRequestErrorType,\n defineTransactionRequest,\n type FormatTransactionRequestErrorType,\n type FormattedTransactionRequest,\n formatTransactionRequest,\n} from './formatters/transactionRequest.js'\nexport { getAction } from './getAction.js'\nexport { type IsHashErrorType, isHash } from './hash/isHash.js'\nexport { type Keccak256ErrorType, keccak256 } from './hash/keccak256.js'\nexport { type Ripemd160ErrorType, ripemd160 } from './hash/ripemd160.js'\nexport { type Sha256ErrorType, sha256 } from './hash/sha256.js'\nexport {\n type ToEventHashErrorType,\n toEventHash,\n} from './hash/toEventHash.js'\nexport {\n type ToEventSelectorErrorType,\n /** @deprecated use `ToEventSelectorErrorType`. */\n type ToEventSelectorErrorType as GetEventSelectorErrorType,\n toEventSelector,\n /** @deprecated use `toEventSelector`. */\n toEventSelector as getEventSelector,\n} from './hash/toEventSelector.js'\nexport {\n type ToEventSignatureErrorType,\n /** @deprecated use `ToEventSignatureErrorType`. */\n type ToEventSignatureErrorType as GetEventSignatureErrorType,\n toEventSignature,\n /** @deprecated use `toEventSignature`. */\n toEventSignature as getEventSignature,\n} from './hash/toEventSignature.js'\nexport {\n type ToFunctionHashErrorType,\n toFunctionHash,\n} from './hash/toFunctionHash.js'\nexport {\n type ToFunctionSelectorErrorType,\n /** @deprecated use `ToFunctionSelectorErrorType`. */\n type ToFunctionSelectorErrorType as GetFunctionSelectorErrorType,\n toFunctionSelector,\n /** @deprecated use `toFunctionSelector`. */\n toFunctionSelector as getFunctionSelector,\n} from './hash/toFunctionSelector.js'\nexport {\n type ToFunctionSignatureErrorType,\n /** @deprecated use `ToFunctionSignatureErrorType`. */\n type ToFunctionSignatureErrorType as GetFunctionSignatureErrorType,\n toFunctionSignature,\n /** @deprecated use `toFunctionSignature`. */\n toFunctionSignature as getFunctionSignature,\n} from './hash/toFunctionSignature.js'\nexport {\n type CreateNonceManagerParameters,\n createNonceManager,\n type NonceManager,\n type NonceManagerSource,\n nonceManager,\n} from './nonceManager.js'\nexport { arrayRegex, bytesRegex, integerRegex } from './regex.js'\nexport {\n getSocket,\n rpc,\n type WebSocketAsyncErrorType,\n type WebSocketAsyncOptions,\n type WebSocketAsyncReturnType,\n type WebSocketErrorType,\n type WebSocketOptions,\n type WebSocketReturnType,\n} from './rpc/compat.js'\nexport {\n getHttpRpcClient,\n type HttpRequestErrorType,\n type HttpRequestParameters,\n type HttpRequestReturnType,\n type HttpRpcClient,\n type HttpRpcClientOptions,\n} from './rpc/http.js'\nexport {\n type GetSocketParameters,\n type GetSocketRpcClientErrorType,\n type GetSocketRpcClientParameters,\n getSocketRpcClient,\n type Socket,\n type SocketRpcClient,\n socketClientCache,\n} from './rpc/socket.js'\nexport { getWebSocketRpcClient } from './rpc/webSocket.js'\nexport {\n type HashMessageErrorType,\n type HashMessageReturnType,\n hashMessage,\n} from './signature/hashMessage.js'\nexport {\n type HashDomainErrorType,\n type HashStructErrorType,\n type HashTypedDataParameters,\n type HashTypedDataReturnType,\n hashStruct,\n hashTypedData,\n} from './signature/hashTypedData.js'\nexport {\n type IsErc6492SignatureErrorType,\n type IsErc6492SignatureParameters,\n type IsErc6492SignatureReturnType,\n isErc6492Signature,\n} from './signature/isErc6492Signature.js'\nexport {\n type IsErc8010SignatureErrorType,\n type IsErc8010SignatureParameters,\n type IsErc8010SignatureReturnType,\n isErc8010Signature,\n} from './signature/isErc8010Signature.js'\nexport {\n type ParseErc6492SignatureErrorType,\n type ParseErc6492SignatureParameters,\n type ParseErc6492SignatureReturnType,\n parseErc6492Signature,\n} from './signature/parseErc6492Signature.js'\nexport {\n type ParseErc8010SignatureErrorType,\n type ParseErc8010SignatureParameters,\n type ParseErc8010SignatureReturnType,\n parseErc8010Signature,\n} from './signature/parseErc8010Signature.js'\nexport {\n type RecoverAddressErrorType,\n type RecoverAddressParameters,\n type RecoverAddressReturnType,\n recoverAddress,\n} from './signature/recoverAddress.js'\nexport {\n type RecoverMessageAddressErrorType,\n type RecoverMessageAddressParameters,\n type RecoverMessageAddressReturnType,\n recoverMessageAddress,\n} from './signature/recoverMessageAddress.js'\nexport {\n type RecoverPublicKeyErrorType,\n type RecoverPublicKeyParameters,\n type RecoverPublicKeyReturnType,\n recoverPublicKey,\n} from './signature/recoverPublicKey.js'\nexport {\n type RecoverTypedDataAddressErrorType,\n type RecoverTypedDataAddressParameters,\n type RecoverTypedDataAddressReturnType,\n recoverTypedDataAddress,\n} from './signature/recoverTypedDataAddress.js'\nexport {\n type SerializeErc6492SignatureErrorType,\n type SerializeErc6492SignatureParameters,\n type SerializeErc6492SignatureReturnType,\n serializeErc6492Signature,\n} from './signature/serializeErc6492Signature.js'\nexport {\n type SerializeErc8010SignatureErrorType,\n type SerializeErc8010SignatureParameters,\n type SerializeErc8010SignatureReturnType,\n serializeErc8010Signature,\n} from './signature/serializeErc8010Signature.js'\nexport {\n type VerifyHashErrorType,\n type VerifyHashParameters,\n type VerifyHashReturnType,\n verifyHash,\n} from './signature/verifyHash.js'\nexport {\n type VerifyMessageErrorType,\n type VerifyMessageParameters,\n type VerifyMessageReturnType,\n verifyMessage,\n} from './signature/verifyMessage.js'\nexport {\n type VerifyTypedDataErrorType,\n type VerifyTypedDataParameters,\n type VerifyTypedDataReturnType,\n verifyTypedData,\n} from './signature/verifyTypedData.js'\nexport { type StringifyErrorType, stringify } from './stringify.js'\nexport {\n type AssertRequestErrorType,\n assertRequest,\n} from './transaction/assertRequest.js'\nexport {\n type AssertTransactionEIP1559ErrorType,\n type AssertTransactionEIP2930ErrorType,\n type AssertTransactionLegacyErrorType,\n assertTransactionEIP1559,\n assertTransactionEIP2930,\n assertTransactionLegacy,\n} from './transaction/assertTransaction.js'\nexport {\n type GetSerializedTransactionType,\n type GetSerializedTransactionTypeErrorType,\n getSerializedTransactionType,\n} from './transaction/getSerializedTransactionType.js'\nexport {\n type GetTransactionType,\n type GetTransactionTypeErrorType,\n getTransactionType,\n} from './transaction/getTransactionType.js'\nexport {\n type ParseTransactionErrorType,\n parseTransaction,\n} from './transaction/parseTransaction.js'\nexport {\n type SerializeAccessListErrorType,\n serializeAccessList,\n} from './transaction/serializeAccessList.js'\nexport {\n type SerializeTransactionErrorType,\n type SerializeTransactionFn,\n serializeTransaction,\n} from './transaction/serializeTransaction.js'\nexport {\n type DomainSeparatorErrorType,\n type SerializeTypedDataErrorType,\n serializeTypedData,\n type ValidateTypedDataErrorType,\n validateTypedData,\n} from './typedData.js'\nexport { type FormatEtherErrorType, formatEther } from './unit/formatEther.js'\nexport { type FormatGweiErrorType, formatGwei } from './unit/formatGwei.js'\nexport { type FormatUnitsErrorType, formatUnits } from './unit/formatUnits.js'\nexport { type ParseEtherErrorType, parseEther } from './unit/parseEther.js'\nexport { type ParseGweiErrorType, parseGwei } from './unit/parseGwei.js'\nexport { type ParseUnitsErrorType, parseUnits } from './unit/parseUnits.js'\n", "import {\n HttpRequestError,\n type HttpRequestErrorType as HttpRequestErrorType_,\n TimeoutError,\n type TimeoutErrorType,\n} from '../../errors/request.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { RpcRequest, RpcResponse } from '../../types/rpc.js'\nimport type { MaybePromise } from '../../types/utils.js'\nimport {\n type WithTimeoutErrorType,\n withTimeout,\n} from '../promise/withTimeout.js'\nimport { stringify } from '../stringify.js'\nimport { idCache } from './id.js'\n\nexport type HttpRpcClientOptions = {\n /** Override for the fetch function used to make requests. */\n fetchFn?:\n | ((input: string | URL | Request, init?: RequestInit) => Promise)\n | undefined\n /** Request configuration to pass to `fetch`. */\n fetchOptions?: Omit | undefined\n /** A callback to handle the request. */\n onRequest?:\n | ((\n request: Request,\n init: RequestInit,\n ) => MaybePromise<\n void | undefined | (RequestInit & { url?: string | undefined })\n >)\n | undefined\n /** A callback to handle the response. */\n onResponse?: ((response: Response) => Promise | void) | undefined\n /** The timeout (in ms) for the request. */\n timeout?: number | undefined\n}\n\nexport type HttpRequestParameters<\n body extends RpcRequest | RpcRequest[] = RpcRequest,\n> = {\n /** The RPC request body. */\n body: body\n /** Override for the fetch function used to make requests. */\n fetchFn?: HttpRpcClientOptions['fetchFn'] | undefined\n /** Request configuration to pass to `fetch`. */\n fetchOptions?: HttpRpcClientOptions['fetchOptions'] | undefined\n /** A callback to handle the response. */\n onRequest?:\n | ((\n request: Request,\n init: RequestInit,\n ) => MaybePromise<\n void | undefined | (RequestInit & { url?: string | undefined })\n >)\n | undefined\n /** A callback to handle the response. */\n onResponse?: ((response: Response) => Promise | void) | undefined\n /** The timeout (in ms) for the request. */\n timeout?: HttpRpcClientOptions['timeout'] | undefined\n}\n\nexport type HttpRequestReturnType<\n body extends RpcRequest | RpcRequest[] = RpcRequest,\n> = body extends RpcRequest[] ? RpcResponse[] : RpcResponse\n\nexport type HttpRequestErrorType =\n | HttpRequestErrorType_\n | TimeoutErrorType\n | WithTimeoutErrorType\n | ErrorType\n\nexport type HttpRpcClient = {\n request(\n params: HttpRequestParameters,\n ): Promise>\n}\n\nexport function getHttpRpcClient(\n url_: string,\n options: HttpRpcClientOptions = {},\n): HttpRpcClient {\n const { url, headers: headers_url } = parseUrl(url_)\n\n return {\n async request(params) {\n const {\n body,\n fetchFn = options.fetchFn ?? fetch,\n onRequest = options.onRequest,\n onResponse = options.onResponse,\n timeout = options.timeout ?? 10_000,\n } = params\n\n const fetchOptions = {\n ...(options.fetchOptions ?? {}),\n ...(params.fetchOptions ?? {}),\n }\n\n const { headers, method, signal: signal_ } = fetchOptions\n\n try {\n const response = await withTimeout(\n async ({ signal }) => {\n const init: RequestInit = {\n ...fetchOptions,\n body: Array.isArray(body)\n ? stringify(\n body.map((body) => ({\n jsonrpc: '2.0',\n id: body.id ?? idCache.take(),\n ...body,\n })),\n )\n : stringify({\n jsonrpc: '2.0',\n id: body.id ?? idCache.take(),\n ...body,\n }),\n headers: {\n ...headers_url,\n 'Content-Type': 'application/json',\n ...headers,\n },\n method: method || 'POST',\n signal: signal_ || (timeout > 0 ? signal : null),\n }\n const request = new Request(url, init)\n const args = (await onRequest?.(request, init)) ?? { ...init, url }\n const response = await fetchFn(args.url ?? url, args)\n return response\n },\n {\n errorInstance: new TimeoutError({ body, url }),\n timeout,\n signal: true,\n },\n )\n\n if (onResponse) await onResponse(response)\n\n let data: any\n if (\n response.headers.get('Content-Type')?.startsWith('application/json')\n )\n data = await response.json()\n else {\n data = await response.text()\n try {\n data = JSON.parse(data || '{}')\n } catch (err) {\n if (response.ok) throw err\n data = { error: data }\n }\n }\n\n if (!response.ok) {\n // If the response body contains a valid JSON-RPC error, return it\n // so it flows through the normal RPC error handling pipeline.\n if (\n typeof data.error?.code === 'number' &&\n typeof data.error?.message === 'string'\n )\n return data\n\n throw new HttpRequestError({\n body,\n details: stringify(data.error) || response.statusText,\n headers: response.headers,\n status: response.status,\n url,\n })\n }\n\n return data\n } catch (err) {\n if (err instanceof HttpRequestError) throw err\n if (err instanceof TimeoutError) throw err\n throw new HttpRequestError({\n body,\n cause: err as Error,\n url,\n })\n }\n },\n }\n}\n\n/** @internal */\nexport function parseUrl(url_: string) {\n try {\n const url = new URL(url_)\n\n const result = (() => {\n // Handle Basic authentication credentials\n if (url.username) {\n const credentials = `${decodeURIComponent(url.username)}:${decodeURIComponent(url.password)}`\n url.username = ''\n url.password = ''\n\n return {\n url: url.toString(),\n headers: { Authorization: `Basic ${btoa(credentials)}` },\n }\n }\n\n return\n })()\n\n return { url: url.toString(), ...result }\n } catch {\n return { url: url_ }\n }\n}\n", "import type { ErrorType } from '../../errors/utils.js'\n\nexport type WithTimeoutErrorType = ErrorType\n\nexport function withTimeout(\n fn: ({\n signal,\n }: {\n signal: AbortController['signal'] | null\n }) => Promise,\n {\n errorInstance = new Error('timed out'),\n timeout,\n signal,\n }: {\n // The error instance to throw when the timeout is reached.\n errorInstance?: Error | undefined\n // The timeout (in ms).\n timeout: number\n // Whether or not the timeout should use an abort signal.\n signal?: boolean | undefined\n },\n): Promise {\n return new Promise((resolve, reject) => {\n ;(async () => {\n let timeoutId!: NodeJS.Timeout\n try {\n const controller = new AbortController()\n if (timeout > 0) {\n timeoutId = setTimeout(() => {\n if (signal) {\n controller.abort()\n } else {\n reject(errorInstance)\n }\n }, timeout) as NodeJS.Timeout // need to cast because bun globals.d.ts overrides @types/node\n }\n resolve(await fn({ signal: controller?.signal || null }))\n } catch (err) {\n if ((err as Error)?.name === 'AbortError') reject(errorInstance)\n reject(err)\n } finally {\n clearTimeout(timeoutId)\n }\n })()\n })\n}\n", "function createIdStore() {\n return {\n current: 0,\n take() {\n return this.current++\n },\n reset() {\n this.current = 0\n },\n }\n}\n\nexport const idCache = /*#__PURE__*/ createIdStore()\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex, SignableMessage } from '../../types/misc.js'\nimport { type Keccak256ErrorType, keccak256 } from '../hash/keccak256.js'\nimport { toPrefixedMessage } from './toPrefixedMessage.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type HashMessageReturnType =\n | (to extends 'bytes' ? ByteArray : never)\n | (to extends 'hex' ? Hex : never)\n\nexport type HashMessageErrorType = Keccak256ErrorType | ErrorType\n\nexport function hashMessage(\n message: SignableMessage,\n to_?: to | undefined,\n): HashMessageReturnType {\n return keccak256(toPrefixedMessage(message), to_)\n}\n", "export const presignMessagePrefix = '\\x19Ethereum Signed Message:\\n'\n", "import { presignMessagePrefix } from '../../constants/strings.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Hex, SignableMessage } from '../../types/misc.js'\nimport { type ConcatErrorType, concat } from '../data/concat.js'\nimport { size } from '../data/size.js'\nimport {\n type BytesToHexErrorType,\n bytesToHex,\n type StringToHexErrorType,\n stringToHex,\n} from '../encoding/toHex.js'\n\nexport type ToPrefixedMessageErrorType =\n | ConcatErrorType\n | StringToHexErrorType\n | BytesToHexErrorType\n | ErrorType\n\nexport function toPrefixedMessage(message_: SignableMessage): Hex {\n const message = (() => {\n if (typeof message_ === 'string') return stringToHex(message_)\n if (typeof message_.raw === 'string') return message_.raw\n return bytesToHex(message_.raw)\n })()\n const prefix = stringToHex(`${presignMessagePrefix}${size(message)}`)\n return concat([prefix, message])\n}\n", "// Implementation forked and adapted from https://github.com/MetaMask/eth-sig-util/blob/main/src/sign-typed-data.ts\n\nimport type { AbiParameter, TypedData } from 'abitype'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\nimport type {\n EIP712DomainDefinition,\n MessageDefinition,\n TypedDataDefinition,\n} from '../../types/typedData.js'\nimport type { UnionOmit } from '../../types/utils.js'\nimport {\n type EncodeAbiParametersErrorType,\n encodeAbiParameters,\n} from '../abi/encodeAbiParameters.js'\nimport { concat } from '../data/concat.js'\nimport { type ToHexErrorType, toHex } from '../encoding/toHex.js'\nimport { type Keccak256ErrorType, keccak256 } from '../hash/keccak256.js'\nimport {\n type GetTypesForEIP712DomainErrorType,\n getTypesForEIP712Domain,\n type ValidateTypedDataErrorType,\n validateTypedData,\n} from '../typedData.js'\n\ntype MessageTypeProperty = {\n name: string\n type: string\n}\n\nexport type HashTypedDataParameters<\n typedData extends TypedData | Record = TypedData,\n primaryType extends keyof typedData | 'EIP712Domain' = keyof typedData,\n> = TypedDataDefinition\n\nexport type HashTypedDataReturnType = Hex\n\nexport type HashTypedDataErrorType =\n | GetTypesForEIP712DomainErrorType\n | HashDomainErrorType\n | HashStructErrorType\n | ValidateTypedDataErrorType\n | ErrorType\n\nexport function hashTypedData<\n const typedData extends TypedData | Record,\n primaryType extends keyof typedData | 'EIP712Domain',\n>(\n parameters: HashTypedDataParameters,\n): HashTypedDataReturnType {\n const {\n domain = {},\n message,\n primaryType,\n } = parameters as HashTypedDataParameters\n const types = {\n EIP712Domain: getTypesForEIP712Domain({ domain }),\n ...parameters.types,\n }\n\n // Need to do a runtime validation check on addresses, byte ranges, integer ranges, etc\n // as we can't statically check this with TypeScript.\n validateTypedData({\n domain,\n message,\n primaryType,\n types,\n })\n\n const parts: Hex[] = ['0x1901']\n if (domain)\n parts.push(\n hashDomain({\n domain,\n types: types as Record,\n }),\n )\n\n if (primaryType !== 'EIP712Domain')\n parts.push(\n hashStruct({\n data: message,\n primaryType,\n types: types as Record,\n }),\n )\n\n return keccak256(concat(parts))\n}\n\nexport type HashDomainErrorType = HashStructErrorType | ErrorType\n\nexport function hashDomain<\n const typedData extends TypedData | Record = TypedData,\n>({\n domain,\n types,\n}: UnionOmit, 'primaryType'>) {\n return hashStruct({\n data: domain as Record,\n primaryType: 'EIP712Domain',\n types: types as Record,\n })\n}\n\nexport type HashStructErrorType =\n | EncodeDataErrorType\n | Keccak256ErrorType\n | ErrorType\n\nexport function hashStruct<\n const typedData extends TypedData | Record,\n primaryType extends keyof typedData | 'EIP712Domain',\n>({\n data,\n primaryType,\n types,\n}: MessageDefinition) {\n const encoded = encodeData({\n data: data as Record,\n primaryType,\n types: types as Record,\n })\n return keccak256(encoded)\n}\n\ntype EncodeDataErrorType =\n | EncodeAbiParametersErrorType\n | EncodeFieldErrorType\n | HashTypeErrorType\n | ErrorType\n\nfunction encodeData({\n data,\n primaryType,\n types,\n}: {\n data: Record\n primaryType: string\n types: Record\n}) {\n const encodedTypes: AbiParameter[] = [{ type: 'bytes32' }]\n const encodedValues: unknown[] = [hashType({ primaryType, types })]\n\n for (const field of types[primaryType]) {\n const [type, value] = encodeField({\n types,\n name: field.name,\n type: field.type,\n value: data[field.name],\n })\n encodedTypes.push(type)\n encodedValues.push(value)\n }\n\n return encodeAbiParameters(encodedTypes, encodedValues)\n}\n\ntype HashTypeErrorType =\n | ToHexErrorType\n | EncodeTypeErrorType\n | Keccak256ErrorType\n | ErrorType\n\nfunction hashType({\n primaryType,\n types,\n}: {\n primaryType: string\n types: Record\n}) {\n const encodedHashType = toHex(encodeType({ primaryType, types }))\n return keccak256(encodedHashType)\n}\n\ntype EncodeTypeErrorType = FindTypeDependenciesErrorType\n\nexport function encodeType({\n primaryType,\n types,\n}: {\n primaryType: string\n types: Record\n}) {\n let result = ''\n const unsortedDeps = findTypeDependencies({ primaryType, types })\n unsortedDeps.delete(primaryType)\n\n const deps = [primaryType, ...Array.from(unsortedDeps).sort()]\n for (const type of deps) {\n result += `${type}(${types[type]\n .map(({ name, type: t }) => `${t} ${name}`)\n .join(',')})`\n }\n\n return result\n}\n\ntype FindTypeDependenciesErrorType = ErrorType\n\nfunction findTypeDependencies(\n {\n primaryType: primaryType_,\n types,\n }: {\n primaryType: string\n types: Record\n },\n results: Set = new Set(),\n): Set {\n const match = primaryType_.match(/^\\w*/u)\n const primaryType = match?.[0]!\n if (results.has(primaryType) || types[primaryType] === undefined) {\n return results\n }\n\n results.add(primaryType)\n\n for (const field of types[primaryType]) {\n findTypeDependencies({ primaryType: field.type, types }, results)\n }\n return results\n}\n\ntype EncodeFieldErrorType =\n | Keccak256ErrorType\n | EncodeAbiParametersErrorType\n | ToHexErrorType\n | ErrorType\n\nfunction encodeField({\n types,\n name,\n type,\n value,\n}: {\n types: Record\n name: string\n type: string\n value: any\n}): [type: AbiParameter, value: any] {\n if (types[type] !== undefined) {\n return [\n { type: 'bytes32' },\n keccak256(encodeData({ data: value, primaryType: type, types })),\n ]\n }\n\n if (type === 'bytes') return [{ type: 'bytes32' }, keccak256(value)]\n\n if (type === 'string') return [{ type: 'bytes32' }, keccak256(toHex(value))]\n\n if (type.lastIndexOf(']') === type.length - 1) {\n const parsedType = type.slice(0, type.lastIndexOf('['))\n const typeValuePairs = (value as [AbiParameter, any][]).map((item) =>\n encodeField({\n name,\n type: parsedType,\n types,\n value: item,\n }),\n )\n return [\n { type: 'bytes32' },\n keccak256(\n encodeAbiParameters(\n typeValuePairs.map(([t]) => t),\n typeValuePairs.map(([, v]) => v),\n ),\n ),\n ]\n }\n\n return [{ type }, value]\n}\n", "import type { TypedData, TypedDataDomain, TypedDataParameter } from 'abitype'\n\nimport { BytesSizeMismatchError } from '../errors/abi.js'\nimport { InvalidAddressError } from '../errors/address.js'\nimport {\n InvalidDomainError,\n InvalidPrimaryTypeError,\n InvalidStructTypeError,\n} from '../errors/typedData.js'\nimport type { ErrorType } from '../errors/utils.js'\nimport type { Hex } from '../types/misc.js'\nimport type { TypedDataDefinition } from '../types/typedData.js'\nimport { type IsAddressErrorType, isAddress } from './address/isAddress.js'\nimport { type SizeErrorType, size } from './data/size.js'\nimport { type NumberToHexErrorType, numberToHex } from './encoding/toHex.js'\nimport { bytesRegex, integerRegex } from './regex.js'\nimport {\n type HashDomainErrorType,\n hashDomain,\n} from './signature/hashTypedData.js'\nimport { stringify } from './stringify.js'\n\nexport type SerializeTypedDataErrorType =\n | HashDomainErrorType\n | IsAddressErrorType\n | NumberToHexErrorType\n | SizeErrorType\n | ErrorType\n\nexport function serializeTypedData<\n const typedData extends TypedData | Record,\n primaryType extends keyof typedData | 'EIP712Domain',\n>(parameters: TypedDataDefinition) {\n const {\n domain: domain_,\n message: message_,\n primaryType,\n types,\n } = parameters as unknown as TypedDataDefinition\n\n const normalizeData = (\n struct: readonly TypedDataParameter[],\n data_: Record,\n ) => {\n const data = { ...data_ }\n for (const param of struct) {\n const { name, type } = param\n if (type === 'address') data[name] = (data[name] as string).toLowerCase()\n }\n return data\n }\n\n const domain = (() => {\n if (!types.EIP712Domain) return {}\n if (!domain_) return {}\n return normalizeData(types.EIP712Domain, domain_)\n })()\n\n const message = (() => {\n if (primaryType === 'EIP712Domain') return undefined\n return normalizeData(types[primaryType], message_)\n })()\n\n return stringify({ domain, message, primaryType, types })\n}\n\nexport type ValidateTypedDataErrorType =\n | HashDomainErrorType\n | IsAddressErrorType\n | NumberToHexErrorType\n | SizeErrorType\n | ErrorType\n\nexport function validateTypedData<\n const typedData extends TypedData | Record,\n primaryType extends keyof typedData | 'EIP712Domain',\n>(parameters: TypedDataDefinition) {\n const { domain, message, primaryType, types } =\n parameters as unknown as TypedDataDefinition\n\n const validateData = (\n struct: readonly TypedDataParameter[],\n data: Record,\n ) => {\n for (const param of struct) {\n const { name, type } = param\n const value = data[name]\n\n const integerMatch = type.match(integerRegex)\n if (\n integerMatch &&\n (typeof value === 'number' || typeof value === 'bigint')\n ) {\n const [_type, base, size_] = integerMatch\n // If number cannot be cast to a sized hex value, it is out of range\n // and will throw.\n numberToHex(value, {\n signed: base === 'int',\n size: Number.parseInt(size_, 10) / 8,\n })\n }\n\n if (type === 'address' && typeof value === 'string' && !isAddress(value))\n throw new InvalidAddressError({ address: value })\n\n const bytesMatch = type.match(bytesRegex)\n if (bytesMatch) {\n const [_type, size_] = bytesMatch\n if (size_ && size(value as Hex) !== Number.parseInt(size_, 10))\n throw new BytesSizeMismatchError({\n expectedSize: Number.parseInt(size_, 10),\n givenSize: size(value as Hex),\n })\n }\n\n const struct = types[type]\n if (struct) {\n validateReference(type)\n validateData(struct, value as Record)\n }\n }\n }\n\n // Validate domain types.\n if (types.EIP712Domain && domain) {\n if (typeof domain !== 'object') throw new InvalidDomainError({ domain })\n validateData(types.EIP712Domain, domain)\n }\n\n // Validate message types.\n if (primaryType !== 'EIP712Domain') {\n if (types[primaryType]) validateData(types[primaryType], message)\n else throw new InvalidPrimaryTypeError({ primaryType, types })\n }\n}\n\nexport type GetTypesForEIP712DomainErrorType = ErrorType\n\nexport function getTypesForEIP712Domain({\n domain,\n}: {\n domain?: TypedDataDomain | undefined\n}): TypedDataParameter[] {\n return [\n typeof domain?.name === 'string' && { name: 'name', type: 'string' },\n domain?.version && { name: 'version', type: 'string' },\n (typeof domain?.chainId === 'number' ||\n typeof domain?.chainId === 'bigint') && {\n name: 'chainId',\n type: 'uint256',\n },\n domain?.verifyingContract && {\n name: 'verifyingContract',\n type: 'address',\n },\n domain?.salt && { name: 'salt', type: 'bytes32' },\n ].filter(Boolean) as TypedDataParameter[]\n}\n\nexport type DomainSeparatorErrorType =\n | GetTypesForEIP712DomainErrorType\n | HashDomainErrorType\n | ErrorType\n\nexport function domainSeparator({ domain }: { domain: TypedDataDomain }): Hex {\n return hashDomain({\n domain: domain as never,\n types: {\n EIP712Domain: getTypesForEIP712Domain({ domain }),\n },\n })\n}\n\n/** @internal */\nfunction validateReference(type: string) {\n // Struct type must not be a Solidity type.\n if (\n type === 'address' ||\n type === 'bool' ||\n type === 'string' ||\n type.startsWith('bytes') ||\n type.startsWith('uint') ||\n type.startsWith('int')\n )\n throw new InvalidStructTypeError({ type })\n}\n", "import type { TypedData } from 'abitype'\n\nimport { stringify } from '../utils/stringify.js'\nimport { BaseError } from './base.js'\n\nexport type InvalidDomainErrorType = InvalidDomainError & {\n name: 'InvalidDomainError'\n}\nexport class InvalidDomainError extends BaseError {\n constructor({ domain }: { domain: unknown }) {\n super(`Invalid domain \"${stringify(domain)}\".`, {\n metaMessages: ['Must be a valid EIP-712 domain.'],\n })\n }\n}\n\nexport type InvalidPrimaryTypeErrorType = InvalidPrimaryTypeError & {\n name: 'InvalidPrimaryTypeError'\n}\nexport class InvalidPrimaryTypeError extends BaseError {\n constructor({\n primaryType,\n types,\n }: { primaryType: string; types: TypedData | Record }) {\n super(\n `Invalid primary type \\`${primaryType}\\` must be one of \\`${JSON.stringify(Object.keys(types))}\\`.`,\n {\n docsPath: '/api/glossary/Errors#typeddatainvalidprimarytypeerror',\n metaMessages: ['Check that the primary type is a key in `types`.'],\n },\n )\n }\n}\n\nexport type InvalidStructTypeErrorType = InvalidStructTypeError & {\n name: 'InvalidStructTypeError'\n}\nexport class InvalidStructTypeError extends BaseError {\n constructor({ type }: { type: string }) {\n super(`Struct type \"${type}\" is invalid.`, {\n metaMessages: ['Struct type must not be a Solidity type.'],\n name: 'InvalidStructTypeError',\n })\n }\n}\n", "import * as AbiParameters from '../core/AbiParameters.js'\nimport type * as Address from '../core/Address.js'\nimport * as Authorization from '../core/Authorization.js'\nimport * as Errors from '../core/Errors.js'\nimport * as Hex from '../core/Hex.js'\nimport * as Secp256k1 from '../core/Secp256k1.js'\nimport * as Signature from '../core/Signature.js'\n\n/** Unwrapped ERC-8010 signature. */\nexport type Unwrapped = {\n /** Authorization signed by the delegatee. */\n authorization: Authorization.Authorization\n /** Data to initialize the delegation. */\n data?: Hex.Hex | undefined\n /** The original signature. */\n signature: Hex.Hex\n /** Address of the initializer. */\n to?: Address.Address | undefined\n}\n\n/** Wrapped ERC-8010 signature. */\nexport type Wrapped = Hex.Hex\n\n/**\n * Magic bytes used to identify ERC-8010 wrapped signatures.\n */\nexport const magicBytes =\n '0x8010801080108010801080108010801080108010801080108010801080108010' as const\n\n/** Suffix ABI parameters for the ERC-8010 wrapped signature. */\nexport const suffixParameters = AbiParameters.from(\n '(uint256 chainId, address delegation, uint256 nonce, uint8 yParity, uint256 r, uint256 s), address to, bytes data',\n)\n\n/**\n * Asserts that the wrapped signature is valid.\n *\n * @example\n * ```ts twoslash\n * import { SignatureErc8010 } from 'ox/erc8010'\n *\n * SignatureErc8010.assert('0xdeadbeef')\n * // @error: InvalidWrappedSignatureError: Value `0xdeadbeef` is an invalid ERC-8010 wrapped signature.\n * ```\n *\n * @param value - The value to assert.\n */\nexport function assert(value: Unwrapped | Wrapped) {\n if (typeof value === 'string') {\n if (Hex.slice(value, -32) !== magicBytes)\n throw new InvalidWrappedSignatureError(value)\n } else Signature.assert(value.authorization)\n}\n\nexport declare namespace assert {\n type ErrorType =\n | InvalidWrappedSignatureError\n | Hex.slice.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Parses an [ERC-8010 wrapped signature](https://github.com/jxom/ERCs/blob/16f7e3891fff2e1e9c25dea0485497739db8a816/ERCS/erc-8010.md) into its constituent parts.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Secp256k1 } from 'ox'\n * import { SignatureErc8010 } from 'ox/erc8010' // [!code focus]\n *\n * const signature = Secp256k1.sign({\n * payload: '0x...',\n * privateKey: '0x...',\n * })\n *\n * // Instantiate from serialized format. // [!code focus]\n * const wrapped = SignatureErc8010.from('0x...') // [!code focus]\n * // @log: { authorization: { ... }, data: '0x...', signature: { ... } } // [!code focus]\n *\n * // Instantiate from constituent parts. // [!code focus]\n * const wrapped = SignatureErc8010.from({ // [!code focus]\n * authorization: { ... }, // [!code focus]\n * data: '0x...', // [!code focus]\n * signature, // [!code focus]\n * })\n * // @log: { authorization: { ... }, data: '0x...', signature: { ... } }\n * ```\n *\n * @param value - Value to parse.\n * @returns Parsed value.\n */\nexport function from(value: Unwrapped | Wrapped): Unwrapped {\n if (typeof value === 'string') return unwrap(value)\n return value\n}\n\nexport declare namespace from {\n type ErrorType = unwrap.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Unwraps an [ERC-8010 wrapped signature](https://github.com/jxom/ERCs/blob/16f7e3891fff2e1e9c25dea0485497739db8a816/ERCS/erc-8010.md) into its constituent parts.\n *\n * @example\n * ```ts twoslash\n * import { SignatureErc8010 } from 'ox/erc8010'\n *\n * const { authorization, data, signature } = SignatureErc8010.unwrap('0x...')\n * ```\n *\n * @param wrapped - Wrapped signature to unwrap.\n * @returns Unwrapped signature.\n */\nexport function unwrap(wrapped: Wrapped): Unwrapped {\n assert(wrapped)\n\n const suffixLength = Hex.toNumber(Hex.slice(wrapped, -64, -32))\n const suffix = Hex.slice(wrapped, -suffixLength - 64, -64)\n const signature = Hex.slice(wrapped, 0, -suffixLength - 64)\n\n const [auth, to, data] = AbiParameters.decode(suffixParameters, suffix)\n\n const authorization = Authorization.from({\n address: auth.delegation,\n chainId: Number(auth.chainId),\n nonce: auth.nonce,\n yParity: auth.yParity,\n r: auth.r,\n s: auth.s,\n })\n\n return {\n authorization,\n signature,\n ...(data && data !== '0x' ? { data, to } : {}),\n }\n}\n\nexport declare namespace unwrap {\n type ErrorType = assert.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Wraps a signature into [ERC-8010 format](https://github.com/jxom/ERCs/blob/16f7e3891fff2e1e9c25dea0485497739db8a816/ERCS/erc-8010.md).\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Secp256k1, Signature } from 'ox'\n * import { SignatureErc8010 } from 'ox/erc8010' // [!code focus]\n *\n * const signature = Secp256k1.sign({\n * payload: '0x...',\n * privateKey: '0x...',\n * })\n *\n * const wrapped = SignatureErc8010.wrap({ // [!code focus]\n * authorization: { ... }, // [!code focus]\n * data: '0xdeadbeef', // [!code focus]\n * signature: Signature.toHex(signature), // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param value - Values to wrap.\n * @returns Wrapped signature.\n */\nexport function wrap(value: Unwrapped): Wrapped {\n const { data, signature } = value\n\n assert(value)\n\n const self = Secp256k1.recoverAddress({\n payload: Authorization.getSignPayload(value.authorization),\n signature: Signature.from(value.authorization),\n })\n\n const suffix = AbiParameters.encode(suffixParameters, [\n {\n ...value.authorization,\n delegation: value.authorization.address,\n chainId: BigInt(value.authorization.chainId),\n },\n value.to ?? self,\n data ?? '0x',\n ])\n const suffixLength = Hex.fromNumber(Hex.size(suffix), { size: 32 })\n return Hex.concat(signature, suffix, suffixLength, magicBytes)\n}\n\nexport declare namespace wrap {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Validates a wrapped signature. Returns `true` if the wrapped signature is valid, `false` otherwise.\n *\n * @example\n * ```ts twoslash\n * import { SignatureErc8010 } from 'ox/erc8010'\n *\n * const valid = SignatureErc8010.validate('0xdeadbeef')\n * // @log: false\n * ```\n *\n * @param value - The value to validate.\n * @returns `true` if the value is valid, `false` otherwise.\n */\nexport function validate(value: Unwrapped | Wrapped): boolean {\n try {\n assert(value)\n return true\n } catch {\n return false\n }\n}\n\nexport declare namespace validate {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/** Thrown when the ERC-8010 wrapped signature is invalid. */\nexport class InvalidWrappedSignatureError extends Errors.BaseError {\n override readonly name = 'SignatureErc8010.InvalidWrappedSignatureError'\n\n constructor(wrapped: Wrapped) {\n super(`Value \\`${wrapped}\\` is an invalid ERC-8010 wrapped signature.`)\n }\n}\n", "import * as abitype from 'abitype'\nimport * as Address from './Address.js'\nimport * as Bytes from './Bytes.js'\nimport * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport * as internal from './internal/abiParameters.js'\nimport * as Cursor from './internal/cursor.js'\nimport * as Solidity from './Solidity.js'\n\n/** Root type for ABI parameters. */\nexport type AbiParameters = readonly abitype.AbiParameter[]\n\n/** A parameter on an {@link ox#AbiParameters.AbiParameters}. */\nexport type Parameter = abitype.AbiParameter\n\n/** A packed ABI type. */\nexport type PackedAbiType =\n | abitype.SolidityAddress\n | abitype.SolidityBool\n | abitype.SolidityBytes\n | abitype.SolidityInt\n | abitype.SolidityString\n | abitype.SolidityArrayWithoutTuple\n\n/**\n * Decodes ABI-encoded data into its respective primitive values based on ABI Parameters.\n *\n * @example\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const data = AbiParameters.decode(\n * AbiParameters.from(['string', 'uint', 'bool']),\n * '0x000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001a4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000057761676d69000000000000000000000000000000000000000000000000000000',\n * )\n * // @log: ['wagmi', 420n, true]\n * ```\n *\n * @example\n * ### JSON Parameters\n *\n * You can pass **JSON ABI** Parameters:\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const data = AbiParameters.decode(\n * [\n * { name: 'x', type: 'string' },\n * { name: 'y', type: 'uint' },\n * { name: 'z', type: 'bool' },\n * ],\n * '0x000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001a4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000057761676d69000000000000000000000000000000000000000000000000000000',\n * )\n * // @log: ['wagmi', 420n, true]\n * ```\n *\n * @param parameters - The set of ABI parameters to decode, in the shape of the `inputs` or `outputs` attribute of an ABI Item. These parameters must include valid [ABI types](https://docs.soliditylang.org/en/latest/types.html).\n * @param data - ABI encoded data.\n * @param options - Decoding options.\n * @returns Array of decoded values.\n */\nexport function decode<\n const parameters extends AbiParameters,\n as extends 'Object' | 'Array' = 'Array',\n>(\n parameters: parameters,\n data: Bytes.Bytes | Hex.Hex,\n options?: decode.Options,\n): decode.ReturnType\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function decode(\n parameters: AbiParameters,\n data: Bytes.Bytes | Hex.Hex,\n options: {\n as?: 'Array' | 'Object' | undefined\n checksumAddress?: boolean | undefined\n } = {},\n): readonly unknown[] | Record {\n const { as = 'Array', checksumAddress = false } = options\n\n const bytes = typeof data === 'string' ? Bytes.fromHex(data) : data\n const cursor = Cursor.create(bytes)\n\n if (Bytes.size(bytes) === 0 && parameters.length > 0)\n throw new ZeroDataError()\n if (Bytes.size(bytes) && Bytes.size(bytes) < 32)\n throw new DataSizeTooSmallError({\n data: typeof data === 'string' ? data : Hex.fromBytes(data),\n parameters: parameters as readonly Parameter[],\n size: Bytes.size(bytes),\n })\n\n let consumed = 0\n const values: any = as === 'Array' ? [] : {}\n for (let i = 0; i < parameters.length; ++i) {\n const param = parameters[i] as Parameter\n cursor.setPosition(consumed)\n const [data, consumed_] = internal.decodeParameter(cursor, param, {\n checksumAddress,\n staticPosition: 0,\n })\n consumed += consumed_\n if (as === 'Array') values.push(data)\n else values[param.name ?? i] = data\n }\n return values\n}\n\nexport declare namespace decode {\n type Options = {\n /**\n * Whether the decoded values should be returned as an `Object` or `Array`.\n *\n * @default \"Array\"\n */\n as?: as | 'Object' | 'Array' | undefined\n /**\n * Whether decoded addresses should be checksummed.\n *\n * @default false\n */\n checksumAddress?: boolean | undefined\n }\n\n type ReturnType<\n parameters extends AbiParameters = AbiParameters,\n as extends 'Object' | 'Array' = 'Array',\n > = parameters extends readonly []\n ? as extends 'Object'\n ? {}\n : []\n : as extends 'Object'\n ? internal.ToObject\n : internal.ToPrimitiveTypes\n\n type ErrorType =\n | Bytes.fromHex.ErrorType\n | internal.decodeParameter.ErrorType\n | ZeroDataError\n | DataSizeTooSmallError\n | Errors.GlobalErrorType\n}\n\n/**\n * Encodes primitive values into ABI encoded data as per the [Application Binary Interface (ABI) Specification](https://docs.soliditylang.org/en/latest/abi-spec).\n *\n * @example\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const data = AbiParameters.encode(\n * AbiParameters.from(['string', 'uint', 'bool']),\n * ['wagmi', 420n, true],\n * )\n * ```\n *\n * @example\n * ### JSON Parameters\n *\n * Specify **JSON ABI** Parameters as schema:\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const data = AbiParameters.encode(\n * [\n * { type: 'string', name: 'name' },\n * { type: 'uint', name: 'age' },\n * { type: 'bool', name: 'isOwner' },\n * ],\n * ['wagmi', 420n, true],\n * )\n * ```\n *\n * @param parameters - The set of ABI parameters to encode, in the shape of the `inputs` or `outputs` attribute of an ABI Item. These parameters must include valid [ABI types](https://docs.soliditylang.org/en/latest/types.html).\n * @param values - The set of primitive values that correspond to the ABI types defined in `parameters`.\n * @returns ABI encoded data.\n */\nexport function encode<\n const parameters extends AbiParameters | readonly unknown[],\n>(\n parameters: parameters,\n values: parameters extends AbiParameters\n ? internal.ToPrimitiveTypes\n : never,\n options?: encode.Options,\n): Hex.Hex {\n const { checksumAddress = false } = options ?? {}\n\n if (parameters.length !== values.length)\n throw new LengthMismatchError({\n expectedLength: parameters.length as number,\n givenLength: values.length as any,\n })\n // Prepare the parameters to determine dynamic types to encode.\n const preparedParameters = internal.prepareParameters({\n checksumAddress,\n parameters: parameters as readonly Parameter[],\n values: values as any,\n })\n const data = internal.encode(preparedParameters)\n if (data.length === 0) return '0x'\n return data\n}\n\nexport declare namespace encode {\n type ErrorType =\n | LengthMismatchError\n | internal.encode.ErrorType\n | internal.prepareParameters.ErrorType\n | Errors.GlobalErrorType\n\n type Options = {\n /**\n * Whether addresses should be checked against their checksum.\n *\n * @default false\n */\n checksumAddress?: boolean | undefined\n }\n}\n\n/**\n * Encodes an array of primitive values to a [packed ABI encoding](https://docs.soliditylang.org/en/latest/abi-spec.html#non-standard-packed-mode).\n *\n * @example\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const encoded = AbiParameters.encodePacked(\n * ['address', 'string'],\n * ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 'hello world'],\n * )\n * // @log: '0xd8da6bf26964af9d7eed9e03e53415d37aa9604568656c6c6f20776f726c64'\n * ```\n *\n * @param types - Set of ABI types to pack encode.\n * @param values - The set of primitive values that correspond to the ABI types defined in `types`.\n * @returns The encoded packed data.\n */\nexport function encodePacked<\n const packedAbiTypes extends readonly PackedAbiType[] | readonly unknown[],\n>(types: packedAbiTypes, values: encodePacked.Values): Hex.Hex {\n if (types.length !== values.length)\n throw new LengthMismatchError({\n expectedLength: types.length as number,\n givenLength: values.length as number,\n })\n\n const data: Hex.Hex[] = []\n for (let i = 0; i < (types as unknown[]).length; i++) {\n const type = types[i]\n const value = values[i]\n data.push(encodePacked.encode(type, value))\n }\n return Hex.concat(...data)\n}\n\nexport namespace encodePacked {\n export type ErrorType =\n | Hex.concat.ErrorType\n | LengthMismatchError\n | Errors.GlobalErrorType\n\n export type Values<\n packedAbiTypes extends readonly PackedAbiType[] | readonly unknown[],\n > = {\n [key in keyof packedAbiTypes]: packedAbiTypes[key] extends abitype.AbiType\n ? abitype.AbiParameterToPrimitiveType<{ type: packedAbiTypes[key] }>\n : unknown\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n export function encode(\n type: packedAbiType,\n value: Values<[packedAbiType]>[0],\n isArray = false,\n ): Hex.Hex {\n if (type === 'address') {\n const address = value as Address.Address\n Address.assert(address)\n return Hex.padLeft(\n address.toLowerCase() as Hex.Hex,\n isArray ? 32 : 0,\n ) as Address.Address\n }\n if (type === 'string') return Hex.fromString(value as string)\n if (type === 'bytes') return value as Hex.Hex\n if (type === 'bool')\n return Hex.padLeft(Hex.fromBoolean(value as boolean), isArray ? 32 : 1)\n\n const intMatch = (type as string).match(Solidity.integerRegex)\n if (intMatch) {\n const [_type, baseType, bits = '256'] = intMatch\n const size = Number.parseInt(bits, 10) / 8\n return Hex.fromNumber(value as number, {\n size: isArray ? 32 : size,\n signed: baseType === 'int',\n })\n }\n\n const bytesMatch = (type as string).match(Solidity.bytesRegex)\n if (bytesMatch) {\n const [_type, size] = bytesMatch\n if (Number.parseInt(size!, 10) !== ((value as Hex.Hex).length - 2) / 2)\n throw new BytesSizeMismatchError({\n expectedSize: Number.parseInt(size!, 10),\n value: value as Hex.Hex,\n })\n return Hex.padRight(value as Hex.Hex, isArray ? 32 : 0) as Hex.Hex\n }\n\n const arrayMatch = (type as string).match(Solidity.arrayRegex)\n if (arrayMatch && Array.isArray(value)) {\n const [_type, childType] = arrayMatch\n const data: Hex.Hex[] = []\n for (let i = 0; i < value.length; i++) {\n data.push(encode(childType, value[i], true))\n }\n if (data.length === 0) return '0x'\n return Hex.concat(...data)\n }\n\n throw new InvalidTypeError(type as string)\n }\n}\n\n/**\n * Formats {@link ox#AbiParameters.AbiParameters} into **Human Readable ABI Parameters**.\n *\n * @example\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const formatted = AbiParameters.format([\n * {\n * name: 'spender',\n * type: 'address',\n * },\n * {\n * name: 'amount',\n * type: 'uint256',\n * },\n * ])\n *\n * formatted\n * // ^?\n *\n *\n * ```\n *\n * @param parameters - The ABI Parameters to format.\n * @returns The formatted ABI Parameters .\n */\nexport function format<\n const parameters extends readonly [\n Parameter | abitype.AbiEventParameter,\n ...(readonly (Parameter | abitype.AbiEventParameter)[]),\n ],\n>(\n parameters:\n | parameters\n | readonly [\n Parameter | abitype.AbiEventParameter,\n ...(readonly (Parameter | abitype.AbiEventParameter)[]),\n ],\n): abitype.FormatAbiParameters {\n return abitype.formatAbiParameters(parameters)\n}\n\nexport declare namespace format {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Parses arbitrary **JSON ABI Parameters** or **Human Readable ABI Parameters** into typed {@link ox#AbiParameters.AbiParameters}.\n *\n * @example\n * ### JSON Parameters\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const parameters = AbiParameters.from([\n * {\n * name: 'spender',\n * type: 'address',\n * },\n * {\n * name: 'amount',\n * type: 'uint256',\n * },\n * ])\n *\n * parameters\n * //^?\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Human Readable Parameters\n *\n * Human Readable ABI Parameters can be parsed into a typed {@link ox#AbiParameters.AbiParameters}:\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const parameters = AbiParameters.from('address spender, uint256 amount')\n *\n * parameters\n * //^?\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * It is possible to specify `struct`s along with your definitions:\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const parameters = AbiParameters.from([\n * 'struct Foo { address spender; uint256 amount; }', // [!code hl]\n * 'Foo foo, address bar',\n * ])\n *\n * parameters\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n *\n *\n * @param parameters - The ABI Parameters to parse.\n * @returns The typed ABI Parameters.\n */\nexport function from<\n const parameters extends AbiParameters | string | readonly string[],\n>(\n parameters: parameters | AbiParameters | string | readonly string[],\n): from.ReturnType {\n if (Array.isArray(parameters) && typeof parameters[0] === 'string')\n return abitype.parseAbiParameters(parameters) as never\n if (typeof parameters === 'string')\n return abitype.parseAbiParameters(parameters) as never\n return parameters as never\n}\n\nexport declare namespace from {\n type ReturnType<\n parameters extends AbiParameters | string | readonly string[],\n > = parameters extends string\n ? abitype.ParseAbiParameters\n : parameters extends readonly string[]\n ? abitype.ParseAbiParameters\n : parameters\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Throws when the data size is too small for the given parameters.\n *\n * @example\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * AbiParameters.decode([{ type: 'uint256' }], '0x010f')\n * // \u2191 \u274C 2 bytes\n * // @error: AbiParameters.DataSizeTooSmallError: Data size of 2 bytes is too small for given parameters.\n * // @error: Params: (uint256)\n * // @error: Data: 0x010f (2 bytes)\n * ```\n *\n * ### Solution\n *\n * Pass a valid data size.\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * AbiParameters.decode([{ type: 'uint256' }], '0x00000000000000000000000000000000000000000000000000000000000010f')\n * // \u2191 \u2705 32 bytes\n * ```\n */\nexport class DataSizeTooSmallError extends Errors.BaseError {\n override readonly name = 'AbiParameters.DataSizeTooSmallError'\n constructor({\n data,\n parameters,\n size,\n }: { data: Hex.Hex; parameters: readonly Parameter[]; size: number }) {\n super(`Data size of ${size} bytes is too small for given parameters.`, {\n metaMessages: [\n `Params: (${abitype.formatAbiParameters(parameters as readonly [Parameter])})`,\n `Data: ${data} (${size} bytes)`,\n ],\n })\n }\n}\n\n/**\n * Throws when zero data is provided, but data is expected.\n *\n * @example\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * AbiParameters.decode([{ type: 'uint256' }], '0x')\n * // \u2191 \u274C zero data\n * // @error: AbiParameters.DataSizeTooSmallError: Data size of 2 bytes is too small for given parameters.\n * // @error: Params: (uint256)\n * // @error: Data: 0x010f (2 bytes)\n * ```\n *\n * ### Solution\n *\n * Pass valid data.\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * AbiParameters.decode([{ type: 'uint256' }], '0x00000000000000000000000000000000000000000000000000000000000010f')\n * // \u2191 \u2705 32 bytes\n * ```\n */\nexport class ZeroDataError extends Errors.BaseError {\n override readonly name = 'AbiParameters.ZeroDataError'\n constructor() {\n super('Cannot decode zero data (\"0x\") with ABI parameters.')\n }\n}\n\n/**\n * The length of the array value does not match the length specified in the corresponding ABI parameter.\n *\n * ### Example\n *\n * ```ts twoslash\n * // @noErrors\n * import { AbiParameters } from 'ox'\n * // ---cut---\n * AbiParameters.encode(AbiParameters.from('uint256[3]'), [[69n, 420n]])\n * // \u2191 expected: 3 \u2191 \u274C length: 2\n * // @error: AbiParameters.ArrayLengthMismatchError: ABI encoding array length mismatch\n * // @error: for type `uint256[3]`. Expected: `3`. Given: `2`.\n * ```\n *\n * ### Solution\n *\n * Pass an array of the correct length.\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n * // ---cut---\n * AbiParameters.encode(AbiParameters.from(['uint256[3]']), [[69n, 420n, 69n]])\n * // \u2191 \u2705 length: 3\n * ```\n */\nexport class ArrayLengthMismatchError extends Errors.BaseError {\n override readonly name = 'AbiParameters.ArrayLengthMismatchError'\n constructor({\n expectedLength,\n givenLength,\n type,\n }: { expectedLength: number; givenLength: number; type: string }) {\n super(\n `Array length mismatch for type \\`${type}\\`. Expected: \\`${expectedLength}\\`. Given: \\`${givenLength}\\`.`,\n )\n }\n}\n\n/**\n * The size of the bytes value does not match the size specified in the corresponding ABI parameter.\n *\n * ### Example\n *\n * ```ts twoslash\n * // @noErrors\n * import { AbiParameters } from 'ox'\n * // ---cut---\n * AbiParameters.encode(AbiParameters.from('bytes8'), [['0xdeadbeefdeadbeefdeadbeef']])\n * // \u2191 expected: 8 bytes \u2191 \u274C size: 12 bytes\n * // @error: BytesSizeMismatchError: Size of bytes \"0xdeadbeefdeadbeefdeadbeef\"\n * // @error: (bytes12) does not match expected size (bytes8).\n * ```\n *\n * ### Solution\n *\n * Pass a bytes value of the correct size.\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n * // ---cut---\n * AbiParameters.encode(AbiParameters.from(['bytes8']), ['0xdeadbeefdeadbeef'])\n * // \u2191 \u2705 size: 8 bytes\n * ```\n */\nexport class BytesSizeMismatchError extends Errors.BaseError {\n override readonly name = 'AbiParameters.BytesSizeMismatchError'\n constructor({\n expectedSize,\n value,\n }: { expectedSize: number; value: Hex.Hex }) {\n super(\n `Size of bytes \"${value}\" (bytes${Hex.size(\n value,\n )}) does not match expected size (bytes${expectedSize}).`,\n )\n }\n}\n\n/**\n * The length of the values to encode does not match the length of the ABI parameters.\n *\n * ### Example\n *\n * ```ts twoslash\n * // @noErrors\n * import { AbiParameters } from 'ox'\n * // ---cut---\n * AbiParameters.encode(AbiParameters.from(['string', 'uint256']), ['hello'])\n * // @error: LengthMismatchError: ABI encoding params/values length mismatch.\n * // @error: Expected length (params): 2\n * // @error: Given length (values): 1\n * ```\n *\n * ### Solution\n *\n * Pass the correct number of values to encode.\n *\n * ### Solution\n *\n * Pass a [valid ABI type](https://docs.soliditylang.org/en/develop/abi-spec.html#types).\n */\nexport class LengthMismatchError extends Errors.BaseError {\n override readonly name = 'AbiParameters.LengthMismatchError'\n constructor({\n expectedLength,\n givenLength,\n }: { expectedLength: number; givenLength: number }) {\n super(\n [\n 'ABI encoding parameters/values length mismatch.',\n `Expected length (parameters): ${expectedLength}`,\n `Given length (values): ${givenLength}`,\n ].join('\\n'),\n )\n }\n}\n\n/**\n * The value provided is not a valid array as specified in the corresponding ABI parameter.\n *\n * ### Example\n *\n * ```ts twoslash\n * // @noErrors\n * import { AbiParameters } from 'ox'\n * // ---cut---\n * AbiParameters.encode(AbiParameters.from(['uint256[3]']), [69])\n * ```\n *\n * ### Solution\n *\n * Pass an array value.\n */\nexport class InvalidArrayError extends Errors.BaseError {\n override readonly name = 'AbiParameters.InvalidArrayError'\n constructor(value: unknown) {\n super(`Value \\`${value}\\` is not a valid array.`)\n }\n}\n\n/**\n * Throws when the ABI parameter type is invalid.\n *\n * @example\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * AbiParameters.decode([{ type: 'lol' }], '0x00000000000000000000000000000000000000000000000000000000000010f')\n * // \u2191 \u274C invalid type\n * // @error: AbiParameters.InvalidTypeError: Type `lol` is not a valid ABI Type.\n * ```\n */\nexport class InvalidTypeError extends Errors.BaseError {\n override readonly name = 'AbiParameters.InvalidTypeError'\n constructor(type: string) {\n super(`Type \\`${type}\\` is not a valid ABI Type.`)\n }\n}\n", "import type { Address as abitype_Address } from 'abitype'\nimport * as Bytes from './Bytes.js'\nimport * as Caches from './Caches.js'\nimport * as Errors from './Errors.js'\nimport * as Hash from './Hash.js'\nimport * as PublicKey from './PublicKey.js'\n\nconst addressRegex = /^0x[a-fA-F0-9]{40}$/\n\n/** Root type for Address. */\nexport type Address = abitype_Address\n\n/**\n * Asserts that the given value is a valid {@link ox#Address.Address}.\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.assert('0xA0Cf798816D4b9b9866b5330EEa46a18382f251e')\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.assert('0xdeadbeef')\n * // @error: InvalidAddressError: Address \"0xdeadbeef\" is invalid.\n * ```\n *\n * @param value - Value to assert if it is a valid address.\n * @param options - Assertion options.\n */\nexport function assert(\n value: string,\n options: assert.Options = {},\n): asserts value is Address {\n const { strict = true } = options\n\n if (!addressRegex.test(value))\n throw new InvalidAddressError({\n address: value,\n cause: new InvalidInputError(),\n })\n\n if (strict) {\n if (value.toLowerCase() === value) return\n if (checksum(value as Address) !== value)\n throw new InvalidAddressError({\n address: value,\n cause: new InvalidChecksumError(),\n })\n }\n}\n\nexport declare namespace assert {\n type Options = {\n /**\n * Enables strict mode. Whether or not to compare the address against its checksum.\n *\n * @default true\n */\n strict?: boolean | undefined\n }\n\n type ErrorType = InvalidAddressError | Errors.GlobalErrorType\n}\n\n/**\n * Computes the checksum address for the given {@link ox#Address.Address}.\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.checksum('0xa0cf798816d4b9b9866b5330eea46a18382f251e')\n * // @log: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'\n * ```\n *\n * @param address - The address to compute the checksum for.\n * @returns The checksummed address.\n */\nexport function checksum(address: string): Address {\n if (Caches.checksum.has(address)) return Caches.checksum.get(address)!\n\n assert(address, { strict: false })\n\n const hexAddress = address.substring(2).toLowerCase()\n const hash = Hash.keccak256(Bytes.fromString(hexAddress), { as: 'Bytes' })\n\n const characters = hexAddress.split('')\n for (let i = 0; i < 40; i += 2) {\n if (hash[i >> 1]! >> 4 >= 8 && characters[i]) {\n characters[i] = characters[i]!.toUpperCase()\n }\n if ((hash[i >> 1]! & 0x0f) >= 8 && characters[i + 1]) {\n characters[i + 1] = characters[i + 1]!.toUpperCase()\n }\n }\n\n const result = `0x${characters.join('')}` as const\n Caches.checksum.set(address, result)\n return result\n}\n\nexport declare namespace checksum {\n type ErrorType =\n | assert.ErrorType\n | Hash.keccak256.ErrorType\n | Bytes.fromString.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Converts a stringified address to a typed (optionally checksummed) {@link ox#Address.Address}.\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.from('0xa0cf798816d4b9b9866b5330eea46a18382f251e')\n * // @log: '0xa0cf798816d4b9b9866b5330eea46a18382f251e'\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.from('0xa0cf798816d4b9b9866b5330eea46a18382f251e', {\n * checksum: true\n * })\n * // @log: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.from('hello')\n * // @error: InvalidAddressError: Address \"0xa\" is invalid.\n * ```\n *\n * @param address - An address string to convert to a typed Address.\n * @param options - Conversion options.\n * @returns The typed Address.\n */\nexport function from(address: string, options: from.Options = {}): Address {\n const { checksum: checksumVal = false } = options\n assert(address)\n if (checksumVal) return checksum(address)\n return address as Address\n}\n\nexport declare namespace from {\n type Options = {\n /**\n * Whether to checksum the address.\n *\n * @default false\n */\n checksum?: boolean | undefined\n }\n\n type ErrorType =\n | assert.ErrorType\n | checksum.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Converts an ECDSA public key to an {@link ox#Address.Address}.\n *\n * @example\n * ```ts twoslash\n * import { Address, PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.from(\n * '0x048318535b54105d4a7aae60c08fc45f9687181b4fdfc625bd1a753fa7397fed753547f11ca8696646f2f3acb08e31016afac23e630c5d11f59f61fef57b0d2aa5',\n * )\n * const address = Address.fromPublicKey(publicKey)\n * // @log: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266'\n * ```\n *\n * @param publicKey - The ECDSA public key to convert to an {@link ox#Address.Address}.\n * @param options - Conversion options.\n * @returns The {@link ox#Address.Address} corresponding to the public key.\n */\nexport function fromPublicKey(\n publicKey: PublicKey.PublicKey,\n options: fromPublicKey.Options = {},\n): Address {\n const address = Hash.keccak256(\n `0x${PublicKey.toHex(publicKey).slice(4)}`,\n ).substring(26)\n return from(`0x${address}`, options)\n}\n\nexport declare namespace fromPublicKey {\n type Options = {\n /**\n * Whether to checksum the address.\n *\n * @default false\n */\n checksum?: boolean | undefined\n }\n\n type ErrorType =\n | Hash.keccak256.ErrorType\n | PublicKey.toHex.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Checks if two {@link ox#Address.Address} are equal.\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.isEqual(\n * '0xa0cf798816d4b9b9866b5330eea46a18382f251e',\n * '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'\n * )\n * // @log: true\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.isEqual(\n * '0xa0cf798816d4b9b9866b5330eea46a18382f251e',\n * '0xA0Cf798816D4b9b9866b5330EEa46a18382f251f'\n * )\n * // @log: false\n * ```\n *\n * @param addressA - The first address to compare.\n * @param addressB - The second address to compare.\n * @returns Whether the addresses are equal.\n */\nexport function isEqual(addressA: Address, addressB: Address): boolean {\n assert(addressA, { strict: false })\n assert(addressB, { strict: false })\n return addressA.toLowerCase() === addressB.toLowerCase()\n}\n\nexport declare namespace isEqual {\n type ErrorType = assert.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Checks if the given address is a valid {@link ox#Address.Address}.\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.validate('0xA0Cf798816D4b9b9866b5330EEa46a18382f251e')\n * // @log: true\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.validate('0xdeadbeef')\n * // @log: false\n * ```\n *\n * @param address - Value to check if it is a valid address.\n * @param options - Check options.\n * @returns Whether the address is a valid address.\n */\nexport function validate(\n address: string,\n options: validate.Options = {},\n): address is Address {\n const { strict = true } = options ?? {}\n try {\n assert(address, { strict })\n return true\n } catch {\n return false\n }\n}\n\nexport declare namespace validate {\n type Options = {\n /**\n * Enables strict mode. Whether or not to compare the address against its checksum.\n *\n * @default true\n */\n strict?: boolean | undefined\n }\n}\n\n/**\n * Thrown when an address is invalid.\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.from('0x123')\n * // @error: Address.InvalidAddressError: Address `0x123` is invalid.\n * ```\n */\nexport class InvalidAddressError<\n cause extends InvalidInputError | InvalidChecksumError =\n | InvalidInputError\n | InvalidChecksumError,\n> extends Errors.BaseError {\n override readonly name = 'Address.InvalidAddressError'\n\n constructor({ address, cause }: { address: string; cause: cause }) {\n super(`Address \"${address}\" is invalid.`, {\n cause,\n })\n }\n}\n\n/** Thrown when an address is not a 20 byte (40 hexadecimal character) value. */\nexport class InvalidInputError extends Errors.BaseError {\n override readonly name = 'Address.InvalidInputError'\n\n constructor() {\n super('Address is not a 20 byte (40 hexadecimal character) value.')\n }\n}\n\n/** Thrown when an address does not match its checksum counterpart. */\nexport class InvalidChecksumError extends Errors.BaseError {\n override readonly name = 'Address.InvalidChecksumError'\n\n constructor() {\n super('Address does not match its checksum counterpart.')\n }\n}\n", "/**\n * @internal\n *\n * Map with a LRU (Least recently used) policy.\n * @see https://en.wikipedia.org/wiki/Cache_replacement_policies#LRU\n */\nexport class LruMap extends Map {\n maxSize: number\n\n constructor(size: number) {\n super()\n this.maxSize = size\n }\n\n override get(key: string) {\n const value = super.get(key)\n\n if (super.has(key) && value !== undefined) {\n this.delete(key)\n super.set(key, value)\n }\n\n return value\n }\n\n override set(key: string, value: value) {\n super.set(key, value)\n if (this.maxSize && this.size > this.maxSize) {\n const firstKey = this.keys().next().value\n if (firstKey) this.delete(firstKey)\n }\n return this\n }\n}\n", "import type * as Address from './Address.js'\nimport { LruMap } from './internal/lru.js'\n\nconst caches = {\n checksum: /*#__PURE__*/ new LruMap(8192),\n}\n\nexport const checksum = caches.checksum\n\n/**\n * Clears all global caches.\n *\n * @example\n * ```ts\n * import { Caches } from 'ox'\n * Caches.clear()\n * ```\n */\nexport function clear() {\n for (const cache of Object.values(caches)) cache.clear()\n}\n", "/**\n * Internal webcrypto alias.\n * We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n * See utils.ts for details.\n * @module\n */\ndeclare const globalThis: Record | undefined;\nexport const crypto: any =\n typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\n", "/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\n\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nexport function isBytes(a: unknown): a is Uint8Array {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n\n/** Asserts something is positive integer. */\nexport function anumber(n: number): void {\n if (!Number.isSafeInteger(n) || n < 0) throw new Error('positive integer expected, got ' + n);\n}\n\n/** Asserts something is Uint8Array. */\nexport function abytes(b: Uint8Array | undefined, ...lengths: number[]): void {\n if (!isBytes(b)) throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\n\n/** Asserts something is hash */\nexport function ahash(h: IHash): void {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash should be wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n\n/** Asserts a hash instance has not been destroyed / finished */\nexport function aexists(instance: any, checkFinished = true): void {\n if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\n\n/** Asserts output is properly-sized byte array */\nexport function aoutput(out: any, instance: any): void {\n abytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('digestInto() expects output buffer of length at least ' + min);\n }\n}\n\n/** Generic type encompassing 8/16/32-byte arrays - but not 64-byte. */\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n/** Cast u8 / u16 / u32 to u8. */\nexport function u8(arr: TypedArray): Uint8Array {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** Cast u8 / u16 / u32 to u32. */\nexport function u32(arr: TypedArray): Uint32Array {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nexport function clean(...arrays: TypedArray[]): void {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n\n/** Create DataView of an array for easy byte-level manipulation. */\nexport function createView(arr: TypedArray): DataView {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** The rotate right (circular right shift) operation for uint32 */\nexport function rotr(word: number, shift: number): number {\n return (word << (32 - shift)) | (word >>> shift);\n}\n\n/** The rotate left (circular left shift) operation for uint32 */\nexport function rotl(word: number, shift: number): number {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexport const isLE: boolean = /* @__PURE__ */ (() =>\n new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n\n/** The byte swap operation for uint32 */\nexport function byteSwap(word: number): number {\n return (\n ((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff)\n );\n}\n/** Conditionally byte swap if on a big-endian platform */\nexport const swap8IfBE: (n: number) => number = isLE\n ? (n: number) => n\n : (n: number) => byteSwap(n);\n\n/** @deprecated */\nexport const byteSwapIfBE: typeof swap8IfBE = swap8IfBE;\n/** In place byte swap for Uint32Array */\nexport function byteSwap32(arr: Uint32Array): Uint32Array {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\n\nexport const swap32IfBE: (u: Uint32Array) => Uint32Array = isLE\n ? (u: Uint32Array) => u\n : byteSwap32;\n\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin: boolean = /* @__PURE__ */ (() =>\n // @ts-ignore\n typeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n i.toString(16).padStart(2, '0')\n);\n\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin) return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 } as const;\nfunction asciiToBase16(ch: number): number | undefined {\n if (ch >= asciis._0 && ch <= asciis._9) return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F) return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f) return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin) return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2) throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nexport const nextTick = async (): Promise => {};\n\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nexport async function asyncLoop(\n iters: number,\n tick: number,\n cb: (i: number) => void\n): Promise {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick) continue;\n await nextTick();\n ts += diff;\n }\n}\n\n// Global symbols, but ts doesn't see them: https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\ndeclare const TextDecoder: any;\n\n/**\n * Converts string to bytes using UTF8 encoding.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n if (typeof str !== 'string') throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n/**\n * Converts bytes to string using UTF8 encoding.\n * @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'\n */\nexport function bytesToUtf8(bytes: Uint8Array): string {\n return new TextDecoder().decode(bytes);\n}\n\n/** Accepted input of hash functions. Strings are converted to byte arrays. */\nexport type Input = string | Uint8Array;\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data: Input): Uint8Array {\n if (typeof data === 'string') data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n\n/** KDFs can accept string or Uint8Array for user convenience. */\nexport type KDFInput = string | Uint8Array;\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nexport function kdfInputToBytes(data: KDFInput): Uint8Array {\n if (typeof data === 'string') data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n\n/** Copies several Uint8Arrays into one. */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\n\ntype EmptyObj = {};\nexport function checkOpts(\n defaults: T1,\n opts?: T2\n): T1 & T2 {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged as T1 & T2;\n}\n\n/** Hash interface. */\nexport type IHash = {\n (data: Uint8Array): Uint8Array;\n blockLen: number;\n outputLen: number;\n create: any;\n};\n\n/** For runtime check if class implements interface */\nexport abstract class Hash> {\n abstract blockLen: number; // Bytes per block\n abstract outputLen: number; // Bytes in output\n abstract update(buf: Input): this;\n // Writes digest into buf\n abstract digestInto(buf: Uint8Array): void;\n abstract digest(): Uint8Array;\n /**\n * Resets internal state. Makes Hash instance unusable.\n * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n * by user, they will need to manually call `destroy()` when zeroing is necessary.\n */\n abstract destroy(): void;\n /**\n * Clones hash instance. Unsafe: doesn't check whether `to` is valid. Can be used as `clone()`\n * when no options are passed.\n * Reasons to use `_cloneInto` instead of clone: 1) performance 2) reuse instance => all internal\n * buffers are overwritten => causes buffer overwrite which is used for digest in some cases.\n * There are no guarantees for clean-up because it's impossible in JS.\n */\n abstract _cloneInto(to?: T): T;\n // Safe version that clones internal state\n abstract clone(): T;\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF> = Hash & {\n xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\n/** Hash function */\nexport type CHash = ReturnType;\n/** Hash function with output */\nexport type CHashO = ReturnType;\n/** XOF with output */\nexport type CHashXO = ReturnType;\n\n/** Wraps hash function, creating an interface on top of it */\nexport function createHasher>(\n hashCons: () => Hash\n): {\n (msg: Input): Uint8Array;\n outputLen: number;\n blockLen: number;\n create(): Hash;\n} {\n const hashC = (msg: Input): Uint8Array => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\n\nexport function createOptHasher, T extends Object>(\n hashCons: (opts?: T) => Hash\n): {\n (msg: Input, opts?: T): Uint8Array;\n outputLen: number;\n blockLen: number;\n create(opts?: T): Hash;\n} {\n const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({} as T);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts?: T) => hashCons(opts);\n return hashC;\n}\n\nexport function createXOFer, T extends Object>(\n hashCons: (opts?: T) => HashXOF\n): {\n (msg: Input, opts?: T): Uint8Array;\n outputLen: number;\n blockLen: number;\n create(opts?: T): HashXOF;\n} {\n const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({} as T);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts?: T) => hashCons(opts);\n return hashC;\n}\nexport const wrapConstructor: typeof createHasher = createHasher;\nexport const wrapConstructorWithOpts: typeof createOptHasher = createOptHasher;\nexport const wrapXOFConstructorWithOpts: typeof createXOFer = createXOFer;\n\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n // Legacy Node.js compatibility\n if (crypto && typeof crypto.randomBytes === 'function') {\n return Uint8Array.from(crypto.randomBytes(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n", "/**\n * HMAC: RFC2104 message authentication code.\n * @module\n */\nimport { abytes, aexists, ahash, clean, Hash, toBytes, type CHash, type Input } from './utils.ts';\n\nexport class HMAC> extends Hash> {\n oHash: T;\n iHash: T;\n blockLen: number;\n outputLen: number;\n private finished = false;\n private destroyed = false;\n\n constructor(hash: CHash, _key: Input) {\n super();\n ahash(hash);\n const key = toBytes(_key);\n this.iHash = hash.create() as T;\n if (typeof this.iHash.update !== 'function')\n throw new Error('Expected instance of class which extends utils.Hash');\n this.blockLen = this.iHash.blockLen;\n this.outputLen = this.iHash.outputLen;\n const blockLen = this.blockLen;\n const pad = new Uint8Array(blockLen);\n // blockLen can be bigger than outputLen\n pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36;\n this.iHash.update(pad);\n // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone\n this.oHash = hash.create() as T;\n // Undo internal XOR && apply outer XOR\n for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36 ^ 0x5c;\n this.oHash.update(pad);\n clean(pad);\n }\n update(buf: Input): this {\n aexists(this);\n this.iHash.update(buf);\n return this;\n }\n digestInto(out: Uint8Array): void {\n aexists(this);\n abytes(out, this.outputLen);\n this.finished = true;\n this.iHash.digestInto(out);\n this.oHash.update(out);\n this.oHash.digestInto(out);\n this.destroy();\n }\n digest(): Uint8Array {\n const out = new Uint8Array(this.oHash.outputLen);\n this.digestInto(out);\n return out;\n }\n _cloneInto(to?: HMAC): HMAC {\n // Create new instance without calling constructor since key already in state and we don't know it.\n to ||= Object.create(Object.getPrototypeOf(this), {});\n const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n to = to as this;\n to.finished = finished;\n to.destroyed = destroyed;\n to.blockLen = blockLen;\n to.outputLen = outputLen;\n to.oHash = oHash._cloneInto(to.oHash);\n to.iHash = iHash._cloneInto(to.iHash);\n return to;\n }\n clone(): HMAC {\n return this._cloneInto();\n }\n destroy(): void {\n this.destroyed = true;\n this.oHash.destroy();\n this.iHash.destroy();\n }\n}\n\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - message key\n * @param message - message data\n * @example\n * import { hmac } from '@noble/hashes/hmac';\n * import { sha256 } from '@noble/hashes/sha2';\n * const mac1 = hmac(sha256, 'key', 'message');\n */\nexport const hmac: {\n (hash: CHash, key: Input, message: Input): Uint8Array;\n create(hash: CHash, key: Input): HMAC;\n} = (hash: CHash, key: Input, message: Input): Uint8Array =>\n new HMAC(hash, key).update(message).digest();\nhmac.create = (hash: CHash, key: Input) => new HMAC(hash, key);\n", "/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nimport { type Input, Hash, abytes, aexists, aoutput, clean, createView, toBytes } from './utils.ts';\n\n/** Polyfill for Safari 14. https://caniuse.com/mdn-javascript_builtins_dataview_setbiguint64 */\nexport function setBigUint64(\n view: DataView,\n byteOffset: number,\n value: bigint,\n isLE: boolean\n): void {\n if (typeof view.setBigUint64 === 'function') return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number((value >> _32n) & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\n\n/** Choice: a ? b : c */\nexport function Chi(a: number, b: number, c: number): number {\n return (a & b) ^ (~a & c);\n}\n\n/** Majority function, true if any two inputs is true. */\nexport function Maj(a: number, b: number, c: number): number {\n return (a & b) ^ (a & c) ^ (b & c);\n}\n\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport abstract class HashMD> extends Hash {\n protected abstract process(buf: DataView, offset: number): void;\n protected abstract get(): number[];\n protected abstract set(...args: number[]): void;\n abstract destroy(): void;\n protected abstract roundClean(): void;\n\n readonly blockLen: number;\n readonly outputLen: number;\n readonly padOffset: number;\n readonly isLE: boolean;\n\n // For partial updates less than block size\n protected buffer: Uint8Array;\n protected view: DataView;\n protected finished = false;\n protected length = 0;\n protected pos = 0;\n protected destroyed = false;\n\n constructor(blockLen: number, outputLen: number, padOffset: number, isLE: boolean) {\n super();\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data: Input): this {\n aexists(this);\n data = toBytes(data);\n abytes(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n for (let pos = 0; pos < len; ) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen) this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out: Uint8Array): void {\n aexists(this);\n aoutput(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n clean(this.buffer.subarray(pos));\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++) buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n if (len % 4) throw new Error('_sha2: outputLen should be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length) throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++) oview.setUint32(4 * i, state[i], isLE);\n }\n digest(): Uint8Array {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to?: T): T {\n to ||= new (this.constructor as any)() as T;\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n if (length % blockLen) to.buffer.set(buffer);\n return to;\n }\n clone(): T {\n return this._cloneInto();\n }\n}\n\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n\n/** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */\nexport const SHA256_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */\nexport const SHA224_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */\nexport const SHA384_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */\nexport const SHA512_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n", "/**\n * Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.\n * @todo re-check https://issues.chromium.org/issues/42212588\n * @module\n */\nconst U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n\nfunction fromBig(\n n: bigint,\n le = false\n): {\n h: number;\n l: number;\n} {\n if (le) return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\n\nfunction split(lst: bigint[], le = false): Uint32Array[] {\n const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for (let i = 0; i < len; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\n\nconst toBig = (h: number, l: number): bigint => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h: number, _l: number, s: number): number => h >>> s;\nconst shrSL = (h: number, l: number, s: number): number => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h: number, l: number, s: number): number => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h: number, l: number, s: number): number => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h: number, l: number, s: number): number => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h: number, l: number, s: number): number => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h: number, l: number): number => l;\nconst rotr32L = (h: number, _l: number): number => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h: number, l: number, s: number): number => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h: number, l: number, s: number): number => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h: number, l: number, s: number): number => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h: number, l: number, s: number): number => (h << (s - 32)) | (l >>> (64 - s));\n\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(\n Ah: number,\n Al: number,\n Bh: number,\n Bl: number\n): {\n h: number;\n l: number;\n} {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al: number, Bl: number, Cl: number): number => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low: number, Ah: number, Bh: number, Ch: number): number =>\n (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al: number, Bl: number, Cl: number, Dl: number): number =>\n (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number): number =>\n (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al: number, Bl: number, Cl: number, Dl: number, El: number): number =>\n (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number): number =>\n (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n\n// prettier-ignore\nexport {\n add, add3H, add3L, add4H, add4L, add5H, add5L, fromBig, rotlBH, rotlBL, rotlSH, rotlSL, rotr32H, rotr32L, rotrBH, rotrBL, rotrSH, rotrSL, shrSH, shrSL, split, toBig\n};\n// prettier-ignore\nconst u64: { fromBig: typeof fromBig; split: typeof split; toBig: (h: number, l: number) => bigint; shrSH: (h: number, _l: number, s: number) => number; shrSL: (h: number, l: number, s: number) => number; rotrSH: (h: number, l: number, s: number) => number; rotrSL: (h: number, l: number, s: number) => number; rotrBH: (h: number, l: number, s: number) => number; rotrBL: (h: number, l: number, s: number) => number; rotr32H: (_h: number, l: number) => number; rotr32L: (h: number, _l: number) => number; rotlSH: (h: number, l: number, s: number) => number; rotlSL: (h: number, l: number, s: number) => number; rotlBH: (h: number, l: number, s: number) => number; rotlBL: (h: number, l: number, s: number) => number; add: typeof add; add3L: (Al: number, Bl: number, Cl: number) => number; add3H: (low: number, Ah: number, Bh: number, Ch: number) => number; add4L: (Al: number, Bl: number, Cl: number, Dl: number) => number; add4H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number) => number; add5H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number) => number; add5L: (Al: number, Bl: number, Cl: number, Dl: number, El: number) => number; } = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n", "/**\n * SHA3 (keccak) hash function, based on a new \"Sponge function\" design.\n * Different from older hashes, the internal state is bigger than output size.\n *\n * Check out [FIPS-202](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf),\n * [Website](https://keccak.team/keccak.html),\n * [the differences between SHA-3 and Keccak](https://crypto.stackexchange.com/questions/15727/what-are-the-key-differences-between-the-draft-sha-3-standard-and-the-keccak-sub).\n *\n * Check out `sha3-addons` module for cSHAKE, k12, and others.\n * @module\n */\nimport { rotlBH, rotlBL, rotlSH, rotlSL, split } from './_u64.ts';\n// prettier-ignore\nimport {\n abytes, aexists, anumber, aoutput,\n clean, createHasher, createXOFer, Hash,\n swap32IfBE,\n toBytes, u32,\n type CHash, type CHashXO, type HashXOF, type Input\n} from './utils.ts';\n\n// No __PURE__ annotations in sha3 header:\n// EVERYTHING is in fact used on every export.\n// Various per round constants calculations\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _7n = BigInt(7);\nconst _256n = BigInt(256);\nconst _0x71n = BigInt(0x71);\nconst SHA3_PI: number[] = [];\nconst SHA3_ROTL: number[] = [];\nconst _SHA3_IOTA: bigint[] = [];\nfor (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {\n // Pi\n [x, y] = [y, (2 * x + 3 * y) % 5];\n SHA3_PI.push(2 * (5 * y + x));\n // Rotational\n SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n // Iota\n let t = _0n;\n for (let j = 0; j < 7; j++) {\n R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n if (R & _2n) t ^= _1n << ((_1n << /* @__PURE__ */ BigInt(j)) - _1n);\n }\n _SHA3_IOTA.push(t);\n}\nconst IOTAS = split(_SHA3_IOTA, true);\nconst SHA3_IOTA_H = IOTAS[0];\nconst SHA3_IOTA_L = IOTAS[1];\n\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h: number, l: number, s: number) => (s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s));\nconst rotlL = (h: number, l: number, s: number) => (s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s));\n\n/** `keccakf1600` internal function, additionally allows to adjust round count. */\nexport function keccakP(s: Uint32Array, rounds: number = 24): void {\n const B = new Uint32Array(5 * 2);\n // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n for (let round = 24 - rounds; round < 24; round++) {\n // Theta \u03B8\n for (let x = 0; x < 10; x++) B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n for (let x = 0; x < 10; x += 2) {\n const idx1 = (x + 8) % 10;\n const idx0 = (x + 2) % 10;\n const B0 = B[idx0];\n const B1 = B[idx0 + 1];\n const Th = rotlH(B0, B1, 1) ^ B[idx1];\n const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n for (let y = 0; y < 50; y += 10) {\n s[x + y] ^= Th;\n s[x + y + 1] ^= Tl;\n }\n }\n // Rho (\u03C1) and Pi (\u03C0)\n let curH = s[2];\n let curL = s[3];\n for (let t = 0; t < 24; t++) {\n const shift = SHA3_ROTL[t];\n const Th = rotlH(curH, curL, shift);\n const Tl = rotlL(curH, curL, shift);\n const PI = SHA3_PI[t];\n curH = s[PI];\n curL = s[PI + 1];\n s[PI] = Th;\n s[PI + 1] = Tl;\n }\n // Chi (\u03C7)\n for (let y = 0; y < 50; y += 10) {\n for (let x = 0; x < 10; x++) B[x] = s[y + x];\n for (let x = 0; x < 10; x++) s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n }\n // Iota (\u03B9)\n s[0] ^= SHA3_IOTA_H[round];\n s[1] ^= SHA3_IOTA_L[round];\n }\n clean(B);\n}\n\n/** Keccak sponge function. */\nexport class Keccak extends Hash implements HashXOF {\n protected state: Uint8Array;\n protected pos = 0;\n protected posOut = 0;\n protected finished = false;\n protected state32: Uint32Array;\n protected destroyed = false;\n\n public blockLen: number;\n public suffix: number;\n public outputLen: number;\n protected enableXOF = false;\n protected rounds: number;\n\n // NOTE: we accept arguments in bytes instead of bits here.\n constructor(\n blockLen: number,\n suffix: number,\n outputLen: number,\n enableXOF = false,\n rounds: number = 24\n ) {\n super();\n this.blockLen = blockLen;\n this.suffix = suffix;\n this.outputLen = outputLen;\n this.enableXOF = enableXOF;\n this.rounds = rounds;\n // Can be passed from user as dkLen\n anumber(outputLen);\n // 1600 = 5x5 matrix of 64bit. 1600 bits === 200 bytes\n // 0 < blockLen < 200\n if (!(0 < blockLen && blockLen < 200))\n throw new Error('only keccak-f1600 function is supported');\n this.state = new Uint8Array(200);\n this.state32 = u32(this.state);\n }\n clone(): Keccak {\n return this._cloneInto();\n }\n protected keccak(): void {\n swap32IfBE(this.state32);\n keccakP(this.state32, this.rounds);\n swap32IfBE(this.state32);\n this.posOut = 0;\n this.pos = 0;\n }\n update(data: Input): this {\n aexists(this);\n data = toBytes(data);\n abytes(data);\n const { blockLen, state } = this;\n const len = data.length;\n for (let pos = 0; pos < len; ) {\n const take = Math.min(blockLen - this.pos, len - pos);\n for (let i = 0; i < take; i++) state[this.pos++] ^= data[pos++];\n if (this.pos === blockLen) this.keccak();\n }\n return this;\n }\n protected finish(): void {\n if (this.finished) return;\n this.finished = true;\n const { state, suffix, pos, blockLen } = this;\n // Do the padding\n state[pos] ^= suffix;\n if ((suffix & 0x80) !== 0 && pos === blockLen - 1) this.keccak();\n state[blockLen - 1] ^= 0x80;\n this.keccak();\n }\n protected writeInto(out: Uint8Array): Uint8Array {\n aexists(this, false);\n abytes(out);\n this.finish();\n const bufferOut = this.state;\n const { blockLen } = this;\n for (let pos = 0, len = out.length; pos < len; ) {\n if (this.posOut >= blockLen) this.keccak();\n const take = Math.min(blockLen - this.posOut, len - pos);\n out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n this.posOut += take;\n pos += take;\n }\n return out;\n }\n xofInto(out: Uint8Array): Uint8Array {\n // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n if (!this.enableXOF) throw new Error('XOF is not possible for this instance');\n return this.writeInto(out);\n }\n xof(bytes: number): Uint8Array {\n anumber(bytes);\n return this.xofInto(new Uint8Array(bytes));\n }\n digestInto(out: Uint8Array): Uint8Array {\n aoutput(out, this);\n if (this.finished) throw new Error('digest() was already called');\n this.writeInto(out);\n this.destroy();\n return out;\n }\n digest(): Uint8Array {\n return this.digestInto(new Uint8Array(this.outputLen));\n }\n destroy(): void {\n this.destroyed = true;\n clean(this.state);\n }\n _cloneInto(to?: Keccak): Keccak {\n const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n to ||= new Keccak(blockLen, suffix, outputLen, enableXOF, rounds);\n to.state32.set(this.state32);\n to.pos = this.pos;\n to.posOut = this.posOut;\n to.finished = this.finished;\n to.rounds = rounds;\n // Suffix can change in cSHAKE\n to.suffix = suffix;\n to.outputLen = outputLen;\n to.enableXOF = enableXOF;\n to.destroyed = this.destroyed;\n return to;\n }\n}\n\nconst gen = (suffix: number, blockLen: number, outputLen: number) =>\n createHasher(() => new Keccak(blockLen, suffix, outputLen));\n\n/** SHA3-224 hash function. */\nexport const sha3_224: CHash = /* @__PURE__ */ (() => gen(0x06, 144, 224 / 8))();\n/** SHA3-256 hash function. Different from keccak-256. */\nexport const sha3_256: CHash = /* @__PURE__ */ (() => gen(0x06, 136, 256 / 8))();\n/** SHA3-384 hash function. */\nexport const sha3_384: CHash = /* @__PURE__ */ (() => gen(0x06, 104, 384 / 8))();\n/** SHA3-512 hash function. */\nexport const sha3_512: CHash = /* @__PURE__ */ (() => gen(0x06, 72, 512 / 8))();\n\n/** keccak-224 hash function. */\nexport const keccak_224: CHash = /* @__PURE__ */ (() => gen(0x01, 144, 224 / 8))();\n/** keccak-256 hash function. Different from SHA3-256. */\nexport const keccak_256: CHash = /* @__PURE__ */ (() => gen(0x01, 136, 256 / 8))();\n/** keccak-384 hash function. */\nexport const keccak_384: CHash = /* @__PURE__ */ (() => gen(0x01, 104, 384 / 8))();\n/** keccak-512 hash function. */\nexport const keccak_512: CHash = /* @__PURE__ */ (() => gen(0x01, 72, 512 / 8))();\n\nexport type ShakeOpts = { dkLen?: number };\n\nconst genShake = (suffix: number, blockLen: number, outputLen: number) =>\n createXOFer, ShakeOpts>(\n (opts: ShakeOpts = {}) =>\n new Keccak(blockLen, suffix, opts.dkLen === undefined ? outputLen : opts.dkLen, true)\n );\n\n/** SHAKE128 XOF with 128-bit security. */\nexport const shake128: CHashXO = /* @__PURE__ */ (() => genShake(0x1f, 168, 128 / 8))();\n/** SHAKE256 XOF with 256-bit security. */\nexport const shake256: CHashXO = /* @__PURE__ */ (() => genShake(0x1f, 136, 256 / 8))();\n", "/**\n * SHA2 hash function. A.k.a. sha256, sha384, sha512, sha512_224, sha512_256.\n * SHA256 is the fastest hash implementable in JS, even faster than Blake3.\n * Check out [RFC 4634](https://datatracker.ietf.org/doc/html/rfc4634) and\n * [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n */\nimport { Chi, HashMD, Maj, SHA224_IV, SHA256_IV, SHA384_IV, SHA512_IV } from './_md.ts';\nimport * as u64 from './_u64.ts';\nimport { type CHash, clean, createHasher, rotr } from './utils.ts';\n\n/**\n * Round constants:\n * First 32 bits of fractional parts of the cube roots of the first 64 primes 2..311)\n */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n\n/** Reusable temporary buffer. \"W\" comes straight from spec. */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nexport class SHA256 extends HashMD {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n protected A: number = SHA256_IV[0] | 0;\n protected B: number = SHA256_IV[1] | 0;\n protected C: number = SHA256_IV[2] | 0;\n protected D: number = SHA256_IV[3] | 0;\n protected E: number = SHA256_IV[4] | 0;\n protected F: number = SHA256_IV[5] | 0;\n protected G: number = SHA256_IV[6] | 0;\n protected H: number = SHA256_IV[7] | 0;\n\n constructor(outputLen: number = 32) {\n super(64, outputLen, 8, false);\n }\n protected get(): [number, number, number, number, number, number, number, number] {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n protected set(\n A: number, B: number, C: number, D: number, E: number, F: number, G: number, H: number\n ): void {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n protected process(view: DataView, offset: number): void {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = (sigma0 + Maj(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n protected roundClean(): void {\n clean(SHA256_W);\n }\n destroy(): void {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n clean(this.buffer);\n }\n}\n\nexport class SHA224 extends SHA256 {\n protected A: number = SHA224_IV[0] | 0;\n protected B: number = SHA224_IV[1] | 0;\n protected C: number = SHA224_IV[2] | 0;\n protected D: number = SHA224_IV[3] | 0;\n protected E: number = SHA224_IV[4] | 0;\n protected F: number = SHA224_IV[5] | 0;\n protected G: number = SHA224_IV[6] | 0;\n protected H: number = SHA224_IV[7] | 0;\n constructor() {\n super(28);\n }\n}\n\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n\n// Round contants\n// First 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (() => u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (() => K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (() => K512[1])();\n\n// Reusable temporary buffers\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\n\nexport class SHA512 extends HashMD {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n // h -- high 32 bits, l -- low 32 bits\n protected Ah: number = SHA512_IV[0] | 0;\n protected Al: number = SHA512_IV[1] | 0;\n protected Bh: number = SHA512_IV[2] | 0;\n protected Bl: number = SHA512_IV[3] | 0;\n protected Ch: number = SHA512_IV[4] | 0;\n protected Cl: number = SHA512_IV[5] | 0;\n protected Dh: number = SHA512_IV[6] | 0;\n protected Dl: number = SHA512_IV[7] | 0;\n protected Eh: number = SHA512_IV[8] | 0;\n protected El: number = SHA512_IV[9] | 0;\n protected Fh: number = SHA512_IV[10] | 0;\n protected Fl: number = SHA512_IV[11] | 0;\n protected Gh: number = SHA512_IV[12] | 0;\n protected Gl: number = SHA512_IV[13] | 0;\n protected Hh: number = SHA512_IV[14] | 0;\n protected Hl: number = SHA512_IV[15] | 0;\n\n constructor(outputLen: number = 64) {\n super(128, outputLen, 16, false);\n }\n // prettier-ignore\n protected get(): [\n number, number, number, number, number, number, number, number,\n number, number, number, number, number, number, number, number\n ] {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n protected set(\n Ah: number, Al: number, Bh: number, Bl: number, Ch: number, Cl: number, Dh: number, Dl: number,\n Eh: number, El: number, Fh: number, Fl: number, Gh: number, Gl: number, Hh: number, Hl: number\n ): void {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n protected process(view: DataView, offset: number): void {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n protected roundClean(): void {\n clean(SHA512_W_H, SHA512_W_L);\n }\n destroy(): void {\n clean(this.buffer);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\n\nexport class SHA384 extends SHA512 {\n protected Ah: number = SHA384_IV[0] | 0;\n protected Al: number = SHA384_IV[1] | 0;\n protected Bh: number = SHA384_IV[2] | 0;\n protected Bl: number = SHA384_IV[3] | 0;\n protected Ch: number = SHA384_IV[4] | 0;\n protected Cl: number = SHA384_IV[5] | 0;\n protected Dh: number = SHA384_IV[6] | 0;\n protected Dl: number = SHA384_IV[7] | 0;\n protected Eh: number = SHA384_IV[8] | 0;\n protected El: number = SHA384_IV[9] | 0;\n protected Fh: number = SHA384_IV[10] | 0;\n protected Fl: number = SHA384_IV[11] | 0;\n protected Gh: number = SHA384_IV[12] | 0;\n protected Gl: number = SHA384_IV[13] | 0;\n protected Hh: number = SHA384_IV[14] | 0;\n protected Hl: number = SHA384_IV[15] | 0;\n\n constructor() {\n super(48);\n }\n}\n\n/**\n * Truncated SHA512/256 and SHA512/224.\n * SHA512_IV is XORed with 0xa5a5a5a5a5a5a5a5, then used as \"intermediary\" IV of SHA512/t.\n * Then t hashes string to produce result IV.\n * See `test/misc/sha2-gen-iv.js`.\n */\n\n/** SHA512/224 IV */\nconst T224_IV = /* @__PURE__ */ Uint32Array.from([\n 0x8c3d37c8, 0x19544da2, 0x73e19966, 0x89dcd4d6, 0x1dfab7ae, 0x32ff9c82, 0x679dd514, 0x582f9fcf,\n 0x0f6d2b69, 0x7bd44da8, 0x77e36f73, 0x04c48942, 0x3f9d85a8, 0x6a1d36c8, 0x1112e6ad, 0x91d692a1,\n]);\n\n/** SHA512/256 IV */\nconst T256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x22312194, 0xfc2bf72c, 0x9f555fa3, 0xc84c64c2, 0x2393b86b, 0x6f53b151, 0x96387719, 0x5940eabd,\n 0x96283ee2, 0xa88effe3, 0xbe5e1e25, 0x53863992, 0x2b0199fc, 0x2c85b8aa, 0x0eb72ddc, 0x81c52ca2,\n]);\n\nexport class SHA512_224 extends SHA512 {\n protected Ah: number = T224_IV[0] | 0;\n protected Al: number = T224_IV[1] | 0;\n protected Bh: number = T224_IV[2] | 0;\n protected Bl: number = T224_IV[3] | 0;\n protected Ch: number = T224_IV[4] | 0;\n protected Cl: number = T224_IV[5] | 0;\n protected Dh: number = T224_IV[6] | 0;\n protected Dl: number = T224_IV[7] | 0;\n protected Eh: number = T224_IV[8] | 0;\n protected El: number = T224_IV[9] | 0;\n protected Fh: number = T224_IV[10] | 0;\n protected Fl: number = T224_IV[11] | 0;\n protected Gh: number = T224_IV[12] | 0;\n protected Gl: number = T224_IV[13] | 0;\n protected Hh: number = T224_IV[14] | 0;\n protected Hl: number = T224_IV[15] | 0;\n\n constructor() {\n super(28);\n }\n}\n\nexport class SHA512_256 extends SHA512 {\n protected Ah: number = T256_IV[0] | 0;\n protected Al: number = T256_IV[1] | 0;\n protected Bh: number = T256_IV[2] | 0;\n protected Bl: number = T256_IV[3] | 0;\n protected Ch: number = T256_IV[4] | 0;\n protected Cl: number = T256_IV[5] | 0;\n protected Dh: number = T256_IV[6] | 0;\n protected Dl: number = T256_IV[7] | 0;\n protected Eh: number = T256_IV[8] | 0;\n protected El: number = T256_IV[9] | 0;\n protected Fh: number = T256_IV[10] | 0;\n protected Fl: number = T256_IV[11] | 0;\n protected Gh: number = T256_IV[12] | 0;\n protected Gl: number = T256_IV[13] | 0;\n protected Hh: number = T256_IV[14] | 0;\n protected Hl: number = T256_IV[15] | 0;\n\n constructor() {\n super(32);\n }\n}\n\n/**\n * SHA2-256 hash function from RFC 4634.\n *\n * It is the fastest JS hash, even faster than Blake3.\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n */\nexport const sha256: CHash = /* @__PURE__ */ createHasher(() => new SHA256());\n/** SHA2-224 hash function from RFC 4634 */\nexport const sha224: CHash = /* @__PURE__ */ createHasher(() => new SHA224());\n\n/** SHA2-512 hash function from RFC 4634. */\nexport const sha512: CHash = /* @__PURE__ */ createHasher(() => new SHA512());\n/** SHA2-384 hash function from RFC 4634. */\nexport const sha384: CHash = /* @__PURE__ */ createHasher(() => new SHA384());\n\n/**\n * SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_256: CHash = /* @__PURE__ */ createHasher(() => new SHA512_256());\n/**\n * SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_224: CHash = /* @__PURE__ */ createHasher(() => new SHA512_224());\n", "import { hmac } from '@noble/hashes/hmac'\nimport { ripemd160 as noble_ripemd160 } from '@noble/hashes/ripemd160'\nimport { keccak_256 as noble_keccak256 } from '@noble/hashes/sha3'\nimport { sha256 as noble_sha256 } from '@noble/hashes/sha256'\nimport * as Bytes from './Bytes.js'\nimport type * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\n\n/**\n * Calculates the [Keccak256](https://en.wikipedia.org/wiki/SHA-3) hash of a {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n *\n * This function is a re-export of `keccak_256` from [`@noble/hashes`](https://github.com/paulmillr/noble-hashes), an audited & minimal JS hashing library.\n *\n * @example\n * ```ts twoslash\n * import { Hash } from 'ox'\n *\n * Hash.keccak256('0xdeadbeef')\n * // @log: '0xd4fd4e189132273036449fc9e11198c739161b4c0116a9a2dccdfa1c492006f1'\n * ```\n *\n * @example\n * ### Calculate Hash of a String\n *\n * ```ts twoslash\n * import { Hash, Hex } from 'ox'\n *\n * Hash.keccak256(Hex.fromString('hello world'))\n * // @log: '0x3ea2f1d0abf3fc66cf29eebb70cbd4e7fe762ef8a09bcc06c8edf641230afec0'\n * ```\n *\n * @example\n * ### Configure Return Type\n *\n * ```ts twoslash\n * import { Hash } from 'ox'\n *\n * Hash.keccak256('0xdeadbeef', { as: 'Bytes' })\n * // @log: Uint8Array [...]\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n * @param options - Options.\n * @returns Keccak256 hash.\n */\nexport function keccak256<\n value extends Hex.Hex | Bytes.Bytes,\n as extends 'Hex' | 'Bytes' =\n | (value extends Hex.Hex ? 'Hex' : never)\n | (value extends Bytes.Bytes ? 'Bytes' : never),\n>(\n value: value | Hex.Hex | Bytes.Bytes,\n options: keccak256.Options = {},\n): keccak256.ReturnType {\n const { as = typeof value === 'string' ? 'Hex' : 'Bytes' } = options\n const bytes = noble_keccak256(Bytes.from(value))\n if (as === 'Bytes') return bytes as never\n return Hex.fromBytes(bytes) as never\n}\n\nexport declare namespace keccak256 {\n type Options = {\n /** The return type. @default 'Hex' */\n as?: as | 'Hex' | 'Bytes' | undefined\n }\n\n type ReturnType =\n | (as extends 'Bytes' ? Bytes.Bytes : never)\n | (as extends 'Hex' ? Hex.Hex : never)\n\n type ErrorType =\n | Bytes.from.ErrorType\n | Hex.fromBytes.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Calculates the [HMAC-SHA256](https://en.wikipedia.org/wiki/HMAC) of a {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n *\n * This function is a re-export of `hmac` from [`@noble/hashes`](https://github.com/paulmillr/noble-hashes), an audited & minimal JS hashing library.\n *\n * @example\n * ```ts twoslash\n * import { Hash, Hex } from 'ox'\n *\n * Hash.hmac256(Hex.fromString('key'), '0xdeadbeef')\n * // @log: '0x...'\n * ```\n *\n * @example\n * ### Configure Return Type\n *\n * ```ts twoslash\n * import { Hash, Hex } from 'ox'\n *\n * Hash.hmac256(Hex.fromString('key'), '0xdeadbeef', { as: 'Bytes' })\n * // @log: Uint8Array [...]\n * ```\n *\n * @param key - {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} key.\n * @param value - {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n * @param options - Options.\n * @returns HMAC-SHA256 hash.\n */\nexport function hmac256<\n value extends Hex.Hex | Bytes.Bytes,\n as extends 'Hex' | 'Bytes' =\n | (value extends Hex.Hex ? 'Hex' : never)\n | (value extends Bytes.Bytes ? 'Bytes' : never),\n>(\n key: Hex.Hex | Bytes.Bytes,\n value: value | Hex.Hex | Bytes.Bytes,\n options: hmac256.Options = {},\n): hmac256.ReturnType {\n const { as = typeof value === 'string' ? 'Hex' : 'Bytes' } = options\n const bytes = hmac(noble_sha256, Bytes.from(key), Bytes.from(value))\n if (as === 'Bytes') return bytes as never\n return Hex.fromBytes(bytes) as never\n}\n\nexport declare namespace hmac256 {\n type Options = {\n /** The return type. @default 'Hex' */\n as?: as | 'Hex' | 'Bytes' | undefined\n }\n\n type ReturnType =\n | (as extends 'Bytes' ? Bytes.Bytes : never)\n | (as extends 'Hex' ? Hex.Hex : never)\n\n type ErrorType =\n | Bytes.from.ErrorType\n | Hex.fromBytes.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Calculates the [Ripemd160](https://en.wikipedia.org/wiki/RIPEMD) hash of a {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n *\n * This function is a re-export of `ripemd160` from [`@noble/hashes`](https://github.com/paulmillr/noble-hashes), an audited & minimal JS hashing library.\n *\n * @example\n * ```ts twoslash\n * import { Hash } from 'ox'\n *\n * Hash.ripemd160('0xdeadbeef')\n * // '0x226821c2f5423e11fe9af68bd285c249db2e4b5a'\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n * @param options - Options.\n * @returns Ripemd160 hash.\n */\nexport function ripemd160<\n value extends Hex.Hex | Bytes.Bytes,\n as extends 'Hex' | 'Bytes' =\n | (value extends Hex.Hex ? 'Hex' : never)\n | (value extends Bytes.Bytes ? 'Bytes' : never),\n>(\n value: value | Hex.Hex | Bytes.Bytes,\n options: ripemd160.Options = {},\n): ripemd160.ReturnType {\n const { as = typeof value === 'string' ? 'Hex' : 'Bytes' } = options\n const bytes = noble_ripemd160(Bytes.from(value))\n if (as === 'Bytes') return bytes as never\n return Hex.fromBytes(bytes) as never\n}\n\nexport declare namespace ripemd160 {\n type Options = {\n /** The return type. @default 'Hex' */\n as?: as | 'Hex' | 'Bytes' | undefined\n }\n\n type ReturnType =\n | (as extends 'Bytes' ? Bytes.Bytes : never)\n | (as extends 'Hex' ? Hex.Hex : never)\n\n type ErrorType =\n | Bytes.from.ErrorType\n | Hex.fromBytes.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Calculates the [Sha256](https://en.wikipedia.org/wiki/SHA-256) hash of a {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n *\n * This function is a re-export of `sha256` from [`@noble/hashes`](https://github.com/paulmillr/noble-hashes), an audited & minimal JS hashing library.\n *\n * @example\n * ```ts twoslash\n * import { Hash } from 'ox'\n *\n * Hash.sha256('0xdeadbeef')\n * // '0x5f78c33274e43fa9de5659265c1d917e25c03722dcb0b8d27db8d5feaa813953'\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n * @param options - Options.\n * @returns Sha256 hash.\n */\nexport function sha256<\n value extends Hex.Hex | Bytes.Bytes,\n as extends 'Hex' | 'Bytes' =\n | (value extends Hex.Hex ? 'Hex' : never)\n | (value extends Bytes.Bytes ? 'Bytes' : never),\n>(\n value: value | Hex.Hex | Bytes.Bytes,\n options: sha256.Options = {},\n): sha256.ReturnType {\n const { as = typeof value === 'string' ? 'Hex' : 'Bytes' } = options\n const bytes = noble_sha256(Bytes.from(value))\n if (as === 'Bytes') return bytes as never\n return Hex.fromBytes(bytes) as never\n}\n\nexport declare namespace sha256 {\n type Options = {\n /** The return type. @default 'Hex' */\n as?: as | 'Hex' | 'Bytes' | undefined\n }\n\n type ReturnType =\n | (as extends 'Bytes' ? Bytes.Bytes : never)\n | (as extends 'Hex' ? Hex.Hex : never)\n\n type ErrorType =\n | Bytes.from.ErrorType\n | Hex.fromBytes.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Checks if a string is a valid hash value.\n *\n * @example\n * ```ts twoslash\n * import { Hash } from 'ox'\n *\n * Hash.validate('0x')\n * // @log: false\n *\n * Hash.validate('0x3ea2f1d0abf3fc66cf29eebb70cbd4e7fe762ef8a09bcc06c8edf641230afec0')\n * // @log: true\n * ```\n *\n * @param value - Value to check.\n * @returns Whether the value is a valid hash.\n */\nexport function validate(value: string): value is Hex.Hex {\n return Hex.validate(value) && Hex.size(value) === 32\n}\n\nexport declare namespace validate {\n type ErrorType =\n | Hex.validate.ErrorType\n | Hex.size.ErrorType\n | Errors.GlobalErrorType\n}\n", "import * as Bytes from './Bytes.js'\nimport * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport type { Compute, ExactPartial } from './internal/types.js'\nimport * as Json from './Json.js'\n\n/** Root type for an ECDSA Public Key. */\nexport type PublicKey<\n compressed extends boolean = false,\n bigintType = bigint,\n numberType = number,\n> = Compute<\n compressed extends true\n ? {\n prefix: numberType\n x: bigintType\n y?: undefined\n }\n : {\n prefix: numberType\n x: bigintType\n y: bigintType\n }\n>\n\n/**\n * Asserts that a {@link ox#PublicKey.PublicKey} is valid.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * PublicKey.assert({\n * prefix: 4,\n * y: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * })\n * // @error: PublicKey.InvalidError: Value \\`{\"y\":\"1\"}\\` is not a valid public key.\n * // @error: Public key must contain:\n * // @error: - an `x` and `prefix` value (compressed)\n * // @error: - an `x`, `y`, and `prefix` value (uncompressed)\n * ```\n *\n * @param publicKey - The public key object to assert.\n */\nexport function assert(\n publicKey: ExactPartial,\n options: assert.Options = {},\n): asserts publicKey is PublicKey {\n const { compressed } = options\n const { prefix, x, y } = publicKey\n\n // Uncompressed\n if (\n compressed === false ||\n (typeof x === 'bigint' && typeof y === 'bigint')\n ) {\n if (prefix !== 4)\n throw new InvalidPrefixError({\n prefix,\n cause: new InvalidUncompressedPrefixError(),\n })\n return\n }\n\n // Compressed\n if (\n compressed === true ||\n (typeof x === 'bigint' && typeof y === 'undefined')\n ) {\n if (prefix !== 3 && prefix !== 2)\n throw new InvalidPrefixError({\n prefix,\n cause: new InvalidCompressedPrefixError(),\n })\n return\n }\n\n // Unknown/invalid\n throw new InvalidError({ publicKey })\n}\n\nexport declare namespace assert {\n type Options = {\n /** Whether or not the public key should be compressed. */\n compressed?: boolean\n }\n\n type ErrorType = InvalidError | InvalidPrefixError | Errors.GlobalErrorType\n}\n\n/**\n * Compresses a {@link ox#PublicKey.PublicKey}.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.from({\n * prefix: 4,\n * x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * })\n *\n * const compressed = PublicKey.compress(publicKey) // [!code focus]\n * // @log: {\n * // @log: prefix: 3,\n * // @log: x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * // @log: }\n * ```\n *\n * @param publicKey - The public key to compress.\n * @returns The compressed public key.\n */\nexport function compress(publicKey: PublicKey): PublicKey {\n const { x, y } = publicKey\n return {\n prefix: y % 2n === 0n ? 2 : 3,\n x,\n }\n}\n\nexport declare namespace compress {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Instantiates a typed {@link ox#PublicKey.PublicKey} object from a {@link ox#PublicKey.PublicKey}, {@link ox#Bytes.Bytes}, or {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.from({\n * prefix: 4,\n * x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * })\n * // @log: {\n * // @log: prefix: 4,\n * // @log: x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * // @log: y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * // @log: }\n * ```\n *\n * @example\n * ### From Serialized\n *\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.from('0x048318535b54105d4a7aae60c08fc45f9687181b4fdfc625bd1a753fa7397fed753547f11ca8696646f2f3acb08e31016afac23e630c5d11f59f61fef57b0d2aa5')\n * // @log: {\n * // @log: prefix: 4,\n * // @log: x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * // @log: y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * // @log: }\n * ```\n *\n * @param value - The public key value to instantiate.\n * @returns The instantiated {@link ox#PublicKey.PublicKey}.\n */\nexport function from<\n const publicKey extends\n | CompressedPublicKey\n | UncompressedPublicKey\n | Hex.Hex\n | Bytes.Bytes,\n>(value: from.Value): from.ReturnType {\n const publicKey = (() => {\n if (Hex.validate(value)) return fromHex(value)\n if (Bytes.validate(value)) return fromBytes(value)\n\n const { prefix, x, y } = value\n if (typeof x === 'bigint' && typeof y === 'bigint')\n return { prefix: prefix ?? 0x04, x, y }\n return { prefix, x }\n })()\n\n assert(publicKey)\n\n return publicKey as never\n}\n\n/** @internal */\ntype CompressedPublicKey = PublicKey\n\n/** @internal */\ntype UncompressedPublicKey = Omit, 'prefix'> & {\n prefix?: PublicKey['prefix'] | undefined\n}\n\nexport declare namespace from {\n type Value<\n publicKey extends\n | CompressedPublicKey\n | UncompressedPublicKey\n | Hex.Hex\n | Bytes.Bytes = PublicKey,\n > = publicKey | CompressedPublicKey | UncompressedPublicKey\n\n type ReturnType<\n publicKey extends\n | CompressedPublicKey\n | UncompressedPublicKey\n | Hex.Hex\n | Bytes.Bytes = PublicKey,\n > = publicKey extends CompressedPublicKey | UncompressedPublicKey\n ? publicKey extends UncompressedPublicKey\n ? Compute\n : publicKey\n : PublicKey\n\n type ErrorType = assert.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Deserializes a {@link ox#PublicKey.PublicKey} from a {@link ox#Bytes.Bytes} value.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.fromBytes(new Uint8Array([128, 3, 131, ...]))\n * // @log: {\n * // @log: prefix: 4,\n * // @log: x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * // @log: y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * // @log: }\n * ```\n *\n * @param publicKey - The serialized public key.\n * @returns The deserialized public key.\n */\nexport function fromBytes(publicKey: Bytes.Bytes): PublicKey {\n return fromHex(Hex.fromBytes(publicKey))\n}\n\nexport declare namespace fromBytes {\n type ErrorType =\n | fromHex.ErrorType\n | Hex.fromBytes.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Deserializes a {@link ox#PublicKey.PublicKey} from a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.fromHex('0x8318535b54105d4a7aae60c08fc45f9687181b4fdfc625bd1a753fa7397fed753547f11ca8696646f2f3acb08e31016afac23e630c5d11f59f61fef57b0d2aa5')\n * // @log: {\n * // @log: prefix: 4,\n * // @log: x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * // @log: y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * // @log: }\n * ```\n *\n * @example\n * ### Deserializing a Compressed Public Key\n *\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.fromHex('0x038318535b54105d4a7aae60c08fc45f9687181b4fdfc625bd1a753fa7397fed75')\n * // @log: {\n * // @log: prefix: 3,\n * // @log: x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * // @log: }\n * ```\n *\n * @param publicKey - The serialized public key.\n * @returns The deserialized public key.\n */\nexport function fromHex(publicKey: Hex.Hex): PublicKey {\n if (\n publicKey.length !== 132 &&\n publicKey.length !== 130 &&\n publicKey.length !== 68\n )\n throw new InvalidSerializedSizeError({ publicKey })\n\n if (publicKey.length === 130) {\n const x = BigInt(Hex.slice(publicKey, 0, 32))\n const y = BigInt(Hex.slice(publicKey, 32, 64))\n return {\n prefix: 4,\n x,\n y,\n } as never\n }\n\n if (publicKey.length === 132) {\n const prefix = Number(Hex.slice(publicKey, 0, 1))\n const x = BigInt(Hex.slice(publicKey, 1, 33))\n const y = BigInt(Hex.slice(publicKey, 33, 65))\n return {\n prefix,\n x,\n y,\n } as never\n }\n\n const prefix = Number(Hex.slice(publicKey, 0, 1))\n const x = BigInt(Hex.slice(publicKey, 1, 33))\n return {\n prefix,\n x,\n } as never\n}\n\nexport declare namespace fromHex {\n type ErrorType = Hex.slice.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Serializes a {@link ox#PublicKey.PublicKey} to {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.from({\n * prefix: 4,\n * x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * })\n *\n * const bytes = PublicKey.toBytes(publicKey) // [!code focus]\n * // @log: Uint8Array [128, 3, 131, ...]\n * ```\n *\n * @param publicKey - The public key to serialize.\n * @returns The serialized public key.\n */\nexport function toBytes(\n publicKey: PublicKey,\n options: toBytes.Options = {},\n): Bytes.Bytes {\n return Bytes.fromHex(toHex(publicKey, options))\n}\n\nexport declare namespace toBytes {\n type Options = {\n /**\n * Whether to include the prefix in the serialized public key.\n * @default true\n */\n includePrefix?: boolean | undefined\n }\n\n type ErrorType =\n | Hex.fromNumber.ErrorType\n | Bytes.fromHex.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Serializes a {@link ox#PublicKey.PublicKey} to {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.from({\n * prefix: 4,\n * x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * })\n *\n * const hex = PublicKey.toHex(publicKey) // [!code focus]\n * // @log: '0x048318535b54105d4a7aae60c08fc45f9687181b4fdfc625bd1a753fa7397fed753547f11ca8696646f2f3acb08e31016afac23e630c5d11f59f61fef57b0d2aa5'\n * ```\n *\n * @param publicKey - The public key to serialize.\n * @returns The serialized public key.\n */\nexport function toHex(\n publicKey: PublicKey,\n options: toHex.Options = {},\n): Hex.Hex {\n assert(publicKey)\n\n const { prefix, x, y } = publicKey\n const { includePrefix = true } = options\n\n const publicKey_ = Hex.concat(\n includePrefix ? Hex.fromNumber(prefix, { size: 1 }) : '0x',\n Hex.fromNumber(x, { size: 32 }),\n // If the public key is not compressed, add the y coordinate.\n typeof y === 'bigint' ? Hex.fromNumber(y, { size: 32 }) : '0x',\n )\n\n return publicKey_\n}\n\nexport declare namespace toHex {\n type Options = {\n /**\n * Whether to include the prefix in the serialized public key.\n * @default true\n */\n includePrefix?: boolean | undefined\n }\n\n type ErrorType = Hex.fromNumber.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Validates a {@link ox#PublicKey.PublicKey}. Returns `true` if valid, `false` otherwise.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const valid = PublicKey.validate({\n * prefix: 4,\n * y: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * })\n * // @log: false\n * ```\n *\n * @param publicKey - The public key object to assert.\n */\nexport function validate(\n publicKey: ExactPartial,\n options: validate.Options = {},\n): boolean {\n try {\n assert(publicKey, options)\n return true\n } catch (_error) {\n return false\n }\n}\n\nexport declare namespace validate {\n type Options = {\n /** Whether or not the public key should be compressed. */\n compressed?: boolean\n }\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Thrown when a public key is invalid.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * PublicKey.assert({ y: 1n })\n * // @error: PublicKey.InvalidError: Value `{\"y\":1n}` is not a valid public key.\n * // @error: Public key must contain:\n * // @error: - an `x` and `prefix` value (compressed)\n * // @error: - an `x`, `y`, and `prefix` value (uncompressed)\n * ```\n */\nexport class InvalidError extends Errors.BaseError {\n override readonly name = 'PublicKey.InvalidError'\n\n constructor({ publicKey }: { publicKey: unknown }) {\n super(`Value \\`${Json.stringify(publicKey)}\\` is not a valid public key.`, {\n metaMessages: [\n 'Public key must contain:',\n '- an `x` and `prefix` value (compressed)',\n '- an `x`, `y`, and `prefix` value (uncompressed)',\n ],\n })\n }\n}\n\n/** Thrown when a public key has an invalid prefix. */\nexport class InvalidPrefixError<\n cause extends InvalidCompressedPrefixError | InvalidUncompressedPrefixError =\n | InvalidCompressedPrefixError\n | InvalidUncompressedPrefixError,\n> extends Errors.BaseError {\n override readonly name = 'PublicKey.InvalidPrefixError'\n\n constructor({ prefix, cause }: { prefix: number | undefined; cause: cause }) {\n super(`Prefix \"${prefix}\" is invalid.`, {\n cause,\n })\n }\n}\n\n/** Thrown when the public key has an invalid prefix for a compressed public key. */\nexport class InvalidCompressedPrefixError extends Errors.BaseError {\n override readonly name = 'PublicKey.InvalidCompressedPrefixError'\n\n constructor() {\n super('Prefix must be 2 or 3 for compressed public keys.')\n }\n}\n\n/** Thrown when the public key has an invalid prefix for an uncompressed public key. */\nexport class InvalidUncompressedPrefixError extends Errors.BaseError {\n override readonly name = 'PublicKey.InvalidUncompressedPrefixError'\n\n constructor() {\n super('Prefix must be 4 for uncompressed public keys.')\n }\n}\n\n/** Thrown when the public key has an invalid serialized size. */\nexport class InvalidSerializedSizeError extends Errors.BaseError {\n override readonly name = 'PublicKey.InvalidSerializedSizeError'\n\n constructor({ publicKey }: { publicKey: Hex.Hex | Bytes.Bytes }) {\n super(`Value \\`${publicKey}\\` is an invalid public key size.`, {\n metaMessages: [\n 'Expected: 33 bytes (compressed + prefix), 64 bytes (uncompressed) or 65 bytes (uncompressed + prefix).',\n `Received ${Hex.size(Hex.from(publicKey))} bytes.`,\n ],\n })\n }\n}\n", "import type {\n AbiParameter,\n AbiParameterKind,\n AbiParametersToPrimitiveTypes,\n AbiParameterToPrimitiveType,\n} from 'abitype'\nimport * as AbiParameters from '../AbiParameters.js'\nimport * as Address from '../Address.js'\nimport * as Bytes from '../Bytes.js'\nimport * as Errors from '../Errors.js'\nimport * as Hex from '../Hex.js'\nimport { integerRegex } from '../Solidity.js'\nimport type * as Cursor from './cursor.js'\nimport type { Compute, IsNarrowable, UnionToIntersection } from './types.js'\n\n/** @internal */\nexport type ParameterToPrimitiveType<\n abiParameter extends AbiParameter | { name: string; type: unknown },\n abiParameterKind extends AbiParameterKind = AbiParameterKind,\n> = AbiParameterToPrimitiveType\n\n/** @internal */\nexport type PreparedParameter = { dynamic: boolean; encoded: Hex.Hex }\n\n/** @internal */\nexport type ToObject<\n parameters extends readonly AbiParameter[],\n kind extends AbiParameterKind = AbiParameterKind,\n> = IsNarrowable extends true\n ? Compute<\n UnionToIntersection<\n {\n [index in keyof parameters]: parameters[index] extends {\n name: infer name extends string\n }\n ? {\n [key in name]: AbiParameterToPrimitiveType<\n parameters[index],\n kind\n >\n }\n : {\n [key in index]: AbiParameterToPrimitiveType<\n parameters[index],\n kind\n >\n }\n }[number]\n >\n >\n : unknown\n\n/** @internal */\nexport type ToPrimitiveTypes<\n abiParameters extends readonly AbiParameter[],\n abiParameterKind extends AbiParameterKind = AbiParameterKind,\n> = AbiParametersToPrimitiveTypes\n\n/** @internal */\nexport type Tuple = ParameterToPrimitiveType\n\n/** @internal */\nexport function decodeParameter(\n cursor: Cursor.Cursor,\n param: AbiParameters.Parameter,\n options: { checksumAddress?: boolean | undefined; staticPosition: number },\n) {\n const { checksumAddress, staticPosition } = options\n const arrayComponents = getArrayComponents(param.type)\n if (arrayComponents) {\n const [length, type] = arrayComponents\n return decodeArray(\n cursor,\n { ...param, type },\n { checksumAddress, length, staticPosition },\n )\n }\n if (param.type === 'tuple')\n return decodeTuple(cursor, param as TupleAbiParameter, {\n checksumAddress,\n staticPosition,\n })\n if (param.type === 'address')\n return decodeAddress(cursor, { checksum: checksumAddress })\n if (param.type === 'bool') return decodeBool(cursor)\n if (param.type.startsWith('bytes'))\n return decodeBytes(cursor, param, { staticPosition })\n if (param.type.startsWith('uint') || param.type.startsWith('int'))\n return decodeNumber(cursor, param)\n if (param.type === 'string') return decodeString(cursor, { staticPosition })\n throw new AbiParameters.InvalidTypeError(param.type)\n}\n\nexport declare namespace decodeParameter {\n type ErrorType =\n | decodeArray.ErrorType\n | decodeTuple.ErrorType\n | decodeAddress.ErrorType\n | decodeBool.ErrorType\n | decodeBytes.ErrorType\n | decodeNumber.ErrorType\n | decodeString.ErrorType\n | AbiParameters.InvalidTypeError\n | Errors.GlobalErrorType\n}\n\nconst sizeOfLength = 32\nconst sizeOfOffset = 32\n\n/** @internal */\nexport function decodeAddress(\n cursor: Cursor.Cursor,\n options: { checksum?: boolean | undefined } = {},\n) {\n const { checksum = false } = options\n const value = cursor.readBytes(32)\n const wrap = (address: Hex.Hex) =>\n checksum ? Address.checksum(address) : address\n return [wrap(Hex.fromBytes(Bytes.slice(value, -20))), 32]\n}\n\nexport declare namespace decodeAddress {\n type ErrorType =\n | Hex.fromBytes.ErrorType\n | Bytes.slice.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function decodeArray(\n cursor: Cursor.Cursor,\n param: AbiParameters.Parameter,\n options: {\n checksumAddress?: boolean | undefined\n length: number | null\n staticPosition: number\n },\n) {\n const { checksumAddress, length, staticPosition } = options\n\n // If the length of the array is not known in advance (dynamic array),\n // this means we will need to wonder off to the pointer and decode.\n if (!length) {\n // Dealing with a dynamic type, so get the offset of the array data.\n const offset = Bytes.toNumber(cursor.readBytes(sizeOfOffset))\n\n // Start is the static position of current slot + offset.\n const start = staticPosition + offset\n const startOfData = start + sizeOfLength\n\n // Get the length of the array from the offset.\n cursor.setPosition(start)\n const length = Bytes.toNumber(cursor.readBytes(sizeOfLength))\n\n // Check if the array has any dynamic children.\n const dynamicChild = hasDynamicChild(param)\n\n let consumed = 0\n const value: unknown[] = []\n for (let i = 0; i < length; ++i) {\n // If any of the children is dynamic, then all elements will be offset pointer, thus size of one slot (32 bytes).\n // Otherwise, elements will be the size of their encoding (consumed bytes).\n cursor.setPosition(startOfData + (dynamicChild ? i * 32 : consumed))\n const [data, consumed_] = decodeParameter(cursor, param, {\n checksumAddress,\n staticPosition: startOfData,\n })\n consumed += consumed_\n value.push(data)\n }\n\n // As we have gone wondering, restore to the original position + next slot.\n cursor.setPosition(staticPosition + 32)\n return [value, 32]\n }\n\n // If the length of the array is known in advance,\n // and the length of an element deeply nested in the array is not known,\n // we need to decode the offset of the array data.\n if (hasDynamicChild(param)) {\n // Dealing with dynamic types, so get the offset of the array data.\n const offset = Bytes.toNumber(cursor.readBytes(sizeOfOffset))\n\n // Start is the static position of current slot + offset.\n const start = staticPosition + offset\n\n const value: unknown[] = []\n for (let i = 0; i < length; ++i) {\n // Move cursor along to the next slot (next offset pointer).\n cursor.setPosition(start + i * 32)\n const [data] = decodeParameter(cursor, param, {\n checksumAddress,\n staticPosition: start,\n })\n value.push(data)\n }\n\n // As we have gone wondering, restore to the original position + next slot.\n cursor.setPosition(staticPosition + 32)\n return [value, 32]\n }\n\n // If the length of the array is known in advance and the array is deeply static,\n // then we can just decode each element in sequence.\n let consumed = 0\n const value: unknown[] = []\n for (let i = 0; i < length; ++i) {\n const [data, consumed_] = decodeParameter(cursor, param, {\n checksumAddress,\n staticPosition: staticPosition + consumed,\n })\n consumed += consumed_\n value.push(data)\n }\n return [value, consumed]\n}\n\nexport declare namespace decodeArray {\n type ErrorType = Bytes.toNumber.ErrorType | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function decodeBool(cursor: Cursor.Cursor) {\n return [Bytes.toBoolean(cursor.readBytes(32), { size: 32 }), 32]\n}\n\nexport declare namespace decodeBool {\n type ErrorType = Bytes.toBoolean.ErrorType | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function decodeBytes(\n cursor: Cursor.Cursor,\n param: AbiParameters.Parameter,\n { staticPosition }: { staticPosition: number },\n) {\n const [_, size] = param.type.split('bytes')\n if (!size) {\n // Dealing with dynamic types, so get the offset of the bytes data.\n const offset = Bytes.toNumber(cursor.readBytes(32))\n\n // Set position of the cursor to start of bytes data.\n cursor.setPosition(staticPosition + offset)\n\n const length = Bytes.toNumber(cursor.readBytes(32))\n\n // If there is no length, we have zero data.\n if (length === 0) {\n // As we have gone wondering, restore to the original position + next slot.\n cursor.setPosition(staticPosition + 32)\n return ['0x', 32]\n }\n\n const data = cursor.readBytes(length)\n\n // As we have gone wondering, restore to the original position + next slot.\n cursor.setPosition(staticPosition + 32)\n return [Hex.fromBytes(data), 32]\n }\n\n const value = Hex.fromBytes(cursor.readBytes(Number.parseInt(size, 10), 32))\n return [value, 32]\n}\n\nexport declare namespace decodeBytes {\n type ErrorType =\n | Hex.fromBytes.ErrorType\n | Bytes.toNumber.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function decodeNumber(\n cursor: Cursor.Cursor,\n param: AbiParameters.Parameter,\n) {\n const signed = param.type.startsWith('int')\n const size = Number.parseInt(param.type.split('int')[1] || '256', 10)\n const value = cursor.readBytes(32)\n return [\n size > 48\n ? Bytes.toBigInt(value, { signed })\n : Bytes.toNumber(value, { signed }),\n 32,\n ]\n}\n\nexport declare namespace decodeNumber {\n type ErrorType =\n | Bytes.toNumber.ErrorType\n | Bytes.toBigInt.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport type TupleAbiParameter = AbiParameters.Parameter & {\n components: readonly AbiParameters.Parameter[]\n}\n\n/** @internal */\nexport function decodeTuple(\n cursor: Cursor.Cursor,\n param: TupleAbiParameter,\n options: { checksumAddress?: boolean | undefined; staticPosition: number },\n) {\n const { checksumAddress, staticPosition } = options\n\n // Tuples can have unnamed components (i.e. they are arrays), so we must\n // determine whether the tuple is named or unnamed. In the case of a named\n // tuple, the value will be an object where each property is the name of the\n // component. In the case of an unnamed tuple, the value will be an array.\n const hasUnnamedChild =\n param.components.length === 0 || param.components.some(({ name }) => !name)\n\n // Initialize the value to an object or an array, depending on whether the\n // tuple is named or unnamed.\n const value: any = hasUnnamedChild ? [] : {}\n let consumed = 0\n\n // If the tuple has a dynamic child, we must first decode the offset to the\n // tuple data.\n if (hasDynamicChild(param)) {\n // Dealing with dynamic types, so get the offset of the tuple data.\n const offset = Bytes.toNumber(cursor.readBytes(sizeOfOffset))\n\n // Start is the static position of referencing slot + offset.\n const start = staticPosition + offset\n\n for (let i = 0; i < param.components.length; ++i) {\n const component = param.components[i]!\n cursor.setPosition(start + consumed)\n const [data, consumed_] = decodeParameter(cursor, component, {\n checksumAddress,\n staticPosition: start,\n })\n consumed += consumed_\n value[hasUnnamedChild ? i : component?.name!] = data\n }\n\n // As we have gone wondering, restore to the original position + next slot.\n cursor.setPosition(staticPosition + 32)\n return [value, 32]\n }\n\n // If the tuple has static children, we can just decode each component\n // in sequence.\n for (let i = 0; i < param.components.length; ++i) {\n const component = param.components[i]!\n const [data, consumed_] = decodeParameter(cursor, component, {\n checksumAddress,\n staticPosition,\n })\n value[hasUnnamedChild ? i : component?.name!] = data\n consumed += consumed_\n }\n return [value, consumed]\n}\n\nexport declare namespace decodeTuple {\n type ErrorType = Bytes.toNumber.ErrorType | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function decodeString(\n cursor: Cursor.Cursor,\n { staticPosition }: { staticPosition: number },\n) {\n // Get offset to start of string data.\n const offset = Bytes.toNumber(cursor.readBytes(32))\n\n // Start is the static position of current slot + offset.\n const start = staticPosition + offset\n cursor.setPosition(start)\n\n const length = Bytes.toNumber(cursor.readBytes(32))\n\n // If there is no length, we have zero data (empty string).\n if (length === 0) {\n cursor.setPosition(staticPosition + 32)\n return ['', 32]\n }\n\n const data = cursor.readBytes(length, 32)\n const value = Bytes.toString(Bytes.trimLeft(data))\n\n // As we have gone wondering, restore to the original position + next slot.\n cursor.setPosition(staticPosition + 32)\n\n return [value, 32]\n}\n\nexport declare namespace decodeString {\n type ErrorType =\n | Bytes.toNumber.ErrorType\n | Bytes.toString.ErrorType\n | Bytes.trimLeft.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function prepareParameters<\n const parameters extends AbiParameters.AbiParameters,\n>({\n checksumAddress,\n parameters,\n values,\n}: {\n checksumAddress?: boolean | undefined\n parameters: parameters\n values: parameters extends AbiParameters.AbiParameters\n ? ToPrimitiveTypes\n : never\n}) {\n const preparedParameters: PreparedParameter[] = []\n for (let i = 0; i < parameters.length; i++) {\n preparedParameters.push(\n prepareParameter({\n checksumAddress,\n parameter: parameters[i]!,\n value: values[i],\n }),\n )\n }\n return preparedParameters\n}\n\n/** @internal */\nexport declare namespace prepareParameters {\n type ErrorType = prepareParameter.ErrorType | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function prepareParameter<\n const parameter extends AbiParameters.Parameter,\n>({\n checksumAddress = false,\n parameter: parameter_,\n value,\n}: {\n parameter: parameter\n value: parameter extends AbiParameters.Parameter\n ? ParameterToPrimitiveType\n : never\n checksumAddress?: boolean | undefined\n}): PreparedParameter {\n const parameter = parameter_ as AbiParameters.Parameter\n\n const arrayComponents = getArrayComponents(parameter.type)\n if (arrayComponents) {\n const [length, type] = arrayComponents\n return encodeArray(value, {\n checksumAddress,\n length,\n parameter: {\n ...parameter,\n type,\n },\n })\n }\n if (parameter.type === 'tuple') {\n return encodeTuple(value as unknown as Tuple, {\n checksumAddress,\n parameter: parameter as TupleAbiParameter,\n })\n }\n if (parameter.type === 'address') {\n return encodeAddress(value as unknown as Hex.Hex, {\n checksum: checksumAddress,\n })\n }\n if (parameter.type === 'bool') {\n return encodeBoolean(value as unknown as boolean)\n }\n if (parameter.type.startsWith('uint') || parameter.type.startsWith('int')) {\n const signed = parameter.type.startsWith('int')\n const [, , size = '256'] = integerRegex.exec(parameter.type) ?? []\n return encodeNumber(value as unknown as number, {\n signed,\n size: Number(size),\n })\n }\n if (parameter.type.startsWith('bytes')) {\n return encodeBytes(value as unknown as Hex.Hex, { type: parameter.type })\n }\n if (parameter.type === 'string') {\n return encodeString(value as unknown as string)\n }\n throw new AbiParameters.InvalidTypeError(parameter.type)\n}\n\n/** @internal */\nexport declare namespace prepareParameter {\n type ErrorType =\n | encodeArray.ErrorType\n | encodeTuple.ErrorType\n | encodeAddress.ErrorType\n | encodeBoolean.ErrorType\n | encodeBytes.ErrorType\n | encodeString.ErrorType\n | AbiParameters.InvalidTypeError\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function encode(preparedParameters: PreparedParameter[]): Hex.Hex {\n // 1. Compute the size of the static part of the parameters.\n let staticSize = 0\n for (let i = 0; i < preparedParameters.length; i++) {\n const { dynamic, encoded } = preparedParameters[i]!\n if (dynamic) staticSize += 32\n else staticSize += Hex.size(encoded)\n }\n\n // 2. Split the parameters into static and dynamic parts.\n const staticParameters: Hex.Hex[] = []\n const dynamicParameters: Hex.Hex[] = []\n let dynamicSize = 0\n for (let i = 0; i < preparedParameters.length; i++) {\n const { dynamic, encoded } = preparedParameters[i]!\n if (dynamic) {\n staticParameters.push(\n Hex.fromNumber(staticSize + dynamicSize, { size: 32 }),\n )\n dynamicParameters.push(encoded)\n dynamicSize += Hex.size(encoded)\n } else {\n staticParameters.push(encoded)\n }\n }\n\n // 3. Concatenate static and dynamic parts.\n return Hex.concat(...staticParameters, ...dynamicParameters)\n}\n\n/** @internal */\nexport declare namespace encode {\n type ErrorType =\n | Hex.concat.ErrorType\n | Hex.fromNumber.ErrorType\n | Hex.size.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function encodeAddress(\n value: Hex.Hex,\n options: { checksum: boolean },\n): PreparedParameter {\n const { checksum = false } = options\n Address.assert(value, { strict: checksum })\n return {\n dynamic: false,\n encoded: Hex.padLeft(value.toLowerCase() as Hex.Hex),\n }\n}\n\n/** @internal */\nexport declare namespace encodeAddress {\n type ErrorType =\n | Address.assert.ErrorType\n | Hex.padLeft.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function encodeArray(\n value: ParameterToPrimitiveType,\n options: {\n checksumAddress?: boolean | undefined\n length: number | null\n parameter: parameter\n },\n): PreparedParameter {\n const { checksumAddress, length, parameter } = options\n\n const dynamic = length === null\n\n if (!Array.isArray(value)) throw new AbiParameters.InvalidArrayError(value)\n if (!dynamic && value.length !== length)\n throw new AbiParameters.ArrayLengthMismatchError({\n expectedLength: length!,\n givenLength: value.length,\n type: `${parameter.type}[${length}]`,\n })\n\n let dynamicChild = false\n const preparedParameters: PreparedParameter[] = []\n for (let i = 0; i < value.length; i++) {\n const preparedParam = prepareParameter({\n checksumAddress,\n parameter,\n value: value[i],\n })\n if (preparedParam.dynamic) dynamicChild = true\n preparedParameters.push(preparedParam)\n }\n\n if (dynamic || dynamicChild) {\n const data = encode(preparedParameters)\n if (dynamic) {\n const length = Hex.fromNumber(preparedParameters.length, { size: 32 })\n return {\n dynamic: true,\n encoded:\n preparedParameters.length > 0 ? Hex.concat(length, data) : length,\n }\n }\n if (dynamicChild) return { dynamic: true, encoded: data }\n }\n return {\n dynamic: false,\n encoded: Hex.concat(...preparedParameters.map(({ encoded }) => encoded)),\n }\n}\n\n/** @internal */\nexport declare namespace encodeArray {\n type ErrorType =\n | AbiParameters.InvalidArrayError\n | AbiParameters.ArrayLengthMismatchError\n | Hex.concat.ErrorType\n | Hex.fromNumber.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function encodeBytes(\n value: Hex.Hex,\n { type }: { type: string },\n): PreparedParameter {\n const [, parametersize] = type.split('bytes')\n const bytesSize = Hex.size(value)\n if (!parametersize) {\n let value_ = value\n // If the size is not divisible by 32 bytes, pad the end\n // with empty bytes to the ceiling 32 bytes.\n if (bytesSize % 32 !== 0)\n value_ = Hex.padRight(value_, Math.ceil((value.length - 2) / 2 / 32) * 32)\n return {\n dynamic: true,\n encoded: Hex.concat(\n Hex.padLeft(Hex.fromNumber(bytesSize, { size: 32 })),\n value_,\n ),\n }\n }\n if (bytesSize !== Number.parseInt(parametersize, 10))\n throw new AbiParameters.BytesSizeMismatchError({\n expectedSize: Number.parseInt(parametersize, 10),\n value,\n })\n return { dynamic: false, encoded: Hex.padRight(value) }\n}\n\n/** @internal */\nexport declare namespace encodeBytes {\n type ErrorType =\n | Hex.padLeft.ErrorType\n | Hex.padRight.ErrorType\n | Hex.fromNumber.ErrorType\n | Hex.slice.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function encodeBoolean(value: boolean): PreparedParameter {\n if (typeof value !== 'boolean')\n throw new Errors.BaseError(\n `Invalid boolean value: \"${value}\" (type: ${typeof value}). Expected: \\`true\\` or \\`false\\`.`,\n )\n return { dynamic: false, encoded: Hex.padLeft(Hex.fromBoolean(value)) }\n}\n\n/** @internal */\nexport declare namespace encodeBoolean {\n type ErrorType =\n | Hex.padLeft.ErrorType\n | Hex.fromBoolean.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function encodeNumber(\n value: number,\n { signed, size }: { signed: boolean; size: number },\n): PreparedParameter {\n if (typeof size === 'number') {\n const max = 2n ** (BigInt(size) - (signed ? 1n : 0n)) - 1n\n const min = signed ? -max - 1n : 0n\n if (value > max || value < min)\n throw new Hex.IntegerOutOfRangeError({\n max: max.toString(),\n min: min.toString(),\n signed,\n size: size / 8,\n value: value.toString(),\n })\n }\n return {\n dynamic: false,\n encoded: Hex.fromNumber(value, {\n size: 32,\n signed,\n }),\n }\n}\n\n/** @internal */\nexport declare namespace encodeNumber {\n type ErrorType = Hex.fromNumber.ErrorType | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function encodeString(value: string): PreparedParameter {\n const hexValue = Hex.fromString(value)\n const partsLength = Math.ceil(Hex.size(hexValue) / 32)\n const parts: Hex.Hex[] = []\n for (let i = 0; i < partsLength; i++) {\n parts.push(Hex.padRight(Hex.slice(hexValue, i * 32, (i + 1) * 32)))\n }\n return {\n dynamic: true,\n encoded: Hex.concat(\n Hex.padRight(Hex.fromNumber(Hex.size(hexValue), { size: 32 })),\n ...parts,\n ),\n }\n}\n\n/** @internal */\nexport declare namespace encodeString {\n type ErrorType =\n | Hex.fromNumber.ErrorType\n | Hex.padRight.ErrorType\n | Hex.slice.ErrorType\n | Hex.size.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function encodeTuple<\n const parameter extends AbiParameters.Parameter & {\n components: readonly AbiParameters.Parameter[]\n },\n>(\n value: ParameterToPrimitiveType,\n options: {\n checksumAddress?: boolean | undefined\n parameter: parameter\n },\n): PreparedParameter {\n const { checksumAddress, parameter } = options\n\n let dynamic = false\n const preparedParameters: PreparedParameter[] = []\n for (let i = 0; i < parameter.components.length; i++) {\n const param_ = parameter.components[i]!\n const index = Array.isArray(value) ? i : param_.name\n const preparedParam = prepareParameter({\n checksumAddress,\n parameter: param_,\n value: (value as any)[index!] as readonly unknown[],\n })\n preparedParameters.push(preparedParam)\n if (preparedParam.dynamic) dynamic = true\n }\n return {\n dynamic,\n encoded: dynamic\n ? encode(preparedParameters)\n : Hex.concat(...preparedParameters.map(({ encoded }) => encoded)),\n }\n}\n\n/** @internal */\nexport declare namespace encodeTuple {\n type ErrorType = Hex.concat.ErrorType | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function getArrayComponents(\n type: string,\n): [length: number | null, innerType: string] | undefined {\n const matches = type.match(/^(.*)\\[(\\d+)?\\]$/)\n return matches\n ? // Return `null` if the array is dynamic.\n [matches[2]! ? Number(matches[2]!) : null, matches[1]!]\n : undefined\n}\n\n/** @internal */\nexport function hasDynamicChild(param: AbiParameters.Parameter) {\n const { type } = param\n if (type === 'string') return true\n if (type === 'bytes') return true\n if (type.endsWith('[]')) return true\n\n if (type === 'tuple') return (param as any).components?.some(hasDynamicChild)\n\n const arrayComponents = getArrayComponents(param.type)\n if (\n arrayComponents &&\n hasDynamicChild({\n ...param,\n type: arrayComponents[1],\n } as AbiParameters.Parameter)\n )\n return true\n\n return false\n}\n", "export const arrayRegex = /^(.*)\\[([0-9]*)\\]$/\n\n// `bytes`: binary type of `M` bytes, `0 < M <= 32`\n// https://regexr.com/6va55\nexport const bytesRegex = /^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/\n\n// `(u)int`: (un)signed integer type of `M` bits, `0 < M <= 256`, `M % 8 == 0`\n// https://regexr.com/6v8hp\nexport const integerRegex =\n /^(u?int)(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/\n\nexport const maxInt8 = 2n ** (8n - 1n) - 1n\nexport const maxInt16 = 2n ** (16n - 1n) - 1n\nexport const maxInt24 = 2n ** (24n - 1n) - 1n\nexport const maxInt32 = 2n ** (32n - 1n) - 1n\nexport const maxInt40 = 2n ** (40n - 1n) - 1n\nexport const maxInt48 = 2n ** (48n - 1n) - 1n\nexport const maxInt56 = 2n ** (56n - 1n) - 1n\nexport const maxInt64 = 2n ** (64n - 1n) - 1n\nexport const maxInt72 = 2n ** (72n - 1n) - 1n\nexport const maxInt80 = 2n ** (80n - 1n) - 1n\nexport const maxInt88 = 2n ** (88n - 1n) - 1n\nexport const maxInt96 = 2n ** (96n - 1n) - 1n\nexport const maxInt104 = 2n ** (104n - 1n) - 1n\nexport const maxInt112 = 2n ** (112n - 1n) - 1n\nexport const maxInt120 = 2n ** (120n - 1n) - 1n\nexport const maxInt128 = 2n ** (128n - 1n) - 1n\nexport const maxInt136 = 2n ** (136n - 1n) - 1n\nexport const maxInt144 = 2n ** (144n - 1n) - 1n\nexport const maxInt152 = 2n ** (152n - 1n) - 1n\nexport const maxInt160 = 2n ** (160n - 1n) - 1n\nexport const maxInt168 = 2n ** (168n - 1n) - 1n\nexport const maxInt176 = 2n ** (176n - 1n) - 1n\nexport const maxInt184 = 2n ** (184n - 1n) - 1n\nexport const maxInt192 = 2n ** (192n - 1n) - 1n\nexport const maxInt200 = 2n ** (200n - 1n) - 1n\nexport const maxInt208 = 2n ** (208n - 1n) - 1n\nexport const maxInt216 = 2n ** (216n - 1n) - 1n\nexport const maxInt224 = 2n ** (224n - 1n) - 1n\nexport const maxInt232 = 2n ** (232n - 1n) - 1n\nexport const maxInt240 = 2n ** (240n - 1n) - 1n\nexport const maxInt248 = 2n ** (248n - 1n) - 1n\nexport const maxInt256 = 2n ** (256n - 1n) - 1n\n\nexport const minInt8 = -(2n ** (8n - 1n))\nexport const minInt16 = -(2n ** (16n - 1n))\nexport const minInt24 = -(2n ** (24n - 1n))\nexport const minInt32 = -(2n ** (32n - 1n))\nexport const minInt40 = -(2n ** (40n - 1n))\nexport const minInt48 = -(2n ** (48n - 1n))\nexport const minInt56 = -(2n ** (56n - 1n))\nexport const minInt64 = -(2n ** (64n - 1n))\nexport const minInt72 = -(2n ** (72n - 1n))\nexport const minInt80 = -(2n ** (80n - 1n))\nexport const minInt88 = -(2n ** (88n - 1n))\nexport const minInt96 = -(2n ** (96n - 1n))\nexport const minInt104 = -(2n ** (104n - 1n))\nexport const minInt112 = -(2n ** (112n - 1n))\nexport const minInt120 = -(2n ** (120n - 1n))\nexport const minInt128 = -(2n ** (128n - 1n))\nexport const minInt136 = -(2n ** (136n - 1n))\nexport const minInt144 = -(2n ** (144n - 1n))\nexport const minInt152 = -(2n ** (152n - 1n))\nexport const minInt160 = -(2n ** (160n - 1n))\nexport const minInt168 = -(2n ** (168n - 1n))\nexport const minInt176 = -(2n ** (176n - 1n))\nexport const minInt184 = -(2n ** (184n - 1n))\nexport const minInt192 = -(2n ** (192n - 1n))\nexport const minInt200 = -(2n ** (200n - 1n))\nexport const minInt208 = -(2n ** (208n - 1n))\nexport const minInt216 = -(2n ** (216n - 1n))\nexport const minInt224 = -(2n ** (224n - 1n))\nexport const minInt232 = -(2n ** (232n - 1n))\nexport const minInt240 = -(2n ** (240n - 1n))\nexport const minInt248 = -(2n ** (248n - 1n))\nexport const minInt256 = -(2n ** (256n - 1n))\n\nexport const maxUint8 = 2n ** 8n - 1n\nexport const maxUint16 = 2n ** 16n - 1n\nexport const maxUint24 = 2n ** 24n - 1n\nexport const maxUint32 = 2n ** 32n - 1n\nexport const maxUint40 = 2n ** 40n - 1n\nexport const maxUint48 = 2n ** 48n - 1n\nexport const maxUint56 = 2n ** 56n - 1n\nexport const maxUint64 = 2n ** 64n - 1n\nexport const maxUint72 = 2n ** 72n - 1n\nexport const maxUint80 = 2n ** 80n - 1n\nexport const maxUint88 = 2n ** 88n - 1n\nexport const maxUint96 = 2n ** 96n - 1n\nexport const maxUint104 = 2n ** 104n - 1n\nexport const maxUint112 = 2n ** 112n - 1n\nexport const maxUint120 = 2n ** 120n - 1n\nexport const maxUint128 = 2n ** 128n - 1n\nexport const maxUint136 = 2n ** 136n - 1n\nexport const maxUint144 = 2n ** 144n - 1n\nexport const maxUint152 = 2n ** 152n - 1n\nexport const maxUint160 = 2n ** 160n - 1n\nexport const maxUint168 = 2n ** 168n - 1n\nexport const maxUint176 = 2n ** 176n - 1n\nexport const maxUint184 = 2n ** 184n - 1n\nexport const maxUint192 = 2n ** 192n - 1n\nexport const maxUint200 = 2n ** 200n - 1n\nexport const maxUint208 = 2n ** 208n - 1n\nexport const maxUint216 = 2n ** 216n - 1n\nexport const maxUint224 = 2n ** 224n - 1n\nexport const maxUint232 = 2n ** 232n - 1n\nexport const maxUint240 = 2n ** 240n - 1n\nexport const maxUint248 = 2n ** 248n - 1n\nexport const maxUint256 = 2n ** 256n - 1n\n", "import type { Bytes } from '../Bytes.js'\nimport * as Errors from '../Errors.js'\n\n/** @internal */\nexport type Cursor = {\n bytes: Bytes\n dataView: DataView\n position: number\n positionReadCount: Map\n recursiveReadCount: number\n recursiveReadLimit: number\n remaining: number\n assertReadLimit(position?: number): void\n assertPosition(position: number): void\n decrementPosition(offset: number): void\n getReadCount(position?: number): number\n incrementPosition(offset: number): void\n inspectByte(position?: number): Bytes[number]\n inspectBytes(length: number, position?: number): Bytes\n inspectUint8(position?: number): number\n inspectUint16(position?: number): number\n inspectUint24(position?: number): number\n inspectUint32(position?: number): number\n pushByte(byte: Bytes[number]): void\n pushBytes(bytes: Bytes): void\n pushUint8(value: number): void\n pushUint16(value: number): void\n pushUint24(value: number): void\n pushUint32(value: number): void\n readByte(): Bytes[number]\n readBytes(length: number, size?: number): Bytes\n readUint8(): number\n readUint16(): number\n readUint24(): number\n readUint32(): number\n setPosition(position: number): () => void\n _touch(): void\n}\n\nconst staticCursor: Cursor = {\n bytes: new Uint8Array(),\n dataView: new DataView(new ArrayBuffer(0)),\n position: 0,\n positionReadCount: new Map(),\n recursiveReadCount: 0,\n recursiveReadLimit: Number.POSITIVE_INFINITY,\n assertReadLimit() {\n if (this.recursiveReadCount >= this.recursiveReadLimit)\n throw new RecursiveReadLimitExceededError({\n count: this.recursiveReadCount + 1,\n limit: this.recursiveReadLimit,\n })\n },\n assertPosition(position) {\n if (position < 0 || position > this.bytes.length - 1)\n throw new PositionOutOfBoundsError({\n length: this.bytes.length,\n position,\n })\n },\n decrementPosition(offset) {\n if (offset < 0) throw new NegativeOffsetError({ offset })\n const position = this.position - offset\n this.assertPosition(position)\n this.position = position\n },\n getReadCount(position) {\n return this.positionReadCount.get(position || this.position) || 0\n },\n incrementPosition(offset) {\n if (offset < 0) throw new NegativeOffsetError({ offset })\n const position = this.position + offset\n this.assertPosition(position)\n this.position = position\n },\n inspectByte(position_) {\n const position = position_ ?? this.position\n this.assertPosition(position)\n return this.bytes[position]!\n },\n inspectBytes(length, position_) {\n const position = position_ ?? this.position\n this.assertPosition(position + length - 1)\n return this.bytes.subarray(position, position + length)\n },\n inspectUint8(position_) {\n const position = position_ ?? this.position\n this.assertPosition(position)\n return this.bytes[position]!\n },\n inspectUint16(position_) {\n const position = position_ ?? this.position\n this.assertPosition(position + 1)\n return this.dataView.getUint16(position)\n },\n inspectUint24(position_) {\n const position = position_ ?? this.position\n this.assertPosition(position + 2)\n return (\n (this.dataView.getUint16(position) << 8) +\n this.dataView.getUint8(position + 2)\n )\n },\n inspectUint32(position_) {\n const position = position_ ?? this.position\n this.assertPosition(position + 3)\n return this.dataView.getUint32(position)\n },\n pushByte(byte: Bytes[number]) {\n this.assertPosition(this.position)\n this.bytes[this.position] = byte\n this.position++\n },\n pushBytes(bytes: Bytes) {\n this.assertPosition(this.position + bytes.length - 1)\n this.bytes.set(bytes, this.position)\n this.position += bytes.length\n },\n pushUint8(value: number) {\n this.assertPosition(this.position)\n this.bytes[this.position] = value\n this.position++\n },\n pushUint16(value: number) {\n this.assertPosition(this.position + 1)\n this.dataView.setUint16(this.position, value)\n this.position += 2\n },\n pushUint24(value: number) {\n this.assertPosition(this.position + 2)\n this.dataView.setUint16(this.position, value >> 8)\n this.dataView.setUint8(this.position + 2, value & ~4294967040)\n this.position += 3\n },\n pushUint32(value: number) {\n this.assertPosition(this.position + 3)\n this.dataView.setUint32(this.position, value)\n this.position += 4\n },\n readByte() {\n this.assertReadLimit()\n this._touch()\n const value = this.inspectByte()\n this.position++\n return value\n },\n readBytes(length, size) {\n this.assertReadLimit()\n this._touch()\n const value = this.inspectBytes(length)\n this.position += size ?? length\n return value\n },\n readUint8() {\n this.assertReadLimit()\n this._touch()\n const value = this.inspectUint8()\n this.position += 1\n return value\n },\n readUint16() {\n this.assertReadLimit()\n this._touch()\n const value = this.inspectUint16()\n this.position += 2\n return value\n },\n readUint24() {\n this.assertReadLimit()\n this._touch()\n const value = this.inspectUint24()\n this.position += 3\n return value\n },\n readUint32() {\n this.assertReadLimit()\n this._touch()\n const value = this.inspectUint32()\n this.position += 4\n return value\n },\n get remaining() {\n return this.bytes.length - this.position\n },\n setPosition(position) {\n const oldPosition = this.position\n this.assertPosition(position)\n this.position = position\n return () => (this.position = oldPosition)\n },\n _touch() {\n if (this.recursiveReadLimit === Number.POSITIVE_INFINITY) return\n const count = this.getReadCount()\n this.positionReadCount.set(this.position, count + 1)\n if (count > 0) this.recursiveReadCount++\n },\n}\n\n/** @internal */\nexport function create(\n bytes: Bytes,\n { recursiveReadLimit = 8_192 }: create.Config = {},\n): Cursor {\n const cursor: Cursor = Object.create(staticCursor)\n cursor.bytes = bytes\n cursor.dataView = new DataView(\n bytes.buffer,\n bytes.byteOffset,\n bytes.byteLength,\n )\n cursor.positionReadCount = new Map()\n cursor.recursiveReadLimit = recursiveReadLimit\n return cursor\n}\n\n/** @internal */\nexport declare namespace create {\n type Config = { recursiveReadLimit?: number | undefined }\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/** @internal */\nexport class NegativeOffsetError extends Errors.BaseError {\n override readonly name = 'Cursor.NegativeOffsetError'\n\n constructor({ offset }: { offset: number }) {\n super(`Offset \\`${offset}\\` cannot be negative.`)\n }\n}\n\n/** @internal */\nexport class PositionOutOfBoundsError extends Errors.BaseError {\n override readonly name = 'Cursor.PositionOutOfBoundsError'\n\n constructor({ length, position }: { length: number; position: number }) {\n super(\n `Position \\`${position}\\` is out of bounds (\\`0 < position < ${length}\\`).`,\n )\n }\n}\n\n/** @internal */\nexport class RecursiveReadLimitExceededError extends Errors.BaseError {\n override readonly name = 'Cursor.RecursiveReadLimitExceededError'\n\n constructor({ count, limit }: { count: number; limit: number }) {\n super(\n `Recursive read limit of \\`${limit}\\` exceeded (recursive read count: \\`${count}\\`).`,\n )\n }\n}\n", "import type * as Address from './Address.js'\nimport type * as Errors from './Errors.js'\nimport * as Hash from './Hash.js'\nimport * as Hex from './Hex.js'\nimport type { Compute, Mutable, Undefined } from './internal/types.js'\nimport * as Rlp from './Rlp.js'\nimport * as Signature from './Signature.js'\n\n/** Root type for an EIP-7702 Authorization. */\nexport type Authorization<\n signed extends boolean = boolean,\n bigintType = bigint,\n numberType = number,\n> = Compute<\n {\n /** Address of the contract to set as code for the Authority. */\n address: Address.Address\n /** Chain ID to authorize. */\n chainId: numberType\n /** Nonce of the Authority to authorize. */\n nonce: bigintType\n } & (signed extends true\n ? Signature.Signature\n : Undefined)\n>\n\n/** RPC representation of an {@link ox#Authorization.Authorization}. */\nexport type Rpc = Authorization\n\n/** List of {@link ox#Authorization.Authorization}. */\nexport type List<\n signed extends boolean = boolean,\n bigintType = bigint,\n numberType = number,\n> = Compute[]>\n\n/** RPC representation of an {@link ox#Authorization.List}. */\nexport type ListRpc = List\n\n/** Signed representation of a list of {@link ox#Authorization.Authorization}. */\nexport type ListSigned = List<\n true,\n bigintType,\n numberType\n>\n\n/** Signed representation of an {@link ox#Authorization.Authorization}. */\nexport type Signed = Authorization<\n true,\n bigintType,\n numberType\n>\n\n/** Tuple representation of an {@link ox#Authorization.Authorization}. */\nexport type Tuple = signed extends true\n ? readonly [\n chainId: Hex.Hex,\n address: Hex.Hex,\n nonce: Hex.Hex,\n yParity: Hex.Hex,\n r: Hex.Hex,\n s: Hex.Hex,\n ]\n : readonly [chainId: Hex.Hex, address: Hex.Hex, nonce: Hex.Hex]\n\n/** Tuple representation of a signed {@link ox#Authorization.Authorization}. */\nexport type TupleSigned = Tuple\n\n/** Tuple representation of a list of {@link ox#Authorization.Authorization}. */\nexport type TupleList =\n readonly Tuple[]\n\n/** Tuple representation of a list of signed {@link ox#Authorization.Authorization}. */\nexport type TupleListSigned = TupleList\n\n/**\n * Converts an [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization object into a typed {@link ox#Authorization.Authorization}.\n *\n * @example\n * An Authorization can be instantiated from an [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization tuple in object format.\n *\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.from({\n * address: '0x1234567890abcdef1234567890abcdef12345678',\n * chainId: 1,\n * nonce: 69n,\n * })\n * ```\n *\n * @example\n * ### Attaching Signatures\n *\n * A {@link ox#Signature.Signature} can be attached with the `signature` option. The example below demonstrates signing\n * an Authorization with {@link ox#Secp256k1.(sign:function)}.\n *\n * ```ts twoslash\n * import { Authorization, Secp256k1 } from 'ox'\n *\n * const authorization = Authorization.from({\n * address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * chainId: 1,\n * nonce: 40n,\n * })\n *\n * const signature = Secp256k1.sign({\n * payload: Authorization.getSignPayload(authorization),\n * privateKey: '0x...',\n * })\n *\n * const authorization_signed = Authorization.from(authorization, { signature }) // [!code focus]\n * ```\n *\n * @param authorization - An [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization tuple in object format.\n * @param options - Authorization options.\n * @returns The {@link ox#Authorization.Authorization}.\n */\nexport function from<\n const authorization extends Authorization | Rpc,\n const signature extends Signature.Signature | undefined = undefined,\n>(\n authorization: authorization | Authorization,\n options: from.Options = {},\n): from.ReturnType {\n if (typeof authorization.chainId === 'string')\n return fromRpc(authorization) as never\n return { ...authorization, ...options.signature } as never\n}\n\nexport declare namespace from {\n type Options<\n signature extends Signature.Signature | undefined =\n | Signature.Signature\n | undefined,\n > = {\n /** The {@link ox#Signature.Signature} to attach to the Authorization. */\n signature?: signature | Signature.Signature | undefined\n }\n\n type ReturnType<\n authorization extends Authorization | Rpc = Authorization,\n signature extends Signature.Signature | undefined =\n | Signature.Signature\n | undefined,\n > = Compute<\n authorization extends Rpc\n ? Signed\n : authorization &\n (signature extends Signature.Signature ? Readonly : {})\n >\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts an {@link ox#Authorization.Rpc} to an {@link ox#Authorization.Authorization}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.fromRpc({\n * address: '0x0000000000000000000000000000000000000000',\n * chainId: '0x1',\n * nonce: '0x1',\n * r: '0x635dc2033e60185bb36709c29c75d64ea51dfbd91c32ef4be198e4ceb169fb4d',\n * s: '0x50c2667ac4c771072746acfdcf1f1483336dcca8bd2df47cd83175dbe60f0540',\n * yParity: '0x0',\n * })\n * ```\n *\n * @param authorization - The RPC-formatted Authorization.\n * @returns A signed {@link ox#Authorization.Authorization}.\n */\nexport function fromRpc(authorization: Rpc): Signed {\n const { address, chainId, nonce } = authorization\n const signature = Signature.extract(authorization)!\n\n return {\n address,\n chainId: Number(chainId),\n nonce: BigInt(nonce),\n ...signature,\n }\n}\n\nexport declare namespace fromRpc {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts an {@link ox#Authorization.ListRpc} to an {@link ox#Authorization.List}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorizationList = Authorization.fromRpcList([{\n * address: '0x0000000000000000000000000000000000000000',\n * chainId: '0x1',\n * nonce: '0x1',\n * r: '0x635dc2033e60185bb36709c29c75d64ea51dfbd91c32ef4be198e4ceb169fb4d',\n * s: '0x50c2667ac4c771072746acfdcf1f1483336dcca8bd2df47cd83175dbe60f0540',\n * yParity: '0x0',\n * }])\n * ```\n *\n * @param authorizationList - The RPC-formatted Authorization list.\n * @returns A signed {@link ox#Authorization.List}.\n */\nexport function fromRpcList(authorizationList: ListRpc): ListSigned {\n return authorizationList.map(fromRpc)\n}\n\nexport declare namespace fromRpcList {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts an {@link ox#Authorization.Tuple} to an {@link ox#Authorization.Authorization}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.fromTuple([\n * '0x1',\n * '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * '0x3'\n * ])\n * // @log: {\n * // @log: address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * // @log: chainId: 1,\n * // @log: nonce: 3n\n * // @log: }\n * ```\n *\n * @example\n * It is also possible to append a Signature tuple to the end of an Authorization tuple.\n *\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.fromTuple([\n * '0x1',\n * '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * '0x3',\n * '0x1',\n * '0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90',\n * '0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064',\n * ])\n * // @log: {\n * // @log: address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * // @log: chainId: 1,\n * // @log: nonce: 3n\n * // @log: r: BigInt('0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90'),\n * // @log: s: BigInt('0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064'),\n * // @log: yParity: 0,\n * // @log: }\n * ```\n *\n * @param tuple - The [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization tuple.\n * @returns The {@link ox#Authorization.Authorization}.\n */\nexport function fromTuple(\n tuple: tuple,\n): fromTuple.ReturnType {\n const [chainId, address, nonce, yParity, r, s] = tuple\n let args = {\n address,\n chainId: chainId === '0x' ? 0 : Number(chainId),\n nonce: nonce === '0x' ? 0n : BigInt(nonce),\n }\n if (yParity && r && s)\n args = { ...args, ...Signature.fromTuple([yParity, r, s]) }\n return from(args) as never\n}\n\nexport declare namespace fromTuple {\n type ReturnType = Compute<\n Authorization ? true : false>\n >\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts an {@link ox#Authorization.TupleList} to an {@link ox#Authorization.List}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorizationList = Authorization.fromTupleList([\n * ['0x1', '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c', '0x3'],\n * ['0x3', '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c', '0x14'],\n * ])\n * // @log: [\n * // @log: {\n * // @log: address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * // @log: chainId: 1,\n * // @log: nonce: 3n,\n * // @log: },\n * // @log: {\n * // @log: address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * // @log: chainId: 3,\n * // @log: nonce: 20n,\n * // @log: },\n * // @log: ]\n * ```\n *\n * @example\n * It is also possible to append a Signature tuple to the end of an Authorization tuple.\n *\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorizationList = Authorization.fromTupleList([\n * ['0x1', '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c', '0x3', '0x1', '0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90', '0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064'],\n * ['0x3', '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c', '0x14', '0x1', '0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90', '0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064'],\n * ])\n * // @log: [\n * // @log: {\n * // @log: address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * // @log: chainId: 1,\n * // @log: nonce: 3n,\n * // @log: r: BigInt('0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90'),\n * // @log: s: BigInt('0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064'),\n * // @log: yParity: 0,\n * // @log: },\n * // @log: {\n * // @log: address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * // @log: chainId: 3,\n * // @log: nonce: 20n,\n * // @log: r: BigInt('0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90'),\n * // @log: s: BigInt('0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064'),\n * // @log: yParity: 0,\n * // @log: },\n * // @log: ]\n * ```\n *\n * @param tupleList - The [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization tuple list.\n * @returns An {@link ox#Authorization.List}.\n */\nexport function fromTupleList(\n tupleList: tupleList,\n): fromTupleList.ReturnType {\n const list: Mutable = []\n for (const tuple of tupleList) list.push(fromTuple(tuple))\n return list as never\n}\n\nexport declare namespace fromTupleList {\n type ReturnType = Compute<\n TupleList ? true : false>\n >\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Computes the sign payload for an {@link ox#Authorization.Authorization} in [EIP-7702 format](https://eips.ethereum.org/EIPS/eip-7702): `keccak256('0x05' || rlp([chain_id, address, nonce]))`.\n *\n * @example\n * The example below demonstrates computing the sign payload for an {@link ox#Authorization.Authorization}. This payload\n * can then be passed to signing functions like {@link ox#Secp256k1.(sign:function)}.\n *\n * ```ts twoslash\n * import { Authorization, Secp256k1 } from 'ox'\n *\n * const authorization = Authorization.from({\n * address: '0x1234567890abcdef1234567890abcdef12345678',\n * chainId: 1,\n * nonce: 69n,\n * })\n *\n * const payload = Authorization.getSignPayload(authorization) // [!code focus]\n *\n * const signature = Secp256k1.sign({\n * payload,\n * privateKey: '0x...',\n * })\n * ```\n *\n * @param authorization - The {@link ox#Authorization.Authorization}.\n * @returns The sign payload.\n */\nexport function getSignPayload(authorization: Authorization): Hex.Hex {\n return hash(authorization, { presign: true })\n}\n\nexport declare namespace getSignPayload {\n type ErrorType = hash.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Computes the hash for an {@link ox#Authorization.Authorization} in [EIP-7702 format](https://eips.ethereum.org/EIPS/eip-7702): `keccak256('0x05' || rlp([chain_id, address, nonce]))`.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.from({\n * address: '0x1234567890abcdef1234567890abcdef12345678',\n * chainId: 1,\n * nonce: 69n,\n * })\n *\n * const hash = Authorization.hash(authorization) // [!code focus]\n * ```\n *\n * @param authorization - The {@link ox#Authorization.Authorization}.\n * @returns The hash.\n */\nexport function hash(\n authorization: Authorization,\n options: hash.Options = {},\n): Hex.Hex {\n const { presign } = options\n return Hash.keccak256(\n Hex.concat(\n '0x05',\n Rlp.fromHex(\n toTuple(\n presign\n ? {\n address: authorization.address,\n chainId: authorization.chainId,\n nonce: authorization.nonce,\n }\n : authorization,\n ),\n ),\n ),\n )\n}\n\nexport declare namespace hash {\n type ErrorType =\n | toTuple.ErrorType\n | Hash.keccak256.ErrorType\n | Hex.concat.ErrorType\n | Rlp.fromHex.ErrorType\n | Errors.GlobalErrorType\n\n type Options = {\n /** Whether to hash this authorization for signing. @default false */\n presign?: boolean | undefined\n }\n}\n\n/**\n * Converts an {@link ox#Authorization.Authorization} to an {@link ox#Authorization.Rpc}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.toRpc({\n * address: '0x0000000000000000000000000000000000000000',\n * chainId: 1,\n * nonce: 1n,\n * r: 44944627813007772897391531230081695102703289123332187696115181104739239197517n,\n * s: 36528503505192438307355164441104001310566505351980369085208178712678799181120n,\n * yParity: 0,\n * })\n * ```\n *\n * @param authorization - An Authorization.\n * @returns An RPC-formatted Authorization.\n */\nexport function toRpc(authorization: Signed): Rpc {\n const { address, chainId, nonce, ...signature } = authorization\n\n return {\n address,\n chainId: Hex.fromNumber(chainId),\n nonce: Hex.fromNumber(nonce),\n ...Signature.toRpc(signature),\n }\n}\n\nexport declare namespace toRpc {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts an {@link ox#Authorization.List} to an {@link ox#Authorization.ListRpc}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.toRpcList([{\n * address: '0x0000000000000000000000000000000000000000',\n * chainId: 1,\n * nonce: 1n,\n * r: 44944627813007772897391531230081695102703289123332187696115181104739239197517n,\n * s: 36528503505192438307355164441104001310566505351980369085208178712678799181120n,\n * yParity: 0,\n * }])\n * ```\n *\n * @param authorizationList - An Authorization List.\n * @returns An RPC-formatted Authorization List.\n */\nexport function toRpcList(authorizationList: ListSigned): ListRpc {\n return authorizationList.map(toRpc)\n}\n\nexport declare namespace toRpcList {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts an {@link ox#Authorization.Authorization} to an {@link ox#Authorization.Tuple}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.from({\n * address: '0x1234567890abcdef1234567890abcdef12345678',\n * chainId: 1,\n * nonce: 69n,\n * })\n *\n * const tuple = Authorization.toTuple(authorization) // [!code focus]\n * // @log: [\n * // @log: address: '0x1234567890abcdef1234567890abcdef12345678',\n * // @log: chainId: 1,\n * // @log: nonce: 69n,\n * // @log: ]\n * ```\n *\n * @param authorization - The {@link ox#Authorization.Authorization}.\n * @returns An [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization tuple.\n */\nexport function toTuple(\n authorization: authorization,\n): toTuple.ReturnType {\n const { address, chainId, nonce } = authorization\n const signature = Signature.extract(authorization)\n return [\n chainId ? Hex.fromNumber(chainId) : '0x',\n address,\n nonce ? Hex.fromNumber(nonce) : '0x',\n ...(signature ? Signature.toTuple(signature) : []),\n ] as never\n}\n\nexport declare namespace toTuple {\n type ReturnType =\n Compute>\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts an {@link ox#Authorization.List} to an {@link ox#Authorization.TupleList}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization_1 = Authorization.from({\n * address: '0x1234567890abcdef1234567890abcdef12345678',\n * chainId: 1,\n * nonce: 69n,\n * })\n * const authorization_2 = Authorization.from({\n * address: '0x1234567890abcdef1234567890abcdef12345678',\n * chainId: 3,\n * nonce: 20n,\n * })\n *\n * const tuple = Authorization.toTupleList([authorization_1, authorization_2]) // [!code focus]\n * // @log: [\n * // @log: [\n * // @log: address: '0x1234567890abcdef1234567890abcdef12345678',\n * // @log: chainId: 1,\n * // @log: nonce: 69n,\n * // @log: ],\n * // @log: [\n * // @log: address: '0x1234567890abcdef1234567890abcdef12345678',\n * // @log: chainId: 3,\n * // @log: nonce: 20n,\n * // @log: ],\n * // @log: ]\n * ```\n *\n * @param list - An {@link ox#Authorization.List}.\n * @returns An [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization tuple list.\n */\nexport function toTupleList<\n const list extends\n | readonly Authorization[]\n | readonly Authorization[],\n>(list?: list | undefined): toTupleList.ReturnType {\n if (!list || list.length === 0) return []\n\n const tupleList: Mutable = []\n for (const authorization of list) tupleList.push(toTuple(authorization))\n\n return tupleList as never\n}\n\nexport declare namespace toTupleList {\n type ReturnType<\n list extends\n | readonly Authorization[]\n | readonly Authorization[],\n > = Compute<\n TupleList[] ? true : false>\n >\n\n type ErrorType = Errors.GlobalErrorType\n}\n", "import * as Bytes from './Bytes.js'\nimport * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport * as Cursor from './internal/cursor.js'\nimport type { ExactPartial, RecursiveArray } from './internal/types.js'\n\n/**\n * Decodes a Recursive-Length Prefix (RLP) value into a {@link ox#Bytes.Bytes} value.\n *\n * @example\n * ```ts twoslash\n * import { Rlp } from 'ox'\n * Rlp.toBytes('0x8b68656c6c6f20776f726c64')\n * // Uint8Array([139, 104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100])\n * ```\n *\n * @param value - The value to decode.\n * @returns The decoded {@link ox#Bytes.Bytes} value.\n */\nexport function toBytes(\n value: Bytes.Bytes | Hex.Hex,\n): RecursiveArray {\n return to(value, 'Bytes')\n}\n\nexport declare namespace toBytes {\n type ErrorType = to.ErrorType\n}\n\n/**\n * Decodes a Recursive-Length Prefix (RLP) value into a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Rlp } from 'ox'\n * Rlp.toHex('0x8b68656c6c6f20776f726c64')\n * // 0x68656c6c6f20776f726c64\n * ```\n *\n * @param value - The value to decode.\n * @returns The decoded {@link ox#Hex.Hex} value.\n */\nexport function toHex(value: Bytes.Bytes | Hex.Hex): RecursiveArray {\n return to(value, 'Hex')\n}\n\nexport declare namespace toHex {\n type ErrorType = to.ErrorType\n}\n\n/////////////////////////////////////////////////////////////////////////////////\n// Internal\n/////////////////////////////////////////////////////////////////////////////////\n\n/** @internal */\nexport function to<\n value extends Bytes.Bytes | Hex.Hex,\n to extends 'Hex' | 'Bytes',\n>(value: value, to: to | 'Hex' | 'Bytes'): to.ReturnType {\n const to_ = to ?? (typeof value === 'string' ? 'Hex' : 'Bytes')\n\n const bytes = (() => {\n if (typeof value === 'string') {\n if (value.length > 3 && value.length % 2 !== 0)\n throw new Hex.InvalidLengthError(value)\n return Bytes.fromHex(value)\n }\n return value as Bytes.Bytes\n })()\n\n const cursor = Cursor.create(bytes, {\n recursiveReadLimit: Number.POSITIVE_INFINITY,\n })\n const result = decodeRlpCursor(cursor, to_)\n\n return result as to.ReturnType\n}\n\n/** @internal */\nexport declare namespace to {\n type ReturnType =\n | (to extends 'Bytes' ? RecursiveArray : never)\n | (to extends 'Hex' ? RecursiveArray : never)\n\n type ErrorType =\n | Bytes.fromHex.ErrorType\n | decodeRlpCursor.ErrorType\n | Cursor.create.ErrorType\n | Hex.InvalidLengthError\n | Errors.GlobalErrorType\n}\n\n/** @internal */\n\n/** @internal */\nexport function decodeRlpCursor(\n cursor: Cursor.Cursor,\n to: to | 'Hex' | 'Bytes' | undefined = 'Hex',\n): decodeRlpCursor.ReturnType {\n if (cursor.bytes.length === 0)\n return (\n to === 'Hex' ? Hex.fromBytes(cursor.bytes) : cursor.bytes\n ) as decodeRlpCursor.ReturnType\n\n const prefix = cursor.readByte()\n if (prefix < 0x80) cursor.decrementPosition(1)\n\n // bytes\n if (prefix < 0xc0) {\n const length = readLength(cursor, prefix, 0x80)\n const bytes = cursor.readBytes(length)\n return (\n to === 'Hex' ? Hex.fromBytes(bytes) : bytes\n ) as decodeRlpCursor.ReturnType\n }\n\n // list\n const length = readLength(cursor, prefix, 0xc0)\n return readList(cursor, length, to) as {} as decodeRlpCursor.ReturnType\n}\n\n/** @internal */\nexport declare namespace decodeRlpCursor {\n type ReturnType = to.ReturnType\n type ErrorType =\n | Hex.fromBytes.ErrorType\n | readLength.ErrorType\n | readList.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function readLength(\n cursor: Cursor.Cursor,\n prefix: number,\n offset: number,\n) {\n if (offset === 0x80 && prefix < 0x80) return 1\n if (prefix <= offset + 55) return prefix - offset\n if (prefix === offset + 55 + 1) return cursor.readUint8()\n if (prefix === offset + 55 + 2) return cursor.readUint16()\n if (prefix === offset + 55 + 3) return cursor.readUint24()\n if (prefix === offset + 55 + 4) return cursor.readUint32()\n throw new Errors.BaseError('Invalid RLP prefix')\n}\n\n/** @internal */\nexport declare namespace readLength {\n type ErrorType = Errors.BaseError | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function readList(\n cursor: Cursor.Cursor,\n length: number,\n to: to | 'Hex' | 'Bytes',\n) {\n const position = cursor.position\n const value: decodeRlpCursor.ReturnType[] = []\n while (cursor.position - position < length)\n value.push(decodeRlpCursor(cursor, to))\n return value\n}\n\n/** @internal */\nexport declare namespace readList {\n type ErrorType = Errors.GlobalErrorType\n}\n\ntype Encodable = {\n length: number\n encode(cursor: Cursor.Cursor): void\n}\n\n/**\n * Encodes a {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value into a Recursive-Length Prefix (RLP) value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes, Rlp } from 'ox'\n *\n * Rlp.from('0x68656c6c6f20776f726c64', { as: 'Hex' })\n * // @log: 0x8b68656c6c6f20776f726c64\n *\n * Rlp.from(Bytes.from([139, 104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]), { as: 'Bytes' })\n * // @log: Uint8Array([104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100])\n * ```\n *\n * @param value - The {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value to encode.\n * @param options - Options.\n * @returns The RLP value.\n */\nexport function from(\n value: RecursiveArray | RecursiveArray,\n options: from.Options,\n): from.ReturnType {\n const { as } = options\n\n const encodable = getEncodable(value)\n const cursor = Cursor.create(new Uint8Array(encodable.length))\n encodable.encode(cursor)\n\n if (as === 'Hex') return Hex.fromBytes(cursor.bytes) as from.ReturnType\n return cursor.bytes as from.ReturnType\n}\n\nexport declare namespace from {\n type Options = {\n /** The type to convert the RLP value to. */\n as: as | 'Hex' | 'Bytes'\n }\n\n type ReturnType =\n | (as extends 'Bytes' ? Bytes.Bytes : never)\n | (as extends 'Hex' ? Hex.Hex : never)\n\n type ErrorType =\n | Cursor.create.ErrorType\n | Hex.fromBytes.ErrorType\n | Bytes.fromHex.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a {@link ox#Bytes.Bytes} value into a Recursive-Length Prefix (RLP) value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes, Rlp } from 'ox'\n *\n * Rlp.fromBytes(Bytes.from([139, 104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]))\n * // @log: Uint8Array([104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100])\n * ```\n *\n * @param bytes - The {@link ox#Bytes.Bytes} value to encode.\n * @param options - Options.\n * @returns The RLP value.\n */\nexport function fromBytes(\n bytes: RecursiveArray,\n options: fromBytes.Options = {},\n): fromBytes.ReturnType {\n const { as = 'Bytes' } = options\n return from(bytes, { as }) as never\n}\n\nexport declare namespace fromBytes {\n type Options = ExactPartial<\n from.Options\n >\n\n type ReturnType = from.ReturnType\n\n type ErrorType = from.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a {@link ox#Hex.Hex} value into a Recursive-Length Prefix (RLP) value.\n *\n * @example\n * ```ts twoslash\n * import { Rlp } from 'ox'\n *\n * Rlp.fromHex('0x68656c6c6f20776f726c64')\n * // @log: 0x8b68656c6c6f20776f726c64\n * ```\n *\n * @param hex - The {@link ox#Hex.Hex} value to encode.\n * @param options - Options.\n * @returns The RLP value.\n */\nexport function fromHex(\n hex: RecursiveArray,\n options: fromHex.Options = {},\n): fromHex.ReturnType {\n const { as = 'Hex' } = options\n return from(hex, { as }) as never\n}\n\nexport declare namespace fromHex {\n type Options = ExactPartial<\n from.Options\n >\n\n type ReturnType = from.ReturnType\n\n type ErrorType = from.ErrorType | Errors.GlobalErrorType\n}\n\n/////////////////////////////////////////////////////////////////////////////////\n// Internal\n/////////////////////////////////////////////////////////////////////////////////\n\nfunction getEncodable(\n bytes: RecursiveArray | RecursiveArray,\n): Encodable {\n if (Array.isArray(bytes))\n return getEncodableList(bytes.map((x) => getEncodable(x)))\n return getEncodableBytes(bytes as any)\n}\n\nfunction getEncodableList(list: Encodable[]): Encodable {\n const bodyLength = list.reduce((acc, x) => acc + x.length, 0)\n\n const sizeOfBodyLength = getSizeOfLength(bodyLength)\n const length = (() => {\n if (bodyLength <= 55) return 1 + bodyLength\n return 1 + sizeOfBodyLength + bodyLength\n })()\n\n return {\n length,\n encode(cursor: Cursor.Cursor) {\n if (bodyLength <= 55) {\n cursor.pushByte(0xc0 + bodyLength)\n } else {\n cursor.pushByte(0xc0 + 55 + sizeOfBodyLength)\n if (sizeOfBodyLength === 1) cursor.pushUint8(bodyLength)\n else if (sizeOfBodyLength === 2) cursor.pushUint16(bodyLength)\n else if (sizeOfBodyLength === 3) cursor.pushUint24(bodyLength)\n else cursor.pushUint32(bodyLength)\n }\n for (const { encode } of list) {\n encode(cursor)\n }\n },\n }\n}\n\nfunction getEncodableBytes(bytesOrHex: Bytes.Bytes | Hex.Hex): Encodable {\n const bytes =\n typeof bytesOrHex === 'string' ? Bytes.fromHex(bytesOrHex) : bytesOrHex\n\n const sizeOfBytesLength = getSizeOfLength(bytes.length)\n const length = (() => {\n if (bytes.length === 1 && bytes[0]! < 0x80) return 1\n if (bytes.length <= 55) return 1 + bytes.length\n return 1 + sizeOfBytesLength + bytes.length\n })()\n\n return {\n length,\n encode(cursor: Cursor.Cursor) {\n if (bytes.length === 1 && bytes[0]! < 0x80) {\n cursor.pushBytes(bytes)\n } else if (bytes.length <= 55) {\n cursor.pushByte(0x80 + bytes.length)\n cursor.pushBytes(bytes)\n } else {\n cursor.pushByte(0x80 + 55 + sizeOfBytesLength)\n if (sizeOfBytesLength === 1) cursor.pushUint8(bytes.length)\n else if (sizeOfBytesLength === 2) cursor.pushUint16(bytes.length)\n else if (sizeOfBytesLength === 3) cursor.pushUint24(bytes.length)\n else cursor.pushUint32(bytes.length)\n cursor.pushBytes(bytes)\n }\n },\n }\n}\n\nfunction getSizeOfLength(length: number) {\n if (length <= 0xff) return 1\n if (length <= 0xff_ff) return 2\n if (length <= 0xff_ff_ff) return 3\n if (length <= 0xff_ff_ff_ff) return 4\n throw new Errors.BaseError('Length is too large.')\n}\n", "/**\n * Utils for modular division and finite fields.\n * A finite field over 11 is integer number operations `mod 11`.\n * There is no division: it is replaced by modular multiplicative inverse.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { anumber } from '@noble/hashes/utils';\nimport {\n bitMask,\n bytesToNumberBE,\n bytesToNumberLE,\n ensureBytes,\n numberToBytesBE,\n numberToBytesLE,\n validateObject,\n} from './utils.ts';\n\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = /* @__PURE__ */ BigInt(2), _3n = /* @__PURE__ */ BigInt(3);\n// prettier-ignore\nconst _4n = /* @__PURE__ */ BigInt(4), _5n = /* @__PURE__ */ BigInt(5), _8n = /* @__PURE__ */ BigInt(8);\n\n// Calculates a modulo b\nexport function mod(a: bigint, b: bigint): bigint {\n const result = a % b;\n return result >= _0n ? result : b + result;\n}\n/**\n * Efficiently raise num to power and do modular division.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n * TODO: remove.\n * @example\n * pow(2n, 6n, 11n) // 64n % 11n == 9n\n */\nexport function pow(num: bigint, power: bigint, modulo: bigint): bigint {\n return FpPow(Field(modulo), num, power);\n}\n\n/** Does `x^(2^power)` mod p. `pow2(30, 4)` == `30^(2^4)` */\nexport function pow2(x: bigint, power: bigint, modulo: bigint): bigint {\n let res = x;\n while (power-- > _0n) {\n res *= res;\n res %= modulo;\n }\n return res;\n}\n\n/**\n * Inverses number over modulo.\n * Implemented using [Euclidean GCD](https://brilliant.org/wiki/extended-euclidean-algorithm/).\n */\nexport function invert(number: bigint, modulo: bigint): bigint {\n if (number === _0n) throw new Error('invert: expected non-zero number');\n if (modulo <= _0n) throw new Error('invert: expected positive modulus, got ' + modulo);\n // Fermat's little theorem \"CT-like\" version inv(n) = n^(m-2) mod m is 30x slower.\n let a = mod(number, modulo);\n let b = modulo;\n // prettier-ignore\n let x = _0n, y = _1n, u = _1n, v = _0n;\n while (a !== _0n) {\n // JIT applies optimization if those two lines follow each other\n const q = b / a;\n const r = b % a;\n const m = x - u * q;\n const n = y - v * q;\n // prettier-ignore\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n const gcd = b;\n if (gcd !== _1n) throw new Error('invert: does not exist');\n return mod(x, modulo);\n}\n\n// Not all roots are possible! Example which will throw:\n// const NUM =\n// n = 72057594037927816n;\n// Fp = Field(BigInt('0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab'));\nfunction sqrt3mod4(Fp: IField, n: T) {\n const p1div4 = (Fp.ORDER + _1n) / _4n;\n const root = Fp.pow(n, p1div4);\n // Throw if root^2 != n\n if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n return root;\n}\n\nfunction sqrt5mod8(Fp: IField, n: T) {\n const p5div8 = (Fp.ORDER - _5n) / _8n;\n const n2 = Fp.mul(n, _2n);\n const v = Fp.pow(n2, p5div8);\n const nv = Fp.mul(n, v);\n const i = Fp.mul(Fp.mul(nv, _2n), v);\n const root = Fp.mul(nv, Fp.sub(i, Fp.ONE));\n if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n return root;\n}\n\n// TODO: Commented-out for now. Provide test vectors.\n// Tonelli is too slow for extension fields Fp2.\n// That means we can't use sqrt (c1, c2...) even for initialization constants.\n// if (P % _16n === _9n) return sqrt9mod16;\n// // prettier-ignore\n// function sqrt9mod16(Fp: IField, n: T, p7div16?: bigint) {\n// if (p7div16 === undefined) p7div16 = (Fp.ORDER + BigInt(7)) / _16n;\n// const c1 = Fp.sqrt(Fp.neg(Fp.ONE)); // 1. c1 = sqrt(-1) in F, i.e., (c1^2) == -1 in F\n// const c2 = Fp.sqrt(c1); // 2. c2 = sqrt(c1) in F, i.e., (c2^2) == c1 in F\n// const c3 = Fp.sqrt(Fp.neg(c1)); // 3. c3 = sqrt(-c1) in F, i.e., (c3^2) == -c1 in F\n// const c4 = p7div16; // 4. c4 = (q + 7) / 16 # Integer arithmetic\n// let tv1 = Fp.pow(n, c4); // 1. tv1 = x^c4\n// let tv2 = Fp.mul(c1, tv1); // 2. tv2 = c1 * tv1\n// const tv3 = Fp.mul(c2, tv1); // 3. tv3 = c2 * tv1\n// let tv4 = Fp.mul(c3, tv1); // 4. tv4 = c3 * tv1\n// const e1 = Fp.eql(Fp.sqr(tv2), n); // 5. e1 = (tv2^2) == x\n// const e2 = Fp.eql(Fp.sqr(tv3), n); // 6. e2 = (tv3^2) == x\n// tv1 = Fp.cmov(tv1, tv2, e1); // 7. tv1 = CMOV(tv1, tv2, e1) # Select tv2 if (tv2^2) == x\n// tv2 = Fp.cmov(tv4, tv3, e2); // 8. tv2 = CMOV(tv4, tv3, e2) # Select tv3 if (tv3^2) == x\n// const e3 = Fp.eql(Fp.sqr(tv2), n); // 9. e3 = (tv2^2) == x\n// return Fp.cmov(tv1, tv2, e3); // 10. z = CMOV(tv1, tv2, e3) # Select the sqrt from tv1 and tv2\n// }\n\n/**\n * Tonelli-Shanks square root search algorithm.\n * 1. https://eprint.iacr.org/2012/685.pdf (page 12)\n * 2. Square Roots from 1; 24, 51, 10 to Dan Shanks\n * @param P field order\n * @returns function that takes field Fp (created from P) and number n\n */\nexport function tonelliShanks(P: bigint): (Fp: IField, n: T) => T {\n // Initialization (precomputation).\n if (P < BigInt(3)) throw new Error('sqrt is not defined for small field');\n // Factor P - 1 = Q * 2^S, where Q is odd\n let Q = P - _1n;\n let S = 0;\n while (Q % _2n === _0n) {\n Q /= _2n;\n S++;\n }\n\n // Find the first quadratic non-residue Z >= 2\n let Z = _2n;\n const _Fp = Field(P);\n while (FpLegendre(_Fp, Z) === 1) {\n // Basic primality test for P. After x iterations, chance of\n // not finding quadratic non-residue is 2^x, so 2^1000.\n if (Z++ > 1000) throw new Error('Cannot find square root: probably non-prime P');\n }\n // Fast-path; usually done before Z, but we do \"primality test\".\n if (S === 1) return sqrt3mod4;\n\n // Slow-path\n // TODO: test on Fp2 and others\n let cc = _Fp.pow(Z, Q); // c = z^Q\n const Q1div2 = (Q + _1n) / _2n;\n return function tonelliSlow(Fp: IField, n: T): T {\n if (Fp.is0(n)) return n;\n // Check if n is a quadratic residue using Legendre symbol\n if (FpLegendre(Fp, n) !== 1) throw new Error('Cannot find square root');\n\n // Initialize variables for the main loop\n let M = S;\n let c = Fp.mul(Fp.ONE, cc); // c = z^Q, move cc from field _Fp into field Fp\n let t = Fp.pow(n, Q); // t = n^Q, first guess at the fudge factor\n let R = Fp.pow(n, Q1div2); // R = n^((Q+1)/2), first guess at the square root\n\n // Main loop\n // while t != 1\n while (!Fp.eql(t, Fp.ONE)) {\n if (Fp.is0(t)) return Fp.ZERO; // if t=0 return R=0\n let i = 1;\n\n // Find the smallest i >= 1 such that t^(2^i) \u2261 1 (mod P)\n let t_tmp = Fp.sqr(t); // t^(2^1)\n while (!Fp.eql(t_tmp, Fp.ONE)) {\n i++;\n t_tmp = Fp.sqr(t_tmp); // t^(2^2)...\n if (i === M) throw new Error('Cannot find square root');\n }\n\n // Calculate the exponent for b: 2^(M - i - 1)\n const exponent = _1n << BigInt(M - i - 1); // bigint is important\n const b = Fp.pow(c, exponent); // b = 2^(M - i - 1)\n\n // Update variables\n M = i;\n c = Fp.sqr(b); // c = b^2\n t = Fp.mul(t, c); // t = (t * b^2)\n R = Fp.mul(R, b); // R = R*b\n }\n return R;\n };\n}\n\n/**\n * Square root for a finite field. Will try optimized versions first:\n *\n * 1. P \u2261 3 (mod 4)\n * 2. P \u2261 5 (mod 8)\n * 3. Tonelli-Shanks algorithm\n *\n * Different algorithms can give different roots, it is up to user to decide which one they want.\n * For example there is FpSqrtOdd/FpSqrtEven to choice root based on oddness (used for hash-to-curve).\n */\nexport function FpSqrt(P: bigint): (Fp: IField, n: T) => T {\n // P \u2261 3 (mod 4) => \u221An = n^((P+1)/4)\n if (P % _4n === _3n) return sqrt3mod4;\n // P \u2261 5 (mod 8) => Atkin algorithm, page 10 of https://eprint.iacr.org/2012/685.pdf\n if (P % _8n === _5n) return sqrt5mod8;\n // P \u2261 9 (mod 16) not implemented, see above\n // Tonelli-Shanks algorithm\n return tonelliShanks(P);\n}\n\n// Little-endian check for first LE bit (last BE bit);\nexport const isNegativeLE = (num: bigint, modulo: bigint): boolean =>\n (mod(num, modulo) & _1n) === _1n;\n\n/** Field is not always over prime: for example, Fp2 has ORDER(q)=p^m. */\nexport interface IField {\n ORDER: bigint;\n isLE: boolean;\n BYTES: number;\n BITS: number;\n MASK: bigint;\n ZERO: T;\n ONE: T;\n // 1-arg\n create: (num: T) => T;\n isValid: (num: T) => boolean;\n is0: (num: T) => boolean;\n neg(num: T): T;\n inv(num: T): T;\n sqrt(num: T): T;\n sqr(num: T): T;\n // 2-args\n eql(lhs: T, rhs: T): boolean;\n add(lhs: T, rhs: T): T;\n sub(lhs: T, rhs: T): T;\n mul(lhs: T, rhs: T | bigint): T;\n pow(lhs: T, power: bigint): T;\n div(lhs: T, rhs: T | bigint): T;\n // N for NonNormalized (for now)\n addN(lhs: T, rhs: T): T;\n subN(lhs: T, rhs: T): T;\n mulN(lhs: T, rhs: T | bigint): T;\n sqrN(num: T): T;\n\n // Optional\n // Should be same as sgn0 function in\n // [RFC9380](https://www.rfc-editor.org/rfc/rfc9380#section-4.1).\n // NOTE: sgn0 is 'negative in LE', which is same as odd. And negative in LE is kinda strange definition anyway.\n isOdd?(num: T): boolean; // Odd instead of even since we have it for Fp2\n // legendre?(num: T): T;\n invertBatch: (lst: T[]) => T[];\n toBytes(num: T): Uint8Array;\n fromBytes(bytes: Uint8Array): T;\n // If c is False, CMOV returns a, otherwise it returns b.\n cmov(a: T, b: T, c: boolean): T;\n}\n// prettier-ignore\nconst FIELD_FIELDS = [\n 'create', 'isValid', 'is0', 'neg', 'inv', 'sqrt', 'sqr',\n 'eql', 'add', 'sub', 'mul', 'pow', 'div',\n 'addN', 'subN', 'mulN', 'sqrN'\n] as const;\nexport function validateField(field: IField): IField {\n const initial = {\n ORDER: 'bigint',\n MASK: 'bigint',\n BYTES: 'isSafeInteger',\n BITS: 'isSafeInteger',\n } as Record;\n const opts = FIELD_FIELDS.reduce((map, val: string) => {\n map[val] = 'function';\n return map;\n }, initial);\n return validateObject(field, opts);\n}\n\n// Generic field functions\n\n/**\n * Same as `pow` but for Fp: non-constant-time.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n */\nexport function FpPow(Fp: IField, num: T, power: bigint): T {\n if (power < _0n) throw new Error('invalid exponent, negatives unsupported');\n if (power === _0n) return Fp.ONE;\n if (power === _1n) return num;\n let p = Fp.ONE;\n let d = num;\n while (power > _0n) {\n if (power & _1n) p = Fp.mul(p, d);\n d = Fp.sqr(d);\n power >>= _1n;\n }\n return p;\n}\n\n/**\n * Efficiently invert an array of Field elements.\n * Exception-free. Will return `undefined` for 0 elements.\n * @param passZero map 0 to 0 (instead of undefined)\n */\nexport function FpInvertBatch(Fp: IField, nums: T[], passZero = false): T[] {\n const inverted = new Array(nums.length).fill(passZero ? Fp.ZERO : undefined);\n // Walk from first to last, multiply them by each other MOD p\n const multipliedAcc = nums.reduce((acc, num, i) => {\n if (Fp.is0(num)) return acc;\n inverted[i] = acc;\n return Fp.mul(acc, num);\n }, Fp.ONE);\n // Invert last element\n const invertedAcc = Fp.inv(multipliedAcc);\n // Walk from last to first, multiply them by inverted each other MOD p\n nums.reduceRight((acc, num, i) => {\n if (Fp.is0(num)) return acc;\n inverted[i] = Fp.mul(acc, inverted[i]);\n return Fp.mul(acc, num);\n }, invertedAcc);\n return inverted;\n}\n\n// TODO: remove\nexport function FpDiv(Fp: IField, lhs: T, rhs: T | bigint): T {\n return Fp.mul(lhs, typeof rhs === 'bigint' ? invert(rhs, Fp.ORDER) : Fp.inv(rhs));\n}\n\n/**\n * Legendre symbol.\n * Legendre constant is used to calculate Legendre symbol (a | p)\n * which denotes the value of a^((p-1)/2) (mod p).\n *\n * * (a | p) \u2261 1 if a is a square (mod p), quadratic residue\n * * (a | p) \u2261 -1 if a is not a square (mod p), quadratic non residue\n * * (a | p) \u2261 0 if a \u2261 0 (mod p)\n */\nexport function FpLegendre(Fp: IField, n: T): -1 | 0 | 1 {\n // We can use 3rd argument as optional cache of this value\n // but seems unneeded for now. The operation is very fast.\n const p1mod2 = (Fp.ORDER - _1n) / _2n;\n const powered = Fp.pow(n, p1mod2);\n const yes = Fp.eql(powered, Fp.ONE);\n const zero = Fp.eql(powered, Fp.ZERO);\n const no = Fp.eql(powered, Fp.neg(Fp.ONE));\n if (!yes && !zero && !no) throw new Error('invalid Legendre symbol result');\n return yes ? 1 : zero ? 0 : -1;\n}\n\n// This function returns True whenever the value x is a square in the field F.\nexport function FpIsSquare(Fp: IField, n: T): boolean {\n const l = FpLegendre(Fp, n);\n return l === 1;\n}\n\n// CURVE.n lengths\nexport function nLength(\n n: bigint,\n nBitLength?: number\n): {\n nBitLength: number;\n nByteLength: number;\n} {\n // Bit size, byte size of CURVE.n\n if (nBitLength !== undefined) anumber(nBitLength);\n const _nBitLength = nBitLength !== undefined ? nBitLength : n.toString(2).length;\n const nByteLength = Math.ceil(_nBitLength / 8);\n return { nBitLength: _nBitLength, nByteLength };\n}\n\ntype FpField = IField & Required, 'isOdd'>>;\n/**\n * Initializes a finite field over prime.\n * Major performance optimizations:\n * * a) denormalized operations like mulN instead of mul\n * * b) same object shape: never add or remove keys\n * * c) Object.freeze\n * Fragile: always run a benchmark on a change.\n * Security note: operations don't check 'isValid' for all elements for performance reasons,\n * it is caller responsibility to check this.\n * This is low-level code, please make sure you know what you're doing.\n * @param ORDER prime positive bigint\n * @param bitLen how many bits the field consumes\n * @param isLE (def: false) if encoding / decoding should be in little-endian\n * @param redef optional faster redefinitions of sqrt and other methods\n */\nexport function Field(\n ORDER: bigint,\n bitLen?: number,\n isLE = false,\n redef: Partial> = {}\n): Readonly {\n if (ORDER <= _0n) throw new Error('invalid field: expected ORDER > 0, got ' + ORDER);\n const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, bitLen);\n if (BYTES > 2048) throw new Error('invalid field: expected ORDER of <= 2048 bytes');\n let sqrtP: ReturnType; // cached sqrtP\n const f: Readonly = Object.freeze({\n ORDER,\n isLE,\n BITS,\n BYTES,\n MASK: bitMask(BITS),\n ZERO: _0n,\n ONE: _1n,\n create: (num) => mod(num, ORDER),\n isValid: (num) => {\n if (typeof num !== 'bigint')\n throw new Error('invalid field element: expected bigint, got ' + typeof num);\n return _0n <= num && num < ORDER; // 0 is valid element, but it's not invertible\n },\n is0: (num) => num === _0n,\n isOdd: (num) => (num & _1n) === _1n,\n neg: (num) => mod(-num, ORDER),\n eql: (lhs, rhs) => lhs === rhs,\n\n sqr: (num) => mod(num * num, ORDER),\n add: (lhs, rhs) => mod(lhs + rhs, ORDER),\n sub: (lhs, rhs) => mod(lhs - rhs, ORDER),\n mul: (lhs, rhs) => mod(lhs * rhs, ORDER),\n pow: (num, power) => FpPow(f, num, power),\n div: (lhs, rhs) => mod(lhs * invert(rhs, ORDER), ORDER),\n\n // Same as above, but doesn't normalize\n sqrN: (num) => num * num,\n addN: (lhs, rhs) => lhs + rhs,\n subN: (lhs, rhs) => lhs - rhs,\n mulN: (lhs, rhs) => lhs * rhs,\n\n inv: (num) => invert(num, ORDER),\n sqrt:\n redef.sqrt ||\n ((n) => {\n if (!sqrtP) sqrtP = FpSqrt(ORDER);\n return sqrtP(f, n);\n }),\n toBytes: (num) => (isLE ? numberToBytesLE(num, BYTES) : numberToBytesBE(num, BYTES)),\n fromBytes: (bytes) => {\n if (bytes.length !== BYTES)\n throw new Error('Field.fromBytes: expected ' + BYTES + ' bytes, got ' + bytes.length);\n return isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n },\n // TODO: we don't need it here, move out to separate fn\n invertBatch: (lst) => FpInvertBatch(f, lst),\n // We can't move this out because Fp6, Fp12 implement it\n // and it's unclear what to return in there.\n cmov: (a, b, c) => (c ? b : a),\n } as FpField);\n return Object.freeze(f);\n}\n\nexport function FpSqrtOdd(Fp: IField, elm: T): T {\n if (!Fp.isOdd) throw new Error(\"Field doesn't have isOdd\");\n const root = Fp.sqrt(elm);\n return Fp.isOdd(root) ? root : Fp.neg(root);\n}\n\nexport function FpSqrtEven(Fp: IField, elm: T): T {\n if (!Fp.isOdd) throw new Error(\"Field doesn't have isOdd\");\n const root = Fp.sqrt(elm);\n return Fp.isOdd(root) ? Fp.neg(root) : root;\n}\n\n/**\n * \"Constant-time\" private key generation utility.\n * Same as mapKeyToField, but accepts less bytes (40 instead of 48 for 32-byte field).\n * Which makes it slightly more biased, less secure.\n * @deprecated use `mapKeyToField` instead\n */\nexport function hashToPrivateScalar(\n hash: string | Uint8Array,\n groupOrder: bigint,\n isLE = false\n): bigint {\n hash = ensureBytes('privateHash', hash);\n const hashLen = hash.length;\n const minLen = nLength(groupOrder).nByteLength + 8;\n if (minLen < 24 || hashLen < minLen || hashLen > 1024)\n throw new Error(\n 'hashToPrivateScalar: expected ' + minLen + '-1024 bytes of input, got ' + hashLen\n );\n const num = isLE ? bytesToNumberLE(hash) : bytesToNumberBE(hash);\n return mod(num, groupOrder - _1n) + _1n;\n}\n\n/**\n * Returns total number of bytes consumed by the field element.\n * For example, 32 bytes for usual 256-bit weierstrass curve.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of field\n */\nexport function getFieldBytesLength(fieldOrder: bigint): number {\n if (typeof fieldOrder !== 'bigint') throw new Error('field order must be bigint');\n const bitLength = fieldOrder.toString(2).length;\n return Math.ceil(bitLength / 8);\n}\n\n/**\n * Returns minimal amount of bytes that can be safely reduced\n * by field order.\n * Should be 2^-128 for 128-bit curve such as P256.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of target hash\n */\nexport function getMinHashLength(fieldOrder: bigint): number {\n const length = getFieldBytesLength(fieldOrder);\n return length + Math.ceil(length / 2);\n}\n\n/**\n * \"Constant-time\" private key generation utility.\n * Can take (n + n/2) or more bytes of uniform input e.g. from CSPRNG or KDF\n * and convert them into private scalar, with the modulo bias being negligible.\n * Needs at least 48 bytes of input for 32-byte private key.\n * https://research.kudelskisecurity.com/2020/07/28/the-definitive-guide-to-modulo-bias-and-how-to-avoid-it/\n * FIPS 186-5, A.2 https://csrc.nist.gov/publications/detail/fips/186/5/final\n * RFC 9380, https://www.rfc-editor.org/rfc/rfc9380#section-5\n * @param hash hash output from SHA3 or a similar function\n * @param groupOrder size of subgroup - (e.g. secp256k1.CURVE.n)\n * @param isLE interpret hash bytes as LE num\n * @returns valid private scalar\n */\nexport function mapHashToField(key: Uint8Array, fieldOrder: bigint, isLE = false): Uint8Array {\n const len = key.length;\n const fieldLen = getFieldBytesLength(fieldOrder);\n const minLen = getMinHashLength(fieldOrder);\n // No small numbers: need to understand bias story. No huge numbers: easier to detect JS timings.\n if (len < 16 || len < minLen || len > 1024)\n throw new Error('expected ' + minLen + '-1024 bytes of input, got ' + len);\n const num = isLE ? bytesToNumberLE(key) : bytesToNumberBE(key);\n // `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0\n const reduced = mod(num, fieldOrder - _1n) + _1n;\n return isLE ? numberToBytesLE(reduced, fieldLen) : numberToBytesBE(reduced, fieldLen);\n}\n", "/**\n * Methods for elliptic curve multiplication by scalars.\n * Contains wNAF, pippenger\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { type IField, nLength, validateField } from './modular.ts';\nimport { bitLen, bitMask, validateObject } from './utils.ts';\n\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\n\nexport type AffinePoint = {\n x: T;\n y: T;\n} & { z?: never; t?: never };\n\nexport interface Group> {\n double(): T;\n negate(): T;\n add(other: T): T;\n subtract(other: T): T;\n equals(other: T): boolean;\n multiply(scalar: bigint): T;\n}\n\nexport type GroupConstructor = {\n BASE: T;\n ZERO: T;\n};\nexport type Mapper = (i: T[]) => T[];\n\nfunction constTimeNegate>(condition: boolean, item: T): T {\n const neg = item.negate();\n return condition ? neg : item;\n}\n\nfunction validateW(W: number, bits: number) {\n if (!Number.isSafeInteger(W) || W <= 0 || W > bits)\n throw new Error('invalid window size, expected [1..' + bits + '], got W=' + W);\n}\n\n/** Internal wNAF opts for specific W and scalarBits */\nexport type WOpts = {\n windows: number;\n windowSize: number;\n mask: bigint;\n maxNumber: number;\n shiftBy: bigint;\n};\n\nfunction calcWOpts(W: number, scalarBits: number): WOpts {\n validateW(W, scalarBits);\n const windows = Math.ceil(scalarBits / W) + 1; // W=8 33. Not 32, because we skip zero\n const windowSize = 2 ** (W - 1); // W=8 128. Not 256, because we skip zero\n const maxNumber = 2 ** W; // W=8 256\n const mask = bitMask(W); // W=8 255 == mask 0b11111111\n const shiftBy = BigInt(W); // W=8 8\n return { windows, windowSize, mask, maxNumber, shiftBy };\n}\n\nfunction calcOffsets(n: bigint, window: number, wOpts: WOpts) {\n const { windowSize, mask, maxNumber, shiftBy } = wOpts;\n let wbits = Number(n & mask); // extract W bits.\n let nextN = n >> shiftBy; // shift number by W bits.\n\n // What actually happens here:\n // const highestBit = Number(mask ^ (mask >> 1n));\n // let wbits2 = wbits - 1; // skip zero\n // if (wbits2 & highestBit) { wbits2 ^= Number(mask); // (~);\n\n // split if bits > max: +224 => 256-32\n if (wbits > windowSize) {\n // we skip zero, which means instead of `>= size-1`, we do `> size`\n wbits -= maxNumber; // -32, can be maxNumber - wbits, but then we need to set isNeg here.\n nextN += _1n; // +256 (carry)\n }\n const offsetStart = window * windowSize;\n const offset = offsetStart + Math.abs(wbits) - 1; // -1 because we skip zero\n const isZero = wbits === 0; // is current window slice a 0?\n const isNeg = wbits < 0; // is current window slice negative?\n const isNegF = window % 2 !== 0; // fake random statement for noise\n const offsetF = offsetStart; // fake offset for noise\n return { nextN, offset, isZero, isNeg, isNegF, offsetF };\n}\n\nfunction validateMSMPoints(points: any[], c: any) {\n if (!Array.isArray(points)) throw new Error('array expected');\n points.forEach((p, i) => {\n if (!(p instanceof c)) throw new Error('invalid point at index ' + i);\n });\n}\nfunction validateMSMScalars(scalars: any[], field: any) {\n if (!Array.isArray(scalars)) throw new Error('array of scalars expected');\n scalars.forEach((s, i) => {\n if (!field.isValid(s)) throw new Error('invalid scalar at index ' + i);\n });\n}\n\n// Since points in different groups cannot be equal (different object constructor),\n// we can have single place to store precomputes.\n// Allows to make points frozen / immutable.\nconst pointPrecomputes = new WeakMap();\nconst pointWindowSizes = new WeakMap();\n\nfunction getW(P: any): number {\n return pointWindowSizes.get(P) || 1;\n}\n\nexport type IWNAF> = {\n constTimeNegate: >(condition: boolean, item: T) => T;\n hasPrecomputes(elm: T): boolean;\n unsafeLadder(elm: T, n: bigint, p?: T): T;\n precomputeWindow(elm: T, W: number): Group[];\n getPrecomputes(W: number, P: T, transform: Mapper): T[];\n wNAF(W: number, precomputes: T[], n: bigint): { p: T; f: T };\n wNAFUnsafe(W: number, precomputes: T[], n: bigint, acc?: T): T;\n wNAFCached(P: T, n: bigint, transform: Mapper): { p: T; f: T };\n wNAFCachedUnsafe(P: T, n: bigint, transform: Mapper, prev?: T): T;\n setWindowSize(P: T, W: number): void;\n};\n\n/**\n * Elliptic curve multiplication of Point by scalar. Fragile.\n * Scalars should always be less than curve order: this should be checked inside of a curve itself.\n * Creates precomputation tables for fast multiplication:\n * - private scalar is split by fixed size windows of W bits\n * - every window point is collected from window's table & added to accumulator\n * - since windows are different, same point inside tables won't be accessed more than once per calc\n * - each multiplication is 'Math.ceil(CURVE_ORDER / \uD835\uDC4A) + 1' point additions (fixed for any scalar)\n * - +1 window is neccessary for wNAF\n * - wNAF reduces table size: 2x less memory + 2x faster generation, but 10% slower multiplication\n *\n * @todo Research returning 2d JS array of windows, instead of a single window.\n * This would allow windows to be in different memory locations\n */\nexport function wNAF>(c: GroupConstructor, bits: number): IWNAF {\n return {\n constTimeNegate,\n\n hasPrecomputes(elm: T) {\n return getW(elm) !== 1;\n },\n\n // non-const time multiplication ladder\n unsafeLadder(elm: T, n: bigint, p = c.ZERO) {\n let d: T = elm;\n while (n > _0n) {\n if (n & _1n) p = p.add(d);\n d = d.double();\n n >>= _1n;\n }\n return p;\n },\n\n /**\n * Creates a wNAF precomputation window. Used for caching.\n * Default window size is set by `utils.precompute()` and is equal to 8.\n * Number of precomputed points depends on the curve size:\n * 2^(\uD835\uDC4A\u22121) * (Math.ceil(\uD835\uDC5B / \uD835\uDC4A) + 1), where:\n * - \uD835\uDC4A is the window size\n * - \uD835\uDC5B is the bitlength of the curve order.\n * For a 256-bit curve and window size 8, the number of precomputed points is 128 * 33 = 4224.\n * @param elm Point instance\n * @param W window size\n * @returns precomputed point tables flattened to a single array\n */\n precomputeWindow(elm: T, W: number): Group[] {\n const { windows, windowSize } = calcWOpts(W, bits);\n const points: T[] = [];\n let p: T = elm;\n let base = p;\n for (let window = 0; window < windows; window++) {\n base = p;\n points.push(base);\n // i=1, bc we skip 0\n for (let i = 1; i < windowSize; i++) {\n base = base.add(p);\n points.push(base);\n }\n p = base.double();\n }\n return points;\n },\n\n /**\n * Implements ec multiplication using precomputed tables and w-ary non-adjacent form.\n * @param W window size\n * @param precomputes precomputed tables\n * @param n scalar (we don't check here, but should be less than curve order)\n * @returns real and fake (for const-time) points\n */\n wNAF(W: number, precomputes: T[], n: bigint): { p: T; f: T } {\n // Smaller version:\n // https://github.com/paulmillr/noble-secp256k1/blob/47cb1669b6e506ad66b35fe7d76132ae97465da2/index.ts#L502-L541\n // TODO: check the scalar is less than group order?\n // wNAF behavior is undefined otherwise. But have to carefully remove\n // other checks before wNAF. ORDER == bits here.\n // Accumulators\n let p = c.ZERO;\n let f = c.BASE;\n // This code was first written with assumption that 'f' and 'p' will never be infinity point:\n // since each addition is multiplied by 2 ** W, it cannot cancel each other. However,\n // there is negate now: it is possible that negated element from low value\n // would be the same as high element, which will create carry into next window.\n // It's not obvious how this can fail, but still worth investigating later.\n const wo = calcWOpts(W, bits);\n for (let window = 0; window < wo.windows; window++) {\n // (n === _0n) is handled and not early-exited. isEven and offsetF are used for noise\n const { nextN, offset, isZero, isNeg, isNegF, offsetF } = calcOffsets(n, window, wo);\n n = nextN;\n if (isZero) {\n // bits are 0: add garbage to fake point\n // Important part for const-time getPublicKey: add random \"noise\" point to f.\n f = f.add(constTimeNegate(isNegF, precomputes[offsetF]));\n } else {\n // bits are 1: add to result point\n p = p.add(constTimeNegate(isNeg, precomputes[offset]));\n }\n }\n // Return both real and fake points: JIT won't eliminate f.\n // At this point there is a way to F be infinity-point even if p is not,\n // which makes it less const-time: around 1 bigint multiply.\n return { p, f };\n },\n\n /**\n * Implements ec unsafe (non const-time) multiplication using precomputed tables and w-ary non-adjacent form.\n * @param W window size\n * @param precomputes precomputed tables\n * @param n scalar (we don't check here, but should be less than curve order)\n * @param acc accumulator point to add result of multiplication\n * @returns point\n */\n wNAFUnsafe(W: number, precomputes: T[], n: bigint, acc: T = c.ZERO): T {\n const wo = calcWOpts(W, bits);\n for (let window = 0; window < wo.windows; window++) {\n if (n === _0n) break; // Early-exit, skip 0 value\n const { nextN, offset, isZero, isNeg } = calcOffsets(n, window, wo);\n n = nextN;\n if (isZero) {\n // Window bits are 0: skip processing.\n // Move to next window.\n continue;\n } else {\n const item = precomputes[offset];\n acc = acc.add(isNeg ? item.negate() : item); // Re-using acc allows to save adds in MSM\n }\n }\n return acc;\n },\n\n getPrecomputes(W: number, P: T, transform: Mapper): T[] {\n // Calculate precomputes on a first run, reuse them after\n let comp = pointPrecomputes.get(P);\n if (!comp) {\n comp = this.precomputeWindow(P, W) as T[];\n if (W !== 1) pointPrecomputes.set(P, transform(comp));\n }\n return comp;\n },\n\n wNAFCached(P: T, n: bigint, transform: Mapper): { p: T; f: T } {\n const W = getW(P);\n return this.wNAF(W, this.getPrecomputes(W, P, transform), n);\n },\n\n wNAFCachedUnsafe(P: T, n: bigint, transform: Mapper, prev?: T): T {\n const W = getW(P);\n if (W === 1) return this.unsafeLadder(P, n, prev); // For W=1 ladder is ~x2 faster\n return this.wNAFUnsafe(W, this.getPrecomputes(W, P, transform), n, prev);\n },\n\n // We calculate precomputes for elliptic curve point multiplication\n // using windowed method. This specifies window size and\n // stores precomputed values. Usually only base point would be precomputed.\n\n setWindowSize(P: T, W: number) {\n validateW(W, bits);\n pointWindowSizes.set(P, W);\n pointPrecomputes.delete(P);\n },\n };\n}\n\n/**\n * Pippenger algorithm for multi-scalar multiplication (MSM, Pa + Qb + Rc + ...).\n * 30x faster vs naive addition on L=4096, 10x faster than precomputes.\n * For N=254bit, L=1, it does: 1024 ADD + 254 DBL. For L=5: 1536 ADD + 254 DBL.\n * Algorithmically constant-time (for same L), even when 1 point + scalar, or when scalar = 0.\n * @param c Curve Point constructor\n * @param fieldN field over CURVE.N - important that it's not over CURVE.P\n * @param points array of L curve points\n * @param scalars array of L scalars (aka private keys / bigints)\n */\nexport function pippenger>(\n c: GroupConstructor,\n fieldN: IField,\n points: T[],\n scalars: bigint[]\n): T {\n // If we split scalars by some window (let's say 8 bits), every chunk will only\n // take 256 buckets even if there are 4096 scalars, also re-uses double.\n // TODO:\n // - https://eprint.iacr.org/2024/750.pdf\n // - https://tches.iacr.org/index.php/TCHES/article/view/10287\n // 0 is accepted in scalars\n validateMSMPoints(points, c);\n validateMSMScalars(scalars, fieldN);\n const plength = points.length;\n const slength = scalars.length;\n if (plength !== slength) throw new Error('arrays of points and scalars must have equal length');\n // if (plength === 0) throw new Error('array must be of length >= 2');\n const zero = c.ZERO;\n const wbits = bitLen(BigInt(plength));\n let windowSize = 1; // bits\n if (wbits > 12) windowSize = wbits - 3;\n else if (wbits > 4) windowSize = wbits - 2;\n else if (wbits > 0) windowSize = 2;\n const MASK = bitMask(windowSize);\n const buckets = new Array(Number(MASK) + 1).fill(zero); // +1 for zero array\n const lastBits = Math.floor((fieldN.BITS - 1) / windowSize) * windowSize;\n let sum = zero;\n for (let i = lastBits; i >= 0; i -= windowSize) {\n buckets.fill(zero);\n for (let j = 0; j < slength; j++) {\n const scalar = scalars[j];\n const wbits = Number((scalar >> BigInt(i)) & MASK);\n buckets[wbits] = buckets[wbits].add(points[j]);\n }\n let resI = zero; // not using this will do small speed-up, but will lose ct\n // Skip first bucket, because it is zero\n for (let j = buckets.length - 1, sumI = zero; j > 0; j--) {\n sumI = sumI.add(buckets[j]);\n resI = resI.add(sumI);\n }\n sum = sum.add(resI);\n if (i !== 0) for (let j = 0; j < windowSize; j++) sum = sum.double();\n }\n return sum as T;\n}\n/**\n * Precomputed multi-scalar multiplication (MSM, Pa + Qb + Rc + ...).\n * @param c Curve Point constructor\n * @param fieldN field over CURVE.N - important that it's not over CURVE.P\n * @param points array of L curve points\n * @returns function which multiplies points with scaars\n */\nexport function precomputeMSMUnsafe>(\n c: GroupConstructor,\n fieldN: IField,\n points: T[],\n windowSize: number\n): (scalars: bigint[]) => T {\n /**\n * Performance Analysis of Window-based Precomputation\n *\n * Base Case (256-bit scalar, 8-bit window):\n * - Standard precomputation requires:\n * - 31 additions per scalar \u00D7 256 scalars = 7,936 ops\n * - Plus 255 summary additions = 8,191 total ops\n * Note: Summary additions can be optimized via accumulator\n *\n * Chunked Precomputation Analysis:\n * - Using 32 chunks requires:\n * - 255 additions per chunk\n * - 256 doublings\n * - Total: (255 \u00D7 32) + 256 = 8,416 ops\n *\n * Memory Usage Comparison:\n * Window Size | Standard Points | Chunked Points\n * ------------|-----------------|---------------\n * 4-bit | 520 | 15\n * 8-bit | 4,224 | 255\n * 10-bit | 13,824 | 1,023\n * 16-bit | 557,056 | 65,535\n *\n * Key Advantages:\n * 1. Enables larger window sizes due to reduced memory overhead\n * 2. More efficient for smaller scalar counts:\n * - 16 chunks: (16 \u00D7 255) + 256 = 4,336 ops\n * - ~2x faster than standard 8,191 ops\n *\n * Limitations:\n * - Not suitable for plain precomputes (requires 256 constant doublings)\n * - Performance degrades with larger scalar counts:\n * - Optimal for ~256 scalars\n * - Less efficient for 4096+ scalars (Pippenger preferred)\n */\n validateW(windowSize, fieldN.BITS);\n validateMSMPoints(points, c);\n const zero = c.ZERO;\n const tableSize = 2 ** windowSize - 1; // table size (without zero)\n const chunks = Math.ceil(fieldN.BITS / windowSize); // chunks of item\n const MASK = bitMask(windowSize);\n const tables = points.map((p: T) => {\n const res = [];\n for (let i = 0, acc = p; i < tableSize; i++) {\n res.push(acc);\n acc = acc.add(p);\n }\n return res;\n });\n return (scalars: bigint[]): T => {\n validateMSMScalars(scalars, fieldN);\n if (scalars.length > points.length)\n throw new Error('array of scalars must be smaller than array of points');\n let res = zero;\n for (let i = 0; i < chunks; i++) {\n // No need to double if accumulator is still zero.\n if (res !== zero) for (let j = 0; j < windowSize; j++) res = res.double();\n const shiftBy = BigInt(chunks * windowSize - (i + 1) * windowSize);\n for (let j = 0; j < scalars.length; j++) {\n const n = scalars[j];\n const curr = Number((n >> shiftBy) & MASK);\n if (!curr) continue; // skip zero scalars chunks\n res = res.add(tables[j][curr - 1]);\n }\n }\n return res;\n };\n}\n\n/**\n * Generic BasicCurve interface: works even for polynomial fields (BLS): P, n, h would be ok.\n * Though generator can be different (Fp2 / Fp6 for BLS).\n */\nexport type BasicCurve = {\n Fp: IField; // Field over which we'll do calculations (Fp)\n n: bigint; // Curve order, total count of valid points in the field\n nBitLength?: number; // bit length of curve order\n nByteLength?: number; // byte length of curve order\n h: bigint; // cofactor. we can assign default=1, but users will just ignore it w/o validation\n hEff?: bigint; // Number to multiply to clear cofactor\n Gx: T; // base point X coordinate\n Gy: T; // base point Y coordinate\n allowInfinityPoint?: boolean; // bls12-381 requires it. ZERO point is valid, but invalid pubkey\n};\n\nexport function validateBasic(\n curve: BasicCurve & T\n): Readonly<\n {\n readonly nBitLength: number;\n readonly nByteLength: number;\n } & BasicCurve &\n T & {\n p: bigint;\n }\n> {\n validateField(curve.Fp);\n validateObject(\n curve,\n {\n n: 'bigint',\n h: 'bigint',\n Gx: 'field',\n Gy: 'field',\n },\n {\n nBitLength: 'isSafeInteger',\n nByteLength: 'isSafeInteger',\n }\n );\n // Set defaults\n return Object.freeze({\n ...nLength(curve.n, curve.nBitLength),\n ...curve,\n ...{ p: curve.Fp.ORDER },\n } as const);\n}\n", "/**\n * Short Weierstrass curve methods. The formula is: y\u00B2 = x\u00B3 + ax + b.\n *\n * ### Parameters\n *\n * To initialize a weierstrass curve, one needs to pass following params:\n *\n * * a: formula param\n * * b: formula param\n * * Fp: finite field of prime characteristic P; may be complex (Fp2). Arithmetics is done in field\n * * n: order of prime subgroup a.k.a total amount of valid curve points\n * * Gx: Base point (x, y) aka generator point. Gx = x coordinate\n * * Gy: ...y coordinate\n * * h: cofactor, usually 1. h*n = curve group order (n is only subgroup order)\n * * lowS: whether to enable (default) or disable \"low-s\" non-malleable signatures\n *\n * ### Design rationale for types\n *\n * * Interaction between classes from different curves should fail:\n * `k256.Point.BASE.add(p256.Point.BASE)`\n * * For this purpose we want to use `instanceof` operator, which is fast and works during runtime\n * * Different calls of `curve()` would return different classes -\n * `curve(params) !== curve(params)`: if somebody decided to monkey-patch their curve,\n * it won't affect others\n *\n * TypeScript can't infer types for classes created inside a function. Classes is one instance\n * of nominative types in TypeScript and interfaces only check for shape, so it's hard to create\n * unique type for every function call.\n *\n * We can use generic types via some param, like curve opts, but that would:\n * 1. Enable interaction between `curve(params)` and `curve(params)` (curves of same params)\n * which is hard to debug.\n * 2. Params can be generic and we can't enforce them to be constant value:\n * if somebody creates curve from non-constant params,\n * it would be allowed to interact with other curves with non-constant params\n *\n * @todo https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html#unique-symbol\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// prettier-ignore\nimport {\n pippenger, validateBasic, wNAF,\n type AffinePoint, type BasicCurve, type Group, type GroupConstructor\n} from './curve.ts';\n// prettier-ignore\nimport {\n Field,\n FpInvertBatch,\n getMinHashLength, invert, mapHashToField, mod, validateField,\n type IField\n} from './modular.ts';\n// prettier-ignore\nimport {\n aInRange, abool,\n bitMask,\n bytesToHex, bytesToNumberBE, concatBytes, createHmacDrbg, ensureBytes, hexToBytes,\n inRange, isBytes, memoized, numberToBytesBE, numberToHexUnpadded, validateObject,\n type CHash, type Hex, type PrivKey\n} from './utils.ts';\n\nexport type { AffinePoint };\ntype HmacFnSync = (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array;\n/**\n * When Weierstrass curve has `a=0`, it becomes Koblitz curve.\n * Koblitz curves allow using **efficiently-computable GLV endomorphism \u03C8**.\n * Endomorphism uses 2x less RAM, speeds up precomputation by 2x and ECDH / key recovery by 20%.\n * For precomputed wNAF it trades off 1/2 init time & 1/3 ram for 20% perf hit.\n *\n * Endomorphism consists of beta, lambda and splitScalar:\n *\n * 1. GLV endomorphism \u03C8 transforms a point: `P = (x, y) \u21A6 \u03C8(P) = (\u03B2\u00B7x mod p, y)`\n * 2. GLV scalar decomposition transforms a scalar: `k \u2261 k\u2081 + k\u2082\u00B7\u03BB (mod n)`\n * 3. Then these are combined: `k\u00B7P = k\u2081\u00B7P + k\u2082\u00B7\u03C8(P)`\n * 4. Two 128-bit point-by-scalar multiplications + one point addition is faster than\n * one 256-bit multiplication.\n *\n * where\n * * beta: \u03B2 \u2208 F\u209A with \u03B2\u00B3 = 1, \u03B2 \u2260 1\n * * lambda: \u03BB \u2208 F\u2099 with \u03BB\u00B3 = 1, \u03BB \u2260 1\n * * splitScalar decomposes k \u21A6 k\u2081, k\u2082, by using reduced basis vectors.\n * Gauss lattice reduction calculates them from initial basis vectors `(n, 0), (-\u03BB, 0)`\n *\n * Check out `test/misc/endomorphism.js` and\n * [gist](https://gist.github.com/paulmillr/eb670806793e84df628a7c434a873066).\n */\nexport type EndomorphismOpts = {\n beta: bigint;\n splitScalar: (k: bigint) => { k1neg: boolean; k1: bigint; k2neg: boolean; k2: bigint };\n};\nexport type BasicWCurve = BasicCurve & {\n // Params: a, b\n a: T;\n b: T;\n\n // Optional params\n allowedPrivateKeyLengths?: readonly number[]; // for P521\n wrapPrivateKey?: boolean; // bls12-381 requires mod(n) instead of rejecting keys >= n\n endo?: EndomorphismOpts;\n // When a cofactor != 1, there can be an effective methods to:\n // 1. Determine whether a point is torsion-free\n isTorsionFree?: (c: ProjConstructor, point: ProjPointType) => boolean;\n // 2. Clear torsion component\n clearCofactor?: (c: ProjConstructor, point: ProjPointType) => ProjPointType;\n};\n\nexport type Entropy = Hex | boolean;\nexport type SignOpts = { lowS?: boolean; extraEntropy?: Entropy; prehash?: boolean };\nexport type VerOpts = { lowS?: boolean; prehash?: boolean; format?: 'compact' | 'der' | undefined };\n\nfunction validateSigVerOpts(opts: SignOpts | VerOpts) {\n if (opts.lowS !== undefined) abool('lowS', opts.lowS);\n if (opts.prehash !== undefined) abool('prehash', opts.prehash);\n}\n\n// Instance for 3d XYZ points\nexport interface ProjPointType extends Group> {\n readonly px: T;\n readonly py: T;\n readonly pz: T;\n get x(): T;\n get y(): T;\n toAffine(iz?: T): AffinePoint;\n toHex(isCompressed?: boolean): string;\n toRawBytes(isCompressed?: boolean): Uint8Array;\n\n assertValidity(): void;\n hasEvenY(): boolean;\n multiplyUnsafe(scalar: bigint): ProjPointType;\n multiplyAndAddUnsafe(Q: ProjPointType, a: bigint, b: bigint): ProjPointType | undefined;\n isTorsionFree(): boolean;\n clearCofactor(): ProjPointType;\n _setWindowSize(windowSize: number): void;\n}\n// Static methods for 3d XYZ points\nexport interface ProjConstructor extends GroupConstructor> {\n new (x: T, y: T, z: T): ProjPointType;\n fromAffine(p: AffinePoint): ProjPointType;\n fromHex(hex: Hex): ProjPointType;\n fromPrivateKey(privateKey: PrivKey): ProjPointType;\n normalizeZ(points: ProjPointType[]): ProjPointType[];\n msm(points: ProjPointType[], scalars: bigint[]): ProjPointType;\n}\n\nexport type CurvePointsType = BasicWCurve & {\n // Bytes\n fromBytes?: (bytes: Uint8Array) => AffinePoint;\n toBytes?: (c: ProjConstructor, point: ProjPointType, isCompressed: boolean) => Uint8Array;\n};\n\nexport type CurvePointsTypeWithLength = Readonly<\n CurvePointsType & { nByteLength: number; nBitLength: number }\n>;\n\nfunction validatePointOpts(curve: CurvePointsType): CurvePointsTypeWithLength {\n const opts = validateBasic(curve);\n validateObject(\n opts,\n {\n a: 'field',\n b: 'field',\n },\n {\n allowInfinityPoint: 'boolean',\n allowedPrivateKeyLengths: 'array',\n clearCofactor: 'function',\n fromBytes: 'function',\n isTorsionFree: 'function',\n toBytes: 'function',\n wrapPrivateKey: 'boolean',\n }\n );\n const { endo, Fp, a } = opts;\n if (endo) {\n if (!Fp.eql(a, Fp.ZERO)) {\n throw new Error('invalid endo: CURVE.a must be 0');\n }\n if (\n typeof endo !== 'object' ||\n typeof endo.beta !== 'bigint' ||\n typeof endo.splitScalar !== 'function'\n ) {\n throw new Error('invalid endo: expected \"beta\": bigint and \"splitScalar\": function');\n }\n }\n return Object.freeze({ ...opts } as const);\n}\n\nexport type CurvePointsRes = {\n CURVE: ReturnType>;\n ProjectivePoint: ProjConstructor;\n normPrivateKeyToScalar: (key: PrivKey) => bigint;\n weierstrassEquation: (x: T) => T;\n isWithinCurveOrder: (num: bigint) => boolean;\n};\n\nexport class DERErr extends Error {\n constructor(m = '') {\n super(m);\n }\n}\nexport type IDER = {\n // asn.1 DER encoding utils\n Err: typeof DERErr;\n // Basic building block is TLV (Tag-Length-Value)\n _tlv: {\n encode: (tag: number, data: string) => string;\n // v - value, l - left bytes (unparsed)\n decode(tag: number, data: Uint8Array): { v: Uint8Array; l: Uint8Array };\n };\n // https://crypto.stackexchange.com/a/57734 Leftmost bit of first byte is 'negative' flag,\n // since we always use positive integers here. It must always be empty:\n // - add zero byte if exists\n // - if next byte doesn't have a flag, leading zero is not allowed (minimal encoding)\n _int: {\n encode(num: bigint): string;\n decode(data: Uint8Array): bigint;\n };\n toSig(hex: string | Uint8Array): { r: bigint; s: bigint };\n hexFromSig(sig: { r: bigint; s: bigint }): string;\n};\n/**\n * ASN.1 DER encoding utilities. ASN is very complex & fragile. Format:\n *\n * [0x30 (SEQUENCE), bytelength, 0x02 (INTEGER), intLength, R, 0x02 (INTEGER), intLength, S]\n *\n * Docs: https://letsencrypt.org/docs/a-warm-welcome-to-asn1-and-der/, https://luca.ntop.org/Teaching/Appunti/asn1.html\n */\nexport const DER: IDER = {\n // asn.1 DER encoding utils\n Err: DERErr,\n // Basic building block is TLV (Tag-Length-Value)\n _tlv: {\n encode: (tag: number, data: string): string => {\n const { Err: E } = DER;\n if (tag < 0 || tag > 256) throw new E('tlv.encode: wrong tag');\n if (data.length & 1) throw new E('tlv.encode: unpadded data');\n const dataLen = data.length / 2;\n const len = numberToHexUnpadded(dataLen);\n if ((len.length / 2) & 0b1000_0000) throw new E('tlv.encode: long form length too big');\n // length of length with long form flag\n const lenLen = dataLen > 127 ? numberToHexUnpadded((len.length / 2) | 0b1000_0000) : '';\n const t = numberToHexUnpadded(tag);\n return t + lenLen + len + data;\n },\n // v - value, l - left bytes (unparsed)\n decode(tag: number, data: Uint8Array): { v: Uint8Array; l: Uint8Array } {\n const { Err: E } = DER;\n let pos = 0;\n if (tag < 0 || tag > 256) throw new E('tlv.encode: wrong tag');\n if (data.length < 2 || data[pos++] !== tag) throw new E('tlv.decode: wrong tlv');\n const first = data[pos++];\n const isLong = !!(first & 0b1000_0000); // First bit of first length byte is flag for short/long form\n let length = 0;\n if (!isLong) length = first;\n else {\n // Long form: [longFlag(1bit), lengthLength(7bit), length (BE)]\n const lenLen = first & 0b0111_1111;\n if (!lenLen) throw new E('tlv.decode(long): indefinite length not supported');\n if (lenLen > 4) throw new E('tlv.decode(long): byte length is too big'); // this will overflow u32 in js\n const lengthBytes = data.subarray(pos, pos + lenLen);\n if (lengthBytes.length !== lenLen) throw new E('tlv.decode: length bytes not complete');\n if (lengthBytes[0] === 0) throw new E('tlv.decode(long): zero leftmost byte');\n for (const b of lengthBytes) length = (length << 8) | b;\n pos += lenLen;\n if (length < 128) throw new E('tlv.decode(long): not minimal encoding');\n }\n const v = data.subarray(pos, pos + length);\n if (v.length !== length) throw new E('tlv.decode: wrong value length');\n return { v, l: data.subarray(pos + length) };\n },\n },\n // https://crypto.stackexchange.com/a/57734 Leftmost bit of first byte is 'negative' flag,\n // since we always use positive integers here. It must always be empty:\n // - add zero byte if exists\n // - if next byte doesn't have a flag, leading zero is not allowed (minimal encoding)\n _int: {\n encode(num: bigint): string {\n const { Err: E } = DER;\n if (num < _0n) throw new E('integer: negative integers are not allowed');\n let hex = numberToHexUnpadded(num);\n // Pad with zero byte if negative flag is present\n if (Number.parseInt(hex[0], 16) & 0b1000) hex = '00' + hex;\n if (hex.length & 1) throw new E('unexpected DER parsing assertion: unpadded hex');\n return hex;\n },\n decode(data: Uint8Array): bigint {\n const { Err: E } = DER;\n if (data[0] & 0b1000_0000) throw new E('invalid signature integer: negative');\n if (data[0] === 0x00 && !(data[1] & 0b1000_0000))\n throw new E('invalid signature integer: unnecessary leading zero');\n return bytesToNumberBE(data);\n },\n },\n toSig(hex: string | Uint8Array): { r: bigint; s: bigint } {\n // parse DER signature\n const { Err: E, _int: int, _tlv: tlv } = DER;\n const data = ensureBytes('signature', hex);\n const { v: seqBytes, l: seqLeftBytes } = tlv.decode(0x30, data);\n if (seqLeftBytes.length) throw new E('invalid signature: left bytes after parsing');\n const { v: rBytes, l: rLeftBytes } = tlv.decode(0x02, seqBytes);\n const { v: sBytes, l: sLeftBytes } = tlv.decode(0x02, rLeftBytes);\n if (sLeftBytes.length) throw new E('invalid signature: left bytes after parsing');\n return { r: int.decode(rBytes), s: int.decode(sBytes) };\n },\n hexFromSig(sig: { r: bigint; s: bigint }): string {\n const { _tlv: tlv, _int: int } = DER;\n const rs = tlv.encode(0x02, int.encode(sig.r));\n const ss = tlv.encode(0x02, int.encode(sig.s));\n const seq = rs + ss;\n return tlv.encode(0x30, seq);\n },\n};\n\nfunction numToSizedHex(num: bigint, size: number): string {\n return bytesToHex(numberToBytesBE(num, size));\n}\n\n// Be friendly to bad ECMAScript parsers by not using bigint literals\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3), _4n = BigInt(4);\n\nexport function weierstrassPoints(opts: CurvePointsType): CurvePointsRes {\n const CURVE = validatePointOpts(opts);\n const { Fp } = CURVE; // All curves has same field / group length as for now, but they can differ\n const Fn = Field(CURVE.n, CURVE.nBitLength);\n\n const toBytes =\n CURVE.toBytes ||\n ((_c: ProjConstructor, point: ProjPointType, _isCompressed: boolean) => {\n const a = point.toAffine();\n return concatBytes(Uint8Array.from([0x04]), Fp.toBytes(a.x), Fp.toBytes(a.y));\n });\n const fromBytes =\n CURVE.fromBytes ||\n ((bytes: Uint8Array) => {\n // const head = bytes[0];\n const tail = bytes.subarray(1);\n // if (head !== 0x04) throw new Error('Only non-compressed encoding is supported');\n const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n return { x, y };\n });\n\n /**\n * y\u00B2 = x\u00B3 + ax + b: Short weierstrass curve formula. Takes x, returns y\u00B2.\n * @returns y\u00B2\n */\n function weierstrassEquation(x: T): T {\n const { a, b } = CURVE;\n const x2 = Fp.sqr(x); // x * x\n const x3 = Fp.mul(x2, x); // x\u00B2 * x\n return Fp.add(Fp.add(x3, Fp.mul(x, a)), b); // x\u00B3 + a * x + b\n }\n\n function isValidXY(x: T, y: T): boolean {\n const left = Fp.sqr(y); // y\u00B2\n const right = weierstrassEquation(x); // x\u00B3 + ax + b\n return Fp.eql(left, right);\n }\n\n // Validate whether the passed curve params are valid.\n // Test 1: equation y\u00B2 = x\u00B3 + ax + b should work for generator point.\n if (!isValidXY(CURVE.Gx, CURVE.Gy)) throw new Error('bad curve params: generator point');\n\n // Test 2: discriminant \u0394 part should be non-zero: 4a\u00B3 + 27b\u00B2 != 0.\n // Guarantees curve is genus-1, smooth (non-singular).\n const _4a3 = Fp.mul(Fp.pow(CURVE.a, _3n), _4n);\n const _27b2 = Fp.mul(Fp.sqr(CURVE.b), BigInt(27));\n if (Fp.is0(Fp.add(_4a3, _27b2))) throw new Error('bad curve params: a or b');\n\n // Valid group elements reside in range 1..n-1\n function isWithinCurveOrder(num: bigint): boolean {\n return inRange(num, _1n, CURVE.n);\n }\n // Validates if priv key is valid and converts it to bigint.\n // Supports options allowedPrivateKeyLengths and wrapPrivateKey.\n function normPrivateKeyToScalar(key: PrivKey): bigint {\n const { allowedPrivateKeyLengths: lengths, nByteLength, wrapPrivateKey, n: N } = CURVE;\n if (lengths && typeof key !== 'bigint') {\n if (isBytes(key)) key = bytesToHex(key);\n // Normalize to hex string, pad. E.g. P521 would norm 130-132 char hex to 132-char bytes\n if (typeof key !== 'string' || !lengths.includes(key.length))\n throw new Error('invalid private key');\n key = key.padStart(nByteLength * 2, '0');\n }\n let num: bigint;\n try {\n num =\n typeof key === 'bigint'\n ? key\n : bytesToNumberBE(ensureBytes('private key', key, nByteLength));\n } catch (error) {\n throw new Error(\n 'invalid private key, expected hex or ' + nByteLength + ' bytes, got ' + typeof key\n );\n }\n if (wrapPrivateKey) num = mod(num, N); // disabled by default, enabled for BLS\n aInRange('private key', num, _1n, N); // num in range [1..N-1]\n return num;\n }\n\n function aprjpoint(other: unknown) {\n if (!(other instanceof Point)) throw new Error('ProjectivePoint expected');\n }\n\n // Memoized toAffine / validity check. They are heavy. Points are immutable.\n\n // Converts Projective point to affine (x, y) coordinates.\n // Can accept precomputed Z^-1 - for example, from invertBatch.\n // (X, Y, Z) \u220B (x=X/Z, y=Y/Z)\n const toAffineMemo = memoized((p: Point, iz?: T): AffinePoint => {\n const { px: x, py: y, pz: z } = p;\n // Fast-path for normalized points\n if (Fp.eql(z, Fp.ONE)) return { x, y };\n const is0 = p.is0();\n // If invZ was 0, we return zero point. However we still want to execute\n // all operations, so we replace invZ with a random number, 1.\n if (iz == null) iz = is0 ? Fp.ONE : Fp.inv(z);\n const ax = Fp.mul(x, iz);\n const ay = Fp.mul(y, iz);\n const zz = Fp.mul(z, iz);\n if (is0) return { x: Fp.ZERO, y: Fp.ZERO };\n if (!Fp.eql(zz, Fp.ONE)) throw new Error('invZ was invalid');\n return { x: ax, y: ay };\n });\n // NOTE: on exception this will crash 'cached' and no value will be set.\n // Otherwise true will be return\n const assertValidMemo = memoized((p: Point) => {\n if (p.is0()) {\n // (0, 1, 0) aka ZERO is invalid in most contexts.\n // In BLS, ZERO can be serialized, so we allow it.\n // (0, 0, 0) is invalid representation of ZERO.\n if (CURVE.allowInfinityPoint && !Fp.is0(p.py)) return;\n throw new Error('bad point: ZERO');\n }\n // Some 3rd-party test vectors require different wording between here & `fromCompressedHex`\n const { x, y } = p.toAffine();\n // Check if x, y are valid field elements\n if (!Fp.isValid(x) || !Fp.isValid(y)) throw new Error('bad point: x or y not FE');\n if (!isValidXY(x, y)) throw new Error('bad point: equation left != right');\n if (!p.isTorsionFree()) throw new Error('bad point: not in prime-order subgroup');\n return true;\n });\n\n /**\n * Projective Point works in 3d / projective (homogeneous) coordinates: (X, Y, Z) \u220B (x=X/Z, y=Y/Z)\n * Default Point works in 2d / affine coordinates: (x, y)\n * We're doing calculations in projective, because its operations don't require costly inversion.\n */\n class Point implements ProjPointType {\n // base / generator point\n static readonly BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);\n // zero / infinity / identity point\n static readonly ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO); // 0, 1, 0\n readonly px: T;\n readonly py: T;\n readonly pz: T;\n\n constructor(px: T, py: T, pz: T) {\n if (px == null || !Fp.isValid(px)) throw new Error('x required');\n if (py == null || !Fp.isValid(py) || Fp.is0(py)) throw new Error('y required');\n if (pz == null || !Fp.isValid(pz)) throw new Error('z required');\n this.px = px;\n this.py = py;\n this.pz = pz;\n Object.freeze(this);\n }\n\n // Does not validate if the point is on-curve.\n // Use fromHex instead, or call assertValidity() later.\n static fromAffine(p: AffinePoint): Point {\n const { x, y } = p || {};\n if (!p || !Fp.isValid(x) || !Fp.isValid(y)) throw new Error('invalid affine point');\n if (p instanceof Point) throw new Error('projective point not allowed');\n const is0 = (i: T) => Fp.eql(i, Fp.ZERO);\n // fromAffine(x:0, y:0) would produce (x:0, y:0, z:1), but we need (x:0, y:1, z:0)\n if (is0(x) && is0(y)) return Point.ZERO;\n return new Point(x, y, Fp.ONE);\n }\n\n get x(): T {\n return this.toAffine().x;\n }\n get y(): T {\n return this.toAffine().y;\n }\n\n /**\n * Takes a bunch of Projective Points but executes only one\n * inversion on all of them. Inversion is very slow operation,\n * so this improves performance massively.\n * Optimization: converts a list of projective points to a list of identical points with Z=1.\n */\n static normalizeZ(points: Point[]): Point[] {\n const toInv = FpInvertBatch(\n Fp,\n points.map((p) => p.pz)\n );\n return points.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n }\n\n /**\n * Converts hash string or Uint8Array to Point.\n * @param hex short/long ECDSA hex\n */\n static fromHex(hex: Hex): Point {\n const P = Point.fromAffine(fromBytes(ensureBytes('pointHex', hex)));\n P.assertValidity();\n return P;\n }\n\n // Multiplies generator point by privateKey.\n static fromPrivateKey(privateKey: PrivKey) {\n return Point.BASE.multiply(normPrivateKeyToScalar(privateKey));\n }\n\n // Multiscalar Multiplication\n static msm(points: Point[], scalars: bigint[]): Point {\n return pippenger(Point, Fn, points, scalars);\n }\n\n // \"Private method\", don't use it directly\n _setWindowSize(windowSize: number) {\n wnaf.setWindowSize(this, windowSize);\n }\n\n // A point on curve is valid if it conforms to equation.\n assertValidity(): void {\n assertValidMemo(this);\n }\n\n hasEvenY(): boolean {\n const { y } = this.toAffine();\n if (Fp.isOdd) return !Fp.isOdd(y);\n throw new Error(\"Field doesn't support isOdd\");\n }\n\n /**\n * Compare one point to another.\n */\n equals(other: Point): boolean {\n aprjpoint(other);\n const { px: X1, py: Y1, pz: Z1 } = this;\n const { px: X2, py: Y2, pz: Z2 } = other;\n const U1 = Fp.eql(Fp.mul(X1, Z2), Fp.mul(X2, Z1));\n const U2 = Fp.eql(Fp.mul(Y1, Z2), Fp.mul(Y2, Z1));\n return U1 && U2;\n }\n\n /**\n * Flips point to one corresponding to (x, -y) in Affine coordinates.\n */\n negate(): Point {\n return new Point(this.px, Fp.neg(this.py), this.pz);\n }\n\n // Renes-Costello-Batina exception-free doubling formula.\n // There is 30% faster Jacobian formula, but it is not complete.\n // https://eprint.iacr.org/2015/1060, algorithm 3\n // Cost: 8M + 3S + 3*a + 2*b3 + 15add.\n double() {\n const { a, b } = CURVE;\n const b3 = Fp.mul(b, _3n);\n const { px: X1, py: Y1, pz: Z1 } = this;\n let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n let t0 = Fp.mul(X1, X1); // step 1\n let t1 = Fp.mul(Y1, Y1);\n let t2 = Fp.mul(Z1, Z1);\n let t3 = Fp.mul(X1, Y1);\n t3 = Fp.add(t3, t3); // step 5\n Z3 = Fp.mul(X1, Z1);\n Z3 = Fp.add(Z3, Z3);\n X3 = Fp.mul(a, Z3);\n Y3 = Fp.mul(b3, t2);\n Y3 = Fp.add(X3, Y3); // step 10\n X3 = Fp.sub(t1, Y3);\n Y3 = Fp.add(t1, Y3);\n Y3 = Fp.mul(X3, Y3);\n X3 = Fp.mul(t3, X3);\n Z3 = Fp.mul(b3, Z3); // step 15\n t2 = Fp.mul(a, t2);\n t3 = Fp.sub(t0, t2);\n t3 = Fp.mul(a, t3);\n t3 = Fp.add(t3, Z3);\n Z3 = Fp.add(t0, t0); // step 20\n t0 = Fp.add(Z3, t0);\n t0 = Fp.add(t0, t2);\n t0 = Fp.mul(t0, t3);\n Y3 = Fp.add(Y3, t0);\n t2 = Fp.mul(Y1, Z1); // step 25\n t2 = Fp.add(t2, t2);\n t0 = Fp.mul(t2, t3);\n X3 = Fp.sub(X3, t0);\n Z3 = Fp.mul(t2, t1);\n Z3 = Fp.add(Z3, Z3); // step 30\n Z3 = Fp.add(Z3, Z3);\n return new Point(X3, Y3, Z3);\n }\n\n // Renes-Costello-Batina exception-free addition formula.\n // There is 30% faster Jacobian formula, but it is not complete.\n // https://eprint.iacr.org/2015/1060, algorithm 1\n // Cost: 12M + 0S + 3*a + 3*b3 + 23add.\n add(other: Point): Point {\n aprjpoint(other);\n const { px: X1, py: Y1, pz: Z1 } = this;\n const { px: X2, py: Y2, pz: Z2 } = other;\n let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n const a = CURVE.a;\n const b3 = Fp.mul(CURVE.b, _3n);\n let t0 = Fp.mul(X1, X2); // step 1\n let t1 = Fp.mul(Y1, Y2);\n let t2 = Fp.mul(Z1, Z2);\n let t3 = Fp.add(X1, Y1);\n let t4 = Fp.add(X2, Y2); // step 5\n t3 = Fp.mul(t3, t4);\n t4 = Fp.add(t0, t1);\n t3 = Fp.sub(t3, t4);\n t4 = Fp.add(X1, Z1);\n let t5 = Fp.add(X2, Z2); // step 10\n t4 = Fp.mul(t4, t5);\n t5 = Fp.add(t0, t2);\n t4 = Fp.sub(t4, t5);\n t5 = Fp.add(Y1, Z1);\n X3 = Fp.add(Y2, Z2); // step 15\n t5 = Fp.mul(t5, X3);\n X3 = Fp.add(t1, t2);\n t5 = Fp.sub(t5, X3);\n Z3 = Fp.mul(a, t4);\n X3 = Fp.mul(b3, t2); // step 20\n Z3 = Fp.add(X3, Z3);\n X3 = Fp.sub(t1, Z3);\n Z3 = Fp.add(t1, Z3);\n Y3 = Fp.mul(X3, Z3);\n t1 = Fp.add(t0, t0); // step 25\n t1 = Fp.add(t1, t0);\n t2 = Fp.mul(a, t2);\n t4 = Fp.mul(b3, t4);\n t1 = Fp.add(t1, t2);\n t2 = Fp.sub(t0, t2); // step 30\n t2 = Fp.mul(a, t2);\n t4 = Fp.add(t4, t2);\n t0 = Fp.mul(t1, t4);\n Y3 = Fp.add(Y3, t0);\n t0 = Fp.mul(t5, t4); // step 35\n X3 = Fp.mul(t3, X3);\n X3 = Fp.sub(X3, t0);\n t0 = Fp.mul(t3, t1);\n Z3 = Fp.mul(t5, Z3);\n Z3 = Fp.add(Z3, t0); // step 40\n return new Point(X3, Y3, Z3);\n }\n\n subtract(other: Point) {\n return this.add(other.negate());\n }\n\n is0() {\n return this.equals(Point.ZERO);\n }\n\n private wNAF(n: bigint): { p: Point; f: Point } {\n return wnaf.wNAFCached(this, n, Point.normalizeZ);\n }\n\n /**\n * Non-constant-time multiplication. Uses double-and-add algorithm.\n * It's faster, but should only be used when you don't care about\n * an exposed private key e.g. sig verification, which works over *public* keys.\n */\n multiplyUnsafe(sc: bigint): Point {\n const { endo, n: N } = CURVE;\n aInRange('scalar', sc, _0n, N);\n const I = Point.ZERO;\n if (sc === _0n) return I;\n if (this.is0() || sc === _1n) return this;\n\n // Case a: no endomorphism. Case b: has precomputes.\n if (!endo || wnaf.hasPrecomputes(this))\n return wnaf.wNAFCachedUnsafe(this, sc, Point.normalizeZ);\n\n // Case c: endomorphism\n /** See docs for {@link EndomorphismOpts} */\n let { k1neg, k1, k2neg, k2 } = endo.splitScalar(sc);\n let k1p = I;\n let k2p = I;\n let d: Point = this;\n while (k1 > _0n || k2 > _0n) {\n if (k1 & _1n) k1p = k1p.add(d);\n if (k2 & _1n) k2p = k2p.add(d);\n d = d.double();\n k1 >>= _1n;\n k2 >>= _1n;\n }\n if (k1neg) k1p = k1p.negate();\n if (k2neg) k2p = k2p.negate();\n k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n return k1p.add(k2p);\n }\n\n /**\n * Constant time multiplication.\n * Uses wNAF method. Windowed method may be 10% faster,\n * but takes 2x longer to generate and consumes 2x memory.\n * Uses precomputes when available.\n * Uses endomorphism for Koblitz curves.\n * @param scalar by which the point would be multiplied\n * @returns New point\n */\n multiply(scalar: bigint): Point {\n const { endo, n: N } = CURVE;\n aInRange('scalar', scalar, _1n, N);\n let point: Point, fake: Point; // Fake point is used to const-time mult\n /** See docs for {@link EndomorphismOpts} */\n if (endo) {\n const { k1neg, k1, k2neg, k2 } = endo.splitScalar(scalar);\n let { p: k1p, f: f1p } = this.wNAF(k1);\n let { p: k2p, f: f2p } = this.wNAF(k2);\n k1p = wnaf.constTimeNegate(k1neg, k1p);\n k2p = wnaf.constTimeNegate(k2neg, k2p);\n k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n point = k1p.add(k2p);\n fake = f1p.add(f2p);\n } else {\n const { p, f } = this.wNAF(scalar);\n point = p;\n fake = f;\n }\n // Normalize `z` for both points, but return only real one\n return Point.normalizeZ([point, fake])[0];\n }\n\n /**\n * Efficiently calculate `aP + bQ`. Unsafe, can expose private key, if used incorrectly.\n * Not using Strauss-Shamir trick: precomputation tables are faster.\n * The trick could be useful if both P and Q are not G (not in our case).\n * @returns non-zero affine point\n */\n multiplyAndAddUnsafe(Q: Point, a: bigint, b: bigint): Point | undefined {\n const G = Point.BASE; // No Strauss-Shamir trick: we have 10% faster G precomputes\n const mul = (\n P: Point,\n a: bigint // Select faster multiply() method\n ) => (a === _0n || a === _1n || !P.equals(G) ? P.multiplyUnsafe(a) : P.multiply(a));\n const sum = mul(this, a).add(mul(Q, b));\n return sum.is0() ? undefined : sum;\n }\n\n // Converts Projective point to affine (x, y) coordinates.\n // Can accept precomputed Z^-1 - for example, from invertBatch.\n // (x, y, z) \u220B (x=x/z, y=y/z)\n toAffine(iz?: T): AffinePoint {\n return toAffineMemo(this, iz);\n }\n isTorsionFree(): boolean {\n const { h: cofactor, isTorsionFree } = CURVE;\n if (cofactor === _1n) return true; // No subgroups, always torsion-free\n if (isTorsionFree) return isTorsionFree(Point, this);\n throw new Error('isTorsionFree() has not been declared for the elliptic curve');\n }\n clearCofactor(): Point {\n const { h: cofactor, clearCofactor } = CURVE;\n if (cofactor === _1n) return this; // Fast-path\n if (clearCofactor) return clearCofactor(Point, this) as Point;\n return this.multiplyUnsafe(CURVE.h);\n }\n\n toRawBytes(isCompressed = true): Uint8Array {\n abool('isCompressed', isCompressed);\n this.assertValidity();\n return toBytes(Point, this, isCompressed);\n }\n\n toHex(isCompressed = true): string {\n abool('isCompressed', isCompressed);\n return bytesToHex(this.toRawBytes(isCompressed));\n }\n }\n const { endo, nBitLength } = CURVE;\n const wnaf = wNAF(Point, endo ? Math.ceil(nBitLength / 2) : nBitLength);\n return {\n CURVE,\n ProjectivePoint: Point as ProjConstructor,\n normPrivateKeyToScalar,\n weierstrassEquation,\n isWithinCurveOrder,\n };\n}\n\n// Instance\nexport interface SignatureType {\n readonly r: bigint;\n readonly s: bigint;\n readonly recovery?: number;\n assertValidity(): void;\n addRecoveryBit(recovery: number): RecoveredSignatureType;\n hasHighS(): boolean;\n normalizeS(): SignatureType;\n recoverPublicKey(msgHash: Hex): ProjPointType;\n toCompactRawBytes(): Uint8Array;\n toCompactHex(): string;\n toDERRawBytes(isCompressed?: boolean): Uint8Array;\n toDERHex(isCompressed?: boolean): string;\n}\nexport type RecoveredSignatureType = SignatureType & {\n readonly recovery: number;\n};\n// Static methods\nexport type SignatureConstructor = {\n new (r: bigint, s: bigint): SignatureType;\n fromCompact(hex: Hex): SignatureType;\n fromDER(hex: Hex): SignatureType;\n};\ntype SignatureLike = { r: bigint; s: bigint };\n\nexport type PubKey = Hex | ProjPointType;\n\nexport type CurveType = BasicWCurve & {\n hash: CHash; // CHash not FHash because we need outputLen for DRBG\n hmac: HmacFnSync;\n randomBytes: (bytesLength?: number) => Uint8Array;\n lowS?: boolean;\n bits2int?: (bytes: Uint8Array) => bigint;\n bits2int_modN?: (bytes: Uint8Array) => bigint;\n};\n\nfunction validateOpts(\n curve: CurveType\n): Readonly {\n const opts = validateBasic(curve);\n validateObject(\n opts,\n {\n hash: 'hash',\n hmac: 'function',\n randomBytes: 'function',\n },\n {\n bits2int: 'function',\n bits2int_modN: 'function',\n lowS: 'boolean',\n }\n );\n return Object.freeze({ lowS: true, ...opts } as const);\n}\n\nexport type CurveFn = {\n CURVE: ReturnType;\n getPublicKey: (privateKey: PrivKey, isCompressed?: boolean) => Uint8Array;\n getSharedSecret: (privateA: PrivKey, publicB: Hex, isCompressed?: boolean) => Uint8Array;\n sign: (msgHash: Hex, privKey: PrivKey, opts?: SignOpts) => RecoveredSignatureType;\n verify: (signature: Hex | SignatureLike, msgHash: Hex, publicKey: Hex, opts?: VerOpts) => boolean;\n ProjectivePoint: ProjConstructor;\n Signature: SignatureConstructor;\n utils: {\n normPrivateKeyToScalar: (key: PrivKey) => bigint;\n isValidPrivateKey(privateKey: PrivKey): boolean;\n randomPrivateKey: () => Uint8Array;\n precompute: (windowSize?: number, point?: ProjPointType) => ProjPointType;\n };\n};\n\n/**\n * Creates short weierstrass curve and ECDSA signature methods for it.\n * @example\n * import { Field } from '@noble/curves/abstract/modular';\n * // Before that, define BigInt-s: a, b, p, n, Gx, Gy\n * const curve = weierstrass({ a, b, Fp: Field(p), n, Gx, Gy, h: 1n })\n */\nexport function weierstrass(curveDef: CurveType): CurveFn {\n const CURVE = validateOpts(curveDef) as ReturnType;\n const { Fp, n: CURVE_ORDER, nByteLength, nBitLength } = CURVE;\n const compressedLen = Fp.BYTES + 1; // e.g. 33 for 32\n const uncompressedLen = 2 * Fp.BYTES + 1; // e.g. 65 for 32\n\n function modN(a: bigint) {\n return mod(a, CURVE_ORDER);\n }\n function invN(a: bigint) {\n return invert(a, CURVE_ORDER);\n }\n\n const {\n ProjectivePoint: Point,\n normPrivateKeyToScalar,\n weierstrassEquation,\n isWithinCurveOrder,\n } = weierstrassPoints({\n ...CURVE,\n toBytes(_c, point, isCompressed: boolean): Uint8Array {\n const a = point.toAffine();\n const x = Fp.toBytes(a.x);\n const cat = concatBytes;\n abool('isCompressed', isCompressed);\n if (isCompressed) {\n return cat(Uint8Array.from([point.hasEvenY() ? 0x02 : 0x03]), x);\n } else {\n return cat(Uint8Array.from([0x04]), x, Fp.toBytes(a.y));\n }\n },\n fromBytes(bytes: Uint8Array) {\n const len = bytes.length;\n const head = bytes[0];\n const tail = bytes.subarray(1);\n // this.assertValidity() is done inside of fromHex\n if (len === compressedLen && (head === 0x02 || head === 0x03)) {\n const x = bytesToNumberBE(tail);\n if (!inRange(x, _1n, Fp.ORDER)) throw new Error('Point is not on curve');\n const y2 = weierstrassEquation(x); // y\u00B2 = x\u00B3 + ax + b\n let y: bigint;\n try {\n y = Fp.sqrt(y2); // y = y\u00B2 ^ (p+1)/4\n } catch (sqrtError) {\n const suffix = sqrtError instanceof Error ? ': ' + sqrtError.message : '';\n throw new Error('Point is not on curve' + suffix);\n }\n const isYOdd = (y & _1n) === _1n;\n // ECDSA\n const isHeadOdd = (head & 1) === 1;\n if (isHeadOdd !== isYOdd) y = Fp.neg(y);\n return { x, y };\n } else if (len === uncompressedLen && head === 0x04) {\n const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n return { x, y };\n } else {\n const cl = compressedLen;\n const ul = uncompressedLen;\n throw new Error(\n 'invalid Point, expected length of ' + cl + ', or uncompressed ' + ul + ', got ' + len\n );\n }\n },\n });\n\n function isBiggerThanHalfOrder(number: bigint) {\n const HALF = CURVE_ORDER >> _1n;\n return number > HALF;\n }\n\n function normalizeS(s: bigint) {\n return isBiggerThanHalfOrder(s) ? modN(-s) : s;\n }\n // slice bytes num\n const slcNum = (b: Uint8Array, from: number, to: number) => bytesToNumberBE(b.slice(from, to));\n\n /**\n * ECDSA signature with its (r, s) properties. Supports DER & compact representations.\n */\n class Signature implements SignatureType {\n readonly r: bigint;\n readonly s: bigint;\n readonly recovery?: number;\n constructor(r: bigint, s: bigint, recovery?: number) {\n aInRange('r', r, _1n, CURVE_ORDER); // r in [1..N]\n aInRange('s', s, _1n, CURVE_ORDER); // s in [1..N]\n this.r = r;\n this.s = s;\n if (recovery != null) this.recovery = recovery;\n Object.freeze(this);\n }\n\n // pair (bytes of r, bytes of s)\n static fromCompact(hex: Hex) {\n const l = nByteLength;\n hex = ensureBytes('compactSignature', hex, l * 2);\n return new Signature(slcNum(hex, 0, l), slcNum(hex, l, 2 * l));\n }\n\n // DER encoded ECDSA signature\n // https://bitcoin.stackexchange.com/questions/57644/what-are-the-parts-of-a-bitcoin-transaction-input-script\n static fromDER(hex: Hex) {\n const { r, s } = DER.toSig(ensureBytes('DER', hex));\n return new Signature(r, s);\n }\n\n /**\n * @todo remove\n * @deprecated\n */\n assertValidity(): void {}\n\n addRecoveryBit(recovery: number): RecoveredSignature {\n return new Signature(this.r, this.s, recovery) as RecoveredSignature;\n }\n\n recoverPublicKey(msgHash: Hex): typeof Point.BASE {\n const { r, s, recovery: rec } = this;\n const h = bits2int_modN(ensureBytes('msgHash', msgHash)); // Truncate hash\n if (rec == null || ![0, 1, 2, 3].includes(rec)) throw new Error('recovery id invalid');\n const radj = rec === 2 || rec === 3 ? r + CURVE.n : r;\n if (radj >= Fp.ORDER) throw new Error('recovery id 2 or 3 invalid');\n const prefix = (rec & 1) === 0 ? '02' : '03';\n const R = Point.fromHex(prefix + numToSizedHex(radj, Fp.BYTES));\n const ir = invN(radj); // r^-1\n const u1 = modN(-h * ir); // -hr^-1\n const u2 = modN(s * ir); // sr^-1\n const Q = Point.BASE.multiplyAndAddUnsafe(R, u1, u2); // (sr^-1)R-(hr^-1)G = -(hr^-1)G + (sr^-1)\n if (!Q) throw new Error('point at infinify'); // unsafe is fine: no priv data leaked\n Q.assertValidity();\n return Q;\n }\n\n // Signatures should be low-s, to prevent malleability.\n hasHighS(): boolean {\n return isBiggerThanHalfOrder(this.s);\n }\n\n normalizeS() {\n return this.hasHighS() ? new Signature(this.r, modN(-this.s), this.recovery) : this;\n }\n\n // DER-encoded\n toDERRawBytes() {\n return hexToBytes(this.toDERHex());\n }\n toDERHex() {\n return DER.hexFromSig(this);\n }\n\n // padded bytes of r, then padded bytes of s\n toCompactRawBytes() {\n return hexToBytes(this.toCompactHex());\n }\n toCompactHex() {\n const l = nByteLength;\n return numToSizedHex(this.r, l) + numToSizedHex(this.s, l);\n }\n }\n type RecoveredSignature = Signature & { recovery: number };\n\n const utils = {\n isValidPrivateKey(privateKey: PrivKey) {\n try {\n normPrivateKeyToScalar(privateKey);\n return true;\n } catch (error) {\n return false;\n }\n },\n normPrivateKeyToScalar: normPrivateKeyToScalar,\n\n /**\n * Produces cryptographically secure private key from random of size\n * (groupLen + ceil(groupLen / 2)) with modulo bias being negligible.\n */\n randomPrivateKey: (): Uint8Array => {\n const length = getMinHashLength(CURVE.n);\n return mapHashToField(CURVE.randomBytes(length), CURVE.n);\n },\n\n /**\n * Creates precompute table for an arbitrary EC point. Makes point \"cached\".\n * Allows to massively speed-up `point.multiply(scalar)`.\n * @returns cached point\n * @example\n * const fast = utils.precompute(8, ProjectivePoint.fromHex(someonesPubKey));\n * fast.multiply(privKey); // much faster ECDH now\n */\n precompute(windowSize = 8, point = Point.BASE): typeof Point.BASE {\n point._setWindowSize(windowSize);\n point.multiply(BigInt(3)); // 3 is arbitrary, just need any number here\n return point;\n },\n };\n\n /**\n * Computes public key for a private key. Checks for validity of the private key.\n * @param privateKey private key\n * @param isCompressed whether to return compact (default), or full key\n * @returns Public key, full when isCompressed=false; short when isCompressed=true\n */\n function getPublicKey(privateKey: PrivKey, isCompressed = true): Uint8Array {\n return Point.fromPrivateKey(privateKey).toRawBytes(isCompressed);\n }\n\n /**\n * Quick and dirty check for item being public key. Does not validate hex, or being on-curve.\n */\n function isProbPub(item: PrivKey | PubKey): boolean | undefined {\n if (typeof item === 'bigint') return false;\n if (item instanceof Point) return true;\n const arr = ensureBytes('key', item);\n const len = arr.length;\n const fpl = Fp.BYTES;\n const compLen = fpl + 1; // e.g. 33 for 32\n const uncompLen = 2 * fpl + 1; // e.g. 65 for 32\n if (CURVE.allowedPrivateKeyLengths || nByteLength === compLen) {\n return undefined;\n } else {\n return len === compLen || len === uncompLen;\n }\n }\n\n /**\n * ECDH (Elliptic Curve Diffie Hellman).\n * Computes shared public key from private key and public key.\n * Checks: 1) private key validity 2) shared key is on-curve.\n * Does NOT hash the result.\n * @param privateA private key\n * @param publicB different public key\n * @param isCompressed whether to return compact (default), or full key\n * @returns shared public key\n */\n function getSharedSecret(privateA: PrivKey, publicB: Hex, isCompressed = true): Uint8Array {\n if (isProbPub(privateA) === true) throw new Error('first arg must be private key');\n if (isProbPub(publicB) === false) throw new Error('second arg must be public key');\n const b = Point.fromHex(publicB); // check for being on-curve\n return b.multiply(normPrivateKeyToScalar(privateA)).toRawBytes(isCompressed);\n }\n\n // RFC6979: ensure ECDSA msg is X bytes and < N. RFC suggests optional truncating via bits2octets.\n // FIPS 186-4 4.6 suggests the leftmost min(nBitLen, outLen) bits, which matches bits2int.\n // bits2int can produce res>N, we can do mod(res, N) since the bitLen is the same.\n // int2octets can't be used; pads small msgs with 0: unacceptatble for trunc as per RFC vectors\n const bits2int =\n CURVE.bits2int ||\n function (bytes: Uint8Array): bigint {\n // Our custom check \"just in case\", for protection against DoS\n if (bytes.length > 8192) throw new Error('input is too large');\n // For curves with nBitLength % 8 !== 0: bits2octets(bits2octets(m)) !== bits2octets(m)\n // for some cases, since bytes.length * 8 is not actual bitLength.\n const num = bytesToNumberBE(bytes); // check for == u8 done here\n const delta = bytes.length * 8 - nBitLength; // truncate to nBitLength leftmost bits\n return delta > 0 ? num >> BigInt(delta) : num;\n };\n const bits2int_modN =\n CURVE.bits2int_modN ||\n function (bytes: Uint8Array): bigint {\n return modN(bits2int(bytes)); // can't use bytesToNumberBE here\n };\n // NOTE: pads output with zero as per spec\n const ORDER_MASK = bitMask(nBitLength);\n /**\n * Converts to bytes. Checks if num in `[0..ORDER_MASK-1]` e.g.: `[0..2^256-1]`.\n */\n function int2octets(num: bigint): Uint8Array {\n aInRange('num < 2^' + nBitLength, num, _0n, ORDER_MASK);\n // works with order, can have different size than numToField!\n return numberToBytesBE(num, nByteLength);\n }\n\n // Steps A, D of RFC6979 3.2\n // Creates RFC6979 seed; converts msg/privKey to numbers.\n // Used only in sign, not in verify.\n // NOTE: we cannot assume here that msgHash has same amount of bytes as curve order,\n // this will be invalid at least for P521. Also it can be bigger for P224 + SHA256\n function prepSig(msgHash: Hex, privateKey: PrivKey, opts = defaultSigOpts) {\n if (['recovered', 'canonical'].some((k) => k in opts))\n throw new Error('sign() legacy options not supported');\n const { hash, randomBytes } = CURVE;\n let { lowS, prehash, extraEntropy: ent } = opts; // generates low-s sigs by default\n if (lowS == null) lowS = true; // RFC6979 3.2: we skip step A, because we already provide hash\n msgHash = ensureBytes('msgHash', msgHash);\n validateSigVerOpts(opts);\n if (prehash) msgHash = ensureBytes('prehashed msgHash', hash(msgHash));\n\n // We can't later call bits2octets, since nested bits2int is broken for curves\n // with nBitLength % 8 !== 0. Because of that, we unwrap it here as int2octets call.\n // const bits2octets = (bits) => int2octets(bits2int_modN(bits))\n const h1int = bits2int_modN(msgHash);\n const d = normPrivateKeyToScalar(privateKey); // validate private key, convert to bigint\n const seedArgs = [int2octets(d), int2octets(h1int)];\n // extraEntropy. RFC6979 3.6: additional k' (optional).\n if (ent != null && ent !== false) {\n // K = HMAC_K(V || 0x00 || int2octets(x) || bits2octets(h1) || k')\n const e = ent === true ? randomBytes(Fp.BYTES) : ent; // generate random bytes OR pass as-is\n seedArgs.push(ensureBytes('extraEntropy', e)); // check for being bytes\n }\n const seed = concatBytes(...seedArgs); // Step D of RFC6979 3.2\n const m = h1int; // NOTE: no need to call bits2int second time here, it is inside truncateHash!\n // Converts signature params into point w r/s, checks result for validity.\n function k2sig(kBytes: Uint8Array): RecoveredSignature | undefined {\n // RFC 6979 Section 3.2, step 3: k = bits2int(T)\n const k = bits2int(kBytes); // Cannot use fields methods, since it is group element\n if (!isWithinCurveOrder(k)) return; // Important: all mod() calls here must be done over N\n const ik = invN(k); // k^-1 mod n\n const q = Point.BASE.multiply(k).toAffine(); // q = Gk\n const r = modN(q.x); // r = q.x mod n\n if (r === _0n) return;\n // Can use scalar blinding b^-1(bm + bdr) where b \u2208 [1,q\u22121] according to\n // https://tches.iacr.org/index.php/TCHES/article/view/7337/6509. We've decided against it:\n // a) dependency on CSPRNG b) 15% slowdown c) doesn't really help since bigints are not CT\n const s = modN(ik * modN(m + r * d)); // Not using blinding here\n if (s === _0n) return;\n let recovery = (q.x === r ? 0 : 2) | Number(q.y & _1n); // recovery bit (2 or 3, when q.x > n)\n let normS = s;\n if (lowS && isBiggerThanHalfOrder(s)) {\n normS = normalizeS(s); // if lowS was passed, ensure s is always\n recovery ^= 1; // // in the bottom half of N\n }\n return new Signature(r, normS, recovery) as RecoveredSignature; // use normS, not s\n }\n return { seed, k2sig };\n }\n const defaultSigOpts: SignOpts = { lowS: CURVE.lowS, prehash: false };\n const defaultVerOpts: VerOpts = { lowS: CURVE.lowS, prehash: false };\n\n /**\n * Signs message hash with a private key.\n * ```\n * sign(m, d, k) where\n * (x, y) = G \u00D7 k\n * r = x mod n\n * s = (m + dr)/k mod n\n * ```\n * @param msgHash NOT message. msg needs to be hashed to `msgHash`, or use `prehash`.\n * @param privKey private key\n * @param opts lowS for non-malleable sigs. extraEntropy for mixing randomness into k. prehash will hash first arg.\n * @returns signature with recovery param\n */\n function sign(msgHash: Hex, privKey: PrivKey, opts = defaultSigOpts): RecoveredSignature {\n const { seed, k2sig } = prepSig(msgHash, privKey, opts); // Steps A, D of RFC6979 3.2.\n const C = CURVE;\n const drbg = createHmacDrbg(C.hash.outputLen, C.nByteLength, C.hmac);\n return drbg(seed, k2sig); // Steps B, C, D, E, F, G\n }\n\n // Enable precomputes. Slows down first publicKey computation by 20ms.\n Point.BASE._setWindowSize(8);\n // utils.precompute(8, ProjectivePoint.BASE)\n\n /**\n * Verifies a signature against message hash and public key.\n * Rejects lowS signatures by default: to override,\n * specify option `{lowS: false}`. Implements section 4.1.4 from https://www.secg.org/sec1-v2.pdf:\n *\n * ```\n * verify(r, s, h, P) where\n * U1 = hs^-1 mod n\n * U2 = rs^-1 mod n\n * R = U1\u22C5G - U2\u22C5P\n * mod(R.x, n) == r\n * ```\n */\n function verify(\n signature: Hex | SignatureLike,\n msgHash: Hex,\n publicKey: Hex,\n opts = defaultVerOpts\n ): boolean {\n const sg = signature;\n msgHash = ensureBytes('msgHash', msgHash);\n publicKey = ensureBytes('publicKey', publicKey);\n const { lowS, prehash, format } = opts;\n\n // Verify opts, deduce signature format\n validateSigVerOpts(opts);\n if ('strict' in opts) throw new Error('options.strict was renamed to lowS');\n if (format !== undefined && format !== 'compact' && format !== 'der')\n throw new Error('format must be compact or der');\n const isHex = typeof sg === 'string' || isBytes(sg);\n const isObj =\n !isHex &&\n !format &&\n typeof sg === 'object' &&\n sg !== null &&\n typeof sg.r === 'bigint' &&\n typeof sg.s === 'bigint';\n if (!isHex && !isObj)\n throw new Error('invalid signature, expected Uint8Array, hex string or Signature instance');\n\n let _sig: Signature | undefined = undefined;\n let P: ProjPointType;\n try {\n if (isObj) _sig = new Signature(sg.r, sg.s);\n if (isHex) {\n // Signature can be represented in 2 ways: compact (2*nByteLength) & DER (variable-length).\n // Since DER can also be 2*nByteLength bytes, we check for it first.\n try {\n if (format !== 'compact') _sig = Signature.fromDER(sg);\n } catch (derError) {\n if (!(derError instanceof DER.Err)) throw derError;\n }\n if (!_sig && format !== 'der') _sig = Signature.fromCompact(sg);\n }\n P = Point.fromHex(publicKey);\n } catch (error) {\n return false;\n }\n if (!_sig) return false;\n if (lowS && _sig.hasHighS()) return false;\n if (prehash) msgHash = CURVE.hash(msgHash);\n const { r, s } = _sig;\n const h = bits2int_modN(msgHash); // Cannot use fields methods, since it is group element\n const is = invN(s); // s^-1\n const u1 = modN(h * is); // u1 = hs^-1 mod n\n const u2 = modN(r * is); // u2 = rs^-1 mod n\n const R = Point.BASE.multiplyAndAddUnsafe(P, u1, u2)?.toAffine(); // R = u1\u22C5G + u2\u22C5P\n if (!R) return false;\n const v = modN(R.x);\n return v === r;\n }\n return {\n CURVE,\n getPublicKey,\n getSharedSecret,\n sign,\n verify,\n ProjectivePoint: Point,\n Signature,\n utils,\n };\n}\n\n/**\n * Implementation of the Shallue and van de Woestijne method for any weierstrass curve.\n * TODO: check if there is a way to merge this with uvRatio in Edwards; move to modular.\n * b = True and y = sqrt(u / v) if (u / v) is square in F, and\n * b = False and y = sqrt(Z * (u / v)) otherwise.\n * @param Fp\n * @param Z\n * @returns\n */\nexport function SWUFpSqrtRatio(\n Fp: IField,\n Z: T\n): (u: T, v: T) => { isValid: boolean; value: T } {\n // Generic implementation\n const q = Fp.ORDER;\n let l = _0n;\n for (let o = q - _1n; o % _2n === _0n; o /= _2n) l += _1n;\n const c1 = l; // 1. c1, the largest integer such that 2^c1 divides q - 1.\n // We need 2n ** c1 and 2n ** (c1-1). We can't use **; but we can use <<.\n // 2n ** c1 == 2n << (c1-1)\n const _2n_pow_c1_1 = _2n << (c1 - _1n - _1n);\n const _2n_pow_c1 = _2n_pow_c1_1 * _2n;\n const c2 = (q - _1n) / _2n_pow_c1; // 2. c2 = (q - 1) / (2^c1) # Integer arithmetic\n const c3 = (c2 - _1n) / _2n; // 3. c3 = (c2 - 1) / 2 # Integer arithmetic\n const c4 = _2n_pow_c1 - _1n; // 4. c4 = 2^c1 - 1 # Integer arithmetic\n const c5 = _2n_pow_c1_1; // 5. c5 = 2^(c1 - 1) # Integer arithmetic\n const c6 = Fp.pow(Z, c2); // 6. c6 = Z^c2\n const c7 = Fp.pow(Z, (c2 + _1n) / _2n); // 7. c7 = Z^((c2 + 1) / 2)\n let sqrtRatio = (u: T, v: T): { isValid: boolean; value: T } => {\n let tv1 = c6; // 1. tv1 = c6\n let tv2 = Fp.pow(v, c4); // 2. tv2 = v^c4\n let tv3 = Fp.sqr(tv2); // 3. tv3 = tv2^2\n tv3 = Fp.mul(tv3, v); // 4. tv3 = tv3 * v\n let tv5 = Fp.mul(u, tv3); // 5. tv5 = u * tv3\n tv5 = Fp.pow(tv5, c3); // 6. tv5 = tv5^c3\n tv5 = Fp.mul(tv5, tv2); // 7. tv5 = tv5 * tv2\n tv2 = Fp.mul(tv5, v); // 8. tv2 = tv5 * v\n tv3 = Fp.mul(tv5, u); // 9. tv3 = tv5 * u\n let tv4 = Fp.mul(tv3, tv2); // 10. tv4 = tv3 * tv2\n tv5 = Fp.pow(tv4, c5); // 11. tv5 = tv4^c5\n let isQR = Fp.eql(tv5, Fp.ONE); // 12. isQR = tv5 == 1\n tv2 = Fp.mul(tv3, c7); // 13. tv2 = tv3 * c7\n tv5 = Fp.mul(tv4, tv1); // 14. tv5 = tv4 * tv1\n tv3 = Fp.cmov(tv2, tv3, isQR); // 15. tv3 = CMOV(tv2, tv3, isQR)\n tv4 = Fp.cmov(tv5, tv4, isQR); // 16. tv4 = CMOV(tv5, tv4, isQR)\n // 17. for i in (c1, c1 - 1, ..., 2):\n for (let i = c1; i > _1n; i--) {\n let tv5 = i - _2n; // 18. tv5 = i - 2\n tv5 = _2n << (tv5 - _1n); // 19. tv5 = 2^tv5\n let tvv5 = Fp.pow(tv4, tv5); // 20. tv5 = tv4^tv5\n const e1 = Fp.eql(tvv5, Fp.ONE); // 21. e1 = tv5 == 1\n tv2 = Fp.mul(tv3, tv1); // 22. tv2 = tv3 * tv1\n tv1 = Fp.mul(tv1, tv1); // 23. tv1 = tv1 * tv1\n tvv5 = Fp.mul(tv4, tv1); // 24. tv5 = tv4 * tv1\n tv3 = Fp.cmov(tv2, tv3, e1); // 25. tv3 = CMOV(tv2, tv3, e1)\n tv4 = Fp.cmov(tvv5, tv4, e1); // 26. tv4 = CMOV(tv5, tv4, e1)\n }\n return { isValid: isQR, value: tv3 };\n };\n if (Fp.ORDER % _4n === _3n) {\n // sqrt_ratio_3mod4(u, v)\n const c1 = (Fp.ORDER - _3n) / _4n; // 1. c1 = (q - 3) / 4 # Integer arithmetic\n const c2 = Fp.sqrt(Fp.neg(Z)); // 2. c2 = sqrt(-Z)\n sqrtRatio = (u: T, v: T) => {\n let tv1 = Fp.sqr(v); // 1. tv1 = v^2\n const tv2 = Fp.mul(u, v); // 2. tv2 = u * v\n tv1 = Fp.mul(tv1, tv2); // 3. tv1 = tv1 * tv2\n let y1 = Fp.pow(tv1, c1); // 4. y1 = tv1^c1\n y1 = Fp.mul(y1, tv2); // 5. y1 = y1 * tv2\n const y2 = Fp.mul(y1, c2); // 6. y2 = y1 * c2\n const tv3 = Fp.mul(Fp.sqr(y1), v); // 7. tv3 = y1^2; 8. tv3 = tv3 * v\n const isQR = Fp.eql(tv3, u); // 9. isQR = tv3 == u\n let y = Fp.cmov(y2, y1, isQR); // 10. y = CMOV(y2, y1, isQR)\n return { isValid: isQR, value: y }; // 11. return (isQR, y) isQR ? y : y*c2\n };\n }\n // No curves uses that\n // if (Fp.ORDER % _8n === _5n) // sqrt_ratio_5mod8\n return sqrtRatio;\n}\n/**\n * Simplified Shallue-van de Woestijne-Ulas Method\n * https://www.rfc-editor.org/rfc/rfc9380#section-6.6.2\n */\nexport function mapToCurveSimpleSWU(\n Fp: IField,\n opts: {\n A: T;\n B: T;\n Z: T;\n }\n): (u: T) => { x: T; y: T } {\n validateField(Fp);\n if (!Fp.isValid(opts.A) || !Fp.isValid(opts.B) || !Fp.isValid(opts.Z))\n throw new Error('mapToCurveSimpleSWU: invalid opts');\n const sqrtRatio = SWUFpSqrtRatio(Fp, opts.Z);\n if (!Fp.isOdd) throw new Error('Fp.isOdd is not implemented!');\n // Input: u, an element of F.\n // Output: (x, y), a point on E.\n return (u: T): { x: T; y: T } => {\n // prettier-ignore\n let tv1, tv2, tv3, tv4, tv5, tv6, x, y;\n tv1 = Fp.sqr(u); // 1. tv1 = u^2\n tv1 = Fp.mul(tv1, opts.Z); // 2. tv1 = Z * tv1\n tv2 = Fp.sqr(tv1); // 3. tv2 = tv1^2\n tv2 = Fp.add(tv2, tv1); // 4. tv2 = tv2 + tv1\n tv3 = Fp.add(tv2, Fp.ONE); // 5. tv3 = tv2 + 1\n tv3 = Fp.mul(tv3, opts.B); // 6. tv3 = B * tv3\n tv4 = Fp.cmov(opts.Z, Fp.neg(tv2), !Fp.eql(tv2, Fp.ZERO)); // 7. tv4 = CMOV(Z, -tv2, tv2 != 0)\n tv4 = Fp.mul(tv4, opts.A); // 8. tv4 = A * tv4\n tv2 = Fp.sqr(tv3); // 9. tv2 = tv3^2\n tv6 = Fp.sqr(tv4); // 10. tv6 = tv4^2\n tv5 = Fp.mul(tv6, opts.A); // 11. tv5 = A * tv6\n tv2 = Fp.add(tv2, tv5); // 12. tv2 = tv2 + tv5\n tv2 = Fp.mul(tv2, tv3); // 13. tv2 = tv2 * tv3\n tv6 = Fp.mul(tv6, tv4); // 14. tv6 = tv6 * tv4\n tv5 = Fp.mul(tv6, opts.B); // 15. tv5 = B * tv6\n tv2 = Fp.add(tv2, tv5); // 16. tv2 = tv2 + tv5\n x = Fp.mul(tv1, tv3); // 17. x = tv1 * tv3\n const { isValid, value } = sqrtRatio(tv2, tv6); // 18. (is_gx1_square, y1) = sqrt_ratio(tv2, tv6)\n y = Fp.mul(tv1, u); // 19. y = tv1 * u -> Z * u^3 * y1\n y = Fp.mul(y, value); // 20. y = y * y1\n x = Fp.cmov(x, tv3, isValid); // 21. x = CMOV(x, tv3, is_gx1_square)\n y = Fp.cmov(y, value, isValid); // 22. y = CMOV(y, y1, is_gx1_square)\n const e1 = Fp.isOdd!(u) === Fp.isOdd!(y); // 23. e1 = sgn0(u) == sgn0(y)\n y = Fp.cmov(Fp.neg(y), y, e1); // 24. y = CMOV(-y, y, e1)\n const tv4_inv = FpInvertBatch(Fp, [tv4], true)[0];\n x = Fp.mul(x, tv4_inv); // 25. x = x / tv4\n return { x, y };\n };\n}\n", "/**\n * Utilities for short weierstrass curves, combined with noble-hashes.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { hmac } from '@noble/hashes/hmac';\nimport { concatBytes, randomBytes } from '@noble/hashes/utils';\nimport type { CHash } from './abstract/utils.ts';\nimport { type CurveFn, type CurveType, weierstrass } from './abstract/weierstrass.ts';\n\n/** connects noble-curves to noble-hashes */\nexport function getHash(hash: CHash): {\n hash: CHash;\n hmac: (key: Uint8Array, ...msgs: Uint8Array[]) => Uint8Array;\n randomBytes: typeof randomBytes;\n} {\n return {\n hash,\n hmac: (key: Uint8Array, ...msgs: Uint8Array[]) => hmac(hash, key, concatBytes(...msgs)),\n randomBytes,\n };\n}\n/** Same API as @noble/hashes, with ability to create curve with custom hash */\nexport type CurveDef = Readonly>;\nexport type CurveFnWithCreate = CurveFn & { create: (hash: CHash) => CurveFn };\n\nexport function createCurve(curveDef: CurveDef, defHash: CHash): CurveFnWithCreate {\n const create = (hash: CHash): CurveFn => weierstrass({ ...curveDef, ...getHash(hash) });\n return { ...create(defHash), create };\n}\n", "/**\n * NIST secp256k1. See [pdf](https://www.secg.org/sec2-v2.pdf).\n *\n * Seems to be rigid (not backdoored)\n * [as per discussion](https://bitcointalk.org/index.php?topic=289795.msg3183975#msg3183975).\n *\n * secp256k1 belongs to Koblitz curves: it has efficiently computable endomorphism.\n * Endomorphism uses 2x less RAM, speeds up precomputation by 2x and ECDH / key recovery by 20%.\n * For precomputed wNAF it trades off 1/2 init time & 1/3 ram for 20% perf hit.\n * [See explanation](https://gist.github.com/paulmillr/eb670806793e84df628a7c434a873066).\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha256 } from '@noble/hashes/sha2';\nimport { randomBytes } from '@noble/hashes/utils';\nimport { createCurve, type CurveFnWithCreate } from './_shortw_utils.ts';\nimport { createHasher, type Hasher, type HTFMethod, isogenyMap } from './abstract/hash-to-curve.ts';\nimport { Field, mod, pow2 } from './abstract/modular.ts';\nimport type { Hex, PrivKey } from './abstract/utils.ts';\nimport {\n aInRange,\n bytesToNumberBE,\n concatBytes,\n ensureBytes,\n inRange,\n numberToBytesBE,\n} from './abstract/utils.ts';\nimport { mapToCurveSimpleSWU, type ProjPointType as PointType } from './abstract/weierstrass.ts';\n\nconst secp256k1P = BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f');\nconst secp256k1N = BigInt('0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141');\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst divNearest = (a: bigint, b: bigint) => (a + b / _2n) / b;\n\n/**\n * \u221An = n^((p+1)/4) for fields p = 3 mod 4. We unwrap the loop and multiply bit-by-bit.\n * (P+1n/4n).toString(2) would produce bits [223x 1, 0, 22x 1, 4x 0, 11, 00]\n */\nfunction sqrtMod(y: bigint): bigint {\n const P = secp256k1P;\n // prettier-ignore\n const _3n = BigInt(3), _6n = BigInt(6), _11n = BigInt(11), _22n = BigInt(22);\n // prettier-ignore\n const _23n = BigInt(23), _44n = BigInt(44), _88n = BigInt(88);\n const b2 = (y * y * y) % P; // x^3, 11\n const b3 = (b2 * b2 * y) % P; // x^7\n const b6 = (pow2(b3, _3n, P) * b3) % P;\n const b9 = (pow2(b6, _3n, P) * b3) % P;\n const b11 = (pow2(b9, _2n, P) * b2) % P;\n const b22 = (pow2(b11, _11n, P) * b11) % P;\n const b44 = (pow2(b22, _22n, P) * b22) % P;\n const b88 = (pow2(b44, _44n, P) * b44) % P;\n const b176 = (pow2(b88, _88n, P) * b88) % P;\n const b220 = (pow2(b176, _44n, P) * b44) % P;\n const b223 = (pow2(b220, _3n, P) * b3) % P;\n const t1 = (pow2(b223, _23n, P) * b22) % P;\n const t2 = (pow2(t1, _6n, P) * b2) % P;\n const root = pow2(t2, _2n, P);\n if (!Fpk1.eql(Fpk1.sqr(root), y)) throw new Error('Cannot find square root');\n return root;\n}\n\nconst Fpk1 = Field(secp256k1P, undefined, undefined, { sqrt: sqrtMod });\n\n/**\n * secp256k1 curve, ECDSA and ECDH methods.\n *\n * Field: `2n**256n - 2n**32n - 2n**9n - 2n**8n - 2n**7n - 2n**6n - 2n**4n - 1n`\n *\n * @example\n * ```js\n * import { secp256k1 } from '@noble/curves/secp256k1';\n * const priv = secp256k1.utils.randomPrivateKey();\n * const pub = secp256k1.getPublicKey(priv);\n * const msg = new Uint8Array(32).fill(1); // message hash (not message) in ecdsa\n * const sig = secp256k1.sign(msg, priv); // `{prehash: true}` option is available\n * const isValid = secp256k1.verify(sig, msg, pub) === true;\n * ```\n */\nexport const secp256k1: CurveFnWithCreate = createCurve(\n {\n a: _0n,\n b: BigInt(7),\n Fp: Fpk1,\n n: secp256k1N,\n Gx: BigInt('55066263022277343669578718895168534326250603453777594175500187360389116729240'),\n Gy: BigInt('32670510020758816978083085130507043184471273380659243275938904335757337482424'),\n h: BigInt(1),\n lowS: true, // Allow only low-S signatures by default in sign() and verify()\n endo: {\n // Endomorphism, see above\n beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'),\n splitScalar: (k: bigint) => {\n const n = secp256k1N;\n const a1 = BigInt('0x3086d221a7d46bcde86c90e49284eb15');\n const b1 = -_1n * BigInt('0xe4437ed6010e88286f547fa90abfe4c3');\n const a2 = BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8');\n const b2 = a1;\n const POW_2_128 = BigInt('0x100000000000000000000000000000000'); // (2n**128n).toString(16)\n\n const c1 = divNearest(b2 * k, n);\n const c2 = divNearest(-b1 * k, n);\n let k1 = mod(k - c1 * a1 - c2 * a2, n);\n let k2 = mod(-c1 * b1 - c2 * b2, n);\n const k1neg = k1 > POW_2_128;\n const k2neg = k2 > POW_2_128;\n if (k1neg) k1 = n - k1;\n if (k2neg) k2 = n - k2;\n if (k1 > POW_2_128 || k2 > POW_2_128) {\n throw new Error('splitScalar: Endomorphism failed, k=' + k);\n }\n return { k1neg, k1, k2neg, k2 };\n },\n },\n },\n sha256\n);\n\n// Schnorr signatures are superior to ECDSA from above. Below is Schnorr-specific BIP0340 code.\n// https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki\n/** An object mapping tags to their tagged hash prefix of [SHA256(tag) | SHA256(tag)] */\nconst TAGGED_HASH_PREFIXES: { [tag: string]: Uint8Array } = {};\nfunction taggedHash(tag: string, ...messages: Uint8Array[]): Uint8Array {\n let tagP = TAGGED_HASH_PREFIXES[tag];\n if (tagP === undefined) {\n const tagH = sha256(Uint8Array.from(tag, (c) => c.charCodeAt(0)));\n tagP = concatBytes(tagH, tagH);\n TAGGED_HASH_PREFIXES[tag] = tagP;\n }\n return sha256(concatBytes(tagP, ...messages));\n}\n\n// ECDSA compact points are 33-byte. Schnorr is 32: we strip first byte 0x02 or 0x03\nconst pointToBytes = (point: PointType) => point.toRawBytes(true).slice(1);\nconst numTo32b = (n: bigint) => numberToBytesBE(n, 32);\nconst modP = (x: bigint) => mod(x, secp256k1P);\nconst modN = (x: bigint) => mod(x, secp256k1N);\nconst Point = /* @__PURE__ */ (() => secp256k1.ProjectivePoint)();\nconst GmulAdd = (Q: PointType, a: bigint, b: bigint) =>\n Point.BASE.multiplyAndAddUnsafe(Q, a, b);\n\n// Calculate point, scalar and bytes\nfunction schnorrGetExtPubKey(priv: PrivKey) {\n let d_ = secp256k1.utils.normPrivateKeyToScalar(priv); // same method executed in fromPrivateKey\n let p = Point.fromPrivateKey(d_); // P = d'\u22C5G; 0 < d' < n check is done inside\n const scalar = p.hasEvenY() ? d_ : modN(-d_);\n return { scalar: scalar, bytes: pointToBytes(p) };\n}\n/**\n * lift_x from BIP340. Convert 32-byte x coordinate to elliptic curve point.\n * @returns valid point checked for being on-curve\n */\nfunction lift_x(x: bigint): PointType {\n aInRange('x', x, _1n, secp256k1P); // Fail if x \u2265 p.\n const xx = modP(x * x);\n const c = modP(xx * x + BigInt(7)); // Let c = x\u00B3 + 7 mod p.\n let y = sqrtMod(c); // Let y = c^(p+1)/4 mod p.\n if (y % _2n !== _0n) y = modP(-y); // Return the unique point P such that x(P) = x and\n const p = new Point(x, y, _1n); // y(P) = y if y mod 2 = 0 or y(P) = p-y otherwise.\n p.assertValidity();\n return p;\n}\nconst num = bytesToNumberBE;\n/**\n * Create tagged hash, convert it to bigint, reduce modulo-n.\n */\nfunction challenge(...args: Uint8Array[]): bigint {\n return modN(num(taggedHash('BIP0340/challenge', ...args)));\n}\n\n/**\n * Schnorr public key is just `x` coordinate of Point as per BIP340.\n */\nfunction schnorrGetPublicKey(privateKey: Hex): Uint8Array {\n return schnorrGetExtPubKey(privateKey).bytes; // d'=int(sk). Fail if d'=0 or d'\u2265n. Ret bytes(d'\u22C5G)\n}\n\n/**\n * Creates Schnorr signature as per BIP340. Verifies itself before returning anything.\n * auxRand is optional and is not the sole source of k generation: bad CSPRNG won't be dangerous.\n */\nfunction schnorrSign(\n message: Hex,\n privateKey: PrivKey,\n auxRand: Hex = randomBytes(32)\n): Uint8Array {\n const m = ensureBytes('message', message);\n const { bytes: px, scalar: d } = schnorrGetExtPubKey(privateKey); // checks for isWithinCurveOrder\n const a = ensureBytes('auxRand', auxRand, 32); // Auxiliary random data a: a 32-byte array\n const t = numTo32b(d ^ num(taggedHash('BIP0340/aux', a))); // Let t be the byte-wise xor of bytes(d) and hash/aux(a)\n const rand = taggedHash('BIP0340/nonce', t, px, m); // Let rand = hash/nonce(t || bytes(P) || m)\n const k_ = modN(num(rand)); // Let k' = int(rand) mod n\n if (k_ === _0n) throw new Error('sign failed: k is zero'); // Fail if k' = 0.\n const { bytes: rx, scalar: k } = schnorrGetExtPubKey(k_); // Let R = k'\u22C5G.\n const e = challenge(rx, px, m); // Let e = int(hash/challenge(bytes(R) || bytes(P) || m)) mod n.\n const sig = new Uint8Array(64); // Let sig = bytes(R) || bytes((k + ed) mod n).\n sig.set(rx, 0);\n sig.set(numTo32b(modN(k + e * d)), 32);\n // If Verify(bytes(P), m, sig) (see below) returns failure, abort\n if (!schnorrVerify(sig, m, px)) throw new Error('sign: Invalid signature produced');\n return sig;\n}\n\n/**\n * Verifies Schnorr signature.\n * Will swallow errors & return false except for initial type validation of arguments.\n */\nfunction schnorrVerify(signature: Hex, message: Hex, publicKey: Hex): boolean {\n const sig = ensureBytes('signature', signature, 64);\n const m = ensureBytes('message', message);\n const pub = ensureBytes('publicKey', publicKey, 32);\n try {\n const P = lift_x(num(pub)); // P = lift_x(int(pk)); fail if that fails\n const r = num(sig.subarray(0, 32)); // Let r = int(sig[0:32]); fail if r \u2265 p.\n if (!inRange(r, _1n, secp256k1P)) return false;\n const s = num(sig.subarray(32, 64)); // Let s = int(sig[32:64]); fail if s \u2265 n.\n if (!inRange(s, _1n, secp256k1N)) return false;\n const e = challenge(numTo32b(r), pointToBytes(P), m); // int(challenge(bytes(r)||bytes(P)||m))%n\n const R = GmulAdd(P, s, modN(-e)); // R = s\u22C5G - e\u22C5P\n if (!R || !R.hasEvenY() || R.toAffine().x !== r) return false; // -eP == (n-e)P\n return true; // Fail if is_infinite(R) / not has_even_y(R) / x(R) \u2260 r.\n } catch (error) {\n return false;\n }\n}\n\nexport type SecpSchnorr = {\n getPublicKey: typeof schnorrGetPublicKey;\n sign: typeof schnorrSign;\n verify: typeof schnorrVerify;\n utils: {\n randomPrivateKey: () => Uint8Array;\n lift_x: typeof lift_x;\n pointToBytes: (point: PointType) => Uint8Array;\n numberToBytesBE: typeof numberToBytesBE;\n bytesToNumberBE: typeof bytesToNumberBE;\n taggedHash: typeof taggedHash;\n mod: typeof mod;\n };\n};\n/**\n * Schnorr signatures over secp256k1.\n * https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki\n * @example\n * ```js\n * import { schnorr } from '@noble/curves/secp256k1';\n * const priv = schnorr.utils.randomPrivateKey();\n * const pub = schnorr.getPublicKey(priv);\n * const msg = new TextEncoder().encode('hello');\n * const sig = schnorr.sign(msg, priv);\n * const isValid = schnorr.verify(sig, msg, pub);\n * ```\n */\nexport const schnorr: SecpSchnorr = /* @__PURE__ */ (() => ({\n getPublicKey: schnorrGetPublicKey,\n sign: schnorrSign,\n verify: schnorrVerify,\n utils: {\n randomPrivateKey: secp256k1.utils.randomPrivateKey,\n lift_x,\n pointToBytes,\n numberToBytesBE,\n bytesToNumberBE,\n taggedHash,\n mod,\n },\n}))();\n\nconst isoMap = /* @__PURE__ */ (() =>\n isogenyMap(\n Fpk1,\n [\n // xNum\n [\n '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa8c7',\n '0x7d3d4c80bc321d5b9f315cea7fd44c5d595d2fc0bf63b92dfff1044f17c6581',\n '0x534c328d23f234e6e2a413deca25caece4506144037c40314ecbd0b53d9dd262',\n '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa88c',\n ],\n // xDen\n [\n '0xd35771193d94918a9ca34ccbb7b640dd86cd409542f8487d9fe6b745781eb49b',\n '0xedadc6f64383dc1df7c4b2d51b54225406d36b641f5e41bbc52a56612a8c6d14',\n '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n ],\n // yNum\n [\n '0x4bda12f684bda12f684bda12f684bda12f684bda12f684bda12f684b8e38e23c',\n '0xc75e0c32d5cb7c0fa9d0a54b12a0a6d5647ab046d686da6fdffc90fc201d71a3',\n '0x29a6194691f91a73715209ef6512e576722830a201be2018a765e85a9ecee931',\n '0x2f684bda12f684bda12f684bda12f684bda12f684bda12f684bda12f38e38d84',\n ],\n // yDen\n [\n '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffff93b',\n '0x7a06534bb8bdb49fd5e9e6632722c2989467c1bfc8e8d978dfb425d2685c2573',\n '0x6484aa716545ca2cf3a70c3fa8fe337e0a3d21162f0d6299a7bf8192bfd2a76f',\n '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n ],\n ].map((i) => i.map((j) => BigInt(j))) as [bigint[], bigint[], bigint[], bigint[]]\n ))();\nconst mapSWU = /* @__PURE__ */ (() =>\n mapToCurveSimpleSWU(Fpk1, {\n A: BigInt('0x3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533'),\n B: BigInt('1771'),\n Z: Fpk1.create(BigInt('-11')),\n }))();\n/** Hashing / encoding to secp256k1 points / field. RFC 9380 methods. */\nexport const secp256k1_hasher: Hasher = /* @__PURE__ */ (() =>\n createHasher(\n secp256k1.ProjectivePoint,\n (scalars: bigint[]) => {\n const { x, y } = mapSWU(Fpk1.create(scalars[0]));\n return isoMap(x, y);\n },\n {\n DST: 'secp256k1_XMD:SHA-256_SSWU_RO_',\n encodeDST: 'secp256k1_XMD:SHA-256_SSWU_NU_',\n p: Fpk1.ORDER,\n m: 1,\n k: 128,\n expand: 'xmd',\n hash: sha256,\n } as const\n ))();\n\nexport const hashToCurve: HTFMethod = /* @__PURE__ */ (() =>\n secp256k1_hasher.hashToCurve)();\n\nexport const encodeToCurve: HTFMethod = /* @__PURE__ */ (() =>\n secp256k1_hasher.encodeToCurve)();\n", "import { secp256k1 } from '@noble/curves/secp256k1'\nimport * as Bytes from './Bytes.js'\nimport * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport type { Compute, ExactPartial, OneOf } from './internal/types.js'\nimport * as Json from './Json.js'\nimport * as Solidity from './Solidity.js'\n\n/** Root type for an ECDSA signature. */\nexport type Signature<\n recovered extends boolean = true,\n bigintType = bigint,\n numberType = number,\n> = Compute<\n recovered extends true\n ? {\n r: bigintType\n s: bigintType\n yParity: numberType\n }\n : {\n r: bigintType\n s: bigintType\n yParity?: numberType | undefined\n }\n>\n\n/** RPC-formatted ECDSA signature. */\nexport type Rpc = Signature<\n recovered,\n Hex.Hex,\n Hex.Hex\n>\n\n/** (Legacy) ECDSA signature. */\nexport type Legacy = {\n r: bigintType\n s: bigintType\n v: numberType\n}\n\n/** RPC-formatted (Legacy) ECDSA signature. */\nexport type LegacyRpc = Legacy\n\nexport type Tuple = readonly [yParity: Hex.Hex, r: Hex.Hex, s: Hex.Hex]\n\n/**\n * Asserts that a Signature is valid.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * Signature.assert({\n * r: -49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * yParity: 1,\n * })\n * // @error: InvalidSignatureRError:\n * // @error: Value `-549...n` is an invalid r value.\n * // @error: r must be a positive integer less than 2^256.\n * ```\n *\n * @param signature - The signature object to assert.\n */\nexport function assert(\n signature: ExactPartial,\n options: assert.Options = {},\n): asserts signature is Signature {\n const { recovered } = options\n if (typeof signature.r === 'undefined')\n throw new MissingPropertiesError({ signature })\n if (typeof signature.s === 'undefined')\n throw new MissingPropertiesError({ signature })\n if (recovered && typeof signature.yParity === 'undefined')\n throw new MissingPropertiesError({ signature })\n if (signature.r < 0n || signature.r > Solidity.maxUint256)\n throw new InvalidRError({ value: signature.r })\n if (signature.s < 0n || signature.s > Solidity.maxUint256)\n throw new InvalidSError({ value: signature.s })\n if (\n typeof signature.yParity === 'number' &&\n signature.yParity !== 0 &&\n signature.yParity !== 1\n )\n throw new InvalidYParityError({ value: signature.yParity })\n}\n\nexport declare namespace assert {\n type Options = {\n /** Whether or not the signature should be recovered (contain `yParity`). */\n recovered?: boolean\n }\n\n type ErrorType =\n | MissingPropertiesError\n | InvalidRError\n | InvalidSError\n | InvalidYParityError\n | Errors.GlobalErrorType\n}\n\n/**\n * Deserializes a {@link ox#Bytes.Bytes} signature into a structured {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Signature } from 'ox'\n *\n * Signature.fromBytes(new Uint8Array([128, 3, 131, ...]))\n * // @log: { r: 5231...n, s: 3522...n, yParity: 0 }\n * ```\n *\n * @param signature - The serialized signature.\n * @returns The deserialized {@link ox#Signature.Signature}.\n */\nexport function fromBytes(signature: Bytes.Bytes): Signature {\n return fromHex(Hex.fromBytes(signature))\n}\n\nexport declare namespace fromBytes {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Deserializes a {@link ox#Hex.Hex} signature into a structured {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * Signature.fromHex('0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db81c')\n * // @log: { r: 5231...n, s: 3522...n, yParity: 0 }\n * ```\n *\n * @param serialized - The serialized signature.\n * @returns The deserialized {@link ox#Signature.Signature}.\n */\nexport function fromHex(signature: Hex.Hex): Signature {\n if (signature.length !== 130 && signature.length !== 132)\n throw new InvalidSerializedSizeError({ signature })\n\n const r = BigInt(Hex.slice(signature, 0, 32))\n const s = BigInt(Hex.slice(signature, 32, 64))\n\n const yParity = (() => {\n const yParity = Number(`0x${signature.slice(130)}`)\n if (Number.isNaN(yParity)) return undefined\n try {\n return vToYParity(yParity)\n } catch {\n throw new InvalidYParityError({ value: yParity })\n }\n })()\n\n if (typeof yParity === 'undefined')\n return {\n r,\n s,\n } as never\n return {\n r,\n s,\n yParity,\n } as never\n}\n\nexport declare namespace fromHex {\n type ErrorType =\n | Hex.from.ErrorType\n | InvalidSerializedSizeError\n | Errors.GlobalErrorType\n}\n\n/**\n * Extracts a {@link ox#Signature.Signature} from an arbitrary object that may include signature properties.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Signature } from 'ox'\n *\n * Signature.extract({\n * baz: 'barry',\n * foo: 'bar',\n * r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * yParity: 1,\n * zebra: 'stripes',\n * })\n * // @log: {\n * // @log: r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * // @log: s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * // @log: yParity: 1\n * // @log: }\n * ```\n *\n * @param value - The arbitrary object to extract the signature from.\n * @returns The extracted {@link ox#Signature.Signature}.\n */\nexport function extract(value: extract.Value): Signature | undefined {\n if (typeof value.r === 'undefined') return undefined\n if (typeof value.s === 'undefined') return undefined\n return from(value as any)\n}\n\nexport declare namespace extract {\n type Value = {\n r?: bigint | Hex.Hex | undefined\n s?: bigint | Hex.Hex | undefined\n yParity?: number | Hex.Hex | undefined\n v?: number | Hex.Hex | undefined\n }\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Instantiates a typed {@link ox#Signature.Signature} object from a {@link ox#Signature.Signature}, {@link ox#Signature.Legacy}, {@link ox#Bytes.Bytes}, or {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * Signature.from({\n * r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * yParity: 1,\n * })\n * // @log: {\n * // @log: r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * // @log: s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * // @log: yParity: 1\n * // @log: }\n * ```\n *\n * @example\n * ### From Serialized\n *\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * Signature.from('0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db801')\n * // @log: {\n * // @log: r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * // @log: s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * // @log: yParity: 1,\n * // @log: }\n * ```\n *\n * @example\n * ### From Legacy\n *\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * Signature.from({\n * r: 47323457007453657207889730243826965761922296599680473886588287015755652701072n,\n * s: 57228803202727131502949358313456071280488184270258293674242124340113824882788n,\n * v: 27,\n * })\n * // @log: {\n * // @log: r: 47323457007453657207889730243826965761922296599680473886588287015755652701072n,\n * // @log: s: 57228803202727131502949358313456071280488184270258293674242124340113824882788n,\n * // @log: yParity: 0\n * // @log: }\n * ```\n *\n * @param signature - The signature value to instantiate.\n * @returns The instantiated {@link ox#Signature.Signature}.\n */\nexport function from<\n const signature extends\n | OneOf | Rpc | Legacy | LegacyRpc>\n | Hex.Hex\n | Bytes.Bytes,\n>(\n signature:\n | signature\n | OneOf | Rpc | Legacy | LegacyRpc>\n | Hex.Hex\n | Bytes.Bytes,\n): from.ReturnType {\n const signature_ = (() => {\n if (typeof signature === 'string') return fromHex(signature)\n if (signature instanceof Uint8Array) return fromBytes(signature)\n if (typeof signature.r === 'string') return fromRpc(signature)\n if (signature.v) return fromLegacy(signature)\n return {\n r: signature.r,\n s: signature.s,\n ...(typeof signature.yParity !== 'undefined'\n ? { yParity: signature.yParity }\n : {}),\n }\n })()\n assert(signature_)\n return signature_ as never\n}\n\nexport declare namespace from {\n type ReturnType<\n signature extends\n | OneOf | Rpc | Legacy | LegacyRpc>\n | Hex.Hex\n | Bytes.Bytes,\n > = signature extends Signature & { v?: undefined }\n ? signature\n : Signature\n\n type ErrorType =\n | assert.ErrorType\n | fromBytes.ErrorType\n | fromHex.ErrorType\n | vToYParity.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Converts a DER-encoded signature to a {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Signature } from 'ox'\n *\n * const signature = Signature.fromDerBytes(new Uint8Array([132, 51, 23, ...]))\n * // @log: {\n * // @log: r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * // @log: s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * // @log: }\n * ```\n *\n * @param signature - The DER-encoded signature to convert.\n * @returns The {@link ox#Signature.Signature}.\n */\nexport function fromDerBytes(signature: Bytes.Bytes): Signature {\n return fromDerHex(Hex.fromBytes(signature))\n}\n\nexport declare namespace fromDerBytes {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a DER-encoded signature to a {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.fromDerHex('0x304402206e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf02204a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db8')\n * // @log: {\n * // @log: r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * // @log: s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * // @log: }\n * ```\n *\n * @param signature - The DER-encoded signature to convert.\n * @returns The {@link ox#Signature.Signature}.\n */\nexport function fromDerHex(signature: Hex.Hex): Signature {\n const { r, s } = secp256k1.Signature.fromDER(Hex.from(signature).slice(2))\n return { r, s }\n}\n\nexport declare namespace fromDerHex {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Signature.Legacy} into a {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const legacy = Signature.fromLegacy({ r: 1n, s: 2n, v: 28 })\n * // @log: { r: 1n, s: 2n, yParity: 1 }\n * ```\n *\n * @param signature - The {@link ox#Signature.Legacy} to convert.\n * @returns The converted {@link ox#Signature.Signature}.\n */\nexport function fromLegacy(signature: Legacy): Signature {\n return {\n r: signature.r,\n s: signature.s,\n yParity: vToYParity(signature.v),\n }\n}\n\nexport declare namespace fromLegacy {\n type ErrorType = vToYParity.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Signature.Rpc} into a {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.fromRpc({\n * r: '0x635dc2033e60185bb36709c29c75d64ea51dfbd91c32ef4be198e4ceb169fb4d',\n * s: '0x50c2667ac4c771072746acfdcf1f1483336dcca8bd2df47cd83175dbe60f0540',\n * yParity: '0x0',\n * })\n * ```\n *\n * @param signature - The {@link ox#Signature.Rpc} to convert.\n * @returns The converted {@link ox#Signature.Signature}.\n */\nexport function fromRpc(signature: {\n r: Hex.Hex\n s: Hex.Hex\n yParity?: Hex.Hex | undefined\n v?: Hex.Hex | undefined\n}): Signature {\n const yParity = (() => {\n const v = signature.v ? Number(signature.v) : undefined\n let yParity = signature.yParity ? Number(signature.yParity) : undefined\n if (typeof v === 'number' && typeof yParity !== 'number')\n yParity = vToYParity(v)\n if (typeof yParity !== 'number')\n throw new InvalidYParityError({ value: signature.yParity })\n return yParity\n })()\n\n return {\n r: BigInt(signature.r),\n s: BigInt(signature.s),\n yParity,\n }\n}\n\nexport declare namespace fromRpc {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Signature.Tuple} to a {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.fromTuple(['0x01', '0x7b', '0x1c8'])\n * // @log: {\n * // @log: r: 123n,\n * // @log: s: 456n,\n * // @log: yParity: 1,\n * // @log: }\n * ```\n *\n * @param tuple - The {@link ox#Signature.Tuple} to convert.\n * @returns The {@link ox#Signature.Signature}.\n */\nexport function fromTuple(tuple: Tuple): Signature {\n const [yParity, r, s] = tuple\n return from({\n r: r === '0x' ? 0n : BigInt(r),\n s: s === '0x' ? 0n : BigInt(s),\n yParity: yParity === '0x' ? 0 : Number(yParity),\n })\n}\n\nexport declare namespace fromTuple {\n type ErrorType = from.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Serializes a {@link ox#Signature.Signature} to {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.toBytes({\n * r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * yParity: 1\n * })\n * // @log: Uint8Array [102, 16, 10, ...]\n * ```\n *\n * @param signature - The signature to serialize.\n * @returns The serialized signature.\n */\nexport function toBytes(signature: Signature): Bytes.Bytes {\n return Bytes.fromHex(toHex(signature))\n}\n\nexport declare namespace toBytes {\n type ErrorType =\n | toHex.ErrorType\n | Bytes.fromHex.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Serializes a {@link ox#Signature.Signature} to {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.toHex({\n * r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * yParity: 1\n * })\n * // @log: '0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db81c'\n * ```\n *\n * @param signature - The signature to serialize.\n * @returns The serialized signature.\n */\nexport function toHex(signature: Signature): Hex.Hex {\n assert(signature)\n\n const r = signature.r\n const s = signature.s\n\n const signature_ = Hex.concat(\n Hex.fromNumber(r, { size: 32 }),\n Hex.fromNumber(s, { size: 32 }),\n // If the signature is recovered, add the recovery byte to the signature.\n typeof signature.yParity === 'number'\n ? Hex.fromNumber(yParityToV(signature.yParity), { size: 1 })\n : '0x',\n )\n\n return signature_\n}\n\nexport declare namespace toHex {\n type ErrorType =\n | Hex.concat.ErrorType\n | Hex.fromNumber.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Signature.Signature} to DER-encoded format.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.from({\n * r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * })\n *\n * const signature_der = Signature.toDerBytes(signature)\n * // @log: Uint8Array [132, 51, 23, ...]\n * ```\n *\n * @param signature - The signature to convert.\n * @returns The DER-encoded signature.\n */\nexport function toDerBytes(signature: Signature): Bytes.Bytes {\n const sig = new secp256k1.Signature(signature.r, signature.s)\n return sig.toDERRawBytes()\n}\n\nexport declare namespace toDerBytes {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Signature.Signature} to DER-encoded format.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.from({\n * r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * })\n *\n * const signature_der = Signature.toDerHex(signature)\n * // @log: '0x304402206e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf02204a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db8'\n * ```\n *\n * @param signature - The signature to convert.\n * @returns The DER-encoded signature.\n */\nexport function toDerHex(signature: Signature): Hex.Hex {\n const sig = new secp256k1.Signature(signature.r, signature.s)\n return `0x${sig.toDERHex()}`\n}\n\nexport declare namespace toDerHex {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Signature.Signature} into a {@link ox#Signature.Legacy}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const legacy = Signature.toLegacy({ r: 1n, s: 2n, yParity: 1 })\n * // @log: { r: 1n, s: 2n, v: 28 }\n * ```\n *\n * @param signature - The {@link ox#Signature.Signature} to convert.\n * @returns The converted {@link ox#Signature.Legacy}.\n */\nexport function toLegacy(signature: Signature): Legacy {\n return {\n r: signature.r,\n s: signature.s,\n v: yParityToV(signature.yParity),\n }\n}\n\nexport declare namespace toLegacy {\n type ErrorType = yParityToV.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Signature.Signature} into a {@link ox#Signature.Rpc}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.toRpc({\n * r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * yParity: 1\n * })\n * ```\n *\n * @param signature - The {@link ox#Signature.Signature} to convert.\n * @returns The converted {@link ox#Signature.Rpc}.\n */\nexport function toRpc(signature: Signature): Rpc {\n const { r, s, yParity } = signature\n return {\n r: Hex.fromNumber(r, { size: 32 }),\n s: Hex.fromNumber(s, { size: 32 }),\n yParity: yParity === 0 ? '0x0' : '0x1',\n }\n}\n\nexport declare namespace toRpc {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Signature.Signature} to a serialized {@link ox#Signature.Tuple} to be used for signatures in Transaction Envelopes, EIP-7702 Authorization Lists, etc.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signatureTuple = Signature.toTuple({\n * r: 123n,\n * s: 456n,\n * yParity: 1,\n * })\n * // @log: [yParity: '0x01', r: '0x7b', s: '0x1c8']\n * ```\n *\n * @param signature - The {@link ox#Signature.Signature} to convert.\n * @returns The {@link ox#Signature.Tuple}.\n */\nexport function toTuple(signature: Signature): Tuple {\n const { r, s, yParity } = signature\n\n return [\n yParity ? '0x01' : '0x',\n r === 0n ? '0x' : Hex.trimLeft(Hex.fromNumber(r!)),\n s === 0n ? '0x' : Hex.trimLeft(Hex.fromNumber(s!)),\n ] as const\n}\n\nexport declare namespace toTuple {\n type ErrorType =\n | Hex.trimLeft.ErrorType\n | Hex.fromNumber.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Validates a Signature. Returns `true` if the signature is valid, `false` otherwise.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const valid = Signature.validate({\n * r: -49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * yParity: 1,\n * })\n * // @log: false\n * ```\n *\n * @param signature - The signature object to assert.\n */\nexport function validate(\n signature: ExactPartial,\n options: validate.Options = {},\n): boolean {\n try {\n assert(signature, options)\n return true\n } catch {\n return false\n }\n}\n\nexport declare namespace validate {\n type Options = {\n /** Whether or not the signature should be recovered (contain `yParity`). */\n recovered?: boolean\n }\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a ECDSA `v` value to a `yParity` value.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const yParity = Signature.vToYParity(28)\n * // @log: 1\n * ```\n *\n * @param v - The ECDSA `v` value to convert.\n * @returns The `yParity` value.\n */\nexport function vToYParity(v: number): Signature['yParity'] {\n if (v === 0 || v === 27) return 0\n if (v === 1 || v === 28) return 1\n if (v >= 35) return v % 2 === 0 ? 1 : 0\n throw new InvalidVError({ value: v })\n}\n\nexport declare namespace vToYParity {\n type ErrorType = InvalidVError | Errors.GlobalErrorType\n}\n\n/**\n * Converts a ECDSA `v` value to a `yParity` value.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const v = Signature.yParityToV(1)\n * // @log: 28\n * ```\n *\n * @param yParity - The ECDSA `yParity` value to convert.\n * @returns The `v` value.\n */\nexport function yParityToV(yParity: number): number {\n if (yParity === 0) return 27\n if (yParity === 1) return 28\n throw new InvalidYParityError({ value: yParity })\n}\n\nexport declare namespace yParityToV {\n type ErrorType = InvalidVError | Errors.GlobalErrorType\n}\n\n/** Thrown when the serialized signature is of an invalid size. */\nexport class InvalidSerializedSizeError extends Errors.BaseError {\n override readonly name = 'Signature.InvalidSerializedSizeError'\n\n constructor({ signature }: { signature: Hex.Hex | Bytes.Bytes }) {\n super(`Value \\`${signature}\\` is an invalid signature size.`, {\n metaMessages: [\n 'Expected: 64 bytes or 65 bytes.',\n `Received ${Hex.size(Hex.from(signature))} bytes.`,\n ],\n })\n }\n}\n\n/** Thrown when the signature is missing either an `r`, `s`, or `yParity` property. */\nexport class MissingPropertiesError extends Errors.BaseError {\n override readonly name = 'Signature.MissingPropertiesError'\n\n constructor({ signature }: { signature: unknown }) {\n super(\n `Signature \\`${Json.stringify(signature)}\\` is missing either an \\`r\\`, \\`s\\`, or \\`yParity\\` property.`,\n )\n }\n}\n\n/** Thrown when the signature has an invalid `r` value. */\nexport class InvalidRError extends Errors.BaseError {\n override readonly name = 'Signature.InvalidRError'\n\n constructor({ value }: { value: unknown }) {\n super(\n `Value \\`${value}\\` is an invalid r value. r must be a positive integer less than 2^256.`,\n )\n }\n}\n\n/** Thrown when the signature has an invalid `s` value. */\nexport class InvalidSError extends Errors.BaseError {\n override readonly name = 'Signature.InvalidSError'\n\n constructor({ value }: { value: unknown }) {\n super(\n `Value \\`${value}\\` is an invalid s value. s must be a positive integer less than 2^256.`,\n )\n }\n}\n\n/** Thrown when the signature has an invalid `yParity` value. */\nexport class InvalidYParityError extends Errors.BaseError {\n override readonly name = 'Signature.InvalidYParityError'\n\n constructor({ value }: { value: unknown }) {\n super(\n `Value \\`${value}\\` is an invalid y-parity value. Y-parity must be 0 or 1.`,\n )\n }\n}\n\n/** Thrown when the signature has an invalid `v` value. */\nexport class InvalidVError extends Errors.BaseError {\n override readonly name = 'Signature.InvalidVError'\n\n constructor({ value }: { value: number }) {\n super(`Value \\`${value}\\` is an invalid v value. v must be 27, 28 or >=35.`)\n }\n}\n", "import { secp256k1 } from '@noble/curves/secp256k1'\nimport * as Address from './Address.js'\nimport * as Bytes from './Bytes.js'\nimport type * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport * as Entropy from './internal/entropy.js'\nimport type { OneOf } from './internal/types.js'\nimport * as PublicKey from './PublicKey.js'\nimport type * as Signature from './Signature.js'\n\n/** Re-export of noble/curves secp256k1 utilities. */\nexport const noble = secp256k1\n\n/**\n * Creates a new secp256k1 ECDSA key pair consisting of a private key and its corresponding public key.\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const { privateKey, publicKey } = Secp256k1.createKeyPair()\n * ```\n *\n * @param options - The options to generate the key pair.\n * @returns The generated key pair containing both private and public keys.\n */\nexport function createKeyPair(\n options: createKeyPair.Options = {},\n): createKeyPair.ReturnType {\n const { as = 'Hex' } = options\n const privateKey = randomPrivateKey({ as })\n const publicKey = getPublicKey({ privateKey })\n\n return {\n privateKey: privateKey as never,\n publicKey,\n }\n}\n\nexport declare namespace createKeyPair {\n type Options = {\n /**\n * Format of the returned private key.\n * @default 'Hex'\n */\n as?: as | 'Hex' | 'Bytes' | undefined\n }\n\n type ReturnType = {\n privateKey:\n | (as extends 'Bytes' ? Bytes.Bytes : never)\n | (as extends 'Hex' ? Hex.Hex : never)\n publicKey: PublicKey.PublicKey\n }\n\n type ErrorType =\n | Hex.fromBytes.ErrorType\n | PublicKey.from.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Computes the secp256k1 ECDSA public key from a provided private key.\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const publicKey = Secp256k1.getPublicKey({ privateKey: '0x...' })\n * ```\n *\n * @param options - The options to compute the public key.\n * @returns The computed public key.\n */\nexport function getPublicKey(\n options: getPublicKey.Options,\n): PublicKey.PublicKey {\n const { privateKey } = options\n const point = secp256k1.ProjectivePoint.fromPrivateKey(\n Hex.from(privateKey).slice(2),\n )\n return PublicKey.from(point)\n}\n\nexport declare namespace getPublicKey {\n type Options = {\n /**\n * Private key to compute the public key from.\n */\n privateKey: Hex.Hex | Bytes.Bytes\n }\n\n type ErrorType =\n | Hex.from.ErrorType\n | PublicKey.from.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Computes a shared secret using ECDH (Elliptic Curve Diffie-Hellman) between a private key and a public key.\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const { privateKey: privateKeyA } = Secp256k1.createKeyPair()\n * const { publicKey: publicKeyB } = Secp256k1.createKeyPair()\n *\n * const sharedSecret = Secp256k1.getSharedSecret({\n * privateKey: privateKeyA,\n * publicKey: publicKeyB\n * })\n * ```\n *\n * @param options - The options to compute the shared secret.\n * @returns The computed shared secret.\n */\nexport function getSharedSecret(\n options: getSharedSecret.Options,\n): getSharedSecret.ReturnType {\n const { as = 'Hex', privateKey, publicKey } = options\n const point = secp256k1.ProjectivePoint.fromHex(\n PublicKey.toHex(publicKey).slice(2),\n )\n const sharedPoint = point.multiply(\n secp256k1.utils.normPrivateKeyToScalar(Hex.from(privateKey).slice(2)),\n )\n const sharedSecret = sharedPoint.toRawBytes(true) // compressed format\n if (as === 'Hex') return Hex.fromBytes(sharedSecret) as never\n return sharedSecret as never\n}\n\nexport declare namespace getSharedSecret {\n type Options = {\n /**\n * Format of the returned shared secret.\n * @default 'Hex'\n */\n as?: as | 'Hex' | 'Bytes' | undefined\n /**\n * Private key to use for the shared secret computation.\n */\n privateKey: Hex.Hex | Bytes.Bytes\n /**\n * Public key to use for the shared secret computation.\n */\n publicKey: PublicKey.PublicKey\n }\n\n type ReturnType =\n | (as extends 'Bytes' ? Bytes.Bytes : never)\n | (as extends 'Hex' ? Hex.Hex : never)\n\n type ErrorType =\n | Hex.from.ErrorType\n | PublicKey.toHex.ErrorType\n | Hex.fromBytes.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Generates a random ECDSA private key on the secp256k1 curve.\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const privateKey = Secp256k1.randomPrivateKey()\n * ```\n *\n * @param options - The options to generate the private key.\n * @returns The generated private key.\n */\nexport function randomPrivateKey(\n options: randomPrivateKey.Options = {},\n): randomPrivateKey.ReturnType {\n const { as = 'Hex' } = options\n const bytes = secp256k1.utils.randomPrivateKey()\n if (as === 'Hex') return Hex.fromBytes(bytes) as never\n return bytes as never\n}\n\nexport declare namespace randomPrivateKey {\n type Options = {\n /**\n * Format of the returned private key.\n * @default 'Hex'\n */\n as?: as | 'Hex' | 'Bytes' | undefined\n }\n\n type ReturnType =\n | (as extends 'Bytes' ? Bytes.Bytes : never)\n | (as extends 'Hex' ? Hex.Hex : never)\n\n type ErrorType = Hex.fromBytes.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Recovers the signing address from the signed payload and signature.\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const signature = Secp256k1.sign({ payload: '0xdeadbeef', privateKey: '0x...' })\n *\n * const address = Secp256k1.recoverAddress({ // [!code focus]\n * payload: '0xdeadbeef', // [!code focus]\n * signature, // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param options - The recovery options.\n * @returns The recovered address.\n */\nexport function recoverAddress(\n options: recoverAddress.Options,\n): recoverAddress.ReturnType {\n return Address.fromPublicKey(recoverPublicKey(options))\n}\n\nexport declare namespace recoverAddress {\n type Options = {\n /** Payload that was signed. */\n payload: Hex.Hex | Bytes.Bytes\n /** Signature of the payload. */\n signature: Signature.Signature\n }\n\n type ReturnType = Address.Address\n\n type ErrorType =\n | Address.fromPublicKey.ErrorType\n | recoverPublicKey.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Recovers the signing public key from the signed payload and signature.\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const signature = Secp256k1.sign({ payload: '0xdeadbeef', privateKey: '0x...' })\n *\n * const publicKey = Secp256k1.recoverPublicKey({ // [!code focus]\n * payload: '0xdeadbeef', // [!code focus]\n * signature, // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param options - The recovery options.\n * @returns The recovered public key.\n */\nexport function recoverPublicKey(\n options: recoverPublicKey.Options,\n): PublicKey.PublicKey {\n const { payload, signature } = options\n const { r, s, yParity } = signature\n const signature_ = new secp256k1.Signature(\n BigInt(r),\n BigInt(s),\n ).addRecoveryBit(yParity)\n const point = signature_.recoverPublicKey(Hex.from(payload).substring(2))\n return PublicKey.from(point)\n}\n\nexport declare namespace recoverPublicKey {\n type Options = {\n /** Payload that was signed. */\n payload: Hex.Hex | Bytes.Bytes\n /** Signature of the payload. */\n signature: Signature.Signature\n }\n\n type ErrorType =\n | PublicKey.from.ErrorType\n | Hex.from.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Signs the payload with the provided private key.\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const signature = Secp256k1.sign({ // [!code focus]\n * payload: '0xdeadbeef', // [!code focus]\n * privateKey: '0x...' // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param options - The signing options.\n * @returns The ECDSA {@link ox#Signature.Signature}.\n */\nexport function sign(options: sign.Options): Signature.Signature {\n const {\n extraEntropy = Entropy.extraEntropy,\n hash,\n payload,\n privateKey,\n } = options\n const { r, s, recovery } = secp256k1.sign(\n Bytes.from(payload),\n Bytes.from(privateKey),\n {\n extraEntropy:\n typeof extraEntropy === 'boolean'\n ? extraEntropy\n : Hex.from(extraEntropy).slice(2),\n lowS: true,\n ...(hash ? { prehash: true } : {}),\n },\n )\n return {\n r,\n s,\n yParity: recovery,\n }\n}\n\nexport declare namespace sign {\n type Options = {\n /**\n * Extra entropy to add to the signing process. Setting to `false` will disable it.\n * @default true\n */\n extraEntropy?: boolean | Hex.Hex | Bytes.Bytes | undefined\n /**\n * If set to `true`, the payload will be hashed (sha256) before being signed.\n */\n hash?: boolean | undefined\n /**\n * Payload to sign.\n */\n payload: Hex.Hex | Bytes.Bytes\n /**\n * ECDSA private key.\n */\n privateKey: Hex.Hex | Bytes.Bytes\n }\n\n type ErrorType = Bytes.from.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Verifies a payload was signed by the provided address.\n *\n * @example\n * ### Verify with Ethereum Address\n *\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const signature = Secp256k1.sign({ payload: '0xdeadbeef', privateKey: '0x...' })\n *\n * const verified = Secp256k1.verify({ // [!code focus]\n * address: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266', // [!code focus]\n * payload: '0xdeadbeef', // [!code focus]\n * signature, // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @example\n * ### Verify with Public Key\n *\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const privateKey = '0x...'\n * const publicKey = Secp256k1.getPublicKey({ privateKey })\n * const signature = Secp256k1.sign({ payload: '0xdeadbeef', privateKey })\n *\n * const verified = Secp256k1.verify({ // [!code focus]\n * publicKey, // [!code focus]\n * payload: '0xdeadbeef', // [!code focus]\n * signature, // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param options - The verification options.\n * @returns Whether the payload was signed by the provided address.\n */\nexport function verify(options: verify.Options): boolean {\n const { address, hash, payload, publicKey, signature } = options\n if (address)\n return Address.isEqual(address, recoverAddress({ payload, signature }))\n return secp256k1.verify(\n signature,\n Bytes.from(payload),\n PublicKey.toBytes(publicKey),\n ...(hash ? [{ prehash: true, lowS: true }] : []),\n )\n}\n\nexport declare namespace verify {\n type Options = {\n /** If set to `true`, the payload will be hashed (sha256) before being verified. */\n hash?: boolean | undefined\n /** Payload that was signed. */\n payload: Hex.Hex | Bytes.Bytes\n } & OneOf<\n | {\n /** Address that signed the payload. */\n address: Address.Address\n /** Signature of the payload. */\n signature: Signature.Signature\n }\n | {\n /** Public key that signed the payload. */\n publicKey: PublicKey.PublicKey\n /** Signature of the payload. */\n signature: Signature.Signature\n }\n >\n\n type ErrorType = Errors.GlobalErrorType\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Proof } from '../../types/proof.js'\nimport type { RpcProof } from '../../types/rpc.js'\nimport type { ExactPartial } from '../../types/utils.js'\nimport { hexToNumber } from '../index.js'\n\nexport type FormatProofErrorType = ErrorType\n\nfunction formatStorageProof(storageProof: RpcProof['storageProof']) {\n return storageProof.map((proof) => ({\n ...proof,\n value: BigInt(proof.value),\n }))\n}\n\nexport function formatProof(proof: ExactPartial) {\n return {\n ...proof,\n balance: proof.balance ? BigInt(proof.balance) : undefined,\n nonce: proof.nonce ? hexToNumber(proof.nonce) : undefined,\n storageProof: proof.storageProof\n ? formatStorageProof(proof.storageProof)\n : undefined,\n } as Proof\n}\n", "import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type NumberToHexErrorType,\n numberToHex,\n} from '../../utils/encoding/toHex.js'\n\nexport type GetStorageAtParameters = {\n address: Address\n slot: Hex\n} & (\n | {\n blockNumber?: undefined\n blockTag?: BlockTag | undefined\n }\n | {\n blockNumber?: bigint | undefined\n blockTag?: undefined\n }\n)\n\nexport type GetStorageAtReturnType = Hex | undefined\n\nexport type GetStorageAtErrorType =\n | NumberToHexErrorType\n | RequestErrorType\n | ErrorType\n\n/**\n * Returns the value from a storage slot at a given address.\n *\n * - Docs: https://viem.sh/docs/contract/getStorageAt\n * - JSON-RPC Methods: [`eth_getStorageAt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getstorageat)\n *\n * @param client - Client to use\n * @param parameters - {@link GetStorageAtParameters}\n * @returns The value of the storage slot. {@link GetStorageAtReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getStorageAt } from 'viem/contract'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const code = await getStorageAt(client, {\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * slot: toHex(0),\n * })\n */\nexport async function getStorageAt(\n client: Client,\n { address, blockNumber, blockTag = 'latest', slot }: GetStorageAtParameters,\n): Promise {\n const blockNumberHex =\n blockNumber !== undefined ? numberToHex(blockNumber) : undefined\n const data = await client.request({\n method: 'eth_getStorageAt',\n params: [address, slot, blockNumberHex || blockTag],\n })\n return data\n}\n", "import type { Address } from '../../accounts/index.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n TransactionNotFoundError,\n type TransactionNotFoundErrorType,\n} from '../../errors/transaction.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { RpcTransaction } from '../../types/rpc.js'\nimport type { OneOf, Prettify } from '../../types/utils.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type NumberToHexErrorType,\n numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport {\n type FormattedTransaction,\n formatTransaction,\n} from '../../utils/formatters/transaction.js'\n\nexport type GetTransactionParameters =\n OneOf<\n // eth_getTransactionByBlockHashAndIndex\n | {\n /** The block hash */\n blockHash: Hash\n /** The index of the transaction on the block. */\n index: number\n }\n // eth_getTransactionByBlockNumberAndIndex\n | {\n /** The block number */\n blockNumber: bigint\n /** The index of the transaction on the block. */\n index: number\n }\n // eth_getTransactionByBlockNumberAndIndex\n | {\n /** The block tag. */\n blockTag: blockTag | BlockTag\n /** The index of the transaction on the block. */\n index: number\n }\n // eth_getTransactionByHash\n | {\n /** The hash of the transaction. */\n hash: Hash\n }\n // eth_getTransactionBySenderAndNonce\n | {\n /** The sender of the transaction. */\n sender: Address\n /** The nonce of the transaction on the sender. */\n nonce: number\n }\n >\n\nexport type GetTransactionReturnType<\n chain extends Chain | undefined = undefined,\n blockTag extends BlockTag = 'latest',\n> = Prettify>\n\nexport type GetTransactionErrorType =\n | TransactionNotFoundErrorType\n | NumberToHexErrorType\n | RequestErrorType\n | ErrorType\n\n/**\n * Returns information about a [Transaction](https://viem.sh/docs/glossary/terms#transaction) given a hash or block identifier.\n *\n * - Docs: https://viem.sh/docs/actions/public/getTransaction\n * - Example: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_fetching-transactions\n * - JSON-RPC Methods: [`eth_getTransactionByHash`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionByHash)\n *\n * @param client - Client to use\n * @param parameters - {@link GetTransactionParameters}\n * @returns The transaction information. {@link GetTransactionReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getTransaction } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const transaction = await getTransaction(client, {\n * hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',\n * })\n */\nexport async function getTransaction<\n chain extends Chain | undefined,\n blockTag extends BlockTag = 'latest',\n>(\n client: Client,\n {\n blockHash,\n blockNumber,\n blockTag: blockTag_,\n hash,\n index,\n sender,\n nonce,\n }: GetTransactionParameters,\n): Promise> {\n const blockTag = blockTag_ || 'latest'\n\n const blockNumberHex =\n blockNumber !== undefined ? numberToHex(blockNumber) : undefined\n\n let transaction: RpcTransaction | null = null\n if (hash) {\n transaction = await client.request(\n {\n method: 'eth_getTransactionByHash',\n params: [hash],\n },\n { dedupe: true },\n )\n } else if (blockHash) {\n transaction = await client.request(\n {\n method: 'eth_getTransactionByBlockHashAndIndex',\n params: [blockHash, numberToHex(index)],\n },\n { dedupe: true },\n )\n } else if ((blockNumberHex || blockTag) && typeof index === 'number') {\n transaction = await client.request(\n {\n method: 'eth_getTransactionByBlockNumberAndIndex',\n params: [blockNumberHex || blockTag, numberToHex(index)],\n },\n { dedupe: Boolean(blockNumberHex) },\n )\n } else if (sender && typeof nonce === 'number') {\n transaction = await client.request(\n {\n method: 'eth_getTransactionBySenderAndNonce',\n params: [sender, numberToHex(nonce)],\n },\n { dedupe: true },\n )\n }\n\n if (!transaction)\n throw new TransactionNotFoundError({\n blockHash,\n blockNumber,\n blockTag,\n hash,\n index,\n })\n\n const format =\n client.chain?.formatters?.transaction?.format || formatTransaction\n return format(transaction, 'getTransaction')\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { FormattedTransactionReceipt } from '../../utils/formatters/transactionReceipt.js'\nimport { getAction } from '../../utils/getAction.js'\n\nimport {\n type GetBlockNumberErrorType,\n getBlockNumber,\n} from './getBlockNumber.js'\nimport {\n type GetTransactionErrorType,\n getTransaction,\n} from './getTransaction.js'\n\nexport type GetTransactionConfirmationsParameters<\n chain extends Chain | undefined = Chain,\n> =\n | {\n /** The transaction hash. */\n hash: Hash\n transactionReceipt?: undefined\n }\n | {\n hash?: undefined\n /** The transaction receipt. */\n transactionReceipt: FormattedTransactionReceipt\n }\n\nexport type GetTransactionConfirmationsReturnType = bigint\n\nexport type GetTransactionConfirmationsErrorType =\n | GetBlockNumberErrorType\n | GetTransactionErrorType\n | ErrorType\n\n/**\n * Returns the number of blocks passed (confirmations) since the transaction was processed on a block.\n *\n * - Docs: https://viem.sh/docs/actions/public/getTransactionConfirmations\n * - Example: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_fetching-transactions\n * - JSON-RPC Methods: [`eth_getTransactionConfirmations`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionConfirmations)\n *\n * @param client - Client to use\n * @param parameters - {@link GetTransactionConfirmationsParameters}\n * @returns The number of blocks passed since the transaction was processed. If confirmations is 0, then the Transaction has not been confirmed & processed yet. {@link GetTransactionConfirmationsReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getTransactionConfirmations } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const confirmations = await getTransactionConfirmations(client, {\n * hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',\n * })\n */\nexport async function getTransactionConfirmations<\n chain extends Chain | undefined,\n>(\n client: Client,\n { hash, transactionReceipt }: GetTransactionConfirmationsParameters,\n): Promise {\n const [blockNumber, transaction] = await Promise.all([\n getAction(client, getBlockNumber, 'getBlockNumber')({}),\n hash\n ? getAction(client, getTransaction, 'getTransaction')({ hash })\n : undefined,\n ])\n const transactionBlockNumber =\n transactionReceipt?.blockNumber || transaction?.blockNumber\n if (!transactionBlockNumber) return 0n\n return blockNumber - transactionBlockNumber! + 1n\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n TransactionReceiptNotFoundError,\n type TransactionReceiptNotFoundErrorType,\n} from '../../errors/transaction.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type FormattedTransactionReceipt,\n formatTransactionReceipt,\n} from '../../utils/formatters/transactionReceipt.js'\n\nexport type GetTransactionReceiptParameters = {\n /** The hash of the transaction. */\n hash: Hash\n}\n\nexport type GetTransactionReceiptReturnType<\n chain extends Chain | undefined = undefined,\n> = FormattedTransactionReceipt\n\nexport type GetTransactionReceiptErrorType =\n | RequestErrorType\n | TransactionReceiptNotFoundErrorType\n | ErrorType\n\n/**\n * Returns the [Transaction Receipt](https://viem.sh/docs/glossary/terms#transaction-receipt) given a [Transaction](https://viem.sh/docs/glossary/terms#transaction) hash.\n *\n * - Docs: https://viem.sh/docs/actions/public/getTransactionReceipt\n * - Example: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_fetching-transactions\n * - JSON-RPC Methods: [`eth_getTransactionReceipt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_gettransactionreceipt)\n *\n * @param client - Client to use\n * @param parameters - {@link GetTransactionReceiptParameters}\n * @returns The transaction receipt. {@link GetTransactionReceiptReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getTransactionReceipt } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const transactionReceipt = await getTransactionReceipt(client, {\n * hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',\n * })\n */\nexport async function getTransactionReceipt(\n client: Client,\n { hash }: GetTransactionReceiptParameters,\n) {\n const receipt = await client.request(\n {\n method: 'eth_getTransactionReceipt',\n params: [hash],\n },\n { dedupe: true },\n )\n\n if (!receipt) throw new TransactionReceiptNotFoundError({ hash })\n\n const format =\n client.chain?.formatters?.transactionReceipt?.format ||\n formatTransactionReceipt\n return format(\n receipt,\n 'getTransactionReceipt',\n ) as GetTransactionReceiptReturnType\n}\n", "import type { AbiStateMutability, Address, Narrow } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { multicall3Abi } from '../../constants/abis.js'\nimport { multicall3Bytecode } from '../../constants/contracts.js'\nimport { AbiDecodingZeroDataError } from '../../errors/abi.js'\nimport { BaseError } from '../../errors/base.js'\nimport { RawContractError } from '../../errors/contract.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { ContractFunctionParameters } from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type {\n MulticallContracts,\n MulticallResults,\n} from '../../types/multicall.js'\nimport {\n type DecodeFunctionResultErrorType,\n decodeFunctionResult,\n} from '../../utils/abi/decodeFunctionResult.js'\nimport {\n type EncodeFunctionDataErrorType,\n encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport {\n type GetChainContractAddressErrorType,\n getChainContractAddress,\n} from '../../utils/chain/getChainContractAddress.js'\nimport {\n type GetContractErrorReturnType,\n getContractError,\n} from '../../utils/errors/getContractError.js'\nimport { getAction } from '../../utils/getAction.js'\nimport type { CallParameters } from './call.js'\nimport { type ReadContractErrorType, readContract } from './readContract.js'\n\nexport type MulticallParameters<\n contracts extends readonly unknown[] = readonly ContractFunctionParameters[],\n allowFailure extends boolean = true,\n options extends {\n optional?: boolean\n properties?: Record\n } = {},\n> = Pick<\n CallParameters,\n | 'authorizationList'\n | 'blockNumber'\n | 'blockOverrides'\n | 'blockTag'\n | 'stateOverride'\n> & {\n /** The account to use for the multicall. */\n account?: Address | undefined\n /** Whether to allow failures. */\n allowFailure?: allowFailure | boolean | undefined\n /** The size of each batch of calls. */\n batchSize?: number | undefined\n /** Enable deployless multicall. */\n deployless?: boolean | undefined\n /** The contracts to call. */\n contracts: MulticallContracts<\n Narrow,\n { mutability: AbiStateMutability } & options\n >\n /** The address of the multicall3 contract to use. */\n multicallAddress?: Address | undefined\n}\n\nexport type MulticallReturnType<\n contracts extends readonly unknown[] = readonly ContractFunctionParameters[],\n allowFailure extends boolean = true,\n options extends {\n error?: Error\n } = { error: Error },\n> = MulticallResults<\n Narrow,\n allowFailure,\n { mutability: AbiStateMutability } & options\n>\n\nexport type MulticallErrorType =\n | GetChainContractAddressErrorType\n | ReadContractErrorType\n | GetContractErrorReturnType<\n EncodeFunctionDataErrorType | DecodeFunctionResultErrorType\n >\n | ErrorType\n\n/**\n * Similar to [`readContract`](https://viem.sh/docs/contract/readContract), but batches up multiple functions on a contract in a single RPC call via the [`multicall3` contract](https://github.com/mds1/multicall).\n *\n * - Docs: https://viem.sh/docs/contract/multicall\n *\n * @param client - Client to use\n * @param parameters - {@link MulticallParameters}\n * @returns An array of results with accompanying status. {@link MulticallReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { multicall } from 'viem/contract'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const abi = parseAbi([\n * 'function balanceOf(address) view returns (uint256)',\n * 'function totalSupply() view returns (uint256)',\n * ])\n * const results = await multicall(client, {\n * contracts: [\n * {\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi,\n * functionName: 'balanceOf',\n * args: ['0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'],\n * },\n * {\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi,\n * functionName: 'totalSupply',\n * },\n * ],\n * })\n * // [{ result: 424122n, status: 'success' }, { result: 1000000n, status: 'success' }]\n */\nexport async function multicall<\n const contracts extends readonly unknown[],\n chain extends Chain | undefined,\n allowFailure extends boolean = true,\n>(\n client: Client,\n parameters: MulticallParameters,\n): Promise> {\n const {\n account,\n authorizationList,\n allowFailure = true,\n blockNumber,\n blockOverrides,\n blockTag,\n stateOverride,\n } = parameters\n const contracts = parameters.contracts as ContractFunctionParameters[]\n\n const {\n batchSize = parameters.batchSize ?? 1024,\n deployless = parameters.deployless ?? false,\n } = typeof client.batch?.multicall === 'object' ? client.batch.multicall : {}\n\n const multicallAddress = (() => {\n if (parameters.multicallAddress) return parameters.multicallAddress\n if (deployless) return null\n if (client.chain) {\n return getChainContractAddress({\n blockNumber,\n chain: client.chain,\n contract: 'multicall3',\n })\n }\n throw new Error(\n 'client chain not configured. multicallAddress is required.',\n )\n })()\n\n type Aggregate3Calls = {\n allowFailure: boolean\n callData: Hex\n target: Address\n }[]\n\n const chunkedCalls: Aggregate3Calls[] = [[]]\n let currentChunk = 0\n let currentChunkSize = 0\n for (let i = 0; i < contracts.length; i++) {\n const { abi, address, args, functionName } = contracts[i]\n try {\n const callData = encodeFunctionData({ abi, args, functionName })\n\n currentChunkSize += (callData.length - 2) / 2\n // Check to see if we need to create a new chunk.\n if (\n // Check if batching is enabled.\n batchSize > 0 &&\n // Check if the current size of the batch exceeds the size limit.\n currentChunkSize > batchSize &&\n // Check if the current chunk is not already empty.\n chunkedCalls[currentChunk].length > 0\n ) {\n currentChunk++\n currentChunkSize = (callData.length - 2) / 2\n chunkedCalls[currentChunk] = []\n }\n\n chunkedCalls[currentChunk] = [\n ...chunkedCalls[currentChunk],\n {\n allowFailure: true,\n callData,\n target: address,\n },\n ]\n } catch (err) {\n const error = getContractError(err as BaseError, {\n abi,\n address,\n args,\n docsPath: '/docs/contract/multicall',\n functionName,\n sender: account,\n })\n if (!allowFailure) throw error\n chunkedCalls[currentChunk] = [\n ...chunkedCalls[currentChunk],\n {\n allowFailure: true,\n callData: '0x' as Hex,\n target: address,\n },\n ]\n }\n }\n\n const aggregate3Results = await Promise.allSettled(\n chunkedCalls.map((calls) =>\n getAction(\n client,\n readContract,\n 'readContract',\n )({\n ...(multicallAddress === null\n ? { code: multicall3Bytecode }\n : { address: multicallAddress }),\n abi: multicall3Abi,\n account,\n args: [calls],\n authorizationList,\n blockNumber,\n blockOverrides,\n blockTag,\n functionName: 'aggregate3',\n stateOverride,\n }),\n ),\n )\n\n const results = []\n for (let i = 0; i < aggregate3Results.length; i++) {\n const result = aggregate3Results[i]\n\n // If an error occurred in a `readContract` invocation (ie. network error),\n // then append the failure reason to each contract result.\n if (result.status === 'rejected') {\n if (!allowFailure) throw result.reason\n for (let j = 0; j < chunkedCalls[i].length; j++) {\n results.push({\n status: 'failure',\n error: result.reason,\n result: undefined,\n })\n }\n continue\n }\n\n // If the `readContract` call was successful, then decode the results.\n const aggregate3Result = result.value\n for (let j = 0; j < aggregate3Result.length; j++) {\n // Extract the response from `readContract`\n const { returnData, success } = aggregate3Result[j]\n\n // Extract the request call data from the original call.\n const { callData } = chunkedCalls[i][j]\n\n // Extract the contract config for this call from the `contracts` argument\n // for decoding.\n const { abi, address, functionName, args } = contracts[\n results.length\n ] as ContractFunctionParameters\n\n try {\n if (callData === '0x') throw new AbiDecodingZeroDataError()\n if (!success) throw new RawContractError({ data: returnData })\n const result = decodeFunctionResult({\n abi,\n args,\n data: returnData,\n functionName,\n })\n results.push(allowFailure ? { result, status: 'success' } : result)\n } catch (err) {\n const error = getContractError(err as BaseError, {\n abi,\n address,\n args,\n docsPath: '/docs/contract/multicall',\n functionName,\n })\n if (!allowFailure) throw error\n results.push({ error, result: undefined, status: 'failure' })\n }\n }\n }\n\n if (results.length !== contracts.length)\n throw new BaseError('multicall results mismatch')\n return results as MulticallReturnType\n}\n", "import type { Abi, AbiStateMutability, Address, Narrow } from 'abitype'\nimport * as BlockOverrides from 'ox/BlockOverrides'\n\nimport {\n type ParseAccountErrorType,\n parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { AbiDecodingZeroDataError } from '../../errors/abi.js'\nimport type { BaseError } from '../../errors/base.js'\nimport { RawContractError } from '../../errors/contract.js'\nimport { UnknownNodeError } from '../../errors/node.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Block, BlockTag } from '../../types/block.js'\nimport type { Call, Calls } from '../../types/calls.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Log } from '../../types/log.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { MulticallResults } from '../../types/multicall.js'\nimport type { StateOverride } from '../../types/stateOverride.js'\nimport type { TransactionRequest } from '../../types/transaction.js'\nimport type { ExactPartial, UnionOmit } from '../../types/utils.js'\nimport {\n type DecodeFunctionResultErrorType,\n decodeFunctionResult,\n} from '../../utils/abi/decodeFunctionResult.js'\nimport {\n type EncodeFunctionDataErrorType,\n encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport { concat } from '../../utils/data/concat.js'\nimport {\n type NumberToHexErrorType,\n numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport { getContractError } from '../../utils/errors/getContractError.js'\nimport {\n type GetNodeErrorReturnType,\n getNodeError,\n} from '../../utils/errors/getNodeError.js'\nimport {\n type FormatBlockErrorType,\n formatBlock,\n} from '../../utils/formatters/block.js'\nimport { formatLog } from '../../utils/formatters/log.js'\nimport {\n type FormatTransactionRequestErrorType,\n formatTransactionRequest,\n} from '../../utils/formatters/transactionRequest.js'\nimport {\n type SerializeStateOverrideErrorType,\n serializeStateOverride,\n} from '../../utils/stateOverride.js'\nimport {\n type AssertRequestErrorType,\n assertRequest,\n} from '../../utils/transaction/assertRequest.js'\n\ntype CallExtraProperties = ExactPartial<\n UnionOmit<\n TransactionRequest,\n 'blobs' | 'data' | 'kzg' | 'to' | 'sidecars' | 'value'\n >\n> & {\n /** Account attached to the call (msg.sender). */\n account?: Account | Address | undefined\n /** Recipient. `null` if contract deployment. */\n to?: Address | null | undefined\n}\n\nexport type SimulateBlocksParameters<\n calls extends readonly unknown[] = readonly unknown[],\n> = {\n /** Blocks to simulate. */\n blocks: readonly {\n /** Block overrides. */\n blockOverrides?: BlockOverrides.BlockOverrides | undefined\n /** Calls to execute. */\n calls: Calls, CallExtraProperties>\n /** State overrides. */\n stateOverrides?: StateOverride | undefined\n }[]\n /** Whether to return the full transactions. */\n returnFullTransactions?: boolean | undefined\n /** Whether to trace transfers. */\n traceTransfers?: boolean | undefined\n /** Whether to enable validation mode. */\n validation?: boolean | undefined\n} & (\n | {\n /** The balance of the account at a block number. */\n blockNumber?: bigint | undefined\n blockTag?: undefined\n }\n | {\n blockNumber?: undefined\n /**\n * The balance of the account at a block tag.\n * @default 'latest'\n */\n blockTag?: BlockTag | undefined\n }\n)\n\nexport type SimulateBlocksReturnType<\n calls extends readonly unknown[] = readonly unknown[],\n> = readonly (Block & {\n calls: MulticallResults<\n Narrow,\n true,\n {\n extraProperties: {\n data: Hex\n gasUsed: bigint\n logs?: Log[] | undefined\n }\n error: Error\n mutability: AbiStateMutability\n }\n >\n})[]\n\nexport type SimulateBlocksErrorType =\n | AssertRequestErrorType\n | DecodeFunctionResultErrorType\n | EncodeFunctionDataErrorType\n | FormatBlockErrorType\n | FormatTransactionRequestErrorType\n | GetNodeErrorReturnType\n | ParseAccountErrorType\n | SerializeStateOverrideErrorType\n | NumberToHexErrorType\n | ErrorType\n\n/**\n * Simulates a set of calls on block(s) with optional block and state overrides.\n *\n * @example\n * ```ts\n * import { createClient, http, parseEther } from 'viem'\n * import { simulate } from 'viem/actions'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createClient({\n * chain: mainnet,\n * transport: http(),\n * })\n *\n * const result = await simulate(client, {\n * blocks: [{\n * blockOverrides: {\n * number: 69420n,\n * },\n * calls: [{\n * {\n * account: '0x5a0b54d5dc17e482fe8b0bdca5320161b95fb929',\n * data: '0xdeadbeef',\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * },\n * {\n * account: '0x5a0b54d5dc17e482fe8b0bdca5320161b95fb929',\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * value: parseEther('1'),\n * },\n * }],\n * stateOverrides: [{\n * address: '0x5a0b54d5dc17e482fe8b0bdca5320161b95fb929',\n * balance: parseEther('10'),\n * }],\n * }]\n * })\n * ```\n *\n * @param client - Client to use.\n * @param parameters - {@link SimulateBlocksParameters}\n * @returns Simulated blocks. {@link SimulateBlocksReturnType}\n */\nexport async function simulateBlocks<\n chain extends Chain | undefined,\n const calls extends readonly unknown[],\n>(\n client: Client,\n parameters: SimulateBlocksParameters,\n): Promise> {\n const {\n blockNumber,\n blockTag = client.experimental_blockTag ?? 'latest',\n blocks,\n returnFullTransactions,\n traceTransfers,\n validation,\n } = parameters\n\n try {\n const blockStateCalls = []\n for (const block of blocks) {\n const blockOverrides = block.blockOverrides\n ? BlockOverrides.toRpc(block.blockOverrides)\n : undefined\n const calls = block.calls.map((call_) => {\n const call = call_ as Call\n const account = call.account ? parseAccount(call.account) : undefined\n const data = call.abi ? encodeFunctionData(call) : call.data\n const request = {\n ...call,\n account,\n data: call.dataSuffix\n ? concat([data || '0x', call.dataSuffix])\n : data,\n from: call.from ?? account?.address,\n } as const\n assertRequest(request)\n return formatTransactionRequest(request)\n })\n const stateOverrides = block.stateOverrides\n ? serializeStateOverride(block.stateOverrides)\n : undefined\n\n blockStateCalls.push({\n blockOverrides,\n calls,\n stateOverrides,\n })\n }\n\n const blockNumberHex =\n typeof blockNumber === 'bigint' ? numberToHex(blockNumber) : undefined\n const block = blockNumberHex || blockTag\n\n const result = await client.request({\n method: 'eth_simulateV1',\n params: [\n { blockStateCalls, returnFullTransactions, traceTransfers, validation },\n block,\n ],\n })\n\n return result.map((block, i) => ({\n ...formatBlock(block),\n calls: block.calls.map((call, j) => {\n const { abi, args, functionName, to } = blocks[i].calls[j] as Call<\n unknown,\n CallExtraProperties\n >\n\n const data = call.error?.data ?? call.returnData\n const gasUsed = BigInt(call.gasUsed)\n const logs = call.logs?.map((log) => formatLog(log))\n const status = call.status === '0x1' ? 'success' : 'failure'\n\n const result =\n abi && status === 'success' && data !== '0x'\n ? decodeFunctionResult({\n abi,\n data,\n functionName,\n })\n : null\n\n const error = (() => {\n if (status === 'success') return undefined\n\n let error: Error | undefined\n if (data === '0x') error = new AbiDecodingZeroDataError()\n else if (data) error = new RawContractError({ data })\n\n if (!error) return undefined\n return getContractError(error, {\n abi: (abi ?? []) as Abi,\n address: to ?? '0x',\n args,\n functionName: functionName ?? '',\n })\n })()\n\n return {\n data,\n gasUsed,\n logs,\n status,\n ...(status === 'success'\n ? {\n result,\n }\n : {\n error,\n }),\n }\n }),\n })) as unknown as SimulateBlocksReturnType\n } catch (e) {\n const cause = e as BaseError\n const error = getNodeError(cause, {})\n if (error instanceof UnknownNodeError) throw cause\n throw error\n }\n}\n", "import * as abitype from 'abitype'\nimport type * as Abi from './Abi.js'\nimport * as Errors from './Errors.js'\nimport * as Hash from './Hash.js'\nimport * as Hex from './Hex.js'\nimport * as internal from './internal/abiItem.js'\nimport type { UnionCompute } from './internal/types.js'\n\n/** Root type for an item on an {@link ox#Abi.Abi}. */\nexport type AbiItem = Abi.Abi[number]\n\n/**\n * Extracts an {@link ox#AbiItem.AbiItem} item from an {@link ox#Abi.Abi}, given a name.\n *\n * @example\n * ```ts twoslash\n * import { Abi, AbiItem } from 'ox'\n *\n * const abi = Abi.from([\n * 'error Foo(string)',\n * 'function foo(string)',\n * 'event Bar(uint256)',\n * ])\n *\n * type Foo = AbiItem.FromAbi\n * // ^?\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n */\nexport type FromAbi<\n abi extends Abi.Abi,\n name extends ExtractNames,\n> = Extract\n\n/**\n * Extracts the names of all {@link ox#AbiItem.AbiItem} items in an {@link ox#Abi.Abi}.\n *\n * @example\n * ```ts twoslash\n * import { Abi, AbiItem } from 'ox'\n *\n * const abi = Abi.from([\n * 'error Foo(string)',\n * 'function foo(string)',\n * 'event Bar(uint256)',\n * ])\n *\n * type names = AbiItem.Name\n * // ^?\n *\n * ```\n */\nexport type Name =\n abi extends Abi.Abi ? ExtractNames : string\n\nexport type ExtractNames = Extract<\n abi[number],\n { name: string }\n>['name']\n\n/**\n * Formats an {@link ox#AbiItem.AbiItem} into a **Human Readable ABI Item**.\n *\n * @example\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const formatted = AbiItem.format({\n * type: 'function',\n * name: 'approve',\n * stateMutability: 'nonpayable',\n * inputs: [\n * {\n * name: 'spender',\n * type: 'address',\n * },\n * {\n * name: 'amount',\n * type: 'uint256',\n * },\n * ],\n * outputs: [{ type: 'bool' }],\n * })\n *\n * formatted\n * // ^?\n *\n *\n * ```\n *\n * @param abiItem - The ABI Item to format.\n * @returns The formatted ABI Item .\n */\nexport function format(\n abiItem: abiItem | AbiItem,\n): abitype.FormatAbiItem {\n return abitype.formatAbiItem(abiItem) as never\n}\n\nexport declare namespace format {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Parses an arbitrary **JSON ABI Item** or **Human Readable ABI Item** into a typed {@link ox#AbiItem.AbiItem}.\n *\n * @example\n * ### JSON ABIs\n *\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const abiItem = AbiItem.from({\n * type: 'function',\n * name: 'approve',\n * stateMutability: 'nonpayable',\n * inputs: [\n * {\n * name: 'spender',\n * type: 'address',\n * },\n * {\n * name: 'amount',\n * type: 'uint256',\n * },\n * ],\n * outputs: [{ type: 'bool' }],\n * })\n *\n * abiItem\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Human Readable ABIs\n *\n * A Human Readable ABI can be parsed into a typed ABI object:\n *\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const abiItem = AbiItem.from(\n * 'function approve(address spender, uint256 amount) returns (bool)' // [!code hl]\n * )\n *\n * abiItem\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * It is possible to specify `struct`s along with your definitions:\n *\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const abiItem = AbiItem.from([\n * 'struct Foo { address spender; uint256 amount; }', // [!code hl]\n * 'function approve(Foo foo) returns (bool)',\n * ])\n *\n * abiItem\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n *\n *\n * @param abiItem - The ABI Item to parse.\n * @returns The typed ABI Item.\n */\nexport function from<\n const abiItem extends AbiItem | string | readonly string[],\n>(\n abiItem: (abiItem | AbiItem | string | readonly string[]) &\n (\n | (abiItem extends string ? internal.Signature : never)\n | (abiItem extends readonly string[]\n ? internal.Signatures\n : never)\n | AbiItem\n ),\n options: from.Options = {},\n): from.ReturnType {\n const { prepare = true } = options\n const item = (() => {\n if (Array.isArray(abiItem)) return abitype.parseAbiItem(abiItem)\n if (typeof abiItem === 'string')\n return abitype.parseAbiItem(abiItem as never)\n return abiItem\n })() as AbiItem\n return {\n ...item,\n ...(prepare ? { hash: getSignatureHash(item) } : {}),\n } as never\n}\n\nexport declare namespace from {\n type Options = {\n /**\n * Whether or not to prepare the extracted item (optimization for encoding performance).\n * When `true`, the `hash` property is computed and included in the returned value.\n *\n * @default true\n */\n prepare?: boolean | undefined\n }\n\n type ReturnType =\n abiItem extends string\n ? abitype.ParseAbiItem\n : abiItem extends readonly string[]\n ? abitype.ParseAbiItem\n : abiItem\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Extracts an {@link ox#AbiItem.AbiItem} from an {@link ox#Abi.Abi} given a name and optional arguments.\n *\n * @example\n * ABI Items can be extracted by their name using the `name` option:\n *\n * ```ts twoslash\n * import { Abi, AbiItem } from 'ox'\n *\n * const abi = Abi.from([\n * 'function foo()',\n * 'event Transfer(address owner, address to, uint256 tokenId)',\n * 'function bar(string a) returns (uint256 x)',\n * ])\n *\n * const item = AbiItem.fromAbi(abi, 'Transfer') // [!code focus]\n * // ^?\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Extracting by Selector\n *\n * ABI Items can be extract by their selector when {@link ox#Hex.Hex} is provided to `name`.\n *\n * ```ts twoslash\n * import { Abi, AbiItem } from 'ox'\n *\n * const abi = Abi.from([\n * 'function foo()',\n * 'event Transfer(address owner, address to, uint256 tokenId)',\n * 'function bar(string a) returns (uint256 x)',\n * ])\n * const item = AbiItem.fromAbi(abi, '0x095ea7b3') // [!code focus]\n * // ^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * :::note\n *\n * Extracting via a hex selector is useful when extracting an ABI Item from an `eth_call` RPC response,\n * a Transaction `input`, or from Event Log `topics`.\n *\n * :::\n *\n * @param abi - The ABI to extract from.\n * @param name - The name (or selector) of the ABI item to extract.\n * @param options - Extraction options.\n * @returns The ABI item.\n */\nexport function fromAbi<\n const abi extends Abi.Abi | readonly unknown[],\n name extends Name,\n const args extends internal.ExtractArgs | undefined = undefined,\n //\n allNames = Name,\n>(\n abi: abi | Abi.Abi | readonly unknown[],\n name: Hex.Hex | (name extends allNames ? name : never),\n options?: fromAbi.Options,\n): fromAbi.ReturnType {\n const { args = [], prepare = true } = (options ??\n {}) as unknown as fromAbi.Options\n\n const isSelector = Hex.validate(name, { strict: false })\n const abiItems = (abi as Abi.Abi).filter((abiItem) => {\n if (isSelector) {\n if (abiItem.type === 'function' || abiItem.type === 'error')\n return getSelector(abiItem) === Hex.slice(name, 0, 4)\n if (abiItem.type === 'event') return getSignatureHash(abiItem) === name\n return false\n }\n return 'name' in abiItem && abiItem.name === name\n })\n\n if (abiItems.length === 0) throw new NotFoundError({ name: name as string })\n if (abiItems.length === 1)\n return {\n ...abiItems[0],\n ...(prepare ? { hash: getSignatureHash(abiItems[0]!) } : {}),\n } as never\n\n let matchedAbiItem: AbiItem | undefined\n for (const abiItem of abiItems) {\n if (!('inputs' in abiItem)) continue\n if (!args || args.length === 0) {\n if (!abiItem.inputs || abiItem.inputs.length === 0)\n return {\n ...abiItem,\n ...(prepare ? { hash: getSignatureHash(abiItem) } : {}),\n } as never\n continue\n }\n if (!abiItem.inputs) continue\n if (abiItem.inputs.length === 0) continue\n if (abiItem.inputs.length !== args.length) continue\n const matched = args.every((arg, index) => {\n const abiParameter = 'inputs' in abiItem && abiItem.inputs![index]\n if (!abiParameter) return false\n return internal.isArgOfType(arg, abiParameter)\n })\n if (matched) {\n // Check for ambiguity against already matched parameters (e.g. `address` vs `bytes20`).\n if (\n matchedAbiItem &&\n 'inputs' in matchedAbiItem &&\n matchedAbiItem.inputs\n ) {\n const ambiguousTypes = internal.getAmbiguousTypes(\n abiItem.inputs,\n matchedAbiItem.inputs,\n args as readonly unknown[],\n )\n if (ambiguousTypes)\n throw new AmbiguityError(\n {\n abiItem,\n type: ambiguousTypes[0]!,\n },\n {\n abiItem: matchedAbiItem,\n type: ambiguousTypes[1]!,\n },\n )\n }\n\n matchedAbiItem = abiItem\n }\n }\n\n const abiItem = (() => {\n if (matchedAbiItem) return matchedAbiItem\n const [abiItem, ...overloads] = abiItems\n return { ...abiItem!, overloads }\n })()\n\n if (!abiItem) throw new NotFoundError({ name: name as string })\n return {\n ...abiItem,\n ...(prepare ? { hash: getSignatureHash(abiItem) } : {}),\n } as never\n}\n\nexport declare namespace fromAbi {\n type Options<\n abi extends Abi.Abi | readonly unknown[] = Abi.Abi,\n name extends Name = Name,\n args extends\n | internal.ExtractArgs\n | undefined = internal.ExtractArgs,\n ///\n allArgs = internal.ExtractArgs,\n > = {\n /**\n * Whether or not to prepare the extracted item (optimization for encoding performance).\n * When `true`, the `hash` property is computed and included in the returned value.\n *\n * @default true\n */\n prepare?: boolean | undefined\n } & UnionCompute<\n readonly [] extends allArgs\n ? {\n args?:\n | allArgs // show all options\n // infer value, widen inferred value of `args` conditionally to match `allArgs`\n | (abi extends Abi.Abi\n ? args extends allArgs\n ? internal.Widen\n : never\n : never)\n | undefined\n }\n : {\n args?:\n | allArgs // show all options\n | (internal.Widen & (args extends allArgs ? unknown : never)) // infer value, widen inferred value of `args` match `allArgs` (e.g. avoid union `args: readonly [123n] | readonly [bigint]`)\n | undefined\n }\n >\n\n type ReturnType<\n abi extends Abi.Abi | readonly unknown[] = Abi.Abi,\n name extends Name = Name,\n args extends\n | internal.ExtractArgs\n | undefined = internal.ExtractArgs,\n fallback = AbiItem,\n > = abi extends Abi.Abi\n ? Abi.Abi extends abi\n ? fallback\n : internal.ExtractForArgs<\n abi,\n name,\n args extends internal.ExtractArgs\n ? args\n : internal.ExtractArgs\n >\n : fallback\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Computes the [4-byte selector](https://solidity-by-example.org/function-selector/) for an {@link ox#AbiItem.AbiItem}.\n *\n * Useful for computing function selectors for calldata.\n *\n * @example\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const selector = AbiItem.getSelector('function ownerOf(uint256 tokenId)')\n * // @log: '0x6352211e'\n * ```\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiItem } from 'ox'\n *\n * const erc20Abi = Abi.from([...])\n *\n * const selector = AbiItem.getSelector(erc20Abi, 'ownerOf')\n * // @log: '0x6352211e'\n * ```\n *\n * @example\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const selector = AbiItem.getSelector({\n * inputs: [{ type: 'uint256' }],\n * name: 'ownerOf',\n * outputs: [],\n * stateMutability: 'view',\n * type: 'function'\n * })\n * // @log: '0x6352211e'\n * ```\n *\n * @param abiItem - The ABI item to compute the selector for. Can be a signature or an ABI item for an error, event, function, etc.\n * @returns The first 4 bytes of the {@link ox#Hash.(keccak256:function)} hash of the function signature.\n */\nexport function getSelector<\n abi extends Abi.Abi | readonly unknown[],\n name extends Name,\n>(abi: abi | Abi.Abi | readonly unknown[], name: name): Hex.Hex\nexport function getSelector(abiItem: string | AbiItem): Hex.Hex\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function getSelector(\n ...parameters:\n | [abi: Abi.Abi | readonly unknown[], name: string]\n | [string | AbiItem]\n): Hex.Hex {\n const abiItem = (() => {\n if (Array.isArray(parameters[0])) {\n const [abi, name] = parameters as [Abi.Abi | readonly unknown[], string]\n return fromAbi(abi, name)\n }\n return parameters[0] as string | AbiItem\n })()\n return Hex.slice(getSignatureHash(abiItem), 0, 4)\n}\n\nexport declare namespace getSelector {\n type ErrorType =\n | getSignatureHash.ErrorType\n | Hex.slice.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Computes the stringified signature for a given {@link ox#AbiItem.AbiItem}.\n *\n * @example\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const signature = AbiItem.getSignature('function ownerOf(uint256 tokenId)')\n * // @log: 'ownerOf(uint256)'\n * ```\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiItem } from 'ox'\n *\n * const erc20Abi = Abi.from([...])\n *\n * const signature = AbiItem.getSignature(erc20Abi, 'ownerOf')\n * // @log: 'ownerOf(uint256)'\n * ```\n *\n * @example\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const signature = AbiItem.getSignature({\n * name: 'ownerOf',\n * type: 'function',\n * inputs: [{ name: 'tokenId', type: 'uint256' }],\n * outputs: [],\n * stateMutability: 'view',\n * })\n * // @log: 'ownerOf(uint256)'\n * ```\n *\n * @param abiItem - The ABI Item to compute the signature for.\n * @returns The stringified signature of the ABI Item.\n */\nexport function getSignature<\n abi extends Abi.Abi | readonly unknown[],\n name extends Name,\n>(abi: abi | Abi.Abi | readonly unknown[], name: name): string\nexport function getSignature(abiItem: string | AbiItem): string\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function getSignature(\n ...parameters:\n | [abi: Abi.Abi | readonly unknown[], name: string]\n | [string | AbiItem]\n): string {\n const abiItem = (() => {\n if (Array.isArray(parameters[0])) {\n const [abi, name] = parameters as [Abi.Abi | readonly unknown[], string]\n return fromAbi(abi, name)\n }\n return parameters[0] as string | AbiItem\n })()\n const signature = (() => {\n if (typeof abiItem === 'string') return abiItem\n return abitype.formatAbiItem(abiItem)\n })()\n return internal.normalizeSignature(signature)\n}\n\nexport declare namespace getSignature {\n type ErrorType =\n | internal.normalizeSignature.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Computes the signature hash for an {@link ox#AbiItem.AbiItem}.\n *\n * Useful for computing Event Topic values.\n *\n * @example\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const hash = AbiItem.getSignatureHash('event Transfer(address indexed from, address indexed to, uint256 amount)')\n * // @log: '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'\n * ```\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiItem } from 'ox'\n *\n * const erc20Abi = Abi.from([...])\n *\n * const hash = AbiItem.getSignatureHash(erc20Abi, 'Transfer')\n * // @log: '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'\n * ```\n *\n * @example\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const hash = AbiItem.getSignatureHash({\n * name: 'Transfer',\n * type: 'event',\n * inputs: [\n * { name: 'from', type: 'address', indexed: true },\n * { name: 'to', type: 'address', indexed: true },\n * { name: 'amount', type: 'uint256', indexed: false },\n * ],\n * })\n * // @log: '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'\n * ```\n *\n * @param abiItem - The ABI Item to compute the signature hash for.\n * @returns The {@link ox#Hash.(keccak256:function)} hash of the ABI item's signature.\n */\nexport function getSignatureHash<\n abi extends Abi.Abi | readonly unknown[],\n name extends Name,\n>(abi: abi | Abi.Abi | readonly unknown[], name: name): Hex.Hex\nexport function getSignatureHash(abiItem: string | AbiItem): Hex.Hex\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function getSignatureHash(\n ...parameters:\n | [abi: Abi.Abi | readonly unknown[], name: string]\n | [string | AbiItem]\n): Hex.Hex {\n const abiItem = (() => {\n if (Array.isArray(parameters[0])) {\n const [abi, name] = parameters as [Abi.Abi | readonly unknown[], string]\n return fromAbi(abi, name)\n }\n return parameters[0] as string | AbiItem\n })()\n if (typeof abiItem !== 'string' && 'hash' in abiItem && abiItem.hash)\n return abiItem.hash as Hex.Hex\n return Hash.keccak256(Hex.fromString(getSignature(abiItem)))\n}\n\nexport declare namespace getSignatureHash {\n type ErrorType =\n | getSignature.ErrorType\n | Hash.keccak256.ErrorType\n | Hex.fromString.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Throws when ambiguous types are found on overloaded ABI items.\n *\n * @example\n * ```ts twoslash\n * import { Abi, AbiFunction } from 'ox'\n *\n * const foo = Abi.from(['function foo(address)', 'function foo(bytes20)'])\n * AbiFunction.fromAbi(foo, 'foo', {\n * args: ['0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'],\n * })\n * // @error: AbiItem.AmbiguityError: Found ambiguous types in overloaded ABI Items.\n * // @error: `bytes20` in `foo(bytes20)`, and\n * // @error: `address` in `foo(address)`\n * // @error: These types encode differently and cannot be distinguished at runtime.\n * // @error: Remove one of the ambiguous items in the ABI.\n * ```\n *\n * ### Solution\n *\n * Remove one of the ambiguous types from the ABI.\n *\n * ```ts twoslash\n * import { Abi, AbiFunction } from 'ox'\n *\n * const foo = Abi.from([\n * 'function foo(address)',\n * 'function foo(bytes20)' // [!code --]\n * ])\n * AbiFunction.fromAbi(foo, 'foo', {\n * args: ['0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'],\n * })\n * // @error: AbiItem.AmbiguityError: Found ambiguous types in overloaded ABI Items.\n * // @error: `bytes20` in `foo(bytes20)`, and\n * // @error: `address` in `foo(address)`\n * // @error: These types encode differently and cannot be distinguished at runtime.\n * // @error: Remove one of the ambiguous items in the ABI.\n * ```\n */\nexport class AmbiguityError extends Errors.BaseError {\n override readonly name = 'AbiItem.AmbiguityError'\n constructor(\n x: { abiItem: Abi.Abi[number]; type: string },\n y: { abiItem: Abi.Abi[number]; type: string },\n ) {\n super('Found ambiguous types in overloaded ABI Items.', {\n metaMessages: [\n // TODO: abitype to add support for signature-formatted ABI items.\n `\\`${x.type}\\` in \\`${internal.normalizeSignature(abitype.formatAbiItem(x.abiItem))}\\`, and`,\n `\\`${y.type}\\` in \\`${internal.normalizeSignature(abitype.formatAbiItem(y.abiItem))}\\``,\n '',\n 'These types encode differently and cannot be distinguished at runtime.',\n 'Remove one of the ambiguous items in the ABI.',\n ],\n })\n }\n}\n\n/**\n * Throws when an ABI item is not found in the ABI.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const foo = Abi.from([\n * 'function foo(address)',\n * 'function bar(uint)'\n * ])\n * AbiFunction.fromAbi(foo, 'baz')\n * // @error: AbiItem.NotFoundError: ABI function with name \"baz\" not found.\n * ```\n *\n * ### Solution\n *\n * Ensure the ABI item exists on the ABI.\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const foo = Abi.from([\n * 'function foo(address)',\n * 'function bar(uint)',\n * 'function baz(bool)' // [!code ++]\n * ])\n * AbiFunction.fromAbi(foo, 'baz')\n * ```\n */\nexport class NotFoundError extends Errors.BaseError {\n override readonly name = 'AbiItem.NotFoundError'\n constructor({\n name,\n data,\n type = 'item',\n }: {\n name?: string | undefined\n data?: Hex.Hex | undefined\n type?: string | undefined\n }) {\n const selector = (() => {\n if (name) return ` with name \"${name}\"`\n if (data) return ` with data \"${data}\"`\n return ''\n })()\n super(`ABI ${type}${selector} not found.`)\n }\n}\n\n/**\n * Throws when the selector size is invalid.\n *\n * @example\n * ```ts twoslash\n * import { Abi, AbiFunction } from 'ox'\n *\n * const foo = Abi.from([\n * 'function foo(address)',\n * 'function bar(uint)'\n * ])\n * AbiFunction.fromAbi(foo, '0xaaa')\n * // @error: AbiItem.InvalidSelectorSizeError: Selector size is invalid. Expected 4 bytes. Received 2 bytes (\"0xaaa\").\n * ```\n *\n * ### Solution\n *\n * Ensure the selector size is 4 bytes.\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const foo = Abi.from([\n * 'function foo(address)',\n * 'function bar(uint)'\n * ])\n * AbiFunction.fromAbi(foo, '0x7af82b1a')\n * ```\n */\nexport class InvalidSelectorSizeError extends Errors.BaseError {\n override readonly name = 'AbiItem.InvalidSelectorSizeError'\n constructor({ data }: { data: Hex.Hex }) {\n super(\n `Selector size is invalid. Expected 4 bytes. Received ${Hex.size(data)} bytes (\"${data}\").`,\n )\n }\n}\n", "import type * as abitype from 'abitype'\nimport type * as Abi from '../Abi.js'\nimport type * as AbiItem from '../AbiItem.js'\nimport type * as AbiParameters from '../AbiParameters.js'\nimport * as Address from '../Address.js'\nimport * as Errors from '../Errors.js'\nimport type {\n Compute,\n IsNever,\n IsUnion,\n TypeErrorMessage,\n UnionToTuple,\n} from './types.js'\n\n/** @internal */\nexport type ExtractArgs<\n abi extends Abi.Abi | readonly unknown[] = Abi.Abi,\n name extends AbiItem.Name = AbiItem.Name,\n> = abitype.AbiParametersToPrimitiveTypes<\n AbiItem.FromAbi['inputs'],\n 'inputs'\n> extends infer args\n ? [args] extends [never]\n ? readonly unknown[]\n : args\n : readonly unknown[]\n\n/** @internal */\nexport type ExtractForArgs<\n abi extends Abi.Abi,\n name extends AbiItem.Name,\n args extends ExtractArgs,\n> = IsUnion extends true\n ? {\n [key in keyof abi]: abi[key] extends { name: name } ? abi[key] : never\n }[number]\n : AbiItem.FromAbi extends infer abiItem extends AbiItem.AbiItem & {\n inputs: readonly abitype.AbiParameter[]\n }\n ? IsUnion extends true // narrow overloads using `args` by converting to tuple and filtering out overloads that don't match\n ? UnionToTuple extends infer abiItems extends\n readonly (AbiItem.AbiItem & {\n inputs: readonly abitype.AbiParameter[]\n })[]\n ? IsNever> extends true\n ? Compute<\n abiItems[0] & {\n readonly overloads: UnionToTuple<\n Exclude\n >\n }\n >\n : TupleToUnion // convert back to union (removes `never` tuple entries: `['foo', never, 'bar'][number]` => `'foo' | 'bar'`)\n : never\n : abiItem\n : never\n\n/** @internal */\nexport type TupleToUnion<\n abiItems extends readonly {\n inputs: readonly abitype.AbiParameter[]\n }[],\n abi extends Abi.Abi,\n name extends AbiItem.Name,\n args extends ExtractArgs,\n> = {\n [k in keyof abiItems]: (\n readonly [] extends args\n ? readonly [] // fallback to `readonly []` if `args` has no value (e.g. `args` property not provided)\n : args\n ) extends abitype.AbiParametersToPrimitiveTypes<\n abiItems[k]['inputs'],\n 'inputs'\n >\n ? abiItems[k]\n : never\n}[number]\n\n/** @internal */\nexport type ErrorSignature<\n name extends string = string,\n parameters extends string = string,\n> = `error ${name}(${parameters})`\n\n/** @internal */\nexport type IsErrorSignature =\n signature extends ErrorSignature ? IsName : false\n\n/** @internal */\nexport type EventSignature<\n name extends string = string,\n parameters extends string = string,\n> = `event ${name}(${parameters})`\n\n/** @internal */\nexport type IsEventSignature =\n signature extends EventSignature ? IsName : false\n\n/** @internal */\nexport type FunctionSignature<\n name extends string = string,\n tail extends string = string,\n> = `function ${name}(${tail}`\nexport type IsFunctionSignature =\n signature extends FunctionSignature\n ? IsName extends true\n ? signature extends ValidFunctionSignatures\n ? true\n : // Check that `Parameters` is not absorbing other types (e.g. `returns`)\n signature extends `function ${string}(${infer parameters})`\n ? parameters extends InvalidFunctionParameters\n ? false\n : true\n : false\n : false\n : false\n/** @internal */\nexport type Scope = 'public' | 'external' // `internal` or `private` functions wouldn't make it to ABI so can ignore\n\n/** @internal */\nexport type Returns = `returns (${string})` | `returns(${string})`\n\n// Almost all valid function signatures, except `function ${string}(${infer parameters})` since `parameters` can absorb returns\n/** @internal */\nexport type ValidFunctionSignatures =\n | `function ${string}()`\n // basic\n | `function ${string}() ${Returns}`\n | `function ${string}() ${abitype.AbiStateMutability}`\n | `function ${string}() ${Scope}`\n // combinations\n | `function ${string}() ${abitype.AbiStateMutability} ${Returns}`\n | `function ${string}() ${Scope} ${Returns}`\n | `function ${string}() ${Scope} ${abitype.AbiStateMutability}`\n | `function ${string}() ${Scope} ${abitype.AbiStateMutability} ${Returns}`\n // Parameters\n | `function ${string}(${string}) ${Returns}`\n | `function ${string}(${string}) ${abitype.AbiStateMutability}`\n | `function ${string}(${string}) ${Scope}`\n | `function ${string}(${string}) ${abitype.AbiStateMutability} ${Returns}`\n | `function ${string}(${string}) ${Scope} ${Returns}`\n | `function ${string}(${string}) ${Scope} ${abitype.AbiStateMutability}`\n | `function ${string}(${string}) ${Scope} ${abitype.AbiStateMutability} ${Returns}`\n\n/** @internal */\nexport type StructSignature<\n name extends string = string,\n properties extends string = string,\n> = `struct ${name} {${properties}}`\n\n/** @internal */\nexport type IsStructSignature =\n signature extends StructSignature ? IsName : false\n\n/** @internal */\nexport type ConstructorSignature =\n `constructor(${tail}`\n\n/** @internal */\nexport type IsConstructorSignature =\n signature extends ConstructorSignature\n ? signature extends ValidConstructorSignatures\n ? true\n : false\n : false\n\n/** @internal */\nexport type ValidConstructorSignatures =\n | `constructor(${string})`\n | `constructor(${string}) payable`\n\n/** @internal */\nexport type FallbackSignature =\n `fallback() external${abiStateMutability}`\n\n/** @internal */\nexport type ReceiveSignature = 'receive() external payable'\n\n// TODO: Maybe use this for signature validation one day\n// https://twitter.com/devanshj__/status/1610423724708343808\n/** @internal */\nexport type IsSignature =\n | (IsErrorSignature extends true ? true : never)\n | (IsEventSignature extends true ? true : never)\n | (IsFunctionSignature extends true ? true : never)\n | (IsStructSignature extends true ? true : never)\n | (IsConstructorSignature extends true ? true : never)\n | (type extends FallbackSignature ? true : never)\n | (type extends ReceiveSignature ? true : never) extends infer condition\n ? [condition] extends [never]\n ? false\n : true\n : false\n\n/** @internal */\nexport type Signature<\n string1 extends string,\n string2 extends string | unknown = unknown,\n> = IsSignature extends true\n ? string1\n : string extends string1 // if exactly `string` (not narrowed), then pass through as valid\n ? string1\n : TypeErrorMessage<`Signature \"${string1}\" is invalid${string2 extends string\n ? ` at position ${string2}`\n : ''}.`>\n\n/** @internal */\nexport type Signatures = {\n [key in keyof signatures]: Signature\n}\n\n/** @internal */\nexport type IsName = name extends ''\n ? false\n : ValidateName extends name\n ? true\n : false\n\n/** @internal */\nexport type ValidateName<\n name extends string,\n checkCharacters extends boolean = false,\n> = name extends `${string}${' '}${string}`\n ? TypeErrorMessage<`Identifier \"${name}\" cannot contain whitespace.`>\n : IsSolidityKeyword extends true\n ? TypeErrorMessage<`\"${name}\" is a protected Solidity keyword.`>\n : name extends `${number}`\n ? TypeErrorMessage<`Identifier \"${name}\" cannot be a number string.`>\n : name extends `${number}${string}`\n ? TypeErrorMessage<`Identifier \"${name}\" cannot start with a number.`>\n : checkCharacters extends true\n ? IsValidCharacter extends true\n ? name\n : TypeErrorMessage<`\"${name}\" contains invalid character.`>\n : name\n\n/** @internal */\nexport type IsSolidityKeyword =\n type extends SolidityKeywords ? true : false\n\n/** @internal */\nexport type SolidityKeywords =\n | 'after'\n | 'alias'\n | 'anonymous'\n | 'apply'\n | 'auto'\n | 'byte'\n | 'calldata'\n | 'case'\n | 'catch'\n | 'constant'\n | 'copyof'\n | 'default'\n | 'defined'\n | 'error'\n | 'event'\n | 'external'\n | 'false'\n | 'final'\n | 'function'\n | 'immutable'\n | 'implements'\n | 'in'\n | 'indexed'\n | 'inline'\n | 'internal'\n | 'let'\n | 'mapping'\n | 'match'\n | 'memory'\n | 'mutable'\n | 'null'\n | 'of'\n | 'override'\n | 'partial'\n | 'private'\n | 'promise'\n | 'public'\n | 'pure'\n | 'reference'\n | 'relocatable'\n | 'return'\n | 'returns'\n | 'sizeof'\n | 'static'\n | 'storage'\n | 'struct'\n | 'super'\n | 'supports'\n | 'switch'\n | 'this'\n | 'true'\n | 'try'\n | 'typedef'\n | 'typeof'\n | 'var'\n | 'view'\n | 'virtual'\n | `address${`[${string}]` | ''}`\n | `bool${`[${string}]` | ''}`\n | `string${`[${string}]` | ''}`\n | `tuple${`[${string}]` | ''}`\n | `bytes${number | ''}${`[${string}]` | ''}`\n | `${'u' | ''}int${number | ''}${`[${string}]` | ''}`\n\n/** @internal */\nexport type IsValidCharacter =\n character extends `${ValidCharacters}${infer tail}`\n ? tail extends ''\n ? true\n : IsValidCharacter\n : false\n\n// biome-ignore format: no formatting\n/** @internal */\nexport type ValidCharacters =\n // uppercase letters\n | 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | 'V' | 'W' | 'X' | 'Y' | 'Z'\n // lowercase letters\n | 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j' | 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | 't' | 'u' | 'v' | 'w' | 'x' | 'y' | 'z'\n // numbers\n | '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'\n // special characters\n | '_' | '$'\n\n// Template string inference can absorb `returns`:\n// type Result = `function foo(string) return s (uint256)` extends `function ${string}(${infer Parameters})` ? Parameters : never\n// // ^? type Result = \"string ) return s (uint256\"\n// So we need to validate against `returns` keyword with all combinations of whitespace\n/** @internal */\nexport type InvalidFunctionParameters =\n | `${string}${MangledReturns} (${string}`\n | `${string}) ${MangledReturns}${string}`\n | `${string})${string}${MangledReturns}${string}(${string}`\n\n// r_e_t_u_r_n_s\n/** @internal */\nexport type MangledReturns =\n // Single\n | `r${string}eturns`\n | `re${string}turns`\n | `ret${string}urns`\n | `retu${string}rns`\n | `retur${string}ns`\n | `return${string}s`\n // Double\n // `r_e*`\n | `r${string}e${string}turns`\n | `r${string}et${string}urns`\n | `r${string}etu${string}rns`\n | `r${string}etur${string}ns`\n | `r${string}eturn${string}s`\n // `re_t*`\n | `re${string}t${string}urns`\n | `re${string}tu${string}rns`\n | `re${string}tur${string}ns`\n | `re${string}turn${string}s`\n // `ret_u*`\n | `ret${string}u${string}rns`\n | `ret${string}ur${string}ns`\n | `ret${string}urn${string}s`\n // `retu_r*`\n | `retu${string}r${string}ns`\n | `retu${string}rn${string}s`\n // `retur_n*`\n | `retur${string}n${string}s`\n // Triple\n // `r_e_t*`\n | `r${string}e${string}t${string}urns`\n | `r${string}e${string}tu${string}rns`\n | `r${string}e${string}tur${string}ns`\n | `r${string}e${string}turn${string}s`\n // `re_t_u*`\n | `re${string}t${string}u${string}rns`\n | `re${string}t${string}ur${string}ns`\n | `re${string}t${string}urn${string}s`\n // `ret_u_r*`\n | `ret${string}u${string}r${string}ns`\n | `ret${string}u${string}rn${string}s`\n // `retu_r_n*`\n | `retu${string}r${string}n${string}s`\n // Quadruple\n // `r_e_t_u*`\n | `r${string}e${string}t${string}u${string}rns`\n | `r${string}e${string}t${string}ur${string}ns`\n | `r${string}e${string}t${string}urn${string}s`\n // `re_t_u_r*`\n | `re${string}t${string}u${string}r${string}ns`\n | `re${string}t${string}u${string}rn${string}s`\n // `ret_u_r_n*`\n | `ret${string}u${string}r${string}n${string}s`\n // Quintuple\n // `r_e_t_u_r*`\n | `r${string}e${string}t${string}u${string}r${string}ns`\n | `r${string}e${string}t${string}u${string}rn${string}s`\n // `re_t_u_r_n*`\n | `re${string}t${string}u${string}r${string}n${string}s`\n // Sextuple\n // `r_e_t_u_r_n_s`\n | `r${string}e${string}t${string}u${string}r${string}n${string}s`\n\n/** @internal */\nexport type Widen =\n | ([unknown] extends [type] ? unknown : never)\n | (type extends Function ? type : never)\n | (type extends abitype.ResolvedRegister['bigIntType'] ? bigint : never)\n | (type extends boolean ? boolean : never)\n | (type extends abitype.ResolvedRegister['intType'] ? number : never)\n | (type extends string\n ? type extends abitype.ResolvedRegister['addressType']\n ? abitype.ResolvedRegister['addressType']\n : type extends abitype.ResolvedRegister['bytesType']['inputs']\n ? abitype.ResolvedRegister['bytesType']\n : string\n : never)\n | (type extends readonly [] ? readonly [] : never)\n | (type extends Record\n ? { [K in keyof type]: Widen }\n : never)\n | (type extends { length: number }\n ? {\n [K in keyof type]: Widen\n } extends infer Val extends readonly unknown[]\n ? readonly [...Val]\n : never\n : never)\n\n/** @internal */\nexport function normalizeSignature(signature: string): string {\n let active = true\n let current = ''\n let level = 0\n let result = ''\n let valid = false\n\n for (let i = 0; i < signature.length; i++) {\n const char = signature[i]!\n\n // If the character is a separator, we want to reactivate.\n if (['(', ')', ','].includes(char)) active = true\n\n // If the character is a \"level\" token, we want to increment/decrement.\n if (char === '(') level++\n if (char === ')') level--\n\n // If we aren't active, we don't want to mutate the result.\n if (!active) continue\n\n // If level === 0, we are at the definition level.\n if (level === 0) {\n if (char === ' ' && ['event', 'function', 'error', ''].includes(result))\n result = ''\n else {\n result += char\n\n // If we are at the end of the definition, we must be finished.\n if (char === ')') {\n valid = true\n break\n }\n }\n\n continue\n }\n\n // Ignore spaces\n if (char === ' ') {\n // If the previous character is a separator, and the current section isn't empty, we want to deactivate.\n if (signature[i - 1] !== ',' && current !== ',' && current !== ',(') {\n current = ''\n active = false\n }\n continue\n }\n\n result += char\n current += char\n }\n\n if (!valid) throw new Errors.BaseError('Unable to normalize signature.')\n\n return result\n}\n\n/** @internal */\nexport declare namespace normalizeSignature {\n export type ErrorType = Errors.BaseError | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function isArgOfType(\n arg: unknown,\n abiParameter: AbiParameters.Parameter,\n): boolean {\n const argType = typeof arg\n const abiParameterType = abiParameter.type\n switch (abiParameterType) {\n case 'address':\n return Address.validate(arg as Address.Address, { strict: false })\n case 'bool':\n return argType === 'boolean'\n case 'function':\n return argType === 'string'\n case 'string':\n return argType === 'string'\n default: {\n if (abiParameterType === 'tuple' && 'components' in abiParameter)\n return Object.values(abiParameter.components).every(\n (component, index) => {\n return isArgOfType(\n Object.values(arg as unknown[] | Record)[index],\n component as AbiParameters.Parameter,\n )\n },\n )\n\n // `(u)int`: (un)signed integer type of `M` bits, `0 < M <= 256`, `M % 8 == 0`\n // https://regexr.com/6v8hp\n if (\n /^u?int(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/.test(\n abiParameterType,\n )\n )\n return argType === 'number' || argType === 'bigint'\n\n // `bytes`: binary type of `M` bytes, `0 < M <= 32`\n // https://regexr.com/6va55\n if (/^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/.test(abiParameterType))\n return argType === 'string' || arg instanceof Uint8Array\n\n // fixed-length (`[M]`) and dynamic (`[]`) arrays\n // https://regexr.com/6va6i\n if (/[a-z]+[1-9]{0,3}(\\[[0-9]{0,}\\])+$/.test(abiParameterType)) {\n return (\n Array.isArray(arg) &&\n arg.every((x: unknown) =>\n isArgOfType(x, {\n ...abiParameter,\n // Pop off `[]` or `[M]` from end of type\n type: abiParameterType.replace(/(\\[[0-9]{0,}\\])$/, ''),\n } as AbiParameters.Parameter),\n )\n )\n }\n\n return false\n }\n }\n}\n\n/** @internal */\nexport function getAmbiguousTypes(\n sourceParameters: readonly AbiParameters.Parameter[],\n targetParameters: readonly AbiParameters.Parameter[],\n args: ExtractArgs,\n): AbiParameters.Parameter['type'][] | undefined {\n for (const parameterIndex in sourceParameters) {\n const sourceParameter = sourceParameters[parameterIndex]!\n const targetParameter = targetParameters[parameterIndex]!\n\n if (\n sourceParameter.type === 'tuple' &&\n targetParameter.type === 'tuple' &&\n 'components' in sourceParameter &&\n 'components' in targetParameter\n )\n return getAmbiguousTypes(\n sourceParameter.components,\n targetParameter.components,\n (args as any)[parameterIndex],\n )\n\n const types = [sourceParameter.type, targetParameter.type]\n\n const ambiguous = (() => {\n if (types.includes('address') && types.includes('bytes20')) return true\n if (types.includes('address') && types.includes('string'))\n return Address.validate(args[parameterIndex] as Address.Address, {\n strict: false,\n })\n if (types.includes('address') && types.includes('bytes'))\n return Address.validate(args[parameterIndex] as Address.Address, {\n strict: false,\n })\n return false\n })()\n\n if (ambiguous) return types\n }\n\n return\n}\n", "import * as abitype from 'abitype'\nimport type * as Abi from './Abi.js'\nimport * as AbiItem from './AbiItem.js'\nimport * as AbiParameters from './AbiParameters.js'\nimport type * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport type * as internal from './internal/abiConstructor.js'\nimport type { IsNarrowable } from './internal/types.js'\n\n/** Root type for an {@link ox#AbiItem.AbiItem} with a `constructor` type. */\nexport type AbiConstructor = abitype.AbiConstructor\n\n/**\n * ABI-decodes the provided constructor input (`inputs`).\n *\n * @example\n * ```ts twoslash\n * import { AbiConstructor } from 'ox'\n *\n * const constructor = AbiConstructor.from('constructor(address, uint256)')\n *\n * const bytecode = '0x...'\n *\n * const data = AbiConstructor.encode(constructor, {\n * bytecode,\n * args: ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 123n],\n * })\n *\n * const decoded = AbiConstructor.decode(constructor, { // [!code focus]\n * bytecode, // [!code focus]\n * data, // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @example\n * ### ABI-shorthand\n *\n * You can also specify an entire ABI object as a parameter to `AbiConstructor.decode`.\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiConstructor } from 'ox'\n *\n * const abi = Abi.from([...])\n *\n * const data = AbiConstructor.encode(abi, {\n * bytecode: '0x...',\n * args: ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 123n],\n * })\n *\n * const decoded = AbiConstructor.decode(abi, { // [!code focus]\n * bytecode: '0x...', // [!code focus]\n * data, // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param abiConstructor - The ABI Constructor to decode.\n * @param options - Decoding options.\n * @returns The decoded constructor inputs.\n */\nexport function decode<\n const abi extends Abi.Abi | readonly unknown[],\n abiConstructor extends\n AbiConstructor = fromAbi.ReturnType extends AbiConstructor\n ? fromAbi.ReturnType\n : never,\n>(\n abi: abi | Abi.Abi | readonly unknown[],\n options: decode.Options,\n): decode.ReturnType\nexport function decode(\n abiConstructor: abiConstructor | AbiConstructor,\n options: decode.Options,\n): decode.ReturnType\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function decode(\n ...parameters:\n | [abi: Abi.Abi | readonly unknown[], options: decode.Options]\n | [abiConstructor: AbiConstructor, options: decode.Options]\n): decode.ReturnType {\n const [abiConstructor, options] = (() => {\n if (Array.isArray(parameters[0])) {\n const [abi, options] = parameters as [\n Abi.Abi | readonly unknown[],\n decode.Options,\n ]\n return [fromAbi(abi), options] as [AbiConstructor, decode.Options]\n }\n return parameters as [AbiConstructor, decode.Options]\n })()\n\n const { bytecode } = options\n if (abiConstructor.inputs?.length === 0) return undefined\n const data = options.data.replace(bytecode, '0x') as Hex.Hex\n return AbiParameters.decode(abiConstructor.inputs, data)\n}\n\nexport declare namespace decode {\n interface Options {\n /** The bytecode of the contract. */\n bytecode: Hex.Hex\n /** The encoded constructor. */\n data: Hex.Hex\n }\n\n type ReturnType =\n | (abiConstructor['inputs']['length'] extends 0\n ? undefined\n : abitype.AbiParametersToPrimitiveTypes)\n | (IsNarrowable extends true\n ? never\n : undefined)\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * ABI-encodes the provided constructor input (`inputs`).\n *\n * @example\n * ```ts twoslash\n * import { AbiConstructor } from 'ox'\n *\n * const constructor = AbiConstructor.from('constructor(address, uint256)')\n *\n * const data = AbiConstructor.encode(constructor, {\n * bytecode: '0x...',\n * args: ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 123n],\n * })\n * ```\n *\n * @example\n * ### ABI-shorthand\n *\n * You can also specify an entire ABI object as a parameter to `AbiConstructor.encode`.\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiConstructor } from 'ox'\n *\n * const abi = Abi.from([...])\n *\n * const data = AbiConstructor.encode(abi, { // [!code focus]\n * bytecode: '0x...', // [!code focus]\n * args: ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 123n], // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @example\n * ### End-to-end\n *\n * Below is an end-to-end example of using `AbiConstructor.encode` to encode the constructor of a contract and deploy it.\n *\n * ```ts twoslash\n * import 'ox/window'\n * import { AbiConstructor, Hex } from 'ox'\n *\n * // 1. Instantiate the ABI Constructor.\n * const constructor = AbiConstructor.from(\n * 'constructor(address owner, uint256 amount)',\n * )\n *\n * // 2. Encode the ABI Constructor.\n * const data = AbiConstructor.encode(constructor, {\n * bytecode: '0x...',\n * args: ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 123n],\n * })\n *\n * // 3. Deploy the contract.\n * const hash = await window.ethereum!.request({\n * method: 'eth_sendTransaction',\n * params: [{ data }],\n * })\n * ```\n *\n * :::note\n *\n * For simplicity, the above example uses `window.ethereum.request`, but you can use any\n * type of JSON-RPC interface.\n *\n * :::\n *\n * @param abiConstructor - The ABI Constructor to encode.\n * @param options - Encoding options.\n * @returns The encoded constructor.\n */\nexport function encode<\n const abi extends Abi.Abi | readonly unknown[],\n abiConstructor extends\n AbiConstructor = fromAbi.ReturnType extends AbiConstructor\n ? fromAbi.ReturnType\n : never,\n>(\n abi: abi | Abi.Abi | readonly unknown[],\n options: encode.Options,\n): encode.ReturnType\nexport function encode(\n abiConstructor: abiConstructor | AbiConstructor,\n options: encode.Options,\n): encode.ReturnType\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function encode(\n ...parameters:\n | [abi: Abi.Abi | readonly unknown[], options: encode.Options]\n | [abiConstructor: AbiConstructor, options: encode.Options]\n): encode.ReturnType {\n const [abiConstructor, options] = (() => {\n if (Array.isArray(parameters[0])) {\n const [abi, options] = parameters as [\n Abi.Abi | readonly unknown[],\n encode.Options,\n ]\n return [fromAbi(abi), options] as [AbiConstructor, encode.Options]\n }\n\n return parameters as [AbiConstructor, encode.Options]\n })()\n\n const { bytecode, args } = options\n return Hex.concat(\n bytecode,\n abiConstructor.inputs?.length && args?.length\n ? AbiParameters.encode(abiConstructor.inputs, args as readonly unknown[])\n : '0x',\n )\n}\n\nexport declare namespace encode {\n type Options<\n abiConstructor extends AbiConstructor = AbiConstructor,\n ///\n args extends abitype.AbiParametersToPrimitiveTypes<\n abiConstructor['inputs']\n > = abitype.AbiParametersToPrimitiveTypes,\n > = {\n /** The bytecode of the contract. */\n bytecode: Hex.Hex\n /** The constructor arguments to encode. */\n args?: args | undefined\n } & (readonly [] extends args\n ? {}\n : {\n /** The constructor arguments to encode. */\n args: args\n })\n\n type ReturnType = Hex.Hex\n\n type ErrorType =\n | Hex.concat.ErrorType\n | AbiParameters.encode.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function format(\n abiConstructor: abiConstructor,\n): format.ReturnType\n/**\n * Formats an {@link ox#AbiConstructor.AbiConstructor} into a **Human Readable ABI Function**.\n *\n * @example\n * ```ts twoslash\n * import { AbiConstructor } from 'ox'\n *\n * const formatted = AbiConstructor.format({\n * inputs: [\n * { name: 'owner', type: 'address' },\n * ],\n * payable: false,\n * stateMutability: 'nonpayable',\n * type: 'constructor',\n * })\n *\n * formatted\n * // ^?\n *\n *\n * ```\n *\n * @param abiConstructor - The ABI Constructor to format.\n * @returns The formatted ABI Constructor.\n */\nexport function format(abiConstructor: AbiConstructor): string\n/** @internal */\nexport function format(abiConstructor: AbiConstructor): format.ReturnType {\n return abitype.formatAbiItem(abiConstructor)\n}\n\nexport declare namespace format {\n type ReturnType =\n abitype.FormatAbiItem\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function from<\n const abiConstructor extends AbiConstructor | string | readonly string[],\n>(\n abiConstructor: (abiConstructor | string | readonly string[]) &\n (\n | (abiConstructor extends string\n ? internal.Signature\n : never)\n | (abiConstructor extends readonly string[]\n ? internal.Signatures\n : never)\n | AbiConstructor\n ),\n): from.ReturnType\n/**\n * Parses an arbitrary **JSON ABI Constructor** or **Human Readable ABI Constructor** into a typed {@link ox#AbiConstructor.AbiConstructor}.\n *\n * @example\n * ### JSON ABIs\n *\n * ```ts twoslash\n * import { AbiConstructor } from 'ox'\n *\n * const constructor = AbiConstructor.from({\n * inputs: [\n * { name: 'owner', type: 'address' },\n * ],\n * payable: false,\n * stateMutability: 'nonpayable',\n * type: 'constructor',\n * })\n *\n * constructor\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Human Readable ABIs\n *\n * A Human Readable ABI can be parsed into a typed ABI object:\n *\n * ```ts twoslash\n * import { AbiConstructor } from 'ox'\n *\n * const constructor = AbiConstructor.from(\n * 'constructor(address owner)' // [!code hl]\n * )\n *\n * constructor\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * It is possible to specify `struct`s along with your definitions:\n *\n * ```ts twoslash\n * import { AbiConstructor } from 'ox'\n *\n * const constructor = AbiConstructor.from([\n * 'struct Foo { address owner; uint256 amount; }', // [!code hl]\n * 'constructor(Foo foo)',\n * ])\n *\n * constructor\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n *\n *\n * @param abiConstructor - The ABI Constructor to parse.\n * @returns Typed ABI Constructor.\n */\nexport function from(\n abiConstructor: AbiConstructor | string | readonly string[],\n): AbiConstructor\n/** @internal */\nexport function from(\n abiConstructor: AbiConstructor | string | readonly string[],\n): from.ReturnType {\n return AbiItem.from(abiConstructor as AbiConstructor)\n}\n\nexport declare namespace from {\n type ReturnType<\n abiConstructor extends\n | AbiConstructor\n | string\n | readonly string[] = AbiConstructor,\n > = AbiItem.from.ReturnType\n\n type ErrorType = AbiItem.from.ErrorType | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function fromAbi(\n abi: abi | Abi.Abi | readonly unknown[],\n): fromAbi.ReturnType\n/**\n * Extracts an {@link ox#AbiConstructor.AbiConstructor} from an {@link ox#Abi.Abi} given a name and optional arguments.\n *\n * @example\n * ### Extracting by Name\n *\n * ABI Events can be extracted by their name using the `name` option:\n *\n * ```ts twoslash\n * import { Abi, AbiConstructor } from 'ox'\n *\n * const abi = Abi.from([\n * 'constructor(address owner)',\n * 'function foo()',\n * 'event Transfer(address owner, address to, uint256 tokenId)',\n * 'function bar(string a) returns (uint256 x)',\n * ])\n *\n * const item = AbiConstructor.fromAbi(abi) // [!code focus]\n * // ^?\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @returns The ABI constructor.\n */\nexport function fromAbi(abi: Abi.Abi | readonly unknown[]): AbiConstructor\n/** @internal */\nexport function fromAbi(abi: Abi.Abi | readonly unknown[]): fromAbi.ReturnType {\n const item = (abi as Abi.Abi).find((item) => item.type === 'constructor')\n if (!item) throw new AbiItem.NotFoundError({ name: 'constructor' })\n return item\n}\n\nexport declare namespace fromAbi {\n type ReturnType = Extract<\n abi[number],\n { type: 'constructor' }\n >\n\n type ErrorType = AbiItem.NotFoundError | Errors.GlobalErrorType\n}\n", "import * as abitype from 'abitype'\nimport type * as Abi from './Abi.js'\nimport * as AbiItem from './AbiItem.js'\nimport * as AbiParameters from './AbiParameters.js'\nimport type * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport type * as internal from './internal/abiFunction.js'\nimport type * as AbiItem_internal from './internal/abiItem.js'\nimport type * as AbiParameters_internal from './internal/abiParameters.js'\nimport type { IsNarrowable } from './internal/types.js'\n\n/** Root type for an {@link ox#AbiItem.AbiItem} with a `function` type. */\nexport type AbiFunction = abitype.AbiFunction & {\n hash?: Hex.Hex | undefined\n overloads?: readonly AbiFunction[] | undefined\n}\n\n/**\n * Extracts an {@link ox#AbiFunction.AbiFunction} item from an {@link ox#Abi.Abi}, given a name.\n *\n * @example\n * ```ts twoslash\n * import { Abi, AbiFunction } from 'ox'\n *\n * const abi = Abi.from([\n * 'function foo(string)',\n * 'function bar(uint256)',\n * ])\n *\n * type Foo = AbiFunction.FromAbi\n * // ^?\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n */\nexport type FromAbi<\n abi extends Abi.Abi,\n name extends ExtractNames,\n> = abitype.ExtractAbiFunction\n\n/**\n * Extracts the names of all {@link ox#AbiFunction.AbiFunction} items in an {@link ox#Abi.Abi}.\n *\n * @example\n * ```ts twoslash\n * import { Abi, AbiFunction } from 'ox'\n *\n * const abi = Abi.from([\n * 'function foo(string)',\n * 'function bar(uint256)',\n * ])\n *\n * type names = AbiFunction.Name\n * // ^?\n *\n *\n * ```\n */\nexport type Name =\n abi extends Abi.Abi ? ExtractNames : string\n\nexport type ExtractNames<\n abi extends Abi.Abi,\n abiStateMutability extends\n abitype.AbiStateMutability = abitype.AbiStateMutability,\n> = abitype.ExtractAbiFunctionNames\n\n/**\n * ABI-decodes function arguments according to the ABI Item's input types (`inputs`).\n *\n * @example\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const approve = AbiFunction.from('function approve(address, uint256)')\n *\n * const data = AbiFunction.encodeData(\n * approve,\n * ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 69420n]\n * )\n * // '0x095ea7b3000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa960450000000000000000000000000000000000000000000000000000000000010f2c'\n *\n * const input = AbiFunction.decodeData(approve, data) // [!code focus]\n * // @log: ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 69420n]\n * ```\n *\n * @example\n * ### ABI-shorthand\n *\n * You can also specify an entire ABI object and a function name as parameters to {@link ox#AbiFunction.(decodeData:function)}:\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const abi = Abi.from([...])\n * const data = '0x...\n *\n * const input = AbiFunction.decodeData(\n * abi, // [!code focus]\n * 'approve', // [!code focus]\n * data\n * )\n * // @log: ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 69420n]\n * ```\n *\n * @param abiFunction - The ABI Item to decode.\n * @param data - The data to decode.\n */\nexport function decodeData<\n const abi extends Abi.Abi | readonly unknown[],\n name extends Name,\n const args extends\n | AbiItem_internal.ExtractArgs\n | undefined = undefined,\n //\n abiFunction extends AbiFunction = AbiItem.fromAbi.ReturnType<\n abi,\n name,\n args,\n AbiFunction\n >,\n allNames = Name,\n>(\n abi: abi | Abi.Abi | readonly unknown[],\n name: Hex.Hex | (name extends allNames ? name : never),\n data: Hex.Hex,\n): decodeData.ReturnType\nexport function decodeData(\n abiFunction: abiItem | AbiFunction,\n data: Hex.Hex,\n): decodeData.ReturnType\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function decodeData(\n ...parameters:\n | [abi: Abi.Abi | readonly unknown[], name: Hex.Hex | string, data: Hex.Hex]\n | [abiFunction: AbiFunction, data: Hex.Hex]\n) {\n const [abiFunction, data] = (() => {\n if (Array.isArray(parameters[0])) {\n const [abi, name, data] = parameters as [\n Abi.Abi | readonly unknown[],\n Hex.Hex | string,\n Hex.Hex,\n ]\n return [fromAbi(abi, name), data]\n }\n return parameters as [AbiFunction, Hex.Hex]\n })()\n\n const { overloads } = abiFunction\n\n if (Hex.size(data) < 4) throw new AbiItem.InvalidSelectorSizeError({ data })\n if (abiFunction.inputs?.length === 0) return undefined\n\n const item = overloads\n ? fromAbi([abiFunction, ...overloads], data as never)\n : abiFunction\n\n if (Hex.size(data) <= 4) return undefined\n return AbiParameters.decode(item.inputs, Hex.slice(data, 4))\n}\n\nexport declare namespace decodeData {\n type ReturnType = IsNarrowable<\n abiFunction,\n AbiFunction\n > extends true\n ? abiFunction['inputs'] extends readonly []\n ? undefined\n :\n | AbiParameters_internal.ToPrimitiveTypes\n | (abiFunction['overloads'] extends readonly AbiFunction[]\n ? AbiParameters_internal.ToPrimitiveTypes<\n abiFunction['overloads'][number]['inputs']\n >\n : never)\n : unknown\n\n type ErrorType =\n | fromAbi.ErrorType\n | AbiParameters.decode.ErrorType\n | Hex.size.ErrorType\n | Hex.slice.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * ABI-decodes a function's result according to the ABI Item's output types (`outputs`).\n *\n * :::tip\n *\n * This function is typically used to decode contract function return values (e.g. the response of an `eth_call` or the `input` property of a Transaction).\n *\n * See the [End-to-end Example](#end-to-end).\n *\n * :::\n *\n * @example\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const data = '0x000000000000000000000000000000000000000000000000000000000000002a'\n *\n * const totalSupply = AbiFunction.from('function totalSupply() returns (uint256)')\n *\n * const output = AbiFunction.decodeResult(totalSupply, data)\n * // @log: 42n\n * ```\n *\n * @example\n * You can extract an ABI Function from a JSON ABI with {@link ox#AbiFunction.(fromAbi:function)}:\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const data = '0x000000000000000000000000000000000000000000000000000000000000002a'\n *\n * const erc20Abi = Abi.from([...]) // [!code hl]\n * const totalSupply = AbiFunction.fromAbi(erc20Abi, 'totalSupply') // [!code hl]\n *\n * const output = AbiFunction.decodeResult(totalSupply, data)\n * // @log: 42n\n * ```\n *\n * @example\n * ### ABI-shorthand\n *\n * You can also specify an entire ABI object and a function name as parameters to {@link ox#AbiFunction.(decodeResult:function)}:\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const data = '0x000000000000000000000000000000000000000000000000000000000000002a'\n *\n * const erc20Abi = Abi.from([...])\n *\n * const output = AbiFunction.decodeResult(\n * erc20Abi, // [!code focus]\n * 'totalSupply', // [!code focus]\n * data\n * )\n * // @log: 42n\n * ```\n *\n * @example\n * ### End-to-end\n *\n * Below is an end-to-end example of using `AbiFunction.decodeResult` to decode the result of a `balanceOf` contract call on the [Wagmi Mint Example contract](https://etherscan.io/address/0xfba3912ca04dd458c843e2ee08967fc04f3579c2).\n *\n * ```ts twoslash\n * import 'ox/window'\n * import { Abi, AbiFunction } from 'ox'\n *\n * // 1. Extract the Function from the Contract's ABI.\n * const abi = Abi.from([\n * // ...\n * {\n * name: 'balanceOf',\n * type: 'function',\n * inputs: [{ name: 'account', type: 'address' }],\n * outputs: [{ name: 'balance', type: 'uint256' }],\n * stateMutability: 'view',\n * },\n * // ...\n * ])\n * const balanceOf = AbiFunction.fromAbi(abi, 'balanceOf')\n *\n * // 2. Encode the Function Input.\n * const data = AbiFunction.encodeData(\n * balanceOf,\n * ['0xd2135CfB216b74109775236E36d4b433F1DF507B']\n * )\n *\n * // 3. Perform the Contract Call.\n * const response = await window.ethereum!.request({\n * method: 'eth_call',\n * params: [\n * {\n * data,\n * to: '0xfba3912ca04dd458c843e2ee08967fc04f3579c2',\n * },\n * ],\n * })\n *\n * // 4. Decode the Function Output. // [!code focus]\n * const balance = AbiFunction.decodeResult(balanceOf, response) // [!code focus]\n * // @log: 42n\n * ```\n *\n * :::note\n *\n * For simplicity, the above example uses `window.ethereum.request`, but you can use any\n * type of JSON-RPC interface.\n *\n * :::\n *\n * @param abiFunction - ABI Function to decode\n * @param data - ABI-encoded function output\n * @param options - Decoding options\n * @returns Decoded function output\n */\nexport function decodeResult<\n const abi extends Abi.Abi | readonly unknown[],\n name extends Name,\n const args extends\n | AbiItem_internal.ExtractArgs\n | undefined = undefined,\n //\n abiFunction extends AbiFunction = AbiItem.fromAbi.ReturnType<\n abi,\n name,\n args,\n AbiFunction\n >,\n allNames = Name,\n as extends 'Object' | 'Array' = 'Array',\n>(\n abi: abi | Abi.Abi | readonly unknown[],\n name: Hex.Hex | (name extends allNames ? name : never),\n data: Hex.Hex,\n options?: decodeResult.Options | undefined,\n): decodeResult.ReturnType\nexport function decodeResult<\n const abiFunction extends AbiFunction,\n as extends 'Object' | 'Array' = 'Array',\n>(\n abiFunction: abiFunction | AbiFunction,\n data: Hex.Hex,\n options?: decodeResult.Options | undefined,\n): decodeResult.ReturnType\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function decodeResult(\n ...parameters:\n | [\n abi: Abi.Abi | readonly unknown[],\n name: Hex.Hex | string,\n data: Hex.Hex,\n options?: decodeResult.Options | undefined,\n ]\n | [\n abiFunction: AbiFunction,\n data: Hex.Hex,\n options?: decodeResult.Options | undefined,\n ]\n) {\n const [abiFunction, data, options = {}] = (() => {\n if (Array.isArray(parameters[0])) {\n const [abi, name, data, options] = parameters as [\n Abi.Abi | readonly unknown[],\n Hex.Hex | string,\n Hex.Hex,\n decodeResult.Options | undefined,\n ]\n return [fromAbi(abi, name), data, options]\n }\n return parameters as [\n AbiFunction,\n Hex.Hex,\n decodeResult.Options | undefined,\n ]\n })()\n\n const values = AbiParameters.decode(abiFunction.outputs, data, options)\n if (values && Object.keys(values).length === 0) return undefined\n if (values && Object.keys(values).length === 1) {\n if (Array.isArray(values)) return values[0]\n return Object.values(values)[0]\n }\n return values\n}\n\nexport declare namespace decodeResult {\n type Options = {\n /**\n * Whether the decoded values should be returned as an `Object` or `Array`.\n *\n * @default \"Array\"\n */\n as?: as | 'Array' | 'Object' | undefined\n }\n\n type ReturnType<\n abiFunction extends AbiFunction = AbiFunction,\n as extends 'Object' | 'Array' = 'Array',\n > = IsNarrowable extends true\n ? abiFunction['outputs'] extends readonly []\n ? undefined\n : abiFunction['outputs'] extends readonly [\n infer type extends abitype.AbiParameter,\n ]\n ? abitype.AbiParameterToPrimitiveType\n : AbiParameters.decode.ReturnType<\n abiFunction['outputs'],\n as\n > extends infer types\n ? types extends readonly []\n ? undefined\n : types extends readonly [infer type]\n ? type\n : types\n : never\n : unknown\n\n type ErrorType = AbiParameters.decode.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * ABI-encodes function arguments (`inputs`), prefixed with the 4 byte function selector.\n *\n * :::tip\n *\n * This function is typically used to encode a contract function and its arguments for contract calls (e.g. `data` parameter of an `eth_call` or `eth_sendTransaction`).\n *\n * See the [End-to-end Example](#end-to-end).\n *\n * :::\n *\n * @example\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const approve = AbiFunction.from('function approve(address, uint256)')\n *\n * const data = AbiFunction.encodeData( // [!code focus]\n * approve, // [!code focus]\n * ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 69420n] // [!code focus]\n * ) // [!code focus]\n * // @log: '0x095ea7b3000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa960450000000000000000000000000000000000000000000000000000000000010f2c'\n * ```\n *\n * @example\n * You can extract an ABI Function from a JSON ABI with {@link ox#AbiFunction.(fromAbi:function)}:\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const erc20Abi = Abi.from([...]) // [!code hl]\n * const approve = AbiFunction.fromAbi(erc20Abi, 'approve') // [!code hl]\n *\n * const data = AbiFunction.encodeData(\n * approve,\n * ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 69420n]\n * )\n * // @log: '0x095ea7b3000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa960450000000000000000000000000000000000000000000000000000000000010f2c'\n * ```\n *\n * @example\n * ### ABI-shorthand\n *\n * You can specify an entire ABI object and a function name as parameters to {@link ox#AbiFunction.(encodeData:function)}:\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const erc20Abi = Abi.from([...])\n *\n * const data = AbiFunction.encodeData(\n * erc20Abi, // [!code focus]\n * 'approve', // [!code focus]\n * ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 69420n]\n * )\n * ```\n *\n * @example\n * ### End-to-end\n *\n * Below is an end-to-end example of using `AbiFunction.encodeData` to encode the input of a `balanceOf` contract call on the [Wagmi Mint Example contract](https://etherscan.io/address/0xfba3912ca04dd458c843e2ee08967fc04f3579c2).\n *\n * ```ts twoslash\n * import 'ox/window'\n * import { Abi, AbiFunction } from 'ox'\n *\n * // 1. Extract the Function from the Contract's ABI.\n * const abi = Abi.from([\n * // ...\n * {\n * name: 'balanceOf',\n * type: 'function',\n * inputs: [{ name: 'account', type: 'address' }],\n * outputs: [{ name: 'balance', type: 'uint256' }],\n * stateMutability: 'view',\n * },\n * // ...\n * ])\n * const balanceOf = AbiFunction.fromAbi(abi, 'balanceOf')\n *\n * // 2. Encode the Function Input. // [!code focus]\n * const data = AbiFunction.encodeData( // [!code focus]\n * balanceOf, // [!code focus]\n * ['0xd2135CfB216b74109775236E36d4b433F1DF507B'] // [!code focus]\n * ) // [!code focus]\n *\n * // 3. Perform the Contract Call.\n * const response = await window.ethereum!.request({\n * method: 'eth_call',\n * params: [\n * {\n * data,\n * to: '0xfba3912ca04dd458c843e2ee08967fc04f3579c2',\n * },\n * ],\n * })\n *\n * // 4. Decode the Function Output.\n * const balance = AbiFunction.decodeResult(balanceOf, response)\n * ```\n *\n * :::note\n *\n * For simplicity, the above example uses `window.ethereum.request`, but you can use any\n * type of JSON-RPC interface.\n *\n * :::\n *\n * @param abiFunction - ABI Function to encode\n * @param args - Function arguments\n * @returns ABI-encoded function name and arguments\n */\nexport function encodeData<\n const abi extends Abi.Abi | readonly unknown[],\n name extends Name,\n const args extends\n | AbiItem_internal.ExtractArgs\n | undefined = undefined,\n //\n abiFunction extends AbiFunction = AbiItem.fromAbi.ReturnType<\n abi,\n name,\n args,\n AbiFunction\n >,\n allNames = Name,\n>(\n abi: abi | Abi.Abi | readonly unknown[],\n name: Hex.Hex | (name extends allNames ? name : never),\n ...args: encodeData.Args\n): Hex.Hex\nexport function encodeData(\n abiFunction: abiFunction | AbiFunction,\n ...args: encodeData.Args\n): Hex.Hex\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function encodeData(\n ...parameters:\n | [\n abi: Abi.Abi | readonly unknown[],\n name: Hex.Hex | string,\n ...args: readonly unknown[],\n ]\n | [abiFunction: AbiFunction, ...args: readonly unknown[]]\n) {\n const [abiFunction, args = []] = (() => {\n if (Array.isArray(parameters[0])) {\n const [abi, name, args] = parameters as [\n Abi.Abi | readonly unknown[],\n Hex.Hex | string,\n readonly unknown[],\n ]\n return [fromAbi(abi, name, { args }), args]\n }\n const [abiFunction, args] = parameters as [AbiFunction, readonly unknown[]]\n return [abiFunction, args]\n })()\n\n const { overloads } = abiFunction\n\n const item = overloads\n ? (fromAbi([abiFunction as AbiFunction, ...overloads], abiFunction.name, {\n args,\n }) as AbiFunction)\n : abiFunction\n\n const selector = getSelector(item)\n\n const data =\n args.length > 0 ? AbiParameters.encode(item.inputs, args) : undefined\n\n return data ? Hex.concat(selector, data) : selector\n}\n\nexport declare namespace encodeData {\n type Args = IsNarrowable<\n abiFunction,\n AbiFunction\n > extends true\n ?\n | (abitype.AbiParametersToPrimitiveTypes<\n abiFunction['inputs']\n > extends readonly []\n ? []\n : [abitype.AbiParametersToPrimitiveTypes])\n | (abiFunction['overloads'] extends readonly AbiFunction[]\n ? [\n abitype.AbiParametersToPrimitiveTypes<\n abiFunction['overloads'][number]['inputs']\n >,\n ]\n : [])\n : readonly unknown[]\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * ABI-encodes a function's result (`outputs`).\n *\n * @example\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const totalSupply = AbiFunction.from('function totalSupply() returns (uint256)')\n * const output = AbiFunction.decodeResult(totalSupply, '0x000000000000000000000000000000000000000000000000000000000000002a')\n * // 42n\n *\n * const data = AbiFunction.encodeResult(totalSupply, 42n) // [!code focus]\n * // @log: '0x000000000000000000000000000000000000000000000000000000000000002a'\n * ```\n *\n * @example\n * ### ABI-shorthand\n *\n * You can also specify an entire ABI object and a function name as parameters to {@link ox#AbiFunction.(encodeResult:function)}:\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const abi = Abi.from([...])\n *\n * const data = AbiFunction.encodeResult(\n * abi, // [!code focus]\n * 'totalSupply', // [!code focus]\n * 42n\n * )\n * // @log: '0x000000000000000000000000000000000000000000000000000000000000002a'\n * ```\n *\n * @param abiFunction - The ABI item to encode the function output for.\n * @param output - The function output to encode.\n * @param options - Encoding options.\n * @returns The encoded function output.\n */\nexport function encodeResult<\n const abi extends Abi.Abi | readonly unknown[],\n name extends Name,\n const args extends\n | AbiItem_internal.ExtractArgs\n | undefined = undefined,\n as extends 'Object' | 'Array' = 'Array',\n //\n abiFunction extends AbiFunction = AbiItem.fromAbi.ReturnType<\n abi,\n name,\n args,\n AbiFunction\n >,\n allNames = Name,\n>(\n abi: abi | Abi.Abi | readonly unknown[],\n name: Hex.Hex | (name extends allNames ? name : never),\n output: encodeResult.Output,\n options?: encodeResult.Options,\n): Hex.Hex\nexport function encodeResult<\n const abiFunction extends AbiFunction,\n as extends 'Object' | 'Array' = 'Array',\n>(\n abiFunction: abiFunction | AbiFunction,\n output: encodeResult.Output,\n options?: encodeResult.Options,\n): Hex.Hex\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function encodeResult(\n ...parameters:\n | [\n abi: Abi.Abi | readonly unknown[],\n name: Hex.Hex | string,\n output: any,\n options?: encodeResult.Options | undefined,\n ]\n | [\n abiFunction: AbiFunction,\n output: any,\n options?: encodeResult.Options | undefined,\n ]\n) {\n const [abiFunction, output, options = {}] = (() => {\n if (Array.isArray(parameters[0])) {\n const [abi, name, output, options] = parameters as [\n Abi.Abi | readonly unknown[],\n Hex.Hex | string,\n any,\n encodeResult.Options | undefined,\n ]\n return [fromAbi(abi, name), output, options]\n }\n return parameters as [\n AbiFunction,\n any,\n encodeResult.Options | undefined,\n ]\n })()\n\n const { as = 'Array' } = options\n\n const values = (() => {\n if (abiFunction.outputs.length === 1) return [output]\n if (Array.isArray(output)) return output\n if (as === 'Object') return Object.values(output as any)\n return [output]\n })()\n\n return AbiParameters.encode(abiFunction.outputs, values)\n}\n\nexport declare namespace encodeResult {\n type Output<\n abiFunction extends AbiFunction = AbiFunction,\n as extends 'Object' | 'Array' = 'Array',\n > = abiFunction['outputs'] extends readonly []\n ? never\n : abiFunction['outputs']['length'] extends 1\n ? AbiParameters_internal.ToPrimitiveTypes[0]\n : as extends 'Object'\n ? AbiParameters_internal.ToObject\n : AbiParameters_internal.ToPrimitiveTypes\n\n type Options = {\n as?: as | 'Object' | 'Array' | undefined\n }\n\n type ErrorType = AbiParameters.encode.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Formats an {@link ox#AbiFunction.AbiFunction} into a **Human Readable ABI Function**.\n *\n * @example\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const formatted = AbiFunction.format({\n * type: 'function',\n * name: 'approve',\n * stateMutability: 'nonpayable',\n * inputs: [\n * {\n * name: 'spender',\n * type: 'address',\n * },\n * {\n * name: 'amount',\n * type: 'uint256',\n * },\n * ],\n * outputs: [{ type: 'bool' }],\n * })\n *\n * formatted\n * // ^?\n *\n *\n * ```\n *\n * @param abiFunction - The ABI Function to format.\n * @returns The formatted ABI Function.\n */\nexport function format(\n abiFunction: abiFunction | AbiFunction,\n): abitype.FormatAbiItem {\n return abitype.formatAbiItem(abiFunction) as never\n}\n\nexport declare namespace format {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Parses an arbitrary **JSON ABI Function** or **Human Readable ABI Function** into a typed {@link ox#AbiFunction.AbiFunction}.\n *\n * @example\n * ### JSON ABIs\n *\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const approve = AbiFunction.from({\n * type: 'function',\n * name: 'approve',\n * stateMutability: 'nonpayable',\n * inputs: [\n * {\n * name: 'spender',\n * type: 'address',\n * },\n * {\n * name: 'amount',\n * type: 'uint256',\n * },\n * ],\n * outputs: [{ type: 'bool' }],\n * })\n *\n * approve\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Human Readable ABIs\n *\n * A Human Readable ABI can be parsed into a typed ABI object:\n *\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const approve = AbiFunction.from(\n * 'function approve(address spender, uint256 amount) returns (bool)' // [!code hl]\n * )\n *\n * approve\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * It is possible to specify `struct`s along with your definitions:\n *\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const approve = AbiFunction.from([\n * 'struct Foo { address spender; uint256 amount; }', // [!code hl]\n * 'function approve(Foo foo) returns (bool)',\n * ])\n *\n * approve\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n *\n *\n * @param abiFunction - The ABI Function to parse.\n * @returns Typed ABI Function.\n */\nexport function from<\n const abiFunction extends AbiFunction | string | readonly string[],\n>(\n abiFunction: (abiFunction | AbiFunction | string | readonly string[]) &\n (\n | (abiFunction extends string ? internal.Signature : never)\n | (abiFunction extends readonly string[]\n ? internal.Signatures\n : never)\n | AbiFunction\n ),\n options: from.Options = {},\n): from.ReturnType {\n return AbiItem.from(abiFunction as AbiFunction, options) as never\n}\n\nexport declare namespace from {\n type Options = {\n /**\n * Whether or not to prepare the extracted function (optimization for encoding performance).\n * When `true`, the `hash` property is computed and included in the returned value.\n *\n * @default true\n */\n prepare?: boolean | undefined\n }\n\n type ReturnType<\n abiFunction extends AbiFunction | string | readonly string[],\n > = AbiItem.from.ReturnType\n\n type ErrorType = AbiItem.from.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Extracts an {@link ox#AbiFunction.AbiFunction} from an {@link ox#Abi.Abi} given a name and optional arguments.\n *\n * @example\n * ### Extracting by Name\n *\n * ABI Functions can be extracted by their name using the `name` option:\n *\n * ```ts twoslash\n * import { Abi, AbiFunction } from 'ox'\n *\n * const abi = Abi.from([\n * 'function foo()',\n * 'event Transfer(address owner, address to, uint256 tokenId)',\n * 'function bar(string a) returns (uint256 x)',\n * ])\n *\n * const item = AbiFunction.fromAbi(abi, 'foo') // [!code focus]\n * // ^?\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Extracting by Selector\n *\n * ABI Functions can be extract by their selector when {@link ox#Hex.Hex} is provided to `name`.\n *\n * ```ts twoslash\n * import { Abi, AbiFunction } from 'ox'\n *\n * const abi = Abi.from([\n * 'function foo()',\n * 'event Transfer(address owner, address to, uint256 tokenId)',\n * 'function bar(string a) returns (uint256 x)',\n * ])\n * const item = AbiFunction.fromAbi(abi, '0x095ea7b3') // [!code focus]\n * // ^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * :::note\n *\n * Extracting via a hex selector is useful when extracting an ABI Function from an `eth_call` RPC response or\n * from a Transaction `input`.\n *\n * :::\n *\n * @param abi - The ABI to extract from.\n * @param name - The name (or selector) of the ABI item to extract.\n * @param options - Extraction options.\n * @returns The ABI item.\n */\nexport function fromAbi<\n const abi extends Abi.Abi | readonly unknown[],\n name extends Name,\n const args extends\n | AbiItem_internal.ExtractArgs\n | undefined = undefined,\n //\n allNames = Name,\n>(\n abi: abi | Abi.Abi | readonly unknown[],\n name: Hex.Hex | (name extends allNames ? name : never),\n options?: AbiItem.fromAbi.Options<\n abi,\n name,\n args,\n AbiItem_internal.ExtractArgs\n >,\n): AbiItem.fromAbi.ReturnType {\n const item = AbiItem.fromAbi(abi, name, options as any)\n if (item.type !== 'function')\n throw new AbiItem.NotFoundError({ name, type: 'function' })\n return item as never\n}\n\nexport declare namespace fromAbi {\n type ErrorType = AbiItem.fromAbi.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Computes the [4-byte selector](https://solidity-by-example.org/function-selector/) for an {@link ox#AbiFunction.AbiFunction}.\n *\n * Useful for computing function selectors for calldata.\n *\n * @example\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const selector = AbiFunction.getSelector('function ownerOf(uint256 tokenId)')\n * // @log: '0x6352211e'\n * ```\n *\n * @example\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const selector = AbiFunction.getSelector({\n * inputs: [{ type: 'uint256' }],\n * name: 'ownerOf',\n * outputs: [],\n * stateMutability: 'view',\n * type: 'function'\n * })\n * // @log: '0x6352211e'\n * ```\n *\n * @param abiItem - The ABI item to compute the selector for.\n * @returns The first 4 bytes of the {@link ox#Hash.(keccak256:function)} hash of the function signature.\n */\nexport function getSelector(abiItem: string | AbiFunction): Hex.Hex {\n return AbiItem.getSelector(abiItem)\n}\n\nexport declare namespace getSelector {\n type ErrorType = AbiItem.getSelector.ErrorType | Errors.GlobalErrorType\n}\n", "import type { AbiStateMutability, Address, Narrow } from 'abitype'\nimport * as AbiConstructor from 'ox/AbiConstructor'\nimport * as AbiFunction from 'ox/AbiFunction'\n\nimport { parseAccount } from '../../accounts/utils/parseAccount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { ethAddress, zeroAddress } from '../../constants/address.js'\nimport { deploylessCallViaBytecodeBytecode } from '../../constants/contracts.js'\nimport { BaseError } from '../../errors/base.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Block } from '../../types/block.js'\nimport type { Call, Calls } from '../../types/calls.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Log } from '../../types/log.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { MulticallResults } from '../../types/multicall.js'\nimport type { StateOverride } from '../../types/stateOverride.js'\nimport type { Mutable } from '../../types/utils.js'\nimport {\n type EncodeFunctionDataErrorType,\n encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport { hexToBigInt } from '../../utils/index.js'\nimport {\n type CreateAccessListErrorType,\n createAccessList,\n} from './createAccessList.js'\nimport {\n type SimulateBlocksErrorType,\n type SimulateBlocksParameters,\n simulateBlocks,\n} from './simulateBlocks.js'\n\nconst getBalanceCode =\n '0x6080604052348015600e575f80fd5b5061016d8061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063f8b2cb4f1461002d575b5f80fd5b610047600480360381019061004291906100db565b61005d565b604051610054919061011e565b60405180910390f35b5f8173ffffffffffffffffffffffffffffffffffffffff16319050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6100aa82610081565b9050919050565b6100ba816100a0565b81146100c4575f80fd5b50565b5f813590506100d5816100b1565b92915050565b5f602082840312156100f0576100ef61007d565b5b5f6100fd848285016100c7565b91505092915050565b5f819050919050565b61011881610106565b82525050565b5f6020820190506101315f83018461010f565b9291505056fea26469706673582212203b9fe929fe995c7cf9887f0bdba8a36dd78e8b73f149b17d2d9ad7cd09d2dc6264736f6c634300081a0033'\n\nexport type SimulateCallsParameters<\n calls extends readonly unknown[] = readonly unknown[],\n account extends Account | Address | undefined = Account | Address | undefined,\n> = Omit & {\n /** Account attached to the calls (msg.sender). */\n account?: account | undefined\n /** Calls to simulate. */\n calls: Calls>\n /** State overrides. */\n stateOverrides?: StateOverride | undefined\n /** Whether to trace asset changes. */\n traceAssetChanges?: boolean | undefined\n}\n\nexport type SimulateCallsReturnType<\n calls extends readonly unknown[] = readonly unknown[],\n> = {\n /** Asset changes. */\n assetChanges: readonly {\n token: {\n address: Address\n decimals?: number | undefined\n symbol?: string | undefined\n }\n value: { pre: bigint; post: bigint; diff: bigint }\n }[]\n /** Block results. */\n block: Block\n /** Call results. */\n results: MulticallResults<\n Narrow,\n true,\n {\n extraProperties: {\n data: Hex\n gasUsed: bigint\n logs?: Log[] | undefined\n }\n error: Error\n mutability: AbiStateMutability\n }\n >\n}\n\nexport type SimulateCallsErrorType =\n | AbiFunction.encodeData.ErrorType\n | AbiFunction.from.ErrorType\n | CreateAccessListErrorType\n | EncodeFunctionDataErrorType\n | SimulateBlocksErrorType\n | ErrorType\n\n/**\n * Simulates execution of a batch of calls.\n *\n * @param client - Client to use\n * @param parameters - {@link SimulateCallsParameters}\n * @returns Results. {@link SimulateCallsReturnType}\n *\n * @example\n * ```ts\n * import { createPublicClient, http, parseEther } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { simulateCalls } from 'viem/actions'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n *\n * const result = await simulateCalls(client, {\n * account: '0x5a0b54d5dc17e482fe8b0bdca5320161b95fb929',\n * calls: [{\n * {\n * data: '0xdeadbeef',\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * },\n * {\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * value: parseEther('1'),\n * },\n * ]\n * })\n * ```\n */\nexport async function simulateCalls<\n const calls extends readonly unknown[],\n chain extends Chain | undefined,\n account extends Account | Address | undefined = undefined,\n>(\n client: Client,\n parameters: SimulateCallsParameters,\n): Promise> {\n const {\n blockNumber,\n blockTag,\n calls,\n stateOverrides,\n traceAssetChanges,\n traceTransfers,\n validation,\n } = parameters\n\n const account = parameters.account\n ? parseAccount(parameters.account)\n : undefined\n\n if (traceAssetChanges && !account)\n throw new BaseError(\n '`account` is required when `traceAssetChanges` is true',\n )\n\n // Derive bytecode to extract ETH balance via a contract call.\n const getBalanceData = account\n ? AbiConstructor.encode(AbiConstructor.from('constructor(bytes, bytes)'), {\n bytecode: deploylessCallViaBytecodeBytecode,\n args: [\n getBalanceCode,\n AbiFunction.encodeData(\n AbiFunction.from('function getBalance(address)'),\n [account.address],\n ),\n ],\n })\n : undefined\n\n // Fetch ERC20/721 addresses that were \"touched\" from the calls.\n const assetAddresses = traceAssetChanges\n ? await Promise.all(\n parameters.calls.map(async (call: any) => {\n if (!call.data && !call.abi) return\n const { accessList } = await createAccessList(client, {\n account: account!.address,\n ...call,\n data: call.abi ? encodeFunctionData(call) : call.data,\n })\n return accessList.map(({ address, storageKeys }) =>\n storageKeys.length > 0 ? address : null,\n )\n }),\n ).then((x) => x.flat().filter(Boolean))\n : []\n\n const blocks = await simulateBlocks(client, {\n blockNumber,\n blockTag: blockTag as undefined,\n blocks: [\n ...(traceAssetChanges\n ? [\n // ETH pre balances\n {\n calls: [{ data: getBalanceData }],\n stateOverrides,\n },\n\n // Asset pre balances\n {\n calls: assetAddresses.map((address, i) => ({\n abi: [\n AbiFunction.from(\n 'function balanceOf(address) returns (uint256)',\n ),\n ],\n functionName: 'balanceOf',\n args: [account!.address],\n to: address,\n from: zeroAddress,\n nonce: i,\n })),\n stateOverrides: [\n {\n address: zeroAddress,\n nonce: 0,\n },\n ],\n },\n ]\n : []),\n\n {\n calls: [...calls, { to: zeroAddress }].map((call) => ({\n ...(call as Call),\n from: account?.address,\n })) as any,\n stateOverrides,\n },\n\n ...(traceAssetChanges\n ? [\n // ETH post balances\n {\n calls: [{ data: getBalanceData }],\n },\n\n // Asset post balances\n {\n calls: assetAddresses.map((address, i) => ({\n abi: [\n AbiFunction.from(\n 'function balanceOf(address) returns (uint256)',\n ),\n ],\n functionName: 'balanceOf',\n args: [account!.address],\n to: address,\n from: zeroAddress,\n nonce: i,\n })),\n stateOverrides: [\n {\n address: zeroAddress,\n nonce: 0,\n },\n ],\n },\n\n // Decimals\n {\n calls: assetAddresses.map((address, i) => ({\n to: address,\n abi: [\n AbiFunction.from('function decimals() returns (uint256)'),\n ],\n functionName: 'decimals',\n from: zeroAddress,\n nonce: i,\n })),\n stateOverrides: [\n {\n address: zeroAddress,\n nonce: 0,\n },\n ],\n },\n\n // Token URI\n {\n calls: assetAddresses.map((address, i) => ({\n to: address,\n abi: [\n AbiFunction.from(\n 'function tokenURI(uint256) returns (string)',\n ),\n ],\n functionName: 'tokenURI',\n args: [0n],\n from: zeroAddress,\n nonce: i,\n })),\n stateOverrides: [\n {\n address: zeroAddress,\n nonce: 0,\n },\n ],\n },\n\n // Symbols\n {\n calls: assetAddresses.map((address, i) => ({\n to: address,\n abi: [AbiFunction.from('function symbol() returns (string)')],\n functionName: 'symbol',\n from: zeroAddress,\n nonce: i,\n })),\n stateOverrides: [\n {\n address: zeroAddress,\n nonce: 0,\n },\n ],\n },\n ]\n : []),\n ],\n traceTransfers,\n validation,\n })\n\n const block_results = traceAssetChanges ? blocks[2] : blocks[0]\n const [\n block_ethPre,\n block_assetsPre,\n ,\n block_ethPost,\n block_assetsPost,\n block_decimals,\n block_tokenURI,\n block_symbols,\n ] = traceAssetChanges ? blocks : []\n\n // Extract call results from the simulation.\n const { calls: block_calls, ...block } = block_results\n const results = block_calls.slice(0, -1) ?? []\n\n // Extract pre-execution ETH and asset balances.\n const ethPre = block_ethPre?.calls ?? []\n const assetsPre = block_assetsPre?.calls ?? []\n const balancesPre = [...ethPre, ...assetsPre].map((call) =>\n call.status === 'success' ? hexToBigInt(call.data) : null,\n )\n\n // Extract post-execution ETH and asset balances.\n const ethPost = block_ethPost?.calls ?? []\n const assetsPost = block_assetsPost?.calls ?? []\n const balancesPost = [...ethPost, ...assetsPost].map((call) =>\n call.status === 'success' ? hexToBigInt(call.data) : null,\n )\n\n // Extract asset symbols & decimals.\n const decimals = (block_decimals?.calls ?? []).map((x) =>\n x.status === 'success' ? x.result : null,\n ) as (number | null)[]\n const symbols = (block_symbols?.calls ?? []).map((x) =>\n x.status === 'success' ? x.result : null,\n ) as (string | null)[]\n const tokenURI = (block_tokenURI?.calls ?? []).map((x) =>\n x.status === 'success' ? x.result : null,\n ) as (string | null)[]\n\n const changes: Mutable['assetChanges']> = []\n for (const [i, balancePost] of balancesPost.entries()) {\n const balancePre = balancesPre[i]\n\n if (typeof balancePost !== 'bigint') continue\n if (typeof balancePre !== 'bigint') continue\n\n const decimals_ = decimals[i - 1]\n const symbol_ = symbols[i - 1]\n const tokenURI_ = tokenURI[i - 1]\n\n const token = (() => {\n if (i === 0)\n return {\n address: ethAddress,\n decimals: 18,\n symbol: 'ETH',\n }\n\n return {\n address: assetAddresses[i - 1]! as Address,\n decimals: tokenURI_ || decimals_ ? Number(decimals_ ?? 1) : undefined,\n symbol: symbol_ ?? undefined,\n }\n })()\n\n if (changes.some((change) => change.token.address === token.address))\n continue\n\n changes.push({\n token,\n value: {\n pre: balancePre,\n post: balancePost,\n diff: balancePost - balancePre,\n },\n })\n }\n\n return {\n assetChanges: changes,\n block,\n results,\n } as unknown as SimulateCallsReturnType\n}\n", "export const ethAddress = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' as const\n\nexport const zeroAddress = '0x0000000000000000000000000000000000000000' as const\n", "import type * as Abi from '../core/Abi.js'\nimport * as AbiParameters from '../core/AbiParameters.js'\nimport type * as Address from '../core/Address.js'\nimport * as Errors from '../core/Errors.js'\nimport * as Hex from '../core/Hex.js'\nimport type * as Signature from '../core/Signature.js'\n\n/** Unwrapped ERC-6492 signature. */\nexport type Unwrapped = {\n /** Calldata to pass to the target address for counterfactual verification. */\n data: Hex.Hex\n /** The original signature. */\n signature: Hex.Hex\n /** The target address to use for counterfactual verification. */\n to: Address.Address\n}\n\n/** Wrapped ERC-6492 signature. */\nexport type Wrapped = Hex.Hex\n\n/**\n * Magic bytes used to identify ERC-6492 wrapped signatures.\n */\nexport const magicBytes =\n '0x6492649264926492649264926492649264926492649264926492649264926492' as const\n\n/**\n * Deployless ERC-6492 signature verification bytecode.\n */\nexport const universalSignatureValidatorBytecode =\n '0x608060405234801561001057600080fd5b5060405161069438038061069483398101604081905261002f9161051e565b600061003c848484610048565b9050806000526001601ff35b60007f64926492649264926492649264926492649264926492649264926492649264926100748361040c565b036101e7576000606080848060200190518101906100929190610577565b60405192955090935091506000906001600160a01b038516906100b69085906105dd565b6000604051808303816000865af19150503d80600081146100f3576040519150601f19603f3d011682016040523d82523d6000602084013e6100f8565b606091505b50509050876001600160a01b03163b60000361016057806101605760405162461bcd60e51b815260206004820152601e60248201527f5369676e617475726556616c696461746f723a206465706c6f796d656e74000060448201526064015b60405180910390fd5b604051630b135d3f60e11b808252906001600160a01b038a1690631626ba7e90610190908b9087906004016105f9565b602060405180830381865afa1580156101ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d19190610633565b6001600160e01b03191614945050505050610405565b6001600160a01b0384163b1561027a57604051630b135d3f60e11b808252906001600160a01b03861690631626ba7e9061022790879087906004016105f9565b602060405180830381865afa158015610244573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102689190610633565b6001600160e01b031916149050610405565b81516041146102df5760405162461bcd60e51b815260206004820152603a602482015260008051602061067483398151915260448201527f3a20696e76616c6964207369676e6174757265206c656e6774680000000000006064820152608401610157565b6102e7610425565b5060208201516040808401518451859392600091859190811061030c5761030c61065d565b016020015160f81c9050601b811480159061032b57508060ff16601c14155b1561038c5760405162461bcd60e51b815260206004820152603b602482015260008051602061067483398151915260448201527f3a20696e76616c6964207369676e617475726520762076616c756500000000006064820152608401610157565b60408051600081526020810180835289905260ff83169181019190915260608101849052608081018390526001600160a01b0389169060019060a0016020604051602081039080840390855afa1580156103ea573d6000803e3d6000fd5b505050602060405103516001600160a01b0316149450505050505b9392505050565b600060208251101561041d57600080fd5b508051015190565b60405180606001604052806003906020820280368337509192915050565b6001600160a01b038116811461045857600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561048c578181015183820152602001610474565b50506000910152565b600082601f8301126104a657600080fd5b81516001600160401b038111156104bf576104bf61045b565b604051601f8201601f19908116603f011681016001600160401b03811182821017156104ed576104ed61045b565b60405281815283820160200185101561050557600080fd5b610516826020830160208701610471565b949350505050565b60008060006060848603121561053357600080fd5b835161053e81610443565b6020850151604086015191945092506001600160401b0381111561056157600080fd5b61056d86828701610495565b9150509250925092565b60008060006060848603121561058c57600080fd5b835161059781610443565b60208501519093506001600160401b038111156105b357600080fd5b6105bf86828701610495565b604086015190935090506001600160401b0381111561056157600080fd5b600082516105ef818460208701610471565b9190910192915050565b828152604060208201526000825180604084015261061e816060850160208701610471565b601f01601f1916919091016060019392505050565b60006020828403121561064557600080fd5b81516001600160e01b03198116811461040557600080fd5b634e487b7160e01b600052603260045260246000fdfe5369676e617475726556616c696461746f72237265636f7665725369676e6572'\n\n/**\n * ABI for the ERC-6492 universal deployless signature validator contract.\n *\n * Constructor return value is `0x1` (valid) or `0x0` (invalid).\n */\nexport const universalSignatureValidatorAbi = [\n {\n inputs: [\n {\n name: '_signer',\n type: 'address',\n },\n {\n name: '_hash',\n type: 'bytes32',\n },\n {\n name: '_signature',\n type: 'bytes',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'constructor',\n },\n {\n inputs: [\n {\n name: '_signer',\n type: 'address',\n },\n {\n name: '_hash',\n type: 'bytes32',\n },\n {\n name: '_signature',\n type: 'bytes',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n name: 'isValidSig',\n },\n] as const satisfies Abi.Abi\n\n/**\n * Asserts that the wrapped signature is valid.\n *\n * @example\n * ```ts twoslash\n * import { SignatureErc6492 } from 'ox/erc6492'\n *\n * SignatureErc6492.assert('0xdeadbeef')\n * // @error: InvalidWrappedSignatureError: Value `0xdeadbeef` is an invalid ERC-6492 wrapped signature.\n * ```\n *\n * @param wrapped - The wrapped signature to assert.\n */\nexport function assert(wrapped: Wrapped) {\n if (Hex.slice(wrapped, -32) !== magicBytes)\n throw new InvalidWrappedSignatureError(wrapped)\n}\n\nexport declare namespace assert {\n type ErrorType =\n | InvalidWrappedSignatureError\n | Hex.slice.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Parses an [ERC-6492 wrapped signature](https://eips.ethereum.org/EIPS/eip-6492#specification) into its constituent parts.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Secp256k1 } from 'ox'\n * import { SignatureErc6492 } from 'ox/erc6492' // [!code focus]\n *\n * const signature = Secp256k1.sign({\n * payload: '0x...',\n * privateKey: '0x...',\n * })\n *\n * // Instantiate from serialized format. // [!code focus]\n * const wrapped = SignatureErc6492.from('0x...') // [!code focus]\n * // @log: { data: '0x...', signature: { ... }, to: '0x...', } // [!code focus]\n *\n * // Instantiate from constituent parts. // [!code focus]\n * const wrapped = SignatureErc6492.from({ // [!code focus]\n * data: '0x...', // [!code focus]\n * signature, // [!code focus]\n * to: '0x...', // [!code focus]\n * })\n * // @log: { data: '0x...', signature: { ... }, to: '0x...', }\n * ```\n *\n * @param wrapped - Wrapped signature to parse.\n * @returns Wrapped signature.\n */\nexport function from(wrapped: Unwrapped | Wrapped): Unwrapped {\n if (typeof wrapped === 'string') return unwrap(wrapped)\n return wrapped\n}\n\nexport declare namespace from {\n type ReturnType = Unwrapped\n\n type ErrorType =\n | AbiParameters.from.ErrorType\n | AbiParameters.decode.ErrorType\n | Signature.fromHex.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Parses an [ERC-6492 wrapped signature](https://eips.ethereum.org/EIPS/eip-6492#specification) into its constituent parts.\n *\n * @example\n * ```ts twoslash\n * import { SignatureErc6492 } from 'ox/erc6492'\n *\n * const { data, signature, to } = SignatureErc6492.unwrap('0x...')\n * ```\n *\n * @param wrapped - Wrapped signature to parse.\n * @returns Wrapped signature.\n */\nexport function unwrap(wrapped: Wrapped): Unwrapped {\n assert(wrapped)\n\n const [to, data, signature] = AbiParameters.decode(\n AbiParameters.from('address, bytes, bytes'),\n wrapped,\n )\n\n return { data, signature, to }\n}\n\nexport declare namespace unwrap {\n type ErrorType =\n | AbiParameters.from.ErrorType\n | AbiParameters.decode.ErrorType\n | Signature.fromHex.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Serializes an [ERC-6492 wrapped signature](https://eips.ethereum.org/EIPS/eip-6492#specification).\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1, Signature } from 'ox'\n * import { SignatureErc6492 } from 'ox/erc6492' // [!code focus]\n *\n * const signature = Secp256k1.sign({\n * payload: '0x...',\n * privateKey: '0x...',\n * })\n *\n * const wrapped = SignatureErc6492.wrap({ // [!code focus]\n * data: '0xdeadbeef', // [!code focus]\n * signature: Signature.toHex(signature), // [!code focus]\n * to: '0x00000000219ab540356cBB839Cbe05303d7705Fa', // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param value - Wrapped signature to serialize.\n * @returns Serialized wrapped signature.\n */\nexport function wrap(value: Unwrapped): Wrapped {\n const { data, signature, to } = value\n\n return Hex.concat(\n AbiParameters.encode(AbiParameters.from('address, bytes, bytes'), [\n to,\n data,\n signature,\n ]),\n magicBytes,\n )\n}\n\nexport declare namespace wrap {\n type ErrorType =\n | AbiParameters.encode.ErrorType\n | Hex.concat.ErrorType\n | Signature.toHex.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Validates a wrapped signature. Returns `true` if the wrapped signature is valid, `false` otherwise.\n *\n * @example\n * ```ts twoslash\n * import { SignatureErc6492 } from 'ox/erc6492'\n *\n * const valid = SignatureErc6492.validate('0xdeadbeef')\n * // @log: false\n * ```\n *\n * @param wrapped - The wrapped signature to validate.\n * @returns `true` if the wrapped signature is valid, `false` otherwise.\n */\nexport function validate(wrapped: Wrapped): boolean {\n try {\n assert(wrapped)\n return true\n } catch {\n return false\n }\n}\n\nexport declare namespace validate {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/** Thrown when the ERC-6492 wrapped signature is invalid. */\nexport class InvalidWrappedSignatureError extends Errors.BaseError {\n override readonly name = 'SignatureErc6492.InvalidWrappedSignatureError'\n\n constructor(wrapped: Wrapped) {\n super(`Value \\`${wrapped}\\` is an invalid ERC-6492 wrapped signature.`)\n }\n}\n", "import type { Address } from 'abitype'\nimport { SignatureErc6492 } from 'ox/erc6492'\nimport { SignatureErc8010 } from 'ox/erc8010'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n erc1271Abi,\n erc6492SignatureValidatorAbi,\n multicall3Abi,\n} from '../../constants/abis.js'\nimport {\n erc6492SignatureValidatorByteCode,\n multicall3Bytecode,\n} from '../../constants/contracts.js'\nimport {\n CallExecutionError,\n ContractFunctionExecutionError,\n} from '../../errors/contract.js'\nimport type { InvalidHexBooleanError } from '../../errors/encoding.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { ByteArray, Hex, Signature } from '../../types/misc.js'\nimport type { OneOf } from '../../types/utils.js'\nimport {\n type EncodeDeployDataErrorType,\n encodeDeployData,\n} from '../../utils/abi/encodeDeployData.js'\nimport {\n type EncodeFunctionDataErrorType,\n encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport {\n type GetAddressErrorType,\n getAddress,\n} from '../../utils/address/getAddress.js'\nimport {\n type IsAddressEqualErrorType,\n isAddressEqual,\n} from '../../utils/address/isAddressEqual.js'\nimport { verifyAuthorization } from '../../utils/authorization/verifyAuthorization.js'\nimport { type ConcatHexErrorType, concatHex } from '../../utils/data/concat.js'\nimport { type IsHexErrorType, isHex } from '../../utils/data/isHex.js'\nimport { hexToBool } from '../../utils/encoding/fromHex.js'\nimport {\n type BytesToHexErrorType,\n bytesToHex,\n type NumberToHexErrorType,\n numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n type RecoverAddressErrorType,\n recoverAddress,\n} from '../../utils/signature/recoverAddress.js'\nimport {\n type SerializeSignatureErrorType,\n serializeSignature,\n} from '../../utils/signature/serializeSignature.js'\nimport { type CallErrorType, type CallParameters, call } from './call.js'\nimport { type GetCodeErrorType, getCode } from './getCode.js'\nimport { type ReadContractErrorType, readContract } from './readContract.js'\n\nexport type VerifyHashParameters = Pick<\n CallParameters,\n 'blockNumber' | 'blockTag'\n> & {\n /** The address that signed the original message. */\n address: Address\n /** The chain to use. */\n chain?: Chain | null | undefined\n /** The address of the ERC-6492 signature verifier contract. */\n erc6492VerifierAddress?: Address | undefined\n /** The hash to be verified. */\n hash: Hex\n /** Multicall3 address for ERC-8010 verification. */\n multicallAddress?: Address | undefined\n /** The signature that was generated by signing the message with the address's private key. */\n signature: Hex | ByteArray | Signature\n /** @deprecated use `erc6492VerifierAddress` instead. */\n universalSignatureVerifierAddress?: Address | undefined\n /** Chooses which verification path to try first before falling back. */\n mode?: 'auto' | 'eoa' | (string & {}) | undefined\n} & OneOf<{ factory: Address; factoryData: Hex } | {}>\n\nexport type VerifyHashReturnType = boolean\n\nexport type VerifyHashErrorType =\n | BytesToHexErrorType\n | CallErrorType\n | ConcatHexErrorType\n | EncodeDeployDataErrorType\n | EncodeFunctionDataErrorType\n | ErrorType\n | GetAddressErrorType\n | GetCodeErrorType\n | InvalidHexBooleanError\n | IsAddressEqualErrorType\n | IsHexErrorType\n | NumberToHexErrorType\n | ReadContractErrorType\n | RecoverAddressErrorType\n | SerializeSignatureErrorType\n\n/**\n * Verifies a message hash onchain using ERC-6492.\n *\n * @param client - Client to use.\n * @param parameters - {@link VerifyHashParameters}\n * @returns Whether or not the signature is valid. {@link VerifyHashReturnType}\n */\nexport async function verifyHash(\n client: Client,\n parameters: VerifyHashParameters,\n): Promise {\n const {\n address,\n chain = client.chain,\n hash,\n erc6492VerifierAddress:\n verifierAddress = parameters.universalSignatureVerifierAddress ??\n chain?.contracts?.erc6492Verifier?.address,\n multicallAddress = parameters.multicallAddress ??\n chain?.contracts?.multicall3?.address,\n mode = 'auto',\n } = parameters\n\n if (chain?.verifyHash) return await chain.verifyHash(client, parameters)\n\n const signature = (() => {\n const signature = parameters.signature\n if (isHex(signature)) return signature\n if (typeof signature === 'object' && 'r' in signature && 's' in signature)\n return serializeSignature(signature)\n return bytesToHex(signature)\n })()\n try {\n if (mode === 'eoa') {\n try {\n const verified = isAddressEqual(\n getAddress(address),\n await recoverAddress({ hash, signature }),\n )\n if (verified) return true\n } catch {}\n }\n\n if (SignatureErc8010.validate(signature))\n return await verifyErc8010(client, {\n ...parameters,\n multicallAddress,\n signature,\n })\n return await verifyErc6492(client, {\n ...parameters,\n verifierAddress,\n signature,\n })\n } catch (error) {\n if (mode !== 'eoa') {\n // Fallback attempt to verify the signature via ECDSA recovery.\n try {\n const verified = isAddressEqual(\n getAddress(address),\n await recoverAddress({ hash, signature }),\n )\n if (verified) return true\n } catch {}\n }\n\n if (error instanceof VerificationError) {\n // if the execution fails, the signature was not valid and an internal method inside of the validator reverted\n // this can happen for many reasons, for example if signer can not be recovered from the signature\n // or if the signature has no valid format\n return false\n }\n\n throw error\n }\n}\n\n/** @internal */\nexport async function verifyErc8010(\n client: Client,\n parameters: verifyErc8010.Parameters,\n) {\n const { address, blockNumber, blockTag, hash, multicallAddress } = parameters\n\n const {\n authorization: authorization_ox,\n data: initData,\n signature,\n to,\n } = SignatureErc8010.unwrap(parameters.signature)\n\n // Check if already delegated\n const code = await getCode(client, {\n address,\n blockNumber,\n blockTag,\n } as never)\n\n // If already delegated, perform standard ERC-1271 verification.\n if (code === concatHex(['0xef0100', authorization_ox.address]))\n return await verifyErc1271(client, {\n address,\n blockNumber,\n blockTag,\n hash,\n signature,\n })\n\n const authorization = {\n address: authorization_ox.address,\n chainId: Number(authorization_ox.chainId),\n nonce: Number(authorization_ox.nonce),\n r: numberToHex(authorization_ox.r, { size: 32 }),\n s: numberToHex(authorization_ox.s, { size: 32 }),\n yParity: authorization_ox.yParity,\n } as const\n\n const valid = await verifyAuthorization({\n address,\n authorization,\n })\n if (!valid) throw new VerificationError()\n\n // Deployless verification.\n const results = await getAction(\n client,\n readContract,\n 'readContract',\n )({\n ...(multicallAddress\n ? { address: multicallAddress }\n : { code: multicall3Bytecode }),\n authorizationList: [authorization],\n abi: multicall3Abi,\n blockNumber,\n blockTag: 'pending',\n functionName: 'aggregate3',\n args: [\n [\n ...(initData\n ? ([\n {\n allowFailure: true,\n target: to ?? address,\n callData: initData,\n },\n ] as const)\n : []),\n {\n allowFailure: true,\n target: address,\n callData: encodeFunctionData({\n abi: erc1271Abi,\n functionName: 'isValidSignature',\n args: [hash, signature],\n }),\n },\n ],\n ],\n })\n\n const data = results[results.length - 1]?.returnData\n\n if (data?.startsWith('0x1626ba7e')) return true\n throw new VerificationError()\n}\n\nexport namespace verifyErc8010 {\n export type Parameters = Pick & {\n /** The address that signed the original message. */\n address: Address\n /** The hash to be verified. */\n hash: Hex\n /** Multicall3 address for ERC-8010 verification. */\n multicallAddress?: Address | undefined\n /** The signature that was generated by signing the message with the address's private key. */\n signature: Hex\n }\n}\n\n/** @internal */\n// biome-ignore lint/correctness/noUnusedVariables: _\nasync function verifyErc6492(\n client: Client,\n parameters: verifyErc6492.Parameters,\n) {\n const {\n address,\n factory,\n factoryData,\n hash,\n signature,\n verifierAddress,\n ...rest\n } = parameters\n\n const wrappedSignature = await (async () => {\n // If no `factory` or `factoryData` is provided, it is assumed that the\n // address is not a Smart Account, or the Smart Account is already deployed.\n if (!factory && !factoryData) return signature\n\n // If the signature is already wrapped, return the signature.\n if (SignatureErc6492.validate(signature)) return signature\n\n // If the Smart Account is not deployed, wrap the signature with a 6492 wrapper\n // to perform counterfactual validation.\n return SignatureErc6492.wrap({\n data: factoryData!,\n signature,\n to: factory!,\n })\n })()\n\n const args = verifierAddress\n ? ({\n to: verifierAddress,\n data: encodeFunctionData({\n abi: erc6492SignatureValidatorAbi,\n functionName: 'isValidSig',\n args: [address, hash, wrappedSignature],\n }),\n ...rest,\n } as unknown as CallParameters)\n : ({\n data: encodeDeployData({\n abi: erc6492SignatureValidatorAbi,\n args: [address, hash, wrappedSignature],\n bytecode: erc6492SignatureValidatorByteCode,\n }),\n ...rest,\n } as unknown as CallParameters)\n\n const { data } = await getAction(\n client,\n call,\n 'call',\n )(args).catch((error) => {\n if (error instanceof CallExecutionError) throw new VerificationError()\n throw error\n })\n\n if (hexToBool(data ?? '0x0')) return true\n throw new VerificationError()\n}\n\nexport namespace verifyErc6492 {\n export type Parameters = Pick & {\n /** The address that signed the original message. */\n address: Address\n /** The hash to be verified. */\n hash: Hex\n /** The signature that was generated by signing the message with the address's private key. */\n signature: Hex\n /** The address of the ERC-6492 signature verifier contract. */\n verifierAddress?: Address | undefined\n } & OneOf<{ factory: Address; factoryData: Hex } | {}>\n}\n\n/** @internal */\nexport async function verifyErc1271(\n client: Client,\n parameters: verifyErc1271.Parameters,\n) {\n const { address, blockNumber, blockTag, hash, signature } = parameters\n\n const result = await getAction(\n client,\n readContract,\n 'readContract',\n )({\n address,\n abi: erc1271Abi,\n args: [hash, signature],\n blockNumber,\n blockTag,\n functionName: 'isValidSignature',\n }).catch((error) => {\n if (error instanceof ContractFunctionExecutionError)\n throw new VerificationError()\n throw error\n })\n\n if (result.startsWith('0x1626ba7e')) return true\n throw new VerificationError()\n}\n\nexport namespace verifyErc1271 {\n export type Parameters = Pick & {\n /** The address that signed the original message. */\n address: Address\n /** The hash to be verified. */\n hash: Hex\n /** The signature that was generated by signing the message with the address's private key. */\n signature: Hex\n }\n}\n\nclass VerificationError extends Error {}\n", "import { secp256k1 } from '@noble/curves/secp256k1'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex, Signature } from '../../types/misc.js'\nimport { type HexToBigIntErrorType, hexToBigInt } from '../encoding/fromHex.js'\nimport { hexToBytes } from '../encoding/toBytes.js'\nimport type { ToHexErrorType } from '../encoding/toHex.js'\n\ntype To = 'bytes' | 'hex'\n\nexport type SerializeSignatureParameters = Signature & {\n to?: to | To | undefined\n}\n\nexport type SerializeSignatureReturnType =\n | (to extends 'hex' ? Hex : never)\n | (to extends 'bytes' ? ByteArray : never)\n\nexport type SerializeSignatureErrorType =\n | HexToBigIntErrorType\n | ToHexErrorType\n | ErrorType\n\n/**\n * @description Converts a signature into hex format.\n *\n * @param signature The signature to convert.\n * @returns The signature in hex format.\n *\n * @example\n * serializeSignature({\n * r: '0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf',\n * s: '0x4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db8',\n * yParity: 1\n * })\n * // \"0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db81c\"\n */\nexport function serializeSignature({\n r,\n s,\n to = 'hex',\n v,\n yParity,\n}: SerializeSignatureParameters): SerializeSignatureReturnType {\n const yParity_ = (() => {\n if (yParity === 0 || yParity === 1) return yParity\n if (v && (v === 27n || v === 28n || v >= 35n)) return v % 2n === 0n ? 1 : 0\n throw new Error('Invalid `v` or `yParity` value')\n })()\n const signature = `0x${new secp256k1.Signature(\n hexToBigInt(r),\n hexToBigInt(s),\n ).toCompactHex()}${yParity_ === 0 ? '1b' : '1c'}` as const\n\n if (to === 'hex') return signature as SerializeSignatureReturnType\n return hexToBytes(signature) as SerializeSignatureReturnType\n}\n", "import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n ByteArray,\n Hex,\n SignableMessage,\n Signature,\n} from '../../types/misc.js'\nimport type { Prettify } from '../../types/utils.js'\nimport { getAction } from '../../utils/getAction.js'\nimport type { HashMessageErrorType } from '../../utils/signature/hashMessage.js'\nimport { hashMessage } from '../../utils/signature/hashMessage.js'\nimport {\n type VerifyHashErrorType,\n type VerifyHashParameters,\n verifyHash,\n} from './verifyHash.js'\n\nexport type VerifyMessageParameters = Prettify<\n Omit & {\n /** The address that signed the original message. */\n address: Address\n /** The message to be verified. */\n message: SignableMessage\n /** The signature that was generated by signing the message with the address's private key. */\n signature: Hex | ByteArray | Signature\n }\n>\n\nexport type VerifyMessageReturnType = boolean\n\nexport type VerifyMessageErrorType =\n | HashMessageErrorType\n | VerifyHashErrorType\n | ErrorType\n\n/**\n * Verify that a message was signed by the provided address.\n *\n * Compatible with Smart Contract Accounts & Externally Owned Accounts via [ERC-6492](https://eips.ethereum.org/EIPS/eip-6492).\n *\n * - Docs {@link https://viem.sh/docs/actions/public/verifyMessage}\n *\n * @param client - Client to use.\n * @param parameters - {@link VerifyMessageParameters}\n * @returns Whether or not the signature is valid. {@link VerifyMessageReturnType}\n */\nexport async function verifyMessage(\n client: Client,\n {\n address,\n message,\n factory,\n factoryData,\n signature,\n ...callRequest\n }: VerifyMessageParameters,\n): Promise {\n const hash = hashMessage(message)\n return getAction(\n client,\n verifyHash,\n 'verifyHash',\n )({\n address,\n factory: factory!,\n factoryData: factoryData!,\n hash,\n signature,\n ...callRequest,\n })\n}\n", "import type { Address, TypedData } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { ByteArray, Hex, Signature } from '../../types/misc.js'\nimport type { TypedDataDefinition } from '../../types/typedData.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n type HashTypedDataErrorType,\n hashTypedData,\n} from '../../utils/signature/hashTypedData.js'\nimport {\n type VerifyHashErrorType,\n type VerifyHashParameters,\n verifyHash,\n} from './verifyHash.js'\n\nexport type VerifyTypedDataParameters<\n typedData extends TypedData | Record = TypedData,\n primaryType extends keyof typedData | 'EIP712Domain' = keyof typedData,\n> = Omit &\n TypedDataDefinition & {\n /** The address to verify the typed data for. */\n address: Address\n /** The signature to verify */\n signature: Hex | ByteArray | Signature\n }\n\nexport type VerifyTypedDataReturnType = boolean\n\nexport type VerifyTypedDataErrorType =\n | HashTypedDataErrorType\n | VerifyHashErrorType\n | ErrorType\n\n/**\n * Verify that typed data was signed by the provided address.\n *\n * - Docs {@link https://viem.sh/docs/actions/public/verifyTypedData}\n *\n * @param client - Client to use.\n * @param parameters - {@link VerifyTypedDataParameters}\n * @returns Whether or not the signature is valid. {@link VerifyTypedDataReturnType}\n */\nexport async function verifyTypedData<\n const typedData extends TypedData | Record,\n primaryType extends keyof typedData | 'EIP712Domain',\n chain extends Chain | undefined,\n>(\n client: Client,\n parameters: VerifyTypedDataParameters,\n): Promise {\n const {\n address,\n factory,\n factoryData,\n signature,\n message,\n primaryType,\n types,\n domain,\n ...callRequest\n } = parameters as VerifyTypedDataParameters\n const hash = hashTypedData({ message, primaryType, types, domain })\n return getAction(\n client,\n verifyHash,\n 'verifyHash',\n )({\n address,\n factory: factory!,\n factoryData: factoryData!,\n hash,\n signature,\n ...callRequest,\n })\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { BlockNotFoundError } from '../../errors/block.js'\nimport {\n TransactionNotFoundError,\n TransactionReceiptNotFoundError,\n WaitForTransactionReceiptTimeoutError,\n type WaitForTransactionReceiptTimeoutErrorType,\n} from '../../errors/transaction.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { Transaction } from '../../types/transaction.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { type ObserveErrorType, observe } from '../../utils/observe.js'\nimport { withResolvers } from '../../utils/promise/withResolvers.js'\nimport {\n type WithRetryParameters,\n withRetry,\n} from '../../utils/promise/withRetry.js'\nimport { stringify } from '../../utils/stringify.js'\n\nimport { type GetBlockErrorType, getBlock } from './getBlock.js'\nimport {\n type GetTransactionErrorType,\n type GetTransactionReturnType,\n getTransaction,\n} from './getTransaction.js'\nimport {\n type GetTransactionReceiptErrorType,\n type GetTransactionReceiptReturnType,\n getTransactionReceipt,\n} from './getTransactionReceipt.js'\nimport {\n type WatchBlockNumberErrorType,\n watchBlockNumber,\n} from './watchBlockNumber.js'\n\nexport type ReplacementReason = 'cancelled' | 'replaced' | 'repriced'\nexport type ReplacementReturnType<\n chain extends Chain | undefined = Chain | undefined,\n> = {\n reason: ReplacementReason\n replacedTransaction: Transaction\n transaction: Transaction\n transactionReceipt: GetTransactionReceiptReturnType\n}\n\nexport type WaitForTransactionReceiptReturnType<\n chain extends Chain | undefined = Chain | undefined,\n> = GetTransactionReceiptReturnType\n\nexport type WaitForTransactionReceiptParameters<\n chain extends Chain | undefined = Chain | undefined,\n> = {\n /**\n * Whether to check for transaction replacements.\n * @default true\n */\n checkReplacement?: boolean | undefined\n /**\n * The number of confirmations (blocks that have passed) to wait before resolving.\n * @default 1\n */\n confirmations?: number | undefined\n /** The hash of the transaction. */\n hash: Hash\n /** Optional callback to emit if the transaction has been replaced. */\n onReplaced?: ((response: ReplacementReturnType) => void) | undefined\n /**\n * Polling frequency (in ms). Defaults to the client's pollingInterval config.\n * @default client.pollingInterval\n */\n pollingInterval?: number | undefined\n /**\n * Number of times to retry if the transaction or block is not found.\n * @default 6 (exponential backoff)\n */\n retryCount?: WithRetryParameters['retryCount'] | undefined\n /**\n * Time to wait (in ms) between retries.\n * @default `({ count }) => ~~(1 << count) * 200` (exponential backoff)\n */\n retryDelay?: WithRetryParameters['delay'] | undefined\n /**\n * Optional timeout (in milliseconds) to wait before stopping polling.\n * @default 180_000\n */\n timeout?: number | undefined\n}\n\nexport type WaitForTransactionReceiptErrorType =\n | ObserveErrorType\n | GetBlockErrorType\n | GetTransactionErrorType\n | GetTransactionReceiptErrorType\n | WatchBlockNumberErrorType\n | WaitForTransactionReceiptTimeoutErrorType\n | ErrorType\n\n/**\n * Waits for the [Transaction](https://viem.sh/docs/glossary/terms#transaction) to be included on a [Block](https://viem.sh/docs/glossary/terms#block) (one confirmation), and then returns the [Transaction Receipt](https://viem.sh/docs/glossary/terms#transaction-receipt).\n *\n * - Docs: https://viem.sh/docs/actions/public/waitForTransactionReceipt\n * - Example: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_sending-transactions\n * - JSON-RPC Methods:\n * - Polls [`eth_getTransactionReceipt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionReceipt) on each block until it has been processed.\n * - If a Transaction has been replaced:\n * - Calls [`eth_getBlockByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblockbynumber) and extracts the transactions\n * - Checks if one of the Transactions is a replacement\n * - If so, calls [`eth_getTransactionReceipt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionReceipt).\n *\n * The `waitForTransactionReceipt` action additionally supports Replacement detection (e.g. sped up Transactions).\n *\n * Transactions can be replaced when a user modifies their transaction in their wallet (to speed up or cancel). Transactions are replaced when they are sent from the same nonce.\n *\n * There are 3 types of Transaction Replacement reasons:\n *\n * - `repriced`: The gas price has been modified (e.g. different `maxFeePerGas`)\n * - `cancelled`: The Transaction has been cancelled (e.g. `value === 0n`)\n * - `replaced`: The Transaction has been replaced (e.g. different `value` or `data`)\n *\n * @param client - Client to use\n * @param parameters - {@link WaitForTransactionReceiptParameters}\n * @returns The transaction receipt. {@link WaitForTransactionReceiptReturnType}\n *\n * @example\n * import { createPublicClient, waitForTransactionReceipt, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const transactionReceipt = await waitForTransactionReceipt(client, {\n * hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',\n * })\n */\nexport async function waitForTransactionReceipt<\n chain extends Chain | undefined,\n>(\n client: Client,\n parameters: WaitForTransactionReceiptParameters,\n): Promise> {\n const {\n checkReplacement = true,\n confirmations = 1,\n hash,\n onReplaced,\n retryCount = 6,\n retryDelay = ({ count }) => ~~(1 << count) * 200, // exponential backoff\n timeout = 180_000,\n } = parameters\n\n const observerId = stringify(['waitForTransactionReceipt', client.uid, hash])\n\n const pollingInterval = (() => {\n if (parameters.pollingInterval) return parameters.pollingInterval\n if (client.chain?.experimental_preconfirmationTime)\n return client.chain.experimental_preconfirmationTime\n return client.pollingInterval\n })()\n\n let transaction: GetTransactionReturnType | undefined\n let replacedTransaction: GetTransactionReturnType | undefined\n let receipt: GetTransactionReceiptReturnType | undefined\n let retrying = false\n\n let _unobserve: () => void\n let _unwatch: () => void\n\n const { promise, resolve, reject } =\n withResolvers>()\n\n const timer = timeout\n ? setTimeout(() => {\n _unwatch?.()\n _unobserve?.()\n reject(new WaitForTransactionReceiptTimeoutError({ hash }))\n }, timeout)\n : undefined\n\n _unobserve = observe(\n observerId,\n { onReplaced, resolve, reject },\n async (emit) => {\n receipt = await getAction(\n client,\n getTransactionReceipt,\n 'getTransactionReceipt',\n )({ hash }).catch(() => undefined)\n\n if (receipt && confirmations <= 1) {\n clearTimeout(timer)\n emit.resolve(receipt)\n _unobserve?.()\n return\n }\n\n _unwatch = getAction(\n client,\n watchBlockNumber,\n 'watchBlockNumber',\n )({\n emitMissed: true,\n emitOnBegin: true,\n poll: true,\n pollingInterval,\n async onBlockNumber(blockNumber_) {\n const done = (fn: () => void) => {\n clearTimeout(timer)\n _unwatch?.()\n fn()\n _unobserve?.()\n }\n\n let blockNumber = blockNumber_\n\n if (retrying) return\n\n try {\n // If we already have a valid receipt, let's check if we have enough\n // confirmations. If we do, then we can resolve.\n if (receipt) {\n if (\n confirmations > 1 &&\n (!receipt.blockNumber ||\n blockNumber - receipt.blockNumber + 1n < confirmations)\n )\n return\n\n done(() => emit.resolve(receipt!))\n return\n }\n\n // Get the transaction to check if it's been replaced.\n // We need to retry as some RPC Providers may be slow to sync\n // up mined transactions.\n if (checkReplacement && !transaction) {\n retrying = true\n await withRetry(\n async () => {\n transaction = (await getAction(\n client,\n getTransaction,\n 'getTransaction',\n )({ hash })) as GetTransactionReturnType\n if (transaction.blockNumber)\n blockNumber = transaction.blockNumber\n },\n {\n delay: retryDelay,\n retryCount,\n },\n )\n retrying = false\n }\n\n // Get the receipt to check if it's been processed.\n receipt = await getAction(\n client,\n getTransactionReceipt,\n 'getTransactionReceipt',\n )({ hash })\n\n // Check if we have enough confirmations. If not, continue polling.\n if (\n confirmations > 1 &&\n (!receipt.blockNumber ||\n blockNumber - receipt.blockNumber + 1n < confirmations)\n )\n return\n\n done(() => emit.resolve(receipt!))\n } catch (err) {\n // If the receipt is not found, the transaction will be pending.\n // We need to check if it has potentially been replaced.\n if (\n err instanceof TransactionNotFoundError ||\n err instanceof TransactionReceiptNotFoundError\n ) {\n if (!transaction) {\n retrying = false\n return\n }\n\n try {\n replacedTransaction = transaction\n\n // Let's retrieve the transactions from the current block.\n // We need to retry as some RPC Providers may be slow to sync\n // up mined blocks.\n retrying = true\n const block = await withRetry(\n () =>\n getAction(\n client,\n getBlock,\n 'getBlock',\n )({\n blockNumber,\n includeTransactions: true,\n }),\n {\n delay: retryDelay,\n retryCount,\n shouldRetry: ({ error }) =>\n error instanceof BlockNotFoundError,\n },\n )\n retrying = false\n\n const replacementTransaction = (\n block.transactions as {} as Transaction[]\n ).find(\n ({ from, nonce }) =>\n from === replacedTransaction!.from &&\n nonce === replacedTransaction!.nonce,\n )\n\n // If we couldn't find a replacement transaction, continue polling.\n if (!replacementTransaction) return\n\n // If we found a replacement transaction, return it's receipt.\n receipt = await getAction(\n client,\n getTransactionReceipt,\n 'getTransactionReceipt',\n )({\n hash: replacementTransaction.hash,\n })\n\n // Check if we have enough confirmations. If not, continue polling.\n if (\n confirmations > 1 &&\n (!receipt.blockNumber ||\n blockNumber - receipt.blockNumber + 1n < confirmations)\n )\n return\n\n let reason: ReplacementReason = 'replaced'\n if (\n replacementTransaction.to === replacedTransaction.to &&\n replacementTransaction.value === replacedTransaction.value &&\n replacementTransaction.input === replacedTransaction.input\n ) {\n reason = 'repriced'\n } else if (\n replacementTransaction.from === replacementTransaction.to &&\n replacementTransaction.value === 0n\n ) {\n reason = 'cancelled'\n }\n\n done(() => {\n emit.onReplaced?.({\n reason,\n replacedTransaction: replacedTransaction! as any,\n transaction: replacementTransaction,\n transactionReceipt: receipt!,\n })\n emit.resolve(receipt!)\n })\n } catch (err_) {\n done(() => emit.reject(err_))\n }\n } else {\n done(() => emit.reject(err))\n }\n }\n },\n })\n },\n )\n\n return promise\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { HasTransportType } from '../../types/transport.js'\nimport { hexToBigInt } from '../../utils/encoding/fromHex.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { observe } from '../../utils/observe.js'\nimport { type PollErrorType, poll } from '../../utils/poll.js'\nimport { stringify } from '../../utils/stringify.js'\n\nimport {\n type GetBlockNumberReturnType,\n getBlockNumber,\n} from './getBlockNumber.js'\n\nexport type OnBlockNumberParameter = GetBlockNumberReturnType\nexport type OnBlockNumberFn = (\n blockNumber: OnBlockNumberParameter,\n prevBlockNumber: OnBlockNumberParameter | undefined,\n) => void\n\nexport type WatchBlockNumberParameters<\n transport extends Transport = Transport,\n> = {\n /** The callback to call when a new block number is received. */\n onBlockNumber: OnBlockNumberFn\n /** The callback to call when an error occurred when trying to get for a new block. */\n onError?: ((error: Error) => void) | undefined\n} & (\n | (HasTransportType extends true\n ? {\n emitMissed?: undefined\n emitOnBegin?: undefined\n /** Whether or not the WebSocket Transport should poll the JSON-RPC, rather than using `eth_subscribe`. */\n poll?: false | undefined\n pollingInterval?: undefined\n }\n : never)\n | {\n /** Whether or not to emit the missed block numbers to the callback. */\n emitMissed?: boolean | undefined\n /** Whether or not to emit the latest block number to the callback when the subscription opens. */\n emitOnBegin?: boolean | undefined\n poll?: true | undefined\n /** Polling frequency (in ms). Defaults to Client's pollingInterval config. */\n pollingInterval?: number | undefined\n }\n)\n\nexport type WatchBlockNumberReturnType = () => void\n\nexport type WatchBlockNumberErrorType = PollErrorType | ErrorType\n\n/**\n * Watches and returns incoming block numbers.\n *\n * - Docs: https://viem.sh/docs/actions/public/watchBlockNumber\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/blocks_watching-blocks\n * - JSON-RPC Methods:\n * - When `poll: true`, calls [`eth_blockNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_blocknumber) on a polling interval.\n * - When `poll: false` & WebSocket Transport, uses a WebSocket subscription via [`eth_subscribe`](https://docs.alchemy.com/reference/eth-subscribe-polygon) and the `\"newHeads\"` event.\n *\n * @param client - Client to use\n * @param parameters - {@link WatchBlockNumberParameters}\n * @returns A function that can be invoked to stop watching for new block numbers. {@link WatchBlockNumberReturnType}\n *\n * @example\n * import { createPublicClient, watchBlockNumber, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const unwatch = watchBlockNumber(client, {\n * onBlockNumber: (blockNumber) => console.log(blockNumber),\n * })\n */\nexport function watchBlockNumber<\n chain extends Chain | undefined,\n transport extends Transport,\n>(\n client: Client,\n {\n emitOnBegin = false,\n emitMissed = false,\n onBlockNumber,\n onError,\n poll: poll_,\n pollingInterval = client.pollingInterval,\n }: WatchBlockNumberParameters,\n): WatchBlockNumberReturnType {\n const enablePolling = (() => {\n if (typeof poll_ !== 'undefined') return poll_\n if (\n client.transport.type === 'webSocket' ||\n client.transport.type === 'ipc'\n )\n return false\n if (\n client.transport.type === 'fallback' &&\n (client.transport.transports[0].config.type === 'webSocket' ||\n client.transport.transports[0].config.type === 'ipc')\n )\n return false\n return true\n })()\n\n let prevBlockNumber: GetBlockNumberReturnType | undefined\n\n const pollBlockNumber = () => {\n const observerId = stringify([\n 'watchBlockNumber',\n client.uid,\n emitOnBegin,\n emitMissed,\n pollingInterval,\n ])\n\n return observe(observerId, { onBlockNumber, onError }, (emit) =>\n poll(\n async () => {\n try {\n const blockNumber = await getAction(\n client,\n getBlockNumber,\n 'getBlockNumber',\n )({ cacheTime: 0 })\n\n if (prevBlockNumber !== undefined) {\n // If the current block number is the same as the previous,\n // we can skip.\n if (blockNumber === prevBlockNumber) return\n\n // If we have missed out on some previous blocks, and the\n // `emitMissed` flag is truthy, let's emit those blocks.\n if (blockNumber - prevBlockNumber > 1 && emitMissed) {\n for (let i = prevBlockNumber + 1n; i < blockNumber; i++) {\n emit.onBlockNumber(i, prevBlockNumber)\n prevBlockNumber = i\n }\n }\n }\n\n // If the next block number is greater than the previous,\n // it is not in the past, and we can emit the new block number.\n if (\n prevBlockNumber === undefined ||\n blockNumber > prevBlockNumber\n ) {\n emit.onBlockNumber(blockNumber, prevBlockNumber)\n prevBlockNumber = blockNumber\n }\n } catch (err) {\n emit.onError?.(err as Error)\n }\n },\n {\n emitOnBegin,\n interval: pollingInterval,\n },\n ),\n )\n }\n\n const subscribeBlockNumber = () => {\n const observerId = stringify([\n 'watchBlockNumber',\n client.uid,\n emitOnBegin,\n emitMissed,\n ])\n\n return observe(observerId, { onBlockNumber, onError }, (emit) => {\n let active = true\n let unsubscribe = () => (active = false)\n ;(async () => {\n try {\n const transport = (() => {\n if (client.transport.type === 'fallback') {\n const transport = client.transport.transports.find(\n (transport: ReturnType) =>\n transport.config.type === 'webSocket' ||\n transport.config.type === 'ipc',\n )\n if (!transport) return client.transport\n return transport.value\n }\n return client.transport\n })()\n\n const { unsubscribe: unsubscribe_ } = await transport.subscribe({\n params: ['newHeads'],\n onData(data: any) {\n if (!active) return\n const blockNumber = hexToBigInt(data.result?.number)\n emit.onBlockNumber(blockNumber, prevBlockNumber)\n prevBlockNumber = blockNumber\n },\n onError(error: Error) {\n emit.onError?.(error)\n },\n })\n unsubscribe = unsubscribe_\n if (!active) unsubscribe()\n } catch (err) {\n onError?.(err as Error)\n }\n })()\n return () => unsubscribe()\n })\n }\n\n return enablePolling ? pollBlockNumber() : subscribeBlockNumber()\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { HasTransportType } from '../../types/transport.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { observe } from '../../utils/observe.js'\nimport { type PollErrorType, poll } from '../../utils/poll.js'\nimport { type StringifyErrorType, stringify } from '../../utils/stringify.js'\n\nimport { type GetBlockReturnType, getBlock } from './getBlock.js'\n\nexport type OnBlockParameter<\n chain extends Chain | undefined = Chain,\n includeTransactions extends boolean = false,\n blockTag extends BlockTag = 'latest',\n> = GetBlockReturnType\n\nexport type OnBlock<\n chain extends Chain | undefined = Chain,\n includeTransactions extends boolean = false,\n blockTag extends BlockTag = 'latest',\n> = (\n block: OnBlockParameter,\n prevBlock: OnBlockParameter | undefined,\n) => void\n\nexport type WatchBlocksParameters<\n transport extends Transport = Transport,\n chain extends Chain | undefined = Chain,\n includeTransactions extends boolean = false,\n blockTag extends BlockTag = 'latest',\n> = {\n /** The callback to call when a new block is received. */\n onBlock: OnBlock\n /** The callback to call when an error occurred when trying to get for a new block. */\n onError?: ((error: Error) => void) | undefined\n} & (\n | (HasTransportType extends true\n ? {\n blockTag?: undefined\n emitMissed?: undefined\n emitOnBegin?: undefined\n includeTransactions?: undefined\n /** Whether or not the WebSocket Transport should poll the JSON-RPC, rather than using `eth_subscribe`. */\n poll?: false | undefined\n pollingInterval?: undefined\n }\n : never)\n | {\n /** The block tag. Defaults to \"latest\". */\n blockTag?: blockTag | BlockTag | undefined\n /** Whether or not to emit the missed blocks to the callback. */\n emitMissed?: boolean | undefined\n /** Whether or not to emit the block to the callback when the subscription opens. */\n emitOnBegin?: boolean | undefined\n /** Whether or not to include transaction data in the response. */\n includeTransactions?: includeTransactions | undefined\n poll?: true | undefined\n /** Polling frequency (in ms). Defaults to the client's pollingInterval config. */\n pollingInterval?: number | undefined\n }\n)\n\nexport type WatchBlocksReturnType = () => void\n\nexport type WatchBlocksErrorType =\n | StringifyErrorType\n | PollErrorType\n | ErrorType\n\n/**\n * Watches and returns information for incoming blocks.\n *\n * - Docs: https://viem.sh/docs/actions/public/watchBlocks\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/blocks_watching-blocks\n * - JSON-RPC Methods:\n * - When `poll: true`, calls [`eth_getBlockByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getBlockByNumber) on a polling interval.\n * - When `poll: false` & WebSocket Transport, uses a WebSocket subscription via [`eth_subscribe`](https://docs.alchemy.com/reference/eth-subscribe-polygon) and the `\"newHeads\"` event.\n *\n * @param client - Client to use\n * @param parameters - {@link WatchBlocksParameters}\n * @returns A function that can be invoked to stop watching for new block numbers. {@link WatchBlocksReturnType}\n *\n * @example\n * import { createPublicClient, watchBlocks, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const unwatch = watchBlocks(client, {\n * onBlock: (block) => console.log(block),\n * })\n */\nexport function watchBlocks<\n transport extends Transport,\n chain extends Chain | undefined,\n includeTransactions extends boolean = false,\n blockTag extends BlockTag = 'latest',\n>(\n client: Client,\n {\n blockTag = client.experimental_blockTag ?? 'latest',\n emitMissed = false,\n emitOnBegin = false,\n onBlock,\n onError,\n includeTransactions: includeTransactions_,\n poll: poll_,\n pollingInterval = client.pollingInterval,\n }: WatchBlocksParameters,\n): WatchBlocksReturnType {\n const enablePolling = (() => {\n if (typeof poll_ !== 'undefined') return poll_\n if (\n client.transport.type === 'webSocket' ||\n client.transport.type === 'ipc'\n )\n return false\n if (\n client.transport.type === 'fallback' &&\n (client.transport.transports[0].config.type === 'webSocket' ||\n client.transport.transports[0].config.type === 'ipc')\n )\n return false\n return true\n })()\n const includeTransactions = includeTransactions_ ?? false\n\n let prevBlock:\n | GetBlockReturnType\n | undefined\n\n const pollBlocks = () => {\n const observerId = stringify([\n 'watchBlocks',\n client.uid,\n blockTag,\n emitMissed,\n emitOnBegin,\n includeTransactions,\n pollingInterval,\n ])\n\n return observe(observerId, { onBlock, onError }, (emit) =>\n poll(\n async () => {\n try {\n const block = await getAction(\n client,\n getBlock,\n 'getBlock',\n )({\n blockTag,\n includeTransactions,\n })\n if (block.number !== null && prevBlock?.number != null) {\n // If the current block number is the same as the previous,\n // we can skip.\n if (block.number === prevBlock.number) return\n\n // If we have missed out on some previous blocks, and the\n // `emitMissed` flag is truthy, let's emit those blocks.\n if (block.number - prevBlock.number > 1 && emitMissed) {\n for (let i = prevBlock?.number + 1n; i < block.number; i++) {\n const block = (await getAction(\n client,\n getBlock,\n 'getBlock',\n )({\n blockNumber: i,\n includeTransactions,\n })) as GetBlockReturnType\n emit.onBlock(block as any, prevBlock as any)\n prevBlock = block\n }\n }\n }\n\n if (\n // If no previous block exists, emit.\n prevBlock?.number == null ||\n // If the block tag is \"pending\" with no block number, emit.\n (blockTag === 'pending' && block?.number == null) ||\n // If the next block number is greater than the previous block number, emit.\n // We don't want to emit blocks in the past.\n (block.number !== null && block.number > prevBlock.number)\n ) {\n emit.onBlock(block as any, prevBlock as any)\n prevBlock = block as any\n }\n } catch (err) {\n emit.onError?.(err as Error)\n }\n },\n {\n emitOnBegin,\n interval: pollingInterval,\n },\n ),\n )\n }\n\n const subscribeBlocks = () => {\n let active = true\n let emitFetched = true\n let unsubscribe = () => (active = false)\n ;(async () => {\n try {\n if (emitOnBegin) {\n getAction(\n client,\n getBlock,\n 'getBlock',\n )({\n blockTag,\n includeTransactions,\n })\n .then((block) => {\n if (!active) return\n if (!emitFetched) return\n onBlock(block as any, undefined)\n emitFetched = false\n })\n .catch(onError)\n }\n\n const transport = (() => {\n if (client.transport.type === 'fallback') {\n const transport = client.transport.transports.find(\n (transport: ReturnType) =>\n transport.config.type === 'webSocket' ||\n transport.config.type === 'ipc',\n )\n if (!transport) return client.transport\n return transport.value\n }\n return client.transport\n })()\n\n const { unsubscribe: unsubscribe_ } = await transport.subscribe({\n params: ['newHeads'],\n async onData(data: any) {\n if (!active) return\n const block = (await getAction(\n client,\n getBlock,\n 'getBlock',\n )({\n blockNumber: data.result?.number,\n includeTransactions,\n }).catch(() => {})) as GetBlockReturnType\n if (!active) return\n onBlock(block as any, prevBlock as any)\n emitFetched = false\n prevBlock = block\n },\n onError(error: Error) {\n onError?.(error)\n },\n })\n unsubscribe = unsubscribe_\n if (!active) unsubscribe()\n } catch (err) {\n onError?.(err as Error)\n }\n })()\n return () => unsubscribe()\n }\n\n return enablePolling ? pollBlocks() : subscribeBlocks()\n}\n", "import type { AbiEvent, Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n DecodeLogDataMismatch,\n DecodeLogTopicsMismatch,\n} from '../../errors/abi.js'\nimport { InvalidInputRpcError } from '../../errors/rpc.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockNumber } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n MaybeAbiEventName,\n MaybeExtractEventArgsFromAbi,\n} from '../../types/contract.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { Log } from '../../types/log.js'\nimport type { LogTopic } from '../../types/misc.js'\nimport type { GetPollOptions } from '../../types/transport.js'\nimport { decodeEventLog } from '../../utils/abi/decodeEventLog.js'\nimport {\n type EncodeEventTopicsParameters,\n encodeEventTopics,\n} from '../../utils/abi/encodeEventTopics.js'\nimport { formatLog } from '../../utils/formatters/log.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { type ObserveErrorType, observe } from '../../utils/observe.js'\nimport { poll } from '../../utils/poll.js'\nimport { type StringifyErrorType, stringify } from '../../utils/stringify.js'\nimport {\n type CreateEventFilterParameters,\n createEventFilter,\n} from './createEventFilter.js'\nimport { getBlockNumber } from './getBlockNumber.js'\nimport { getFilterChanges } from './getFilterChanges.js'\nimport { type GetLogsParameters, getLogs } from './getLogs.js'\nimport { uninstallFilter } from './uninstallFilter.js'\n\nexport type WatchEventOnLogsParameter<\n abiEvent extends AbiEvent | undefined = undefined,\n abiEvents extends\n | readonly AbiEvent[]\n | readonly unknown[]\n | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n strict extends boolean | undefined = undefined,\n eventName extends string | undefined = MaybeAbiEventName,\n> = Log[]\nexport type WatchEventOnLogsFn<\n abiEvent extends AbiEvent | undefined = undefined,\n abiEvents extends\n | readonly AbiEvent[]\n | readonly unknown[]\n | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n strict extends boolean | undefined = undefined,\n //\n _eventName extends string | undefined = MaybeAbiEventName,\n> = (\n logs: WatchEventOnLogsParameter,\n) => void\n\nexport type WatchEventParameters<\n abiEvent extends AbiEvent | undefined = undefined,\n abiEvents extends\n | readonly AbiEvent[]\n | readonly unknown[]\n | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n strict extends boolean | undefined = undefined,\n transport extends Transport = Transport,\n //\n _eventName extends string | undefined = MaybeAbiEventName,\n> = {\n /** The address of the contract. */\n address?: Address | Address[] | undefined\n /** Block to start listening from. */\n fromBlock?: BlockNumber | undefined\n /** The callback to call when an error occurred when trying to get for a new block. */\n onError?: ((error: Error) => void) | undefined\n /** The callback to call when new event logs are received. */\n onLogs: WatchEventOnLogsFn\n} & GetPollOptions &\n (\n | {\n event: abiEvent\n events?: undefined\n args?: MaybeExtractEventArgsFromAbi | undefined\n /**\n * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n * @default false\n */\n strict?: strict | undefined\n }\n | {\n event?: undefined\n events?: abiEvents | undefined\n args?: undefined\n /**\n * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n * @default false\n */\n strict?: strict | undefined\n }\n | {\n event?: undefined\n events?: undefined\n args?: undefined\n strict?: undefined\n }\n )\n\nexport type WatchEventReturnType = () => void\n\nexport type WatchEventErrorType =\n | StringifyErrorType\n | ObserveErrorType\n | ErrorType\n\n/**\n * Watches and returns emitted [Event Logs](https://viem.sh/docs/glossary/terms#event-log).\n *\n * - Docs: https://viem.sh/docs/actions/public/watchEvent\n * - JSON-RPC Methods:\n * - **RPC Provider supports `eth_newFilter`:**\n * - Calls [`eth_newFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newfilter) to create a filter (called on initialize).\n * - On a polling interval, it will call [`eth_getFilterChanges`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getfilterchanges).\n * - **RPC Provider does not support `eth_newFilter`:**\n * - Calls [`eth_getLogs`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getlogs) for each block between the polling interval.\n *\n * This Action will batch up all the Event Logs found within the [`pollingInterval`](https://viem.sh/docs/actions/public/watchEvent#pollinginterval-optional), and invoke them via [`onLogs`](https://viem.sh/docs/actions/public/watchEvent#onLogs).\n *\n * `watchEvent` will attempt to create an [Event Filter](https://viem.sh/docs/actions/public/createEventFilter) and listen to changes to the Filter per polling interval, however, if the RPC Provider does not support Filters (e.g. `eth_newFilter`), then `watchEvent` will fall back to using [`getLogs`](https://viem.sh/docs/actions/public/getLogs) instead.\n *\n * @param client - Client to use\n * @param parameters - {@link WatchEventParameters}\n * @returns A function that can be invoked to stop watching for new Event Logs. {@link WatchEventReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { watchEvent } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const unwatch = watchEvent(client, {\n * onLogs: (logs) => console.log(logs),\n * })\n */\nexport function watchEvent<\n chain extends Chain | undefined,\n const abiEvent extends AbiEvent | undefined = undefined,\n const abiEvents extends\n | readonly AbiEvent[]\n | readonly unknown[]\n | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n strict extends boolean | undefined = undefined,\n transport extends Transport = Transport,\n _eventName extends string | undefined = undefined,\n>(\n client: Client,\n {\n address,\n args,\n batch = true,\n event,\n events,\n fromBlock,\n onError,\n onLogs,\n poll: poll_,\n pollingInterval = client.pollingInterval,\n strict: strict_,\n }: WatchEventParameters,\n): WatchEventReturnType {\n const enablePolling = (() => {\n if (typeof poll_ !== 'undefined') return poll_\n if (typeof fromBlock === 'bigint') return true\n if (\n client.transport.type === 'webSocket' ||\n client.transport.type === 'ipc'\n )\n return false\n if (\n client.transport.type === 'fallback' &&\n (client.transport.transports[0].config.type === 'webSocket' ||\n client.transport.transports[0].config.type === 'ipc')\n )\n return false\n return true\n })()\n const strict = strict_ ?? false\n\n const pollEvent = () => {\n const observerId = stringify([\n 'watchEvent',\n address,\n args,\n batch,\n client.uid,\n event,\n pollingInterval,\n fromBlock,\n ])\n\n return observe(observerId, { onLogs, onError }, (emit) => {\n let previousBlockNumber: bigint\n if (fromBlock !== undefined) previousBlockNumber = fromBlock - 1n\n let filter: Filter<'event', abiEvents, _eventName, any>\n let initialized = false\n\n const unwatch = poll(\n async () => {\n if (!initialized) {\n try {\n filter = (await getAction(\n client,\n createEventFilter as any,\n 'createEventFilter',\n )({\n address,\n args,\n event: event!,\n events,\n strict,\n fromBlock,\n } as unknown as CreateEventFilterParameters)) as unknown as Filter<\n 'event',\n abiEvents,\n _eventName\n >\n } catch {}\n initialized = true\n return\n }\n\n try {\n let logs: Log[]\n if (filter) {\n logs = await getAction(\n client,\n getFilterChanges,\n 'getFilterChanges',\n )({ filter })\n } else {\n // If the filter doesn't exist, we will fall back to use `getLogs`.\n // The fall back exists because some RPC Providers do not support filters.\n\n // Fetch the block number to use for `getLogs`.\n const blockNumber = await getAction(\n client,\n getBlockNumber,\n 'getBlockNumber',\n )({})\n\n // If the block number has changed, we will need to fetch the logs.\n // If the block number doesn't exist, we are yet to reach the first poll interval,\n // so do not emit any logs.\n if (previousBlockNumber && previousBlockNumber !== blockNumber) {\n logs = await getAction(\n client,\n getLogs,\n 'getLogs',\n )({\n address,\n args,\n event: event!,\n events,\n fromBlock: previousBlockNumber + 1n,\n toBlock: blockNumber,\n } as unknown as GetLogsParameters)\n } else {\n logs = []\n }\n previousBlockNumber = blockNumber\n }\n\n if (logs.length === 0) return\n if (batch) emit.onLogs(logs as any)\n else for (const log of logs) emit.onLogs([log] as any)\n } catch (err) {\n // If a filter has been set and gets uninstalled, providers will throw an InvalidInput error.\n // Reinitialize the filter when this occurs\n if (filter && err instanceof InvalidInputRpcError)\n initialized = false\n emit.onError?.(err as Error)\n }\n },\n {\n emitOnBegin: true,\n interval: pollingInterval,\n },\n )\n\n return async () => {\n if (filter)\n await getAction(\n client,\n uninstallFilter,\n 'uninstallFilter',\n )({ filter })\n unwatch()\n }\n })\n }\n\n const subscribeEvent = () => {\n let active = true\n let unsubscribe = () => (active = false)\n ;(async () => {\n try {\n const transport = (() => {\n if (client.transport.type === 'fallback') {\n const transport = client.transport.transports.find(\n (transport: ReturnType) =>\n transport.config.type === 'webSocket' ||\n transport.config.type === 'ipc',\n )\n if (!transport) return client.transport\n return transport.value\n }\n return client.transport\n })()\n\n const events_ = events ?? (event ? [event] : undefined)\n let topics: LogTopic[] = []\n if (events_) {\n const encoded = (events_ as AbiEvent[]).flatMap((event) =>\n encodeEventTopics({\n abi: [event],\n eventName: (event as AbiEvent).name,\n args,\n } as EncodeEventTopicsParameters),\n )\n // TODO: Clean up type casting\n topics = [encoded as LogTopic]\n if (event) topics = topics[0] as LogTopic[]\n }\n\n const { unsubscribe: unsubscribe_ } = await transport.subscribe({\n params: ['logs', { address, topics }],\n onData(data: any) {\n if (!active) return\n const log = data.result\n try {\n const { eventName, args } = decodeEventLog({\n abi: events_ ?? [],\n data: log.data,\n topics: log.topics,\n strict,\n })\n const formatted = formatLog(log, { args, eventName })\n onLogs([formatted] as any)\n } catch (err) {\n let eventName: string | undefined\n let isUnnamed: boolean | undefined\n if (\n err instanceof DecodeLogDataMismatch ||\n err instanceof DecodeLogTopicsMismatch\n ) {\n // If strict mode is on, and log data/topics do not match event definition, skip.\n if (strict_) return\n eventName = err.abiItem.name\n isUnnamed = err.abiItem.inputs?.some(\n (x) => !('name' in x && x.name),\n )\n }\n\n // Set args to empty if there is an error decoding (e.g. indexed/non-indexed params mismatch).\n const formatted = formatLog(log, {\n args: isUnnamed ? [] : {},\n eventName,\n })\n onLogs([formatted] as any)\n }\n },\n onError(error: Error) {\n onError?.(error)\n },\n })\n unsubscribe = unsubscribe_\n if (!active) unsubscribe()\n } catch (err) {\n onError?.(err as Error)\n }\n })()\n return () => unsubscribe()\n }\n\n return enablePolling ? pollEvent() : subscribeEvent()\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { GetPollOptions } from '../../types/transport.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { type ObserveErrorType, observe } from '../../utils/observe.js'\nimport { poll } from '../../utils/poll.js'\nimport { type StringifyErrorType, stringify } from '../../utils/stringify.js'\n\nimport { createPendingTransactionFilter } from './createPendingTransactionFilter.js'\nimport { getFilterChanges } from './getFilterChanges.js'\nimport { uninstallFilter } from './uninstallFilter.js'\n\nexport type OnTransactionsParameter = Hash[]\nexport type OnTransactionsFn = (transactions: OnTransactionsParameter) => void\n\nexport type WatchPendingTransactionsParameters<\n transport extends Transport = Transport,\n> = {\n /** The callback to call when an error occurred when trying to get for a new block. */\n onError?: ((error: Error) => void) | undefined\n /** The callback to call when new transactions are received. */\n onTransactions: OnTransactionsFn\n} & GetPollOptions\n\nexport type WatchPendingTransactionsReturnType = () => void\n\nexport type WatchPendingTransactionsErrorType =\n | StringifyErrorType\n | ObserveErrorType\n | ErrorType\n\n/**\n * Watches and returns pending transaction hashes.\n *\n * - Docs: https://viem.sh/docs/actions/public/watchPendingTransactions\n * - JSON-RPC Methods:\n * - When `poll: true`\n * - Calls [`eth_newPendingTransactionFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newpendingtransactionfilter) to initialize the filter.\n * - Calls [`eth_getFilterChanges`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getFilterChanges) on a polling interval.\n * - When `poll: false` & WebSocket Transport, uses a WebSocket subscription via [`eth_subscribe`](https://docs.alchemy.com/reference/eth-subscribe-polygon) and the `\"newPendingTransactions\"` event.\n *\n * This Action will batch up all the pending transactions found within the [`pollingInterval`](https://viem.sh/docs/actions/public/watchPendingTransactions#pollinginterval-optional), and invoke them via [`onTransactions`](https://viem.sh/docs/actions/public/watchPendingTransactions#ontransactions).\n *\n * @param client - Client to use\n * @param parameters - {@link WatchPendingTransactionsParameters}\n * @returns A function that can be invoked to stop watching for new pending transaction hashes. {@link WatchPendingTransactionsReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { watchPendingTransactions } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const unwatch = await watchPendingTransactions(client, {\n * onTransactions: (hashes) => console.log(hashes),\n * })\n */\nexport function watchPendingTransactions<\n transport extends Transport,\n chain extends Chain | undefined,\n>(\n client: Client,\n {\n batch = true,\n onError,\n onTransactions,\n poll: poll_,\n pollingInterval = client.pollingInterval,\n }: WatchPendingTransactionsParameters,\n) {\n const enablePolling =\n typeof poll_ !== 'undefined'\n ? poll_\n : client.transport.type !== 'webSocket' && client.transport.type !== 'ipc'\n\n const pollPendingTransactions = () => {\n const observerId = stringify([\n 'watchPendingTransactions',\n client.uid,\n batch,\n pollingInterval,\n ])\n return observe(observerId, { onTransactions, onError }, (emit) => {\n let filter: Filter<'transaction'>\n\n const unwatch = poll(\n async () => {\n try {\n if (!filter) {\n try {\n filter = await getAction(\n client,\n createPendingTransactionFilter,\n 'createPendingTransactionFilter',\n )({})\n return\n } catch (err) {\n unwatch()\n throw err\n }\n }\n\n const hashes = await getAction(\n client,\n getFilterChanges,\n 'getFilterChanges',\n )({ filter })\n if (hashes.length === 0) return\n if (batch) emit.onTransactions(hashes)\n else for (const hash of hashes) emit.onTransactions([hash])\n } catch (err) {\n emit.onError?.(err as Error)\n }\n },\n {\n emitOnBegin: true,\n interval: pollingInterval,\n },\n )\n\n return async () => {\n if (filter)\n await getAction(\n client,\n uninstallFilter,\n 'uninstallFilter',\n )({ filter })\n unwatch()\n }\n })\n }\n\n const subscribePendingTransactions = () => {\n let active = true\n let unsubscribe = () => (active = false)\n ;(async () => {\n try {\n const { unsubscribe: unsubscribe_ } = await client.transport.subscribe({\n params: ['newPendingTransactions'],\n onData(data: any) {\n if (!active) return\n const transaction = data.result\n onTransactions([transaction])\n },\n onError(error: Error) {\n onError?.(error)\n },\n })\n unsubscribe = unsubscribe_\n if (!active) unsubscribe()\n } catch (err) {\n onError?.(err as Error)\n }\n })()\n return () => unsubscribe()\n }\n\n return enablePolling\n ? pollPendingTransactions()\n : subscribePendingTransactions()\n}\n", "import type { Address } from 'abitype'\n\nimport type { ExactPartial, Prettify } from '../../types/utils.js'\nimport type { SiweMessage } from './types.js'\n\n/**\n * @description Parses EIP-4361 formatted message into message fields object.\n *\n * @see https://eips.ethereum.org/EIPS/eip-4361\n *\n * @returns EIP-4361 fields object\n */\nexport function parseSiweMessage(\n message: string,\n): Prettify> {\n const { scheme, statement, ...prefix } = (message.match(prefixRegex)\n ?.groups ?? {}) as {\n address: Address\n domain: string\n scheme?: string\n statement?: string\n }\n const { chainId, expirationTime, issuedAt, notBefore, requestId, ...suffix } =\n (message.match(suffixRegex)?.groups ?? {}) as {\n chainId: string\n expirationTime?: string\n issuedAt?: string\n nonce: string\n notBefore?: string\n requestId?: string\n uri: string\n version: '1'\n }\n const resources = message.split('Resources:')[1]?.split('\\n- ').slice(1)\n return {\n ...prefix,\n ...suffix,\n ...(chainId ? { chainId: Number(chainId) } : {}),\n ...(expirationTime ? { expirationTime: new Date(expirationTime) } : {}),\n ...(issuedAt ? { issuedAt: new Date(issuedAt) } : {}),\n ...(notBefore ? { notBefore: new Date(notBefore) } : {}),\n ...(requestId ? { requestId } : {}),\n ...(resources ? { resources } : {}),\n ...(scheme ? { scheme } : {}),\n ...(statement ? { statement } : {}),\n }\n}\n\n// https://regexr.com/80gdj\nconst prefixRegex =\n /^(?:(?[a-zA-Z][a-zA-Z0-9+-.]*):\\/\\/)?(?[a-zA-Z0-9+-.]*(?::[0-9]{1,5})?) (?:wants you to sign in with your Ethereum account:\\n)(?
    0x[a-fA-F0-9]{40})\\n\\n(?:(?.*)\\n\\n)?/\n\n// https://regexr.com/80gf9\nconst suffixRegex =\n /(?:URI: (?.+))\\n(?:Version: (?.+))\\n(?:Chain ID: (?\\d+))\\n(?:Nonce: (?[a-zA-Z0-9]+))\\n(?:Issued At: (?.+))(?:\\nExpiration Time: (?.+))?(?:\\nNot Before: (?.+))?(?:\\nRequest ID: (?.+))?/\n", "import type { Address } from 'abitype'\n\nimport type { ExactPartial } from '../../types/utils.js'\nimport { isAddress } from '../address/isAddress.js'\nimport { isAddressEqual } from '../address/isAddressEqual.js'\nimport type { SiweMessage } from './types.js'\n\nexport type ValidateSiweMessageParameters = {\n /**\n * Ethereum address to check against.\n */\n address?: Address | undefined\n /**\n * [RFC 3986](https://www.rfc-editor.org/rfc/rfc3986) authority to check against.\n */\n domain?: string | undefined\n /**\n * EIP-4361 message fields.\n */\n message: ExactPartial\n /**\n * Random string to check against.\n */\n nonce?: string | undefined\n /**\n * [RFC 3986](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) URI scheme to check against.\n */\n scheme?: string | undefined\n /**\n * Current time to check optional `expirationTime` and `notBefore` fields.\n *\n * @default new Date()\n */\n time?: Date | undefined\n}\n\nexport type ValidateSiweMessageReturnType = boolean\n\n/**\n * @description Validates EIP-4361 message.\n *\n * @see https://eips.ethereum.org/EIPS/eip-4361\n */\nexport function validateSiweMessage(\n parameters: ValidateSiweMessageParameters,\n): ValidateSiweMessageReturnType {\n const {\n address,\n domain,\n message,\n nonce,\n scheme,\n time = new Date(),\n } = parameters\n\n if (domain && message.domain !== domain) return false\n if (nonce && message.nonce !== nonce) return false\n if (scheme && message.scheme !== scheme) return false\n\n if (message.expirationTime && time >= message.expirationTime) return false\n if (message.notBefore && time < message.notBefore) return false\n\n try {\n if (!message.address) return false\n if (!isAddress(message.address, { strict: false })) return false\n if (address && !isAddressEqual(message.address, address)) return false\n } catch {\n return false\n }\n\n return true\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { Prettify } from '../../types/utils.js'\nimport type { HashMessageErrorType } from '../../utils/signature/hashMessage.js'\nimport { hashMessage } from '../../utils/signature/hashMessage.js'\nimport { parseSiweMessage } from '../../utils/siwe/parseSiweMessage.js'\nimport {\n type ValidateSiweMessageParameters,\n validateSiweMessage,\n} from '../../utils/siwe/validateSiweMessage.js'\nimport {\n type VerifyHashErrorType,\n type VerifyHashParameters,\n verifyHash,\n} from '../public/verifyHash.js'\n\nexport type VerifySiweMessageParameters = Prettify<\n Pick &\n Pick<\n ValidateSiweMessageParameters,\n 'address' | 'domain' | 'nonce' | 'scheme' | 'time'\n > & {\n /**\n * EIP-4361 formatted message.\n */\n message: string\n /**\n * Signature to check against.\n */\n signature: Hex\n }\n>\n\nexport type VerifySiweMessageReturnType = boolean\n\nexport type VerifySiweMessageErrorType =\n | HashMessageErrorType\n | VerifyHashErrorType\n | ErrorType\n\n/**\n * Verifies [EIP-4361](https://eips.ethereum.org/EIPS/eip-4361) formatted message was signed.\n *\n * Compatible with Smart Contract Accounts & Externally Owned Accounts via [ERC-6492](https://eips.ethereum.org/EIPS/eip-6492).\n *\n * - Docs {@link https://viem.sh/docs/siwe/actions/verifySiweMessage}\n *\n * @param client - Client to use.\n * @param parameters - {@link VerifySiweMessageParameters}\n * @returns Whether or not the signature is valid. {@link VerifySiweMessageReturnType}\n */\nexport async function verifySiweMessage(\n client: Client,\n parameters: VerifySiweMessageParameters,\n): Promise {\n const {\n address,\n domain,\n message,\n nonce,\n scheme,\n signature,\n time = new Date(),\n ...callRequest\n } = parameters\n\n const parsed = parseSiweMessage(message)\n if (!parsed.address) return false\n\n const isValid = validateSiweMessage({\n address,\n domain,\n message: parsed,\n nonce,\n scheme,\n time,\n })\n if (!isValid) return false\n\n const hash = hashMessage(message)\n return verifyHash(client, {\n address: parsed.address,\n hash,\n signature,\n ...callRequest,\n })\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { TransactionReceiptRevertedError } from '../../errors/transaction.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { TransactionSerializedGeneric } from '../../types/transaction.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport { formatTransactionReceipt } from '../../utils/formatters/transactionReceipt.js'\nimport type { FormattedTransactionReceipt } from '../../utils/index.js'\n\nexport type SendRawTransactionSyncParameters = {\n /** The signed serialized transaction. */\n serializedTransaction: TransactionSerializedGeneric\n /** Whether to throw an error if the transaction was detected as reverted. @default true */\n throwOnReceiptRevert?: boolean | undefined\n /** The timeout for the transaction. */\n timeout?: number | undefined\n}\n\nexport type SendRawTransactionSyncReturnType<\n chain extends Chain | undefined = undefined,\n> = FormattedTransactionReceipt\n\nexport type SendRawTransactionSyncErrorType = RequestErrorType | ErrorType\n\n/**\n * Sends a **signed** transaction to the network synchronously,\n * and waits for the transaction to be included in a block.\n *\n * - Docs: https://viem.sh/docs/actions/wallet/sendRawTransactionSync\n * - JSON-RPC Method: [`eth_sendRawTransactionSync`](https://eips.ethereum.org/EIPS/eip-7966)\n *\n * @param client - Client to use\n * @param parameters - {@link SendRawTransactionParameters}\n * @returns The transaction receipt. {@link SendRawTransactionSyncReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { sendRawTransactionSync } from 'viem/wallet'\n *\n * const client = createWalletClient({\n * chain: mainnet,\n * transport: custom(window.ethereum),\n * })\n *\n * const receipt = await sendRawTransactionSync(client, {\n * serializedTransaction: '0x02f850018203118080825208808080c080a04012522854168b27e5dc3d5839bab5e6b39e1a0ffd343901ce1622e3d64b48f1a04e00902ae0502c4728cbf12156290df99c3ed7de85b1dbfe20b5c36931733a33'\n * })\n */\nexport async function sendRawTransactionSync(\n client: Client,\n {\n serializedTransaction,\n throwOnReceiptRevert,\n timeout,\n }: SendRawTransactionSyncParameters,\n): Promise> {\n const receipt = await client.request(\n {\n method: 'eth_sendRawTransactionSync',\n params: timeout\n ? [serializedTransaction, timeout]\n : [serializedTransaction],\n },\n { retryCount: 0 },\n )\n const format =\n client.chain?.formatters?.transactionReceipt?.format ||\n formatTransactionReceipt\n\n const formatted = format(receipt) as SendRawTransactionSyncReturnType\n if (formatted.status === 'reverted' && throwOnReceiptRevert)\n throw new TransactionReceiptRevertedError({ receipt: formatted })\n return formatted\n}\n", "import type { Address } from 'abitype'\nimport type { ErrorType } from '../errors/utils.js'\nimport type { Account, ParseAccount } from '../types/account.js'\nimport type { Chain } from '../types/chain.js'\nimport type { PublicRpcSchema, RpcSchema } from '../types/eip1193.js'\nimport type { Prettify } from '../types/utils.js'\nimport {\n type Client,\n type ClientConfig,\n type CreateClientErrorType,\n createClient,\n} from './createClient.js'\nimport { type PublicActions, publicActions } from './decorators/public.js'\nimport type { Transport } from './transports/createTransport.js'\n\nexport type PublicClientConfig<\n transport extends Transport = Transport,\n chain extends Chain | undefined = Chain | undefined,\n accountOrAddress extends Account | Address | undefined = undefined,\n rpcSchema extends RpcSchema | undefined = undefined,\n> = Prettify<\n Pick<\n ClientConfig,\n | 'batch'\n | 'cacheTime'\n | 'ccipRead'\n | 'chain'\n | 'experimental_blockTag'\n | 'key'\n | 'name'\n | 'pollingInterval'\n | 'rpcSchema'\n | 'transport'\n >\n>\n\nexport type PublicClient<\n transport extends Transport = Transport,\n chain extends Chain | undefined = Chain | undefined,\n accountOrAddress extends Account | undefined = undefined,\n rpcSchema extends RpcSchema | undefined = undefined,\n> = Prettify<\n Client<\n transport,\n chain,\n accountOrAddress,\n rpcSchema extends RpcSchema\n ? [...PublicRpcSchema, ...rpcSchema]\n : PublicRpcSchema,\n PublicActions\n >\n>\n\nexport type CreatePublicClientErrorType = CreateClientErrorType | ErrorType\n\n/**\n * Creates a Public Client with a given [Transport](https://viem.sh/docs/clients/intro) configured for a [Chain](https://viem.sh/docs/clients/chains).\n *\n * - Docs: https://viem.sh/docs/clients/public\n *\n * A Public Client is an interface to \"public\" [JSON-RPC API](https://ethereum.org/en/developers/docs/apis/json-rpc/) methods such as retrieving block numbers, transactions, reading from smart contracts, etc through [Public Actions](/docs/actions/public/introduction).\n *\n * @param config - {@link PublicClientConfig}\n * @returns A Public Client. {@link PublicClient}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n */\nexport function createPublicClient<\n transport extends Transport,\n chain extends Chain | undefined = undefined,\n accountOrAddress extends Account | Address | undefined = undefined,\n rpcSchema extends RpcSchema | undefined = undefined,\n>(\n parameters: PublicClientConfig,\n): PublicClient, rpcSchema> {\n const { key = 'public', name = 'Public Client' } = parameters\n const client = createClient({\n ...parameters,\n key,\n name,\n type: 'publicClient',\n })\n return client.extend(publicActions) as any\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { EIP1193RequestFn } from '../../types/eip1193.js'\nimport type { OneOf } from '../../types/utils.js'\nimport { buildRequest } from '../../utils/buildRequest.js'\nimport { uid as uid_ } from '../../utils/uid.js'\nimport type { ClientConfig } from '../createClient.js'\n\nexport type TransportConfig<\n type extends string = string,\n eip1193RequestFn extends EIP1193RequestFn = EIP1193RequestFn,\n> = {\n /** The name of the transport. */\n name: string\n /** The key of the transport. */\n key: string\n /** Methods to include or exclude from executing RPC requests. */\n methods?:\n | OneOf<\n | {\n include?: string[] | undefined\n }\n | {\n exclude?: string[] | undefined\n }\n >\n | undefined\n /** The JSON-RPC request function that matches the EIP-1193 request spec. */\n request: eip1193RequestFn\n /** The base delay (in ms) between retries. */\n retryDelay?: number | undefined\n /** The max number of times to retry. */\n retryCount?: number | undefined\n /** The timeout (in ms) for requests. */\n timeout?: number | undefined\n /** The type of the transport. */\n type: type\n}\n\nexport type Transport<\n type extends string = string,\n rpcAttributes = Record,\n eip1193RequestFn extends EIP1193RequestFn = EIP1193RequestFn,\n> = ({\n chain,\n}: {\n account?: Account | undefined\n chain?: chain | undefined\n pollingInterval?: ClientConfig['pollingInterval'] | undefined\n retryCount?: TransportConfig['retryCount'] | undefined\n timeout?: TransportConfig['timeout'] | undefined\n}) => {\n config: TransportConfig\n request: eip1193RequestFn\n value?: rpcAttributes | undefined\n}\n\nexport type CreateTransportErrorType = ErrorType\n\n/**\n * @description Creates an transport intended to be used with a client.\n */\nexport function createTransport<\n type extends string,\n rpcAttributes extends Record,\n>(\n {\n key,\n methods,\n name,\n request,\n retryCount = 3,\n retryDelay = 150,\n timeout,\n type,\n }: TransportConfig,\n value?: rpcAttributes | undefined,\n): ReturnType> {\n const uid = uid_()\n return {\n config: {\n key,\n methods,\n name,\n request,\n retryCount,\n retryDelay,\n timeout,\n type,\n },\n request: buildRequest(request, { methods, retryCount, retryDelay, uid }),\n value,\n }\n}\n", "import { RpcRequestError } from '../../errors/request.js'\nimport {\n UrlRequiredError,\n type UrlRequiredErrorType,\n} from '../../errors/transport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { EIP1193RequestFn, RpcSchema } from '../../types/eip1193.js'\nimport type { RpcRequest } from '../../types/rpc.js'\nimport { createBatchScheduler } from '../../utils/promise/createBatchScheduler.js'\nimport {\n getHttpRpcClient,\n type HttpRpcClientOptions,\n} from '../../utils/rpc/http.js'\n\nimport {\n type CreateTransportErrorType,\n createTransport,\n type Transport,\n type TransportConfig,\n} from './createTransport.js'\n\nexport type HttpTransportConfig<\n rpcSchema extends RpcSchema | undefined = undefined,\n raw extends boolean = false,\n> = {\n /**\n * Whether to enable Batch JSON-RPC.\n * @link https://www.jsonrpc.org/specification#batch\n */\n batch?:\n | boolean\n | {\n /** The maximum number of JSON-RPC requests to send in a batch. @default 1_000 */\n batchSize?: number | undefined\n /** The maximum number of milliseconds to wait before sending a batch. @default 0 */\n wait?: number | undefined\n }\n | undefined\n fetchFn?: HttpRpcClientOptions['fetchFn'] | undefined\n /**\n * Request configuration to pass to `fetch`.\n * @link https://developer.mozilla.org/en-US/docs/Web/API/fetch\n */\n fetchOptions?: HttpRpcClientOptions['fetchOptions'] | undefined\n /** A callback to handle the response from `fetch`. */\n onFetchRequest?: HttpRpcClientOptions['onRequest'] | undefined\n /** A callback to handle the response from `fetch`. */\n onFetchResponse?: HttpRpcClientOptions['onResponse'] | undefined\n /** The key of the HTTP transport. */\n key?: TransportConfig['key'] | undefined\n /** Methods to include or exclude from executing RPC requests. */\n methods?: TransportConfig['methods'] | undefined\n /** The name of the HTTP transport. */\n name?: TransportConfig['name'] | undefined\n /** Whether to return JSON RPC errors as responses instead of throwing. */\n raw?: raw | boolean | undefined\n /** The max number of times to retry. */\n retryCount?: TransportConfig['retryCount'] | undefined\n /** The base delay (in ms) between retries. */\n retryDelay?: TransportConfig['retryDelay'] | undefined\n /** Typed JSON-RPC schema for the transport. */\n rpcSchema?: rpcSchema | RpcSchema | undefined\n /** The timeout (in ms) for the HTTP request. Default: 10_000 */\n timeout?: TransportConfig['timeout'] | undefined\n}\n\nexport type HttpTransport<\n rpcSchema extends RpcSchema | undefined = undefined,\n raw extends boolean = false,\n> = Transport<\n 'http',\n {\n fetchOptions?: HttpTransportConfig['fetchOptions'] | undefined\n url?: string | undefined\n },\n EIP1193RequestFn\n>\n\nexport type HttpTransportErrorType =\n | CreateTransportErrorType\n | UrlRequiredErrorType\n | ErrorType\n\n/**\n * @description Creates a HTTP transport that connects to a JSON-RPC API.\n */\nexport function http<\n rpcSchema extends RpcSchema | undefined = undefined,\n raw extends boolean = false,\n>(\n /** URL of the JSON-RPC API. Defaults to the chain's public RPC URL. */\n url?: string | undefined,\n config: HttpTransportConfig = {},\n): HttpTransport {\n const {\n batch,\n fetchFn,\n fetchOptions,\n key = 'http',\n methods,\n name = 'HTTP JSON-RPC',\n onFetchRequest,\n onFetchResponse,\n retryDelay,\n raw,\n } = config\n return ({ chain, retryCount: retryCount_, timeout: timeout_ }) => {\n const { batchSize = 1000, wait = 0 } =\n typeof batch === 'object' ? batch : {}\n const retryCount = config.retryCount ?? retryCount_\n const timeout = timeout_ ?? config.timeout ?? 10_000\n const url_ = url || chain?.rpcUrls.default.http[0]\n if (!url_) throw new UrlRequiredError()\n\n const rpcClient = getHttpRpcClient(url_, {\n fetchFn,\n fetchOptions,\n onRequest: onFetchRequest,\n onResponse: onFetchResponse,\n timeout,\n })\n\n return createTransport(\n {\n key,\n methods,\n name,\n async request({ method, params }) {\n const body = { method, params }\n\n const { schedule } = createBatchScheduler({\n id: url_,\n wait,\n shouldSplitBatch(requests) {\n return requests.length > batchSize\n },\n fn: (body: RpcRequest[]) =>\n rpcClient.request({\n body,\n }),\n sort: (a, b) => a.id - b.id,\n })\n\n const fn = async (body: RpcRequest) =>\n batch\n ? schedule(body)\n : [\n await rpcClient.request({\n body,\n }),\n ]\n\n const [{ error, result }] = await fn(body)\n\n if (raw) return { error, result }\n if (error)\n throw new RpcRequestError({\n body,\n error,\n url: url_,\n })\n return result\n },\n retryCount,\n retryDelay,\n timeout,\n type: 'http',\n },\n {\n fetchOptions,\n url: url_,\n },\n )\n }\n}\n", "import { BaseError } from './base.js'\n\nexport type UrlRequiredErrorType = UrlRequiredError & {\n name: 'UrlRequiredError'\n}\nexport class UrlRequiredError extends BaseError {\n constructor() {\n super(\n 'No URL was provided to the Transport. Please provide a valid RPC URL to the Transport.',\n {\n docsPath: '/docs/clients/intro',\n name: 'UrlRequiredError',\n },\n )\n }\n}\n", "// biome-ignore lint/performance/noBarrelFile: entrypoint module\nexport {\n type Abi,\n type AbiEvent,\n type AbiFunction,\n type AbiParameter,\n type AbiParameterKind,\n type AbiParameterToPrimitiveType,\n type AbiStateMutability,\n type Address,\n CircularReferenceError,\n InvalidAbiItemError,\n InvalidAbiParameterError,\n InvalidAbiParametersError,\n InvalidAbiTypeParameterError,\n InvalidFunctionModifierError,\n InvalidModifierError,\n InvalidParameterError,\n InvalidParenthesisError,\n InvalidSignatureError,\n InvalidStructSignatureError,\n type Narrow,\n type ParseAbi,\n type ParseAbiItem,\n type ParseAbiParameter,\n type ParseAbiParameters,\n parseAbi,\n parseAbiItem,\n parseAbiParameter,\n parseAbiParameters,\n SolidityProtectedKeywordError,\n type TypedData,\n type TypedDataDomain,\n type TypedDataParameter,\n UnknownSignatureError,\n UnknownTypeError,\n} from 'abitype'\nexport type {\n BlockOverrides,\n Rpc as RpcBlockOverrides,\n} from 'ox/BlockOverrides'\nexport type { EntryPointVersion } from './account-abstraction/types/entryPointVersion.js'\nexport type {\n RpcEstimateUserOperationGasReturnType,\n RpcGetUserOperationByHashReturnType,\n RpcUserOperation,\n RpcUserOperationReceipt,\n RpcUserOperationRequest,\n} from './account-abstraction/types/rpc.js'\nexport type {\n EstimateUserOperationGasReturnType,\n GetUserOperationByHashReturnType,\n PackedUserOperation,\n UserOperation,\n UserOperationReceipt,\n UserOperationRequest,\n} from './account-abstraction/types/userOperation.js'\nexport type {\n Account,\n AccountSource,\n CustomSource,\n HDAccount,\n HDOptions,\n JsonRpcAccount,\n LocalAccount,\n PrivateKeyAccount,\n} from './accounts/types.js'\nexport type {\n GetEnsAddressErrorType,\n GetEnsAddressParameters,\n GetEnsAddressReturnType,\n} from './actions/ens/getEnsAddress.js'\nexport type {\n GetEnsAvatarErrorType,\n GetEnsAvatarParameters,\n GetEnsAvatarReturnType,\n} from './actions/ens/getEnsAvatar.js'\nexport type {\n GetEnsNameErrorType,\n GetEnsNameParameters,\n GetEnsNameReturnType,\n} from './actions/ens/getEnsName.js'\nexport type {\n GetEnsResolverErrorType,\n GetEnsResolverParameters,\n GetEnsResolverReturnType,\n} from './actions/ens/getEnsResolver.js'\nexport type {\n GetEnsTextErrorType,\n GetEnsTextParameters,\n GetEnsTextReturnType,\n} from './actions/ens/getEnsText.js'\nexport {\n type GetContractErrorType,\n type GetContractParameters,\n type GetContractReturnType,\n getContract,\n} from './actions/getContract.js'\nexport type {\n CallErrorType,\n CallParameters,\n CallReturnType,\n} from './actions/public/call.js'\nexport type {\n CreateAccessListErrorType,\n CreateAccessListParameters,\n CreateAccessListReturnType,\n} from './actions/public/createAccessList.js'\nexport type {\n CreateBlockFilterErrorType,\n CreateBlockFilterReturnType,\n} from './actions/public/createBlockFilter.js'\nexport type {\n CreateContractEventFilterErrorType,\n CreateContractEventFilterParameters,\n CreateContractEventFilterReturnType,\n} from './actions/public/createContractEventFilter.js'\nexport type {\n CreateEventFilterErrorType,\n CreateEventFilterParameters,\n CreateEventFilterReturnType,\n} from './actions/public/createEventFilter.js'\nexport type {\n CreatePendingTransactionFilterErrorType,\n CreatePendingTransactionFilterReturnType,\n} from './actions/public/createPendingTransactionFilter.js'\nexport type {\n EstimateContractGasErrorType,\n EstimateContractGasParameters,\n EstimateContractGasReturnType,\n} from './actions/public/estimateContractGas.js'\nexport type {\n EstimateFeesPerGasErrorType,\n EstimateFeesPerGasParameters,\n EstimateFeesPerGasReturnType,\n} from './actions/public/estimateFeesPerGas.js'\nexport type {\n EstimateGasErrorType,\n EstimateGasParameters,\n EstimateGasReturnType,\n} from './actions/public/estimateGas.js'\nexport type {\n EstimateMaxPriorityFeePerGasErrorType,\n EstimateMaxPriorityFeePerGasParameters,\n EstimateMaxPriorityFeePerGasReturnType,\n} from './actions/public/estimateMaxPriorityFeePerGas.js'\nexport type {\n FillTransactionErrorType,\n FillTransactionParameters,\n FillTransactionReturnType,\n} from './actions/public/fillTransaction.js'\nexport type {\n GetBalanceErrorType,\n GetBalanceParameters,\n GetBalanceReturnType,\n} from './actions/public/getBalance.js'\nexport type {\n GetBlobBaseFeeErrorType,\n GetBlobBaseFeeReturnType,\n} from './actions/public/getBlobBaseFee.js'\nexport type {\n GetBlockErrorType,\n GetBlockParameters,\n GetBlockReturnType,\n} from './actions/public/getBlock.js'\nexport type {\n GetBlockNumberErrorType,\n GetBlockNumberParameters,\n GetBlockNumberReturnType,\n} from './actions/public/getBlockNumber.js'\nexport type {\n GetBlockTransactionCountErrorType,\n GetBlockTransactionCountParameters,\n GetBlockTransactionCountReturnType,\n} from './actions/public/getBlockTransactionCount.js'\nexport type {\n GetChainIdErrorType,\n GetChainIdReturnType,\n} from './actions/public/getChainId.js'\nexport type {\n /** @deprecated Use `GetCodeErrorType` instead */\n GetCodeErrorType as GetBytecodeErrorType,\n GetCodeErrorType,\n /** @deprecated Use `GetCodeParameters` instead */\n GetCodeParameters as GetBytecodeParameters,\n GetCodeParameters,\n /** @deprecated Use `GetCodeReturnType` instead */\n GetCodeReturnType as GetBytecodeReturnType,\n GetCodeReturnType,\n} from './actions/public/getCode.js'\nexport type {\n GetContractEventsErrorType,\n GetContractEventsParameters,\n GetContractEventsReturnType,\n} from './actions/public/getContractEvents.js'\nexport type {\n GetDelegationErrorType,\n GetDelegationParameters,\n GetDelegationReturnType,\n} from './actions/public/getDelegation.js'\nexport type {\n GetEip712DomainErrorType,\n GetEip712DomainParameters,\n GetEip712DomainReturnType,\n} from './actions/public/getEip712Domain.js'\nexport type {\n GetFeeHistoryErrorType,\n GetFeeHistoryParameters,\n GetFeeHistoryReturnType,\n} from './actions/public/getFeeHistory.js'\nexport type {\n GetFilterChangesErrorType,\n GetFilterChangesParameters,\n GetFilterChangesReturnType,\n} from './actions/public/getFilterChanges.js'\nexport type {\n GetFilterLogsErrorType,\n GetFilterLogsParameters,\n GetFilterLogsReturnType,\n} from './actions/public/getFilterLogs.js'\nexport type {\n GetGasPriceErrorType,\n GetGasPriceReturnType,\n} from './actions/public/getGasPrice.js'\nexport type {\n GetLogsErrorType,\n GetLogsParameters,\n GetLogsReturnType,\n} from './actions/public/getLogs.js'\nexport type {\n GetProofErrorType,\n GetProofParameters,\n GetProofReturnType,\n} from './actions/public/getProof.js'\nexport type {\n GetStorageAtErrorType,\n GetStorageAtParameters,\n GetStorageAtReturnType,\n} from './actions/public/getStorageAt.js'\nexport type {\n GetTransactionErrorType,\n GetTransactionParameters,\n GetTransactionReturnType,\n} from './actions/public/getTransaction.js'\nexport type {\n GetTransactionConfirmationsErrorType,\n GetTransactionConfirmationsParameters,\n GetTransactionConfirmationsReturnType,\n} from './actions/public/getTransactionConfirmations.js'\nexport type {\n GetTransactionCountErrorType,\n GetTransactionCountParameters,\n GetTransactionCountReturnType,\n} from './actions/public/getTransactionCount.js'\nexport type {\n GetTransactionReceiptErrorType,\n GetTransactionReceiptParameters,\n GetTransactionReceiptReturnType,\n} from './actions/public/getTransactionReceipt.js'\nexport type {\n MulticallErrorType,\n MulticallParameters,\n MulticallReturnType,\n} from './actions/public/multicall.js'\nexport type {\n ReadContractErrorType,\n ReadContractParameters,\n ReadContractReturnType,\n} from './actions/public/readContract.js'\nexport type {\n SimulateBlocksErrorType,\n SimulateBlocksParameters,\n SimulateBlocksReturnType,\n} from './actions/public/simulateBlocks.js'\nexport type {\n SimulateCallsErrorType,\n SimulateCallsParameters,\n SimulateCallsReturnType,\n} from './actions/public/simulateCalls.js'\nexport type {\n GetMutabilityAwareValue,\n SimulateContractErrorType,\n SimulateContractParameters,\n SimulateContractReturnType,\n} from './actions/public/simulateContract.js'\nexport type {\n UninstallFilterErrorType,\n UninstallFilterParameters,\n UninstallFilterReturnType,\n} from './actions/public/uninstallFilter.js'\nexport type {\n VerifyHashErrorType as VerifyHashActionErrorType,\n VerifyHashParameters as VerifyHashActionParameters,\n VerifyHashReturnType as VerifyHashActionReturnType,\n} from './actions/public/verifyHash.js'\nexport type {\n VerifyMessageErrorType as VerifyMessageActionErrorType,\n VerifyMessageParameters as VerifyMessageActionParameters,\n VerifyMessageReturnType as VerifyMessageActionReturnType,\n} from './actions/public/verifyMessage.js'\nexport type {\n VerifyTypedDataErrorType as VerifyTypedDataActionErrorType,\n VerifyTypedDataParameters as VerifyTypedDataActionParameters,\n VerifyTypedDataReturnType as VerifyTypedDataActionReturnType,\n} from './actions/public/verifyTypedData.js'\nexport type {\n ReplacementReason,\n ReplacementReturnType,\n WaitForTransactionReceiptErrorType,\n WaitForTransactionReceiptParameters,\n WaitForTransactionReceiptReturnType,\n} from './actions/public/waitForTransactionReceipt.js'\nexport type {\n OnBlockNumberFn,\n OnBlockNumberParameter,\n WatchBlockNumberErrorType,\n WatchBlockNumberParameters,\n WatchBlockNumberReturnType,\n} from './actions/public/watchBlockNumber.js'\nexport type {\n OnBlock,\n OnBlockParameter,\n WatchBlocksErrorType,\n WatchBlocksParameters,\n WatchBlocksReturnType,\n} from './actions/public/watchBlocks.js'\nexport type {\n WatchContractEventErrorType,\n WatchContractEventOnLogsFn,\n WatchContractEventOnLogsParameter,\n WatchContractEventParameters,\n WatchContractEventReturnType,\n} from './actions/public/watchContractEvent.js'\nexport type {\n WatchEventErrorType,\n WatchEventOnLogsFn,\n WatchEventOnLogsParameter,\n WatchEventParameters,\n WatchEventReturnType,\n} from './actions/public/watchEvent.js'\nexport type {\n OnTransactionsFn,\n OnTransactionsParameter,\n WatchPendingTransactionsErrorType,\n WatchPendingTransactionsParameters,\n WatchPendingTransactionsReturnType,\n} from './actions/public/watchPendingTransactions.js'\nexport type {\n DropTransactionErrorType,\n DropTransactionParameters,\n} from './actions/test/dropTransaction.js'\nexport type {\n DumpStateErrorType,\n DumpStateReturnType,\n} from './actions/test/dumpState.js'\nexport type {\n GetAutomineErrorType,\n GetAutomineReturnType,\n} from './actions/test/getAutomine.js'\nexport type {\n GetTxpoolContentErrorType,\n GetTxpoolContentReturnType,\n} from './actions/test/getTxpoolContent.js'\nexport type {\n GetTxpoolStatusErrorType,\n GetTxpoolStatusReturnType,\n} from './actions/test/getTxpoolStatus.js'\nexport type {\n ImpersonateAccountErrorType,\n ImpersonateAccountParameters,\n} from './actions/test/impersonateAccount.js'\nexport type {\n IncreaseTimeErrorType,\n IncreaseTimeParameters,\n} from './actions/test/increaseTime.js'\nexport type {\n InspectTxpoolErrorType,\n InspectTxpoolReturnType,\n} from './actions/test/inspectTxpool.js'\nexport type {\n LoadStateErrorType,\n LoadStateParameters,\n LoadStateReturnType,\n} from './actions/test/loadState.js'\nexport type { MineErrorType, MineParameters } from './actions/test/mine.js'\nexport type { RemoveBlockTimestampIntervalErrorType } from './actions/test/removeBlockTimestampInterval.js'\nexport type { ResetErrorType, ResetParameters } from './actions/test/reset.js'\nexport type {\n RevertErrorType,\n RevertParameters,\n} from './actions/test/revert.js'\nexport type {\n SendUnsignedTransactionErrorType,\n SendUnsignedTransactionParameters,\n SendUnsignedTransactionReturnType,\n} from './actions/test/sendUnsignedTransaction.js'\nexport type { SetAutomineErrorType } from './actions/test/setAutomine.js'\nexport type {\n SetBalanceErrorType,\n SetBalanceParameters,\n} from './actions/test/setBalance.js'\nexport type {\n SetBlockGasLimitErrorType,\n SetBlockGasLimitParameters,\n} from './actions/test/setBlockGasLimit.js'\nexport type {\n SetBlockTimestampIntervalErrorType,\n SetBlockTimestampIntervalParameters,\n} from './actions/test/setBlockTimestampInterval.js'\nexport type {\n SetCodeErrorType,\n SetCodeParameters,\n} from './actions/test/setCode.js'\nexport type {\n SetCoinbaseErrorType,\n SetCoinbaseParameters,\n} from './actions/test/setCoinbase.js'\nexport type {\n SetIntervalMiningErrorType,\n SetIntervalMiningParameters,\n} from './actions/test/setIntervalMining.js'\nexport type { SetLoggingEnabledErrorType } from './actions/test/setLoggingEnabled.js'\nexport type {\n SetMinGasPriceErrorType,\n SetMinGasPriceParameters,\n} from './actions/test/setMinGasPrice.js'\nexport type {\n SetNextBlockBaseFeePerGasErrorType,\n SetNextBlockBaseFeePerGasParameters,\n} from './actions/test/setNextBlockBaseFeePerGas.js'\nexport type {\n SetNextBlockTimestampErrorType,\n SetNextBlockTimestampParameters,\n} from './actions/test/setNextBlockTimestamp.js'\nexport type {\n SetNonceErrorType,\n SetNonceParameters,\n} from './actions/test/setNonce.js'\nexport type { SetRpcUrlErrorType } from './actions/test/setRpcUrl.js'\nexport type {\n SetStorageAtErrorType,\n SetStorageAtParameters,\n} from './actions/test/setStorageAt.js'\nexport type { SnapshotErrorType } from './actions/test/snapshot.js'\nexport type {\n StopImpersonatingAccountErrorType,\n StopImpersonatingAccountParameters,\n} from './actions/test/stopImpersonatingAccount.js'\nexport type {\n AddChainErrorType,\n AddChainParameters,\n} from './actions/wallet/addChain.js'\nexport type {\n DeployContractErrorType,\n DeployContractParameters,\n DeployContractReturnType,\n} from './actions/wallet/deployContract.js'\nexport type {\n GetAddressesErrorType,\n GetAddressesReturnType,\n} from './actions/wallet/getAddresses.js'\nexport type {\n GetCallsStatusErrorType,\n GetCallsStatusParameters,\n GetCallsStatusReturnType,\n} from './actions/wallet/getCallsStatus.js'\nexport type {\n GetCapabilitiesErrorType,\n GetCapabilitiesParameters,\n GetCapabilitiesReturnType,\n} from './actions/wallet/getCapabilities.js'\nexport type {\n GetPermissionsErrorType,\n GetPermissionsReturnType,\n} from './actions/wallet/getPermissions.js'\nexport type {\n PrepareAuthorizationErrorType,\n PrepareAuthorizationParameters,\n PrepareAuthorizationReturnType,\n} from './actions/wallet/prepareAuthorization.js'\nexport type {\n PrepareTransactionRequestErrorType,\n PrepareTransactionRequestParameters,\n PrepareTransactionRequestParameterType,\n PrepareTransactionRequestRequest,\n PrepareTransactionRequestReturnType,\n} from './actions/wallet/prepareTransactionRequest.js'\nexport type {\n RequestAddressesErrorType,\n RequestAddressesReturnType,\n} from './actions/wallet/requestAddresses.js'\nexport type {\n RequestPermissionsErrorType,\n RequestPermissionsParameters,\n RequestPermissionsReturnType,\n} from './actions/wallet/requestPermissions.js'\nexport type {\n SendCallsErrorType,\n SendCallsParameters,\n SendCallsReturnType,\n} from './actions/wallet/sendCalls.js'\nexport type {\n SendCallsSyncErrorType,\n SendCallsSyncParameters,\n SendCallsSyncReturnType,\n} from './actions/wallet/sendCallsSync.js'\nexport type {\n SendRawTransactionErrorType,\n SendRawTransactionParameters,\n SendRawTransactionReturnType,\n} from './actions/wallet/sendRawTransaction.js'\nexport type {\n SendRawTransactionSyncErrorType,\n SendRawTransactionSyncParameters,\n SendRawTransactionSyncReturnType,\n} from './actions/wallet/sendRawTransactionSync.js'\nexport type {\n SendTransactionErrorType,\n SendTransactionParameters,\n SendTransactionRequest,\n SendTransactionReturnType,\n} from './actions/wallet/sendTransaction.js'\nexport type {\n SendTransactionSyncErrorType,\n SendTransactionSyncParameters,\n SendTransactionSyncRequest,\n SendTransactionSyncReturnType,\n} from './actions/wallet/sendTransactionSync.js'\nexport type {\n ShowCallsStatusErrorType,\n ShowCallsStatusParameters,\n ShowCallsStatusReturnType,\n} from './actions/wallet/showCallsStatus.js'\nexport type {\n SignAuthorizationErrorType,\n SignAuthorizationParameters,\n SignAuthorizationReturnType,\n} from './actions/wallet/signAuthorization.js'\nexport type {\n SignMessageErrorType,\n SignMessageParameters,\n SignMessageReturnType,\n} from './actions/wallet/signMessage.js'\nexport type {\n SignTransactionErrorType,\n SignTransactionParameters,\n SignTransactionRequest,\n SignTransactionReturnType,\n} from './actions/wallet/signTransaction.js'\nexport type {\n SignTypedDataErrorType,\n SignTypedDataParameters,\n SignTypedDataReturnType,\n} from './actions/wallet/signTypedData.js'\nexport type {\n SwitchChainErrorType,\n SwitchChainParameters,\n} from './actions/wallet/switchChain.js'\nexport type {\n WaitForCallsStatusErrorType,\n WaitForCallsStatusParameters,\n WaitForCallsStatusReturnType,\n WaitForCallsStatusTimeoutErrorType,\n} from './actions/wallet/waitForCallsStatus.js'\nexport { WaitForCallsStatusTimeoutError } from './actions/wallet/waitForCallsStatus.js'\nexport type {\n WatchAssetErrorType,\n WatchAssetParameters,\n WatchAssetReturnType,\n} from './actions/wallet/watchAsset.js'\nexport type {\n WriteContractErrorType,\n WriteContractParameters,\n WriteContractReturnType,\n} from './actions/wallet/writeContract.js'\nexport type {\n WriteContractSyncErrorType,\n WriteContractSyncParameters,\n WriteContractSyncReturnType,\n} from './actions/wallet/writeContractSync.js'\nexport {\n type Client,\n type ClientConfig,\n type CreateClientErrorType,\n createClient,\n type MulticallBatchOptions,\n rpcSchema,\n} from './clients/createClient.js'\nexport {\n type CreatePublicClientErrorType,\n createPublicClient,\n type PublicClient,\n type PublicClientConfig,\n} from './clients/createPublicClient.js'\nexport {\n type CreateTestClientErrorType,\n createTestClient,\n type TestClient,\n type TestClientConfig,\n} from './clients/createTestClient.js'\nexport {\n type CreateWalletClientErrorType,\n createWalletClient,\n type WalletClient,\n type WalletClientConfig,\n} from './clients/createWalletClient.js'\nexport {\n type PublicActions,\n publicActions,\n} from './clients/decorators/public.js'\nexport {\n type TestActions,\n testActions,\n} from './clients/decorators/test.js'\nexport {\n type WalletActions,\n walletActions,\n} from './clients/decorators/wallet.js'\nexport {\n type CreateTransportErrorType,\n createTransport,\n type Transport,\n type TransportConfig,\n} from './clients/transports/createTransport.js'\nexport {\n type CustomTransport,\n type CustomTransportConfig,\n type CustomTransportErrorType,\n custom,\n} from './clients/transports/custom.js'\nexport {\n type FallbackTransport,\n type FallbackTransportConfig,\n type FallbackTransportErrorType,\n fallback,\n shouldThrow,\n} from './clients/transports/fallback.js'\nexport {\n type HttpTransport,\n type HttpTransportConfig,\n type HttpTransportErrorType,\n http,\n} from './clients/transports/http.js'\nexport {\n type WebSocketTransport,\n type WebSocketTransportConfig,\n type WebSocketTransportErrorType,\n webSocket,\n} from './clients/transports/webSocket.js'\nexport {\n erc20Abi,\n erc20Abi_bytes32,\n erc721Abi,\n erc1155Abi,\n erc4626Abi,\n erc6492SignatureValidatorAbi,\n /** @deprecated use `erc6492SignatureValidatorAbi` instead. */\n erc6492SignatureValidatorAbi as universalSignatureValidatorAbi,\n multicall3Abi,\n} from './constants/abis.js'\nexport { ethAddress, zeroAddress } from './constants/address.js'\nexport { zeroHash } from './constants/bytes.js'\nexport {\n deploylessCallViaBytecodeBytecode,\n deploylessCallViaFactoryBytecode,\n erc6492SignatureValidatorByteCode,\n /** @deprecated use `erc6492SignatureValidatorByteCode` instead. */\n erc6492SignatureValidatorByteCode as universalSignatureValidatorByteCode,\n} from './constants/contracts.js'\nexport {\n maxInt8,\n maxInt16,\n maxInt24,\n maxInt32,\n maxInt40,\n maxInt48,\n maxInt56,\n maxInt64,\n maxInt72,\n maxInt80,\n maxInt88,\n maxInt96,\n maxInt104,\n maxInt112,\n maxInt120,\n maxInt128,\n maxInt136,\n maxInt144,\n maxInt152,\n maxInt160,\n maxInt168,\n maxInt176,\n maxInt184,\n maxInt192,\n maxInt200,\n maxInt208,\n maxInt216,\n maxInt224,\n maxInt232,\n maxInt240,\n maxInt248,\n maxInt256,\n maxUint8,\n maxUint16,\n maxUint24,\n maxUint32,\n maxUint40,\n maxUint48,\n maxUint56,\n maxUint64,\n maxUint72,\n maxUint80,\n maxUint88,\n maxUint96,\n maxUint104,\n maxUint112,\n maxUint120,\n maxUint128,\n maxUint136,\n maxUint144,\n maxUint152,\n maxUint160,\n maxUint168,\n maxUint176,\n maxUint184,\n maxUint192,\n maxUint200,\n maxUint208,\n maxUint216,\n maxUint224,\n maxUint232,\n maxUint240,\n maxUint248,\n maxUint256,\n minInt8,\n minInt16,\n minInt24,\n minInt32,\n minInt40,\n minInt48,\n minInt56,\n minInt64,\n minInt72,\n minInt80,\n minInt88,\n minInt96,\n minInt104,\n minInt112,\n minInt120,\n minInt128,\n minInt136,\n minInt144,\n minInt152,\n minInt160,\n minInt168,\n minInt176,\n minInt184,\n minInt192,\n minInt200,\n minInt208,\n minInt216,\n minInt224,\n minInt232,\n minInt240,\n minInt248,\n minInt256,\n} from './constants/number.js'\nexport { presignMessagePrefix } from './constants/strings.js'\nexport { etherUnits, gweiUnits, weiUnits } from './constants/unit.js'\nexport {\n AbiConstructorNotFoundError,\n type AbiConstructorNotFoundErrorType,\n AbiConstructorParamsNotFoundError,\n type AbiConstructorParamsNotFoundErrorType,\n AbiDecodingDataSizeInvalidError,\n type AbiDecodingDataSizeInvalidErrorType,\n AbiDecodingDataSizeTooSmallError,\n type AbiDecodingDataSizeTooSmallErrorType,\n AbiDecodingZeroDataError,\n type AbiDecodingZeroDataErrorType,\n AbiEncodingArrayLengthMismatchError,\n type AbiEncodingArrayLengthMismatchErrorType,\n AbiEncodingBytesSizeMismatchError,\n type AbiEncodingBytesSizeMismatchErrorType,\n AbiEncodingLengthMismatchError,\n type AbiEncodingLengthMismatchErrorType,\n AbiErrorInputsNotFoundError,\n type AbiErrorInputsNotFoundErrorType,\n AbiErrorNotFoundError,\n type AbiErrorNotFoundErrorType,\n AbiErrorSignatureNotFoundError,\n type AbiErrorSignatureNotFoundErrorType,\n AbiEventNotFoundError,\n type AbiEventNotFoundErrorType,\n AbiEventSignatureEmptyTopicsError,\n type AbiEventSignatureEmptyTopicsErrorType,\n AbiEventSignatureNotFoundError,\n type AbiEventSignatureNotFoundErrorType,\n AbiFunctionNotFoundError,\n type AbiFunctionNotFoundErrorType,\n AbiFunctionOutputsNotFoundError,\n type AbiFunctionOutputsNotFoundErrorType,\n AbiFunctionSignatureNotFoundError,\n type AbiFunctionSignatureNotFoundErrorType,\n BytesSizeMismatchError,\n type BytesSizeMismatchErrorType,\n DecodeLogDataMismatch,\n type DecodeLogDataMismatchErrorType,\n DecodeLogTopicsMismatch,\n type DecodeLogTopicsMismatchErrorType,\n InvalidAbiDecodingTypeError,\n type InvalidAbiDecodingTypeErrorType,\n InvalidAbiEncodingTypeError,\n type InvalidAbiEncodingTypeErrorType,\n InvalidArrayError,\n type InvalidArrayErrorType,\n InvalidDefinitionTypeError,\n type InvalidDefinitionTypeErrorType,\n UnsupportedPackedAbiType,\n type UnsupportedPackedAbiTypeErrorType,\n} from './errors/abi.js'\nexport {\n InvalidAddressError,\n type InvalidAddressErrorType,\n} from './errors/address.js'\nexport { BaseError, type BaseErrorType, setErrorConfig } from './errors/base.js'\nexport {\n BlockNotFoundError,\n type BlockNotFoundErrorType,\n} from './errors/block.js'\nexport {\n BundleFailedError,\n type BundleFailedErrorType,\n} from './errors/calls.js'\nexport {\n ChainDoesNotSupportContract,\n type ChainDoesNotSupportContractErrorType,\n ChainMismatchError,\n type ChainMismatchErrorType,\n ChainNotFoundError,\n type ChainNotFoundErrorType,\n ClientChainNotConfiguredError,\n type ClientChainNotConfiguredErrorType,\n InvalidChainIdError,\n type InvalidChainIdErrorType,\n} from './errors/chain.js'\nexport {\n CallExecutionError,\n type CallExecutionErrorType,\n ContractFunctionExecutionError,\n type ContractFunctionExecutionErrorType,\n ContractFunctionRevertedError,\n type ContractFunctionRevertedErrorType,\n ContractFunctionZeroDataError,\n type ContractFunctionZeroDataErrorType,\n CounterfactualDeploymentFailedError,\n type CounterfactualDeploymentFailedErrorType,\n RawContractError,\n type RawContractErrorType,\n} from './errors/contract.js'\nexport {\n SizeExceedsPaddingSizeError,\n type SizeExceedsPaddingSizeErrorType,\n SliceOffsetOutOfBoundsError,\n type SliceOffsetOutOfBoundsErrorType,\n} from './errors/data.js'\nexport {\n IntegerOutOfRangeError,\n type IntegerOutOfRangeErrorType,\n InvalidBytesBooleanError,\n type InvalidBytesBooleanErrorType,\n InvalidHexBooleanError,\n type InvalidHexBooleanErrorType,\n InvalidHexValueError,\n type InvalidHexValueErrorType,\n SizeOverflowError,\n type SizeOverflowErrorType,\n} from './errors/encoding.js'\nexport {\n type EnsAvatarInvalidMetadataError,\n type EnsAvatarInvalidMetadataErrorType,\n EnsAvatarInvalidNftUriError,\n type EnsAvatarInvalidNftUriErrorType,\n EnsAvatarUnsupportedNamespaceError,\n type EnsAvatarUnsupportedNamespaceErrorType,\n EnsAvatarUriResolutionError,\n type EnsAvatarUriResolutionErrorType,\n EnsInvalidChainIdError,\n type EnsInvalidChainIdErrorType,\n} from './errors/ens.js'\nexport {\n EstimateGasExecutionError,\n type EstimateGasExecutionErrorType,\n} from './errors/estimateGas.js'\nexport {\n BaseFeeScalarError,\n type BaseFeeScalarErrorType,\n Eip1559FeesNotSupportedError,\n type Eip1559FeesNotSupportedErrorType,\n MaxFeePerGasTooLowError,\n type MaxFeePerGasTooLowErrorType,\n} from './errors/fee.js'\nexport {\n FilterTypeNotSupportedError,\n type FilterTypeNotSupportedErrorType,\n} from './errors/log.js'\nexport {\n ExecutionRevertedError,\n type ExecutionRevertedErrorType,\n FeeCapTooHighError,\n type FeeCapTooHighErrorType,\n FeeCapTooLowError,\n type FeeCapTooLowErrorType,\n InsufficientFundsError,\n type InsufficientFundsErrorType,\n IntrinsicGasTooHighError,\n type IntrinsicGasTooHighErrorType,\n IntrinsicGasTooLowError,\n type IntrinsicGasTooLowErrorType,\n NonceMaxValueError,\n type NonceMaxValueErrorType,\n NonceTooHighError,\n type NonceTooHighErrorType,\n NonceTooLowError,\n type NonceTooLowErrorType,\n TipAboveFeeCapError,\n type TipAboveFeeCapErrorType,\n TransactionTypeNotSupportedError,\n type TransactionTypeNotSupportedErrorType,\n UnknownNodeError,\n type UnknownNodeErrorType,\n} from './errors/node.js'\nexport {\n HttpRequestError,\n type HttpRequestErrorType,\n RpcRequestError,\n type RpcRequestErrorType,\n SocketClosedError,\n type SocketClosedErrorType,\n TimeoutError,\n type TimeoutErrorType,\n WebSocketRequestError,\n type WebSocketRequestErrorType,\n} from './errors/request.js'\nexport {\n AtomicityNotSupportedError,\n type AtomicityNotSupportedErrorType,\n AtomicReadyWalletRejectedUpgradeError,\n type AtomicReadyWalletRejectedUpgradeErrorType,\n BundleTooLargeError,\n type BundleTooLargeErrorType,\n ChainDisconnectedError,\n type ChainDisconnectedErrorType,\n DuplicateIdError,\n type DuplicateIdErrorType,\n InternalRpcError,\n type InternalRpcErrorType,\n InvalidInputRpcError,\n type InvalidInputRpcErrorType,\n InvalidParamsRpcError,\n type InvalidParamsRpcErrorType,\n InvalidRequestRpcError,\n type InvalidRequestRpcErrorType,\n JsonRpcVersionUnsupportedError,\n type JsonRpcVersionUnsupportedErrorType,\n LimitExceededRpcError,\n type LimitExceededRpcErrorType,\n MethodNotFoundRpcError,\n type MethodNotFoundRpcErrorType,\n MethodNotSupportedRpcError,\n type MethodNotSupportedRpcErrorType,\n ParseRpcError,\n type ParseRpcErrorType,\n ProviderDisconnectedError,\n type ProviderDisconnectedErrorType,\n ProviderRpcError,\n type ProviderRpcErrorCode,\n type ProviderRpcErrorType,\n ResourceNotFoundRpcError,\n type ResourceNotFoundRpcErrorType,\n ResourceUnavailableRpcError,\n type ResourceUnavailableRpcErrorType,\n RpcError,\n type RpcErrorCode,\n type RpcErrorType,\n SwitchChainError,\n TransactionRejectedRpcError,\n type TransactionRejectedRpcErrorType,\n UnauthorizedProviderError,\n type UnauthorizedProviderErrorType,\n UnknownBundleIdError,\n type UnknownBundleIdErrorType,\n UnknownRpcError,\n type UnknownRpcErrorType,\n UnsupportedChainIdError,\n type UnsupportedChainIdErrorType,\n UnsupportedNonOptionalCapabilityError,\n type UnsupportedNonOptionalCapabilityErrorType,\n UnsupportedProviderMethodError,\n type UnsupportedProviderMethodErrorType,\n UserRejectedRequestError,\n type UserRejectedRequestErrorType,\n} from './errors/rpc.js'\nexport {\n AccountStateConflictError,\n type AccountStateConflictErrorType,\n StateAssignmentConflictError,\n type StateAssignmentConflictErrorType,\n} from './errors/stateOverride.js'\nexport {\n FeeConflictError,\n type FeeConflictErrorType,\n InvalidLegacyVError,\n type InvalidLegacyVErrorType,\n InvalidSerializableTransactionError,\n type InvalidSerializableTransactionErrorType,\n InvalidSerializedTransactionError,\n type InvalidSerializedTransactionErrorType,\n InvalidSerializedTransactionTypeError,\n type InvalidSerializedTransactionTypeErrorType,\n InvalidStorageKeySizeError,\n type InvalidStorageKeySizeErrorType,\n TransactionExecutionError,\n type TransactionExecutionErrorType,\n TransactionNotFoundError,\n type TransactionNotFoundErrorType,\n TransactionReceiptNotFoundError,\n type TransactionReceiptNotFoundErrorType,\n WaitForTransactionReceiptTimeoutError,\n type WaitForTransactionReceiptTimeoutErrorType,\n} from './errors/transaction.js'\nexport {\n UrlRequiredError,\n type UrlRequiredErrorType,\n} from './errors/transport.js'\nexport {\n InvalidDomainError,\n type InvalidDomainErrorType,\n InvalidPrimaryTypeError,\n type InvalidPrimaryTypeErrorType,\n InvalidStructTypeError,\n type InvalidStructTypeErrorType,\n} from './errors/typedData.js'\nexport {\n InvalidDecimalNumberError,\n type InvalidDecimalNumberErrorType,\n} from './errors/unit.js'\nexport type {\n DeriveAccount,\n HDKey,\n ParseAccount,\n} from './types/account.js'\nexport type {\n Authorization,\n AuthorizationList,\n AuthorizationRequest,\n SerializedAuthorization,\n SerializedAuthorizationList,\n SignedAuthorization,\n SignedAuthorizationList,\n} from './types/authorization.js'\nexport type {\n Block,\n BlockIdentifier,\n BlockNumber,\n BlockTag,\n Uncle,\n} from './types/block.js'\nexport type { Call, Calls } from './types/calls.js'\nexport type {\n Capabilities,\n /** @deprecated Use `Capabilities` instead. */\n Capabilities as WalletCapabilities,\n CapabilitiesSchema,\n /** @deprecated Use `ChainIdToCapabilities` instead. */\n ChainIdToCapabilities as WalletCapabilitiesRecord,\n ChainIdToCapabilities,\n ExtractCapabilities,\n} from './types/capabilities.js'\nexport type {\n Chain,\n ChainConfig,\n ChainContract,\n ChainEstimateFeesPerGasFn,\n ChainEstimateFeesPerGasFnParameters,\n ChainFees,\n ChainFeesFnParameters,\n ChainFormatter,\n ChainFormatters,\n ChainMaxPriorityFeePerGasFn,\n ChainSerializers,\n DeriveChain,\n ExtractChainFormatterExclude,\n ExtractChainFormatterParameters,\n ExtractChainFormatterReturnType,\n GetChainParameter,\n} from './types/chain.js'\nexport type {\n AbiEventParametersToPrimitiveTypes,\n AbiEventParameterToPrimitiveType,\n AbiEventTopicToPrimitiveType,\n AbiItem,\n AbiItemArgs,\n AbiItemName,\n ContractConstructorArgs,\n ContractErrorArgs,\n ContractErrorName,\n ContractEventArgs,\n ContractEventArgsFromTopics,\n ContractEventName,\n ContractFunctionArgs,\n ContractFunctionName,\n ContractFunctionParameters,\n ContractFunctionReturnType,\n EventDefinition,\n ExtractAbiFunctionForArgs,\n ExtractAbiItem,\n ExtractAbiItemForArgs,\n ExtractAbiItemNames,\n GetEventArgs,\n GetValue,\n LogTopicType,\n MaybeAbiEventName,\n MaybeExtractEventArgsFromAbi,\n UnionWiden,\n Widen,\n} from './types/contract.js'\nexport type { DataSuffix } from './types/dataSuffix.js'\nexport type {\n AddEthereumChainParameter,\n BundlerRpcSchema,\n DebugBundlerRpcSchema,\n EIP1193EventMap,\n EIP1193Events,\n EIP1193Parameters,\n EIP1193Provider,\n EIP1193RequestFn,\n EIP1474Methods,\n NetworkSync,\n PaymasterRpcSchema,\n ProviderConnectInfo,\n ProviderMessage,\n ProviderRpcErrorType as EIP1193ProviderRpcErrorType,\n PublicRpcSchema,\n RpcSchema,\n RpcSchemaOverride,\n TestRpcSchema,\n WalletCallReceipt,\n WalletGetAssetsParameters,\n WalletGetAssetsReturnType,\n WalletGetCallsStatusReturnType,\n WalletGrantPermissionsParameters,\n WalletGrantPermissionsReturnType,\n WalletPermission,\n WalletPermissionCaveat,\n WalletRpcSchema,\n WalletSendCallsParameters,\n WalletSendCallsReturnType,\n WatchAssetParams,\n} from './types/eip1193.js'\nexport { ProviderRpcError as EIP1193ProviderRpcError } from './types/eip1193.js'\nexport type { BlobSidecar, BlobSidecars } from './types/eip4844.js'\nexport type { AssetGateway, AssetGatewayUrls } from './types/ens.js'\nexport type {\n FeeHistory,\n FeeValues,\n FeeValuesEIP1559,\n FeeValuesEIP4844,\n FeeValuesLegacy,\n FeeValuesType,\n} from './types/fee.js'\nexport type { Filter, FilterType } from './types/filter.js'\nexport type { GetTransactionRequestKzgParameter, Kzg } from './types/kzg.js'\nexport type { Log } from './types/log.js'\nexport type {\n ByteArray,\n CompactSignature,\n Hash,\n Hex,\n LogTopic,\n SignableMessage,\n Signature,\n} from './types/misc.js'\nexport type {\n MulticallContracts,\n MulticallResponse,\n MulticallResults,\n} from './types/multicall.js'\nexport type { Register, ResolvedRegister } from './types/register.js'\nexport type {\n Index,\n Quantity,\n RpcAccountStateOverride,\n RpcAuthorization,\n RpcAuthorizationList,\n RpcBlock,\n RpcBlockIdentifier,\n RpcBlockNumber,\n RpcFeeHistory,\n RpcFeeValues,\n RpcLog,\n RpcProof,\n RpcStateMapping,\n RpcStateOverride,\n RpcTransaction,\n RpcTransactionReceipt,\n RpcTransactionRequest,\n RpcUncle,\n Status,\n} from './types/rpc.js'\nexport type {\n StateMapping,\n StateOverride,\n} from './types/stateOverride.js'\nexport type {\n AccessList,\n Transaction,\n TransactionBase,\n TransactionEIP1559,\n TransactionEIP2930,\n TransactionEIP4844,\n TransactionEIP7702,\n TransactionLegacy,\n TransactionReceipt,\n TransactionRequest,\n TransactionRequestBase,\n TransactionRequestEIP1559,\n TransactionRequestEIP2930,\n TransactionRequestEIP4844,\n TransactionRequestEIP7702,\n TransactionRequestGeneric,\n TransactionRequestLegacy,\n TransactionSerializable,\n TransactionSerializableBase,\n TransactionSerializableEIP1559,\n TransactionSerializableEIP2930,\n TransactionSerializableEIP4844,\n TransactionSerializableEIP7702,\n TransactionSerializableGeneric,\n TransactionSerializableLegacy,\n TransactionSerialized,\n TransactionSerializedEIP1559,\n TransactionSerializedEIP2930,\n TransactionSerializedEIP4844,\n TransactionSerializedEIP7702,\n TransactionSerializedGeneric,\n TransactionSerializedLegacy,\n TransactionType,\n} from './types/transaction.js'\nexport type { GetPollOptions, GetTransportConfig } from './types/transport.js'\nexport type {\n EIP712DomainDefinition,\n MessageDefinition,\n TypedDataDefinition,\n} from './types/typedData.js'\nexport type {\n Assign,\n Branded,\n Evaluate,\n ExactPartial,\n ExactRequired,\n IsNarrowable,\n IsNever,\n IsUndefined,\n IsUnion,\n LooseOmit,\n MaybePartial,\n MaybePromise,\n MaybeRequired,\n Mutable,\n NoInfer,\n NoUndefined,\n Omit,\n OneOf,\n Or,\n PartialBy,\n Prettify,\n RequiredBy,\n Some,\n UnionEvaluate,\n UnionLooseOmit,\n UnionOmit,\n UnionPartialBy,\n UnionPick,\n UnionRequiredBy,\n UnionToTuple,\n ValueOf,\n} from './types/utils.js'\nexport type { Withdrawal } from './types/withdrawal.js'\nexport {\n type DecodeAbiParametersErrorType,\n type DecodeAbiParametersReturnType,\n decodeAbiParameters,\n} from './utils/abi/decodeAbiParameters.js'\nexport {\n type DecodeDeployDataErrorType,\n type DecodeDeployDataParameters,\n type DecodeDeployDataReturnType,\n decodeDeployData,\n} from './utils/abi/decodeDeployData.js'\nexport {\n type DecodeErrorResultErrorType,\n type DecodeErrorResultParameters,\n type DecodeErrorResultReturnType,\n decodeErrorResult,\n} from './utils/abi/decodeErrorResult.js'\nexport {\n type DecodeEventLogErrorType,\n type DecodeEventLogParameters,\n type DecodeEventLogReturnType,\n decodeEventLog,\n} from './utils/abi/decodeEventLog.js'\nexport {\n type DecodeFunctionDataErrorType,\n type DecodeFunctionDataParameters,\n type DecodeFunctionDataReturnType,\n decodeFunctionData,\n} from './utils/abi/decodeFunctionData.js'\nexport {\n type DecodeFunctionResultErrorType,\n type DecodeFunctionResultParameters,\n type DecodeFunctionResultReturnType,\n decodeFunctionResult,\n} from './utils/abi/decodeFunctionResult.js'\nexport {\n type EncodeAbiParametersErrorType,\n type EncodeAbiParametersReturnType,\n encodeAbiParameters,\n} from './utils/abi/encodeAbiParameters.js'\nexport {\n type EncodeDeployDataErrorType,\n type EncodeDeployDataParameters,\n type EncodeDeployDataReturnType,\n encodeDeployData,\n} from './utils/abi/encodeDeployData.js'\nexport {\n type EncodeErrorResultErrorType,\n type EncodeErrorResultParameters,\n type EncodeErrorResultReturnType,\n encodeErrorResult,\n} from './utils/abi/encodeErrorResult.js'\nexport {\n type EncodeEventTopicsErrorType,\n type EncodeEventTopicsParameters,\n type EncodeEventTopicsReturnType,\n encodeEventTopics,\n} from './utils/abi/encodeEventTopics.js'\nexport {\n type EncodeFunctionDataErrorType,\n type EncodeFunctionDataParameters,\n type EncodeFunctionDataReturnType,\n encodeFunctionData,\n} from './utils/abi/encodeFunctionData.js'\nexport {\n type EncodeFunctionResultErrorType,\n type EncodeFunctionResultParameters,\n type EncodeFunctionResultReturnType,\n encodeFunctionResult,\n} from './utils/abi/encodeFunctionResult.js'\nexport {\n type EncodePackedErrorType,\n encodePacked,\n} from './utils/abi/encodePacked.js'\nexport {\n type GetAbiItemErrorType,\n type GetAbiItemParameters,\n type GetAbiItemReturnType,\n getAbiItem,\n} from './utils/abi/getAbiItem.js'\nexport {\n type ParseEventLogsErrorType,\n type ParseEventLogsParameters,\n type ParseEventLogsReturnType,\n parseEventLogs,\n} from './utils/abi/parseEventLogs.js'\nexport {\n type PrepareEncodeFunctionDataErrorType,\n type PrepareEncodeFunctionDataParameters,\n type PrepareEncodeFunctionDataReturnType,\n prepareEncodeFunctionData,\n} from './utils/abi/prepareEncodeFunctionData.js'\nexport {\n type ChecksumAddressErrorType,\n checksumAddress,\n type GetAddressErrorType,\n getAddress,\n} from './utils/address/getAddress.js'\nexport {\n type GetContractAddressOptions,\n type GetCreate2AddressErrorType,\n type GetCreate2AddressOptions,\n type GetCreateAddressErrorType,\n type GetCreateAddressOptions,\n getContractAddress,\n getCreate2Address,\n getCreateAddress,\n} from './utils/address/getContractAddress.js'\nexport {\n type IsAddressErrorType,\n type IsAddressOptions,\n isAddress,\n} from './utils/address/isAddress.js'\nexport {\n type IsAddressEqualErrorType,\n type IsAddressEqualReturnType,\n isAddressEqual,\n} from './utils/address/isAddressEqual.js'\nexport {\n type BlobsToCommitmentsErrorType,\n type BlobsToCommitmentsParameters,\n type BlobsToCommitmentsReturnType,\n blobsToCommitments,\n} from './utils/blob/blobsToCommitments.js'\nexport {\n blobsToProofs,\n type blobsToProofsErrorType,\n type blobsToProofsParameters,\n type blobsToProofsReturnType,\n} from './utils/blob/blobsToProofs.js'\nexport {\n type CommitmentsToVersionedHashesErrorType,\n type CommitmentsToVersionedHashesParameters,\n type CommitmentsToVersionedHashesReturnType,\n commitmentsToVersionedHashes,\n} from './utils/blob/commitmentsToVersionedHashes.js'\nexport {\n type CommitmentToVersionedHashErrorType,\n type CommitmentToVersionedHashParameters,\n type CommitmentToVersionedHashReturnType,\n commitmentToVersionedHash,\n} from './utils/blob/commitmentToVersionedHash.js'\nexport {\n type FromBlobsErrorType,\n type FromBlobsParameters,\n type FromBlobsReturnType,\n fromBlobs,\n} from './utils/blob/fromBlobs.js'\nexport {\n type SidecarsToVersionedHashesErrorType,\n type SidecarsToVersionedHashesParameters,\n type SidecarsToVersionedHashesReturnType,\n sidecarsToVersionedHashes,\n} from './utils/blob/sidecarsToVersionedHashes.js'\nexport {\n type ToBlobSidecarsErrorType,\n type ToBlobSidecarsParameters,\n type ToBlobSidecarsReturnType,\n toBlobSidecars,\n} from './utils/blob/toBlobSidecars.js'\nexport {\n type ToBlobsErrorType,\n type ToBlobsParameters,\n type ToBlobsReturnType,\n toBlobs,\n} from './utils/blob/toBlobs.js'\nexport {\n type CcipRequestErrorType,\n type CcipRequestParameters,\n ccipRequest,\n /** @deprecated Use `ccipRequest`. */\n ccipRequest as ccipFetch,\n type OffchainLookupErrorType,\n offchainLookup,\n offchainLookupAbiItem,\n offchainLookupSignature,\n} from './utils/ccip.js'\nexport {\n type AssertCurrentChainErrorType,\n type AssertCurrentChainParameters,\n assertCurrentChain,\n} from './utils/chain/assertCurrentChain.js'\nexport {\n type DefineChainReturnType,\n defineChain,\n extendSchema,\n} from './utils/chain/defineChain.js'\nexport {\n type ExtractChainErrorType,\n type ExtractChainParameters,\n type ExtractChainReturnType,\n extractChain,\n} from './utils/chain/extractChain.js'\nexport {\n type GetChainContractAddressErrorType,\n getChainContractAddress,\n} from './utils/chain/getChainContractAddress.js'\nexport {\n type ConcatBytesErrorType,\n type ConcatErrorType,\n type ConcatHexErrorType,\n type ConcatReturnType,\n concat,\n concatBytes,\n concatHex,\n} from './utils/data/concat.js'\nexport { type IsBytesErrorType, isBytes } from './utils/data/isBytes.js'\nexport { type IsHexErrorType, isHex } from './utils/data/isHex.js'\nexport {\n type PadBytesErrorType,\n type PadErrorType,\n type PadHexErrorType,\n type PadReturnType,\n pad,\n padBytes,\n padHex,\n} from './utils/data/pad.js'\nexport { type SizeErrorType, size } from './utils/data/size.js'\nexport {\n type SliceBytesErrorType,\n type SliceErrorType,\n type SliceHexErrorType,\n slice,\n sliceBytes,\n sliceHex,\n} from './utils/data/slice.js'\nexport {\n type TrimErrorType,\n type TrimReturnType,\n trim,\n} from './utils/data/trim.js'\nexport {\n type BytesToBigIntErrorType,\n type BytesToBigIntOpts,\n type BytesToBoolErrorType,\n type BytesToBoolOpts,\n type BytesToNumberErrorType,\n type BytesToNumberOpts,\n type BytesToStringErrorType,\n type BytesToStringOpts,\n bytesToBigInt,\n bytesToBool,\n bytesToNumber,\n bytesToString,\n type FromBytesErrorType,\n type FromBytesParameters,\n fromBytes,\n} from './utils/encoding/fromBytes.js'\nexport {\n type FromHexErrorType,\n fromHex,\n type HexToBigIntErrorType,\n type HexToBoolErrorType,\n type HexToNumberErrorType,\n type HexToStringErrorType,\n hexToBigInt,\n hexToBool,\n hexToNumber,\n hexToString,\n} from './utils/encoding/fromHex.js'\nexport {\n type FromRlpErrorType,\n type FromRlpReturnType,\n fromRlp,\n} from './utils/encoding/fromRlp.js'\nexport {\n type BoolToBytesErrorType,\n type BoolToBytesOpts,\n boolToBytes,\n type HexToBytesErrorType,\n type HexToBytesOpts,\n hexToBytes,\n type NumberToBytesErrorType,\n numberToBytes,\n type StringToBytesErrorType,\n type StringToBytesOpts,\n stringToBytes,\n type ToBytesErrorType,\n type ToBytesParameters,\n toBytes,\n} from './utils/encoding/toBytes.js'\nexport {\n type BoolToHexErrorType,\n type BoolToHexOpts,\n type BytesToHexErrorType,\n type BytesToHexOpts,\n boolToHex,\n bytesToHex,\n type NumberToHexErrorType,\n type NumberToHexOpts,\n numberToHex,\n type StringToHexErrorType,\n type StringToHexOpts,\n stringToHex,\n type ToHexErrorType,\n type ToHexParameters,\n toHex,\n} from './utils/encoding/toHex.js'\nexport {\n type BytesToRlpErrorType,\n bytesToRlp,\n type HexToRlpErrorType,\n hexToRlp,\n type ToRlpErrorType,\n type ToRlpReturnType,\n toRlp,\n} from './utils/encoding/toRlp.js'\nexport { type LabelhashErrorType, labelhash } from './utils/ens/labelhash.js'\nexport { type NamehashErrorType, namehash } from './utils/ens/namehash.js'\nexport {\n type ToCoinTypeError,\n toCoinType,\n} from './utils/ens/toCoinType.js'\nexport {\n type GetContractErrorReturnType,\n getContractError,\n} from './utils/errors/getContractError.js'\nexport {\n type DefineBlockErrorType,\n defineBlock,\n type FormatBlockErrorType,\n type FormattedBlock,\n formatBlock,\n} from './utils/formatters/block.js'\nexport { type FormatLogErrorType, formatLog } from './utils/formatters/log.js'\nexport {\n type DefineTransactionErrorType,\n defineTransaction,\n type FormatTransactionErrorType,\n type FormattedTransaction,\n formatTransaction,\n transactionType,\n} from './utils/formatters/transaction.js'\nexport {\n type DefineTransactionReceiptErrorType,\n defineTransactionReceipt,\n type FormatTransactionReceiptErrorType,\n type FormattedTransactionReceipt,\n formatTransactionReceipt,\n} from './utils/formatters/transactionReceipt.js'\nexport {\n type DefineTransactionRequestErrorType,\n defineTransactionRequest,\n type FormatTransactionRequestErrorType,\n type FormattedTransactionRequest,\n formatTransactionRequest,\n rpcTransactionType,\n} from './utils/formatters/transactionRequest.js'\nexport { type IsHashErrorType, isHash } from './utils/hash/isHash.js'\nexport {\n type Keccak256ErrorType,\n type Keccak256Hash,\n keccak256,\n} from './utils/hash/keccak256.js'\nexport {\n type Ripemd160ErrorType,\n type Ripemd160Hash,\n ripemd160,\n} from './utils/hash/ripemd160.js'\nexport {\n type Sha256ErrorType,\n type Sha256Hash,\n sha256,\n} from './utils/hash/sha256.js'\nexport {\n type ToEventHashErrorType,\n toEventHash,\n} from './utils/hash/toEventHash.js'\nexport {\n type ToEventSelectorErrorType,\n /** @deprecated use `ToEventSelectorErrorType`. */\n type ToEventSelectorErrorType as GetEventSelectorErrorType,\n toEventSelector,\n /** @deprecated use `toEventSelector`. */\n toEventSelector as getEventSelector,\n} from './utils/hash/toEventSelector.js'\nexport {\n type ToEventSignatureErrorType,\n /** @deprecated use `ToEventSignatureErrorType`. */\n type ToEventSignatureErrorType as GetEventSignatureErrorType,\n toEventSignature,\n /** @deprecated use `toEventSignature`. */\n toEventSignature as getEventSignature,\n} from './utils/hash/toEventSignature.js'\nexport {\n type ToFunctionHashErrorType,\n toFunctionHash,\n} from './utils/hash/toFunctionHash.js'\nexport {\n type ToFunctionSelectorErrorType,\n /** @deprecated use `ToFunctionSelectorErrorType`. */\n type ToFunctionSelectorErrorType as GetFunctionSelectorErrorType,\n toFunctionSelector,\n /** @deprecated use `toFunctionSelector`. */\n toFunctionSelector as getFunctionSelector,\n} from './utils/hash/toFunctionSelector.js'\nexport {\n type ToFunctionSignatureErrorType,\n /** @deprecated use `ToFunctionSignatureErrorType`. */\n type ToFunctionSignatureErrorType as GetFunctionSignatureErrorType,\n toFunctionSignature,\n /** @deprecated use `toFunctionSignature`. */\n toFunctionSignature as getFunctionSignature,\n} from './utils/hash/toFunctionSignature.js'\nexport {\n type DefineKzgErrorType,\n type DefineKzgParameters,\n type DefineKzgReturnType,\n defineKzg,\n} from './utils/kzg/defineKzg.js'\nexport {\n type SetupKzgErrorType,\n type SetupKzgParameters,\n type SetupKzgReturnType,\n setupKzg,\n} from './utils/kzg/setupKzg.js'\nexport {\n type CreateNonceManagerParameters,\n createNonceManager,\n type NonceManager,\n type NonceManagerSource,\n nonceManager,\n} from './utils/nonceManager.js'\nexport { withCache } from './utils/promise/withCache.js'\nexport {\n type WithRetryErrorType,\n withRetry,\n} from './utils/promise/withRetry.js'\nexport {\n type WithTimeoutErrorType,\n withTimeout,\n} from './utils/promise/withTimeout.js'\nexport {\n type CompactSignatureToSignatureErrorType,\n compactSignatureToSignature,\n} from './utils/signature/compactSignatureToSignature.js'\nexport {\n type HashMessageErrorType,\n hashMessage,\n} from './utils/signature/hashMessage.js'\nexport {\n type HashDomainErrorType,\n type HashStructErrorType,\n type HashTypedDataErrorType,\n type HashTypedDataParameters,\n type HashTypedDataReturnType,\n hashDomain,\n hashStruct,\n hashTypedData,\n} from './utils/signature/hashTypedData.js'\nexport {\n type IsErc6492SignatureErrorType,\n type IsErc6492SignatureParameters,\n type IsErc6492SignatureReturnType,\n isErc6492Signature,\n} from './utils/signature/isErc6492Signature.js'\nexport {\n type IsErc8010SignatureErrorType,\n type IsErc8010SignatureParameters,\n type IsErc8010SignatureReturnType,\n isErc8010Signature,\n} from './utils/signature/isErc8010Signature.js'\nexport {\n /** @deprecated Use `ParseCompactSignatureErrorType`. */\n type ParseCompactSignatureErrorType as HexToCompactSignatureErrorType,\n type ParseCompactSignatureErrorType,\n /** @deprecated Use `parseCompactSignature`. */\n parseCompactSignature as hexToCompactSignature,\n parseCompactSignature,\n} from './utils/signature/parseCompactSignature.js'\nexport {\n type ParseErc6492SignatureErrorType,\n type ParseErc6492SignatureParameters,\n type ParseErc6492SignatureReturnType,\n parseErc6492Signature,\n} from './utils/signature/parseErc6492Signature.js'\nexport {\n type ParseErc8010SignatureErrorType,\n type ParseErc8010SignatureParameters,\n type ParseErc8010SignatureReturnType,\n parseErc8010Signature,\n} from './utils/signature/parseErc8010Signature.js'\nexport {\n /** @deprecated Use `ParseSignatureErrorType`. */\n type ParseSignatureErrorType as HexToSignatureErrorType,\n type ParseSignatureErrorType,\n /** @deprecated Use `parseSignature`. */\n parseSignature as hexToSignature,\n parseSignature,\n} from './utils/signature/parseSignature.js'\nexport {\n type RecoverAddressErrorType,\n type RecoverAddressParameters,\n type RecoverAddressReturnType,\n recoverAddress,\n} from './utils/signature/recoverAddress.js'\nexport {\n type RecoverMessageAddressErrorType,\n type RecoverMessageAddressParameters,\n type RecoverMessageAddressReturnType,\n recoverMessageAddress,\n} from './utils/signature/recoverMessageAddress.js'\nexport {\n type RecoverPublicKeyErrorType,\n type RecoverPublicKeyParameters,\n type RecoverPublicKeyReturnType,\n recoverPublicKey,\n} from './utils/signature/recoverPublicKey.js'\nexport {\n type RecoverTransactionAddressErrorType,\n type RecoverTransactionAddressParameters,\n type RecoverTransactionAddressReturnType,\n recoverTransactionAddress,\n} from './utils/signature/recoverTransactionAddress.js'\nexport {\n type RecoverTypedDataAddressErrorType,\n type RecoverTypedDataAddressParameters,\n type RecoverTypedDataAddressReturnType,\n recoverTypedDataAddress,\n} from './utils/signature/recoverTypedDataAddress.js'\nexport {\n /** @deprecated Use `SignatureToHexErrorType` instead. */\n type SerializeCompactSignatureErrorType as CompactSignatureToHexErrorType,\n type SerializeCompactSignatureErrorType,\n /** @deprecated Use `serializeCompactSignature` instead. */\n serializeCompactSignature as compactSignatureToHex,\n serializeCompactSignature,\n} from './utils/signature/serializeCompactSignature.js'\nexport {\n type SerializeErc6492SignatureErrorType,\n type SerializeErc6492SignatureParameters,\n type SerializeErc6492SignatureReturnType,\n serializeErc6492Signature,\n} from './utils/signature/serializeErc6492Signature.js'\nexport {\n type SerializeErc8010SignatureErrorType,\n type SerializeErc8010SignatureParameters,\n type SerializeErc8010SignatureReturnType,\n serializeErc8010Signature,\n} from './utils/signature/serializeErc8010Signature.js'\nexport {\n /** @deprecated Use `SignatureToHexErrorType` instead. */\n type SerializeSignatureErrorType as SignatureToHexErrorType,\n type SerializeSignatureErrorType,\n type SerializeSignatureParameters,\n type SerializeSignatureReturnType,\n /** @deprecated Use `serializeSignature` instead. */\n serializeSignature as signatureToHex,\n serializeSignature,\n} from './utils/signature/serializeSignature.js'\nexport {\n type SignatureToCompactSignatureErrorType,\n signatureToCompactSignature,\n} from './utils/signature/signatureToCompactSignature.js'\nexport {\n type ToPrefixedMessageErrorType,\n toPrefixedMessage,\n} from './utils/signature/toPrefixedMessage.js'\nexport {\n type VerifyHashErrorType,\n type VerifyHashParameters,\n type VerifyHashReturnType,\n verifyHash,\n} from './utils/signature/verifyHash.js'\nexport {\n type VerifyMessageErrorType,\n type VerifyMessageParameters,\n type VerifyMessageReturnType,\n verifyMessage,\n} from './utils/signature/verifyMessage.js'\nexport {\n type VerifyTypedDataErrorType,\n type VerifyTypedDataParameters,\n type VerifyTypedDataReturnType,\n verifyTypedData,\n} from './utils/signature/verifyTypedData.js'\nexport { type StringifyErrorType, stringify } from './utils/stringify.js'\nexport {\n type AssertRequestErrorType,\n assertRequest,\n} from './utils/transaction/assertRequest.js'\nexport {\n type AssertTransactionEIP1559ErrorType,\n type AssertTransactionEIP2930ErrorType,\n type AssertTransactionLegacyErrorType,\n assertTransactionEIP1559,\n assertTransactionEIP2930,\n assertTransactionLegacy,\n} from './utils/transaction/assertTransaction.js'\nexport {\n type GetSerializedTransactionType,\n type GetSerializedTransactionTypeErrorType,\n getSerializedTransactionType,\n} from './utils/transaction/getSerializedTransactionType.js'\nexport {\n type GetTransactionType,\n type GetTransactionTypeErrorType,\n getTransactionType,\n} from './utils/transaction/getTransactionType.js'\nexport {\n type ParseTransactionErrorType,\n type ParseTransactionReturnType,\n parseTransaction,\n} from './utils/transaction/parseTransaction.js'\nexport {\n type SerializeAccessListErrorType,\n serializeAccessList,\n} from './utils/transaction/serializeAccessList.js'\nexport {\n type SerializedTransactionReturnType,\n type SerializeTransactionErrorType,\n type SerializeTransactionFn,\n serializeTransaction,\n} from './utils/transaction/serializeTransaction.js'\nexport {\n type DomainSeparatorErrorType,\n domainSeparator,\n type GetTypesForEIP712DomainErrorType,\n getTypesForEIP712Domain,\n type SerializeTypedDataErrorType,\n serializeTypedData,\n type ValidateTypedDataErrorType,\n validateTypedData,\n} from './utils/typedData.js'\nexport {\n type FormatEtherErrorType,\n formatEther,\n} from './utils/unit/formatEther.js'\nexport {\n type FormatGweiErrorType,\n formatGwei,\n} from './utils/unit/formatGwei.js'\nexport {\n type FormatUnitsErrorType,\n formatUnits,\n} from './utils/unit/formatUnits.js'\nexport {\n type ParseEtherErrorType,\n parseEther,\n} from './utils/unit/parseEther.js'\nexport { type ParseGweiErrorType, parseGwei } from './utils/unit/parseGwei.js'\nexport {\n type ParseUnitsErrorType,\n parseUnits,\n} from './utils/unit/parseUnits.js'\n", "// Window onerror / unhandledrejection \u2192 POST /v1/internal/client-error.\n// Per-page de-dupe and 10-report cap; the Worker rate-limits per IP\n// and forwards to Sentry via SENTRY_DSN_PUBLIC server-side.\n//\n// Why not @sentry/browser? Bundle size is the deciding factor:\n// @sentry/browser min+gz is ~25KB, which is larger than every\n// per-page bundle this app ships (galleries 18KB, studio 100KB,\n// dashboard 7KB). The proxy pattern below has equivalent delivery\n// (the worker uses ctx.waitUntil for the forward), preserves stack\n// fidelity (we POST the raw `Error.stack` string verbatim), and\n// keeps the public DSN out of the client where it would otherwise\n// be visible to scrapers. The trade-off is that we don't get the\n// SDK's auto-capture of breadcrumbs / fetch/console hooks; for v1\n// observability that's an acceptable gap given the size budget.\n\nconst SEEN = new Set();\nconst MAX_REPORTS_PER_PAGE = 10;\nlet installed = false;\nlet configured: { apiBase: string; page: string } | null = null;\n\nexport interface ClientErrorReporterConfig {\n apiBase: string;\n /** Short page identifier \u2014 \"studio\", \"dashboard\", \"galleries\" etc. */\n page: string;\n}\n\nexport function installClientErrorReporter(cfg: ClientErrorReporterConfig): void {\n if (installed) return;\n installed = true;\n configured = cfg;\n window.addEventListener(\"error\", (ev) => {\n const message =\n (ev.error && ev.error.message) || ev.message || \"unknown_error\";\n const stack =\n (ev.error && ev.error.stack) ||\n `${ev.filename ?? \"\"}:${ev.lineno ?? 0}:${ev.colno ?? 0}`;\n void report(message, stack);\n });\n window.addEventListener(\"unhandledrejection\", (ev) => {\n const reason = (ev as PromiseRejectionEvent).reason;\n const message =\n reason instanceof Error\n ? reason.message\n : typeof reason === \"string\"\n ? reason\n : \"unhandled_rejection\";\n const stack = reason instanceof Error ? reason.stack ?? \"\" : \"\";\n void report(message, stack);\n });\n}\n\n// PII scrub: strip query string and hash from any URL we forward\n// so signed-upload tokens, ?email=, ?invite=, fragment-encoded\n// session bits, etc. never leave the browser. Also caps length.\nfunction scrubUrl(raw: string): string {\n try {\n const u = new URL(raw, location.origin);\n return `${u.origin}${u.pathname}`.slice(0, 200);\n } catch {\n return raw.split(\"?\")[0].split(\"#\")[0].slice(0, 200);\n }\n}\n\nasync function report(message: string, stack: string): Promise {\n if (!configured) return;\n // Per-page de-dupe + cap so a hot-loop error doesn't DoS the\n // /v1/internal/client-error endpoint.\n if (SEEN.size >= MAX_REPORTS_PER_PAGE) return;\n const key = `${message}::${stack.slice(0, 80)}`;\n if (SEEN.has(key)) return;\n SEEN.add(key);\n\n try {\n await fetch(`${configured.apiBase}/v1/internal/client-error`, {\n method: \"POST\",\n credentials: \"include\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n message: String(message).slice(0, 500),\n stack: String(stack).slice(0, 4000),\n page: configured.page,\n url: scrubUrl(location.href),\n ts: Date.now(),\n }),\n keepalive: true,\n });\n } catch {\n // never escalate a reporter failure into another error event\n }\n}\n", "/**\n * /wallet/ \u2014 token balance, packs, on-chain purchase, ledger history.\n *\n * No payment processor: buying a pack sends ETH directly to the\n * platform's treasury address, then posts the tx hash to\n * POST /v1/tokens/purchase/confirm, which verifies the receipt on-chain\n * before crediting the account (see tokens/handlers.ts). Mirrors the\n * wallet-connect + send-tx + wait-receipt shape already used by\n * client/mint.ts.\n */\nimport {\n createPublicClient,\n createWalletClient,\n custom,\n http,\n getAddress,\n type EIP1193Provider,\n type Hex,\n} from \"viem\";\nimport { installClientErrorReporter } from \"./lib/clientErrors\";\n\ndeclare global {\n interface Window {\n ethereum?: EIP1193Provider;\n GAWallet?: typeof GAWallet;\n }\n}\n\ninterface WalletConfig {\n apiBase: string;\n rootEl: HTMLElement;\n onUnauthenticated?: () => void;\n}\n\ninterface AccountResp {\n balance: number;\n lifetime_purchased: number;\n lifetime_spent: number;\n lifetime_earned: number;\n}\n\ninterface Pack {\n id: number;\n slug: string;\n title: string;\n tokens: number;\n price_wei: string;\n}\n\ninterface PacksResp {\n packs: Pack[];\n purchase_configured: boolean;\n chain_id: number | null;\n treasury_address: string | null;\n}\n\ninterface LedgerEntry {\n id: number;\n delta: number;\n kind: string;\n balance_after: number;\n ref_kind: string | null;\n ref_id: number | null;\n memo: string | null;\n created_at: number;\n}\n\nfunction escapeHtml(s: string): string {\n return s.replace(/[&<>\"']/g, (ch) => {\n switch (ch) {\n case \"&\": return \"&\";\n case \"<\": return \"<\";\n case \">\": return \">\";\n case '\"': return \""\";\n default: return \"'\";\n }\n });\n}\n\nfunction fmtTokens(n: number): string {\n return n.toLocaleString(\"en-US\");\n}\n\n// price_wei is a decimal string too large for Number \u2014 format to a\n// human ETH amount without pulling in a bignum-decimal library.\nfunction weiToEth(weiStr: string): string {\n const wei = BigInt(weiStr);\n const whole = wei / 1_000_000_000_000_000_000n;\n const frac = wei % 1_000_000_000_000_000_000n;\n const fracStr = frac.toString().padStart(18, \"0\").slice(0, 6).replace(/0+$/, \"\");\n return fracStr ? `${whole}.${fracStr}` : `${whole}`;\n}\n\nasync function fetchJson(url: string, init?: RequestInit): Promise {\n const res = await fetch(url, { credentials: \"include\", ...init });\n if (!res.ok) {\n let detail = \"\";\n try { detail = JSON.stringify(await res.json()); } catch {}\n throw new Error(`${res.status}: ${detail || res.statusText}`);\n }\n return (await res.json()) as T;\n}\n\nconst KIND_LABELS: Record = {\n grant: \"Grant\",\n purchase: \"Purchase\",\n debit: \"Spend\",\n refund: \"Refund\",\n earn: \"Earned\",\n adjust: \"Adjustment\",\n};\n\nfunction renderLedgerRow(e: LedgerEntry): string {\n const sign = e.delta > 0 ? \"+\" : \"\";\n const cls = e.delta > 0 ? \"ga-ledger-credit\" : \"ga-ledger-debit\";\n const when = new Date(e.created_at * 1000).toLocaleString();\n return `\n \n ${escapeHtml(when)}\n ${escapeHtml(KIND_LABELS[e.kind] || e.kind)}\n ${escapeHtml(e.memo || \"\u2014\")}\n ${sign}${fmtTokens(e.delta)}\n ${fmtTokens(e.balance_after)}\n `;\n}\n\nfunction renderPackCard(p: Pack, purchaseConfigured: boolean): string {\n return `\n
    \n

    ${escapeHtml(p.title)}

    \n

    ${fmtTokens(p.tokens)} tokens

    \n

    ${weiToEth(p.price_wei)} ETH

    \n Buy\n
    `;\n}\n\nclass WalletPage {\n private cfg!: WalletConfig;\n private treasury: Hex | null = null;\n private chainId: number | null = null;\n private connectedAddress: Hex | null = null;\n\n async mount(cfg: WalletConfig): Promise {\n this.cfg = cfg;\n installClientErrorReporter({ apiBase: cfg.apiBase, page: \"wallet\" });\n\n let me: unknown = null;\n try {\n me = await fetchJson(`${cfg.apiBase}/v1/me`);\n } catch {\n me = null;\n }\n if (!me) {\n cfg.onUnauthenticated?.();\n return;\n }\n\n await this.loadAccount();\n await this.loadPacks();\n await this.loadLedger();\n this.attachEvents();\n }\n\n private async loadAccount(): Promise {\n const balEl = this.cfg.rootEl.querySelector(\"#ga-wallet-balance\");\n const purchasedEl = this.cfg.rootEl.querySelector(\"#ga-wallet-purchased\");\n const spentEl = this.cfg.rootEl.querySelector(\"#ga-wallet-spent\");\n const earnedEl = this.cfg.rootEl.querySelector(\"#ga-wallet-earned\");\n if (!balEl) return;\n try {\n const acct = await fetchJson(`${this.cfg.apiBase}/v1/tokens/account`);\n balEl.textContent = fmtTokens(acct.balance);\n if (purchasedEl) purchasedEl.textContent = fmtTokens(acct.lifetime_purchased);\n if (spentEl) spentEl.textContent = fmtTokens(acct.lifetime_spent);\n if (earnedEl) earnedEl.textContent = fmtTokens(acct.lifetime_earned);\n } catch {\n balEl.textContent = \"\u2014\";\n }\n }\n\n private async loadPacks(): Promise {\n const el = this.cfg.rootEl.querySelector(\"#ga-wallet-packs\");\n if (!el) return;\n try {\n const data = await fetchJson(`${this.cfg.apiBase}/v1/tokens/packs`);\n // Validated + checksummed here rather than trusted verbatim from\n // the API \u2014 getAddress throws on a malformed address, which we'd\n // rather surface as \"purchasing unavailable\" than as a wallet\n // error deep inside the buy flow.\n try {\n this.treasury = data.treasury_address ? getAddress(data.treasury_address) : null;\n } catch {\n this.treasury = null;\n }\n this.chainId = data.chain_id;\n if (!data.purchase_configured) {\n el.insertAdjacentHTML(\n \"beforebegin\",\n `

    Purchasing isn't configured yet \u2014 packs are shown, but Buy is disabled.

    `,\n );\n }\n el.innerHTML = data.packs.map((p) => renderPackCard(p, data.purchase_configured)).join(\"\");\n } catch (err) {\n el.innerHTML = `
    Failed to load packs: ${escapeHtml(String(err))}
    `;\n }\n }\n\n private async loadLedger(before?: number): Promise {\n const bodyEl = this.cfg.rootEl.querySelector(\"#ga-ledger-body\");\n const moreBtn = this.cfg.rootEl.querySelector(\"#ga-ledger-more\");\n if (!bodyEl) return;\n try {\n const qs = before ? `?before=${before}` : \"\";\n const data = await fetchJson<{ entries: LedgerEntry[]; next_before: number | null }>(\n `${this.cfg.apiBase}/v1/tokens/ledger${qs}`,\n );\n const rows = data.entries.map(renderLedgerRow).join(\"\");\n bodyEl.insertAdjacentHTML(\"beforeend\", rows);\n if (!before && !data.entries.length) {\n bodyEl.innerHTML = `No activity yet.`;\n }\n if (moreBtn) {\n if (data.next_before) {\n moreBtn.classList.remove(\"d-none\");\n moreBtn.dataset.before = String(data.next_before);\n } else {\n moreBtn.classList.add(\"d-none\");\n }\n }\n } catch (err) {\n bodyEl.innerHTML = `Failed to load: ${escapeHtml(String(err))}`;\n }\n }\n\n private feedback(msg: string): void {\n const el = this.cfg.rootEl.querySelector(\"#ga-wallet-feedback\");\n if (el) el.textContent = msg;\n }\n\n private async ensureConnected(): Promise {\n if (this.connectedAddress) return true;\n if (!window.ethereum) {\n this.feedback(\"No injected wallet found. Install MetaMask or a Base-compatible wallet.\");\n return false;\n }\n try {\n const accounts = (await window.ethereum.request({\n method: \"eth_requestAccounts\",\n })) as Hex[];\n if (!accounts?.length) return false;\n this.connectedAddress = getAddress(accounts[0]);\n return true;\n } catch (e) {\n this.feedback(`Wallet connect failed: ${(e as Error).message}`);\n return false;\n }\n }\n\n private async buy(packId: number, button: HTMLButtonElement): Promise {\n const treasury = this.treasury;\n if (!treasury || this.chainId === null) {\n this.feedback(\"Purchasing isn't configured yet.\");\n return;\n }\n if (!(await this.ensureConnected())) return;\n // A local const (not `this.connectedAddress` directly) so it\n // narrows from `Hex | null` for the eth_sendTransaction call below \u2014\n // TS can't carry a field narrowing across the ensureConnected() call.\n const from = this.connectedAddress;\n if (!from) return;\n\n const original = button.textContent;\n button.disabled = true;\n try {\n // Re-fetch the pack's current price at buy time rather than\n // trusting a value cached in the DOM from page load.\n button.textContent = \"Preparing\u2026\";\n const data = await fetchJson(`${this.cfg.apiBase}/v1/tokens/packs`);\n const pack = data.packs.find((p) => p.id === packId);\n if (!pack) throw new Error(\"pack no longer available\");\n\n await this.ensureChain(this.chainId!);\n\n button.textContent = \"Awaiting wallet\u2026\";\n const valueHex = (\"0x\" + BigInt(pack.price_wei).toString(16)) as Hex;\n const txHash = (await window.ethereum!.request({\n method: \"eth_sendTransaction\",\n params: [{ from, to: treasury, value: valueHex }],\n })) as Hex;\n this.feedback(`Transaction sent: ${txHash.slice(0, 10)}\u2026`);\n\n button.textContent = \"Confirming on-chain\u2026\";\n const publicClient = createPublicClient({ transport: http() });\n const receipt = await publicClient.waitForTransactionReceipt({ hash: txHash });\n if (receipt.status !== \"success\") {\n this.feedback(\"Transaction reverted on-chain.\");\n return;\n }\n\n button.textContent = \"Crediting account\u2026\";\n await fetchJson(`${this.cfg.apiBase}/v1/tokens/purchase/confirm`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ pack_id: pack.id, tx_hash: txHash }),\n });\n this.feedback(`Purchased ${fmtTokens(pack.tokens)} tokens.`);\n await this.loadAccount();\n } catch (e) {\n this.feedback(`Purchase failed: ${(e as Error).message}`);\n } finally {\n button.disabled = false;\n button.textContent = original;\n }\n }\n\n private async ensureChain(chainId: number): Promise {\n if (!window.ethereum) return;\n const current = (await window.ethereum.request({ method: \"eth_chainId\" })) as Hex;\n const hex = (\"0x\" + chainId.toString(16)) as Hex;\n if (current.toLowerCase() === hex.toLowerCase()) return;\n try {\n await window.ethereum.request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId: hex }],\n });\n } catch {\n // Wallet may not have the chain added yet; surfaced by the\n // subsequent send failing with a clearer wallet-side error.\n }\n }\n\n private attachEvents(): void {\n this.cfg.rootEl.addEventListener(\"click\", (ev) => {\n const target = ev.target as HTMLElement;\n const buyBtn = target.closest(\".ga-buy-btn\");\n if (buyBtn) {\n const id = parseInt(buyBtn.dataset.packId || \"\", 10);\n if (id) void this.buy(id, buyBtn);\n return;\n }\n const moreBtn = target.closest(\"#ga-ledger-more\");\n if (moreBtn) {\n const before = parseInt(moreBtn.dataset.before || \"\", 10);\n if (before) void this.loadLedger(before);\n }\n });\n }\n}\n\nconst GAWallet = {\n async mount(cfg: WalletConfig) {\n await new WalletPage().mount(cfg);\n },\n};\n\nwindow.GAWallet = GAWallet;\nexport default GAWallet;\n"], + "mappings": "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", + "names": ["version", "init_version", "__esmMin", "BaseError", "init_errors", "__esmMin", "init_version", "_BaseError", "shortMessage", "args", "details", "docsPath", "message", "version", "execTyped", "regex", "string", "bytesRegex", "integerRegex", "isTupleRegex", "init_regex", "__esmMin", "formatAbiParameter", "abiParameter", "type", "tupleRegex", "length", "i", "component", "result", "execTyped", "init_formatAbiParameter", "__esmMin", "init_regex", "formatAbiParameters", "abiParameters", "params", "length", "i", "abiParameter", "formatAbiParameter", "init_formatAbiParameters", "__esmMin", "init_formatAbiParameter", "formatAbiItem", "abiItem", "formatAbiParameters", "init_formatAbiItem", "__esmMin", "init_formatAbiParameters", "isErrorSignature", "signature", "errorSignatureRegex", "execErrorSignature", "execTyped", "isEventSignature", "eventSignatureRegex", "execEventSignature", "isFunctionSignature", "functionSignatureRegex", "execFunctionSignature", "isStructSignature", "structSignatureRegex", "execStructSignature", "isConstructorSignature", "constructorSignatureRegex", "execConstructorSignature", "isFallbackSignature", "fallbackSignatureRegex", "execFallbackSignature", "isReceiveSignature", "receiveSignatureRegex", "modifiers", "eventModifiers", "functionModifiers", "init_signatures", "__esmMin", "init_regex", "InvalidAbiItemError", "UnknownTypeError", "UnknownSolidityTypeError", "init_abiItem", "__esmMin", "init_errors", "BaseError", "signature", "type", "InvalidAbiParametersError", "InvalidParameterError", "SolidityProtectedKeywordError", "InvalidModifierError", "InvalidFunctionModifierError", "InvalidAbiTypeParameterError", "init_abiParameter", "__esmMin", "init_errors", "BaseError", "params", "param", "name", "type", "modifier", "abiParameter", "InvalidSignatureError", "UnknownSignatureError", "InvalidStructSignatureError", "init_signature", "__esmMin", "init_errors", "BaseError", "signature", "type", "CircularReferenceError", "init_struct", "__esmMin", "init_errors", "BaseError", "type", "InvalidParenthesisError", "init_splitParameters", "__esmMin", "init_errors", "BaseError", "current", "depth", "getParameterCacheKey", "param", "type", "structs", "structKey", "struct", "propertyKey", "property", "parameterCache", "init_cache", "__esmMin", "parseSignature", "signature", "structs", "isFunctionSignature", "parseFunctionSignature", "isEventSignature", "parseEventSignature", "isErrorSignature", "parseErrorSignature", "isConstructorSignature", "parseConstructorSignature", "isFallbackSignature", "parseFallbackSignature", "isReceiveSignature", "UnknownSignatureError", "match", "execFunctionSignature", "InvalidSignatureError", "inputParams", "splitParameters", "inputs", "inputLength", "i", "parseAbiParameter", "functionModifiers", "outputs", "outputParams", "outputLength", "execEventSignature", "params", "abiParameters", "length", "eventModifiers", "execErrorSignature", "execConstructorSignature", "execFallbackSignature", "param", "options", "parameterCacheKey", "getParameterCacheKey", "parameterCache", "isTuple", "isTupleRegex", "execTyped", "abiParameterWithTupleRegex", "abiParameterWithoutTupleRegex", "InvalidParameterError", "isSolidityKeyword", "SolidityProtectedKeywordError", "name", "indexed", "type", "components", "components_", "dynamicIntegerRegex", "isSolidityType", "UnknownSolidityTypeError", "InvalidModifierError", "isValidDataLocation", "InvalidFunctionModifierError", "abiParameter", "result", "current", "depth", "char", "tail", "InvalidParenthesisError", "bytesRegex", "integerRegex", "protectedKeywordsRegex", "isArray", "init_utils", "__esmMin", "init_regex", "init_abiItem", "init_abiParameter", "init_signature", "init_splitParameters", "init_cache", "init_signatures", "parseStructs", "signatures", "shallowStructs", "signaturesLength", "signature", "isStructSignature", "match", "execStructSignature", "InvalidSignatureError", "properties", "components", "propertiesLength", "k", "trimmed", "abiParameter", "parseAbiParameter", "InvalidStructSignatureError", "resolvedStructs", "entries", "entriesLength", "name", "parameters", "resolveStructs", "abiParameters", "structs", "ancestors", "length", "i", "isTupleRegex", "execTyped", "typeWithoutTupleRegex", "InvalidAbiTypeParameterError", "array", "type", "CircularReferenceError", "isSolidityType", "UnknownTypeError", "init_structs", "__esmMin", "init_regex", "init_abiItem", "init_abiParameter", "init_signature", "init_struct", "init_signatures", "init_utils", "parseAbi", "signatures", "structs", "parseStructs", "abi", "length", "i", "signature", "isStructSignature", "parseSignature", "init_parseAbi", "__esmMin", "init_signatures", "init_structs", "init_utils", "parseAbiItem", "signature", "abiItem", "parseSignature", "structs", "parseStructs", "length", "i", "signature_", "isStructSignature", "InvalidAbiItemError", "init_parseAbiItem", "__esmMin", "init_abiItem", "init_signatures", "init_structs", "init_utils", "parseAbiParameters", "params", "abiParameters", "parameters", "splitParameters", "length", "i", "parseAbiParameter", "modifiers", "structs", "parseStructs", "signature", "isStructSignature", "k", "InvalidAbiParametersError", "init_parseAbiParameters", "__esmMin", "init_abiParameter", "init_signatures", "init_structs", "init_utils", "init_exports", "__esmMin", "init_formatAbiItem", "init_formatAbiParameters", "init_parseAbi", "init_parseAbiItem", "init_parseAbiParameters", "formatAbiItem", "abiItem", "includeName", "InvalidDefinitionTypeError", "formatAbiParams", "params", "param", "formatAbiParam", "init_formatAbiItem", "__esmMin", "init_abi", "isHex", "value", "strict", "init_isHex", "__esmMin", "size", "value", "isHex", "init_size", "__esmMin", "init_isHex", "version", "init_version", "__esmMin", "walk", "err", "fn", "errorConfig", "BaseError", "init_base", "__esmMin", "init_version", "docsBaseUrl", "docsPath", "docsSlug", "version", "_BaseError", "shortMessage", "args", "details", "docsUrl", "message", "AbiConstructorNotFoundError", "AbiConstructorParamsNotFoundError", "AbiDecodingDataSizeTooSmallError", "AbiDecodingZeroDataError", "AbiEncodingArrayLengthMismatchError", "AbiEncodingBytesSizeMismatchError", "AbiEncodingLengthMismatchError", "AbiErrorInputsNotFoundError", "AbiErrorNotFoundError", "AbiErrorSignatureNotFoundError", "AbiEventSignatureEmptyTopicsError", "AbiEventSignatureNotFoundError", "AbiEventNotFoundError", "AbiFunctionNotFoundError", "AbiFunctionOutputsNotFoundError", "AbiFunctionSignatureNotFoundError", "AbiItemAmbiguityError", "BytesSizeMismatchError", "DecodeLogDataMismatch", "DecodeLogTopicsMismatch", "InvalidAbiEncodingTypeError", "InvalidAbiDecodingTypeError", "InvalidArrayError", "InvalidDefinitionTypeError", "init_abi", "__esmMin", "init_formatAbiItem", "init_size", "init_base", "BaseError", "docsPath", "data", "params", "size", "formatAbiParams", "cause", "expectedLength", "givenLength", "type", "expectedSize", "value", "errorName", "signature", "eventName", "functionName", "x", "y", "formatAbiItem", "givenSize", "abiItem", "param", "SliceOffsetOutOfBoundsError", "SizeExceedsPaddingSizeError", "InvalidBytesLengthError", "init_data", "__esmMin", "init_base", "BaseError", "offset", "position", "size", "targetSize", "type", "pad", "hexOrBytes", "dir", "size", "padHex", "padBytes", "hex_", "hex", "SizeExceedsPaddingSizeError", "bytes", "paddedBytes", "i", "padEnd", "init_pad", "__esmMin", "init_data", "IntegerOutOfRangeError", "InvalidBytesBooleanError", "InvalidHexBooleanError", "SizeOverflowError", "init_encoding", "__esmMin", "init_base", "BaseError", "max", "min", "signed", "size", "value", "bytes", "hex", "givenSize", "maxSize", "trim", "hexOrBytes", "dir", "data", "sliceLength", "i", "init_trim", "__esmMin", "assertSize", "hexOrBytes", "size", "SizeOverflowError", "hexToBigInt", "hex", "opts", "signed", "value", "max", "hexToBool", "hex_", "trim", "InvalidHexBooleanError", "hexToNumber", "number", "IntegerOutOfRangeError", "init_fromHex", "__esmMin", "init_encoding", "init_size", "init_trim", "toHex", "value", "opts", "numberToHex", "stringToHex", "boolToHex", "bytesToHex", "hex", "assertSize", "pad", "string", "i", "hexes", "value_", "signed", "size", "maxValue", "minValue", "suffix", "IntegerOutOfRangeError", "encoder", "init_toHex", "__esmMin", "init_encoding", "init_pad", "init_fromHex", "_v", "toBytes", "value", "opts", "numberToBytes", "boolToBytes", "isHex", "hexToBytes", "stringToBytes", "bytes", "assertSize", "pad", "charCodeToBase16", "char", "charCodeMap", "hex_", "hex", "hexString", "length", "index", "j", "nibbleLeft", "nibbleRight", "BaseError", "numberToHex", "encoder", "init_toBytes", "__esmMin", "init_base", "init_isHex", "init_pad", "init_fromHex", "init_toHex", "fromBig", "n", "le", "U32_MASK64", "_32n", "split", "lst", "len", "Ah", "Al", "i", "h", "l", "rotlSH", "rotlSL", "rotlBH", "rotlBL", "init_u64", "__esmMin", "s", "crypto", "init_crypto", "__esmMin", "isBytes", "a", "anumber", "n", "abytes", "b", "lengths", "ahash", "h", "aexists", "instance", "checkFinished", "aoutput", "out", "min", "u32", "arr", "clean", "arrays", "i", "createView", "rotr", "word", "shift", "byteSwap", "byteSwap32", "utf8ToBytes", "str", "toBytes", "data", "concatBytes", "sum", "res", "pad", "createHasher", "hashCons", "hashC", "msg", "tmp", "randomBytes", "bytesLength", "crypto", "isLE", "swap32IfBE", "Hash", "init_utils", "__esmMin", "init_crypto", "u", "keccakP", "s", "rounds", "B", "round", "x", "idx1", "idx0", "B0", "B1", "Th", "rotlH", "Tl", "rotlL", "y", "curH", "curL", "t", "shift", "SHA3_ROTL", "PI", "SHA3_PI", "SHA3_IOTA_H", "SHA3_IOTA_L", "clean", "_0n", "_1n", "_2n", "_7n", "_256n", "_0x71n", "_SHA3_IOTA", "IOTAS", "Keccak", "gen", "keccak_256", "init_sha3", "__esmMin", "init_u64", "init_utils", "R", "j", "split", "h", "l", "rotlBH", "rotlSH", "rotlBL", "rotlSL", "_Keccak", "Hash", "blockLen", "suffix", "outputLen", "enableXOF", "anumber", "u32", "swap32IfBE", "data", "aexists", "toBytes", "abytes", "state", "len", "pos", "take", "i", "out", "bufferOut", "bytes", "aoutput", "to", "createHasher", "keccak256", "value", "to_", "to", "bytes", "keccak_256", "isHex", "toBytes", "toHex", "init_keccak256", "__esmMin", "init_sha3", "init_isHex", "init_toBytes", "init_toHex", "hashSignature", "sig", "hash", "init_hashSignature", "__esmMin", "init_toBytes", "init_keccak256", "value", "keccak256", "toBytes", "normalizeSignature", "signature", "active", "current", "level", "result", "valid", "char", "BaseError", "init_normalizeSignature", "__esmMin", "init_base", "toSignature", "init_toSignature", "__esmMin", "init_exports", "init_normalizeSignature", "def", "def_", "formatAbiItem", "normalizeSignature", "toSignatureHash", "fn", "hashSignature", "toSignature", "init_toSignatureHash", "__esmMin", "init_hashSignature", "init_toSignature", "toEventSelector", "init_toEventSelector", "__esmMin", "init_toSignatureHash", "toSignatureHash", "InvalidAddressError", "init_address", "__esmMin", "init_base", "BaseError", "address", "LruMap", "init_lru", "__esmMin", "size", "key", "value", "firstKey", "checksumAddress", "address_", "chainId", "checksumAddressCache", "hexAddress", "hash", "keccak256", "stringToBytes", "address", "result", "getAddress", "isAddress", "InvalidAddressError", "init_getAddress", "__esmMin", "init_address", "init_toBytes", "init_keccak256", "init_lru", "init_isAddress", "LruMap", "isAddress", "address", "options", "strict", "cacheKey", "isAddressCache", "result", "addressRegex", "checksumAddress", "init_isAddress", "__esmMin", "init_lru", "init_getAddress", "LruMap", "concat", "values", "concatHex", "concatBytes", "length", "arr", "result", "offset", "acc", "x", "init_concat", "__esmMin", "slice", "value", "start", "end", "strict", "isHex", "sliceHex", "sliceBytes", "assertStartOffset", "size", "SliceOffsetOutOfBoundsError", "assertEndOffset", "value_", "init_slice", "__esmMin", "init_data", "init_isHex", "init_size", "bytesRegex", "integerRegex", "init_regex", "__esmMin", "encodeAbiParameters", "params", "values", "AbiEncodingLengthMismatchError", "preparedParams", "prepareParams", "data", "encodeParams", "i", "prepareParam", "param", "value", "arrayComponents", "getArrayComponents", "length", "type", "encodeArray", "encodeTuple", "encodeAddress", "encodeBool", "signed", "size", "integerRegex", "encodeNumber", "encodeBytes", "encodeString", "InvalidAbiEncodingTypeError", "staticSize", "dynamic", "encoded", "staticParams", "dynamicParams", "dynamicSize", "numberToHex", "concat", "isAddress", "InvalidAddressError", "padHex", "InvalidArrayError", "AbiEncodingArrayLengthMismatchError", "dynamicChild", "preparedParam", "paramSize", "bytesSize", "value_", "AbiEncodingBytesSizeMismatchError", "BaseError", "boolToHex", "max", "min", "IntegerOutOfRangeError", "hexValue", "stringToHex", "partsLength", "parts", "slice", "param_", "index", "matches", "init_encodeAbiParameters", "__esmMin", "init_abi", "init_address", "init_base", "init_encoding", "init_isAddress", "init_concat", "init_pad", "init_size", "init_slice", "init_toHex", "init_regex", "toFunctionSelector", "init_toFunctionSelector", "__esmMin", "init_slice", "init_toSignatureHash", "fn", "slice", "toSignatureHash", "getAbiItem", "parameters", "abi", "args", "name", "isSelector", "isHex", "abiItems", "abiItem", "toFunctionSelector", "toEventSelector", "matchedAbiItem", "arg", "index", "abiParameter", "isArgOfType", "ambiguousTypes", "getAmbiguousTypes", "AbiItemAmbiguityError", "argType", "abiParameterType", "isAddress", "component", "x", "sourceParameters", "targetParameters", "parameterIndex", "sourceParameter", "targetParameter", "types", "init_getAbiItem", "__esmMin", "init_abi", "init_isHex", "init_isAddress", "init_toEventSelector", "init_toFunctionSelector", "parseAccount", "account", "init_parseAccount", "__esmMin", "prepareEncodeFunctionData", "parameters", "abi", "args", "functionName", "abiItem", "item", "getAbiItem", "AbiFunctionNotFoundError", "docsPath", "toFunctionSelector", "formatAbiItem", "init_prepareEncodeFunctionData", "__esmMin", "init_abi", "init_toFunctionSelector", "init_formatAbiItem", "init_getAbiItem", "encodeFunctionData", "parameters", "args", "abi", "functionName", "prepareEncodeFunctionData", "abiItem", "signature", "data", "encodeAbiParameters", "concatHex", "init_encodeFunctionData", "__esmMin", "init_concat", "init_encodeAbiParameters", "init_prepareEncodeFunctionData", "panicReasons", "solidityError", "solidityPanic", "init_solidity", "__esmMin", "NegativeOffsetError", "PositionOutOfBoundsError", "RecursiveReadLimitExceededError", "init_cursor", "__esmMin", "init_base", "BaseError", "offset", "length", "position", "count", "limit", "createCursor", "bytes", "recursiveReadLimit", "cursor", "staticCursor", "init_cursor", "__esmMin", "RecursiveReadLimitExceededError", "position", "PositionOutOfBoundsError", "offset", "NegativeOffsetError", "position_", "length", "byte", "value", "size", "oldPosition", "count", "bytesToBigInt", "bytes", "opts", "assertSize", "hex", "bytesToHex", "hexToBigInt", "bytesToBool", "bytes_", "trim", "InvalidBytesBooleanError", "bytesToNumber", "hexToNumber", "bytesToString", "init_fromBytes", "__esmMin", "init_encoding", "init_trim", "init_fromHex", "init_toHex", "decodeAbiParameters", "params", "data", "bytes", "hexToBytes", "cursor", "createCursor", "size", "AbiDecodingZeroDataError", "AbiDecodingDataSizeTooSmallError", "bytesToHex", "consumed", "values", "param", "consumed_", "decodeParameter", "staticPosition", "arrayComponents", "getArrayComponents", "length", "type", "decodeArray", "decodeTuple", "decodeAddress", "decodeBool", "decodeBytes", "decodeNumber", "decodeString", "InvalidAbiDecodingTypeError", "value", "checksumAddress", "sliceBytes", "offset", "bytesToNumber", "sizeOfOffset", "start", "startOfData", "sizeOfLength", "dynamicChild", "hasDynamicChild", "i", "bytesToBool", "_", "signed", "bytesToBigInt", "hasUnnamedChild", "name", "component", "bytesToString", "trim", "init_decodeAbiParameters", "__esmMin", "init_abi", "init_getAddress", "init_cursor", "init_size", "init_slice", "init_trim", "init_fromBytes", "init_toBytes", "init_toHex", "init_encodeAbiParameters", "decodeErrorResult", "parameters", "abi", "data", "cause", "signature", "slice", "AbiDecodingZeroDataError", "abiItem", "solidityError", "solidityPanic", "x", "toFunctionSelector", "formatAbiItem", "AbiErrorSignatureNotFoundError", "decodeAbiParameters", "init_decodeErrorResult", "__esmMin", "init_solidity", "init_abi", "init_slice", "init_toFunctionSelector", "init_decodeAbiParameters", "init_formatAbiItem", "stringify", "init_stringify", "__esmMin", "value", "replacer", "space", "key", "value_", "formatAbiItemWithArgs", "abiItem", "args", "includeFunctionName", "includeName", "input", "i", "stringify", "init_formatAbiItemWithArgs", "__esmMin", "init_stringify", "etherUnits", "gweiUnits", "init_unit", "__esmMin", "formatUnits", "value", "decimals", "display", "negative", "integer", "fraction", "init_formatUnits", "__esmMin", "formatEther", "wei", "unit", "formatUnits", "etherUnits", "init_formatEther", "__esmMin", "init_unit", "init_formatUnits", "formatGwei", "wei", "unit", "formatUnits", "gweiUnits", "init_formatGwei", "__esmMin", "init_unit", "init_formatUnits", "prettyStateMapping", "stateMapping", "pretty", "slot", "value", "prettyStateOverride", "stateOverride", "address", "state", "val", "AccountStateConflictError", "StateAssignmentConflictError", "init_stateOverride", "__esmMin", "init_base", "BaseError", "prettyPrint", "args", "entries", "key", "value", "maxLength", "acc", "InvalidSerializableTransactionError", "TransactionExecutionError", "TransactionNotFoundError", "TransactionReceiptNotFoundError", "TransactionReceiptRevertedError", "WaitForTransactionReceiptTimeoutError", "init_transaction", "__esmMin", "init_formatEther", "init_formatGwei", "init_base", "BaseError", "transaction", "cause", "account", "docsPath", "chain", "data", "gas", "gasPrice", "maxFeePerGas", "maxPriorityFeePerGas", "nonce", "to", "prettyArgs", "formatEther", "formatGwei", "blockHash", "blockNumber", "blockTag", "hash", "index", "identifier", "receipt", "getContractAddress", "getUrl", "init_utils", "__esmMin", "address", "url", "parsed", "CallExecutionError", "ContractFunctionExecutionError", "ContractFunctionRevertedError", "ContractFunctionZeroDataError", "CounterfactualDeploymentFailedError", "RawContractError", "init_contract", "__esmMin", "init_parseAccount", "init_solidity", "init_decodeErrorResult", "init_formatAbiItem", "init_formatAbiItemWithArgs", "init_getAbiItem", "init_formatEther", "init_formatGwei", "init_abi", "init_base", "init_stateOverride", "init_transaction", "init_utils", "BaseError", "cause", "account_", "docsPath", "chain", "data", "gas", "gasPrice", "maxFeePerGas", "maxPriorityFeePerGas", "nonce", "to", "value", "stateOverride", "account", "parseAccount", "prettyArgs", "prettyPrint", "formatEther", "formatGwei", "prettyStateOverride", "abi", "args", "contractAddress", "functionName", "sender", "abiItem", "getAbiItem", "formattedArgs", "formatAbiItemWithArgs", "functionWithParams", "formatAbiItem", "getContractAddress", "message", "error", "decodedData", "metaMessages", "reason", "decodeErrorResult", "errorName", "errorArgs", "firstArg", "panicReasons", "errorWithParams", "err", "signature", "AbiErrorSignatureNotFoundError", "factory", "HttpRequestError", "RpcRequestError", "TimeoutError", "init_request", "__esmMin", "init_stringify", "init_base", "init_utils", "BaseError", "body", "cause", "details", "headers", "status", "url", "getUrl", "stringify", "error", "unknownErrorCode", "RpcError", "ProviderRpcError", "ParseRpcError", "InvalidRequestRpcError", "MethodNotFoundRpcError", "InvalidParamsRpcError", "InternalRpcError", "InvalidInputRpcError", "ResourceNotFoundRpcError", "ResourceUnavailableRpcError", "TransactionRejectedRpcError", "MethodNotSupportedRpcError", "LimitExceededRpcError", "JsonRpcVersionUnsupportedError", "UserRejectedRequestError", "UnauthorizedProviderError", "UnsupportedProviderMethodError", "ProviderDisconnectedError", "ChainDisconnectedError", "SwitchChainError", "UnsupportedNonOptionalCapabilityError", "UnsupportedChainIdError", "DuplicateIdError", "UnknownBundleIdError", "BundleTooLargeError", "AtomicReadyWalletRejectedUpgradeError", "AtomicityNotSupportedError", "WalletConnectSessionSettlementError", "UnknownRpcError", "init_rpc", "__esmMin", "init_base", "init_request", "BaseError", "cause", "code", "docsPath", "metaMessages", "name", "shortMessage", "RpcRequestError", "options", "_ParseRpcError", "_InvalidRequestRpcError", "_MethodNotFoundRpcError", "method", "_InvalidParamsRpcError", "_InternalRpcError", "_InvalidInputRpcError", "_ResourceNotFoundRpcError", "_ResourceUnavailableRpcError", "_TransactionRejectedRpcError", "_MethodNotSupportedRpcError", "_LimitExceededRpcError", "_JsonRpcVersionUnsupportedError", "_UserRejectedRequestError", "_UnauthorizedProviderError", "_UnsupportedProviderMethodError", "_ProviderDisconnectedError", "_ChainDisconnectedError", "_SwitchChainError", "_UnsupportedNonOptionalCapabilityError", "_UnsupportedChainIdError", "_DuplicateIdError", "_UnknownBundleIdError", "_BundleTooLargeError", "_AtomicReadyWalletRejectedUpgradeError", "_AtomicityNotSupportedError", "_WalletConnectSessionSettlementError", "setBigUint64", "view", "byteOffset", "value", "isLE", "_32n", "_u32_max", "wh", "wl", "h", "l", "Chi", "a", "b", "c", "Maj", "HashMD", "SHA256_IV", "init_md", "__esmMin", "init_utils", "Hash", "blockLen", "outputLen", "padOffset", "createView", "data", "aexists", "toBytes", "abytes", "buffer", "len", "pos", "take", "dataView", "out", "aoutput", "clean", "i", "oview", "outLen", "state", "res", "to", "length", "finished", "destroyed", "SHA256_K", "SHA256_W", "SHA256", "sha256", "init_sha2", "__esmMin", "init_md", "init_utils", "HashMD", "outputLen", "SHA256_IV", "A", "B", "C", "D", "E", "F", "G", "H", "view", "offset", "i", "W15", "W2", "s0", "rotr", "s1", "sigma1", "T1", "Chi", "T2", "Maj", "clean", "createHasher", "HMAC", "hmac", "init_hmac", "__esmMin", "init_utils", "Hash", "hash", "_key", "ahash", "key", "toBytes", "blockLen", "pad", "clean", "buf", "aexists", "out", "abytes", "to", "oHash", "iHash", "finished", "destroyed", "outputLen", "message", "isBytes", "a", "abytes", "item", "abool", "title", "value", "numberToHexUnpadded", "num", "hex", "hexToNumber", "_0n", "bytesToHex", "bytes", "hasHexBuiltin", "i", "hexes", "asciiToBase16", "ch", "asciis", "hexToBytes", "hl", "al", "array", "ai", "hi", "n1", "n2", "char", "bytesToNumberBE", "bytesToNumberLE", "numberToBytesBE", "n", "len", "numberToBytesLE", "ensureBytes", "expectedLength", "res", "e", "concatBytes", "arrays", "sum", "pad", "utf8ToBytes", "str", "inRange", "min", "max", "isPosBig", "aInRange", "bitLen", "_1n", "createHmacDrbg", "hashLen", "qByteLen", "hmacFn", "v", "u8n", "k", "reset", "h", "b", "reseed", "seed", "u8fr", "gen", "out", "sl", "pred", "validateObject", "object", "validators", "optValidators", "checkField", "fieldName", "type", "isOptional", "checkVal", "validatorFns", "val", "memoized", "fn", "map", "arg", "args", "computed", "bitMask", "init_utils", "__esmMin", "_", "arr", "mod", "a", "b", "result", "_0n", "pow2", "x", "power", "modulo", "res", "invert", "number", "y", "_1n", "u", "v", "q", "r", "m", "n", "sqrt3mod4", "Fp", "p1div4", "_4n", "root", "sqrt5mod8", "p5div8", "_5n", "_8n", "n2", "_2n", "nv", "tonelliShanks", "P", "Q", "S", "Z", "_Fp", "Field", "FpLegendre", "cc", "Q1div2", "M", "c", "t", "R", "i", "t_tmp", "exponent", "FpSqrt", "_3n", "validateField", "field", "initial", "opts", "FIELD_FIELDS", "map", "val", "validateObject", "FpPow", "num", "p", "d", "FpInvertBatch", "nums", "passZero", "inverted", "multipliedAcc", "acc", "invertedAcc", "p1mod2", "powered", "yes", "zero", "no", "nLength", "nBitLength", "anumber", "_nBitLength", "nByteLength", "ORDER", "bitLen", "isLE", "redef", "BITS", "BYTES", "sqrtP", "f", "bitMask", "lhs", "rhs", "numberToBytesLE", "numberToBytesBE", "bytes", "bytesToNumberLE", "bytesToNumberBE", "lst", "getFieldBytesLength", "fieldOrder", "bitLength", "getMinHashLength", "length", "mapHashToField", "key", "len", "fieldLen", "minLen", "reduced", "init_modular", "__esmMin", "init_utils", "constTimeNegate", "condition", "item", "neg", "validateW", "W", "bits", "calcWOpts", "scalarBits", "windows", "windowSize", "maxNumber", "mask", "bitMask", "shiftBy", "calcOffsets", "n", "window", "wOpts", "wbits", "nextN", "_1n", "offsetStart", "offset", "isZero", "isNeg", "isNegF", "validateMSMPoints", "points", "c", "p", "i", "validateMSMScalars", "scalars", "field", "s", "getW", "P", "pointWindowSizes", "wNAF", "elm", "d", "_0n", "base", "precomputes", "f", "wo", "offsetF", "acc", "transform", "comp", "pointPrecomputes", "prev", "pippenger", "fieldN", "plength", "slength", "zero", "bitLen", "MASK", "buckets", "lastBits", "sum", "j", "scalar", "resI", "sumI", "validateBasic", "curve", "validateField", "validateObject", "nLength", "init_curve", "__esmMin", "init_modular", "init_utils", "validateSigVerOpts", "opts", "abool", "validatePointOpts", "curve", "validateBasic", "validateObject", "endo", "Fp", "a", "numToSizedHex", "num", "size", "bytesToHex", "numberToBytesBE", "weierstrassPoints", "CURVE", "Fn", "Field", "toBytes", "_c", "point", "_isCompressed", "concatBytes", "fromBytes", "bytes", "tail", "y", "weierstrassEquation", "x", "b", "x2", "x3", "isValidXY", "left", "right", "_4a3", "_3n", "_4n", "_27b2", "isWithinCurveOrder", "inRange", "_1n", "normPrivateKeyToScalar", "key", "lengths", "nByteLength", "wrapPrivateKey", "N", "isBytes", "bytesToNumberBE", "ensureBytes", "mod", "aInRange", "aprjpoint", "other", "Point", "toAffineMemo", "memoized", "p", "iz", "z", "is0", "ax", "ay", "zz", "assertValidMemo", "px", "py", "pz", "i", "points", "toInv", "FpInvertBatch", "hex", "P", "privateKey", "scalars", "pippenger", "windowSize", "wnaf", "X1", "Y1", "Z1", "X2", "Y2", "Z2", "U1", "U2", "b3", "X3", "Y3", "Z3", "t0", "t1", "t2", "t3", "t4", "t5", "n", "sc", "_0n", "I", "k1neg", "k1", "k2neg", "k2", "k1p", "k2p", "d", "scalar", "fake", "f1p", "f2p", "f", "Q", "G", "mul", "sum", "cofactor", "isTorsionFree", "clearCofactor", "isCompressed", "nBitLength", "wNAF", "validateOpts", "weierstrass", "curveDef", "CURVE_ORDER", "compressedLen", "uncompressedLen", "modN", "invN", "invert", "cat", "len", "head", "y2", "sqrtError", "suffix", "isYOdd", "cl", "ul", "isBiggerThanHalfOrder", "number", "HALF", "normalizeS", "s", "slcNum", "from", "to", "Signature", "r", "recovery", "l", "DER", "msgHash", "rec", "h", "bits2int_modN", "radj", "prefix", "R", "ir", "u1", "u2", "hexToBytes", "utils", "length", "getMinHashLength", "mapHashToField", "getPublicKey", "isProbPub", "item", "fpl", "compLen", "uncompLen", "getSharedSecret", "privateA", "publicB", "bits2int", "delta", "ORDER_MASK", "bitMask", "int2octets", "prepSig", "defaultSigOpts", "k", "hash", "randomBytes", "lowS", "prehash", "ent", "h1int", "seedArgs", "e", "seed", "m", "k2sig", "kBytes", "ik", "q", "normS", "defaultVerOpts", "sign", "privKey", "C", "createHmacDrbg", "verify", "signature", "publicKey", "sg", "format", "isHex", "isObj", "_sig", "derError", "is", "SWUFpSqrtRatio", "Z", "o", "_2n", "c1", "_2n_pow_c1_1", "_2n_pow_c1", "c2", "c3", "c4", "c5", "c6", "c7", "sqrtRatio", "u", "v", "tv1", "tv2", "tv3", "tv5", "tv4", "isQR", "tvv5", "e1", "y1", "mapToCurveSimpleSWU", "validateField", "tv6", "isValid", "value", "tv4_inv", "DERErr", "init_weierstrass", "__esmMin", "init_curve", "init_modular", "init_utils", "tag", "data", "E", "dataLen", "numberToHexUnpadded", "lenLen", "pos", "first", "isLong", "lengthBytes", "int", "tlv", "seqBytes", "seqLeftBytes", "rBytes", "rLeftBytes", "sBytes", "sLeftBytes", "sig", "rs", "ss", "seq", "getHash", "hash", "key", "msgs", "hmac", "concatBytes", "randomBytes", "createCurve", "curveDef", "defHash", "create", "weierstrass", "init_shortw_utils", "__esmMin", "init_hmac", "init_utils", "init_weierstrass", "i2osp", "value", "length", "anum", "res", "i", "strxor", "a", "b", "arr", "item", "expand_message_xmd", "msg", "DST", "lenInBytes", "H", "abytes", "concatBytes", "utf8ToBytes", "b_in_bytes", "r_in_bytes", "ell", "DST_prime", "Z_pad", "l_i_b_str", "b_0", "args", "expand_message_xof", "k", "dkLen", "hash_to_field", "count", "options", "validateObject", "p", "m", "hash", "expand", "_DST", "log2p", "L", "len_in_bytes", "prb", "u", "e", "j", "elm_offset", "tv", "mod", "os2ip", "isogenyMap", "field", "map", "coeff", "x", "y", "xn", "xd", "yn", "yd", "val", "acc", "xd_inv", "yd_inv", "FpInvertBatch", "createHasher", "Point", "mapToCurve", "defaults", "num", "clear", "initial", "P", "u0", "u1", "scalars", "init_hash_to_curve", "__esmMin", "init_modular", "init_utils", "bytesToNumberBE", "secp256k1_exports", "__export", "encodeToCurve", "hashToCurve", "schnorr", "secp256k1", "secp256k1_hasher", "sqrtMod", "y", "P", "secp256k1P", "_3n", "_6n", "_11n", "_22n", "_23n", "_44n", "_88n", "b2", "b3", "b6", "pow2", "b9", "b11", "_2n", "b22", "b44", "b88", "b176", "b220", "b223", "t1", "t2", "root", "Fpk1", "taggedHash", "tag", "messages", "tagP", "TAGGED_HASH_PREFIXES", "tagH", "sha256", "c", "concatBytes", "schnorrGetExtPubKey", "priv", "d_", "p", "Point", "modN", "pointToBytes", "lift_x", "x", "aInRange", "_1n", "xx", "modP", "_0n", "challenge", "args", "num", "schnorrGetPublicKey", "privateKey", "schnorrSign", "message", "auxRand", "randomBytes", "m", "ensureBytes", "px", "d", "a", "t", "numTo32b", "rand", "k_", "rx", "k", "e", "sig", "schnorrVerify", "signature", "publicKey", "pub", "r", "inRange", "s", "secp256k1N", "R", "GmulAdd", "divNearest", "isoMap", "mapSWU", "init_secp256k1", "__esmMin", "init_sha2", "init_utils", "init_shortw_utils", "init_hash_to_curve", "init_modular", "init_weierstrass", "b", "Field", "createCurve", "n", "a1", "b1", "a2", "POW_2_128", "c1", "c2", "k1", "mod", "k2", "k1neg", "k2neg", "point", "numberToBytesBE", "Q", "bytesToNumberBE", "isogenyMap", "i", "j", "mapToCurveSimpleSWU", "createHasher", "scalars", "ExecutionRevertedError", "FeeCapTooHighError", "FeeCapTooLowError", "NonceTooHighError", "NonceTooLowError", "NonceMaxValueError", "InsufficientFundsError", "IntrinsicGasTooHighError", "IntrinsicGasTooLowError", "TransactionTypeNotSupportedError", "TipAboveFeeCapError", "UnknownNodeError", "init_node", "__esmMin", "init_formatGwei", "init_base", "BaseError", "cause", "message", "reason", "maxFeePerGas", "formatGwei", "nonce", "gas", "maxPriorityFeePerGas", "getNodeError", "err", "args", "message", "executionRevertedError", "BaseError", "e", "ExecutionRevertedError", "FeeCapTooHighError", "FeeCapTooLowError", "NonceTooHighError", "NonceTooLowError", "NonceMaxValueError", "InsufficientFundsError", "IntrinsicGasTooHighError", "IntrinsicGasTooLowError", "TransactionTypeNotSupportedError", "TipAboveFeeCapError", "UnknownNodeError", "init_getNodeError", "__esmMin", "init_base", "init_node", "extract", "value_", "format", "value", "extract_", "formatted", "keys", "key", "init_extract", "__esmMin", "formatTransactionRequest", "request", "_", "rpcRequest", "formatAuthorizationList", "x", "bytesToHex", "numberToHex", "rpcTransactionType", "authorizationList", "authorization", "init_transactionRequest", "__esmMin", "init_toHex", "serializeStateMapping", "stateMapping", "acc", "slot", "value", "InvalidBytesLengthError", "serializeAccountStateOverride", "parameters", "balance", "nonce", "state", "stateDiff", "code", "rpcAccountStateOverride", "numberToHex", "StateAssignmentConflictError", "serializeStateOverride", "rpcStateOverride", "address", "accountState", "isAddress", "InvalidAddressError", "AccountStateConflictError", "init_stateOverride", "__esmMin", "init_address", "init_data", "init_isAddress", "init_toHex", "maxInt8", "maxInt16", "maxInt24", "maxInt32", "maxInt40", "maxInt48", "maxInt56", "maxInt64", "maxInt72", "maxInt80", "maxInt88", "maxInt96", "maxInt104", "maxInt112", "maxInt120", "maxInt128", "maxInt136", "maxInt144", "maxInt152", "maxInt160", "maxInt168", "maxInt176", "maxInt184", "maxInt192", "maxInt200", "maxInt208", "maxInt216", "maxInt224", "maxInt232", "maxInt240", "maxInt248", "maxInt256", "minInt8", "minInt16", "minInt24", "minInt32", "minInt40", "minInt48", "minInt56", "minInt64", "minInt72", "minInt80", "minInt88", "minInt96", "minInt104", "minInt112", "minInt120", "minInt128", "minInt136", "minInt144", "minInt152", "minInt160", "minInt168", "minInt176", "minInt184", "minInt192", "minInt200", "minInt208", "minInt216", "minInt224", "minInt232", "minInt240", "minInt248", "minInt256", "maxUint8", "maxUint16", "maxUint24", "maxUint32", "maxUint40", "maxUint48", "maxUint56", "maxUint64", "maxUint72", "maxUint80", "maxUint88", "maxUint96", "maxUint104", "maxUint112", "maxUint120", "maxUint128", "maxUint136", "maxUint144", "maxUint152", "maxUint160", "maxUint168", "maxUint176", "maxUint184", "maxUint192", "maxUint200", "maxUint208", "maxUint216", "maxUint224", "maxUint232", "maxUint240", "maxUint248", "maxUint256", "init_number", "__esmMin", "assertRequest", "args", "account_", "maxFeePerGas", "maxPriorityFeePerGas", "to", "account", "parseAccount", "isAddress", "InvalidAddressError", "maxUint256", "FeeCapTooHighError", "TipAboveFeeCapError", "init_assertRequest", "__esmMin", "init_parseAccount", "init_number", "init_address", "init_node", "init_isAddress", "isAddressEqual", "a", "b", "isAddress", "InvalidAddressError", "init_isAddressEqual", "__esmMin", "init_address", "init_isAddress", "decodeFunctionResult", "parameters", "abi", "args", "functionName", "data", "abiItem", "item", "getAbiItem", "AbiFunctionNotFoundError", "docsPath", "AbiFunctionOutputsNotFoundError", "values", "decodeAbiParameters", "init_decodeFunctionResult", "__esmMin", "init_abi", "init_decodeAbiParameters", "init_getAbiItem", "isBytes", "a", "abytes", "item", "abool", "title", "value", "numberToHexUnpadded", "num", "hex", "hexToNumber", "_0n", "bytesToHex", "bytes", "hasHexBuiltin", "i", "hexes", "asciiToBase16", "ch", "asciis", "hexToBytes", "hl", "al", "array", "ai", "hi", "n1", "n2", "char", "bytesToNumberBE", "bytesToNumberLE", "numberToBytesBE", "n", "len", "numberToBytesLE", "ensureBytes", "expectedLength", "res", "e", "concatBytes", "arrays", "sum", "pad", "inRange", "min", "max", "isPosBig", "aInRange", "bitLen", "_1n", "createHmacDrbg", "hashLen", "qByteLen", "hmacFn", "v", "u8n", "k", "reset", "h", "b", "reseed", "seed", "u8fr", "gen", "out", "sl", "pred", "validateObject", "object", "validators", "optValidators", "checkField", "fieldName", "type", "isOptional", "checkVal", "validatorFns", "val", "memoized", "fn", "map", "arg", "args", "computed", "bitMask", "init_utils", "__esmMin", "_", "arr", "version", "init_version", "__esmMin", "getVersion", "version", "init_errors", "__esmMin", "init_version", "walk", "err", "fn", "BaseError", "init_Errors", "__esmMin", "init_errors", "_BaseError", "options", "shortMessage", "details", "docsPath", "docsBaseUrl", "docs", "showVersion", "version", "message", "x", "getVersion", "assertSize", "bytes", "size_", "size", "SizeOverflowError", "assertStartOffset", "value", "start", "SliceOffsetOutOfBoundsError", "assertEndOffset", "end", "charCodeToBase16", "char", "charCodeMap", "pad", "options", "dir", "SizeExceedsPaddingSizeError", "paddedBytes", "i", "padEnd", "trim", "data", "sliceLength", "init_bytes", "__esmMin", "init_Bytes", "assertSize", "hex", "size_", "size", "SizeOverflowError", "assertStartOffset", "value", "start", "SliceOffsetOutOfBoundsError", "assertEndOffset", "end", "pad", "hex_", "options", "dir", "SizeExceedsPaddingSizeError", "trim", "data", "sliceLength", "i", "init_hex", "__esmMin", "init_Hex", "stringify", "value", "replacer", "space", "key", "bigIntSuffix", "init_Json", "__esmMin", "assert", "value", "InvalidBytesTypeError", "from", "fromHex", "fromArray", "options", "size", "hex", "assertSize", "padRight", "hexString", "length", "bytes", "index", "j", "nibbleLeft", "charCodeToBase16", "nibbleRight", "BaseError", "fromString", "encoder", "pad", "slice", "start", "end", "strict", "assertStartOffset", "value_", "assertEndOffset", "toBigInt", "fromBytes", "toBoolean", "bytes_", "trimLeft", "InvalidBytesBooleanError", "toNumber", "toString", "trimRight", "decoder", "trim", "validate", "SizeOverflowError", "SliceOffsetOutOfBoundsError", "SizeExceedsPaddingSizeError", "init_Bytes", "__esmMin", "init_Errors", "init_Hex", "init_bytes", "init_hex", "init_Json", "stringify", "givenSize", "maxSize", "offset", "position", "targetSize", "type", "assert", "value", "options", "strict", "InvalidHexTypeError", "InvalidHexValueError", "concat", "values", "acc", "x", "from", "fromBytes", "fromBoolean", "hex", "assertSize", "padLeft", "string", "i", "hexes", "padRight", "fromNumber", "signed", "size", "value_", "maxValue", "minValue", "suffix", "IntegerOutOfRangeError", "fromString", "encoder", "pad", "slice", "start", "end", "assertStartOffset", "assertEndOffset", "trimLeft", "trim", "toBigInt", "max_unsigned", "max_signed", "toNumber", "validate", "SizeOverflowError", "SliceOffsetOutOfBoundsError", "SizeExceedsPaddingSizeError", "init_Hex", "__esmMin", "init_Errors", "init_hex", "init_Json", "_v", "BaseError", "max", "min", "stringify", "givenSize", "maxSize", "offset", "position", "targetSize", "type", "toRpc", "withdrawal", "fromNumber", "init_Withdrawal", "__esmMin", "init_Hex", "toRpc", "blockOverrides", "fromNumber", "init_BlockOverrides", "__esmMin", "init_Hex", "init_Withdrawal", "multicall3Abi", "batchGatewayAbi", "universalResolverErrors", "universalResolverResolveAbi", "universalResolverReverseAbi", "textResolverAbi", "addressResolverAbi", "erc1271Abi", "erc6492SignatureValidatorAbi", "init_abis", "__esmMin", "aggregate3Signature", "init_contract", "__esmMin", "deploylessCallViaBytecodeBytecode", "deploylessCallViaFactoryBytecode", "erc6492SignatureValidatorByteCode", "multicall3Bytecode", "init_contracts", "__esmMin", "ChainDoesNotSupportContract", "ClientChainNotConfiguredError", "init_chain", "__esmMin", "init_base", "BaseError", "blockNumber", "chain", "contract", "encodeDeployData", "parameters", "abi", "args", "bytecode", "description", "x", "AbiConstructorNotFoundError", "docsPath", "AbiConstructorParamsNotFoundError", "data", "encodeAbiParameters", "concatHex", "init_encodeDeployData", "__esmMin", "init_abi", "init_concat", "init_encodeAbiParameters", "getChainContractAddress", "blockNumber", "chain", "name", "contract", "ChainDoesNotSupportContract", "init_getChainContractAddress", "__esmMin", "init_chain", "getCallError", "err", "docsPath", "args", "cause", "getNodeError", "UnknownNodeError", "CallExecutionError", "init_getCallError", "__esmMin", "init_contract", "init_node", "init_getNodeError", "withResolvers", "resolve", "reject", "resolve_", "reject_", "init_withResolvers", "__esmMin", "createBatchScheduler", "fn", "id", "shouldSplitBatch", "wait", "sort", "exec", "scheduler", "getScheduler", "flush", "args", "data", "i", "resolve", "err", "reject", "schedulerCache", "getBatchedArgs", "setScheduler", "item", "promise", "withResolvers", "init_createBatchScheduler", "__esmMin", "init_withResolvers", "OffchainLookupError", "OffchainLookupResponseMalformedError", "OffchainLookupSenderMismatchError", "init_ccip", "__esmMin", "init_stringify", "init_base", "init_utils", "BaseError", "callbackSelector", "cause", "data", "extraData", "sender", "urls", "url", "getUrl", "result", "stringify", "to", "decodeFunctionData", "parameters", "abi", "data", "signature", "slice", "description", "x", "toFunctionSelector", "formatAbiItem", "AbiFunctionSignatureNotFoundError", "decodeAbiParameters", "init_decodeFunctionData", "__esmMin", "init_abi", "init_slice", "init_toFunctionSelector", "init_decodeAbiParameters", "init_formatAbiItem", "encodeErrorResult", "parameters", "abi", "errorName", "args", "abiItem", "item", "getAbiItem", "AbiErrorNotFoundError", "docsPath", "definition", "formatAbiItem", "signature", "toFunctionSelector", "data", "AbiErrorInputsNotFoundError", "encodeAbiParameters", "concatHex", "init_encodeErrorResult", "__esmMin", "init_abi", "init_concat", "init_toFunctionSelector", "init_encodeAbiParameters", "init_formatAbiItem", "init_getAbiItem", "encodeFunctionResult", "parameters", "abi", "functionName", "result", "abiItem", "item", "getAbiItem", "AbiFunctionNotFoundError", "docsPath", "AbiFunctionOutputsNotFoundError", "values", "InvalidArrayError", "encodeAbiParameters", "init_encodeFunctionResult", "__esmMin", "init_abi", "init_encodeAbiParameters", "init_getAbiItem", "localBatchGatewayRequest", "parameters", "data", "ccipRequest", "queries", "decodeFunctionData", "batchGatewayAbi", "failures", "responses", "query", "i", "localBatchGatewayUrl", "err", "encodeError", "encodeFunctionResult", "error", "encodeErrorResult", "solidityError", "init_localBatchGatewayRequest", "__esmMin", "init_abis", "init_solidity", "init_decodeFunctionData", "init_encodeErrorResult", "init_encodeFunctionResult", "ccip_exports", "__export", "ccipRequest", "offchainLookup", "offchainLookupAbiItem", "offchainLookupSignature", "client", "blockNumber", "blockTag", "data", "to", "args", "decodeErrorResult", "sender", "urls", "callData", "callbackSelector", "extraData", "ccipRead", "ccipRequest_", "isAddressEqual", "OffchainLookupSenderMismatchError", "result", "localBatchGatewayUrl", "localBatchGatewayRequest", "data_", "call", "concat", "encodeAbiParameters", "err", "OffchainLookupError", "error", "i", "url", "method", "body", "headers", "response", "HttpRequestError", "stringify", "isHex", "OffchainLookupResponseMalformedError", "init_ccip", "__esmMin", "init_call", "init_request", "init_decodeErrorResult", "init_encodeAbiParameters", "init_isAddressEqual", "init_concat", "init_isHex", "init_localBatchGatewayRequest", "init_stringify", "call", "client", "args", "account_", "authorizationList", "batch", "blockNumber", "blockTag", "accessList", "blobs", "blockOverrides", "code", "data_", "factory", "factoryData", "gas", "gasPrice", "maxFeePerBlobGas", "maxFeePerGas", "maxPriorityFeePerGas", "nonce", "to", "value", "stateOverride", "rest", "account", "parseAccount", "BaseError", "deploylessCallViaBytecode", "deploylessCallViaFactory", "deploylessCall", "data", "toDeploylessCallViaBytecodeData", "toDeploylessCallViaFactoryData", "assertRequest", "block", "numberToHex", "rpcBlockOverrides", "toRpc", "rpcStateOverride", "serializeStateOverride", "chainFormat", "request", "formatTransactionRequest", "extract", "shouldPerformMulticall", "scheduleMulticall", "err", "ClientChainNotConfiguredError", "ChainDoesNotSupportContract", "params", "base", "response", "getRevertErrorData", "offchainLookup", "offchainLookupSignature", "CounterfactualDeploymentFailedError", "getCallError", "request_", "aggregate3Signature", "x", "batchSize", "deployless", "wait", "multicallAddress", "getChainContractAddress", "schedule", "createBatchScheduler", "size", "requests", "calls", "calldata", "encodeFunctionData", "multicall3Abi", "multicall3Bytecode", "decodeFunctionResult", "returnData", "success", "RawContractError", "parameters", "encodeDeployData", "parseAbi", "deploylessCallViaBytecodeBytecode", "deploylessCallViaFactoryBytecode", "error", "init_call", "__esmMin", "init_exports", "init_BlockOverrides", "init_parseAccount", "init_abis", "init_contract", "init_contracts", "init_base", "init_chain", "init_decodeFunctionResult", "init_encodeDeployData", "init_encodeFunctionData", "init_getChainContractAddress", "init_toHex", "init_getCallError", "init_extract", "init_transactionRequest", "init_createBatchScheduler", "init_stateOverride", "init_assertRequest", "getAction", "client", "actionFn", "name", "action_implicit", "action_explicit", "params", "init_abi", "init_base", "FilterTypeNotSupportedError", "BaseError", "type", "init_toBytes", "init_keccak256", "init_toEventSelector", "init_encodeAbiParameters", "init_formatAbiItem", "init_getAbiItem", "docsPath", "encodeEventTopics", "parameters", "abi", "eventName", "args", "abiItem", "item", "getAbiItem", "AbiEventNotFoundError", "definition", "formatAbiItem", "signature", "toEventSelector", "topics", "indexedInputs", "param", "args_", "x", "i", "_", "j", "encodeArg", "value", "keccak256", "toBytes", "FilterTypeNotSupportedError", "encodeAbiParameters", "init_toHex", "createFilterRequestScope", "client", "method", "requestMap", "method_", "id", "status", "transport", "createContractEventFilter", "client", "parameters", "address", "abi", "args", "eventName", "fromBlock", "strict", "toBlock", "getRequest", "createFilterRequestScope", "topics", "encodeEventTopics", "id", "numberToHex", "init_parseAccount", "init_encodeFunctionData", "init_abi", "init_base", "init_contract", "init_request", "init_rpc", "EXECUTION_REVERTED_ERROR_CODE", "getContractError", "err", "abi", "address", "args", "docsPath", "functionName", "sender", "error", "RawContractError", "BaseError", "code", "data", "details", "message", "shortMessage", "cause", "AbiDecodingZeroDataError", "ContractFunctionZeroDataError", "InternalRpcError", "InvalidInputRpcError", "ContractFunctionRevertedError", "RpcRequestError", "ContractFunctionExecutionError", "init_parseAccount", "init_base", "init_getAddress", "init_keccak256", "publicKeyToAddress", "publicKey", "address", "keccak256", "checksumAddress", "init_isHex", "init_size", "init_fromHex", "init_toHex", "recoverPublicKey", "hash", "signature", "hashHex", "isHex", "toHex", "secp256k1", "r", "s", "v", "yParity", "yParityOrV", "recoveryBit", "toRecoveryBit", "hexToBigInt", "signatureHex", "size", "hexToNumber", "recoverAddress", "hash", "signature", "publicKeyToAddress", "recoverPublicKey", "init_concat", "init_toBytes", "init_toHex", "init_base", "init_cursor", "init_toBytes", "init_toHex", "toRlp", "bytes", "to", "encodable", "getEncodable", "cursor", "createCursor", "bytesToHex", "getEncodable", "bytes", "getEncodableList", "x", "getEncodableBytes", "list", "bodyLength", "acc", "sizeOfBodyLength", "getSizeOfLength", "cursor", "encode", "bytesOrHex", "hexToBytes", "sizeOfBytesLength", "length", "BaseError", "init_keccak256", "hashAuthorization", "parameters", "chainId", "nonce", "to", "address", "hash", "keccak256", "concatHex", "toRlp", "numberToHex", "hexToBytes", "recoverAuthorizationAddress", "parameters", "authorization", "signature", "recoverAddress", "hashAuthorization", "init_toHex", "init_formatEther", "init_formatGwei", "init_base", "init_transaction", "EstimateGasExecutionError", "BaseError", "cause", "account", "docsPath", "chain", "data", "gas", "gasPrice", "maxFeePerGas", "maxPriorityFeePerGas", "nonce", "to", "value", "prettyArgs", "prettyPrint", "formatEther", "formatGwei", "init_node", "init_getNodeError", "getEstimateGasError", "err", "docsPath", "args", "cause", "getNodeError", "UnknownNodeError", "EstimateGasExecutionError", "init_extract", "init_transactionRequest", "init_stateOverride", "init_assertRequest", "init_parseAccount", "init_formatGwei", "init_base", "BaseFeeScalarError", "BaseError", "Eip1559FeesNotSupportedError", "MaxFeePerGasTooLowError", "maxPriorityFeePerGas", "formatGwei", "init_fromHex", "init_base", "BlockNotFoundError", "BaseError", "blockHash", "blockNumber", "identifier", "init_toHex", "init_fromHex", "transactionType", "formatTransaction", "transaction", "_", "transaction_", "hexToNumber", "formatAuthorizationList", "formatAuthorizationList", "authorizationList", "authorization", "formatBlock", "block", "_", "transactions", "transaction", "formatTransaction", "getBlock", "client", "blockHash", "blockNumber", "blockTag", "includeTransactions_", "includeTransactions", "blockNumberHex", "numberToHex", "block", "BlockNotFoundError", "formatBlock", "getGasPrice", "client", "gasPrice", "estimateMaxPriorityFeePerGas", "client", "args", "internal_estimateMaxPriorityFeePerGas", "block_", "chain", "request", "maxPriorityFeePerGas", "block", "getAction", "getBlock", "maxPriorityFeePerGas_", "maxPriorityFeePerGasHex", "hexToBigInt", "gasPrice", "getGasPrice", "Eip1559FeesNotSupportedError", "estimateFeesPerGas", "client", "args", "internal_estimateFeesPerGas", "block_", "chain", "request", "type", "baseFeeMultiplier", "BaseFeeScalarError", "denominator", "multiply", "base", "block", "getAction", "getBlock", "fees", "Eip1559FeesNotSupportedError", "maxPriorityFeePerGas", "internal_estimateMaxPriorityFeePerGas", "baseFeePerGas", "getGasPrice", "init_fromHex", "init_toHex", "getTransactionCount", "client", "address", "blockTag", "blockNumber", "count", "numberToHex", "hexToNumber", "init_toBytes", "init_toHex", "blobsToCommitments", "parameters", "kzg", "to", "blobs", "x", "hexToBytes", "commitments", "blob", "bytesToHex", "init_toBytes", "init_toHex", "blobsToProofs", "parameters", "kzg", "to", "blobs", "x", "hexToBytes", "commitments", "proofs", "blob", "commitment", "bytesToHex", "init_toHex", "init_sha2", "sha256", "init_isHex", "init_toBytes", "init_toHex", "sha256", "value", "to_", "to", "bytes", "isHex", "toBytes", "toHex", "commitmentToVersionedHash", "parameters", "commitment", "version", "to", "versionedHash", "sha256", "bytesToHex", "commitmentsToVersionedHashes", "parameters", "commitments", "version", "to", "hashes", "commitment", "commitmentToVersionedHash", "init_base", "BlobSizeTooLargeError", "BaseError", "maxSize", "size", "EmptyBlobError", "init_cursor", "init_size", "init_toBytes", "init_toHex", "toBlobs", "parameters", "to", "data", "hexToBytes", "size_", "size", "EmptyBlobError", "BlobSizeTooLargeError", "blobs", "active", "position", "blob", "createCursor", "bytes", "x", "bytesToHex", "toBlobSidecars", "parameters", "data", "kzg", "to", "blobs", "toBlobs", "commitments", "blobsToCommitments", "proofs", "blobsToProofs", "sidecars", "i", "init_lru", "init_assertRequest", "init_transaction", "getTransactionType", "transaction", "InvalidSerializableTransactionError", "init_parseAccount", "init_node", "init_transaction", "init_getNodeError", "getTransactionError", "err", "docsPath", "args", "cause", "getNodeError", "UnknownNodeError", "TransactionExecutionError", "init_extract", "init_transactionRequest", "init_assertRequest", "init_fromHex", "getChainId", "client", "chainIdHex", "hexToNumber", "fillTransaction", "client", "parameters", "account", "accessList", "authorizationList", "chain", "blobVersionedHashes", "blobs", "data", "gas", "gasPrice", "maxFeePerBlobGas", "maxFeePerGas", "maxPriorityFeePerGas", "nonce_", "nonceManager", "to", "type", "value", "rest", "nonce", "account_", "parseAccount", "chainId", "getAction", "getChainId", "assertRequest", "chainFormat", "request", "formatTransactionRequest", "extract", "response", "transaction", "formatTransaction", "feeMultiplier", "block", "getBlock", "BaseFeeScalarError", "denominator", "multiplyFee", "base", "err", "getTransactionError", "defaultParameters", "eip1559NetworkCache", "supportsFillTransaction", "LruMap", "prepareTransactionRequest", "client", "args", "request", "account_", "chain", "nonceManager", "parameters", "chainId", "getChainId", "getAction", "account", "parseAccount", "nonce", "fillResult", "parameter", "fillTransaction", "result", "from", "gas", "gasPrice", "maxFeePerBlobGas", "maxFeePerGas", "maxPriorityFeePerGas", "type", "rest", "e", "error", "blobs", "kzg", "block", "getBlock", "getTransactionCount", "commitments", "blobsToCommitments", "versionedHashes", "commitmentsToVersionedHashes", "proofs", "blobsToProofs", "sidecars", "toBlobSidecars", "getTransactionType", "isEip1559Network", "internal_estimateFeesPerGas", "MaxFeePerGasTooLowError", "Eip1559FeesNotSupportedError", "gasPrice_", "estimateGas", "assertRequest", "estimateGas", "client", "args", "account_", "prepare", "account", "parseAccount", "parameters", "to", "recoverAuthorizationAddress", "BaseError", "accessList", "authorizationList", "blobs", "blobVersionedHashes", "blockNumber", "blockTag", "data", "gas", "gasPrice", "maxFeePerBlobGas", "maxFeePerGas", "maxPriorityFeePerGas", "nonce", "value", "stateOverride", "rest", "prepareTransactionRequest", "block", "numberToHex", "rpcStateOverride", "serializeStateOverride", "assertRequest", "chainFormat", "request", "formatTransactionRequest", "extract", "err", "getEstimateGasError", "estimateContractGas", "client", "parameters", "abi", "address", "args", "functionName", "dataSuffix", "request", "data", "encodeFunctionData", "getAction", "estimateGas", "error", "account", "parseAccount", "getContractError", "init_getAbiItem", "init_isAddressEqual", "init_toBytes", "formatLog", "log", "args", "eventName", "init_keccak256", "init_toEventSelector", "init_abi", "init_cursor", "init_size", "init_toEventSelector", "init_decodeAbiParameters", "init_formatAbiItem", "docsPath", "decodeEventLog", "parameters", "abi", "data", "strict_", "topics", "strict", "signature", "argTopics", "AbiEventSignatureEmptyTopicsError", "abiItem", "x", "toEventSelector", "formatAbiItem", "AbiEventSignatureNotFoundError", "name", "inputs", "isUnnamed", "args", "indexedInputs", "i", "missingIndexedInputs", "param", "argIndex", "topic", "DecodeLogTopicsMismatch", "decodeTopic", "nonIndexedInputs", "inputsToDecode", "decodedData", "decodeAbiParameters", "dataIndex", "err", "AbiDecodingDataSizeTooSmallError", "PositionOutOfBoundsError", "DecodeLogDataMismatch", "size", "value", "parseEventLogs", "parameters", "abi", "args", "logs", "strict", "eventName", "abiTopics", "abiItem", "toEventSelector", "log", "formattedLog", "formatLog", "abiItems", "abiTopic", "event", "item", "decodeEventLog", "isUnnamed", "x", "includesArgs", "inputs", "matchArgs", "isEqual", "input", "value", "arg", "isAddressEqual", "keccak256", "toBytes", "index", "key", "init_toHex", "getLogs", "client", "address", "blockHash", "fromBlock", "toBlock", "event", "events_", "args", "strict_", "strict", "events", "topics", "encodeEventTopics", "logs", "numberToHex", "formattedLogs", "log", "formatLog", "parseEventLogs", "getContractEvents", "client", "parameters", "abi", "address", "args", "blockHash", "eventName", "fromBlock", "toBlock", "strict", "event", "getAbiItem", "events", "x", "getAction", "getLogs", "init_decodeFunctionResult", "init_encodeFunctionData", "init_call", "readContract", "client", "parameters", "abi", "address", "args", "functionName", "rest", "calldata", "encodeFunctionData", "data", "getAction", "call", "decodeFunctionResult", "error", "getContractError", "init_parseAccount", "init_decodeFunctionResult", "init_encodeFunctionData", "init_call", "simulateContract", "client", "parameters", "abi", "address", "args", "functionName", "dataSuffix", "callRequest", "account", "parseAccount", "calldata", "encodeFunctionData", "data", "getAction", "call", "result", "decodeFunctionResult", "minimizedAbi", "abiItem", "error", "getContractError", "init_abi", "init_rpc", "listenersCache", "cleanupCache", "callbackCount", "observe", "observerId", "callbacks", "fn", "callbackId", "getListeners", "unsubscribe", "listeners", "cb", "unwatch", "cleanup", "p", "emit", "key", "args", "listener", "wait", "time", "res", "poll", "fn", "emitOnBegin", "initialWaitTime", "interval", "active", "unwatch", "data", "initialWait", "wait", "init_stringify", "promiseCache", "responseCache", "getCache", "cacheKey", "buildCache", "cache", "data", "promise", "response", "withCache", "fn", "cacheTime", "cacheKey", "id", "getBlockNumber", "client", "cacheTime", "blockNumberHex", "withCache", "cacheKey", "getFilterChanges", "_client", "filter", "strict", "logs", "formattedLogs", "log", "formatLog", "parseEventLogs", "uninstallFilter", "_client", "filter", "watchContractEvent", "client", "parameters", "abi", "address", "args", "batch", "eventName", "fromBlock", "onError", "onLogs", "poll_", "pollingInterval", "strict_", "strict", "observerId", "stringify", "observe", "emit", "previousBlockNumber", "filter", "initialized", "unwatch", "poll", "getAction", "createContractEventFilter", "logs", "getFilterChanges", "blockNumber", "getBlockNumber", "getContractEvents", "log", "err", "InvalidInputRpcError", "uninstallFilter", "active", "unsubscribe", "transport", "topics", "encodeEventTopics", "unsubscribe_", "data", "decodeEventLog", "formatted", "formatLog", "isUnnamed", "DecodeLogDataMismatch", "DecodeLogTopicsMismatch", "x", "error", "sendRawTransaction", "client", "serializedTransaction", "withRetry", "fn", "delay_", "retryCount", "shouldRetry", "resolve", "reject", "attemptRetry", "count", "retry", "error", "delay", "wait", "data", "err", "init_fromHex", "receiptStatuses", "formatTransactionReceipt", "transactionReceipt", "_", "receipt", "log", "formatLog", "hexToNumber", "transactionType", "init_parseAccount", "index", "buffer", "uid", "length", "i", "createClient", "parameters", "batch", "chain", "ccipRead", "dataSuffix", "key", "name", "type", "experimental_blockTag", "blockTime", "defaultPollingInterval", "pollingInterval", "cacheTime", "account", "parseAccount", "config", "request", "value", "transport", "client", "uid", "extend", "base", "extendFn", "extended", "combined", "init_abis", "init_decodeFunctionResult", "init_encodeFunctionData", "init_getChainContractAddress", "init_trim", "init_toHex", "init_base", "init_contract", "isNullUniversalResolverError", "err", "BaseError", "cause", "e", "ContractFunctionRevertedError", "init_localBatchGatewayRequest", "init_concat", "init_toBytes", "init_toHex", "init_keccak256", "init_isHex", "encodedLabelToLabelhash", "label", "hash", "isHex", "namehash", "name", "result", "bytesToHex", "labels", "i", "hashFromEncodedLabel", "encodedLabelToLabelhash", "hashed", "toBytes", "keccak256", "stringToBytes", "concat", "init_toBytes", "encodeLabelhash", "hash", "init_toBytes", "init_toHex", "init_keccak256", "labelhash", "label", "result", "encodedLabelToLabelhash", "keccak256", "stringToBytes", "bytesToHex", "packetToBytes", "packet", "value", "bytes", "stringToBytes", "offset", "list", "i", "encoded", "encodeLabelhash", "labelhash", "getEnsAddress", "client", "parameters", "blockNumber", "blockTag", "coinType", "name", "gatewayUrls", "strict", "chain", "universalResolverAddress", "getChainContractAddress", "tlds", "tld", "args", "namehash", "functionData", "encodeFunctionData", "addressResolverAbi", "readContractParameters", "universalResolverResolveAbi", "toHex", "packetToBytes", "localBatchGatewayUrl", "res", "getAction", "readContract", "address", "decodeFunctionResult", "trim", "err", "isNullUniversalResolverError", "init_base", "EnsAvatarInvalidMetadataError", "BaseError", "data", "EnsAvatarInvalidNftUriError", "reason", "EnsAvatarUriResolutionError", "uri", "EnsAvatarUnsupportedNamespaceError", "namespace", "networkRegex", "ipfsHashRegex", "base64Regex", "dataURIRegex", "isImageUri", "uri", "res", "error", "resolve", "img", "getGateway", "custom", "defaultGateway", "resolveAvatarUri", "gatewayUrls", "isEncoded", "ipfsGateway", "arweaveGateway", "networkRegexMatch", "protocol", "subpath", "target", "subtarget", "isIPNS", "isIPFS", "replacedUri", "parsedUri", "EnsAvatarUriResolutionError", "getJsonImage", "data", "EnsAvatarInvalidMetadataError", "getMetadataAvatarUri", "parseAvatarUri", "resolvedURI", "isOnChain", "parseNftUri", "uri_", "reference", "asset_namespace", "tokenID", "eip_namespace", "chainID", "erc_namespace", "contractAddress", "EnsAvatarInvalidNftUriError", "getNftTokenUri", "client", "nft", "readContract", "EnsAvatarUnsupportedNamespaceError", "parseAvatarRecord", "client", "gatewayUrls", "record", "parseNftAvatarUri", "parseAvatarUri", "nft", "parseNftUri", "nftUri", "getNftTokenUri", "resolvedNftUri", "isOnChain", "isEncoded", "resolveAvatarUri", "encodedJson", "decoded", "getJsonImage", "uriTokenId", "getMetadataAvatarUri", "init_abis", "init_decodeFunctionResult", "init_encodeFunctionData", "init_getChainContractAddress", "init_toHex", "init_localBatchGatewayRequest", "getEnsText", "client", "parameters", "blockNumber", "blockTag", "key", "name", "gatewayUrls", "strict", "chain", "universalResolverAddress", "getChainContractAddress", "tlds", "tld", "readContractParameters", "universalResolverResolveAbi", "toHex", "packetToBytes", "encodeFunctionData", "textResolverAbi", "namehash", "localBatchGatewayUrl", "res", "getAction", "readContract", "record", "decodeFunctionResult", "err", "isNullUniversalResolverError", "getEnsAvatar", "client", "blockNumber", "blockTag", "assetGatewayUrls", "name", "gatewayUrls", "strict", "universalResolverAddress", "record", "getAction", "getEnsText", "parseAvatarRecord", "init_abis", "init_getChainContractAddress", "init_localBatchGatewayRequest", "getEnsName", "client", "parameters", "address", "blockNumber", "blockTag", "coinType", "gatewayUrls", "strict", "chain", "universalResolverAddress", "getChainContractAddress", "readContractParameters", "universalResolverReverseAbi", "localBatchGatewayUrl", "readContractAction", "getAction", "readContract", "name", "err", "isNullUniversalResolverError", "init_getChainContractAddress", "init_toHex", "getEnsResolver", "client", "parameters", "blockNumber", "blockTag", "name", "chain", "universalResolverAddress", "getChainContractAddress", "tlds", "tld", "resolverAddress", "getAction", "readContract", "toHex", "packetToBytes", "init_call", "init_parseAccount", "init_toHex", "init_getCallError", "init_extract", "init_transactionRequest", "init_assertRequest", "createAccessList", "client", "args", "account_", "blockNumber", "blockTag", "blobs", "data", "gas", "gasPrice", "maxFeePerBlobGas", "maxFeePerGas", "maxPriorityFeePerGas", "to", "value", "rest", "account", "parseAccount", "assertRequest", "block", "numberToHex", "chainFormat", "request", "formatTransactionRequest", "extract", "response", "err", "getCallError", "createBlockFilter", "client", "getRequest", "createFilterRequestScope", "id", "init_toHex", "createEventFilter", "client", "address", "args", "event", "events_", "fromBlock", "strict", "toBlock", "events", "getRequest", "createFilterRequestScope", "topics", "encodeEventTopics", "id", "numberToHex", "createPendingTransactionFilter", "client", "getRequest", "createFilterRequestScope", "id", "init_abis", "init_decodeFunctionResult", "init_encodeFunctionData", "init_toHex", "init_call", "getBalance", "client", "address", "blockNumber", "blockTag", "multicall3Address", "calldata", "encodeFunctionData", "multicall3Abi", "data", "getAction", "call", "decodeFunctionResult", "blockNumberHex", "numberToHex", "balance", "getBlobBaseFee", "client", "baseFee", "init_fromHex", "init_toHex", "getBlockTransactionCount", "client", "blockHash", "blockNumber", "blockTag", "blockNumberHex", "numberToHex", "count", "hexToNumber", "init_toHex", "getCode", "client", "address", "blockNumber", "blockTag", "blockNumberHex", "numberToHex", "hex", "init_getAddress", "init_size", "init_slice", "getDelegation", "client", "address", "blockNumber", "blockTag", "code", "getCode", "size", "getAddress", "slice", "init_base", "Eip712DomainNotFoundError", "BaseError", "address", "getEip712Domain", "client", "parameters", "address", "factory", "factoryData", "fields", "name", "version", "chainId", "verifyingContract", "salt", "extensions", "getAction", "readContract", "abi", "e", "error", "Eip712DomainNotFoundError", "init_toHex", "formatFeeHistory", "feeHistory", "value", "reward", "getFeeHistory", "client", "blockCount", "blockNumber", "blockTag", "rewardPercentiles", "blockNumberHex", "numberToHex", "feeHistory", "formatFeeHistory", "getFilterLogs", "_client", "filter", "strict", "formattedLogs", "log", "formatLog", "parseEventLogs", "init_toHex", "init_getAddress", "init_isAddressEqual", "verifyAuthorization", "address", "authorization", "signature", "isAddressEqual", "getAddress", "recoverAuthorizationAddress", "init_base", "init_request", "init_rpc", "init_lru", "promiseCache", "LruMap", "withDedupe", "fn", "enabled", "id", "promise", "init_stringify", "buildRequest", "request", "options", "args", "overrideOptions", "dedupe", "methods", "retryDelay", "retryCount", "uid", "method", "MethodNotSupportedRpcError", "requestId", "hashString", "stringify", "withDedupe", "withRetry", "err_", "err", "ParseRpcError", "InvalidRequestRpcError", "MethodNotFoundRpcError", "InvalidParamsRpcError", "InternalRpcError", "InvalidInputRpcError", "ResourceNotFoundRpcError", "ResourceUnavailableRpcError", "TransactionRejectedRpcError", "LimitExceededRpcError", "JsonRpcVersionUnsupportedError", "UserRejectedRequestError", "UnauthorizedProviderError", "UnsupportedProviderMethodError", "ProviderDisconnectedError", "ChainDisconnectedError", "SwitchChainError", "UnsupportedNonOptionalCapabilityError", "UnsupportedChainIdError", "DuplicateIdError", "UnknownBundleIdError", "BundleTooLargeError", "AtomicReadyWalletRejectedUpgradeError", "AtomicityNotSupportedError", "WalletConnectSessionSettlementError", "BaseError", "UnknownRpcError", "count", "error", "HttpRequestError", "retryAfter", "shouldRetry", "str", "seed", "h1", "h2", "i", "ch", "init_fromHex", "init_request", "withTimeout", "fn", "errorInstance", "timeout", "signal", "resolve", "reject", "timeoutId", "controller", "err", "init_stringify", "createIdStore", "idCache", "getHttpRpcClient", "url_", "options", "url", "headers_url", "parseUrl", "params", "body", "fetchFn", "onRequest", "onResponse", "timeout", "fetchOptions", "headers", "method", "signal_", "response", "withTimeout", "signal", "init", "stringify", "idCache", "request", "args", "TimeoutError", "data", "err", "HttpRequestError", "result", "credentials", "init_keccak256", "presignMessagePrefix", "init_concat", "init_size", "init_toHex", "toPrefixedMessage", "message_", "message", "stringToHex", "bytesToHex", "prefix", "presignMessagePrefix", "size", "concat", "hashMessage", "message", "to_", "keccak256", "toPrefixedMessage", "init_encodeAbiParameters", "init_concat", "init_toHex", "init_keccak256", "init_abi", "init_address", "init_stringify", "init_base", "InvalidDomainError", "BaseError", "domain", "stringify", "InvalidPrimaryTypeError", "primaryType", "types", "InvalidStructTypeError", "type", "init_isAddress", "init_size", "init_toHex", "init_regex", "validateTypedData", "parameters", "domain", "message", "primaryType", "types", "validateData", "struct", "data", "param", "name", "type", "value", "integerMatch", "integerRegex", "_type", "base", "size_", "numberToHex", "isAddress", "InvalidAddressError", "bytesMatch", "bytesRegex", "size", "BytesSizeMismatchError", "validateReference", "InvalidDomainError", "InvalidPrimaryTypeError", "getTypesForEIP712Domain", "validateReference", "type", "InvalidStructTypeError", "hashTypedData", "parameters", "domain", "message", "primaryType", "types", "getTypesForEIP712Domain", "validateTypedData", "parts", "hashDomain", "hashStruct", "keccak256", "concat", "data", "encoded", "encodeData", "encodedTypes", "encodedValues", "hashType", "field", "type", "value", "encodeField", "encodeAbiParameters", "encodedHashType", "toHex", "encodeType", "result", "unsortedDeps", "findTypeDependencies", "deps", "name", "t", "primaryType_", "results", "parsedType", "typeValuePairs", "item", "v", "SignatureErc8010_exports", "__export", "InvalidWrappedSignatureError", "assert", "from", "magicBytes", "suffixParameters", "unwrap", "validate", "wrap", "init_exports", "init_Bytes", "LruMap", "size", "key", "value", "firstKey", "caches", "LruMap", "checksum", "init_Errors", "crypto", "isBytes", "a", "anumber", "n", "abytes", "b", "lengths", "ahash", "h", "aexists", "instance", "checkFinished", "aoutput", "out", "min", "u32", "arr", "clean", "arrays", "i", "createView", "rotr", "word", "shift", "isLE", "byteSwap", "word", "byteSwap32", "arr", "i", "byteSwap", "swap32IfBE", "isLE", "u", "utf8ToBytes", "str", "toBytes", "data", "utf8ToBytes", "abytes", "concatBytes", "arrays", "sum", "i", "a", "abytes", "res", "pad", "Hash", "createHasher", "hashCons", "hashC", "msg", "toBytes", "tmp", "randomBytes", "bytesLength", "crypto", "HMAC", "Hash", "hash", "_key", "ahash", "key", "toBytes", "blockLen", "pad", "clean", "buf", "aexists", "out", "abytes", "to", "oHash", "iHash", "finished", "destroyed", "outputLen", "hmac", "message", "setBigUint64", "view", "byteOffset", "value", "isLE", "_32n", "_u32_max", "wh", "wl", "h", "l", "Chi", "a", "b", "c", "Maj", "HashMD", "Hash", "blockLen", "outputLen", "padOffset", "createView", "data", "aexists", "toBytes", "abytes", "buffer", "len", "pos", "take", "dataView", "out", "aoutput", "clean", "i", "oview", "outLen", "state", "res", "to", "length", "finished", "destroyed", "SHA256_IV", "U32_MASK64", "_32n", "fromBig", "n", "le", "split", "lst", "len", "Ah", "Al", "i", "h", "l", "rotlSH", "h", "l", "s", "rotlSL", "rotlBH", "rotlBL", "_0n", "_1n", "_2n", "_7n", "_256n", "_0x71n", "SHA3_PI", "SHA3_ROTL", "_SHA3_IOTA", "round", "R", "x", "y", "t", "j", "IOTAS", "split", "SHA3_IOTA_H", "SHA3_IOTA_L", "rotlH", "h", "l", "s", "rotlBH", "rotlSH", "rotlL", "rotlBL", "rotlSL", "keccakP", "rounds", "B", "idx1", "idx0", "B0", "B1", "Th", "Tl", "curH", "curL", "shift", "PI", "clean", "Keccak", "_Keccak", "Hash", "blockLen", "suffix", "outputLen", "enableXOF", "anumber", "u32", "swap32IfBE", "data", "aexists", "toBytes", "abytes", "state", "len", "pos", "take", "i", "out", "bufferOut", "bytes", "aoutput", "to", "gen", "createHasher", "keccak_256", "gen", "SHA256_K", "SHA256_W", "SHA256", "HashMD", "outputLen", "SHA256_IV", "A", "B", "C", "D", "E", "F", "G", "H", "view", "offset", "i", "W15", "W2", "s0", "rotr", "s1", "sigma1", "T1", "Chi", "T2", "Maj", "clean", "sha256", "createHasher", "SHA256", "init_Bytes", "init_Hex", "keccak256", "value", "options", "as", "bytes", "keccak_256", "from", "fromBytes", "init_Bytes", "init_Errors", "init_Hex", "init_Json", "assert", "publicKey", "options", "compressed", "prefix", "x", "y", "InvalidPrefixError", "InvalidUncompressedPrefixError", "InvalidCompressedPrefixError", "InvalidError", "from", "value", "publicKey", "validate", "fromHex", "fromBytes", "prefix", "x", "y", "assert", "InvalidSerializedSizeError", "slice", "toHex", "publicKey", "options", "assert", "prefix", "x", "y", "includePrefix", "concat", "fromNumber", "InvalidError", "BaseError", "publicKey", "stringify", "InvalidPrefixError", "prefix", "cause", "InvalidCompressedPrefixError", "InvalidUncompressedPrefixError", "InvalidSerializedSizeError", "size", "from", "addressRegex", "assert", "value", "options", "strict", "InvalidAddressError", "InvalidInputError", "checksum", "InvalidChecksumError", "address", "hexAddress", "hash", "keccak256", "fromString", "characters", "i", "result", "from", "checksumVal", "fromPublicKey", "publicKey", "toHex", "validate", "address", "options", "strict", "assert", "InvalidAddressError", "BaseError", "cause", "InvalidInputError", "InvalidChecksumError", "init_Bytes", "init_Errors", "init_Hex", "init_Bytes", "init_Errors", "init_Hex", "arrayRegex", "bytesRegex", "integerRegex", "maxInt8", "maxInt16", "maxInt24", "maxInt32", "maxInt40", "maxInt48", "maxInt56", "maxInt64", "maxInt72", "maxInt80", "maxInt88", "maxInt96", "maxInt104", "maxInt112", "maxInt120", "maxInt128", "maxInt136", "maxInt144", "maxInt152", "maxInt160", "maxInt168", "maxInt176", "maxInt184", "maxInt192", "maxInt200", "maxInt208", "maxInt216", "maxInt224", "maxInt232", "maxInt240", "maxInt248", "maxInt256", "minInt8", "minInt16", "minInt24", "minInt32", "minInt40", "minInt48", "minInt56", "minInt64", "minInt72", "minInt80", "minInt88", "minInt96", "minInt104", "minInt112", "minInt120", "minInt128", "minInt136", "minInt144", "minInt152", "minInt160", "minInt168", "minInt176", "minInt184", "minInt192", "minInt200", "minInt208", "minInt216", "minInt224", "minInt232", "minInt240", "minInt248", "minInt256", "maxUint8", "maxUint16", "maxUint24", "maxUint32", "maxUint40", "maxUint48", "maxUint56", "maxUint64", "maxUint72", "maxUint80", "maxUint88", "maxUint96", "maxUint104", "maxUint112", "maxUint120", "maxUint128", "maxUint136", "maxUint144", "maxUint152", "maxUint160", "maxUint168", "maxUint176", "maxUint184", "maxUint192", "maxUint200", "maxUint208", "maxUint216", "maxUint224", "maxUint232", "maxUint240", "maxUint248", "maxUint256", "decodeParameter", "cursor", "param", "options", "checksumAddress", "staticPosition", "arrayComponents", "getArrayComponents", "length", "type", "decodeArray", "decodeTuple", "decodeAddress", "decodeBool", "decodeBytes", "decodeNumber", "decodeString", "InvalidTypeError", "sizeOfLength", "sizeOfOffset", "checksum", "value", "address", "fromBytes", "slice", "offset", "toNumber", "start", "startOfData", "dynamicChild", "hasDynamicChild", "consumed", "i", "data", "consumed_", "toBoolean", "_", "size", "signed", "toBigInt", "hasUnnamedChild", "name", "component", "toString", "trimLeft", "prepareParameters", "parameters", "values", "preparedParameters", "prepareParameter", "parameter_", "parameter", "encodeArray", "encodeTuple", "encodeAddress", "encodeBoolean", "integerRegex", "encodeNumber", "encodeBytes", "encodeString", "encode", "staticSize", "dynamic", "encoded", "staticParameters", "dynamicParameters", "dynamicSize", "fromNumber", "concat", "assert", "padLeft", "InvalidArrayError", "ArrayLengthMismatchError", "preparedParam", "parametersize", "bytesSize", "value_", "padRight", "BytesSizeMismatchError", "BaseError", "fromBoolean", "max", "min", "IntegerOutOfRangeError", "hexValue", "fromString", "partsLength", "parts", "param_", "index", "matches", "init_Errors", "staticCursor", "RecursiveReadLimitExceededError", "position", "PositionOutOfBoundsError", "offset", "NegativeOffsetError", "position_", "length", "byte", "bytes", "value", "size", "oldPosition", "count", "create", "recursiveReadLimit", "cursor", "BaseError", "limit", "decode", "parameters", "data", "options", "as", "checksumAddress", "bytes", "fromHex", "cursor", "create", "size", "ZeroDataError", "DataSizeTooSmallError", "fromBytes", "consumed", "values", "i", "param", "consumed_", "decodeParameter", "encode", "LengthMismatchError", "preparedParameters", "prepareParameters", "encodePacked", "types", "type", "value", "concat", "isArray", "address", "assert", "padLeft", "fromString", "fromBoolean", "intMatch", "integerRegex", "_type", "baseType", "bits", "fromNumber", "bytesMatch", "bytesRegex", "BytesSizeMismatchError", "padRight", "arrayMatch", "arrayRegex", "childType", "InvalidTypeError", "from", "parameters", "parseAbiParameters", "DataSizeTooSmallError", "BaseError", "data", "size", "formatAbiParameters", "ZeroDataError", "ArrayLengthMismatchError", "expectedLength", "givenLength", "type", "BytesSizeMismatchError", "expectedSize", "value", "LengthMismatchError", "InvalidArrayError", "InvalidTypeError", "init_Hex", "init_Bytes", "init_Errors", "init_Hex", "from", "value", "options", "as", "encodable", "getEncodable", "cursor", "create", "fromBytes", "fromHex", "hex", "options", "as", "from", "getEncodable", "bytes", "getEncodableList", "x", "getEncodableBytes", "list", "bodyLength", "acc", "sizeOfBodyLength", "getSizeOfLength", "cursor", "encode", "bytesOrHex", "sizeOfBytesLength", "length", "BaseError", "init_utils", "_0n", "_1n", "_2n", "_3n", "_4n", "_5n", "_8n", "mod", "a", "b", "result", "pow2", "x", "power", "modulo", "res", "_0n", "invert", "number", "a", "mod", "b", "y", "_1n", "u", "v", "q", "r", "m", "n", "sqrt3mod4", "Fp", "p1div4", "_4n", "root", "sqrt5mod8", "p5div8", "_5n", "_8n", "n2", "_2n", "nv", "tonelliShanks", "P", "Q", "S", "Z", "_Fp", "Field", "FpLegendre", "cc", "Q1div2", "M", "c", "t", "R", "i", "t_tmp", "exponent", "FpSqrt", "_3n", "FIELD_FIELDS", "validateField", "field", "initial", "opts", "map", "val", "validateObject", "FpPow", "Fp", "num", "power", "_0n", "_1n", "p", "d", "FpInvertBatch", "nums", "passZero", "inverted", "multipliedAcc", "acc", "i", "invertedAcc", "FpLegendre", "Fp", "n", "p1mod2", "_1n", "_2n", "powered", "yes", "zero", "no", "nLength", "n", "nBitLength", "anumber", "_nBitLength", "nByteLength", "Field", "ORDER", "bitLen", "isLE", "redef", "_0n", "BITS", "BYTES", "sqrtP", "f", "bitMask", "_1n", "num", "mod", "lhs", "rhs", "power", "FpPow", "invert", "FpSqrt", "numberToBytesLE", "numberToBytesBE", "bytes", "bytesToNumberLE", "bytesToNumberBE", "lst", "FpInvertBatch", "a", "b", "c", "getFieldBytesLength", "fieldOrder", "bitLength", "getMinHashLength", "length", "mapHashToField", "key", "isLE", "len", "fieldLen", "minLen", "num", "bytesToNumberLE", "bytesToNumberBE", "reduced", "mod", "_1n", "numberToBytesLE", "numberToBytesBE", "init_utils", "_0n", "_1n", "constTimeNegate", "condition", "item", "neg", "validateW", "W", "bits", "calcWOpts", "scalarBits", "windows", "windowSize", "maxNumber", "mask", "bitMask", "shiftBy", "calcOffsets", "n", "window", "wOpts", "wbits", "nextN", "offsetStart", "offset", "isZero", "isNeg", "isNegF", "validateMSMPoints", "points", "c", "p", "i", "validateMSMScalars", "scalars", "field", "s", "pointPrecomputes", "pointWindowSizes", "getW", "P", "wNAF", "elm", "d", "base", "precomputes", "f", "wo", "offsetF", "acc", "transform", "comp", "prev", "pippenger", "fieldN", "plength", "slength", "zero", "bitLen", "MASK", "buckets", "lastBits", "sum", "j", "scalar", "resI", "sumI", "validateBasic", "curve", "validateField", "validateObject", "nLength", "init_utils", "validateSigVerOpts", "opts", "abool", "validatePointOpts", "curve", "validateBasic", "validateObject", "endo", "Fp", "a", "DERErr", "m", "DER", "tag", "data", "E", "dataLen", "len", "numberToHexUnpadded", "lenLen", "pos", "first", "isLong", "length", "lengthBytes", "b", "v", "num", "_0n", "hex", "bytesToNumberBE", "int", "tlv", "ensureBytes", "seqBytes", "seqLeftBytes", "rBytes", "rLeftBytes", "sBytes", "sLeftBytes", "sig", "rs", "ss", "seq", "numToSizedHex", "size", "bytesToHex", "numberToBytesBE", "_1n", "_2n", "_3n", "_4n", "weierstrassPoints", "CURVE", "Fn", "Field", "toBytes", "_c", "point", "_isCompressed", "concatBytes", "fromBytes", "bytes", "tail", "y", "weierstrassEquation", "x", "x2", "x3", "isValidXY", "left", "right", "_4a3", "_27b2", "isWithinCurveOrder", "inRange", "normPrivateKeyToScalar", "key", "lengths", "nByteLength", "wrapPrivateKey", "N", "isBytes", "mod", "aInRange", "aprjpoint", "other", "Point", "toAffineMemo", "memoized", "p", "iz", "z", "is0", "ax", "ay", "zz", "assertValidMemo", "px", "py", "pz", "i", "points", "toInv", "FpInvertBatch", "P", "privateKey", "scalars", "pippenger", "windowSize", "wnaf", "X1", "Y1", "Z1", "X2", "Y2", "Z2", "U1", "U2", "b3", "X3", "Y3", "Z3", "t0", "t1", "t2", "t3", "t4", "t5", "n", "sc", "I", "k1neg", "k1", "k2neg", "k2", "k1p", "k2p", "d", "scalar", "fake", "f1p", "f2p", "f", "Q", "G", "mul", "sum", "cofactor", "isTorsionFree", "clearCofactor", "isCompressed", "nBitLength", "wNAF", "validateOpts", "weierstrass", "curveDef", "CURVE_ORDER", "compressedLen", "uncompressedLen", "modN", "invN", "invert", "cat", "head", "y2", "sqrtError", "suffix", "isYOdd", "cl", "ul", "isBiggerThanHalfOrder", "number", "HALF", "normalizeS", "s", "slcNum", "from", "to", "Signature", "r", "recovery", "l", "msgHash", "rec", "h", "bits2int_modN", "radj", "prefix", "R", "ir", "u1", "u2", "hexToBytes", "utils", "getMinHashLength", "mapHashToField", "getPublicKey", "isProbPub", "item", "fpl", "compLen", "uncompLen", "getSharedSecret", "privateA", "publicB", "bits2int", "delta", "ORDER_MASK", "bitMask", "int2octets", "prepSig", "defaultSigOpts", "k", "hash", "randomBytes", "lowS", "prehash", "ent", "h1int", "seedArgs", "e", "seed", "k2sig", "kBytes", "ik", "q", "normS", "defaultVerOpts", "sign", "privKey", "C", "createHmacDrbg", "verify", "signature", "publicKey", "sg", "format", "isHex", "isObj", "_sig", "derError", "is", "getHash", "hash", "key", "msgs", "hmac", "concatBytes", "randomBytes", "createCurve", "curveDef", "defHash", "create", "weierstrass", "secp256k1P", "secp256k1N", "_0n", "_1n", "_2n", "divNearest", "a", "b", "sqrtMod", "y", "P", "_3n", "_6n", "_11n", "_22n", "_23n", "_44n", "_88n", "b2", "b3", "b6", "pow2", "b9", "b11", "b22", "b44", "b88", "b176", "b220", "b223", "t1", "t2", "root", "Fpk1", "Field", "secp256k1", "createCurve", "k", "n", "a1", "b1", "a2", "POW_2_128", "c1", "c2", "k1", "mod", "k2", "k1neg", "k2neg", "sha256", "init_Errors", "init_Hex", "init_Json", "assert", "signature", "options", "recovered", "MissingPropertiesError", "maxUint256", "InvalidRError", "InvalidSError", "InvalidYParityError", "fromBytes", "fromHex", "InvalidSerializedSizeError", "r", "slice", "s", "yParity", "vToYParity", "extract", "value", "from", "signature_", "fromRpc", "fromLegacy", "fromLegacy", "signature", "vToYParity", "fromRpc", "yParity", "v", "InvalidYParityError", "toTuple", "signature", "r", "s", "yParity", "trimLeft", "fromNumber", "vToYParity", "v", "InvalidVError", "InvalidSerializedSizeError", "BaseError", "signature", "size", "from", "MissingPropertiesError", "stringify", "InvalidRError", "value", "InvalidSError", "InvalidYParityError", "InvalidVError", "from", "authorization", "options", "fromRpc", "address", "chainId", "nonce", "signature", "extract", "getSignPayload", "authorization", "hash", "options", "presign", "keccak256", "concat", "fromHex", "toTuple", "toTuple", "authorization", "address", "chainId", "nonce", "signature", "extract", "fromNumber", "init_Errors", "init_Hex", "init_Hex", "recoverAddress", "options", "fromPublicKey", "recoverPublicKey", "payload", "signature", "r", "s", "yParity", "point", "secp256k1", "from", "magicBytes", "suffixParameters", "from", "assert", "value", "slice", "InvalidWrappedSignatureError", "unwrap", "wrapped", "suffixLength", "toNumber", "suffix", "signature", "auth", "to", "data", "decode", "wrap", "self", "recoverAddress", "getSignPayload", "encode", "fromNumber", "size", "concat", "validate", "BaseError", "formatStorageProof", "storageProof", "proof", "formatProof", "hexToNumber", "getProof", "client", "address", "blockNumber", "blockTag_", "storageKeys", "blockTag", "blockNumberHex", "numberToHex", "proof", "formatProof", "init_toHex", "getStorageAt", "client", "address", "blockNumber", "blockTag", "slot", "blockNumberHex", "numberToHex", "init_transaction", "init_toHex", "getTransaction", "client", "blockHash", "blockNumber", "blockTag_", "hash", "index", "sender", "nonce", "blockTag", "blockNumberHex", "numberToHex", "transaction", "TransactionNotFoundError", "formatTransaction", "getTransactionConfirmations", "client", "hash", "transactionReceipt", "blockNumber", "transaction", "getAction", "getBlockNumber", "getTransaction", "transactionBlockNumber", "init_transaction", "getTransactionReceipt", "client", "hash", "receipt", "TransactionReceiptNotFoundError", "formatTransactionReceipt", "init_abis", "init_contracts", "init_abi", "init_base", "init_contract", "init_decodeFunctionResult", "init_encodeFunctionData", "init_getChainContractAddress", "multicall", "client", "parameters", "account", "authorizationList", "allowFailure", "blockNumber", "blockOverrides", "blockTag", "stateOverride", "contracts", "batchSize", "deployless", "multicallAddress", "getChainContractAddress", "chunkedCalls", "currentChunk", "currentChunkSize", "i", "abi", "address", "args", "functionName", "callData", "encodeFunctionData", "err", "error", "getContractError", "aggregate3Results", "calls", "getAction", "readContract", "multicall3Bytecode", "multicall3Abi", "results", "result", "j", "aggregate3Result", "returnData", "success", "AbiDecodingZeroDataError", "RawContractError", "decodeFunctionResult", "BaseError", "init_BlockOverrides", "init_parseAccount", "init_abi", "init_contract", "init_node", "init_decodeFunctionResult", "init_encodeFunctionData", "init_concat", "init_toHex", "init_getNodeError", "init_transactionRequest", "init_stateOverride", "init_assertRequest", "simulateBlocks", "client", "parameters", "blockNumber", "blockTag", "blocks", "returnFullTransactions", "traceTransfers", "validation", "blockStateCalls", "block", "blockOverrides", "toRpc", "calls", "call_", "call", "account", "parseAccount", "data", "encodeFunctionData", "request", "concat", "assertRequest", "formatTransactionRequest", "stateOverrides", "serializeStateOverride", "numberToHex", "i", "formatBlock", "j", "abi", "args", "functionName", "to", "gasUsed", "logs", "log", "formatLog", "status", "result", "decodeFunctionResult", "error", "AbiDecodingZeroDataError", "RawContractError", "getContractError", "e", "cause", "getNodeError", "UnknownNodeError", "init_exports", "init_Errors", "init_Hex", "init_Errors", "normalizeSignature", "signature", "active", "current", "level", "result", "valid", "char", "BaseError", "isArgOfType", "arg", "abiParameter", "argType", "abiParameterType", "validate", "component", "index", "x", "getAmbiguousTypes", "sourceParameters", "targetParameters", "args", "parameterIndex", "sourceParameter", "targetParameter", "types", "from", "abiItem", "options", "prepare", "item", "parseAbiItem", "getSignatureHash", "fromAbi", "abi", "name", "args", "isSelector", "validate", "abiItems", "getSelector", "slice", "NotFoundError", "matchedAbiItem", "arg", "index", "abiParameter", "isArgOfType", "ambiguousTypes", "getAmbiguousTypes", "AmbiguityError", "overloads", "parameters", "getSignature", "signature", "formatAbiItem", "normalizeSignature", "keccak256", "fromString", "BaseError", "x", "y", "data", "type", "selector", "init_Hex", "encode", "parameters", "abiConstructor", "options", "abi", "fromAbi", "bytecode", "args", "concat", "from", "abiConstructor", "fromAbi", "abi", "item", "NotFoundError", "init_Hex", "encodeData", "parameters", "abiFunction", "args", "abi", "name", "fromAbi", "overloads", "item", "selector", "getSelector", "data", "encode", "concat", "from", "abiFunction", "options", "fromAbi", "abi", "name", "item", "NotFoundError", "getSelector", "abiItem", "init_parseAccount", "ethAddress", "zeroAddress", "init_contracts", "init_base", "init_encodeFunctionData", "getBalanceCode", "simulateCalls", "client", "parameters", "blockNumber", "blockTag", "calls", "stateOverrides", "traceAssetChanges", "traceTransfers", "validation", "account", "parseAccount", "BaseError", "getBalanceData", "encode", "from", "deploylessCallViaBytecodeBytecode", "encodeData", "assetAddresses", "call", "accessList", "createAccessList", "encodeFunctionData", "address", "storageKeys", "x", "blocks", "simulateBlocks", "i", "zeroAddress", "block_results", "block_ethPre", "block_assetsPre", "block_ethPost", "block_assetsPost", "block_decimals", "block_tokenURI", "block_symbols", "block_calls", "block", "results", "ethPre", "assetsPre", "balancesPre", "hexToBigInt", "ethPost", "assetsPost", "balancesPost", "decimals", "symbols", "tokenURI", "changes", "balancePost", "balancePre", "decimals_", "symbol_", "tokenURI_", "token", "ethAddress", "change", "SignatureErc6492_exports", "__export", "InvalidWrappedSignatureError", "assert", "from", "magicBytes", "universalSignatureValidatorAbi", "universalSignatureValidatorBytecode", "unwrap", "validate", "wrap", "init_Errors", "init_Hex", "magicBytes", "universalSignatureValidatorBytecode", "universalSignatureValidatorAbi", "assert", "wrapped", "slice", "InvalidWrappedSignatureError", "from", "unwrap", "to", "data", "signature", "decode", "wrap", "value", "concat", "encode", "validate", "BaseError", "init_abis", "init_contracts", "init_contract", "init_encodeDeployData", "init_encodeFunctionData", "init_getAddress", "init_isAddressEqual", "init_concat", "init_isHex", "init_fromHex", "init_toHex", "init_secp256k1", "init_fromHex", "init_toBytes", "serializeSignature", "r", "s", "to", "v", "yParity", "yParity_", "signature", "secp256k1", "hexToBigInt", "hexToBytes", "init_call", "verifyHash", "client", "parameters", "address", "chain", "hash", "verifierAddress", "multicallAddress", "mode", "signature", "isHex", "serializeSignature", "bytesToHex", "isAddressEqual", "getAddress", "recoverAddress", "SignatureErc8010_exports", "verifyErc8010", "verifyErc6492", "error", "VerificationError", "blockNumber", "blockTag", "authorization_ox", "initData", "to", "getCode", "concatHex", "verifyErc1271", "authorization", "numberToHex", "verifyAuthorization", "results", "getAction", "readContract", "multicall3Bytecode", "multicall3Abi", "encodeFunctionData", "erc1271Abi", "factory", "factoryData", "rest", "wrappedSignature", "SignatureErc6492_exports", "args", "erc6492SignatureValidatorAbi", "encodeDeployData", "erc6492SignatureValidatorByteCode", "data", "call", "CallExecutionError", "hexToBool", "ContractFunctionExecutionError", "verifyMessage", "client", "address", "message", "factory", "factoryData", "signature", "callRequest", "hash", "hashMessage", "getAction", "verifyHash", "verifyTypedData", "client", "parameters", "address", "factory", "factoryData", "signature", "message", "primaryType", "types", "domain", "callRequest", "hash", "hashTypedData", "getAction", "verifyHash", "init_transaction", "init_withResolvers", "init_stringify", "init_fromHex", "init_stringify", "watchBlockNumber", "client", "emitOnBegin", "emitMissed", "onBlockNumber", "onError", "poll_", "pollingInterval", "enablePolling", "prevBlockNumber", "observerId", "stringify", "observe", "emit", "poll", "blockNumber", "getAction", "getBlockNumber", "i", "err", "active", "unsubscribe", "transport", "unsubscribe_", "data", "hexToBigInt", "error", "waitForTransactionReceipt", "client", "parameters", "checkReplacement", "confirmations", "hash", "onReplaced", "retryCount", "retryDelay", "count", "timeout", "observerId", "stringify", "pollingInterval", "transaction", "replacedTransaction", "receipt", "retrying", "_unobserve", "_unwatch", "promise", "resolve", "reject", "withResolvers", "timer", "WaitForTransactionReceiptTimeoutError", "observe", "emit", "getAction", "getTransactionReceipt", "watchBlockNumber", "blockNumber_", "done", "fn", "blockNumber", "withRetry", "getTransaction", "err", "TransactionNotFoundError", "TransactionReceiptNotFoundError", "block", "getBlock", "error", "BlockNotFoundError", "replacementTransaction", "from", "nonce", "reason", "err_", "init_stringify", "watchBlocks", "client", "blockTag", "emitMissed", "emitOnBegin", "onBlock", "onError", "includeTransactions_", "poll_", "pollingInterval", "enablePolling", "includeTransactions", "prevBlock", "observerId", "stringify", "observe", "emit", "poll", "block", "getAction", "getBlock", "i", "err", "active", "emitFetched", "unsubscribe", "transport", "unsubscribe_", "data", "error", "init_abi", "init_rpc", "init_stringify", "watchEvent", "client", "address", "args", "batch", "event", "events", "fromBlock", "onError", "onLogs", "poll_", "pollingInterval", "strict_", "enablePolling", "strict", "observerId", "stringify", "observe", "emit", "previousBlockNumber", "filter", "initialized", "unwatch", "poll", "getAction", "createEventFilter", "logs", "getFilterChanges", "blockNumber", "getBlockNumber", "getLogs", "log", "err", "InvalidInputRpcError", "uninstallFilter", "active", "unsubscribe", "transport", "events_", "topics", "encodeEventTopics", "unsubscribe_", "data", "eventName", "decodeEventLog", "formatted", "formatLog", "isUnnamed", "DecodeLogDataMismatch", "DecodeLogTopicsMismatch", "x", "error", "init_stringify", "watchPendingTransactions", "client", "batch", "onError", "onTransactions", "poll_", "pollingInterval", "observerId", "stringify", "observe", "emit", "filter", "unwatch", "poll", "getAction", "createPendingTransactionFilter", "err", "hashes", "getFilterChanges", "hash", "uninstallFilter", "active", "unsubscribe", "unsubscribe_", "data", "transaction", "error", "parseSiweMessage", "message", "scheme", "statement", "prefix", "prefixRegex", "chainId", "expirationTime", "issuedAt", "notBefore", "requestId", "suffix", "suffixRegex", "resources", "init_isAddress", "init_isAddressEqual", "validateSiweMessage", "parameters", "address", "domain", "message", "nonce", "scheme", "time", "isAddress", "isAddressEqual", "verifySiweMessage", "client", "parameters", "address", "domain", "message", "nonce", "scheme", "signature", "time", "callRequest", "parsed", "parseSiweMessage", "validateSiweMessage", "hash", "hashMessage", "verifyHash", "init_transaction", "sendRawTransactionSync", "client", "serializedTransaction", "throwOnReceiptRevert", "timeout", "receipt", "formatted", "formatTransactionReceipt", "TransactionReceiptRevertedError", "publicActions", "client", "args", "call", "createAccessList", "createBlockFilter", "createContractEventFilter", "createEventFilter", "createPendingTransactionFilter", "estimateContractGas", "estimateGas", "getBalance", "getBlobBaseFee", "getBlock", "getBlockNumber", "getBlockTransactionCount", "getCode", "getChainId", "getContractEvents", "getDelegation", "getEip712Domain", "getEnsAddress", "getEnsAvatar", "getEnsName", "getEnsResolver", "getEnsText", "getFeeHistory", "estimateFeesPerGas", "getFilterChanges", "getFilterLogs", "getGasPrice", "getLogs", "getProof", "estimateMaxPriorityFeePerGas", "fillTransaction", "getStorageAt", "getTransaction", "getTransactionConfirmations", "getTransactionCount", "getTransactionReceipt", "multicall", "prepareTransactionRequest", "readContract", "sendRawTransaction", "sendRawTransactionSync", "simulateBlocks", "simulateCalls", "simulateContract", "verifyHash", "verifyMessage", "verifySiweMessage", "verifyTypedData", "uninstallFilter", "waitForTransactionReceipt", "watchBlocks", "watchBlockNumber", "watchContractEvent", "watchEvent", "watchPendingTransactions", "createPublicClient", "parameters", "key", "name", "createClient", "publicActions", "createTransport", "key", "methods", "name", "request", "retryCount", "retryDelay", "timeout", "type", "value", "uid", "buildRequest", "init_request", "init_base", "UrlRequiredError", "BaseError", "init_createBatchScheduler", "http", "url", "config", "batch", "fetchFn", "fetchOptions", "key", "methods", "name", "onFetchRequest", "onFetchResponse", "retryDelay", "raw", "chain", "retryCount_", "timeout_", "batchSize", "wait", "retryCount", "timeout", "url_", "UrlRequiredError", "rpcClient", "getHttpRpcClient", "createTransport", "method", "params", "body", "schedule", "createBatchScheduler", "requests", "a", "b", "fn", "error", "result", "RpcRequestError", "init_getAddress", "SEEN", "MAX_REPORTS_PER_PAGE", "installed", "configured", "installClientErrorReporter", "cfg", "ev", "message", "stack", "report", "reason", "scrubUrl", "raw", "u", "key", "escapeHtml", "s", "ch", "fmtTokens", "n", "weiToEth", "weiStr", "wei", "whole", "fracStr", "fetchJson", "url", "init", "res", "detail", "KIND_LABELS", "renderLedgerRow", "sign", "cls", "when", "renderPackCard", "p", "purchaseConfigured", "WalletPage", "__publicField", "cfg", "installClientErrorReporter", "me", "balEl", "purchasedEl", "spentEl", "earnedEl", "acct", "el", "data", "getAddress", "err", "before", "bodyEl", "moreBtn", "qs", "rows", "msg", "accounts", "e", "packId", "button", "treasury", "from", "original", "pack", "valueHex", "txHash", "createPublicClient", "http", "chainId", "current", "hex", "ev", "target", "buyBtn", "id", "GAWallet", "wallet_default"] +} diff --git a/models/detail/index.html b/models/detail/index.html new file mode 100644 index 0000000..804a515 --- /dev/null +++ b/models/detail/index.html @@ -0,0 +1,123 @@ +--- +layout: default +permalink: /models/detail/ +title: "AI Art Model — GeneratedArt" +meta_title: "AI Art Model — GeneratedArt" +meta_description: | + An AI art model on GeneratedArt — provenance, versions, and a live + render form. +header_image: "/assets/images/art/bg31.webp" +--- + +{% comment %} + Model detail is query-string routed (?slug=X), matching /p/?id=N and + /t/?p=N&id=T — Jekyll can't statically generate a page per D1 row. +{% endcomment %} + +{% include layouts/nav/nav-10.html default_logo="black" drop_search=true %} + +
    +
    +
    +
    +

    …

    +

    Loading…

    +

    +
    + +
    +
    +

    Versions & provenance

    +
      + +
      +

      Publish a new version

      +

      +
      + +
      + + +
      +
      + + +
      + +
      + + +
      + +
      +
      +
      + + +
      +
      + + +
      +
      +
      + + +
      +
      + + +
      +
      + + +
      +
      +
      + + +
      +
      +
      +
      + + + + + + +{% include layouts/footer/footer-1.html %} diff --git a/models/index.html b/models/index.html new file mode 100644 index 0000000..ab82b6d --- /dev/null +++ b/models/index.html @@ -0,0 +1,122 @@ +--- +layout: default +permalink: /models/ +title: "AI Art Models — GeneratedArt" +meta_title: "AI Art Models — GeneratedArt" +meta_description: | + Browse AI art models on GeneratedArt — code-writing copilots and + creator-trained custom art models, published with full provenance. +header_image: "/assets/images/art/bg31.webp" +--- + +{% include layouts/nav/nav-10.html default_logo="black" drop_search=true %} + +
      +
      +
      +
      +
      +

      AI Art models

      +

      Code-writing copilots and creator-trained custom art models, published with provenance.

      +
      +
      +
      + + + +
      +
      +
      + +
      +
      Loading…
      +
      + +
      +
      +

      Your models

      + +
      +
      +
      Loading…
      +
      +
      + + +
      +
      +
      + + + + + + +{% include layouts/footer/footer-1.html %} diff --git a/wallet/index.html b/wallet/index.html new file mode 100644 index 0000000..e17ed0c --- /dev/null +++ b/wallet/index.html @@ -0,0 +1,118 @@ +--- +layout: default +permalink: /wallet/ +title: "Wallet — GeneratedArt" +meta_title: "Wallet — GeneratedArt" +meta_description: | + Your render-token balance, purchase history, and token packs on + GeneratedArt. +header_image: "/assets/images/art/bg31.webp" +--- + +{% include layouts/nav/nav-10.html default_logo="black" drop_search=true %} + +
      +
      +
      +
      +

      Wallet

      +

      Prepaid render tokens — spend them running AI art models, earn them when others run yours.

      +
      + +
      +
      +

      Balance

      +

      …

      +
      +
      +
      Purchased
      …
      +
      Spent
      …
      +
      Earned
      …
      +
      +
      + +

      + +

      Buy tokens

      +
      +
      Loading…
      +
      + +

      Activity

      +
      + + + + + + + + + + + + + +
      WhenKindMemoAmountBalance
      Loading…
      +
      +
      + +
      +
      + +
      +

      You need to sign in first.

      +

      Connect your wallet to see your token balance.

      + Connect wallet +
      +
      +
      + + + + + + +{% include layouts/footer/footer-1.html %} diff --git a/workers/api/client/models.ts b/workers/api/client/models.ts new file mode 100644 index 0000000..fe60858 --- /dev/null +++ b/workers/api/client/models.ts @@ -0,0 +1,417 @@ +/** + * /models/ — public catalogue + "my models" + publish flow. + * /models/detail/?slug=X — one model: provenance, versions, publish a + * new version (owner-only), and the render form (everyone, gated by + * visibility/price). + * + * Two Jekyll pages share this module (query-string routed like + * /p/?id=N and /t/?p=N&id=T) — `mount()` reads `cfg.mode` to pick + * which one it's rendering into. + */ +import { installClientErrorReporter } from "./lib/clientErrors"; + +interface ModelsConfig { + apiBase: string; + rootEl: HTMLElement; + mode: "catalogue" | "detail"; +} + +interface Owner { + handle: string; + display_name: string | null; + avatar_url: string | null; +} + +interface ModelSummary { + id: number; + slug: string; + title: string; + description: string | null; + kind: string; + provider: string; + visibility: string; + status: string; + created_at: number; + updated_at: number; + latest_version: number | null; + latest_price_tokens: number | null; + run_count: number; + owner?: Owner; +} + +interface ModelVersion { + id: number; + version: number; + provider_model_id: string; + system_prompt?: string; + params_schema: unknown; + price_tokens: number; + training_method: string | null; + base_model: string | null; + dataset_note: string | null; + weights_ref?: string; + created_at: number; +} + +interface RenderJob { + id: number; + model_version_id: number; + project_id: number | null; + seed: string; + params: Record | null; + status: string; + price_tokens: number; + output_kind: string | null; + output_text: string | null; + output_key: string | null; + output_hash: string | null; + error_code: string | null; + created_at: number; + finished_at: number | null; +} + +function escapeHtml(s: string): string { + return s.replace(/[&<>"']/g, (ch) => { + switch (ch) { + case "&": return "&"; + case "<": return "<"; + case ">": return ">"; + case '"': return """; + default: return "'"; + } + }); +} + +async function fetchJson(url: string, init?: RequestInit): Promise { + const res = await fetch(url, { credentials: "include", ...init }); + if (!res.ok) { + let detail = ""; + try { detail = JSON.stringify(await res.json()); } catch {} + throw new Error(`${res.status}: ${detail || res.statusText}`); + } + return (await res.json()) as T; +} + +const KIND_LABELS: Record = { code: "Code", image: "Image" }; +const PROVIDER_LABELS: Record = { + anthropic: "Claude", + workers_ai: "Workers AI", + fal_custom: "Custom-trained", + mock: "Mock", +}; + +function provenanceTag(v: Pick): string { + if (!v.base_model) return ""; + const method = v.training_method ? ` · ${escapeHtml(v.training_method)}` : ""; + return `${escapeHtml(v.base_model)}${method}`; +} + +function renderModelCard(m: ModelSummary): string { + const owner = m.owner + ? `@${escapeHtml(m.owner.handle)}` + : ""; + const price = + m.latest_price_tokens !== null + ? `${m.latest_price_tokens.toLocaleString()} tokens / run` + : "unpublished"; + return ` + +
      +

      ${escapeHtml(KIND_LABELS[m.kind] || m.kind)} · ${escapeHtml(PROVIDER_LABELS[m.provider] || m.provider)}

      +

      ${escapeHtml(m.title)}

      +

      ${escapeHtml(m.description || "No description yet.")}

      +

      ${escapeHtml(price)} · ${m.run_count} run${m.run_count === 1 ? "" : "s"}

      + ${owner} +
      +
      `; +} + +function renderEmptyModels(): string { + return `

      No models yet.

      `; +} + +// --------------------------------------------------------------------------- +// Catalogue page +// --------------------------------------------------------------------------- + +class CataloguePage { + private cfg!: ModelsConfig; + private isAuthed = false; + + async mount(cfg: ModelsConfig): Promise { + this.cfg = cfg; + try { + await fetchJson(`${cfg.apiBase}/v1/me`); + this.isAuthed = true; + } catch { + this.isAuthed = false; + } + const mineSection = cfg.rootEl.querySelector("#ga-models-mine-section"); + if (mineSection) mineSection.classList.toggle("d-none", !this.isAuthed); + + await this.loadCatalogue(); + if (this.isAuthed) await this.loadMine(); + this.attachEvents(); + } + + private async loadCatalogue(kind?: string): Promise { + const el = this.cfg.rootEl.querySelector("#ga-models-catalogue"); + if (!el) return; + el.innerHTML = `
      Loading…
      `; + try { + const qs = kind ? `?kind=${encodeURIComponent(kind)}` : ""; + const data = await fetchJson<{ models: ModelSummary[] }>(`${this.cfg.apiBase}/v1/models${qs}`); + el.innerHTML = data.models.length ? data.models.map(renderModelCard).join("") : renderEmptyModels(); + } catch (err) { + el.innerHTML = `
      Failed to load: ${escapeHtml(String(err))}
      `; + } + } + + private async loadMine(): Promise { + const el = this.cfg.rootEl.querySelector("#ga-models-mine"); + if (!el) return; + try { + const data = await fetchJson<{ models: ModelSummary[] }>(`${this.cfg.apiBase}/v1/models/mine`); + el.innerHTML = data.models.length ? data.models.map(renderModelCard).join("") : renderEmptyModels(); + } catch (err) { + el.innerHTML = `
      Failed to load: ${escapeHtml(String(err))}
      `; + } + } + + private attachEvents(): void { + this.cfg.rootEl.querySelectorAll("[data-ga-kind-filter]").forEach((btn) => { + btn.addEventListener("click", () => { + this.cfg.rootEl + .querySelectorAll("[data-ga-kind-filter]") + .forEach((b) => b.classList.toggle("active", b === btn)); + const kind = btn.dataset.gaKindFilter || ""; + void this.loadCatalogue(kind || undefined); + }); + }); + + const form = this.cfg.rootEl.querySelector("#ga-new-model-form"); + form?.addEventListener("submit", async (ev) => { + ev.preventDefault(); + const errEl = this.cfg.rootEl.querySelector("#ga-new-model-error"); + errEl?.classList.add("d-none"); + const title = this.cfg.rootEl.querySelector("#ga-nm-title")!.value.trim(); + const kind = this.cfg.rootEl.querySelector("#ga-nm-kind")!.value; + const provider = this.cfg.rootEl.querySelector("#ga-nm-provider")!.value; + const description = this.cfg.rootEl.querySelector("#ga-nm-description")!.value.trim(); + try { + const data = await fetchJson<{ model: ModelSummary }>(`${this.cfg.apiBase}/v1/models`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ title, kind, provider, description: description || undefined, visibility: "private" }), + }); + window.location.href = `/models/detail/?slug=${encodeURIComponent(data.model.slug)}`; + } catch (err) { + if (errEl) { + errEl.textContent = `Couldn't create model: ${String(err)}`; + errEl.classList.remove("d-none"); + } + } + }); + } +} + +// --------------------------------------------------------------------------- +// Detail page +// --------------------------------------------------------------------------- + +class DetailPage { + private cfg!: ModelsConfig; + private slug = ""; + private model: ModelSummary | null = null; + private versions: ModelVersion[] = []; + private isOwner = false; + + async mount(cfg: ModelsConfig): Promise { + this.cfg = cfg; + const params = new URLSearchParams(window.location.search); + this.slug = params.get("slug") || ""; + if (!this.slug) { + cfg.rootEl.innerHTML = `

      Bad URL — model pages look like /models/detail/?slug=your-model.

      `; + return; + } + + let me: { user: { handle: string } } | null = null; + try { + me = await fetchJson(`${cfg.apiBase}/v1/me`); + } catch { + me = null; + } + + try { + const data = await fetchJson<{ model: ModelSummary; versions: ModelVersion[] }>( + `${cfg.apiBase}/v1/models/${encodeURIComponent(this.slug)}`, + ); + this.model = data.model; + this.versions = data.versions; + } catch (err) { + cfg.rootEl.innerHTML = `

      Model not found: ${escapeHtml(String(err))}

      `; + return; + } + + this.isOwner = !!me && !!this.model.owner && me.user.handle === this.model.owner.handle; + this.render(); + this.attachEvents(); + } + + private render(): void { + const m = this.model!; + const root = this.cfg.rootEl; + root.querySelector("#ga-model-title")!.textContent = m.title; + root.querySelector("#ga-model-desc")!.textContent = m.description || "No description yet."; + root.querySelector("#ga-model-meta")!.textContent = + `${KIND_LABELS[m.kind] || m.kind} · ${PROVIDER_LABELS[m.provider] || m.provider} · ${m.visibility}`; + + const versionsEl = root.querySelector("#ga-model-versions"); + if (versionsEl) { + versionsEl.innerHTML = this.versions.length + ? this.versions + .map( + (v) => ` +
    • +
      + v${v.version} + ${v.price_tokens.toLocaleString()} tokens +
      +

      ${escapeHtml(v.provider_model_id)}

      + ${provenanceTag(v)} + ${v.dataset_note ? `

      ${escapeHtml(v.dataset_note)}

      ` : ""} +
    • `, + ) + .join("") + : `
    • No published versions yet.
    • `; + } + + const publishSection = root.querySelector("#ga-publish-version-section"); + publishSection?.classList.toggle("d-none", !this.isOwner); + const providerHint = root.querySelector("#ga-pv-provider-hint"); + if (providerHint) { + providerHint.textContent = + m.provider === "fal_custom" + ? "This is a custom-trained model — base model, training method, and weights_ref are required." + : m.provider === "anthropic" + ? "Provider model id, e.g. claude-opus-5." + : "Provider model id from the Workers AI catalogue, e.g. @cf/black-forest-labs/flux-1-schnell."; + } + root.querySelectorAll(".ga-fal-only").forEach((el) => + el.classList.toggle("d-none", m.provider !== "fal_custom"), + ); + root.querySelectorAll(".ga-code-only").forEach((el) => + el.classList.toggle("d-none", m.kind !== "code"), + ); + + const latest = this.versions[0]; + const renderSection = root.querySelector("#ga-render-section"); + if (renderSection) { + renderSection.classList.toggle("d-none", !latest || m.status !== "active"); + const priceEl = root.querySelector("#ga-render-price"); + if (priceEl && latest) priceEl.textContent = `${latest.price_tokens.toLocaleString()} tokens`; + } + } + + private async publishVersion(): Promise { + const root = this.cfg.rootEl; + const errEl = root.querySelector("#ga-pv-error"); + errEl?.classList.add("d-none"); + const providerModelId = root.querySelector("#ga-pv-provider-model-id")!.value.trim(); + const priceTokens = parseInt(root.querySelector("#ga-pv-price")!.value, 10); + const body: Record = { provider_model_id: providerModelId, price_tokens: priceTokens }; + + if (this.model!.provider === "fal_custom") { + body.training_method = root.querySelector("#ga-pv-training-method")!.value; + body.base_model = root.querySelector("#ga-pv-base-model")!.value.trim(); + body.dataset_note = root.querySelector("#ga-pv-dataset-note")!.value.trim(); + body.weights_ref = root.querySelector("#ga-pv-weights-ref")!.value.trim(); + } else if (this.model!.kind === "code") { + body.system_prompt = root.querySelector("#ga-pv-system-prompt")?.value.trim() || undefined; + } + + try { + await fetchJson(`${this.cfg.apiBase}/v1/models/${encodeURIComponent(this.slug)}/versions`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(body), + }); + window.location.reload(); + } catch (err) { + if (errEl) { + errEl.textContent = `Couldn't publish: ${String(err)}`; + errEl.classList.remove("d-none"); + } + } + } + + private async render_(button: HTMLButtonElement): Promise { + const root = this.cfg.rootEl; + const prompt = root.querySelector("#ga-render-prompt")!.value.trim(); + const resultEl = root.querySelector("#ga-render-result")!; + const original = button.textContent; + button.disabled = true; + button.textContent = "Rendering…"; + resultEl.innerHTML = ""; + try { + const data = await fetchJson<{ job: RenderJob }>( + `${this.cfg.apiBase}/v1/models/${encodeURIComponent(this.slug)}/render`, + { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ prompt }), + }, + ); + this.renderResult(data.job, resultEl); + } catch (err) { + resultEl.innerHTML = `
      Render failed: ${escapeHtml(String(err))}
      `; + } finally { + button.disabled = false; + button.textContent = original; + } + } + + private renderResult(job: RenderJob, el: HTMLElement): void { + if (job.status === "failed") { + el.innerHTML = `
      Render failed (${escapeHtml(job.error_code || "unknown")}) — tokens refunded.
      `; + return; + } + const seedLine = `

      seed ${escapeHtml(job.seed)}

      `; + if (job.output_kind === "code" && job.output_text) { + el.innerHTML = `${seedLine}
      ${escapeHtml(job.output_text)}
      `; + } else if (job.output_kind === "image" && job.output_key) { + const src = `${this.cfg.apiBase}/v1/captures/${job.output_key}`; + el.innerHTML = `${seedLine}Render result`; + } else { + el.innerHTML = `${seedLine}

      Render succeeded with no returned output.

      `; + } + } + + private attachEvents(): void { + const root = this.cfg.rootEl; + root.querySelector("#ga-publish-version-form")?.addEventListener("submit", (ev) => { + ev.preventDefault(); + void this.publishVersion(); + }); + root.querySelector("#ga-render-btn")?.addEventListener("click", (ev) => { + void this.render_(ev.currentTarget as HTMLButtonElement); + }); + } +} + +const GAModels = { + async mount(cfg: ModelsConfig) { + installClientErrorReporter({ apiBase: cfg.apiBase, page: `models-${cfg.mode}` }); + if (cfg.mode === "catalogue") await new CataloguePage().mount(cfg); + else await new DetailPage().mount(cfg); + }, +}; + +declare global { + interface Window { + GAModels?: typeof GAModels; + } +} + +window.GAModels = GAModels; +export default GAModels; diff --git a/workers/api/client/wallet.ts b/workers/api/client/wallet.ts new file mode 100644 index 0000000..de4523b --- /dev/null +++ b/workers/api/client/wallet.ts @@ -0,0 +1,361 @@ +/** + * /wallet/ — token balance, packs, on-chain purchase, ledger history. + * + * No payment processor: buying a pack sends ETH directly to the + * platform's treasury address, then posts the tx hash to + * POST /v1/tokens/purchase/confirm, which verifies the receipt on-chain + * before crediting the account (see tokens/handlers.ts). Mirrors the + * wallet-connect + send-tx + wait-receipt shape already used by + * client/mint.ts. + */ +import { + createPublicClient, + createWalletClient, + custom, + http, + getAddress, + type EIP1193Provider, + type Hex, +} from "viem"; +import { installClientErrorReporter } from "./lib/clientErrors"; + +declare global { + interface Window { + ethereum?: EIP1193Provider; + GAWallet?: typeof GAWallet; + } +} + +interface WalletConfig { + apiBase: string; + rootEl: HTMLElement; + onUnauthenticated?: () => void; +} + +interface AccountResp { + balance: number; + lifetime_purchased: number; + lifetime_spent: number; + lifetime_earned: number; +} + +interface Pack { + id: number; + slug: string; + title: string; + tokens: number; + price_wei: string; +} + +interface PacksResp { + packs: Pack[]; + purchase_configured: boolean; + chain_id: number | null; + treasury_address: string | null; +} + +interface LedgerEntry { + id: number; + delta: number; + kind: string; + balance_after: number; + ref_kind: string | null; + ref_id: number | null; + memo: string | null; + created_at: number; +} + +function escapeHtml(s: string): string { + return s.replace(/[&<>"']/g, (ch) => { + switch (ch) { + case "&": return "&"; + case "<": return "<"; + case ">": return ">"; + case '"': return """; + default: return "'"; + } + }); +} + +function fmtTokens(n: number): string { + return n.toLocaleString("en-US"); +} + +// price_wei is a decimal string too large for Number — format to a +// human ETH amount without pulling in a bignum-decimal library. +function weiToEth(weiStr: string): string { + const wei = BigInt(weiStr); + const whole = wei / 1_000_000_000_000_000_000n; + const frac = wei % 1_000_000_000_000_000_000n; + const fracStr = frac.toString().padStart(18, "0").slice(0, 6).replace(/0+$/, ""); + return fracStr ? `${whole}.${fracStr}` : `${whole}`; +} + +async function fetchJson(url: string, init?: RequestInit): Promise { + const res = await fetch(url, { credentials: "include", ...init }); + if (!res.ok) { + let detail = ""; + try { detail = JSON.stringify(await res.json()); } catch {} + throw new Error(`${res.status}: ${detail || res.statusText}`); + } + return (await res.json()) as T; +} + +const KIND_LABELS: Record = { + grant: "Grant", + purchase: "Purchase", + debit: "Spend", + refund: "Refund", + earn: "Earned", + adjust: "Adjustment", +}; + +function renderLedgerRow(e: LedgerEntry): string { + const sign = e.delta > 0 ? "+" : ""; + const cls = e.delta > 0 ? "ga-ledger-credit" : "ga-ledger-debit"; + const when = new Date(e.created_at * 1000).toLocaleString(); + return ` + + ${escapeHtml(when)} + ${escapeHtml(KIND_LABELS[e.kind] || e.kind)} + ${escapeHtml(e.memo || "—")} + ${sign}${fmtTokens(e.delta)} + ${fmtTokens(e.balance_after)} + `; +} + +function renderPackCard(p: Pack, purchaseConfigured: boolean): string { + return ` +
      +

      ${escapeHtml(p.title)}

      +

      ${fmtTokens(p.tokens)} tokens

      +

      ${weiToEth(p.price_wei)} ETH

      + +
      `; +} + +class WalletPage { + private cfg!: WalletConfig; + private treasury: Hex | null = null; + private chainId: number | null = null; + private connectedAddress: Hex | null = null; + + async mount(cfg: WalletConfig): Promise { + this.cfg = cfg; + installClientErrorReporter({ apiBase: cfg.apiBase, page: "wallet" }); + + let me: unknown = null; + try { + me = await fetchJson(`${cfg.apiBase}/v1/me`); + } catch { + me = null; + } + if (!me) { + cfg.onUnauthenticated?.(); + return; + } + + await this.loadAccount(); + await this.loadPacks(); + await this.loadLedger(); + this.attachEvents(); + } + + private async loadAccount(): Promise { + const balEl = this.cfg.rootEl.querySelector("#ga-wallet-balance"); + const purchasedEl = this.cfg.rootEl.querySelector("#ga-wallet-purchased"); + const spentEl = this.cfg.rootEl.querySelector("#ga-wallet-spent"); + const earnedEl = this.cfg.rootEl.querySelector("#ga-wallet-earned"); + if (!balEl) return; + try { + const acct = await fetchJson(`${this.cfg.apiBase}/v1/tokens/account`); + balEl.textContent = fmtTokens(acct.balance); + if (purchasedEl) purchasedEl.textContent = fmtTokens(acct.lifetime_purchased); + if (spentEl) spentEl.textContent = fmtTokens(acct.lifetime_spent); + if (earnedEl) earnedEl.textContent = fmtTokens(acct.lifetime_earned); + } catch { + balEl.textContent = "—"; + } + } + + private async loadPacks(): Promise { + const el = this.cfg.rootEl.querySelector("#ga-wallet-packs"); + if (!el) return; + try { + const data = await fetchJson(`${this.cfg.apiBase}/v1/tokens/packs`); + // Validated + checksummed here rather than trusted verbatim from + // the API — getAddress throws on a malformed address, which we'd + // rather surface as "purchasing unavailable" than as a wallet + // error deep inside the buy flow. + try { + this.treasury = data.treasury_address ? getAddress(data.treasury_address) : null; + } catch { + this.treasury = null; + } + this.chainId = data.chain_id; + if (!data.purchase_configured) { + el.insertAdjacentHTML( + "beforebegin", + `

      Purchasing isn't configured yet — packs are shown, but Buy is disabled.

      `, + ); + } + el.innerHTML = data.packs.map((p) => renderPackCard(p, data.purchase_configured)).join(""); + } catch (err) { + el.innerHTML = `
      Failed to load packs: ${escapeHtml(String(err))}
      `; + } + } + + private async loadLedger(before?: number): Promise { + const bodyEl = this.cfg.rootEl.querySelector("#ga-ledger-body"); + const moreBtn = this.cfg.rootEl.querySelector("#ga-ledger-more"); + if (!bodyEl) return; + try { + const qs = before ? `?before=${before}` : ""; + const data = await fetchJson<{ entries: LedgerEntry[]; next_before: number | null }>( + `${this.cfg.apiBase}/v1/tokens/ledger${qs}`, + ); + const rows = data.entries.map(renderLedgerRow).join(""); + bodyEl.insertAdjacentHTML("beforeend", rows); + if (!before && !data.entries.length) { + bodyEl.innerHTML = `No activity yet.`; + } + if (moreBtn) { + if (data.next_before) { + moreBtn.classList.remove("d-none"); + moreBtn.dataset.before = String(data.next_before); + } else { + moreBtn.classList.add("d-none"); + } + } + } catch (err) { + bodyEl.innerHTML = `Failed to load: ${escapeHtml(String(err))}`; + } + } + + private feedback(msg: string): void { + const el = this.cfg.rootEl.querySelector("#ga-wallet-feedback"); + if (el) el.textContent = msg; + } + + private async ensureConnected(): Promise { + if (this.connectedAddress) return true; + if (!window.ethereum) { + this.feedback("No injected wallet found. Install MetaMask or a Base-compatible wallet."); + return false; + } + try { + const accounts = (await window.ethereum.request({ + method: "eth_requestAccounts", + })) as Hex[]; + if (!accounts?.length) return false; + this.connectedAddress = getAddress(accounts[0]); + return true; + } catch (e) { + this.feedback(`Wallet connect failed: ${(e as Error).message}`); + return false; + } + } + + private async buy(packId: number, button: HTMLButtonElement): Promise { + const treasury = this.treasury; + if (!treasury || this.chainId === null) { + this.feedback("Purchasing isn't configured yet."); + return; + } + if (!(await this.ensureConnected())) return; + // A local const (not `this.connectedAddress` directly) so it + // narrows from `Hex | null` for the eth_sendTransaction call below — + // TS can't carry a field narrowing across the ensureConnected() call. + const from = this.connectedAddress; + if (!from) return; + + const original = button.textContent; + button.disabled = true; + try { + // Re-fetch the pack's current price at buy time rather than + // trusting a value cached in the DOM from page load. + button.textContent = "Preparing…"; + const data = await fetchJson(`${this.cfg.apiBase}/v1/tokens/packs`); + const pack = data.packs.find((p) => p.id === packId); + if (!pack) throw new Error("pack no longer available"); + + await this.ensureChain(this.chainId!); + + button.textContent = "Awaiting wallet…"; + const valueHex = ("0x" + BigInt(pack.price_wei).toString(16)) as Hex; + const txHash = (await window.ethereum!.request({ + method: "eth_sendTransaction", + params: [{ from, to: treasury, value: valueHex }], + })) as Hex; + this.feedback(`Transaction sent: ${txHash.slice(0, 10)}…`); + + button.textContent = "Confirming on-chain…"; + const publicClient = createPublicClient({ transport: http() }); + const receipt = await publicClient.waitForTransactionReceipt({ hash: txHash }); + if (receipt.status !== "success") { + this.feedback("Transaction reverted on-chain."); + return; + } + + button.textContent = "Crediting account…"; + await fetchJson(`${this.cfg.apiBase}/v1/tokens/purchase/confirm`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ pack_id: pack.id, tx_hash: txHash }), + }); + this.feedback(`Purchased ${fmtTokens(pack.tokens)} tokens.`); + await this.loadAccount(); + } catch (e) { + this.feedback(`Purchase failed: ${(e as Error).message}`); + } finally { + button.disabled = false; + button.textContent = original; + } + } + + private async ensureChain(chainId: number): Promise { + if (!window.ethereum) return; + const current = (await window.ethereum.request({ method: "eth_chainId" })) as Hex; + const hex = ("0x" + chainId.toString(16)) as Hex; + if (current.toLowerCase() === hex.toLowerCase()) return; + try { + await window.ethereum.request({ + method: "wallet_switchEthereumChain", + params: [{ chainId: hex }], + }); + } catch { + // Wallet may not have the chain added yet; surfaced by the + // subsequent send failing with a clearer wallet-side error. + } + } + + private attachEvents(): void { + this.cfg.rootEl.addEventListener("click", (ev) => { + const target = ev.target as HTMLElement; + const buyBtn = target.closest(".ga-buy-btn"); + if (buyBtn) { + const id = parseInt(buyBtn.dataset.packId || "", 10); + if (id) void this.buy(id, buyBtn); + return; + } + const moreBtn = target.closest("#ga-ledger-more"); + if (moreBtn) { + const before = parseInt(moreBtn.dataset.before || "", 10); + if (before) void this.loadLedger(before); + } + }); + } +} + +const GAWallet = { + async mount(cfg: WalletConfig) { + await new WalletPage().mount(cfg); + }, +}; + +window.GAWallet = GAWallet; +export default GAWallet; diff --git a/workers/api/package.json b/workers/api/package.json index 1cef2be..d4611af 100644 --- a/workers/api/package.json +++ b/workers/api/package.json @@ -24,7 +24,9 @@ "build:feed": "esbuild client/feed.ts --bundle --format=esm --target=es2020 --minify --sourcemap=linked --outfile=../../assets/js/ga-feed.js --define:process.env.NODE_ENV=\\\"production\\\" --tree-shaking=true", "build:token-detail": "esbuild client/token-detail.ts --bundle --format=esm --target=es2020 --minify --sourcemap=linked --outfile=../../assets/js/ga-token-detail.js --define:process.env.NODE_ENV=\\\"production\\\" --tree-shaking=true", "build:galleries": "esbuild client/galleries.ts --bundle --format=esm --target=es2020 --minify --sourcemap=linked --outfile=../../assets/js/ga-galleries.js --define:process.env.NODE_ENV=\\\"production\\\" --tree-shaking=true", - "build:all": "npm run build:client && npm run build:dashboard && npm run build:studio && npm run build:profile && npm run build:project-detail && npm run build:profile-editor && npm run build:mint && npm run build:briefs && npm run build:explore && npm run build:search && npm run build:feed && npm run build:token-detail && npm run build:galleries", + "build:wallet": "esbuild client/wallet.ts --bundle --format=esm --target=es2020 --minify --sourcemap=linked --outfile=../../assets/js/ga-wallet.js --define:process.env.NODE_ENV=\\\"production\\\" --tree-shaking=true", + "build:models": "esbuild client/models.ts --bundle --format=esm --target=es2020 --minify --sourcemap=linked --outfile=../../assets/js/ga-models.js --define:process.env.NODE_ENV=\\\"production\\\" --tree-shaking=true", + "build:all": "npm run build:client && npm run build:dashboard && npm run build:studio && npm run build:profile && npm run build:project-detail && npm run build:profile-editor && npm run build:mint && npm run build:briefs && npm run build:explore && npm run build:search && npm run build:feed && npm run build:token-detail && npm run build:galleries && npm run build:wallet && npm run build:models", "migrate:local": "wrangler d1 migrations apply DB --local", "migrate:prod": "wrangler d1 migrations apply DB --env production --remote" }, From 1cac6f65eadfb0e2af39f247f05408fd32f6fbf8 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 21 Aug 2026 17:17:28 +0000 Subject: [PATCH 2/4] Add Studio Copilot: AI code assist backend + editor panel MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Item 3 of the platform build backlog (design spec: Step 5 of the published design brief). Studio (the p5.js/three.js code editor) gets an AI assistant of its own — generate a sketch from a prompt, edit the current one by instruction, get a plain-language explanation, or have tunable parameters guessed from the code. - src/ai/copilot.ts: four thin wrappers around the Anthropic SDK (generate/edit/explain/params), kept deliberately separate from the render-model marketplace (src/ai/inference.ts) even though both call Claude — a model registry entry is a creator-published, token-metered product someone else renders; the copilot is a fixed platform feature tied to a project's own code, not something a creator publishes. - src/projects/ai.ts: four owner-only routes (/v1/projects/:id/ai/{generate,edit,explain,params}), each debiting the SAME render-token ledger the marketplace uses (one currency platform-wide) before the call and refunding in full on failure — same discipline as render_jobs, without a persisted job row, since these are ephemeral editor assists rather than published, re-runnable renders. - AI_MOCK (opt-in, same convention as RENDER_MOCK/TRAINING_MOCK; production must never set it) for canned, network-free responses. - client/studio.ts + studio/index.html: a collapsible Copilot panel (mode tabs, live token balance, cost-before-run) added to the existing editor/preview grid. Generate and edit return a full revised source, presented as an accept-or-reject suggestion rather than per-hunk diff hunks — stated in code comments as a deliberate v1 simplification (true reviewable diffing needs a diff-rendering library not yet in this project's dependencies), not a silently under-delivered feature. Accepting replaces the CodeMirror buffer and marks it dirty, so the existing Save/Cmd-S flow picks it up unchanged. Testing: typecheck clean; 33/33 unit tests; 7 new smoke checks (all four actions under AI_MOCK, empty-instruction rejection, ledger debit total, non-owner 403) — 143/143 total pass; wrangler deploy --dry-run clean on both environments; full Jekyll build succeeds with balanced markup on the modified studio page. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01QuSa99HABSrWRarT9BQ5Tz --- assets/js/ga-studio.js | 33 ++-- assets/js/ga-studio.js.map | 6 +- studio/index.html | 32 +++- workers/api/.dev.vars.example | 6 + workers/api/client/studio.ts | 185 +++++++++++++++++++++++ workers/api/scripts/smoke_api.mjs | 74 +++++++++ workers/api/src/ai/copilot.ts | 154 +++++++++++++++++++ workers/api/src/index.ts | 14 ++ workers/api/src/projects/ai.ts | 240 ++++++++++++++++++++++++++++++ workers/api/src/types.ts | 8 + 10 files changed, 734 insertions(+), 18 deletions(-) create mode 100644 workers/api/src/ai/copilot.ts create mode 100644 workers/api/src/projects/ai.ts diff --git a/assets/js/ga-studio.js b/assets/js/ga-studio.js index 4e21304..6adf142 100644 --- a/assets/js/ga-studio.js +++ b/assets/js/ga-studio.js @@ -1,25 +1,30 @@ -var Nd=Object.defineProperty;var Gd=(n,e,t)=>e in n?Nd(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var De=(n,e,t)=>Gd(n,typeof e!="symbol"?e+"":e,t);var Qr=new Set,Ud=10,Wa=!1,Xn=null;function za(n){Wa||(Wa=!0,Xn=n,window.addEventListener("error",e=>{let t=e.error&&e.error.message||e.message||"unknown_error",i=e.error&&e.error.stack||`${e.filename??""}:${e.lineno??0}:${e.colno??0}`;Ba(t,i)}),window.addEventListener("unhandledrejection",e=>{let t=e.reason,i=t instanceof Error?t.message:typeof t=="string"?t:"unhandled_rejection",s=t instanceof Error?t.stack??"":"";Ba(i,s)}))}function Fd(n){try{let e=new URL(n,location.origin);return`${e.origin}${e.pathname}`.slice(0,200)}catch{return n.split("?")[0].split("#")[0].slice(0,200)}}async function Ba(n,e){if(!Xn||Qr.size>=Ud)return;let t=`${n}::${e.slice(0,80)}`;if(!Qr.has(t)){Qr.add(t);try{await fetch(`${Xn.apiBase}/v1/internal/client-error`,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({message:String(n).slice(0,500),stack:String(e).slice(0,4e3),page:Xn.page,url:Fd(location.href),ts:Date.now()}),keepalive:!0})}catch{}}}var $r=[],Va=[];(()=>{let n="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(e=>e?parseInt(e,36):1);for(let e=0,t=0;e>1;if(n<$r[i])t=i;else if(n>=Va[i])e=i+1;else return!0;if(e==t)return!1}}function _a(n){return n>=127462&&n<=127487}var Ia=8205;function qa(n,e,t=!0,i=!0){return(t?ja:Kd)(n,e,i)}function ja(n,e,t){if(e==n.length)return e;e&&Na(n.charCodeAt(e))&&Ga(n.charCodeAt(e-1))&&e--;let i=vr(n,e);for(e+=Ya(i);e=0&&_a(vr(n,o));)r++,o-=2;if(r%2==0)break;e+=2}else break}return e}function Kd(n,e,t){for(;e>0;){let i=ja(n,e-2,t);if(i=56320&&n<57344}function Ga(n){return n>=55296&&n<56320}function Ya(n){return n<65536?1:2}var E=class n{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,i){[e,t]=ci(this,e,t);let s=[];return this.decompose(0,e,s,2),i.length&&i.decompose(0,i.length,s,3),this.decompose(t,this.length,s,1),li.from(s,this.length-(t-e)+i.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){[e,t]=ci(this,e,t);let i=[];return this.decompose(e,t,i,0),li.from(i,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),i=this.length-this.scanIdentical(e,-1),s=new Wt(this),r=new Wt(e);for(let o=t,l=t;;){if(s.next(o),r.next(o),o=0,s.lineBreak!=r.lineBreak||s.done!=r.done||s.value!=r.value)return!1;if(l+=s.value.length,s.done||l>=i)return!0}}iter(e=1){return new Wt(this,e)}iterRange(e,t=this.length){return new Bn(this,e,t)}iterLines(e,t){let i;if(e==null)i=this.iter();else{t==null&&(t=this.lines+1);let s=this.line(e).from;i=this.iterRange(s,Math.max(s,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new zn(i)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?n.empty:e.length<=32?new ve(e):li.from(ve.split(e,[]))}},ve=class n extends E{constructor(e,t=Jd(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,i,s){for(let r=0;;r++){let o=this.text[r],l=s+o.length;if((t?i:l)>=e)return new Tr(s,l,i,o);s=l+1,i++}}decompose(e,t,i,s){let r=e<=0&&t>=this.length?this:new n(Ua(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(s&1){let o=i.pop(),l=Wn(r.text,o.text.slice(),0,r.length);if(l.length<=32)i.push(new n(l,o.length+r.length));else{let a=l.length>>1;i.push(new n(l.slice(0,a)),new n(l.slice(a)))}}else i.push(r)}replace(e,t,i){if(!(i instanceof n))return super.replace(e,t,i);[e,t]=ci(this,e,t);let s=Wn(this.text,Wn(i.text,Ua(this.text,0,e)),t),r=this.length+i.length-(t-e);return s.length<=32?new n(s,r):li.from(n.split(s,[]),r)}sliceString(e,t=this.length,i=` +var Gd=Object.defineProperty;var Ud=(n,e,t)=>e in n?Gd(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var ce=(n,e,t)=>Ud(n,typeof e!="symbol"?e+"":e,t);var vr=new Set,Fd=10,Wa=!1,En=null;function za(n){Wa||(Wa=!0,En=n,window.addEventListener("error",e=>{let t=e.error&&e.error.message||e.message||"unknown_error",i=e.error&&e.error.stack||`${e.filename??""}:${e.lineno??0}:${e.colno??0}`;_a(t,i)}),window.addEventListener("unhandledrejection",e=>{let t=e.reason,i=t instanceof Error?t.message:typeof t=="string"?t:"unhandled_rejection",s=t instanceof Error?t.stack??"":"";_a(i,s)}))}function Hd(n){try{let e=new URL(n,location.origin);return`${e.origin}${e.pathname}`.slice(0,200)}catch{return n.split("?")[0].split("#")[0].slice(0,200)}}async function _a(n,e){if(!En||vr.size>=Fd)return;let t=`${n}::${e.slice(0,80)}`;if(!vr.has(t)){vr.add(t);try{await fetch(`${En.apiBase}/v1/internal/client-error`,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({message:String(n).slice(0,500),stack:String(e).slice(0,4e3),page:En.page,url:Hd(location.href),ts:Date.now()}),keepalive:!0})}catch{}}}var Pr=[],Va=[];(()=>{let n="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(e=>e?parseInt(e,36):1);for(let e=0,t=0;e>1;if(n=Va[i])e=i+1;else return!0;if(e==t)return!1}}function Ia(n){return n>=127462&&n<=127487}var Ya=8205;function ja(n,e,t=!0,i=!0){return(t?Na:Jd)(n,e,i)}function Na(n,e,t){if(e==n.length)return e;e&&Ga(n.charCodeAt(e))&&Ua(n.charCodeAt(e-1))&&e--;let i=$r(n,e);for(e+=qa(i);e=0&&Ia($r(n,o));)r++,o-=2;if(r%2==0)break;e+=2}else break}return e}function Jd(n,e,t){for(;e>0;){let i=Na(n,e-2,t);if(i=56320&&n<57344}function Ua(n){return n>=55296&&n<56320}function qa(n){return n<65536?1:2}var E=class n{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,i){[e,t]=ci(this,e,t);let s=[];return this.decompose(0,e,s,2),i.length&&i.decompose(0,i.length,s,3),this.decompose(t,this.length,s,1),li.from(s,this.length-(t-e)+i.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){[e,t]=ci(this,e,t);let i=[];return this.decompose(e,t,i,0),li.from(i,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),i=this.length-this.scanIdentical(e,-1),s=new Bt(this),r=new Bt(e);for(let o=t,l=t;;){if(s.next(o),r.next(o),o=0,s.lineBreak!=r.lineBreak||s.done!=r.done||s.value!=r.value)return!1;if(l+=s.value.length,s.done||l>=i)return!0}}iter(e=1){return new Bt(this,e)}iterRange(e,t=this.length){return new zn(this,e,t)}iterLines(e,t){let i;if(e==null)i=this.iter();else{t==null&&(t=this.lines+1);let s=this.line(e).from;i=this.iterRange(s,Math.max(s,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new In(i)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?n.empty:e.length<=32?new $e(e):li.from($e.split(e,[]))}},$e=class n extends E{constructor(e,t=ep(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,i,s){for(let r=0;;r++){let o=this.text[r],l=s+o.length;if((t?i:l)>=e)return new Cr(s,l,i,o);s=l+1,i++}}decompose(e,t,i,s){let r=e<=0&&t>=this.length?this:new n(Fa(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(s&1){let o=i.pop(),l=_n(r.text,o.text.slice(),0,r.length);if(l.length<=32)i.push(new n(l,o.length+r.length));else{let a=l.length>>1;i.push(new n(l.slice(0,a)),new n(l.slice(a)))}}else i.push(r)}replace(e,t,i){if(!(i instanceof n))return super.replace(e,t,i);[e,t]=ci(this,e,t);let s=_n(this.text,_n(i.text,Fa(this.text,0,e)),t),r=this.length+i.length-(t-e);return s.length<=32?new n(s,r):li.from(n.split(s,[]),r)}sliceString(e,t=this.length,i=` `){[e,t]=ci(this,e,t);let s="";for(let r=0,o=0;r<=t&&oe&&o&&(s+=i),er&&(s+=l.slice(Math.max(0,e-r),t-r)),r=a+1}return s}flatten(e){for(let t of this.text)e.push(t)}scanIdentical(){return 0}static split(e,t){let i=[],s=-1;for(let r of e)i.push(r),s+=r.length+1,i.length==32&&(t.push(new n(i,s)),i=[],s=-1);return s>-1&&t.push(new n(i,s)),t}},li=class n extends E{constructor(e,t){super(),this.children=e,this.length=t,this.lines=0;for(let i of e)this.lines+=i.lines}lineInner(e,t,i,s){for(let r=0;;r++){let o=this.children[r],l=s+o.length,a=i+o.lines-1;if((t?a:l)>=e)return o.lineInner(e,t,i,s);s=l+1,i=a+1}}decompose(e,t,i,s){for(let r=0,o=0;o<=t&&r=o){let h=s&((o<=e?1:0)|(a>=t?2:0));o>=e&&a<=t&&!h?i.push(l):l.decompose(e-o,t-o,i,h)}o=a+1}}replace(e,t,i){if([e,t]=ci(this,e,t),i.lines=r&&t<=l){let a=o.replace(e-r,t-r,i),h=this.lines-o.lines+a.lines;if(a.lines>4&&a.lines>h>>6){let c=this.children.slice();return c[s]=a,new n(c,this.length-(t-e)+i.length)}return super.replace(r,l,a)}r=l+1}return super.replace(e,t,i)}sliceString(e,t=this.length,i=` -`){[e,t]=ci(this,e,t);let s="";for(let r=0,o=0;re&&r&&(s+=i),eo&&(s+=l.sliceString(e-o,t-o,i)),o=a+1}return s}flatten(e){for(let t of this.children)t.flatten(e)}scanIdentical(e,t){if(!(e instanceof n))return 0;let i=0,[s,r,o,l]=t>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;s+=t,r+=t){if(s==o||r==l)return i;let a=this.children[s],h=e.children[r];if(a!=h)return i+a.scanIdentical(h,t);i+=a.length+1}}static from(e,t=e.reduce((i,s)=>i+s.length+1,-1)){let i=0;for(let d of e)i+=d.lines;if(i<32){let d=[];for(let p of e)p.flatten(d);return new ve(d,t)}let s=Math.max(32,i>>5),r=s<<1,o=s>>1,l=[],a=0,h=-1,c=[];function f(d){let p;if(d.lines>r&&d instanceof n)for(let O of d.children)f(O);else d.lines>o&&(a>o||!a)?(u(),l.push(d)):d instanceof ve&&a&&(p=c[c.length-1])instanceof ve&&d.lines+p.lines<=32?(a+=d.lines,h+=d.length+1,c[c.length-1]=new ve(p.text.concat(d.text),p.length+1+d.length)):(a+d.lines>s&&u(),a+=d.lines,h+=d.length+1,c.push(d))}function u(){a!=0&&(l.push(c.length==1?c[0]:n.from(c,h)),h=-1,a=c.length=0)}for(let d of e)f(d);return u(),l.length==1?l[0]:new n(l,t)}};E.empty=new ve([""],0);function Jd(n){let e=-1;for(let t of n)e+=t.length+1;return e}function Wn(n,e,t=0,i=1e9){for(let s=0,r=0,o=!0;r=t&&(a>i&&(l=l.slice(0,i-s)),s0?1:(e instanceof ve?e.text.length:e.children.length)<<1]}nextInner(e,t){for(this.done=this.lineBreak=!1;;){let i=this.nodes.length-1,s=this.nodes[i],r=this.offsets[i],o=r>>1,l=s instanceof ve?s.text.length:s.children.length;if(o==(t>0?l:0)){if(i==0)return this.done=!0,this.value="",this;t>0&&this.offsets[i-1]++,this.nodes.pop(),this.offsets.pop()}else if((r&1)==(t>0?0:1)){if(this.offsets[i]+=t,e==0)return this.lineBreak=!0,this.value=` -`,this;e--}else if(s instanceof ve){let a=s.text[o+(t<0?-1:0)];if(this.offsets[i]+=t,a.length>Math.max(0,e))return this.value=e==0?a:t>0?a.slice(e):a.slice(0,a.length-e),this;e-=a.length}else{let a=s.children[o+(t<0?-1:0)];e>a.length?(e-=a.length,this.offsets[i]+=t):(t<0&&this.offsets[i]--,this.nodes.push(a),this.offsets.push(t>0?1:(a instanceof ve?a.text.length:a.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}},Bn=class{constructor(e,t,i){this.value="",this.done=!1,this.cursor=new Wt(e,t>i?-1:1),this.pos=t>i?e.length:0,this.from=Math.min(t,i),this.to=Math.max(t,i)}nextInner(e,t){if(t<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,t<0?this.pos-this.to:this.from-this.pos);let i=t<0?this.pos-this.from:this.to-this.pos;e>i&&(e=i),i-=e;let{value:s}=this.cursor.next(e);return this.pos+=(s.length+e)*t,this.value=s.length<=i?s:t<0?s.slice(s.length-i):s.slice(0,i),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}},zn=class{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:t,lineBreak:i,value:s}=this.inner.next(e);return t&&this.afterBreak?(this.value="",this.afterBreak=!1):t?(this.done=!0,this.value=""):i?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=s,this.afterBreak=!1),this}get lineBreak(){return!1}};typeof Symbol<"u"&&(E.prototype[Symbol.iterator]=function(){return this.iter()},Wt.prototype[Symbol.iterator]=Bn.prototype[Symbol.iterator]=zn.prototype[Symbol.iterator]=function(){return this});var Tr=class{constructor(e,t,i,s){this.from=e,this.to=t,this.number=i,this.text=s}get length(){return this.to-this.from}};function ci(n,e,t){return e=Math.max(0,Math.min(n.length,e)),[e,Math.max(e,Math.min(n.length,t))]}function te(n,e,t=!0,i=!0){return qa(n,e,t,i)}function ep(n){return n>=56320&&n<57344}function tp(n){return n>=55296&&n<56320}function le(n,e){let t=n.charCodeAt(e);if(!tp(t)||e+1==n.length)return t;let i=n.charCodeAt(e+1);return ep(i)?(t-55296<<10)+(i-56320)+65536:t}function Yi(n){return n<=65535?String.fromCharCode(n):(n-=65536,String.fromCharCode((n>>10)+55296,(n&1023)+56320))}function Pe(n){return n<65536?1:2}var Cr=/\r\n?|\n/,se=(function(n){return n[n.Simple=0]="Simple",n[n.TrackDel=1]="TrackDel",n[n.TrackBefore=2]="TrackBefore",n[n.TrackAfter=3]="TrackAfter",n})(se||(se={})),ht=class n{constructor(e){this.sections=e}get length(){let e=0;for(let t=0;te)return r+(e-s);r+=l}else{if(i!=se.Simple&&h>=e&&(i==se.TrackDel&&se||i==se.TrackBefore&&se))return null;if(h>e||h==e&&t<0&&!l)return e==s||t<0?r:r+a;r+=a}s=h}if(e>s)throw new RangeError(`Position ${e} is out of range for changeset of length ${s}`);return r}touchesRange(e,t=e){for(let i=0,s=0;i=0&&s<=t&&l>=e)return st?"cover":!0;s=l}return!1}toString(){let e="";for(let t=0;t=0?":"+s:"")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some(t=>typeof t!="number"))throw new RangeError("Invalid JSON representation of ChangeDesc");return new n(e)}static create(e){return new n(e)}},Oe=class n extends ht{constructor(e,t){super(e),this.inserted=t}apply(e){if(this.length!=e.length)throw new RangeError("Applying change set to a document with the wrong length");return Zr(this,(t,i,s,r,o)=>e=e.replace(s,s+(i-t),o),!1),e}mapDesc(e,t=!1){return Ar(this,e,t,!0)}invert(e){let t=this.sections.slice(),i=[];for(let s=0,r=0;s=0){t[s]=l,t[s+1]=o;let a=s>>1;for(;i.length0&&bt(i,t,r.text),r.forward(c),l+=c}let h=e[o++];for(;l>1].toJSON()))}return e}static of(e,t,i){let s=[],r=[],o=0,l=null;function a(c=!1){if(!c&&!s.length)return;ou||f<0||u>t)throw new RangeError(`Invalid change range ${f} to ${u} (in doc of length ${t})`);let p=d?typeof d=="string"?E.of(d.split(i||Cr)):d:E.empty,O=p.length;if(f==u&&O==0)return;fo&&ce(s,f-o,-1),ce(s,u-f,O),bt(r,s,p),o=u}}return h(e),a(!l),l}static empty(e){return new n(e?[e,-1]:[],[])}static fromJSON(e){if(!Array.isArray(e))throw new RangeError("Invalid JSON representation of ChangeSet");let t=[],i=[];for(let s=0;sl&&typeof o!="string"))throw new RangeError("Invalid JSON representation of ChangeSet");if(r.length==1)t.push(r[0],0);else{for(;i.length=0&&t<=0&&t==n[s+1]?n[s]+=e:s>=0&&e==0&&n[s]==0?n[s+1]+=t:i?(n[s]+=e,n[s+1]+=t):n.push(e,t)}function bt(n,e,t){if(t.length==0)return;let i=e.length-2>>1;if(i>1])),!(t||o==n.sections.length||n.sections[o+1]<0);)l=n.sections[o++],a=n.sections[o++];e(s,h,r,c,f),s=h,r=c}}}function Ar(n,e,t,i=!1){let s=[],r=i?[]:null,o=new Bt(n),l=new Bt(e);for(let a=-1;;){if(o.done&&l.len||l.done&&o.len)throw new Error("Mismatched change set lengths");if(o.ins==-1&&l.ins==-1){let h=Math.min(o.len,l.len);ce(s,h,-1),o.forward(h),l.forward(h)}else if(l.ins>=0&&(o.ins<0||a==o.i||o.off==0&&(l.len=0&&a=0){let h=0,c=o.len;for(;c;)if(l.ins==-1){let f=Math.min(c,l.len);h+=f,c-=f,l.forward(f)}else if(l.ins==0&&l.lena||o.ins>=0&&o.len>a)&&(l||i.length>h),r.forward2(a),o.forward(a)}}}}var Bt=class{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i>1;return t>=e.length?E.empty:e[t]}textBit(e){let{inserted:t}=this.set,i=this.i-2>>1;return i>=t.length&&!e?E.empty:t[i].slice(this.off,e==null?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){this.ins==-1?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}},oi=class n{constructor(e,t,i){this.from=e,this.to=t,this.flags=i}get anchor(){return this.flags&32?this.to:this.from}get head(){return this.flags&32?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&8?-1:this.flags&16?1:0}get bidiLevel(){let e=this.flags&7;return e==7?null:e}get goalColumn(){let e=this.flags>>6;return e==16777215?void 0:e}map(e,t=-1){let i,s;return this.empty?i=s=e.mapPos(this.from,t):(i=e.mapPos(this.from,1),s=e.mapPos(this.to,-1)),i==this.from&&s==this.to?this:new n(i,s,this.flags)}extend(e,t=e,i=0){if(e<=this.anchor&&t>=this.anchor)return b.range(e,t,void 0,void 0,i);let s=Math.abs(e-this.anchor)>Math.abs(t-this.anchor)?e:t;return b.range(this.anchor,s,void 0,void 0,i)}eq(e,t=!1){return this.anchor==e.anchor&&this.head==e.head&&this.goalColumn==e.goalColumn&&(!t||!this.empty||this.assoc==e.assoc)}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||typeof e.anchor!="number"||typeof e.head!="number")throw new RangeError("Invalid JSON representation for SelectionRange");return b.range(e.anchor,e.head)}static create(e,t,i){return new n(e,t,i)}},b=class n{constructor(e,t){this.ranges=e,this.mainIndex=t}map(e,t=-1){return e.empty?this:n.create(this.ranges.map(i=>i.map(e,t)),this.mainIndex)}eq(e,t=!1){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let i=0;ie.toJSON()),main:this.mainIndex}}static fromJSON(e){if(!e||!Array.isArray(e.ranges)||typeof e.main!="number"||e.main>=e.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new n(e.ranges.map(t=>oi.fromJSON(t)),e.main)}static single(e,t=e){return new n([n.range(e,t)],0)}static create(e,t=0){if(e.length==0)throw new RangeError("A selection needs at least one range");for(let i=0,s=0;ss.from-r.from),t=e.indexOf(i);for(let s=1;sr.head?n.range(a,l):n.range(l,a))}}return new n(e,t)}};function th(n,e){for(let t of n.ranges)if(t.to>e)throw new RangeError("Selection points outside of document")}var _r=0,$=class n{constructor(e,t,i,s,r){this.combine=e,this.compareInput=t,this.compare=i,this.isStatic=s,this.id=_r++,this.default=e([]),this.extensions=typeof r=="function"?r(this):r}get reader(){return this}static define(e={}){return new n(e.combine||(t=>t),e.compareInput||((t,i)=>t===i),e.compare||(e.combine?(t,i)=>t===i:Ir),!!e.static,e.enables)}of(e){return new ai([],this,0,e)}compute(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new ai(e,this,1,t)}computeN(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new ai(e,this,2,t)}from(e,t){return t||(t=i=>i),this.compute([e],i=>t(i.field(e)))}};function Ir(n,e){return n==e||n.length==e.length&&n.every((t,i)=>t===e[i])}var ai=class{constructor(e,t,i,s){this.dependencies=e,this.facet=t,this.type=i,this.value=s,this.id=_r++}dynamicSlot(e){var t;let i=this.value,s=this.facet.compareInput,r=this.id,o=e[r]>>1,l=this.type==2,a=!1,h=!1,c=[];for(let f of this.dependencies)f=="doc"?a=!0:f=="selection"?h=!0:(((t=e[f.id])!==null&&t!==void 0?t:1)&1)==0&&c.push(e[f.id]);return{create(f){return f.values[o]=i(f),1},update(f,u){if(a&&u.docChanged||h&&(u.docChanged||u.selection)||Mr(f,c)){let d=i(f);if(l?!Fa(d,f.values[o],s):!s(d,f.values[o]))return f.values[o]=d,1}return 0},reconfigure:(f,u)=>{let d,p=u.config.address[r];if(p!=null){let O=Yn(u,p);if(this.dependencies.every(g=>g instanceof $?u.facet(g)===f.facet(g):g instanceof K?u.field(g,!1)==f.field(g,!1):!0)||(l?Fa(d=i(f),O,s):s(d=i(f),O)))return f.values[o]=O,0}else d=i(f);return f.values[o]=d,1}}}};function Fa(n,e,t){if(n.length!=e.length)return!1;for(let i=0;in[a.id]),s=t.map(a=>a.type),r=i.filter(a=>!(a&1)),o=n[e.id]>>1;function l(a){let h=[];for(let c=0;ci===s),e);return e.provide&&(t.provides=e.provide(t)),t}create(e){let t=e.facet(Ln).find(i=>i.field==this);return(t?.create||this.createF)(e)}slot(e){let t=e[this.id]>>1;return{create:i=>(i.values[t]=this.create(i),1),update:(i,s)=>{let r=i.values[t],o=this.updateF(r,s);return this.compareF(r,o)?0:(i.values[t]=o,1)},reconfigure:(i,s)=>{let r=i.facet(Ln),o=s.facet(Ln),l;return(l=r.find(a=>a.field==this))&&l!=o.find(a=>a.field==this)?(i.values[t]=l.create(i),1):s.config.address[this.id]!=null?(i.values[t]=s.field(this),0):(i.values[t]=this.create(i),1)}}}init(e){return[this,Ln.of({field:this,create:e})]}get extension(){return this}},Et={lowest:4,low:3,default:2,high:1,highest:0};function Wi(n){return e=>new _n(e,n)}var xe={highest:Wi(Et.highest),high:Wi(Et.high),default:Wi(Et.default),low:Wi(Et.low),lowest:Wi(Et.lowest)},_n=class{constructor(e,t){this.inner=e,this.prec=t}},fi=class n{of(e){return new zi(this,e)}reconfigure(e){return n.reconfigure.of({compartment:this,extension:e})}get(e){return e.config.compartments.get(this)}},zi=class{constructor(e,t){this.compartment=e,this.inner=t}},In=class n{constructor(e,t,i,s,r,o){for(this.base=e,this.compartments=t,this.dynamicSlots=i,this.address=s,this.staticValues=r,this.facets=o,this.statusTemplate=[];this.statusTemplate.length>1]}static resolve(e,t,i){let s=[],r=Object.create(null),o=new Map;for(let u of np(e,t,o))u instanceof K?s.push(u):(r[u.facet.id]||(r[u.facet.id]=[])).push(u);let l=Object.create(null),a=[],h=[];for(let u of s)l[u.id]=h.length<<1,h.push(d=>u.slot(d));let c=i?.config.facets;for(let u in r){let d=r[u],p=d[0].facet,O=c&&c[u]||[];if(d.every(g=>g.type==0))if(l[p.id]=a.length<<1|1,Ir(O,d))a.push(i.facet(p));else{let g=p.combine(d.map(y=>y.value));a.push(i&&p.compare(g,i.facet(p))?i.facet(p):g)}else{for(let g of d)g.type==0?(l[g.id]=a.length<<1|1,a.push(g.value)):(l[g.id]=h.length<<1,h.push(y=>g.dynamicSlot(y)));l[p.id]=h.length<<1,h.push(g=>ip(g,p,d))}}let f=h.map(u=>u(l));return new n(e,o,f,l,a,r)}};function np(n,e,t){let i=[[],[],[],[],[]],s=new Map;function r(o,l){let a=s.get(o);if(a!=null){if(a<=l)return;let h=i[a].indexOf(o);h>-1&&i[a].splice(h,1),o instanceof zi&&t.delete(o.compartment)}if(s.set(o,l),Array.isArray(o))for(let h of o)r(h,l);else if(o instanceof zi){if(t.has(o.compartment))throw new RangeError("Duplicate use of compartment in extensions");let h=e.get(o.compartment)||o.inner;t.set(o.compartment,h),r(h,l)}else if(o instanceof _n)r(o.inner,o.prec);else if(o instanceof K)i[l].push(o),o.provides&&r(o.provides,l);else if(o instanceof ai)i[l].push(o),o.facet.extensions&&r(o.facet.extensions,Et.default);else{let h=o.extension;if(!h)throw new Error(`Unrecognized extension value in extension set (${o}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);r(h,l)}}return r(n,Et.default),i.reduce((o,l)=>o.concat(l))}function Bi(n,e){if(e&1)return 2;let t=e>>1,i=n.status[t];if(i==4)throw new Error("Cyclic dependency between fields and/or facets");if(i&2)return i;n.status[t]=4;let s=n.computeSlot(n,n.config.dynamicSlots[t]);return n.status[t]=2|s}function Yn(n,e){return e&1?n.config.staticValues[e>>1]:n.values[e>>1]}var ih=$.define(),Rr=$.define({combine:n=>n.some(e=>e),static:!0}),nh=$.define({combine:n=>n.length?n[0]:void 0,static:!0}),sh=$.define(),rh=$.define(),oh=$.define(),lh=$.define({combine:n=>n.length?n[0]:!1}),be=class{constructor(e,t){this.type=e,this.value=t}static define(){return new Xr}},Xr=class{of(e){return new be(this,e)}},Lr=class{constructor(e){this.map=e}of(e){return new A(this,e)}},A=class n{constructor(e,t){this.type=e,this.value=t}map(e){let t=this.type.map(this.value,e);return t===void 0?void 0:t==this.value?this:new n(this.type,t)}is(e){return this.type==e}static define(e={}){return new Lr(e.map||(t=>t))}static mapEffects(e,t){if(!e.length)return e;let i=[];for(let s of e){let r=s.map(t);r&&i.push(r)}return i}};A.reconfigure=A.define();A.appendConfig=A.define();var ie=class n{constructor(e,t,i,s,r,o){this.startState=e,this.changes=t,this.selection=i,this.effects=s,this.annotations=r,this.scrollIntoView=o,this._doc=null,this._state=null,i&&th(i,t.newLength),r.some(l=>l.type==n.time)||(this.annotations=r.concat(n.time.of(Date.now())))}static create(e,t,i,s,r,o){return new n(e,t,i,s,r,o)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(e){for(let t of this.annotations)if(t.type==e)return t.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(e){let t=this.annotation(n.userEvent);return!!(t&&(t==e||t.length>e.length&&t.slice(0,e.length)==e&&t[e.length]=="."))}};ie.time=be.define();ie.userEvent=be.define();ie.addToHistory=be.define();ie.remote=be.define();function sp(n,e){let t=[];for(let i=0,s=0;;){let r,o;if(i=n[i]))r=n[i++],o=n[i++];else if(s=0;s--){let r=i[s](n);r instanceof ie?n=r:Array.isArray(r)&&r.length==1&&r[0]instanceof ie?n=r[0]:n=hh(e,hi(r),!1)}return n}function op(n){let e=n.startState,t=e.facet(oh),i=n;for(let s=t.length-1;s>=0;s--){let r=t[s](n);r&&Object.keys(r).length&&(i=ah(i,Er(e,r,n.changes.newLength),!0))}return i==n?n:ie.create(e,n.changes,n.selection,i.effects,i.annotations,i.scrollIntoView)}var lp=[];function hi(n){return n==null?lp:Array.isArray(n)?n:[n]}var V=(function(n){return n[n.Word=0]="Word",n[n.Space=1]="Space",n[n.Other=2]="Other",n})(V||(V={})),ap=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,Dr;try{Dr=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch{}function hp(n){if(Dr)return Dr.test(n);for(let e=0;e"\x80"&&(t.toUpperCase()!=t.toLowerCase()||ap.test(t)))return!0}return!1}function cp(n){return e=>{if(!/\S/.test(e))return V.Space;if(hp(e))return V.Word;for(let t=0;t-1)return V.Word;return V.Other}}var Y=class n{constructor(e,t,i,s,r,o){this.config=e,this.doc=t,this.selection=i,this.values=s,this.status=e.statusTemplate.slice(),this.computeSlot=r,o&&(o._state=this);for(let l=0;ls.set(h,a)),t=null),s.set(l.value.compartment,l.value.extension)):l.is(A.reconfigure)?(t=null,i=l.value):l.is(A.appendConfig)&&(t=null,i=hi(i).concat(l.value));let r;t?r=e.startState.values.slice():(t=In.resolve(i,s,this),r=new n(t,this.doc,this.selection,t.dynamicSlots.map(()=>null),(a,h)=>h.reconfigure(a,this),null).values);let o=e.startState.facet(Rr)?e.newSelection:e.newSelection.asSingle();new n(t,e.newDoc,o,r,(l,a)=>a.update(l,e),e)}replaceSelection(e){return typeof e=="string"&&(e=this.toText(e)),this.changeByRange(t=>({changes:{from:t.from,to:t.to,insert:e},range:b.cursor(t.from+e.length)}))}changeByRange(e){let t=this.selection,i=e(t.ranges[0]),s=this.changes(i.changes),r=[i.range],o=hi(i.effects);for(let l=1;lo.spec.fromJSON(l,a)))}}return n.create({doc:e.doc,selection:b.fromJSON(e.selection),extensions:t.extensions?s.concat([t.extensions]):s})}static create(e={}){let t=In.resolve(e.extensions||[],new Map),i=e.doc instanceof E?e.doc:E.of((e.doc||"").split(t.staticFacet(n.lineSeparator)||Cr)),s=e.selection?e.selection instanceof b?e.selection:b.single(e.selection.anchor,e.selection.head):b.single(0);return th(s,i.length),t.staticFacet(Rr)||(s=s.asSingle()),new n(t,i,s,t.dynamicSlots.map(()=>null),(r,o)=>o.create(r),null)}get tabSize(){return this.facet(n.tabSize)}get lineBreak(){return this.facet(n.lineSeparator)||` -`}get readOnly(){return this.facet(lh)}phrase(e,...t){for(let i of this.facet(n.phrases))if(Object.prototype.hasOwnProperty.call(i,e)){e=i[e];break}return t.length&&(e=e.replace(/\$(\$|\d*)/g,(i,s)=>{if(s=="$")return"$";let r=+(s||1);return!r||r>t.length?i:t[r-1]})),e}languageDataAt(e,t,i=-1){let s=[];for(let r of this.facet(ih))for(let o of r(this,t,i))Object.prototype.hasOwnProperty.call(o,e)&&s.push(o[e]);return s}charCategorizer(e){let t=this.languageDataAt("wordChars",e);return cp(t.length?t[0]:"")}wordAt(e){let{text:t,from:i,length:s}=this.doc.lineAt(e),r=this.charCategorizer(e),o=e-i,l=e-i;for(;o>0;){let a=te(t,o,!1);if(r(t.slice(a,o))!=V.Word)break;o=a}for(;ln.length?n[0]:4});Y.lineSeparator=nh;Y.readOnly=lh;Y.phrases=$.define({compare(n,e){let t=Object.keys(n),i=Object.keys(e);return t.length==i.length&&t.every(s=>n[s]==e[s])}});Y.languageData=ih;Y.changeFilter=sh;Y.transactionFilter=rh;Y.transactionExtender=oh;fi.reconfigure=A.define();function fe(n,e,t={}){let i={};for(let s of n)for(let r of Object.keys(s)){let o=s[r],l=i[r];if(l===void 0)i[r]=o;else if(!(l===o||o===void 0))if(Object.hasOwnProperty.call(t,r))i[r]=t[r](l,o);else throw new Error("Config merge conflict for field "+r)}for(let s in e)i[s]===void 0&&(i[s]=e[s]);return i}var We=class{eq(e){return this==e}range(e,t=e){return _i.create(e,t,this)}};We.prototype.startSide=We.prototype.endSide=0;We.prototype.point=!1;We.prototype.mapMode=se.TrackDel;function Yr(n,e){return n==e||n.constructor==e.constructor&&n.eq(e)}var _i=class n{constructor(e,t,i){this.from=e,this.to=t,this.value=i}static create(e,t,i){return new n(e,t,i)}};function Wr(n,e){return n.from-e.from||n.value.startSide-e.value.startSide}var Br=class n{constructor(e,t,i,s){this.from=e,this.to=t,this.value=i,this.maxPoint=s}get length(){return this.to[this.to.length-1]}findIndex(e,t,i,s=0){let r=i?this.to:this.from;for(let o=s,l=r.length;;){if(o==l)return o;let a=o+l>>1,h=r[a]-e||(i?this.value[a].endSide:this.value[a].startSide)-t;if(a==o)return h>=0?o:l;h>=0?l=a:o=a+1}}between(e,t,i,s){for(let r=this.findIndex(t,-1e9,!0),o=this.findIndex(i,1e9,!1,r);rd||u==d&&h.startSide>0&&h.endSide<=0)continue;(d-u||h.endSide-h.startSide)<0||(o<0&&(o=u),h.point&&(l=Math.max(l,d-u)),i.push(h),s.push(u-o),r.push(d-o))}return{mapped:i.length?new n(s,r,i,l):null,pos:o}}},W=class n{constructor(e,t,i,s){this.chunkPos=e,this.chunk=t,this.nextLayer=i,this.maxPoint=s}static create(e,t,i,s){return new n(e,t,i,s)}get length(){let e=this.chunk.length-1;return e<0?0:Math.max(this.chunkEnd(e),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let e=this.nextLayer.size;for(let t of this.chunk)e+=t.value.length;return e}chunkEnd(e){return this.chunkPos[e]+this.chunk[e].length}update(e){let{add:t=[],sort:i=!1,filterFrom:s=0,filterTo:r=this.length}=e,o=e.filter;if(t.length==0&&!o)return this;if(i&&(t=t.slice().sort(Wr)),this.isEmpty)return t.length?n.of(t):this;let l=new Vn(this,null,-1).goto(0),a=0,h=[],c=new $e;for(;l.value||a=0){let f=t[a++];c.addInner(f.from,f.to,f.value)||h.push(f)}else l.rangeIndex==1&&l.chunkIndexthis.chunkEnd(l.chunkIndex)||rl.to||r=r&&e<=r+o.length&&o.between(r,e-r,t-r,i)===!1)return}this.nextLayer.between(e,t,i)}}iter(e=0){return Ii.from([this]).goto(e)}get isEmpty(){return this.nextLayer==this}static iter(e,t=0){return Ii.from(e).goto(t)}static compare(e,t,i,s,r=-1){let o=e.filter(f=>f.maxPoint>0||!f.isEmpty&&f.maxPoint>=r),l=t.filter(f=>f.maxPoint>0||!f.isEmpty&&f.maxPoint>=r),a=Ha(o,l,i),h=new Dt(o,a,r),c=new Dt(l,a,r);i.iterGaps((f,u,d)=>Ka(h,f,c,u,d,s)),i.empty&&i.length==0&&Ka(h,0,c,0,0,s)}static eq(e,t,i=0,s){s==null&&(s=999999999);let r=e.filter(c=>!c.isEmpty&&t.indexOf(c)<0),o=t.filter(c=>!c.isEmpty&&e.indexOf(c)<0);if(r.length!=o.length)return!1;if(!r.length)return!0;let l=Ha(r,o),a=new Dt(r,l,0).goto(i),h=new Dt(o,l,0).goto(i);for(;;){if(a.to!=h.to||!zr(a.active,h.active)||a.point&&(!h.point||!Yr(a.point,h.point)))return!1;if(a.to>s)return!0;a.next(),h.next()}}static spans(e,t,i,s,r=-1){let o=new Dt(e,null,r).goto(t),l=t,a=o.openStart;for(;;){let h=Math.min(o.to,i);if(o.point){let c=o.activeForPoint(o.to),f=o.pointFroml&&(s.span(l,h,o.active,a),a=o.openEnd(h));if(o.to>i)return a+(o.point&&o.to>i?1:0);l=o.to,o.next()}}static of(e,t=!1){let i=new $e;for(let s of e instanceof _i?[e]:t?fp(e):e)i.add(s.from,s.to,s.value);return i.finish()}static join(e){if(!e.length)return n.empty;let t=e[e.length-1];for(let i=e.length-2;i>=0;i--)for(let s=e[i];s!=n.empty;s=s.nextLayer)t=new n(s.chunkPos,s.chunk,t,Math.max(s.maxPoint,t.maxPoint));return t}};W.empty=new W([],[],null,-1);function fp(n){if(n.length>1)for(let e=n[0],t=1;t0)return n.slice().sort(Wr);e=i}return n}W.empty.nextLayer=W.empty;var $e=class n{finishChunk(e){this.chunks.push(new Br(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,e&&(this.from=[],this.to=[],this.value=[])}constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}add(e,t,i){this.addInner(e,t,i)||(this.nextLayer||(this.nextLayer=new n)).add(e,t,i)}addInner(e,t,i){let s=e-this.lastTo||i.startSide-this.last.endSide;if(s<=0&&(e-this.lastFrom||i.startSide-this.last.startSide)<0)throw new Error("Ranges must be added sorted by `from` position and `startSide`");return s<0?!1:(this.from.length==250&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=e),this.from.push(e-this.chunkStart),this.to.push(t-this.chunkStart),this.last=i,this.lastFrom=e,this.lastTo=t,this.value.push(i),i.point&&(this.maxPoint=Math.max(this.maxPoint,t-e)),!0)}addChunk(e,t){if((e-this.lastTo||t.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,t.maxPoint),this.chunks.push(t),this.chunkPos.push(e);let i=t.value.length-1;return this.last=t.value[i],this.lastFrom=t.from[i]+e,this.lastTo=t.to[i]+e,!0}finish(){return this.finishInner(W.empty)}finishInner(e){if(this.from.length&&this.finishChunk(!1),this.chunks.length==0)return e;let t=W.create(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(e):e,this.setMaxPoint);return this.from=null,t}};function Ha(n,e,t){let i=new Map;for(let r of n)for(let o=0;o=this.minPoint)break}}setRangeIndex(e){if(e==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex=i&&s.push(new Vn(o,t,i,r));return s.length==1?s[0]:new n(s)}get startSide(){return this.value?this.value.startSide:0}goto(e,t=-1e9){for(let i of this.heap)i.goto(e,t);for(let i=this.heap.length>>1;i>=0;i--)Pr(this.heap,i);return this.next(),this}forward(e,t){for(let i of this.heap)i.forward(e,t);for(let i=this.heap.length>>1;i>=0;i--)Pr(this.heap,i);(this.to-e||this.value.endSide-t)<0&&this.next()}next(){if(this.heap.length==0)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let e=this.heap[0];this.from=e.from,this.to=e.to,this.value=e.value,this.rank=e.rank,e.value&&e.next(),Pr(this.heap,0)}}};function Pr(n,e){for(let t=n[e];;){let i=(e<<1)+1;if(i>=n.length)break;let s=n[i];if(i+1=0&&(s=n[i+1],i++),t.compare(s)<0)break;n[i]=t,n[e]=s,e=i}}var Dt=class{constructor(e,t,i){this.minPoint=i,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=Ii.from(e,t,i)}goto(e,t=-1e9){return this.cursor.goto(e,t),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=e,this.endSide=t,this.openStart=-1,this.next(),this}forward(e,t){for(;this.minActive>-1&&(this.activeTo[this.minActive]-e||this.active[this.minActive].endSide-t)<0;)this.removeActive(this.minActive);this.cursor.forward(e,t)}removeActive(e){En(this.active,e),En(this.activeTo,e),En(this.activeRank,e),this.minActive=Ja(this.active,this.activeTo)}addActive(e){let t=0,{value:i,to:s,rank:r}=this.cursor;for(;t0;)t++;Dn(this.active,t,i),Dn(this.activeTo,t,s),Dn(this.activeRank,t,r),e&&Dn(e,t,this.cursor.from),this.minActive=Ja(this.active,this.activeTo)}next(){let e=this.to,t=this.point;this.point=null;let i=this.openStart<0?[]:null;for(;;){let s=this.minActive;if(s>-1&&(this.activeTo[s]-this.cursor.from||this.active[s].endSide-this.cursor.startSide)<0){if(this.activeTo[s]>e){this.to=this.activeTo[s],this.endSide=this.active[s].endSide;break}this.removeActive(s),i&&En(i,s)}else if(this.cursor.value)if(this.cursor.from>e){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}else{let r=this.cursor.value;if(!r.point)this.addActive(i),this.cursor.next();else if(t&&this.cursor.to==this.to&&this.cursor.from=0&&i[s]=0&&!(this.activeRank[i]e||this.activeTo[i]==e&&this.active[i].endSide>=this.point.endSide)&&t.push(this.active[i]);return t.reverse()}openEnd(e){let t=0;for(let i=this.activeTo.length-1;i>=0&&this.activeTo[i]>e;i--)t++;return t}};function Ka(n,e,t,i,s,r){n.goto(e),t.goto(i);let o=i+s,l=i,a=i-e,h=!!r.boundChange;for(let c=!1;;){let f=n.to+a-t.to,u=f||n.endSide-t.endSide,d=u<0?n.to+a:t.to,p=Math.min(d,o);if(n.point||t.point?(n.point&&t.point&&Yr(n.point,t.point)&&zr(n.activeForPoint(n.to),t.activeForPoint(t.to))||r.comparePoint(l,p,n.point,t.point),c=!1):(c&&r.boundChange(l),p>l&&!zr(n.active,t.active)&&r.compareRange(l,p,n.active,t.active),h&&po)break;l=d,u<=0&&n.next(),u>=0&&t.next()}}function zr(n,e){if(n.length!=e.length)return!1;for(let t=0;t=e;i--)n[i+1]=n[i];n[e]=t}function Ja(n,e){let t=-1,i=1e9;for(let s=0;s=e)return s;if(s==n.length)break;r+=n.charCodeAt(s)==9?t-r%t:1,s=te(n,s)}return i===!0?-1:n.length}var ch=typeof Symbol>"u"?"__\u037C":Symbol.for("\u037C"),Vr=typeof Symbol>"u"?"__styleSet"+Math.floor(Math.random()*1e8):Symbol("styleSet"),fh=typeof globalThis<"u"?globalThis:typeof window<"u"?window:{},Be=class{constructor(e,t){this.rules=[];let{finish:i}=t||{};function s(o){return/^@/.test(o)?[o]:o.split(/,\s*/)}function r(o,l,a,h){let c=[],f=/^@(\w+)\b/.exec(o[0]),u=f&&f[1]=="keyframes";if(f&&l==null)return a.push(o[0]+";");for(let d in l){let p=l[d];if(/&/.test(d))r(d.split(/,\s*/).map(O=>o.map(g=>O.replace(/&/,g))).reduce((O,g)=>O.concat(g)),p,a);else if(p&&typeof p=="object"){if(!f)throw new RangeError("The value of a property ("+d+") should be a primitive value.");r(s(d),p,c,u)}else p!=null&&c.push(d.replace(/_.*/,"").replace(/[A-Z]/g,O=>"-"+O.toLowerCase())+": "+p+";")}(c.length||u)&&a.push((i&&!f&&!h?o.map(i):o).join(", ")+" {"+c.join(" ")+"}")}for(let o in e)r(s(o),e[o],this.rules)}getRules(){return this.rules.join(` -`)}static newName(){let e=fh[ch]||1;return fh[ch]=e+1,"\u037C"+e.toString(36)}static mount(e,t,i){let s=e[Vr],r=i&&i.nonce;s?r&&s.setNonce(r):s=new qr(e,r),s.mount(Array.isArray(t)?t:[t],e)}},uh=new Map,qr=class{constructor(e,t){let i=e.ownerDocument||e,s=i.defaultView;if(!e.head&&e.adoptedStyleSheets&&s.CSSStyleSheet){let r=uh.get(i);if(r)return e[Vr]=r;this.sheet=new s.CSSStyleSheet,uh.set(i,this)}else this.styleTag=i.createElement("style"),t&&this.styleTag.setAttribute("nonce",t);this.modules=[],e[Vr]=this}mount(e,t){let i=this.sheet,s=0,r=0;for(let o=0;o-1&&(this.modules.splice(a,1),r--,a=-1),a==-1){if(this.modules.splice(r++,0,l),i)for(let h=0;h",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"'},up=typeof navigator<"u"&&/Mac/.test(navigator.platform),dp=typeof navigator<"u"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent);for(ne=0;ne<10;ne++)ft[48+ne]=ft[96+ne]=String(ne);var ne;for(ne=1;ne<=24;ne++)ft[ne+111]="F"+ne;var ne;for(ne=65;ne<=90;ne++)ft[ne]=String.fromCharCode(ne+32),ui[ne]=String.fromCharCode(ne);var ne;for(jn in ft)ui.hasOwnProperty(jn)||(ui[jn]=ft[jn]);var jn;function dh(n){var e=up&&n.metaKey&&n.shiftKey&&!n.ctrlKey&&!n.altKey||dp&&n.shiftKey&&n.key&&n.key.length==1||n.key=="Unidentified",t=!e&&n.key||(n.shiftKey?ui:ft)[n.keyCode]||n.key||"Unidentified";return t=="Esc"&&(t="Escape"),t=="Del"&&(t="Delete"),t=="Left"&&(t="ArrowLeft"),t=="Up"&&(t="ArrowUp"),t=="Right"&&(t="ArrowRight"),t=="Down"&&(t="ArrowDown"),t}function B(){var n=arguments[0];typeof n=="string"&&(n=document.createElement(n));var e=1,t=arguments[1];if(t&&typeof t=="object"&&t.nodeType==null&&!Array.isArray(t)){for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)){var s=t[i];typeof s=="string"?n.setAttribute(i,s):s!=null&&(n[i]=s)}e++}for(;e2),T={mac:gh||/Mac/.test(me.platform),windows:/Win/.test(me.platform),linux:/Linux|X11/.test(me.platform),ie:vs,ie_version:Jh?to.documentMode||6:no?+no[1]:io?+io[1]:0,gecko:Oh,gecko_version:Oh?+(/Firefox\/(\d+)/.exec(me.userAgent)||[0,0])[1]:0,chrome:!!jr,chrome_version:jr?+jr[1]:0,ios:gh,android:/Android\b/.test(me.userAgent),webkit:mh,webkit_version:mh?+(/\bAppleWebKit\/(\d+)/.exec(me.userAgent)||[0,0])[1]:0,safari:so,safari_version:so?+(/\bVersion\/(\d+(\.\d+)?)/.exec(me.userAgent)||[0,0])[1]:0,tabSize:to.documentElement.style.tabSize!=null?"tab-size":"-moz-tab-size"};function Ho(n,e){for(let t in n)t=="class"&&e.class?e.class+=" "+n.class:t=="style"&&e.style?e.style+=";"+n.style:e[t]=n[t];return e}var ls=Object.create(null);function Ko(n,e,t){if(n==e)return!0;n||(n=ls),e||(e=ls);let i=Object.keys(n),s=Object.keys(e);if(i.length-(t&&i.indexOf(t)>-1?1:0)!=s.length-(t&&s.indexOf(t)>-1?1:0))return!1;for(let r of i)if(r!=t&&(s.indexOf(r)==-1||n[r]!==e[r]))return!1;return!0}function pp(n,e){for(let t=n.attributes.length-1;t>=0;t--){let i=n.attributes[t].name;e[i]==null&&n.removeAttribute(i)}for(let t in e){let i=e[t];t=="style"?n.style.cssText=i:n.getAttribute(t)!=i&&n.setAttribute(t,i)}}function yh(n,e,t){let i=!1;if(e)for(let s in e)t&&s in t||(i=!0,s=="style"?n.style.cssText="":n.removeAttribute(s));if(t)for(let s in t)e&&e[s]==t[s]||(i=!0,s=="style"?n.style.cssText=t[s]:n.setAttribute(s,t[s]));return i}function Op(n){let e=Object.create(null);for(let t=0;t0?3e8:-4e8:t>0?1e8:-1e8,new Yt(e,t,t,i,e.widget||null,!1)}static replace(e){let t=!!e.block,i,s;if(e.isBlockGap)i=-5e8,s=4e8;else{let{start:r,end:o}=ec(e,t);i=(r?t?-3e8:-1:5e8)-1,s=(o?t?2e8:1:-6e8)+1}return new Yt(e,i,s,t,e.widget||null,!0)}static line(e){return new sn(e)}static set(e,t=!1){return W.of(e,t)}hasHeight(){return this.widget?this.widget.estimatedHeight>-1:!1}};Z.none=W.empty;var nn=class n extends Z{constructor(e){let{start:t,end:i}=ec(e);super(t?-1:5e8,i?1:-6e8,null,e),this.tagName=e.tagName||"span",this.attrs=e.class&&e.attributes?Ho(e.attributes,{class:e.class}):e.class?{class:e.class}:e.attributes||ls}eq(e){return this==e||e instanceof n&&this.tagName==e.tagName&&Ko(this.attrs,e.attrs)}range(e,t=e){if(e>=t)throw new RangeError("Mark decorations may not be empty");return super.range(e,t)}};nn.prototype.point=!1;var sn=class n extends Z{constructor(e){super(-2e8,-2e8,null,e)}eq(e){return e instanceof n&&this.spec.class==e.spec.class&&Ko(this.spec.attributes,e.spec.attributes)}range(e,t=e){if(t!=e)throw new RangeError("Line decoration ranges must be zero-length");return super.range(e,t)}};sn.prototype.mapMode=se.TrackBefore;sn.prototype.point=!0;var Yt=class n extends Z{constructor(e,t,i,s,r,o){super(t,i,r,e),this.block=s,this.isReplace=o,this.mapMode=s?t<=0?se.TrackBefore:se.TrackAfter:se.TrackDel}get type(){return this.startSide!=this.endSide?he.WidgetRange:this.startSide<=0?he.WidgetBefore:he.WidgetAfter}get heightRelevant(){return this.block||!!this.widget&&(this.widget.estimatedHeight>=5||this.widget.lineBreaks>0)}eq(e){return e instanceof n&&mp(this.widget,e.widget)&&this.block==e.block&&this.startSide==e.startSide&&this.endSide==e.endSide}range(e,t=e){if(this.isReplace&&(e>t||e==t&&this.startSide>0&&this.endSide<=0))throw new RangeError("Invalid range for replacement decoration");if(!this.isReplace&&t!=e)throw new RangeError("Widget decorations can only have zero-length ranges");return super.range(e,t)}};Yt.prototype.point=!0;function ec(n,e=!1){let{inclusiveStart:t,inclusiveEnd:i}=n;return t==null&&(t=n.inclusive),i==null&&(i=n.inclusive),{start:t??e,end:i??e}}function mp(n,e){return n==e||!!(n&&e&&n.compare(e))}function yi(n,e,t,i=0){let s=t.length-1;s>=0&&t[s]+i>=n?t[s]=Math.max(t[s],e):t.push(n,e)}var as=class n extends We{constructor(e,t){super(),this.tagName=e,this.attributes=t}eq(e){return e==this||e instanceof n&&this.tagName==e.tagName&&Ko(this.attributes,e.attributes)}static create(e){return new n(e.tagName,e.attributes||ls)}static set(e,t=!1){return W.of(e,t)}};as.prototype.startSide=as.prototype.endSide=-1;function rn(n){let e;return n.nodeType==11?e=n.getSelection?n:n.ownerDocument:e=n,e.getSelection()}function ro(n,e){return e?n==e||n.contains(e.nodeType!=1?e.parentNode:e):!1}function Ni(n,e){if(!e.anchorNode)return!1;try{return ro(n,e.anchorNode)}catch{return!1}}function is(n){return n.nodeType==3?on(n,0,n.nodeValue.length).getClientRects():n.nodeType==1?n.getClientRects():[]}function Gi(n,e,t,i){return t?bh(n,e,t,i,-1)||bh(n,e,t,i,1):!1}function wt(n){for(var e=0;;e++)if(n=n.previousSibling,!n)return e}function hs(n){return n.nodeType==1&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\d|SECTION|PRE)$/.test(n.nodeName)}function bh(n,e,t,i,s){for(;;){if(n==t&&e==i)return!0;if(e==(s<0?0:pt(n))){if(n.nodeName=="DIV")return!1;let r=n.parentNode;if(!r||r.nodeType!=1)return!1;e=wt(n)+(s<0?0:1),n=r}else if(n.nodeType==1){if(n=n.childNodes[e+(s<0?-1:0)],n.nodeType==1&&n.contentEditable=="false")return!1;e=s<0?pt(n):0}else return!1}}function pt(n){return n.nodeType==3?n.nodeValue.length:n.childNodes.length}function cs(n,e){let t=e?n.left:n.right;return{left:t,right:t,top:n.top,bottom:n.bottom}}function gp(n){let e=n.visualViewport;return e?{left:0,right:e.width,top:0,bottom:e.height}:{left:0,right:n.innerWidth,top:0,bottom:n.innerHeight}}function tc(n,e){let t=e.width/n.offsetWidth,i=e.height/n.offsetHeight;return(t>.995&&t<1.005||!isFinite(t)||Math.abs(e.width-n.offsetWidth)<1)&&(t=1),(i>.995&&i<1.005||!isFinite(i)||Math.abs(e.height-n.offsetHeight)<1)&&(i=1),{scaleX:t,scaleY:i}}function yp(n,e,t,i,s,r,o,l){let a=n.ownerDocument,h=a.defaultView||window;for(let c=n,f=!1;c&&!f;)if(c.nodeType==1){let u,d=c==a.body,p=1,O=1;if(d)u=gp(h);else{if(/^(fixed|sticky)$/.test(getComputedStyle(c).position)&&(f=!0),c.scrollHeight<=c.clientHeight&&c.scrollWidth<=c.clientWidth){c=c.assignedSlot||c.parentNode;continue}let x=c.getBoundingClientRect();({scaleX:p,scaleY:O}=tc(c,x)),u={left:x.left,right:x.left+c.clientWidth*p,top:x.top,bottom:x.top+c.clientHeight*O}}let g=0,y=0;if(s=="nearest")e.top0&&e.bottom>u.bottom+y&&(y=e.bottom-u.bottom+o)):e.bottom>u.bottom-o&&(y=e.bottom-u.bottom+o,t<0&&e.top-y0&&e.right>u.right+g&&(g=e.right-u.right+r)):e.right>u.right-r&&(g=e.right-u.right+r,t<0&&e.leftu.bottom||e.leftu.right)&&(e={left:Math.max(e.left,u.left),right:Math.min(e.right,u.right),top:Math.max(e.top,u.top),bottom:Math.min(e.bottom,u.bottom)}),c=c.assignedSlot||c.parentNode}else if(c.nodeType==11)c=c.host;else break}function ic(n,e=!0){let t=n.ownerDocument,i=null,s=null;for(let r=n.parentNode;r&&!(r==t.body||(!e||i)&&s);)if(r.nodeType==1)!s&&r.scrollHeight>r.clientHeight&&(s=r),e&&!i&&r.scrollWidth>r.clientWidth&&(i=r),r=r.assignedSlot||r.parentNode;else if(r.nodeType==11)r=r.host;else break;return{x:i,y:s}}var oo=class{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset}setRange(e){let{anchorNode:t,focusNode:i}=e;this.set(t,Math.min(e.anchorOffset,t?pt(t):0),i,Math.min(e.focusOffset,i?pt(i):0))}set(e,t,i,s){this.anchorNode=e,this.anchorOffset=t,this.focusNode=i,this.focusOffset=s}},zt=null;T.safari&&T.safari_version>=26&&(zt=!1);function nc(n){if(n.setActive)return n.setActive();if(zt)return n.focus(zt);let e=[];for(let t=n;t&&(e.push(t,t.scrollTop,t.scrollLeft),t!=t.ownerDocument);t=t.parentNode);if(n.focus(zt==null?{get preventScroll(){return zt={preventScroll:!0},!0}}:void 0),!zt){zt=!1;for(let t=0;tMath.max(0,n.document.documentElement.scrollHeight-n.innerHeight-4):n.scrollTop>Math.max(1,n.scrollHeight-n.clientHeight-4)}function rc(n,e){for(let t=n,i=e;;){if(t.nodeType==3&&i>0)return{node:t,offset:i};if(t.nodeType==1&&i>0){if(t.contentEditable=="false")return null;t=t.childNodes[i-1],i=pt(t)}else if(t.parentNode&&!hs(t))i=wt(t),t=t.parentNode;else return null}}function oc(n,e){for(let t=n,i=e;;){if(t.nodeType==3&&i=t){if(l.level==i)return o;(r<0||(s!=0?s<0?l.fromt:e[r].level>l.level))&&(r=o)}}if(r<0)throw new RangeError("Index out of range");return r}};function hc(n,e){if(n.length!=e.length)return!1;for(let t=0;t=0;O-=3)if(nt[O+1]==-d){let g=nt[O+2],y=g&2?s:g&4?g&1?r:s:0;y&&(j[f]=j[nt[O]]=y),l=O;break}}else{if(nt.length==189)break;nt[l++]=f,nt[l++]=u,nt[l++]=a}else if((p=j[f])==2||p==1){let O=p==s;a=O?0:1;for(let g=l-3;g>=0;g-=3){let y=nt[g+2];if(y&2)break;if(O)nt[g+2]|=2;else{if(y&4)break;nt[g+2]|=4}}}}}function $p(n,e,t,i){for(let s=0,r=i;s<=t.length;s++){let o=s?t[s-1].to:n,l=sa;)p==g&&(p=t[--O].from,g=O?t[O-1].to:n),j[--p]=d;a=c}else r=h,a++}}}function ao(n,e,t,i,s,r,o){let l=i%2?2:1;if(i%2==s%2)for(let a=e,h=0;aa&&o.push(new Ie(a,O.from,d));let g=O.direction==Vt!=!(d%2);ho(n,g?i+1:i,s,O.inner,O.from,O.to,o),a=O.to}p=O.to}else{if(p==t||(c?j[p]!=l:j[p]==l))break;p++}u?ao(n,a,p,i+1,s,u,o):ae;){let c=!0,f=!1;if(!h||a>r[h-1].to){let O=j[a-1];O!=l&&(c=!1,f=O==16)}let u=!c&&l==1?[]:null,d=c?i:i+1,p=a;e:for(;;)if(h&&p==r[h-1].to){if(f)break e;let O=r[--h];if(!c)for(let g=O.from,y=h;;){if(g==e)break e;if(y&&r[y-1].to==g)g=r[--y].from;else{if(j[g-1]==l)break e;break}}if(u)u.push(O);else{O.toj.length;)j[j.length]=256;let i=[],s=e==Vt?0:1;return ho(n,s,s,t,0,n.length,i),i}function cc(n){return[new Ie(0,n,0)]}var fc="";function Tp(n,e,t,i,s){var r;let o=i.head-n.from,l=Ie.find(e,o,(r=i.bidiLevel)!==null&&r!==void 0?r:-1,i.assoc),a=e[l],h=a.side(s,t);if(o==h){let u=l+=s?1:-1;if(u<0||u>=e.length)return null;a=e[l=u],o=a.side(!s,t),h=a.side(s,t)}let c=te(n.text,o,a.forward(s,t));(ca.to)&&(c=h),fc=n.text.slice(Math.min(o,c),Math.max(o,c));let f=l==(s?e.length-1:0)?null:e[l+(s?1:-1)];return f&&c==h&&f.level+(s?0:1)n.some(e=>e)}),bc=$.define({combine:n=>n.some(e=>e)}),xc=$.define(),Ui=class n{constructor(e,t,i,s,r,o=!1){this.range=e,this.y=t,this.x=i,this.yMargin=s,this.xMargin=r,this.isSnapshot=o}map(e){return e.empty?this:new n(this.range.map(e),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}clip(e){return this.range.to<=e.doc.length?this:new n(b.cursor(e.doc.length),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}},Nn=A.define({map:(n,e)=>n.map(e)}),Sc=A.define();function ae(n,e,t){let i=n.facet(Oc);i.length?i[0](e):window.onerror&&window.onerror(String(e),t,void 0,void 0,e)||(t?console.error(t+":",e):console.error(e))}var ut=$.define({combine:n=>n.length?n[0]:!0}),Zp=0,pi=$.define({combine(n){return n.filter((e,t)=>{for(let i=0;i{let a=[];return o&&a.push($s.of(h=>{let c=h.plugin(l);return c?o(c):Z.none})),r&&a.push(r(l)),a})}static fromClass(e,t){return n.define((i,s)=>new e(i,s),t)}},Fi=class{constructor(e){this.spec=e,this.mustUpdate=null,this.value=null}get plugin(){return this.spec&&this.spec.plugin}update(e){if(this.value){if(this.mustUpdate){let t=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(t)}catch(i){if(ae(t.state,i,"CodeMirror plugin crashed"),this.value.destroy)try{this.value.destroy()}catch{}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.plugin.create(e,this.spec.arg)}catch(t){ae(e.state,t,"CodeMirror plugin crashed"),this.deactivate()}return this}destroy(e){var t;if(!((t=this.value)===null||t===void 0)&&t.destroy)try{this.value.destroy()}catch(i){ae(e.state,i,"CodeMirror plugin crashed")}}deactivate(){this.spec=this.value=null}},wc=$.define(),il=$.define(),$s=$.define(),kc=$.define(),nl=$.define(),ln=$.define(),Qc=$.define();function Sh(n,e){let t=n.state.facet(Qc);if(!t.length)return t;let i=t.map(r=>r instanceof Function?r(n):r),s=[];return W.spans(i,e.from,e.to,{point(){},span(r,o,l,a){let h=r-e.from,c=o-e.from,f=s;for(let u=l.length-1;u>=0;u--,a--){let d=l[u].spec.bidiIsolate,p;if(d==null&&(d=Cp(e.text,h,c)),a>0&&f.length&&(p=f[f.length-1]).to==h&&p.direction==d)p.to=c,f=p.inner;else{let O={from:h,to:c,direction:d,inner:[]};f.push(O),f=O.inner}}}}),s}var vc=$.define();function sl(n){let e=0,t=0,i=0,s=0;for(let r of n.state.facet(vc)){let o=r(n);o&&(o.left!=null&&(e=Math.max(e,o.left)),o.right!=null&&(t=Math.max(t,o.right)),o.top!=null&&(i=Math.max(i,o.top)),o.bottom!=null&&(s=Math.max(s,o.bottom)))}return{left:e,right:t,top:i,bottom:s}}var Vi=$.define(),Ne=class n{constructor(e,t,i,s){this.fromA=e,this.toA=t,this.fromB=i,this.toB=s}join(e){return new n(Math.min(this.fromA,e.fromA),Math.max(this.toA,e.toA),Math.min(this.fromB,e.fromB),Math.max(this.toB,e.toB))}addToSet(e){let t=e.length,i=this;for(;t>0;t--){let s=e[t-1];if(!(s.fromA>i.toA)){if(s.toAs.push(new Ne(r,o,l,a))),this.changedRanges=s}static create(e,t,i){return new n(e,t,i)}get viewportChanged(){return(this.flags&4)>0}get viewportMoved(){return(this.flags&8)>0}get heightChanged(){return(this.flags&2)>0}get geometryChanged(){return this.docChanged||(this.flags&18)>0}get focusChanged(){return(this.flags&1)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some(e=>e.selection)}get empty(){return this.flags==0&&this.transactions.length==0}},Ap=[],F=class{constructor(e,t,i=0){this.dom=e,this.length=t,this.flags=i,this.parent=null,e.cmTile=this}get breakAfter(){return this.flags&1}get children(){return Ap}isWidget(){return!1}get isHidden(){return!1}isComposite(){return!1}isLine(){return!1}isText(){return!1}isBlock(){return!1}get domAttrs(){return null}sync(e){if(this.flags|=2,this.flags&4){this.flags&=-5;let t=this.domAttrs;t&&pp(this.dom,t)}}toString(){return this.constructor.name+(this.children.length?`(${this.children})`:"")+(this.breakAfter?"#":"")}destroy(){this.parent=null}setDOM(e){this.dom=e,e.cmTile=this}get posAtStart(){return this.parent?this.parent.posBefore(this):0}get posAtEnd(){return this.posAtStart+this.length}posBefore(e,t=this.posAtStart){let i=t;for(let s of this.children){if(s==e)return i;i+=s.length+s.breakAfter}throw new RangeError("Invalid child in posBefore")}posAfter(e){return this.posBefore(e)+e.length}covers(e){return!0}coordsIn(e,t){return null}domPosFor(e,t){let i=wt(this.dom),s=this.length?e>0:t>0;return new st(this.parent.dom,i+(s?1:0),e==0||e==this.length)}markDirty(e){this.flags&=-3,e&&(this.flags|=4),this.parent&&this.parent.flags&2&&this.parent.markDirty(!1)}get overrideDOMText(){return null}get root(){for(let e=this;e;e=e.parent)if(e instanceof Si)return e;return null}static get(e){return e.cmTile}},xi=class extends F{constructor(e){super(e,0),this._children=[]}isComposite(){return!0}get children(){return this._children}get lastChild(){return this.children.length?this.children[this.children.length-1]:null}append(e){this.children.push(e),e.parent=this}sync(e){if(this.flags&2)return;super.sync(e);let t=this.dom,i=null,s,r=e?.node==t?e:null,o=0;for(let l of this.children){if(l.sync(e),o+=l.length+l.breakAfter,s=i?i.nextSibling:t.firstChild,r&&s!=l.dom&&(r.written=!0),l.dom.parentNode==t)for(;s&&s!=l.dom;)s=wh(s);else t.insertBefore(l.dom,s);i=l.dom}for(s=i?i.nextSibling:t.firstChild,r&&s&&(r.written=!0);s;)s=wh(s);this.length=o}};function wh(n){let e=n.nextSibling;return n.parentNode.removeChild(n),e}var Si=class extends xi{constructor(e,t){super(t),this.view=e}owns(e){for(;e;e=e.parent)if(e==this)return!0;return!1}isBlock(){return!0}nearest(e){for(;;){if(!e)return null;let t=F.get(e);if(t&&this.owns(t))return t;e=e.parentNode}}blockTiles(e){for(let t=[],i=this,s=0,r=0;;)if(s==i.children.length){if(!t.length)return;i=i.parent,i.breakAfter&&r++,s=t.pop()}else{let o=i.children[s++];if(o instanceof dt)t.push(s),i=o,s=0;else{let l=r+o.length,a=e(o,r);if(a!==void 0)return a;r=l+o.breakAfter}}}resolveBlock(e,t){let i,s=-1,r,o=-1;if(this.blockTiles((l,a)=>{let h=a+l.length;if(e>=a&&e<=h){if(l.isWidget()&&t>=-1&&t<=1){if(l.flags&32)return!0;l.flags&16&&(i=void 0)}(ae||e==a&&(t>1?l.length:l.covers(-1)))&&(!r||!l.isWidget()&&r.isWidget())&&(r=l,o=e-a)}}),!i&&!r)throw new Error("No tile at position "+e);return i&&t<0||!r?{tile:i,offset:s}:{tile:r,offset:o}}},dt=class n extends xi{constructor(e,t){super(e),this.wrapper=t}isBlock(){return!0}covers(e){return this.children.length?e<0?this.children[0].covers(-1):this.lastChild.covers(1):!1}get domAttrs(){return this.wrapper.attributes}static of(e,t){let i=new n(t||document.createElement(e.tagName),e);return t||(i.flags|=4),i}},wi=class n extends xi{constructor(e,t){super(e),this.attrs=t}isLine(){return!0}static start(e,t,i){let s=new n(t||document.createElement("div"),e);return(!t||!i)&&(s.flags|=4),s}get domAttrs(){return this.attrs}resolveInline(e,t,i){let s=null,r=-1,o=null,l=-1;function a(c,f){for(let u=0,d=0;u=f&&(p.isComposite()?a(p,f-d):(!o||o.isHidden&&(t>0||i&&Rp(o,p)))&&(O>f||p.flags&32)?(o=p,l=f-d):(di&&(e=i);let s=e,r=e,o=0;e==0&&t<0||e==i&&t>=0?T.chrome||T.gecko||(e?(s--,o=1):r=0)?0:l.length-1];return T.safari&&!o&&a.width==0&&(a=Array.prototype.find.call(l,h=>h.width)||a),o?cs(a,o<0):a||null}static of(e,t){let i=new n(t||document.createTextNode(e),e);return t||(i.flags|=2),i}},qt=class n extends F{constructor(e,t,i,s){super(e,t,s),this.widget=i}isWidget(){return!0}get isHidden(){return this.widget.isHidden}covers(e){return this.flags&48?!1:(this.flags&(e<0?64:128))>0}coordsIn(e,t){return this.coordsInWidget(e,t,!1)}coordsInWidget(e,t,i){let s=this.widget.coordsAt(this.dom,e,t);if(s)return s;if(i)return cs(this.dom.getBoundingClientRect(),this.length?e==0:t<=0);{let r=this.dom.getClientRects(),o=null;if(!r.length)return null;let l=this.flags&16?!0:this.flags&32?!1:e>0;for(let a=l?r.length-1:0;o=r[a],!(e>0?a==0:a==r.length-1||o.top0;)if(s.isComposite())if(o){if(!e)break;i&&i.break(),e--,o=!1}else if(r==s.children.length){if(!e&&!l.length)break;i&&i.leave(s),o=!!s.breakAfter,{tile:s,index:r}=l.pop(),r++}else{let a=s.children[r],h=a.breakAfter;(t>0?a.length<=e:a.length=0;l--){let a=t.marks[l],h=s.lastChild;if(h instanceof Se&&h.mark.eq(a.mark))h.dom!=a.dom&&h.setDOM(Nr(a.dom)),s=h;else{if(this.cache.reused.get(a)){let f=F.get(a.dom);f&&f.setDOM(Nr(a.dom))}let c=Se.of(a.mark,a.dom);s.append(c),s=c}this.cache.reused.set(a,2)}let r=F.get(e.text);r&&this.cache.reused.set(r,2);let o=new _t(e.text,e.text.nodeValue);o.flags|=8,s.append(o)}addInlineWidget(e,t,i){let s=this.afterWidget&&e.flags&48&&(this.afterWidget.flags&48)==(e.flags&48);s||this.flushBuffer();let r=this.ensureMarks(t,i);!s&&!(e.flags&16)&&r.append(this.getBuffer(1)),r.append(e),this.pos+=e.length,this.afterWidget=e}addMark(e,t,i){this.flushBuffer(),this.ensureMarks(t,i).append(e),this.pos+=e.length,this.afterWidget=null}addBlockWidget(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}continueWidget(e){let t=this.afterWidget||this.lastBlock;t.length+=e,this.pos+=e}addLineStart(e,t){var i;e||(e=$c);let s=wi.start(e,t||((i=this.cache.find(wi))===null||i===void 0?void 0:i.dom),!!t);this.getBlockPos().append(this.lastBlock=this.curLine=s)}addLine(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}addBreak(){this.lastBlock.flags|=1,this.endLine(),this.pos++}addLineStartIfNotCovered(e){this.blockPosCovered()||this.addLineStart(e)}ensureLine(e){this.curLine||this.addLineStart(e)}ensureMarks(e,t){var i;let s=this.curLine;for(let r=e.length-1;r>=0;r--){let o=e[r],l;if(t>0&&(l=s.lastChild)&&l instanceof Se&&l.mark.eq(o))s=l,t--;else{let a=Se.of(o,(i=this.cache.find(Se,h=>h.mark.eq(o)))===null||i===void 0?void 0:i.dom);s.append(a),s=a,t=0}}return s}endLine(){if(this.curLine){this.flushBuffer();let e=this.curLine.lastChild;(!e||!kh(this.curLine,!1)||e.dom.nodeName!="BR"&&e.isWidget()&&!(T.ios&&kh(this.curLine,!0)))&&this.curLine.append(this.cache.findWidget(Gr,0,32)||new qt(Gr.toDOM(),0,Gr,32)),this.curLine=this.afterWidget=null}}updateBlockWrappers(){this.wrapperPos>this.pos+1e4&&(this.blockWrappers.goto(this.pos),this.wrappers.length=0);for(let e=this.wrappers.length-1;e>=0;e--)this.wrappers[e].to=this.pos){let t=new uo(e.from,e.to,e.value,e.rank),i=this.wrappers.length;for(;i>0&&(this.wrappers[i-1].rank-t.rank||this.wrappers[i-1].to-t.to)<0;)i--;this.wrappers.splice(i,0,t)}this.wrapperPos=this.pos}getBlockPos(){var e;this.updateBlockWrappers();let t=this.root;for(let i of this.wrappers){let s=t.lastChild;if(i.fromo.wrapper.eq(i.wrapper)))===null||e===void 0?void 0:e.dom);t.append(r),t=r}}return t}blockPosCovered(){let e=this.lastBlock;return e!=null&&!e.breakAfter&&(!e.isWidget()||(e.flags&160)>0)}getBuffer(e){let t=2|(e<0?16:32),i=this.cache.find(ki,void 0,1);return i&&(i.flags=t),i||new ki(t)}flushBuffer(){this.afterWidget&&!(this.afterWidget.flags&32)&&(this.afterWidget.parent.append(this.getBuffer(-1)),this.afterWidget=null)}},Oo=class{constructor(e){this.skipCount=0,this.text="",this.textOff=0,this.cursor=e.iter()}skip(e){this.textOff+e<=this.text.length?this.textOff+=e:(this.skipCount+=e-(this.text.length-this.textOff),this.text="",this.textOff=0)}next(e){if(this.textOff==this.text.length){let{value:s,lineBreak:r,done:o}=this.cursor.next(this.skipCount);if(this.skipCount=0,o)throw new Error("Ran out of text content when drawing inline views");this.text=s;let l=this.textOff=Math.min(e,s.length);return r?null:s.slice(0,l)}let t=Math.min(this.text.length,this.textOff+e),i=this.text.slice(this.textOff,t);return this.textOff=t,i}},us=[qt,wi,_t,Se,ki,dt,Si];for(let n=0;n[]),this.index=us.map(()=>0),this.reused=new Map}add(e){let t=e.constructor.bucket,i=this.buckets[t];i.length<6?i.push(e):i[this.index[t]=(this.index[t]+1)%6]=e}find(e,t,i=2){let s=e.bucket,r=this.buckets[s],o=this.index[s];for(let l=r.length-1;l>=0;l--){let a=(l+o)%r.length,h=r[a];if((!t||t(h))&&!this.reused.has(h))return r.splice(a,1),a{if(this.cache.add(o),o.isComposite())return!1},enter:o=>this.cache.add(o),leave:()=>{},break:()=>{}}}run(e,t){let i=t&&this.getCompositionContext(t.text);for(let s=0,r=0,o=0;;){let l=os){let h=a-s;this.preserve(h,!o,!l),s=a,r+=h}if(!l)break;t&&l.fromA<=t.range.fromA&&l.toA>=t.range.toA?(this.forward(l.fromA,t.range.fromA,t.range.fromA{if(o.isWidget())if(this.openWidget)this.builder.continueWidget(a-l);else{let h=a>0||l{o.isLine()?this.builder.addLineStart(o.attrs,this.cache.maybeReuse(o)):(this.cache.add(o),o instanceof Se&&s.unshift(o.mark)),this.openWidget=!1},leave:o=>{o.isLine()?s.length&&(s.length=r=0):o instanceof Se&&(s.shift(),r=Math.min(r,s.length))},break:()=>{this.builder.addBreak(),this.openWidget=!1}}),this.text.skip(e)}emit(e,t){let i=null,s=this.builder,r=0,o=W.spans(this.decorations,e,t,{point:(l,a,h,c,f,u)=>{if(h instanceof Yt){if(this.disallowBlockEffectsFor[u]){if(h.block)throw new RangeError("Block decorations may not be specified via plugins");if(a>this.view.state.doc.lineAt(l).to)throw new RangeError("Decorations that replace line breaks may not be specified via plugins")}if(r=c.length,f>c.length)s.continueWidget(a-l);else{let d=h.widget||(h.block?kt.block:kt.inline),p=Xp(h),O=this.cache.findWidget(d,a-l,p)||qt.of(d,this.view,a-l,p);h.block?(h.startSide>0&&s.addLineStartIfNotCovered(i),s.addBlockWidget(O)):(s.ensureLine(i),s.addInlineWidget(O,c,f))}i=null}else i=Lp(i,h);a>l&&this.text.skip(a-l)},span:(l,a,h,c)=>{for(let f=l;fr,this.openMarks=o}forward(e,t,i=1){t-e<=10?this.old.advance(t-e,i,this.reuseWalker):(this.old.advance(5,-1,this.reuseWalker),this.old.advance(t-e-10,-1),this.old.advance(5,i,this.reuseWalker))}getCompositionContext(e){let t=[],i=null;for(let s=e.parentNode;;s=s.parentNode){let r=F.get(s);if(s==this.view.contentDOM)break;r instanceof Se?t.push(r):r?.isLine()?i=r:r instanceof dt||(s.nodeName=="DIV"&&!i&&s!=this.view.contentDOM?i=new wi(s,$c):i||t.push(Se.of(new nn({tagName:s.nodeName.toLowerCase(),attributes:Op(s)}),s)))}return{line:i,marks:t}}};function kh(n,e){let t=i=>{for(let s of i.children)if((e?s.isText():s.length)||t(s))return!0;return!1};return t(n)}function Xp(n){let e=n.isReplace?(n.startSide<0?64:0)|(n.endSide>0?128:0):n.startSide>0?32:16;return n.block&&(e|=256),e}var $c={class:"cm-line"};function Lp(n,e){let t=e.spec.attributes,i=e.spec.class;return!t&&!i||(n||(n={class:"cm-line"}),t&&Ho(t,n),i&&(n.class+=" "+i)),n}function Ep(n){let e=[];for(let t=n.parents.length;t>1;t--){let i=t==n.parents.length?n.tile:n.parents[t].tile;i instanceof Se&&e.push(i.mark)}return e}function Nr(n){let e=F.get(n);return e&&e.setDOM(n.cloneNode()),n}var kt=class extends ge{constructor(e){super(),this.tag=e}eq(e){return e.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(e){return e.nodeName.toLowerCase()==this.tag}get isHidden(){return!0}};kt.inline=new kt("span");kt.block=new kt("div");var Gr=new class extends ge{toDOM(){return document.createElement("br")}get isHidden(){return!0}get editable(){return!0}},ds=class{constructor(e){this.view=e,this.decorations=[],this.blockWrappers=[],this.dynamicDecorationMap=[!1],this.domChanged=null,this.hasComposition=null,this.editContextFormatting=Z.none,this.lastCompositionAfterCursor=!1,this.minWidth=0,this.minWidthFrom=0,this.minWidthTo=0,this.impreciseAnchor=null,this.impreciseHead=null,this.forceSelection=!1,this.lastUpdate=Date.now(),this.updateDeco(),this.tile=new Si(e,e.contentDOM),this.updateInner([new Ne(0,0,0,e.state.doc.length)],null)}update(e){var t;let i=e.changedRanges;this.minWidth>0&&i.length&&(i.every(({fromA:c,toA:f})=>fthis.minWidthTo)?(this.minWidthFrom=e.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=e.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0),this.updateEditContextFormatting(e);let s=-1;this.view.inputState.composing>=0&&!this.view.observer.editContext&&(!((t=this.domChanged)===null||t===void 0)&&t.newSel?s=this.domChanged.newSel.head:!Vp(e.changes,this.hasComposition)&&!e.selectionSet&&(s=e.state.selection.main.head));let r=s>-1?Wp(this.view,e.changes,s):null;if(this.domChanged=null,this.hasComposition){let{from:c,to:f}=this.hasComposition;i=new Ne(c,f,e.changes.mapPos(c,-1),e.changes.mapPos(f,1)).addToSet(i.slice())}this.hasComposition=r?{from:r.range.fromB,to:r.range.toB}:null,(T.ie||T.chrome)&&!r&&e&&e.state.doc.lines!=e.startState.doc.lines&&(this.forceSelection=!0);let o=this.decorations,l=this.blockWrappers;this.updateDeco();let a=_p(o,this.decorations,e.changes);a.length&&(i=Ne.extendWithRanges(i,a));let h=Ip(l,this.blockWrappers,e.changes);return h.length&&(i=Ne.extendWithRanges(i,h)),r&&!i.some(c=>c.fromA<=r.range.fromA&&c.toA>=r.range.toA)&&(i=r.range.addToSet(i.slice())),this.tile.flags&2&&i.length==0?!1:(this.updateInner(i,r),e.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(e,t){this.view.viewState.mustMeasureContent=!0;let{observer:i}=this.view;i.ignore(()=>{if(t||e.length){let o=this.tile,l=new go(this.view,o,this.blockWrappers,this.decorations,this.dynamicDecorationMap);t&&F.get(t.text)&&l.cache.reused.set(F.get(t.text),2),this.tile=l.run(e,t),yo(o,l.cache.reused)}this.tile.dom.style.height=this.view.viewState.contentHeight/this.view.scaleY+"px",this.tile.dom.style.flexBasis=this.minWidth?this.minWidth+"px":"";let r=T.chrome||T.ios?{node:i.selectionRange.focusNode,written:!1}:void 0;this.tile.sync(r),r&&(r.written||i.selectionRange.focusNode!=r.node||!this.tile.dom.contains(r.node))&&(this.forceSelection=!0),this.tile.dom.style.height=""});let s=[];if(this.view.viewport.from||this.view.viewport.to-1)&&Ni(i,this.view.observer.selectionRange)&&!(s&&i.contains(s));if(!(r||t||o))return;let l=this.forceSelection;this.forceSelection=!1;let a=this.view.state.selection.main,h,c;if(a.empty?c=h=this.inlineDOMNearPos(a.anchor,a.assoc||1):(c=this.inlineDOMNearPos(a.head,a.head==a.from?1:-1),h=this.inlineDOMNearPos(a.anchor,a.anchor==a.from?1:-1)),T.gecko&&a.empty&&!this.hasComposition&&Dp(h)){let u=document.createTextNode("");this.view.observer.ignore(()=>h.node.insertBefore(u,h.node.childNodes[h.offset]||null)),h=c=new st(u,0),l=!0}let f=this.view.observer.selectionRange;(l||!f.focusNode||(!Gi(h.node,h.offset,f.anchorNode,f.anchorOffset)||!Gi(c.node,c.offset,f.focusNode,f.focusOffset))&&!this.suppressWidgetCursorChange(f,a))&&(this.view.observer.ignore(()=>{T.android&&T.chrome&&i.contains(f.focusNode)&&Yp(f.focusNode,i)&&(i.blur(),i.focus({preventScroll:!0}));let u=rn(this.view.root);if(u)if(a.empty){if(T.gecko){let d=Bp(h.node,h.offset);if(d&&d!=3){let p=(d==1?rc:oc)(h.node,h.offset);p&&(h=new st(p.node,p.offset))}}u.collapse(h.node,h.offset),a.bidiLevel!=null&&u.caretBidiLevel!==void 0&&(u.caretBidiLevel=a.bidiLevel)}else if(u.extend){u.collapse(h.node,h.offset);try{u.extend(c.node,c.offset)}catch{}}else{let d=document.createRange();a.anchor>a.head&&([h,c]=[c,h]),d.setEnd(c.node,c.offset),d.setStart(h.node,h.offset),u.removeAllRanges(),u.addRange(d)}o&&this.view.root.activeElement==i&&(i.blur(),s&&s.focus())}),this.view.observer.setSelectionRange(h,c)),this.impreciseAnchor=h.precise?null:new st(f.anchorNode,f.anchorOffset),this.impreciseHead=c.precise?null:new st(f.focusNode,f.focusOffset)}suppressWidgetCursorChange(e,t){return this.hasComposition&&t.empty&&Gi(e.focusNode,e.focusOffset,e.anchorNode,e.anchorOffset)&&this.posFromDOM(e.focusNode,e.focusOffset)==t.head}enforceCursorAssoc(){if(this.hasComposition)return;let{view:e}=this,t=e.state.selection.main,i=rn(e.root),{anchorNode:s,anchorOffset:r}=e.observer.selectionRange;if(!i||!t.empty||!t.assoc||!i.modify)return;let o=this.lineAt(t.head,t.assoc);if(!o)return;let l=o.posAtStart;if(t.head==l||t.head==l+o.length)return;let a=this.coordsAt(t.head,-1),h=this.coordsAt(t.head,1);if(!a||!h||a.bottom>h.top)return;let c=this.domAtPos(t.head+t.assoc,t.assoc);i.collapse(c.node,c.offset),i.modify("move",t.assoc<0?"forward":"backward","lineboundary"),e.observer.readSelectionRange();let f=e.observer.selectionRange;e.docView.posFromDOM(f.anchorNode,f.anchorOffset)!=t.from&&i.collapse(s,r)}posFromDOM(e,t){let i=this.tile.nearest(e);if(!i)return this.tile.dom.compareDocumentPosition(e)&2?0:this.view.state.doc.length;let s=i.posAtStart;if(i.isComposite()){let r;if(e==i.dom)r=i.dom.childNodes[t];else{let o=pt(e)==0?0:t==0?-1:1;for(;;){let l=e.parentNode;if(l==i.dom)break;o==0&&l.firstChild!=l.lastChild&&(e==l.firstChild?o=-1:o=1),e=l}o<0?r=e:r=e.nextSibling}if(r==i.dom.firstChild)return s;for(;r&&!F.get(r);)r=r.nextSibling;if(!r)return s+i.length;for(let o=0,l=s;;o++){let a=i.children[o];if(a.dom==r)return l;l+=a.length+a.breakAfter}}else return i.isText()?e==i.dom?s+t:s+(t?i.length:0):s}domAtPos(e,t){let{tile:i,offset:s}=this.tile.resolveBlock(e,t);return i.isWidget()?i.domPosFor(e,t):i.domIn(s,t)}inlineDOMNearPos(e,t){let i,s=-1,r=!1,o,l=-1,a=!1;return this.tile.blockTiles((h,c)=>{if(h.isWidget()){if(h.flags&32&&c>=e)return!0;h.flags&16&&(r=!0)}else{let f=c+h.length;if(c<=e&&(i=h,s=e-c,r=f=e&&!o&&(o=h,l=e-c,a=c>e),c>e&&o)return!0}}),!i&&!o?this.domAtPos(e,t):(r&&o?i=null:a&&i&&(o=null),i&&t<0||!o?i.domIn(s,t):o.domIn(l,t))}coordsAt(e,t){let{tile:i,offset:s}=this.tile.resolveBlock(e,t);return i.isWidget()?i.widget instanceof Hi?null:i.coordsInWidget(s,t,!0):i.coordsIn(s,t)}lineAt(e,t){let{tile:i}=this.tile.resolveBlock(e,t);return i.isLine()?i:null}coordsForChar(e){let{tile:t,offset:i}=this.tile.resolveBlock(e,1);if(!t.isLine())return null;function s(r,o){if(r.isComposite())for(let l of r.children){if(l.length>=o){let a=s(l,o);if(a)return a}if(o-=l.length,o<0)break}else if(r.isText()&&oMath.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,l=-1,a=this.view.textDirection==_.LTR,h=0,c=(f,u,d)=>{for(let p=0;ps);p++){let O=f.children[p],g=u+O.length,y=O.dom.getBoundingClientRect(),{height:x}=y;if(d&&!p&&(h+=y.top-d.top),O instanceof dt)g>i&&c(O,u,y);else if(u>=i&&(h>0&&t.push(-h),t.push(x+h),h=0,o)){let S=O.dom.lastChild,C=S?is(S):[];if(C.length){let w=C[C.length-1],k=a?w.right-y.left:y.right-w.left;k>l&&(l=k,this.minWidth=r,this.minWidthFrom=u,this.minWidthTo=g)}}d&&p==f.children.length-1&&(h+=d.bottom-y.bottom),u=g+O.breakAfter}};return c(this.tile,0,null),t}textDirectionAt(e){let{tile:t}=this.tile.resolveBlock(e,1);return getComputedStyle(t.dom).direction=="rtl"?_.RTL:_.LTR}measureTextSize(){let e=this.tile.blockTiles(o=>{if(o.isLine()&&o.children.length&&o.length<=20){let l=0,a;for(let h of o.children){if(!h.isText()||/[^ -~]/.test(h.text))return;let c=is(h.dom);if(c.length!=1)return;l+=c[0].width,a=c[0].height}if(l)return{lineHeight:o.dom.getBoundingClientRect().height,charWidth:l/o.length,textHeight:a}}});if(e)return e;let t=document.createElement("div"),i,s,r;return t.className="cm-line",t.style.width="99999px",t.style.position="absolute",t.textContent="abc def ghi jkl mno pqr stu",this.view.observer.ignore(()=>{this.tile.dom.appendChild(t);let o=is(t.firstChild)[0];i=t.getBoundingClientRect().height,s=o&&o.width?o.width/27:7,r=o&&o.height?o.height:i,t.remove()}),{lineHeight:i,charWidth:s,textHeight:r}}computeBlockGapDeco(){let e=[],t=this.view.viewState;for(let i=0,s=0;;s++){let r=s==t.viewports.length?null:t.viewports[s],o=r?r.from-1:this.view.state.doc.length;if(o>i){let l=(t.lineBlockAt(o).bottom-t.lineBlockAt(i).top)/this.view.scaleY;e.push(Z.replace({widget:new Hi(l),block:!0,inclusive:!0,isBlockGap:!0}).range(i,o))}if(!r)break;i=r.to+1}return Z.set(e)}updateDeco(){let e=1,t=this.view.state.facet($s).map(r=>(this.dynamicDecorationMap[e++]=typeof r=="function")?r(this.view):r),i=!1,s=this.view.state.facet(nl).map((r,o)=>{let l=typeof r=="function";return l&&(i=!0),l?r(this.view):r});for(s.length&&(this.dynamicDecorationMap[e++]=i,t.push(W.join(s))),this.decorations=[this.editContextFormatting,...t,this.computeBlockGapDeco(),this.view.viewState.lineGapDeco];etypeof r=="function"?r(this.view):r)}scrollIntoView(e){var t;if(e.isSnapshot){let c=this.view.viewState.lineBlockAt(e.range.head);this.view.scrollDOM.scrollTop=c.top-e.yMargin,this.view.scrollDOM.scrollLeft=e.xMargin;return}for(let c of this.view.state.facet(xc))try{if(c(this.view,e.range,e))return!0}catch(f){ae(this.view.state,f,"scroll handler")}let{range:i}=e,s=this.coordsAt(i.head,(t=i.assoc)!==null&&t!==void 0?t:i.empty?0:i.head>i.anchor?-1:1),r;if(!s)return;!i.empty&&(r=this.coordsAt(i.anchor,i.anchor>i.head?-1:1))&&(s={left:Math.min(s.left,r.left),top:Math.min(s.top,r.top),right:Math.max(s.right,r.right),bottom:Math.max(s.bottom,r.bottom)});let o=sl(this.view),l={left:s.left-o.left,top:s.top-o.top,right:s.right+o.right,bottom:s.bottom+o.bottom},{offsetWidth:a,offsetHeight:h}=this.view.scrollDOM;if(yp(this.view.scrollDOM,l,i.head1&&(s.top>window.pageYOffset+window.visualViewport.offsetTop+window.visualViewport.height||s.bottomi.isWidget()||i.children.some(t);return t(this.tile.resolveBlock(e,1).tile)}destroy(){yo(this.tile)}};function yo(n,e){let t=e?.get(n);if(t!=1){t==null&&n.destroy();for(let i of n.children)yo(i,e)}}function Dp(n){return n.node.nodeType==1&&n.node.firstChild&&(n.offset==0||n.node.childNodes[n.offset-1].contentEditable=="false")&&(n.offset==n.node.childNodes.length||n.node.childNodes[n.offset].contentEditable=="false")}function Pc(n,e){let t=n.observer.selectionRange;if(!t.focusNode)return null;let i=rc(t.focusNode,t.focusOffset),s=oc(t.focusNode,t.focusOffset),r=i||s;if(s&&i&&s.node!=i.node){let l=F.get(s.node);if(!l||l.isText()&&l.text!=s.node.nodeValue)r=s;else if(n.docView.lastCompositionAfterCursor){let a=F.get(i.node);!a||a.isText()&&a.text!=i.node.nodeValue||(r=s)}}if(n.docView.lastCompositionAfterCursor=r!=i,!r)return null;let o=e-r.offset;return{from:o,to:o+r.node.nodeValue.length,node:r.node}}function Wp(n,e,t){let i=Pc(n,t);if(!i)return null;let{node:s,from:r,to:o}=i,l=s.nodeValue;if(/[\n\r]/.test(l)||n.state.doc.sliceString(i.from,i.to)!=l)return null;let a=e.invertedDesc;return{range:new Ne(a.mapPos(r),a.mapPos(o),r,o),text:s}}function Bp(n,e){return n.nodeType!=1?0:(e&&n.childNodes[e-1].contentEditable=="false"?1:0)|(e{ie.from&&(t=!0)}),t}var Hi=class extends ge{constructor(e){super(),this.height=e}toDOM(){let e=document.createElement("div");return e.className="cm-gap",this.updateDOM(e),e}eq(e){return e.height==this.height}updateDOM(e){return e.style.height=this.height+"px",!0}get editable(){return!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}};function qp(n,e,t=1){let i=n.charCategorizer(e),s=n.doc.lineAt(e),r=e-s.from;if(s.length==0)return b.cursor(e);r==0?t=1:r==s.length&&(t=-1);let o=r,l=r;t<0?o=te(s.text,r,!1):l=te(s.text,r);let a=i(s.text.slice(o,l));for(;o>0;){let h=te(s.text,o,!1);if(i(s.text.slice(h,o))!=a)break;o=h}for(;ln.defaultLineHeight*1.5){let l=n.viewState.heightOracle.textHeight,a=Math.floor((s-t.top-(n.defaultLineHeight-l)*.5)/l);r+=a*n.viewState.heightOracle.lineLength}let o=n.state.sliceDoc(t.from,t.to);return t.from+qn(o,r,n.state.tabSize)}function xo(n,e,t){let i=n.lineBlockAt(e);if(Array.isArray(i.type)){let s;for(let r of i.type){if(r.from>e)break;if(!(r.toe)return r;(!s||r.type==he.Text&&(s.type!=r.type||(t<0?r.frome)))&&(s=r)}}return s||i}return i}function Np(n,e,t,i){let s=xo(n,e.head,e.assoc||-1),r=!i||s.type!=he.Text||!(n.lineWrapping||s.widgetLineBreaks)?null:n.coordsAtPos(e.assoc<0&&e.head>s.from?e.head-1:e.head);if(r){let o=n.dom.getBoundingClientRect(),l=n.textDirectionAt(s.from),a=n.posAtCoords({x:t==(l==_.LTR)?o.right-1:o.left+1,y:(r.top+r.bottom)/2});if(a!=null)return b.cursor(a,t?-1:1)}return b.cursor(t?s.to:s.from,t?-1:1)}function Qh(n,e,t,i){let s=n.state.doc.lineAt(e.head),r=n.bidiSpans(s),o=n.textDirectionAt(s.from);for(let l=e,a=null;;){let h=Tp(s,r,o,l,t),c=fc;if(!h){if(s.number==(t?n.state.doc.lines:1))return l;c=` -`,s=n.state.doc.line(s.number+(t?1:-1)),r=n.bidiSpans(s),h=n.visualLineSide(s,!t)}if(a){if(!a(c))return l}else{if(!i)return h;a=i(c)}l=h}}function Gp(n,e,t){let i=n.state.charCategorizer(e),s=i(t);return r=>{let o=i(r);return s==V.Space&&(s=o),s==o}}function Up(n,e,t,i){let s=e.head,r=t?1:-1;if(s==(t?n.state.doc.length:0))return b.cursor(s,e.assoc);let o=e.goalColumn,l,a=n.contentDOM.getBoundingClientRect(),h=n.coordsAtPos(s,e.assoc||((e.empty?t:e.head==e.from)?1:-1)),c=n.documentTop;if(h)o==null&&(o=h.left-a.left),l=r<0?h.top:h.bottom;else{let p=n.viewState.lineBlockAt(s);o==null&&(o=Math.min(a.right-a.left,n.defaultCharacterWidth*(s-p.from))),l=(r<0?p.top:p.bottom)+c}let f=a.left+o,u=n.viewState.heightOracle.textHeight>>1,d=i??u;for(let p=0;;p+=u){let O=l+(d+p)*r,g=So(n,{x:f,y:O},!1,r);if(t?O>a.bottom:Ol:x{if(e>r&&es(n)),t.from,e.head>t.from?-1:1);return i==t.from?t:b.cursor(i,in.viewState.docHeight)return new _e(n.state.doc.length,-1);if(h=n.elementAtHeight(a),i==null)break;if(h.type==he.Text){if(i<0?h.ton.viewport.to)break;let u=n.docView.coordsAt(i<0?h.from:h.to,i>0?-1:1);if(u&&(i<0?u.top<=a+r:u.bottom>=a+r))break}let f=n.viewState.heightOracle.textHeight/2;a=i>0?h.bottom+f:h.top-f}if(n.viewport.from>=h.to||n.viewport.to<=h.from){if(t)return null;if(h.type==he.Text){let f=jp(n,s,h,o,l);return new _e(f,f==h.from?1:-1)}}if(h.type!=he.Text)return a<(h.top+h.bottom)/2?new _e(h.from,1):new _e(h.to,-1);let c=n.docView.lineAt(h.from,2);return(!c||c.length!=h.length)&&(c=n.docView.lineAt(h.from,-2)),new wo(n,o,l,n.textDirectionAt(h.from)).scanTile(c,h.from)}var wo=class{constructor(e,t,i,s){this.view=e,this.x=t,this.y=i,this.baseDir=s,this.line=null,this.spans=null}bidiSpansAt(e){return(!this.line||this.line.from>e||this.line.to1||i.length&&(i[0].level!=this.baseDir||i[0].to+s.from>1;t:if(r.has(p)){let g=i+Math.floor(Math.random()*d);for(let y=0;y1)){if(y.bottomthis.y)(!a||a.top>y.top)&&(a=y),x=-1;else{let S=y.left>this.x?this.x-y.left:y.right(d+d+p)/3)return this.y=l.bottom-1,this.scan(e,t);if(a&&a.top<(d+p+p)/3)return this.y=a.top+1,this.scan(e,t)}let u=(o?this.dirAt(e[h],1):this.baseDir)==_.LTR;return{i:h,after:this.x>(f.left+f.right)/2==u}}scanText(e,t){let i=[];for(let r=0;r{let o=i[r]-t,l=i[r+1]-t;return on(e.dom,o,l).getClientRects()});return s.after?new _e(i[s.i+1],-1):new _e(i[s.i],1)}scanTile(e,t){if(!e.length)return new _e(t,1);if(e.children.length==1){let l=e.children[0];if(l.isText())return this.scanText(l,t);if(l.isComposite())return this.scanTile(l,t)}let i=[t];for(let l=0,a=t;l{let a=e.children[l];return a.flags&48?null:(a.dom.nodeType==1?a.dom:on(a.dom,0,a.length)).getClientRects()}),r=e.children[s.i],o=i[s.i];return r.isText()?this.scanText(r,o):r.isComposite()?this.scanTile(r,o):s.after?new _e(i[s.i+1],-1):new _e(o,1)}},di="\uFFFF",ko=class{constructor(e,t){this.points=e,this.view=t,this.text="",this.lineSeparator=t.state.facet(Y.lineSeparator)}append(e){this.text+=e}lineBreak(){this.text+=di}readRange(e,t){if(!e)return this;let i=e.parentNode;for(let s=e;;){this.findPointBefore(i,s);let r=this.text.length;this.readNode(s);let o=F.get(s),l=s.nextSibling;if(l==t){o?.breakAfter&&!l&&i!=this.view.contentDOM&&this.lineBreak();break}let a=F.get(l);(o&&a?o.breakAfter:(o?o.breakAfter:hs(s))||hs(l)&&(s.nodeName!="BR"||o?.isWidget())&&this.text.length>r)&&!Hp(l,t)&&this.lineBreak(),s=l}return this.findPointBefore(i,t),this}readTextNode(e){let t=e.nodeValue;for(let i of this.points)i.node==e&&(i.pos=this.text.length+Math.min(i.offset,t.length));for(let i=0,s=this.lineSeparator?null:/\r\n?|\n/g;;){let r=-1,o=1,l;if(this.lineSeparator?(r=t.indexOf(this.lineSeparator,i),o=this.lineSeparator.length):(l=s.exec(t))&&(r=l.index,o=l[0].length),this.append(t.slice(i,r<0?t.length:r)),r<0)break;if(this.lineBreak(),o>1)for(let a of this.points)a.node==e&&a.pos>this.text.length&&(a.pos-=o-1);i=r+o}}readNode(e){let t=F.get(e),i=t&&t.overrideDOMText;if(i!=null){this.findPointInside(e,i.length);for(let s=i.iter();!s.next().done;)s.lineBreak?this.lineBreak():this.append(s.value)}else e.nodeType==3?this.readTextNode(e):e.nodeName=="BR"?e.nextSibling&&this.lineBreak():e.nodeType==1&&this.readRange(e.firstChild,null)}findPointBefore(e,t){for(let i of this.points)i.node==e&&e.childNodes[i.offset]==t&&(i.pos=this.text.length)}findPointInside(e,t){for(let i of this.points)(e.nodeType==3?i.node==e:e.contains(i.node))&&(i.pos=this.text.length+(Fp(e,i.node,i.offset)?t:0))}};function Fp(n,e,t){for(;;){if(!e||t-1;let{impreciseHead:r,impreciseAnchor:o}=e.docView,l=e.state.selection;if(e.state.readOnly&&t>-1)this.newSel=null;else if(t>-1&&(this.bounds=Cc(e.docView.tile,t,i,0))){let a=r||o?[]:Jp(e),h=new ko(a,e);h.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=h.text,this.newSel=eO(a,this.bounds.from)}else{let a=e.observer.selectionRange,h=r&&r.node==a.focusNode&&r.offset==a.focusOffset||!ro(e.contentDOM,a.focusNode)?l.main.head:e.docView.posFromDOM(a.focusNode,a.focusOffset),c=o&&o.node==a.anchorNode&&o.offset==a.anchorOffset||!ro(e.contentDOM,a.anchorNode)?l.main.anchor:e.docView.posFromDOM(a.anchorNode,a.anchorOffset),f=e.viewport;if((T.ios||T.chrome)&&l.main.empty&&h!=c&&(f.from>0||f.to-1&&l.ranges.length>1)this.newSel=l.replaceRange(b.range(c,h));else if(e.lineWrapping&&c==h&&!(l.main.empty&&l.main.head==h)&&e.inputState.lastTouchTime>Date.now()-100){let u=e.coordsAtPos(h,-1),d=0;u&&(d=e.inputState.lastTouchY<=u.bottom?-1:1),this.newSel=b.create([b.cursor(h,d)])}else this.newSel=b.single(c,h)}}};function Cc(n,e,t,i){if(n.isComposite()){let s=-1,r=-1,o=-1,l=-1;for(let a=0,h=i,c=i;at)return Cc(f,e,t,h);if(u>=e&&s==-1&&(s=a,r=h),h>t&&f.dom.parentNode==n.dom){o=a,l=c;break}c=u,h=u+f.breakAfter}return{from:r,to:l<0?i+n.length:l,startDOM:(s?n.children[s-1].dom.nextSibling:null)||n.dom.firstChild,endDOM:o=0?n.children[o].dom:null}}else return n.isText()?{from:i,to:i+n.length,startDOM:n.dom,endDOM:n.dom.nextSibling}:null}function Zc(n,e){let t,{newSel:i}=e,{state:s}=n,r=s.selection.main,o=n.inputState.lastKeyTime>Date.now()-100?n.inputState.lastKeyCode:-1;if(e.bounds){let{from:l,to:a}=e.bounds,h=r.from,c=null;(o===8||T.android&&e.text.length=l&&r.to<=a&&(e.typeOver||f!=e.text)&&f.slice(0,r.from-l)==e.text.slice(0,r.from-l)&&f.slice(r.to-l)==e.text.slice(u=e.text.length-(f.length-(r.to-l)))?t={from:r.from,to:r.to,insert:E.of(e.text.slice(r.from-l,u).split(di))}:(d=Ac(f,e.text,h-l,c))&&(T.chrome&&o==13&&d.toB==d.from+2&&e.text.slice(d.from,d.toB)==di+di&&d.toB--,t={from:l+d.from,to:l+d.toA,insert:E.of(e.text.slice(d.from,d.toB).split(di))})}else i&&(!n.hasFocus&&s.facet(ut)||Os(i,r))&&(i=null);if(!t&&!i)return!1;if((T.mac||T.android)&&t&&t.from==t.to&&t.from==r.head-1&&/^\. ?$/.test(t.insert.toString())&&n.contentDOM.getAttribute("autocorrect")=="off"?(i&&t.insert.length==2&&(i=b.single(i.main.anchor-1,i.main.head-1)),t={from:t.from,to:t.to,insert:E.of([t.insert.toString().replace("."," ")])}):s.doc.lineAt(r.from).toDate.now()-50?t={from:r.from,to:r.to,insert:s.toText(n.inputState.insertingText)}:T.chrome&&t&&t.from==t.to&&t.from==r.head&&t.insert.toString()==` - `&&n.lineWrapping&&(i&&(i=b.single(i.main.anchor-1,i.main.head-1)),t={from:r.from,to:r.to,insert:E.of([" "])}),t)return rl(n,t,i,o);if(i&&!Os(i,r)){let l=!1,a="select";return n.inputState.lastSelectionTime>Date.now()-50&&(n.inputState.lastSelectionOrigin=="select"&&(l=!0),a=n.inputState.lastSelectionOrigin,a=="select.pointer"&&(i=Tc(s.facet(ln).map(h=>h(n)),i))),n.dispatch({selection:i,scrollIntoView:l,userEvent:a}),!0}else return!1}function rl(n,e,t,i=-1){if(T.ios&&n.inputState.flushIOSKey(e))return!0;let s=n.state.selection.main;if(T.android&&(e.to==s.to&&(e.from==s.from||e.from==s.from-1&&n.state.sliceDoc(e.from,s.from)==" ")&&e.insert.length==1&&e.insert.lines==2&&bi(n.contentDOM,"Enter",13)||(e.from==s.from-1&&e.to==s.to&&e.insert.length==0||i==8&&e.insert.lengths.head)&&bi(n.contentDOM,"Backspace",8)||e.from==s.from&&e.to==s.to+1&&e.insert.length==0&&bi(n.contentDOM,"Delete",46)))return!0;let r=e.insert.toString();n.inputState.composing>=0&&n.inputState.composing++;let o,l=()=>o||(o=Kp(n,e,t));return n.state.facet(mc).some(a=>a(n,e.from,e.to,r,l))||n.dispatch(l()),!0}function Kp(n,e,t){let i,s=n.state,r=s.selection.main,o=-1;if(e.from==e.to&&e.fromr.to){let a=e.fromf(n)),h,a);e.from==c&&(o=c)}if(o>-1)i={changes:e,selection:b.cursor(e.from+e.insert.length,-1)};else if(e.from>=r.from&&e.to<=r.to&&e.to-e.from>=(r.to-r.from)/3&&(!t||t.main.empty&&t.main.from==e.from+e.insert.length)&&n.inputState.composing<0){let a=r.frome.to?s.sliceDoc(e.to,r.to):"";i=s.replaceSelection(n.state.toText(a+e.insert.sliceString(0,void 0,n.state.lineBreak)+h))}else{let a=s.changes(e),h=t&&t.main.to<=a.newLength?t.main:void 0;if(s.selection.ranges.length>1&&(n.inputState.composing>=0||n.inputState.compositionPendingChange)&&e.to<=r.to+10&&e.to>=r.to-10){let c=n.state.sliceDoc(e.from,e.to),f,u=t&&Pc(n,t.main.head);if(u){let p=e.insert.length-(e.to-e.from);f={from:u.from,to:u.to-p}}else f=n.state.doc.lineAt(r.head);let d=r.to-e.to;i=s.changeByRange(p=>{if(p.from==r.from&&p.to==r.to)return{changes:a,range:h||p.map(a)};let O=p.to-d,g=O-c.length;if(n.state.sliceDoc(g,O)!=c||O>=f.from&&g<=f.to)return{range:p};let y=s.changes({from:g,to:O,insert:e.insert}),x=p.to-r.to;return{changes:y,range:h?b.range(Math.max(0,h.anchor+x),Math.max(0,h.head+x)):p.map(y)}})}else i={changes:a,selection:h&&s.selection.replaceRange(h)}}let l="input.type";return(n.composing||n.inputState.compositionPendingChange&&n.inputState.compositionEndedAt>Date.now()-50)&&(n.inputState.compositionPendingChange=!1,l+=".compose",n.inputState.compositionFirstChange&&(l+=".start",n.inputState.compositionFirstChange=!1)),s.update(i,{userEvent:l,scrollIntoView:!0})}function Ac(n,e,t,i){let s=Math.min(n.length,e.length),r=0;for(;r0&&l>0&&n.charCodeAt(o-1)==e.charCodeAt(l-1);)o--,l--;if(i=="end"){let a=Math.max(0,r-Math.min(o,l));t-=o+a-r}if(o=o?r-t:0;r-=a,l=r+(l-o),o=r}else if(l=l?r-t:0;r-=a,o=r+(o-l),l=r}return{from:r,toA:o,toB:l}}function Jp(n){let e=[];if(n.root.activeElement!=n.contentDOM)return e;let{anchorNode:t,anchorOffset:i,focusNode:s,focusOffset:r}=n.observer.selectionRange;return t&&(e.push(new ps(t,i)),(s!=t||r!=i)&&e.push(new ps(s,r))),e}function eO(n,e){if(n.length==0)return null;let t=n[0].pos,i=n.length==2?n[1].pos:t;return t>-1&&i>-1?b.single(t+e,i+e):null}function Os(n,e){return e.head==n.main.head&&e.anchor==n.main.anchor}var vo=class{setSelectionOrigin(e){this.lastSelectionOrigin=e,this.lastSelectionTime=Date.now()}constructor(e){this.view=e,this.lastKeyCode=0,this.lastKeyTime=0,this.lastTouchTime=0,this.lastTouchX=0,this.lastTouchY=0,this.lastFocusTime=0,this.lastScrollTop=0,this.lastScrollLeft=0,this.lastWheelEvent=0,this.pendingIOSKey=void 0,this.tabFocusMode=-1,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastContextMenu=0,this.scrollHandlers=[],this.handlers=Object.create(null),this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.compositionPendingKey=!1,this.compositionPendingChange=!1,this.insertingText="",this.insertingTextAt=0,this.mouseSelection=null,this.draggedContent=null,this.handleEvent=this.handleEvent.bind(this),this.notifiedFocused=e.hasFocus,T.safari&&e.contentDOM.addEventListener("input",()=>null),T.gecko&&pO(e.contentDOM.ownerDocument)}handleEvent(e){!lO(this.view,e)||this.ignoreDuringComposition(e)||e.type=="keydown"&&this.keydown(e)||(this.view.updateState!=0?Promise.resolve().then(()=>this.runHandlers(e.type,e)):this.runHandlers(e.type,e))}runHandlers(e,t){let i=this.handlers[e];if(i){for(let s of i.observers)s(this.view,t);for(let s of i.handlers){if(t.defaultPrevented)break;if(s(this.view,t)){t.preventDefault();break}}}}ensureHandlers(e){let t=tO(e),i=this.handlers,s=this.view.contentDOM;for(let r in t)if(r!="scroll"){let o=!t[r].handlers.length,l=i[r];l&&o!=!l.handlers.length&&(s.removeEventListener(r,this.handleEvent),l=null),l||s.addEventListener(r,this.handleEvent,{passive:o})}for(let r in i)r!="scroll"&&!t[r]&&s.removeEventListener(r,this.handleEvent);this.handlers=t}keydown(e){if(this.lastKeyCode=e.keyCode,this.lastKeyTime=Date.now(),e.keyCode==9&&this.tabFocusMode>-1&&(!this.tabFocusMode||Date.now()<=this.tabFocusMode))return!0;if(this.tabFocusMode>0&&e.keyCode!=27&&Rc.indexOf(e.keyCode)<0&&(this.tabFocusMode=-1),T.android&&T.chrome&&!e.synthetic&&(e.keyCode==13||e.keyCode==8))return this.view.observer.delayAndroidKey(e.key,e.keyCode),!0;let t;return T.ios&&!e.synthetic&&!e.altKey&&!e.metaKey&&!e.shiftKey&&((t=Mc.find(i=>i.keyCode==e.keyCode))&&!e.ctrlKey||iO.indexOf(e.key)>-1&&e.ctrlKey)?(this.pendingIOSKey=t||e,setTimeout(()=>this.flushIOSKey(),250),!0):(e.keyCode!=229&&this.view.observer.forceFlush(),!1)}flushIOSKey(e){let t=this.pendingIOSKey;return!t||t.key=="Enter"&&e&&e.from0?!0:T.safari&&!T.ios&&this.compositionPendingKey&&Date.now()-this.compositionEndedAt<100?(this.compositionPendingKey=!1,!0):!1}startMouseSelection(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e}update(e){this.view.observer.update(e),this.mouseSelection&&this.mouseSelection.update(e),this.draggedContent&&e.docChanged&&(this.draggedContent=this.draggedContent.map(e.changes)),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}};function vh(n,e){return(t,i)=>{try{return e.call(n,i,t)}catch(s){ae(t.state,s)}}}function tO(n){let e=Object.create(null);function t(i){return e[i]||(e[i]={observers:[],handlers:[]})}for(let i of n){let s=i.spec,r=s&&s.plugin.domEventHandlers,o=s&&s.plugin.domEventObservers;if(r)for(let l in r){let a=r[l];a&&t(l).handlers.push(vh(i.value,a))}if(o)for(let l in o){let a=o[l];a&&t(l).observers.push(vh(i.value,a))}}for(let i in Ge)t(i).handlers.push(Ge[i]);for(let i in we)t(i).observers.push(we[i]);return e}var Mc=[{key:"Backspace",keyCode:8,inputType:"deleteContentBackward"},{key:"Enter",keyCode:13,inputType:"insertParagraph"},{key:"Enter",keyCode:13,inputType:"insertLineBreak"},{key:"Delete",keyCode:46,inputType:"deleteContentForward"}],iO="dthko",Rc=[16,17,18,20,91,92,224,225],Gn=6;function Un(n){return Math.max(0,n)*.7+8}function nO(n,e){return Math.max(Math.abs(n.clientX-e.clientX),Math.abs(n.clientY-e.clientY))}var $o=class{constructor(e,t,i,s){this.view=e,this.startEvent=t,this.style=i,this.mustSelect=s,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=t,this.scrollParents=ic(e.contentDOM),this.atoms=e.state.facet(ln).map(o=>o(e));let r=e.contentDOM.ownerDocument;r.addEventListener("mousemove",this.move=this.move.bind(this)),r.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=t.shiftKey,this.multiple=e.state.facet(Y.allowMultipleSelections)&&sO(e,t),this.dragging=oO(e,t)&&Ec(t)==1?null:!1}start(e){this.dragging===!1&&this.select(e)}move(e){if(e.buttons==0)return this.destroy();if(this.dragging||this.dragging==null&&nO(this.startEvent,e)<10)return;this.select(this.lastEvent=e);let t=0,i=0,s=0,r=0,o=this.view.win.innerWidth,l=this.view.win.innerHeight;this.scrollParents.x&&({left:s,right:o}=this.scrollParents.x.getBoundingClientRect()),this.scrollParents.y&&({top:r,bottom:l}=this.scrollParents.y.getBoundingClientRect());let a=sl(this.view);e.clientX-a.left<=s+Gn?t=-Un(s-e.clientX):e.clientX+a.right>=o-Gn&&(t=Un(e.clientX-o)),e.clientY-a.top<=r+Gn?i=-Un(r-e.clientY):e.clientY+a.bottom>=l-Gn&&(i=Un(e.clientY-l)),this.setScrollSpeed(t,i)}up(e){this.dragging==null&&this.select(this.lastEvent),this.dragging||e.preventDefault(),this.destroy()}destroy(){this.setScrollSpeed(0,0);let e=this.view.contentDOM.ownerDocument;e.removeEventListener("mousemove",this.move),e.removeEventListener("mouseup",this.up),this.view.inputState.mouseSelection=this.view.inputState.draggedContent=null}setScrollSpeed(e,t){this.scrollSpeed={x:e,y:t},e||t?this.scrolling<0&&(this.scrolling=setInterval(()=>this.scroll(),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)}scroll(){let{x:e,y:t}=this.scrollSpeed;e&&this.scrollParents.x&&(this.scrollParents.x.scrollLeft+=e,e=0),t&&this.scrollParents.y&&(this.scrollParents.y.scrollTop+=t,t=0),(e||t)&&this.view.win.scrollBy(e,t),this.dragging===!1&&this.select(this.lastEvent)}select(e){let{view:t}=this,i=Tc(this.atoms,this.style.get(e,this.extend,this.multiple));(this.mustSelect||!i.eq(t.state.selection,this.dragging===!1))&&this.view.dispatch({selection:i,userEvent:"select.pointer"}),this.mustSelect=!1}update(e){e.transactions.some(t=>t.isUserEvent("input.type"))?this.destroy():this.style.update(e)&&setTimeout(()=>this.select(this.lastEvent),20)}};function sO(n,e){let t=n.state.facet(uc);return t.length?t[0](e):T.mac?e.metaKey:e.ctrlKey}function rO(n,e){let t=n.state.facet(dc);return t.length?t[0](e):T.mac?!e.altKey:!e.ctrlKey}function oO(n,e){let{main:t}=n.state.selection;if(t.empty)return!1;let i=rn(n.root);if(!i||i.rangeCount==0)return!0;let s=i.getRangeAt(0).getClientRects();for(let r=0;r=e.clientX&&o.top<=e.clientY&&o.bottom>=e.clientY)return!0}return!1}function lO(n,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let t=e.target,i;t!=n.contentDOM;t=t.parentNode)if(!t||t.nodeType==11||(i=F.get(t))&&i.isWidget()&&!i.isHidden&&i.widget.ignoreEvent(e))return!1;return!0}var Ge=Object.create(null),we=Object.create(null),Xc=T.ie&&T.ie_version<15||T.ios&&T.webkit_version<604;function aO(n){let e=n.dom.parentNode;if(!e)return;let t=e.appendChild(document.createElement("textarea"));t.style.cssText="position: fixed; left: -10000px; top: 10px",t.focus(),setTimeout(()=>{n.focus(),t.remove(),Lc(n,t.value)},50)}function Ps(n,e,t){for(let i of n.facet(e))t=i(t,n);return t}function Lc(n,e){e=Ps(n.state,el,e);let{state:t}=n,i,s=1,r=t.toText(e),o=r.lines==t.selection.ranges.length;if(Po!=null&&t.selection.ranges.every(a=>a.empty)&&Po==r.toString()){let a=-1;i=t.changeByRange(h=>{let c=t.doc.lineAt(h.from);if(c.from==a)return{range:h};a=c.from;let f=t.toText((o?r.line(s++).text:e)+t.lineBreak);return{changes:{from:c.from,insert:f},range:b.cursor(h.from+f.length)}})}else o?i=t.changeByRange(a=>{let h=r.line(s++);return{changes:{from:a.from,to:a.to,insert:h.text},range:b.cursor(a.from+h.length)}}):i=t.replaceSelection(r);n.dispatch(i,{userEvent:"input.paste",scrollIntoView:!0})}we.scroll=n=>{n.inputState.lastScrollTop=n.scrollDOM.scrollTop,n.inputState.lastScrollLeft=n.scrollDOM.scrollLeft};we.wheel=we.mousewheel=n=>{n.inputState.lastWheelEvent=Date.now()};Ge.keydown=(n,e)=>(n.inputState.setSelectionOrigin("select"),e.keyCode==27&&n.inputState.tabFocusMode!=0&&(n.inputState.tabFocusMode=Date.now()+2e3),!1);we.touchstart=(n,e)=>{let t=n.inputState,i=e.targetTouches[0];t.lastTouchTime=Date.now(),i&&(t.lastTouchX=i.clientX,t.lastTouchY=i.clientY),t.setSelectionOrigin("select.pointer")};we.touchmove=n=>{n.inputState.setSelectionOrigin("select.pointer")};Ge.mousedown=(n,e)=>{if(n.observer.flush(),n.inputState.lastTouchTime>Date.now()-2e3)return!1;let t=null;for(let i of n.state.facet(pc))if(t=i(n,e),t)break;if(!t&&e.button==0&&(t=cO(n,e)),t){let i=!n.hasFocus;n.inputState.startMouseSelection(new $o(n,e,t,i)),i&&n.observer.ignore(()=>{nc(n.contentDOM);let r=n.root.activeElement;r&&!r.contains(n.contentDOM)&&r.blur()});let s=n.inputState.mouseSelection;if(s)return s.start(e),s.dragging===!1}else n.inputState.setSelectionOrigin("select.pointer");return!1};function $h(n,e,t,i){if(i==1)return b.cursor(e,t);if(i==2)return qp(n.state,e,t);{let s=n.docView.lineAt(e,t),r=n.state.doc.lineAt(s?s.posAtEnd:e),o=s?s.posAtStart:r.from,l=s?s.posAtEnd:r.to;return lDate.now()-400&&Math.abs(e.clientX-n.clientX)<2&&Math.abs(e.clientY-n.clientY)<2?(Th+1)%3:1}function cO(n,e){let t=n.posAndSideAtCoords({x:e.clientX,y:e.clientY},!1),i=Ec(e),s=n.state.selection;return{update(r){r.docChanged&&(t.pos=r.changes.mapPos(t.pos),s=s.map(r.changes))},get(r,o,l){let a=n.posAndSideAtCoords({x:r.clientX,y:r.clientY},!1),h,c=$h(n,a.pos,a.assoc,i);if(t.pos!=a.pos&&!o){let f=$h(n,t.pos,t.assoc,i),u=Math.min(f.from,c.from),d=Math.max(f.to,c.to);c=u1&&(h=fO(s,a.pos))?h:l?s.addRange(c):b.create([c])}}}function fO(n,e){for(let t=0;t=e)return b.create(n.ranges.slice(0,t).concat(n.ranges.slice(t+1)),n.mainIndex==t?0:n.mainIndex-(n.mainIndex>t?1:0))}return null}Ge.dragstart=(n,e)=>{let{selection:{main:t}}=n.state;if(e.target.draggable){let s=n.docView.tile.nearest(e.target);if(s&&s.isWidget()){let r=s.posAtStart,o=r+s.length;(r>=t.to||o<=t.from)&&(t=b.range(r,o))}}let{inputState:i}=n;return i.mouseSelection&&(i.mouseSelection.dragging=!0),i.draggedContent=t,e.dataTransfer&&(e.dataTransfer.setData("Text",Ps(n.state,tl,n.state.sliceDoc(t.from,t.to))),e.dataTransfer.effectAllowed="copyMove"),!1};Ge.dragend=n=>(n.inputState.draggedContent=null,!1);function Zh(n,e,t,i){if(t=Ps(n.state,el,t),!t)return;let s=n.posAtCoords({x:e.clientX,y:e.clientY},!1),{draggedContent:r}=n.inputState,o=i&&r&&rO(n,e)?{from:r.from,to:r.to}:null,l={from:s,insert:t},a=n.state.changes(o?[o,l]:l);n.focus(),n.dispatch({changes:a,selection:{anchor:a.mapPos(s,-1),head:a.mapPos(s,1)},userEvent:o?"move.drop":"input.drop"}),n.inputState.draggedContent=null}Ge.drop=(n,e)=>{if(!e.dataTransfer)return!1;if(n.state.readOnly)return!0;let t=e.dataTransfer.files;if(t&&t.length){let i=Array(t.length),s=0,r=()=>{++s==t.length&&Zh(n,e,i.filter(o=>o!=null).join(n.state.lineBreak),!1)};for(let o=0;o{/[\x00-\x08\x0e-\x1f]{2}/.test(l.result)||(i[o]=l.result),r()},l.readAsText(t[o])}return!0}else{let i=e.dataTransfer.getData("Text");if(i)return Zh(n,e,i,!0),!0}return!1};Ge.paste=(n,e)=>{if(n.state.readOnly)return!0;n.observer.flush();let t=Xc?null:e.clipboardData;return t?(Lc(n,t.getData("text/plain")||t.getData("text/uri-list")),!0):(aO(n),!1)};function uO(n,e){let t=n.dom.parentNode;if(!t)return;let i=t.appendChild(document.createElement("textarea"));i.style.cssText="position: fixed; left: -10000px; top: 10px",i.value=e,i.focus(),i.selectionEnd=e.length,i.selectionStart=0,setTimeout(()=>{i.remove(),n.focus()},50)}function dO(n){let e=[],t=[],i=!1;for(let s of n.selection.ranges)s.empty||(e.push(n.sliceDoc(s.from,s.to)),t.push(s));if(!e.length){let s=-1;for(let{from:r}of n.selection.ranges){let o=n.doc.lineAt(r);o.number>s&&(e.push(o.text),t.push({from:o.from,to:Math.min(n.doc.length,o.to+1)})),s=o.number}i=!0}return{text:Ps(n,tl,e.join(n.lineBreak)),ranges:t,linewise:i}}var Po=null;Ge.copy=Ge.cut=(n,e)=>{if(!Ni(n.contentDOM,n.observer.selectionRange))return!1;let{text:t,ranges:i,linewise:s}=dO(n.state);if(!t&&!s)return!1;Po=s?t:null,e.type=="cut"&&!n.state.readOnly&&n.dispatch({changes:i,scrollIntoView:!0,userEvent:"delete.cut"});let r=Xc?null:e.clipboardData;return r?(r.clearData(),r.setData("text/plain",t),!0):(uO(n,t),!1)};var Dc=be.define();function Wc(n,e){let t=[];for(let i of n.facet(gc)){let s=i(n,e);s&&t.push(s)}return t.length?n.update({effects:t,annotations:Dc.of(!0)}):null}function Bc(n){setTimeout(()=>{let e=n.hasFocus;if(e!=n.inputState.notifiedFocused){let t=Wc(n.state,e);t?n.dispatch(t):n.update([])}},10)}we.focus=n=>{n.inputState.lastFocusTime=Date.now(),!n.scrollDOM.scrollTop&&(n.inputState.lastScrollTop||n.inputState.lastScrollLeft)&&(n.scrollDOM.scrollTop=n.inputState.lastScrollTop,n.scrollDOM.scrollLeft=n.inputState.lastScrollLeft),Bc(n)};we.blur=n=>{n.observer.clearSelectionRange(),Bc(n)};we.compositionstart=we.compositionupdate=n=>{n.observer.editContext||(n.inputState.compositionFirstChange==null&&(n.inputState.compositionFirstChange=!0),n.inputState.composing<0&&(n.inputState.composing=0))};we.compositionend=n=>{n.observer.editContext||(n.inputState.composing=-1,n.inputState.compositionEndedAt=Date.now(),n.inputState.compositionPendingKey=!0,n.inputState.compositionPendingChange=n.observer.pendingRecords().length>0,n.inputState.compositionFirstChange=null,T.chrome&&T.android?n.observer.flushSoon():n.inputState.compositionPendingChange?Promise.resolve().then(()=>n.observer.flush()):setTimeout(()=>{n.inputState.composing<0&&n.docView.hasComposition&&n.update([])},50))};we.contextmenu=n=>{n.inputState.lastContextMenu=Date.now()};Ge.beforeinput=(n,e)=>{var t,i;if((e.inputType=="insertText"||e.inputType=="insertCompositionText")&&(n.inputState.insertingText=e.data,n.inputState.insertingTextAt=Date.now()),e.inputType=="insertReplacementText"&&n.observer.editContext){let r=(t=e.dataTransfer)===null||t===void 0?void 0:t.getData("text/plain"),o=e.getTargetRanges();if(r&&o.length){let l=o[0],a=n.posAtDOM(l.startContainer,l.startOffset),h=n.posAtDOM(l.endContainer,l.endOffset);return rl(n,{from:a,to:h,insert:n.state.toText(r)},null),!0}}let s;if(T.chrome&&T.android&&(s=Mc.find(r=>r.inputType==e.inputType))&&(n.observer.delayAndroidKey(s.key,s.keyCode),s.key=="Backspace"||s.key=="Delete")){let r=((i=window.visualViewport)===null||i===void 0?void 0:i.height)||0;setTimeout(()=>{var o;(((o=window.visualViewport)===null||o===void 0?void 0:o.height)||0)>r+10&&n.hasFocus&&(n.contentDOM.blur(),n.focus())},100)}return T.ios&&e.inputType=="deleteContentForward"&&n.observer.flushSoon(),T.safari&&e.inputType=="insertText"&&n.inputState.composing>=0&&setTimeout(()=>we.compositionend(n,e),20),!1};var Ah=new Set;function pO(n){Ah.has(n)||(Ah.add(n),n.addEventListener("copy",()=>{}),n.addEventListener("cut",()=>{}))}var Mh=["pre-wrap","normal","pre-line","break-spaces"],Qi=!1;function Rh(){Qi=!1}var To=class{constructor(e){this.lineWrapping=e,this.doc=E.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.textHeight=14,this.lineLength=30}heightForGap(e,t){let i=this.doc.lineAt(t).number-this.doc.lineAt(e).number+1;return this.lineWrapping&&(i+=Math.max(0,Math.ceil((t-e-i*this.lineLength*.5)/this.lineLength))),this.lineHeight*i}heightForLine(e){return this.lineWrapping?(1+Math.max(0,Math.ceil((e-this.lineLength)/Math.max(1,this.lineLength-5))))*this.lineHeight:this.lineHeight}setDoc(e){return this.doc=e,this}mustRefreshForWrapping(e){return Mh.indexOf(e)>-1!=this.lineWrapping}mustRefreshForHeights(e){let t=!1;for(let i=0;i-1,a=Math.abs(t-this.lineHeight)>.3||this.lineWrapping!=l||Math.abs(i-this.charWidth)>.1;if(this.lineWrapping=l,this.lineHeight=t,this.charWidth=i,this.textHeight=s,this.lineLength=r,a){this.heightSamples={};for(let h=0;h0}set outdated(e){this.flags=(e?2:0)|this.flags&-3}setHeight(e){this.height!=e&&(Math.abs(this.height-e)>ns&&(Qi=!0),this.height=e)}replace(e,t,i){return n.of(i)}decomposeLeft(e,t){t.push(this)}decomposeRight(e,t){t.push(this)}applyChanges(e,t,i,s){let r=this,o=i.doc;for(let l=s.length-1;l>=0;l--){let{fromA:a,toA:h,fromB:c,toB:f}=s[l],u=r.lineAt(a,G.ByPosNoHeight,i.setDoc(t),0,0),d=u.to>=h?u:r.lineAt(h,G.ByPosNoHeight,i,0,0);for(f+=d.to-h,h=d.to;l>0&&u.from<=s[l-1].toA;)a=s[l-1].fromA,c=s[l-1].fromB,l--,ar*2){let l=e[t-1];l.break?e.splice(--t,1,l.left,null,l.right):e.splice(--t,1,l.left,l.right),i+=1+l.break,s-=l.size}else if(r>s*2){let l=e[i];l.break?e.splice(i,1,l.left,null,l.right):e.splice(i,1,l.left,l.right),i+=2+l.break,r-=l.size}else break;else if(s=r&&o(this.lineAt(0,G.ByPos,i,s,r))}setMeasuredHeight(e){let t=e.heights[e.index++];t<0?(this.spaceAbove=-t,t=e.heights[e.index++]):this.spaceAbove=0,this.setHeight(t)}updateHeight(e,t=0,i=!1,s){return s&&s.from<=t&&s.more&&this.setMeasuredHeight(s),this.outdated=!1,this}toString(){return`block(${this.length})`}},ze=class n extends gs{constructor(e,t,i){super(e,t,null),this.collapsed=0,this.widgetHeight=0,this.breaks=0,this.spaceAbove=i}mainBlock(e,t){return new je(t,this.length,e+this.spaceAbove,this.height-this.spaceAbove,this.breaks)}replace(e,t,i){let s=i[0];return i.length==1&&(s instanceof n||s instanceof St&&s.flags&4)&&Math.abs(this.length-s.length)<10?(s instanceof St?s=new n(s.length,this.height,this.spaceAbove):s.height=this.height,this.outdated||(s.outdated=!1),s):Te.of(i)}updateHeight(e,t=0,i=!1,s){return s&&s.from<=t&&s.more?this.setMeasuredHeight(s):(i||this.outdated)&&(this.spaceAbove=0,this.setHeight(Math.max(this.widgetHeight,e.heightForLine(this.length-this.collapsed))+this.breaks*e.lineHeight)),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:""}${this.widgetHeight?":"+this.widgetHeight:""})`}},St=class n extends Te{constructor(e){super(e,0)}heightMetrics(e,t){let i=e.doc.lineAt(t).number,s=e.doc.lineAt(t+this.length).number,r=s-i+1,o,l=0;if(e.lineWrapping){let a=Math.min(this.height,e.lineHeight*r);o=a/r,this.length>r+1&&(l=(this.height-a)/(this.length-r-1))}else o=this.height/r;return{firstLine:i,lastLine:s,perLine:o,perChar:l}}blockAt(e,t,i,s){let{firstLine:r,lastLine:o,perLine:l,perChar:a}=this.heightMetrics(t,s);if(t.lineWrapping){let h=s+(e0){let r=i[i.length-1];r instanceof n?i[i.length-1]=new n(r.length+s):i.push(null,new n(s-1))}if(e>0){let r=i[0];r instanceof n?i[0]=new n(e+r.length):i.unshift(new n(e-1),null)}return Te.of(i)}decomposeLeft(e,t){t.push(new n(e-1),null)}decomposeRight(e,t){t.push(null,new n(this.length-e-1))}updateHeight(e,t=0,i=!1,s){let r=t+this.length;if(s&&s.from<=t+this.length&&s.more){let o=[],l=Math.max(t,s.from),a=-1;for(s.from>t&&o.push(new n(s.from-t-1).updateHeight(e,t));l<=r&&s.more;){let c=e.doc.lineAt(l).length;o.length&&o.push(null);let f=s.heights[s.index++],u=0;f<0&&(u=-f,f=s.heights[s.index++]),a==-1?a=f:Math.abs(f-a)>=ns&&(a=-2);let d=new ze(c,f,u);d.outdated=!1,o.push(d),l+=c+1}l<=r&&o.push(null,new n(r-l).updateHeight(e,l));let h=Te.of(o);return(a<0||Math.abs(h.height-this.height)>=ns||Math.abs(a-this.heightMetrics(e,t).perLine)>=ns)&&(Qi=!0),ms(this,h)}else(i||this.outdated)&&(this.setHeight(e.heightForGap(t,t+this.length)),this.outdated=!1);return this}toString(){return`gap(${this.length})`}},Zo=class extends Te{constructor(e,t,i){super(e.length+t+i.length,e.height+i.height,t|(e.outdated||i.outdated?2:0)),this.left=e,this.right=i,this.size=e.size+i.size}get break(){return this.flags&1}blockAt(e,t,i,s){let r=i+this.left.height;return el))return h;let c=t==G.ByPosNoHeight?G.ByPosNoHeight:G.ByPos;return a?h.join(this.right.lineAt(l,c,i,o,l)):this.left.lineAt(l,c,i,s,r).join(h)}forEachLine(e,t,i,s,r,o){let l=s+this.left.height,a=r+this.left.length+this.break;if(this.break)e=a&&this.right.forEachLine(e,t,i,l,a,o);else{let h=this.lineAt(a,G.ByPos,i,s,r);e=e&&h.from<=t&&o(h),t>h.to&&this.right.forEachLine(h.to+1,t,i,l,a,o)}}replace(e,t,i){let s=this.left.length+this.break;if(tthis.left.length)return this.balanced(this.left,this.right.replace(e-s,t-s,i));let r=[];e>0&&this.decomposeLeft(e,r);let o=r.length;for(let l of i)r.push(l);if(e>0&&Xh(r,o-1),t=i&&t.push(null)),e>i&&this.right.decomposeLeft(e-i,t)}decomposeRight(e,t){let i=this.left.length,s=i+this.break;if(e>=s)return this.right.decomposeRight(e-s,t);e2*t.size||t.size>2*e.size?Te.of(this.break?[e,null,t]:[e,t]):(this.left=ms(this.left,e),this.right=ms(this.right,t),this.setHeight(e.height+t.height),this.outdated=e.outdated||t.outdated,this.size=e.size+t.size,this.length=e.length+this.break+t.length,this)}updateHeight(e,t=0,i=!1,s){let{left:r,right:o}=this,l=t+r.length+this.break,a=null;return s&&s.from<=t+r.length&&s.more?a=r=r.updateHeight(e,t,i,s):r.updateHeight(e,t,i),s&&s.from<=l+o.length&&s.more?a=o=o.updateHeight(e,l,i,s):o.updateHeight(e,l,i),a?this.balanced(r,o):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?" ":"-")+this.right}};function Xh(n,e){let t,i;n[e]==null&&(t=n[e-1])instanceof St&&(i=n[e+1])instanceof St&&n.splice(e-1,3,new St(t.length+1+i.length))}var mO=5,Ao=class n{constructor(e,t){this.pos=e,this.oracle=t,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=e}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(e,t){if(this.lineStart>-1){let i=Math.min(t,this.lineEnd),s=this.nodes[this.nodes.length-1];s instanceof ze?s.length+=i-this.pos:(i>this.pos||!this.isCovered)&&this.nodes.push(new ze(i-this.pos,-1,0)),this.writtenTo=i,t>i&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=t}point(e,t,i){if(e=mO)&&this.addLineDeco(s,r,o)}else t>e&&this.span(e,t);this.lineEnd>-1&&this.lineEnd-1)return;let{from:e,to:t}=this.oracle.doc.lineAt(this.pos);this.lineStart=e,this.lineEnd=t,this.writtenToe&&this.nodes.push(new ze(this.pos-e,-1,0)),this.writtenTo=this.pos}blankContent(e,t){let i=new St(t-e);return this.oracle.doc.lineAt(e).to==t&&(i.flags|=4),i}ensureLine(){this.enterLine();let e=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(e instanceof ze)return e;let t=new ze(0,-1,0);return this.nodes.push(t),t}addBlock(e){this.enterLine();let t=e.deco;t&&t.startSide>0&&!this.isCovered&&this.ensureLine(),this.nodes.push(e),this.writtenTo=this.pos=this.pos+e.length,t&&t.endSide>0&&(this.covering=e)}addLineDeco(e,t,i){let s=this.ensureLine();s.length+=i,s.collapsed+=i,s.widgetHeight=Math.max(s.widgetHeight,e),s.breaks+=t,this.writtenTo=this.pos=this.pos+i}finish(e){let t=this.nodes.length==0?null:this.nodes[this.nodes.length-1];this.lineStart>-1&&!(t instanceof ze)&&!this.isCovered?this.nodes.push(new ze(0,-1,0)):(this.writtenToc.clientHeight||c.scrollWidth>c.clientWidth)&&f.overflow!="visible"){let u=c.getBoundingClientRect();r=Math.max(r,u.left),o=Math.min(o,u.right),l=Math.max(l,u.top),a=Math.min(h==n.parentNode?s.innerHeight:a,u.bottom)}h=f.position=="absolute"||f.position=="fixed"?c.offsetParent:c.parentNode}else if(h.nodeType==11)h=h.host;else break;return{left:r-t.left,right:Math.max(r,o)-t.left,top:l-(t.top+e),bottom:Math.max(l,a)-(t.top+e)}}function bO(n){let e=n.getBoundingClientRect(),t=n.ownerDocument.defaultView||window;return e.left0&&e.top0}function xO(n,e){let t=n.getBoundingClientRect();return{left:0,right:t.right-t.left,top:e,bottom:t.bottom-(t.top+e)}}var Ji=class{constructor(e,t,i,s){this.from=e,this.to=t,this.size=i,this.displaySize=s}static same(e,t){if(e.length!=t.length)return!1;for(let i=0;itypeof s!="function"&&s.class=="cm-lineWrapping");this.heightOracle=new To(i),this.stateDeco=Eh(t),this.heightMap=Te.empty().applyChanges(this.stateDeco,E.empty,this.heightOracle.setDoc(t.doc),[new Ne(0,0,0,t.doc.length)]);for(let s=0;s<2&&(this.viewport=this.getViewport(0,null),!!this.updateForViewport());s++);this.updateViewportLines(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=Z.set(this.lineGaps.map(s=>s.draw(this,!1))),this.scrollParent=e.scrollDOM,this.computeVisibleRanges()}updateForViewport(){let e=[this.viewport],{main:t}=this.state.selection;for(let i=0;i<=1;i++){let s=i?t.head:t.anchor;if(!e.some(({from:r,to:o})=>s>=r&&s<=o)){let{from:r,to:o}=this.lineBlockAt(s);e.push(new Oi(r,o))}}return this.viewports=e.sort((i,s)=>i.from-s.from),this.updateScaler()}updateScaler(){let e=this.scaler;return this.scaler=this.heightMap.height<=7e6?Lh:new Xo(this.heightOracle,this.heightMap,this.viewports),e.eq(this.scaler)?0:2}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,e=>{this.viewportLines.push(qi(e,this.scaler))})}update(e,t=null){this.state=e.state;let i=this.stateDeco;this.stateDeco=Eh(this.state);let s=e.changedRanges,r=Ne.extendWithRanges(s,gO(i,this.stateDeco,e?e.changes:Oe.empty(this.state.doc.length))),o=this.heightMap.height,l=this.scrolledToBottom?null:this.scrollAnchorAt(this.scrollOffset);Rh(),this.heightMap=this.heightMap.applyChanges(this.stateDeco,e.startState.doc,this.heightOracle.setDoc(this.state.doc),r),(this.heightMap.height!=o||Qi)&&(e.flags|=2),l?(this.scrollAnchorPos=e.changes.mapPos(l.from,-1),this.scrollAnchorHeight=l.top):(this.scrollAnchorPos=-1,this.scrollAnchorHeight=o);let a=r.length?this.mapViewport(this.viewport,e.changes):this.viewport;(t&&(t.range.heada.to)||!this.viewportIsAppropriate(a))&&(a=this.getViewport(0,t));let h=a.from!=this.viewport.from||a.to!=this.viewport.to;this.viewport=a,e.flags|=this.updateForViewport(),(h||!e.changes.empty||e.flags&2)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,e.changes))),e.flags|=this.computeVisibleRanges(e.changes),t&&(this.scrollTarget=t),!this.mustEnforceCursorAssoc&&(e.selectionSet||e.focusChanged)&&e.view.lineWrapping&&e.state.selection.main.empty&&e.state.selection.main.assoc&&!e.state.facet(bc)&&(this.mustEnforceCursorAssoc=!0)}measure(){let{view:e}=this,t=e.contentDOM,i=window.getComputedStyle(t),s=this.heightOracle,r=i.whiteSpace;this.defaultTextDirection=i.direction=="rtl"?_.RTL:_.LTR;let o=this.heightOracle.mustRefreshForWrapping(r)||this.mustMeasureContent==="refresh",l=t.getBoundingClientRect(),a=o||this.mustMeasureContent||this.contentDOMHeight!=l.height;this.contentDOMHeight=l.height,this.mustMeasureContent=!1;let h=0,c=0;if(l.width&&l.height){let{scaleX:w,scaleY:k}=tc(t,l);(w>.005&&Math.abs(this.scaleX-w)>.005||k>.005&&Math.abs(this.scaleY-k)>.005)&&(this.scaleX=w,this.scaleY=k,h|=16,o=a=!0)}let f=(parseInt(i.paddingTop)||0)*this.scaleY,u=(parseInt(i.paddingBottom)||0)*this.scaleY;(this.paddingTop!=f||this.paddingBottom!=u)&&(this.paddingTop=f,this.paddingBottom=u,h|=18),this.editorWidth!=e.scrollDOM.clientWidth&&(s.lineWrapping&&(a=!0),this.editorWidth=e.scrollDOM.clientWidth,h|=16);let d=ic(this.view.contentDOM,!1).y;d!=this.scrollParent&&(this.scrollParent=d,this.scrollAnchorHeight=-1,this.scrollOffset=0);let p=this.getScrollOffset();this.scrollOffset!=p&&(this.scrollAnchorHeight=-1,this.scrollOffset=p),this.scrolledToBottom=sc(this.scrollParent||e.win);let O=(this.printing?xO:yO)(t,this.paddingTop),g=O.top-this.pixelViewport.top,y=O.bottom-this.pixelViewport.bottom;this.pixelViewport=O;let x=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(x!=this.inView&&(this.inView=x,x&&(a=!0)),!this.inView&&!this.scrollTarget&&!bO(e.dom))return 0;let S=l.width;if((this.contentDOMWidth!=S||this.editorHeight!=e.scrollDOM.clientHeight)&&(this.contentDOMWidth=l.width,this.editorHeight=e.scrollDOM.clientHeight,h|=16),a){let w=e.docView.measureVisibleLineHeights(this.viewport);if(s.mustRefreshForHeights(w)&&(o=!0),o||s.lineWrapping&&Math.abs(S-this.contentDOMWidth)>s.charWidth){let{lineHeight:k,charWidth:Q,textHeight:X}=e.docView.measureTextSize();o=k>0&&s.refresh(r,k,Q,X,Math.max(5,S/Q),w),o&&(e.docView.minWidth=0,h|=16)}g>0&&y>0?c=Math.max(g,y):g<0&&y<0&&(c=Math.min(g,y)),Rh();for(let k of this.viewports){let Q=k.from==this.viewport.from?w:e.docView.measureVisibleLineHeights(k);this.heightMap=(o?Te.empty().applyChanges(this.stateDeco,E.empty,this.heightOracle,[new Ne(0,0,0,e.state.doc.length)]):this.heightMap).updateHeight(s,0,o,new Co(k.from,Q))}Qi&&(h|=2)}let C=!this.viewportIsAppropriate(this.viewport,c)||this.scrollTarget&&(this.scrollTarget.range.headthis.viewport.to);return C&&(h&2&&(h|=this.updateScaler()),this.viewport=this.getViewport(c,this.scrollTarget),h|=this.updateForViewport()),(h&2||C)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(o?[]:this.lineGaps,e)),h|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,e.docView.enforceCursorAssoc()),h}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(e,t){let i=.5-Math.max(-.5,Math.min(.5,e/1e3/2)),s=this.heightMap,r=this.heightOracle,{visibleTop:o,visibleBottom:l}=this,a=new Oi(s.lineAt(o-i*1e3,G.ByHeight,r,0,0).from,s.lineAt(l+(1-i)*1e3,G.ByHeight,r,0,0).to);if(t){let{head:h}=t.range;if(ha.to){let c=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),f=s.lineAt(h,G.ByPos,r,0,0),u;t.y=="center"?u=(f.top+f.bottom)/2-c/2:t.y=="start"||t.y=="nearest"&&h=l+Math.max(10,Math.min(i,250)))&&s>o-2*1e3&&r>1,o=s<<1;if(this.defaultTextDirection!=_.LTR&&!i)return[];let l=[],a=(c,f,u,d)=>{if(f-cc&&yy.from>=u.from&&y.to<=u.to&&Math.abs(y.from-c)y.fromx));if(!g){if(fS.from<=f&&S.to>=f)){let S=t.moveToLineBoundary(b.cursor(f),!1,!0).head;S>c&&(f=S)}let y=this.gapSize(u,c,f,d),x=i||y<2e6?y:2e6;g=new Ji(c,f,y,x)}l.push(g)},h=c=>{if(c.length2e6)for(let k of e)k.from>=c.from&&k.fromc.from&&a(c.from,d,c,f),pt.draw(this,this.heightOracle.lineWrapping))))}computeVisibleRanges(e){let t=this.stateDeco;this.lineGaps.length&&(t=t.concat(this.lineGapDeco));let i=[];W.spans(t,this.viewport.from,this.viewport.to,{span(r,o){i.push({from:r,to:o})},point(){}},20);let s=0;if(i.length!=this.visibleRanges.length)s=12;else for(let r=0;r=this.viewport.from&&e<=this.viewport.to&&this.viewportLines.find(t=>t.from<=e&&t.to>=e)||qi(this.heightMap.lineAt(e,G.ByPos,this.heightOracle,0,0),this.scaler)}lineBlockAtHeight(e){return e>=this.viewportLines[0].top&&e<=this.viewportLines[this.viewportLines.length-1].bottom&&this.viewportLines.find(t=>t.top<=e&&t.bottom>=e)||qi(this.heightMap.lineAt(this.scaler.fromDOM(e),G.ByHeight,this.heightOracle,0,0),this.scaler)}getScrollOffset(){return(this.scrollParent==this.view.scrollDOM?this.scrollParent.scrollTop:(this.scrollParent?this.scrollParent.getBoundingClientRect().top:0)-this.view.contentDOM.getBoundingClientRect().top)*this.scaleY}scrollAnchorAt(e){let t=this.lineBlockAtHeight(e+8);return t.from>=this.viewport.from||this.viewportLines[0].top-e>200?t:this.viewportLines[0]}elementAtHeight(e){return qi(this.heightMap.blockAt(this.scaler.fromDOM(e),this.heightOracle,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}},Oi=class{constructor(e,t){this.from=e,this.to=t}};function SO(n,e,t){let i=[],s=n,r=0;return W.spans(t,n,e,{span(){},point(o,l){o>s&&(i.push({from:s,to:o}),r+=o-s),s=l}},20),s=1)return e[e.length-1].to;let i=Math.floor(n*t);for(let s=0;;s++){let{from:r,to:o}=e[s],l=o-r;if(i<=l)return r+i;i-=l}}function Hn(n,e){let t=0;for(let{from:i,to:s}of n.ranges){if(e<=s){t+=e-i;break}t+=s-i}return t/n.total}function wO(n,e){for(let t of n)if(e(t))return t}var Lh={toDOM(n){return n},fromDOM(n){return n},scale:1,eq(n){return n==this}};function Eh(n){let e=n.facet($s).filter(i=>typeof i!="function"),t=n.facet(nl).filter(i=>typeof i!="function");return t.length&&e.push(W.join(t)),e}var Xo=class n{constructor(e,t,i){let s=0,r=0,o=0;this.viewports=i.map(({from:l,to:a})=>{let h=t.lineAt(l,G.ByPos,e,0,0).top,c=t.lineAt(a,G.ByPos,e,0,0).bottom;return s+=c-h,{from:l,to:a,top:h,bottom:c,domTop:0,domBottom:0}}),this.scale=(7e6-s)/(t.height-s);for(let l of this.viewports)l.domTop=o+(l.top-r)*this.scale,o=l.domBottom=l.domTop+(l.bottom-l.top),r=l.bottom}toDOM(e){for(let t=0,i=0,s=0;;t++){let r=tt.from==e.viewports[i].from&&t.to==e.viewports[i].to):!1}};function qi(n,e){if(e.scale==1)return n;let t=e.toDOM(n.top),i=e.toDOM(n.bottom);return new je(n.from,n.length,t,i-t,Array.isArray(n._content)?n._content.map(s=>qi(s,e)):n._content)}var Kn=$.define({combine:n=>n.join(" ")}),Lo=$.define({combine:n=>n.indexOf(!0)>-1}),Eo=Be.newName(),zc=Be.newName(),_c=Be.newName(),Ic={"&light":"."+zc,"&dark":"."+_c};function Do(n,e,t){return new Be(e,{finish(i){return/&/.test(i)?i.replace(/&\w*/,s=>{if(s=="&")return n;if(!t||!t[s])throw new RangeError(`Unsupported selector: ${s}`);return t[s]}):n+" "+i}})}var kO=Do("."+Eo,{"&":{position:"relative !important",boxSizing:"border-box","&.cm-focused":{outline:"1px dotted #212121"},display:"flex !important",flexDirection:"column"},".cm-scroller":{display:"flex !important",alignItems:"flex-start !important",fontFamily:"monospace",lineHeight:1.4,height:"100%",overflowX:"auto",position:"relative",zIndex:0,overflowAnchor:"none"},".cm-content":{margin:0,flexGrow:2,flexShrink:0,display:"block",whiteSpace:"pre",wordWrap:"normal",boxSizing:"border-box",minHeight:"100%",padding:"4px 0",outline:"none","&[contenteditable=true]":{WebkitUserModify:"read-write-plaintext-only"}},".cm-lineWrapping":{whiteSpace_fallback:"pre-wrap",whiteSpace:"break-spaces",wordBreak:"break-word",overflowWrap:"anywhere",flexShrink:1},"&light .cm-content":{caretColor:"black"},"&dark .cm-content":{caretColor:"white"},".cm-line":{display:"block",padding:"0 2px 0 6px"},".cm-layer":{position:"absolute",left:0,top:0,contain:"size style","& > *":{position:"absolute"}},"&light .cm-selectionBackground":{background:"#d9d9d9"},"&dark .cm-selectionBackground":{background:"#222"},"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#d7d4f0"},"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#233"},".cm-cursorLayer":{pointerEvents:"none"},"&.cm-focused > .cm-scroller > .cm-cursorLayer":{animation:"steps(1) cm-blink 1.2s infinite"},"@keyframes cm-blink":{"0%":{},"50%":{opacity:0},"100%":{}},"@keyframes cm-blink2":{"0%":{},"50%":{opacity:0},"100%":{}},".cm-cursor, .cm-dropCursor":{borderLeft:"1.2px solid black",marginLeft:"-0.6px",pointerEvents:"none"},".cm-cursor":{display:"none"},"&dark .cm-cursor":{borderLeftColor:"#ddd"},".cm-selectionHandle":{backgroundColor:"currentColor",width:"1.5px"},".cm-selectionHandle-start::before, .cm-selectionHandle-end::before":{content:'""',backgroundColor:"inherit",borderRadius:"50%",width:"8px",height:"8px",position:"absolute",left:"-3.25px"},".cm-selectionHandle-start::before":{top:"-8px"},".cm-selectionHandle-end::before":{bottom:"-8px"},".cm-dropCursor":{position:"absolute"},"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor":{display:"block"},".cm-iso":{unicodeBidi:"isolate"},".cm-announced":{position:"fixed",top:"-10000px"},"@media print":{".cm-announced":{display:"none"}},"&light .cm-activeLine":{backgroundColor:"#cceeff44"},"&dark .cm-activeLine":{backgroundColor:"#99eeff33"},"&light .cm-specialChar":{color:"red"},"&dark .cm-specialChar":{color:"#f78"},".cm-gutters":{flexShrink:0,display:"flex",height:"100%",boxSizing:"border-box",zIndex:200},".cm-gutters-before":{insetInlineStart:0},".cm-gutters-after":{insetInlineEnd:0},"&light .cm-gutters":{backgroundColor:"#f5f5f5",color:"#6c6c6c",border:"0px solid #ddd","&.cm-gutters-before":{borderRightWidth:"1px"},"&.cm-gutters-after":{borderLeftWidth:"1px"}},"&dark .cm-gutters":{backgroundColor:"#333338",color:"#ccc"},".cm-gutter":{display:"flex !important",flexDirection:"column",flexShrink:0,boxSizing:"border-box",minHeight:"100%",overflow:"hidden"},".cm-gutterElement":{boxSizing:"border-box"},".cm-lineNumbers .cm-gutterElement":{padding:"0 3px 0 5px",minWidth:"20px",textAlign:"right",whiteSpace:"nowrap"},"&light .cm-activeLineGutter":{backgroundColor:"#e2f2ff"},"&dark .cm-activeLineGutter":{backgroundColor:"#222227"},".cm-panels":{boxSizing:"border-box",position:"sticky",left:0,right:0,zIndex:300},"&light .cm-panels":{backgroundColor:"#f5f5f5",color:"black"},"&light .cm-panels-top":{borderBottom:"1px solid #ddd"},"&light .cm-panels-bottom":{borderTop:"1px solid #ddd"},"&dark .cm-panels":{backgroundColor:"#333338",color:"white"},".cm-dialog":{padding:"2px 19px 4px 6px",position:"relative","& label":{fontSize:"80%"}},".cm-dialog-close":{position:"absolute",top:"3px",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",fontSize:"14px",padding:"0"},".cm-tab":{display:"inline-block",overflow:"hidden",verticalAlign:"bottom"},".cm-widgetBuffer":{verticalAlign:"text-top",height:"1em",width:0,display:"inline"},".cm-placeholder":{color:"#888",display:"inline-block",verticalAlign:"top",userSelect:"none"},".cm-highlightSpace":{backgroundImage:"radial-gradient(circle at 50% 55%, #aaa 20%, transparent 5%)",backgroundPosition:"center"},".cm-highlightTab":{backgroundImage:`url('data:image/svg+xml,')`,backgroundSize:"auto 100%",backgroundPosition:"right 90%",backgroundRepeat:"no-repeat"},".cm-trailingSpace":{backgroundColor:"#ff332255"},".cm-button":{verticalAlign:"middle",color:"inherit",fontSize:"70%",padding:".2em 1em",borderRadius:"1px"},"&light .cm-button":{backgroundImage:"linear-gradient(#eff1f5, #d9d9df)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#b4b4b4, #d0d3d6)"}},"&dark .cm-button":{backgroundImage:"linear-gradient(#393939, #111)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#111, #333)"}},".cm-textfield":{verticalAlign:"middle",color:"inherit",fontSize:"70%",border:"1px solid silver",padding:".2em .5em"},"&light .cm-textfield":{backgroundColor:"white"},"&dark .cm-textfield":{border:"1px solid #555",backgroundColor:"inherit"}},Ic),QO={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},Fr=T.ie&&T.ie_version<=11,Wo=class{constructor(e){this.view=e,this.active=!1,this.editContext=null,this.selectionRange=new oo,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.printQuery=null,this.parentCheck=-1,this.dom=e.contentDOM,this.observer=new MutationObserver(t=>{for(let i of t)this.queue.push(i);(T.ie&&T.ie_version<=11||T.ios&&e.composing)&&t.some(i=>i.type=="childList"&&i.removedNodes.length||i.type=="characterData"&&i.oldValue.length>i.target.nodeValue.length)?this.flushSoon():this.flush()}),window.EditContext&&T.android&&e.constructor.EDIT_CONTEXT!==!1&&!(T.chrome&&T.chrome_version<126)&&(this.editContext=new Bo(e),e.state.facet(ut)&&(e.contentDOM.editContext=this.editContext.editContext)),Fr&&(this.onCharData=t=>{this.queue.push({target:t.target,type:"characterData",oldValue:t.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),window.matchMedia&&(this.printQuery=window.matchMedia("print")),typeof ResizeObserver=="function"&&(this.resizeScroll=new ResizeObserver(()=>{var t;((t=this.view.docView)===null||t===void 0?void 0:t.lastUpdate){this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),t.length>0&&t[t.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent("Event")))},{threshold:[0,.001]}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver(t=>{t.length>0&&t[t.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent("Event"))},{})),this.listenForScroll(),this.readSelectionRange()}onScrollChanged(e){this.view.inputState.runHandlers("scroll",e),this.intersecting&&this.view.measure()}onScroll(e){this.intersecting&&this.flush(!1),this.editContext&&this.view.requestMeasure(this.editContext.measureReq),this.onScrollChanged(e)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout(()=>{this.resizeTimeout=-1,this.view.requestMeasure()},50))}onPrint(e){(e.type=="change"||!e.type)&&!e.matches||(this.view.viewState.printing=!0,this.view.measure(),setTimeout(()=>{this.view.viewState.printing=!1,this.view.requestMeasure()},500))}updateGaps(e){if(this.gapIntersection&&(e.length!=this.gaps.length||this.gaps.some((t,i)=>t!=e[i]))){this.gapIntersection.disconnect();for(let t of e)this.gapIntersection.observe(t);this.gaps=e}}onSelectionChange(e){let t=this.selectionChanged;if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:i}=this,s=this.selectionRange;if(i.state.facet(ut)?i.root.activeElement!=this.dom:!Ni(this.dom,s))return;let r=s.anchorNode&&i.docView.tile.nearest(s.anchorNode);if(r&&r.isWidget()&&r.widget.ignoreEvent(e)){t||(this.selectionChanged=!1);return}(T.ie&&T.ie_version<=11||T.android&&T.chrome)&&!i.state.selection.main.empty&&s.focusNode&&Gi(s.focusNode,s.focusOffset,s.anchorNode,s.anchorOffset)?this.flushSoon():this.flush(!1)}readSelectionRange(){let{view:e}=this,t=rn(e.root);if(!t)return!1;let i=T.safari&&e.root.nodeType==11&&e.root.activeElement==this.dom&&vO(this.view,t)||t;if(!i||this.selectionRange.eq(i))return!1;let s=Ni(this.dom,i);return s&&!this.selectionChanged&&e.inputState.lastFocusTime>Date.now()-200&&e.inputState.lastTouchTime{let r=this.delayedAndroidKey;r&&(this.clearDelayedAndroidKey(),this.view.inputState.lastKeyCode=r.keyCode,this.view.inputState.lastKeyTime=Date.now(),!this.flush()&&r.force&&bi(this.dom,r.key,r.keyCode))};this.flushingAndroidKey=this.view.win.requestAnimationFrame(s)}(!this.delayedAndroidKey||e=="Enter")&&(this.delayedAndroidKey={key:e,keyCode:t,force:this.lastChange{this.delayedFlush=-1,this.flush()}))}forceFlush(){this.delayedFlush>=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()}pendingRecords(){for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}processRecords(){let e=this.pendingRecords();e.length&&(this.queue=[]);let t=-1,i=-1,s=!1;for(let r of e){let o=this.readMutation(r);o&&(o.typeOver&&(s=!0),t==-1?{from:t,to:i}=o:(t=Math.min(o.from,t),i=Math.max(o.to,i)))}return{from:t,to:i,typeOver:s}}readChange(){let{from:e,to:t,typeOver:i}=this.processRecords(),s=this.selectionChanged&&Ni(this.dom,this.selectionRange);if(e<0&&!s)return null;e>-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1;let r=new Qo(this.view,e,t,i);return this.view.docView.domChanged={newSel:r.newSel?r.newSel.main:null},r}flush(e=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return!1;e&&this.readSelectionRange();let t=this.readChange();if(!t)return this.view.requestMeasure(),!1;let i=this.view.state,s=Zc(this.view,t);return this.view.state==i&&(t.domChanged||t.newSel&&!Os(this.view.state.selection,t.newSel.main))&&this.view.update([]),s}readMutation(e){let t=this.view.docView.tile.nearest(e.target);if(!t||t.isWidget())return null;if(t.markDirty(e.type=="attributes"),e.type=="childList"){let i=Dh(t,e.previousSibling||e.target.previousSibling,-1),s=Dh(t,e.nextSibling||e.target.nextSibling,1);return{from:i?t.posAfter(i):t.posAtStart,to:s?t.posBefore(s):t.posAtEnd,typeOver:!1}}else return e.type=="characterData"?{from:t.posAtStart,to:t.posAtEnd,typeOver:e.target.nodeValue==e.oldValue}:null}setWindow(e){e!=this.win&&(this.removeWindowListeners(this.win),this.win=e,this.addWindowListeners(this.win))}addWindowListeners(e){e.addEventListener("resize",this.onResize),this.printQuery?this.printQuery.addEventListener?this.printQuery.addEventListener("change",this.onPrint):this.printQuery.addListener(this.onPrint):e.addEventListener("beforeprint",this.onPrint),e.addEventListener("scroll",this.onScroll),e.document.addEventListener("selectionchange",this.onSelectionChange)}removeWindowListeners(e){e.removeEventListener("scroll",this.onScroll),e.removeEventListener("resize",this.onResize),this.printQuery?this.printQuery.removeEventListener?this.printQuery.removeEventListener("change",this.onPrint):this.printQuery.removeListener(this.onPrint):e.removeEventListener("beforeprint",this.onPrint),e.document.removeEventListener("selectionchange",this.onSelectionChange)}update(e){this.editContext&&(this.editContext.update(e),e.startState.facet(ut)!=e.state.facet(ut)&&(e.view.contentDOM.editContext=e.state.facet(ut)?this.editContext.editContext:null))}destroy(){var e,t,i;this.stop(),(e=this.intersection)===null||e===void 0||e.disconnect(),(t=this.gapIntersection)===null||t===void 0||t.disconnect(),(i=this.resizeScroll)===null||i===void 0||i.disconnect();for(let s of this.scrollTargets)s.removeEventListener("scroll",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout),this.win.cancelAnimationFrame(this.delayedFlush),this.win.cancelAnimationFrame(this.flushingAndroidKey),this.editContext&&(this.view.contentDOM.editContext=null,this.editContext.destroy())}};function Dh(n,e,t){for(;e;){let i=F.get(e);if(i&&i.parent==n)return i;let s=e.parentNode;e=s!=n.dom?s:t>0?e.nextSibling:e.previousSibling}return null}function Wh(n,e){let t=e.startContainer,i=e.startOffset,s=e.endContainer,r=e.endOffset,o=n.docView.domAtPos(n.state.selection.main.anchor,1);return Gi(o.node,o.offset,s,r)&&([t,i,s,r]=[s,r,t,i]),{anchorNode:t,anchorOffset:i,focusNode:s,focusOffset:r}}function vO(n,e){if(e.getComposedRanges){let s=e.getComposedRanges(n.root)[0];if(s)return Wh(n,s)}let t=null;function i(s){s.preventDefault(),s.stopImmediatePropagation(),t=s.getTargetRanges()[0]}return n.contentDOM.addEventListener("beforeinput",i,!0),n.dom.ownerDocument.execCommand("indent"),n.contentDOM.removeEventListener("beforeinput",i,!0),t?Wh(n,t):null}var Bo=class{constructor(e){this.from=0,this.to=0,this.pendingContextChange=null,this.handlers=Object.create(null),this.composing=null,this.resetRange(e.state);let t=this.editContext=new window.EditContext({text:e.state.doc.sliceString(this.from,this.to),selectionStart:this.toContextPos(Math.max(this.from,Math.min(this.to,e.state.selection.main.anchor))),selectionEnd:this.toContextPos(e.state.selection.main.head)});this.handlers.textupdate=i=>{let s=e.state.selection.main,{anchor:r,head:o}=s,l=this.toEditorPos(i.updateRangeStart),a=this.toEditorPos(i.updateRangeEnd);e.inputState.composing>=0&&!this.composing&&(this.composing={contextBase:i.updateRangeStart,editorBase:l,drifted:!1});let h=a-l>i.text.length;l==this.from&&rthis.to&&(a=r);let c=Ac(e.state.sliceDoc(l,a),i.text,(h?s.from:s.to)-l,h?"end":null);if(!c){let u=b.single(this.toEditorPos(i.selectionStart),this.toEditorPos(i.selectionEnd));Os(u,s)||e.dispatch({selection:u,userEvent:"select"});return}let f={from:c.from+l,to:c.toA+l,insert:E.of(i.text.slice(c.from,c.toB).split(` -`))};if((T.mac||T.android)&&f.from==o-1&&/^\. ?$/.test(i.text)&&e.contentDOM.getAttribute("autocorrect")=="off"&&(f={from:l,to:a,insert:E.of([i.text.replace("."," ")])}),this.pendingContextChange=f,!e.state.readOnly){let u=this.to-this.from+(f.to-f.from+f.insert.length);rl(e,f,b.single(this.toEditorPos(i.selectionStart,u),this.toEditorPos(i.selectionEnd,u)))}this.pendingContextChange&&(this.revertPending(e.state),this.setSelection(e.state)),f.from=0&&!/[\\p{Alphabetic}\\p{Number}_]/.test(t.text.slice(Math.max(0,i.updateRangeStart-1),Math.min(t.text.length,i.updateRangeStart+1)))&&this.handlers.compositionend(i)},this.handlers.characterboundsupdate=i=>{let s=[],r=null;for(let o=this.toEditorPos(i.rangeStart),l=this.toEditorPos(i.rangeEnd);o{let s=[];for(let r of i.getTextFormats()){let o=r.underlineStyle,l=r.underlineThickness;if(!/none/i.test(o)&&!/none/i.test(l)){let a=this.toEditorPos(r.rangeStart),h=this.toEditorPos(r.rangeEnd);if(a{e.inputState.composing<0&&(e.inputState.composing=0,e.inputState.compositionFirstChange=!0)},this.handlers.compositionend=()=>{if(e.inputState.composing=-1,e.inputState.compositionFirstChange=null,this.composing){let{drifted:i}=this.composing;this.composing=null,i&&this.reset(e.state)}};for(let i in this.handlers)t.addEventListener(i,this.handlers[i]);this.measureReq={read:i=>{this.editContext.updateControlBounds(i.contentDOM.getBoundingClientRect());let s=rn(i.root);s&&s.rangeCount&&this.editContext.updateSelectionBounds(s.getRangeAt(0).getBoundingClientRect())}}}applyEdits(e){let t=0,i=!1,s=this.pendingContextChange;return e.changes.iterChanges((r,o,l,a,h)=>{if(i)return;let c=h.length-(o-r);if(s&&o>=s.to)if(s.from==r&&s.to==o&&s.insert.eq(h)){s=this.pendingContextChange=null,t+=c,this.to+=c;return}else s=null,this.revertPending(e.state);if(r+=t,o+=t,o<=this.from)this.from+=c,this.to+=c;else if(rthis.to||this.to-this.from+h.length>3e4){i=!0;return}this.editContext.updateText(this.toContextPos(r),this.toContextPos(o),h.toString()),this.to+=c}t+=c}),s&&!i&&this.revertPending(e.state),!i}update(e){let t=this.pendingContextChange,i=e.startState.selection.main;this.composing&&(this.composing.drifted||!e.changes.touchesRange(i.from,i.to)&&e.transactions.some(s=>!s.isUserEvent("input.type")&&s.changes.touchesRange(this.from,this.to)))?(this.composing.drifted=!0,this.composing.editorBase=e.changes.mapPos(this.composing.editorBase)):!this.applyEdits(e)||!this.rangeIsValid(e.state)?(this.pendingContextChange=null,this.reset(e.state)):(e.docChanged||e.selectionSet||t)&&this.setSelection(e.state),(e.geometryChanged||e.docChanged||e.selectionSet)&&e.view.requestMeasure(this.measureReq)}resetRange(e){let{head:t}=e.selection.main;this.from=Math.max(0,t-1e4),this.to=Math.min(e.doc.length,t+1e4)}reset(e){this.resetRange(e),this.editContext.updateText(0,this.editContext.text.length,e.doc.sliceString(this.from,this.to)),this.setSelection(e)}revertPending(e){let t=this.pendingContextChange;this.pendingContextChange=null,this.editContext.updateText(this.toContextPos(t.from),this.toContextPos(t.from+t.insert.length),e.doc.sliceString(t.from,t.to))}setSelection(e){let{main:t}=e.selection,i=this.toContextPos(Math.max(this.from,Math.min(this.to,t.anchor))),s=this.toContextPos(t.head);(this.editContext.selectionStart!=i||this.editContext.selectionEnd!=s)&&this.editContext.updateSelection(i,s)}rangeIsValid(e){let{head:t}=e.selection.main;return!(this.from>0&&t-this.from<500||this.to1e4*3)}toEditorPos(e,t=this.to-this.from){e=Math.min(e,t);let i=this.composing;return i&&i.drifted?i.editorBase+(e-i.contextBase):e+this.from}toContextPos(e){let t=this.composing;return t&&t.drifted?t.contextBase+(e-t.editorBase):e-this.from}destroy(){for(let e in this.handlers)this.editContext.removeEventListener(e,this.handlers[e])}},v=class n{get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return!!this.inputState&&this.inputState.composing>0}get compositionStarted(){return!!this.inputState&&this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}constructor(e={}){var t;this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.contentDOM=document.createElement("div"),this.scrollDOM=document.createElement("div"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className="cm-scroller",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement("div"),this.announceDOM.className="cm-announced",this.announceDOM.setAttribute("aria-live","polite"),this.dom=document.createElement("div"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),e.parent&&e.parent.appendChild(this.dom);let{dispatch:i}=e;this.dispatchTransactions=e.dispatchTransactions||i&&(s=>s.forEach(r=>i(r,this)))||(s=>this.update(s)),this.dispatch=this.dispatch.bind(this),this._root=e.root||bp(e.parent)||document,this.viewState=new ys(this,e.state||Y.create(e)),e.scrollTo&&e.scrollTo.is(Nn)&&(this.viewState.scrollTarget=e.scrollTo.value.clip(this.viewState.state)),this.plugins=this.state.facet(pi).map(s=>new Fi(s));for(let s of this.plugins)s.update(this);this.observer=new Wo(this),this.inputState=new vo(this),this.inputState.ensureHandlers(this.plugins),this.docView=new ds(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),!((t=document.fonts)===null||t===void 0)&&t.ready&&document.fonts.ready.then(()=>{this.viewState.mustMeasureContent="refresh",this.requestMeasure()})}dispatch(...e){let t=e.length==1&&e[0]instanceof ie?e:e.length==1&&Array.isArray(e[0])?e[0]:[this.state.update(...e)];this.dispatchTransactions(t,this)}update(e){if(this.updateState!=0)throw new Error("Calls to EditorView.update are not allowed while an update is in progress");let t=!1,i=!1,s,r=this.state;for(let u of e){if(u.startState!=r)throw new RangeError("Trying to update state with a transaction that doesn't start from the previous state.");r=u.state}if(this.destroyed){this.viewState.state=r;return}let o=this.hasFocus,l=0,a=null;e.some(u=>u.annotation(Dc))?(this.inputState.notifiedFocused=o,l=1):o!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=o,a=Wc(r,o),a||(l=1));let h=this.observer.delayedAndroidKey,c=null;if(h?(this.observer.clearDelayedAndroidKey(),c=this.observer.readChange(),(c&&!this.state.doc.eq(r.doc)||!this.state.selection.eq(r.selection))&&(c=null)):this.observer.clear(),r.facet(Y.phrases)!=this.state.facet(Y.phrases))return this.setState(r);s=fs.create(this,r,e),s.flags|=l;let f=this.viewState.scrollTarget;try{this.updateState=2;for(let u of e){if(f&&(f=f.map(u.changes)),u.scrollIntoView){let{main:d}=u.state.selection,{x:p,y:O}=this.state.facet(n.cursorScrollMargin);f=new Ui(d.empty?d:b.cursor(d.head,d.head>d.anchor?-1:1),"nearest","nearest",O,p)}for(let d of u.effects)d.is(Nn)&&(f=d.value.clip(this.state))}this.viewState.update(s,f),this.bidiCache=bs.update(this.bidiCache,s.changes),s.empty||(this.updatePlugins(s),this.inputState.update(s)),t=this.docView.update(s),this.state.facet(Vi)!=this.styleModules&&this.mountStyles(),i=this.updateAttrs(),this.showAnnouncements(e),this.docView.updateSelection(t,e.some(u=>u.isUserEvent("select.pointer")))}finally{this.updateState=0}if(s.startState.facet(Kn)!=s.state.facet(Kn)&&(this.viewState.mustMeasureContent=!0),(t||i||f||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),t&&this.docViewUpdate(),!s.empty)for(let u of this.state.facet(co))try{u(s)}catch(d){ae(this.state,d,"update listener")}(a||c)&&Promise.resolve().then(()=>{a&&this.state==a.startState&&this.dispatch(a),c&&!Zc(this,c)&&h.force&&bi(this.contentDOM,h.key,h.keyCode)})}setState(e){if(this.updateState!=0)throw new Error("Calls to EditorView.setState are not allowed while an update is in progress");if(this.destroyed){this.viewState.state=e;return}this.updateState=2;let t=this.hasFocus;try{for(let i of this.plugins)i.destroy(this);this.viewState=new ys(this,e),this.plugins=e.facet(pi).map(i=>new Fi(i)),this.pluginMap.clear();for(let i of this.plugins)i.update(this);this.docView.destroy(),this.docView=new ds(this),this.inputState.ensureHandlers(this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}t&&this.focus(),this.requestMeasure()}updatePlugins(e){let t=e.startState.facet(pi),i=e.state.facet(pi);if(t!=i){let s=[];for(let r of i){let o=t.indexOf(r);if(o<0)s.push(new Fi(r));else{let l=this.plugins[o];l.mustUpdate=e,s.push(l)}}for(let r of this.plugins)r.mustUpdate!=e&&r.destroy(this);this.plugins=s,this.pluginMap.clear()}else for(let s of this.plugins)s.mustUpdate=e;for(let s=0;s-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.observer.delayedAndroidKey){this.measureScheduled=-1,this.requestMeasure();return}this.measureScheduled=0,e&&this.observer.forceFlush();let t=null,i=this.viewState.scrollParent,s=this.viewState.getScrollOffset(),{scrollAnchorPos:r,scrollAnchorHeight:o}=this.viewState;Math.abs(s-this.viewState.scrollOffset)>1&&(o=-1),this.viewState.scrollAnchorHeight=-1;try{for(let l=0;;l++){if(o<0)if(sc(i||this.win))r=-1,o=this.viewState.heightMap.height;else{let d=this.viewState.scrollAnchorAt(s);r=d.from,o=d.top}this.updateState=1;let a=this.viewState.measure();if(!a&&!this.measureRequests.length&&this.viewState.scrollTarget==null)break;if(l>5){console.warn(this.measureRequests.length?"Measure loop restarted more than 5 times":"Viewport failed to stabilize");break}let h=[];a&4||([this.measureRequests,h]=[h,this.measureRequests]);let c=h.map(d=>{try{return d.read(this)}catch(p){return ae(this.state,p),Bh}}),f=fs.create(this,this.state,[]),u=!1;f.flags|=a,t?t.flags|=a:t=f,this.updateState=2,f.empty||(this.updatePlugins(f),this.inputState.update(f),this.updateAttrs(),u=this.docView.update(f),u&&this.docViewUpdate());for(let d=0;d1||p<-1)&&(i==this.scrollDOM||this.hasFocus||Math.max(this.inputState.lastWheelEvent,this.inputState.lastTouchTime)>Date.now()-100)){s=s+p,i?i.scrollTop+=p:this.win.scrollBy(0,p),o=-1;continue}}break}}}finally{this.updateState=0,this.measureScheduled=-1}if(t&&!t.empty)for(let l of this.state.facet(co))l(t)}get themeClasses(){return Eo+" "+(this.state.facet(Lo)?_c:zc)+" "+this.state.facet(Kn)}updateAttrs(){let e=zh(this,wc,{class:"cm-editor"+(this.hasFocus?" cm-focused ":" ")+this.themeClasses}),t={spellcheck:"false",autocorrect:"off",autocapitalize:"off",writingsuggestions:"false",translate:"no",contenteditable:this.state.facet(ut)?"true":"false",class:"cm-content",style:`${T.tabSize}: ${this.state.tabSize}`,role:"textbox","aria-multiline":"true"};this.state.readOnly&&(t["aria-readonly"]="true"),zh(this,il,t);let i=this.observer.ignore(()=>{let s=yh(this.contentDOM,this.contentAttrs,t),r=yh(this.dom,this.editorAttrs,e);return s||r});return this.editorAttrs=e,this.contentAttrs=t,i}showAnnouncements(e){let t=!0;for(let i of e)for(let s of i.effects)if(s.is(n.announce)){t&&(this.announceDOM.textContent=""),t=!1;let r=this.announceDOM.appendChild(document.createElement("div"));r.textContent=s.value}}mountStyles(){this.styleModules=this.state.facet(Vi);let e=this.state.facet(n.cspNonce);Be.mount(this.root,this.styleModules.concat(kO).reverse(),e?{nonce:e}:void 0)}readMeasured(){if(this.updateState==2)throw new Error("Reading the editor layout isn't allowed during an update");this.updateState==0&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(e){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame(()=>this.measure())),e){if(this.measureRequests.indexOf(e)>-1)return;if(e.key!=null){for(let t=0;ti.plugin==e)||null),t&&t.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}get scaleX(){return this.viewState.scaleX}get scaleY(){return this.viewState.scaleY}elementAtHeight(e){return this.readMeasured(),this.viewState.elementAtHeight(e)}lineBlockAtHeight(e){return this.readMeasured(),this.viewState.lineBlockAtHeight(e)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(e){return this.viewState.lineBlockAt(e)}get contentHeight(){return this.viewState.contentHeight}moveByChar(e,t,i){return Ur(this,e,Qh(this,e,t,i))}moveByGroup(e,t){return Ur(this,e,Qh(this,e,t,i=>Gp(this,e.head,i)))}visualLineSide(e,t){let i=this.bidiSpans(e),s=this.textDirectionAt(e.from),r=i[t?i.length-1:0];return b.cursor(r.side(t,s)+e.from,r.forward(!t,s)?1:-1)}moveToLineBoundary(e,t,i=!0){return Np(this,e,t,i)}moveVertically(e,t,i){return Ur(this,e,Up(this,e,t,i))}domAtPos(e,t=1){return this.docView.domAtPos(e,t)}posAtDOM(e,t=0){return this.docView.posFromDOM(e,t)}posAtCoords(e,t=!0){this.readMeasured();let i=So(this,e,t);return i&&i.pos}posAndSideAtCoords(e,t=!0){return this.readMeasured(),So(this,e,t)}coordsAtPos(e,t=1){this.readMeasured();let i=this.docView.coordsAt(e,t);if(!i||i.left==i.right)return i;let s=this.state.doc.lineAt(e),r=this.bidiSpans(s),o=r[Ie.find(r,e-s.from,-1,t)];return cs(i,o.dir==_.LTR==t>0)}coordsForChar(e){return this.readMeasured(),this.docView.coordsForChar(e)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(e){return!this.state.facet(yc)||ethis.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(e))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(e){if(e.length>$O)return cc(e.length);let t=this.textDirectionAt(e.from),i;for(let r of this.bidiCache)if(r.from==e.from&&r.dir==t&&(r.fresh||hc(r.isolates,i=Sh(this,e))))return r.order;i||(i=Sh(this,e));let s=Pp(e.text,t,i);return this.bidiCache.push(new bs(e.from,e.to,t,i,!0,s)),s}get hasFocus(){var e;return(this.dom.ownerDocument.hasFocus()||T.safari&&((e=this.inputState)===null||e===void 0?void 0:e.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore(()=>{nc(this.contentDOM),this.docView.updateSelection()})}setRoot(e){this._root!=e&&(this._root=e,this.observer.setWindow((e.nodeType==9?e:e.ownerDocument).defaultView||window),this.mountStyles())}destroy(){this.root.activeElement==this.contentDOM&&this.contentDOM.blur();for(let e of this.plugins)e.destroy(this);this.plugins=[],this.inputState.destroy(),this.docView.destroy(),this.dom.remove(),this.observer.destroy(),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(e,t={}){var i,s,r,o;return Nn.of(new Ui(typeof e=="number"?b.cursor(e):e,(i=t.y)!==null&&i!==void 0?i:"nearest",(s=t.x)!==null&&s!==void 0?s:"nearest",(r=t.yMargin)!==null&&r!==void 0?r:5,(o=t.xMargin)!==null&&o!==void 0?o:5))}scrollSnapshot(){let{scrollTop:e,scrollLeft:t}=this.scrollDOM,i=this.viewState.scrollAnchorAt(e);return Nn.of(new Ui(b.cursor(i.from),"start","start",i.top-e,t,!0))}setTabFocusMode(e){e==null?this.inputState.tabFocusMode=this.inputState.tabFocusMode<0?0:-1:typeof e=="boolean"?this.inputState.tabFocusMode=e?0:-1:this.inputState.tabFocusMode!=0&&(this.inputState.tabFocusMode=Date.now()+e)}static domEventHandlers(e){return H.define(()=>({}),{eventHandlers:e})}static domEventObservers(e){return H.define(()=>({}),{eventObservers:e})}static theme(e,t){let i=Be.newName(),s=[Kn.of(i),Vi.of(Do(`.${i}`,e))];return t&&t.dark&&s.push(Lo.of(!0)),s}static baseTheme(e){return xe.lowest(Vi.of(Do("."+Eo,e,Ic)))}static findFromDOM(e){var t;let i=e.querySelector(".cm-content"),s=i&&F.get(i)||F.get(e);return((t=s?.root)===null||t===void 0?void 0:t.view)||null}};v.styleModule=Vi;v.inputHandler=mc;v.clipboardInputFilter=el;v.clipboardOutputFilter=tl;v.scrollHandler=xc;v.focusChangeEffect=gc;v.perLineTextDirection=yc;v.exceptionSink=Oc;v.updateListener=co;v.editable=ut;v.mouseSelectionStyle=pc;v.dragMovesSelection=dc;v.clickAddsSelectionRange=uc;v.decorations=$s;v.blockWrappers=kc;v.outerDecorations=nl;v.atomicRanges=ln;v.bidiIsolatedRanges=Qc;v.cursorScrollMargin=$.define({combine:n=>{let e=5,t=5;for(let i of n)typeof i=="number"?e=t=i:{x:e,y:t}=i;return{x:e,y:t}}});v.scrollMargins=vc;v.darkTheme=Lo;v.cspNonce=$.define({combine:n=>n.length?n[0]:""});v.contentAttributes=il;v.editorAttributes=wc;v.lineWrapping=v.contentAttributes.of({class:"cm-lineWrapping"});v.announce=A.define();var $O=4096,Bh={},bs=class n{constructor(e,t,i,s,r,o){this.from=e,this.to=t,this.dir=i,this.isolates=s,this.fresh=r,this.order=o}static update(e,t){if(t.empty&&!e.some(r=>r.fresh))return e;let i=[],s=e.length?e[e.length-1].dir:_.LTR;for(let r=Math.max(0,e.length-10);r=0;s--){let r=i[s],o=typeof r=="function"?r(n):r;o&&Ho(o,t)}return t}var PO=T.mac?"mac":T.windows?"win":T.linux?"linux":"key";function TO(n,e){let t=n.split(/-(?!$)/),i=t[t.length-1];i=="Space"&&(i=" ");let s,r,o,l;for(let a=0;ai.concat(s),[]))),t}function Vc(n,e,t){return qc(Yc(n.state),e,n,t)}var xt=null,ZO=4e3;function AO(n,e=PO){let t=Object.create(null),i=Object.create(null),s=(o,l)=>{let a=i[o];if(a==null)i[o]=l;else if(a!=l)throw new Error("Key binding "+o+" is used both as a regular binding and as a multi-stroke prefix")},r=(o,l,a,h,c)=>{var f,u;let d=t[o]||(t[o]=Object.create(null)),p=l.split(/ (?!$)/).map(y=>TO(y,e));for(let y=1;y{let C=xt={view:S,prefix:x,scope:o};return setTimeout(()=>{xt==C&&(xt=null)},ZO),!0}]})}let O=p.join(" ");s(O,!1);let g=d[O]||(d[O]={preventDefault:!1,stopPropagation:!1,run:((u=(f=d._any)===null||f===void 0?void 0:f.run)===null||u===void 0?void 0:u.slice())||[]});a&&g.run.push(a),h&&(g.preventDefault=!0),c&&(g.stopPropagation=!0)};for(let o of n){let l=o.scope?o.scope.split(" "):["editor"];if(o.any)for(let h of l){let c=t[h]||(t[h]=Object.create(null));c._any||(c._any={preventDefault:!1,stopPropagation:!1,run:[]});let{any:f}=o;for(let u in c)c[u].run.push(d=>f(d,zo))}let a=o[e]||o.key;if(a)for(let h of l)r(h,a,o.run,o.preventDefault,o.stopPropagation),o.shift&&r(h,"Shift-"+a,o.shift,o.preventDefault,o.stopPropagation)}return t}var zo=null;function qc(n,e,t,i){zo=e;let s=dh(e),r=le(s,0),o=Pe(r)==s.length&&s!=" ",l="",a=!1,h=!1,c=!1;xt&&xt.view==t&&xt.scope==i&&(l=xt.prefix+" ",Rc.indexOf(e.keyCode)<0&&(h=!0,xt=null));let f=new Set,u=g=>{if(g){for(let y of g.run)if(!f.has(y)&&(f.add(y),y(t)))return g.stopPropagation&&(c=!0),!0;g.preventDefault&&(g.stopPropagation&&(c=!0),h=!0)}return!1},d=n[i],p,O;return d&&(u(d[l+Jn(s,e,!o)])?a=!0:o&&(e.altKey||e.metaKey||e.ctrlKey)&&!(T.windows&&e.ctrlKey&&e.altKey)&&!(T.mac&&e.altKey&&!(e.ctrlKey||e.metaKey))&&(p=ft[e.keyCode])&&p!=s?(u(d[l+Jn(p,e,!0)])||e.shiftKey&&(O=ui[e.keyCode])!=s&&O!=p&&u(d[l+Jn(O,e,!1)]))&&(a=!0):o&&e.shiftKey&&u(d[l+Jn(s,e,!0)])&&(a=!0),!a&&u(d._any)&&(a=!0)),h&&(a=!0),a&&c&&e.stopPropagation(),zo=null,a}var It=class n{constructor(e,t,i,s,r){this.className=e,this.left=t,this.top=i,this.width=s,this.height=r}draw(){let e=document.createElement("div");return e.className=this.className,this.adjust(e),e}update(e,t){return t.className!=this.className?!1:(this.adjust(e),!0)}adjust(e){e.style.left=this.left+"px",e.style.top=this.top+"px",this.width!=null&&(e.style.width=this.width+"px"),e.style.height=this.height+"px"}eq(e){return this.left==e.left&&this.top==e.top&&this.width==e.width&&this.height==e.height&&this.className==e.className}static forRange(e,t,i){if(i.empty){let s=e.coordsAtPos(i.head,i.assoc||1);if(!s)return[];let r=jc(e);return[new n(t,s.left-r.left,s.top-r.top,null,s.bottom-s.top)]}else return MO(e,t,i)}};function jc(n){let e=n.scrollDOM.getBoundingClientRect();return{left:(n.textDirection==_.LTR?e.left:e.right-n.scrollDOM.clientWidth*n.scaleX)-n.scrollDOM.scrollLeft*n.scaleX,top:e.top-n.scrollDOM.scrollTop*n.scaleY}}function Ih(n,e,t,i){let s=n.coordsAtPos(e,t*2);if(!s)return i;let r=n.dom.getBoundingClientRect(),o=(s.top+s.bottom)/2,l=n.posAtCoords({x:r.left+1,y:o}),a=n.posAtCoords({x:r.right-1,y:o});return l==null||a==null?i:{from:Math.max(i.from,Math.min(l,a)),to:Math.min(i.to,Math.max(l,a))}}function MO(n,e,t){if(t.to<=n.viewport.from||t.from>=n.viewport.to)return[];let i=Math.max(t.from,n.viewport.from),s=Math.min(t.to,n.viewport.to),r=n.textDirection==_.LTR,o=n.contentDOM,l=o.getBoundingClientRect(),a=jc(n),h=o.querySelector(".cm-line"),c=h&&window.getComputedStyle(h),f=l.left+(c?parseInt(c.paddingLeft)+Math.min(0,parseInt(c.textIndent)):0),u=l.right-(c?parseInt(c.paddingRight):0),d=xo(n,i,1),p=xo(n,s,-1),O=d.type==he.Text?d:null,g=p.type==he.Text?p:null;if(O&&(n.lineWrapping||d.widgetLineBreaks)&&(O=Ih(n,i,1,O)),g&&(n.lineWrapping||p.widgetLineBreaks)&&(g=Ih(n,s,-1,g)),O&&g&&O.from==g.from&&O.to==g.to)return x(S(t.from,t.to,O));{let w=O?S(t.from,null,O):C(d,!1),k=g?S(null,t.to,g):C(p,!0),Q=[];return(O||d).to<(g||p).from-(O&&g?1:0)||d.widgetLineBreaks>1&&w.bottom+n.defaultLineHeight/2M&&z.from=pe)break;Le>N&&L(Math.max(oe,N),w==null&&oe<=M,Math.min(Le,pe),k==null&&Le>=I,tt.dir)}if(N=Qe.to+1,N>=pe)break}return q.length==0&&L(M,w==null,I,k==null,n.textDirection),{top:X,bottom:D,horizontal:q}}function C(w,k){let Q=l.top+(k?w.top:w.bottom);return{top:Q,bottom:Q,horizontal:[]}}}function RO(n,e){return n.constructor==e.constructor&&n.eq(e)}var _o=class{constructor(e,t){this.view=e,this.layer=t,this.drawn=[],this.scaleX=1,this.scaleY=1,this.measureReq={read:this.measure.bind(this),write:this.draw.bind(this)},this.dom=e.scrollDOM.appendChild(document.createElement("div")),this.dom.classList.add("cm-layer"),t.above&&this.dom.classList.add("cm-layer-above"),t.class&&this.dom.classList.add(t.class),this.scale(),this.dom.setAttribute("aria-hidden","true"),this.setOrder(e.state),e.requestMeasure(this.measureReq),t.mount&&t.mount(this.dom,e)}update(e){e.startState.facet(ss)!=e.state.facet(ss)&&this.setOrder(e.state),(this.layer.update(e,this.dom)||e.geometryChanged)&&(this.scale(),e.view.requestMeasure(this.measureReq))}docViewUpdate(e){this.layer.updateOnDocViewUpdate!==!1&&e.requestMeasure(this.measureReq)}setOrder(e){let t=0,i=e.facet(ss);for(;t!RO(t,this.drawn[i]))){let t=this.dom.firstChild,i=0;for(let s of e)s.update&&t&&s.constructor&&this.drawn[i].constructor&&s.update(t,this.drawn[i])?(t=t.nextSibling,i++):this.dom.insertBefore(s.draw(),t);for(;t;){let s=t.nextSibling;t.remove(),t=s}this.drawn=e,T.webkit&&(this.dom.style.display=this.dom.firstChild?"":"none")}}destroy(){this.layer.destroy&&this.layer.destroy(this.dom,this.view),this.dom.remove()}},ss=$.define();function Nc(n){return[H.define(e=>new _o(e,n)),ss.of(n)]}var vi=$.define({combine(n){return fe(n,{cursorBlinkRate:1200,drawRangeCursor:!0,iosSelectionHandles:!0},{cursorBlinkRate:(e,t)=>Math.min(e,t),drawRangeCursor:(e,t)=>e||t})}});function Gc(n={}){return[vi.of(n),XO,LO,EO,bc.of(!0)]}function Uc(n){return n.startState.facet(vi)!=n.state.facet(vi)}var XO=Nc({above:!0,markers(n){let{state:e}=n,t=e.facet(vi),i=[];for(let s of e.selection.ranges){let r=s==e.selection.main;if(s.empty||t.drawRangeCursor&&!(r&&T.ios&&t.iosSelectionHandles)){let o=r?"cm-cursor cm-cursor-primary":"cm-cursor cm-cursor-secondary",l=s.empty?s:b.cursor(s.head,s.assoc);for(let a of It.forRange(n,o,l))i.push(a)}}return i},update(n,e){n.transactions.some(i=>i.selection)&&(e.style.animationName=e.style.animationName=="cm-blink"?"cm-blink2":"cm-blink");let t=Uc(n);return t&&Yh(n.state,e),n.docChanged||n.selectionSet||t},mount(n,e){Yh(e.state,n)},class:"cm-cursorLayer"});function Yh(n,e){e.style.animationDuration=n.facet(vi).cursorBlinkRate+"ms"}var LO=Nc({above:!1,markers(n){let e=[],{main:t,ranges:i}=n.state.selection;for(let s of i)if(!s.empty)for(let r of It.forRange(n,"cm-selectionBackground",s))e.push(r);if(T.ios&&!t.empty&&n.state.facet(vi).iosSelectionHandles){for(let s of It.forRange(n,"cm-selectionHandle cm-selectionHandle-start",b.cursor(t.from,1)))e.push(s);for(let s of It.forRange(n,"cm-selectionHandle cm-selectionHandle-end",b.cursor(t.to,1)))e.push(s)}return e},update(n,e){return n.docChanged||n.selectionSet||n.viewportChanged||Uc(n)},class:"cm-selectionLayer"}),EO=xe.highest(v.theme({".cm-line":{"& ::selection, &::selection":{backgroundColor:"transparent !important"},caretColor:"transparent !important"},".cm-content":{caretColor:"transparent !important","& :focus":{caretColor:"initial !important","&::selection, & ::selection":{backgroundColor:"Highlight !important"}}}})),Fc=A.define({map(n,e){return n==null?null:e.mapPos(n)}}),ji=K.define({create(){return null},update(n,e){return n!=null&&(n=e.changes.mapPos(n)),e.effects.reduce((t,i)=>i.is(Fc)?i.value:t,n)}}),DO=H.fromClass(class{constructor(n){this.view=n,this.cursor=null,this.measureReq={read:this.readPos.bind(this),write:this.drawCursor.bind(this)}}update(n){var e;let t=n.state.field(ji);t==null?this.cursor!=null&&((e=this.cursor)===null||e===void 0||e.remove(),this.cursor=null):(this.cursor||(this.cursor=this.view.scrollDOM.appendChild(document.createElement("div")),this.cursor.className="cm-dropCursor"),(n.startState.field(ji)!=t||n.docChanged||n.geometryChanged)&&this.view.requestMeasure(this.measureReq))}readPos(){let{view:n}=this,e=n.state.field(ji),t=e!=null&&n.coordsAtPos(e);if(!t)return null;let i=n.scrollDOM.getBoundingClientRect();return{left:t.left-i.left+n.scrollDOM.scrollLeft*n.scaleX,top:t.top-i.top+n.scrollDOM.scrollTop*n.scaleY,height:t.bottom-t.top}}drawCursor(n){if(this.cursor){let{scaleX:e,scaleY:t}=this.view;n?(this.cursor.style.left=n.left/e+"px",this.cursor.style.top=n.top/t+"px",this.cursor.style.height=n.height/t+"px"):this.cursor.style.left="-100000px"}}destroy(){this.cursor&&this.cursor.remove()}setDropPos(n){this.view.state.field(ji)!=n&&this.view.dispatch({effects:Fc.of(n)})}},{eventObservers:{dragover(n){this.setDropPos(this.view.posAtCoords({x:n.clientX,y:n.clientY}))},dragleave(n){(n.target==this.view.contentDOM||!this.view.contentDOM.contains(n.relatedTarget))&&this.setDropPos(null)},dragend(){this.setDropPos(null)},drop(){this.setDropPos(null)}}});function Hc(){return[ji,DO]}function Vh(n,e,t,i,s){e.lastIndex=0;for(let r=n.iterRange(t,i),o=t,l;!r.next().done;o+=r.value.length)if(!r.lineBreak)for(;l=e.exec(r.value);)s(o+l.index,l)}function WO(n,e){let t=n.visibleRanges;if(t.length==1&&t[0].from==n.viewport.from&&t[0].to==n.viewport.to)return t;let i=[];for(let{from:s,to:r}of t)s=Math.max(n.state.doc.lineAt(s).from,s-e),r=Math.min(n.state.doc.lineAt(r).to,r+e),i.length&&i[i.length-1].to>=s?i[i.length-1].to=r:i.push({from:s,to:r});return i}var Io=class{constructor(e){let{regexp:t,decoration:i,decorate:s,boundary:r,maxLength:o=1e3}=e;if(!t.global)throw new RangeError("The regular expression given to MatchDecorator should have its 'g' flag set");if(this.regexp=t,s)this.addMatch=(l,a,h,c)=>s(c,h,h+l[0].length,l,a);else if(typeof i=="function")this.addMatch=(l,a,h,c)=>{let f=i(l,a,h);f&&c(h,h+l[0].length,f)};else if(i)this.addMatch=(l,a,h,c)=>c(h,h+l[0].length,i);else throw new RangeError("Either 'decorate' or 'decoration' should be provided to MatchDecorator");this.boundary=r,this.maxLength=o}createDeco(e){let t=new $e,i=t.add.bind(t);for(let{from:s,to:r}of WO(e,this.maxLength))Vh(e.state.doc,this.regexp,s,r,(o,l)=>this.addMatch(l,e,o,i));return t.finish()}updateDeco(e,t){let i=1e9,s=-1;return e.docChanged&&e.changes.iterChanges((r,o,l,a)=>{a>=e.view.viewport.from&&l<=e.view.viewport.to&&(i=Math.min(l,i),s=Math.max(a,s))}),e.viewportMoved||s-i>1e3?this.createDeco(e.view):s>-1?this.updateRange(e.view,t.map(e.changes),i,s):t}updateRange(e,t,i,s){for(let r of e.visibleRanges){let o=Math.max(r.from,i),l=Math.min(r.to,s);if(l>=o){let a=e.state.doc.lineAt(o),h=a.toa.from;o--)if(this.boundary.test(a.text[o-1-a.from])){c=o;break}for(;lu.push(y.range(O,g));if(a==h)for(this.regexp.lastIndex=c-a.from;(d=this.regexp.exec(a.text))&&d.indexthis.addMatch(g,e,O,p));t=t.update({filterFrom:c,filterTo:f,filter:(O,g)=>Of,add:u})}}return t}},Yo=/x/.unicode!=null?"gu":"g",BO=new RegExp(`[\0-\b --\x7F-\x9F\xAD\u061C\u200B\u200E\u200F\u2028\u2029\u202D\u202E\u2066\u2067\u2069\uFEFF\uFFF9-\uFFFC]`,Yo),zO={0:"null",7:"bell",8:"backspace",10:"newline",11:"vertical tab",13:"carriage return",27:"escape",8203:"zero width space",8204:"zero width non-joiner",8205:"zero width joiner",8206:"left-to-right mark",8207:"right-to-left mark",8232:"line separator",8237:"left-to-right override",8238:"right-to-left override",8294:"left-to-right isolate",8295:"right-to-left isolate",8297:"pop directional isolate",8233:"paragraph separator",65279:"zero width no-break space",65532:"object replacement"},Hr=null;function _O(){var n;if(Hr==null&&typeof document<"u"&&document.body){let e=document.body.style;Hr=((n=e.tabSize)!==null&&n!==void 0?n:e.MozTabSize)!=null}return Hr||!1}var rs=$.define({combine(n){let e=fe(n,{render:null,specialChars:BO,addSpecialChars:null});return(e.replaceTabs=!_O())&&(e.specialChars=new RegExp(" |"+e.specialChars.source,Yo)),e.addSpecialChars&&(e.specialChars=new RegExp(e.specialChars.source+"|"+e.addSpecialChars.source,Yo)),e}});function Kc(n={}){return[rs.of(n),IO()]}var qh=null;function IO(){return qh||(qh=H.fromClass(class{constructor(n){this.view=n,this.decorations=Z.none,this.decorationCache=Object.create(null),this.decorator=this.makeDecorator(n.state.facet(rs)),this.decorations=this.decorator.createDeco(n)}makeDecorator(n){return new Io({regexp:n.specialChars,decoration:(e,t,i)=>{let{doc:s}=t.state,r=le(e[0],0);if(r==9){let o=s.lineAt(i),l=t.state.tabSize,a=ct(o.text,l,i-o.from);return Z.replace({widget:new qo((l-a%l)*this.view.defaultCharacterWidth/this.view.scaleX)})}return this.decorationCache[r]||(this.decorationCache[r]=Z.replace({widget:new Vo(n,r)}))},boundary:n.replaceTabs?void 0:/[^]/})}update(n){let e=n.state.facet(rs);n.startState.facet(rs)!=e?(this.decorator=this.makeDecorator(e),this.decorations=this.decorator.createDeco(n.view)):this.decorations=this.decorator.updateDeco(n,this.decorations)}},{decorations:n=>n.decorations}))}var YO="\u2022";function VO(n){return n>=32?YO:n==10?"\u2424":String.fromCharCode(9216+n)}var Vo=class extends ge{constructor(e,t){super(),this.options=e,this.code=t}eq(e){return e.code==this.code}toDOM(e){let t=VO(this.code),i=e.state.phrase("Control character")+" "+(zO[this.code]||"0x"+this.code.toString(16)),s=this.options.render&&this.options.render(this.code,i,t);if(s)return s;let r=document.createElement("span");return r.textContent=t,r.title=i,r.setAttribute("aria-label",i),r.className="cm-specialChar",r}ignoreEvent(){return!1}},qo=class extends ge{constructor(e){super(),this.width=e}eq(e){return e.width==this.width}toDOM(){let e=document.createElement("span");return e.textContent=" ",e.className="cm-tab",e.style.width=this.width+"px",e}ignoreEvent(){return!1}};function Jc(){return jO}var qO=Z.line({class:"cm-activeLine"}),jO=H.fromClass(class{constructor(n){this.decorations=this.getDeco(n)}update(n){(n.docChanged||n.selectionSet)&&(this.decorations=this.getDeco(n.view))}getDeco(n){let e=-1,t=[];for(let i of n.state.selection.ranges){let s=n.lineBlockAt(i.head);s.from>e&&(t.push(qO.range(s.from)),e=s.from)}return Z.set(t)}},{decorations:n=>n.decorations});var jo=2e3;function NO(n,e,t){let i=Math.min(e.line,t.line),s=Math.max(e.line,t.line),r=[];if(e.off>jo||t.off>jo||e.col<0||t.col<0){let o=Math.min(e.off,t.off),l=Math.max(e.off,t.off);for(let a=i;a<=s;a++){let h=n.doc.line(a);h.length<=l&&r.push(b.range(h.from+o,h.to+l))}}else{let o=Math.min(e.col,t.col),l=Math.max(e.col,t.col);for(let a=i;a<=s;a++){let h=n.doc.line(a),c=qn(h.text,o,n.tabSize,!0);if(c<0)r.push(b.cursor(h.to));else{let f=qn(h.text,l,n.tabSize);r.push(b.range(h.from+c,h.from+f))}}}return r}function GO(n,e){let t=n.coordsAtPos(n.viewport.from);return t?Math.round(Math.abs((t.left-e)/n.defaultCharacterWidth)):-1}function jh(n,e){let t=n.posAtCoords({x:e.clientX,y:e.clientY},!1),i=n.state.doc.lineAt(t),s=t-i.from,r=s>jo?-1:s==i.length?GO(n,e.clientX):ct(i.text,n.state.tabSize,t-i.from);return{line:i.number,col:r,off:s}}function UO(n,e){let t=jh(n,e),i=n.state.selection;return t?{update(s){if(s.docChanged){let r=s.changes.mapPos(s.startState.doc.line(t.line).from),o=s.state.doc.lineAt(r);t={line:o.number,col:t.col,off:Math.min(t.off,o.length)},i=i.map(s.changes)}},get(s,r,o){let l=jh(n,s);if(!l)return i;let a=NO(n.state,t,l);return a.length?o?b.create(a.concat(i.ranges)):b.create(a):i}}:null}function ef(n){let e=n?.eventFilter||(t=>t.altKey&&t.button==0);return v.mouseSelectionStyle.of((t,i)=>e(i)?UO(t,i):null)}var FO={Alt:[18,n=>!!n.altKey],Control:[17,n=>!!n.ctrlKey],Shift:[16,n=>!!n.shiftKey],Meta:[91,n=>!!n.metaKey]},HO={style:"cursor: crosshair"};function tf(n={}){let[e,t]=FO[n.key||"Alt"],i=H.fromClass(class{constructor(s){this.view=s,this.isDown=!1}set(s){this.isDown!=s&&(this.isDown=s,this.view.update([]))}},{eventObservers:{keydown(s){this.set(s.keyCode==e||t(s))},keyup(s){(s.keyCode==e||!t(s))&&this.set(!1)},mousemove(s){this.set(t(s))}}});return[i,v.contentAttributes.of(s=>{var r;return!((r=s.plugin(i))===null||r===void 0)&&r.isDown?HO:null})]}var es="-10000px",xs=class{constructor(e,t,i,s){this.facet=t,this.createTooltipView=i,this.removeTooltipView=s,this.input=e.state.facet(t),this.tooltips=this.input.filter(o=>o);let r=null;this.tooltipViews=this.tooltips.map(o=>r=i(o,r))}update(e,t){var i;let s=e.state.facet(this.facet),r=s.filter(a=>a);if(s===this.input){for(let a of this.tooltipViews)a.update&&a.update(e);return!1}let o=[],l=t?[]:null;for(let a=0;at[h]=a),t.length=l.length),this.input=s,this.tooltips=r,this.tooltipViews=o,!0}};function KO(n){let e=n.dom.ownerDocument.documentElement;return{top:0,left:0,bottom:e.clientHeight,right:e.clientWidth}}var Kr=$.define({combine:n=>{var e,t,i;return{position:T.ios?"absolute":((e=n.find(s=>s.position))===null||e===void 0?void 0:e.position)||"fixed",parent:((t=n.find(s=>s.parent))===null||t===void 0?void 0:t.parent)||null,tooltipSpace:((i=n.find(s=>s.tooltipSpace))===null||i===void 0?void 0:i.tooltipSpace)||KO}}}),Nh=new WeakMap,ol=H.fromClass(class{constructor(n){this.view=n,this.above=[],this.inView=!0,this.madeAbsolute=!1,this.lastTransaction=0,this.measureTimeout=-1;let e=n.state.facet(Kr);this.position=e.position,this.parent=e.parent,this.classes=n.themeClasses,this.createContainer(),this.measureReq={read:this.readMeasure.bind(this),write:this.writeMeasure.bind(this),key:this},this.resizeObserver=typeof ResizeObserver=="function"?new ResizeObserver(()=>this.measureSoon()):null,this.manager=new xs(n,an,(t,i)=>this.createTooltip(t,i),t=>{this.resizeObserver&&this.resizeObserver.unobserve(t.dom),t.dom.remove()}),this.above=this.manager.tooltips.map(t=>!!t.above),this.intersectionObserver=typeof IntersectionObserver=="function"?new IntersectionObserver(t=>{Date.now()>this.lastTransaction-50&&t.length>0&&t[t.length-1].intersectionRatio<1&&this.measureSoon()},{threshold:[1]}):null,this.observeIntersection(),n.win.addEventListener("resize",this.measureSoon=this.measureSoon.bind(this)),this.maybeMeasure()}createContainer(){this.parent?(this.container=document.createElement("div"),this.container.style.position="relative",this.container.className=this.view.themeClasses,this.parent.appendChild(this.container)):this.container=this.view.dom}observeIntersection(){if(this.intersectionObserver){this.intersectionObserver.disconnect();for(let n of this.manager.tooltipViews)this.intersectionObserver.observe(n.dom)}}measureSoon(){this.measureTimeout<0&&(this.measureTimeout=setTimeout(()=>{this.measureTimeout=-1,this.maybeMeasure()},50))}update(n){n.transactions.length&&(this.lastTransaction=Date.now());let e=this.manager.update(n,this.above);e&&this.observeIntersection();let t=e||n.geometryChanged,i=n.state.facet(Kr);if(i.position!=this.position&&!this.madeAbsolute){this.position=i.position;for(let s of this.manager.tooltipViews)s.dom.style.position=this.position;t=!0}if(i.parent!=this.parent){this.parent&&this.container.remove(),this.parent=i.parent,this.createContainer();for(let s of this.manager.tooltipViews)this.container.appendChild(s.dom);t=!0}else this.parent&&this.view.themeClasses!=this.classes&&(this.classes=this.container.className=this.view.themeClasses);t&&this.maybeMeasure()}createTooltip(n,e){let t=n.create(this.view),i=e?e.dom:null;if(t.dom.classList.add("cm-tooltip"),n.arrow&&!t.dom.querySelector(".cm-tooltip > .cm-tooltip-arrow")){let s=document.createElement("div");s.className="cm-tooltip-arrow",t.dom.appendChild(s)}return t.dom.style.position=this.position,t.dom.style.top=es,t.dom.style.left="0px",this.container.insertBefore(t.dom,i),t.mount&&t.mount(this.view),this.resizeObserver&&this.resizeObserver.observe(t.dom),t}destroy(){var n,e,t;this.view.win.removeEventListener("resize",this.measureSoon);for(let i of this.manager.tooltipViews)i.dom.remove(),(n=i.destroy)===null||n===void 0||n.call(i);this.parent&&this.container.remove(),(e=this.resizeObserver)===null||e===void 0||e.disconnect(),(t=this.intersectionObserver)===null||t===void 0||t.disconnect(),clearTimeout(this.measureTimeout)}readMeasure(){let n=1,e=1,t=!1;if(this.position=="fixed"&&this.manager.tooltipViews.length){let{dom:r}=this.manager.tooltipViews[0];if(T.safari){let o=r.getBoundingClientRect();t=Math.abs(o.top+1e4)>1||Math.abs(o.left)>1}else t=!!r.offsetParent&&r.offsetParent!=this.container.ownerDocument.body}if(t||this.position=="absolute")if(this.parent){let r=this.parent.getBoundingClientRect();r.width&&r.height&&(n=r.width/this.parent.offsetWidth,e=r.height/this.parent.offsetHeight)}else({scaleX:n,scaleY:e}=this.view.viewState);let i=this.view.scrollDOM.getBoundingClientRect(),s=sl(this.view);return{visible:{left:i.left+s.left,top:i.top+s.top,right:i.right-s.right,bottom:i.bottom-s.bottom},parent:this.parent?this.container.getBoundingClientRect():this.view.dom.getBoundingClientRect(),pos:this.manager.tooltips.map((r,o)=>{let l=this.manager.tooltipViews[o];return l.getCoords?l.getCoords(r.pos):this.view.coordsAtPos(r.pos)}),size:this.manager.tooltipViews.map(({dom:r})=>r.getBoundingClientRect()),space:this.view.state.facet(Kr).tooltipSpace(this.view),scaleX:n,scaleY:e,makeAbsolute:t}}writeMeasure(n){var e;if(n.makeAbsolute){this.madeAbsolute=!0,this.position="absolute";for(let l of this.manager.tooltipViews)l.dom.style.position="absolute"}let{visible:t,space:i,scaleX:s,scaleY:r}=n,o=[];for(let l=0;l=Math.min(t.bottom,i.bottom)||f.rightMath.min(t.right,i.right)+.1)){c.style.top=es;continue}let d=a.arrow?h.dom.querySelector(".cm-tooltip-arrow"):null,p=d?7:0,O=u.right-u.left,g=(e=Nh.get(h))!==null&&e!==void 0?e:u.bottom-u.top,y=h.offset||em,x=this.view.textDirection==_.LTR,S=u.width>i.right-i.left?x?i.left:i.right-u.width:x?Math.max(i.left,Math.min(f.left-(d?14:0)+y.x,i.right-O)):Math.min(Math.max(i.left,f.left-O+(d?14:0)-y.x),i.right-O),C=this.above[l];!a.strictSide&&(C?f.top-g-p-y.yi.bottom)&&C==i.bottom-f.bottom>f.top-i.top&&(C=this.above[l]=!C);let w=(C?f.top-i.top:i.bottom-f.bottom)-p;if(wS&&X.topk&&(k=C?X.top-g-2-p:X.bottom+p+2);if(this.position=="absolute"?(c.style.top=(k-n.parent.top)/r+"px",Gh(c,(S-n.parent.left)/s)):(c.style.top=k/r+"px",Gh(c,S/s)),d){let X=f.left+(x?y.x:-y.x)-(S+14-7);d.style.left=X/s+"px"}h.overlap!==!0&&o.push({left:S,top:k,right:Q,bottom:k+g}),c.classList.toggle("cm-tooltip-above",C),c.classList.toggle("cm-tooltip-below",!C),h.positioned&&h.positioned(n.space)}}maybeMeasure(){if(this.manager.tooltips.length&&(this.view.inView&&this.view.requestMeasure(this.measureReq),this.inView!=this.view.inView&&(this.inView=this.view.inView,!this.inView)))for(let n of this.manager.tooltipViews)n.dom.style.top=es}},{eventObservers:{scroll(){this.maybeMeasure()}}});function Gh(n,e){let t=parseInt(n.style.left,10);(isNaN(t)||Math.abs(e-t)>1)&&(n.style.left=e+"px")}var JO=v.baseTheme({".cm-tooltip":{zIndex:500,boxSizing:"border-box"},"&light .cm-tooltip":{border:"1px solid #bbb",backgroundColor:"#f5f5f5"},"&light .cm-tooltip-section:not(:first-child)":{borderTop:"1px solid #bbb"},"&dark .cm-tooltip":{backgroundColor:"#333338",color:"white"},".cm-tooltip-arrow":{height:"7px",width:"14px",position:"absolute",zIndex:-1,overflow:"hidden","&:before, &:after":{content:"''",position:"absolute",width:0,height:0,borderLeft:"7px solid transparent",borderRight:"7px solid transparent"},".cm-tooltip-above &":{bottom:"-7px","&:before":{borderTop:"7px solid #bbb"},"&:after":{borderTop:"7px solid #f5f5f5",bottom:"1px"}},".cm-tooltip-below &":{top:"-7px","&:before":{borderBottom:"7px solid #bbb"},"&:after":{borderBottom:"7px solid #f5f5f5",top:"1px"}}},"&dark .cm-tooltip .cm-tooltip-arrow":{"&:before":{borderTopColor:"#333338",borderBottomColor:"#333338"},"&:after":{borderTopColor:"transparent",borderBottomColor:"transparent"}}}),em={x:0,y:0},an=$.define({enables:[ol,JO]}),Ss=$.define({combine:n=>n.reduce((e,t)=>e.concat(t),[])}),ws=class n{static create(e){return new n(e)}constructor(e){this.view=e,this.mounted=!1,this.dom=document.createElement("div"),this.dom.classList.add("cm-tooltip-hover"),this.manager=new xs(e,Ss,(t,i)=>this.createHostedView(t,i),t=>t.dom.remove())}createHostedView(e,t){let i=e.create(this.view);return i.dom.classList.add("cm-tooltip-section"),this.dom.insertBefore(i.dom,t?t.dom.nextSibling:this.dom.firstChild),this.mounted&&i.mount&&i.mount(this.view),i}mount(e){for(let t of this.manager.tooltipViews)t.mount&&t.mount(e);this.mounted=!0}positioned(e){for(let t of this.manager.tooltipViews)t.positioned&&t.positioned(e)}update(e){this.manager.update(e)}destroy(){var e;for(let t of this.manager.tooltipViews)(e=t.destroy)===null||e===void 0||e.call(t)}passProp(e){let t;for(let i of this.manager.tooltipViews){let s=i[e];if(s!==void 0){if(t===void 0)t=s;else if(t!==s)return}}return t}get offset(){return this.passProp("offset")}get getCoords(){return this.passProp("getCoords")}get overlap(){return this.passProp("overlap")}get resize(){return this.passProp("resize")}},tm=an.compute([Ss],n=>{let e=n.facet(Ss);return e.length===0?null:{pos:Math.min(...e.map(t=>t.pos)),end:Math.max(...e.map(t=>{var i;return(i=t.end)!==null&&i!==void 0?i:t.pos})),create:ws.create,above:e[0].above,arrow:e.some(t=>t.arrow)}}),No=class{constructor(e,t,i,s,r){this.view=e,this.source=t,this.field=i,this.setHover=s,this.hoverTime=r,this.hoverTimeout=-1,this.restartTimeout=-1,this.pending=null,this.lastMove={x:0,y:0,target:e.dom,time:0},this.checkHover=this.checkHover.bind(this),e.dom.addEventListener("mouseleave",this.mouseleave=this.mouseleave.bind(this)),e.dom.addEventListener("mousemove",this.mousemove=this.mousemove.bind(this))}update(){this.pending&&(this.pending=null,clearTimeout(this.restartTimeout),this.restartTimeout=setTimeout(()=>this.startHover(),20))}get active(){return this.view.state.field(this.field)}checkHover(){if(this.hoverTimeout=-1,this.active.length)return;let e=Date.now()-this.lastMove.time;el.bottom||t.xl.right+e.defaultCharacterWidth)return;let a=e.bidiSpans(e.state.doc.lineAt(s)).find(c=>c.from<=s&&c.to>=s),h=a&&a.dir==_.RTL?-1:1;r=t.x{this.pending==l&&(this.pending=null,a&&!(Array.isArray(a)&&!a.length)&&e.dispatch({effects:this.setHover.of(Array.isArray(a)?a:[a])}))},a=>ae(e.state,a,"hover tooltip"))}else o&&!(Array.isArray(o)&&!o.length)&&e.dispatch({effects:this.setHover.of(Array.isArray(o)?o:[o])})}get tooltip(){let e=this.view.plugin(ol),t=e?e.manager.tooltips.findIndex(i=>i.create==ws.create):-1;return t>-1?e.manager.tooltipViews[t]:null}mousemove(e){var t,i;this.lastMove={x:e.clientX,y:e.clientY,target:e.target,time:Date.now()},this.hoverTimeout<0&&(this.hoverTimeout=setTimeout(this.checkHover,this.hoverTime));let{active:s,tooltip:r}=this;if(s.length&&r&&!im(r.dom,e)||this.pending){let{pos:o}=s[0]||this.pending,l=(i=(t=s[0])===null||t===void 0?void 0:t.end)!==null&&i!==void 0?i:o;(o==l?this.view.posAtCoords(this.lastMove)!=o:!nm(this.view,o,l,e.clientX,e.clientY))&&(this.view.dispatch({effects:this.setHover.of([])}),this.pending=null)}}mouseleave(e){clearTimeout(this.hoverTimeout),this.hoverTimeout=-1;let{active:t}=this;if(t.length){let{tooltip:i}=this;i&&i.dom.contains(e.relatedTarget)?this.watchTooltipLeave(i.dom):this.view.dispatch({effects:this.setHover.of([])})}}watchTooltipLeave(e){let t=i=>{e.removeEventListener("mouseleave",t),this.active.length&&!this.view.dom.contains(i.relatedTarget)&&this.view.dispatch({effects:this.setHover.of([])})};e.addEventListener("mouseleave",t)}destroy(){clearTimeout(this.hoverTimeout),clearTimeout(this.restartTimeout),this.view.dom.removeEventListener("mouseleave",this.mouseleave),this.view.dom.removeEventListener("mousemove",this.mousemove)}},ts=4;function im(n,e){let{left:t,right:i,top:s,bottom:r}=n.getBoundingClientRect(),o;if(o=n.querySelector(".cm-tooltip-arrow")){let l=o.getBoundingClientRect();s=Math.min(l.top,s),r=Math.max(l.bottom,r)}return e.clientX>=t-ts&&e.clientX<=i+ts&&e.clientY>=s-ts&&e.clientY<=r+ts}function nm(n,e,t,i,s,r){let o=n.scrollDOM.getBoundingClientRect(),l=n.documentTop+n.documentPadding.top+n.contentHeight;if(o.left>i||o.rights||Math.min(o.bottom,l)=e&&a<=t}function nf(n,e={}){let t=A.define(),i=K.define({create(){return[]},update(s,r){if(s.length&&(e.hideOnChange&&(r.docChanged||r.selection)?s=[]:e.hideOn&&(s=s.filter(o=>!e.hideOn(r,o))),r.docChanged)){let o=[];for(let l of s){let a=r.changes.mapPos(l.pos,-1,se.TrackDel);if(a!=null){let h=Object.assign(Object.create(null),l);h.pos=a,h.end!=null&&(h.end=r.changes.mapPos(h.end)),o.push(h)}}s=o}for(let o of r.effects)o.is(t)&&(s=o.value),o.is(sm)&&(s=[]);return s},provide:s=>Ss.from(s)});return{active:i,extension:[i,H.define(s=>new No(s,n,i,t,e.hoverTime||300)),tm]}}function ll(n,e){let t=n.plugin(ol);if(!t)return null;let i=t.manager.tooltips.indexOf(e);return i<0?null:t.manager.tooltipViews[i]}var sm=A.define();var Uh=$.define({combine(n){let e,t;for(let i of n)e=e||i.topContainer,t=t||i.bottomContainer;return{topContainer:e,bottomContainer:t}}});function hn(n,e){let t=n.plugin(sf),i=t?t.specs.indexOf(e):-1;return i>-1?t.panels[i]:null}var sf=H.fromClass(class{constructor(n){this.input=n.state.facet(jt),this.specs=this.input.filter(t=>t),this.panels=this.specs.map(t=>t(n));let e=n.state.facet(Uh);this.top=new mi(n,!0,e.topContainer),this.bottom=new mi(n,!1,e.bottomContainer),this.top.sync(this.panels.filter(t=>t.top)),this.bottom.sync(this.panels.filter(t=>!t.top));for(let t of this.panels)t.dom.classList.add("cm-panel"),t.mount&&t.mount()}update(n){let e=n.state.facet(Uh);this.top.container!=e.topContainer&&(this.top.sync([]),this.top=new mi(n.view,!0,e.topContainer)),this.bottom.container!=e.bottomContainer&&(this.bottom.sync([]),this.bottom=new mi(n.view,!1,e.bottomContainer)),this.top.syncClasses(),this.bottom.syncClasses();let t=n.state.facet(jt);if(t!=this.input){let i=t.filter(a=>a),s=[],r=[],o=[],l=[];for(let a of i){let h=this.specs.indexOf(a),c;h<0?(c=a(n.view),l.push(c)):(c=this.panels[h],c.update&&c.update(n)),s.push(c),(c.top?r:o).push(c)}this.specs=i,this.panels=s,this.top.sync(r),this.bottom.sync(o);for(let a of l)a.dom.classList.add("cm-panel"),a.mount&&a.mount()}else for(let i of this.panels)i.update&&i.update(n)}destroy(){this.top.sync([]),this.bottom.sync([])}},{provide:n=>v.scrollMargins.of(e=>{let t=e.plugin(n);return t&&{top:t.top.scrollMargin(),bottom:t.bottom.scrollMargin()}})}),mi=class{constructor(e,t,i){this.view=e,this.top=t,this.container=i,this.dom=void 0,this.classes="",this.panels=[],this.syncClasses()}sync(e){for(let t of this.panels)t.destroy&&e.indexOf(t)<0&&t.destroy();this.panels=e,this.syncDOM()}syncDOM(){if(this.panels.length==0){this.dom&&(this.dom.remove(),this.dom=void 0);return}if(!this.dom){this.dom=document.createElement("div"),this.dom.className=this.top?"cm-panels cm-panels-top":"cm-panels cm-panels-bottom",this.dom.style[this.top?"top":"bottom"]="0";let t=this.container||this.view.dom;t.insertBefore(this.dom,this.top?t.firstChild:null)}let e=this.dom.firstChild;for(let t of this.panels)if(t.dom.parentNode==this.dom){for(;e!=t.dom;)e=Fh(e);e=e.nextSibling}else this.dom.insertBefore(t.dom,e);for(;e;)e=Fh(e)}scrollMargin(){return!this.dom||this.container?0:Math.max(0,this.top?this.dom.getBoundingClientRect().bottom-Math.max(0,this.view.scrollDOM.getBoundingClientRect().top):Math.min(innerHeight,this.view.scrollDOM.getBoundingClientRect().bottom)-this.dom.getBoundingClientRect().top)}syncClasses(){if(!(!this.container||this.classes==this.view.themeClasses)){for(let e of this.classes.split(" "))e&&this.container.classList.remove(e);for(let e of(this.classes=this.view.themeClasses).split(" "))e&&this.container.classList.add(e)}}};function Fh(n){let e=n.nextSibling;return n.remove(),e}var jt=$.define({enables:sf});function rf(n,e){let t,i=new Promise(o=>t=o),s=o=>rm(o,e,t);n.state.field(Jr,!1)?n.dispatch({effects:of.of(s)}):n.dispatch({effects:A.appendConfig.of(Jr.init(()=>[s]))});let r=lf.of(s);return{close:r,result:i.then(o=>((n.win.queueMicrotask||(a=>n.win.setTimeout(a,10)))(()=>{n.state.field(Jr).indexOf(s)>-1&&n.dispatch({effects:r})}),o))}}var Jr=K.define({create(){return[]},update(n,e){for(let t of e.effects)t.is(of)?n=[t.value].concat(n):t.is(lf)&&(n=n.filter(i=>i!=t.value));return n},provide:n=>jt.computeN([n],e=>e.field(n))}),of=A.define(),lf=A.define();function rm(n,e,t){let i=e.content?e.content(n,()=>o(null)):null;if(!i){if(i=B("form"),e.input){let l=B("input",e.input);/^(text|password|number|email|tel|url)$/.test(l.type)&&l.classList.add("cm-textfield"),l.name||(l.name="input"),i.appendChild(B("label",(e.label||"")+": ",l))}else i.appendChild(document.createTextNode(e.label||""));i.appendChild(document.createTextNode(" ")),i.appendChild(B("button",{class:"cm-button",type:"submit"},e.submitLabel||"OK"))}let s=i.nodeName=="FORM"?[i]:i.querySelectorAll("form");for(let l=0;l{h.keyCode==27?(h.preventDefault(),o(null)):h.keyCode==13&&(h.preventDefault(),o(a))}),a.addEventListener("submit",h=>{h.preventDefault(),o(a)})}let r=B("div",i,B("button",{onclick:()=>o(null),"aria-label":n.state.phrase("close"),class:"cm-dialog-close",type:"button"},["\xD7"]));e.class&&(r.className=e.class),r.classList.add("cm-dialog");function o(l){r.contains(r.ownerDocument.activeElement)&&n.focus(),t(l)}return{dom:r,top:e.top,mount:()=>{if(e.focus){let l;typeof e.focus=="string"?l=i.querySelector(e.focus):l=i.querySelector("input")||i.querySelector("button"),l&&"select"in l?l.select():l&&"focus"in l&&l.focus()}}}}var Ce=class extends We{compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}eq(e){return!1}destroy(e){}};Ce.prototype.elementClass="";Ce.prototype.toDOM=void 0;Ce.prototype.mapMode=se.TrackBefore;Ce.prototype.startSide=Ce.prototype.endSide=-1;Ce.prototype.point=!0;var os=$.define(),om=$.define(),lm={class:"",renderEmptyElements:!1,elementStyle:"",markers:()=>W.empty,lineMarker:()=>null,widgetMarker:()=>null,lineMarkerChange:null,initialSpacer:null,updateSpacer:null,domEventHandlers:{},side:"before"},en=$.define();function al(n){return[af(),en.of({...lm,...n})]}var Go=$.define({combine:n=>n.some(e=>e)});function af(n){let e=[am];return n&&n.fixed===!1&&e.push(Go.of(!0)),e}var am=H.fromClass(class{constructor(n){this.view=n,this.domAfter=null,this.prevViewport=n.viewport,this.dom=document.createElement("div"),this.dom.className="cm-gutters cm-gutters-before",this.dom.setAttribute("aria-hidden","true"),this.dom.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.gutters=n.state.facet(en).map(e=>new ks(n,e)),this.fixed=!n.state.facet(Go);for(let e of this.gutters)e.config.side=="after"?this.getDOMAfter().appendChild(e.dom):this.dom.appendChild(e.dom);this.fixed&&(this.dom.style.position="sticky"),this.syncGutters(!1),n.scrollDOM.insertBefore(this.dom,n.contentDOM)}getDOMAfter(){return this.domAfter||(this.domAfter=document.createElement("div"),this.domAfter.className="cm-gutters cm-gutters-after",this.domAfter.setAttribute("aria-hidden","true"),this.domAfter.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.domAfter.style.position=this.fixed?"sticky":"",this.view.scrollDOM.appendChild(this.domAfter)),this.domAfter}update(n){if(this.updateGutters(n)){let e=this.prevViewport,t=n.view.viewport,i=Math.min(e.to,t.to)-Math.max(e.from,t.from);this.syncGutters(i<(t.to-t.from)*.8)}if(n.geometryChanged){let e=this.view.contentHeight/this.view.scaleY+"px";this.dom.style.minHeight=e,this.domAfter&&(this.domAfter.style.minHeight=e)}this.view.state.facet(Go)!=!this.fixed&&(this.fixed=!this.fixed,this.dom.style.position=this.fixed?"sticky":"",this.domAfter&&(this.domAfter.style.position=this.fixed?"sticky":"")),this.prevViewport=n.view.viewport}syncGutters(n){let e=this.dom.nextSibling;n&&(this.dom.remove(),this.domAfter&&this.domAfter.remove());let t=W.iter(this.view.state.facet(os),this.view.viewport.from),i=[],s=this.gutters.map(r=>new Fo(r,this.view.viewport,-this.view.documentPadding.top));for(let r of this.view.viewportLineBlocks)if(i.length&&(i=[]),Array.isArray(r.type)){let o=!0;for(let l of r.type)if(l.type==he.Text&&o){Uo(t,i,l.from);for(let a of s)a.line(this.view,l,i);o=!1}else if(l.widget)for(let a of s)a.widget(this.view,l)}else if(r.type==he.Text){Uo(t,i,r.from);for(let o of s)o.line(this.view,r,i)}else if(r.widget)for(let o of s)o.widget(this.view,r);for(let r of s)r.finish();n&&(this.view.scrollDOM.insertBefore(this.dom,e),this.domAfter&&this.view.scrollDOM.appendChild(this.domAfter))}updateGutters(n){let e=n.startState.facet(en),t=n.state.facet(en),i=n.docChanged||n.heightChanged||n.viewportChanged||!W.eq(n.startState.facet(os),n.state.facet(os),n.view.viewport.from,n.view.viewport.to);if(e==t)for(let s of this.gutters)s.update(n)&&(i=!0);else{i=!0;let s=[];for(let r of t){let o=e.indexOf(r);o<0?s.push(new ks(this.view,r)):(this.gutters[o].update(n),s.push(this.gutters[o]))}for(let r of this.gutters)r.dom.remove(),s.indexOf(r)<0&&r.destroy();for(let r of s)r.config.side=="after"?this.getDOMAfter().appendChild(r.dom):this.dom.appendChild(r.dom);this.gutters=s}return i}destroy(){for(let n of this.gutters)n.destroy();this.dom.remove(),this.domAfter&&this.domAfter.remove()}},{provide:n=>v.scrollMargins.of(e=>{let t=e.plugin(n);if(!t||t.gutters.length==0||!t.fixed)return null;let i=t.dom.offsetWidth*e.scaleX,s=t.domAfter?t.domAfter.offsetWidth*e.scaleX:0;return e.textDirection==_.LTR?{left:i,right:s}:{right:i,left:s}})});function Hh(n){return Array.isArray(n)?n:[n]}function Uo(n,e,t){for(;n.value&&n.from<=t;)n.from==t&&e.push(n.value),n.next()}var Fo=class{constructor(e,t,i){this.gutter=e,this.height=i,this.i=0,this.cursor=W.iter(e.markers,t.from)}addElement(e,t,i){let{gutter:s}=this,r=(t.top-this.height)/e.scaleY,o=t.height/e.scaleY;if(this.i==s.elements.length){let l=new Qs(e,o,r,i);s.elements.push(l),s.dom.appendChild(l.dom)}else s.elements[this.i].update(e,o,r,i);this.height=t.bottom,this.i++}line(e,t,i){let s=[];Uo(this.cursor,s,t.from),i.length&&(s=s.concat(i));let r=this.gutter.config.lineMarker(e,t,s);r&&s.unshift(r);let o=this.gutter;s.length==0&&!o.config.renderEmptyElements||this.addElement(e,t,s)}widget(e,t){let i=this.gutter.config.widgetMarker(e,t.widget,t),s=i?[i]:null;for(let r of e.state.facet(om)){let o=r(e,t.widget,t);o&&(s||(s=[])).push(o)}s&&this.addElement(e,t,s)}finish(){let e=this.gutter;for(;e.elements.length>this.i;){let t=e.elements.pop();e.dom.removeChild(t.dom),t.destroy()}}},ks=class{constructor(e,t){this.view=e,this.config=t,this.elements=[],this.spacer=null,this.dom=document.createElement("div"),this.dom.className="cm-gutter"+(this.config.class?" "+this.config.class:"");for(let i in t.domEventHandlers)this.dom.addEventListener(i,s=>{let r=s.target,o;if(r!=this.dom&&this.dom.contains(r)){for(;r.parentNode!=this.dom;)r=r.parentNode;let a=r.getBoundingClientRect();o=(a.top+a.bottom)/2}else o=s.clientY;let l=e.lineBlockAtHeight(o-e.documentTop);t.domEventHandlers[i](e,l,s)&&s.preventDefault()});this.markers=Hh(t.markers(e)),t.initialSpacer&&(this.spacer=new Qs(e,0,0,[t.initialSpacer(e)]),this.dom.appendChild(this.spacer.dom),this.spacer.dom.style.cssText+="visibility: hidden; pointer-events: none")}update(e){let t=this.markers;if(this.markers=Hh(this.config.markers(e.view)),this.spacer&&this.config.updateSpacer){let s=this.config.updateSpacer(this.spacer.markers[0],e);s!=this.spacer.markers[0]&&this.spacer.update(e.view,0,0,[s])}let i=e.view.viewport;return!W.eq(this.markers,t,i.from,i.to)||(this.config.lineMarkerChange?this.config.lineMarkerChange(e):!1)}destroy(){for(let e of this.elements)e.destroy()}},Qs=class{constructor(e,t,i,s){this.height=-1,this.above=0,this.markers=[],this.dom=document.createElement("div"),this.dom.className="cm-gutterElement",this.update(e,t,i,s)}update(e,t,i,s){this.height!=t&&(this.height=t,this.dom.style.height=t+"px"),this.above!=i&&(this.dom.style.marginTop=(this.above=i)?i+"px":""),hm(this.markers,s)||this.setMarkers(e,s)}setMarkers(e,t){let i="cm-gutterElement",s=this.dom.firstChild;for(let r=0,o=0;;){let l=o,a=rr(l,a,h)||o(l,a,h):o}return i}})}}),tn=class extends Ce{constructor(e){super(),this.number=e}eq(e){return this.number==e.number}toDOM(){return document.createTextNode(this.number)}};function eo(n,e){return n.state.facet(gi).formatNumber(e,n.state)}var um=en.compute([gi],n=>({class:"cm-lineNumbers",renderEmptyElements:!1,markers(e){return e.state.facet(cm)},lineMarker(e,t,i){return i.some(s=>s.toDOM)?null:new tn(eo(e,e.state.doc.lineAt(t.from).number))},widgetMarker:(e,t,i)=>{for(let s of e.state.facet(fm)){let r=s(e,t,i);if(r)return r}return null},lineMarkerChange:e=>e.startState.facet(gi)!=e.state.facet(gi),initialSpacer(e){return new tn(eo(e,Kh(e.state.doc.lines)))},updateSpacer(e,t){let i=eo(t.view,Kh(t.view.state.doc.lines));return i==e.number?e:new tn(i)},domEventHandlers:n.facet(gi).domEventHandlers,side:"before"}));function hf(n={}){return[gi.of(n),af(),um]}function Kh(n){let e=9;for(;e{let e=[],t=-1;for(let i of n.selection.ranges){let s=n.doc.lineAt(i.head).from;s>t&&(t=s,e.push(dm.range(s)))}return W.of(e)});function cf(){return pm}var Om=0,cn=class{constructor(e,t){this.from=e,this.to=t}},R=class{constructor(e={}){this.id=Om++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")}),this.combine=e.combine||null}add(e){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return typeof e!="function"&&(e=ue.match(e)),t=>{let i=e(t);return i===void 0?null:[this,i]}}};R.closedBy=new R({deserialize:n=>n.split(" ")});R.openedBy=new R({deserialize:n=>n.split(" ")});R.group=new R({deserialize:n=>n.split(" ")});R.isolate=new R({deserialize:n=>{if(n&&n!="rtl"&&n!="ltr"&&n!="auto")throw new RangeError("Invalid value for isolate: "+n);return n||"auto"}});R.contextHash=new R({perNode:!0});R.lookAhead=new R({perNode:!0});R.mounted=new R({perNode:!0});var Nt=class{constructor(e,t,i,s=!1){this.tree=e,this.overlay=t,this.parser=i,this.bracketed=s}static get(e){return e&&e.props&&e.props[R.mounted.id]}},mm=Object.create(null),ue=class n{constructor(e,t,i,s=0){this.name=e,this.props=t,this.id=i,this.flags=s}static define(e){let t=e.props&&e.props.length?Object.create(null):mm,i=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(e.name==null?8:0),s=new n(e.name||"",t,e.id,i);if(e.props){for(let r of e.props)if(Array.isArray(r)||(r=r(s)),r){if(r[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");t[r[0].id]=r[1]}}return s}prop(e){return this.props[e.id]}get isTop(){return(this.flags&1)>0}get isSkipped(){return(this.flags&2)>0}get isError(){return(this.flags&4)>0}get isAnonymous(){return(this.flags&8)>0}is(e){if(typeof e=="string"){if(this.name==e)return!0;let t=this.prop(R.group);return t?t.indexOf(e)>-1:!1}return this.id==e}static match(e){let t=Object.create(null);for(let i in e)for(let s of i.split(" "))t[s]=e[i];return i=>{for(let s=i.prop(R.group),r=-1;r<(s?s.length:0);r++){let o=t[r<0?i.name:s[r]];if(o)return o}}}};ue.none=new ue("",Object.create(null),0,8);var fn=class n{constructor(e){this.types=e;for(let t=0;t0;for(let a=this.cursor(o|U.IncludeAnonymous);;){let h=!1;if(a.from<=r&&a.to>=s&&(!l&&a.type.isAnonymous||t(a)!==!1)){if(a.firstChild())continue;h=!0}for(;h&&i&&(l||!a.type.isAnonymous)&&i(a),!a.nextSibling();){if(!a.parent())return;h=!0}}}prop(e){return e.perNode?this.props?this.props[e.id]:void 0:this.type.prop(e)}get propValues(){let e=[];if(this.props)for(let t in this.props)e.push([+t,this.props[t]]);return e}balance(e={}){return this.children.length<=8?this:Ol(ue.none,this.children,this.positions,0,this.children.length,0,this.length,(t,i,s)=>new n(this.type,t,i,s,this.propValues),e.makeTree||((t,i,s)=>new n(ue.none,t,i,s)))}static build(e){return ym(e)}};J.empty=new J(ue.none,[],[],0);var hl=class n{constructor(e,t){this.buffer=e,this.index=t}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new n(this.buffer,this.index)}},vt=class n{constructor(e,t,i){this.buffer=e,this.length=t,this.set=i}get type(){return ue.none}toString(){let e=[];for(let t=0;t0));a=o[a+3]);return l}slice(e,t,i){let s=this.buffer,r=new Uint16Array(t-e),o=0;for(let l=e,a=0;l=e&&te;case 1:return t<=e&&i>e;case 2:return i>e;case 4:return!0}}function un(n,e,t,i){for(var s;n.from==n.to||(t<1?n.from>=e:n.from>e)||(t>-1?n.to<=e:n.to0?l.length:-1;e!=h;e+=t){let c=l[e],f=a[e]+o.from,u;if(!(!(r&U.EnterBracketed&&c instanceof J&&(u=Nt.get(c))&&!u.overlay&&u.bracketed&&i>=f&&i<=f+c.length)&&!pf(s,i,f,f+c.length))){if(c instanceof vt){if(r&U.ExcludeBuffers)continue;let d=c.findChild(0,c.buffer.length,t,i-f,s);if(d>-1)return new Gt(new fl(o,c,e,f),null,d)}else if(r&U.IncludeAnonymous||!c.type.isAnonymous||pl(c)){let d;if(!(r&U.IgnoreMounts)&&(d=Nt.get(c))&&!d.overlay)return new n(d.tree,f,e,o);let p=new n(c,f,e,o);return r&U.IncludeAnonymous||!p.type.isAnonymous?p:p.nextChild(t<0?c.children.length-1:0,t,i,s,r)}}}if(r&U.IncludeAnonymous||!o.type.isAnonymous||(o.index>=0?e=o.index+t:e=t<0?-1:o._parent._tree.children.length,o=o._parent,!o))return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(e){return this.nextChild(0,1,e,2)}childBefore(e){return this.nextChild(this._tree.children.length-1,-1,e,-2)}prop(e){return this._tree.prop(e)}enter(e,t,i=0){let s;if(!(i&U.IgnoreOverlays)&&(s=Nt.get(this._tree))&&s.overlay){let r=e-this.from,o=i&U.EnterBracketed&&s.bracketed;for(let{from:l,to:a}of s.overlay)if((t>0||o?l<=r:l=r:a>r))return new n(s.tree,s.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,e,t,i)}nextSignificantParent(){let e=this;for(;e.type.isAnonymous&&e._parent;)e=e._parent;return e}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}get tree(){return this._tree}toTree(){return this._tree}toString(){return this._tree.toString()}};function uf(n,e,t,i){let s=n.cursor(),r=[];if(!s.firstChild())return r;if(t!=null){for(let o=!1;!o;)if(o=s.type.is(t),!s.nextSibling())return r}for(;;){if(i!=null&&s.type.is(i))return r;if(s.type.is(e)&&r.push(s.node),!s.nextSibling())return i==null?r:[]}}function cl(n,e,t=e.length-1){for(let i=n;t>=0;i=i.parent){if(!i)return!1;if(!i.type.isAnonymous){if(e[t]&&e[t]!=i.name)return!1;t--}}return!0}var fl=class{constructor(e,t,i,s){this.parent=e,this.buffer=t,this.index=i,this.start=s}},Gt=class n extends Zs{get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}constructor(e,t,i){super(),this.context=e,this._parent=t,this.index=i,this.type=e.buffer.set.types[e.buffer.buffer[i]]}child(e,t,i){let{buffer:s}=this.context,r=s.findChild(this.index+4,s.buffer[this.index+3],e,t-this.context.start,i);return r<0?null:new n(this.context,this,r)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(e){return this.child(1,e,2)}childBefore(e){return this.child(-1,e,-2)}prop(e){return this.type.prop(e)}enter(e,t,i=0){if(i&U.ExcludeBuffers)return null;let{buffer:s}=this.context,r=s.findChild(this.index+4,s.buffer[this.index+3],t>0?1:-1,e-this.context.start,t);return r<0?null:new n(this.context,this,r)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(e){return this._parent?null:this.context.parent.nextChild(this.context.index+e,e,0,4)}get nextSibling(){let{buffer:e}=this.context,t=e.buffer[this.index+3];return t<(this._parent?e.buffer[this._parent.index+3]:e.buffer.length)?new n(this.context,this._parent,t):this.externalSibling(1)}get prevSibling(){let{buffer:e}=this.context,t=this._parent?this._parent.index+4:0;return this.index==t?this.externalSibling(-1):new n(this.context,this._parent,e.findChild(t,this.index,-1,0,4))}get tree(){return null}toTree(){let e=[],t=[],{buffer:i}=this.context,s=this.index+4,r=i.buffer[this.index+3];if(r>s){let o=i.buffer[this.index+1];e.push(i.slice(s,r,o)),t.push(0)}return new J(this.type,e,t,this.to-this.from)}toString(){return this.context.buffer.childString(this.index)}};function Of(n){if(!n.length)return null;let e=0,t=n[0];for(let r=1;rt.from||o.to=e){let l=new Ye(o.tree,o.overlay[0].from+r.from,-1,r);(s||(s=[i])).push(un(l,e,t,!1))}}return s?Of(s):i}var dn=class{get name(){return this.type.name}constructor(e,t=0){if(this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,this.mode=t&~U.EnterBracketed,e instanceof Ye)this.yieldNode(e);else{this._tree=e.context.parent,this.buffer=e.context;for(let i=e._parent;i;i=i._parent)this.stack.unshift(i.index);this.bufferNode=e,this.yieldBuf(e.index)}}yieldNode(e){return e?(this._tree=e,this.type=e.type,this.from=e.from,this.to=e.to,!0):!1}yieldBuf(e,t){this.index=e;let{start:i,buffer:s}=this.buffer;return this.type=t||s.set.types[s.buffer[e]],this.from=i+s.buffer[e+1],this.to=i+s.buffer[e+2],!0}yield(e){return e?e instanceof Ye?(this.buffer=null,this.yieldNode(e)):(this.buffer=e.context,this.yieldBuf(e.index,e.type)):!1}toString(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()}enterChild(e,t,i){if(!this.buffer)return this.yield(this._tree.nextChild(e<0?this._tree._tree.children.length-1:0,e,t,i,this.mode));let{buffer:s}=this.buffer,r=s.findChild(this.index+4,s.buffer[this.index+3],e,t-this.buffer.start,i);return r<0?!1:(this.stack.push(this.index),this.yieldBuf(r))}firstChild(){return this.enterChild(1,0,4)}lastChild(){return this.enterChild(-1,0,4)}childAfter(e){return this.enterChild(1,e,2)}childBefore(e){return this.enterChild(-1,e,-2)}enter(e,t,i=this.mode){return this.buffer?i&U.ExcludeBuffers?!1:this.enterChild(1,e,t):this.yield(this._tree.enter(e,t,i))}parent(){if(!this.buffer)return this.yieldNode(this.mode&U.IncludeAnonymous?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());let e=this.mode&U.IncludeAnonymous?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(e)}sibling(e){if(!this.buffer)return this._tree._parent?this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+e,e,0,4,this.mode)):!1;let{buffer:t}=this.buffer,i=this.stack.length-1;if(e<0){let s=i<0?0:this.stack[i]+4;if(this.index!=s)return this.yieldBuf(t.findChild(s,this.index,-1,0,4))}else{let s=t.buffer[this.index+3];if(s<(i<0?t.buffer.length:t.buffer[this.stack[i]+3]))return this.yieldBuf(s)}return i<0?this.yield(this.buffer.parent.nextChild(this.buffer.index+e,e,0,4,this.mode)):!1}nextSibling(){return this.sibling(1)}prevSibling(){return this.sibling(-1)}atLastNode(e){let t,i,{buffer:s}=this;if(s){if(e>0){if(this.index-1)for(let r=t+e,o=e<0?-1:i._tree.children.length;r!=o;r+=e){let l=i._tree.children[r];if(this.mode&U.IncludeAnonymous||l instanceof vt||!l.type.isAnonymous||pl(l))return!1}return!0}move(e,t){if(t&&this.enterChild(e,0,4))return!0;for(;;){if(this.sibling(e))return!0;if(this.atLastNode(e)||!this.parent())return!1}}next(e=!0){return this.move(1,e)}prev(e=!0){return this.move(-1,e)}moveTo(e,t=0){for(;(this.from==this.to||(t<1?this.from>=e:this.from>e)||(t>-1?this.to<=e:this.to=0;){for(let o=e;o;o=o._parent)if(o.index==s){if(s==this.index)return o;t=o,i=r+1;break e}s=this.stack[--r]}for(let s=i;s=0;r--){if(r<0)return cl(this._tree,e,s);let o=i[t.buffer[this.stack[r]]];if(!o.isAnonymous){if(e[s]&&e[s]!=o.name)return!1;s--}}return!0}};function pl(n){return n.children.some(e=>e instanceof vt||!e.type.isAnonymous||pl(e))}function ym(n){var e;let{buffer:t,nodeSet:i,maxBufferLength:s=1024,reused:r=[],minRepeatType:o=i.types.length}=n,l=Array.isArray(t)?new hl(t,t.length):t,a=i.types,h=0,c=0;function f(w,k,Q,X,D,q){let{id:L,start:M,end:I,size:z}=l,N=c,pe=h;if(z<0)if(l.next(),z==-1){let at=r[L];Q.push(at),X.push(M-w);return}else if(z==-3){h=L;return}else if(z==-4){c=L;return}else throw new RangeError(`Unrecognized record size: ${z}`);let Qe=a[L],tt,oe,Le=M-w;if(I-M<=s&&(oe=g(l.pos-k,D))){let at=new Uint16Array(oe.size-oe.skip),Ee=l.pos-oe.size,it=at.length;for(;l.pos>Ee;)it=y(oe.start,at,it);tt=new vt(at,I-oe.start,i),Le=oe.start-w}else{let at=l.pos-z;l.next();let Ee=[],it=[],Lt=L>=o?L:-1,ri=0,Rn=I;for(;l.pos>at;)Lt>=0&&l.id==Lt&&l.size>=0?(l.end<=Rn-s&&(p(Ee,it,M,ri,l.end,Rn,Lt,N,pe),ri=Ee.length,Rn=l.end),l.next()):q>2500?u(M,at,Ee,it):f(M,at,Ee,it,Lt,q+1);if(Lt>=0&&ri>0&&ri-1&&ri>0){let Da=d(Qe,pe);tt=Ol(Qe,Ee,it,0,Ee.length,0,I-M,Da,Da)}else tt=O(Qe,Ee,it,I-M,N-I,pe)}Q.push(tt),X.push(Le)}function u(w,k,Q,X){let D=[],q=0,L=-1;for(;l.pos>k;){let{id:M,start:I,end:z,size:N}=l;if(N>4)l.next();else{if(L>-1&&I=0;z-=3)M[N++]=D[z],M[N++]=D[z+1]-I,M[N++]=D[z+2]-I,M[N++]=N;Q.push(new vt(M,D[2]-I,i)),X.push(I-w)}}function d(w,k){return(Q,X,D)=>{let q=0,L=Q.length-1,M,I;if(L>=0&&(M=Q[L])instanceof J){if(!L&&M.type==w&&M.length==D)return M;(I=M.prop(R.lookAhead))&&(q=X[L]+M.length+I)}return O(w,Q,X,D,q,k)}}function p(w,k,Q,X,D,q,L,M,I){let z=[],N=[];for(;w.length>X;)z.push(w.pop()),N.push(k.pop()+Q-D);w.push(O(i.types[L],z,N,q-D,M-q,I)),k.push(D-Q)}function O(w,k,Q,X,D,q,L){if(q){let M=[R.contextHash,q];L=L?[M].concat(L):[M]}if(D>25){let M=[R.lookAhead,D];L=L?[M].concat(L):[M]}return new J(w,k,Q,X,L)}function g(w,k){let Q=l.fork(),X=0,D=0,q=0,L=Q.end-s,M={size:0,start:0,skip:0};e:for(let I=Q.pos-w;Q.pos>I;){let z=Q.size;if(Q.id==k&&z>=0){M.size=X,M.start=D,M.skip=q,q+=4,X+=4,Q.next();continue}let N=Q.pos-z;if(z<0||N=o?4:0,Qe=Q.start;for(Q.next();Q.pos>N;){if(Q.size<0)if(Q.size==-3||Q.size==-4)pe+=4;else break e;else Q.id>=o&&(pe+=4);Q.next()}D=Qe,X+=z,q+=pe}return(k<0||X==w)&&(M.size=X,M.start=D,M.skip=q),M.size>4?M:void 0}function y(w,k,Q){let{id:X,start:D,end:q,size:L}=l;if(l.next(),L>=0&&X4){let I=l.pos-(L-4);for(;l.pos>I;)Q=y(w,k,Q)}k[--Q]=M,k[--Q]=q-w,k[--Q]=D-w,k[--Q]=X}else L==-3?h=X:L==-4&&(c=X);return Q}let x=[],S=[];for(;l.pos>0;)f(n.start||0,n.bufferStart||0,x,S,-1,0);let C=(e=n.length)!==null&&e!==void 0?e:x.length?S[0]+x[0].length:0;return new J(a[n.topID],x.reverse(),S.reverse(),C)}var df=new WeakMap;function Cs(n,e){if(!n.isAnonymous||e instanceof vt||e.type!=n)return 1;let t=df.get(e);if(t==null){t=1;for(let i of e.children){if(i.type!=n||!(i instanceof J)){t=1;break}t+=Cs(n,i)}df.set(e,t)}return t}function Ol(n,e,t,i,s,r,o,l,a){let h=0;for(let p=i;p=c)break;k+=Q}if(S==C+1){if(k>c){let Q=p[C];d(Q.children,Q.positions,0,Q.children.length,O[C]+x);continue}f.push(p[C])}else{let Q=O[S-1]+p[S-1].length-w;f.push(Ol(n,p,O,C,S,w,Q,null,a))}u.push(w+x-r)}}return d(e,t,i,s,0),(l||a)(f,u,o)}var As=class{constructor(){this.map=new WeakMap}setBuffer(e,t,i){let s=this.map.get(e);s||this.map.set(e,s=new Map),s.set(t,i)}getBuffer(e,t){let i=this.map.get(e);return i&&i.get(t)}set(e,t){e instanceof Gt?this.setBuffer(e.context.buffer,e.index,t):e instanceof Ye&&this.map.set(e.tree,t)}get(e){return e instanceof Gt?this.getBuffer(e.context.buffer,e.index):e instanceof Ye?this.map.get(e.tree):void 0}cursorSet(e,t){e.buffer?this.setBuffer(e.buffer.buffer,e.index,t):this.map.set(e.tree,t)}cursorGet(e){return e.buffer?this.getBuffer(e.buffer.buffer,e.index):this.map.get(e.tree)}},Ut=class n{constructor(e,t,i,s,r=!1,o=!1){this.from=e,this.to=t,this.tree=i,this.offset=s,this.open=(r?1:0)|(o?2:0)}get openStart(){return(this.open&1)>0}get openEnd(){return(this.open&2)>0}static addTree(e,t=[],i=!1){let s=[new n(0,e.length,e,0,!1,i)];for(let r of t)r.to>e.length&&s.push(r);return s}static applyChanges(e,t,i=128){if(!t.length)return e;let s=[],r=1,o=e.length?e[0]:null;for(let l=0,a=0,h=0;;l++){let c=l=i)for(;o&&o.from=u.from||f<=u.to||h){let d=Math.max(u.from,a)-h,p=Math.min(u.to,f)-h;u=d>=p?null:new n(d,p,u.tree,u.offset+h,l>0,!!c)}if(u&&s.push(u),o.to>f)break;o=rnew cn(s.from,s.to)):[new cn(0,0)]:[new cn(0,e.length)],this.createParse(e,t||[],i)}parse(e,t,i){let s=this.startParse(e,t,i);for(;;){let r=s.advance();if(r)return r}}},dl=class{constructor(e){this.string=e}get length(){return this.string.length}chunk(e){return this.string.slice(e)}get lineChunks(){return!1}read(e,t){return this.string.slice(e,t)}};var sb=new R({perNode:!0});var yl=class n{constructor(e,t,i,s,r,o,l,a,h,c=0,f){this.p=e,this.stack=t,this.state=i,this.reducePos=s,this.pos=r,this.score=o,this.buffer=l,this.bufferBase=a,this.curContext=h,this.lookAhead=c,this.parent=f}toString(){return`[${this.stack.filter((e,t)=>t%3==0).concat(this.state)}]@${this.pos}${this.score?"!"+this.score:""}`}static start(e,t,i=0){let s=e.parser.context;return new n(e,[],t,i,i,0,[],0,s?new Ms(s,s.start):null,0,null)}get context(){return this.curContext?this.curContext.context:null}pushState(e,t){this.stack.push(this.state,t,this.bufferBase+this.buffer.length),this.state=e}reduce(e){var t;let i=e>>19,s=e&65535,{parser:r}=this.p,o=this.reducePos=2e3&&!(!((t=this.p.parser.nodeSet.types[s])===null||t===void 0)&&t.isAnonymous)&&(h==this.p.lastBigReductionStart?(this.p.bigReductionCount++,this.p.lastBigReductionSize=c):this.p.lastBigReductionSizea;)this.stack.pop();this.reduceContext(s,h)}storeNode(e,t,i,s=4,r=!1){if(e==0&&(!this.stack.length||this.stack[this.stack.length-1]0&&this.buffer[o-4]==0&&this.buffer[o-1]>-1){if(t==i)return;if(this.buffer[o-2]>=t){this.buffer[o-2]=i;return}}}if(!r||this.pos==i)this.buffer.push(e,t,i,s);else{let o=this.buffer.length;if(o>0&&(this.buffer[o-4]!=0||this.buffer[o-1]<0)){let l=!1;for(let a=o;a>0&&this.buffer[a-2]>i;a-=4)if(this.buffer[a-1]>=0){l=!0;break}if(l)for(;o>0&&this.buffer[o-2]>i;)this.buffer[o]=this.buffer[o-4],this.buffer[o+1]=this.buffer[o-3],this.buffer[o+2]=this.buffer[o-2],this.buffer[o+3]=this.buffer[o-1],o-=4,s>4&&(s-=4)}this.buffer[o]=e,this.buffer[o+1]=t,this.buffer[o+2]=i,this.buffer[o+3]=s}}shift(e,t,i,s){if(e&131072)this.pushState(e&65535,this.pos);else if((e&262144)==0){let r=e,{parser:o}=this.p;this.pos=s;let l=o.stateFlag(r,1);!l&&(s>i||t<=o.maxNode)&&(this.reducePos=s),this.pushState(r,l?i:Math.min(i,this.reducePos)),this.shiftContext(t,i),t<=o.maxNode&&this.buffer.push(t,i,s,4)}else this.pos=s,this.shiftContext(t,i),t<=this.p.parser.maxNode&&this.buffer.push(t,i,s,4)}apply(e,t,i,s){e&65536?this.reduce(e):this.shift(e,t,i,s)}useNode(e,t){let i=this.p.reused.length-1;(i<0||this.p.reused[i]!=e)&&(this.p.reused.push(e),i++);let s=this.pos;this.reducePos=this.pos=s+e.length,this.pushState(t,s),this.buffer.push(i,s,this.reducePos,-1),this.curContext&&this.updateContext(this.curContext.tracker.reuse(this.curContext.context,e,this,this.p.stream.reset(this.pos-e.length)))}split(){let e=this,t=e.buffer.length;for(t&&e.buffer[t-4]==0&&(t-=4);t>0&&e.buffer[t-2]>e.reducePos;)t-=4;let i=e.buffer.slice(t),s=e.bufferBase+t;for(;e&&s==e.bufferBase;)e=e.parent;return new n(this.p,this.stack.slice(),this.state,this.reducePos,this.pos,this.score,i,s,this.curContext,this.lookAhead,e)}recoverByDelete(e,t){let i=e<=this.p.parser.maxNode;i&&this.storeNode(e,this.pos,t,4),this.storeNode(0,this.pos,t,i?8:4),this.pos=this.reducePos=t,this.score-=190}canShift(e){for(let t=new bl(this);;){let i=this.p.parser.stateSlot(t.state,4)||this.p.parser.hasAction(t.state,e);if(i==0)return!1;if((i&65536)==0)return!0;t.reduce(i)}}recoverByInsert(e){if(this.stack.length>=300)return[];let t=this.p.parser.nextStates(this.state);if(t.length>8||this.stack.length>=120){let s=[];for(let r=0,o;ra&1&&l==o)||s.push(t[r],o)}t=s}let i=[];for(let s=0;s>19,s=t&65535,r=this.stack.length-i*3;if(r<0||e.getGoto(this.stack[r],s,!1)<0){let o=this.findForcedReduction();if(o==null)return!1;t=o}this.storeNode(0,this.pos,this.pos,4,!0),this.score-=100}return this.reducePos=this.pos,this.reduce(t),!0}findForcedReduction(){let{parser:e}=this.p,t=[],i=(s,r)=>{if(!t.includes(s))return t.push(s),e.allActions(s,o=>{if(!(o&393216))if(o&65536){let l=(o>>19)-r;if(l>1){let a=o&65535,h=this.stack.length-l*3;if(h>=0&&e.getGoto(this.stack[h],a,!1)>=0)return l<<19|65536|a}}else{let l=i(o,r+1);if(l!=null)return l}})};return i(this.state,0)}forceAll(){for(;!this.p.parser.stateFlag(this.state,2);)if(!this.forceReduce()){this.storeNode(0,this.pos,this.pos,4,!0);break}return this}get deadEnd(){if(this.stack.length!=3)return!1;let{parser:e}=this.p;return e.data[e.stateSlot(this.state,1)]==65535&&!e.stateSlot(this.state,4)}restart(){this.storeNode(0,this.pos,this.pos,4,!0),this.state=this.stack[0],this.stack.length=0}sameState(e){if(this.state!=e.state||this.stack.length!=e.stack.length)return!1;for(let t=0;t0&&this.emitLookAhead()}},Ms=class{constructor(e,t){this.tracker=e,this.context=t,this.hash=e.strict?e.hash(t):0}},bl=class{constructor(e){this.start=e,this.state=e.state,this.stack=e.stack,this.base=this.stack.length}reduce(e){let t=e&65535,i=e>>19;i==0?(this.stack==this.start.stack&&(this.stack=this.stack.slice()),this.stack.push(this.state,0,0),this.base+=3):this.base-=(i-1)*3;let s=this.start.p.parser.getGoto(this.stack[this.base-3],t,!0);this.state=s}},xl=class n{constructor(e,t,i){this.stack=e,this.pos=t,this.index=i,this.buffer=e.buffer,this.index==0&&this.maybeNext()}static create(e,t=e.bufferBase+e.buffer.length){return new n(e,t,t-e.bufferBase)}maybeNext(){let e=this.stack.parent;e!=null&&(this.index=this.stack.bufferBase-e.bufferBase,this.stack=e,this.buffer=e.buffer)}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}next(){this.index-=4,this.pos-=4,this.index==0&&this.maybeNext()}fork(){return new n(this.stack,this.pos,this.index)}};function pn(n,e=Uint16Array){if(typeof n!="string")return n;let t=null;for(let i=0,s=0;i=92&&o--,o>=34&&o--;let a=o-32;if(a>=46&&(a-=46,l=!0),r+=a,l)break;r*=46}t?t[s++]=r:t=new e(r)}return t}var Pi=class{constructor(){this.start=-1,this.value=-1,this.end=-1,this.extended=-1,this.lookAhead=0,this.mask=0,this.context=0}},mf=new Pi,Sl=class{constructor(e,t){this.input=e,this.ranges=t,this.chunk="",this.chunkOff=0,this.chunk2="",this.chunk2Pos=0,this.next=-1,this.token=mf,this.rangeIndex=0,this.pos=this.chunkPos=t[0].from,this.range=t[0],this.end=t[t.length-1].to,this.readNext()}resolveOffset(e,t){let i=this.range,s=this.rangeIndex,r=this.pos+e;for(;ri.to:r>=i.to;){if(s==this.ranges.length-1)return null;let o=this.ranges[++s];r+=o.from-i.to,i=o}return r}clipPos(e){if(e>=this.range.from&&ee)return Math.max(e,t.from);return this.end}peek(e){let t=this.chunkOff+e,i,s;if(t>=0&&t=this.chunk2Pos&&il.to&&(this.chunk2=this.chunk2.slice(0,l.to-i)),s=this.chunk2.charCodeAt(0)}}return i>=this.token.lookAhead&&(this.token.lookAhead=i+1),s}acceptToken(e,t=0){let i=t?this.resolveOffset(t,-1):this.pos;if(i==null||i=this.chunk2Pos&&this.posthis.range.to?e.slice(0,this.range.to-this.pos):e,this.chunkPos=this.pos,this.chunkOff=0}}readNext(){return this.chunkOff>=this.chunk.length&&(this.getChunk(),this.chunkOff==this.chunk.length)?this.next=-1:this.next=this.chunk.charCodeAt(this.chunkOff)}advance(e=1){for(this.chunkOff+=e;this.pos+e>=this.range.to;){if(this.rangeIndex==this.ranges.length-1)return this.setDone();e-=this.range.to-this.pos,this.range=this.ranges[++this.rangeIndex],this.pos=this.range.from}return this.pos+=e,this.pos>=this.token.lookAhead&&(this.token.lookAhead=this.pos+1),this.readNext()}setDone(){return this.pos=this.chunkPos=this.end,this.range=this.ranges[this.rangeIndex=this.ranges.length-1],this.chunk="",this.next=-1}reset(e,t){if(t?(this.token=t,t.start=e,t.lookAhead=e+1,t.value=t.extended=-1):this.token=mf,this.pos!=e){if(this.pos=e,e==this.end)return this.setDone(),this;for(;e=this.range.to;)this.range=this.ranges[++this.rangeIndex];e>=this.chunkPos&&e=this.chunkPos&&t<=this.chunkPos+this.chunk.length)return this.chunk.slice(e-this.chunkPos,t-this.chunkPos);if(e>=this.chunk2Pos&&t<=this.chunk2Pos+this.chunk2.length)return this.chunk2.slice(e-this.chunk2Pos,t-this.chunk2Pos);if(e>=this.range.from&&t<=this.range.to)return this.input.read(e,t);let i="";for(let s of this.ranges){if(s.from>=t)break;s.to>e&&(i+=this.input.read(Math.max(s.from,e),Math.min(s.to,t)))}return i}},$t=class{constructor(e,t){this.data=e,this.id=t}token(e,t){let{parser:i}=t.p;Sf(this.data,e,t,this.id,i.data,i.tokenPrecTable)}};$t.prototype.contextual=$t.prototype.fallback=$t.prototype.extend=!1;var Ti=class{constructor(e,t,i){this.precTable=t,this.elseToken=i,this.data=typeof e=="string"?pn(e):e}token(e,t){let i=e.pos,s=0;for(;;){let r=e.next<0,o=e.resolveOffset(1,1);if(Sf(this.data,e,t,0,this.data,this.precTable),e.token.value>-1)break;if(this.elseToken==null)return;if(r||s++,o==null)break;e.reset(o,e.token)}s&&(e.reset(i,e.token),e.acceptToken(this.elseToken,s))}};Ti.prototype.contextual=$t.prototype.fallback=$t.prototype.extend=!1;var Pt=class{constructor(e,t={}){this.token=e,this.contextual=!!t.contextual,this.fallback=!!t.fallback,this.extend=!!t.extend}};function Sf(n,e,t,i,s,r){let o=0,l=1<0){let p=n[d];if(a.allows(p)&&(e.token.value==-1||e.token.value==p||xm(p,e.token.value,s,r))){e.acceptToken(p);break}}let c=e.next,f=0,u=n[o+2];if(e.next<0&&u>f&&n[h+u*3-3]==65535){o=n[h+u*3-1];continue e}for(;f>1,p=h+d+(d<<1),O=n[p],g=n[p+1]||65536;if(c=g)f=d+1;else{o=n[p+2],e.advance();continue e}}break}}function gf(n,e,t){for(let i=e,s;(s=n[i])!=65535;i++)if(s==t)return i-e;return-1}function xm(n,e,t,i){let s=gf(t,i,e);return s<0||gf(t,i,n)e)&&!i.type.isError)return t<0?Math.max(0,Math.min(i.to-1,e-25)):Math.min(n.length,Math.max(i.from+1,e+25));if(t<0?i.prevSibling():i.nextSibling())break;if(!i.parent())return t<0?0:n.length}}var wl=class{constructor(e,t){this.fragments=e,this.nodeSet=t,this.i=0,this.fragment=null,this.safeFrom=-1,this.safeTo=-1,this.trees=[],this.start=[],this.index=[],this.nextFragment()}nextFragment(){let e=this.fragment=this.i==this.fragments.length?null:this.fragments[this.i++];if(e){for(this.safeFrom=e.openStart?yf(e.tree,e.from+e.offset,1)-e.offset:e.from,this.safeTo=e.openEnd?yf(e.tree,e.to+e.offset,-1)-e.offset:e.to;this.trees.length;)this.trees.pop(),this.start.pop(),this.index.pop();this.trees.push(e.tree),this.start.push(-e.offset),this.index.push(0),this.nextStart=this.safeFrom}else this.nextStart=1e9}nodeAt(e){if(ee)return this.nextStart=o,null;if(r instanceof J){if(o==e){if(o=Math.max(this.safeFrom,e)&&(this.trees.push(r),this.start.push(o),this.index.push(0))}else this.index[t]++,this.nextStart=o+r.length}}},kl=class{constructor(e,t){this.stream=t,this.tokens=[],this.mainToken=null,this.actions=[],this.tokens=e.tokenizers.map(i=>new Pi)}getActions(e){let t=0,i=null,{parser:s}=e.p,{tokenizers:r}=s,o=s.stateSlot(e.state,3),l=e.curContext?e.curContext.hash:0,a=0;for(let h=0;hf.end+25&&(a=Math.max(f.lookAhead,a)),f.value!=0)){let u=t;if(f.extended>-1&&(t=this.addActions(e,f.extended,f.end,t)),t=this.addActions(e,f.value,f.end,t),!c.extend&&(i=f,t>u))break}}for(;this.actions.length>t;)this.actions.pop();return a&&e.setLookAhead(a),!i&&e.pos==this.stream.end&&(i=new Pi,i.value=e.p.parser.eofTerm,i.start=i.end=e.pos,t=this.addActions(e,i.value,i.end,t)),this.mainToken=i,this.actions}getMainToken(e){if(this.mainToken)return this.mainToken;let t=new Pi,{pos:i,p:s}=e;return t.start=i,t.end=Math.min(i+1,s.stream.end),t.value=i==s.stream.end?s.parser.eofTerm:0,t}updateCachedToken(e,t,i){let s=this.stream.clipPos(i.pos);if(t.token(this.stream.reset(s,e),i),e.value>-1){let{parser:r}=i.p;for(let o=0;o=0&&i.p.parser.dialect.allows(l>>1)){(l&1)==0?e.value=l>>1:e.extended=l>>1;break}}}else e.value=0,e.end=this.stream.clipPos(s+1)}putAction(e,t,i,s){for(let r=0;re.bufferLength*4?new wl(i,e.nodeSet):null}get parsedPos(){return this.minStackPos}advance(){let e=this.stacks,t=this.minStackPos,i=this.stacks=[],s,r;if(this.bigReductionCount>300&&e.length==1){let[o]=e;for(;o.forceReduce()&&o.stack.length&&o.stack[o.stack.length-2]>=this.lastBigReductionStart;);this.bigReductionCount=this.lastBigReductionSize=0}for(let o=0;ot)i.push(l);else{if(this.advanceStack(l,i,e))continue;{s||(s=[],r=[]),s.push(l);let a=this.tokens.getMainToken(l);r.push(a.value,a.end)}}break}}if(!i.length){let o=s&&Sm(s);if(o)return Ze&&console.log("Finish with "+this.stackID(o)),this.stackToTree(o);if(this.parser.strict)throw Ze&&s&&console.log("Stuck with token "+(this.tokens.mainToken?this.parser.getName(this.tokens.mainToken.value):"none")),new SyntaxError("No parse at "+t);this.recovering||(this.recovering=5)}if(this.recovering&&s){let o=this.stoppedAt!=null&&s[0].pos>this.stoppedAt?s[0]:this.runRecovery(s,r,i);if(o)return Ze&&console.log("Force-finish "+this.stackID(o)),this.stackToTree(o.forceAll())}if(this.recovering){let o=this.recovering==1?1:this.recovering*3;if(i.length>o)for(i.sort((l,a)=>a.score-l.score);i.length>o;)i.pop();i.some(l=>l.reducePos>t)&&this.recovering--}else if(i.length>1){e:for(let o=0;o500&&h.buffer.length>500)if((l.score-h.score||l.buffer.length-h.buffer.length)>0)i.splice(a--,1);else{i.splice(o--,1);continue e}}}i.length>12&&(i.sort((o,l)=>l.score-o.score),i.splice(12,i.length-12))}this.minStackPos=i[0].pos;for(let o=1;o ":"";if(this.stoppedAt!=null&&s>this.stoppedAt)return e.forceReduce()?e:null;if(this.fragments){let h=e.curContext&&e.curContext.tracker.strict,c=h?e.curContext.hash:0;for(let f=this.fragments.nodeAt(s);f;){let u=this.parser.nodeSet.types[f.type.id]==f.type?r.getGoto(e.state,f.type.id):-1;if(u>-1&&f.length&&(!h||(f.prop(R.contextHash)||0)==c))return e.useNode(f,u),Ze&&console.log(o+this.stackID(e)+` (via reuse of ${r.getName(f.type.id)})`),!0;if(!(f instanceof J)||f.children.length==0||f.positions[0]>0)break;let d=f.children[0];if(d instanceof J&&f.positions[0]==0)f=d;else break}}let l=r.stateSlot(e.state,4);if(l>0)return e.reduce(l),Ze&&console.log(o+this.stackID(e)+` (via always-reduce ${r.getName(l&65535)})`),!0;if(e.stack.length>=8400)for(;e.stack.length>6e3&&e.forceReduce(););let a=this.tokens.getActions(e);for(let h=0;hs?t.push(p):i.push(p)}return!1}advanceFully(e,t){let i=e.pos;for(;;){if(!this.advanceStack(e,null,null))return!1;if(e.pos>i)return bf(e,t),!0}}runRecovery(e,t,i){let s=null,r=!1;for(let o=0;o ":"";if(l.deadEnd&&(r||(r=!0,l.restart(),Ze&&console.log(c+this.stackID(l)+" (restarted)"),this.advanceFully(l,i))))continue;let f=l.split(),u=c;for(let d=0;d<10&&f.forceReduce()&&(Ze&&console.log(u+this.stackID(f)+" (via force-reduce)"),!this.advanceFully(f,i));d++)Ze&&(u=this.stackID(f)+" -> ");for(let d of l.recoverByInsert(a))Ze&&console.log(c+this.stackID(d)+" (via recover-insert)"),this.advanceFully(d,i);this.stream.end>l.pos?(h==l.pos&&(h++,a=0),l.recoverByDelete(a,h),Ze&&console.log(c+this.stackID(l)+` (via recover-delete ${this.parser.getName(a)})`),bf(l,i)):(!s||s.scoren,Rs=class{constructor(e){this.start=e.start,this.shift=e.shift||gl,this.reduce=e.reduce||gl,this.reuse=e.reuse||gl,this.hash=e.hash||(()=>0),this.strict=e.strict!==!1}},Xs=class n extends $i{constructor(e){if(super(),this.wrappers=[],e.version!=14)throw new RangeError(`Parser version (${e.version}) doesn't match runtime version (14)`);let t=e.nodeNames.split(" ");this.minRepeatTerm=t.length;for(let l=0;le.topRules[l][1]),s=[];for(let l=0;l=0)r(c,a,l[h++]);else{let f=l[h+-c];for(let u=-c;u>0;u--)r(l[h++],a,f);h++}}}this.nodeSet=new fn(t.map((l,a)=>ue.define({name:a>=this.minRepeatTerm?void 0:l,id:a,props:s[a],top:i.indexOf(a)>-1,error:a==0,skipped:e.skippedNodes&&e.skippedNodes.indexOf(a)>-1}))),e.propSources&&(this.nodeSet=this.nodeSet.extend(...e.propSources)),this.strict=!1,this.bufferLength=1024;let o=pn(e.tokenData);this.context=e.context,this.specializerSpecs=e.specialized||[],this.specialized=new Uint16Array(this.specializerSpecs.length);for(let l=0;ltypeof l=="number"?new $t(o,l):l),this.topRules=e.topRules,this.dialects=e.dialects||{},this.dynamicPrecedences=e.dynamicPrecedences||null,this.tokenPrecTable=e.tokenPrec,this.termNames=e.termNames||null,this.maxNode=this.nodeSet.types.length-1,this.dialect=this.parseDialect(),this.top=this.topRules[Object.keys(this.topRules)[0]]}createParse(e,t,i){let s=new Ql(this,e,t,i);for(let r of this.wrappers)s=r(s,e,t,i);return s}getGoto(e,t,i=!1){let s=this.goto;if(t>=s[0])return-1;for(let r=s[t+1];;){let o=s[r++],l=o&1,a=s[r++];if(l&&i)return a;for(let h=r+(o>>1);r0}validAction(e,t){return!!this.allActions(e,i=>i==t?!0:null)}allActions(e,t){let i=this.stateSlot(e,4),s=i?t(i):void 0;for(let r=this.stateSlot(e,1);s==null;r+=3){if(this.data[r]==65535)if(this.data[r+1]==1)r=Ot(this.data,r+2);else break;s=t(Ot(this.data,r+1))}return s}nextStates(e){let t=[];for(let i=this.stateSlot(e,1);;i+=3){if(this.data[i]==65535)if(this.data[i+1]==1)i=Ot(this.data,i+2);else break;if((this.data[i+2]&1)==0){let s=this.data[i+1];t.some((r,o)=>o&1&&r==s)||t.push(this.data[i],s)}}return t}configure(e){let t=Object.assign(Object.create(n.prototype),this);if(e.props&&(t.nodeSet=this.nodeSet.extend(...e.props)),e.top){let i=this.topRules[e.top];if(!i)throw new RangeError(`Invalid top rule name ${e.top}`);t.top=i}return e.tokenizers&&(t.tokenizers=this.tokenizers.map(i=>{let s=e.tokenizers.find(r=>r.from==i);return s?s.to:i})),e.specializers&&(t.specializers=this.specializers.slice(),t.specializerSpecs=this.specializerSpecs.map((i,s)=>{let r=e.specializers.find(l=>l.from==i.external);if(!r)return i;let o=Object.assign(Object.assign({},i),{external:r.to});return t.specializers[s]=xf(o),o})),e.contextTracker&&(t.context=e.contextTracker),e.dialect&&(t.dialect=this.parseDialect(e.dialect)),e.strict!=null&&(t.strict=e.strict),e.wrap&&(t.wrappers=t.wrappers.concat(e.wrap)),e.bufferLength!=null&&(t.bufferLength=e.bufferLength),t}hasWrappers(){return this.wrappers.length>0}getName(e){return this.termNames?this.termNames[e]:String(e<=this.maxNode&&this.nodeSet.types[e].name||e)}get eofTerm(){return this.maxNode+1}get topNode(){return this.nodeSet.types[this.top[1]]}dynamicPrecedence(e){let t=this.dynamicPrecedences;return t==null?0:t[e]||0}parseDialect(e){let t=Object.keys(this.dialects),i=t.map(()=>!1);if(e)for(let r of e.split(" ")){let o=t.indexOf(r);o>=0&&(i[o]=!0)}let s=null;for(let r=0;ri)&&t.p.parser.stateFlag(t.state,2)&&(!e||e.scoren.external(t,i)<<1|e}return n.get}var wm=0,Ue=class n{constructor(e,t,i,s){this.name=e,this.set=t,this.base=i,this.modified=s,this.id=wm++}toString(){let{name:e}=this;for(let t of this.modified)t.name&&(e=`${t.name}(${e})`);return e}static define(e,t){let i=typeof e=="string"?e:"?";if(e instanceof n&&(t=e),t?.base)throw new Error("Can not derive from a modified tag");let s=new n(i,[],null,[]);if(s.set.push(s),t)for(let r of t.set)s.set.push(r);return s}static defineModifier(e){let t=new Ws(e);return i=>i.modified.indexOf(t)>-1?i:Ws.get(i.base||i,i.modified.concat(t).sort((s,r)=>s.id-r.id))}},km=0,Ws=class n{constructor(e){this.name=e,this.instances=[],this.id=km++}static get(e,t){if(!t.length)return e;let i=t[0].instances.find(l=>l.base==e&&Qm(t,l.modified));if(i)return i;let s=[],r=new Ue(e.name,s,e,t);for(let l of t)l.instances.push(r);let o=vm(t);for(let l of e.set)if(!l.modified.length)for(let a of o)s.push(n.get(l,a));return r}};function Qm(n,e){return n.length==e.length&&n.every((t,i)=>t==e[i])}function vm(n){let e=[[]];for(let t=0;ti.length-t.length)}function Bs(n){let e=Object.create(null);for(let t in n){let i=n[t];Array.isArray(i)||(i=[i]);for(let s of t.split(" "))if(s){let r=[],o=2,l=s;for(let f=0;;){if(l=="..."&&f>0&&f+3==s.length){o=1;break}let u=/^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(l);if(!u)throw new RangeError("Invalid path: "+s);if(r.push(u[0]=="*"?"":u[0][0]=='"'?JSON.parse(u[0]):u[0]),f+=u[0].length,f==s.length)break;let d=s[f++];if(f==s.length&&d=="!"){o=0;break}if(d!="/")throw new RangeError("Invalid path: "+s);l=s.slice(f)}let a=r.length-1,h=r[a];if(!h)throw new RangeError("Invalid path: "+s);let c=new Ht(i,o,a>0?r.slice(0,a):null);e[h]=c.sort(e[h])}}return Qf.add(e)}var Qf=new R({combine(n,e){let t,i,s;for(;n||e;){if(!n||e&&n.depth>=e.depth?(s=e,e=e.next):(s=n,n=n.next),t&&t.mode==s.mode&&!s.context&&!t.context)continue;let r=new Ht(s.tags,s.mode,s.context);t?t.next=r:i=r,t=r}return i}}),Ht=class{constructor(e,t,i,s){this.tags=e,this.mode=t,this.context=i,this.next=s}get opaque(){return this.mode==0}get inherit(){return this.mode==1}sort(e){return!e||e.depth{let o=s;for(let l of r)for(let a of l.set){let h=t[a.id];if(h){o=o?o+" "+h:h;break}}return o},scope:i}}function $m(n,e){let t=null;for(let i of n){let s=i.style(e);s&&(t=t?t+" "+s:s)}return t}function vf(n,e,t,i=0,s=n.length){let r=new Pl(i,Array.isArray(e)?e:[e],t);r.highlightRange(n.cursor(),i,s,"",r.highlighters),r.flush(s)}var Pl=class{constructor(e,t,i){this.at=e,this.highlighters=t,this.span=i,this.class=""}startSpan(e,t){t!=this.class&&(this.flush(e),e>this.at&&(this.at=e),this.class=t)}flush(e){e>this.at&&this.class&&this.span(this.at,e,this.class)}highlightRange(e,t,i,s,r){let{type:o,from:l,to:a}=e;if(l>=i||a<=t)return;o.isTop&&(r=this.highlighters.filter(d=>!d.scope||d.scope(o)));let h=s,c=Pm(e)||Ht.empty,f=$m(r,c.tags);if(f&&(h&&(h+=" "),h+=f,c.mode==1&&(s+=(s?" ":"")+f)),this.startSpan(Math.max(t,l),h),c.opaque)return;let u=e.tree&&e.tree.prop(R.mounted);if(u&&u.overlay){let d=e.node.enter(u.overlay[0].from+l,1),p=this.highlighters.filter(g=>!g.scope||g.scope(u.tree.type)),O=e.firstChild();for(let g=0,y=l;;g++){let x=g=S||!e.nextSibling())););if(!x||S>i)break;y=x.to+l,y>t&&(this.highlightRange(d.cursor(),Math.max(t,x.from+l),Math.min(i,y),"",p),this.startSpan(Math.min(i,y),h))}O&&e.parent()}else if(e.firstChild()){u&&(s="");do if(!(e.to<=t)){if(e.from>=i)break;this.highlightRange(e,t,i,s,r),this.startSpan(Math.min(i,e.to),h)}while(e.nextSibling());e.parent()}}};function Pm(n){let e=n.type.prop(Qf);for(;e&&e.context&&!n.matchContext(e.context);)e=e.next;return e||null}var P=Ue.define,Ls=P(),Tt=P(),wf=P(Tt),kf=P(Tt),Ct=P(),Es=P(Ct),$l=P(Ct),lt=P(),Ft=P(lt),rt=P(),ot=P(),Tl=P(),On=P(Tl),Ds=P(),m={comment:Ls,lineComment:P(Ls),blockComment:P(Ls),docComment:P(Ls),name:Tt,variableName:P(Tt),typeName:wf,tagName:P(wf),propertyName:kf,attributeName:P(kf),className:P(Tt),labelName:P(Tt),namespace:P(Tt),macroName:P(Tt),literal:Ct,string:Es,docString:P(Es),character:P(Es),attributeValue:P(Es),number:$l,integer:P($l),float:P($l),bool:P(Ct),regexp:P(Ct),escape:P(Ct),color:P(Ct),url:P(Ct),keyword:rt,self:P(rt),null:P(rt),atom:P(rt),unit:P(rt),modifier:P(rt),operatorKeyword:P(rt),controlKeyword:P(rt),definitionKeyword:P(rt),moduleKeyword:P(rt),operator:ot,derefOperator:P(ot),arithmeticOperator:P(ot),logicOperator:P(ot),bitwiseOperator:P(ot),compareOperator:P(ot),updateOperator:P(ot),definitionOperator:P(ot),typeOperator:P(ot),controlOperator:P(ot),punctuation:Tl,separator:P(Tl),bracket:On,angleBracket:P(On),squareBracket:P(On),paren:P(On),brace:P(On),content:lt,heading:Ft,heading1:P(Ft),heading2:P(Ft),heading3:P(Ft),heading4:P(Ft),heading5:P(Ft),heading6:P(Ft),contentSeparator:P(lt),list:P(lt),quote:P(lt),emphasis:P(lt),strong:P(lt),link:P(lt),monospace:P(lt),strikethrough:P(lt),inserted:P(),deleted:P(),changed:P(),invalid:P(),meta:Ds,documentMeta:P(Ds),annotation:P(Ds),processingInstruction:P(Ds),definition:Ue.defineModifier("definition"),constant:Ue.defineModifier("constant"),function:Ue.defineModifier("function"),standard:Ue.defineModifier("standard"),local:Ue.defineModifier("local"),special:Ue.defineModifier("special")};for(let n in m){let e=m[n];e instanceof Ue&&(e.name=n)}var hb=Cl([{tag:m.link,class:"tok-link"},{tag:m.heading,class:"tok-heading"},{tag:m.emphasis,class:"tok-emphasis"},{tag:m.strong,class:"tok-strong"},{tag:m.keyword,class:"tok-keyword"},{tag:m.atom,class:"tok-atom"},{tag:m.bool,class:"tok-bool"},{tag:m.url,class:"tok-url"},{tag:m.labelName,class:"tok-labelName"},{tag:m.inserted,class:"tok-inserted"},{tag:m.deleted,class:"tok-deleted"},{tag:m.literal,class:"tok-literal"},{tag:m.string,class:"tok-string"},{tag:m.number,class:"tok-number"},{tag:[m.regexp,m.escape,m.special(m.string)],class:"tok-string2"},{tag:m.variableName,class:"tok-variableName"},{tag:m.local(m.variableName),class:"tok-variableName tok-local"},{tag:m.definition(m.variableName),class:"tok-variableName tok-definition"},{tag:m.special(m.variableName),class:"tok-variableName2"},{tag:m.definition(m.propertyName),class:"tok-propertyName tok-definition"},{tag:m.typeName,class:"tok-typeName"},{tag:m.namespace,class:"tok-namespace"},{tag:m.className,class:"tok-className"},{tag:m.macroName,class:"tok-macroName"},{tag:m.propertyName,class:"tok-propertyName"},{tag:m.operator,class:"tok-operator"},{tag:m.comment,class:"tok-comment"},{tag:m.meta,class:"tok-meta"},{tag:m.invalid,class:"tok-invalid"},{tag:m.punctuation,class:"tok-punctuation"}]);var Tm=316,Cm=317,$f=1,Zm=2,Am=3,Mm=4,Rm=318,Xm=320,Lm=321,Em=5,Dm=6,Wm=0,Al=[9,10,11,12,13,32,133,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288],Pf=125,Bm=59,Ml=47,zm=42,_m=43,Im=45,Ym=60,Vm=44,qm=63,jm=46,Nm=91,Gm=new Rs({start:!1,shift(n,e){return e==Em||e==Dm||e==Xm?n:e==Lm},strict:!1}),Um=new Pt((n,e)=>{let{next:t}=n;(t==Pf||t==-1||e.context)&&n.acceptToken(Rm)},{contextual:!0,fallback:!0}),Fm=new Pt((n,e)=>{let{next:t}=n,i;Al.indexOf(t)>-1||t==Ml&&((i=n.peek(1))==Ml||i==zm)||t!=Pf&&t!=Bm&&t!=-1&&!e.context&&n.acceptToken(Tm)},{contextual:!0}),Hm=new Pt((n,e)=>{n.next==Nm&&!e.context&&n.acceptToken(Cm)},{contextual:!0}),Km=new Pt((n,e)=>{let{next:t}=n;if(t==_m||t==Im){if(n.advance(),t==n.next){n.advance();let i=!e.context&&e.canShift($f);n.acceptToken(i?$f:Zm)}}else t==qm&&n.peek(1)==jm&&(n.advance(),n.advance(),(n.next<48||n.next>57)&&n.acceptToken(Am))},{contextual:!0});function Zl(n,e){return n>=65&&n<=90||n>=97&&n<=122||n==95||n>=192||!e&&n>=48&&n<=57}var Jm=new Pt((n,e)=>{if(n.next!=Ym||!e.dialectEnabled(Wm)||(n.advance(),n.next==Ml))return;let t=0;for(;Al.indexOf(n.next)>-1;)n.advance(),t++;if(Zl(n.next,!0)){for(n.advance(),t++;Zl(n.next,!1);)n.advance(),t++;for(;Al.indexOf(n.next)>-1;)n.advance(),t++;if(n.next==Vm)return;for(let i=0;;i++){if(i==7){if(!Zl(n.next,!0))return;break}if(n.next!="extends".charCodeAt(i))break;n.advance(),t++}}n.acceptToken(Mm,-t)}),eg=Bs({"get set async static":m.modifier,"for while do if else switch try catch finally return throw break continue default case defer":m.controlKeyword,"in of await yield void typeof delete instanceof as satisfies":m.operatorKeyword,"let var const using function class extends":m.definitionKeyword,"import export from":m.moduleKeyword,"with debugger new":m.keyword,TemplateString:m.special(m.string),super:m.atom,BooleanLiteral:m.bool,this:m.self,null:m.null,Star:m.modifier,VariableName:m.variableName,"CallExpression/VariableName TaggedTemplateExpression/VariableName":m.function(m.variableName),VariableDefinition:m.definition(m.variableName),Label:m.labelName,PropertyName:m.propertyName,PrivatePropertyName:m.special(m.propertyName),"CallExpression/MemberExpression/PropertyName":m.function(m.propertyName),"FunctionDeclaration/VariableDefinition":m.function(m.definition(m.variableName)),"ClassDeclaration/VariableDefinition":m.definition(m.className),"NewExpression/VariableName":m.className,PropertyDefinition:m.definition(m.propertyName),PrivatePropertyDefinition:m.definition(m.special(m.propertyName)),UpdateOp:m.updateOperator,"LineComment Hashbang":m.lineComment,BlockComment:m.blockComment,Number:m.number,String:m.string,Escape:m.escape,ArithOp:m.arithmeticOperator,LogicOp:m.logicOperator,BitOp:m.bitwiseOperator,CompareOp:m.compareOperator,RegExp:m.regexp,Equals:m.definitionOperator,Arrow:m.function(m.punctuation),": Spread":m.punctuation,"( )":m.paren,"[ ]":m.squareBracket,"{ }":m.brace,"InterpolationStart InterpolationEnd":m.special(m.brace),".":m.derefOperator,", ;":m.separator,"@":m.meta,TypeName:m.typeName,TypeDefinition:m.definition(m.typeName),"type enum interface implements namespace module declare":m.definitionKeyword,"abstract global Privacy readonly override":m.modifier,"is keyof unique infer asserts":m.operatorKeyword,JSXAttributeValue:m.attributeValue,JSXText:m.content,"JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag":m.angleBracket,"JSXIdentifier JSXNameSpacedName":m.tagName,"JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName":m.attributeName,"JSXBuiltin/JSXIdentifier":m.standard(m.tagName)}),tg={__proto__:null,export:20,as:25,from:33,default:36,async:41,function:42,in:52,out:55,const:56,extends:60,this:64,true:72,false:72,null:84,void:88,typeof:92,super:108,new:142,delete:154,yield:163,await:167,class:172,public:235,private:235,protected:235,readonly:237,instanceof:256,satisfies:259,import:292,keyof:349,unique:353,infer:359,asserts:395,is:397,abstract:417,implements:419,type:421,let:424,var:426,using:429,interface:435,enum:439,namespace:445,module:447,declare:451,global:455,defer:471,for:476,of:485,while:488,with:492,do:496,if:500,else:502,switch:506,case:512,try:518,catch:522,finally:526,return:530,throw:534,break:538,continue:542,debugger:546},ig={__proto__:null,async:129,get:131,set:133,declare:195,public:197,private:197,protected:197,static:199,abstract:201,override:203,readonly:209,accessor:211,new:401},ng={__proto__:null,"<":193},Tf=Xs.deserialize({version:14,states:"$F|Q%TQlOOO%[QlOOO'_QpOOP(lO`OOO*zQ!0MxO'#CiO+RO#tO'#CjO+aO&jO'#CjO+oO#@ItO'#DaO.QQlO'#DgO.bQlO'#DrO%[QlO'#DzO0fQlO'#ESOOQ!0Lf'#E['#E[O1PQ`O'#EXOOQO'#Ep'#EpOOQO'#Il'#IlO1XQ`O'#GsO1dQ`O'#EoO1iQ`O'#EoO3hQ!0MxO'#JrO6[Q!0MxO'#JsO6uQ`O'#F]O6zQ,UO'#FtOOQ!0Lf'#Ff'#FfO7VO7dO'#FfO9XQMhO'#F|O9`Q`O'#F{OOQ!0Lf'#Js'#JsOOQ!0Lb'#Jr'#JrO9eQ`O'#GwOOQ['#K_'#K_O9pQ`O'#IYO9uQ!0LrO'#IZOOQ['#J`'#J`OOQ['#I_'#I_Q`QlOOQ`QlOOO9}Q!L^O'#DvO:UQlO'#EOO:]QlO'#EQO9kQ`O'#GsO:dQMhO'#CoO:rQ`O'#EnO:}Q`O'#EyO;hQMhO'#FeO;xQ`O'#GsOOQO'#K`'#K`O;}Q`O'#K`O<]Q`O'#G{O<]Q`O'#G|O<]Q`O'#HOO9kQ`O'#HRO=SQ`O'#HUO>kQ`O'#CeO>{Q`O'#HcO?TQ`O'#HiO?TQ`O'#HkO`QlO'#HmO?TQ`O'#HoO?TQ`O'#HrO?YQ`O'#HxO?_Q!0LsO'#IOO%[QlO'#IQO?jQ!0LsO'#ISO?uQ!0LsO'#IUO9uQ!0LrO'#IWO@QQ!0MxO'#CiOASQpO'#DlQOQ`OOO%[QlO'#EQOAjQ`O'#ETO:dQMhO'#EnOAuQ`O'#EnOBQQ!bO'#FeOOQ['#Cg'#CgOOQ!0Lb'#Dq'#DqOOQ!0Lb'#Jv'#JvO%[QlO'#JvOOQO'#Jy'#JyOOQO'#Ih'#IhOCQQpO'#EgOOQ!0Lb'#Ef'#EfOOQ!0Lb'#J}'#J}OC|Q!0MSO'#EgODWQpO'#EWOOQO'#Jx'#JxODlQpO'#JyOEyQpO'#EWODWQpO'#EgPFWO&2DjO'#CbPOOO)CD})CD}OOOO'#I`'#I`OFcO#tO,59UOOQ!0Lh,59U,59UOOOO'#Ia'#IaOFqO&jO,59UOGPQ!L^O'#DcOOOO'#Ic'#IcOGWO#@ItO,59{OOQ!0Lf,59{,59{OGfQlO'#IdOGyQ`O'#JtOIxQ!fO'#JtO+}QlO'#JtOJPQ`O,5:ROJgQ`O'#EpOJtQ`O'#KTOKPQ`O'#KSOKPQ`O'#KSOKXQ`O,5;^OK^Q`O'#KROOQ!0Ln,5:^,5:^OKeQlO,5:^OMcQ!0MxO,5:fONSQ`O,5:nONmQ!0LrO'#KQONtQ`O'#KPO9eQ`O'#KPO! YQ`O'#KPO! bQ`O,5;]O! gQ`O'#KPO!#lQ!fO'#JsOOQ!0Lh'#Ci'#CiO%[QlO'#ESO!$[Q!fO,5:sOOQS'#Jz'#JzOOQO-EtOOQ['#Jh'#JhOOQ[,5>u,5>uOOQ[-E<]-E<]O!TO`QlO,5>VO!LOQ`O,5>XO`QlO,5>ZO!LTQ`O,5>^O!LYQlO,5>dOOQ[,5>j,5>jO%[QlO,5>jO9uQ!0LrO,5>lOOQ[,5>n,5>nO#!dQ`O,5>nOOQ[,5>p,5>pO#!dQ`O,5>pOOQ[,5>r,5>rO##QQpO'#D_O%[QlO'#JvO##sQpO'#JvO##}QpO'#DmO#$`QpO'#DmO#&qQlO'#DmO#&xQ`O'#JuO#'QQ`O,5:WO#'VQ`O'#EtO#'eQ`O'#KUO#'mQ`O,5;_O#'rQpO'#DmO#(PQpO'#EVOOQ!0Lf,5:o,5:oO%[QlO,5:oO#(WQ`O,5:oO?YQ`O,5;YO!CUQpO,5;YO!C^QMhO,5;YO:dQMhO,5;YO#(`Q`O,5@bO#(eQ07dO,5:sOOQO-EPO$6^Q`O,5>POOQ[1G3i1G3iO`QlO1G3iOOQ[1G3o1G3oOOQ[1G3q1G3qO?TQ`O1G3sO$6cQlO1G3uO$:gQlO'#HtOOQ[1G3x1G3xO$:tQ`O'#HzO?YQ`O'#H|OOQ[1G4O1G4OO$:|QlO1G4OO9uQ!0LrO1G4UOOQ[1G4W1G4WOOQ!0Lb'#G_'#G_O9uQ!0LrO1G4YO9uQ!0LrO1G4[O$?TQ`O,5@bO!)[QlO,5;`O9eQ`O,5;`O?YQ`O,5:XO!)[QlO,5:XO!CUQpO,5:XO$?YQ?MtO,5:XOOQO,5;`,5;`O$?dQpO'#IeO$?zQ`O,5@aOOQ!0Lf1G/r1G/rO$@SQpO'#IkO$@^Q`O,5@pOOQ!0Lb1G0y1G0yO#$`QpO,5:XOOQO'#Ig'#IgO$@fQpO,5:qOOQ!0Ln,5:q,5:qO#(ZQ`O1G0ZOOQ!0Lf1G0Z1G0ZO%[QlO1G0ZOOQ!0Lf1G0t1G0tO?YQ`O1G0tO!CUQpO1G0tO!C^QMhO1G0tOOQ!0Lb1G5|1G5|O!ByQ!0LrO1G0^OOQO1G0m1G0mO%[QlO1G0mO$@mQ!0LrO1G0mO$@xQ!0LrO1G0mO!CUQpO1G0^ODWQpO1G0^O$AWQ!0LrO1G0mOOQO1G0^1G0^O$AlQ!0MxO1G0mPOOO-E<[-E<[POOO1G.h1G.hOOOO1G/i1G/iO$AvQ!bO,5QQpO,5@}OOQ!0Lb1G3c1G3cOOQ[7+$V7+$VO@zQ`O7+$VO9uQ!0LrO7+$VO%>]Q`O7+$VO%[QlO1G6lO%[QlO1G6mO%>bQ!0LrO1G6lO%>lQlO1G3kO%>sQ`O1G3kO%>xQlO1G3kOOQ[7+)T7+)TO9uQ!0LrO7+)_O`QlO7+)aOOQ['#Kh'#KhOOQ['#JS'#JSO%?PQlO,5>`OOQ[,5>`,5>`O%[QlO'#HuO%?^Q`O'#HwOOQ[,5>f,5>fO9eQ`O,5>fOOQ[,5>h,5>hOOQ[7+)j7+)jOOQ[7+)p7+)pOOQ[7+)t7+)tOOQ[7+)v7+)vO%?cQpO1G5|O%?}Q?MtO1G0zO%@XQ`O1G0zOOQO1G/s1G/sO%@dQ?MtO1G/sO?YQ`O1G/sO!)[QlO'#DmOOQO,5?P,5?POOQO-ERQ`O7+,WO&>WQ`O7+,XO%[QlO7+,WO%[QlO7+,XOOQ[7+)V7+)VO&>]Q`O7+)VO&>bQlO7+)VO&>iQ`O7+)VOOQ[<nQ`O,5>aOOQ[,5>c,5>cO&>sQ`O1G4QO9eQ`O7+&fO!)[QlO7+&fOOQO7+%_7+%_O&>xQ?MtO1G6ZO?YQ`O7+%_OOQ!0Lf<yQ?MvO,5?aO'@|Q?MvO,5?cO'CPQ?MvO7+'|O'DuQMjOG27TOOQO<VO!l$xO#jROe!iOpkOrPO(T)]O(VTO(YUO(aVO(o[O~O!]$_Oa$qa'z$qa'w$qa!k$qa!Y$qa!_$qa%i$qa!g$qa~Ol)dO~P!&zOh%VOp%WOr%XOs$tOt$tOz%YO|%ZO!O%]O!S${O!_$|O!i%bO!l$xO#j%cO$W%`O$t%^O$v%_O$y%aO(T(vO(VTO(YUO(a$uO(y$}O(z%PO~Og(pP~P!,TO!Q)iO!g)hO!_$^X$Z$^X$]$^X$_$^X$f$^X~O!g)hO!_({X$Z({X$]({X$_({X$f({X~O!Q)iO~P!.^O!Q)iO!_({X$Z({X$]({X$_({X$f({X~O!_)kO$Z)oO$])jO$_)jO$f)pO~O![)sO~P!)[O$]$hO$_$gO$f)wO~On$zX!Q$zX#S$zX'y$zX(y$zX(z$zX~OgmXg$zXnmX!]mX#`mX~P!0SOx)yO(b)zO(c)|O~On*VO!Q*OO'y*PO(y$}O(z%PO~Og)}O~P!1WOg*WO~Oh%VOr%XOs$tOt$tOz%YO|%ZO!OVO!l$xO#jVO!l$xO#jROe!iOpkOrPO(VTO(YUO(aVO(o[O~O(T=QO~P#$qO!]-]O!^(iX~O!^-_O~O!g-VO#`-UO!]#hX!^#hX~O!]-`O!^(xX~O!^-bO~O!c-cO!d-cO(U!lO~P#$`O!^-fO~P'_On-iO!_'`O~O!Y-nO~Os!{a!b!{a!c!{a!d!{a#T!{a#U!{a#V!{a#W!{a#X!{a#[!{a#]!{a(U!{a(V!{a(Y!{a(e!{a(o!{a~P!#vO!p-sO#`-qO~PChO!c-uO!d-uO(U!lO~PDWOa%nO#`-qO'z%nO~Oa%nO!g#vO#`-qO'z%nO~Oa%nO!g#vO!p-sO#`-qO'z%nO(r'pO~O(P'xO(Q'xO(R-zO~Ov-{O~O!Y'Wa!]'Wa~P!:tO![.PO!Y'WX!]'WX~P%[O!](VO!Y(ha~O!Y(ha~PHRO!](^O!Y(va~O!S%hO![.TO!_%iO(T%gO!Y'^X!]'^X~O#`.VO!](ta!k(taa(ta'z(ta~O!g#vO~P#,wO!](jO!k(sa~O!S%hO!_%iO#j.ZO(T%gO~Op.`O!S%hO![.]O!_%iO!|]O#i._O#j.]O(T%gO!]'aX!k'aX~OR.dO!l#xO~Oh%VOn.gO!_'`O%i.fO~Oa#ci!]#ci'z#ci'w#ci!Y#ci!k#civ#ci!_#ci%i#ci!g#ci~P!:tOn>]O!Q*OO'y*PO(y$}O(z%PO~O#k#_aa#_a#`#_a'z#_a!]#_a!k#_a!_#_a!Y#_a~P#/sO#k(`XP(`XR(`X[(`Xa(`Xj(`Xr(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X'z(`X(a(`X(r(`X!k(`X!Y(`X'w(`Xv(`X!_(`X%i(`X!g(`X~P!6kO!].tO!k(kX~P!:tO!k.wO~O!Y.yO~OP$[OR#zO!Q#yO!S#{O!l#xO!p$[O(aVO[#mia#mij#mir#mi!]#mi#R#mi#o#mi#p#mi#q#mi#r#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#n#mi~P#3cO#n$OO~P#3cOP$[OR#zOr$aO!Q#yO!S#{O!l#xO!p$[O#n$OO#o$PO#p$PO#q$PO(aVO[#mia#mij#mi!]#mi#R#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#r#mi~P#6QO#r$QO~P#6QOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO(aVOa#mi!]#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#v#mi~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO(aVO(z#}Oa#mi!]#mi#z#mi#{#mi'z#mi(r#mi(y#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#x$UO~P#;VO#x#mi~P#;VO#v$SO~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO#x$UO(aVO(y#|O(z#}Oa#mi!]#mi#{#mi'z#mi(r#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#z#mi~P#={O#z$WO~P#={OP]XR]X[]Xj]Xr]X!Q]X!S]X!l]X!p]X#R]X#S]X#`]X#kfX#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#x]X#z]X#{]X$Q]X(a]X(r]X(y]X(z]X!]]X!^]X~O$O]X~P#@jOP$[OR#zO[]O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P#EyO!]/POg(pX~P!1WOg/RO~Oa$Pi!]$Pi'z$Pi'w$Pi!Y$Pi!k$Piv$Pi!_$Pi%i$Pi!g$Pi~P!:tO$]/SO$_/SO~O$]/TO$_/TO~O!g)hO#`/UO!_$cX$Z$cX$]$cX$_$cX$f$cX~O![/VO~O!_)kO$Z/XO$])jO$_)jO$f/YO~O!]VO!l$xO#j^O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P&,QO#S$dOP(`XR(`X[(`Xj(`Xn(`Xr(`X!Q(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X$O(`X'y(`X(a(`X(r(`X(y(`X(z(`X!](`X!^(`X~O$O$Pi!]$Pi!^$Pi~P#BwO$O!ri!^!ri~P$+oOg']a!]']a~P!1WO!^7nO~O!]'da!^'da~P#BwO!Y7oO~P#/sO!g#vO(r'pO!]'ea!k'ea~O!]/pO!k)Oi~O!]/pO!g#vO!k)Oi~Og$|q!]$|q#`$|q$O$|q~P!1WO!Y'ga!]'ga~P#/sO!g7vO~O!]/yO!Y)Pi~P#/sO!]/yO!Y)Pi~O!Y7yO~Oh%VOr8OO!l%eO(r'pO~Oj8QO!g#vO~Or8TO!g#vO(r'pO~O!Q*OO'y*PO(z%POn'ja(y'ja!]'ja#`'ja~Og'ja$O'ja~P&5RO!Q*OO'y*POn'la(y'la(z'la!]'la#`'la~Og'la$O'la~P&5tOg(_q!](_q~P!1WO#`8VOg(_q!](_q~P!1WO!Y8WO~Og%Oq!]%Oq#`%Oq$O%Oq~P!1WOa$oy!]$oy'z$oy'w$oy!Y$oy!k$oyv$oy!_$oy%i$oy!g$oy~P!:tO!g6rO~O!]5[O!_)Qa~O!_'`OP$TaR$Ta[$Taj$Tar$Ta!Q$Ta!S$Ta!]$Ta!l$Ta!p$Ta#R$Ta#n$Ta#o$Ta#p$Ta#q$Ta#r$Ta#s$Ta#t$Ta#u$Ta#v$Ta#x$Ta#z$Ta#{$Ta(a$Ta(r$Ta(y$Ta(z$Ta~O%i7WO~P&8fO%^8[Oa%[i!_%[i'z%[i!]%[i~Oa#cy!]#cy'z#cy'w#cy!Y#cy!k#cyv#cy!_#cy%i#cy!g#cy~P!:tO[8^O~Ob8`O(T+qO(VTO(YUO~O!]1TO!^)Xi~O`8dO~O(e(|O!]'pX!^'pX~O!]5uO!^)Ua~O!^8nO~P%;eO(o!sO~P$&YO#[8oO~O!_1oO~O!_1oO%i8qO~On8tO!_1oO%i8qO~O[8yO!]'sa!^'sa~O!]1zO!^)Vi~O!k8}O~O!k9OO~O!k9RO~O!k9RO~P%[Oa9TO~O!g9UO~O!k9VO~O!](wi!^(wi~P#BwOa%nO#`9_O'z%nO~O!](ty!k(tya(ty'z(ty~P!:tO!](jO!k(sy~O%i9bO~P&8fO!_'`O%i9bO~O#k$|qP$|qR$|q[$|qa$|qj$|qr$|q!S$|q!]$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q'z$|q(a$|q(r$|q!k$|q!Y$|q'w$|q#`$|qv$|q!_$|q%i$|q!g$|q~P#/sO#k'jaP'jaR'ja['jaa'jaj'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja'z'ja(a'ja(r'ja!k'ja!Y'ja'w'jav'ja!_'ja%i'ja!g'ja~P&5RO#k'laP'laR'la['laa'laj'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la'z'la(a'la(r'la!k'la!Y'la'w'lav'la!_'la%i'la!g'la~P&5tO#k%OqP%OqR%Oq[%Oqa%Oqj%Oqr%Oq!S%Oq!]%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq'z%Oq(a%Oq(r%Oq!k%Oq!Y%Oq'w%Oq#`%Oqv%Oq!_%Oq%i%Oq!g%Oq~P#/sO!]'Yi!k'Yi~P!:tO$O#cq!]#cq!^#cq~P#BwO(y$}OP%aaR%aa[%aaj%aar%aa!S%aa!l%aa!p%aa#R%aa#n%aa#o%aa#p%aa#q%aa#r%aa#s%aa#t%aa#u%aa#v%aa#x%aa#z%aa#{%aa$O%aa(a%aa(r%aa!]%aa!^%aa~On%aa!Q%aa'y%aa(z%aa~P&IyO(z%POP%caR%ca[%caj%car%ca!S%ca!l%ca!p%ca#R%ca#n%ca#o%ca#p%ca#q%ca#r%ca#s%ca#t%ca#u%ca#v%ca#x%ca#z%ca#{%ca$O%ca(a%ca(r%ca!]%ca!^%ca~On%ca!Q%ca'y%ca(y%ca~P&LQOn>^O!Q*OO'y*PO(z%PO~P&IyOn>^O!Q*OO'y*PO(y$}O~P&LQOR0kO!Q0kO!S0lO#S$dOP}a[}aj}an}ar}a!l}a!p}a#R}a#n}a#o}a#p}a#q}a#r}a#s}a#t}a#u}a#v}a#x}a#z}a#{}a$O}a'y}a(a}a(r}a(y}a(z}a!]}a!^}a~O!Q*OO'y*POP$saR$sa[$saj$san$sar$sa!S$sa!l$sa!p$sa#R$sa#n$sa#o$sa#p$sa#q$sa#r$sa#s$sa#t$sa#u$sa#v$sa#x$sa#z$sa#{$sa$O$sa(a$sa(r$sa(y$sa(z$sa!]$sa!^$sa~O!Q*OO'y*POP$uaR$ua[$uaj$uan$uar$ua!S$ua!l$ua!p$ua#R$ua#n$ua#o$ua#p$ua#q$ua#r$ua#s$ua#t$ua#u$ua#v$ua#x$ua#z$ua#{$ua$O$ua(a$ua(r$ua(y$ua(z$ua!]$ua!^$ua~On>^O!Q*OO'y*PO(y$}O(z%PO~OP%TaR%Ta[%Taj%Tar%Ta!S%Ta!l%Ta!p%Ta#R%Ta#n%Ta#o%Ta#p%Ta#q%Ta#r%Ta#s%Ta#t%Ta#u%Ta#v%Ta#x%Ta#z%Ta#{%Ta$O%Ta(a%Ta(r%Ta!]%Ta!^%Ta~P''VO$O$mq!]$mq!^$mq~P#BwO$O$oq!]$oq!^$oq~P#BwO!^9oO~O$O9pO~P!1WO!g#vO!]'ei!k'ei~O!g#vO(r'pO!]'ei!k'ei~O!]/pO!k)Oq~O!Y'gi!]'gi~P#/sO!]/yO!Y)Pq~Or9wO!g#vO(r'pO~O[9yO!Y9xO~P#/sO!Y9xO~Oj:PO!g#vO~Og(_y!](_y~P!1WO!]'na!_'na~P#/sOa%[q!_%[q'z%[q!]%[q~P#/sO[:UO~O!]1TO!^)Xq~O`:YO~O#`:ZO!]'pa!^'pa~O!]5uO!^)Ui~P#BwO!S:]O~O!_1oO%i:`O~O(VTO(YUO(e:eO~O!]1zO!^)Vq~O!k:hO~O!k:iO~O!k:jO~O!k:jO~P%[O#`:mO!]#hy!^#hy~O!]#hy!^#hy~P#BwO%i:rO~P&8fO!_'`O%i:rO~O$O#|y!]#|y!^#|y~P#BwOP$|iR$|i[$|ij$|ir$|i!S$|i!l$|i!p$|i#R$|i#n$|i#o$|i#p$|i#q$|i#r$|i#s$|i#t$|i#u$|i#v$|i#x$|i#z$|i#{$|i$O$|i(a$|i(r$|i!]$|i!^$|i~P''VO!Q*OO'y*PO(z%POP'iaR'ia['iaj'ian'iar'ia!S'ia!l'ia!p'ia#R'ia#n'ia#o'ia#p'ia#q'ia#r'ia#s'ia#t'ia#u'ia#v'ia#x'ia#z'ia#{'ia$O'ia(a'ia(r'ia(y'ia!]'ia!^'ia~O!Q*OO'y*POP'kaR'ka['kaj'kan'kar'ka!S'ka!l'ka!p'ka#R'ka#n'ka#o'ka#p'ka#q'ka#r'ka#s'ka#t'ka#u'ka#v'ka#x'ka#z'ka#{'ka$O'ka(a'ka(r'ka(y'ka(z'ka!]'ka!^'ka~O(y$}OP%aiR%ai[%aij%ain%air%ai!Q%ai!S%ai!l%ai!p%ai#R%ai#n%ai#o%ai#p%ai#q%ai#r%ai#s%ai#t%ai#u%ai#v%ai#x%ai#z%ai#{%ai$O%ai'y%ai(a%ai(r%ai(z%ai!]%ai!^%ai~O(z%POP%ciR%ci[%cij%cin%cir%ci!Q%ci!S%ci!l%ci!p%ci#R%ci#n%ci#o%ci#p%ci#q%ci#r%ci#s%ci#t%ci#u%ci#v%ci#x%ci#z%ci#{%ci$O%ci'y%ci(a%ci(r%ci(y%ci!]%ci!^%ci~O$O$oy!]$oy!^$oy~P#BwO$O#cy!]#cy!^#cy~P#BwO!g#vO!]'eq!k'eq~O!]/pO!k)Oy~O!Y'gq!]'gq~P#/sOr:|O!g#vO(r'pO~O[;QO!Y;PO~P#/sO!Y;PO~Og(_!R!](_!R~P!1WOa%[y!_%[y'z%[y!]%[y~P#/sO!]1TO!^)Xy~O!]5uO!^)Uq~O(T;XO~O!_1oO%i;[O~O!k;_O~O%i;dO~P&8fOP$|qR$|q[$|qj$|qr$|q!S$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q$O$|q(a$|q(r$|q!]$|q!^$|q~P''VO!Q*OO'y*PO(z%POP'jaR'ja['jaj'jan'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja$O'ja(a'ja(r'ja(y'ja!]'ja!^'ja~O!Q*OO'y*POP'laR'la['laj'lan'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la$O'la(a'la(r'la(y'la(z'la!]'la!^'la~OP%OqR%Oq[%Oqj%Oqr%Oq!S%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq$O%Oq(a%Oq(r%Oq!]%Oq!^%Oq~P''VOg%e!Z!]%e!Z#`%e!Z$O%e!Z~P!1WO!Y;hO~P#/sOr;iO!g#vO(r'pO~O[;kO!Y;hO~P#/sO!]'pq!^'pq~P#BwO!]#h!Z!^#h!Z~P#BwO#k%e!ZP%e!ZR%e!Z[%e!Za%e!Zj%e!Zr%e!Z!S%e!Z!]%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z'z%e!Z(a%e!Z(r%e!Z!k%e!Z!Y%e!Z'w%e!Z#`%e!Zv%e!Z!_%e!Z%i%e!Z!g%e!Z~P#/sOr;tO!g#vO(r'pO~O!Y;uO~P#/sOr;|O!g#vO(r'pO~O!Y;}O~P#/sOP%e!ZR%e!Z[%e!Zj%e!Zr%e!Z!S%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z$O%e!Z(a%e!Z(r%e!Z!]%e!Z!^%e!Z~P''VOrROe!iOpkOrPO(T)]O(VTO(YUO(aVO(o[O~O!]WO!l$xO#jgPPP!>oI[PPPPPPPPP!BOP!C]PPI[!DnPI[PI[I[I[I[I[PI[!FQP!I[P!LbP!Lf!Lp!Lt!LtP!IXP!Lx!LxP#!OP#!SI[PI[#!Y#%_CjA^PA^PA^A^P#&lA^A^#)OA^#+vA^#.SA^A^#.r#1W#1W#1]#1f#1W#1qPP#1WPA^#2ZA^#6YA^A^6mPPP#:_PPP#:x#:xP#:xP#;`#:xPP#;fP#;]P#;]#;y#;]#P#>V#>]#>k#>q#>{#?R#?]#?c#?s#?y#@k#@}#AT#AZ#Ai#BO#Cs#DR#DY#Et#FS#Gt#HS#HY#H`#Hf#Hp#Hv#H|#IW#Ij#IpPPPPPPPPPPP#IvPPPPPPP#Jk#Mx$ b$ i$ qPPP$']P$'f$*_$0x$0{$1O$1}$2Q$2X$2aP$2g$2jP$3W$3[$4S$5b$5g$5}PP$6S$6Y$6^$6a$6e$6i$7e$7|$8e$8i$8l$8o$8y$8|$9Q$9UR!|RoqOXst!Z#d%m&r&t&u&w,s,x2[2_Y!vQ'`-e1o5{Q%tvQ%|yQ&T|Q&j!VS'W!e-]Q'f!iS'l!r!yU*k$|*Z*oQ+o%}S+|&V&WQ,d&dQ-c'_Q-m'gQ-u'mQ0[*qQ1b,OQ1y,eR<{SU+P%]S!S!nQ!r!v!y!z$|'W'_'`'l'm'n*k*o*q*r-]-c-e-u0[0_1o5{5}%[$ti#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;kP>X>Y>]>^Q&X|Q'U!eS'[%i-`Q+t&PQ,P&WQ,f&gQ0n+SQ1Y+uQ1_+{Q2Q,jQ2R,kQ5f1TQ5o1aQ6[1zQ6_1|Q6`2PQ8`5gQ8c5lQ8|6bQ:X8dQ:f8yQ;V:YR<}*ZrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R,h&k&z^OPXYstuvwz!Z!`!g!j!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'b'r(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mR>S[#]WZ#W#Z'X(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ%wxQ%{yW&Q|&V&W,OQ&_!TQ'c!hQ'e!iQ(q#sS+n%|%}Q+r&PQ,_&bQ,c&dS-l'f'gQ.i(rQ1R+oQ1X+uQ1Z+vQ1^+zQ1t,`S1x,d,eQ2|-mQ5e1TQ5i1WQ5n1`Q6Z1yQ8_5gQ8b5kQ8f5pQ:T8^R;T:U!U$zi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y!^%yy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{Q+h%wQ,T&[Q,W&]Q,b&dQ.h(qQ1s,_U1w,c,d,eQ3e.iQ6U1tS6Y1x1yQ8x6Z#f>T#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^o>UPS&[!Q&iQ&]!RQ&^!SU*}%[%d=sR,R&Y%]%Si#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;kP>X>Y>]>^T)z$u){V+P%]S$i$^c#Y#e%q%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.|.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`SQ'Y!eR2q-]!W!nQ!e!r!v!y!z$|'W'_'`'l'm'n*Z*k*o*q*r-]-c-e-u0[0_1o5{5}R1l,ZnqOXst!Z#d%m&r&t&u&w,s,x2[2_Q&y!^Q'v!xS(s#u<^Q+l%zQ,]&_Q,^&aQ-j'dQ-w'oS.r(x=PS0q+X=ZQ1P+mQ1n,[Q2c,zQ2e,{Q2m-WQ2z-kQ2}-oS5Y0r=eQ5a1QS5d1S=fQ6t2oQ6x2{Q6}3SQ8]5bQ9Y6vQ9Z6yQ9^7OR:l9V$d$]c#Y#e%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`SS#q]SU$fd)_,mS(p#p'iU*v%R(w4OU0m+O.n7gQ5^0xQ7V3`Q9d7YR:s9em!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}Q't!uS(f#g2US-s'k'wQ/s*]Q0R*jQ3U-vQ4f/tQ4r0TQ4s0UQ4x0^Q7r4`S7}4t4vS8R4y4{Q9r7sQ9v7yQ9{8OQ:Q8TS:{9w9xS;g:|;PS;s;h;iS;{;t;uSSR=o>R%^bOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Q%fj!^%xy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{S&Oz!jQ+k%yQ,a&dW1v,b,c,d,eU6X1w1x1yS8w6Y6ZQ:d8x!r=j$Z$n'X)s-U-X/V2p4T5w6s:Z:mSQ=t>QR=u>R%QeOPXYstuvw!Z!`!g!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Y#bWZ#W#Z(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ,n&o!p=k$Z$n)s-U-X/V2p4T5w6s:Z:mSR=n'XU']!e%i*ZR2s-`%SdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+],p,s,x-i-q.P.V.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3l4z6T6e6f6i6|8t9T9_!r)_$Z$n'X)s-U-X/V2p4T5w6s:Z:mSQ,m&oQ0x+gQ3`.gQ7Y3dR9e7[!b$Tc#Y%q(S(Y(t(y)Z)[)`)g+x-x-}.S.U.s.v/b0p3O3V3k3{5X5c6{7Q7a9]:oS)^)q-Z.|2k2n3p4P4X6u7b7k7l8k9X9g9m9n;W;`=vQ>X>ZR>Y>['QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mSS$oh$pR4U/U'XgOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mST$kf$qQ$ifS)j$l)nR)v$qT$jf$qT)l$l)n'XhOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mST$oh$pQ$rhR)u$p%^jOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_!s>Q$Z$n'X)s-U-X/V2p4T5w6s:Z:mS#glOPXZst!Z!`!o#S#d#o#{$n%m&k&n&o&r&t&u&w&{'T'b)O)s*i+]+g,p,s,x-i.g/V/n0]0l1r2S2T2V2X2[2_2a3d4T4z6T6e6f6i7[8t9T!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^Q+T%aQ/c*Oo4OP>X>YQ*c$zU*l$|*Z*oQ+U%bQ0W*m#f=q#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^n=rTQ=x>UQ=y>VR=z>W!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^o4OP>X>Y>]>^Q,U&]Q1h,WQ5s1gR8h5tV*n$|*Z*oU*n$|*Z*oT5z1o5{S0P*i/nQ4w0]T8S4z:]Q+j%xQ0V*lQ1O+kQ1u,aQ6W1vQ8v6XQ:c8wR;^:d!U%Oi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Yx*R$v)e*S*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>OS0`*t0a#f]>^nZ>[`=T3}7c7f7j9h:t:w;yS=_.l3iT=`7e9k!U%Qi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y|*T$v)e*U*t+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>OS0b*u0c#f]>^nZ>[d=V3}7d7e7j9h9i:t:u:w;yS=a.m3jT=b7f9lrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q&f!UR,p&ornOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R&f!UQ,Y&^R1d,RsnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q1p,_S6R1s1tU8p6P6Q6US:_8r8sS;Y:^:aQ;m;ZR;w;nQ&m!VR,i&iR6_1|R:f8yW&Q|&V&W,OR1Z+vQ&r!WR,s&sR,y&xT2],x2_R,}&yQ,|&yR2f,}Q'y!{R-y'ySsOtQ#dXT%ps#dQ#OTR'{#OQ#RUR'}#RQ){$uR/`){Q#UVR(Q#UQ#XWU(W#X(X.QQ(X#YR.Q(YQ-^'YR2r-^Q.u(yS3m.u3nR3n.vQ-e'`R2v-eY!rQ'`-e1o5{R'j!rQ/Q)eR4S/QU#_W%h*YU(_#_(`.RQ(`#`R.R(ZQ-a']R2t-at`OXst!V!Z#d%m&i&k&r&t&u&w,s,x2[2_S#hZ%eU#r`#h.[R.[(jQ(k#jQ.X(gW.a(k.X3X7RQ3X.YR7R3YQ)n$lR/W)nQ$phR)t$pQ$`cU)a$`-|O>Z>[Q/z*eU4k/z4m7xQ4m/|R7x4lS*o$|*ZR0Y*ox*S$v)e*t*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>O!d.j(u)c*[*e.l.m.q/_/k/|0v1e3h4[4h4l5r7]7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/h*S.j7ca7c3}7e7f7j9h:t:w;yQ0a*tQ3i.lU4}0a3i9kR9k7e|*U$v)e*t*u+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>O!h.k(u)c*[*e.l.m.q/_/k/|0v1e3f3h4[4h4l5r7]7^7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/j*U.k7de7d3}7e7f7j9h9i:t:u:w;yQ0c*uQ3j.mU5P0c3j9lR9l7fQ*z%UR0g*zQ5]0vR8Y5]Q+_%kR0u+_Q5v1jS8j5v:[R:[8kQ,[&_R1m,[Q5{1oR8m5{Q1{,fS6]1{8zR8z6_Q1U+rW5h1U5j8a:VQ5j1XQ8a5iR:V8bQ+w&QR1[+wQ2_,xR6m2_YrOXst#dQ&v!ZQ+a%mQ,r&rQ,t&tQ,u&uQ,w&wQ2Y,sS2],x2_R6l2[Q%opQ&z!_Q&}!aQ'P!bQ'R!cQ'q!uQ+`%lQ+l%zQ,Q&XQ,h&mQ-P&|W-p'k's't'wQ-w'oQ0X*nQ1P+mQ1c,PS2O,i,lQ2g-OQ2h-RQ2i-SQ2}-oW3P-r-s-v-xQ5a1QQ5m1_Q5q1eQ6V1uQ6a2QQ6k2ZU6z3O3R3UQ6}3SQ8]5bQ8e5oQ8g5rQ8l5zQ8u6WQ8{6`S9[6{7PQ9^7OQ:W8cQ:b8vQ:g8|Q:n9]Q;U:XQ;]:cQ;a:oQ;l;VR;o;^Q%zyQ'd!iQ'o!uU+m%{%|%}Q-W'VU-k'e'f'gS-o'k'uQ0Q*jS1Q+n+oQ2o-YS2{-l-mQ3S-tS4p0R0UQ5b1RQ6v2uQ6y2|Q7O3TU7{4r4s4vQ9z7}R;O9{S$wi>PR*{%VU%Ui%V>PR0f*yQ$viS(u#v+iS)c$b$cQ)e$dQ*[$xS*e${*YQ*t%OQ*u%QQ+Q%^Q+R%_Q+V%cQ.lPQ=}>XQ>O>YQ>Z>]R>[>^Q+O%]Q.nSR#[WR'Z!el!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}S'V!e-]U*j$|*Z*oS-Y'W'_S0U*k*qQ0^*rQ2u-cQ4v0[R4{0_R({#xQ!fQT-d'`-e]!qQ!r'`-e1o5{Q#p]R'i < TypeParamList in out const TypeDefinition extends ThisType this LiteralType ArithOp Number BooleanLiteral TemplateType InterpolationEnd Interpolation InterpolationStart NullType null VoidType void TypeofType typeof MemberExpression . PropertyName [ TemplateString Escape Interpolation super RegExp ] ArrayExpression Spread , } { ObjectExpression Property async get set PropertyDefinition Block : NewTarget new NewExpression ) ( ArgList UnaryExpression delete LogicOp BitOp YieldExpression yield AwaitExpression await ParenthesizedExpression ClassExpression class ClassBody MethodDeclaration Decorator @ MemberExpression PrivatePropertyName CallExpression TypeArgList CompareOp < declare Privacy static abstract override PrivatePropertyDefinition PropertyDeclaration readonly accessor Optional TypeAnnotation Equals StaticBlock FunctionExpression ArrowFunction ParamList ParamList ArrayPattern ObjectPattern PatternProperty Privacy readonly Arrow MemberExpression BinaryExpression ArithOp ArithOp ArithOp ArithOp BitOp CompareOp instanceof satisfies CompareOp BitOp BitOp BitOp LogicOp LogicOp ConditionalExpression LogicOp LogicOp AssignmentExpression UpdateOp PostfixExpression CallExpression InstantiationExpression TaggedTemplateExpression DynamicImport import ImportMeta JSXElement JSXSelfCloseEndTag JSXSelfClosingTag JSXIdentifier JSXBuiltin JSXIdentifier JSXNamespacedName JSXMemberExpression JSXSpreadAttribute JSXAttribute JSXAttributeValue JSXEscape JSXEndTag JSXOpenTag JSXFragmentTag JSXText JSXEscape JSXStartCloseTag JSXCloseTag PrefixCast < ArrowFunction TypeParamList SequenceExpression InstantiationExpression KeyofType keyof UniqueType unique ImportType InferredType infer TypeName ParenthesizedType FunctionSignature ParamList NewSignature IndexedType TupleType Label ArrayType ReadonlyType ObjectType MethodType PropertyType IndexSignature PropertyDefinition CallSignature TypePredicate asserts is NewSignature new UnionType LogicOp IntersectionType LogicOp ConditionalType ParameterizedType ClassDeclaration abstract implements type VariableDeclaration let var using TypeAliasDeclaration InterfaceDeclaration interface EnumDeclaration enum EnumBody NamespaceDeclaration namespace module AmbientDeclaration declare GlobalDeclaration global ClassDeclaration ClassBody AmbientFunctionDeclaration ExportGroup VariableName VariableName ImportDeclaration defer ImportGroup ForStatement for ForSpec ForInSpec ForOfSpec of WhileStatement while WithStatement with DoStatement do IfStatement if else SwitchStatement switch SwitchBody CaseLabel case DefaultLabel TryStatement try CatchClause catch FinallyClause finally ReturnStatement return ThrowStatement throw BreakStatement break ContinueStatement continue DebuggerStatement debugger LabeledStatement ExpressionStatement SingleExpression SingleClassItem",maxTerm:380,context:Gm,nodeProps:[["isolate",-8,5,6,14,37,39,51,53,55,""],["group",-26,9,17,19,68,207,211,215,216,218,221,224,234,237,243,245,247,249,252,258,264,266,268,270,272,274,275,"Statement",-34,13,14,32,35,36,42,51,54,55,57,62,70,72,76,80,82,84,85,110,111,120,121,136,139,141,142,143,144,145,147,148,167,169,171,"Expression",-23,31,33,37,41,43,45,173,175,177,178,180,181,182,184,185,186,188,189,190,201,203,205,206,"Type",-3,88,103,109,"ClassItem"],["openedBy",23,"<",38,"InterpolationStart",56,"[",60,"{",73,"(",160,"JSXStartCloseTag"],["closedBy",-2,24,168,">",40,"InterpolationEnd",50,"]",61,"}",74,")",165,"JSXEndTag"]],propSources:[eg],skippedNodes:[0,5,6,278],repeatNodeCount:37,tokenData:"$Fq07[R!bOX%ZXY+gYZ-yZ[+g[]%Z]^.c^p%Zpq+gqr/mrs3cst:_tuEruvJSvwLkwx! Yxy!'iyz!(sz{!)}{|!,q|}!.O}!O!,q!O!P!/Y!P!Q!9j!Q!R#:O!R![#<_![!]#I_!]!^#Jk!^!_#Ku!_!`$![!`!a$$v!a!b$*T!b!c$,r!c!}Er!}#O$-|#O#P$/W#P#Q$4o#Q#R$5y#R#SEr#S#T$7W#T#o$8b#o#p$x#r#s$@U#s$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$I|Er$I|$I}$Dk$I}$JO$Dk$JO$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr(n%d_$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&j&hT$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c&j&zP;=`<%l&c'|'U]$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!b(SU(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!b(iP;=`<%l'}'|(oP;=`<%l&}'[(y]$i&j(WpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(rp)wU(WpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)rp*^P;=`<%l)r'[*dP;=`<%l(r#S*nX(Wp(Z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g#S+^P;=`<%l*g(n+dP;=`<%l%Z07[+rq$i&j(Wp(Z!b'|0/lOX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p$f%Z$f$g+g$g#BY%Z#BY#BZ+g#BZ$IS%Z$IS$I_+g$I_$JT%Z$JT$JU+g$JU$KV%Z$KV$KW+g$KW&FU%Z&FU&FV+g&FV;'S%Z;'S;=`+a<%l?HT%Z?HT?HU+g?HUO%Z07[.ST(X#S$i&j'}0/lO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c07[.n_$i&j(Wp(Z!b'}0/lOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)3p/x`$i&j!p),Q(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW1V`#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`2X!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW2d_#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'At3l_(V':f$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k(^4r_$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k&z5vX$i&jOr5qrs6cs!^5q!^!_6y!_#o5q#o#p6y#p;'S5q;'S;=`7h<%lO5q&z6jT$d`$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c`6|TOr6yrs7]s;'S6y;'S;=`7b<%lO6y`7bO$d``7eP;=`<%l6y&z7kP;=`<%l5q(^7w]$d`$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!r8uZ(Z!bOY8pYZ6yZr8prs9hsw8pwx6yx#O8p#O#P6y#P;'S8p;'S;=`:R<%lO8p!r9oU$d`(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!r:UP;=`<%l8p(^:[P;=`<%l4k%9[:hh$i&j(Wp(Z!bOY%ZYZ&cZq%Zqr`#P#o`x!^=^!^!_?q!_#O=^#O#P>`#P#o=^#o#p?q#p;'S=^;'S;=`@h<%lO=^&n>gXWS$i&jOY>`YZ&cZ!^>`!^!_?S!_#o>`#o#p?S#p;'S>`;'S;=`?k<%lO>`S?XSWSOY?SZ;'S?S;'S;=`?e<%lO?SS?hP;=`<%l?S&n?nP;=`<%l>`!f?xWWS(Z!bOY?qZw?qwx?Sx#O?q#O#P?S#P;'S?q;'S;=`@b<%lO?q!f@eP;=`<%l?q(Q@kP;=`<%l=^'`@w]WS$i&j(WpOY@nYZ&cZr@nrs>`s!^@n!^!_Ap!_#O@n#O#P>`#P#o@n#o#pAp#p;'S@n;'S;=`Bg<%lO@ntAwWWS(WpOYApZrAprs?Ss#OAp#O#P?S#P;'SAp;'S;=`Ba<%lOAptBdP;=`<%lAp'`BjP;=`<%l@n#WBvYWS(Wp(Z!bOYBmZrBmrs?qswBmwxApx#OBm#O#P?S#P;'SBm;'S;=`Cf<%lOBm#WCiP;=`<%lBm(rCoP;=`<%l^!Q^$i&j!X7`OY!=yYZ&cZ!P!=y!P!Q!>|!Q!^!=y!^!_!@c!_!}!=y!}#O!CW#O#P!Dy#P#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y|#X#Z&c#Z#[!>|#[#]&c#]#^!>|#^#a&c#a#b!>|#b#g&c#g#h!>|#h#i&c#i#j!>|#j#k!>|#k#m&c#m#n!>|#n#o&c#p;'S&c;'S;=`&w<%lO&c7`!@hX!X7`OY!@cZ!P!@c!P!Q!AT!Q!}!@c!}#O!Ar#O#P!Bq#P;'S!@c;'S;=`!CQ<%lO!@c7`!AYW!X7`#W#X!AT#Z#[!AT#]#^!AT#a#b!AT#g#h!AT#i#j!AT#j#k!AT#m#n!AT7`!AuVOY!ArZ#O!Ar#O#P!B[#P#Q!@c#Q;'S!Ar;'S;=`!Bk<%lO!Ar7`!B_SOY!ArZ;'S!Ar;'S;=`!Bk<%lO!Ar7`!BnP;=`<%l!Ar7`!BtSOY!@cZ;'S!@c;'S;=`!CQ<%lO!@c7`!CTP;=`<%l!@c^!Ezl$i&j(Z!b!X7`OY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#W&}#W#X!Eq#X#Z&}#Z#[!Eq#[#]&}#]#^!Eq#^#a&}#a#b!Eq#b#g&}#g#h!Eq#h#i&}#i#j!Eq#j#k!Eq#k#m&}#m#n!Eq#n#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}8r!GyZ(Z!b!X7`OY!GrZw!Grwx!@cx!P!Gr!P!Q!Hl!Q!}!Gr!}#O!JU#O#P!Bq#P;'S!Gr;'S;=`!J|<%lO!Gr8r!Hse(Z!b!X7`OY'}Zw'}x#O'}#P#W'}#W#X!Hl#X#Z'}#Z#[!Hl#[#]'}#]#^!Hl#^#a'}#a#b!Hl#b#g'}#g#h!Hl#h#i'}#i#j!Hl#j#k!Hl#k#m'}#m#n!Hl#n;'S'};'S;=`(f<%lO'}8r!JZX(Z!bOY!JUZw!JUwx!Arx#O!JU#O#P!B[#P#Q!Gr#Q;'S!JU;'S;=`!Jv<%lO!JU8r!JyP;=`<%l!JU8r!KPP;=`<%l!Gr>^!KZ^$i&j(Z!bOY!KSYZ&cZw!KSwx!CWx!^!KS!^!_!JU!_#O!KS#O#P!DR#P#Q!^!LYP;=`<%l!KS>^!L`P;=`<%l!_#c#d#Bq#d#l%Z#l#m#Es#m#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#>j_$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#?rd$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#A]f$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Bzc$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Dbe$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#E|g$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Gpi$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z*)x#Il_!g$b$i&j$O)Lv(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)[#Jv_al$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z04f#LS^h#)`#R-v$?V_!^(CdvBr$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z?O$@a_!q7`$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[$Aq|$i&j(Wp(Z!b'|0/l$]#t(T,2j(e$I[OX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr07[$D|k$i&j(Wp(Z!b'}0/l$]#t(T,2j(e$I[OY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr",tokenizers:[Fm,Hm,Km,Jm,2,3,4,5,6,7,8,9,10,11,12,13,14,Um,new Ti("$S~RRtu[#O#Pg#S#T#|~_P#o#pb~gOx~~jVO#i!P#i#j!U#j#l!P#l#m!q#m;'S!P;'S;=`#v<%lO!P~!UO!U~~!XS!Q![!e!c!i!e#T#Z!e#o#p#Z~!hR!Q![!q!c!i!q#T#Z!q~!tR!Q![!}!c!i!}#T#Z!}~#QR!Q![!P!c!i!P#T#Z!P~#^R!Q![#g!c!i#g#T#Z#g~#jS!Q![#g!c!i#g#T#Z#g#q#r!P~#yP;=`<%l!P~$RO(c~~",141,340),new Ti("j~RQYZXz{^~^O(Q~~aP!P!Qd~iO(R~~",25,323)],topRules:{Script:[0,7],SingleExpression:[1,276],SingleClassItem:[2,277]},dialects:{jsx:0,ts:15175},dynamicPrecedences:{80:1,82:1,94:1,169:1,199:1},specialized:[{term:327,get:n=>tg[n]||-1},{term:343,get:n=>ig[n]||-1},{term:95,get:n=>ng[n]||-1}],tokenPrec:15201});var Rl,Ci=new R;function ql(n){return $.define({combine:n?e=>e.concat(n):void 0})}var Vs=new R,Ae=class{constructor(e,t,i=[],s=""){this.data=e,this.name=s,Y.prototype.hasOwnProperty("tree")||Object.defineProperty(Y.prototype,"tree",{get(){return ee(this)}}),this.parser=t,this.extension=[Zt.of(this),Y.languageData.of((r,o,l)=>{let a=Cf(r,o,l),h=a.type.prop(Ci);if(!h)return[];let c=r.facet(h),f=a.type.prop(Vs);if(f){let u=a.resolve(o-a.from,l);for(let d of f)if(d.test(u,r)){let p=r.facet(d.facet);return d.type=="replace"?p:p.concat(c)}}return c})].concat(i)}isActiveAt(e,t,i=-1){return Cf(e,t,i).type.prop(Ci)==this.data}findRegions(e){let t=e.facet(Zt);if(t?.data==this.data)return[{from:0,to:e.doc.length}];if(!t||!t.allowsNesting)return[];let i=[],s=(r,o)=>{if(r.prop(Ci)==this.data){i.push({from:o,to:o+r.length});return}let l=r.prop(R.mounted);if(l){if(l.tree.prop(Ci)==this.data){if(l.overlay)for(let a of l.overlay)i.push({from:a.from+o,to:a.to+o});else i.push({from:o,to:o+r.length});return}else if(l.overlay){let a=i.length;if(s(l.tree,l.overlay[0].from+o),i.length>a)return}}for(let a=0;ai.isTop?t:void 0)]}),e.name)}configure(e,t){return new n(this.data,this.parser.configure(e),t||this.name)}get allowsNesting(){return this.parser.hasWrappers()}};function ee(n){let e=n.field(Ae.state,!1);return e?e.tree:J.empty}var Dl=class{constructor(e){this.doc=e,this.cursorPos=0,this.string="",this.cursor=e.iter()}get length(){return this.doc.length}syncTo(e){return this.string=this.cursor.next(e-this.cursorPos).value,this.cursorPos=e+this.string.length,this.cursorPos-this.string.length}chunk(e){return this.syncTo(e),this.string}get lineChunks(){return!0}read(e,t){let i=this.cursorPos-this.string.length;return e=this.cursorPos?this.doc.sliceString(e,t):this.string.slice(e-i,t-i)}},mn=null,Wl=class n{constructor(e,t,i=[],s,r,o,l,a){this.parser=e,this.state=t,this.fragments=i,this.tree=s,this.treeLen=r,this.viewport=o,this.skipped=l,this.scheduleOn=a,this.parse=null,this.tempSkipped=[]}static create(e,t,i){return new n(e,t,[],J.empty,0,i,[],null)}startParse(){return this.parser.startParse(new Dl(this.state.doc),this.fragments)}work(e,t){return t!=null&&t>=this.state.doc.length&&(t=void 0),this.tree!=J.empty&&this.isDone(t??this.state.doc.length)?(this.takeTree(),!0):this.withContext(()=>{var i;if(typeof e=="number"){let s=Date.now()+e;e=()=>Date.now()>s}for(this.parse||(this.parse=this.startParse()),t!=null&&(this.parse.stoppedAt==null||this.parse.stoppedAt>t)&&t=this.treeLen&&((this.parse.stoppedAt==null||this.parse.stoppedAt>e)&&this.parse.stopAt(e),this.withContext(()=>{for(;!(t=this.parse.advance()););}),this.treeLen=e,this.tree=t,this.fragments=this.withoutTempSkipped(Ut.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(e){let t=mn;mn=this;try{return e()}finally{mn=t}}withoutTempSkipped(e){for(let t;t=this.tempSkipped.pop();)e=Zf(e,t.from,t.to);return e}changes(e,t){let{fragments:i,tree:s,treeLen:r,viewport:o,skipped:l}=this;if(this.takeTree(),!e.empty){let a=[];if(e.iterChangedRanges((h,c,f,u)=>a.push({fromA:h,toA:c,fromB:f,toB:u})),i=Ut.applyChanges(i,a),s=J.empty,r=0,o={from:e.mapPos(o.from,-1),to:e.mapPos(o.to,1)},this.skipped.length){l=[];for(let h of this.skipped){let c=e.mapPos(h.from,1),f=e.mapPos(h.to,-1);ce.from&&(this.fragments=Zf(this.fragments,s,r),this.skipped.splice(i--,1))}return this.skipped.length>=t?!1:(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(e,t){this.skipped.push({from:e,to:t})}static getSkippingParser(e){return new class extends $i{createParse(t,i,s){let r=s[0].from,o=s[s.length-1].to;return{parsedPos:r,advance(){let a=mn;if(a){for(let h of s)a.tempSkipped.push(h);e&&(a.scheduleOn=a.scheduleOn?Promise.all([a.scheduleOn,e]):e)}return this.parsedPos=o,new J(ue.none,[],[],o-r)},stoppedAt:null,stopAt(){}}}}}isDone(e){e=Math.min(e,this.state.doc.length);let t=this.fragments;return this.treeLen>=e&&t.length&&t[0].from==0&&t[0].to>=e}static get(){return mn}};function Zf(n,e,t){return Ut.applyChanges(n,[{fromA:e,toA:t,fromB:e,toB:t}])}var yn=class n{constructor(e){this.context=e,this.tree=e.tree}apply(e){if(!e.docChanged&&this.tree==this.context.tree)return this;let t=this.context.changes(e.changes,e.state),i=this.context.treeLen==e.startState.doc.length?void 0:Math.max(e.changes.mapPos(this.context.treeLen),t.viewport.to);return t.work(20,i)||t.takeTree(),new n(t)}static init(e){let t=Math.min(3e3,e.doc.length),i=Wl.create(e.facet(Zt).parser,e,{from:0,to:t});return i.work(20,t)||i.takeTree(),new n(i)}};Ae.state=K.define({create:yn.init,update(n,e){for(let t of e.effects)if(t.is(Ae.setState))return t.value;return e.startState.facet(Zt)!=e.state.facet(Zt)?yn.init(e.state):n.apply(e)}});var Df=n=>{let e=setTimeout(()=>n(),500);return()=>clearTimeout(e)};typeof requestIdleCallback<"u"&&(Df=n=>{let e=-1,t=setTimeout(()=>{e=requestIdleCallback(n,{timeout:400})},100);return()=>e<0?clearTimeout(t):cancelIdleCallback(e)});var Xl=typeof navigator<"u"&&(!((Rl=navigator.scheduling)===null||Rl===void 0)&&Rl.isInputPending)?()=>navigator.scheduling.isInputPending():null,sg=H.fromClass(class{constructor(e){this.view=e,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(e){let t=this.view.state.field(Ae.state).context;(t.updateViewport(e.view.viewport)||this.view.viewport.to>t.treeLen)&&this.scheduleWork(),(e.docChanged||e.selectionSet)&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(t)}scheduleWork(){if(this.working)return;let{state:e}=this.view,t=e.field(Ae.state);(t.tree!=t.context.tree||!t.context.isDone(e.doc.length))&&(this.working=Df(this.work))}work(e){this.working=null;let t=Date.now();if(this.chunkEnds+1e3,a=r.context.work(()=>Xl&&Xl()||Date.now()>o,s+(l?0:1e5));this.chunkBudget-=Date.now()-t,(a||this.chunkBudget<=0)&&(r.context.takeTree(),this.view.dispatch({effects:Ae.setState.of(new yn(r.context))})),this.chunkBudget>0&&!(a&&!l)&&this.scheduleWork(),this.checkAsyncSchedule(r.context)}checkAsyncSchedule(e){e.scheduleOn&&(this.workScheduled++,e.scheduleOn.then(()=>this.scheduleWork()).catch(t=>ae(this.view.state,t)).then(()=>this.workScheduled--),e.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),Zt=$.define({combine(n){return n.length?n[0]:null},enables:n=>[Ae.state,sg,v.contentAttributes.compute([n],e=>{let t=e.facet(n);return t&&t.name?{"data-language":t.name}:{}})]}),_s=class{constructor(e,t=[]){this.language=e,this.support=t,this.extension=[e,t]}};var rg=$.define(),Ai=$.define({combine:n=>{if(!n.length)return" ";let e=n[0];if(!e||/\S/.test(e)||Array.from(e).some(t=>t!=e[0]))throw new Error("Invalid indent unit: "+JSON.stringify(n[0]));return e}});function bn(n){let e=n.facet(Ai);return e.charCodeAt(0)==9?n.tabSize*e.length:e.length}function Mi(n,e){let t="",i=n.tabSize,s=n.facet(Ai)[0];if(s==" "){for(;e>=i;)t+=" ",e-=i;s=" "}for(let r=0;r=e?og(n,t,e):null}var Kt=class{constructor(e,t={}){this.state=e,this.options=t,this.unit=bn(e)}lineAt(e,t=1){let i=this.state.doc.lineAt(e),{simulateBreak:s,simulateDoubleBreak:r}=this.options;return s!=null&&s>=i.from&&s<=i.to?r&&s==e?{text:"",from:e}:(t<0?s-1&&(r+=o-this.countColumn(i,i.search(/\S|$/))),r}countColumn(e,t=e.length){return ct(e,this.state.tabSize,t)}lineIndent(e,t=1){let{text:i,from:s}=this.lineAt(e,t),r=this.options.overrideIndentation;if(r){let o=r(s);if(o>-1)return o}return this.countColumn(i,i.search(/\S|$/))}get simulatedBreak(){return this.options.simulateBreak||null}},jl=new R;function og(n,e,t){let i=e.resolveStack(t),s=e.resolveInner(t,-1).resolve(t,0).enterUnfinishedNodesBefore(t);if(s!=i.node){let r=[];for(let o=s;o&&!(o.fromi.node.to||o.from==i.node.from&&o.type==i.node.type);o=o.parent)r.push(o);for(let o=r.length-1;o>=0;o--)i={node:r[o],next:i}}return Wf(i,n,t)}function Wf(n,e,t){for(let i=n;i;i=i.next){let s=ag(i.node);if(s)return s(Bl.create(e,t,i))}return 0}function lg(n){return n.pos==n.options.simulateBreak&&n.options.simulateDoubleBreak}function ag(n){let e=n.type.prop(jl);if(e)return e;let t=n.firstChild,i;if(t&&(i=t.type.prop(R.closedBy))){let s=n.lastChild,r=s&&i.indexOf(s.name)>-1;return o=>zf(o,!0,1,void 0,r&&!lg(o)?s.from:void 0)}return n.parent==null?hg:null}function hg(){return 0}var Bl=class n extends Kt{constructor(e,t,i){super(e.state,e.options),this.base=e,this.pos=t,this.context=i}get node(){return this.context.node}static create(e,t,i){return new n(e,t,i)}get textAfter(){return this.textAfterPos(this.pos)}get baseIndent(){return this.baseIndentFor(this.node)}baseIndentFor(e){let t=this.state.doc.lineAt(e.from);for(;;){let i=e.resolve(t.from);for(;i.parent&&i.parent.from==i.from;)i=i.parent;if(cg(i,e))break;t=this.state.doc.lineAt(i.from)}return this.lineIndent(t.from)}continue(){return Wf(this.context.next,this.base,this.pos)}};function cg(n,e){for(let t=e;t;t=t.parent)if(n==t)return!0;return!1}function fg(n){let e=n.node,t=e.childAfter(e.from),i=e.lastChild;if(!t)return null;let s=n.options.simulateBreak,r=n.state.doc.lineAt(t.from),o=s==null||s<=r.from?r.to:Math.min(r.to,s);for(let l=t.to;;){let a=e.childAfter(l);if(!a||a==i)return null;if(!a.type.isSkipped){if(a.from>=o)return null;let h=/^ */.exec(r.text.slice(t.to-r.from))[0].length;return{from:t.from,to:t.to+h}}l=a.to}}function Bf({closing:n,align:e=!0,units:t=1}){return i=>zf(i,e,t,n)}function zf(n,e,t,i,s){let r=n.textAfter,o=r.match(/^\s*/)[0].length,l=i&&r.slice(o,o+i.length)==i||s==n.pos+o,a=e?fg(n):null;return a?l?n.column(a.from):n.column(a.to):n.baseIndent+(l?0:n.unit*t)}var _f=n=>n.baseIndent;function js({except:n,units:e=1}={}){return t=>{let i=n&&n.test(t.textAfter);return t.baseIndent+(i?0:e*t.unit)}}var ug=200;function If(){return Y.transactionFilter.of(n=>{if(!n.docChanged||!n.isUserEvent("input.type")&&!n.isUserEvent("input.complete"))return n;let e=n.startState.languageDataAt("indentOnInput",n.startState.selection.main.head);if(!e.length)return n;let t=n.newDoc,{head:i}=n.newSelection.main,s=t.lineAt(i);if(i>s.from+ug)return n;let r=t.sliceString(s.from,i);if(!e.some(h=>h.test(r)))return n;let{state:o}=n,l=-1,a=[];for(let{head:h}of o.selection.ranges){let c=o.doc.lineAt(h);if(c.from==l)continue;l=c.from;let f=qs(o,c.from);if(f==null)continue;let u=/^\s*/.exec(c.text)[0],d=Mi(o,f);u!=d&&a.push({from:c.from,to:c.from+u.length,insert:d})}return a.length?[n,{changes:a,sequential:!0}]:n})}var dg=$.define(),Nl=new R;function Yf(n){let e=n.firstChild,t=n.lastChild;return e&&e.tot)continue;if(r&&l.from=e&&h.to>t&&(r=h)}}return r}function Og(n){let e=n.lastChild;return e&&e.to==n.to&&e.type.isError}function Is(n,e,t){for(let i of n.facet(dg)){let s=i(n,e,t);if(s)return s}return pg(n,e,t)}function Vf(n,e){let t=e.mapPos(n.from,1),i=e.mapPos(n.to,-1);return t>=i?void 0:{from:t,to:i}}var Ns=A.define({map:Vf}),xn=A.define({map:Vf});function qf(n){let e=[];for(let{head:t}of n.state.selection.ranges)e.some(i=>i.from<=t&&i.to>=t)||e.push(n.lineBlockAt(t));return e}var Jt=K.define({create(){return Z.none},update(n,e){e.isUserEvent("delete")&&e.changes.iterChangedRanges((t,i)=>n=Af(n,t,i)),n=n.map(e.changes);for(let t of e.effects)if(t.is(Ns)&&!mg(n,t.value.from,t.value.to)){let{preparePlaceholder:i}=e.state.facet(Gl),s=i?Z.replace({widget:new zl(i(e.state,t.value))}):Mf;n=n.update({add:[s.range(t.value.from,t.value.to)]})}else t.is(xn)&&(n=n.update({filter:(i,s)=>t.value.from!=i||t.value.to!=s,filterFrom:t.value.from,filterTo:t.value.to}));return e.selection&&(n=Af(n,e.selection.main.head)),n},provide:n=>v.decorations.from(n),toJSON(n,e){let t=[];return n.between(0,e.doc.length,(i,s)=>{t.push(i,s)}),t},fromJSON(n){if(!Array.isArray(n)||n.length%2)throw new RangeError("Invalid JSON for fold state");let e=[];for(let t=0;t{se&&(i=!0)}),i?n.update({filterFrom:e,filterTo:t,filter:(s,r)=>s>=t||r<=e}):n}function Ys(n,e,t){var i;let s=null;return(i=n.field(Jt,!1))===null||i===void 0||i.between(e,t,(r,o)=>{(!s||s.from>r)&&(s={from:r,to:o})}),s}function mg(n,e,t){let i=!1;return n.between(e,e,(s,r)=>{s==e&&r==t&&(i=!0)}),i}function jf(n,e){return n.field(Jt,!1)?e:e.concat(A.appendConfig.of(Uf()))}var gg=n=>{for(let e of qf(n)){let t=Is(n.state,e.from,e.to);if(t)return n.dispatch({effects:jf(n.state,[Ns.of(t),Nf(n,t)])}),!0}return!1},yg=n=>{if(!n.state.field(Jt,!1))return!1;let e=[];for(let t of qf(n)){let i=Ys(n.state,t.from,t.to);i&&e.push(xn.of(i),Nf(n,i,!1))}return e.length&&n.dispatch({effects:e}),e.length>0};function Nf(n,e,t=!0){let i=n.state.doc.lineAt(e.from).number,s=n.state.doc.lineAt(e.to).number;return v.announce.of(`${n.state.phrase(t?"Folded lines":"Unfolded lines")} ${i} ${n.state.phrase("to")} ${s}.`)}var bg=n=>{let{state:e}=n,t=[];for(let i=0;i{let e=n.state.field(Jt,!1);if(!e||!e.size)return!1;let t=[];return e.between(0,n.state.doc.length,(i,s)=>{t.push(xn.of({from:i,to:s}))}),n.dispatch({effects:t}),!0};var Gf=[{key:"Ctrl-Shift-[",mac:"Cmd-Alt-[",run:gg},{key:"Ctrl-Shift-]",mac:"Cmd-Alt-]",run:yg},{key:"Ctrl-Alt-[",run:bg},{key:"Ctrl-Alt-]",run:xg}],Sg={placeholderDOM:null,preparePlaceholder:null,placeholderText:"\u2026"},Gl=$.define({combine(n){return fe(n,Sg)}});function Uf(n){let e=[Jt,kg];return n&&e.push(Gl.of(n)),e}function Ff(n,e){let{state:t}=n,i=t.facet(Gl),s=o=>{let l=n.lineBlockAt(n.posAtDOM(o.target)),a=Ys(n.state,l.from,l.to);a&&n.dispatch({effects:xn.of(a)}),o.preventDefault()};if(i.placeholderDOM)return i.placeholderDOM(n,s,e);let r=document.createElement("span");return r.textContent=i.placeholderText,r.setAttribute("aria-label",t.phrase("folded code")),r.title=t.phrase("unfold"),r.className="cm-foldPlaceholder",r.onclick=s,r}var Mf=Z.replace({widget:new class extends ge{toDOM(n){return Ff(n,null)}}}),zl=class extends ge{constructor(e){super(),this.value=e}eq(e){return this.value==e.value}toDOM(e){return Ff(e,this.value)}},wg={openText:"\u2304",closedText:"\u203A",markerDOM:null,domEventHandlers:{},foldingChanged:()=>!1},gn=class extends Ce{constructor(e,t){super(),this.config=e,this.open=t}eq(e){return this.config==e.config&&this.open==e.open}toDOM(e){if(this.config.markerDOM)return this.config.markerDOM(this.open);let t=document.createElement("span");return t.textContent=this.open?this.config.openText:this.config.closedText,t.title=e.state.phrase(this.open?"Fold line":"Unfold line"),t}};function Hf(n={}){let e={...wg,...n},t=new gn(e,!0),i=new gn(e,!1),s=H.fromClass(class{constructor(o){this.from=o.viewport.from,this.markers=this.buildMarkers(o)}update(o){(o.docChanged||o.viewportChanged||o.startState.facet(Zt)!=o.state.facet(Zt)||o.startState.field(Jt,!1)!=o.state.field(Jt,!1)||ee(o.startState)!=ee(o.state)||e.foldingChanged(o))&&(this.markers=this.buildMarkers(o.view))}buildMarkers(o){let l=new $e;for(let a of o.viewportLineBlocks){let h=Ys(o.state,a.from,a.to)?i:Is(o.state,a.from,a.to)?t:null;h&&l.add(a.from,a.from,h)}return l.finish()}}),{domEventHandlers:r}=e;return[s,al({class:"cm-foldGutter",markers(o){var l;return((l=o.plugin(s))===null||l===void 0?void 0:l.markers)||W.empty},initialSpacer(){return new gn(e,!1)},domEventHandlers:{...r,click:(o,l,a)=>{if(r.click&&r.click(o,l,a))return!0;let h=Ys(o.state,l.from,l.to);if(h)return o.dispatch({effects:xn.of(h)}),!0;let c=Is(o.state,l.from,l.to);return c?(o.dispatch({effects:Ns.of(c)}),!0):!1}}}),Uf()]}var kg=v.baseTheme({".cm-foldPlaceholder":{backgroundColor:"#eee",border:"1px solid #ddd",color:"#888",borderRadius:".2em",margin:"0 1px",padding:"0 1px",cursor:"pointer"},".cm-foldGutter span":{padding:"0 1px",cursor:"pointer"}}),Zi=class n{constructor(e,t){this.specs=e;let i;function s(l){let a=Be.newName();return(i||(i=Object.create(null)))["."+a]=l,a}let r=typeof t.all=="string"?t.all:t.all?s(t.all):void 0,o=t.scope;this.scope=o instanceof Ae?l=>l.prop(Ci)==o.data:o?l=>l==o:void 0,this.style=Cl(e.map(l=>({tag:l.tag,class:l.class||s(Object.assign({},l,{tag:null}))})),{all:r}).style,this.module=i?new Be(i):null,this.themeType=t.themeType}static define(e,t){return new n(e,t||{})}},_l=$.define(),Kf=$.define({combine(n){return n.length?[n[0]]:null}});function Ll(n){let e=n.facet(_l);return e.length?e:n.facet(Kf)}function Gs(n,e){let t=[Qg],i;return n instanceof Zi&&(n.module&&t.push(v.styleModule.of(n.module)),i=n.themeType),e?.fallback?t.push(Kf.of(n)):i?t.push(_l.computeN([v.darkTheme],s=>s.facet(v.darkTheme)==(i=="dark")?[n]:[])):t.push(_l.of(n)),t}var Il=class{constructor(e){this.markCache=Object.create(null),this.tree=ee(e.state),this.decorations=this.buildDeco(e,Ll(e.state)),this.decoratedTo=e.viewport.to}update(e){let t=ee(e.state),i=Ll(e.state),s=i!=Ll(e.startState),{viewport:r}=e.view,o=e.changes.mapPos(this.decoratedTo,1);t.length=r.to?(this.decorations=this.decorations.map(e.changes),this.decoratedTo=o):(t!=this.tree||e.viewportChanged||s)&&(this.tree=t,this.decorations=this.buildDeco(e.view,i),this.decoratedTo=r.to)}buildDeco(e,t){if(!t||!this.tree.length)return Z.none;let i=new $e;for(let{from:s,to:r}of e.visibleRanges)vf(this.tree,t,(o,l,a)=>{i.add(o,l,this.markCache[a]||(this.markCache[a]=Z.mark({class:a})))},s,r);return i.finish()}},Qg=xe.high(H.fromClass(Il,{decorations:n=>n.decorations})),Jf=Zi.define([{tag:m.meta,color:"#404740"},{tag:m.link,textDecoration:"underline"},{tag:m.heading,textDecoration:"underline",fontWeight:"bold"},{tag:m.emphasis,fontStyle:"italic"},{tag:m.strong,fontWeight:"bold"},{tag:m.strikethrough,textDecoration:"line-through"},{tag:m.keyword,color:"#708"},{tag:[m.atom,m.bool,m.url,m.contentSeparator,m.labelName],color:"#219"},{tag:[m.literal,m.inserted],color:"#164"},{tag:[m.string,m.deleted],color:"#a11"},{tag:[m.regexp,m.escape,m.special(m.string)],color:"#e40"},{tag:m.definition(m.variableName),color:"#00f"},{tag:m.local(m.variableName),color:"#30a"},{tag:[m.typeName,m.namespace],color:"#085"},{tag:m.className,color:"#167"},{tag:[m.special(m.variableName),m.macroName],color:"#256"},{tag:m.definition(m.propertyName),color:"#00c"},{tag:m.comment,color:"#940"},{tag:m.invalid,color:"#f00"}]),vg=v.baseTheme({"&.cm-focused .cm-matchingBracket":{backgroundColor:"#328c8252"},"&.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bb555544"}}),eu=1e4,tu="()[]{}",iu=$.define({combine(n){return fe(n,{afterCursor:!0,brackets:tu,maxScanDistance:eu,renderMatch:Tg})}}),$g=Z.mark({class:"cm-matchingBracket"}),Pg=Z.mark({class:"cm-nonmatchingBracket"});function Tg(n){let e=[],t=n.matched?$g:Pg;return e.push(t.range(n.start.from,n.start.to)),n.end&&e.push(t.range(n.end.from,n.end.to)),e}function Rf(n){let e=[],t=n.facet(iu);for(let i of n.selection.ranges){if(!i.empty)continue;let s=Fe(n,i.head,-1,t)||i.head>0&&Fe(n,i.head-1,1,t)||t.afterCursor&&(Fe(n,i.head,1,t)||i.headn.decorations}),Zg=[Cg,vg];function nu(n={}){return[iu.of(n),Zg]}var Ag=new R;function Yl(n,e,t){let i=n.prop(e<0?R.openedBy:R.closedBy);if(i)return i;if(n.name.length==1){let s=t.indexOf(n.name);if(s>-1&&s%2==(e<0?1:0))return[t[s+e]]}return null}function Vl(n){let e=n.type.prop(Ag);return e?e(n.node):n}function Fe(n,e,t,i={}){let s=i.maxScanDistance||eu,r=i.brackets||tu,o=ee(n),l=o.resolveInner(e,t);for(let a=l;a;a=a.parent){let h=Yl(a.type,t,r);if(h&&a.from0?e>=c.from&&ec.from&&e<=c.to))return Mg(n,e,t,a,c,h,r)}}return Rg(n,e,t,o,l.type,s,r)}function Mg(n,e,t,i,s,r,o){let l=i.parent,a={from:s.from,to:s.to},h=0,c=l?.cursor();if(c&&(t<0?c.childBefore(i.from):c.childAfter(i.to)))do if(t<0?c.to<=i.from:c.from>=i.to){if(h==0&&r.indexOf(c.type.name)>-1&&c.from0)return null;let h={from:t<0?e-1:e,to:t>0?e+1:e},c=n.doc.iterRange(e,t>0?n.doc.length:0),f=0;for(let u=0;!c.next().done&&u<=r;){let d=c.value;t<0&&(u+=d.length);let p=e+u*t;for(let O=t>0?0:d.length-1,g=t>0?d.length:-1;O!=g;O+=t){let y=o.indexOf(d[O]);if(!(y<0||i.resolveInner(p+O,1).type!=s))if(y%2==0==t>0)f++;else{if(f==1)return{start:h,end:{from:p+O,to:p+O+1},matched:y>>1==a>>1};f--}}t>0&&(u+=d.length)}return c.done?{start:h,matched:!1}:null}var Xg=Object.create(null),Xf=[ue.none];var Lf=[],Ef=Object.create(null),Lg=Object.create(null);for(let[n,e]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])Lg[n]=Eg(Xg,e);function El(n,e){Lf.indexOf(n)>-1||(Lf.push(n),console.warn(e))}function Eg(n,e){let t=[];for(let l of e.split(" ")){let a=[];for(let h of l.split(".")){let c=n[h]||m[h];c?typeof c=="function"?a.length?a=a.map(c):El(h,`Modifier ${h} used at start of tag`):a.length?El(h,`Tag ${h} used as modifier`):a=Array.isArray(c)?c:[c]:El(h,`Unknown highlighting tag ${h}`)}for(let h of a)t.push(h)}if(!t.length)return 0;let i=e.replace(/ /g,"_"),s=i+" "+t.map(l=>l.id),r=Ef[s];if(r)return r.id;let o=Ef[s]=ue.define({id:Xf.length,name:i,props:[Bs({[i]:t})]});return Xf.push(o),o.id}var xb={rtl:Z.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"rtl"},bidiIsolate:_.RTL}),ltr:Z.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"ltr"},bidiIsolate:_.LTR}),auto:Z.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"auto"},bidiIsolate:null})};var Fs=class{constructor(e,t,i,s){this.state=e,this.pos=t,this.explicit=i,this.view=s,this.abortListeners=[],this.abortOnDocChange=!1}tokenBefore(e){let t=ee(this.state).resolveInner(this.pos,-1);for(;t&&e.indexOf(t.name)<0;)t=t.parent;return t?{from:t.from,to:this.pos,text:this.state.sliceDoc(t.from,this.pos),type:t.type}:null}matchBefore(e){let t=this.state.doc.lineAt(this.pos),i=Math.max(t.from,this.pos-250),s=t.text.slice(i-t.from,this.pos-t.from),r=s.search(du(e,!1));return r<0?null:{from:i+r,to:this.pos,text:s.slice(r)}}get aborted(){return this.abortListeners==null}addEventListener(e,t,i){e=="abort"&&this.abortListeners&&(this.abortListeners.push(t),i&&i.onDocChange&&(this.abortOnDocChange=!0))}};function su(n){let e=Object.keys(n).join(""),t=/\w/.test(e);return t&&(e=e.replace(/\w/g,"")),`[${t?"\\w":""}${e.replace(/[^\w\s]/g,"\\$&")}]`}function Dg(n){let e=Object.create(null),t=Object.create(null);for(let{label:s}of n){e[s[0]]=!0;for(let r=1;rtypeof s=="string"?{label:s}:s),[t,i]=e.every(s=>/^\w+$/.test(s.label))?[/\w*$/,/\w+$/]:Dg(e);return s=>{let r=s.matchBefore(i);return r||s.explicit?{from:r?r.from:s.pos,options:e,validFor:t}:null}}function uu(n,e){return t=>{for(let i=ee(t.state).resolveInner(t.pos,-1);i;i=i.parent){if(n.indexOf(i.name)>-1)return null;if(i.type.isTop)break}return e(t)}}var Hs=class{constructor(e,t,i,s){this.completion=e,this.source=t,this.match=i,this.score=s}};function ti(n){return n.selection.main.from}function du(n,e){var t;let{source:i}=n,s=e&&i[0]!="^",r=i[i.length-1]!="$";return!s&&!r?n:new RegExp(`${s?"^":""}(?:${i})${r?"$":""}`,(t=n.flags)!==null&&t!==void 0?t:n.ignoreCase?"i":"")}var aa=be.define();function Wg(n,e,t,i){let{main:s}=n.selection,r=t-s.from,o=i-s.from;return{...n.changeByRange(l=>{if(l!=s&&t!=i&&n.sliceDoc(l.from+r,l.from+o)!=n.sliceDoc(t,i))return{range:l};let a=n.toText(e);return{changes:{from:l.from+r,to:i==s.from?l.to:l.from+o,insert:a},range:b.cursor(l.from+r+a.length)}}),scrollIntoView:!0,userEvent:"input.complete"}}var ru=new WeakMap;function Bg(n){if(!Array.isArray(n))return n;let e=ru.get(n);return e||ru.set(n,e=la(n)),e}var Ks=A.define(),Sn=A.define(),Kl=class{constructor(e){this.pattern=e,this.chars=[],this.folded=[],this.any=[],this.precise=[],this.byWord=[],this.score=0,this.matched=[];for(let t=0;t=48&&w<=57||w>=97&&w<=122?2:w>=65&&w<=90?1:0:(k=Yi(w))!=k.toLowerCase()?1:k!=k.toUpperCase()?2:0;(!x||Q==1&&g||C==0&&Q!=0)&&(t[f]==w||i[f]==w&&(u=!0)?o[f++]=x:o.length&&(y=!1)),C=Q,x+=Pe(w)}return f==a&&o[0]==0&&y?this.result(-100+(u?-200:0),o,e):d==a&&p==0?this.ret(-200-e.length+(O==e.length?0:-100),[0,O]):l>-1?this.ret(-700-e.length,[l,l+this.pattern.length]):d==a?this.ret(-900-e.length,[p,O]):f==a?this.result(-100+(u?-200:0)+-700+(y?0:-1100),o,e):t.length==2?null:this.result((s[0]?-700:0)+-200+-1100,s,e)}result(e,t,i){let s=[],r=0;for(let o of t){let l=o+(this.astral?Pe(le(i,o)):1);r&&s[r-1]==o?s[r-1]=l:(s[r++]=o,s[r++]=l)}return this.ret(e-i.length,s)}},Jl=class{constructor(e){this.pattern=e,this.matched=[],this.score=0,this.folded=e.toLowerCase()}match(e){if(e.length!1,activateOnTypingDelay:100,selectOnOpen:!0,override:null,closeOnBlur:!0,maxRenderedOptions:100,defaultKeymap:!0,tooltipClass:()=>"",optionClass:()=>"",aboveCursor:!1,icons:!0,addToOptions:[],positionInfo:zg,filterStrict:!1,compareCompletions:(e,t)=>(e.sortText||e.label).localeCompare(t.sortText||t.label),interactionDelay:75,updateSyncTime:100},{defaultKeymap:(e,t)=>e&&t,closeOnBlur:(e,t)=>e&&t,icons:(e,t)=>e&&t,tooltipClass:(e,t)=>i=>ou(e(i),t(i)),optionClass:(e,t)=>i=>ou(e(i),t(i)),addToOptions:(e,t)=>e.concat(t),filterStrict:(e,t)=>e||t})}});function ou(n,e){return n?e?n+" "+e:n:e}function zg(n,e,t,i,s,r){let o=n.textDirection==_.RTL,l=o,a=!1,h="top",c,f,u=e.left-s.left,d=s.right-e.right,p=i.right-i.left,O=i.bottom-i.top;if(l&&u=O||x>e.top?c=t.bottom-e.top:(h="bottom",c=e.bottom-t.top)}let g=(e.bottom-e.top)/r.offsetHeight,y=(e.right-e.left)/r.offsetWidth;return{style:`${h}: ${c/g}px; max-width: ${f/y}px`,class:"cm-completionInfo-"+(a?o?"left-narrow":"right-narrow":l?"left":"right")}}var ha=A.define();function _g(n){let e=n.addToOptions.slice();return n.icons&&e.push({render(t){let i=document.createElement("div");return i.classList.add("cm-completionIcon"),t.type&&i.classList.add(...t.type.split(/\s+/g).map(s=>"cm-completionIcon-"+s)),i.setAttribute("aria-hidden","true"),i},position:20}),e.push({render(t,i,s,r){let o=document.createElement("span");o.className="cm-completionLabel";let l=t.displayLabel||t.label,a=0;for(let h=0;ha&&o.appendChild(document.createTextNode(l.slice(a,c)));let u=o.appendChild(document.createElement("span"));u.appendChild(document.createTextNode(l.slice(c,f))),u.className="cm-completionMatchedText",a=f}return at.position-i.position).map(t=>t.render)}function Ul(n,e,t){if(n<=t)return{from:0,to:n};if(e<0&&(e=0),e<=n>>1){let s=Math.floor(e/t);return{from:s*t,to:(s+1)*t}}let i=Math.floor((n-e)/t);return{from:n-(i+1)*t,to:n-i*t}}var ea=class{constructor(e,t,i){this.view=e,this.stateField=t,this.applyCompletion=i,this.info=null,this.infoDestroy=null,this.placeInfoReq={read:()=>this.measureInfo(),write:a=>this.placeInfo(a),key:this},this.space=null,this.currentClass="";let s=e.state.field(t),{options:r,selected:o}=s.open,l=e.state.facet(re);this.optionContent=_g(l),this.optionClass=l.optionClass,this.tooltipClass=l.tooltipClass,this.range=Ul(r.length,o,l.maxRenderedOptions),this.dom=document.createElement("div"),this.dom.className="cm-tooltip-autocomplete",this.updateTooltipClass(e.state),this.dom.addEventListener("mousedown",a=>{let{options:h}=e.state.field(t).open;for(let c=a.target,f;c&&c!=this.dom;c=c.parentNode)if(c.nodeName=="LI"&&(f=/-(\d+)$/.exec(c.id))&&+f[1]this.list.lastChild.getBoundingClientRect().bottom?this.range.to:null;c!=null&&(e.dispatch({effects:ha.of(c)}),a.preventDefault())}}),this.dom.addEventListener("focusout",a=>{let h=e.state.field(this.stateField,!1);h&&h.tooltip&&e.state.facet(re).closeOnBlur&&a.relatedTarget!=e.contentDOM&&e.dispatch({effects:Sn.of(null)})}),this.showOptions(r,s.id)}mount(){this.updateSel()}showOptions(e,t){this.list&&this.list.remove(),this.list=this.dom.appendChild(this.createListBox(e,t,this.range)),this.list.addEventListener("scroll",()=>{this.info&&this.view.requestMeasure(this.placeInfoReq)})}update(e){var t;let i=e.state.field(this.stateField),s=e.startState.field(this.stateField);if(this.updateTooltipClass(e.state),i!=s){let{options:r,selected:o,disabled:l}=i.open;(!s.open||s.open.options!=r)&&(this.range=Ul(r.length,o,e.state.facet(re).maxRenderedOptions),this.showOptions(r,i.id)),this.updateSel(),l!=((t=s.open)===null||t===void 0?void 0:t.disabled)&&this.dom.classList.toggle("cm-tooltip-autocomplete-disabled",!!l)}}updateTooltipClass(e){let t=this.tooltipClass(e);if(t!=this.currentClass){for(let i of this.currentClass.split(" "))i&&this.dom.classList.remove(i);for(let i of t.split(" "))i&&this.dom.classList.add(i);this.currentClass=t}}positioned(e){this.space=e,this.info&&this.view.requestMeasure(this.placeInfoReq)}updateSel(){let e=this.view.state.field(this.stateField),t=e.open;(t.selected>-1&&t.selected=this.range.to)&&(this.range=Ul(t.options.length,t.selected,this.view.state.facet(re).maxRenderedOptions),this.showOptions(t.options,e.id));let i=this.updateSelectedOption(t.selected);if(i){this.destroyInfo();let{completion:s}=t.options[t.selected],{info:r}=s;if(!r)return;let o=typeof r=="string"?document.createTextNode(r):r(s);if(!o)return;"then"in o?o.then(l=>{l&&this.view.state.field(this.stateField,!1)==e&&this.addInfoPane(l,s)}).catch(l=>ae(this.view.state,l,"completion info")):(this.addInfoPane(o,s),i.setAttribute("aria-describedby",this.info.id))}}addInfoPane(e,t){this.destroyInfo();let i=this.info=document.createElement("div");if(i.className="cm-tooltip cm-completionInfo",i.id="cm-completionInfo-"+Math.floor(Math.random()*65535).toString(16),e.nodeType!=null)i.appendChild(e),this.infoDestroy=null;else{let{dom:s,destroy:r}=e;i.appendChild(s),this.infoDestroy=r||null}this.dom.appendChild(i),this.view.requestMeasure(this.placeInfoReq)}updateSelectedOption(e){let t=null;for(let i=this.list.firstChild,s=this.range.from;i;i=i.nextSibling,s++)i.nodeName!="LI"||!i.id?s--:s==e?i.hasAttribute("aria-selected")||(i.setAttribute("aria-selected","true"),t=i):i.hasAttribute("aria-selected")&&(i.removeAttribute("aria-selected"),i.removeAttribute("aria-describedby"));return t&&Yg(this.list,t),t}measureInfo(){let e=this.dom.querySelector("[aria-selected]");if(!e||!this.info)return null;let t=this.dom.getBoundingClientRect(),i=this.info.getBoundingClientRect(),s=e.getBoundingClientRect(),r=this.space;if(!r){let o=this.dom.ownerDocument.documentElement;r={left:0,top:0,right:o.clientWidth,bottom:o.clientHeight}}return s.top>Math.min(r.bottom,t.bottom)-10||s.bottom{o.target==s&&o.preventDefault()});let r=null;for(let o=i.from;oi.from||i.from==0))if(r=u,typeof h!="string"&&h.header)s.appendChild(h.header(h));else{let d=s.appendChild(document.createElement("completion-section"));d.textContent=u}}let c=s.appendChild(document.createElement("li"));c.id=t+"-"+o,c.setAttribute("role","option");let f=this.optionClass(l);f&&(c.className=f);for(let u of this.optionContent){let d=u(l,this.view.state,this.view,a);d&&c.appendChild(d)}}return i.from&&s.classList.add("cm-completionListIncompleteTop"),i.tonew ea(t,n,e)}function Yg(n,e){let t=n.getBoundingClientRect(),i=e.getBoundingClientRect(),s=t.height/n.offsetHeight;i.topt.bottom&&(n.scrollTop+=(i.bottom-t.bottom)/s)}function lu(n){return(n.boost||0)*100+(n.apply?10:0)+(n.info?5:0)+(n.type?1:0)}function Vg(n,e){let t=[],i=null,s=null,r=c=>{t.push(c);let{section:f}=c.completion;if(f){i||(i=[]);let u=typeof f=="string"?f:f.name;i.some(d=>d.name==u)||i.push(typeof f=="string"?{name:u}:f)}},o=e.facet(re);for(let c of n)if(c.hasResult()){let f=c.result.getMatch;if(c.result.filter===!1)for(let u of c.result.options)r(new Hs(u,c.source,f?f(u):[],1e9-t.length));else{let u=e.sliceDoc(c.from,c.to),d,p=o.filterStrict?new Jl(u):new Kl(u);for(let O of c.result.options)if(d=p.match(O.label)){let g=O.displayLabel?f?f(O,d.matched):[]:d.matched,y=d.score+(O.boost||0);if(r(new Hs(O,c.source,g,y)),typeof O.section=="object"&&O.section.rank==="dynamic"){let{name:x}=O.section;s||(s=Object.create(null)),s[x]=Math.max(y,s[x]||-1e9)}}}}if(i){let c=Object.create(null),f=0,u=(d,p)=>(d.rank==="dynamic"&&p.rank==="dynamic"?s[p.name]-s[d.name]:0)||(typeof d.rank=="number"?d.rank:1e9)-(typeof p.rank=="number"?p.rank:1e9)||(d.nameu.score-f.score||h(f.completion,u.completion))){let f=c.completion;!a||a.label!=f.label||a.detail!=f.detail||a.type!=null&&f.type!=null&&a.type!=f.type||a.apply!=f.apply||a.boost!=f.boost?l.push(c):lu(c.completion)>lu(a)&&(l[l.length-1]=c),a=c.completion}return l}var ta=class n{constructor(e,t,i,s,r,o){this.options=e,this.attrs=t,this.tooltip=i,this.timestamp=s,this.selected=r,this.disabled=o}setSelected(e,t){return e==this.selected||e>=this.options.length?this:new n(this.options,au(t,e),this.tooltip,this.timestamp,e,this.disabled)}static build(e,t,i,s,r,o){if(s&&!o&&e.some(h=>h.isPending))return s.setDisabled();let l=Vg(e,t);if(!l.length)return s&&e.some(h=>h.isPending)?s.setDisabled():null;let a=t.facet(re).selectOnOpen?0:-1;if(s&&s.selected!=a&&s.selected!=-1){let h=s.options[s.selected].completion;for(let c=0;cc.hasResult()?Math.min(h,c.from):h,1e8),create:Fg,above:r.aboveCursor},s?s.timestamp:Date.now(),a,!1)}map(e){return new n(this.options,this.attrs,{...this.tooltip,pos:e.mapPos(this.tooltip.pos)},this.timestamp,this.selected,this.disabled)}setDisabled(){return new n(this.options,this.attrs,this.tooltip,this.timestamp,this.selected,!0)}},ia=class n{constructor(e,t,i){this.active=e,this.id=t,this.open=i}static start(){return new n(Gg,"cm-ac-"+Math.floor(Math.random()*2e6).toString(36),null)}update(e){let{state:t}=e,i=t.facet(re),r=(i.override||t.languageDataAt("autocomplete",ti(t)).map(Bg)).map(a=>(this.active.find(c=>c.source==a)||new mt(a,this.active.some(c=>c.state!=0)?1:0)).update(e,i));r.length==this.active.length&&r.every((a,h)=>a==this.active[h])&&(r=this.active);let o=this.open,l=e.effects.some(a=>a.is(ca));o&&e.docChanged&&(o=o.map(e.changes)),e.selection||r.some(a=>a.hasResult()&&e.changes.touchesRange(a.from,a.to))||!qg(r,this.active)||l?o=ta.build(r,t,this.id,o,i,l):o&&o.disabled&&!r.some(a=>a.isPending)&&(o=null),!o&&r.every(a=>!a.isPending)&&r.some(a=>a.hasResult())&&(r=r.map(a=>a.hasResult()?new mt(a.source,0):a));for(let a of e.effects)a.is(ha)&&(o=o&&o.setSelected(a.value,this.id));return r==this.active&&o==this.open?this:new n(r,this.id,o)}get tooltip(){return this.open?this.open.tooltip:null}get attrs(){return this.open?this.open.attrs:this.active.length?jg:Ng}};function qg(n,e){if(n==e)return!0;for(let t=0,i=0;;){for(;t-1&&(t["aria-activedescendant"]=n+"-"+e),t}var Gg=[];function pu(n,e){if(n.isUserEvent("input.complete")){let i=n.annotation(aa);if(i&&e.activateOnCompletion(i))return 12}let t=n.isUserEvent("input.type");return t&&e.activateOnTyping?5:t?1:n.isUserEvent("delete.backward")?2:n.selection?8:n.docChanged?16:0}var mt=class n{constructor(e,t,i=!1){this.source=e,this.state=t,this.explicit=i}hasResult(){return!1}get isPending(){return this.state==1}update(e,t){let i=pu(e,t),s=this;(i&8||i&16&&this.touches(e))&&(s=new n(s.source,0)),i&4&&s.state==0&&(s=new n(this.source,1)),s=s.updateFor(e,i);for(let r of e.effects)if(r.is(Ks))s=new n(s.source,1,r.value);else if(r.is(Sn))s=new n(s.source,0);else if(r.is(ca))for(let o of r.value)o.source==s.source&&(s=o);return s}updateFor(e,t){return this.map(e.changes)}map(e){return this}touches(e){return e.changes.touchesRange(ti(e.state))}},Js=class n extends mt{constructor(e,t,i,s,r,o){super(e,3,t),this.limit=i,this.result=s,this.from=r,this.to=o}hasResult(){return!0}updateFor(e,t){var i;if(!(t&3))return this.map(e.changes);let s=this.result;s.map&&!e.changes.empty&&(s=s.map(s,e.changes));let r=e.changes.mapPos(this.from),o=e.changes.mapPos(this.to,1),l=ti(e.state);if(l>o||!s||t&2&&(ti(e.startState)==this.from||lt.map(e))}}),ke=K.define({create(){return ia.start()},update(n,e){return n.update(e)},provide:n=>[an.from(n,e=>e.tooltip),v.contentAttributes.from(n,e=>e.attrs)]});function fa(n,e){let t=e.completion.apply||e.completion.label,i=n.state.field(ke).active.find(s=>s.source==e.source);return i instanceof Js?(typeof t=="string"?n.dispatch({...Wg(n.state,t,i.from,i.to),annotations:aa.of(e.completion)}):t(n,e.completion,i.from,i.to),!0):!1}var Fg=Ig(ke,fa);function Us(n,e="option"){return t=>{let i=t.state.field(ke,!1);if(!i||!i.open||i.open.disabled||Date.now()-i.open.timestamp-1?i.open.selected+s*(n?1:-1):n?0:o-1;return l<0?l=e=="page"?0:o-1:l>=o&&(l=e=="page"?o-1:0),t.dispatch({effects:ha.of(l)}),!0}}var Hg=n=>{let e=n.state.field(ke,!1);return n.state.readOnly||!e||!e.open||e.open.selected<0||e.open.disabled||Date.now()-e.open.timestampn.state.field(ke,!1)?(n.dispatch({effects:Ks.of(!0)}),!0):!1,Kg=n=>{let e=n.state.field(ke,!1);return!e||!e.active.some(t=>t.state!=0)?!1:(n.dispatch({effects:Sn.of(null)}),!0)},na=class{constructor(e,t){this.active=e,this.context=t,this.time=Date.now(),this.updates=[],this.done=void 0}},Jg=50,e0=1e3,t0=H.fromClass(class{constructor(n){this.view=n,this.debounceUpdate=-1,this.running=[],this.debounceAccept=-1,this.pendingStart=!1,this.composing=0;for(let e of n.state.field(ke).active)e.isPending&&this.startQuery(e)}update(n){let e=n.state.field(ke),t=n.state.facet(re);if(!n.selectionSet&&!n.docChanged&&n.startState.field(ke)==e)return;let i=n.transactions.some(r=>{let o=pu(r,t);return o&8||(r.selection||r.docChanged)&&!(o&3)});for(let r=0;rJg&&Date.now()-o.time>e0){for(let l of o.context.abortListeners)try{l()}catch(a){ae(this.view.state,a)}o.context.abortListeners=null,this.running.splice(r--,1)}else o.updates.push(...n.transactions)}this.debounceUpdate>-1&&clearTimeout(this.debounceUpdate),n.transactions.some(r=>r.effects.some(o=>o.is(Ks)))&&(this.pendingStart=!0);let s=this.pendingStart?50:t.activateOnTypingDelay;if(this.debounceUpdate=e.active.some(r=>r.isPending&&!this.running.some(o=>o.active.source==r.source))?setTimeout(()=>this.startUpdate(),s):-1,this.composing!=0)for(let r of n.transactions)r.isUserEvent("input.type")?this.composing=2:this.composing==2&&r.selection&&(this.composing=3)}startUpdate(){this.debounceUpdate=-1,this.pendingStart=!1;let{state:n}=this.view,e=n.field(ke);for(let t of e.active)t.isPending&&!this.running.some(i=>i.active.source==t.source)&&this.startQuery(t);this.running.length&&e.open&&e.open.disabled&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(re).updateSyncTime))}startQuery(n){let{state:e}=this.view,t=ti(e),i=new Fs(e,t,n.explicit,this.view),s=new na(n,i);this.running.push(s),Promise.resolve(n.source(i)).then(r=>{s.context.aborted||(s.done=r||null,this.scheduleAccept())},r=>{this.view.dispatch({effects:Sn.of(null)}),ae(this.view.state,r)})}scheduleAccept(){this.running.every(n=>n.done!==void 0)?this.accept():this.debounceAccept<0&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(re).updateSyncTime))}accept(){var n;this.debounceAccept>-1&&clearTimeout(this.debounceAccept),this.debounceAccept=-1;let e=[],t=this.view.state.facet(re),i=this.view.state.field(ke);for(let s=0;sl.source==r.active.source);if(o&&o.isPending)if(r.done==null){let l=new mt(r.active.source,0);for(let a of r.updates)l=l.update(a,t);l.isPending||e.push(l)}else this.startQuery(o)}(e.length||i.open&&i.open.disabled)&&this.view.dispatch({effects:ca.of(e)})}},{eventHandlers:{blur(n){let e=this.view.state.field(ke,!1);if(e&&e.tooltip&&this.view.state.facet(re).closeOnBlur){let t=e.open&&ll(this.view,e.open.tooltip);(!t||!t.dom.contains(n.relatedTarget))&&setTimeout(()=>this.view.dispatch({effects:Sn.of(null)}),10)}},compositionstart(){this.composing=1},compositionend(){this.composing==3&&setTimeout(()=>this.view.dispatch({effects:Ks.of(!1)}),20),this.composing=0}}}),i0=typeof navigator=="object"&&/Win/.test(navigator.platform),n0=xe.highest(v.domEventHandlers({keydown(n,e){let t=e.state.field(ke,!1);if(!t||!t.open||t.open.disabled||t.open.selected<0||n.key.length>1||n.ctrlKey&&!(i0&&n.altKey)||n.metaKey)return!1;let i=t.open.options[t.open.selected],s=t.active.find(o=>o.source==i.source),r=i.completion.commitCharacters||s.result.commitCharacters;return r&&r.indexOf(n.key)>-1&&fa(e,i),!1}})),Ou=v.baseTheme({".cm-tooltip.cm-tooltip-autocomplete":{"& > ul":{fontFamily:"monospace",whiteSpace:"nowrap",overflow:"hidden auto",maxWidth_fallback:"700px",maxWidth:"min(700px, 95vw)",minWidth:"250px",maxHeight:"10em",height:"100%",listStyle:"none",margin:0,padding:0,"& > li, & > completion-section":{padding:"1px 3px",lineHeight:1.2},"& > li":{overflowX:"hidden",textOverflow:"ellipsis",cursor:"pointer"},"& > completion-section":{display:"list-item",borderBottom:"1px solid silver",paddingLeft:"0.5em",opacity:.7}}},"&light .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#17c",color:"white"},"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#777"},"&dark .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#347",color:"white"},"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#444"},".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after":{content:'"\xB7\xB7\xB7"',opacity:.5,display:"block",textAlign:"center"},".cm-tooltip.cm-completionInfo":{position:"absolute",padding:"3px 9px",width:"max-content",maxWidth:"400px",boxSizing:"border-box",whiteSpace:"pre-line"},".cm-completionInfo.cm-completionInfo-left":{right:"100%"},".cm-completionInfo.cm-completionInfo-right":{left:"100%"},".cm-completionInfo.cm-completionInfo-left-narrow":{right:"30px"},".cm-completionInfo.cm-completionInfo-right-narrow":{left:"30px"},"&light .cm-snippetField":{backgroundColor:"#00000022"},"&dark .cm-snippetField":{backgroundColor:"#ffffff22"},".cm-snippetFieldPosition":{verticalAlign:"text-top",width:0,height:"1.15em",display:"inline-block",margin:"0 -0.7px -.7em",borderLeft:"1.4px dotted #888"},".cm-completionMatchedText":{textDecoration:"underline"},".cm-completionDetail":{marginLeft:"0.5em",fontStyle:"italic"},".cm-completionIcon":{fontSize:"90%",width:".8em",display:"inline-block",textAlign:"center",paddingRight:".6em",opacity:"0.6",boxSizing:"content-box"},".cm-completionIcon-function, .cm-completionIcon-method":{"&:after":{content:"'\u0192'"}},".cm-completionIcon-class":{"&:after":{content:"'\u25CB'"}},".cm-completionIcon-interface":{"&:after":{content:"'\u25CC'"}},".cm-completionIcon-variable":{"&:after":{content:"'\u{1D465}'"}},".cm-completionIcon-constant":{"&:after":{content:"'\u{1D436}'"}},".cm-completionIcon-type":{"&:after":{content:"'\u{1D461}'"}},".cm-completionIcon-enum":{"&:after":{content:"'\u222A'"}},".cm-completionIcon-property":{"&:after":{content:"'\u25A1'"}},".cm-completionIcon-keyword":{"&:after":{content:"'\u{1F511}\uFE0E'"}},".cm-completionIcon-namespace":{"&:after":{content:"'\u25A2'"}},".cm-completionIcon-text":{"&:after":{content:"'abc'",fontSize:"50%",verticalAlign:"middle"}}}),sa=class{constructor(e,t,i,s){this.field=e,this.line=t,this.from=i,this.to=s}},ra=class n{constructor(e,t,i){this.field=e,this.from=t,this.to=i}map(e){let t=e.mapPos(this.from,-1,se.TrackDel),i=e.mapPos(this.to,1,se.TrackDel);return t==null||i==null?null:new n(this.field,t,i)}},oa=class n{constructor(e,t){this.lines=e,this.fieldPositions=t}instantiate(e,t){let i=[],s=[t],r=e.doc.lineAt(t),o=/^\s*/.exec(r.text)[0];for(let a of this.lines){if(i.length){let h=o,c=/^\t*/.exec(a)[0].length;for(let f=0;fnew ra(a.field,s[a.line]+a.from,s[a.line]+a.to));return{text:i,ranges:l}}static parse(e){let t=[],i=[],s=[],r;for(let o of e.split(/\r\n?|\n/)){for(;r=/[#$]\{(?:(\d+)(?::([^{}]*))?|((?:\\[{}]|[^{}])*))\}/.exec(o);){let l=r[1]?+r[1]:null,a=r[2]||r[3]||"",h=-1,c=a.replace(/\\[{}]/g,f=>f[1]);for(let f=0;f=h&&u.field++}for(let f of s)if(f.line==i.length&&f.from>r.index){let u=r[2]?3+(r[1]||"").length:2;f.from-=u,f.to-=u}s.push(new sa(h,i.length,r.index,r.index+c.length)),o=o.slice(0,r.index)+a+o.slice(r.index+r[0].length)}o=o.replace(/\\([{}])/g,(l,a,h)=>{for(let c of s)c.line==i.length&&c.from>h&&(c.from--,c.to--);return a}),i.push(o)}return new n(i,s)}},s0=Z.widget({widget:new class extends ge{toDOM(){let n=document.createElement("span");return n.className="cm-snippetFieldPosition",n}ignoreEvent(){return!1}}}),r0=Z.mark({class:"cm-snippetField"}),Ri=class n{constructor(e,t){this.ranges=e,this.active=t,this.deco=Z.set(e.map(i=>(i.from==i.to?s0:r0).range(i.from,i.to)),!0)}map(e){let t=[];for(let i of this.ranges){let s=i.map(e);if(!s)return null;t.push(s)}return new n(t,this.active)}selectionInsideField(e){return e.ranges.every(t=>this.ranges.some(i=>i.field==this.active&&i.from<=t.from&&i.to>=t.to))}},Qn=A.define({map(n,e){return n&&n.map(e)}}),o0=A.define(),wn=K.define({create(){return null},update(n,e){for(let t of e.effects){if(t.is(Qn))return t.value;if(t.is(o0)&&n)return new Ri(n.ranges,t.value)}return n&&e.docChanged&&(n=n.map(e.changes)),n&&e.selection&&!n.selectionInsideField(e.selection)&&(n=null),n},provide:n=>v.decorations.from(n,e=>e?e.deco:Z.none)});function ua(n,e){return b.create(n.filter(t=>t.field==e).map(t=>b.range(t.from,t.to)))}function l0(n){let e=oa.parse(n);return(t,i,s,r)=>{let{text:o,ranges:l}=e.instantiate(t.state,s),{main:a}=t.state.selection,h={changes:{from:s,to:r==a.from?a.to:r,insert:E.of(o)},scrollIntoView:!0,annotations:i?[aa.of(i),ie.userEvent.of("input.complete")]:void 0};if(l.length&&(h.selection=ua(l,0)),l.some(c=>c.field>0)){let c=new Ri(l,0),f=h.effects=[Qn.of(c)];t.state.field(wn,!1)===void 0&&f.push(A.appendConfig.of([wn,u0,d0,Ou]))}t.dispatch(t.state.update(h))}}function mu(n){return({state:e,dispatch:t})=>{let i=e.field(wn,!1);if(!i||n<0&&i.active==0)return!1;let s=i.active+n,r=n>0&&!i.ranges.some(o=>o.field==s+n);return t(e.update({selection:ua(i.ranges,s),effects:Qn.of(r?null:new Ri(i.ranges,s)),scrollIntoView:!0})),!0}}var a0=({state:n,dispatch:e})=>n.field(wn,!1)?(e(n.update({effects:Qn.of(null)})),!0):!1,h0=mu(1),c0=mu(-1);var f0=[{key:"Tab",run:h0,shift:c0},{key:"Escape",run:a0}],hu=$.define({combine(n){return n.length?n[0]:f0}}),u0=xe.highest(Qt.compute([hu],n=>n.facet(hu)));function ye(n,e){return{...e,apply:l0(n)}}var d0=v.domEventHandlers({mousedown(n,e){let t=e.state.field(wn,!1),i;if(!t||(i=e.posAtCoords({x:n.clientX,y:n.clientY}))==null)return!1;let s=t.ranges.find(r=>r.from<=i&&r.to>=i);return!s||s.field==t.active?!1:(e.dispatch({selection:ua(t.ranges,s.field),effects:Qn.of(t.ranges.some(r=>r.field>s.field)?new Ri(t.ranges,s.field):null),scrollIntoView:!0}),!0)}});var kn={brackets:["(","[","{","'",'"'],before:")]}:;>",stringPrefixes:[]},ei=A.define({map(n,e){let t=e.mapPos(n,-1,se.TrackAfter);return t??void 0}}),da=new class extends We{};da.startSide=1;da.endSide=-1;var gu=K.define({create(){return W.empty},update(n,e){if(n=n.map(e.changes),e.selection){let t=e.state.doc.lineAt(e.selection.main.head);n=n.update({filter:i=>i>=t.from&&i<=t.to})}for(let t of e.effects)t.is(ei)&&(n=n.update({add:[da.range(t.value,t.value+1)]}));return n}});function yu(){return[O0,gu]}var Hl="()[]{}<>\xAB\xBB\xBB\xAB\uFF3B\uFF3D\uFF5B\uFF5D";function bu(n){for(let e=0;e{if((p0?n.composing:n.compositionStarted)||n.state.readOnly)return!1;let s=n.state.selection.main;if(i.length>2||i.length==2&&Pe(le(i,0))==1||e!=s.from||t!=s.to)return!1;let r=g0(n.state,i);return r?(n.dispatch(r),!0):!1}),m0=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let i=xu(n,n.selection.main.head).brackets||kn.brackets,s=null,r=n.changeByRange(o=>{if(o.empty){let l=y0(n.doc,o.head);for(let a of i)if(a==l&&er(n.doc,o.head)==bu(le(a,0)))return{changes:{from:o.head-a.length,to:o.head+a.length},range:b.cursor(o.head-a.length)}}return{range:s=o}});return s||e(n.update(r,{scrollIntoView:!0,userEvent:"delete.backward"})),!s},Su=[{key:"Backspace",run:m0}];function g0(n,e){let t=xu(n,n.selection.main.head),i=t.brackets||kn.brackets;for(let s of i){let r=bu(le(s,0));if(e==s)return r==s?S0(n,s,i.indexOf(s+s+s)>-1,t):b0(n,s,r,t.before||kn.before);if(e==r&&wu(n,n.selection.main.from))return x0(n,s,r)}return null}function wu(n,e){let t=!1;return n.field(gu).between(0,n.doc.length,i=>{i==e&&(t=!0)}),t}function er(n,e){let t=n.sliceString(e,e+2);return t.slice(0,Pe(le(t,0)))}function y0(n,e){let t=n.sliceString(e-2,e);return Pe(le(t,0))==t.length?t:t.slice(1)}function b0(n,e,t,i){let s=null,r=n.changeByRange(o=>{if(!o.empty)return{changes:[{insert:e,from:o.from},{insert:t,from:o.to}],effects:ei.of(o.to+e.length),range:b.range(o.anchor+e.length,o.head+e.length)};let l=er(n.doc,o.head);return!l||/\s/.test(l)||i.indexOf(l)>-1?{changes:{insert:e+t,from:o.head},effects:ei.of(o.head+e.length),range:b.cursor(o.head+e.length)}:{range:s=o}});return s?null:n.update(r,{scrollIntoView:!0,userEvent:"input.type"})}function x0(n,e,t){let i=null,s=n.changeByRange(r=>r.empty&&er(n.doc,r.head)==t?{changes:{from:r.head,to:r.head+t.length,insert:t},range:b.cursor(r.head+t.length)}:i={range:r});return i?null:n.update(s,{scrollIntoView:!0,userEvent:"input.type"})}function S0(n,e,t,i){let s=i.stringPrefixes||kn.stringPrefixes,r=null,o=n.changeByRange(l=>{if(!l.empty)return{changes:[{insert:e,from:l.from},{insert:e,from:l.to}],effects:ei.of(l.to+e.length),range:b.range(l.anchor+e.length,l.head+e.length)};let a=l.head,h=er(n.doc,a),c;if(h==e){if(cu(n,a))return{changes:{insert:e+e,from:a},effects:ei.of(a+e.length),range:b.cursor(a+e.length)};if(wu(n,a)){let u=t&&n.sliceDoc(a,a+e.length*3)==e+e+e?e+e+e:e;return{changes:{from:a,to:a+u.length,insert:u},range:b.cursor(a+u.length)}}}else{if(t&&n.sliceDoc(a-2*e.length,a)==e+e&&(c=fu(n,a-2*e.length,s))>-1&&cu(n,c))return{changes:{insert:e+e+e+e,from:a},effects:ei.of(a+e.length),range:b.cursor(a+e.length)};if(n.charCategorizer(a)(h)!=V.Word&&fu(n,a,s)>-1&&!w0(n,a,e,s))return{changes:{insert:e+e,from:a},effects:ei.of(a+e.length),range:b.cursor(a+e.length)}}return{range:r=l}});return r?null:n.update(o,{scrollIntoView:!0,userEvent:"input.type"})}function cu(n,e){let t=ee(n).resolveInner(e+1);return t.parent&&t.from==e}function w0(n,e,t,i){let s=ee(n).resolveInner(e,-1),r=i.reduce((o,l)=>Math.max(o,l.length),0);for(let o=0;o<5;o++){let l=n.sliceDoc(s.from,Math.min(s.to,s.from+t.length+r)),a=l.indexOf(t);if(!a||a>-1&&i.indexOf(l.slice(0,a))>-1){let c=s.firstChild;for(;c&&c.from==s.from&&c.to-c.from>t.length+a;){if(n.sliceDoc(c.to-t.length,c.to)==t)return!1;c=c.firstChild}return!0}let h=s.to==e&&s.parent;if(!h)break;s=h}return!1}function fu(n,e,t){let i=n.charCategorizer(e);if(i(n.sliceDoc(e-1,e))!=V.Word)return e;for(let s of t){let r=e-s.length;if(n.sliceDoc(r,e)==s&&i(n.sliceDoc(r-1,r))!=V.Word)return r}return-1}function ku(n={}){return[n0,ke,re.of(n),t0,k0,Ou]}var pa=[{key:"Ctrl-Space",run:Fl},{mac:"Alt-`",run:Fl},{mac:"Alt-i",run:Fl},{key:"Escape",run:Kg},{key:"ArrowDown",run:Us(!0)},{key:"ArrowUp",run:Us(!1)},{key:"PageDown",run:Us(!0,"page")},{key:"PageUp",run:Us(!1,"page")},{key:"Enter",run:Hg}],k0=xe.highest(Qt.computeN([re],n=>n.facet(re).defaultKeymap?[pa]:[]));var Pu=[ye("function ${name}(${params}) {\n ${}\n}",{label:"function",detail:"definition",type:"keyword"}),ye("for (let ${index} = 0; ${index} < ${bound}; ${index}++) {\n ${}\n}",{label:"for",detail:"loop",type:"keyword"}),ye("for (let ${name} of ${collection}) {\n ${}\n}",{label:"for",detail:"of loop",type:"keyword"}),ye("do {\n ${}\n} while (${})",{label:"do",detail:"loop",type:"keyword"}),ye("while (${}) {\n ${}\n}",{label:"while",detail:"loop",type:"keyword"}),ye(`try { +`){[e,t]=ci(this,e,t);let s="";for(let r=0,o=0;re&&r&&(s+=i),eo&&(s+=l.sliceString(e-o,t-o,i)),o=a+1}return s}flatten(e){for(let t of this.children)t.flatten(e)}scanIdentical(e,t){if(!(e instanceof n))return 0;let i=0,[s,r,o,l]=t>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;s+=t,r+=t){if(s==o||r==l)return i;let a=this.children[s],h=e.children[r];if(a!=h)return i+a.scanIdentical(h,t);i+=a.length+1}}static from(e,t=e.reduce((i,s)=>i+s.length+1,-1)){let i=0;for(let d of e)i+=d.lines;if(i<32){let d=[];for(let p of e)p.flatten(d);return new $e(d,t)}let s=Math.max(32,i>>5),r=s<<1,o=s>>1,l=[],a=0,h=-1,c=[];function f(d){let p;if(d.lines>r&&d instanceof n)for(let O of d.children)f(O);else d.lines>o&&(a>o||!a)?(u(),l.push(d)):d instanceof $e&&a&&(p=c[c.length-1])instanceof $e&&d.lines+p.lines<=32?(a+=d.lines,h+=d.length+1,c[c.length-1]=new $e(p.text.concat(d.text),p.length+1+d.length)):(a+d.lines>s&&u(),a+=d.lines,h+=d.length+1,c.push(d))}function u(){a!=0&&(l.push(c.length==1?c[0]:n.from(c,h)),h=-1,a=c.length=0)}for(let d of e)f(d);return u(),l.length==1?l[0]:new n(l,t)}};E.empty=new $e([""],0);function ep(n){let e=-1;for(let t of n)e+=t.length+1;return e}function _n(n,e,t=0,i=1e9){for(let s=0,r=0,o=!0;r=t&&(a>i&&(l=l.slice(0,i-s)),s0?1:(e instanceof $e?e.text.length:e.children.length)<<1]}nextInner(e,t){for(this.done=this.lineBreak=!1;;){let i=this.nodes.length-1,s=this.nodes[i],r=this.offsets[i],o=r>>1,l=s instanceof $e?s.text.length:s.children.length;if(o==(t>0?l:0)){if(i==0)return this.done=!0,this.value="",this;t>0&&this.offsets[i-1]++,this.nodes.pop(),this.offsets.pop()}else if((r&1)==(t>0?0:1)){if(this.offsets[i]+=t,e==0)return this.lineBreak=!0,this.value=` +`,this;e--}else if(s instanceof $e){let a=s.text[o+(t<0?-1:0)];if(this.offsets[i]+=t,a.length>Math.max(0,e))return this.value=e==0?a:t>0?a.slice(e):a.slice(0,a.length-e),this;e-=a.length}else{let a=s.children[o+(t<0?-1:0)];e>a.length?(e-=a.length,this.offsets[i]+=t):(t<0&&this.offsets[i]--,this.nodes.push(a),this.offsets.push(t>0?1:(a instanceof $e?a.text.length:a.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}},zn=class{constructor(e,t,i){this.value="",this.done=!1,this.cursor=new Bt(e,t>i?-1:1),this.pos=t>i?e.length:0,this.from=Math.min(t,i),this.to=Math.max(t,i)}nextInner(e,t){if(t<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,t<0?this.pos-this.to:this.from-this.pos);let i=t<0?this.pos-this.from:this.to-this.pos;e>i&&(e=i),i-=e;let{value:s}=this.cursor.next(e);return this.pos+=(s.length+e)*t,this.value=s.length<=i?s:t<0?s.slice(s.length-i):s.slice(0,i),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}},In=class{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:t,lineBreak:i,value:s}=this.inner.next(e);return t&&this.afterBreak?(this.value="",this.afterBreak=!1):t?(this.done=!0,this.value=""):i?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=s,this.afterBreak=!1),this}get lineBreak(){return!1}};typeof Symbol<"u"&&(E.prototype[Symbol.iterator]=function(){return this.iter()},Bt.prototype[Symbol.iterator]=zn.prototype[Symbol.iterator]=In.prototype[Symbol.iterator]=function(){return this});var Cr=class{constructor(e,t,i,s){this.from=e,this.to=t,this.number=i,this.text=s}get length(){return this.to-this.from}};function ci(n,e,t){return e=Math.max(0,Math.min(n.length,e)),[e,Math.max(e,Math.min(n.length,t))]}function te(n,e,t=!0,i=!0){return ja(n,e,t,i)}function tp(n){return n>=56320&&n<57344}function ip(n){return n>=55296&&n<56320}function le(n,e){let t=n.charCodeAt(e);if(!ip(t)||e+1==n.length)return t;let i=n.charCodeAt(e+1);return tp(i)?(t-55296<<10)+(i-56320)+65536:t}function Yi(n){return n<=65535?String.fromCharCode(n):(n-=65536,String.fromCharCode((n>>10)+55296,(n&1023)+56320))}function Te(n){return n<65536?1:2}var Zr=/\r\n?|\n/,se=(function(n){return n[n.Simple=0]="Simple",n[n.TrackDel=1]="TrackDel",n[n.TrackBefore=2]="TrackBefore",n[n.TrackAfter=3]="TrackAfter",n})(se||(se={})),ht=class n{constructor(e){this.sections=e}get length(){let e=0;for(let t=0;te)return r+(e-s);r+=l}else{if(i!=se.Simple&&h>=e&&(i==se.TrackDel&&se||i==se.TrackBefore&&se))return null;if(h>e||h==e&&t<0&&!l)return e==s||t<0?r:r+a;r+=a}s=h}if(e>s)throw new RangeError(`Position ${e} is out of range for changeset of length ${s}`);return r}touchesRange(e,t=e){for(let i=0,s=0;i=0&&s<=t&&l>=e)return st?"cover":!0;s=l}return!1}toString(){let e="";for(let t=0;t=0?":"+s:"")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some(t=>typeof t!="number"))throw new RangeError("Invalid JSON representation of ChangeDesc");return new n(e)}static create(e){return new n(e)}},me=class n extends ht{constructor(e,t){super(e),this.inserted=t}apply(e){if(this.length!=e.length)throw new RangeError("Applying change set to a document with the wrong length");return Ar(this,(t,i,s,r,o)=>e=e.replace(s,s+(i-t),o),!1),e}mapDesc(e,t=!1){return Mr(this,e,t,!0)}invert(e){let t=this.sections.slice(),i=[];for(let s=0,r=0;s=0){t[s]=l,t[s+1]=o;let a=s>>1;for(;i.length0&&bt(i,t,r.text),r.forward(c),l+=c}let h=e[o++];for(;l>1].toJSON()))}return e}static of(e,t,i){let s=[],r=[],o=0,l=null;function a(c=!1){if(!c&&!s.length)return;ou||f<0||u>t)throw new RangeError(`Invalid change range ${f} to ${u} (in doc of length ${t})`);let p=d?typeof d=="string"?E.of(d.split(i||Zr)):d:E.empty,O=p.length;if(f==u&&O==0)return;fo&&fe(s,f-o,-1),fe(s,u-f,O),bt(r,s,p),o=u}}return h(e),a(!l),l}static empty(e){return new n(e?[e,-1]:[],[])}static fromJSON(e){if(!Array.isArray(e))throw new RangeError("Invalid JSON representation of ChangeSet");let t=[],i=[];for(let s=0;sl&&typeof o!="string"))throw new RangeError("Invalid JSON representation of ChangeSet");if(r.length==1)t.push(r[0],0);else{for(;i.length=0&&t<=0&&t==n[s+1]?n[s]+=e:s>=0&&e==0&&n[s]==0?n[s+1]+=t:i?(n[s]+=e,n[s+1]+=t):n.push(e,t)}function bt(n,e,t){if(t.length==0)return;let i=e.length-2>>1;if(i>1])),!(t||o==n.sections.length||n.sections[o+1]<0);)l=n.sections[o++],a=n.sections[o++];e(s,h,r,c,f),s=h,r=c}}}function Mr(n,e,t,i=!1){let s=[],r=i?[]:null,o=new Wt(n),l=new Wt(e);for(let a=-1;;){if(o.done&&l.len||l.done&&o.len)throw new Error("Mismatched change set lengths");if(o.ins==-1&&l.ins==-1){let h=Math.min(o.len,l.len);fe(s,h,-1),o.forward(h),l.forward(h)}else if(l.ins>=0&&(o.ins<0||a==o.i||o.off==0&&(l.len=0&&a=0){let h=0,c=o.len;for(;c;)if(l.ins==-1){let f=Math.min(c,l.len);h+=f,c-=f,l.forward(f)}else if(l.ins==0&&l.lena||o.ins>=0&&o.len>a)&&(l||i.length>h),r.forward2(a),o.forward(a)}}}}var Wt=class{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i>1;return t>=e.length?E.empty:e[t]}textBit(e){let{inserted:t}=this.set,i=this.i-2>>1;return i>=t.length&&!e?E.empty:t[i].slice(this.off,e==null?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){this.ins==-1?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}},oi=class n{constructor(e,t,i){this.from=e,this.to=t,this.flags=i}get anchor(){return this.flags&32?this.to:this.from}get head(){return this.flags&32?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&8?-1:this.flags&16?1:0}get bidiLevel(){let e=this.flags&7;return e==7?null:e}get goalColumn(){let e=this.flags>>6;return e==16777215?void 0:e}map(e,t=-1){let i,s;return this.empty?i=s=e.mapPos(this.from,t):(i=e.mapPos(this.from,1),s=e.mapPos(this.to,-1)),i==this.from&&s==this.to?this:new n(i,s,this.flags)}extend(e,t=e,i=0){if(e<=this.anchor&&t>=this.anchor)return b.range(e,t,void 0,void 0,i);let s=Math.abs(e-this.anchor)>Math.abs(t-this.anchor)?e:t;return b.range(this.anchor,s,void 0,void 0,i)}eq(e,t=!1){return this.anchor==e.anchor&&this.head==e.head&&this.goalColumn==e.goalColumn&&(!t||!this.empty||this.assoc==e.assoc)}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||typeof e.anchor!="number"||typeof e.head!="number")throw new RangeError("Invalid JSON representation for SelectionRange");return b.range(e.anchor,e.head)}static create(e,t,i){return new n(e,t,i)}},b=class n{constructor(e,t){this.ranges=e,this.mainIndex=t}map(e,t=-1){return e.empty?this:n.create(this.ranges.map(i=>i.map(e,t)),this.mainIndex)}eq(e,t=!1){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let i=0;ie.toJSON()),main:this.mainIndex}}static fromJSON(e){if(!e||!Array.isArray(e.ranges)||typeof e.main!="number"||e.main>=e.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new n(e.ranges.map(t=>oi.fromJSON(t)),e.main)}static single(e,t=e){return new n([n.range(e,t)],0)}static create(e,t=0){if(e.length==0)throw new RangeError("A selection needs at least one range");for(let i=0,s=0;ss.from-r.from),t=e.indexOf(i);for(let s=1;sr.head?n.range(a,l):n.range(l,a))}}return new n(e,t)}};function ih(n,e){for(let t of n.ranges)if(t.to>e)throw new RangeError("Selection points outside of document")}var Ir=0,$=class n{constructor(e,t,i,s,r){this.combine=e,this.compareInput=t,this.compare=i,this.isStatic=s,this.id=Ir++,this.default=e([]),this.extensions=typeof r=="function"?r(this):r}get reader(){return this}static define(e={}){return new n(e.combine||(t=>t),e.compareInput||((t,i)=>t===i),e.compare||(e.combine?(t,i)=>t===i:Yr),!!e.static,e.enables)}of(e){return new ai([],this,0,e)}compute(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new ai(e,this,1,t)}computeN(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new ai(e,this,2,t)}from(e,t){return t||(t=i=>i),this.compute([e],i=>t(i.field(e)))}};function Yr(n,e){return n==e||n.length==e.length&&n.every((t,i)=>t===e[i])}var ai=class{constructor(e,t,i,s){this.dependencies=e,this.facet=t,this.type=i,this.value=s,this.id=Ir++}dynamicSlot(e){var t;let i=this.value,s=this.facet.compareInput,r=this.id,o=e[r]>>1,l=this.type==2,a=!1,h=!1,c=[];for(let f of this.dependencies)f=="doc"?a=!0:f=="selection"?h=!0:(((t=e[f.id])!==null&&t!==void 0?t:1)&1)==0&&c.push(e[f.id]);return{create(f){return f.values[o]=i(f),1},update(f,u){if(a&&u.docChanged||h&&(u.docChanged||u.selection)||Rr(f,c)){let d=i(f);if(l?!Ha(d,f.values[o],s):!s(d,f.values[o]))return f.values[o]=d,1}return 0},reconfigure:(f,u)=>{let d,p=u.config.address[r];if(p!=null){let O=Vn(u,p);if(this.dependencies.every(g=>g instanceof $?u.facet(g)===f.facet(g):g instanceof K?u.field(g,!1)==f.field(g,!1):!0)||(l?Ha(d=i(f),O,s):s(d=i(f),O)))return f.values[o]=O,0}else d=i(f);return f.values[o]=d,1}}}};function Ha(n,e,t){if(n.length!=e.length)return!1;for(let i=0;in[a.id]),s=t.map(a=>a.type),r=i.filter(a=>!(a&1)),o=n[e.id]>>1;function l(a){let h=[];for(let c=0;ci===s),e);return e.provide&&(t.provides=e.provide(t)),t}create(e){let t=e.facet(Dn).find(i=>i.field==this);return(t?.create||this.createF)(e)}slot(e){let t=e[this.id]>>1;return{create:i=>(i.values[t]=this.create(i),1),update:(i,s)=>{let r=i.values[t],o=this.updateF(r,s);return this.compareF(r,o)?0:(i.values[t]=o,1)},reconfigure:(i,s)=>{let r=i.facet(Dn),o=s.facet(Dn),l;return(l=r.find(a=>a.field==this))&&l!=o.find(a=>a.field==this)?(i.values[t]=l.create(i),1):s.config.address[this.id]!=null?(i.values[t]=s.field(this),0):(i.values[t]=this.create(i),1)}}}init(e){return[this,Dn.of({field:this,create:e})]}get extension(){return this}},Et={lowest:4,low:3,default:2,high:1,highest:0};function Bi(n){return e=>new Yn(e,n)}var Se={highest:Bi(Et.highest),high:Bi(Et.high),default:Bi(Et.default),low:Bi(Et.low),lowest:Bi(Et.lowest)},Yn=class{constructor(e,t){this.inner=e,this.prec=t}},fi=class n{of(e){return new _i(this,e)}reconfigure(e){return n.reconfigure.of({compartment:this,extension:e})}get(e){return e.config.compartments.get(this)}},_i=class{constructor(e,t){this.compartment=e,this.inner=t}},qn=class n{constructor(e,t,i,s,r,o){for(this.base=e,this.compartments=t,this.dynamicSlots=i,this.address=s,this.staticValues=r,this.facets=o,this.statusTemplate=[];this.statusTemplate.length>1]}static resolve(e,t,i){let s=[],r=Object.create(null),o=new Map;for(let u of sp(e,t,o))u instanceof K?s.push(u):(r[u.facet.id]||(r[u.facet.id]=[])).push(u);let l=Object.create(null),a=[],h=[];for(let u of s)l[u.id]=h.length<<1,h.push(d=>u.slot(d));let c=i?.config.facets;for(let u in r){let d=r[u],p=d[0].facet,O=c&&c[u]||[];if(d.every(g=>g.type==0))if(l[p.id]=a.length<<1|1,Yr(O,d))a.push(i.facet(p));else{let g=p.combine(d.map(y=>y.value));a.push(i&&p.compare(g,i.facet(p))?i.facet(p):g)}else{for(let g of d)g.type==0?(l[g.id]=a.length<<1|1,a.push(g.value)):(l[g.id]=h.length<<1,h.push(y=>g.dynamicSlot(y)));l[p.id]=h.length<<1,h.push(g=>np(g,p,d))}}let f=h.map(u=>u(l));return new n(e,o,f,l,a,r)}};function sp(n,e,t){let i=[[],[],[],[],[]],s=new Map;function r(o,l){let a=s.get(o);if(a!=null){if(a<=l)return;let h=i[a].indexOf(o);h>-1&&i[a].splice(h,1),o instanceof _i&&t.delete(o.compartment)}if(s.set(o,l),Array.isArray(o))for(let h of o)r(h,l);else if(o instanceof _i){if(t.has(o.compartment))throw new RangeError("Duplicate use of compartment in extensions");let h=e.get(o.compartment)||o.inner;t.set(o.compartment,h),r(h,l)}else if(o instanceof Yn)r(o.inner,o.prec);else if(o instanceof K)i[l].push(o),o.provides&&r(o.provides,l);else if(o instanceof ai)i[l].push(o),o.facet.extensions&&r(o.facet.extensions,Et.default);else{let h=o.extension;if(!h)throw new Error(`Unrecognized extension value in extension set (${o}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);r(h,l)}}return r(n,Et.default),i.reduce((o,l)=>o.concat(l))}function Wi(n,e){if(e&1)return 2;let t=e>>1,i=n.status[t];if(i==4)throw new Error("Cyclic dependency between fields and/or facets");if(i&2)return i;n.status[t]=4;let s=n.computeSlot(n,n.config.dynamicSlots[t]);return n.status[t]=2|s}function Vn(n,e){return e&1?n.config.staticValues[e>>1]:n.values[e>>1]}var nh=$.define(),Xr=$.define({combine:n=>n.some(e=>e),static:!0}),sh=$.define({combine:n=>n.length?n[0]:void 0,static:!0}),rh=$.define(),oh=$.define(),lh=$.define(),ah=$.define({combine:n=>n.length?n[0]:!1}),xe=class{constructor(e,t){this.type=e,this.value=t}static define(){return new Lr}},Lr=class{of(e){return new xe(this,e)}},Er=class{constructor(e){this.map=e}of(e){return new A(this,e)}},A=class n{constructor(e,t){this.type=e,this.value=t}map(e){let t=this.type.map(this.value,e);return t===void 0?void 0:t==this.value?this:new n(this.type,t)}is(e){return this.type==e}static define(e={}){return new Er(e.map||(t=>t))}static mapEffects(e,t){if(!e.length)return e;let i=[];for(let s of e){let r=s.map(t);r&&i.push(r)}return i}};A.reconfigure=A.define();A.appendConfig=A.define();var ie=class n{constructor(e,t,i,s,r,o){this.startState=e,this.changes=t,this.selection=i,this.effects=s,this.annotations=r,this.scrollIntoView=o,this._doc=null,this._state=null,i&&ih(i,t.newLength),r.some(l=>l.type==n.time)||(this.annotations=r.concat(n.time.of(Date.now())))}static create(e,t,i,s,r,o){return new n(e,t,i,s,r,o)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(e){for(let t of this.annotations)if(t.type==e)return t.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(e){let t=this.annotation(n.userEvent);return!!(t&&(t==e||t.length>e.length&&t.slice(0,e.length)==e&&t[e.length]=="."))}};ie.time=xe.define();ie.userEvent=xe.define();ie.addToHistory=xe.define();ie.remote=xe.define();function rp(n,e){let t=[];for(let i=0,s=0;;){let r,o;if(i=n[i]))r=n[i++],o=n[i++];else if(s=0;s--){let r=i[s](n);r instanceof ie?n=r:Array.isArray(r)&&r.length==1&&r[0]instanceof ie?n=r[0]:n=ch(e,hi(r),!1)}return n}function lp(n){let e=n.startState,t=e.facet(lh),i=n;for(let s=t.length-1;s>=0;s--){let r=t[s](n);r&&Object.keys(r).length&&(i=hh(i,Dr(e,r,n.changes.newLength),!0))}return i==n?n:ie.create(e,n.changes,n.selection,i.effects,i.annotations,i.scrollIntoView)}var ap=[];function hi(n){return n==null?ap:Array.isArray(n)?n:[n]}var q=(function(n){return n[n.Word=0]="Word",n[n.Space=1]="Space",n[n.Other=2]="Other",n})(q||(q={})),hp=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,Br;try{Br=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch{}function cp(n){if(Br)return Br.test(n);for(let e=0;e"\x80"&&(t.toUpperCase()!=t.toLowerCase()||hp.test(t)))return!0}return!1}function fp(n){return e=>{if(!/\S/.test(e))return q.Space;if(cp(e))return q.Word;for(let t=0;t-1)return q.Word;return q.Other}}var Y=class n{constructor(e,t,i,s,r,o){this.config=e,this.doc=t,this.selection=i,this.values=s,this.status=e.statusTemplate.slice(),this.computeSlot=r,o&&(o._state=this);for(let l=0;ls.set(h,a)),t=null),s.set(l.value.compartment,l.value.extension)):l.is(A.reconfigure)?(t=null,i=l.value):l.is(A.appendConfig)&&(t=null,i=hi(i).concat(l.value));let r;t?r=e.startState.values.slice():(t=qn.resolve(i,s,this),r=new n(t,this.doc,this.selection,t.dynamicSlots.map(()=>null),(a,h)=>h.reconfigure(a,this),null).values);let o=e.startState.facet(Xr)?e.newSelection:e.newSelection.asSingle();new n(t,e.newDoc,o,r,(l,a)=>a.update(l,e),e)}replaceSelection(e){return typeof e=="string"&&(e=this.toText(e)),this.changeByRange(t=>({changes:{from:t.from,to:t.to,insert:e},range:b.cursor(t.from+e.length)}))}changeByRange(e){let t=this.selection,i=e(t.ranges[0]),s=this.changes(i.changes),r=[i.range],o=hi(i.effects);for(let l=1;lo.spec.fromJSON(l,a)))}}return n.create({doc:e.doc,selection:b.fromJSON(e.selection),extensions:t.extensions?s.concat([t.extensions]):s})}static create(e={}){let t=qn.resolve(e.extensions||[],new Map),i=e.doc instanceof E?e.doc:E.of((e.doc||"").split(t.staticFacet(n.lineSeparator)||Zr)),s=e.selection?e.selection instanceof b?e.selection:b.single(e.selection.anchor,e.selection.head):b.single(0);return ih(s,i.length),t.staticFacet(Xr)||(s=s.asSingle()),new n(t,i,s,t.dynamicSlots.map(()=>null),(r,o)=>o.create(r),null)}get tabSize(){return this.facet(n.tabSize)}get lineBreak(){return this.facet(n.lineSeparator)||` +`}get readOnly(){return this.facet(ah)}phrase(e,...t){for(let i of this.facet(n.phrases))if(Object.prototype.hasOwnProperty.call(i,e)){e=i[e];break}return t.length&&(e=e.replace(/\$(\$|\d*)/g,(i,s)=>{if(s=="$")return"$";let r=+(s||1);return!r||r>t.length?i:t[r-1]})),e}languageDataAt(e,t,i=-1){let s=[];for(let r of this.facet(nh))for(let o of r(this,t,i))Object.prototype.hasOwnProperty.call(o,e)&&s.push(o[e]);return s}charCategorizer(e){let t=this.languageDataAt("wordChars",e);return fp(t.length?t[0]:"")}wordAt(e){let{text:t,from:i,length:s}=this.doc.lineAt(e),r=this.charCategorizer(e),o=e-i,l=e-i;for(;o>0;){let a=te(t,o,!1);if(r(t.slice(a,o))!=q.Word)break;o=a}for(;ln.length?n[0]:4});Y.lineSeparator=sh;Y.readOnly=ah;Y.phrases=$.define({compare(n,e){let t=Object.keys(n),i=Object.keys(e);return t.length==i.length&&t.every(s=>n[s]==e[s])}});Y.languageData=nh;Y.changeFilter=rh;Y.transactionFilter=oh;Y.transactionExtender=lh;fi.reconfigure=A.define();function ue(n,e,t={}){let i={};for(let s of n)for(let r of Object.keys(s)){let o=s[r],l=i[r];if(l===void 0)i[r]=o;else if(!(l===o||o===void 0))if(Object.hasOwnProperty.call(t,r))i[r]=t[r](l,o);else throw new Error("Config merge conflict for field "+r)}for(let s in e)i[s]===void 0&&(i[s]=e[s]);return i}var Be=class{eq(e){return this==e}range(e,t=e){return zi.create(e,t,this)}};Be.prototype.startSide=Be.prototype.endSide=0;Be.prototype.point=!1;Be.prototype.mapMode=se.TrackDel;function qr(n,e){return n==e||n.constructor==e.constructor&&n.eq(e)}var zi=class n{constructor(e,t,i){this.from=e,this.to=t,this.value=i}static create(e,t,i){return new n(e,t,i)}};function Wr(n,e){return n.from-e.from||n.value.startSide-e.value.startSide}var _r=class n{constructor(e,t,i,s){this.from=e,this.to=t,this.value=i,this.maxPoint=s}get length(){return this.to[this.to.length-1]}findIndex(e,t,i,s=0){let r=i?this.to:this.from;for(let o=s,l=r.length;;){if(o==l)return o;let a=o+l>>1,h=r[a]-e||(i?this.value[a].endSide:this.value[a].startSide)-t;if(a==o)return h>=0?o:l;h>=0?l=a:o=a+1}}between(e,t,i,s){for(let r=this.findIndex(t,-1e9,!0),o=this.findIndex(i,1e9,!1,r);rd||u==d&&h.startSide>0&&h.endSide<=0)continue;(d-u||h.endSide-h.startSide)<0||(o<0&&(o=u),h.point&&(l=Math.max(l,d-u)),i.push(h),s.push(u-o),r.push(d-o))}return{mapped:i.length?new n(s,r,i,l):null,pos:o}}},B=class n{constructor(e,t,i,s){this.chunkPos=e,this.chunk=t,this.nextLayer=i,this.maxPoint=s}static create(e,t,i,s){return new n(e,t,i,s)}get length(){let e=this.chunk.length-1;return e<0?0:Math.max(this.chunkEnd(e),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let e=this.nextLayer.size;for(let t of this.chunk)e+=t.value.length;return e}chunkEnd(e){return this.chunkPos[e]+this.chunk[e].length}update(e){let{add:t=[],sort:i=!1,filterFrom:s=0,filterTo:r=this.length}=e,o=e.filter;if(t.length==0&&!o)return this;if(i&&(t=t.slice().sort(Wr)),this.isEmpty)return t.length?n.of(t):this;let l=new jn(this,null,-1).goto(0),a=0,h=[],c=new Pe;for(;l.value||a=0){let f=t[a++];c.addInner(f.from,f.to,f.value)||h.push(f)}else l.rangeIndex==1&&l.chunkIndexthis.chunkEnd(l.chunkIndex)||rl.to||r=r&&e<=r+o.length&&o.between(r,e-r,t-r,i)===!1)return}this.nextLayer.between(e,t,i)}}iter(e=0){return Ii.from([this]).goto(e)}get isEmpty(){return this.nextLayer==this}static iter(e,t=0){return Ii.from(e).goto(t)}static compare(e,t,i,s,r=-1){let o=e.filter(f=>f.maxPoint>0||!f.isEmpty&&f.maxPoint>=r),l=t.filter(f=>f.maxPoint>0||!f.isEmpty&&f.maxPoint>=r),a=Ka(o,l,i),h=new Dt(o,a,r),c=new Dt(l,a,r);i.iterGaps((f,u,d)=>Ja(h,f,c,u,d,s)),i.empty&&i.length==0&&Ja(h,0,c,0,0,s)}static eq(e,t,i=0,s){s==null&&(s=999999999);let r=e.filter(c=>!c.isEmpty&&t.indexOf(c)<0),o=t.filter(c=>!c.isEmpty&&e.indexOf(c)<0);if(r.length!=o.length)return!1;if(!r.length)return!0;let l=Ka(r,o),a=new Dt(r,l,0).goto(i),h=new Dt(o,l,0).goto(i);for(;;){if(a.to!=h.to||!zr(a.active,h.active)||a.point&&(!h.point||!qr(a.point,h.point)))return!1;if(a.to>s)return!0;a.next(),h.next()}}static spans(e,t,i,s,r=-1){let o=new Dt(e,null,r).goto(t),l=t,a=o.openStart;for(;;){let h=Math.min(o.to,i);if(o.point){let c=o.activeForPoint(o.to),f=o.pointFroml&&(s.span(l,h,o.active,a),a=o.openEnd(h));if(o.to>i)return a+(o.point&&o.to>i?1:0);l=o.to,o.next()}}static of(e,t=!1){let i=new Pe;for(let s of e instanceof zi?[e]:t?up(e):e)i.add(s.from,s.to,s.value);return i.finish()}static join(e){if(!e.length)return n.empty;let t=e[e.length-1];for(let i=e.length-2;i>=0;i--)for(let s=e[i];s!=n.empty;s=s.nextLayer)t=new n(s.chunkPos,s.chunk,t,Math.max(s.maxPoint,t.maxPoint));return t}};B.empty=new B([],[],null,-1);function up(n){if(n.length>1)for(let e=n[0],t=1;t0)return n.slice().sort(Wr);e=i}return n}B.empty.nextLayer=B.empty;var Pe=class n{finishChunk(e){this.chunks.push(new _r(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,e&&(this.from=[],this.to=[],this.value=[])}constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}add(e,t,i){this.addInner(e,t,i)||(this.nextLayer||(this.nextLayer=new n)).add(e,t,i)}addInner(e,t,i){let s=e-this.lastTo||i.startSide-this.last.endSide;if(s<=0&&(e-this.lastFrom||i.startSide-this.last.startSide)<0)throw new Error("Ranges must be added sorted by `from` position and `startSide`");return s<0?!1:(this.from.length==250&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=e),this.from.push(e-this.chunkStart),this.to.push(t-this.chunkStart),this.last=i,this.lastFrom=e,this.lastTo=t,this.value.push(i),i.point&&(this.maxPoint=Math.max(this.maxPoint,t-e)),!0)}addChunk(e,t){if((e-this.lastTo||t.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,t.maxPoint),this.chunks.push(t),this.chunkPos.push(e);let i=t.value.length-1;return this.last=t.value[i],this.lastFrom=t.from[i]+e,this.lastTo=t.to[i]+e,!0}finish(){return this.finishInner(B.empty)}finishInner(e){if(this.from.length&&this.finishChunk(!1),this.chunks.length==0)return e;let t=B.create(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(e):e,this.setMaxPoint);return this.from=null,t}};function Ka(n,e,t){let i=new Map;for(let r of n)for(let o=0;o=this.minPoint)break}}setRangeIndex(e){if(e==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex=i&&s.push(new jn(o,t,i,r));return s.length==1?s[0]:new n(s)}get startSide(){return this.value?this.value.startSide:0}goto(e,t=-1e9){for(let i of this.heap)i.goto(e,t);for(let i=this.heap.length>>1;i>=0;i--)Tr(this.heap,i);return this.next(),this}forward(e,t){for(let i of this.heap)i.forward(e,t);for(let i=this.heap.length>>1;i>=0;i--)Tr(this.heap,i);(this.to-e||this.value.endSide-t)<0&&this.next()}next(){if(this.heap.length==0)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let e=this.heap[0];this.from=e.from,this.to=e.to,this.value=e.value,this.rank=e.rank,e.value&&e.next(),Tr(this.heap,0)}}};function Tr(n,e){for(let t=n[e];;){let i=(e<<1)+1;if(i>=n.length)break;let s=n[i];if(i+1=0&&(s=n[i+1],i++),t.compare(s)<0)break;n[i]=t,n[e]=s,e=i}}var Dt=class{constructor(e,t,i){this.minPoint=i,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=Ii.from(e,t,i)}goto(e,t=-1e9){return this.cursor.goto(e,t),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=e,this.endSide=t,this.openStart=-1,this.next(),this}forward(e,t){for(;this.minActive>-1&&(this.activeTo[this.minActive]-e||this.active[this.minActive].endSide-t)<0;)this.removeActive(this.minActive);this.cursor.forward(e,t)}removeActive(e){Bn(this.active,e),Bn(this.activeTo,e),Bn(this.activeRank,e),this.minActive=eh(this.active,this.activeTo)}addActive(e){let t=0,{value:i,to:s,rank:r}=this.cursor;for(;t0;)t++;Wn(this.active,t,i),Wn(this.activeTo,t,s),Wn(this.activeRank,t,r),e&&Wn(e,t,this.cursor.from),this.minActive=eh(this.active,this.activeTo)}next(){let e=this.to,t=this.point;this.point=null;let i=this.openStart<0?[]:null;for(;;){let s=this.minActive;if(s>-1&&(this.activeTo[s]-this.cursor.from||this.active[s].endSide-this.cursor.startSide)<0){if(this.activeTo[s]>e){this.to=this.activeTo[s],this.endSide=this.active[s].endSide;break}this.removeActive(s),i&&Bn(i,s)}else if(this.cursor.value)if(this.cursor.from>e){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}else{let r=this.cursor.value;if(!r.point)this.addActive(i),this.cursor.next();else if(t&&this.cursor.to==this.to&&this.cursor.from=0&&i[s]=0&&!(this.activeRank[i]e||this.activeTo[i]==e&&this.active[i].endSide>=this.point.endSide)&&t.push(this.active[i]);return t.reverse()}openEnd(e){let t=0;for(let i=this.activeTo.length-1;i>=0&&this.activeTo[i]>e;i--)t++;return t}};function Ja(n,e,t,i,s,r){n.goto(e),t.goto(i);let o=i+s,l=i,a=i-e,h=!!r.boundChange;for(let c=!1;;){let f=n.to+a-t.to,u=f||n.endSide-t.endSide,d=u<0?n.to+a:t.to,p=Math.min(d,o);if(n.point||t.point?(n.point&&t.point&&qr(n.point,t.point)&&zr(n.activeForPoint(n.to),t.activeForPoint(t.to))||r.comparePoint(l,p,n.point,t.point),c=!1):(c&&r.boundChange(l),p>l&&!zr(n.active,t.active)&&r.compareRange(l,p,n.active,t.active),h&&po)break;l=d,u<=0&&n.next(),u>=0&&t.next()}}function zr(n,e){if(n.length!=e.length)return!1;for(let t=0;t=e;i--)n[i+1]=n[i];n[e]=t}function eh(n,e){let t=-1,i=1e9;for(let s=0;s=e)return s;if(s==n.length)break;r+=n.charCodeAt(s)==9?t-r%t:1,s=te(n,s)}return i===!0?-1:n.length}var fh=typeof Symbol>"u"?"__\u037C":Symbol.for("\u037C"),Vr=typeof Symbol>"u"?"__styleSet"+Math.floor(Math.random()*1e8):Symbol("styleSet"),uh=typeof globalThis<"u"?globalThis:typeof window<"u"?window:{},We=class{constructor(e,t){this.rules=[];let{finish:i}=t||{};function s(o){return/^@/.test(o)?[o]:o.split(/,\s*/)}function r(o,l,a,h){let c=[],f=/^@(\w+)\b/.exec(o[0]),u=f&&f[1]=="keyframes";if(f&&l==null)return a.push(o[0]+";");for(let d in l){let p=l[d];if(/&/.test(d))r(d.split(/,\s*/).map(O=>o.map(g=>O.replace(/&/,g))).reduce((O,g)=>O.concat(g)),p,a);else if(p&&typeof p=="object"){if(!f)throw new RangeError("The value of a property ("+d+") should be a primitive value.");r(s(d),p,c,u)}else p!=null&&c.push(d.replace(/_.*/,"").replace(/[A-Z]/g,O=>"-"+O.toLowerCase())+": "+p+";")}(c.length||u)&&a.push((i&&!f&&!h?o.map(i):o).join(", ")+" {"+c.join(" ")+"}")}for(let o in e)r(s(o),e[o],this.rules)}getRules(){return this.rules.join(` +`)}static newName(){let e=uh[fh]||1;return uh[fh]=e+1,"\u037C"+e.toString(36)}static mount(e,t,i){let s=e[Vr],r=i&&i.nonce;s?r&&s.setNonce(r):s=new jr(e,r),s.mount(Array.isArray(t)?t:[t],e)}},dh=new Map,jr=class{constructor(e,t){let i=e.ownerDocument||e,s=i.defaultView;if(!e.head&&e.adoptedStyleSheets&&s.CSSStyleSheet){let r=dh.get(i);if(r)return e[Vr]=r;this.sheet=new s.CSSStyleSheet,dh.set(i,this)}else this.styleTag=i.createElement("style"),t&&this.styleTag.setAttribute("nonce",t);this.modules=[],e[Vr]=this}mount(e,t){let i=this.sheet,s=0,r=0;for(let o=0;o-1&&(this.modules.splice(a,1),r--,a=-1),a==-1){if(this.modules.splice(r++,0,l),i)for(let h=0;h",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"'},dp=typeof navigator<"u"&&/Mac/.test(navigator.platform),pp=typeof navigator<"u"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent);for(ne=0;ne<10;ne++)ft[48+ne]=ft[96+ne]=String(ne);var ne;for(ne=1;ne<=24;ne++)ft[ne+111]="F"+ne;var ne;for(ne=65;ne<=90;ne++)ft[ne]=String.fromCharCode(ne+32),ui[ne]=String.fromCharCode(ne);var ne;for(Gn in ft)ui.hasOwnProperty(Gn)||(ui[Gn]=ft[Gn]);var Gn;function ph(n){var e=dp&&n.metaKey&&n.shiftKey&&!n.ctrlKey&&!n.altKey||pp&&n.shiftKey&&n.key&&n.key.length==1||n.key=="Unidentified",t=!e&&n.key||(n.shiftKey?ui:ft)[n.keyCode]||n.key||"Unidentified";return t=="Esc"&&(t="Escape"),t=="Del"&&(t="Delete"),t=="Left"&&(t="ArrowLeft"),t=="Up"&&(t="ArrowUp"),t=="Right"&&(t="ArrowRight"),t=="Down"&&(t="ArrowDown"),t}function W(){var n=arguments[0];typeof n=="string"&&(n=document.createElement(n));var e=1,t=arguments[1];if(t&&typeof t=="object"&&t.nodeType==null&&!Array.isArray(t)){for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)){var s=t[i];typeof s=="string"?n.setAttribute(i,s):s!=null&&(n[i]=s)}e++}for(;e2),T={mac:yh||/Mac/.test(ge.platform),windows:/Win/.test(ge.platform),linux:/Linux|X11/.test(ge.platform),ie:Ps,ie_version:ec?io.documentMode||6:so?+so[1]:no?+no[1]:0,gecko:mh,gecko_version:mh?+(/Firefox\/(\d+)/.exec(ge.userAgent)||[0,0])[1]:0,chrome:!!Nr,chrome_version:Nr?+Nr[1]:0,ios:yh,android:/Android\b/.test(ge.userAgent),webkit:gh,webkit_version:gh?+(/\bAppleWebKit\/(\d+)/.exec(ge.userAgent)||[0,0])[1]:0,safari:ro,safari_version:ro?+(/\bVersion\/(\d+(\.\d+)?)/.exec(ge.userAgent)||[0,0])[1]:0,tabSize:io.documentElement.style.tabSize!=null?"tab-size":"-moz-tab-size"};function Ko(n,e){for(let t in n)t=="class"&&e.class?e.class+=" "+n.class:t=="style"&&e.style?e.style+=";"+n.style:e[t]=n[t];return e}var hs=Object.create(null);function Jo(n,e,t){if(n==e)return!0;n||(n=hs),e||(e=hs);let i=Object.keys(n),s=Object.keys(e);if(i.length-(t&&i.indexOf(t)>-1?1:0)!=s.length-(t&&s.indexOf(t)>-1?1:0))return!1;for(let r of i)if(r!=t&&(s.indexOf(r)==-1||n[r]!==e[r]))return!1;return!0}function Op(n,e){for(let t=n.attributes.length-1;t>=0;t--){let i=n.attributes[t].name;e[i]==null&&n.removeAttribute(i)}for(let t in e){let i=e[t];t=="style"?n.style.cssText=i:n.getAttribute(t)!=i&&n.setAttribute(t,i)}}function bh(n,e,t){let i=!1;if(e)for(let s in e)t&&s in t||(i=!0,s=="style"?n.style.cssText="":n.removeAttribute(s));if(t)for(let s in t)e&&e[s]==t[s]||(i=!0,s=="style"?n.style.cssText=t[s]:n.setAttribute(s,t[s]));return i}function mp(n){let e=Object.create(null);for(let t=0;t0?3e8:-4e8:t>0?1e8:-1e8,new Yt(e,t,t,i,e.widget||null,!1)}static replace(e){let t=!!e.block,i,s;if(e.isBlockGap)i=-5e8,s=4e8;else{let{start:r,end:o}=tc(e,t);i=(r?t?-3e8:-1:5e8)-1,s=(o?t?2e8:1:-6e8)+1}return new Yt(e,i,s,t,e.widget||null,!0)}static line(e){return new sn(e)}static set(e,t=!1){return B.of(e,t)}hasHeight(){return this.widget?this.widget.estimatedHeight>-1:!1}};Z.none=B.empty;var nn=class n extends Z{constructor(e){let{start:t,end:i}=tc(e);super(t?-1:5e8,i?1:-6e8,null,e),this.tagName=e.tagName||"span",this.attrs=e.class&&e.attributes?Ko(e.attributes,{class:e.class}):e.class?{class:e.class}:e.attributes||hs}eq(e){return this==e||e instanceof n&&this.tagName==e.tagName&&Jo(this.attrs,e.attrs)}range(e,t=e){if(e>=t)throw new RangeError("Mark decorations may not be empty");return super.range(e,t)}};nn.prototype.point=!1;var sn=class n extends Z{constructor(e){super(-2e8,-2e8,null,e)}eq(e){return e instanceof n&&this.spec.class==e.spec.class&&Jo(this.spec.attributes,e.spec.attributes)}range(e,t=e){if(t!=e)throw new RangeError("Line decoration ranges must be zero-length");return super.range(e,t)}};sn.prototype.mapMode=se.TrackBefore;sn.prototype.point=!0;var Yt=class n extends Z{constructor(e,t,i,s,r,o){super(t,i,r,e),this.block=s,this.isReplace=o,this.mapMode=s?t<=0?se.TrackBefore:se.TrackAfter:se.TrackDel}get type(){return this.startSide!=this.endSide?he.WidgetRange:this.startSide<=0?he.WidgetBefore:he.WidgetAfter}get heightRelevant(){return this.block||!!this.widget&&(this.widget.estimatedHeight>=5||this.widget.lineBreaks>0)}eq(e){return e instanceof n&&gp(this.widget,e.widget)&&this.block==e.block&&this.startSide==e.startSide&&this.endSide==e.endSide}range(e,t=e){if(this.isReplace&&(e>t||e==t&&this.startSide>0&&this.endSide<=0))throw new RangeError("Invalid range for replacement decoration");if(!this.isReplace&&t!=e)throw new RangeError("Widget decorations can only have zero-length ranges");return super.range(e,t)}};Yt.prototype.point=!0;function tc(n,e=!1){let{inclusiveStart:t,inclusiveEnd:i}=n;return t==null&&(t=n.inclusive),i==null&&(i=n.inclusive),{start:t??e,end:i??e}}function gp(n,e){return n==e||!!(n&&e&&n.compare(e))}function yi(n,e,t,i=0){let s=t.length-1;s>=0&&t[s]+i>=n?t[s]=Math.max(t[s],e):t.push(n,e)}var cs=class n extends Be{constructor(e,t){super(),this.tagName=e,this.attributes=t}eq(e){return e==this||e instanceof n&&this.tagName==e.tagName&&Jo(this.attributes,e.attributes)}static create(e){return new n(e.tagName,e.attributes||hs)}static set(e,t=!1){return B.of(e,t)}};cs.prototype.startSide=cs.prototype.endSide=-1;function rn(n){let e;return n.nodeType==11?e=n.getSelection?n:n.ownerDocument:e=n,e.getSelection()}function oo(n,e){return e?n==e||n.contains(e.nodeType!=1?e.parentNode:e):!1}function Ni(n,e){if(!e.anchorNode)return!1;try{return oo(n,e.anchorNode)}catch{return!1}}function ss(n){return n.nodeType==3?on(n,0,n.nodeValue.length).getClientRects():n.nodeType==1?n.getClientRects():[]}function Gi(n,e,t,i){return t?xh(n,e,t,i,-1)||xh(n,e,t,i,1):!1}function wt(n){for(var e=0;;e++)if(n=n.previousSibling,!n)return e}function fs(n){return n.nodeType==1&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\d|SECTION|PRE)$/.test(n.nodeName)}function xh(n,e,t,i,s){for(;;){if(n==t&&e==i)return!0;if(e==(s<0?0:pt(n))){if(n.nodeName=="DIV")return!1;let r=n.parentNode;if(!r||r.nodeType!=1)return!1;e=wt(n)+(s<0?0:1),n=r}else if(n.nodeType==1){if(n=n.childNodes[e+(s<0?-1:0)],n.nodeType==1&&n.contentEditable=="false")return!1;e=s<0?pt(n):0}else return!1}}function pt(n){return n.nodeType==3?n.nodeValue.length:n.childNodes.length}function us(n,e){let t=e?n.left:n.right;return{left:t,right:t,top:n.top,bottom:n.bottom}}function yp(n){let e=n.visualViewport;return e?{left:0,right:e.width,top:0,bottom:e.height}:{left:0,right:n.innerWidth,top:0,bottom:n.innerHeight}}function ic(n,e){let t=e.width/n.offsetWidth,i=e.height/n.offsetHeight;return(t>.995&&t<1.005||!isFinite(t)||Math.abs(e.width-n.offsetWidth)<1)&&(t=1),(i>.995&&i<1.005||!isFinite(i)||Math.abs(e.height-n.offsetHeight)<1)&&(i=1),{scaleX:t,scaleY:i}}function bp(n,e,t,i,s,r,o,l){let a=n.ownerDocument,h=a.defaultView||window;for(let c=n,f=!1;c&&!f;)if(c.nodeType==1){let u,d=c==a.body,p=1,O=1;if(d)u=yp(h);else{if(/^(fixed|sticky)$/.test(getComputedStyle(c).position)&&(f=!0),c.scrollHeight<=c.clientHeight&&c.scrollWidth<=c.clientWidth){c=c.assignedSlot||c.parentNode;continue}let x=c.getBoundingClientRect();({scaleX:p,scaleY:O}=ic(c,x)),u={left:x.left,right:x.left+c.clientWidth*p,top:x.top,bottom:x.top+c.clientHeight*O}}let g=0,y=0;if(s=="nearest")e.top0&&e.bottom>u.bottom+y&&(y=e.bottom-u.bottom+o)):e.bottom>u.bottom-o&&(y=e.bottom-u.bottom+o,t<0&&e.top-y0&&e.right>u.right+g&&(g=e.right-u.right+r)):e.right>u.right-r&&(g=e.right-u.right+r,t<0&&e.leftu.bottom||e.leftu.right)&&(e={left:Math.max(e.left,u.left),right:Math.min(e.right,u.right),top:Math.max(e.top,u.top),bottom:Math.min(e.bottom,u.bottom)}),c=c.assignedSlot||c.parentNode}else if(c.nodeType==11)c=c.host;else break}function nc(n,e=!0){let t=n.ownerDocument,i=null,s=null;for(let r=n.parentNode;r&&!(r==t.body||(!e||i)&&s);)if(r.nodeType==1)!s&&r.scrollHeight>r.clientHeight&&(s=r),e&&!i&&r.scrollWidth>r.clientWidth&&(i=r),r=r.assignedSlot||r.parentNode;else if(r.nodeType==11)r=r.host;else break;return{x:i,y:s}}var lo=class{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset}setRange(e){let{anchorNode:t,focusNode:i}=e;this.set(t,Math.min(e.anchorOffset,t?pt(t):0),i,Math.min(e.focusOffset,i?pt(i):0))}set(e,t,i,s){this.anchorNode=e,this.anchorOffset=t,this.focusNode=i,this.focusOffset=s}},_t=null;T.safari&&T.safari_version>=26&&(_t=!1);function sc(n){if(n.setActive)return n.setActive();if(_t)return n.focus(_t);let e=[];for(let t=n;t&&(e.push(t,t.scrollTop,t.scrollLeft),t!=t.ownerDocument);t=t.parentNode);if(n.focus(_t==null?{get preventScroll(){return _t={preventScroll:!0},!0}}:void 0),!_t){_t=!1;for(let t=0;tMath.max(0,n.document.documentElement.scrollHeight-n.innerHeight-4):n.scrollTop>Math.max(1,n.scrollHeight-n.clientHeight-4)}function oc(n,e){for(let t=n,i=e;;){if(t.nodeType==3&&i>0)return{node:t,offset:i};if(t.nodeType==1&&i>0){if(t.contentEditable=="false")return null;t=t.childNodes[i-1],i=pt(t)}else if(t.parentNode&&!fs(t))i=wt(t),t=t.parentNode;else return null}}function lc(n,e){for(let t=n,i=e;;){if(t.nodeType==3&&i=t){if(l.level==i)return o;(r<0||(s!=0?s<0?l.fromt:e[r].level>l.level))&&(r=o)}}if(r<0)throw new RangeError("Index out of range");return r}};function cc(n,e){if(n.length!=e.length)return!1;for(let t=0;t=0;O-=3)if(nt[O+1]==-d){let g=nt[O+2],y=g&2?s:g&4?g&1?r:s:0;y&&(j[f]=j[nt[O]]=y),l=O;break}}else{if(nt.length==189)break;nt[l++]=f,nt[l++]=u,nt[l++]=a}else if((p=j[f])==2||p==1){let O=p==s;a=O?0:1;for(let g=l-3;g>=0;g-=3){let y=nt[g+2];if(y&2)break;if(O)nt[g+2]|=2;else{if(y&4)break;nt[g+2]|=4}}}}}function Pp(n,e,t,i){for(let s=0,r=i;s<=t.length;s++){let o=s?t[s-1].to:n,l=sa;)p==g&&(p=t[--O].from,g=O?t[O-1].to:n),j[--p]=d;a=c}else r=h,a++}}}function ho(n,e,t,i,s,r,o){let l=i%2?2:1;if(i%2==s%2)for(let a=e,h=0;aa&&o.push(new Ie(a,O.from,d));let g=O.direction==qt!=!(d%2);co(n,g?i+1:i,s,O.inner,O.from,O.to,o),a=O.to}p=O.to}else{if(p==t||(c?j[p]!=l:j[p]==l))break;p++}u?ho(n,a,p,i+1,s,u,o):ae;){let c=!0,f=!1;if(!h||a>r[h-1].to){let O=j[a-1];O!=l&&(c=!1,f=O==16)}let u=!c&&l==1?[]:null,d=c?i:i+1,p=a;e:for(;;)if(h&&p==r[h-1].to){if(f)break e;let O=r[--h];if(!c)for(let g=O.from,y=h;;){if(g==e)break e;if(y&&r[y-1].to==g)g=r[--y].from;else{if(j[g-1]==l)break e;break}}if(u)u.push(O);else{O.toj.length;)j[j.length]=256;let i=[],s=e==qt?0:1;return co(n,s,s,t,0,n.length,i),i}function fc(n){return[new Ie(0,n,0)]}var uc="";function Cp(n,e,t,i,s){var r;let o=i.head-n.from,l=Ie.find(e,o,(r=i.bidiLevel)!==null&&r!==void 0?r:-1,i.assoc),a=e[l],h=a.side(s,t);if(o==h){let u=l+=s?1:-1;if(u<0||u>=e.length)return null;a=e[l=u],o=a.side(!s,t),h=a.side(s,t)}let c=te(n.text,o,a.forward(s,t));(ca.to)&&(c=h),uc=n.text.slice(Math.min(o,c),Math.max(o,c));let f=l==(s?e.length-1:0)?null:e[l+(s?1:-1)];return f&&c==h&&f.level+(s?0:1)n.some(e=>e)}),xc=$.define({combine:n=>n.some(e=>e)}),Sc=$.define(),Ui=class n{constructor(e,t,i,s,r,o=!1){this.range=e,this.y=t,this.x=i,this.yMargin=s,this.xMargin=r,this.isSnapshot=o}map(e){return e.empty?this:new n(this.range.map(e),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}clip(e){return this.range.to<=e.doc.length?this:new n(b.cursor(e.doc.length),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}},Un=A.define({map:(n,e)=>n.map(e)}),wc=A.define();function ae(n,e,t){let i=n.facet(mc);i.length?i[0](e):window.onerror&&window.onerror(String(e),t,void 0,void 0,e)||(t?console.error(t+":",e):console.error(e))}var ut=$.define({combine:n=>n.length?n[0]:!0}),Ap=0,pi=$.define({combine(n){return n.filter((e,t)=>{for(let i=0;i{let a=[];return o&&a.push(Ts.of(h=>{let c=h.plugin(l);return c?o(c):Z.none})),r&&a.push(r(l)),a})}static fromClass(e,t){return n.define((i,s)=>new e(i,s),t)}},Fi=class{constructor(e){this.spec=e,this.mustUpdate=null,this.value=null}get plugin(){return this.spec&&this.spec.plugin}update(e){if(this.value){if(this.mustUpdate){let t=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(t)}catch(i){if(ae(t.state,i,"CodeMirror plugin crashed"),this.value.destroy)try{this.value.destroy()}catch{}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.plugin.create(e,this.spec.arg)}catch(t){ae(e.state,t,"CodeMirror plugin crashed"),this.deactivate()}return this}destroy(e){var t;if(!((t=this.value)===null||t===void 0)&&t.destroy)try{this.value.destroy()}catch(i){ae(e.state,i,"CodeMirror plugin crashed")}}deactivate(){this.spec=this.value=null}},kc=$.define(),nl=$.define(),Ts=$.define(),Qc=$.define(),sl=$.define(),ln=$.define(),vc=$.define();function wh(n,e){let t=n.state.facet(vc);if(!t.length)return t;let i=t.map(r=>r instanceof Function?r(n):r),s=[];return B.spans(i,e.from,e.to,{point(){},span(r,o,l,a){let h=r-e.from,c=o-e.from,f=s;for(let u=l.length-1;u>=0;u--,a--){let d=l[u].spec.bidiIsolate,p;if(d==null&&(d=Zp(e.text,h,c)),a>0&&f.length&&(p=f[f.length-1]).to==h&&p.direction==d)p.to=c,f=p.inner;else{let O={from:h,to:c,direction:d,inner:[]};f.push(O),f=O.inner}}}}),s}var $c=$.define();function rl(n){let e=0,t=0,i=0,s=0;for(let r of n.state.facet($c)){let o=r(n);o&&(o.left!=null&&(e=Math.max(e,o.left)),o.right!=null&&(t=Math.max(t,o.right)),o.top!=null&&(i=Math.max(i,o.top)),o.bottom!=null&&(s=Math.max(s,o.bottom)))}return{left:e,right:t,top:i,bottom:s}}var qi=$.define(),Ne=class n{constructor(e,t,i,s){this.fromA=e,this.toA=t,this.fromB=i,this.toB=s}join(e){return new n(Math.min(this.fromA,e.fromA),Math.max(this.toA,e.toA),Math.min(this.fromB,e.fromB),Math.max(this.toB,e.toB))}addToSet(e){let t=e.length,i=this;for(;t>0;t--){let s=e[t-1];if(!(s.fromA>i.toA)){if(s.toAs.push(new Ne(r,o,l,a))),this.changedRanges=s}static create(e,t,i){return new n(e,t,i)}get viewportChanged(){return(this.flags&4)>0}get viewportMoved(){return(this.flags&8)>0}get heightChanged(){return(this.flags&2)>0}get geometryChanged(){return this.docChanged||(this.flags&18)>0}get focusChanged(){return(this.flags&1)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some(e=>e.selection)}get empty(){return this.flags==0&&this.transactions.length==0}},Mp=[],F=class{constructor(e,t,i=0){this.dom=e,this.length=t,this.flags=i,this.parent=null,e.cmTile=this}get breakAfter(){return this.flags&1}get children(){return Mp}isWidget(){return!1}get isHidden(){return!1}isComposite(){return!1}isLine(){return!1}isText(){return!1}isBlock(){return!1}get domAttrs(){return null}sync(e){if(this.flags|=2,this.flags&4){this.flags&=-5;let t=this.domAttrs;t&&Op(this.dom,t)}}toString(){return this.constructor.name+(this.children.length?`(${this.children})`:"")+(this.breakAfter?"#":"")}destroy(){this.parent=null}setDOM(e){this.dom=e,e.cmTile=this}get posAtStart(){return this.parent?this.parent.posBefore(this):0}get posAtEnd(){return this.posAtStart+this.length}posBefore(e,t=this.posAtStart){let i=t;for(let s of this.children){if(s==e)return i;i+=s.length+s.breakAfter}throw new RangeError("Invalid child in posBefore")}posAfter(e){return this.posBefore(e)+e.length}covers(e){return!0}coordsIn(e,t){return null}domPosFor(e,t){let i=wt(this.dom),s=this.length?e>0:t>0;return new st(this.parent.dom,i+(s?1:0),e==0||e==this.length)}markDirty(e){this.flags&=-3,e&&(this.flags|=4),this.parent&&this.parent.flags&2&&this.parent.markDirty(!1)}get overrideDOMText(){return null}get root(){for(let e=this;e;e=e.parent)if(e instanceof Si)return e;return null}static get(e){return e.cmTile}},xi=class extends F{constructor(e){super(e,0),this._children=[]}isComposite(){return!0}get children(){return this._children}get lastChild(){return this.children.length?this.children[this.children.length-1]:null}append(e){this.children.push(e),e.parent=this}sync(e){if(this.flags&2)return;super.sync(e);let t=this.dom,i=null,s,r=e?.node==t?e:null,o=0;for(let l of this.children){if(l.sync(e),o+=l.length+l.breakAfter,s=i?i.nextSibling:t.firstChild,r&&s!=l.dom&&(r.written=!0),l.dom.parentNode==t)for(;s&&s!=l.dom;)s=kh(s);else t.insertBefore(l.dom,s);i=l.dom}for(s=i?i.nextSibling:t.firstChild,r&&s&&(r.written=!0);s;)s=kh(s);this.length=o}};function kh(n){let e=n.nextSibling;return n.parentNode.removeChild(n),e}var Si=class extends xi{constructor(e,t){super(t),this.view=e}owns(e){for(;e;e=e.parent)if(e==this)return!0;return!1}isBlock(){return!0}nearest(e){for(;;){if(!e)return null;let t=F.get(e);if(t&&this.owns(t))return t;e=e.parentNode}}blockTiles(e){for(let t=[],i=this,s=0,r=0;;)if(s==i.children.length){if(!t.length)return;i=i.parent,i.breakAfter&&r++,s=t.pop()}else{let o=i.children[s++];if(o instanceof dt)t.push(s),i=o,s=0;else{let l=r+o.length,a=e(o,r);if(a!==void 0)return a;r=l+o.breakAfter}}}resolveBlock(e,t){let i,s=-1,r,o=-1;if(this.blockTiles((l,a)=>{let h=a+l.length;if(e>=a&&e<=h){if(l.isWidget()&&t>=-1&&t<=1){if(l.flags&32)return!0;l.flags&16&&(i=void 0)}(ae||e==a&&(t>1?l.length:l.covers(-1)))&&(!r||!l.isWidget()&&r.isWidget())&&(r=l,o=e-a)}}),!i&&!r)throw new Error("No tile at position "+e);return i&&t<0||!r?{tile:i,offset:s}:{tile:r,offset:o}}},dt=class n extends xi{constructor(e,t){super(e),this.wrapper=t}isBlock(){return!0}covers(e){return this.children.length?e<0?this.children[0].covers(-1):this.lastChild.covers(1):!1}get domAttrs(){return this.wrapper.attributes}static of(e,t){let i=new n(t||document.createElement(e.tagName),e);return t||(i.flags|=4),i}},wi=class n extends xi{constructor(e,t){super(e),this.attrs=t}isLine(){return!0}static start(e,t,i){let s=new n(t||document.createElement("div"),e);return(!t||!i)&&(s.flags|=4),s}get domAttrs(){return this.attrs}resolveInline(e,t,i){let s=null,r=-1,o=null,l=-1;function a(c,f){for(let u=0,d=0;u=f&&(p.isComposite()?a(p,f-d):(!o||o.isHidden&&(t>0||i&&Xp(o,p)))&&(O>f||p.flags&32)?(o=p,l=f-d):(di&&(e=i);let s=e,r=e,o=0;e==0&&t<0||e==i&&t>=0?T.chrome||T.gecko||(e?(s--,o=1):r=0)?0:l.length-1];return T.safari&&!o&&a.width==0&&(a=Array.prototype.find.call(l,h=>h.width)||a),o?us(a,o<0):a||null}static of(e,t){let i=new n(t||document.createTextNode(e),e);return t||(i.flags|=2),i}},Vt=class n extends F{constructor(e,t,i,s){super(e,t,s),this.widget=i}isWidget(){return!0}get isHidden(){return this.widget.isHidden}covers(e){return this.flags&48?!1:(this.flags&(e<0?64:128))>0}coordsIn(e,t){return this.coordsInWidget(e,t,!1)}coordsInWidget(e,t,i){let s=this.widget.coordsAt(this.dom,e,t);if(s)return s;if(i)return us(this.dom.getBoundingClientRect(),this.length?e==0:t<=0);{let r=this.dom.getClientRects(),o=null;if(!r.length)return null;let l=this.flags&16?!0:this.flags&32?!1:e>0;for(let a=l?r.length-1:0;o=r[a],!(e>0?a==0:a==r.length-1||o.top0;)if(s.isComposite())if(o){if(!e)break;i&&i.break(),e--,o=!1}else if(r==s.children.length){if(!e&&!l.length)break;i&&i.leave(s),o=!!s.breakAfter,{tile:s,index:r}=l.pop(),r++}else{let a=s.children[r],h=a.breakAfter;(t>0?a.length<=e:a.length=0;l--){let a=t.marks[l],h=s.lastChild;if(h instanceof we&&h.mark.eq(a.mark))h.dom!=a.dom&&h.setDOM(Gr(a.dom)),s=h;else{if(this.cache.reused.get(a)){let f=F.get(a.dom);f&&f.setDOM(Gr(a.dom))}let c=we.of(a.mark,a.dom);s.append(c),s=c}this.cache.reused.set(a,2)}let r=F.get(e.text);r&&this.cache.reused.set(r,2);let o=new zt(e.text,e.text.nodeValue);o.flags|=8,s.append(o)}addInlineWidget(e,t,i){let s=this.afterWidget&&e.flags&48&&(this.afterWidget.flags&48)==(e.flags&48);s||this.flushBuffer();let r=this.ensureMarks(t,i);!s&&!(e.flags&16)&&r.append(this.getBuffer(1)),r.append(e),this.pos+=e.length,this.afterWidget=e}addMark(e,t,i){this.flushBuffer(),this.ensureMarks(t,i).append(e),this.pos+=e.length,this.afterWidget=null}addBlockWidget(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}continueWidget(e){let t=this.afterWidget||this.lastBlock;t.length+=e,this.pos+=e}addLineStart(e,t){var i;e||(e=Pc);let s=wi.start(e,t||((i=this.cache.find(wi))===null||i===void 0?void 0:i.dom),!!t);this.getBlockPos().append(this.lastBlock=this.curLine=s)}addLine(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}addBreak(){this.lastBlock.flags|=1,this.endLine(),this.pos++}addLineStartIfNotCovered(e){this.blockPosCovered()||this.addLineStart(e)}ensureLine(e){this.curLine||this.addLineStart(e)}ensureMarks(e,t){var i;let s=this.curLine;for(let r=e.length-1;r>=0;r--){let o=e[r],l;if(t>0&&(l=s.lastChild)&&l instanceof we&&l.mark.eq(o))s=l,t--;else{let a=we.of(o,(i=this.cache.find(we,h=>h.mark.eq(o)))===null||i===void 0?void 0:i.dom);s.append(a),s=a,t=0}}return s}endLine(){if(this.curLine){this.flushBuffer();let e=this.curLine.lastChild;(!e||!Qh(this.curLine,!1)||e.dom.nodeName!="BR"&&e.isWidget()&&!(T.ios&&Qh(this.curLine,!0)))&&this.curLine.append(this.cache.findWidget(Ur,0,32)||new Vt(Ur.toDOM(),0,Ur,32)),this.curLine=this.afterWidget=null}}updateBlockWrappers(){this.wrapperPos>this.pos+1e4&&(this.blockWrappers.goto(this.pos),this.wrappers.length=0);for(let e=this.wrappers.length-1;e>=0;e--)this.wrappers[e].to=this.pos){let t=new po(e.from,e.to,e.value,e.rank),i=this.wrappers.length;for(;i>0&&(this.wrappers[i-1].rank-t.rank||this.wrappers[i-1].to-t.to)<0;)i--;this.wrappers.splice(i,0,t)}this.wrapperPos=this.pos}getBlockPos(){var e;this.updateBlockWrappers();let t=this.root;for(let i of this.wrappers){let s=t.lastChild;if(i.fromo.wrapper.eq(i.wrapper)))===null||e===void 0?void 0:e.dom);t.append(r),t=r}}return t}blockPosCovered(){let e=this.lastBlock;return e!=null&&!e.breakAfter&&(!e.isWidget()||(e.flags&160)>0)}getBuffer(e){let t=2|(e<0?16:32),i=this.cache.find(ki,void 0,1);return i&&(i.flags=t),i||new ki(t)}flushBuffer(){this.afterWidget&&!(this.afterWidget.flags&32)&&(this.afterWidget.parent.append(this.getBuffer(-1)),this.afterWidget=null)}},mo=class{constructor(e){this.skipCount=0,this.text="",this.textOff=0,this.cursor=e.iter()}skip(e){this.textOff+e<=this.text.length?this.textOff+=e:(this.skipCount+=e-(this.text.length-this.textOff),this.text="",this.textOff=0)}next(e){if(this.textOff==this.text.length){let{value:s,lineBreak:r,done:o}=this.cursor.next(this.skipCount);if(this.skipCount=0,o)throw new Error("Ran out of text content when drawing inline views");this.text=s;let l=this.textOff=Math.min(e,s.length);return r?null:s.slice(0,l)}let t=Math.min(this.text.length,this.textOff+e),i=this.text.slice(this.textOff,t);return this.textOff=t,i}},ps=[Vt,wi,zt,we,ki,dt,Si];for(let n=0;n[]),this.index=ps.map(()=>0),this.reused=new Map}add(e){let t=e.constructor.bucket,i=this.buckets[t];i.length<6?i.push(e):i[this.index[t]=(this.index[t]+1)%6]=e}find(e,t,i=2){let s=e.bucket,r=this.buckets[s],o=this.index[s];for(let l=r.length-1;l>=0;l--){let a=(l+o)%r.length,h=r[a];if((!t||t(h))&&!this.reused.has(h))return r.splice(a,1),a{if(this.cache.add(o),o.isComposite())return!1},enter:o=>this.cache.add(o),leave:()=>{},break:()=>{}}}run(e,t){let i=t&&this.getCompositionContext(t.text);for(let s=0,r=0,o=0;;){let l=os){let h=a-s;this.preserve(h,!o,!l),s=a,r+=h}if(!l)break;t&&l.fromA<=t.range.fromA&&l.toA>=t.range.toA?(this.forward(l.fromA,t.range.fromA,t.range.fromA{if(o.isWidget())if(this.openWidget)this.builder.continueWidget(a-l);else{let h=a>0||l{o.isLine()?this.builder.addLineStart(o.attrs,this.cache.maybeReuse(o)):(this.cache.add(o),o instanceof we&&s.unshift(o.mark)),this.openWidget=!1},leave:o=>{o.isLine()?s.length&&(s.length=r=0):o instanceof we&&(s.shift(),r=Math.min(r,s.length))},break:()=>{this.builder.addBreak(),this.openWidget=!1}}),this.text.skip(e)}emit(e,t){let i=null,s=this.builder,r=0,o=B.spans(this.decorations,e,t,{point:(l,a,h,c,f,u)=>{if(h instanceof Yt){if(this.disallowBlockEffectsFor[u]){if(h.block)throw new RangeError("Block decorations may not be specified via plugins");if(a>this.view.state.doc.lineAt(l).to)throw new RangeError("Decorations that replace line breaks may not be specified via plugins")}if(r=c.length,f>c.length)s.continueWidget(a-l);else{let d=h.widget||(h.block?kt.block:kt.inline),p=Lp(h),O=this.cache.findWidget(d,a-l,p)||Vt.of(d,this.view,a-l,p);h.block?(h.startSide>0&&s.addLineStartIfNotCovered(i),s.addBlockWidget(O)):(s.ensureLine(i),s.addInlineWidget(O,c,f))}i=null}else i=Ep(i,h);a>l&&this.text.skip(a-l)},span:(l,a,h,c)=>{for(let f=l;fr,this.openMarks=o}forward(e,t,i=1){t-e<=10?this.old.advance(t-e,i,this.reuseWalker):(this.old.advance(5,-1,this.reuseWalker),this.old.advance(t-e-10,-1),this.old.advance(5,i,this.reuseWalker))}getCompositionContext(e){let t=[],i=null;for(let s=e.parentNode;;s=s.parentNode){let r=F.get(s);if(s==this.view.contentDOM)break;r instanceof we?t.push(r):r?.isLine()?i=r:r instanceof dt||(s.nodeName=="DIV"&&!i&&s!=this.view.contentDOM?i=new wi(s,Pc):i||t.push(we.of(new nn({tagName:s.nodeName.toLowerCase(),attributes:mp(s)}),s)))}return{line:i,marks:t}}};function Qh(n,e){let t=i=>{for(let s of i.children)if((e?s.isText():s.length)||t(s))return!0;return!1};return t(n)}function Lp(n){let e=n.isReplace?(n.startSide<0?64:0)|(n.endSide>0?128:0):n.startSide>0?32:16;return n.block&&(e|=256),e}var Pc={class:"cm-line"};function Ep(n,e){let t=e.spec.attributes,i=e.spec.class;return!t&&!i||(n||(n={class:"cm-line"}),t&&Ko(t,n),i&&(n.class+=" "+i)),n}function Dp(n){let e=[];for(let t=n.parents.length;t>1;t--){let i=t==n.parents.length?n.tile:n.parents[t].tile;i instanceof we&&e.push(i.mark)}return e}function Gr(n){let e=F.get(n);return e&&e.setDOM(n.cloneNode()),n}var kt=class extends ye{constructor(e){super(),this.tag=e}eq(e){return e.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(e){return e.nodeName.toLowerCase()==this.tag}get isHidden(){return!0}};kt.inline=new kt("span");kt.block=new kt("div");var Ur=new class extends ye{toDOM(){return document.createElement("br")}get isHidden(){return!0}get editable(){return!0}},Os=class{constructor(e){this.view=e,this.decorations=[],this.blockWrappers=[],this.dynamicDecorationMap=[!1],this.domChanged=null,this.hasComposition=null,this.editContextFormatting=Z.none,this.lastCompositionAfterCursor=!1,this.minWidth=0,this.minWidthFrom=0,this.minWidthTo=0,this.impreciseAnchor=null,this.impreciseHead=null,this.forceSelection=!1,this.lastUpdate=Date.now(),this.updateDeco(),this.tile=new Si(e,e.contentDOM),this.updateInner([new Ne(0,0,0,e.state.doc.length)],null)}update(e){var t;let i=e.changedRanges;this.minWidth>0&&i.length&&(i.every(({fromA:c,toA:f})=>fthis.minWidthTo)?(this.minWidthFrom=e.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=e.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0),this.updateEditContextFormatting(e);let s=-1;this.view.inputState.composing>=0&&!this.view.observer.editContext&&(!((t=this.domChanged)===null||t===void 0)&&t.newSel?s=this.domChanged.newSel.head:!Vp(e.changes,this.hasComposition)&&!e.selectionSet&&(s=e.state.selection.main.head));let r=s>-1?Wp(this.view,e.changes,s):null;if(this.domChanged=null,this.hasComposition){let{from:c,to:f}=this.hasComposition;i=new Ne(c,f,e.changes.mapPos(c,-1),e.changes.mapPos(f,1)).addToSet(i.slice())}this.hasComposition=r?{from:r.range.fromB,to:r.range.toB}:null,(T.ie||T.chrome)&&!r&&e&&e.state.doc.lines!=e.startState.doc.lines&&(this.forceSelection=!0);let o=this.decorations,l=this.blockWrappers;this.updateDeco();let a=Ip(o,this.decorations,e.changes);a.length&&(i=Ne.extendWithRanges(i,a));let h=Yp(l,this.blockWrappers,e.changes);return h.length&&(i=Ne.extendWithRanges(i,h)),r&&!i.some(c=>c.fromA<=r.range.fromA&&c.toA>=r.range.toA)&&(i=r.range.addToSet(i.slice())),this.tile.flags&2&&i.length==0?!1:(this.updateInner(i,r),e.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(e,t){this.view.viewState.mustMeasureContent=!0;let{observer:i}=this.view;i.ignore(()=>{if(t||e.length){let o=this.tile,l=new yo(this.view,o,this.blockWrappers,this.decorations,this.dynamicDecorationMap);t&&F.get(t.text)&&l.cache.reused.set(F.get(t.text),2),this.tile=l.run(e,t),bo(o,l.cache.reused)}this.tile.dom.style.height=this.view.viewState.contentHeight/this.view.scaleY+"px",this.tile.dom.style.flexBasis=this.minWidth?this.minWidth+"px":"";let r=T.chrome||T.ios?{node:i.selectionRange.focusNode,written:!1}:void 0;this.tile.sync(r),r&&(r.written||i.selectionRange.focusNode!=r.node||!this.tile.dom.contains(r.node))&&(this.forceSelection=!0),this.tile.dom.style.height=""});let s=[];if(this.view.viewport.from||this.view.viewport.to-1)&&Ni(i,this.view.observer.selectionRange)&&!(s&&i.contains(s));if(!(r||t||o))return;let l=this.forceSelection;this.forceSelection=!1;let a=this.view.state.selection.main,h,c;if(a.empty?c=h=this.inlineDOMNearPos(a.anchor,a.assoc||1):(c=this.inlineDOMNearPos(a.head,a.head==a.from?1:-1),h=this.inlineDOMNearPos(a.anchor,a.anchor==a.from?1:-1)),T.gecko&&a.empty&&!this.hasComposition&&Bp(h)){let u=document.createTextNode("");this.view.observer.ignore(()=>h.node.insertBefore(u,h.node.childNodes[h.offset]||null)),h=c=new st(u,0),l=!0}let f=this.view.observer.selectionRange;(l||!f.focusNode||(!Gi(h.node,h.offset,f.anchorNode,f.anchorOffset)||!Gi(c.node,c.offset,f.focusNode,f.focusOffset))&&!this.suppressWidgetCursorChange(f,a))&&(this.view.observer.ignore(()=>{T.android&&T.chrome&&i.contains(f.focusNode)&&qp(f.focusNode,i)&&(i.blur(),i.focus({preventScroll:!0}));let u=rn(this.view.root);if(u)if(a.empty){if(T.gecko){let d=_p(h.node,h.offset);if(d&&d!=3){let p=(d==1?oc:lc)(h.node,h.offset);p&&(h=new st(p.node,p.offset))}}u.collapse(h.node,h.offset),a.bidiLevel!=null&&u.caretBidiLevel!==void 0&&(u.caretBidiLevel=a.bidiLevel)}else if(u.extend){u.collapse(h.node,h.offset);try{u.extend(c.node,c.offset)}catch{}}else{let d=document.createRange();a.anchor>a.head&&([h,c]=[c,h]),d.setEnd(c.node,c.offset),d.setStart(h.node,h.offset),u.removeAllRanges(),u.addRange(d)}o&&this.view.root.activeElement==i&&(i.blur(),s&&s.focus())}),this.view.observer.setSelectionRange(h,c)),this.impreciseAnchor=h.precise?null:new st(f.anchorNode,f.anchorOffset),this.impreciseHead=c.precise?null:new st(f.focusNode,f.focusOffset)}suppressWidgetCursorChange(e,t){return this.hasComposition&&t.empty&&Gi(e.focusNode,e.focusOffset,e.anchorNode,e.anchorOffset)&&this.posFromDOM(e.focusNode,e.focusOffset)==t.head}enforceCursorAssoc(){if(this.hasComposition)return;let{view:e}=this,t=e.state.selection.main,i=rn(e.root),{anchorNode:s,anchorOffset:r}=e.observer.selectionRange;if(!i||!t.empty||!t.assoc||!i.modify)return;let o=this.lineAt(t.head,t.assoc);if(!o)return;let l=o.posAtStart;if(t.head==l||t.head==l+o.length)return;let a=this.coordsAt(t.head,-1),h=this.coordsAt(t.head,1);if(!a||!h||a.bottom>h.top)return;let c=this.domAtPos(t.head+t.assoc,t.assoc);i.collapse(c.node,c.offset),i.modify("move",t.assoc<0?"forward":"backward","lineboundary"),e.observer.readSelectionRange();let f=e.observer.selectionRange;e.docView.posFromDOM(f.anchorNode,f.anchorOffset)!=t.from&&i.collapse(s,r)}posFromDOM(e,t){let i=this.tile.nearest(e);if(!i)return this.tile.dom.compareDocumentPosition(e)&2?0:this.view.state.doc.length;let s=i.posAtStart;if(i.isComposite()){let r;if(e==i.dom)r=i.dom.childNodes[t];else{let o=pt(e)==0?0:t==0?-1:1;for(;;){let l=e.parentNode;if(l==i.dom)break;o==0&&l.firstChild!=l.lastChild&&(e==l.firstChild?o=-1:o=1),e=l}o<0?r=e:r=e.nextSibling}if(r==i.dom.firstChild)return s;for(;r&&!F.get(r);)r=r.nextSibling;if(!r)return s+i.length;for(let o=0,l=s;;o++){let a=i.children[o];if(a.dom==r)return l;l+=a.length+a.breakAfter}}else return i.isText()?e==i.dom?s+t:s+(t?i.length:0):s}domAtPos(e,t){let{tile:i,offset:s}=this.tile.resolveBlock(e,t);return i.isWidget()?i.domPosFor(e,t):i.domIn(s,t)}inlineDOMNearPos(e,t){let i,s=-1,r=!1,o,l=-1,a=!1;return this.tile.blockTiles((h,c)=>{if(h.isWidget()){if(h.flags&32&&c>=e)return!0;h.flags&16&&(r=!0)}else{let f=c+h.length;if(c<=e&&(i=h,s=e-c,r=f=e&&!o&&(o=h,l=e-c,a=c>e),c>e&&o)return!0}}),!i&&!o?this.domAtPos(e,t):(r&&o?i=null:a&&i&&(o=null),i&&t<0||!o?i.domIn(s,t):o.domIn(l,t))}coordsAt(e,t){let{tile:i,offset:s}=this.tile.resolveBlock(e,t);return i.isWidget()?i.widget instanceof Hi?null:i.coordsInWidget(s,t,!0):i.coordsIn(s,t)}lineAt(e,t){let{tile:i}=this.tile.resolveBlock(e,t);return i.isLine()?i:null}coordsForChar(e){let{tile:t,offset:i}=this.tile.resolveBlock(e,1);if(!t.isLine())return null;function s(r,o){if(r.isComposite())for(let l of r.children){if(l.length>=o){let a=s(l,o);if(a)return a}if(o-=l.length,o<0)break}else if(r.isText()&&oMath.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,l=-1,a=this.view.textDirection==z.LTR,h=0,c=(f,u,d)=>{for(let p=0;ps);p++){let O=f.children[p],g=u+O.length,y=O.dom.getBoundingClientRect(),{height:x}=y;if(d&&!p&&(h+=y.top-d.top),O instanceof dt)g>i&&c(O,u,y);else if(u>=i&&(h>0&&t.push(-h),t.push(x+h),h=0,o)){let S=O.dom.lastChild,C=S?ss(S):[];if(C.length){let w=C[C.length-1],k=a?w.right-y.left:y.right-w.left;k>l&&(l=k,this.minWidth=r,this.minWidthFrom=u,this.minWidthTo=g)}}d&&p==f.children.length-1&&(h+=d.bottom-y.bottom),u=g+O.breakAfter}};return c(this.tile,0,null),t}textDirectionAt(e){let{tile:t}=this.tile.resolveBlock(e,1);return getComputedStyle(t.dom).direction=="rtl"?z.RTL:z.LTR}measureTextSize(){let e=this.tile.blockTiles(o=>{if(o.isLine()&&o.children.length&&o.length<=20){let l=0,a;for(let h of o.children){if(!h.isText()||/[^ -~]/.test(h.text))return;let c=ss(h.dom);if(c.length!=1)return;l+=c[0].width,a=c[0].height}if(l)return{lineHeight:o.dom.getBoundingClientRect().height,charWidth:l/o.length,textHeight:a}}});if(e)return e;let t=document.createElement("div"),i,s,r;return t.className="cm-line",t.style.width="99999px",t.style.position="absolute",t.textContent="abc def ghi jkl mno pqr stu",this.view.observer.ignore(()=>{this.tile.dom.appendChild(t);let o=ss(t.firstChild)[0];i=t.getBoundingClientRect().height,s=o&&o.width?o.width/27:7,r=o&&o.height?o.height:i,t.remove()}),{lineHeight:i,charWidth:s,textHeight:r}}computeBlockGapDeco(){let e=[],t=this.view.viewState;for(let i=0,s=0;;s++){let r=s==t.viewports.length?null:t.viewports[s],o=r?r.from-1:this.view.state.doc.length;if(o>i){let l=(t.lineBlockAt(o).bottom-t.lineBlockAt(i).top)/this.view.scaleY;e.push(Z.replace({widget:new Hi(l),block:!0,inclusive:!0,isBlockGap:!0}).range(i,o))}if(!r)break;i=r.to+1}return Z.set(e)}updateDeco(){let e=1,t=this.view.state.facet(Ts).map(r=>(this.dynamicDecorationMap[e++]=typeof r=="function")?r(this.view):r),i=!1,s=this.view.state.facet(sl).map((r,o)=>{let l=typeof r=="function";return l&&(i=!0),l?r(this.view):r});for(s.length&&(this.dynamicDecorationMap[e++]=i,t.push(B.join(s))),this.decorations=[this.editContextFormatting,...t,this.computeBlockGapDeco(),this.view.viewState.lineGapDeco];etypeof r=="function"?r(this.view):r)}scrollIntoView(e){var t;if(e.isSnapshot){let c=this.view.viewState.lineBlockAt(e.range.head);this.view.scrollDOM.scrollTop=c.top-e.yMargin,this.view.scrollDOM.scrollLeft=e.xMargin;return}for(let c of this.view.state.facet(Sc))try{if(c(this.view,e.range,e))return!0}catch(f){ae(this.view.state,f,"scroll handler")}let{range:i}=e,s=this.coordsAt(i.head,(t=i.assoc)!==null&&t!==void 0?t:i.empty?0:i.head>i.anchor?-1:1),r;if(!s)return;!i.empty&&(r=this.coordsAt(i.anchor,i.anchor>i.head?-1:1))&&(s={left:Math.min(s.left,r.left),top:Math.min(s.top,r.top),right:Math.max(s.right,r.right),bottom:Math.max(s.bottom,r.bottom)});let o=rl(this.view),l={left:s.left-o.left,top:s.top-o.top,right:s.right+o.right,bottom:s.bottom+o.bottom},{offsetWidth:a,offsetHeight:h}=this.view.scrollDOM;if(bp(this.view.scrollDOM,l,i.head1&&(s.top>window.pageYOffset+window.visualViewport.offsetTop+window.visualViewport.height||s.bottomi.isWidget()||i.children.some(t);return t(this.tile.resolveBlock(e,1).tile)}destroy(){bo(this.tile)}};function bo(n,e){let t=e?.get(n);if(t!=1){t==null&&n.destroy();for(let i of n.children)bo(i,e)}}function Bp(n){return n.node.nodeType==1&&n.node.firstChild&&(n.offset==0||n.node.childNodes[n.offset-1].contentEditable=="false")&&(n.offset==n.node.childNodes.length||n.node.childNodes[n.offset].contentEditable=="false")}function Tc(n,e){let t=n.observer.selectionRange;if(!t.focusNode)return null;let i=oc(t.focusNode,t.focusOffset),s=lc(t.focusNode,t.focusOffset),r=i||s;if(s&&i&&s.node!=i.node){let l=F.get(s.node);if(!l||l.isText()&&l.text!=s.node.nodeValue)r=s;else if(n.docView.lastCompositionAfterCursor){let a=F.get(i.node);!a||a.isText()&&a.text!=i.node.nodeValue||(r=s)}}if(n.docView.lastCompositionAfterCursor=r!=i,!r)return null;let o=e-r.offset;return{from:o,to:o+r.node.nodeValue.length,node:r.node}}function Wp(n,e,t){let i=Tc(n,t);if(!i)return null;let{node:s,from:r,to:o}=i,l=s.nodeValue;if(/[\n\r]/.test(l)||n.state.doc.sliceString(i.from,i.to)!=l)return null;let a=e.invertedDesc;return{range:new Ne(a.mapPos(r),a.mapPos(o),r,o),text:s}}function _p(n,e){return n.nodeType!=1?0:(e&&n.childNodes[e-1].contentEditable=="false"?1:0)|(e{ie.from&&(t=!0)}),t}var Hi=class extends ye{constructor(e){super(),this.height=e}toDOM(){let e=document.createElement("div");return e.className="cm-gap",this.updateDOM(e),e}eq(e){return e.height==this.height}updateDOM(e){return e.style.height=this.height+"px",!0}get editable(){return!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}};function jp(n,e,t=1){let i=n.charCategorizer(e),s=n.doc.lineAt(e),r=e-s.from;if(s.length==0)return b.cursor(e);r==0?t=1:r==s.length&&(t=-1);let o=r,l=r;t<0?o=te(s.text,r,!1):l=te(s.text,r);let a=i(s.text.slice(o,l));for(;o>0;){let h=te(s.text,o,!1);if(i(s.text.slice(h,o))!=a)break;o=h}for(;ln.defaultLineHeight*1.5){let l=n.viewState.heightOracle.textHeight,a=Math.floor((s-t.top-(n.defaultLineHeight-l)*.5)/l);r+=a*n.viewState.heightOracle.lineLength}let o=n.state.sliceDoc(t.from,t.to);return t.from+Nn(o,r,n.state.tabSize)}function So(n,e,t){let i=n.lineBlockAt(e);if(Array.isArray(i.type)){let s;for(let r of i.type){if(r.from>e)break;if(!(r.toe)return r;(!s||r.type==he.Text&&(s.type!=r.type||(t<0?r.frome)))&&(s=r)}}return s||i}return i}function Gp(n,e,t,i){let s=So(n,e.head,e.assoc||-1),r=!i||s.type!=he.Text||!(n.lineWrapping||s.widgetLineBreaks)?null:n.coordsAtPos(e.assoc<0&&e.head>s.from?e.head-1:e.head);if(r){let o=n.dom.getBoundingClientRect(),l=n.textDirectionAt(s.from),a=n.posAtCoords({x:t==(l==z.LTR)?o.right-1:o.left+1,y:(r.top+r.bottom)/2});if(a!=null)return b.cursor(a,t?-1:1)}return b.cursor(t?s.to:s.from,t?-1:1)}function vh(n,e,t,i){let s=n.state.doc.lineAt(e.head),r=n.bidiSpans(s),o=n.textDirectionAt(s.from);for(let l=e,a=null;;){let h=Cp(s,r,o,l,t),c=uc;if(!h){if(s.number==(t?n.state.doc.lines:1))return l;c=` +`,s=n.state.doc.line(s.number+(t?1:-1)),r=n.bidiSpans(s),h=n.visualLineSide(s,!t)}if(a){if(!a(c))return l}else{if(!i)return h;a=i(c)}l=h}}function Up(n,e,t){let i=n.state.charCategorizer(e),s=i(t);return r=>{let o=i(r);return s==q.Space&&(s=o),s==o}}function Fp(n,e,t,i){let s=e.head,r=t?1:-1;if(s==(t?n.state.doc.length:0))return b.cursor(s,e.assoc);let o=e.goalColumn,l,a=n.contentDOM.getBoundingClientRect(),h=n.coordsAtPos(s,e.assoc||((e.empty?t:e.head==e.from)?1:-1)),c=n.documentTop;if(h)o==null&&(o=h.left-a.left),l=r<0?h.top:h.bottom;else{let p=n.viewState.lineBlockAt(s);o==null&&(o=Math.min(a.right-a.left,n.defaultCharacterWidth*(s-p.from))),l=(r<0?p.top:p.bottom)+c}let f=a.left+o,u=n.viewState.heightOracle.textHeight>>1,d=i??u;for(let p=0;;p+=u){let O=l+(d+p)*r,g=wo(n,{x:f,y:O},!1,r);if(t?O>a.bottom:Ol:x{if(e>r&&es(n)),t.from,e.head>t.from?-1:1);return i==t.from?t:b.cursor(i,in.viewState.docHeight)return new ze(n.state.doc.length,-1);if(h=n.elementAtHeight(a),i==null)break;if(h.type==he.Text){if(i<0?h.ton.viewport.to)break;let u=n.docView.coordsAt(i<0?h.from:h.to,i>0?-1:1);if(u&&(i<0?u.top<=a+r:u.bottom>=a+r))break}let f=n.viewState.heightOracle.textHeight/2;a=i>0?h.bottom+f:h.top-f}if(n.viewport.from>=h.to||n.viewport.to<=h.from){if(t)return null;if(h.type==he.Text){let f=Np(n,s,h,o,l);return new ze(f,f==h.from?1:-1)}}if(h.type!=he.Text)return a<(h.top+h.bottom)/2?new ze(h.from,1):new ze(h.to,-1);let c=n.docView.lineAt(h.from,2);return(!c||c.length!=h.length)&&(c=n.docView.lineAt(h.from,-2)),new ko(n,o,l,n.textDirectionAt(h.from)).scanTile(c,h.from)}var ko=class{constructor(e,t,i,s){this.view=e,this.x=t,this.y=i,this.baseDir=s,this.line=null,this.spans=null}bidiSpansAt(e){return(!this.line||this.line.from>e||this.line.to1||i.length&&(i[0].level!=this.baseDir||i[0].to+s.from>1;t:if(r.has(p)){let g=i+Math.floor(Math.random()*d);for(let y=0;y1)){if(y.bottomthis.y)(!a||a.top>y.top)&&(a=y),x=-1;else{let S=y.left>this.x?this.x-y.left:y.right(d+d+p)/3)return this.y=l.bottom-1,this.scan(e,t);if(a&&a.top<(d+p+p)/3)return this.y=a.top+1,this.scan(e,t)}let u=(o?this.dirAt(e[h],1):this.baseDir)==z.LTR;return{i:h,after:this.x>(f.left+f.right)/2==u}}scanText(e,t){let i=[];for(let r=0;r{let o=i[r]-t,l=i[r+1]-t;return on(e.dom,o,l).getClientRects()});return s.after?new ze(i[s.i+1],-1):new ze(i[s.i],1)}scanTile(e,t){if(!e.length)return new ze(t,1);if(e.children.length==1){let l=e.children[0];if(l.isText())return this.scanText(l,t);if(l.isComposite())return this.scanTile(l,t)}let i=[t];for(let l=0,a=t;l{let a=e.children[l];return a.flags&48?null:(a.dom.nodeType==1?a.dom:on(a.dom,0,a.length)).getClientRects()}),r=e.children[s.i],o=i[s.i];return r.isText()?this.scanText(r,o):r.isComposite()?this.scanTile(r,o):s.after?new ze(i[s.i+1],-1):new ze(o,1)}},di="\uFFFF",Qo=class{constructor(e,t){this.points=e,this.view=t,this.text="",this.lineSeparator=t.state.facet(Y.lineSeparator)}append(e){this.text+=e}lineBreak(){this.text+=di}readRange(e,t){if(!e)return this;let i=e.parentNode;for(let s=e;;){this.findPointBefore(i,s);let r=this.text.length;this.readNode(s);let o=F.get(s),l=s.nextSibling;if(l==t){o?.breakAfter&&!l&&i!=this.view.contentDOM&&this.lineBreak();break}let a=F.get(l);(o&&a?o.breakAfter:(o?o.breakAfter:fs(s))||fs(l)&&(s.nodeName!="BR"||o?.isWidget())&&this.text.length>r)&&!Kp(l,t)&&this.lineBreak(),s=l}return this.findPointBefore(i,t),this}readTextNode(e){let t=e.nodeValue;for(let i of this.points)i.node==e&&(i.pos=this.text.length+Math.min(i.offset,t.length));for(let i=0,s=this.lineSeparator?null:/\r\n?|\n/g;;){let r=-1,o=1,l;if(this.lineSeparator?(r=t.indexOf(this.lineSeparator,i),o=this.lineSeparator.length):(l=s.exec(t))&&(r=l.index,o=l[0].length),this.append(t.slice(i,r<0?t.length:r)),r<0)break;if(this.lineBreak(),o>1)for(let a of this.points)a.node==e&&a.pos>this.text.length&&(a.pos-=o-1);i=r+o}}readNode(e){let t=F.get(e),i=t&&t.overrideDOMText;if(i!=null){this.findPointInside(e,i.length);for(let s=i.iter();!s.next().done;)s.lineBreak?this.lineBreak():this.append(s.value)}else e.nodeType==3?this.readTextNode(e):e.nodeName=="BR"?e.nextSibling&&this.lineBreak():e.nodeType==1&&this.readRange(e.firstChild,null)}findPointBefore(e,t){for(let i of this.points)i.node==e&&e.childNodes[i.offset]==t&&(i.pos=this.text.length)}findPointInside(e,t){for(let i of this.points)(e.nodeType==3?i.node==e:e.contains(i.node))&&(i.pos=this.text.length+(Hp(e,i.node,i.offset)?t:0))}};function Hp(n,e,t){for(;;){if(!e||t-1;let{impreciseHead:r,impreciseAnchor:o}=e.docView,l=e.state.selection;if(e.state.readOnly&&t>-1)this.newSel=null;else if(t>-1&&(this.bounds=Zc(e.docView.tile,t,i,0))){let a=r||o?[]:eO(e),h=new Qo(a,e);h.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=h.text,this.newSel=tO(a,this.bounds.from)}else{let a=e.observer.selectionRange,h=r&&r.node==a.focusNode&&r.offset==a.focusOffset||!oo(e.contentDOM,a.focusNode)?l.main.head:e.docView.posFromDOM(a.focusNode,a.focusOffset),c=o&&o.node==a.anchorNode&&o.offset==a.anchorOffset||!oo(e.contentDOM,a.anchorNode)?l.main.anchor:e.docView.posFromDOM(a.anchorNode,a.anchorOffset),f=e.viewport;if((T.ios||T.chrome)&&l.main.empty&&h!=c&&(f.from>0||f.to-1&&l.ranges.length>1)this.newSel=l.replaceRange(b.range(c,h));else if(e.lineWrapping&&c==h&&!(l.main.empty&&l.main.head==h)&&e.inputState.lastTouchTime>Date.now()-100){let u=e.coordsAtPos(h,-1),d=0;u&&(d=e.inputState.lastTouchY<=u.bottom?-1:1),this.newSel=b.create([b.cursor(h,d)])}else this.newSel=b.single(c,h)}}};function Zc(n,e,t,i){if(n.isComposite()){let s=-1,r=-1,o=-1,l=-1;for(let a=0,h=i,c=i;at)return Zc(f,e,t,h);if(u>=e&&s==-1&&(s=a,r=h),h>t&&f.dom.parentNode==n.dom){o=a,l=c;break}c=u,h=u+f.breakAfter}return{from:r,to:l<0?i+n.length:l,startDOM:(s?n.children[s-1].dom.nextSibling:null)||n.dom.firstChild,endDOM:o=0?n.children[o].dom:null}}else return n.isText()?{from:i,to:i+n.length,startDOM:n.dom,endDOM:n.dom.nextSibling}:null}function Ac(n,e){let t,{newSel:i}=e,{state:s}=n,r=s.selection.main,o=n.inputState.lastKeyTime>Date.now()-100?n.inputState.lastKeyCode:-1;if(e.bounds){let{from:l,to:a}=e.bounds,h=r.from,c=null;(o===8||T.android&&e.text.length=l&&r.to<=a&&(e.typeOver||f!=e.text)&&f.slice(0,r.from-l)==e.text.slice(0,r.from-l)&&f.slice(r.to-l)==e.text.slice(u=e.text.length-(f.length-(r.to-l)))?t={from:r.from,to:r.to,insert:E.of(e.text.slice(r.from-l,u).split(di))}:(d=Mc(f,e.text,h-l,c))&&(T.chrome&&o==13&&d.toB==d.from+2&&e.text.slice(d.from,d.toB)==di+di&&d.toB--,t={from:l+d.from,to:l+d.toA,insert:E.of(e.text.slice(d.from,d.toB).split(di))})}else i&&(!n.hasFocus&&s.facet(ut)||gs(i,r))&&(i=null);if(!t&&!i)return!1;if((T.mac||T.android)&&t&&t.from==t.to&&t.from==r.head-1&&/^\. ?$/.test(t.insert.toString())&&n.contentDOM.getAttribute("autocorrect")=="off"?(i&&t.insert.length==2&&(i=b.single(i.main.anchor-1,i.main.head-1)),t={from:t.from,to:t.to,insert:E.of([t.insert.toString().replace("."," ")])}):s.doc.lineAt(r.from).toDate.now()-50?t={from:r.from,to:r.to,insert:s.toText(n.inputState.insertingText)}:T.chrome&&t&&t.from==t.to&&t.from==r.head&&t.insert.toString()==` + `&&n.lineWrapping&&(i&&(i=b.single(i.main.anchor-1,i.main.head-1)),t={from:r.from,to:r.to,insert:E.of([" "])}),t)return ol(n,t,i,o);if(i&&!gs(i,r)){let l=!1,a="select";return n.inputState.lastSelectionTime>Date.now()-50&&(n.inputState.lastSelectionOrigin=="select"&&(l=!0),a=n.inputState.lastSelectionOrigin,a=="select.pointer"&&(i=Cc(s.facet(ln).map(h=>h(n)),i))),n.dispatch({selection:i,scrollIntoView:l,userEvent:a}),!0}else return!1}function ol(n,e,t,i=-1){if(T.ios&&n.inputState.flushIOSKey(e))return!0;let s=n.state.selection.main;if(T.android&&(e.to==s.to&&(e.from==s.from||e.from==s.from-1&&n.state.sliceDoc(e.from,s.from)==" ")&&e.insert.length==1&&e.insert.lines==2&&bi(n.contentDOM,"Enter",13)||(e.from==s.from-1&&e.to==s.to&&e.insert.length==0||i==8&&e.insert.lengths.head)&&bi(n.contentDOM,"Backspace",8)||e.from==s.from&&e.to==s.to+1&&e.insert.length==0&&bi(n.contentDOM,"Delete",46)))return!0;let r=e.insert.toString();n.inputState.composing>=0&&n.inputState.composing++;let o,l=()=>o||(o=Jp(n,e,t));return n.state.facet(gc).some(a=>a(n,e.from,e.to,r,l))||n.dispatch(l()),!0}function Jp(n,e,t){let i,s=n.state,r=s.selection.main,o=-1;if(e.from==e.to&&e.fromr.to){let a=e.fromf(n)),h,a);e.from==c&&(o=c)}if(o>-1)i={changes:e,selection:b.cursor(e.from+e.insert.length,-1)};else if(e.from>=r.from&&e.to<=r.to&&e.to-e.from>=(r.to-r.from)/3&&(!t||t.main.empty&&t.main.from==e.from+e.insert.length)&&n.inputState.composing<0){let a=r.frome.to?s.sliceDoc(e.to,r.to):"";i=s.replaceSelection(n.state.toText(a+e.insert.sliceString(0,void 0,n.state.lineBreak)+h))}else{let a=s.changes(e),h=t&&t.main.to<=a.newLength?t.main:void 0;if(s.selection.ranges.length>1&&(n.inputState.composing>=0||n.inputState.compositionPendingChange)&&e.to<=r.to+10&&e.to>=r.to-10){let c=n.state.sliceDoc(e.from,e.to),f,u=t&&Tc(n,t.main.head);if(u){let p=e.insert.length-(e.to-e.from);f={from:u.from,to:u.to-p}}else f=n.state.doc.lineAt(r.head);let d=r.to-e.to;i=s.changeByRange(p=>{if(p.from==r.from&&p.to==r.to)return{changes:a,range:h||p.map(a)};let O=p.to-d,g=O-c.length;if(n.state.sliceDoc(g,O)!=c||O>=f.from&&g<=f.to)return{range:p};let y=s.changes({from:g,to:O,insert:e.insert}),x=p.to-r.to;return{changes:y,range:h?b.range(Math.max(0,h.anchor+x),Math.max(0,h.head+x)):p.map(y)}})}else i={changes:a,selection:h&&s.selection.replaceRange(h)}}let l="input.type";return(n.composing||n.inputState.compositionPendingChange&&n.inputState.compositionEndedAt>Date.now()-50)&&(n.inputState.compositionPendingChange=!1,l+=".compose",n.inputState.compositionFirstChange&&(l+=".start",n.inputState.compositionFirstChange=!1)),s.update(i,{userEvent:l,scrollIntoView:!0})}function Mc(n,e,t,i){let s=Math.min(n.length,e.length),r=0;for(;r0&&l>0&&n.charCodeAt(o-1)==e.charCodeAt(l-1);)o--,l--;if(i=="end"){let a=Math.max(0,r-Math.min(o,l));t-=o+a-r}if(o=o?r-t:0;r-=a,l=r+(l-o),o=r}else if(l=l?r-t:0;r-=a,o=r+(o-l),l=r}return{from:r,toA:o,toB:l}}function eO(n){let e=[];if(n.root.activeElement!=n.contentDOM)return e;let{anchorNode:t,anchorOffset:i,focusNode:s,focusOffset:r}=n.observer.selectionRange;return t&&(e.push(new ms(t,i)),(s!=t||r!=i)&&e.push(new ms(s,r))),e}function tO(n,e){if(n.length==0)return null;let t=n[0].pos,i=n.length==2?n[1].pos:t;return t>-1&&i>-1?b.single(t+e,i+e):null}function gs(n,e){return e.head==n.main.head&&e.anchor==n.main.anchor}var $o=class{setSelectionOrigin(e){this.lastSelectionOrigin=e,this.lastSelectionTime=Date.now()}constructor(e){this.view=e,this.lastKeyCode=0,this.lastKeyTime=0,this.lastTouchTime=0,this.lastTouchX=0,this.lastTouchY=0,this.lastFocusTime=0,this.lastScrollTop=0,this.lastScrollLeft=0,this.lastWheelEvent=0,this.pendingIOSKey=void 0,this.tabFocusMode=-1,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastContextMenu=0,this.scrollHandlers=[],this.handlers=Object.create(null),this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.compositionPendingKey=!1,this.compositionPendingChange=!1,this.insertingText="",this.insertingTextAt=0,this.mouseSelection=null,this.draggedContent=null,this.handleEvent=this.handleEvent.bind(this),this.notifiedFocused=e.hasFocus,T.safari&&e.contentDOM.addEventListener("input",()=>null),T.gecko&&OO(e.contentDOM.ownerDocument)}handleEvent(e){!aO(this.view,e)||this.ignoreDuringComposition(e)||e.type=="keydown"&&this.keydown(e)||(this.view.updateState!=0?Promise.resolve().then(()=>this.runHandlers(e.type,e)):this.runHandlers(e.type,e))}runHandlers(e,t){let i=this.handlers[e];if(i){for(let s of i.observers)s(this.view,t);for(let s of i.handlers){if(t.defaultPrevented)break;if(s(this.view,t)){t.preventDefault();break}}}}ensureHandlers(e){let t=iO(e),i=this.handlers,s=this.view.contentDOM;for(let r in t)if(r!="scroll"){let o=!t[r].handlers.length,l=i[r];l&&o!=!l.handlers.length&&(s.removeEventListener(r,this.handleEvent),l=null),l||s.addEventListener(r,this.handleEvent,{passive:o})}for(let r in i)r!="scroll"&&!t[r]&&s.removeEventListener(r,this.handleEvent);this.handlers=t}keydown(e){if(this.lastKeyCode=e.keyCode,this.lastKeyTime=Date.now(),e.keyCode==9&&this.tabFocusMode>-1&&(!this.tabFocusMode||Date.now()<=this.tabFocusMode))return!0;if(this.tabFocusMode>0&&e.keyCode!=27&&Xc.indexOf(e.keyCode)<0&&(this.tabFocusMode=-1),T.android&&T.chrome&&!e.synthetic&&(e.keyCode==13||e.keyCode==8))return this.view.observer.delayAndroidKey(e.key,e.keyCode),!0;let t;return T.ios&&!e.synthetic&&!e.altKey&&!e.metaKey&&!e.shiftKey&&((t=Rc.find(i=>i.keyCode==e.keyCode))&&!e.ctrlKey||nO.indexOf(e.key)>-1&&e.ctrlKey)?(this.pendingIOSKey=t||e,setTimeout(()=>this.flushIOSKey(),250),!0):(e.keyCode!=229&&this.view.observer.forceFlush(),!1)}flushIOSKey(e){let t=this.pendingIOSKey;return!t||t.key=="Enter"&&e&&e.from0?!0:T.safari&&!T.ios&&this.compositionPendingKey&&Date.now()-this.compositionEndedAt<100?(this.compositionPendingKey=!1,!0):!1}startMouseSelection(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e}update(e){this.view.observer.update(e),this.mouseSelection&&this.mouseSelection.update(e),this.draggedContent&&e.docChanged&&(this.draggedContent=this.draggedContent.map(e.changes)),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}};function $h(n,e){return(t,i)=>{try{return e.call(n,i,t)}catch(s){ae(t.state,s)}}}function iO(n){let e=Object.create(null);function t(i){return e[i]||(e[i]={observers:[],handlers:[]})}for(let i of n){let s=i.spec,r=s&&s.plugin.domEventHandlers,o=s&&s.plugin.domEventObservers;if(r)for(let l in r){let a=r[l];a&&t(l).handlers.push($h(i.value,a))}if(o)for(let l in o){let a=o[l];a&&t(l).observers.push($h(i.value,a))}}for(let i in Ge)t(i).handlers.push(Ge[i]);for(let i in ke)t(i).observers.push(ke[i]);return e}var Rc=[{key:"Backspace",keyCode:8,inputType:"deleteContentBackward"},{key:"Enter",keyCode:13,inputType:"insertParagraph"},{key:"Enter",keyCode:13,inputType:"insertLineBreak"},{key:"Delete",keyCode:46,inputType:"deleteContentForward"}],nO="dthko",Xc=[16,17,18,20,91,92,224,225],Fn=6;function Hn(n){return Math.max(0,n)*.7+8}function sO(n,e){return Math.max(Math.abs(n.clientX-e.clientX),Math.abs(n.clientY-e.clientY))}var Po=class{constructor(e,t,i,s){this.view=e,this.startEvent=t,this.style=i,this.mustSelect=s,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=t,this.scrollParents=nc(e.contentDOM),this.atoms=e.state.facet(ln).map(o=>o(e));let r=e.contentDOM.ownerDocument;r.addEventListener("mousemove",this.move=this.move.bind(this)),r.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=t.shiftKey,this.multiple=e.state.facet(Y.allowMultipleSelections)&&rO(e,t),this.dragging=lO(e,t)&&Dc(t)==1?null:!1}start(e){this.dragging===!1&&this.select(e)}move(e){if(e.buttons==0)return this.destroy();if(this.dragging||this.dragging==null&&sO(this.startEvent,e)<10)return;this.select(this.lastEvent=e);let t=0,i=0,s=0,r=0,o=this.view.win.innerWidth,l=this.view.win.innerHeight;this.scrollParents.x&&({left:s,right:o}=this.scrollParents.x.getBoundingClientRect()),this.scrollParents.y&&({top:r,bottom:l}=this.scrollParents.y.getBoundingClientRect());let a=rl(this.view);e.clientX-a.left<=s+Fn?t=-Hn(s-e.clientX):e.clientX+a.right>=o-Fn&&(t=Hn(e.clientX-o)),e.clientY-a.top<=r+Fn?i=-Hn(r-e.clientY):e.clientY+a.bottom>=l-Fn&&(i=Hn(e.clientY-l)),this.setScrollSpeed(t,i)}up(e){this.dragging==null&&this.select(this.lastEvent),this.dragging||e.preventDefault(),this.destroy()}destroy(){this.setScrollSpeed(0,0);let e=this.view.contentDOM.ownerDocument;e.removeEventListener("mousemove",this.move),e.removeEventListener("mouseup",this.up),this.view.inputState.mouseSelection=this.view.inputState.draggedContent=null}setScrollSpeed(e,t){this.scrollSpeed={x:e,y:t},e||t?this.scrolling<0&&(this.scrolling=setInterval(()=>this.scroll(),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)}scroll(){let{x:e,y:t}=this.scrollSpeed;e&&this.scrollParents.x&&(this.scrollParents.x.scrollLeft+=e,e=0),t&&this.scrollParents.y&&(this.scrollParents.y.scrollTop+=t,t=0),(e||t)&&this.view.win.scrollBy(e,t),this.dragging===!1&&this.select(this.lastEvent)}select(e){let{view:t}=this,i=Cc(this.atoms,this.style.get(e,this.extend,this.multiple));(this.mustSelect||!i.eq(t.state.selection,this.dragging===!1))&&this.view.dispatch({selection:i,userEvent:"select.pointer"}),this.mustSelect=!1}update(e){e.transactions.some(t=>t.isUserEvent("input.type"))?this.destroy():this.style.update(e)&&setTimeout(()=>this.select(this.lastEvent),20)}};function rO(n,e){let t=n.state.facet(dc);return t.length?t[0](e):T.mac?e.metaKey:e.ctrlKey}function oO(n,e){let t=n.state.facet(pc);return t.length?t[0](e):T.mac?!e.altKey:!e.ctrlKey}function lO(n,e){let{main:t}=n.state.selection;if(t.empty)return!1;let i=rn(n.root);if(!i||i.rangeCount==0)return!0;let s=i.getRangeAt(0).getClientRects();for(let r=0;r=e.clientX&&o.top<=e.clientY&&o.bottom>=e.clientY)return!0}return!1}function aO(n,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let t=e.target,i;t!=n.contentDOM;t=t.parentNode)if(!t||t.nodeType==11||(i=F.get(t))&&i.isWidget()&&!i.isHidden&&i.widget.ignoreEvent(e))return!1;return!0}var Ge=Object.create(null),ke=Object.create(null),Lc=T.ie&&T.ie_version<15||T.ios&&T.webkit_version<604;function hO(n){let e=n.dom.parentNode;if(!e)return;let t=e.appendChild(document.createElement("textarea"));t.style.cssText="position: fixed; left: -10000px; top: 10px",t.focus(),setTimeout(()=>{n.focus(),t.remove(),Ec(n,t.value)},50)}function Cs(n,e,t){for(let i of n.facet(e))t=i(t,n);return t}function Ec(n,e){e=Cs(n.state,tl,e);let{state:t}=n,i,s=1,r=t.toText(e),o=r.lines==t.selection.ranges.length;if(To!=null&&t.selection.ranges.every(a=>a.empty)&&To==r.toString()){let a=-1;i=t.changeByRange(h=>{let c=t.doc.lineAt(h.from);if(c.from==a)return{range:h};a=c.from;let f=t.toText((o?r.line(s++).text:e)+t.lineBreak);return{changes:{from:c.from,insert:f},range:b.cursor(h.from+f.length)}})}else o?i=t.changeByRange(a=>{let h=r.line(s++);return{changes:{from:a.from,to:a.to,insert:h.text},range:b.cursor(a.from+h.length)}}):i=t.replaceSelection(r);n.dispatch(i,{userEvent:"input.paste",scrollIntoView:!0})}ke.scroll=n=>{n.inputState.lastScrollTop=n.scrollDOM.scrollTop,n.inputState.lastScrollLeft=n.scrollDOM.scrollLeft};ke.wheel=ke.mousewheel=n=>{n.inputState.lastWheelEvent=Date.now()};Ge.keydown=(n,e)=>(n.inputState.setSelectionOrigin("select"),e.keyCode==27&&n.inputState.tabFocusMode!=0&&(n.inputState.tabFocusMode=Date.now()+2e3),!1);ke.touchstart=(n,e)=>{let t=n.inputState,i=e.targetTouches[0];t.lastTouchTime=Date.now(),i&&(t.lastTouchX=i.clientX,t.lastTouchY=i.clientY),t.setSelectionOrigin("select.pointer")};ke.touchmove=n=>{n.inputState.setSelectionOrigin("select.pointer")};Ge.mousedown=(n,e)=>{if(n.observer.flush(),n.inputState.lastTouchTime>Date.now()-2e3)return!1;let t=null;for(let i of n.state.facet(Oc))if(t=i(n,e),t)break;if(!t&&e.button==0&&(t=fO(n,e)),t){let i=!n.hasFocus;n.inputState.startMouseSelection(new Po(n,e,t,i)),i&&n.observer.ignore(()=>{sc(n.contentDOM);let r=n.root.activeElement;r&&!r.contains(n.contentDOM)&&r.blur()});let s=n.inputState.mouseSelection;if(s)return s.start(e),s.dragging===!1}else n.inputState.setSelectionOrigin("select.pointer");return!1};function Ph(n,e,t,i){if(i==1)return b.cursor(e,t);if(i==2)return jp(n.state,e,t);{let s=n.docView.lineAt(e,t),r=n.state.doc.lineAt(s?s.posAtEnd:e),o=s?s.posAtStart:r.from,l=s?s.posAtEnd:r.to;return lDate.now()-400&&Math.abs(e.clientX-n.clientX)<2&&Math.abs(e.clientY-n.clientY)<2?(Ch+1)%3:1}function fO(n,e){let t=n.posAndSideAtCoords({x:e.clientX,y:e.clientY},!1),i=Dc(e),s=n.state.selection;return{update(r){r.docChanged&&(t.pos=r.changes.mapPos(t.pos),s=s.map(r.changes))},get(r,o,l){let a=n.posAndSideAtCoords({x:r.clientX,y:r.clientY},!1),h,c=Ph(n,a.pos,a.assoc,i);if(t.pos!=a.pos&&!o){let f=Ph(n,t.pos,t.assoc,i),u=Math.min(f.from,c.from),d=Math.max(f.to,c.to);c=u1&&(h=uO(s,a.pos))?h:l?s.addRange(c):b.create([c])}}}function uO(n,e){for(let t=0;t=e)return b.create(n.ranges.slice(0,t).concat(n.ranges.slice(t+1)),n.mainIndex==t?0:n.mainIndex-(n.mainIndex>t?1:0))}return null}Ge.dragstart=(n,e)=>{let{selection:{main:t}}=n.state;if(e.target.draggable){let s=n.docView.tile.nearest(e.target);if(s&&s.isWidget()){let r=s.posAtStart,o=r+s.length;(r>=t.to||o<=t.from)&&(t=b.range(r,o))}}let{inputState:i}=n;return i.mouseSelection&&(i.mouseSelection.dragging=!0),i.draggedContent=t,e.dataTransfer&&(e.dataTransfer.setData("Text",Cs(n.state,il,n.state.sliceDoc(t.from,t.to))),e.dataTransfer.effectAllowed="copyMove"),!1};Ge.dragend=n=>(n.inputState.draggedContent=null,!1);function Ah(n,e,t,i){if(t=Cs(n.state,tl,t),!t)return;let s=n.posAtCoords({x:e.clientX,y:e.clientY},!1),{draggedContent:r}=n.inputState,o=i&&r&&oO(n,e)?{from:r.from,to:r.to}:null,l={from:s,insert:t},a=n.state.changes(o?[o,l]:l);n.focus(),n.dispatch({changes:a,selection:{anchor:a.mapPos(s,-1),head:a.mapPos(s,1)},userEvent:o?"move.drop":"input.drop"}),n.inputState.draggedContent=null}Ge.drop=(n,e)=>{if(!e.dataTransfer)return!1;if(n.state.readOnly)return!0;let t=e.dataTransfer.files;if(t&&t.length){let i=Array(t.length),s=0,r=()=>{++s==t.length&&Ah(n,e,i.filter(o=>o!=null).join(n.state.lineBreak),!1)};for(let o=0;o{/[\x00-\x08\x0e-\x1f]{2}/.test(l.result)||(i[o]=l.result),r()},l.readAsText(t[o])}return!0}else{let i=e.dataTransfer.getData("Text");if(i)return Ah(n,e,i,!0),!0}return!1};Ge.paste=(n,e)=>{if(n.state.readOnly)return!0;n.observer.flush();let t=Lc?null:e.clipboardData;return t?(Ec(n,t.getData("text/plain")||t.getData("text/uri-list")),!0):(hO(n),!1)};function dO(n,e){let t=n.dom.parentNode;if(!t)return;let i=t.appendChild(document.createElement("textarea"));i.style.cssText="position: fixed; left: -10000px; top: 10px",i.value=e,i.focus(),i.selectionEnd=e.length,i.selectionStart=0,setTimeout(()=>{i.remove(),n.focus()},50)}function pO(n){let e=[],t=[],i=!1;for(let s of n.selection.ranges)s.empty||(e.push(n.sliceDoc(s.from,s.to)),t.push(s));if(!e.length){let s=-1;for(let{from:r}of n.selection.ranges){let o=n.doc.lineAt(r);o.number>s&&(e.push(o.text),t.push({from:o.from,to:Math.min(n.doc.length,o.to+1)})),s=o.number}i=!0}return{text:Cs(n,il,e.join(n.lineBreak)),ranges:t,linewise:i}}var To=null;Ge.copy=Ge.cut=(n,e)=>{if(!Ni(n.contentDOM,n.observer.selectionRange))return!1;let{text:t,ranges:i,linewise:s}=pO(n.state);if(!t&&!s)return!1;To=s?t:null,e.type=="cut"&&!n.state.readOnly&&n.dispatch({changes:i,scrollIntoView:!0,userEvent:"delete.cut"});let r=Lc?null:e.clipboardData;return r?(r.clearData(),r.setData("text/plain",t),!0):(dO(n,t),!1)};var Bc=xe.define();function Wc(n,e){let t=[];for(let i of n.facet(yc)){let s=i(n,e);s&&t.push(s)}return t.length?n.update({effects:t,annotations:Bc.of(!0)}):null}function _c(n){setTimeout(()=>{let e=n.hasFocus;if(e!=n.inputState.notifiedFocused){let t=Wc(n.state,e);t?n.dispatch(t):n.update([])}},10)}ke.focus=n=>{n.inputState.lastFocusTime=Date.now(),!n.scrollDOM.scrollTop&&(n.inputState.lastScrollTop||n.inputState.lastScrollLeft)&&(n.scrollDOM.scrollTop=n.inputState.lastScrollTop,n.scrollDOM.scrollLeft=n.inputState.lastScrollLeft),_c(n)};ke.blur=n=>{n.observer.clearSelectionRange(),_c(n)};ke.compositionstart=ke.compositionupdate=n=>{n.observer.editContext||(n.inputState.compositionFirstChange==null&&(n.inputState.compositionFirstChange=!0),n.inputState.composing<0&&(n.inputState.composing=0))};ke.compositionend=n=>{n.observer.editContext||(n.inputState.composing=-1,n.inputState.compositionEndedAt=Date.now(),n.inputState.compositionPendingKey=!0,n.inputState.compositionPendingChange=n.observer.pendingRecords().length>0,n.inputState.compositionFirstChange=null,T.chrome&&T.android?n.observer.flushSoon():n.inputState.compositionPendingChange?Promise.resolve().then(()=>n.observer.flush()):setTimeout(()=>{n.inputState.composing<0&&n.docView.hasComposition&&n.update([])},50))};ke.contextmenu=n=>{n.inputState.lastContextMenu=Date.now()};Ge.beforeinput=(n,e)=>{var t,i;if((e.inputType=="insertText"||e.inputType=="insertCompositionText")&&(n.inputState.insertingText=e.data,n.inputState.insertingTextAt=Date.now()),e.inputType=="insertReplacementText"&&n.observer.editContext){let r=(t=e.dataTransfer)===null||t===void 0?void 0:t.getData("text/plain"),o=e.getTargetRanges();if(r&&o.length){let l=o[0],a=n.posAtDOM(l.startContainer,l.startOffset),h=n.posAtDOM(l.endContainer,l.endOffset);return ol(n,{from:a,to:h,insert:n.state.toText(r)},null),!0}}let s;if(T.chrome&&T.android&&(s=Rc.find(r=>r.inputType==e.inputType))&&(n.observer.delayAndroidKey(s.key,s.keyCode),s.key=="Backspace"||s.key=="Delete")){let r=((i=window.visualViewport)===null||i===void 0?void 0:i.height)||0;setTimeout(()=>{var o;(((o=window.visualViewport)===null||o===void 0?void 0:o.height)||0)>r+10&&n.hasFocus&&(n.contentDOM.blur(),n.focus())},100)}return T.ios&&e.inputType=="deleteContentForward"&&n.observer.flushSoon(),T.safari&&e.inputType=="insertText"&&n.inputState.composing>=0&&setTimeout(()=>ke.compositionend(n,e),20),!1};var Mh=new Set;function OO(n){Mh.has(n)||(Mh.add(n),n.addEventListener("copy",()=>{}),n.addEventListener("cut",()=>{}))}var Rh=["pre-wrap","normal","pre-line","break-spaces"],Qi=!1;function Xh(){Qi=!1}var Co=class{constructor(e){this.lineWrapping=e,this.doc=E.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.textHeight=14,this.lineLength=30}heightForGap(e,t){let i=this.doc.lineAt(t).number-this.doc.lineAt(e).number+1;return this.lineWrapping&&(i+=Math.max(0,Math.ceil((t-e-i*this.lineLength*.5)/this.lineLength))),this.lineHeight*i}heightForLine(e){return this.lineWrapping?(1+Math.max(0,Math.ceil((e-this.lineLength)/Math.max(1,this.lineLength-5))))*this.lineHeight:this.lineHeight}setDoc(e){return this.doc=e,this}mustRefreshForWrapping(e){return Rh.indexOf(e)>-1!=this.lineWrapping}mustRefreshForHeights(e){let t=!1;for(let i=0;i-1,a=Math.abs(t-this.lineHeight)>.3||this.lineWrapping!=l||Math.abs(i-this.charWidth)>.1;if(this.lineWrapping=l,this.lineHeight=t,this.charWidth=i,this.textHeight=s,this.lineLength=r,a){this.heightSamples={};for(let h=0;h0}set outdated(e){this.flags=(e?2:0)|this.flags&-3}setHeight(e){this.height!=e&&(Math.abs(this.height-e)>rs&&(Qi=!0),this.height=e)}replace(e,t,i){return n.of(i)}decomposeLeft(e,t){t.push(this)}decomposeRight(e,t){t.push(this)}applyChanges(e,t,i,s){let r=this,o=i.doc;for(let l=s.length-1;l>=0;l--){let{fromA:a,toA:h,fromB:c,toB:f}=s[l],u=r.lineAt(a,G.ByPosNoHeight,i.setDoc(t),0,0),d=u.to>=h?u:r.lineAt(h,G.ByPosNoHeight,i,0,0);for(f+=d.to-h,h=d.to;l>0&&u.from<=s[l-1].toA;)a=s[l-1].fromA,c=s[l-1].fromB,l--,ar*2){let l=e[t-1];l.break?e.splice(--t,1,l.left,null,l.right):e.splice(--t,1,l.left,l.right),i+=1+l.break,s-=l.size}else if(r>s*2){let l=e[i];l.break?e.splice(i,1,l.left,null,l.right):e.splice(i,1,l.left,l.right),i+=2+l.break,r-=l.size}else break;else if(s=r&&o(this.lineAt(0,G.ByPos,i,s,r))}setMeasuredHeight(e){let t=e.heights[e.index++];t<0?(this.spaceAbove=-t,t=e.heights[e.index++]):this.spaceAbove=0,this.setHeight(t)}updateHeight(e,t=0,i=!1,s){return s&&s.from<=t&&s.more&&this.setMeasuredHeight(s),this.outdated=!1,this}toString(){return`block(${this.length})`}},_e=class n extends bs{constructor(e,t,i){super(e,t,null),this.collapsed=0,this.widgetHeight=0,this.breaks=0,this.spaceAbove=i}mainBlock(e,t){return new je(t,this.length,e+this.spaceAbove,this.height-this.spaceAbove,this.breaks)}replace(e,t,i){let s=i[0];return i.length==1&&(s instanceof n||s instanceof St&&s.flags&4)&&Math.abs(this.length-s.length)<10?(s instanceof St?s=new n(s.length,this.height,this.spaceAbove):s.height=this.height,this.outdated||(s.outdated=!1),s):Ce.of(i)}updateHeight(e,t=0,i=!1,s){return s&&s.from<=t&&s.more?this.setMeasuredHeight(s):(i||this.outdated)&&(this.spaceAbove=0,this.setHeight(Math.max(this.widgetHeight,e.heightForLine(this.length-this.collapsed))+this.breaks*e.lineHeight)),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:""}${this.widgetHeight?":"+this.widgetHeight:""})`}},St=class n extends Ce{constructor(e){super(e,0)}heightMetrics(e,t){let i=e.doc.lineAt(t).number,s=e.doc.lineAt(t+this.length).number,r=s-i+1,o,l=0;if(e.lineWrapping){let a=Math.min(this.height,e.lineHeight*r);o=a/r,this.length>r+1&&(l=(this.height-a)/(this.length-r-1))}else o=this.height/r;return{firstLine:i,lastLine:s,perLine:o,perChar:l}}blockAt(e,t,i,s){let{firstLine:r,lastLine:o,perLine:l,perChar:a}=this.heightMetrics(t,s);if(t.lineWrapping){let h=s+(e0){let r=i[i.length-1];r instanceof n?i[i.length-1]=new n(r.length+s):i.push(null,new n(s-1))}if(e>0){let r=i[0];r instanceof n?i[0]=new n(e+r.length):i.unshift(new n(e-1),null)}return Ce.of(i)}decomposeLeft(e,t){t.push(new n(e-1),null)}decomposeRight(e,t){t.push(null,new n(this.length-e-1))}updateHeight(e,t=0,i=!1,s){let r=t+this.length;if(s&&s.from<=t+this.length&&s.more){let o=[],l=Math.max(t,s.from),a=-1;for(s.from>t&&o.push(new n(s.from-t-1).updateHeight(e,t));l<=r&&s.more;){let c=e.doc.lineAt(l).length;o.length&&o.push(null);let f=s.heights[s.index++],u=0;f<0&&(u=-f,f=s.heights[s.index++]),a==-1?a=f:Math.abs(f-a)>=rs&&(a=-2);let d=new _e(c,f,u);d.outdated=!1,o.push(d),l+=c+1}l<=r&&o.push(null,new n(r-l).updateHeight(e,l));let h=Ce.of(o);return(a<0||Math.abs(h.height-this.height)>=rs||Math.abs(a-this.heightMetrics(e,t).perLine)>=rs)&&(Qi=!0),ys(this,h)}else(i||this.outdated)&&(this.setHeight(e.heightForGap(t,t+this.length)),this.outdated=!1);return this}toString(){return`gap(${this.length})`}},Ao=class extends Ce{constructor(e,t,i){super(e.length+t+i.length,e.height+i.height,t|(e.outdated||i.outdated?2:0)),this.left=e,this.right=i,this.size=e.size+i.size}get break(){return this.flags&1}blockAt(e,t,i,s){let r=i+this.left.height;return el))return h;let c=t==G.ByPosNoHeight?G.ByPosNoHeight:G.ByPos;return a?h.join(this.right.lineAt(l,c,i,o,l)):this.left.lineAt(l,c,i,s,r).join(h)}forEachLine(e,t,i,s,r,o){let l=s+this.left.height,a=r+this.left.length+this.break;if(this.break)e=a&&this.right.forEachLine(e,t,i,l,a,o);else{let h=this.lineAt(a,G.ByPos,i,s,r);e=e&&h.from<=t&&o(h),t>h.to&&this.right.forEachLine(h.to+1,t,i,l,a,o)}}replace(e,t,i){let s=this.left.length+this.break;if(tthis.left.length)return this.balanced(this.left,this.right.replace(e-s,t-s,i));let r=[];e>0&&this.decomposeLeft(e,r);let o=r.length;for(let l of i)r.push(l);if(e>0&&Lh(r,o-1),t=i&&t.push(null)),e>i&&this.right.decomposeLeft(e-i,t)}decomposeRight(e,t){let i=this.left.length,s=i+this.break;if(e>=s)return this.right.decomposeRight(e-s,t);e2*t.size||t.size>2*e.size?Ce.of(this.break?[e,null,t]:[e,t]):(this.left=ys(this.left,e),this.right=ys(this.right,t),this.setHeight(e.height+t.height),this.outdated=e.outdated||t.outdated,this.size=e.size+t.size,this.length=e.length+this.break+t.length,this)}updateHeight(e,t=0,i=!1,s){let{left:r,right:o}=this,l=t+r.length+this.break,a=null;return s&&s.from<=t+r.length&&s.more?a=r=r.updateHeight(e,t,i,s):r.updateHeight(e,t,i),s&&s.from<=l+o.length&&s.more?a=o=o.updateHeight(e,l,i,s):o.updateHeight(e,l,i),a?this.balanced(r,o):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?" ":"-")+this.right}};function Lh(n,e){let t,i;n[e]==null&&(t=n[e-1])instanceof St&&(i=n[e+1])instanceof St&&n.splice(e-1,3,new St(t.length+1+i.length))}var gO=5,Mo=class n{constructor(e,t){this.pos=e,this.oracle=t,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=e}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(e,t){if(this.lineStart>-1){let i=Math.min(t,this.lineEnd),s=this.nodes[this.nodes.length-1];s instanceof _e?s.length+=i-this.pos:(i>this.pos||!this.isCovered)&&this.nodes.push(new _e(i-this.pos,-1,0)),this.writtenTo=i,t>i&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=t}point(e,t,i){if(e=gO)&&this.addLineDeco(s,r,o)}else t>e&&this.span(e,t);this.lineEnd>-1&&this.lineEnd-1)return;let{from:e,to:t}=this.oracle.doc.lineAt(this.pos);this.lineStart=e,this.lineEnd=t,this.writtenToe&&this.nodes.push(new _e(this.pos-e,-1,0)),this.writtenTo=this.pos}blankContent(e,t){let i=new St(t-e);return this.oracle.doc.lineAt(e).to==t&&(i.flags|=4),i}ensureLine(){this.enterLine();let e=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(e instanceof _e)return e;let t=new _e(0,-1,0);return this.nodes.push(t),t}addBlock(e){this.enterLine();let t=e.deco;t&&t.startSide>0&&!this.isCovered&&this.ensureLine(),this.nodes.push(e),this.writtenTo=this.pos=this.pos+e.length,t&&t.endSide>0&&(this.covering=e)}addLineDeco(e,t,i){let s=this.ensureLine();s.length+=i,s.collapsed+=i,s.widgetHeight=Math.max(s.widgetHeight,e),s.breaks+=t,this.writtenTo=this.pos=this.pos+i}finish(e){let t=this.nodes.length==0?null:this.nodes[this.nodes.length-1];this.lineStart>-1&&!(t instanceof _e)&&!this.isCovered?this.nodes.push(new _e(0,-1,0)):(this.writtenToc.clientHeight||c.scrollWidth>c.clientWidth)&&f.overflow!="visible"){let u=c.getBoundingClientRect();r=Math.max(r,u.left),o=Math.min(o,u.right),l=Math.max(l,u.top),a=Math.min(h==n.parentNode?s.innerHeight:a,u.bottom)}h=f.position=="absolute"||f.position=="fixed"?c.offsetParent:c.parentNode}else if(h.nodeType==11)h=h.host;else break;return{left:r-t.left,right:Math.max(r,o)-t.left,top:l-(t.top+e),bottom:Math.max(l,a)-(t.top+e)}}function xO(n){let e=n.getBoundingClientRect(),t=n.ownerDocument.defaultView||window;return e.left0&&e.top0}function SO(n,e){let t=n.getBoundingClientRect();return{left:0,right:t.right-t.left,top:e,bottom:t.bottom-(t.top+e)}}var Ji=class{constructor(e,t,i,s){this.from=e,this.to=t,this.size=i,this.displaySize=s}static same(e,t){if(e.length!=t.length)return!1;for(let i=0;itypeof s!="function"&&s.class=="cm-lineWrapping");this.heightOracle=new Co(i),this.stateDeco=Dh(t),this.heightMap=Ce.empty().applyChanges(this.stateDeco,E.empty,this.heightOracle.setDoc(t.doc),[new Ne(0,0,0,t.doc.length)]);for(let s=0;s<2&&(this.viewport=this.getViewport(0,null),!!this.updateForViewport());s++);this.updateViewportLines(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=Z.set(this.lineGaps.map(s=>s.draw(this,!1))),this.scrollParent=e.scrollDOM,this.computeVisibleRanges()}updateForViewport(){let e=[this.viewport],{main:t}=this.state.selection;for(let i=0;i<=1;i++){let s=i?t.head:t.anchor;if(!e.some(({from:r,to:o})=>s>=r&&s<=o)){let{from:r,to:o}=this.lineBlockAt(s);e.push(new Oi(r,o))}}return this.viewports=e.sort((i,s)=>i.from-s.from),this.updateScaler()}updateScaler(){let e=this.scaler;return this.scaler=this.heightMap.height<=7e6?Eh:new Lo(this.heightOracle,this.heightMap,this.viewports),e.eq(this.scaler)?0:2}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,e=>{this.viewportLines.push(Vi(e,this.scaler))})}update(e,t=null){this.state=e.state;let i=this.stateDeco;this.stateDeco=Dh(this.state);let s=e.changedRanges,r=Ne.extendWithRanges(s,yO(i,this.stateDeco,e?e.changes:me.empty(this.state.doc.length))),o=this.heightMap.height,l=this.scrolledToBottom?null:this.scrollAnchorAt(this.scrollOffset);Xh(),this.heightMap=this.heightMap.applyChanges(this.stateDeco,e.startState.doc,this.heightOracle.setDoc(this.state.doc),r),(this.heightMap.height!=o||Qi)&&(e.flags|=2),l?(this.scrollAnchorPos=e.changes.mapPos(l.from,-1),this.scrollAnchorHeight=l.top):(this.scrollAnchorPos=-1,this.scrollAnchorHeight=o);let a=r.length?this.mapViewport(this.viewport,e.changes):this.viewport;(t&&(t.range.heada.to)||!this.viewportIsAppropriate(a))&&(a=this.getViewport(0,t));let h=a.from!=this.viewport.from||a.to!=this.viewport.to;this.viewport=a,e.flags|=this.updateForViewport(),(h||!e.changes.empty||e.flags&2)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,e.changes))),e.flags|=this.computeVisibleRanges(e.changes),t&&(this.scrollTarget=t),!this.mustEnforceCursorAssoc&&(e.selectionSet||e.focusChanged)&&e.view.lineWrapping&&e.state.selection.main.empty&&e.state.selection.main.assoc&&!e.state.facet(xc)&&(this.mustEnforceCursorAssoc=!0)}measure(){let{view:e}=this,t=e.contentDOM,i=window.getComputedStyle(t),s=this.heightOracle,r=i.whiteSpace;this.defaultTextDirection=i.direction=="rtl"?z.RTL:z.LTR;let o=this.heightOracle.mustRefreshForWrapping(r)||this.mustMeasureContent==="refresh",l=t.getBoundingClientRect(),a=o||this.mustMeasureContent||this.contentDOMHeight!=l.height;this.contentDOMHeight=l.height,this.mustMeasureContent=!1;let h=0,c=0;if(l.width&&l.height){let{scaleX:w,scaleY:k}=ic(t,l);(w>.005&&Math.abs(this.scaleX-w)>.005||k>.005&&Math.abs(this.scaleY-k)>.005)&&(this.scaleX=w,this.scaleY=k,h|=16,o=a=!0)}let f=(parseInt(i.paddingTop)||0)*this.scaleY,u=(parseInt(i.paddingBottom)||0)*this.scaleY;(this.paddingTop!=f||this.paddingBottom!=u)&&(this.paddingTop=f,this.paddingBottom=u,h|=18),this.editorWidth!=e.scrollDOM.clientWidth&&(s.lineWrapping&&(a=!0),this.editorWidth=e.scrollDOM.clientWidth,h|=16);let d=nc(this.view.contentDOM,!1).y;d!=this.scrollParent&&(this.scrollParent=d,this.scrollAnchorHeight=-1,this.scrollOffset=0);let p=this.getScrollOffset();this.scrollOffset!=p&&(this.scrollAnchorHeight=-1,this.scrollOffset=p),this.scrolledToBottom=rc(this.scrollParent||e.win);let O=(this.printing?SO:bO)(t,this.paddingTop),g=O.top-this.pixelViewport.top,y=O.bottom-this.pixelViewport.bottom;this.pixelViewport=O;let x=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(x!=this.inView&&(this.inView=x,x&&(a=!0)),!this.inView&&!this.scrollTarget&&!xO(e.dom))return 0;let S=l.width;if((this.contentDOMWidth!=S||this.editorHeight!=e.scrollDOM.clientHeight)&&(this.contentDOMWidth=l.width,this.editorHeight=e.scrollDOM.clientHeight,h|=16),a){let w=e.docView.measureVisibleLineHeights(this.viewport);if(s.mustRefreshForHeights(w)&&(o=!0),o||s.lineWrapping&&Math.abs(S-this.contentDOMWidth)>s.charWidth){let{lineHeight:k,charWidth:Q,textHeight:X}=e.docView.measureTextSize();o=k>0&&s.refresh(r,k,Q,X,Math.max(5,S/Q),w),o&&(e.docView.minWidth=0,h|=16)}g>0&&y>0?c=Math.max(g,y):g<0&&y<0&&(c=Math.min(g,y)),Xh();for(let k of this.viewports){let Q=k.from==this.viewport.from?w:e.docView.measureVisibleLineHeights(k);this.heightMap=(o?Ce.empty().applyChanges(this.stateDeco,E.empty,this.heightOracle,[new Ne(0,0,0,e.state.doc.length)]):this.heightMap).updateHeight(s,0,o,new Zo(k.from,Q))}Qi&&(h|=2)}let C=!this.viewportIsAppropriate(this.viewport,c)||this.scrollTarget&&(this.scrollTarget.range.headthis.viewport.to);return C&&(h&2&&(h|=this.updateScaler()),this.viewport=this.getViewport(c,this.scrollTarget),h|=this.updateForViewport()),(h&2||C)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(o?[]:this.lineGaps,e)),h|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,e.docView.enforceCursorAssoc()),h}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(e,t){let i=.5-Math.max(-.5,Math.min(.5,e/1e3/2)),s=this.heightMap,r=this.heightOracle,{visibleTop:o,visibleBottom:l}=this,a=new Oi(s.lineAt(o-i*1e3,G.ByHeight,r,0,0).from,s.lineAt(l+(1-i)*1e3,G.ByHeight,r,0,0).to);if(t){let{head:h}=t.range;if(ha.to){let c=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),f=s.lineAt(h,G.ByPos,r,0,0),u;t.y=="center"?u=(f.top+f.bottom)/2-c/2:t.y=="start"||t.y=="nearest"&&h=l+Math.max(10,Math.min(i,250)))&&s>o-2*1e3&&r>1,o=s<<1;if(this.defaultTextDirection!=z.LTR&&!i)return[];let l=[],a=(c,f,u,d)=>{if(f-cc&&yy.from>=u.from&&y.to<=u.to&&Math.abs(y.from-c)y.fromx));if(!g){if(fS.from<=f&&S.to>=f)){let S=t.moveToLineBoundary(b.cursor(f),!1,!0).head;S>c&&(f=S)}let y=this.gapSize(u,c,f,d),x=i||y<2e6?y:2e6;g=new Ji(c,f,y,x)}l.push(g)},h=c=>{if(c.length2e6)for(let k of e)k.from>=c.from&&k.fromc.from&&a(c.from,d,c,f),pt.draw(this,this.heightOracle.lineWrapping))))}computeVisibleRanges(e){let t=this.stateDeco;this.lineGaps.length&&(t=t.concat(this.lineGapDeco));let i=[];B.spans(t,this.viewport.from,this.viewport.to,{span(r,o){i.push({from:r,to:o})},point(){}},20);let s=0;if(i.length!=this.visibleRanges.length)s=12;else for(let r=0;r=this.viewport.from&&e<=this.viewport.to&&this.viewportLines.find(t=>t.from<=e&&t.to>=e)||Vi(this.heightMap.lineAt(e,G.ByPos,this.heightOracle,0,0),this.scaler)}lineBlockAtHeight(e){return e>=this.viewportLines[0].top&&e<=this.viewportLines[this.viewportLines.length-1].bottom&&this.viewportLines.find(t=>t.top<=e&&t.bottom>=e)||Vi(this.heightMap.lineAt(this.scaler.fromDOM(e),G.ByHeight,this.heightOracle,0,0),this.scaler)}getScrollOffset(){return(this.scrollParent==this.view.scrollDOM?this.scrollParent.scrollTop:(this.scrollParent?this.scrollParent.getBoundingClientRect().top:0)-this.view.contentDOM.getBoundingClientRect().top)*this.scaleY}scrollAnchorAt(e){let t=this.lineBlockAtHeight(e+8);return t.from>=this.viewport.from||this.viewportLines[0].top-e>200?t:this.viewportLines[0]}elementAtHeight(e){return Vi(this.heightMap.blockAt(this.scaler.fromDOM(e),this.heightOracle,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}},Oi=class{constructor(e,t){this.from=e,this.to=t}};function wO(n,e,t){let i=[],s=n,r=0;return B.spans(t,n,e,{span(){},point(o,l){o>s&&(i.push({from:s,to:o}),r+=o-s),s=l}},20),s=1)return e[e.length-1].to;let i=Math.floor(n*t);for(let s=0;;s++){let{from:r,to:o}=e[s],l=o-r;if(i<=l)return r+i;i-=l}}function Jn(n,e){let t=0;for(let{from:i,to:s}of n.ranges){if(e<=s){t+=e-i;break}t+=s-i}return t/n.total}function kO(n,e){for(let t of n)if(e(t))return t}var Eh={toDOM(n){return n},fromDOM(n){return n},scale:1,eq(n){return n==this}};function Dh(n){let e=n.facet(Ts).filter(i=>typeof i!="function"),t=n.facet(sl).filter(i=>typeof i!="function");return t.length&&e.push(B.join(t)),e}var Lo=class n{constructor(e,t,i){let s=0,r=0,o=0;this.viewports=i.map(({from:l,to:a})=>{let h=t.lineAt(l,G.ByPos,e,0,0).top,c=t.lineAt(a,G.ByPos,e,0,0).bottom;return s+=c-h,{from:l,to:a,top:h,bottom:c,domTop:0,domBottom:0}}),this.scale=(7e6-s)/(t.height-s);for(let l of this.viewports)l.domTop=o+(l.top-r)*this.scale,o=l.domBottom=l.domTop+(l.bottom-l.top),r=l.bottom}toDOM(e){for(let t=0,i=0,s=0;;t++){let r=tt.from==e.viewports[i].from&&t.to==e.viewports[i].to):!1}};function Vi(n,e){if(e.scale==1)return n;let t=e.toDOM(n.top),i=e.toDOM(n.bottom);return new je(n.from,n.length,t,i-t,Array.isArray(n._content)?n._content.map(s=>Vi(s,e)):n._content)}var es=$.define({combine:n=>n.join(" ")}),Eo=$.define({combine:n=>n.indexOf(!0)>-1}),Do=We.newName(),zc=We.newName(),Ic=We.newName(),Yc={"&light":"."+zc,"&dark":"."+Ic};function Bo(n,e,t){return new We(e,{finish(i){return/&/.test(i)?i.replace(/&\w*/,s=>{if(s=="&")return n;if(!t||!t[s])throw new RangeError(`Unsupported selector: ${s}`);return t[s]}):n+" "+i}})}var QO=Bo("."+Do,{"&":{position:"relative !important",boxSizing:"border-box","&.cm-focused":{outline:"1px dotted #212121"},display:"flex !important",flexDirection:"column"},".cm-scroller":{display:"flex !important",alignItems:"flex-start !important",fontFamily:"monospace",lineHeight:1.4,height:"100%",overflowX:"auto",position:"relative",zIndex:0,overflowAnchor:"none"},".cm-content":{margin:0,flexGrow:2,flexShrink:0,display:"block",whiteSpace:"pre",wordWrap:"normal",boxSizing:"border-box",minHeight:"100%",padding:"4px 0",outline:"none","&[contenteditable=true]":{WebkitUserModify:"read-write-plaintext-only"}},".cm-lineWrapping":{whiteSpace_fallback:"pre-wrap",whiteSpace:"break-spaces",wordBreak:"break-word",overflowWrap:"anywhere",flexShrink:1},"&light .cm-content":{caretColor:"black"},"&dark .cm-content":{caretColor:"white"},".cm-line":{display:"block",padding:"0 2px 0 6px"},".cm-layer":{position:"absolute",left:0,top:0,contain:"size style","& > *":{position:"absolute"}},"&light .cm-selectionBackground":{background:"#d9d9d9"},"&dark .cm-selectionBackground":{background:"#222"},"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#d7d4f0"},"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#233"},".cm-cursorLayer":{pointerEvents:"none"},"&.cm-focused > .cm-scroller > .cm-cursorLayer":{animation:"steps(1) cm-blink 1.2s infinite"},"@keyframes cm-blink":{"0%":{},"50%":{opacity:0},"100%":{}},"@keyframes cm-blink2":{"0%":{},"50%":{opacity:0},"100%":{}},".cm-cursor, .cm-dropCursor":{borderLeft:"1.2px solid black",marginLeft:"-0.6px",pointerEvents:"none"},".cm-cursor":{display:"none"},"&dark .cm-cursor":{borderLeftColor:"#ddd"},".cm-selectionHandle":{backgroundColor:"currentColor",width:"1.5px"},".cm-selectionHandle-start::before, .cm-selectionHandle-end::before":{content:'""',backgroundColor:"inherit",borderRadius:"50%",width:"8px",height:"8px",position:"absolute",left:"-3.25px"},".cm-selectionHandle-start::before":{top:"-8px"},".cm-selectionHandle-end::before":{bottom:"-8px"},".cm-dropCursor":{position:"absolute"},"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor":{display:"block"},".cm-iso":{unicodeBidi:"isolate"},".cm-announced":{position:"fixed",top:"-10000px"},"@media print":{".cm-announced":{display:"none"}},"&light .cm-activeLine":{backgroundColor:"#cceeff44"},"&dark .cm-activeLine":{backgroundColor:"#99eeff33"},"&light .cm-specialChar":{color:"red"},"&dark .cm-specialChar":{color:"#f78"},".cm-gutters":{flexShrink:0,display:"flex",height:"100%",boxSizing:"border-box",zIndex:200},".cm-gutters-before":{insetInlineStart:0},".cm-gutters-after":{insetInlineEnd:0},"&light .cm-gutters":{backgroundColor:"#f5f5f5",color:"#6c6c6c",border:"0px solid #ddd","&.cm-gutters-before":{borderRightWidth:"1px"},"&.cm-gutters-after":{borderLeftWidth:"1px"}},"&dark .cm-gutters":{backgroundColor:"#333338",color:"#ccc"},".cm-gutter":{display:"flex !important",flexDirection:"column",flexShrink:0,boxSizing:"border-box",minHeight:"100%",overflow:"hidden"},".cm-gutterElement":{boxSizing:"border-box"},".cm-lineNumbers .cm-gutterElement":{padding:"0 3px 0 5px",minWidth:"20px",textAlign:"right",whiteSpace:"nowrap"},"&light .cm-activeLineGutter":{backgroundColor:"#e2f2ff"},"&dark .cm-activeLineGutter":{backgroundColor:"#222227"},".cm-panels":{boxSizing:"border-box",position:"sticky",left:0,right:0,zIndex:300},"&light .cm-panels":{backgroundColor:"#f5f5f5",color:"black"},"&light .cm-panels-top":{borderBottom:"1px solid #ddd"},"&light .cm-panels-bottom":{borderTop:"1px solid #ddd"},"&dark .cm-panels":{backgroundColor:"#333338",color:"white"},".cm-dialog":{padding:"2px 19px 4px 6px",position:"relative","& label":{fontSize:"80%"}},".cm-dialog-close":{position:"absolute",top:"3px",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",fontSize:"14px",padding:"0"},".cm-tab":{display:"inline-block",overflow:"hidden",verticalAlign:"bottom"},".cm-widgetBuffer":{verticalAlign:"text-top",height:"1em",width:0,display:"inline"},".cm-placeholder":{color:"#888",display:"inline-block",verticalAlign:"top",userSelect:"none"},".cm-highlightSpace":{backgroundImage:"radial-gradient(circle at 50% 55%, #aaa 20%, transparent 5%)",backgroundPosition:"center"},".cm-highlightTab":{backgroundImage:`url('data:image/svg+xml,')`,backgroundSize:"auto 100%",backgroundPosition:"right 90%",backgroundRepeat:"no-repeat"},".cm-trailingSpace":{backgroundColor:"#ff332255"},".cm-button":{verticalAlign:"middle",color:"inherit",fontSize:"70%",padding:".2em 1em",borderRadius:"1px"},"&light .cm-button":{backgroundImage:"linear-gradient(#eff1f5, #d9d9df)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#b4b4b4, #d0d3d6)"}},"&dark .cm-button":{backgroundImage:"linear-gradient(#393939, #111)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#111, #333)"}},".cm-textfield":{verticalAlign:"middle",color:"inherit",fontSize:"70%",border:"1px solid silver",padding:".2em .5em"},"&light .cm-textfield":{backgroundColor:"white"},"&dark .cm-textfield":{border:"1px solid #555",backgroundColor:"inherit"}},Yc),vO={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},Hr=T.ie&&T.ie_version<=11,Wo=class{constructor(e){this.view=e,this.active=!1,this.editContext=null,this.selectionRange=new lo,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.printQuery=null,this.parentCheck=-1,this.dom=e.contentDOM,this.observer=new MutationObserver(t=>{for(let i of t)this.queue.push(i);(T.ie&&T.ie_version<=11||T.ios&&e.composing)&&t.some(i=>i.type=="childList"&&i.removedNodes.length||i.type=="characterData"&&i.oldValue.length>i.target.nodeValue.length)?this.flushSoon():this.flush()}),window.EditContext&&T.android&&e.constructor.EDIT_CONTEXT!==!1&&!(T.chrome&&T.chrome_version<126)&&(this.editContext=new _o(e),e.state.facet(ut)&&(e.contentDOM.editContext=this.editContext.editContext)),Hr&&(this.onCharData=t=>{this.queue.push({target:t.target,type:"characterData",oldValue:t.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),window.matchMedia&&(this.printQuery=window.matchMedia("print")),typeof ResizeObserver=="function"&&(this.resizeScroll=new ResizeObserver(()=>{var t;((t=this.view.docView)===null||t===void 0?void 0:t.lastUpdate){this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),t.length>0&&t[t.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent("Event")))},{threshold:[0,.001]}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver(t=>{t.length>0&&t[t.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent("Event"))},{})),this.listenForScroll(),this.readSelectionRange()}onScrollChanged(e){this.view.inputState.runHandlers("scroll",e),this.intersecting&&this.view.measure()}onScroll(e){this.intersecting&&this.flush(!1),this.editContext&&this.view.requestMeasure(this.editContext.measureReq),this.onScrollChanged(e)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout(()=>{this.resizeTimeout=-1,this.view.requestMeasure()},50))}onPrint(e){(e.type=="change"||!e.type)&&!e.matches||(this.view.viewState.printing=!0,this.view.measure(),setTimeout(()=>{this.view.viewState.printing=!1,this.view.requestMeasure()},500))}updateGaps(e){if(this.gapIntersection&&(e.length!=this.gaps.length||this.gaps.some((t,i)=>t!=e[i]))){this.gapIntersection.disconnect();for(let t of e)this.gapIntersection.observe(t);this.gaps=e}}onSelectionChange(e){let t=this.selectionChanged;if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:i}=this,s=this.selectionRange;if(i.state.facet(ut)?i.root.activeElement!=this.dom:!Ni(this.dom,s))return;let r=s.anchorNode&&i.docView.tile.nearest(s.anchorNode);if(r&&r.isWidget()&&r.widget.ignoreEvent(e)){t||(this.selectionChanged=!1);return}(T.ie&&T.ie_version<=11||T.android&&T.chrome)&&!i.state.selection.main.empty&&s.focusNode&&Gi(s.focusNode,s.focusOffset,s.anchorNode,s.anchorOffset)?this.flushSoon():this.flush(!1)}readSelectionRange(){let{view:e}=this,t=rn(e.root);if(!t)return!1;let i=T.safari&&e.root.nodeType==11&&e.root.activeElement==this.dom&&$O(this.view,t)||t;if(!i||this.selectionRange.eq(i))return!1;let s=Ni(this.dom,i);return s&&!this.selectionChanged&&e.inputState.lastFocusTime>Date.now()-200&&e.inputState.lastTouchTime{let r=this.delayedAndroidKey;r&&(this.clearDelayedAndroidKey(),this.view.inputState.lastKeyCode=r.keyCode,this.view.inputState.lastKeyTime=Date.now(),!this.flush()&&r.force&&bi(this.dom,r.key,r.keyCode))};this.flushingAndroidKey=this.view.win.requestAnimationFrame(s)}(!this.delayedAndroidKey||e=="Enter")&&(this.delayedAndroidKey={key:e,keyCode:t,force:this.lastChange{this.delayedFlush=-1,this.flush()}))}forceFlush(){this.delayedFlush>=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()}pendingRecords(){for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}processRecords(){let e=this.pendingRecords();e.length&&(this.queue=[]);let t=-1,i=-1,s=!1;for(let r of e){let o=this.readMutation(r);o&&(o.typeOver&&(s=!0),t==-1?{from:t,to:i}=o:(t=Math.min(o.from,t),i=Math.max(o.to,i)))}return{from:t,to:i,typeOver:s}}readChange(){let{from:e,to:t,typeOver:i}=this.processRecords(),s=this.selectionChanged&&Ni(this.dom,this.selectionRange);if(e<0&&!s)return null;e>-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1;let r=new vo(this.view,e,t,i);return this.view.docView.domChanged={newSel:r.newSel?r.newSel.main:null},r}flush(e=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return!1;e&&this.readSelectionRange();let t=this.readChange();if(!t)return this.view.requestMeasure(),!1;let i=this.view.state,s=Ac(this.view,t);return this.view.state==i&&(t.domChanged||t.newSel&&!gs(this.view.state.selection,t.newSel.main))&&this.view.update([]),s}readMutation(e){let t=this.view.docView.tile.nearest(e.target);if(!t||t.isWidget())return null;if(t.markDirty(e.type=="attributes"),e.type=="childList"){let i=Bh(t,e.previousSibling||e.target.previousSibling,-1),s=Bh(t,e.nextSibling||e.target.nextSibling,1);return{from:i?t.posAfter(i):t.posAtStart,to:s?t.posBefore(s):t.posAtEnd,typeOver:!1}}else return e.type=="characterData"?{from:t.posAtStart,to:t.posAtEnd,typeOver:e.target.nodeValue==e.oldValue}:null}setWindow(e){e!=this.win&&(this.removeWindowListeners(this.win),this.win=e,this.addWindowListeners(this.win))}addWindowListeners(e){e.addEventListener("resize",this.onResize),this.printQuery?this.printQuery.addEventListener?this.printQuery.addEventListener("change",this.onPrint):this.printQuery.addListener(this.onPrint):e.addEventListener("beforeprint",this.onPrint),e.addEventListener("scroll",this.onScroll),e.document.addEventListener("selectionchange",this.onSelectionChange)}removeWindowListeners(e){e.removeEventListener("scroll",this.onScroll),e.removeEventListener("resize",this.onResize),this.printQuery?this.printQuery.removeEventListener?this.printQuery.removeEventListener("change",this.onPrint):this.printQuery.removeListener(this.onPrint):e.removeEventListener("beforeprint",this.onPrint),e.document.removeEventListener("selectionchange",this.onSelectionChange)}update(e){this.editContext&&(this.editContext.update(e),e.startState.facet(ut)!=e.state.facet(ut)&&(e.view.contentDOM.editContext=e.state.facet(ut)?this.editContext.editContext:null))}destroy(){var e,t,i;this.stop(),(e=this.intersection)===null||e===void 0||e.disconnect(),(t=this.gapIntersection)===null||t===void 0||t.disconnect(),(i=this.resizeScroll)===null||i===void 0||i.disconnect();for(let s of this.scrollTargets)s.removeEventListener("scroll",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout),this.win.cancelAnimationFrame(this.delayedFlush),this.win.cancelAnimationFrame(this.flushingAndroidKey),this.editContext&&(this.view.contentDOM.editContext=null,this.editContext.destroy())}};function Bh(n,e,t){for(;e;){let i=F.get(e);if(i&&i.parent==n)return i;let s=e.parentNode;e=s!=n.dom?s:t>0?e.nextSibling:e.previousSibling}return null}function Wh(n,e){let t=e.startContainer,i=e.startOffset,s=e.endContainer,r=e.endOffset,o=n.docView.domAtPos(n.state.selection.main.anchor,1);return Gi(o.node,o.offset,s,r)&&([t,i,s,r]=[s,r,t,i]),{anchorNode:t,anchorOffset:i,focusNode:s,focusOffset:r}}function $O(n,e){if(e.getComposedRanges){let s=e.getComposedRanges(n.root)[0];if(s)return Wh(n,s)}let t=null;function i(s){s.preventDefault(),s.stopImmediatePropagation(),t=s.getTargetRanges()[0]}return n.contentDOM.addEventListener("beforeinput",i,!0),n.dom.ownerDocument.execCommand("indent"),n.contentDOM.removeEventListener("beforeinput",i,!0),t?Wh(n,t):null}var _o=class{constructor(e){this.from=0,this.to=0,this.pendingContextChange=null,this.handlers=Object.create(null),this.composing=null,this.resetRange(e.state);let t=this.editContext=new window.EditContext({text:e.state.doc.sliceString(this.from,this.to),selectionStart:this.toContextPos(Math.max(this.from,Math.min(this.to,e.state.selection.main.anchor))),selectionEnd:this.toContextPos(e.state.selection.main.head)});this.handlers.textupdate=i=>{let s=e.state.selection.main,{anchor:r,head:o}=s,l=this.toEditorPos(i.updateRangeStart),a=this.toEditorPos(i.updateRangeEnd);e.inputState.composing>=0&&!this.composing&&(this.composing={contextBase:i.updateRangeStart,editorBase:l,drifted:!1});let h=a-l>i.text.length;l==this.from&&rthis.to&&(a=r);let c=Mc(e.state.sliceDoc(l,a),i.text,(h?s.from:s.to)-l,h?"end":null);if(!c){let u=b.single(this.toEditorPos(i.selectionStart),this.toEditorPos(i.selectionEnd));gs(u,s)||e.dispatch({selection:u,userEvent:"select"});return}let f={from:c.from+l,to:c.toA+l,insert:E.of(i.text.slice(c.from,c.toB).split(` +`))};if((T.mac||T.android)&&f.from==o-1&&/^\. ?$/.test(i.text)&&e.contentDOM.getAttribute("autocorrect")=="off"&&(f={from:l,to:a,insert:E.of([i.text.replace("."," ")])}),this.pendingContextChange=f,!e.state.readOnly){let u=this.to-this.from+(f.to-f.from+f.insert.length);ol(e,f,b.single(this.toEditorPos(i.selectionStart,u),this.toEditorPos(i.selectionEnd,u)))}this.pendingContextChange&&(this.revertPending(e.state),this.setSelection(e.state)),f.from=0&&!/[\\p{Alphabetic}\\p{Number}_]/.test(t.text.slice(Math.max(0,i.updateRangeStart-1),Math.min(t.text.length,i.updateRangeStart+1)))&&this.handlers.compositionend(i)},this.handlers.characterboundsupdate=i=>{let s=[],r=null;for(let o=this.toEditorPos(i.rangeStart),l=this.toEditorPos(i.rangeEnd);o{let s=[];for(let r of i.getTextFormats()){let o=r.underlineStyle,l=r.underlineThickness;if(!/none/i.test(o)&&!/none/i.test(l)){let a=this.toEditorPos(r.rangeStart),h=this.toEditorPos(r.rangeEnd);if(a{e.inputState.composing<0&&(e.inputState.composing=0,e.inputState.compositionFirstChange=!0)},this.handlers.compositionend=()=>{if(e.inputState.composing=-1,e.inputState.compositionFirstChange=null,this.composing){let{drifted:i}=this.composing;this.composing=null,i&&this.reset(e.state)}};for(let i in this.handlers)t.addEventListener(i,this.handlers[i]);this.measureReq={read:i=>{this.editContext.updateControlBounds(i.contentDOM.getBoundingClientRect());let s=rn(i.root);s&&s.rangeCount&&this.editContext.updateSelectionBounds(s.getRangeAt(0).getBoundingClientRect())}}}applyEdits(e){let t=0,i=!1,s=this.pendingContextChange;return e.changes.iterChanges((r,o,l,a,h)=>{if(i)return;let c=h.length-(o-r);if(s&&o>=s.to)if(s.from==r&&s.to==o&&s.insert.eq(h)){s=this.pendingContextChange=null,t+=c,this.to+=c;return}else s=null,this.revertPending(e.state);if(r+=t,o+=t,o<=this.from)this.from+=c,this.to+=c;else if(rthis.to||this.to-this.from+h.length>3e4){i=!0;return}this.editContext.updateText(this.toContextPos(r),this.toContextPos(o),h.toString()),this.to+=c}t+=c}),s&&!i&&this.revertPending(e.state),!i}update(e){let t=this.pendingContextChange,i=e.startState.selection.main;this.composing&&(this.composing.drifted||!e.changes.touchesRange(i.from,i.to)&&e.transactions.some(s=>!s.isUserEvent("input.type")&&s.changes.touchesRange(this.from,this.to)))?(this.composing.drifted=!0,this.composing.editorBase=e.changes.mapPos(this.composing.editorBase)):!this.applyEdits(e)||!this.rangeIsValid(e.state)?(this.pendingContextChange=null,this.reset(e.state)):(e.docChanged||e.selectionSet||t)&&this.setSelection(e.state),(e.geometryChanged||e.docChanged||e.selectionSet)&&e.view.requestMeasure(this.measureReq)}resetRange(e){let{head:t}=e.selection.main;this.from=Math.max(0,t-1e4),this.to=Math.min(e.doc.length,t+1e4)}reset(e){this.resetRange(e),this.editContext.updateText(0,this.editContext.text.length,e.doc.sliceString(this.from,this.to)),this.setSelection(e)}revertPending(e){let t=this.pendingContextChange;this.pendingContextChange=null,this.editContext.updateText(this.toContextPos(t.from),this.toContextPos(t.from+t.insert.length),e.doc.sliceString(t.from,t.to))}setSelection(e){let{main:t}=e.selection,i=this.toContextPos(Math.max(this.from,Math.min(this.to,t.anchor))),s=this.toContextPos(t.head);(this.editContext.selectionStart!=i||this.editContext.selectionEnd!=s)&&this.editContext.updateSelection(i,s)}rangeIsValid(e){let{head:t}=e.selection.main;return!(this.from>0&&t-this.from<500||this.to1e4*3)}toEditorPos(e,t=this.to-this.from){e=Math.min(e,t);let i=this.composing;return i&&i.drifted?i.editorBase+(e-i.contextBase):e+this.from}toContextPos(e){let t=this.composing;return t&&t.drifted?t.contextBase+(e-t.editorBase):e-this.from}destroy(){for(let e in this.handlers)this.editContext.removeEventListener(e,this.handlers[e])}},v=class n{get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return!!this.inputState&&this.inputState.composing>0}get compositionStarted(){return!!this.inputState&&this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}constructor(e={}){var t;this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.contentDOM=document.createElement("div"),this.scrollDOM=document.createElement("div"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className="cm-scroller",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement("div"),this.announceDOM.className="cm-announced",this.announceDOM.setAttribute("aria-live","polite"),this.dom=document.createElement("div"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),e.parent&&e.parent.appendChild(this.dom);let{dispatch:i}=e;this.dispatchTransactions=e.dispatchTransactions||i&&(s=>s.forEach(r=>i(r,this)))||(s=>this.update(s)),this.dispatch=this.dispatch.bind(this),this._root=e.root||xp(e.parent)||document,this.viewState=new xs(this,e.state||Y.create(e)),e.scrollTo&&e.scrollTo.is(Un)&&(this.viewState.scrollTarget=e.scrollTo.value.clip(this.viewState.state)),this.plugins=this.state.facet(pi).map(s=>new Fi(s));for(let s of this.plugins)s.update(this);this.observer=new Wo(this),this.inputState=new $o(this),this.inputState.ensureHandlers(this.plugins),this.docView=new Os(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),!((t=document.fonts)===null||t===void 0)&&t.ready&&document.fonts.ready.then(()=>{this.viewState.mustMeasureContent="refresh",this.requestMeasure()})}dispatch(...e){let t=e.length==1&&e[0]instanceof ie?e:e.length==1&&Array.isArray(e[0])?e[0]:[this.state.update(...e)];this.dispatchTransactions(t,this)}update(e){if(this.updateState!=0)throw new Error("Calls to EditorView.update are not allowed while an update is in progress");let t=!1,i=!1,s,r=this.state;for(let u of e){if(u.startState!=r)throw new RangeError("Trying to update state with a transaction that doesn't start from the previous state.");r=u.state}if(this.destroyed){this.viewState.state=r;return}let o=this.hasFocus,l=0,a=null;e.some(u=>u.annotation(Bc))?(this.inputState.notifiedFocused=o,l=1):o!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=o,a=Wc(r,o),a||(l=1));let h=this.observer.delayedAndroidKey,c=null;if(h?(this.observer.clearDelayedAndroidKey(),c=this.observer.readChange(),(c&&!this.state.doc.eq(r.doc)||!this.state.selection.eq(r.selection))&&(c=null)):this.observer.clear(),r.facet(Y.phrases)!=this.state.facet(Y.phrases))return this.setState(r);s=ds.create(this,r,e),s.flags|=l;let f=this.viewState.scrollTarget;try{this.updateState=2;for(let u of e){if(f&&(f=f.map(u.changes)),u.scrollIntoView){let{main:d}=u.state.selection,{x:p,y:O}=this.state.facet(n.cursorScrollMargin);f=new Ui(d.empty?d:b.cursor(d.head,d.head>d.anchor?-1:1),"nearest","nearest",O,p)}for(let d of u.effects)d.is(Un)&&(f=d.value.clip(this.state))}this.viewState.update(s,f),this.bidiCache=Ss.update(this.bidiCache,s.changes),s.empty||(this.updatePlugins(s),this.inputState.update(s)),t=this.docView.update(s),this.state.facet(qi)!=this.styleModules&&this.mountStyles(),i=this.updateAttrs(),this.showAnnouncements(e),this.docView.updateSelection(t,e.some(u=>u.isUserEvent("select.pointer")))}finally{this.updateState=0}if(s.startState.facet(es)!=s.state.facet(es)&&(this.viewState.mustMeasureContent=!0),(t||i||f||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),t&&this.docViewUpdate(),!s.empty)for(let u of this.state.facet(fo))try{u(s)}catch(d){ae(this.state,d,"update listener")}(a||c)&&Promise.resolve().then(()=>{a&&this.state==a.startState&&this.dispatch(a),c&&!Ac(this,c)&&h.force&&bi(this.contentDOM,h.key,h.keyCode)})}setState(e){if(this.updateState!=0)throw new Error("Calls to EditorView.setState are not allowed while an update is in progress");if(this.destroyed){this.viewState.state=e;return}this.updateState=2;let t=this.hasFocus;try{for(let i of this.plugins)i.destroy(this);this.viewState=new xs(this,e),this.plugins=e.facet(pi).map(i=>new Fi(i)),this.pluginMap.clear();for(let i of this.plugins)i.update(this);this.docView.destroy(),this.docView=new Os(this),this.inputState.ensureHandlers(this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}t&&this.focus(),this.requestMeasure()}updatePlugins(e){let t=e.startState.facet(pi),i=e.state.facet(pi);if(t!=i){let s=[];for(let r of i){let o=t.indexOf(r);if(o<0)s.push(new Fi(r));else{let l=this.plugins[o];l.mustUpdate=e,s.push(l)}}for(let r of this.plugins)r.mustUpdate!=e&&r.destroy(this);this.plugins=s,this.pluginMap.clear()}else for(let s of this.plugins)s.mustUpdate=e;for(let s=0;s-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.observer.delayedAndroidKey){this.measureScheduled=-1,this.requestMeasure();return}this.measureScheduled=0,e&&this.observer.forceFlush();let t=null,i=this.viewState.scrollParent,s=this.viewState.getScrollOffset(),{scrollAnchorPos:r,scrollAnchorHeight:o}=this.viewState;Math.abs(s-this.viewState.scrollOffset)>1&&(o=-1),this.viewState.scrollAnchorHeight=-1;try{for(let l=0;;l++){if(o<0)if(rc(i||this.win))r=-1,o=this.viewState.heightMap.height;else{let d=this.viewState.scrollAnchorAt(s);r=d.from,o=d.top}this.updateState=1;let a=this.viewState.measure();if(!a&&!this.measureRequests.length&&this.viewState.scrollTarget==null)break;if(l>5){console.warn(this.measureRequests.length?"Measure loop restarted more than 5 times":"Viewport failed to stabilize");break}let h=[];a&4||([this.measureRequests,h]=[h,this.measureRequests]);let c=h.map(d=>{try{return d.read(this)}catch(p){return ae(this.state,p),_h}}),f=ds.create(this,this.state,[]),u=!1;f.flags|=a,t?t.flags|=a:t=f,this.updateState=2,f.empty||(this.updatePlugins(f),this.inputState.update(f),this.updateAttrs(),u=this.docView.update(f),u&&this.docViewUpdate());for(let d=0;d1||p<-1)&&(i==this.scrollDOM||this.hasFocus||Math.max(this.inputState.lastWheelEvent,this.inputState.lastTouchTime)>Date.now()-100)){s=s+p,i?i.scrollTop+=p:this.win.scrollBy(0,p),o=-1;continue}}break}}}finally{this.updateState=0,this.measureScheduled=-1}if(t&&!t.empty)for(let l of this.state.facet(fo))l(t)}get themeClasses(){return Do+" "+(this.state.facet(Eo)?Ic:zc)+" "+this.state.facet(es)}updateAttrs(){let e=zh(this,kc,{class:"cm-editor"+(this.hasFocus?" cm-focused ":" ")+this.themeClasses}),t={spellcheck:"false",autocorrect:"off",autocapitalize:"off",writingsuggestions:"false",translate:"no",contenteditable:this.state.facet(ut)?"true":"false",class:"cm-content",style:`${T.tabSize}: ${this.state.tabSize}`,role:"textbox","aria-multiline":"true"};this.state.readOnly&&(t["aria-readonly"]="true"),zh(this,nl,t);let i=this.observer.ignore(()=>{let s=bh(this.contentDOM,this.contentAttrs,t),r=bh(this.dom,this.editorAttrs,e);return s||r});return this.editorAttrs=e,this.contentAttrs=t,i}showAnnouncements(e){let t=!0;for(let i of e)for(let s of i.effects)if(s.is(n.announce)){t&&(this.announceDOM.textContent=""),t=!1;let r=this.announceDOM.appendChild(document.createElement("div"));r.textContent=s.value}}mountStyles(){this.styleModules=this.state.facet(qi);let e=this.state.facet(n.cspNonce);We.mount(this.root,this.styleModules.concat(QO).reverse(),e?{nonce:e}:void 0)}readMeasured(){if(this.updateState==2)throw new Error("Reading the editor layout isn't allowed during an update");this.updateState==0&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(e){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame(()=>this.measure())),e){if(this.measureRequests.indexOf(e)>-1)return;if(e.key!=null){for(let t=0;ti.plugin==e)||null),t&&t.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}get scaleX(){return this.viewState.scaleX}get scaleY(){return this.viewState.scaleY}elementAtHeight(e){return this.readMeasured(),this.viewState.elementAtHeight(e)}lineBlockAtHeight(e){return this.readMeasured(),this.viewState.lineBlockAtHeight(e)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(e){return this.viewState.lineBlockAt(e)}get contentHeight(){return this.viewState.contentHeight}moveByChar(e,t,i){return Fr(this,e,vh(this,e,t,i))}moveByGroup(e,t){return Fr(this,e,vh(this,e,t,i=>Up(this,e.head,i)))}visualLineSide(e,t){let i=this.bidiSpans(e),s=this.textDirectionAt(e.from),r=i[t?i.length-1:0];return b.cursor(r.side(t,s)+e.from,r.forward(!t,s)?1:-1)}moveToLineBoundary(e,t,i=!0){return Gp(this,e,t,i)}moveVertically(e,t,i){return Fr(this,e,Fp(this,e,t,i))}domAtPos(e,t=1){return this.docView.domAtPos(e,t)}posAtDOM(e,t=0){return this.docView.posFromDOM(e,t)}posAtCoords(e,t=!0){this.readMeasured();let i=wo(this,e,t);return i&&i.pos}posAndSideAtCoords(e,t=!0){return this.readMeasured(),wo(this,e,t)}coordsAtPos(e,t=1){this.readMeasured();let i=this.docView.coordsAt(e,t);if(!i||i.left==i.right)return i;let s=this.state.doc.lineAt(e),r=this.bidiSpans(s),o=r[Ie.find(r,e-s.from,-1,t)];return us(i,o.dir==z.LTR==t>0)}coordsForChar(e){return this.readMeasured(),this.docView.coordsForChar(e)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(e){return!this.state.facet(bc)||ethis.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(e))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(e){if(e.length>PO)return fc(e.length);let t=this.textDirectionAt(e.from),i;for(let r of this.bidiCache)if(r.from==e.from&&r.dir==t&&(r.fresh||cc(r.isolates,i=wh(this,e))))return r.order;i||(i=wh(this,e));let s=Tp(e.text,t,i);return this.bidiCache.push(new Ss(e.from,e.to,t,i,!0,s)),s}get hasFocus(){var e;return(this.dom.ownerDocument.hasFocus()||T.safari&&((e=this.inputState)===null||e===void 0?void 0:e.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore(()=>{sc(this.contentDOM),this.docView.updateSelection()})}setRoot(e){this._root!=e&&(this._root=e,this.observer.setWindow((e.nodeType==9?e:e.ownerDocument).defaultView||window),this.mountStyles())}destroy(){this.root.activeElement==this.contentDOM&&this.contentDOM.blur();for(let e of this.plugins)e.destroy(this);this.plugins=[],this.inputState.destroy(),this.docView.destroy(),this.dom.remove(),this.observer.destroy(),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(e,t={}){var i,s,r,o;return Un.of(new Ui(typeof e=="number"?b.cursor(e):e,(i=t.y)!==null&&i!==void 0?i:"nearest",(s=t.x)!==null&&s!==void 0?s:"nearest",(r=t.yMargin)!==null&&r!==void 0?r:5,(o=t.xMargin)!==null&&o!==void 0?o:5))}scrollSnapshot(){let{scrollTop:e,scrollLeft:t}=this.scrollDOM,i=this.viewState.scrollAnchorAt(e);return Un.of(new Ui(b.cursor(i.from),"start","start",i.top-e,t,!0))}setTabFocusMode(e){e==null?this.inputState.tabFocusMode=this.inputState.tabFocusMode<0?0:-1:typeof e=="boolean"?this.inputState.tabFocusMode=e?0:-1:this.inputState.tabFocusMode!=0&&(this.inputState.tabFocusMode=Date.now()+e)}static domEventHandlers(e){return H.define(()=>({}),{eventHandlers:e})}static domEventObservers(e){return H.define(()=>({}),{eventObservers:e})}static theme(e,t){let i=We.newName(),s=[es.of(i),qi.of(Bo(`.${i}`,e))];return t&&t.dark&&s.push(Eo.of(!0)),s}static baseTheme(e){return Se.lowest(qi.of(Bo("."+Do,e,Yc)))}static findFromDOM(e){var t;let i=e.querySelector(".cm-content"),s=i&&F.get(i)||F.get(e);return((t=s?.root)===null||t===void 0?void 0:t.view)||null}};v.styleModule=qi;v.inputHandler=gc;v.clipboardInputFilter=tl;v.clipboardOutputFilter=il;v.scrollHandler=Sc;v.focusChangeEffect=yc;v.perLineTextDirection=bc;v.exceptionSink=mc;v.updateListener=fo;v.editable=ut;v.mouseSelectionStyle=Oc;v.dragMovesSelection=pc;v.clickAddsSelectionRange=dc;v.decorations=Ts;v.blockWrappers=Qc;v.outerDecorations=sl;v.atomicRanges=ln;v.bidiIsolatedRanges=vc;v.cursorScrollMargin=$.define({combine:n=>{let e=5,t=5;for(let i of n)typeof i=="number"?e=t=i:{x:e,y:t}=i;return{x:e,y:t}}});v.scrollMargins=$c;v.darkTheme=Eo;v.cspNonce=$.define({combine:n=>n.length?n[0]:""});v.contentAttributes=nl;v.editorAttributes=kc;v.lineWrapping=v.contentAttributes.of({class:"cm-lineWrapping"});v.announce=A.define();var PO=4096,_h={},Ss=class n{constructor(e,t,i,s,r,o){this.from=e,this.to=t,this.dir=i,this.isolates=s,this.fresh=r,this.order=o}static update(e,t){if(t.empty&&!e.some(r=>r.fresh))return e;let i=[],s=e.length?e[e.length-1].dir:z.LTR;for(let r=Math.max(0,e.length-10);r=0;s--){let r=i[s],o=typeof r=="function"?r(n):r;o&&Ko(o,t)}return t}var TO=T.mac?"mac":T.windows?"win":T.linux?"linux":"key";function CO(n,e){let t=n.split(/-(?!$)/),i=t[t.length-1];i=="Space"&&(i=" ");let s,r,o,l;for(let a=0;ai.concat(s),[]))),t}function Vc(n,e,t){return jc(qc(n.state),e,n,t)}var xt=null,AO=4e3;function MO(n,e=TO){let t=Object.create(null),i=Object.create(null),s=(o,l)=>{let a=i[o];if(a==null)i[o]=l;else if(a!=l)throw new Error("Key binding "+o+" is used both as a regular binding and as a multi-stroke prefix")},r=(o,l,a,h,c)=>{var f,u;let d=t[o]||(t[o]=Object.create(null)),p=l.split(/ (?!$)/).map(y=>CO(y,e));for(let y=1;y{let C=xt={view:S,prefix:x,scope:o};return setTimeout(()=>{xt==C&&(xt=null)},AO),!0}]})}let O=p.join(" ");s(O,!1);let g=d[O]||(d[O]={preventDefault:!1,stopPropagation:!1,run:((u=(f=d._any)===null||f===void 0?void 0:f.run)===null||u===void 0?void 0:u.slice())||[]});a&&g.run.push(a),h&&(g.preventDefault=!0),c&&(g.stopPropagation=!0)};for(let o of n){let l=o.scope?o.scope.split(" "):["editor"];if(o.any)for(let h of l){let c=t[h]||(t[h]=Object.create(null));c._any||(c._any={preventDefault:!1,stopPropagation:!1,run:[]});let{any:f}=o;for(let u in c)c[u].run.push(d=>f(d,zo))}let a=o[e]||o.key;if(a)for(let h of l)r(h,a,o.run,o.preventDefault,o.stopPropagation),o.shift&&r(h,"Shift-"+a,o.shift,o.preventDefault,o.stopPropagation)}return t}var zo=null;function jc(n,e,t,i){zo=e;let s=ph(e),r=le(s,0),o=Te(r)==s.length&&s!=" ",l="",a=!1,h=!1,c=!1;xt&&xt.view==t&&xt.scope==i&&(l=xt.prefix+" ",Xc.indexOf(e.keyCode)<0&&(h=!0,xt=null));let f=new Set,u=g=>{if(g){for(let y of g.run)if(!f.has(y)&&(f.add(y),y(t)))return g.stopPropagation&&(c=!0),!0;g.preventDefault&&(g.stopPropagation&&(c=!0),h=!0)}return!1},d=n[i],p,O;return d&&(u(d[l+ts(s,e,!o)])?a=!0:o&&(e.altKey||e.metaKey||e.ctrlKey)&&!(T.windows&&e.ctrlKey&&e.altKey)&&!(T.mac&&e.altKey&&!(e.ctrlKey||e.metaKey))&&(p=ft[e.keyCode])&&p!=s?(u(d[l+ts(p,e,!0)])||e.shiftKey&&(O=ui[e.keyCode])!=s&&O!=p&&u(d[l+ts(O,e,!1)]))&&(a=!0):o&&e.shiftKey&&u(d[l+ts(s,e,!0)])&&(a=!0),!a&&u(d._any)&&(a=!0)),h&&(a=!0),a&&c&&e.stopPropagation(),zo=null,a}var It=class n{constructor(e,t,i,s,r){this.className=e,this.left=t,this.top=i,this.width=s,this.height=r}draw(){let e=document.createElement("div");return e.className=this.className,this.adjust(e),e}update(e,t){return t.className!=this.className?!1:(this.adjust(e),!0)}adjust(e){e.style.left=this.left+"px",e.style.top=this.top+"px",this.width!=null&&(e.style.width=this.width+"px"),e.style.height=this.height+"px"}eq(e){return this.left==e.left&&this.top==e.top&&this.width==e.width&&this.height==e.height&&this.className==e.className}static forRange(e,t,i){if(i.empty){let s=e.coordsAtPos(i.head,i.assoc||1);if(!s)return[];let r=Nc(e);return[new n(t,s.left-r.left,s.top-r.top,null,s.bottom-s.top)]}else return RO(e,t,i)}};function Nc(n){let e=n.scrollDOM.getBoundingClientRect();return{left:(n.textDirection==z.LTR?e.left:e.right-n.scrollDOM.clientWidth*n.scaleX)-n.scrollDOM.scrollLeft*n.scaleX,top:e.top-n.scrollDOM.scrollTop*n.scaleY}}function Yh(n,e,t,i){let s=n.coordsAtPos(e,t*2);if(!s)return i;let r=n.dom.getBoundingClientRect(),o=(s.top+s.bottom)/2,l=n.posAtCoords({x:r.left+1,y:o}),a=n.posAtCoords({x:r.right-1,y:o});return l==null||a==null?i:{from:Math.max(i.from,Math.min(l,a)),to:Math.min(i.to,Math.max(l,a))}}function RO(n,e,t){if(t.to<=n.viewport.from||t.from>=n.viewport.to)return[];let i=Math.max(t.from,n.viewport.from),s=Math.min(t.to,n.viewport.to),r=n.textDirection==z.LTR,o=n.contentDOM,l=o.getBoundingClientRect(),a=Nc(n),h=o.querySelector(".cm-line"),c=h&&window.getComputedStyle(h),f=l.left+(c?parseInt(c.paddingLeft)+Math.min(0,parseInt(c.textIndent)):0),u=l.right-(c?parseInt(c.paddingRight):0),d=So(n,i,1),p=So(n,s,-1),O=d.type==he.Text?d:null,g=p.type==he.Text?p:null;if(O&&(n.lineWrapping||d.widgetLineBreaks)&&(O=Yh(n,i,1,O)),g&&(n.lineWrapping||p.widgetLineBreaks)&&(g=Yh(n,s,-1,g)),O&&g&&O.from==g.from&&O.to==g.to)return x(S(t.from,t.to,O));{let w=O?S(t.from,null,O):C(d,!1),k=g?S(null,t.to,g):C(p,!0),Q=[];return(O||d).to<(g||p).from-(O&&g?1:0)||d.widgetLineBreaks>1&&w.bottom+n.defaultLineHeight/2M&&_.from=Oe)break;Ee>N&&L(Math.max(oe,N),w==null&&oe<=M,Math.min(Ee,Oe),k==null&&Ee>=I,tt.dir)}if(N=ve.to+1,N>=Oe)break}return V.length==0&&L(M,w==null,I,k==null,n.textDirection),{top:X,bottom:D,horizontal:V}}function C(w,k){let Q=l.top+(k?w.top:w.bottom);return{top:Q,bottom:Q,horizontal:[]}}}function XO(n,e){return n.constructor==e.constructor&&n.eq(e)}var Io=class{constructor(e,t){this.view=e,this.layer=t,this.drawn=[],this.scaleX=1,this.scaleY=1,this.measureReq={read:this.measure.bind(this),write:this.draw.bind(this)},this.dom=e.scrollDOM.appendChild(document.createElement("div")),this.dom.classList.add("cm-layer"),t.above&&this.dom.classList.add("cm-layer-above"),t.class&&this.dom.classList.add(t.class),this.scale(),this.dom.setAttribute("aria-hidden","true"),this.setOrder(e.state),e.requestMeasure(this.measureReq),t.mount&&t.mount(this.dom,e)}update(e){e.startState.facet(os)!=e.state.facet(os)&&this.setOrder(e.state),(this.layer.update(e,this.dom)||e.geometryChanged)&&(this.scale(),e.view.requestMeasure(this.measureReq))}docViewUpdate(e){this.layer.updateOnDocViewUpdate!==!1&&e.requestMeasure(this.measureReq)}setOrder(e){let t=0,i=e.facet(os);for(;t!XO(t,this.drawn[i]))){let t=this.dom.firstChild,i=0;for(let s of e)s.update&&t&&s.constructor&&this.drawn[i].constructor&&s.update(t,this.drawn[i])?(t=t.nextSibling,i++):this.dom.insertBefore(s.draw(),t);for(;t;){let s=t.nextSibling;t.remove(),t=s}this.drawn=e,T.webkit&&(this.dom.style.display=this.dom.firstChild?"":"none")}}destroy(){this.layer.destroy&&this.layer.destroy(this.dom,this.view),this.dom.remove()}},os=$.define();function Gc(n){return[H.define(e=>new Io(e,n)),os.of(n)]}var vi=$.define({combine(n){return ue(n,{cursorBlinkRate:1200,drawRangeCursor:!0,iosSelectionHandles:!0},{cursorBlinkRate:(e,t)=>Math.min(e,t),drawRangeCursor:(e,t)=>e||t})}});function Uc(n={}){return[vi.of(n),LO,EO,DO,xc.of(!0)]}function Fc(n){return n.startState.facet(vi)!=n.state.facet(vi)}var LO=Gc({above:!0,markers(n){let{state:e}=n,t=e.facet(vi),i=[];for(let s of e.selection.ranges){let r=s==e.selection.main;if(s.empty||t.drawRangeCursor&&!(r&&T.ios&&t.iosSelectionHandles)){let o=r?"cm-cursor cm-cursor-primary":"cm-cursor cm-cursor-secondary",l=s.empty?s:b.cursor(s.head,s.assoc);for(let a of It.forRange(n,o,l))i.push(a)}}return i},update(n,e){n.transactions.some(i=>i.selection)&&(e.style.animationName=e.style.animationName=="cm-blink"?"cm-blink2":"cm-blink");let t=Fc(n);return t&&qh(n.state,e),n.docChanged||n.selectionSet||t},mount(n,e){qh(e.state,n)},class:"cm-cursorLayer"});function qh(n,e){e.style.animationDuration=n.facet(vi).cursorBlinkRate+"ms"}var EO=Gc({above:!1,markers(n){let e=[],{main:t,ranges:i}=n.state.selection;for(let s of i)if(!s.empty)for(let r of It.forRange(n,"cm-selectionBackground",s))e.push(r);if(T.ios&&!t.empty&&n.state.facet(vi).iosSelectionHandles){for(let s of It.forRange(n,"cm-selectionHandle cm-selectionHandle-start",b.cursor(t.from,1)))e.push(s);for(let s of It.forRange(n,"cm-selectionHandle cm-selectionHandle-end",b.cursor(t.to,1)))e.push(s)}return e},update(n,e){return n.docChanged||n.selectionSet||n.viewportChanged||Fc(n)},class:"cm-selectionLayer"}),DO=Se.highest(v.theme({".cm-line":{"& ::selection, &::selection":{backgroundColor:"transparent !important"},caretColor:"transparent !important"},".cm-content":{caretColor:"transparent !important","& :focus":{caretColor:"initial !important","&::selection, & ::selection":{backgroundColor:"Highlight !important"}}}})),Hc=A.define({map(n,e){return n==null?null:e.mapPos(n)}}),ji=K.define({create(){return null},update(n,e){return n!=null&&(n=e.changes.mapPos(n)),e.effects.reduce((t,i)=>i.is(Hc)?i.value:t,n)}}),BO=H.fromClass(class{constructor(n){this.view=n,this.cursor=null,this.measureReq={read:this.readPos.bind(this),write:this.drawCursor.bind(this)}}update(n){var e;let t=n.state.field(ji);t==null?this.cursor!=null&&((e=this.cursor)===null||e===void 0||e.remove(),this.cursor=null):(this.cursor||(this.cursor=this.view.scrollDOM.appendChild(document.createElement("div")),this.cursor.className="cm-dropCursor"),(n.startState.field(ji)!=t||n.docChanged||n.geometryChanged)&&this.view.requestMeasure(this.measureReq))}readPos(){let{view:n}=this,e=n.state.field(ji),t=e!=null&&n.coordsAtPos(e);if(!t)return null;let i=n.scrollDOM.getBoundingClientRect();return{left:t.left-i.left+n.scrollDOM.scrollLeft*n.scaleX,top:t.top-i.top+n.scrollDOM.scrollTop*n.scaleY,height:t.bottom-t.top}}drawCursor(n){if(this.cursor){let{scaleX:e,scaleY:t}=this.view;n?(this.cursor.style.left=n.left/e+"px",this.cursor.style.top=n.top/t+"px",this.cursor.style.height=n.height/t+"px"):this.cursor.style.left="-100000px"}}destroy(){this.cursor&&this.cursor.remove()}setDropPos(n){this.view.state.field(ji)!=n&&this.view.dispatch({effects:Hc.of(n)})}},{eventObservers:{dragover(n){this.setDropPos(this.view.posAtCoords({x:n.clientX,y:n.clientY}))},dragleave(n){(n.target==this.view.contentDOM||!this.view.contentDOM.contains(n.relatedTarget))&&this.setDropPos(null)},dragend(){this.setDropPos(null)},drop(){this.setDropPos(null)}}});function Kc(){return[ji,BO]}function Vh(n,e,t,i,s){e.lastIndex=0;for(let r=n.iterRange(t,i),o=t,l;!r.next().done;o+=r.value.length)if(!r.lineBreak)for(;l=e.exec(r.value);)s(o+l.index,l)}function WO(n,e){let t=n.visibleRanges;if(t.length==1&&t[0].from==n.viewport.from&&t[0].to==n.viewport.to)return t;let i=[];for(let{from:s,to:r}of t)s=Math.max(n.state.doc.lineAt(s).from,s-e),r=Math.min(n.state.doc.lineAt(r).to,r+e),i.length&&i[i.length-1].to>=s?i[i.length-1].to=r:i.push({from:s,to:r});return i}var Yo=class{constructor(e){let{regexp:t,decoration:i,decorate:s,boundary:r,maxLength:o=1e3}=e;if(!t.global)throw new RangeError("The regular expression given to MatchDecorator should have its 'g' flag set");if(this.regexp=t,s)this.addMatch=(l,a,h,c)=>s(c,h,h+l[0].length,l,a);else if(typeof i=="function")this.addMatch=(l,a,h,c)=>{let f=i(l,a,h);f&&c(h,h+l[0].length,f)};else if(i)this.addMatch=(l,a,h,c)=>c(h,h+l[0].length,i);else throw new RangeError("Either 'decorate' or 'decoration' should be provided to MatchDecorator");this.boundary=r,this.maxLength=o}createDeco(e){let t=new Pe,i=t.add.bind(t);for(let{from:s,to:r}of WO(e,this.maxLength))Vh(e.state.doc,this.regexp,s,r,(o,l)=>this.addMatch(l,e,o,i));return t.finish()}updateDeco(e,t){let i=1e9,s=-1;return e.docChanged&&e.changes.iterChanges((r,o,l,a)=>{a>=e.view.viewport.from&&l<=e.view.viewport.to&&(i=Math.min(l,i),s=Math.max(a,s))}),e.viewportMoved||s-i>1e3?this.createDeco(e.view):s>-1?this.updateRange(e.view,t.map(e.changes),i,s):t}updateRange(e,t,i,s){for(let r of e.visibleRanges){let o=Math.max(r.from,i),l=Math.min(r.to,s);if(l>=o){let a=e.state.doc.lineAt(o),h=a.toa.from;o--)if(this.boundary.test(a.text[o-1-a.from])){c=o;break}for(;lu.push(y.range(O,g));if(a==h)for(this.regexp.lastIndex=c-a.from;(d=this.regexp.exec(a.text))&&d.indexthis.addMatch(g,e,O,p));t=t.update({filterFrom:c,filterTo:f,filter:(O,g)=>Of,add:u})}}return t}},qo=/x/.unicode!=null?"gu":"g",_O=new RegExp(`[\0-\b +-\x7F-\x9F\xAD\u061C\u200B\u200E\u200F\u2028\u2029\u202D\u202E\u2066\u2067\u2069\uFEFF\uFFF9-\uFFFC]`,qo),zO={0:"null",7:"bell",8:"backspace",10:"newline",11:"vertical tab",13:"carriage return",27:"escape",8203:"zero width space",8204:"zero width non-joiner",8205:"zero width joiner",8206:"left-to-right mark",8207:"right-to-left mark",8232:"line separator",8237:"left-to-right override",8238:"right-to-left override",8294:"left-to-right isolate",8295:"right-to-left isolate",8297:"pop directional isolate",8233:"paragraph separator",65279:"zero width no-break space",65532:"object replacement"},Kr=null;function IO(){var n;if(Kr==null&&typeof document<"u"&&document.body){let e=document.body.style;Kr=((n=e.tabSize)!==null&&n!==void 0?n:e.MozTabSize)!=null}return Kr||!1}var ls=$.define({combine(n){let e=ue(n,{render:null,specialChars:_O,addSpecialChars:null});return(e.replaceTabs=!IO())&&(e.specialChars=new RegExp(" |"+e.specialChars.source,qo)),e.addSpecialChars&&(e.specialChars=new RegExp(e.specialChars.source+"|"+e.addSpecialChars.source,qo)),e}});function Jc(n={}){return[ls.of(n),YO()]}var jh=null;function YO(){return jh||(jh=H.fromClass(class{constructor(n){this.view=n,this.decorations=Z.none,this.decorationCache=Object.create(null),this.decorator=this.makeDecorator(n.state.facet(ls)),this.decorations=this.decorator.createDeco(n)}makeDecorator(n){return new Yo({regexp:n.specialChars,decoration:(e,t,i)=>{let{doc:s}=t.state,r=le(e[0],0);if(r==9){let o=s.lineAt(i),l=t.state.tabSize,a=ct(o.text,l,i-o.from);return Z.replace({widget:new jo((l-a%l)*this.view.defaultCharacterWidth/this.view.scaleX)})}return this.decorationCache[r]||(this.decorationCache[r]=Z.replace({widget:new Vo(n,r)}))},boundary:n.replaceTabs?void 0:/[^]/})}update(n){let e=n.state.facet(ls);n.startState.facet(ls)!=e?(this.decorator=this.makeDecorator(e),this.decorations=this.decorator.createDeco(n.view)):this.decorations=this.decorator.updateDeco(n,this.decorations)}},{decorations:n=>n.decorations}))}var qO="\u2022";function VO(n){return n>=32?qO:n==10?"\u2424":String.fromCharCode(9216+n)}var Vo=class extends ye{constructor(e,t){super(),this.options=e,this.code=t}eq(e){return e.code==this.code}toDOM(e){let t=VO(this.code),i=e.state.phrase("Control character")+" "+(zO[this.code]||"0x"+this.code.toString(16)),s=this.options.render&&this.options.render(this.code,i,t);if(s)return s;let r=document.createElement("span");return r.textContent=t,r.title=i,r.setAttribute("aria-label",i),r.className="cm-specialChar",r}ignoreEvent(){return!1}},jo=class extends ye{constructor(e){super(),this.width=e}eq(e){return e.width==this.width}toDOM(){let e=document.createElement("span");return e.textContent=" ",e.className="cm-tab",e.style.width=this.width+"px",e}ignoreEvent(){return!1}};function ef(){return NO}var jO=Z.line({class:"cm-activeLine"}),NO=H.fromClass(class{constructor(n){this.decorations=this.getDeco(n)}update(n){(n.docChanged||n.selectionSet)&&(this.decorations=this.getDeco(n.view))}getDeco(n){let e=-1,t=[];for(let i of n.state.selection.ranges){let s=n.lineBlockAt(i.head);s.from>e&&(t.push(jO.range(s.from)),e=s.from)}return Z.set(t)}},{decorations:n=>n.decorations});var No=2e3;function GO(n,e,t){let i=Math.min(e.line,t.line),s=Math.max(e.line,t.line),r=[];if(e.off>No||t.off>No||e.col<0||t.col<0){let o=Math.min(e.off,t.off),l=Math.max(e.off,t.off);for(let a=i;a<=s;a++){let h=n.doc.line(a);h.length<=l&&r.push(b.range(h.from+o,h.to+l))}}else{let o=Math.min(e.col,t.col),l=Math.max(e.col,t.col);for(let a=i;a<=s;a++){let h=n.doc.line(a),c=Nn(h.text,o,n.tabSize,!0);if(c<0)r.push(b.cursor(h.to));else{let f=Nn(h.text,l,n.tabSize);r.push(b.range(h.from+c,h.from+f))}}}return r}function UO(n,e){let t=n.coordsAtPos(n.viewport.from);return t?Math.round(Math.abs((t.left-e)/n.defaultCharacterWidth)):-1}function Nh(n,e){let t=n.posAtCoords({x:e.clientX,y:e.clientY},!1),i=n.state.doc.lineAt(t),s=t-i.from,r=s>No?-1:s==i.length?UO(n,e.clientX):ct(i.text,n.state.tabSize,t-i.from);return{line:i.number,col:r,off:s}}function FO(n,e){let t=Nh(n,e),i=n.state.selection;return t?{update(s){if(s.docChanged){let r=s.changes.mapPos(s.startState.doc.line(t.line).from),o=s.state.doc.lineAt(r);t={line:o.number,col:t.col,off:Math.min(t.off,o.length)},i=i.map(s.changes)}},get(s,r,o){let l=Nh(n,s);if(!l)return i;let a=GO(n.state,t,l);return a.length?o?b.create(a.concat(i.ranges)):b.create(a):i}}:null}function tf(n){let e=n?.eventFilter||(t=>t.altKey&&t.button==0);return v.mouseSelectionStyle.of((t,i)=>e(i)?FO(t,i):null)}var HO={Alt:[18,n=>!!n.altKey],Control:[17,n=>!!n.ctrlKey],Shift:[16,n=>!!n.shiftKey],Meta:[91,n=>!!n.metaKey]},KO={style:"cursor: crosshair"};function nf(n={}){let[e,t]=HO[n.key||"Alt"],i=H.fromClass(class{constructor(s){this.view=s,this.isDown=!1}set(s){this.isDown!=s&&(this.isDown=s,this.view.update([]))}},{eventObservers:{keydown(s){this.set(s.keyCode==e||t(s))},keyup(s){(s.keyCode==e||!t(s))&&this.set(!1)},mousemove(s){this.set(t(s))}}});return[i,v.contentAttributes.of(s=>{var r;return!((r=s.plugin(i))===null||r===void 0)&&r.isDown?KO:null})]}var is="-10000px",ws=class{constructor(e,t,i,s){this.facet=t,this.createTooltipView=i,this.removeTooltipView=s,this.input=e.state.facet(t),this.tooltips=this.input.filter(o=>o);let r=null;this.tooltipViews=this.tooltips.map(o=>r=i(o,r))}update(e,t){var i;let s=e.state.facet(this.facet),r=s.filter(a=>a);if(s===this.input){for(let a of this.tooltipViews)a.update&&a.update(e);return!1}let o=[],l=t?[]:null;for(let a=0;at[h]=a),t.length=l.length),this.input=s,this.tooltips=r,this.tooltipViews=o,!0}};function JO(n){let e=n.dom.ownerDocument.documentElement;return{top:0,left:0,bottom:e.clientHeight,right:e.clientWidth}}var Jr=$.define({combine:n=>{var e,t,i;return{position:T.ios?"absolute":((e=n.find(s=>s.position))===null||e===void 0?void 0:e.position)||"fixed",parent:((t=n.find(s=>s.parent))===null||t===void 0?void 0:t.parent)||null,tooltipSpace:((i=n.find(s=>s.tooltipSpace))===null||i===void 0?void 0:i.tooltipSpace)||JO}}}),Gh=new WeakMap,ll=H.fromClass(class{constructor(n){this.view=n,this.above=[],this.inView=!0,this.madeAbsolute=!1,this.lastTransaction=0,this.measureTimeout=-1;let e=n.state.facet(Jr);this.position=e.position,this.parent=e.parent,this.classes=n.themeClasses,this.createContainer(),this.measureReq={read:this.readMeasure.bind(this),write:this.writeMeasure.bind(this),key:this},this.resizeObserver=typeof ResizeObserver=="function"?new ResizeObserver(()=>this.measureSoon()):null,this.manager=new ws(n,an,(t,i)=>this.createTooltip(t,i),t=>{this.resizeObserver&&this.resizeObserver.unobserve(t.dom),t.dom.remove()}),this.above=this.manager.tooltips.map(t=>!!t.above),this.intersectionObserver=typeof IntersectionObserver=="function"?new IntersectionObserver(t=>{Date.now()>this.lastTransaction-50&&t.length>0&&t[t.length-1].intersectionRatio<1&&this.measureSoon()},{threshold:[1]}):null,this.observeIntersection(),n.win.addEventListener("resize",this.measureSoon=this.measureSoon.bind(this)),this.maybeMeasure()}createContainer(){this.parent?(this.container=document.createElement("div"),this.container.style.position="relative",this.container.className=this.view.themeClasses,this.parent.appendChild(this.container)):this.container=this.view.dom}observeIntersection(){if(this.intersectionObserver){this.intersectionObserver.disconnect();for(let n of this.manager.tooltipViews)this.intersectionObserver.observe(n.dom)}}measureSoon(){this.measureTimeout<0&&(this.measureTimeout=setTimeout(()=>{this.measureTimeout=-1,this.maybeMeasure()},50))}update(n){n.transactions.length&&(this.lastTransaction=Date.now());let e=this.manager.update(n,this.above);e&&this.observeIntersection();let t=e||n.geometryChanged,i=n.state.facet(Jr);if(i.position!=this.position&&!this.madeAbsolute){this.position=i.position;for(let s of this.manager.tooltipViews)s.dom.style.position=this.position;t=!0}if(i.parent!=this.parent){this.parent&&this.container.remove(),this.parent=i.parent,this.createContainer();for(let s of this.manager.tooltipViews)this.container.appendChild(s.dom);t=!0}else this.parent&&this.view.themeClasses!=this.classes&&(this.classes=this.container.className=this.view.themeClasses);t&&this.maybeMeasure()}createTooltip(n,e){let t=n.create(this.view),i=e?e.dom:null;if(t.dom.classList.add("cm-tooltip"),n.arrow&&!t.dom.querySelector(".cm-tooltip > .cm-tooltip-arrow")){let s=document.createElement("div");s.className="cm-tooltip-arrow",t.dom.appendChild(s)}return t.dom.style.position=this.position,t.dom.style.top=is,t.dom.style.left="0px",this.container.insertBefore(t.dom,i),t.mount&&t.mount(this.view),this.resizeObserver&&this.resizeObserver.observe(t.dom),t}destroy(){var n,e,t;this.view.win.removeEventListener("resize",this.measureSoon);for(let i of this.manager.tooltipViews)i.dom.remove(),(n=i.destroy)===null||n===void 0||n.call(i);this.parent&&this.container.remove(),(e=this.resizeObserver)===null||e===void 0||e.disconnect(),(t=this.intersectionObserver)===null||t===void 0||t.disconnect(),clearTimeout(this.measureTimeout)}readMeasure(){let n=1,e=1,t=!1;if(this.position=="fixed"&&this.manager.tooltipViews.length){let{dom:r}=this.manager.tooltipViews[0];if(T.safari){let o=r.getBoundingClientRect();t=Math.abs(o.top+1e4)>1||Math.abs(o.left)>1}else t=!!r.offsetParent&&r.offsetParent!=this.container.ownerDocument.body}if(t||this.position=="absolute")if(this.parent){let r=this.parent.getBoundingClientRect();r.width&&r.height&&(n=r.width/this.parent.offsetWidth,e=r.height/this.parent.offsetHeight)}else({scaleX:n,scaleY:e}=this.view.viewState);let i=this.view.scrollDOM.getBoundingClientRect(),s=rl(this.view);return{visible:{left:i.left+s.left,top:i.top+s.top,right:i.right-s.right,bottom:i.bottom-s.bottom},parent:this.parent?this.container.getBoundingClientRect():this.view.dom.getBoundingClientRect(),pos:this.manager.tooltips.map((r,o)=>{let l=this.manager.tooltipViews[o];return l.getCoords?l.getCoords(r.pos):this.view.coordsAtPos(r.pos)}),size:this.manager.tooltipViews.map(({dom:r})=>r.getBoundingClientRect()),space:this.view.state.facet(Jr).tooltipSpace(this.view),scaleX:n,scaleY:e,makeAbsolute:t}}writeMeasure(n){var e;if(n.makeAbsolute){this.madeAbsolute=!0,this.position="absolute";for(let l of this.manager.tooltipViews)l.dom.style.position="absolute"}let{visible:t,space:i,scaleX:s,scaleY:r}=n,o=[];for(let l=0;l=Math.min(t.bottom,i.bottom)||f.rightMath.min(t.right,i.right)+.1)){c.style.top=is;continue}let d=a.arrow?h.dom.querySelector(".cm-tooltip-arrow"):null,p=d?7:0,O=u.right-u.left,g=(e=Gh.get(h))!==null&&e!==void 0?e:u.bottom-u.top,y=h.offset||tm,x=this.view.textDirection==z.LTR,S=u.width>i.right-i.left?x?i.left:i.right-u.width:x?Math.max(i.left,Math.min(f.left-(d?14:0)+y.x,i.right-O)):Math.min(Math.max(i.left,f.left-O+(d?14:0)-y.x),i.right-O),C=this.above[l];!a.strictSide&&(C?f.top-g-p-y.yi.bottom)&&C==i.bottom-f.bottom>f.top-i.top&&(C=this.above[l]=!C);let w=(C?f.top-i.top:i.bottom-f.bottom)-p;if(wS&&X.topk&&(k=C?X.top-g-2-p:X.bottom+p+2);if(this.position=="absolute"?(c.style.top=(k-n.parent.top)/r+"px",Uh(c,(S-n.parent.left)/s)):(c.style.top=k/r+"px",Uh(c,S/s)),d){let X=f.left+(x?y.x:-y.x)-(S+14-7);d.style.left=X/s+"px"}h.overlap!==!0&&o.push({left:S,top:k,right:Q,bottom:k+g}),c.classList.toggle("cm-tooltip-above",C),c.classList.toggle("cm-tooltip-below",!C),h.positioned&&h.positioned(n.space)}}maybeMeasure(){if(this.manager.tooltips.length&&(this.view.inView&&this.view.requestMeasure(this.measureReq),this.inView!=this.view.inView&&(this.inView=this.view.inView,!this.inView)))for(let n of this.manager.tooltipViews)n.dom.style.top=is}},{eventObservers:{scroll(){this.maybeMeasure()}}});function Uh(n,e){let t=parseInt(n.style.left,10);(isNaN(t)||Math.abs(e-t)>1)&&(n.style.left=e+"px")}var em=v.baseTheme({".cm-tooltip":{zIndex:500,boxSizing:"border-box"},"&light .cm-tooltip":{border:"1px solid #bbb",backgroundColor:"#f5f5f5"},"&light .cm-tooltip-section:not(:first-child)":{borderTop:"1px solid #bbb"},"&dark .cm-tooltip":{backgroundColor:"#333338",color:"white"},".cm-tooltip-arrow":{height:"7px",width:"14px",position:"absolute",zIndex:-1,overflow:"hidden","&:before, &:after":{content:"''",position:"absolute",width:0,height:0,borderLeft:"7px solid transparent",borderRight:"7px solid transparent"},".cm-tooltip-above &":{bottom:"-7px","&:before":{borderTop:"7px solid #bbb"},"&:after":{borderTop:"7px solid #f5f5f5",bottom:"1px"}},".cm-tooltip-below &":{top:"-7px","&:before":{borderBottom:"7px solid #bbb"},"&:after":{borderBottom:"7px solid #f5f5f5",top:"1px"}}},"&dark .cm-tooltip .cm-tooltip-arrow":{"&:before":{borderTopColor:"#333338",borderBottomColor:"#333338"},"&:after":{borderTopColor:"transparent",borderBottomColor:"transparent"}}}),tm={x:0,y:0},an=$.define({enables:[ll,em]}),ks=$.define({combine:n=>n.reduce((e,t)=>e.concat(t),[])}),Qs=class n{static create(e){return new n(e)}constructor(e){this.view=e,this.mounted=!1,this.dom=document.createElement("div"),this.dom.classList.add("cm-tooltip-hover"),this.manager=new ws(e,ks,(t,i)=>this.createHostedView(t,i),t=>t.dom.remove())}createHostedView(e,t){let i=e.create(this.view);return i.dom.classList.add("cm-tooltip-section"),this.dom.insertBefore(i.dom,t?t.dom.nextSibling:this.dom.firstChild),this.mounted&&i.mount&&i.mount(this.view),i}mount(e){for(let t of this.manager.tooltipViews)t.mount&&t.mount(e);this.mounted=!0}positioned(e){for(let t of this.manager.tooltipViews)t.positioned&&t.positioned(e)}update(e){this.manager.update(e)}destroy(){var e;for(let t of this.manager.tooltipViews)(e=t.destroy)===null||e===void 0||e.call(t)}passProp(e){let t;for(let i of this.manager.tooltipViews){let s=i[e];if(s!==void 0){if(t===void 0)t=s;else if(t!==s)return}}return t}get offset(){return this.passProp("offset")}get getCoords(){return this.passProp("getCoords")}get overlap(){return this.passProp("overlap")}get resize(){return this.passProp("resize")}},im=an.compute([ks],n=>{let e=n.facet(ks);return e.length===0?null:{pos:Math.min(...e.map(t=>t.pos)),end:Math.max(...e.map(t=>{var i;return(i=t.end)!==null&&i!==void 0?i:t.pos})),create:Qs.create,above:e[0].above,arrow:e.some(t=>t.arrow)}}),Go=class{constructor(e,t,i,s,r){this.view=e,this.source=t,this.field=i,this.setHover=s,this.hoverTime=r,this.hoverTimeout=-1,this.restartTimeout=-1,this.pending=null,this.lastMove={x:0,y:0,target:e.dom,time:0},this.checkHover=this.checkHover.bind(this),e.dom.addEventListener("mouseleave",this.mouseleave=this.mouseleave.bind(this)),e.dom.addEventListener("mousemove",this.mousemove=this.mousemove.bind(this))}update(){this.pending&&(this.pending=null,clearTimeout(this.restartTimeout),this.restartTimeout=setTimeout(()=>this.startHover(),20))}get active(){return this.view.state.field(this.field)}checkHover(){if(this.hoverTimeout=-1,this.active.length)return;let e=Date.now()-this.lastMove.time;el.bottom||t.xl.right+e.defaultCharacterWidth)return;let a=e.bidiSpans(e.state.doc.lineAt(s)).find(c=>c.from<=s&&c.to>=s),h=a&&a.dir==z.RTL?-1:1;r=t.x{this.pending==l&&(this.pending=null,a&&!(Array.isArray(a)&&!a.length)&&e.dispatch({effects:this.setHover.of(Array.isArray(a)?a:[a])}))},a=>ae(e.state,a,"hover tooltip"))}else o&&!(Array.isArray(o)&&!o.length)&&e.dispatch({effects:this.setHover.of(Array.isArray(o)?o:[o])})}get tooltip(){let e=this.view.plugin(ll),t=e?e.manager.tooltips.findIndex(i=>i.create==Qs.create):-1;return t>-1?e.manager.tooltipViews[t]:null}mousemove(e){var t,i;this.lastMove={x:e.clientX,y:e.clientY,target:e.target,time:Date.now()},this.hoverTimeout<0&&(this.hoverTimeout=setTimeout(this.checkHover,this.hoverTime));let{active:s,tooltip:r}=this;if(s.length&&r&&!nm(r.dom,e)||this.pending){let{pos:o}=s[0]||this.pending,l=(i=(t=s[0])===null||t===void 0?void 0:t.end)!==null&&i!==void 0?i:o;(o==l?this.view.posAtCoords(this.lastMove)!=o:!sm(this.view,o,l,e.clientX,e.clientY))&&(this.view.dispatch({effects:this.setHover.of([])}),this.pending=null)}}mouseleave(e){clearTimeout(this.hoverTimeout),this.hoverTimeout=-1;let{active:t}=this;if(t.length){let{tooltip:i}=this;i&&i.dom.contains(e.relatedTarget)?this.watchTooltipLeave(i.dom):this.view.dispatch({effects:this.setHover.of([])})}}watchTooltipLeave(e){let t=i=>{e.removeEventListener("mouseleave",t),this.active.length&&!this.view.dom.contains(i.relatedTarget)&&this.view.dispatch({effects:this.setHover.of([])})};e.addEventListener("mouseleave",t)}destroy(){clearTimeout(this.hoverTimeout),clearTimeout(this.restartTimeout),this.view.dom.removeEventListener("mouseleave",this.mouseleave),this.view.dom.removeEventListener("mousemove",this.mousemove)}},ns=4;function nm(n,e){let{left:t,right:i,top:s,bottom:r}=n.getBoundingClientRect(),o;if(o=n.querySelector(".cm-tooltip-arrow")){let l=o.getBoundingClientRect();s=Math.min(l.top,s),r=Math.max(l.bottom,r)}return e.clientX>=t-ns&&e.clientX<=i+ns&&e.clientY>=s-ns&&e.clientY<=r+ns}function sm(n,e,t,i,s,r){let o=n.scrollDOM.getBoundingClientRect(),l=n.documentTop+n.documentPadding.top+n.contentHeight;if(o.left>i||o.rights||Math.min(o.bottom,l)=e&&a<=t}function sf(n,e={}){let t=A.define(),i=K.define({create(){return[]},update(s,r){if(s.length&&(e.hideOnChange&&(r.docChanged||r.selection)?s=[]:e.hideOn&&(s=s.filter(o=>!e.hideOn(r,o))),r.docChanged)){let o=[];for(let l of s){let a=r.changes.mapPos(l.pos,-1,se.TrackDel);if(a!=null){let h=Object.assign(Object.create(null),l);h.pos=a,h.end!=null&&(h.end=r.changes.mapPos(h.end)),o.push(h)}}s=o}for(let o of r.effects)o.is(t)&&(s=o.value),o.is(rm)&&(s=[]);return s},provide:s=>ks.from(s)});return{active:i,extension:[i,H.define(s=>new Go(s,n,i,t,e.hoverTime||300)),im]}}function al(n,e){let t=n.plugin(ll);if(!t)return null;let i=t.manager.tooltips.indexOf(e);return i<0?null:t.manager.tooltipViews[i]}var rm=A.define();var Fh=$.define({combine(n){let e,t;for(let i of n)e=e||i.topContainer,t=t||i.bottomContainer;return{topContainer:e,bottomContainer:t}}});function hn(n,e){let t=n.plugin(rf),i=t?t.specs.indexOf(e):-1;return i>-1?t.panels[i]:null}var rf=H.fromClass(class{constructor(n){this.input=n.state.facet(jt),this.specs=this.input.filter(t=>t),this.panels=this.specs.map(t=>t(n));let e=n.state.facet(Fh);this.top=new mi(n,!0,e.topContainer),this.bottom=new mi(n,!1,e.bottomContainer),this.top.sync(this.panels.filter(t=>t.top)),this.bottom.sync(this.panels.filter(t=>!t.top));for(let t of this.panels)t.dom.classList.add("cm-panel"),t.mount&&t.mount()}update(n){let e=n.state.facet(Fh);this.top.container!=e.topContainer&&(this.top.sync([]),this.top=new mi(n.view,!0,e.topContainer)),this.bottom.container!=e.bottomContainer&&(this.bottom.sync([]),this.bottom=new mi(n.view,!1,e.bottomContainer)),this.top.syncClasses(),this.bottom.syncClasses();let t=n.state.facet(jt);if(t!=this.input){let i=t.filter(a=>a),s=[],r=[],o=[],l=[];for(let a of i){let h=this.specs.indexOf(a),c;h<0?(c=a(n.view),l.push(c)):(c=this.panels[h],c.update&&c.update(n)),s.push(c),(c.top?r:o).push(c)}this.specs=i,this.panels=s,this.top.sync(r),this.bottom.sync(o);for(let a of l)a.dom.classList.add("cm-panel"),a.mount&&a.mount()}else for(let i of this.panels)i.update&&i.update(n)}destroy(){this.top.sync([]),this.bottom.sync([])}},{provide:n=>v.scrollMargins.of(e=>{let t=e.plugin(n);return t&&{top:t.top.scrollMargin(),bottom:t.bottom.scrollMargin()}})}),mi=class{constructor(e,t,i){this.view=e,this.top=t,this.container=i,this.dom=void 0,this.classes="",this.panels=[],this.syncClasses()}sync(e){for(let t of this.panels)t.destroy&&e.indexOf(t)<0&&t.destroy();this.panels=e,this.syncDOM()}syncDOM(){if(this.panels.length==0){this.dom&&(this.dom.remove(),this.dom=void 0);return}if(!this.dom){this.dom=document.createElement("div"),this.dom.className=this.top?"cm-panels cm-panels-top":"cm-panels cm-panels-bottom",this.dom.style[this.top?"top":"bottom"]="0";let t=this.container||this.view.dom;t.insertBefore(this.dom,this.top?t.firstChild:null)}let e=this.dom.firstChild;for(let t of this.panels)if(t.dom.parentNode==this.dom){for(;e!=t.dom;)e=Hh(e);e=e.nextSibling}else this.dom.insertBefore(t.dom,e);for(;e;)e=Hh(e)}scrollMargin(){return!this.dom||this.container?0:Math.max(0,this.top?this.dom.getBoundingClientRect().bottom-Math.max(0,this.view.scrollDOM.getBoundingClientRect().top):Math.min(innerHeight,this.view.scrollDOM.getBoundingClientRect().bottom)-this.dom.getBoundingClientRect().top)}syncClasses(){if(!(!this.container||this.classes==this.view.themeClasses)){for(let e of this.classes.split(" "))e&&this.container.classList.remove(e);for(let e of(this.classes=this.view.themeClasses).split(" "))e&&this.container.classList.add(e)}}};function Hh(n){let e=n.nextSibling;return n.remove(),e}var jt=$.define({enables:rf});function of(n,e){let t,i=new Promise(o=>t=o),s=o=>om(o,e,t);n.state.field(eo,!1)?n.dispatch({effects:lf.of(s)}):n.dispatch({effects:A.appendConfig.of(eo.init(()=>[s]))});let r=af.of(s);return{close:r,result:i.then(o=>((n.win.queueMicrotask||(a=>n.win.setTimeout(a,10)))(()=>{n.state.field(eo).indexOf(s)>-1&&n.dispatch({effects:r})}),o))}}var eo=K.define({create(){return[]},update(n,e){for(let t of e.effects)t.is(lf)?n=[t.value].concat(n):t.is(af)&&(n=n.filter(i=>i!=t.value));return n},provide:n=>jt.computeN([n],e=>e.field(n))}),lf=A.define(),af=A.define();function om(n,e,t){let i=e.content?e.content(n,()=>o(null)):null;if(!i){if(i=W("form"),e.input){let l=W("input",e.input);/^(text|password|number|email|tel|url)$/.test(l.type)&&l.classList.add("cm-textfield"),l.name||(l.name="input"),i.appendChild(W("label",(e.label||"")+": ",l))}else i.appendChild(document.createTextNode(e.label||""));i.appendChild(document.createTextNode(" ")),i.appendChild(W("button",{class:"cm-button",type:"submit"},e.submitLabel||"OK"))}let s=i.nodeName=="FORM"?[i]:i.querySelectorAll("form");for(let l=0;l{h.keyCode==27?(h.preventDefault(),o(null)):h.keyCode==13&&(h.preventDefault(),o(a))}),a.addEventListener("submit",h=>{h.preventDefault(),o(a)})}let r=W("div",i,W("button",{onclick:()=>o(null),"aria-label":n.state.phrase("close"),class:"cm-dialog-close",type:"button"},["\xD7"]));e.class&&(r.className=e.class),r.classList.add("cm-dialog");function o(l){r.contains(r.ownerDocument.activeElement)&&n.focus(),t(l)}return{dom:r,top:e.top,mount:()=>{if(e.focus){let l;typeof e.focus=="string"?l=i.querySelector(e.focus):l=i.querySelector("input")||i.querySelector("button"),l&&"select"in l?l.select():l&&"focus"in l&&l.focus()}}}}var Ze=class extends Be{compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}eq(e){return!1}destroy(e){}};Ze.prototype.elementClass="";Ze.prototype.toDOM=void 0;Ze.prototype.mapMode=se.TrackBefore;Ze.prototype.startSide=Ze.prototype.endSide=-1;Ze.prototype.point=!0;var as=$.define(),lm=$.define(),am={class:"",renderEmptyElements:!1,elementStyle:"",markers:()=>B.empty,lineMarker:()=>null,widgetMarker:()=>null,lineMarkerChange:null,initialSpacer:null,updateSpacer:null,domEventHandlers:{},side:"before"},en=$.define();function hl(n){return[hf(),en.of({...am,...n})]}var Uo=$.define({combine:n=>n.some(e=>e)});function hf(n){let e=[hm];return n&&n.fixed===!1&&e.push(Uo.of(!0)),e}var hm=H.fromClass(class{constructor(n){this.view=n,this.domAfter=null,this.prevViewport=n.viewport,this.dom=document.createElement("div"),this.dom.className="cm-gutters cm-gutters-before",this.dom.setAttribute("aria-hidden","true"),this.dom.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.gutters=n.state.facet(en).map(e=>new vs(n,e)),this.fixed=!n.state.facet(Uo);for(let e of this.gutters)e.config.side=="after"?this.getDOMAfter().appendChild(e.dom):this.dom.appendChild(e.dom);this.fixed&&(this.dom.style.position="sticky"),this.syncGutters(!1),n.scrollDOM.insertBefore(this.dom,n.contentDOM)}getDOMAfter(){return this.domAfter||(this.domAfter=document.createElement("div"),this.domAfter.className="cm-gutters cm-gutters-after",this.domAfter.setAttribute("aria-hidden","true"),this.domAfter.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.domAfter.style.position=this.fixed?"sticky":"",this.view.scrollDOM.appendChild(this.domAfter)),this.domAfter}update(n){if(this.updateGutters(n)){let e=this.prevViewport,t=n.view.viewport,i=Math.min(e.to,t.to)-Math.max(e.from,t.from);this.syncGutters(i<(t.to-t.from)*.8)}if(n.geometryChanged){let e=this.view.contentHeight/this.view.scaleY+"px";this.dom.style.minHeight=e,this.domAfter&&(this.domAfter.style.minHeight=e)}this.view.state.facet(Uo)!=!this.fixed&&(this.fixed=!this.fixed,this.dom.style.position=this.fixed?"sticky":"",this.domAfter&&(this.domAfter.style.position=this.fixed?"sticky":"")),this.prevViewport=n.view.viewport}syncGutters(n){let e=this.dom.nextSibling;n&&(this.dom.remove(),this.domAfter&&this.domAfter.remove());let t=B.iter(this.view.state.facet(as),this.view.viewport.from),i=[],s=this.gutters.map(r=>new Ho(r,this.view.viewport,-this.view.documentPadding.top));for(let r of this.view.viewportLineBlocks)if(i.length&&(i=[]),Array.isArray(r.type)){let o=!0;for(let l of r.type)if(l.type==he.Text&&o){Fo(t,i,l.from);for(let a of s)a.line(this.view,l,i);o=!1}else if(l.widget)for(let a of s)a.widget(this.view,l)}else if(r.type==he.Text){Fo(t,i,r.from);for(let o of s)o.line(this.view,r,i)}else if(r.widget)for(let o of s)o.widget(this.view,r);for(let r of s)r.finish();n&&(this.view.scrollDOM.insertBefore(this.dom,e),this.domAfter&&this.view.scrollDOM.appendChild(this.domAfter))}updateGutters(n){let e=n.startState.facet(en),t=n.state.facet(en),i=n.docChanged||n.heightChanged||n.viewportChanged||!B.eq(n.startState.facet(as),n.state.facet(as),n.view.viewport.from,n.view.viewport.to);if(e==t)for(let s of this.gutters)s.update(n)&&(i=!0);else{i=!0;let s=[];for(let r of t){let o=e.indexOf(r);o<0?s.push(new vs(this.view,r)):(this.gutters[o].update(n),s.push(this.gutters[o]))}for(let r of this.gutters)r.dom.remove(),s.indexOf(r)<0&&r.destroy();for(let r of s)r.config.side=="after"?this.getDOMAfter().appendChild(r.dom):this.dom.appendChild(r.dom);this.gutters=s}return i}destroy(){for(let n of this.gutters)n.destroy();this.dom.remove(),this.domAfter&&this.domAfter.remove()}},{provide:n=>v.scrollMargins.of(e=>{let t=e.plugin(n);if(!t||t.gutters.length==0||!t.fixed)return null;let i=t.dom.offsetWidth*e.scaleX,s=t.domAfter?t.domAfter.offsetWidth*e.scaleX:0;return e.textDirection==z.LTR?{left:i,right:s}:{right:i,left:s}})});function Kh(n){return Array.isArray(n)?n:[n]}function Fo(n,e,t){for(;n.value&&n.from<=t;)n.from==t&&e.push(n.value),n.next()}var Ho=class{constructor(e,t,i){this.gutter=e,this.height=i,this.i=0,this.cursor=B.iter(e.markers,t.from)}addElement(e,t,i){let{gutter:s}=this,r=(t.top-this.height)/e.scaleY,o=t.height/e.scaleY;if(this.i==s.elements.length){let l=new $s(e,o,r,i);s.elements.push(l),s.dom.appendChild(l.dom)}else s.elements[this.i].update(e,o,r,i);this.height=t.bottom,this.i++}line(e,t,i){let s=[];Fo(this.cursor,s,t.from),i.length&&(s=s.concat(i));let r=this.gutter.config.lineMarker(e,t,s);r&&s.unshift(r);let o=this.gutter;s.length==0&&!o.config.renderEmptyElements||this.addElement(e,t,s)}widget(e,t){let i=this.gutter.config.widgetMarker(e,t.widget,t),s=i?[i]:null;for(let r of e.state.facet(lm)){let o=r(e,t.widget,t);o&&(s||(s=[])).push(o)}s&&this.addElement(e,t,s)}finish(){let e=this.gutter;for(;e.elements.length>this.i;){let t=e.elements.pop();e.dom.removeChild(t.dom),t.destroy()}}},vs=class{constructor(e,t){this.view=e,this.config=t,this.elements=[],this.spacer=null,this.dom=document.createElement("div"),this.dom.className="cm-gutter"+(this.config.class?" "+this.config.class:"");for(let i in t.domEventHandlers)this.dom.addEventListener(i,s=>{let r=s.target,o;if(r!=this.dom&&this.dom.contains(r)){for(;r.parentNode!=this.dom;)r=r.parentNode;let a=r.getBoundingClientRect();o=(a.top+a.bottom)/2}else o=s.clientY;let l=e.lineBlockAtHeight(o-e.documentTop);t.domEventHandlers[i](e,l,s)&&s.preventDefault()});this.markers=Kh(t.markers(e)),t.initialSpacer&&(this.spacer=new $s(e,0,0,[t.initialSpacer(e)]),this.dom.appendChild(this.spacer.dom),this.spacer.dom.style.cssText+="visibility: hidden; pointer-events: none")}update(e){let t=this.markers;if(this.markers=Kh(this.config.markers(e.view)),this.spacer&&this.config.updateSpacer){let s=this.config.updateSpacer(this.spacer.markers[0],e);s!=this.spacer.markers[0]&&this.spacer.update(e.view,0,0,[s])}let i=e.view.viewport;return!B.eq(this.markers,t,i.from,i.to)||(this.config.lineMarkerChange?this.config.lineMarkerChange(e):!1)}destroy(){for(let e of this.elements)e.destroy()}},$s=class{constructor(e,t,i,s){this.height=-1,this.above=0,this.markers=[],this.dom=document.createElement("div"),this.dom.className="cm-gutterElement",this.update(e,t,i,s)}update(e,t,i,s){this.height!=t&&(this.height=t,this.dom.style.height=t+"px"),this.above!=i&&(this.dom.style.marginTop=(this.above=i)?i+"px":""),cm(this.markers,s)||this.setMarkers(e,s)}setMarkers(e,t){let i="cm-gutterElement",s=this.dom.firstChild;for(let r=0,o=0;;){let l=o,a=rr(l,a,h)||o(l,a,h):o}return i}})}}),tn=class extends Ze{constructor(e){super(),this.number=e}eq(e){return this.number==e.number}toDOM(){return document.createTextNode(this.number)}};function to(n,e){return n.state.facet(gi).formatNumber(e,n.state)}var dm=en.compute([gi],n=>({class:"cm-lineNumbers",renderEmptyElements:!1,markers(e){return e.state.facet(fm)},lineMarker(e,t,i){return i.some(s=>s.toDOM)?null:new tn(to(e,e.state.doc.lineAt(t.from).number))},widgetMarker:(e,t,i)=>{for(let s of e.state.facet(um)){let r=s(e,t,i);if(r)return r}return null},lineMarkerChange:e=>e.startState.facet(gi)!=e.state.facet(gi),initialSpacer(e){return new tn(to(e,Jh(e.state.doc.lines)))},updateSpacer(e,t){let i=to(t.view,Jh(t.view.state.doc.lines));return i==e.number?e:new tn(i)},domEventHandlers:n.facet(gi).domEventHandlers,side:"before"}));function cf(n={}){return[gi.of(n),hf(),dm]}function Jh(n){let e=9;for(;e{let e=[],t=-1;for(let i of n.selection.ranges){let s=n.doc.lineAt(i.head).from;s>t&&(t=s,e.push(pm.range(s)))}return B.of(e)});function ff(){return Om}var mm=0,cn=class{constructor(e,t){this.from=e,this.to=t}},R=class{constructor(e={}){this.id=mm++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")}),this.combine=e.combine||null}add(e){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return typeof e!="function"&&(e=de.match(e)),t=>{let i=e(t);return i===void 0?null:[this,i]}}};R.closedBy=new R({deserialize:n=>n.split(" ")});R.openedBy=new R({deserialize:n=>n.split(" ")});R.group=new R({deserialize:n=>n.split(" ")});R.isolate=new R({deserialize:n=>{if(n&&n!="rtl"&&n!="ltr"&&n!="auto")throw new RangeError("Invalid value for isolate: "+n);return n||"auto"}});R.contextHash=new R({perNode:!0});R.lookAhead=new R({perNode:!0});R.mounted=new R({perNode:!0});var Nt=class{constructor(e,t,i,s=!1){this.tree=e,this.overlay=t,this.parser=i,this.bracketed=s}static get(e){return e&&e.props&&e.props[R.mounted.id]}},gm=Object.create(null),de=class n{constructor(e,t,i,s=0){this.name=e,this.props=t,this.id=i,this.flags=s}static define(e){let t=e.props&&e.props.length?Object.create(null):gm,i=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(e.name==null?8:0),s=new n(e.name||"",t,e.id,i);if(e.props){for(let r of e.props)if(Array.isArray(r)||(r=r(s)),r){if(r[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");t[r[0].id]=r[1]}}return s}prop(e){return this.props[e.id]}get isTop(){return(this.flags&1)>0}get isSkipped(){return(this.flags&2)>0}get isError(){return(this.flags&4)>0}get isAnonymous(){return(this.flags&8)>0}is(e){if(typeof e=="string"){if(this.name==e)return!0;let t=this.prop(R.group);return t?t.indexOf(e)>-1:!1}return this.id==e}static match(e){let t=Object.create(null);for(let i in e)for(let s of i.split(" "))t[s]=e[i];return i=>{for(let s=i.prop(R.group),r=-1;r<(s?s.length:0);r++){let o=t[r<0?i.name:s[r]];if(o)return o}}}};de.none=new de("",Object.create(null),0,8);var fn=class n{constructor(e){this.types=e;for(let t=0;t0;for(let a=this.cursor(o|U.IncludeAnonymous);;){let h=!1;if(a.from<=r&&a.to>=s&&(!l&&a.type.isAnonymous||t(a)!==!1)){if(a.firstChild())continue;h=!0}for(;h&&i&&(l||!a.type.isAnonymous)&&i(a),!a.nextSibling();){if(!a.parent())return;h=!0}}}prop(e){return e.perNode?this.props?this.props[e.id]:void 0:this.type.prop(e)}get propValues(){let e=[];if(this.props)for(let t in this.props)e.push([+t,this.props[t]]);return e}balance(e={}){return this.children.length<=8?this:ml(de.none,this.children,this.positions,0,this.children.length,0,this.length,(t,i,s)=>new n(this.type,t,i,s,this.propValues),e.makeTree||((t,i,s)=>new n(de.none,t,i,s)))}static build(e){return bm(e)}};J.empty=new J(de.none,[],[],0);var cl=class n{constructor(e,t){this.buffer=e,this.index=t}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new n(this.buffer,this.index)}},vt=class n{constructor(e,t,i){this.buffer=e,this.length=t,this.set=i}get type(){return de.none}toString(){let e=[];for(let t=0;t0));a=o[a+3]);return l}slice(e,t,i){let s=this.buffer,r=new Uint16Array(t-e),o=0;for(let l=e,a=0;l=e&&te;case 1:return t<=e&&i>e;case 2:return i>e;case 4:return!0}}function un(n,e,t,i){for(var s;n.from==n.to||(t<1?n.from>=e:n.from>e)||(t>-1?n.to<=e:n.to0?l.length:-1;e!=h;e+=t){let c=l[e],f=a[e]+o.from,u;if(!(!(r&U.EnterBracketed&&c instanceof J&&(u=Nt.get(c))&&!u.overlay&&u.bracketed&&i>=f&&i<=f+c.length)&&!Of(s,i,f,f+c.length))){if(c instanceof vt){if(r&U.ExcludeBuffers)continue;let d=c.findChild(0,c.buffer.length,t,i-f,s);if(d>-1)return new Gt(new ul(o,c,e,f),null,d)}else if(r&U.IncludeAnonymous||!c.type.isAnonymous||Ol(c)){let d;if(!(r&U.IgnoreMounts)&&(d=Nt.get(c))&&!d.overlay)return new n(d.tree,f,e,o);let p=new n(c,f,e,o);return r&U.IncludeAnonymous||!p.type.isAnonymous?p:p.nextChild(t<0?c.children.length-1:0,t,i,s,r)}}}if(r&U.IncludeAnonymous||!o.type.isAnonymous||(o.index>=0?e=o.index+t:e=t<0?-1:o._parent._tree.children.length,o=o._parent,!o))return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(e){return this.nextChild(0,1,e,2)}childBefore(e){return this.nextChild(this._tree.children.length-1,-1,e,-2)}prop(e){return this._tree.prop(e)}enter(e,t,i=0){let s;if(!(i&U.IgnoreOverlays)&&(s=Nt.get(this._tree))&&s.overlay){let r=e-this.from,o=i&U.EnterBracketed&&s.bracketed;for(let{from:l,to:a}of s.overlay)if((t>0||o?l<=r:l=r:a>r))return new n(s.tree,s.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,e,t,i)}nextSignificantParent(){let e=this;for(;e.type.isAnonymous&&e._parent;)e=e._parent;return e}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}get tree(){return this._tree}toTree(){return this._tree}toString(){return this._tree.toString()}};function df(n,e,t,i){let s=n.cursor(),r=[];if(!s.firstChild())return r;if(t!=null){for(let o=!1;!o;)if(o=s.type.is(t),!s.nextSibling())return r}for(;;){if(i!=null&&s.type.is(i))return r;if(s.type.is(e)&&r.push(s.node),!s.nextSibling())return i==null?r:[]}}function fl(n,e,t=e.length-1){for(let i=n;t>=0;i=i.parent){if(!i)return!1;if(!i.type.isAnonymous){if(e[t]&&e[t]!=i.name)return!1;t--}}return!0}var ul=class{constructor(e,t,i,s){this.parent=e,this.buffer=t,this.index=i,this.start=s}},Gt=class n extends Ms{get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}constructor(e,t,i){super(),this.context=e,this._parent=t,this.index=i,this.type=e.buffer.set.types[e.buffer.buffer[i]]}child(e,t,i){let{buffer:s}=this.context,r=s.findChild(this.index+4,s.buffer[this.index+3],e,t-this.context.start,i);return r<0?null:new n(this.context,this,r)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(e){return this.child(1,e,2)}childBefore(e){return this.child(-1,e,-2)}prop(e){return this.type.prop(e)}enter(e,t,i=0){if(i&U.ExcludeBuffers)return null;let{buffer:s}=this.context,r=s.findChild(this.index+4,s.buffer[this.index+3],t>0?1:-1,e-this.context.start,t);return r<0?null:new n(this.context,this,r)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(e){return this._parent?null:this.context.parent.nextChild(this.context.index+e,e,0,4)}get nextSibling(){let{buffer:e}=this.context,t=e.buffer[this.index+3];return t<(this._parent?e.buffer[this._parent.index+3]:e.buffer.length)?new n(this.context,this._parent,t):this.externalSibling(1)}get prevSibling(){let{buffer:e}=this.context,t=this._parent?this._parent.index+4:0;return this.index==t?this.externalSibling(-1):new n(this.context,this._parent,e.findChild(t,this.index,-1,0,4))}get tree(){return null}toTree(){let e=[],t=[],{buffer:i}=this.context,s=this.index+4,r=i.buffer[this.index+3];if(r>s){let o=i.buffer[this.index+1];e.push(i.slice(s,r,o)),t.push(0)}return new J(this.type,e,t,this.to-this.from)}toString(){return this.context.buffer.childString(this.index)}};function mf(n){if(!n.length)return null;let e=0,t=n[0];for(let r=1;rt.from||o.to=e){let l=new Ye(o.tree,o.overlay[0].from+r.from,-1,r);(s||(s=[i])).push(un(l,e,t,!1))}}return s?mf(s):i}var dn=class{get name(){return this.type.name}constructor(e,t=0){if(this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,this.mode=t&~U.EnterBracketed,e instanceof Ye)this.yieldNode(e);else{this._tree=e.context.parent,this.buffer=e.context;for(let i=e._parent;i;i=i._parent)this.stack.unshift(i.index);this.bufferNode=e,this.yieldBuf(e.index)}}yieldNode(e){return e?(this._tree=e,this.type=e.type,this.from=e.from,this.to=e.to,!0):!1}yieldBuf(e,t){this.index=e;let{start:i,buffer:s}=this.buffer;return this.type=t||s.set.types[s.buffer[e]],this.from=i+s.buffer[e+1],this.to=i+s.buffer[e+2],!0}yield(e){return e?e instanceof Ye?(this.buffer=null,this.yieldNode(e)):(this.buffer=e.context,this.yieldBuf(e.index,e.type)):!1}toString(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()}enterChild(e,t,i){if(!this.buffer)return this.yield(this._tree.nextChild(e<0?this._tree._tree.children.length-1:0,e,t,i,this.mode));let{buffer:s}=this.buffer,r=s.findChild(this.index+4,s.buffer[this.index+3],e,t-this.buffer.start,i);return r<0?!1:(this.stack.push(this.index),this.yieldBuf(r))}firstChild(){return this.enterChild(1,0,4)}lastChild(){return this.enterChild(-1,0,4)}childAfter(e){return this.enterChild(1,e,2)}childBefore(e){return this.enterChild(-1,e,-2)}enter(e,t,i=this.mode){return this.buffer?i&U.ExcludeBuffers?!1:this.enterChild(1,e,t):this.yield(this._tree.enter(e,t,i))}parent(){if(!this.buffer)return this.yieldNode(this.mode&U.IncludeAnonymous?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());let e=this.mode&U.IncludeAnonymous?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(e)}sibling(e){if(!this.buffer)return this._tree._parent?this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+e,e,0,4,this.mode)):!1;let{buffer:t}=this.buffer,i=this.stack.length-1;if(e<0){let s=i<0?0:this.stack[i]+4;if(this.index!=s)return this.yieldBuf(t.findChild(s,this.index,-1,0,4))}else{let s=t.buffer[this.index+3];if(s<(i<0?t.buffer.length:t.buffer[this.stack[i]+3]))return this.yieldBuf(s)}return i<0?this.yield(this.buffer.parent.nextChild(this.buffer.index+e,e,0,4,this.mode)):!1}nextSibling(){return this.sibling(1)}prevSibling(){return this.sibling(-1)}atLastNode(e){let t,i,{buffer:s}=this;if(s){if(e>0){if(this.index-1)for(let r=t+e,o=e<0?-1:i._tree.children.length;r!=o;r+=e){let l=i._tree.children[r];if(this.mode&U.IncludeAnonymous||l instanceof vt||!l.type.isAnonymous||Ol(l))return!1}return!0}move(e,t){if(t&&this.enterChild(e,0,4))return!0;for(;;){if(this.sibling(e))return!0;if(this.atLastNode(e)||!this.parent())return!1}}next(e=!0){return this.move(1,e)}prev(e=!0){return this.move(-1,e)}moveTo(e,t=0){for(;(this.from==this.to||(t<1?this.from>=e:this.from>e)||(t>-1?this.to<=e:this.to=0;){for(let o=e;o;o=o._parent)if(o.index==s){if(s==this.index)return o;t=o,i=r+1;break e}s=this.stack[--r]}for(let s=i;s=0;r--){if(r<0)return fl(this._tree,e,s);let o=i[t.buffer[this.stack[r]]];if(!o.isAnonymous){if(e[s]&&e[s]!=o.name)return!1;s--}}return!0}};function Ol(n){return n.children.some(e=>e instanceof vt||!e.type.isAnonymous||Ol(e))}function bm(n){var e;let{buffer:t,nodeSet:i,maxBufferLength:s=1024,reused:r=[],minRepeatType:o=i.types.length}=n,l=Array.isArray(t)?new cl(t,t.length):t,a=i.types,h=0,c=0;function f(w,k,Q,X,D,V){let{id:L,start:M,end:I,size:_}=l,N=c,Oe=h;if(_<0)if(l.next(),_==-1){let at=r[L];Q.push(at),X.push(M-w);return}else if(_==-3){h=L;return}else if(_==-4){c=L;return}else throw new RangeError(`Unrecognized record size: ${_}`);let ve=a[L],tt,oe,Ee=M-w;if(I-M<=s&&(oe=g(l.pos-k,D))){let at=new Uint16Array(oe.size-oe.skip),De=l.pos-oe.size,it=at.length;for(;l.pos>De;)it=y(oe.start,at,it);tt=new vt(at,I-oe.start,i),Ee=oe.start-w}else{let at=l.pos-_;l.next();let De=[],it=[],Lt=L>=o?L:-1,ri=0,Ln=I;for(;l.pos>at;)Lt>=0&&l.id==Lt&&l.size>=0?(l.end<=Ln-s&&(p(De,it,M,ri,l.end,Ln,Lt,N,Oe),ri=De.length,Ln=l.end),l.next()):V>2500?u(M,at,De,it):f(M,at,De,it,Lt,V+1);if(Lt>=0&&ri>0&&ri-1&&ri>0){let Ba=d(ve,Oe);tt=ml(ve,De,it,0,De.length,0,I-M,Ba,Ba)}else tt=O(ve,De,it,I-M,N-I,Oe)}Q.push(tt),X.push(Ee)}function u(w,k,Q,X){let D=[],V=0,L=-1;for(;l.pos>k;){let{id:M,start:I,end:_,size:N}=l;if(N>4)l.next();else{if(L>-1&&I=0;_-=3)M[N++]=D[_],M[N++]=D[_+1]-I,M[N++]=D[_+2]-I,M[N++]=N;Q.push(new vt(M,D[2]-I,i)),X.push(I-w)}}function d(w,k){return(Q,X,D)=>{let V=0,L=Q.length-1,M,I;if(L>=0&&(M=Q[L])instanceof J){if(!L&&M.type==w&&M.length==D)return M;(I=M.prop(R.lookAhead))&&(V=X[L]+M.length+I)}return O(w,Q,X,D,V,k)}}function p(w,k,Q,X,D,V,L,M,I){let _=[],N=[];for(;w.length>X;)_.push(w.pop()),N.push(k.pop()+Q-D);w.push(O(i.types[L],_,N,V-D,M-V,I)),k.push(D-Q)}function O(w,k,Q,X,D,V,L){if(V){let M=[R.contextHash,V];L=L?[M].concat(L):[M]}if(D>25){let M=[R.lookAhead,D];L=L?[M].concat(L):[M]}return new J(w,k,Q,X,L)}function g(w,k){let Q=l.fork(),X=0,D=0,V=0,L=Q.end-s,M={size:0,start:0,skip:0};e:for(let I=Q.pos-w;Q.pos>I;){let _=Q.size;if(Q.id==k&&_>=0){M.size=X,M.start=D,M.skip=V,V+=4,X+=4,Q.next();continue}let N=Q.pos-_;if(_<0||N=o?4:0,ve=Q.start;for(Q.next();Q.pos>N;){if(Q.size<0)if(Q.size==-3||Q.size==-4)Oe+=4;else break e;else Q.id>=o&&(Oe+=4);Q.next()}D=ve,X+=_,V+=Oe}return(k<0||X==w)&&(M.size=X,M.start=D,M.skip=V),M.size>4?M:void 0}function y(w,k,Q){let{id:X,start:D,end:V,size:L}=l;if(l.next(),L>=0&&X4){let I=l.pos-(L-4);for(;l.pos>I;)Q=y(w,k,Q)}k[--Q]=M,k[--Q]=V-w,k[--Q]=D-w,k[--Q]=X}else L==-3?h=X:L==-4&&(c=X);return Q}let x=[],S=[];for(;l.pos>0;)f(n.start||0,n.bufferStart||0,x,S,-1,0);let C=(e=n.length)!==null&&e!==void 0?e:x.length?S[0]+x[0].length:0;return new J(a[n.topID],x.reverse(),S.reverse(),C)}var pf=new WeakMap;function As(n,e){if(!n.isAnonymous||e instanceof vt||e.type!=n)return 1;let t=pf.get(e);if(t==null){t=1;for(let i of e.children){if(i.type!=n||!(i instanceof J)){t=1;break}t+=As(n,i)}pf.set(e,t)}return t}function ml(n,e,t,i,s,r,o,l,a){let h=0;for(let p=i;p=c)break;k+=Q}if(S==C+1){if(k>c){let Q=p[C];d(Q.children,Q.positions,0,Q.children.length,O[C]+x);continue}f.push(p[C])}else{let Q=O[S-1]+p[S-1].length-w;f.push(ml(n,p,O,C,S,w,Q,null,a))}u.push(w+x-r)}}return d(e,t,i,s,0),(l||a)(f,u,o)}var Rs=class{constructor(){this.map=new WeakMap}setBuffer(e,t,i){let s=this.map.get(e);s||this.map.set(e,s=new Map),s.set(t,i)}getBuffer(e,t){let i=this.map.get(e);return i&&i.get(t)}set(e,t){e instanceof Gt?this.setBuffer(e.context.buffer,e.index,t):e instanceof Ye&&this.map.set(e.tree,t)}get(e){return e instanceof Gt?this.getBuffer(e.context.buffer,e.index):e instanceof Ye?this.map.get(e.tree):void 0}cursorSet(e,t){e.buffer?this.setBuffer(e.buffer.buffer,e.index,t):this.map.set(e.tree,t)}cursorGet(e){return e.buffer?this.getBuffer(e.buffer.buffer,e.index):this.map.get(e.tree)}},Ut=class n{constructor(e,t,i,s,r=!1,o=!1){this.from=e,this.to=t,this.tree=i,this.offset=s,this.open=(r?1:0)|(o?2:0)}get openStart(){return(this.open&1)>0}get openEnd(){return(this.open&2)>0}static addTree(e,t=[],i=!1){let s=[new n(0,e.length,e,0,!1,i)];for(let r of t)r.to>e.length&&s.push(r);return s}static applyChanges(e,t,i=128){if(!t.length)return e;let s=[],r=1,o=e.length?e[0]:null;for(let l=0,a=0,h=0;;l++){let c=l=i)for(;o&&o.from=u.from||f<=u.to||h){let d=Math.max(u.from,a)-h,p=Math.min(u.to,f)-h;u=d>=p?null:new n(d,p,u.tree,u.offset+h,l>0,!!c)}if(u&&s.push(u),o.to>f)break;o=rnew cn(s.from,s.to)):[new cn(0,0)]:[new cn(0,e.length)],this.createParse(e,t||[],i)}parse(e,t,i){let s=this.startParse(e,t,i);for(;;){let r=s.advance();if(r)return r}}},pl=class{constructor(e){this.string=e}get length(){return this.string.length}chunk(e){return this.string.slice(e)}get lineChunks(){return!1}read(e,t){return this.string.slice(e,t)}};var rb=new R({perNode:!0});var bl=class n{constructor(e,t,i,s,r,o,l,a,h,c=0,f){this.p=e,this.stack=t,this.state=i,this.reducePos=s,this.pos=r,this.score=o,this.buffer=l,this.bufferBase=a,this.curContext=h,this.lookAhead=c,this.parent=f}toString(){return`[${this.stack.filter((e,t)=>t%3==0).concat(this.state)}]@${this.pos}${this.score?"!"+this.score:""}`}static start(e,t,i=0){let s=e.parser.context;return new n(e,[],t,i,i,0,[],0,s?new Xs(s,s.start):null,0,null)}get context(){return this.curContext?this.curContext.context:null}pushState(e,t){this.stack.push(this.state,t,this.bufferBase+this.buffer.length),this.state=e}reduce(e){var t;let i=e>>19,s=e&65535,{parser:r}=this.p,o=this.reducePos=2e3&&!(!((t=this.p.parser.nodeSet.types[s])===null||t===void 0)&&t.isAnonymous)&&(h==this.p.lastBigReductionStart?(this.p.bigReductionCount++,this.p.lastBigReductionSize=c):this.p.lastBigReductionSizea;)this.stack.pop();this.reduceContext(s,h)}storeNode(e,t,i,s=4,r=!1){if(e==0&&(!this.stack.length||this.stack[this.stack.length-1]0&&this.buffer[o-4]==0&&this.buffer[o-1]>-1){if(t==i)return;if(this.buffer[o-2]>=t){this.buffer[o-2]=i;return}}}if(!r||this.pos==i)this.buffer.push(e,t,i,s);else{let o=this.buffer.length;if(o>0&&(this.buffer[o-4]!=0||this.buffer[o-1]<0)){let l=!1;for(let a=o;a>0&&this.buffer[a-2]>i;a-=4)if(this.buffer[a-1]>=0){l=!0;break}if(l)for(;o>0&&this.buffer[o-2]>i;)this.buffer[o]=this.buffer[o-4],this.buffer[o+1]=this.buffer[o-3],this.buffer[o+2]=this.buffer[o-2],this.buffer[o+3]=this.buffer[o-1],o-=4,s>4&&(s-=4)}this.buffer[o]=e,this.buffer[o+1]=t,this.buffer[o+2]=i,this.buffer[o+3]=s}}shift(e,t,i,s){if(e&131072)this.pushState(e&65535,this.pos);else if((e&262144)==0){let r=e,{parser:o}=this.p;this.pos=s;let l=o.stateFlag(r,1);!l&&(s>i||t<=o.maxNode)&&(this.reducePos=s),this.pushState(r,l?i:Math.min(i,this.reducePos)),this.shiftContext(t,i),t<=o.maxNode&&this.buffer.push(t,i,s,4)}else this.pos=s,this.shiftContext(t,i),t<=this.p.parser.maxNode&&this.buffer.push(t,i,s,4)}apply(e,t,i,s){e&65536?this.reduce(e):this.shift(e,t,i,s)}useNode(e,t){let i=this.p.reused.length-1;(i<0||this.p.reused[i]!=e)&&(this.p.reused.push(e),i++);let s=this.pos;this.reducePos=this.pos=s+e.length,this.pushState(t,s),this.buffer.push(i,s,this.reducePos,-1),this.curContext&&this.updateContext(this.curContext.tracker.reuse(this.curContext.context,e,this,this.p.stream.reset(this.pos-e.length)))}split(){let e=this,t=e.buffer.length;for(t&&e.buffer[t-4]==0&&(t-=4);t>0&&e.buffer[t-2]>e.reducePos;)t-=4;let i=e.buffer.slice(t),s=e.bufferBase+t;for(;e&&s==e.bufferBase;)e=e.parent;return new n(this.p,this.stack.slice(),this.state,this.reducePos,this.pos,this.score,i,s,this.curContext,this.lookAhead,e)}recoverByDelete(e,t){let i=e<=this.p.parser.maxNode;i&&this.storeNode(e,this.pos,t,4),this.storeNode(0,this.pos,t,i?8:4),this.pos=this.reducePos=t,this.score-=190}canShift(e){for(let t=new xl(this);;){let i=this.p.parser.stateSlot(t.state,4)||this.p.parser.hasAction(t.state,e);if(i==0)return!1;if((i&65536)==0)return!0;t.reduce(i)}}recoverByInsert(e){if(this.stack.length>=300)return[];let t=this.p.parser.nextStates(this.state);if(t.length>8||this.stack.length>=120){let s=[];for(let r=0,o;ra&1&&l==o)||s.push(t[r],o)}t=s}let i=[];for(let s=0;s>19,s=t&65535,r=this.stack.length-i*3;if(r<0||e.getGoto(this.stack[r],s,!1)<0){let o=this.findForcedReduction();if(o==null)return!1;t=o}this.storeNode(0,this.pos,this.pos,4,!0),this.score-=100}return this.reducePos=this.pos,this.reduce(t),!0}findForcedReduction(){let{parser:e}=this.p,t=[],i=(s,r)=>{if(!t.includes(s))return t.push(s),e.allActions(s,o=>{if(!(o&393216))if(o&65536){let l=(o>>19)-r;if(l>1){let a=o&65535,h=this.stack.length-l*3;if(h>=0&&e.getGoto(this.stack[h],a,!1)>=0)return l<<19|65536|a}}else{let l=i(o,r+1);if(l!=null)return l}})};return i(this.state,0)}forceAll(){for(;!this.p.parser.stateFlag(this.state,2);)if(!this.forceReduce()){this.storeNode(0,this.pos,this.pos,4,!0);break}return this}get deadEnd(){if(this.stack.length!=3)return!1;let{parser:e}=this.p;return e.data[e.stateSlot(this.state,1)]==65535&&!e.stateSlot(this.state,4)}restart(){this.storeNode(0,this.pos,this.pos,4,!0),this.state=this.stack[0],this.stack.length=0}sameState(e){if(this.state!=e.state||this.stack.length!=e.stack.length)return!1;for(let t=0;t0&&this.emitLookAhead()}},Xs=class{constructor(e,t){this.tracker=e,this.context=t,this.hash=e.strict?e.hash(t):0}},xl=class{constructor(e){this.start=e,this.state=e.state,this.stack=e.stack,this.base=this.stack.length}reduce(e){let t=e&65535,i=e>>19;i==0?(this.stack==this.start.stack&&(this.stack=this.stack.slice()),this.stack.push(this.state,0,0),this.base+=3):this.base-=(i-1)*3;let s=this.start.p.parser.getGoto(this.stack[this.base-3],t,!0);this.state=s}},Sl=class n{constructor(e,t,i){this.stack=e,this.pos=t,this.index=i,this.buffer=e.buffer,this.index==0&&this.maybeNext()}static create(e,t=e.bufferBase+e.buffer.length){return new n(e,t,t-e.bufferBase)}maybeNext(){let e=this.stack.parent;e!=null&&(this.index=this.stack.bufferBase-e.bufferBase,this.stack=e,this.buffer=e.buffer)}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}next(){this.index-=4,this.pos-=4,this.index==0&&this.maybeNext()}fork(){return new n(this.stack,this.pos,this.index)}};function pn(n,e=Uint16Array){if(typeof n!="string")return n;let t=null;for(let i=0,s=0;i=92&&o--,o>=34&&o--;let a=o-32;if(a>=46&&(a-=46,l=!0),r+=a,l)break;r*=46}t?t[s++]=r:t=new e(r)}return t}var Pi=class{constructor(){this.start=-1,this.value=-1,this.end=-1,this.extended=-1,this.lookAhead=0,this.mask=0,this.context=0}},gf=new Pi,wl=class{constructor(e,t){this.input=e,this.ranges=t,this.chunk="",this.chunkOff=0,this.chunk2="",this.chunk2Pos=0,this.next=-1,this.token=gf,this.rangeIndex=0,this.pos=this.chunkPos=t[0].from,this.range=t[0],this.end=t[t.length-1].to,this.readNext()}resolveOffset(e,t){let i=this.range,s=this.rangeIndex,r=this.pos+e;for(;ri.to:r>=i.to;){if(s==this.ranges.length-1)return null;let o=this.ranges[++s];r+=o.from-i.to,i=o}return r}clipPos(e){if(e>=this.range.from&&ee)return Math.max(e,t.from);return this.end}peek(e){let t=this.chunkOff+e,i,s;if(t>=0&&t=this.chunk2Pos&&il.to&&(this.chunk2=this.chunk2.slice(0,l.to-i)),s=this.chunk2.charCodeAt(0)}}return i>=this.token.lookAhead&&(this.token.lookAhead=i+1),s}acceptToken(e,t=0){let i=t?this.resolveOffset(t,-1):this.pos;if(i==null||i=this.chunk2Pos&&this.posthis.range.to?e.slice(0,this.range.to-this.pos):e,this.chunkPos=this.pos,this.chunkOff=0}}readNext(){return this.chunkOff>=this.chunk.length&&(this.getChunk(),this.chunkOff==this.chunk.length)?this.next=-1:this.next=this.chunk.charCodeAt(this.chunkOff)}advance(e=1){for(this.chunkOff+=e;this.pos+e>=this.range.to;){if(this.rangeIndex==this.ranges.length-1)return this.setDone();e-=this.range.to-this.pos,this.range=this.ranges[++this.rangeIndex],this.pos=this.range.from}return this.pos+=e,this.pos>=this.token.lookAhead&&(this.token.lookAhead=this.pos+1),this.readNext()}setDone(){return this.pos=this.chunkPos=this.end,this.range=this.ranges[this.rangeIndex=this.ranges.length-1],this.chunk="",this.next=-1}reset(e,t){if(t?(this.token=t,t.start=e,t.lookAhead=e+1,t.value=t.extended=-1):this.token=gf,this.pos!=e){if(this.pos=e,e==this.end)return this.setDone(),this;for(;e=this.range.to;)this.range=this.ranges[++this.rangeIndex];e>=this.chunkPos&&e=this.chunkPos&&t<=this.chunkPos+this.chunk.length)return this.chunk.slice(e-this.chunkPos,t-this.chunkPos);if(e>=this.chunk2Pos&&t<=this.chunk2Pos+this.chunk2.length)return this.chunk2.slice(e-this.chunk2Pos,t-this.chunk2Pos);if(e>=this.range.from&&t<=this.range.to)return this.input.read(e,t);let i="";for(let s of this.ranges){if(s.from>=t)break;s.to>e&&(i+=this.input.read(Math.max(s.from,e),Math.min(s.to,t)))}return i}},$t=class{constructor(e,t){this.data=e,this.id=t}token(e,t){let{parser:i}=t.p;wf(this.data,e,t,this.id,i.data,i.tokenPrecTable)}};$t.prototype.contextual=$t.prototype.fallback=$t.prototype.extend=!1;var Ti=class{constructor(e,t,i){this.precTable=t,this.elseToken=i,this.data=typeof e=="string"?pn(e):e}token(e,t){let i=e.pos,s=0;for(;;){let r=e.next<0,o=e.resolveOffset(1,1);if(wf(this.data,e,t,0,this.data,this.precTable),e.token.value>-1)break;if(this.elseToken==null)return;if(r||s++,o==null)break;e.reset(o,e.token)}s&&(e.reset(i,e.token),e.acceptToken(this.elseToken,s))}};Ti.prototype.contextual=$t.prototype.fallback=$t.prototype.extend=!1;var Pt=class{constructor(e,t={}){this.token=e,this.contextual=!!t.contextual,this.fallback=!!t.fallback,this.extend=!!t.extend}};function wf(n,e,t,i,s,r){let o=0,l=1<0){let p=n[d];if(a.allows(p)&&(e.token.value==-1||e.token.value==p||Sm(p,e.token.value,s,r))){e.acceptToken(p);break}}let c=e.next,f=0,u=n[o+2];if(e.next<0&&u>f&&n[h+u*3-3]==65535){o=n[h+u*3-1];continue e}for(;f>1,p=h+d+(d<<1),O=n[p],g=n[p+1]||65536;if(c=g)f=d+1;else{o=n[p+2],e.advance();continue e}}break}}function yf(n,e,t){for(let i=e,s;(s=n[i])!=65535;i++)if(s==t)return i-e;return-1}function Sm(n,e,t,i){let s=yf(t,i,e);return s<0||yf(t,i,n)e)&&!i.type.isError)return t<0?Math.max(0,Math.min(i.to-1,e-25)):Math.min(n.length,Math.max(i.from+1,e+25));if(t<0?i.prevSibling():i.nextSibling())break;if(!i.parent())return t<0?0:n.length}}var kl=class{constructor(e,t){this.fragments=e,this.nodeSet=t,this.i=0,this.fragment=null,this.safeFrom=-1,this.safeTo=-1,this.trees=[],this.start=[],this.index=[],this.nextFragment()}nextFragment(){let e=this.fragment=this.i==this.fragments.length?null:this.fragments[this.i++];if(e){for(this.safeFrom=e.openStart?bf(e.tree,e.from+e.offset,1)-e.offset:e.from,this.safeTo=e.openEnd?bf(e.tree,e.to+e.offset,-1)-e.offset:e.to;this.trees.length;)this.trees.pop(),this.start.pop(),this.index.pop();this.trees.push(e.tree),this.start.push(-e.offset),this.index.push(0),this.nextStart=this.safeFrom}else this.nextStart=1e9}nodeAt(e){if(ee)return this.nextStart=o,null;if(r instanceof J){if(o==e){if(o=Math.max(this.safeFrom,e)&&(this.trees.push(r),this.start.push(o),this.index.push(0))}else this.index[t]++,this.nextStart=o+r.length}}},Ql=class{constructor(e,t){this.stream=t,this.tokens=[],this.mainToken=null,this.actions=[],this.tokens=e.tokenizers.map(i=>new Pi)}getActions(e){let t=0,i=null,{parser:s}=e.p,{tokenizers:r}=s,o=s.stateSlot(e.state,3),l=e.curContext?e.curContext.hash:0,a=0;for(let h=0;hf.end+25&&(a=Math.max(f.lookAhead,a)),f.value!=0)){let u=t;if(f.extended>-1&&(t=this.addActions(e,f.extended,f.end,t)),t=this.addActions(e,f.value,f.end,t),!c.extend&&(i=f,t>u))break}}for(;this.actions.length>t;)this.actions.pop();return a&&e.setLookAhead(a),!i&&e.pos==this.stream.end&&(i=new Pi,i.value=e.p.parser.eofTerm,i.start=i.end=e.pos,t=this.addActions(e,i.value,i.end,t)),this.mainToken=i,this.actions}getMainToken(e){if(this.mainToken)return this.mainToken;let t=new Pi,{pos:i,p:s}=e;return t.start=i,t.end=Math.min(i+1,s.stream.end),t.value=i==s.stream.end?s.parser.eofTerm:0,t}updateCachedToken(e,t,i){let s=this.stream.clipPos(i.pos);if(t.token(this.stream.reset(s,e),i),e.value>-1){let{parser:r}=i.p;for(let o=0;o=0&&i.p.parser.dialect.allows(l>>1)){(l&1)==0?e.value=l>>1:e.extended=l>>1;break}}}else e.value=0,e.end=this.stream.clipPos(s+1)}putAction(e,t,i,s){for(let r=0;re.bufferLength*4?new kl(i,e.nodeSet):null}get parsedPos(){return this.minStackPos}advance(){let e=this.stacks,t=this.minStackPos,i=this.stacks=[],s,r;if(this.bigReductionCount>300&&e.length==1){let[o]=e;for(;o.forceReduce()&&o.stack.length&&o.stack[o.stack.length-2]>=this.lastBigReductionStart;);this.bigReductionCount=this.lastBigReductionSize=0}for(let o=0;ot)i.push(l);else{if(this.advanceStack(l,i,e))continue;{s||(s=[],r=[]),s.push(l);let a=this.tokens.getMainToken(l);r.push(a.value,a.end)}}break}}if(!i.length){let o=s&&wm(s);if(o)return Ae&&console.log("Finish with "+this.stackID(o)),this.stackToTree(o);if(this.parser.strict)throw Ae&&s&&console.log("Stuck with token "+(this.tokens.mainToken?this.parser.getName(this.tokens.mainToken.value):"none")),new SyntaxError("No parse at "+t);this.recovering||(this.recovering=5)}if(this.recovering&&s){let o=this.stoppedAt!=null&&s[0].pos>this.stoppedAt?s[0]:this.runRecovery(s,r,i);if(o)return Ae&&console.log("Force-finish "+this.stackID(o)),this.stackToTree(o.forceAll())}if(this.recovering){let o=this.recovering==1?1:this.recovering*3;if(i.length>o)for(i.sort((l,a)=>a.score-l.score);i.length>o;)i.pop();i.some(l=>l.reducePos>t)&&this.recovering--}else if(i.length>1){e:for(let o=0;o500&&h.buffer.length>500)if((l.score-h.score||l.buffer.length-h.buffer.length)>0)i.splice(a--,1);else{i.splice(o--,1);continue e}}}i.length>12&&(i.sort((o,l)=>l.score-o.score),i.splice(12,i.length-12))}this.minStackPos=i[0].pos;for(let o=1;o ":"";if(this.stoppedAt!=null&&s>this.stoppedAt)return e.forceReduce()?e:null;if(this.fragments){let h=e.curContext&&e.curContext.tracker.strict,c=h?e.curContext.hash:0;for(let f=this.fragments.nodeAt(s);f;){let u=this.parser.nodeSet.types[f.type.id]==f.type?r.getGoto(e.state,f.type.id):-1;if(u>-1&&f.length&&(!h||(f.prop(R.contextHash)||0)==c))return e.useNode(f,u),Ae&&console.log(o+this.stackID(e)+` (via reuse of ${r.getName(f.type.id)})`),!0;if(!(f instanceof J)||f.children.length==0||f.positions[0]>0)break;let d=f.children[0];if(d instanceof J&&f.positions[0]==0)f=d;else break}}let l=r.stateSlot(e.state,4);if(l>0)return e.reduce(l),Ae&&console.log(o+this.stackID(e)+` (via always-reduce ${r.getName(l&65535)})`),!0;if(e.stack.length>=8400)for(;e.stack.length>6e3&&e.forceReduce(););let a=this.tokens.getActions(e);for(let h=0;hs?t.push(p):i.push(p)}return!1}advanceFully(e,t){let i=e.pos;for(;;){if(!this.advanceStack(e,null,null))return!1;if(e.pos>i)return xf(e,t),!0}}runRecovery(e,t,i){let s=null,r=!1;for(let o=0;o ":"";if(l.deadEnd&&(r||(r=!0,l.restart(),Ae&&console.log(c+this.stackID(l)+" (restarted)"),this.advanceFully(l,i))))continue;let f=l.split(),u=c;for(let d=0;d<10&&f.forceReduce()&&(Ae&&console.log(u+this.stackID(f)+" (via force-reduce)"),!this.advanceFully(f,i));d++)Ae&&(u=this.stackID(f)+" -> ");for(let d of l.recoverByInsert(a))Ae&&console.log(c+this.stackID(d)+" (via recover-insert)"),this.advanceFully(d,i);this.stream.end>l.pos?(h==l.pos&&(h++,a=0),l.recoverByDelete(a,h),Ae&&console.log(c+this.stackID(l)+` (via recover-delete ${this.parser.getName(a)})`),xf(l,i)):(!s||s.scoren,Ls=class{constructor(e){this.start=e.start,this.shift=e.shift||yl,this.reduce=e.reduce||yl,this.reuse=e.reuse||yl,this.hash=e.hash||(()=>0),this.strict=e.strict!==!1}},Es=class n extends $i{constructor(e){if(super(),this.wrappers=[],e.version!=14)throw new RangeError(`Parser version (${e.version}) doesn't match runtime version (14)`);let t=e.nodeNames.split(" ");this.minRepeatTerm=t.length;for(let l=0;le.topRules[l][1]),s=[];for(let l=0;l=0)r(c,a,l[h++]);else{let f=l[h+-c];for(let u=-c;u>0;u--)r(l[h++],a,f);h++}}}this.nodeSet=new fn(t.map((l,a)=>de.define({name:a>=this.minRepeatTerm?void 0:l,id:a,props:s[a],top:i.indexOf(a)>-1,error:a==0,skipped:e.skippedNodes&&e.skippedNodes.indexOf(a)>-1}))),e.propSources&&(this.nodeSet=this.nodeSet.extend(...e.propSources)),this.strict=!1,this.bufferLength=1024;let o=pn(e.tokenData);this.context=e.context,this.specializerSpecs=e.specialized||[],this.specialized=new Uint16Array(this.specializerSpecs.length);for(let l=0;ltypeof l=="number"?new $t(o,l):l),this.topRules=e.topRules,this.dialects=e.dialects||{},this.dynamicPrecedences=e.dynamicPrecedences||null,this.tokenPrecTable=e.tokenPrec,this.termNames=e.termNames||null,this.maxNode=this.nodeSet.types.length-1,this.dialect=this.parseDialect(),this.top=this.topRules[Object.keys(this.topRules)[0]]}createParse(e,t,i){let s=new vl(this,e,t,i);for(let r of this.wrappers)s=r(s,e,t,i);return s}getGoto(e,t,i=!1){let s=this.goto;if(t>=s[0])return-1;for(let r=s[t+1];;){let o=s[r++],l=o&1,a=s[r++];if(l&&i)return a;for(let h=r+(o>>1);r0}validAction(e,t){return!!this.allActions(e,i=>i==t?!0:null)}allActions(e,t){let i=this.stateSlot(e,4),s=i?t(i):void 0;for(let r=this.stateSlot(e,1);s==null;r+=3){if(this.data[r]==65535)if(this.data[r+1]==1)r=Ot(this.data,r+2);else break;s=t(Ot(this.data,r+1))}return s}nextStates(e){let t=[];for(let i=this.stateSlot(e,1);;i+=3){if(this.data[i]==65535)if(this.data[i+1]==1)i=Ot(this.data,i+2);else break;if((this.data[i+2]&1)==0){let s=this.data[i+1];t.some((r,o)=>o&1&&r==s)||t.push(this.data[i],s)}}return t}configure(e){let t=Object.assign(Object.create(n.prototype),this);if(e.props&&(t.nodeSet=this.nodeSet.extend(...e.props)),e.top){let i=this.topRules[e.top];if(!i)throw new RangeError(`Invalid top rule name ${e.top}`);t.top=i}return e.tokenizers&&(t.tokenizers=this.tokenizers.map(i=>{let s=e.tokenizers.find(r=>r.from==i);return s?s.to:i})),e.specializers&&(t.specializers=this.specializers.slice(),t.specializerSpecs=this.specializerSpecs.map((i,s)=>{let r=e.specializers.find(l=>l.from==i.external);if(!r)return i;let o=Object.assign(Object.assign({},i),{external:r.to});return t.specializers[s]=Sf(o),o})),e.contextTracker&&(t.context=e.contextTracker),e.dialect&&(t.dialect=this.parseDialect(e.dialect)),e.strict!=null&&(t.strict=e.strict),e.wrap&&(t.wrappers=t.wrappers.concat(e.wrap)),e.bufferLength!=null&&(t.bufferLength=e.bufferLength),t}hasWrappers(){return this.wrappers.length>0}getName(e){return this.termNames?this.termNames[e]:String(e<=this.maxNode&&this.nodeSet.types[e].name||e)}get eofTerm(){return this.maxNode+1}get topNode(){return this.nodeSet.types[this.top[1]]}dynamicPrecedence(e){let t=this.dynamicPrecedences;return t==null?0:t[e]||0}parseDialect(e){let t=Object.keys(this.dialects),i=t.map(()=>!1);if(e)for(let r of e.split(" ")){let o=t.indexOf(r);o>=0&&(i[o]=!0)}let s=null;for(let r=0;ri)&&t.p.parser.stateFlag(t.state,2)&&(!e||e.scoren.external(t,i)<<1|e}return n.get}var km=0,Ue=class n{constructor(e,t,i,s){this.name=e,this.set=t,this.base=i,this.modified=s,this.id=km++}toString(){let{name:e}=this;for(let t of this.modified)t.name&&(e=`${t.name}(${e})`);return e}static define(e,t){let i=typeof e=="string"?e:"?";if(e instanceof n&&(t=e),t?.base)throw new Error("Can not derive from a modified tag");let s=new n(i,[],null,[]);if(s.set.push(s),t)for(let r of t.set)s.set.push(r);return s}static defineModifier(e){let t=new _s(e);return i=>i.modified.indexOf(t)>-1?i:_s.get(i.base||i,i.modified.concat(t).sort((s,r)=>s.id-r.id))}},Qm=0,_s=class n{constructor(e){this.name=e,this.instances=[],this.id=Qm++}static get(e,t){if(!t.length)return e;let i=t[0].instances.find(l=>l.base==e&&vm(t,l.modified));if(i)return i;let s=[],r=new Ue(e.name,s,e,t);for(let l of t)l.instances.push(r);let o=$m(t);for(let l of e.set)if(!l.modified.length)for(let a of o)s.push(n.get(l,a));return r}};function vm(n,e){return n.length==e.length&&n.every((t,i)=>t==e[i])}function $m(n){let e=[[]];for(let t=0;ti.length-t.length)}function zs(n){let e=Object.create(null);for(let t in n){let i=n[t];Array.isArray(i)||(i=[i]);for(let s of t.split(" "))if(s){let r=[],o=2,l=s;for(let f=0;;){if(l=="..."&&f>0&&f+3==s.length){o=1;break}let u=/^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(l);if(!u)throw new RangeError("Invalid path: "+s);if(r.push(u[0]=="*"?"":u[0][0]=='"'?JSON.parse(u[0]):u[0]),f+=u[0].length,f==s.length)break;let d=s[f++];if(f==s.length&&d=="!"){o=0;break}if(d!="/")throw new RangeError("Invalid path: "+s);l=s.slice(f)}let a=r.length-1,h=r[a];if(!h)throw new RangeError("Invalid path: "+s);let c=new Ht(i,o,a>0?r.slice(0,a):null);e[h]=c.sort(e[h])}}return vf.add(e)}var vf=new R({combine(n,e){let t,i,s;for(;n||e;){if(!n||e&&n.depth>=e.depth?(s=e,e=e.next):(s=n,n=n.next),t&&t.mode==s.mode&&!s.context&&!t.context)continue;let r=new Ht(s.tags,s.mode,s.context);t?t.next=r:i=r,t=r}return i}}),Ht=class{constructor(e,t,i,s){this.tags=e,this.mode=t,this.context=i,this.next=s}get opaque(){return this.mode==0}get inherit(){return this.mode==1}sort(e){return!e||e.depth{let o=s;for(let l of r)for(let a of l.set){let h=t[a.id];if(h){o=o?o+" "+h:h;break}}return o},scope:i}}function Pm(n,e){let t=null;for(let i of n){let s=i.style(e);s&&(t=t?t+" "+s:s)}return t}function $f(n,e,t,i=0,s=n.length){let r=new Tl(i,Array.isArray(e)?e:[e],t);r.highlightRange(n.cursor(),i,s,"",r.highlighters),r.flush(s)}var Tl=class{constructor(e,t,i){this.at=e,this.highlighters=t,this.span=i,this.class=""}startSpan(e,t){t!=this.class&&(this.flush(e),e>this.at&&(this.at=e),this.class=t)}flush(e){e>this.at&&this.class&&this.span(this.at,e,this.class)}highlightRange(e,t,i,s,r){let{type:o,from:l,to:a}=e;if(l>=i||a<=t)return;o.isTop&&(r=this.highlighters.filter(d=>!d.scope||d.scope(o)));let h=s,c=Tm(e)||Ht.empty,f=Pm(r,c.tags);if(f&&(h&&(h+=" "),h+=f,c.mode==1&&(s+=(s?" ":"")+f)),this.startSpan(Math.max(t,l),h),c.opaque)return;let u=e.tree&&e.tree.prop(R.mounted);if(u&&u.overlay){let d=e.node.enter(u.overlay[0].from+l,1),p=this.highlighters.filter(g=>!g.scope||g.scope(u.tree.type)),O=e.firstChild();for(let g=0,y=l;;g++){let x=g=S||!e.nextSibling())););if(!x||S>i)break;y=x.to+l,y>t&&(this.highlightRange(d.cursor(),Math.max(t,x.from+l),Math.min(i,y),"",p),this.startSpan(Math.min(i,y),h))}O&&e.parent()}else if(e.firstChild()){u&&(s="");do if(!(e.to<=t)){if(e.from>=i)break;this.highlightRange(e,t,i,s,r),this.startSpan(Math.min(i,e.to),h)}while(e.nextSibling());e.parent()}}};function Tm(n){let e=n.type.prop(vf);for(;e&&e.context&&!n.matchContext(e.context);)e=e.next;return e||null}var P=Ue.define,Ds=P(),Tt=P(),kf=P(Tt),Qf=P(Tt),Ct=P(),Bs=P(Ct),Pl=P(Ct),lt=P(),Ft=P(lt),rt=P(),ot=P(),Cl=P(),On=P(Cl),Ws=P(),m={comment:Ds,lineComment:P(Ds),blockComment:P(Ds),docComment:P(Ds),name:Tt,variableName:P(Tt),typeName:kf,tagName:P(kf),propertyName:Qf,attributeName:P(Qf),className:P(Tt),labelName:P(Tt),namespace:P(Tt),macroName:P(Tt),literal:Ct,string:Bs,docString:P(Bs),character:P(Bs),attributeValue:P(Bs),number:Pl,integer:P(Pl),float:P(Pl),bool:P(Ct),regexp:P(Ct),escape:P(Ct),color:P(Ct),url:P(Ct),keyword:rt,self:P(rt),null:P(rt),atom:P(rt),unit:P(rt),modifier:P(rt),operatorKeyword:P(rt),controlKeyword:P(rt),definitionKeyword:P(rt),moduleKeyword:P(rt),operator:ot,derefOperator:P(ot),arithmeticOperator:P(ot),logicOperator:P(ot),bitwiseOperator:P(ot),compareOperator:P(ot),updateOperator:P(ot),definitionOperator:P(ot),typeOperator:P(ot),controlOperator:P(ot),punctuation:Cl,separator:P(Cl),bracket:On,angleBracket:P(On),squareBracket:P(On),paren:P(On),brace:P(On),content:lt,heading:Ft,heading1:P(Ft),heading2:P(Ft),heading3:P(Ft),heading4:P(Ft),heading5:P(Ft),heading6:P(Ft),contentSeparator:P(lt),list:P(lt),quote:P(lt),emphasis:P(lt),strong:P(lt),link:P(lt),monospace:P(lt),strikethrough:P(lt),inserted:P(),deleted:P(),changed:P(),invalid:P(),meta:Ws,documentMeta:P(Ws),annotation:P(Ws),processingInstruction:P(Ws),definition:Ue.defineModifier("definition"),constant:Ue.defineModifier("constant"),function:Ue.defineModifier("function"),standard:Ue.defineModifier("standard"),local:Ue.defineModifier("local"),special:Ue.defineModifier("special")};for(let n in m){let e=m[n];e instanceof Ue&&(e.name=n)}var cb=Zl([{tag:m.link,class:"tok-link"},{tag:m.heading,class:"tok-heading"},{tag:m.emphasis,class:"tok-emphasis"},{tag:m.strong,class:"tok-strong"},{tag:m.keyword,class:"tok-keyword"},{tag:m.atom,class:"tok-atom"},{tag:m.bool,class:"tok-bool"},{tag:m.url,class:"tok-url"},{tag:m.labelName,class:"tok-labelName"},{tag:m.inserted,class:"tok-inserted"},{tag:m.deleted,class:"tok-deleted"},{tag:m.literal,class:"tok-literal"},{tag:m.string,class:"tok-string"},{tag:m.number,class:"tok-number"},{tag:[m.regexp,m.escape,m.special(m.string)],class:"tok-string2"},{tag:m.variableName,class:"tok-variableName"},{tag:m.local(m.variableName),class:"tok-variableName tok-local"},{tag:m.definition(m.variableName),class:"tok-variableName tok-definition"},{tag:m.special(m.variableName),class:"tok-variableName2"},{tag:m.definition(m.propertyName),class:"tok-propertyName tok-definition"},{tag:m.typeName,class:"tok-typeName"},{tag:m.namespace,class:"tok-namespace"},{tag:m.className,class:"tok-className"},{tag:m.macroName,class:"tok-macroName"},{tag:m.propertyName,class:"tok-propertyName"},{tag:m.operator,class:"tok-operator"},{tag:m.comment,class:"tok-comment"},{tag:m.meta,class:"tok-meta"},{tag:m.invalid,class:"tok-invalid"},{tag:m.punctuation,class:"tok-punctuation"}]);var Cm=316,Zm=317,Pf=1,Am=2,Mm=3,Rm=4,Xm=318,Lm=320,Em=321,Dm=5,Bm=6,Wm=0,Ml=[9,10,11,12,13,32,133,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288],Tf=125,_m=59,Rl=47,zm=42,Im=43,Ym=45,qm=60,Vm=44,jm=63,Nm=46,Gm=91,Um=new Ls({start:!1,shift(n,e){return e==Dm||e==Bm||e==Lm?n:e==Em},strict:!1}),Fm=new Pt((n,e)=>{let{next:t}=n;(t==Tf||t==-1||e.context)&&n.acceptToken(Xm)},{contextual:!0,fallback:!0}),Hm=new Pt((n,e)=>{let{next:t}=n,i;Ml.indexOf(t)>-1||t==Rl&&((i=n.peek(1))==Rl||i==zm)||t!=Tf&&t!=_m&&t!=-1&&!e.context&&n.acceptToken(Cm)},{contextual:!0}),Km=new Pt((n,e)=>{n.next==Gm&&!e.context&&n.acceptToken(Zm)},{contextual:!0}),Jm=new Pt((n,e)=>{let{next:t}=n;if(t==Im||t==Ym){if(n.advance(),t==n.next){n.advance();let i=!e.context&&e.canShift(Pf);n.acceptToken(i?Pf:Am)}}else t==jm&&n.peek(1)==Nm&&(n.advance(),n.advance(),(n.next<48||n.next>57)&&n.acceptToken(Mm))},{contextual:!0});function Al(n,e){return n>=65&&n<=90||n>=97&&n<=122||n==95||n>=192||!e&&n>=48&&n<=57}var eg=new Pt((n,e)=>{if(n.next!=qm||!e.dialectEnabled(Wm)||(n.advance(),n.next==Rl))return;let t=0;for(;Ml.indexOf(n.next)>-1;)n.advance(),t++;if(Al(n.next,!0)){for(n.advance(),t++;Al(n.next,!1);)n.advance(),t++;for(;Ml.indexOf(n.next)>-1;)n.advance(),t++;if(n.next==Vm)return;for(let i=0;;i++){if(i==7){if(!Al(n.next,!0))return;break}if(n.next!="extends".charCodeAt(i))break;n.advance(),t++}}n.acceptToken(Rm,-t)}),tg=zs({"get set async static":m.modifier,"for while do if else switch try catch finally return throw break continue default case defer":m.controlKeyword,"in of await yield void typeof delete instanceof as satisfies":m.operatorKeyword,"let var const using function class extends":m.definitionKeyword,"import export from":m.moduleKeyword,"with debugger new":m.keyword,TemplateString:m.special(m.string),super:m.atom,BooleanLiteral:m.bool,this:m.self,null:m.null,Star:m.modifier,VariableName:m.variableName,"CallExpression/VariableName TaggedTemplateExpression/VariableName":m.function(m.variableName),VariableDefinition:m.definition(m.variableName),Label:m.labelName,PropertyName:m.propertyName,PrivatePropertyName:m.special(m.propertyName),"CallExpression/MemberExpression/PropertyName":m.function(m.propertyName),"FunctionDeclaration/VariableDefinition":m.function(m.definition(m.variableName)),"ClassDeclaration/VariableDefinition":m.definition(m.className),"NewExpression/VariableName":m.className,PropertyDefinition:m.definition(m.propertyName),PrivatePropertyDefinition:m.definition(m.special(m.propertyName)),UpdateOp:m.updateOperator,"LineComment Hashbang":m.lineComment,BlockComment:m.blockComment,Number:m.number,String:m.string,Escape:m.escape,ArithOp:m.arithmeticOperator,LogicOp:m.logicOperator,BitOp:m.bitwiseOperator,CompareOp:m.compareOperator,RegExp:m.regexp,Equals:m.definitionOperator,Arrow:m.function(m.punctuation),": Spread":m.punctuation,"( )":m.paren,"[ ]":m.squareBracket,"{ }":m.brace,"InterpolationStart InterpolationEnd":m.special(m.brace),".":m.derefOperator,", ;":m.separator,"@":m.meta,TypeName:m.typeName,TypeDefinition:m.definition(m.typeName),"type enum interface implements namespace module declare":m.definitionKeyword,"abstract global Privacy readonly override":m.modifier,"is keyof unique infer asserts":m.operatorKeyword,JSXAttributeValue:m.attributeValue,JSXText:m.content,"JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag":m.angleBracket,"JSXIdentifier JSXNameSpacedName":m.tagName,"JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName":m.attributeName,"JSXBuiltin/JSXIdentifier":m.standard(m.tagName)}),ig={__proto__:null,export:20,as:25,from:33,default:36,async:41,function:42,in:52,out:55,const:56,extends:60,this:64,true:72,false:72,null:84,void:88,typeof:92,super:108,new:142,delete:154,yield:163,await:167,class:172,public:235,private:235,protected:235,readonly:237,instanceof:256,satisfies:259,import:292,keyof:349,unique:353,infer:359,asserts:395,is:397,abstract:417,implements:419,type:421,let:424,var:426,using:429,interface:435,enum:439,namespace:445,module:447,declare:451,global:455,defer:471,for:476,of:485,while:488,with:492,do:496,if:500,else:502,switch:506,case:512,try:518,catch:522,finally:526,return:530,throw:534,break:538,continue:542,debugger:546},ng={__proto__:null,async:129,get:131,set:133,declare:195,public:197,private:197,protected:197,static:199,abstract:201,override:203,readonly:209,accessor:211,new:401},sg={__proto__:null,"<":193},Cf=Es.deserialize({version:14,states:"$F|Q%TQlOOO%[QlOOO'_QpOOP(lO`OOO*zQ!0MxO'#CiO+RO#tO'#CjO+aO&jO'#CjO+oO#@ItO'#DaO.QQlO'#DgO.bQlO'#DrO%[QlO'#DzO0fQlO'#ESOOQ!0Lf'#E['#E[O1PQ`O'#EXOOQO'#Ep'#EpOOQO'#Il'#IlO1XQ`O'#GsO1dQ`O'#EoO1iQ`O'#EoO3hQ!0MxO'#JrO6[Q!0MxO'#JsO6uQ`O'#F]O6zQ,UO'#FtOOQ!0Lf'#Ff'#FfO7VO7dO'#FfO9XQMhO'#F|O9`Q`O'#F{OOQ!0Lf'#Js'#JsOOQ!0Lb'#Jr'#JrO9eQ`O'#GwOOQ['#K_'#K_O9pQ`O'#IYO9uQ!0LrO'#IZOOQ['#J`'#J`OOQ['#I_'#I_Q`QlOOQ`QlOOO9}Q!L^O'#DvO:UQlO'#EOO:]QlO'#EQO9kQ`O'#GsO:dQMhO'#CoO:rQ`O'#EnO:}Q`O'#EyO;hQMhO'#FeO;xQ`O'#GsOOQO'#K`'#K`O;}Q`O'#K`O<]Q`O'#G{O<]Q`O'#G|O<]Q`O'#HOO9kQ`O'#HRO=SQ`O'#HUO>kQ`O'#CeO>{Q`O'#HcO?TQ`O'#HiO?TQ`O'#HkO`QlO'#HmO?TQ`O'#HoO?TQ`O'#HrO?YQ`O'#HxO?_Q!0LsO'#IOO%[QlO'#IQO?jQ!0LsO'#ISO?uQ!0LsO'#IUO9uQ!0LrO'#IWO@QQ!0MxO'#CiOASQpO'#DlQOQ`OOO%[QlO'#EQOAjQ`O'#ETO:dQMhO'#EnOAuQ`O'#EnOBQQ!bO'#FeOOQ['#Cg'#CgOOQ!0Lb'#Dq'#DqOOQ!0Lb'#Jv'#JvO%[QlO'#JvOOQO'#Jy'#JyOOQO'#Ih'#IhOCQQpO'#EgOOQ!0Lb'#Ef'#EfOOQ!0Lb'#J}'#J}OC|Q!0MSO'#EgODWQpO'#EWOOQO'#Jx'#JxODlQpO'#JyOEyQpO'#EWODWQpO'#EgPFWO&2DjO'#CbPOOO)CD})CD}OOOO'#I`'#I`OFcO#tO,59UOOQ!0Lh,59U,59UOOOO'#Ia'#IaOFqO&jO,59UOGPQ!L^O'#DcOOOO'#Ic'#IcOGWO#@ItO,59{OOQ!0Lf,59{,59{OGfQlO'#IdOGyQ`O'#JtOIxQ!fO'#JtO+}QlO'#JtOJPQ`O,5:ROJgQ`O'#EpOJtQ`O'#KTOKPQ`O'#KSOKPQ`O'#KSOKXQ`O,5;^OK^Q`O'#KROOQ!0Ln,5:^,5:^OKeQlO,5:^OMcQ!0MxO,5:fONSQ`O,5:nONmQ!0LrO'#KQONtQ`O'#KPO9eQ`O'#KPO! YQ`O'#KPO! bQ`O,5;]O! gQ`O'#KPO!#lQ!fO'#JsOOQ!0Lh'#Ci'#CiO%[QlO'#ESO!$[Q!fO,5:sOOQS'#Jz'#JzOOQO-EtOOQ['#Jh'#JhOOQ[,5>u,5>uOOQ[-E<]-E<]O!TO`QlO,5>VO!LOQ`O,5>XO`QlO,5>ZO!LTQ`O,5>^O!LYQlO,5>dOOQ[,5>j,5>jO%[QlO,5>jO9uQ!0LrO,5>lOOQ[,5>n,5>nO#!dQ`O,5>nOOQ[,5>p,5>pO#!dQ`O,5>pOOQ[,5>r,5>rO##QQpO'#D_O%[QlO'#JvO##sQpO'#JvO##}QpO'#DmO#$`QpO'#DmO#&qQlO'#DmO#&xQ`O'#JuO#'QQ`O,5:WO#'VQ`O'#EtO#'eQ`O'#KUO#'mQ`O,5;_O#'rQpO'#DmO#(PQpO'#EVOOQ!0Lf,5:o,5:oO%[QlO,5:oO#(WQ`O,5:oO?YQ`O,5;YO!CUQpO,5;YO!C^QMhO,5;YO:dQMhO,5;YO#(`Q`O,5@bO#(eQ07dO,5:sOOQO-EPO$6^Q`O,5>POOQ[1G3i1G3iO`QlO1G3iOOQ[1G3o1G3oOOQ[1G3q1G3qO?TQ`O1G3sO$6cQlO1G3uO$:gQlO'#HtOOQ[1G3x1G3xO$:tQ`O'#HzO?YQ`O'#H|OOQ[1G4O1G4OO$:|QlO1G4OO9uQ!0LrO1G4UOOQ[1G4W1G4WOOQ!0Lb'#G_'#G_O9uQ!0LrO1G4YO9uQ!0LrO1G4[O$?TQ`O,5@bO!)[QlO,5;`O9eQ`O,5;`O?YQ`O,5:XO!)[QlO,5:XO!CUQpO,5:XO$?YQ?MtO,5:XOOQO,5;`,5;`O$?dQpO'#IeO$?zQ`O,5@aOOQ!0Lf1G/r1G/rO$@SQpO'#IkO$@^Q`O,5@pOOQ!0Lb1G0y1G0yO#$`QpO,5:XOOQO'#Ig'#IgO$@fQpO,5:qOOQ!0Ln,5:q,5:qO#(ZQ`O1G0ZOOQ!0Lf1G0Z1G0ZO%[QlO1G0ZOOQ!0Lf1G0t1G0tO?YQ`O1G0tO!CUQpO1G0tO!C^QMhO1G0tOOQ!0Lb1G5|1G5|O!ByQ!0LrO1G0^OOQO1G0m1G0mO%[QlO1G0mO$@mQ!0LrO1G0mO$@xQ!0LrO1G0mO!CUQpO1G0^ODWQpO1G0^O$AWQ!0LrO1G0mOOQO1G0^1G0^O$AlQ!0MxO1G0mPOOO-E<[-E<[POOO1G.h1G.hOOOO1G/i1G/iO$AvQ!bO,5QQpO,5@}OOQ!0Lb1G3c1G3cOOQ[7+$V7+$VO@zQ`O7+$VO9uQ!0LrO7+$VO%>]Q`O7+$VO%[QlO1G6lO%[QlO1G6mO%>bQ!0LrO1G6lO%>lQlO1G3kO%>sQ`O1G3kO%>xQlO1G3kOOQ[7+)T7+)TO9uQ!0LrO7+)_O`QlO7+)aOOQ['#Kh'#KhOOQ['#JS'#JSO%?PQlO,5>`OOQ[,5>`,5>`O%[QlO'#HuO%?^Q`O'#HwOOQ[,5>f,5>fO9eQ`O,5>fOOQ[,5>h,5>hOOQ[7+)j7+)jOOQ[7+)p7+)pOOQ[7+)t7+)tOOQ[7+)v7+)vO%?cQpO1G5|O%?}Q?MtO1G0zO%@XQ`O1G0zOOQO1G/s1G/sO%@dQ?MtO1G/sO?YQ`O1G/sO!)[QlO'#DmOOQO,5?P,5?POOQO-ERQ`O7+,WO&>WQ`O7+,XO%[QlO7+,WO%[QlO7+,XOOQ[7+)V7+)VO&>]Q`O7+)VO&>bQlO7+)VO&>iQ`O7+)VOOQ[<nQ`O,5>aOOQ[,5>c,5>cO&>sQ`O1G4QO9eQ`O7+&fO!)[QlO7+&fOOQO7+%_7+%_O&>xQ?MtO1G6ZO?YQ`O7+%_OOQ!0Lf<yQ?MvO,5?aO'@|Q?MvO,5?cO'CPQ?MvO7+'|O'DuQMjOG27TOOQO<VO!l$xO#jROe!iOpkOrPO(T)]O(VTO(YUO(aVO(o[O~O!]$_Oa$qa'z$qa'w$qa!k$qa!Y$qa!_$qa%i$qa!g$qa~Ol)dO~P!&zOh%VOp%WOr%XOs$tOt$tOz%YO|%ZO!O%]O!S${O!_$|O!i%bO!l$xO#j%cO$W%`O$t%^O$v%_O$y%aO(T(vO(VTO(YUO(a$uO(y$}O(z%PO~Og(pP~P!,TO!Q)iO!g)hO!_$^X$Z$^X$]$^X$_$^X$f$^X~O!g)hO!_({X$Z({X$]({X$_({X$f({X~O!Q)iO~P!.^O!Q)iO!_({X$Z({X$]({X$_({X$f({X~O!_)kO$Z)oO$])jO$_)jO$f)pO~O![)sO~P!)[O$]$hO$_$gO$f)wO~On$zX!Q$zX#S$zX'y$zX(y$zX(z$zX~OgmXg$zXnmX!]mX#`mX~P!0SOx)yO(b)zO(c)|O~On*VO!Q*OO'y*PO(y$}O(z%PO~Og)}O~P!1WOg*WO~Oh%VOr%XOs$tOt$tOz%YO|%ZO!OVO!l$xO#jVO!l$xO#jROe!iOpkOrPO(VTO(YUO(aVO(o[O~O(T=QO~P#$qO!]-]O!^(iX~O!^-_O~O!g-VO#`-UO!]#hX!^#hX~O!]-`O!^(xX~O!^-bO~O!c-cO!d-cO(U!lO~P#$`O!^-fO~P'_On-iO!_'`O~O!Y-nO~Os!{a!b!{a!c!{a!d!{a#T!{a#U!{a#V!{a#W!{a#X!{a#[!{a#]!{a(U!{a(V!{a(Y!{a(e!{a(o!{a~P!#vO!p-sO#`-qO~PChO!c-uO!d-uO(U!lO~PDWOa%nO#`-qO'z%nO~Oa%nO!g#vO#`-qO'z%nO~Oa%nO!g#vO!p-sO#`-qO'z%nO(r'pO~O(P'xO(Q'xO(R-zO~Ov-{O~O!Y'Wa!]'Wa~P!:tO![.PO!Y'WX!]'WX~P%[O!](VO!Y(ha~O!Y(ha~PHRO!](^O!Y(va~O!S%hO![.TO!_%iO(T%gO!Y'^X!]'^X~O#`.VO!](ta!k(taa(ta'z(ta~O!g#vO~P#,wO!](jO!k(sa~O!S%hO!_%iO#j.ZO(T%gO~Op.`O!S%hO![.]O!_%iO!|]O#i._O#j.]O(T%gO!]'aX!k'aX~OR.dO!l#xO~Oh%VOn.gO!_'`O%i.fO~Oa#ci!]#ci'z#ci'w#ci!Y#ci!k#civ#ci!_#ci%i#ci!g#ci~P!:tOn>]O!Q*OO'y*PO(y$}O(z%PO~O#k#_aa#_a#`#_a'z#_a!]#_a!k#_a!_#_a!Y#_a~P#/sO#k(`XP(`XR(`X[(`Xa(`Xj(`Xr(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X'z(`X(a(`X(r(`X!k(`X!Y(`X'w(`Xv(`X!_(`X%i(`X!g(`X~P!6kO!].tO!k(kX~P!:tO!k.wO~O!Y.yO~OP$[OR#zO!Q#yO!S#{O!l#xO!p$[O(aVO[#mia#mij#mir#mi!]#mi#R#mi#o#mi#p#mi#q#mi#r#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#n#mi~P#3cO#n$OO~P#3cOP$[OR#zOr$aO!Q#yO!S#{O!l#xO!p$[O#n$OO#o$PO#p$PO#q$PO(aVO[#mia#mij#mi!]#mi#R#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#r#mi~P#6QO#r$QO~P#6QOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO(aVOa#mi!]#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#v#mi~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO(aVO(z#}Oa#mi!]#mi#z#mi#{#mi'z#mi(r#mi(y#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#x$UO~P#;VO#x#mi~P#;VO#v$SO~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO#x$UO(aVO(y#|O(z#}Oa#mi!]#mi#{#mi'z#mi(r#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#z#mi~P#={O#z$WO~P#={OP]XR]X[]Xj]Xr]X!Q]X!S]X!l]X!p]X#R]X#S]X#`]X#kfX#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#x]X#z]X#{]X$Q]X(a]X(r]X(y]X(z]X!]]X!^]X~O$O]X~P#@jOP$[OR#zO[]O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P#EyO!]/POg(pX~P!1WOg/RO~Oa$Pi!]$Pi'z$Pi'w$Pi!Y$Pi!k$Piv$Pi!_$Pi%i$Pi!g$Pi~P!:tO$]/SO$_/SO~O$]/TO$_/TO~O!g)hO#`/UO!_$cX$Z$cX$]$cX$_$cX$f$cX~O![/VO~O!_)kO$Z/XO$])jO$_)jO$f/YO~O!]VO!l$xO#j^O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P&,QO#S$dOP(`XR(`X[(`Xj(`Xn(`Xr(`X!Q(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X$O(`X'y(`X(a(`X(r(`X(y(`X(z(`X!](`X!^(`X~O$O$Pi!]$Pi!^$Pi~P#BwO$O!ri!^!ri~P$+oOg']a!]']a~P!1WO!^7nO~O!]'da!^'da~P#BwO!Y7oO~P#/sO!g#vO(r'pO!]'ea!k'ea~O!]/pO!k)Oi~O!]/pO!g#vO!k)Oi~Og$|q!]$|q#`$|q$O$|q~P!1WO!Y'ga!]'ga~P#/sO!g7vO~O!]/yO!Y)Pi~P#/sO!]/yO!Y)Pi~O!Y7yO~Oh%VOr8OO!l%eO(r'pO~Oj8QO!g#vO~Or8TO!g#vO(r'pO~O!Q*OO'y*PO(z%POn'ja(y'ja!]'ja#`'ja~Og'ja$O'ja~P&5RO!Q*OO'y*POn'la(y'la(z'la!]'la#`'la~Og'la$O'la~P&5tOg(_q!](_q~P!1WO#`8VOg(_q!](_q~P!1WO!Y8WO~Og%Oq!]%Oq#`%Oq$O%Oq~P!1WOa$oy!]$oy'z$oy'w$oy!Y$oy!k$oyv$oy!_$oy%i$oy!g$oy~P!:tO!g6rO~O!]5[O!_)Qa~O!_'`OP$TaR$Ta[$Taj$Tar$Ta!Q$Ta!S$Ta!]$Ta!l$Ta!p$Ta#R$Ta#n$Ta#o$Ta#p$Ta#q$Ta#r$Ta#s$Ta#t$Ta#u$Ta#v$Ta#x$Ta#z$Ta#{$Ta(a$Ta(r$Ta(y$Ta(z$Ta~O%i7WO~P&8fO%^8[Oa%[i!_%[i'z%[i!]%[i~Oa#cy!]#cy'z#cy'w#cy!Y#cy!k#cyv#cy!_#cy%i#cy!g#cy~P!:tO[8^O~Ob8`O(T+qO(VTO(YUO~O!]1TO!^)Xi~O`8dO~O(e(|O!]'pX!^'pX~O!]5uO!^)Ua~O!^8nO~P%;eO(o!sO~P$&YO#[8oO~O!_1oO~O!_1oO%i8qO~On8tO!_1oO%i8qO~O[8yO!]'sa!^'sa~O!]1zO!^)Vi~O!k8}O~O!k9OO~O!k9RO~O!k9RO~P%[Oa9TO~O!g9UO~O!k9VO~O!](wi!^(wi~P#BwOa%nO#`9_O'z%nO~O!](ty!k(tya(ty'z(ty~P!:tO!](jO!k(sy~O%i9bO~P&8fO!_'`O%i9bO~O#k$|qP$|qR$|q[$|qa$|qj$|qr$|q!S$|q!]$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q'z$|q(a$|q(r$|q!k$|q!Y$|q'w$|q#`$|qv$|q!_$|q%i$|q!g$|q~P#/sO#k'jaP'jaR'ja['jaa'jaj'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja'z'ja(a'ja(r'ja!k'ja!Y'ja'w'jav'ja!_'ja%i'ja!g'ja~P&5RO#k'laP'laR'la['laa'laj'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la'z'la(a'la(r'la!k'la!Y'la'w'lav'la!_'la%i'la!g'la~P&5tO#k%OqP%OqR%Oq[%Oqa%Oqj%Oqr%Oq!S%Oq!]%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq'z%Oq(a%Oq(r%Oq!k%Oq!Y%Oq'w%Oq#`%Oqv%Oq!_%Oq%i%Oq!g%Oq~P#/sO!]'Yi!k'Yi~P!:tO$O#cq!]#cq!^#cq~P#BwO(y$}OP%aaR%aa[%aaj%aar%aa!S%aa!l%aa!p%aa#R%aa#n%aa#o%aa#p%aa#q%aa#r%aa#s%aa#t%aa#u%aa#v%aa#x%aa#z%aa#{%aa$O%aa(a%aa(r%aa!]%aa!^%aa~On%aa!Q%aa'y%aa(z%aa~P&IyO(z%POP%caR%ca[%caj%car%ca!S%ca!l%ca!p%ca#R%ca#n%ca#o%ca#p%ca#q%ca#r%ca#s%ca#t%ca#u%ca#v%ca#x%ca#z%ca#{%ca$O%ca(a%ca(r%ca!]%ca!^%ca~On%ca!Q%ca'y%ca(y%ca~P&LQOn>^O!Q*OO'y*PO(z%PO~P&IyOn>^O!Q*OO'y*PO(y$}O~P&LQOR0kO!Q0kO!S0lO#S$dOP}a[}aj}an}ar}a!l}a!p}a#R}a#n}a#o}a#p}a#q}a#r}a#s}a#t}a#u}a#v}a#x}a#z}a#{}a$O}a'y}a(a}a(r}a(y}a(z}a!]}a!^}a~O!Q*OO'y*POP$saR$sa[$saj$san$sar$sa!S$sa!l$sa!p$sa#R$sa#n$sa#o$sa#p$sa#q$sa#r$sa#s$sa#t$sa#u$sa#v$sa#x$sa#z$sa#{$sa$O$sa(a$sa(r$sa(y$sa(z$sa!]$sa!^$sa~O!Q*OO'y*POP$uaR$ua[$uaj$uan$uar$ua!S$ua!l$ua!p$ua#R$ua#n$ua#o$ua#p$ua#q$ua#r$ua#s$ua#t$ua#u$ua#v$ua#x$ua#z$ua#{$ua$O$ua(a$ua(r$ua(y$ua(z$ua!]$ua!^$ua~On>^O!Q*OO'y*PO(y$}O(z%PO~OP%TaR%Ta[%Taj%Tar%Ta!S%Ta!l%Ta!p%Ta#R%Ta#n%Ta#o%Ta#p%Ta#q%Ta#r%Ta#s%Ta#t%Ta#u%Ta#v%Ta#x%Ta#z%Ta#{%Ta$O%Ta(a%Ta(r%Ta!]%Ta!^%Ta~P''VO$O$mq!]$mq!^$mq~P#BwO$O$oq!]$oq!^$oq~P#BwO!^9oO~O$O9pO~P!1WO!g#vO!]'ei!k'ei~O!g#vO(r'pO!]'ei!k'ei~O!]/pO!k)Oq~O!Y'gi!]'gi~P#/sO!]/yO!Y)Pq~Or9wO!g#vO(r'pO~O[9yO!Y9xO~P#/sO!Y9xO~Oj:PO!g#vO~Og(_y!](_y~P!1WO!]'na!_'na~P#/sOa%[q!_%[q'z%[q!]%[q~P#/sO[:UO~O!]1TO!^)Xq~O`:YO~O#`:ZO!]'pa!^'pa~O!]5uO!^)Ui~P#BwO!S:]O~O!_1oO%i:`O~O(VTO(YUO(e:eO~O!]1zO!^)Vq~O!k:hO~O!k:iO~O!k:jO~O!k:jO~P%[O#`:mO!]#hy!^#hy~O!]#hy!^#hy~P#BwO%i:rO~P&8fO!_'`O%i:rO~O$O#|y!]#|y!^#|y~P#BwOP$|iR$|i[$|ij$|ir$|i!S$|i!l$|i!p$|i#R$|i#n$|i#o$|i#p$|i#q$|i#r$|i#s$|i#t$|i#u$|i#v$|i#x$|i#z$|i#{$|i$O$|i(a$|i(r$|i!]$|i!^$|i~P''VO!Q*OO'y*PO(z%POP'iaR'ia['iaj'ian'iar'ia!S'ia!l'ia!p'ia#R'ia#n'ia#o'ia#p'ia#q'ia#r'ia#s'ia#t'ia#u'ia#v'ia#x'ia#z'ia#{'ia$O'ia(a'ia(r'ia(y'ia!]'ia!^'ia~O!Q*OO'y*POP'kaR'ka['kaj'kan'kar'ka!S'ka!l'ka!p'ka#R'ka#n'ka#o'ka#p'ka#q'ka#r'ka#s'ka#t'ka#u'ka#v'ka#x'ka#z'ka#{'ka$O'ka(a'ka(r'ka(y'ka(z'ka!]'ka!^'ka~O(y$}OP%aiR%ai[%aij%ain%air%ai!Q%ai!S%ai!l%ai!p%ai#R%ai#n%ai#o%ai#p%ai#q%ai#r%ai#s%ai#t%ai#u%ai#v%ai#x%ai#z%ai#{%ai$O%ai'y%ai(a%ai(r%ai(z%ai!]%ai!^%ai~O(z%POP%ciR%ci[%cij%cin%cir%ci!Q%ci!S%ci!l%ci!p%ci#R%ci#n%ci#o%ci#p%ci#q%ci#r%ci#s%ci#t%ci#u%ci#v%ci#x%ci#z%ci#{%ci$O%ci'y%ci(a%ci(r%ci(y%ci!]%ci!^%ci~O$O$oy!]$oy!^$oy~P#BwO$O#cy!]#cy!^#cy~P#BwO!g#vO!]'eq!k'eq~O!]/pO!k)Oy~O!Y'gq!]'gq~P#/sOr:|O!g#vO(r'pO~O[;QO!Y;PO~P#/sO!Y;PO~Og(_!R!](_!R~P!1WOa%[y!_%[y'z%[y!]%[y~P#/sO!]1TO!^)Xy~O!]5uO!^)Uq~O(T;XO~O!_1oO%i;[O~O!k;_O~O%i;dO~P&8fOP$|qR$|q[$|qj$|qr$|q!S$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q$O$|q(a$|q(r$|q!]$|q!^$|q~P''VO!Q*OO'y*PO(z%POP'jaR'ja['jaj'jan'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja$O'ja(a'ja(r'ja(y'ja!]'ja!^'ja~O!Q*OO'y*POP'laR'la['laj'lan'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la$O'la(a'la(r'la(y'la(z'la!]'la!^'la~OP%OqR%Oq[%Oqj%Oqr%Oq!S%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq$O%Oq(a%Oq(r%Oq!]%Oq!^%Oq~P''VOg%e!Z!]%e!Z#`%e!Z$O%e!Z~P!1WO!Y;hO~P#/sOr;iO!g#vO(r'pO~O[;kO!Y;hO~P#/sO!]'pq!^'pq~P#BwO!]#h!Z!^#h!Z~P#BwO#k%e!ZP%e!ZR%e!Z[%e!Za%e!Zj%e!Zr%e!Z!S%e!Z!]%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z'z%e!Z(a%e!Z(r%e!Z!k%e!Z!Y%e!Z'w%e!Z#`%e!Zv%e!Z!_%e!Z%i%e!Z!g%e!Z~P#/sOr;tO!g#vO(r'pO~O!Y;uO~P#/sOr;|O!g#vO(r'pO~O!Y;}O~P#/sOP%e!ZR%e!Z[%e!Zj%e!Zr%e!Z!S%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z$O%e!Z(a%e!Z(r%e!Z!]%e!Z!^%e!Z~P''VOrROe!iOpkOrPO(T)]O(VTO(YUO(aVO(o[O~O!]WO!l$xO#jgPPP!>oI[PPPPPPPPP!BOP!C]PPI[!DnPI[PI[I[I[I[I[PI[!FQP!I[P!LbP!Lf!Lp!Lt!LtP!IXP!Lx!LxP#!OP#!SI[PI[#!Y#%_CjA^PA^PA^A^P#&lA^A^#)OA^#+vA^#.SA^A^#.r#1W#1W#1]#1f#1W#1qPP#1WPA^#2ZA^#6YA^A^6mPPP#:_PPP#:x#:xP#:xP#;`#:xPP#;fP#;]P#;]#;y#;]#P#>V#>]#>k#>q#>{#?R#?]#?c#?s#?y#@k#@}#AT#AZ#Ai#BO#Cs#DR#DY#Et#FS#Gt#HS#HY#H`#Hf#Hp#Hv#H|#IW#Ij#IpPPPPPPPPPPP#IvPPPPPPP#Jk#Mx$ b$ i$ qPPP$']P$'f$*_$0x$0{$1O$1}$2Q$2X$2aP$2g$2jP$3W$3[$4S$5b$5g$5}PP$6S$6Y$6^$6a$6e$6i$7e$7|$8e$8i$8l$8o$8y$8|$9Q$9UR!|RoqOXst!Z#d%m&r&t&u&w,s,x2[2_Y!vQ'`-e1o5{Q%tvQ%|yQ&T|Q&j!VS'W!e-]Q'f!iS'l!r!yU*k$|*Z*oQ+o%}S+|&V&WQ,d&dQ-c'_Q-m'gQ-u'mQ0[*qQ1b,OQ1y,eR<{SU+P%]S!S!nQ!r!v!y!z$|'W'_'`'l'm'n*k*o*q*r-]-c-e-u0[0_1o5{5}%[$ti#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;kP>X>Y>]>^Q&X|Q'U!eS'[%i-`Q+t&PQ,P&WQ,f&gQ0n+SQ1Y+uQ1_+{Q2Q,jQ2R,kQ5f1TQ5o1aQ6[1zQ6_1|Q6`2PQ8`5gQ8c5lQ8|6bQ:X8dQ:f8yQ;V:YR<}*ZrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R,h&k&z^OPXYstuvwz!Z!`!g!j!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'b'r(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mR>S[#]WZ#W#Z'X(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ%wxQ%{yW&Q|&V&W,OQ&_!TQ'c!hQ'e!iQ(q#sS+n%|%}Q+r&PQ,_&bQ,c&dS-l'f'gQ.i(rQ1R+oQ1X+uQ1Z+vQ1^+zQ1t,`S1x,d,eQ2|-mQ5e1TQ5i1WQ5n1`Q6Z1yQ8_5gQ8b5kQ8f5pQ:T8^R;T:U!U$zi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y!^%yy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{Q+h%wQ,T&[Q,W&]Q,b&dQ.h(qQ1s,_U1w,c,d,eQ3e.iQ6U1tS6Y1x1yQ8x6Z#f>T#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^o>UPS&[!Q&iQ&]!RQ&^!SU*}%[%d=sR,R&Y%]%Si#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;kP>X>Y>]>^T)z$u){V+P%]S$i$^c#Y#e%q%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.|.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`SQ'Y!eR2q-]!W!nQ!e!r!v!y!z$|'W'_'`'l'm'n*Z*k*o*q*r-]-c-e-u0[0_1o5{5}R1l,ZnqOXst!Z#d%m&r&t&u&w,s,x2[2_Q&y!^Q'v!xS(s#u<^Q+l%zQ,]&_Q,^&aQ-j'dQ-w'oS.r(x=PS0q+X=ZQ1P+mQ1n,[Q2c,zQ2e,{Q2m-WQ2z-kQ2}-oS5Y0r=eQ5a1QS5d1S=fQ6t2oQ6x2{Q6}3SQ8]5bQ9Y6vQ9Z6yQ9^7OR:l9V$d$]c#Y#e%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`SS#q]SU$fd)_,mS(p#p'iU*v%R(w4OU0m+O.n7gQ5^0xQ7V3`Q9d7YR:s9em!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}Q't!uS(f#g2US-s'k'wQ/s*]Q0R*jQ3U-vQ4f/tQ4r0TQ4s0UQ4x0^Q7r4`S7}4t4vS8R4y4{Q9r7sQ9v7yQ9{8OQ:Q8TS:{9w9xS;g:|;PS;s;h;iS;{;t;uSSR=o>R%^bOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Q%fj!^%xy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{S&Oz!jQ+k%yQ,a&dW1v,b,c,d,eU6X1w1x1yS8w6Y6ZQ:d8x!r=j$Z$n'X)s-U-X/V2p4T5w6s:Z:mSQ=t>QR=u>R%QeOPXYstuvw!Z!`!g!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Y#bWZ#W#Z(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ,n&o!p=k$Z$n)s-U-X/V2p4T5w6s:Z:mSR=n'XU']!e%i*ZR2s-`%SdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+],p,s,x-i-q.P.V.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3l4z6T6e6f6i6|8t9T9_!r)_$Z$n'X)s-U-X/V2p4T5w6s:Z:mSQ,m&oQ0x+gQ3`.gQ7Y3dR9e7[!b$Tc#Y%q(S(Y(t(y)Z)[)`)g+x-x-}.S.U.s.v/b0p3O3V3k3{5X5c6{7Q7a9]:oS)^)q-Z.|2k2n3p4P4X6u7b7k7l8k9X9g9m9n;W;`=vQ>X>ZR>Y>['QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mSS$oh$pR4U/U'XgOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mST$kf$qQ$ifS)j$l)nR)v$qT$jf$qT)l$l)n'XhOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mST$oh$pQ$rhR)u$p%^jOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_!s>Q$Z$n'X)s-U-X/V2p4T5w6s:Z:mS#glOPXZst!Z!`!o#S#d#o#{$n%m&k&n&o&r&t&u&w&{'T'b)O)s*i+]+g,p,s,x-i.g/V/n0]0l1r2S2T2V2X2[2_2a3d4T4z6T6e6f6i7[8t9T!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^Q+T%aQ/c*Oo4OP>X>YQ*c$zU*l$|*Z*oQ+U%bQ0W*m#f=q#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^n=rTQ=x>UQ=y>VR=z>W!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^o4OP>X>Y>]>^Q,U&]Q1h,WQ5s1gR8h5tV*n$|*Z*oU*n$|*Z*oT5z1o5{S0P*i/nQ4w0]T8S4z:]Q+j%xQ0V*lQ1O+kQ1u,aQ6W1vQ8v6XQ:c8wR;^:d!U%Oi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Yx*R$v)e*S*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>OS0`*t0a#f]>^nZ>[`=T3}7c7f7j9h:t:w;yS=_.l3iT=`7e9k!U%Qi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y|*T$v)e*U*t+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>OS0b*u0c#f]>^nZ>[d=V3}7d7e7j9h9i:t:u:w;yS=a.m3jT=b7f9lrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q&f!UR,p&ornOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R&f!UQ,Y&^R1d,RsnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q1p,_S6R1s1tU8p6P6Q6US:_8r8sS;Y:^:aQ;m;ZR;w;nQ&m!VR,i&iR6_1|R:f8yW&Q|&V&W,OR1Z+vQ&r!WR,s&sR,y&xT2],x2_R,}&yQ,|&yR2f,}Q'y!{R-y'ySsOtQ#dXT%ps#dQ#OTR'{#OQ#RUR'}#RQ){$uR/`){Q#UVR(Q#UQ#XWU(W#X(X.QQ(X#YR.Q(YQ-^'YR2r-^Q.u(yS3m.u3nR3n.vQ-e'`R2v-eY!rQ'`-e1o5{R'j!rQ/Q)eR4S/QU#_W%h*YU(_#_(`.RQ(`#`R.R(ZQ-a']R2t-at`OXst!V!Z#d%m&i&k&r&t&u&w,s,x2[2_S#hZ%eU#r`#h.[R.[(jQ(k#jQ.X(gW.a(k.X3X7RQ3X.YR7R3YQ)n$lR/W)nQ$phR)t$pQ$`cU)a$`-|O>Z>[Q/z*eU4k/z4m7xQ4m/|R7x4lS*o$|*ZR0Y*ox*S$v)e*t*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>O!d.j(u)c*[*e.l.m.q/_/k/|0v1e3h4[4h4l5r7]7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/h*S.j7ca7c3}7e7f7j9h:t:w;yQ0a*tQ3i.lU4}0a3i9kR9k7e|*U$v)e*t*u+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>O!h.k(u)c*[*e.l.m.q/_/k/|0v1e3f3h4[4h4l5r7]7^7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/j*U.k7de7d3}7e7f7j9h9i:t:u:w;yQ0c*uQ3j.mU5P0c3j9lR9l7fQ*z%UR0g*zQ5]0vR8Y5]Q+_%kR0u+_Q5v1jS8j5v:[R:[8kQ,[&_R1m,[Q5{1oR8m5{Q1{,fS6]1{8zR8z6_Q1U+rW5h1U5j8a:VQ5j1XQ8a5iR:V8bQ+w&QR1[+wQ2_,xR6m2_YrOXst#dQ&v!ZQ+a%mQ,r&rQ,t&tQ,u&uQ,w&wQ2Y,sS2],x2_R6l2[Q%opQ&z!_Q&}!aQ'P!bQ'R!cQ'q!uQ+`%lQ+l%zQ,Q&XQ,h&mQ-P&|W-p'k's't'wQ-w'oQ0X*nQ1P+mQ1c,PS2O,i,lQ2g-OQ2h-RQ2i-SQ2}-oW3P-r-s-v-xQ5a1QQ5m1_Q5q1eQ6V1uQ6a2QQ6k2ZU6z3O3R3UQ6}3SQ8]5bQ8e5oQ8g5rQ8l5zQ8u6WQ8{6`S9[6{7PQ9^7OQ:W8cQ:b8vQ:g8|Q:n9]Q;U:XQ;]:cQ;a:oQ;l;VR;o;^Q%zyQ'd!iQ'o!uU+m%{%|%}Q-W'VU-k'e'f'gS-o'k'uQ0Q*jS1Q+n+oQ2o-YS2{-l-mQ3S-tS4p0R0UQ5b1RQ6v2uQ6y2|Q7O3TU7{4r4s4vQ9z7}R;O9{S$wi>PR*{%VU%Ui%V>PR0f*yQ$viS(u#v+iS)c$b$cQ)e$dQ*[$xS*e${*YQ*t%OQ*u%QQ+Q%^Q+R%_Q+V%cQ.lPQ=}>XQ>O>YQ>Z>]R>[>^Q+O%]Q.nSR#[WR'Z!el!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}S'V!e-]U*j$|*Z*oS-Y'W'_S0U*k*qQ0^*rQ2u-cQ4v0[R4{0_R({#xQ!fQT-d'`-e]!qQ!r'`-e1o5{Q#p]R'i < TypeParamList in out const TypeDefinition extends ThisType this LiteralType ArithOp Number BooleanLiteral TemplateType InterpolationEnd Interpolation InterpolationStart NullType null VoidType void TypeofType typeof MemberExpression . PropertyName [ TemplateString Escape Interpolation super RegExp ] ArrayExpression Spread , } { ObjectExpression Property async get set PropertyDefinition Block : NewTarget new NewExpression ) ( ArgList UnaryExpression delete LogicOp BitOp YieldExpression yield AwaitExpression await ParenthesizedExpression ClassExpression class ClassBody MethodDeclaration Decorator @ MemberExpression PrivatePropertyName CallExpression TypeArgList CompareOp < declare Privacy static abstract override PrivatePropertyDefinition PropertyDeclaration readonly accessor Optional TypeAnnotation Equals StaticBlock FunctionExpression ArrowFunction ParamList ParamList ArrayPattern ObjectPattern PatternProperty Privacy readonly Arrow MemberExpression BinaryExpression ArithOp ArithOp ArithOp ArithOp BitOp CompareOp instanceof satisfies CompareOp BitOp BitOp BitOp LogicOp LogicOp ConditionalExpression LogicOp LogicOp AssignmentExpression UpdateOp PostfixExpression CallExpression InstantiationExpression TaggedTemplateExpression DynamicImport import ImportMeta JSXElement JSXSelfCloseEndTag JSXSelfClosingTag JSXIdentifier JSXBuiltin JSXIdentifier JSXNamespacedName JSXMemberExpression JSXSpreadAttribute JSXAttribute JSXAttributeValue JSXEscape JSXEndTag JSXOpenTag JSXFragmentTag JSXText JSXEscape JSXStartCloseTag JSXCloseTag PrefixCast < ArrowFunction TypeParamList SequenceExpression InstantiationExpression KeyofType keyof UniqueType unique ImportType InferredType infer TypeName ParenthesizedType FunctionSignature ParamList NewSignature IndexedType TupleType Label ArrayType ReadonlyType ObjectType MethodType PropertyType IndexSignature PropertyDefinition CallSignature TypePredicate asserts is NewSignature new UnionType LogicOp IntersectionType LogicOp ConditionalType ParameterizedType ClassDeclaration abstract implements type VariableDeclaration let var using TypeAliasDeclaration InterfaceDeclaration interface EnumDeclaration enum EnumBody NamespaceDeclaration namespace module AmbientDeclaration declare GlobalDeclaration global ClassDeclaration ClassBody AmbientFunctionDeclaration ExportGroup VariableName VariableName ImportDeclaration defer ImportGroup ForStatement for ForSpec ForInSpec ForOfSpec of WhileStatement while WithStatement with DoStatement do IfStatement if else SwitchStatement switch SwitchBody CaseLabel case DefaultLabel TryStatement try CatchClause catch FinallyClause finally ReturnStatement return ThrowStatement throw BreakStatement break ContinueStatement continue DebuggerStatement debugger LabeledStatement ExpressionStatement SingleExpression SingleClassItem",maxTerm:380,context:Um,nodeProps:[["isolate",-8,5,6,14,37,39,51,53,55,""],["group",-26,9,17,19,68,207,211,215,216,218,221,224,234,237,243,245,247,249,252,258,264,266,268,270,272,274,275,"Statement",-34,13,14,32,35,36,42,51,54,55,57,62,70,72,76,80,82,84,85,110,111,120,121,136,139,141,142,143,144,145,147,148,167,169,171,"Expression",-23,31,33,37,41,43,45,173,175,177,178,180,181,182,184,185,186,188,189,190,201,203,205,206,"Type",-3,88,103,109,"ClassItem"],["openedBy",23,"<",38,"InterpolationStart",56,"[",60,"{",73,"(",160,"JSXStartCloseTag"],["closedBy",-2,24,168,">",40,"InterpolationEnd",50,"]",61,"}",74,")",165,"JSXEndTag"]],propSources:[tg],skippedNodes:[0,5,6,278],repeatNodeCount:37,tokenData:"$Fq07[R!bOX%ZXY+gYZ-yZ[+g[]%Z]^.c^p%Zpq+gqr/mrs3cst:_tuEruvJSvwLkwx! Yxy!'iyz!(sz{!)}{|!,q|}!.O}!O!,q!O!P!/Y!P!Q!9j!Q!R#:O!R![#<_![!]#I_!]!^#Jk!^!_#Ku!_!`$![!`!a$$v!a!b$*T!b!c$,r!c!}Er!}#O$-|#O#P$/W#P#Q$4o#Q#R$5y#R#SEr#S#T$7W#T#o$8b#o#p$x#r#s$@U#s$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$I|Er$I|$I}$Dk$I}$JO$Dk$JO$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr(n%d_$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&j&hT$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c&j&zP;=`<%l&c'|'U]$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!b(SU(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!b(iP;=`<%l'}'|(oP;=`<%l&}'[(y]$i&j(WpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(rp)wU(WpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)rp*^P;=`<%l)r'[*dP;=`<%l(r#S*nX(Wp(Z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g#S+^P;=`<%l*g(n+dP;=`<%l%Z07[+rq$i&j(Wp(Z!b'|0/lOX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p$f%Z$f$g+g$g#BY%Z#BY#BZ+g#BZ$IS%Z$IS$I_+g$I_$JT%Z$JT$JU+g$JU$KV%Z$KV$KW+g$KW&FU%Z&FU&FV+g&FV;'S%Z;'S;=`+a<%l?HT%Z?HT?HU+g?HUO%Z07[.ST(X#S$i&j'}0/lO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c07[.n_$i&j(Wp(Z!b'}0/lOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)3p/x`$i&j!p),Q(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW1V`#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`2X!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW2d_#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'At3l_(V':f$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k(^4r_$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k&z5vX$i&jOr5qrs6cs!^5q!^!_6y!_#o5q#o#p6y#p;'S5q;'S;=`7h<%lO5q&z6jT$d`$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c`6|TOr6yrs7]s;'S6y;'S;=`7b<%lO6y`7bO$d``7eP;=`<%l6y&z7kP;=`<%l5q(^7w]$d`$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!r8uZ(Z!bOY8pYZ6yZr8prs9hsw8pwx6yx#O8p#O#P6y#P;'S8p;'S;=`:R<%lO8p!r9oU$d`(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!r:UP;=`<%l8p(^:[P;=`<%l4k%9[:hh$i&j(Wp(Z!bOY%ZYZ&cZq%Zqr`#P#o`x!^=^!^!_?q!_#O=^#O#P>`#P#o=^#o#p?q#p;'S=^;'S;=`@h<%lO=^&n>gXWS$i&jOY>`YZ&cZ!^>`!^!_?S!_#o>`#o#p?S#p;'S>`;'S;=`?k<%lO>`S?XSWSOY?SZ;'S?S;'S;=`?e<%lO?SS?hP;=`<%l?S&n?nP;=`<%l>`!f?xWWS(Z!bOY?qZw?qwx?Sx#O?q#O#P?S#P;'S?q;'S;=`@b<%lO?q!f@eP;=`<%l?q(Q@kP;=`<%l=^'`@w]WS$i&j(WpOY@nYZ&cZr@nrs>`s!^@n!^!_Ap!_#O@n#O#P>`#P#o@n#o#pAp#p;'S@n;'S;=`Bg<%lO@ntAwWWS(WpOYApZrAprs?Ss#OAp#O#P?S#P;'SAp;'S;=`Ba<%lOAptBdP;=`<%lAp'`BjP;=`<%l@n#WBvYWS(Wp(Z!bOYBmZrBmrs?qswBmwxApx#OBm#O#P?S#P;'SBm;'S;=`Cf<%lOBm#WCiP;=`<%lBm(rCoP;=`<%l^!Q^$i&j!X7`OY!=yYZ&cZ!P!=y!P!Q!>|!Q!^!=y!^!_!@c!_!}!=y!}#O!CW#O#P!Dy#P#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y|#X#Z&c#Z#[!>|#[#]&c#]#^!>|#^#a&c#a#b!>|#b#g&c#g#h!>|#h#i&c#i#j!>|#j#k!>|#k#m&c#m#n!>|#n#o&c#p;'S&c;'S;=`&w<%lO&c7`!@hX!X7`OY!@cZ!P!@c!P!Q!AT!Q!}!@c!}#O!Ar#O#P!Bq#P;'S!@c;'S;=`!CQ<%lO!@c7`!AYW!X7`#W#X!AT#Z#[!AT#]#^!AT#a#b!AT#g#h!AT#i#j!AT#j#k!AT#m#n!AT7`!AuVOY!ArZ#O!Ar#O#P!B[#P#Q!@c#Q;'S!Ar;'S;=`!Bk<%lO!Ar7`!B_SOY!ArZ;'S!Ar;'S;=`!Bk<%lO!Ar7`!BnP;=`<%l!Ar7`!BtSOY!@cZ;'S!@c;'S;=`!CQ<%lO!@c7`!CTP;=`<%l!@c^!Ezl$i&j(Z!b!X7`OY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#W&}#W#X!Eq#X#Z&}#Z#[!Eq#[#]&}#]#^!Eq#^#a&}#a#b!Eq#b#g&}#g#h!Eq#h#i&}#i#j!Eq#j#k!Eq#k#m&}#m#n!Eq#n#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}8r!GyZ(Z!b!X7`OY!GrZw!Grwx!@cx!P!Gr!P!Q!Hl!Q!}!Gr!}#O!JU#O#P!Bq#P;'S!Gr;'S;=`!J|<%lO!Gr8r!Hse(Z!b!X7`OY'}Zw'}x#O'}#P#W'}#W#X!Hl#X#Z'}#Z#[!Hl#[#]'}#]#^!Hl#^#a'}#a#b!Hl#b#g'}#g#h!Hl#h#i'}#i#j!Hl#j#k!Hl#k#m'}#m#n!Hl#n;'S'};'S;=`(f<%lO'}8r!JZX(Z!bOY!JUZw!JUwx!Arx#O!JU#O#P!B[#P#Q!Gr#Q;'S!JU;'S;=`!Jv<%lO!JU8r!JyP;=`<%l!JU8r!KPP;=`<%l!Gr>^!KZ^$i&j(Z!bOY!KSYZ&cZw!KSwx!CWx!^!KS!^!_!JU!_#O!KS#O#P!DR#P#Q!^!LYP;=`<%l!KS>^!L`P;=`<%l!_#c#d#Bq#d#l%Z#l#m#Es#m#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#>j_$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#?rd$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#A]f$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Bzc$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Dbe$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#E|g$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Gpi$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z*)x#Il_!g$b$i&j$O)Lv(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)[#Jv_al$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z04f#LS^h#)`#R-v$?V_!^(CdvBr$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z?O$@a_!q7`$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[$Aq|$i&j(Wp(Z!b'|0/l$]#t(T,2j(e$I[OX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr07[$D|k$i&j(Wp(Z!b'}0/l$]#t(T,2j(e$I[OY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr",tokenizers:[Hm,Km,Jm,eg,2,3,4,5,6,7,8,9,10,11,12,13,14,Fm,new Ti("$S~RRtu[#O#Pg#S#T#|~_P#o#pb~gOx~~jVO#i!P#i#j!U#j#l!P#l#m!q#m;'S!P;'S;=`#v<%lO!P~!UO!U~~!XS!Q![!e!c!i!e#T#Z!e#o#p#Z~!hR!Q![!q!c!i!q#T#Z!q~!tR!Q![!}!c!i!}#T#Z!}~#QR!Q![!P!c!i!P#T#Z!P~#^R!Q![#g!c!i#g#T#Z#g~#jS!Q![#g!c!i#g#T#Z#g#q#r!P~#yP;=`<%l!P~$RO(c~~",141,340),new Ti("j~RQYZXz{^~^O(Q~~aP!P!Qd~iO(R~~",25,323)],topRules:{Script:[0,7],SingleExpression:[1,276],SingleClassItem:[2,277]},dialects:{jsx:0,ts:15175},dynamicPrecedences:{80:1,82:1,94:1,169:1,199:1},specialized:[{term:327,get:n=>ig[n]||-1},{term:343,get:n=>ng[n]||-1},{term:95,get:n=>sg[n]||-1}],tokenPrec:15201});var Xl,Ci=new R;function jl(n){return $.define({combine:n?e=>e.concat(n):void 0})}var js=new R,Me=class{constructor(e,t,i=[],s=""){this.data=e,this.name=s,Y.prototype.hasOwnProperty("tree")||Object.defineProperty(Y.prototype,"tree",{get(){return ee(this)}}),this.parser=t,this.extension=[Zt.of(this),Y.languageData.of((r,o,l)=>{let a=Zf(r,o,l),h=a.type.prop(Ci);if(!h)return[];let c=r.facet(h),f=a.type.prop(js);if(f){let u=a.resolve(o-a.from,l);for(let d of f)if(d.test(u,r)){let p=r.facet(d.facet);return d.type=="replace"?p:p.concat(c)}}return c})].concat(i)}isActiveAt(e,t,i=-1){return Zf(e,t,i).type.prop(Ci)==this.data}findRegions(e){let t=e.facet(Zt);if(t?.data==this.data)return[{from:0,to:e.doc.length}];if(!t||!t.allowsNesting)return[];let i=[],s=(r,o)=>{if(r.prop(Ci)==this.data){i.push({from:o,to:o+r.length});return}let l=r.prop(R.mounted);if(l){if(l.tree.prop(Ci)==this.data){if(l.overlay)for(let a of l.overlay)i.push({from:a.from+o,to:a.to+o});else i.push({from:o,to:o+r.length});return}else if(l.overlay){let a=i.length;if(s(l.tree,l.overlay[0].from+o),i.length>a)return}}for(let a=0;ai.isTop?t:void 0)]}),e.name)}configure(e,t){return new n(this.data,this.parser.configure(e),t||this.name)}get allowsNesting(){return this.parser.hasWrappers()}};function ee(n){let e=n.field(Me.state,!1);return e?e.tree:J.empty}var Bl=class{constructor(e){this.doc=e,this.cursorPos=0,this.string="",this.cursor=e.iter()}get length(){return this.doc.length}syncTo(e){return this.string=this.cursor.next(e-this.cursorPos).value,this.cursorPos=e+this.string.length,this.cursorPos-this.string.length}chunk(e){return this.syncTo(e),this.string}get lineChunks(){return!0}read(e,t){let i=this.cursorPos-this.string.length;return e=this.cursorPos?this.doc.sliceString(e,t):this.string.slice(e-i,t-i)}},mn=null,Wl=class n{constructor(e,t,i=[],s,r,o,l,a){this.parser=e,this.state=t,this.fragments=i,this.tree=s,this.treeLen=r,this.viewport=o,this.skipped=l,this.scheduleOn=a,this.parse=null,this.tempSkipped=[]}static create(e,t,i){return new n(e,t,[],J.empty,0,i,[],null)}startParse(){return this.parser.startParse(new Bl(this.state.doc),this.fragments)}work(e,t){return t!=null&&t>=this.state.doc.length&&(t=void 0),this.tree!=J.empty&&this.isDone(t??this.state.doc.length)?(this.takeTree(),!0):this.withContext(()=>{var i;if(typeof e=="number"){let s=Date.now()+e;e=()=>Date.now()>s}for(this.parse||(this.parse=this.startParse()),t!=null&&(this.parse.stoppedAt==null||this.parse.stoppedAt>t)&&t=this.treeLen&&((this.parse.stoppedAt==null||this.parse.stoppedAt>e)&&this.parse.stopAt(e),this.withContext(()=>{for(;!(t=this.parse.advance()););}),this.treeLen=e,this.tree=t,this.fragments=this.withoutTempSkipped(Ut.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(e){let t=mn;mn=this;try{return e()}finally{mn=t}}withoutTempSkipped(e){for(let t;t=this.tempSkipped.pop();)e=Af(e,t.from,t.to);return e}changes(e,t){let{fragments:i,tree:s,treeLen:r,viewport:o,skipped:l}=this;if(this.takeTree(),!e.empty){let a=[];if(e.iterChangedRanges((h,c,f,u)=>a.push({fromA:h,toA:c,fromB:f,toB:u})),i=Ut.applyChanges(i,a),s=J.empty,r=0,o={from:e.mapPos(o.from,-1),to:e.mapPos(o.to,1)},this.skipped.length){l=[];for(let h of this.skipped){let c=e.mapPos(h.from,1),f=e.mapPos(h.to,-1);ce.from&&(this.fragments=Af(this.fragments,s,r),this.skipped.splice(i--,1))}return this.skipped.length>=t?!1:(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(e,t){this.skipped.push({from:e,to:t})}static getSkippingParser(e){return new class extends $i{createParse(t,i,s){let r=s[0].from,o=s[s.length-1].to;return{parsedPos:r,advance(){let a=mn;if(a){for(let h of s)a.tempSkipped.push(h);e&&(a.scheduleOn=a.scheduleOn?Promise.all([a.scheduleOn,e]):e)}return this.parsedPos=o,new J(de.none,[],[],o-r)},stoppedAt:null,stopAt(){}}}}}isDone(e){e=Math.min(e,this.state.doc.length);let t=this.fragments;return this.treeLen>=e&&t.length&&t[0].from==0&&t[0].to>=e}static get(){return mn}};function Af(n,e,t){return Ut.applyChanges(n,[{fromA:e,toA:t,fromB:e,toB:t}])}var yn=class n{constructor(e){this.context=e,this.tree=e.tree}apply(e){if(!e.docChanged&&this.tree==this.context.tree)return this;let t=this.context.changes(e.changes,e.state),i=this.context.treeLen==e.startState.doc.length?void 0:Math.max(e.changes.mapPos(this.context.treeLen),t.viewport.to);return t.work(20,i)||t.takeTree(),new n(t)}static init(e){let t=Math.min(3e3,e.doc.length),i=Wl.create(e.facet(Zt).parser,e,{from:0,to:t});return i.work(20,t)||i.takeTree(),new n(i)}};Me.state=K.define({create:yn.init,update(n,e){for(let t of e.effects)if(t.is(Me.setState))return t.value;return e.startState.facet(Zt)!=e.state.facet(Zt)?yn.init(e.state):n.apply(e)}});var Bf=n=>{let e=setTimeout(()=>n(),500);return()=>clearTimeout(e)};typeof requestIdleCallback<"u"&&(Bf=n=>{let e=-1,t=setTimeout(()=>{e=requestIdleCallback(n,{timeout:400})},100);return()=>e<0?clearTimeout(t):cancelIdleCallback(e)});var Ll=typeof navigator<"u"&&(!((Xl=navigator.scheduling)===null||Xl===void 0)&&Xl.isInputPending)?()=>navigator.scheduling.isInputPending():null,rg=H.fromClass(class{constructor(e){this.view=e,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(e){let t=this.view.state.field(Me.state).context;(t.updateViewport(e.view.viewport)||this.view.viewport.to>t.treeLen)&&this.scheduleWork(),(e.docChanged||e.selectionSet)&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(t)}scheduleWork(){if(this.working)return;let{state:e}=this.view,t=e.field(Me.state);(t.tree!=t.context.tree||!t.context.isDone(e.doc.length))&&(this.working=Bf(this.work))}work(e){this.working=null;let t=Date.now();if(this.chunkEnds+1e3,a=r.context.work(()=>Ll&&Ll()||Date.now()>o,s+(l?0:1e5));this.chunkBudget-=Date.now()-t,(a||this.chunkBudget<=0)&&(r.context.takeTree(),this.view.dispatch({effects:Me.setState.of(new yn(r.context))})),this.chunkBudget>0&&!(a&&!l)&&this.scheduleWork(),this.checkAsyncSchedule(r.context)}checkAsyncSchedule(e){e.scheduleOn&&(this.workScheduled++,e.scheduleOn.then(()=>this.scheduleWork()).catch(t=>ae(this.view.state,t)).then(()=>this.workScheduled--),e.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),Zt=$.define({combine(n){return n.length?n[0]:null},enables:n=>[Me.state,rg,v.contentAttributes.compute([n],e=>{let t=e.facet(n);return t&&t.name?{"data-language":t.name}:{}})]}),Ys=class{constructor(e,t=[]){this.language=e,this.support=t,this.extension=[e,t]}};var og=$.define(),Ai=$.define({combine:n=>{if(!n.length)return" ";let e=n[0];if(!e||/\S/.test(e)||Array.from(e).some(t=>t!=e[0]))throw new Error("Invalid indent unit: "+JSON.stringify(n[0]));return e}});function bn(n){let e=n.facet(Ai);return e.charCodeAt(0)==9?n.tabSize*e.length:e.length}function Mi(n,e){let t="",i=n.tabSize,s=n.facet(Ai)[0];if(s==" "){for(;e>=i;)t+=" ",e-=i;s=" "}for(let r=0;r=e?lg(n,t,e):null}var Kt=class{constructor(e,t={}){this.state=e,this.options=t,this.unit=bn(e)}lineAt(e,t=1){let i=this.state.doc.lineAt(e),{simulateBreak:s,simulateDoubleBreak:r}=this.options;return s!=null&&s>=i.from&&s<=i.to?r&&s==e?{text:"",from:e}:(t<0?s-1&&(r+=o-this.countColumn(i,i.search(/\S|$/))),r}countColumn(e,t=e.length){return ct(e,this.state.tabSize,t)}lineIndent(e,t=1){let{text:i,from:s}=this.lineAt(e,t),r=this.options.overrideIndentation;if(r){let o=r(s);if(o>-1)return o}return this.countColumn(i,i.search(/\S|$/))}get simulatedBreak(){return this.options.simulateBreak||null}},Nl=new R;function lg(n,e,t){let i=e.resolveStack(t),s=e.resolveInner(t,-1).resolve(t,0).enterUnfinishedNodesBefore(t);if(s!=i.node){let r=[];for(let o=s;o&&!(o.fromi.node.to||o.from==i.node.from&&o.type==i.node.type);o=o.parent)r.push(o);for(let o=r.length-1;o>=0;o--)i={node:r[o],next:i}}return Wf(i,n,t)}function Wf(n,e,t){for(let i=n;i;i=i.next){let s=hg(i.node);if(s)return s(_l.create(e,t,i))}return 0}function ag(n){return n.pos==n.options.simulateBreak&&n.options.simulateDoubleBreak}function hg(n){let e=n.type.prop(Nl);if(e)return e;let t=n.firstChild,i;if(t&&(i=t.type.prop(R.closedBy))){let s=n.lastChild,r=s&&i.indexOf(s.name)>-1;return o=>zf(o,!0,1,void 0,r&&!ag(o)?s.from:void 0)}return n.parent==null?cg:null}function cg(){return 0}var _l=class n extends Kt{constructor(e,t,i){super(e.state,e.options),this.base=e,this.pos=t,this.context=i}get node(){return this.context.node}static create(e,t,i){return new n(e,t,i)}get textAfter(){return this.textAfterPos(this.pos)}get baseIndent(){return this.baseIndentFor(this.node)}baseIndentFor(e){let t=this.state.doc.lineAt(e.from);for(;;){let i=e.resolve(t.from);for(;i.parent&&i.parent.from==i.from;)i=i.parent;if(fg(i,e))break;t=this.state.doc.lineAt(i.from)}return this.lineIndent(t.from)}continue(){return Wf(this.context.next,this.base,this.pos)}};function fg(n,e){for(let t=e;t;t=t.parent)if(n==t)return!0;return!1}function ug(n){let e=n.node,t=e.childAfter(e.from),i=e.lastChild;if(!t)return null;let s=n.options.simulateBreak,r=n.state.doc.lineAt(t.from),o=s==null||s<=r.from?r.to:Math.min(r.to,s);for(let l=t.to;;){let a=e.childAfter(l);if(!a||a==i)return null;if(!a.type.isSkipped){if(a.from>=o)return null;let h=/^ */.exec(r.text.slice(t.to-r.from))[0].length;return{from:t.from,to:t.to+h}}l=a.to}}function _f({closing:n,align:e=!0,units:t=1}){return i=>zf(i,e,t,n)}function zf(n,e,t,i,s){let r=n.textAfter,o=r.match(/^\s*/)[0].length,l=i&&r.slice(o,o+i.length)==i||s==n.pos+o,a=e?ug(n):null;return a?l?n.column(a.from):n.column(a.to):n.baseIndent+(l?0:n.unit*t)}var If=n=>n.baseIndent;function Gs({except:n,units:e=1}={}){return t=>{let i=n&&n.test(t.textAfter);return t.baseIndent+(i?0:e*t.unit)}}var dg=200;function Yf(){return Y.transactionFilter.of(n=>{if(!n.docChanged||!n.isUserEvent("input.type")&&!n.isUserEvent("input.complete"))return n;let e=n.startState.languageDataAt("indentOnInput",n.startState.selection.main.head);if(!e.length)return n;let t=n.newDoc,{head:i}=n.newSelection.main,s=t.lineAt(i);if(i>s.from+dg)return n;let r=t.sliceString(s.from,i);if(!e.some(h=>h.test(r)))return n;let{state:o}=n,l=-1,a=[];for(let{head:h}of o.selection.ranges){let c=o.doc.lineAt(h);if(c.from==l)continue;l=c.from;let f=Ns(o,c.from);if(f==null)continue;let u=/^\s*/.exec(c.text)[0],d=Mi(o,f);u!=d&&a.push({from:c.from,to:c.from+u.length,insert:d})}return a.length?[n,{changes:a,sequential:!0}]:n})}var pg=$.define(),Gl=new R;function qf(n){let e=n.firstChild,t=n.lastChild;return e&&e.tot)continue;if(r&&l.from=e&&h.to>t&&(r=h)}}return r}function mg(n){let e=n.lastChild;return e&&e.to==n.to&&e.type.isError}function qs(n,e,t){for(let i of n.facet(pg)){let s=i(n,e,t);if(s)return s}return Og(n,e,t)}function Vf(n,e){let t=e.mapPos(n.from,1),i=e.mapPos(n.to,-1);return t>=i?void 0:{from:t,to:i}}var Us=A.define({map:Vf}),xn=A.define({map:Vf});function jf(n){let e=[];for(let{head:t}of n.state.selection.ranges)e.some(i=>i.from<=t&&i.to>=t)||e.push(n.lineBlockAt(t));return e}var Jt=K.define({create(){return Z.none},update(n,e){e.isUserEvent("delete")&&e.changes.iterChangedRanges((t,i)=>n=Mf(n,t,i)),n=n.map(e.changes);for(let t of e.effects)if(t.is(Us)&&!gg(n,t.value.from,t.value.to)){let{preparePlaceholder:i}=e.state.facet(Ul),s=i?Z.replace({widget:new zl(i(e.state,t.value))}):Rf;n=n.update({add:[s.range(t.value.from,t.value.to)]})}else t.is(xn)&&(n=n.update({filter:(i,s)=>t.value.from!=i||t.value.to!=s,filterFrom:t.value.from,filterTo:t.value.to}));return e.selection&&(n=Mf(n,e.selection.main.head)),n},provide:n=>v.decorations.from(n),toJSON(n,e){let t=[];return n.between(0,e.doc.length,(i,s)=>{t.push(i,s)}),t},fromJSON(n){if(!Array.isArray(n)||n.length%2)throw new RangeError("Invalid JSON for fold state");let e=[];for(let t=0;t{se&&(i=!0)}),i?n.update({filterFrom:e,filterTo:t,filter:(s,r)=>s>=t||r<=e}):n}function Vs(n,e,t){var i;let s=null;return(i=n.field(Jt,!1))===null||i===void 0||i.between(e,t,(r,o)=>{(!s||s.from>r)&&(s={from:r,to:o})}),s}function gg(n,e,t){let i=!1;return n.between(e,e,(s,r)=>{s==e&&r==t&&(i=!0)}),i}function Nf(n,e){return n.field(Jt,!1)?e:e.concat(A.appendConfig.of(Ff()))}var yg=n=>{for(let e of jf(n)){let t=qs(n.state,e.from,e.to);if(t)return n.dispatch({effects:Nf(n.state,[Us.of(t),Gf(n,t)])}),!0}return!1},bg=n=>{if(!n.state.field(Jt,!1))return!1;let e=[];for(let t of jf(n)){let i=Vs(n.state,t.from,t.to);i&&e.push(xn.of(i),Gf(n,i,!1))}return e.length&&n.dispatch({effects:e}),e.length>0};function Gf(n,e,t=!0){let i=n.state.doc.lineAt(e.from).number,s=n.state.doc.lineAt(e.to).number;return v.announce.of(`${n.state.phrase(t?"Folded lines":"Unfolded lines")} ${i} ${n.state.phrase("to")} ${s}.`)}var xg=n=>{let{state:e}=n,t=[];for(let i=0;i{let e=n.state.field(Jt,!1);if(!e||!e.size)return!1;let t=[];return e.between(0,n.state.doc.length,(i,s)=>{t.push(xn.of({from:i,to:s}))}),n.dispatch({effects:t}),!0};var Uf=[{key:"Ctrl-Shift-[",mac:"Cmd-Alt-[",run:yg},{key:"Ctrl-Shift-]",mac:"Cmd-Alt-]",run:bg},{key:"Ctrl-Alt-[",run:xg},{key:"Ctrl-Alt-]",run:Sg}],wg={placeholderDOM:null,preparePlaceholder:null,placeholderText:"\u2026"},Ul=$.define({combine(n){return ue(n,wg)}});function Ff(n){let e=[Jt,Qg];return n&&e.push(Ul.of(n)),e}function Hf(n,e){let{state:t}=n,i=t.facet(Ul),s=o=>{let l=n.lineBlockAt(n.posAtDOM(o.target)),a=Vs(n.state,l.from,l.to);a&&n.dispatch({effects:xn.of(a)}),o.preventDefault()};if(i.placeholderDOM)return i.placeholderDOM(n,s,e);let r=document.createElement("span");return r.textContent=i.placeholderText,r.setAttribute("aria-label",t.phrase("folded code")),r.title=t.phrase("unfold"),r.className="cm-foldPlaceholder",r.onclick=s,r}var Rf=Z.replace({widget:new class extends ye{toDOM(n){return Hf(n,null)}}}),zl=class extends ye{constructor(e){super(),this.value=e}eq(e){return this.value==e.value}toDOM(e){return Hf(e,this.value)}},kg={openText:"\u2304",closedText:"\u203A",markerDOM:null,domEventHandlers:{},foldingChanged:()=>!1},gn=class extends Ze{constructor(e,t){super(),this.config=e,this.open=t}eq(e){return this.config==e.config&&this.open==e.open}toDOM(e){if(this.config.markerDOM)return this.config.markerDOM(this.open);let t=document.createElement("span");return t.textContent=this.open?this.config.openText:this.config.closedText,t.title=e.state.phrase(this.open?"Fold line":"Unfold line"),t}};function Kf(n={}){let e={...kg,...n},t=new gn(e,!0),i=new gn(e,!1),s=H.fromClass(class{constructor(o){this.from=o.viewport.from,this.markers=this.buildMarkers(o)}update(o){(o.docChanged||o.viewportChanged||o.startState.facet(Zt)!=o.state.facet(Zt)||o.startState.field(Jt,!1)!=o.state.field(Jt,!1)||ee(o.startState)!=ee(o.state)||e.foldingChanged(o))&&(this.markers=this.buildMarkers(o.view))}buildMarkers(o){let l=new Pe;for(let a of o.viewportLineBlocks){let h=Vs(o.state,a.from,a.to)?i:qs(o.state,a.from,a.to)?t:null;h&&l.add(a.from,a.from,h)}return l.finish()}}),{domEventHandlers:r}=e;return[s,hl({class:"cm-foldGutter",markers(o){var l;return((l=o.plugin(s))===null||l===void 0?void 0:l.markers)||B.empty},initialSpacer(){return new gn(e,!1)},domEventHandlers:{...r,click:(o,l,a)=>{if(r.click&&r.click(o,l,a))return!0;let h=Vs(o.state,l.from,l.to);if(h)return o.dispatch({effects:xn.of(h)}),!0;let c=qs(o.state,l.from,l.to);return c?(o.dispatch({effects:Us.of(c)}),!0):!1}}}),Ff()]}var Qg=v.baseTheme({".cm-foldPlaceholder":{backgroundColor:"#eee",border:"1px solid #ddd",color:"#888",borderRadius:".2em",margin:"0 1px",padding:"0 1px",cursor:"pointer"},".cm-foldGutter span":{padding:"0 1px",cursor:"pointer"}}),Zi=class n{constructor(e,t){this.specs=e;let i;function s(l){let a=We.newName();return(i||(i=Object.create(null)))["."+a]=l,a}let r=typeof t.all=="string"?t.all:t.all?s(t.all):void 0,o=t.scope;this.scope=o instanceof Me?l=>l.prop(Ci)==o.data:o?l=>l==o:void 0,this.style=Zl(e.map(l=>({tag:l.tag,class:l.class||s(Object.assign({},l,{tag:null}))})),{all:r}).style,this.module=i?new We(i):null,this.themeType=t.themeType}static define(e,t){return new n(e,t||{})}},Il=$.define(),Jf=$.define({combine(n){return n.length?[n[0]]:null}});function El(n){let e=n.facet(Il);return e.length?e:n.facet(Jf)}function Fs(n,e){let t=[vg],i;return n instanceof Zi&&(n.module&&t.push(v.styleModule.of(n.module)),i=n.themeType),e?.fallback?t.push(Jf.of(n)):i?t.push(Il.computeN([v.darkTheme],s=>s.facet(v.darkTheme)==(i=="dark")?[n]:[])):t.push(Il.of(n)),t}var Yl=class{constructor(e){this.markCache=Object.create(null),this.tree=ee(e.state),this.decorations=this.buildDeco(e,El(e.state)),this.decoratedTo=e.viewport.to}update(e){let t=ee(e.state),i=El(e.state),s=i!=El(e.startState),{viewport:r}=e.view,o=e.changes.mapPos(this.decoratedTo,1);t.length=r.to?(this.decorations=this.decorations.map(e.changes),this.decoratedTo=o):(t!=this.tree||e.viewportChanged||s)&&(this.tree=t,this.decorations=this.buildDeco(e.view,i),this.decoratedTo=r.to)}buildDeco(e,t){if(!t||!this.tree.length)return Z.none;let i=new Pe;for(let{from:s,to:r}of e.visibleRanges)$f(this.tree,t,(o,l,a)=>{i.add(o,l,this.markCache[a]||(this.markCache[a]=Z.mark({class:a})))},s,r);return i.finish()}},vg=Se.high(H.fromClass(Yl,{decorations:n=>n.decorations})),eu=Zi.define([{tag:m.meta,color:"#404740"},{tag:m.link,textDecoration:"underline"},{tag:m.heading,textDecoration:"underline",fontWeight:"bold"},{tag:m.emphasis,fontStyle:"italic"},{tag:m.strong,fontWeight:"bold"},{tag:m.strikethrough,textDecoration:"line-through"},{tag:m.keyword,color:"#708"},{tag:[m.atom,m.bool,m.url,m.contentSeparator,m.labelName],color:"#219"},{tag:[m.literal,m.inserted],color:"#164"},{tag:[m.string,m.deleted],color:"#a11"},{tag:[m.regexp,m.escape,m.special(m.string)],color:"#e40"},{tag:m.definition(m.variableName),color:"#00f"},{tag:m.local(m.variableName),color:"#30a"},{tag:[m.typeName,m.namespace],color:"#085"},{tag:m.className,color:"#167"},{tag:[m.special(m.variableName),m.macroName],color:"#256"},{tag:m.definition(m.propertyName),color:"#00c"},{tag:m.comment,color:"#940"},{tag:m.invalid,color:"#f00"}]),$g=v.baseTheme({"&.cm-focused .cm-matchingBracket":{backgroundColor:"#328c8252"},"&.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bb555544"}}),tu=1e4,iu="()[]{}",nu=$.define({combine(n){return ue(n,{afterCursor:!0,brackets:iu,maxScanDistance:tu,renderMatch:Cg})}}),Pg=Z.mark({class:"cm-matchingBracket"}),Tg=Z.mark({class:"cm-nonmatchingBracket"});function Cg(n){let e=[],t=n.matched?Pg:Tg;return e.push(t.range(n.start.from,n.start.to)),n.end&&e.push(t.range(n.end.from,n.end.to)),e}function Xf(n){let e=[],t=n.facet(nu);for(let i of n.selection.ranges){if(!i.empty)continue;let s=Fe(n,i.head,-1,t)||i.head>0&&Fe(n,i.head-1,1,t)||t.afterCursor&&(Fe(n,i.head,1,t)||i.headn.decorations}),Ag=[Zg,$g];function su(n={}){return[nu.of(n),Ag]}var Mg=new R;function ql(n,e,t){let i=n.prop(e<0?R.openedBy:R.closedBy);if(i)return i;if(n.name.length==1){let s=t.indexOf(n.name);if(s>-1&&s%2==(e<0?1:0))return[t[s+e]]}return null}function Vl(n){let e=n.type.prop(Mg);return e?e(n.node):n}function Fe(n,e,t,i={}){let s=i.maxScanDistance||tu,r=i.brackets||iu,o=ee(n),l=o.resolveInner(e,t);for(let a=l;a;a=a.parent){let h=ql(a.type,t,r);if(h&&a.from0?e>=c.from&&ec.from&&e<=c.to))return Rg(n,e,t,a,c,h,r)}}return Xg(n,e,t,o,l.type,s,r)}function Rg(n,e,t,i,s,r,o){let l=i.parent,a={from:s.from,to:s.to},h=0,c=l?.cursor();if(c&&(t<0?c.childBefore(i.from):c.childAfter(i.to)))do if(t<0?c.to<=i.from:c.from>=i.to){if(h==0&&r.indexOf(c.type.name)>-1&&c.from0)return null;let h={from:t<0?e-1:e,to:t>0?e+1:e},c=n.doc.iterRange(e,t>0?n.doc.length:0),f=0;for(let u=0;!c.next().done&&u<=r;){let d=c.value;t<0&&(u+=d.length);let p=e+u*t;for(let O=t>0?0:d.length-1,g=t>0?d.length:-1;O!=g;O+=t){let y=o.indexOf(d[O]);if(!(y<0||i.resolveInner(p+O,1).type!=s))if(y%2==0==t>0)f++;else{if(f==1)return{start:h,end:{from:p+O,to:p+O+1},matched:y>>1==a>>1};f--}}t>0&&(u+=d.length)}return c.done?{start:h,matched:!1}:null}var Lg=Object.create(null),Lf=[de.none];var Ef=[],Df=Object.create(null),Eg=Object.create(null);for(let[n,e]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])Eg[n]=Dg(Lg,e);function Dl(n,e){Ef.indexOf(n)>-1||(Ef.push(n),console.warn(e))}function Dg(n,e){let t=[];for(let l of e.split(" ")){let a=[];for(let h of l.split(".")){let c=n[h]||m[h];c?typeof c=="function"?a.length?a=a.map(c):Dl(h,`Modifier ${h} used at start of tag`):a.length?Dl(h,`Tag ${h} used as modifier`):a=Array.isArray(c)?c:[c]:Dl(h,`Unknown highlighting tag ${h}`)}for(let h of a)t.push(h)}if(!t.length)return 0;let i=e.replace(/ /g,"_"),s=i+" "+t.map(l=>l.id),r=Df[s];if(r)return r.id;let o=Df[s]=de.define({id:Lf.length,name:i,props:[zs({[i]:t})]});return Lf.push(o),o.id}var Sb={rtl:Z.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"rtl"},bidiIsolate:z.RTL}),ltr:Z.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"ltr"},bidiIsolate:z.LTR}),auto:Z.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"auto"},bidiIsolate:null})};var Ks=class{constructor(e,t,i,s){this.state=e,this.pos=t,this.explicit=i,this.view=s,this.abortListeners=[],this.abortOnDocChange=!1}tokenBefore(e){let t=ee(this.state).resolveInner(this.pos,-1);for(;t&&e.indexOf(t.name)<0;)t=t.parent;return t?{from:t.from,to:this.pos,text:this.state.sliceDoc(t.from,this.pos),type:t.type}:null}matchBefore(e){let t=this.state.doc.lineAt(this.pos),i=Math.max(t.from,this.pos-250),s=t.text.slice(i-t.from,this.pos-t.from),r=s.search(pu(e,!1));return r<0?null:{from:i+r,to:this.pos,text:s.slice(r)}}get aborted(){return this.abortListeners==null}addEventListener(e,t,i){e=="abort"&&this.abortListeners&&(this.abortListeners.push(t),i&&i.onDocChange&&(this.abortOnDocChange=!0))}};function ru(n){let e=Object.keys(n).join(""),t=/\w/.test(e);return t&&(e=e.replace(/\w/g,"")),`[${t?"\\w":""}${e.replace(/[^\w\s]/g,"\\$&")}]`}function Bg(n){let e=Object.create(null),t=Object.create(null);for(let{label:s}of n){e[s[0]]=!0;for(let r=1;rtypeof s=="string"?{label:s}:s),[t,i]=e.every(s=>/^\w+$/.test(s.label))?[/\w*$/,/\w+$/]:Bg(e);return s=>{let r=s.matchBefore(i);return r||s.explicit?{from:r?r.from:s.pos,options:e,validFor:t}:null}}function du(n,e){return t=>{for(let i=ee(t.state).resolveInner(t.pos,-1);i;i=i.parent){if(n.indexOf(i.name)>-1)return null;if(i.type.isTop)break}return e(t)}}var Js=class{constructor(e,t,i,s){this.completion=e,this.source=t,this.match=i,this.score=s}};function ti(n){return n.selection.main.from}function pu(n,e){var t;let{source:i}=n,s=e&&i[0]!="^",r=i[i.length-1]!="$";return!s&&!r?n:new RegExp(`${s?"^":""}(?:${i})${r?"$":""}`,(t=n.flags)!==null&&t!==void 0?t:n.ignoreCase?"i":"")}var ha=xe.define();function Wg(n,e,t,i){let{main:s}=n.selection,r=t-s.from,o=i-s.from;return{...n.changeByRange(l=>{if(l!=s&&t!=i&&n.sliceDoc(l.from+r,l.from+o)!=n.sliceDoc(t,i))return{range:l};let a=n.toText(e);return{changes:{from:l.from+r,to:i==s.from?l.to:l.from+o,insert:a},range:b.cursor(l.from+r+a.length)}}),scrollIntoView:!0,userEvent:"input.complete"}}var ou=new WeakMap;function _g(n){if(!Array.isArray(n))return n;let e=ou.get(n);return e||ou.set(n,e=aa(n)),e}var er=A.define(),Sn=A.define(),Jl=class{constructor(e){this.pattern=e,this.chars=[],this.folded=[],this.any=[],this.precise=[],this.byWord=[],this.score=0,this.matched=[];for(let t=0;t=48&&w<=57||w>=97&&w<=122?2:w>=65&&w<=90?1:0:(k=Yi(w))!=k.toLowerCase()?1:k!=k.toUpperCase()?2:0;(!x||Q==1&&g||C==0&&Q!=0)&&(t[f]==w||i[f]==w&&(u=!0)?o[f++]=x:o.length&&(y=!1)),C=Q,x+=Te(w)}return f==a&&o[0]==0&&y?this.result(-100+(u?-200:0),o,e):d==a&&p==0?this.ret(-200-e.length+(O==e.length?0:-100),[0,O]):l>-1?this.ret(-700-e.length,[l,l+this.pattern.length]):d==a?this.ret(-900-e.length,[p,O]):f==a?this.result(-100+(u?-200:0)+-700+(y?0:-1100),o,e):t.length==2?null:this.result((s[0]?-700:0)+-200+-1100,s,e)}result(e,t,i){let s=[],r=0;for(let o of t){let l=o+(this.astral?Te(le(i,o)):1);r&&s[r-1]==o?s[r-1]=l:(s[r++]=o,s[r++]=l)}return this.ret(e-i.length,s)}},ea=class{constructor(e){this.pattern=e,this.matched=[],this.score=0,this.folded=e.toLowerCase()}match(e){if(e.length!1,activateOnTypingDelay:100,selectOnOpen:!0,override:null,closeOnBlur:!0,maxRenderedOptions:100,defaultKeymap:!0,tooltipClass:()=>"",optionClass:()=>"",aboveCursor:!1,icons:!0,addToOptions:[],positionInfo:zg,filterStrict:!1,compareCompletions:(e,t)=>(e.sortText||e.label).localeCompare(t.sortText||t.label),interactionDelay:75,updateSyncTime:100},{defaultKeymap:(e,t)=>e&&t,closeOnBlur:(e,t)=>e&&t,icons:(e,t)=>e&&t,tooltipClass:(e,t)=>i=>lu(e(i),t(i)),optionClass:(e,t)=>i=>lu(e(i),t(i)),addToOptions:(e,t)=>e.concat(t),filterStrict:(e,t)=>e||t})}});function lu(n,e){return n?e?n+" "+e:n:e}function zg(n,e,t,i,s,r){let o=n.textDirection==z.RTL,l=o,a=!1,h="top",c,f,u=e.left-s.left,d=s.right-e.right,p=i.right-i.left,O=i.bottom-i.top;if(l&&u=O||x>e.top?c=t.bottom-e.top:(h="bottom",c=e.bottom-t.top)}let g=(e.bottom-e.top)/r.offsetHeight,y=(e.right-e.left)/r.offsetWidth;return{style:`${h}: ${c/g}px; max-width: ${f/y}px`,class:"cm-completionInfo-"+(a?o?"left-narrow":"right-narrow":l?"left":"right")}}var ca=A.define();function Ig(n){let e=n.addToOptions.slice();return n.icons&&e.push({render(t){let i=document.createElement("div");return i.classList.add("cm-completionIcon"),t.type&&i.classList.add(...t.type.split(/\s+/g).map(s=>"cm-completionIcon-"+s)),i.setAttribute("aria-hidden","true"),i},position:20}),e.push({render(t,i,s,r){let o=document.createElement("span");o.className="cm-completionLabel";let l=t.displayLabel||t.label,a=0;for(let h=0;ha&&o.appendChild(document.createTextNode(l.slice(a,c)));let u=o.appendChild(document.createElement("span"));u.appendChild(document.createTextNode(l.slice(c,f))),u.className="cm-completionMatchedText",a=f}return at.position-i.position).map(t=>t.render)}function Fl(n,e,t){if(n<=t)return{from:0,to:n};if(e<0&&(e=0),e<=n>>1){let s=Math.floor(e/t);return{from:s*t,to:(s+1)*t}}let i=Math.floor((n-e)/t);return{from:n-(i+1)*t,to:n-i*t}}var ta=class{constructor(e,t,i){this.view=e,this.stateField=t,this.applyCompletion=i,this.info=null,this.infoDestroy=null,this.placeInfoReq={read:()=>this.measureInfo(),write:a=>this.placeInfo(a),key:this},this.space=null,this.currentClass="";let s=e.state.field(t),{options:r,selected:o}=s.open,l=e.state.facet(re);this.optionContent=Ig(l),this.optionClass=l.optionClass,this.tooltipClass=l.tooltipClass,this.range=Fl(r.length,o,l.maxRenderedOptions),this.dom=document.createElement("div"),this.dom.className="cm-tooltip-autocomplete",this.updateTooltipClass(e.state),this.dom.addEventListener("mousedown",a=>{let{options:h}=e.state.field(t).open;for(let c=a.target,f;c&&c!=this.dom;c=c.parentNode)if(c.nodeName=="LI"&&(f=/-(\d+)$/.exec(c.id))&&+f[1]this.list.lastChild.getBoundingClientRect().bottom?this.range.to:null;c!=null&&(e.dispatch({effects:ca.of(c)}),a.preventDefault())}}),this.dom.addEventListener("focusout",a=>{let h=e.state.field(this.stateField,!1);h&&h.tooltip&&e.state.facet(re).closeOnBlur&&a.relatedTarget!=e.contentDOM&&e.dispatch({effects:Sn.of(null)})}),this.showOptions(r,s.id)}mount(){this.updateSel()}showOptions(e,t){this.list&&this.list.remove(),this.list=this.dom.appendChild(this.createListBox(e,t,this.range)),this.list.addEventListener("scroll",()=>{this.info&&this.view.requestMeasure(this.placeInfoReq)})}update(e){var t;let i=e.state.field(this.stateField),s=e.startState.field(this.stateField);if(this.updateTooltipClass(e.state),i!=s){let{options:r,selected:o,disabled:l}=i.open;(!s.open||s.open.options!=r)&&(this.range=Fl(r.length,o,e.state.facet(re).maxRenderedOptions),this.showOptions(r,i.id)),this.updateSel(),l!=((t=s.open)===null||t===void 0?void 0:t.disabled)&&this.dom.classList.toggle("cm-tooltip-autocomplete-disabled",!!l)}}updateTooltipClass(e){let t=this.tooltipClass(e);if(t!=this.currentClass){for(let i of this.currentClass.split(" "))i&&this.dom.classList.remove(i);for(let i of t.split(" "))i&&this.dom.classList.add(i);this.currentClass=t}}positioned(e){this.space=e,this.info&&this.view.requestMeasure(this.placeInfoReq)}updateSel(){let e=this.view.state.field(this.stateField),t=e.open;(t.selected>-1&&t.selected=this.range.to)&&(this.range=Fl(t.options.length,t.selected,this.view.state.facet(re).maxRenderedOptions),this.showOptions(t.options,e.id));let i=this.updateSelectedOption(t.selected);if(i){this.destroyInfo();let{completion:s}=t.options[t.selected],{info:r}=s;if(!r)return;let o=typeof r=="string"?document.createTextNode(r):r(s);if(!o)return;"then"in o?o.then(l=>{l&&this.view.state.field(this.stateField,!1)==e&&this.addInfoPane(l,s)}).catch(l=>ae(this.view.state,l,"completion info")):(this.addInfoPane(o,s),i.setAttribute("aria-describedby",this.info.id))}}addInfoPane(e,t){this.destroyInfo();let i=this.info=document.createElement("div");if(i.className="cm-tooltip cm-completionInfo",i.id="cm-completionInfo-"+Math.floor(Math.random()*65535).toString(16),e.nodeType!=null)i.appendChild(e),this.infoDestroy=null;else{let{dom:s,destroy:r}=e;i.appendChild(s),this.infoDestroy=r||null}this.dom.appendChild(i),this.view.requestMeasure(this.placeInfoReq)}updateSelectedOption(e){let t=null;for(let i=this.list.firstChild,s=this.range.from;i;i=i.nextSibling,s++)i.nodeName!="LI"||!i.id?s--:s==e?i.hasAttribute("aria-selected")||(i.setAttribute("aria-selected","true"),t=i):i.hasAttribute("aria-selected")&&(i.removeAttribute("aria-selected"),i.removeAttribute("aria-describedby"));return t&&qg(this.list,t),t}measureInfo(){let e=this.dom.querySelector("[aria-selected]");if(!e||!this.info)return null;let t=this.dom.getBoundingClientRect(),i=this.info.getBoundingClientRect(),s=e.getBoundingClientRect(),r=this.space;if(!r){let o=this.dom.ownerDocument.documentElement;r={left:0,top:0,right:o.clientWidth,bottom:o.clientHeight}}return s.top>Math.min(r.bottom,t.bottom)-10||s.bottom{o.target==s&&o.preventDefault()});let r=null;for(let o=i.from;oi.from||i.from==0))if(r=u,typeof h!="string"&&h.header)s.appendChild(h.header(h));else{let d=s.appendChild(document.createElement("completion-section"));d.textContent=u}}let c=s.appendChild(document.createElement("li"));c.id=t+"-"+o,c.setAttribute("role","option");let f=this.optionClass(l);f&&(c.className=f);for(let u of this.optionContent){let d=u(l,this.view.state,this.view,a);d&&c.appendChild(d)}}return i.from&&s.classList.add("cm-completionListIncompleteTop"),i.tonew ta(t,n,e)}function qg(n,e){let t=n.getBoundingClientRect(),i=e.getBoundingClientRect(),s=t.height/n.offsetHeight;i.topt.bottom&&(n.scrollTop+=(i.bottom-t.bottom)/s)}function au(n){return(n.boost||0)*100+(n.apply?10:0)+(n.info?5:0)+(n.type?1:0)}function Vg(n,e){let t=[],i=null,s=null,r=c=>{t.push(c);let{section:f}=c.completion;if(f){i||(i=[]);let u=typeof f=="string"?f:f.name;i.some(d=>d.name==u)||i.push(typeof f=="string"?{name:u}:f)}},o=e.facet(re);for(let c of n)if(c.hasResult()){let f=c.result.getMatch;if(c.result.filter===!1)for(let u of c.result.options)r(new Js(u,c.source,f?f(u):[],1e9-t.length));else{let u=e.sliceDoc(c.from,c.to),d,p=o.filterStrict?new ea(u):new Jl(u);for(let O of c.result.options)if(d=p.match(O.label)){let g=O.displayLabel?f?f(O,d.matched):[]:d.matched,y=d.score+(O.boost||0);if(r(new Js(O,c.source,g,y)),typeof O.section=="object"&&O.section.rank==="dynamic"){let{name:x}=O.section;s||(s=Object.create(null)),s[x]=Math.max(y,s[x]||-1e9)}}}}if(i){let c=Object.create(null),f=0,u=(d,p)=>(d.rank==="dynamic"&&p.rank==="dynamic"?s[p.name]-s[d.name]:0)||(typeof d.rank=="number"?d.rank:1e9)-(typeof p.rank=="number"?p.rank:1e9)||(d.nameu.score-f.score||h(f.completion,u.completion))){let f=c.completion;!a||a.label!=f.label||a.detail!=f.detail||a.type!=null&&f.type!=null&&a.type!=f.type||a.apply!=f.apply||a.boost!=f.boost?l.push(c):au(c.completion)>au(a)&&(l[l.length-1]=c),a=c.completion}return l}var ia=class n{constructor(e,t,i,s,r,o){this.options=e,this.attrs=t,this.tooltip=i,this.timestamp=s,this.selected=r,this.disabled=o}setSelected(e,t){return e==this.selected||e>=this.options.length?this:new n(this.options,hu(t,e),this.tooltip,this.timestamp,e,this.disabled)}static build(e,t,i,s,r,o){if(s&&!o&&e.some(h=>h.isPending))return s.setDisabled();let l=Vg(e,t);if(!l.length)return s&&e.some(h=>h.isPending)?s.setDisabled():null;let a=t.facet(re).selectOnOpen?0:-1;if(s&&s.selected!=a&&s.selected!=-1){let h=s.options[s.selected].completion;for(let c=0;cc.hasResult()?Math.min(h,c.from):h,1e8),create:Hg,above:r.aboveCursor},s?s.timestamp:Date.now(),a,!1)}map(e){return new n(this.options,this.attrs,{...this.tooltip,pos:e.mapPos(this.tooltip.pos)},this.timestamp,this.selected,this.disabled)}setDisabled(){return new n(this.options,this.attrs,this.tooltip,this.timestamp,this.selected,!0)}},na=class n{constructor(e,t,i){this.active=e,this.id=t,this.open=i}static start(){return new n(Ug,"cm-ac-"+Math.floor(Math.random()*2e6).toString(36),null)}update(e){let{state:t}=e,i=t.facet(re),r=(i.override||t.languageDataAt("autocomplete",ti(t)).map(_g)).map(a=>(this.active.find(c=>c.source==a)||new mt(a,this.active.some(c=>c.state!=0)?1:0)).update(e,i));r.length==this.active.length&&r.every((a,h)=>a==this.active[h])&&(r=this.active);let o=this.open,l=e.effects.some(a=>a.is(fa));o&&e.docChanged&&(o=o.map(e.changes)),e.selection||r.some(a=>a.hasResult()&&e.changes.touchesRange(a.from,a.to))||!jg(r,this.active)||l?o=ia.build(r,t,this.id,o,i,l):o&&o.disabled&&!r.some(a=>a.isPending)&&(o=null),!o&&r.every(a=>!a.isPending)&&r.some(a=>a.hasResult())&&(r=r.map(a=>a.hasResult()?new mt(a.source,0):a));for(let a of e.effects)a.is(ca)&&(o=o&&o.setSelected(a.value,this.id));return r==this.active&&o==this.open?this:new n(r,this.id,o)}get tooltip(){return this.open?this.open.tooltip:null}get attrs(){return this.open?this.open.attrs:this.active.length?Ng:Gg}};function jg(n,e){if(n==e)return!0;for(let t=0,i=0;;){for(;t-1&&(t["aria-activedescendant"]=n+"-"+e),t}var Ug=[];function Ou(n,e){if(n.isUserEvent("input.complete")){let i=n.annotation(ha);if(i&&e.activateOnCompletion(i))return 12}let t=n.isUserEvent("input.type");return t&&e.activateOnTyping?5:t?1:n.isUserEvent("delete.backward")?2:n.selection?8:n.docChanged?16:0}var mt=class n{constructor(e,t,i=!1){this.source=e,this.state=t,this.explicit=i}hasResult(){return!1}get isPending(){return this.state==1}update(e,t){let i=Ou(e,t),s=this;(i&8||i&16&&this.touches(e))&&(s=new n(s.source,0)),i&4&&s.state==0&&(s=new n(this.source,1)),s=s.updateFor(e,i);for(let r of e.effects)if(r.is(er))s=new n(s.source,1,r.value);else if(r.is(Sn))s=new n(s.source,0);else if(r.is(fa))for(let o of r.value)o.source==s.source&&(s=o);return s}updateFor(e,t){return this.map(e.changes)}map(e){return this}touches(e){return e.changes.touchesRange(ti(e.state))}},tr=class n extends mt{constructor(e,t,i,s,r,o){super(e,3,t),this.limit=i,this.result=s,this.from=r,this.to=o}hasResult(){return!0}updateFor(e,t){var i;if(!(t&3))return this.map(e.changes);let s=this.result;s.map&&!e.changes.empty&&(s=s.map(s,e.changes));let r=e.changes.mapPos(this.from),o=e.changes.mapPos(this.to,1),l=ti(e.state);if(l>o||!s||t&2&&(ti(e.startState)==this.from||lt.map(e))}}),Qe=K.define({create(){return na.start()},update(n,e){return n.update(e)},provide:n=>[an.from(n,e=>e.tooltip),v.contentAttributes.from(n,e=>e.attrs)]});function ua(n,e){let t=e.completion.apply||e.completion.label,i=n.state.field(Qe).active.find(s=>s.source==e.source);return i instanceof tr?(typeof t=="string"?n.dispatch({...Wg(n.state,t,i.from,i.to),annotations:ha.of(e.completion)}):t(n,e.completion,i.from,i.to),!0):!1}var Hg=Yg(Qe,ua);function Hs(n,e="option"){return t=>{let i=t.state.field(Qe,!1);if(!i||!i.open||i.open.disabled||Date.now()-i.open.timestamp-1?i.open.selected+s*(n?1:-1):n?0:o-1;return l<0?l=e=="page"?0:o-1:l>=o&&(l=e=="page"?o-1:0),t.dispatch({effects:ca.of(l)}),!0}}var Kg=n=>{let e=n.state.field(Qe,!1);return n.state.readOnly||!e||!e.open||e.open.selected<0||e.open.disabled||Date.now()-e.open.timestampn.state.field(Qe,!1)?(n.dispatch({effects:er.of(!0)}),!0):!1,Jg=n=>{let e=n.state.field(Qe,!1);return!e||!e.active.some(t=>t.state!=0)?!1:(n.dispatch({effects:Sn.of(null)}),!0)},sa=class{constructor(e,t){this.active=e,this.context=t,this.time=Date.now(),this.updates=[],this.done=void 0}},e0=50,t0=1e3,i0=H.fromClass(class{constructor(n){this.view=n,this.debounceUpdate=-1,this.running=[],this.debounceAccept=-1,this.pendingStart=!1,this.composing=0;for(let e of n.state.field(Qe).active)e.isPending&&this.startQuery(e)}update(n){let e=n.state.field(Qe),t=n.state.facet(re);if(!n.selectionSet&&!n.docChanged&&n.startState.field(Qe)==e)return;let i=n.transactions.some(r=>{let o=Ou(r,t);return o&8||(r.selection||r.docChanged)&&!(o&3)});for(let r=0;re0&&Date.now()-o.time>t0){for(let l of o.context.abortListeners)try{l()}catch(a){ae(this.view.state,a)}o.context.abortListeners=null,this.running.splice(r--,1)}else o.updates.push(...n.transactions)}this.debounceUpdate>-1&&clearTimeout(this.debounceUpdate),n.transactions.some(r=>r.effects.some(o=>o.is(er)))&&(this.pendingStart=!0);let s=this.pendingStart?50:t.activateOnTypingDelay;if(this.debounceUpdate=e.active.some(r=>r.isPending&&!this.running.some(o=>o.active.source==r.source))?setTimeout(()=>this.startUpdate(),s):-1,this.composing!=0)for(let r of n.transactions)r.isUserEvent("input.type")?this.composing=2:this.composing==2&&r.selection&&(this.composing=3)}startUpdate(){this.debounceUpdate=-1,this.pendingStart=!1;let{state:n}=this.view,e=n.field(Qe);for(let t of e.active)t.isPending&&!this.running.some(i=>i.active.source==t.source)&&this.startQuery(t);this.running.length&&e.open&&e.open.disabled&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(re).updateSyncTime))}startQuery(n){let{state:e}=this.view,t=ti(e),i=new Ks(e,t,n.explicit,this.view),s=new sa(n,i);this.running.push(s),Promise.resolve(n.source(i)).then(r=>{s.context.aborted||(s.done=r||null,this.scheduleAccept())},r=>{this.view.dispatch({effects:Sn.of(null)}),ae(this.view.state,r)})}scheduleAccept(){this.running.every(n=>n.done!==void 0)?this.accept():this.debounceAccept<0&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(re).updateSyncTime))}accept(){var n;this.debounceAccept>-1&&clearTimeout(this.debounceAccept),this.debounceAccept=-1;let e=[],t=this.view.state.facet(re),i=this.view.state.field(Qe);for(let s=0;sl.source==r.active.source);if(o&&o.isPending)if(r.done==null){let l=new mt(r.active.source,0);for(let a of r.updates)l=l.update(a,t);l.isPending||e.push(l)}else this.startQuery(o)}(e.length||i.open&&i.open.disabled)&&this.view.dispatch({effects:fa.of(e)})}},{eventHandlers:{blur(n){let e=this.view.state.field(Qe,!1);if(e&&e.tooltip&&this.view.state.facet(re).closeOnBlur){let t=e.open&&al(this.view,e.open.tooltip);(!t||!t.dom.contains(n.relatedTarget))&&setTimeout(()=>this.view.dispatch({effects:Sn.of(null)}),10)}},compositionstart(){this.composing=1},compositionend(){this.composing==3&&setTimeout(()=>this.view.dispatch({effects:er.of(!1)}),20),this.composing=0}}}),n0=typeof navigator=="object"&&/Win/.test(navigator.platform),s0=Se.highest(v.domEventHandlers({keydown(n,e){let t=e.state.field(Qe,!1);if(!t||!t.open||t.open.disabled||t.open.selected<0||n.key.length>1||n.ctrlKey&&!(n0&&n.altKey)||n.metaKey)return!1;let i=t.open.options[t.open.selected],s=t.active.find(o=>o.source==i.source),r=i.completion.commitCharacters||s.result.commitCharacters;return r&&r.indexOf(n.key)>-1&&ua(e,i),!1}})),mu=v.baseTheme({".cm-tooltip.cm-tooltip-autocomplete":{"& > ul":{fontFamily:"monospace",whiteSpace:"nowrap",overflow:"hidden auto",maxWidth_fallback:"700px",maxWidth:"min(700px, 95vw)",minWidth:"250px",maxHeight:"10em",height:"100%",listStyle:"none",margin:0,padding:0,"& > li, & > completion-section":{padding:"1px 3px",lineHeight:1.2},"& > li":{overflowX:"hidden",textOverflow:"ellipsis",cursor:"pointer"},"& > completion-section":{display:"list-item",borderBottom:"1px solid silver",paddingLeft:"0.5em",opacity:.7}}},"&light .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#17c",color:"white"},"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#777"},"&dark .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#347",color:"white"},"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#444"},".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after":{content:'"\xB7\xB7\xB7"',opacity:.5,display:"block",textAlign:"center"},".cm-tooltip.cm-completionInfo":{position:"absolute",padding:"3px 9px",width:"max-content",maxWidth:"400px",boxSizing:"border-box",whiteSpace:"pre-line"},".cm-completionInfo.cm-completionInfo-left":{right:"100%"},".cm-completionInfo.cm-completionInfo-right":{left:"100%"},".cm-completionInfo.cm-completionInfo-left-narrow":{right:"30px"},".cm-completionInfo.cm-completionInfo-right-narrow":{left:"30px"},"&light .cm-snippetField":{backgroundColor:"#00000022"},"&dark .cm-snippetField":{backgroundColor:"#ffffff22"},".cm-snippetFieldPosition":{verticalAlign:"text-top",width:0,height:"1.15em",display:"inline-block",margin:"0 -0.7px -.7em",borderLeft:"1.4px dotted #888"},".cm-completionMatchedText":{textDecoration:"underline"},".cm-completionDetail":{marginLeft:"0.5em",fontStyle:"italic"},".cm-completionIcon":{fontSize:"90%",width:".8em",display:"inline-block",textAlign:"center",paddingRight:".6em",opacity:"0.6",boxSizing:"content-box"},".cm-completionIcon-function, .cm-completionIcon-method":{"&:after":{content:"'\u0192'"}},".cm-completionIcon-class":{"&:after":{content:"'\u25CB'"}},".cm-completionIcon-interface":{"&:after":{content:"'\u25CC'"}},".cm-completionIcon-variable":{"&:after":{content:"'\u{1D465}'"}},".cm-completionIcon-constant":{"&:after":{content:"'\u{1D436}'"}},".cm-completionIcon-type":{"&:after":{content:"'\u{1D461}'"}},".cm-completionIcon-enum":{"&:after":{content:"'\u222A'"}},".cm-completionIcon-property":{"&:after":{content:"'\u25A1'"}},".cm-completionIcon-keyword":{"&:after":{content:"'\u{1F511}\uFE0E'"}},".cm-completionIcon-namespace":{"&:after":{content:"'\u25A2'"}},".cm-completionIcon-text":{"&:after":{content:"'abc'",fontSize:"50%",verticalAlign:"middle"}}}),ra=class{constructor(e,t,i,s){this.field=e,this.line=t,this.from=i,this.to=s}},oa=class n{constructor(e,t,i){this.field=e,this.from=t,this.to=i}map(e){let t=e.mapPos(this.from,-1,se.TrackDel),i=e.mapPos(this.to,1,se.TrackDel);return t==null||i==null?null:new n(this.field,t,i)}},la=class n{constructor(e,t){this.lines=e,this.fieldPositions=t}instantiate(e,t){let i=[],s=[t],r=e.doc.lineAt(t),o=/^\s*/.exec(r.text)[0];for(let a of this.lines){if(i.length){let h=o,c=/^\t*/.exec(a)[0].length;for(let f=0;fnew oa(a.field,s[a.line]+a.from,s[a.line]+a.to));return{text:i,ranges:l}}static parse(e){let t=[],i=[],s=[],r;for(let o of e.split(/\r\n?|\n/)){for(;r=/[#$]\{(?:(\d+)(?::([^{}]*))?|((?:\\[{}]|[^{}])*))\}/.exec(o);){let l=r[1]?+r[1]:null,a=r[2]||r[3]||"",h=-1,c=a.replace(/\\[{}]/g,f=>f[1]);for(let f=0;f=h&&u.field++}for(let f of s)if(f.line==i.length&&f.from>r.index){let u=r[2]?3+(r[1]||"").length:2;f.from-=u,f.to-=u}s.push(new ra(h,i.length,r.index,r.index+c.length)),o=o.slice(0,r.index)+a+o.slice(r.index+r[0].length)}o=o.replace(/\\([{}])/g,(l,a,h)=>{for(let c of s)c.line==i.length&&c.from>h&&(c.from--,c.to--);return a}),i.push(o)}return new n(i,s)}},r0=Z.widget({widget:new class extends ye{toDOM(){let n=document.createElement("span");return n.className="cm-snippetFieldPosition",n}ignoreEvent(){return!1}}}),o0=Z.mark({class:"cm-snippetField"}),Ri=class n{constructor(e,t){this.ranges=e,this.active=t,this.deco=Z.set(e.map(i=>(i.from==i.to?r0:o0).range(i.from,i.to)),!0)}map(e){let t=[];for(let i of this.ranges){let s=i.map(e);if(!s)return null;t.push(s)}return new n(t,this.active)}selectionInsideField(e){return e.ranges.every(t=>this.ranges.some(i=>i.field==this.active&&i.from<=t.from&&i.to>=t.to))}},Qn=A.define({map(n,e){return n&&n.map(e)}}),l0=A.define(),wn=K.define({create(){return null},update(n,e){for(let t of e.effects){if(t.is(Qn))return t.value;if(t.is(l0)&&n)return new Ri(n.ranges,t.value)}return n&&e.docChanged&&(n=n.map(e.changes)),n&&e.selection&&!n.selectionInsideField(e.selection)&&(n=null),n},provide:n=>v.decorations.from(n,e=>e?e.deco:Z.none)});function da(n,e){return b.create(n.filter(t=>t.field==e).map(t=>b.range(t.from,t.to)))}function a0(n){let e=la.parse(n);return(t,i,s,r)=>{let{text:o,ranges:l}=e.instantiate(t.state,s),{main:a}=t.state.selection,h={changes:{from:s,to:r==a.from?a.to:r,insert:E.of(o)},scrollIntoView:!0,annotations:i?[ha.of(i),ie.userEvent.of("input.complete")]:void 0};if(l.length&&(h.selection=da(l,0)),l.some(c=>c.field>0)){let c=new Ri(l,0),f=h.effects=[Qn.of(c)];t.state.field(wn,!1)===void 0&&f.push(A.appendConfig.of([wn,d0,p0,mu]))}t.dispatch(t.state.update(h))}}function gu(n){return({state:e,dispatch:t})=>{let i=e.field(wn,!1);if(!i||n<0&&i.active==0)return!1;let s=i.active+n,r=n>0&&!i.ranges.some(o=>o.field==s+n);return t(e.update({selection:da(i.ranges,s),effects:Qn.of(r?null:new Ri(i.ranges,s)),scrollIntoView:!0})),!0}}var h0=({state:n,dispatch:e})=>n.field(wn,!1)?(e(n.update({effects:Qn.of(null)})),!0):!1,c0=gu(1),f0=gu(-1);var u0=[{key:"Tab",run:c0,shift:f0},{key:"Escape",run:h0}],cu=$.define({combine(n){return n.length?n[0]:u0}}),d0=Se.highest(Qt.compute([cu],n=>n.facet(cu)));function be(n,e){return{...e,apply:a0(n)}}var p0=v.domEventHandlers({mousedown(n,e){let t=e.state.field(wn,!1),i;if(!t||(i=e.posAtCoords({x:n.clientX,y:n.clientY}))==null)return!1;let s=t.ranges.find(r=>r.from<=i&&r.to>=i);return!s||s.field==t.active?!1:(e.dispatch({selection:da(t.ranges,s.field),effects:Qn.of(t.ranges.some(r=>r.field>s.field)?new Ri(t.ranges,s.field):null),scrollIntoView:!0}),!0)}});var kn={brackets:["(","[","{","'",'"'],before:")]}:;>",stringPrefixes:[]},ei=A.define({map(n,e){let t=e.mapPos(n,-1,se.TrackAfter);return t??void 0}}),pa=new class extends Be{};pa.startSide=1;pa.endSide=-1;var yu=K.define({create(){return B.empty},update(n,e){if(n=n.map(e.changes),e.selection){let t=e.state.doc.lineAt(e.selection.main.head);n=n.update({filter:i=>i>=t.from&&i<=t.to})}for(let t of e.effects)t.is(ei)&&(n=n.update({add:[pa.range(t.value,t.value+1)]}));return n}});function bu(){return[m0,yu]}var Kl="()[]{}<>\xAB\xBB\xBB\xAB\uFF3B\uFF3D\uFF5B\uFF5D";function xu(n){for(let e=0;e{if((O0?n.composing:n.compositionStarted)||n.state.readOnly)return!1;let s=n.state.selection.main;if(i.length>2||i.length==2&&Te(le(i,0))==1||e!=s.from||t!=s.to)return!1;let r=y0(n.state,i);return r?(n.dispatch(r),!0):!1}),g0=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let i=Su(n,n.selection.main.head).brackets||kn.brackets,s=null,r=n.changeByRange(o=>{if(o.empty){let l=b0(n.doc,o.head);for(let a of i)if(a==l&&ir(n.doc,o.head)==xu(le(a,0)))return{changes:{from:o.head-a.length,to:o.head+a.length},range:b.cursor(o.head-a.length)}}return{range:s=o}});return s||e(n.update(r,{scrollIntoView:!0,userEvent:"delete.backward"})),!s},wu=[{key:"Backspace",run:g0}];function y0(n,e){let t=Su(n,n.selection.main.head),i=t.brackets||kn.brackets;for(let s of i){let r=xu(le(s,0));if(e==s)return r==s?w0(n,s,i.indexOf(s+s+s)>-1,t):x0(n,s,r,t.before||kn.before);if(e==r&&ku(n,n.selection.main.from))return S0(n,s,r)}return null}function ku(n,e){let t=!1;return n.field(yu).between(0,n.doc.length,i=>{i==e&&(t=!0)}),t}function ir(n,e){let t=n.sliceString(e,e+2);return t.slice(0,Te(le(t,0)))}function b0(n,e){let t=n.sliceString(e-2,e);return Te(le(t,0))==t.length?t:t.slice(1)}function x0(n,e,t,i){let s=null,r=n.changeByRange(o=>{if(!o.empty)return{changes:[{insert:e,from:o.from},{insert:t,from:o.to}],effects:ei.of(o.to+e.length),range:b.range(o.anchor+e.length,o.head+e.length)};let l=ir(n.doc,o.head);return!l||/\s/.test(l)||i.indexOf(l)>-1?{changes:{insert:e+t,from:o.head},effects:ei.of(o.head+e.length),range:b.cursor(o.head+e.length)}:{range:s=o}});return s?null:n.update(r,{scrollIntoView:!0,userEvent:"input.type"})}function S0(n,e,t){let i=null,s=n.changeByRange(r=>r.empty&&ir(n.doc,r.head)==t?{changes:{from:r.head,to:r.head+t.length,insert:t},range:b.cursor(r.head+t.length)}:i={range:r});return i?null:n.update(s,{scrollIntoView:!0,userEvent:"input.type"})}function w0(n,e,t,i){let s=i.stringPrefixes||kn.stringPrefixes,r=null,o=n.changeByRange(l=>{if(!l.empty)return{changes:[{insert:e,from:l.from},{insert:e,from:l.to}],effects:ei.of(l.to+e.length),range:b.range(l.anchor+e.length,l.head+e.length)};let a=l.head,h=ir(n.doc,a),c;if(h==e){if(fu(n,a))return{changes:{insert:e+e,from:a},effects:ei.of(a+e.length),range:b.cursor(a+e.length)};if(ku(n,a)){let u=t&&n.sliceDoc(a,a+e.length*3)==e+e+e?e+e+e:e;return{changes:{from:a,to:a+u.length,insert:u},range:b.cursor(a+u.length)}}}else{if(t&&n.sliceDoc(a-2*e.length,a)==e+e&&(c=uu(n,a-2*e.length,s))>-1&&fu(n,c))return{changes:{insert:e+e+e+e,from:a},effects:ei.of(a+e.length),range:b.cursor(a+e.length)};if(n.charCategorizer(a)(h)!=q.Word&&uu(n,a,s)>-1&&!k0(n,a,e,s))return{changes:{insert:e+e,from:a},effects:ei.of(a+e.length),range:b.cursor(a+e.length)}}return{range:r=l}});return r?null:n.update(o,{scrollIntoView:!0,userEvent:"input.type"})}function fu(n,e){let t=ee(n).resolveInner(e+1);return t.parent&&t.from==e}function k0(n,e,t,i){let s=ee(n).resolveInner(e,-1),r=i.reduce((o,l)=>Math.max(o,l.length),0);for(let o=0;o<5;o++){let l=n.sliceDoc(s.from,Math.min(s.to,s.from+t.length+r)),a=l.indexOf(t);if(!a||a>-1&&i.indexOf(l.slice(0,a))>-1){let c=s.firstChild;for(;c&&c.from==s.from&&c.to-c.from>t.length+a;){if(n.sliceDoc(c.to-t.length,c.to)==t)return!1;c=c.firstChild}return!0}let h=s.to==e&&s.parent;if(!h)break;s=h}return!1}function uu(n,e,t){let i=n.charCategorizer(e);if(i(n.sliceDoc(e-1,e))!=q.Word)return e;for(let s of t){let r=e-s.length;if(n.sliceDoc(r,e)==s&&i(n.sliceDoc(r-1,r))!=q.Word)return r}return-1}function Qu(n={}){return[s0,Qe,re.of(n),i0,Q0,mu]}var Oa=[{key:"Ctrl-Space",run:Hl},{mac:"Alt-`",run:Hl},{mac:"Alt-i",run:Hl},{key:"Escape",run:Jg},{key:"ArrowDown",run:Hs(!0)},{key:"ArrowUp",run:Hs(!1)},{key:"PageDown",run:Hs(!0,"page")},{key:"PageUp",run:Hs(!1,"page")},{key:"Enter",run:Kg}],Q0=Se.highest(Qt.computeN([re],n=>n.facet(re).defaultKeymap?[Oa]:[]));var Tu=[be("function ${name}(${params}) {\n ${}\n}",{label:"function",detail:"definition",type:"keyword"}),be("for (let ${index} = 0; ${index} < ${bound}; ${index}++) {\n ${}\n}",{label:"for",detail:"loop",type:"keyword"}),be("for (let ${name} of ${collection}) {\n ${}\n}",{label:"for",detail:"of loop",type:"keyword"}),be("do {\n ${}\n} while (${})",{label:"do",detail:"loop",type:"keyword"}),be("while (${}) {\n ${}\n}",{label:"while",detail:"loop",type:"keyword"}),be(`try { \${} } catch (\${error}) { \${} -}`,{label:"try",detail:"/ catch block",type:"keyword"}),ye("if (${}) {\n ${}\n}",{label:"if",detail:"block",type:"keyword"}),ye(`if (\${}) { +}`,{label:"try",detail:"/ catch block",type:"keyword"}),be("if (${}) {\n ${}\n}",{label:"if",detail:"block",type:"keyword"}),be(`if (\${}) { \${} } else { \${} -}`,{label:"if",detail:"/ else block",type:"keyword"}),ye(`class \${name} { +}`,{label:"if",detail:"/ else block",type:"keyword"}),be(`class \${name} { constructor(\${params}) { \${} } -}`,{label:"class",detail:"definition",type:"keyword"}),ye('import {${names}} from "${module}"\n${}',{label:"import",detail:"named",type:"keyword"}),ye('import ${name} from "${module}"\n${}',{label:"import",detail:"default",type:"keyword"})],Q0=Pu.concat([ye("interface ${name} {\n ${}\n}",{label:"interface",detail:"definition",type:"keyword"}),ye("type ${name} = ${type}",{label:"type",detail:"definition",type:"keyword"}),ye("enum ${name} {\n ${}\n}",{label:"enum",detail:"definition",type:"keyword"})]),Qu=new As,Tu=new Set(["Script","Block","FunctionExpression","FunctionDeclaration","ArrowFunction","MethodDeclaration","ForStatement"]);function vn(n){return(e,t)=>{let i=e.node.getChild("VariableDefinition");return i&&t(i,n),!0}}var v0=["FunctionDeclaration"],$0={FunctionDeclaration:vn("function"),ClassDeclaration:vn("class"),ClassExpression:()=>!0,EnumDeclaration:vn("constant"),TypeAliasDeclaration:vn("type"),NamespaceDeclaration:vn("namespace"),VariableDefinition(n,e){n.matchContext(v0)||e(n,"variable")},TypeDefinition(n,e){e(n,"type")},__proto__:null};function Cu(n,e){let t=Qu.get(e);if(t)return t;let i=[],s=!0;function r(o,l){let a=n.sliceString(o.from,o.to);i.push({label:a,type:l})}return e.cursor(U.IncludeAnonymous).iterate(o=>{if(s)s=!1;else if(o.name){let l=$0[o.name];if(l&&l(o,r)||Tu.has(o.name))return!1}else if(o.to-o.from>8192){for(let l of Cu(n,o.node))i.push(l);return!1}}),Qu.set(e,i),i}var vu=/^[\w$\xa1-\uffff][\w$\d\xa1-\uffff]*$/,Zu=["TemplateString","String","RegExp","LineComment","BlockComment","VariableDefinition","TypeDefinition","Label","PropertyDefinition","PropertyName","PrivatePropertyDefinition","PrivatePropertyName","JSXText","JSXAttributeValue","JSXOpenTag","JSXCloseTag","JSXSelfClosingTag",".","?."];function P0(n){let e=ee(n.state).resolveInner(n.pos,-1);if(Zu.indexOf(e.name)>-1)return null;let t=e.name=="VariableName"||e.to-e.from<20&&vu.test(n.state.sliceDoc(e.from,e.to));if(!t&&!n.explicit)return null;let i=[];for(let s=e;s;s=s.parent)Tu.has(s.name)&&(i=i.concat(Cu(n.state.doc,s)));return{options:i,from:t?e.from:n.pos,validFor:vu}}var ii=zs.define({name:"javascript",parser:Tf.configure({props:[jl.add({IfStatement:js({except:/^\s*({|else\b)/}),TryStatement:js({except:/^\s*({|catch\b|finally\b)/}),LabeledStatement:_f,SwitchBody:n=>{let e=n.textAfter,t=/^\s*\}/.test(e),i=/^\s*(case|default)\b/.test(e);return n.baseIndent+(t?0:i?1:2)*n.unit},Block:Bf({closing:"}"}),ArrowFunction:n=>n.baseIndent+n.unit,"TemplateString BlockComment":()=>null,"Statement Property":js({except:/^\s*{/}),JSXElement(n){let e=/^\s*<\//.test(n.textAfter);return n.lineIndent(n.node.from)+(e?0:n.unit)},JSXEscape(n){let e=/\s*\}/.test(n.textAfter);return n.lineIndent(n.node.from)+(e?0:n.unit)},"JSXOpenTag JSXSelfClosingTag"(n){return n.column(n.node.from)+n.unit}}),Nl.add({"Block ClassBody SwitchBody EnumBody ObjectExpression ArrayExpression ObjectType":Yf,BlockComment(n){return{from:n.from+2,to:n.to-2}},JSXElement(n){let e=n.firstChild;if(!e||e.name=="JSXSelfClosingTag")return null;let t=n.lastChild;return{from:e.to,to:t.type.isError?n.to:t.from}},"JSXSelfClosingTag JSXOpenTag"(n){var e;let t=(e=n.firstChild)===null||e===void 0?void 0:e.nextSibling,i=n.lastChild;return!t||t.type.isError?null:{from:t.to,to:i.type.isError?n.to:i.from}}})]}),languageData:{closeBrackets:{brackets:["(","[","{","'",'"',"`"]},commentTokens:{line:"//",block:{open:"/*",close:"*/"}},indentOnInput:/^\s*(?:case |default:|\{|\}|<\/)$/,wordChars:"$"}}),Au={test:n=>/^JSX/.test(n.name),facet:ql({commentTokens:{block:{open:"{/*",close:"*/}"}}})},T0=ii.configure({dialect:"ts"},"typescript"),C0=ii.configure({dialect:"jsx",props:[Vs.add(n=>n.isTop?[Au]:void 0)]}),Z0=ii.configure({dialect:"jsx ts",props:[Vs.add(n=>n.isTop?[Au]:void 0)]},"typescript"),Mu=n=>({label:n,type:"keyword"}),Ru="break case const continue default delete export extends false finally in instanceof let new return static super switch this throw true typeof var yield".split(" ").map(Mu),A0=Ru.concat(["declare","implements","private","protected","public"].map(Mu));function Xu(n={}){let e=n.jsx?n.typescript?Z0:C0:n.typescript?T0:ii,t=n.typescript?Q0.concat(A0):Pu.concat(Ru);return new _s(e,[ii.data.of({autocomplete:uu(Zu,la(t))}),ii.data.of({autocomplete:P0}),n.jsx?X0:[]])}function M0(n){for(;;){if(n.name=="JSXOpenTag"||n.name=="JSXSelfClosingTag"||n.name=="JSXFragmentTag")return n;if(n.name=="JSXEscape"||!n.parent)return null;n=n.parent}}function $u(n,e,t=n.length){for(let i=e?.firstChild;i;i=i.nextSibling)if(i.name=="JSXIdentifier"||i.name=="JSXBuiltin"||i.name=="JSXNamespacedName"||i.name=="JSXMemberExpression")return n.sliceString(i.from,Math.min(i.to,t));return""}var R0=typeof navigator=="object"&&/Android\b/.test(navigator.userAgent),X0=v.inputHandler.of((n,e,t,i,s)=>{if((R0?n.composing:n.compositionStarted)||n.state.readOnly||e!=t||i!=">"&&i!="/"||!ii.isActiveAt(n.state,e,-1))return!1;let r=s(),{state:o}=r,l=o.changeByRange(a=>{var h;let{head:c}=a,f=ee(o).resolveInner(c-1,-1),u;if(f.name=="JSXStartTag"&&(f=f.parent),!(o.doc.sliceString(c-1,c)!=i||f.name=="JSXAttributeValue"&&f.to>c)){if(i==">"&&f.name=="JSXFragmentTag")return{range:a,changes:{from:c,insert:""}};if(i=="/"&&f.name=="JSXStartCloseTag"){let d=f.parent,p=d.parent;if(p&&d.from==c-2&&((u=$u(o.doc,p.firstChild,c))||((h=p.firstChild)===null||h===void 0?void 0:h.name)=="JSXFragmentTag")){let O=`${u}>`;return{range:b.cursor(c+O.length,-1),changes:{from:c,insert:O}}}}else if(i==">"){let d=M0(f);if(d&&d.name=="JSXOpenTag"&&!/^\/?>|^<\//.test(o.doc.sliceString(c,c+2))&&(u=$u(o.doc,d,c)))return{range:a,changes:{from:c,insert:``}}}}return{range:a}});return l.changes.empty?!1:(n.dispatch([r,o.update(l,{userEvent:"input.complete",scrollIntoView:!0})]),!0)});var L0=n=>{let{state:e}=n,t=e.doc.lineAt(e.selection.main.from),i=Sa(n.state,t.from);return i.line?E0(n):i.block?W0(n):!1};function xa(n,e){return({state:t,dispatch:i})=>{if(t.readOnly)return!1;let s=n(e,t);return s?(i(t.update(s)),!0):!1}}var E0=xa(_0,0);var D0=xa(Yu,0);var W0=xa((n,e)=>Yu(n,e,z0(e)),0);function Sa(n,e){let t=n.languageDataAt("commentTokens",e,1);return t.length?t[0]:{}}var $n=50;function B0(n,{open:e,close:t},i,s){let r=n.sliceDoc(i-$n,i),o=n.sliceDoc(s,s+$n),l=/\s*$/.exec(r)[0].length,a=/^\s*/.exec(o)[0].length,h=r.length-l;if(r.slice(h-e.length,h)==e&&o.slice(a,a+t.length)==t)return{open:{pos:i-l,margin:l&&1},close:{pos:s+a,margin:a&&1}};let c,f;s-i<=2*$n?c=f=n.sliceDoc(i,s):(c=n.sliceDoc(i,i+$n),f=n.sliceDoc(s-$n,s));let u=/^\s*/.exec(c)[0].length,d=/\s*$/.exec(f)[0].length,p=f.length-d-t.length;return c.slice(u,u+e.length)==e&&f.slice(p,p+t.length)==t?{open:{pos:i+u+e.length,margin:/\s/.test(c.charAt(u+e.length))?1:0},close:{pos:s-d-t.length,margin:/\s/.test(f.charAt(p-1))?1:0}}:null}function z0(n){let e=[];for(let t of n.selection.ranges){let i=n.doc.lineAt(t.from),s=t.to<=i.to?i:n.doc.lineAt(t.to);s.from>i.from&&s.from==t.to&&(s=t.to==i.to+1?i:n.doc.lineAt(t.to-1));let r=e.length-1;r>=0&&e[r].to>i.from?e[r].to=s.to:e.push({from:i.from+/^\s*/.exec(i.text)[0].length,to:s.to})}return e}function Yu(n,e,t=e.selection.ranges){let i=t.map(r=>Sa(e,r.from).block);if(!i.every(r=>r))return null;let s=t.map((r,o)=>B0(e,i[o],r.from,r.to));if(n!=2&&!s.every(r=>r))return{changes:e.changes(t.map((r,o)=>s[o]?[]:[{from:r.from,insert:i[o].open+" "},{from:r.to,insert:" "+i[o].close}]))};if(n!=1&&s.some(r=>r)){let r=[];for(let o=0,l;os&&(r==o||o>f.from)){s=f.from;let u=/^\s*/.exec(f.text)[0].length,d=u==f.length,p=f.text.slice(u,u+h.length)==h?u:-1;ur.comment<0&&(!r.empty||r.single))){let r=[];for(let{line:l,token:a,indent:h,empty:c,single:f}of i)(f||!c)&&r.push({from:l.from+h,insert:a+" "});let o=e.changes(r);return{changes:o,selection:e.selection.map(o,1)}}else if(n!=1&&i.some(r=>r.comment>=0)){let r=[];for(let{line:o,comment:l,token:a}of i)if(l>=0){let h=o.from+l,c=h+a.length;o.text[c-o.from]==" "&&c++,r.push({from:h,to:c})}return{changes:r}}return null}var ma=be.define(),I0=be.define(),Y0=$.define(),Vu=$.define({combine(n){return fe(n,{minDepth:100,newGroupDelay:500,joinToEvent:(e,t)=>t},{minDepth:Math.max,newGroupDelay:Math.min,joinToEvent:(e,t)=>(i,s)=>e(i,s)||t(i,s)})}}),qu=K.define({create(){return ni.empty},update(n,e){let t=e.state.facet(Vu),i=e.annotation(ma);if(i){let a=He.fromTransaction(e,i.selection),h=i.side,c=h==0?n.undone:n.done;return a?c=ir(c,c.length,t.minDepth,a):c=Uu(c,e.startState.selection),new ni(h==0?i.rest:c,h==0?c:i.rest)}let s=e.annotation(I0);if((s=="full"||s=="before")&&(n=n.isolate()),e.annotation(ie.addToHistory)===!1)return e.changes.empty?n:n.addMapping(e.changes.desc);let r=He.fromTransaction(e),o=e.annotation(ie.time),l=e.annotation(ie.userEvent);return r?n=n.addChanges(r,o,l,t,e):e.selection&&(n=n.addSelection(e.startState.selection,o,l,t.newGroupDelay)),(s=="full"||s=="after")&&(n=n.isolate()),n},toJSON(n){return{done:n.done.map(e=>e.toJSON()),undone:n.undone.map(e=>e.toJSON())}},fromJSON(n){return new ni(n.done.map(He.fromJSON),n.undone.map(He.fromJSON))}});function ju(n={}){return[qu,Vu.of(n),v.domEventHandlers({beforeinput(e,t){let i=e.inputType=="historyUndo"?Nu:e.inputType=="historyRedo"?ga:null;return i?(e.preventDefault(),i(t)):!1}})]}function nr(n,e){return function({state:t,dispatch:i}){if(!e&&t.readOnly)return!1;let s=t.field(qu,!1);if(!s)return!1;let r=s.pop(n,t,e);return r?(i(r),!0):!1}}var Nu=nr(0,!1),ga=nr(1,!1),V0=nr(0,!0),q0=nr(1,!0);var He=class n{constructor(e,t,i,s,r){this.changes=e,this.effects=t,this.mapped=i,this.startSelection=s,this.selectionsAfter=r}setSelAfter(e){return new n(this.changes,this.effects,this.mapped,this.startSelection,e)}toJSON(){var e,t,i;return{changes:(e=this.changes)===null||e===void 0?void 0:e.toJSON(),mapped:(t=this.mapped)===null||t===void 0?void 0:t.toJSON(),startSelection:(i=this.startSelection)===null||i===void 0?void 0:i.toJSON(),selectionsAfter:this.selectionsAfter.map(s=>s.toJSON())}}static fromJSON(e){return new n(e.changes&&Oe.fromJSON(e.changes),[],e.mapped&&ht.fromJSON(e.mapped),e.startSelection&&b.fromJSON(e.startSelection),e.selectionsAfter.map(b.fromJSON))}static fromTransaction(e,t){let i=Ve;for(let s of e.startState.facet(Y0)){let r=s(e);r.length&&(i=i.concat(r))}return!i.length&&e.changes.empty?null:new n(e.changes.invert(e.startState.doc),i,void 0,t||e.startState.selection,Ve)}static selection(e){return new n(void 0,Ve,void 0,void 0,e)}};function ir(n,e,t,i){let s=e+1>t+20?e-t-1:0,r=n.slice(s,e);return r.push(i),r}function j0(n,e){let t=[],i=!1;return n.iterChangedRanges((s,r)=>t.push(s,r)),e.iterChangedRanges((s,r,o,l)=>{for(let a=0;a=h&&o<=c&&(i=!0)}}),i}function N0(n,e){return n.ranges.length==e.ranges.length&&n.ranges.filter((t,i)=>t.empty!=e.ranges[i].empty).length===0}function Gu(n,e){return n.length?e.length?n.concat(e):n:e}var Ve=[],G0=200;function Uu(n,e){if(n.length){let t=n[n.length-1],i=t.selectionsAfter.slice(Math.max(0,t.selectionsAfter.length-G0));return i.length&&i[i.length-1].eq(e)?n:(i.push(e),ir(n,n.length-1,1e9,t.setSelAfter(i)))}else return[He.selection([e])]}function U0(n){let e=n[n.length-1],t=n.slice();return t[n.length-1]=e.setSelAfter(e.selectionsAfter.slice(0,e.selectionsAfter.length-1)),t}function Oa(n,e){if(!n.length)return n;let t=n.length,i=Ve;for(;t;){let s=F0(n[t-1],e,i);if(s.changes&&!s.changes.empty||s.effects.length){let r=n.slice(0,t);return r[t-1]=s,r}else e=s.mapped,t--,i=s.selectionsAfter}return i.length?[He.selection(i)]:Ve}function F0(n,e,t){let i=Gu(n.selectionsAfter.length?n.selectionsAfter.map(l=>l.map(e)):Ve,t);if(!n.changes)return He.selection(i);let s=n.changes.map(e),r=e.mapDesc(n.changes,!0),o=n.mapped?n.mapped.composeDesc(r):r;return new He(s,A.mapEffects(n.effects,e),o,n.startSelection.map(r),i)}var H0=/^(input\.type|delete)($|\.)/,ni=class n{constructor(e,t,i=0,s=void 0){this.done=e,this.undone=t,this.prevTime=i,this.prevUserEvent=s}isolate(){return this.prevTime?new n(this.done,this.undone):this}addChanges(e,t,i,s,r){let o=this.done,l=o[o.length-1];return l&&l.changes&&!l.changes.empty&&e.changes&&(!i||H0.test(i))&&(!l.selectionsAfter.length&&t-this.prevTime0&&t-this.prevTimet.empty?n.moveByChar(t,e):sr(t,e))}function de(n){return n.textDirectionAt(n.state.selection.main.head)==_.LTR}var Ku=n=>Hu(n,!de(n)),Ju=n=>Hu(n,de(n));function ed(n,e){return Je(n,t=>t.empty?n.moveByGroup(t,e):sr(t,e))}var K0=n=>ed(n,!de(n)),J0=n=>ed(n,de(n));var Vb=typeof Intl<"u"&&Intl.Segmenter?new Intl.Segmenter(void 0,{granularity:"word"}):null;function e1(n,e,t){if(e.type.prop(t))return!0;let i=e.to-e.from;return i&&(i>2||/[^\s,.;:]/.test(n.sliceDoc(e.from,e.to)))||e.firstChild}function rr(n,e,t){let i=ee(n).resolveInner(e.head),s=t?R.closedBy:R.openedBy;for(let a=e.head;;){let h=t?i.childAfter(a):i.childBefore(a);if(!h)break;e1(n,h,s)?i=h:a=t?h.to:h.from}let r=i.type.prop(s),o,l;return r&&(o=t?Fe(n,i.from,1):Fe(n,i.to,-1))&&o.matched?l=t?o.end.to:o.end.from:l=t?i.to:i.from,b.cursor(l,t?-1:1)}var t1=n=>Je(n,e=>rr(n.state,e,!de(n))),i1=n=>Je(n,e=>rr(n.state,e,de(n)));function td(n,e){return Je(n,t=>{if(!t.empty)return sr(t,e);let i=n.moveVertically(t,e);return i.head!=t.head?i:n.moveToLineBoundary(t,e)})}var id=n=>td(n,!1),nd=n=>td(n,!0);function sd(n){let e=n.scrollDOM.clientHeighto.empty?n.moveVertically(o,e,t.height):sr(o,e));if(s.eq(i.selection))return!1;let r;if(t.selfScroll){let o=n.coordsAtPos(i.selection.main.head),l=n.scrollDOM.getBoundingClientRect(),a=l.top+t.marginTop,h=l.bottom-t.marginBottom;o&&o.top>a&&o.bottomrd(n,!1),ya=n=>rd(n,!0);function At(n,e,t){let i=n.lineBlockAt(e.head),s=n.moveToLineBoundary(e,t);if(s.head==e.head&&s.head!=(t?i.to:i.from)&&(s=n.moveToLineBoundary(e,t,!1)),!t&&s.head==i.from&&i.length){let r=/^\s*/.exec(n.state.sliceDoc(i.from,Math.min(i.from+100,i.to)))[0].length;r&&e.head!=i.from+r&&(s=b.cursor(i.from+r))}return s}var n1=n=>Je(n,e=>At(n,e,!0)),s1=n=>Je(n,e=>At(n,e,!1)),r1=n=>Je(n,e=>At(n,e,!de(n))),o1=n=>Je(n,e=>At(n,e,de(n))),l1=n=>Je(n,e=>b.cursor(n.lineBlockAt(e.head).from,1)),a1=n=>Je(n,e=>b.cursor(n.lineBlockAt(e.head).to,-1));function h1(n,e,t){let i=!1,s=Xi(n.selection,r=>{let o=Fe(n,r.head,-1)||Fe(n,r.head,1)||r.head>0&&Fe(n,r.head-1,1)||r.headh1(n,e,!1);function qe(n,e){let t=Xi(n.state.selection,i=>{let s=e(i);return b.range(i.anchor,s.head,s.goalColumn,s.bidiLevel||void 0,s.assoc)});return t.eq(n.state.selection)?!1:(n.dispatch(Ke(n.state,t)),!0)}function od(n,e){return qe(n,t=>n.moveByChar(t,e))}var ld=n=>od(n,!de(n)),ad=n=>od(n,de(n));function hd(n,e){return qe(n,t=>n.moveByGroup(t,e))}var f1=n=>hd(n,!de(n)),u1=n=>hd(n,de(n));var d1=n=>qe(n,e=>rr(n.state,e,!de(n))),p1=n=>qe(n,e=>rr(n.state,e,de(n)));function cd(n,e){return qe(n,t=>n.moveVertically(t,e))}var fd=n=>cd(n,!1),ud=n=>cd(n,!0);function dd(n,e){return qe(n,t=>n.moveVertically(t,e,sd(n).height))}var Eu=n=>dd(n,!1),Du=n=>dd(n,!0),O1=n=>qe(n,e=>At(n,e,!0)),m1=n=>qe(n,e=>At(n,e,!1)),g1=n=>qe(n,e=>At(n,e,!de(n))),y1=n=>qe(n,e=>At(n,e,de(n))),b1=n=>qe(n,e=>b.cursor(n.lineBlockAt(e.head).from)),x1=n=>qe(n,e=>b.cursor(n.lineBlockAt(e.head).to)),Wu=({state:n,dispatch:e})=>(e(Ke(n,{anchor:0})),!0),Bu=({state:n,dispatch:e})=>(e(Ke(n,{anchor:n.doc.length})),!0),zu=({state:n,dispatch:e})=>(e(Ke(n,{anchor:n.selection.main.anchor,head:0})),!0),_u=({state:n,dispatch:e})=>(e(Ke(n,{anchor:n.selection.main.anchor,head:n.doc.length})),!0),S1=({state:n,dispatch:e})=>(e(n.update({selection:{anchor:0,head:n.doc.length},userEvent:"select"})),!0),w1=({state:n,dispatch:e})=>{let t=or(n).map(({from:i,to:s})=>b.range(i,Math.min(s+1,n.doc.length)));return e(n.update({selection:b.create(t),userEvent:"select"})),!0},k1=({state:n,dispatch:e})=>{let t=Xi(n.selection,i=>{let s=ee(n),r=s.resolveStack(i.from,1);if(i.empty){let o=s.resolveStack(i.from,-1);o.node.from>=r.node.from&&o.node.to<=r.node.to&&(r=o)}for(let o=r;o;o=o.next){let{node:l}=o;if((l.from=i.to||l.to>i.to&&l.from<=i.from)&&o.next)return b.range(l.to,l.from)}return i});return t.eq(n.selection)?!1:(e(Ke(n,t)),!0)};function pd(n,e){let{state:t}=n,i=t.selection,s=t.selection.ranges.slice();for(let r of t.selection.ranges){let o=t.doc.lineAt(r.head);if(e?o.to0)for(let l=r;;){let a=n.moveVertically(l,e);if(a.heado.to){s.some(h=>h.head==a.head)||s.push(a);break}else{if(a.head==l.head)break;l=a}}}return s.length==i.ranges.length?!1:(n.dispatch(Ke(t,b.create(s,s.length-1))),!0)}var Q1=n=>pd(n,!1),v1=n=>pd(n,!0),$1=({state:n,dispatch:e})=>{let t=n.selection,i=null;return t.ranges.length>1?i=b.create([t.main]):t.main.empty||(i=b.create([b.cursor(t.main.head)])),i?(e(Ke(n,i)),!0):!1};function Pn(n,e){if(n.state.readOnly)return!1;let t="delete.selection",{state:i}=n,s=i.changeByRange(r=>{let{from:o,to:l}=r;if(o==l){let a=e(r);ao&&(t="delete.forward",a=tr(n,a,!0)),o=Math.min(o,a),l=Math.max(l,a)}else o=tr(n,o,!1),l=tr(n,l,!0);return o==l?{range:r}:{changes:{from:o,to:l},range:b.cursor(o,os(n)))i.between(e,e,(s,r)=>{se&&(e=t?r:s)});return e}var Od=(n,e,t)=>Pn(n,i=>{let s=i.from,{state:r}=n,o=r.doc.lineAt(s),l,a;if(t&&!e&&s>o.from&&sOd(n,!1,!0);var md=n=>Od(n,!0,!1),gd=(n,e)=>Pn(n,t=>{let i=t.head,{state:s}=n,r=s.doc.lineAt(i),o=s.charCategorizer(i);for(let l=null;;){if(i==(e?r.to:r.from)){i==t.head&&r.number!=(e?s.doc.lines:1)&&(i+=e?1:-1);break}let a=te(r.text,i-r.from,e)+r.from,h=r.text.slice(Math.min(i,a)-r.from,Math.max(i,a)-r.from),c=o(h);if(l!=null&&c!=l)break;(h!=" "||i!=t.head)&&(l=c),i=a}return i}),yd=n=>gd(n,!1),P1=n=>gd(n,!0);var T1=n=>Pn(n,e=>{let t=n.lineBlockAt(e.head).to;return e.headPn(n,e=>{let t=n.moveToLineBoundary(e,!1).head;return e.head>t?t:Math.max(0,e.head-1)}),Z1=n=>Pn(n,e=>{let t=n.moveToLineBoundary(e,!0).head;return e.head{if(n.readOnly)return!1;let t=n.changeByRange(i=>({changes:{from:i.from,to:i.to,insert:E.of(["",""])},range:b.cursor(i.from)}));return e(n.update(t,{scrollIntoView:!0,userEvent:"input"})),!0},M1=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let t=n.changeByRange(i=>{if(!i.empty||i.from==0||i.from==n.doc.length)return{range:i};let s=i.from,r=n.doc.lineAt(s),o=s==r.from?s-1:te(r.text,s-r.from,!1)+r.from,l=s==r.to?s+1:te(r.text,s-r.from,!0)+r.from;return{changes:{from:o,to:l,insert:n.doc.slice(s,l).append(n.doc.slice(o,s))},range:b.cursor(l)}});return t.changes.empty?!1:(e(n.update(t,{scrollIntoView:!0,userEvent:"move.character"})),!0)};function or(n){let e=[],t=-1;for(let i of n.selection.ranges){let s=n.doc.lineAt(i.from),r=n.doc.lineAt(i.to);if(!i.empty&&i.to==r.from&&(r=n.doc.lineAt(i.to-1)),t>=s.number){let o=e[e.length-1];o.to=r.to,o.ranges.push(i)}else e.push({from:s.from,to:r.to,ranges:[i]});t=r.number+1}return e}function bd(n,e,t){if(n.readOnly)return!1;let i=[],s=[];for(let r of or(n)){if(t?r.to==n.doc.length:r.from==0)continue;let o=n.doc.lineAt(t?r.to+1:r.from-1),l=o.length+1;if(t){i.push({from:r.to,to:o.to},{from:r.from,insert:o.text+n.lineBreak});for(let a of r.ranges)s.push(b.range(Math.min(n.doc.length,a.anchor+l),Math.min(n.doc.length,a.head+l)))}else{i.push({from:o.from,to:r.from},{from:r.to,insert:n.lineBreak+o.text});for(let a of r.ranges)s.push(b.range(a.anchor-l,a.head-l))}}return i.length?(e(n.update({changes:i,scrollIntoView:!0,selection:b.create(s,n.selection.mainIndex),userEvent:"move.line"})),!0):!1}var R1=({state:n,dispatch:e})=>bd(n,e,!1),X1=({state:n,dispatch:e})=>bd(n,e,!0);function xd(n,e,t){if(n.readOnly)return!1;let i=[];for(let r of or(n))t?i.push({from:r.from,insert:n.doc.slice(r.from,r.to)+n.lineBreak}):i.push({from:r.to,insert:n.lineBreak+n.doc.slice(r.from,r.to)});let s=n.changes(i);return e(n.update({changes:s,selection:n.selection.map(s,t?1:-1),scrollIntoView:!0,userEvent:"input.copyline"})),!0}var L1=({state:n,dispatch:e})=>xd(n,e,!1),E1=({state:n,dispatch:e})=>xd(n,e,!0),D1=n=>{if(n.state.readOnly)return!1;let{state:e}=n,t=e.changes(or(e).map(({from:s,to:r})=>(s>0?s--:r{let r;if(n.lineWrapping){let o=n.lineBlockAt(s.head),l=n.coordsAtPos(s.head,s.assoc||1);l&&(r=o.bottom+n.documentTop-l.bottom+n.defaultLineHeight/2)}return n.moveVertically(s,!0,r)}).map(t);return n.dispatch({changes:t,selection:i,scrollIntoView:!0,userEvent:"delete.line"}),!0};function W1(n,e){if(/\(\)|\[\]|\{\}/.test(n.sliceDoc(e-1,e+1)))return{from:e,to:e};let t=ee(n).resolveInner(e),i=t.childBefore(e),s=t.childAfter(e),r;return i&&s&&i.to<=e&&s.from>=e&&(r=i.type.prop(R.closedBy))&&r.indexOf(s.name)>-1&&n.doc.lineAt(i.to).from==n.doc.lineAt(s.from).from&&!/\S/.test(n.sliceDoc(i.to,s.from))?{from:i.to,to:s.from}:null}var Iu=Sd(!1),B1=Sd(!0);function Sd(n){return({state:e,dispatch:t})=>{if(e.readOnly)return!1;let i=e.changeByRange(s=>{let{from:r,to:o}=s,l=e.doc.lineAt(r),a=!n&&r==o&&W1(e,r);n&&(r=o=(o<=l.to?l:e.doc.lineAt(o)).to);let h=new Kt(e,{simulateBreak:r,simulateDoubleBreak:!!a}),c=qs(h,r);for(c==null&&(c=ct(/^\s*/.exec(e.doc.lineAt(r).text)[0],e.tabSize));ol.from&&r{let s=[];for(let o=i.from;o<=i.to;){let l=n.doc.lineAt(o);l.number>t&&(i.empty||i.to>l.from)&&(e(l,s,i),t=l.number),o=l.to+1}let r=n.changes(s);return{changes:s,range:b.range(r.mapPos(i.anchor,1),r.mapPos(i.head,1))}})}var z1=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let t=Object.create(null),i=new Kt(n,{overrideIndentation:r=>{let o=t[r];return o??-1}}),s=wa(n,(r,o,l)=>{let a=qs(i,r.from);if(a==null)return;/\S/.test(r.text)||(a=0);let h=/^\s*/.exec(r.text)[0],c=Mi(n,a);(h!=c||l.fromn.readOnly?!1:(e(n.update(wa(n,(t,i)=>{i.push({from:t.from,insert:n.facet(Ai)})}),{userEvent:"input.indent"})),!0),I1=({state:n,dispatch:e})=>n.readOnly?!1:(e(n.update(wa(n,(t,i)=>{let s=/^\s*/.exec(t.text)[0];if(!s)return;let r=ct(s,n.tabSize),o=0,l=Mi(n,Math.max(0,r-bn(n)));for(;o(n.setTabFocusMode(),!0);var V1=[{key:"Ctrl-b",run:Ku,shift:ld,preventDefault:!0},{key:"Ctrl-f",run:Ju,shift:ad},{key:"Ctrl-p",run:id,shift:fd},{key:"Ctrl-n",run:nd,shift:ud},{key:"Ctrl-a",run:l1,shift:b1},{key:"Ctrl-e",run:a1,shift:x1},{key:"Ctrl-d",run:md},{key:"Ctrl-h",run:ba},{key:"Ctrl-k",run:T1},{key:"Ctrl-Alt-h",run:yd},{key:"Ctrl-o",run:A1},{key:"Ctrl-t",run:M1},{key:"Ctrl-v",run:ya}],q1=[{key:"ArrowLeft",run:Ku,shift:ld,preventDefault:!0},{key:"Mod-ArrowLeft",mac:"Alt-ArrowLeft",run:K0,shift:f1,preventDefault:!0},{mac:"Cmd-ArrowLeft",run:r1,shift:g1,preventDefault:!0},{key:"ArrowRight",run:Ju,shift:ad,preventDefault:!0},{key:"Mod-ArrowRight",mac:"Alt-ArrowRight",run:J0,shift:u1,preventDefault:!0},{mac:"Cmd-ArrowRight",run:o1,shift:y1,preventDefault:!0},{key:"ArrowUp",run:id,shift:fd,preventDefault:!0},{mac:"Cmd-ArrowUp",run:Wu,shift:zu},{mac:"Ctrl-ArrowUp",run:Lu,shift:Eu},{key:"ArrowDown",run:nd,shift:ud,preventDefault:!0},{mac:"Cmd-ArrowDown",run:Bu,shift:_u},{mac:"Ctrl-ArrowDown",run:ya,shift:Du},{key:"PageUp",run:Lu,shift:Eu},{key:"PageDown",run:ya,shift:Du},{key:"Home",run:s1,shift:m1,preventDefault:!0},{key:"Mod-Home",run:Wu,shift:zu},{key:"End",run:n1,shift:O1,preventDefault:!0},{key:"Mod-End",run:Bu,shift:_u},{key:"Enter",run:Iu,shift:Iu},{key:"Mod-a",run:S1},{key:"Backspace",run:ba,shift:ba,preventDefault:!0},{key:"Delete",run:md,preventDefault:!0},{key:"Mod-Backspace",mac:"Alt-Backspace",run:yd,preventDefault:!0},{key:"Mod-Delete",mac:"Alt-Delete",run:P1,preventDefault:!0},{mac:"Mod-Backspace",run:C1,preventDefault:!0},{mac:"Mod-Delete",run:Z1,preventDefault:!0}].concat(V1.map(n=>({mac:n.key,run:n.run,shift:n.shift}))),wd=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:t1,shift:d1},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:i1,shift:p1},{key:"Alt-ArrowUp",run:R1},{key:"Shift-Alt-ArrowUp",run:L1},{key:"Alt-ArrowDown",run:X1},{key:"Shift-Alt-ArrowDown",run:E1},{key:"Mod-Alt-ArrowUp",run:Q1},{key:"Mod-Alt-ArrowDown",run:v1},{key:"Escape",run:$1},{key:"Mod-Enter",run:B1},{key:"Alt-l",mac:"Ctrl-l",run:w1},{key:"Mod-i",run:k1,preventDefault:!0},{key:"Mod-[",run:I1},{key:"Mod-]",run:_1},{key:"Mod-Alt-\\",run:z1},{key:"Shift-Mod-k",run:D1},{key:"Shift-Mod-\\",run:c1},{key:"Mod-/",run:L0},{key:"Alt-A",run:D0},{key:"Ctrl-m",mac:"Shift-Alt-m",run:Y1}].concat(q1);var kd=typeof String.prototype.normalize=="function"?n=>n.normalize("NFKD"):n=>n,Rt=class{constructor(e,t,i=0,s=e.length,r,o){this.test=o,this.value={from:0,to:0,precise:!1},this.done=!1,this.matches=[],this.buffer="",this.bufferPos=0,this.iter=e.iterRange(i,s),this.bufferStart=i,this.normalize=r?l=>r(kd(l)):kd,this.query=this.normalize(t)}peek(){if(this.bufferPos==this.buffer.length){if(this.bufferStart+=this.buffer.length,this.iter.next(),this.iter.done)return-1;this.bufferPos=0,this.buffer=this.iter.value}return le(this.buffer,this.bufferPos)}next(){for(;this.matches.length;)this.matches.pop();return this.nextOverlapping()}nextOverlapping(){for(;;){let e=this.peek();if(e<0)return this.done=!0,this;let t=Yi(e),i=this.bufferStart+this.bufferPos;this.bufferPos+=Pe(e);let s=this.normalize(t);if(s.length)for(let r=0,o=i,l=!0;;r++){let a=s.charCodeAt(r),h=this.match(a,o,l,this.bufferPos+this.bufferStart,r==s.length-1);if(h)return this.value=h,this;if(r==s.length-1)break;l&&rthis.to&&(this.curLine=this.curLine.slice(0,this.to-this.curLineStart)),this.iter.next())}nextLine(){this.curLineStart=this.curLineStart+this.curLine.length+1,this.curLineStart>this.to?this.curLine="":this.getLine(0)}next(){for(let e=this.matchPos-this.curLineStart;;){this.re.lastIndex=e;let t=this.matchPos<=this.to&&this.re.exec(this.curLine);if(t){let i=this.curLineStart+t.index,s=i+t[0].length;if(this.matchPos=ur(this.text,s+(i==s?1:0)),i==this.curLineStart+this.curLine.length&&this.nextLine(),(ithis.value.to)&&(!this.test||this.test(i,s,t)))return this.value={from:i,to:s,precise:!0,match:t},this;e=this.matchPos-this.curLineStart}else if(this.curLineStart+this.curLine.length=i||s.to<=t){let l=new n(t,e.sliceString(t,i));return ka.set(e,l),l}if(s.from==t&&s.to==i)return s;let{text:r,from:o}=s;return o>t&&(r=e.sliceString(t,o)+r,o=t),s.to=this.to?this.to:this.text.lineAt(e).to}next(){for(;;){let e=this.re.lastIndex=this.matchPos-this.flat.from,t=this.re.exec(this.flat.text);if(t&&!t[0]&&t.index==e&&(this.re.lastIndex=e+1,t=this.re.exec(this.flat.text)),t){let i=this.flat.from+t.index,s=i+t[0].length;if((this.flat.to>=this.to||t.index+t[0].length<=this.flat.text.length-10)&&(!this.test||this.test(i,s,t)))return this.value={from:i,to:s,precise:!0,match:t},this.matchPos=ur(this.text,s+(i==s?1:0)),this}if(this.flat.to==this.to)return this.done=!0,this;this.flat=cr.get(this.text,this.flat.from,this.chunkEnd(this.flat.from+this.flat.text.length*2))}}};typeof Symbol<"u"&&(hr.prototype[Symbol.iterator]=fr.prototype[Symbol.iterator]=function(){return this});function j1(n){try{return new RegExp(n,Ta),!0}catch{return!1}}function ur(n,e){if(e>=n.length)return e;let t=n.lineAt(e),i;for(;e=56320&&i<57344;)e++;return e}var N1=n=>{let{state:e}=n,t=String(e.doc.lineAt(n.state.selection.main.head).number),{close:i,result:s}=rf(n,{label:e.phrase("Go to line"),input:{type:"text",name:"line",value:t},focus:!0,submitLabel:e.phrase("go")});return s.then(r=>{let o=r&&/^([+-])?(\d+)?(:\d+)?(%)?$/.exec(r.elements.line.value);if(!o){n.dispatch({effects:i});return}let l=e.doc.lineAt(e.selection.main.head),[,a,h,c,f]=o,u=c?+c.slice(1):0,d=h?+h:l.number;if(h&&f){let g=d/100;a&&(g=g*(a=="-"?-1:1)+l.number/e.doc.lines),d=Math.round(e.doc.lines*g)}else h&&a&&(d=d*(a=="-"?-1:1)+l.number);let p=e.doc.line(Math.max(1,Math.min(e.doc.lines,d))),O=b.cursor(p.from+Math.max(0,Math.min(u,p.length)));n.dispatch({effects:[i,v.scrollIntoView(O.from,{y:"center"})],selection:O})}),!0},G1={highlightWordAroundCursor:!1,minSelectionLength:1,maxMatches:100,wholeWords:!1},Pd=$.define({combine(n){return fe(n,G1,{highlightWordAroundCursor:(e,t)=>e||t,minSelectionLength:Math.min,maxMatches:Math.min})}});function Td(n){let e=[J1,K1];return n&&e.push(Pd.of(n)),e}var U1=Z.mark({class:"cm-selectionMatch"}),F1=Z.mark({class:"cm-selectionMatch cm-selectionMatch-main"});function Qd(n,e,t,i){return(t==0||n(e.sliceDoc(t-1,t))!=V.Word)&&(i==e.doc.length||n(e.sliceDoc(i,i+1))!=V.Word)}function H1(n,e,t,i){return n(e.sliceDoc(t,t+1))==V.Word&&n(e.sliceDoc(i-1,i))==V.Word}var K1=H.fromClass(class{constructor(n){this.decorations=this.getDeco(n)}update(n){(n.selectionSet||n.docChanged||n.viewportChanged)&&(this.decorations=this.getDeco(n.view))}getDeco(n){let e=n.state.facet(Pd),{state:t}=n,i=t.selection;if(i.ranges.length>1)return Z.none;let s=i.main,r,o=null;if(s.empty){if(!e.highlightWordAroundCursor)return Z.none;let a=t.wordAt(s.head);if(!a)return Z.none;o=t.charCategorizer(s.head),r=t.sliceDoc(a.from,a.to)}else{let a=s.to-s.from;if(a200)return Z.none;if(e.wholeWords){if(r=t.sliceDoc(s.from,s.to),o=t.charCategorizer(s.head),!(Qd(o,t,s.from,s.to)&&H1(o,t,s.from,s.to)))return Z.none}else if(r=t.sliceDoc(s.from,s.to),!r)return Z.none}let l=[];for(let a of n.visibleRanges){let h=new Rt(t.doc,r,a.from,a.to);for(;!h.next().done;){let{from:c,to:f}=h.value;if((!o||Qd(o,t,c,f))&&(s.empty&&c<=s.from&&f>=s.to?l.push(F1.range(c,f)):(c>=s.to||f<=s.from)&&l.push(U1.range(c,f)),l.length>e.maxMatches))return Z.none}}return Z.set(l)}},{decorations:n=>n.decorations}),J1=v.baseTheme({".cm-selectionMatch":{backgroundColor:"#99ff7780"},".cm-searchMatch .cm-selectionMatch":{backgroundColor:"transparent"}}),ey=({state:n,dispatch:e})=>{let{selection:t}=n,i=b.create(t.ranges.map(s=>n.wordAt(s.head)||b.cursor(s.head)),t.mainIndex);return i.eq(t)?!1:(e(n.update({selection:i})),!0)};function ty(n,e){let{main:t,ranges:i}=n.selection,s=n.wordAt(t.head),r=s&&s.from==t.from&&s.to==t.to;for(let o=!1,l=new Rt(n.doc,e,i[i.length-1].to);;)if(l.next(),l.done){if(o)return null;l=new Rt(n.doc,e,0,Math.max(0,i[i.length-1].from-1)),o=!0}else{if(o&&i.some(a=>a.from==l.value.from))continue;if(r){let a=n.wordAt(l.value.from);if(!a||a.from!=l.value.from||a.to!=l.value.to)continue}return l.value}}var iy=({state:n,dispatch:e})=>{let{ranges:t}=n.selection;if(t.some(r=>r.from===r.to))return ey({state:n,dispatch:e});let i=n.sliceDoc(t[0].from,t[0].to);if(n.selection.ranges.some(r=>n.sliceDoc(r.from,r.to)!=i))return!1;let s=ty(n,i);return s?(e(n.update({selection:n.selection.addRange(b.range(s.from,s.to),!1),effects:v.scrollIntoView(s.to)})),!0):!1},Di=$.define({combine(n){return fe(n,{top:!1,caseSensitive:!1,literal:!1,regexp:!1,wholeWord:!1,createPanel:e=>new Pa(e),scrollToMatch:e=>v.scrollIntoView(e)})}});var dr=class{constructor(e){this.search=e.search,this.caseSensitive=!!e.caseSensitive,this.literal=!!e.literal,this.regexp=!!e.regexp,this.replace=e.replace||"",this.valid=!!this.search&&(!this.regexp||j1(this.search)),this.unquoted=this.unquote(this.search),this.wholeWord=!!e.wholeWord,this.test=e.test}unquote(e){return this.literal?e:e.replace(/\\([nrt\\])/g,(t,i)=>i=="n"?` -`:i=="r"?"\r":i=="t"?" ":"\\")}eq(e){return this.search==e.search&&this.replace==e.replace&&this.caseSensitive==e.caseSensitive&&this.regexp==e.regexp&&this.wholeWord==e.wholeWord&&this.test==e.test}create(){return this.regexp?new va(this):new Qa(this)}getCursor(e,t=0,i){let s=e.doc?e:Y.create({doc:e});return i==null&&(i=s.doc.length),this.regexp?Ei(this,s,t,i):Li(this,s,t,i)}},pr=class{constructor(e){this.spec=e}};function ny(n,e,t){return(i,s,r,o)=>{if(t&&!t(i,s,r,o))return!1;let l=i>=o&&s<=o+r.length?r.slice(i-o,s-o):e.doc.sliceString(i,s);return n(l,e,i,s)}}function Li(n,e,t,i){let s;return n.wholeWord&&(s=sy(e.doc,e.charCategorizer(e.selection.main.head))),n.test&&(s=ny(n.test,e,s)),new Rt(e.doc,n.unquoted,t,i,n.caseSensitive?void 0:r=>r.toLowerCase(),s)}function sy(n,e){return(t,i,s,r)=>((r>t||r+s.length=t)return null;s.push(i.value)}return s}highlight(e,t,i,s){let r=Li(this.spec,e,Math.max(0,t-this.spec.unquoted.length),Math.min(i+this.spec.unquoted.length,e.doc.length));for(;!r.next().done;)s(r.value.from,r.value.to)}};function ry(n,e,t){return(i,s,r)=>(!t||t(i,s,r))&&n(r[0],e,i,s)}function Ei(n,e,t,i){let s;return n.wholeWord&&(s=oy(e.charCategorizer(e.selection.main.head))),n.test&&(s=ry(n.test,e,s)),new hr(e.doc,n.search,{ignoreCase:!n.caseSensitive,test:s},t,i)}function Or(n,e){return n.slice(te(n,e,!1),e)}function mr(n,e){return n.slice(e,te(n,e))}function oy(n){return(e,t,i)=>!i[0].length||(n(Or(i.input,i.index))!=V.Word||n(mr(i.input,i.index))!=V.Word)&&(n(mr(i.input,i.index+i[0].length))!=V.Word||n(Or(i.input,i.index+i[0].length))!=V.Word)}var va=class extends pr{nextMatch(e,t,i){let s=Ei(this.spec,e,i,e.doc.length).next();return s.done&&(s=Ei(this.spec,e,0,t).next()),s.done?null:s.value}prevMatchInRange(e,t,i){for(let s=1;;s++){let r=Math.max(t,i-s*1e4),o=Ei(this.spec,e,r,i),l=null;for(;!o.next().done;)l=o.value;if(l&&(r==t||l.from>r+10))return l;if(r==t)return null}}prevMatch(e,t,i){return this.prevMatchInRange(e,0,t)||this.prevMatchInRange(e,i,e.doc.length)}getReplacement(e){return this.spec.unquote(this.spec.replace).replace(/\$([$&]|\d+)/g,(t,i)=>{if(i=="&")return e.match[0];if(i=="$")return"$";for(let s=i.length;s>0;s--){let r=+i.slice(0,s);if(r>0&&r=t)return null;s.push(i.value)}return s}highlight(e,t,i,s){let r=Ei(this.spec,e,Math.max(0,t-250),Math.min(i+250,e.doc.length));for(;!r.next().done;)s(r.value.from,r.value.to)}},Cn=A.define(),Ca=A.define(),Mt=K.define({create(n){return new Tn($a(n).create(),null)},update(n,e){for(let t of e.effects)t.is(Cn)?n=new Tn(t.value.create(),n.panel):t.is(Ca)&&(n=new Tn(n.query,t.value?Za:null));return n},provide:n=>jt.from(n,e=>e.panel)});var Tn=class{constructor(e,t){this.query=e,this.panel=t}},ly=Z.mark({class:"cm-searchMatch"}),ay=Z.mark({class:"cm-searchMatch cm-searchMatch-selected"}),hy=H.fromClass(class{constructor(n){this.view=n,this.decorations=this.highlight(n.state.field(Mt))}update(n){let e=n.state.field(Mt);(e!=n.startState.field(Mt)||n.docChanged||n.selectionSet||n.viewportChanged)&&(this.decorations=this.highlight(e))}highlight({query:n,panel:e}){if(!e||!n.spec.valid)return Z.none;let{view:t}=this,i=new $e;for(let s=0,r=t.visibleRanges,o=r.length;sr[s+1].from-500;)a=r[++s].to;n.highlight(t.state,l,a,(h,c)=>{let f=t.state.selection.ranges.some(u=>u.from==h&&u.to==c);i.add(h,c,f?ay:ly)})}return i.finish()}},{decorations:n=>n.decorations});function Zn(n){return e=>{let t=e.state.field(Mt,!1);return t&&t.query.spec.valid?n(e,t):Ad(e)}}var gr=Zn((n,{query:e})=>{let{to:t}=n.state.selection.main,i=e.nextMatch(n.state,t,t);if(!i)return!1;let s=b.single(i.from,i.to),r=n.state.facet(Di);return n.dispatch({selection:s,effects:[Aa(n,i),r.scrollToMatch(s.main,n)],userEvent:"select.search"}),Zd(n),!0}),yr=Zn((n,{query:e})=>{let{state:t}=n,{from:i}=t.selection.main,s=e.prevMatch(t,i,i);if(!s)return!1;let r=b.single(s.from,s.to),o=n.state.facet(Di);return n.dispatch({selection:r,effects:[Aa(n,s),o.scrollToMatch(r.main,n)],userEvent:"select.search"}),Zd(n),!0}),cy=Zn((n,{query:e})=>{let t=e.matchAll(n.state,1e3);return!t||!t.length?!1:(n.dispatch({selection:b.create(t.map(i=>b.range(i.from,i.to))),userEvent:"select.search.matches"}),!0)}),fy=({state:n,dispatch:e})=>{let t=n.selection;if(t.ranges.length>1||t.main.empty)return!1;let{from:i,to:s}=t.main,r=[],o=0;for(let l=new Rt(n.doc,n.sliceDoc(i,s));!l.next().done;){if(r.length>1e3)return!1;l.value.from==i&&(o=r.length),r.push(b.range(l.value.from,l.value.to))}return e(n.update({selection:b.create(r,o),userEvent:"select.search.matches"})),!0},vd=Zn((n,{query:e})=>{let{state:t}=n,{from:i,to:s}=t.selection.main;if(t.readOnly)return!1;let r=e.nextMatch(t,i,i);if(!r)return!1;let o=r,l=[],a,h,c=[];o.precise?o.from==i&&o.to==s&&(h=t.toText(e.getReplacement(o)),l.push({from:o.from,to:o.to,insert:h}),c.push(v.announce.of(t.phrase("replaced match on line $",t.doc.lineAt(i).number)+"."))):o=e.nextMatch(t,o.from,o.to);let f=n.state.changes(l);return o&&(a=b.single(o.from,o.to).map(f),c.push(Aa(n,o)),c.push(t.facet(Di).scrollToMatch(a.main,n))),n.dispatch({changes:f,selection:a,effects:c,userEvent:"input.replace"}),!0}),uy=Zn((n,{query:e})=>{if(n.state.readOnly)return!1;let t=[];for(let s of e.matchAll(n.state,1e9)){let{from:r,to:o,precise:l}=s;l&&t.push({from:r,to:o,insert:e.getReplacement(s)})}if(!t.length)return!1;let i=n.state.phrase("replaced $ matches",t.length)+".";return n.dispatch({changes:t,effects:v.announce.of(i),userEvent:"input.replace.all"}),!0});function Za(n){return n.state.facet(Di).createPanel(n)}function $a(n,e){var t,i,s,r,o;let l=n.selection.main,a=l.empty||l.to>l.from+100?"":n.sliceDoc(l.from,l.to);if(e&&!a)return e;let h=n.facet(Di);return new dr({search:((t=e?.literal)!==null&&t!==void 0?t:h.literal)?a:a.replace(/\n/g,"\\n"),caseSensitive:(i=e?.caseSensitive)!==null&&i!==void 0?i:h.caseSensitive,literal:(s=e?.literal)!==null&&s!==void 0?s:h.literal,regexp:(r=e?.regexp)!==null&&r!==void 0?r:h.regexp,wholeWord:(o=e?.wholeWord)!==null&&o!==void 0?o:h.wholeWord})}function Cd(n){let e=hn(n,Za);return e&&e.dom.querySelector("[main-field]")}function Zd(n){let e=Cd(n);e&&e==n.root.activeElement&&e.select()}var Ad=n=>{let e=n.state.field(Mt,!1);if(e&&e.panel){let t=Cd(n);if(t&&t!=n.root.activeElement){let i=$a(n.state,e.query.spec);i.valid&&n.dispatch({effects:Cn.of(i)}),t.focus(),t.select()}}else n.dispatch({effects:[Ca.of(!0),e?Cn.of($a(n.state,e.query.spec)):A.appendConfig.of(py)]});return!0},Md=n=>{let e=n.state.field(Mt,!1);if(!e||!e.panel)return!1;let t=hn(n,Za);return t&&t.dom.contains(n.root.activeElement)&&n.focus(),n.dispatch({effects:Ca.of(!1)}),!0},Rd=[{key:"Mod-f",run:Ad,scope:"editor search-panel"},{key:"F3",run:gr,shift:yr,scope:"editor search-panel",preventDefault:!0},{key:"Mod-g",run:gr,shift:yr,scope:"editor search-panel",preventDefault:!0},{key:"Escape",run:Md,scope:"editor search-panel"},{key:"Mod-Shift-l",run:fy},{key:"Mod-Alt-g",run:N1},{key:"Mod-d",run:iy,preventDefault:!0}],Pa=class{constructor(e){this.view=e;let t=this.query=e.state.field(Mt).query.spec;this.commit=this.commit.bind(this),this.searchField=B("input",{value:t.search,placeholder:Me(e,"Find"),"aria-label":Me(e,"Find"),class:"cm-textfield",name:"search",form:"","main-field":"true",onchange:this.commit,onkeyup:this.commit}),this.replaceField=B("input",{value:t.replace,placeholder:Me(e,"Replace"),"aria-label":Me(e,"Replace"),class:"cm-textfield",name:"replace",form:"",onchange:this.commit,onkeyup:this.commit}),this.caseField=B("input",{type:"checkbox",name:"case",form:"",checked:t.caseSensitive,onchange:this.commit}),this.reField=B("input",{type:"checkbox",name:"re",form:"",checked:t.regexp,onchange:this.commit}),this.wordField=B("input",{type:"checkbox",name:"word",form:"",checked:t.wholeWord,onchange:this.commit});function i(s,r,o){return B("button",{class:"cm-button",name:s,onclick:r,type:"button"},o)}this.dom=B("div",{onkeydown:s=>this.keydown(s),class:"cm-search"},[this.searchField,i("next",()=>gr(e),[Me(e,"next")]),i("prev",()=>yr(e),[Me(e,"previous")]),i("select",()=>cy(e),[Me(e,"all")]),B("label",null,[this.caseField,Me(e,"match case")]),B("label",null,[this.reField,Me(e,"regexp")]),B("label",null,[this.wordField,Me(e,"by word")]),...e.state.readOnly?[]:[B("br"),this.replaceField,i("replace",()=>vd(e),[Me(e,"replace")]),i("replaceAll",()=>uy(e),[Me(e,"replace all")])],B("button",{name:"close",onclick:()=>Md(e),"aria-label":Me(e,"close"),type:"button"},["\xD7"])])}commit(){let e=new dr({search:this.searchField.value,caseSensitive:this.caseField.checked,regexp:this.reField.checked,wholeWord:this.wordField.checked,replace:this.replaceField.value});e.eq(this.query)||(this.query=e,this.view.dispatch({effects:Cn.of(e)}))}keydown(e){Vc(this.view,e,"search-panel")?e.preventDefault():e.keyCode==13&&e.target==this.searchField?(e.preventDefault(),(e.shiftKey?yr:gr)(this.view)):e.keyCode==13&&e.target==this.replaceField&&(e.preventDefault(),vd(this.view))}update(e){for(let t of e.transactions)for(let i of t.effects)i.is(Cn)&&!i.value.eq(this.query)&&this.setQuery(i.value)}setQuery(e){this.query=e,this.searchField.value=e.search,this.replaceField.value=e.replace,this.caseField.checked=e.caseSensitive,this.reField.checked=e.regexp,this.wordField.checked=e.wholeWord}mount(){this.searchField.select()}get pos(){return 80}get top(){return this.view.state.facet(Di).top}};function Me(n,e){return n.state.phrase(e)}var lr=30,ar=/[\s\.,:;?!]/;function Aa(n,{from:e,to:t}){let i=n.state.doc.lineAt(e),s=n.state.doc.lineAt(t).to,r=Math.max(i.from,e-lr),o=Math.min(s,t+lr),l=n.state.sliceDoc(r,o);if(r!=i.from){for(let a=0;al.length-lr;a--)if(!ar.test(l[a-1])&&ar.test(l[a])){l=l.slice(0,a);break}}return v.announce.of(`${n.state.phrase("current match")}. ${l} ${n.state.phrase("on line")} ${i.number}.`)}var dy=v.baseTheme({".cm-panel.cm-search":{padding:"2px 6px 4px",position:"relative","& [name=close]":{position:"absolute",top:"0",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",padding:0,margin:0},"& input, & button, & label":{margin:".2em .6em .2em 0"},"& input[type=checkbox]":{marginRight:".2em"},"& label":{fontSize:"80%",whiteSpace:"pre"}},"&light .cm-searchMatch":{backgroundColor:"#ffff0054"},"&dark .cm-searchMatch":{backgroundColor:"#00ffff8a"},"&light .cm-searchMatch-selected":{backgroundColor:"#ff6a0054"},"&dark .cm-searchMatch-selected":{backgroundColor:"#ff00ff8a"}}),py=[Mt,xe.low(hy),dy];var xr=class{constructor(e,t,i){this.from=e,this.to=t,this.diagnostic=i}},si=class n{constructor(e,t,i){this.diagnostics=e,this.panel=t,this.selected=i}static init(e,t,i){let s=i.facet(An).markerFilter;s&&(e=s(e,i));let r=e.slice().sort((d,p)=>d.from-p.from||d.to-p.to),o=new $e,l=[],a=0,h=i.doc.iter(),c=0,f=i.doc.length;for(let d=0;;){let p=d==r.length?null:r[d];if(!p&&!l.length)break;let O,g;if(l.length)O=a,g=l.reduce((S,C)=>Math.min(S,C.to),p&&p.from>O?p.from:1e8);else{if(O=p.from,O>f)break;g=p.to,l.push(p),d++}for(;dS.from||S.to==O))l.push(S),d++,g=Math.min(S.to,g);else{g=Math.min(S.from,g);break}}g=Math.min(g,f);let y=!1;if(l.some(S=>S.from==O&&(S.to==g||g==f))&&(y=O==g,!y&&g-O<10)){let S=O-(c+h.value.length);S>0&&(h.next(S),c=O);for(let C=O;;){if(C>=g){y=!0;break}if(!h.lineBreak&&c+h.value.length>C)break;C=c+h.value.length,c+=h.value.length,h.next()}}let x=vy(l);if(y)o.add(O,O,Z.widget({widget:new Ma(x),diagnostics:l.slice()}));else{let S=l.reduce((C,w)=>w.markClass?C+" "+w.markClass:C,"");o.add(O,g,Z.mark({class:"cm-lintRange cm-lintRange-"+x+S,diagnostics:l.slice(),inclusiveEnd:l.some(C=>C.to>g)}))}if(a=g,a==f)break;for(let S=0;S{if(!(e&&o.diagnostics.indexOf(e)<0))if(!i)i=new xr(s,r,e||o.diagnostics[0]);else{if(o.diagnostics.indexOf(i.diagnostic)<0)return!1;i=new xr(i.from,r,i.diagnostic)}}),i}function Oy(n,e){let t=e.pos,i=e.end||t,s=n.state.facet(An).hideOn(n,t,i);if(s!=null)return s;let r=n.startState.doc.lineAt(e.pos);return!!(n.effects.some(o=>o.is(Ed))||n.changes.touchesRange(r.from,Math.max(r.to,i)))}function my(n,e){return n.field(Re,!1)?e:e.concat(A.appendConfig.of($y))}var Ed=A.define(),Ra=A.define(),Dd=A.define(),Re=K.define({create(){return new si(Z.none,null,null)},update(n,e){if(e.docChanged&&n.diagnostics.size){let t=n.diagnostics.map(e.changes),i=null,s=n.panel;if(n.selected){let r=e.changes.mapPos(n.selected.from,1);i=Xt(t,n.selected.diagnostic,r)||Xt(t,null,r)}!t.size&&s&&e.state.facet(An).autoPanel&&(s=null),n=new si(t,s,i)}for(let t of e.effects)if(t.is(Ed)){let i=e.state.facet(An).autoPanel?t.value.length?Mn.open:null:n.panel;n=si.init(t.value,i,e.state)}else t.is(Ra)?n=new si(n.diagnostics,t.value?Mn.open:null,n.selected):t.is(Dd)&&(n=new si(n.diagnostics,n.panel,t.value));return n},provide:n=>[jt.from(n,e=>e.panel),v.decorations.from(n,e=>e.diagnostics)]});var gy=Z.mark({class:"cm-lintRange cm-lintRange-active"});function yy(n,e,t){let{diagnostics:i}=n.state.field(Re),s,r=-1,o=-1;i.between(e-(t<0?1:0),e+(t>0?1:0),(a,h,{spec:c})=>{if(e>=a&&e<=h&&(a==h||(e>a||t>0)&&(ezd(n,t,!1)))}var xy=n=>{let e=n.state.field(Re,!1);(!e||!e.panel)&&n.dispatch({effects:my(n.state,[Ra.of(!0)])});let t=hn(n,Mn.open);return t&&t.dom.querySelector(".cm-panel-lint ul").focus(),!0},Xd=n=>{let e=n.state.field(Re,!1);return!e||!e.panel?!1:(n.dispatch({effects:Ra.of(!1)}),!0)},Sy=n=>{let e=n.state.field(Re,!1);if(!e)return!1;let t=n.state.selection.main,i=Xt(e.diagnostics,null,t.to+1);return!i&&(i=Xt(e.diagnostics,null,0),!i||i.from==t.from&&i.to==t.to)?!1:(n.dispatch({selection:{anchor:i.from,head:i.to},scrollIntoView:!0}),!0)};var Wd=[{key:"Mod-Shift-m",run:xy,preventDefault:!0},{key:"F8",run:Sy}];var An=$.define({combine(n){return{sources:n.map(e=>e.source).filter(e=>e!=null),...fe(n.map(e=>e.config),{delay:750,markerFilter:null,tooltipFilter:null,needsRefresh:null,hideOn:()=>null},{delay:Math.max,markerFilter:Ld,tooltipFilter:Ld,needsRefresh:(e,t)=>e?t?i=>e(i)||t(i):e:t,hideOn:(e,t)=>e?t?(i,s,r)=>e(i,s,r)||t(i,s,r):e:t,autoPanel:(e,t)=>e||t})}}});function Ld(n,e){return n?e?(t,i)=>e(n(t,i),i):n:e}function Bd(n){let e=[];if(n)e:for(let{name:t}of n){for(let i=0;ir.toLowerCase()==s.toLowerCase())){e.push(s);continue e}}e.push("")}return e}function zd(n,e,t){var i;let s=t?Bd(e.actions):[];return B("li",{class:"cm-diagnostic cm-diagnostic-"+e.severity},B("span",{class:"cm-diagnosticText"},e.renderMessage?e.renderMessage(n):e.message),(i=e.actions)===null||i===void 0?void 0:i.map((r,o)=>{let l=!1,a=d=>{if(d.preventDefault(),l)return;l=!0;let p=Xt(n.state.field(Re).diagnostics,e);p&&r.apply(n,p.from,p.to)},{name:h}=r,c=s[o]?h.indexOf(s[o]):-1,f=c<0?h:[h.slice(0,c),B("u",h.slice(c,c+1)),h.slice(c+1)],u=r.markClass?" "+r.markClass:"";return B("button",{type:"button",class:"cm-diagnosticAction"+u,onclick:a,onmousedown:a,"aria-label":` Action: ${h}${c<0?"":` (access key "${s[o]})"`}.`},f)}),e.source&&B("div",{class:"cm-diagnosticSource"},e.source))}var Ma=class extends ge{constructor(e){super(),this.sev=e}eq(e){return e.sev==this.sev}toDOM(){return B("span",{class:"cm-lintPoint cm-lintPoint-"+this.sev})}},Sr=class{constructor(e,t){this.diagnostic=t,this.id="item_"+Math.floor(Math.random()*4294967295).toString(16),this.dom=zd(e,t,!0),this.dom.id=this.id,this.dom.setAttribute("role","option")}},Mn=class n{constructor(e){this.view=e,this.items=[];let t=s=>{if(!(s.ctrlKey||s.altKey||s.metaKey)){if(s.keyCode==27)Xd(this.view),this.view.focus();else if(s.keyCode==38||s.keyCode==33)this.moveSelection((this.selectedIndex-1+this.items.length)%this.items.length);else if(s.keyCode==40||s.keyCode==34)this.moveSelection((this.selectedIndex+1)%this.items.length);else if(s.keyCode==36)this.moveSelection(0);else if(s.keyCode==35)this.moveSelection(this.items.length-1);else if(s.keyCode==13)this.view.focus();else if(s.keyCode>=65&&s.keyCode<=90&&this.selectedIndex>=0){let{diagnostic:r}=this.items[this.selectedIndex],o=Bd(r.actions);for(let l=0;l{for(let r=0;rXd(this.view)},"\xD7")),this.update()}get selectedIndex(){let e=this.view.state.field(Re).selected;if(!e)return-1;for(let t=0;t{for(let c of h.diagnostics){if(o.has(c))continue;o.add(c);let f=-1,u;for(let d=i;di&&(this.items.splice(i,f-i),s=!0)),t&&u.diagnostic==t.diagnostic?u.dom.hasAttribute("aria-selected")||(u.dom.setAttribute("aria-selected","true"),r=u):u.dom.hasAttribute("aria-selected")&&u.dom.removeAttribute("aria-selected"),i++}});i({sel:r.dom.getBoundingClientRect(),panel:this.list.getBoundingClientRect()}),write:({sel:l,panel:a})=>{let h=a.height/this.list.offsetHeight;l.topa.bottom&&(this.list.scrollTop+=(l.bottom-a.bottom)/h)}})):this.selectedIndex<0&&this.list.removeAttribute("aria-activedescendant"),s&&this.sync()}sync(){let e=this.list.firstChild;function t(){let i=e;e=i.nextSibling,i.remove()}for(let i of this.items)if(i.dom.parentNode==this.list){for(;e!=i.dom;)t();e=i.dom.nextSibling}else this.list.insertBefore(i.dom,e);for(;e;)t()}moveSelection(e){if(this.selectedIndex<0)return;let t=this.view.state.field(Re),i=Xt(t.diagnostics,this.items[e].diagnostic);i&&this.view.dispatch({selection:{anchor:i.from,head:i.to},scrollIntoView:!0,effects:Dd.of(i)})}static open(e){return new n(e)}};function wy(n,e='viewBox="0 0 40 40"'){return`url('data:image/svg+xml,${encodeURIComponent(n)}')`}function br(n){return wy(``,'width="6" height="3"')}var ky=v.baseTheme({".cm-diagnostic":{padding:"3px 6px 3px 8px",marginLeft:"-1px",display:"block",whiteSpace:"pre-wrap"},".cm-diagnostic-error":{borderLeft:"5px solid #d11"},".cm-diagnostic-warning":{borderLeft:"5px solid orange"},".cm-diagnostic-info":{borderLeft:"5px solid #999"},".cm-diagnostic-hint":{borderLeft:"5px solid #66d"},".cm-diagnosticAction":{font:"inherit",border:"none",padding:"2px 4px",backgroundColor:"#444",color:"white",borderRadius:"3px",marginLeft:"8px",cursor:"pointer"},".cm-diagnosticSource":{fontSize:"70%",opacity:.7},".cm-lintRange":{backgroundPosition:"left bottom",backgroundRepeat:"repeat-x",paddingBottom:"0.7px"},".cm-lintRange-error":{backgroundImage:br("#d11")},".cm-lintRange-warning":{backgroundImage:br("orange")},".cm-lintRange-info":{backgroundImage:br("#999")},".cm-lintRange-hint":{backgroundImage:br("#66d")},".cm-lintRange-active":{backgroundColor:"#ffdd9980"},".cm-tooltip-lint":{padding:0,margin:0},".cm-lintPoint":{position:"relative","&:after":{content:'""',position:"absolute",bottom:0,left:"-2px",borderLeft:"3px solid transparent",borderRight:"3px solid transparent",borderBottom:"4px solid #d11"}},".cm-lintPoint-warning":{"&:after":{borderBottomColor:"orange"}},".cm-lintPoint-info":{"&:after":{borderBottomColor:"#999"}},".cm-lintPoint-hint":{"&:after":{borderBottomColor:"#66d"}},".cm-panel.cm-panel-lint":{position:"relative","& ul":{maxHeight:"100px",overflowY:"auto","& [aria-selected]":{backgroundColor:"#ddd","& u":{textDecoration:"underline"}},"&:focus [aria-selected]":{background_fallback:"#bdf",backgroundColor:"Highlight",color_fallback:"white",color:"HighlightText"},"& u":{textDecoration:"none"},padding:0,margin:0},"& [name=close]":{position:"absolute",top:"0",right:"2px",background:"inherit",border:"none",font:"inherit",padding:0,margin:0}},"&dark .cm-lintRange-active":{backgroundColor:"#86714a80"},"&dark .cm-panel.cm-panel-lint ul":{"& [aria-selected]":{backgroundColor:"#2e343e"}}});function Qy(n){return n=="error"?4:n=="warning"?3:n=="info"?2:1}function vy(n){let e="hint",t=1;for(let i of n){let s=Qy(i.severity);s>t&&(t=s,e=i.severity)}return e}var $y=[Re,v.decorations.compute([Re],n=>{let{selected:e,panel:t}=n.field(Re);return!e||!t||e.from==e.to?Z.none:Z.set([gy.range(e.from,e.to)])}),nf(yy,{hideOn:Oy}),ky];var _d=[hf(),cf(),Kc(),ju(),Hf(),Gc(),Hc(),Y.allowMultipleSelections.of(!0),If(),Gs(Jf,{fallback:!0}),nu(),yu(),ku(),ef(),tf(),Jc(),Td(),Qt.of([...Su,...wd,...Rd,...Fu,...Gf,...pa,...Wd])];var wr="#FAFAF7",yt="#0A0A0A",gt="#E63946",Xa="rgba(10, 10, 10, 0.12)",qd="rgba(10, 10, 10, 0.55)",Py="rgba(230, 57, 70, 0.18)",Ty=v.theme({"&":{color:yt,backgroundColor:wr,height:"100%"},".cm-content":{caretColor:gt,fontFamily:'ui-monospace, "JetBrains Mono", "IBM Plex Mono", Menlo, Consolas, monospace'},".cm-cursor, .cm-dropCursor":{borderLeftColor:gt},"&.cm-focused .cm-selectionBackground, .cm-selectionBackground, ::selection":{backgroundColor:Py},".cm-gutters":{backgroundColor:wr,color:qd,borderRight:`1px solid ${Xa}`},".cm-activeLine":{backgroundColor:"rgba(10, 10, 10, 0.03)"},".cm-activeLineGutter":{backgroundColor:"rgba(10, 10, 10, 0.04)",color:yt},".cm-selectionMatch":{backgroundColor:"rgba(230, 57, 70, 0.12)"},".cm-matchingBracket, .cm-nonmatchingBracket":{backgroundColor:"rgba(230, 57, 70, 0.18)",outline:"none"},".cm-tooltip":{backgroundColor:wr,color:yt,border:`1px solid ${Xa}`},".cm-panels":{backgroundColor:wr,color:yt,borderTop:`1px solid ${Xa}`}},{dark:!1}),Cy=Zi.define([{tag:m.keyword,color:gt,fontWeight:"600"},{tag:[m.name,m.deleted,m.character,m.macroName],color:yt},{tag:[m.propertyName],color:yt},{tag:[m.function(m.variableName),m.labelName],color:yt,fontWeight:"600"},{tag:[m.color,m.constant(m.name),m.standard(m.name)],color:gt},{tag:[m.definition(m.name),m.separator],color:yt},{tag:[m.typeName,m.className,m.number,m.changed,m.annotation,m.modifier,m.self,m.namespace],color:gt},{tag:[m.operator,m.operatorKeyword,m.url,m.escape,m.regexp,m.link,m.special(m.string)],color:gt},{tag:[m.meta,m.comment],color:qd,fontStyle:"italic"},{tag:m.strong,fontWeight:"700"},{tag:m.emphasis,fontStyle:"italic"},{tag:m.strikethrough,textDecoration:"line-through"},{tag:m.link,color:gt,textDecoration:"underline"},{tag:m.heading,fontWeight:"700",color:yt},{tag:[m.atom,m.bool,m.special(m.variableName)],color:gt},{tag:[m.processingInstruction,m.string,m.inserted],color:"#1f6feb"},{tag:m.invalid,color:gt,textDecoration:"underline"}]),Zy=[Ty,Gs(Cy)],Id="sketch.js",Ay=200,My=5e3,Yd=1;function Ea(n){return`ga.studio.${n}`}function Ry(n){try{let e=localStorage.getItem(Ea(n));return e?JSON.parse(e):null}catch{return null}}function Xy(n,e){try{localStorage.setItem(Ea(n),JSON.stringify(e))}catch{}}function Vd(n){try{localStorage.removeItem(Ea(n))}catch{}}async function kr(n,e){let t=await fetch(n,{credentials:"include",...e});if(!t.ok){let i="";try{i=await t.json()}catch{}let s=typeof i=="object"&&i&&"error"in i?i.error:t.statusText,r=new Error(`${t.status}: ${s}`);throw r.status=t.status,r.detail=i,r}return await t.json()}function Xe(n,e={}){let t=document.getElementById("ga-studio-toast");t&&(t.textContent=n,t.dataset.tone=e.tone||"info",t.dataset.show="1",setTimeout(()=>{t.dataset.show="0"},e.ms??2200))}function et(n,e){let t=document.getElementById("ga-studio-status");t&&(t.dataset.state=n,t.textContent=e??{idle:"Idle",dirty:"Unsaved",saving:"Saving\u2026",saved:"Saved",error:"Error"}[n])}var La=class{constructor(e){De(this,"cfg");De(this,"view",null);De(this,"previewIframe",null);De(this,"previewReady",!1);De(this,"currentSha","");De(this,"originalContent","");De(this,"dirty",!1);De(this,"debounceTimer",null);De(this,"autosaveTimer",null);De(this,"exportRequests",new Map);De(this,"project",null);this.cfg=e}async start(){if(!this.cfg.projectId){Xe("Missing ?project=ID in the URL.",{tone:"error",ms:5e3});return}let e=null;try{e=await kr(`${this.cfg.apiBase}/v1/me`)}catch(r){if(r.status===401){this.cfg.onUnauthenticated?.();return}Xe("Failed to verify your session.",{tone:"error",ms:4e3});return}if(!e){this.cfg.onUnauthenticated?.();return}let t;try{t=await kr(`${this.cfg.apiBase}/v1/projects/${this.cfg.projectId}/file?path=${encodeURIComponent(Id)}`)}catch(r){Xe("Failed to load sketch: "+r.message,{tone:"error",ms:5e3});return}this.project=t.project,this.originalContent=t.file.content,this.currentSha=t.file.sha,this.renderHeader();let i=this.originalContent,s=Ry(this.cfg.projectId);if(s&&s.code!==this.originalContent){let r=s.remoteSha&&s.remoteSha!==this.currentSha;i=await this.promptRestore(s,this.originalContent,r)}this.mountEditor(i),this.mountPreviewBridge(),this.bindToolbar(),this.startAutosave(),this.startWindowGuards(),this.scheduleReload(i)}renderHeader(){if(!this.project)return;let e=document.getElementById("ga-studio-title"),t=document.getElementById("ga-studio-meta"),i=document.getElementById("ga-studio-repo");e&&(e.textContent=this.project.title),t&&(t.textContent=`${this.project.engine} \xB7 ${this.project.repo_full}`),i&&this.project.repo_url&&(i.href=this.project.repo_url,i.hidden=!1),document.title=`${this.project.title} \u2014 Studio`,et("idle","Loaded")}async promptRestore(e,t,i){return new Promise(s=>{let r=document.getElementById("ga-studio-restore"),o=document.getElementById("ga-studio-restore-yes"),l=document.getElementById("ga-studio-restore-no");if(!r||!o||!l){s(t);return}let a=r.querySelector("span");a&&(a.textContent=i?"The remote sketch was updated elsewhere AND you have an unsaved local copy.":"An unsaved local copy is newer than the remote."),r.classList.remove("d-none");let h=()=>{r.classList.add("d-none"),o.removeEventListener("click",c),l.removeEventListener("click",f)},c=()=>{h(),this.dirty=!0,et("dirty"),s(e.code)},f=()=>{h(),Vd(this.cfg.projectId),s(t)};o.addEventListener("click",c),l.addEventListener("click",f)})}mountEditor(e){let t=document.getElementById("ga-studio-editor");if(!t)return;let i=new fi,s=v.updateListener.of(l=>{l.docChanged&&(this.dirty=this.view.state.doc.toString()!==this.originalContent,et(this.dirty?"dirty":"idle"),this.scheduleReload())}),r=xe.highest(Qt.of([{key:"Mod-s",preventDefault:!0,run:()=>(this.commit(),!0)},{key:"Mod-e",preventDefault:!0,run:()=>(this.exportPng(),!0)}])),o=Y.create({doc:e,extensions:[_d,Xu(),Zy,v.lineWrapping,i.of(v.editable.of(!0)),r,s]});this.view=new v({state:o,parent:t})}mountPreviewBridge(){this.previewIframe=document.getElementById("ga-studio-preview"),window.addEventListener("message",e=>{if(!this.previewIframe||e.source!==this.previewIframe.contentWindow)return;let t=e.data||{};if(t.type==="studio:ready")this.previewReady=!0,this.scheduleReload();else if(t.type==="studio:png"){let i=this.exportRequests.get(t.requestId);i&&(this.exportRequests.delete(t.requestId),t.error?i(new Error(t.error)):i(t.data_url))}else t.type==="studio:error"&&console.warn("[studio preview]",t.message)})}bindToolbar(){document.getElementById("ga-studio-save")?.addEventListener("click",()=>{this.commit()}),document.getElementById("ga-studio-export")?.addEventListener("click",()=>{this.exportPng()})}scheduleReload(e){this.debounceTimer&&clearTimeout(this.debounceTimer),this.debounceTimer=setTimeout(()=>{this.debounceTimer=null,this.pushPreview(e)},Ay)}pushPreview(e){if(!this.previewIframe||!this.previewIframe.contentWindow||!this.previewReady)return;let t=e??this.view?.state.doc.toString()??"";this.previewIframe.contentWindow.postMessage({type:"studio:setSrc",code:t,seed:Yd},"*")}startAutosave(){let e=()=>{if(!this.view)return;let t=this.view.state.doc.toString();t!==this.originalContent&&Xy(this.cfg.projectId,{code:t,remoteSha:this.currentSha,saved_at:Date.now()})};this.autosaveTimer=setInterval(e,My),document.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&e()}),window.addEventListener("blur",e)}startWindowGuards(){window.addEventListener("beforeunload",e=>{this.dirty&&(e.preventDefault(),e.returnValue="")})}async commit(){if(!this.view||!this.project)return;let e=this.view.state.doc.toString();if(!this.dirty&&e===this.originalContent){Xe("Nothing to commit.",{tone:"info",ms:1400});return}et("saving");try{let t=await kr(`${this.cfg.apiBase}/v1/projects/${this.project.id}/commit`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:Id,content:e,sha:this.currentSha||void 0})});this.currentSha=t.commit.content_sha,this.originalContent=e,this.dirty=!1,Vd(this.cfg.projectId),et("saved",`Saved \xB7 ${t.commit.commit_sha.slice(0,7)}`),Xe("Committed "+t.commit.commit_sha.slice(0,7),{tone:"success"})}catch(t){et("error","Save failed");let i=t.status;i===409?Xe("Conflict \u2014 refresh to pull the newer remote.",{tone:"error",ms:4e3}):i===401?this.cfg.onUnauthenticated?.():Xe("Save failed: "+t.message,{tone:"error",ms:4e3})}}async exportPng(){if(!this.previewIframe?.contentWindow||!this.previewReady||!this.project){Xe("Preview isn't ready yet.",{tone:"error"});return}let e=`png-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;et("saving","Exporting\u2026");let t=await new Promise((i,s)=>{this.exportRequests.set(e,r=>{r instanceof Error?s(r):i(r)}),this.previewIframe.contentWindow.postMessage({type:"studio:exportPng",requestId:e},"*"),setTimeout(()=>{this.exportRequests.has(e)&&(this.exportRequests.delete(e),s(new Error("export_timeout")))},8e3)}).catch(i=>(Xe("Export failed: "+i.message,{tone:"error",ms:4e3}),et("idle"),null));if(t)try{let i=await kr(`${this.cfg.apiBase}/v1/projects/${this.project.id}/captures`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({data_url:t,seed:String(Yd)})});try{await navigator.clipboard.writeText(i.capture.url),Xe("PNG uploaded \u2014 URL copied.",{tone:"success",ms:3e3})}catch{Xe("PNG uploaded: "+i.capture.url,{tone:"success",ms:4e3})}et(this.dirty?"dirty":"idle")}catch(i){if(i.status===503){let r=document.createElement("a");r.href=t,r.download=`${this.project.slug}-${Date.now()}.png`,r.click(),Xe("Captures bucket not configured \u2014 downloaded locally.",{tone:"info",ms:4e3}),et(this.dirty?"dirty":"idle")}else Xe("Upload failed: "+i.message,{tone:"error",ms:4e3}),et("error","Upload failed")}}},jd={mount(n){za({apiBase:n.apiBase,page:"studio"}),new La(n).start()}};window.GAStudio=jd;var gx=jd;export{gx as default}; +}`,{label:"class",detail:"definition",type:"keyword"}),be('import {${names}} from "${module}"\n${}',{label:"import",detail:"named",type:"keyword"}),be('import ${name} from "${module}"\n${}',{label:"import",detail:"default",type:"keyword"})],v0=Tu.concat([be("interface ${name} {\n ${}\n}",{label:"interface",detail:"definition",type:"keyword"}),be("type ${name} = ${type}",{label:"type",detail:"definition",type:"keyword"}),be("enum ${name} {\n ${}\n}",{label:"enum",detail:"definition",type:"keyword"})]),vu=new Rs,Cu=new Set(["Script","Block","FunctionExpression","FunctionDeclaration","ArrowFunction","MethodDeclaration","ForStatement"]);function vn(n){return(e,t)=>{let i=e.node.getChild("VariableDefinition");return i&&t(i,n),!0}}var $0=["FunctionDeclaration"],P0={FunctionDeclaration:vn("function"),ClassDeclaration:vn("class"),ClassExpression:()=>!0,EnumDeclaration:vn("constant"),TypeAliasDeclaration:vn("type"),NamespaceDeclaration:vn("namespace"),VariableDefinition(n,e){n.matchContext($0)||e(n,"variable")},TypeDefinition(n,e){e(n,"type")},__proto__:null};function Zu(n,e){let t=vu.get(e);if(t)return t;let i=[],s=!0;function r(o,l){let a=n.sliceString(o.from,o.to);i.push({label:a,type:l})}return e.cursor(U.IncludeAnonymous).iterate(o=>{if(s)s=!1;else if(o.name){let l=P0[o.name];if(l&&l(o,r)||Cu.has(o.name))return!1}else if(o.to-o.from>8192){for(let l of Zu(n,o.node))i.push(l);return!1}}),vu.set(e,i),i}var $u=/^[\w$\xa1-\uffff][\w$\d\xa1-\uffff]*$/,Au=["TemplateString","String","RegExp","LineComment","BlockComment","VariableDefinition","TypeDefinition","Label","PropertyDefinition","PropertyName","PrivatePropertyDefinition","PrivatePropertyName","JSXText","JSXAttributeValue","JSXOpenTag","JSXCloseTag","JSXSelfClosingTag",".","?."];function T0(n){let e=ee(n.state).resolveInner(n.pos,-1);if(Au.indexOf(e.name)>-1)return null;let t=e.name=="VariableName"||e.to-e.from<20&&$u.test(n.state.sliceDoc(e.from,e.to));if(!t&&!n.explicit)return null;let i=[];for(let s=e;s;s=s.parent)Cu.has(s.name)&&(i=i.concat(Zu(n.state.doc,s)));return{options:i,from:t?e.from:n.pos,validFor:$u}}var ii=Is.define({name:"javascript",parser:Cf.configure({props:[Nl.add({IfStatement:Gs({except:/^\s*({|else\b)/}),TryStatement:Gs({except:/^\s*({|catch\b|finally\b)/}),LabeledStatement:If,SwitchBody:n=>{let e=n.textAfter,t=/^\s*\}/.test(e),i=/^\s*(case|default)\b/.test(e);return n.baseIndent+(t?0:i?1:2)*n.unit},Block:_f({closing:"}"}),ArrowFunction:n=>n.baseIndent+n.unit,"TemplateString BlockComment":()=>null,"Statement Property":Gs({except:/^\s*{/}),JSXElement(n){let e=/^\s*<\//.test(n.textAfter);return n.lineIndent(n.node.from)+(e?0:n.unit)},JSXEscape(n){let e=/\s*\}/.test(n.textAfter);return n.lineIndent(n.node.from)+(e?0:n.unit)},"JSXOpenTag JSXSelfClosingTag"(n){return n.column(n.node.from)+n.unit}}),Gl.add({"Block ClassBody SwitchBody EnumBody ObjectExpression ArrayExpression ObjectType":qf,BlockComment(n){return{from:n.from+2,to:n.to-2}},JSXElement(n){let e=n.firstChild;if(!e||e.name=="JSXSelfClosingTag")return null;let t=n.lastChild;return{from:e.to,to:t.type.isError?n.to:t.from}},"JSXSelfClosingTag JSXOpenTag"(n){var e;let t=(e=n.firstChild)===null||e===void 0?void 0:e.nextSibling,i=n.lastChild;return!t||t.type.isError?null:{from:t.to,to:i.type.isError?n.to:i.from}}})]}),languageData:{closeBrackets:{brackets:["(","[","{","'",'"',"`"]},commentTokens:{line:"//",block:{open:"/*",close:"*/"}},indentOnInput:/^\s*(?:case |default:|\{|\}|<\/)$/,wordChars:"$"}}),Mu={test:n=>/^JSX/.test(n.name),facet:jl({commentTokens:{block:{open:"{/*",close:"*/}"}}})},C0=ii.configure({dialect:"ts"},"typescript"),Z0=ii.configure({dialect:"jsx",props:[js.add(n=>n.isTop?[Mu]:void 0)]}),A0=ii.configure({dialect:"jsx ts",props:[js.add(n=>n.isTop?[Mu]:void 0)]},"typescript"),Ru=n=>({label:n,type:"keyword"}),Xu="break case const continue default delete export extends false finally in instanceof let new return static super switch this throw true typeof var yield".split(" ").map(Ru),M0=Xu.concat(["declare","implements","private","protected","public"].map(Ru));function Lu(n={}){let e=n.jsx?n.typescript?A0:Z0:n.typescript?C0:ii,t=n.typescript?v0.concat(M0):Tu.concat(Xu);return new Ys(e,[ii.data.of({autocomplete:du(Au,aa(t))}),ii.data.of({autocomplete:T0}),n.jsx?L0:[]])}function R0(n){for(;;){if(n.name=="JSXOpenTag"||n.name=="JSXSelfClosingTag"||n.name=="JSXFragmentTag")return n;if(n.name=="JSXEscape"||!n.parent)return null;n=n.parent}}function Pu(n,e,t=n.length){for(let i=e?.firstChild;i;i=i.nextSibling)if(i.name=="JSXIdentifier"||i.name=="JSXBuiltin"||i.name=="JSXNamespacedName"||i.name=="JSXMemberExpression")return n.sliceString(i.from,Math.min(i.to,t));return""}var X0=typeof navigator=="object"&&/Android\b/.test(navigator.userAgent),L0=v.inputHandler.of((n,e,t,i,s)=>{if((X0?n.composing:n.compositionStarted)||n.state.readOnly||e!=t||i!=">"&&i!="/"||!ii.isActiveAt(n.state,e,-1))return!1;let r=s(),{state:o}=r,l=o.changeByRange(a=>{var h;let{head:c}=a,f=ee(o).resolveInner(c-1,-1),u;if(f.name=="JSXStartTag"&&(f=f.parent),!(o.doc.sliceString(c-1,c)!=i||f.name=="JSXAttributeValue"&&f.to>c)){if(i==">"&&f.name=="JSXFragmentTag")return{range:a,changes:{from:c,insert:""}};if(i=="/"&&f.name=="JSXStartCloseTag"){let d=f.parent,p=d.parent;if(p&&d.from==c-2&&((u=Pu(o.doc,p.firstChild,c))||((h=p.firstChild)===null||h===void 0?void 0:h.name)=="JSXFragmentTag")){let O=`${u}>`;return{range:b.cursor(c+O.length,-1),changes:{from:c,insert:O}}}}else if(i==">"){let d=R0(f);if(d&&d.name=="JSXOpenTag"&&!/^\/?>|^<\//.test(o.doc.sliceString(c,c+2))&&(u=Pu(o.doc,d,c)))return{range:a,changes:{from:c,insert:``}}}}return{range:a}});return l.changes.empty?!1:(n.dispatch([r,o.update(l,{userEvent:"input.complete",scrollIntoView:!0})]),!0)});var E0=n=>{let{state:e}=n,t=e.doc.lineAt(e.selection.main.from),i=wa(n.state,t.from);return i.line?D0(n):i.block?W0(n):!1};function Sa(n,e){return({state:t,dispatch:i})=>{if(t.readOnly)return!1;let s=n(e,t);return s?(i(t.update(s)),!0):!1}}var D0=Sa(I0,0);var B0=Sa(qu,0);var W0=Sa((n,e)=>qu(n,e,z0(e)),0);function wa(n,e){let t=n.languageDataAt("commentTokens",e,1);return t.length?t[0]:{}}var $n=50;function _0(n,{open:e,close:t},i,s){let r=n.sliceDoc(i-$n,i),o=n.sliceDoc(s,s+$n),l=/\s*$/.exec(r)[0].length,a=/^\s*/.exec(o)[0].length,h=r.length-l;if(r.slice(h-e.length,h)==e&&o.slice(a,a+t.length)==t)return{open:{pos:i-l,margin:l&&1},close:{pos:s+a,margin:a&&1}};let c,f;s-i<=2*$n?c=f=n.sliceDoc(i,s):(c=n.sliceDoc(i,i+$n),f=n.sliceDoc(s-$n,s));let u=/^\s*/.exec(c)[0].length,d=/\s*$/.exec(f)[0].length,p=f.length-d-t.length;return c.slice(u,u+e.length)==e&&f.slice(p,p+t.length)==t?{open:{pos:i+u+e.length,margin:/\s/.test(c.charAt(u+e.length))?1:0},close:{pos:s-d-t.length,margin:/\s/.test(f.charAt(p-1))?1:0}}:null}function z0(n){let e=[];for(let t of n.selection.ranges){let i=n.doc.lineAt(t.from),s=t.to<=i.to?i:n.doc.lineAt(t.to);s.from>i.from&&s.from==t.to&&(s=t.to==i.to+1?i:n.doc.lineAt(t.to-1));let r=e.length-1;r>=0&&e[r].to>i.from?e[r].to=s.to:e.push({from:i.from+/^\s*/.exec(i.text)[0].length,to:s.to})}return e}function qu(n,e,t=e.selection.ranges){let i=t.map(r=>wa(e,r.from).block);if(!i.every(r=>r))return null;let s=t.map((r,o)=>_0(e,i[o],r.from,r.to));if(n!=2&&!s.every(r=>r))return{changes:e.changes(t.map((r,o)=>s[o]?[]:[{from:r.from,insert:i[o].open+" "},{from:r.to,insert:" "+i[o].close}]))};if(n!=1&&s.some(r=>r)){let r=[];for(let o=0,l;os&&(r==o||o>f.from)){s=f.from;let u=/^\s*/.exec(f.text)[0].length,d=u==f.length,p=f.text.slice(u,u+h.length)==h?u:-1;ur.comment<0&&(!r.empty||r.single))){let r=[];for(let{line:l,token:a,indent:h,empty:c,single:f}of i)(f||!c)&&r.push({from:l.from+h,insert:a+" "});let o=e.changes(r);return{changes:o,selection:e.selection.map(o,1)}}else if(n!=1&&i.some(r=>r.comment>=0)){let r=[];for(let{line:o,comment:l,token:a}of i)if(l>=0){let h=o.from+l,c=h+a.length;o.text[c-o.from]==" "&&c++,r.push({from:h,to:c})}return{changes:r}}return null}var ga=xe.define(),Y0=xe.define(),q0=$.define(),Vu=$.define({combine(n){return ue(n,{minDepth:100,newGroupDelay:500,joinToEvent:(e,t)=>t},{minDepth:Math.max,newGroupDelay:Math.min,joinToEvent:(e,t)=>(i,s)=>e(i,s)||t(i,s)})}}),ju=K.define({create(){return ni.empty},update(n,e){let t=e.state.facet(Vu),i=e.annotation(ga);if(i){let a=He.fromTransaction(e,i.selection),h=i.side,c=h==0?n.undone:n.done;return a?c=sr(c,c.length,t.minDepth,a):c=Fu(c,e.startState.selection),new ni(h==0?i.rest:c,h==0?c:i.rest)}let s=e.annotation(Y0);if((s=="full"||s=="before")&&(n=n.isolate()),e.annotation(ie.addToHistory)===!1)return e.changes.empty?n:n.addMapping(e.changes.desc);let r=He.fromTransaction(e),o=e.annotation(ie.time),l=e.annotation(ie.userEvent);return r?n=n.addChanges(r,o,l,t,e):e.selection&&(n=n.addSelection(e.startState.selection,o,l,t.newGroupDelay)),(s=="full"||s=="after")&&(n=n.isolate()),n},toJSON(n){return{done:n.done.map(e=>e.toJSON()),undone:n.undone.map(e=>e.toJSON())}},fromJSON(n){return new ni(n.done.map(He.fromJSON),n.undone.map(He.fromJSON))}});function Nu(n={}){return[ju,Vu.of(n),v.domEventHandlers({beforeinput(e,t){let i=e.inputType=="historyUndo"?Gu:e.inputType=="historyRedo"?ya:null;return i?(e.preventDefault(),i(t)):!1}})]}function rr(n,e){return function({state:t,dispatch:i}){if(!e&&t.readOnly)return!1;let s=t.field(ju,!1);if(!s)return!1;let r=s.pop(n,t,e);return r?(i(r),!0):!1}}var Gu=rr(0,!1),ya=rr(1,!1),V0=rr(0,!0),j0=rr(1,!0);var He=class n{constructor(e,t,i,s,r){this.changes=e,this.effects=t,this.mapped=i,this.startSelection=s,this.selectionsAfter=r}setSelAfter(e){return new n(this.changes,this.effects,this.mapped,this.startSelection,e)}toJSON(){var e,t,i;return{changes:(e=this.changes)===null||e===void 0?void 0:e.toJSON(),mapped:(t=this.mapped)===null||t===void 0?void 0:t.toJSON(),startSelection:(i=this.startSelection)===null||i===void 0?void 0:i.toJSON(),selectionsAfter:this.selectionsAfter.map(s=>s.toJSON())}}static fromJSON(e){return new n(e.changes&&me.fromJSON(e.changes),[],e.mapped&&ht.fromJSON(e.mapped),e.startSelection&&b.fromJSON(e.startSelection),e.selectionsAfter.map(b.fromJSON))}static fromTransaction(e,t){let i=qe;for(let s of e.startState.facet(q0)){let r=s(e);r.length&&(i=i.concat(r))}return!i.length&&e.changes.empty?null:new n(e.changes.invert(e.startState.doc),i,void 0,t||e.startState.selection,qe)}static selection(e){return new n(void 0,qe,void 0,void 0,e)}};function sr(n,e,t,i){let s=e+1>t+20?e-t-1:0,r=n.slice(s,e);return r.push(i),r}function N0(n,e){let t=[],i=!1;return n.iterChangedRanges((s,r)=>t.push(s,r)),e.iterChangedRanges((s,r,o,l)=>{for(let a=0;a=h&&o<=c&&(i=!0)}}),i}function G0(n,e){return n.ranges.length==e.ranges.length&&n.ranges.filter((t,i)=>t.empty!=e.ranges[i].empty).length===0}function Uu(n,e){return n.length?e.length?n.concat(e):n:e}var qe=[],U0=200;function Fu(n,e){if(n.length){let t=n[n.length-1],i=t.selectionsAfter.slice(Math.max(0,t.selectionsAfter.length-U0));return i.length&&i[i.length-1].eq(e)?n:(i.push(e),sr(n,n.length-1,1e9,t.setSelAfter(i)))}else return[He.selection([e])]}function F0(n){let e=n[n.length-1],t=n.slice();return t[n.length-1]=e.setSelAfter(e.selectionsAfter.slice(0,e.selectionsAfter.length-1)),t}function ma(n,e){if(!n.length)return n;let t=n.length,i=qe;for(;t;){let s=H0(n[t-1],e,i);if(s.changes&&!s.changes.empty||s.effects.length){let r=n.slice(0,t);return r[t-1]=s,r}else e=s.mapped,t--,i=s.selectionsAfter}return i.length?[He.selection(i)]:qe}function H0(n,e,t){let i=Uu(n.selectionsAfter.length?n.selectionsAfter.map(l=>l.map(e)):qe,t);if(!n.changes)return He.selection(i);let s=n.changes.map(e),r=e.mapDesc(n.changes,!0),o=n.mapped?n.mapped.composeDesc(r):r;return new He(s,A.mapEffects(n.effects,e),o,n.startSelection.map(r),i)}var K0=/^(input\.type|delete)($|\.)/,ni=class n{constructor(e,t,i=0,s=void 0){this.done=e,this.undone=t,this.prevTime=i,this.prevUserEvent=s}isolate(){return this.prevTime?new n(this.done,this.undone):this}addChanges(e,t,i,s,r){let o=this.done,l=o[o.length-1];return l&&l.changes&&!l.changes.empty&&e.changes&&(!i||K0.test(i))&&(!l.selectionsAfter.length&&t-this.prevTime0&&t-this.prevTimet.empty?n.moveByChar(t,e):or(t,e))}function pe(n){return n.textDirectionAt(n.state.selection.main.head)==z.LTR}var Ju=n=>Ku(n,!pe(n)),ed=n=>Ku(n,pe(n));function td(n,e){return Je(n,t=>t.empty?n.moveByGroup(t,e):or(t,e))}var J0=n=>td(n,!pe(n)),e1=n=>td(n,pe(n));var Vb=typeof Intl<"u"&&Intl.Segmenter?new Intl.Segmenter(void 0,{granularity:"word"}):null;function t1(n,e,t){if(e.type.prop(t))return!0;let i=e.to-e.from;return i&&(i>2||/[^\s,.;:]/.test(n.sliceDoc(e.from,e.to)))||e.firstChild}function lr(n,e,t){let i=ee(n).resolveInner(e.head),s=t?R.closedBy:R.openedBy;for(let a=e.head;;){let h=t?i.childAfter(a):i.childBefore(a);if(!h)break;t1(n,h,s)?i=h:a=t?h.to:h.from}let r=i.type.prop(s),o,l;return r&&(o=t?Fe(n,i.from,1):Fe(n,i.to,-1))&&o.matched?l=t?o.end.to:o.end.from:l=t?i.to:i.from,b.cursor(l,t?-1:1)}var i1=n=>Je(n,e=>lr(n.state,e,!pe(n))),n1=n=>Je(n,e=>lr(n.state,e,pe(n)));function id(n,e){return Je(n,t=>{if(!t.empty)return or(t,e);let i=n.moveVertically(t,e);return i.head!=t.head?i:n.moveToLineBoundary(t,e)})}var nd=n=>id(n,!1),sd=n=>id(n,!0);function rd(n){let e=n.scrollDOM.clientHeighto.empty?n.moveVertically(o,e,t.height):or(o,e));if(s.eq(i.selection))return!1;let r;if(t.selfScroll){let o=n.coordsAtPos(i.selection.main.head),l=n.scrollDOM.getBoundingClientRect(),a=l.top+t.marginTop,h=l.bottom-t.marginBottom;o&&o.top>a&&o.bottomod(n,!1),ba=n=>od(n,!0);function At(n,e,t){let i=n.lineBlockAt(e.head),s=n.moveToLineBoundary(e,t);if(s.head==e.head&&s.head!=(t?i.to:i.from)&&(s=n.moveToLineBoundary(e,t,!1)),!t&&s.head==i.from&&i.length){let r=/^\s*/.exec(n.state.sliceDoc(i.from,Math.min(i.from+100,i.to)))[0].length;r&&e.head!=i.from+r&&(s=b.cursor(i.from+r))}return s}var s1=n=>Je(n,e=>At(n,e,!0)),r1=n=>Je(n,e=>At(n,e,!1)),o1=n=>Je(n,e=>At(n,e,!pe(n))),l1=n=>Je(n,e=>At(n,e,pe(n))),a1=n=>Je(n,e=>b.cursor(n.lineBlockAt(e.head).from,1)),h1=n=>Je(n,e=>b.cursor(n.lineBlockAt(e.head).to,-1));function c1(n,e,t){let i=!1,s=Xi(n.selection,r=>{let o=Fe(n,r.head,-1)||Fe(n,r.head,1)||r.head>0&&Fe(n,r.head-1,1)||r.headc1(n,e,!1);function Ve(n,e){let t=Xi(n.state.selection,i=>{let s=e(i);return b.range(i.anchor,s.head,s.goalColumn,s.bidiLevel||void 0,s.assoc)});return t.eq(n.state.selection)?!1:(n.dispatch(Ke(n.state,t)),!0)}function ld(n,e){return Ve(n,t=>n.moveByChar(t,e))}var ad=n=>ld(n,!pe(n)),hd=n=>ld(n,pe(n));function cd(n,e){return Ve(n,t=>n.moveByGroup(t,e))}var u1=n=>cd(n,!pe(n)),d1=n=>cd(n,pe(n));var p1=n=>Ve(n,e=>lr(n.state,e,!pe(n))),O1=n=>Ve(n,e=>lr(n.state,e,pe(n)));function fd(n,e){return Ve(n,t=>n.moveVertically(t,e))}var ud=n=>fd(n,!1),dd=n=>fd(n,!0);function pd(n,e){return Ve(n,t=>n.moveVertically(t,e,rd(n).height))}var Du=n=>pd(n,!1),Bu=n=>pd(n,!0),m1=n=>Ve(n,e=>At(n,e,!0)),g1=n=>Ve(n,e=>At(n,e,!1)),y1=n=>Ve(n,e=>At(n,e,!pe(n))),b1=n=>Ve(n,e=>At(n,e,pe(n))),x1=n=>Ve(n,e=>b.cursor(n.lineBlockAt(e.head).from)),S1=n=>Ve(n,e=>b.cursor(n.lineBlockAt(e.head).to)),Wu=({state:n,dispatch:e})=>(e(Ke(n,{anchor:0})),!0),_u=({state:n,dispatch:e})=>(e(Ke(n,{anchor:n.doc.length})),!0),zu=({state:n,dispatch:e})=>(e(Ke(n,{anchor:n.selection.main.anchor,head:0})),!0),Iu=({state:n,dispatch:e})=>(e(Ke(n,{anchor:n.selection.main.anchor,head:n.doc.length})),!0),w1=({state:n,dispatch:e})=>(e(n.update({selection:{anchor:0,head:n.doc.length},userEvent:"select"})),!0),k1=({state:n,dispatch:e})=>{let t=ar(n).map(({from:i,to:s})=>b.range(i,Math.min(s+1,n.doc.length)));return e(n.update({selection:b.create(t),userEvent:"select"})),!0},Q1=({state:n,dispatch:e})=>{let t=Xi(n.selection,i=>{let s=ee(n),r=s.resolveStack(i.from,1);if(i.empty){let o=s.resolveStack(i.from,-1);o.node.from>=r.node.from&&o.node.to<=r.node.to&&(r=o)}for(let o=r;o;o=o.next){let{node:l}=o;if((l.from=i.to||l.to>i.to&&l.from<=i.from)&&o.next)return b.range(l.to,l.from)}return i});return t.eq(n.selection)?!1:(e(Ke(n,t)),!0)};function Od(n,e){let{state:t}=n,i=t.selection,s=t.selection.ranges.slice();for(let r of t.selection.ranges){let o=t.doc.lineAt(r.head);if(e?o.to0)for(let l=r;;){let a=n.moveVertically(l,e);if(a.heado.to){s.some(h=>h.head==a.head)||s.push(a);break}else{if(a.head==l.head)break;l=a}}}return s.length==i.ranges.length?!1:(n.dispatch(Ke(t,b.create(s,s.length-1))),!0)}var v1=n=>Od(n,!1),$1=n=>Od(n,!0),P1=({state:n,dispatch:e})=>{let t=n.selection,i=null;return t.ranges.length>1?i=b.create([t.main]):t.main.empty||(i=b.create([b.cursor(t.main.head)])),i?(e(Ke(n,i)),!0):!1};function Pn(n,e){if(n.state.readOnly)return!1;let t="delete.selection",{state:i}=n,s=i.changeByRange(r=>{let{from:o,to:l}=r;if(o==l){let a=e(r);ao&&(t="delete.forward",a=nr(n,a,!0)),o=Math.min(o,a),l=Math.max(l,a)}else o=nr(n,o,!1),l=nr(n,l,!0);return o==l?{range:r}:{changes:{from:o,to:l},range:b.cursor(o,os(n)))i.between(e,e,(s,r)=>{se&&(e=t?r:s)});return e}var md=(n,e,t)=>Pn(n,i=>{let s=i.from,{state:r}=n,o=r.doc.lineAt(s),l,a;if(t&&!e&&s>o.from&&smd(n,!1,!0);var gd=n=>md(n,!0,!1),yd=(n,e)=>Pn(n,t=>{let i=t.head,{state:s}=n,r=s.doc.lineAt(i),o=s.charCategorizer(i);for(let l=null;;){if(i==(e?r.to:r.from)){i==t.head&&r.number!=(e?s.doc.lines:1)&&(i+=e?1:-1);break}let a=te(r.text,i-r.from,e)+r.from,h=r.text.slice(Math.min(i,a)-r.from,Math.max(i,a)-r.from),c=o(h);if(l!=null&&c!=l)break;(h!=" "||i!=t.head)&&(l=c),i=a}return i}),bd=n=>yd(n,!1),T1=n=>yd(n,!0);var C1=n=>Pn(n,e=>{let t=n.lineBlockAt(e.head).to;return e.headPn(n,e=>{let t=n.moveToLineBoundary(e,!1).head;return e.head>t?t:Math.max(0,e.head-1)}),A1=n=>Pn(n,e=>{let t=n.moveToLineBoundary(e,!0).head;return e.head{if(n.readOnly)return!1;let t=n.changeByRange(i=>({changes:{from:i.from,to:i.to,insert:E.of(["",""])},range:b.cursor(i.from)}));return e(n.update(t,{scrollIntoView:!0,userEvent:"input"})),!0},R1=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let t=n.changeByRange(i=>{if(!i.empty||i.from==0||i.from==n.doc.length)return{range:i};let s=i.from,r=n.doc.lineAt(s),o=s==r.from?s-1:te(r.text,s-r.from,!1)+r.from,l=s==r.to?s+1:te(r.text,s-r.from,!0)+r.from;return{changes:{from:o,to:l,insert:n.doc.slice(s,l).append(n.doc.slice(o,s))},range:b.cursor(l)}});return t.changes.empty?!1:(e(n.update(t,{scrollIntoView:!0,userEvent:"move.character"})),!0)};function ar(n){let e=[],t=-1;for(let i of n.selection.ranges){let s=n.doc.lineAt(i.from),r=n.doc.lineAt(i.to);if(!i.empty&&i.to==r.from&&(r=n.doc.lineAt(i.to-1)),t>=s.number){let o=e[e.length-1];o.to=r.to,o.ranges.push(i)}else e.push({from:s.from,to:r.to,ranges:[i]});t=r.number+1}return e}function xd(n,e,t){if(n.readOnly)return!1;let i=[],s=[];for(let r of ar(n)){if(t?r.to==n.doc.length:r.from==0)continue;let o=n.doc.lineAt(t?r.to+1:r.from-1),l=o.length+1;if(t){i.push({from:r.to,to:o.to},{from:r.from,insert:o.text+n.lineBreak});for(let a of r.ranges)s.push(b.range(Math.min(n.doc.length,a.anchor+l),Math.min(n.doc.length,a.head+l)))}else{i.push({from:o.from,to:r.from},{from:r.to,insert:n.lineBreak+o.text});for(let a of r.ranges)s.push(b.range(a.anchor-l,a.head-l))}}return i.length?(e(n.update({changes:i,scrollIntoView:!0,selection:b.create(s,n.selection.mainIndex),userEvent:"move.line"})),!0):!1}var X1=({state:n,dispatch:e})=>xd(n,e,!1),L1=({state:n,dispatch:e})=>xd(n,e,!0);function Sd(n,e,t){if(n.readOnly)return!1;let i=[];for(let r of ar(n))t?i.push({from:r.from,insert:n.doc.slice(r.from,r.to)+n.lineBreak}):i.push({from:r.to,insert:n.lineBreak+n.doc.slice(r.from,r.to)});let s=n.changes(i);return e(n.update({changes:s,selection:n.selection.map(s,t?1:-1),scrollIntoView:!0,userEvent:"input.copyline"})),!0}var E1=({state:n,dispatch:e})=>Sd(n,e,!1),D1=({state:n,dispatch:e})=>Sd(n,e,!0),B1=n=>{if(n.state.readOnly)return!1;let{state:e}=n,t=e.changes(ar(e).map(({from:s,to:r})=>(s>0?s--:r{let r;if(n.lineWrapping){let o=n.lineBlockAt(s.head),l=n.coordsAtPos(s.head,s.assoc||1);l&&(r=o.bottom+n.documentTop-l.bottom+n.defaultLineHeight/2)}return n.moveVertically(s,!0,r)}).map(t);return n.dispatch({changes:t,selection:i,scrollIntoView:!0,userEvent:"delete.line"}),!0};function W1(n,e){if(/\(\)|\[\]|\{\}/.test(n.sliceDoc(e-1,e+1)))return{from:e,to:e};let t=ee(n).resolveInner(e),i=t.childBefore(e),s=t.childAfter(e),r;return i&&s&&i.to<=e&&s.from>=e&&(r=i.type.prop(R.closedBy))&&r.indexOf(s.name)>-1&&n.doc.lineAt(i.to).from==n.doc.lineAt(s.from).from&&!/\S/.test(n.sliceDoc(i.to,s.from))?{from:i.to,to:s.from}:null}var Yu=wd(!1),_1=wd(!0);function wd(n){return({state:e,dispatch:t})=>{if(e.readOnly)return!1;let i=e.changeByRange(s=>{let{from:r,to:o}=s,l=e.doc.lineAt(r),a=!n&&r==o&&W1(e,r);n&&(r=o=(o<=l.to?l:e.doc.lineAt(o)).to);let h=new Kt(e,{simulateBreak:r,simulateDoubleBreak:!!a}),c=Ns(h,r);for(c==null&&(c=ct(/^\s*/.exec(e.doc.lineAt(r).text)[0],e.tabSize));ol.from&&r{let s=[];for(let o=i.from;o<=i.to;){let l=n.doc.lineAt(o);l.number>t&&(i.empty||i.to>l.from)&&(e(l,s,i),t=l.number),o=l.to+1}let r=n.changes(s);return{changes:s,range:b.range(r.mapPos(i.anchor,1),r.mapPos(i.head,1))}})}var z1=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let t=Object.create(null),i=new Kt(n,{overrideIndentation:r=>{let o=t[r];return o??-1}}),s=ka(n,(r,o,l)=>{let a=Ns(i,r.from);if(a==null)return;/\S/.test(r.text)||(a=0);let h=/^\s*/.exec(r.text)[0],c=Mi(n,a);(h!=c||l.fromn.readOnly?!1:(e(n.update(ka(n,(t,i)=>{i.push({from:t.from,insert:n.facet(Ai)})}),{userEvent:"input.indent"})),!0),Y1=({state:n,dispatch:e})=>n.readOnly?!1:(e(n.update(ka(n,(t,i)=>{let s=/^\s*/.exec(t.text)[0];if(!s)return;let r=ct(s,n.tabSize),o=0,l=Mi(n,Math.max(0,r-bn(n)));for(;o(n.setTabFocusMode(),!0);var V1=[{key:"Ctrl-b",run:Ju,shift:ad,preventDefault:!0},{key:"Ctrl-f",run:ed,shift:hd},{key:"Ctrl-p",run:nd,shift:ud},{key:"Ctrl-n",run:sd,shift:dd},{key:"Ctrl-a",run:a1,shift:x1},{key:"Ctrl-e",run:h1,shift:S1},{key:"Ctrl-d",run:gd},{key:"Ctrl-h",run:xa},{key:"Ctrl-k",run:C1},{key:"Ctrl-Alt-h",run:bd},{key:"Ctrl-o",run:M1},{key:"Ctrl-t",run:R1},{key:"Ctrl-v",run:ba}],j1=[{key:"ArrowLeft",run:Ju,shift:ad,preventDefault:!0},{key:"Mod-ArrowLeft",mac:"Alt-ArrowLeft",run:J0,shift:u1,preventDefault:!0},{mac:"Cmd-ArrowLeft",run:o1,shift:y1,preventDefault:!0},{key:"ArrowRight",run:ed,shift:hd,preventDefault:!0},{key:"Mod-ArrowRight",mac:"Alt-ArrowRight",run:e1,shift:d1,preventDefault:!0},{mac:"Cmd-ArrowRight",run:l1,shift:b1,preventDefault:!0},{key:"ArrowUp",run:nd,shift:ud,preventDefault:!0},{mac:"Cmd-ArrowUp",run:Wu,shift:zu},{mac:"Ctrl-ArrowUp",run:Eu,shift:Du},{key:"ArrowDown",run:sd,shift:dd,preventDefault:!0},{mac:"Cmd-ArrowDown",run:_u,shift:Iu},{mac:"Ctrl-ArrowDown",run:ba,shift:Bu},{key:"PageUp",run:Eu,shift:Du},{key:"PageDown",run:ba,shift:Bu},{key:"Home",run:r1,shift:g1,preventDefault:!0},{key:"Mod-Home",run:Wu,shift:zu},{key:"End",run:s1,shift:m1,preventDefault:!0},{key:"Mod-End",run:_u,shift:Iu},{key:"Enter",run:Yu,shift:Yu},{key:"Mod-a",run:w1},{key:"Backspace",run:xa,shift:xa,preventDefault:!0},{key:"Delete",run:gd,preventDefault:!0},{key:"Mod-Backspace",mac:"Alt-Backspace",run:bd,preventDefault:!0},{key:"Mod-Delete",mac:"Alt-Delete",run:T1,preventDefault:!0},{mac:"Mod-Backspace",run:Z1,preventDefault:!0},{mac:"Mod-Delete",run:A1,preventDefault:!0}].concat(V1.map(n=>({mac:n.key,run:n.run,shift:n.shift}))),kd=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:i1,shift:p1},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:n1,shift:O1},{key:"Alt-ArrowUp",run:X1},{key:"Shift-Alt-ArrowUp",run:E1},{key:"Alt-ArrowDown",run:L1},{key:"Shift-Alt-ArrowDown",run:D1},{key:"Mod-Alt-ArrowUp",run:v1},{key:"Mod-Alt-ArrowDown",run:$1},{key:"Escape",run:P1},{key:"Mod-Enter",run:_1},{key:"Alt-l",mac:"Ctrl-l",run:k1},{key:"Mod-i",run:Q1,preventDefault:!0},{key:"Mod-[",run:Y1},{key:"Mod-]",run:I1},{key:"Mod-Alt-\\",run:z1},{key:"Shift-Mod-k",run:B1},{key:"Shift-Mod-\\",run:f1},{key:"Mod-/",run:E0},{key:"Alt-A",run:B0},{key:"Ctrl-m",mac:"Shift-Alt-m",run:q1}].concat(j1);var Qd=typeof String.prototype.normalize=="function"?n=>n.normalize("NFKD"):n=>n,Rt=class{constructor(e,t,i=0,s=e.length,r,o){this.test=o,this.value={from:0,to:0,precise:!1},this.done=!1,this.matches=[],this.buffer="",this.bufferPos=0,this.iter=e.iterRange(i,s),this.bufferStart=i,this.normalize=r?l=>r(Qd(l)):Qd,this.query=this.normalize(t)}peek(){if(this.bufferPos==this.buffer.length){if(this.bufferStart+=this.buffer.length,this.iter.next(),this.iter.done)return-1;this.bufferPos=0,this.buffer=this.iter.value}return le(this.buffer,this.bufferPos)}next(){for(;this.matches.length;)this.matches.pop();return this.nextOverlapping()}nextOverlapping(){for(;;){let e=this.peek();if(e<0)return this.done=!0,this;let t=Yi(e),i=this.bufferStart+this.bufferPos;this.bufferPos+=Te(e);let s=this.normalize(t);if(s.length)for(let r=0,o=i,l=!0;;r++){let a=s.charCodeAt(r),h=this.match(a,o,l,this.bufferPos+this.bufferStart,r==s.length-1);if(h)return this.value=h,this;if(r==s.length-1)break;l&&rthis.to&&(this.curLine=this.curLine.slice(0,this.to-this.curLineStart)),this.iter.next())}nextLine(){this.curLineStart=this.curLineStart+this.curLine.length+1,this.curLineStart>this.to?this.curLine="":this.getLine(0)}next(){for(let e=this.matchPos-this.curLineStart;;){this.re.lastIndex=e;let t=this.matchPos<=this.to&&this.re.exec(this.curLine);if(t){let i=this.curLineStart+t.index,s=i+t[0].length;if(this.matchPos=pr(this.text,s+(i==s?1:0)),i==this.curLineStart+this.curLine.length&&this.nextLine(),(ithis.value.to)&&(!this.test||this.test(i,s,t)))return this.value={from:i,to:s,precise:!0,match:t},this;e=this.matchPos-this.curLineStart}else if(this.curLineStart+this.curLine.length=i||s.to<=t){let l=new n(t,e.sliceString(t,i));return Qa.set(e,l),l}if(s.from==t&&s.to==i)return s;let{text:r,from:o}=s;return o>t&&(r=e.sliceString(t,o)+r,o=t),s.to=this.to?this.to:this.text.lineAt(e).to}next(){for(;;){let e=this.re.lastIndex=this.matchPos-this.flat.from,t=this.re.exec(this.flat.text);if(t&&!t[0]&&t.index==e&&(this.re.lastIndex=e+1,t=this.re.exec(this.flat.text)),t){let i=this.flat.from+t.index,s=i+t[0].length;if((this.flat.to>=this.to||t.index+t[0].length<=this.flat.text.length-10)&&(!this.test||this.test(i,s,t)))return this.value={from:i,to:s,precise:!0,match:t},this.matchPos=pr(this.text,s+(i==s?1:0)),this}if(this.flat.to==this.to)return this.done=!0,this;this.flat=ur.get(this.text,this.flat.from,this.chunkEnd(this.flat.from+this.flat.text.length*2))}}};typeof Symbol<"u"&&(fr.prototype[Symbol.iterator]=dr.prototype[Symbol.iterator]=function(){return this});function N1(n){try{return new RegExp(n,Ca),!0}catch{return!1}}function pr(n,e){if(e>=n.length)return e;let t=n.lineAt(e),i;for(;e=56320&&i<57344;)e++;return e}var G1=n=>{let{state:e}=n,t=String(e.doc.lineAt(n.state.selection.main.head).number),{close:i,result:s}=of(n,{label:e.phrase("Go to line"),input:{type:"text",name:"line",value:t},focus:!0,submitLabel:e.phrase("go")});return s.then(r=>{let o=r&&/^([+-])?(\d+)?(:\d+)?(%)?$/.exec(r.elements.line.value);if(!o){n.dispatch({effects:i});return}let l=e.doc.lineAt(e.selection.main.head),[,a,h,c,f]=o,u=c?+c.slice(1):0,d=h?+h:l.number;if(h&&f){let g=d/100;a&&(g=g*(a=="-"?-1:1)+l.number/e.doc.lines),d=Math.round(e.doc.lines*g)}else h&&a&&(d=d*(a=="-"?-1:1)+l.number);let p=e.doc.line(Math.max(1,Math.min(e.doc.lines,d))),O=b.cursor(p.from+Math.max(0,Math.min(u,p.length)));n.dispatch({effects:[i,v.scrollIntoView(O.from,{y:"center"})],selection:O})}),!0},U1={highlightWordAroundCursor:!1,minSelectionLength:1,maxMatches:100,wholeWords:!1},Td=$.define({combine(n){return ue(n,U1,{highlightWordAroundCursor:(e,t)=>e||t,minSelectionLength:Math.min,maxMatches:Math.min})}});function Cd(n){let e=[ey,J1];return n&&e.push(Td.of(n)),e}var F1=Z.mark({class:"cm-selectionMatch"}),H1=Z.mark({class:"cm-selectionMatch cm-selectionMatch-main"});function vd(n,e,t,i){return(t==0||n(e.sliceDoc(t-1,t))!=q.Word)&&(i==e.doc.length||n(e.sliceDoc(i,i+1))!=q.Word)}function K1(n,e,t,i){return n(e.sliceDoc(t,t+1))==q.Word&&n(e.sliceDoc(i-1,i))==q.Word}var J1=H.fromClass(class{constructor(n){this.decorations=this.getDeco(n)}update(n){(n.selectionSet||n.docChanged||n.viewportChanged)&&(this.decorations=this.getDeco(n.view))}getDeco(n){let e=n.state.facet(Td),{state:t}=n,i=t.selection;if(i.ranges.length>1)return Z.none;let s=i.main,r,o=null;if(s.empty){if(!e.highlightWordAroundCursor)return Z.none;let a=t.wordAt(s.head);if(!a)return Z.none;o=t.charCategorizer(s.head),r=t.sliceDoc(a.from,a.to)}else{let a=s.to-s.from;if(a200)return Z.none;if(e.wholeWords){if(r=t.sliceDoc(s.from,s.to),o=t.charCategorizer(s.head),!(vd(o,t,s.from,s.to)&&K1(o,t,s.from,s.to)))return Z.none}else if(r=t.sliceDoc(s.from,s.to),!r)return Z.none}let l=[];for(let a of n.visibleRanges){let h=new Rt(t.doc,r,a.from,a.to);for(;!h.next().done;){let{from:c,to:f}=h.value;if((!o||vd(o,t,c,f))&&(s.empty&&c<=s.from&&f>=s.to?l.push(H1.range(c,f)):(c>=s.to||f<=s.from)&&l.push(F1.range(c,f)),l.length>e.maxMatches))return Z.none}}return Z.set(l)}},{decorations:n=>n.decorations}),ey=v.baseTheme({".cm-selectionMatch":{backgroundColor:"#99ff7780"},".cm-searchMatch .cm-selectionMatch":{backgroundColor:"transparent"}}),ty=({state:n,dispatch:e})=>{let{selection:t}=n,i=b.create(t.ranges.map(s=>n.wordAt(s.head)||b.cursor(s.head)),t.mainIndex);return i.eq(t)?!1:(e(n.update({selection:i})),!0)};function iy(n,e){let{main:t,ranges:i}=n.selection,s=n.wordAt(t.head),r=s&&s.from==t.from&&s.to==t.to;for(let o=!1,l=new Rt(n.doc,e,i[i.length-1].to);;)if(l.next(),l.done){if(o)return null;l=new Rt(n.doc,e,0,Math.max(0,i[i.length-1].from-1)),o=!0}else{if(o&&i.some(a=>a.from==l.value.from))continue;if(r){let a=n.wordAt(l.value.from);if(!a||a.from!=l.value.from||a.to!=l.value.to)continue}return l.value}}var ny=({state:n,dispatch:e})=>{let{ranges:t}=n.selection;if(t.some(r=>r.from===r.to))return ty({state:n,dispatch:e});let i=n.sliceDoc(t[0].from,t[0].to);if(n.selection.ranges.some(r=>n.sliceDoc(r.from,r.to)!=i))return!1;let s=iy(n,i);return s?(e(n.update({selection:n.selection.addRange(b.range(s.from,s.to),!1),effects:v.scrollIntoView(s.to)})),!0):!1},Di=$.define({combine(n){return ue(n,{top:!1,caseSensitive:!1,literal:!1,regexp:!1,wholeWord:!1,createPanel:e=>new Ta(e),scrollToMatch:e=>v.scrollIntoView(e)})}});var Or=class{constructor(e){this.search=e.search,this.caseSensitive=!!e.caseSensitive,this.literal=!!e.literal,this.regexp=!!e.regexp,this.replace=e.replace||"",this.valid=!!this.search&&(!this.regexp||N1(this.search)),this.unquoted=this.unquote(this.search),this.wholeWord=!!e.wholeWord,this.test=e.test}unquote(e){return this.literal?e:e.replace(/\\([nrt\\])/g,(t,i)=>i=="n"?` +`:i=="r"?"\r":i=="t"?" ":"\\")}eq(e){return this.search==e.search&&this.replace==e.replace&&this.caseSensitive==e.caseSensitive&&this.regexp==e.regexp&&this.wholeWord==e.wholeWord&&this.test==e.test}create(){return this.regexp?new $a(this):new va(this)}getCursor(e,t=0,i){let s=e.doc?e:Y.create({doc:e});return i==null&&(i=s.doc.length),this.regexp?Ei(this,s,t,i):Li(this,s,t,i)}},mr=class{constructor(e){this.spec=e}};function sy(n,e,t){return(i,s,r,o)=>{if(t&&!t(i,s,r,o))return!1;let l=i>=o&&s<=o+r.length?r.slice(i-o,s-o):e.doc.sliceString(i,s);return n(l,e,i,s)}}function Li(n,e,t,i){let s;return n.wholeWord&&(s=ry(e.doc,e.charCategorizer(e.selection.main.head))),n.test&&(s=sy(n.test,e,s)),new Rt(e.doc,n.unquoted,t,i,n.caseSensitive?void 0:r=>r.toLowerCase(),s)}function ry(n,e){return(t,i,s,r)=>((r>t||r+s.length=t)return null;s.push(i.value)}return s}highlight(e,t,i,s){let r=Li(this.spec,e,Math.max(0,t-this.spec.unquoted.length),Math.min(i+this.spec.unquoted.length,e.doc.length));for(;!r.next().done;)s(r.value.from,r.value.to)}};function oy(n,e,t){return(i,s,r)=>(!t||t(i,s,r))&&n(r[0],e,i,s)}function Ei(n,e,t,i){let s;return n.wholeWord&&(s=ly(e.charCategorizer(e.selection.main.head))),n.test&&(s=oy(n.test,e,s)),new fr(e.doc,n.search,{ignoreCase:!n.caseSensitive,test:s},t,i)}function gr(n,e){return n.slice(te(n,e,!1),e)}function yr(n,e){return n.slice(e,te(n,e))}function ly(n){return(e,t,i)=>!i[0].length||(n(gr(i.input,i.index))!=q.Word||n(yr(i.input,i.index))!=q.Word)&&(n(yr(i.input,i.index+i[0].length))!=q.Word||n(gr(i.input,i.index+i[0].length))!=q.Word)}var $a=class extends mr{nextMatch(e,t,i){let s=Ei(this.spec,e,i,e.doc.length).next();return s.done&&(s=Ei(this.spec,e,0,t).next()),s.done?null:s.value}prevMatchInRange(e,t,i){for(let s=1;;s++){let r=Math.max(t,i-s*1e4),o=Ei(this.spec,e,r,i),l=null;for(;!o.next().done;)l=o.value;if(l&&(r==t||l.from>r+10))return l;if(r==t)return null}}prevMatch(e,t,i){return this.prevMatchInRange(e,0,t)||this.prevMatchInRange(e,i,e.doc.length)}getReplacement(e){return this.spec.unquote(this.spec.replace).replace(/\$([$&]|\d+)/g,(t,i)=>{if(i=="&")return e.match[0];if(i=="$")return"$";for(let s=i.length;s>0;s--){let r=+i.slice(0,s);if(r>0&&r=t)return null;s.push(i.value)}return s}highlight(e,t,i,s){let r=Ei(this.spec,e,Math.max(0,t-250),Math.min(i+250,e.doc.length));for(;!r.next().done;)s(r.value.from,r.value.to)}},Cn=A.define(),Za=A.define(),Mt=K.define({create(n){return new Tn(Pa(n).create(),null)},update(n,e){for(let t of e.effects)t.is(Cn)?n=new Tn(t.value.create(),n.panel):t.is(Za)&&(n=new Tn(n.query,t.value?Aa:null));return n},provide:n=>jt.from(n,e=>e.panel)});var Tn=class{constructor(e,t){this.query=e,this.panel=t}},ay=Z.mark({class:"cm-searchMatch"}),hy=Z.mark({class:"cm-searchMatch cm-searchMatch-selected"}),cy=H.fromClass(class{constructor(n){this.view=n,this.decorations=this.highlight(n.state.field(Mt))}update(n){let e=n.state.field(Mt);(e!=n.startState.field(Mt)||n.docChanged||n.selectionSet||n.viewportChanged)&&(this.decorations=this.highlight(e))}highlight({query:n,panel:e}){if(!e||!n.spec.valid)return Z.none;let{view:t}=this,i=new Pe;for(let s=0,r=t.visibleRanges,o=r.length;sr[s+1].from-500;)a=r[++s].to;n.highlight(t.state,l,a,(h,c)=>{let f=t.state.selection.ranges.some(u=>u.from==h&&u.to==c);i.add(h,c,f?hy:ay)})}return i.finish()}},{decorations:n=>n.decorations});function Zn(n){return e=>{let t=e.state.field(Mt,!1);return t&&t.query.spec.valid?n(e,t):Md(e)}}var br=Zn((n,{query:e})=>{let{to:t}=n.state.selection.main,i=e.nextMatch(n.state,t,t);if(!i)return!1;let s=b.single(i.from,i.to),r=n.state.facet(Di);return n.dispatch({selection:s,effects:[Ma(n,i),r.scrollToMatch(s.main,n)],userEvent:"select.search"}),Ad(n),!0}),xr=Zn((n,{query:e})=>{let{state:t}=n,{from:i}=t.selection.main,s=e.prevMatch(t,i,i);if(!s)return!1;let r=b.single(s.from,s.to),o=n.state.facet(Di);return n.dispatch({selection:r,effects:[Ma(n,s),o.scrollToMatch(r.main,n)],userEvent:"select.search"}),Ad(n),!0}),fy=Zn((n,{query:e})=>{let t=e.matchAll(n.state,1e3);return!t||!t.length?!1:(n.dispatch({selection:b.create(t.map(i=>b.range(i.from,i.to))),userEvent:"select.search.matches"}),!0)}),uy=({state:n,dispatch:e})=>{let t=n.selection;if(t.ranges.length>1||t.main.empty)return!1;let{from:i,to:s}=t.main,r=[],o=0;for(let l=new Rt(n.doc,n.sliceDoc(i,s));!l.next().done;){if(r.length>1e3)return!1;l.value.from==i&&(o=r.length),r.push(b.range(l.value.from,l.value.to))}return e(n.update({selection:b.create(r,o),userEvent:"select.search.matches"})),!0},$d=Zn((n,{query:e})=>{let{state:t}=n,{from:i,to:s}=t.selection.main;if(t.readOnly)return!1;let r=e.nextMatch(t,i,i);if(!r)return!1;let o=r,l=[],a,h,c=[];o.precise?o.from==i&&o.to==s&&(h=t.toText(e.getReplacement(o)),l.push({from:o.from,to:o.to,insert:h}),c.push(v.announce.of(t.phrase("replaced match on line $",t.doc.lineAt(i).number)+"."))):o=e.nextMatch(t,o.from,o.to);let f=n.state.changes(l);return o&&(a=b.single(o.from,o.to).map(f),c.push(Ma(n,o)),c.push(t.facet(Di).scrollToMatch(a.main,n))),n.dispatch({changes:f,selection:a,effects:c,userEvent:"input.replace"}),!0}),dy=Zn((n,{query:e})=>{if(n.state.readOnly)return!1;let t=[];for(let s of e.matchAll(n.state,1e9)){let{from:r,to:o,precise:l}=s;l&&t.push({from:r,to:o,insert:e.getReplacement(s)})}if(!t.length)return!1;let i=n.state.phrase("replaced $ matches",t.length)+".";return n.dispatch({changes:t,effects:v.announce.of(i),userEvent:"input.replace.all"}),!0});function Aa(n){return n.state.facet(Di).createPanel(n)}function Pa(n,e){var t,i,s,r,o;let l=n.selection.main,a=l.empty||l.to>l.from+100?"":n.sliceDoc(l.from,l.to);if(e&&!a)return e;let h=n.facet(Di);return new Or({search:((t=e?.literal)!==null&&t!==void 0?t:h.literal)?a:a.replace(/\n/g,"\\n"),caseSensitive:(i=e?.caseSensitive)!==null&&i!==void 0?i:h.caseSensitive,literal:(s=e?.literal)!==null&&s!==void 0?s:h.literal,regexp:(r=e?.regexp)!==null&&r!==void 0?r:h.regexp,wholeWord:(o=e?.wholeWord)!==null&&o!==void 0?o:h.wholeWord})}function Zd(n){let e=hn(n,Aa);return e&&e.dom.querySelector("[main-field]")}function Ad(n){let e=Zd(n);e&&e==n.root.activeElement&&e.select()}var Md=n=>{let e=n.state.field(Mt,!1);if(e&&e.panel){let t=Zd(n);if(t&&t!=n.root.activeElement){let i=Pa(n.state,e.query.spec);i.valid&&n.dispatch({effects:Cn.of(i)}),t.focus(),t.select()}}else n.dispatch({effects:[Za.of(!0),e?Cn.of(Pa(n.state,e.query.spec)):A.appendConfig.of(Oy)]});return!0},Rd=n=>{let e=n.state.field(Mt,!1);if(!e||!e.panel)return!1;let t=hn(n,Aa);return t&&t.dom.contains(n.root.activeElement)&&n.focus(),n.dispatch({effects:Za.of(!1)}),!0},Xd=[{key:"Mod-f",run:Md,scope:"editor search-panel"},{key:"F3",run:br,shift:xr,scope:"editor search-panel",preventDefault:!0},{key:"Mod-g",run:br,shift:xr,scope:"editor search-panel",preventDefault:!0},{key:"Escape",run:Rd,scope:"editor search-panel"},{key:"Mod-Shift-l",run:uy},{key:"Mod-Alt-g",run:G1},{key:"Mod-d",run:ny,preventDefault:!0}],Ta=class{constructor(e){this.view=e;let t=this.query=e.state.field(Mt).query.spec;this.commit=this.commit.bind(this),this.searchField=W("input",{value:t.search,placeholder:Re(e,"Find"),"aria-label":Re(e,"Find"),class:"cm-textfield",name:"search",form:"","main-field":"true",onchange:this.commit,onkeyup:this.commit}),this.replaceField=W("input",{value:t.replace,placeholder:Re(e,"Replace"),"aria-label":Re(e,"Replace"),class:"cm-textfield",name:"replace",form:"",onchange:this.commit,onkeyup:this.commit}),this.caseField=W("input",{type:"checkbox",name:"case",form:"",checked:t.caseSensitive,onchange:this.commit}),this.reField=W("input",{type:"checkbox",name:"re",form:"",checked:t.regexp,onchange:this.commit}),this.wordField=W("input",{type:"checkbox",name:"word",form:"",checked:t.wholeWord,onchange:this.commit});function i(s,r,o){return W("button",{class:"cm-button",name:s,onclick:r,type:"button"},o)}this.dom=W("div",{onkeydown:s=>this.keydown(s),class:"cm-search"},[this.searchField,i("next",()=>br(e),[Re(e,"next")]),i("prev",()=>xr(e),[Re(e,"previous")]),i("select",()=>fy(e),[Re(e,"all")]),W("label",null,[this.caseField,Re(e,"match case")]),W("label",null,[this.reField,Re(e,"regexp")]),W("label",null,[this.wordField,Re(e,"by word")]),...e.state.readOnly?[]:[W("br"),this.replaceField,i("replace",()=>$d(e),[Re(e,"replace")]),i("replaceAll",()=>dy(e),[Re(e,"replace all")])],W("button",{name:"close",onclick:()=>Rd(e),"aria-label":Re(e,"close"),type:"button"},["\xD7"])])}commit(){let e=new Or({search:this.searchField.value,caseSensitive:this.caseField.checked,regexp:this.reField.checked,wholeWord:this.wordField.checked,replace:this.replaceField.value});e.eq(this.query)||(this.query=e,this.view.dispatch({effects:Cn.of(e)}))}keydown(e){Vc(this.view,e,"search-panel")?e.preventDefault():e.keyCode==13&&e.target==this.searchField?(e.preventDefault(),(e.shiftKey?xr:br)(this.view)):e.keyCode==13&&e.target==this.replaceField&&(e.preventDefault(),$d(this.view))}update(e){for(let t of e.transactions)for(let i of t.effects)i.is(Cn)&&!i.value.eq(this.query)&&this.setQuery(i.value)}setQuery(e){this.query=e,this.searchField.value=e.search,this.replaceField.value=e.replace,this.caseField.checked=e.caseSensitive,this.reField.checked=e.regexp,this.wordField.checked=e.wholeWord}mount(){this.searchField.select()}get pos(){return 80}get top(){return this.view.state.facet(Di).top}};function Re(n,e){return n.state.phrase(e)}var hr=30,cr=/[\s\.,:;?!]/;function Ma(n,{from:e,to:t}){let i=n.state.doc.lineAt(e),s=n.state.doc.lineAt(t).to,r=Math.max(i.from,e-hr),o=Math.min(s,t+hr),l=n.state.sliceDoc(r,o);if(r!=i.from){for(let a=0;al.length-hr;a--)if(!cr.test(l[a-1])&&cr.test(l[a])){l=l.slice(0,a);break}}return v.announce.of(`${n.state.phrase("current match")}. ${l} ${n.state.phrase("on line")} ${i.number}.`)}var py=v.baseTheme({".cm-panel.cm-search":{padding:"2px 6px 4px",position:"relative","& [name=close]":{position:"absolute",top:"0",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",padding:0,margin:0},"& input, & button, & label":{margin:".2em .6em .2em 0"},"& input[type=checkbox]":{marginRight:".2em"},"& label":{fontSize:"80%",whiteSpace:"pre"}},"&light .cm-searchMatch":{backgroundColor:"#ffff0054"},"&dark .cm-searchMatch":{backgroundColor:"#00ffff8a"},"&light .cm-searchMatch-selected":{backgroundColor:"#ff6a0054"},"&dark .cm-searchMatch-selected":{backgroundColor:"#ff00ff8a"}}),Oy=[Mt,Se.low(cy),py];var wr=class{constructor(e,t,i){this.from=e,this.to=t,this.diagnostic=i}},si=class n{constructor(e,t,i){this.diagnostics=e,this.panel=t,this.selected=i}static init(e,t,i){let s=i.facet(An).markerFilter;s&&(e=s(e,i));let r=e.slice().sort((d,p)=>d.from-p.from||d.to-p.to),o=new Pe,l=[],a=0,h=i.doc.iter(),c=0,f=i.doc.length;for(let d=0;;){let p=d==r.length?null:r[d];if(!p&&!l.length)break;let O,g;if(l.length)O=a,g=l.reduce((S,C)=>Math.min(S,C.to),p&&p.from>O?p.from:1e8);else{if(O=p.from,O>f)break;g=p.to,l.push(p),d++}for(;dS.from||S.to==O))l.push(S),d++,g=Math.min(S.to,g);else{g=Math.min(S.from,g);break}}g=Math.min(g,f);let y=!1;if(l.some(S=>S.from==O&&(S.to==g||g==f))&&(y=O==g,!y&&g-O<10)){let S=O-(c+h.value.length);S>0&&(h.next(S),c=O);for(let C=O;;){if(C>=g){y=!0;break}if(!h.lineBreak&&c+h.value.length>C)break;C=c+h.value.length,c+=h.value.length,h.next()}}let x=$y(l);if(y)o.add(O,O,Z.widget({widget:new Ra(x),diagnostics:l.slice()}));else{let S=l.reduce((C,w)=>w.markClass?C+" "+w.markClass:C,"");o.add(O,g,Z.mark({class:"cm-lintRange cm-lintRange-"+x+S,diagnostics:l.slice(),inclusiveEnd:l.some(C=>C.to>g)}))}if(a=g,a==f)break;for(let S=0;S{if(!(e&&o.diagnostics.indexOf(e)<0))if(!i)i=new wr(s,r,e||o.diagnostics[0]);else{if(o.diagnostics.indexOf(i.diagnostic)<0)return!1;i=new wr(i.from,r,i.diagnostic)}}),i}function my(n,e){let t=e.pos,i=e.end||t,s=n.state.facet(An).hideOn(n,t,i);if(s!=null)return s;let r=n.startState.doc.lineAt(e.pos);return!!(n.effects.some(o=>o.is(Dd))||n.changes.touchesRange(r.from,Math.max(r.to,i)))}function gy(n,e){return n.field(Xe,!1)?e:e.concat(A.appendConfig.of(Py))}var Dd=A.define(),Xa=A.define(),Bd=A.define(),Xe=K.define({create(){return new si(Z.none,null,null)},update(n,e){if(e.docChanged&&n.diagnostics.size){let t=n.diagnostics.map(e.changes),i=null,s=n.panel;if(n.selected){let r=e.changes.mapPos(n.selected.from,1);i=Xt(t,n.selected.diagnostic,r)||Xt(t,null,r)}!t.size&&s&&e.state.facet(An).autoPanel&&(s=null),n=new si(t,s,i)}for(let t of e.effects)if(t.is(Dd)){let i=e.state.facet(An).autoPanel?t.value.length?Mn.open:null:n.panel;n=si.init(t.value,i,e.state)}else t.is(Xa)?n=new si(n.diagnostics,t.value?Mn.open:null,n.selected):t.is(Bd)&&(n=new si(n.diagnostics,n.panel,t.value));return n},provide:n=>[jt.from(n,e=>e.panel),v.decorations.from(n,e=>e.diagnostics)]});var yy=Z.mark({class:"cm-lintRange cm-lintRange-active"});function by(n,e,t){let{diagnostics:i}=n.state.field(Xe),s,r=-1,o=-1;i.between(e-(t<0?1:0),e+(t>0?1:0),(a,h,{spec:c})=>{if(e>=a&&e<=h&&(a==h||(e>a||t>0)&&(ezd(n,t,!1)))}var Sy=n=>{let e=n.state.field(Xe,!1);(!e||!e.panel)&&n.dispatch({effects:gy(n.state,[Xa.of(!0)])});let t=hn(n,Mn.open);return t&&t.dom.querySelector(".cm-panel-lint ul").focus(),!0},Ld=n=>{let e=n.state.field(Xe,!1);return!e||!e.panel?!1:(n.dispatch({effects:Xa.of(!1)}),!0)},wy=n=>{let e=n.state.field(Xe,!1);if(!e)return!1;let t=n.state.selection.main,i=Xt(e.diagnostics,null,t.to+1);return!i&&(i=Xt(e.diagnostics,null,0),!i||i.from==t.from&&i.to==t.to)?!1:(n.dispatch({selection:{anchor:i.from,head:i.to},scrollIntoView:!0}),!0)};var Wd=[{key:"Mod-Shift-m",run:Sy,preventDefault:!0},{key:"F8",run:wy}];var An=$.define({combine(n){return{sources:n.map(e=>e.source).filter(e=>e!=null),...ue(n.map(e=>e.config),{delay:750,markerFilter:null,tooltipFilter:null,needsRefresh:null,hideOn:()=>null},{delay:Math.max,markerFilter:Ed,tooltipFilter:Ed,needsRefresh:(e,t)=>e?t?i=>e(i)||t(i):e:t,hideOn:(e,t)=>e?t?(i,s,r)=>e(i,s,r)||t(i,s,r):e:t,autoPanel:(e,t)=>e||t})}}});function Ed(n,e){return n?e?(t,i)=>e(n(t,i),i):n:e}function _d(n){let e=[];if(n)e:for(let{name:t}of n){for(let i=0;ir.toLowerCase()==s.toLowerCase())){e.push(s);continue e}}e.push("")}return e}function zd(n,e,t){var i;let s=t?_d(e.actions):[];return W("li",{class:"cm-diagnostic cm-diagnostic-"+e.severity},W("span",{class:"cm-diagnosticText"},e.renderMessage?e.renderMessage(n):e.message),(i=e.actions)===null||i===void 0?void 0:i.map((r,o)=>{let l=!1,a=d=>{if(d.preventDefault(),l)return;l=!0;let p=Xt(n.state.field(Xe).diagnostics,e);p&&r.apply(n,p.from,p.to)},{name:h}=r,c=s[o]?h.indexOf(s[o]):-1,f=c<0?h:[h.slice(0,c),W("u",h.slice(c,c+1)),h.slice(c+1)],u=r.markClass?" "+r.markClass:"";return W("button",{type:"button",class:"cm-diagnosticAction"+u,onclick:a,onmousedown:a,"aria-label":` Action: ${h}${c<0?"":` (access key "${s[o]})"`}.`},f)}),e.source&&W("div",{class:"cm-diagnosticSource"},e.source))}var Ra=class extends ye{constructor(e){super(),this.sev=e}eq(e){return e.sev==this.sev}toDOM(){return W("span",{class:"cm-lintPoint cm-lintPoint-"+this.sev})}},kr=class{constructor(e,t){this.diagnostic=t,this.id="item_"+Math.floor(Math.random()*4294967295).toString(16),this.dom=zd(e,t,!0),this.dom.id=this.id,this.dom.setAttribute("role","option")}},Mn=class n{constructor(e){this.view=e,this.items=[];let t=s=>{if(!(s.ctrlKey||s.altKey||s.metaKey)){if(s.keyCode==27)Ld(this.view),this.view.focus();else if(s.keyCode==38||s.keyCode==33)this.moveSelection((this.selectedIndex-1+this.items.length)%this.items.length);else if(s.keyCode==40||s.keyCode==34)this.moveSelection((this.selectedIndex+1)%this.items.length);else if(s.keyCode==36)this.moveSelection(0);else if(s.keyCode==35)this.moveSelection(this.items.length-1);else if(s.keyCode==13)this.view.focus();else if(s.keyCode>=65&&s.keyCode<=90&&this.selectedIndex>=0){let{diagnostic:r}=this.items[this.selectedIndex],o=_d(r.actions);for(let l=0;l{for(let r=0;rLd(this.view)},"\xD7")),this.update()}get selectedIndex(){let e=this.view.state.field(Xe).selected;if(!e)return-1;for(let t=0;t{for(let c of h.diagnostics){if(o.has(c))continue;o.add(c);let f=-1,u;for(let d=i;di&&(this.items.splice(i,f-i),s=!0)),t&&u.diagnostic==t.diagnostic?u.dom.hasAttribute("aria-selected")||(u.dom.setAttribute("aria-selected","true"),r=u):u.dom.hasAttribute("aria-selected")&&u.dom.removeAttribute("aria-selected"),i++}});i({sel:r.dom.getBoundingClientRect(),panel:this.list.getBoundingClientRect()}),write:({sel:l,panel:a})=>{let h=a.height/this.list.offsetHeight;l.topa.bottom&&(this.list.scrollTop+=(l.bottom-a.bottom)/h)}})):this.selectedIndex<0&&this.list.removeAttribute("aria-activedescendant"),s&&this.sync()}sync(){let e=this.list.firstChild;function t(){let i=e;e=i.nextSibling,i.remove()}for(let i of this.items)if(i.dom.parentNode==this.list){for(;e!=i.dom;)t();e=i.dom.nextSibling}else this.list.insertBefore(i.dom,e);for(;e;)t()}moveSelection(e){if(this.selectedIndex<0)return;let t=this.view.state.field(Xe),i=Xt(t.diagnostics,this.items[e].diagnostic);i&&this.view.dispatch({selection:{anchor:i.from,head:i.to},scrollIntoView:!0,effects:Bd.of(i)})}static open(e){return new n(e)}};function ky(n,e='viewBox="0 0 40 40"'){return`url('data:image/svg+xml,${encodeURIComponent(n)}')`}function Sr(n){return ky(``,'width="6" height="3"')}var Qy=v.baseTheme({".cm-diagnostic":{padding:"3px 6px 3px 8px",marginLeft:"-1px",display:"block",whiteSpace:"pre-wrap"},".cm-diagnostic-error":{borderLeft:"5px solid #d11"},".cm-diagnostic-warning":{borderLeft:"5px solid orange"},".cm-diagnostic-info":{borderLeft:"5px solid #999"},".cm-diagnostic-hint":{borderLeft:"5px solid #66d"},".cm-diagnosticAction":{font:"inherit",border:"none",padding:"2px 4px",backgroundColor:"#444",color:"white",borderRadius:"3px",marginLeft:"8px",cursor:"pointer"},".cm-diagnosticSource":{fontSize:"70%",opacity:.7},".cm-lintRange":{backgroundPosition:"left bottom",backgroundRepeat:"repeat-x",paddingBottom:"0.7px"},".cm-lintRange-error":{backgroundImage:Sr("#d11")},".cm-lintRange-warning":{backgroundImage:Sr("orange")},".cm-lintRange-info":{backgroundImage:Sr("#999")},".cm-lintRange-hint":{backgroundImage:Sr("#66d")},".cm-lintRange-active":{backgroundColor:"#ffdd9980"},".cm-tooltip-lint":{padding:0,margin:0},".cm-lintPoint":{position:"relative","&:after":{content:'""',position:"absolute",bottom:0,left:"-2px",borderLeft:"3px solid transparent",borderRight:"3px solid transparent",borderBottom:"4px solid #d11"}},".cm-lintPoint-warning":{"&:after":{borderBottomColor:"orange"}},".cm-lintPoint-info":{"&:after":{borderBottomColor:"#999"}},".cm-lintPoint-hint":{"&:after":{borderBottomColor:"#66d"}},".cm-panel.cm-panel-lint":{position:"relative","& ul":{maxHeight:"100px",overflowY:"auto","& [aria-selected]":{backgroundColor:"#ddd","& u":{textDecoration:"underline"}},"&:focus [aria-selected]":{background_fallback:"#bdf",backgroundColor:"Highlight",color_fallback:"white",color:"HighlightText"},"& u":{textDecoration:"none"},padding:0,margin:0},"& [name=close]":{position:"absolute",top:"0",right:"2px",background:"inherit",border:"none",font:"inherit",padding:0,margin:0}},"&dark .cm-lintRange-active":{backgroundColor:"#86714a80"},"&dark .cm-panel.cm-panel-lint ul":{"& [aria-selected]":{backgroundColor:"#2e343e"}}});function vy(n){return n=="error"?4:n=="warning"?3:n=="info"?2:1}function $y(n){let e="hint",t=1;for(let i of n){let s=vy(i.severity);s>t&&(t=s,e=i.severity)}return e}var Py=[Xe,v.decorations.compute([Xe],n=>{let{selected:e,panel:t}=n.field(Xe);return!e||!t||e.from==e.to?Z.none:Z.set([yy.range(e.from,e.to)])}),sf(by,{hideOn:my}),Qy];var Id=[cf(),ff(),Jc(),Nu(),Kf(),Uc(),Kc(),Y.allowMultipleSelections.of(!0),Yf(),Fs(eu,{fallback:!0}),su(),bu(),Qu(),tf(),nf(),ef(),Cd(),Qt.of([...wu,...kd,...Xd,...Hu,...Uf,...Oa,...Wd])];var Qr="#FAFAF7",yt="#0A0A0A",gt="#E63946",La="rgba(10, 10, 10, 0.12)",jd="rgba(10, 10, 10, 0.55)",Ty="rgba(230, 57, 70, 0.18)",Cy=v.theme({"&":{color:yt,backgroundColor:Qr,height:"100%"},".cm-content":{caretColor:gt,fontFamily:'ui-monospace, "JetBrains Mono", "IBM Plex Mono", Menlo, Consolas, monospace'},".cm-cursor, .cm-dropCursor":{borderLeftColor:gt},"&.cm-focused .cm-selectionBackground, .cm-selectionBackground, ::selection":{backgroundColor:Ty},".cm-gutters":{backgroundColor:Qr,color:jd,borderRight:`1px solid ${La}`},".cm-activeLine":{backgroundColor:"rgba(10, 10, 10, 0.03)"},".cm-activeLineGutter":{backgroundColor:"rgba(10, 10, 10, 0.04)",color:yt},".cm-selectionMatch":{backgroundColor:"rgba(230, 57, 70, 0.12)"},".cm-matchingBracket, .cm-nonmatchingBracket":{backgroundColor:"rgba(230, 57, 70, 0.18)",outline:"none"},".cm-tooltip":{backgroundColor:Qr,color:yt,border:`1px solid ${La}`},".cm-panels":{backgroundColor:Qr,color:yt,borderTop:`1px solid ${La}`}},{dark:!1}),Zy=Zi.define([{tag:m.keyword,color:gt,fontWeight:"600"},{tag:[m.name,m.deleted,m.character,m.macroName],color:yt},{tag:[m.propertyName],color:yt},{tag:[m.function(m.variableName),m.labelName],color:yt,fontWeight:"600"},{tag:[m.color,m.constant(m.name),m.standard(m.name)],color:gt},{tag:[m.definition(m.name),m.separator],color:yt},{tag:[m.typeName,m.className,m.number,m.changed,m.annotation,m.modifier,m.self,m.namespace],color:gt},{tag:[m.operator,m.operatorKeyword,m.url,m.escape,m.regexp,m.link,m.special(m.string)],color:gt},{tag:[m.meta,m.comment],color:jd,fontStyle:"italic"},{tag:m.strong,fontWeight:"700"},{tag:m.emphasis,fontStyle:"italic"},{tag:m.strikethrough,textDecoration:"line-through"},{tag:m.link,color:gt,textDecoration:"underline"},{tag:m.heading,fontWeight:"700",color:yt},{tag:[m.atom,m.bool,m.special(m.variableName)],color:gt},{tag:[m.processingInstruction,m.string,m.inserted],color:"#1f6feb"},{tag:m.invalid,color:gt,textDecoration:"underline"}]),Ay=[Cy,Fs(Zy)],Yd="sketch.js",My=200,Ry=5e3,qd=1;function Da(n){return`ga.studio.${n}`}function Xy(n){try{let e=localStorage.getItem(Da(n));return e?JSON.parse(e):null}catch{return null}}function Ly(n,e){try{localStorage.setItem(Da(n),JSON.stringify(e))}catch{}}function Vd(n){try{localStorage.removeItem(Da(n))}catch{}}function Rn(n){return n.replace(/[&<>"']/g,e=>{switch(e){case"&":return"&";case"<":return"<";case">":return">";case'"':return""";default:return"'"}})}async function Xn(n,e){let t=await fetch(n,{credentials:"include",...e});if(!t.ok){let i="";try{i=await t.json()}catch{}let s=typeof i=="object"&&i&&"error"in i?i.error:t.statusText,r=new Error(`${t.status}: ${s}`);throw r.status=t.status,r.detail=i,r}return await t.json()}function Le(n,e={}){let t=document.getElementById("ga-studio-toast");t&&(t.textContent=n,t.dataset.tone=e.tone||"info",t.dataset.show="1",setTimeout(()=>{t.dataset.show="0"},e.ms??2200))}function et(n,e){let t=document.getElementById("ga-studio-status");t&&(t.dataset.state=n,t.textContent=e??{idle:"Idle",dirty:"Unsaved",saving:"Saving\u2026",saved:"Saved",error:"Error"}[n])}var Ea=class{constructor(e){ce(this,"cfg");ce(this,"view",null);ce(this,"previewIframe",null);ce(this,"previewReady",!1);ce(this,"currentSha","");ce(this,"originalContent","");ce(this,"dirty",!1);ce(this,"debounceTimer",null);ce(this,"autosaveTimer",null);ce(this,"exportRequests",new Map);ce(this,"project",null);ce(this,"copilotMode","generate");ce(this,"pendingSuggestion",null);ce(this,"COPILOT_PRICES",{generate:20,edit:15,explain:5,params:5});ce(this,"COPILOT_PLACEHOLDERS",{generate:"Describe the sketch you want\u2026",edit:'Describe the change \u2014 e.g. "make the background black"\u2026',explain:"(uses your current code \u2014 no input needed)",params:"(uses your current code \u2014 no input needed)"});this.cfg=e}async start(){if(!this.cfg.projectId){Le("Missing ?project=ID in the URL.",{tone:"error",ms:5e3});return}let e=null;try{e=await Xn(`${this.cfg.apiBase}/v1/me`)}catch(r){if(r.status===401){this.cfg.onUnauthenticated?.();return}Le("Failed to verify your session.",{tone:"error",ms:4e3});return}if(!e){this.cfg.onUnauthenticated?.();return}let t;try{t=await Xn(`${this.cfg.apiBase}/v1/projects/${this.cfg.projectId}/file?path=${encodeURIComponent(Yd)}`)}catch(r){Le("Failed to load sketch: "+r.message,{tone:"error",ms:5e3});return}this.project=t.project,this.originalContent=t.file.content,this.currentSha=t.file.sha,this.renderHeader();let i=this.originalContent,s=Xy(this.cfg.projectId);if(s&&s.code!==this.originalContent){let r=s.remoteSha&&s.remoteSha!==this.currentSha;i=await this.promptRestore(s,this.originalContent,r)}this.mountEditor(i),this.mountPreviewBridge(),this.bindToolbar(),this.bindCopilot(),this.startAutosave(),this.startWindowGuards(),this.scheduleReload(i)}renderHeader(){if(!this.project)return;let e=document.getElementById("ga-studio-title"),t=document.getElementById("ga-studio-meta"),i=document.getElementById("ga-studio-repo");e&&(e.textContent=this.project.title),t&&(t.textContent=`${this.project.engine} \xB7 ${this.project.repo_full}`),i&&this.project.repo_url&&(i.href=this.project.repo_url,i.hidden=!1),document.title=`${this.project.title} \u2014 Studio`,et("idle","Loaded")}async promptRestore(e,t,i){return new Promise(s=>{let r=document.getElementById("ga-studio-restore"),o=document.getElementById("ga-studio-restore-yes"),l=document.getElementById("ga-studio-restore-no");if(!r||!o||!l){s(t);return}let a=r.querySelector("span");a&&(a.textContent=i?"The remote sketch was updated elsewhere AND you have an unsaved local copy.":"An unsaved local copy is newer than the remote."),r.classList.remove("d-none");let h=()=>{r.classList.add("d-none"),o.removeEventListener("click",c),l.removeEventListener("click",f)},c=()=>{h(),this.dirty=!0,et("dirty"),s(e.code)},f=()=>{h(),Vd(this.cfg.projectId),s(t)};o.addEventListener("click",c),l.addEventListener("click",f)})}mountEditor(e){let t=document.getElementById("ga-studio-editor");if(!t)return;let i=new fi,s=v.updateListener.of(l=>{l.docChanged&&(this.dirty=this.view.state.doc.toString()!==this.originalContent,et(this.dirty?"dirty":"idle"),this.scheduleReload())}),r=Se.highest(Qt.of([{key:"Mod-s",preventDefault:!0,run:()=>(this.commit(),!0)},{key:"Mod-e",preventDefault:!0,run:()=>(this.exportPng(),!0)}])),o=Y.create({doc:e,extensions:[Id,Lu(),Ay,v.lineWrapping,i.of(v.editable.of(!0)),r,s]});this.view=new v({state:o,parent:t})}mountPreviewBridge(){this.previewIframe=document.getElementById("ga-studio-preview"),window.addEventListener("message",e=>{if(!this.previewIframe||e.source!==this.previewIframe.contentWindow)return;let t=e.data||{};if(t.type==="studio:ready")this.previewReady=!0,this.scheduleReload();else if(t.type==="studio:png"){let i=this.exportRequests.get(t.requestId);i&&(this.exportRequests.delete(t.requestId),t.error?i(new Error(t.error)):i(t.data_url))}else t.type==="studio:error"&&console.warn("[studio preview]",t.message)})}bindToolbar(){document.getElementById("ga-studio-save")?.addEventListener("click",()=>{this.commit()}),document.getElementById("ga-studio-export")?.addEventListener("click",()=>{this.exportPng()})}async refreshCopilotBalance(){let e=document.getElementById("ga-copilot-balance");if(e)try{let t=await Xn(`${this.cfg.apiBase}/v1/tokens/account`);e.textContent=`${t.balance.toLocaleString()} tokens`}catch{e.textContent="\u2014"}}bindCopilot(){let e=document.getElementById("ga-studio-copilot-toggle"),t=document.getElementById("ga-studio-grid");e?.addEventListener("click",()=>{let o=!t?.classList.contains("ga-copilot-open");t?.classList.toggle("ga-copilot-open"),document.getElementById("ga-studio-copilot")?.classList.toggle("d-none",!o),o&&this.refreshCopilotBalance()});let i=document.getElementById("ga-copilot-price"),s=document.getElementById("ga-copilot-input"),r=()=>{if(i&&(i.textContent=`${this.COPILOT_PRICES[this.copilotMode]} tokens`),s){s.placeholder=this.COPILOT_PLACEHOLDERS[this.copilotMode];let o=this.copilotMode==="generate"||this.copilotMode==="edit";s.classList.toggle("d-none",!o)}};r(),document.querySelectorAll(".ga-copilot-mode").forEach(o=>{o.addEventListener("click",()=>{document.querySelectorAll(".ga-copilot-mode").forEach(l=>l.classList.toggle("active",l===o)),this.copilotMode=o.dataset.gaMode||"generate",r()})}),document.getElementById("ga-copilot-run")?.addEventListener("click",()=>{this.runCopilot()})}copilotFeedback(e){let t=document.getElementById("ga-copilot-feedback");t&&(t.textContent=e)}async runCopilot(){let e=document.getElementById("ga-copilot-run"),t=document.getElementById("ga-copilot-result"),i=document.getElementById("ga-copilot-input");if(!t||!this.view)return;let s=this.copilotMode,r=this.view.state.doc.toString(),o=i?.value.trim()||"";if((s==="generate"||s==="edit")&&!o){this.copilotFeedback("Describe what you want first.");return}e&&(e.disabled=!0),this.copilotFeedback("Thinking\u2026"),t.innerHTML="";try{let l,a;s==="generate"?(l="generate",a={prompt:o}):s==="edit"?(l="edit",a={current_code:r,instruction:o}):s==="explain"?(l="explain",a={code:r}):(l="params",a={code:r});let h=await fetch(`${this.cfg.apiBase}/v1/projects/${this.cfg.projectId}/ai/${l}`,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(h.status===402){let f=await h.json().catch(()=>({}));this.copilotFeedback(`Not enough tokens \u2014 need ${f.shortfall??"more"} more. `),t.innerHTML='Buy tokens';return}if(!h.ok){let f=await h.json().catch(()=>({}));this.copilotFeedback(`Failed: ${f.error??h.statusText}`);return}let c=await h.json();if(this.copilotFeedback(`Spent ${c.price_tokens} tokens.`),this.refreshCopilotBalance(),s==="generate"||s==="edit")this.pendingSuggestion=c.result,t.innerHTML=` +
      ${Rn(this.pendingSuggestion)}
      +
      + + +
      `,t.querySelector("#ga-copilot-accept")?.addEventListener("click",()=>this.acceptSuggestion()),t.querySelector("#ga-copilot-reject")?.addEventListener("click",()=>{this.pendingSuggestion=null,t.innerHTML=""});else if(s==="explain")t.innerHTML=`

      ${Rn(String(c.result))}

      `;else{let f=c.result;t.innerHTML=f.length?`
        ${f.map(u=>`
      • ${Rn(u.name)} (${Rn(u.kind)}, default ${Rn(String(u.default))})
      • `).join("")}
      `:'

      Nothing tunable found.

      '}}catch(l){this.copilotFeedback(`Failed: ${l.message}`)}finally{e&&(e.disabled=!1)}}acceptSuggestion(){!this.view||this.pendingSuggestion===null||(this.view.dispatch({changes:{from:0,to:this.view.state.doc.length,insert:this.pendingSuggestion}}),this.pendingSuggestion=null,document.getElementById("ga-copilot-result").innerHTML="",this.copilotFeedback("Applied to the editor \u2014 remember to Save."))}scheduleReload(e){this.debounceTimer&&clearTimeout(this.debounceTimer),this.debounceTimer=setTimeout(()=>{this.debounceTimer=null,this.pushPreview(e)},My)}pushPreview(e){if(!this.previewIframe||!this.previewIframe.contentWindow||!this.previewReady)return;let t=e??this.view?.state.doc.toString()??"";this.previewIframe.contentWindow.postMessage({type:"studio:setSrc",code:t,seed:qd},"*")}startAutosave(){let e=()=>{if(!this.view)return;let t=this.view.state.doc.toString();t!==this.originalContent&&Ly(this.cfg.projectId,{code:t,remoteSha:this.currentSha,saved_at:Date.now()})};this.autosaveTimer=setInterval(e,Ry),document.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&e()}),window.addEventListener("blur",e)}startWindowGuards(){window.addEventListener("beforeunload",e=>{this.dirty&&(e.preventDefault(),e.returnValue="")})}async commit(){if(!this.view||!this.project)return;let e=this.view.state.doc.toString();if(!this.dirty&&e===this.originalContent){Le("Nothing to commit.",{tone:"info",ms:1400});return}et("saving");try{let t=await Xn(`${this.cfg.apiBase}/v1/projects/${this.project.id}/commit`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:Yd,content:e,sha:this.currentSha||void 0})});this.currentSha=t.commit.content_sha,this.originalContent=e,this.dirty=!1,Vd(this.cfg.projectId),et("saved",`Saved \xB7 ${t.commit.commit_sha.slice(0,7)}`),Le("Committed "+t.commit.commit_sha.slice(0,7),{tone:"success"})}catch(t){et("error","Save failed");let i=t.status;i===409?Le("Conflict \u2014 refresh to pull the newer remote.",{tone:"error",ms:4e3}):i===401?this.cfg.onUnauthenticated?.():Le("Save failed: "+t.message,{tone:"error",ms:4e3})}}async exportPng(){if(!this.previewIframe?.contentWindow||!this.previewReady||!this.project){Le("Preview isn't ready yet.",{tone:"error"});return}let e=`png-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;et("saving","Exporting\u2026");let t=await new Promise((i,s)=>{this.exportRequests.set(e,r=>{r instanceof Error?s(r):i(r)}),this.previewIframe.contentWindow.postMessage({type:"studio:exportPng",requestId:e},"*"),setTimeout(()=>{this.exportRequests.has(e)&&(this.exportRequests.delete(e),s(new Error("export_timeout")))},8e3)}).catch(i=>(Le("Export failed: "+i.message,{tone:"error",ms:4e3}),et("idle"),null));if(t)try{let i=await Xn(`${this.cfg.apiBase}/v1/projects/${this.project.id}/captures`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({data_url:t,seed:String(qd)})});try{await navigator.clipboard.writeText(i.capture.url),Le("PNG uploaded \u2014 URL copied.",{tone:"success",ms:3e3})}catch{Le("PNG uploaded: "+i.capture.url,{tone:"success",ms:4e3})}et(this.dirty?"dirty":"idle")}catch(i){if(i.status===503){let r=document.createElement("a");r.href=t,r.download=`${this.project.slug}-${Date.now()}.png`,r.click(),Le("Captures bucket not configured \u2014 downloaded locally.",{tone:"info",ms:4e3}),et(this.dirty?"dirty":"idle")}else Le("Upload failed: "+i.message,{tone:"error",ms:4e3}),et("error","Upload failed")}}},Nd={mount(n){za({apiBase:n.apiBase,page:"studio"}),new Ea(n).start()}};window.GAStudio=Nd;var yx=Nd;export{yx as default}; //# sourceMappingURL=ga-studio.js.map diff --git a/assets/js/ga-studio.js.map b/assets/js/ga-studio.js.map index e6b93a4..83ca02d 100644 --- a/assets/js/ga-studio.js.map +++ b/assets/js/ga-studio.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../workers/api/client/lib/clientErrors.ts", "../../workers/api/node_modules/@marijn/find-cluster-break/src/index.js", "../../workers/api/node_modules/@codemirror/state/dist/index.js", "../../workers/api/node_modules/style-mod/src/style-mod.js", "../../workers/api/node_modules/w3c-keyname/index.js", "../../workers/api/node_modules/crelt/index.js", "../../workers/api/node_modules/@codemirror/view/dist/index.js", "../../workers/api/node_modules/@lezer/common/dist/index.js", "../../workers/api/node_modules/@lezer/lr/dist/index.js", "../../workers/api/node_modules/@lezer/highlight/dist/index.js", "../../workers/api/node_modules/@lezer/javascript/dist/index.js", "../../workers/api/node_modules/@codemirror/language/dist/index.js", "../../workers/api/node_modules/@codemirror/autocomplete/dist/index.js", "../../workers/api/node_modules/@codemirror/lang-javascript/dist/index.js", "../../workers/api/node_modules/@codemirror/commands/dist/index.js", "../../workers/api/node_modules/@codemirror/search/dist/index.js", "../../workers/api/node_modules/@codemirror/lint/dist/index.js", "../../workers/api/node_modules/codemirror/dist/index.js", "../../workers/api/client/studio.ts"], - "sourcesContent": ["// Window onerror / unhandledrejection \u2192 POST /v1/internal/client-error.\n// Per-page de-dupe and 10-report cap; the Worker rate-limits per IP\n// and forwards to Sentry via SENTRY_DSN_PUBLIC server-side.\n//\n// Why not @sentry/browser? Bundle size is the deciding factor:\n// @sentry/browser min+gz is ~25KB, which is larger than every\n// per-page bundle this app ships (galleries 18KB, studio 100KB,\n// dashboard 7KB). The proxy pattern below has equivalent delivery\n// (the worker uses ctx.waitUntil for the forward), preserves stack\n// fidelity (we POST the raw `Error.stack` string verbatim), and\n// keeps the public DSN out of the client where it would otherwise\n// be visible to scrapers. The trade-off is that we don't get the\n// SDK's auto-capture of breadcrumbs / fetch/console hooks; for v1\n// observability that's an acceptable gap given the size budget.\n\nconst SEEN = new Set();\nconst MAX_REPORTS_PER_PAGE = 10;\nlet installed = false;\nlet configured: { apiBase: string; page: string } | null = null;\n\nexport interface ClientErrorReporterConfig {\n apiBase: string;\n /** Short page identifier \u2014 \"studio\", \"dashboard\", \"galleries\" etc. */\n page: string;\n}\n\nexport function installClientErrorReporter(cfg: ClientErrorReporterConfig): void {\n if (installed) return;\n installed = true;\n configured = cfg;\n window.addEventListener(\"error\", (ev) => {\n const message =\n (ev.error && ev.error.message) || ev.message || \"unknown_error\";\n const stack =\n (ev.error && ev.error.stack) ||\n `${ev.filename ?? \"\"}:${ev.lineno ?? 0}:${ev.colno ?? 0}`;\n void report(message, stack);\n });\n window.addEventListener(\"unhandledrejection\", (ev) => {\n const reason = (ev as PromiseRejectionEvent).reason;\n const message =\n reason instanceof Error\n ? reason.message\n : typeof reason === \"string\"\n ? reason\n : \"unhandled_rejection\";\n const stack = reason instanceof Error ? reason.stack ?? \"\" : \"\";\n void report(message, stack);\n });\n}\n\n// PII scrub: strip query string and hash from any URL we forward\n// so signed-upload tokens, ?email=, ?invite=, fragment-encoded\n// session bits, etc. never leave the browser. Also caps length.\nfunction scrubUrl(raw: string): string {\n try {\n const u = new URL(raw, location.origin);\n return `${u.origin}${u.pathname}`.slice(0, 200);\n } catch {\n return raw.split(\"?\")[0].split(\"#\")[0].slice(0, 200);\n }\n}\n\nasync function report(message: string, stack: string): Promise {\n if (!configured) return;\n // Per-page de-dupe + cap so a hot-loop error doesn't DoS the\n // /v1/internal/client-error endpoint.\n if (SEEN.size >= MAX_REPORTS_PER_PAGE) return;\n const key = `${message}::${stack.slice(0, 80)}`;\n if (SEEN.has(key)) return;\n SEEN.add(key);\n\n try {\n await fetch(`${configured.apiBase}/v1/internal/client-error`, {\n method: \"POST\",\n credentials: \"include\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n message: String(message).slice(0, 500),\n stack: String(stack).slice(0, 4000),\n page: configured.page,\n url: scrubUrl(location.href),\n ts: Date.now(),\n }),\n keepalive: true,\n });\n } catch {\n // never escalate a reporter failure into another error event\n }\n}\n", "// These are filled with ranges (rangeFrom[i] up to but not including\n// rangeTo[i]) of code points that count as extending characters.\nlet rangeFrom = [], rangeTo = []\n\n;(() => {\n // Compressed representation of the Grapheme_Cluster_Break=Extend\n // information from\n // http://www.unicode.org/Public/16.0.0/ucd/auxiliary/GraphemeBreakProperty.txt.\n // Each pair of elements represents a range, as an offet from the\n // previous range and a length. Numbers are in base-36, with the empty\n // string being a shorthand for 1.\n let numbers = \"lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o\".split(\",\").map(s => s ? parseInt(s, 36) : 1)\n for (let i = 0, n = 0; i < numbers.length; i++)\n (i % 2 ? rangeTo : rangeFrom).push(n = n + numbers[i])\n})()\n\nexport function isExtendingChar(code) {\n if (code < 768) return false\n for (let from = 0, to = rangeFrom.length;;) {\n let mid = (from + to) >> 1\n if (code < rangeFrom[mid]) to = mid\n else if (code >= rangeTo[mid]) from = mid + 1\n else return true\n if (from == to) return false\n }\n}\n\nfunction isRegionalIndicator(code) {\n return code >= 0x1F1E6 && code <= 0x1F1FF\n}\n\nfunction check(code) {\n for (let i = 0; i < rangeFrom.length; i++) {\n if (rangeTo[i] > code) return rangeFrom[i] <= code\n }\n return false\n}\n\nconst ZWJ = 0x200d\n\nexport function findClusterBreak(str, pos, forward = true, includeExtending = true) {\n return (forward ? nextClusterBreak : prevClusterBreak)(str, pos, includeExtending)\n}\n\nfunction nextClusterBreak(str, pos, includeExtending) {\n if (pos == str.length) return pos\n // If pos is in the middle of a surrogate pair, move to its start\n if (pos && surrogateLow(str.charCodeAt(pos)) && surrogateHigh(str.charCodeAt(pos - 1))) pos--\n let prev = codePointAt(str, pos)\n pos += codePointSize(prev)\n while (pos < str.length) {\n let next = codePointAt(str, pos)\n if (prev == ZWJ || next == ZWJ || includeExtending && isExtendingChar(next)) {\n pos += codePointSize(next)\n prev = next\n } else if (isRegionalIndicator(next)) {\n let countBefore = 0, i = pos - 2\n while (i >= 0 && isRegionalIndicator(codePointAt(str, i))) { countBefore++; i -= 2 }\n if (countBefore % 2 == 0) break\n else pos += 2\n } else {\n break\n }\n }\n return pos\n}\n\nfunction prevClusterBreak(str, pos, includeExtending) {\n while (pos > 0) {\n let found = nextClusterBreak(str, pos - 2, includeExtending)\n if (found < pos) return found\n pos--\n }\n return 0\n}\n\nfunction codePointAt(str, pos) {\n let code0 = str.charCodeAt(pos)\n if (!surrogateHigh(code0) || pos + 1 == str.length) return code0\n let code1 = str.charCodeAt(pos + 1)\n if (!surrogateLow(code1)) return code0\n return ((code0 - 0xd800) << 10) + (code1 - 0xdc00) + 0x10000\n}\n\nfunction surrogateLow(ch) { return ch >= 0xDC00 && ch < 0xE000 }\nfunction surrogateHigh(ch) { return ch >= 0xD800 && ch < 0xDC00 }\nfunction codePointSize(code) { return code < 0x10000 ? 1 : 2 }\n", "import { findClusterBreak as findClusterBreak$1 } from '@marijn/find-cluster-break';\n\n/**\nThe data structure for documents. @nonabstract\n*/\nclass Text {\n /**\n Get the line description around the given position.\n */\n lineAt(pos) {\n if (pos < 0 || pos > this.length)\n throw new RangeError(`Invalid position ${pos} in document of length ${this.length}`);\n return this.lineInner(pos, false, 1, 0);\n }\n /**\n Get the description for the given (1-based) line number.\n */\n line(n) {\n if (n < 1 || n > this.lines)\n throw new RangeError(`Invalid line number ${n} in ${this.lines}-line document`);\n return this.lineInner(n, true, 1, 0);\n }\n /**\n Replace a range of the text with the given content.\n */\n replace(from, to, text) {\n [from, to] = clip(this, from, to);\n let parts = [];\n this.decompose(0, from, parts, 2 /* Open.To */);\n if (text.length)\n text.decompose(0, text.length, parts, 1 /* Open.From */ | 2 /* Open.To */);\n this.decompose(to, this.length, parts, 1 /* Open.From */);\n return TextNode.from(parts, this.length - (to - from) + text.length);\n }\n /**\n Append another document to this one.\n */\n append(other) {\n return this.replace(this.length, this.length, other);\n }\n /**\n Retrieve the text between the given points.\n */\n slice(from, to = this.length) {\n [from, to] = clip(this, from, to);\n let parts = [];\n this.decompose(from, to, parts, 0);\n return TextNode.from(parts, to - from);\n }\n /**\n Test whether this text is equal to another instance.\n */\n eq(other) {\n if (other == this)\n return true;\n if (other.length != this.length || other.lines != this.lines)\n return false;\n let start = this.scanIdentical(other, 1), end = this.length - this.scanIdentical(other, -1);\n let a = new RawTextCursor(this), b = new RawTextCursor(other);\n for (let skip = start, pos = start;;) {\n a.next(skip);\n b.next(skip);\n skip = 0;\n if (a.lineBreak != b.lineBreak || a.done != b.done || a.value != b.value)\n return false;\n pos += a.value.length;\n if (a.done || pos >= end)\n return true;\n }\n }\n /**\n Iterate over the text. When `dir` is `-1`, iteration happens\n from end to start. This will return lines and the breaks between\n them as separate strings.\n */\n iter(dir = 1) { return new RawTextCursor(this, dir); }\n /**\n Iterate over a range of the text. When `from` > `to`, the\n iterator will run in reverse.\n */\n iterRange(from, to = this.length) { return new PartialTextCursor(this, from, to); }\n /**\n Return a cursor that iterates over the given range of lines,\n _without_ returning the line breaks between, and yielding empty\n strings for empty lines.\n \n When `from` and `to` are given, they should be 1-based line numbers.\n */\n iterLines(from, to) {\n let inner;\n if (from == null) {\n inner = this.iter();\n }\n else {\n if (to == null)\n to = this.lines + 1;\n let start = this.line(from).from;\n inner = this.iterRange(start, Math.max(start, to == this.lines + 1 ? this.length : to <= 1 ? 0 : this.line(to - 1).to));\n }\n return new LineCursor(inner);\n }\n /**\n Return the document as a string, using newline characters to\n separate lines.\n */\n toString() { return this.sliceString(0); }\n /**\n Convert the document to an array of lines (which can be\n deserialized again via [`Text.of`](https://codemirror.net/6/docs/ref/#state.Text^of)).\n */\n toJSON() {\n let lines = [];\n this.flatten(lines);\n return lines;\n }\n /**\n @internal\n */\n constructor() { }\n /**\n Create a `Text` instance for the given array of lines.\n */\n static of(text) {\n if (text.length == 0)\n throw new RangeError(\"A document must have at least one line\");\n if (text.length == 1 && !text[0])\n return Text.empty;\n return text.length <= 32 /* Tree.Branch */ ? new TextLeaf(text) : TextNode.from(TextLeaf.split(text, []));\n }\n}\n// Leaves store an array of line strings. There are always line breaks\n// between these strings. Leaves are limited in size and have to be\n// contained in TextNode instances for bigger documents.\nclass TextLeaf extends Text {\n constructor(text, length = textLength(text)) {\n super();\n this.text = text;\n this.length = length;\n }\n get lines() { return this.text.length; }\n get children() { return null; }\n lineInner(target, isLine, line, offset) {\n for (let i = 0;; i++) {\n let string = this.text[i], end = offset + string.length;\n if ((isLine ? line : end) >= target)\n return new Line(offset, end, line, string);\n offset = end + 1;\n line++;\n }\n }\n decompose(from, to, target, open) {\n let text = from <= 0 && to >= this.length ? this\n : new TextLeaf(sliceText(this.text, from, to), Math.min(to, this.length) - Math.max(0, from));\n if (open & 1 /* Open.From */) {\n let prev = target.pop();\n let joined = appendText(text.text, prev.text.slice(), 0, text.length);\n if (joined.length <= 32 /* Tree.Branch */) {\n target.push(new TextLeaf(joined, prev.length + text.length));\n }\n else {\n let mid = joined.length >> 1;\n target.push(new TextLeaf(joined.slice(0, mid)), new TextLeaf(joined.slice(mid)));\n }\n }\n else {\n target.push(text);\n }\n }\n replace(from, to, text) {\n if (!(text instanceof TextLeaf))\n return super.replace(from, to, text);\n [from, to] = clip(this, from, to);\n let lines = appendText(this.text, appendText(text.text, sliceText(this.text, 0, from)), to);\n let newLen = this.length + text.length - (to - from);\n if (lines.length <= 32 /* Tree.Branch */)\n return new TextLeaf(lines, newLen);\n return TextNode.from(TextLeaf.split(lines, []), newLen);\n }\n sliceString(from, to = this.length, lineSep = \"\\n\") {\n [from, to] = clip(this, from, to);\n let result = \"\";\n for (let pos = 0, i = 0; pos <= to && i < this.text.length; i++) {\n let line = this.text[i], end = pos + line.length;\n if (pos > from && i)\n result += lineSep;\n if (from < end && to > pos)\n result += line.slice(Math.max(0, from - pos), to - pos);\n pos = end + 1;\n }\n return result;\n }\n flatten(target) {\n for (let line of this.text)\n target.push(line);\n }\n scanIdentical() { return 0; }\n static split(text, target) {\n let part = [], len = -1;\n for (let line of text) {\n part.push(line);\n len += line.length + 1;\n if (part.length == 32 /* Tree.Branch */) {\n target.push(new TextLeaf(part, len));\n part = [];\n len = -1;\n }\n }\n if (len > -1)\n target.push(new TextLeaf(part, len));\n return target;\n }\n}\n// Nodes provide the tree structure of the `Text` type. They store a\n// number of other nodes or leaves, taking care to balance themselves\n// on changes. There are implied line breaks _between_ the children of\n// a node (but not before the first or after the last child).\nclass TextNode extends Text {\n constructor(children, length) {\n super();\n this.children = children;\n this.length = length;\n this.lines = 0;\n for (let child of children)\n this.lines += child.lines;\n }\n lineInner(target, isLine, line, offset) {\n for (let i = 0;; i++) {\n let child = this.children[i], end = offset + child.length, endLine = line + child.lines - 1;\n if ((isLine ? endLine : end) >= target)\n return child.lineInner(target, isLine, line, offset);\n offset = end + 1;\n line = endLine + 1;\n }\n }\n decompose(from, to, target, open) {\n for (let i = 0, pos = 0; pos <= to && i < this.children.length; i++) {\n let child = this.children[i], end = pos + child.length;\n if (from <= end && to >= pos) {\n let childOpen = open & ((pos <= from ? 1 /* Open.From */ : 0) | (end >= to ? 2 /* Open.To */ : 0));\n if (pos >= from && end <= to && !childOpen)\n target.push(child);\n else\n child.decompose(from - pos, to - pos, target, childOpen);\n }\n pos = end + 1;\n }\n }\n replace(from, to, text) {\n [from, to] = clip(this, from, to);\n if (text.lines < this.lines)\n for (let i = 0, pos = 0; i < this.children.length; i++) {\n let child = this.children[i], end = pos + child.length;\n // Fast path: if the change only affects one child and the\n // child's size remains in the acceptable range, only update\n // that child\n if (from >= pos && to <= end) {\n let updated = child.replace(from - pos, to - pos, text);\n let totalLines = this.lines - child.lines + updated.lines;\n if (updated.lines < (totalLines >> (5 /* Tree.BranchShift */ - 1)) &&\n updated.lines > (totalLines >> (5 /* Tree.BranchShift */ + 1))) {\n let copy = this.children.slice();\n copy[i] = updated;\n return new TextNode(copy, this.length - (to - from) + text.length);\n }\n return super.replace(pos, end, updated);\n }\n pos = end + 1;\n }\n return super.replace(from, to, text);\n }\n sliceString(from, to = this.length, lineSep = \"\\n\") {\n [from, to] = clip(this, from, to);\n let result = \"\";\n for (let i = 0, pos = 0; i < this.children.length && pos <= to; i++) {\n let child = this.children[i], end = pos + child.length;\n if (pos > from && i)\n result += lineSep;\n if (from < end && to > pos)\n result += child.sliceString(from - pos, to - pos, lineSep);\n pos = end + 1;\n }\n return result;\n }\n flatten(target) {\n for (let child of this.children)\n child.flatten(target);\n }\n scanIdentical(other, dir) {\n if (!(other instanceof TextNode))\n return 0;\n let length = 0;\n let [iA, iB, eA, eB] = dir > 0 ? [0, 0, this.children.length, other.children.length]\n : [this.children.length - 1, other.children.length - 1, -1, -1];\n for (;; iA += dir, iB += dir) {\n if (iA == eA || iB == eB)\n return length;\n let chA = this.children[iA], chB = other.children[iB];\n if (chA != chB)\n return length + chA.scanIdentical(chB, dir);\n length += chA.length + 1;\n }\n }\n static from(children, length = children.reduce((l, ch) => l + ch.length + 1, -1)) {\n let lines = 0;\n for (let ch of children)\n lines += ch.lines;\n if (lines < 32 /* Tree.Branch */) {\n let flat = [];\n for (let ch of children)\n ch.flatten(flat);\n return new TextLeaf(flat, length);\n }\n let chunk = Math.max(32 /* Tree.Branch */, lines >> 5 /* Tree.BranchShift */), maxChunk = chunk << 1, minChunk = chunk >> 1;\n let chunked = [], currentLines = 0, currentLen = -1, currentChunk = [];\n function add(child) {\n let last;\n if (child.lines > maxChunk && child instanceof TextNode) {\n for (let node of child.children)\n add(node);\n }\n else if (child.lines > minChunk && (currentLines > minChunk || !currentLines)) {\n flush();\n chunked.push(child);\n }\n else if (child instanceof TextLeaf && currentLines &&\n (last = currentChunk[currentChunk.length - 1]) instanceof TextLeaf &&\n child.lines + last.lines <= 32 /* Tree.Branch */) {\n currentLines += child.lines;\n currentLen += child.length + 1;\n currentChunk[currentChunk.length - 1] = new TextLeaf(last.text.concat(child.text), last.length + 1 + child.length);\n }\n else {\n if (currentLines + child.lines > chunk)\n flush();\n currentLines += child.lines;\n currentLen += child.length + 1;\n currentChunk.push(child);\n }\n }\n function flush() {\n if (currentLines == 0)\n return;\n chunked.push(currentChunk.length == 1 ? currentChunk[0] : TextNode.from(currentChunk, currentLen));\n currentLen = -1;\n currentLines = currentChunk.length = 0;\n }\n for (let child of children)\n add(child);\n flush();\n return chunked.length == 1 ? chunked[0] : new TextNode(chunked, length);\n }\n}\nText.empty = /*@__PURE__*/new TextLeaf([\"\"], 0);\nfunction textLength(text) {\n let length = -1;\n for (let line of text)\n length += line.length + 1;\n return length;\n}\nfunction appendText(text, target, from = 0, to = 1e9) {\n for (let pos = 0, i = 0, first = true; i < text.length && pos <= to; i++) {\n let line = text[i], end = pos + line.length;\n if (end >= from) {\n if (end > to)\n line = line.slice(0, to - pos);\n if (pos < from)\n line = line.slice(from - pos);\n if (first) {\n target[target.length - 1] += line;\n first = false;\n }\n else\n target.push(line);\n }\n pos = end + 1;\n }\n return target;\n}\nfunction sliceText(text, from, to) {\n return appendText(text, [\"\"], from, to);\n}\nclass RawTextCursor {\n constructor(text, dir = 1) {\n this.dir = dir;\n this.done = false;\n this.lineBreak = false;\n this.value = \"\";\n this.nodes = [text];\n this.offsets = [dir > 0 ? 1 : (text instanceof TextLeaf ? text.text.length : text.children.length) << 1];\n }\n nextInner(skip, dir) {\n this.done = this.lineBreak = false;\n for (;;) {\n let last = this.nodes.length - 1;\n let top = this.nodes[last], offsetValue = this.offsets[last], offset = offsetValue >> 1;\n let size = top instanceof TextLeaf ? top.text.length : top.children.length;\n if (offset == (dir > 0 ? size : 0)) {\n if (last == 0) {\n this.done = true;\n this.value = \"\";\n return this;\n }\n if (dir > 0)\n this.offsets[last - 1]++;\n this.nodes.pop();\n this.offsets.pop();\n }\n else if ((offsetValue & 1) == (dir > 0 ? 0 : 1)) {\n this.offsets[last] += dir;\n if (skip == 0) {\n this.lineBreak = true;\n this.value = \"\\n\";\n return this;\n }\n skip--;\n }\n else if (top instanceof TextLeaf) {\n // Move to the next string\n let next = top.text[offset + (dir < 0 ? -1 : 0)];\n this.offsets[last] += dir;\n if (next.length > Math.max(0, skip)) {\n this.value = skip == 0 ? next : dir > 0 ? next.slice(skip) : next.slice(0, next.length - skip);\n return this;\n }\n skip -= next.length;\n }\n else {\n let next = top.children[offset + (dir < 0 ? -1 : 0)];\n if (skip > next.length) {\n skip -= next.length;\n this.offsets[last] += dir;\n }\n else {\n if (dir < 0)\n this.offsets[last]--;\n this.nodes.push(next);\n this.offsets.push(dir > 0 ? 1 : (next instanceof TextLeaf ? next.text.length : next.children.length) << 1);\n }\n }\n }\n }\n next(skip = 0) {\n if (skip < 0) {\n this.nextInner(-skip, (-this.dir));\n skip = this.value.length;\n }\n return this.nextInner(skip, this.dir);\n }\n}\nclass PartialTextCursor {\n constructor(text, start, end) {\n this.value = \"\";\n this.done = false;\n this.cursor = new RawTextCursor(text, start > end ? -1 : 1);\n this.pos = start > end ? text.length : 0;\n this.from = Math.min(start, end);\n this.to = Math.max(start, end);\n }\n nextInner(skip, dir) {\n if (dir < 0 ? this.pos <= this.from : this.pos >= this.to) {\n this.value = \"\";\n this.done = true;\n return this;\n }\n skip += Math.max(0, dir < 0 ? this.pos - this.to : this.from - this.pos);\n let limit = dir < 0 ? this.pos - this.from : this.to - this.pos;\n if (skip > limit)\n skip = limit;\n limit -= skip;\n let { value } = this.cursor.next(skip);\n this.pos += (value.length + skip) * dir;\n this.value = value.length <= limit ? value : dir < 0 ? value.slice(value.length - limit) : value.slice(0, limit);\n this.done = !this.value;\n return this;\n }\n next(skip = 0) {\n if (skip < 0)\n skip = Math.max(skip, this.from - this.pos);\n else if (skip > 0)\n skip = Math.min(skip, this.to - this.pos);\n return this.nextInner(skip, this.cursor.dir);\n }\n get lineBreak() { return this.cursor.lineBreak && this.value != \"\"; }\n}\nclass LineCursor {\n constructor(inner) {\n this.inner = inner;\n this.afterBreak = true;\n this.value = \"\";\n this.done = false;\n }\n next(skip = 0) {\n let { done, lineBreak, value } = this.inner.next(skip);\n if (done && this.afterBreak) {\n this.value = \"\";\n this.afterBreak = false;\n }\n else if (done) {\n this.done = true;\n this.value = \"\";\n }\n else if (lineBreak) {\n if (this.afterBreak) {\n this.value = \"\";\n }\n else {\n this.afterBreak = true;\n this.next();\n }\n }\n else {\n this.value = value;\n this.afterBreak = false;\n }\n return this;\n }\n get lineBreak() { return false; }\n}\nif (typeof Symbol != \"undefined\") {\n Text.prototype[Symbol.iterator] = function () { return this.iter(); };\n RawTextCursor.prototype[Symbol.iterator] = PartialTextCursor.prototype[Symbol.iterator] =\n LineCursor.prototype[Symbol.iterator] = function () { return this; };\n}\n/**\nThis type describes a line in the document. It is created\non-demand when lines are [queried](https://codemirror.net/6/docs/ref/#state.Text.lineAt).\n*/\nclass Line {\n /**\n @internal\n */\n constructor(\n /**\n The position of the start of the line.\n */\n from, \n /**\n The position at the end of the line (_before_ the line break,\n or at the end of document for the last line).\n */\n to, \n /**\n This line's line number (1-based).\n */\n number, \n /**\n The line's content.\n */\n text) {\n this.from = from;\n this.to = to;\n this.number = number;\n this.text = text;\n }\n /**\n The length of the line (not including any line break after it).\n */\n get length() { return this.to - this.from; }\n}\nfunction clip(text, from, to) {\n from = Math.max(0, Math.min(text.length, from));\n return [from, Math.max(from, Math.min(text.length, to))];\n}\n\n/**\nReturns a next grapheme cluster break _after_ (not equal to)\n`pos`, if `forward` is true, or before otherwise. Returns `pos`\nitself if no further cluster break is available in the string.\nMoves across surrogate pairs, extending characters (when\n`includeExtending` is true), characters joined with zero-width\njoiners, and flag emoji.\n*/\nfunction findClusterBreak(str, pos, forward = true, includeExtending = true) {\n return findClusterBreak$1(str, pos, forward, includeExtending);\n}\nfunction surrogateLow(ch) { return ch >= 0xDC00 && ch < 0xE000; }\nfunction surrogateHigh(ch) { return ch >= 0xD800 && ch < 0xDC00; }\n/**\nFind the code point at the given position in a string (like the\n[`codePointAt`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/codePointAt)\nstring method).\n*/\nfunction codePointAt(str, pos) {\n let code0 = str.charCodeAt(pos);\n if (!surrogateHigh(code0) || pos + 1 == str.length)\n return code0;\n let code1 = str.charCodeAt(pos + 1);\n if (!surrogateLow(code1))\n return code0;\n return ((code0 - 0xd800) << 10) + (code1 - 0xdc00) + 0x10000;\n}\n/**\nGiven a Unicode codepoint, return the JavaScript string that\nrespresents it (like\n[`String.fromCodePoint`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCodePoint)).\n*/\nfunction fromCodePoint(code) {\n if (code <= 0xffff)\n return String.fromCharCode(code);\n code -= 0x10000;\n return String.fromCharCode((code >> 10) + 0xd800, (code & 1023) + 0xdc00);\n}\n/**\nThe amount of positions a character takes up in a JavaScript string.\n*/\nfunction codePointSize(code) { return code < 0x10000 ? 1 : 2; }\n\nconst DefaultSplit = /\\r\\n?|\\n/;\n/**\nDistinguishes different ways in which positions can be mapped.\n*/\nvar MapMode = /*@__PURE__*/(function (MapMode) {\n /**\n Map a position to a valid new position, even when its context\n was deleted.\n */\n MapMode[MapMode[\"Simple\"] = 0] = \"Simple\";\n /**\n Return null if deletion happens across the position.\n */\n MapMode[MapMode[\"TrackDel\"] = 1] = \"TrackDel\";\n /**\n Return null if the character _before_ the position is deleted.\n */\n MapMode[MapMode[\"TrackBefore\"] = 2] = \"TrackBefore\";\n /**\n Return null if the character _after_ the position is deleted.\n */\n MapMode[MapMode[\"TrackAfter\"] = 3] = \"TrackAfter\";\nreturn MapMode})(MapMode || (MapMode = {}));\n/**\nA change description is a variant of [change set](https://codemirror.net/6/docs/ref/#state.ChangeSet)\nthat doesn't store the inserted text. As such, it can't be\napplied, but is cheaper to store and manipulate.\n*/\nclass ChangeDesc {\n // Sections are encoded as pairs of integers. The first is the\n // length in the current document, and the second is -1 for\n // unaffected sections, and the length of the replacement content\n // otherwise. So an insertion would be (0, n>0), a deletion (n>0,\n // 0), and a replacement two positive numbers.\n /**\n @internal\n */\n constructor(\n /**\n @internal\n */\n sections) {\n this.sections = sections;\n }\n /**\n The length of the document before the change.\n */\n get length() {\n let result = 0;\n for (let i = 0; i < this.sections.length; i += 2)\n result += this.sections[i];\n return result;\n }\n /**\n The length of the document after the change.\n */\n get newLength() {\n let result = 0;\n for (let i = 0; i < this.sections.length; i += 2) {\n let ins = this.sections[i + 1];\n result += ins < 0 ? this.sections[i] : ins;\n }\n return result;\n }\n /**\n False when there are actual changes in this set.\n */\n get empty() { return this.sections.length == 0 || this.sections.length == 2 && this.sections[1] < 0; }\n /**\n Iterate over the unchanged parts left by these changes. `posA`\n provides the position of the range in the old document, `posB`\n the new position in the changed document.\n */\n iterGaps(f) {\n for (let i = 0, posA = 0, posB = 0; i < this.sections.length;) {\n let len = this.sections[i++], ins = this.sections[i++];\n if (ins < 0) {\n f(posA, posB, len);\n posB += len;\n }\n else {\n posB += ins;\n }\n posA += len;\n }\n }\n /**\n Iterate over the ranges changed by these changes. (See\n [`ChangeSet.iterChanges`](https://codemirror.net/6/docs/ref/#state.ChangeSet.iterChanges) for a\n variant that also provides you with the inserted text.)\n `fromA`/`toA` provides the extent of the change in the starting\n document, `fromB`/`toB` the extent of the replacement in the\n changed document.\n \n When `individual` is true, adjacent changes (which are kept\n separate for [position mapping](https://codemirror.net/6/docs/ref/#state.ChangeDesc.mapPos)) are\n reported separately.\n */\n iterChangedRanges(f, individual = false) {\n iterChanges(this, f, individual);\n }\n /**\n Get a description of the inverted form of these changes.\n */\n get invertedDesc() {\n let sections = [];\n for (let i = 0; i < this.sections.length;) {\n let len = this.sections[i++], ins = this.sections[i++];\n if (ins < 0)\n sections.push(len, ins);\n else\n sections.push(ins, len);\n }\n return new ChangeDesc(sections);\n }\n /**\n Compute the combined effect of applying another set of changes\n after this one. The length of the document after this set should\n match the length before `other`.\n */\n composeDesc(other) { return this.empty ? other : other.empty ? this : composeSets(this, other); }\n /**\n Map this description, which should start with the same document\n as `other`, over another set of changes, so that it can be\n applied after it. When `before` is true, map as if the changes\n in `this` happened before the ones in `other`.\n */\n mapDesc(other, before = false) { return other.empty ? this : mapSet(this, other, before); }\n mapPos(pos, assoc = -1, mode = MapMode.Simple) {\n let posA = 0, posB = 0;\n for (let i = 0; i < this.sections.length;) {\n let len = this.sections[i++], ins = this.sections[i++], endA = posA + len;\n if (ins < 0) {\n if (endA > pos)\n return posB + (pos - posA);\n posB += len;\n }\n else {\n if (mode != MapMode.Simple && endA >= pos &&\n (mode == MapMode.TrackDel && posA < pos && endA > pos ||\n mode == MapMode.TrackBefore && posA < pos ||\n mode == MapMode.TrackAfter && endA > pos))\n return null;\n if (endA > pos || endA == pos && assoc < 0 && !len)\n return pos == posA || assoc < 0 ? posB : posB + ins;\n posB += ins;\n }\n posA = endA;\n }\n if (pos > posA)\n throw new RangeError(`Position ${pos} is out of range for changeset of length ${posA}`);\n return posB;\n }\n /**\n Check whether these changes touch a given range. When one of the\n changes entirely covers the range, the string `\"cover\"` is\n returned.\n */\n touchesRange(from, to = from) {\n for (let i = 0, pos = 0; i < this.sections.length && pos <= to;) {\n let len = this.sections[i++], ins = this.sections[i++], end = pos + len;\n if (ins >= 0 && pos <= to && end >= from)\n return pos < from && end > to ? \"cover\" : true;\n pos = end;\n }\n return false;\n }\n /**\n @internal\n */\n toString() {\n let result = \"\";\n for (let i = 0; i < this.sections.length;) {\n let len = this.sections[i++], ins = this.sections[i++];\n result += (result ? \" \" : \"\") + len + (ins >= 0 ? \":\" + ins : \"\");\n }\n return result;\n }\n /**\n Serialize this change desc to a JSON-representable value.\n */\n toJSON() { return this.sections; }\n /**\n Create a change desc from its JSON representation (as produced\n by [`toJSON`](https://codemirror.net/6/docs/ref/#state.ChangeDesc.toJSON).\n */\n static fromJSON(json) {\n if (!Array.isArray(json) || json.length % 2 || json.some(a => typeof a != \"number\"))\n throw new RangeError(\"Invalid JSON representation of ChangeDesc\");\n return new ChangeDesc(json);\n }\n /**\n @internal\n */\n static create(sections) { return new ChangeDesc(sections); }\n}\n/**\nA change set represents a group of modifications to a document. It\nstores the document length, and can only be applied to documents\nwith exactly that length.\n*/\nclass ChangeSet extends ChangeDesc {\n constructor(sections, \n /**\n @internal\n */\n inserted) {\n super(sections);\n this.inserted = inserted;\n }\n /**\n Apply the changes to a document, returning the modified\n document.\n */\n apply(doc) {\n if (this.length != doc.length)\n throw new RangeError(\"Applying change set to a document with the wrong length\");\n iterChanges(this, (fromA, toA, fromB, _toB, text) => doc = doc.replace(fromB, fromB + (toA - fromA), text), false);\n return doc;\n }\n mapDesc(other, before = false) { return mapSet(this, other, before, true); }\n /**\n Given the document as it existed _before_ the changes, return a\n change set that represents the inverse of this set, which could\n be used to go from the document created by the changes back to\n the document as it existed before the changes.\n */\n invert(doc) {\n let sections = this.sections.slice(), inserted = [];\n for (let i = 0, pos = 0; i < sections.length; i += 2) {\n let len = sections[i], ins = sections[i + 1];\n if (ins >= 0) {\n sections[i] = ins;\n sections[i + 1] = len;\n let index = i >> 1;\n while (inserted.length < index)\n inserted.push(Text.empty);\n inserted.push(len ? doc.slice(pos, pos + len) : Text.empty);\n }\n pos += len;\n }\n return new ChangeSet(sections, inserted);\n }\n /**\n Combine two subsequent change sets into a single set. `other`\n must start in the document produced by `this`. If `this` goes\n `docA` \u2192 `docB` and `other` represents `docB` \u2192 `docC`, the\n returned value will represent the change `docA` \u2192 `docC`.\n */\n compose(other) { return this.empty ? other : other.empty ? this : composeSets(this, other, true); }\n /**\n Given another change set starting in the same document, maps this\n change set over the other, producing a new change set that can be\n applied to the document produced by applying `other`. When\n `before` is `true`, order changes as if `this` comes before\n `other`, otherwise (the default) treat `other` as coming first.\n \n Given two changes `A` and `B`, `A.compose(B.map(A))` and\n `B.compose(A.map(B, true))` will produce the same document. This\n provides a basic form of [operational\n transformation](https://en.wikipedia.org/wiki/Operational_transformation),\n and can be used for collaborative editing.\n */\n map(other, before = false) { return other.empty ? this : mapSet(this, other, before, true); }\n /**\n Iterate over the changed ranges in the document, calling `f` for\n each, with the range in the original document (`fromA`-`toA`)\n and the range that replaces it in the new document\n (`fromB`-`toB`).\n \n When `individual` is true, adjacent changes are reported\n separately.\n */\n iterChanges(f, individual = false) {\n iterChanges(this, f, individual);\n }\n /**\n Get a [change description](https://codemirror.net/6/docs/ref/#state.ChangeDesc) for this change\n set.\n */\n get desc() { return ChangeDesc.create(this.sections); }\n /**\n @internal\n */\n filter(ranges) {\n let resultSections = [], resultInserted = [], filteredSections = [];\n let iter = new SectionIter(this);\n done: for (let i = 0, pos = 0;;) {\n let next = i == ranges.length ? 1e9 : ranges[i++];\n while (pos < next || pos == next && iter.len == 0) {\n if (iter.done)\n break done;\n let len = Math.min(iter.len, next - pos);\n addSection(filteredSections, len, -1);\n let ins = iter.ins == -1 ? -1 : iter.off == 0 ? iter.ins : 0;\n addSection(resultSections, len, ins);\n if (ins > 0)\n addInsert(resultInserted, resultSections, iter.text);\n iter.forward(len);\n pos += len;\n }\n let end = ranges[i++];\n while (pos < end) {\n if (iter.done)\n break done;\n let len = Math.min(iter.len, end - pos);\n addSection(resultSections, len, -1);\n addSection(filteredSections, len, iter.ins == -1 ? -1 : iter.off == 0 ? iter.ins : 0);\n iter.forward(len);\n pos += len;\n }\n }\n return { changes: new ChangeSet(resultSections, resultInserted),\n filtered: ChangeDesc.create(filteredSections) };\n }\n /**\n Serialize this change set to a JSON-representable value.\n */\n toJSON() {\n let parts = [];\n for (let i = 0; i < this.sections.length; i += 2) {\n let len = this.sections[i], ins = this.sections[i + 1];\n if (ins < 0)\n parts.push(len);\n else if (ins == 0)\n parts.push([len]);\n else\n parts.push([len].concat(this.inserted[i >> 1].toJSON()));\n }\n return parts;\n }\n /**\n Create a change set for the given changes, for a document of the\n given length, using `lineSep` as line separator.\n */\n static of(changes, length, lineSep) {\n let sections = [], inserted = [], pos = 0;\n let total = null;\n function flush(force = false) {\n if (!force && !sections.length)\n return;\n if (pos < length)\n addSection(sections, length - pos, -1);\n let set = new ChangeSet(sections, inserted);\n total = total ? total.compose(set.map(total)) : set;\n sections = [];\n inserted = [];\n pos = 0;\n }\n function process(spec) {\n if (Array.isArray(spec)) {\n for (let sub of spec)\n process(sub);\n }\n else if (spec instanceof ChangeSet) {\n if (spec.length != length)\n throw new RangeError(`Mismatched change set length (got ${spec.length}, expected ${length})`);\n flush();\n total = total ? total.compose(spec.map(total)) : spec;\n }\n else {\n let { from, to = from, insert } = spec;\n if (from > to || from < 0 || to > length)\n throw new RangeError(`Invalid change range ${from} to ${to} (in doc of length ${length})`);\n let insText = !insert ? Text.empty : typeof insert == \"string\" ? Text.of(insert.split(lineSep || DefaultSplit)) : insert;\n let insLen = insText.length;\n if (from == to && insLen == 0)\n return;\n if (from < pos)\n flush();\n if (from > pos)\n addSection(sections, from - pos, -1);\n addSection(sections, to - from, insLen);\n addInsert(inserted, sections, insText);\n pos = to;\n }\n }\n process(changes);\n flush(!total);\n return total;\n }\n /**\n Create an empty changeset of the given length.\n */\n static empty(length) {\n return new ChangeSet(length ? [length, -1] : [], []);\n }\n /**\n Create a changeset from its JSON representation (as produced by\n [`toJSON`](https://codemirror.net/6/docs/ref/#state.ChangeSet.toJSON).\n */\n static fromJSON(json) {\n if (!Array.isArray(json))\n throw new RangeError(\"Invalid JSON representation of ChangeSet\");\n let sections = [], inserted = [];\n for (let i = 0; i < json.length; i++) {\n let part = json[i];\n if (typeof part == \"number\") {\n sections.push(part, -1);\n }\n else if (!Array.isArray(part) || typeof part[0] != \"number\" || part.some((e, i) => i && typeof e != \"string\")) {\n throw new RangeError(\"Invalid JSON representation of ChangeSet\");\n }\n else if (part.length == 1) {\n sections.push(part[0], 0);\n }\n else {\n while (inserted.length < i)\n inserted.push(Text.empty);\n inserted[i] = Text.of(part.slice(1));\n sections.push(part[0], inserted[i].length);\n }\n }\n return new ChangeSet(sections, inserted);\n }\n /**\n @internal\n */\n static createSet(sections, inserted) {\n return new ChangeSet(sections, inserted);\n }\n}\nfunction addSection(sections, len, ins, forceJoin = false) {\n if (len == 0 && ins <= 0)\n return;\n let last = sections.length - 2;\n if (last >= 0 && ins <= 0 && ins == sections[last + 1])\n sections[last] += len;\n else if (last >= 0 && len == 0 && sections[last] == 0)\n sections[last + 1] += ins;\n else if (forceJoin) {\n sections[last] += len;\n sections[last + 1] += ins;\n }\n else\n sections.push(len, ins);\n}\nfunction addInsert(values, sections, value) {\n if (value.length == 0)\n return;\n let index = (sections.length - 2) >> 1;\n if (index < values.length) {\n values[values.length - 1] = values[values.length - 1].append(value);\n }\n else {\n while (values.length < index)\n values.push(Text.empty);\n values.push(value);\n }\n}\nfunction iterChanges(desc, f, individual) {\n let inserted = desc.inserted;\n for (let posA = 0, posB = 0, i = 0; i < desc.sections.length;) {\n let len = desc.sections[i++], ins = desc.sections[i++];\n if (ins < 0) {\n posA += len;\n posB += len;\n }\n else {\n let endA = posA, endB = posB, text = Text.empty;\n for (;;) {\n endA += len;\n endB += ins;\n if (ins && inserted)\n text = text.append(inserted[(i - 2) >> 1]);\n if (individual || i == desc.sections.length || desc.sections[i + 1] < 0)\n break;\n len = desc.sections[i++];\n ins = desc.sections[i++];\n }\n f(posA, endA, posB, endB, text);\n posA = endA;\n posB = endB;\n }\n }\n}\nfunction mapSet(setA, setB, before, mkSet = false) {\n // Produce a copy of setA that applies to the document after setB\n // has been applied (assuming both start at the same document).\n let sections = [], insert = mkSet ? [] : null;\n let a = new SectionIter(setA), b = new SectionIter(setB);\n // Iterate over both sets in parallel. inserted tracks, for changes\n // in A that have to be processed piece-by-piece, whether their\n // content has been inserted already, and refers to the section\n // index.\n for (let inserted = -1;;) {\n if (a.done && b.len || b.done && a.len) {\n throw new Error(\"Mismatched change set lengths\");\n }\n else if (a.ins == -1 && b.ins == -1) {\n // Move across ranges skipped by both sets.\n let len = Math.min(a.len, b.len);\n addSection(sections, len, -1);\n a.forward(len);\n b.forward(len);\n }\n else if (b.ins >= 0 && (a.ins < 0 || inserted == a.i || a.off == 0 && (b.len < a.len || b.len == a.len && !before))) {\n // If there's a change in B that comes before the next change in\n // A (ordered by start pos, then len, then before flag), skip\n // that (and process any changes in A it covers).\n let len = b.len;\n addSection(sections, b.ins, -1);\n while (len) {\n let piece = Math.min(a.len, len);\n if (a.ins >= 0 && inserted < a.i && a.len <= piece) {\n addSection(sections, 0, a.ins);\n if (insert)\n addInsert(insert, sections, a.text);\n inserted = a.i;\n }\n a.forward(piece);\n len -= piece;\n }\n b.next();\n }\n else if (a.ins >= 0) {\n // Process the part of a change in A up to the start of the next\n // non-deletion change in B (if overlapping).\n let len = 0, left = a.len;\n while (left) {\n if (b.ins == -1) {\n let piece = Math.min(left, b.len);\n len += piece;\n left -= piece;\n b.forward(piece);\n }\n else if (b.ins == 0 && b.len < left) {\n left -= b.len;\n b.next();\n }\n else {\n break;\n }\n }\n addSection(sections, len, inserted < a.i ? a.ins : 0);\n if (insert && inserted < a.i)\n addInsert(insert, sections, a.text);\n inserted = a.i;\n a.forward(a.len - left);\n }\n else if (a.done && b.done) {\n return insert ? ChangeSet.createSet(sections, insert) : ChangeDesc.create(sections);\n }\n else {\n throw new Error(\"Mismatched change set lengths\");\n }\n }\n}\nfunction composeSets(setA, setB, mkSet = false) {\n let sections = [];\n let insert = mkSet ? [] : null;\n let a = new SectionIter(setA), b = new SectionIter(setB);\n for (let open = false;;) {\n if (a.done && b.done) {\n return insert ? ChangeSet.createSet(sections, insert) : ChangeDesc.create(sections);\n }\n else if (a.ins == 0) { // Deletion in A\n addSection(sections, a.len, 0, open);\n a.next();\n }\n else if (b.len == 0 && !b.done) { // Insertion in B\n addSection(sections, 0, b.ins, open);\n if (insert)\n addInsert(insert, sections, b.text);\n b.next();\n }\n else if (a.done || b.done) {\n throw new Error(\"Mismatched change set lengths\");\n }\n else {\n let len = Math.min(a.len2, b.len), sectionLen = sections.length;\n if (a.ins == -1) {\n let insB = b.ins == -1 ? -1 : b.off ? 0 : b.ins;\n addSection(sections, len, insB, open);\n if (insert && insB)\n addInsert(insert, sections, b.text);\n }\n else if (b.ins == -1) {\n addSection(sections, a.off ? 0 : a.len, len, open);\n if (insert)\n addInsert(insert, sections, a.textBit(len));\n }\n else {\n addSection(sections, a.off ? 0 : a.len, b.off ? 0 : b.ins, open);\n if (insert && !b.off)\n addInsert(insert, sections, b.text);\n }\n open = (a.ins > len || b.ins >= 0 && b.len > len) && (open || sections.length > sectionLen);\n a.forward2(len);\n b.forward(len);\n }\n }\n}\nclass SectionIter {\n constructor(set) {\n this.set = set;\n this.i = 0;\n this.next();\n }\n next() {\n let { sections } = this.set;\n if (this.i < sections.length) {\n this.len = sections[this.i++];\n this.ins = sections[this.i++];\n }\n else {\n this.len = 0;\n this.ins = -2;\n }\n this.off = 0;\n }\n get done() { return this.ins == -2; }\n get len2() { return this.ins < 0 ? this.len : this.ins; }\n get text() {\n let { inserted } = this.set, index = (this.i - 2) >> 1;\n return index >= inserted.length ? Text.empty : inserted[index];\n }\n textBit(len) {\n let { inserted } = this.set, index = (this.i - 2) >> 1;\n return index >= inserted.length && !len ? Text.empty\n : inserted[index].slice(this.off, len == null ? undefined : this.off + len);\n }\n forward(len) {\n if (len == this.len)\n this.next();\n else {\n this.len -= len;\n this.off += len;\n }\n }\n forward2(len) {\n if (this.ins == -1)\n this.forward(len);\n else if (len == this.ins)\n this.next();\n else {\n this.ins -= len;\n this.off += len;\n }\n }\n}\n\n/**\nA single selection range. When\n[`allowMultipleSelections`](https://codemirror.net/6/docs/ref/#state.EditorState^allowMultipleSelections)\nis enabled, a [selection](https://codemirror.net/6/docs/ref/#state.EditorSelection) may hold\nmultiple ranges. By default, selections hold exactly one range.\n*/\nclass SelectionRange {\n constructor(\n /**\n The lower boundary of the range.\n */\n from, \n /**\n The upper boundary of the range.\n */\n to, flags) {\n this.from = from;\n this.to = to;\n this.flags = flags;\n }\n /**\n The anchor of the range\u2014the side that doesn't move when you\n extend it.\n */\n get anchor() { return this.flags & 32 /* RangeFlag.Inverted */ ? this.to : this.from; }\n /**\n The head of the range, which is moved when the range is\n [extended](https://codemirror.net/6/docs/ref/#state.SelectionRange.extend).\n */\n get head() { return this.flags & 32 /* RangeFlag.Inverted */ ? this.from : this.to; }\n /**\n True when `anchor` and `head` are at the same position.\n */\n get empty() { return this.from == this.to; }\n /**\n If this is a cursor that is explicitly associated with the\n character on one of its sides, this returns the side. -1 means\n the character before its position, 1 the character after, and 0\n means no association.\n */\n get assoc() { return this.flags & 8 /* RangeFlag.AssocBefore */ ? -1 : this.flags & 16 /* RangeFlag.AssocAfter */ ? 1 : 0; }\n /**\n The bidirectional text level associated with this cursor, if\n any.\n */\n get bidiLevel() {\n let level = this.flags & 7 /* RangeFlag.BidiLevelMask */;\n return level == 7 ? null : level;\n }\n /**\n The goal column (stored vertical offset) associated with a\n cursor. This is used to preserve the vertical position when\n [moving](https://codemirror.net/6/docs/ref/#view.EditorView.moveVertically) across\n lines of different length.\n */\n get goalColumn() {\n let value = this.flags >> 6 /* RangeFlag.GoalColumnOffset */;\n return value == 16777215 /* RangeFlag.NoGoalColumn */ ? undefined : value;\n }\n /**\n Map this range through a change, producing a valid range in the\n updated document.\n */\n map(change, assoc = -1) {\n let from, to;\n if (this.empty) {\n from = to = change.mapPos(this.from, assoc);\n }\n else {\n from = change.mapPos(this.from, 1);\n to = change.mapPos(this.to, -1);\n }\n return from == this.from && to == this.to ? this : new SelectionRange(from, to, this.flags);\n }\n /**\n Extend this range to cover at least `from` to `to`.\n */\n extend(from, to = from, assoc = 0) {\n if (from <= this.anchor && to >= this.anchor)\n return EditorSelection.range(from, to, undefined, undefined, assoc);\n let head = Math.abs(from - this.anchor) > Math.abs(to - this.anchor) ? from : to;\n return EditorSelection.range(this.anchor, head, undefined, undefined, assoc);\n }\n /**\n Compare this range to another range.\n */\n eq(other, includeAssoc = false) {\n return this.anchor == other.anchor && this.head == other.head && this.goalColumn == other.goalColumn &&\n (!includeAssoc || !this.empty || this.assoc == other.assoc);\n }\n /**\n Return a JSON-serializable object representing the range.\n */\n toJSON() { return { anchor: this.anchor, head: this.head }; }\n /**\n Convert a JSON representation of a range to a `SelectionRange`\n instance.\n */\n static fromJSON(json) {\n if (!json || typeof json.anchor != \"number\" || typeof json.head != \"number\")\n throw new RangeError(\"Invalid JSON representation for SelectionRange\");\n return EditorSelection.range(json.anchor, json.head);\n }\n /**\n @internal\n */\n static create(from, to, flags) {\n return new SelectionRange(from, to, flags);\n }\n}\n/**\nAn editor selection holds one or more selection ranges.\n*/\nclass EditorSelection {\n constructor(\n /**\n The ranges in the selection, sorted by position. Ranges cannot\n overlap (but they may touch, if they aren't empty).\n */\n ranges, \n /**\n The index of the _main_ range in the selection (which is\n usually the range that was added last).\n */\n mainIndex) {\n this.ranges = ranges;\n this.mainIndex = mainIndex;\n }\n /**\n Map a selection through a change. Used to adjust the selection\n position for changes.\n */\n map(change, assoc = -1) {\n if (change.empty)\n return this;\n return EditorSelection.create(this.ranges.map(r => r.map(change, assoc)), this.mainIndex);\n }\n /**\n Compare this selection to another selection. By default, ranges\n are compared only by position. When `includeAssoc` is true,\n cursor ranges must also have the same\n [`assoc`](https://codemirror.net/6/docs/ref/#state.SelectionRange.assoc) value.\n */\n eq(other, includeAssoc = false) {\n if (this.ranges.length != other.ranges.length ||\n this.mainIndex != other.mainIndex)\n return false;\n for (let i = 0; i < this.ranges.length; i++)\n if (!this.ranges[i].eq(other.ranges[i], includeAssoc))\n return false;\n return true;\n }\n /**\n Get the primary selection range. Usually, you should make sure\n your code applies to _all_ ranges, by using methods like\n [`changeByRange`](https://codemirror.net/6/docs/ref/#state.EditorState.changeByRange).\n */\n get main() { return this.ranges[this.mainIndex]; }\n /**\n Make sure the selection only has one range. Returns a selection\n holding only the main range from this selection.\n */\n asSingle() {\n return this.ranges.length == 1 ? this : new EditorSelection([this.main], 0);\n }\n /**\n Extend this selection with an extra range.\n */\n addRange(range, main = true) {\n return EditorSelection.create([range].concat(this.ranges), main ? 0 : this.mainIndex + 1);\n }\n /**\n Replace a given range with another range, and then normalize the\n selection to merge and sort ranges if necessary.\n */\n replaceRange(range, which = this.mainIndex) {\n let ranges = this.ranges.slice();\n ranges[which] = range;\n return EditorSelection.create(ranges, this.mainIndex);\n }\n /**\n Convert this selection to an object that can be serialized to\n JSON.\n */\n toJSON() {\n return { ranges: this.ranges.map(r => r.toJSON()), main: this.mainIndex };\n }\n /**\n Create a selection from a JSON representation.\n */\n static fromJSON(json) {\n if (!json || !Array.isArray(json.ranges) || typeof json.main != \"number\" || json.main >= json.ranges.length)\n throw new RangeError(\"Invalid JSON representation for EditorSelection\");\n return new EditorSelection(json.ranges.map((r) => SelectionRange.fromJSON(r)), json.main);\n }\n /**\n Create a selection holding a single range.\n */\n static single(anchor, head = anchor) {\n return new EditorSelection([EditorSelection.range(anchor, head)], 0);\n }\n /**\n Sort and merge the given set of ranges, creating a valid\n selection.\n */\n static create(ranges, mainIndex = 0) {\n if (ranges.length == 0)\n throw new RangeError(\"A selection needs at least one range\");\n for (let pos = 0, i = 0; i < ranges.length; i++) {\n let range = ranges[i];\n if (range.empty ? range.from <= pos : range.from < pos)\n return EditorSelection.normalized(ranges.slice(), mainIndex);\n pos = range.to;\n }\n return new EditorSelection(ranges, mainIndex);\n }\n /**\n Create a cursor selection range at the given position. You can\n safely ignore the optional arguments in most situations.\n */\n static cursor(pos, assoc = 0, bidiLevel, goalColumn) {\n return SelectionRange.create(pos, pos, (assoc == 0 ? 0 : assoc < 0 ? 8 /* RangeFlag.AssocBefore */ : 16 /* RangeFlag.AssocAfter */) |\n (bidiLevel == null ? 7 : Math.min(6, bidiLevel)) |\n ((goalColumn !== null && goalColumn !== void 0 ? goalColumn : 16777215 /* RangeFlag.NoGoalColumn */) << 6 /* RangeFlag.GoalColumnOffset */));\n }\n /**\n Create a selection range.\n */\n static range(anchor, head, goalColumn, bidiLevel, assoc) {\n let flags = ((goalColumn !== null && goalColumn !== void 0 ? goalColumn : 16777215 /* RangeFlag.NoGoalColumn */) << 6 /* RangeFlag.GoalColumnOffset */) |\n (bidiLevel == null ? 7 : Math.min(6, bidiLevel));\n if (!assoc && anchor != head)\n assoc = head < anchor ? 1 : -1;\n return head < anchor ? SelectionRange.create(head, anchor, 32 /* RangeFlag.Inverted */ | 16 /* RangeFlag.AssocAfter */ | flags)\n : SelectionRange.create(anchor, head, (!assoc ? 0 : assoc < 0 ? 8 /* RangeFlag.AssocBefore */ : 16 /* RangeFlag.AssocAfter */) | flags);\n }\n /**\n @internal\n */\n static normalized(ranges, mainIndex = 0) {\n let main = ranges[mainIndex];\n ranges.sort((a, b) => a.from - b.from);\n mainIndex = ranges.indexOf(main);\n for (let i = 1; i < ranges.length; i++) {\n let range = ranges[i], prev = ranges[i - 1];\n if (range.empty ? range.from <= prev.to : range.from < prev.to) {\n let from = prev.from, to = Math.max(range.to, prev.to);\n if (i <= mainIndex)\n mainIndex--;\n ranges.splice(--i, 2, range.anchor > range.head ? EditorSelection.range(to, from) : EditorSelection.range(from, to));\n }\n }\n return new EditorSelection(ranges, mainIndex);\n }\n}\nfunction checkSelection(selection, docLength) {\n for (let range of selection.ranges)\n if (range.to > docLength)\n throw new RangeError(\"Selection points outside of document\");\n}\n\nlet nextID = 0;\n/**\nA facet is a labeled value that is associated with an editor\nstate. It takes inputs from any number of extensions, and combines\nthose into a single output value.\n\nExamples of uses of facets are the [tab\nsize](https://codemirror.net/6/docs/ref/#state.EditorState^tabSize), [editor\nattributes](https://codemirror.net/6/docs/ref/#view.EditorView^editorAttributes), and [update\nlisteners](https://codemirror.net/6/docs/ref/#view.EditorView^updateListener).\n\nNote that `Facet` instances can be used anywhere where\n[`FacetReader`](https://codemirror.net/6/docs/ref/#state.FacetReader) is expected.\n*/\nclass Facet {\n constructor(\n /**\n @internal\n */\n combine, \n /**\n @internal\n */\n compareInput, \n /**\n @internal\n */\n compare, isStatic, enables) {\n this.combine = combine;\n this.compareInput = compareInput;\n this.compare = compare;\n this.isStatic = isStatic;\n /**\n @internal\n */\n this.id = nextID++;\n this.default = combine([]);\n this.extensions = typeof enables == \"function\" ? enables(this) : enables;\n }\n /**\n Returns a facet reader for this facet, which can be used to\n [read](https://codemirror.net/6/docs/ref/#state.EditorState.facet) it but not to define values for it.\n */\n get reader() { return this; }\n /**\n Define a new facet.\n */\n static define(config = {}) {\n return new Facet(config.combine || ((a) => a), config.compareInput || ((a, b) => a === b), config.compare || (!config.combine ? sameArray : (a, b) => a === b), !!config.static, config.enables);\n }\n /**\n Returns an extension that adds the given value to this facet.\n */\n of(value) {\n return new FacetProvider([], this, 0 /* Provider.Static */, value);\n }\n /**\n Create an extension that computes a value for the facet from a\n state. You must take care to declare the parts of the state that\n this value depends on, since your function is only called again\n for a new state when one of those parts changed.\n \n In cases where your value depends only on a single field, you'll\n want to use the [`from`](https://codemirror.net/6/docs/ref/#state.Facet.from) method instead.\n */\n compute(deps, get) {\n if (this.isStatic)\n throw new Error(\"Can't compute a static facet\");\n return new FacetProvider(deps, this, 1 /* Provider.Single */, get);\n }\n /**\n Create an extension that computes zero or more values for this\n facet from a state.\n */\n computeN(deps, get) {\n if (this.isStatic)\n throw new Error(\"Can't compute a static facet\");\n return new FacetProvider(deps, this, 2 /* Provider.Multi */, get);\n }\n from(field, get) {\n if (!get)\n get = x => x;\n return this.compute([field], state => get(state.field(field)));\n }\n}\nfunction sameArray(a, b) {\n return a == b || a.length == b.length && a.every((e, i) => e === b[i]);\n}\nclass FacetProvider {\n constructor(dependencies, facet, type, value) {\n this.dependencies = dependencies;\n this.facet = facet;\n this.type = type;\n this.value = value;\n this.id = nextID++;\n }\n dynamicSlot(addresses) {\n var _a;\n let getter = this.value;\n let compare = this.facet.compareInput;\n let id = this.id, idx = addresses[id] >> 1, multi = this.type == 2 /* Provider.Multi */;\n let depDoc = false, depSel = false, depAddrs = [];\n for (let dep of this.dependencies) {\n if (dep == \"doc\")\n depDoc = true;\n else if (dep == \"selection\")\n depSel = true;\n else if ((((_a = addresses[dep.id]) !== null && _a !== void 0 ? _a : 1) & 1) == 0)\n depAddrs.push(addresses[dep.id]);\n }\n return {\n create(state) {\n state.values[idx] = getter(state);\n return 1 /* SlotStatus.Changed */;\n },\n update(state, tr) {\n if ((depDoc && tr.docChanged) || (depSel && (tr.docChanged || tr.selection)) || ensureAll(state, depAddrs)) {\n let newVal = getter(state);\n if (multi ? !compareArray(newVal, state.values[idx], compare) : !compare(newVal, state.values[idx])) {\n state.values[idx] = newVal;\n return 1 /* SlotStatus.Changed */;\n }\n }\n return 0;\n },\n reconfigure: (state, oldState) => {\n let newVal, oldAddr = oldState.config.address[id];\n if (oldAddr != null) {\n let oldVal = getAddr(oldState, oldAddr);\n if (this.dependencies.every(dep => {\n return dep instanceof Facet ? oldState.facet(dep) === state.facet(dep) :\n dep instanceof StateField ? oldState.field(dep, false) == state.field(dep, false) : true;\n }) || (multi ? compareArray(newVal = getter(state), oldVal, compare) : compare(newVal = getter(state), oldVal))) {\n state.values[idx] = oldVal;\n return 0;\n }\n }\n else {\n newVal = getter(state);\n }\n state.values[idx] = newVal;\n return 1 /* SlotStatus.Changed */;\n }\n };\n }\n}\nfunction compareArray(a, b, compare) {\n if (a.length != b.length)\n return false;\n for (let i = 0; i < a.length; i++)\n if (!compare(a[i], b[i]))\n return false;\n return true;\n}\nfunction ensureAll(state, addrs) {\n let changed = false;\n for (let addr of addrs)\n if (ensureAddr(state, addr) & 1 /* SlotStatus.Changed */)\n changed = true;\n return changed;\n}\nfunction dynamicFacetSlot(addresses, facet, providers) {\n let providerAddrs = providers.map(p => addresses[p.id]);\n let providerTypes = providers.map(p => p.type);\n let dynamic = providerAddrs.filter(p => !(p & 1));\n let idx = addresses[facet.id] >> 1;\n function get(state) {\n let values = [];\n for (let i = 0; i < providerAddrs.length; i++) {\n let value = getAddr(state, providerAddrs[i]);\n if (providerTypes[i] == 2 /* Provider.Multi */)\n for (let val of value)\n values.push(val);\n else\n values.push(value);\n }\n return facet.combine(values);\n }\n return {\n create(state) {\n for (let addr of providerAddrs)\n ensureAddr(state, addr);\n state.values[idx] = get(state);\n return 1 /* SlotStatus.Changed */;\n },\n update(state, tr) {\n if (!ensureAll(state, dynamic))\n return 0;\n let value = get(state);\n if (facet.compare(value, state.values[idx]))\n return 0;\n state.values[idx] = value;\n return 1 /* SlotStatus.Changed */;\n },\n reconfigure(state, oldState) {\n let depChanged = ensureAll(state, providerAddrs);\n let oldProviders = oldState.config.facets[facet.id], oldValue = oldState.facet(facet);\n if (oldProviders && !depChanged && sameArray(providers, oldProviders)) {\n state.values[idx] = oldValue;\n return 0;\n }\n let value = get(state);\n if (facet.compare(value, oldValue)) {\n state.values[idx] = oldValue;\n return 0;\n }\n state.values[idx] = value;\n return 1 /* SlotStatus.Changed */;\n }\n };\n}\nconst initField = /*@__PURE__*/Facet.define({ static: true });\n/**\nFields can store additional information in an editor state, and\nkeep it in sync with the rest of the state.\n*/\nclass StateField {\n constructor(\n /**\n @internal\n */\n id, createF, updateF, compareF, \n /**\n @internal\n */\n spec) {\n this.id = id;\n this.createF = createF;\n this.updateF = updateF;\n this.compareF = compareF;\n this.spec = spec;\n /**\n @internal\n */\n this.provides = undefined;\n }\n /**\n Define a state field.\n */\n static define(config) {\n let field = new StateField(nextID++, config.create, config.update, config.compare || ((a, b) => a === b), config);\n if (config.provide)\n field.provides = config.provide(field);\n return field;\n }\n create(state) {\n let init = state.facet(initField).find(i => i.field == this);\n return ((init === null || init === void 0 ? void 0 : init.create) || this.createF)(state);\n }\n /**\n @internal\n */\n slot(addresses) {\n let idx = addresses[this.id] >> 1;\n return {\n create: (state) => {\n state.values[idx] = this.create(state);\n return 1 /* SlotStatus.Changed */;\n },\n update: (state, tr) => {\n let oldVal = state.values[idx];\n let value = this.updateF(oldVal, tr);\n if (this.compareF(oldVal, value))\n return 0;\n state.values[idx] = value;\n return 1 /* SlotStatus.Changed */;\n },\n reconfigure: (state, oldState) => {\n let init = state.facet(initField), oldInit = oldState.facet(initField), reInit;\n if ((reInit = init.find(i => i.field == this)) && reInit != oldInit.find(i => i.field == this)) {\n state.values[idx] = reInit.create(state);\n return 1 /* SlotStatus.Changed */;\n }\n if (oldState.config.address[this.id] != null) {\n state.values[idx] = oldState.field(this);\n return 0;\n }\n state.values[idx] = this.create(state);\n return 1 /* SlotStatus.Changed */;\n }\n };\n }\n /**\n Returns an extension that enables this field and overrides the\n way it is initialized. Can be useful when you need to provide a\n non-default starting value for the field.\n */\n init(create) {\n return [this, initField.of({ field: this, create })];\n }\n /**\n State field instances can be used as\n [`Extension`](https://codemirror.net/6/docs/ref/#state.Extension) values to enable the field in a\n given state.\n */\n get extension() { return this; }\n}\nconst Prec_ = { lowest: 4, low: 3, default: 2, high: 1, highest: 0 };\nfunction prec(value) {\n return (ext) => new PrecExtension(ext, value);\n}\n/**\nBy default extensions are registered in the order they are found\nin the flattened form of nested array that was provided.\nIndividual extension values can be assigned a precedence to\noverride this. Extensions that do not have a precedence set get\nthe precedence of the nearest parent with a precedence, or\n[`default`](https://codemirror.net/6/docs/ref/#state.Prec.default) if there is no such parent. The\nfinal ordering of extensions is determined by first sorting by\nprecedence and then by order within each precedence.\n*/\nconst Prec = {\n /**\n The highest precedence level, for extensions that should end up\n near the start of the precedence ordering.\n */\n highest: /*@__PURE__*/prec(Prec_.highest),\n /**\n A higher-than-default precedence, for extensions that should\n come before those with default precedence.\n */\n high: /*@__PURE__*/prec(Prec_.high),\n /**\n The default precedence, which is also used for extensions\n without an explicit precedence.\n */\n default: /*@__PURE__*/prec(Prec_.default),\n /**\n A lower-than-default precedence.\n */\n low: /*@__PURE__*/prec(Prec_.low),\n /**\n The lowest precedence level. Meant for things that should end up\n near the end of the extension order.\n */\n lowest: /*@__PURE__*/prec(Prec_.lowest)\n};\nclass PrecExtension {\n constructor(inner, prec) {\n this.inner = inner;\n this.prec = prec;\n }\n}\n/**\nExtension compartments can be used to make a configuration\ndynamic. By [wrapping](https://codemirror.net/6/docs/ref/#state.Compartment.of) part of your\nconfiguration in a compartment, you can later\n[replace](https://codemirror.net/6/docs/ref/#state.Compartment.reconfigure) that part through a\ntransaction.\n*/\nclass Compartment {\n /**\n Create an instance of this compartment to add to your [state\n configuration](https://codemirror.net/6/docs/ref/#state.EditorStateConfig.extensions).\n */\n of(ext) { return new CompartmentInstance(this, ext); }\n /**\n Create an [effect](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects) that\n reconfigures this compartment.\n */\n reconfigure(content) {\n return Compartment.reconfigure.of({ compartment: this, extension: content });\n }\n /**\n Get the current content of the compartment in the state, or\n `undefined` if it isn't present.\n */\n get(state) {\n return state.config.compartments.get(this);\n }\n}\nclass CompartmentInstance {\n constructor(compartment, inner) {\n this.compartment = compartment;\n this.inner = inner;\n }\n}\nclass Configuration {\n constructor(base, compartments, dynamicSlots, address, staticValues, facets) {\n this.base = base;\n this.compartments = compartments;\n this.dynamicSlots = dynamicSlots;\n this.address = address;\n this.staticValues = staticValues;\n this.facets = facets;\n this.statusTemplate = [];\n while (this.statusTemplate.length < dynamicSlots.length)\n this.statusTemplate.push(0 /* SlotStatus.Unresolved */);\n }\n staticFacet(facet) {\n let addr = this.address[facet.id];\n return addr == null ? facet.default : this.staticValues[addr >> 1];\n }\n static resolve(base, compartments, oldState) {\n let fields = [];\n let facets = Object.create(null);\n let newCompartments = new Map();\n for (let ext of flatten(base, compartments, newCompartments)) {\n if (ext instanceof StateField)\n fields.push(ext);\n else\n (facets[ext.facet.id] || (facets[ext.facet.id] = [])).push(ext);\n }\n let address = Object.create(null);\n let staticValues = [];\n let dynamicSlots = [];\n for (let field of fields) {\n address[field.id] = dynamicSlots.length << 1;\n dynamicSlots.push(a => field.slot(a));\n }\n let oldFacets = oldState === null || oldState === void 0 ? void 0 : oldState.config.facets;\n for (let id in facets) {\n let providers = facets[id], facet = providers[0].facet;\n let oldProviders = oldFacets && oldFacets[id] || [];\n if (providers.every(p => p.type == 0 /* Provider.Static */)) {\n address[facet.id] = (staticValues.length << 1) | 1;\n if (sameArray(oldProviders, providers)) {\n staticValues.push(oldState.facet(facet));\n }\n else {\n let value = facet.combine(providers.map(p => p.value));\n staticValues.push(oldState && facet.compare(value, oldState.facet(facet)) ? oldState.facet(facet) : value);\n }\n }\n else {\n for (let p of providers) {\n if (p.type == 0 /* Provider.Static */) {\n address[p.id] = (staticValues.length << 1) | 1;\n staticValues.push(p.value);\n }\n else {\n address[p.id] = dynamicSlots.length << 1;\n dynamicSlots.push(a => p.dynamicSlot(a));\n }\n }\n address[facet.id] = dynamicSlots.length << 1;\n dynamicSlots.push(a => dynamicFacetSlot(a, facet, providers));\n }\n }\n let dynamic = dynamicSlots.map(f => f(address));\n return new Configuration(base, newCompartments, dynamic, address, staticValues, facets);\n }\n}\nfunction flatten(extension, compartments, newCompartments) {\n let result = [[], [], [], [], []];\n let seen = new Map();\n function inner(ext, prec) {\n let known = seen.get(ext);\n if (known != null) {\n if (known <= prec)\n return;\n let found = result[known].indexOf(ext);\n if (found > -1)\n result[known].splice(found, 1);\n if (ext instanceof CompartmentInstance)\n newCompartments.delete(ext.compartment);\n }\n seen.set(ext, prec);\n if (Array.isArray(ext)) {\n for (let e of ext)\n inner(e, prec);\n }\n else if (ext instanceof CompartmentInstance) {\n if (newCompartments.has(ext.compartment))\n throw new RangeError(`Duplicate use of compartment in extensions`);\n let content = compartments.get(ext.compartment) || ext.inner;\n newCompartments.set(ext.compartment, content);\n inner(content, prec);\n }\n else if (ext instanceof PrecExtension) {\n inner(ext.inner, ext.prec);\n }\n else if (ext instanceof StateField) {\n result[prec].push(ext);\n if (ext.provides)\n inner(ext.provides, prec);\n }\n else if (ext instanceof FacetProvider) {\n result[prec].push(ext);\n if (ext.facet.extensions)\n inner(ext.facet.extensions, Prec_.default);\n }\n else {\n let content = ext.extension;\n if (!content)\n throw new Error(`Unrecognized extension value in extension set (${ext}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);\n inner(content, prec);\n }\n }\n inner(extension, Prec_.default);\n return result.reduce((a, b) => a.concat(b));\n}\nfunction ensureAddr(state, addr) {\n if (addr & 1)\n return 2 /* SlotStatus.Computed */;\n let idx = addr >> 1;\n let status = state.status[idx];\n if (status == 4 /* SlotStatus.Computing */)\n throw new Error(\"Cyclic dependency between fields and/or facets\");\n if (status & 2 /* SlotStatus.Computed */)\n return status;\n state.status[idx] = 4 /* SlotStatus.Computing */;\n let changed = state.computeSlot(state, state.config.dynamicSlots[idx]);\n return state.status[idx] = 2 /* SlotStatus.Computed */ | changed;\n}\nfunction getAddr(state, addr) {\n return addr & 1 ? state.config.staticValues[addr >> 1] : state.values[addr >> 1];\n}\n\nconst languageData = /*@__PURE__*/Facet.define();\nconst allowMultipleSelections = /*@__PURE__*/Facet.define({\n combine: values => values.some(v => v),\n static: true\n});\nconst lineSeparator = /*@__PURE__*/Facet.define({\n combine: values => values.length ? values[0] : undefined,\n static: true\n});\nconst changeFilter = /*@__PURE__*/Facet.define();\nconst transactionFilter = /*@__PURE__*/Facet.define();\nconst transactionExtender = /*@__PURE__*/Facet.define();\nconst readOnly = /*@__PURE__*/Facet.define({\n combine: values => values.length ? values[0] : false\n});\n\n/**\nAnnotations are tagged values that are used to add metadata to\ntransactions in an extensible way. They should be used to model\nthings that effect the entire transaction (such as its [time\nstamp](https://codemirror.net/6/docs/ref/#state.Transaction^time) or information about its\n[origin](https://codemirror.net/6/docs/ref/#state.Transaction^userEvent)). For effects that happen\n_alongside_ the other changes made by the transaction, [state\neffects](https://codemirror.net/6/docs/ref/#state.StateEffect) are more appropriate.\n*/\nclass Annotation {\n /**\n @internal\n */\n constructor(\n /**\n The annotation type.\n */\n type, \n /**\n The value of this annotation.\n */\n value) {\n this.type = type;\n this.value = value;\n }\n /**\n Define a new type of annotation.\n */\n static define() { return new AnnotationType(); }\n}\n/**\nMarker that identifies a type of [annotation](https://codemirror.net/6/docs/ref/#state.Annotation).\n*/\nclass AnnotationType {\n /**\n Create an instance of this annotation.\n */\n of(value) { return new Annotation(this, value); }\n}\n/**\nRepresentation of a type of state effect. Defined with\n[`StateEffect.define`](https://codemirror.net/6/docs/ref/#state.StateEffect^define).\n*/\nclass StateEffectType {\n /**\n @internal\n */\n constructor(\n // The `any` types in these function types are there to work\n // around TypeScript issue #37631, where the type guard on\n // `StateEffect.is` mysteriously stops working when these properly\n // have type `Value`.\n /**\n @internal\n */\n map) {\n this.map = map;\n }\n /**\n Create a [state effect](https://codemirror.net/6/docs/ref/#state.StateEffect) instance of this\n type.\n */\n of(value) { return new StateEffect(this, value); }\n}\n/**\nState effects can be used to represent additional effects\nassociated with a [transaction](https://codemirror.net/6/docs/ref/#state.Transaction.effects). They\nare often useful to model changes to custom [state\nfields](https://codemirror.net/6/docs/ref/#state.StateField), when those changes aren't implicit in\ndocument or selection changes.\n*/\nclass StateEffect {\n /**\n @internal\n */\n constructor(\n /**\n @internal\n */\n type, \n /**\n The value of this effect.\n */\n value) {\n this.type = type;\n this.value = value;\n }\n /**\n Map this effect through a position mapping. Will return\n `undefined` when that ends up deleting the effect.\n */\n map(mapping) {\n let mapped = this.type.map(this.value, mapping);\n return mapped === undefined ? undefined : mapped == this.value ? this : new StateEffect(this.type, mapped);\n }\n /**\n Tells you whether this effect object is of a given\n [type](https://codemirror.net/6/docs/ref/#state.StateEffectType).\n */\n is(type) { return this.type == type; }\n /**\n Define a new effect type. The type parameter indicates the type\n of values that his effect holds. It should be a type that\n doesn't include `undefined`, since that is used in\n [mapping](https://codemirror.net/6/docs/ref/#state.StateEffect.map) to indicate that an effect is\n removed.\n */\n static define(spec = {}) {\n return new StateEffectType(spec.map || (v => v));\n }\n /**\n Map an array of effects through a change set.\n */\n static mapEffects(effects, mapping) {\n if (!effects.length)\n return effects;\n let result = [];\n for (let effect of effects) {\n let mapped = effect.map(mapping);\n if (mapped)\n result.push(mapped);\n }\n return result;\n }\n}\n/**\nThis effect can be used to reconfigure the root extensions of\nthe editor. Doing this will discard any extensions\n[appended](https://codemirror.net/6/docs/ref/#state.StateEffect^appendConfig), but does not reset\nthe content of [reconfigured](https://codemirror.net/6/docs/ref/#state.Compartment.reconfigure)\ncompartments.\n*/\nStateEffect.reconfigure = /*@__PURE__*/StateEffect.define();\n/**\nAppend extensions to the top-level configuration of the editor.\n*/\nStateEffect.appendConfig = /*@__PURE__*/StateEffect.define();\n/**\nChanges to the editor state are grouped into transactions.\nTypically, a user action creates a single transaction, which may\ncontain any number of document changes, may change the selection,\nor have other effects. Create a transaction by calling\n[`EditorState.update`](https://codemirror.net/6/docs/ref/#state.EditorState.update), or immediately\ndispatch one by calling\n[`EditorView.dispatch`](https://codemirror.net/6/docs/ref/#view.EditorView.dispatch).\n*/\nclass Transaction {\n constructor(\n /**\n The state from which the transaction starts.\n */\n startState, \n /**\n The document changes made by this transaction.\n */\n changes, \n /**\n The selection set by this transaction, or undefined if it\n doesn't explicitly set a selection.\n */\n selection, \n /**\n The effects added to the transaction.\n */\n effects, \n /**\n @internal\n */\n annotations, \n /**\n Whether the selection should be scrolled into view after this\n transaction is dispatched.\n */\n scrollIntoView) {\n this.startState = startState;\n this.changes = changes;\n this.selection = selection;\n this.effects = effects;\n this.annotations = annotations;\n this.scrollIntoView = scrollIntoView;\n /**\n @internal\n */\n this._doc = null;\n /**\n @internal\n */\n this._state = null;\n if (selection)\n checkSelection(selection, changes.newLength);\n if (!annotations.some((a) => a.type == Transaction.time))\n this.annotations = annotations.concat(Transaction.time.of(Date.now()));\n }\n /**\n @internal\n */\n static create(startState, changes, selection, effects, annotations, scrollIntoView) {\n return new Transaction(startState, changes, selection, effects, annotations, scrollIntoView);\n }\n /**\n The new document produced by the transaction. Contrary to\n [`.state`](https://codemirror.net/6/docs/ref/#state.Transaction.state)`.doc`, accessing this won't\n force the entire new state to be computed right away, so it is\n recommended that [transaction\n filters](https://codemirror.net/6/docs/ref/#state.EditorState^transactionFilter) use this getter\n when they need to look at the new document.\n */\n get newDoc() {\n return this._doc || (this._doc = this.changes.apply(this.startState.doc));\n }\n /**\n The new selection produced by the transaction. If\n [`this.selection`](https://codemirror.net/6/docs/ref/#state.Transaction.selection) is undefined,\n this will [map](https://codemirror.net/6/docs/ref/#state.EditorSelection.map) the start state's\n current selection through the changes made by the transaction.\n */\n get newSelection() {\n return this.selection || this.startState.selection.map(this.changes);\n }\n /**\n The new state created by the transaction. Computed on demand\n (but retained for subsequent access), so it is recommended not to\n access it in [transaction\n filters](https://codemirror.net/6/docs/ref/#state.EditorState^transactionFilter) when possible.\n */\n get state() {\n if (!this._state)\n this.startState.applyTransaction(this);\n return this._state;\n }\n /**\n Get the value of the given annotation type, if any.\n */\n annotation(type) {\n for (let ann of this.annotations)\n if (ann.type == type)\n return ann.value;\n return undefined;\n }\n /**\n Indicates whether the transaction changed the document.\n */\n get docChanged() { return !this.changes.empty; }\n /**\n Indicates whether this transaction reconfigures the state\n (through a [configuration compartment](https://codemirror.net/6/docs/ref/#state.Compartment) or\n with a top-level configuration\n [effect](https://codemirror.net/6/docs/ref/#state.StateEffect^reconfigure).\n */\n get reconfigured() { return this.startState.config != this.state.config; }\n /**\n Returns true if the transaction has a [user\n event](https://codemirror.net/6/docs/ref/#state.Transaction^userEvent) annotation that is equal to\n or more specific than `event`. For example, if the transaction\n has `\"select.pointer\"` as user event, `\"select\"` and\n `\"select.pointer\"` will match it.\n */\n isUserEvent(event) {\n let e = this.annotation(Transaction.userEvent);\n return !!(e && (e == event || e.length > event.length && e.slice(0, event.length) == event && e[event.length] == \".\"));\n }\n}\n/**\nAnnotation used to store transaction timestamps. Automatically\nadded to every transaction, holding `Date.now()`.\n*/\nTransaction.time = /*@__PURE__*/Annotation.define();\n/**\nAnnotation used to associate a transaction with a user interface\nevent. Holds a string identifying the event, using a\ndot-separated format to support attaching more specific\ninformation. The events used by the core libraries are:\n\n - `\"input\"` when content is entered\n - `\"input.type\"` for typed input\n - `\"input.type.compose\"` for composition\n - `\"input.paste\"` for pasted input\n - `\"input.drop\"` when adding content with drag-and-drop\n - `\"input.complete\"` when autocompleting\n - `\"delete\"` when the user deletes content\n - `\"delete.selection\"` when deleting the selection\n - `\"delete.forward\"` when deleting forward from the selection\n - `\"delete.backward\"` when deleting backward from the selection\n - `\"delete.cut\"` when cutting to the clipboard\n - `\"move\"` when content is moved\n - `\"move.drop\"` when content is moved within the editor through drag-and-drop\n - `\"select\"` when explicitly changing the selection\n - `\"select.pointer\"` when selecting with a mouse or other pointing device\n - `\"undo\"` and `\"redo\"` for history actions\n\nUse [`isUserEvent`](https://codemirror.net/6/docs/ref/#state.Transaction.isUserEvent) to check\nwhether the annotation matches a given event.\n*/\nTransaction.userEvent = /*@__PURE__*/Annotation.define();\n/**\nAnnotation indicating whether a transaction should be added to\nthe undo history or not.\n*/\nTransaction.addToHistory = /*@__PURE__*/Annotation.define();\n/**\nAnnotation indicating (when present and true) that a transaction\nrepresents a change made by some other actor, not the user. This\nis used, for example, to tag other people's changes in\ncollaborative editing.\n*/\nTransaction.remote = /*@__PURE__*/Annotation.define();\nfunction joinRanges(a, b) {\n let result = [];\n for (let iA = 0, iB = 0;;) {\n let from, to;\n if (iA < a.length && (iB == b.length || b[iB] >= a[iA])) {\n from = a[iA++];\n to = a[iA++];\n }\n else if (iB < b.length) {\n from = b[iB++];\n to = b[iB++];\n }\n else\n return result;\n if (!result.length || result[result.length - 1] < from)\n result.push(from, to);\n else if (result[result.length - 1] < to)\n result[result.length - 1] = to;\n }\n}\nfunction mergeTransaction(a, b, sequential) {\n var _a;\n let mapForA, mapForB, changes;\n if (sequential) {\n mapForA = b.changes;\n mapForB = ChangeSet.empty(b.changes.length);\n changes = a.changes.compose(b.changes);\n }\n else {\n mapForA = b.changes.map(a.changes);\n mapForB = a.changes.mapDesc(b.changes, true);\n changes = a.changes.compose(mapForA);\n }\n return {\n changes,\n selection: b.selection ? b.selection.map(mapForB) : (_a = a.selection) === null || _a === void 0 ? void 0 : _a.map(mapForA),\n effects: StateEffect.mapEffects(a.effects, mapForA).concat(StateEffect.mapEffects(b.effects, mapForB)),\n annotations: a.annotations.length ? a.annotations.concat(b.annotations) : b.annotations,\n scrollIntoView: a.scrollIntoView || b.scrollIntoView\n };\n}\nfunction resolveTransactionInner(state, spec, docSize) {\n let sel = spec.selection, annotations = asArray(spec.annotations);\n if (spec.userEvent)\n annotations = annotations.concat(Transaction.userEvent.of(spec.userEvent));\n return {\n changes: spec.changes instanceof ChangeSet ? spec.changes\n : ChangeSet.of(spec.changes || [], docSize, state.facet(lineSeparator)),\n selection: sel && (sel instanceof EditorSelection ? sel : EditorSelection.single(sel.anchor, sel.head)),\n effects: asArray(spec.effects),\n annotations,\n scrollIntoView: !!spec.scrollIntoView\n };\n}\nfunction resolveTransaction(state, specs, filter) {\n let s = resolveTransactionInner(state, specs.length ? specs[0] : {}, state.doc.length);\n if (specs.length && specs[0].filter === false)\n filter = false;\n for (let i = 1; i < specs.length; i++) {\n if (specs[i].filter === false)\n filter = false;\n let seq = !!specs[i].sequential;\n s = mergeTransaction(s, resolveTransactionInner(state, specs[i], seq ? s.changes.newLength : state.doc.length), seq);\n }\n let tr = Transaction.create(state, s.changes, s.selection, s.effects, s.annotations, s.scrollIntoView);\n return extendTransaction(filter ? filterTransaction(tr) : tr);\n}\n// Finish a transaction by applying filters if necessary.\nfunction filterTransaction(tr) {\n let state = tr.startState;\n // Change filters\n let result = true;\n for (let filter of state.facet(changeFilter)) {\n let value = filter(tr);\n if (value === false) {\n result = false;\n break;\n }\n if (Array.isArray(value))\n result = result === true ? value : joinRanges(result, value);\n }\n if (result !== true) {\n let changes, back;\n if (result === false) {\n back = tr.changes.invertedDesc;\n changes = ChangeSet.empty(state.doc.length);\n }\n else {\n let filtered = tr.changes.filter(result);\n changes = filtered.changes;\n back = filtered.filtered.mapDesc(filtered.changes).invertedDesc;\n }\n tr = Transaction.create(state, changes, tr.selection && tr.selection.map(back), StateEffect.mapEffects(tr.effects, back), tr.annotations, tr.scrollIntoView);\n }\n // Transaction filters\n let filters = state.facet(transactionFilter);\n for (let i = filters.length - 1; i >= 0; i--) {\n let filtered = filters[i](tr);\n if (filtered instanceof Transaction)\n tr = filtered;\n else if (Array.isArray(filtered) && filtered.length == 1 && filtered[0] instanceof Transaction)\n tr = filtered[0];\n else\n tr = resolveTransaction(state, asArray(filtered), false);\n }\n return tr;\n}\nfunction extendTransaction(tr) {\n let state = tr.startState, extenders = state.facet(transactionExtender), spec = tr;\n for (let i = extenders.length - 1; i >= 0; i--) {\n let extension = extenders[i](tr);\n if (extension && Object.keys(extension).length)\n spec = mergeTransaction(spec, resolveTransactionInner(state, extension, tr.changes.newLength), true);\n }\n return spec == tr ? tr : Transaction.create(state, tr.changes, tr.selection, spec.effects, spec.annotations, spec.scrollIntoView);\n}\nconst none = [];\nfunction asArray(value) {\n return value == null ? none : Array.isArray(value) ? value : [value];\n}\n\n/**\nThe categories produced by a [character\ncategorizer](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer). These are used\ndo things like selecting by word.\n*/\nvar CharCategory = /*@__PURE__*/(function (CharCategory) {\n /**\n Word characters.\n */\n CharCategory[CharCategory[\"Word\"] = 0] = \"Word\";\n /**\n Whitespace.\n */\n CharCategory[CharCategory[\"Space\"] = 1] = \"Space\";\n /**\n Anything else.\n */\n CharCategory[CharCategory[\"Other\"] = 2] = \"Other\";\nreturn CharCategory})(CharCategory || (CharCategory = {}));\nconst nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\nlet wordChar;\ntry {\n wordChar = /*@__PURE__*/new RegExp(\"[\\\\p{Alphabetic}\\\\p{Number}_]\", \"u\");\n}\ncatch (_) { }\nfunction hasWordChar(str) {\n if (wordChar)\n return wordChar.test(str);\n for (let i = 0; i < str.length; i++) {\n let ch = str[i];\n if (/\\w/.test(ch) || ch > \"\\x80\" && (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)))\n return true;\n }\n return false;\n}\nfunction makeCategorizer(wordChars) {\n return (char) => {\n if (!/\\S/.test(char))\n return CharCategory.Space;\n if (hasWordChar(char))\n return CharCategory.Word;\n for (let i = 0; i < wordChars.length; i++)\n if (char.indexOf(wordChars[i]) > -1)\n return CharCategory.Word;\n return CharCategory.Other;\n };\n}\n\n/**\nThe editor state class is a persistent (immutable) data structure.\nTo update a state, you [create](https://codemirror.net/6/docs/ref/#state.EditorState.update) a\n[transaction](https://codemirror.net/6/docs/ref/#state.Transaction), which produces a _new_ state\ninstance, without modifying the original object.\n\nAs such, _never_ mutate properties of a state directly. That'll\njust break things.\n*/\nclass EditorState {\n constructor(\n /**\n @internal\n */\n config, \n /**\n The current document.\n */\n doc, \n /**\n The current selection.\n */\n selection, \n /**\n @internal\n */\n values, computeSlot, tr) {\n this.config = config;\n this.doc = doc;\n this.selection = selection;\n this.values = values;\n this.status = config.statusTemplate.slice();\n this.computeSlot = computeSlot;\n // Fill in the computed state immediately, so that further queries\n // for it made during the update return this state\n if (tr)\n tr._state = this;\n for (let i = 0; i < this.config.dynamicSlots.length; i++)\n ensureAddr(this, i << 1);\n this.computeSlot = null;\n }\n field(field, require = true) {\n let addr = this.config.address[field.id];\n if (addr == null) {\n if (require)\n throw new RangeError(\"Field is not present in this state\");\n return undefined;\n }\n ensureAddr(this, addr);\n return getAddr(this, addr);\n }\n /**\n Create a [transaction](https://codemirror.net/6/docs/ref/#state.Transaction) that updates this\n state. Any number of [transaction specs](https://codemirror.net/6/docs/ref/#state.TransactionSpec)\n can be passed. Unless\n [`sequential`](https://codemirror.net/6/docs/ref/#state.TransactionSpec.sequential) is set, the\n [changes](https://codemirror.net/6/docs/ref/#state.TransactionSpec.changes) (if any) of each spec\n are assumed to start in the _current_ document (not the document\n produced by previous specs), and its\n [selection](https://codemirror.net/6/docs/ref/#state.TransactionSpec.selection) and\n [effects](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects) are assumed to refer\n to the document created by its _own_ changes. The resulting\n transaction contains the combined effect of all the different\n specs. For [selection](https://codemirror.net/6/docs/ref/#state.TransactionSpec.selection), later\n specs take precedence over earlier ones.\n */\n update(...specs) {\n return resolveTransaction(this, specs, true);\n }\n /**\n @internal\n */\n applyTransaction(tr) {\n let conf = this.config, { base, compartments } = conf;\n for (let effect of tr.effects) {\n if (effect.is(Compartment.reconfigure)) {\n if (conf) {\n compartments = new Map;\n conf.compartments.forEach((val, key) => compartments.set(key, val));\n conf = null;\n }\n compartments.set(effect.value.compartment, effect.value.extension);\n }\n else if (effect.is(StateEffect.reconfigure)) {\n conf = null;\n base = effect.value;\n }\n else if (effect.is(StateEffect.appendConfig)) {\n conf = null;\n base = asArray(base).concat(effect.value);\n }\n }\n let startValues;\n if (!conf) {\n conf = Configuration.resolve(base, compartments, this);\n let intermediateState = new EditorState(conf, this.doc, this.selection, conf.dynamicSlots.map(() => null), (state, slot) => slot.reconfigure(state, this), null);\n startValues = intermediateState.values;\n }\n else {\n startValues = tr.startState.values.slice();\n }\n let selection = tr.startState.facet(allowMultipleSelections) ? tr.newSelection : tr.newSelection.asSingle();\n new EditorState(conf, tr.newDoc, selection, startValues, (state, slot) => slot.update(state, tr), tr);\n }\n /**\n Create a [transaction spec](https://codemirror.net/6/docs/ref/#state.TransactionSpec) that\n replaces every selection range with the given content.\n */\n replaceSelection(text) {\n if (typeof text == \"string\")\n text = this.toText(text);\n return this.changeByRange(range => ({ changes: { from: range.from, to: range.to, insert: text },\n range: EditorSelection.cursor(range.from + text.length) }));\n }\n /**\n Create a set of changes and a new selection by running the given\n function for each range in the active selection. The function\n can return an optional set of changes (in the coordinate space\n of the start document), plus an updated range (in the coordinate\n space of the document produced by the call's own changes). This\n method will merge all the changes and ranges into a single\n changeset and selection, and return it as a [transaction\n spec](https://codemirror.net/6/docs/ref/#state.TransactionSpec), which can be passed to\n [`update`](https://codemirror.net/6/docs/ref/#state.EditorState.update).\n */\n changeByRange(f) {\n let sel = this.selection;\n let result1 = f(sel.ranges[0]);\n let changes = this.changes(result1.changes), ranges = [result1.range];\n let effects = asArray(result1.effects);\n for (let i = 1; i < sel.ranges.length; i++) {\n let result = f(sel.ranges[i]);\n let newChanges = this.changes(result.changes), newMapped = newChanges.map(changes);\n for (let j = 0; j < i; j++)\n ranges[j] = ranges[j].map(newMapped);\n let mapBy = changes.mapDesc(newChanges, true);\n ranges.push(result.range.map(mapBy));\n changes = changes.compose(newMapped);\n effects = StateEffect.mapEffects(effects, newMapped).concat(StateEffect.mapEffects(asArray(result.effects), mapBy));\n }\n return {\n changes,\n selection: EditorSelection.create(ranges, sel.mainIndex),\n effects\n };\n }\n /**\n Create a [change set](https://codemirror.net/6/docs/ref/#state.ChangeSet) from the given change\n description, taking the state's document length and line\n separator into account.\n */\n changes(spec = []) {\n if (spec instanceof ChangeSet)\n return spec;\n return ChangeSet.of(spec, this.doc.length, this.facet(EditorState.lineSeparator));\n }\n /**\n Using the state's [line\n separator](https://codemirror.net/6/docs/ref/#state.EditorState^lineSeparator), create a\n [`Text`](https://codemirror.net/6/docs/ref/#state.Text) instance from the given string.\n */\n toText(string) {\n return Text.of(string.split(this.facet(EditorState.lineSeparator) || DefaultSplit));\n }\n /**\n Return the given range of the document as a string.\n */\n sliceDoc(from = 0, to = this.doc.length) {\n return this.doc.sliceString(from, to, this.lineBreak);\n }\n /**\n Get the value of a state [facet](https://codemirror.net/6/docs/ref/#state.Facet).\n */\n facet(facet) {\n let addr = this.config.address[facet.id];\n if (addr == null)\n return facet.default;\n ensureAddr(this, addr);\n return getAddr(this, addr);\n }\n /**\n Convert this state to a JSON-serializable object. When custom\n fields should be serialized, you can pass them in as an object\n mapping property names (in the resulting object, which should\n not use `doc` or `selection`) to fields.\n */\n toJSON(fields) {\n let result = {\n doc: this.sliceDoc(),\n selection: this.selection.toJSON()\n };\n if (fields)\n for (let prop in fields) {\n let value = fields[prop];\n if (value instanceof StateField && this.config.address[value.id] != null)\n result[prop] = value.spec.toJSON(this.field(fields[prop]), this);\n }\n return result;\n }\n /**\n Deserialize a state from its JSON representation. When custom\n fields should be deserialized, pass the same object you passed\n to [`toJSON`](https://codemirror.net/6/docs/ref/#state.EditorState.toJSON) when serializing as\n third argument.\n */\n static fromJSON(json, config = {}, fields) {\n if (!json || typeof json.doc != \"string\")\n throw new RangeError(\"Invalid JSON representation for EditorState\");\n let fieldInit = [];\n if (fields)\n for (let prop in fields) {\n if (Object.prototype.hasOwnProperty.call(json, prop)) {\n let field = fields[prop], value = json[prop];\n fieldInit.push(field.init(state => field.spec.fromJSON(value, state)));\n }\n }\n return EditorState.create({\n doc: json.doc,\n selection: EditorSelection.fromJSON(json.selection),\n extensions: config.extensions ? fieldInit.concat([config.extensions]) : fieldInit\n });\n }\n /**\n Create a new state. You'll usually only need this when\n initializing an editor\u2014updated states are created by applying\n transactions.\n */\n static create(config = {}) {\n let configuration = Configuration.resolve(config.extensions || [], new Map);\n let doc = config.doc instanceof Text ? config.doc\n : Text.of((config.doc || \"\").split(configuration.staticFacet(EditorState.lineSeparator) || DefaultSplit));\n let selection = !config.selection ? EditorSelection.single(0)\n : config.selection instanceof EditorSelection ? config.selection\n : EditorSelection.single(config.selection.anchor, config.selection.head);\n checkSelection(selection, doc.length);\n if (!configuration.staticFacet(allowMultipleSelections))\n selection = selection.asSingle();\n return new EditorState(configuration, doc, selection, configuration.dynamicSlots.map(() => null), (state, slot) => slot.create(state), null);\n }\n /**\n The size (in columns) of a tab in the document, determined by\n the [`tabSize`](https://codemirror.net/6/docs/ref/#state.EditorState^tabSize) facet.\n */\n get tabSize() { return this.facet(EditorState.tabSize); }\n /**\n Get the proper [line-break](https://codemirror.net/6/docs/ref/#state.EditorState^lineSeparator)\n string for this state.\n */\n get lineBreak() { return this.facet(EditorState.lineSeparator) || \"\\n\"; }\n /**\n Returns true when the editor is\n [configured](https://codemirror.net/6/docs/ref/#state.EditorState^readOnly) to be read-only.\n */\n get readOnly() { return this.facet(readOnly); }\n /**\n Look up a translation for the given phrase (via the\n [`phrases`](https://codemirror.net/6/docs/ref/#state.EditorState^phrases) facet), or return the\n original string if no translation is found.\n \n If additional arguments are passed, they will be inserted in\n place of markers like `$1` (for the first value) and `$2`, etc.\n A single `$` is equivalent to `$1`, and `$$` will produce a\n literal dollar sign.\n */\n phrase(phrase, ...insert) {\n for (let map of this.facet(EditorState.phrases))\n if (Object.prototype.hasOwnProperty.call(map, phrase)) {\n phrase = map[phrase];\n break;\n }\n if (insert.length)\n phrase = phrase.replace(/\\$(\\$|\\d*)/g, (m, i) => {\n if (i == \"$\")\n return \"$\";\n let n = +(i || 1);\n return !n || n > insert.length ? m : insert[n - 1];\n });\n return phrase;\n }\n /**\n Find the values for a given language data field, provided by the\n the [`languageData`](https://codemirror.net/6/docs/ref/#state.EditorState^languageData) facet.\n \n Examples of language data fields are...\n \n - [`\"commentTokens\"`](https://codemirror.net/6/docs/ref/#commands.CommentTokens) for specifying\n comment syntax.\n - [`\"autocomplete\"`](https://codemirror.net/6/docs/ref/#autocomplete.autocompletion^config.override)\n for providing language-specific completion sources.\n - [`\"wordChars\"`](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer) for adding\n characters that should be considered part of words in this\n language.\n - [`\"closeBrackets\"`](https://codemirror.net/6/docs/ref/#autocomplete.CloseBracketConfig) controls\n bracket closing behavior.\n */\n languageDataAt(name, pos, side = -1) {\n let values = [];\n for (let provider of this.facet(languageData)) {\n for (let result of provider(this, pos, side)) {\n if (Object.prototype.hasOwnProperty.call(result, name))\n values.push(result[name]);\n }\n }\n return values;\n }\n /**\n Return a function that can categorize strings (expected to\n represent a single [grapheme cluster](https://codemirror.net/6/docs/ref/#state.findClusterBreak))\n into one of:\n \n - Word (contains an alphanumeric character or a character\n explicitly listed in the local language's `\"wordChars\"`\n language data, which should be a string)\n - Space (contains only whitespace)\n - Other (anything else)\n */\n charCategorizer(at) {\n let chars = this.languageDataAt(\"wordChars\", at);\n return makeCategorizer(chars.length ? chars[0] : \"\");\n }\n /**\n Find the word at the given position, meaning the range\n containing all [word](https://codemirror.net/6/docs/ref/#state.CharCategory.Word) characters\n around it. If no word characters are adjacent to the position,\n this returns null.\n */\n wordAt(pos) {\n let { text, from, length } = this.doc.lineAt(pos);\n let cat = this.charCategorizer(pos);\n let start = pos - from, end = pos - from;\n while (start > 0) {\n let prev = findClusterBreak(text, start, false);\n if (cat(text.slice(prev, start)) != CharCategory.Word)\n break;\n start = prev;\n }\n while (end < length) {\n let next = findClusterBreak(text, end);\n if (cat(text.slice(end, next)) != CharCategory.Word)\n break;\n end = next;\n }\n return start == end ? null : EditorSelection.range(start + from, end + from);\n }\n}\n/**\nA facet that, when enabled, causes the editor to allow multiple\nranges to be selected. Be careful though, because by default the\neditor relies on the native DOM selection, which cannot handle\nmultiple selections. An extension like\n[`drawSelection`](https://codemirror.net/6/docs/ref/#view.drawSelection) can be used to make\nsecondary selections visible to the user.\n*/\nEditorState.allowMultipleSelections = allowMultipleSelections;\n/**\nConfigures the tab size to use in this state. The first\n(highest-precedence) value of the facet is used. If no value is\ngiven, this defaults to 4.\n*/\nEditorState.tabSize = /*@__PURE__*/Facet.define({\n combine: values => values.length ? values[0] : 4\n});\n/**\nThe line separator to use. By default, any of `\"\\n\"`, `\"\\r\\n\"`\nand `\"\\r\"` is treated as a separator when splitting lines, and\nlines are joined with `\"\\n\"`.\n\nWhen you configure a value here, only that precise separator\nwill be used, allowing you to round-trip documents through the\neditor without normalizing line separators.\n*/\nEditorState.lineSeparator = lineSeparator;\n/**\nThis facet controls the value of the\n[`readOnly`](https://codemirror.net/6/docs/ref/#state.EditorState.readOnly) getter, which is\nconsulted by commands and extensions that implement editing\nfunctionality to determine whether they should apply. It\ndefaults to false, but when its highest-precedence value is\n`true`, such functionality disables itself.\n\nNot to be confused with\n[`EditorView.editable`](https://codemirror.net/6/docs/ref/#view.EditorView^editable), which\ncontrols whether the editor's DOM is set to be editable (and\nthus focusable).\n*/\nEditorState.readOnly = readOnly;\n/**\nRegisters translation phrases. The\n[`phrase`](https://codemirror.net/6/docs/ref/#state.EditorState.phrase) method will look through\nall objects registered with this facet to find translations for\nits argument.\n*/\nEditorState.phrases = /*@__PURE__*/Facet.define({\n compare(a, b) {\n let kA = Object.keys(a), kB = Object.keys(b);\n return kA.length == kB.length && kA.every(k => a[k] == b[k]);\n }\n});\n/**\nA facet used to register [language\ndata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt) providers.\n*/\nEditorState.languageData = languageData;\n/**\nFacet used to register change filters, which are called for each\ntransaction (unless explicitly\n[disabled](https://codemirror.net/6/docs/ref/#state.TransactionSpec.filter)), and can suppress\npart of the transaction's changes.\n\nSuch a function can return `true` to indicate that it doesn't\nwant to do anything, `false` to completely stop the changes in\nthe transaction, or a set of ranges in which changes should be\nsuppressed. Such ranges are represented as an array of numbers,\nwith each pair of two numbers indicating the start and end of a\nrange. So for example `[10, 20, 100, 110]` suppresses changes\nbetween 10 and 20, and between 100 and 110.\n*/\nEditorState.changeFilter = changeFilter;\n/**\nFacet used to register a hook that gets a chance to update or\nreplace transaction specs before they are applied. This will\nonly be applied for transactions that don't have\n[`filter`](https://codemirror.net/6/docs/ref/#state.TransactionSpec.filter) set to `false`. You\ncan either return a single transaction spec (possibly the input\ntransaction), or an array of specs (which will be combined in\nthe same way as the arguments to\n[`EditorState.update`](https://codemirror.net/6/docs/ref/#state.EditorState.update)).\n\nWhen possible, it is recommended to avoid accessing\n[`Transaction.state`](https://codemirror.net/6/docs/ref/#state.Transaction.state) in a filter,\nsince it will force creation of a state that will then be\ndiscarded again, if the transaction is actually filtered.\n\n(This functionality should be used with care. Indiscriminately\nmodifying transaction is likely to break something or degrade\nthe user experience.)\n*/\nEditorState.transactionFilter = transactionFilter;\n/**\nThis is a more limited form of\n[`transactionFilter`](https://codemirror.net/6/docs/ref/#state.EditorState^transactionFilter),\nwhich can only add\n[annotations](https://codemirror.net/6/docs/ref/#state.TransactionSpec.annotations) and\n[effects](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects). _But_, this type\nof filter runs even if the transaction has disabled regular\n[filtering](https://codemirror.net/6/docs/ref/#state.TransactionSpec.filter), making it suitable\nfor effects that don't need to touch the changes or selection,\nbut do want to process every transaction.\n\nExtenders run _after_ filters, when both are present.\n*/\nEditorState.transactionExtender = transactionExtender;\nCompartment.reconfigure = /*@__PURE__*/StateEffect.define();\n\n/**\nUtility function for combining behaviors to fill in a config\nobject from an array of provided configs. `defaults` should hold\ndefault values for all optional fields in `Config`.\n\nThe function will, by default, error\nwhen a field gets two values that aren't `===`-equal, but you can\nprovide combine functions per field to do something else.\n*/\nfunction combineConfig(configs, defaults, // Should hold only the optional properties of Config, but I haven't managed to express that\ncombine = {}) {\n let result = {};\n for (let config of configs)\n for (let key of Object.keys(config)) {\n let value = config[key], current = result[key];\n if (current === undefined)\n result[key] = value;\n else if (current === value || value === undefined) ; // No conflict\n else if (Object.hasOwnProperty.call(combine, key))\n result[key] = combine[key](current, value);\n else\n throw new Error(\"Config merge conflict for field \" + key);\n }\n for (let key in defaults)\n if (result[key] === undefined)\n result[key] = defaults[key];\n return result;\n}\n\n/**\nEach range is associated with a value, which must inherit from\nthis class.\n*/\nclass RangeValue {\n /**\n Compare this value with another value. Used when comparing\n rangesets. The default implementation compares by identity.\n Unless you are only creating a fixed number of unique instances\n of your value type, it is a good idea to implement this\n properly.\n */\n eq(other) { return this == other; }\n /**\n Create a [range](https://codemirror.net/6/docs/ref/#state.Range) with this value.\n */\n range(from, to = from) { return Range.create(from, to, this); }\n}\nRangeValue.prototype.startSide = RangeValue.prototype.endSide = 0;\nRangeValue.prototype.point = false;\nRangeValue.prototype.mapMode = MapMode.TrackDel;\nfunction cmpVal(a, b) {\n return a == b || a.constructor == b.constructor && a.eq(b);\n}\n/**\nA range associates a value with a range of positions.\n*/\nclass Range {\n constructor(\n /**\n The range's start position.\n */\n from, \n /**\n Its end position.\n */\n to, \n /**\n The value associated with this range.\n */\n value) {\n this.from = from;\n this.to = to;\n this.value = value;\n }\n /**\n @internal\n */\n static create(from, to, value) {\n return new Range(from, to, value);\n }\n}\nfunction cmpRange(a, b) {\n return a.from - b.from || a.value.startSide - b.value.startSide;\n}\nclass Chunk {\n constructor(from, to, value, \n // Chunks are marked with the largest point that occurs\n // in them (or -1 for no points), so that scans that are\n // only interested in points (such as the\n // heightmap-related logic) can skip range-only chunks.\n maxPoint) {\n this.from = from;\n this.to = to;\n this.value = value;\n this.maxPoint = maxPoint;\n }\n get length() { return this.to[this.to.length - 1]; }\n // Find the index of the given position and side. Use the ranges'\n // `from` pos when `end == false`, `to` when `end == true`.\n findIndex(pos, side, end, startAt = 0) {\n let arr = end ? this.to : this.from;\n for (let lo = startAt, hi = arr.length;;) {\n if (lo == hi)\n return lo;\n let mid = (lo + hi) >> 1;\n let diff = arr[mid] - pos || (end ? this.value[mid].endSide : this.value[mid].startSide) - side;\n if (mid == lo)\n return diff >= 0 ? lo : hi;\n if (diff >= 0)\n hi = mid;\n else\n lo = mid + 1;\n }\n }\n between(offset, from, to, f) {\n for (let i = this.findIndex(from, -1000000000 /* C.Far */, true), e = this.findIndex(to, 1000000000 /* C.Far */, false, i); i < e; i++)\n if (f(this.from[i] + offset, this.to[i] + offset, this.value[i]) === false)\n return false;\n }\n map(offset, changes) {\n let value = [], from = [], to = [], newPos = -1, maxPoint = -1;\n for (let i = 0; i < this.value.length; i++) {\n let val = this.value[i], curFrom = this.from[i] + offset, curTo = this.to[i] + offset, newFrom, newTo;\n if (curFrom == curTo) {\n let mapped = changes.mapPos(curFrom, val.startSide, val.mapMode);\n if (mapped == null)\n continue;\n newFrom = newTo = mapped;\n if (val.startSide != val.endSide) {\n newTo = changes.mapPos(curFrom, val.endSide);\n if (newTo < newFrom)\n continue;\n }\n }\n else {\n newFrom = changes.mapPos(curFrom, val.startSide);\n newTo = changes.mapPos(curTo, val.endSide);\n if (newFrom > newTo || newFrom == newTo && val.startSide > 0 && val.endSide <= 0)\n continue;\n }\n if ((newTo - newFrom || val.endSide - val.startSide) < 0)\n continue;\n if (newPos < 0)\n newPos = newFrom;\n if (val.point)\n maxPoint = Math.max(maxPoint, newTo - newFrom);\n value.push(val);\n from.push(newFrom - newPos);\n to.push(newTo - newPos);\n }\n return { mapped: value.length ? new Chunk(from, to, value, maxPoint) : null, pos: newPos };\n }\n}\n/**\nA range set stores a collection of [ranges](https://codemirror.net/6/docs/ref/#state.Range) in a\nway that makes them efficient to [map](https://codemirror.net/6/docs/ref/#state.RangeSet.map) and\n[update](https://codemirror.net/6/docs/ref/#state.RangeSet.update). This is an immutable data\nstructure.\n*/\nclass RangeSet {\n constructor(\n /**\n @internal\n */\n chunkPos, \n /**\n @internal\n */\n chunk, \n /**\n @internal\n */\n nextLayer, \n /**\n @internal\n */\n maxPoint) {\n this.chunkPos = chunkPos;\n this.chunk = chunk;\n this.nextLayer = nextLayer;\n this.maxPoint = maxPoint;\n }\n /**\n @internal\n */\n static create(chunkPos, chunk, nextLayer, maxPoint) {\n return new RangeSet(chunkPos, chunk, nextLayer, maxPoint);\n }\n /**\n @internal\n */\n get length() {\n let last = this.chunk.length - 1;\n return last < 0 ? 0 : Math.max(this.chunkEnd(last), this.nextLayer.length);\n }\n /**\n The number of ranges in the set.\n */\n get size() {\n if (this.isEmpty)\n return 0;\n let size = this.nextLayer.size;\n for (let chunk of this.chunk)\n size += chunk.value.length;\n return size;\n }\n /**\n @internal\n */\n chunkEnd(index) {\n return this.chunkPos[index] + this.chunk[index].length;\n }\n /**\n Update the range set, optionally adding new ranges or filtering\n out existing ones.\n \n (Note: The type parameter is just there as a kludge to work\n around TypeScript variance issues that prevented `RangeSet`\n from being a subtype of `RangeSet` when `X` is a subtype of\n `Y`.)\n */\n update(updateSpec) {\n let { add = [], sort = false, filterFrom = 0, filterTo = this.length } = updateSpec;\n let filter = updateSpec.filter;\n if (add.length == 0 && !filter)\n return this;\n if (sort)\n add = add.slice().sort(cmpRange);\n if (this.isEmpty)\n return add.length ? RangeSet.of(add) : this;\n let cur = new LayerCursor(this, null, -1).goto(0), i = 0, spill = [];\n let builder = new RangeSetBuilder();\n while (cur.value || i < add.length) {\n if (i < add.length && (cur.from - add[i].from || cur.startSide - add[i].value.startSide) >= 0) {\n let range = add[i++];\n if (!builder.addInner(range.from, range.to, range.value))\n spill.push(range);\n }\n else if (cur.rangeIndex == 1 && cur.chunkIndex < this.chunk.length &&\n (i == add.length || this.chunkEnd(cur.chunkIndex) < add[i].from) &&\n (!filter || filterFrom > this.chunkEnd(cur.chunkIndex) || filterTo < this.chunkPos[cur.chunkIndex]) &&\n builder.addChunk(this.chunkPos[cur.chunkIndex], this.chunk[cur.chunkIndex])) {\n cur.nextChunk();\n }\n else {\n if (!filter || filterFrom > cur.to || filterTo < cur.from || filter(cur.from, cur.to, cur.value)) {\n if (!builder.addInner(cur.from, cur.to, cur.value))\n spill.push(Range.create(cur.from, cur.to, cur.value));\n }\n cur.next();\n }\n }\n return builder.finishInner(this.nextLayer.isEmpty && !spill.length ? RangeSet.empty\n : this.nextLayer.update({ add: spill, filter, filterFrom, filterTo }));\n }\n /**\n Map this range set through a set of changes, return the new set.\n */\n map(changes) {\n if (changes.empty || this.isEmpty)\n return this;\n let chunks = [], chunkPos = [], maxPoint = -1;\n for (let i = 0; i < this.chunk.length; i++) {\n let start = this.chunkPos[i], chunk = this.chunk[i];\n let touch = changes.touchesRange(start, start + chunk.length);\n if (touch === false) {\n maxPoint = Math.max(maxPoint, chunk.maxPoint);\n chunks.push(chunk);\n chunkPos.push(changes.mapPos(start));\n }\n else if (touch === true) {\n let { mapped, pos } = chunk.map(start, changes);\n if (mapped) {\n maxPoint = Math.max(maxPoint, mapped.maxPoint);\n chunks.push(mapped);\n chunkPos.push(pos);\n }\n }\n }\n let next = this.nextLayer.map(changes);\n return chunks.length == 0 ? next : new RangeSet(chunkPos, chunks, next || RangeSet.empty, maxPoint);\n }\n /**\n Iterate over the ranges that touch the region `from` to `to`,\n calling `f` for each. There is no guarantee that the ranges will\n be reported in any specific order. When the callback returns\n `false`, iteration stops.\n */\n between(from, to, f) {\n if (this.isEmpty)\n return;\n for (let i = 0; i < this.chunk.length; i++) {\n let start = this.chunkPos[i], chunk = this.chunk[i];\n if (to >= start && from <= start + chunk.length &&\n chunk.between(start, from - start, to - start, f) === false)\n return;\n }\n this.nextLayer.between(from, to, f);\n }\n /**\n Iterate over the ranges in this set, in order, including all\n ranges that end at or after `from`.\n */\n iter(from = 0) {\n return HeapCursor.from([this]).goto(from);\n }\n /**\n @internal\n */\n get isEmpty() { return this.nextLayer == this; }\n /**\n Iterate over the ranges in a collection of sets, in order,\n starting from `from`.\n */\n static iter(sets, from = 0) {\n return HeapCursor.from(sets).goto(from);\n }\n /**\n Iterate over two groups of sets, calling methods on `comparator`\n to notify it of possible differences.\n */\n static compare(oldSets, newSets, \n /**\n This indicates how the underlying data changed between these\n ranges, and is needed to synchronize the iteration.\n */\n textDiff, comparator, \n /**\n Can be used to ignore all non-point ranges, and points below\n the given size. When -1, all ranges are compared.\n */\n minPointSize = -1) {\n let a = oldSets.filter(set => set.maxPoint > 0 || !set.isEmpty && set.maxPoint >= minPointSize);\n let b = newSets.filter(set => set.maxPoint > 0 || !set.isEmpty && set.maxPoint >= minPointSize);\n let sharedChunks = findSharedChunks(a, b, textDiff);\n let sideA = new SpanCursor(a, sharedChunks, minPointSize);\n let sideB = new SpanCursor(b, sharedChunks, minPointSize);\n textDiff.iterGaps((fromA, fromB, length) => compare(sideA, fromA, sideB, fromB, length, comparator));\n if (textDiff.empty && textDiff.length == 0)\n compare(sideA, 0, sideB, 0, 0, comparator);\n }\n /**\n Compare the contents of two groups of range sets, returning true\n if they are equivalent in the given range.\n */\n static eq(oldSets, newSets, from = 0, to) {\n if (to == null)\n to = 1000000000 /* C.Far */ - 1;\n let a = oldSets.filter(set => !set.isEmpty && newSets.indexOf(set) < 0);\n let b = newSets.filter(set => !set.isEmpty && oldSets.indexOf(set) < 0);\n if (a.length != b.length)\n return false;\n if (!a.length)\n return true;\n let sharedChunks = findSharedChunks(a, b);\n let sideA = new SpanCursor(a, sharedChunks, 0).goto(from), sideB = new SpanCursor(b, sharedChunks, 0).goto(from);\n for (;;) {\n if (sideA.to != sideB.to ||\n !sameValues(sideA.active, sideB.active) ||\n sideA.point && (!sideB.point || !cmpVal(sideA.point, sideB.point)))\n return false;\n if (sideA.to > to)\n return true;\n sideA.next();\n sideB.next();\n }\n }\n /**\n Iterate over a group of range sets at the same time, notifying\n the iterator about the ranges covering every given piece of\n content. Returns the open count (see\n [`SpanIterator.span`](https://codemirror.net/6/docs/ref/#state.SpanIterator.span)) at the end\n of the iteration.\n */\n static spans(sets, from, to, iterator, \n /**\n When given and greater than -1, only points of at least this\n size are taken into account.\n */\n minPointSize = -1) {\n let cursor = new SpanCursor(sets, null, minPointSize).goto(from), pos = from;\n let openRanges = cursor.openStart;\n for (;;) {\n let curTo = Math.min(cursor.to, to);\n if (cursor.point) {\n let active = cursor.activeForPoint(cursor.to);\n let openCount = cursor.pointFrom < from ? active.length + 1\n : cursor.point.startSide < 0 ? active.length\n : Math.min(active.length, openRanges);\n iterator.point(pos, curTo, cursor.point, active, openCount, cursor.pointRank);\n openRanges = Math.min(cursor.openEnd(curTo), active.length);\n }\n else if (curTo > pos) {\n iterator.span(pos, curTo, cursor.active, openRanges);\n openRanges = cursor.openEnd(curTo);\n }\n if (cursor.to > to)\n return openRanges + (cursor.point && cursor.to > to ? 1 : 0);\n pos = cursor.to;\n cursor.next();\n }\n }\n /**\n Create a range set for the given range or array of ranges. By\n default, this expects the ranges to be _sorted_ (by start\n position and, if two start at the same position,\n `value.startSide`). You can pass `true` as second argument to\n cause the method to sort them.\n */\n static of(ranges, sort = false) {\n let build = new RangeSetBuilder();\n for (let range of ranges instanceof Range ? [ranges] : sort ? lazySort(ranges) : ranges)\n build.add(range.from, range.to, range.value);\n return build.finish();\n }\n /**\n Join an array of range sets into a single set.\n */\n static join(sets) {\n if (!sets.length)\n return RangeSet.empty;\n let result = sets[sets.length - 1];\n for (let i = sets.length - 2; i >= 0; i--) {\n for (let layer = sets[i]; layer != RangeSet.empty; layer = layer.nextLayer)\n result = new RangeSet(layer.chunkPos, layer.chunk, result, Math.max(layer.maxPoint, result.maxPoint));\n }\n return result;\n }\n}\n/**\nThe empty set of ranges.\n*/\nRangeSet.empty = /*@__PURE__*/new RangeSet([], [], null, -1);\nfunction lazySort(ranges) {\n if (ranges.length > 1)\n for (let prev = ranges[0], i = 1; i < ranges.length; i++) {\n let cur = ranges[i];\n if (cmpRange(prev, cur) > 0)\n return ranges.slice().sort(cmpRange);\n prev = cur;\n }\n return ranges;\n}\nRangeSet.empty.nextLayer = RangeSet.empty;\n/**\nA range set builder is a data structure that helps build up a\n[range set](https://codemirror.net/6/docs/ref/#state.RangeSet) directly, without first allocating\nan array of [`Range`](https://codemirror.net/6/docs/ref/#state.Range) objects.\n*/\nclass RangeSetBuilder {\n finishChunk(newArrays) {\n this.chunks.push(new Chunk(this.from, this.to, this.value, this.maxPoint));\n this.chunkPos.push(this.chunkStart);\n this.chunkStart = -1;\n this.setMaxPoint = Math.max(this.setMaxPoint, this.maxPoint);\n this.maxPoint = -1;\n if (newArrays) {\n this.from = [];\n this.to = [];\n this.value = [];\n }\n }\n /**\n Create an empty builder.\n */\n constructor() {\n this.chunks = [];\n this.chunkPos = [];\n this.chunkStart = -1;\n this.last = null;\n this.lastFrom = -1000000000 /* C.Far */;\n this.lastTo = -1000000000 /* C.Far */;\n this.from = [];\n this.to = [];\n this.value = [];\n this.maxPoint = -1;\n this.setMaxPoint = -1;\n this.nextLayer = null;\n }\n /**\n Add a range. Ranges should be added in sorted (by `from` and\n `value.startSide`) order.\n */\n add(from, to, value) {\n if (!this.addInner(from, to, value))\n (this.nextLayer || (this.nextLayer = new RangeSetBuilder)).add(from, to, value);\n }\n /**\n @internal\n */\n addInner(from, to, value) {\n let diff = from - this.lastTo || value.startSide - this.last.endSide;\n if (diff <= 0 && (from - this.lastFrom || value.startSide - this.last.startSide) < 0)\n throw new Error(\"Ranges must be added sorted by `from` position and `startSide`\");\n if (diff < 0)\n return false;\n if (this.from.length == 250 /* C.ChunkSize */)\n this.finishChunk(true);\n if (this.chunkStart < 0)\n this.chunkStart = from;\n this.from.push(from - this.chunkStart);\n this.to.push(to - this.chunkStart);\n this.last = value;\n this.lastFrom = from;\n this.lastTo = to;\n this.value.push(value);\n if (value.point)\n this.maxPoint = Math.max(this.maxPoint, to - from);\n return true;\n }\n /**\n @internal\n */\n addChunk(from, chunk) {\n if ((from - this.lastTo || chunk.value[0].startSide - this.last.endSide) < 0)\n return false;\n if (this.from.length)\n this.finishChunk(true);\n this.setMaxPoint = Math.max(this.setMaxPoint, chunk.maxPoint);\n this.chunks.push(chunk);\n this.chunkPos.push(from);\n let last = chunk.value.length - 1;\n this.last = chunk.value[last];\n this.lastFrom = chunk.from[last] + from;\n this.lastTo = chunk.to[last] + from;\n return true;\n }\n /**\n Finish the range set. Returns the new set. The builder can't be\n used anymore after this has been called.\n */\n finish() { return this.finishInner(RangeSet.empty); }\n /**\n @internal\n */\n finishInner(next) {\n if (this.from.length)\n this.finishChunk(false);\n if (this.chunks.length == 0)\n return next;\n let result = RangeSet.create(this.chunkPos, this.chunks, this.nextLayer ? this.nextLayer.finishInner(next) : next, this.setMaxPoint);\n this.from = null; // Make sure further `add` calls produce errors\n return result;\n }\n}\nfunction findSharedChunks(a, b, textDiff) {\n let inA = new Map();\n for (let set of a)\n for (let i = 0; i < set.chunk.length; i++)\n if (set.chunk[i].maxPoint <= 0)\n inA.set(set.chunk[i], set.chunkPos[i]);\n let shared = new Set();\n for (let set of b)\n for (let i = 0; i < set.chunk.length; i++) {\n let known = inA.get(set.chunk[i]);\n if (known != null && (textDiff ? textDiff.mapPos(known) : known) == set.chunkPos[i] &&\n !(textDiff === null || textDiff === void 0 ? void 0 : textDiff.touchesRange(known, known + set.chunk[i].length)))\n shared.add(set.chunk[i]);\n }\n return shared;\n}\nclass LayerCursor {\n constructor(layer, skip, minPoint, rank = 0) {\n this.layer = layer;\n this.skip = skip;\n this.minPoint = minPoint;\n this.rank = rank;\n }\n get startSide() { return this.value ? this.value.startSide : 0; }\n get endSide() { return this.value ? this.value.endSide : 0; }\n goto(pos, side = -1000000000 /* C.Far */) {\n this.chunkIndex = this.rangeIndex = 0;\n this.gotoInner(pos, side, false);\n return this;\n }\n gotoInner(pos, side, forward) {\n while (this.chunkIndex < this.layer.chunk.length) {\n let next = this.layer.chunk[this.chunkIndex];\n if (!(this.skip && this.skip.has(next) ||\n this.layer.chunkEnd(this.chunkIndex) < pos ||\n next.maxPoint < this.minPoint))\n break;\n this.chunkIndex++;\n forward = false;\n }\n if (this.chunkIndex < this.layer.chunk.length) {\n let rangeIndex = this.layer.chunk[this.chunkIndex].findIndex(pos - this.layer.chunkPos[this.chunkIndex], side, true);\n if (!forward || this.rangeIndex < rangeIndex)\n this.setRangeIndex(rangeIndex);\n }\n this.next();\n }\n forward(pos, side) {\n if ((this.to - pos || this.endSide - side) < 0)\n this.gotoInner(pos, side, true);\n }\n next() {\n for (;;) {\n if (this.chunkIndex == this.layer.chunk.length) {\n this.from = this.to = 1000000000 /* C.Far */;\n this.value = null;\n break;\n }\n else {\n let chunkPos = this.layer.chunkPos[this.chunkIndex], chunk = this.layer.chunk[this.chunkIndex];\n let from = chunkPos + chunk.from[this.rangeIndex];\n this.from = from;\n this.to = chunkPos + chunk.to[this.rangeIndex];\n this.value = chunk.value[this.rangeIndex];\n this.setRangeIndex(this.rangeIndex + 1);\n if (this.minPoint < 0 || this.value.point && this.to - this.from >= this.minPoint)\n break;\n }\n }\n }\n setRangeIndex(index) {\n if (index == this.layer.chunk[this.chunkIndex].value.length) {\n this.chunkIndex++;\n if (this.skip) {\n while (this.chunkIndex < this.layer.chunk.length && this.skip.has(this.layer.chunk[this.chunkIndex]))\n this.chunkIndex++;\n }\n this.rangeIndex = 0;\n }\n else {\n this.rangeIndex = index;\n }\n }\n nextChunk() {\n this.chunkIndex++;\n this.rangeIndex = 0;\n this.next();\n }\n compare(other) {\n return this.from - other.from || this.startSide - other.startSide || this.rank - other.rank ||\n this.to - other.to || this.endSide - other.endSide;\n }\n}\nclass HeapCursor {\n constructor(heap) {\n this.heap = heap;\n }\n static from(sets, skip = null, minPoint = -1) {\n let heap = [];\n for (let i = 0; i < sets.length; i++) {\n for (let cur = sets[i]; !cur.isEmpty; cur = cur.nextLayer) {\n if (cur.maxPoint >= minPoint)\n heap.push(new LayerCursor(cur, skip, minPoint, i));\n }\n }\n return heap.length == 1 ? heap[0] : new HeapCursor(heap);\n }\n get startSide() { return this.value ? this.value.startSide : 0; }\n goto(pos, side = -1000000000 /* C.Far */) {\n for (let cur of this.heap)\n cur.goto(pos, side);\n for (let i = this.heap.length >> 1; i >= 0; i--)\n heapBubble(this.heap, i);\n this.next();\n return this;\n }\n forward(pos, side) {\n for (let cur of this.heap)\n cur.forward(pos, side);\n for (let i = this.heap.length >> 1; i >= 0; i--)\n heapBubble(this.heap, i);\n if ((this.to - pos || this.value.endSide - side) < 0)\n this.next();\n }\n next() {\n if (this.heap.length == 0) {\n this.from = this.to = 1000000000 /* C.Far */;\n this.value = null;\n this.rank = -1;\n }\n else {\n let top = this.heap[0];\n this.from = top.from;\n this.to = top.to;\n this.value = top.value;\n this.rank = top.rank;\n if (top.value)\n top.next();\n heapBubble(this.heap, 0);\n }\n }\n}\nfunction heapBubble(heap, index) {\n for (let cur = heap[index];;) {\n let childIndex = (index << 1) + 1;\n if (childIndex >= heap.length)\n break;\n let child = heap[childIndex];\n if (childIndex + 1 < heap.length && child.compare(heap[childIndex + 1]) >= 0) {\n child = heap[childIndex + 1];\n childIndex++;\n }\n if (cur.compare(child) < 0)\n break;\n heap[childIndex] = cur;\n heap[index] = child;\n index = childIndex;\n }\n}\nclass SpanCursor {\n constructor(sets, skip, minPoint) {\n this.minPoint = minPoint;\n this.active = [];\n this.activeTo = [];\n this.activeRank = [];\n this.minActive = -1;\n // A currently active point range, if any\n this.point = null;\n this.pointFrom = 0;\n this.pointRank = 0;\n this.to = -1000000000 /* C.Far */;\n this.endSide = 0;\n // The amount of open active ranges at the start of the iterator.\n // Not including points.\n this.openStart = -1;\n this.cursor = HeapCursor.from(sets, skip, minPoint);\n }\n goto(pos, side = -1000000000 /* C.Far */) {\n this.cursor.goto(pos, side);\n this.active.length = this.activeTo.length = this.activeRank.length = 0;\n this.minActive = -1;\n this.to = pos;\n this.endSide = side;\n this.openStart = -1;\n this.next();\n return this;\n }\n forward(pos, side) {\n while (this.minActive > -1 && (this.activeTo[this.minActive] - pos || this.active[this.minActive].endSide - side) < 0)\n this.removeActive(this.minActive);\n this.cursor.forward(pos, side);\n }\n removeActive(index) {\n remove(this.active, index);\n remove(this.activeTo, index);\n remove(this.activeRank, index);\n this.minActive = findMinIndex(this.active, this.activeTo);\n }\n addActive(trackOpen) {\n let i = 0, { value, to, rank } = this.cursor;\n // Organize active marks by rank first, then by size\n while (i < this.activeRank.length && (rank - this.activeRank[i] || to - this.activeTo[i]) > 0)\n i++;\n insert(this.active, i, value);\n insert(this.activeTo, i, to);\n insert(this.activeRank, i, rank);\n if (trackOpen)\n insert(trackOpen, i, this.cursor.from);\n this.minActive = findMinIndex(this.active, this.activeTo);\n }\n // After calling this, if `this.point` != null, the next range is a\n // point. Otherwise, it's a regular range, covered by `this.active`.\n next() {\n let from = this.to, wasPoint = this.point;\n this.point = null;\n let trackOpen = this.openStart < 0 ? [] : null;\n for (;;) {\n let a = this.minActive;\n if (a > -1 && (this.activeTo[a] - this.cursor.from || this.active[a].endSide - this.cursor.startSide) < 0) {\n if (this.activeTo[a] > from) {\n this.to = this.activeTo[a];\n this.endSide = this.active[a].endSide;\n break;\n }\n this.removeActive(a);\n if (trackOpen)\n remove(trackOpen, a);\n }\n else if (!this.cursor.value) {\n this.to = this.endSide = 1000000000 /* C.Far */;\n break;\n }\n else if (this.cursor.from > from) {\n this.to = this.cursor.from;\n this.endSide = this.cursor.startSide;\n break;\n }\n else {\n let nextVal = this.cursor.value;\n if (!nextVal.point) { // Opening a range\n this.addActive(trackOpen);\n this.cursor.next();\n }\n else if (wasPoint && this.cursor.to == this.to && this.cursor.from < this.cursor.to) {\n // Ignore any non-empty points that end precisely at the end of the prev point\n this.cursor.next();\n }\n else { // New point\n this.point = nextVal;\n this.pointFrom = this.cursor.from;\n this.pointRank = this.cursor.rank;\n this.to = this.cursor.to;\n this.endSide = nextVal.endSide;\n this.cursor.next();\n this.forward(this.to, this.endSide);\n break;\n }\n }\n }\n if (trackOpen) {\n this.openStart = 0;\n for (let i = trackOpen.length - 1; i >= 0 && trackOpen[i] < from; i--)\n this.openStart++;\n }\n }\n activeForPoint(to) {\n if (!this.active.length)\n return this.active;\n let active = [];\n for (let i = this.active.length - 1; i >= 0; i--) {\n if (this.activeRank[i] < this.pointRank)\n break;\n if (this.activeTo[i] > to || this.activeTo[i] == to && this.active[i].endSide >= this.point.endSide)\n active.push(this.active[i]);\n }\n return active.reverse();\n }\n openEnd(to) {\n let open = 0;\n for (let i = this.activeTo.length - 1; i >= 0 && this.activeTo[i] > to; i--)\n open++;\n return open;\n }\n}\nfunction compare(a, startA, b, startB, length, comparator) {\n a.goto(startA);\n b.goto(startB);\n let endB = startB + length;\n let pos = startB, dPos = startB - startA;\n let bounds = !!comparator.boundChange;\n for (let boundChange = false;;) {\n let dEnd = (a.to + dPos) - b.to, diff = dEnd || a.endSide - b.endSide;\n let end = diff < 0 ? a.to + dPos : b.to, clipEnd = Math.min(end, endB);\n let point = a.point || b.point;\n if (point) {\n if (!(a.point && b.point && cmpVal(a.point, b.point) &&\n sameValues(a.activeForPoint(a.to), b.activeForPoint(b.to))))\n comparator.comparePoint(pos, clipEnd, a.point, b.point);\n boundChange = false;\n }\n else {\n if (boundChange)\n comparator.boundChange(pos);\n if (clipEnd > pos && !sameValues(a.active, b.active))\n comparator.compareRange(pos, clipEnd, a.active, b.active);\n if (bounds && clipEnd < endB && (dEnd || a.openEnd(end) != b.openEnd(end)))\n boundChange = true;\n }\n if (end > endB)\n break;\n pos = end;\n if (diff <= 0)\n a.next();\n if (diff >= 0)\n b.next();\n }\n}\nfunction sameValues(a, b) {\n if (a.length != b.length)\n return false;\n for (let i = 0; i < a.length; i++)\n if (a[i] != b[i] && !cmpVal(a[i], b[i]))\n return false;\n return true;\n}\nfunction remove(array, index) {\n for (let i = index, e = array.length - 1; i < e; i++)\n array[i] = array[i + 1];\n array.pop();\n}\nfunction insert(array, index, value) {\n for (let i = array.length - 1; i >= index; i--)\n array[i + 1] = array[i];\n array[index] = value;\n}\nfunction findMinIndex(value, array) {\n let found = -1, foundPos = 1000000000 /* C.Far */;\n for (let i = 0; i < array.length; i++)\n if ((array[i] - foundPos || value[i].endSide - value[found].endSide) < 0) {\n found = i;\n foundPos = array[i];\n }\n return found;\n}\n\n/**\nCount the column position at the given offset into the string,\ntaking extending characters and tab size into account.\n*/\nfunction countColumn(string, tabSize, to = string.length) {\n let n = 0;\n for (let i = 0; i < to && i < string.length;) {\n if (string.charCodeAt(i) == 9) {\n n += tabSize - (n % tabSize);\n i++;\n }\n else {\n n++;\n i = findClusterBreak(string, i);\n }\n }\n return n;\n}\n/**\nFind the offset that corresponds to the given column position in a\nstring, taking extending characters and tab size into account. By\ndefault, the string length is returned when it is too short to\nreach the column. Pass `strict` true to make it return -1 in that\nsituation.\n*/\nfunction findColumn(string, col, tabSize, strict) {\n for (let i = 0, n = 0;;) {\n if (n >= col)\n return i;\n if (i == string.length)\n break;\n n += string.charCodeAt(i) == 9 ? tabSize - (n % tabSize) : 1;\n i = findClusterBreak(string, i);\n }\n return strict === true ? -1 : string.length;\n}\n\nexport { Annotation, AnnotationType, ChangeDesc, ChangeSet, CharCategory, Compartment, EditorSelection, EditorState, Facet, Line, MapMode, Prec, Range, RangeSet, RangeSetBuilder, RangeValue, SelectionRange, StateEffect, StateEffectType, StateField, Text, Transaction, codePointAt, codePointSize, combineConfig, countColumn, findClusterBreak, findColumn, fromCodePoint };\n", "const C = \"\\u037c\"\nconst COUNT = typeof Symbol == \"undefined\" ? \"__\" + C : Symbol.for(C)\nconst SET = typeof Symbol == \"undefined\" ? \"__styleSet\" + Math.floor(Math.random() * 1e8) : Symbol(\"styleSet\")\nconst top = typeof globalThis != \"undefined\" ? globalThis : typeof window != \"undefined\" ? window : {}\n\n// :: - Style modules encapsulate a set of CSS rules defined from\n// JavaScript. Their definitions are only available in a given DOM\n// root after it has been _mounted_ there with `StyleModule.mount`.\n//\n// Style modules should be created once and stored somewhere, as\n// opposed to re-creating them every time you need them. The amount of\n// CSS rules generated for a given DOM root is bounded by the amount\n// of style modules that were used. So to avoid leaking rules, don't\n// create these dynamically, but treat them as one-time allocations.\nexport class StyleModule {\n // :: (Object diff --git a/datasets/detail/index.html b/datasets/detail/index.html new file mode 100644 index 0000000..a419aa9 --- /dev/null +++ b/datasets/detail/index.html @@ -0,0 +1,118 @@ +--- +layout: default +permalink: /datasets/detail/ +title: "Dataset — GeneratedArt" +meta_title: "Dataset — GeneratedArt" +meta_description: | + A dataset on GeneratedArt — curated images and video, and the AI art + models trained from it. +header_image: "/assets/images/art/bg31.webp" +--- + +{% comment %} + Query-string routed (?slug=X), matching /models/detail/?slug=X — Jekyll + can't statically generate a page per D1 row. +{% endcomment %} + +{% include layouts/nav/nav-10.html default_logo="black" drop_search=true %} + +
      +
      +
      +
      +

      …

      +

      Loading…

      +

      +
      + +
      +
      +

      Items

      +
      +

      Drag images or video here, or click to choose files.

      + +
      +

      + +
      + +

      Train a model

      +

      Needs at least 5 items to train.

      +
      + +
      +
      + + +
      +
      + + +
      +
      +
      + + +
      + +
      +
      + + +
      +
      +
      +
      + + + + + + +{% include layouts/footer/footer-1.html %} diff --git a/datasets/index.html b/datasets/index.html new file mode 100644 index 0000000..2adbfae --- /dev/null +++ b/datasets/index.html @@ -0,0 +1,110 @@ +--- +layout: default +permalink: /datasets/ +title: "Dataset Library — GeneratedArt" +meta_title: "Dataset Library — GeneratedArt" +meta_description: | + Your curated images and video, private by default — the source + material for training custom AI art models on GeneratedArt. +header_image: "/assets/images/art/bg31.webp" +--- + +{% include layouts/nav/nav-10.html default_logo="black" drop_search=true %} + +
      +
      +
      +
      +
      +

      Dataset Library

      +

      Your own images and video, private by default. Only the models you publish are public.

      +
      + +
      + +
      +
      Loading…
      +
      + + +
      + +
      +

      You need to sign in first.

      +

      Connect your wallet to see your datasets.

      + Connect wallet +
      +
      +
      + + + + + + +{% include layouts/footer/footer-1.html %} diff --git a/workers/api/client/dashboard.ts b/workers/api/client/dashboard.ts index c3c2e7f..5f9a749 100644 --- a/workers/api/client/dashboard.ts +++ b/workers/api/client/dashboard.ts @@ -263,8 +263,46 @@ const GADashboard = { if (modalRoot && !modalRoot.innerHTML.trim()) modalRoot.innerHTML = renderModal(); attachEvents(cfg); await loadProjects(cfg); + await loadWorkspaceTiles(cfg); }, }; +/** + * Workspace tie-together (design brief Step 9, simplified): quiet stat + * tiles linking to Datasets/Models/Wallet from the project dashboard. + * Each is best-effort — a failed fetch leaves that tile's "…" rather + * than blocking the rest of the dashboard. + */ +async function loadWorkspaceTiles(cfg: DashboardConfig): Promise { + const datasetsEl = cfg.rootEl.querySelector("#ga-tile-datasets"); + const modelsEl = cfg.rootEl.querySelector("#ga-tile-models"); + const walletEl = cfg.rootEl.querySelector("#ga-tile-wallet"); + + if (datasetsEl) { + try { + const data = await fetchJson<{ datasets: unknown[] }>(`${cfg.apiBase}/v1/datasets/mine`); + datasetsEl.textContent = String(data.datasets.length); + } catch { + datasetsEl.textContent = "—"; + } + } + if (modelsEl) { + try { + const data = await fetchJson<{ models: unknown[] }>(`${cfg.apiBase}/v1/models/mine`); + modelsEl.textContent = String(data.models.length); + } catch { + modelsEl.textContent = "—"; + } + } + if (walletEl) { + try { + const data = await fetchJson<{ balance: number }>(`${cfg.apiBase}/v1/tokens/account`); + walletEl.textContent = `${data.balance.toLocaleString()} tokens`; + } catch { + walletEl.textContent = "—"; + } + } +} + window.GADashboard = GADashboard; export default GADashboard; diff --git a/workers/api/client/datasets.ts b/workers/api/client/datasets.ts new file mode 100644 index 0000000..36aaccc --- /dev/null +++ b/workers/api/client/datasets.ts @@ -0,0 +1,436 @@ +/** + * /datasets/ — the Dataset Library: a creator's own curated + * images/video, private by default. + * /datasets/detail/?slug=X — one dataset: item grid, upload/import, + * and the train-a-model flow that turns it into a fal_custom render + * model version. + * + * Two Jekyll pages share this module (query-string routed like + * /models/detail/?slug=X) — mount() reads cfg.mode to pick which one. + */ +import { installClientErrorReporter } from "./lib/clientErrors"; +import { TRAINABLE_BASE_MODELS } from "./lib/trainableBaseModels"; + +interface DatasetsConfig { + apiBase: string; + rootEl: HTMLElement; + mode: "library" | "detail"; + onUnauthenticated?: () => void; +} + +interface Dataset { + id: number; + slug: string; + title: string; + description: string | null; + rights_declaration: string; + visibility: string; + item_count: number; + created_at: number; + updated_at: number; +} + +interface DatasetItem { + id: number; + kind: string; + caption: string | null; + byte_size: number; + width: number | null; + height: number | null; + duration_seconds: number | null; + status: string; + flag_reason: string | null; + created_at: number; +} + +interface TrainingJob { + id: number; + dataset_id: number; + base_model: string; + training_method: string; + price_tokens: number; + render_price_tokens: number; + status: string; + model_id: number | null; + model_version_id: number | null; + error_code: string | null; + created_at: number; + started_at: number | null; + finished_at: number | null; +} + +function escapeHtml(s: string): string { + return s.replace(/[&<>"']/g, (ch) => { + switch (ch) { + case "&": return "&"; + case "<": return "<"; + case ">": return ">"; + case '"': return """; + default: return "'"; + } + }); +} + +async function fetchJson(url: string, init?: RequestInit): Promise { + const res = await fetch(url, { credentials: "include", ...init }); + if (!res.ok) { + let detail = ""; + try { detail = JSON.stringify(await res.json()); } catch {} + throw new Error(`${res.status}: ${detail || res.statusText}`); + } + return (await res.json()) as T; +} + +function readFileAsDataUrl(file: File): Promise { + return new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.onload = () => resolve(reader.result as string); + reader.onerror = () => reject(reader.error ?? new Error("file read failed")); + reader.readAsDataURL(file); + }); +} + +const RIGHTS_LABELS: Record = { + own: "My own work", + licensed: "Licensed to me", + public_domain: "Public domain / CC0", +}; + +function renderDatasetCard(d: Dataset): string { + return ` + +
      +

      ${escapeHtml(d.title)}

      +

      ${escapeHtml(d.description || "No description yet.")}

      +

      ${d.item_count} item${d.item_count === 1 ? "" : "s"} · ${escapeHtml(RIGHTS_LABELS[d.rights_declaration] || d.rights_declaration)} · ${escapeHtml(d.visibility)}

      +
      +
      `; +} + +// --------------------------------------------------------------------------- +// Library page +// --------------------------------------------------------------------------- + +class LibraryPage { + private cfg!: DatasetsConfig; + + async mount(cfg: DatasetsConfig): Promise { + this.cfg = cfg; + let me: unknown = null; + try { + me = await fetchJson(`${cfg.apiBase}/v1/me`); + } catch { + me = null; + } + if (!me) { + cfg.onUnauthenticated?.(); + return; + } + await this.loadDatasets(); + this.attachEvents(); + } + + private async loadDatasets(): Promise { + const el = this.cfg.rootEl.querySelector("#ga-datasets-list"); + if (!el) return; + try { + const data = await fetchJson<{ datasets: Dataset[] }>(`${this.cfg.apiBase}/v1/datasets/mine`); + el.innerHTML = data.datasets.length + ? data.datasets.map(renderDatasetCard).join("") + : `

      No datasets yet. Your source material stays private — only the models you publish are public.

      `; + } catch (err) { + el.innerHTML = `
      Failed to load: ${escapeHtml(String(err))}
      `; + } + } + + private attachEvents(): void { + const form = this.cfg.rootEl.querySelector("#ga-new-dataset-form"); + form?.addEventListener("submit", async (ev) => { + ev.preventDefault(); + const errEl = this.cfg.rootEl.querySelector("#ga-new-dataset-error"); + errEl?.classList.add("d-none"); + const title = this.cfg.rootEl.querySelector("#ga-nd-title")!.value.trim(); + const description = this.cfg.rootEl.querySelector("#ga-nd-description")!.value.trim(); + const rights = this.cfg.rootEl.querySelector("#ga-nd-rights")!.value; + try { + const data = await fetchJson<{ dataset: Dataset }>(`${this.cfg.apiBase}/v1/datasets`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ title, description: description || undefined, rights_declaration: rights }), + }); + window.location.href = `/datasets/detail/?slug=${encodeURIComponent(data.dataset.slug)}`; + } catch (err) { + if (errEl) { + errEl.textContent = `Couldn't create dataset: ${String(err)}`; + errEl.classList.remove("d-none"); + } + } + }); + } +} + +// --------------------------------------------------------------------------- +// Detail page +// --------------------------------------------------------------------------- + +class DetailPage { + private cfg!: DatasetsConfig; + private slug = ""; + private dataset: Dataset | null = null; + private pollTimer: ReturnType | null = null; + + async mount(cfg: DatasetsConfig): Promise { + this.cfg = cfg; + const params = new URLSearchParams(window.location.search); + this.slug = params.get("slug") || ""; + if (!this.slug) { + cfg.rootEl.innerHTML = `

      Bad URL — dataset pages look like /datasets/detail/?slug=your-dataset.

      `; + return; + } + try { + const data = await fetchJson<{ dataset: Dataset }>(`${cfg.apiBase}/v1/datasets/${encodeURIComponent(this.slug)}`); + this.dataset = data.dataset; + } catch (err) { + const status = (err as Error).message.startsWith("404") ? 404 : 0; + if (status === 404) { + cfg.onUnauthenticated?.(); + return; + } + cfg.rootEl.innerHTML = `

      Failed to load dataset: ${escapeHtml(String(err))}

      `; + return; + } + + this.renderHeader(); + this.populateBaseModelOptions(); + await this.loadItems(); + await this.loadTrainingJobs(); + this.attachEvents(); + } + + private renderHeader(): void { + const d = this.dataset!; + const root = this.cfg.rootEl; + root.querySelector("#ga-dataset-title")!.textContent = d.title; + root.querySelector("#ga-dataset-desc")!.textContent = d.description || "No curatorial statement yet."; + root.querySelector("#ga-dataset-meta")!.textContent = + `${d.item_count} item${d.item_count === 1 ? "" : "s"} · ${RIGHTS_LABELS[d.rights_declaration] || d.rights_declaration} · ${d.visibility}`; + const trainBtn = root.querySelector("#ga-train-submit"); + if (trainBtn) trainBtn.disabled = d.item_count < 5; + const trainHint = root.querySelector("#ga-train-min-hint"); + if (trainHint) trainHint.classList.toggle("d-none", d.item_count >= 5); + } + + private populateBaseModelOptions(): void { + const sel = this.cfg.rootEl.querySelector("#ga-train-base-model"); + if (!sel) return; + sel.innerHTML = Object.entries(TRAINABLE_BASE_MODELS) + .map(([key, base]) => ``) + .join(""); + } + + private async loadItems(): Promise { + const grid = this.cfg.rootEl.querySelector("#ga-dataset-items"); + if (!grid) return; + try { + const data = await fetchJson<{ items: DatasetItem[] }>( + `${this.cfg.apiBase}/v1/datasets/${encodeURIComponent(this.slug)}/items?limit=100`, + ); + grid.innerHTML = data.items.length + ? data.items.map((i) => this.renderItem(i)).join("") + : `

      No items yet — drop images or video below.

      `; + } catch (err) { + grid.innerHTML = `
      Failed to load items: ${escapeHtml(String(err))}
      `; + } + } + + private renderItem(i: DatasetItem): string { + const fileUrl = `${this.cfg.apiBase}/v1/datasets/${encodeURIComponent(this.slug)}/items/${i.id}/file`; + const flagged = i.status === "flagged"; + const thumb = i.kind === "image" + ? `${escapeHtml(i.caption || ` + : ``; + return ` +
      + ${thumb} + ${flagged ? `

      ${escapeHtml(i.flag_reason || "flagged")}

      ` : ""} + +
      `; + } + + private async loadTrainingJobs(): Promise { + const el = this.cfg.rootEl.querySelector("#ga-training-jobs"); + if (!el) return; + try { + const data = await fetchJson<{ jobs: TrainingJob[] }>( + `${this.cfg.apiBase}/v1/datasets/${encodeURIComponent(this.slug)}/training`, + ); + el.innerHTML = data.jobs.length + ? data.jobs.map((j) => this.renderTrainingJob(j)).join("") + : `

      No training runs yet.

      `; + // Poll while any job is still in flight — training is genuinely + // async at the provider (minutes to hours in production; instant + // under TRAINING_MOCK). + const inFlight = data.jobs.some((j) => j.status === "queued" || j.status === "training"); + if (inFlight && !this.pollTimer) { + this.pollTimer = setInterval(() => void this.loadTrainingJobs(), 4000); + } else if (!inFlight && this.pollTimer) { + clearInterval(this.pollTimer); + this.pollTimer = null; + } + } catch (err) { + el.innerHTML = `
      Failed to load: ${escapeHtml(String(err))}
      `; + } + } + + private renderTrainingJob(j: TrainingJob): string { + const base = TRAINABLE_BASE_MODELS[j.base_model]?.label ?? j.base_model; + const when = new Date(j.created_at * 1000).toLocaleString(); + let statusLine: string; + if (j.status === "succeeded" && j.model_id) { + statusLine = `View model →`; + } else if (j.status === "failed") { + statusLine = `Failed (${escapeHtml(j.error_code || "unknown")}) — ${j.price_tokens} tokens refunded`; + } else { + statusLine = "In progress…"; + } + return ` +
    • +
      + ${escapeHtml(base)} · ${escapeHtml(j.training_method)} + ${escapeHtml(j.status)} +
      +

      ${escapeHtml(when)} · ${statusLine}

      +
    • `; + } + + private feedback(id: string, msg: string): void { + const el = this.cfg.rootEl.querySelector(id); + if (el) el.textContent = msg; + } + + private async uploadFiles(files: FileList): Promise { + this.feedback("#ga-upload-feedback", `Uploading ${files.length} item(s)…`); + let ok = 0; + let dup = 0; + let failed = 0; + for (const file of Array.from(files)) { + try { + const dataUrl = await readFileAsDataUrl(file); + const res = await fetch( + `${this.cfg.apiBase}/v1/datasets/${encodeURIComponent(this.slug)}/items`, + { + method: "POST", + credentials: "include", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ data_url: dataUrl }), + }, + ); + if (res.status === 201) ok++; + else if (res.status === 200) dup++; + else failed++; + } catch { + failed++; + } + } + this.feedback( + "#ga-upload-feedback", + `${ok} added, ${dup} duplicate${dup === 1 ? "" : "s"} skipped, ${failed} failed.`, + ); + const fresh = await fetchJson<{ dataset: Dataset }>(`${this.cfg.apiBase}/v1/datasets/${encodeURIComponent(this.slug)}`); + this.dataset = fresh.dataset; + this.renderHeader(); + await this.loadItems(); + } + + private async deleteItem(itemId: number): Promise { + if (!confirm("Remove this item from the dataset?")) return; + try { + await fetchJson(`${this.cfg.apiBase}/v1/datasets/${encodeURIComponent(this.slug)}/items/${itemId}`, { + method: "DELETE", + }); + const fresh = await fetchJson<{ dataset: Dataset }>(`${this.cfg.apiBase}/v1/datasets/${encodeURIComponent(this.slug)}`); + this.dataset = fresh.dataset; + this.renderHeader(); + await this.loadItems(); + } catch (err) { + alert(`Failed to remove item: ${err}`); + } + } + + private async submitTraining(): Promise { + const root = this.cfg.rootEl; + const errEl = root.querySelector("#ga-train-error"); + errEl?.classList.add("d-none"); + const baseModel = root.querySelector("#ga-train-base-model")!.value; + const method = root.querySelector("#ga-train-method")!.value; + const renderPrice = parseInt(root.querySelector("#ga-train-render-price")!.value, 10) || 25; + const btn = root.querySelector("#ga-train-submit"); + if (btn) { btn.disabled = true; btn.textContent = "Starting…"; } + try { + await fetchJson(`${this.cfg.apiBase}/v1/datasets/${encodeURIComponent(this.slug)}/train`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ base_model: baseModel, training_method: method, render_price_tokens: renderPrice }), + }); + await this.loadTrainingJobs(); + } catch (err) { + if (errEl) { + errEl.textContent = `Couldn't start training: ${String(err)}`; + errEl.classList.remove("d-none"); + } + } finally { + if (btn) { btn.disabled = (this.dataset?.item_count ?? 0) < 5; btn.textContent = "Train"; } + } + } + + private attachEvents(): void { + const root = this.cfg.rootEl; + const dropzone = root.querySelector("#ga-dataset-dropzone"); + const fileInput = root.querySelector("#ga-dataset-file-input"); + dropzone?.addEventListener("click", () => fileInput?.click()); + fileInput?.addEventListener("change", () => { + if (fileInput.files?.length) void this.uploadFiles(fileInput.files); + }); + dropzone?.addEventListener("dragover", (ev) => { + ev.preventDefault(); + dropzone.classList.add("ga-dragover"); + }); + dropzone?.addEventListener("dragleave", () => dropzone.classList.remove("ga-dragover")); + dropzone?.addEventListener("drop", (ev) => { + ev.preventDefault(); + dropzone.classList.remove("ga-dragover"); + if (ev.dataTransfer?.files.length) void this.uploadFiles(ev.dataTransfer.files); + }); + + root.addEventListener("click", (ev) => { + const target = ev.target as HTMLElement; + const delBtn = target.closest(".ga-item-delete"); + if (delBtn) { + const id = parseInt(delBtn.dataset.itemId || "", 10); + if (id) void this.deleteItem(id); + } + }); + + root.querySelector("#ga-train-form")?.addEventListener("submit", (ev) => { + ev.preventDefault(); + void this.submitTraining(); + }); + } +} + +const GADatasets = { + async mount(cfg: DatasetsConfig) { + installClientErrorReporter({ apiBase: cfg.apiBase, page: `datasets-${cfg.mode}` }); + if (cfg.mode === "library") await new LibraryPage().mount(cfg); + else await new DetailPage().mount(cfg); + }, +}; + +declare global { + interface Window { + GADatasets?: typeof GADatasets; + } +} + +window.GADatasets = GADatasets; +export default GADatasets; diff --git a/workers/api/client/lib/trainableBaseModels.ts b/workers/api/client/lib/trainableBaseModels.ts new file mode 100644 index 0000000..1f60153 --- /dev/null +++ b/workers/api/client/lib/trainableBaseModels.ts @@ -0,0 +1,14 @@ +// Client-side mirror of TRAINABLE_BASE_MODELS in src/ai/training.ts. +// Duplicated rather than imported because client/ bundles separately +// from src/ (different esbuild entry points, no shared runtime) — this +// is presentation-only (label text for the base-model picker); the +// SERVER remains the source of truth and re-validates every value on +// POST /v1/datasets/:slug/train regardless of what this list offers. +// Keep in sync by hand when a new base model is verified end-to-end. +export interface TrainableBase { + label: string; +} + +export const TRAINABLE_BASE_MODELS: Record = { + "flux-dev": { label: "FLUX.1 [dev]" }, +}; diff --git a/workers/api/package.json b/workers/api/package.json index d4611af..06d5112 100644 --- a/workers/api/package.json +++ b/workers/api/package.json @@ -26,7 +26,8 @@ "build:galleries": "esbuild client/galleries.ts --bundle --format=esm --target=es2020 --minify --sourcemap=linked --outfile=../../assets/js/ga-galleries.js --define:process.env.NODE_ENV=\\\"production\\\" --tree-shaking=true", "build:wallet": "esbuild client/wallet.ts --bundle --format=esm --target=es2020 --minify --sourcemap=linked --outfile=../../assets/js/ga-wallet.js --define:process.env.NODE_ENV=\\\"production\\\" --tree-shaking=true", "build:models": "esbuild client/models.ts --bundle --format=esm --target=es2020 --minify --sourcemap=linked --outfile=../../assets/js/ga-models.js --define:process.env.NODE_ENV=\\\"production\\\" --tree-shaking=true", - "build:all": "npm run build:client && npm run build:dashboard && npm run build:studio && npm run build:profile && npm run build:project-detail && npm run build:profile-editor && npm run build:mint && npm run build:briefs && npm run build:explore && npm run build:search && npm run build:feed && npm run build:token-detail && npm run build:galleries && npm run build:wallet && npm run build:models", + "build:datasets": "esbuild client/datasets.ts --bundle --format=esm --target=es2020 --minify --sourcemap=linked --outfile=../../assets/js/ga-datasets.js --define:process.env.NODE_ENV=\\\"production\\\" --tree-shaking=true", + "build:all": "npm run build:client && npm run build:dashboard && npm run build:studio && npm run build:profile && npm run build:project-detail && npm run build:profile-editor && npm run build:mint && npm run build:briefs && npm run build:explore && npm run build:search && npm run build:feed && npm run build:token-detail && npm run build:galleries && npm run build:wallet && npm run build:models && npm run build:datasets", "migrate:local": "wrangler d1 migrations apply DB --local", "migrate:prod": "wrangler d1 migrations apply DB --env production --remote" },