@tensorix/metahub 0.1.10 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -6
- package/README.zh-CN.md +7 -2
- package/dist/cli.js +22843 -18308
- package/dist/cli.js.map +87 -66
- package/dist/core/blobs-core.d.ts +106 -0
- package/dist/core/blobs-core.d.ts.map +1 -0
- package/dist/core/blobs.d.ts +100 -0
- package/dist/core/blobs.d.ts.map +1 -0
- package/dist/core/cache.d.ts +18 -1
- package/dist/core/cache.d.ts.map +1 -1
- package/dist/core/compact.d.ts +43 -0
- package/dist/core/compact.d.ts.map +1 -0
- package/dist/core/config.d.ts +6 -3
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/context.d.ts +4 -4
- package/dist/core/context.d.ts.map +1 -1
- package/dist/core/crdt.d.ts +54 -8
- package/dist/core/crdt.d.ts.map +1 -1
- package/dist/core/databases.d.ts +22 -8
- package/dist/core/databases.d.ts.map +1 -1
- package/dist/core/db.d.ts +1 -27
- package/dist/core/db.d.ts.map +1 -1
- package/dist/core/documents.d.ts +28 -15
- package/dist/core/documents.d.ts.map +1 -1
- package/dist/core/driver.d.ts +25 -0
- package/dist/core/driver.d.ts.map +1 -0
- package/dist/core/history.d.ts +99 -11
- package/dist/core/history.d.ts.map +1 -1
- package/dist/core/hlc.d.ts +3 -3
- package/dist/core/hlc.d.ts.map +1 -1
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/indexing.d.ts +4 -4
- package/dist/core/indexing.d.ts.map +1 -1
- package/dist/core/integrity.d.ts +1 -1
- package/dist/core/integrity.d.ts.map +1 -1
- package/dist/core/node.d.ts +2 -2
- package/dist/core/node.d.ts.map +1 -1
- package/dist/core/properties.d.ts +10 -9
- package/dist/core/properties.d.ts.map +1 -1
- package/dist/core/records.d.ts +13 -8
- package/dist/core/records.d.ts.map +1 -1
- package/dist/core/resolve.d.ts +4 -4
- package/dist/core/resolve.d.ts.map +1 -1
- package/dist/core/schema-init.d.ts +68 -0
- package/dist/core/schema-init.d.ts.map +1 -0
- package/dist/core/schema.d.ts +1 -1
- package/dist/core/schema.d.ts.map +1 -1
- package/dist/core/search.d.ts +3 -3
- package/dist/core/search.d.ts.map +1 -1
- package/dist/core/sites-core.d.ts +95 -0
- package/dist/core/sites-core.d.ts.map +1 -0
- package/dist/core/sites.d.ts +8 -58
- package/dist/core/sites.d.ts.map +1 -1
- package/dist/core/sqlcols.d.ts +4 -0
- package/dist/core/sqlcols.d.ts.map +1 -0
- package/dist/core/sync/auth.d.ts +5 -3
- package/dist/core/sync/auth.d.ts.map +1 -1
- package/dist/core/sync/blob-routes.d.ts +12 -0
- package/dist/core/sync/blob-routes.d.ts.map +1 -0
- package/dist/core/sync/client.d.ts +13 -3
- package/dist/core/sync/client.d.ts.map +1 -1
- package/dist/core/sync/e2ee.d.ts +24 -0
- package/dist/core/sync/e2ee.d.ts.map +1 -0
- package/dist/core/sync/enroll.d.ts +21 -0
- package/dist/core/sync/enroll.d.ts.map +1 -0
- package/dist/core/sync/peers-routes.d.ts.map +1 -1
- package/dist/core/sync/peers.d.ts +84 -11
- package/dist/core/sync/peers.d.ts.map +1 -1
- package/dist/core/sync/protocol.d.ts +5 -0
- package/dist/core/sync/protocol.d.ts.map +1 -1
- package/dist/core/sync/publisher-lease.d.ts +8 -0
- package/dist/core/sync/publisher-lease.d.ts.map +1 -0
- package/dist/core/sync/routes.d.ts.map +1 -1
- package/dist/core/sync/server.d.ts +11 -0
- package/dist/core/sync/server.d.ts.map +1 -1
- package/dist/core/sync/sites-serve.d.ts.map +1 -1
- package/dist/core/sync/storage-s3-bun.d.ts +26 -0
- package/dist/core/sync/storage-s3-bun.d.ts.map +1 -0
- package/dist/core/sync/storage.d.ts +170 -0
- package/dist/core/sync/storage.d.ts.map +1 -0
- package/dist/db-worker.js +384 -0
- package/dist/index.js +17250 -13920
- package/dist/index.js.map +47 -32
- package/dist/metahub-sdk.js +1 -0
- package/dist/mh-runtime.js +1 -0
- package/dist/sqlite3.wasm +0 -0
- package/dist/sw.js +1 -0
- package/dist/webui/server/assets.d.ts +8 -1
- package/dist/webui/server/assets.d.ts.map +1 -1
- package/dist/webui/server/icons.d.ts +4 -0
- package/dist/webui/server/icons.d.ts.map +1 -0
- package/dist/webui/server/routes.d.ts.map +1 -1
- package/dist/webui.js +68 -62
- package/package.json +6 -1
package/dist/index.js.map
CHANGED
|
@@ -1,29 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/core/errors.ts", "../src/core/paths.ts", "../src/core/ids.ts", "../src/core/node.ts", "../src/core/hlc.ts", "../src/core/blocks.ts", "../src/core/crdt.ts", "../src/core/cache.ts", "../src/core/sites
|
|
3
|
+
"sources": ["../src/core/errors.ts", "../src/core/paths.ts", "../src/core/ids.ts", "../src/core/node.ts", "../src/core/hlc.ts", "../src/core/blocks.ts", "../src/core/crdt.ts", "../src/core/cache.ts", "../src/core/sites-core.ts", "../src/core/blobs-core.ts", "../src/core/sites.ts", "../node_modules/zod/v4/core/core.js", "../node_modules/zod/v4/core/util.js", "../node_modules/zod/v4/core/errors.js", "../node_modules/zod/v4/core/parse.js", "../node_modules/zod/v4/core/regexes.js", "../node_modules/zod/v4/core/checks.js", "../node_modules/zod/v4/core/doc.js", "../node_modules/zod/v4/core/versions.js", "../node_modules/zod/v4/core/schemas.js", "../node_modules/zod/v4/locales/ar.js", "../node_modules/zod/v4/locales/az.js", "../node_modules/zod/v4/locales/be.js", "../node_modules/zod/v4/locales/bg.js", "../node_modules/zod/v4/locales/ca.js", "../node_modules/zod/v4/locales/cs.js", "../node_modules/zod/v4/locales/da.js", "../node_modules/zod/v4/locales/de.js", "../node_modules/zod/v4/locales/el.js", "../node_modules/zod/v4/locales/en.js", "../node_modules/zod/v4/locales/eo.js", "../node_modules/zod/v4/locales/es.js", "../node_modules/zod/v4/locales/fa.js", "../node_modules/zod/v4/locales/fi.js", "../node_modules/zod/v4/locales/fr.js", "../node_modules/zod/v4/locales/fr-CA.js", "../node_modules/zod/v4/locales/he.js", "../node_modules/zod/v4/locales/hr.js", "../node_modules/zod/v4/locales/hu.js", "../node_modules/zod/v4/locales/hy.js", "../node_modules/zod/v4/locales/id.js", "../node_modules/zod/v4/locales/is.js", "../node_modules/zod/v4/locales/it.js", "../node_modules/zod/v4/locales/ja.js", "../node_modules/zod/v4/locales/ka.js", "../node_modules/zod/v4/locales/km.js", "../node_modules/zod/v4/locales/kh.js", "../node_modules/zod/v4/locales/ko.js", "../node_modules/zod/v4/locales/lt.js", "../node_modules/zod/v4/locales/mk.js", "../node_modules/zod/v4/locales/ms.js", "../node_modules/zod/v4/locales/nl.js", "../node_modules/zod/v4/locales/no.js", "../node_modules/zod/v4/locales/ota.js", "../node_modules/zod/v4/locales/ps.js", "../node_modules/zod/v4/locales/pl.js", "../node_modules/zod/v4/locales/pt.js", "../node_modules/zod/v4/locales/ro.js", "../node_modules/zod/v4/locales/ru.js", "../node_modules/zod/v4/locales/sl.js", "../node_modules/zod/v4/locales/sv.js", "../node_modules/zod/v4/locales/ta.js", "../node_modules/zod/v4/locales/th.js", "../node_modules/zod/v4/locales/tr.js", "../node_modules/zod/v4/locales/uk.js", "../node_modules/zod/v4/locales/ua.js", "../node_modules/zod/v4/locales/ur.js", "../node_modules/zod/v4/locales/uz.js", "../node_modules/zod/v4/locales/vi.js", "../node_modules/zod/v4/locales/zh-CN.js", "../node_modules/zod/v4/locales/zh-TW.js", "../node_modules/zod/v4/locales/yo.js", "../node_modules/zod/v4/locales/index.js", "../node_modules/zod/v4/core/registries.js", "../node_modules/zod/v4/core/api.js", "../node_modules/zod/v4/core/to-json-schema.js", "../node_modules/zod/v4/core/json-schema-processors.js", "../node_modules/zod/v4/core/json-schema-generator.js", "../node_modules/zod/v4/core/index.js", "../node_modules/zod/v4/classic/checks.js", "../node_modules/zod/v4/classic/iso.js", "../node_modules/zod/v4/classic/errors.js", "../node_modules/zod/v4/classic/parse.js", "../node_modules/zod/v4/classic/schemas.js", "../node_modules/zod/v4/classic/compat.js", "../node_modules/zod/v4/classic/from-json-schema.js", "../node_modules/zod/v4/classic/coerce.js", "../node_modules/zod/v4/classic/external.js", "../node_modules/zod/index.js", "../src/core/sync/protocol.ts", "../src/core/sync/client.ts", "../node_modules/aws4fetch/dist/aws4fetch.esm.mjs", "../src/core/sync/publisher-lease.ts", "../src/core/sync/e2ee.ts", "../src/core/sync/storage.ts", "../src/core/sync/storage-s3-bun.ts", "../src/core/sync/token.ts", "../src/core/config.ts", "../src/core/sync/sites-routes.ts", "../src/core/sync/peers.ts", "../src/core/sync/pairing.ts", "../src/core/sync/peers-routes.ts", "../src/core/blobs.ts", "../src/core/sync/blob-routes.ts", "../src/core/sync/routes.ts", "../src/core/sync/sites-serve.ts", "../src/core/index.ts", "../src/core/db.ts", "../src/core/schema.ts", "../src/core/records.ts", "../src/core/databases.ts", "../src/core/properties.ts", "../src/core/indexing.ts", "../src/core/resolve.ts", "../src/core/fracdex.ts", "../src/core/documents.ts", "../src/core/schema-init.ts", "../src/core/context.ts", "../src/core/search.ts", "../src/core/sync/server.ts", "../src/core/sync/openapi.ts", "../src/core/sync/auth.ts", "../src/webui/server/assets.ts", "../src/webui/server/icons.ts", "../src/webui/server/routes.ts", "../src/core/history.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"/**\n * Machine-readable error taxonomy — the contract between core and its callers.\n *\n * Agents and scripts dispatch on `code`, never on message text (messages may\n * be reworded freely). The CLI maps codes to exit codes (src/cli/output.ts)\n * and the HTTP layer maps them to status codes (src/webui/server/routes.ts),\n * so adding a code here is enough for both surfaces to pick it up.\n */\nexport type MhErrorCode =\n /** Bad arguments / refusing a request as stated (HTTP 400, exit 2). */\n | \"invalid_input\"\n /** Referenced entity does not exist (HTTP 404, exit 3). */\n | \"not_found\"\n /** A ref matched more than one entity — disambiguate and retry (exit 4). */\n | \"ambiguous\"\n /** Optimistic-concurrency failure: re-read, then retry (HTTP 409, exit 5). */\n | \"stale\"\n /** State conflict, e.g. a name that already exists (HTTP 409, exit 5). */\n | \"conflict\"\n /** Missing/invalid credentials (HTTP 401, exit 6). */\n | \"auth\"\n /** A remote peer was unreachable or replied non-OK — retryable (exit 7). */\n | \"network\"\n /** The requested listen port is taken (exit 98, historical). */\n | \"port_in_use\";\n\nexport class MhError extends Error {\n constructor(\n readonly code: MhErrorCode,\n message: string,\n ) {\n super(message);\n this.name = \"MhError\";\n }\n}\n\n/** The error's code, for errors that carry one (anything else → undefined). */\nexport function errorCode(e: unknown): MhErrorCode | undefined {\n return e instanceof MhError ? e.code : undefined;\n}\n",
|
|
6
6
|
"import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\nexport function metahubHome(): string {\n return process.env.METAHUB_HOME ?? join(homedir(), \".metahub\");\n}\n\nexport function dbPath(): string {\n return join(metahubHome(), \"metahub.db\");\n}\n\nexport function cacheDir(): string {\n return join(metahubHome(), \"cache\");\n}\n",
|
|
7
7
|
"const ALPHABET = \"0123456789abcdefghijklmnopqrstuvwxyz\";\n\n/** Collision-resistant lowercase token (base36). */\nexport function randomSuffix(len = 6): string {\n const bytes = crypto.getRandomValues(new Uint8Array(len));\n let out = \"\";\n for (const b of bytes) out += ALPHABET.charAt(b % ALPHABET.length);\n return out;\n}\n\n/** ASCII-only, url-safe slug from an arbitrary name. Empty -> fallback. */\nexport function slugify(name: string, fallback = \"item\"): string {\n const slug = name\n .normalize(\"NFKD\")\n .replace(/[^\\x20-\\x7E]/g, \"\")\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .slice(0, 32)\n .replace(/-+$/g, \"\");\n return slug || fallback;\n}\n\n/** id = slug(name) + \"-\" + random. Readable yet safe for offline multi-node creation. */\nexport function makeId(name: string, fallback = \"item\"): string {\n return `${slugify(name, fallback)}-${randomSuffix()}`;\n}\n\n/** Entity kinds whose ids carry a type prefix. */\nexport type Kind = \"db\" | \"prop\" | \"rec\" | \"doc\" | \"blk\" | \"site\" | \"sf\";\n\nconst KINDS: ReadonlySet<string> = new Set<Kind>([\n \"db\",\n \"prop\",\n \"rec\",\n \"doc\",\n \"blk\",\n \"site\",\n \"sf\",\n]);\n\n/**\n * Typed id = \"<kind>_<slug>-<rand>\". `slugify` emits only [a-z0-9-] and\n * `randomSuffix` only base36, so the FIRST \"_\" is unambiguously the type\n * separator — `idKind` recovers the kind, and legacy ids (no \"_\") read as null.\n */\nexport function newId(kind: Kind, name: string, fallback: string = kind): string {\n return `${kind}_${slugify(name, fallback)}-${randomSuffix()}`;\n}\n\n/** The kind encoded in a typed id, or null for legacy (prefix-less) ids. */\nexport function idKind(id: string): Kind | null {\n const i = id.indexOf(\"_\");\n if (i <= 0) return null;\n const prefix = id.slice(0, i);\n return KINDS.has(prefix) ? (prefix as Kind) : null;\n}\n",
|
|
8
|
-
"import type {
|
|
9
|
-
"import type {
|
|
8
|
+
"import type { DbDriver } from \"./driver.ts\";\nimport { randomSuffix } from \"./ids.ts\";\n\n/** Stable per-machine node id, persisted in the meta table. */\nexport function getNodeId(db: DbDriver): string {\n const row = db\n .query(\"SELECT value FROM meta WHERE key = 'node_id'\")\n .get() as { value: string } | null;\n if (row) return row.value;\n const id = randomSuffix(8);\n db.query(\"INSERT INTO meta (key, value) VALUES ('node_id', ?)\").run(id);\n return id;\n}\n",
|
|
9
|
+
"import type { DbDriver } from \"./driver.ts\";\n\n// Hybrid Logical Clock. String form `<millis:15>-<counter:hex4>-<node>` so that\n// lexicographic order == causal/total order (ASCII, fixed-width numeric parts).\n\nexport interface Hlc {\n millis: number;\n counter: number;\n node: string;\n}\n\nexport function formatHlc(h: Hlc): string {\n return `${String(h.millis).padStart(15, \"0\")}-${h.counter\n .toString(16)\n .padStart(4, \"0\")}-${h.node}`;\n}\n\nexport function parseHlc(s: string): Hlc {\n const i1 = s.indexOf(\"-\");\n const i2 = s.indexOf(\"-\", i1 + 1);\n return {\n millis: Number(s.slice(0, i1)),\n counter: parseInt(s.slice(i1 + 1, i2), 16),\n node: s.slice(i2 + 1),\n };\n}\n\nfunction readLast(db: DbDriver, node: string): Hlc {\n const row = db.query(\"SELECT value FROM meta WHERE key = 'hlc'\").get() as\n | { value: string }\n | null;\n return row ? parseHlc(row.value) : { millis: 0, counter: 0, node };\n}\n\nfunction writeLast(db: DbDriver, h: Hlc): void {\n db.query(\n \"INSERT INTO meta (key, value) VALUES ('hlc', ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value\",\n ).run(formatHlc(h));\n}\n\n/** Issue a new timestamp for a local event, advancing the persisted clock. */\nexport function nextHlc(db: DbDriver, node: string, now = Date.now()): string {\n const last = readLast(db, node);\n const millis = Math.max(last.millis, now);\n const counter = millis === last.millis ? last.counter + 1 : 0;\n const h: Hlc = { millis, counter, node };\n writeLast(db, h);\n return formatHlc(h);\n}\n\n/** Advance the local clock to account for an observed remote timestamp. */\nexport function observeHlc(\n db: DbDriver,\n node: string,\n remote: string,\n now = Date.now(),\n): void {\n const last = readLast(db, node);\n const r = parseHlc(remote);\n const millis = Math.max(last.millis, r.millis, now);\n let counter: number;\n if (millis === last.millis && millis === r.millis)\n counter = Math.max(last.counter, r.counter) + 1;\n else if (millis === last.millis) counter = last.counter + 1;\n else if (millis === r.millis) counter = r.counter + 1;\n else counter = 0;\n writeLast(db, { millis, counter, node });\n}\n",
|
|
10
10
|
"// Pure markdown <-> block conversion and diffing. A document body is a sequence\n// of blocks separated by blank lines; fenced code blocks (``` / ~~~) are kept\n// whole so their internal blank lines don't split them. No DB dependency.\n\n/**\n * A document block plus the blank lines the user left after it. `blankAfter` is\n * the count *beyond* the standard single-blank-line separator (so a normal\n * paragraph break is 0); for the last block it's the trailing blank-line run.\n * This is what lets deliberate vertical spacing survive a save/reload without\n * representing blank lines as zero-content blocks (which would churn the\n * text-keyed reconcile). See [[blocks]] doc-block model.\n */\nexport interface DocBlock {\n text: string;\n blankAfter: number;\n}\n\n/**\n * Split markdown into doc blocks, preserving blank-line runs as `blankAfter`.\n * Leading blank lines (before the first block) are dropped; one blank line\n * between two blocks is the standard separator, every extra blank line is kept.\n */\nexport function parseDocBlocks(md: string): DocBlock[] {\n if (!md) return [];\n const lines = md.replace(/\\r\\n?/g, \"\\n\").split(\"\\n\");\n const blocks: DocBlock[] = [];\n let cur: string[] = [];\n let fenceChar: \"`\" | \"~\" | null = null;\n let fenceLen = 0;\n\n const closeBlock = () => {\n if (cur.length) {\n blocks.push({ text: cur.join(\"\\n\"), blankAfter: 0 });\n cur = [];\n }\n };\n const onBlank = () => {\n closeBlock();\n // Count toward the preceding block; a blank line before any block (leading\n // whitespace) has nowhere to attach and is dropped.\n if (blocks.length) blocks[blocks.length - 1]!.blankAfter++;\n };\n\n for (const raw of lines) {\n if (fenceChar) {\n cur.push(raw);\n const m = raw.match(/^\\s*(`{3,}|~{3,})\\s*$/);\n if (m && m[1]![0] === fenceChar && m[1]!.length >= fenceLen) {\n closeBlock();\n fenceChar = null;\n fenceLen = 0;\n }\n continue;\n }\n const open = raw.match(/^\\s*(`{3,}|~{3,})/);\n if (open) {\n closeBlock();\n fenceChar = open[1]![0] as \"`\" | \"~\";\n fenceLen = open[1]!.length;\n cur.push(raw);\n } else if (raw.trim() === \"\") {\n onBlank();\n } else {\n cur.push(raw);\n }\n }\n closeBlock(); // trailing paragraph or unterminated fence\n\n // Convert raw blank-line counts to \"extra beyond the standard separator\". The\n // last block keeps its raw count (trailing blanks have no following separator).\n for (let i = 0; i < blocks.length - 1; i++)\n blocks[i]!.blankAfter = Math.max(0, blocks[i]!.blankAfter - 1);\n return blocks;\n}\n\n/** Serialize doc blocks back to a body, re-emitting kept blank-line runs. */\nexport function serializeDocBlocks(\n blocks: readonly { text: string | null; blankAfter?: number }[],\n): string {\n const live = blocks.filter((b): b is { text: string; blankAfter?: number } => !!b.text && b.text.length > 0);\n const out: string[] = [];\n live.forEach((b, i) => {\n out.push(...b.text.split(\"\\n\"));\n const extra = Math.max(0, b.blankAfter ?? 0);\n if (i < live.length - 1) out.push(\"\"); // standard single-blank-line separator\n for (let k = 0; k < extra; k++) out.push(\"\");\n });\n return out.join(\"\\n\");\n}\n\nexport type ReconcileItem = { keep: number } | { insert: string };\nexport interface ReconcilePlan {\n /** The new block sequence, each item either reusing an old block or inserting text. */\n items: ReconcileItem[];\n /** Old block indices that are no longer present. */\n deleted: number[];\n}\n\n/**\n * Align a new sequence of block texts against the old one. Unchanged blocks\n * (exact text match, in order — the LCS) are kept by index so their identity and\n * order survive; everything else in a gap is a delete (old) or insert (new).\n */\nexport function reconcile(oldTexts: string[], newTexts: string[]): ReconcilePlan {\n const keep = lcs(oldTexts, newTexts);\n const keptOld = new Set(keep.map((p) => p[0]));\n const newToOld = new Map(keep.map((p) => [p[1], p[0]]));\n\n const items: ReconcileItem[] = newTexts.map((text, ni) =>\n newToOld.has(ni) ? { keep: newToOld.get(ni)! } : { insert: text },\n );\n const deleted: number[] = [];\n for (let oi = 0; oi < oldTexts.length; oi++)\n if (!keptOld.has(oi)) deleted.push(oi);\n\n return { items, deleted };\n}\n\n/** Longest common subsequence as aligned (oldIndex, newIndex) pairs. */\nfunction lcs(a: string[], b: string[]): [number, number][] {\n const m = a.length;\n const n = b.length;\n const dp: number[][] = Array.from({ length: m + 1 }, () =>\n new Array<number>(n + 1).fill(0),\n );\n for (let i = m - 1; i >= 0; i--)\n for (let j = n - 1; j >= 0; j--)\n dp[i]![j] =\n a[i] === b[j]\n ? dp[i + 1]![j + 1]! + 1\n : Math.max(dp[i + 1]![j]!, dp[i]![j + 1]!);\n\n const pairs: [number, number][] = [];\n let i = 0;\n let j = 0;\n while (i < m && j < n) {\n if (a[i] === b[j]) {\n pairs.push([i, j]);\n i++;\n j++;\n } else if (dp[i + 1]![j]! >= dp[i]![j + 1]!) {\n i++;\n } else {\n j++;\n }\n }\n return pairs;\n}\n",
|
|
11
|
-
"import type { Database } from \"bun:sqlite\";\nimport { getNodeId } from \"./node.ts\";\nimport { nextHlc, observeHlc } from \"./hlc.ts\";\nimport { serializeDocBlocks } from \"./blocks.ts\";\n\n// A single field assignment — the unit of replication. `value` is JSON-encoded\n// (or null). `dataset`/`row_id`/`col` identify the CRDT register.\nexport interface Change {\n hlc: string;\n node_id: string;\n dataset: string;\n row_id: string;\n col: string;\n value: string | null;\n}\n\n// Domain tables addressable by id, with their write-allowed columns. `col` is\n// interpolated into SQL, so it MUST be validated against these allowlists\n// (changes can arrive from untrusted sync peers).\nconst DOMAIN: Record<string, { table: string; cols: Set<string> }> = {\n databases: {\n table: \"databases\",\n cols: new Set([\"name\", \"icon\", \"created_hlc\", \"__deleted\"]),\n },\n properties: {\n table: \"properties\",\n cols: new Set([\"database_id\", \"name\", \"type\", \"config\", \"position\", \"__deleted\"]),\n },\n documents: {\n table: \"documents\",\n cols: new Set([\"title\", \"body\", \"database_id\", \"parent_id\", \"created_hlc\", \"order_key\", \"__deleted\"]),\n },\n doc_blocks: {\n table: \"doc_blocks\",\n cols: new Set([\"doc_id\", \"text\", \"order_key\", \"blank_after\", \"__deleted\"]),\n },\n sites: {\n table: \"sites\",\n cols: new Set([\"name\", \"title\", \"created_hlc\", \"__deleted\"]),\n },\n site_files: {\n table: \"site_files\",\n cols: new Set([\n \"site_id\",\n \"path\",\n \"content_type\",\n \"encoding\",\n \"content\",\n \"created_hlc\",\n \"__deleted\",\n ]),\n },\n};\n\n// The `records` dataset is special: these cols hit the `records` table, any\n// other col is a property cell (col == property id) folded into records.data JSON.\nconst RECORD_META = new Set([\"database_id\", \"created_hlc\", \"order_key\", \"__deleted\"]);\n\ntype SqlValue = string | number | null;\n\nfunction encodeScalar(val: unknown): SqlValue {\n if (val === null || val === undefined) return null;\n if (typeof val === \"boolean\") return val ? 1 : 0;\n if (typeof val === \"number\") return val;\n if (typeof val === \"string\") return val;\n return JSON.stringify(val);\n}\n\nfunction ensureRow(db: Database, table: string, id: string): void {\n db.query(`INSERT OR IGNORE INTO ${table} (id) VALUES (?)`).run(id);\n}\n\n/** A doc is \"block-managed\" once it has any block row; blocks then own its body. */\nfunction isBlockManaged(db: Database, docId: string): boolean {\n return (\n db.query(\"SELECT 1 AS x FROM doc_blocks WHERE doc_id = ? LIMIT 1\").get(docId) !=\n null\n );\n}\n\n/** Rebuild a document's materialized body from its live blocks (ordered). */\nfunction recomputeDocBody(db: Database, docId: string): void {\n const rows = db\n .query(\n \"SELECT text, blank_after FROM doc_blocks WHERE doc_id = ? AND __deleted = 0 ORDER BY order_key, id\",\n )\n .all(docId) as { text: string | null; blank_after: number | null }[];\n ensureRow(db, \"documents\", docId);\n db.query(\"UPDATE documents SET body = ? WHERE id = ?\").run(\n serializeDocBlocks(rows.map((r) => ({ text: r.text, blankAfter: r.blank_after ?? 0 }))),\n docId,\n );\n}\n\nfunction materialize(\n db: Database,\n dataset: string,\n rowId: string,\n col: string,\n valueJson: string | null,\n): void {\n if (dataset === \"records\") {\n if (RECORD_META.has(col)) {\n ensureRow(db, \"records\", rowId);\n const v = valueJson === null ? null : JSON.parse(valueJson);\n db.query(`UPDATE records SET \"${col}\" = ? WHERE id = ?`).run(\n encodeScalar(v),\n rowId,\n );\n } else {\n // Property cell -> a key in the record's JSON `data`. ensureRow first:\n // a cell write can arrive before database_id (out-of-order sync).\n ensureRow(db, \"records\", rowId);\n if (valueJson === null) {\n db.query(\n `UPDATE records SET data = json_remove(data, '$.\"' || ? || '\"') WHERE id = ?`,\n ).run(col, rowId);\n } else {\n // json(?) embeds the value with its real JSON type (number/array/object),\n // not as a quoted string.\n db.query(\n `UPDATE records SET data = json_set(coalesce(data, '{}'), '$.\"' || ? || '\"', json(?)) WHERE id = ?`,\n ).run(col, valueJson, rowId);\n }\n }\n return;\n }\n\n const d = DOMAIN[dataset];\n if (!d || !d.cols.has(col)) return; // unknown dataset/column -> ignore (forward-compat)\n\n // Legacy documents.body register is ignored once the doc is block-managed:\n // blocks are authoritative and recompute the body cache themselves.\n if (dataset === \"documents\" && col === \"body\" && isBlockManaged(db, rowId)) return;\n\n ensureRow(db, d.table, rowId);\n const v = valueJson === null ? null : JSON.parse(valueJson);\n db.query(`UPDATE ${d.table} SET \"${col}\" = ? WHERE id = ?`).run(\n encodeScalar(v),\n rowId,\n );\n\n // A block change re-derives its document's body cache. doc_id may not have\n // materialized yet (out-of-order sync) — the later doc_id write recomputes.\n if (dataset === \"doc_blocks\") {\n const blk = db\n .query(\"SELECT doc_id FROM doc_blocks WHERE id = ?\")\n .get(rowId) as { doc_id: string | null } | null;\n if (blk?.doc_id) recomputeDocBody(db, blk.doc_id);\n }\n}\n\n/**\n * Record a change in the oplog (idempotent) and, if it is the latest write for\n * its register, materialize it. Order-independent: convergence holds regardless\n * of the order changes are applied, because the winner is recomputed as the max\n * HLC over the full oplog for that register.\n */\nexport function applyChange(db: Database, c: Change): boolean {\n db.query(\n \"INSERT OR IGNORE INTO crdt_changes (hlc, node_id, dataset, row_id, col, value) VALUES (?, ?, ?, ?, ?, ?)\",\n ).run(c.hlc, c.node_id, c.dataset, c.row_id, c.col, c.value);\n\n const cur = db\n .query(\n \"SELECT MAX(hlc) AS h FROM crdt_changes WHERE dataset = ? AND row_id = ? AND col = ?\",\n )\n .get(c.dataset, c.row_id, c.col) as { h: string | null };\n\n if (cur.h !== c.hlc) return false; // a newer write already wins\n materialize(db, c.dataset, c.row_id, c.col, c.value);\n return true;\n}\n\n/** Apply a local write: assign a fresh HLC, append to oplog, materialize. */\nexport function emit(\n db: Database,\n dataset: string,\n rowId: string,\n col: string,\n value: unknown,\n): Change {\n const node = getNodeId(db);\n const change: Change = {\n hlc: nextHlc(db, node),\n node_id: node,\n dataset,\n row_id: rowId,\n col,\n value: value === undefined ? null : JSON.stringify(value),\n };\n applyChange(db, change);\n return change;\n}\n\n/** Apply multiple local field writes to the same row. */\nexport function emitFields(\n db: Database,\n dataset: string,\n rowId: string,\n fields: Record<string, unknown>,\n): Change[] {\n const out: Change[] = [];\n for (const [col, value] of Object.entries(fields)) {\n out.push(emit(db, dataset, rowId, col, value));\n }\n return out;\n}\n\n/** Apply remote changes from a sync peer (advances clock, then merges). */\nexport function ingest(db: Database, changes: Change[]): number {\n const node = getNodeId(db);\n let applied = 0;\n const tx = db.transaction((cs: Change[]) => {\n for (const c of cs) {\n observeHlc(db, node, c.hlc);\n if (applyChange(db, c)) applied++;\n }\n });\n tx(changes);\n return applied;\n}\n\n/** All oplog changes with HLC strictly greater than `since` (test/debug helper). */\nexport function changesSince(db: Database, since: string): Change[] {\n return db\n .query(\n \"SELECT hlc, node_id, dataset, row_id, col, value FROM crdt_changes WHERE hlc > ? ORDER BY hlc\",\n )\n .all(since) as Change[];\n}\n\nexport interface ChangeBatch {\n changes: Change[];\n cursor: number;\n}\n\n/**\n * Changes inserted after `seq` (a local rowid), in insertion order, plus the\n * new high-water cursor. Used for replication: insertion order never skips a\n * change even when clocks are skewed.\n */\nexport function changesAfterSeq(db: Database, seq: number): ChangeBatch {\n const rows = db\n .query(\n \"SELECT rowid AS seq, hlc, node_id, dataset, row_id, col, value FROM crdt_changes WHERE rowid > ? ORDER BY rowid\",\n )\n .all(seq) as (Change & { seq: number })[];\n const last = rows[rows.length - 1];\n const cursor = last ? last.seq : seq;\n return { changes: rows.map(({ seq: _seq, ...c }) => c), cursor };\n}\n",
|
|
12
|
-
"import { join } from \"node:path\";\nimport { cacheDir } from \"./paths.ts\";\n\nexport interface BlobInfo {\n hash: string;\n path: string;\n size: number;\n}\n\nexport function blobPath(hash: string): string {\n return join(cacheDir(), hash);\n}\n\n/**
|
|
13
|
-
"import type { Database } from \"bun:sqlite\";\nimport { newId } from \"./ids.ts\";\nimport { emit } from \"./crdt.ts\";\nimport { putBlob, getBlob } from \"./cache.ts\";\nimport { MhError } from \"./errors.ts\";\n\n// A \"site\" is a named bucket of files (Supabase-Storage-style) served at\n// /sites/<name>/. Everything is written through emit() so sites replicate over\n// /sync like records and documents. File bytes are stored inline as utf8 (text)\n// or base64 (small binaries) so they ride the oplog; large binaries offload to\n// the content-addressed cache (encoding=\"blob\"), whose bytes are node-local.\n\nexport interface SiteRow {\n id: string;\n name: string;\n title: string | null;\n created_hlc: string;\n}\n\nexport type FileEncoding = \"utf8\" | \"base64\" | \"blob\";\n\nexport interface SiteFileRow {\n id: string;\n site_id: string;\n path: string;\n content_type: string;\n encoding: FileEncoding;\n /** Inline text/base64, or a blob hash when encoding === \"blob\". */\n content: string | null;\n}\n\n/** Manifest entry — file metadata without the (potentially large) content. */\nexport type SiteFileSummary = Omit<SiteFileRow, \"content\">;\n\n/** Binaries at or below this size are stored inline (base64); larger go to a blob. */\nconst INLINE_LIMIT = 256 * 1024;\n\n// ---- mime / encoding helpers -----------------------------------------------\n\nconst MIME: Record<string, string> = {\n html: \"text/html; charset=utf-8\",\n htm: \"text/html; charset=utf-8\",\n css: \"text/css; charset=utf-8\",\n js: \"text/javascript; charset=utf-8\",\n mjs: \"text/javascript; charset=utf-8\",\n json: \"application/json; charset=utf-8\",\n svg: \"image/svg+xml\",\n txt: \"text/plain; charset=utf-8\",\n md: \"text/markdown; charset=utf-8\",\n xml: \"application/xml; charset=utf-8\",\n webmanifest: \"application/manifest+json\",\n ico: \"image/x-icon\",\n png: \"image/png\",\n jpg: \"image/jpeg\",\n jpeg: \"image/jpeg\",\n gif: \"image/gif\",\n webp: \"image/webp\",\n avif: \"image/avif\",\n woff: \"font/woff\",\n woff2: \"font/woff2\",\n ttf: \"font/ttf\",\n otf: \"font/otf\",\n pdf: \"application/pdf\",\n wasm: \"application/wasm\",\n};\n\n/** Guess a content type from a file path's extension; default octet-stream. */\nexport function inferContentType(path: string): string {\n const ext = path.slice(path.lastIndexOf(\".\") + 1).toLowerCase();\n return MIME[ext] ?? \"application/octet-stream\";\n}\n\n// ---- name / path normalization ---------------------------------------------\n\n/**\n * Canonical site slug: lowercase, [a-z0-9-] only, no leading/trailing/repeated\n * dashes. Applied at every write and lookup so the served URL (/sites/<name>/),\n * duplicate detection, and sync replication all agree on one form regardless of\n * how the name was typed (CLI, API, or browser). Throws when nothing usable\n * remains (empty, or all-punctuation). Matches the WebUI's slugify exactly.\n */\nexport function normalizeSiteName(raw: string): string {\n const slug = raw\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n if (!slug) throw new MhError(\"invalid_input\", `invalid site name: ${JSON.stringify(raw)}`);\n return slug;\n}\n\n/**\n * Canonical in-site file path: drop empty / \".\" segments, resolve \"..\" within\n * the bucket, strip leading and duplicate slashes. Files live in SQLite keyed by\n * this exact string (there is no filesystem behind them), so normalizing at the\n * write/serve boundary keeps storage, URL routing, and deletes consistent no\n * matter how the path was typed or percent-encoded. May return \"\" (caller decides).\n */\nexport function normalizeSitePath(raw: string): string {\n const segs: string[] = [];\n for (const seg of raw.split(\"/\")) {\n if (seg === \"\" || seg === \".\") continue;\n if (seg === \"..\") segs.pop();\n else segs.push(seg);\n }\n return segs.join(\"/\");\n}\n\n/** Text-ish types are stored as readable utf8; everything else is binary. */\nfunction isTextType(contentType: string): boolean {\n const ct = contentType.toLowerCase();\n return (\n ct.startsWith(\"text/\") ||\n ct.startsWith(\"application/json\") ||\n ct.startsWith(\"application/manifest+json\") ||\n ct.startsWith(\"application/xml\") ||\n ct.startsWith(\"text/javascript\") ||\n ct.startsWith(\"application/javascript\") ||\n ct.startsWith(\"image/svg+xml\")\n );\n}\n\nfunction toBytes(data: string | Uint8Array | ArrayBuffer): Uint8Array {\n if (typeof data === \"string\") return new TextEncoder().encode(data);\n return data instanceof Uint8Array ? data : new Uint8Array(data);\n}\n\n// ---- sites -----------------------------------------------------------------\n\nexport function createSite(db: Database, opts: { name: string; title?: string }): SiteRow {\n const name = normalizeSiteName(opts.name);\n if (getSiteByName(db, name)) throw new MhError(\"conflict\", `site name already exists: ${name}`);\n const id = newId(\"site\", name);\n const first = emit(db, \"sites\", id, \"name\", name);\n emit(db, \"sites\", id, \"created_hlc\", first.hlc);\n if (opts.title !== undefined) emit(db, \"sites\", id, \"title\", opts.title);\n return getSite(db, id)!;\n}\n\nexport function getSite(db: Database, id: string): SiteRow | null {\n return db\n .query(\"SELECT id, name, title, created_hlc FROM sites WHERE id = ? AND __deleted = 0\")\n .get(id) as SiteRow | null;\n}\n\n/** Most recently created live site with this name (URL routing). */\nexport function getSiteByName(db: Database, name: string): SiteRow | null {\n // Normalize so lookups, dedup, and URL routing all key off the canonical slug\n // (e.g. \"Demo\" and \"demo\" collide). An unusable name simply matches nothing.\n let slug: string;\n try {\n slug = normalizeSiteName(name);\n } catch {\n return null;\n }\n return db\n .query(\n \"SELECT id, name, title, created_hlc FROM sites WHERE name = ? AND __deleted = 0 ORDER BY created_hlc DESC LIMIT 1\",\n )\n .get(slug) as SiteRow | null;\n}\n\nexport function listSites(db: Database): SiteRow[] {\n return db\n .query(\"SELECT id, name, title, created_hlc FROM sites WHERE __deleted = 0 ORDER BY created_hlc\")\n .all() as SiteRow[];\n}\n\n/** Resolve a site ref (`site_…` id or name) to its row, or throw. */\nexport function resolveSite(db: Database, ref: string): SiteRow {\n const byId = ref.startsWith(\"site_\") ? getSite(db, ref) : null;\n const site = byId ?? getSiteByName(db, ref);\n if (!site) throw new MhError(\"not_found\", `no such site: ${ref}`);\n return site;\n}\n\n/** Rename a site and/or change its title. Guards against duplicate names. */\nexport function updateSite(\n db: Database,\n id: string,\n opts: { name?: string; title?: string },\n): SiteRow {\n if (!getSite(db, id)) throw new MhError(\"not_found\", `no such site: ${id}`);\n if (opts.name !== undefined) {\n const name = normalizeSiteName(opts.name);\n const dup = getSiteByName(db, name);\n if (dup && dup.id !== id) throw new MhError(\"conflict\", `site name already exists: ${name}`);\n emit(db, \"sites\", id, \"name\", name);\n }\n if (opts.title !== undefined) emit(db, \"sites\", id, \"title\", opts.title);\n return getSite(db, id)!;\n}\n\nexport function deleteSite(db: Database, id: string): boolean {\n if (!getSite(db, id)) return false;\n const files = db\n .query(\"SELECT id FROM site_files WHERE site_id = ? AND __deleted = 0\")\n .all(id) as { id: string }[];\n for (const f of files) emit(db, \"site_files\", f.id, \"__deleted\", 1);\n emit(db, \"sites\", id, \"__deleted\", 1);\n return true;\n}\n\n// ---- files -----------------------------------------------------------------\n\n/** Stable id for a (site, path) pair so re-uploads merge instead of duplicate. */\nfunction fileIdFor(db: Database, siteId: string, path: string): string | null {\n const row = db\n .query(\"SELECT id FROM site_files WHERE site_id = ? AND path = ? ORDER BY created_hlc LIMIT 1\")\n .get(siteId, path) as { id: string } | null;\n return row?.id ?? null;\n}\n\n/** Upload or replace one file. Picks utf8 / base64 / blob storage automatically. */\nexport async function putFile(\n db: Database,\n siteId: string,\n path: string,\n opts: { data: string | Uint8Array | ArrayBuffer; contentType?: string },\n): Promise<SiteFileRow> {\n const cleanPath = normalizeSitePath(path);\n if (!cleanPath) throw new MhError(\"invalid_input\", `invalid file path: ${JSON.stringify(path)}`);\n const contentType = opts.contentType ?? inferContentType(cleanPath);\n const bytes = toBytes(opts.data);\n\n let encoding: FileEncoding;\n let content: string;\n if (isTextType(contentType)) {\n encoding = \"utf8\";\n content = typeof opts.data === \"string\" ? opts.data : new TextDecoder().decode(bytes);\n } else if (bytes.byteLength <= INLINE_LIMIT) {\n encoding = \"base64\";\n content = Buffer.from(bytes).toString(\"base64\");\n } else {\n encoding = \"blob\";\n content = (await putBlob(bytes)).hash;\n }\n\n const existing = fileIdFor(db, siteId, cleanPath);\n const id = existing ?? newId(\"sf\", cleanPath);\n if (!existing) {\n const first = emit(db, \"site_files\", id, \"site_id\", siteId);\n emit(db, \"site_files\", id, \"path\", cleanPath);\n emit(db, \"site_files\", id, \"created_hlc\", first.hlc);\n }\n emit(db, \"site_files\", id, \"content_type\", contentType);\n emit(db, \"site_files\", id, \"encoding\", encoding);\n emit(db, \"site_files\", id, \"content\", content);\n emit(db, \"site_files\", id, \"__deleted\", 0); // un-delete on re-upload\n\n return db\n .query(\n \"SELECT id, site_id, path, content_type, encoding, content FROM site_files WHERE id = ?\",\n )\n .get(id) as SiteFileRow;\n}\n\nexport function listFiles(db: Database, siteId: string): SiteFileSummary[] {\n return db\n .query(\n \"SELECT id, site_id, path, content_type, encoding FROM site_files WHERE site_id = ? AND __deleted = 0 ORDER BY path\",\n )\n .all(siteId) as SiteFileSummary[];\n}\n\nexport function deleteFile(db: Database, siteId: string, path: string): boolean {\n const id = fileIdFor(db, siteId, normalizeSitePath(path));\n if (!id) return false;\n const live = db.query(\"SELECT __deleted AS d FROM site_files WHERE id = ?\").get(id) as {\n d: number;\n } | null;\n if (!live || live.d) return false;\n emit(db, \"site_files\", id, \"__deleted\", 1);\n return true;\n}\n\n/** Resolve a file to served bytes + content type. \"\" / trailing \"/\" → index.html. */\nexport async function getFileForServe(\n db: Database,\n siteId: string,\n path: string,\n): Promise<{ contentType: string; bytes: Uint8Array } | null> {\n // Resolve directory-style requests to index.html *before* normalizing (the\n // trailing-slash signal is lost once empty segments are dropped), then key the\n // lookup off the same canonical path putFile stored.\n const withIndex = path === \"\" || path.endsWith(\"/\") ? `${path}index.html` : path;\n const p = normalizeSitePath(withIndex);\n if (!p) return null;\n const row = db\n .query(\n \"SELECT content_type, encoding, content FROM site_files WHERE site_id = ? AND path = ? AND __deleted = 0 ORDER BY created_hlc LIMIT 1\",\n )\n .get(siteId, p) as { content_type: string; encoding: FileEncoding; content: string | null } | null;\n if (!row) return null;\n\n const content = row.content ?? \"\";\n let bytes: Uint8Array | null;\n if (row.encoding === \"utf8\") bytes = new TextEncoder().encode(content);\n else if (row.encoding === \"base64\") bytes = new Uint8Array(Buffer.from(content, \"base64\"));\n else bytes = await getBlob(content); // blob hash\n if (!bytes) return null;\n\n return { contentType: row.content_type, bytes };\n}\n",
|
|
14
|
-
"import type { RouteCtx } from \"./routes.ts\";\nimport { resolveSite, getFileForServe } from \"../sites.ts\";\n\n// Serves agent-published sites at /sites/<name>/<path...>. Imported lazily from\n// server.ts so it stays off the CLI startup path. Returns null only for paths it\n// does not own (so the caller can fall through to 404). HTML responses get the\n// auth fetch-shim injected by the caller (server.ts withShim) in non-debug mode.\n\nexport async function serveSite(req: Request, ctx: RouteCtx): Promise<Response | null> {\n const url = new URL(req.url);\n const rest = url.pathname.slice(\"/sites/\".length);\n if (rest === \"\") return null; // /sites/ with no site name\n\n const slash = rest.indexOf(\"/\");\n const name = decodeURIComponent(slash === -1 ? rest : rest.slice(0, slash));\n\n // /sites/<name> → canonical /sites/<name>/ so relative asset URLs resolve.\n if (slash === -1) return Response.redirect(`${url.origin}/sites/${name}/`, 301);\n\n const filePath = decodeURIComponent(rest.slice(slash + 1));\n\n let siteId: string;\n try {\n siteId = resolveSite(ctx.db, name).id;\n } catch {\n return new Response(\"site not found\", { status: 404 });\n }\n\n const file = await getFileForServe(ctx.db, siteId, filePath);\n if (!file) return new Response(\"not found\", { status: 404 });\n return new Response(file.bytes, { headers: { \"content-type\": file.contentType } });\n}\n",
|
|
15
|
-
"
|
|
16
|
-
"import { Database } from \"bun:sqlite\";\nimport { mkdirSync } from \"node:fs\";\nimport { dbPath, cacheDir, metahubHome } from \"./paths.ts\";\nimport { CORE_SCHEMA, FTS_SCHEMA } from \"./schema.ts\";\nimport { backfillRecordOrderKeys } from \"./records.ts\";\nimport { backfillDocumentOrderKeys } from \"./documents.ts\";\n\nexport function ensureDirs(): void {\n mkdirSync(metahubHome(), { recursive: true });\n mkdirSync(cacheDir(), { recursive: true });\n}\n\nexport function runSchema(db: Database): void {\n db.exec(CORE_SCHEMA);\n try {\n db.exec(FTS_SCHEMA);\n } catch {\n // FTS5 unavailable; search will fall back to LIKE.\n }\n}\n\nexport function ftsAvailable(db: Database): boolean {\n const row = db\n .query(\"SELECT 1 AS ok FROM sqlite_master WHERE name = 'search_fts'\")\n .get() as { ok: number } | null;\n return row != null;\n}\n\nfunction hasColumn(db: Database, table: string, column: string): boolean {\n const cols = db.query(`PRAGMA table_info(${table})`).all() as { name: string }[];\n return cols.some((c) => c.name === column);\n}\n\nfunction tableExists(db: Database, table: string): boolean {\n return (\n db\n .query(\"SELECT 1 AS ok FROM sqlite_master WHERE type = 'table' AND name = ?\")\n .get(table) != null\n );\n}\n\n/**\n * Migrate legacy EAV records (record_values: one row per cell) to the JSON\n * layout (records.data: one row per record). Idempotent — keyed off schema\n * shape, no version flag. A no-op for fresh databases.\n */\nexport function migrateRecords(db: Database): void {\n if (!hasColumn(db, \"records\", \"data\"))\n db.exec(\"ALTER TABLE records ADD COLUMN data TEXT NOT NULL DEFAULT '{}'\");\n if (!hasColumn(db, \"records\", \"order_key\"))\n db.exec(\"ALTER TABLE records ADD COLUMN order_key TEXT\");\n\n if (!tableExists(db, \"record_values\")) return;\n\n const tx = db.transaction(() => {\n // Fold each record's cells into a JSON object keyed by property id.\n db.exec(`\n UPDATE records SET data = coalesce((\n SELECT json_group_object(rv.property_id, json(rv.value))\n FROM record_values rv WHERE rv.record_id = records.id\n ), '{}')\n WHERE id IN (SELECT DISTINCT record_id FROM record_values);\n `);\n db.exec(\"DROP TABLE record_values\");\n backfillRecordOrderKeys(db);\n });\n tx();\n\n backfillRecordOrderKeys(db);\n}\n\n/**\n * Add the peer-pairing columns to a legacy `peers` table (token/label/node_id/\n * enabled/last_sync_at/last_status/last_error). Idempotent — guarded per column,\n * never drops the table so existing replication cursors survive.\n */\nexport function migratePeers(db: Database): void {\n const add: [string, string][] = [\n [\"token\", \"TEXT\"],\n [\"label\", \"TEXT\"],\n [\"node_id\", \"TEXT\"],\n [\"enabled\", \"INTEGER NOT NULL DEFAULT 1\"],\n [\"last_sync_at\", \"INTEGER\"],\n [\"last_status\", \"TEXT\"],\n [\"last_error\", \"TEXT\"],\n ];\n for (const [col, decl] of add) {\n if (!hasColumn(db, \"peers\", col)) db.exec(`ALTER TABLE peers ADD COLUMN ${col} ${decl}`);\n }\n}\n\n/**\n * Add the `blank_after` column to a legacy `doc_blocks` table. Idempotent —\n * guarded by hasColumn; existing blocks default to 0 (canonical single-blank-line\n * separators), so the migration never changes an existing document's body.\n */\nexport function migrateDocBlocks(db: Database): void {\n if (!hasColumn(db, \"doc_blocks\", \"blank_after\"))\n db.exec(\"ALTER TABLE doc_blocks ADD COLUMN blank_after INTEGER NOT NULL DEFAULT 0\");\n}\n\n/**\n * Add the `order_key` column to a legacy `documents` table and backfill it.\n * Idempotent — guarded by hasColumn; backfill only touches rows with a NULL key,\n * assigning per-parent fractional indices in current created_hlc order, so the\n * displayed document order is unchanged until the user first drags something.\n */\nexport function migrateDocuments(db: Database): void {\n if (!hasColumn(db, \"documents\", \"order_key\"))\n db.exec(\"ALTER TABLE documents ADD COLUMN order_key TEXT\");\n backfillDocumentOrderKeys(db);\n}\n\n/** Open (and migrate) the on-disk metahub database for the resolved home. */\nexport function openMetahub(): Database {\n ensureDirs();\n const db = new Database(dbPath(), { create: true });\n db.exec(\"PRAGMA journal_mode = WAL;\");\n runSchema(db);\n migrateRecords(db);\n migratePeers(db);\n migrateDocBlocks(db);\n migrateDocuments(db);\n return db;\n}\n",
|
|
17
|
-
"export const CORE_SCHEMA = `\nCREATE TABLE IF NOT EXISTS meta (\n key TEXT PRIMARY KEY,\n value TEXT\n);\n\n-- CRDT oplog: one row per field assignment. Source of truth for sync.\nCREATE TABLE IF NOT EXISTS crdt_changes (\n hlc TEXT NOT NULL,\n node_id TEXT NOT NULL,\n dataset TEXT NOT NULL,\n row_id TEXT NOT NULL,\n col TEXT NOT NULL,\n value TEXT,\n PRIMARY KEY (dataset, row_id, col, hlc)\n);\nCREATE INDEX IF NOT EXISTS idx_changes_hlc ON crdt_changes(hlc);\n\n-- Per-peer replication cursors (SQLite rowids: monotonic in insertion order,\n-- so no change is ever skipped regardless of HLC/clock skew). Outbound side of\n-- a pairing: \"token\" is the credential the *remote* issued to us (sent as a\n-- Bearer header when we sync to them). See migratePeers in db.ts for the columns\n-- added to legacy databases.\nCREATE TABLE IF NOT EXISTS peers (\n url TEXT PRIMARY KEY,\n pull_cursor INTEGER NOT NULL DEFAULT 0,\n push_cursor INTEGER NOT NULL DEFAULT 0,\n token TEXT,\n label TEXT,\n node_id TEXT,\n enabled INTEGER NOT NULL DEFAULT 1,\n last_sync_at INTEGER,\n last_status TEXT,\n last_error TEXT\n);\n\n-- Inbound side of a pairing: credentials *we* issued to remote devices. A peer\n-- presents one of these on /sync; acceptsSyncToken() checks it alongside the\n-- managed master token. Revoke by deleting the row.\nCREATE TABLE IF NOT EXISTS peer_grants (\n token TEXT PRIMARY KEY,\n peer_url TEXT,\n node_id TEXT,\n created_at INTEGER\n);\n\n-- One-time pairing codes minted by \"mh config peer code\" / POST /api/pair/new.\n-- Short-lived and single-use: redeemed during the pairing handshake, then the\n-- two devices exchange durable peer_grants. used/exp gate redemption.\nCREATE TABLE IF NOT EXISTS pairing_codes (\n code TEXT PRIMARY KEY,\n exp INTEGER NOT NULL,\n used INTEGER NOT NULL DEFAULT 0,\n created_at INTEGER\n);\n\nCREATE TABLE IF NOT EXISTS databases (\n id TEXT PRIMARY KEY,\n name TEXT,\n icon TEXT,\n created_hlc TEXT,\n __deleted INTEGER NOT NULL DEFAULT 0\n);\n\nCREATE TABLE IF NOT EXISTS properties (\n id TEXT PRIMARY KEY,\n database_id TEXT,\n name TEXT,\n type TEXT,\n config TEXT,\n position REAL,\n __deleted INTEGER NOT NULL DEFAULT 0\n);\nCREATE INDEX IF NOT EXISTS idx_properties_db ON properties(database_id);\n\n-- One row per record. Field cells live in the data JSON object, keyed by\n-- property id (rename-safe). Each (record,property) is still an independent\n-- CRDT register in the oplog; materialize() folds the winner into data via\n-- json_set/json_remove. Hot fields get expression indexes on data->>'propid'\n-- (see indexing.ts) so filter/sort/limit push down to SQL.\nCREATE TABLE IF NOT EXISTS records (\n id TEXT PRIMARY KEY,\n database_id TEXT,\n created_hlc TEXT,\n order_key TEXT,\n data TEXT NOT NULL DEFAULT '{}',\n __deleted INTEGER NOT NULL DEFAULT 0\n);\nCREATE INDEX IF NOT EXISTS idx_records_db_hlc ON records(database_id, created_hlc);\n\nCREATE TABLE IF NOT EXISTS documents (\n id TEXT PRIMARY KEY,\n title TEXT,\n body TEXT, -- materialized cache: serialized from doc_blocks\n database_id TEXT,\n parent_id TEXT,\n created_hlc TEXT,\n order_key TEXT, -- fractional index among siblings (same parent_id); ties broken by created_hlc,id\n __deleted INTEGER NOT NULL DEFAULT 0\n);\n\n-- Document body as an ordered list of blocks; each (block,field) is an\n-- independent CRDT register so concurrent edits to different blocks merge.\n-- order_key is a fractional index (ties broken by id) giving display order.\nCREATE TABLE IF NOT EXISTS doc_blocks (\n id TEXT PRIMARY KEY,\n doc_id TEXT,\n text TEXT,\n order_key TEXT,\n blank_after INTEGER NOT NULL DEFAULT 0, -- extra blank lines kept after this block (user spacing)\n __deleted INTEGER NOT NULL DEFAULT 0\n);\nCREATE INDEX IF NOT EXISTS idx_doc_blocks_doc ON doc_blocks(doc_id);\n\n-- A named static site (Supabase-Storage-style bucket). Served at /sites/<name>/.\nCREATE TABLE IF NOT EXISTS sites (\n id TEXT PRIMARY KEY,\n name TEXT, -- URL slug; resolved by getSiteByName\n title TEXT,\n created_hlc TEXT,\n __deleted INTEGER NOT NULL DEFAULT 0\n);\n\n-- One row per file in a site. content holds inline utf8/base64 text, or a blob\n-- hash (see cache.ts) when encoding = 'blob'. (site_id, path) maps to a stable\n-- id so re-uploads merge as a CRDT register instead of duplicating.\nCREATE TABLE IF NOT EXISTS site_files (\n id TEXT PRIMARY KEY,\n site_id TEXT,\n path TEXT,\n content_type TEXT,\n encoding TEXT, -- 'utf8' | 'base64' | 'blob'\n content TEXT,\n created_hlc TEXT,\n __deleted INTEGER NOT NULL DEFAULT 0\n);\nCREATE INDEX IF NOT EXISTS idx_site_files_site ON site_files(site_id);\n`;\n\n// Best-effort: FTS5 may not be compiled in. Search falls back to LIKE if this fails.\nexport const FTS_SCHEMA = `\nCREATE VIRTUAL TABLE IF NOT EXISTS search_fts USING fts5(\n kind UNINDEXED,\n id UNINDEXED,\n database_id UNINDEXED,\n title,\n body\n);\n`;\n",
|
|
18
|
-
"import type { Database } from \"bun:sqlite\";\nimport { newId, slugify, idKind } from \"./ids.ts\";\nimport { emit } from \"./crdt.ts\";\nimport { getDatabase } from \"./databases.ts\";\nimport { listProperties, type PropertyRow } from \"./properties.ts\";\nimport { maybeAutoIndex } from \"./indexing.ts\";\nimport { resolveCandidates } from \"./resolve.ts\";\nimport { keyBetween, keysBetween } from \"./fracdex.ts\";\nimport { MhError } from \"./errors.ts\";\n\ntype SqlValue = string | number | null;\n\n/** Scalars push down to SQL; arrays/objects/null are filtered in JS. */\nfunction isSqlScalar(v: unknown): v is string | number | boolean {\n return typeof v === \"string\" || typeof v === \"number\" || typeof v === \"boolean\";\n}\n\n/** Encode a coerced scalar to match what `data ->> '<prop>'` returns. */\nfunction sqlFilterValue(v: string | number | boolean): SqlValue {\n return typeof v === \"boolean\" ? (v ? 1 : 0) : v;\n}\n\nexport interface RecordRow {\n id: string;\n database_id: string;\n values: Record<string, unknown>;\n}\n\ninterface OrderedRecordRow {\n id: string;\n database_id: string;\n created_hlc: string | null;\n order_key: string | null;\n}\n\n/**\n * Resolve one relation value to a concrete record id in the target database.\n * Accepts a full id / unique prefix / name. A well-formed record id that does\n * not (yet) exist passes through unchanged — a forward reference / explicit id\n * escape valve. Names/prefixes that match nothing, or match many, throw.\n */\nfunction resolveRelation(db: Database, prop: PropertyRow, value: string): string {\n const target = prop.config?.database;\n if (!target) return value; // misconfigured relation — leave the value as-is\n const cands = resolveCandidates(db, value, { kind: \"rec\", databaseId: target });\n const exact = cands.find((c) => c.id === value);\n if (exact) return exact.id;\n if (cands.length === 1) return cands[0]!.id;\n if (cands.length === 0) {\n if (idKind(value) === \"rec\") return value; // forward reference to a full id\n throw new MhError(\"not_found\", `${prop.name}: no such record in target database: ${value}`);\n }\n throw new MhError(\"ambiguous\", `${prop.name}: ambiguous relation \"${value}\" (${cands.length} matches); use a full id`);\n}\n\n/** Validate + normalize a value for a property's type. Throws on mismatch. */\nfunction coerce(db: Database, prop: PropertyRow, value: unknown): unknown {\n switch (prop.type) {\n case \"text\":\n case \"url\":\n case \"date\": {\n if (value === null) return null;\n if (typeof value !== \"string\") throw new MhError(\"invalid_input\", `${prop.name} expects a string`);\n return value;\n }\n case \"number\": {\n if (value === null) return null;\n const n = typeof value === \"number\" ? value : Number(value);\n if (!Number.isFinite(n)) throw new MhError(\"invalid_input\", `${prop.name} expects a number`);\n return n;\n }\n case \"checkbox\": {\n if (typeof value === \"boolean\") return value;\n if (value === \"true\" || value === 1) return true;\n if (value === \"false\" || value === 0 || value === null) return false;\n throw new MhError(\"invalid_input\", `${prop.name} expects a boolean`);\n }\n case \"select\": {\n if (value === null) return null;\n const v = String(value);\n if (!prop.config?.options?.includes(v))\n throw new MhError(\"invalid_input\", `${prop.name}: '${v}' is not an allowed option`);\n return v;\n }\n case \"multi_select\": {\n const arr = value === null ? [] : Array.isArray(value) ? value : [value];\n const opts = prop.config?.options ?? [];\n for (const item of arr)\n if (!opts.includes(String(item)))\n throw new MhError(\"invalid_input\", `${prop.name}: '${item}' is not an allowed option`);\n return arr.map(String);\n }\n case \"relation\": {\n const arr = value === null ? [] : Array.isArray(value) ? value : [value];\n return arr.map((v) => resolveRelation(db, prop, String(v)));\n }\n }\n}\n\n/** Match data keys (property name OR id) to properties. */\nfunction resolveData(\n props: PropertyRow[],\n data: Record<string, unknown>,\n): { prop: PropertyRow; value: unknown }[] {\n const byId = new Map(props.map((p) => [p.id, p]));\n const byName = new Map(props.map((p) => [p.name.toLowerCase(), p]));\n const out: { prop: PropertyRow; value: unknown }[] = [];\n for (const [key, value] of Object.entries(data)) {\n const prop = byId.get(key) ?? byName.get(key.toLowerCase());\n if (!prop) throw new MhError(\"not_found\", `unknown property: ${key}`);\n out.push({ prop, value });\n }\n return out;\n}\n\n/** Build a RecordRow from a materialized row; keys in `data` are property ids. */\nfunction rowToRecord(\n row: { id: string; database_id: string; data: string },\n props: PropertyRow[],\n): RecordRow {\n const raw = JSON.parse(row.data || \"{}\") as Record<string, unknown>;\n const byId = new Map(props.map((p) => [p.id, p]));\n const values: Record<string, unknown> = {};\n for (const [propId, v] of Object.entries(raw)) {\n const p = byId.get(propId);\n if (p) values[p.name] = v; // skip cells for removed properties\n }\n return { id: row.id, database_id: row.database_id, values };\n}\n\nfunction deriveTitle(\n props: PropertyRow[],\n resolved: { prop: PropertyRow; value: unknown }[],\n fallbackBase: string,\n): string {\n const text = resolved.find(\n (r) => r.prop.type === \"text\" && typeof r.value === \"string\" && r.value,\n );\n return newId(\"rec\", text ? String(text.value) : \"\", fallbackBase);\n}\n\nfunction tableExists(db: Database, table: string): boolean {\n return (\n db\n .query(\"SELECT 1 AS ok FROM sqlite_master WHERE type = 'table' AND name = ?\")\n .get(table) != null\n );\n}\n\nfunction canEmitOrderKeys(db: Database): boolean {\n return tableExists(db, \"meta\") && tableExists(db, \"crdt_changes\");\n}\n\nfunction writeRecordOrderKey(db: Database, recordId: string, orderKey: string, emitChange: boolean): void {\n if (emitChange) emit(db, \"records\", recordId, \"order_key\", orderKey);\n else db.query(\"UPDATE records SET order_key = ? WHERE id = ?\").run(orderKey, recordId);\n}\n\nfunction lastRecordOrderKey(db: Database, databaseId: string): string | null {\n const row = db\n .query(\n `SELECT order_key FROM records\n WHERE database_id = ? AND __deleted = 0 AND order_key IS NOT NULL\n ORDER BY order_key DESC, id DESC LIMIT 1`,\n )\n .get(databaseId) as { order_key: string | null } | null;\n return row?.order_key ?? null;\n}\n\nfunction orderedRecordRows(db: Database, databaseId: string): OrderedRecordRow[] {\n return db\n .query(\n `SELECT id, database_id, created_hlc, order_key FROM records\n WHERE database_id = ? AND __deleted = 0\n ORDER BY order_key IS NULL, order_key, created_hlc, id`,\n )\n .all(databaseId) as OrderedRecordRow[];\n}\n\nfunction rebalanceRecordOrderKeys(db: Database, databaseId: string): void {\n const rows = orderedRecordRows(db, databaseId);\n const keys = keysBetween(null, null, rows.length);\n rows.forEach((row, i) => {\n if (row.order_key !== keys[i]) emit(db, \"records\", row.id, \"order_key\", keys[i]!);\n });\n}\n\nexport function backfillRecordOrderKeys(db: Database, databaseId?: string): void {\n const emitChange = canEmitOrderKeys(db);\n const dbRows = databaseId\n ? [{ database_id: databaseId }]\n : (db\n .query(\n `SELECT DISTINCT database_id FROM records\n WHERE database_id IS NOT NULL AND __deleted = 0 AND order_key IS NULL`,\n )\n .all() as { database_id: string }[]);\n\n for (const d of dbRows) {\n const missing = db\n .query(\n `SELECT id FROM records\n WHERE database_id = ? AND __deleted = 0 AND order_key IS NULL\n ORDER BY created_hlc, id`,\n )\n .all(d.database_id) as { id: string }[];\n if (!missing.length) continue;\n\n const start = lastRecordOrderKey(db, d.database_id);\n const keys = keysBetween(start, null, missing.length);\n missing.forEach((row, i) => writeRecordOrderKey(db, row.id, keys[i]!, emitChange));\n }\n}\n\nexport function createRecord(\n db: Database,\n databaseId: string,\n data: Record<string, unknown>,\n): RecordRow {\n const dbRow = getDatabase(db, databaseId);\n if (!dbRow) throw new MhError(\"not_found\", `no such database: ${databaseId}`);\n const props = listProperties(db, databaseId);\n const resolved = resolveData(props, data);\n const id = deriveTitle(props, resolved, slugify(dbRow.name, \"rec\"));\n const orderKey = keyBetween(lastRecordOrderKey(db, databaseId), null);\n\n const first = emit(db, \"records\", id, \"database_id\", databaseId);\n emit(db, \"records\", id, \"created_hlc\", first.hlc);\n emit(db, \"records\", id, \"order_key\", orderKey);\n for (const { prop, value } of resolved)\n emit(db, \"records\", id, prop.id, coerce(db, prop, value));\n return getRecord(db, id)!;\n}\n\nexport function getRecord(db: Database, id: string): RecordRow | null {\n const row = db\n .query(\"SELECT id, database_id, data FROM records WHERE id = ? AND __deleted = 0\")\n .get(id) as { id: string; database_id: string; data: string } | null;\n if (!row) return null;\n return rowToRecord(row, listProperties(db, row.database_id));\n}\n\n/** Quote a property id for embedding in a JSON path / index expression. */\nfunction jsonKeyLit(propId: string): string {\n return propId.replace(/'/g, \"''\");\n}\n\nexport function listRecords(\n db: Database,\n databaseId: string,\n opts: { filter?: Record<string, unknown>; sort?: string; limit?: number } = {},\n): RecordRow[] {\n const props = listProperties(db, databaseId);\n\n // Coerce filters, then split: scalars push down to SQL (and earn an index),\n // arrays/objects/null are matched in JS afterward.\n const resolved =\n opts.filter && Object.keys(opts.filter).length\n ? resolveData(props, opts.filter).map(({ prop, value }) => ({\n prop,\n value: coerce(db, prop, value),\n }))\n : [];\n const sqlFilters = resolved.filter((f) => isSqlScalar(f.value));\n const jsFilters = resolved.filter((f) => !isSqlScalar(f.value));\n\n // Resolve sort: default created_hlc; \"-field\" = descending.\n let sortProp: PropertyRow | undefined;\n let sortDesc = false;\n if (opts.sort) {\n let key = opts.sort;\n if (key.startsWith(\"-\")) {\n sortDesc = true;\n key = key.slice(1);\n }\n if (key !== \"created\" && key !== \"created_hlc\") {\n const p = props.find(\n (p) => p.name.toLowerCase() === key.toLowerCase() || p.id === key,\n );\n if (!p) throw new MhError(\"not_found\", `unknown sort field: ${key}`);\n sortProp = p;\n }\n }\n\n // The act of filtering/sorting on a field is the signal to (maybe) index it.\n for (const f of sqlFilters) maybeAutoIndex(db, databaseId, f.prop);\n if (sortProp) maybeAutoIndex(db, databaseId, sortProp);\n\n const where = [\"database_id = ?\", \"__deleted = 0\"];\n const args: SqlValue[] = [databaseId];\n for (const f of sqlFilters) {\n where.push(`data ->> '${jsonKeyLit(f.prop.id)}' = ?`);\n args.push(sqlFilterValue(f.value as string | number | boolean));\n }\n\n const manualOrder = opts.sort == null;\n const orderExpr = sortProp\n ? `data ->> '${jsonKeyLit(sortProp.id)}'`\n : \"created_hlc\";\n let sql =\n `SELECT id, database_id, data FROM records WHERE ${where.join(\" AND \")} ` +\n (manualOrder\n ? \"ORDER BY order_key IS NULL, order_key, id\"\n : `ORDER BY ${orderExpr} ${sortDesc ? \"DESC\" : \"ASC\"}, id`);\n\n // LIMIT only pushes down when no JS-side filtering remains.\n const pushLimit = opts.limit != null && jsFilters.length === 0;\n if (pushLimit) {\n sql += \" LIMIT ?\";\n args.push(opts.limit!);\n }\n\n let rows = (\n db.query(sql).all(...args) as { id: string; database_id: string; data: string }[]\n ).map((r) => rowToRecord(r, props));\n\n if (jsFilters.length) {\n rows = rows.filter((r) =>\n jsFilters.every(\n (f) => JSON.stringify(r.values[f.prop.name] ?? null) === JSON.stringify(f.value),\n ),\n );\n if (opts.limit != null) rows = rows.slice(0, opts.limit);\n }\n return rows;\n}\n\nexport function moveRecord(\n db: Database,\n id: string,\n targetId: string,\n where: \"before\" | \"after\",\n): RecordRow {\n if (where !== \"before\" && where !== \"after\")\n throw new MhError(\"invalid_input\", `unknown move position: ${where}`);\n\n const src = db\n .query(\n \"SELECT id, database_id FROM records WHERE id = ? AND __deleted = 0\",\n )\n .get(id) as { id: string; database_id: string } | null;\n if (!src) throw new MhError(\"not_found\", `no such record: ${id}`);\n const target = db\n .query(\n \"SELECT id, database_id FROM records WHERE id = ? AND __deleted = 0\",\n )\n .get(targetId) as { id: string; database_id: string } | null;\n if (!target) throw new MhError(\"not_found\", `no such record: ${targetId}`);\n if (src.database_id !== target.database_id)\n throw new MhError(\"invalid_input\", \"cannot move a record across databases\");\n if (id === targetId) return getRecord(db, id)!;\n\n backfillRecordOrderKeys(db, src.database_id);\n\n let rows = orderedRecordRows(db, src.database_id).filter((r) => r.id !== id);\n let to = rows.findIndex((r) => r.id === targetId);\n if (to < 0) throw new MhError(\"not_found\", `no such target record: ${targetId}`);\n\n let left = where === \"before\" ? (rows[to - 1]?.order_key ?? null) : rows[to]!.order_key;\n let right = where === \"before\" ? rows[to]!.order_key : (rows[to + 1]?.order_key ?? null);\n if (left !== null && right !== null && left >= right) {\n rebalanceRecordOrderKeys(db, src.database_id);\n rows = orderedRecordRows(db, src.database_id).filter((r) => r.id !== id);\n to = rows.findIndex((r) => r.id === targetId);\n left = where === \"before\" ? (rows[to - 1]?.order_key ?? null) : rows[to]!.order_key;\n right = where === \"before\" ? rows[to]!.order_key : (rows[to + 1]?.order_key ?? null);\n }\n emit(db, \"records\", id, \"order_key\", keyBetween(left, right));\n return getRecord(db, id)!;\n}\n\nexport function updateRecord(\n db: Database,\n id: string,\n data: Record<string, unknown>,\n): RecordRow {\n const rec = db\n .query(\"SELECT id, database_id FROM records WHERE id = ? AND __deleted = 0\")\n .get(id) as { id: string; database_id: string } | null;\n if (!rec) throw new MhError(\"not_found\", `no such record: ${id}`);\n const resolved = resolveData(listProperties(db, rec.database_id), data);\n for (const { prop, value } of resolved)\n emit(db, \"records\", id, prop.id, coerce(db, prop, value));\n return getRecord(db, id)!;\n}\n\nexport function deleteRecord(db: Database, id: string): boolean {\n const rec = db\n .query(\"SELECT id FROM records WHERE id = ? AND __deleted = 0\")\n .get(id) as { id: string } | null;\n if (!rec) return false;\n emit(db, \"records\", id, \"__deleted\", 1);\n return true;\n}\n",
|
|
19
|
-
"import type { Database } from \"bun:sqlite\";\nimport { newId } from \"./ids.ts\";\nimport { emit } from \"./crdt.ts\";\nimport { MhError } from \"./errors.ts\";\n\nexport interface DatabaseRow {\n id: string;\n name: string;\n icon: string | null;\n created_hlc: string;\n}\n\nexport function createDatabase(\n db: Database,\n opts: { name: string; icon?: string },\n): DatabaseRow {\n const id = newId(\"db\", opts.name);\n const first = emit(db, \"databases\", id, \"name\", opts.name);\n emit(db, \"databases\", id, \"created_hlc\", first.hlc);\n if (opts.icon !== undefined) emit(db, \"databases\", id, \"icon\", opts.icon);\n return getDatabase(db, id)!;\n}\n\nexport function updateDatabase(\n db: Database,\n id: string,\n fields: { name?: string; icon?: string | null },\n): DatabaseRow {\n if (!getDatabase(db, id)) throw new MhError(\"not_found\", `no such database: ${id}`);\n if (fields.name !== undefined) emit(db, \"databases\", id, \"name\", fields.name);\n if (fields.icon !== undefined) emit(db, \"databases\", id, \"icon\", fields.icon);\n return getDatabase(db, id)!;\n}\n\nexport function getDatabase(db: Database, id: string): DatabaseRow | null {\n return db\n .query(\n \"SELECT id, name, icon, created_hlc FROM databases WHERE id = ? AND __deleted = 0\",\n )\n .get(id) as DatabaseRow | null;\n}\n\nexport function listDatabases(db: Database): DatabaseRow[] {\n return db\n .query(\n \"SELECT id, name, icon, created_hlc FROM databases WHERE __deleted = 0 ORDER BY created_hlc\",\n )\n .all() as DatabaseRow[];\n}\n\nexport function deleteDatabase(db: Database, id: string): boolean {\n if (!getDatabase(db, id)) return false;\n emit(db, \"databases\", id, \"__deleted\", 1);\n\n // Cascade so nothing is left dangling (the same fixes repairHub would make off\n // the database tombstone, applied eagerly here by the deleting node):\n // - properties/records are meaningless without the database -> tombstone;\n // - documents keep an optional scope link -> detach so their content survives.\n const tombstone = (table: string) => {\n for (const r of liveChildren(db, table, \"database_id\", id))\n emit(db, table, r, \"__deleted\", 1);\n };\n tombstone(\"properties\");\n tombstone(\"records\");\n for (const d of liveChildren(db, \"documents\", \"database_id\", id))\n emit(db, \"documents\", d, \"database_id\", null);\n\n // Drop the \"current database\" pointer if it referenced this one (raw query to\n // avoid a context.ts <-> databases.ts import cycle; read-side also self-heals).\n db.query(\"DELETE FROM meta WHERE key = 'current_db' AND value = ?\").run(id);\n return true;\n}\n\n/** Ids of live rows in `table` whose `col` references `parentId`. */\nfunction liveChildren(db: Database, table: string, col: string, parentId: string): string[] {\n return (\n db\n .query(`SELECT id FROM ${table} WHERE ${col} = ? AND __deleted = 0`)\n .all(parentId) as { id: string }[]\n ).map((r) => r.id);\n}\n",
|
|
20
|
-
"import type { Database } from \"bun:sqlite\";\nimport { newId } from \"./ids.ts\";\nimport { emit } from \"./crdt.ts\";\nimport { getDatabase } from \"./databases.ts\";\nimport { ensurePropIndex } from \"./indexing.ts\";\nimport { MhError } from \"./errors.ts\";\n\nexport type PropType =\n | \"text\"\n | \"number\"\n | \"checkbox\"\n | \"select\"\n | \"multi_select\"\n | \"date\"\n | \"relation\"\n | \"url\";\n\nexport const PROP_TYPES: ReadonlySet<string> = new Set([\n \"text\",\n \"number\",\n \"checkbox\",\n \"select\",\n \"multi_select\",\n \"date\",\n \"relation\",\n \"url\",\n]);\n\nexport interface PropertyConfig {\n options?: string[]; // select / multi_select\n database?: string; // relation target database id\n indexed?: boolean; // hot query key — materialize an index for this field\n width?: number; // table column width in px (UI metadata, replicated via config)\n}\n\nexport interface PropertyRow {\n id: string;\n database_id: string;\n name: string;\n type: PropType;\n config: PropertyConfig | null;\n position: number;\n}\n\nfunction validateConfig(type: PropType, config: PropertyConfig | undefined): void {\n if (type === \"select\" || type === \"multi_select\") {\n const opts = config?.options;\n if (!Array.isArray(opts) || opts.length === 0 || !opts.every((o) => typeof o === \"string\"))\n throw new MhError(\"invalid_input\", `${type} requires config.options: string[]`);\n }\n if (type === \"relation\") {\n if (typeof config?.database !== \"string\")\n throw new MhError(\"invalid_input\", \"relation requires config.database (target database id)\");\n }\n}\n\nfunction nextPosition(db: Database, databaseId: string): number {\n const row = db\n .query(\n \"SELECT MAX(position) AS m FROM properties WHERE database_id = ? AND __deleted = 0\",\n )\n .get(databaseId) as { m: number | null };\n return (row.m ?? 0) + 1;\n}\n\nexport function addProperty(\n db: Database,\n databaseId: string,\n opts: {\n name: string;\n type: PropType;\n config?: PropertyConfig;\n position?: number;\n // Low-level hint for built-in features that know a field is a hot query\n // key (e.g. an IM conversation id). Not surfaced to CLI users — ad-hoc\n // fields get indexed automatically from query usage (see indexing.ts).\n indexed?: boolean;\n },\n): PropertyRow {\n if (!getDatabase(db, databaseId)) throw new MhError(\"not_found\", `no such database: ${databaseId}`);\n if (!PROP_TYPES.has(opts.type)) throw new MhError(\"invalid_input\", `unknown property type: ${opts.type}`);\n validateConfig(opts.type, opts.config);\n\n // Persist the indexed hint in config so it replicates to peers and survives\n // snapshot/restore (the index itself is derived, not in the oplog).\n const config: PropertyConfig | null = opts.indexed\n ? { ...(opts.config ?? {}), indexed: true }\n : (opts.config ?? null);\n\n const id = newId(\"prop\", opts.name);\n emit(db, \"properties\", id, \"database_id\", databaseId);\n emit(db, \"properties\", id, \"name\", opts.name);\n emit(db, \"properties\", id, \"type\", opts.type);\n emit(db, \"properties\", id, \"config\", config);\n emit(db, \"properties\", id, \"position\", opts.position ?? nextPosition(db, databaseId));\n\n // Relations are almost always query keys; index eagerly. Honor explicit hint.\n if (opts.type === \"relation\" || opts.indexed === true)\n ensurePropIndex(db, databaseId, id);\n return getProperty(db, id)!;\n}\n\nexport function getProperty(db: Database, id: string): PropertyRow | null {\n const row = db\n .query(\n \"SELECT id, database_id, name, type, config, position FROM properties WHERE id = ? AND __deleted = 0\",\n )\n .get(id) as (Omit<PropertyRow, \"config\"> & { config: string | null }) | null;\n if (!row) return null;\n return { ...row, config: row.config ? (JSON.parse(row.config) as PropertyConfig) : null };\n}\n\nexport function listProperties(db: Database, databaseId: string): PropertyRow[] {\n const rows = db\n .query(\n \"SELECT id, database_id, name, type, config, position FROM properties WHERE database_id = ? AND __deleted = 0 ORDER BY position\",\n )\n .all(databaseId) as (Omit<PropertyRow, \"config\"> & { config: string | null })[];\n return rows.map((r) => ({\n ...r,\n config: r.config ? (JSON.parse(r.config) as PropertyConfig) : null,\n }));\n}\n\nexport function updateProperty(\n db: Database,\n id: string,\n fields: { name?: string; type?: PropType; config?: PropertyConfig; position?: number },\n): PropertyRow {\n const cur = getProperty(db, id);\n if (!cur) throw new MhError(\"not_found\", `no such property: ${id}`);\n\n const typeChanged = fields.type !== undefined && fields.type !== cur.type;\n if (fields.type !== undefined && !PROP_TYPES.has(fields.type))\n throw new MhError(\"invalid_input\", `unknown property type: ${fields.type}`);\n\n // Validate config against whichever type will be in effect.\n const effectiveType = fields.type ?? cur.type;\n if (fields.config !== undefined) validateConfig(effectiveType, fields.config);\n else if (typeChanged) validateConfig(fields.type!, undefined);\n\n if (fields.name !== undefined) emit(db, \"properties\", id, \"name\", fields.name);\n if (fields.type !== undefined) emit(db, \"properties\", id, \"type\", fields.type);\n if (fields.config !== undefined) emit(db, \"properties\", id, \"config\", fields.config);\n if (fields.position !== undefined) emit(db, \"properties\", id, \"position\", fields.position);\n\n // A type change invalidates existing cell values (a number may not be a valid\n // select option, etc.), so clear the cells that currently hold a value for\n // this property. The field is keyed by property id in the records data JSON.\n if (typeChanged) {\n const rows = db\n .query(\n \"SELECT id FROM records WHERE database_id = ? AND __deleted = 0 AND data ->> ? IS NOT NULL\",\n )\n .all(cur.database_id, id) as { id: string }[];\n for (const r of rows) emit(db, \"records\", r.id, id, null);\n }\n return getProperty(db, id)!;\n}\n\n// Persist a column's display width. Merges into the existing config server-side\n// so concurrent callers can't strip sibling fields (e.g. a select's `options`),\n// and clamps to a sane range. The width replicates with `config` via the oplog.\nexport function setPropertyWidth(db: Database, id: string, width: number): PropertyRow {\n const cur = getProperty(db, id);\n if (!cur) throw new MhError(\"not_found\", `no such property: ${id}`);\n if (!Number.isFinite(width)) throw new MhError(\"invalid_input\", \"width must be a finite number\");\n const w = Math.max(80, Math.min(2000, Math.round(width)));\n return updateProperty(db, id, { config: { ...(cur.config ?? {}), width: w } });\n}\n\nexport function removeProperty(db: Database, id: string): boolean {\n const prop = getProperty(db, id);\n if (!prop) return false;\n emit(db, \"properties\", id, \"__deleted\", 1);\n // Clear this property's now-orphaned cells (keyed by property id in the records\n // data JSON) so no dead cell data lingers — same cleanup repairHub would do off\n // the property tombstone. emit(undefined) materializes to json_remove.\n const rows = db\n .query(\n \"SELECT id FROM records WHERE database_id = ? AND __deleted = 0 AND data ->> ? IS NOT NULL\",\n )\n .all(prop.database_id, id) as { id: string }[];\n for (const r of rows) emit(db, \"records\", r.id, id, undefined);\n return true;\n}\n",
|
|
21
|
-
"import type { Database } from \"bun:sqlite\";\nimport type { PropertyRow } from \"./properties.ts\";\n\n// Records of all databases share one `records` table; indexes are partial on\n// database_id so they stay small and per-collection. A field is indexed only\n// when it's actually used to filter/sort AND the collection is large enough to\n// matter — small tables scan instantly and don't earn the write cost.\nconst AUTO_INDEX_ROW_THRESHOLD = 2000;\n\n/** SQLite identifiers we build are slug+suffix ids; keep only safe chars. */\nfunction sanitize(s: string): string {\n return s.replace(/[^a-zA-Z0-9_]/g, \"_\");\n}\n\n/** Escape a string for embedding as a single-quoted SQL literal. */\nfunction lit(s: string): string {\n return s.replace(/'/g, \"''\");\n}\n\nfunction indexName(databaseId: string, propId: string): string {\n return `idx_rec_${sanitize(databaseId)}_${sanitize(propId)}`;\n}\n\nexport function hasIndex(db: Database, databaseId: string, propId: string): boolean {\n const row = db\n .query(\"SELECT 1 AS ok FROM sqlite_master WHERE type = 'index' AND name = ?\")\n .get(indexName(databaseId, propId)) as { ok: number } | null;\n return row != null;\n}\n\n/**\n * Create an expression index on `data ->> '<propId>'` (with created_hlc as the\n * sort tail), partial on this database. Idempotent. The expression matches\n * exactly what listRecords emits, so the optimizer uses it.\n */\nexport function ensurePropIndex(db: Database, databaseId: string, propId: string): void {\n const name = indexName(databaseId, propId);\n db.exec(\n `CREATE INDEX IF NOT EXISTS \"${name}\" ON records (data ->> '${lit(propId)}', created_hlc) ` +\n `WHERE database_id = '${lit(databaseId)}' AND __deleted = 0`,\n );\n}\n\n/**\n * Ensure an index for a field that a query filters/sorts on — but only when it\n * will pay off. relation fields are almost always query keys (cheap, index\n * eagerly); other fields wait until the collection crosses the row threshold.\n */\nexport function maybeAutoIndex(db: Database, databaseId: string, prop: PropertyRow): void {\n if (hasIndex(db, databaseId, prop.id)) return;\n if (prop.type !== \"relation\") {\n const row = db\n .query(\n \"SELECT COUNT(*) AS c FROM records WHERE database_id = ? AND __deleted = 0\",\n )\n .get(databaseId) as { c: number };\n if (row.c < AUTO_INDEX_ROW_THRESHOLD) return;\n }\n ensurePropIndex(db, databaseId, prop.id);\n}\n",
|
|
22
|
-
"import type { Database } from \"bun:sqlite\";\nimport { idKind, type Kind } from \"./ids.ts\";\nimport { MhError } from \"./errors.ts\";\n\n/** Kinds reachable through the public reference resolver. `blk` is internal. */\nexport type PublicKind = \"db\" | \"prop\" | \"rec\" | \"doc\";\n\nexport interface Candidate {\n kind: PublicKind;\n id: string;\n label: string;\n}\n\ninterface KindSpec {\n table: string;\n nameCol: string | null; // column matched by name/title (null = no name match)\n scoped: boolean; // filtered by database_id when a scope is supplied\n noun: string; // human label for \"no such <noun>\"\n}\n\nconst SPECS: Record<PublicKind, KindSpec> = {\n db: { table: \"databases\", nameCol: \"name\", scoped: false, noun: \"database\" },\n prop: { table: \"properties\", nameCol: \"name\", scoped: true, noun: \"property\" },\n rec: { table: \"records\", nameCol: null, scoped: true, noun: \"record\" },\n doc: { table: \"documents\", nameCol: \"title\", scoped: true, noun: \"document\" },\n};\n\nconst PUBLIC_KINDS: PublicKind[] = [\"db\", \"prop\", \"rec\", \"doc\"];\n\nfunction isPublic(k: Kind | null): k is PublicKind {\n return k !== null && k !== \"blk\";\n}\n\ntype SqlValue = string;\n\n// '{' (0x7B) is the first code point above every char an id can contain\n// ([a-z0-9_-], max 'z' = 0x7A), so [p, p+'{') is exactly the set of ids with\n// prefix p under BINARY collation — a primary-key range scan, no LIKE wildcards.\nconst HI = \"{\";\n\n/** The first text property's id for a database — a record's de-facto title. */\nfunction titlePropId(db: Database, databaseId: string): string | null {\n const row = db\n .query(\n \"SELECT id FROM properties WHERE database_id = ? AND type = 'text' AND __deleted = 0 ORDER BY position LIMIT 1\",\n )\n .get(databaseId) as { id: string } | null;\n return row?.id ?? null;\n}\n\n/** All live rows of one kind matching `ref` by id-prefix or name. */\nfunction queryKind(\n db: Database,\n kind: PublicKind,\n ref: string,\n databaseId?: string,\n): Candidate[] {\n const spec = SPECS[kind];\n // Records have no name column; when scoped to a database, match/show the\n // first text property's value (its title) so \"Alice Chen\" resolves.\n let nameCol = spec.nameCol;\n if (kind === \"rec\" && databaseId) {\n const tp = titlePropId(db, databaseId);\n if (tp) nameCol = `data ->> '${tp.replace(/'/g, \"''\")}'`;\n }\n const labelExpr = nameCol ?? \"''\"; // kinds without a name show id only\n const conds: string[] = [];\n const args: SqlValue[] = [];\n\n // Raw prefix (covers an exact full id, and a typed prefix like \"rec_log\").\n conds.push(\"(id >= ? AND id < ?)\");\n args.push(ref, ref + HI);\n // Typed slug prefix: lets a bare slug \"login-bug\" hit \"rec_login-bug-…\".\n const typed = `${kind}_${ref}`;\n conds.push(\"(id >= ? AND id < ?)\");\n args.push(typed, typed + HI);\n // Name/title equality (case-insensitive), where the kind has a name.\n if (nameCol) {\n conds.push(`lower(${nameCol}) = lower(?)`);\n args.push(ref);\n }\n\n let sql = `SELECT id, ${labelExpr} AS label FROM ${spec.table} WHERE __deleted = 0 AND (${conds.join(\" OR \")})`;\n if (spec.scoped && databaseId) {\n sql += \" AND database_id = ?\";\n args.push(databaseId);\n }\n\n const rows = db.query(sql).all(...args) as { id: string; label: string | null }[];\n return rows.map((r) => ({ kind, id: r.id, label: r.label ?? \"\" }));\n}\n\n/**\n * Every entity matching `ref`. Kind scope: an explicit `opts.kind` (the command\n * knows what it wants) wins; otherwise a typed prefix on `ref` dispatches; else\n * all public kinds are searched (the generic `mh get`). `databaseId` narrows\n * rec/doc/prop to one collection.\n */\nexport function resolveCandidates(\n db: Database,\n ref: string,\n opts: { kind?: PublicKind; databaseId?: string } = {},\n): Candidate[] {\n const kinds: PublicKind[] = opts.kind\n ? [opts.kind]\n : isPublic(idKind(ref))\n ? [idKind(ref) as PublicKind]\n : PUBLIC_KINDS;\n\n const out: Candidate[] = [];\n const seen = new Set<string>();\n for (const k of kinds) {\n for (const c of queryKind(db, k, ref, opts.databaseId)) {\n if (seen.has(c.id)) continue;\n seen.add(c.id);\n out.push(c);\n }\n }\n return out;\n}\n\nfunction fmt(cands: Candidate[]): string {\n return cands\n .map((c) => ` ${c.id}${c.label ? \" \" + c.label : \"\"} (${c.kind})`)\n .join(\"\\n\");\n}\n\n/**\n * Resolve `ref` to one entity. An exact full-id match always wins (the full id\n * keeps working). Otherwise a single candidate is returned; zero throws\n * \"no such …\"; multiple throws a git-style ambiguity list.\n */\nexport function resolveEntity(\n db: Database,\n ref: string,\n opts: { kind?: PublicKind; databaseId?: string } = {},\n): Candidate {\n const cands = resolveCandidates(db, ref, opts);\n const exact = cands.filter((c) => c.id === ref);\n if (exact.length === 1) return exact[0]!;\n if (exact.length === 0 && cands.length === 1) return cands[0]!;\n\n if (cands.length === 0) {\n const noun = opts.kind ? SPECS[opts.kind].noun : \"item\";\n throw new MhError(\"not_found\", `no such ${noun}: ${ref}`);\n }\n const shown = exact.length > 1 ? exact : cands;\n throw new MhError(\n \"ambiguous\",\n `ambiguous \"${ref}\" — ${shown.length} matches:\\n${fmt(shown)}\\n add more characters.`,\n );\n}\n\n/** Resolve `ref` to one concrete row id. See {@link resolveEntity}. */\nexport function resolveRef(\n db: Database,\n ref: string,\n opts: { kind?: PublicKind; databaseId?: string } = {},\n): string {\n return resolveEntity(db, ref, opts).id;\n}\n",
|
|
23
|
-
"// Fractional indexing: compact string keys that sort lexicographically, so a new\n// key can always be produced strictly between two existing ones. Used to order\n// document blocks; concurrent inserts at the same slot are tie-broken by block id.\n//\n// Alphabet is base62 with ASCII order matching digit order (0-9 < A-Z < a-z), so\n// SQLite's default BINARY collation orders keys correctly with plain `ORDER BY`.\n\nconst DIGITS = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";\n\n/**\n * A digit string strictly between `a` and `b`. `a` is a digit string (possibly\n * \"\" = start) and `b` is a digit string or null (= end), with `a < b`. Neither\n * may end in the zero digit; this invariant is preserved by construction.\n */\nfunction midpoint(a: string, b: string | null): string {\n const zero = DIGITS[0]!;\n if (b !== null && a >= b) throw new Error(`fracdex: ${a} >= ${b}`);\n if (a.endsWith(zero) || (b !== null && b.endsWith(zero)))\n throw new Error(`fracdex: trailing zero in ${a}/${b}`);\n\n if (b !== null) {\n // Strip the common prefix, padding `a` with implicit zeros as we descend.\n let n = 0;\n while ((a[n] ?? zero) === b[n]) n++;\n if (n > 0) return b.slice(0, n) + midpoint(a.slice(n), b.slice(n));\n }\n\n const da = a === \"\" ? 0 : DIGITS.indexOf(a[0]!);\n const db = b === null ? DIGITS.length : DIGITS.indexOf(b[0]!);\n if (db - da > 1) {\n const mid = Math.round(0.5 * (da + db));\n return DIGITS[mid]!;\n }\n // First digits are consecutive (or equal at the boundary): descend.\n if (b !== null && b.length > 1) return b.slice(0, 1);\n return DIGITS[da]! + midpoint(a.slice(1), null);\n}\n\n/** A key strictly between `a` and `b` (lexicographically). null = open boundary. */\nexport function keyBetween(a: string | null, b: string | null): string {\n return midpoint(a ?? \"\", b);\n}\n\n/** `n` distinct keys in ascending order, all strictly between `a` and `b`. */\nexport function keysBetween(\n a: string | null,\n b: string | null,\n n: number,\n): string[] {\n if (n <= 0) return [];\n if (n === 1) return [keyBetween(a, b)];\n\n if (b === null) {\n let prev = keyBetween(a, null);\n const out = [prev];\n for (let i = 1; i < n; i++) {\n prev = keyBetween(prev, null);\n out.push(prev);\n }\n return out;\n }\n if (a === null) {\n let next = keyBetween(null, b);\n const out = [next];\n for (let i = 1; i < n; i++) {\n next = keyBetween(null, next);\n out.unshift(next);\n }\n return out;\n }\n\n // Both bounded: bisect so key lengths grow logarithmically.\n const mid = Math.floor(n / 2);\n const c = keyBetween(a, b);\n return [...keysBetween(a, c, mid), c, ...keysBetween(c, b, n - mid - 1)];\n}\n",
|
|
24
|
-
"import type { Database } from \"bun:sqlite\";\nimport { newId } from \"./ids.ts\";\nimport { emit } from \"./crdt.ts\";\nimport { parseDocBlocks, serializeDocBlocks, reconcile, type DocBlock } from \"./blocks.ts\";\nimport { keyBetween, keysBetween } from \"./fracdex.ts\";\nimport { MhError } from \"./errors.ts\";\n\nexport interface DocumentRow {\n id: string;\n title: string;\n body: string | null;\n database_id: string | null;\n parent_id: string | null;\n created_hlc: string;\n order_key: string | null;\n}\n\nexport type DocumentSummary = Omit<DocumentRow, \"body\">;\n\ninterface BlockRow {\n id: string;\n text: string;\n order_key: string;\n blank_after: number;\n}\n\n// ---- block helpers ---------------------------------------------------------\n\nfunction liveBlocks(db: Database, docId: string): BlockRow[] {\n return db\n .query(\n \"SELECT id, text, order_key, blank_after FROM doc_blocks WHERE doc_id = ? AND __deleted = 0 ORDER BY order_key, id\",\n )\n .all(docId) as BlockRow[];\n}\n\nfunction makeBlockId(text: string): string {\n return newId(\"blk\", text.split(\"\\n\", 1)[0] ?? \"\");\n}\n\n/** Emit a new block's fields; text last so the final body recompute is complete.\n * blank_after is only emitted when non-zero (0 is the column default). */\nfunction emitBlock(\n db: Database,\n docId: string,\n fields: { text: string; order_key: string; blankAfter: number },\n): void {\n const id = makeBlockId(fields.text);\n emit(db, \"doc_blocks\", id, \"doc_id\", docId);\n emit(db, \"doc_blocks\", id, \"order_key\", fields.order_key);\n if (fields.blankAfter) emit(db, \"doc_blocks\", id, \"blank_after\", fields.blankAfter);\n emit(db, \"doc_blocks\", id, \"text\", fields.text);\n}\n\nfunction insertBlocks(\n db: Database,\n docId: string,\n blocks: readonly DocBlock[],\n after: string | null,\n before: string | null,\n): void {\n const keys = keysBetween(after, before, blocks.length);\n blocks.forEach((b, i) =>\n emitBlock(db, docId, { text: b.text, order_key: keys[i]!, blankAfter: b.blankAfter }),\n );\n}\n\n/** Lazily migrate a legacy body-only document into blocks (idempotent). */\nfunction ensureBlocks(db: Database, docId: string): void {\n if (db.query(\"SELECT 1 AS x FROM doc_blocks WHERE doc_id = ? LIMIT 1\").get(docId))\n return;\n const row = db.query(\"SELECT body FROM documents WHERE id = ?\").get(docId) as\n | { body: string | null }\n | null;\n const blocks = parseDocBlocks(row?.body ?? \"\");\n if (blocks.length) insertBlocks(db, docId, blocks, null, null);\n}\n\n/** Diff a full new body against current blocks; keep unchanged, delete/insert the rest. */\nfunction reconcileBody(db: Database, docId: string, body: string): void {\n const old = liveBlocks(db, docId);\n const next = parseDocBlocks(body);\n const plan = reconcile(\n old.map((b) => b.text),\n next.map((b) => b.text),\n );\n\n for (const oi of plan.deleted) emit(db, \"doc_blocks\", old[oi]!.id, \"__deleted\", 1);\n\n const { items } = plan;\n let i = 0;\n while (i < items.length) {\n const it = items[i]!;\n if (\"keep\" in it) {\n // Text unchanged: only the surrounding blank-line count may have shifted.\n const oldB = old[it.keep]!;\n const want = next[i]!.blankAfter;\n if ((oldB.blank_after ?? 0) !== want) emit(db, \"doc_blocks\", oldB.id, \"blank_after\", want);\n i++;\n continue;\n }\n let j = i;\n while (j < items.length && \"insert\" in items[j]!) j++;\n const left = i > 0 ? old[(items[i - 1] as { keep: number }).keep]!.order_key : null;\n const right = j < items.length ? old[(items[j] as { keep: number }).keep]!.order_key : null;\n insertBlocks(db, docId, next.slice(i, j), left, right);\n i = j;\n }\n}\n\n/** Max HLC over a document's own register and all its blocks — a read/edit token. */\nexport function documentVersion(db: Database, id: string): string {\n const row = db\n .query(\n `SELECT MAX(hlc) AS h FROM crdt_changes\n WHERE (dataset = 'documents' AND row_id = ?)\n OR (dataset = 'doc_blocks' AND row_id IN (SELECT id FROM doc_blocks WHERE doc_id = ?))`,\n )\n .get(id, id) as { h: string | null };\n return row.h ?? \"\";\n}\n\n// ---- public API ------------------------------------------------------------\n\nexport function createDocument(\n db: Database,\n opts: { title: string; body?: string; database_id?: string; parent_id?: string },\n): DocumentRow {\n const id = newId(\"doc\", opts.title);\n const first = emit(db, \"documents\", id, \"title\", opts.title);\n emit(db, \"documents\", id, \"created_hlc\", first.hlc);\n if (opts.database_id !== undefined) emit(db, \"documents\", id, \"database_id\", opts.database_id);\n if (opts.parent_id !== undefined) emit(db, \"documents\", id, \"parent_id\", opts.parent_id);\n placeInSiblings(db, id, opts.parent_id ?? null); // append to the end of its sibling group\n if (opts.body !== undefined) {\n const blocks = parseDocBlocks(opts.body);\n if (blocks.length) insertBlocks(db, id, blocks, null, null);\n }\n return getDocument(db, id)!;\n}\n\nexport function getDocument(db: Database, id: string): DocumentRow | null {\n return db\n .query(\n \"SELECT id, title, body, database_id, parent_id, created_hlc, order_key FROM documents WHERE id = ? AND __deleted = 0\",\n )\n .get(id) as DocumentRow | null;\n}\n\n/** Display order among siblings: explicit order_key first, NULLs fall back to\n * creation time so an un-backfilled tree still renders in its historical order. */\nconst ORDER_BY = \"ORDER BY order_key IS NULL, order_key, created_hlc, id\";\n\nexport function listDocuments(\n db: Database,\n opts: { database_id?: string; parent_id?: string } = {},\n): DocumentSummary[] {\n const cols =\n \"SELECT id, title, database_id, parent_id, created_hlc, order_key FROM documents WHERE __deleted = 0\";\n if (opts.parent_id !== undefined)\n return db\n .query(`${cols} AND parent_id = ? ${ORDER_BY}`)\n .all(opts.parent_id) as DocumentSummary[];\n if (opts.database_id)\n return db\n .query(`${cols} AND database_id = ? ${ORDER_BY}`)\n .all(opts.database_id) as DocumentSummary[];\n return db.query(`${cols} ${ORDER_BY}`).all() as DocumentSummary[];\n}\n\n// ---- sibling ordering (fractional index scoped per parent_id) --------------\n\ninterface SiblingRow {\n id: string;\n order_key: string | null;\n}\n\n/** WHERE fragment + args selecting siblings under `parentId` (null = top level). */\nfunction siblingWhere(parentId: string | null): { clause: string; args: string[] } {\n return parentId === null\n ? { clause: \"parent_id IS NULL\", args: [] }\n : { clause: \"parent_id = ?\", args: [parentId] };\n}\n\nfunction canEmitOrderKeys(db: Database): boolean {\n return tableExists(db, \"meta\") && tableExists(db, \"crdt_changes\");\n}\n\nfunction tableExists(db: Database, table: string): boolean {\n return (\n db\n .query(\"SELECT 1 AS ok FROM sqlite_master WHERE type = 'table' AND name = ?\")\n .get(table) != null\n );\n}\n\n/** Greatest order_key among siblings (optionally ignoring one row being placed). */\nfunction lastSiblingOrderKey(\n db: Database,\n parentId: string | null,\n excludeId?: string,\n): string | null {\n const w = siblingWhere(parentId);\n const exclude = excludeId ? \" AND id <> ?\" : \"\";\n const row = db\n .query(\n `SELECT order_key FROM documents WHERE ${w.clause}${exclude}\n AND __deleted = 0 AND order_key IS NOT NULL\n ORDER BY order_key DESC, id DESC LIMIT 1`,\n )\n .get(...w.args, ...(excludeId ? [excludeId] : [])) as { order_key: string | null } | null;\n return row?.order_key ?? null;\n}\n\nfunction orderedSiblings(db: Database, parentId: string | null): SiblingRow[] {\n const w = siblingWhere(parentId);\n return db\n .query(`SELECT id, order_key FROM documents WHERE ${w.clause} AND __deleted = 0 ${ORDER_BY}`)\n .all(...w.args) as SiblingRow[];\n}\n\n/** Re-space every sibling's key evenly — escape hatch when fractional keys collide. */\nfunction rebalanceSiblings(db: Database, parentId: string | null): void {\n const rows = orderedSiblings(db, parentId);\n const keys = keysBetween(null, null, rows.length);\n rows.forEach((row, i) => {\n if (row.order_key !== keys[i]) emit(db, \"documents\", row.id, \"order_key\", keys[i]!);\n });\n}\n\n/** Assign keys to siblings that still lack one, appending in creation order. */\nfunction backfillSiblings(db: Database, parentId: string | null): void {\n const emitChange = canEmitOrderKeys(db);\n const w = siblingWhere(parentId);\n const missing = db\n .query(\n `SELECT id FROM documents WHERE ${w.clause} AND __deleted = 0 AND order_key IS NULL\n ORDER BY created_hlc, id`,\n )\n .all(...w.args) as { id: string }[];\n if (!missing.length) return;\n const keys = keysBetween(lastSiblingOrderKey(db, parentId), null, missing.length);\n missing.forEach((row, i) => {\n if (emitChange) emit(db, \"documents\", row.id, \"order_key\", keys[i]!);\n else db.query(\"UPDATE documents SET order_key = ? WHERE id = ?\").run(keys[i]!, row.id);\n });\n}\n\n/** Backfill order_key for every parent group that has un-keyed live documents. */\nexport function backfillDocumentOrderKeys(db: Database): void {\n const parents = db\n .query(\"SELECT DISTINCT parent_id FROM documents WHERE __deleted = 0 AND order_key IS NULL\")\n .all() as { parent_id: string | null }[];\n for (const p of parents) backfillSiblings(db, p.parent_id);\n}\n\n/**\n * Place `id` under `parentId` at the given position — the single point where a\n * document's parent_id and order_key are kept consistent (reparent always\n * implies a new sibling scope). No `anchor` appends to the end of the group.\n */\nfunction placeInSiblings(\n db: Database,\n id: string,\n parentId: string | null,\n anchor?: { targetId: string; where: \"before\" | \"after\" },\n): void {\n // Walk the prospective ancestor chain; reaching `id` would form a cycle and\n // make the tree unrenderable. Guarded here so every caller is protected.\n let cur: string | null | undefined = parentId;\n while (cur) {\n if (cur === id) throw new MhError(\"invalid_input\", `cannot set parent_id: would create a cycle (${id})`);\n cur = getDocument(db, cur)?.parent_id ?? null;\n }\n\n const current = getDocument(db, id);\n if (current && (current.parent_id ?? null) !== parentId)\n emit(db, \"documents\", id, \"parent_id\", parentId);\n\n let key: string;\n if (!anchor) {\n key = keyBetween(lastSiblingOrderKey(db, parentId, id), null);\n } else {\n backfillSiblings(db, parentId); // ensure neighbors carry comparable keys\n const neighbors = (): [string | null, string | null] => {\n const rows = orderedSiblings(db, parentId).filter((r) => r.id !== id);\n const to = rows.findIndex((r) => r.id === anchor.targetId);\n if (to < 0) throw new MhError(\"not_found\", `no such target document: ${anchor.targetId}`);\n return anchor.where === \"before\"\n ? [rows[to - 1]?.order_key ?? null, rows[to]!.order_key]\n : [rows[to]!.order_key, rows[to + 1]?.order_key ?? null];\n };\n let [left, right] = neighbors();\n if (left !== null && right !== null && left >= right) {\n rebalanceSiblings(db, parentId);\n [left, right] = neighbors();\n }\n key = keyBetween(left, right);\n }\n emit(db, \"documents\", id, \"order_key\", key);\n}\n\n/**\n * Move a document next to / into another, atomically updating both its parent\n * and its order_key. `into` nests it as the last child of `targetId`;\n * `before`/`after` re-orders (and reparents if needed) among the target's siblings.\n */\nexport function moveDocument(\n db: Database,\n id: string,\n targetId: string,\n where: \"before\" | \"after\" | \"into\",\n): DocumentRow {\n const src = getDocument(db, id);\n if (!src) throw new MhError(\"not_found\", `no such document: ${id}`);\n if (id === targetId) return src;\n const target = getDocument(db, targetId);\n if (!target) throw new MhError(\"not_found\", `no such target document: ${targetId}`);\n\n if (where === \"into\") placeInSiblings(db, id, targetId);\n else placeInSiblings(db, id, target.parent_id, { targetId, where });\n return getDocument(db, id)!;\n}\n\nexport function updateDocument(\n db: Database,\n id: string,\n fields: { title?: string; body?: string; database_id?: string; parent_id?: string | null },\n opts: { ifMatch?: string } = {},\n): DocumentRow {\n if (!getDocument(db, id)) throw new MhError(\"not_found\", `no such document: ${id}`);\n // Same staleness backstop as editDocument: a version from documentVersion()\n // rejects the write if the doc changed since the caller read it.\n if (opts.ifMatch !== undefined && documentVersion(db, id) !== opts.ifMatch)\n throw new MhError(\"stale\", `stale: document changed since ${opts.ifMatch}; re-read first`);\n if (fields.title !== undefined) emit(db, \"documents\", id, \"title\", fields.title);\n if (fields.database_id !== undefined) emit(db, \"documents\", id, \"database_id\", fields.database_id);\n if (fields.parent_id !== undefined) {\n // Reparenting moves the document into a new sibling scope, so its order_key\n // must be reassigned too — placeInSiblings keeps both consistent (and guards\n // against cycles) for every caller: CLI, WebUI, sync. Only act on a real\n // change so a no-op PATCH doesn't silently jump the document to the end.\n const next = fields.parent_id ?? null;\n if ((getDocument(db, id)!.parent_id ?? null) !== next) placeInSiblings(db, id, next);\n }\n if (fields.body !== undefined) {\n ensureBlocks(db, id);\n reconcileBody(db, id, fields.body);\n }\n return getDocument(db, id)!;\n}\n\nexport interface EditDocResult {\n id: string;\n changed: boolean;\n replaced: number;\n version: string;\n}\n\n/**\n * Anchored find/replace, like the Edit tool. `old` must occur exactly once\n * (or pass `replaceAll`); supplying it is the read-before-edit guarantee — you\n * cannot author it without current content, and drift surfaces as \"not found\".\n * `ifMatch` is an optional staleness backstop (a version from documentVersion).\n */\nexport function editDocument(\n db: Database,\n id: string,\n opts: { old: string; new: string; replaceAll?: boolean; ifMatch?: string },\n): EditDocResult {\n if (!getDocument(db, id)) throw new MhError(\"not_found\", `no such document: ${id}`);\n if (opts.ifMatch !== undefined && documentVersion(db, id) !== opts.ifMatch)\n throw new MhError(\"stale\", `stale: document changed since ${opts.ifMatch}; re-read first`);\n if (opts.old === \"\") throw new MhError(\"invalid_input\", \"--old must not be empty\");\n\n ensureBlocks(db, id);\n const blocks = liveBlocks(db, id);\n const body = serializeDocBlocks(blocks.map((b) => ({ text: b.text, blankAfter: b.blank_after })));\n const count = countOccurrences(body, opts.old);\n if (count === 0) throw new MhError(\"invalid_input\", `anchor not found: no match for --old`);\n if (count > 1 && !opts.replaceAll)\n throw new MhError(\n \"ambiguous\",\n `${count} matches for --old; add surrounding context or use --replace-all`,\n );\n\n // Fast path: edit stays within single blocks and introduces no block break.\n if (!opts.old.includes(\"\\n\\n\")) {\n const affected = blocks.filter((b) => b.text.includes(opts.old));\n const next = affected.map((b) =>\n opts.replaceAll ? b.text.replaceAll(opts.old, opts.new) : b.text.replace(opts.old, opts.new),\n );\n if (next.every((t) => t.length > 0 && !t.includes(\"\\n\\n\"))) {\n const targets = opts.replaceAll ? affected : affected.slice(0, 1);\n targets.forEach((b, i) => emit(db, \"doc_blocks\", b.id, \"text\", next[i]!));\n return { id, changed: true, replaced: opts.replaceAll ? count : 1, version: documentVersion(db, id) };\n }\n }\n\n // General path: rewrite the body and reconcile (handles spans/splits/merges).\n const newBody = opts.replaceAll\n ? body.replaceAll(opts.old, opts.new)\n : body.replace(opts.old, opts.new);\n reconcileBody(db, id, newBody);\n return { id, changed: newBody !== body, replaced: opts.replaceAll ? count : 1, version: documentVersion(db, id) };\n}\n\nexport function appendDocument(db: Database, id: string, body: string): EditDocResult {\n if (!getDocument(db, id)) throw new MhError(\"not_found\", `no such document: ${id}`);\n ensureBlocks(db, id);\n const next = parseDocBlocks(body);\n if (next.length) {\n const blocks = liveBlocks(db, id);\n const last = blocks.length ? blocks[blocks.length - 1]!.order_key : null;\n insertBlocks(db, id, next, last, null);\n }\n return { id, changed: next.length > 0, replaced: next.length, version: documentVersion(db, id) };\n}\n\nexport function prependDocument(db: Database, id: string, body: string): EditDocResult {\n if (!getDocument(db, id)) throw new MhError(\"not_found\", `no such document: ${id}`);\n ensureBlocks(db, id);\n const next = parseDocBlocks(body);\n if (next.length) {\n const blocks = liveBlocks(db, id);\n const first = blocks.length ? blocks[0]!.order_key : null;\n insertBlocks(db, id, next, null, first);\n }\n return { id, changed: next.length > 0, replaced: next.length, version: documentVersion(db, id) };\n}\n\nexport function deleteDocument(db: Database, id: string): boolean {\n if (!getDocument(db, id)) return false;\n emit(db, \"documents\", id, \"__deleted\", 1);\n // Cascade off the tombstone, mirroring repairHub: the doc's blocks are derived\n // content -> tombstone them; live child documents survive as roots -> unparent.\n for (const b of liveChildIds(db, \"doc_blocks\", \"doc_id\", id))\n emit(db, \"doc_blocks\", b, \"__deleted\", 1);\n for (const c of liveChildIds(db, \"documents\", \"parent_id\", id))\n emit(db, \"documents\", c, \"parent_id\", null);\n return true;\n}\n\n/** Ids of live rows in `table` whose `col` references `parentId`. */\nfunction liveChildIds(db: Database, table: string, col: string, parentId: string): string[] {\n return (\n db\n .query(`SELECT id FROM ${table} WHERE ${col} = ? AND __deleted = 0`)\n .all(parentId) as { id: string }[]\n ).map((r) => r.id);\n}\n\nfunction countOccurrences(haystack: string, needle: string): number {\n if (needle === \"\") return 0;\n let n = 0;\n let i = haystack.indexOf(needle);\n while (i !== -1) {\n n++;\n i = haystack.indexOf(needle, i + needle.length);\n }\n return n;\n}\n",
|
|
25
|
-
"import type { Database } from \"bun:sqlite\";\nimport { getDatabase, type DatabaseRow } from \"./databases.ts\";\n\n// The \"current database\" is per-machine UI context, not data — it lives in the\n// local `meta` table (like node_id / search_hlc), never in the oplog, so it\n// does not sync to peers.\nconst KEY = \"current_db\";\n\n/**\n * The current database, or null. Validated on read: if it points at a database\n * that no longer exists (deleted, or gone after a snapshot restore), the stale\n * pointer is cleared and null returned — no coupling to delete/restore paths.\n */\nexport function getCurrentDatabase(db: Database): DatabaseRow | null {\n const row = db.query(\"SELECT value FROM meta WHERE key = ?\").get(KEY) as\n | { value: string }\n | null;\n if (!row) return null;\n const found = getDatabase(db, row.value);\n if (!found) {\n clearCurrentDatabase(db);\n return null;\n }\n return found;\n}\n\nexport function setCurrentDatabase(db: Database, id: string): void {\n db.query(\n \"INSERT INTO meta (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value\",\n ).run(KEY, id);\n}\n\nexport function clearCurrentDatabase(db: Database): void {\n db.query(\"DELETE FROM meta WHERE key = ?\").run(KEY);\n}\n",
|
|
26
|
-
"import type { Database } from \"bun:sqlite\";\nimport { ftsAvailable } from \"./db.ts\";\nimport { changesAfterSeq } from \"./crdt.ts\";\n\nexport interface SearchHit {\n type: \"document\" | \"record\";\n id: string;\n database_id: string | null;\n title?: string;\n snippet: string;\n}\n\nconst TEXT_TYPES = \"('text','url','select','multi_select','date')\";\n\n// Bump when the indexing logic changes (TEXT_TYPES, indexed columns, FTS schema)\n// so existing hubs discard `search_seq` and rebuild from scratch on next search.\nconst SEARCH_INDEX_VERSION = \"1\";\n\nfunction readMeta(db: Database, key: string): string | null {\n return (\n (db.query(\"SELECT value FROM meta WHERE key = ?\").get(key) as { value: string } | null)\n ?.value ?? null\n );\n}\n\nfunction writeMeta(db: Database, key: string, value: string): void {\n db.query(\n \"INSERT INTO meta (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value\",\n ).run(key, value);\n}\n\n// --- per-object (re)indexing ------------------------------------------------\n// FTS rows are derived from the materialized tables, so (re)indexing one object\n// is \"delete its rows, then re-derive from the live row(s)\". A tombstoned or\n// body-less object simply re-derives to nothing.\n\ninterface DocRow {\n id: string;\n title: string | null;\n body: string | null;\n database_id: string | null;\n}\n\nfunction reindexDocument(db: Database, id: string): void {\n db.query(\"DELETE FROM search_fts WHERE kind = 'document' AND id = ?\").run(id);\n const d = db\n .query(\"SELECT id, title, body, database_id FROM documents WHERE id = ? AND __deleted = 0\")\n .get(id) as DocRow | null;\n if (d)\n db.query(\n \"INSERT INTO search_fts (kind, id, database_id, title, body) VALUES ('document', ?, ?, ?, ?)\",\n ).run(d.id, d.database_id, d.title ?? \"\", d.body ?? \"\");\n}\n\ninterface RecBodyRow {\n id: string;\n database_id: string | null;\n body: string | null;\n}\n\n// A record's body is the concatenation of its TEXT-typed cell values. `where`\n// scopes which records to (re)derive; it is a fixed literal, never user input.\nfunction recordBodyRows(db: Database, where: string, ...args: (string | number)[]): RecBodyRow[] {\n return db\n .query(\n `SELECT r.id AS id, r.database_id AS database_id, group_concat(je.value, ' ') AS body\n FROM records r, json_each(r.data) je\n JOIN properties p ON p.id = je.key AND p.__deleted = 0\n WHERE ${where} AND r.__deleted = 0 AND p.type IN ${TEXT_TYPES}\n GROUP BY r.id`,\n )\n .all(...args) as RecBodyRow[];\n}\n\nfunction insertRecordRow(db: Database, r: RecBodyRow): void {\n db.query(\n \"INSERT INTO search_fts (kind, id, database_id, title, body) VALUES ('record', ?, ?, ?, ?)\",\n ).run(r.id, r.database_id, r.id, r.body ?? \"\");\n}\n\nfunction reindexRecord(db: Database, id: string): void {\n db.query(\"DELETE FROM search_fts WHERE kind = 'record' AND id = ?\").run(id);\n const r = recordBodyRows(db, \"r.id = ?\", id)[0];\n if (r) insertRecordRow(db, r);\n}\n\n// Used for property-level changes (type/deletion/scope) that affect a whole\n// database's records at once.\nfunction reindexDatabaseRecords(db: Database, databaseId: string): void {\n db.query(\"DELETE FROM search_fts WHERE kind = 'record' AND database_id = ?\").run(databaseId);\n for (const r of recordBodyRows(db, \"r.database_id = ?\", databaseId)) insertRecordRow(db, r);\n}\n\n// --- index maintenance ------------------------------------------------------\n\n// Full rebuild: the fallback path (first build, version bump, snapshot reset,\n// manual repair). Clears the index and re-derives every object, then pins the\n// cursor to the current oplog head so incremental updates pick up from there.\nfunction fullRebuild(db: Database): void {\n db.query(\"DELETE FROM search_fts\").run();\n for (const d of db\n .query(\"SELECT id, title, body, database_id FROM documents WHERE __deleted = 0\")\n .all() as DocRow[])\n db.query(\n \"INSERT INTO search_fts (kind, id, database_id, title, body) VALUES ('document', ?, ?, ?, ?)\",\n ).run(d.id, d.database_id, d.title ?? \"\", d.body ?? \"\");\n for (const r of recordBodyRows(db, \"1 = 1\")) insertRecordRow(db, r);\n const max = (db.query(\"SELECT MAX(rowid) AS m FROM crdt_changes\").get() as { m: number | null }).m ?? 0;\n writeMeta(db, \"search_seq\", String(max));\n writeMeta(db, \"search_index_version\", SEARCH_INDEX_VERSION);\n}\n\n// Incremental: scan oplog changes since the cursor, derive the set of affected\n// objects, and re-derive only those. Insertion-order (rowid) means no change is\n// ever skipped, even when a remote write carries an older HLC than the local max.\nfunction incrementalUpdate(db: Database): void {\n const cursor = Number(readMeta(db, \"search_seq\") ?? \"0\");\n const { changes, cursor: next } = changesAfterSeq(db, cursor);\n if (changes.length === 0) return;\n\n const docIds = new Set<string>();\n const recordIds = new Set<string>();\n const dbIds = new Set<string>(); // databases whose records need a full re-derive\n\n for (const c of changes) {\n switch (c.dataset) {\n case \"documents\":\n docIds.add(c.row_id);\n break;\n case \"doc_blocks\": {\n const blk = db\n .query(\"SELECT doc_id FROM doc_blocks WHERE id = ?\")\n .get(c.row_id) as { doc_id: string | null } | null;\n if (blk?.doc_id) docIds.add(blk.doc_id);\n break;\n }\n case \"records\":\n recordIds.add(c.row_id);\n break;\n case \"properties\":\n // Only type/deletion/scope change which cells contribute to record bodies.\n if (c.col === \"type\" || c.col === \"__deleted\" || c.col === \"database_id\") {\n const p = db\n .query(\"SELECT database_id FROM properties WHERE id = ?\")\n .get(c.row_id) as { database_id: string | null } | null;\n if (p?.database_id) dbIds.add(p.database_id);\n }\n break;\n // databases / sites / site_files are not represented in the FTS index.\n }\n }\n\n for (const id of docIds) reindexDocument(db, id);\n for (const dbId of dbIds) reindexDatabaseRecords(db, dbId);\n for (const id of recordIds) {\n const r = db\n .query(\"SELECT database_id FROM records WHERE id = ?\")\n .get(id) as { database_id: string | null } | null;\n if (r?.database_id && dbIds.has(r.database_id)) continue; // already covered above\n reindexRecord(db, id);\n }\n writeMeta(db, \"search_seq\", String(next));\n}\n\n// Bring the FTS index up to date before searching. Returns false when FTS5 is\n// unavailable (caller falls back to LIKE). All work is one transaction so the\n// cursor never advances past the index state it describes.\nfunction ensureIndex(db: Database): boolean {\n if (!ftsAvailable(db)) return false;\n const version = readMeta(db, \"search_index_version\");\n const seq = readMeta(db, \"search_seq\");\n db.transaction(() => {\n if (version !== SEARCH_INDEX_VERSION || seq === null) fullRebuild(db);\n else incrementalUpdate(db);\n })();\n return true;\n}\n\n/** Force a full rebuild of the search index (maintenance / repair). */\nexport function rebuildSearchIndex(db: Database): boolean {\n if (!ftsAvailable(db)) return false;\n db.transaction(() => fullRebuild(db))();\n return true;\n}\n\nfunction ftsSearch(db: Database, query: string, limit: number): SearchHit[] {\n const match = query\n .split(/\\s+/)\n .filter(Boolean)\n .map((t) => `\"${t.replace(/\"/g, '\"\"')}\"`)\n .join(\" \");\n if (!match) return [];\n const rows = db\n .query(\n \"SELECT kind, id, database_id, title, snippet(search_fts, -1, '[', ']', '…', 10) AS snippet FROM search_fts WHERE search_fts MATCH ? ORDER BY rank LIMIT ?\",\n )\n .all(match, limit) as {\n kind: \"document\" | \"record\";\n id: string;\n database_id: string | null;\n title: string | null;\n snippet: string;\n }[];\n return rows.map((r) => ({\n type: r.kind,\n id: r.id,\n database_id: r.database_id,\n title: r.title || undefined,\n snippet: r.snippet,\n }));\n}\n\nfunction makeSnippet(text: string, q: string): string {\n const i = text.toLowerCase().indexOf(q.toLowerCase());\n if (i < 0) return text.slice(0, 80);\n const start = Math.max(0, i - 30);\n return `${start > 0 ? \"…\" : \"\"}${text.slice(start, i + q.length + 50)}…`;\n}\n\n// Substring match — robust for CJK and exact phrases where FTS tokenization misses.\nfunction likeSearch(db: Database, query: string, limit: number): SearchHit[] {\n const like = `%${query.replace(/[%_\\\\]/g, \"\\\\$&\")}%`;\n const out: SearchHit[] = [];\n const docs = db\n .query(\n \"SELECT id, title, body, database_id FROM documents WHERE __deleted = 0 AND (title LIKE ? ESCAPE '\\\\' OR body LIKE ? ESCAPE '\\\\') LIMIT ?\",\n )\n .all(like, like, limit) as {\n id: string;\n title: string | null;\n body: string | null;\n database_id: string | null;\n }[];\n for (const d of docs)\n out.push({\n type: \"document\",\n id: d.id,\n database_id: d.database_id,\n title: d.title ?? undefined,\n snippet: makeSnippet(d.body || d.title || \"\", query),\n });\n\n if (out.length < limit) {\n const recs = db\n .query(\n `SELECT r.id AS id, r.database_id AS database_id, group_concat(je.value, ' ') AS body\n FROM records r, json_each(r.data) je\n JOIN properties p ON p.id = je.key AND p.__deleted = 0\n WHERE r.__deleted = 0 AND p.type IN ${TEXT_TYPES}\n GROUP BY r.id HAVING body LIKE ? ESCAPE '\\\\' LIMIT ?`,\n )\n .all(like, limit - out.length) as {\n id: string;\n database_id: string | null;\n body: string | null;\n }[];\n for (const r of recs)\n out.push({\n type: \"record\",\n id: r.id,\n database_id: r.database_id,\n snippet: makeSnippet(r.body || \"\", query),\n });\n }\n return out;\n}\n\nexport function search(\n db: Database,\n query: string,\n opts: { limit?: number } = {},\n): SearchHit[] {\n const limit = opts.limit ?? 20;\n if (ensureIndex(db)) {\n try {\n const hits = ftsSearch(db, query, limit);\n if (hits.length) return hits;\n } catch {\n // fall through to LIKE\n }\n }\n return likeSearch(db, query, limit);\n}\n",
|
|
11
|
+
"import type { DbDriver } from \"./driver.ts\";\nimport { getNodeId } from \"./node.ts\";\nimport { nextHlc, observeHlc } from \"./hlc.ts\";\nimport { serializeDocBlocks } from \"./blocks.ts\";\nimport { randomSuffix } from \"./ids.ts\";\nimport type { ColumnsOf } from \"./sqlcols.ts\";\n\n// A single field assignment — the unit of replication. `value` is JSON-encoded\n// (or null). `dataset`/`row_id`/`col` identify the CRDT register. `txn` groups\n// the changes of one logical mutation (one save / one API call) so history can\n// render them as a single revision; it replicates but plays no role in LWW.\nexport interface Change {\n hlc: string;\n node_id: string;\n dataset: string;\n row_id: string;\n col: string;\n value: string | null;\n txn?: string | null;\n}\n\n/** Oplog SELECT list, locked to the Change interface (also reused by history). */\nexport const CHANGE_COLS = [\"hlc\", \"node_id\", \"dataset\", \"row_id\", \"col\", \"value\", \"txn\"] as const;\nconst _changeCols: ColumnsOf<Change, typeof CHANGE_COLS> = CHANGE_COLS;\nexport const CHANGE_SELECT = CHANGE_COLS.join(\", \");\n\n// Current change group. Core mutations are synchronous and single-threaded, so\n// a module-level slot (set around each public mutator via grouped()) is enough.\nlet currentTxn: string | null = null;\n\n/**\n * Run `fn` with all emits stamped with one shared txn id. Nested calls keep the\n * outermost group (a revert that calls updateDocument is ONE revision). `label`\n * prefixes the id (\"repair:\", \"revert:\") so history can classify the source.\n */\nexport function withChangeGroup<T>(label: string | null, fn: () => T): T {\n if (currentTxn !== null) return fn();\n currentTxn = (label ? label + \":\" : \"\") + randomSuffix(8);\n try {\n return fn();\n } finally {\n currentTxn = null;\n }\n}\n\n/** Wrap a mutator so its body runs inside one change group. */\nexport function grouped<A extends unknown[], R>(\n fn: (...args: A) => R,\n label: string | null = null,\n): (...args: A) => R {\n return (...args) => withChangeGroup(label, () => fn(...args));\n}\n\n// Domain tables addressable by id, with their write-allowed columns. `col` is\n// interpolated into SQL, so it MUST be validated against these allowlists\n// (changes can arrive from untrusted sync peers).\nconst DOMAIN: Record<string, { table: string; cols: Set<string> }> = {\n databases: {\n table: \"databases\",\n cols: new Set([\"name\", \"icon\", \"created_hlc\", \"__deleted\"]),\n },\n properties: {\n table: \"properties\",\n cols: new Set([\"database_id\", \"name\", \"type\", \"config\", \"position\", \"__deleted\"]),\n },\n documents: {\n table: \"documents\",\n cols: new Set([\"title\", \"body\", \"database_id\", \"parent_id\", \"created_hlc\", \"order_key\", \"__deleted\"]),\n },\n doc_blocks: {\n table: \"doc_blocks\",\n cols: new Set([\"doc_id\", \"text\", \"order_key\", \"blank_after\", \"__deleted\"]),\n },\n sites: {\n table: \"sites\",\n cols: new Set([\"name\", \"title\", \"created_hlc\", \"__deleted\"]),\n },\n site_files: {\n table: \"site_files\",\n cols: new Set([\n \"site_id\",\n \"path\",\n \"content_type\",\n \"encoding\",\n \"content\",\n \"created_hlc\",\n \"__deleted\",\n ]),\n },\n // blob_policy designates the durable full-blob device(s); it replicates so\n // every node agrees on the anchor. blob_cache (incl. the local `pending` gate\n // that governs clearing) is node-local and deliberately absent — clearing is\n // decided purely locally, never synced. (The old synced blob_presence is gone.)\n blob_policy: {\n table: \"blob_policy\",\n cols: new Set([\"full_nodes\", \"redundancy\", \"__deleted\"]),\n },\n};\n\n// The `records` dataset is special: these cols hit the `records` table, any\n// other col is a property cell (col == property id) folded into records.data JSON.\nconst RECORD_META = new Set([\"database_id\", \"created_hlc\", \"order_key\", \"__deleted\"]);\n\ntype SqlValue = string | number | null;\n\nfunction encodeScalar(val: unknown): SqlValue {\n if (val === null || val === undefined) return null;\n if (typeof val === \"boolean\") return val ? 1 : 0;\n if (typeof val === \"number\") return val;\n if (typeof val === \"string\") return val;\n return JSON.stringify(val);\n}\n\nfunction ensureRow(db: DbDriver, table: string, id: string): void {\n db.query(`INSERT OR IGNORE INTO ${table} (id) VALUES (?)`).run(id);\n}\n\n/** A doc is \"block-managed\" once it has any block row; blocks then own its body. */\nfunction isBlockManaged(db: DbDriver, docId: string): boolean {\n return (\n db.query(\"SELECT 1 AS x FROM doc_blocks WHERE doc_id = ? LIMIT 1\").get(docId) !=\n null\n );\n}\n\n/** Rebuild a document's materialized body from its live blocks (ordered). */\nfunction recomputeDocBody(db: DbDriver, docId: string): void {\n const rows = db\n .query(\n \"SELECT text, blank_after FROM doc_blocks WHERE doc_id = ? AND __deleted = 0 ORDER BY order_key, id\",\n )\n .all(docId) as { text: string | null; blank_after: number | null }[];\n ensureRow(db, \"documents\", docId);\n db.query(\"UPDATE documents SET body = ? WHERE id = ?\").run(\n serializeDocBlocks(rows.map((r) => ({ text: r.text, blankAfter: r.blank_after ?? 0 }))),\n docId,\n );\n}\n\nfunction materialize(\n db: DbDriver,\n dataset: string,\n rowId: string,\n col: string,\n valueJson: string | null,\n): void {\n if (dataset === \"records\") {\n if (RECORD_META.has(col)) {\n ensureRow(db, \"records\", rowId);\n const v = valueJson === null ? null : JSON.parse(valueJson);\n db.query(`UPDATE records SET \"${col}\" = ? WHERE id = ?`).run(\n encodeScalar(v),\n rowId,\n );\n } else {\n // Property cell -> a key in the record's JSON `data`. ensureRow first:\n // a cell write can arrive before database_id (out-of-order sync).\n ensureRow(db, \"records\", rowId);\n if (valueJson === null) {\n db.query(\n `UPDATE records SET data = json_remove(data, '$.\"' || ? || '\"') WHERE id = ?`,\n ).run(col, rowId);\n } else {\n // json(?) embeds the value with its real JSON type (number/array/object),\n // not as a quoted string.\n db.query(\n `UPDATE records SET data = json_set(coalesce(data, '{}'), '$.\"' || ? || '\"', json(?)) WHERE id = ?`,\n ).run(col, valueJson, rowId);\n }\n }\n return;\n }\n\n const d = DOMAIN[dataset];\n if (!d || !d.cols.has(col)) return; // unknown dataset/column -> ignore (forward-compat)\n\n // Legacy documents.body register is ignored once the doc is block-managed:\n // blocks are authoritative and recompute the body cache themselves.\n if (dataset === \"documents\" && col === \"body\" && isBlockManaged(db, rowId)) return;\n\n ensureRow(db, d.table, rowId);\n const v = valueJson === null ? null : JSON.parse(valueJson);\n db.query(`UPDATE ${d.table} SET \"${col}\" = ? WHERE id = ?`).run(\n encodeScalar(v),\n rowId,\n );\n\n // A block change re-derives its document's body cache. doc_id may not have\n // materialized yet (out-of-order sync) — the later doc_id write recomputes.\n if (dataset === \"doc_blocks\") {\n const blk = db\n .query(\"SELECT doc_id FROM doc_blocks WHERE id = ?\")\n .get(rowId) as { doc_id: string | null } | null;\n if (blk?.doc_id) recomputeDocBody(db, blk.doc_id);\n }\n}\n\n/** Outcome of applying one change to the oplog. `inserted` reports whether the\n * oplog actually gained a NEW row (false when we already had this exact change —\n * the INSERT OR IGNORE was a no-op); it is the honest \"did we receive new data\"\n * signal, distinct from `winner` (whether this change now wins its register and\n * was materialized). Re-applying a change we already hold still returns\n * `winner:true` if it's the current max-HLC, so callers that want progress (not\n * re-materialization) must key off `inserted`. */\nexport interface ApplyResult {\n inserted: boolean;\n winner: boolean;\n}\n\n/**\n * Record a change in the oplog (idempotent) and, if it is the latest write for\n * its register, materialize it. Order-independent: convergence holds regardless\n * of the order changes are applied, because the winner is recomputed as the max\n * HLC over the full oplog for that register.\n */\nexport function applyChange(db: DbDriver, c: Change): ApplyResult {\n const inserted =\n db\n .query(\n \"INSERT OR IGNORE INTO crdt_changes (hlc, node_id, dataset, row_id, col, value, txn) VALUES (?, ?, ?, ?, ?, ?, ?)\",\n )\n .run(c.hlc, c.node_id, c.dataset, c.row_id, c.col, c.value, c.txn ?? null).changes > 0;\n\n const cur = db\n .query(\n \"SELECT MAX(hlc) AS h FROM crdt_changes WHERE dataset = ? AND row_id = ? AND col = ?\",\n )\n .get(c.dataset, c.row_id, c.col) as { h: string | null };\n\n if (cur.h !== c.hlc) return { inserted, winner: false }; // a newer write already wins\n materialize(db, c.dataset, c.row_id, c.col, c.value);\n return { inserted, winner: true };\n}\n\n/** Apply a local write: assign a fresh HLC, append to oplog, materialize. */\nexport function emit(\n db: DbDriver,\n dataset: string,\n rowId: string,\n col: string,\n value: unknown,\n): Change {\n const node = getNodeId(db);\n const change: Change = {\n hlc: nextHlc(db, node),\n node_id: node,\n dataset,\n row_id: rowId,\n col,\n value: value === undefined ? null : JSON.stringify(value),\n txn: currentTxn,\n };\n applyChange(db, change);\n return change;\n}\n\n/** Apply multiple local field writes to the same row. */\nexport function emitFields(\n db: DbDriver,\n dataset: string,\n rowId: string,\n fields: Record<string, unknown>,\n): Change[] {\n const out: Change[] = [];\n for (const [col, value] of Object.entries(fields)) {\n out.push(emit(db, dataset, rowId, col, value));\n }\n return out;\n}\n\n/** Apply remote changes from a sync peer (advances clock, then merges). Returns\n * the number of changes that were NEW to our oplog (rows actually inserted) —\n * the honest \"received\" count. Re-ingesting data we already hold returns 0, so\n * this is a reliable progress signal for the auto-sync backoff (a round that\n * only re-reads known data must not count as activity). */\nexport function ingest(db: DbDriver, changes: Change[]): number {\n const node = getNodeId(db);\n let received = 0;\n const tx = db.transaction((cs: Change[]) => {\n for (const c of cs) {\n observeHlc(db, node, c.hlc);\n if (applyChange(db, c).inserted) received++;\n }\n });\n tx(changes);\n return received;\n}\n\n/** All oplog changes with HLC strictly greater than `since` (test/debug helper). */\nexport function changesSince(db: DbDriver, since: string): Change[] {\n return db\n .query(`SELECT ${CHANGE_SELECT} FROM crdt_changes WHERE hlc > ? ORDER BY hlc`)\n .all(since) as Change[];\n}\n\nexport interface ChangeBatch {\n changes: Change[];\n cursor: number;\n}\n\nexport interface ChangesAfterOpts {\n /** Max rows to return — pagination for large pulls (initial hydration). */\n limit?: number;\n /** Datasets to omit (partial replicas, e.g. a phone skipping site_files). */\n excludeDatasets?: string[];\n /**\n * Return only changes this node produced itself. Storage-sync (see\n * sync/storage.ts) publishes each node's own ops under its own bucket prefix,\n * so it must not re-upload ops it merely ingested from peers. The cursor still\n * advances over the filtered-out rows (high-water on exhaustion), so ingested\n * ops are skipped once, not rescanned every round.\n */\n onlyNode?: string;\n}\n\n/**\n * Changes inserted after `seq` (a local rowid), in insertion order, plus the\n * new high-water cursor. Used for replication: insertion order never skips a\n * change even when clocks are skewed.\n *\n * With `limit`, the cursor stops at the last returned row so the next pull\n * resumes there; when the scan is exhausted (fewer rows than the limit, or no\n * limit) the cursor jumps to the table's high-water rowid so excluded-dataset\n * tails aren't rescanned every round.\n */\nexport function changesAfterSeq(\n db: DbDriver,\n seq: number,\n opts: ChangesAfterOpts = {},\n): ChangeBatch {\n const exclude = opts.excludeDatasets ?? [];\n const clauses = [\"rowid > ?\"];\n const params: (string | number)[] = [seq];\n if (exclude.length) {\n clauses.push(`dataset NOT IN (${exclude.map(() => \"?\").join(\", \")})`);\n params.push(...exclude);\n }\n if (opts.onlyNode != null) {\n clauses.push(\"node_id = ?\");\n params.push(opts.onlyNode);\n }\n const where = clauses.join(\" AND \");\n const limitSql = opts.limit != null && opts.limit > 0 ? ` LIMIT ${Math.floor(opts.limit)}` : \"\";\n const rows = db\n .query(\n `SELECT rowid AS seq, ${CHANGE_SELECT} FROM crdt_changes WHERE ${where} ORDER BY rowid${limitSql}`,\n )\n .all(...params) as (Change & { seq: number })[];\n\n const exhausted = opts.limit == null || opts.limit <= 0 || rows.length < opts.limit;\n let cursor: number;\n if (exhausted) {\n // High-water on exhaustion. crdt_changes.seq is an AUTOINCREMENT PK (rowid\n // alias), stable across VACUUM and never reused, so MAX(rowid) no longer\n // drops below a cursor a client already holds — the Math.max is now just a\n // defensive floor (was load-bearing before the seq migration, see\n // migrateCrdtChangesSeq).\n const top = db.query(\"SELECT MAX(rowid) AS m FROM crdt_changes\").get() as { m: number | null };\n cursor = Math.max(seq, top.m ?? seq);\n } else {\n cursor = rows[rows.length - 1]!.seq;\n }\n return { changes: rows.map(({ seq: _seq, ...c }) => c), cursor };\n}\n",
|
|
12
|
+
"import { join } from \"node:path\";\nimport { cacheDir } from \"./paths.ts\";\n\nexport interface BlobInfo {\n hash: string;\n path: string;\n size: number;\n}\n\nexport function blobPath(hash: string): string {\n return join(cacheDir(), hash);\n}\n\n/** Content key length: sha256 truncated to 128 bits (32 hex). Shorter keys keep\n * doc markdown (``) readable; collision is negligible.\n * Addressing stays length-agnostic, so legacy full 64-hex refs still resolve. */\nexport const BLOB_HASH_HEX = 32;\n\n/** Full sha256 hex of the bytes. */\nexport function sha256Hex(bytes: Uint8Array): string {\n const hasher = new Bun.CryptoHasher(\"sha256\");\n hasher.update(bytes);\n return hasher.digest(\"hex\");\n}\n\n/** Canonical content hash for new blobs: sha256 of the bytes, truncated. */\nexport function blobHash(bytes: Uint8Array): string {\n return sha256Hex(bytes).slice(0, BLOB_HASH_HEX);\n}\n\n/** Verify fetched bytes match a content reference of either length (canonical\n * 32-hex or legacy 64-hex) — the ref is always a prefix of the full sha256. */\nexport function verifyBlobBytes(bytes: Uint8Array, hash: string): boolean {\n return sha256Hex(bytes).slice(0, hash.length) === hash;\n}\n\n/** Store bytes content-addressed under cache/. Returns its hash + path. */\nexport async function putBlob(data: ArrayBuffer | Uint8Array | string): Promise<BlobInfo> {\n const bytes =\n typeof data === \"string\"\n ? new TextEncoder().encode(data)\n : data instanceof Uint8Array\n ? data\n : new Uint8Array(data);\n const hash = blobHash(bytes);\n const path = blobPath(hash);\n if (!(await Bun.file(path).exists())) await Bun.write(path, bytes);\n return { hash, path, size: bytes.byteLength };\n}\n\nexport async function getBlob(hash: string): Promise<Uint8Array | null> {\n const file = Bun.file(blobPath(hash));\n if (!(await file.exists())) return null;\n return new Uint8Array(await file.arrayBuffer());\n}\n\n/** Store bytes under a GIVEN content hash (not recomputed) — for caching a blob\n * fetched from a peer/bucket by its reference, which may be a legacy 64-hex hash\n * that putBlob's truncation would not reproduce. Returns the byte length. */\nexport async function putBlobAt(hash: string, bytes: Uint8Array): Promise<number> {\n const path = blobPath(hash);\n if (!(await Bun.file(path).exists())) await Bun.write(path, bytes);\n return bytes.byteLength;\n}\n\n/** Remove a blob's bytes from the cache. Returns its size, or 0 if absent. */\nexport async function deleteBlob(hash: string): Promise<number> {\n const file = Bun.file(blobPath(hash));\n if (!(await file.exists())) return 0;\n const size = file.size;\n await file.delete();\n return size;\n}\n",
|
|
13
|
+
"// Portable (driver-only) half of the sites feature: types, name/path\n// canonicalization, MIME inference, and read paths. Split from sites.ts so the\n// browser replica's worker can serve site files offline without pulling the\n// blob store (cache.ts → node:fs) into a browser bundle. sites.ts re-exports\n// everything here — server-side callers keep importing from sites.ts.\n\nimport type { DbDriver } from \"./driver.ts\";\nimport { MhError } from \"./errors.ts\";\nimport { emit, grouped, withChangeGroup } from \"./crdt.ts\";\nimport { newId } from \"./ids.ts\";\nimport type { ColumnsOf } from \"./sqlcols.ts\";\n\nexport interface SiteRow {\n id: string;\n name: string;\n title: string | null;\n created_hlc: string;\n}\n\nexport const SITE_COLS = [\"id\", \"name\", \"title\", \"created_hlc\"] as const;\nconst _siteCols: ColumnsOf<SiteRow, typeof SITE_COLS> = SITE_COLS;\nconst SITE_SELECT = SITE_COLS.join(\", \");\n\nexport type FileEncoding = \"utf8\" | \"base64\" | \"blob\";\n\nexport interface SiteFileRow {\n id: string;\n site_id: string;\n path: string;\n content_type: string;\n encoding: FileEncoding;\n /** Inline text/base64, or a blob hash when encoding === \"blob\". */\n content: string | null;\n}\n\n/** Manifest entry — file metadata without the (potentially large) content. */\nexport type SiteFileSummary = Omit<SiteFileRow, \"content\">;\n\nexport const SITE_FILE_COLS = [\n \"id\", \"site_id\", \"path\", \"content_type\", \"encoding\", \"content\",\n] as const;\nconst _siteFileCols: ColumnsOf<SiteFileRow, typeof SITE_FILE_COLS> = SITE_FILE_COLS;\nexport const SITE_FILE_SELECT = SITE_FILE_COLS.join(\", \");\n\n// ---- mime / encoding helpers -----------------------------------------------\n\nconst MIME: Record<string, string> = {\n html: \"text/html; charset=utf-8\",\n htm: \"text/html; charset=utf-8\",\n css: \"text/css; charset=utf-8\",\n js: \"text/javascript; charset=utf-8\",\n mjs: \"text/javascript; charset=utf-8\",\n json: \"application/json; charset=utf-8\",\n svg: \"image/svg+xml\",\n txt: \"text/plain; charset=utf-8\",\n md: \"text/markdown; charset=utf-8\",\n xml: \"application/xml; charset=utf-8\",\n webmanifest: \"application/manifest+json\",\n ico: \"image/x-icon\",\n png: \"image/png\",\n jpg: \"image/jpeg\",\n jpeg: \"image/jpeg\",\n gif: \"image/gif\",\n webp: \"image/webp\",\n avif: \"image/avif\",\n woff: \"font/woff\",\n woff2: \"font/woff2\",\n ttf: \"font/ttf\",\n otf: \"font/otf\",\n pdf: \"application/pdf\",\n wasm: \"application/wasm\",\n};\n\n/** Guess a content type from a file path's extension; default octet-stream. */\nexport function inferContentType(path: string): string {\n const ext = path.slice(path.lastIndexOf(\".\") + 1).toLowerCase();\n return MIME[ext] ?? \"application/octet-stream\";\n}\n\n// ---- name / path normalization ---------------------------------------------\n\n/**\n * Canonical site slug: lowercase, [a-z0-9-] only, no leading/trailing/repeated\n * dashes. Applied at every write and lookup so the served URL (/sites/<name>/),\n * duplicate detection, and sync replication all agree on one form regardless of\n * how the name was typed (CLI, API, or browser). Throws when nothing usable\n * remains (empty, or all-punctuation). Matches the WebUI's slugify exactly.\n */\nexport function normalizeSiteName(raw: string): string {\n const slug = raw\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n if (!slug) throw new MhError(\"invalid_input\", `invalid site name: ${JSON.stringify(raw)}`);\n return slug;\n}\n\n/**\n * Canonical in-site file path: drop empty / \".\" segments, resolve \"..\" within\n * the bucket, strip leading and duplicate slashes. Files live in SQLite keyed by\n * this exact string (there is no filesystem behind them), so normalizing at the\n * write/serve boundary keeps storage, URL routing, and deletes consistent no\n * matter how the path was typed or percent-encoded. May return \"\" (caller decides).\n */\nexport function normalizeSitePath(raw: string): string {\n const segs: string[] = [];\n for (const seg of raw.split(\"/\")) {\n if (seg === \"\" || seg === \".\") continue;\n if (seg === \"..\") segs.pop();\n else segs.push(seg);\n }\n return segs.join(\"/\");\n}\n\n// ---- read paths --------------------------------------------------------------\n\nexport function getSite(db: DbDriver, id: string): SiteRow | null {\n return db\n .query(`SELECT ${SITE_SELECT} FROM sites WHERE id = ? AND __deleted = 0`)\n .get(id) as SiteRow | null;\n}\n\n/** Most recently created live site with this name (URL routing). */\nexport function getSiteByName(db: DbDriver, name: string): SiteRow | null {\n // Normalize so lookups, dedup, and URL routing all key off the canonical slug\n // (e.g. \"Demo\" and \"demo\" collide). An unusable name simply matches nothing.\n let slug: string;\n try {\n slug = normalizeSiteName(name);\n } catch {\n return null;\n }\n return db\n .query(\n `SELECT ${SITE_SELECT} FROM sites WHERE name = ? AND __deleted = 0 ORDER BY created_hlc DESC LIMIT 1`,\n )\n .get(slug) as SiteRow | null;\n}\n\nexport function listSites(db: DbDriver): SiteRow[] {\n return db\n .query(`SELECT ${SITE_SELECT} FROM sites WHERE __deleted = 0 ORDER BY created_hlc`)\n .all() as SiteRow[];\n}\n\n/** Resolve a site ref (`site_…` id or name) to its row, or throw. */\nexport function resolveSite(db: DbDriver, ref: string): SiteRow {\n const byId = ref.startsWith(\"site_\") ? getSite(db, ref) : null;\n const site = byId ?? getSiteByName(db, ref);\n if (!site) throw new MhError(\"not_found\", `no such site: ${ref}`);\n return site;\n}\n\n/**\n * Portable half of file serving: canonical path resolution (\"\" / trailing \"/\"\n * → index.html, same normalization putFile stored under) + the raw row. Used\n * directly by the browser replica's worker, which must decode utf8/base64\n * itself and cannot reach \"blob\" content at all (blob bytes live in the\n * server's on-disk store, not the oplog — they don't replicate).\n */\nexport function getFileRow(\n db: DbDriver,\n siteId: string,\n path: string,\n): { content_type: string; encoding: FileEncoding; content: string | null } | null {\n // Resolve directory-style requests to index.html *before* normalizing (the\n // trailing-slash signal is lost once empty segments are dropped).\n const withIndex = path === \"\" || path.endsWith(\"/\") ? `${path}index.html` : path;\n const p = normalizeSitePath(withIndex);\n if (!p) return null;\n return db\n .query(\n \"SELECT content_type, encoding, content FROM site_files WHERE site_id = ? AND path = ? AND __deleted = 0 ORDER BY created_hlc LIMIT 1\",\n )\n .get(siteId, p) as { content_type: string; encoding: FileEncoding; content: string | null } | null;\n}\n\nexport function listFiles(db: DbDriver, siteId: string): SiteFileSummary[] {\n return db\n .query(\n \"SELECT id, site_id, path, content_type, encoding FROM site_files WHERE site_id = ? AND __deleted = 0 ORDER BY path\",\n )\n .all(siteId) as SiteFileSummary[];\n}\n\n// ---- portable mutations -----------------------------------------------------\n// All write through emit() so sites replicate over the oplog. These are\n// driver-only (no node:fs / blob store), so the browser replica can author\n// sites offline too — large-binary blob storage is the one server-only piece\n// (see putFile in sites.ts).\n\n/** Binaries at or below this size store inline (base64); larger need a blob. */\nexport const INLINE_LIMIT = 256 * 1024;\n\n/** Text-ish types store as readable utf8; everything else is binary. */\nexport function isTextType(contentType: string): boolean {\n const ct = contentType.toLowerCase();\n return (\n ct.startsWith(\"text/\") ||\n ct.startsWith(\"application/json\") ||\n ct.startsWith(\"application/manifest+json\") ||\n ct.startsWith(\"application/xml\") ||\n ct.startsWith(\"application/javascript\") ||\n ct.startsWith(\"image/svg+xml\")\n );\n}\n\n/** Raster image types (svg is text, handled by isTextType). These always store\n * as a content-addressed blob regardless of size — they never base64-inline\n * into the oplog, keeping replicas lean. */\nexport function isImageType(contentType: string): boolean {\n return contentType.toLowerCase().startsWith(\"image/\") && !isTextType(contentType);\n}\n\nexport function toBytes(data: string | Uint8Array | ArrayBuffer): Uint8Array {\n if (typeof data === \"string\") return new TextEncoder().encode(data);\n return data instanceof Uint8Array ? data : new Uint8Array(data);\n}\n\n/** Portable base64 (no Buffer): for inline small-binary file content. */\nfunction bytesToBase64(bytes: Uint8Array): string {\n let s = \"\";\n for (let i = 0; i < bytes.length; i++) s += String.fromCharCode(bytes[i]!);\n return btoa(s);\n}\n\nexport const createSite = grouped(function createSite(\n db: DbDriver,\n opts: { name: string; title?: string },\n): SiteRow {\n const name = normalizeSiteName(opts.name);\n if (getSiteByName(db, name)) throw new MhError(\"conflict\", `site name already exists: ${name}`);\n const id = newId(\"site\", name);\n const first = emit(db, \"sites\", id, \"name\", name);\n emit(db, \"sites\", id, \"created_hlc\", first.hlc);\n if (opts.title !== undefined) emit(db, \"sites\", id, \"title\", opts.title);\n return getSite(db, id)!;\n});\n\n/** Rename a site and/or change its title. Guards against duplicate names. */\nexport const updateSite = grouped(function updateSite(\n db: DbDriver,\n id: string,\n opts: { name?: string; title?: string },\n): SiteRow {\n if (!getSite(db, id)) throw new MhError(\"not_found\", `no such site: ${id}`);\n if (opts.name !== undefined) {\n const name = normalizeSiteName(opts.name);\n const dup = getSiteByName(db, name);\n if (dup && dup.id !== id) throw new MhError(\"conflict\", `site name already exists: ${name}`);\n emit(db, \"sites\", id, \"name\", name);\n }\n if (opts.title !== undefined) emit(db, \"sites\", id, \"title\", opts.title);\n return getSite(db, id)!;\n});\n\nexport const deleteSite = grouped(function deleteSite(db: DbDriver, id: string): boolean {\n if (!getSite(db, id)) return false;\n const files = db\n .query(\"SELECT id FROM site_files WHERE site_id = ? AND __deleted = 0\")\n .all(id) as { id: string }[];\n for (const f of files) emit(db, \"site_files\", f.id, \"__deleted\", 1);\n emit(db, \"sites\", id, \"__deleted\", 1);\n return true;\n});\n\n/** Stable id for a (site, path) pair so re-uploads merge instead of duplicate. */\nexport function fileIdFor(db: DbDriver, siteId: string, path: string): string | null {\n const row = db\n .query(\"SELECT id FROM site_files WHERE site_id = ? AND path = ? ORDER BY created_hlc LIMIT 1\")\n .get(siteId, path) as { id: string } | null;\n return row?.id ?? null;\n}\n\n/** Emit the register writes for one file (shared by inline + blob put paths). */\nexport function writeFileRow(\n db: DbDriver,\n siteId: string,\n cleanPath: string,\n contentType: string,\n encoding: FileEncoding,\n content: string,\n): SiteFileRow {\n const existing = fileIdFor(db, siteId, cleanPath);\n const id = existing ?? newId(\"sf\", cleanPath);\n withChangeGroup(null, () => {\n if (!existing) {\n const first = emit(db, \"site_files\", id, \"site_id\", siteId);\n emit(db, \"site_files\", id, \"path\", cleanPath);\n emit(db, \"site_files\", id, \"created_hlc\", first.hlc);\n }\n emit(db, \"site_files\", id, \"content_type\", contentType);\n emit(db, \"site_files\", id, \"encoding\", encoding);\n emit(db, \"site_files\", id, \"content\", content);\n emit(db, \"site_files\", id, \"__deleted\", 0); // un-delete on re-upload\n });\n return db.query(`SELECT ${SITE_FILE_SELECT} FROM site_files WHERE id = ?`).get(id) as SiteFileRow;\n}\n\n/**\n * Upload/replace one file inline (utf8 text or small base64 binary) — portable,\n * so the browser replica authors sites offline. Binaries over INLINE_LIMIT need\n * the server-only blob store; here they throw (sites.ts putFile handles them).\n */\nexport function putFileInline(\n db: DbDriver,\n siteId: string,\n path: string,\n opts: { data: string | Uint8Array | ArrayBuffer; contentType?: string },\n): SiteFileRow {\n const cleanPath = normalizeSitePath(path);\n if (!cleanPath) throw new MhError(\"invalid_input\", `invalid file path: ${JSON.stringify(path)}`);\n const contentType = opts.contentType ?? inferContentType(cleanPath);\n let encoding: FileEncoding;\n let content: string;\n if (isTextType(contentType)) {\n encoding = \"utf8\";\n content = typeof opts.data === \"string\" ? opts.data : new TextDecoder().decode(toBytes(opts.data));\n } else {\n const bytes = toBytes(opts.data);\n if (bytes.byteLength > INLINE_LIMIT)\n throw new MhError(\n \"invalid_input\",\n \"binary too large for inline storage (needs a server-backed blob)\",\n );\n encoding = \"base64\";\n content = bytesToBase64(bytes);\n }\n return writeFileRow(db, siteId, cleanPath, contentType, encoding, content);\n}\n\nexport const deleteFile = grouped(function deleteFile(\n db: DbDriver,\n siteId: string,\n path: string,\n): boolean {\n const id = fileIdFor(db, siteId, normalizeSitePath(path));\n if (!id) return false;\n const live = db.query(\"SELECT __deleted AS d FROM site_files WHERE id = ?\").get(id) as {\n d: number;\n } | null;\n if (!live || live.d) return false;\n emit(db, \"site_files\", id, \"__deleted\", 1);\n return true;\n});\n\n/** Count of live files per site (for the management list's file_count). */\nexport function fileCount(db: DbDriver, siteId: string): number {\n return (\n db\n .query(\"SELECT COUNT(*) AS n FROM site_files WHERE site_id = ? AND __deleted = 0\")\n .get(siteId) as { n: number }\n ).n;\n}\n",
|
|
14
|
+
"// Portable (driver-only) half of the blob ledger: policy, presence, the offline\n// \"is this cached blob safe to clear?\" judgment, the reference index, and the\n// node-local blob_cache bookkeeping. No node:fs / Bun here, so a browser worker\n// can read the same judgment. The byte-touching half (delete from disk, resolve\n// missing bytes over the network) lives in blobs.ts.\n//\n// Model: blob bytes are content-addressed (cache.ts). A device may CLEAR a local\n// blob's bytes only when a durable anchor is designated (blob_policy.fullNodes)\n// AND the blob is not this node's own not-yet-flushed production — so the\n// reference (hash, kept in the oplog) stays re-fetchable. A device that is itself\n// a full node, or ANY device while no full node is designated, never clears (the\n// safety floor: with no anchor there is no guaranteed holder, so a cache copy may\n// be the last copy). Durability is judged locally via blob_cache.pending; see\n// docs/impl-context/22-blob-sync (D4, safety-floor revision).\n\nimport type { DbDriver } from \"./driver.ts\";\nimport { emit, withChangeGroup } from \"./crdt.ts\";\nimport { getNodeId } from \"./node.ts\";\n\nexport const POLICY_ID = \"default\";\n\nexport type Redundancy = \"all\" | \"any\";\n\nexport interface BlobPolicy {\n fullNodes: string[];\n redundancy: Redundancy;\n}\n\nexport interface CachedBlob {\n hash: string;\n size: number;\n content_type: string | null;\n last_access: number | null;\n /** Node-local pin: 1 = never auto-evicted / cleared (does not sync). */\n pinned: number;\n /** 1 = bytes produced here, not yet flushed to a durable anchor — protected. */\n pending: number;\n /** Node-local: 1 = the last presence verify confirmed a designated anchor holds\n * this blob (per redundancy). Drives isClearable; reset to 0 on policy change. */\n anchored: number;\n}\n\nexport interface CacheStats {\n /** Total bytes currently held in the node-local cache. */\n totalBytes: number;\n /** Bytes safe to clear (durable on the required full set). */\n clearableBytes: number;\n /** Bytes that cannot be cleared (sole copy / no anchor / this is a full node). */\n retainedBytes: number;\n count: number;\n clearableCount: number;\n}\n\n// ---- policy -----------------------------------------------------------------\n\nexport function readPolicy(db: DbDriver): BlobPolicy {\n const row = db\n .query(\"SELECT full_nodes, redundancy FROM blob_policy WHERE id = ? AND __deleted = 0\")\n .get(POLICY_ID) as { full_nodes: string | null; redundancy: string | null } | null;\n let fullNodes: string[] = [];\n if (row?.full_nodes) {\n try {\n const parsed = JSON.parse(row.full_nodes);\n if (Array.isArray(parsed)) fullNodes = parsed.filter((n) => typeof n === \"string\");\n } catch {\n // malformed — treat as none designated\n }\n }\n const redundancy: Redundancy = row?.redundancy === \"any\" ? \"any\" : \"all\";\n return { fullNodes, redundancy };\n}\n\n/** Designate the full-blob anchors (synced workspace policy). Each entry is\n * either a node id (a device that keeps everything) OR a bucket url `s3://…`\n * (object storage as a durable full library). Bucket urls never match a node id,\n * so isFullBlobNode()/isClearable() are unaffected — they're a visible guardrail. */\nexport const setFullNodes = (db: DbDriver, nodeIds: string[]): void => {\n withChangeGroup(null, () => {\n // de-dupe, keep order\n const seen = new Set<string>();\n const list = nodeIds.filter((n) => n && !seen.has(n) && seen.add(n) != null);\n emit(db, \"blob_policy\", POLICY_ID, \"full_nodes\", list);\n // ensure redundancy has a concrete value on first designation\n const cur = readPolicy(db);\n if (cur.redundancy == null) emit(db, \"blob_policy\", POLICY_ID, \"redundancy\", \"all\");\n });\n invalidateAnchored(db); // anchor set changed → prior verify verdict is stale\n};\n\nexport const setRedundancy = (db: DbDriver, redundancy: Redundancy): void => {\n emit(db, \"blob_policy\", POLICY_ID, \"redundancy\", redundancy);\n invalidateAnchored(db); // any/all changed → re-verify before anything is clearable\n};\n\n/** Is `node` (default: this device) a designated full-blob library? */\nexport function isFullBlobNode(db: DbDriver, node?: string): boolean {\n const id = node ?? getNodeId(db);\n return readPolicy(db).fullNodes.includes(id);\n}\n\n// ---- clear judgment ---------------------------------------------------------\n\n/**\n * Whether this device may safely drop `hash`'s local bytes — a purely LOCAL,\n * offline decision read from local flags. Clearable requires ALL of:\n * 1. This node is not itself the full-blob library (a full node keeps everything).\n * 2. The blob is not a `pending` production (bytes produced here, not yet flushed\n * to an anchor) — the only locally-unique copy.\n * 3. `anchored == 1`: the last presence verify confirmed a designated anchor holds\n * this blob, per redundancy(any/all). Until a verify runs (or after a policy\n * change resets it), anchored is 0 → nothing is clearable (conservative). This\n * replaces the earlier coarse \"an anchor is designated\" floor with a per-blob,\n * freshly-verified fact. See verifyAnchorPresence (blobs.ts) and\n * docs/impl-context/22-blob-sync (D4, on-demand presence verify).\n */\nexport function isClearable(db: DbDriver, hash: string): boolean {\n if (isFullBlobNode(db)) return false; // this node IS the full library → keeps everything\n const row = db\n .query(\"SELECT pending, anchored FROM blob_cache WHERE hash = ?\")\n .get(hash) as { pending: number; anchored: number } | null;\n return !!row && row.pending === 0 && row.anchored === 1;\n}\n\n// ---- verified-presence bookkeeping (node-local) -----------------------------\n\n/** Record/clear the per-blob \"a designated anchor verifiably holds this\" flag. */\nexport function setAnchored(db: DbDriver, hash: string, anchored: boolean): void {\n db.query(\"UPDATE blob_cache SET anchored = ? WHERE hash = ?\").run(anchored ? 1 : 0, hash);\n}\n\nexport function isAnchored(db: DbDriver, hash: string): boolean {\n const row = db.query(\"SELECT anchored FROM blob_cache WHERE hash = ?\").get(hash) as\n | { anchored: number }\n | null;\n return !!row && row.anchored === 1;\n}\n\n/** Drop every verified verdict (after a policy change) — forces a re-verify before\n * anything is clearable again. Also clears the last-verified stamp. */\nexport function invalidateAnchored(db: DbDriver): void {\n db.query(\"UPDATE blob_cache SET anchored = 0\").run();\n db.query(\"DELETE FROM meta WHERE key = ?\").run(BLOB_VERIFIED_AT_KEY);\n}\n\nconst BLOB_VERIFIED_AT_KEY = \"blob_verified_at\";\n\n/** Epoch-ms of the last successful presence verify, or null if never / invalidated. */\nexport function readBlobVerifiedAt(db: DbDriver): number | null {\n const row = db.query(\"SELECT value FROM meta WHERE key = ?\").get(BLOB_VERIFIED_AT_KEY) as\n | { value: string }\n | null;\n return row ? Number(row.value) : null;\n}\n\nexport function writeBlobVerifiedAt(db: DbDriver, ts: number): void {\n db.query(\n \"INSERT INTO meta (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value\",\n ).run(BLOB_VERIFIED_AT_KEY, String(ts));\n}\n\n// ---- reference index --------------------------------------------------------\n\n/** Matches a doc image reference `/blob/<hash>` (canonical 32-hex or legacy\n * 64-hex). Works on raw markdown and JSON-encoded oplog values alike. */\nconst DOC_BLOB_REF = /\\/blob\\/([0-9a-f]{16,64})/g;\n\n/** Blob hashes referenced by a `/blob/<hash>` URL inside a markdown/text value. */\nexport function blobRefsIn(text: string | null): string[] {\n if (!text) return [];\n const out: string[] = [];\n for (const m of text.matchAll(DOC_BLOB_REF)) out.push(m[1]!);\n return out;\n}\n\n/**\n * Every blob hash a live document or site still points at. Union of:\n * - site_files rows stored as a blob (content = hash), and\n * - `/blob/<hash>` references inside live doc_blocks markdown (doc images).\n * Drives GC (orphan = not in this set) and a full node's byte acquisition.\n */\nexport function referencedHashes(db: DbDriver): Set<string> {\n const out = new Set<string>();\n const files = db\n .query(\"SELECT content FROM site_files WHERE encoding = 'blob' AND __deleted = 0\")\n .all() as { content: string | null }[];\n for (const f of files) if (f.content) out.add(f.content);\n\n const blocks = db\n .query(\"SELECT text FROM doc_blocks WHERE __deleted = 0 AND text LIKE '%/blob/%'\")\n .all() as { text: string | null }[];\n for (const b of blocks) for (const h of blobRefsIn(b.text)) out.add(h);\n return out;\n}\n\n// ---- node-local cache ledger (blob_cache) -----------------------------------\n\n/** Record/refresh a blob's ledger row after its bytes land in the cache. */\n/** Record/refresh a cached blob. `pending`: 1 for bytes PRODUCED here (must flush\n * to an anchor before they're clearable), 0 for an ACQUIRED cache copy (already\n * durable at its source). */\nexport function recordBlob(\n db: DbDriver,\n hash: string,\n size: number,\n contentType?: string | null,\n pending = 1,\n): void {\n db.query(\n `INSERT INTO blob_cache (hash, size, content_type, last_access, pending)\n VALUES (?, ?, ?, ?, ?)\n ON CONFLICT(hash) DO UPDATE SET\n size = excluded.size,\n content_type = coalesce(excluded.content_type, blob_cache.content_type),\n last_access = excluded.last_access,\n pending = excluded.pending`,\n ).run(hash, size, contentType ?? null, Date.now(), pending ? 1 : 0);\n}\n\n/** Mark a blob flushed (0) or pending (1). Flush is set after the bytes are\n * confirmed at the durable anchor (see blobs.ts blobMaintenance). */\nexport function setPending(db: DbDriver, hash: string, pending: boolean): void {\n db.query(\"UPDATE blob_cache SET pending = ? WHERE hash = ?\").run(pending ? 1 : 0, hash);\n}\n\n/** Bump last_access on a cache hit (LRU signal for stats/future eviction). */\nexport function touchBlob(db: DbDriver, hash: string): void {\n db.query(\"UPDATE blob_cache SET last_access = ? WHERE hash = ?\").run(Date.now(), hash);\n}\n\nexport function forgetBlob(db: DbDriver, hash: string): void {\n db.query(\"DELETE FROM blob_cache WHERE hash = ?\").run(hash);\n}\n\nexport function cachedBlobs(db: DbDriver): CachedBlob[] {\n return db\n .query(\"SELECT hash, size, content_type, last_access, pinned, pending, anchored FROM blob_cache\")\n .all() as CachedBlob[];\n}\n\n/** Blobs produced here that are not yet flushed to a durable anchor (the upload\n * worklist; steady state is empty). */\nexport function pendingBlobs(db: DbDriver): { hash: string; size: number }[] {\n return db\n .query(\"SELECT hash, size FROM blob_cache WHERE pending = 1\")\n .all() as { hash: string; size: number }[];\n}\n\n/** Pin/unpin a cached blob (node-local; never synced). Returns true when a row\n * was updated (false when the hash isn't in the ledger). */\nexport function setPinned(db: DbDriver, hash: string, pinned: boolean): boolean {\n return (\n db.query(\"UPDATE blob_cache SET pinned = ? WHERE hash = ?\").run(pinned ? 1 : 0, hash)\n .changes > 0\n );\n}\n\n/** Is a cached blob pinned? (false when not in the ledger). */\nexport function isPinned(db: DbDriver, hash: string): boolean {\n const row = db\n .query(\"SELECT pinned FROM blob_cache WHERE hash = ?\")\n .get(hash) as { pinned: number } | null;\n return !!row?.pinned;\n}\n\n/** Recorded content type for a cached blob (null when unknown / not cached). */\nexport function blobContentType(db: DbDriver, hash: string): string | null {\n const row = db\n .query(\"SELECT content_type FROM blob_cache WHERE hash = ?\")\n .get(hash) as { content_type: string | null } | null;\n return row?.content_type ?? null;\n}\n\nexport function cacheStats(db: DbDriver): CacheStats {\n const blobs = cachedBlobs(db);\n let totalBytes = 0;\n let clearableBytes = 0;\n let clearableCount = 0;\n for (const b of blobs) {\n totalBytes += b.size;\n if (isClearable(db, b.hash)) {\n clearableBytes += b.size;\n clearableCount++;\n }\n }\n return {\n totalBytes,\n clearableBytes,\n retainedBytes: totalBytes - clearableBytes,\n count: blobs.length,\n clearableCount,\n };\n}\n\n// ---- device roster (for designating full nodes) -----------------------------\n\nexport interface KnownNode {\n nodeId: string;\n label: string | null;\n self: boolean;\n}\n\n/** Distinct node ids this device knows about (self + outbound peers + grantees),\n * for the \"pick a full-blob device\" selector in Settings / CLI. */\nexport function knownNodes(db: DbDriver): KnownNode[] {\n const self = getNodeId(db);\n const byId = new Map<string, string | null>();\n byId.set(self, null);\n const peers = db\n .query(\"SELECT node_id, label FROM peers WHERE node_id IS NOT NULL\")\n .all() as { node_id: string; label: string | null }[];\n for (const p of peers) if (!byId.get(p.node_id)) byId.set(p.node_id, p.label ?? byId.get(p.node_id) ?? null);\n const grants = db\n .query(\"SELECT DISTINCT node_id FROM peer_grants WHERE node_id IS NOT NULL\")\n .all() as { node_id: string }[];\n for (const g of grants) if (!byId.has(g.node_id)) byId.set(g.node_id, null);\n return [...byId.entries()].map(([nodeId, label]) => ({ nodeId, label, self: nodeId === self }));\n}\n",
|
|
15
|
+
"import type { DbDriver } from \"./driver.ts\";\nimport { putBlob, getBlob } from \"./cache.ts\";\nimport { MhError } from \"./errors.ts\";\nimport {\n type SiteFileRow,\n INLINE_LIMIT,\n inferContentType,\n normalizeSitePath,\n isTextType,\n isImageType,\n toBytes,\n writeFileRow,\n putFileInline,\n getFileRow,\n} from \"./sites-core.ts\";\nimport { recordBlob, touchBlob } from \"./blobs-core.ts\";\n\n// A \"site\" is a named bucket of files (Supabase-Storage-style) served at\n// /sites/<name>/. Everything is written through emit() so sites replicate over\n// /sync like records and documents. File bytes are stored inline as utf8 (text)\n// or base64 (small binaries) so they ride the oplog; large binaries offload to\n// the content-addressed cache (encoding=\"blob\"), whose bytes are node-local.\n//\n// Types, normalization, read paths, AND the inline (utf8/base64) mutations live\n// in sites-core.ts (portable — the browser replica authors + serves sites\n// offline from the same code). This module adds only the two node-only pieces:\n// large-binary blob storage on write and blob byte decoding on serve.\n\nexport * from \"./sites-core.ts\";\n\n/** Upload or replace one file. utf8 text and small binaries ride the oplog via\n * putFileInline (portable); binaries over the inline limit offload to the\n * node-local blob store (server-only — their bytes don't replicate). */\nexport async function putFile(\n db: DbDriver,\n siteId: string,\n path: string,\n opts: { data: string | Uint8Array | ArrayBuffer; contentType?: string },\n): Promise<SiteFileRow> {\n const cleanPath = normalizeSitePath(path);\n if (!cleanPath) throw new MhError(\"invalid_input\", `invalid file path: ${JSON.stringify(path)}`);\n const contentType = opts.contentType ?? inferContentType(cleanPath);\n if (!isTextType(contentType)) {\n const bytes = toBytes(opts.data);\n // Images always offload to a blob (never base64-inline); other binaries only\n // once they exceed the inline limit.\n if (isImageType(contentType) || bytes.byteLength > INLINE_LIMIT) {\n const info = await putBlob(bytes);\n recordBlob(db, info.hash, info.size, contentType); // produced here → pending=1\n return writeFileRow(db, siteId, cleanPath, contentType, \"blob\", info.hash);\n }\n }\n return putFileInline(db, siteId, cleanPath, opts);\n}\n\n/** Resolve a file to served bytes + content type. \"\" / trailing \"/\" → index.html. */\nexport async function getFileForServe(\n db: DbDriver,\n siteId: string,\n path: string,\n): Promise<{ contentType: string; bytes: Uint8Array } | null> {\n const row = getFileRow(db, siteId, path);\n if (!row) return null;\n\n const content = row.content ?? \"\";\n let bytes: Uint8Array | null;\n if (row.encoding === \"utf8\") bytes = new TextEncoder().encode(content);\n else if (row.encoding === \"base64\") bytes = new Uint8Array(Buffer.from(content, \"base64\"));\n else {\n bytes = await getBlob(content); // blob hash\n if (bytes) touchBlob(db, content); // LRU signal for cache stats/clearing\n }\n if (!bytes) return null;\n\n return { contentType: row.content_type, bytes };\n}\n",
|
|
27
16
|
"var _a;\n/** A special constant with type `never` */\nexport const NEVER = /*@__PURE__*/ Object.freeze({\n status: \"aborted\",\n});\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, params) {\n function init(inst, def) {\n if (!inst._zod) {\n Object.defineProperty(inst, \"_zod\", {\n value: {\n def,\n constr: _,\n traits: new Set(),\n },\n enumerable: false,\n });\n }\n if (inst._zod.traits.has(name)) {\n return;\n }\n inst._zod.traits.add(name);\n initializer(inst, def);\n // support prototype modifications\n const proto = _.prototype;\n const keys = Object.keys(proto);\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n if (!(k in inst)) {\n inst[k] = proto[k].bind(inst);\n }\n }\n }\n // doesn't work if Parent has a constructor with arguments\n const Parent = params?.Parent ?? Object;\n class Definition extends Parent {\n }\n Object.defineProperty(Definition, \"name\", { value: name });\n function _(def) {\n var _a;\n const inst = params?.Parent ? new Definition() : this;\n init(inst, def);\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n for (const fn of inst._zod.deferred) {\n fn();\n }\n return inst;\n }\n Object.defineProperty(_, \"init\", { value: init });\n Object.defineProperty(_, Symbol.hasInstance, {\n value: (inst) => {\n if (params?.Parent && inst instanceof params.Parent)\n return true;\n return inst?._zod?.traits?.has(name);\n },\n });\n Object.defineProperty(_, \"name\", { value: name });\n return _;\n}\n////////////////////////////// UTILITIES ///////////////////////////////////////\nexport const $brand = Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n constructor() {\n super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n }\n}\nexport class $ZodEncodeError extends Error {\n constructor(name) {\n super(`Encountered unidirectional transform during encode: ${name}`);\n this.name = \"ZodEncodeError\";\n }\n}\n(_a = globalThis).__zod_globalConfig ?? (_a.__zod_globalConfig = {});\nexport const globalConfig = globalThis.__zod_globalConfig;\nexport function config(newConfig) {\n if (newConfig)\n Object.assign(globalConfig, newConfig);\n return globalConfig;\n}\n",
|
|
28
17
|
"import { globalConfig } from \"./core.js\";\n// functions\nexport function assertEqual(val) {\n return val;\n}\nexport function assertNotEqual(val) {\n return val;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n throw new Error(\"Unexpected value in exhaustive check\");\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n const values = Object.entries(entries)\n .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n .map(([_, v]) => v);\n return values;\n}\nexport function joinValues(array, separator = \"|\") {\n return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n if (typeof value === \"bigint\")\n return value.toString();\n return value;\n}\nexport function cached(getter) {\n const set = false;\n return {\n get value() {\n if (!set) {\n const value = getter();\n Object.defineProperty(this, \"value\", { value });\n return value;\n }\n throw new Error(\"cached value already set\");\n },\n };\n}\nexport function nullish(input) {\n return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n return source.slice(start, end);\n}\nexport function floatSafeRemainder(val, step) {\n const ratio = val / step;\n const roundedRatio = Math.round(ratio);\n // Use a relative epsilon scaled to the magnitude of the result\n const tolerance = Number.EPSILON * Math.max(Math.abs(ratio), 1);\n if (Math.abs(ratio - roundedRatio) < tolerance)\n return 0;\n return ratio - roundedRatio;\n}\nconst EVALUATING = /* @__PURE__*/ Symbol(\"evaluating\");\nexport function defineLazy(object, key, getter) {\n let value = undefined;\n Object.defineProperty(object, key, {\n get() {\n if (value === EVALUATING) {\n // Circular reference detected, return undefined to break the cycle\n return undefined;\n }\n if (value === undefined) {\n value = EVALUATING;\n value = getter();\n }\n return value;\n },\n set(v) {\n Object.defineProperty(object, key, {\n value: v,\n // configurable: true,\n });\n // object[key] = v;\n },\n configurable: true,\n });\n}\nexport function objectClone(obj) {\n return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));\n}\nexport function assignProp(target, prop, value) {\n Object.defineProperty(target, prop, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n}\nexport function mergeDefs(...defs) {\n const mergedDescriptors = {};\n for (const def of defs) {\n const descriptors = Object.getOwnPropertyDescriptors(def);\n Object.assign(mergedDescriptors, descriptors);\n }\n return Object.defineProperties({}, mergedDescriptors);\n}\nexport function cloneDef(schema) {\n return mergeDefs(schema._zod.def);\n}\nexport function getElementAtPath(obj, path) {\n if (!path)\n return obj;\n return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n const keys = Object.keys(promisesObj);\n const promises = keys.map((key) => promisesObj[key]);\n return Promise.all(promises).then((results) => {\n const resolvedObj = {};\n for (let i = 0; i < keys.length; i++) {\n resolvedObj[keys[i]] = results[i];\n }\n return resolvedObj;\n });\n}\nexport function randomString(length = 10) {\n const chars = \"abcdefghijklmnopqrstuvwxyz\";\n let str = \"\";\n for (let i = 0; i < length; i++) {\n str += chars[Math.floor(Math.random() * chars.length)];\n }\n return str;\n}\nexport function esc(str) {\n return JSON.stringify(str);\n}\nexport function slugify(input) {\n return input\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, \"\")\n .replace(/[\\s_-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\nexport const captureStackTrace = (\"captureStackTrace\" in Error ? Error.captureStackTrace : (..._args) => { });\nexport function isObject(data) {\n return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = /* @__PURE__*/ cached(() => {\n // Skip the probe under `jitless`: strict CSPs report the caught `new Function`\n // as a `securitypolicyviolation` even though the throw is swallowed.\n if (globalConfig.jitless) {\n return false;\n }\n // @ts-ignore\n if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n return false;\n }\n try {\n const F = Function;\n new F(\"\");\n return true;\n }\n catch (_) {\n return false;\n }\n});\nexport function isPlainObject(o) {\n if (isObject(o) === false)\n return false;\n // modified constructor\n const ctor = o.constructor;\n if (ctor === undefined)\n return true;\n if (typeof ctor !== \"function\")\n return true;\n // modified prototype\n const prot = ctor.prototype;\n if (isObject(prot) === false)\n return false;\n // ctor doesn't have static `isPrototypeOf`\n if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n return false;\n }\n return true;\n}\nexport function shallowClone(o) {\n if (isPlainObject(o))\n return { ...o };\n if (Array.isArray(o))\n return [...o];\n if (o instanceof Map)\n return new Map(o);\n if (o instanceof Set)\n return new Set(o);\n return o;\n}\nexport function numKeys(data) {\n let keyCount = 0;\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n keyCount++;\n }\n }\n return keyCount;\n}\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return \"undefined\";\n case \"string\":\n return \"string\";\n case \"number\":\n return Number.isNaN(data) ? \"nan\" : \"number\";\n case \"boolean\":\n return \"boolean\";\n case \"function\":\n return \"function\";\n case \"bigint\":\n return \"bigint\";\n case \"symbol\":\n return \"symbol\";\n case \"object\":\n if (Array.isArray(data)) {\n return \"array\";\n }\n if (data === null) {\n return \"null\";\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return \"promise\";\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return \"map\";\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return \"set\";\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return \"date\";\n }\n // @ts-ignore\n if (typeof File !== \"undefined\" && data instanceof File) {\n return \"file\";\n }\n return \"object\";\n default:\n throw new Error(`Unknown data type: ${t}`);\n }\n};\nexport const propertyKeyTypes = /* @__PURE__*/ new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = /* @__PURE__*/ new Set([\n \"string\",\n \"number\",\n \"bigint\",\n \"boolean\",\n \"symbol\",\n \"undefined\",\n]);\nexport function escapeRegex(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n const cl = new inst._zod.constr(def ?? inst._zod.def);\n if (!def || params?.parent)\n cl._zod.parent = inst;\n return cl;\n}\nexport function normalizeParams(_params) {\n const params = _params;\n if (!params)\n return {};\n if (typeof params === \"string\")\n return { error: () => params };\n if (params?.message !== undefined) {\n if (params?.error !== undefined)\n throw new Error(\"Cannot specify both `message` and `error` params\");\n params.error = params.message;\n }\n delete params.message;\n if (typeof params.error === \"string\")\n return { ...params, error: () => params.error };\n return params;\n}\nexport function createTransparentProxy(getter) {\n let target;\n return new Proxy({}, {\n get(_, prop, receiver) {\n target ?? (target = getter());\n return Reflect.get(target, prop, receiver);\n },\n set(_, prop, value, receiver) {\n target ?? (target = getter());\n return Reflect.set(target, prop, value, receiver);\n },\n has(_, prop) {\n target ?? (target = getter());\n return Reflect.has(target, prop);\n },\n deleteProperty(_, prop) {\n target ?? (target = getter());\n return Reflect.deleteProperty(target, prop);\n },\n ownKeys(_) {\n target ?? (target = getter());\n return Reflect.ownKeys(target);\n },\n getOwnPropertyDescriptor(_, prop) {\n target ?? (target = getter());\n return Reflect.getOwnPropertyDescriptor(target, prop);\n },\n defineProperty(_, prop, descriptor) {\n target ?? (target = getter());\n return Reflect.defineProperty(target, prop, descriptor);\n },\n });\n}\nexport function stringifyPrimitive(value) {\n if (typeof value === \"bigint\")\n return value.toString() + \"n\";\n if (typeof value === \"string\")\n return `\"${value}\"`;\n return `${value}`;\n}\nexport function optionalKeys(shape) {\n return Object.keys(shape).filter((k) => {\n return shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n });\n}\nexport const NUMBER_FORMAT_RANGES = {\n safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n int32: [-2147483648, 2147483647],\n uint32: [0, 4294967295],\n float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n};\nexport const BIGINT_FORMAT_RANGES = {\n int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".pick() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = {};\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n newShape[key] = currDef.shape[key];\n }\n assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function omit(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".omit() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = { ...schema._zod.def.shape };\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n delete newShape[key];\n }\n assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function extend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to extend: expected a plain object\");\n }\n const checks = schema._zod.def.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n // Only throw if new shape overlaps with existing shape\n // Use getOwnPropertyDescriptor to check key existence without accessing values\n const existingShape = schema._zod.def.shape;\n for (const key in shape) {\n if (Object.getOwnPropertyDescriptor(existingShape, key) !== undefined) {\n throw new Error(\"Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.\");\n }\n }\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n });\n return clone(schema, def);\n}\nexport function safeExtend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to safeExtend: expected a plain object\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n });\n return clone(schema, def);\n}\nexport function merge(a, b) {\n if (a._zod.def.checks?.length) {\n throw new Error(\".merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.\");\n }\n const def = mergeDefs(a._zod.def, {\n get shape() {\n const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n get catchall() {\n return b._zod.def.catchall;\n },\n checks: b._zod.def.checks ?? [],\n });\n return clone(a, def);\n}\nexport function partial(Class, schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".partial() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in oldShape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n else {\n for (const key in oldShape) {\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function required(Class, schema, mask) {\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n else {\n for (const key in oldShape) {\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n });\n return clone(schema, def);\n}\n// invalid_type | too_big | too_small | invalid_format | not_multiple_of | unrecognized_keys | invalid_union | invalid_key | invalid_element | invalid_value | custom\nexport function aborted(x, startIndex = 0) {\n if (x.aborted === true)\n return true;\n for (let i = startIndex; i < x.issues.length; i++) {\n if (x.issues[i]?.continue !== true) {\n return true;\n }\n }\n return false;\n}\n// Checks for explicit abort (continue === false), as opposed to implicit abort (continue === undefined).\n// Used to respect `abort: true` in .refine() even for checks that have a `when` function.\nexport function explicitlyAborted(x, startIndex = 0) {\n if (x.aborted === true)\n return true;\n for (let i = startIndex; i < x.issues.length; i++) {\n if (x.issues[i]?.continue === false) {\n return true;\n }\n }\n return false;\n}\nexport function prefixIssues(path, issues) {\n return issues.map((iss) => {\n var _a;\n (_a = iss).path ?? (_a.path = []);\n iss.path.unshift(path);\n return iss;\n });\n}\nexport function unwrapMessage(message) {\n return typeof message === \"string\" ? message : message?.message;\n}\nexport function finalizeIssue(iss, ctx, config) {\n const message = iss.message\n ? iss.message\n : (unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n unwrapMessage(ctx?.error?.(iss)) ??\n unwrapMessage(config.customError?.(iss)) ??\n unwrapMessage(config.localeError?.(iss)) ??\n \"Invalid input\");\n const { inst: _inst, continue: _continue, input: _input, ...rest } = iss;\n rest.path ?? (rest.path = []);\n rest.message = message;\n if (ctx?.reportInput) {\n rest.input = _input;\n }\n return rest;\n}\nexport function getSizableOrigin(input) {\n if (input instanceof Set)\n return \"set\";\n if (input instanceof Map)\n return \"map\";\n // @ts-ignore\n if (input instanceof File)\n return \"file\";\n return \"unknown\";\n}\nexport function getLengthableOrigin(input) {\n if (Array.isArray(input))\n return \"array\";\n if (typeof input === \"string\")\n return \"string\";\n return \"unknown\";\n}\nexport function parsedType(data) {\n const t = typeof data;\n switch (t) {\n case \"number\": {\n return Number.isNaN(data) ? \"nan\" : \"number\";\n }\n case \"object\": {\n if (data === null) {\n return \"null\";\n }\n if (Array.isArray(data)) {\n return \"array\";\n }\n const obj = data;\n if (obj && Object.getPrototypeOf(obj) !== Object.prototype && \"constructor\" in obj && obj.constructor) {\n return obj.constructor.name;\n }\n }\n }\n return t;\n}\nexport function issue(...args) {\n const [iss, input, inst] = args;\n if (typeof iss === \"string\") {\n return {\n message: iss,\n code: \"custom\",\n input,\n inst,\n };\n }\n return { ...iss };\n}\nexport function cleanEnum(obj) {\n return Object.entries(obj)\n .filter(([k, _]) => {\n // return true if NaN, meaning it's not a number, thus a string key\n return Number.isNaN(Number.parseInt(k, 10));\n })\n .map((el) => el[1]);\n}\n// Codec utility functions\nexport function base64ToUint8Array(base64) {\n const binaryString = atob(base64);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes;\n}\nexport function uint8ArrayToBase64(bytes) {\n let binaryString = \"\";\n for (let i = 0; i < bytes.length; i++) {\n binaryString += String.fromCharCode(bytes[i]);\n }\n return btoa(binaryString);\n}\nexport function base64urlToUint8Array(base64url) {\n const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const padding = \"=\".repeat((4 - (base64.length % 4)) % 4);\n return base64ToUint8Array(base64 + padding);\n}\nexport function uint8ArrayToBase64url(bytes) {\n return uint8ArrayToBase64(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nexport function hexToUint8Array(hex) {\n const cleanHex = hex.replace(/^0x/, \"\");\n if (cleanHex.length % 2 !== 0) {\n throw new Error(\"Invalid hex string length\");\n }\n const bytes = new Uint8Array(cleanHex.length / 2);\n for (let i = 0; i < cleanHex.length; i += 2) {\n bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);\n }\n return bytes;\n}\nexport function uint8ArrayToHex(bytes) {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n// instanceof\nexport class Class {\n constructor(..._args) { }\n}\n",
|
|
29
18
|
"import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\nconst initializer = (inst, def) => {\n inst.name = \"$ZodError\";\n Object.defineProperty(inst, \"_zod\", {\n value: inst._zod,\n enumerable: false,\n });\n Object.defineProperty(inst, \"issues\", {\n value: def,\n enumerable: false,\n });\n inst.message = JSON.stringify(def, util.jsonStringifyReplacer, 2);\n Object.defineProperty(inst, \"toString\", {\n value: () => inst.message,\n enumerable: false,\n });\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, { Parent: Error });\nexport function flattenError(error, mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of error.issues) {\n if (sub.path.length > 0) {\n fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n fieldErrors[sub.path[0]].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n}\nexport function formatError(error, mapper = (issue) => issue.message) {\n const fieldErrors = { _errors: [] };\n const processError = (error, path = []) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n issue.errors.map((issues) => processError({ issues }, [...path, ...issue.path]));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues }, [...path, ...issue.path]);\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues }, [...path, ...issue.path]);\n }\n else {\n const fullpath = [...path, ...issue.path];\n if (fullpath.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < fullpath.length) {\n const el = fullpath[i];\n const terminal = i === fullpath.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n }\n };\n processError(error);\n return fieldErrors;\n}\nexport function treeifyError(error, mapper = (issue) => issue.message) {\n const result = { errors: [] };\n const processError = (error, path = []) => {\n var _a, _b;\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n // regular union error\n issue.errors.map((issues) => processError({ issues }, [...path, ...issue.path]));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues }, [...path, ...issue.path]);\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues }, [...path, ...issue.path]);\n }\n else {\n const fullpath = [...path, ...issue.path];\n if (fullpath.length === 0) {\n result.errors.push(mapper(issue));\n continue;\n }\n let curr = result;\n let i = 0;\n while (i < fullpath.length) {\n const el = fullpath[i];\n const terminal = i === fullpath.length - 1;\n if (typeof el === \"string\") {\n curr.properties ?? (curr.properties = {});\n (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });\n curr = curr.properties[el];\n }\n else {\n curr.items ?? (curr.items = []);\n (_b = curr.items)[el] ?? (_b[el] = { errors: [] });\n curr = curr.items[el];\n }\n if (terminal) {\n curr.errors.push(mapper(issue));\n }\n i++;\n }\n }\n }\n };\n processError(error);\n return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n * issues: [\n * {\n * expected: 'string',\n * code: 'invalid_type',\n * path: [ 'username' ],\n * message: 'Invalid input: expected string'\n * },\n * {\n * expected: 'number',\n * code: 'invalid_type',\n * path: [ 'favoriteNumbers', 1 ],\n * message: 'Invalid input: expected number'\n * }\n * ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n * ✖ Expected number, received string at \"username\n * favoriteNumbers[0]\n * ✖ Invalid input: expected number\n * ```\n */\nexport function toDotPath(_path) {\n const segs = [];\n const path = _path.map((seg) => (typeof seg === \"object\" ? seg.key : seg));\n for (const seg of path) {\n if (typeof seg === \"number\")\n segs.push(`[${seg}]`);\n else if (typeof seg === \"symbol\")\n segs.push(`[${JSON.stringify(String(seg))}]`);\n else if (/[^\\w$]/.test(seg))\n segs.push(`[${JSON.stringify(seg)}]`);\n else {\n if (segs.length)\n segs.push(\".\");\n segs.push(seg);\n }\n }\n return segs.join(\"\");\n}\nexport function prettifyError(error) {\n const lines = [];\n // sort by path length\n const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);\n // Process each issue\n for (const issue of issues) {\n lines.push(`✖ ${issue.message}`);\n if (issue.path?.length)\n lines.push(` → at ${toDotPath(issue.path)}`);\n }\n // Convert Map to formatted string\n return lines.join(\"\\n\");\n}\n",
|
|
@@ -85,11 +74,14 @@
|
|
|
85
74
|
"import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"字符\", verb: \"包含\" },\n file: { unit: \"字节\", verb: \"包含\" },\n array: { unit: \"项\", verb: \"包含\" },\n set: { unit: \"项\", verb: \"包含\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"输入\",\n email: \"电子邮件\",\n url: \"URL\",\n emoji: \"表情符号\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO日期时间\",\n date: \"ISO日期\",\n time: \"ISO时间\",\n duration: \"ISO时长\",\n ipv4: \"IPv4地址\",\n ipv6: \"IPv6地址\",\n cidrv4: \"IPv4网段\",\n cidrv6: \"IPv6网段\",\n base64: \"base64编码字符串\",\n base64url: \"base64url编码字符串\",\n json_string: \"JSON字符串\",\n e164: \"E.164号码\",\n jwt: \"JWT\",\n template_literal: \"输入\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"数字\",\n array: \"数组\",\n null: \"空值(null)\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `无效输入:期望 instanceof ${issue.expected},实际接收 ${received}`;\n }\n return `无效输入:期望 ${expected},实际接收 ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `无效输入:期望 ${util.stringifyPrimitive(issue.values[0])}`;\n return `无效选项:期望以下之一 ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `数值过大:期望 ${issue.origin ?? \"值\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"个元素\"}`;\n return `数值过大:期望 ${issue.origin ?? \"值\"} ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `数值过小:期望 ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `数值过小:期望 ${issue.origin} ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `无效字符串:必须以 \"${_issue.prefix}\" 开头`;\n if (_issue.format === \"ends_with\")\n return `无效字符串:必须以 \"${_issue.suffix}\" 结尾`;\n if (_issue.format === \"includes\")\n return `无效字符串:必须包含 \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `无效字符串:必须满足正则表达式 ${_issue.pattern}`;\n return `无效${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `无效数字:必须是 ${issue.divisor} 的倍数`;\n case \"unrecognized_keys\":\n return `出现未知的键(key): ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `${issue.origin} 中的键(key)无效`;\n case \"invalid_union\":\n return \"无效输入\";\n case \"invalid_element\":\n return `${issue.origin} 中包含无效值(value)`;\n default:\n return `无效输入`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n",
|
|
86
75
|
"import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"字元\", verb: \"擁有\" },\n file: { unit: \"位元組\", verb: \"擁有\" },\n array: { unit: \"項目\", verb: \"擁有\" },\n set: { unit: \"項目\", verb: \"擁有\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"輸入\",\n email: \"郵件地址\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO 日期時間\",\n date: \"ISO 日期\",\n time: \"ISO 時間\",\n duration: \"ISO 期間\",\n ipv4: \"IPv4 位址\",\n ipv6: \"IPv6 位址\",\n cidrv4: \"IPv4 範圍\",\n cidrv6: \"IPv6 範圍\",\n base64: \"base64 編碼字串\",\n base64url: \"base64url 編碼字串\",\n json_string: \"JSON 字串\",\n e164: \"E.164 數值\",\n jwt: \"JWT\",\n template_literal: \"輸入\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `無效的輸入值:預期為 instanceof ${issue.expected},但收到 ${received}`;\n }\n return `無效的輸入值:預期為 ${expected},但收到 ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `無效的輸入值:預期為 ${util.stringifyPrimitive(issue.values[0])}`;\n return `無效的選項:預期為以下其中之一 ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `數值過大:預期 ${issue.origin ?? \"值\"} 應為 ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"個元素\"}`;\n return `數值過大:預期 ${issue.origin ?? \"值\"} 應為 ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `數值過小:預期 ${issue.origin} 應為 ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `數值過小:預期 ${issue.origin} 應為 ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `無效的字串:必須以 \"${_issue.prefix}\" 開頭`;\n }\n if (_issue.format === \"ends_with\")\n return `無效的字串:必須以 \"${_issue.suffix}\" 結尾`;\n if (_issue.format === \"includes\")\n return `無效的字串:必須包含 \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `無效的字串:必須符合格式 ${_issue.pattern}`;\n return `無效的 ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `無效的數字:必須為 ${issue.divisor} 的倍數`;\n case \"unrecognized_keys\":\n return `無法識別的鍵值${issue.keys.length > 1 ? \"們\" : \"\"}:${util.joinValues(issue.keys, \"、\")}`;\n case \"invalid_key\":\n return `${issue.origin} 中有無效的鍵值`;\n case \"invalid_union\":\n return \"無效的輸入值\";\n case \"invalid_element\":\n return `${issue.origin} 中有無效的值`;\n default:\n return `無效的輸入值`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n",
|
|
87
76
|
"import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"àmi\", verb: \"ní\" },\n file: { unit: \"bytes\", verb: \"ní\" },\n array: { unit: \"nkan\", verb: \"ní\" },\n set: { unit: \"nkan\", verb: \"ní\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"ẹ̀rọ ìbáwọlé\",\n email: \"àdírẹ́sì ìmẹ́lì\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"àkókò ISO\",\n date: \"ọjọ́ ISO\",\n time: \"àkókò ISO\",\n duration: \"àkókò tó pé ISO\",\n ipv4: \"àdírẹ́sì IPv4\",\n ipv6: \"àdírẹ́sì IPv6\",\n cidrv4: \"àgbègbè IPv4\",\n cidrv6: \"àgbègbè IPv6\",\n base64: \"ọ̀rọ̀ tí a kọ́ ní base64\",\n base64url: \"ọ̀rọ̀ base64url\",\n json_string: \"ọ̀rọ̀ JSON\",\n e164: \"nọ́mbà E.164\",\n jwt: \"JWT\",\n template_literal: \"ẹ̀rọ ìbáwọlé\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"nọ́mbà\",\n array: \"akopọ\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Ìbáwọlé aṣìṣe: a ní láti fi instanceof ${issue.expected}, àmọ̀ a rí ${received}`;\n }\n return `Ìbáwọlé aṣìṣe: a ní láti fi ${expected}, àmọ̀ a rí ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Ìbáwọlé aṣìṣe: a ní láti fi ${util.stringifyPrimitive(issue.values[0])}`;\n return `Àṣàyàn aṣìṣe: yan ọ̀kan lára ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Tó pọ̀ jù: a ní láti jẹ́ pé ${issue.origin ?? \"iye\"} ${sizing.verb} ${adj}${issue.maximum} ${sizing.unit}`;\n return `Tó pọ̀ jù: a ní láti jẹ́ ${adj}${issue.maximum}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Kéré ju: a ní láti jẹ́ pé ${issue.origin} ${sizing.verb} ${adj}${issue.minimum} ${sizing.unit}`;\n return `Kéré ju: a ní láti jẹ́ ${adj}${issue.minimum}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Ọ̀rọ̀ aṣìṣe: gbọ́dọ̀ bẹ̀rẹ̀ pẹ̀lú \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Ọ̀rọ̀ aṣìṣe: gbọ́dọ̀ parí pẹ̀lú \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Ọ̀rọ̀ aṣìṣe: gbọ́dọ̀ ní \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Ọ̀rọ̀ aṣìṣe: gbọ́dọ̀ bá àpẹẹrẹ mu ${_issue.pattern}`;\n return `Aṣìṣe: ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Nọ́mbà aṣìṣe: gbọ́dọ̀ jẹ́ èyà pípín ti ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Bọtìnì àìmọ̀: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Bọtìnì aṣìṣe nínú ${issue.origin}`;\n case \"invalid_union\":\n return \"Ìbáwọlé aṣìṣe\";\n case \"invalid_element\":\n return `Iye aṣìṣe nínú ${issue.origin}`;\n default:\n return \"Ìbáwọlé aṣìṣe\";\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n",
|
|
77
|
+
"export { default as ar } from \"./ar.js\";\nexport { default as az } from \"./az.js\";\nexport { default as be } from \"./be.js\";\nexport { default as bg } from \"./bg.js\";\nexport { default as ca } from \"./ca.js\";\nexport { default as cs } from \"./cs.js\";\nexport { default as da } from \"./da.js\";\nexport { default as de } from \"./de.js\";\nexport { default as el } from \"./el.js\";\nexport { default as en } from \"./en.js\";\nexport { default as eo } from \"./eo.js\";\nexport { default as es } from \"./es.js\";\nexport { default as fa } from \"./fa.js\";\nexport { default as fi } from \"./fi.js\";\nexport { default as fr } from \"./fr.js\";\nexport { default as frCA } from \"./fr-CA.js\";\nexport { default as he } from \"./he.js\";\nexport { default as hr } from \"./hr.js\";\nexport { default as hu } from \"./hu.js\";\nexport { default as hy } from \"./hy.js\";\nexport { default as id } from \"./id.js\";\nexport { default as is } from \"./is.js\";\nexport { default as it } from \"./it.js\";\nexport { default as ja } from \"./ja.js\";\nexport { default as ka } from \"./ka.js\";\nexport { default as kh } from \"./kh.js\";\nexport { default as km } from \"./km.js\";\nexport { default as ko } from \"./ko.js\";\nexport { default as lt } from \"./lt.js\";\nexport { default as mk } from \"./mk.js\";\nexport { default as ms } from \"./ms.js\";\nexport { default as nl } from \"./nl.js\";\nexport { default as no } from \"./no.js\";\nexport { default as ota } from \"./ota.js\";\nexport { default as ps } from \"./ps.js\";\nexport { default as pl } from \"./pl.js\";\nexport { default as pt } from \"./pt.js\";\nexport { default as ro } from \"./ro.js\";\nexport { default as ru } from \"./ru.js\";\nexport { default as sl } from \"./sl.js\";\nexport { default as sv } from \"./sv.js\";\nexport { default as ta } from \"./ta.js\";\nexport { default as th } from \"./th.js\";\nexport { default as tr } from \"./tr.js\";\nexport { default as ua } from \"./ua.js\";\nexport { default as uk } from \"./uk.js\";\nexport { default as ur } from \"./ur.js\";\nexport { default as uz } from \"./uz.js\";\nexport { default as vi } from \"./vi.js\";\nexport { default as zhCN } from \"./zh-CN.js\";\nexport { default as zhTW } from \"./zh-TW.js\";\nexport { default as yo } from \"./yo.js\";\n",
|
|
88
78
|
"var _a;\nexport const $output = Symbol(\"ZodOutput\");\nexport const $input = Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n constructor() {\n this._map = new WeakMap();\n this._idmap = new Map();\n }\n add(schema, ..._meta) {\n const meta = _meta[0];\n this._map.set(schema, meta);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.set(meta.id, schema);\n }\n return this;\n }\n clear() {\n this._map = new WeakMap();\n this._idmap = new Map();\n return this;\n }\n remove(schema) {\n const meta = this._map.get(schema);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.delete(meta.id);\n }\n this._map.delete(schema);\n return this;\n }\n get(schema) {\n // return this._map.get(schema) as any;\n // inherit metadata\n const p = schema._zod.parent;\n if (p) {\n const pm = { ...(this.get(p) ?? {}) };\n delete pm.id; // do not inherit id\n const f = { ...pm, ...this._map.get(schema) };\n return Object.keys(f).length ? f : undefined;\n }\n return this._map.get(schema);\n }\n has(schema) {\n return this._map.has(schema);\n }\n}\n// registries\nexport function registry() {\n return new $ZodRegistry();\n}\n(_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());\nexport const globalRegistry = globalThis.__zod_globalRegistry;\n",
|
|
89
79
|
"import * as checks from \"./checks.js\";\nimport * as registries from \"./registries.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\n// @__NO_SIDE_EFFECTS__\nexport function _string(Class, params) {\n return new Class({\n type: \"string\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedString(Class, params) {\n return new Class({\n type: \"string\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _email(Class, params) {\n return new Class({\n type: \"string\",\n format: \"email\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _guid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"guid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v4\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v6\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv7(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v7\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _emoji(Class, params) {\n return new Class({\n type: \"string\",\n format: \"emoji\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nanoid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"nanoid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link _cuid2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\n// @__NO_SIDE_EFFECTS__\nexport function _cuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid2(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid2\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ulid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ulid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _xid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"xid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ksuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ksuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mac(Class, params) {\n return new Class({\n type: \"string\",\n format: \"mac\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _e164(Class, params) {\n return new Class({\n type: \"string\",\n format: \"e164\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _jwt(Class, params) {\n return new Class({\n type: \"string\",\n format: \"jwt\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport const TimePrecision = {\n Any: null,\n Minute: -1,\n Second: 0,\n Millisecond: 3,\n Microsecond: 6,\n};\n// @__NO_SIDE_EFFECTS__\nexport function _isoDateTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"datetime\",\n check: \"string_format\",\n offset: false,\n local: false,\n precision: null,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDate(Class, params) {\n return new Class({\n type: \"string\",\n format: \"date\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"time\",\n check: \"string_format\",\n precision: null,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDuration(Class, params) {\n return new Class({\n type: \"string\",\n format: \"duration\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _number(Class, params) {\n return new Class({\n type: \"number\",\n checks: [],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedNumber(Class, params) {\n return new Class({\n type: \"number\",\n coerce: true,\n checks: [],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"safeint\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float64(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"int32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"uint32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _boolean(Class, params) {\n return new Class({\n type: \"boolean\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBoolean(Class, params) {\n return new Class({\n type: \"boolean\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _bigint(Class, params) {\n return new Class({\n type: \"bigint\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBigint(Class, params) {\n return new Class({\n type: \"bigint\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"int64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"uint64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _symbol(Class, params) {\n return new Class({\n type: \"symbol\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _undefined(Class, params) {\n return new Class({\n type: \"undefined\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _null(Class, params) {\n return new Class({\n type: \"null\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _any(Class) {\n return new Class({\n type: \"any\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _unknown(Class) {\n return new Class({\n type: \"unknown\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _never(Class, params) {\n return new Class({\n type: \"never\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _void(Class, params) {\n return new Class({\n type: \"void\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _date(Class, params) {\n return new Class({\n type: \"date\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedDate(Class, params) {\n return new Class({\n type: \"date\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nan(Class, params) {\n return new Class({\n type: \"nan\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lt(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lte(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.lte()` instead. */\n_lte as _max, };\n// @__NO_SIDE_EFFECTS__\nexport function _gt(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _gte(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.gte()` instead. */\n_gte as _min, };\n// @__NO_SIDE_EFFECTS__\nexport function _positive(params) {\n return _gt(0, params);\n}\n// negative\n// @__NO_SIDE_EFFECTS__\nexport function _negative(params) {\n return _lt(0, params);\n}\n// nonpositive\n// @__NO_SIDE_EFFECTS__\nexport function _nonpositive(params) {\n return _lte(0, params);\n}\n// nonnegative\n// @__NO_SIDE_EFFECTS__\nexport function _nonnegative(params) {\n return _gte(0, params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function _multipleOf(value, params) {\n return new checks.$ZodCheckMultipleOf({\n check: \"multiple_of\",\n ...util.normalizeParams(params),\n value,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxSize(maximum, params) {\n return new checks.$ZodCheckMaxSize({\n check: \"max_size\",\n ...util.normalizeParams(params),\n maximum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minSize(minimum, params) {\n return new checks.$ZodCheckMinSize({\n check: \"min_size\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _size(size, params) {\n return new checks.$ZodCheckSizeEquals({\n check: \"size_equals\",\n ...util.normalizeParams(params),\n size,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxLength(maximum, params) {\n const ch = new checks.$ZodCheckMaxLength({\n check: \"max_length\",\n ...util.normalizeParams(params),\n maximum,\n });\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minLength(minimum, params) {\n return new checks.$ZodCheckMinLength({\n check: \"min_length\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _length(length, params) {\n return new checks.$ZodCheckLengthEquals({\n check: \"length_equals\",\n ...util.normalizeParams(params),\n length,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _regex(pattern, params) {\n return new checks.$ZodCheckRegex({\n check: \"string_format\",\n format: \"regex\",\n ...util.normalizeParams(params),\n pattern,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lowercase(params) {\n return new checks.$ZodCheckLowerCase({\n check: \"string_format\",\n format: \"lowercase\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uppercase(params) {\n return new checks.$ZodCheckUpperCase({\n check: \"string_format\",\n format: \"uppercase\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _includes(includes, params) {\n return new checks.$ZodCheckIncludes({\n check: \"string_format\",\n format: \"includes\",\n ...util.normalizeParams(params),\n includes,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _startsWith(prefix, params) {\n return new checks.$ZodCheckStartsWith({\n check: \"string_format\",\n format: \"starts_with\",\n ...util.normalizeParams(params),\n prefix,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _endsWith(suffix, params) {\n return new checks.$ZodCheckEndsWith({\n check: \"string_format\",\n format: \"ends_with\",\n ...util.normalizeParams(params),\n suffix,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _property(property, schema, params) {\n return new checks.$ZodCheckProperty({\n check: \"property\",\n property,\n schema,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mime(types, params) {\n return new checks.$ZodCheckMimeType({\n check: \"mime_type\",\n mime: types,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _overwrite(tx) {\n return new checks.$ZodCheckOverwrite({\n check: \"overwrite\",\n tx,\n });\n}\n// normalize\n// @__NO_SIDE_EFFECTS__\nexport function _normalize(form) {\n return _overwrite((input) => input.normalize(form));\n}\n// trim\n// @__NO_SIDE_EFFECTS__\nexport function _trim() {\n return _overwrite((input) => input.trim());\n}\n// toLowerCase\n// @__NO_SIDE_EFFECTS__\nexport function _toLowerCase() {\n return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\n// @__NO_SIDE_EFFECTS__\nexport function _toUpperCase() {\n return _overwrite((input) => input.toUpperCase());\n}\n// slugify\n// @__NO_SIDE_EFFECTS__\nexport function _slugify() {\n return _overwrite((input) => util.slugify(input));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _array(Class, element, params) {\n return new Class({\n type: \"array\",\n element,\n // get element() {\n // return element;\n // },\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _union(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n ...util.normalizeParams(params),\n });\n}\nexport function _xor(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n inclusive: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n return new Class({\n type: \"union\",\n options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _intersection(Class, left, right) {\n return new Class({\n type: \"intersection\",\n left,\n right,\n });\n}\n// export function _tuple(\n// Class: util.SchemaClass<schemas.$ZodTuple>,\n// items: [],\n// params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\n// @__NO_SIDE_EFFECTS__\nexport function _tuple(Class, items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new Class({\n type: \"tuple\",\n items,\n rest,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _record(Class, keyType, valueType, params) {\n return new Class({\n type: \"record\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _map(Class, keyType, valueType, params) {\n return new Class({\n type: \"map\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _set(Class, valueType, params) {\n return new Class({\n type: \"set\",\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _enum(Class, values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n // if (Array.isArray(values)) {\n // for (const value of values) {\n // entries[value] = value;\n // }\n // } else {\n // Object.assign(entries, values);\n // }\n // const entries: util.EnumLike = {};\n // for (const val of values) {\n // entries[val] = val;\n // }\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function _nativeEnum(Class, entries, params) {\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _literal(Class, value, params) {\n return new Class({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _file(Class, params) {\n return new Class({\n type: \"file\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _transform(Class, fn) {\n return new Class({\n type: \"transform\",\n transform: fn,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _optional(Class, innerType) {\n return new Class({\n type: \"optional\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nullable(Class, innerType) {\n return new Class({\n type: \"nullable\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _default(Class, innerType, defaultValue) {\n return new Class({\n type: \"default\",\n innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nonoptional(Class, innerType, params) {\n return new Class({\n type: \"nonoptional\",\n innerType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _success(Class, innerType) {\n return new Class({\n type: \"success\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _catch(Class, innerType, catchValue) {\n return new Class({\n type: \"catch\",\n innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _pipe(Class, in_, out) {\n return new Class({\n type: \"pipe\",\n in: in_,\n out,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _readonly(Class, innerType) {\n return new Class({\n type: \"readonly\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _templateLiteral(Class, parts, params) {\n return new Class({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lazy(Class, getter) {\n return new Class({\n type: \"lazy\",\n getter,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _promise(Class, innerType) {\n return new Class({\n type: \"promise\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _custom(Class, fn, _params) {\n const norm = util.normalizeParams(_params);\n norm.abort ?? (norm.abort = true); // default to abort:false\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...norm,\n });\n return schema;\n}\n// same as _custom but defaults to abort:false\n// @__NO_SIDE_EFFECTS__\nexport function _refine(Class, fn, _params) {\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...util.normalizeParams(_params),\n });\n return schema;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _superRefine(fn, params) {\n const ch = _check((payload) => {\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n _issue.input ?? (_issue.input = payload.value);\n _issue.inst ?? (_issue.inst = ch);\n _issue.continue ?? (_issue.continue = !ch._zod.def.abort); // abort is always undefined, so this is always true...\n payload.issues.push(util.issue(_issue));\n }\n };\n return fn(payload.value, payload);\n }, params);\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _check(fn, params) {\n const ch = new checks.$ZodCheck({\n check: \"custom\",\n ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function describe(description) {\n const ch = new checks.$ZodCheck({ check: \"describe\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, description });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function meta(metadata) {\n const ch = new checks.$ZodCheck({ check: \"meta\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, ...metadata });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringbool(Classes, _params) {\n const params = util.normalizeParams(_params);\n let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n if (params.case !== \"sensitive\") {\n truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n }\n const truthySet = new Set(truthyArray);\n const falsySet = new Set(falsyArray);\n const _Codec = Classes.Codec ?? schemas.$ZodCodec;\n const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n const _String = Classes.String ?? schemas.$ZodString;\n const stringSchema = new _String({ type: \"string\", error: params.error });\n const booleanSchema = new _Boolean({ type: \"boolean\", error: params.error });\n const codec = new _Codec({\n type: \"pipe\",\n in: stringSchema,\n out: booleanSchema,\n transform: ((input, payload) => {\n let data = input;\n if (params.case !== \"sensitive\")\n data = data.toLowerCase();\n if (truthySet.has(data)) {\n return true;\n }\n else if (falsySet.has(data)) {\n return false;\n }\n else {\n payload.issues.push({\n code: \"invalid_value\",\n expected: \"stringbool\",\n values: [...truthySet, ...falsySet],\n input: payload.value,\n inst: codec,\n continue: false,\n });\n return {};\n }\n }),\n reverseTransform: ((input, _payload) => {\n if (input === true) {\n return truthyArray[0] || \"true\";\n }\n else {\n return falsyArray[0] || \"false\";\n }\n }),\n error: params.error,\n });\n return codec;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n const params = util.normalizeParams(_params);\n const def = {\n ...util.normalizeParams(_params),\n check: \"string_format\",\n type: \"string\",\n format,\n fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n ...params,\n };\n if (fnOrRegex instanceof RegExp) {\n def.pattern = fnOrRegex;\n }\n const inst = new Class(def);\n return inst;\n}\n",
|
|
90
80
|
"import { globalRegistry } from \"./registries.js\";\n// function initializeContext<T extends schemas.$ZodType>(inputs: JSONSchemaGeneratorParams<T>): ToJSONSchemaContext<T> {\n// return {\n// processor: inputs.processor,\n// metadataRegistry: inputs.metadata ?? globalRegistry,\n// target: inputs.target ?? \"draft-2020-12\",\n// unrepresentable: inputs.unrepresentable ?? \"throw\",\n// };\n// }\nexport function initializeContext(params) {\n // Normalize target: convert old non-hyphenated versions to hyphenated versions\n let target = params?.target ?? \"draft-2020-12\";\n if (target === \"draft-4\")\n target = \"draft-04\";\n if (target === \"draft-7\")\n target = \"draft-07\";\n return {\n processors: params.processors ?? {},\n metadataRegistry: params?.metadata ?? globalRegistry,\n target,\n unrepresentable: params?.unrepresentable ?? \"throw\",\n override: params?.override ?? (() => { }),\n io: params?.io ?? \"output\",\n counter: 0,\n seen: new Map(),\n cycles: params?.cycles ?? \"ref\",\n reused: params?.reused ?? \"inline\",\n external: params?.external ?? undefined,\n };\n}\nexport function process(schema, ctx, _params = { path: [], schemaPath: [] }) {\n var _a;\n const def = schema._zod.def;\n // check for schema in seens\n const seen = ctx.seen.get(schema);\n if (seen) {\n seen.count++;\n // check if cycle\n const isCycle = _params.schemaPath.includes(schema);\n if (isCycle) {\n seen.cycle = _params.path;\n }\n return seen.schema;\n }\n // initialize\n const result = { schema: {}, count: 1, cycle: undefined, path: _params.path };\n ctx.seen.set(schema, result);\n // custom method overrides default behavior\n const overrideSchema = schema._zod.toJSONSchema?.();\n if (overrideSchema) {\n result.schema = overrideSchema;\n }\n else {\n const params = {\n ..._params,\n schemaPath: [..._params.schemaPath, schema],\n path: _params.path,\n };\n if (schema._zod.processJSONSchema) {\n schema._zod.processJSONSchema(ctx, result.schema, params);\n }\n else {\n const _json = result.schema;\n const processor = ctx.processors[def.type];\n if (!processor) {\n throw new Error(`[toJSONSchema]: Non-representable type encountered: ${def.type}`);\n }\n processor(schema, ctx, _json, params);\n }\n const parent = schema._zod.parent;\n if (parent) {\n // Also set ref if processor didn't (for inheritance)\n if (!result.ref)\n result.ref = parent;\n process(parent, ctx, params);\n ctx.seen.get(parent).isParent = true;\n }\n }\n // metadata\n const meta = ctx.metadataRegistry.get(schema);\n if (meta)\n Object.assign(result.schema, meta);\n if (ctx.io === \"input\" && isTransforming(schema)) {\n // examples/defaults only apply to output type of pipe\n delete result.schema.examples;\n delete result.schema.default;\n }\n // set prefault as default\n if (ctx.io === \"input\" && \"_prefault\" in result.schema)\n (_a = result.schema).default ?? (_a.default = result.schema._prefault);\n delete result.schema._prefault;\n // pulling fresh from ctx.seen in case it was overwritten\n const _result = ctx.seen.get(schema);\n return _result.schema;\n}\nexport function extractDefs(ctx, schema\n// params: EmitParams\n) {\n // iterate over seen map;\n const root = ctx.seen.get(schema);\n if (!root)\n throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n // Track ids to detect duplicates across different schemas\n const idToSchema = new Map();\n for (const entry of ctx.seen.entries()) {\n const id = ctx.metadataRegistry.get(entry[0])?.id;\n if (id) {\n const existing = idToSchema.get(id);\n if (existing && existing !== entry[0]) {\n throw new Error(`Duplicate schema id \"${id}\" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);\n }\n idToSchema.set(id, entry[0]);\n }\n }\n // returns a ref to the schema\n // defId will be empty if the ref points to an external schema (or #)\n const makeURI = (entry) => {\n // comparing the seen objects because sometimes\n // multiple schemas map to the same seen object.\n // e.g. lazy\n // external is configured\n const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n if (ctx.external) {\n const externalId = ctx.external.registry.get(entry[0])?.id; // ?? \"__shared\";// `__schema${ctx.counter++}`;\n // check if schema is in the external registry\n const uriGenerator = ctx.external.uri ?? ((id) => id);\n if (externalId) {\n return { ref: uriGenerator(externalId) };\n }\n // otherwise, add to __shared\n const id = entry[1].defId ?? entry[1].schema.id ?? `schema${ctx.counter++}`;\n entry[1].defId = id; // set defId so it will be reused if needed\n return { defId: id, ref: `${uriGenerator(\"__shared\")}#/${defsSegment}/${id}` };\n }\n if (entry[1] === root) {\n return { ref: \"#\" };\n }\n // self-contained schema\n const uriPrefix = `#`;\n const defUriPrefix = `${uriPrefix}/${defsSegment}/`;\n const defId = entry[1].schema.id ?? `__schema${ctx.counter++}`;\n return { defId, ref: defUriPrefix + defId };\n };\n // stored cached version in `def` property\n // remove all properties, set $ref\n const extractToDef = (entry) => {\n // if the schema is already a reference, do not extract it\n if (entry[1].schema.$ref) {\n return;\n }\n const seen = entry[1];\n const { ref, defId } = makeURI(entry);\n seen.def = { ...seen.schema };\n // defId won't be set if the schema is a reference to an external schema\n // or if the schema is the root schema\n if (defId)\n seen.defId = defId;\n // wipe away all properties except $ref\n const schema = seen.schema;\n for (const key in schema) {\n delete schema[key];\n }\n schema.$ref = ref;\n };\n // throw on cycles\n // break cycles\n if (ctx.cycles === \"throw\") {\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n if (seen.cycle) {\n throw new Error(\"Cycle detected: \" +\n `#/${seen.cycle?.join(\"/\")}/<root>` +\n '\\n\\nSet the `cycles` parameter to `\"ref\"` to resolve cyclical schemas with defs.');\n }\n }\n }\n // extract schemas into $defs\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n // convert root schema to # $ref\n if (schema === entry[0]) {\n extractToDef(entry); // this has special handling for the root schema\n continue;\n }\n // extract schemas that are in the external registry\n if (ctx.external) {\n const ext = ctx.external.registry.get(entry[0])?.id;\n if (schema !== entry[0] && ext) {\n extractToDef(entry);\n continue;\n }\n }\n // extract schemas with `id` meta\n const id = ctx.metadataRegistry.get(entry[0])?.id;\n if (id) {\n extractToDef(entry);\n continue;\n }\n // break cycles\n if (seen.cycle) {\n // any\n extractToDef(entry);\n continue;\n }\n // extract reused schemas\n if (seen.count > 1) {\n if (ctx.reused === \"ref\") {\n extractToDef(entry);\n // biome-ignore lint:\n continue;\n }\n }\n }\n}\nexport function finalize(ctx, schema) {\n const root = ctx.seen.get(schema);\n if (!root)\n throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n // flatten refs - inherit properties from parent schemas\n const flattenRef = (zodSchema) => {\n const seen = ctx.seen.get(zodSchema);\n // already processed\n if (seen.ref === null)\n return;\n const schema = seen.def ?? seen.schema;\n const _cached = { ...schema };\n const ref = seen.ref;\n seen.ref = null; // prevent infinite recursion\n if (ref) {\n flattenRef(ref);\n const refSeen = ctx.seen.get(ref);\n const refSchema = refSeen.schema;\n // merge referenced schema into current\n if (refSchema.$ref && (ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\")) {\n // older drafts can't combine $ref with other properties\n schema.allOf = schema.allOf ?? [];\n schema.allOf.push(refSchema);\n }\n else {\n Object.assign(schema, refSchema);\n }\n // restore child's own properties (child wins)\n Object.assign(schema, _cached);\n const isParentRef = zodSchema._zod.parent === ref;\n // For parent chain, child is a refinement - remove parent-only properties\n if (isParentRef) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (!(key in _cached)) {\n delete schema[key];\n }\n }\n }\n // When ref was extracted to $defs, remove properties that match the definition\n if (refSchema.$ref && refSeen.def) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (key in refSeen.def && JSON.stringify(schema[key]) === JSON.stringify(refSeen.def[key])) {\n delete schema[key];\n }\n }\n }\n }\n // If parent was extracted (has $ref), propagate $ref to this schema\n // This handles cases like: readonly().meta({id}).describe()\n // where processor sets ref to innerType but parent should be referenced\n const parent = zodSchema._zod.parent;\n if (parent && parent !== ref) {\n // Ensure parent is processed first so its def has inherited properties\n flattenRef(parent);\n const parentSeen = ctx.seen.get(parent);\n if (parentSeen?.schema.$ref) {\n schema.$ref = parentSeen.schema.$ref;\n // De-duplicate with parent's definition\n if (parentSeen.def) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (key in parentSeen.def && JSON.stringify(schema[key]) === JSON.stringify(parentSeen.def[key])) {\n delete schema[key];\n }\n }\n }\n }\n }\n // execute overrides\n ctx.override({\n zodSchema: zodSchema,\n jsonSchema: schema,\n path: seen.path ?? [],\n });\n };\n for (const entry of [...ctx.seen.entries()].reverse()) {\n flattenRef(entry[0]);\n }\n const result = {};\n if (ctx.target === \"draft-2020-12\") {\n result.$schema = \"https://json-schema.org/draft/2020-12/schema\";\n }\n else if (ctx.target === \"draft-07\") {\n result.$schema = \"http://json-schema.org/draft-07/schema#\";\n }\n else if (ctx.target === \"draft-04\") {\n result.$schema = \"http://json-schema.org/draft-04/schema#\";\n }\n else if (ctx.target === \"openapi-3.0\") {\n // OpenAPI 3.0 schema objects should not include a $schema property\n }\n else {\n // Arbitrary string values are allowed but won't have a $schema property set\n }\n if (ctx.external?.uri) {\n const id = ctx.external.registry.get(schema)?.id;\n if (!id)\n throw new Error(\"Schema is missing an `id` property\");\n result.$id = ctx.external.uri(id);\n }\n Object.assign(result, root.def ?? root.schema);\n // The `id` in `.meta()` is a Zod-specific registration tag used to extract\n // schemas into $defs — it is not user-facing JSON Schema metadata. Strip it\n // from the output body where it would otherwise leak. The id is preserved\n // implicitly via the $defs key (and via $ref paths).\n const rootMetaId = ctx.metadataRegistry.get(schema)?.id;\n if (rootMetaId !== undefined && result.id === rootMetaId)\n delete result.id;\n // build defs object\n const defs = ctx.external?.defs ?? {};\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n if (seen.def && seen.defId) {\n if (seen.def.id === seen.defId)\n delete seen.def.id;\n defs[seen.defId] = seen.def;\n }\n }\n // set definitions in result\n if (ctx.external) {\n }\n else {\n if (Object.keys(defs).length > 0) {\n if (ctx.target === \"draft-2020-12\") {\n result.$defs = defs;\n }\n else {\n result.definitions = defs;\n }\n }\n }\n try {\n // this \"finalizes\" this schema and ensures all cycles are removed\n // each call to finalize() is functionally independent\n // though the seen map is shared\n const finalized = JSON.parse(JSON.stringify(result));\n Object.defineProperty(finalized, \"~standard\", {\n value: {\n ...schema[\"~standard\"],\n jsonSchema: {\n input: createStandardJSONSchemaMethod(schema, \"input\", ctx.processors),\n output: createStandardJSONSchemaMethod(schema, \"output\", ctx.processors),\n },\n },\n enumerable: false,\n writable: false,\n });\n return finalized;\n }\n catch (_err) {\n throw new Error(\"Error converting schema to JSON.\");\n }\n}\nfunction isTransforming(_schema, _ctx) {\n const ctx = _ctx ?? { seen: new Set() };\n if (ctx.seen.has(_schema))\n return false;\n ctx.seen.add(_schema);\n const def = _schema._zod.def;\n if (def.type === \"transform\")\n return true;\n if (def.type === \"array\")\n return isTransforming(def.element, ctx);\n if (def.type === \"set\")\n return isTransforming(def.valueType, ctx);\n if (def.type === \"lazy\")\n return isTransforming(def.getter(), ctx);\n if (def.type === \"promise\" ||\n def.type === \"optional\" ||\n def.type === \"nonoptional\" ||\n def.type === \"nullable\" ||\n def.type === \"readonly\" ||\n def.type === \"default\" ||\n def.type === \"prefault\") {\n return isTransforming(def.innerType, ctx);\n }\n if (def.type === \"intersection\") {\n return isTransforming(def.left, ctx) || isTransforming(def.right, ctx);\n }\n if (def.type === \"record\" || def.type === \"map\") {\n return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);\n }\n if (def.type === \"pipe\") {\n if (_schema._zod.traits.has(\"$ZodCodec\"))\n return true;\n return isTransforming(def.in, ctx) || isTransforming(def.out, ctx);\n }\n if (def.type === \"object\") {\n for (const key in def.shape) {\n if (isTransforming(def.shape[key], ctx))\n return true;\n }\n return false;\n }\n if (def.type === \"union\") {\n for (const option of def.options) {\n if (isTransforming(option, ctx))\n return true;\n }\n return false;\n }\n if (def.type === \"tuple\") {\n for (const item of def.items) {\n if (isTransforming(item, ctx))\n return true;\n }\n if (def.rest && isTransforming(def.rest, ctx))\n return true;\n return false;\n }\n return false;\n}\n/**\n * Creates a toJSONSchema method for a schema instance.\n * This encapsulates the logic of initializing context, processing, extracting defs, and finalizing.\n */\nexport const createToJSONSchemaMethod = (schema, processors = {}) => (params) => {\n const ctx = initializeContext({ ...params, processors });\n process(schema, ctx);\n extractDefs(ctx, schema);\n return finalize(ctx, schema);\n};\nexport const createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) => {\n const { libraryOptions, target } = params ?? {};\n const ctx = initializeContext({ ...(libraryOptions ?? {}), target, io, processors });\n process(schema, ctx);\n extractDefs(ctx, schema);\n return finalize(ctx, schema);\n};\n",
|
|
91
81
|
"import { extractDefs, finalize, initializeContext, process, } from \"./to-json-schema.js\";\nimport { getEnumValues } from \"./util.js\";\nconst formatMap = {\n guid: \"uuid\",\n url: \"uri\",\n datetime: \"date-time\",\n json_string: \"json-string\",\n regex: \"\", // do not set\n};\n// ==================== SIMPLE TYPE PROCESSORS ====================\nexport const stringProcessor = (schema, ctx, _json, _params) => {\n const json = _json;\n json.type = \"string\";\n const { minimum, maximum, format, patterns, contentEncoding } = schema._zod\n .bag;\n if (typeof minimum === \"number\")\n json.minLength = minimum;\n if (typeof maximum === \"number\")\n json.maxLength = maximum;\n // custom pattern overrides format\n if (format) {\n json.format = formatMap[format] ?? format;\n if (json.format === \"\")\n delete json.format; // empty format is not valid\n // JSON Schema format: \"time\" requires a full time with offset or Z\n // z.iso.time() does not include timezone information, so format: \"time\" should never be used\n if (format === \"time\") {\n delete json.format;\n }\n }\n if (contentEncoding)\n json.contentEncoding = contentEncoding;\n if (patterns && patterns.size > 0) {\n const regexes = [...patterns];\n if (regexes.length === 1)\n json.pattern = regexes[0].source;\n else if (regexes.length > 1) {\n json.allOf = [\n ...regexes.map((regex) => ({\n ...(ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\"\n ? { type: \"string\" }\n : {}),\n pattern: regex.source,\n })),\n ];\n }\n }\n};\nexport const numberProcessor = (schema, ctx, _json, _params) => {\n const json = _json;\n const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag;\n if (typeof format === \"string\" && format.includes(\"int\"))\n json.type = \"integer\";\n else\n json.type = \"number\";\n // when both minimum and exclusiveMinimum exist, pick the more restrictive one\n const exMin = typeof exclusiveMinimum === \"number\" && exclusiveMinimum >= (minimum ?? Number.NEGATIVE_INFINITY);\n const exMax = typeof exclusiveMaximum === \"number\" && exclusiveMaximum <= (maximum ?? Number.POSITIVE_INFINITY);\n const legacy = ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\";\n if (exMin) {\n if (legacy) {\n json.minimum = exclusiveMinimum;\n json.exclusiveMinimum = true;\n }\n else {\n json.exclusiveMinimum = exclusiveMinimum;\n }\n }\n else if (typeof minimum === \"number\") {\n json.minimum = minimum;\n }\n if (exMax) {\n if (legacy) {\n json.maximum = exclusiveMaximum;\n json.exclusiveMaximum = true;\n }\n else {\n json.exclusiveMaximum = exclusiveMaximum;\n }\n }\n else if (typeof maximum === \"number\") {\n json.maximum = maximum;\n }\n if (typeof multipleOf === \"number\")\n json.multipleOf = multipleOf;\n};\nexport const booleanProcessor = (_schema, _ctx, json, _params) => {\n json.type = \"boolean\";\n};\nexport const bigintProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"BigInt cannot be represented in JSON Schema\");\n }\n};\nexport const symbolProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Symbols cannot be represented in JSON Schema\");\n }\n};\nexport const nullProcessor = (_schema, ctx, json, _params) => {\n if (ctx.target === \"openapi-3.0\") {\n json.type = \"string\";\n json.nullable = true;\n json.enum = [null];\n }\n else {\n json.type = \"null\";\n }\n};\nexport const undefinedProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Undefined cannot be represented in JSON Schema\");\n }\n};\nexport const voidProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Void cannot be represented in JSON Schema\");\n }\n};\nexport const neverProcessor = (_schema, _ctx, json, _params) => {\n json.not = {};\n};\nexport const anyProcessor = (_schema, _ctx, _json, _params) => {\n // empty schema accepts anything\n};\nexport const unknownProcessor = (_schema, _ctx, _json, _params) => {\n // empty schema accepts anything\n};\nexport const dateProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Date cannot be represented in JSON Schema\");\n }\n};\nexport const enumProcessor = (schema, _ctx, json, _params) => {\n const def = schema._zod.def;\n const values = getEnumValues(def.entries);\n // Number enums can have both string and number values\n if (values.every((v) => typeof v === \"number\"))\n json.type = \"number\";\n if (values.every((v) => typeof v === \"string\"))\n json.type = \"string\";\n json.enum = values;\n};\nexport const literalProcessor = (schema, ctx, json, _params) => {\n const def = schema._zod.def;\n const vals = [];\n for (const val of def.values) {\n if (val === undefined) {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Literal `undefined` cannot be represented in JSON Schema\");\n }\n else {\n // do not add to vals\n }\n }\n else if (typeof val === \"bigint\") {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"BigInt literals cannot be represented in JSON Schema\");\n }\n else {\n vals.push(Number(val));\n }\n }\n else {\n vals.push(val);\n }\n }\n if (vals.length === 0) {\n // do nothing (an undefined literal was stripped)\n }\n else if (vals.length === 1) {\n const val = vals[0];\n json.type = val === null ? \"null\" : typeof val;\n if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n json.enum = [val];\n }\n else {\n json.const = val;\n }\n }\n else {\n if (vals.every((v) => typeof v === \"number\"))\n json.type = \"number\";\n if (vals.every((v) => typeof v === \"string\"))\n json.type = \"string\";\n if (vals.every((v) => typeof v === \"boolean\"))\n json.type = \"boolean\";\n if (vals.every((v) => v === null))\n json.type = \"null\";\n json.enum = vals;\n }\n};\nexport const nanProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"NaN cannot be represented in JSON Schema\");\n }\n};\nexport const templateLiteralProcessor = (schema, _ctx, json, _params) => {\n const _json = json;\n const pattern = schema._zod.pattern;\n if (!pattern)\n throw new Error(\"Pattern not found in template literal\");\n _json.type = \"string\";\n _json.pattern = pattern.source;\n};\nexport const fileProcessor = (schema, _ctx, json, _params) => {\n const _json = json;\n const file = {\n type: \"string\",\n format: \"binary\",\n contentEncoding: \"binary\",\n };\n const { minimum, maximum, mime } = schema._zod.bag;\n if (minimum !== undefined)\n file.minLength = minimum;\n if (maximum !== undefined)\n file.maxLength = maximum;\n if (mime) {\n if (mime.length === 1) {\n file.contentMediaType = mime[0];\n Object.assign(_json, file);\n }\n else {\n Object.assign(_json, file); // shared props at root\n _json.anyOf = mime.map((m) => ({ contentMediaType: m })); // only contentMediaType differs\n }\n }\n else {\n Object.assign(_json, file);\n }\n};\nexport const successProcessor = (_schema, _ctx, json, _params) => {\n json.type = \"boolean\";\n};\nexport const customProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Custom types cannot be represented in JSON Schema\");\n }\n};\nexport const functionProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Function types cannot be represented in JSON Schema\");\n }\n};\nexport const transformProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Transforms cannot be represented in JSON Schema\");\n }\n};\nexport const mapProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Map cannot be represented in JSON Schema\");\n }\n};\nexport const setProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Set cannot be represented in JSON Schema\");\n }\n};\n// ==================== COMPOSITE TYPE PROCESSORS ====================\nexport const arrayProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n const { minimum, maximum } = schema._zod.bag;\n if (typeof minimum === \"number\")\n json.minItems = minimum;\n if (typeof maximum === \"number\")\n json.maxItems = maximum;\n json.type = \"array\";\n json.items = process(def.element, ctx, {\n ...params,\n path: [...params.path, \"items\"],\n });\n};\nexport const objectProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"object\";\n json.properties = {};\n const shape = def.shape;\n for (const key in shape) {\n json.properties[key] = process(shape[key], ctx, {\n ...params,\n path: [...params.path, \"properties\", key],\n });\n }\n // required keys\n const allKeys = new Set(Object.keys(shape));\n const requiredKeys = new Set([...allKeys].filter((key) => {\n const v = def.shape[key]._zod;\n if (ctx.io === \"input\") {\n return v.optin === undefined;\n }\n else {\n return v.optout === undefined;\n }\n }));\n if (requiredKeys.size > 0) {\n json.required = Array.from(requiredKeys);\n }\n // catchall\n if (def.catchall?._zod.def.type === \"never\") {\n // strict\n json.additionalProperties = false;\n }\n else if (!def.catchall) {\n // regular\n if (ctx.io === \"output\")\n json.additionalProperties = false;\n }\n else if (def.catchall) {\n json.additionalProperties = process(def.catchall, ctx, {\n ...params,\n path: [...params.path, \"additionalProperties\"],\n });\n }\n};\nexport const unionProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n // Exclusive unions (inclusive === false) use oneOf (exactly one match) instead of anyOf (one or more matches)\n // This includes both z.xor() and discriminated unions\n const isExclusive = def.inclusive === false;\n const options = def.options.map((x, i) => process(x, ctx, {\n ...params,\n path: [...params.path, isExclusive ? \"oneOf\" : \"anyOf\", i],\n }));\n if (isExclusive) {\n json.oneOf = options;\n }\n else {\n json.anyOf = options;\n }\n};\nexport const intersectionProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n const a = process(def.left, ctx, {\n ...params,\n path: [...params.path, \"allOf\", 0],\n });\n const b = process(def.right, ctx, {\n ...params,\n path: [...params.path, \"allOf\", 1],\n });\n const isSimpleIntersection = (val) => \"allOf\" in val && Object.keys(val).length === 1;\n const allOf = [\n ...(isSimpleIntersection(a) ? a.allOf : [a]),\n ...(isSimpleIntersection(b) ? b.allOf : [b]),\n ];\n json.allOf = allOf;\n};\nexport const tupleProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"array\";\n const prefixPath = ctx.target === \"draft-2020-12\" ? \"prefixItems\" : \"items\";\n const restPath = ctx.target === \"draft-2020-12\" ? \"items\" : ctx.target === \"openapi-3.0\" ? \"items\" : \"additionalItems\";\n const prefixItems = def.items.map((x, i) => process(x, ctx, {\n ...params,\n path: [...params.path, prefixPath, i],\n }));\n const rest = def.rest\n ? process(def.rest, ctx, {\n ...params,\n path: [...params.path, restPath, ...(ctx.target === \"openapi-3.0\" ? [def.items.length] : [])],\n })\n : null;\n if (ctx.target === \"draft-2020-12\") {\n json.prefixItems = prefixItems;\n if (rest) {\n json.items = rest;\n }\n }\n else if (ctx.target === \"openapi-3.0\") {\n json.items = {\n anyOf: prefixItems,\n };\n if (rest) {\n json.items.anyOf.push(rest);\n }\n json.minItems = prefixItems.length;\n if (!rest) {\n json.maxItems = prefixItems.length;\n }\n }\n else {\n json.items = prefixItems;\n if (rest) {\n json.additionalItems = rest;\n }\n }\n // length\n const { minimum, maximum } = schema._zod.bag;\n if (typeof minimum === \"number\")\n json.minItems = minimum;\n if (typeof maximum === \"number\")\n json.maxItems = maximum;\n};\nexport const recordProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"object\";\n // For looseRecord with regex patterns, use patternProperties\n // This correctly represents \"only validate keys matching the pattern\" semantics\n // and composes well with allOf (intersections)\n const keyType = def.keyType;\n const keyBag = keyType._zod.bag;\n const patterns = keyBag?.patterns;\n if (def.mode === \"loose\" && patterns && patterns.size > 0) {\n // Use patternProperties for looseRecord with regex patterns\n const valueSchema = process(def.valueType, ctx, {\n ...params,\n path: [...params.path, \"patternProperties\", \"*\"],\n });\n json.patternProperties = {};\n for (const pattern of patterns) {\n json.patternProperties[pattern.source] = valueSchema;\n }\n }\n else {\n // Default behavior: use propertyNames + additionalProperties\n if (ctx.target === \"draft-07\" || ctx.target === \"draft-2020-12\") {\n json.propertyNames = process(def.keyType, ctx, {\n ...params,\n path: [...params.path, \"propertyNames\"],\n });\n }\n json.additionalProperties = process(def.valueType, ctx, {\n ...params,\n path: [...params.path, \"additionalProperties\"],\n });\n }\n // Add required for keys with discrete values (enum, literal, etc.)\n const keyValues = keyType._zod.values;\n if (keyValues) {\n const validKeyValues = [...keyValues].filter((v) => typeof v === \"string\" || typeof v === \"number\");\n if (validKeyValues.length > 0) {\n json.required = validKeyValues;\n }\n }\n};\nexport const nullableProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n const inner = process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n if (ctx.target === \"openapi-3.0\") {\n seen.ref = def.innerType;\n json.nullable = true;\n }\n else {\n json.anyOf = [inner, { type: \"null\" }];\n }\n};\nexport const nonoptionalProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const defaultProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n json.default = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const prefaultProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n if (ctx.io === \"input\")\n json._prefault = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const catchProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n let catchValue;\n try {\n catchValue = def.catchValue(undefined);\n }\n catch {\n throw new Error(\"Dynamic catch values are not supported in JSON Schema\");\n }\n json.default = catchValue;\n};\nexport const pipeProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n const inIsTransform = def.in._zod.traits.has(\"$ZodTransform\");\n const innerType = ctx.io === \"input\" ? (inIsTransform ? def.out : def.in) : def.out;\n process(innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = innerType;\n};\nexport const readonlyProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n json.readOnly = true;\n};\nexport const promiseProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const optionalProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const lazyProcessor = (schema, ctx, _json, params) => {\n const innerType = schema._zod.innerType;\n process(innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = innerType;\n};\n// ==================== ALL PROCESSORS ====================\nexport const allProcessors = {\n string: stringProcessor,\n number: numberProcessor,\n boolean: booleanProcessor,\n bigint: bigintProcessor,\n symbol: symbolProcessor,\n null: nullProcessor,\n undefined: undefinedProcessor,\n void: voidProcessor,\n never: neverProcessor,\n any: anyProcessor,\n unknown: unknownProcessor,\n date: dateProcessor,\n enum: enumProcessor,\n literal: literalProcessor,\n nan: nanProcessor,\n template_literal: templateLiteralProcessor,\n file: fileProcessor,\n success: successProcessor,\n custom: customProcessor,\n function: functionProcessor,\n transform: transformProcessor,\n map: mapProcessor,\n set: setProcessor,\n array: arrayProcessor,\n object: objectProcessor,\n union: unionProcessor,\n intersection: intersectionProcessor,\n tuple: tupleProcessor,\n record: recordProcessor,\n nullable: nullableProcessor,\n nonoptional: nonoptionalProcessor,\n default: defaultProcessor,\n prefault: prefaultProcessor,\n catch: catchProcessor,\n pipe: pipeProcessor,\n readonly: readonlyProcessor,\n promise: promiseProcessor,\n optional: optionalProcessor,\n lazy: lazyProcessor,\n};\nexport function toJSONSchema(input, params) {\n if (\"_idmap\" in input) {\n // Registry case\n const registry = input;\n const ctx = initializeContext({ ...params, processors: allProcessors });\n const defs = {};\n // First pass: process all schemas to build the seen map\n for (const entry of registry._idmap.entries()) {\n const [_, schema] = entry;\n process(schema, ctx);\n }\n const schemas = {};\n const external = {\n registry,\n uri: params?.uri,\n defs,\n };\n // Update the context with external configuration\n ctx.external = external;\n // Second pass: emit each schema\n for (const entry of registry._idmap.entries()) {\n const [key, schema] = entry;\n extractDefs(ctx, schema);\n schemas[key] = finalize(ctx, schema);\n }\n if (Object.keys(defs).length > 0) {\n const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n schemas.__shared = {\n [defsSegment]: defs,\n };\n }\n return { schemas };\n }\n // Single schema case\n const ctx = initializeContext({ ...params, processors: allProcessors });\n process(input, ctx);\n extractDefs(ctx, input);\n return finalize(ctx, input);\n}\n",
|
|
92
82
|
"import { allProcessors } from \"./json-schema-processors.js\";\nimport { extractDefs, finalize, initializeContext, process, } from \"./to-json-schema.js\";\n/**\n * Legacy class-based interface for JSON Schema generation.\n * This class wraps the new functional implementation to provide backward compatibility.\n *\n * @deprecated Use the `toJSONSchema` function instead for new code.\n *\n * @example\n * ```typescript\n * // Legacy usage (still supported)\n * const gen = new JSONSchemaGenerator({ target: \"draft-07\" });\n * gen.process(schema);\n * const result = gen.emit(schema);\n *\n * // Preferred modern usage\n * const result = toJSONSchema(schema, { target: \"draft-07\" });\n * ```\n */\nexport class JSONSchemaGenerator {\n /** @deprecated Access via ctx instead */\n get metadataRegistry() {\n return this.ctx.metadataRegistry;\n }\n /** @deprecated Access via ctx instead */\n get target() {\n return this.ctx.target;\n }\n /** @deprecated Access via ctx instead */\n get unrepresentable() {\n return this.ctx.unrepresentable;\n }\n /** @deprecated Access via ctx instead */\n get override() {\n return this.ctx.override;\n }\n /** @deprecated Access via ctx instead */\n get io() {\n return this.ctx.io;\n }\n /** @deprecated Access via ctx instead */\n get counter() {\n return this.ctx.counter;\n }\n set counter(value) {\n this.ctx.counter = value;\n }\n /** @deprecated Access via ctx instead */\n get seen() {\n return this.ctx.seen;\n }\n constructor(params) {\n // Normalize target for internal context\n let normalizedTarget = params?.target ?? \"draft-2020-12\";\n if (normalizedTarget === \"draft-4\")\n normalizedTarget = \"draft-04\";\n if (normalizedTarget === \"draft-7\")\n normalizedTarget = \"draft-07\";\n this.ctx = initializeContext({\n processors: allProcessors,\n target: normalizedTarget,\n ...(params?.metadata && { metadata: params.metadata }),\n ...(params?.unrepresentable && { unrepresentable: params.unrepresentable }),\n ...(params?.override && { override: params.override }),\n ...(params?.io && { io: params.io }),\n });\n }\n /**\n * Process a schema to prepare it for JSON Schema generation.\n * This must be called before emit().\n */\n process(schema, _params = { path: [], schemaPath: [] }) {\n return process(schema, this.ctx, _params);\n }\n /**\n * Emit the final JSON Schema after processing.\n * Must call process() first.\n */\n emit(schema, _params) {\n // Apply emit params to the context\n if (_params) {\n if (_params.cycles)\n this.ctx.cycles = _params.cycles;\n if (_params.reused)\n this.ctx.reused = _params.reused;\n if (_params.external)\n this.ctx.external = _params.external;\n }\n extractDefs(this.ctx, schema);\n const result = finalize(this.ctx, schema);\n // Strip ~standard property to match old implementation's return type\n const { \"~standard\": _, ...plainResult } = result;\n return plainResult;\n }\n}\n",
|
|
83
|
+
"export * from \"./core.js\";\nexport * from \"./parse.js\";\nexport * from \"./errors.js\";\nexport * from \"./schemas.js\";\nexport * from \"./checks.js\";\nexport * from \"./versions.js\";\nexport * as util from \"./util.js\";\nexport * as regexes from \"./regexes.js\";\nexport * as locales from \"../locales/index.js\";\nexport * from \"./registries.js\";\nexport * from \"./doc.js\";\nexport * from \"./api.js\";\nexport * from \"./to-json-schema.js\";\nexport { toJSONSchema } from \"./json-schema-processors.js\";\nexport { JSONSchemaGenerator } from \"./json-schema-generator.js\";\nexport * as JSONSchema from \"./json-schema.js\";\n",
|
|
84
|
+
"export { _lt as lt, _lte as lte, _gt as gt, _gte as gte, _positive as positive, _negative as negative, _nonpositive as nonpositive, _nonnegative as nonnegative, _multipleOf as multipleOf, _maxSize as maxSize, _minSize as minSize, _size as size, _maxLength as maxLength, _minLength as minLength, _length as length, _regex as regex, _lowercase as lowercase, _uppercase as uppercase, _includes as includes, _startsWith as startsWith, _endsWith as endsWith, _property as property, _mime as mime, _overwrite as overwrite, _normalize as normalize, _trim as trim, _toLowerCase as toLowerCase, _toUpperCase as toUpperCase, _slugify as slugify, } from \"../core/index.js\";\n",
|
|
93
85
|
"import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport const ZodISODateTime = /*@__PURE__*/ core.$constructor(\"ZodISODateTime\", (inst, def) => {\n core.$ZodISODateTime.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function datetime(params) {\n return core._isoDateTime(ZodISODateTime, params);\n}\nexport const ZodISODate = /*@__PURE__*/ core.$constructor(\"ZodISODate\", (inst, def) => {\n core.$ZodISODate.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function date(params) {\n return core._isoDate(ZodISODate, params);\n}\nexport const ZodISOTime = /*@__PURE__*/ core.$constructor(\"ZodISOTime\", (inst, def) => {\n core.$ZodISOTime.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function time(params) {\n return core._isoTime(ZodISOTime, params);\n}\nexport const ZodISODuration = /*@__PURE__*/ core.$constructor(\"ZodISODuration\", (inst, def) => {\n core.$ZodISODuration.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function duration(params) {\n return core._isoDuration(ZodISODuration, params);\n}\n",
|
|
94
86
|
"import * as core from \"../core/index.js\";\nimport { $ZodError } from \"../core/index.js\";\nimport * as util from \"../core/util.js\";\nconst initializer = (inst, issues) => {\n $ZodError.init(inst, issues);\n inst.name = \"ZodError\";\n Object.defineProperties(inst, {\n format: {\n value: (mapper) => core.formatError(inst, mapper),\n // enumerable: false,\n },\n flatten: {\n value: (mapper) => core.flattenError(inst, mapper),\n // enumerable: false,\n },\n addIssue: {\n value: (issue) => {\n inst.issues.push(issue);\n inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n },\n // enumerable: false,\n },\n addIssues: {\n value: (issues) => {\n inst.issues.push(...issues);\n inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n },\n // enumerable: false,\n },\n isEmpty: {\n get() {\n return inst.issues.length === 0;\n },\n // enumerable: false,\n },\n });\n // Object.defineProperty(inst, \"isEmpty\", {\n // get() {\n // return inst.issues.length === 0;\n // },\n // });\n};\nexport const ZodError = /*@__PURE__*/ core.$constructor(\"ZodError\", initializer);\nexport const ZodRealError = /*@__PURE__*/ core.$constructor(\"ZodError\", initializer, {\n Parent: Error,\n});\n// /** @deprecated Use `z.core.$ZodErrorMapCtx` instead. */\n// export type ErrorMapCtx = core.$ZodErrorMapCtx;\n",
|
|
95
87
|
"import * as core from \"../core/index.js\";\nimport { ZodRealError } from \"./errors.js\";\nexport const parse = /* @__PURE__ */ core._parse(ZodRealError);\nexport const parseAsync = /* @__PURE__ */ core._parseAsync(ZodRealError);\nexport const safeParse = /* @__PURE__ */ core._safeParse(ZodRealError);\nexport const safeParseAsync = /* @__PURE__ */ core._safeParseAsync(ZodRealError);\n// Codec functions\nexport const encode = /* @__PURE__ */ core._encode(ZodRealError);\nexport const decode = /* @__PURE__ */ core._decode(ZodRealError);\nexport const encodeAsync = /* @__PURE__ */ core._encodeAsync(ZodRealError);\nexport const decodeAsync = /* @__PURE__ */ core._decodeAsync(ZodRealError);\nexport const safeEncode = /* @__PURE__ */ core._safeEncode(ZodRealError);\nexport const safeDecode = /* @__PURE__ */ core._safeDecode(ZodRealError);\nexport const safeEncodeAsync = /* @__PURE__ */ core._safeEncodeAsync(ZodRealError);\nexport const safeDecodeAsync = /* @__PURE__ */ core._safeDecodeAsync(ZodRealError);\n",
|
|
@@ -98,23 +90,46 @@
|
|
|
98
90
|
"import { globalRegistry } from \"../core/registries.js\";\nimport * as _checks from \"./checks.js\";\nimport * as _iso from \"./iso.js\";\nimport * as _schemas from \"./schemas.js\";\n// Local z object to avoid circular dependency with ../index.js\nconst z = {\n ..._schemas,\n ..._checks,\n iso: _iso,\n};\n// Keys that are recognized and handled by the conversion logic\nconst RECOGNIZED_KEYS = /*@__PURE__*/ new Set([\n // Schema identification\n \"$schema\",\n \"$ref\",\n \"$defs\",\n \"definitions\",\n // Core schema keywords\n \"$id\",\n \"id\",\n \"$comment\",\n \"$anchor\",\n \"$vocabulary\",\n \"$dynamicRef\",\n \"$dynamicAnchor\",\n // Type\n \"type\",\n \"enum\",\n \"const\",\n // Composition\n \"anyOf\",\n \"oneOf\",\n \"allOf\",\n \"not\",\n // Object\n \"properties\",\n \"required\",\n \"additionalProperties\",\n \"patternProperties\",\n \"propertyNames\",\n \"minProperties\",\n \"maxProperties\",\n // Array\n \"items\",\n \"prefixItems\",\n \"additionalItems\",\n \"minItems\",\n \"maxItems\",\n \"uniqueItems\",\n \"contains\",\n \"minContains\",\n \"maxContains\",\n // String\n \"minLength\",\n \"maxLength\",\n \"pattern\",\n \"format\",\n // Number\n \"minimum\",\n \"maximum\",\n \"exclusiveMinimum\",\n \"exclusiveMaximum\",\n \"multipleOf\",\n // Already handled metadata\n \"description\",\n \"default\",\n // Content\n \"contentEncoding\",\n \"contentMediaType\",\n \"contentSchema\",\n // Unsupported (error-throwing)\n \"unevaluatedItems\",\n \"unevaluatedProperties\",\n \"if\",\n \"then\",\n \"else\",\n \"dependentSchemas\",\n \"dependentRequired\",\n // OpenAPI\n \"nullable\",\n \"readOnly\",\n]);\nfunction detectVersion(schema, defaultTarget) {\n const $schema = schema.$schema;\n if ($schema === \"https://json-schema.org/draft/2020-12/schema\") {\n return \"draft-2020-12\";\n }\n if ($schema === \"http://json-schema.org/draft-07/schema#\") {\n return \"draft-7\";\n }\n if ($schema === \"http://json-schema.org/draft-04/schema#\") {\n return \"draft-4\";\n }\n // Use defaultTarget if provided, otherwise default to draft-2020-12\n return defaultTarget ?? \"draft-2020-12\";\n}\nfunction resolveRef(ref, ctx) {\n if (!ref.startsWith(\"#\")) {\n throw new Error(\"External $ref is not supported, only local refs (#/...) are allowed\");\n }\n const path = ref.slice(1).split(\"/\").filter(Boolean);\n // Handle root reference \"#\"\n if (path.length === 0) {\n return ctx.rootSchema;\n }\n const defsKey = ctx.version === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n if (path[0] === defsKey) {\n const key = path[1];\n if (!key || !ctx.defs[key]) {\n throw new Error(`Reference not found: ${ref}`);\n }\n return ctx.defs[key];\n }\n throw new Error(`Reference not found: ${ref}`);\n}\nfunction convertBaseSchema(schema, ctx) {\n // Handle unsupported features\n if (schema.not !== undefined) {\n // Special case: { not: {} } represents never\n if (typeof schema.not === \"object\" && Object.keys(schema.not).length === 0) {\n return z.never();\n }\n throw new Error(\"not is not supported in Zod (except { not: {} } for never)\");\n }\n if (schema.unevaluatedItems !== undefined) {\n throw new Error(\"unevaluatedItems is not supported\");\n }\n if (schema.unevaluatedProperties !== undefined) {\n throw new Error(\"unevaluatedProperties is not supported\");\n }\n if (schema.if !== undefined || schema.then !== undefined || schema.else !== undefined) {\n throw new Error(\"Conditional schemas (if/then/else) are not supported\");\n }\n if (schema.dependentSchemas !== undefined || schema.dependentRequired !== undefined) {\n throw new Error(\"dependentSchemas and dependentRequired are not supported\");\n }\n // Handle $ref\n if (schema.$ref) {\n const refPath = schema.$ref;\n if (ctx.refs.has(refPath)) {\n return ctx.refs.get(refPath);\n }\n if (ctx.processing.has(refPath)) {\n // Circular reference - use lazy\n return z.lazy(() => {\n if (!ctx.refs.has(refPath)) {\n throw new Error(`Circular reference not resolved: ${refPath}`);\n }\n return ctx.refs.get(refPath);\n });\n }\n ctx.processing.add(refPath);\n const resolved = resolveRef(refPath, ctx);\n const zodSchema = convertSchema(resolved, ctx);\n ctx.refs.set(refPath, zodSchema);\n ctx.processing.delete(refPath);\n return zodSchema;\n }\n // Handle enum\n if (schema.enum !== undefined) {\n const enumValues = schema.enum;\n // Special case: OpenAPI 3.0 null representation { type: \"string\", nullable: true, enum: [null] }\n if (ctx.version === \"openapi-3.0\" &&\n schema.nullable === true &&\n enumValues.length === 1 &&\n enumValues[0] === null) {\n return z.null();\n }\n if (enumValues.length === 0) {\n return z.never();\n }\n if (enumValues.length === 1) {\n return z.literal(enumValues[0]);\n }\n // Check if all values are strings\n if (enumValues.every((v) => typeof v === \"string\")) {\n return z.enum(enumValues);\n }\n // Mixed types - use union of literals\n const literalSchemas = enumValues.map((v) => z.literal(v));\n if (literalSchemas.length < 2) {\n return literalSchemas[0];\n }\n return z.union([literalSchemas[0], literalSchemas[1], ...literalSchemas.slice(2)]);\n }\n // Handle const\n if (schema.const !== undefined) {\n return z.literal(schema.const);\n }\n // Handle type\n const type = schema.type;\n if (Array.isArray(type)) {\n // Expand type array into anyOf union\n const typeSchemas = type.map((t) => {\n const typeSchema = { ...schema, type: t };\n return convertBaseSchema(typeSchema, ctx);\n });\n if (typeSchemas.length === 0) {\n return z.never();\n }\n if (typeSchemas.length === 1) {\n return typeSchemas[0];\n }\n return z.union(typeSchemas);\n }\n if (!type) {\n // No type specified - empty schema (any)\n return z.any();\n }\n let zodSchema;\n switch (type) {\n case \"string\": {\n let stringSchema = z.string();\n // Apply format using .check() with Zod format functions\n if (schema.format) {\n const format = schema.format;\n // Map common formats to Zod check functions\n if (format === \"email\") {\n stringSchema = stringSchema.check(z.email());\n }\n else if (format === \"uri\" || format === \"uri-reference\") {\n stringSchema = stringSchema.check(z.url());\n }\n else if (format === \"uuid\" || format === \"guid\") {\n stringSchema = stringSchema.check(z.uuid());\n }\n else if (format === \"date-time\") {\n stringSchema = stringSchema.check(z.iso.datetime());\n }\n else if (format === \"date\") {\n stringSchema = stringSchema.check(z.iso.date());\n }\n else if (format === \"time\") {\n stringSchema = stringSchema.check(z.iso.time());\n }\n else if (format === \"duration\") {\n stringSchema = stringSchema.check(z.iso.duration());\n }\n else if (format === \"ipv4\") {\n stringSchema = stringSchema.check(z.ipv4());\n }\n else if (format === \"ipv6\") {\n stringSchema = stringSchema.check(z.ipv6());\n }\n else if (format === \"mac\") {\n stringSchema = stringSchema.check(z.mac());\n }\n else if (format === \"cidr\") {\n stringSchema = stringSchema.check(z.cidrv4());\n }\n else if (format === \"cidr-v6\") {\n stringSchema = stringSchema.check(z.cidrv6());\n }\n else if (format === \"base64\") {\n stringSchema = stringSchema.check(z.base64());\n }\n else if (format === \"base64url\") {\n stringSchema = stringSchema.check(z.base64url());\n }\n else if (format === \"e164\") {\n stringSchema = stringSchema.check(z.e164());\n }\n else if (format === \"jwt\") {\n stringSchema = stringSchema.check(z.jwt());\n }\n else if (format === \"emoji\") {\n stringSchema = stringSchema.check(z.emoji());\n }\n else if (format === \"nanoid\") {\n stringSchema = stringSchema.check(z.nanoid());\n }\n else if (format === \"cuid\") {\n stringSchema = stringSchema.check(z.cuid());\n }\n else if (format === \"cuid2\") {\n stringSchema = stringSchema.check(z.cuid2());\n }\n else if (format === \"ulid\") {\n stringSchema = stringSchema.check(z.ulid());\n }\n else if (format === \"xid\") {\n stringSchema = stringSchema.check(z.xid());\n }\n else if (format === \"ksuid\") {\n stringSchema = stringSchema.check(z.ksuid());\n }\n // Note: json-string format is not currently supported by Zod\n // Custom formats are ignored - keep as plain string\n }\n // Apply constraints\n if (typeof schema.minLength === \"number\") {\n stringSchema = stringSchema.min(schema.minLength);\n }\n if (typeof schema.maxLength === \"number\") {\n stringSchema = stringSchema.max(schema.maxLength);\n }\n if (schema.pattern) {\n // JSON Schema patterns are not implicitly anchored (match anywhere in string)\n stringSchema = stringSchema.regex(new RegExp(schema.pattern));\n }\n zodSchema = stringSchema;\n break;\n }\n case \"number\":\n case \"integer\": {\n let numberSchema = type === \"integer\" ? z.number().int() : z.number();\n // Apply constraints\n if (typeof schema.minimum === \"number\") {\n numberSchema = numberSchema.min(schema.minimum);\n }\n if (typeof schema.maximum === \"number\") {\n numberSchema = numberSchema.max(schema.maximum);\n }\n if (typeof schema.exclusiveMinimum === \"number\") {\n numberSchema = numberSchema.gt(schema.exclusiveMinimum);\n }\n else if (schema.exclusiveMinimum === true && typeof schema.minimum === \"number\") {\n numberSchema = numberSchema.gt(schema.minimum);\n }\n if (typeof schema.exclusiveMaximum === \"number\") {\n numberSchema = numberSchema.lt(schema.exclusiveMaximum);\n }\n else if (schema.exclusiveMaximum === true && typeof schema.maximum === \"number\") {\n numberSchema = numberSchema.lt(schema.maximum);\n }\n if (typeof schema.multipleOf === \"number\") {\n numberSchema = numberSchema.multipleOf(schema.multipleOf);\n }\n zodSchema = numberSchema;\n break;\n }\n case \"boolean\": {\n zodSchema = z.boolean();\n break;\n }\n case \"null\": {\n zodSchema = z.null();\n break;\n }\n case \"object\": {\n const shape = {};\n const properties = schema.properties || {};\n const requiredSet = new Set(schema.required || []);\n // Convert properties - mark optional ones\n for (const [key, propSchema] of Object.entries(properties)) {\n const propZodSchema = convertSchema(propSchema, ctx);\n // If not in required array, make it optional\n shape[key] = requiredSet.has(key) ? propZodSchema : propZodSchema.optional();\n }\n // Handle propertyNames\n if (schema.propertyNames) {\n const keySchema = convertSchema(schema.propertyNames, ctx);\n const valueSchema = schema.additionalProperties && typeof schema.additionalProperties === \"object\"\n ? convertSchema(schema.additionalProperties, ctx)\n : z.any();\n // Case A: No properties (pure record)\n if (Object.keys(shape).length === 0) {\n zodSchema = z.record(keySchema, valueSchema);\n break;\n }\n // Case B: With properties (intersection of object and looseRecord)\n const objectSchema = z.object(shape).passthrough();\n const recordSchema = z.looseRecord(keySchema, valueSchema);\n zodSchema = z.intersection(objectSchema, recordSchema);\n break;\n }\n // Handle patternProperties\n if (schema.patternProperties) {\n // patternProperties: keys matching pattern must satisfy corresponding schema\n // Use loose records so non-matching keys pass through\n const patternProps = schema.patternProperties;\n const patternKeys = Object.keys(patternProps);\n const looseRecords = [];\n for (const pattern of patternKeys) {\n const patternValue = convertSchema(patternProps[pattern], ctx);\n const keySchema = z.string().regex(new RegExp(pattern));\n looseRecords.push(z.looseRecord(keySchema, patternValue));\n }\n // Build intersection: object schema + all pattern property records\n const schemasToIntersect = [];\n if (Object.keys(shape).length > 0) {\n // Use passthrough so patternProperties can validate additional keys\n schemasToIntersect.push(z.object(shape).passthrough());\n }\n schemasToIntersect.push(...looseRecords);\n if (schemasToIntersect.length === 0) {\n zodSchema = z.object({}).passthrough();\n }\n else if (schemasToIntersect.length === 1) {\n zodSchema = schemasToIntersect[0];\n }\n else {\n // Chain intersections: (A & B) & C & D ...\n let result = z.intersection(schemasToIntersect[0], schemasToIntersect[1]);\n for (let i = 2; i < schemasToIntersect.length; i++) {\n result = z.intersection(result, schemasToIntersect[i]);\n }\n zodSchema = result;\n }\n break;\n }\n // Handle additionalProperties\n // In JSON Schema, additionalProperties defaults to true (allow any extra properties)\n // In Zod, objects strip unknown keys by default, so we need to handle this explicitly\n const objectSchema = z.object(shape);\n if (schema.additionalProperties === false) {\n // Strict mode - no extra properties allowed\n zodSchema = objectSchema.strict();\n }\n else if (typeof schema.additionalProperties === \"object\") {\n // Extra properties must match the specified schema\n zodSchema = objectSchema.catchall(convertSchema(schema.additionalProperties, ctx));\n }\n else {\n // additionalProperties is true or undefined - allow any extra properties (passthrough)\n zodSchema = objectSchema.passthrough();\n }\n break;\n }\n case \"array\": {\n // TODO: uniqueItems is not supported\n // TODO: contains/minContains/maxContains are not supported\n // Check if this is a tuple (prefixItems or items as array)\n const prefixItems = schema.prefixItems;\n const items = schema.items;\n if (prefixItems && Array.isArray(prefixItems)) {\n // Tuple with prefixItems (draft-2020-12)\n const tupleItems = prefixItems.map((item) => convertSchema(item, ctx));\n const rest = items && typeof items === \"object\" && !Array.isArray(items)\n ? convertSchema(items, ctx)\n : undefined;\n if (rest) {\n zodSchema = z.tuple(tupleItems).rest(rest);\n }\n else {\n zodSchema = z.tuple(tupleItems);\n }\n // Apply minItems/maxItems constraints to tuples\n if (typeof schema.minItems === \"number\") {\n zodSchema = zodSchema.check(z.minLength(schema.minItems));\n }\n if (typeof schema.maxItems === \"number\") {\n zodSchema = zodSchema.check(z.maxLength(schema.maxItems));\n }\n }\n else if (Array.isArray(items)) {\n // Tuple with items array (draft-7)\n const tupleItems = items.map((item) => convertSchema(item, ctx));\n const rest = schema.additionalItems && typeof schema.additionalItems === \"object\"\n ? convertSchema(schema.additionalItems, ctx)\n : undefined; // additionalItems: false means no rest, handled by default tuple behavior\n if (rest) {\n zodSchema = z.tuple(tupleItems).rest(rest);\n }\n else {\n zodSchema = z.tuple(tupleItems);\n }\n // Apply minItems/maxItems constraints to tuples\n if (typeof schema.minItems === \"number\") {\n zodSchema = zodSchema.check(z.minLength(schema.minItems));\n }\n if (typeof schema.maxItems === \"number\") {\n zodSchema = zodSchema.check(z.maxLength(schema.maxItems));\n }\n }\n else if (items !== undefined) {\n // Regular array\n const element = convertSchema(items, ctx);\n let arraySchema = z.array(element);\n // Apply constraints\n if (typeof schema.minItems === \"number\") {\n arraySchema = arraySchema.min(schema.minItems);\n }\n if (typeof schema.maxItems === \"number\") {\n arraySchema = arraySchema.max(schema.maxItems);\n }\n zodSchema = arraySchema;\n }\n else {\n // No items specified - array of any\n zodSchema = z.array(z.any());\n }\n break;\n }\n default:\n throw new Error(`Unsupported type: ${type}`);\n }\n return zodSchema;\n}\nfunction convertSchema(schema, ctx) {\n if (typeof schema === \"boolean\") {\n return schema ? z.any() : z.never();\n }\n // Convert base schema first (ignoring composition keywords)\n let baseSchema = convertBaseSchema(schema, ctx);\n const hasExplicitType = schema.type || schema.enum !== undefined || schema.const !== undefined;\n // Process composition keywords LAST (they can appear together)\n // Handle anyOf - wrap base schema with union\n if (schema.anyOf && Array.isArray(schema.anyOf)) {\n const options = schema.anyOf.map((s) => convertSchema(s, ctx));\n const anyOfUnion = z.union(options);\n baseSchema = hasExplicitType ? z.intersection(baseSchema, anyOfUnion) : anyOfUnion;\n }\n // Handle oneOf - exclusive union (exactly one must match)\n if (schema.oneOf && Array.isArray(schema.oneOf)) {\n const options = schema.oneOf.map((s) => convertSchema(s, ctx));\n const oneOfUnion = z.xor(options);\n baseSchema = hasExplicitType ? z.intersection(baseSchema, oneOfUnion) : oneOfUnion;\n }\n // Handle allOf - wrap base schema with intersection\n if (schema.allOf && Array.isArray(schema.allOf)) {\n if (schema.allOf.length === 0) {\n baseSchema = hasExplicitType ? baseSchema : z.any();\n }\n else {\n let result = hasExplicitType ? baseSchema : convertSchema(schema.allOf[0], ctx);\n const startIdx = hasExplicitType ? 0 : 1;\n for (let i = startIdx; i < schema.allOf.length; i++) {\n result = z.intersection(result, convertSchema(schema.allOf[i], ctx));\n }\n baseSchema = result;\n }\n }\n // Handle nullable (OpenAPI 3.0)\n if (schema.nullable === true && ctx.version === \"openapi-3.0\") {\n baseSchema = z.nullable(baseSchema);\n }\n // Handle readOnly\n if (schema.readOnly === true) {\n baseSchema = z.readonly(baseSchema);\n }\n // Apply `default` so it wraps the fully-composed schema. This ensures\n // `parse(undefined) -> default` works regardless of which branch of\n // `convertBaseSchema` produced the inner schema (enum/const/not/typed/etc.).\n if (schema.default !== undefined) {\n baseSchema = baseSchema.default(schema.default);\n }\n // Collect non-description annotation metadata into the user-supplied\n // registry. Description is handled separately below via `.describe()` to\n // preserve the contract that `schema.description` reads from globalRegistry.\n const extraMeta = {};\n const coreMetadataKeys = [\"$id\", \"id\", \"$comment\", \"$anchor\", \"$vocabulary\", \"$dynamicRef\", \"$dynamicAnchor\"];\n for (const key of coreMetadataKeys) {\n if (key in schema) {\n extraMeta[key] = schema[key];\n }\n }\n const contentMetadataKeys = [\"contentEncoding\", \"contentMediaType\", \"contentSchema\"];\n for (const key of contentMetadataKeys) {\n if (key in schema) {\n extraMeta[key] = schema[key];\n }\n }\n for (const key of Object.keys(schema)) {\n if (!RECOGNIZED_KEYS.has(key)) {\n extraMeta[key] = schema[key];\n }\n }\n if (Object.keys(extraMeta).length > 0) {\n ctx.registry.add(baseSchema, extraMeta);\n }\n // Apply description last. `.describe()` clones the schema and sets\n // `_zod.parent` on the clone, so registry lookups on the returned reference\n // still resolve `extraMeta` via parent inheritance.\n if (schema.description) {\n baseSchema = baseSchema.describe(schema.description);\n }\n return baseSchema;\n}\n/**\n * Converts a JSON Schema to a Zod schema. This function should be considered semi-experimental. It's behavior is liable to change. */\nexport function fromJSONSchema(schema, params) {\n // Handle boolean schemas\n if (typeof schema === \"boolean\") {\n return schema ? z.any() : z.never();\n }\n // Normalize input via a JSON round-trip. This guarantees the converter\n // walks a plain, finite, JSON-valid object graph: cyclic inputs fail here,\n // getter/Proxy-based properties are materialized into static values, and\n // class instances collapse to plain objects.\n let normalized;\n try {\n normalized = JSON.parse(JSON.stringify(schema));\n }\n catch {\n throw new Error(\"fromJSONSchema input is not valid JSON (possibly cyclic); use $defs/$ref for recursive schemas\");\n }\n const version = detectVersion(normalized, params?.defaultTarget);\n const defs = (normalized.$defs || normalized.definitions || {});\n const ctx = {\n version,\n defs,\n refs: new Map(),\n processing: new Set(),\n rootSchema: normalized,\n registry: params?.registry ?? globalRegistry,\n };\n return convertSchema(normalized, ctx);\n}\n",
|
|
99
91
|
"import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport function string(params) {\n return core._coercedString(schemas.ZodString, params);\n}\nexport function number(params) {\n return core._coercedNumber(schemas.ZodNumber, params);\n}\nexport function boolean(params) {\n return core._coercedBoolean(schemas.ZodBoolean, params);\n}\nexport function bigint(params) {\n return core._coercedBigint(schemas.ZodBigInt, params);\n}\nexport function date(params) {\n return core._coercedDate(schemas.ZodDate, params);\n}\n",
|
|
100
92
|
"export * as core from \"../core/index.js\";\nexport * from \"./schemas.js\";\nexport * from \"./checks.js\";\nexport * from \"./errors.js\";\nexport * from \"./parse.js\";\nexport * from \"./compat.js\";\n// zod-specified\nimport { config } from \"../core/index.js\";\nimport en from \"../locales/en.js\";\nconfig(en());\nexport { globalRegistry, registry, config, $output, $input, $brand, clone, regexes, treeifyError, prettifyError, formatError, flattenError, TimePrecision, util, NEVER, } from \"../core/index.js\";\nexport { toJSONSchema } from \"../core/json-schema-processors.js\";\nexport { fromJSONSchema } from \"./from-json-schema.js\";\nexport * as locales from \"../locales/index.js\";\n// iso\n// must be exported from top-level\n// https://github.com/colinhacks/zod/issues/4491\nexport { ZodISODateTime, ZodISODate, ZodISOTime, ZodISODuration } from \"./iso.js\";\nexport * as iso from \"./iso.js\";\nexport * as coerce from \"./coerce.js\";\n",
|
|
101
|
-
"import
|
|
102
|
-
"import
|
|
103
|
-
"import
|
|
93
|
+
"import * as z from \"./v4/classic/external.js\";\nexport * from \"./v4/classic/external.js\";\nexport { z };\nexport default z;\n",
|
|
94
|
+
"import { z } from \"zod\";\nimport type { Change as CrdtChange } from \"../crdt.ts\";\n\n// Single source of truth: these Zod schemas drive runtime validation *and*\n// the auto-generated OpenAPI docs (see ./openapi.ts). `.describe(...)` text\n// flows straight into the published spec.\n\nexport const ChangeSchema = z.object({\n hlc: z.string().describe(\"Hybrid Logical Clock timestamp\"),\n node_id: z.string().describe(\"Origin node that produced the change\"),\n dataset: z.string().describe(\"CRDT dataset, e.g. databases / records / documents\"),\n row_id: z.string().describe(\"Row identifier within the dataset\"),\n col: z.string().describe(\"Column / property identifier\"),\n value: z.string().nullable().describe(\"JSON-encoded field value, or null\"),\n // Change-group id for history rendering; optional so pre-txn peers interop\n // (their changes simply fall back to time-gap clustering in history views).\n txn: z.string().nullable().optional().describe(\"Change-group id (one logical mutation)\"),\n});\n\nexport const SyncRequestSchema = z.object({\n node_id: z.string().describe(\"Calling client's node id\"),\n since: z.number().describe(\"Server cursor the client last pulled\"),\n changes: z.array(ChangeSchema).describe(\"Client's changes to push\"),\n // Both optional and absent in classic peer rounds (full pull). Browser\n // replicas use them: `limit` chunks the initial hydration into bounded\n // pulls, `exclude_datasets` lets a device opt out of heavy datasets it\n // never edits (e.g. site_files on a small phone).\n limit: z.number().optional().describe(\"Max changes to return (pagination for hydration)\"),\n exclude_datasets: z\n .array(z.string())\n .optional()\n .describe(\"Datasets to omit from the pull (partial replica)\"),\n});\n\nexport const SyncResponseSchema = z.object({\n node_id: z.string().describe(\"Server's node id\"),\n changes: z.array(ChangeSchema).describe(\"Server changes after `since`\"),\n cursor: z.number().describe(\"New server cursor for the client to store\"),\n});\n\nexport const HealthResponseSchema = z.object({\n ok: z.boolean(),\n node: z.string().describe(\"Server's node id\"),\n});\n\n// Pairing handshake (see ./pairing.ts). The caller (device B) presents a\n// one-time code, its node id, the durable credential it issues to us, and\n// optionally its own reachable URL so we can register it back as a peer.\nexport const PairRequestSchema = z.object({\n code: z.string().describe(\"One-time pairing code minted by this server\"),\n node_id: z.string().describe(\"Calling device's node id\"),\n grant: z.string().describe(\"Durable credential the caller issues to us\"),\n self_url: z.string().optional().describe(\"Caller's reachable server URL (for mutual sync)\"),\n});\n\nexport const PairResponseSchema = z.object({\n node_id: z.string().describe(\"This server's node id\"),\n grant: z.string().describe(\"Durable credential we issue to the caller\"),\n});\n\nexport type PairRequest = z.infer<typeof PairRequestSchema>;\nexport type PairResponse = z.infer<typeof PairResponseSchema>;\n\n// `Change` stays sourced from crdt.ts to avoid a second source of truth; the\n// schema above is structurally compatible and used only for validation/docs.\nexport type SyncRequest = z.infer<typeof SyncRequestSchema> & { changes: CrdtChange[] };\nexport type SyncResponse = z.infer<typeof SyncResponseSchema> & { changes: CrdtChange[] };\nexport type HealthResponse = z.infer<typeof HealthResponseSchema>;\n\nexport const SYNC_PATH = \"/sync\";\nexport const HEALTH_PATH = \"/health\";\n// Token exchange: a holder of the current (or an in-grace previous) token swaps\n// it for the current token. Exempt from the gate so an expired token can reach it.\nexport const RENEW_PATH = \"/auth/token\";\n// Pairing handshake. Exempt from the master-token gate because the caller only\n// holds a one-time code (validated inside the handler), not the server token.\nexport const PAIR_PATH = \"/api/pair\";\n",
|
|
95
|
+
"import type { DbDriver } from \"../driver.ts\";\nimport { getNodeId } from \"../node.ts\";\nimport { ingest, changesAfterSeq } from \"../crdt.ts\";\nimport { type SyncResponse, SYNC_PATH } from \"./protocol.ts\";\nimport { MhError } from \"../errors.ts\";\n\ninterface PeerCursors {\n pull_cursor: number;\n push_cursor: number;\n token: string | null;\n}\n\nfunction getPeer(db: DbDriver, url: string): PeerCursors {\n const row = db\n .query(\"SELECT pull_cursor, push_cursor, token FROM peers WHERE url = ?\")\n .get(url) as PeerCursors | null;\n return row ?? { pull_cursor: 0, push_cursor: 0, token: null };\n}\n\nfunction setPeer(db: DbDriver, url: string, c: { pull_cursor: number; push_cursor: number }): void {\n db.query(\n \"INSERT INTO peers (url, pull_cursor, push_cursor) VALUES (?, ?, ?) ON CONFLICT(url) DO UPDATE SET pull_cursor = excluded.pull_cursor, push_cursor = excluded.push_cursor\",\n ).run(url, c.pull_cursor, c.push_cursor);\n}\n\nexport interface SyncResult {\n pushed: number;\n pulled: number;\n /** Storage-sync only: local own ops exist but were deferred by push batching. */\n pendingPush?: boolean;\n}\n\nexport interface SyncOpts {\n /** Bearer credential; defaults to the one stored for this peer (pairing). */\n token?: string;\n /** Max changes to pull this round — chunked initial hydration. */\n pullLimit?: number;\n /** Datasets this replica opts out of (partial replica, e.g. site_files). */\n excludeDatasets?: string[];\n}\n\n/**\n * Run one push/pull round against a peer server. A single round is bidirectional\n * (pushes local changes, pulls remote ones). The token defaults to the credential\n * stored for this peer (set during pairing) and is sent as a Bearer header so a\n * token-gated /sync accepts the request.\n */\nexport async function syncWithPeer(\n db: DbDriver,\n url: string,\n opts: SyncOpts | string = {},\n): Promise<SyncResult> {\n // Back-compat: the third parameter used to be the bare token string.\n const o: SyncOpts = typeof opts === \"string\" ? { token: opts } : opts;\n const node = getNodeId(db);\n const peer = getPeer(db, url);\n const bearer = o.token ?? peer.token ?? undefined;\n const toPush = changesAfterSeq(db, peer.push_cursor);\n\n const headers: Record<string, string> = { \"content-type\": \"application/json\" };\n if (bearer) headers.authorization = `Bearer ${bearer}`;\n const res = await fetch(new URL(SYNC_PATH, url), {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n node_id: node,\n since: peer.pull_cursor,\n changes: toPush.changes,\n ...(o.pullLimit != null ? { limit: o.pullLimit } : {}),\n ...(o.excludeDatasets?.length ? { exclude_datasets: o.excludeDatasets } : {}),\n }),\n });\n if (!res.ok)\n throw new MhError(\n res.status === 401 || res.status === 403 ? \"auth\" : \"network\",\n `sync failed: ${res.status} ${await res.text()}`,\n );\n\n const data = (await res.json()) as SyncResponse;\n // `pulled` = changes new to our oplog (ingest's return), not the response size,\n // so re-pulled-but-known data doesn't read as activity (consistent with the\n // storage path; keeps the auto-sync backoff honest).\n const pulled = ingest(db, data.changes ?? []);\n setPeer(db, url, { pull_cursor: data.cursor, push_cursor: toPush.cursor });\n\n return { pushed: toPush.changes.length, pulled };\n}\n",
|
|
96
|
+
"/**\n * @license MIT <https://opensource.org/licenses/MIT>\n * @copyright Michael Hart 2024\n */\nconst encoder = new TextEncoder();\nconst HOST_SERVICES = {\n appstream2: 'appstream',\n cloudhsmv2: 'cloudhsm',\n email: 'ses',\n marketplace: 'aws-marketplace',\n mobile: 'AWSMobileHubService',\n pinpoint: 'mobiletargeting',\n queue: 'sqs',\n 'git-codecommit': 'codecommit',\n 'mturk-requester-sandbox': 'mturk-requester',\n 'personalize-runtime': 'personalize',\n};\nconst UNSIGNABLE_HEADERS = new Set([\n 'authorization',\n 'content-type',\n 'content-length',\n 'user-agent',\n 'presigned-expires',\n 'expect',\n 'x-amzn-trace-id',\n 'range',\n 'connection',\n]);\nclass AwsClient {\n constructor({ accessKeyId, secretAccessKey, sessionToken, service, region, cache, retries, initRetryMs }) {\n if (accessKeyId == null) throw new TypeError('accessKeyId is a required option')\n if (secretAccessKey == null) throw new TypeError('secretAccessKey is a required option')\n this.accessKeyId = accessKeyId;\n this.secretAccessKey = secretAccessKey;\n this.sessionToken = sessionToken;\n this.service = service;\n this.region = region;\n this.cache = cache || new Map();\n this.retries = retries != null ? retries : 10;\n this.initRetryMs = initRetryMs || 50;\n }\n async sign(input, init) {\n if (input instanceof Request) {\n const { method, url, headers, body } = input;\n init = Object.assign({ method, url, headers }, init);\n if (init.body == null && headers.has('Content-Type')) {\n init.body = body != null && headers.has('X-Amz-Content-Sha256') ? body : await input.clone().arrayBuffer();\n }\n input = url;\n }\n const signer = new AwsV4Signer(Object.assign({ url: input.toString() }, init, this, init && init.aws));\n const signed = Object.assign({}, init, await signer.sign());\n delete signed.aws;\n try {\n return new Request(signed.url.toString(), signed)\n } catch (e) {\n if (e instanceof TypeError) {\n return new Request(signed.url.toString(), Object.assign({ duplex: 'half' }, signed))\n }\n throw e\n }\n }\n async fetch(input, init) {\n for (let i = 0; i <= this.retries; i++) {\n const fetched = fetch(await this.sign(input, init));\n if (i === this.retries) {\n return fetched\n }\n const res = await fetched;\n if (res.status < 500 && res.status !== 429) {\n return res\n }\n await new Promise(resolve => setTimeout(resolve, Math.random() * this.initRetryMs * Math.pow(2, i)));\n }\n throw new Error('An unknown error occurred, ensure retries is not negative')\n }\n}\nclass AwsV4Signer {\n constructor({ method, url, headers, body, accessKeyId, secretAccessKey, sessionToken, service, region, cache, datetime, signQuery, appendSessionToken, allHeaders, singleEncode }) {\n if (url == null) throw new TypeError('url is a required option')\n if (accessKeyId == null) throw new TypeError('accessKeyId is a required option')\n if (secretAccessKey == null) throw new TypeError('secretAccessKey is a required option')\n this.method = method || (body ? 'POST' : 'GET');\n this.url = new URL(url);\n this.headers = new Headers(headers || {});\n this.body = body;\n this.accessKeyId = accessKeyId;\n this.secretAccessKey = secretAccessKey;\n this.sessionToken = sessionToken;\n let guessedService, guessedRegion;\n if (!service || !region) {\n[guessedService, guessedRegion] = guessServiceRegion(this.url, this.headers);\n }\n this.service = service || guessedService || '';\n this.region = region || guessedRegion || 'us-east-1';\n this.cache = cache || new Map();\n this.datetime = datetime || new Date().toISOString().replace(/[:-]|\\.\\d{3}/g, '');\n this.signQuery = signQuery;\n this.appendSessionToken = appendSessionToken || this.service === 'iotdevicegateway';\n this.headers.delete('Host');\n if (this.service === 's3' && !this.signQuery && !this.headers.has('X-Amz-Content-Sha256')) {\n this.headers.set('X-Amz-Content-Sha256', 'UNSIGNED-PAYLOAD');\n }\n const params = this.signQuery ? this.url.searchParams : this.headers;\n params.set('X-Amz-Date', this.datetime);\n if (this.sessionToken && !this.appendSessionToken) {\n params.set('X-Amz-Security-Token', this.sessionToken);\n }\n this.signableHeaders = ['host', ...this.headers.keys()]\n .filter(header => allHeaders || !UNSIGNABLE_HEADERS.has(header))\n .sort();\n this.signedHeaders = this.signableHeaders.join(';');\n this.canonicalHeaders = this.signableHeaders\n .map(header => header + ':' + (header === 'host' ? this.url.host : (this.headers.get(header) || '').replace(/\\s+/g, ' ')))\n .join('\\n');\n this.credentialString = [this.datetime.slice(0, 8), this.region, this.service, 'aws4_request'].join('/');\n if (this.signQuery) {\n if (this.service === 's3' && !params.has('X-Amz-Expires')) {\n params.set('X-Amz-Expires', '86400');\n }\n params.set('X-Amz-Algorithm', 'AWS4-HMAC-SHA256');\n params.set('X-Amz-Credential', this.accessKeyId + '/' + this.credentialString);\n params.set('X-Amz-SignedHeaders', this.signedHeaders);\n }\n if (this.service === 's3') {\n try {\n this.encodedPath = decodeURIComponent(this.url.pathname.replace(/\\+/g, ' '));\n } catch (e) {\n this.encodedPath = this.url.pathname;\n }\n } else {\n this.encodedPath = this.url.pathname.replace(/\\/+/g, '/');\n }\n if (!singleEncode) {\n this.encodedPath = encodeURIComponent(this.encodedPath).replace(/%2F/g, '/');\n }\n this.encodedPath = encodeRfc3986(this.encodedPath);\n const seenKeys = new Set();\n this.encodedSearch = [...this.url.searchParams]\n .filter(([k]) => {\n if (!k) return false\n if (this.service === 's3') {\n if (seenKeys.has(k)) return false\n seenKeys.add(k);\n }\n return true\n })\n .map(pair => pair.map(p => encodeRfc3986(encodeURIComponent(p))))\n .sort(([k1, v1], [k2, v2]) => k1 < k2 ? -1 : k1 > k2 ? 1 : v1 < v2 ? -1 : v1 > v2 ? 1 : 0)\n .map(pair => pair.join('='))\n .join('&');\n }\n async sign() {\n if (this.signQuery) {\n this.url.searchParams.set('X-Amz-Signature', await this.signature());\n if (this.sessionToken && this.appendSessionToken) {\n this.url.searchParams.set('X-Amz-Security-Token', this.sessionToken);\n }\n } else {\n this.headers.set('Authorization', await this.authHeader());\n }\n return {\n method: this.method,\n url: this.url,\n headers: this.headers,\n body: this.body,\n }\n }\n async authHeader() {\n return [\n 'AWS4-HMAC-SHA256 Credential=' + this.accessKeyId + '/' + this.credentialString,\n 'SignedHeaders=' + this.signedHeaders,\n 'Signature=' + (await this.signature()),\n ].join(', ')\n }\n async signature() {\n const date = this.datetime.slice(0, 8);\n const cacheKey = [this.secretAccessKey, date, this.region, this.service].join();\n let kCredentials = this.cache.get(cacheKey);\n if (!kCredentials) {\n const kDate = await hmac('AWS4' + this.secretAccessKey, date);\n const kRegion = await hmac(kDate, this.region);\n const kService = await hmac(kRegion, this.service);\n kCredentials = await hmac(kService, 'aws4_request');\n this.cache.set(cacheKey, kCredentials);\n }\n return buf2hex(await hmac(kCredentials, await this.stringToSign()))\n }\n async stringToSign() {\n return [\n 'AWS4-HMAC-SHA256',\n this.datetime,\n this.credentialString,\n buf2hex(await hash(await this.canonicalString())),\n ].join('\\n')\n }\n async canonicalString() {\n return [\n this.method.toUpperCase(),\n this.encodedPath,\n this.encodedSearch,\n this.canonicalHeaders + '\\n',\n this.signedHeaders,\n await this.hexBodyHash(),\n ].join('\\n')\n }\n async hexBodyHash() {\n let hashHeader = this.headers.get('X-Amz-Content-Sha256') || (this.service === 's3' && this.signQuery ? 'UNSIGNED-PAYLOAD' : null);\n if (hashHeader == null) {\n if (this.body && typeof this.body !== 'string' && !('byteLength' in this.body)) {\n throw new Error('body must be a string, ArrayBuffer or ArrayBufferView, unless you include the X-Amz-Content-Sha256 header')\n }\n hashHeader = buf2hex(await hash(this.body || ''));\n }\n return hashHeader\n }\n}\nasync function hmac(key, string) {\n const cryptoKey = await crypto.subtle.importKey(\n 'raw',\n typeof key === 'string' ? encoder.encode(key) : key,\n { name: 'HMAC', hash: { name: 'SHA-256' } },\n false,\n ['sign'],\n );\n return crypto.subtle.sign('HMAC', cryptoKey, encoder.encode(string))\n}\nasync function hash(content) {\n return crypto.subtle.digest('SHA-256', typeof content === 'string' ? encoder.encode(content) : content)\n}\nconst HEX_CHARS = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];\nfunction buf2hex(arrayBuffer) {\n const buffer = new Uint8Array(arrayBuffer);\n let out = '';\n for (let idx = 0; idx < buffer.length; idx++) {\n const n = buffer[idx];\n out += HEX_CHARS[(n >>> 4) & 0xF];\n out += HEX_CHARS[n & 0xF];\n }\n return out\n}\nfunction encodeRfc3986(urlEncodedStr) {\n return urlEncodedStr.replace(/[!'()*]/g, c => '%' + c.charCodeAt(0).toString(16).toUpperCase())\n}\nfunction guessServiceRegion(url, headers) {\n const { hostname, pathname } = url;\n if (hostname.endsWith('.on.aws')) {\n const match = hostname.match(/^[^.]{1,63}\\.lambda-url\\.([^.]{1,63})\\.on\\.aws$/);\n return match != null ? ['lambda', match[1] || ''] : ['', '']\n }\n if (hostname.endsWith('.r2.cloudflarestorage.com')) {\n return ['s3', 'auto']\n }\n if (hostname.endsWith('.backblazeb2.com')) {\n const match = hostname.match(/^(?:[^.]{1,63}\\.)?s3\\.([^.]{1,63})\\.backblazeb2\\.com$/);\n return match != null ? ['s3', match[1] || ''] : ['', '']\n }\n const match = hostname.replace('dualstack.', '').match(/([^.]{1,63})\\.(?:([^.]{0,63})\\.)?amazonaws\\.com(?:\\.cn)?$/);\n let service = (match && match[1]) || '';\n let region = match && match[2];\n if (region === 'us-gov') {\n region = 'us-gov-west-1';\n } else if (region === 's3' || region === 's3-accelerate') {\n region = 'us-east-1';\n service = 's3';\n } else if (service === 'iot') {\n if (hostname.startsWith('iot.')) {\n service = 'execute-api';\n } else if (hostname.startsWith('data.jobs.iot.')) {\n service = 'iot-jobs-data';\n } else {\n service = pathname === '/mqtt' ? 'iotdevicegateway' : 'iotdata';\n }\n } else if (service === 'autoscaling') {\n const targetPrefix = (headers.get('X-Amz-Target') || '').split('.')[0];\n if (targetPrefix === 'AnyScaleFrontendService') {\n service = 'application-autoscaling';\n } else if (targetPrefix === 'AnyScaleScalingPlannerFrontendService') {\n service = 'autoscaling-plans';\n }\n } else if (region == null && service.startsWith('s3-')) {\n region = service.slice(3).replace(/^fips-|^external-1/, '');\n service = 's3';\n } else if (service.endsWith('-fips')) {\n service = service.slice(0, -5);\n } else if (region && /-\\d$/.test(service) && !/-\\d$/.test(region)) {\n[service, region] = [region, service];\n }\n return [HOST_SERVICES[service] || service, region || '']\n}\n\nexport { AwsClient, AwsV4Signer };\n",
|
|
97
|
+
"// Best-effort publisher election over the dumb bucket (doc 19 §5.4).\n//\n// Several nodes may be eligible to publish whole-hub snapshots (a server, a few\n// browser replicas). We don't want them all uploading the same snapshot every\n// interval, so we park \"publishing duty\" on the highest-priority LIVE candidate.\n//\n// Correctness never depends on this being exact: concurrent snapshots are\n// content-addressed and idempotent (storage.ts publishSnapshot), so a brief\n// double-elect just wastes a PUT. That lets the election avoid compare-and-swap\n// entirely — each candidate writes its OWN heartbeat key (the same per-node\n// prefix model as the oplog, no contention), reads everyone's, and the winner is\n// a pure function of the live set (max priority; ties broken by node id). A dead\n// candidate's heartbeat expires (TTL), so duty fails over automatically.\n\nimport type { StorageClient } from \"./storage.ts\";\n\nconst TTL_MS = 5 * 60_000;\n/** Refresh well within the TTL so a live candidate never lets its own lease lapse. */\nconst HEARTBEAT_EVERY_MS = TTL_MS / 3;\n\ninterface Heartbeat {\n node: string;\n priority: number;\n expiresAt: number;\n}\n\nconst leaseRoot = (base: string) => `${base}/publisher/`;\nconst leaseKey = (base: string, node: string) => `${base}/publisher/${node}.lease`;\n\n/** Last wall time we wrote our heartbeat, keyed per (base,node), to throttle PUTs\n * across sync rounds within one process. */\nconst lastBeat = new Map<string, number>();\n\n/**\n * Refresh this node's heartbeat (throttled) and return whether it is the elected\n * publisher among currently-live candidates. Call only when a snapshot is\n * actually due, so the lease LIST/GETs aren't paid on idle rounds.\n */\nexport async function isElectedPublisher(\n client: StorageClient,\n base: string,\n node: string,\n priority: number,\n now: number = Date.now(),\n): Promise<boolean> {\n // 1. Heartbeat — but not every round (a PUT per round would be wasteful).\n const beatId = `${base}\u0000${node}`;\n if (now - (lastBeat.get(beatId) ?? 0) >= HEARTBEAT_EVERY_MS) {\n const hb: Heartbeat = { node, priority, expiresAt: now + TTL_MS };\n await client.put(leaseKey(base, node), new TextEncoder().encode(JSON.stringify(hb)), {\n contentType: \"application/json\",\n });\n lastBeat.set(beatId, now);\n }\n\n // 2. Read the live set and pick the deterministic winner; collect long-expired\n // leases to reap so a churn of past devices doesn't grow the per-election GET.\n let winner: Heartbeat | null = null;\n const stale: string[] = [];\n for (const o of await client.list(leaseRoot(base))) {\n if (!o.key.endsWith(\".lease\")) continue;\n const bytes = await client.get(o.key);\n if (!bytes) continue;\n let hb: Heartbeat;\n try {\n hb = JSON.parse(new TextDecoder().decode(bytes)) as Heartbeat;\n } catch {\n continue;\n }\n if (!hb.node || hb.expiresAt <= now) {\n // Expired by a full extra TTL → safe to delete: a live owner re-beats every\n // TTL/3 so its lease can't be this stale; reaping is idempotent (a returning\n // owner just re-creates the key on its next publish).\n if (hb.expiresAt <= now - TTL_MS) stale.push(o.key);\n continue; // expired → ignore for election (failover)\n }\n if (\n !winner ||\n hb.priority > winner.priority ||\n (hb.priority === winner.priority && hb.node < winner.node)\n ) {\n winner = hb;\n }\n }\n\n // No live heartbeat visible yet (e.g. our own write not yet listable on an\n // eventually-consistent store) → act as publisher so a lone node still works.\n const elected = winner ? winner.node === node : true;\n // Only the elected publisher reaps, to avoid del write-amplification across all\n // readers (a brief double-reap is harmless — del is idempotent).\n if (elected) for (const k of stale) await client.del(k);\n return elected;\n}\n",
|
|
98
|
+
"// End-to-end encryption for storage-sync (sync/storage.ts). The bucket is a\n// third-party dumb store, so every oplog segment and snapshot is encrypted\n// before it leaves the device; the bucket only ever holds ciphertext.\n//\n// Two key layers (the Joplin / age-style envelope):\n// - Master key K (random 256-bit): encrypts every segment and snapshot. Kept\n// locally as raw bytes (peers.config — same trust model as peer tokens).\n// - KEK, derived from the user's passphrase via PBKDF2: wraps K into the\n// bucket's keys/main.json. Any new device recovers K from\n// bucket-credentials + passphrase alone — no device-to-device key transfer.\n//\n// We wrap K by AES-GCM-encrypting its raw bytes rather than via WebCrypto's\n// AES-KW: AES-GCM + PBKDF2 are present in every runtime we target (Bun and the\n// browser worker), AES-KW support is uneven. A wrong passphrase fails the GCM\n// auth tag, which we surface as an MhError.\n//\n// Runtime-agnostic: uses only the global WebCrypto (`crypto.subtle`,\n// `crypto.getRandomValues`) and btoa/atob, all present on Bun and in browsers.\n\nimport { MhError } from \"../errors.ts\";\n\nconst PBKDF2_ITERATIONS = 600_000;\nconst SALT_BYTES = 16;\nconst IV_BYTES = 12; // AES-GCM standard nonce length\nconst KEY_BYTES = 32; // AES-256\n\n// TS 5.7 widens `Uint8Array` to `Uint8Array<ArrayBufferLike>`. Give WebCrypto an\n// explicit ArrayBuffer without naming DOM-only helper types in declaration builds.\nfunction ab(u: Uint8Array): ArrayBuffer {\n const out = new Uint8Array(u.byteLength);\n out.set(u);\n return out.buffer;\n}\n\n/** The bucket's keys/main.json: the master key wrapped by the passphrase KEK. */\nexport interface KeyEnvelope {\n v: 1;\n kdf: \"PBKDF2-SHA256\";\n iter: number;\n salt: string; // base64\n wrap: \"AES-GCM\";\n /** base64(iv ‖ ciphertext) of the raw 32-byte master key. */\n wrapped_key: string;\n}\n\n// ---- base64 (portable: no Buffer dependency) ----------------------------------\n\nexport function toB64(bytes: Uint8Array): string {\n let s = \"\";\n for (let i = 0; i < bytes.length; i++) s += String.fromCharCode(bytes[i]!);\n return btoa(s);\n}\n\nexport function fromB64(b64: string): Uint8Array {\n const s = atob(b64);\n const out = new Uint8Array(s.length);\n for (let i = 0; i < s.length; i++) out[i] = s.charCodeAt(i);\n return out;\n}\n\n// ---- master key ----------------------------------------------------------------\n\n/** A fresh random 256-bit master key (raw bytes). */\nexport function generateMasterKey(): Uint8Array {\n return crypto.getRandomValues(new Uint8Array(KEY_BYTES));\n}\n\nasync function deriveKek(passphrase: string, salt: Uint8Array): Promise<CryptoKey> {\n const base = await crypto.subtle.importKey(\n \"raw\",\n ab(new TextEncoder().encode(passphrase)),\n \"PBKDF2\",\n false,\n [\"deriveKey\"],\n );\n return crypto.subtle.deriveKey(\n { name: \"PBKDF2\", salt: ab(salt), iterations: PBKDF2_ITERATIONS, hash: \"SHA-256\" },\n base,\n { name: \"AES-GCM\", length: 256 },\n false,\n [\"encrypt\", \"decrypt\"],\n );\n}\n\n/** Wrap the master key under a passphrase-derived KEK → bucket keys/main.json. */\nexport async function wrapMasterKey(rawKey: Uint8Array, passphrase: string): Promise<KeyEnvelope> {\n const salt = crypto.getRandomValues(new Uint8Array(SALT_BYTES));\n const kek = await deriveKek(passphrase, salt);\n const iv = crypto.getRandomValues(new Uint8Array(IV_BYTES));\n const ct = new Uint8Array(\n await crypto.subtle.encrypt({ name: \"AES-GCM\", iv: ab(iv) }, kek, ab(rawKey)),\n );\n const packed = new Uint8Array(iv.length + ct.length);\n packed.set(iv, 0);\n packed.set(ct, iv.length);\n return {\n v: 1,\n kdf: \"PBKDF2-SHA256\",\n iter: PBKDF2_ITERATIONS,\n salt: toB64(salt),\n wrap: \"AES-GCM\",\n wrapped_key: toB64(packed),\n };\n}\n\n/** Recover the master key from the envelope + passphrase. Throws `auth` on a\n * wrong passphrase (the GCM tag won't verify) or a malformed envelope. */\nexport async function unwrapMasterKey(env: KeyEnvelope, passphrase: string): Promise<Uint8Array> {\n if (env.v !== 1 || env.kdf !== \"PBKDF2-SHA256\" || env.wrap !== \"AES-GCM\")\n throw new MhError(\"invalid_input\", \"unsupported key envelope format\");\n const salt = fromB64(env.salt);\n const kek = await deriveKek(passphrase, salt);\n const packed = fromB64(env.wrapped_key);\n const iv = packed.subarray(0, IV_BYTES);\n const ct = packed.subarray(IV_BYTES);\n try {\n const raw = await crypto.subtle.decrypt({ name: \"AES-GCM\", iv: ab(iv) }, kek, ab(ct));\n return new Uint8Array(raw);\n } catch {\n throw new MhError(\"auth\", \"wrong passphrase — could not unwrap the master key\");\n }\n}\n\n// ---- segment encryption --------------------------------------------------------\n\nasync function importGcmKey(rawKey: Uint8Array): Promise<CryptoKey> {\n return crypto.subtle.importKey(\"raw\", ab(rawKey), { name: \"AES-GCM\" }, false, [\n \"encrypt\",\n \"decrypt\",\n ]);\n}\n\n/** Encrypt arbitrary bytes (a compressed segment/snapshot) → iv ‖ ciphertext. */\nexport async function encryptBytes(rawKey: Uint8Array, plaintext: Uint8Array): Promise<Uint8Array> {\n const key = await importGcmKey(rawKey);\n const iv = crypto.getRandomValues(new Uint8Array(IV_BYTES));\n const ct = new Uint8Array(\n await crypto.subtle.encrypt({ name: \"AES-GCM\", iv: ab(iv) }, key, ab(plaintext)),\n );\n const out = new Uint8Array(iv.length + ct.length);\n out.set(iv, 0);\n out.set(ct, iv.length);\n return out;\n}\n\n/** Inverse of encryptBytes. Throws `auth` if the key is wrong or data tampered. */\nexport async function decryptBytes(rawKey: Uint8Array, payload: Uint8Array): Promise<Uint8Array> {\n const key = await importGcmKey(rawKey);\n const iv = payload.subarray(0, IV_BYTES);\n const ct = payload.subarray(IV_BYTES);\n try {\n const raw = await crypto.subtle.decrypt({ name: \"AES-GCM\", iv: ab(iv) }, key, ab(ct));\n return new Uint8Array(raw);\n } catch {\n throw new MhError(\"auth\", \"could not decrypt — wrong master key or corrupt data\");\n }\n}\n",
|
|
99
|
+
"// Storage-sync: use an S3-compatible bucket as dumb store-and-forward, so two\n// devices sync without either running a publicly reachable server and without\n// being online at the same time. The bucket only needs list/get/put/del — no\n// metahub code runs there. This is a second transport behind the same peer\n// model and the same CRDT primitives; core replication is unchanged.\n//\n// Each node publishes ONLY its own ops (crdt.ts changesAfterSeq onlyNode) under\n// its own bucket prefix, as append-only segments. Pulling = list every other\n// node's prefix, download new segments, ingest() them — order-independent and\n// idempotent, so segments arriving out of order or twice converge regardless.\n//\n// Bucket layout (prefix = user-configured path within the bucket):\n// <prefix>/spaces/default/keys/main.json E2EE: master key wrapped by passphrase\n// <prefix>/spaces/default/snapshot/<hlc>~<hash>.snap winners-only baseline (any node publishes)\n// <prefix>/spaces/default/oplog/<node>/HEAD latest segment key (cheap \"anything new?\" poll)\n// <prefix>/spaces/default/oplog/<node>/<seq>.seg that node's ops, JSONL→gzip→AES-GCM\n// The spaces/default/ level is reserved now so future per-space sharing needs\n// no storage migration.\n\nimport type { DbDriver } from \"../driver.ts\";\nimport { getNodeId } from \"../node.ts\";\nimport { changesAfterSeq, ingest, CHANGE_SELECT, type Change } from \"../crdt.ts\";\nimport { isElectedPublisher } from \"./publisher-lease.ts\";\nimport { MhError, errorCode } from \"../errors.ts\";\nimport type { SyncResult } from \"./client.ts\";\nimport {\n encryptBytes,\n decryptBytes,\n generateMasterKey,\n wrapMasterKey,\n unwrapMasterKey,\n toB64,\n fromB64,\n type KeyEnvelope,\n} from \"./e2ee.ts\";\n\n// ---- config + client surface ---------------------------------------------------\n\n/** An 's3' peer's bucket settings, stored as JSON in peers.config (local-only). */\nexport interface S3Config {\n endpoint: string;\n region: string;\n bucket: string;\n prefix: string;\n accessKeyId: string;\n secretAccessKey: string;\n /** When false (`--no-encrypt`) segments are gzip-only plaintext. */\n encrypt: boolean;\n /** base64 raw 32-byte master key; present iff encrypt. Resolved at peer-add. */\n masterKey?: string;\n /**\n * Address objects as `<bucket>.<host>/<key>` (virtual-hosted) instead of\n * `<host>/<bucket>/<key>` (path-style). Some providers (Tencent COS) reject\n * path-style outright. When undefined, the clients auto-detect: virtual-hosted\n * iff the endpoint host already starts with `<bucket>.` (see\n * isVirtualHostedStyle). R2/MinIO keep using path-style.\n */\n virtualHostedStyle?: boolean;\n /**\n * Node-role hints for this bucket (not bucket settings — safe to omit from\n * shared enroll links). `publish` marks this node as the bucket's publisher\n * (writes whole-hub snapshots; see StorageSyncOpts.publish): true for the data\n * home (a server, or a no-origin PWA which IS the home), false for a replica\n * that only attaches the bucket for its own away-sync. `priority` ranks\n * publisher candidates when several are eligible (higher wins; see\n * publisher-lease.ts) — server > desktop > laptop > phone.\n */\n publish?: boolean;\n priority?: number;\n}\n\n/** Whether to use virtual-hosted addressing for this bucket: the explicit flag,\n * or — when unset — auto-detected from an endpoint whose host already carries\n * the bucket (e.g. COS's `<bucket>.cos.<region>.myqcloud.com`). */\nexport function isVirtualHostedStyle(config: S3Config): boolean {\n if (config.virtualHostedStyle != null) return config.virtualHostedStyle;\n try {\n return new URL(config.endpoint).hostname.startsWith(`${config.bucket}.`);\n } catch {\n return false;\n }\n}\n\nexport interface StorageObject {\n key: string;\n etag?: string;\n}\n\n/** Options for a conditional/typed put. */\nexport interface StoragePutOpts {\n contentType?: string;\n /** Conditional create (S3 `If-None-Match: *`): fail with an MhError(\"conflict\")\n * if the object already exists. Used to make first-time key provisioning a\n * compare-and-set so two devices initializing the same empty bucket can't\n * clobber each other's master key. */\n ifNoneMatch?: boolean;\n}\n\n/** The minimal object-store surface storage-sync needs. Implemented per runtime:\n * Bun.S3Client on the CLI/desktop (storage-s3-bun.ts), aws4fetch SigV4 + fetch\n * in the browser worker (webui/data/storage-s3-browser.ts). */\nexport interface StorageClient {\n /** Keys under `prefix`, ascending, optionally only those strictly after\n * `startAfter`. With `delimiter` (\"/\"), collapse one level into common\n * prefixes (their keys end in the delimiter) to discover child \"folders\"\n * cheaply — callers must tolerate a backend that ignores it and returns full\n * keys instead. */\n list(prefix: string, startAfter?: string, delimiter?: string): Promise<StorageObject[]>;\n get(key: string): Promise<Uint8Array | null>;\n put(key: string, body: Uint8Array, opts?: StoragePutOpts): Promise<void>;\n del(key: string): Promise<void>;\n}\n\ntype StorageClientFactory = (config: S3Config) => StorageClient;\nlet factory: StorageClientFactory | null = null;\n\n/** Register this runtime's S3 client builder (see the per-runtime impls). */\nexport function setStorageClientFactory(f: StorageClientFactory): void {\n factory = f;\n}\n\nexport function storageClientFor(config: S3Config): StorageClient {\n if (!factory)\n throw new MhError(\"network\", \"no S3 storage client is registered for this runtime\");\n return factory(config);\n}\n\n// ---- bucket key layout ----------------------------------------------------------\n\n/** Reserved cursor key for \"which snapshots have we already ingested\". Real node\n * ids are 8-char random suffixes, so this sentinel can't collide with one. */\nconst SNAPSHOT_CURSOR = \"__snapshot__\";\nconst SEG_PAD = 16;\n/** Separator between the snapshot's max-HLC and its content hash in the object\n * key. Must not appear in an HLC (which is digits + '-'); '~' sorts above every\n * HLC char so keys still order by max-HLC then hash. */\nconst SNAP_SEP = \"~\";\n\n// ---- snapshot/truncation policy defaults (log-structured; see ⑤) ----------------\n/** Keep this many of our most recent own segments alive past a snapshot so a\n * consumer behind by < a window catches up incrementally instead of re-pulling\n * the whole-hub snapshot. Older segments are truncated → bucket stays bounded. */\nconst DEFAULT_RETAIN_SEGMENTS = 40;\n/** Publish a new snapshot once the whole-hub delta since the newest snapshot\n * reaches max(MIN_DELTA ops, hub_size × DELTA_RATIO) — a checkpoint that \"pays\n * for itself\", instead of a short wall-clock timer that re-checkpoints every 60s\n * and strands consumers on full downloads. */\nconst DEFAULT_SNAPSHOT_MIN_DELTA = 200;\nconst DEFAULT_SNAPSHOT_DELTA_RATIO = 0.5;\n/** Safety cap: publish anyway if the hub advanced and this long passed since the\n * newest snapshot, so a slow trickle of edits still gets a fresh baseline. */\nconst DEFAULT_SNAPSHOT_MAX_INTERVAL_MS = 30 * 60_000;\n\nfunction basePrefix(prefix: string): string {\n const p = (prefix || \"\").replace(/^\\/+|\\/+$/g, \"\");\n return p ? `${p}/spaces/default` : \"spaces/default\";\n}\nconst oplogRoot = (base: string) => `${base}/oplog/`;\nconst nodePrefix = (base: string, node: string) => `${base}/oplog/${node}/`;\nconst headKey = (base: string, node: string) => `${base}/oplog/${node}/HEAD`;\nconst segKey = (base: string, node: string, seq: number) =>\n `${base}/oplog/${node}/${String(seq).padStart(SEG_PAD, \"0\")}.seg`;\nconst snapshotRoot = (base: string) => `${base}/snapshot/`;\nconst mainKeyPath = (base: string) => `${base}/keys/main.json`;\n\n// ---- segment codec (Change[] ⇄ bytes) -------------------------------------------\n\nfunction ab(u: Uint8Array): ArrayBuffer {\n const out = new Uint8Array(u.byteLength);\n out.set(u);\n return out.buffer;\n}\n\nasync function gzip(bytes: Uint8Array): Promise<Uint8Array> {\n const stream = new Response(ab(bytes)).body!.pipeThrough(new CompressionStream(\"gzip\"));\n return new Uint8Array(await new Response(stream).arrayBuffer());\n}\nasync function gunzip(bytes: Uint8Array): Promise<Uint8Array> {\n const stream = new Response(ab(bytes)).body!.pipeThrough(new DecompressionStream(\"gzip\"));\n return new Uint8Array(await new Response(stream).arrayBuffer());\n}\n\n/** Serialize changes to the canonical JSONL the segment/snapshot codec stores. */\nfunction toJsonl(changes: Change[]): string {\n return changes.map((c) => JSON.stringify(c)).join(\"\\n\");\n}\n\nasync function encodeSegment(changes: Change[], key: Uint8Array | null): Promise<Uint8Array> {\n const gz = await gzip(new TextEncoder().encode(toJsonl(changes)));\n return key ? encryptBytes(key, gz) : gz;\n}\n\nasync function decodeSegment(bytes: Uint8Array, key: Uint8Array | null): Promise<Change[]> {\n const gz = key ? await decryptBytes(key, bytes) : bytes;\n const jsonl = new TextDecoder().decode(await gunzip(gz));\n if (!jsonl) return [];\n return jsonl\n .split(\"\\n\")\n .filter((l) => l.length > 0)\n .map((l) => JSON.parse(l) as Change);\n}\n\nfunction masterKeyOf(config: S3Config): Uint8Array | null {\n if (!config.encrypt) return null;\n // encrypt is on but the key is absent: provisioning partially failed or a\n // config migration dropped masterKey. Refuse loudly — silently returning null\n // here would let encodeSegment/decodeSegment write/read *plaintext* segments\n // to an \"encrypted\" bucket.\n if (!config.masterKey)\n throw new MhError(\n \"invalid_input\",\n \"encrypted bucket but master key missing — refusing to read/write plaintext\",\n );\n return fromB64(config.masterKey);\n}\n\n// ---- blob byte transport (content-addressed objects in the same bucket) --------\n// Doc images / large files never enter the oplog (only their hash does). A node\n// may publish a blob's bytes at <base>/blobs/<hash> (encrypted with the same\n// master key) so other nodes pull them on demand. A separate namespace from\n// oplog/snapshot — never listed during a sync round.\n\nconst blobsKey = (base: string, hash: string) => `${base}/blobs/${hash}`;\n\n/** Upload a blob's bytes to the bucket (idempotent via If-None-Match). Returns\n * true when actually written, false when the object already existed. */\nexport async function putBucketBlob(\n config: S3Config,\n hash: string,\n bytes: Uint8Array,\n): Promise<boolean> {\n const client = storageClientFor(config);\n const key = blobsKey(basePrefix(config.prefix), hash);\n const mk = masterKeyOf(config);\n const body = mk ? await encryptBytes(mk, bytes) : bytes;\n try {\n await client.put(key, body, { ifNoneMatch: true, contentType: \"application/octet-stream\" });\n return true;\n } catch (e) {\n if (errorCode(e) === \"conflict\") return false; // already present\n throw e;\n }\n}\n\n/** Every blob hash the bucket durably holds — one paginated LIST of the `blobs/`\n * namespace (the client loops continuation tokens internally). Used by the\n * on-demand clear-presence verify; keeps the `<base>/blobs/<hash>` key layout\n * encapsulated here. Throws if the bucket is unreachable (caller treats the\n * anchor as unverified). */\nexport async function listBucketBlobHashes(config: S3Config): Promise<Set<string>> {\n const client = storageClientFor(config);\n const prefix = blobsKey(basePrefix(config.prefix), \"\");\n const objs = await client.list(prefix);\n const out = new Set<string>();\n for (const o of objs) {\n const tail = o.key.slice(prefix.length);\n if (tail) out.add(tail); // key tail after `blobs/` is the hash\n }\n return out;\n}\n\n/** Fetch a blob's bytes from the bucket, or null if absent. */\nexport async function getBucketBlob(config: S3Config, hash: string): Promise<Uint8Array | null> {\n const client = storageClientFor(config);\n const obj = await client.get(blobsKey(basePrefix(config.prefix), hash));\n if (!obj) return null;\n const mk = masterKeyOf(config);\n return mk ? decryptBytes(mk, obj) : obj;\n}\n\n/** Short content hash (hex) for snapshot keying — runtime-agnostic (WebCrypto). */\nasync function contentHash(s: string): Promise<string> {\n const digest = await crypto.subtle.digest(\n \"SHA-256\",\n ab(new TextEncoder().encode(s)),\n );\n return [...new Uint8Array(digest)].map((b) => b.toString(16).padStart(2, \"0\")).join(\"\").slice(0, 16);\n}\n\n// ---- cursors --------------------------------------------------------------------\n\nfunction getPushCursor(db: DbDriver, url: string): number {\n const r = db.query(\"SELECT push_cursor FROM peers WHERE url = ?\").get(url) as\n | { push_cursor: number }\n | null;\n return r?.push_cursor ?? 0;\n}\nfunction setPushCursor(db: DbDriver, url: string, c: number): void {\n db.query(\"UPDATE peers SET push_cursor = ? WHERE url = ?\").run(c, url);\n}\nfunction getStorageCursor(db: DbDriver, url: string, node: string): string | null {\n const r = db\n .query(\"SELECT last_key FROM storage_cursors WHERE peer_url = ? AND node_id = ?\")\n .get(url, node) as { last_key: string | null } | null;\n return r?.last_key ?? null;\n}\nfunction setStorageCursor(db: DbDriver, url: string, node: string, key: string): void {\n db.query(\n \"INSERT INTO storage_cursors (peer_url, node_id, last_key) VALUES (?, ?, ?) \" +\n \"ON CONFLICT(peer_url, node_id) DO UPDATE SET last_key = excluded.last_key\",\n ).run(url, node, key);\n}\n\n/** Snapshot keys we've already ingested for this peer (newline-joined set in the\n * SNAPSHOT_CURSOR sentinel row). A set, not a single \"latest\" key: two nodes\n * can publish different-content snapshots at the same max-HLC, and a single\n * lexicographic cursor would skip one of them. */\nfunction getSnapshotConsumed(db: DbDriver, url: string): Set<string> {\n const raw = getStorageCursor(db, url, SNAPSHOT_CURSOR);\n return new Set(raw ? raw.split(\"\\n\").filter(Boolean) : []);\n}\nfunction setSnapshotConsumed(db: DbDriver, url: string, keys: Iterable<string>): void {\n setStorageCursor(db, url, SNAPSHOT_CURSOR, [...keys].join(\"\\n\"));\n}\n\n// ---- winners snapshot -----------------------------------------------------------\n\n/** The current winner (max-HLC row) of every register — the head state as oplog\n * rows. Mirrors compact.ts's \"collapse to as-of-cutoff winner\": a consumer that\n * ingests this reaches the same materialized state. Tombstone winners included. */\nfunction winnersSnapshot(db: DbDriver): Change[] {\n return db\n .query(\n `SELECT ${CHANGE_SELECT} FROM crdt_changes c\n WHERE NOT EXISTS (\n SELECT 1 FROM crdt_changes k\n WHERE k.dataset = c.dataset AND k.row_id = c.row_id AND k.col = c.col AND k.hlc > c.hlc\n )`,\n )\n .all() as Change[];\n}\n\n// ---- snapshot frontier (vector clock) for incremental skip -----------------------\n\n/** Per-node HLC frontier: node_id → max HLC reflected for that node. A consumer\n * whose own frontier dominates a snapshot's already holds every winner in it. */\ntype Frontier = Record<string, string>;\n\n/** Frontier of a winner set: per author node, the max winner HLC. */\nfunction frontierOfWinners(winners: Change[]): Frontier {\n const f: Frontier = {};\n for (const c of winners) if (!f[c.node_id] || c.hlc > f[c.node_id]!) f[c.node_id] = c.hlc;\n return f;\n}\n\n/** This node's local frontier from its oplog (per node, max ingested HLC). Cheap\n * GROUP BY; segments are pulled gap-free per node so this is a true prefix. */\nfunction localFrontier(db: DbDriver): Frontier {\n const rows = db\n .query(\"SELECT node_id, MAX(hlc) AS h FROM crdt_changes GROUP BY node_id\")\n .all() as { node_id: string; h: string }[];\n const f: Frontier = {};\n for (const r of rows) f[r.node_id] = r.h;\n return f;\n}\n\n/** True when `local` already covers every node frontier in `snap` (∀ node n:\n * local[n] ≥ snap[n]). Then ingesting the snapshot would add nothing → skip it. */\nfunction dominates(local: Frontier, snap: Frontier): boolean {\n for (const n in snap) if (!local[n] || local[n]! < snap[n]!) return false;\n return true;\n}\n\n/** Sidecar object carrying a snapshot's frontier so a caught-up consumer can skip\n * the (whole-hub) body GET, plus the publisher's own latest seg key at snapshot\n * time so a consumer that DID ingest the snapshot can advance its cursor past the\n * publisher's retained segments (⑤c) instead of re-pulling them. */\ninterface SnapMeta {\n frontier: Frontier;\n ownNode: string;\n ownSegHigh: string | null;\n}\nconst vcKey = (snapKey: string) => `${snapKey}.vc`;\n\nasync function encodeVc(meta: SnapMeta, key: Uint8Array | null): Promise<Uint8Array> {\n const gz = await gzip(new TextEncoder().encode(JSON.stringify(meta)));\n return key ? encryptBytes(key, gz) : gz;\n}\nasync function decodeVc(bytes: Uint8Array, key: Uint8Array | null): Promise<SnapMeta | null> {\n try {\n const gz = key ? await decryptBytes(key, bytes) : bytes;\n return JSON.parse(new TextDecoder().decode(await gunzip(gz))) as SnapMeta;\n } catch {\n return null; // unreadable/legacy snapshot with no .vc → caller falls back to GET\n }\n}\n\n// ---- node-prefix discovery ------------------------------------------------------\n\nfunction nodesFromKeys(objs: StorageObject[], root: string): string[] {\n const nodes = new Set<string>();\n for (const o of objs) {\n const rest = o.key.slice(root.length); // \"<node>/\" (delimiter) or \"<node>/<file>\"\n const slash = rest.indexOf(\"/\");\n if (slash > 0) nodes.add(rest.slice(0, slash));\n }\n return [...nodes];\n}\n\n/** Discover the node prefixes under oplog/. Asks for a delimited (one-level)\n * listing so a backend that honors it returns just the \"<node>/\" folders\n * instead of every segment; nodesFromKeys derives the same node set whether the\n * backend collapsed them or returned full keys. */\nasync function listRemoteNodes(client: StorageClient, base: string): Promise<string[]> {\n const root = oplogRoot(base);\n return nodesFromKeys(await client.list(root, undefined, \"/\"), root);\n}\n\n// ---- master-key provisioning (peer-add time) ------------------------------------\n\n/**\n * Resolve the master key for a bucket at setup: read keys/main.json and unwrap\n * with the passphrase, or — when absent — generate a key, wrap it, and upload\n * it with `If-None-Match` so a concurrent first-time init can't clobber it.\n * Returns base64(K) to store in peers.config, or null when encryption is off.\n * Wrong passphrase throws `auth` (from unwrapMasterKey).\n */\nexport async function provisionMasterKey(\n client: StorageClient,\n config: S3Config,\n passphrase: string,\n): Promise<string | null> {\n if (!config.encrypt) return null;\n const base = basePrefix(config.prefix);\n const path = mainKeyPath(base);\n const unwrap = async (bytes: Uint8Array) =>\n toB64(await unwrapMasterKey(JSON.parse(new TextDecoder().decode(bytes)) as KeyEnvelope, passphrase));\n\n const existing = await client.get(path);\n if (existing) return unwrap(existing);\n\n const K = generateMasterKey();\n const env = await wrapMasterKey(K, passphrase);\n try {\n await client.put(path, new TextEncoder().encode(JSON.stringify(env)), {\n contentType: \"application/json\",\n ifNoneMatch: true,\n });\n return toB64(K);\n } catch (e) {\n // Lost a first-init race: another device created the key between our GET and\n // PUT. Adopt theirs (unwraps with the same passphrase, or fails `auth`).\n if (errorCode(e) === \"conflict\") {\n const winner = await client.get(path);\n if (winner) return unwrap(winner);\n }\n throw e;\n }\n}\n\n// ---- snapshot publish + truncation ----------------------------------------------\n\n/**\n * Publish a winners-only snapshot and truncate this node's own segments. Every\n * op we've uploaded so far is in the local oplog now, so the snapshot (winners\n * as-of the current max HLC) supersedes all of them — they're safe to delete\n * (compact.ts invariant #1). Ops produced afterwards go into fresh, higher-keyed\n * segments; consumers reach our pre-snapshot state via the snapshot itself.\n *\n * The key is `<maxHlc>~<hash>.snap`: the hash (over the canonical winner set)\n * makes converged nodes collide on one key (deduped) while two nodes that are\n * NOT converged — same max HLC but different extra winners — get distinct keys,\n * so neither overwrites the other. Then old snapshots (strictly lower max-HLC)\n * are GC'd so the bucket stays bounded.\n *\n * Returns the snapshot key + change count, or null when the oplog is empty.\n */\nexport async function publishSnapshot(\n db: DbDriver,\n client: StorageClient,\n config: S3Config,\n retainSegments: number = DEFAULT_RETAIN_SEGMENTS,\n): Promise<{ key: string; changes: number } | null> {\n const key = masterKeyOf(config);\n const base = basePrefix(config.prefix);\n const node = getNodeId(db);\n\n // Cut the segment frontier BEFORE reading winners. If another local sync uploads\n // a segment while we are publishing, it either lands before this list and is in\n // the snapshot, or after it and remains below the consumer's cursor.\n const ownSegs = (await client.list(nodePrefix(base, node)))\n .map((o) => o.key)\n .filter((k) => k.endsWith(\".seg\"))\n .sort();\n const ownSegHigh = ownSegs.length ? ownSegs[ownSegs.length - 1]! : null;\n\n const winners = winnersSnapshot(db);\n if (winners.length === 0) return null;\n const maxHlc = winners.reduce((m, c) => (c.hlc > m ? c.hlc : m), \"\");\n // Hash a deterministic (sorted) view so row order can't change the key.\n const hash = await contentHash(winners.map((c) => JSON.stringify(c)).sort().join(\"\\n\"));\n const snapKey = `${snapshotRoot(base)}${maxHlc}${SNAP_SEP}${hash}.snap`;\n\n await client.put(snapKey, await encodeSegment(winners, key), {\n contentType: \"application/octet-stream\",\n });\n // Frontier sidecar (⑤b): pullSnapshots reads it to skip the whole-hub body GET\n // when already caught up, and to advance its cursor past our retained segments.\n await client.put(\n vcKey(snapKey),\n await encodeVc({ frontier: frontierOfWinners(winners), ownNode: node, ownSegHigh }, key),\n { contentType: \"application/octet-stream\" },\n );\n\n // GC: drop snapshots (and their .vc) from a strictly older frontier (keep this\n // max-HLC and any concurrent sibling/newer one). maxHlc is fixed width, so a\n // basename compare before SNAP_SEP is the max-HLC compare.\n for (const o of await client.list(snapshotRoot(base))) {\n if (!o.key.endsWith(\".snap\")) continue;\n const mh = o.key.slice(snapshotRoot(base).length).split(SNAP_SEP)[0]!;\n if (mh < maxHlc) {\n await client.del(o.key);\n await client.del(vcKey(o.key));\n }\n }\n\n // Truncate our own superseded segments but RETAIN the most recent\n // `retainSegments` (⑤c): a consumer behind by < a window catches up via segments\n // (incremental) instead of re-downloading the whole-hub snapshot.\n const toDelete = ownSegs.slice(0, Math.max(0, ownSegs.length - retainSegments));\n for (const k of toDelete) await client.del(k);\n return { key: snapKey, changes: winners.length };\n}\n\n// ---- one sync round -------------------------------------------------------------\n\nexport interface StorageSyncOpts {\n /** Publisher-only: publish a snapshot + truncate once this node's own segment\n * count reaches this. Default 200 — high enough that typical use rarely hits\n * it, low enough to keep the bucket bounded under heavy publisher use. */\n snapshotEverySegments?: number;\n /** Push-batching: defer uploading our pending own ops until there are at least\n * this many (default 1 → push every round). Coalesces a burst of edits into\n * one segment instead of many tiny ones (each is a billed request + a GET for\n * every puller). */\n minPushChanges?: number;\n /** …or until the oldest pending op is at least this old (ms; default 0 → no\n * age bound). Bounds how long a small trailing edit waits. */\n maxPushAgeMs?: number;\n /** Push regardless of the batching thresholds — use on explicit \"sync now\" and\n * when the app is backgrounding, so edits are never stranded unsynced. */\n forcePush?: boolean;\n /**\n * This node is the bucket's *publisher*: keep the bucket a complete, fresh\n * whole-hub mirror by writing a winners-only snapshot (publishSnapshot) when\n * the bucket has none yet, or when the hub has advanced past the newest\n * snapshot. The snapshot spans the WHOLE db, so it captures data authored by\n * nodes that never push to this bucket themselves (e.g. a server holding the\n * canonical hub while browsers only window onto it) — fixing the \"attached a\n * bucket but it stays empty\" footgun. Any node holding the full hub can be the\n * publisher; who is one is decided above storage.ts (server by default, else a\n * lease — see publisher-lease.ts). Correctness never depends on a single\n * publisher: concurrent snapshots are content-addressed and idempotent. */\n publish?: boolean;\n /** ⑤d snapshot trigger: publish once the whole-hub delta since the newest\n * snapshot reaches max(`snapshotMinDelta` ops, hub_size × `snapshotDeltaRatio`),\n * or `snapshotMaxIntervalMs` elapsed (safety). Replaces the old 60s timer that\n * re-checkpointed constantly and forced full re-downloads. Defaults:\n * DEFAULT_SNAPSHOT_MIN_DELTA / _DELTA_RATIO / _MAX_INTERVAL_MS. */\n snapshotMinDelta?: number;\n snapshotDeltaRatio?: number;\n snapshotMaxIntervalMs?: number;\n /** ⑤c: keep this many of our most recent own segments alive past a snapshot so\n * slightly-behind consumers catch up incrementally (default DEFAULT_RETAIN_SEGMENTS). */\n snapshotRetainSegments?: number;\n /** This node's publisher priority when contending for the lease (higher wins;\n * see publisher-lease.ts). Only consulted when `publish` is set. */\n priority?: number;\n /**\n * Run the PULL half of the round (snapshots + other nodes' segments). Default\n * true. Set false for *push-only* rounds: an origin-backed replica gets a\n * superset of bucket contents from its origin (HTTP), so it never needs to PULL\n * the bucket — it only PUSHes its own segments here for independent durability\n * (Path B). Skipping PULL drops the two unconditional LISTs (snapshot/, oplog/)\n * that dominate idle bucket cost. A *publisher* must always PULL (it needs the\n * snapshot list to decide what to publish), so callers never combine\n * `publish:true` with `pull:false`.\n */\n pull?: boolean;\n}\n\n/** Epoch millis encoded in an HLC's first 15 chars (hlc.ts formatHlc). */\nfunction hlcMs(hlc: string): number {\n return parseInt(hlc.slice(0, 15), 10);\n}\n\n/** Wall-clock age (ms) of a change from its HLC. */\nfunction changeAgeMs(c: Change): number {\n return Date.now() - hlcMs(c.hlc);\n}\n\n/** The max-HLC of the newest snapshot present in the bucket, or null when none.\n * Parsed from the `<maxHlc>~<hash>.snap` key, so it needs no GET. */\nfunction newestSnapshotHlc(snapKeys: string[], base: string): string | null {\n const root = snapshotRoot(base);\n let max: string | null = null;\n for (const k of snapKeys) {\n const mh = k.slice(root.length).split(SNAP_SEP)[0]!;\n if (max === null || mh > max) max = mh;\n }\n return max;\n}\n\n/**\n * One push/pull round against a storage peer. Push uploads this node's pending\n * own ops as a new segment (subject to batching); pull hydrates from snapshots\n * (any not yet ingested) then drains each other node's new segments. Returns\n * { pushed, pulled } like syncWithPeer so peers.ts status writeback is shared.\n */\nexport async function syncWithStorage(\n db: DbDriver,\n peerUrl: string,\n client: StorageClient,\n config: S3Config,\n opts: StorageSyncOpts = {},\n): Promise<SyncResult> {\n const node = getNodeId(db);\n const key = masterKeyOf(config);\n const base = basePrefix(config.prefix);\n\n // PUSH: our own un-uploaded ops → one new segment + HEAD pointer.\n const pushCursor = getPushCursor(db, peerUrl);\n const batch = changesAfterSeq(db, pushCursor, { onlyNode: node });\n let pushed = 0;\n let pendingPush = false;\n if (batch.changes.length === 0) {\n // No own ops pending: still advance past any ingested foreign rows so they\n // aren't rescanned every round (changesAfterSeq's high-water on exhaustion).\n setPushCursor(db, peerUrl, batch.cursor);\n } else {\n const minChanges = opts.minPushChanges ?? 1;\n const maxAge = opts.maxPushAgeMs ?? 0;\n const ready =\n opts.forcePush || batch.changes.length >= minChanges || changeAgeMs(batch.changes[0]!) >= maxAge;\n if (ready) {\n // Write HEAD *before* the segment: a crash between the two then leaves HEAD\n // pointing at a not-yet-present key, which only makes a puller LIST once\n // more (safe) — the reverse order could leave HEAD behind a written\n // segment and make the cheap-skip below silently miss it.\n const k = segKey(base, node, batch.cursor);\n await client.put(headKey(base, node), new TextEncoder().encode(k), {\n contentType: \"text/plain\",\n });\n await client.put(k, await encodeSegment(batch.changes, key), {\n contentType: \"application/octet-stream\",\n });\n setPushCursor(db, peerUrl, batch.cursor);\n pushed = batch.changes.length;\n } else {\n pendingPush = true;\n }\n // Pending but below threshold → leave the cursor, retry next round.\n }\n\n // PULL: snapshots first (every one we haven't ingested)…then each other node's\n // new segments. Skipped entirely in push-only mode (opts.pull === false) — see\n // StorageSyncOpts.pull. `snapKeys` stays [] then; the PUBLISHER block below only\n // runs when opts.publish, and a publisher always pulls, so it never sees [].\n let snapKeys: string[] = [];\n let pulled = 0;\n if (opts.pull ?? true) {\n snapKeys = (await client.list(snapshotRoot(base)))\n .map((o) => o.key)\n .filter((k) => k.endsWith(\".snap\"));\n pulled += await pullSnapshots(db, peerUrl, snapKeys, client, key);\n\n // …then each other node's new segments.\n for (const remote of await listRemoteNodes(client, base)) {\n if (remote === node) continue; // never pull our own prefix back in\n const cursor = getStorageCursor(db, peerUrl, remote);\n // Cheap skip: HEAD names the latest segment key; if we're already at/after\n // it there's nothing new. HEAD is written before its segment, so it's never\n // behind the real latest — this can't skip a present-but-newer segment.\n const head = await client.get(headKey(base, remote));\n if (head) {\n const latest = new TextDecoder().decode(head);\n if (cursor && latest <= cursor) continue;\n }\n const segs = (await client.list(nodePrefix(base, remote), cursor ?? undefined)).filter(\n (o) => o.key.endsWith(\".seg\"),\n );\n for (const seg of segs) {\n const bytes = await client.get(seg.key);\n if (!bytes) continue;\n const changes = await decodeSegment(bytes, key);\n // Count only changes NEW to our oplog (ingest's return), not the segment's\n // raw size — a re-read of already-known data is not sync progress and must\n // not keep the auto-sync backoff (server.ts) flagged \"busy\".\n pulled += ingest(db, changes);\n setStorageCursor(db, peerUrl, remote, seg.key);\n }\n }\n }\n\n // PUBLISHER: keep the bucket a complete, fresh whole-hub mirror. The snapshot\n // spans the whole db, so it carries data authored by nodes that never push\n // here — and an empty bucket gets its first snapshot immediately (the\n // \"attached but empty\" fix). Rate-limited so a steady edit stream doesn't\n // snapshot every round; `snapKeys` was already listed above, so no extra LIST.\n let didSnapshot = false;\n if (opts.publish) {\n const hubSize = (db.query(\"SELECT COUNT(*) AS n FROM crdt_changes\").get() as { n: number }).n;\n if (hubSize > 0) {\n const newest = newestSnapshotHlc(snapKeys, base);\n // ⑤d: checkpoint when the whole-hub delta since the newest snapshot is worth\n // a fresh baseline — max(min ops, hub_size × ratio) — or a safety time cap.\n // Local-only queries; no extra bucket calls. (⑤a: forcePush no longer forces\n // a snapshot — it only forces the PUSH above — so a steady \"sync now\" / user\n // refresh can't trigger whole-hub re-publishes.)\n const minDelta = opts.snapshotMinDelta ?? DEFAULT_SNAPSHOT_MIN_DELTA;\n const ratio = opts.snapshotDeltaRatio ?? DEFAULT_SNAPSHOT_DELTA_RATIO;\n const maxInterval = opts.snapshotMaxIntervalMs ?? DEFAULT_SNAPSHOT_MAX_INTERVAL_MS;\n const delta =\n newest === null\n ? hubSize\n : (db.query(\"SELECT COUNT(*) AS n FROM crdt_changes WHERE hlc > ?\").get(newest) as {\n n: number;\n }).n;\n const due =\n newest === null || // empty bucket → first snapshot now\n delta >= Math.max(minDelta, hubSize * ratio) ||\n (delta > 0 && Date.now() - hlcMs(newest) >= maxInterval); // trickle → safety cap\n // Only publish when we're the elected publisher among live candidates, so\n // multiple publishers don't all upload the same snapshot. Election is\n // best-effort (idempotent snapshots make a double-elect harmless).\n if (due && (await isElectedPublisher(client, base, node, opts.priority ?? 0))) {\n await publishSnapshot(db, client, config, opts.snapshotRetainSegments);\n didSnapshot = true;\n }\n }\n }\n\n // Publisher-only bucket bounding: snapshot + truncate once our own prefix grows\n // large. Non-publishers may push their own segments, but `publish:false` is a\n // hard promise that this node never writes a whole-hub snapshot.\n if (opts.publish && !didSnapshot && pushed > 0) {\n const threshold = opts.snapshotEverySegments ?? 200;\n const ownCount = (await client.list(nodePrefix(base, node))).filter((o) =>\n o.key.endsWith(\".seg\"),\n ).length;\n if (ownCount >= threshold) await publishSnapshot(db, client, config, opts.snapshotRetainSegments);\n }\n\n return { pushed, pulled, pendingPush };\n}\n\n/** Ingest only the snapshots we don't already cover, then prune the consumed set\n * to keys still present so it stays bounded as old snapshots GC. ⑤b: a small\n * frontier sidecar (.vc) lets a caught-up consumer skip the whole-hub body GET;\n * newest-first so ingesting the latest dominates (and thus skips) older ones. */\nasync function pullSnapshots(\n db: DbDriver,\n peerUrl: string,\n present: string[],\n client: StorageClient,\n key: Uint8Array | null,\n): Promise<number> {\n if (present.length === 0) return 0;\n const consumed = getSnapshotConsumed(db, peerUrl);\n const local = localFrontier(db);\n let pulled = 0;\n for (const k of [...present].sort().reverse()) {\n if (consumed.has(k)) continue;\n // Read the small frontier sidecar. If our local frontier already dominates\n // this snapshot we hold every winner in it → skip the whole-hub body GET.\n const metaBytes = await client.get(vcKey(k));\n const meta = metaBytes ? await decodeVc(metaBytes, key) : null;\n if (meta && dominates(local, meta.frontier)) {\n consumed.add(k);\n continue;\n }\n const bytes = await client.get(k);\n if (!bytes) continue;\n const changes = await decodeSegment(bytes, key);\n // A whole-hub snapshot mostly carries data we already hold; count only the\n // rows new to our oplog (ingest's return), not the snapshot's full size, so a\n // puller that's barely behind doesn't report a huge false \"pulled\" that pins\n // the auto-sync backoff at full cadence. The frontier advance below still\n // walks all changes (idempotent max).\n pulled += ingest(db, changes);\n consumed.add(k);\n for (const c of changes)\n if (!local[c.node_id] || c.hlc > local[c.node_id]!) local[c.node_id] = c.hlc;\n // ⑤c: the snapshot already covers the publisher's retained segments up to\n // ownSegHigh — advance our cursor past them so the segment loop won't re-pull.\n if (meta?.ownSegHigh) {\n const cur = getStorageCursor(db, peerUrl, meta.ownNode);\n if (!cur || cur < meta.ownSegHigh)\n setStorageCursor(db, peerUrl, meta.ownNode, meta.ownSegHigh);\n }\n }\n // Forget keys no longer in the bucket (GC'd) so the set can't grow unbounded.\n const presentSet = new Set(present);\n setSnapshotConsumed(db, peerUrl, [...consumed].filter((k) => presentSet.has(k)));\n return pulled;\n}\n",
|
|
100
|
+
"// Bun runtime implementation of the storage-sync StorageClient, backed by the\n// built-in Bun.S3Client (zero dependencies). Importing this module registers\n// the factory; CLI and server entry points import it for its side effect so any\n// 's3' peer they sync resolves to a real client. The browser worker registers\n// its own SigV4 client instead (webui/data/storage-s3-browser.ts) and never\n// imports this Bun-only module, keeping `bun` out of the browser bundle.\n\nimport { S3Client } from \"bun\";\nimport { AwsClient } from \"aws4fetch\";\nimport { MhError } from \"../errors.ts\";\nimport {\n setStorageClientFactory,\n isVirtualHostedStyle,\n type StorageClient,\n type StorageObject,\n type StoragePutOpts,\n type S3Config,\n} from \"./storage.ts\";\n\nfunction makeClient(config: S3Config): StorageClient {\n // Virtual-hosted (e.g. Tencent COS, which rejects path-style): the endpoint\n // host already carries the bucket, so Bun ignores the `bucket` option.\n const vhost = isVirtualHostedStyle(config);\n const s3 = new S3Client({\n accessKeyId: config.accessKeyId,\n secretAccessKey: config.secretAccessKey,\n region: config.region || \"auto\", // R2 uses \"auto\"\n endpoint: config.endpoint,\n bucket: config.bucket,\n ...(vhost ? { virtualHostedStyle: true } : {}),\n });\n\n return {\n async list(prefix: string, startAfter?: string, delimiter?: string): Promise<StorageObject[]> {\n const out: StorageObject[] = [];\n let continuationToken: string | undefined;\n do {\n const res = await s3.list({ prefix, startAfter, maxKeys: 1000, continuationToken, delimiter });\n for (const c of res.contents ?? []) out.push({ key: c.key, etag: c.eTag });\n // With delimiter, child \"folders\" come back as common prefixes (their\n // keys end in the delimiter); nodesFromKeys treats them like full keys.\n for (const p of res.commonPrefixes ?? []) out.push({ key: p.prefix });\n continuationToken = res.isTruncated ? res.nextContinuationToken : undefined;\n } while (continuationToken);\n return out;\n },\n\n async get(key: string): Promise<Uint8Array | null> {\n const f = s3.file(key);\n try {\n return new Uint8Array(await f.arrayBuffer());\n } catch (e) {\n // Single GET on the happy path; only an error pays for the existence\n // probe that tells \"absent\" (→ null) apart from a real failure (rethrow).\n if (await f.exists().catch(() => true)) throw e;\n return null;\n }\n },\n\n async put(key: string, body: Uint8Array, opts?: StoragePutOpts): Promise<void> {\n // Bun.S3Client.write has no native If-None-Match. Approximate the conditional\n // create with an existence pre-check: this catches the realistic ordering\n // (one device's create already visible — S3/R2 are read-after-write\n // consistent for new objects) and lets provisionMasterKey adopt the winner.\n // A truly simultaneous Bun-vs-Bun first-init on an empty bucket can still\n // race (no atomic CAS here); the browser client uses real If-None-Match.\n if (opts?.ifNoneMatch && (await s3.file(key).exists())) {\n throw new MhError(\"conflict\", `S3 object already exists: ${key}`);\n }\n await s3.file(key).write(body, opts?.contentType ? { type: opts.contentType } : undefined);\n },\n\n async del(key: string): Promise<void> {\n await s3.file(key).delete();\n },\n };\n}\n\nsetStorageClientFactory(makeClient);\n\n// ── Bucket CORS bootstrap (Bun-only) ────────────────────────────────────────\n// A browser shell can't open its own CORS: the PutBucketCors request would itself\n// be a cross-origin call the bucket hasn't whitelisted yet (chicken-and-egg). So\n// the desktop (which holds the bucket credentials) sets it on the phone's behalf.\n// Bun.S3Client has no PutBucketCors API, so we sign a raw `?cors` request with\n// aws4fetch — same signer the browser client already uses (no hand-rolled SigV4).\n\nconst MANAGED_CORS_RULE_ID = \"metahub-pwa\";\n\nfunction corsEndpoint(config: S3Config): { aws: AwsClient; url: string } {\n const aws = new AwsClient({\n accessKeyId: config.accessKeyId,\n secretAccessKey: config.secretAccessKey,\n region: config.region || \"auto\",\n service: \"s3\",\n });\n const origin = new URL(config.endpoint).origin;\n // Bucket-level subresource: virtual-hosted has the bucket in the host already\n // (COS), path-style puts it in the path (R2/MinIO/S3).\n const base = isVirtualHostedStyle(config) ? origin : `${origin}/${config.bucket}`;\n return { aws, url: `${base}/?cors` };\n}\n\nfunction escapeXml(s: string): string {\n return s\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\");\n}\n\nfunction unescapeXml(s: string): string {\n return s\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/"/g, '\"')\n .replace(/&/g, \"&\"); // ampersand last, so it can't re-trigger the others\n}\n\nfunction managedCorsRule(origins: string[]): string {\n const o = origins.map((x) => `<AllowedOrigin>${escapeXml(x)}</AllowedOrigin>`).join(\"\");\n return (\n `<CORSRule><ID>${MANAGED_CORS_RULE_ID}</ID>${o}` +\n `<AllowedMethod>GET</AllowedMethod><AllowedMethod>PUT</AllowedMethod>` +\n `<AllowedMethod>HEAD</AllowedMethod><AllowedMethod>DELETE</AllowedMethod>` +\n `<AllowedHeader>*</AllowedHeader><ExposeHeader>ETag</ExposeHeader>` +\n `<MaxAgeSeconds>3600</MaxAgeSeconds></CORSRule>`\n );\n}\n\n/** Read the bucket's current CORS config (raw XML), or null if none is set. */\nexport async function getBucketCors(config: S3Config): Promise<string | null> {\n const { aws, url } = corsEndpoint(config);\n const res = await aws.fetch(url, { method: \"GET\" });\n if (res.status === 404) return null; // NoSuchCORSConfiguration\n if (!res.ok) {\n const detail = await res.text().catch(() => \"\");\n throw new Error(`S3 get-cors failed: ${res.status} ${detail.slice(0, 200)}`);\n }\n return await res.text();\n}\n\n/**\n * Build the PutBucketCors XML body from the bucket's current config. PutBucketCors\n * replaces the whole config, so we keep every rule that isn't ours and re-emit our\n * managed rule (id=metahub-pwa). `merge` decides our rule's origins:\n * - false (CLI `peer cors`): SET — exactly `origins` (lets the user shrink/reset).\n * - true (auto-open on bucket-attach): UNION with the managed rule's existing\n * origins, so attaching the same bucket from a second shell/origin (a homelab\n * server origin alongside the official PWA shell) adds to the allow-list\n * instead of clobbering it.\n * A wildcard `*` collapses the set. Pure (no I/O) so it's unit-testable.\n */\nexport function buildCorsXml(existing: string | null, origins: string[], merge: boolean): string {\n const kept: string[] = [];\n const prev: string[] = [];\n if (existing) {\n for (const rule of existing.match(/<CORSRule>[\\s\\S]*?<\\/CORSRule>/g) ?? []) {\n if (rule.includes(`<ID>${MANAGED_CORS_RULE_ID}</ID>`)) {\n if (merge)\n for (const m of rule.matchAll(/<AllowedOrigin>([\\s\\S]*?)<\\/AllowedOrigin>/g))\n prev.push(unescapeXml(m[1]!.trim()));\n } else {\n kept.push(rule);\n }\n }\n }\n const merged = [...new Set([...prev, ...origins])];\n const finalOrigins = merged.includes(\"*\") ? [\"*\"] : merged;\n return (\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>` +\n `<CORSConfiguration>${kept.join(\"\")}${managedCorsRule(finalOrigins)}</CORSConfiguration>`\n );\n}\n\n/**\n * Allow a browser shell served from `origins` to talk to the bucket directly\n * (GET/PUT/HEAD/DELETE) via GET-merge-PUT (see buildCorsXml). `opts.merge` unions\n * with existing managed origins instead of replacing them — used when a second\n * origin attaches the same bucket. Content-MD5 is required by the CORS API\n * (S3 and COS both).\n */\nexport async function putBucketCors(\n config: S3Config,\n origins: string[],\n opts: { merge?: boolean } = {},\n): Promise<void> {\n const clean = origins.map((o) => o.trim()).filter(Boolean);\n if (clean.length === 0) throw new MhError(\"invalid_input\", \"putBucketCors: no origins given\");\n const { aws, url } = corsEndpoint(config);\n\n const existing = await getBucketCors(config).catch(() => null);\n const xml = buildCorsXml(existing, clean, opts.merge ?? false);\n const body = new TextEncoder().encode(xml);\n const contentMd5 = new Bun.CryptoHasher(\"md5\").update(body).digest(\"base64\");\n\n const res = await aws.fetch(url, {\n method: \"PUT\",\n body: new Uint8Array(body).buffer,\n headers: { \"content-type\": \"application/xml\", \"content-md5\": contentMd5 },\n });\n if (!res.ok) {\n const detail = await res.text().catch(() => \"\");\n throw new Error(`S3 put-cors failed: ${res.status} ${detail.slice(0, 200)}`);\n }\n}\n",
|
|
104
101
|
"// Managed server auth token, persisted in the `meta` table (same pattern as\n// getNodeId in ../node.ts). The DB is the source of truth: the running server\n// reads state per request, so a separate `mh token refresh` process is picked up\n// immediately and expiry rotation happens lazily on the next request.\n//\n// auth_token current token\n// auth_token_exp when it expires (epoch ms) → lazy rotation past this\n// auth_token_prev the token from before the last rotation (one generation)\n// auth_token_prev_exp until when `prev` may still be exchanged (epoch ms)\n\nimport type { Database } from \"bun:sqlite\";\nimport { randomSuffix } from \"../ids.ts\";\n\nconst K_TOKEN = \"auth_token\";\nconst K_EXP = \"auth_token_exp\";\nconst K_PREV = \"auth_token_prev\";\nconst K_PREV_EXP = \"auth_token_prev_exp\";\n\nexport interface TokenState {\n token: string;\n /** Epoch ms; once `now > exp`, the next request rotates. */\n exp: number;\n /** The immediately-previous token, exchangeable until `prevExp`. */\n prev: string | null;\n /** Epoch ms; how long `prev` stays exchangeable. */\n prevExp: number;\n}\n\n/** Parse a duration like \"30d\" / \"24h\" / \"90m\" / \"3600\" (bare number = seconds). */\nexport function parseDuration(s: string | undefined, fallbackMs: number): number {\n if (!s) return fallbackMs;\n const m = /^(\\d+)\\s*(ms|s|m|h|d)?$/.exec(s.trim());\n if (!m) return fallbackMs;\n const n = Number(m[1]);\n switch (m[2]) {\n case \"ms\":\n return n;\n case \"m\":\n return n * 60_000;\n case \"h\":\n return n * 3_600_000;\n case \"d\":\n return n * 86_400_000;\n default:\n return n * 1000; // \"s\" or bare = seconds\n }\n}\n\nconst DAY = 86_400_000;\n/** Default token lifetime (override with METAHUB_TOKEN_TTL). */\nexport const DEFAULT_TTL_MS = parseDuration(process.env.METAHUB_TOKEN_TTL, 30 * DAY);\n/** Default grace window an old token stays swappable (override with METAHUB_TOKEN_GRACE). */\nexport const DEFAULT_GRACE_MS = parseDuration(process.env.METAHUB_TOKEN_GRACE, 7 * DAY);\n\nfunction getMeta(db: Database, key: string): string | null {\n const row = db.query(\"SELECT value FROM meta WHERE key = ?\").get(key) as\n | { value: string }\n | null;\n return row ? row.value : null;\n}\n\nfunction setMeta(db: Database, key: string, value: string): void {\n db.query(\n \"INSERT INTO meta (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value\",\n ).run(key, value);\n}\n\n/** Current persisted state, or null if no token has been minted yet. */\nexport function readState(db: Database): TokenState | null {\n const token = getMeta(db, K_TOKEN);\n if (!token) return null;\n const prev = getMeta(db, K_PREV);\n return {\n token,\n exp: Number(getMeta(db, K_EXP) ?? 0),\n prev: prev && prev.length > 0 ? prev : null,\n prevExp: Number(getMeta(db, K_PREV_EXP) ?? 0),\n };\n}\n\n/** Rotate: current → prev (swappable for `graceMs`), mint a fresh current. */\nexport function rotate(db: Database, ttlMs: number, graceMs: number): TokenState {\n const now = Date.now();\n const old = getMeta(db, K_TOKEN);\n const next: TokenState = {\n token: randomSuffix(24),\n exp: now + ttlMs,\n prev: old,\n prevExp: old ? now + graceMs : 0,\n };\n setMeta(db, K_TOKEN, next.token);\n setMeta(db, K_EXP, String(next.exp));\n setMeta(db, K_PREV, next.prev ?? \"\");\n setMeta(db, K_PREV_EXP, String(next.prevExp));\n return next;\n}\n\n/** Persisted state, minting or rotating when missing/expired. */\nexport function loadOrRotate(db: Database, ttlMs: number, graceMs: number): TokenState {\n const s = readState(db);\n if (!s || Date.now() > s.exp) return rotate(db, ttlMs, graceMs);\n return s;\n}\n",
|
|
105
|
-
"// Server-level configuration, persisted in the `meta` table (same pattern as\n// getNodeId / context.ts). These are local-machine settings — they never enter\n// the CRDT oplog and never sync to peers. `mh --server` reads them as defaults\n// (CLI flags still win); `mh config` and the WebUI settings page edit them.\n\nimport type {
|
|
106
|
-
"import type { ZodType } from \"zod\";\nimport type { Database } from \"bun:sqlite\";\nimport { ingest, changesAfterSeq } from \"../crdt.ts\";\nimport {\n SyncRequestSchema,\n SyncResponseSchema,\n HealthResponseSchema,\n SYNC_PATH,\n HEALTH_PATH,\n type SyncRequest,\n} from \"./protocol.ts\";\nimport { sitesRoutes } from \"./sites-routes.ts\";\nimport { peersRoutes } from \"./peers-routes.ts\";\nimport { errorCode, type MhErrorCode } from \"../errors.ts\";\n\n/** Injected at server startup; handlers reuse the open DB connection. */\nexport interface RouteCtx {\n db: Database;\n node: string;\n}\n\n/** HTTP status per error code (see core/errors.ts). Uncategorized errors stay\n * 400, matching the historical catch-all behavior. */\nconst HTTP_STATUS: Record<MhErrorCode, number> = {\n invalid_input: 400,\n not_found: 404,\n ambiguous: 400,\n stale: 409,\n conflict: 409,\n auth: 401,\n network: 502,\n port_in_use: 500,\n};\n\n/** Turn a thrown handler error into a JSON response: `{error, code?}` with a\n * semantic status, so HTTP clients can dispatch on `code` like CLI users\n * dispatch on exit codes. */\nexport function errorResponse(e: unknown): Response {\n const message = e instanceof Error ? e.message : String(e);\n const code = errorCode(e);\n return Response.json(code ? { error: message, code } : { error: message }, {\n status: code ? HTTP_STATUS[code] : 400,\n });\n}\n\n/**\n * One entry per endpoint. `request`/`response` are Zod schemas that double as\n * the OpenAPI source (see ./openapi.ts). Add an endpoint here and it shows up\n * in /docs automatically — no generate step, no separate spec file.\n */\nexport interface Route {\n method: \"GET\" | \"POST\" | \"PATCH\" | \"DELETE\";\n path: string;\n summary: string;\n request?: ZodType;\n response: ZodType;\n handler: (req: Request, ctx: RouteCtx) => Promise<Response> | Response;\n}\n\nconst syncRoutes: Route[] = [\n {\n method: \"POST\",\n path: SYNC_PATH,\n summary: \"CRDT replication: push local changes and pull server changes\",\n request: SyncRequestSchema,\n response: SyncResponseSchema,\n async handler(req, { db, node }) {\n const body = (await req.json()) as SyncRequest;\n ingest(db, body.changes ?? []);\n const batch = changesAfterSeq(db, body.since ?? 0);\n return Response.json({ node_id: node, changes: batch.changes, cursor: batch.cursor });\n },\n },\n {\n method: \"GET\",\n path: HEALTH_PATH,\n summary: \"Health check\",\n response: HealthResponseSchema,\n handler(_req, { node }) {\n return Response.json({ ok: true, node });\n },\n },\n];\n\n// CRDT sync protocol routes + read-only site endpoints (sites are authored via\n// the `mh site` CLI) + peer pairing/management endpoints. The WebUI's data API\n// is not part of core: it is injected via startServer's `ui` option.\nexport const routes: Route[] = [...syncRoutes, ...sitesRoutes, ...peersRoutes];\n",
|
|
102
|
+
"// Server-level configuration, persisted in the `meta` table (same pattern as\n// getNodeId / context.ts). These are local-machine settings — they never enter\n// the CRDT oplog and never sync to peers. `mh --server` reads them as defaults\n// (CLI flags still win); `mh config` and the WebUI settings page edit them.\n\nimport type { DbDriver } from \"./driver.ts\";\nimport { parseDuration } from \"./sync/token.ts\";\n\nconst K_HOST = \"cfg_host\";\nconst K_PORT = \"cfg_port\";\nconst K_SYNC_INTERVAL = \"cfg_sync_interval\";\nconst K_AUTO_SYNC = \"cfg_auto_sync\";\nconst K_BLOB_QUOTA = \"cfg_blob_quota\";\n\nexport interface ServerConfig {\n host: string;\n port: number;\n /** Auto-sync poll interval in ms; <= 0 disables the timer. */\n syncIntervalMs: number;\n autoSync: boolean;\n /** Local blob cache quota in bytes. When the cache exceeds it, the sync tick\n * auto-evicts clearable, unpinned blobs (LRU). <= 0 disables eviction. */\n blobCacheQuotaBytes: number;\n}\n\nexport const DEFAULT_CONFIG: ServerConfig = {\n host: \"127.0.0.1\",\n port: 7777,\n syncIntervalMs: parseDuration(process.env.METAHUB_SYNC_INTERVAL, 30_000),\n autoSync: true,\n blobCacheQuotaBytes: Number(process.env.METAHUB_BLOB_QUOTA) || 2 * 1024 * 1024 * 1024,\n};\n\nfunction getMeta(db: DbDriver, key: string): string | null {\n const row = db.query(\"SELECT value FROM meta WHERE key = ?\").get(key) as\n | { value: string }\n | null;\n return row ? row.value : null;\n}\n\nfunction setMeta(db: DbDriver, key: string, value: string): void {\n db.query(\n \"INSERT INTO meta (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value\",\n ).run(key, value);\n}\n\n/** Persisted server config, falling back to DEFAULT_CONFIG per field. */\nexport function getServerConfig(db: DbDriver): ServerConfig {\n const host = getMeta(db, K_HOST);\n const port = getMeta(db, K_PORT);\n const interval = getMeta(db, K_SYNC_INTERVAL);\n const auto = getMeta(db, K_AUTO_SYNC);\n const blobQuota = getMeta(db, K_BLOB_QUOTA);\n return {\n host: host ?? DEFAULT_CONFIG.host,\n port: port != null ? Number(port) : DEFAULT_CONFIG.port,\n syncIntervalMs: interval != null ? Number(interval) : DEFAULT_CONFIG.syncIntervalMs,\n autoSync: auto != null ? auto === \"1\" : DEFAULT_CONFIG.autoSync,\n blobCacheQuotaBytes:\n blobQuota != null ? Number(blobQuota) : DEFAULT_CONFIG.blobCacheQuotaBytes,\n };\n}\n\n/** Persist a partial config update. Only provided fields are written. */\nexport function setServerConfig(db: DbDriver, partial: Partial<ServerConfig>): ServerConfig {\n if (partial.host != null) setMeta(db, K_HOST, partial.host);\n if (partial.port != null) setMeta(db, K_PORT, String(partial.port));\n if (partial.syncIntervalMs != null)\n setMeta(db, K_SYNC_INTERVAL, String(partial.syncIntervalMs));\n if (partial.autoSync != null) setMeta(db, K_AUTO_SYNC, partial.autoSync ? \"1\" : \"0\");\n if (partial.blobCacheQuotaBytes != null)\n setMeta(db, K_BLOB_QUOTA, String(partial.blobCacheQuotaBytes));\n return getServerConfig(db);\n}\n",
|
|
107
103
|
"import { z } from \"zod\";\nimport { MhError } from \"../errors.ts\";\nimport { errorResponse, type Route, type RouteCtx } from \"./routes.ts\";\nimport {\n listSites,\n listFiles,\n resolveSite,\n createSite,\n updateSite,\n deleteSite,\n putFile,\n deleteFile,\n} from \"../sites.ts\";\n\n// Site endpoints for the WebUI / served pages. Reads (list sites/files) and\n// authoring (create, rename, delete, upload) both wrap the same core functions\n// the `mh site` CLI uses, so changes ride the CRDT oplog and replicate over\n// /sync. All routes are gated by the server's master-token middleware.\n\nconst SiteSchema = z.object({\n id: z.string(),\n name: z.string(),\n title: z.string().nullable(),\n created_hlc: z.string(),\n});\nconst SiteWithCountSchema = SiteSchema.extend({ file_count: z.number() });\nconst SiteFileSchema = z.object({\n id: z.string(),\n site_id: z.string(),\n path: z.string(),\n content_type: z.string(),\n encoding: z.string(),\n});\n// Request bodies — used both for the OpenAPI doc and to .parse() at runtime so a\n// malformed body is a clean 400 rather than an `as`-cast lie. Semantic rules\n// (slug/path shape) live in core (normalizeSiteName/normalizeSitePath).\nconst CreateSiteBody = z.object({ name: z.string(), title: z.string().optional() });\nconst UpdateSiteBody = z.object({ name: z.string().optional(), title: z.string().optional() });\n\nfunction need(req: Request, key: string): string {\n const v = new URL(req.url).searchParams.get(key);\n if (!v) throw new MhError(\"invalid_input\", `missing query param: ${key}`);\n return v;\n}\n\nfunction handle(fn: (req: Request, ctx: RouteCtx) => unknown): Route[\"handler\"] {\n return async (req, ctx) => {\n try {\n return Response.json((await fn(req, ctx)) ?? null);\n } catch (e) {\n return errorResponse(e);\n }\n };\n}\n\nexport const sitesRoutes: Route[] = [\n {\n method: \"GET\",\n path: \"/api/sites\",\n summary: \"List published sites (with file counts)\",\n response: z.array(SiteWithCountSchema),\n handler: handle((_req, { db }) =>\n listSites(db).map((s) => ({ ...s, file_count: listFiles(db, s.id).length })),\n ),\n },\n {\n method: \"GET\",\n path: \"/api/site/files\",\n summary: \"List a site's files (manifest). Query: ?site=<id|name>\",\n response: z.array(SiteFileSchema),\n handler: handle((req, { db }) => listFiles(db, resolveSite(db, need(req, \"site\")).id)),\n },\n {\n method: \"POST\",\n path: \"/api/sites\",\n summary: \"Create a site\",\n request: CreateSiteBody,\n response: SiteSchema,\n handler: handle(async (req, { db }) => {\n const body = CreateSiteBody.parse(await req.json());\n return createSite(db, body);\n }),\n },\n {\n method: \"PATCH\",\n path: \"/api/site\",\n summary: \"Rename a site or change its title. Query: ?id=<id>\",\n request: UpdateSiteBody,\n response: SiteSchema,\n handler: handle(async (req, { db }) => {\n const body = UpdateSiteBody.parse(await req.json());\n return updateSite(db, need(req, \"id\"), body);\n }),\n },\n {\n method: \"DELETE\",\n path: \"/api/site\",\n summary: \"Delete a site and its files. Query: ?id=<id>\",\n response: z.object({ ok: z.boolean() }),\n handler: handle((req, { db }) => ({ ok: deleteSite(db, need(req, \"id\")) })),\n },\n {\n method: \"POST\",\n path: \"/api/site/file\",\n summary: \"Upload/replace a file. Query: ?site=<id|name>&path=<path>; body is raw bytes\",\n response: SiteFileSchema,\n handler: handle(async (req, { db }) => {\n const site = resolveSite(db, need(req, \"site\"));\n // Fall back to path-based inference when the browser sends no/generic type.\n const ct = req.headers.get(\"content-type\");\n const file = await putFile(db, site.id, need(req, \"path\"), {\n data: await req.arrayBuffer(),\n contentType: ct && ct !== \"application/octet-stream\" ? ct : undefined,\n });\n const { content: _content, ...summary } = file;\n return summary;\n }),\n },\n {\n method: \"DELETE\",\n path: \"/api/site/file\",\n summary: \"Delete a file. Query: ?site=<id|name>&path=<path>\",\n response: z.object({ ok: z.boolean() }),\n handler: handle((req, { db }) => ({\n ok: deleteFile(db, resolveSite(db, need(req, \"site\")).id, need(req, \"path\")),\n })),\n },\n];\n",
|
|
108
|
-
"import { z } from \"zod\";\nimport { MhError } from \"../errors.ts\";\nimport { errorResponse, type Route, type RouteCtx } from \"./routes.ts\";\nimport {\n PairRequestSchema,\n PairResponseSchema,\n PAIR_PATH,\n type PairRequest,\n} from \"./protocol.ts\";\nimport {\n generatePairingCode,\n handlePairRequest,\n performPairing,\n listGrants,\n revokeGrant,\n} from \"./pairing.ts\";\nimport {\n listPeers,\n removePeer,\n setPeerEnabled,\n setPeerLabel,\n syncPeer,\n} from \"./peers.ts\";\n\n// Peer pairing + management API. Mirrors the `mh config peer` CLI; the WebUI\n// settings page calls these. POST /api/pair is the cross-device handshake\n// endpoint (exempt from the master-token gate in server.ts — it authenticates\n// via the one-time code inside handlePairRequest). Everything else is gated by\n// the master token like the rest of /api/*.\n\n// --- schemas (drive /docs; intentionally loose) -----------------------------\n\nconst PeerSchema = z.object({\n url: z.string(),\n pull_cursor: z.number(),\n push_cursor: z.number(),\n token: z.string().nullable(),\n label: z.string().nullable(),\n node_id: z.string().nullable(),\n enabled: z.number(),\n last_sync_at: z.number().nullable(),\n last_status: z.string().nullable(),\n last_error: z.string().nullable(),\n});\nconst PairingCodeSchema = z.object({ code: z.string(), exp: z.number() });\nconst AddPeerReq = z.object({\n url: z.string(),\n code: z.string(),\n self_url: z.string().optional(),\n});\nconst AddPeerRes = z.object({ node_id: z.string(), url: z.string() });\nconst UpdatePeerReq = z.object({\n enabled: z.boolean().optional(),\n label: z.string().optional(),\n});\nconst PeerSyncRes = z.object({\n url: z.string(),\n ok: z.boolean(),\n pushed: z.number().optional(),\n pulled: z.number().optional(),\n error: z.string().optional(),\n});\nconst GrantSchema = z.object({\n token: z.string(),\n peer_url: z.string().nullable(),\n node_id: z.string().nullable(),\n created_at: z.number().nullable(),\n});\nconst RevokeRes = z.object({ revoked: z.number() });\nconst OkSchema = z.object({ ok: z.boolean() });\n\n// --- helpers ----------------------------------------------------------------\n\nfunction need(req: Request, key: string): string {\n const v = new URL(req.url).searchParams.get(key);\n if (!v) throw new MhError(\"invalid_input\", `missing query param: ${key}`);\n return v;\n}\n\nfunction handle(\n fn: (req: Request, ctx: RouteCtx) => unknown | Promise<unknown>,\n): Route[\"handler\"] {\n return async (req, ctx) => {\n try {\n const out = await fn(req, ctx);\n if (out instanceof Response) return out;\n return Response.json(out ?? null);\n } catch (e) {\n return errorResponse(e);\n }\n };\n}\n\n// --- routes -----------------------------------------------------------------\n\nexport const peersRoutes: Route[] = [\n {\n method: \"POST\",\n path: PAIR_PATH,\n summary: \"Pairing handshake: redeem a one-time code and exchange credentials\",\n request: PairRequestSchema,\n response: PairResponseSchema,\n handler: handle(async (req, { db, node }) => {\n const body = (await req.json()) as PairRequest;\n return handlePairRequest(db, node, body);\n }),\n },\n {\n method: \"POST\",\n path: \"/api/pair/new\",\n summary: \"Mint a one-time pairing code for another device to redeem\",\n response: PairingCodeSchema,\n handler: handle((_req, { db }) => generatePairingCode(db)),\n },\n {\n method: \"POST\",\n path: \"/api/peers/pair\",\n summary: \"Pair this server with a remote one using its one-time code\",\n request: AddPeerReq,\n response: AddPeerRes,\n handler: handle(async (req, { db, node }) => {\n const body = (await req.json()) as z.infer<typeof AddPeerReq>;\n return performPairing(db, node, body.url, body.code, body.self_url);\n }),\n },\n {\n method: \"GET\",\n path: \"/api/peers\",\n summary: \"List configured sync peers with status\",\n response: z.array(PeerSchema),\n handler: handle((_req, { db }) => listPeers(db)),\n },\n {\n method: \"PATCH\",\n path: \"/api/peer\",\n summary: \"Update a peer (enable/disable or label). Query: ?url=<url>\",\n request: UpdatePeerReq,\n response: OkSchema,\n handler: handle(async (req, { db }) => {\n const url = need(req, \"url\");\n const body = (await req.json()) as z.infer<typeof UpdatePeerReq>;\n if (body.enabled != null) setPeerEnabled(db, url, body.enabled);\n if (body.label != null) setPeerLabel(db, url, body.label);\n return { ok: true };\n }),\n },\n {\n method: \"DELETE\",\n path: \"/api/peer\",\n summary: \"Remove a sync peer. Query: ?url=<url>\",\n response: OkSchema,\n handler: handle((req, { db }) => ({ ok: removePeer(db, need(req, \"url\")) })),\n },\n {\n method: \"POST\",\n path: \"/api/peer/sync\",\n summary: \"Manually sync once with a peer. Query: ?url=<url>\",\n response: PeerSyncRes,\n handler: handle((req, { db }) => syncPeer(db, need(req, \"url\"))),\n },\n {\n method: \"GET\",\n path: \"/api/grants\",\n summary: \"List credentials this server issued and accepts on /sync (inbound)\",\n response: z.array(GrantSchema),\n handler: handle((_req, { db }) => listGrants(db)),\n },\n {\n method: \"DELETE\",\n path: \"/api/grant\",\n summary: \"Revoke an issued credential by token or prefix. Query: ?token=<token>\",\n response: RevokeRes,\n handler: handle((req, { db }) => ({ revoked: revokeGrant(db, need(req, \"token\")) })),\n },\n];\n",
|
|
104
|
+
"// Outbound peer management: the devices this node syncs *to*. Each row carries\n// the durable credential the remote issued to us during pairing (see pairing.ts)\n// plus replication cursors and last-sync status. `syncAllPeers` is what the\n// server's auto-sync timer calls each tick.\n\nimport type { DbDriver } from \"../driver.ts\";\nimport { MhError } from \"../errors.ts\";\nimport { syncWithPeer, type SyncResult } from \"./client.ts\";\nimport {\n syncWithStorage,\n storageClientFor,\n provisionMasterKey,\n type S3Config,\n type StorageSyncOpts,\n} from \"./storage.ts\";\n\nconst PEER_COLS =\n \"url, pull_cursor, push_cursor, token, label, node_id, enabled, last_sync_at, last_success_at, last_status, last_error, kind, config\";\nconst syncInFlight = new WeakMap<object, Map<string, Promise<PeerSyncOutcome>>>();\n\nasync function waitForPeerIdle(db: DbDriver, url: string): Promise<void> {\n const existing = syncInFlight.get(db as object)?.get(url);\n if (existing) await existing.catch(() => undefined);\n}\n\nexport interface PeerRow {\n url: string;\n pull_cursor: number;\n push_cursor: number;\n token: string | null;\n label: string | null;\n node_id: string | null;\n enabled: number;\n /** Last sync attempt, successful or failed. */\n last_sync_at: number | null;\n /** Last successful sync. Freshness gates must use this, not last_sync_at. */\n last_success_at: number | null;\n last_status: string | null;\n last_error: string | null;\n /** Transport: 'http' (POST /sync) or 's3' (bucket store-and-forward). */\n kind: string;\n /** JSON S3Config for 's3' peers; null for 'http'. */\n config: string | null;\n}\n\nexport function listPeers(db: DbDriver): PeerRow[] {\n return db.query(`SELECT ${PEER_COLS} FROM peers ORDER BY url`).all() as PeerRow[];\n}\n\nexport function getPeer(db: DbDriver, url: string): PeerRow | null {\n return (\n (db.query(`SELECT ${PEER_COLS} FROM peers WHERE url = ?`).get(url) as PeerRow | null) ?? null\n );\n}\n\nexport interface AddPeerInput {\n url: string;\n token?: string | null;\n label?: string | null;\n node_id?: string | null;\n}\n\n/** Upsert a peer, preserving replication cursors on conflict. */\nexport function addPeer(db: DbDriver, input: AddPeerInput): void {\n db.query(\n `INSERT INTO peers (url, token, label, node_id, enabled, pull_cursor, push_cursor)\n VALUES (?, ?, ?, ?, 1, 0, 0)\n ON CONFLICT(url) DO UPDATE SET\n token = coalesce(excluded.token, peers.token),\n label = coalesce(excluded.label, peers.label),\n node_id = coalesce(excluded.node_id, peers.node_id),\n enabled = 1`,\n ).run(input.url, input.token ?? null, input.label ?? null, input.node_id ?? null);\n}\n\nexport interface AddStoragePeerInput {\n /** Synthetic peer key, by convention s3://<bucket>/<prefix>. */\n url: string;\n config: S3Config;\n label?: string | null;\n}\n\n/** Upsert an 's3' (bucket store-and-forward) peer, preserving cursors on conflict. */\nexport function addStoragePeer(db: DbDriver, input: AddStoragePeerInput): void {\n db.query(\n `INSERT INTO peers (url, kind, config, label, enabled, pull_cursor, push_cursor)\n VALUES (?, 's3', ?, ?, 1, 0, 0)\n ON CONFLICT(url) DO UPDATE SET\n kind = 's3',\n config = excluded.config,\n label = coalesce(excluded.label, peers.label),\n enabled = 1`,\n ).run(input.url, JSON.stringify(input.config), input.label ?? null);\n}\n\nfunction restorePeerRow(db: DbDriver, row: PeerRow): void {\n db.query(\n `UPDATE peers SET\n pull_cursor = ?,\n push_cursor = ?,\n token = ?,\n label = ?,\n node_id = ?,\n enabled = ?,\n last_sync_at = ?,\n last_success_at = ?,\n last_status = ?,\n last_error = ?,\n kind = ?,\n config = ?\n WHERE url = ?`,\n ).run(\n row.pull_cursor,\n row.push_cursor,\n row.token,\n row.label,\n row.node_id,\n row.enabled,\n row.last_sync_at,\n row.last_success_at,\n row.last_status,\n row.last_error,\n row.kind,\n row.config,\n row.url,\n );\n}\n\n/** Synthetic peer key for a storage peer: one per bucket+prefix. */\nexport const storageUrl = (bucket: string, prefix: string) => `s3://${bucket}/${prefix}`;\n\nexport interface StoragePeerSpec {\n endpoint: string;\n region?: string;\n bucket: string;\n prefix?: string;\n accessKeyId: string;\n secretAccessKey: string;\n /** Virtual-hosted (COS) vs path-style addressing; undefined → auto-detect.\n * Carried by enroll codes so COS buckets join correctly. */\n virtualHostedStyle?: boolean;\n /** Default true; pass false for `--no-encrypt` plaintext buckets. */\n encrypt?: boolean;\n /** Required when encrypt — provisions/adopts the bucket's wrapped master key. */\n passphrase?: string;\n /** Mark this node the bucket's publisher (writes whole-hub snapshots). */\n publish?: boolean;\n priority?: number;\n label?: string | null;\n}\n\n/**\n * Resolve + persist an S3 storage peer and run one sync so a bad endpoint /\n * credentials / missing CORS fail fast at the call site. Shared by the CLI\n * (`mh config peer add --s3`) and the WebUI server endpoint (`POST /api/peer/s3`)\n * so both go through the exact same provisioning + first-sync path. Returns the\n * resolved config (incl. the wrapped master key) and the first sync outcome.\n */\nexport async function addAndSyncStoragePeer(\n db: DbDriver,\n spec: StoragePeerSpec,\n): Promise<{ url: string; config: S3Config; sync: PeerSyncOutcome }> {\n const prefix = spec.prefix?.trim() || \"metahub\";\n const encrypt = spec.encrypt !== false;\n const config: S3Config = {\n endpoint: spec.endpoint.trim(),\n region: spec.region?.trim() || \"auto\",\n bucket: spec.bucket.trim(),\n prefix,\n accessKeyId: spec.accessKeyId.trim(),\n secretAccessKey: spec.secretAccessKey.trim(),\n encrypt,\n virtualHostedStyle: spec.virtualHostedStyle,\n publish: spec.publish,\n priority: spec.priority,\n };\n if (encrypt) {\n if (!spec.passphrase) throw new MhError(\"invalid_input\", \"passphrase required for an encrypted bucket\");\n config.masterKey =\n (await provisionMasterKey(storageClientFor(config), config, spec.passphrase)) ?? undefined;\n }\n const url = storageUrl(config.bucket, prefix);\n await waitForPeerIdle(db, url);\n const previous = getPeer(db, url);\n addStoragePeer(db, { url, config, label: spec.label ?? config.bucket });\n const sync = await syncPeer(db, url);\n if (!sync.ok) {\n if (previous) restorePeerRow(db, previous);\n else removePeer(db, url);\n throw new MhError(\"network\", `storage peer first sync failed: ${sync.error ?? \"unknown error\"}`);\n }\n return { url, config, sync };\n}\n\n/**\n * Remove a peer AND revoke the credential we issued to it during pairing, so\n * disconnecting is mutual: we stop syncing out to it (peers row) and it can no\n * longer sync in to us (peer_grants row, keyed by peer_url). Grants minted for a\n * peer that never sent a self_url have a null peer_url and can't be revoked here.\n */\nexport function removePeer(db: DbDriver, url: string): boolean {\n const tx = db.transaction(() => {\n const changed = db.query(\"DELETE FROM peers WHERE url = ?\").run(url).changes > 0;\n db.query(\"DELETE FROM peer_grants WHERE peer_url = ?\").run(url);\n // Drop any storage-sync per-node cursors for this peer (no-op for http peers).\n db.query(\"DELETE FROM storage_cursors WHERE peer_url = ?\").run(url);\n return changed;\n });\n return tx();\n}\n\nexport function setPeerEnabled(db: DbDriver, url: string, enabled: boolean): boolean {\n return (\n db.query(\"UPDATE peers SET enabled = ? WHERE url = ?\").run(enabled ? 1 : 0, url).changes > 0\n );\n}\n\nexport function setPeerLabel(db: DbDriver, url: string, label: string): boolean {\n return db.query(\"UPDATE peers SET label = ? WHERE url = ?\").run(label, url).changes > 0;\n}\n\nexport function updatePeerStatus(\n db: DbDriver,\n url: string,\n status: string,\n error?: string | null,\n): void {\n const now = Date.now();\n if (status === \"ok\") {\n db.query(\n \"UPDATE peers SET last_sync_at = ?, last_success_at = ?, last_status = ?, last_error = ? WHERE url = ?\",\n ).run(now, now, status, error ?? null, url);\n return;\n }\n db.query(\n \"UPDATE peers SET last_sync_at = ?, last_status = ?, last_error = ? WHERE url = ?\",\n ).run(now, status, error ?? null, url);\n}\n\nexport interface PeerSyncOutcome {\n url: string;\n ok: boolean;\n pushed?: number;\n pulled?: number;\n pendingPush?: boolean;\n error?: string;\n}\n\n/** Sync once with a single peer, recording status. Errors are captured, not\n * thrown. Dispatches on transport: 's3' peers go through the bucket\n * store-and-forward client, everything else POSTs /sync. */\nexport async function syncPeer(\n db: DbDriver,\n url: string,\n opts?: { storage?: StorageSyncOpts },\n): Promise<PeerSyncOutcome> {\n let byUrl = syncInFlight.get(db as object);\n if (!byUrl) {\n byUrl = new Map();\n syncInFlight.set(db as object, byUrl);\n }\n const existing = byUrl.get(url);\n if (existing) return existing;\n const run = syncPeerOnce(db, url, opts).finally(() => {\n if (byUrl.get(url) === run) byUrl.delete(url);\n });\n byUrl.set(url, run);\n return run;\n}\n\nasync function syncPeerOnce(\n db: DbDriver,\n url: string,\n opts?: { storage?: StorageSyncOpts },\n): Promise<PeerSyncOutcome> {\n try {\n const peer = getPeer(db, url);\n let result: SyncResult;\n if (peer?.kind === \"s3\") {\n if (!peer.config) throw new Error(`storage peer ${url} has no config`);\n const config = JSON.parse(peer.config) as S3Config;\n // The persisted per-node role (publish/priority) drives snapshot publishing;\n // the caller's opts (forcePush, batching) layer on top.\n const storageOpts: StorageSyncOpts = {\n ...opts?.storage,\n publish: opts?.storage?.publish ?? config.publish,\n priority: opts?.storage?.priority ?? config.priority,\n };\n result = await syncWithStorage(db, url, storageClientFor(config), config, storageOpts);\n } else {\n result = await syncWithPeer(db, url);\n }\n updatePeerStatus(db, url, \"ok\", null);\n return { url, ok: true, pushed: result.pushed, pulled: result.pulled, pendingPush: result.pendingPush };\n } catch (e) {\n const error = (e as Error).message;\n updatePeerStatus(db, url, \"error\", error);\n return { url, ok: false, error };\n }\n}\n\n/** Sync once with every enabled peer. Used by the auto-sync timer. */\nexport async function syncAllPeers(db: DbDriver): Promise<PeerSyncOutcome[]> {\n const peers = listPeers(db).filter((p) => p.enabled);\n const out: PeerSyncOutcome[] = [];\n for (const p of peers) out.push(await syncPeer(db, p.url));\n return out;\n}\n\n/** Reads within this of the last successful sync skip the network entirely. */\nconst DEFAULT_FRESH_MAX_AGE_MS = 3 * 60_000;\n/** Bound on the blocking pre-read sync so a read never hangs on a slow bucket. */\nconst FRESH_SYNC_TIMEOUT_MS = 8_000;\n\n/**\n * Freshness gate for *non-reactive* consumers — CLI reads and the PWA's served\n * site pages (②b). Their local DB is only as fresh as the last sync, and unlike\n * the reactive WebUI they have no background poll and no `synced` revalidate. So\n * if the newest successful peer sync is older than `maxAgeMs`, block on one\n * bounded sync round before the caller reads; otherwise return immediately\n * (read local).\n *\n * No enabled peers → no-op. A running daemon keeps `last_success_at` recent, so\n * this is a near-instant no-op there and only does real work on a daemon-less node\n * that hasn't synced successfully in a while. Failed attempts update\n * `last_sync_at`, but never make local data fresh. Env overrides: MH_OFFLINE=1\n * skips; MH_FRESH=1 forces; MH_SYNC_MAX_AGE=<ms> tunes the threshold.\n */\nexport async function ensureFresh(\n db: DbDriver,\n opts: { maxAgeMs?: number; force?: boolean; offline?: boolean } = {},\n): Promise<void> {\n if (opts.offline ?? process.env.MH_OFFLINE === \"1\") return;\n const peers = listPeers(db).filter((p) => p.enabled);\n if (peers.length === 0) return;\n if (!(opts.force ?? process.env.MH_FRESH === \"1\")) {\n const maxAge = opts.maxAgeMs ?? (Number(process.env.MH_SYNC_MAX_AGE) || DEFAULT_FRESH_MAX_AGE_MS);\n const last = Math.max(0, ...peers.map((p) => p.last_success_at ?? 0));\n if (last && Date.now() - last < maxAge) return; // fresh enough → read local\n }\n // Stale (or forced): one bounded sync; on timeout/error fall back to local data.\n await Promise.race([\n syncAllPeers(db).then(() => undefined),\n new Promise<undefined>((r) => setTimeout(r, FRESH_SYNC_TIMEOUT_MS)),\n ]).catch(() => undefined);\n}\n",
|
|
109
105
|
"// Device pairing: bootstrap a mutual trust relationship between two nodes using\n// a short-lived one-time code, then exchange durable per-peer credentials\n// (\"certificates\"). The master server token is never shared.\n//\n// A: generatePairingCode() -> CODE (printed in A's terminal / UI)\n// B: performPairing(A-url, CODE) -> calls POST {A-url}/api/pair\n// A: handlePairRequest(...) -> redeems CODE, mints+returns a grant\n//\n// After the handshake each side holds a grant it ISSUED (stored in peer_grants,\n// accepted on /sync) and a grant it RECEIVED (stored in peers.token, presented\n// when syncing out). See acceptsSyncToken in ./auth.ts and syncWithPeer.\n\nimport type { Database } from \"bun:sqlite\";\nimport { randomSuffix } from \"../ids.ts\";\nimport { parseDuration } from \"./token.ts\";\nimport { addPeer } from \"./peers.ts\";\nimport { PAIR_PATH, type PairRequest, type PairResponse } from \"./protocol.ts\";\nimport { MhError } from \"../errors.ts\";\n\n/** Default one-time pairing-code lifetime (override with METAHUB_PAIR_TTL). */\nexport const DEFAULT_PAIR_TTL_MS = parseDuration(process.env.METAHUB_PAIR_TTL, 10 * 60_000);\n\nexport interface PairingCode {\n code: string;\n exp: number;\n}\n\n/** Mint a one-time pairing code, stored until redeemed or expired. */\nexport function generatePairingCode(db: Database, ttlMs: number = DEFAULT_PAIR_TTL_MS): PairingCode {\n const now = Date.now();\n // Opportunistic housekeeping: drop spent/expired codes so the table can't grow.\n db.query(\"DELETE FROM pairing_codes WHERE used = 1 OR exp < ?\").run(now);\n const code = randomSuffix(12); // ~62 bits; brute-forcing within the TTL is infeasible\n const exp = now + ttlMs;\n db.query(\n \"INSERT INTO pairing_codes (code, exp, used, created_at) VALUES (?, ?, 0, ?)\",\n ).run(code, exp, now);\n return { code, exp };\n}\n\n/**\n * Validate and consume a pairing code. The check-and-consume is a single atomic\n * UPDATE (guarded on used=0 AND not-expired) so two concurrent redemptions of\n * the same code can't both succeed. Returns false if unknown/used/expired.\n */\nexport function redeemPairingCode(db: Database, code: string): boolean {\n return (\n db\n .query(\"UPDATE pairing_codes SET used = 1 WHERE code = ? AND used = 0 AND exp >= ?\")\n .run(code, Date.now()).changes > 0\n );\n}\n\n/** Mint a durable credential we issue to a peer and will accept on /sync. */\nexport function mintGrant(db: Database, peerUrl: string | null, nodeId: string | null): string {\n const token = randomSuffix(32);\n db.query(\n \"INSERT INTO peer_grants (token, peer_url, node_id, created_at) VALUES (?, ?, ?, ?)\",\n ).run(token, peerUrl, nodeId, Date.now());\n return token;\n}\n\n/** Whether a presented token matches a credential we issued during pairing. */\nexport function isAcceptedGrant(db: Database, token: string): boolean {\n return db.query(\"SELECT 1 FROM peer_grants WHERE token = ?\").get(token) != null;\n}\n\nexport interface GrantRow {\n token: string;\n peer_url: string | null;\n node_id: string | null;\n created_at: number | null;\n}\n\n/** All credentials we have issued and still accept on /sync (inbound access). */\nexport function listGrants(db: Database): GrantRow[] {\n return db\n .query(\"SELECT token, peer_url, node_id, created_at FROM peer_grants ORDER BY created_at DESC\")\n .all() as GrantRow[];\n}\n\n/**\n * Revoke issued credentials by exact token or a unique prefix (handy for the\n * grants minted by one-directional pairing, which removePeer can't reach since\n * they have a null peer_url). Returns the number of grants revoked.\n */\nexport function revokeGrant(db: Database, tokenOrPrefix: string): number {\n return db\n .query(\"DELETE FROM peer_grants WHERE token = ? OR token LIKE ? || '%'\")\n .run(tokenOrPrefix, tokenOrPrefix).changes;\n}\n\n/**\n * Inbound side (device A): redeem the caller's one-time code, mint a grant for\n * the caller, register the caller back as a peer if it gave a reachable URL.\n */\nexport function handlePairRequest(db: Database, node: string, body: PairRequest): PairResponse {\n if (!redeemPairingCode(db, body.code)) {\n throw new MhError(\"auth\", \"invalid or expired pairing code\");\n }\n // The caller's grant lets us sync OUT to it; store it as our peer token.\n if (body.self_url) {\n addPeer(db, { url: body.self_url, token: body.grant, node_id: body.node_id });\n }\n // Mint a grant the caller will present when syncing IN to us.\n const grant = mintGrant(db, body.self_url ?? null, body.node_id);\n return { node_id: node, grant };\n}\n\nexport interface PairOutcome {\n /** The paired peer's node id. */\n node_id: string;\n url: string;\n}\n\n/**\n * Outbound side (device B): mint a grant for the remote, post the handshake to\n * its /api/pair, then register it as a peer with the grant it returned.\n */\nexport async function performPairing(\n db: Database,\n node: string,\n remoteUrl: string,\n code: string,\n selfUrl?: string,\n): Promise<PairOutcome> {\n // Our grant lets the remote sync OUT to us; we store it so we accept it.\n const ourGrant = mintGrant(db, remoteUrl, null);\n const reqBody: PairRequest = { code, node_id: node, grant: ourGrant, self_url: selfUrl };\n\n const res = await fetch(new URL(PAIR_PATH, remoteUrl), {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(reqBody),\n });\n if (!res.ok)\n throw new MhError(\n res.status === 401 || res.status === 403 ? \"auth\" : \"network\",\n `pairing failed: ${res.status} ${await res.text()}`,\n );\n\n const data = (await res.json()) as PairResponse;\n // The remote's grant lets us sync OUT to it; store it as our peer token.\n addPeer(db, { url: remoteUrl, token: data.grant, node_id: data.node_id });\n return { node_id: data.node_id, url: remoteUrl };\n}\n",
|
|
110
|
-
"// Outbound peer management: the devices this node syncs *to*. Each row carries\n// the durable credential the remote issued to us during pairing (see pairing.ts)\n// plus replication cursors and last-sync status. `syncAllPeers` is what the\n// server's auto-sync timer calls each tick.\n\nimport type { Database } from \"bun:sqlite\";\nimport { syncWithPeer, type SyncResult } from \"./client.ts\";\n\nexport interface PeerRow {\n url: string;\n pull_cursor: number;\n push_cursor: number;\n token: string | null;\n label: string | null;\n node_id: string | null;\n enabled: number;\n last_sync_at: number | null;\n last_status: string | null;\n last_error: string | null;\n}\n\nexport function listPeers(db: Database): PeerRow[] {\n return db\n .query(\n \"SELECT url, pull_cursor, push_cursor, token, label, node_id, enabled, last_sync_at, last_status, last_error FROM peers ORDER BY url\",\n )\n .all() as PeerRow[];\n}\n\nexport function getPeer(db: Database, url: string): PeerRow | null {\n return (db\n .query(\n \"SELECT url, pull_cursor, push_cursor, token, label, node_id, enabled, last_sync_at, last_status, last_error FROM peers WHERE url = ?\",\n )\n .get(url) as PeerRow | null) ?? null;\n}\n\nexport interface AddPeerInput {\n url: string;\n token?: string | null;\n label?: string | null;\n node_id?: string | null;\n}\n\n/** Upsert a peer, preserving replication cursors on conflict. */\nexport function addPeer(db: Database, input: AddPeerInput): void {\n db.query(\n `INSERT INTO peers (url, token, label, node_id, enabled, pull_cursor, push_cursor)\n VALUES (?, ?, ?, ?, 1, 0, 0)\n ON CONFLICT(url) DO UPDATE SET\n token = coalesce(excluded.token, peers.token),\n label = coalesce(excluded.label, peers.label),\n node_id = coalesce(excluded.node_id, peers.node_id),\n enabled = 1`,\n ).run(input.url, input.token ?? null, input.label ?? null, input.node_id ?? null);\n}\n\n/**\n * Remove a peer AND revoke the credential we issued to it during pairing, so\n * disconnecting is mutual: we stop syncing out to it (peers row) and it can no\n * longer sync in to us (peer_grants row, keyed by peer_url). Grants minted for a\n * peer that never sent a self_url have a null peer_url and can't be revoked here.\n */\nexport function removePeer(db: Database, url: string): boolean {\n const tx = db.transaction(() => {\n const changed = db.query(\"DELETE FROM peers WHERE url = ?\").run(url).changes > 0;\n db.query(\"DELETE FROM peer_grants WHERE peer_url = ?\").run(url);\n return changed;\n });\n return tx();\n}\n\nexport function setPeerEnabled(db: Database, url: string, enabled: boolean): boolean {\n return (\n db.query(\"UPDATE peers SET enabled = ? WHERE url = ?\").run(enabled ? 1 : 0, url).changes > 0\n );\n}\n\nexport function setPeerLabel(db: Database, url: string, label: string): boolean {\n return db.query(\"UPDATE peers SET label = ? WHERE url = ?\").run(label, url).changes > 0;\n}\n\nexport function updatePeerStatus(\n db: Database,\n url: string,\n status: string,\n error?: string | null,\n): void {\n db.query(\n \"UPDATE peers SET last_sync_at = ?, last_status = ?, last_error = ? WHERE url = ?\",\n ).run(Date.now(), status, error ?? null, url);\n}\n\nexport interface PeerSyncOutcome {\n url: string;\n ok: boolean;\n pushed?: number;\n pulled?: number;\n error?: string;\n}\n\n/** Sync once with a single peer, recording status. Errors are captured, not thrown. */\nexport async function syncPeer(db: Database, url: string): Promise<PeerSyncOutcome> {\n try {\n const result: SyncResult = await syncWithPeer(db, url);\n updatePeerStatus(db, url, \"ok\", null);\n return { url, ok: true, pushed: result.pushed, pulled: result.pulled };\n } catch (e) {\n const error = (e as Error).message;\n updatePeerStatus(db, url, \"error\", error);\n return { url, ok: false, error };\n }\n}\n\n/** Sync once with every enabled peer. Used by the auto-sync timer. */\nexport async function syncAllPeers(db: Database): Promise<PeerSyncOutcome[]> {\n const peers = listPeers(db).filter((p) => p.enabled);\n const out: PeerSyncOutcome[] = [];\n for (const p of peers) out.push(await syncPeer(db, p.url));\n return out;\n}\n",
|
|
106
|
+
"import { z } from \"zod\";\nimport { MhError } from \"../errors.ts\";\nimport { errorResponse, type Route, type RouteCtx } from \"./routes.ts\";\nimport {\n PairRequestSchema,\n PairResponseSchema,\n PAIR_PATH,\n type PairRequest,\n} from \"./protocol.ts\";\nimport {\n generatePairingCode,\n handlePairRequest,\n performPairing,\n listGrants,\n revokeGrant,\n} from \"./pairing.ts\";\nimport {\n listPeers,\n removePeer,\n setPeerEnabled,\n setPeerLabel,\n syncPeer,\n addAndSyncStoragePeer,\n} from \"./peers.ts\";\nimport { putBucketCors } from \"./storage-s3-bun.ts\";\nimport type { S3Config } from \"./storage.ts\";\n\n// Peer pairing + management API. Mirrors the `mh config peer` CLI; the WebUI\n// settings page calls these. POST /api/pair is the cross-device handshake\n// endpoint (exempt from the master-token gate in server.ts — it authenticates\n// via the one-time code inside handlePairRequest). Everything else is gated by\n// the master token like the rest of /api/*.\n\n// --- schemas (drive /docs; intentionally loose) -----------------------------\n\nconst PeerSchema = z.object({\n url: z.string(),\n pull_cursor: z.number(),\n push_cursor: z.number(),\n token: z.string().nullable(),\n label: z.string().nullable(),\n node_id: z.string().nullable(),\n enabled: z.number(),\n last_sync_at: z.number().nullable(),\n last_success_at: z.number().nullable(),\n last_status: z.string().nullable(),\n last_error: z.string().nullable(),\n});\nconst PairingCodeSchema = z.object({ code: z.string(), exp: z.number() });\nconst AddPeerReq = z.object({\n url: z.string(),\n code: z.string(),\n self_url: z.string().optional(),\n});\nconst AddPeerRes = z.object({ node_id: z.string(), url: z.string() });\nconst UpdatePeerReq = z.object({\n enabled: z.boolean().optional(),\n label: z.string().optional(),\n});\nconst PeerSyncRes = z.object({\n url: z.string(),\n ok: z.boolean(),\n pushed: z.number().optional(),\n pulled: z.number().optional(),\n error: z.string().optional(),\n});\nconst AddS3PeerReq = z.object({\n endpoint: z.string(),\n bucket: z.string(),\n accessKeyId: z.string(),\n secretAccessKey: z.string(),\n region: z.string().optional(),\n prefix: z.string().optional(),\n encrypt: z.boolean().optional(),\n passphrase: z.string().optional(),\n /** Browser origin(s) to open bucket CORS for, so a replica behind this server\n * can hit the bucket directly (away-from-server sync). Usually [location.origin]. */\n corsOrigins: z.array(z.string()).optional(),\n});\n/** S3 peer view for the WebUI — no secrets (creds/master key stay server-side). */\nconst S3PeerSchema = z.object({\n url: z.string(),\n label: z.string().nullable(),\n enabled: z.number(),\n status: z.string().nullable(),\n error: z.string().nullable(),\n lastSyncAt: z.number().nullable(),\n lastAttemptAt: z.number().nullable(),\n publish: z.boolean(),\n endpoint: z.string().nullable(),\n bucket: z.string().nullable(),\n // Non-secret config bits so a browser replica can re-activate this server\n // bucket for its OWN away-sync by re-entering only the secret (the secret and\n // the encryption passphrase never leave the server). accessKeyId is the\n // non-secret half (travels in every request header), so it's safe to surface.\n region: z.string().nullable(),\n prefix: z.string().nullable(),\n accessKeyId: z.string().nullable(),\n encrypt: z.boolean(),\n virtualHostedStyle: z.boolean().nullable(),\n});\nconst GrantSchema = z.object({\n token: z.string(),\n peer_url: z.string().nullable(),\n node_id: z.string().nullable(),\n created_at: z.number().nullable(),\n});\nconst RevokeRes = z.object({ revoked: z.number() });\nconst OkSchema = z.object({ ok: z.boolean() });\n\n// --- helpers ----------------------------------------------------------------\n\nfunction need(req: Request, key: string): string {\n const v = new URL(req.url).searchParams.get(key);\n if (!v) throw new MhError(\"invalid_input\", `missing query param: ${key}`);\n return v;\n}\n\n/** Sanitized views of this server's 's3' peers for the WebUI: status + the\n * non-secret config a replica needs to re-attach the same bucket (endpoint,\n * bucket, region, prefix, accessKeyId, encrypt flag, addressing style). The\n * secretAccessKey, the encryption passphrase and the master key never leave the\n * server — the browser re-enters the secret to activate the bucket on itself.\n * endpoint is the full URL (the UI extracts the host for display). */\nfunction s3PeerViews(db: RouteCtx[\"db\"]): z.infer<typeof S3PeerSchema>[] {\n return listPeers(db)\n .filter((p) => p.kind === \"s3\" && p.config)\n .map((p) => {\n const c = JSON.parse(p.config!) as S3Config;\n return {\n url: p.url,\n label: p.label,\n enabled: p.enabled,\n status: p.last_status,\n error: p.last_error,\n lastSyncAt: p.last_success_at,\n lastAttemptAt: p.last_sync_at,\n publish: c.publish === true,\n endpoint: c.endpoint || null,\n bucket: c.bucket ?? null,\n region: c.region ?? null,\n prefix: c.prefix ?? null,\n accessKeyId: c.accessKeyId ?? null,\n encrypt: c.encrypt !== false,\n virtualHostedStyle: c.virtualHostedStyle ?? null,\n };\n });\n}\n\n/** Full stored config (incl. secretAccessKey) for one 's3' peer. Unlike\n * s3PeerViews this does NOT redact — it's served only on the master-token-gated\n * /api/* surface to the local desktop owner so it can build a phone-enroll QR\n * (which carries the bucket creds) for a bucket the sidecar holds. */\nfunction s3PeerConfig(db: RouteCtx[\"db\"], url: string): S3Config {\n const p = listPeers(db).find((x) => x.url === url && x.kind === \"s3\" && x.config);\n if (!p) throw new MhError(\"not_found\", `s3 storage peer ${url} not found`);\n return JSON.parse(p.config!) as S3Config;\n}\n\nfunction handle(\n fn: (req: Request, ctx: RouteCtx) => unknown | Promise<unknown>,\n): Route[\"handler\"] {\n return async (req, ctx) => {\n try {\n const out = await fn(req, ctx);\n if (out instanceof Response) return out;\n return Response.json(out ?? null);\n } catch (e) {\n return errorResponse(e);\n }\n };\n}\n\n// --- routes -----------------------------------------------------------------\n\nexport const peersRoutes: Route[] = [\n {\n method: \"POST\",\n path: PAIR_PATH,\n summary: \"Pairing handshake: redeem a one-time code and exchange credentials\",\n request: PairRequestSchema,\n response: PairResponseSchema,\n handler: handle(async (req, { db, node }) => {\n const body = (await req.json()) as PairRequest;\n return handlePairRequest(db, node, body);\n }),\n },\n {\n method: \"POST\",\n path: \"/api/pair/new\",\n summary: \"Mint a one-time pairing code for another device to redeem\",\n response: PairingCodeSchema,\n handler: handle((_req, { db }) => generatePairingCode(db)),\n },\n {\n method: \"POST\",\n path: \"/api/peers/pair\",\n summary: \"Pair this server with a remote one using its one-time code\",\n request: AddPeerReq,\n response: AddPeerRes,\n handler: handle(async (req, { db, node }) => {\n const body = (await req.json()) as z.infer<typeof AddPeerReq>;\n return performPairing(db, node, body.url, body.code, body.self_url);\n }),\n },\n {\n method: \"GET\",\n path: \"/api/peers\",\n summary: \"List configured sync peers with status\",\n response: z.array(PeerSchema),\n handler: handle((_req, { db }) => listPeers(db)),\n },\n {\n method: \"PATCH\",\n path: \"/api/peer\",\n summary: \"Update a peer (enable/disable or label). Query: ?url=<url>\",\n request: UpdatePeerReq,\n response: OkSchema,\n handler: handle(async (req, { db }) => {\n const url = need(req, \"url\");\n const body = (await req.json()) as z.infer<typeof UpdatePeerReq>;\n if (body.enabled != null) setPeerEnabled(db, url, body.enabled);\n if (body.label != null) setPeerLabel(db, url, body.label);\n return { ok: true };\n }),\n },\n {\n method: \"DELETE\",\n path: \"/api/peer\",\n summary: \"Remove a sync peer. Query: ?url=<url>\",\n response: OkSchema,\n handler: handle((req, { db }) => ({ ok: removePeer(db, need(req, \"url\")) })),\n },\n {\n method: \"POST\",\n path: \"/api/peer/sync\",\n summary: \"Manually sync once with a peer. Query: ?url=<url>\",\n response: PeerSyncRes,\n handler: handle((req, { db }) => syncPeer(db, need(req, \"url\"))),\n },\n {\n // Attach an S3 bucket to THIS server (the data home), making the server the\n // bucket's publisher. The WebUI calls this in origin mode so \"add a cloud\n // backup\" targets the node that actually holds the hub — not the browser\n // replica (which would push nothing). Creds travel over the server's TLS and\n // are stored server-side, same as the CLI path.\n method: \"POST\",\n path: \"/api/peer/s3\",\n summary: \"Attach an S3 storage bucket to this server (server becomes publisher)\",\n request: AddS3PeerReq,\n response: S3PeerSchema,\n handler: handle(async (req, { db }) => {\n const { corsOrigins, ...spec } = (await req.json()) as z.infer<typeof AddS3PeerReq>;\n const { url, config } = await addAndSyncStoragePeer(db, { ...spec, publish: true, priority: 100 });\n // Open the bucket's CORS for the caller's browser origin(s) so a replica\n // behind this server can talk to the bucket directly (away-from-server sync).\n // Only the server can do this (Bun PutBucketCors). Best-effort: if it doesn't\n // take, the browser's own first sync surfaces a CORS error with a fix hint.\n if (corsOrigins?.length) {\n try {\n await putBucketCors(config, corsOrigins, { merge: true });\n } catch {\n /* non-fatal: bucket is attached; retry via `mh config peer cors` */\n }\n }\n const view = s3PeerViews(db).find((v) => v.url === url);\n if (!view) throw new MhError(\"not_found\", `storage peer ${url} missing after add`);\n return view;\n }),\n },\n {\n method: \"GET\",\n path: \"/api/peers/s3\",\n summary: \"List S3 storage buckets attached to this server (no secrets)\",\n response: z.array(S3PeerSchema),\n handler: handle((_req, { db }) => s3PeerViews(db)),\n },\n {\n // Full config (incl. secretAccessKey) for one bucket. Master-token gated like\n // the rest of /api/*; the local desktop owner uses it to build a phone-enroll\n // QR for a bucket the sidecar holds (the desktop renderer has no replica to\n // read the config from, and the redacted /api/peers/s3 view omits the secret).\n method: \"GET\",\n path: \"/api/peer/s3/config\",\n summary: \"Full stored config (incl. secret) for one S3 bucket. Query: ?url=<url>\",\n response: z.record(z.string(), z.unknown()),\n handler: handle((req, { db }) => s3PeerConfig(db, need(req, \"url\"))),\n },\n {\n method: \"GET\",\n path: \"/api/grants\",\n summary: \"List credentials this server issued and accepts on /sync (inbound)\",\n response: z.array(GrantSchema),\n handler: handle((_req, { db }) => listGrants(db)),\n },\n {\n method: \"DELETE\",\n path: \"/api/grant\",\n summary: \"Revoke an issued credential by token or prefix. Query: ?token=<token>\",\n response: RevokeRes,\n handler: handle((req, { db }) => ({ revoked: revokeGrant(db, need(req, \"token\")) })),\n },\n];\n",
|
|
107
|
+
"// Node-only half of the blob ledger: the pieces that touch the on-disk cache\n// (delete bytes, reconcile legacy files) or the network (resolve missing bytes —\n// added with the transport layer). Re-exports blobs-core.ts so server-side\n// callers import everything from here.\n\nimport { join } from \"node:path\";\nimport { readdirSync, statSync } from \"node:fs\";\nimport type { DbDriver } from \"./driver.ts\";\nimport { cacheDir } from \"./paths.ts\";\nimport { deleteBlob, getBlob, putBlobAt, verifyBlobBytes } from \"./cache.ts\";\nimport { listPeers } from \"./sync/peers.ts\";\nimport { type S3Config, getBucketBlob, putBucketBlob, listBucketBlobHashes } from \"./sync/storage.ts\";\nimport { getServerConfig } from \"./config.ts\";\nimport { getNodeId } from \"./node.ts\";\nimport {\n cachedBlobs,\n isClearable,\n forgetBlob,\n recordBlob,\n touchBlob,\n referencedHashes,\n pendingBlobs,\n setPending,\n isFullBlobNode,\n readPolicy,\n setAnchored,\n writeBlobVerifiedAt,\n} from \"./blobs-core.ts\";\n\nexport * from \"./blobs-core.ts\";\n\nexport interface KnownBucket {\n url: string;\n label: string | null;\n bucket: string | null;\n}\n\n/** Attached object-storage buckets (s3 peers), for the \"pick a full-blob anchor\"\n * selector in Settings. A bucket is a durable full-blob library but is NOT a node\n * (1:N store-and-forward, no single node id), so it lives alongside knownNodes()\n * rather than inside it — designated by its synthetic url, not a node_id. */\nexport function knownBuckets(db: DbDriver): KnownBucket[] {\n return listPeers(db)\n .filter((p) => p.kind === \"s3\" && p.config)\n .map((p) => {\n let bucket: string | null = null;\n try {\n bucket = (JSON.parse(p.config!) as S3Config).bucket ?? null;\n } catch {\n // malformed config — show url only\n }\n return { url: p.url, label: p.label, bucket };\n });\n}\n\n// ---- byte transport: on-demand resolution + full-node maintenance -----------\n\n/** Cache bytes fetched for a reference (by the ref's own hash — which may be a\n * legacy 64-hex that putBlob's truncation would not reproduce). */\nasync function storeFetched(db: DbDriver, hash: string, bytes: Uint8Array): Promise<void> {\n await putBlobAt(hash, bytes);\n recordBlob(db, hash, bytes.byteLength, null, 0); // acquired cache → already durable at its source\n}\n\n/**\n * Resolve a blob's bytes by content hash: local cache → each enabled HTTP peer's\n * `GET /blob/<hash>?local=1` (local=1 keeps the peer from re-resolving, so there\n * are no fetch loops) → each attached bucket's `blobs/<hash>`. Content-addressed,\n * so every source is verified by re-hashing and any source is interchangeable.\n * The first verified hit is cached locally and returned; null when unreachable.\n */\nexport async function resolveBlob(db: DbDriver, hash: string): Promise<Uint8Array | null> {\n const local = await getBlob(hash);\n if (local) {\n touchBlob(db, hash);\n return local;\n }\n for (const peer of listPeers(db)) {\n if (!peer.enabled) continue;\n try {\n if (peer.kind === \"s3\") {\n if (!peer.config) continue;\n const bytes = await getBucketBlob(JSON.parse(peer.config) as S3Config, hash);\n if (bytes && verifyBlobBytes(bytes, hash)) {\n await storeFetched(db, hash, bytes);\n return bytes;\n }\n } else {\n const res = await fetch(new URL(`/blob/${hash}?local=1`, peer.url), {\n headers: peer.token ? { authorization: `Bearer ${peer.token}` } : {},\n });\n if (!res.ok) continue;\n const bytes = new Uint8Array(await res.arrayBuffer());\n if (verifyBlobBytes(bytes, hash)) {\n await storeFetched(db, hash, bytes);\n return bytes;\n }\n }\n } catch {\n // unreachable / error — try the next source\n }\n }\n return null;\n}\n\n// ---- on-demand presence verify (drives isClearable's `anchored`) -------------\n\nexport interface VerifyResult {\n /** Blobs confirmed durable on the anchor set (per redundancy) → clearable. */\n anchoredCount: number;\n anchoredBytes: number;\n /** Designated anchors (bucket urls / device node ids) we could not reach to\n * check. Under `all`, any unreachable anchor makes everything un-clearable. */\n unreachable: string[];\n /** Epoch-ms this verify ran. */\n at: number;\n}\n\n/** Ask a designated full-blob DEVICE anchor which of `hashes` it holds. */\nasync function queryPeerHas(\n url: string,\n token: string | null,\n hashes: string[],\n): Promise<Set<string>> {\n const res = await fetch(new URL(\"/api/blobs/has\", url), {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n ...(token ? { authorization: `Bearer ${token}` } : {}),\n },\n body: JSON.stringify({ hashes }),\n });\n if (!res.ok) throw new Error(`/api/blobs/has → ${res.status}`);\n const data = (await res.json()) as { has?: string[] };\n return new Set(data.has ?? []);\n}\n\n/**\n * Verify, right now, which locally-cached blobs a designated anchor durably holds,\n * and record the per-blob `anchored` flag that `isClearable` reads. Buckets are\n * checked with one paginated LIST (listBucketBlobHashes); device anchors with a\n * `POST /api/blobs/has`. An anchor we can't reach (offline / no stored url+token /\n * bad creds) goes into `unreachable` and is treated as NOT holding anything —\n * conservative, so a transient outage defers clearing rather than risking loss.\n *\n * Redundancy: `any` → present on ≥1 reachable anchor; `all` → every designated\n * anchor reachable AND holding it. Run on demand only (panel open / refresh /\n * pre-eviction when over quota), never in the steady-state maintenance loop.\n */\nexport async function verifyAnchorPresence(db: DbDriver): Promise<VerifyResult> {\n const policy = readPolicy(db);\n const self = getNodeId(db);\n const anchors = policy.fullNodes.filter((a) => a !== self);\n const blobs = cachedBlobs(db);\n const at = Date.now();\n\n if (anchors.length === 0) {\n for (const b of blobs) setAnchored(db, b.hash, false);\n writeBlobVerifiedAt(db, at);\n return { anchoredCount: 0, anchoredBytes: 0, unreachable: [], at };\n }\n\n const peers = listPeers(db);\n const localHashes = blobs.map((b) => b.hash);\n const anchorSets: Set<string>[] = [];\n const unreachable: string[] = [];\n\n for (const a of anchors) {\n let set: Set<string> | null = null;\n try {\n if (a.startsWith(\"s3://\")) {\n const peer = peers.find((p) => p.url === a && p.kind === \"s3\" && p.config);\n if (peer) set = await listBucketBlobHashes(JSON.parse(peer.config!) as S3Config);\n } else {\n const peer = peers.find((p) => p.node_id === a && p.kind !== \"s3\" && p.url);\n if (peer) set = await queryPeerHas(peer.url, peer.token, localHashes);\n }\n } catch {\n set = null; // unreachable / error\n }\n if (set) anchorSets.push(set);\n else unreachable.push(a);\n }\n\n const allReachable = unreachable.length === 0;\n let anchoredCount = 0;\n let anchoredBytes = 0;\n for (const b of blobs) {\n const presentIn = anchorSets.reduce((n, s) => n + (s.has(b.hash) ? 1 : 0), 0);\n const ok =\n policy.redundancy === \"all\"\n ? allReachable && presentIn === anchors.length // every designated anchor holds it\n : presentIn >= 1; // any reachable anchor holds it\n setAnchored(db, b.hash, ok);\n if (ok) {\n anchoredCount++;\n anchoredBytes += b.size;\n }\n }\n writeBlobVerifiedAt(db, at);\n return { anchoredCount, anchoredBytes, unreachable, at };\n}\n\nexport interface BlobMaintenanceResult {\n /** Referenced blobs a full library pulled in this round. */\n acquired: number;\n /** Pending productions confirmed flushed to the bucket(s) this round. */\n flushed: number;\n /** Blobs auto-evicted to stay under the configured cache quota. */\n evicted: number;\n}\n\n/**\n * Background blob upkeep, run from the sync tick (throttled). Cheap in steady\n * state — it only touches work that actually exists:\n * 1. A full blob library pulls every referenced blob it is still MISSING\n * (resolveBlob); self-limiting, a no-op once caught up.\n * 2. This node flushes its own PENDING productions to each attached bucket, then\n * marks them flushed (→ clearable). It iterates ONLY pending blobs (empty in\n * steady state), so — unlike the old design — it does NOT re-read/encrypt/HEAD\n * every already-uploaded blob each round.\n * 3. Evicts to stay under the cache quota.\n */\nexport async function blobMaintenance(db: DbDriver): Promise<BlobMaintenanceResult> {\n let acquired = 0;\n let flushed = 0;\n const s3peers = listPeers(db).filter((p) => p.enabled && p.kind === \"s3\" && p.config);\n\n // 1) Full library: pull referenced blobs it's missing (O(missing); storeFetched\n // records them pending=0 — they're durable at their source).\n if (isFullBlobNode(db)) {\n for (const hash of referencedHashes(db)) {\n if (await getBlob(hash)) continue;\n if (await resolveBlob(db, hash)) acquired++;\n }\n }\n\n // 2) Flush this node's pending productions to every attached bucket, then clear\n // pending. Only iterates the (steady-state-empty) pending worklist.\n if (s3peers.length > 0) {\n for (const { hash } of pendingBlobs(db)) {\n const bytes = await getBlob(hash);\n if (!bytes) continue; // bytes gone (shouldn't happen — pending is protected)\n let ok = true;\n for (const p of s3peers) {\n try {\n await putBucketBlob(JSON.parse(p.config!) as S3Config, hash, bytes); // true | already-there\n } catch {\n ok = false; // bucket unreachable / credentials — retry next round\n }\n }\n if (ok) {\n setPending(db, hash, false);\n flushed++;\n }\n }\n }\n\n // Keep the local cache under the configured quota (no-op when disabled / under).\n const { evicted } = await evictToQuota(db, getServerConfig(db).blobCacheQuotaBytes);\n return { acquired, flushed, evicted };\n}\n\nexport interface EvictResult {\n evicted: number;\n freedBytes: number;\n}\n\n/** Fraction of the quota to drain down to when eviction triggers, so a node that\n * crosses the quota doesn't re-evict one blob per tick at the boundary. */\nconst EVICT_LOW_WATER = 0.8;\n\n/**\n * Auto-evict clearable, unpinned blobs by least-recently-accessed order until the\n * local cache total is at/under the low-water mark. No-op when quotaBytes <= 0\n * (disabled) or the cache is already under quota. Only touches blobs `isClearable`\n * marks safe (durable on the full set) and never a pinned blob — bytes stay\n * re-fetchable, so this is loss-free.\n */\nexport async function evictToQuota(db: DbDriver, quotaBytes: number): Promise<EvictResult> {\n let evicted = 0;\n let freedBytes = 0;\n if (quotaBytes <= 0) return { evicted, freedBytes };\n reconcileCache(db);\n let blobs = cachedBlobs(db);\n let total = blobs.reduce((s, b) => s + b.size, 0);\n if (total <= quotaBytes) return { evicted, freedBytes };\n // Over quota: verify presence on the anchors NOW so eviction only drops blobs a\n // designated anchor verifiably still holds. When an anchor is offline the verify\n // marks the affected blobs anchored=0 → they fall out of the candidate set →\n // nothing is evicted and the cache stays over quota until the next tick can\n // confirm (loss-free degradation: eviction defers, it never loses data).\n await verifyAnchorPresence(db);\n blobs = cachedBlobs(db);\n const lowWater = Math.floor(quotaBytes * EVICT_LOW_WATER);\n // Oldest first; a null last_access (never touched since record) sorts as oldest.\n const candidates = blobs\n .filter((b) => !b.pinned && isClearable(db, b.hash))\n .sort((a, b) => (a.last_access ?? 0) - (b.last_access ?? 0));\n for (const b of candidates) {\n if (total <= lowWater) break;\n freedBytes += await deleteBlob(b.hash);\n forgetBlob(db, b.hash);\n total -= b.size;\n evicted++;\n }\n return { evicted, freedBytes };\n}\n\nexport interface ClearResult {\n /** Blobs whose bytes were dropped. */\n cleared: number;\n /** Actual bytes freed on disk. */\n freedBytes: number;\n /** Blobs left in place (sole copy / no anchor / this is a full node). */\n skipped: number;\n}\n\nexport interface GcResult {\n removed: number;\n freedBytes: number;\n}\n\n/**\n * Fold on-disk cache files into the blob_cache ledger so stats/clear/gc also see\n * blobs written before the ledger existed. content_type is unknown for these\n * (left null — serve falls back to the URL suffix).\n */\nexport function reconcileCache(db: DbDriver): void {\n let names: string[];\n try {\n names = readdirSync(cacheDir());\n } catch {\n return; // no cache dir yet\n }\n const known = new Set(cachedBlobs(db).map((b) => b.hash));\n for (const name of names) {\n if (known.has(name)) continue;\n try {\n const st = statSync(join(cacheDir(), name));\n if (st.isFile()) recordBlob(db, name, st.size, null);\n } catch {\n // file vanished mid-scan — ignore\n }\n }\n}\n\n/** Drop the bytes of every locally-cached blob that is safe to clear (durable on\n * the designated full set). Reference + hash stay in the oplog, re-fetchable. */\nexport async function clearCache(db: DbDriver): Promise<ClearResult> {\n reconcileCache(db);\n let cleared = 0;\n let freedBytes = 0;\n let skipped = 0;\n for (const b of cachedBlobs(db)) {\n // Pinned blobs are kept regardless of clearability (user opt-out of eviction).\n if (b.pinned || !isClearable(db, b.hash)) {\n skipped++;\n continue;\n }\n freedBytes += await deleteBlob(b.hash);\n forgetBlob(db, b.hash);\n cleared++;\n }\n return { cleared, freedBytes, skipped };\n}\n\n/** Drop bytes for blobs no live site_files / doc image still references (true\n * garbage, distinct from clearable cache). */\nexport async function gcOrphans(db: DbDriver): Promise<GcResult> {\n reconcileCache(db);\n const referenced = referencedHashes(db);\n let removed = 0;\n let freedBytes = 0;\n for (const b of cachedBlobs(db)) {\n if (referenced.has(b.hash)) continue;\n freedBytes += await deleteBlob(b.hash);\n forgetBlob(db, b.hash);\n removed++;\n }\n return { removed, freedBytes };\n}\n",
|
|
108
|
+
"import { z } from \"zod\";\nimport { errorResponse, type Route, type RouteCtx } from \"./routes.ts\";\nimport { MhError } from \"../errors.ts\";\nimport { putBlob, getBlob } from \"../cache.ts\";\nimport { recordBlob, touchBlob, resolveBlob, blobContentType, cachedBlobs, reconcileCache } from \"../blobs.ts\";\nimport { inferContentType } from \"../sites-core.ts\";\n\n// Content-addressed blob byte transport (document images / large files). The\n// oplog carries only the hash; bytes move on demand over this endpoint and the\n// bucket (see blobs.ts resolveBlob). Reference lives wherever the caller put it\n// (doc markdown `/blob/<hash>` or a site_files row) — this layer is hash-only.\n\nfunction ext(ct: string): string {\n const t = ct.toLowerCase().split(\";\")[0]!.trim();\n const map: Record<string, string> = {\n \"image/png\": \"png\",\n \"image/jpeg\": \"jpg\",\n \"image/gif\": \"gif\",\n \"image/webp\": \"webp\",\n \"image/avif\": \"avif\",\n \"image/svg+xml\": \"svg\",\n \"application/pdf\": \"pdf\",\n };\n return map[t] ?? \"\";\n}\n\n/**\n * Serve `GET /blob/<hash>[.ext]`. Default: resolve on demand (local cache → peers\n * → bucket) so a browser <img> or a far node gets the bytes even if this node\n * hadn't cached them. `?local=1` (used by peer-to-peer resolution) serves only\n * what we already hold, so cross-node fetches can't loop. Content-addressed →\n * immutable cache. Returns null when the path isn't a blob URL (so the caller\n * falls through to the next matcher).\n */\nexport async function serveBlob(req: Request, ctx: RouteCtx): Promise<Response | null> {\n const url = new URL(req.url);\n const rest = decodeURIComponent(url.pathname.slice(\"/blob/\".length));\n if (!rest) return null;\n const dot = rest.indexOf(\".\");\n const hash = (dot >= 0 ? rest.slice(0, dot) : rest).toLowerCase();\n if (!/^[0-9a-f]{16,64}$/.test(hash)) return null;\n\n const localOnly = url.searchParams.get(\"local\") === \"1\";\n const bytes = localOnly ? await getBlob(hash) : await resolveBlob(ctx.db, hash);\n if (!bytes) return new Response(\"not found\", { status: 404 });\n if (localOnly) touchBlob(ctx.db, hash);\n\n const ct = dot >= 0 ? inferContentType(rest) : blobContentType(ctx.db, hash) ?? \"application/octet-stream\";\n // Copy into a fresh ArrayBuffer-backed view (same shape as sites-serve.ts) so\n // the body type is a plain BodyInit.\n const body = new Uint8Array(bytes.byteLength);\n body.set(bytes);\n return new Response(body.buffer, {\n headers: { \"content-type\": ct, \"cache-control\": \"public, max-age=31536000, immutable\" },\n });\n}\n\nconst BlobUploadSchema = z.object({\n hash: z.string(),\n size: z.number(),\n content_type: z.string(),\n url: z.string().describe(\"Stable served path, e.g. /blob/<hash>.png\"),\n});\n\nconst BlobHasReq = z.object({\n hashes: z.array(z.string()).describe(\"Candidate blob hashes to check for presence.\"),\n});\nconst BlobHasRes = z.object({\n has: z.array(z.string()).describe(\"Subset of the requested hashes this node holds.\"),\n});\n\nexport const blobRoutes: Route[] = [\n {\n method: \"POST\",\n path: \"/api/blobs/has\",\n summary:\n \"Given candidate blob hashes, return the subset this node durably holds. A peer's \" +\n \"clear-presence verify calls this on a designated full-blob device anchor to confirm \" +\n \"the anchor still holds a blob before the peer drops its own cached copy. \" +\n \"Authorized like /blob/ byte transport (master token or per-peer grant).\",\n request: BlobHasReq,\n response: BlobHasRes,\n handler: async (req, { db }) => {\n try {\n const body = (await req.json()) as { hashes?: unknown };\n const want = Array.isArray(body.hashes) ? body.hashes.filter((h) => typeof h === \"string\") : [];\n reconcileCache(db); // disk is the truth — drop rows whose bytes are gone\n const held = new Set(cachedBlobs(db).map((b) => b.hash));\n return Response.json({ has: want.filter((h) => held.has(h as string)) });\n } catch (err) {\n return errorResponse(err);\n }\n },\n },\n {\n method: \"POST\",\n path: \"/api/blob\",\n summary:\n \"Upload a content-addressed blob (document image / large file); raw bytes in the body, \" +\n \"content-type header sets the type. Returns its hash + stable /blob/<hash>.<ext> URL. \" +\n \"Unlike /api/site/file it creates NO reference row — the caller (e.g. doc markdown) holds the reference.\",\n response: BlobUploadSchema,\n handler: async (req, { db }) => {\n try {\n const ct = req.headers.get(\"content-type\") || \"application/octet-stream\";\n const bytes = new Uint8Array(await req.arrayBuffer());\n if (!bytes.byteLength) throw new MhError(\"invalid_input\", \"empty blob body\");\n const info = await putBlob(bytes);\n recordBlob(db, info.hash, info.size, ct); // produced here → pending=1\n const e = ext(ct);\n return Response.json({\n hash: info.hash,\n size: info.size,\n content_type: ct,\n url: `/blob/${info.hash}${e ? \".\" + e : \"\"}`,\n });\n } catch (err) {\n return errorResponse(err);\n }\n },\n },\n];\n",
|
|
109
|
+
"import type { ZodType } from \"zod\";\nimport type { Database } from \"bun:sqlite\";\nimport { ingest, changesAfterSeq } from \"../crdt.ts\";\nimport {\n SyncRequestSchema,\n SyncResponseSchema,\n HealthResponseSchema,\n SYNC_PATH,\n HEALTH_PATH,\n type SyncRequest,\n} from \"./protocol.ts\";\nimport { sitesRoutes } from \"./sites-routes.ts\";\nimport { peersRoutes } from \"./peers-routes.ts\";\nimport { blobRoutes } from \"./blob-routes.ts\";\nimport { errorCode, type MhErrorCode } from \"../errors.ts\";\n\n/** Injected at server startup; handlers reuse the open DB connection. */\nexport interface RouteCtx {\n db: Database;\n node: string;\n}\n\n/** HTTP status per error code (see core/errors.ts). Uncategorized errors stay\n * 400, matching the historical catch-all behavior. */\nconst HTTP_STATUS: Record<MhErrorCode, number> = {\n invalid_input: 400,\n not_found: 404,\n ambiguous: 400,\n stale: 409,\n conflict: 409,\n auth: 401,\n network: 502,\n port_in_use: 500,\n};\n\n/** Turn a thrown handler error into a JSON response: `{error, code?}` with a\n * semantic status, so HTTP clients can dispatch on `code` like CLI users\n * dispatch on exit codes. */\nexport function errorResponse(e: unknown): Response {\n const message = e instanceof Error ? e.message : String(e);\n const code = errorCode(e);\n return Response.json(code ? { error: message, code } : { error: message }, {\n status: code ? HTTP_STATUS[code] : 400,\n });\n}\n\n/**\n * One entry per endpoint. `request`/`response` are Zod schemas that double as\n * the OpenAPI source (see ./openapi.ts). Add an endpoint here and it shows up\n * in /docs automatically — no generate step, no separate spec file.\n */\nexport interface Route {\n method: \"GET\" | \"POST\" | \"PATCH\" | \"DELETE\";\n path: string;\n summary: string;\n request?: ZodType;\n response: ZodType;\n handler: (req: Request, ctx: RouteCtx) => Promise<Response> | Response;\n}\n\nconst syncRoutes: Route[] = [\n {\n method: \"POST\",\n path: SYNC_PATH,\n summary: \"CRDT replication: push local changes and pull server changes\",\n request: SyncRequestSchema,\n response: SyncResponseSchema,\n async handler(req, { db, node }) {\n const body = (await req.json()) as SyncRequest;\n ingest(db, body.changes ?? []);\n const batch = changesAfterSeq(db, body.since ?? 0, {\n limit: body.limit,\n excludeDatasets: body.exclude_datasets,\n });\n return Response.json({ node_id: node, changes: batch.changes, cursor: batch.cursor });\n },\n },\n {\n method: \"GET\",\n path: HEALTH_PATH,\n summary: \"Health check\",\n response: HealthResponseSchema,\n handler(_req, { node }) {\n return Response.json({ ok: true, node });\n },\n },\n];\n\n// CRDT sync protocol routes + read-only site endpoints (sites are authored via\n// the `mh site` CLI) + peer pairing/management endpoints. The WebUI's data API\n// is not part of core: it is injected via startServer's `ui` option.\nexport const routes: Route[] = [...syncRoutes, ...sitesRoutes, ...peersRoutes, ...blobRoutes];\n",
|
|
110
|
+
"import type { RouteCtx } from \"./routes.ts\";\nimport { resolveSite, getFileForServe } from \"../sites.ts\";\n\n// Serves agent-published sites at /sites/<name>/<path...>. Imported lazily from\n// server.ts so it stays off the CLI startup path. Returns null only for paths it\n// does not own (so the caller can fall through to 404). HTML responses get the\n// auth fetch-shim injected by the caller (server.ts withShim) in non-debug mode.\n\nexport async function serveSite(req: Request, ctx: RouteCtx): Promise<Response | null> {\n const url = new URL(req.url);\n const rest = url.pathname.slice(\"/sites/\".length);\n if (rest === \"\") return null; // /sites/ with no site name\n\n const slash = rest.indexOf(\"/\");\n const name = decodeURIComponent(slash === -1 ? rest : rest.slice(0, slash));\n\n // /sites/<name> → canonical /sites/<name>/ so relative asset URLs resolve.\n if (slash === -1) return Response.redirect(`${url.origin}/sites/${name}/`, 301);\n\n const filePath = decodeURIComponent(rest.slice(slash + 1));\n\n let siteId: string;\n try {\n siteId = resolveSite(ctx.db, name).id;\n } catch {\n return new Response(\"site not found\", { status: 404 });\n }\n\n const file = await getFileForServe(ctx.db, siteId, filePath);\n if (!file) return new Response(\"not found\", { status: 404 });\n const body = new Uint8Array(file.bytes.byteLength);\n body.set(file.bytes);\n return new Response(body.buffer, { headers: { \"content-type\": file.contentType } });\n}\n",
|
|
111
|
+
"export * from \"./errors.ts\";\nexport * from \"./paths.ts\";\nexport * from \"./driver.ts\";\nexport * from \"./db.ts\";\nexport * from \"./ids.ts\";\nexport * from \"./resolve.ts\";\nexport * from \"./hlc.ts\";\nexport * from \"./crdt.ts\";\nexport * from \"./blocks.ts\";\nexport * from \"./fracdex.ts\";\nexport * from \"./node.ts\";\nexport * from \"./databases.ts\";\nexport * from \"./context.ts\";\nexport * from \"./properties.ts\";\nexport * from \"./indexing.ts\";\nexport * from \"./records.ts\";\nexport * from \"./documents.ts\";\nexport * from \"./search.ts\";\nexport * from \"./cache.ts\";\nexport * from \"./sites.ts\";\nexport * from \"./sync/protocol.ts\";\nexport * from \"./sync/client.ts\";\nexport * from \"./sync/server.ts\";\n",
|
|
112
|
+
"import { Database } from \"bun:sqlite\";\nimport { mkdirSync } from \"node:fs\";\nimport { dbPath, cacheDir, metahubHome } from \"./paths.ts\";\nimport { initSchema } from \"./schema-init.ts\";\n\n// Schema bootstrap lives in schema-init.ts (runtime-agnostic, driver-typed);\n// re-exported here so existing imports keep working.\nexport {\n runSchema,\n ftsAvailable,\n migrateRecords,\n migratePeers,\n migrateDocBlocks,\n migrateDocuments,\n migrateOplog,\n initSchema,\n} from \"./schema-init.ts\";\n\nexport function ensureDirs(): void {\n mkdirSync(metahubHome(), { recursive: true });\n mkdirSync(cacheDir(), { recursive: true });\n}\n\n/** Open (and migrate) the on-disk metahub database for the resolved home. */\nexport function openMetahub(): Database {\n ensureDirs();\n const db = new Database(dbPath(), { create: true });\n db.exec(\"PRAGMA journal_mode = WAL;\");\n initSchema(db);\n return db;\n}\n",
|
|
113
|
+
"export const CORE_SCHEMA = `\nCREATE TABLE IF NOT EXISTS meta (\n key TEXT PRIMARY KEY,\n value TEXT\n);\n\n-- CRDT oplog: one row per field assignment. Source of truth for sync.\n-- txn groups the changes of one logical mutation for history rendering\n-- (nullable: legacy rows and changes from pre-txn peers have none).\n--\n-- seq is an explicit AUTOINCREMENT id used as the replication cursor. It must\n-- be a declared INTEGER PRIMARY KEY (not the implicit rowid): VACUUM renumbers\n-- the rowids of tables that lack one, which would shift them below a peer's\n-- stored push/pull cursor and silently strand every write in the gap.\n-- AUTOINCREMENT additionally guarantees ids are never reused. The\n-- (dataset,row_id,col,hlc) tuple stays UNIQUE so applyChange's INSERT OR IGNORE\n-- dedup is unchanged. Legacy databases are rebuilt into this shape by\n-- migrateCrdtChangesSeq (schema-init.ts).\nCREATE TABLE IF NOT EXISTS crdt_changes (\n seq INTEGER PRIMARY KEY AUTOINCREMENT,\n hlc TEXT NOT NULL,\n node_id TEXT NOT NULL,\n dataset TEXT NOT NULL,\n row_id TEXT NOT NULL,\n col TEXT NOT NULL,\n value TEXT,\n txn TEXT,\n UNIQUE (dataset, row_id, col, hlc)\n);\nCREATE INDEX IF NOT EXISTS idx_changes_hlc ON crdt_changes(hlc);\n-- Serves history's \"every block ever attached to this doc\" lookup. Partial so\n-- it never indexes the large values other datasets carry (e.g. site file bodies).\nCREATE INDEX IF NOT EXISTS idx_changes_docref ON crdt_changes(value)\n WHERE dataset = 'doc_blocks' AND col = 'doc_id';\n\n-- Per-peer replication cursors (crdt_changes.seq: AUTOINCREMENT, monotonic in\n-- insertion order and stable across VACUUM, so no change is ever skipped\n-- regardless of HLC/clock skew). Outbound side of\n-- a pairing: \"token\" is the credential the *remote* issued to us (sent as a\n-- Bearer header when we sync to them). See migratePeers in db.ts for the columns\n-- added to legacy databases.\n--\n-- kind selects the transport: 'http' (POST /sync to a peer server, the classic\n-- path) or 's3' (an S3-compatible bucket used as dumb store-and-forward — see\n-- sync/storage.ts). For 's3' peers url is a synthetic key (s3://<bucket>/<prefix>)\n-- and config holds the bucket settings + credentials + master key as JSON.\n-- Like the rest of peers, config is local-only and never enters the CRDT oplog.\nCREATE TABLE IF NOT EXISTS peers (\n url TEXT PRIMARY KEY,\n pull_cursor INTEGER NOT NULL DEFAULT 0,\n push_cursor INTEGER NOT NULL DEFAULT 0,\n token TEXT,\n label TEXT,\n node_id TEXT,\n enabled INTEGER NOT NULL DEFAULT 1,\n last_sync_at INTEGER,\n last_success_at INTEGER,\n last_status TEXT,\n last_error TEXT,\n kind TEXT NOT NULL DEFAULT 'http',\n config TEXT\n);\n\n-- Per-(storage-peer, remote-node) pull progress: the key of the last oplog\n-- segment we consumed from that node's bucket prefix. HTTP peers use the single\n-- pull_cursor above; storage peers need one cursor per remote node because each\n-- node publishes its own segment stream under its own prefix. last_key is a\n-- bucket object key (lexicographically ordered = chronological), so LIST\n-- start-after resumes exactly where we left off.\nCREATE TABLE IF NOT EXISTS storage_cursors (\n peer_url TEXT NOT NULL,\n node_id TEXT NOT NULL,\n last_key TEXT,\n PRIMARY KEY (peer_url, node_id)\n);\n\n-- Inbound side of a pairing: credentials *we* issued to remote devices. A peer\n-- presents one of these on /sync; acceptsSyncToken() checks it alongside the\n-- managed master token. Revoke by deleting the row.\nCREATE TABLE IF NOT EXISTS peer_grants (\n token TEXT PRIMARY KEY,\n peer_url TEXT,\n node_id TEXT,\n created_at INTEGER\n);\n\n-- One-time pairing codes minted by \"mh config peer code\" / POST /api/pair/new.\n-- Short-lived and single-use: redeemed during the pairing handshake, then the\n-- two devices exchange durable peer_grants. used/exp gate redemption.\nCREATE TABLE IF NOT EXISTS pairing_codes (\n code TEXT PRIMARY KEY,\n exp INTEGER NOT NULL,\n used INTEGER NOT NULL DEFAULT 0,\n created_at INTEGER\n);\n\nCREATE TABLE IF NOT EXISTS databases (\n id TEXT PRIMARY KEY,\n name TEXT,\n icon TEXT,\n created_hlc TEXT,\n __deleted INTEGER NOT NULL DEFAULT 0\n);\n\nCREATE TABLE IF NOT EXISTS properties (\n id TEXT PRIMARY KEY,\n database_id TEXT,\n name TEXT,\n type TEXT,\n config TEXT,\n position REAL,\n __deleted INTEGER NOT NULL DEFAULT 0\n);\nCREATE INDEX IF NOT EXISTS idx_properties_db ON properties(database_id);\n\n-- One row per record. Field cells live in the data JSON object, keyed by\n-- property id (rename-safe). Each (record,property) is still an independent\n-- CRDT register in the oplog; materialize() folds the winner into data via\n-- json_set/json_remove. Hot fields get expression indexes on data->>'propid'\n-- (see indexing.ts) so filter/sort/limit push down to SQL.\nCREATE TABLE IF NOT EXISTS records (\n id TEXT PRIMARY KEY,\n database_id TEXT,\n created_hlc TEXT,\n order_key TEXT,\n data TEXT NOT NULL DEFAULT '{}',\n __deleted INTEGER NOT NULL DEFAULT 0\n);\nCREATE INDEX IF NOT EXISTS idx_records_db_hlc ON records(database_id, created_hlc);\n\nCREATE TABLE IF NOT EXISTS documents (\n id TEXT PRIMARY KEY,\n title TEXT,\n body TEXT, -- materialized cache: serialized from doc_blocks\n database_id TEXT,\n parent_id TEXT,\n created_hlc TEXT,\n order_key TEXT, -- fractional index among siblings (same parent_id); ties broken by created_hlc,id\n __deleted INTEGER NOT NULL DEFAULT 0\n);\n\n-- Document body as an ordered list of blocks; each (block,field) is an\n-- independent CRDT register so concurrent edits to different blocks merge.\n-- order_key is a fractional index (ties broken by id) giving display order.\nCREATE TABLE IF NOT EXISTS doc_blocks (\n id TEXT PRIMARY KEY,\n doc_id TEXT,\n text TEXT,\n order_key TEXT,\n blank_after INTEGER NOT NULL DEFAULT 0, -- extra blank lines kept after this block (user spacing)\n __deleted INTEGER NOT NULL DEFAULT 0\n);\nCREATE INDEX IF NOT EXISTS idx_doc_blocks_doc ON doc_blocks(doc_id);\n\n-- A named static site (Supabase-Storage-style bucket). Served at /sites/<name>/.\nCREATE TABLE IF NOT EXISTS sites (\n id TEXT PRIMARY KEY,\n name TEXT, -- URL slug; resolved by getSiteByName\n title TEXT,\n created_hlc TEXT,\n __deleted INTEGER NOT NULL DEFAULT 0\n);\n\n-- One row per file in a site. content holds inline utf8/base64 text, or a blob\n-- hash (see cache.ts) when encoding = 'blob'. (site_id, path) maps to a stable\n-- id so re-uploads merge as a CRDT register instead of duplicating.\nCREATE TABLE IF NOT EXISTS site_files (\n id TEXT PRIMARY KEY,\n site_id TEXT,\n path TEXT,\n content_type TEXT,\n encoding TEXT, -- 'utf8' | 'base64' | 'blob'\n content TEXT,\n created_hlc TEXT,\n __deleted INTEGER NOT NULL DEFAULT 0\n);\nCREATE INDEX IF NOT EXISTS idx_site_files_site ON site_files(site_id);\n\n-- Node-local blob cache ledger (NOT synced, like peers/storage_cursors): one row\n-- per blob byte-file held in cache.ts's content-addressed store (~/.metahub/cache).\n-- Gives the bare hash-named files the metadata clearing/stats need. hash is the\n-- canonical content key (sha256 truncated to 32 hex; legacy 64-hex coexist).\n-- pending = bytes produced HERE not yet confirmed flushed to a durable anchor\n-- (bucket) — the only blobs a device must protect; never auto-evicted/cleared.\n-- pending=0 means a flushed production OR an acquired cache, both safely\n-- clearable (re-fetchable). This local fact replaces the old SYNCED blob_presence\n-- table — clearing is now purely local/offline. See blobs.ts / 22-blob-sync.\nCREATE TABLE IF NOT EXISTS blob_cache (\n hash TEXT PRIMARY KEY,\n size INTEGER NOT NULL,\n content_type TEXT,\n last_access INTEGER,\n pinned INTEGER NOT NULL DEFAULT 0, -- node-local: never auto-evicted / cleared\n pending INTEGER NOT NULL DEFAULT 1, -- produced here, not yet flushed to anchor\n anchored INTEGER NOT NULL DEFAULT 0 -- node-local: last verify confirmed a designated anchor holds it (per redundancy). Drives isClearable; reset on policy change\n);\n\n-- Synced workspace policy (single row \"default\"): which nodes are designated\n-- full-blob libraries — the durable anchor in no-bucket topologies (they pull\n-- everything and never clear). full_nodes is a JSON array of node_id; redundancy\n-- is retained but unused since clearing moved to the local pending model.\nCREATE TABLE IF NOT EXISTS blob_policy (\n id TEXT PRIMARY KEY, -- always \"default\"\n full_nodes TEXT, -- JSON array of node_id\n redundancy TEXT, -- 'all' | 'any'\n __deleted INTEGER NOT NULL DEFAULT 0\n);\n`;\n\n// Best-effort: FTS5 may not be compiled in. Search falls back to LIKE if this fails.\nexport const FTS_SCHEMA = `\nCREATE VIRTUAL TABLE IF NOT EXISTS search_fts USING fts5(\n kind UNINDEXED,\n id UNINDEXED,\n database_id UNINDEXED,\n title,\n body\n);\n`;\n",
|
|
114
|
+
"import type { DbDriver } from \"./driver.ts\";\nimport { newId, slugify, idKind } from \"./ids.ts\";\nimport { emit, grouped } from \"./crdt.ts\";\nimport { getDatabase } from \"./databases.ts\";\nimport { listProperties, type PropertyRow } from \"./properties.ts\";\nimport { maybeAutoIndex } from \"./indexing.ts\";\nimport { resolveCandidates } from \"./resolve.ts\";\nimport { keyBetween, keysBetween } from \"./fracdex.ts\";\nimport { MhError } from \"./errors.ts\";\n\ntype SqlValue = string | number | null;\n\n/** Scalars push down to SQL; arrays/objects/null are filtered in JS. */\nfunction isSqlScalar(v: unknown): v is string | number | boolean {\n return typeof v === \"string\" || typeof v === \"number\" || typeof v === \"boolean\";\n}\n\n/** Encode a coerced scalar to match what `data ->> '<prop>'` returns. */\nfunction sqlFilterValue(v: string | number | boolean): SqlValue {\n return typeof v === \"boolean\" ? (v ? 1 : 0) : v;\n}\n\nexport interface RecordRow {\n id: string;\n database_id: string;\n /** Cells keyed by property NAME — friendly for CLI / external agents, but\n * lossy when two properties share a name (one entry wins). */\n values: Record<string, unknown>;\n /** Cells keyed by property ID — lossless under duplicate names; the WebUI\n * reads/writes through this. */\n cells: Record<string, unknown>;\n}\n\ninterface OrderedRecordRow {\n id: string;\n database_id: string;\n created_hlc: string | null;\n order_key: string | null;\n}\n\n/**\n * Resolve one relation value to a concrete record id in the target database.\n * Accepts a full id / unique prefix / name. A well-formed record id that does\n * not (yet) exist passes through unchanged — a forward reference / explicit id\n * escape valve. Names/prefixes that match nothing, or match many, throw.\n */\nfunction resolveRelation(db: DbDriver, prop: PropertyRow, value: string): string {\n const target = prop.config?.database;\n if (!target) return value; // misconfigured relation — leave the value as-is\n const cands = resolveCandidates(db, value, { kind: \"rec\", databaseId: target });\n const exact = cands.find((c) => c.id === value);\n if (exact) return exact.id;\n if (cands.length === 1) return cands[0]!.id;\n if (cands.length === 0) {\n if (idKind(value) === \"rec\") return value; // forward reference to a full id\n throw new MhError(\"not_found\", `${prop.name}: no such record in target database: ${value}`);\n }\n throw new MhError(\"ambiguous\", `${prop.name}: ambiguous relation \"${value}\" (${cands.length} matches); use a full id`);\n}\n\n/** Validate + normalize a value for a property's type. Throws on mismatch. */\nfunction coerce(db: DbDriver, prop: PropertyRow, value: unknown): unknown {\n switch (prop.type) {\n case \"text\":\n case \"url\":\n case \"date\": {\n if (value === null) return null;\n if (typeof value !== \"string\") throw new MhError(\"invalid_input\", `${prop.name} expects a string`);\n return value;\n }\n case \"number\": {\n if (value === null) return null;\n const n = typeof value === \"number\" ? value : Number(value);\n if (!Number.isFinite(n)) throw new MhError(\"invalid_input\", `${prop.name} expects a number`);\n return n;\n }\n case \"checkbox\": {\n if (typeof value === \"boolean\") return value;\n if (value === \"true\" || value === 1) return true;\n if (value === \"false\" || value === 0 || value === null) return false;\n throw new MhError(\"invalid_input\", `${prop.name} expects a boolean`);\n }\n case \"select\": {\n if (value === null) return null;\n const v = String(value);\n if (!prop.config?.options?.includes(v))\n throw new MhError(\"invalid_input\", `${prop.name}: '${v}' is not an allowed option`);\n return v;\n }\n case \"multi_select\": {\n const arr = value === null ? [] : Array.isArray(value) ? value : [value];\n const opts = prop.config?.options ?? [];\n for (const item of arr)\n if (!opts.includes(String(item)))\n throw new MhError(\"invalid_input\", `${prop.name}: '${item}' is not an allowed option`);\n return arr.map(String);\n }\n case \"relation\": {\n const arr = value === null ? [] : Array.isArray(value) ? value : [value];\n return arr.map((v) => resolveRelation(db, prop, String(v)));\n }\n }\n}\n\n/** Group properties by lowercased name; duplicate names are legal. */\nfunction propsByName(props: PropertyRow[]): Map<string, PropertyRow[]> {\n const byName = new Map<string, PropertyRow[]>();\n for (const p of props) {\n const k = p.name.toLowerCase();\n const list = byName.get(k);\n if (list) list.push(p);\n else byName.set(k, [p]);\n }\n return byName;\n}\n\n/**\n * Match data keys (property name OR id) to properties. Duplicate property\n * names are a legal state (offline peers can create them concurrently), so a\n * name that matches several properties is ambiguous — callers must switch to\n * the property id.\n */\nfunction resolveData(\n props: PropertyRow[],\n data: Record<string, unknown>,\n): { prop: PropertyRow; value: unknown }[] {\n const byId = new Map(props.map((p) => [p.id, p]));\n const byName = propsByName(props);\n const out: { prop: PropertyRow; value: unknown }[] = [];\n for (const [key, value] of Object.entries(data)) {\n let prop = byId.get(key);\n if (!prop) {\n const matches = byName.get(key.toLowerCase()) ?? [];\n if (matches.length > 1)\n throw new MhError(\n \"ambiguous\",\n `property name \"${key}\" matches ${matches.length} properties; use a property id`,\n );\n prop = matches[0];\n }\n if (!prop) throw new MhError(\"not_found\", `unknown property: ${key}`);\n out.push({ prop, value });\n }\n return out;\n}\n\n/** Build a RecordRow from a materialized row; keys in `data` are property ids. */\nfunction rowToRecord(\n row: { id: string; database_id: string; data: string },\n props: PropertyRow[],\n): RecordRow {\n const raw = JSON.parse(row.data || \"{}\") as Record<string, unknown>;\n const byId = new Map(props.map((p) => [p.id, p]));\n const values: Record<string, unknown> = {};\n const cells: Record<string, unknown> = {};\n for (const [propId, v] of Object.entries(raw)) {\n const p = byId.get(propId);\n if (!p) continue; // skip cells for removed properties\n values[p.name] = v;\n cells[p.id] = v;\n }\n return { id: row.id, database_id: row.database_id, values, cells };\n}\n\nfunction deriveTitle(\n props: PropertyRow[],\n resolved: { prop: PropertyRow; value: unknown }[],\n fallbackBase: string,\n): string {\n const text = resolved.find(\n (r) => r.prop.type === \"text\" && typeof r.value === \"string\" && r.value,\n );\n return newId(\"rec\", text ? String(text.value) : \"\", fallbackBase);\n}\n\nfunction tableExists(db: DbDriver, table: string): boolean {\n return (\n db\n .query(\"SELECT 1 AS ok FROM sqlite_master WHERE type = 'table' AND name = ?\")\n .get(table) != null\n );\n}\n\nfunction canEmitOrderKeys(db: DbDriver): boolean {\n return tableExists(db, \"meta\") && tableExists(db, \"crdt_changes\");\n}\n\nfunction writeRecordOrderKey(db: DbDriver, recordId: string, orderKey: string, emitChange: boolean): void {\n if (emitChange) emit(db, \"records\", recordId, \"order_key\", orderKey);\n else db.query(\"UPDATE records SET order_key = ? WHERE id = ?\").run(orderKey, recordId);\n}\n\nfunction lastRecordOrderKey(db: DbDriver, databaseId: string): string | null {\n const row = db\n .query(\n `SELECT order_key FROM records\n WHERE database_id = ? AND __deleted = 0 AND order_key IS NOT NULL\n ORDER BY order_key DESC, id DESC LIMIT 1`,\n )\n .get(databaseId) as { order_key: string | null } | null;\n return row?.order_key ?? null;\n}\n\nfunction orderedRecordRows(db: DbDriver, databaseId: string): OrderedRecordRow[] {\n return db\n .query(\n `SELECT id, database_id, created_hlc, order_key FROM records\n WHERE database_id = ? AND __deleted = 0\n ORDER BY order_key IS NULL, order_key, created_hlc, id`,\n )\n .all(databaseId) as OrderedRecordRow[];\n}\n\nfunction rebalanceRecordOrderKeys(db: DbDriver, databaseId: string): void {\n const rows = orderedRecordRows(db, databaseId);\n const keys = keysBetween(null, null, rows.length);\n rows.forEach((row, i) => {\n if (row.order_key !== keys[i]) emit(db, \"records\", row.id, \"order_key\", keys[i]!);\n });\n}\n\nexport const backfillRecordOrderKeys = grouped(function backfillRecordOrderKeys(\n db: DbDriver,\n databaseId?: string,\n): void {\n const emitChange = canEmitOrderKeys(db);\n const dbRows = databaseId\n ? [{ database_id: databaseId }]\n : (db\n .query(\n `SELECT DISTINCT database_id FROM records\n WHERE database_id IS NOT NULL AND __deleted = 0 AND order_key IS NULL`,\n )\n .all() as { database_id: string }[]);\n\n for (const d of dbRows) {\n const missing = db\n .query(\n `SELECT id FROM records\n WHERE database_id = ? AND __deleted = 0 AND order_key IS NULL\n ORDER BY created_hlc, id`,\n )\n .all(d.database_id) as { id: string }[];\n if (!missing.length) continue;\n\n const start = lastRecordOrderKey(db, d.database_id);\n const keys = keysBetween(start, null, missing.length);\n missing.forEach((row, i) => writeRecordOrderKey(db, row.id, keys[i]!, emitChange));\n }\n});\n\nexport const createRecord = grouped(function createRecord(\n db: DbDriver,\n databaseId: string,\n data: Record<string, unknown>,\n): RecordRow {\n const dbRow = getDatabase(db, databaseId);\n if (!dbRow) throw new MhError(\"not_found\", `no such database: ${databaseId}`);\n const props = listProperties(db, databaseId);\n const resolved = resolveData(props, data);\n const id = deriveTitle(props, resolved, slugify(dbRow.name, \"rec\"));\n const orderKey = keyBetween(lastRecordOrderKey(db, databaseId), null);\n\n const first = emit(db, \"records\", id, \"database_id\", databaseId);\n emit(db, \"records\", id, \"created_hlc\", first.hlc);\n emit(db, \"records\", id, \"order_key\", orderKey);\n for (const { prop, value } of resolved)\n emit(db, \"records\", id, prop.id, coerce(db, prop, value));\n return getRecord(db, id)!;\n});\n\nexport function getRecord(db: DbDriver, id: string): RecordRow | null {\n const row = db\n .query(\"SELECT id, database_id, data FROM records WHERE id = ? AND __deleted = 0\")\n .get(id) as { id: string; database_id: string; data: string } | null;\n if (!row) return null;\n return rowToRecord(row, listProperties(db, row.database_id));\n}\n\n/** Quote a property id for embedding in a JSON path / index expression. */\nfunction jsonKeyLit(propId: string): string {\n return propId.replace(/'/g, \"''\");\n}\n\nexport function listRecords(\n db: DbDriver,\n databaseId: string,\n opts: { filter?: Record<string, unknown>; sort?: string; limit?: number } = {},\n): RecordRow[] {\n const props = listProperties(db, databaseId);\n\n // Coerce filters, then split: scalars push down to SQL (and earn an index),\n // arrays/objects/null are matched in JS afterward.\n const resolved =\n opts.filter && Object.keys(opts.filter).length\n ? resolveData(props, opts.filter).map(({ prop, value }) => ({\n prop,\n value: coerce(db, prop, value),\n }))\n : [];\n const sqlFilters = resolved.filter((f) => isSqlScalar(f.value));\n const jsFilters = resolved.filter((f) => !isSqlScalar(f.value));\n\n // Resolve sort: default created_hlc; \"-field\" = descending.\n let sortProp: PropertyRow | undefined;\n let sortDesc = false;\n if (opts.sort) {\n let key = opts.sort;\n if (key.startsWith(\"-\")) {\n sortDesc = true;\n key = key.slice(1);\n }\n if (key !== \"created\" && key !== \"created_hlc\") {\n let p = props.find((p) => p.id === key);\n if (!p) {\n const matches = props.filter((q) => q.name.toLowerCase() === key.toLowerCase());\n if (matches.length > 1)\n throw new MhError(\n \"ambiguous\",\n `sort field \"${key}\" matches ${matches.length} properties; use a property id`,\n );\n p = matches[0];\n }\n if (!p) throw new MhError(\"not_found\", `unknown sort field: ${key}`);\n sortProp = p;\n }\n }\n\n // The act of filtering/sorting on a field is the signal to (maybe) index it.\n for (const f of sqlFilters) maybeAutoIndex(db, databaseId, f.prop);\n if (sortProp) maybeAutoIndex(db, databaseId, sortProp);\n\n const where = [\"database_id = ?\", \"__deleted = 0\"];\n const args: SqlValue[] = [databaseId];\n for (const f of sqlFilters) {\n where.push(`data ->> '${jsonKeyLit(f.prop.id)}' = ?`);\n args.push(sqlFilterValue(f.value as string | number | boolean));\n }\n\n const manualOrder = opts.sort == null;\n const orderExpr = sortProp\n ? `data ->> '${jsonKeyLit(sortProp.id)}'`\n : \"created_hlc\";\n let sql =\n `SELECT id, database_id, data FROM records WHERE ${where.join(\" AND \")} ` +\n (manualOrder\n ? \"ORDER BY order_key IS NULL, order_key, id\"\n : `ORDER BY ${orderExpr} ${sortDesc ? \"DESC\" : \"ASC\"}, id`);\n\n // LIMIT only pushes down when no JS-side filtering remains.\n const pushLimit = opts.limit != null && jsFilters.length === 0;\n if (pushLimit) {\n sql += \" LIMIT ?\";\n args.push(opts.limit!);\n }\n\n let rows = (\n db.query(sql).all(...args) as { id: string; database_id: string; data: string }[]\n ).map((r) => rowToRecord(r, props));\n\n if (jsFilters.length) {\n rows = rows.filter((r) =>\n jsFilters.every(\n (f) => JSON.stringify(r.cells[f.prop.id] ?? null) === JSON.stringify(f.value),\n ),\n );\n if (opts.limit != null) rows = rows.slice(0, opts.limit);\n }\n return rows;\n}\n\nexport const moveRecord = grouped(function moveRecord(\n db: DbDriver,\n id: string,\n targetId: string,\n where: \"before\" | \"after\",\n): RecordRow {\n if (where !== \"before\" && where !== \"after\")\n throw new MhError(\"invalid_input\", `unknown move position: ${where}`);\n\n const src = db\n .query(\n \"SELECT id, database_id FROM records WHERE id = ? AND __deleted = 0\",\n )\n .get(id) as { id: string; database_id: string } | null;\n if (!src) throw new MhError(\"not_found\", `no such record: ${id}`);\n const target = db\n .query(\n \"SELECT id, database_id FROM records WHERE id = ? AND __deleted = 0\",\n )\n .get(targetId) as { id: string; database_id: string } | null;\n if (!target) throw new MhError(\"not_found\", `no such record: ${targetId}`);\n if (src.database_id !== target.database_id)\n throw new MhError(\"invalid_input\", \"cannot move a record across databases\");\n if (id === targetId) return getRecord(db, id)!;\n\n backfillRecordOrderKeys(db, src.database_id);\n\n let rows = orderedRecordRows(db, src.database_id).filter((r) => r.id !== id);\n let to = rows.findIndex((r) => r.id === targetId);\n if (to < 0) throw new MhError(\"not_found\", `no such target record: ${targetId}`);\n\n let left = where === \"before\" ? (rows[to - 1]?.order_key ?? null) : rows[to]!.order_key;\n let right = where === \"before\" ? rows[to]!.order_key : (rows[to + 1]?.order_key ?? null);\n if (left !== null && right !== null && left >= right) {\n rebalanceRecordOrderKeys(db, src.database_id);\n rows = orderedRecordRows(db, src.database_id).filter((r) => r.id !== id);\n to = rows.findIndex((r) => r.id === targetId);\n left = where === \"before\" ? (rows[to - 1]?.order_key ?? null) : rows[to]!.order_key;\n right = where === \"before\" ? rows[to]!.order_key : (rows[to + 1]?.order_key ?? null);\n }\n emit(db, \"records\", id, \"order_key\", keyBetween(left, right));\n return getRecord(db, id)!;\n});\n\nexport const updateRecord = grouped(function updateRecord(\n db: DbDriver,\n id: string,\n data: Record<string, unknown>,\n): RecordRow {\n const rec = db\n .query(\"SELECT id, database_id FROM records WHERE id = ? AND __deleted = 0\")\n .get(id) as { id: string; database_id: string } | null;\n if (!rec) throw new MhError(\"not_found\", `no such record: ${id}`);\n const resolved = resolveData(listProperties(db, rec.database_id), data);\n for (const { prop, value } of resolved)\n emit(db, \"records\", id, prop.id, coerce(db, prop, value));\n return getRecord(db, id)!;\n});\n\nexport const deleteRecord = grouped(function deleteRecord(db: DbDriver, id: string): boolean {\n const rec = db\n .query(\"SELECT id FROM records WHERE id = ? AND __deleted = 0\")\n .get(id) as { id: string } | null;\n if (!rec) return false;\n emit(db, \"records\", id, \"__deleted\", 1);\n return true;\n});\n",
|
|
115
|
+
"import type { DbDriver } from \"./driver.ts\";\nimport { newId } from \"./ids.ts\";\nimport { emit, grouped } from \"./crdt.ts\";\nimport { MhError } from \"./errors.ts\";\nimport { addProperty, listProperties, type PropertyConfig } from \"./properties.ts\";\nimport { createRecord, listRecords } from \"./records.ts\";\nimport type { ColumnsOf } from \"./sqlcols.ts\";\n\nexport interface DatabaseRow {\n id: string;\n name: string;\n icon: string | null;\n created_hlc: string;\n}\n\nexport const DATABASE_COLS = [\"id\", \"name\", \"icon\", \"created_hlc\"] as const;\nconst _databaseCols: ColumnsOf<DatabaseRow, typeof DATABASE_COLS> = DATABASE_COLS;\nconst DATABASE_SELECT = DATABASE_COLS.join(\", \");\n\nexport const createDatabase = grouped(function createDatabase(\n db: DbDriver,\n opts: { name: string; icon?: string },\n): DatabaseRow {\n const id = newId(\"db\", opts.name);\n const first = emit(db, \"databases\", id, \"name\", opts.name);\n emit(db, \"databases\", id, \"created_hlc\", first.hlc);\n if (opts.icon !== undefined) emit(db, \"databases\", id, \"icon\", opts.icon);\n return getDatabase(db, id)!;\n});\n\nexport const updateDatabase = grouped(function updateDatabase(\n db: DbDriver,\n id: string,\n fields: { name?: string; icon?: string | null },\n): DatabaseRow {\n if (!getDatabase(db, id)) throw new MhError(\"not_found\", `no such database: ${id}`);\n if (fields.name !== undefined) emit(db, \"databases\", id, \"name\", fields.name);\n if (fields.icon !== undefined) emit(db, \"databases\", id, \"icon\", fields.icon);\n return getDatabase(db, id)!;\n});\n\n/**\n * Copy a database whole — name, icon, every property (type/config/position\n * preserved) and every record (in order, cells carried via an old→new property\n * id map, so duplicate property names copy losslessly). A relation column\n * pointing back at the *source* database is remapped to the copy so it stays\n * self-referential; relations to other databases keep their target.\n * `name`/`icon` override the defaults; the locale \"copy\" suffix is the\n * caller's job. All emits share one txn, so the copy syncs as one revision.\n */\nexport const duplicateDatabase = grouped(function duplicateDatabase(\n db: DbDriver,\n id: string,\n opts: { name?: string; icon?: string } = {},\n): DatabaseRow {\n const src = getDatabase(db, id);\n if (!src) throw new MhError(\"not_found\", `no such database: ${id}`);\n const dup = createDatabase(db, {\n name: opts.name ?? src.name,\n icon: (opts.icon ?? src.icon) ?? undefined,\n });\n const propIdMap = new Map<string, string>();\n for (const p of listProperties(db, id)) {\n const config: PropertyConfig | undefined =\n p.config?.database === id ? { ...p.config, database: dup.id } : (p.config ?? undefined);\n const np = addProperty(db, dup.id, { name: p.name, type: p.type, config, position: p.position });\n propIdMap.set(p.id, np.id);\n }\n for (const r of listRecords(db, id)) {\n const data: Record<string, unknown> = {};\n for (const [pid, v] of Object.entries(r.cells)) {\n const nid = propIdMap.get(pid);\n if (nid) data[nid] = v;\n }\n createRecord(db, dup.id, data);\n }\n return getDatabase(db, dup.id)!;\n});\n\nexport function getDatabase(db: DbDriver, id: string): DatabaseRow | null {\n return db\n .query(`SELECT ${DATABASE_SELECT} FROM databases WHERE id = ? AND __deleted = 0`)\n .get(id) as DatabaseRow | null;\n}\n\nexport function listDatabases(db: DbDriver): DatabaseRow[] {\n return db\n .query(`SELECT ${DATABASE_SELECT} FROM databases WHERE __deleted = 0 ORDER BY created_hlc`)\n .all() as DatabaseRow[];\n}\n\nexport const deleteDatabase = grouped(function deleteDatabase(db: DbDriver, id: string): boolean {\n if (!getDatabase(db, id)) return false;\n emit(db, \"databases\", id, \"__deleted\", 1);\n\n // Cascade so nothing is left dangling (the same fixes repairHub would make off\n // the database tombstone, applied eagerly here by the deleting node):\n // - properties/records are meaningless without the database -> tombstone;\n // - documents keep an optional scope link -> detach so their content survives.\n const tombstone = (table: string) => {\n for (const r of liveChildren(db, table, \"database_id\", id))\n emit(db, table, r, \"__deleted\", 1);\n };\n tombstone(\"properties\");\n tombstone(\"records\");\n for (const d of liveChildren(db, \"documents\", \"database_id\", id))\n emit(db, \"documents\", d, \"database_id\", null);\n\n // Drop the \"current database\" pointer if it referenced this one (raw query to\n // avoid a context.ts <-> databases.ts import cycle; read-side also self-heals).\n db.query(\"DELETE FROM meta WHERE key = 'current_db' AND value = ?\").run(id);\n return true;\n});\n\n/** Ids of live rows in `table` whose `col` references `parentId`. */\nfunction liveChildren(db: DbDriver, table: string, col: string, parentId: string): string[] {\n return (\n db\n .query(`SELECT id FROM ${table} WHERE ${col} = ? AND __deleted = 0`)\n .all(parentId) as { id: string }[]\n ).map((r) => r.id);\n}\n",
|
|
116
|
+
"import type { DbDriver } from \"./driver.ts\";\nimport { newId } from \"./ids.ts\";\nimport { emit, grouped } from \"./crdt.ts\";\nimport { getDatabase } from \"./databases.ts\";\nimport { ensurePropIndex } from \"./indexing.ts\";\nimport { MhError } from \"./errors.ts\";\nimport type { ColumnsOf } from \"./sqlcols.ts\";\n\nexport type PropType =\n | \"text\"\n | \"number\"\n | \"checkbox\"\n | \"select\"\n | \"multi_select\"\n | \"date\"\n | \"relation\"\n | \"url\";\n\nexport const PROP_TYPES: ReadonlySet<string> = new Set([\n \"text\",\n \"number\",\n \"checkbox\",\n \"select\",\n \"multi_select\",\n \"date\",\n \"relation\",\n \"url\",\n]);\n\nexport interface PropertyConfig {\n options?: string[]; // select / multi_select\n database?: string; // relation target database id\n indexed?: boolean; // hot query key — materialize an index for this field\n width?: number; // table column width in px (UI metadata, replicated via config)\n}\n\nexport interface PropertyRow {\n id: string;\n database_id: string;\n name: string;\n type: PropType;\n config: PropertyConfig | null;\n position: number;\n}\n\n// SQL returns config as a JSON string; rows are parsed into PropertyRow after.\nexport const PROPERTY_COLS = [\"id\", \"database_id\", \"name\", \"type\", \"config\", \"position\"] as const;\nconst _propertyCols: ColumnsOf<PropertyRow, typeof PROPERTY_COLS> = PROPERTY_COLS;\nconst PROPERTY_SELECT = PROPERTY_COLS.join(\", \");\n\nfunction validateConfig(type: PropType, config: PropertyConfig | undefined): void {\n if (type === \"select\" || type === \"multi_select\") {\n const opts = config?.options;\n if (!Array.isArray(opts) || opts.length === 0 || !opts.every((o) => typeof o === \"string\"))\n throw new MhError(\"invalid_input\", `${type} requires config.options: string[]`);\n }\n if (type === \"relation\") {\n if (typeof config?.database !== \"string\")\n throw new MhError(\"invalid_input\", \"relation requires config.database (target database id)\");\n }\n}\n\nfunction nextPosition(db: DbDriver, databaseId: string): number {\n const row = db\n .query(\n \"SELECT MAX(position) AS m FROM properties WHERE database_id = ? AND __deleted = 0\",\n )\n .get(databaseId) as { m: number | null };\n return (row.m ?? 0) + 1;\n}\n\nexport const addProperty = grouped(function addProperty(\n db: DbDriver,\n databaseId: string,\n opts: {\n name: string;\n type: PropType;\n config?: PropertyConfig;\n position?: number;\n // Low-level hint for built-in features that know a field is a hot query\n // key (e.g. an IM conversation id). Not surfaced to CLI users — ad-hoc\n // fields get indexed automatically from query usage (see indexing.ts).\n indexed?: boolean;\n },\n): PropertyRow {\n if (!getDatabase(db, databaseId)) throw new MhError(\"not_found\", `no such database: ${databaseId}`);\n if (!PROP_TYPES.has(opts.type)) throw new MhError(\"invalid_input\", `unknown property type: ${opts.type}`);\n validateConfig(opts.type, opts.config);\n\n // Persist the indexed hint in config so it replicates to peers and survives\n // snapshot/restore (the index itself is derived, not in the oplog).\n const config: PropertyConfig | null = opts.indexed\n ? { ...(opts.config ?? {}), indexed: true }\n : (opts.config ?? null);\n\n const id = newId(\"prop\", opts.name);\n emit(db, \"properties\", id, \"database_id\", databaseId);\n emit(db, \"properties\", id, \"name\", opts.name);\n emit(db, \"properties\", id, \"type\", opts.type);\n emit(db, \"properties\", id, \"config\", config);\n emit(db, \"properties\", id, \"position\", opts.position ?? nextPosition(db, databaseId));\n\n // Relations are almost always query keys; index eagerly. Honor explicit hint.\n if (opts.type === \"relation\" || opts.indexed === true)\n ensurePropIndex(db, databaseId, id);\n return getProperty(db, id)!;\n});\n\nexport function getProperty(db: DbDriver, id: string): PropertyRow | null {\n const row = db\n .query(`SELECT ${PROPERTY_SELECT} FROM properties WHERE id = ? AND __deleted = 0`)\n .get(id) as (Omit<PropertyRow, \"config\"> & { config: string | null }) | null;\n if (!row) return null;\n return { ...row, config: row.config ? (JSON.parse(row.config) as PropertyConfig) : null };\n}\n\nexport function listProperties(db: DbDriver, databaseId: string): PropertyRow[] {\n const rows = db\n .query(\n `SELECT ${PROPERTY_SELECT} FROM properties WHERE database_id = ? AND __deleted = 0 ORDER BY position`,\n )\n .all(databaseId) as (Omit<PropertyRow, \"config\"> & { config: string | null })[];\n return rows.map((r) => ({\n ...r,\n config: r.config ? (JSON.parse(r.config) as PropertyConfig) : null,\n }));\n}\n\nexport const updateProperty = grouped(function updateProperty(\n db: DbDriver,\n id: string,\n fields: { name?: string; type?: PropType; config?: PropertyConfig; position?: number },\n): PropertyRow {\n const cur = getProperty(db, id);\n if (!cur) throw new MhError(\"not_found\", `no such property: ${id}`);\n\n const typeChanged = fields.type !== undefined && fields.type !== cur.type;\n if (fields.type !== undefined && !PROP_TYPES.has(fields.type))\n throw new MhError(\"invalid_input\", `unknown property type: ${fields.type}`);\n\n // Validate config against whichever type will be in effect.\n const effectiveType = fields.type ?? cur.type;\n if (fields.config !== undefined) validateConfig(effectiveType, fields.config);\n else if (typeChanged) validateConfig(fields.type!, undefined);\n\n if (fields.name !== undefined) emit(db, \"properties\", id, \"name\", fields.name);\n if (fields.type !== undefined) emit(db, \"properties\", id, \"type\", fields.type);\n if (fields.config !== undefined) emit(db, \"properties\", id, \"config\", fields.config);\n if (fields.position !== undefined) emit(db, \"properties\", id, \"position\", fields.position);\n\n // A type change invalidates existing cell values (a number may not be a valid\n // select option, etc.), so clear the cells that currently hold a value for\n // this property. The field is keyed by property id in the records data JSON.\n if (typeChanged) {\n const rows = db\n .query(\n \"SELECT id FROM records WHERE database_id = ? AND __deleted = 0 AND data ->> ? IS NOT NULL\",\n )\n .all(cur.database_id, id) as { id: string }[];\n for (const r of rows) emit(db, \"records\", r.id, id, null);\n }\n return getProperty(db, id)!;\n});\n\n// Persist a column's display width. Merges into the existing config server-side\n// so concurrent callers can't strip sibling fields (e.g. a select's `options`),\n// and clamps to a sane range. The width replicates with `config` via the oplog.\nexport function setPropertyWidth(db: DbDriver, id: string, width: number): PropertyRow {\n const cur = getProperty(db, id);\n if (!cur) throw new MhError(\"not_found\", `no such property: ${id}`);\n if (!Number.isFinite(width)) throw new MhError(\"invalid_input\", \"width must be a finite number\");\n const w = Math.max(80, Math.min(2000, Math.round(width)));\n return updateProperty(db, id, { config: { ...(cur.config ?? {}), width: w } });\n}\n\nexport const removeProperty = grouped(function removeProperty(db: DbDriver, id: string): boolean {\n const prop = getProperty(db, id);\n if (!prop) return false;\n emit(db, \"properties\", id, \"__deleted\", 1);\n // Clear this property's now-orphaned cells (keyed by property id in the records\n // data JSON) so no dead cell data lingers — same cleanup repairHub would do off\n // the property tombstone. emit(undefined) materializes to json_remove.\n const rows = db\n .query(\n \"SELECT id FROM records WHERE database_id = ? AND __deleted = 0 AND data ->> ? IS NOT NULL\",\n )\n .all(prop.database_id, id) as { id: string }[];\n for (const r of rows) emit(db, \"records\", r.id, id, undefined);\n return true;\n});\n",
|
|
117
|
+
"import type { DbDriver } from \"./driver.ts\";\nimport type { PropertyRow } from \"./properties.ts\";\n\n// Records of all databases share one `records` table; indexes are partial on\n// database_id so they stay small and per-collection. A field is indexed only\n// when it's actually used to filter/sort AND the collection is large enough to\n// matter — small tables scan instantly and don't earn the write cost.\nconst AUTO_INDEX_ROW_THRESHOLD = 2000;\n\n/** SQLite identifiers we build are slug+suffix ids; keep only safe chars. */\nfunction sanitize(s: string): string {\n return s.replace(/[^a-zA-Z0-9_]/g, \"_\");\n}\n\n/** Escape a string for embedding as a single-quoted SQL literal. */\nfunction lit(s: string): string {\n return s.replace(/'/g, \"''\");\n}\n\nfunction indexName(databaseId: string, propId: string): string {\n return `idx_rec_${sanitize(databaseId)}_${sanitize(propId)}`;\n}\n\nexport function hasIndex(db: DbDriver, databaseId: string, propId: string): boolean {\n const row = db\n .query(\"SELECT 1 AS ok FROM sqlite_master WHERE type = 'index' AND name = ?\")\n .get(indexName(databaseId, propId)) as { ok: number } | null;\n return row != null;\n}\n\n/**\n * Create an expression index on `data ->> '<propId>'` (with created_hlc as the\n * sort tail), partial on this database. Idempotent. The expression matches\n * exactly what listRecords emits, so the optimizer uses it.\n */\nexport function ensurePropIndex(db: DbDriver, databaseId: string, propId: string): void {\n const name = indexName(databaseId, propId);\n db.exec(\n `CREATE INDEX IF NOT EXISTS \"${name}\" ON records (data ->> '${lit(propId)}', created_hlc) ` +\n `WHERE database_id = '${lit(databaseId)}' AND __deleted = 0`,\n );\n}\n\n/**\n * Ensure an index for a field that a query filters/sorts on — but only when it\n * will pay off. relation fields are almost always query keys (cheap, index\n * eagerly); other fields wait until the collection crosses the row threshold.\n */\nexport function maybeAutoIndex(db: DbDriver, databaseId: string, prop: PropertyRow): void {\n if (hasIndex(db, databaseId, prop.id)) return;\n if (prop.type !== \"relation\") {\n const row = db\n .query(\n \"SELECT COUNT(*) AS c FROM records WHERE database_id = ? AND __deleted = 0\",\n )\n .get(databaseId) as { c: number };\n if (row.c < AUTO_INDEX_ROW_THRESHOLD) return;\n }\n ensurePropIndex(db, databaseId, prop.id);\n}\n",
|
|
118
|
+
"import type { DbDriver } from \"./driver.ts\";\nimport { idKind, type Kind } from \"./ids.ts\";\nimport { MhError } from \"./errors.ts\";\n\n/** Kinds reachable through the public reference resolver. `blk` is internal. */\nexport type PublicKind = \"db\" | \"prop\" | \"rec\" | \"doc\";\n\nexport interface Candidate {\n kind: PublicKind;\n id: string;\n label: string;\n}\n\ninterface KindSpec {\n table: string;\n nameCol: string | null; // column matched by name/title (null = no name match)\n scoped: boolean; // filtered by database_id when a scope is supplied\n noun: string; // human label for \"no such <noun>\"\n}\n\nconst SPECS: Record<PublicKind, KindSpec> = {\n db: { table: \"databases\", nameCol: \"name\", scoped: false, noun: \"database\" },\n prop: { table: \"properties\", nameCol: \"name\", scoped: true, noun: \"property\" },\n rec: { table: \"records\", nameCol: null, scoped: true, noun: \"record\" },\n doc: { table: \"documents\", nameCol: \"title\", scoped: true, noun: \"document\" },\n};\n\nconst PUBLIC_KINDS: PublicKind[] = [\"db\", \"prop\", \"rec\", \"doc\"];\n\nfunction isPublic(k: Kind | null): k is PublicKind {\n return k !== null && k !== \"blk\";\n}\n\ntype SqlValue = string;\n\n// '{' (0x7B) is the first code point above every char an id can contain\n// ([a-z0-9_-], max 'z' = 0x7A), so [p, p+'{') is exactly the set of ids with\n// prefix p under BINARY collation — a primary-key range scan, no LIKE wildcards.\nconst HI = \"{\";\n\n/** The first text property's id for a database — a record's de-facto title. */\nfunction titlePropId(db: DbDriver, databaseId: string): string | null {\n const row = db\n .query(\n \"SELECT id FROM properties WHERE database_id = ? AND type = 'text' AND __deleted = 0 ORDER BY position LIMIT 1\",\n )\n .get(databaseId) as { id: string } | null;\n return row?.id ?? null;\n}\n\n/** All live rows of one kind matching `ref` by id-prefix or name. */\nfunction queryKind(\n db: DbDriver,\n kind: PublicKind,\n ref: string,\n databaseId?: string,\n): Candidate[] {\n const spec = SPECS[kind];\n // Records have no name column; when scoped to a database, match/show the\n // first text property's value (its title) so \"Alice Chen\" resolves.\n let nameCol = spec.nameCol;\n if (kind === \"rec\" && databaseId) {\n const tp = titlePropId(db, databaseId);\n if (tp) nameCol = `data ->> '${tp.replace(/'/g, \"''\")}'`;\n }\n const labelExpr = nameCol ?? \"''\"; // kinds without a name show id only\n const conds: string[] = [];\n const args: SqlValue[] = [];\n\n // Raw prefix (covers an exact full id, and a typed prefix like \"rec_log\").\n conds.push(\"(id >= ? AND id < ?)\");\n args.push(ref, ref + HI);\n // Typed slug prefix: lets a bare slug \"login-bug\" hit \"rec_login-bug-…\".\n const typed = `${kind}_${ref}`;\n conds.push(\"(id >= ? AND id < ?)\");\n args.push(typed, typed + HI);\n // Name/title equality (case-insensitive), where the kind has a name.\n if (nameCol) {\n conds.push(`lower(${nameCol}) = lower(?)`);\n args.push(ref);\n }\n\n let sql = `SELECT id, ${labelExpr} AS label FROM ${spec.table} WHERE __deleted = 0 AND (${conds.join(\" OR \")})`;\n if (spec.scoped && databaseId) {\n sql += \" AND database_id = ?\";\n args.push(databaseId);\n }\n\n const rows = db.query(sql).all(...args) as { id: string; label: string | null }[];\n return rows.map((r) => ({ kind, id: r.id, label: r.label ?? \"\" }));\n}\n\n/**\n * Every entity matching `ref`. Kind scope: an explicit `opts.kind` (the command\n * knows what it wants) wins; otherwise a typed prefix on `ref` dispatches; else\n * all public kinds are searched (the generic `mh get`). `databaseId` narrows\n * rec/doc/prop to one collection.\n */\nexport function resolveCandidates(\n db: DbDriver,\n ref: string,\n opts: { kind?: PublicKind; databaseId?: string } = {},\n): Candidate[] {\n const kinds: PublicKind[] = opts.kind\n ? [opts.kind]\n : isPublic(idKind(ref))\n ? [idKind(ref) as PublicKind]\n : PUBLIC_KINDS;\n\n const out: Candidate[] = [];\n const seen = new Set<string>();\n for (const k of kinds) {\n for (const c of queryKind(db, k, ref, opts.databaseId)) {\n if (seen.has(c.id)) continue;\n seen.add(c.id);\n out.push(c);\n }\n }\n return out;\n}\n\nfunction fmt(cands: Candidate[]): string {\n return cands\n .map((c) => ` ${c.id}${c.label ? \" \" + c.label : \"\"} (${c.kind})`)\n .join(\"\\n\");\n}\n\n/**\n * Resolve `ref` to one entity. An exact full-id match always wins (the full id\n * keeps working). Otherwise a single candidate is returned; zero throws\n * \"no such …\"; multiple throws a git-style ambiguity list.\n */\nexport function resolveEntity(\n db: DbDriver,\n ref: string,\n opts: { kind?: PublicKind; databaseId?: string } = {},\n): Candidate {\n const cands = resolveCandidates(db, ref, opts);\n const exact = cands.filter((c) => c.id === ref);\n if (exact.length === 1) return exact[0]!;\n if (exact.length === 0 && cands.length === 1) return cands[0]!;\n\n if (cands.length === 0) {\n const noun = opts.kind ? SPECS[opts.kind].noun : \"item\";\n throw new MhError(\"not_found\", `no such ${noun}: ${ref}`);\n }\n const shown = exact.length > 1 ? exact : cands;\n throw new MhError(\n \"ambiguous\",\n `ambiguous \"${ref}\" — ${shown.length} matches:\\n${fmt(shown)}\\n add more characters.`,\n );\n}\n\n/** Resolve `ref` to one concrete row id. See {@link resolveEntity}. */\nexport function resolveRef(\n db: DbDriver,\n ref: string,\n opts: { kind?: PublicKind; databaseId?: string } = {},\n): string {\n return resolveEntity(db, ref, opts).id;\n}\n",
|
|
119
|
+
"// Fractional indexing: compact string keys that sort lexicographically, so a new\n// key can always be produced strictly between two existing ones. Used to order\n// document blocks; concurrent inserts at the same slot are tie-broken by block id.\n//\n// Alphabet is base62 with ASCII order matching digit order (0-9 < A-Z < a-z), so\n// SQLite's default BINARY collation orders keys correctly with plain `ORDER BY`.\n\nconst DIGITS = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";\n\n/**\n * A digit string strictly between `a` and `b`. `a` is a digit string (possibly\n * \"\" = start) and `b` is a digit string or null (= end), with `a < b`. Neither\n * may end in the zero digit; this invariant is preserved by construction.\n */\nfunction midpoint(a: string, b: string | null): string {\n const zero = DIGITS[0]!;\n if (b !== null && a >= b) throw new Error(`fracdex: ${a} >= ${b}`);\n if (a.endsWith(zero) || (b !== null && b.endsWith(zero)))\n throw new Error(`fracdex: trailing zero in ${a}/${b}`);\n\n if (b !== null) {\n // Strip the common prefix, padding `a` with implicit zeros as we descend.\n let n = 0;\n while ((a[n] ?? zero) === b[n]) n++;\n if (n > 0) return b.slice(0, n) + midpoint(a.slice(n), b.slice(n));\n }\n\n const da = a === \"\" ? 0 : DIGITS.indexOf(a[0]!);\n const db = b === null ? DIGITS.length : DIGITS.indexOf(b[0]!);\n if (db - da > 1) {\n const mid = Math.round(0.5 * (da + db));\n return DIGITS[mid]!;\n }\n // First digits are consecutive (or equal at the boundary): descend.\n if (b !== null && b.length > 1) return b.slice(0, 1);\n return DIGITS[da]! + midpoint(a.slice(1), null);\n}\n\n/** A key strictly between `a` and `b` (lexicographically). null = open boundary. */\nexport function keyBetween(a: string | null, b: string | null): string {\n return midpoint(a ?? \"\", b);\n}\n\n/** `n` distinct keys in ascending order, all strictly between `a` and `b`. */\nexport function keysBetween(\n a: string | null,\n b: string | null,\n n: number,\n): string[] {\n if (n <= 0) return [];\n if (n === 1) return [keyBetween(a, b)];\n\n if (b === null) {\n let prev = keyBetween(a, null);\n const out = [prev];\n for (let i = 1; i < n; i++) {\n prev = keyBetween(prev, null);\n out.push(prev);\n }\n return out;\n }\n if (a === null) {\n let next = keyBetween(null, b);\n const out = [next];\n for (let i = 1; i < n; i++) {\n next = keyBetween(null, next);\n out.unshift(next);\n }\n return out;\n }\n\n // Both bounded: bisect so key lengths grow logarithmically.\n const mid = Math.floor(n / 2);\n const c = keyBetween(a, b);\n return [...keysBetween(a, c, mid), c, ...keysBetween(c, b, n - mid - 1)];\n}\n",
|
|
120
|
+
"import type { DbDriver } from \"./driver.ts\";\nimport { newId } from \"./ids.ts\";\nimport { emit, grouped } from \"./crdt.ts\";\nimport { parseDocBlocks, serializeDocBlocks, reconcile, type DocBlock } from \"./blocks.ts\";\nimport { keyBetween, keysBetween } from \"./fracdex.ts\";\nimport { MhError } from \"./errors.ts\";\nimport type { ColumnsOf } from \"./sqlcols.ts\";\n\nexport interface DocumentRow {\n id: string;\n title: string;\n body: string | null;\n database_id: string | null;\n parent_id: string | null;\n created_hlc: string;\n order_key: string | null;\n}\n\nexport type DocumentSummary = Omit<DocumentRow, \"body\">;\n\nexport const DOCUMENT_COLS = [\n \"id\", \"title\", \"body\", \"database_id\", \"parent_id\", \"created_hlc\", \"order_key\",\n] as const;\nconst _documentCols: ColumnsOf<DocumentRow, typeof DOCUMENT_COLS> = DOCUMENT_COLS;\nconst DOCUMENT_SELECT = DOCUMENT_COLS.join(\", \");\n\nconst DOC_SUMMARY_COLS = [\n \"id\", \"title\", \"database_id\", \"parent_id\", \"created_hlc\", \"order_key\",\n] as const;\nconst _docSummaryCols: ColumnsOf<DocumentSummary, typeof DOC_SUMMARY_COLS> = DOC_SUMMARY_COLS;\nconst DOC_SUMMARY_SELECT = DOC_SUMMARY_COLS.join(\", \");\n\ninterface BlockRow {\n id: string;\n text: string;\n order_key: string;\n blank_after: number;\n}\n\n// ---- block helpers ---------------------------------------------------------\n\nfunction liveBlocks(db: DbDriver, docId: string): BlockRow[] {\n return db\n .query(\n \"SELECT id, text, order_key, blank_after FROM doc_blocks WHERE doc_id = ? AND __deleted = 0 ORDER BY order_key, id\",\n )\n .all(docId) as BlockRow[];\n}\n\nfunction makeBlockId(text: string): string {\n return newId(\"blk\", text.split(\"\\n\", 1)[0] ?? \"\");\n}\n\n/** Emit a new block's fields; text last so the final body recompute is complete.\n * blank_after is only emitted when non-zero (0 is the column default). */\nfunction emitBlock(\n db: DbDriver,\n docId: string,\n fields: { text: string; order_key: string; blankAfter: number },\n): void {\n const id = makeBlockId(fields.text);\n emit(db, \"doc_blocks\", id, \"doc_id\", docId);\n emit(db, \"doc_blocks\", id, \"order_key\", fields.order_key);\n if (fields.blankAfter) emit(db, \"doc_blocks\", id, \"blank_after\", fields.blankAfter);\n emit(db, \"doc_blocks\", id, \"text\", fields.text);\n}\n\nfunction insertBlocks(\n db: DbDriver,\n docId: string,\n blocks: readonly DocBlock[],\n after: string | null,\n before: string | null,\n): void {\n const keys = keysBetween(after, before, blocks.length);\n blocks.forEach((b, i) =>\n emitBlock(db, docId, { text: b.text, order_key: keys[i]!, blankAfter: b.blankAfter }),\n );\n}\n\n/** Lazily migrate a legacy body-only document into blocks (idempotent). */\nfunction ensureBlocks(db: DbDriver, docId: string): void {\n if (db.query(\"SELECT 1 AS x FROM doc_blocks WHERE doc_id = ? LIMIT 1\").get(docId))\n return;\n const row = db.query(\"SELECT body FROM documents WHERE id = ?\").get(docId) as\n | { body: string | null }\n | null;\n const blocks = parseDocBlocks(row?.body ?? \"\");\n if (blocks.length) insertBlocks(db, docId, blocks, null, null);\n}\n\n/** Diff a full new body against current blocks; keep unchanged, delete/insert the rest. */\nfunction reconcileBody(db: DbDriver, docId: string, body: string): void {\n const old = liveBlocks(db, docId);\n const next = parseDocBlocks(body);\n const plan = reconcile(\n old.map((b) => b.text),\n next.map((b) => b.text),\n );\n\n for (const oi of plan.deleted) emit(db, \"doc_blocks\", old[oi]!.id, \"__deleted\", 1);\n\n const { items } = plan;\n let i = 0;\n while (i < items.length) {\n const it = items[i]!;\n if (\"keep\" in it) {\n // Text unchanged: only the surrounding blank-line count may have shifted.\n const oldB = old[it.keep]!;\n const want = next[i]!.blankAfter;\n if ((oldB.blank_after ?? 0) !== want) emit(db, \"doc_blocks\", oldB.id, \"blank_after\", want);\n i++;\n continue;\n }\n let j = i;\n while (j < items.length && \"insert\" in items[j]!) j++;\n const left = i > 0 ? old[(items[i - 1] as { keep: number }).keep]!.order_key : null;\n const right = j < items.length ? old[(items[j] as { keep: number }).keep]!.order_key : null;\n insertBlocks(db, docId, next.slice(i, j), left, right);\n i = j;\n }\n}\n\n/** Max HLC over a document's own register and all its blocks — a read/edit token. */\nexport function documentVersion(db: DbDriver, id: string): string {\n const row = db\n .query(\n `SELECT MAX(hlc) AS h FROM crdt_changes\n WHERE (dataset = 'documents' AND row_id = ?)\n OR (dataset = 'doc_blocks' AND row_id IN (SELECT id FROM doc_blocks WHERE doc_id = ?))`,\n )\n .get(id, id) as { h: string | null };\n return row.h ?? \"\";\n}\n\n// ---- public API ------------------------------------------------------------\n\nexport const createDocument = grouped(function createDocument(\n db: DbDriver,\n opts: { title: string; body?: string; database_id?: string; parent_id?: string },\n): DocumentRow {\n const id = newId(\"doc\", opts.title);\n const first = emit(db, \"documents\", id, \"title\", opts.title);\n emit(db, \"documents\", id, \"created_hlc\", first.hlc);\n if (opts.database_id !== undefined) emit(db, \"documents\", id, \"database_id\", opts.database_id);\n if (opts.parent_id !== undefined) emit(db, \"documents\", id, \"parent_id\", opts.parent_id);\n placeInSiblings(db, id, opts.parent_id ?? null); // append to the end of its sibling group\n if (opts.body !== undefined) {\n const blocks = parseDocBlocks(opts.body);\n if (blocks.length) insertBlocks(db, id, blocks, null, null);\n }\n return getDocument(db, id)!;\n});\n\nexport function getDocument(db: DbDriver, id: string): DocumentRow | null {\n return db\n .query(`SELECT ${DOCUMENT_SELECT} FROM documents WHERE id = ? AND __deleted = 0`)\n .get(id) as DocumentRow | null;\n}\n\n/** Display order among siblings: explicit order_key first, NULLs fall back to\n * creation time so an un-backfilled tree still renders in its historical order. */\nconst ORDER_BY = \"ORDER BY order_key IS NULL, order_key, created_hlc, id\";\n\nexport function listDocuments(\n db: DbDriver,\n opts: { database_id?: string; parent_id?: string } = {},\n): DocumentSummary[] {\n const cols = `SELECT ${DOC_SUMMARY_SELECT} FROM documents WHERE __deleted = 0`;\n if (opts.parent_id !== undefined)\n return db\n .query(`${cols} AND parent_id = ? ${ORDER_BY}`)\n .all(opts.parent_id) as DocumentSummary[];\n if (opts.database_id)\n return db\n .query(`${cols} AND database_id = ? ${ORDER_BY}`)\n .all(opts.database_id) as DocumentSummary[];\n return db.query(`${cols} ${ORDER_BY}`).all() as DocumentSummary[];\n}\n\n// ---- sibling ordering (fractional index scoped per parent_id) --------------\n\ninterface SiblingRow {\n id: string;\n order_key: string | null;\n}\n\n/** WHERE fragment + args selecting siblings under `parentId` (null = top level). */\nfunction siblingWhere(parentId: string | null): { clause: string; args: string[] } {\n return parentId === null\n ? { clause: \"parent_id IS NULL\", args: [] }\n : { clause: \"parent_id = ?\", args: [parentId] };\n}\n\nfunction canEmitOrderKeys(db: DbDriver): boolean {\n return tableExists(db, \"meta\") && tableExists(db, \"crdt_changes\");\n}\n\nfunction tableExists(db: DbDriver, table: string): boolean {\n return (\n db\n .query(\"SELECT 1 AS ok FROM sqlite_master WHERE type = 'table' AND name = ?\")\n .get(table) != null\n );\n}\n\n/** Greatest order_key among siblings (optionally ignoring one row being placed). */\nfunction lastSiblingOrderKey(\n db: DbDriver,\n parentId: string | null,\n excludeId?: string,\n): string | null {\n const w = siblingWhere(parentId);\n const exclude = excludeId ? \" AND id <> ?\" : \"\";\n const row = db\n .query(\n `SELECT order_key FROM documents WHERE ${w.clause}${exclude}\n AND __deleted = 0 AND order_key IS NOT NULL\n ORDER BY order_key DESC, id DESC LIMIT 1`,\n )\n .get(...w.args, ...(excludeId ? [excludeId] : [])) as { order_key: string | null } | null;\n return row?.order_key ?? null;\n}\n\nfunction orderedSiblings(db: DbDriver, parentId: string | null): SiblingRow[] {\n const w = siblingWhere(parentId);\n return db\n .query(`SELECT id, order_key FROM documents WHERE ${w.clause} AND __deleted = 0 ${ORDER_BY}`)\n .all(...w.args) as SiblingRow[];\n}\n\n/** Re-space every sibling's key evenly — escape hatch when fractional keys collide. */\nfunction rebalanceSiblings(db: DbDriver, parentId: string | null): void {\n const rows = orderedSiblings(db, parentId);\n const keys = keysBetween(null, null, rows.length);\n rows.forEach((row, i) => {\n if (row.order_key !== keys[i]) emit(db, \"documents\", row.id, \"order_key\", keys[i]!);\n });\n}\n\n/** Assign keys to siblings that still lack one, appending in creation order. */\nfunction backfillSiblings(db: DbDriver, parentId: string | null): void {\n const emitChange = canEmitOrderKeys(db);\n const w = siblingWhere(parentId);\n const missing = db\n .query(\n `SELECT id FROM documents WHERE ${w.clause} AND __deleted = 0 AND order_key IS NULL\n ORDER BY created_hlc, id`,\n )\n .all(...w.args) as { id: string }[];\n if (!missing.length) return;\n const keys = keysBetween(lastSiblingOrderKey(db, parentId), null, missing.length);\n missing.forEach((row, i) => {\n if (emitChange) emit(db, \"documents\", row.id, \"order_key\", keys[i]!);\n else db.query(\"UPDATE documents SET order_key = ? WHERE id = ?\").run(keys[i]!, row.id);\n });\n}\n\n/** Backfill order_key for every parent group that has un-keyed live documents. */\nexport const backfillDocumentOrderKeys = grouped(function backfillDocumentOrderKeys(\n db: DbDriver,\n): void {\n const parents = db\n .query(\"SELECT DISTINCT parent_id FROM documents WHERE __deleted = 0 AND order_key IS NULL\")\n .all() as { parent_id: string | null }[];\n for (const p of parents) backfillSiblings(db, p.parent_id);\n});\n\n/**\n * Place `id` under `parentId` at the given position — the single point where a\n * document's parent_id and order_key are kept consistent (reparent always\n * implies a new sibling scope). No `anchor` appends to the end of the group.\n */\nfunction placeInSiblings(\n db: DbDriver,\n id: string,\n parentId: string | null,\n anchor?: { targetId: string; where: \"before\" | \"after\" },\n): void {\n // Walk the prospective ancestor chain; reaching `id` would form a cycle and\n // make the tree unrenderable. Guarded here so every caller is protected.\n let cur: string | null | undefined = parentId;\n while (cur) {\n if (cur === id) throw new MhError(\"invalid_input\", `cannot set parent_id: would create a cycle (${id})`);\n cur = getDocument(db, cur)?.parent_id ?? null;\n }\n\n const current = getDocument(db, id);\n if (current && (current.parent_id ?? null) !== parentId)\n emit(db, \"documents\", id, \"parent_id\", parentId);\n\n let key: string;\n if (!anchor) {\n key = keyBetween(lastSiblingOrderKey(db, parentId, id), null);\n } else {\n backfillSiblings(db, parentId); // ensure neighbors carry comparable keys\n const neighbors = (): [string | null, string | null] => {\n const rows = orderedSiblings(db, parentId).filter((r) => r.id !== id);\n const to = rows.findIndex((r) => r.id === anchor.targetId);\n if (to < 0) throw new MhError(\"not_found\", `no such target document: ${anchor.targetId}`);\n return anchor.where === \"before\"\n ? [rows[to - 1]?.order_key ?? null, rows[to]!.order_key]\n : [rows[to]!.order_key, rows[to + 1]?.order_key ?? null];\n };\n let [left, right] = neighbors();\n if (left !== null && right !== null && left >= right) {\n rebalanceSiblings(db, parentId);\n [left, right] = neighbors();\n }\n key = keyBetween(left, right);\n }\n emit(db, \"documents\", id, \"order_key\", key);\n}\n\n/**\n * Move a document next to / into another, atomically updating both its parent\n * and its order_key. `into` nests it as the last child of `targetId`;\n * `before`/`after` re-orders (and reparents if needed) among the target's siblings.\n */\nexport const moveDocument = grouped(function moveDocument(\n db: DbDriver,\n id: string,\n targetId: string,\n where: \"before\" | \"after\" | \"into\",\n): DocumentRow {\n const src = getDocument(db, id);\n if (!src) throw new MhError(\"not_found\", `no such document: ${id}`);\n if (id === targetId) return src;\n const target = getDocument(db, targetId);\n if (!target) throw new MhError(\"not_found\", `no such target document: ${targetId}`);\n\n if (where === \"into\") placeInSiblings(db, id, targetId);\n else placeInSiblings(db, id, target.parent_id, { targetId, where });\n return getDocument(db, id)!;\n});\n\n/**\n * Copy a document — title, every block (verbatim, with fresh block ids so the\n * copy edits independently) and its `database_id`/`parent_id`. The copy lands\n * right after its source in the same sibling scope. Blocks are cloned at the\n * block level (not via a markdown round-trip) so empty list items / blank-line\n * runs survive losslessly. `title`/`parentId` override the defaults; the locale\n * \"copy\" suffix is the caller's job. `created_hlc` is the copy's own birth time.\n */\nexport const duplicateDocument = grouped(function duplicateDocument(\n db: DbDriver,\n id: string,\n opts: { title?: string; parentId?: string | null } = {},\n): DocumentRow {\n const src = getDocument(db, id);\n if (!src) throw new MhError(\"not_found\", `no such document: ${id}`);\n ensureBlocks(db, id);\n const blocks = liveBlocks(db, id);\n const parentId = opts.parentId !== undefined ? opts.parentId : src.parent_id;\n const dup = createDocument(db, {\n title: opts.title ?? src.title,\n database_id: src.database_id ?? undefined,\n parent_id: parentId ?? undefined,\n });\n if (blocks.length)\n insertBlocks(\n db,\n dup.id,\n blocks.map((b) => ({ text: b.text, blankAfter: b.blank_after })),\n null,\n null,\n );\n // Sit the copy right after its source when they share a sibling scope.\n if (parentId === src.parent_id) moveDocument(db, dup.id, src.id, \"after\");\n return getDocument(db, dup.id)!;\n});\n\nexport const updateDocument = grouped(function updateDocument(\n db: DbDriver,\n id: string,\n fields: { title?: string; body?: string; database_id?: string; parent_id?: string | null },\n opts: { ifMatch?: string } = {},\n): DocumentRow {\n if (!getDocument(db, id)) throw new MhError(\"not_found\", `no such document: ${id}`);\n // Same staleness backstop as editDocument: a version from documentVersion()\n // rejects the write if the doc changed since the caller read it.\n if (opts.ifMatch !== undefined && documentVersion(db, id) !== opts.ifMatch)\n throw new MhError(\"stale\", `stale: document changed since ${opts.ifMatch}; re-read first`);\n if (fields.title !== undefined) emit(db, \"documents\", id, \"title\", fields.title);\n if (fields.database_id !== undefined) emit(db, \"documents\", id, \"database_id\", fields.database_id);\n if (fields.parent_id !== undefined) {\n // Reparenting moves the document into a new sibling scope, so its order_key\n // must be reassigned too — placeInSiblings keeps both consistent (and guards\n // against cycles) for every caller: CLI, WebUI, sync. Only act on a real\n // change so a no-op PATCH doesn't silently jump the document to the end.\n const next = fields.parent_id ?? null;\n if ((getDocument(db, id)!.parent_id ?? null) !== next) placeInSiblings(db, id, next);\n }\n if (fields.body !== undefined) {\n ensureBlocks(db, id);\n reconcileBody(db, id, fields.body);\n }\n return getDocument(db, id)!;\n});\n\nexport interface EditDocResult {\n id: string;\n changed: boolean;\n replaced: number;\n version: string;\n}\n\n/**\n * Anchored find/replace, like the Edit tool. `old` must occur exactly once\n * (or pass `replaceAll`); supplying it is the read-before-edit guarantee — you\n * cannot author it without current content, and drift surfaces as \"not found\".\n * `ifMatch` is an optional staleness backstop (a version from documentVersion).\n */\nexport const editDocument = grouped(function editDocument(\n db: DbDriver,\n id: string,\n opts: { old: string; new: string; replaceAll?: boolean; ifMatch?: string },\n): EditDocResult {\n if (!getDocument(db, id)) throw new MhError(\"not_found\", `no such document: ${id}`);\n if (opts.ifMatch !== undefined && documentVersion(db, id) !== opts.ifMatch)\n throw new MhError(\"stale\", `stale: document changed since ${opts.ifMatch}; re-read first`);\n if (opts.old === \"\") throw new MhError(\"invalid_input\", \"--old must not be empty\");\n\n ensureBlocks(db, id);\n const blocks = liveBlocks(db, id);\n const body = serializeDocBlocks(blocks.map((b) => ({ text: b.text, blankAfter: b.blank_after })));\n const count = countOccurrences(body, opts.old);\n if (count === 0) throw new MhError(\"invalid_input\", `anchor not found: no match for --old`);\n if (count > 1 && !opts.replaceAll)\n throw new MhError(\n \"ambiguous\",\n `${count} matches for --old; add surrounding context or use --replace-all`,\n );\n\n // Fast path: edit stays within single blocks and introduces no block break.\n if (!opts.old.includes(\"\\n\\n\")) {\n const affected = blocks.filter((b) => b.text.includes(opts.old));\n const next = affected.map((b) =>\n opts.replaceAll ? b.text.replaceAll(opts.old, opts.new) : b.text.replace(opts.old, opts.new),\n );\n if (next.every((t) => t.length > 0 && !t.includes(\"\\n\\n\"))) {\n const targets = opts.replaceAll ? affected : affected.slice(0, 1);\n targets.forEach((b, i) => emit(db, \"doc_blocks\", b.id, \"text\", next[i]!));\n return { id, changed: true, replaced: opts.replaceAll ? count : 1, version: documentVersion(db, id) };\n }\n }\n\n // General path: rewrite the body and reconcile (handles spans/splits/merges).\n const newBody = opts.replaceAll\n ? body.replaceAll(opts.old, opts.new)\n : body.replace(opts.old, opts.new);\n reconcileBody(db, id, newBody);\n return { id, changed: newBody !== body, replaced: opts.replaceAll ? count : 1, version: documentVersion(db, id) };\n});\n\nexport const appendDocument = grouped(function appendDocument(\n db: DbDriver,\n id: string,\n body: string,\n): EditDocResult {\n if (!getDocument(db, id)) throw new MhError(\"not_found\", `no such document: ${id}`);\n ensureBlocks(db, id);\n const next = parseDocBlocks(body);\n if (next.length) {\n const blocks = liveBlocks(db, id);\n const last = blocks.length ? blocks[blocks.length - 1]!.order_key : null;\n insertBlocks(db, id, next, last, null);\n }\n return { id, changed: next.length > 0, replaced: next.length, version: documentVersion(db, id) };\n});\n\nexport const prependDocument = grouped(function prependDocument(\n db: DbDriver,\n id: string,\n body: string,\n): EditDocResult {\n if (!getDocument(db, id)) throw new MhError(\"not_found\", `no such document: ${id}`);\n ensureBlocks(db, id);\n const next = parseDocBlocks(body);\n if (next.length) {\n const blocks = liveBlocks(db, id);\n const first = blocks.length ? blocks[0]!.order_key : null;\n insertBlocks(db, id, next, null, first);\n }\n return { id, changed: next.length > 0, replaced: next.length, version: documentVersion(db, id) };\n});\n\nexport const deleteDocument = grouped(function deleteDocument(db: DbDriver, id: string): boolean {\n if (!getDocument(db, id)) return false;\n emit(db, \"documents\", id, \"__deleted\", 1);\n // Cascade off the tombstone, mirroring repairHub: the doc's blocks are derived\n // content -> tombstone them; live child documents survive as roots -> unparent.\n for (const b of liveChildIds(db, \"doc_blocks\", \"doc_id\", id))\n emit(db, \"doc_blocks\", b, \"__deleted\", 1);\n for (const c of liveChildIds(db, \"documents\", \"parent_id\", id))\n emit(db, \"documents\", c, \"parent_id\", null);\n return true;\n});\n\n/** Ids of live rows in `table` whose `col` references `parentId`. */\nfunction liveChildIds(db: DbDriver, table: string, col: string, parentId: string): string[] {\n return (\n db\n .query(`SELECT id FROM ${table} WHERE ${col} = ? AND __deleted = 0`)\n .all(parentId) as { id: string }[]\n ).map((r) => r.id);\n}\n\nfunction countOccurrences(haystack: string, needle: string): number {\n if (needle === \"\") return 0;\n let n = 0;\n let i = haystack.indexOf(needle);\n while (i !== -1) {\n n++;\n i = haystack.indexOf(needle, i + needle.length);\n }\n return n;\n}\n",
|
|
121
|
+
"// Runtime-agnostic schema bootstrap: everything needed to bring a metahub\n// database to the current schema, typed against the portable driver surface so\n// it runs both on Bun (bun:sqlite) and in a browser worker (sqlite-wasm).\n// Opening the on-disk database lives in db.ts, which composes these.\n\nimport type { DbDriver } from \"./driver.ts\";\nimport { CORE_SCHEMA, FTS_SCHEMA } from \"./schema.ts\";\nimport { backfillRecordOrderKeys } from \"./records.ts\";\nimport { backfillDocumentOrderKeys } from \"./documents.ts\";\n\nexport function runSchema(db: DbDriver): void {\n db.exec(CORE_SCHEMA);\n try {\n db.exec(FTS_SCHEMA);\n } catch {\n // FTS5 unavailable; search will fall back to LIKE.\n }\n}\n\nexport function ftsAvailable(db: DbDriver): boolean {\n const row = db\n .query(\"SELECT 1 AS ok FROM sqlite_master WHERE name = 'search_fts'\")\n .get() as { ok: number } | null;\n return row != null;\n}\n\nfunction hasColumn(db: DbDriver, table: string, column: string): boolean {\n const cols = db.query(`PRAGMA table_info(${table})`).all() as { name: string }[];\n return cols.some((c) => c.name === column);\n}\n\nfunction tableExists(db: DbDriver, table: string): boolean {\n return (\n db\n .query(\"SELECT 1 AS ok FROM sqlite_master WHERE type = 'table' AND name = ?\")\n .get(table) != null\n );\n}\n\n/**\n * Migrate legacy EAV records (record_values: one row per cell) to the JSON\n * layout (records.data: one row per record). Idempotent — keyed off schema\n * shape, no version flag. A no-op for fresh databases.\n */\nexport function migrateRecords(db: DbDriver): void {\n if (!hasColumn(db, \"records\", \"data\"))\n db.exec(\"ALTER TABLE records ADD COLUMN data TEXT NOT NULL DEFAULT '{}'\");\n if (!hasColumn(db, \"records\", \"order_key\"))\n db.exec(\"ALTER TABLE records ADD COLUMN order_key TEXT\");\n\n if (!tableExists(db, \"record_values\")) return;\n\n const tx = db.transaction(() => {\n // Fold each record's cells into a JSON object keyed by property id.\n db.exec(`\n UPDATE records SET data = coalesce((\n SELECT json_group_object(rv.property_id, json(rv.value))\n FROM record_values rv WHERE rv.record_id = records.id\n ), '{}')\n WHERE id IN (SELECT DISTINCT record_id FROM record_values);\n `);\n db.exec(\"DROP TABLE record_values\");\n backfillRecordOrderKeys(db);\n });\n tx();\n\n backfillRecordOrderKeys(db);\n}\n\n/**\n * Add the peer-pairing columns to a legacy `peers` table (token/label/node_id/\n * enabled/last_sync_at/last_success_at/last_status/last_error). Idempotent —\n * guarded per column, never drops the table so existing replication cursors survive.\n */\nexport function migratePeers(db: DbDriver): void {\n const add: [string, string][] = [\n [\"token\", \"TEXT\"],\n [\"label\", \"TEXT\"],\n [\"node_id\", \"TEXT\"],\n [\"enabled\", \"INTEGER NOT NULL DEFAULT 1\"],\n [\"last_sync_at\", \"INTEGER\"],\n [\"last_success_at\", \"INTEGER\"],\n [\"last_status\", \"TEXT\"],\n [\"last_error\", \"TEXT\"],\n // Storage-sync (sync/storage.ts): kind selects the transport, config holds\n // an 's3' peer's bucket settings. Legacy rows default to 'http', unchanged.\n [\"kind\", \"TEXT NOT NULL DEFAULT 'http'\"],\n [\"config\", \"TEXT\"],\n ];\n for (const [col, decl] of add) {\n if (!hasColumn(db, \"peers\", col)) db.exec(`ALTER TABLE peers ADD COLUMN ${col} ${decl}`);\n }\n db.exec(\n \"UPDATE peers SET last_success_at = last_sync_at \" +\n \"WHERE last_success_at IS NULL AND last_status = 'ok' AND last_sync_at IS NOT NULL\",\n );\n}\n\n/**\n * Add the `blank_after` column to a legacy `doc_blocks` table. Idempotent —\n * guarded by hasColumn; existing blocks default to 0 (canonical single-blank-line\n * separators), so the migration never changes an existing document's body.\n */\nexport function migrateDocBlocks(db: DbDriver): void {\n if (!hasColumn(db, \"doc_blocks\", \"blank_after\"))\n db.exec(\"ALTER TABLE doc_blocks ADD COLUMN blank_after INTEGER NOT NULL DEFAULT 0\");\n}\n\n/**\n * Bring a legacy `blob_cache` to the current shape and retire the old synced\n * `blob_presence` table. Idempotent (guarded by hasColumn / IF EXISTS).\n * - `pinned`: node-local, never auto-evicted/cleared.\n * - `pending`: bytes produced here, not yet flushed to a durable anchor. Existing\n * rows can't be classified produced-vs-acquired, so default to 1 (protected);\n * the next online flush sets already-in-bucket blobs back to 0, so it self-heals\n * and is loss-free. See blobs.ts.\n * - `blob_presence` (was synced) is dropped: clearing is now decided locally from\n * `pending`. Leftover presence oplog changes are ignored (forward-compat).\n */\nexport function migrateBlobCache(db: DbDriver): void {\n if (!hasColumn(db, \"blob_cache\", \"pinned\"))\n db.exec(\"ALTER TABLE blob_cache ADD COLUMN pinned INTEGER NOT NULL DEFAULT 0\");\n if (!hasColumn(db, \"blob_cache\", \"pending\"))\n db.exec(\"ALTER TABLE blob_cache ADD COLUMN pending INTEGER NOT NULL DEFAULT 1\");\n if (!hasColumn(db, \"blob_cache\", \"anchored\"))\n db.exec(\"ALTER TABLE blob_cache ADD COLUMN anchored INTEGER NOT NULL DEFAULT 0\");\n db.exec(\"DROP TABLE IF EXISTS blob_presence\");\n}\n\n/**\n * Add the `order_key` column to a legacy `documents` table and backfill it.\n * Idempotent — guarded by hasColumn; backfill only touches rows with a NULL key,\n * assigning per-parent fractional indices in current created_hlc order, so the\n * displayed document order is unchanged until the user first drags something.\n */\nexport function migrateDocuments(db: DbDriver): void {\n if (!hasColumn(db, \"documents\", \"order_key\"))\n db.exec(\"ALTER TABLE documents ADD COLUMN order_key TEXT\");\n backfillDocumentOrderKeys(db);\n}\n\n/**\n * Add the `txn` change-group column to a legacy `crdt_changes` table.\n * Idempotent — guarded by hasColumn; existing rows stay NULL (history falls\n * back to time-gap clustering for them).\n */\nexport function migrateOplog(db: DbDriver): void {\n if (!hasColumn(db, \"crdt_changes\", \"txn\"))\n db.exec(\"ALTER TABLE crdt_changes ADD COLUMN txn TEXT\");\n}\n\n/**\n * Rebuild a legacy `crdt_changes` (composite PRIMARY KEY, implicit rowid) into\n * the current shape with an explicit `seq INTEGER PRIMARY KEY AUTOINCREMENT`.\n *\n * Why: replication push/pull cursors are crdt_changes rowids. The legacy table\n * has no declared INTEGER PRIMARY KEY, so a `VACUUM` (run by `mh` compaction)\n * renumbers its rowids 1..N; a peer's stored cursor then sits above the new\n * MAX(rowid) and `changesAfterSeq`'s \"never regress\" floor pins it there,\n * silently never pushing/pulling the writes below it. The declared `seq` is\n * stable across VACUUM and never reused, closing the hole.\n *\n * Idempotent — guarded by the `seq` column. Old rowids are copied verbatim into\n * seq so any *uncorrupted* cursor stays meaningful; then push/pull cursors are\n * reset to 0 because we cannot tell which were already stranded by a past\n * VACUUM, and a from-scratch re-sync is safe (INSERT OR IGNORE / ingest dedup)\n * — a one-time catch-up on first sync after upgrade. storage_cursors are\n * object-key based, never rowids, so they are left intact.\n */\nexport function migrateCrdtChangesSeq(db: DbDriver): void {\n if (hasColumn(db, \"crdt_changes\", \"seq\")) return;\n const tx = db.transaction(() => {\n db.exec(`\n DROP TABLE IF EXISTS crdt_changes_new;\n CREATE TABLE crdt_changes_new (\n seq INTEGER PRIMARY KEY AUTOINCREMENT,\n hlc TEXT NOT NULL,\n node_id TEXT NOT NULL,\n dataset TEXT NOT NULL,\n row_id TEXT NOT NULL,\n col TEXT NOT NULL,\n value TEXT,\n txn TEXT,\n UNIQUE (dataset, row_id, col, hlc)\n );\n INSERT INTO crdt_changes_new (seq, hlc, node_id, dataset, row_id, col, value, txn)\n SELECT rowid, hlc, node_id, dataset, row_id, col, value, txn\n FROM crdt_changes ORDER BY rowid;\n DROP TABLE crdt_changes;\n ALTER TABLE crdt_changes_new RENAME TO crdt_changes;\n CREATE INDEX IF NOT EXISTS idx_changes_hlc ON crdt_changes(hlc);\n CREATE INDEX IF NOT EXISTS idx_changes_docref ON crdt_changes(value)\n WHERE dataset = 'doc_blocks' AND col = 'doc_id';\n `);\n if (tableExists(db, \"peers\")) db.exec(\"UPDATE peers SET push_cursor = 0, pull_cursor = 0\");\n });\n tx();\n}\n\n/** Bring a freshly opened (or legacy) database to the current schema. */\nexport function initSchema(db: DbDriver): void {\n runSchema(db);\n migrateOplog(db);\n migrateCrdtChangesSeq(db);\n migrateRecords(db);\n migratePeers(db);\n migrateDocBlocks(db);\n migrateDocuments(db);\n migrateBlobCache(db);\n}\n",
|
|
122
|
+
"import type { DbDriver } from \"./driver.ts\";\nimport { getDatabase, type DatabaseRow } from \"./databases.ts\";\n\n// The \"current database\" is per-machine UI context, not data — it lives in the\n// local `meta` table (like node_id / search_hlc), never in the oplog, so it\n// does not sync to peers.\nconst KEY = \"current_db\";\n\n/**\n * The current database, or null. Validated on read: if it points at a database\n * that no longer exists (deleted, or gone after a snapshot restore), the stale\n * pointer is cleared and null returned — no coupling to delete/restore paths.\n */\nexport function getCurrentDatabase(db: DbDriver): DatabaseRow | null {\n const row = db.query(\"SELECT value FROM meta WHERE key = ?\").get(KEY) as\n | { value: string }\n | null;\n if (!row) return null;\n const found = getDatabase(db, row.value);\n if (!found) {\n clearCurrentDatabase(db);\n return null;\n }\n return found;\n}\n\nexport function setCurrentDatabase(db: DbDriver, id: string): void {\n db.query(\n \"INSERT INTO meta (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value\",\n ).run(KEY, id);\n}\n\nexport function clearCurrentDatabase(db: DbDriver): void {\n db.query(\"DELETE FROM meta WHERE key = ?\").run(KEY);\n}\n",
|
|
123
|
+
"import type { DbDriver } from \"./driver.ts\";\nimport { ftsAvailable } from \"./schema-init.ts\";\nimport { changesAfterSeq } from \"./crdt.ts\";\n\nexport interface SearchHit {\n type: \"document\" | \"record\";\n id: string;\n database_id: string | null;\n title?: string;\n snippet: string;\n}\n\nconst TEXT_TYPES = \"('text','url','select','multi_select','date')\";\n\n// Bump when the indexing logic changes (TEXT_TYPES, indexed columns, FTS schema)\n// so existing hubs discard `search_seq` and rebuild from scratch on next search.\nconst SEARCH_INDEX_VERSION = \"1\";\n\nfunction readMeta(db: DbDriver, key: string): string | null {\n return (\n (db.query(\"SELECT value FROM meta WHERE key = ?\").get(key) as { value: string } | null)\n ?.value ?? null\n );\n}\n\nfunction writeMeta(db: DbDriver, key: string, value: string): void {\n db.query(\n \"INSERT INTO meta (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value\",\n ).run(key, value);\n}\n\n// --- per-object (re)indexing ------------------------------------------------\n// FTS rows are derived from the materialized tables, so (re)indexing one object\n// is \"delete its rows, then re-derive from the live row(s)\". A tombstoned or\n// body-less object simply re-derives to nothing.\n\ninterface DocRow {\n id: string;\n title: string | null;\n body: string | null;\n database_id: string | null;\n}\n\nfunction reindexDocument(db: DbDriver, id: string): void {\n db.query(\"DELETE FROM search_fts WHERE kind = 'document' AND id = ?\").run(id);\n const d = db\n .query(\"SELECT id, title, body, database_id FROM documents WHERE id = ? AND __deleted = 0\")\n .get(id) as DocRow | null;\n if (d)\n db.query(\n \"INSERT INTO search_fts (kind, id, database_id, title, body) VALUES ('document', ?, ?, ?, ?)\",\n ).run(d.id, d.database_id, d.title ?? \"\", d.body ?? \"\");\n}\n\ninterface RecBodyRow {\n id: string;\n database_id: string | null;\n body: string | null;\n}\n\n// A record's body is the concatenation of its TEXT-typed cell values. `where`\n// scopes which records to (re)derive; it is a fixed literal, never user input.\nfunction recordBodyRows(db: DbDriver, where: string, ...args: (string | number)[]): RecBodyRow[] {\n return db\n .query(\n `SELECT r.id AS id, r.database_id AS database_id, group_concat(je.value, ' ') AS body\n FROM records r, json_each(r.data) je\n JOIN properties p ON p.id = je.key AND p.__deleted = 0\n WHERE ${where} AND r.__deleted = 0 AND p.type IN ${TEXT_TYPES}\n GROUP BY r.id`,\n )\n .all(...args) as RecBodyRow[];\n}\n\nfunction insertRecordRow(db: DbDriver, r: RecBodyRow): void {\n db.query(\n \"INSERT INTO search_fts (kind, id, database_id, title, body) VALUES ('record', ?, ?, ?, ?)\",\n ).run(r.id, r.database_id, r.id, r.body ?? \"\");\n}\n\nfunction reindexRecord(db: DbDriver, id: string): void {\n db.query(\"DELETE FROM search_fts WHERE kind = 'record' AND id = ?\").run(id);\n const r = recordBodyRows(db, \"r.id = ?\", id)[0];\n if (r) insertRecordRow(db, r);\n}\n\n// Used for property-level changes (type/deletion/scope) that affect a whole\n// database's records at once.\nfunction reindexDatabaseRecords(db: DbDriver, databaseId: string): void {\n db.query(\"DELETE FROM search_fts WHERE kind = 'record' AND database_id = ?\").run(databaseId);\n for (const r of recordBodyRows(db, \"r.database_id = ?\", databaseId)) insertRecordRow(db, r);\n}\n\n// --- index maintenance ------------------------------------------------------\n\n// Full rebuild: the fallback path (first build, version bump, snapshot reset,\n// manual repair). Clears the index and re-derives every object, then pins the\n// cursor to the current oplog head so incremental updates pick up from there.\nfunction fullRebuild(db: DbDriver): void {\n db.query(\"DELETE FROM search_fts\").run();\n for (const d of db\n .query(\"SELECT id, title, body, database_id FROM documents WHERE __deleted = 0\")\n .all() as DocRow[])\n db.query(\n \"INSERT INTO search_fts (kind, id, database_id, title, body) VALUES ('document', ?, ?, ?, ?)\",\n ).run(d.id, d.database_id, d.title ?? \"\", d.body ?? \"\");\n for (const r of recordBodyRows(db, \"1 = 1\")) insertRecordRow(db, r);\n const max = (db.query(\"SELECT MAX(rowid) AS m FROM crdt_changes\").get() as { m: number | null }).m ?? 0;\n writeMeta(db, \"search_seq\", String(max));\n writeMeta(db, \"search_index_version\", SEARCH_INDEX_VERSION);\n}\n\n// Incremental: scan oplog changes since the cursor, derive the set of affected\n// objects, and re-derive only those. Insertion-order (rowid) means no change is\n// ever skipped, even when a remote write carries an older HLC than the local max.\nfunction incrementalUpdate(db: DbDriver): void {\n const cursor = Number(readMeta(db, \"search_seq\") ?? \"0\");\n const { changes, cursor: next } = changesAfterSeq(db, cursor);\n if (changes.length === 0) return;\n\n const docIds = new Set<string>();\n const recordIds = new Set<string>();\n const dbIds = new Set<string>(); // databases whose records need a full re-derive\n\n for (const c of changes) {\n switch (c.dataset) {\n case \"documents\":\n docIds.add(c.row_id);\n break;\n case \"doc_blocks\": {\n const blk = db\n .query(\"SELECT doc_id FROM doc_blocks WHERE id = ?\")\n .get(c.row_id) as { doc_id: string | null } | null;\n if (blk?.doc_id) docIds.add(blk.doc_id);\n break;\n }\n case \"records\":\n recordIds.add(c.row_id);\n break;\n case \"properties\":\n // Only type/deletion/scope change which cells contribute to record bodies.\n if (c.col === \"type\" || c.col === \"__deleted\" || c.col === \"database_id\") {\n const p = db\n .query(\"SELECT database_id FROM properties WHERE id = ?\")\n .get(c.row_id) as { database_id: string | null } | null;\n if (p?.database_id) dbIds.add(p.database_id);\n }\n break;\n // databases / sites / site_files are not represented in the FTS index.\n }\n }\n\n for (const id of docIds) reindexDocument(db, id);\n for (const dbId of dbIds) reindexDatabaseRecords(db, dbId);\n for (const id of recordIds) {\n const r = db\n .query(\"SELECT database_id FROM records WHERE id = ?\")\n .get(id) as { database_id: string | null } | null;\n if (r?.database_id && dbIds.has(r.database_id)) continue; // already covered above\n reindexRecord(db, id);\n }\n writeMeta(db, \"search_seq\", String(next));\n}\n\n// Bring the FTS index up to date before searching. Returns false when FTS5 is\n// unavailable (caller falls back to LIKE). All work is one transaction so the\n// cursor never advances past the index state it describes.\nfunction ensureIndex(db: DbDriver): boolean {\n if (!ftsAvailable(db)) return false;\n const version = readMeta(db, \"search_index_version\");\n const seq = readMeta(db, \"search_seq\");\n db.transaction(() => {\n if (version !== SEARCH_INDEX_VERSION || seq === null) fullRebuild(db);\n else incrementalUpdate(db);\n })();\n return true;\n}\n\n/** Force a full rebuild of the search index (maintenance / repair). */\nexport function rebuildSearchIndex(db: DbDriver): boolean {\n if (!ftsAvailable(db)) return false;\n db.transaction(() => fullRebuild(db))();\n return true;\n}\n\nfunction ftsSearch(db: DbDriver, query: string, limit: number): SearchHit[] {\n const match = query\n .split(/\\s+/)\n .filter(Boolean)\n .map((t) => `\"${t.replace(/\"/g, '\"\"')}\"`)\n .join(\" \");\n if (!match) return [];\n const rows = db\n .query(\n \"SELECT kind, id, database_id, title, snippet(search_fts, -1, '[', ']', '…', 10) AS snippet FROM search_fts WHERE search_fts MATCH ? ORDER BY rank LIMIT ?\",\n )\n .all(match, limit) as {\n kind: \"document\" | \"record\";\n id: string;\n database_id: string | null;\n title: string | null;\n snippet: string;\n }[];\n return rows.map((r) => ({\n type: r.kind,\n id: r.id,\n database_id: r.database_id,\n title: r.title || undefined,\n snippet: r.snippet,\n }));\n}\n\nfunction makeSnippet(text: string, q: string): string {\n const i = text.toLowerCase().indexOf(q.toLowerCase());\n if (i < 0) return text.slice(0, 80);\n const start = Math.max(0, i - 30);\n return `${start > 0 ? \"…\" : \"\"}${text.slice(start, i + q.length + 50)}…`;\n}\n\n// Substring match — robust for CJK and exact phrases where FTS tokenization misses.\nfunction likeSearch(db: DbDriver, query: string, limit: number): SearchHit[] {\n const like = `%${query.replace(/[%_\\\\]/g, \"\\\\$&\")}%`;\n const out: SearchHit[] = [];\n const docs = db\n .query(\n \"SELECT id, title, body, database_id FROM documents WHERE __deleted = 0 AND (title LIKE ? ESCAPE '\\\\' OR body LIKE ? ESCAPE '\\\\') LIMIT ?\",\n )\n .all(like, like, limit) as {\n id: string;\n title: string | null;\n body: string | null;\n database_id: string | null;\n }[];\n for (const d of docs)\n out.push({\n type: \"document\",\n id: d.id,\n database_id: d.database_id,\n title: d.title ?? undefined,\n snippet: makeSnippet(d.body || d.title || \"\", query),\n });\n\n if (out.length < limit) {\n const recs = db\n .query(\n `SELECT r.id AS id, r.database_id AS database_id, group_concat(je.value, ' ') AS body\n FROM records r, json_each(r.data) je\n JOIN properties p ON p.id = je.key AND p.__deleted = 0\n WHERE r.__deleted = 0 AND p.type IN ${TEXT_TYPES}\n GROUP BY r.id HAVING body LIKE ? ESCAPE '\\\\' LIMIT ?`,\n )\n .all(like, limit - out.length) as {\n id: string;\n database_id: string | null;\n body: string | null;\n }[];\n for (const r of recs)\n out.push({\n type: \"record\",\n id: r.id,\n database_id: r.database_id,\n snippet: makeSnippet(r.body || \"\", query),\n });\n }\n return out;\n}\n\nexport function search(\n db: DbDriver,\n query: string,\n opts: { limit?: number } = {},\n): SearchHit[] {\n const limit = opts.limit ?? 20;\n if (ensureIndex(db)) {\n try {\n const hits = ftsSearch(db, query, limit);\n if (hits.length) return hits;\n } catch {\n // fall through to LIKE\n }\n }\n return likeSearch(db, query, limit);\n}\n",
|
|
124
|
+
"import \"./storage-s3-bun.ts\"; // side effect: register the Bun S3 storage-sync client (auto-sync timer)\nimport { openMetahub } from \"../db.ts\";\nimport { MhError } from \"../errors.ts\";\nimport { getNodeId } from \"../node.ts\";\nimport { getServerConfig } from \"../config.ts\";\nimport pkg from \"../../../package.json\" with { type: \"json\" };\nimport { routes, type Route, type RouteCtx } from \"./routes.ts\";\nimport { SYNC_PATH, HEALTH_PATH, RENEW_PATH, PAIR_PATH } from \"./protocol.ts\";\nimport { DEFAULT_TTL_MS, DEFAULT_GRACE_MS } from \"./token.ts\";\nimport { syncPeer, listPeers } from \"./peers.ts\";\nimport { blobMaintenance } from \"../blobs.ts\";\nimport { buildOpenApi } from \"./openapi.ts\";\nimport {\n type AuthConfig,\n activeToken,\n hasValidToken,\n acceptsSyncToken,\n renewToken,\n wantsHtml,\n unlockPage,\n withShim,\n unauthorized,\n HTML_HEADERS,\n} from \"./auth.ts\";\n\nexport interface RunningServer {\n server: ReturnType<typeof Bun.serve>;\n node: string;\n port: number;\n /** Resolved bind address (loopback unless explicitly exposed). */\n host: string;\n /** The active token, or null in --debug mode (auth disabled). */\n token: string | null;\n /** Token expiry (epoch ms); Infinity for a static --token, null when auth is off. */\n exp: number | null;\n /** How the token was sourced: rotating (managed), fixed (static), or off (disabled). */\n authMode: \"managed\" | \"static\" | \"disabled\";\n /** Whether the server terminates TLS itself (URLs are https://). */\n tls: boolean;\n /** Whether the auto-sync timer is running. */\n autoSync: boolean;\n /** Auto-sync poll interval in ms (meaningful only when autoSync). */\n syncIntervalMs: number;\n /** Stop the server and the auto-sync timer. */\n stop: () => void;\n}\n\n/** Thrown when the requested port is already taken, so callers can react. */\nexport class PortInUseError extends MhError {\n constructor(\n readonly port: number,\n readonly host: string,\n ) {\n super(\n \"port_in_use\",\n `port ${port} is already in use — another mh server may be running. ` +\n `Stop it, or start on a free port with --port <n>.`,\n );\n this.name = \"PortInUseError\";\n }\n}\n\nexport interface ServerOptions {\n port?: number;\n /** Bind address. Defaults to 127.0.0.1; pass \"0.0.0.0\" to expose. */\n host?: string;\n /** Disable auth entirely. */\n debug?: boolean;\n /** Custom token. If omitted in non-debug mode, one is generated. */\n token?: string;\n /** Auto-sync poll interval in ms; <= 0 disables it. Falls back to stored config. */\n syncIntervalMs?: number;\n /** Master switch for the auto-sync timer. Falls back to stored config. */\n autoSync?: boolean;\n /** Browser UI plug-in point. Core ships no UI; callers (CLI, desktop\n * sidecar) inject the WebUI's asset handler + data API routes here.\n * Omitted = a headless sync/sites server. */\n ui?: UiHandler;\n /** Optional TLS (PEM file paths). When set the server terminates TLS itself\n * and serves https — service workers/PWA need a secure context off\n * localhost. A reverse proxy (Caddy, Tailscale Serve) in front is the\n * recommended alternative; this is for setups without one. */\n tls?: { certPath: string; keyPath: string };\n}\n\n/** What a pluggable browser UI provides (see src/webui/server/). */\nexport interface UiHandler {\n /** Serve UI assets (GET / , /webui.js, /webui.css); null = not a UI asset. */\n serveAssets(req: Request): Promise<Response | null>;\n /** The UI's data API routes, merged into the route registry (and /docs). */\n routes: Route[];\n}\n\n/** Scalar API reference UI, loaded from CDN — no bundling or npm dependency. */\nfunction scalarHtml(specUrl: string): string {\n return `<!doctype html><html><head>\n<meta charset=\"utf-8\"><title>Metahub API</title>\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\"></head>\n<body><script id=\"api-reference\" data-url=\"${specUrl}\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/@scalar/api-reference\"></script>\n</body></html>`;\n}\n\n/** Start the CRDT sync server. It is just another node backed by ~/.metahub. */\nexport function startServer(opts: ServerOptions = {}): RunningServer {\n const db = openMetahub();\n const node = getNodeId(db);\n const ctx: RouteCtx = { db, node };\n const allRoutes = opts.ui ? [...routes, ...opts.ui.routes] : routes;\n\n // Resolve runtime settings: explicit opts (CLI flags) override stored config.\n const cfg = getServerConfig(db);\n const port = opts.port ?? cfg.port;\n const host = opts.host ?? cfg.host;\n const syncIntervalMs = opts.syncIntervalMs ?? cfg.syncIntervalMs;\n const autoSync = opts.autoSync ?? cfg.autoSync;\n\n // Three modes: --debug disables auth; an explicit --token/env is a fixed,\n // non-persisted token; otherwise a persistent, rotating token from ~/.metahub.\n const auth: AuthConfig = opts.debug\n ? { debug: true, staticToken: null, db: null, ttlMs: 0, graceMs: 0 }\n : opts.token\n ? { debug: false, staticToken: opts.token, db: null, ttlMs: 0, graceMs: 0 }\n : {\n debug: false,\n staticToken: null,\n db,\n ttlMs: DEFAULT_TTL_MS,\n graceMs: DEFAULT_GRACE_MS,\n };\n\n let server: ReturnType<typeof Bun.serve>;\n try {\n server = Bun.serve({\n port,\n hostname: host,\n tls: opts.tls\n ? { cert: Bun.file(opts.tls.certPath), key: Bun.file(opts.tls.keyPath) }\n : undefined,\n async fetch(req) {\n const url = new URL(req.url);\n\n // /sync now requires the master token OR a per-peer grant from pairing\n // (the old open trusted-peer model is gone; pairing distributes the\n // credentials — see ./pairing.ts, acceptsSyncToken). /health and\n // /auth/token stay open (the latter must work with an expired token), and\n // the pairing handshake authenticates via its one-time code in-handler.\n if (\n url.pathname === SYNC_PATH ||\n url.pathname.startsWith(\"/blob/\") ||\n url.pathname === \"/api/blobs/has\"\n ) {\n // /blob/<hash> byte transport (and /api/blobs/has presence probe) authorize\n // like /sync: the master token OR a per-peer grant (a paired peer fetching a\n // blob it only has the hash of, or asking whether this node holds hashes).\n if (!acceptsSyncToken(req, url, auth, db)) return unauthorized();\n } else {\n const exempt =\n url.pathname === HEALTH_PATH ||\n url.pathname === RENEW_PATH ||\n url.pathname === PAIR_PATH ||\n // PWA install metadata + the worker script: browsers fetch these\n // without credentials, and they carry nothing sensitive (app name,\n // icons, generic caching code), so they sit outside the token gate.\n url.pathname === \"/manifest.webmanifest\" ||\n url.pathname === \"/sw.js\" ||\n url.pathname.startsWith(\"/icons/\");\n\n // Token gate (no-op in --debug). A browser without a token gets the\n // unlock page; everything else gets 401. Once the unlock page sets the\n // cookie the reload passes here and the real content is served.\n if (!exempt && !hasValidToken(req, url, auth)) {\n return wantsHtml(req)\n ? // x-mh-unlock tells the service worker this 200 is the unlock\n // page, not the app shell — caching it would brick offline starts.\n new Response(unlockPage(), { headers: { ...HTML_HEADERS, \"x-mh-unlock\": \"1\" } })\n : unauthorized();\n }\n }\n\n // Seamless renewal: swap the current (or in-grace previous) token for the\n // current token + expiry. 401 if the presented token isn't recognized.\n if (url.pathname === RENEW_PATH) {\n const r = renewToken(req, url, auth);\n return r ? Response.json(r) : unauthorized();\n }\n\n // Auto-generated API docs.\n if (req.method === \"GET\" && url.pathname === \"/docs.json\") {\n return Response.json(buildOpenApi(pkg.version, allRoutes));\n }\n if (req.method === \"GET\" && url.pathname === \"/docs\") {\n return withShim(new Response(scalarHtml(\"/docs.json\"), { headers: HTML_HEADERS }), auth);\n }\n\n // Injected browser UI assets (core itself ships no UI).\n if (req.method === \"GET\" && opts.ui) {\n const res = await opts.ui.serveAssets(req);\n if (res) return withShim(res, auth);\n }\n\n // Agent-published static sites at /sites/<name>/<path...>. Lazy-imported\n // for the same zero-startup-cost reason as the WebUI.\n if (req.method === \"GET\" && url.pathname.startsWith(\"/sites/\")) {\n const { serveSite } = await import(\"./sites-serve.ts\");\n const res = await serveSite(req, ctx);\n if (res) return withShim(res, auth);\n }\n\n // Content-addressed blob bytes at /blob/<hash>[.ext] (document images /\n // large files). Resolves on demand (local → peers → bucket); raw bytes, no\n // shim. See blob-routes.ts / blobs.ts.\n if (req.method === \"GET\" && url.pathname.startsWith(\"/blob/\")) {\n const { serveBlob } = await import(\"./blob-routes.ts\");\n const res = await serveBlob(req, ctx);\n if (res) return res;\n }\n\n // Registered API routes.\n const route = allRoutes.find((r) => r.method === req.method && r.path === url.pathname);\n if (route) return route.handler(req, ctx);\n\n return new Response(\"not found\", { status: 404 });\n },\n });\n } catch (e) {\n // Bun.serve throws synchronously on a bind failure. Turn the raw EADDRINUSE\n // (and the related EACCES) into an actionable message instead of a stack\n // trace pointing into the framework.\n const code = (e as { code?: string } | null)?.code;\n if (code === \"EADDRINUSE\") {\n throw new PortInUseError(port, host);\n }\n if (code === \"EACCES\") {\n throw new MhError(\n \"invalid_input\",\n `permission denied binding ${host}:${port} — ports below 1024 need elevated privileges; pick a higher port with --port`,\n );\n }\n throw e;\n }\n // Auto-sync timer: each tick runs one push/pull round against every enabled\n // peer. The DB is the source of truth, so peers added by `mh config` (a\n // separate process) are picked up on the next tick without a restart.\n let timer: ReturnType<typeof setInterval> | null = null;\n if (autoSync && syncIntervalMs > 0) {\n // Per-peer idle backoff for storage (s3) peers — the bucket poll is the metered\n // cost. When the hub hasn't advanced (no local edit, nothing pulled) and a\n // peer's rounds keep coming up empty, slow it down, capped at TTL/2 so the\n // publisher lease / failover stay timely. Any hub advance (a local edit OR a\n // pulled remote edit) reclaims the base cadence so propagation stays prompt.\n // http peers sync every tick.\n const S3_POLL_MAX_MS = 150_000; // 2.5min ≈ publisher-lease TTL/2\n const s3Next = new Map<string, { delay: number; due: number }>();\n let lastMaxSeq = -1;\n let ticking = false;\n // Blob upkeep is metered separately from the oplog poll: a full-blob device\n // pulls/announces referenced blobs and pushes held blobs to buckets. Runs at\n // most once a minute regardless of the (possibly faster) sync cadence.\n const BLOB_MAINT_MS = 60_000;\n let lastBlobMaint = 0;\n const tick = async (): Promise<void> => {\n const maxSeq =\n (db.query(\"SELECT MAX(seq) AS s FROM crdt_changes\").get() as { s: number | null }).s ?? 0;\n const advanced = lastMaxSeq >= 0 && maxSeq > lastMaxSeq;\n lastMaxSeq = maxSeq;\n const now = Date.now();\n for (const p of listPeers(db)) {\n if (!p.enabled) continue;\n if (p.kind !== \"s3\") {\n await syncPeer(db, p.url);\n continue;\n }\n const st = s3Next.get(p.url);\n if (!advanced && st && now < st.due) continue; // idle & backed off → not due\n const out = await syncPeer(db, p.url);\n const busy = advanced || (out.pushed ?? 0) > 0 || (out.pulled ?? 0) > 0;\n const delay = busy\n ? syncIntervalMs\n : Math.min((st?.delay ?? syncIntervalMs) * 2, S3_POLL_MAX_MS);\n s3Next.set(p.url, { delay, due: Date.now() + delay });\n }\n if (Date.now() - lastBlobMaint >= BLOB_MAINT_MS) {\n lastBlobMaint = Date.now();\n try {\n await blobMaintenance(db);\n } catch (e) {\n console.error(\"[blob] maintenance failed —\", e);\n }\n }\n };\n timer = setInterval(() => {\n if (ticking) return;\n ticking = true;\n // Per-peer errors are already recorded in the DB (last_error) by syncPeer and\n // surfaced via CLI/WebUI; this catch only covers an *unexpected* tick crash.\n void tick()\n .catch((e) => console.error(\"[sync] auto-sync tick failed —\", e))\n .finally(() => {\n ticking = false;\n });\n }, syncIntervalMs);\n timer.unref?.();\n }\n\n const active = activeToken(auth);\n const authMode: RunningServer[\"authMode\"] = opts.debug\n ? \"disabled\"\n : opts.token\n ? \"static\"\n : \"managed\";\n return {\n server,\n node,\n port: server.port ?? port,\n host,\n token: active?.token ?? null,\n exp: active?.exp ?? null,\n authMode,\n tls: Boolean(opts.tls),\n autoSync: Boolean(autoSync && syncIntervalMs > 0),\n syncIntervalMs,\n stop() {\n if (timer) clearInterval(timer);\n server.stop();\n },\n };\n}\n",
|
|
111
125
|
"import { z } from \"zod\";\nimport { routes as coreRoutes, type Route } from \"./routes.ts\";\n\n/**\n * Build an OpenAPI 3.1 document by walking a route registry. Each route's\n * Zod schemas are converted to JSON Schema (draft 2020-12, which 3.1 accepts).\n * Adding a route to ./routes.ts is enough — this picks it up with no codegen.\n * The server passes its full registry (core + injected UI routes) so /docs\n * always matches what is actually served.\n */\nexport function buildOpenApi(version: string, routes: readonly Route[] = coreRoutes) {\n const paths: Record<string, Record<string, unknown>> = {};\n\n for (const route of routes) {\n const op: Record<string, unknown> = {\n summary: route.summary,\n responses: {\n \"200\": {\n description: \"OK\",\n content: { \"application/json\": { schema: z.toJSONSchema(route.response) } },\n },\n },\n };\n if (route.request) {\n op.requestBody = {\n required: true,\n content: { \"application/json\": { schema: z.toJSONSchema(route.request) } },\n };\n }\n (paths[route.path] ??= {})[route.method.toLowerCase()] = op;\n }\n\n return {\n openapi: \"3.1.0\",\n info: { title: \"Metahub Sync API\", version },\n paths,\n };\n}\n",
|
|
112
|
-
"// Token gate for the server. In --debug mode auth is disabled entirely. Otherwise\n// a single token guards every request. A token may arrive three ways so both\n// programmatic clients and browsers work:\n// - Authorization: Bearer <token> (API clients, and the injected fetch shim)\n// - Cookie: mh_token=<token> (browser top-level navigations)\n// - ?token=<token> (links / quick curl testing)\n// Browsers without a token get an unlock page that stores the password to\n// localStorage + a cookie and reloads; served HTML then gets a fetch shim that\n// re-attaches the token as a Bearer header on same-origin API calls.\n\nimport type { Database } from \"bun:sqlite\";\nimport { loadOrRotate } from \"./token.ts\";\nimport { isAcceptedGrant } from \"./pairing.ts\";\nimport { RENEW_PATH } from \"./protocol.ts\";\n\n// Three modes:\n// debug — auth off entirely.\n// staticToken — fixed token from --token/env; not persisted, never expires.\n// db (managed) — persistent, rotating token in ~/.metahub (see ./token.ts).\nexport interface AuthConfig {\n debug: boolean;\n staticToken: string | null;\n db: Database | null;\n ttlMs: number;\n graceMs: number;\n}\n\nconst COOKIE = \"mh_token\";\n\nfunction cookieToken(req: Request): string | null {\n const header = req.headers.get(\"cookie\");\n if (!header) return null;\n for (const part of header.split(\";\")) {\n const [k, ...v] = part.trim().split(\"=\");\n if (k === COOKIE) return decodeURIComponent(v.join(\"=\"));\n }\n return null;\n}\n\nexport function extractToken(req: Request, url: URL): string | null {\n const auth = req.headers.get(\"authorization\");\n if (auth?.startsWith(\"Bearer \")) return auth.slice(7);\n return cookieToken(req) ?? url.searchParams.get(\"token\");\n}\n\n/** Whether auth is on at all (so the gate runs and the fetch shim is injected). */\nexport function authActive(cfg: AuthConfig): boolean {\n return !cfg.debug && (cfg.staticToken != null || cfg.db != null);\n}\n\n/** The currently-valid token and its expiry, or null when auth is off. */\nexport function activeToken(cfg: AuthConfig): { token: string; exp: number } | null {\n if (cfg.debug) return null;\n if (cfg.staticToken != null) return { token: cfg.staticToken, exp: Infinity };\n if (cfg.db) {\n const s = loadOrRotate(cfg.db, cfg.ttlMs, cfg.graceMs);\n return { token: s.token, exp: s.exp };\n }\n return null;\n}\n\nexport function hasValidToken(req: Request, url: URL, cfg: AuthConfig): boolean {\n const cur = activeToken(cfg);\n if (!cur) return true;\n return extractToken(req, url) === cur.token;\n}\n\n/**\n * Gate for /sync: accept the master token OR any durable per-peer grant issued\n * during pairing (see ./pairing.ts). Returns true when auth is off (--debug).\n * `db` is needed to look up grants even in staticToken mode where cfg.db is null.\n */\nexport function acceptsSyncToken(req: Request, url: URL, cfg: AuthConfig, db: Database): boolean {\n if (!authActive(cfg)) return true;\n const presented = extractToken(req, url);\n if (!presented) return false;\n const cur = activeToken(cfg);\n if (cur && presented === cur.token) return true;\n return isAcceptedGrant(db, presented);\n}\n\n/**\n * Token exchange: a holder of the current token (or the in-grace previous token)\n * gets the current token back. Managed mode only — returns null otherwise.\n */\nexport function renewToken(\n req: Request,\n url: URL,\n cfg: AuthConfig,\n): { token: string; exp: number } | null {\n if (cfg.debug || cfg.staticToken != null || !cfg.db) return null;\n const s = loadOrRotate(cfg.db, cfg.ttlMs, cfg.graceMs);\n const presented = extractToken(req, url);\n if (!presented) return null;\n if (presented === s.token) return { token: s.token, exp: s.exp };\n if (s.prev && presented === s.prev && Date.now() < s.prevExp) {\n return { token: s.token, exp: s.exp };\n }\n return null;\n}\n\n/** A browser navigation (so we can answer with an unlock page instead of a 401). */\nexport function wantsHtml(req: Request): boolean {\n return req.method === \"GET\" && (req.headers.get(\"accept\") ?? \"\").includes(\"text/html\");\n}\n\nconst HTML_HEADERS = { \"content-type\": \"text/html; charset=utf-8\" };\n\n/** Self-contained password prompt: stores token to localStorage + cookie, reloads. */\nexport function unlockPage(): string {\n return `<!doctype html><html lang=\"en\"><head>\n<meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n<title>Unlock</title>\n<style>\n body{font:14px/1.5 -apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,sans-serif;\n display:flex;min-height:100vh;margin:0;align-items:center;justify-content:center;\n background:#0d1117;color:#e6edf3}\n form{background:#161b22;border:1px solid #30363d;border-radius:10px;padding:28px;width:300px}\n h1{font-size:16px;margin:0 0 14px}\n input{width:100%;box-sizing:border-box;padding:8px;border-radius:6px;border:1px solid #30363d;\n background:#0d1117;color:inherit;margin-bottom:12px}\n button{width:100%;padding:8px;border:0;border-radius:6px;background:#238636;color:#fff;cursor:pointer}\n .err{color:#f85149;margin:0 0 12px;font-size:13px}\n</style></head><body>\n<form id=\"f\" style=\"display:none\">\n <h1>🔒 This server requires a token</h1>\n <p class=\"err\" id=\"e\" style=\"display:none\">Token rejected — try again.</p>\n <input id=\"t\" type=\"password\" placeholder=\"Token\" autocomplete=\"current-password\">\n <button type=\"submit\">Unlock</button>\n</form>\n<script>\n var KEY = \"mh_token\";\n function save(t) {\n localStorage.setItem(KEY, t);\n document.cookie = \"${COOKIE}=\" + encodeURIComponent(t) + \"; path=/; SameSite=Strict; Max-Age=31536000\";\n }\n function showForm() {\n document.getElementById(\"f\").style.display = \"block\";\n // A leftover token means an attempt (or silent renewal) failed the gate.\n if (localStorage.getItem(KEY)) document.getElementById(\"e\").style.display = \"block\";\n document.getElementById(\"t\").focus();\n }\n document.getElementById(\"f\").addEventListener(\"submit\", function (ev) {\n ev.preventDefault();\n save(document.getElementById(\"t\").value);\n location.reload();\n });\n // Seamless renewal for top-level navigation: if we hold a token, try swapping\n // it for the current one before prompting. Covers the case where the token\n // rotated while this browser held the (in-grace) previous one.\n var stored = localStorage.getItem(KEY);\n if (stored) {\n fetch(\"${RENEW_PATH}\", { headers: { authorization: \"Bearer \" + stored } })\n .then(function (r) { return r.ok ? r.json() : null; })\n .then(function (d) { if (d && d.token) { save(d.token); location.reload(); } else { showForm(); } })\n .catch(showForm);\n } else {\n showForm();\n }\n</script>\n</body></html>`;\n}\n\n/**\n *
|
|
113
|
-
"import { fileURLToPath } from \"node:url\";\nimport { readdirSync, statSync } from \"node:fs\";\nimport { join } from \"node:path\";\n// Inlined as a string at build time (Bun text loader), so packaged builds and\n// compiled binaries carry the stylesheet with no extra asset file. In dev the\n// file is re-read from disk per request instead — see getCss().\nimport APP_CSS from \"../styles.css\" with { type: \"text\" };\n\n// Serves the browser WebUI at `/`. Core never imports this module: it is wired\n// into the server through startServer's `ui` option (see core/sync/server.ts),\n// keeping presentation code out of the core layer and off the CLI startup path.\n// The Preact bundle itself is built or loaded lazily on the first request.\n\n/** True when running from the source tree (bun dev / bun test) rather than a\n * packaged dist build or a compiled binary. Switches asset serving to\n * rebuild-on-change so a browser refresh is enough to see edits. */\nconst RUNNING_FROM_SOURCE = import.meta.url.includes(\"/src/webui/\");\n\n/** The HTML shell. The Preact app and stylesheet are delivered separately as\n * /webui.js and /webui.css (both served below, never cached). */\nconst HTML = `<!doctype html>\n<html lang=\"zh\">\n<head>\n<meta charset=\"utf-8\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, viewport-fit=cover\" />\n<!-- Mobile browser chrome (status/address bar) tints to theme-color; app.tsx\n keeps #theme-color-meta in sync with the active theme + visible surface. -->\n<meta name=\"theme-color\" id=\"theme-color-meta\" content=\"#ffffff\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"default\" />\n<title>Metahub</title>\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<!-- Load web fonts without blocking first paint: media=\"print\" keeps the\n stylesheet non-render-blocking, then onload flips it to \"all\". The page\n paints instantly with the system-font fallbacks baked into --ui/--mono and\n swaps to the web fonts when they arrive (or stays on system fonts offline).\n This is what kept the desktop cold-start white for seconds on slow networks. -->\n<link rel=\"stylesheet\" media=\"print\" onload=\"this.media='all'\" href=\"https://fonts.googleapis.com/css2?family=Hanken+Grotesk:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap\">\n<noscript><link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css2?family=Hanken+Grotesk:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap\"></noscript>\n<!-- FOUC guard: resolve the stored choice (system → OS preference) to an\n explicit data-resolved before first paint. CSS keys off data-resolved\n alone, so the dark palette exists exactly once — see styles.css. Dark also\n pre-tints the status bar (hex mirrors --bg) so the first frame isn't white. -->\n<script>try{var t=localStorage.getItem('mh-theme'),d=t==='dark'||(t!=='light'&&matchMedia('(prefers-color-scheme: dark)').matches);document.documentElement.dataset.resolved=d?'dark':'light';if(d)document.getElementById('theme-color-meta').content='#1a1a1c'}catch(e){}</script>\n<link rel=\"stylesheet\" href=\"/webui.css\">\n</head>\n<body>\n<div id=\"app\"></div>\n<script type=\"module\" src=\"/webui.js\"></script>\n</body>\n</html>`;\n\n/** Bundle injected by `bun build --compile` binaries (e.g. the desktop\n * sidecar), where neither a sibling dist/webui.js nor the source tree exists\n * at runtime — the bundle is embedded at build time and handed in here. */\nlet injectedJs: string | null = null;\n\nexport function setWebuiBundle(js: string): void {\n injectedJs = js;\n}\n\nlet cachedJs: string | null = null;\n/** Dev only: newest src/webui mtime baked into cachedJs (cache key). */\nlet cachedJsMtime = 0;\n\n/** Newest mtime across the browser-bundle sources (src/webui/**.ts[x]).\n * ./server is skipped — server-side code never enters the browser bundle. */\nfunction newestSourceMtime(dir: string): number {\n let newest = 0;\n for (const e of readdirSync(dir, { withFileTypes: true })) {\n if (e.name === \"server\" || e.name.startsWith(\".\")) continue;\n const p = join(dir, e.name);\n if (e.isDirectory()) newest = Math.max(newest, newestSourceMtime(p));\n else if (/\\.tsx?$/.test(e.name)) newest = Math.max(newest, statSync(p).mtimeMs);\n }\n return newest;\n}\n\n/** Resolve the app bundle: embedded (compiled binary) > rebuild-on-change from\n * source (dev) > prebuilt sibling dist/webui.js (packaged), process-cached. */\nasync function getJs(): Promise<string> {\n if (injectedJs != null) return injectedJs;\n\n if (RUNNING_FROM_SOURCE) {\n // Dev: rebuild whenever any source file is newer than the cached bundle,\n // so a plain browser refresh picks up edits — no rebuild step, no restart.\n const srcDir = fileURLToPath(new URL(\"..\", import.meta.url));\n const newest = newestSourceMtime(srcDir);\n if (cachedJs == null || newest > cachedJsMtime) {\n const entry = fileURLToPath(new URL(\"../app.tsx\", import.meta.url));\n const res = await Bun.build({ entrypoints: [entry], target: \"browser\" });\n if (!res.success) throw new AggregateError(res.logs, \"webui build failed\");\n cachedJs = await res.outputs[0]!.text();\n cachedJsMtime = newest;\n }\n return cachedJs;\n }\n\n if (cachedJs == null) {\n const prebuilt = Bun.file(fileURLToPath(new URL(\"./webui.js\", import.meta.url)));\n if (!(await prebuilt.exists())) {\n throw new Error(\n \"webui bundle missing: dist/webui.js was not built — run `bun run build`\",\n );\n }\n cachedJs = await prebuilt.text();\n }\n return cachedJs;\n}\n\n/** The stylesheet: read from disk per request in dev (so CSS edits land on the\n * next refresh), the build-time inlined copy otherwise. */\nasync function getCss(): Promise<string> {\n if (RUNNING_FROM_SOURCE) {\n return Bun.file(fileURLToPath(new URL(\"../styles.css\", import.meta.url))).text();\n }\n return APP_CSS;\n}\n\n/** Pre-build & cache the JS bundle ahead of the first request. In dev the first\n * `/webui.js` hit otherwise pays for a `Bun.build` (1–3s) that blocks the\n * WebUI's first paint; warming it right after the server starts listening\n * moves that cost off the cold-start critical path. In packaged builds the\n * bundle is already embedded via setWebuiBundle(), so this is a no-op. */\nexport async function warmWebui(): Promise<void> {\n try {\n await getJs();\n } catch {\n // best-effort: a failed warm just falls back to building on first request\n }\n}\n\n// Served by a local server to (mostly) one machine: `no-store` everywhere\n// trades a few KB per load for never needing a hard refresh after an update.\nfunction asset(body: string, contentType: string): Response {\n return new Response(body, {\n headers: { \"content-type\": contentType, \"cache-control\": \"no-store\" },\n });\n}\n\n/** Handle WebUI asset requests. Returns null for anything else so the caller\n * can fall through to the API routes. */\nexport async function serveWebui(req: Request): Promise<Response | null> {\n if (req.method !== \"GET\") return null;\n const { pathname } = new URL(req.url);\n\n if (pathname === \"/\") return asset(HTML, \"text/html; charset=utf-8\");\n if (pathname === \"/webui.css\") return asset(await getCss(), \"text/css; charset=utf-8\");\n if (pathname === \"/webui.js\") {\n try {\n return asset(await getJs(), \"text/javascript; charset=utf-8\");\n } catch (e) {\n // This catch is the only thing between the error and oblivion: Bun only\n // auto-logs *uncaught* handler errors, and we catch this one. Log the full\n // error object (not `${e}`) so getJs's AggregateError sub-logs surface —\n // otherwise the 500 lives solely in the response body, never the logs.\n console.error(\"[webui] failed to serve /webui.js —\", e);\n return new Response(`webui build failed: ${e}`, { status: 500 });\n }\n }\n return null;\n}\n",
|
|
114
|
-
"import { z } from \"zod\";\nimport { MhError } from \"../../core/errors.ts\";\nimport { errorResponse, type Route, type RouteCtx } from \"../../core/sync/routes.ts\";\nimport { listDatabases, createDatabase, updateDatabase, deleteDatabase } from \"../../core/databases.ts\";\nimport {\n listProperties,\n addProperty,\n updateProperty,\n setPropertyWidth,\n removeProperty,\n type PropType,\n type PropertyConfig,\n} from \"../../core/properties.ts\";\nimport {\n listRecords,\n getRecord,\n createRecord,\n updateRecord,\n moveRecord,\n deleteRecord,\n} from \"../../core/records.ts\";\nimport {\n listDocuments,\n getDocument,\n createDocument,\n updateDocument,\n documentVersion,\n moveDocument,\n deleteDocument,\n} from \"../../core/documents.ts\";\nimport {\n listDocumentRevisions,\n documentAtVersion,\n revertDocument,\n listRecordRevisions,\n revertRecord,\n} from \"../../core/history.ts\";\nimport { search } from \"../../core/search.ts\";\nimport pkg from \"../../../package.json\" with { type: \"json\" };\n\n// Read-only viewer + light editing for the browser UI. These routes wrap the\n// same core functions the CLI uses, so every write goes through `emit()` and\n// replicates over /sync. Ids are carried as query params to keep the server's\n// exact-path matcher (see ./routes.ts) and OpenAPI generation unchanged.\n\n// --- pragmatic schemas (drive /docs; intentionally loose) -------------------\n\nconst DatabaseSchema = z.object({\n id: z.string(),\n name: z.string(),\n icon: z.string().nullable(),\n created_hlc: z.string(),\n});\nconst PropertySchema = z.object({\n id: z.string(),\n database_id: z.string(),\n name: z.string(),\n type: z.string(),\n config: z.any().nullable(),\n position: z.number(),\n});\nconst RecordSchema = z.object({\n id: z.string(),\n database_id: z.string(),\n values: z\n .record(z.string(), z.any())\n .describe(\n 'Field values keyed by property name (e.g. {\"Amount\":35}). Reads nest cells here; writes take a flat {column: value} map.',\n ),\n});\nconst MoveRecordReq = z.object({\n target: z.string(),\n where: z.enum([\"before\", \"after\"]),\n});\nconst DocumentSummarySchema = z.object({\n id: z.string(),\n title: z.string(),\n database_id: z.string().nullable(),\n parent_id: z.string().nullable(),\n created_hlc: z.string(),\n order_key: z.string().nullable(),\n});\nconst MoveDocumentReq = z.object({\n target: z.string(),\n where: z.enum([\"before\", \"after\", \"into\"]),\n});\nconst DocumentSchema = DocumentSummarySchema.extend({\n body: z.string().nullable(),\n // Read/edit token (max HLC over the doc + its blocks); echo it back as\n // `if_match` on PATCH to detect concurrent changes.\n version: z.string().optional(),\n});\nconst SearchHitSchema = z.object({\n type: z.string(),\n id: z.string(),\n database_id: z.string().nullable(),\n title: z.string().optional(),\n snippet: z.string(),\n});\nconst OkSchema = z.object({ ok: z.boolean() });\n\nconst CreateDatabaseReq = z.object({ name: z.string(), icon: z.string().optional() });\nconst UpdateDatabaseReq = z.object({\n name: z.string().optional(),\n icon: z.string().nullable().optional(),\n});\nconst CreatePropertyReq = z.object({\n db: z.string(),\n name: z.string(),\n type: z.string(),\n config: z.any().optional(),\n});\nconst UpdatePropertyReq = z.object({\n name: z.string().optional(),\n type: z.string().optional(),\n config: z.any().optional(),\n position: z.number().optional(),\n});\nconst SetWidthReq = z.object({ width: z.number() });\nconst RecordValuesReq = z\n .record(z.string(), z.any())\n .describe('Flat { column: value } cell patch (keyed by property name).');\nconst CreateDocumentReq = z.object({\n title: z.string(),\n body: z.string().optional(),\n database_id: z.string().optional(),\n parent_id: z.string().optional(),\n});\nconst UpdateDocumentReq = z.object({\n title: z.string().optional(),\n body: z.string().optional(),\n parent_id: z.string().nullable().optional(),\n // Optimistic concurrency: a `version` from GET /api/document. A concurrent\n // change (CLI, another window, sync) makes the PATCH fail 409 `stale`\n // instead of silently clobbering it.\n if_match: z.string().optional(),\n});\n\nconst RevisionBase = z.object({\n // Version token (max HLC of the revision); pass as `to` on revert or\n // `version` on GET /api/document/at.\n version: z.string(),\n at: z.string().describe(\"Wall-clock time of the revision (ISO 8601)\"),\n node_id: z.string(),\n changes: z.number(),\n created: z.boolean(),\n deleted: z.boolean(),\n});\nconst DocRevisionSchema = RevisionBase.extend({\n title_changed: z.boolean(),\n blocks_changed: z.number(),\n blocks_deleted: z.number(),\n});\nconst RecordRevisionSchema = RevisionBase.extend({\n fields: z.array(z.string()).describe(\"Property ids of the cells written\"),\n moved: z.boolean(),\n});\nconst DocumentVersionStateSchema = z.object({\n id: z.string(),\n title: z.string(),\n body: z.string(),\n deleted: z.boolean(),\n version: z.string(),\n});\nconst RevertDocumentReq = z.object({\n to: z.string().describe(\"Version token from /api/document/history\"),\n if_match: z.string().optional(),\n});\nconst RevertRecordReq = z.object({\n to: z.string().describe(\"Version token from /api/record/history\"),\n});\nconst RevertDocResultSchema = z.object({\n id: z.string(),\n changed: z.boolean(),\n restored: z.string(),\n version: z.string(),\n});\nconst RevertRecordResultSchema = z.object({\n id: z.string(),\n changed: z.boolean(),\n fields: z.array(z.string()),\n undeleted: z.boolean(),\n restored: z.string(),\n});\n\n// --- helpers ----------------------------------------------------------------\n\nfunction need(req: Request, key: string): string {\n const v = new URL(req.url).searchParams.get(key);\n if (!v) throw new Error(`missing query param: ${key}`);\n return v;\n}\n\nfunction opt(req: Request, key: string): string | undefined {\n return new URL(req.url).searchParams.get(key) ?? undefined;\n}\n\n/** Wrap a handler: serialize the return value, turn thrown errors into 400 JSON. */\nfunction handle(\n fn: (req: Request, ctx: RouteCtx) => unknown | Promise<unknown>,\n): Route[\"handler\"] {\n return async (req, ctx) => {\n try {\n const out = await fn(req, ctx);\n if (out instanceof Response) return out;\n return Response.json(out ?? null);\n } catch (e) {\n return errorResponse(e);\n }\n };\n}\n\n// --- routes -----------------------------------------------------------------\n\nconst VersionSchema = z.object({ version: z.string() });\n\nexport const webuiRoutes: Route[] = [\n {\n method: \"GET\",\n path: \"/api/version\",\n summary: \"Version of the running core (sidecar). Used by the desktop app's settings footer.\",\n response: VersionSchema,\n handler: () => Response.json({ version: pkg.version }),\n },\n {\n method: \"GET\",\n path: \"/api/databases\",\n summary: \"List all databases\",\n response: z.array(DatabaseSchema),\n handler: handle((_req, { db }) => listDatabases(db)),\n },\n {\n method: \"POST\",\n path: \"/api/databases\",\n summary: \"Create a database\",\n request: CreateDatabaseReq,\n response: DatabaseSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { name: string; icon?: string };\n return createDatabase(db, body);\n }),\n },\n {\n method: \"PATCH\",\n path: \"/api/database\",\n summary: \"Rename a database or change its icon. Query: ?id=<id>\",\n request: UpdateDatabaseReq,\n response: DatabaseSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { name?: string; icon?: string | null };\n return updateDatabase(db, need(req, \"id\"), body);\n }),\n },\n {\n method: \"DELETE\",\n path: \"/api/database\",\n summary: \"Delete a database (and stop it being the current one). Query: ?id=<id>\",\n response: OkSchema,\n handler: handle((req, { db }) => ({ ok: deleteDatabase(db, need(req, \"id\")) })),\n },\n {\n method: \"GET\",\n path: \"/api/properties\",\n summary: \"List a database's properties (columns). Query: ?db=<id>\",\n response: z.array(PropertySchema),\n handler: handle((req, { db }) => listProperties(db, need(req, \"db\"))),\n },\n {\n method: \"POST\",\n path: \"/api/properties\",\n summary: \"Add a property to a database\",\n request: CreatePropertyReq,\n response: PropertySchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as {\n db: string;\n name: string;\n type: PropType;\n config?: PropertyConfig;\n };\n return addProperty(db, body.db, { name: body.name, type: body.type, config: body.config });\n }),\n },\n {\n method: \"PATCH\",\n path: \"/api/property\",\n summary: \"Update a property: rename, change type, edit config/options, reorder. Query: ?id=<id>\",\n request: UpdatePropertyReq,\n response: PropertySchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as {\n name?: string;\n type?: PropType;\n config?: PropertyConfig;\n position?: number;\n };\n return updateProperty(db, need(req, \"id\"), body);\n }),\n },\n {\n method: \"PATCH\",\n path: \"/api/property/width\",\n summary: \"Set a property's table column width (px). Query: ?id=<id>\",\n request: SetWidthReq,\n response: PropertySchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { width: number };\n return setPropertyWidth(db, need(req, \"id\"), body.width);\n }),\n },\n {\n method: \"DELETE\",\n path: \"/api/property\",\n summary: \"Delete a property (column) and its cells. Query: ?id=<id>\",\n response: OkSchema,\n handler: handle((req, { db }) => ({ ok: removeProperty(db, need(req, \"id\")) })),\n },\n {\n method: \"GET\",\n path: \"/api/records\",\n summary: \"List records in a database. Query: ?db=<id>&sort=<field>&limit=<n>\",\n response: z.array(RecordSchema),\n handler: handle((req, { db }) => {\n const limit = opt(req, \"limit\");\n return listRecords(db, need(req, \"db\"), {\n sort: opt(req, \"sort\"),\n limit: limit ? Number(limit) : undefined,\n });\n }),\n },\n {\n method: \"POST\",\n path: \"/api/records\",\n summary: \"Create a record. Query: ?db=<id>; body is a {field: value} map\",\n request: RecordValuesReq,\n response: RecordSchema,\n handler: handle(async (req, { db }) => {\n const values = (await req.json()) as Record<string, unknown>;\n return createRecord(db, need(req, \"db\"), values);\n }),\n },\n {\n method: \"GET\",\n path: \"/api/record\",\n summary: \"Get one record. Query: ?id=<id>\",\n response: RecordSchema,\n handler: handle((req, { db }) => {\n const id = need(req, \"id\");\n const rec = getRecord(db, id);\n if (!rec) throw new MhError(\"not_found\", `no such record: ${id}`);\n return rec;\n }),\n },\n {\n method: \"PATCH\",\n path: \"/api/record\",\n summary: \"Update record fields. Query: ?id=<id>; body is a {field: value} map\",\n request: RecordValuesReq,\n response: RecordSchema,\n handler: handle(async (req, { db }) => {\n const values = (await req.json()) as Record<string, unknown>;\n return updateRecord(db, need(req, \"id\"), values);\n }),\n },\n {\n method: \"PATCH\",\n path: \"/api/record/order\",\n summary: \"Move a record before or after another record. Query: ?id=<id>\",\n request: MoveRecordReq,\n response: RecordSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { target: string; where: \"before\" | \"after\" };\n return moveRecord(db, need(req, \"id\"), body.target, body.where);\n }),\n },\n {\n method: \"GET\",\n path: \"/api/record/history\",\n summary: \"List a record's revisions, newest first. Query: ?id=<id>\",\n response: z.array(RecordRevisionSchema),\n handler: handle((req, { db }) => listRecordRevisions(db, need(req, \"id\"))),\n },\n {\n method: \"POST\",\n path: \"/api/record/revert\",\n summary:\n \"Restore a record's cells to a past version, recorded as a new revision. Query: ?id=<id>\",\n request: RevertRecordReq,\n response: RevertRecordResultSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { to: string };\n return revertRecord(db, need(req, \"id\"), body.to);\n }),\n },\n {\n method: \"DELETE\",\n path: \"/api/record\",\n summary: \"Delete a record. Query: ?id=<id>\",\n response: OkSchema,\n handler: handle((req, { db }) => ({ ok: deleteRecord(db, need(req, \"id\")) })),\n },\n {\n method: \"GET\",\n path: \"/api/documents\",\n summary: \"List documents. Optional query: ?db=<id> or ?parent=<id>\",\n response: z.array(DocumentSummarySchema),\n handler: handle((req, { db }) =>\n listDocuments(db, { database_id: opt(req, \"db\"), parent_id: opt(req, \"parent\") }),\n ),\n },\n {\n method: \"POST\",\n path: \"/api/documents\",\n summary: \"Create a document\",\n request: CreateDocumentReq,\n response: DocumentSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as {\n title: string;\n body?: string;\n database_id?: string;\n parent_id?: string;\n };\n return createDocument(db, body);\n }),\n },\n {\n method: \"GET\",\n path: \"/api/document\",\n summary: \"Get one document with full body. Query: ?id=<id>\",\n response: DocumentSchema,\n handler: handle((req, { db }) => {\n const id = need(req, \"id\");\n const doc = getDocument(db, id);\n if (!doc) throw new MhError(\"not_found\", `no such document: ${id}`);\n return { ...doc, version: documentVersion(db, doc.id) };\n }),\n },\n {\n method: \"PATCH\",\n path: \"/api/document\",\n summary: \"Update a document's title/body/parent_id (null = top level). Query: ?id=<id>\",\n request: UpdateDocumentReq,\n response: DocumentSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as {\n title?: string;\n body?: string;\n parent_id?: string | null;\n if_match?: string;\n };\n const { if_match, ...fields } = body;\n const doc = updateDocument(db, need(req, \"id\"), fields, { ifMatch: if_match });\n return { ...doc, version: documentVersion(db, doc.id) };\n }),\n },\n {\n method: \"PATCH\",\n path: \"/api/document/move\",\n summary: \"Move a document before/after another, or into it as a child. Query: ?id=<id>\",\n request: MoveDocumentReq,\n response: DocumentSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { target: string; where: \"before\" | \"after\" | \"into\" };\n return moveDocument(db, need(req, \"id\"), body.target, body.where);\n }),\n },\n {\n method: \"GET\",\n path: \"/api/document/history\",\n summary: \"List a document's revisions, newest first. Query: ?id=<id>\",\n response: z.array(DocRevisionSchema),\n handler: handle((req, { db }) => listDocumentRevisions(db, need(req, \"id\"))),\n },\n {\n method: \"GET\",\n path: \"/api/document/at\",\n summary: \"A document's title/body as of a past version. Query: ?id=<id>&version=<token>\",\n response: DocumentVersionStateSchema,\n handler: handle((req, { db }) => documentAtVersion(db, need(req, \"id\"), need(req, \"version\"))),\n },\n {\n method: \"POST\",\n path: \"/api/document/revert\",\n summary:\n \"Restore a document's title/body to a past version, recorded as a new revision. Query: ?id=<id>\",\n request: RevertDocumentReq,\n response: RevertDocResultSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { to: string; if_match?: string };\n return revertDocument(db, need(req, \"id\"), body.to, { ifMatch: body.if_match });\n }),\n },\n {\n method: \"DELETE\",\n path: \"/api/document\",\n summary: \"Delete a document. Query: ?id=<id>\",\n response: OkSchema,\n handler: handle((req, { db }) => ({ ok: deleteDocument(db, need(req, \"id\")) })),\n },\n {\n method: \"GET\",\n path: \"/api/search\",\n summary: \"Full-text search across documents and records. Query: ?q=<text>&limit=<n>\",\n response: z.array(SearchHitSchema),\n handler: handle((req, { db }) => {\n const limit = opt(req, \"limit\");\n return search(db, need(req, \"q\"), { limit: limit ? Number(limit) : undefined });\n }),\n },\n];\n",
|
|
115
|
-
"import type { Database } from \"bun:sqlite\";\nimport { emit } from \"./crdt.ts\";\nimport { serializeDocBlocks } from \"./blocks.ts\";\nimport { getDocument, updateDocument, documentVersion } from \"./documents.ts\";\nimport { listProperties } from \"./properties.ts\";\nimport { MhError } from \"./errors.ts\";\n\n// Read-side history over the CRDT oplog. The oplog (crdt_changes) is append-only\n// and never compacted, so the state of any register at a cutoff HLC `at` is the\n// value with the greatest hlc <= at — the same last-write-wins rule materialize()\n// applies at the head. Revert is a *forward* write: reconstruct the old state,\n// diff against the present, and emit the differences as new changes. The oplog\n// itself is never edited (it is the sync source of truth), so reverts replicate\n// and converge like any other edit.\n\n/** Changes from the same node closer together than this are one revision: a\n * single save emits a burst of field writes with near-identical timestamps. */\nconst REVISION_GAP_MS = 1500;\n\n/** Physical wall-clock milliseconds encoded in an HLC (first 15 digits). */\nfunction hlcMillis(hlc: string): number {\n return Number(hlc.slice(0, 15));\n}\n\nfunction hlcIso(hlc: string): string {\n return new Date(hlcMillis(hlc)).toISOString();\n}\n\ninterface RawChange {\n hlc: string;\n node_id: string;\n dataset: string;\n row_id: string;\n col: string;\n value: string | null;\n}\n\n/** Group an HLC-ordered change stream into revisions: a new group starts when\n * the author changes or the wall-clock gap exceeds REVISION_GAP_MS. Clustering\n * depends only on oplog content, so every synced node renders the same list. */\nfunction clusterRevisions(changes: RawChange[]): RawChange[][] {\n const groups: RawChange[][] = [];\n let cur: RawChange[] = [];\n for (const c of changes) {\n const prev = cur[cur.length - 1];\n if (prev && (prev.node_id !== c.node_id || hlcMillis(c.hlc) - hlcMillis(prev.hlc) > REVISION_GAP_MS)) {\n groups.push(cur);\n cur = [];\n }\n cur.push(c);\n }\n if (cur.length) groups.push(cur);\n return groups;\n}\n\n/** True when a JSON-encoded oplog value is a truthy flag (e.g. __deleted = 1). */\nfunction flagSet(value: string | null): boolean {\n return value !== null && value !== \"0\" && value !== \"false\" && value !== \"null\";\n}\n\n/** Latest value per register (col) among `changes` with hlc <= at.\n * A `null` value column means the register was cleared (json_remove). */\nfunction registersAt(\n changes: RawChange[],\n at: string,\n): Map<string, { value: string | null; hlc: string }> {\n const out = new Map<string, { value: string | null; hlc: string }>();\n for (const c of changes) {\n if (c.hlc > at) continue;\n const cur = out.get(c.col);\n if (!cur || c.hlc > cur.hlc) out.set(c.col, { value: c.value, hlc: c.hlc });\n }\n return out;\n}\n\n/** All oplog changes for one row of a dataset, in HLC order. */\nfunction rowChanges(db: Database, dataset: string, rowId: string): RawChange[] {\n return db\n .query(\n \"SELECT hlc, node_id, dataset, row_id, col, value FROM crdt_changes WHERE dataset = ? AND row_id = ? ORDER BY hlc\",\n )\n .all(dataset, rowId) as RawChange[];\n}\n\n// ---- documents ---------------------------------------------------------------\n\n/** Ids of every block that was ever assigned to this document. Whether a block\n * counts at a given cutoff is decided later from its registers at that cutoff. */\nfunction everBlockIds(db: Database, docId: string): string[] {\n return (\n db\n .query(\n \"SELECT DISTINCT row_id FROM crdt_changes WHERE dataset = 'doc_blocks' AND col = 'doc_id' AND value = ?\",\n )\n .all(JSON.stringify(docId)) as { row_id: string }[]\n ).map((r) => r.row_id);\n}\n\n/** Doc register changes + changes of every block ever attached, in HLC order. */\nfunction docChanges(db: Database, docId: string): RawChange[] {\n const blocks = everBlockIds(db, docId);\n const placeholders = blocks.map(() => \"?\").join(\",\");\n const blockClause = blocks.length\n ? ` OR (dataset = 'doc_blocks' AND row_id IN (${placeholders}))`\n : \"\";\n return db\n .query(\n `SELECT hlc, node_id, dataset, row_id, col, value FROM crdt_changes\n WHERE (dataset = 'documents' AND row_id = ?)${blockClause}\n ORDER BY hlc`,\n )\n .all(docId, ...blocks) as RawChange[];\n}\n\nexport interface DocRevision {\n /** Version token (max HLC of the revision) — pass to documentAtVersion/revertDocument. */\n version: string;\n /** Wall-clock time derived from the version HLC (ISO 8601). */\n at: string;\n node_id: string;\n changes: number;\n created: boolean;\n deleted: boolean;\n title_changed: boolean;\n blocks_changed: number;\n blocks_deleted: number;\n}\n\n/** A document's edit history, newest first, clustered into save-sized revisions. */\nexport function listDocumentRevisions(db: Database, id: string): DocRevision[] {\n const changes = docChanges(db, id);\n if (!changes.length) throw new MhError(\"not_found\", `no such document: ${id}`);\n return clusterRevisions(changes)\n .map((group) => {\n const changedBlocks = new Set<string>();\n const deletedBlocks = new Set<string>();\n let created = false;\n let deleted = false;\n let titleChanged = false;\n for (const c of group) {\n if (c.dataset === \"documents\") {\n if (c.col === \"created_hlc\") created = true;\n else if (c.col === \"title\") titleChanged = true;\n else if (c.col === \"__deleted\") deleted = flagSet(c.value);\n } else if (c.col === \"__deleted\" && flagSet(c.value)) {\n deletedBlocks.add(c.row_id);\n } else if (c.col === \"text\") {\n changedBlocks.add(c.row_id);\n }\n }\n const last = group[group.length - 1]!;\n return {\n version: last.hlc,\n at: hlcIso(last.hlc),\n node_id: last.node_id,\n changes: group.length,\n created,\n deleted,\n title_changed: titleChanged,\n blocks_changed: changedBlocks.size,\n blocks_deleted: deletedBlocks.size,\n };\n })\n .reverse();\n}\n\nexport interface DocumentVersionState {\n id: string;\n title: string;\n body: string;\n deleted: boolean;\n /** Exact version (max HLC <= the requested cutoff) this state corresponds to. */\n version: string;\n}\n\n/** Reconstruct a document as of version cutoff `at` (state at hlc <= at). */\nexport function documentAtVersion(db: Database, id: string, at: string): DocumentVersionState {\n if (!at) throw new MhError(\"invalid_input\", \"missing version cutoff\");\n const changes = docChanges(db, id).filter((c) => c.hlc <= at);\n if (!changes.length)\n throw new MhError(\"not_found\", `no version of document ${id} at or before ${at}`);\n\n const docRegs = registersAt(changes.filter((c) => c.dataset === \"documents\"), at);\n const parse = (col: string): unknown => {\n const r = docRegs.get(col);\n return r?.value == null ? undefined : JSON.parse(r.value);\n };\n\n // Per-block registers at the cutoff; a block counts only if it points at this\n // document, is not tombstoned, and has text — mirroring recomputeDocBody().\n const byBlock = new Map<string, RawChange[]>();\n for (const c of changes) {\n if (c.dataset !== \"doc_blocks\") continue;\n (byBlock.get(c.row_id) ?? byBlock.set(c.row_id, []).get(c.row_id)!).push(c);\n }\n const blocks: { id: string; text: string; order_key: string | null; blankAfter: number }[] = [];\n for (const [blockId, blockChanges] of byBlock) {\n const regs = registersAt(blockChanges, at);\n const reg = (col: string): unknown => {\n const r = regs.get(col);\n return r?.value == null ? undefined : JSON.parse(r.value);\n };\n if (reg(\"doc_id\") !== id) continue;\n if (regs.get(\"__deleted\") && flagSet(regs.get(\"__deleted\")!.value)) continue;\n const text = reg(\"text\");\n if (typeof text !== \"string\" || !text) continue;\n blocks.push({\n id: blockId,\n text,\n order_key: (reg(\"order_key\") as string | undefined) ?? null,\n blankAfter: (reg(\"blank_after\") as number | undefined) ?? 0,\n });\n }\n blocks.sort((a, b) => {\n if (a.order_key !== b.order_key) {\n if (a.order_key === null) return -1; // NULL sorts first, like the SQL ORDER BY\n if (b.order_key === null) return 1;\n return a.order_key < b.order_key ? -1 : 1;\n }\n return a.id < b.id ? -1 : 1;\n });\n\n // Pre-block-model documents kept their body in the documents.body register;\n // it stays authoritative until the first block exists (cf. isBlockManaged).\n const body = byBlock.size\n ? serializeDocBlocks(blocks)\n : ((parse(\"body\") as string | undefined) ?? \"\");\n\n return {\n id,\n title: (parse(\"title\") as string | undefined) ?? \"\",\n body,\n deleted: docRegs.get(\"__deleted\") ? flagSet(docRegs.get(\"__deleted\")!.value) : false,\n version: changes[changes.length - 1]!.hlc,\n };\n}\n\nexport interface RevertDocResult {\n id: string;\n changed: boolean;\n /** The version token the document was restored to. */\n restored: string;\n /** The document's version after the revert (a new head — revert is a forward write). */\n version: string;\n}\n\n/** Restore a document's title/body to a past version, as a new forward edit\n * (reuses updateDocument's block reconcile, so unchanged blocks keep identity). */\nexport function revertDocument(\n db: Database,\n id: string,\n to: string,\n opts: { ifMatch?: string } = {},\n): RevertDocResult {\n const cur = getDocument(db, id);\n if (!cur) throw new MhError(\"not_found\", `no such document: ${id}`);\n if (opts.ifMatch !== undefined && documentVersion(db, id) !== opts.ifMatch)\n throw new MhError(\"stale\", `stale: document changed since ${opts.ifMatch}; re-read first`);\n\n const past = documentAtVersion(db, id, to);\n if (past.deleted)\n throw new MhError(\"invalid_input\", \"target version is a deleted state; use doc delete instead\");\n\n const fields: { title?: string; body?: string } = {};\n if (past.title !== cur.title) fields.title = past.title;\n if (past.body !== (cur.body ?? \"\")) fields.body = past.body;\n if (Object.keys(fields).length) updateDocument(db, id, fields);\n\n return {\n id,\n changed: Object.keys(fields).length > 0,\n restored: past.version,\n version: documentVersion(db, id),\n };\n}\n\n// ---- records -------------------------------------------------------------------\n\n/** records-dataset meta columns; every other col is a property cell. */\nconst RECORD_META = new Set([\"database_id\", \"created_hlc\", \"order_key\", \"__deleted\"]);\n\nexport interface RecordRevision {\n version: string;\n at: string;\n node_id: string;\n changes: number;\n created: boolean;\n deleted: boolean;\n /** Property ids of the cells written in this revision. */\n fields: string[];\n moved: boolean;\n}\n\n/** A record's edit history, newest first, clustered into save-sized revisions. */\nexport function listRecordRevisions(db: Database, id: string): RecordRevision[] {\n const changes = rowChanges(db, \"records\", id);\n if (!changes.length) throw new MhError(\"not_found\", `no such record: ${id}`);\n return clusterRevisions(changes)\n .map((group) => {\n const fields = new Set<string>();\n let created = false;\n let deleted = false;\n let moved = false;\n for (const c of group) {\n if (c.col === \"created_hlc\") created = true;\n else if (c.col === \"__deleted\") deleted = flagSet(c.value);\n else if (c.col === \"order_key\") moved = true;\n else if (!RECORD_META.has(c.col)) fields.add(c.col);\n }\n const last = group[group.length - 1]!;\n return {\n version: last.hlc,\n at: hlcIso(last.hlc),\n node_id: last.node_id,\n changes: group.length,\n created,\n deleted,\n fields: [...fields],\n moved,\n };\n })\n .reverse();\n}\n\nexport interface RecordVersionState {\n id: string;\n database_id: string | null;\n deleted: boolean;\n /** Cells present at that version, keyed by property id (raw, no name mapping). */\n data: Record<string, unknown>;\n version: string;\n}\n\n/** Reconstruct a record as of version cutoff `at` (state at hlc <= at). */\nexport function recordAtVersion(db: Database, id: string, at: string): RecordVersionState {\n if (!at) throw new MhError(\"invalid_input\", \"missing version cutoff\");\n const changes = rowChanges(db, \"records\", id).filter((c) => c.hlc <= at);\n if (!changes.length)\n throw new MhError(\"not_found\", `no version of record ${id} at or before ${at}`);\n\n const regs = registersAt(changes, at);\n const data: Record<string, unknown> = {};\n for (const [col, reg] of regs) {\n if (RECORD_META.has(col)) continue;\n if (reg.value === null) continue; // cleared cell (json_remove)\n data[col] = JSON.parse(reg.value);\n }\n const dbReg = regs.get(\"database_id\");\n return {\n id,\n database_id: dbReg?.value == null ? null : (JSON.parse(dbReg.value) as string),\n deleted: regs.get(\"__deleted\") ? flagSet(regs.get(\"__deleted\")!.value) : false,\n data,\n version: changes[changes.length - 1]!.hlc,\n };\n}\n\nexport interface RevertRecordResult {\n id: string;\n changed: boolean;\n /** Property ids whose cells were written by the revert. */\n fields: string[];\n /** True when the revert resurrected a tombstoned record. */\n undeleted: boolean;\n restored: string;\n}\n\n/** Restore a record's cells to a past version as a new forward edit. Only cells\n * of currently-live properties are touched, so no orphan cells are recreated\n * (the repairHub invariant). Reverting a tombstoned record resurrects it. */\nexport function revertRecord(db: Database, id: string, to: string): RevertRecordResult {\n const cur = db\n .query(\"SELECT database_id, data, __deleted FROM records WHERE id = ?\")\n .get(id) as { database_id: string | null; data: string; __deleted: number } | null;\n if (!cur) throw new MhError(\"not_found\", `no such record: ${id}`);\n\n const past = recordAtVersion(db, id, to);\n if (past.deleted)\n throw new MhError(\"invalid_input\", \"target version is a deleted state; use record delete instead\");\n\n const liveProps = new Set(\n cur.database_id ? listProperties(db, cur.database_id).map((p) => p.id) : [],\n );\n const curData = JSON.parse(cur.data || \"{}\") as Record<string, unknown>;\n const fields: string[] = [];\n for (const propId of liveProps) {\n const inPast = Object.hasOwn(past.data, propId);\n const inCur = Object.hasOwn(curData, propId);\n if (inPast && (!inCur || JSON.stringify(past.data[propId]) !== JSON.stringify(curData[propId]))) {\n emit(db, \"records\", id, propId, past.data[propId]);\n fields.push(propId);\n } else if (!inPast && inCur) {\n emit(db, \"records\", id, propId, undefined); // clear: materializes as json_remove\n fields.push(propId);\n }\n }\n const undeleted = cur.__deleted !== 0;\n if (undeleted) emit(db, \"records\", id, \"__deleted\", 0);\n\n return { id, changed: fields.length > 0 || undeleted, fields, undeleted, restored: past.version };\n}\n\nexport interface FieldHistoryEntry {\n version: string;\n at: string;\n node_id: string;\n /** The value written; undefined when the write cleared the cell. */\n value: unknown;\n cleared: boolean;\n}\n\n/** The full write trail of one record cell (property id), newest first. */\nexport function recordFieldHistory(db: Database, id: string, propId: string): FieldHistoryEntry[] {\n const rows = db\n .query(\n \"SELECT hlc, node_id, value FROM crdt_changes WHERE dataset = 'records' AND row_id = ? AND col = ? ORDER BY hlc DESC\",\n )\n .all(id, propId) as { hlc: string; node_id: string; value: string | null }[];\n return rows.map((r) => ({\n version: r.hlc,\n at: hlcIso(r.hlc),\n node_id: r.node_id,\n value: r.value === null ? undefined : JSON.parse(r.value),\n cleared: r.value === null,\n }));\n}\n"
|
|
126
|
+
"// Token gate for the server. In --debug mode auth is disabled entirely. Otherwise\n// a single token guards every request. A token may arrive three ways so both\n// programmatic clients and browsers work:\n// - Authorization: Bearer <token> (API clients, and the injected fetch shim)\n// - Cookie: mh_token=<token> (browser top-level navigations)\n// - ?token=<token> (links / quick curl testing)\n// Browsers without a token get an unlock page that stores the password to\n// localStorage + a cookie and reloads; served HTML then gets a fetch shim that\n// re-attaches the token as a Bearer header on same-origin API calls.\n\nimport type { Database } from \"bun:sqlite\";\nimport { loadOrRotate } from \"./token.ts\";\nimport { isAcceptedGrant } from \"./pairing.ts\";\nimport { RENEW_PATH } from \"./protocol.ts\";\n\n// Three modes:\n// debug — auth off entirely.\n// staticToken — fixed token from --token/env; not persisted, never expires.\n// db (managed) — persistent, rotating token in ~/.metahub (see ./token.ts).\nexport interface AuthConfig {\n debug: boolean;\n staticToken: string | null;\n db: Database | null;\n ttlMs: number;\n graceMs: number;\n}\n\nconst COOKIE = \"mh_token\";\n\nfunction cookieToken(req: Request): string | null {\n const header = req.headers.get(\"cookie\");\n if (!header) return null;\n for (const part of header.split(\";\")) {\n const [k, ...v] = part.trim().split(\"=\");\n if (k === COOKIE) return decodeURIComponent(v.join(\"=\"));\n }\n return null;\n}\n\nexport function extractToken(req: Request, url: URL): string | null {\n const auth = req.headers.get(\"authorization\");\n if (auth?.startsWith(\"Bearer \")) return auth.slice(7);\n return cookieToken(req) ?? url.searchParams.get(\"token\");\n}\n\n/** Whether auth is on at all (so the gate runs and the fetch shim is injected). */\nexport function authActive(cfg: AuthConfig): boolean {\n return !cfg.debug && (cfg.staticToken != null || cfg.db != null);\n}\n\n/** The currently-valid token and its expiry, or null when auth is off. */\nexport function activeToken(cfg: AuthConfig): { token: string; exp: number } | null {\n if (cfg.debug) return null;\n if (cfg.staticToken != null) return { token: cfg.staticToken, exp: Infinity };\n if (cfg.db) {\n const s = loadOrRotate(cfg.db, cfg.ttlMs, cfg.graceMs);\n return { token: s.token, exp: s.exp };\n }\n return null;\n}\n\nexport function hasValidToken(req: Request, url: URL, cfg: AuthConfig): boolean {\n const cur = activeToken(cfg);\n if (!cur) return true;\n return extractToken(req, url) === cur.token;\n}\n\n/**\n * Gate for /sync: accept the master token OR any durable per-peer grant issued\n * during pairing (see ./pairing.ts). Returns true when auth is off (--debug).\n * `db` is needed to look up grants even in staticToken mode where cfg.db is null.\n */\nexport function acceptsSyncToken(req: Request, url: URL, cfg: AuthConfig, db: Database): boolean {\n if (!authActive(cfg)) return true;\n const presented = extractToken(req, url);\n if (!presented) return false;\n const cur = activeToken(cfg);\n if (cur && presented === cur.token) return true;\n return isAcceptedGrant(db, presented);\n}\n\n/**\n * Token exchange: a holder of the current token (or the in-grace previous token)\n * gets the current token back. Managed mode only — returns null otherwise.\n */\nexport function renewToken(\n req: Request,\n url: URL,\n cfg: AuthConfig,\n): { token: string; exp: number } | null {\n if (cfg.debug || cfg.staticToken != null || !cfg.db) return null;\n const s = loadOrRotate(cfg.db, cfg.ttlMs, cfg.graceMs);\n const presented = extractToken(req, url);\n if (!presented) return null;\n if (presented === s.token) return { token: s.token, exp: s.exp };\n if (s.prev && presented === s.prev && Date.now() < s.prevExp) {\n return { token: s.token, exp: s.exp };\n }\n return null;\n}\n\n/** A browser navigation (so we can answer with an unlock page instead of a 401). */\nexport function wantsHtml(req: Request): boolean {\n return req.method === \"GET\" && (req.headers.get(\"accept\") ?? \"\").includes(\"text/html\");\n}\n\nconst HTML_HEADERS = { \"content-type\": \"text/html; charset=utf-8\" };\n\n/** Self-contained password prompt: stores token to localStorage + cookie, reloads. */\nexport function unlockPage(): string {\n return `<!doctype html><html lang=\"en\"><head>\n<meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n<title>Unlock</title>\n<style>\n body{font:14px/1.5 -apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,sans-serif;\n display:flex;min-height:100vh;margin:0;align-items:center;justify-content:center;\n background:#0d1117;color:#e6edf3}\n form{background:#161b22;border:1px solid #30363d;border-radius:10px;padding:28px;width:300px}\n h1{font-size:16px;margin:0 0 14px}\n input{width:100%;box-sizing:border-box;padding:8px;border-radius:6px;border:1px solid #30363d;\n background:#0d1117;color:inherit;margin-bottom:12px}\n button{width:100%;padding:8px;border:0;border-radius:6px;background:#238636;color:#fff;cursor:pointer}\n .err{color:#f85149;margin:0 0 12px;font-size:13px}\n</style></head><body>\n<form id=\"f\" style=\"display:none\">\n <h1>🔒 This server requires a token</h1>\n <p class=\"err\" id=\"e\" style=\"display:none\">Token rejected — try again.</p>\n <input id=\"t\" type=\"password\" placeholder=\"Token\" autocomplete=\"current-password\">\n <button type=\"submit\">Unlock</button>\n</form>\n<script>\n var KEY = \"mh_token\";\n function save(t) {\n localStorage.setItem(KEY, t);\n document.cookie = \"${COOKIE}=\" + encodeURIComponent(t) + \"; path=/; SameSite=Strict; Max-Age=31536000\";\n }\n function showForm() {\n document.getElementById(\"f\").style.display = \"block\";\n // A leftover token means an attempt (or silent renewal) failed the gate.\n if (localStorage.getItem(KEY)) document.getElementById(\"e\").style.display = \"block\";\n document.getElementById(\"t\").focus();\n }\n document.getElementById(\"f\").addEventListener(\"submit\", function (ev) {\n ev.preventDefault();\n save(document.getElementById(\"t\").value);\n location.reload();\n });\n // Seamless renewal for top-level navigation: if we hold a token, try swapping\n // it for the current one before prompting. Covers the case where the token\n // rotated while this browser held the (in-grace) previous one.\n var stored = localStorage.getItem(KEY);\n if (stored) {\n fetch(\"${RENEW_PATH}\", { headers: { authorization: \"Bearer \" + stored } })\n .then(function (r) { return r.ok ? r.json() : null; })\n .then(function (d) { if (d && d.token) { save(d.token); location.reload(); } else { showForm(); } })\n .catch(showForm);\n } else {\n showForm();\n }\n</script>\n</body></html>`;\n}\n\n/**\n * The injected page runtime (built from src/webui/runtime.ts, served at\n * /mh-runtime.js). Carries what the old inline fetch shim did — same-origin\n * Bearer attach + transparent 401 renewal — plus the offline machinery:\n * service-worker registration and the local-replica RPC bridge that lets\n * hosted site pages read/write hub data with no network. Loaded synchronously\n * (classic script, head-first) so fetch is wrapped before page code runs.\n */\nconst RUNTIME_TAG = `<script src=\"/mh-runtime.js\"></script>`;\n\n/** Insert the runtime into an HTML document (right after <head>, else prepend). */\nexport function injectShim(html: string): string {\n const i = html.toLowerCase().indexOf(\"<head>\");\n if (i >= 0) return html.slice(0, i + 6) + RUNTIME_TAG + html.slice(i + 6);\n return RUNTIME_TAG + html;\n}\n\n/** Inject the page runtime into HTML responses. Unconditional (unlike the old\n * token-only shim): the offline bridge matters even in --debug mode where\n * auth is off — the token half simply no-ops without a stored token. */\nexport async function withShim(res: Response, _cfg: AuthConfig): Promise<Response> {\n const ct = res.headers.get(\"content-type\") ?? \"\";\n if (!ct.includes(\"text/html\")) return res;\n const html = injectShim(await res.text());\n const headers = new Headers(res.headers);\n return new Response(html, { status: res.status, headers });\n}\n\nexport function unauthorized(): Response {\n return Response.json({ error: \"unauthorized\" }, { status: 401 });\n}\n\nexport { HTML_HEADERS };\n",
|
|
127
|
+
"import { fileURLToPath } from \"node:url\";\nimport { readdirSync, statSync } from \"node:fs\";\nimport { join, dirname } from \"node:path\";\n// Inlined as a string at build time (Bun text loader), so packaged builds and\n// compiled binaries carry the stylesheet with no extra asset file. In dev the\n// file is re-read from disk per request instead — see getCss().\nimport APP_CSS from \"../styles.css\" with { type: \"text\" };\nimport { ICON_192, ICON_512, ICON_180 } from \"./icons.ts\";\n\n// Serves the browser WebUI at `/`. Core never imports this module: it is wired\n// into the server through startServer's `ui` option (see core/sync/server.ts),\n// keeping presentation code out of the core layer and off the CLI startup path.\n// The Preact bundle itself is built or loaded lazily on the first request.\n\n/** True when running from the source tree (bun dev / bun test) rather than a\n * packaged dist build or a compiled binary. Switches asset serving to\n * rebuild-on-change so a browser refresh is enough to see edits. */\nconst RUNNING_FROM_SOURCE = import.meta.url.includes(\"/src/webui/\");\n\n/** The HTML shell. The Preact app and stylesheet are delivered separately as\n * /webui.js and /webui.css (both served below, never cached). */\nconst HTML = `<!doctype html>\n<html lang=\"zh\">\n<head>\n<meta charset=\"utf-8\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, viewport-fit=cover\" />\n<!-- Mobile browser chrome (status/address bar) tints to theme-color; app.tsx\n keeps #theme-color-meta in sync with the active theme + visible surface. -->\n<meta name=\"theme-color\" id=\"theme-color-meta\" content=\"#ffffff\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"default\" />\n<title>Metahub</title>\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<!-- Load web fonts without blocking first paint: media=\"print\" keeps the\n stylesheet non-render-blocking, then onload flips it to \"all\". The page\n paints instantly with the system-font fallbacks baked into --ui/--mono and\n swaps to the web fonts when they arrive (or stays on system fonts offline).\n This is what kept the desktop cold-start white for seconds on slow networks. -->\n<link rel=\"stylesheet\" media=\"print\" onload=\"this.media='all'\" href=\"https://fonts.googleapis.com/css2?family=Hanken+Grotesk:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap\">\n<noscript><link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css2?family=Hanken+Grotesk:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap\"></noscript>\n<!-- FOUC guard: resolve the stored choice (system → OS preference) to an\n explicit data-resolved before first paint. CSS keys off data-resolved\n alone, so the dark palette exists exactly once — see styles.css. Dark also\n pre-tints the status bar (hex mirrors --bg) so the first frame isn't white. -->\n<script>try{var t=localStorage.getItem('mh-theme'),d=t==='dark'||(t!=='light'&&matchMedia('(prefers-color-scheme: dark)').matches);document.documentElement.dataset.resolved=d?'dark':'light';if(d)document.getElementById('theme-color-meta').content='#1a1a1c'}catch(e){}</script>\n<link rel=\"manifest\" href=\"/manifest.webmanifest\">\n<link rel=\"apple-touch-icon\" href=\"/icons/icon-180.png\">\n<link rel=\"stylesheet\" href=\"/webui.css\">\n</head>\n<body>\n<div id=\"app\"></div>\n<script type=\"module\" src=\"/webui.js\"></script>\n</body>\n</html>`;\n\n/** Bundles injected by `bun build --compile` binaries (e.g. the desktop\n * sidecar), where neither a sibling dist/ nor the source tree exists at\n * runtime — embedded at build time and handed in here. */\nconst injected: Record<string, string | null> = {\n js: null,\n sw: null,\n dbWorker: null,\n runtime: null,\n sdk: null,\n};\nlet injectedWasm: ArrayBuffer | null = null;\n\nexport function setWebuiBundle(bundle: {\n js: string;\n sw: string;\n dbWorker: string;\n runtime: string;\n sdk: string;\n wasm: Uint8Array;\n}): void {\n injected.js = bundle.js;\n injected.sw = bundle.sw;\n injected.dbWorker = bundle.dbWorker;\n injected.runtime = bundle.runtime;\n injected.sdk = bundle.sdk;\n // Normalize to a whole ArrayBuffer (what Response accepts under every lib).\n const w = bundle.wasm;\n injectedWasm =\n w.byteOffset === 0 && w.byteLength === w.buffer.byteLength\n ? (w.buffer as ArrayBuffer)\n : (w.slice().buffer as ArrayBuffer);\n}\n\n/** Newest mtime across the browser-bundle sources (src/webui/**.ts[x]).\n * ./server is skipped — server-side code never enters the browser bundle. */\nfunction newestSourceMtime(dir: string): number {\n let newest = 0;\n for (const e of readdirSync(dir, { withFileTypes: true })) {\n if (e.name === \"server\" || e.name.startsWith(\".\")) continue;\n const p = join(dir, e.name);\n if (e.isDirectory()) newest = Math.max(newest, newestSourceMtime(p));\n else if (/\\.tsx?$/.test(e.name)) newest = Math.max(newest, statSync(p).mtimeMs);\n }\n return newest;\n}\n\n/**\n * One resolver per browser bundle, all with the same three-way strategy:\n * embedded (compiled binary) > rebuild-on-change from source (dev: any newer\n * source file triggers a rebuild, so a refresh is enough) > prebuilt dist\n * sibling (packaged builds), process-cached.\n */\nfunction bundleGetter(opts: {\n key: keyof typeof injected;\n /** Dev entrypoint, relative to this file. */\n entry: string;\n /** Prebuilt artifact name in dist/ (sibling of the compiled assets.js). */\n dist: string;\n /** Extra source dirs (relative to repo src/) the dev mtime scan must cover. */\n extraDirs?: string[];\n}): () => Promise<string> {\n let cached: string | null = null;\n let cachedMtime = 0;\n return async () => {\n const fromBinary = injected[opts.key];\n if (fromBinary != null) return fromBinary;\n\n if (RUNNING_FROM_SOURCE) {\n const srcDir = fileURLToPath(new URL(\"..\", import.meta.url));\n let newest = newestSourceMtime(srcDir);\n for (const extra of opts.extraDirs ?? []) {\n newest = Math.max(newest, newestSourceMtime(fileURLToPath(new URL(extra, import.meta.url))));\n }\n if (cached == null || newest > cachedMtime) {\n const entry = fileURLToPath(new URL(opts.entry, import.meta.url));\n const res = await Bun.build({ entrypoints: [entry], target: \"browser\" });\n if (!res.success) throw new AggregateError(res.logs, `${opts.dist} build failed`);\n cached = await res.outputs[0]!.text();\n cachedMtime = newest;\n }\n return cached;\n }\n\n if (cached == null) {\n const prebuilt = Bun.file(fileURLToPath(new URL(`./${opts.dist}`, import.meta.url)));\n if (!(await prebuilt.exists())) {\n throw new Error(`${opts.dist} missing: run \\`bun run build\\``);\n }\n cached = await prebuilt.text();\n }\n return cached;\n };\n}\n\nconst getJs = bundleGetter({ key: \"js\", entry: \"../app.tsx\", dist: \"webui.js\" });\nconst getSwRaw = bundleGetter({ key: \"sw\", entry: \"../sw.ts\", dist: \"sw.js\" });\nconst getDbWorker = bundleGetter({ key: \"dbWorker\", entry: \"../data/db-worker.ts\", dist: \"db-worker.js\" });\nconst getRuntime = bundleGetter({ key: \"runtime\", entry: \"../runtime.ts\", dist: \"mh-runtime.js\" });\nconst getSdk = bundleGetter({ key: \"sdk\", entry: \"../../sdk/client.ts\", dist: \"metahub-sdk.js\", extraDirs: [\"../../sdk\"] });\n\n/** The stylesheet: read from disk per request in dev (so CSS edits land on the\n * next refresh), the build-time inlined copy otherwise. */\nasync function getCss(): Promise<string> {\n if (RUNNING_FROM_SOURCE) {\n return Bun.file(fileURLToPath(new URL(\"../styles.css\", import.meta.url))).text();\n }\n return APP_CSS;\n}\n\n/** /sw.js with its cache version stamped in: a hash of the current js+css, so\n * any bundle change byte-diffs the worker (the browser's update trigger) and\n * stale shell caches are dropped on activation. */\nasync function getSw(): Promise<string> {\n const [raw, js, css] = await Promise.all([getSwRaw(), getJs(), getCss()]);\n const version = new Bun.CryptoHasher(\"sha256\").update(js).update(css).digest(\"hex\").slice(0, 16);\n return raw.replaceAll(\"__MH_SW_VERSION__\", version);\n}\n\n/** sqlite3.wasm bytes: embedded (compiled binary) > node_modules (dev) >\n * sibling dist copy (packaged; build.ts copies it next to the bundles). */\nasync function getWasm(): Promise<ArrayBuffer> {\n if (injectedWasm != null) return injectedWasm;\n const path = RUNNING_FROM_SOURCE\n ? join(\n dirname(Bun.resolveSync(\"@sqlite.org/sqlite-wasm\", fileURLToPath(new URL(\".\", import.meta.url)))),\n \"sqlite3.wasm\",\n )\n : fileURLToPath(new URL(\"./sqlite3.wasm\", import.meta.url));\n const f = Bun.file(path);\n if (!(await f.exists())) {\n throw new Error(`sqlite3.wasm missing at ${path} — run \\`bun install\\` / \\`bun run build\\``);\n }\n return f.arrayBuffer();\n}\n\n/** Web app manifest: installability metadata for add-to-home-screen/PWA. */\nconst MANIFEST = JSON.stringify({\n name: \"Metahub\",\n short_name: \"Metahub\",\n start_url: \"/\",\n scope: \"/\",\n display: \"standalone\",\n background_color: \"#ffffff\",\n theme_color: \"#ffffff\",\n icons: [\n { src: \"/icons/icon-192.png\", sizes: \"192x192\", type: \"image/png\" },\n { src: \"/icons/icon-512.png\", sizes: \"512x512\", type: \"image/png\" },\n ],\n});\n\nconst ICONS: Record<string, string> = {\n \"/icons/icon-192.png\": ICON_192,\n \"/icons/icon-512.png\": ICON_512,\n \"/icons/icon-180.png\": ICON_180,\n};\n\n/** Pre-build & cache the JS bundle ahead of the first request. In dev the first\n * `/webui.js` hit otherwise pays for a `Bun.build` (1–3s) that blocks the\n * WebUI's first paint; warming it right after the server starts listening\n * moves that cost off the cold-start critical path. In packaged builds the\n * bundle is already embedded via setWebuiBundle(), so this is a no-op. */\nexport async function warmWebui(): Promise<void> {\n try {\n await getJs();\n } catch {\n // best-effort: a failed warm just falls back to building on first request\n }\n}\n\n// Served by a local server to (mostly) one machine: `no-store` everywhere\n// trades a few KB per load for never needing a hard refresh after an update.\nfunction asset(body: string, contentType: string): Response {\n return new Response(body, {\n headers: { \"content-type\": contentType, \"cache-control\": \"no-store\" },\n });\n}\n\n/** Handle WebUI asset requests. Returns null for anything else so the caller\n * can fall through to the API routes. */\nexport async function serveWebui(req: Request): Promise<Response | null> {\n if (req.method !== \"GET\") return null;\n const { pathname } = new URL(req.url);\n\n if (pathname === \"/\") return asset(HTML, \"text/html; charset=utf-8\");\n if (pathname === \"/webui.css\") return asset(await getCss(), \"text/css; charset=utf-8\");\n if (pathname === \"/manifest.webmanifest\") return asset(MANIFEST, \"application/manifest+json\");\n const icon = ICONS[pathname];\n if (icon) {\n return new Response(Buffer.from(icon, \"base64\"), {\n // Icons never change within a deploy; let the browser keep them a day.\n headers: { \"content-type\": \"image/png\", \"cache-control\": \"public, max-age=86400\" },\n });\n }\n if (pathname === \"/sqlite3.wasm\") {\n try {\n return new Response(await getWasm(), {\n // ~1MB and changes only on dependency upgrades; the service worker\n // additionally keeps it cache-first for offline starts.\n headers: { \"content-type\": \"application/wasm\", \"cache-control\": \"public, max-age=86400\" },\n });\n } catch (e) {\n console.error(\"[webui] failed to serve /sqlite3.wasm —\", e);\n return new Response(`sqlite3.wasm unavailable: ${e}`, { status: 500 });\n }\n }\n const script: Record<string, () => Promise<string>> = {\n \"/webui.js\": getJs,\n \"/sw.js\": getSw,\n \"/db-worker.js\": getDbWorker,\n \"/mh-runtime.js\": getRuntime,\n \"/metahub-sdk.js\": getSdk,\n };\n const getter = script[pathname];\n if (getter) {\n try {\n return asset(await getter(), \"text/javascript; charset=utf-8\");\n } catch (e) {\n // This catch is the only thing between the error and oblivion: Bun only\n // auto-logs *uncaught* handler errors, and we catch this one. Log the full\n // error object (not `${e}`) so getJs's AggregateError sub-logs surface —\n // otherwise the 500 lives solely in the response body, never the logs.\n console.error(`[webui] failed to serve ${pathname} —`, e);\n return new Response(`webui build failed: ${e}`, { status: 500 });\n }\n }\n return null;\n}\n",
|
|
128
|
+
"// PWA icons (PNG, base64) — resized from apps/desktop/build/icon.png (1024px).\n// Embedded as strings so packaged builds and compiled binaries need no asset files.\n\nexport const ICON_192 = \"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\";\n\nexport const ICON_512 = \"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\";\n\nexport const ICON_180 = \"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\";\n",
|
|
129
|
+
"import { z } from \"zod\";\nimport { MhError } from \"../../core/errors.ts\";\nimport { errorResponse, type Route, type RouteCtx } from \"../../core/sync/routes.ts\";\nimport {\n listDatabases,\n createDatabase,\n updateDatabase,\n duplicateDatabase,\n deleteDatabase,\n} from \"../../core/databases.ts\";\nimport {\n listProperties,\n addProperty,\n updateProperty,\n setPropertyWidth,\n removeProperty,\n type PropType,\n type PropertyConfig,\n} from \"../../core/properties.ts\";\nimport {\n listRecords,\n getRecord,\n createRecord,\n updateRecord,\n moveRecord,\n deleteRecord,\n} from \"../../core/records.ts\";\nimport {\n listDocuments,\n getDocument,\n createDocument,\n updateDocument,\n documentVersion,\n moveDocument,\n duplicateDocument,\n deleteDocument,\n} from \"../../core/documents.ts\";\nimport {\n listDocumentRevisions,\n documentAtVersion,\n revertDocument,\n listRecordRevisions,\n recordAtVersion,\n recordFieldHistory,\n revertRecord,\n listPropertyRevisions,\n revertProperty,\n listDatabaseActivity,\n} from \"../../core/history.ts\";\nimport { search } from \"../../core/search.ts\";\nimport { getNodeId } from \"../../core/node.ts\";\nimport {\n cacheStats,\n cachedBlobs,\n readPolicy,\n knownNodes,\n knownBuckets,\n clearCache,\n reconcileCache,\n setFullNodes,\n setRedundancy,\n setPinned,\n verifyAnchorPresence,\n readBlobVerifiedAt,\n} from \"../../core/blobs.ts\";\nimport type { DbDriver } from \"../../core/driver.ts\";\nimport { getServerConfig } from \"../../core/config.ts\";\nimport pkg from \"../../../package.json\" with { type: \"json\" };\n\n// Read-only viewer + light editing for the browser UI. These routes wrap the\n// same core functions the CLI uses, so every write goes through `emit()` and\n// replicates over /sync. Ids are carried as query params to keep the server's\n// exact-path matcher (see ./routes.ts) and OpenAPI generation unchanged.\n\n// --- pragmatic schemas (drive /docs; intentionally loose) -------------------\n\nconst DatabaseSchema = z.object({\n id: z.string(),\n name: z.string(),\n icon: z.string().nullable(),\n created_hlc: z.string(),\n});\nconst PropertySchema = z.object({\n id: z.string(),\n database_id: z.string(),\n name: z.string(),\n type: z.string(),\n config: z.any().nullable(),\n position: z.number(),\n});\nconst RecordSchema = z.object({\n id: z.string(),\n database_id: z.string(),\n values: z\n .record(z.string(), z.any())\n .describe(\n 'Field values keyed by property name (e.g. {\"Amount\":35}). Reads nest cells here; writes take a flat {column: value} map. Lossy when two properties share a name — prefer `cells` then.',\n ),\n cells: z\n .record(z.string(), z.any())\n .describe(\n \"Field values keyed by property id — lossless under duplicate property names. Writes accept property ids as keys too.\",\n ),\n});\nconst MoveRecordReq = z.object({\n target: z.string(),\n where: z.enum([\"before\", \"after\"]),\n});\nconst DocumentSummarySchema = z.object({\n id: z.string(),\n title: z.string(),\n database_id: z.string().nullable(),\n parent_id: z.string().nullable(),\n created_hlc: z.string(),\n order_key: z.string().nullable(),\n});\nconst MoveDocumentReq = z.object({\n target: z.string(),\n where: z.enum([\"before\", \"after\", \"into\"]),\n});\nconst DocumentSchema = DocumentSummarySchema.extend({\n body: z.string().nullable(),\n // Read/edit token (max HLC over the doc + its blocks); echo it back as\n // `if_match` on PATCH to detect concurrent changes.\n version: z.string().optional(),\n});\nconst SearchHitSchema = z.object({\n type: z.string(),\n id: z.string(),\n database_id: z.string().nullable(),\n title: z.string().optional(),\n snippet: z.string(),\n});\nconst OkSchema = z.object({ ok: z.boolean() });\n\nconst CreateDatabaseReq = z.object({ name: z.string(), icon: z.string().optional() });\nconst UpdateDatabaseReq = z.object({\n name: z.string().optional(),\n icon: z.string().nullable().optional(),\n});\nconst DuplicateDatabaseReq = z.object({\n name: z.string().optional().describe(\"Name for the copy (defaults to the source name)\"),\n icon: z.string().optional(),\n});\nconst CreatePropertyReq = z.object({\n db: z.string(),\n name: z.string(),\n type: z.string(),\n config: z.any().optional(),\n});\nconst UpdatePropertyReq = z.object({\n name: z.string().optional(),\n type: z.string().optional(),\n config: z.any().optional(),\n position: z.number().optional(),\n});\nconst SetWidthReq = z.object({ width: z.number() });\nconst RecordValuesReq = z\n .record(z.string(), z.any())\n .describe('Flat { column: value } cell patch (keyed by property name).');\nconst CreateDocumentReq = z.object({\n title: z.string(),\n body: z.string().optional(),\n database_id: z.string().optional(),\n parent_id: z.string().optional(),\n});\nconst UpdateDocumentReq = z.object({\n title: z.string().optional(),\n body: z.string().optional(),\n parent_id: z.string().nullable().optional(),\n // Optimistic concurrency: a `version` from GET /api/document. A concurrent\n // change (CLI, another window, sync) makes the PATCH fail 409 `stale`\n // instead of silently clobbering it.\n if_match: z.string().optional(),\n});\nconst DuplicateDocumentReq = z.object({\n title: z.string().optional().describe(\"Title for the copy (defaults to the source title)\"),\n parent_id: z.string().nullable().optional(),\n});\n\nconst RevisionBase = z.object({\n // Version token (max HLC of the revision); pass as `to` on revert or\n // `version` on GET /api/document/at.\n version: z.string(),\n at: z.string().describe(\"Wall-clock time of the revision (ISO 8601)\"),\n node_id: z.string(),\n kind: z.enum([\"user\", \"repair\", \"revert\"]).describe(\"Source of the revision\"),\n changes: z.number(),\n created: z.boolean(),\n deleted: z.boolean(),\n});\nconst DocRevisionSchema = RevisionBase.extend({\n title_changed: z.boolean(),\n blocks_changed: z.number(),\n blocks_deleted: z.number(),\n});\nconst RecordRevisionSchema = RevisionBase.extend({\n fields: z.array(z.string()).describe(\"Property ids of the cells written\"),\n moved: z.boolean(),\n});\nconst DatabaseActivityEntrySchema = RecordRevisionSchema.extend({\n record_id: z.string(),\n record_title: z\n .string()\n .nullable()\n .describe(\"Title-property value as of this revision (deleted records keep their last title)\"),\n diffs: z\n .array(\n z.object({\n prop: z.string(),\n before: z.any().optional(),\n after: z.any().optional(),\n }),\n )\n .describe(\"Value-level cell changes; a missing side means the cell did not exist\"),\n});\nconst DocumentVersionStateSchema = z.object({\n id: z.string(),\n title: z.string(),\n body: z.string(),\n deleted: z.boolean(),\n version: z.string(),\n});\nconst RevertDocumentReq = z.object({\n to: z.string().describe(\"Version token from /api/document/history\"),\n if_match: z.string().optional(),\n});\nconst RevertRecordReq = z.object({\n to: z.string().describe(\"Version token from /api/record/history\"),\n});\nconst RevertDocResultSchema = z.object({\n id: z.string(),\n changed: z.boolean(),\n restored: z.string(),\n version: z.string(),\n undeleted: z.boolean(),\n});\nconst RevertRecordResultSchema = z.object({\n id: z.string(),\n changed: z.boolean(),\n fields: z.array(z.string()),\n undeleted: z.boolean(),\n restored: z.string(),\n});\nconst PropertyRevisionSchema = RevisionBase.extend({\n fields: z.array(z.string()).describe(\"Definition columns touched (name/type/config/position)\"),\n cells_cleared: z.number(),\n});\nconst RevertPropertyReq = z.object({\n to: z.string().describe(\"Version token from /api/property/history\"),\n});\nconst RevertPropertyResultSchema = z.object({\n id: z.string(),\n changed: z.boolean(),\n fields: z.array(z.string()),\n restored_cells: z.number(),\n skipped_cells: z.number(),\n undeleted: z.boolean(),\n restored: z.string(),\n});\nconst RecordVersionStateSchema = z.object({\n id: z.string(),\n database_id: z.string().nullable(),\n deleted: z.boolean(),\n data: z.record(z.string(), z.any()).describe(\"Cells at that version, keyed by property id\"),\n version: z.string(),\n});\nconst FieldHistoryEntrySchema = z.object({\n version: z.string(),\n at: z.string(),\n node_id: z.string(),\n value: z.any().optional(),\n cleared: z.boolean(),\n});\nconst NodeInfoSchema = z.object({\n node_id: z.string(),\n label: z.string().nullable().describe(\"Peer label from pairing; null when unnamed\"),\n self: z.boolean().describe(\"True for the node serving this request\"),\n});\nconst CacheStatsSchema = z.object({\n totalBytes: z.number(),\n clearableBytes: z.number(),\n retainedBytes: z.number(),\n count: z.number(),\n clearableCount: z.number(),\n});\nconst BlobPolicySchema = z.object({\n fullNodes: z.array(z.string()),\n redundancy: z.enum([\"all\", \"any\"]),\n});\nconst KnownNodeSchema = z.object({\n nodeId: z.string(),\n label: z.string().nullable(),\n self: z.boolean(),\n});\nconst BucketAnchorSchema = z.object({\n url: z.string(),\n label: z.string().nullable(),\n bucket: z.string().nullable(),\n});\nconst BlobCacheSchema = z.object({\n stats: CacheStatsSchema,\n policy: BlobPolicySchema,\n nodes: z.array(KnownNodeSchema),\n buckets: z.array(BucketAnchorSchema).describe(\"Attached object-storage buckets, selectable as full-blob anchors\"),\n quotaBytes: z.number().describe(\"Auto-evict over this many bytes; 0 = disabled\"),\n pinnedCount: z.number(),\n pinnedBytes: z.number(),\n lastVerifiedAt: z\n .number()\n .nullable()\n .describe(\"Epoch-ms of the last anchor-presence verify; null = never / invalidated\"),\n unreachableAnchors: z\n .array(z.string())\n .describe(\"Anchors the last verify couldn't reach (only populated by /verify)\"),\n});\nconst PinReq = z.object({\n hash: z.string(),\n pinned: z.boolean(),\n});\nconst PinResSchema = z.object({ hash: z.string(), pinned: z.boolean() });\nconst ClearResultSchema = z.object({\n cleared: z.number(),\n freedBytes: z.number(),\n skipped: z.number(),\n});\nconst SetBlobPolicyReq = z.object({\n full_nodes: z\n .array(z.string())\n .optional()\n .describe(\"Full-blob anchors: node ids and/or bucket urls (s3://…)\"),\n redundancy: z.enum([\"all\", \"any\"]).optional(),\n});\nconst SetBlobPolicyResSchema = z.object({\n policy: BlobPolicySchema,\n});\n\n// --- helpers ----------------------------------------------------------------\n\nfunction need(req: Request, key: string): string {\n const v = new URL(req.url).searchParams.get(key);\n if (!v) throw new Error(`missing query param: ${key}`);\n return v;\n}\n\nfunction opt(req: Request, key: string): string | undefined {\n return new URL(req.url).searchParams.get(key) ?? undefined;\n}\n\n/** Wrap a handler: serialize the return value, turn thrown errors into 400 JSON. */\nfunction handle(\n fn: (req: Request, ctx: RouteCtx) => unknown | Promise<unknown>,\n): Route[\"handler\"] {\n return async (req, ctx) => {\n try {\n const out = await fn(req, ctx);\n if (out instanceof Response) return out;\n return Response.json(out ?? null);\n } catch (e) {\n return errorResponse(e);\n }\n };\n}\n\n// --- routes -----------------------------------------------------------------\n\nconst VersionSchema = z.object({ version: z.string() });\n\n/** Shape the Settings storage-panel payload. `unreachable` is supplied by /verify\n * (the anchors it couldn't reach); GET reports the stored last-verified stamp. */\nfunction blobCacheInfo(db: DbDriver, unreachable: string[] = []) {\n reconcileCache(db);\n const pinned = cachedBlobs(db).filter((b) => b.pinned);\n return {\n stats: cacheStats(db),\n policy: readPolicy(db),\n nodes: knownNodes(db),\n buckets: knownBuckets(db),\n quotaBytes: getServerConfig(db).blobCacheQuotaBytes,\n pinnedCount: pinned.length,\n pinnedBytes: pinned.reduce((s, b) => s + b.size, 0),\n lastVerifiedAt: readBlobVerifiedAt(db),\n unreachableAnchors: unreachable,\n };\n}\n\nexport const webuiRoutes: Route[] = [\n {\n method: \"GET\",\n path: \"/api/version\",\n summary: \"Version of the running core (sidecar). Used by the desktop app's settings footer.\",\n response: VersionSchema,\n handler: () => Response.json({ version: pkg.version }),\n },\n {\n method: \"GET\",\n path: \"/api/databases\",\n summary: \"List all databases\",\n response: z.array(DatabaseSchema),\n handler: handle((_req, { db }) => listDatabases(db)),\n },\n {\n method: \"POST\",\n path: \"/api/databases\",\n summary: \"Create a database\",\n request: CreateDatabaseReq,\n response: DatabaseSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { name: string; icon?: string };\n return createDatabase(db, body);\n }),\n },\n {\n method: \"PATCH\",\n path: \"/api/database\",\n summary: \"Rename a database or change its icon. Query: ?id=<id>\",\n request: UpdateDatabaseReq,\n response: DatabaseSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { name?: string; icon?: string | null };\n return updateDatabase(db, need(req, \"id\"), body);\n }),\n },\n {\n method: \"POST\",\n path: \"/api/database/duplicate\",\n summary: \"Copy a database whole — schema and all records. Query: ?id=<id>\",\n request: DuplicateDatabaseReq,\n response: DatabaseSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json().catch(() => ({}))) as { name?: string; icon?: string };\n return duplicateDatabase(db, need(req, \"id\"), body);\n }),\n },\n {\n method: \"DELETE\",\n path: \"/api/database\",\n summary: \"Delete a database (and stop it being the current one). Query: ?id=<id>\",\n response: OkSchema,\n handler: handle((req, { db }) => ({ ok: deleteDatabase(db, need(req, \"id\")) })),\n },\n {\n method: \"GET\",\n path: \"/api/database/activity\",\n summary:\n \"Recent changes across all records of a database, newest first. Query: ?db=<id>&limit=<n>\",\n response: z.array(DatabaseActivityEntrySchema),\n handler: handle((req, { db }) => {\n const limit = opt(req, \"limit\");\n return listDatabaseActivity(db, need(req, \"db\"), {\n limit: limit ? Number(limit) : undefined,\n });\n }),\n },\n {\n method: \"GET\",\n path: \"/api/properties\",\n summary: \"List a database's properties (columns). Query: ?db=<id>\",\n response: z.array(PropertySchema),\n handler: handle((req, { db }) => listProperties(db, need(req, \"db\"))),\n },\n {\n method: \"POST\",\n path: \"/api/properties\",\n summary: \"Add a property to a database\",\n request: CreatePropertyReq,\n response: PropertySchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as {\n db: string;\n name: string;\n type: PropType;\n config?: PropertyConfig;\n };\n return addProperty(db, body.db, { name: body.name, type: body.type, config: body.config });\n }),\n },\n {\n method: \"PATCH\",\n path: \"/api/property\",\n summary: \"Update a property: rename, change type, edit config/options, reorder. Query: ?id=<id>\",\n request: UpdatePropertyReq,\n response: PropertySchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as {\n name?: string;\n type?: PropType;\n config?: PropertyConfig;\n position?: number;\n };\n return updateProperty(db, need(req, \"id\"), body);\n }),\n },\n {\n method: \"PATCH\",\n path: \"/api/property/width\",\n summary: \"Set a property's table column width (px). Query: ?id=<id>\",\n request: SetWidthReq,\n response: PropertySchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { width: number };\n return setPropertyWidth(db, need(req, \"id\"), body.width);\n }),\n },\n {\n method: \"DELETE\",\n path: \"/api/property\",\n summary: \"Delete a property (column) and its cells. Query: ?id=<id>\",\n response: OkSchema,\n handler: handle((req, { db }) => ({ ok: removeProperty(db, need(req, \"id\")) })),\n },\n {\n method: \"GET\",\n path: \"/api/property/history\",\n summary: \"List a property's definition revisions, newest first. Query: ?id=<id>\",\n response: z.array(PropertyRevisionSchema),\n handler: handle((req, { db }) => listPropertyRevisions(db, need(req, \"id\"))),\n },\n {\n method: \"POST\",\n path: \"/api/property/revert\",\n summary:\n \"Schema rollback: restore a property's definition and the cells its type-change/removal cleared (user edits since are kept). Query: ?id=<id>\",\n request: RevertPropertyReq,\n response: RevertPropertyResultSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { to: string };\n return revertProperty(db, need(req, \"id\"), body.to);\n }),\n },\n {\n method: \"GET\",\n path: \"/api/records\",\n summary: \"List records in a database. Query: ?db=<id>&sort=<field>&limit=<n>\",\n response: z.array(RecordSchema),\n handler: handle((req, { db }) => {\n const limit = opt(req, \"limit\");\n return listRecords(db, need(req, \"db\"), {\n sort: opt(req, \"sort\"),\n limit: limit ? Number(limit) : undefined,\n });\n }),\n },\n {\n method: \"POST\",\n path: \"/api/records\",\n summary: \"Create a record. Query: ?db=<id>; body is a {field: value} map\",\n request: RecordValuesReq,\n response: RecordSchema,\n handler: handle(async (req, { db }) => {\n const values = (await req.json()) as Record<string, unknown>;\n return createRecord(db, need(req, \"db\"), values);\n }),\n },\n {\n method: \"GET\",\n path: \"/api/record\",\n summary: \"Get one record. Query: ?id=<id>\",\n response: RecordSchema,\n handler: handle((req, { db }) => {\n const id = need(req, \"id\");\n const rec = getRecord(db, id);\n if (!rec) throw new MhError(\"not_found\", `no such record: ${id}`);\n return rec;\n }),\n },\n {\n method: \"PATCH\",\n path: \"/api/record\",\n summary: \"Update record fields. Query: ?id=<id>; body is a {field: value} map\",\n request: RecordValuesReq,\n response: RecordSchema,\n handler: handle(async (req, { db }) => {\n const values = (await req.json()) as Record<string, unknown>;\n return updateRecord(db, need(req, \"id\"), values);\n }),\n },\n {\n method: \"PATCH\",\n path: \"/api/record/order\",\n summary: \"Move a record before or after another record. Query: ?id=<id>\",\n request: MoveRecordReq,\n response: RecordSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { target: string; where: \"before\" | \"after\" };\n return moveRecord(db, need(req, \"id\"), body.target, body.where);\n }),\n },\n {\n method: \"GET\",\n path: \"/api/record/history\",\n summary: \"List a record's revisions, newest first. Query: ?id=<id>\",\n response: z.array(RecordRevisionSchema),\n handler: handle((req, { db }) => listRecordRevisions(db, need(req, \"id\"))),\n },\n {\n method: \"GET\",\n path: \"/api/record/at\",\n summary: \"A record's cells as of a past version. Query: ?id=<id>&version=<token>\",\n response: RecordVersionStateSchema,\n handler: handle((req, { db }) => recordAtVersion(db, need(req, \"id\"), need(req, \"version\"))),\n },\n {\n method: \"GET\",\n path: \"/api/record/field-history\",\n summary: \"The write trail of one record cell, newest first. Query: ?id=<id>&prop=<propertyId>\",\n response: z.array(FieldHistoryEntrySchema),\n handler: handle((req, { db }) => recordFieldHistory(db, need(req, \"id\"), need(req, \"prop\"))),\n },\n {\n method: \"POST\",\n path: \"/api/record/revert\",\n summary:\n \"Restore a record's cells to a past version, recorded as a new revision. Query: ?id=<id>\",\n request: RevertRecordReq,\n response: RevertRecordResultSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { to: string };\n return revertRecord(db, need(req, \"id\"), body.to);\n }),\n },\n {\n method: \"DELETE\",\n path: \"/api/record\",\n summary: \"Delete a record. Query: ?id=<id>\",\n response: OkSchema,\n handler: handle((req, { db }) => ({ ok: deleteRecord(db, need(req, \"id\")) })),\n },\n {\n method: \"GET\",\n path: \"/api/documents\",\n summary: \"List documents. Optional query: ?db=<id> or ?parent=<id>\",\n response: z.array(DocumentSummarySchema),\n handler: handle((req, { db }) =>\n listDocuments(db, { database_id: opt(req, \"db\"), parent_id: opt(req, \"parent\") }),\n ),\n },\n {\n method: \"POST\",\n path: \"/api/documents\",\n summary: \"Create a document\",\n request: CreateDocumentReq,\n response: DocumentSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as {\n title: string;\n body?: string;\n database_id?: string;\n parent_id?: string;\n };\n return createDocument(db, body);\n }),\n },\n {\n method: \"GET\",\n path: \"/api/document\",\n summary: \"Get one document with full body. Query: ?id=<id>\",\n response: DocumentSchema,\n handler: handle((req, { db }) => {\n const id = need(req, \"id\");\n const doc = getDocument(db, id);\n if (!doc) throw new MhError(\"not_found\", `no such document: ${id}`);\n return { ...doc, version: documentVersion(db, doc.id) };\n }),\n },\n {\n method: \"PATCH\",\n path: \"/api/document\",\n summary: \"Update a document's title/body/parent_id (null = top level). Query: ?id=<id>\",\n request: UpdateDocumentReq,\n response: DocumentSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as {\n title?: string;\n body?: string;\n parent_id?: string | null;\n if_match?: string;\n };\n const { if_match, ...fields } = body;\n const doc = updateDocument(db, need(req, \"id\"), fields, { ifMatch: if_match });\n return { ...doc, version: documentVersion(db, doc.id) };\n }),\n },\n {\n method: \"POST\",\n path: \"/api/document/duplicate\",\n summary: \"Copy a document — title and every block — next to the source. Query: ?id=<id>\",\n request: DuplicateDocumentReq,\n response: DocumentSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json().catch(() => ({}))) as {\n title?: string;\n parent_id?: string | null;\n };\n const doc = duplicateDocument(db, need(req, \"id\"), {\n title: body.title,\n parentId: body.parent_id,\n });\n return { ...doc, version: documentVersion(db, doc.id) };\n }),\n },\n {\n method: \"PATCH\",\n path: \"/api/document/move\",\n summary: \"Move a document before/after another, or into it as a child. Query: ?id=<id>\",\n request: MoveDocumentReq,\n response: DocumentSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { target: string; where: \"before\" | \"after\" | \"into\" };\n return moveDocument(db, need(req, \"id\"), body.target, body.where);\n }),\n },\n {\n method: \"GET\",\n path: \"/api/document/history\",\n summary: \"List a document's revisions, newest first. Query: ?id=<id>\",\n response: z.array(DocRevisionSchema),\n handler: handle((req, { db }) => listDocumentRevisions(db, need(req, \"id\"))),\n },\n {\n method: \"GET\",\n path: \"/api/document/at\",\n summary: \"A document's title/body as of a past version. Query: ?id=<id>&version=<token>\",\n response: DocumentVersionStateSchema,\n handler: handle((req, { db }) => documentAtVersion(db, need(req, \"id\"), need(req, \"version\"))),\n },\n {\n method: \"POST\",\n path: \"/api/document/revert\",\n summary:\n \"Restore a document's title/body to a past version, recorded as a new revision. Query: ?id=<id>\",\n request: RevertDocumentReq,\n response: RevertDocResultSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { to: string; if_match?: string };\n return revertDocument(db, need(req, \"id\"), body.to, { ifMatch: body.if_match });\n }),\n },\n {\n method: \"DELETE\",\n path: \"/api/document\",\n summary: \"Delete a document. Query: ?id=<id>\",\n response: OkSchema,\n handler: handle((req, { db }) => ({ ok: deleteDocument(db, need(req, \"id\")) })),\n },\n {\n method: \"GET\",\n path: \"/api/nodes\",\n summary: \"Known nodes for display: this device plus paired peers with their labels\",\n response: z.array(NodeInfoSchema),\n handler: handle((_req, { db }) => {\n const self = getNodeId(db);\n const peers = db\n .query(\n \"SELECT node_id, label FROM peers WHERE node_id IS NOT NULL AND node_id <> '' GROUP BY node_id\",\n )\n .all() as { node_id: string; label: string | null }[];\n return [\n { node_id: self, label: null, self: true },\n ...peers.filter((p) => p.node_id !== self).map((p) => ({ ...p, self: false })),\n ];\n }),\n },\n {\n method: \"GET\",\n path: \"/api/search\",\n summary: \"Full-text search across documents and records. Query: ?q=<text>&limit=<n>\",\n response: z.array(SearchHitSchema),\n handler: handle((req, { db }) => {\n const limit = opt(req, \"limit\");\n return search(db, need(req, \"q\"), { limit: limit ? Number(limit) : undefined });\n }),\n },\n {\n method: \"GET\",\n path: \"/api/blob-cache\",\n summary:\n \"Local blob cache stats + clear policy + device/bucket roster (Settings storage panel). \" +\n \"A blob is clearable only once a presence verify confirmed a designated anchor holds it.\",\n response: BlobCacheSchema,\n handler: handle((_req, { db }) => blobCacheInfo(db)),\n },\n {\n method: \"POST\",\n path: \"/api/blob-cache/verify\",\n summary:\n \"Verify NOW which cached blobs the designated anchors durably hold (bucket LIST / \" +\n \"device /api/blobs/has), recording the per-blob `anchored` flag that gates clearing. \" +\n \"Returns the refreshed cache info incl. any unreachable anchors. Run on panel open / refresh.\",\n response: BlobCacheSchema,\n handler: handle(async (_req, { db }) => {\n const r = await verifyAnchorPresence(db);\n return blobCacheInfo(db, r.unreachable);\n }),\n },\n {\n method: \"POST\",\n path: \"/api/blob-cache/clear\",\n summary:\n \"Drop locally-cached blob bytes a full blob device durably holds (the reference stays; bytes re-download on demand). Returns bytes freed.\",\n response: ClearResultSchema,\n handler: handle((_req, { db }) => clearCache(db)),\n },\n {\n method: \"POST\",\n path: \"/api/blob-cache/pin\",\n summary:\n \"Pin/unpin a cached blob by hash (node-local; never synced). Pinned blobs are kept by both manual clear and automatic quota eviction.\",\n request: PinReq,\n response: PinResSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { hash: string; pinned: boolean };\n reconcileCache(db);\n if (!setPinned(db, body.hash, body.pinned))\n throw new MhError(\"not_found\", `blob not in cache: ${body.hash}`);\n return { hash: body.hash, pinned: body.pinned };\n }),\n },\n {\n method: \"POST\",\n path: \"/api/blob-policy\",\n summary:\n \"Set the full blob device(s) and/or redundancy (all|any). Anchor designation only — clearing is decided locally per device.\",\n request: SetBlobPolicyReq,\n response: SetBlobPolicyResSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { full_nodes?: string[]; redundancy?: \"all\" | \"any\" };\n if (body.full_nodes) setFullNodes(db, body.full_nodes);\n if (body.redundancy) setRedundancy(db, body.redundancy);\n return { policy: readPolicy(db) };\n }),\n },\n];\n",
|
|
130
|
+
"import type { DbDriver } from \"./driver.ts\";\nimport { emit, grouped, CHANGE_SELECT } from \"./crdt.ts\";\nimport { serializeDocBlocks } from \"./blocks.ts\";\nimport { getDocument, updateDocument, documentVersion } from \"./documents.ts\";\nimport { listProperties } from \"./properties.ts\";\nimport { MhError } from \"./errors.ts\";\n\n// Read-side history over the CRDT oplog. The oplog (crdt_changes) is append-only\n// and never compacted, so the state of any register at a cutoff HLC `at` is the\n// value with the greatest hlc <= at — the same last-write-wins rule materialize()\n// applies at the head. Revert is a *forward* write: reconstruct the old state,\n// diff against the present, and emit the differences as new changes. The oplog\n// itself is never edited (it is the sync source of truth), so reverts replicate\n// and converge like any other edit.\n\n/** Changes from the same node closer together than this are one revision: a\n * single save emits a burst of field writes with near-identical timestamps. */\nconst REVISION_GAP_MS = 1500;\n\n/** Physical wall-clock milliseconds encoded in an HLC (first 15 digits). */\nfunction hlcMillis(hlc: string): number {\n return Number(hlc.slice(0, 15));\n}\n\nfunction hlcIso(hlc: string): string {\n return new Date(hlcMillis(hlc)).toISOString();\n}\n\n// A fully-read oplog row: Change with txn always present (CHANGE_SELECT\n// includes it; NULL for legacy rows). The reused select list keeps these\n// queries locked to the Change interface.\ninterface RawChange {\n hlc: string;\n node_id: string;\n dataset: string;\n row_id: string;\n col: string;\n value: string | null;\n txn: string | null;\n}\n\n/** Where a revision came from, derived from its change-group label. */\nexport type RevisionKind = \"user\" | \"repair\" | \"revert\";\n\nfunction revisionKind(txn: string | null): RevisionKind {\n if (txn?.startsWith(\"repair:\")) return \"repair\";\n if (txn?.startsWith(\"revert:\")) return \"revert\";\n return \"user\";\n}\n\n/**\n * Group an HLC-ordered change stream into revisions. Changes sharing a txn are\n * one revision; between txn-less changes (legacy rows, pre-txn peers) fall back\n * to author + wall-clock gap. Clustering depends only on oplog content, so\n * every synced node renders the same list.\n */\nfunction clusterRevisions(changes: RawChange[]): RawChange[][] {\n const groups: RawChange[][] = [];\n let cur: RawChange[] = [];\n for (const c of changes) {\n const prev = cur[cur.length - 1];\n const boundary =\n prev &&\n (prev.txn !== null && c.txn !== null\n ? prev.txn !== c.txn\n : prev.node_id !== c.node_id || hlcMillis(c.hlc) - hlcMillis(prev.hlc) > REVISION_GAP_MS);\n if (boundary) {\n groups.push(cur);\n cur = [];\n }\n cur.push(c);\n }\n if (cur.length) groups.push(cur);\n return groups;\n}\n\n/** True when a JSON-encoded oplog value is a truthy flag (e.g. __deleted = 1). */\nfunction flagSet(value: string | null): boolean {\n return value !== null && value !== \"0\" && value !== \"false\" && value !== \"null\";\n}\n\n/** Latest value per register (col) among `changes` with hlc <= at.\n * A `null` value column means the register was cleared (json_remove). */\nfunction registersAt(\n changes: RawChange[],\n at: string,\n): Map<string, { value: string | null; hlc: string }> {\n const out = new Map<string, { value: string | null; hlc: string }>();\n for (const c of changes) {\n if (c.hlc > at) continue;\n const cur = out.get(c.col);\n if (!cur || c.hlc > cur.hlc) out.set(c.col, { value: c.value, hlc: c.hlc });\n }\n return out;\n}\n\n/** All oplog changes for one row of a dataset, in HLC order. */\nfunction rowChanges(db: DbDriver, dataset: string, rowId: string): RawChange[] {\n return db\n .query(\n `SELECT ${CHANGE_SELECT} FROM crdt_changes WHERE dataset = ? AND row_id = ? ORDER BY hlc`,\n )\n .all(dataset, rowId) as RawChange[];\n}\n\n// ---- documents ---------------------------------------------------------------\n\n/** Ids of every block that was ever assigned to this document. Whether a block\n * counts at a given cutoff is decided later from its registers at that cutoff. */\nfunction everBlockIds(db: DbDriver, docId: string): string[] {\n return (\n db\n .query(\n \"SELECT DISTINCT row_id FROM crdt_changes WHERE dataset = 'doc_blocks' AND col = 'doc_id' AND value = ?\",\n )\n .all(JSON.stringify(docId)) as { row_id: string }[]\n ).map((r) => r.row_id);\n}\n\n/** Doc register changes + changes of every block ever attached, in HLC order. */\nfunction docChanges(db: DbDriver, docId: string): RawChange[] {\n const blocks = everBlockIds(db, docId);\n const placeholders = blocks.map(() => \"?\").join(\",\");\n const blockClause = blocks.length\n ? ` OR (dataset = 'doc_blocks' AND row_id IN (${placeholders}))`\n : \"\";\n return db\n .query(\n `SELECT ${CHANGE_SELECT} FROM crdt_changes\n WHERE (dataset = 'documents' AND row_id = ?)${blockClause}\n ORDER BY hlc`,\n )\n .all(docId, ...blocks) as RawChange[];\n}\n\nexport interface DocRevision {\n /** Version token (max HLC of the revision) — pass to documentAtVersion/revertDocument. */\n version: string;\n /** Wall-clock time derived from the version HLC (ISO 8601). */\n at: string;\n node_id: string;\n /** Source of the revision: a user edit, a repairHub fix, or a revert. */\n kind: RevisionKind;\n changes: number;\n created: boolean;\n deleted: boolean;\n title_changed: boolean;\n blocks_changed: number;\n blocks_deleted: number;\n}\n\n/** A document's edit history, newest first, clustered into save-sized revisions. */\nexport function listDocumentRevisions(db: DbDriver, id: string): DocRevision[] {\n const changes = docChanges(db, id);\n if (!changes.length) throw new MhError(\"not_found\", `no such document: ${id}`);\n return clusterRevisions(changes)\n .map((group) => {\n const changedBlocks = new Set<string>();\n const deletedBlocks = new Set<string>();\n let created = false;\n let deleted = false;\n let titleChanged = false;\n for (const c of group) {\n if (c.dataset === \"documents\") {\n if (c.col === \"created_hlc\") created = true;\n else if (c.col === \"title\") titleChanged = true;\n else if (c.col === \"__deleted\") deleted = flagSet(c.value);\n } else if (c.col === \"__deleted\" && flagSet(c.value)) {\n deletedBlocks.add(c.row_id);\n } else if (c.col === \"text\") {\n changedBlocks.add(c.row_id);\n }\n }\n const last = group[group.length - 1]!;\n return {\n version: last.hlc,\n at: hlcIso(last.hlc),\n node_id: last.node_id,\n kind: revisionKind(last.txn),\n changes: group.length,\n created,\n deleted,\n title_changed: titleChanged,\n blocks_changed: changedBlocks.size,\n blocks_deleted: deletedBlocks.size,\n };\n })\n .reverse();\n}\n\nexport interface DocumentVersionState {\n id: string;\n title: string;\n body: string;\n deleted: boolean;\n /** Exact version (max HLC <= the requested cutoff) this state corresponds to. */\n version: string;\n}\n\n/** Reconstruct a document as of version cutoff `at` (state at hlc <= at). */\nexport function documentAtVersion(db: DbDriver, id: string, at: string): DocumentVersionState {\n if (!at) throw new MhError(\"invalid_input\", \"missing version cutoff\");\n const changes = docChanges(db, id).filter((c) => c.hlc <= at);\n if (!changes.length)\n throw new MhError(\"not_found\", `no version of document ${id} at or before ${at}`);\n\n const docRegs = registersAt(changes.filter((c) => c.dataset === \"documents\"), at);\n const parse = (col: string): unknown => {\n const r = docRegs.get(col);\n return r?.value == null ? undefined : JSON.parse(r.value);\n };\n\n // Per-block registers at the cutoff; a block counts only if it points at this\n // document, is not tombstoned, and has text — mirroring recomputeDocBody().\n const byBlock = new Map<string, RawChange[]>();\n for (const c of changes) {\n if (c.dataset !== \"doc_blocks\") continue;\n (byBlock.get(c.row_id) ?? byBlock.set(c.row_id, []).get(c.row_id)!).push(c);\n }\n const blocks: { id: string; text: string; order_key: string | null; blankAfter: number }[] = [];\n for (const [blockId, blockChanges] of byBlock) {\n const regs = registersAt(blockChanges, at);\n const reg = (col: string): unknown => {\n const r = regs.get(col);\n return r?.value == null ? undefined : JSON.parse(r.value);\n };\n if (reg(\"doc_id\") !== id) continue;\n if (regs.get(\"__deleted\") && flagSet(regs.get(\"__deleted\")!.value)) continue;\n const text = reg(\"text\");\n if (typeof text !== \"string\" || !text) continue;\n blocks.push({\n id: blockId,\n text,\n order_key: (reg(\"order_key\") as string | undefined) ?? null,\n blankAfter: (reg(\"blank_after\") as number | undefined) ?? 0,\n });\n }\n blocks.sort((a, b) => {\n if (a.order_key !== b.order_key) {\n if (a.order_key === null) return -1; // NULL sorts first, like the SQL ORDER BY\n if (b.order_key === null) return 1;\n return a.order_key < b.order_key ? -1 : 1;\n }\n return a.id < b.id ? -1 : 1;\n });\n\n // Pre-block-model documents kept their body in the documents.body register;\n // it stays authoritative until the first block exists (cf. isBlockManaged).\n const body = byBlock.size\n ? serializeDocBlocks(blocks)\n : ((parse(\"body\") as string | undefined) ?? \"\");\n\n return {\n id,\n title: (parse(\"title\") as string | undefined) ?? \"\",\n body,\n deleted: docRegs.get(\"__deleted\") ? flagSet(docRegs.get(\"__deleted\")!.value) : false,\n version: changes[changes.length - 1]!.hlc,\n };\n}\n\nexport interface RevertDocResult {\n id: string;\n changed: boolean;\n /** The version token the document was restored to. */\n restored: string;\n /** The document's version after the revert (a new head — revert is a forward write). */\n version: string;\n /** True when the revert resurrected a tombstoned document. */\n undeleted: boolean;\n}\n\n/**\n * Restore a document's title/body to a past version, as a new forward edit\n * (reuses updateDocument's block reconcile, so unchanged blocks keep identity).\n * Reverting a tombstoned document resurrects it; children unparented by the\n * delete stay where they are. One change group, so history shows ONE revision.\n */\nexport const revertDocument = grouped(function revertDocument(\n db: DbDriver,\n id: string,\n to: string,\n opts: { ifMatch?: string } = {},\n): RevertDocResult {\n let cur = getDocument(db, id);\n if (!cur && !db.query(\"SELECT 1 AS x FROM documents WHERE id = ?\").get(id))\n throw new MhError(\"not_found\", `no such document: ${id}`);\n if (opts.ifMatch !== undefined && documentVersion(db, id) !== opts.ifMatch)\n throw new MhError(\"stale\", `stale: document changed since ${opts.ifMatch}; re-read first`);\n\n const past = documentAtVersion(db, id, to);\n if (past.deleted)\n throw new MhError(\"invalid_input\", \"target version is a deleted state; use doc delete instead\");\n\n const undeleted = !cur;\n if (!cur) {\n // Resurrect the doc row; its blocks stay tombstoned (the body cache is empty),\n // so the body restore below re-inserts the past blocks via reconcile.\n emit(db, \"documents\", id, \"__deleted\", 0);\n cur = getDocument(db, id)!;\n }\n\n const fields: { title?: string; body?: string } = {};\n if (past.title !== cur.title) fields.title = past.title;\n if (past.body !== (cur.body ?? \"\")) fields.body = past.body;\n if (Object.keys(fields).length) updateDocument(db, id, fields);\n\n return {\n id,\n changed: Object.keys(fields).length > 0 || undeleted,\n restored: past.version,\n version: documentVersion(db, id),\n undeleted,\n };\n}, \"revert\");\n\n// ---- records -------------------------------------------------------------------\n\n/** records-dataset meta columns; every other col is a property cell. */\nconst RECORD_META = new Set([\"database_id\", \"created_hlc\", \"order_key\", \"__deleted\"]);\n\nexport interface RecordRevision {\n version: string;\n at: string;\n node_id: string;\n kind: RevisionKind;\n changes: number;\n created: boolean;\n deleted: boolean;\n /** Property ids of the cells written in this revision. */\n fields: string[];\n moved: boolean;\n}\n\n/** Summarize one change group of a record into a revision. */\nfunction recordRevisionOf(group: RawChange[]): RecordRevision {\n const fields = new Set<string>();\n let created = false;\n let deleted = false;\n let moved = false;\n for (const c of group) {\n if (c.col === \"created_hlc\") created = true;\n else if (c.col === \"__deleted\") deleted = flagSet(c.value);\n else if (c.col === \"order_key\") moved = true;\n else if (!RECORD_META.has(c.col)) fields.add(c.col);\n }\n const last = group[group.length - 1]!;\n return {\n version: last.hlc,\n at: hlcIso(last.hlc),\n node_id: last.node_id,\n kind: revisionKind(last.txn),\n changes: group.length,\n created,\n deleted,\n fields: [...fields],\n moved,\n };\n}\n\n/** A record's edit history, newest first, clustered into save-sized revisions. */\nexport function listRecordRevisions(db: DbDriver, id: string): RecordRevision[] {\n const changes = rowChanges(db, \"records\", id);\n if (!changes.length) throw new MhError(\"not_found\", `no such record: ${id}`);\n return clusterRevisions(changes).map(recordRevisionOf).reverse();\n}\n\n/** One cell's value change inside a revision. A missing `before`/`after` key\n * means the cell did not exist on that side (distinct from an explicit null). */\nexport interface FieldChange {\n prop: string;\n before?: unknown;\n after?: unknown;\n}\n\nexport interface DatabaseActivityEntry extends RecordRevision {\n record_id: string;\n /** Title-property value as of this revision — deleted records keep their last title. */\n record_title: string | null;\n /** Value-level changes of the touched cells. */\n diffs: FieldChange[];\n}\n\n/**\n * \"What happened in this table lately\": every record's revisions, merged and\n * sorted newest first. Includes tombstoned records (so deletions show up) — a\n * read-only aggregation, same clustering as listRecordRevisions per record.\n * Walking each record's change stream oldest-first lets us carry a running\n * cell-state map, so every entry ships its old→new values and a title snapshot\n * for free (no extra queries). After compaction, `before` at the window edge\n * may be missing (the superseded write was pruned) — it reads as \"was empty\".\n */\nexport function listDatabaseActivity(\n db: DbDriver,\n databaseId: string,\n opts: { limit?: number } = {},\n): DatabaseActivityEntry[] {\n if (!db.query(\"SELECT 1 AS x FROM databases WHERE id = ?\").get(databaseId))\n throw new MhError(\"not_found\", `no such database: ${databaseId}`);\n // The first live text property is the de-facto record title (same rule the\n // reference resolver uses).\n const titleProp =\n (\n db\n .query(\n \"SELECT id FROM properties WHERE database_id = ? AND type = 'text' AND __deleted = 0 ORDER BY position LIMIT 1\",\n )\n .get(databaseId) as { id: string } | null\n )?.id ?? null;\n\n const changes = db\n .query(\n `SELECT ${CHANGE_SELECT} FROM crdt_changes\n WHERE dataset = 'records' AND row_id IN (SELECT id FROM records WHERE database_id = ?)\n ORDER BY row_id, hlc`,\n )\n .all(databaseId) as RawChange[];\n\n const out: DatabaseActivityEntry[] = [];\n let start = 0;\n for (let i = 1; i <= changes.length; i++) {\n if (i !== changes.length && changes[i]!.row_id === changes[start]!.row_id) continue;\n const rowId = changes[start]!.row_id;\n // Running cell state, mirroring materialize(): null value = json_remove.\n const state = new Map<string, unknown>();\n for (const g of clusterRevisions(changes.slice(start, i))) {\n const touched = new Set<string>();\n for (const c of g) if (!RECORD_META.has(c.col)) touched.add(c.col);\n const before = new Map<string, unknown>();\n for (const col of touched) if (state.has(col)) before.set(col, state.get(col));\n for (const c of g) {\n if (RECORD_META.has(c.col)) continue;\n if (c.value === null) state.delete(c.col);\n else state.set(c.col, JSON.parse(c.value));\n }\n const diffs: FieldChange[] = [];\n for (const col of touched) {\n const fc: FieldChange = { prop: col };\n if (before.has(col)) fc.before = before.get(col);\n if (state.has(col)) fc.after = state.get(col);\n diffs.push(fc);\n }\n out.push({\n ...recordRevisionOf(g),\n record_id: rowId,\n record_title:\n titleProp && state.has(titleProp) ? String(state.get(titleProp) ?? \"\") : null,\n diffs,\n });\n }\n start = i;\n }\n out.sort((a, b) => (a.version < b.version ? 1 : -1));\n return out.slice(0, opts.limit ?? 100);\n}\n\nexport interface RecordVersionState {\n id: string;\n database_id: string | null;\n deleted: boolean;\n /** Cells present at that version, keyed by property id (raw, no name mapping). */\n data: Record<string, unknown>;\n version: string;\n}\n\n/** Reconstruct a record as of version cutoff `at` (state at hlc <= at). */\nexport function recordAtVersion(db: DbDriver, id: string, at: string): RecordVersionState {\n if (!at) throw new MhError(\"invalid_input\", \"missing version cutoff\");\n const changes = rowChanges(db, \"records\", id).filter((c) => c.hlc <= at);\n if (!changes.length)\n throw new MhError(\"not_found\", `no version of record ${id} at or before ${at}`);\n\n const regs = registersAt(changes, at);\n const data: Record<string, unknown> = {};\n for (const [col, reg] of regs) {\n if (RECORD_META.has(col)) continue;\n if (reg.value === null) continue; // cleared cell (json_remove)\n data[col] = JSON.parse(reg.value);\n }\n const dbReg = regs.get(\"database_id\");\n return {\n id,\n database_id: dbReg?.value == null ? null : (JSON.parse(dbReg.value) as string),\n deleted: regs.get(\"__deleted\") ? flagSet(regs.get(\"__deleted\")!.value) : false,\n data,\n version: changes[changes.length - 1]!.hlc,\n };\n}\n\nexport interface RevertRecordResult {\n id: string;\n changed: boolean;\n /** Property ids whose cells were written by the revert. */\n fields: string[];\n /** True when the revert resurrected a tombstoned record. */\n undeleted: boolean;\n restored: string;\n}\n\n/** Restore a record's cells to a past version as a new forward edit. Only cells\n * of currently-live properties are touched, so no orphan cells are recreated\n * (the repairHub invariant). Reverting a tombstoned record resurrects it. */\nexport const revertRecord = grouped(function revertRecord(\n db: DbDriver,\n id: string,\n to: string,\n): RevertRecordResult {\n const cur = db\n .query(\"SELECT database_id, data, __deleted FROM records WHERE id = ?\")\n .get(id) as { database_id: string | null; data: string; __deleted: number } | null;\n if (!cur) throw new MhError(\"not_found\", `no such record: ${id}`);\n\n const past = recordAtVersion(db, id, to);\n if (past.deleted)\n throw new MhError(\"invalid_input\", \"target version is a deleted state; use record delete instead\");\n\n const liveProps = new Set(\n cur.database_id ? listProperties(db, cur.database_id).map((p) => p.id) : [],\n );\n const curData = JSON.parse(cur.data || \"{}\") as Record<string, unknown>;\n const fields: string[] = [];\n for (const propId of liveProps) {\n const inPast = Object.hasOwn(past.data, propId);\n const inCur = Object.hasOwn(curData, propId);\n if (inPast && (!inCur || JSON.stringify(past.data[propId]) !== JSON.stringify(curData[propId]))) {\n emit(db, \"records\", id, propId, past.data[propId]);\n fields.push(propId);\n } else if (!inPast && inCur) {\n emit(db, \"records\", id, propId, undefined); // clear: materializes as json_remove\n fields.push(propId);\n }\n }\n const undeleted = cur.__deleted !== 0;\n if (undeleted) emit(db, \"records\", id, \"__deleted\", 0);\n\n return { id, changed: fields.length > 0 || undeleted, fields, undeleted, restored: past.version };\n}, \"revert\");\n\n// ---- properties (schema-level rollback) ------------------------------------------\n\n/** Property register columns that make up the column definition. */\nconst PROP_DEF_COLS = [\"name\", \"type\", \"config\", \"position\"] as const;\n\nexport interface PropertyRevision {\n version: string;\n at: string;\n node_id: string;\n kind: RevisionKind;\n changes: number;\n created: boolean;\n deleted: boolean;\n /** Definition columns touched in this revision (name/type/config/position). */\n fields: string[];\n /** Record cells the same change group cleared (a type change / removal cascade). */\n cells_cleared: number;\n}\n\n/** A property's definition history, newest first. Cascaded cell clears are\n * counted via the shared txn so a type change reads as one revision. */\nexport function listPropertyRevisions(db: DbDriver, id: string): PropertyRevision[] {\n const changes = rowChanges(db, \"properties\", id);\n if (!changes.length) throw new MhError(\"not_found\", `no such property: ${id}`);\n const clearedByTxn = new Map<string, number>(\n (\n db\n .query(\n \"SELECT txn, COUNT(*) AS n FROM crdt_changes WHERE dataset = 'records' AND col = ? AND txn IS NOT NULL GROUP BY txn\",\n )\n .all(id) as { txn: string; n: number }[]\n ).map((r) => [r.txn, r.n]),\n );\n return clusterRevisions(changes)\n .map((group) => {\n const fields = new Set<string>();\n let created = false;\n let deleted = false;\n for (const c of group) {\n if (c.col === \"database_id\") created = true; // only emitted at creation\n else if (c.col === \"__deleted\") deleted = flagSet(c.value);\n else if ((PROP_DEF_COLS as readonly string[]).includes(c.col)) fields.add(c.col);\n }\n const last = group[group.length - 1]!;\n return {\n version: last.hlc,\n at: hlcIso(last.hlc),\n node_id: last.node_id,\n kind: revisionKind(last.txn),\n changes: group.length,\n created,\n deleted,\n fields: [...fields],\n cells_cleared: last.txn ? (clearedByTxn.get(last.txn) ?? 0) : 0,\n };\n })\n .reverse();\n}\n\nexport interface PropertyVersionState {\n id: string;\n database_id: string | null;\n name: string;\n type: string;\n config: unknown;\n position: number | null;\n deleted: boolean;\n version: string;\n}\n\n/** Reconstruct a property definition as of version cutoff `at`. */\nexport function propertyAtVersion(db: DbDriver, id: string, at: string): PropertyVersionState {\n if (!at) throw new MhError(\"invalid_input\", \"missing version cutoff\");\n const changes = rowChanges(db, \"properties\", id).filter((c) => c.hlc <= at);\n if (!changes.length)\n throw new MhError(\"not_found\", `no version of property ${id} at or before ${at}`);\n const regs = registersAt(changes, at);\n const reg = (col: string): unknown => {\n const r = regs.get(col);\n return r?.value == null ? undefined : JSON.parse(r.value);\n };\n return {\n id,\n database_id: (reg(\"database_id\") as string | undefined) ?? null,\n name: (reg(\"name\") as string | undefined) ?? \"\",\n type: (reg(\"type\") as string | undefined) ?? \"text\",\n config: reg(\"config\") ?? null,\n position: (reg(\"position\") as number | undefined) ?? null,\n deleted: regs.get(\"__deleted\") ? flagSet(regs.get(\"__deleted\")!.value) : false,\n version: changes[changes.length - 1]!.hlc,\n };\n}\n\nexport interface RevertPropertyResult {\n id: string;\n changed: boolean;\n /** Definition columns the revert wrote. */\n fields: string[];\n /** Record cells restored to their value at the target version. */\n restored_cells: number;\n /** Cells left alone because a user wrote them after the target version. */\n skipped_cells: number;\n undeleted: boolean;\n restored: string;\n}\n\n/**\n * Schema-level rollback: restore a property's definition AND the record cells\n * its later type-change/removal cascades cleared. Definition registers are\n * emitted directly (never via updateProperty — its type-change cascade would\n * re-clear the cells being restored). A cell is only touched when its current\n * winner IS the cascade (or a repair); it is restored to the last value before\n * that cascade, so user data — written before or after the target version —\n * always survives. Cells whose winner is a user write are kept (skipped_cells).\n * Pre-txn legacy writes can't be attributed, so they count as user writes.\n */\nexport const revertProperty = grouped(function revertProperty(\n db: DbDriver,\n id: string,\n to: string,\n): RevertPropertyResult {\n const cur = db\n .query(\n \"SELECT database_id, name, type, config, position, __deleted FROM properties WHERE id = ?\",\n )\n .get(id) as {\n database_id: string | null;\n name: string | null;\n type: string | null;\n config: string | null;\n position: number | null;\n __deleted: number;\n } | null;\n if (!cur) throw new MhError(\"not_found\", `no such property: ${id}`);\n\n const past = propertyAtVersion(db, id, to);\n if (past.deleted)\n throw new MhError(\"invalid_input\", \"target version is a deleted state; use prop remove instead\");\n\n // 1) Restore the column definition (diff only — no cascades).\n const curDef: Record<string, unknown> = {\n name: cur.name,\n type: cur.type,\n config: cur.config ? JSON.parse(cur.config) : null,\n position: cur.position,\n };\n const pastDef: Record<string, unknown> = {\n name: past.name,\n type: past.type,\n config: past.config,\n position: past.position,\n };\n const fields: string[] = [];\n for (const col of PROP_DEF_COLS) {\n if (JSON.stringify(pastDef[col] ?? null) !== JSON.stringify(curDef[col] ?? null)) {\n emit(db, \"properties\", id, col, pastDef[col]);\n fields.push(col);\n }\n }\n const undeleted = cur.__deleted !== 0;\n if (undeleted) emit(db, \"properties\", id, \"__deleted\", 0);\n\n // 2) Restore the cells. Cascade writes are identified by sharing a txn with a\n // post-target change to this property's own registers.\n const schemaTxns = new Set(\n (\n db\n .query(\n \"SELECT DISTINCT txn FROM crdt_changes WHERE dataset = 'properties' AND row_id = ? AND hlc > ? AND txn IS NOT NULL\",\n )\n .all(id, to) as { txn: string }[]\n ).map((r) => r.txn),\n );\n const cellChanges = db\n .query(\n \"SELECT row_id, hlc, value, txn FROM crdt_changes WHERE dataset = 'records' AND col = ? ORDER BY row_id, hlc\",\n )\n .all(id) as { row_id: string; hlc: string; value: string | null; txn: string | null }[];\n\n const isCascade = (txn: string | null): boolean =>\n txn !== null && (schemaTxns.has(txn) || txn.startsWith(\"repair:\"));\n\n let restored = 0;\n let skipped = 0;\n let i = 0;\n while (i < cellChanges.length) {\n const rowId = cellChanges[i]!.row_id;\n let winner = cellChanges[i]!;\n let lastUser: { value: string | null } | null = null; // latest non-cascade write\n for (; i < cellChanges.length && cellChanges[i]!.row_id === rowId; i++) {\n winner = cellChanges[i]!;\n if (!isCascade(winner.txn)) lastUser = winner;\n }\n if (winner.hlc <= to) continue; // untouched since the target version\n if (!isCascade(winner.txn)) {\n skipped++; // current value is a user write — keep it\n continue;\n }\n const target = lastUser ? lastUser.value : null; // null = cell never had a user value\n if (target === winner.value) continue; // converged back on its own\n emit(db, \"records\", rowId, id, target === null ? undefined : JSON.parse(target));\n restored++;\n }\n\n return {\n id,\n changed: fields.length > 0 || undeleted || restored > 0,\n fields,\n restored_cells: restored,\n skipped_cells: skipped,\n undeleted,\n restored: past.version,\n };\n}, \"revert\");\n\nexport interface FieldHistoryEntry {\n version: string;\n at: string;\n node_id: string;\n /** The value written; undefined when the write cleared the cell. */\n value: unknown;\n cleared: boolean;\n}\n\n/** The full write trail of one record cell (property id), newest first. */\nexport function recordFieldHistory(db: DbDriver, id: string, propId: string): FieldHistoryEntry[] {\n const rows = db\n .query(\n \"SELECT hlc, node_id, value FROM crdt_changes WHERE dataset = 'records' AND row_id = ? AND col = ? ORDER BY hlc DESC\",\n )\n .all(id, propId) as { hlc: string; node_id: string; value: string | null }[];\n return rows.map((r) => ({\n version: r.hlc,\n at: hlcIso(r.hlc),\n node_id: r.node_id,\n value: r.value === null ? undefined : JSON.parse(r.value),\n cleared: r.value === null,\n }));\n}\n"
|
|
116
131
|
],
|
|
117
|
-
"mappings": "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",
|
|
118
|
-
"debugId": "
|
|
132
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAqCO,SAAS,SAAS,CAAC,GAAqC;AAAA,EAC7D,OAAO,aAAa,UAAU,EAAE,OAAO;AAAA;AAAA,IAZ5B;AAAA;AAAA,YAAN,MAAM,gBAAgB,MAAM;AAAA,IAEtB;AAAA,IADX,WAAW,CACA,MACT,SACA;AAAA,MACA,MAAM,OAAO;AAAA,MAHJ;AAAA,MAIT,KAAK,OAAO;AAAA;AAAA,EAEhB;AAAA;;;AClCA;AACA;AAEO,SAAS,WAAW,GAAW;AAAA,EACpC,OAAO,QAAQ,IAAI,gBAAgB,KAAK,QAAQ,GAAG,UAAU;AAAA;AAGxD,SAAS,MAAM,GAAW;AAAA,EAC/B,OAAO,KAAK,YAAY,GAAG,YAAY;AAAA;AAGlC,SAAS,QAAQ,GAAW;AAAA,EACjC,OAAO,KAAK,YAAY,GAAG,OAAO;AAAA;AAAA;;;ACT7B,SAAS,YAAY,CAAC,MAAM,GAAW;AAAA,EAC5C,MAAM,QAAQ,OAAO,gBAAgB,IAAI,WAAW,GAAG,CAAC;AAAA,EACxD,IAAI,MAAM;AAAA,EACV,WAAW,KAAK;AAAA,IAAO,OAAO,SAAS,OAAO,IAAI,SAAS,MAAM;AAAA,EACjE,OAAO;AAAA;AAIF,SAAS,OAAO,CAAC,MAAc,WAAW,QAAgB;AAAA,EAC/D,MAAM,OAAO,KACV,UAAU,MAAM,EAChB,QAAQ,iBAAiB,EAAE,EAC3B,YAAY,EACZ,QAAQ,eAAe,GAAG,EAC1B,QAAQ,YAAY,EAAE,EACtB,MAAM,GAAG,EAAE,EACX,QAAQ,QAAQ,EAAE;AAAA,EACrB,OAAO,QAAQ;AAAA;AAIV,SAAS,MAAM,CAAC,MAAc,WAAW,QAAgB;AAAA,EAC9D,OAAO,GAAG,QAAQ,MAAM,QAAQ,KAAK,aAAa;AAAA;AAqB7C,SAAS,KAAK,CAAC,MAAY,MAAc,WAAmB,MAAc;AAAA,EAC/E,OAAO,GAAG,QAAQ,QAAQ,MAAM,QAAQ,KAAK,aAAa;AAAA;AAIrD,SAAS,MAAM,CAAC,IAAyB;AAAA,EAC9C,MAAM,IAAI,GAAG,QAAQ,GAAG;AAAA,EACxB,IAAI,KAAK;AAAA,IAAG,OAAO;AAAA,EACnB,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC;AAAA,EAC5B,OAAO,MAAM,IAAI,MAAM,IAAK,SAAkB;AAAA;AAAA,IAvD1C,WAAW,wCA+BX;AAAA;AAAA,UAA6B,IAAI,IAAU;AAAA,IAC/C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAAA;;;ACnCM,SAAS,SAAS,CAAC,IAAsB;AAAA,EAC9C,MAAM,MAAM,GACT,MAAM,8CAA8C,EACpD,IAAI;AAAA,EACP,IAAI;AAAA,IAAK,OAAO,IAAI;AAAA,EACpB,MAAM,KAAK,aAAa,CAAC;AAAA,EACzB,GAAG,MAAM,qDAAqD,EAAE,IAAI,EAAE;AAAA,EACtE,OAAO;AAAA;AAAA;AAAA,EAVT;AAAA;;;ACUO,SAAS,SAAS,CAAC,GAAgB;AAAA,EACxC,OAAO,GAAG,OAAO,EAAE,MAAM,EAAE,SAAS,IAAI,GAAG,KAAK,EAAE,QAC/C,SAAS,EAAE,EACX,SAAS,GAAG,GAAG,KAAK,EAAE;AAAA;AAGpB,SAAS,QAAQ,CAAC,GAAgB;AAAA,EACvC,MAAM,KAAK,EAAE,QAAQ,GAAG;AAAA,EACxB,MAAM,KAAK,EAAE,QAAQ,KAAK,KAAK,CAAC;AAAA,EAChC,OAAO;AAAA,IACL,QAAQ,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;AAAA,IAC7B,SAAS,SAAS,EAAE,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE;AAAA,IACzC,MAAM,EAAE,MAAM,KAAK,CAAC;AAAA,EACtB;AAAA;AAGF,SAAS,QAAQ,CAAC,IAAc,MAAmB;AAAA,EACjD,MAAM,MAAM,GAAG,MAAM,0CAA0C,EAAE,IAAI;AAAA,EAGrE,OAAO,MAAM,SAAS,IAAI,KAAK,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,KAAK;AAAA;AAGnE,SAAS,SAAS,CAAC,IAAc,GAAc;AAAA,EAC7C,GAAG,MACD,uGACF,EAAE,IAAI,UAAU,CAAC,CAAC;AAAA;AAIb,SAAS,OAAO,CAAC,IAAc,MAAc,MAAM,KAAK,IAAI,GAAW;AAAA,EAC5E,MAAM,OAAO,SAAS,IAAI,IAAI;AAAA,EAC9B,MAAM,SAAS,KAAK,IAAI,KAAK,QAAQ,GAAG;AAAA,EACxC,MAAM,UAAU,WAAW,KAAK,SAAS,KAAK,UAAU,IAAI;AAAA,EAC5D,MAAM,IAAS,EAAE,QAAQ,SAAS,KAAK;AAAA,EACvC,UAAU,IAAI,CAAC;AAAA,EACf,OAAO,UAAU,CAAC;AAAA;AAIb,SAAS,UAAU,CACxB,IACA,MACA,QACA,MAAM,KAAK,IAAI,GACT;AAAA,EACN,MAAM,OAAO,SAAS,IAAI,IAAI;AAAA,EAC9B,MAAM,IAAI,SAAS,MAAM;AAAA,EACzB,MAAM,SAAS,KAAK,IAAI,KAAK,QAAQ,EAAE,QAAQ,GAAG;AAAA,EAClD,IAAI;AAAA,EACJ,IAAI,WAAW,KAAK,UAAU,WAAW,EAAE;AAAA,IACzC,UAAU,KAAK,IAAI,KAAK,SAAS,EAAE,OAAO,IAAI;AAAA,EAC3C,SAAI,WAAW,KAAK;AAAA,IAAQ,UAAU,KAAK,UAAU;AAAA,EACrD,SAAI,WAAW,EAAE;AAAA,IAAQ,UAAU,EAAE,UAAU;AAAA,EAC/C;AAAA,cAAU;AAAA,EACf,UAAU,IAAI,EAAE,QAAQ,SAAS,KAAK,CAAC;AAAA;;;AC5ClC,SAAS,cAAc,CAAC,IAAwB;AAAA,EACrD,IAAI,CAAC;AAAA,IAAI,OAAO,CAAC;AAAA,EACjB,MAAM,QAAQ,GAAG,QAAQ,UAAU;AAAA,CAAI,EAAE,MAAM;AAAA,CAAI;AAAA,EACnD,MAAM,SAAqB,CAAC;AAAA,EAC5B,IAAI,MAAgB,CAAC;AAAA,EACrB,IAAI,YAA8B;AAAA,EAClC,IAAI,WAAW;AAAA,EAEf,MAAM,aAAa,MAAM;AAAA,IACvB,IAAI,IAAI,QAAQ;AAAA,MACd,OAAO,KAAK,EAAE,MAAM,IAAI,KAAK;AAAA,CAAI,GAAG,YAAY,EAAE,CAAC;AAAA,MACnD,MAAM,CAAC;AAAA,IACT;AAAA;AAAA,EAEF,MAAM,UAAU,MAAM;AAAA,IACpB,WAAW;AAAA,IAGX,IAAI,OAAO;AAAA,MAAQ,OAAO,OAAO,SAAS,GAAI;AAAA;AAAA,EAGhD,WAAW,OAAO,OAAO;AAAA,IACvB,IAAI,WAAW;AAAA,MACb,IAAI,KAAK,GAAG;AAAA,MACZ,MAAM,IAAI,IAAI,MAAM,uBAAuB;AAAA,MAC3C,IAAI,KAAK,EAAE,GAAI,OAAO,aAAa,EAAE,GAAI,UAAU,UAAU;AAAA,QAC3D,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,WAAW;AAAA,MACb;AAAA,MACA;AAAA,IACF;AAAA,IACA,MAAM,OAAO,IAAI,MAAM,mBAAmB;AAAA,IAC1C,IAAI,MAAM;AAAA,MACR,WAAW;AAAA,MACX,YAAY,KAAK,GAAI;AAAA,MACrB,WAAW,KAAK,GAAI;AAAA,MACpB,IAAI,KAAK,GAAG;AAAA,IACd,EAAO,SAAI,IAAI,KAAK,MAAM,IAAI;AAAA,MAC5B,QAAQ;AAAA,IACV,EAAO;AAAA,MACL,IAAI,KAAK,GAAG;AAAA;AAAA,EAEhB;AAAA,EACA,WAAW;AAAA,EAIX,SAAS,IAAI,EAAG,IAAI,OAAO,SAAS,GAAG;AAAA,IACrC,OAAO,GAAI,aAAa,KAAK,IAAI,GAAG,OAAO,GAAI,aAAa,CAAC;AAAA,EAC/D,OAAO;AAAA;AAIF,SAAS,kBAAkB,CAChC,QACQ;AAAA,EACR,MAAM,OAAO,OAAO,OAAO,CAAC,MAAkD,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,SAAS,CAAC;AAAA,EAC3G,MAAM,MAAgB,CAAC;AAAA,EACvB,KAAK,QAAQ,CAAC,GAAG,MAAM;AAAA,IACrB,IAAI,KAAK,GAAG,EAAE,KAAK,MAAM;AAAA,CAAI,CAAC;AAAA,IAC9B,MAAM,QAAQ,KAAK,IAAI,GAAG,EAAE,cAAc,CAAC;AAAA,IAC3C,IAAI,IAAI,KAAK,SAAS;AAAA,MAAG,IAAI,KAAK,EAAE;AAAA,IACpC,SAAS,IAAI,EAAG,IAAI,OAAO;AAAA,MAAK,IAAI,KAAK,EAAE;AAAA,GAC5C;AAAA,EACD,OAAO,IAAI,KAAK;AAAA,CAAI;AAAA;AAgBf,SAAS,SAAS,CAAC,UAAoB,UAAmC;AAAA,EAC/E,MAAM,OAAO,IAAI,UAAU,QAAQ;AAAA,EACnC,MAAM,UAAU,IAAI,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;AAAA,EAC7C,MAAM,WAAW,IAAI,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AAAA,EAEtD,MAAM,QAAyB,SAAS,IAAI,CAAC,MAAM,OACjD,SAAS,IAAI,EAAE,IAAI,EAAE,MAAM,SAAS,IAAI,EAAE,EAAG,IAAI,EAAE,QAAQ,KAAK,CAClE;AAAA,EACA,MAAM,UAAoB,CAAC;AAAA,EAC3B,SAAS,KAAK,EAAG,KAAK,SAAS,QAAQ;AAAA,IACrC,IAAI,CAAC,QAAQ,IAAI,EAAE;AAAA,MAAG,QAAQ,KAAK,EAAE;AAAA,EAEvC,OAAO,EAAE,OAAO,QAAQ;AAAA;AAI1B,SAAS,GAAG,CAAC,GAAa,GAAiC;AAAA,EACzD,MAAM,IAAI,EAAE;AAAA,EACZ,MAAM,IAAI,EAAE;AAAA,EACZ,MAAM,KAAiB,MAAM,KAAK,EAAE,QAAQ,IAAI,EAAE,GAAG,MACnD,IAAI,MAAc,IAAI,CAAC,EAAE,KAAK,CAAC,CACjC;AAAA,EACA,SAAS,KAAI,IAAI,EAAG,MAAK,GAAG;AAAA,IAC1B,SAAS,KAAI,IAAI,EAAG,MAAK,GAAG;AAAA,MAC1B,GAAG,IAAI,MACL,EAAE,QAAO,EAAE,MACP,GAAG,KAAI,GAAI,KAAI,KAAM,IACrB,KAAK,IAAI,GAAG,KAAI,GAAI,KAAK,GAAG,IAAI,KAAI,EAAG;AAAA,EAEjD,MAAM,QAA4B,CAAC;AAAA,EACnC,IAAI,IAAI;AAAA,EACR,IAAI,IAAI;AAAA,EACR,OAAO,IAAI,KAAK,IAAI,GAAG;AAAA,IACrB,IAAI,EAAE,OAAO,EAAE,IAAI;AAAA,MACjB,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;AAAA,MACjB;AAAA,MACA;AAAA,IACF,EAAO,SAAI,GAAG,IAAI,GAAI,MAAO,GAAG,GAAI,IAAI,IAAK;AAAA,MAC3C;AAAA,IACF,EAAO;AAAA,MACL;AAAA;AAAA,EAEJ;AAAA,EACA,OAAO;AAAA;;;AC/GF,SAAS,eAAkB,CAAC,OAAsB,IAAgB;AAAA,EACvE,IAAI,eAAe;AAAA,IAAM,OAAO,GAAG;AAAA,EACnC,cAAc,QAAQ,QAAQ,MAAM,MAAM,aAAa,CAAC;AAAA,EACxD,IAAI;AAAA,IACF,OAAO,GAAG;AAAA,YACV;AAAA,IACA,aAAa;AAAA;AAAA;AAKV,SAAS,OAA+B,CAC7C,IACA,QAAuB,MACJ;AAAA,EACnB,OAAO,IAAI,SAAS,gBAAgB,OAAO,MAAM,GAAG,GAAG,IAAI,CAAC;AAAA;AAuD9D,SAAS,YAAY,CAAC,KAAwB;AAAA,EAC5C,IAAI,QAAQ,QAAQ,QAAQ;AAAA,IAAW,OAAO;AAAA,EAC9C,IAAI,OAAO,QAAQ;AAAA,IAAW,OAAO,MAAM,IAAI;AAAA,EAC/C,IAAI,OAAO,QAAQ;AAAA,IAAU,OAAO;AAAA,EACpC,IAAI,OAAO,QAAQ;AAAA,IAAU,OAAO;AAAA,EACpC,OAAO,KAAK,UAAU,GAAG;AAAA;AAG3B,SAAS,SAAS,CAAC,IAAc,OAAe,IAAkB;AAAA,EAChE,GAAG,MAAM,yBAAyB,uBAAuB,EAAE,IAAI,EAAE;AAAA;AAInE,SAAS,cAAc,CAAC,IAAc,OAAwB;AAAA,EAC5D,OACE,GAAG,MAAM,wDAAwD,EAAE,IAAI,KAAK,KAC5E;AAAA;AAKJ,SAAS,gBAAgB,CAAC,IAAc,OAAqB;AAAA,EAC3D,MAAM,OAAO,GACV,MACC,oGACF,EACC,IAAI,KAAK;AAAA,EACZ,UAAU,IAAI,aAAa,KAAK;AAAA,EAChC,GAAG,MAAM,4CAA4C,EAAE,IACrD,mBAAmB,KAAK,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,EAAE,eAAe,EAAE,EAAE,CAAC,GACtF,KACF;AAAA;AAGF,SAAS,WAAW,CAClB,IACA,SACA,OACA,KACA,WACM;AAAA,EACN,IAAI,YAAY,WAAW;AAAA,IACzB,IAAI,YAAY,IAAI,GAAG,GAAG;AAAA,MACxB,UAAU,IAAI,WAAW,KAAK;AAAA,MAC9B,MAAM,KAAI,cAAc,OAAO,OAAO,KAAK,MAAM,SAAS;AAAA,MAC1D,GAAG,MAAM,uBAAuB,uBAAuB,EAAE,IACvD,aAAa,EAAC,GACd,KACF;AAAA,IACF,EAAO;AAAA,MAGL,UAAU,IAAI,WAAW,KAAK;AAAA,MAC9B,IAAI,cAAc,MAAM;AAAA,QACtB,GAAG,MACD,6EACF,EAAE,IAAI,KAAK,KAAK;AAAA,MAClB,EAAO;AAAA,QAGL,GAAG,MACD,mGACF,EAAE,IAAI,KAAK,WAAW,KAAK;AAAA;AAAA;AAAA,IAG/B;AAAA,EACF;AAAA,EAEA,MAAM,IAAI,OAAO;AAAA,EACjB,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,GAAG;AAAA,IAAG;AAAA,EAI5B,IAAI,YAAY,eAAe,QAAQ,UAAU,eAAe,IAAI,KAAK;AAAA,IAAG;AAAA,EAE5E,UAAU,IAAI,EAAE,OAAO,KAAK;AAAA,EAC5B,MAAM,IAAI,cAAc,OAAO,OAAO,KAAK,MAAM,SAAS;AAAA,EAC1D,GAAG,MAAM,UAAU,EAAE,cAAc,uBAAuB,EAAE,IAC1D,aAAa,CAAC,GACd,KACF;AAAA,EAIA,IAAI,YAAY,cAAc;AAAA,IAC5B,MAAM,MAAM,GACT,MAAM,4CAA4C,EAClD,IAAI,KAAK;AAAA,IACZ,IAAI,KAAK;AAAA,MAAQ,iBAAiB,IAAI,IAAI,MAAM;AAAA,EAClD;AAAA;AAqBK,SAAS,WAAW,CAAC,IAAc,GAAwB;AAAA,EAChE,MAAM,WACJ,GACG,MACC,kHACF,EACC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,UAAU;AAAA,EAEzF,MAAM,MAAM,GACT,MACC,qFACF,EACC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG;AAAA,EAEjC,IAAI,IAAI,MAAM,EAAE;AAAA,IAAK,OAAO,EAAE,UAAU,QAAQ,MAAM;AAAA,EACtD,YAAY,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK;AAAA,EACnD,OAAO,EAAE,UAAU,QAAQ,KAAK;AAAA;AAI3B,SAAS,IAAI,CAClB,IACA,SACA,OACA,KACA,OACQ;AAAA,EACR,MAAM,OAAO,UAAU,EAAE;AAAA,EACzB,MAAM,SAAiB;AAAA,IACrB,KAAK,QAAQ,IAAI,IAAI;AAAA,IACrB,SAAS;AAAA,IACT;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,IACA,OAAO,UAAU,YAAY,OAAO,KAAK,UAAU,KAAK;AAAA,IACxD,KAAK;AAAA,EACP;AAAA,EACA,YAAY,IAAI,MAAM;AAAA,EACtB,OAAO;AAAA;AAIF,SAAS,UAAU,CACxB,IACA,SACA,OACA,QACU;AAAA,EACV,MAAM,MAAgB,CAAC;AAAA,EACvB,YAAY,KAAK,UAAU,OAAO,QAAQ,MAAM,GAAG;AAAA,IACjD,IAAI,KAAK,KAAK,IAAI,SAAS,OAAO,KAAK,KAAK,CAAC;AAAA,EAC/C;AAAA,EACA,OAAO;AAAA;AAQF,SAAS,MAAM,CAAC,IAAc,SAA2B;AAAA,EAC9D,MAAM,OAAO,UAAU,EAAE;AAAA,EACzB,IAAI,WAAW;AAAA,EACf,MAAM,KAAK,GAAG,YAAY,CAAC,OAAiB;AAAA,IAC1C,WAAW,KAAK,IAAI;AAAA,MAClB,WAAW,IAAI,MAAM,EAAE,GAAG;AAAA,MAC1B,IAAI,YAAY,IAAI,CAAC,EAAE;AAAA,QAAU;AAAA,IACnC;AAAA,GACD;AAAA,EACD,GAAG,OAAO;AAAA,EACV,OAAO;AAAA;AAIF,SAAS,YAAY,CAAC,IAAc,OAAyB;AAAA,EAClE,OAAO,GACJ,MAAM,UAAU,4DAA4D,EAC5E,IAAI,KAAK;AAAA;AAiCP,SAAS,eAAe,CAC7B,IACA,KACA,OAAyB,CAAC,GACb;AAAA,EACb,MAAM,UAAU,KAAK,mBAAmB,CAAC;AAAA,EACzC,MAAM,UAAU,CAAC,WAAW;AAAA,EAC5B,MAAM,SAA8B,CAAC,GAAG;AAAA,EACxC,IAAI,QAAQ,QAAQ;AAAA,IAClB,QAAQ,KAAK,mBAAmB,QAAQ,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,IACpE,OAAO,KAAK,GAAG,OAAO;AAAA,EACxB;AAAA,EACA,IAAI,KAAK,YAAY,MAAM;AAAA,IACzB,QAAQ,KAAK,aAAa;AAAA,IAC1B,OAAO,KAAK,KAAK,QAAQ;AAAA,EAC3B;AAAA,EACA,MAAM,QAAQ,QAAQ,KAAK,OAAO;AAAA,EAClC,MAAM,WAAW,KAAK,SAAS,QAAQ,KAAK,QAAQ,IAAI,UAAU,KAAK,MAAM,KAAK,KAAK,MAAM;AAAA,EAC7F,MAAM,OAAO,GACV,MACC,wBAAwB,yCAAyC,uBAAuB,UAC1F,EACC,IAAI,GAAG,MAAM;AAAA,EAEhB,MAAM,YAAY,KAAK,SAAS,QAAQ,KAAK,SAAS,KAAK,KAAK,SAAS,KAAK;AAAA,EAC9E,IAAI;AAAA,EACJ,IAAI,WAAW;AAAA,IAMb,MAAM,MAAM,GAAG,MAAM,0CAA0C,EAAE,IAAI;AAAA,IACrE,SAAS,KAAK,IAAI,KAAK,IAAI,KAAK,GAAG;AAAA,EACrC,EAAO;AAAA,IACL,SAAS,KAAK,KAAK,SAAS,GAAI;AAAA;AAAA,EAElC,OAAO,EAAE,SAAS,KAAK,IAAI,GAAG,KAAK,SAAS,QAAQ,CAAC,GAAG,OAAO;AAAA;AAAA,IApVpD,aAEA,eAIT,aAA4B,MA4B1B,QA6CA;AAAA;AAAA,EApGN;AAAA,EAGA;AAAA,EAkBa,cAAc,CAAC,OAAO,WAAW,WAAW,UAAU,OAAO,SAAS,KAAK;AAAA,EAE3E,gBAAgB,YAAY,KAAK,IAAI;AAAA,EAgC5C,SAA+D;AAAA,IACnE,WAAW;AAAA,MACT,OAAO;AAAA,MACP,MAAM,IAAI,IAAI,CAAC,QAAQ,QAAQ,eAAe,WAAW,CAAC;AAAA,IAC5D;AAAA,IACA,YAAY;AAAA,MACV,OAAO;AAAA,MACP,MAAM,IAAI,IAAI,CAAC,eAAe,QAAQ,QAAQ,UAAU,YAAY,WAAW,CAAC;AAAA,IAClF;AAAA,IACA,WAAW;AAAA,MACT,OAAO;AAAA,MACP,MAAM,IAAI,IAAI,CAAC,SAAS,QAAQ,eAAe,aAAa,eAAe,aAAa,WAAW,CAAC;AAAA,IACtG;AAAA,IACA,YAAY;AAAA,MACV,OAAO;AAAA,MACP,MAAM,IAAI,IAAI,CAAC,UAAU,QAAQ,aAAa,eAAe,WAAW,CAAC;AAAA,IAC3E;AAAA,IACA,OAAO;AAAA,MACL,OAAO;AAAA,MACP,MAAM,IAAI,IAAI,CAAC,QAAQ,SAAS,eAAe,WAAW,CAAC;AAAA,IAC7D;AAAA,IACA,YAAY;AAAA,MACV,OAAO;AAAA,MACP,MAAM,IAAI,IAAI;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAKA,aAAa;AAAA,MACX,OAAO;AAAA,MACP,MAAM,IAAI,IAAI,CAAC,cAAc,cAAc,WAAW,CAAC;AAAA,IACzD;AAAA,EACF;AAAA,EAIM,cAAc,IAAI,IAAI,CAAC,eAAe,eAAe,aAAa,WAAW,CAAC;AAAA;;;ACrGpF,iBAAS;AASF,SAAS,QAAQ,CAAC,MAAsB;AAAA,EAC7C,OAAO,MAAK,SAAS,GAAG,IAAI;AAAA;AASvB,SAAS,SAAS,CAAC,OAA2B;AAAA,EACnD,MAAM,SAAS,IAAI,IAAI,aAAa,QAAQ;AAAA,EAC5C,OAAO,OAAO,KAAK;AAAA,EACnB,OAAO,OAAO,OAAO,KAAK;AAAA;AAIrB,SAAS,QAAQ,CAAC,OAA2B;AAAA,EAClD,OAAO,UAAU,KAAK,EAAE,MAAM,GAAG,aAAa;AAAA;AAKzC,SAAS,eAAe,CAAC,OAAmB,MAAuB;AAAA,EACxE,OAAO,UAAU,KAAK,EAAE,MAAM,GAAG,KAAK,MAAM,MAAM;AAAA;AAIpD,eAAsB,OAAO,CAAC,MAA4D;AAAA,EACxF,MAAM,QACJ,OAAO,SAAS,WACZ,IAAI,YAAY,EAAE,OAAO,IAAI,IAC7B,gBAAgB,aACd,OACA,IAAI,WAAW,IAAI;AAAA,EAC3B,MAAM,OAAO,SAAS,KAAK;AAAA,EAC3B,MAAM,OAAO,SAAS,IAAI;AAAA,EAC1B,IAAI,CAAE,MAAM,IAAI,KAAK,IAAI,EAAE,OAAO;AAAA,IAAI,MAAM,IAAI,MAAM,MAAM,KAAK;AAAA,EACjE,OAAO,EAAE,MAAM,MAAM,MAAM,MAAM,WAAW;AAAA;AAG9C,eAAsB,OAAO,CAAC,MAA0C;AAAA,EACtE,MAAM,OAAO,IAAI,KAAK,SAAS,IAAI,CAAC;AAAA,EACpC,IAAI,CAAE,MAAM,KAAK,OAAO;AAAA,IAAI,OAAO;AAAA,EACnC,OAAO,IAAI,WAAW,MAAM,KAAK,YAAY,CAAC;AAAA;AAMhD,eAAsB,SAAS,CAAC,MAAc,OAAoC;AAAA,EAChF,MAAM,OAAO,SAAS,IAAI;AAAA,EAC1B,IAAI,CAAE,MAAM,IAAI,KAAK,IAAI,EAAE,OAAO;AAAA,IAAI,MAAM,IAAI,MAAM,MAAM,KAAK;AAAA,EACjE,OAAO,MAAM;AAAA;AAIf,eAAsB,UAAU,CAAC,MAA+B;AAAA,EAC9D,MAAM,OAAO,IAAI,KAAK,SAAS,IAAI,CAAC;AAAA,EACpC,IAAI,CAAE,MAAM,KAAK,OAAO;AAAA,IAAI,OAAO;AAAA,EACnC,MAAM,OAAO,KAAK;AAAA,EAClB,MAAM,KAAK,OAAO;AAAA,EAClB,OAAO;AAAA;AAAA,IAvDI,gBAAgB;AAAA;AAAA,EAf7B;AAAA;;;ACyEO,SAAS,gBAAgB,CAAC,MAAsB;AAAA,EACrD,MAAM,MAAM,KAAK,MAAM,KAAK,YAAY,GAAG,IAAI,CAAC,EAAE,YAAY;AAAA,EAC9D,OAAO,KAAK,QAAQ;AAAA;AAYf,SAAS,iBAAiB,CAAC,KAAqB;AAAA,EACrD,MAAM,OAAO,IACV,KAAK,EACL,YAAY,EACZ,QAAQ,gBAAgB,GAAG,EAC3B,QAAQ,YAAY,EAAE;AAAA,EACzB,IAAI,CAAC;AAAA,IAAM,MAAM,IAAI,QAAQ,iBAAiB,sBAAsB,KAAK,UAAU,GAAG,GAAG;AAAA,EACzF,OAAO;AAAA;AAUF,SAAS,iBAAiB,CAAC,KAAqB;AAAA,EACrD,MAAM,OAAiB,CAAC;AAAA,EACxB,WAAW,OAAO,IAAI,MAAM,GAAG,GAAG;AAAA,IAChC,IAAI,QAAQ,MAAM,QAAQ;AAAA,MAAK;AAAA,IAC/B,IAAI,QAAQ;AAAA,MAAM,KAAK,IAAI;AAAA,IACtB;AAAA,WAAK,KAAK,GAAG;AAAA,EACpB;AAAA,EACA,OAAO,KAAK,KAAK,GAAG;AAAA;AAKf,SAAS,OAAO,CAAC,IAAc,IAA4B;AAAA,EAChE,OAAO,GACJ,MAAM,UAAU,uDAAuD,EACvE,IAAI,EAAE;AAAA;AAIJ,SAAS,aAAa,CAAC,IAAc,MAA8B;AAAA,EAGxE,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,OAAO,kBAAkB,IAAI;AAAA,IAC7B,MAAM;AAAA,IACN,OAAO;AAAA;AAAA,EAET,OAAO,GACJ,MACC,UAAU,2FACZ,EACC,IAAI,IAAI;AAAA;AAGN,SAAS,SAAS,CAAC,IAAyB;AAAA,EACjD,OAAO,GACJ,MAAM,UAAU,iEAAiE,EACjF,IAAI;AAAA;AAIF,SAAS,WAAW,CAAC,IAAc,KAAsB;AAAA,EAC9D,MAAM,OAAO,IAAI,WAAW,OAAO,IAAI,QAAQ,IAAI,GAAG,IAAI;AAAA,EAC1D,MAAM,OAAO,QAAQ,cAAc,IAAI,GAAG;AAAA,EAC1C,IAAI,CAAC;AAAA,IAAM,MAAM,IAAI,QAAQ,aAAa,iBAAiB,KAAK;AAAA,EAChE,OAAO;AAAA;AAUF,SAAS,UAAU,CACxB,IACA,QACA,MACiF;AAAA,EAGjF,MAAM,YAAY,SAAS,MAAM,KAAK,SAAS,GAAG,IAAI,GAAG,mBAAmB;AAAA,EAC5E,MAAM,IAAI,kBAAkB,SAAS;AAAA,EACrC,IAAI,CAAC;AAAA,IAAG,OAAO;AAAA,EACf,OAAO,GACJ,MACC,sIACF,EACC,IAAI,QAAQ,CAAC;AAAA;AAGX,SAAS,SAAS,CAAC,IAAc,QAAmC;AAAA,EACzE,OAAO,GACJ,MACC,oHACF,EACC,IAAI,MAAM;AAAA;AAaR,SAAS,UAAU,CAAC,aAA8B;AAAA,EACvD,MAAM,KAAK,YAAY,YAAY;AAAA,EACnC,OACE,GAAG,WAAW,OAAO,KACrB,GAAG,WAAW,kBAAkB,KAChC,GAAG,WAAW,2BAA2B,KACzC,GAAG,WAAW,iBAAiB,KAC/B,GAAG,WAAW,wBAAwB,KACtC,GAAG,WAAW,eAAe;AAAA;AAO1B,SAAS,WAAW,CAAC,aAA8B;AAAA,EACxD,OAAO,YAAY,YAAY,EAAE,WAAW,QAAQ,KAAK,CAAC,WAAW,WAAW;AAAA;AAG3E,SAAS,OAAO,CAAC,MAAqD;AAAA,EAC3E,IAAI,OAAO,SAAS;AAAA,IAAU,OAAO,IAAI,YAAY,EAAE,OAAO,IAAI;AAAA,EAClE,OAAO,gBAAgB,aAAa,OAAO,IAAI,WAAW,IAAI;AAAA;AAIhE,SAAS,aAAa,CAAC,OAA2B;AAAA,EAChD,IAAI,IAAI;AAAA,EACR,SAAS,IAAI,EAAG,IAAI,MAAM,QAAQ;AAAA,IAAK,KAAK,OAAO,aAAa,MAAM,EAAG;AAAA,EACzE,OAAO,KAAK,CAAC;AAAA;AA4CR,SAAS,SAAS,CAAC,IAAc,QAAgB,MAA6B;AAAA,EACnF,MAAM,MAAM,GACT,MAAM,uFAAuF,EAC7F,IAAI,QAAQ,IAAI;AAAA,EACnB,OAAO,KAAK,MAAM;AAAA;AAIb,SAAS,YAAY,CAC1B,IACA,QACA,WACA,aACA,UACA,SACa;AAAA,EACb,MAAM,WAAW,UAAU,IAAI,QAAQ,SAAS;AAAA,EAChD,MAAM,KAAK,YAAY,MAAM,MAAM,SAAS;AAAA,EAC5C,gBAAgB,MAAM,MAAM;AAAA,IAC1B,IAAI,CAAC,UAAU;AAAA,MACb,MAAM,QAAQ,KAAK,IAAI,cAAc,IAAI,WAAW,MAAM;AAAA,MAC1D,KAAK,IAAI,cAAc,IAAI,QAAQ,SAAS;AAAA,MAC5C,KAAK,IAAI,cAAc,IAAI,eAAe,MAAM,GAAG;AAAA,IACrD;AAAA,IACA,KAAK,IAAI,cAAc,IAAI,gBAAgB,WAAW;AAAA,IACtD,KAAK,IAAI,cAAc,IAAI,YAAY,QAAQ;AAAA,IAC/C,KAAK,IAAI,cAAc,IAAI,WAAW,OAAO;AAAA,IAC7C,KAAK,IAAI,cAAc,IAAI,aAAa,CAAC;AAAA,GAC1C;AAAA,EACD,OAAO,GAAG,MAAM,UAAU,+CAA+C,EAAE,IAAI,EAAE;AAAA;AAQ5E,SAAS,aAAa,CAC3B,IACA,QACA,MACA,MACa;AAAA,EACb,MAAM,YAAY,kBAAkB,IAAI;AAAA,EACxC,IAAI,CAAC;AAAA,IAAW,MAAM,IAAI,QAAQ,iBAAiB,sBAAsB,KAAK,UAAU,IAAI,GAAG;AAAA,EAC/F,MAAM,cAAc,KAAK,eAAe,iBAAiB,SAAS;AAAA,EAClE,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI,WAAW,WAAW,GAAG;AAAA,IAC3B,WAAW;AAAA,IACX,UAAU,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO,IAAI,YAAY,EAAE,OAAO,QAAQ,KAAK,IAAI,CAAC;AAAA,EACnG,EAAO;AAAA,IACL,MAAM,QAAQ,QAAQ,KAAK,IAAI;AAAA,IAC/B,IAAI,MAAM,aAAa;AAAA,MACrB,MAAM,IAAI,QACR,iBACA,kEACF;AAAA,IACF,WAAW;AAAA,IACX,UAAU,cAAc,KAAK;AAAA;AAAA,EAE/B,OAAO,aAAa,IAAI,QAAQ,WAAW,aAAa,UAAU,OAAO;AAAA;AAmBpE,SAAS,SAAS,CAAC,IAAc,QAAwB;AAAA,EAC9D,OACE,GACG,MAAM,0EAA0E,EAChF,IAAI,MAAM,EACb;AAAA;AAAA,IA9US,WAEP,aAiBO,gBAIA,kBAIP,MAmJO,cAkCA,YAcA,YAgBA,YA2EA;AAAA;AAAA,EArUb;AAAA,EACA;AAAA,EACA;AAAA,EAUa,YAAY,CAAC,MAAM,QAAQ,SAAS,aAAa;AAAA,EAExD,cAAc,UAAU,KAAK,IAAI;AAAA,EAiB1B,iBAAiB;AAAA,IAC5B;AAAA,IAAM;AAAA,IAAW;AAAA,IAAQ;AAAA,IAAgB;AAAA,IAAY;AAAA,EACvD;AAAA,EAEa,mBAAmB,eAAe,KAAK,IAAI;AAAA,EAIlD,OAA+B;AAAA,IACnC,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,aAAa;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,EACR;AAAA,EA0Ha,eAAe,MAAM;AAAA,EAkCrB,aAAa,QAAQ,SAAS,WAAU,CACnD,IACA,MACS;AAAA,IACT,MAAM,OAAO,kBAAkB,KAAK,IAAI;AAAA,IACxC,IAAI,cAAc,IAAI,IAAI;AAAA,MAAG,MAAM,IAAI,QAAQ,YAAY,6BAA6B,MAAM;AAAA,IAC9F,MAAM,KAAK,MAAM,QAAQ,IAAI;AAAA,IAC7B,MAAM,QAAQ,KAAK,IAAI,SAAS,IAAI,QAAQ,IAAI;AAAA,IAChD,KAAK,IAAI,SAAS,IAAI,eAAe,MAAM,GAAG;AAAA,IAC9C,IAAI,KAAK,UAAU;AAAA,MAAW,KAAK,IAAI,SAAS,IAAI,SAAS,KAAK,KAAK;AAAA,IACvE,OAAO,QAAQ,IAAI,EAAE;AAAA,GACtB;AAAA,EAGY,aAAa,QAAQ,SAAS,WAAU,CACnD,IACA,IACA,MACS;AAAA,IACT,IAAI,CAAC,QAAQ,IAAI,EAAE;AAAA,MAAG,MAAM,IAAI,QAAQ,aAAa,iBAAiB,IAAI;AAAA,IAC1E,IAAI,KAAK,SAAS,WAAW;AAAA,MAC3B,MAAM,OAAO,kBAAkB,KAAK,IAAI;AAAA,MACxC,MAAM,MAAM,cAAc,IAAI,IAAI;AAAA,MAClC,IAAI,OAAO,IAAI,OAAO;AAAA,QAAI,MAAM,IAAI,QAAQ,YAAY,6BAA6B,MAAM;AAAA,MAC3F,KAAK,IAAI,SAAS,IAAI,QAAQ,IAAI;AAAA,IACpC;AAAA,IACA,IAAI,KAAK,UAAU;AAAA,MAAW,KAAK,IAAI,SAAS,IAAI,SAAS,KAAK,KAAK;AAAA,IACvE,OAAO,QAAQ,IAAI,EAAE;AAAA,GACtB;AAAA,EAEY,aAAa,QAAQ,SAAS,WAAU,CAAC,IAAc,IAAqB;AAAA,IACvF,IAAI,CAAC,QAAQ,IAAI,EAAE;AAAA,MAAG,OAAO;AAAA,IAC7B,MAAM,QAAQ,GACX,MAAM,+DAA+D,EACrE,IAAI,EAAE;AAAA,IACT,WAAW,KAAK;AAAA,MAAO,KAAK,IAAI,cAAc,EAAE,IAAI,aAAa,CAAC;AAAA,IAClE,KAAK,IAAI,SAAS,IAAI,aAAa,CAAC;AAAA,IACpC,OAAO;AAAA,GACR;AAAA,EAmEY,aAAa,QAAQ,SAAS,WAAU,CACnD,IACA,QACA,MACS;AAAA,IACT,MAAM,KAAK,UAAU,IAAI,QAAQ,kBAAkB,IAAI,CAAC;AAAA,IACxD,IAAI,CAAC;AAAA,MAAI,OAAO;AAAA,IAChB,MAAM,OAAO,GAAG,MAAM,oDAAoD,EAAE,IAAI,EAAE;AAAA,IAGlF,IAAI,CAAC,QAAQ,KAAK;AAAA,MAAG,OAAO;AAAA,IAC5B,KAAK,IAAI,cAAc,IAAI,aAAa,CAAC;AAAA,IACzC,OAAO;AAAA,GACR;AAAA;;;AClSM,SAAS,UAAU,CAAC,IAA0B;AAAA,EACnD,MAAM,MAAM,GACT,MAAM,+EAA+E,EACrF,IAAI,SAAS;AAAA,EAChB,IAAI,YAAsB,CAAC;AAAA,EAC3B,IAAI,KAAK,YAAY;AAAA,IACnB,IAAI;AAAA,MACF,MAAM,SAAS,KAAK,MAAM,IAAI,UAAU;AAAA,MACxC,IAAI,MAAM,QAAQ,MAAM;AAAA,QAAG,YAAY,OAAO,OAAO,CAAC,MAAM,OAAO,MAAM,QAAQ;AAAA,MACjF,MAAM;AAAA,EAGV;AAAA,EACA,MAAM,aAAyB,KAAK,eAAe,QAAQ,QAAQ;AAAA,EACnE,OAAO,EAAE,WAAW,WAAW;AAAA;AA0B1B,SAAS,cAAc,CAAC,IAAc,MAAwB;AAAA,EACnE,MAAM,KAAK,QAAQ,UAAU,EAAE;AAAA,EAC/B,OAAO,WAAW,EAAE,EAAE,UAAU,SAAS,EAAE;AAAA;AAkBtC,SAAS,WAAW,CAAC,IAAc,MAAuB;AAAA,EAC/D,IAAI,eAAe,EAAE;AAAA,IAAG,OAAO;AAAA,EAC/B,MAAM,MAAM,GACT,MAAM,yDAAyD,EAC/D,IAAI,IAAI;AAAA,EACX,OAAO,CAAC,CAAC,OAAO,IAAI,YAAY,KAAK,IAAI,aAAa;AAAA;AAMjD,SAAS,WAAW,CAAC,IAAc,MAAc,UAAyB;AAAA,EAC/E,GAAG,MAAM,mDAAmD,EAAE,IAAI,WAAW,IAAI,GAAG,IAAI;AAAA;AAYnF,SAAS,kBAAkB,CAAC,IAAoB;AAAA,EACrD,GAAG,MAAM,oCAAoC,EAAE,IAAI;AAAA,EACnD,GAAG,MAAM,gCAAgC,EAAE,IAAI,oBAAoB;AAAA;AAM9D,SAAS,kBAAkB,CAAC,IAA6B;AAAA,EAC9D,MAAM,MAAM,GAAG,MAAM,sCAAsC,EAAE,IAAI,oBAAoB;AAAA,EAGrF,OAAO,MAAM,OAAO,IAAI,KAAK,IAAI;AAAA;AAG5B,SAAS,mBAAmB,CAAC,IAAc,IAAkB;AAAA,EAClE,GAAG,MACD,mGACF,EAAE,IAAI,sBAAsB,OAAO,EAAE,CAAC;AAAA;AAUjC,SAAS,UAAU,CAAC,MAA+B;AAAA,EACxD,IAAI,CAAC;AAAA,IAAM,OAAO,CAAC;AAAA,EACnB,MAAM,MAAgB,CAAC;AAAA,EACvB,WAAW,KAAK,KAAK,SAAS,YAAY;AAAA,IAAG,IAAI,KAAK,EAAE,EAAG;AAAA,EAC3D,OAAO;AAAA;AASF,SAAS,gBAAgB,CAAC,IAA2B;AAAA,EAC1D,MAAM,MAAM,IAAI;AAAA,EAChB,MAAM,QAAQ,GACX,MAAM,0EAA0E,EAChF,IAAI;AAAA,EACP,WAAW,KAAK;AAAA,IAAO,IAAI,EAAE;AAAA,MAAS,IAAI,IAAI,EAAE,OAAO;AAAA,EAEvD,MAAM,SAAS,GACZ,MAAM,0EAA0E,EAChF,IAAI;AAAA,EACP,WAAW,KAAK;AAAA,IAAQ,WAAW,KAAK,WAAW,EAAE,IAAI;AAAA,MAAG,IAAI,IAAI,CAAC;AAAA,EACrE,OAAO;AAAA;AASF,SAAS,UAAU,CACxB,IACA,MACA,MACA,aACA,UAAU,GACJ;AAAA,EACN,GAAG,MACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAOF,EAAE,IAAI,MAAM,MAAM,eAAe,MAAM,KAAK,IAAI,GAAG,UAAU,IAAI,CAAC;AAAA;AAK7D,SAAS,UAAU,CAAC,IAAc,MAAc,SAAwB;AAAA,EAC7E,GAAG,MAAM,kDAAkD,EAAE,IAAI,UAAU,IAAI,GAAG,IAAI;AAAA;AAIjF,SAAS,SAAS,CAAC,IAAc,MAAoB;AAAA,EAC1D,GAAG,MAAM,sDAAsD,EAAE,IAAI,KAAK,IAAI,GAAG,IAAI;AAAA;AAGhF,SAAS,UAAU,CAAC,IAAc,MAAoB;AAAA,EAC3D,GAAG,MAAM,uCAAuC,EAAE,IAAI,IAAI;AAAA;AAGrD,SAAS,WAAW,CAAC,IAA4B;AAAA,EACtD,OAAO,GACJ,MAAM,yFAAyF,EAC/F,IAAI;AAAA;AAKF,SAAS,YAAY,CAAC,IAAgD;AAAA,EAC3E,OAAO,GACJ,MAAM,qDAAqD,EAC3D,IAAI;AAAA;AAKF,SAAS,SAAS,CAAC,IAAc,MAAc,QAA0B;AAAA,EAC9E,OACE,GAAG,MAAM,iDAAiD,EAAE,IAAI,SAAS,IAAI,GAAG,IAAI,EACjF,UAAU;AAAA;AAaV,SAAS,eAAe,CAAC,IAAc,MAA6B;AAAA,EACzE,MAAM,MAAM,GACT,MAAM,oDAAoD,EAC1D,IAAI,IAAI;AAAA,EACX,OAAO,KAAK,gBAAgB;AAAA;AAGvB,SAAS,UAAU,CAAC,IAA0B;AAAA,EACnD,MAAM,QAAQ,YAAY,EAAE;AAAA,EAC5B,IAAI,aAAa;AAAA,EACjB,IAAI,iBAAiB;AAAA,EACrB,IAAI,iBAAiB;AAAA,EACrB,WAAW,KAAK,OAAO;AAAA,IACrB,cAAc,EAAE;AAAA,IAChB,IAAI,YAAY,IAAI,EAAE,IAAI,GAAG;AAAA,MAC3B,kBAAkB,EAAE;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,eAAe,aAAa;AAAA,IAC5B,OAAO,MAAM;AAAA,IACb;AAAA,EACF;AAAA;AAaK,SAAS,UAAU,CAAC,IAA2B;AAAA,EACpD,MAAM,OAAO,UAAU,EAAE;AAAA,EACzB,MAAM,OAAO,IAAI;AAAA,EACjB,KAAK,IAAI,MAAM,IAAI;AAAA,EACnB,MAAM,QAAQ,GACX,MAAM,4DAA4D,EAClE,IAAI;AAAA,EACP,WAAW,KAAK;AAAA,IAAO,IAAI,CAAC,KAAK,IAAI,EAAE,OAAO;AAAA,MAAG,KAAK,IAAI,EAAE,SAAS,EAAE,SAAS,KAAK,IAAI,EAAE,OAAO,KAAK,IAAI;AAAA,EAC3G,MAAM,SAAS,GACZ,MAAM,oEAAoE,EAC1E,IAAI;AAAA,EACP,WAAW,KAAK;AAAA,IAAQ,IAAI,CAAC,KAAK,IAAI,EAAE,OAAO;AAAA,MAAG,KAAK,IAAI,EAAE,SAAS,IAAI;AAAA,EAC1E,OAAO,CAAC,GAAG,KAAK,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,YAAY,EAAE,QAAQ,OAAO,MAAM,WAAW,KAAK,EAAE;AAAA;AAAA,IAxSnF,YAAY,WAyDZ,eAAe,CAAC,IAAc,YAA4B;AAAA,EACrE,gBAAgB,MAAM,MAAM;AAAA,IAE1B,MAAM,OAAO,IAAI;AAAA,IACjB,MAAM,OAAO,QAAQ,OAAO,CAAC,MAAM,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,IAAI;AAAA,IAC3E,KAAK,IAAI,eAAe,WAAW,cAAc,IAAI;AAAA,IAErD,MAAM,MAAM,WAAW,EAAE;AAAA,IACzB,IAAI,IAAI,cAAc;AAAA,MAAM,KAAK,IAAI,eAAe,WAAW,cAAc,KAAK;AAAA,GACnF;AAAA,EACD,mBAAmB,EAAE;AAAA,GAGV,gBAAgB,CAAC,IAAc,eAAiC;AAAA,EAC3E,KAAK,IAAI,eAAe,WAAW,cAAc,UAAU;AAAA,EAC3D,mBAAmB,EAAE;AAAA,GAqDjB,uBAAuB,oBAoBvB;AAAA;AAAA,EApJN;AAAA,EACA;AAAA,EAmJM,eAAe;AAAA;;;ACnIrB,eAAsB,OAAO,CAC3B,IACA,QACA,MACA,MACsB;AAAA,EACtB,MAAM,YAAY,kBAAkB,IAAI;AAAA,EACxC,IAAI,CAAC;AAAA,IAAW,MAAM,IAAI,QAAQ,iBAAiB,sBAAsB,KAAK,UAAU,IAAI,GAAG;AAAA,EAC/F,MAAM,cAAc,KAAK,eAAe,iBAAiB,SAAS;AAAA,EAClE,IAAI,CAAC,WAAW,WAAW,GAAG;AAAA,IAC5B,MAAM,QAAQ,QAAQ,KAAK,IAAI;AAAA,IAG/B,IAAI,YAAY,WAAW,KAAK,MAAM,aAAa,cAAc;AAAA,MAC/D,MAAM,OAAO,MAAM,QAAQ,KAAK;AAAA,MAChC,WAAW,IAAI,KAAK,MAAM,KAAK,MAAM,WAAW;AAAA,MAChD,OAAO,aAAa,IAAI,QAAQ,WAAW,aAAa,QAAQ,KAAK,IAAI;AAAA,IAC3E;AAAA,EACF;AAAA,EACA,OAAO,cAAc,IAAI,QAAQ,WAAW,IAAI;AAAA;AAIlD,eAAsB,eAAe,CACnC,IACA,QACA,MAC4D;AAAA,EAC5D,MAAM,MAAM,WAAW,IAAI,QAAQ,IAAI;AAAA,EACvC,IAAI,CAAC;AAAA,IAAK,OAAO;AAAA,EAEjB,MAAM,UAAU,IAAI,WAAW;AAAA,EAC/B,IAAI;AAAA,EACJ,IAAI,IAAI,aAAa;AAAA,IAAQ,QAAQ,IAAI,YAAY,EAAE,OAAO,OAAO;AAAA,EAChE,SAAI,IAAI,aAAa;AAAA,IAAU,QAAQ,IAAI,WAAW,OAAO,KAAK,SAAS,QAAQ,CAAC;AAAA,EACpF;AAAA,IACH,QAAQ,MAAM,QAAQ,OAAO;AAAA,IAC7B,IAAI;AAAA,MAAO,UAAU,IAAI,OAAO;AAAA;AAAA,EAElC,IAAI,CAAC;AAAA,IAAO,OAAO;AAAA,EAEnB,OAAO,EAAE,aAAa,IAAI,cAAc,MAAM;AAAA;AAAA;AAAA,EAzEhD;AAAA,EACA;AAAA,EACA;AAAA,EAYA;AAAA,EAaA;AAAA;;;ACvBgC,SAAS,YAAY,CAAC,MAAM,aAAa,QAAQ;AAAA,EAC7E,SAAS,IAAI,CAAC,MAAM,KAAK;AAAA,IACrB,IAAI,CAAC,KAAK,MAAM;AAAA,MACZ,OAAO,eAAe,MAAM,QAAQ;AAAA,QAChC,OAAO;AAAA,UACH;AAAA,UACA,QAAQ;AAAA,UACR,QAAQ,IAAI;AAAA,QAChB;AAAA,QACA,YAAY;AAAA,MAChB,CAAC;AAAA,IACL;AAAA,IACA,IAAI,KAAK,KAAK,OAAO,IAAI,IAAI,GAAG;AAAA,MAC5B;AAAA,IACJ;AAAA,IACA,KAAK,KAAK,OAAO,IAAI,IAAI;AAAA,IACzB,YAAY,MAAM,GAAG;AAAA,IAErB,MAAM,QAAQ,EAAE;AAAA,IAChB,MAAM,OAAO,OAAO,KAAK,KAAK;AAAA,IAC9B,SAAS,IAAI,EAAG,IAAI,KAAK,QAAQ,KAAK;AAAA,MAClC,MAAM,IAAI,KAAK;AAAA,MACf,IAAI,EAAE,KAAK,OAAO;AAAA,QACd,KAAK,KAAK,MAAM,GAAG,KAAK,IAAI;AAAA,MAChC;AAAA,IACJ;AAAA;AAAA,EAGJ,MAAM,SAAS,QAAQ,UAAU;AAAA;AAAA,EACjC,MAAM,mBAAmB,OAAO;AAAA,EAChC;AAAA,EACA,OAAO,eAAe,YAAY,QAAQ,EAAE,OAAO,KAAK,CAAC;AAAA,EACzD,SAAS,CAAC,CAAC,KAAK;AAAA,IACZ,IAAI;AAAA,IACJ,MAAM,OAAO,QAAQ,SAAS,IAAI,aAAe;AAAA,IACjD,KAAK,MAAM,GAAG;AAAA,KACb,MAAK,KAAK,MAAM,aAAa,IAAG,WAAW,CAAC;AAAA,IAC7C,WAAW,MAAM,KAAK,KAAK,UAAU;AAAA,MACjC,GAAG;AAAA,IACP;AAAA,IACA,OAAO;AAAA;AAAA,EAEX,OAAO,eAAe,GAAG,QAAQ,EAAE,OAAO,KAAK,CAAC;AAAA,EAChD,OAAO,eAAe,GAAG,OAAO,aAAa;AAAA,IACzC,OAAO,CAAC,SAAS;AAAA,MACb,IAAI,QAAQ,UAAU,gBAAgB,OAAO;AAAA,QACzC,OAAO;AAAA,MACX,OAAO,MAAM,MAAM,QAAQ,IAAI,IAAI;AAAA;AAAA,EAE3C,CAAC;AAAA,EACD,OAAO,eAAe,GAAG,QAAQ,EAAE,OAAO,KAAK,CAAC;AAAA,EAChD,OAAO;AAAA;AAiBJ,SAAS,MAAM,CAAC,WAAW;AAAA,EAC9B,IAAI;AAAA,IACA,OAAO,OAAO,cAAc,SAAS;AAAA,EACzC,OAAO;AAAA;AAAA,IA5EP,IAES,OAyDA,QACA,gBAKA,iBAOA;AAAA;AAAA,EAtEA,wBAAsB,OAAO,OAAO;AAAA,IAC7C,QAAQ;AAAA,EACZ,CAAC;AAAA,EAuDY,SAAS,OAAO,WAAW;AAAA,EAC3B,iBAAN,MAAM,uBAAuB,MAAM;AAAA,IACtC,WAAW,GAAG;AAAA,MACV,MAAM,0EAA0E;AAAA;AAAA,EAExF;AAAA,EACa,kBAAN,MAAM,wBAAwB,MAAM;AAAA,IACvC,WAAW,CAAC,MAAM;AAAA,MACd,MAAM,uDAAuD,MAAM;AAAA,MACnE,KAAK,OAAO;AAAA;AAAA,EAEpB;AAAA,GACC,KAAK,YAAY,uBAAuB,GAAG,qBAAqB,CAAC;AAAA,EACrD,eAAe,WAAW;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtEhC,SAAS,WAAW,CAAC,KAAK;AAAA,EAC7B,OAAO;AAAA;AAEJ,SAAS,cAAc,CAAC,KAAK;AAAA,EAChC,OAAO;AAAA;AAEJ,SAAS,QAAQ,CAAC,MAAM;AACxB,SAAS,WAAW,CAAC,IAAI;AAAA,EAC5B,MAAM,IAAI,MAAM,sCAAsC;AAAA;AAEnD,SAAS,MAAM,CAAC,GAAG;AACnB,SAAS,aAAa,CAAC,SAAS;AAAA,EACnC,MAAM,gBAAgB,OAAO,OAAO,OAAO,EAAE,OAAO,CAAC,MAAM,OAAO,MAAM,QAAQ;AAAA,EAChF,MAAM,SAAS,OAAO,QAAQ,OAAO,EAChC,OAAO,EAAE,GAAG,OAAO,cAAc,QAAQ,CAAC,CAAC,MAAM,EAAE,EACnD,IAAI,EAAE,GAAG,OAAO,CAAC;AAAA,EACtB,OAAO;AAAA;AAEJ,SAAS,UAAU,CAAC,OAAO,YAAY,KAAK;AAAA,EAC/C,OAAO,MAAM,IAAI,CAAC,QAAQ,mBAAmB,GAAG,CAAC,EAAE,KAAK,SAAS;AAAA;AAE9D,SAAS,qBAAqB,CAAC,GAAG,OAAO;AAAA,EAC5C,IAAI,OAAO,UAAU;AAAA,IACjB,OAAO,MAAM,SAAS;AAAA,EAC1B,OAAO;AAAA;AAEJ,SAAS,MAAM,CAAC,QAAQ;AAAA,EAC3B,MAAM,MAAM;AAAA,EACZ,OAAO;AAAA,QACC,KAAK,GAAG;AAAA,MACR,IAAI,CAAC,KAAK;AAAA,QACN,MAAM,QAAQ,OAAO;AAAA,QACrB,OAAO,eAAe,MAAM,SAAS,EAAE,MAAM,CAAC;AAAA,QAC9C,OAAO;AAAA,MACX;AAAA,MACA,MAAM,IAAI,MAAM,0BAA0B;AAAA;AAAA,EAElD;AAAA;AAEG,SAAS,OAAO,CAAC,OAAO;AAAA,EAC3B,OAAO,UAAU,QAAQ,UAAU;AAAA;AAEhC,SAAS,UAAU,CAAC,QAAQ;AAAA,EAC/B,MAAM,QAAQ,OAAO,WAAW,GAAG,IAAI,IAAI;AAAA,EAC3C,MAAM,MAAM,OAAO,SAAS,GAAG,IAAI,OAAO,SAAS,IAAI,OAAO;AAAA,EAC9D,OAAO,OAAO,MAAM,OAAO,GAAG;AAAA;AAE3B,SAAS,kBAAkB,CAAC,KAAK,MAAM;AAAA,EAC1C,MAAM,QAAQ,MAAM;AAAA,EACpB,MAAM,eAAe,KAAK,MAAM,KAAK;AAAA,EAErC,MAAM,YAAY,OAAO,UAAU,KAAK,IAAI,KAAK,IAAI,KAAK,GAAG,CAAC;AAAA,EAC9D,IAAI,KAAK,IAAI,QAAQ,YAAY,IAAI;AAAA,IACjC,OAAO;AAAA,EACX,OAAO,QAAQ;AAAA;AAGZ,SAAS,UAAU,CAAC,QAAQ,KAAK,QAAQ;AAAA,EAC5C,IAAI,QAAQ;AAAA,EACZ,OAAO,eAAe,QAAQ,KAAK;AAAA,IAC/B,GAAG,GAAG;AAAA,MACF,IAAI,UAAU,YAAY;AAAA,QAEtB;AAAA,MACJ;AAAA,MACA,IAAI,UAAU,WAAW;AAAA,QACrB,QAAQ;AAAA,QACR,QAAQ,OAAO;AAAA,MACnB;AAAA,MACA,OAAO;AAAA;AAAA,IAEX,GAAG,CAAC,GAAG;AAAA,MACH,OAAO,eAAe,QAAQ,KAAK;AAAA,QAC/B,OAAO;AAAA,MAEX,CAAC;AAAA;AAAA,IAGL,cAAc;AAAA,EAClB,CAAC;AAAA;AAEE,SAAS,WAAW,CAAC,KAAK;AAAA,EAC7B,OAAO,OAAO,OAAO,OAAO,eAAe,GAAG,GAAG,OAAO,0BAA0B,GAAG,CAAC;AAAA;AAEnF,SAAS,UAAU,CAAC,QAAQ,MAAM,OAAO;AAAA,EAC5C,OAAO,eAAe,QAAQ,MAAM;AAAA,IAChC;AAAA,IACA,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,cAAc;AAAA,EAClB,CAAC;AAAA;AAEE,SAAS,SAAS,IAAI,MAAM;AAAA,EAC/B,MAAM,oBAAoB,CAAC;AAAA,EAC3B,WAAW,OAAO,MAAM;AAAA,IACpB,MAAM,cAAc,OAAO,0BAA0B,GAAG;AAAA,IACxD,OAAO,OAAO,mBAAmB,WAAW;AAAA,EAChD;AAAA,EACA,OAAO,OAAO,iBAAiB,CAAC,GAAG,iBAAiB;AAAA;AAEjD,SAAS,QAAQ,CAAC,QAAQ;AAAA,EAC7B,OAAO,UAAU,OAAO,KAAK,GAAG;AAAA;AAE7B,SAAS,gBAAgB,CAAC,KAAK,MAAM;AAAA,EACxC,IAAI,CAAC;AAAA,IACD,OAAO;AAAA,EACX,OAAO,KAAK,OAAO,CAAC,KAAK,QAAQ,MAAM,MAAM,GAAG;AAAA;AAE7C,SAAS,gBAAgB,CAAC,aAAa;AAAA,EAC1C,MAAM,OAAO,OAAO,KAAK,WAAW;AAAA,EACpC,MAAM,WAAW,KAAK,IAAI,CAAC,QAAQ,YAAY,IAAI;AAAA,EACnD,OAAO,QAAQ,IAAI,QAAQ,EAAE,KAAK,CAAC,YAAY;AAAA,IAC3C,MAAM,cAAc,CAAC;AAAA,IACrB,SAAS,IAAI,EAAG,IAAI,KAAK,QAAQ,KAAK;AAAA,MAClC,YAAY,KAAK,MAAM,QAAQ;AAAA,IACnC;AAAA,IACA,OAAO;AAAA,GACV;AAAA;AAEE,SAAS,YAAY,CAAC,SAAS,IAAI;AAAA,EACtC,MAAM,QAAQ;AAAA,EACd,IAAI,MAAM;AAAA,EACV,SAAS,IAAI,EAAG,IAAI,QAAQ,KAAK;AAAA,IAC7B,OAAO,MAAM,KAAK,MAAM,KAAK,OAAO,IAAI,MAAM,MAAM;AAAA,EACxD;AAAA,EACA,OAAO;AAAA;AAEJ,SAAS,GAAG,CAAC,KAAK;AAAA,EACrB,OAAO,KAAK,UAAU,GAAG;AAAA;AAEtB,SAAS,QAAO,CAAC,OAAO;AAAA,EAC3B,OAAO,MACF,YAAY,EACZ,KAAK,EACL,QAAQ,aAAa,EAAE,EACvB,QAAQ,YAAY,GAAG,EACvB,QAAQ,YAAY,EAAE;AAAA;AAGxB,SAAS,QAAQ,CAAC,MAAM;AAAA,EAC3B,OAAO,OAAO,SAAS,YAAY,SAAS,QAAQ,CAAC,MAAM,QAAQ,IAAI;AAAA;AAqBpE,SAAS,aAAa,CAAC,GAAG;AAAA,EAC7B,IAAI,SAAS,CAAC,MAAM;AAAA,IAChB,OAAO;AAAA,EAEX,MAAM,OAAO,EAAE;AAAA,EACf,IAAI,SAAS;AAAA,IACT,OAAO;AAAA,EACX,IAAI,OAAO,SAAS;AAAA,IAChB,OAAO;AAAA,EAEX,MAAM,OAAO,KAAK;AAAA,EAClB,IAAI,SAAS,IAAI,MAAM;AAAA,IACnB,OAAO;AAAA,EAEX,IAAI,OAAO,UAAU,eAAe,KAAK,MAAM,eAAe,MAAM,OAAO;AAAA,IACvE,OAAO;AAAA,EACX;AAAA,EACA,OAAO;AAAA;AAEJ,SAAS,YAAY,CAAC,GAAG;AAAA,EAC5B,IAAI,cAAc,CAAC;AAAA,IACf,OAAO,KAAK,EAAE;AAAA,EAClB,IAAI,MAAM,QAAQ,CAAC;AAAA,IACf,OAAO,CAAC,GAAG,CAAC;AAAA,EAChB,IAAI,aAAa;AAAA,IACb,OAAO,IAAI,IAAI,CAAC;AAAA,EACpB,IAAI,aAAa;AAAA,IACb,OAAO,IAAI,IAAI,CAAC;AAAA,EACpB,OAAO;AAAA;AAEJ,SAAS,OAAO,CAAC,MAAM;AAAA,EAC1B,IAAI,WAAW;AAAA,EACf,WAAW,OAAO,MAAM;AAAA,IACpB,IAAI,OAAO,UAAU,eAAe,KAAK,MAAM,GAAG,GAAG;AAAA,MACjD;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,OAAO;AAAA;AAwDJ,SAAS,WAAW,CAAC,KAAK;AAAA,EAC7B,OAAO,IAAI,QAAQ,uBAAuB,MAAM;AAAA;AAG7C,SAAS,KAAK,CAAC,MAAM,KAAK,QAAQ;AAAA,EACrC,MAAM,KAAK,IAAI,KAAK,KAAK,OAAO,OAAO,KAAK,KAAK,GAAG;AAAA,EACpD,IAAI,CAAC,OAAO,QAAQ;AAAA,IAChB,GAAG,KAAK,SAAS;AAAA,EACrB,OAAO;AAAA;AAEJ,SAAS,eAAe,CAAC,SAAS;AAAA,EACrC,MAAM,SAAS;AAAA,EACf,IAAI,CAAC;AAAA,IACD,OAAO,CAAC;AAAA,EACZ,IAAI,OAAO,WAAW;AAAA,IAClB,OAAO,EAAE,OAAO,MAAM,OAAO;AAAA,EACjC,IAAI,QAAQ,YAAY,WAAW;AAAA,IAC/B,IAAI,QAAQ,UAAU;AAAA,MAClB,MAAM,IAAI,MAAM,kDAAkD;AAAA,IACtE,OAAO,QAAQ,OAAO;AAAA,EAC1B;AAAA,EACA,OAAO,OAAO;AAAA,EACd,IAAI,OAAO,OAAO,UAAU;AAAA,IACxB,OAAO,KAAK,QAAQ,OAAO,MAAM,OAAO,MAAM;AAAA,EAClD,OAAO;AAAA;AAEJ,SAAS,sBAAsB,CAAC,QAAQ;AAAA,EAC3C,IAAI;AAAA,EACJ,OAAO,IAAI,MAAM,CAAC,GAAG;AAAA,IACjB,GAAG,CAAC,GAAG,MAAM,UAAU;AAAA,MACnB,WAAW,SAAS,OAAO;AAAA,MAC3B,OAAO,QAAQ,IAAI,QAAQ,MAAM,QAAQ;AAAA;AAAA,IAE7C,GAAG,CAAC,GAAG,MAAM,OAAO,UAAU;AAAA,MAC1B,WAAW,SAAS,OAAO;AAAA,MAC3B,OAAO,QAAQ,IAAI,QAAQ,MAAM,OAAO,QAAQ;AAAA;AAAA,IAEpD,GAAG,CAAC,GAAG,MAAM;AAAA,MACT,WAAW,SAAS,OAAO;AAAA,MAC3B,OAAO,QAAQ,IAAI,QAAQ,IAAI;AAAA;AAAA,IAEnC,cAAc,CAAC,GAAG,MAAM;AAAA,MACpB,WAAW,SAAS,OAAO;AAAA,MAC3B,OAAO,QAAQ,eAAe,QAAQ,IAAI;AAAA;AAAA,IAE9C,OAAO,CAAC,GAAG;AAAA,MACP,WAAW,SAAS,OAAO;AAAA,MAC3B,OAAO,QAAQ,QAAQ,MAAM;AAAA;AAAA,IAEjC,wBAAwB,CAAC,GAAG,MAAM;AAAA,MAC9B,WAAW,SAAS,OAAO;AAAA,MAC3B,OAAO,QAAQ,yBAAyB,QAAQ,IAAI;AAAA;AAAA,IAExD,cAAc,CAAC,GAAG,MAAM,YAAY;AAAA,MAChC,WAAW,SAAS,OAAO;AAAA,MAC3B,OAAO,QAAQ,eAAe,QAAQ,MAAM,UAAU;AAAA;AAAA,EAE9D,CAAC;AAAA;AAEE,SAAS,kBAAkB,CAAC,OAAO;AAAA,EACtC,IAAI,OAAO,UAAU;AAAA,IACjB,OAAO,MAAM,SAAS,IAAI;AAAA,EAC9B,IAAI,OAAO,UAAU;AAAA,IACjB,OAAO,IAAI;AAAA,EACf,OAAO,GAAG;AAAA;AAEP,SAAS,YAAY,CAAC,OAAO;AAAA,EAChC,OAAO,OAAO,KAAK,KAAK,EAAE,OAAO,CAAC,MAAM;AAAA,IACpC,OAAO,MAAM,GAAG,KAAK,UAAU,cAAc,MAAM,GAAG,KAAK,WAAW;AAAA,GACzE;AAAA;AAaE,SAAS,IAAI,CAAC,QAAQ,MAAM;AAAA,EAC/B,MAAM,UAAU,OAAO,KAAK;AAAA,EAC5B,MAAM,SAAS,QAAQ;AAAA,EACvB,MAAM,YAAY,UAAU,OAAO,SAAS;AAAA,EAC5C,IAAI,WAAW;AAAA,IACX,MAAM,IAAI,MAAM,iEAAiE;AAAA,EACrF;AAAA,EACA,MAAM,MAAM,UAAU,OAAO,KAAK,KAAK;AAAA,QAC/B,KAAK,GAAG;AAAA,MACR,MAAM,WAAW,CAAC;AAAA,MAClB,WAAW,OAAO,MAAM;AAAA,QACpB,IAAI,EAAE,OAAO,QAAQ,QAAQ;AAAA,UACzB,MAAM,IAAI,MAAM,sBAAsB,MAAM;AAAA,QAChD;AAAA,QACA,IAAI,CAAC,KAAK;AAAA,UACN;AAAA,QACJ,SAAS,OAAO,QAAQ,MAAM;AAAA,MAClC;AAAA,MACA,WAAW,MAAM,SAAS,QAAQ;AAAA,MAClC,OAAO;AAAA;AAAA,IAEX,QAAQ,CAAC;AAAA,EACb,CAAC;AAAA,EACD,OAAO,MAAM,QAAQ,GAAG;AAAA;AAErB,SAAS,IAAI,CAAC,QAAQ,MAAM;AAAA,EAC/B,MAAM,UAAU,OAAO,KAAK;AAAA,EAC5B,MAAM,SAAS,QAAQ;AAAA,EACvB,MAAM,YAAY,UAAU,OAAO,SAAS;AAAA,EAC5C,IAAI,WAAW;AAAA,IACX,MAAM,IAAI,MAAM,iEAAiE;AAAA,EACrF;AAAA,EACA,MAAM,MAAM,UAAU,OAAO,KAAK,KAAK;AAAA,QAC/B,KAAK,GAAG;AAAA,MACR,MAAM,WAAW,KAAK,OAAO,KAAK,IAAI,MAAM;AAAA,MAC5C,WAAW,OAAO,MAAM;AAAA,QACpB,IAAI,EAAE,OAAO,QAAQ,QAAQ;AAAA,UACzB,MAAM,IAAI,MAAM,sBAAsB,MAAM;AAAA,QAChD;AAAA,QACA,IAAI,CAAC,KAAK;AAAA,UACN;AAAA,QACJ,OAAO,SAAS;AAAA,MACpB;AAAA,MACA,WAAW,MAAM,SAAS,QAAQ;AAAA,MAClC,OAAO;AAAA;AAAA,IAEX,QAAQ,CAAC;AAAA,EACb,CAAC;AAAA,EACD,OAAO,MAAM,QAAQ,GAAG;AAAA;AAErB,SAAS,MAAM,CAAC,QAAQ,OAAO;AAAA,EAClC,IAAI,CAAC,cAAc,KAAK,GAAG;AAAA,IACvB,MAAM,IAAI,MAAM,kDAAkD;AAAA,EACtE;AAAA,EACA,MAAM,SAAS,OAAO,KAAK,IAAI;AAAA,EAC/B,MAAM,YAAY,UAAU,OAAO,SAAS;AAAA,EAC5C,IAAI,WAAW;AAAA,IAGX,MAAM,gBAAgB,OAAO,KAAK,IAAI;AAAA,IACtC,WAAW,OAAO,OAAO;AAAA,MACrB,IAAI,OAAO,yBAAyB,eAAe,GAAG,MAAM,WAAW;AAAA,QACnE,MAAM,IAAI,MAAM,8FAA8F;AAAA,MAClH;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,MAAM,MAAM,UAAU,OAAO,KAAK,KAAK;AAAA,QAC/B,KAAK,GAAG;AAAA,MACR,MAAM,SAAS,KAAK,OAAO,KAAK,IAAI,UAAU,MAAM;AAAA,MACpD,WAAW,MAAM,SAAS,MAAM;AAAA,MAChC,OAAO;AAAA;AAAA,EAEf,CAAC;AAAA,EACD,OAAO,MAAM,QAAQ,GAAG;AAAA;AAErB,SAAS,UAAU,CAAC,QAAQ,OAAO;AAAA,EACtC,IAAI,CAAC,cAAc,KAAK,GAAG;AAAA,IACvB,MAAM,IAAI,MAAM,sDAAsD;AAAA,EAC1E;AAAA,EACA,MAAM,MAAM,UAAU,OAAO,KAAK,KAAK;AAAA,QAC/B,KAAK,GAAG;AAAA,MACR,MAAM,SAAS,KAAK,OAAO,KAAK,IAAI,UAAU,MAAM;AAAA,MACpD,WAAW,MAAM,SAAS,MAAM;AAAA,MAChC,OAAO;AAAA;AAAA,EAEf,CAAC;AAAA,EACD,OAAO,MAAM,QAAQ,GAAG;AAAA;AAErB,SAAS,KAAK,CAAC,GAAG,GAAG;AAAA,EACxB,IAAI,EAAE,KAAK,IAAI,QAAQ,QAAQ;AAAA,IAC3B,MAAM,IAAI,MAAM,8FAA8F;AAAA,EAClH;AAAA,EACA,MAAM,MAAM,UAAU,EAAE,KAAK,KAAK;AAAA,QAC1B,KAAK,GAAG;AAAA,MACR,MAAM,SAAS,KAAK,EAAE,KAAK,IAAI,UAAU,EAAE,KAAK,IAAI,MAAM;AAAA,MAC1D,WAAW,MAAM,SAAS,MAAM;AAAA,MAChC,OAAO;AAAA;AAAA,QAEP,QAAQ,GAAG;AAAA,MACX,OAAO,EAAE,KAAK,IAAI;AAAA;AAAA,IAEtB,QAAQ,EAAE,KAAK,IAAI,UAAU,CAAC;AAAA,EAClC,CAAC;AAAA,EACD,OAAO,MAAM,GAAG,GAAG;AAAA;AAEhB,SAAS,OAAO,CAAC,OAAO,QAAQ,MAAM;AAAA,EACzC,MAAM,UAAU,OAAO,KAAK;AAAA,EAC5B,MAAM,SAAS,QAAQ;AAAA,EACvB,MAAM,YAAY,UAAU,OAAO,SAAS;AAAA,EAC5C,IAAI,WAAW;AAAA,IACX,MAAM,IAAI,MAAM,oEAAoE;AAAA,EACxF;AAAA,EACA,MAAM,MAAM,UAAU,OAAO,KAAK,KAAK;AAAA,QAC/B,KAAK,GAAG;AAAA,MACR,MAAM,WAAW,OAAO,KAAK,IAAI;AAAA,MACjC,MAAM,QAAQ,KAAK,SAAS;AAAA,MAC5B,IAAI,MAAM;AAAA,QACN,WAAW,OAAO,MAAM;AAAA,UACpB,IAAI,EAAE,OAAO,WAAW;AAAA,YACpB,MAAM,IAAI,MAAM,sBAAsB,MAAM;AAAA,UAChD;AAAA,UACA,IAAI,CAAC,KAAK;AAAA,YACN;AAAA,UAEJ,MAAM,OAAO,QACP,IAAI,MAAM;AAAA,YACR,MAAM;AAAA,YACN,WAAW,SAAS;AAAA,UACxB,CAAC,IACC,SAAS;AAAA,QACnB;AAAA,MACJ,EACK;AAAA,QACD,WAAW,OAAO,UAAU;AAAA,UAExB,MAAM,OAAO,QACP,IAAI,MAAM;AAAA,YACR,MAAM;AAAA,YACN,WAAW,SAAS;AAAA,UACxB,CAAC,IACC,SAAS;AAAA,QACnB;AAAA;AAAA,MAEJ,WAAW,MAAM,SAAS,KAAK;AAAA,MAC/B,OAAO;AAAA;AAAA,IAEX,QAAQ,CAAC;AAAA,EACb,CAAC;AAAA,EACD,OAAO,MAAM,QAAQ,GAAG;AAAA;AAErB,SAAS,QAAQ,CAAC,OAAO,QAAQ,MAAM;AAAA,EAC1C,MAAM,MAAM,UAAU,OAAO,KAAK,KAAK;AAAA,QAC/B,KAAK,GAAG;AAAA,MACR,MAAM,WAAW,OAAO,KAAK,IAAI;AAAA,MACjC,MAAM,QAAQ,KAAK,SAAS;AAAA,MAC5B,IAAI,MAAM;AAAA,QACN,WAAW,OAAO,MAAM;AAAA,UACpB,IAAI,EAAE,OAAO,QAAQ;AAAA,YACjB,MAAM,IAAI,MAAM,sBAAsB,MAAM;AAAA,UAChD;AAAA,UACA,IAAI,CAAC,KAAK;AAAA,YACN;AAAA,UAEJ,MAAM,OAAO,IAAI,MAAM;AAAA,YACnB,MAAM;AAAA,YACN,WAAW,SAAS;AAAA,UACxB,CAAC;AAAA,QACL;AAAA,MACJ,EACK;AAAA,QACD,WAAW,OAAO,UAAU;AAAA,UAExB,MAAM,OAAO,IAAI,MAAM;AAAA,YACnB,MAAM;AAAA,YACN,WAAW,SAAS;AAAA,UACxB,CAAC;AAAA,QACL;AAAA;AAAA,MAEJ,WAAW,MAAM,SAAS,KAAK;AAAA,MAC/B,OAAO;AAAA;AAAA,EAEf,CAAC;AAAA,EACD,OAAO,MAAM,QAAQ,GAAG;AAAA;AAGrB,SAAS,OAAO,CAAC,GAAG,aAAa,GAAG;AAAA,EACvC,IAAI,EAAE,YAAY;AAAA,IACd,OAAO;AAAA,EACX,SAAS,IAAI,WAAY,IAAI,EAAE,OAAO,QAAQ,KAAK;AAAA,IAC/C,IAAI,EAAE,OAAO,IAAI,aAAa,MAAM;AAAA,MAChC,OAAO;AAAA,IACX;AAAA,EACJ;AAAA,EACA,OAAO;AAAA;AAIJ,SAAS,iBAAiB,CAAC,GAAG,aAAa,GAAG;AAAA,EACjD,IAAI,EAAE,YAAY;AAAA,IACd,OAAO;AAAA,EACX,SAAS,IAAI,WAAY,IAAI,EAAE,OAAO,QAAQ,KAAK;AAAA,IAC/C,IAAI,EAAE,OAAO,IAAI,aAAa,OAAO;AAAA,MACjC,OAAO;AAAA,IACX;AAAA,EACJ;AAAA,EACA,OAAO;AAAA;AAEJ,SAAS,YAAY,CAAC,MAAM,QAAQ;AAAA,EACvC,OAAO,OAAO,IAAI,CAAC,QAAQ;AAAA,IACvB,IAAI;AAAA,KACH,MAAK,KAAK,SAAS,IAAG,OAAO,CAAC;AAAA,IAC/B,IAAI,KAAK,QAAQ,IAAI;AAAA,IACrB,OAAO;AAAA,GACV;AAAA;AAEE,SAAS,aAAa,CAAC,SAAS;AAAA,EACnC,OAAO,OAAO,YAAY,WAAW,UAAU,SAAS;AAAA;AAErD,SAAS,aAAa,CAAC,KAAK,KAAK,SAAQ;AAAA,EAC5C,MAAM,UAAU,IAAI,UACd,IAAI,UACH,cAAc,IAAI,MAAM,KAAK,KAAK,QAAQ,GAAG,CAAC,KAC7C,cAAc,KAAK,QAAQ,GAAG,CAAC,KAC/B,cAAc,QAAO,cAAc,GAAG,CAAC,KACvC,cAAc,QAAO,cAAc,GAAG,CAAC,KACvC;AAAA,EACR,QAAQ,MAAM,OAAO,UAAU,WAAW,OAAO,WAAW,SAAS;AAAA,EACrE,KAAK,SAAS,KAAK,OAAO,CAAC;AAAA,EAC3B,KAAK,UAAU;AAAA,EACf,IAAI,KAAK,aAAa;AAAA,IAClB,KAAK,QAAQ;AAAA,EACjB;AAAA,EACA,OAAO;AAAA;AAEJ,SAAS,gBAAgB,CAAC,OAAO;AAAA,EACpC,IAAI,iBAAiB;AAAA,IACjB,OAAO;AAAA,EACX,IAAI,iBAAiB;AAAA,IACjB,OAAO;AAAA,EAEX,IAAI,iBAAiB;AAAA,IACjB,OAAO;AAAA,EACX,OAAO;AAAA;AAEJ,SAAS,mBAAmB,CAAC,OAAO;AAAA,EACvC,IAAI,MAAM,QAAQ,KAAK;AAAA,IACnB,OAAO;AAAA,EACX,IAAI,OAAO,UAAU;AAAA,IACjB,OAAO;AAAA,EACX,OAAO;AAAA;AAEJ,SAAS,UAAU,CAAC,MAAM;AAAA,EAC7B,MAAM,IAAI,OAAO;AAAA,EACjB,QAAQ;AAAA,SACC,UAAU;AAAA,MACX,OAAO,OAAO,MAAM,IAAI,IAAI,QAAQ;AAAA,IACxC;AAAA,SACK,UAAU;AAAA,MACX,IAAI,SAAS,MAAM;AAAA,QACf,OAAO;AAAA,MACX;AAAA,MACA,IAAI,MAAM,QAAQ,IAAI,GAAG;AAAA,QACrB,OAAO;AAAA,MACX;AAAA,MACA,MAAM,MAAM;AAAA,MACZ,IAAI,OAAO,OAAO,eAAe,GAAG,MAAM,OAAO,aAAa,iBAAiB,OAAO,IAAI,aAAa;AAAA,QACnG,OAAO,IAAI,YAAY;AAAA,MAC3B;AAAA,IACJ;AAAA;AAAA,EAEJ,OAAO;AAAA;AAEJ,SAAS,KAAK,IAAI,MAAM;AAAA,EAC3B,OAAO,KAAK,OAAO,QAAQ;AAAA,EAC3B,IAAI,OAAO,QAAQ,UAAU;AAAA,IACzB,OAAO;AAAA,MACH,SAAS;AAAA,MACT,MAAM;AAAA,MACN;AAAA,MACA;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,OAAO,KAAK,IAAI;AAAA;AAEb,SAAS,SAAS,CAAC,KAAK;AAAA,EAC3B,OAAO,OAAO,QAAQ,GAAG,EACpB,OAAO,EAAE,GAAG,OAAO;AAAA,IAEpB,OAAO,OAAO,MAAM,OAAO,SAAS,GAAG,EAAE,CAAC;AAAA,GAC7C,EACI,IAAI,CAAC,OAAO,GAAG,EAAE;AAAA;AAGnB,SAAS,kBAAkB,CAAC,QAAQ;AAAA,EACvC,MAAM,eAAe,KAAK,MAAM;AAAA,EAChC,MAAM,QAAQ,IAAI,WAAW,aAAa,MAAM;AAAA,EAChD,SAAS,IAAI,EAAG,IAAI,aAAa,QAAQ,KAAK;AAAA,IAC1C,MAAM,KAAK,aAAa,WAAW,CAAC;AAAA,EACxC;AAAA,EACA,OAAO;AAAA;AAEJ,SAAS,kBAAkB,CAAC,OAAO;AAAA,EACtC,IAAI,eAAe;AAAA,EACnB,SAAS,IAAI,EAAG,IAAI,MAAM,QAAQ,KAAK;AAAA,IACnC,gBAAgB,OAAO,aAAa,MAAM,EAAE;AAAA,EAChD;AAAA,EACA,OAAO,KAAK,YAAY;AAAA;AAErB,SAAS,qBAAqB,CAAC,WAAW;AAAA,EAC7C,MAAM,SAAS,UAAU,QAAQ,MAAM,GAAG,EAAE,QAAQ,MAAM,GAAG;AAAA,EAC7D,MAAM,UAAU,IAAI,QAAQ,IAAK,OAAO,SAAS,KAAM,CAAC;AAAA,EACxD,OAAO,mBAAmB,SAAS,OAAO;AAAA;AAEvC,SAAS,qBAAqB,CAAC,OAAO;AAAA,EACzC,OAAO,mBAAmB,KAAK,EAAE,QAAQ,OAAO,GAAG,EAAE,QAAQ,OAAO,GAAG,EAAE,QAAQ,MAAM,EAAE;AAAA;AAEtF,SAAS,eAAe,CAAC,KAAK;AAAA,EACjC,MAAM,WAAW,IAAI,QAAQ,OAAO,EAAE;AAAA,EACtC,IAAI,SAAS,SAAS,MAAM,GAAG;AAAA,IAC3B,MAAM,IAAI,MAAM,2BAA2B;AAAA,EAC/C;AAAA,EACA,MAAM,QAAQ,IAAI,WAAW,SAAS,SAAS,CAAC;AAAA,EAChD,SAAS,IAAI,EAAG,IAAI,SAAS,QAAQ,KAAK,GAAG;AAAA,IACzC,MAAM,IAAI,KAAK,OAAO,SAAS,SAAS,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE;AAAA,EAC/D;AAAA,EACA,OAAO;AAAA;AAEJ,SAAS,eAAe,CAAC,OAAO;AAAA,EACnC,OAAO,MAAM,KAAK,KAAK,EAClB,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAC1C,KAAK,EAAE;AAAA;AAAA;AAGT,MAAM,MAAM;AAAA,EACf,WAAW,IAAI,OAAO;AAC1B;AAAA,IAvmBM,YAkFO,mBAIA,YA0DA,gBAAgB,CAAC,SAAS;AAAA,EACnC,MAAM,IAAI,OAAO;AAAA,EACjB,QAAQ;AAAA,SACC;AAAA,MACD,OAAO;AAAA,SACN;AAAA,MACD,OAAO;AAAA,SACN;AAAA,MACD,OAAO,OAAO,MAAM,IAAI,IAAI,QAAQ;AAAA,SACnC;AAAA,MACD,OAAO;AAAA,SACN;AAAA,MACD,OAAO;AAAA,SACN;AAAA,MACD,OAAO;AAAA,SACN;AAAA,MACD,OAAO;AAAA,SACN;AAAA,MACD,IAAI,MAAM,QAAQ,IAAI,GAAG;AAAA,QACrB,OAAO;AAAA,MACX;AAAA,MACA,IAAI,SAAS,MAAM;AAAA,QACf,OAAO;AAAA,MACX;AAAA,MACA,IAAI,KAAK,QAAQ,OAAO,KAAK,SAAS,cAAc,KAAK,SAAS,OAAO,KAAK,UAAU,YAAY;AAAA,QAChG,OAAO;AAAA,MACX;AAAA,MACA,IAAI,OAAO,QAAQ,eAAe,gBAAgB,KAAK;AAAA,QACnD,OAAO;AAAA,MACX;AAAA,MACA,IAAI,OAAO,QAAQ,eAAe,gBAAgB,KAAK;AAAA,QACnD,OAAO;AAAA,MACX;AAAA,MACA,IAAI,OAAO,SAAS,eAAe,gBAAgB,MAAM;AAAA,QACrD,OAAO;AAAA,MACX;AAAA,MAEA,IAAI,OAAO,SAAS,eAAe,gBAAgB,MAAM;AAAA,QACrD,OAAO;AAAA,MACX;AAAA,MACA,OAAO;AAAA;AAAA,MAEP,MAAM,IAAI,MAAM,sBAAsB,GAAG;AAAA;AAAA,GAGxC,kBACA,gBA+EA,sBAOA;AAAA;AAAA,EA9Ub;AAAA,EA0DM,6BAA4B,OAAO,YAAY;AAAA,EAkFxC,oBAAqB,uBAAuB,QAAQ,MAAM,oBAAoB,IAAI,UAAU;AAAA,EAI5F,6BAA4B,OAAO,MAAM;AAAA,IAGlD,IAAI,aAAa,SAAS;AAAA,MACtB,OAAO;AAAA,IACX;AAAA,IAEA,IAAI,OAAO,cAAc,eAAe,WAAW,WAAW,SAAS,YAAY,GAAG;AAAA,MAClF,OAAO;AAAA,IACX;AAAA,IACA,IAAI;AAAA,MACA,MAAM,IAAI;AAAA,MACV,IAAI,EAAE,EAAE;AAAA,MACR,OAAO;AAAA,MAEX,OAAO,GAAG;AAAA,MACN,OAAO;AAAA;AAAA,GAEd;AAAA,EAqFY,mCAAkC,IAAI,IAAI,CAAC,UAAU,UAAU,QAAQ,CAAC;AAAA,EACxE,iCAAgC,IAAI,IAAI;AAAA,IACjD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAC;AAAA,EAwEY,uBAAuB;AAAA,IAChC,SAAS,CAAC,OAAO,kBAAkB,OAAO,gBAAgB;AAAA,IAC1D,OAAO,CAAC,aAAa,UAAU;AAAA,IAC/B,QAAQ,CAAC,GAAG,UAAU;AAAA,IACtB,SAAS,CAAC,0CAAwB,uCAAqB;AAAA,IACvD,SAAS,CAAC,CAAC,OAAO,WAAW,OAAO,SAAS;AAAA,EACjD;AAAA,EACa,uBAAuB;AAAA,IAChC,OAAO,iBAAgB,OAAO,sBAAsB,mBAAkB,OAAO,qBAAqB,CAAC;AAAA,IACnG,QAAQ,iBAAgB,OAAO,CAAC,mBAAkB,OAAO,sBAAsB,CAAC;AAAA,EACpF;AAAA;;;AC7TO,SAAS,YAAY,CAAC,OAAO,SAAS,CAAC,WAAU,OAAM,SAAS;AAAA,EACnE,MAAM,cAAc,CAAC;AAAA,EACrB,MAAM,aAAa,CAAC;AAAA,EACpB,WAAW,OAAO,MAAM,QAAQ;AAAA,IAC5B,IAAI,IAAI,KAAK,SAAS,GAAG;AAAA,MACrB,YAAY,IAAI,KAAK,MAAM,YAAY,IAAI,KAAK,OAAO,CAAC;AAAA,MACxD,YAAY,IAAI,KAAK,IAAI,KAAK,OAAO,GAAG,CAAC;AAAA,IAC7C,EACK;AAAA,MACD,WAAW,KAAK,OAAO,GAAG,CAAC;AAAA;AAAA,EAEnC;AAAA,EACA,OAAO,EAAE,YAAY,YAAY;AAAA;AAE9B,SAAS,WAAW,CAAC,OAAO,SAAS,CAAC,WAAU,OAAM,SAAS;AAAA,EAClE,MAAM,cAAc,EAAE,SAAS,CAAC,EAAE;AAAA,EAClC,MAAM,eAAe,CAAC,QAAO,OAAO,CAAC,MAAM;AAAA,IACvC,WAAW,UAAS,OAAM,QAAQ;AAAA,MAC9B,IAAI,OAAM,SAAS,mBAAmB,OAAM,OAAO,QAAQ;AAAA,QACvD,OAAM,OAAO,IAAI,CAAC,WAAW,aAAa,EAAE,OAAO,GAAG,CAAC,GAAG,MAAM,GAAG,OAAM,IAAI,CAAC,CAAC;AAAA,MACnF,EACK,SAAI,OAAM,SAAS,eAAe;AAAA,QACnC,aAAa,EAAE,QAAQ,OAAM,OAAO,GAAG,CAAC,GAAG,MAAM,GAAG,OAAM,IAAI,CAAC;AAAA,MACnE,EACK,SAAI,OAAM,SAAS,mBAAmB;AAAA,QACvC,aAAa,EAAE,QAAQ,OAAM,OAAO,GAAG,CAAC,GAAG,MAAM,GAAG,OAAM,IAAI,CAAC;AAAA,MACnE,EACK;AAAA,QACD,MAAM,WAAW,CAAC,GAAG,MAAM,GAAG,OAAM,IAAI;AAAA,QACxC,IAAI,SAAS,WAAW,GAAG;AAAA,UACvB,YAAY,QAAQ,KAAK,OAAO,MAAK,CAAC;AAAA,QAC1C,EACK;AAAA,UACD,IAAI,OAAO;AAAA,UACX,IAAI,IAAI;AAAA,UACR,OAAO,IAAI,SAAS,QAAQ;AAAA,YACxB,MAAM,KAAK,SAAS;AAAA,YACpB,MAAM,WAAW,MAAM,SAAS,SAAS;AAAA,YACzC,IAAI,CAAC,UAAU;AAAA,cACX,KAAK,MAAM,KAAK,OAAO,EAAE,SAAS,CAAC,EAAE;AAAA,YACzC,EACK;AAAA,cACD,KAAK,MAAM,KAAK,OAAO,EAAE,SAAS,CAAC,EAAE;AAAA,cACrC,KAAK,IAAI,QAAQ,KAAK,OAAO,MAAK,CAAC;AAAA;AAAA,YAEvC,OAAO,KAAK;AAAA,YACZ;AAAA,UACJ;AAAA;AAAA;AAAA,IAGZ;AAAA;AAAA,EAEJ,aAAa,KAAK;AAAA,EAClB,OAAO;AAAA;AAEJ,SAAS,YAAY,CAAC,OAAO,SAAS,CAAC,WAAU,OAAM,SAAS;AAAA,EACnE,MAAM,SAAS,EAAE,QAAQ,CAAC,EAAE;AAAA,EAC5B,MAAM,eAAe,CAAC,QAAO,OAAO,CAAC,MAAM;AAAA,IACvC,IAAI,KAAI;AAAA,IACR,WAAW,UAAS,OAAM,QAAQ;AAAA,MAC9B,IAAI,OAAM,SAAS,mBAAmB,OAAM,OAAO,QAAQ;AAAA,QAEvD,OAAM,OAAO,IAAI,CAAC,WAAW,aAAa,EAAE,OAAO,GAAG,CAAC,GAAG,MAAM,GAAG,OAAM,IAAI,CAAC,CAAC;AAAA,MACnF,EACK,SAAI,OAAM,SAAS,eAAe;AAAA,QACnC,aAAa,EAAE,QAAQ,OAAM,OAAO,GAAG,CAAC,GAAG,MAAM,GAAG,OAAM,IAAI,CAAC;AAAA,MACnE,EACK,SAAI,OAAM,SAAS,mBAAmB;AAAA,QACvC,aAAa,EAAE,QAAQ,OAAM,OAAO,GAAG,CAAC,GAAG,MAAM,GAAG,OAAM,IAAI,CAAC;AAAA,MACnE,EACK;AAAA,QACD,MAAM,WAAW,CAAC,GAAG,MAAM,GAAG,OAAM,IAAI;AAAA,QACxC,IAAI,SAAS,WAAW,GAAG;AAAA,UACvB,OAAO,OAAO,KAAK,OAAO,MAAK,CAAC;AAAA,UAChC;AAAA,QACJ;AAAA,QACA,IAAI,OAAO;AAAA,QACX,IAAI,IAAI;AAAA,QACR,OAAO,IAAI,SAAS,QAAQ;AAAA,UACxB,MAAM,KAAK,SAAS;AAAA,UACpB,MAAM,WAAW,MAAM,SAAS,SAAS;AAAA,UACzC,IAAI,OAAO,OAAO,UAAU;AAAA,YACxB,KAAK,eAAe,KAAK,aAAa,CAAC;AAAA,aACtC,MAAK,KAAK,YAAY,QAAQ,IAAG,MAAM,EAAE,QAAQ,CAAC,EAAE;AAAA,YACrD,OAAO,KAAK,WAAW;AAAA,UAC3B,EACK;AAAA,YACD,KAAK,UAAU,KAAK,QAAQ,CAAC;AAAA,aAC5B,KAAK,KAAK,OAAO,QAAQ,GAAG,MAAM,EAAE,QAAQ,CAAC,EAAE;AAAA,YAChD,OAAO,KAAK,MAAM;AAAA;AAAA,UAEtB,IAAI,UAAU;AAAA,YACV,KAAK,OAAO,KAAK,OAAO,MAAK,CAAC;AAAA,UAClC;AAAA,UACA;AAAA,QACJ;AAAA;AAAA,IAER;AAAA;AAAA,EAEJ,aAAa,KAAK;AAAA,EAClB,OAAO;AAAA;AAkCJ,SAAS,SAAS,CAAC,OAAO;AAAA,EAC7B,MAAM,OAAO,CAAC;AAAA,EACd,MAAM,OAAO,MAAM,IAAI,CAAC,QAAS,OAAO,QAAQ,WAAW,IAAI,MAAM,GAAI;AAAA,EACzE,WAAW,OAAO,MAAM;AAAA,IACpB,IAAI,OAAO,QAAQ;AAAA,MACf,KAAK,KAAK,IAAI,MAAM;AAAA,IACnB,SAAI,OAAO,QAAQ;AAAA,MACpB,KAAK,KAAK,IAAI,KAAK,UAAU,OAAO,GAAG,CAAC,IAAI;AAAA,IAC3C,SAAI,SAAS,KAAK,GAAG;AAAA,MACtB,KAAK,KAAK,IAAI,KAAK,UAAU,GAAG,IAAI;AAAA,IACnC;AAAA,MACD,IAAI,KAAK;AAAA,QACL,KAAK,KAAK,GAAG;AAAA,MACjB,KAAK,KAAK,GAAG;AAAA;AAAA,EAErB;AAAA,EACA,OAAO,KAAK,KAAK,EAAE;AAAA;AAEhB,SAAS,aAAa,CAAC,OAAO;AAAA,EACjC,MAAM,QAAQ,CAAC;AAAA,EAEf,MAAM,SAAS,CAAC,GAAG,MAAM,MAAM,EAAE,KAAK,CAAC,GAAG,OAAO,EAAE,QAAQ,CAAC,GAAG,UAAU,EAAE,QAAQ,CAAC,GAAG,MAAM;AAAA,EAE7F,WAAW,UAAS,QAAQ;AAAA,IACxB,MAAM,KAAK,UAAI,OAAM,SAAS;AAAA,IAC9B,IAAI,OAAM,MAAM;AAAA,MACZ,MAAM,KAAK,eAAS,UAAU,OAAM,IAAI,GAAG;AAAA,EACnD;AAAA,EAEA,OAAO,MAAM,KAAK;AAAA,CAAI;AAAA;AAAA,IArLpB,cAAc,CAAC,MAAM,QAAQ;AAAA,EAC/B,KAAK,OAAO;AAAA,EACZ,OAAO,eAAe,MAAM,QAAQ;AAAA,IAChC,OAAO,KAAK;AAAA,IACZ,YAAY;AAAA,EAChB,CAAC;AAAA,EACD,OAAO,eAAe,MAAM,UAAU;AAAA,IAClC,OAAO;AAAA,IACP,YAAY;AAAA,EAChB,CAAC;AAAA,EACD,KAAK,UAAU,KAAK,UAAU,KAAU,uBAAuB,CAAC;AAAA,EAChE,OAAO,eAAe,MAAM,YAAY;AAAA,IACpC,OAAO,MAAM,KAAK;AAAA,IAClB,YAAY;AAAA,EAChB,CAAC;AAAA,GAEQ,WACA;AAAA;AAAA,EAnBb;AAAA,EACA;AAAA,EAiBa,YAAY,aAAa,aAAa,WAAW;AAAA,EACjD,gBAAgB,aAAa,aAAa,aAAa,EAAE,QAAQ,MAAM,CAAC;AAAA;;;IChBxE,SAAS,CAAC,SAAS,CAAC,QAAQ,OAAO,MAAM,YAAY;AAAA,EAC9D,MAAM,MAAM,OAAO,KAAK,MAAM,OAAO,MAAM,IAAI,EAAE,OAAO,MAAM;AAAA,EAC9D,MAAM,SAAS,OAAO,KAAK,IAAI,EAAE,OAAO,QAAQ,CAAC,EAAE,GAAG,GAAG;AAAA,EACzD,IAAI,kBAAkB,SAAS;AAAA,IAC3B,MAAM,IAAS;AAAA,EACnB;AAAA,EACA,IAAI,OAAO,OAAO,QAAQ;AAAA,IACtB,MAAM,IAAI,KAAK,SAAS,OAAO,MAAM,OAAO,OAAO,IAAI,CAAC,QAAa,cAAc,KAAK,KAAU,OAAO,CAAC,CAAC,CAAC;AAAA,IACvG,kBAAkB,GAAG,SAAS,MAAM;AAAA,IACzC,MAAM;AAAA,EACV;AAAA,EACA,OAAO,OAAO;AAAA,GAEL,OACA,cAAc,CAAC,SAAS,OAAO,QAAQ,OAAO,MAAM,WAAW;AAAA,EACxE,MAAM,MAAM,OAAO,KAAK,MAAM,OAAO,KAAK,IAAI,EAAE,OAAO,KAAK;AAAA,EAC5D,IAAI,SAAS,OAAO,KAAK,IAAI,EAAE,OAAO,QAAQ,CAAC,EAAE,GAAG,GAAG;AAAA,EACvD,IAAI,kBAAkB;AAAA,IAClB,SAAS,MAAM;AAAA,EACnB,IAAI,OAAO,OAAO,QAAQ;AAAA,IACtB,MAAM,IAAI,KAAK,QAAQ,OAAO,MAAM,OAAO,OAAO,IAAI,CAAC,QAAa,cAAc,KAAK,KAAU,OAAO,CAAC,CAAC,CAAC;AAAA,IACtG,kBAAkB,GAAG,QAAQ,MAAM;AAAA,IACxC,MAAM;AAAA,EACV;AAAA,EACA,OAAO,OAAO;AAAA,GAEL,YACA,aAAa,CAAC,SAAS,CAAC,QAAQ,OAAO,SAAS;AAAA,EACzD,MAAM,MAAM,OAAO,KAAK,MAAM,OAAO,MAAM,IAAI,EAAE,OAAO,MAAM;AAAA,EAC9D,MAAM,SAAS,OAAO,KAAK,IAAI,EAAE,OAAO,QAAQ,CAAC,EAAE,GAAG,GAAG;AAAA,EACzD,IAAI,kBAAkB,SAAS;AAAA,IAC3B,MAAM,IAAS;AAAA,EACnB;AAAA,EACA,OAAO,OAAO,OAAO,SACf;AAAA,IACE,SAAS;AAAA,IACT,OAAO,KAAK,QAAe,WAAW,OAAO,OAAO,IAAI,CAAC,QAAa,cAAc,KAAK,KAAU,OAAO,CAAC,CAAC,CAAC;AAAA,EACjH,IACE,EAAE,SAAS,MAAM,MAAM,OAAO,MAAM;AAAA,GAEjC,WACA,kBAAkB,CAAC,SAAS,OAAO,QAAQ,OAAO,SAAS;AAAA,EACpE,MAAM,MAAM,OAAO,KAAK,MAAM,OAAO,KAAK,IAAI,EAAE,OAAO,KAAK;AAAA,EAC5D,IAAI,SAAS,OAAO,KAAK,IAAI,EAAE,OAAO,QAAQ,CAAC,EAAE,GAAG,GAAG;AAAA,EACvD,IAAI,kBAAkB;AAAA,IAClB,SAAS,MAAM;AAAA,EACnB,OAAO,OAAO,OAAO,SACf;AAAA,IACE,SAAS;AAAA,IACT,OAAO,IAAI,KAAK,OAAO,OAAO,IAAI,CAAC,QAAa,cAAc,KAAK,KAAU,OAAO,CAAC,CAAC,CAAC;AAAA,EAC3F,IACE,EAAE,SAAS,MAAM,MAAM,OAAO,MAAM;AAAA,GAEjC,gBACA,UAAU,CAAC,SAAS,CAAC,QAAQ,OAAO,SAAS;AAAA,EACtD,MAAM,MAAM,OAAO,KAAK,MAAM,WAAW,WAAW,IAAI,EAAE,WAAW,WAAW;AAAA,EAChF,OAAO,OAAO,IAAI,EAAE,QAAQ,OAAO,GAAG;AAAA,GAE7B,QACA,UAAU,CAAC,SAAS,CAAC,QAAQ,OAAO,SAAS;AAAA,EACtD,OAAO,OAAO,IAAI,EAAE,QAAQ,OAAO,IAAI;AAAA,GAE9B,QACA,eAAe,CAAC,SAAS,OAAO,QAAQ,OAAO,SAAS;AAAA,EACjE,MAAM,MAAM,OAAO,KAAK,MAAM,WAAW,WAAW,IAAI,EAAE,WAAW,WAAW;AAAA,EAChF,OAAO,YAAY,IAAI,EAAE,QAAQ,OAAO,GAAG;AAAA,GAElC,aACA,eAAe,CAAC,SAAS,OAAO,QAAQ,OAAO,SAAS;AAAA,EACjE,OAAO,YAAY,IAAI,EAAE,QAAQ,OAAO,IAAI;AAAA,GAEnC,aACA,cAAc,CAAC,SAAS,CAAC,QAAQ,OAAO,SAAS;AAAA,EAC1D,MAAM,MAAM,OAAO,KAAK,MAAM,WAAW,WAAW,IAAI,EAAE,WAAW,WAAW;AAAA,EAChF,OAAO,WAAW,IAAI,EAAE,QAAQ,OAAO,GAAG;AAAA,GAEjC,YACA,cAAc,CAAC,SAAS,CAAC,QAAQ,OAAO,SAAS;AAAA,EAC1D,OAAO,WAAW,IAAI,EAAE,QAAQ,OAAO,IAAI;AAAA,GAElC,YACA,mBAAmB,CAAC,SAAS,OAAO,QAAQ,OAAO,SAAS;AAAA,EACrE,MAAM,MAAM,OAAO,KAAK,MAAM,WAAW,WAAW,IAAI,EAAE,WAAW,WAAW;AAAA,EAChF,OAAO,gBAAgB,IAAI,EAAE,QAAQ,OAAO,GAAG;AAAA,GAEtC,iBACA,mBAAmB,CAAC,SAAS,OAAO,QAAQ,OAAO,SAAS;AAAA,EACrE,OAAO,gBAAgB,IAAI,EAAE,QAAQ,OAAO,IAAI;AAAA,GAEvC;AAAA;AAAA,EA5Fb;AAAA,EACA;AAAA,EACA;AAAA,EAca,wBAAuB,OAAc,aAAa;AAAA,EAalD,6BAA4B,YAAmB,aAAa;AAAA,EAc5D,4BAA2B,WAAkB,aAAa;AAAA,EAa1D,iCAAgC,gBAAuB,aAAa;AAAA,EAKpE,yBAAwB,QAAe,aAAa;AAAA,EAIpD,yBAAwB,QAAe,aAAa;AAAA,EAKpD,8BAA6B,aAAoB,aAAa;AAAA,EAI9D,8BAA6B,aAAoB,aAAa;AAAA,EAK9D,6BAA4B,YAAmB,aAAa;AAAA,EAI5D,6BAA4B,YAAmB,aAAa;AAAA,EAK5D,kCAAiC,iBAAwB,aAAa;AAAA,EAItE,kCAAiC,iBAAwB,aAAa;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnD5E,SAAS,KAAK,GAAG;AAAA,EACpB,OAAO,IAAI,OAAO,QAAQ,GAAG;AAAA;AAwBjC,SAAS,UAAU,CAAC,MAAM;AAAA,EACtB,MAAM,OAAO;AAAA,EACb,MAAM,QAAQ,OAAO,KAAK,cAAc,WAClC,KAAK,cAAc,KACf,GAAG,SACH,KAAK,cAAc,IACf,GAAG,kBACH,GAAG,uBAAuB,KAAK,eACvC,GAAG;AAAA,EACT,OAAO;AAAA;AAEJ,SAAS,IAAI,CAAC,MAAM;AAAA,EACvB,OAAO,IAAI,OAAO,IAAI,WAAW,IAAI,IAAI;AAAA;AAGtC,SAAS,QAAQ,CAAC,MAAM;AAAA,EAC3B,MAAM,QAAO,WAAW,EAAE,WAAW,KAAK,UAAU,CAAC;AAAA,EACrD,MAAM,OAAO,CAAC,GAAG;AAAA,EACjB,IAAI,KAAK;AAAA,IACL,KAAK,KAAK,EAAE;AAAA,EAEhB,IAAI,KAAK;AAAA,IACL,KAAK,KAAK,mCAAmC;AAAA,EACjD,MAAM,YAAY,GAAG,WAAU,KAAK,KAAK,GAAG;AAAA,EAC5C,OAAO,IAAI,OAAO,IAAI,iBAAiB,aAAa;AAAA;AAsBxD,SAAS,WAAW,CAAC,YAAY,SAAS;AAAA,EACtC,OAAO,IAAI,OAAO,kBAAkB,cAAc,UAAU;AAAA;AAGhE,SAAS,cAAc,CAAC,QAAQ;AAAA,EAC5B,OAAO,IAAI,OAAO,kBAAkB,UAAU;AAAA;AAAA,IA/GrC,MACA,OACA,MACA,KACA,OACA,QAEA,UAEA,kBAEA,MAIA,OAAO,CAAC,YAAY;AAAA,EAC7B,IAAI,CAAC;AAAA,IACD,OAAO;AAAA,EACX,OAAO,IAAI,OAAO,mCAAmC,gEAAgE;AAAA,GAE5G,OACA,OACA,OAEA,OAEA,YAEA,cAEA,cACA,UACA,cAEP,SAAS,wDAIF,MACA,MACA,MAAM,CAAC,cAAc;AAAA,EAC9B,MAAM,eAAoB,YAAY,aAAa,GAAG;AAAA,EACtD,OAAO,IAAI,OAAO,kBAAkB,+CAA+C,8BAA8B;AAAA,GAExG,QACA,QAEA,QACA,WAGA,UACA,QACA,cAGA,MAEP,aAAa,uNACN,MA2BA,SAAS,CAAC,WAAW;AAAA,EAC9B,MAAM,QAAQ,SAAS,YAAY,QAAQ,WAAW,KAAK,QAAQ,WAAW,QAAQ;AAAA,EACtF,OAAO,IAAI,OAAO,IAAI,QAAQ;AAAA,GAErB,QACA,SACA,QACA,SACP,OAEA,YAGO,WAEA,WAEA,KAWA,SACA,YACA,eAEA,UACA,aACA,gBAEA,YACA,eACA,kBAEA,YACA,eACA,kBAEA,YACA,eACA;AAAA;AAAA,EA1Ib;AAAA,EAMa,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,SAAS;AAAA,EAET,WAAW;AAAA,EAEX,mBAAmB;AAAA,EAEnB,OAAO;AAAA,EASP,wBAAsB,KAAK,CAAC;AAAA,EAC5B,wBAAsB,KAAK,CAAC;AAAA,EAC5B,wBAAsB,KAAK,CAAC;AAAA,EAE5B,QAAQ;AAAA,EAER,aAAa;AAAA,EAEb,eAAe;AAAA,EAEf,eAAe;AAAA,EACf,WAAW;AAAA,EACX,eAAe;AAAA,EAMf,OAAO;AAAA,EACP,OAAO;AAAA,EAKP,SAAS;AAAA,EACT,SAAS;AAAA,EAET,SAAS;AAAA,EACT,YAAY;AAAA,EAGZ,WAAW;AAAA,EACX,SAAS;AAAA,EACT,eAAe;AAAA,EAGf,OAAO;AAAA,EAGP,uBAAqB,IAAI,OAAO,IAAI,aAAa;AAAA,EA+BjD,SAAS;AAAA,EACT,UAAU;AAAA,EACV,SAAS;AAAA,EACT,UAAU;AAAA,EACjB,QAAQ;AAAA,EAER,aAAa;AAAA,EAGN,YAAY;AAAA,EAEZ,YAAY;AAAA,EAEZ,MAAM;AAAA,EAWN,UAAU;AAAA,EACV,6BAA2B,YAAY,IAAI,IAAI;AAAA,EAC/C,gCAA8B,eAAe,EAAE;AAAA,EAE/C,WAAW;AAAA,EACX,8BAA4B,YAAY,IAAI,GAAG;AAAA,EAC/C,iCAA+B,eAAe,EAAE;AAAA,EAEhD,aAAa;AAAA,EACb,gCAA8B,YAAY,IAAI,GAAG;AAAA,EACjD,mCAAiC,eAAe,EAAE;AAAA,EAElD,aAAa;AAAA,EACb,gCAA8B,YAAY,IAAI,EAAE;AAAA,EAChD,mCAAiC,eAAe,EAAE;AAAA,EAElD,aAAa;AAAA,EACb,gCAA8B,YAAY,IAAI,IAAI;AAAA,EAClD,mCAAiC,eAAe,EAAE;AAAA;;;AC0Y/D,SAAS,yBAAyB,CAAC,QAAQ,SAAS,UAAU;AAAA,EAC1D,IAAI,OAAO,OAAO,QAAQ;AAAA,IACtB,QAAQ,OAAO,KAAK,GAAQ,aAAa,UAAU,OAAO,MAAM,CAAC;AAAA,EACrE;AAAA;AAAA,IAnhBS,WAMP,kBAKO,mBA4BA,sBA4BA,qBAyBA,uBAmGA,uBAmCA,kBA4BA,kBA4BA,qBA8BA,oBA6BA,oBA6BA,uBA+BA,uBA6BA,gBAiBA,oBAIA,oBAIA,mBAwBA,qBAuBA,mBA+BA,mBAcA,mBAkBA;AAAA;AAAA,EAxjBb;AAAA,EACA;AAAA,EACA;AAAA,EACa,4BAA+B,aAAa,aAAa,CAAC,MAAM,QAAQ;AAAA,IACjF,IAAI;AAAA,IACJ,KAAK,SAAS,KAAK,OAAO,CAAC;AAAA,IAC3B,KAAK,KAAK,MAAM;AAAA,KACf,MAAK,KAAK,MAAM,aAAa,IAAG,WAAW,CAAC;AAAA,GAChD;AAAA,EACK,mBAAmB;AAAA,IACrB,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACZ;AAAA,EACa,oCAAuC,aAAa,qBAAqB,CAAC,MAAM,QAAQ;AAAA,IACjG,UAAU,KAAK,MAAM,GAAG;AAAA,IACxB,MAAM,SAAS,iBAAiB,OAAO,IAAI;AAAA,IAC3C,KAAK,KAAK,SAAS,KAAK,CAAC,UAAS;AAAA,MAC9B,MAAM,MAAM,MAAK,KAAK;AAAA,MACtB,MAAM,QAAQ,IAAI,YAAY,IAAI,UAAU,IAAI,qBAAqB,OAAO;AAAA,MAC5E,IAAI,IAAI,QAAQ,MAAM;AAAA,QAClB,IAAI,IAAI;AAAA,UACJ,IAAI,UAAU,IAAI;AAAA,QAElB;AAAA,cAAI,mBAAmB,IAAI;AAAA,MACnC;AAAA,KACH;AAAA,IACD,KAAK,KAAK,QAAQ,CAAC,YAAY;AAAA,MAC3B,IAAI,IAAI,YAAY,QAAQ,SAAS,IAAI,QAAQ,QAAQ,QAAQ,IAAI,OAAO;AAAA,QACxE;AAAA,MACJ;AAAA,MACA,QAAQ,OAAO,KAAK;AAAA,QAChB;AAAA,QACA,MAAM;AAAA,QACN,SAAS,OAAO,IAAI,UAAU,WAAW,IAAI,MAAM,QAAQ,IAAI,IAAI;AAAA,QACnE,OAAO,QAAQ;AAAA,QACf,WAAW,IAAI;AAAA,QACf;AAAA,QACA,UAAU,CAAC,IAAI;AAAA,MACnB,CAAC;AAAA;AAAA,GAER;AAAA,EACY,uCAA0C,aAAa,wBAAwB,CAAC,MAAM,QAAQ;AAAA,IACvG,UAAU,KAAK,MAAM,GAAG;AAAA,IACxB,MAAM,SAAS,iBAAiB,OAAO,IAAI;AAAA,IAC3C,KAAK,KAAK,SAAS,KAAK,CAAC,UAAS;AAAA,MAC9B,MAAM,MAAM,MAAK,KAAK;AAAA,MACtB,MAAM,QAAQ,IAAI,YAAY,IAAI,UAAU,IAAI,qBAAqB,OAAO;AAAA,MAC5E,IAAI,IAAI,QAAQ,MAAM;AAAA,QAClB,IAAI,IAAI;AAAA,UACJ,IAAI,UAAU,IAAI;AAAA,QAElB;AAAA,cAAI,mBAAmB,IAAI;AAAA,MACnC;AAAA,KACH;AAAA,IACD,KAAK,KAAK,QAAQ,CAAC,YAAY;AAAA,MAC3B,IAAI,IAAI,YAAY,QAAQ,SAAS,IAAI,QAAQ,QAAQ,QAAQ,IAAI,OAAO;AAAA,QACxE;AAAA,MACJ;AAAA,MACA,QAAQ,OAAO,KAAK;AAAA,QAChB;AAAA,QACA,MAAM;AAAA,QACN,SAAS,OAAO,IAAI,UAAU,WAAW,IAAI,MAAM,QAAQ,IAAI,IAAI;AAAA,QACnE,OAAO,QAAQ;AAAA,QACf,WAAW,IAAI;AAAA,QACf;AAAA,QACA,UAAU,CAAC,IAAI;AAAA,MACnB,CAAC;AAAA;AAAA,GAER;AAAA,EACY,sCACM,aAAa,uBAAuB,CAAC,MAAM,QAAQ;AAAA,IAClE,UAAU,KAAK,MAAM,GAAG;AAAA,IACxB,KAAK,KAAK,SAAS,KAAK,CAAC,UAAS;AAAA,MAC9B,IAAI;AAAA,OACH,MAAK,MAAK,KAAK,KAAK,eAAe,IAAG,aAAa,IAAI;AAAA,KAC3D;AAAA,IACD,KAAK,KAAK,QAAQ,CAAC,YAAY;AAAA,MAC3B,IAAI,OAAO,QAAQ,UAAU,OAAO,IAAI;AAAA,QACpC,MAAM,IAAI,MAAM,oDAAoD;AAAA,MACxE,MAAM,aAAa,OAAO,QAAQ,UAAU,WACtC,QAAQ,QAAQ,IAAI,UAAU,OAAO,CAAC,IACjC,mBAAmB,QAAQ,OAAO,IAAI,KAAK,MAAM;AAAA,MAC5D,IAAI;AAAA,QACA;AAAA,MACJ,QAAQ,OAAO,KAAK;AAAA,QAChB,QAAQ,OAAO,QAAQ;AAAA,QACvB,MAAM;AAAA,QACN,SAAS,IAAI;AAAA,QACb,OAAO,QAAQ;AAAA,QACf;AAAA,QACA,UAAU,CAAC,IAAI;AAAA,MACnB,CAAC;AAAA;AAAA,GAER;AAAA,EACY,wCAA2C,aAAa,yBAAyB,CAAC,MAAM,QAAQ;AAAA,IACzG,UAAU,KAAK,MAAM,GAAG;AAAA,IACxB,IAAI,SAAS,IAAI,UAAU;AAAA,IAC3B,MAAM,QAAQ,IAAI,QAAQ,SAAS,KAAK;AAAA,IACxC,MAAM,SAAS,QAAQ,QAAQ;AAAA,IAC/B,OAAO,SAAS,WAAgB,qBAAqB,IAAI;AAAA,IACzD,KAAK,KAAK,SAAS,KAAK,CAAC,UAAS;AAAA,MAC9B,MAAM,MAAM,MAAK,KAAK;AAAA,MACtB,IAAI,SAAS,IAAI;AAAA,MACjB,IAAI,UAAU;AAAA,MACd,IAAI,UAAU;AAAA,MACd,IAAI;AAAA,QACA,IAAI,UAAkB;AAAA,KAC7B;AAAA,IACD,KAAK,KAAK,QAAQ,CAAC,YAAY;AAAA,MAC3B,MAAM,QAAQ,QAAQ;AAAA,MACtB,IAAI,OAAO;AAAA,QACP,IAAI,CAAC,OAAO,UAAU,KAAK,GAAG;AAAA,UAU1B,QAAQ,OAAO,KAAK;AAAA,YAChB,UAAU;AAAA,YACV,QAAQ,IAAI;AAAA,YACZ,MAAM;AAAA,YACN,UAAU;AAAA,YACV;AAAA,YACA;AAAA,UACJ,CAAC;AAAA,UACD;AAAA,QASJ;AAAA,QACA,IAAI,CAAC,OAAO,cAAc,KAAK,GAAG;AAAA,UAC9B,IAAI,QAAQ,GAAG;AAAA,YAEX,QAAQ,OAAO,KAAK;AAAA,cAChB;AAAA,cACA,MAAM;AAAA,cACN,SAAS,OAAO;AAAA,cAChB,MAAM;AAAA,cACN;AAAA,cACA;AAAA,cACA,WAAW;AAAA,cACX,UAAU,CAAC,IAAI;AAAA,YACnB,CAAC;AAAA,UACL,EACK;AAAA,YAED,QAAQ,OAAO,KAAK;AAAA,cAChB;AAAA,cACA,MAAM;AAAA,cACN,SAAS,OAAO;AAAA,cAChB,MAAM;AAAA,cACN;AAAA,cACA;AAAA,cACA,WAAW;AAAA,cACX,UAAU,CAAC,IAAI;AAAA,YACnB,CAAC;AAAA;AAAA,UAEL;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,IAAI,QAAQ,SAAS;AAAA,QACjB,QAAQ,OAAO,KAAK;AAAA,UAChB,QAAQ;AAAA,UACR;AAAA,UACA,MAAM;AAAA,UACN;AAAA,UACA,WAAW;AAAA,UACX;AAAA,UACA,UAAU,CAAC,IAAI;AAAA,QACnB,CAAC;AAAA,MACL;AAAA,MACA,IAAI,QAAQ,SAAS;AAAA,QACjB,QAAQ,OAAO,KAAK;AAAA,UAChB,QAAQ;AAAA,UACR;AAAA,UACA,MAAM;AAAA,UACN;AAAA,UACA,WAAW;AAAA,UACX;AAAA,UACA,UAAU,CAAC,IAAI;AAAA,QACnB,CAAC;AAAA,MACL;AAAA;AAAA,GAEP;AAAA,EACY,wCAA2C,aAAa,yBAAyB,CAAC,MAAM,QAAQ;AAAA,IACzG,UAAU,KAAK,MAAM,GAAG;AAAA,IACxB,OAAO,SAAS,WAAgB,qBAAqB,IAAI;AAAA,IACzD,KAAK,KAAK,SAAS,KAAK,CAAC,UAAS;AAAA,MAC9B,MAAM,MAAM,MAAK,KAAK;AAAA,MACtB,IAAI,SAAS,IAAI;AAAA,MACjB,IAAI,UAAU;AAAA,MACd,IAAI,UAAU;AAAA,KACjB;AAAA,IACD,KAAK,KAAK,QAAQ,CAAC,YAAY;AAAA,MAC3B,MAAM,QAAQ,QAAQ;AAAA,MACtB,IAAI,QAAQ,SAAS;AAAA,QACjB,QAAQ,OAAO,KAAK;AAAA,UAChB,QAAQ;AAAA,UACR;AAAA,UACA,MAAM;AAAA,UACN;AAAA,UACA,WAAW;AAAA,UACX;AAAA,UACA,UAAU,CAAC,IAAI;AAAA,QACnB,CAAC;AAAA,MACL;AAAA,MACA,IAAI,QAAQ,SAAS;AAAA,QACjB,QAAQ,OAAO,KAAK;AAAA,UAChB,QAAQ;AAAA,UACR;AAAA,UACA,MAAM;AAAA,UACN;AAAA,UACA,WAAW;AAAA,UACX;AAAA,UACA,UAAU,CAAC,IAAI;AAAA,QACnB,CAAC;AAAA,MACL;AAAA;AAAA,GAEP;AAAA,EACY,mCAAsC,aAAa,oBAAoB,CAAC,MAAM,QAAQ;AAAA,IAC/F,IAAI;AAAA,IACJ,UAAU,KAAK,MAAM,GAAG;AAAA,KACvB,MAAK,KAAK,KAAK,KAAK,SAAS,IAAG,OAAO,CAAC,YAAY;AAAA,MACjD,MAAM,MAAM,QAAQ;AAAA,MACpB,OAAO,CAAM,QAAQ,GAAG,KAAK,IAAI,SAAS;AAAA;AAAA,IAE9C,KAAK,KAAK,SAAS,KAAK,CAAC,UAAS;AAAA,MAC9B,MAAM,OAAQ,MAAK,KAAK,IAAI,WAAW,OAAO;AAAA,MAC9C,IAAI,IAAI,UAAU;AAAA,QACd,MAAK,KAAK,IAAI,UAAU,IAAI;AAAA,KACnC;AAAA,IACD,KAAK,KAAK,QAAQ,CAAC,YAAY;AAAA,MAC3B,MAAM,QAAQ,QAAQ;AAAA,MACtB,MAAM,OAAO,MAAM;AAAA,MACnB,IAAI,QAAQ,IAAI;AAAA,QACZ;AAAA,MACJ,QAAQ,OAAO,KAAK;AAAA,QAChB,QAAa,iBAAiB,KAAK;AAAA,QACnC,MAAM;AAAA,QACN,SAAS,IAAI;AAAA,QACb,WAAW;AAAA,QACX;AAAA,QACA;AAAA,QACA,UAAU,CAAC,IAAI;AAAA,MACnB,CAAC;AAAA;AAAA,GAER;AAAA,EACY,mCAAsC,aAAa,oBAAoB,CAAC,MAAM,QAAQ;AAAA,IAC/F,IAAI;AAAA,IACJ,UAAU,KAAK,MAAM,GAAG;AAAA,KACvB,MAAK,KAAK,KAAK,KAAK,SAAS,IAAG,OAAO,CAAC,YAAY;AAAA,MACjD,MAAM,MAAM,QAAQ;AAAA,MACpB,OAAO,CAAM,QAAQ,GAAG,KAAK,IAAI,SAAS;AAAA;AAAA,IAE9C,KAAK,KAAK,SAAS,KAAK,CAAC,UAAS;AAAA,MAC9B,MAAM,OAAQ,MAAK,KAAK,IAAI,WAAW,OAAO;AAAA,MAC9C,IAAI,IAAI,UAAU;AAAA,QACd,MAAK,KAAK,IAAI,UAAU,IAAI;AAAA,KACnC;AAAA,IACD,KAAK,KAAK,QAAQ,CAAC,YAAY;AAAA,MAC3B,MAAM,QAAQ,QAAQ;AAAA,MACtB,MAAM,OAAO,MAAM;AAAA,MACnB,IAAI,QAAQ,IAAI;AAAA,QACZ;AAAA,MACJ,QAAQ,OAAO,KAAK;AAAA,QAChB,QAAa,iBAAiB,KAAK;AAAA,QACnC,MAAM;AAAA,QACN,SAAS,IAAI;AAAA,QACb,WAAW;AAAA,QACX;AAAA,QACA;AAAA,QACA,UAAU,CAAC,IAAI;AAAA,MACnB,CAAC;AAAA;AAAA,GAER;AAAA,EACY,sCAAyC,aAAa,uBAAuB,CAAC,MAAM,QAAQ;AAAA,IACrG,IAAI;AAAA,IACJ,UAAU,KAAK,MAAM,GAAG;AAAA,KACvB,MAAK,KAAK,KAAK,KAAK,SAAS,IAAG,OAAO,CAAC,YAAY;AAAA,MACjD,MAAM,MAAM,QAAQ;AAAA,MACpB,OAAO,CAAM,QAAQ,GAAG,KAAK,IAAI,SAAS;AAAA;AAAA,IAE9C,KAAK,KAAK,SAAS,KAAK,CAAC,UAAS;AAAA,MAC9B,MAAM,MAAM,MAAK,KAAK;AAAA,MACtB,IAAI,UAAU,IAAI;AAAA,MAClB,IAAI,UAAU,IAAI;AAAA,MAClB,IAAI,OAAO,IAAI;AAAA,KAClB;AAAA,IACD,KAAK,KAAK,QAAQ,CAAC,YAAY;AAAA,MAC3B,MAAM,QAAQ,QAAQ;AAAA,MACtB,MAAM,OAAO,MAAM;AAAA,MACnB,IAAI,SAAS,IAAI;AAAA,QACb;AAAA,MACJ,MAAM,SAAS,OAAO,IAAI;AAAA,MAC1B,QAAQ,OAAO,KAAK;AAAA,QAChB,QAAa,iBAAiB,KAAK;AAAA,WAC/B,SAAS,EAAE,MAAM,WAAW,SAAS,IAAI,KAAK,IAAI,EAAE,MAAM,aAAa,SAAS,IAAI,KAAK;AAAA,QAC7F,WAAW;AAAA,QACX,OAAO;AAAA,QACP,OAAO,QAAQ;AAAA,QACf;AAAA,QACA,UAAU,CAAC,IAAI;AAAA,MACnB,CAAC;AAAA;AAAA,GAER;AAAA,EACY,qCAAwC,aAAa,sBAAsB,CAAC,MAAM,QAAQ;AAAA,IACnG,IAAI;AAAA,IACJ,UAAU,KAAK,MAAM,GAAG;AAAA,KACvB,MAAK,KAAK,KAAK,KAAK,SAAS,IAAG,OAAO,CAAC,YAAY;AAAA,MACjD,MAAM,MAAM,QAAQ;AAAA,MACpB,OAAO,CAAM,QAAQ,GAAG,KAAK,IAAI,WAAW;AAAA;AAAA,IAEhD,KAAK,KAAK,SAAS,KAAK,CAAC,UAAS;AAAA,MAC9B,MAAM,OAAQ,MAAK,KAAK,IAAI,WAAW,OAAO;AAAA,MAC9C,IAAI,IAAI,UAAU;AAAA,QACd,MAAK,KAAK,IAAI,UAAU,IAAI;AAAA,KACnC;AAAA,IACD,KAAK,KAAK,QAAQ,CAAC,YAAY;AAAA,MAC3B,MAAM,QAAQ,QAAQ;AAAA,MACtB,MAAM,SAAS,MAAM;AAAA,MACrB,IAAI,UAAU,IAAI;AAAA,QACd;AAAA,MACJ,MAAM,SAAc,oBAAoB,KAAK;AAAA,MAC7C,QAAQ,OAAO,KAAK;AAAA,QAChB;AAAA,QACA,MAAM;AAAA,QACN,SAAS,IAAI;AAAA,QACb,WAAW;AAAA,QACX;AAAA,QACA;AAAA,QACA,UAAU,CAAC,IAAI;AAAA,MACnB,CAAC;AAAA;AAAA,GAER;AAAA,EACY,qCAAwC,aAAa,sBAAsB,CAAC,MAAM,QAAQ;AAAA,IACnG,IAAI;AAAA,IACJ,UAAU,KAAK,MAAM,GAAG;AAAA,KACvB,MAAK,KAAK,KAAK,KAAK,SAAS,IAAG,OAAO,CAAC,YAAY;AAAA,MACjD,MAAM,MAAM,QAAQ;AAAA,MACpB,OAAO,CAAM,QAAQ,GAAG,KAAK,IAAI,WAAW;AAAA;AAAA,IAEhD,KAAK,KAAK,SAAS,KAAK,CAAC,UAAS;AAAA,MAC9B,MAAM,OAAQ,MAAK,KAAK,IAAI,WAAW,OAAO;AAAA,MAC9C,IAAI,IAAI,UAAU;AAAA,QACd,MAAK,KAAK,IAAI,UAAU,IAAI;AAAA,KACnC;AAAA,IACD,KAAK,KAAK,QAAQ,CAAC,YAAY;AAAA,MAC3B,MAAM,QAAQ,QAAQ;AAAA,MACtB,MAAM,SAAS,MAAM;AAAA,MACrB,IAAI,UAAU,IAAI;AAAA,QACd;AAAA,MACJ,MAAM,SAAc,oBAAoB,KAAK;AAAA,MAC7C,QAAQ,OAAO,KAAK;AAAA,QAChB;AAAA,QACA,MAAM;AAAA,QACN,SAAS,IAAI;AAAA,QACb,WAAW;AAAA,QACX;AAAA,QACA;AAAA,QACA,UAAU,CAAC,IAAI;AAAA,MACnB,CAAC;AAAA;AAAA,GAER;AAAA,EACY,wCAA2C,aAAa,yBAAyB,CAAC,MAAM,QAAQ;AAAA,IACzG,IAAI;AAAA,IACJ,UAAU,KAAK,MAAM,GAAG;AAAA,KACvB,MAAK,KAAK,KAAK,KAAK,SAAS,IAAG,OAAO,CAAC,YAAY;AAAA,MACjD,MAAM,MAAM,QAAQ;AAAA,MACpB,OAAO,CAAM,QAAQ,GAAG,KAAK,IAAI,WAAW;AAAA;AAAA,IAEhD,KAAK,KAAK,SAAS,KAAK,CAAC,UAAS;AAAA,MAC9B,MAAM,MAAM,MAAK,KAAK;AAAA,MACtB,IAAI,UAAU,IAAI;AAAA,MAClB,IAAI,UAAU,IAAI;AAAA,MAClB,IAAI,SAAS,IAAI;AAAA,KACpB;AAAA,IACD,KAAK,KAAK,QAAQ,CAAC,YAAY;AAAA,MAC3B,MAAM,QAAQ,QAAQ;AAAA,MACtB,MAAM,SAAS,MAAM;AAAA,MACrB,IAAI,WAAW,IAAI;AAAA,QACf;AAAA,MACJ,MAAM,SAAc,oBAAoB,KAAK;AAAA,MAC7C,MAAM,SAAS,SAAS,IAAI;AAAA,MAC5B,QAAQ,OAAO,KAAK;AAAA,QAChB;AAAA,WACI,SAAS,EAAE,MAAM,WAAW,SAAS,IAAI,OAAO,IAAI,EAAE,MAAM,aAAa,SAAS,IAAI,OAAO;AAAA,QACjG,WAAW;AAAA,QACX,OAAO;AAAA,QACP,OAAO,QAAQ;AAAA,QACf;AAAA,QACA,UAAU,CAAC,IAAI;AAAA,MACnB,CAAC;AAAA;AAAA,GAER;AAAA,EACY,wCAA2C,aAAa,yBAAyB,CAAC,MAAM,QAAQ;AAAA,IACzG,IAAI,KAAI;AAAA,IACR,UAAU,KAAK,MAAM,GAAG;AAAA,IACxB,KAAK,KAAK,SAAS,KAAK,CAAC,UAAS;AAAA,MAC9B,MAAM,MAAM,MAAK,KAAK;AAAA,MACtB,IAAI,SAAS,IAAI;AAAA,MACjB,IAAI,IAAI,SAAS;AAAA,QACb,IAAI,aAAa,IAAI,WAAW,IAAI;AAAA,QACpC,IAAI,SAAS,IAAI,IAAI,OAAO;AAAA,MAChC;AAAA,KACH;AAAA,IACD,IAAI,IAAI;AAAA,OACH,MAAK,KAAK,MAAM,UAAU,IAAG,QAAQ,CAAC,YAAY;AAAA,QAC/C,IAAI,QAAQ,YAAY;AAAA,QACxB,IAAI,IAAI,QAAQ,KAAK,QAAQ,KAAK;AAAA,UAC9B;AAAA,QACJ,QAAQ,OAAO,KAAK;AAAA,UAChB,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,QAAQ,IAAI;AAAA,UACZ,OAAO,QAAQ;AAAA,aACX,IAAI,UAAU,EAAE,SAAS,IAAI,QAAQ,SAAS,EAAE,IAAI,CAAC;AAAA,UACzD;AAAA,UACA,UAAU,CAAC,IAAI;AAAA,QACnB,CAAC;AAAA;AAAA,IAGL;AAAA,OAAC,KAAK,KAAK,MAAM,UAAU,GAAG,QAAQ,MAAM;AAAA,GACnD;AAAA,EACY,iCAAoC,aAAa,kBAAkB,CAAC,MAAM,QAAQ;AAAA,IAC3F,sBAAsB,KAAK,MAAM,GAAG;AAAA,IACpC,KAAK,KAAK,QAAQ,CAAC,YAAY;AAAA,MAC3B,IAAI,QAAQ,YAAY;AAAA,MACxB,IAAI,IAAI,QAAQ,KAAK,QAAQ,KAAK;AAAA,QAC9B;AAAA,MACJ,QAAQ,OAAO,KAAK;AAAA,QAChB,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,OAAO,QAAQ;AAAA,QACf,SAAS,IAAI,QAAQ,SAAS;AAAA,QAC9B;AAAA,QACA,UAAU,CAAC,IAAI;AAAA,MACnB,CAAC;AAAA;AAAA,GAER;AAAA,EACY,qCAAwC,aAAa,sBAAsB,CAAC,MAAM,QAAQ;AAAA,IACnG,IAAI,YAAY,IAAI,UAAkB;AAAA,IACtC,sBAAsB,KAAK,MAAM,GAAG;AAAA,GACvC;AAAA,EACY,qCAAwC,aAAa,sBAAsB,CAAC,MAAM,QAAQ;AAAA,IACnG,IAAI,YAAY,IAAI,UAAkB;AAAA,IACtC,sBAAsB,KAAK,MAAM,GAAG;AAAA,GACvC;AAAA,EACY,oCAAuC,aAAa,qBAAqB,CAAC,MAAM,QAAQ;AAAA,IACjG,UAAU,KAAK,MAAM,GAAG;AAAA,IACxB,MAAM,eAAoB,YAAY,IAAI,QAAQ;AAAA,IAClD,MAAM,UAAU,IAAI,OAAO,OAAO,IAAI,aAAa,WAAW,MAAM,IAAI,YAAY,iBAAiB,YAAY;AAAA,IACjH,IAAI,UAAU;AAAA,IACd,KAAK,KAAK,SAAS,KAAK,CAAC,UAAS;AAAA,MAC9B,MAAM,MAAM,MAAK,KAAK;AAAA,MACtB,IAAI,aAAa,IAAI,WAAW,IAAI;AAAA,MACpC,IAAI,SAAS,IAAI,OAAO;AAAA,KAC3B;AAAA,IACD,KAAK,KAAK,QAAQ,CAAC,YAAY;AAAA,MAC3B,IAAI,QAAQ,MAAM,SAAS,IAAI,UAAU,IAAI,QAAQ;AAAA,QACjD;AAAA,MACJ,QAAQ,OAAO,KAAK;AAAA,QAChB,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,UAAU,IAAI;AAAA,QACd,OAAO,QAAQ;AAAA,QACf;AAAA,QACA,UAAU,CAAC,IAAI;AAAA,MACnB,CAAC;AAAA;AAAA,GAER;AAAA,EACY,sCAAyC,aAAa,uBAAuB,CAAC,MAAM,QAAQ;AAAA,IACrG,UAAU,KAAK,MAAM,GAAG;AAAA,IACxB,MAAM,UAAU,IAAI,OAAO,IAAS,YAAY,IAAI,MAAM,KAAK;AAAA,IAC/D,IAAI,YAAY,IAAI,UAAU;AAAA,IAC9B,KAAK,KAAK,SAAS,KAAK,CAAC,UAAS;AAAA,MAC9B,MAAM,MAAM,MAAK,KAAK;AAAA,MACtB,IAAI,aAAa,IAAI,WAAW,IAAI;AAAA,MACpC,IAAI,SAAS,IAAI,OAAO;AAAA,KAC3B;AAAA,IACD,KAAK,KAAK,QAAQ,CAAC,YAAY;AAAA,MAC3B,IAAI,QAAQ,MAAM,WAAW,IAAI,MAAM;AAAA,QACnC;AAAA,MACJ,QAAQ,OAAO,KAAK;AAAA,QAChB,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,QAAQ,IAAI;AAAA,QACZ,OAAO,QAAQ;AAAA,QACf;AAAA,QACA,UAAU,CAAC,IAAI;AAAA,MACnB,CAAC;AAAA;AAAA,GAER;AAAA,EACY,oCAAuC,aAAa,qBAAqB,CAAC,MAAM,QAAQ;AAAA,IACjG,UAAU,KAAK,MAAM,GAAG;AAAA,IACxB,MAAM,UAAU,IAAI,OAAO,KAAU,YAAY,IAAI,MAAM,IAAI;AAAA,IAC/D,IAAI,YAAY,IAAI,UAAU;AAAA,IAC9B,KAAK,KAAK,SAAS,KAAK,CAAC,UAAS;AAAA,MAC9B,MAAM,MAAM,MAAK,KAAK;AAAA,MACtB,IAAI,aAAa,IAAI,WAAW,IAAI;AAAA,MACpC,IAAI,SAAS,IAAI,OAAO;AAAA,KAC3B;AAAA,IACD,KAAK,KAAK,QAAQ,CAAC,YAAY;AAAA,MAC3B,IAAI,QAAQ,MAAM,SAAS,IAAI,MAAM;AAAA,QACjC;AAAA,MACJ,QAAQ,OAAO,KAAK;AAAA,QAChB,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,QAAQ,IAAI;AAAA,QACZ,OAAO,QAAQ;AAAA,QACf;AAAA,QACA,UAAU,CAAC,IAAI;AAAA,MACnB,CAAC;AAAA;AAAA,GAER;AAAA,EASY,oCAAuC,aAAa,qBAAqB,CAAC,MAAM,QAAQ;AAAA,IACjG,UAAU,KAAK,MAAM,GAAG;AAAA,IACxB,KAAK,KAAK,QAAQ,CAAC,YAAY;AAAA,MAC3B,MAAM,SAAS,IAAI,OAAO,KAAK,IAAI;AAAA,QAC/B,OAAO,QAAQ,MAAM,IAAI;AAAA,QACzB,QAAQ,CAAC;AAAA,MACb,GAAG,CAAC,CAAC;AAAA,MACL,IAAI,kBAAkB,SAAS;AAAA,QAC3B,OAAO,OAAO,KAAK,CAAC,YAAW,0BAA0B,SAAQ,SAAS,IAAI,QAAQ,CAAC;AAAA,MAC3F;AAAA,MACA,0BAA0B,QAAQ,SAAS,IAAI,QAAQ;AAAA,MACvD;AAAA;AAAA,GAEP;AAAA,EACY,oCAAuC,aAAa,qBAAqB,CAAC,MAAM,QAAQ;AAAA,IACjG,UAAU,KAAK,MAAM,GAAG;AAAA,IACxB,MAAM,UAAU,IAAI,IAAI,IAAI,IAAI;AAAA,IAChC,KAAK,KAAK,SAAS,KAAK,CAAC,UAAS;AAAA,MAC9B,MAAK,KAAK,IAAI,OAAO,IAAI;AAAA,KAC5B;AAAA,IACD,KAAK,KAAK,QAAQ,CAAC,YAAY;AAAA,MAC3B,IAAI,QAAQ,IAAI,QAAQ,MAAM,IAAI;AAAA,QAC9B;AAAA,MACJ,QAAQ,OAAO,KAAK;AAAA,QAChB,MAAM;AAAA,QACN,QAAQ,IAAI;AAAA,QACZ,OAAO,QAAQ,MAAM;AAAA,QACrB;AAAA,QACA,UAAU,CAAC,IAAI;AAAA,MACnB,CAAC;AAAA;AAAA,GAER;AAAA,EACY,qCAAwC,aAAa,sBAAsB,CAAC,MAAM,QAAQ;AAAA,IACnG,UAAU,KAAK,MAAM,GAAG;AAAA,IACxB,KAAK,KAAK,QAAQ,CAAC,YAAY;AAAA,MAC3B,QAAQ,QAAQ,IAAI,GAAG,QAAQ,KAAK;AAAA;AAAA,GAE3C;AAAA;;;AC9jBM,MAAM,IAAI;AAAA,EACb,WAAW,CAAC,OAAO,CAAC,GAAG;AAAA,IACnB,KAAK,UAAU,CAAC;AAAA,IAChB,KAAK,SAAS;AAAA,IACd,IAAI;AAAA,MACA,KAAK,OAAO;AAAA;AAAA,EAEpB,QAAQ,CAAC,IAAI;AAAA,IACT,KAAK,UAAU;AAAA,IACf,GAAG,IAAI;AAAA,IACP,KAAK,UAAU;AAAA;AAAA,EAEnB,KAAK,CAAC,KAAK;AAAA,IACP,IAAI,OAAO,QAAQ,YAAY;AAAA,MAC3B,IAAI,MAAM,EAAE,WAAW,OAAO,CAAC;AAAA,MAC/B,IAAI,MAAM,EAAE,WAAW,QAAQ,CAAC;AAAA,MAChC;AAAA,IACJ;AAAA,IACA,MAAM,UAAU;AAAA,IAChB,MAAM,QAAQ,QAAQ,MAAM;AAAA,CAAI,EAAE,OAAO,CAAC,MAAM,CAAC;AAAA,IACjD,MAAM,YAAY,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC;AAAA,IAC/E,MAAM,WAAW,MAAM,IAAI,CAAC,MAAM,EAAE,MAAM,SAAS,CAAC,EAAE,IAAI,CAAC,MAAM,IAAI,OAAO,KAAK,SAAS,CAAC,IAAI,CAAC;AAAA,IAChG,WAAW,QAAQ,UAAU;AAAA,MACzB,KAAK,QAAQ,KAAK,IAAI;AAAA,IAC1B;AAAA;AAAA,EAEJ,OAAO,GAAG;AAAA,IACN,MAAM,IAAI;AAAA,IACV,MAAM,OAAO,MAAM;AAAA,IACnB,MAAM,UAAU,MAAM,WAAW,CAAC,EAAE;AAAA,IACpC,MAAM,QAAQ,CAAC,GAAG,QAAQ,IAAI,CAAC,MAAM,KAAK,GAAG,CAAC;AAAA,IAE9C,OAAO,IAAI,EAAE,GAAG,MAAM,MAAM,KAAK;AAAA,CAAI,CAAC;AAAA;AAE9C;;;IClCa;AAAA;AAAA,YAAU;AAAA,IACnB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,EACX;AAAA;;;ACkXO,SAAS,aAAa,CAAC,MAAM;AAAA,EAChC,IAAI,SAAS;AAAA,IACT,OAAO;AAAA,EAEX,IAAI,KAAK,KAAK,IAAI;AAAA,IACd,OAAO;AAAA,EACX,IAAI,KAAK,SAAS,MAAM;AAAA,IACpB,OAAO;AAAA,EACX,IAAI;AAAA,IAEA,KAAK,IAAI;AAAA,IACT,OAAO;AAAA,IAEX,MAAM;AAAA,IACF,OAAO;AAAA;AAAA;AAoBR,SAAS,gBAAgB,CAAC,MAAM;AAAA,EACnC,IAAI,CAAS,UAAU,KAAK,IAAI;AAAA,IAC5B,OAAO;AAAA,EACX,MAAM,UAAS,KAAK,QAAQ,SAAS,CAAC,MAAO,MAAM,MAAM,MAAM,GAAI;AAAA,EACnE,MAAM,SAAS,QAAO,OAAO,KAAK,KAAK,QAAO,SAAS,CAAC,IAAI,GAAG,GAAG;AAAA,EAClE,OAAO,cAAc,MAAM;AAAA;AAuBxB,SAAS,UAAU,CAAC,OAAO,YAAY,MAAM;AAAA,EAChD,IAAI;AAAA,IACA,MAAM,cAAc,MAAM,MAAM,GAAG;AAAA,IACnC,IAAI,YAAY,WAAW;AAAA,MACvB,OAAO;AAAA,IACX,OAAO,UAAU;AAAA,IACjB,IAAI,CAAC;AAAA,MACD,OAAO;AAAA,IAEX,MAAM,eAAe,KAAK,MAAM,KAAK,MAAM,CAAC;AAAA,IAC5C,IAAI,SAAS,gBAAgB,cAAc,QAAQ;AAAA,MAC/C,OAAO;AAAA,IACX,IAAI,CAAC,aAAa;AAAA,MACd,OAAO;AAAA,IACX,IAAI,cAAc,EAAE,SAAS,iBAAiB,aAAa,QAAQ;AAAA,MAC/D,OAAO;AAAA,IACX,OAAO;AAAA,IAEX,MAAM;AAAA,IACF,OAAO;AAAA;AAAA;AA0Nf,SAAS,iBAAiB,CAAC,QAAQ,OAAO,OAAO;AAAA,EAC7C,IAAI,OAAO,OAAO,QAAQ;AAAA,IACtB,MAAM,OAAO,KAAK,GAAQ,aAAa,OAAO,OAAO,MAAM,CAAC;AAAA,EAChE;AAAA,EACA,MAAM,MAAM,SAAS,OAAO;AAAA;AAoChC,SAAS,oBAAoB,CAAC,QAAQ,OAAO,KAAK,OAAO,cAAc,eAAe;AAAA,EAClF,MAAM,YAAY,OAAO;AAAA,EACzB,IAAI,OAAO,OAAO,QAAQ;AAAA,IAEtB,IAAI,gBAAgB,iBAAiB,CAAC,WAAW;AAAA,MAC7C;AAAA,IACJ;AAAA,IACA,MAAM,OAAO,KAAK,GAAQ,aAAa,KAAK,OAAO,MAAM,CAAC;AAAA,EAC9D;AAAA,EACA,IAAI,CAAC,aAAa,CAAC,cAAc;AAAA,IAC7B,IAAI,CAAC,OAAO,OAAO,QAAQ;AAAA,MACvB,MAAM,OAAO,KAAK;AAAA,QACd,MAAM;AAAA,QACN,UAAU;AAAA,QACV,OAAO;AAAA,QACP,MAAM,CAAC,GAAG;AAAA,MACd,CAAC;AAAA,IACL;AAAA,IACA;AAAA,EACJ;AAAA,EACA,IAAI,OAAO,UAAU,WAAW;AAAA,IAC5B,IAAI,WAAW;AAAA,MACX,MAAM,MAAM,OAAO;AAAA,IACvB;AAAA,EACJ,EACK;AAAA,IACD,MAAM,MAAM,OAAO,OAAO;AAAA;AAAA;AAGlC,SAAS,YAAY,CAAC,KAAK;AAAA,EACvB,MAAM,OAAO,OAAO,KAAK,IAAI,KAAK;AAAA,EAClC,WAAW,KAAK,MAAM;AAAA,IAClB,IAAI,CAAC,IAAI,QAAQ,IAAI,MAAM,QAAQ,IAAI,UAAU,GAAG;AAAA,MAChD,MAAM,IAAI,MAAM,2BAA2B,2BAA2B;AAAA,IAC1E;AAAA,EACJ;AAAA,EACA,MAAM,QAAa,aAAa,IAAI,KAAK;AAAA,EACzC,OAAO;AAAA,OACA;AAAA,IACH;AAAA,IACA,QAAQ,IAAI,IAAI,IAAI;AAAA,IACpB,SAAS,KAAK;AAAA,IACd,cAAc,IAAI,IAAI,KAAK;AAAA,EAC/B;AAAA;AAEJ,SAAS,cAAc,CAAC,OAAO,OAAO,SAAS,KAAK,KAAK,MAAM;AAAA,EAC3D,MAAM,eAAe,CAAC;AAAA,EACtB,MAAM,SAAS,IAAI;AAAA,EACnB,MAAM,YAAY,IAAI,SAAS;AAAA,EAC/B,MAAM,IAAI,UAAU,IAAI;AAAA,EACxB,MAAM,eAAe,UAAU,UAAU;AAAA,EACzC,MAAM,gBAAgB,UAAU,WAAW;AAAA,EAC3C,WAAW,OAAO,OAAO;AAAA,IAGrB,IAAI,QAAQ;AAAA,MACR;AAAA,IACJ,IAAI,OAAO,IAAI,GAAG;AAAA,MACd;AAAA,IACJ,IAAI,MAAM,SAAS;AAAA,MACf,aAAa,KAAK,GAAG;AAAA,MACrB;AAAA,IACJ;AAAA,IACA,MAAM,IAAI,UAAU,IAAI,EAAE,OAAO,MAAM,MAAM,QAAQ,CAAC,EAAE,GAAG,GAAG;AAAA,IAC9D,IAAI,aAAa,SAAS;AAAA,MACtB,MAAM,KAAK,EAAE,KAAK,CAAC,OAAM,qBAAqB,IAAG,SAAS,KAAK,OAAO,cAAc,aAAa,CAAC,CAAC;AAAA,IACvG,EACK;AAAA,MACD,qBAAqB,GAAG,SAAS,KAAK,OAAO,cAAc,aAAa;AAAA;AAAA,EAEhF;AAAA,EACA,IAAI,aAAa,QAAQ;AAAA,IACrB,QAAQ,OAAO,KAAK;AAAA,MAChB,MAAM;AAAA,MACN,MAAM;AAAA,MACN;AAAA,MACA;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EACA,IAAI,CAAC,MAAM;AAAA,IACP,OAAO;AAAA,EACX,OAAO,QAAQ,IAAI,KAAK,EAAE,KAAK,MAAM;AAAA,IACjC,OAAO;AAAA,GACV;AAAA;AA0ML,SAAS,kBAAkB,CAAC,SAAS,OAAO,MAAM,KAAK;AAAA,EACnD,WAAW,UAAU,SAAS;AAAA,IAC1B,IAAI,OAAO,OAAO,WAAW,GAAG;AAAA,MAC5B,MAAM,QAAQ,OAAO;AAAA,MACrB,OAAO;AAAA,IACX;AAAA,EACJ;AAAA,EACA,MAAM,aAAa,QAAQ,OAAO,CAAC,MAAM,CAAM,QAAQ,CAAC,CAAC;AAAA,EACzD,IAAI,WAAW,WAAW,GAAG;AAAA,IACzB,MAAM,QAAQ,WAAW,GAAG;AAAA,IAC5B,OAAO,WAAW;AAAA,EACtB;AAAA,EACA,MAAM,OAAO,KAAK;AAAA,IACd,MAAM;AAAA,IACN,OAAO,MAAM;AAAA,IACb;AAAA,IACA,QAAQ,QAAQ,IAAI,CAAC,WAAW,OAAO,OAAO,IAAI,CAAC,QAAa,cAAc,KAAK,KAAU,OAAO,CAAC,CAAC,CAAC;AAAA,EAC3G,CAAC;AAAA,EACD,OAAO;AAAA;AAgDX,SAAS,2BAA2B,CAAC,SAAS,OAAO,MAAM,KAAK;AAAA,EAC5D,MAAM,YAAY,QAAQ,OAAO,CAAC,MAAM,EAAE,OAAO,WAAW,CAAC;AAAA,EAC7D,IAAI,UAAU,WAAW,GAAG;AAAA,IACxB,MAAM,QAAQ,UAAU,GAAG;AAAA,IAC3B,OAAO;AAAA,EACX;AAAA,EACA,IAAI,UAAU,WAAW,GAAG;AAAA,IAExB,MAAM,OAAO,KAAK;AAAA,MACd,MAAM;AAAA,MACN,OAAO,MAAM;AAAA,MACb;AAAA,MACA,QAAQ,QAAQ,IAAI,CAAC,WAAW,OAAO,OAAO,IAAI,CAAC,QAAa,cAAc,KAAK,KAAU,OAAO,CAAC,CAAC,CAAC;AAAA,IAC3G,CAAC;AAAA,EACL,EACK;AAAA,IAED,MAAM,OAAO,KAAK;AAAA,MACd,MAAM;AAAA,MACN,OAAO,MAAM;AAAA,MACb;AAAA,MACA,QAAQ,CAAC;AAAA,MACT,WAAW;AAAA,IACf,CAAC;AAAA;AAAA,EAEL,OAAO;AAAA;AAyHX,SAAS,WAAW,CAAC,GAAG,GAAG;AAAA,EAGvB,IAAI,MAAM,GAAG;AAAA,IACT,OAAO,EAAE,OAAO,MAAM,MAAM,EAAE;AAAA,EAClC;AAAA,EACA,IAAI,aAAa,QAAQ,aAAa,QAAQ,CAAC,MAAM,CAAC,GAAG;AAAA,IACrD,OAAO,EAAE,OAAO,MAAM,MAAM,EAAE;AAAA,EAClC;AAAA,EACA,IAAS,cAAc,CAAC,KAAU,cAAc,CAAC,GAAG;AAAA,IAChD,MAAM,QAAQ,OAAO,KAAK,CAAC;AAAA,IAC3B,MAAM,aAAa,OAAO,KAAK,CAAC,EAAE,OAAO,CAAC,QAAQ,MAAM,QAAQ,GAAG,MAAM,EAAE;AAAA,IAC3E,MAAM,SAAS,KAAK,MAAM,EAAE;AAAA,IAC5B,WAAW,OAAO,YAAY;AAAA,MAC1B,MAAM,cAAc,YAAY,EAAE,MAAM,EAAE,IAAI;AAAA,MAC9C,IAAI,CAAC,YAAY,OAAO;AAAA,QACpB,OAAO;AAAA,UACH,OAAO;AAAA,UACP,gBAAgB,CAAC,KAAK,GAAG,YAAY,cAAc;AAAA,QACvD;AAAA,MACJ;AAAA,MACA,OAAO,OAAO,YAAY;AAAA,IAC9B;AAAA,IACA,OAAO,EAAE,OAAO,MAAM,MAAM,OAAO;AAAA,EACvC;AAAA,EACA,IAAI,MAAM,QAAQ,CAAC,KAAK,MAAM,QAAQ,CAAC,GAAG;AAAA,IACtC,IAAI,EAAE,WAAW,EAAE,QAAQ;AAAA,MACvB,OAAO,EAAE,OAAO,OAAO,gBAAgB,CAAC,EAAE;AAAA,IAC9C;AAAA,IACA,MAAM,WAAW,CAAC;AAAA,IAClB,SAAS,QAAQ,EAAG,QAAQ,EAAE,QAAQ,SAAS;AAAA,MAC3C,MAAM,QAAQ,EAAE;AAAA,MAChB,MAAM,QAAQ,EAAE;AAAA,MAChB,MAAM,cAAc,YAAY,OAAO,KAAK;AAAA,MAC5C,IAAI,CAAC,YAAY,OAAO;AAAA,QACpB,OAAO;AAAA,UACH,OAAO;AAAA,UACP,gBAAgB,CAAC,OAAO,GAAG,YAAY,cAAc;AAAA,QACzD;AAAA,MACJ;AAAA,MACA,SAAS,KAAK,YAAY,IAAI;AAAA,IAClC;AAAA,IACA,OAAO,EAAE,OAAO,MAAM,MAAM,SAAS;AAAA,EACzC;AAAA,EACA,OAAO,EAAE,OAAO,OAAO,gBAAgB,CAAC,EAAE;AAAA;AAE9C,SAAS,yBAAyB,CAAC,QAAQ,MAAM,OAAO;AAAA,EAEpD,MAAM,YAAY,IAAI;AAAA,EACtB,IAAI;AAAA,EACJ,WAAW,OAAO,KAAK,QAAQ;AAAA,IAC3B,IAAI,IAAI,SAAS,qBAAqB;AAAA,MAClC,eAAe,aAAa;AAAA,MAC5B,WAAW,KAAK,IAAI,MAAM;AAAA,QACtB,IAAI,CAAC,UAAU,IAAI,CAAC;AAAA,UAChB,UAAU,IAAI,GAAG,CAAC,CAAC;AAAA,QACvB,UAAU,IAAI,CAAC,EAAE,IAAI;AAAA,MACzB;AAAA,IACJ,EACK;AAAA,MACD,OAAO,OAAO,KAAK,GAAG;AAAA;AAAA,EAE9B;AAAA,EACA,WAAW,OAAO,MAAM,QAAQ;AAAA,IAC5B,IAAI,IAAI,SAAS,qBAAqB;AAAA,MAClC,WAAW,KAAK,IAAI,MAAM;AAAA,QACtB,IAAI,CAAC,UAAU,IAAI,CAAC;AAAA,UAChB,UAAU,IAAI,GAAG,CAAC,CAAC;AAAA,QACvB,UAAU,IAAI,CAAC,EAAE,IAAI;AAAA,MACzB;AAAA,IACJ,EACK;AAAA,MACD,OAAO,OAAO,KAAK,GAAG;AAAA;AAAA,EAE9B;AAAA,EAEA,MAAM,WAAW,CAAC,GAAG,SAAS,EAAE,OAAO,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC;AAAA,EAC5E,IAAI,SAAS,UAAU,YAAY;AAAA,IAC/B,OAAO,OAAO,KAAK,KAAK,YAAY,MAAM,SAAS,CAAC;AAAA,EACxD;AAAA,EACA,IAAS,QAAQ,MAAM;AAAA,IACnB,OAAO;AAAA,EACX,MAAM,SAAS,YAAY,KAAK,OAAO,MAAM,KAAK;AAAA,EAClD,IAAI,CAAC,OAAO,OAAO;AAAA,IACf,MAAM,IAAI,MAAM,0CAA0C,GAAG,KAAK,UAAU,OAAO,cAAc,GAAG;AAAA,EACxG;AAAA,EACA,OAAO,QAAQ,OAAO;AAAA,EACtB,OAAO;AAAA;AA+EX,SAAS,gBAAgB,CAAC,OAAO,KAAK;AAAA,EAClC,SAAS,IAAI,MAAM,SAAS,EAAG,KAAK,GAAG,KAAK;AAAA,IACxC,IAAI,MAAM,GAAG,KAAK,SAAS;AAAA,MACvB,OAAO,IAAI;AAAA,EACnB;AAAA,EACA,OAAO;AAAA;AAEX,SAAS,iBAAiB,CAAC,QAAQ,OAAO,OAAO;AAAA,EAC7C,IAAI,OAAO,OAAO,QAAQ;AAAA,IACtB,MAAM,OAAO,KAAK,GAAQ,aAAa,OAAO,OAAO,MAAM,CAAC;AAAA,EAChE;AAAA,EACA,MAAM,MAAM,SAAS,OAAO;AAAA;AAEhC,SAAS,kBAAkB,CAAC,aAAa,OAAO,OAAO,OAAO,aAAa;AAAA,EAIvE,SAAS,IAAI,EAAG,IAAI,MAAM,QAAQ,KAAK;AAAA,IACnC,MAAM,IAAI,YAAY;AAAA,IACtB,MAAM,YAAY,IAAI,MAAM;AAAA,IAC5B,IAAI,EAAE,OAAO,QAAQ;AAAA,MACjB,IAAI,CAAC,aAAa,KAAK,aAAa;AAAA,QAChC,MAAM,MAAM,SAAS;AAAA,QACrB;AAAA,MACJ;AAAA,MACA,MAAM,OAAO,KAAK,GAAQ,aAAa,GAAG,EAAE,MAAM,CAAC;AAAA,IACvD;AAAA,IACA,MAAM,MAAM,KAAK,EAAE;AAAA,EACvB;AAAA,EAOA,SAAS,IAAI,MAAM,MAAM,SAAS,EAAG,KAAK,MAAM,QAAQ,KAAK;AAAA,IACzD,IAAI,MAAM,GAAG,KAAK,WAAW,cAAc,MAAM,MAAM,OAAO,WAAW;AAAA,MACrE,MAAM,MAAM,SAAS;AAAA,IACzB,EACK;AAAA,MACD;AAAA;AAAA,EAER;AAAA,EACA,OAAO;AAAA;AAyKX,SAAS,eAAe,CAAC,WAAW,aAAa,OAAO,KAAK,OAAO,MAAM,KAAK;AAAA,EAC3E,IAAI,UAAU,OAAO,QAAQ;AAAA,IACzB,IAAS,iBAAiB,IAAI,OAAO,GAAG,GAAG;AAAA,MACvC,MAAM,OAAO,KAAK,GAAQ,aAAa,KAAK,UAAU,MAAM,CAAC;AAAA,IACjE,EACK;AAAA,MACD,MAAM,OAAO,KAAK;AAAA,QACd,MAAM;AAAA,QACN,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,QACA,QAAQ,UAAU,OAAO,IAAI,CAAC,QAAa,cAAc,KAAK,KAAU,OAAO,CAAC,CAAC;AAAA,MACrF,CAAC;AAAA;AAAA,EAET;AAAA,EACA,IAAI,YAAY,OAAO,QAAQ;AAAA,IAC3B,IAAS,iBAAiB,IAAI,OAAO,GAAG,GAAG;AAAA,MACvC,MAAM,OAAO,KAAK,GAAQ,aAAa,KAAK,YAAY,MAAM,CAAC;AAAA,IACnE,EACK;AAAA,MACD,MAAM,OAAO,KAAK;AAAA,QACd,QAAQ;AAAA,QACR,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ,YAAY,OAAO,IAAI,CAAC,QAAa,cAAc,KAAK,KAAU,OAAO,CAAC,CAAC;AAAA,MACvF,CAAC;AAAA;AAAA,EAET;AAAA,EACA,MAAM,MAAM,IAAI,UAAU,OAAO,YAAY,KAAK;AAAA;AA8BtD,SAAS,eAAe,CAAC,QAAQ,OAAO;AAAA,EACpC,IAAI,OAAO,OAAO,QAAQ;AAAA,IACtB,MAAM,OAAO,KAAK,GAAG,OAAO,MAAM;AAAA,EACtC;AAAA,EACA,MAAM,MAAM,IAAI,OAAO,KAAK;AAAA;AAyFhC,SAAS,oBAAoB,CAAC,QAAQ,OAAO;AAAA,EACzC,IAAI,UAAU,cAAc,OAAO,OAAO,UAAU,OAAO,WAAW;AAAA,IAClE,OAAO,EAAE,QAAQ,CAAC,GAAG,OAAO,UAAU;AAAA,EAC1C;AAAA,EACA,OAAO;AAAA;AAiFX,SAAS,mBAAmB,CAAC,SAAS,KAAK;AAAA,EACvC,IAAI,QAAQ,UAAU,WAAW;AAAA,IAC7B,QAAQ,QAAQ,IAAI;AAAA,EACxB;AAAA,EACA,OAAO;AAAA;AA+BX,SAAS,uBAAuB,CAAC,SAAS,MAAM;AAAA,EAC5C,IAAI,CAAC,QAAQ,OAAO,UAAU,QAAQ,UAAU,WAAW;AAAA,IACvD,QAAQ,OAAO,KAAK;AAAA,MAChB,MAAM;AAAA,MACN,UAAU;AAAA,MACV,OAAO,QAAQ;AAAA,MACf;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EACA,OAAO;AAAA;AAkGX,SAAS,gBAAgB,CAAC,MAAM,MAAM,KAAK;AAAA,EACvC,IAAI,KAAK,OAAO,QAAQ;AAAA,IAEpB,KAAK,UAAU;AAAA,IACf,OAAO;AAAA,EACX;AAAA,EACA,OAAO,KAAK,KAAK,IAAI,EAAE,OAAO,KAAK,OAAO,QAAQ,KAAK,QAAQ,UAAU,KAAK,SAAS,GAAG,GAAG;AAAA;AA0BjG,SAAS,kBAAkB,CAAC,QAAQ,KAAK,KAAK;AAAA,EAC1C,IAAI,OAAO,OAAO,QAAQ;AAAA,IAEtB,OAAO,UAAU;AAAA,IACjB,OAAO;AAAA,EACX;AAAA,EACA,MAAM,YAAY,IAAI,aAAa;AAAA,EACnC,IAAI,cAAc,WAAW;AAAA,IACzB,MAAM,cAAc,IAAI,UAAU,OAAO,OAAO,MAAM;AAAA,IACtD,IAAI,uBAAuB,SAAS;AAAA,MAChC,OAAO,YAAY,KAAK,CAAC,UAAU,oBAAoB,QAAQ,OAAO,IAAI,KAAK,GAAG,CAAC;AAAA,IACvF;AAAA,IACA,OAAO,oBAAoB,QAAQ,aAAa,IAAI,KAAK,GAAG;AAAA,EAChE,EACK;AAAA,IACD,MAAM,cAAc,IAAI,iBAAiB,OAAO,OAAO,MAAM;AAAA,IAC7D,IAAI,uBAAuB,SAAS;AAAA,MAChC,OAAO,YAAY,KAAK,CAAC,UAAU,oBAAoB,QAAQ,OAAO,IAAI,IAAI,GAAG,CAAC;AAAA,IACtF;AAAA,IACA,OAAO,oBAAoB,QAAQ,aAAa,IAAI,IAAI,GAAG;AAAA;AAAA;AAGnE,SAAS,mBAAmB,CAAC,MAAM,OAAO,YAAY,KAAK;AAAA,EAEvD,IAAI,KAAK,OAAO,QAAQ;AAAA,IACpB,KAAK,UAAU;AAAA,IACf,OAAO;AAAA,EACX;AAAA,EACA,OAAO,WAAW,KAAK,IAAI,EAAE,OAAO,QAAQ,KAAK,OAAO,GAAG,GAAG;AAAA;AAsBlE,SAAS,oBAAoB,CAAC,SAAS;AAAA,EACnC,QAAQ,QAAQ,OAAO,OAAO,QAAQ,KAAK;AAAA,EAC3C,OAAO;AAAA;AA4KX,SAAS,kBAAkB,CAAC,QAAQ,SAAS,OAAO,MAAM;AAAA,EACtD,IAAI,CAAC,QAAQ;AAAA,IACT,MAAM,OAAO;AAAA,MACT,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA,MAAM,CAAC,GAAI,KAAK,KAAK,IAAI,QAAQ,CAAC,CAAE;AAAA,MACpC,UAAU,CAAC,KAAK,KAAK,IAAI;AAAA,IAE7B;AAAA,IACA,IAAI,KAAK,KAAK,IAAI;AAAA,MACd,KAAK,SAAS,KAAK,KAAK,IAAI;AAAA,IAChC,QAAQ,OAAO,KAAU,MAAM,IAAI,CAAC;AAAA,EACxC;AAAA;AAAA,IAtrES,UA6HA,YAoBA,kBAKA,UAIA,UAqBA,WAIA,SAyEA,WAIA,YASA,UAIA,WAIA,UAIA,SAIA,WAIA,iBAIA,aAIA,aAIA,iBAIA,UAKA,UAqBA,SAKA,YAIA,YAgDA,YAwBA,eAgBA,UA2BA,SAcA,wBAcA,YA8BA,kBAIA,aAqBA,YAoBA,kBAIA,YAeA,eAiBA,UAiBA,SAIA,aAIA,WAYA,UAeA,UA8BA,WAuHA,YAmEA,eAyJA,WAyEA,SA8BA,wBA0EA,kBAwGA,WA0HA,YAuIA,SAgEA,SAkCA,UAuBA,aAwBA,UAgBA,eA8BA,cAyBA,mBAWA,cAkBA,aA+BA,cAeA,iBAyBA,aAiBA,WA2CA,SAeA,UA6BA,WAsDA,gBAGA,cAqBA,qBAiDA,cA+EA,aAMA,UAoBA;AAAA;AAAA,EAhqEb;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EA6HA;AAAA,EA5Ha,2BAA8B,aAAa,YAAY,CAAC,MAAM,QAAQ;AAAA,IAC/E,IAAI;AAAA,IACJ,SAAS,OAAO,CAAC;AAAA,IACjB,KAAK,KAAK,MAAM;AAAA,IAChB,KAAK,KAAK,MAAM,KAAK,KAAK,OAAO,CAAC;AAAA,IAClC,KAAK,KAAK,UAAU;AAAA,IACpB,MAAM,SAAS,CAAC,GAAI,KAAK,KAAK,IAAI,UAAU,CAAC,CAAE;AAAA,IAE/C,IAAI,KAAK,KAAK,OAAO,IAAI,WAAW,GAAG;AAAA,MACnC,OAAO,QAAQ,IAAI;AAAA,IACvB;AAAA,IACA,WAAW,MAAM,QAAQ;AAAA,MACrB,WAAW,MAAM,GAAG,KAAK,UAAU;AAAA,QAC/B,GAAG,IAAI;AAAA,MACX;AAAA,IACJ;AAAA,IACA,IAAI,OAAO,WAAW,GAAG;AAAA,OAGpB,MAAK,KAAK,MAAM,aAAa,IAAG,WAAW,CAAC;AAAA,MAC7C,KAAK,KAAK,UAAU,KAAK,MAAM;AAAA,QAC3B,KAAK,KAAK,MAAM,KAAK,KAAK;AAAA,OAC7B;AAAA,IACL,EACK;AAAA,MACD,MAAM,YAAY,CAAC,SAAS,SAAQ,QAAQ;AAAA,QACxC,IAAI,YAAiB,QAAQ,OAAO;AAAA,QACpC,IAAI;AAAA,QACJ,WAAW,MAAM,SAAQ;AAAA,UACrB,IAAI,GAAG,KAAK,IAAI,MAAM;AAAA,YAClB,IAAS,kBAAkB,OAAO;AAAA,cAC9B;AAAA,YACJ,MAAM,YAAY,GAAG,KAAK,IAAI,KAAK,OAAO;AAAA,YAC1C,IAAI,CAAC;AAAA,cACD;AAAA,UACR,EACK,SAAI,WAAW;AAAA,YAChB;AAAA,UACJ;AAAA,UACA,MAAM,UAAU,QAAQ,OAAO;AAAA,UAC/B,MAAM,IAAI,GAAG,KAAK,MAAM,OAAO;AAAA,UAC/B,IAAI,aAAa,WAAW,KAAK,UAAU,OAAO;AAAA,YAC9C,MAAM,IAAS;AAAA,UACnB;AAAA,UACA,IAAI,eAAe,aAAa,SAAS;AAAA,YACrC,eAAe,eAAe,QAAQ,QAAQ,GAAG,KAAK,YAAY;AAAA,cAC9D,MAAM;AAAA,cACN,MAAM,UAAU,QAAQ,OAAO;AAAA,cAC/B,IAAI,YAAY;AAAA,gBACZ;AAAA,cACJ,IAAI,CAAC;AAAA,gBACD,YAAiB,QAAQ,SAAS,OAAO;AAAA,aAChD;AAAA,UACL,EACK;AAAA,YACD,MAAM,UAAU,QAAQ,OAAO;AAAA,YAC/B,IAAI,YAAY;AAAA,cACZ;AAAA,YACJ,IAAI,CAAC;AAAA,cACD,YAAiB,QAAQ,SAAS,OAAO;AAAA;AAAA,QAErD;AAAA,QACA,IAAI,aAAa;AAAA,UACb,OAAO,YAAY,KAAK,MAAM;AAAA,YAC1B,OAAO;AAAA,WACV;AAAA,QACL;AAAA,QACA,OAAO;AAAA;AAAA,MAEX,MAAM,qBAAqB,CAAC,QAAQ,SAAS,QAAQ;AAAA,QAEjD,IAAS,QAAQ,MAAM,GAAG;AAAA,UACtB,OAAO,UAAU;AAAA,UACjB,OAAO;AAAA,QACX;AAAA,QAEA,MAAM,cAAc,UAAU,SAAS,QAAQ,GAAG;AAAA,QAClD,IAAI,uBAAuB,SAAS;AAAA,UAChC,IAAI,IAAI,UAAU;AAAA,YACd,MAAM,IAAS;AAAA,UACnB,OAAO,YAAY,KAAK,CAAC,iBAAgB,KAAK,KAAK,MAAM,cAAa,GAAG,CAAC;AAAA,QAC9E;AAAA,QACA,OAAO,KAAK,KAAK,MAAM,aAAa,GAAG;AAAA;AAAA,MAE3C,KAAK,KAAK,MAAM,CAAC,SAAS,QAAQ;AAAA,QAC9B,IAAI,IAAI,YAAY;AAAA,UAChB,OAAO,KAAK,KAAK,MAAM,SAAS,GAAG;AAAA,QACvC;AAAA,QACA,IAAI,IAAI,cAAc,YAAY;AAAA,UAG9B,MAAM,SAAS,KAAK,KAAK,MAAM,EAAE,OAAO,QAAQ,OAAO,QAAQ,CAAC,EAAE,GAAG,KAAK,KAAK,YAAY,KAAK,CAAC;AAAA,UACjG,IAAI,kBAAkB,SAAS;AAAA,YAC3B,OAAO,OAAO,KAAK,CAAC,YAAW;AAAA,cAC3B,OAAO,mBAAmB,SAAQ,SAAS,GAAG;AAAA,aACjD;AAAA,UACL;AAAA,UACA,OAAO,mBAAmB,QAAQ,SAAS,GAAG;AAAA,QAClD;AAAA,QAEA,MAAM,SAAS,KAAK,KAAK,MAAM,SAAS,GAAG;AAAA,QAC3C,IAAI,kBAAkB,SAAS;AAAA,UAC3B,IAAI,IAAI,UAAU;AAAA,YACd,MAAM,IAAS;AAAA,UACnB,OAAO,OAAO,KAAK,CAAC,YAAW,UAAU,SAAQ,QAAQ,GAAG,CAAC;AAAA,QACjE;AAAA,QACA,OAAO,UAAU,QAAQ,QAAQ,GAAG;AAAA;AAAA;AAAA,IAIvC,WAAW,MAAM,aAAa,OAAO;AAAA,MACtC,UAAU,CAAC,UAAU;AAAA,QACjB,IAAI;AAAA,UACA,MAAM,IAAI,UAAU,MAAM,KAAK;AAAA,UAC/B,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,QAAQ,EAAE,OAAO,OAAO;AAAA,UAErE,OAAO,GAAG;AAAA,UACN,OAAO,eAAe,MAAM,KAAK,EAAE,KAAK,CAAC,MAAO,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,QAAQ,EAAE,OAAO,OAAO,CAAE;AAAA;AAAA;AAAA,MAGpH,QAAQ;AAAA,MACR,SAAS;AAAA,IACb,EAAE;AAAA,GACL;AAAA,EAEY,6BAAgC,aAAa,cAAc,CAAC,MAAM,QAAQ;AAAA,IACnF,SAAS,KAAK,MAAM,GAAG;AAAA,IACvB,KAAK,KAAK,UAAU,CAAC,GAAI,MAAM,KAAK,KAAK,YAAY,CAAC,CAAE,EAAE,IAAI,KAAa,OAAO,KAAK,KAAK,GAAG;AAAA,IAC/F,KAAK,KAAK,QAAQ,CAAC,SAAS,MAAM;AAAA,MAC9B,IAAI,IAAI;AAAA,QACJ,IAAI;AAAA,UACA,QAAQ,QAAQ,OAAO,QAAQ,KAAK;AAAA,UAExC,OAAO,IAAG;AAAA,MACd,IAAI,OAAO,QAAQ,UAAU;AAAA,QACzB,OAAO;AAAA,MACX,QAAQ,OAAO,KAAK;AAAA,QAChB,UAAU;AAAA,QACV,MAAM;AAAA,QACN,OAAO,QAAQ;AAAA,QACf;AAAA,MACJ,CAAC;AAAA,MACD,OAAO;AAAA;AAAA,GAEd;AAAA,EACY,mCAAsC,aAAa,oBAAoB,CAAC,MAAM,QAAQ;AAAA,IAExF,sBAAsB,KAAK,MAAM,GAAG;AAAA,IAC3C,WAAW,KAAK,MAAM,GAAG;AAAA,GAC5B;AAAA,EACY,2BAA8B,aAAa,YAAY,CAAC,MAAM,QAAQ;AAAA,IAC/E,IAAI,YAAY,IAAI,UAAkB;AAAA,IACtC,iBAAiB,KAAK,MAAM,GAAG;AAAA,GAClC;AAAA,EACY,2BAA8B,aAAa,YAAY,CAAC,MAAM,QAAQ;AAAA,IAC/E,IAAI,IAAI,SAAS;AAAA,MACb,MAAM,aAAa;AAAA,QACf,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MACR;AAAA,MACA,MAAM,IAAI,WAAW,IAAI;AAAA,MACzB,IAAI,MAAM;AAAA,QACN,MAAM,IAAI,MAAM,0BAA0B,IAAI,UAAU;AAAA,MAC5D,IAAI,YAAY,IAAI,UAAkB,KAAK,CAAC;AAAA,IAChD,EAEI;AAAA,UAAI,YAAY,IAAI,UAAkB,KAAK;AAAA,IAC/C,iBAAiB,KAAK,MAAM,GAAG;AAAA,GAClC;AAAA,EACY,4BAA+B,aAAa,aAAa,CAAC,MAAM,QAAQ;AAAA,IACjF,IAAI,YAAY,IAAI,UAAkB;AAAA,IACtC,iBAAiB,KAAK,MAAM,GAAG;AAAA,GAClC;AAAA,EACY,0BAA6B,aAAa,WAAW,CAAC,MAAM,QAAQ;AAAA,IAC7E,iBAAiB,KAAK,MAAM,GAAG;AAAA,IAC/B,KAAK,KAAK,QAAQ,CAAC,YAAY;AAAA,MAC3B,IAAI;AAAA,QAEA,MAAM,UAAU,QAAQ,MAAM,KAAK;AAAA,QAGnC,IAAI,CAAC,IAAI,aAAa,IAAI,UAAU,WAAmB,aAAa,QAAQ;AAAA,UACxE,IAAI,CAAC,gBAAgB,KAAK,OAAO,GAAG;AAAA,YAChC,QAAQ,OAAO,KAAK;AAAA,cAChB,MAAM;AAAA,cACN,QAAQ;AAAA,cACR,MAAM;AAAA,cACN,OAAO,QAAQ;AAAA,cACf;AAAA,cACA,UAAU,CAAC,IAAI;AAAA,YACnB,CAAC;AAAA,YACD;AAAA,UACJ;AAAA,QACJ;AAAA,QAEA,MAAM,MAAM,IAAI,IAAI,OAAO;AAAA,QAC3B,IAAI,IAAI,UAAU;AAAA,UACd,IAAI,SAAS,YAAY;AAAA,UACzB,IAAI,CAAC,IAAI,SAAS,KAAK,IAAI,QAAQ,GAAG;AAAA,YAClC,QAAQ,OAAO,KAAK;AAAA,cAChB,MAAM;AAAA,cACN,QAAQ;AAAA,cACR,MAAM;AAAA,cACN,SAAS,IAAI,SAAS;AAAA,cACtB,OAAO,QAAQ;AAAA,cACf;AAAA,cACA,UAAU,CAAC,IAAI;AAAA,YACnB,CAAC;AAAA,UACL;AAAA,QACJ;AAAA,QACA,IAAI,IAAI,UAAU;AAAA,UACd,IAAI,SAAS,YAAY;AAAA,UACzB,IAAI,CAAC,IAAI,SAAS,KAAK,IAAI,SAAS,SAAS,GAAG,IAAI,IAAI,SAAS,MAAM,GAAG,EAAE,IAAI,IAAI,QAAQ,GAAG;AAAA,YAC3F,QAAQ,OAAO,KAAK;AAAA,cAChB,MAAM;AAAA,cACN,QAAQ;AAAA,cACR,MAAM;AAAA,cACN,SAAS,IAAI,SAAS;AAAA,cACtB,OAAO,QAAQ;AAAA,cACf;AAAA,cACA,UAAU,CAAC,IAAI;AAAA,YACnB,CAAC;AAAA,UACL;AAAA,QACJ;AAAA,QAEA,IAAI,IAAI,WAAW;AAAA,UAEf,QAAQ,QAAQ,IAAI;AAAA,QACxB,EACK;AAAA,UAED,QAAQ,QAAQ;AAAA;AAAA,QAEpB;AAAA,QAEJ,OAAO,GAAG;AAAA,QACN,QAAQ,OAAO,KAAK;AAAA,UAChB,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,OAAO,QAAQ;AAAA,UACf;AAAA,UACA,UAAU,CAAC,IAAI;AAAA,QACnB,CAAC;AAAA;AAAA;AAAA,GAGZ;AAAA,EACY,4BAA+B,aAAa,aAAa,CAAC,MAAM,QAAQ;AAAA,IACjF,IAAI,YAAY,IAAI,UAAkB,MAAM;AAAA,IAC5C,iBAAiB,KAAK,MAAM,GAAG;AAAA,GAClC;AAAA,EACY,6BAAgC,aAAa,cAAc,CAAC,MAAM,QAAQ;AAAA,IACnF,IAAI,YAAY,IAAI,UAAkB;AAAA,IACtC,iBAAiB,KAAK,MAAM,GAAG;AAAA,GAClC;AAAA,EAMY,2BAA8B,aAAa,YAAY,CAAC,MAAM,QAAQ;AAAA,IAC/E,IAAI,YAAY,IAAI,UAAkB;AAAA,IACtC,iBAAiB,KAAK,MAAM,GAAG;AAAA,GAClC;AAAA,EACY,4BAA+B,aAAa,aAAa,CAAC,MAAM,QAAQ;AAAA,IACjF,IAAI,YAAY,IAAI,UAAkB;AAAA,IACtC,iBAAiB,KAAK,MAAM,GAAG;AAAA,GAClC;AAAA,EACY,2BAA8B,aAAa,YAAY,CAAC,MAAM,QAAQ;AAAA,IAC/E,IAAI,YAAY,IAAI,UAAkB;AAAA,IACtC,iBAAiB,KAAK,MAAM,GAAG;AAAA,GAClC;AAAA,EACY,0BAA6B,aAAa,WAAW,CAAC,MAAM,QAAQ;AAAA,IAC7E,IAAI,YAAY,IAAI,UAAkB;AAAA,IACtC,iBAAiB,KAAK,MAAM,GAAG;AAAA,GAClC;AAAA,EACY,4BAA+B,aAAa,aAAa,CAAC,MAAM,QAAQ;AAAA,IACjF,IAAI,YAAY,IAAI,UAAkB;AAAA,IACtC,iBAAiB,KAAK,MAAM,GAAG;AAAA,GAClC;AAAA,EACY,kCAAqC,aAAa,mBAAmB,CAAC,MAAM,QAAQ;AAAA,IAC7F,IAAI,YAAY,IAAI,UAAkB,SAAS,GAAG;AAAA,IAClD,iBAAiB,KAAK,MAAM,GAAG;AAAA,GAClC;AAAA,EACY,8BAAiC,aAAa,eAAe,CAAC,MAAM,QAAQ;AAAA,IACrF,IAAI,YAAY,IAAI,UAAkB;AAAA,IACtC,iBAAiB,KAAK,MAAM,GAAG;AAAA,GAClC;AAAA,EACY,8BAAiC,aAAa,eAAe,CAAC,MAAM,QAAQ;AAAA,IACrF,IAAI,YAAY,IAAI,UAAkB,KAAK,GAAG;AAAA,IAC9C,iBAAiB,KAAK,MAAM,GAAG;AAAA,GAClC;AAAA,EACY,kCAAqC,aAAa,mBAAmB,CAAC,MAAM,QAAQ;AAAA,IAC7F,IAAI,YAAY,IAAI,UAAkB;AAAA,IACtC,iBAAiB,KAAK,MAAM,GAAG;AAAA,GAClC;AAAA,EACY,2BAA8B,aAAa,YAAY,CAAC,MAAM,QAAQ;AAAA,IAC/E,IAAI,YAAY,IAAI,UAAkB;AAAA,IACtC,iBAAiB,KAAK,MAAM,GAAG;AAAA,IAC/B,KAAK,KAAK,IAAI,SAAS;AAAA,GAC1B;AAAA,EACY,2BAA8B,aAAa,YAAY,CAAC,MAAM,QAAQ;AAAA,IAC/E,IAAI,YAAY,IAAI,UAAkB;AAAA,IACtC,iBAAiB,KAAK,MAAM,GAAG;AAAA,IAC/B,KAAK,KAAK,IAAI,SAAS;AAAA,IACvB,KAAK,KAAK,QAAQ,CAAC,YAAY;AAAA,MAC3B,IAAI;AAAA,QAEA,IAAI,IAAI,WAAW,QAAQ,QAAQ;AAAA,QAGvC,MAAM;AAAA,QACF,QAAQ,OAAO,KAAK;AAAA,UAChB,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,OAAO,QAAQ;AAAA,UACf;AAAA,UACA,UAAU,CAAC,IAAI;AAAA,QACnB,CAAC;AAAA;AAAA;AAAA,GAGZ;AAAA,EACY,0BAA6B,aAAa,WAAW,CAAC,MAAM,QAAQ;AAAA,IAC7E,IAAI,YAAY,IAAI,UAAkB,IAAI,IAAI,SAAS;AAAA,IACvD,iBAAiB,KAAK,MAAM,GAAG;AAAA,IAC/B,KAAK,KAAK,IAAI,SAAS;AAAA,GAC1B;AAAA,EACY,6BAAgC,aAAa,cAAc,CAAC,MAAM,QAAQ;AAAA,IACnF,IAAI,YAAY,IAAI,UAAkB;AAAA,IACtC,iBAAiB,KAAK,MAAM,GAAG;AAAA,GAClC;AAAA,EACY,6BAAgC,aAAa,cAAc,CAAC,MAAM,QAAQ;AAAA,IACnF,IAAI,YAAY,IAAI,UAAkB;AAAA,IACtC,iBAAiB,KAAK,MAAM,GAAG;AAAA,IAC/B,KAAK,KAAK,QAAQ,CAAC,YAAY;AAAA,MAC3B,MAAM,QAAQ,QAAQ,MAAM,MAAM,GAAG;AAAA,MACrC,IAAI;AAAA,QACA,IAAI,MAAM,WAAW;AAAA,UACjB,MAAM,IAAI;AAAA,QACd,OAAO,SAAS,UAAU;AAAA,QAC1B,IAAI,CAAC;AAAA,UACD,MAAM,IAAI;AAAA,QACd,MAAM,YAAY,OAAO,MAAM;AAAA,QAC/B,IAAI,GAAG,gBAAgB;AAAA,UACnB,MAAM,IAAI;AAAA,QACd,IAAI,YAAY,KAAK,YAAY;AAAA,UAC7B,MAAM,IAAI;AAAA,QAEd,IAAI,IAAI,WAAW,UAAU;AAAA,QAEjC,MAAM;AAAA,QACF,QAAQ,OAAO,KAAK;AAAA,UAChB,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,OAAO,QAAQ;AAAA,UACf;AAAA,UACA,UAAU,CAAC,IAAI;AAAA,QACnB,CAAC;AAAA;AAAA;AAAA,GAGZ;AAAA,EAmBY,6BAAgC,aAAa,cAAc,CAAC,MAAM,QAAQ;AAAA,IACnF,IAAI,YAAY,IAAI,UAAkB;AAAA,IACtC,iBAAiB,KAAK,MAAM,GAAG;AAAA,IAC/B,KAAK,KAAK,IAAI,kBAAkB;AAAA,IAChC,KAAK,KAAK,QAAQ,CAAC,YAAY;AAAA,MAC3B,IAAI,cAAc,QAAQ,KAAK;AAAA,QAC3B;AAAA,MACJ,QAAQ,OAAO,KAAK;AAAA,QAChB,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,OAAO,QAAQ;AAAA,QACf;AAAA,QACA,UAAU,CAAC,IAAI;AAAA,MACnB,CAAC;AAAA;AAAA,GAER;AAAA,EASY,gCAAmC,aAAa,iBAAiB,CAAC,MAAM,QAAQ;AAAA,IACzF,IAAI,YAAY,IAAI,UAAkB;AAAA,IACtC,iBAAiB,KAAK,MAAM,GAAG;AAAA,IAC/B,KAAK,KAAK,IAAI,kBAAkB;AAAA,IAChC,KAAK,KAAK,QAAQ,CAAC,YAAY;AAAA,MAC3B,IAAI,iBAAiB,QAAQ,KAAK;AAAA,QAC9B;AAAA,MACJ,QAAQ,OAAO,KAAK;AAAA,QAChB,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,OAAO,QAAQ;AAAA,QACf;AAAA,QACA,UAAU,CAAC,IAAI;AAAA,MACnB,CAAC;AAAA;AAAA,GAER;AAAA,EACY,2BAA8B,aAAa,YAAY,CAAC,MAAM,QAAQ;AAAA,IAC/E,IAAI,YAAY,IAAI,UAAkB;AAAA,IACtC,iBAAiB,KAAK,MAAM,GAAG;AAAA,GAClC;AAAA,EAwBY,0BAA6B,aAAa,WAAW,CAAC,MAAM,QAAQ;AAAA,IAC7E,iBAAiB,KAAK,MAAM,GAAG;AAAA,IAC/B,KAAK,KAAK,QAAQ,CAAC,YAAY;AAAA,MAC3B,IAAI,WAAW,QAAQ,OAAO,IAAI,GAAG;AAAA,QACjC;AAAA,MACJ,QAAQ,OAAO,KAAK;AAAA,QAChB,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,OAAO,QAAQ;AAAA,QACf;AAAA,QACA,UAAU,CAAC,IAAI;AAAA,MACnB,CAAC;AAAA;AAAA,GAER;AAAA,EACY,yCAA4C,aAAa,0BAA0B,CAAC,MAAM,QAAQ;AAAA,IAC3G,iBAAiB,KAAK,MAAM,GAAG;AAAA,IAC/B,KAAK,KAAK,QAAQ,CAAC,YAAY;AAAA,MAC3B,IAAI,IAAI,GAAG,QAAQ,KAAK;AAAA,QACpB;AAAA,MACJ,QAAQ,OAAO,KAAK;AAAA,QAChB,MAAM;AAAA,QACN,QAAQ,IAAI;AAAA,QACZ,OAAO,QAAQ;AAAA,QACf;AAAA,QACA,UAAU,CAAC,IAAI;AAAA,MACnB,CAAC;AAAA;AAAA,GAER;AAAA,EACY,6BAAgC,aAAa,cAAc,CAAC,MAAM,QAAQ;AAAA,IACnF,SAAS,KAAK,MAAM,GAAG;AAAA,IACvB,KAAK,KAAK,UAAU,KAAK,KAAK,IAAI,WAAmB;AAAA,IACrD,KAAK,KAAK,QAAQ,CAAC,SAAS,SAAS;AAAA,MACjC,IAAI,IAAI;AAAA,QACJ,IAAI;AAAA,UACA,QAAQ,QAAQ,OAAO,QAAQ,KAAK;AAAA,UAExC,OAAO,GAAG;AAAA,MACd,MAAM,QAAQ,QAAQ;AAAA,MACtB,IAAI,OAAO,UAAU,YAAY,CAAC,OAAO,MAAM,KAAK,KAAK,OAAO,SAAS,KAAK,GAAG;AAAA,QAC7E,OAAO;AAAA,MACX;AAAA,MACA,MAAM,WAAW,OAAO,UAAU,WAC5B,OAAO,MAAM,KAAK,IACd,QACA,CAAC,OAAO,SAAS,KAAK,IAClB,aACA,YACR;AAAA,MACN,QAAQ,OAAO,KAAK;AAAA,QAChB,UAAU;AAAA,QACV,MAAM;AAAA,QACN;AAAA,QACA;AAAA,WACI,WAAW,EAAE,SAAS,IAAI,CAAC;AAAA,MACnC,CAAC;AAAA,MACD,OAAO;AAAA;AAAA,GAEd;AAAA,EACY,mCAAsC,aAAa,oBAAoB,CAAC,MAAM,QAAQ;AAAA,IACxF,sBAAsB,KAAK,MAAM,GAAG;AAAA,IAC3C,WAAW,KAAK,MAAM,GAAG;AAAA,GAC5B;AAAA,EACY,8BAAiC,aAAa,eAAe,CAAC,MAAM,QAAQ;AAAA,IACrF,SAAS,KAAK,MAAM,GAAG;AAAA,IACvB,KAAK,KAAK,UAAkB;AAAA,IAC5B,KAAK,KAAK,QAAQ,CAAC,SAAS,SAAS;AAAA,MACjC,IAAI,IAAI;AAAA,QACJ,IAAI;AAAA,UACA,QAAQ,QAAQ,QAAQ,QAAQ,KAAK;AAAA,UAEzC,OAAO,GAAG;AAAA,MACd,MAAM,QAAQ,QAAQ;AAAA,MACtB,IAAI,OAAO,UAAU;AAAA,QACjB,OAAO;AAAA,MACX,QAAQ,OAAO,KAAK;AAAA,QAChB,UAAU;AAAA,QACV,MAAM;AAAA,QACN;AAAA,QACA;AAAA,MACJ,CAAC;AAAA,MACD,OAAO;AAAA;AAAA,GAEd;AAAA,EACY,6BAAgC,aAAa,cAAc,CAAC,MAAM,QAAQ;AAAA,IACnF,SAAS,KAAK,MAAM,GAAG;AAAA,IACvB,KAAK,KAAK,UAAkB;AAAA,IAC5B,KAAK,KAAK,QAAQ,CAAC,SAAS,SAAS;AAAA,MACjC,IAAI,IAAI;AAAA,QACJ,IAAI;AAAA,UACA,QAAQ,QAAQ,OAAO,QAAQ,KAAK;AAAA,UAExC,OAAO,GAAG;AAAA,MACd,IAAI,OAAO,QAAQ,UAAU;AAAA,QACzB,OAAO;AAAA,MACX,QAAQ,OAAO,KAAK;AAAA,QAChB,UAAU;AAAA,QACV,MAAM;AAAA,QACN,OAAO,QAAQ;AAAA,QACf;AAAA,MACJ,CAAC;AAAA,MACD,OAAO;AAAA;AAAA,GAEd;AAAA,EACY,mCAAsC,aAAa,oBAAoB,CAAC,MAAM,QAAQ;AAAA,IACxF,sBAAsB,KAAK,MAAM,GAAG;AAAA,IAC3C,WAAW,KAAK,MAAM,GAAG;AAAA,GAC5B;AAAA,EACY,6BAAgC,aAAa,cAAc,CAAC,MAAM,QAAQ;AAAA,IACnF,SAAS,KAAK,MAAM,GAAG;AAAA,IACvB,KAAK,KAAK,QAAQ,CAAC,SAAS,SAAS;AAAA,MACjC,MAAM,QAAQ,QAAQ;AAAA,MACtB,IAAI,OAAO,UAAU;AAAA,QACjB,OAAO;AAAA,MACX,QAAQ,OAAO,KAAK;AAAA,QAChB,UAAU;AAAA,QACV,MAAM;AAAA,QACN;AAAA,QACA;AAAA,MACJ,CAAC;AAAA,MACD,OAAO;AAAA;AAAA,GAEd;AAAA,EACY,gCAAmC,aAAa,iBAAiB,CAAC,MAAM,QAAQ;AAAA,IACzF,SAAS,KAAK,MAAM,GAAG;AAAA,IACvB,KAAK,KAAK,UAAkB;AAAA,IAC5B,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC;AAAA,IACtC,KAAK,KAAK,QAAQ,CAAC,SAAS,SAAS;AAAA,MACjC,MAAM,QAAQ,QAAQ;AAAA,MACtB,IAAI,OAAO,UAAU;AAAA,QACjB,OAAO;AAAA,MACX,QAAQ,OAAO,KAAK;AAAA,QAChB,UAAU;AAAA,QACV,MAAM;AAAA,QACN;AAAA,QACA;AAAA,MACJ,CAAC;AAAA,MACD,OAAO;AAAA;AAAA,GAEd;AAAA,EACY,2BAA8B,aAAa,YAAY,CAAC,MAAM,QAAQ;AAAA,IAC/E,SAAS,KAAK,MAAM,GAAG;AAAA,IACvB,KAAK,KAAK,UAAkB;AAAA,IAC5B,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC;AAAA,IACjC,KAAK,KAAK,QAAQ,CAAC,SAAS,SAAS;AAAA,MACjC,MAAM,QAAQ,QAAQ;AAAA,MACtB,IAAI,UAAU;AAAA,QACV,OAAO;AAAA,MACX,QAAQ,OAAO,KAAK;AAAA,QAChB,UAAU;AAAA,QACV,MAAM;AAAA,QACN;AAAA,QACA;AAAA,MACJ,CAAC;AAAA,MACD,OAAO;AAAA;AAAA,GAEd;AAAA,EACY,0BAA6B,aAAa,WAAW,CAAC,MAAM,QAAQ;AAAA,IAC7E,SAAS,KAAK,MAAM,GAAG;AAAA,IACvB,KAAK,KAAK,QAAQ,CAAC,YAAY;AAAA,GAClC;AAAA,EACY,8BAAiC,aAAa,eAAe,CAAC,MAAM,QAAQ;AAAA,IACrF,SAAS,KAAK,MAAM,GAAG;AAAA,IACvB,KAAK,KAAK,QAAQ,CAAC,YAAY;AAAA,GAClC;AAAA,EACY,4BAA+B,aAAa,aAAa,CAAC,MAAM,QAAQ;AAAA,IACjF,SAAS,KAAK,MAAM,GAAG;AAAA,IACvB,KAAK,KAAK,QAAQ,CAAC,SAAS,SAAS;AAAA,MACjC,QAAQ,OAAO,KAAK;AAAA,QAChB,UAAU;AAAA,QACV,MAAM;AAAA,QACN,OAAO,QAAQ;AAAA,QACf;AAAA,MACJ,CAAC;AAAA,MACD,OAAO;AAAA;AAAA,GAEd;AAAA,EACY,2BAA8B,aAAa,YAAY,CAAC,MAAM,QAAQ;AAAA,IAC/E,SAAS,KAAK,MAAM,GAAG;AAAA,IACvB,KAAK,KAAK,QAAQ,CAAC,SAAS,SAAS;AAAA,MACjC,MAAM,QAAQ,QAAQ;AAAA,MACtB,IAAI,OAAO,UAAU;AAAA,QACjB,OAAO;AAAA,MACX,QAAQ,OAAO,KAAK;AAAA,QAChB,UAAU;AAAA,QACV,MAAM;AAAA,QACN;AAAA,QACA;AAAA,MACJ,CAAC;AAAA,MACD,OAAO;AAAA;AAAA,GAEd;AAAA,EACY,2BAA8B,aAAa,YAAY,CAAC,MAAM,QAAQ;AAAA,IAC/E,SAAS,KAAK,MAAM,GAAG;AAAA,IACvB,KAAK,KAAK,QAAQ,CAAC,SAAS,SAAS;AAAA,MACjC,IAAI,IAAI,QAAQ;AAAA,QACZ,IAAI;AAAA,UACA,QAAQ,QAAQ,IAAI,KAAK,QAAQ,KAAK;AAAA,UAE1C,OAAO,MAAM;AAAA,MACjB;AAAA,MACA,MAAM,QAAQ,QAAQ;AAAA,MACtB,MAAM,SAAS,iBAAiB;AAAA,MAChC,MAAM,cAAc,UAAU,CAAC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAAA,MAC3D,IAAI;AAAA,QACA,OAAO;AAAA,MACX,QAAQ,OAAO,KAAK;AAAA,QAChB,UAAU;AAAA,QACV,MAAM;AAAA,QACN;AAAA,WACI,SAAS,EAAE,UAAU,eAAe,IAAI,CAAC;AAAA,QAC7C;AAAA,MACJ,CAAC;AAAA,MACD,OAAO;AAAA;AAAA,GAEd;AAAA,EAOY,4BAA+B,aAAa,aAAa,CAAC,MAAM,QAAQ;AAAA,IACjF,SAAS,KAAK,MAAM,GAAG;AAAA,IACvB,KAAK,KAAK,QAAQ,CAAC,SAAS,QAAQ;AAAA,MAChC,MAAM,QAAQ,QAAQ;AAAA,MACtB,IAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AAAA,QACvB,QAAQ,OAAO,KAAK;AAAA,UAChB,UAAU;AAAA,UACV,MAAM;AAAA,UACN;AAAA,UACA;AAAA,QACJ,CAAC;AAAA,QACD,OAAO;AAAA,MACX;AAAA,MACA,QAAQ,QAAQ,MAAM,MAAM,MAAM;AAAA,MAClC,MAAM,QAAQ,CAAC;AAAA,MACf,SAAS,IAAI,EAAG,IAAI,MAAM,QAAQ,KAAK;AAAA,QACnC,MAAM,OAAO,MAAM;AAAA,QACnB,MAAM,SAAS,IAAI,QAAQ,KAAK,IAAI;AAAA,UAChC,OAAO;AAAA,UACP,QAAQ,CAAC;AAAA,QACb,GAAG,GAAG;AAAA,QACN,IAAI,kBAAkB,SAAS;AAAA,UAC3B,MAAM,KAAK,OAAO,KAAK,CAAC,YAAW,kBAAkB,SAAQ,SAAS,CAAC,CAAC,CAAC;AAAA,QAC7E,EACK;AAAA,UACD,kBAAkB,QAAQ,SAAS,CAAC;AAAA;AAAA,MAE5C;AAAA,MACA,IAAI,MAAM,QAAQ;AAAA,QACd,OAAO,QAAQ,IAAI,KAAK,EAAE,KAAK,MAAM,OAAO;AAAA,MAChD;AAAA,MACA,OAAO;AAAA;AAAA,GAEd;AAAA,EAsFY,6BAAgC,aAAa,cAAc,CAAC,MAAM,QAAQ;AAAA,IAEnF,SAAS,KAAK,MAAM,GAAG;AAAA,IAEvB,MAAM,OAAO,OAAO,yBAAyB,KAAK,OAAO;AAAA,IACzD,IAAI,CAAC,MAAM,KAAK;AAAA,MACZ,MAAM,KAAK,IAAI;AAAA,MACf,OAAO,eAAe,KAAK,SAAS;AAAA,QAChC,KAAK,MAAM;AAAA,UACP,MAAM,QAAQ,KAAK,GAAG;AAAA,UACtB,OAAO,eAAe,KAAK,SAAS;AAAA,YAChC,OAAO;AAAA,UACX,CAAC;AAAA,UACD,OAAO;AAAA;AAAA,MAEf,CAAC;AAAA,IACL;AAAA,IACA,MAAM,cAAmB,OAAO,MAAM,aAAa,GAAG,CAAC;AAAA,IAClD,WAAW,KAAK,MAAM,cAAc,MAAM;AAAA,MAC3C,MAAM,QAAQ,IAAI;AAAA,MAClB,MAAM,aAAa,CAAC;AAAA,MACpB,WAAW,OAAO,OAAO;AAAA,QACrB,MAAM,QAAQ,MAAM,KAAK;AAAA,QACzB,IAAI,MAAM,QAAQ;AAAA,UACd,WAAW,SAAS,WAAW,OAAO,IAAI;AAAA,UAC1C,WAAW,KAAK,MAAM;AAAA,YAClB,WAAW,KAAK,IAAI,CAAC;AAAA,QAC7B;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,KACV;AAAA,IACD,MAAM,YAAgB;AAAA,IACtB,MAAM,WAAW,IAAI;AAAA,IACrB,IAAI;AAAA,IACJ,KAAK,KAAK,QAAQ,CAAC,SAAS,QAAQ;AAAA,MAChC,UAAU,QAAQ,YAAY;AAAA,MAC9B,MAAM,QAAQ,QAAQ;AAAA,MACtB,IAAI,CAAC,UAAS,KAAK,GAAG;AAAA,QAClB,QAAQ,OAAO,KAAK;AAAA,UAChB,UAAU;AAAA,UACV,MAAM;AAAA,UACN;AAAA,UACA;AAAA,QACJ,CAAC;AAAA,QACD,OAAO;AAAA,MACX;AAAA,MACA,QAAQ,QAAQ,CAAC;AAAA,MACjB,MAAM,QAAQ,CAAC;AAAA,MACf,MAAM,QAAQ,MAAM;AAAA,MACpB,WAAW,OAAO,MAAM,MAAM;AAAA,QAC1B,MAAM,KAAK,MAAM;AAAA,QACjB,MAAM,eAAe,GAAG,KAAK,UAAU;AAAA,QACvC,MAAM,gBAAgB,GAAG,KAAK,WAAW;AAAA,QACzC,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE,OAAO,MAAM,MAAM,QAAQ,CAAC,EAAE,GAAG,GAAG;AAAA,QAC5D,IAAI,aAAa,SAAS;AAAA,UACtB,MAAM,KAAK,EAAE,KAAK,CAAC,OAAM,qBAAqB,IAAG,SAAS,KAAK,OAAO,cAAc,aAAa,CAAC,CAAC;AAAA,QACvG,EACK;AAAA,UACD,qBAAqB,GAAG,SAAS,KAAK,OAAO,cAAc,aAAa;AAAA;AAAA,MAEhF;AAAA,MACA,IAAI,CAAC,UAAU;AAAA,QACX,OAAO,MAAM,SAAS,QAAQ,IAAI,KAAK,EAAE,KAAK,MAAM,OAAO,IAAI;AAAA,MACnE;AAAA,MACA,OAAO,eAAe,OAAO,OAAO,SAAS,KAAK,YAAY,OAAO,IAAI;AAAA;AAAA,GAEhF;AAAA,EACY,gCAAmC,aAAa,iBAAiB,CAAC,MAAM,QAAQ;AAAA,IAEzF,WAAW,KAAK,MAAM,GAAG;AAAA,IACzB,MAAM,aAAa,KAAK,KAAK;AAAA,IAC7B,MAAM,cAAmB,OAAO,MAAM,aAAa,GAAG,CAAC;AAAA,IACvD,MAAM,mBAAmB,CAAC,UAAU;AAAA,MAChC,MAAM,MAAM,IAAI,IAAI,CAAC,SAAS,WAAW,KAAK,CAAC;AAAA,MAC/C,MAAM,aAAa,YAAY;AAAA,MAC/B,MAAM,WAAW,CAAC,QAAQ;AAAA,QACtB,MAAM,IAAS,IAAI,GAAG;AAAA,QACtB,OAAO,SAAS,8BAA8B;AAAA;AAAA,MAElD,IAAI,MAAM,8BAA8B;AAAA,MACxC,MAAM,MAAM,OAAO,OAAO,IAAI;AAAA,MAC9B,IAAI,UAAU;AAAA,MACd,WAAW,OAAO,WAAW,MAAM;AAAA,QAC/B,IAAI,OAAO,OAAO;AAAA,MACtB;AAAA,MAEA,IAAI,MAAM,uBAAuB;AAAA,MACjC,WAAW,OAAO,WAAW,MAAM;AAAA,QAC/B,MAAM,KAAK,IAAI;AAAA,QACf,MAAM,IAAS,IAAI,GAAG;AAAA,QACtB,MAAM,SAAS,MAAM;AAAA,QACrB,MAAM,eAAe,QAAQ,MAAM,UAAU;AAAA,QAC7C,MAAM,gBAAgB,QAAQ,MAAM,WAAW;AAAA,QAC/C,IAAI,MAAM,SAAS,QAAQ,SAAS,GAAG,IAAI;AAAA,QAC3C,IAAI,gBAAgB,eAAe;AAAA,UAE/B,IAAI,MAAM;AAAA,cACZ;AAAA,gBACE;AAAA,qDACqC;AAAA;AAAA,kCAEnB,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA,cAK1C;AAAA,gBACE;AAAA,wBACQ;AAAA;AAAA;AAAA,sBAGF,QAAQ;AAAA;AAAA;AAAA,OAGvB;AAAA,QACK,EACK,SAAI,CAAC,cAAc;AAAA,UACpB,IAAI,MAAM;AAAA,gBACV,gBAAgB;AAAA,cAClB;AAAA,mDACqC;AAAA;AAAA,gCAEnB,sBAAsB;AAAA;AAAA;AAAA,eAGvC,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,qBAKZ;AAAA;AAAA;AAAA;AAAA,cAIP;AAAA,gBACE;AAAA,wBACQ;AAAA;AAAA,wBAEA,QAAQ;AAAA;AAAA;AAAA;AAAA,OAIzB;AAAA,QACK,EACK;AAAA,UACD,IAAI,MAAM;AAAA,cACZ;AAAA,mDACqC;AAAA;AAAA,gCAEnB,sBAAsB;AAAA;AAAA;AAAA;AAAA,cAIxC;AAAA,gBACE;AAAA,wBACQ;AAAA;AAAA;AAAA,sBAGF,QAAQ;AAAA;AAAA;AAAA,OAGvB;AAAA;AAAA,MAEC;AAAA,MACA,IAAI,MAAM,4BAA4B;AAAA,MACtC,IAAI,MAAM,iBAAiB;AAAA,MAC3B,MAAM,KAAK,IAAI,QAAQ;AAAA,MACvB,OAAO,CAAC,SAAS,QAAQ,GAAG,OAAO,SAAS,GAAG;AAAA;AAAA,IAEnD,IAAI;AAAA,IACJ,MAAM,YAAgB;AAAA,IACtB,MAAM,MAAM,CAAM,aAAa;AAAA,IAC/B,MAAM,cAAkB;AAAA,IACxB,MAAM,cAAc,OAAO,YAAW;AAAA,IACtC,MAAM,WAAW,IAAI;AAAA,IACrB,IAAI;AAAA,IACJ,KAAK,KAAK,QAAQ,CAAC,SAAS,QAAQ;AAAA,MAChC,UAAU,QAAQ,YAAY;AAAA,MAC9B,MAAM,QAAQ,QAAQ;AAAA,MACtB,IAAI,CAAC,UAAS,KAAK,GAAG;AAAA,QAClB,QAAQ,OAAO,KAAK;AAAA,UAChB,UAAU;AAAA,UACV,MAAM;AAAA,UACN;AAAA,UACA;AAAA,QACJ,CAAC;AAAA,QACD,OAAO;AAAA,MACX;AAAA,MACA,IAAI,OAAO,eAAe,KAAK,UAAU,SAAS,IAAI,YAAY,MAAM;AAAA,QAEpE,IAAI,CAAC;AAAA,UACD,WAAW,iBAAiB,IAAI,KAAK;AAAA,QACzC,UAAU,SAAS,SAAS,GAAG;AAAA,QAC/B,IAAI,CAAC;AAAA,UACD,OAAO;AAAA,QACX,OAAO,eAAe,CAAC,GAAG,OAAO,SAAS,KAAK,OAAO,IAAI;AAAA,MAC9D;AAAA,MACA,OAAO,WAAW,SAAS,GAAG;AAAA;AAAA,GAErC;AAAA,EAqBY,4BAA+B,aAAa,aAAa,CAAC,MAAM,QAAQ;AAAA,IACjF,SAAS,KAAK,MAAM,GAAG;AAAA,IAClB,WAAW,KAAK,MAAM,SAAS,MAAM,IAAI,QAAQ,KAAK,CAAC,MAAM,EAAE,KAAK,UAAU,UAAU,IAAI,aAAa,SAAS;AAAA,IAClH,WAAW,KAAK,MAAM,UAAU,MAAM,IAAI,QAAQ,KAAK,CAAC,MAAM,EAAE,KAAK,WAAW,UAAU,IAAI,aAAa,SAAS;AAAA,IACpH,WAAW,KAAK,MAAM,UAAU,MAAM;AAAA,MACvC,IAAI,IAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,KAAK,MAAM,GAAG;AAAA,QACzC,OAAO,IAAI,IAAI,IAAI,QAAQ,QAAQ,CAAC,WAAW,MAAM,KAAK,OAAO,KAAK,MAAM,CAAC,CAAC;AAAA,MAClF;AAAA,MACA;AAAA,KACH;AAAA,IACI,WAAW,KAAK,MAAM,WAAW,MAAM;AAAA,MACxC,IAAI,IAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,KAAK,OAAO,GAAG;AAAA,QAC1C,MAAM,WAAW,IAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,KAAK,OAAO;AAAA,QACtD,OAAO,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,MAAW,WAAW,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK;AAAA,MACvF;AAAA,MACA;AAAA,KACH;AAAA,IACD,MAAM,QAAQ,IAAI,QAAQ,WAAW,IAAI,IAAI,QAAQ,GAAG,KAAK,MAAM;AAAA,IACnE,KAAK,KAAK,QAAQ,CAAC,SAAS,QAAQ;AAAA,MAChC,IAAI,OAAO;AAAA,QACP,OAAO,MAAM,SAAS,GAAG;AAAA,MAC7B;AAAA,MACA,IAAI,QAAQ;AAAA,MACZ,MAAM,UAAU,CAAC;AAAA,MACjB,WAAW,UAAU,IAAI,SAAS;AAAA,QAC9B,MAAM,SAAS,OAAO,KAAK,IAAI;AAAA,UAC3B,OAAO,QAAQ;AAAA,UACf,QAAQ,CAAC;AAAA,QACb,GAAG,GAAG;AAAA,QACN,IAAI,kBAAkB,SAAS;AAAA,UAC3B,QAAQ,KAAK,MAAM;AAAA,UACnB,QAAQ;AAAA,QACZ,EACK;AAAA,UACD,IAAI,OAAO,OAAO,WAAW;AAAA,YACzB,OAAO;AAAA,UACX,QAAQ,KAAK,MAAM;AAAA;AAAA,MAE3B;AAAA,MACA,IAAI,CAAC;AAAA,QACD,OAAO,mBAAmB,SAAS,SAAS,MAAM,GAAG;AAAA,MACzD,OAAO,QAAQ,IAAI,OAAO,EAAE,KAAK,CAAC,aAAY;AAAA,QAC1C,OAAO,mBAAmB,UAAS,SAAS,MAAM,GAAG;AAAA,OACxD;AAAA;AAAA,GAER;AAAA,EA4BY,0BAA6B,aAAa,WAAW,CAAC,MAAM,QAAQ;AAAA,IAC7E,UAAU,KAAK,MAAM,GAAG;AAAA,IACxB,IAAI,YAAY;AAAA,IAChB,MAAM,QAAQ,IAAI,QAAQ,WAAW,IAAI,IAAI,QAAQ,GAAG,KAAK,MAAM;AAAA,IACnE,KAAK,KAAK,QAAQ,CAAC,SAAS,QAAQ;AAAA,MAChC,IAAI,OAAO;AAAA,QACP,OAAO,MAAM,SAAS,GAAG;AAAA,MAC7B;AAAA,MACA,IAAI,QAAQ;AAAA,MACZ,MAAM,UAAU,CAAC;AAAA,MACjB,WAAW,UAAU,IAAI,SAAS;AAAA,QAC9B,MAAM,SAAS,OAAO,KAAK,IAAI;AAAA,UAC3B,OAAO,QAAQ;AAAA,UACf,QAAQ,CAAC;AAAA,QACb,GAAG,GAAG;AAAA,QACN,IAAI,kBAAkB,SAAS;AAAA,UAC3B,QAAQ,KAAK,MAAM;AAAA,UACnB,QAAQ;AAAA,QACZ,EACK;AAAA,UACD,QAAQ,KAAK,MAAM;AAAA;AAAA,MAE3B;AAAA,MACA,IAAI,CAAC;AAAA,QACD,OAAO,4BAA4B,SAAS,SAAS,MAAM,GAAG;AAAA,MAClE,OAAO,QAAQ,IAAI,OAAO,EAAE,KAAK,CAAC,aAAY;AAAA,QAC1C,OAAO,4BAA4B,UAAS,SAAS,MAAM,GAAG;AAAA,OACjE;AAAA;AAAA,GAER;AAAA,EACY,yCAER,aAAa,0BAA0B,CAAC,MAAM,QAAQ;AAAA,IACvD,IAAI,YAAY;AAAA,IAChB,UAAU,KAAK,MAAM,GAAG;AAAA,IACxB,MAAM,SAAS,KAAK,KAAK;AAAA,IACpB,WAAW,KAAK,MAAM,cAAc,MAAM;AAAA,MAC3C,MAAM,aAAa,CAAC;AAAA,MACpB,WAAW,UAAU,IAAI,SAAS;AAAA,QAC9B,MAAM,KAAK,OAAO,KAAK;AAAA,QACvB,IAAI,CAAC,MAAM,OAAO,KAAK,EAAE,EAAE,WAAW;AAAA,UAClC,MAAM,IAAI,MAAM,gDAAgD,IAAI,QAAQ,QAAQ,MAAM,IAAI;AAAA,QAClG,YAAY,GAAG,MAAM,OAAO,QAAQ,EAAE,GAAG;AAAA,UACrC,IAAI,CAAC,WAAW;AAAA,YACZ,WAAW,KAAK,IAAI;AAAA,UACxB,WAAW,OAAO,GAAG;AAAA,YACjB,WAAW,GAAG,IAAI,GAAG;AAAA,UACzB;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,KACV;AAAA,IACD,MAAM,OAAY,OAAO,MAAM;AAAA,MAC3B,MAAM,OAAO,IAAI;AAAA,MACjB,MAAM,MAAM,IAAI;AAAA,MAChB,WAAW,KAAK,MAAM;AAAA,QAClB,MAAM,SAAS,EAAE,KAAK,aAAa,IAAI;AAAA,QACvC,IAAI,CAAC,UAAU,OAAO,SAAS;AAAA,UAC3B,MAAM,IAAI,MAAM,gDAAgD,IAAI,QAAQ,QAAQ,CAAC,IAAI;AAAA,QAC7F,WAAW,KAAK,QAAQ;AAAA,UACpB,IAAI,IAAI,IAAI,CAAC,GAAG;AAAA,YACZ,MAAM,IAAI,MAAM,kCAAkC,OAAO,CAAC,IAAI;AAAA,UAClE;AAAA,UACA,IAAI,IAAI,GAAG,CAAC;AAAA,QAChB;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,KACV;AAAA,IACD,KAAK,KAAK,QAAQ,CAAC,SAAS,QAAQ;AAAA,MAChC,MAAM,QAAQ,QAAQ;AAAA,MACtB,IAAI,CAAM,SAAS,KAAK,GAAG;AAAA,QACvB,QAAQ,OAAO,KAAK;AAAA,UAChB,MAAM;AAAA,UACN,UAAU;AAAA,UACV;AAAA,UACA;AAAA,QACJ,CAAC;AAAA,QACD,OAAO;AAAA,MACX;AAAA,MACA,MAAM,MAAM,KAAK,MAAM,IAAI,QAAQ,IAAI,cAAc;AAAA,MACrD,IAAI,KAAK;AAAA,QACL,OAAO,IAAI,KAAK,IAAI,SAAS,GAAG;AAAA,MACpC;AAAA,MAKA,IAAI,IAAI,iBAAiB,IAAI,cAAc,YAAY;AAAA,QACnD,OAAO,OAAO,SAAS,GAAG;AAAA,MAC9B;AAAA,MAEA,QAAQ,OAAO,KAAK;AAAA,QAChB,MAAM;AAAA,QACN,QAAQ,CAAC;AAAA,QACT,MAAM;AAAA,QACN,eAAe,IAAI;AAAA,QACnB,SAAS,MAAM,KAAK,KAAK,MAAM,KAAK,CAAC;AAAA,QACrC;AAAA,QACA,MAAM,CAAC,IAAI,aAAa;AAAA,QACxB;AAAA,MACJ,CAAC;AAAA,MACD,OAAO;AAAA;AAAA,GAEd;AAAA,EACY,mCAAsC,aAAa,oBAAoB,CAAC,MAAM,QAAQ;AAAA,IAC/F,SAAS,KAAK,MAAM,GAAG;AAAA,IACvB,KAAK,KAAK,QAAQ,CAAC,SAAS,QAAQ;AAAA,MAChC,MAAM,QAAQ,QAAQ;AAAA,MACtB,MAAM,OAAO,IAAI,KAAK,KAAK,IAAI,EAAE,OAAO,OAAO,QAAQ,CAAC,EAAE,GAAG,GAAG;AAAA,MAChE,MAAM,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,OAAO,OAAO,QAAQ,CAAC,EAAE,GAAG,GAAG;AAAA,MAClE,MAAM,QAAQ,gBAAgB,WAAW,iBAAiB;AAAA,MAC1D,IAAI,OAAO;AAAA,QACP,OAAO,QAAQ,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,OAAM,YAAW;AAAA,UACtD,OAAO,0BAA0B,SAAS,OAAM,MAAK;AAAA,SACxD;AAAA,MACL;AAAA,MACA,OAAO,0BAA0B,SAAS,MAAM,KAAK;AAAA;AAAA,GAE5D;AAAA,EA0FY,4BAA+B,aAAa,aAAa,CAAC,MAAM,QAAQ;AAAA,IACjF,SAAS,KAAK,MAAM,GAAG;AAAA,IACvB,MAAM,QAAQ,IAAI;AAAA,IAClB,KAAK,KAAK,QAAQ,CAAC,SAAS,QAAQ;AAAA,MAChC,MAAM,QAAQ,QAAQ;AAAA,MACtB,IAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AAAA,QACvB,QAAQ,OAAO,KAAK;AAAA,UAChB;AAAA,UACA;AAAA,UACA,UAAU;AAAA,UACV,MAAM;AAAA,QACV,CAAC;AAAA,QACD,OAAO;AAAA,MACX;AAAA,MACA,QAAQ,QAAQ,CAAC;AAAA,MACjB,MAAM,QAAQ,CAAC;AAAA,MACf,MAAM,aAAa,iBAAiB,OAAO,OAAO;AAAA,MAClD,MAAM,cAAc,iBAAiB,OAAO,QAAQ;AAAA,MACpD,IAAI,CAAC,IAAI,MAAM;AAAA,QACX,IAAI,MAAM,SAAS,YAAY;AAAA,UAC3B,QAAQ,OAAO,KAAK;AAAA,YAChB,MAAM;AAAA,YACN,SAAS;AAAA,YACT,WAAW;AAAA,YACX;AAAA,YACA;AAAA,YACA,QAAQ;AAAA,UACZ,CAAC;AAAA,UACD,OAAO;AAAA,QACX;AAAA,QACA,IAAI,MAAM,SAAS,MAAM,QAAQ;AAAA,UAC7B,QAAQ,OAAO,KAAK;AAAA,YAChB,MAAM;AAAA,YACN,SAAS,MAAM;AAAA,YACf,WAAW;AAAA,YACX;AAAA,YACA;AAAA,YACA,QAAQ;AAAA,UACZ,CAAC;AAAA,QACL;AAAA,MACJ;AAAA,MAKA,MAAM,cAAc,IAAI,MAAM,MAAM,MAAM;AAAA,MAC1C,SAAS,IAAI,EAAG,IAAI,MAAM,QAAQ,KAAK;AAAA,QACnC,MAAM,IAAI,MAAM,GAAG,KAAK,IAAI,EAAE,OAAO,MAAM,IAAI,QAAQ,CAAC,EAAE,GAAG,GAAG;AAAA,QAChE,IAAI,aAAa,SAAS;AAAA,UACtB,MAAM,KAAK,EAAE,KAAK,CAAC,OAAO;AAAA,YACtB,YAAY,KAAK;AAAA,WACpB,CAAC;AAAA,QACN,EACK;AAAA,UACD,YAAY,KAAK;AAAA;AAAA,MAEzB;AAAA,MACA,IAAI,IAAI,MAAM;AAAA,QACV,IAAI,IAAI,MAAM,SAAS;AAAA,QACvB,MAAM,OAAO,MAAM,MAAM,MAAM,MAAM;AAAA,QACrC,WAAW,MAAM,MAAM;AAAA,UACnB;AAAA,UACA,MAAM,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,OAAO,IAAI,QAAQ,CAAC,EAAE,GAAG,GAAG;AAAA,UAC/D,IAAI,kBAAkB,SAAS;AAAA,YAC3B,MAAM,KAAK,OAAO,KAAK,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAAC,CAAC,CAAC;AAAA,UACnE,EACK;AAAA,YACD,kBAAkB,QAAQ,SAAS,CAAC;AAAA;AAAA,QAE5C;AAAA,MACJ;AAAA,MACA,IAAI,MAAM,QAAQ;AAAA,QACd,OAAO,QAAQ,IAAI,KAAK,EAAE,KAAK,MAAM,mBAAmB,aAAa,SAAS,OAAO,OAAO,WAAW,CAAC;AAAA,MAC5G;AAAA,MACA,OAAO,mBAAmB,aAAa,SAAS,OAAO,OAAO,WAAW;AAAA;AAAA,GAEhF;AAAA,EA8CY,6BAAgC,aAAa,cAAc,CAAC,MAAM,QAAQ;AAAA,IACnF,SAAS,KAAK,MAAM,GAAG;AAAA,IACvB,KAAK,KAAK,QAAQ,CAAC,SAAS,QAAQ;AAAA,MAChC,MAAM,QAAQ,QAAQ;AAAA,MACtB,IAAI,CAAM,cAAc,KAAK,GAAG;AAAA,QAC5B,QAAQ,OAAO,KAAK;AAAA,UAChB,UAAU;AAAA,UACV,MAAM;AAAA,UACN;AAAA,UACA;AAAA,QACJ,CAAC;AAAA,QACD,OAAO;AAAA,MACX;AAAA,MACA,MAAM,QAAQ,CAAC;AAAA,MACf,MAAM,SAAS,IAAI,QAAQ,KAAK;AAAA,MAChC,IAAI,QAAQ;AAAA,QACR,QAAQ,QAAQ,CAAC;AAAA,QACjB,MAAM,aAAa,IAAI;AAAA,QACvB,WAAW,OAAO,QAAQ;AAAA,UACtB,IAAI,OAAO,QAAQ,YAAY,OAAO,QAAQ,YAAY,OAAO,QAAQ,UAAU;AAAA,YAC/E,WAAW,IAAI,OAAO,QAAQ,WAAW,IAAI,SAAS,IAAI,GAAG;AAAA,YAC7D,MAAM,YAAY,IAAI,QAAQ,KAAK,IAAI,EAAE,OAAO,KAAK,QAAQ,CAAC,EAAE,GAAG,GAAG;AAAA,YACtE,IAAI,qBAAqB,SAAS;AAAA,cAC9B,MAAM,IAAI,MAAM,sDAAsD;AAAA,YAC1E;AAAA,YACA,IAAI,UAAU,OAAO,QAAQ;AAAA,cACzB,QAAQ,OAAO,KAAK;AAAA,gBAChB,MAAM;AAAA,gBACN,QAAQ;AAAA,gBACR,QAAQ,UAAU,OAAO,IAAI,CAAC,QAAa,cAAc,KAAK,KAAU,OAAO,CAAC,CAAC;AAAA,gBACjF,OAAO;AAAA,gBACP,MAAM,CAAC,GAAG;AAAA,gBACV;AAAA,cACJ,CAAC;AAAA,cACD;AAAA,YACJ;AAAA,YACA,MAAM,SAAS,UAAU;AAAA,YACzB,MAAM,SAAS,IAAI,UAAU,KAAK,IAAI,EAAE,OAAO,MAAM,MAAM,QAAQ,CAAC,EAAE,GAAG,GAAG;AAAA,YAC5E,IAAI,kBAAkB,SAAS;AAAA,cAC3B,MAAM,KAAK,OAAO,KAAK,CAAC,YAAW;AAAA,gBAC/B,IAAI,QAAO,OAAO,QAAQ;AAAA,kBACtB,QAAQ,OAAO,KAAK,GAAQ,aAAa,KAAK,QAAO,MAAM,CAAC;AAAA,gBAChE;AAAA,gBACA,QAAQ,MAAM,UAAU,QAAO;AAAA,eAClC,CAAC;AAAA,YACN,EACK;AAAA,cACD,IAAI,OAAO,OAAO,QAAQ;AAAA,gBACtB,QAAQ,OAAO,KAAK,GAAQ,aAAa,KAAK,OAAO,MAAM,CAAC;AAAA,cAChE;AAAA,cACA,QAAQ,MAAM,UAAU,OAAO;AAAA;AAAA,UAEvC;AAAA,QACJ;AAAA,QACA,IAAI;AAAA,QACJ,WAAW,OAAO,OAAO;AAAA,UACrB,IAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AAAA,YACtB,eAAe,gBAAgB,CAAC;AAAA,YAChC,aAAa,KAAK,GAAG;AAAA,UACzB;AAAA,QACJ;AAAA,QACA,IAAI,gBAAgB,aAAa,SAAS,GAAG;AAAA,UACzC,QAAQ,OAAO,KAAK;AAAA,YAChB,MAAM;AAAA,YACN;AAAA,YACA;AAAA,YACA,MAAM;AAAA,UACV,CAAC;AAAA,QACL;AAAA,MACJ,EACK;AAAA,QACD,QAAQ,QAAQ,CAAC;AAAA,QAEjB,WAAW,OAAO,QAAQ,QAAQ,KAAK,GAAG;AAAA,UACtC,IAAI,QAAQ;AAAA,YACR;AAAA,UACJ,IAAI,CAAC,OAAO,UAAU,qBAAqB,KAAK,OAAO,GAAG;AAAA,YACtD;AAAA,UACJ,IAAI,YAAY,IAAI,QAAQ,KAAK,IAAI,EAAE,OAAO,KAAK,QAAQ,CAAC,EAAE,GAAG,GAAG;AAAA,UACpE,IAAI,qBAAqB,SAAS;AAAA,YAC9B,MAAM,IAAI,MAAM,sDAAsD;AAAA,UAC1E;AAAA,UAGA,MAAM,kBAAkB,OAAO,QAAQ,YAAoB,OAAO,KAAK,GAAG,KAAK,UAAU,OAAO;AAAA,UAChG,IAAI,iBAAiB;AAAA,YACjB,MAAM,cAAc,IAAI,QAAQ,KAAK,IAAI,EAAE,OAAO,OAAO,GAAG,GAAG,QAAQ,CAAC,EAAE,GAAG,GAAG;AAAA,YAChF,IAAI,uBAAuB,SAAS;AAAA,cAChC,MAAM,IAAI,MAAM,sDAAsD;AAAA,YAC1E;AAAA,YACA,IAAI,YAAY,OAAO,WAAW,GAAG;AAAA,cACjC,YAAY;AAAA,YAChB;AAAA,UACJ;AAAA,UACA,IAAI,UAAU,OAAO,QAAQ;AAAA,YACzB,IAAI,IAAI,SAAS,SAAS;AAAA,cAEtB,QAAQ,MAAM,OAAO,MAAM;AAAA,YAC/B,EACK;AAAA,cAED,QAAQ,OAAO,KAAK;AAAA,gBAChB,MAAM;AAAA,gBACN,QAAQ;AAAA,gBACR,QAAQ,UAAU,OAAO,IAAI,CAAC,QAAa,cAAc,KAAK,KAAU,OAAO,CAAC,CAAC;AAAA,gBACjF,OAAO;AAAA,gBACP,MAAM,CAAC,GAAG;AAAA,gBACV;AAAA,cACJ,CAAC;AAAA;AAAA,YAEL;AAAA,UACJ;AAAA,UACA,MAAM,SAAS,IAAI,UAAU,KAAK,IAAI,EAAE,OAAO,MAAM,MAAM,QAAQ,CAAC,EAAE,GAAG,GAAG;AAAA,UAC5E,IAAI,kBAAkB,SAAS;AAAA,YAC3B,MAAM,KAAK,OAAO,KAAK,CAAC,YAAW;AAAA,cAC/B,IAAI,QAAO,OAAO,QAAQ;AAAA,gBACtB,QAAQ,OAAO,KAAK,GAAQ,aAAa,KAAK,QAAO,MAAM,CAAC;AAAA,cAChE;AAAA,cACA,QAAQ,MAAM,UAAU,SAAS,QAAO;AAAA,aAC3C,CAAC;AAAA,UACN,EACK;AAAA,YACD,IAAI,OAAO,OAAO,QAAQ;AAAA,cACtB,QAAQ,OAAO,KAAK,GAAQ,aAAa,KAAK,OAAO,MAAM,CAAC;AAAA,YAChE;AAAA,YACA,QAAQ,MAAM,UAAU,SAAS,OAAO;AAAA;AAAA,QAEhD;AAAA;AAAA,MAEJ,IAAI,MAAM,QAAQ;AAAA,QACd,OAAO,QAAQ,IAAI,KAAK,EAAE,KAAK,MAAM,OAAO;AAAA,MAChD;AAAA,MACA,OAAO;AAAA;AAAA,GAEd;AAAA,EACY,0BAA6B,aAAa,WAAW,CAAC,MAAM,QAAQ;AAAA,IAC7E,SAAS,KAAK,MAAM,GAAG;AAAA,IACvB,KAAK,KAAK,QAAQ,CAAC,SAAS,QAAQ;AAAA,MAChC,MAAM,QAAQ,QAAQ;AAAA,MACtB,IAAI,EAAE,iBAAiB,MAAM;AAAA,QACzB,QAAQ,OAAO,KAAK;AAAA,UAChB,UAAU;AAAA,UACV,MAAM;AAAA,UACN;AAAA,UACA;AAAA,QACJ,CAAC;AAAA,QACD,OAAO;AAAA,MACX;AAAA,MACA,MAAM,QAAQ,CAAC;AAAA,MACf,QAAQ,QAAQ,IAAI;AAAA,MACpB,YAAY,KAAK,UAAU,OAAO;AAAA,QAC9B,MAAM,YAAY,IAAI,QAAQ,KAAK,IAAI,EAAE,OAAO,KAAK,QAAQ,CAAC,EAAE,GAAG,GAAG;AAAA,QACtE,MAAM,cAAc,IAAI,UAAU,KAAK,IAAI,EAAE,OAAc,QAAQ,CAAC,EAAE,GAAG,GAAG;AAAA,QAC5E,IAAI,qBAAqB,WAAW,uBAAuB,SAAS;AAAA,UAChE,MAAM,KAAK,QAAQ,IAAI,CAAC,WAAW,WAAW,CAAC,EAAE,KAAK,EAAE,YAAW,kBAAiB;AAAA,YAChF,gBAAgB,YAAW,cAAa,SAAS,KAAK,OAAO,MAAM,GAAG;AAAA,WACzE,CAAC;AAAA,QACN,EACK;AAAA,UACD,gBAAgB,WAAW,aAAa,SAAS,KAAK,OAAO,MAAM,GAAG;AAAA;AAAA,MAE9E;AAAA,MACA,IAAI,MAAM;AAAA,QACN,OAAO,QAAQ,IAAI,KAAK,EAAE,KAAK,MAAM,OAAO;AAAA,MAChD,OAAO;AAAA;AAAA,GAEd;AAAA,EAiCY,0BAA6B,aAAa,WAAW,CAAC,MAAM,QAAQ;AAAA,IAC7E,SAAS,KAAK,MAAM,GAAG;AAAA,IACvB,KAAK,KAAK,QAAQ,CAAC,SAAS,QAAQ;AAAA,MAChC,MAAM,QAAQ,QAAQ;AAAA,MACtB,IAAI,EAAE,iBAAiB,MAAM;AAAA,QACzB,QAAQ,OAAO,KAAK;AAAA,UAChB;AAAA,UACA;AAAA,UACA,UAAU;AAAA,UACV,MAAM;AAAA,QACV,CAAC;AAAA,QACD,OAAO;AAAA,MACX;AAAA,MACA,MAAM,QAAQ,CAAC;AAAA,MACf,QAAQ,QAAQ,IAAI;AAAA,MACpB,WAAW,QAAQ,OAAO;AAAA,QACtB,MAAM,SAAS,IAAI,UAAU,KAAK,IAAI,EAAE,OAAO,MAAM,QAAQ,CAAC,EAAE,GAAG,GAAG;AAAA,QACtE,IAAI,kBAAkB,SAAS;AAAA,UAC3B,MAAM,KAAK,OAAO,KAAK,CAAC,YAAW,gBAAgB,SAAQ,OAAO,CAAC,CAAC;AAAA,QACxE,EAEI;AAAA,0BAAgB,QAAQ,OAAO;AAAA,MACvC;AAAA,MACA,IAAI,MAAM;AAAA,QACN,OAAO,QAAQ,IAAI,KAAK,EAAE,KAAK,MAAM,OAAO;AAAA,MAChD,OAAO;AAAA;AAAA,GAEd;AAAA,EAOY,2BAA8B,aAAa,YAAY,CAAC,MAAM,QAAQ;AAAA,IAC/E,SAAS,KAAK,MAAM,GAAG;AAAA,IACvB,MAAM,SAAc,cAAc,IAAI,OAAO;AAAA,IAC7C,MAAM,YAAY,IAAI,IAAI,MAAM;AAAA,IAChC,KAAK,KAAK,SAAS;AAAA,IACnB,KAAK,KAAK,UAAU,IAAI,OAAO,KAAK,OAC/B,OAAO,CAAC,MAAW,iBAAiB,IAAI,OAAO,CAAC,CAAC,EACjD,IAAI,CAAC,MAAO,OAAO,MAAM,WAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,CAAE,EACvE,KAAK,GAAG,KAAK;AAAA,IAClB,KAAK,KAAK,QAAQ,CAAC,SAAS,SAAS;AAAA,MACjC,MAAM,QAAQ,QAAQ;AAAA,MACtB,IAAI,UAAU,IAAI,KAAK,GAAG;AAAA,QACtB,OAAO;AAAA,MACX;AAAA,MACA,QAAQ,OAAO,KAAK;AAAA,QAChB,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC;AAAA,MACD,OAAO;AAAA;AAAA,GAEd;AAAA,EACY,8BAAiC,aAAa,eAAe,CAAC,MAAM,QAAQ;AAAA,IACrF,SAAS,KAAK,MAAM,GAAG;AAAA,IACvB,IAAI,IAAI,OAAO,WAAW,GAAG;AAAA,MACzB,MAAM,IAAI,MAAM,mDAAmD;AAAA,IACvE;AAAA,IACA,MAAM,SAAS,IAAI,IAAI,IAAI,MAAM;AAAA,IACjC,KAAK,KAAK,SAAS;AAAA,IACnB,KAAK,KAAK,UAAU,IAAI,OAAO,KAAK,IAAI,OACnC,IAAI,CAAC,MAAO,OAAO,MAAM,WAAgB,YAAY,CAAC,IAAI,IAAS,YAAY,EAAE,SAAS,CAAC,IAAI,OAAO,CAAC,CAAE,EACzG,KAAK,GAAG,KAAK;AAAA,IAClB,KAAK,KAAK,QAAQ,CAAC,SAAS,SAAS;AAAA,MACjC,MAAM,QAAQ,QAAQ;AAAA,MACtB,IAAI,OAAO,IAAI,KAAK,GAAG;AAAA,QACnB,OAAO;AAAA,MACX;AAAA,MACA,QAAQ,OAAO,KAAK;AAAA,QAChB,MAAM;AAAA,QACN,QAAQ,IAAI;AAAA,QACZ;AAAA,QACA;AAAA,MACJ,CAAC;AAAA,MACD,OAAO;AAAA;AAAA,GAEd;AAAA,EACY,2BAA8B,aAAa,YAAY,CAAC,MAAM,QAAQ;AAAA,IAC/E,SAAS,KAAK,MAAM,GAAG;AAAA,IACvB,KAAK,KAAK,QAAQ,CAAC,SAAS,SAAS;AAAA,MACjC,MAAM,QAAQ,QAAQ;AAAA,MAEtB,IAAI,iBAAiB;AAAA,QACjB,OAAO;AAAA,MACX,QAAQ,OAAO,KAAK;AAAA,QAChB,UAAU;AAAA,QACV,MAAM;AAAA,QACN;AAAA,QACA;AAAA,MACJ,CAAC;AAAA,MACD,OAAO;AAAA;AAAA,GAEd;AAAA,EACY,gCAAmC,aAAa,iBAAiB,CAAC,MAAM,QAAQ;AAAA,IACzF,SAAS,KAAK,MAAM,GAAG;AAAA,IACvB,KAAK,KAAK,QAAQ;AAAA,IAClB,KAAK,KAAK,QAAQ,CAAC,SAAS,QAAQ;AAAA,MAChC,IAAI,IAAI,cAAc,YAAY;AAAA,QAC9B,MAAM,IAAS,gBAAgB,KAAK,YAAY,IAAI;AAAA,MACxD;AAAA,MACA,MAAM,OAAO,IAAI,UAAU,QAAQ,OAAO,OAAO;AAAA,MACjD,IAAI,IAAI,OAAO;AAAA,QACX,MAAM,SAAS,gBAAgB,UAAU,OAAO,QAAQ,QAAQ,IAAI;AAAA,QACpE,OAAO,OAAO,KAAK,CAAC,YAAW;AAAA,UAC3B,QAAQ,QAAQ;AAAA,UAChB,QAAQ,WAAW;AAAA,UACnB,OAAO;AAAA,SACV;AAAA,MACL;AAAA,MACA,IAAI,gBAAgB,SAAS;AAAA,QACzB,MAAM,IAAS;AAAA,MACnB;AAAA,MACA,QAAQ,QAAQ;AAAA,MAChB,QAAQ,WAAW;AAAA,MACnB,OAAO;AAAA;AAAA,GAEd;AAAA,EAOY,+BAAkC,aAAa,gBAAgB,CAAC,MAAM,QAAQ;AAAA,IACvF,SAAS,KAAK,MAAM,GAAG;AAAA,IACvB,KAAK,KAAK,QAAQ;AAAA,IAClB,KAAK,KAAK,SAAS;AAAA,IACd,WAAW,KAAK,MAAM,UAAU,MAAM;AAAA,MACvC,OAAO,IAAI,UAAU,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,IAAI,UAAU,KAAK,QAAQ,SAAS,CAAC,IAAI;AAAA,KAC3F;AAAA,IACI,WAAW,KAAK,MAAM,WAAW,MAAM;AAAA,MACxC,MAAM,UAAU,IAAI,UAAU,KAAK;AAAA,MACnC,OAAO,UAAU,IAAI,OAAO,KAAU,WAAW,QAAQ,MAAM,MAAM,IAAI;AAAA,KAC5E;AAAA,IACD,KAAK,KAAK,QAAQ,CAAC,SAAS,QAAQ;AAAA,MAChC,IAAI,IAAI,UAAU,KAAK,UAAU,YAAY;AAAA,QACzC,MAAM,QAAQ,QAAQ;AAAA,QACtB,MAAM,SAAS,IAAI,UAAU,KAAK,IAAI,SAAS,GAAG;AAAA,QAClD,IAAI,kBAAkB;AAAA,UAClB,OAAO,OAAO,KAAK,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAAA,QAC5D,OAAO,qBAAqB,QAAQ,KAAK;AAAA,MAC7C;AAAA,MACA,IAAI,QAAQ,UAAU,WAAW;AAAA,QAC7B,OAAO;AAAA,MACX;AAAA,MACA,OAAO,IAAI,UAAU,KAAK,IAAI,SAAS,GAAG;AAAA;AAAA,GAEjD;AAAA,EACY,oCAAuC,aAAa,qBAAqB,CAAC,MAAM,QAAQ;AAAA,IAEjG,aAAa,KAAK,MAAM,GAAG;AAAA,IAEtB,WAAW,KAAK,MAAM,UAAU,MAAM,IAAI,UAAU,KAAK,MAAM;AAAA,IAC/D,WAAW,KAAK,MAAM,WAAW,MAAM,IAAI,UAAU,KAAK,OAAO;AAAA,IAEtE,KAAK,KAAK,QAAQ,CAAC,SAAS,QAAQ;AAAA,MAChC,OAAO,IAAI,UAAU,KAAK,IAAI,SAAS,GAAG;AAAA;AAAA,GAEjD;AAAA,EACY,+BAAkC,aAAa,gBAAgB,CAAC,MAAM,QAAQ;AAAA,IACvF,SAAS,KAAK,MAAM,GAAG;AAAA,IAClB,WAAW,KAAK,MAAM,SAAS,MAAM,IAAI,UAAU,KAAK,KAAK;AAAA,IAC7D,WAAW,KAAK,MAAM,UAAU,MAAM,IAAI,UAAU,KAAK,MAAM;AAAA,IAC/D,WAAW,KAAK,MAAM,WAAW,MAAM;AAAA,MACxC,MAAM,UAAU,IAAI,UAAU,KAAK;AAAA,MACnC,OAAO,UAAU,IAAI,OAAO,KAAU,WAAW,QAAQ,MAAM,UAAU,IAAI;AAAA,KAChF;AAAA,IACI,WAAW,KAAK,MAAM,UAAU,MAAM;AAAA,MACvC,OAAO,IAAI,UAAU,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,IAAI,UAAU,KAAK,QAAQ,IAAI,CAAC,IAAI;AAAA,KACtF;AAAA,IACD,KAAK,KAAK,QAAQ,CAAC,SAAS,QAAQ;AAAA,MAEhC,IAAI,QAAQ,UAAU;AAAA,QAClB,OAAO;AAAA,MACX,OAAO,IAAI,UAAU,KAAK,IAAI,SAAS,GAAG;AAAA;AAAA,GAEjD;AAAA,EACY,8BAAiC,aAAa,eAAe,CAAC,MAAM,QAAQ;AAAA,IACrF,SAAS,KAAK,MAAM,GAAG;AAAA,IAEvB,KAAK,KAAK,QAAQ;AAAA,IACb,WAAW,KAAK,MAAM,UAAU,MAAM,IAAI,UAAU,KAAK,MAAM;AAAA,IACpE,KAAK,KAAK,QAAQ,CAAC,SAAS,QAAQ;AAAA,MAChC,IAAI,IAAI,cAAc,YAAY;AAAA,QAC9B,OAAO,IAAI,UAAU,KAAK,IAAI,SAAS,GAAG;AAAA,MAC9C;AAAA,MAEA,IAAI,QAAQ,UAAU,WAAW;AAAA,QAC7B,QAAQ,QAAQ,IAAI;AAAA,QAIpB,OAAO;AAAA,MACX;AAAA,MAEA,MAAM,SAAS,IAAI,UAAU,KAAK,IAAI,SAAS,GAAG;AAAA,MAClD,IAAI,kBAAkB,SAAS;AAAA,QAC3B,OAAO,OAAO,KAAK,CAAC,YAAW,oBAAoB,SAAQ,GAAG,CAAC;AAAA,MACnE;AAAA,MACA,OAAO,oBAAoB,QAAQ,GAAG;AAAA;AAAA,GAE7C;AAAA,EAOY,+BAAkC,aAAa,gBAAgB,CAAC,MAAM,QAAQ;AAAA,IACvF,SAAS,KAAK,MAAM,GAAG;AAAA,IACvB,KAAK,KAAK,QAAQ;AAAA,IACb,WAAW,KAAK,MAAM,UAAU,MAAM,IAAI,UAAU,KAAK,MAAM;AAAA,IACpE,KAAK,KAAK,QAAQ,CAAC,SAAS,QAAQ;AAAA,MAChC,IAAI,IAAI,cAAc,YAAY;AAAA,QAC9B,OAAO,IAAI,UAAU,KAAK,IAAI,SAAS,GAAG;AAAA,MAC9C;AAAA,MAEA,IAAI,QAAQ,UAAU,WAAW;AAAA,QAC7B,QAAQ,QAAQ,IAAI;AAAA,MACxB;AAAA,MACA,OAAO,IAAI,UAAU,KAAK,IAAI,SAAS,GAAG;AAAA;AAAA,GAEjD;AAAA,EACY,kCAAqC,aAAa,mBAAmB,CAAC,MAAM,QAAQ;AAAA,IAC7F,SAAS,KAAK,MAAM,GAAG;AAAA,IAClB,WAAW,KAAK,MAAM,UAAU,MAAM;AAAA,MACvC,MAAM,IAAI,IAAI,UAAU,KAAK;AAAA,MAC7B,OAAO,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,MAAM,MAAM,SAAS,CAAC,IAAI;AAAA,KAC/D;AAAA,IACD,KAAK,KAAK,QAAQ,CAAC,SAAS,QAAQ;AAAA,MAChC,MAAM,SAAS,IAAI,UAAU,KAAK,IAAI,SAAS,GAAG;AAAA,MAClD,IAAI,kBAAkB,SAAS;AAAA,QAC3B,OAAO,OAAO,KAAK,CAAC,YAAW,wBAAwB,SAAQ,IAAI,CAAC;AAAA,MACxE;AAAA,MACA,OAAO,wBAAwB,QAAQ,IAAI;AAAA;AAAA,GAElD;AAAA,EAYY,8BAAiC,aAAa,eAAe,CAAC,MAAM,QAAQ;AAAA,IACrF,SAAS,KAAK,MAAM,GAAG;AAAA,IACvB,KAAK,KAAK,QAAQ,CAAC,SAAS,QAAQ;AAAA,MAChC,IAAI,IAAI,cAAc,YAAY;AAAA,QAC9B,MAAM,IAAS,gBAAgB,YAAY;AAAA,MAC/C;AAAA,MACA,MAAM,SAAS,IAAI,UAAU,KAAK,IAAI,SAAS,GAAG;AAAA,MAClD,IAAI,kBAAkB,SAAS;AAAA,QAC3B,OAAO,OAAO,KAAK,CAAC,YAAW;AAAA,UAC3B,QAAQ,QAAQ,QAAO,OAAO,WAAW;AAAA,UACzC,OAAO;AAAA,SACV;AAAA,MACL;AAAA,MACA,QAAQ,QAAQ,OAAO,OAAO,WAAW;AAAA,MACzC,OAAO;AAAA;AAAA,GAEd;AAAA,EACY,4BAA+B,aAAa,aAAa,CAAC,MAAM,QAAQ;AAAA,IACjF,SAAS,KAAK,MAAM,GAAG;AAAA,IACvB,KAAK,KAAK,QAAQ;AAAA,IACb,WAAW,KAAK,MAAM,UAAU,MAAM,IAAI,UAAU,KAAK,MAAM;AAAA,IAC/D,WAAW,KAAK,MAAM,UAAU,MAAM,IAAI,UAAU,KAAK,MAAM;AAAA,IACpE,KAAK,KAAK,QAAQ,CAAC,SAAS,QAAQ;AAAA,MAChC,IAAI,IAAI,cAAc,YAAY;AAAA,QAC9B,OAAO,IAAI,UAAU,KAAK,IAAI,SAAS,GAAG;AAAA,MAC9C;AAAA,MAEA,MAAM,SAAS,IAAI,UAAU,KAAK,IAAI,SAAS,GAAG;AAAA,MAClD,IAAI,kBAAkB,SAAS;AAAA,QAC3B,OAAO,OAAO,KAAK,CAAC,YAAW;AAAA,UAC3B,QAAQ,QAAQ,QAAO;AAAA,UACvB,IAAI,QAAO,OAAO,QAAQ;AAAA,YACtB,QAAQ,QAAQ,IAAI,WAAW;AAAA,iBACxB;AAAA,cACH,OAAO;AAAA,gBACH,QAAQ,QAAO,OAAO,IAAI,CAAC,QAAa,cAAc,KAAK,KAAU,OAAO,CAAC,CAAC;AAAA,cAClF;AAAA,cACA,OAAO,QAAQ;AAAA,YACnB,CAAC;AAAA,YACD,QAAQ,SAAS,CAAC;AAAA,YAClB,QAAQ,WAAW;AAAA,UACvB;AAAA,UACA,OAAO;AAAA,SACV;AAAA,MACL;AAAA,MACA,QAAQ,QAAQ,OAAO;AAAA,MACvB,IAAI,OAAO,OAAO,QAAQ;AAAA,QACtB,QAAQ,QAAQ,IAAI,WAAW;AAAA,aACxB;AAAA,UACH,OAAO;AAAA,YACH,QAAQ,OAAO,OAAO,IAAI,CAAC,QAAa,cAAc,KAAK,KAAU,OAAO,CAAC,CAAC;AAAA,UAClF;AAAA,UACA,OAAO,QAAQ;AAAA,QACnB,CAAC;AAAA,QACD,QAAQ,SAAS,CAAC;AAAA,QAClB,QAAQ,WAAW;AAAA,MACvB;AAAA,MACA,OAAO;AAAA;AAAA,GAEd;AAAA,EACY,0BAA6B,aAAa,WAAW,CAAC,MAAM,QAAQ;AAAA,IAC7E,SAAS,KAAK,MAAM,GAAG;AAAA,IACvB,KAAK,KAAK,QAAQ,CAAC,SAAS,SAAS;AAAA,MACjC,IAAI,OAAO,QAAQ,UAAU,YAAY,CAAC,OAAO,MAAM,QAAQ,KAAK,GAAG;AAAA,QACnE,QAAQ,OAAO,KAAK;AAAA,UAChB,OAAO,QAAQ;AAAA,UACf;AAAA,UACA,UAAU;AAAA,UACV,MAAM;AAAA,QACV,CAAC;AAAA,QACD,OAAO;AAAA,MACX;AAAA,MACA,OAAO;AAAA;AAAA,GAEd;AAAA,EACY,2BAA8B,aAAa,YAAY,CAAC,MAAM,QAAQ;AAAA,IAC/E,SAAS,KAAK,MAAM,GAAG;AAAA,IAClB,WAAW,KAAK,MAAM,UAAU,MAAM,IAAI,GAAG,KAAK,MAAM;AAAA,IACxD,WAAW,KAAK,MAAM,SAAS,MAAM,IAAI,GAAG,KAAK,KAAK;AAAA,IACtD,WAAW,KAAK,MAAM,UAAU,MAAM,IAAI,IAAI,KAAK,MAAM;AAAA,IACzD,WAAW,KAAK,MAAM,cAAc,MAAM,IAAI,GAAG,KAAK,UAAU;AAAA,IACrE,KAAK,KAAK,QAAQ,CAAC,SAAS,QAAQ;AAAA,MAChC,IAAI,IAAI,cAAc,YAAY;AAAA,QAC9B,MAAM,QAAQ,IAAI,IAAI,KAAK,IAAI,SAAS,GAAG;AAAA,QAC3C,IAAI,iBAAiB,SAAS;AAAA,UAC1B,OAAO,MAAM,KAAK,CAAC,WAAU,iBAAiB,QAAO,IAAI,IAAI,GAAG,CAAC;AAAA,QACrE;AAAA,QACA,OAAO,iBAAiB,OAAO,IAAI,IAAI,GAAG;AAAA,MAC9C;AAAA,MACA,MAAM,OAAO,IAAI,GAAG,KAAK,IAAI,SAAS,GAAG;AAAA,MACzC,IAAI,gBAAgB,SAAS;AAAA,QACzB,OAAO,KAAK,KAAK,CAAC,UAAS,iBAAiB,OAAM,IAAI,KAAK,GAAG,CAAC;AAAA,MACnE;AAAA,MACA,OAAO,iBAAiB,MAAM,IAAI,KAAK,GAAG;AAAA;AAAA,GAEjD;AAAA,EASY,4BAA+B,aAAa,aAAa,CAAC,MAAM,QAAQ;AAAA,IACjF,SAAS,KAAK,MAAM,GAAG;AAAA,IAClB,WAAW,KAAK,MAAM,UAAU,MAAM,IAAI,GAAG,KAAK,MAAM;AAAA,IACxD,WAAW,KAAK,MAAM,SAAS,MAAM,IAAI,GAAG,KAAK,KAAK;AAAA,IACtD,WAAW,KAAK,MAAM,UAAU,MAAM,IAAI,IAAI,KAAK,MAAM;AAAA,IACzD,WAAW,KAAK,MAAM,cAAc,MAAM,IAAI,GAAG,KAAK,UAAU;AAAA,IACrE,KAAK,KAAK,QAAQ,CAAC,SAAS,QAAQ;AAAA,MAChC,MAAM,YAAY,IAAI,aAAa;AAAA,MACnC,IAAI,cAAc,WAAW;AAAA,QACzB,MAAM,OAAO,IAAI,GAAG,KAAK,IAAI,SAAS,GAAG;AAAA,QACzC,IAAI,gBAAgB,SAAS;AAAA,UACzB,OAAO,KAAK,KAAK,CAAC,UAAS,mBAAmB,OAAM,KAAK,GAAG,CAAC;AAAA,QACjE;AAAA,QACA,OAAO,mBAAmB,MAAM,KAAK,GAAG;AAAA,MAC5C,EACK;AAAA,QACD,MAAM,QAAQ,IAAI,IAAI,KAAK,IAAI,SAAS,GAAG;AAAA,QAC3C,IAAI,iBAAiB,SAAS;AAAA,UAC1B,OAAO,MAAM,KAAK,CAAC,WAAU,mBAAmB,QAAO,KAAK,GAAG,CAAC;AAAA,QACpE;AAAA,QACA,OAAO,mBAAmB,OAAO,KAAK,GAAG;AAAA;AAAA;AAAA,GAGpD;AAAA,EA+BY,iCAAoC,aAAa,kBAAkB,CAAC,MAAM,QAAQ;AAAA,IAC3F,SAAS,KAAK,MAAM,GAAG;AAAA,GAC1B;AAAA,EACY,+BAAkC,aAAa,gBAAgB,CAAC,MAAM,QAAQ;AAAA,IACvF,SAAS,KAAK,MAAM,GAAG;AAAA,IAClB,WAAW,KAAK,MAAM,cAAc,MAAM,IAAI,UAAU,KAAK,UAAU;AAAA,IACvE,WAAW,KAAK,MAAM,UAAU,MAAM,IAAI,UAAU,KAAK,MAAM;AAAA,IAC/D,WAAW,KAAK,MAAM,SAAS,MAAM,IAAI,WAAW,MAAM,KAAK;AAAA,IAC/D,WAAW,KAAK,MAAM,UAAU,MAAM,IAAI,WAAW,MAAM,MAAM;AAAA,IACtE,KAAK,KAAK,QAAQ,CAAC,SAAS,QAAQ;AAAA,MAChC,IAAI,IAAI,cAAc,YAAY;AAAA,QAC9B,OAAO,IAAI,UAAU,KAAK,IAAI,SAAS,GAAG;AAAA,MAC9C;AAAA,MACA,MAAM,SAAS,IAAI,UAAU,KAAK,IAAI,SAAS,GAAG;AAAA,MAClD,IAAI,kBAAkB,SAAS;AAAA,QAC3B,OAAO,OAAO,KAAK,oBAAoB;AAAA,MAC3C;AAAA,MACA,OAAO,qBAAqB,MAAM;AAAA;AAAA,GAEzC;AAAA,EAKY,sCAAyC,aAAa,uBAAuB,CAAC,MAAM,QAAQ;AAAA,IACrG,SAAS,KAAK,MAAM,GAAG;AAAA,IACvB,MAAM,aAAa,CAAC;AAAA,IACpB,WAAW,QAAQ,IAAI,OAAO;AAAA,MAC1B,IAAI,OAAO,SAAS,YAAY,SAAS,MAAM;AAAA,QAE3C,IAAI,CAAC,KAAK,KAAK,SAAS;AAAA,UAEpB,MAAM,IAAI,MAAM,oDAAoD,CAAC,GAAG,KAAK,KAAK,MAAM,EAAE,MAAM,GAAG;AAAA,QACvG;AAAA,QACA,MAAM,SAAS,KAAK,KAAK,mBAAmB,SAAS,KAAK,KAAK,QAAQ,SAAS,KAAK,KAAK;AAAA,QAC1F,IAAI,CAAC;AAAA,UACD,MAAM,IAAI,MAAM,kCAAkC,KAAK,KAAK,QAAQ;AAAA,QACxE,MAAM,QAAQ,OAAO,WAAW,GAAG,IAAI,IAAI;AAAA,QAC3C,MAAM,MAAM,OAAO,SAAS,GAAG,IAAI,OAAO,SAAS,IAAI,OAAO;AAAA,QAC9D,WAAW,KAAK,OAAO,MAAM,OAAO,GAAG,CAAC;AAAA,MAC5C,EACK,SAAI,SAAS,QAAa,eAAe,IAAI,OAAO,IAAI,GAAG;AAAA,QAC5D,WAAW,KAAU,YAAY,GAAG,MAAM,CAAC;AAAA,MAC/C,EACK;AAAA,QACD,MAAM,IAAI,MAAM,kCAAkC,MAAM;AAAA;AAAA,IAEhE;AAAA,IACA,KAAK,KAAK,UAAU,IAAI,OAAO,IAAI,WAAW,KAAK,EAAE,IAAI;AAAA,IACzD,KAAK,KAAK,QAAQ,CAAC,SAAS,SAAS;AAAA,MACjC,IAAI,OAAO,QAAQ,UAAU,UAAU;AAAA,QACnC,QAAQ,OAAO,KAAK;AAAA,UAChB,OAAO,QAAQ;AAAA,UACf;AAAA,UACA,UAAU;AAAA,UACV,MAAM;AAAA,QACV,CAAC;AAAA,QACD,OAAO;AAAA,MACX;AAAA,MACA,KAAK,KAAK,QAAQ,YAAY;AAAA,MAC9B,IAAI,CAAC,KAAK,KAAK,QAAQ,KAAK,QAAQ,KAAK,GAAG;AAAA,QACxC,QAAQ,OAAO,KAAK;AAAA,UAChB,OAAO,QAAQ;AAAA,UACf;AAAA,UACA,MAAM;AAAA,UACN,QAAQ,IAAI,UAAU;AAAA,UACtB,SAAS,KAAK,KAAK,QAAQ;AAAA,QAC/B,CAAC;AAAA,QACD,OAAO;AAAA,MACX;AAAA,MACA,OAAO;AAAA;AAAA,GAEd;AAAA,EACY,+BAAkC,aAAa,gBAAgB,CAAC,MAAM,QAAQ;AAAA,IACvF,SAAS,KAAK,MAAM,GAAG;AAAA,IACvB,KAAK,OAAO;AAAA,IACZ,KAAK,KAAK,MAAM;AAAA,IAChB,KAAK,YAAY,CAAC,SAAS;AAAA,MACvB,IAAI,OAAO,SAAS,YAAY;AAAA,QAC5B,MAAM,IAAI,MAAM,4CAA4C;AAAA,MAChE;AAAA,MACA,OAAO,QAAS,IAAI,MAAM;AAAA,QACtB,MAAM,aAAa,KAAK,KAAK,QAAQ,MAAM,KAAK,KAAK,OAAO,IAAI,IAAI;AAAA,QACpE,MAAM,SAAS,QAAQ,MAAM,MAAM,MAAM,UAAU;AAAA,QACnD,IAAI,KAAK,KAAK,QAAQ;AAAA,UAClB,OAAO,MAAM,KAAK,KAAK,QAAQ,MAAM;AAAA,QACzC;AAAA,QACA,OAAO;AAAA;AAAA;AAAA,IAGf,KAAK,iBAAiB,CAAC,SAAS;AAAA,MAC5B,IAAI,OAAO,SAAS,YAAY;AAAA,QAC5B,MAAM,IAAI,MAAM,iDAAiD;AAAA,MACrE;AAAA,MACA,OAAO,cAAe,IAAI,MAAM;AAAA,QAC5B,MAAM,aAAa,KAAK,KAAK,QAAQ,MAAM,WAAW,KAAK,KAAK,OAAO,IAAI,IAAI;AAAA,QAC/E,MAAM,SAAS,MAAM,QAAQ,MAAM,MAAM,MAAM,UAAU;AAAA,QACzD,IAAI,KAAK,KAAK,QAAQ;AAAA,UAClB,OAAO,MAAM,WAAW,KAAK,KAAK,QAAQ,MAAM;AAAA,QACpD;AAAA,QACA,OAAO;AAAA;AAAA;AAAA,IAGf,KAAK,KAAK,QAAQ,CAAC,SAAS,SAAS;AAAA,MACjC,IAAI,OAAO,QAAQ,UAAU,YAAY;AAAA,QACrC,QAAQ,OAAO,KAAK;AAAA,UAChB,MAAM;AAAA,UACN,UAAU;AAAA,UACV,OAAO,QAAQ;AAAA,UACf;AAAA,QACJ,CAAC;AAAA,QACD,OAAO;AAAA,MACX;AAAA,MAEA,MAAM,mBAAmB,KAAK,KAAK,UAAU,KAAK,KAAK,OAAO,KAAK,IAAI,SAAS;AAAA,MAChF,IAAI,kBAAkB;AAAA,QAClB,QAAQ,QAAQ,KAAK,eAAe,QAAQ,KAAK;AAAA,MACrD,EACK;AAAA,QACD,QAAQ,QAAQ,KAAK,UAAU,QAAQ,KAAK;AAAA;AAAA,MAEhD,OAAO;AAAA;AAAA,IAEX,KAAK,QAAQ,IAAI,SAAS;AAAA,MACtB,MAAM,IAAI,KAAK;AAAA,MACf,IAAI,MAAM,QAAQ,KAAK,EAAE,GAAG;AAAA,QACxB,OAAO,IAAI,EAAE;AAAA,UACT,MAAM;AAAA,UACN,OAAO,IAAI,UAAU;AAAA,YACjB,MAAM;AAAA,YACN,OAAO,KAAK;AAAA,YACZ,MAAM,KAAK;AAAA,UACf,CAAC;AAAA,UACD,QAAQ,KAAK,KAAK;AAAA,QACtB,CAAC;AAAA,MACL;AAAA,MACA,OAAO,IAAI,EAAE;AAAA,QACT,MAAM;AAAA,QACN,OAAO,KAAK;AAAA,QACZ,QAAQ,KAAK,KAAK;AAAA,MACtB,CAAC;AAAA;AAAA,IAEL,KAAK,SAAS,CAAC,WAAW;AAAA,MACtB,MAAM,IAAI,KAAK;AAAA,MACf,OAAO,IAAI,EAAE;AAAA,QACT,MAAM;AAAA,QACN,OAAO,KAAK,KAAK;AAAA,QACjB;AAAA,MACJ,CAAC;AAAA;AAAA,IAEL,OAAO;AAAA,GACV;AAAA,EACY,8BAAiC,aAAa,eAAe,CAAC,MAAM,QAAQ;AAAA,IACrF,SAAS,KAAK,MAAM,GAAG;AAAA,IACvB,KAAK,KAAK,QAAQ,CAAC,SAAS,QAAQ;AAAA,MAChC,OAAO,QAAQ,QAAQ,QAAQ,KAAK,EAAE,KAAK,CAAC,UAAU,IAAI,UAAU,KAAK,IAAI,EAAE,OAAO,OAAO,QAAQ,CAAC,EAAE,GAAG,GAAG,CAAC;AAAA;AAAA,GAEtH;AAAA,EACY,2BAA8B,aAAa,YAAY,CAAC,MAAM,QAAQ;AAAA,IAC/E,SAAS,KAAK,MAAM,GAAG;AAAA,IAIlB,WAAW,KAAK,MAAM,aAAa,MAAM;AAAA,MAC1C,MAAM,IAAI;AAAA,MACV,IAAI,CAAC,EAAE;AAAA,QACH,EAAE,eAAe,IAAI,OAAO;AAAA,MAChC,OAAO,EAAE;AAAA,KACZ;AAAA,IACI,WAAW,KAAK,MAAM,WAAW,MAAM,KAAK,KAAK,WAAW,MAAM,OAAO;AAAA,IACzE,WAAW,KAAK,MAAM,cAAc,MAAM,KAAK,KAAK,WAAW,MAAM,UAAU;AAAA,IAC/E,WAAW,KAAK,MAAM,SAAS,MAAM,KAAK,KAAK,WAAW,MAAM,SAAS,SAAS;AAAA,IAClF,WAAW,KAAK,MAAM,UAAU,MAAM,KAAK,KAAK,WAAW,MAAM,UAAU,SAAS;AAAA,IACzF,KAAK,KAAK,QAAQ,CAAC,SAAS,QAAQ;AAAA,MAChC,MAAM,QAAQ,KAAK,KAAK;AAAA,MACxB,OAAO,MAAM,KAAK,IAAI,SAAS,GAAG;AAAA;AAAA,GAEzC;AAAA,EACY,6BAAgC,aAAa,cAAc,CAAC,MAAM,QAAQ;AAAA,IAC5E,UAAU,KAAK,MAAM,GAAG;AAAA,IAC/B,SAAS,KAAK,MAAM,GAAG;AAAA,IACvB,KAAK,KAAK,QAAQ,CAAC,SAAS,MAAM;AAAA,MAC9B,OAAO;AAAA;AAAA,IAEX,KAAK,KAAK,QAAQ,CAAC,YAAY;AAAA,MAC3B,MAAM,QAAQ,QAAQ;AAAA,MACtB,MAAM,IAAI,IAAI,GAAG,KAAK;AAAA,MACtB,IAAI,aAAa,SAAS;AAAA,QACtB,OAAO,EAAE,KAAK,CAAC,OAAM,mBAAmB,IAAG,SAAS,OAAO,IAAI,CAAC;AAAA,MACpE;AAAA,MACA,mBAAmB,GAAG,SAAS,OAAO,IAAI;AAAA,MAC1C;AAAA;AAAA,GAEP;AAAA;;;AC1kED,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,MAAM;AAAA,EACvB;AAAA;AAAA,IAvGE,QAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,sBAAM,MAAM,wCAAU;AAAA,IACtC,MAAM,EAAE,MAAM,4BAAO,MAAM,wCAAU;AAAA,IACrC,OAAO,EAAE,MAAM,4BAAO,MAAM,wCAAU;AAAA,IACtC,KAAK,EAAE,MAAM,4BAAO,MAAM,wCAAU;AAAA,EACxC;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,EACT;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,0KAA4C,OAAM,uFAA2B;AAAA,QACxF;AAAA,QACA,OAAO,+JAAiC,uFAA2B;AAAA,MACvE;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,+JAAsC,mBAAmB,OAAM,OAAO,EAAE;AAAA,QACnF,OAAO,uPAAwD,WAAW,OAAM,QAAQ,GAAG;AAAA,WAC1F,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,qJAAiC,OAAM,UAAU,0CAAY,OAAO,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QAC1H,OAAO,oJAAgC,OAAM,UAAU,0CAAY,OAAO,OAAM,QAAQ,SAAS;AAAA,MACrG;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,2HAA2B,OAAM,gDAAkB,OAAO,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QACxG;AAAA,QACA,OAAO,2HAA2B,OAAM,gDAAkB,OAAO,OAAM,QAAQ,SAAS;AAAA,MAC5F;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,gJAAiC,OAAM;AAAA,QAClD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,sJAAkC,OAAO;AAAA,QACpD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,qJAAiC,OAAO;AAAA,QACnD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,uKAAoC,OAAO;AAAA,QACtD,OAAO,GAAG,iBAAiB,OAAO,WAAW,OAAM;AAAA,MACvD;AAAA,WACK;AAAA,QACD,OAAO,0LAAwC,OAAM;AAAA,WACpD;AAAA,QACD,OAAO,2BAAM,OAAM,KAAK,SAAS,IAAI,iBAAO,8BAAU,OAAM,KAAK,SAAS,IAAI,WAAM,OAAY,WAAW,OAAM,MAAM,SAAI;AAAA,WAC1H;AAAA,QACD,OAAO,2FAAoB,OAAM;AAAA,WAChC;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,2FAAoB,OAAM;AAAA;AAAA,QAEjC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAjGvB;AAAA;;;ACoGA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,OAAM;AAAA,EACvB;AAAA;AAAA,IAtGE,SAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,UAAU,MAAM,sBAAW;AAAA,IAC3C,MAAM,EAAE,MAAM,QAAQ,MAAM,sBAAW;AAAA,IACvC,OAAO,EAAE,MAAM,WAAW,MAAM,sBAAW;AAAA,IAC3C,KAAK,EAAE,MAAM,WAAW,MAAM,sBAAW;AAAA,EAC7C;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,EACT;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,wEAAsC,OAAM,wBAAwB;AAAA,QAC/E;AAAA,QACA,OAAO,6DAA2B,wBAAwB;AAAA,MAC9D;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,6DAAgC,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAC7E,OAAO,4FAAqD,WAAW,OAAM,QAAQ,GAAG;AAAA,WACvF,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,+CAAwB,OAAM,UAAU,qBAAW,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QAC/G,OAAO,+CAAwB,OAAM,UAAU,qBAAW,MAAM,OAAM,QAAQ,SAAS;AAAA,MAC3F;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,4CAAwB,OAAM,UAAU,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QAC5F,OAAO,4CAAwB,OAAM,UAAU,MAAM,OAAM,QAAQ,SAAS;AAAA,MAChF;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,gCAAgB,OAAO;AAAA,QAClC,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,gCAAgB,OAAO;AAAA,QAClC,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,gCAAgB,OAAO;AAAA,QAClC,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,+BAAe,OAAO;AAAA,QACjC,OAAO,oBAAS,iBAAiB,OAAO,WAAW,OAAM;AAAA,MAC7D;AAAA,WACK;AAAA,QACD,OAAO,oCAAe,OAAM;AAAA,WAC3B;AAAA,QACD,OAAO,0BAAiB,OAAM,KAAK,SAAS,IAAI,QAAQ,OAAY,WAAW,OAAM,MAAM,IAAI;AAAA,WAC9F;AAAA,QACD,OAAO,GAAG,OAAM;AAAA,WACf;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,GAAG,OAAM;AAAA;AAAA,QAEhB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAhGvB;AAAA;;;ACCA,SAAS,mBAAmB,CAAC,OAAO,KAAK,KAAK,MAAM;AAAA,EAChD,MAAM,WAAW,KAAK,IAAI,KAAK;AAAA,EAC/B,MAAM,YAAY,WAAW;AAAA,EAC7B,MAAM,gBAAgB,WAAW;AAAA,EACjC,IAAI,iBAAiB,MAAM,iBAAiB,IAAI;AAAA,IAC5C,OAAO;AAAA,EACX;AAAA,EACA,IAAI,cAAc,GAAG;AAAA,IACjB,OAAO;AAAA,EACX;AAAA,EACA,IAAI,aAAa,KAAK,aAAa,GAAG;AAAA,IAClC,OAAO;AAAA,EACX;AAAA,EACA,OAAO;AAAA;AAyIX,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,OAAM;AAAA,EACvB;AAAA;AAAA,IA1IE,SAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ;AAAA,MACJ,MAAM;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,MAAM;AAAA,MACV;AAAA,MACA,MAAM;AAAA,IACV;AAAA,IACA,OAAO;AAAA,MACH,MAAM;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,MAAM;AAAA,MACV;AAAA,MACA,MAAM;AAAA,IACV;AAAA,IACA,KAAK;AAAA,MACD,MAAM;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,MAAM;AAAA,MACV;AAAA,MACA,MAAM;AAAA,IACV;AAAA,IACA,MAAM;AAAA,MACF,MAAM;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,MAAM;AAAA,MACV;AAAA,MACA,MAAM;AAAA,IACV;AAAA,EACJ;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,EACX;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,sJAAuC,OAAM,8DAAsB;AAAA,QAC9E;AAAA,QACA,OAAO,2IAA4B,8DAAsB;AAAA,MAC7D;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,iJAAkC,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAC/E,OAAO,mMAA4C,WAAW,OAAM,QAAQ,GAAG;AAAA,WAC9E,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,MAAM,WAAW,OAAO,OAAM,OAAO;AAAA,UACrC,MAAM,OAAO,oBAAoB,UAAU,OAAO,KAAK,KAAK,OAAO,KAAK,KAAK,OAAO,KAAK,IAAI;AAAA,UAC7F,OAAO,yJAAgC,OAAM,UAAU,iGAAsB,OAAO,QAAQ,MAAM,OAAM,QAAQ,SAAS,KAAK;AAAA,QAClI;AAAA,QACA,OAAO,yJAAgC,OAAM,UAAU,0HAA2B,MAAM,OAAM,QAAQ,SAAS;AAAA,MACnH;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,MAAM,WAAW,OAAO,OAAM,OAAO;AAAA,UACrC,MAAM,OAAO,oBAAoB,UAAU,OAAO,KAAK,KAAK,OAAO,KAAK,KAAK,OAAO,KAAK,IAAI;AAAA,UAC7F,OAAO,6IAA8B,OAAM,qDAAkB,OAAO,QAAQ,MAAM,OAAM,QAAQ,SAAS,KAAK;AAAA,QAClH;AAAA,QACA,OAAO,6IAA8B,OAAM,8EAAuB,MAAM,OAAM,QAAQ,SAAS;AAAA,MACnG;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,gNAA0C,OAAO;AAAA,QAC5D,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,kOAA6C,OAAO;AAAA,QAC/D,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,mMAAuC,OAAO;AAAA,QACzD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,yPAAgD,OAAO;AAAA,QAClE,OAAO,sEAAc,iBAAiB,OAAO,WAAW,OAAM;AAAA,MAClE;AAAA,WACK;AAAA,QACD,OAAO,yMAAwC,OAAM;AAAA,WACpD;AAAA,QACD,OAAO,4EAAe,OAAM,KAAK,SAAS,IAAI,mCAAU,+BAAgB,WAAW,OAAM,MAAM,IAAI;AAAA,WAClG;AAAA,QACD,OAAO,sGAAqB,OAAM;AAAA,WACjC;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,oIAA0B,OAAM;AAAA;AAAA,QAEvC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAnJvB;AAAA;;;ACmHA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,OAAM;AAAA,EACvB;AAAA;AAAA,IArHE,SAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,8CAAU,MAAM,0DAAa;AAAA,IAC7C,MAAM,EAAE,MAAM,kCAAQ,MAAM,0DAAa;AAAA,IACzC,OAAO,EAAE,MAAM,oDAAW,MAAM,0DAAa;AAAA,IAC7C,KAAK,EAAE,MAAM,oDAAW,MAAM,0DAAa;AAAA,EAC/C;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,EACX;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,0IAAqC,OAAM,wDAAqB;AAAA,QAC3E;AAAA,QACA,OAAO,+HAA0B,wDAAqB;AAAA,MAC1D;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,+HAA+B,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAC5E,OAAO,iLAAyC,WAAW,OAAM,QAAQ,GAAG;AAAA,WAC3E,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,gIAA2B,OAAM,UAAU,8GAAyB,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QAChI,OAAO,gIAA2B,OAAM,UAAU,4FAAsB,MAAM,OAAM,QAAQ,SAAS;AAAA,MACzG;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,0HAA0B,OAAM,kEAAqB,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QACzG;AAAA,QACA,OAAO,0HAA0B,OAAM,gDAAkB,MAAM,OAAM,QAAQ,SAAS;AAAA,MAC1F;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW,eAAe;AAAA,UACjC,OAAO,mLAAsC,OAAO;AAAA,QACxD;AAAA,QACA,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,yLAAuC,OAAO;AAAA,QACzD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,4KAAoC,OAAO;AAAA,QACtD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,kLAAqC,OAAO;AAAA,QACvD,IAAI,cAAc;AAAA,QAClB,IAAI,OAAO,WAAW;AAAA,UAClB,cAAc;AAAA,QAClB,IAAI,OAAO,WAAW;AAAA,UAClB,cAAc;AAAA,QAClB,IAAI,OAAO,WAAW;AAAA,UAClB,cAAc;AAAA,QAClB,IAAI,OAAO,WAAW;AAAA,UAClB,cAAc;AAAA,QAClB,IAAI,OAAO,WAAW;AAAA,UAClB,cAAc;AAAA,QAClB,OAAO,GAAG,eAAe,iBAAiB,OAAO,WAAW,OAAM;AAAA,MACtE;AAAA,WACK;AAAA,QACD,OAAO,uNAA4C,OAAM;AAAA,WACxD;AAAA,QACD,OAAO,qEAAa,OAAM,KAAK,SAAS,IAAI,WAAM,8BAAU,OAAM,KAAK,SAAS,IAAI,uBAAQ,OAAY,WAAW,OAAM,MAAM,IAAI;AAAA,WAClI;AAAA,QACD,OAAO,0FAAmB,OAAM;AAAA,WAC/B;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,kHAAuB,OAAM;AAAA;AAAA,QAEpC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EA/GvB;AAAA;;;ACsGA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,OAAM;AAAA,EACvB;AAAA;AAAA,IAxGE,SAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,gBAAY,MAAM,WAAW;AAAA,IAC7C,MAAM,EAAE,MAAM,SAAS,MAAM,WAAW;AAAA,IACxC,OAAO,EAAE,MAAM,YAAY,MAAM,WAAW;AAAA,IAC5C,KAAK,EAAE,MAAM,YAAY,MAAM,WAAW;AAAA,EAC9C;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,EACT;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,2CAAuC,OAAM,wBAAwB;AAAA,QAChF;AAAA,QACA,OAAO,gCAA4B,wBAAwB;AAAA,MAC/D;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,gCAAiC,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAC9E,OAAO,2CAAyC,WAAW,OAAM,QAAQ,KAAK;AAAA,WAC7E,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,mBAAe;AAAA,QAC7C,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,8BAA8B,OAAM,UAAU,4BAAwB,OAAO,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QACnI,OAAO,8BAA8B,OAAM,UAAU,kBAAkB,OAAO,OAAM,QAAQ,SAAS;AAAA,MACzG;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,mBAAe;AAAA,QAC7C,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,+BAA+B,OAAM,wBAAoB,OAAO,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QAC9G;AAAA,QACA,OAAO,+BAA+B,OAAM,cAAc,OAAO,OAAM,QAAQ,SAAS;AAAA,MAC5F;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW,eAAe;AAAA,UACjC,OAAO,6CAAsC,OAAO;AAAA,QACxD;AAAA,QACA,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,uCAAmC,OAAO;AAAA,QACrD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,qCAAiC,OAAO;AAAA,QACnD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,sDAA+C,OAAO;AAAA,QACjE,OAAO,2BAAuB,iBAAiB,OAAO,WAAW,OAAM;AAAA,MAC3E;AAAA,WACK;AAAA,QACD,OAAO,kDAAwC,OAAM;AAAA,WACpD;AAAA,QACD,OAAO,OAAO,OAAM,KAAK,SAAS,IAAI,MAAM,mBAAmB,OAAM,KAAK,SAAS,IAAI,MAAM,OAAY,WAAW,OAAM,MAAM,IAAI;AAAA,WACnI;AAAA,QACD,OAAO,sBAAkB,OAAM;AAAA,WAC9B;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,wBAAoB,OAAM;AAAA;AAAA,QAEjC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAlGvB;AAAA;;;AC0GA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,OAAM;AAAA,EACvB;AAAA;AAAA,IA5GE,SAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,cAAQ,MAAM,SAAM;AAAA,IACpC,MAAM,EAAE,MAAM,cAAQ,MAAM,SAAM;AAAA,IAClC,OAAO,EAAE,MAAM,cAAQ,MAAM,SAAM;AAAA,IACnC,KAAK,EAAE,MAAM,cAAQ,MAAM,SAAM;AAAA,EACrC;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,OAAO;AAAA,EACX;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,sDAAuC,OAAM,2BAAsB;AAAA,QAC9E;AAAA,QACA,OAAO,2CAA4B,2BAAsB;AAAA,MAC7D;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,2CAAiC,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAC9E,OAAO,iEAAkD,WAAW,OAAM,QAAQ,GAAG;AAAA,WACpF,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,4CAA2B,OAAM,UAAU,4BAAsB,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QAC7H;AAAA,QACA,OAAO,4CAA2B,OAAM,UAAU,4BAAsB,MAAM,OAAM,QAAQ,SAAS;AAAA,MACzG;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,2CAA0B,OAAM,UAAU,4BAAsB,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QAC5H;AAAA,QACA,OAAO,2CAA0B,OAAM,UAAU,4BAAsB,MAAM,OAAM,QAAQ,SAAS;AAAA,MACxG;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,8DAAqC,OAAO;AAAA,QACvD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,0DAAoC,OAAO;AAAA,QACtD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,qDAAoC,OAAO;AAAA,QACtD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,6DAAyC,OAAO;AAAA,QAC3D,OAAO,yBAAkB,iBAAiB,OAAO,WAAW,OAAM;AAAA,MACtE;AAAA,WACK;AAAA,QACD,OAAO,yDAAoC,OAAM;AAAA,WAChD;AAAA,QACD,OAAO,gCAAsB,WAAW,OAAM,MAAM,IAAI;AAAA,WACvD;AAAA,QACD,OAAO,8BAAkB,OAAM;AAAA,WAC9B;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,yBAAqB,OAAM;AAAA;AAAA,QAElC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAtGvB;AAAA;;;AC8GA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,OAAM;AAAA,EACvB;AAAA;AAAA,IAhHE,SAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,QAAQ,MAAM,QAAQ;AAAA,IACtC,MAAM,EAAE,MAAM,SAAS,MAAM,QAAQ;AAAA,IACrC,OAAO,EAAE,MAAM,aAAa,MAAM,YAAY;AAAA,IAC9C,KAAK,EAAE,MAAM,aAAa,MAAM,YAAY;AAAA,EAChD;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,MAAM;AAAA,EACV;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,yCAAyC,OAAM,iBAAiB;AAAA,QAC3E;AAAA,QACA,OAAO,8BAA8B,iBAAiB;AAAA,MAC1D;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,gCAAiC,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAC9E,OAAO,+CAAgD,WAAW,OAAM,QAAQ,GAAG;AAAA,WAClF,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,MAAM,SAAS,eAAe,OAAM,WAAW,OAAM;AAAA,QACrD,IAAI;AAAA,UACA,OAAO,wBAAwB,UAAU,WAAW,OAAO,QAAQ,OAAO,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QACzH,OAAO,wBAAwB,UAAU,iBAAiB,OAAO,OAAM,QAAQ,SAAS;AAAA,MAC5F;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,MAAM,SAAS,eAAe,OAAM,WAAW,OAAM;AAAA,QACrD,IAAI,QAAQ;AAAA,UACR,OAAO,yBAAyB,UAAU,OAAO,QAAQ,OAAO,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QACvG;AAAA,QACA,OAAO,yBAAyB,gBAAgB,OAAO,OAAM,QAAQ,SAAS;AAAA,MAClF;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,oCAAoC,OAAO;AAAA,QACtD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,kCAAkC,OAAO;AAAA,QACpD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,mCAAmC,OAAO;AAAA,QACrD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,4CAAwC,OAAO;AAAA,QAC1D,OAAO,WAAW,iBAAiB,OAAO,WAAW,OAAM;AAAA,MAC/D;AAAA,WACK;AAAA,QACD,OAAO,2CAAuC,OAAM;AAAA,WACnD;AAAA,QACD,OAAO,GAAG,OAAM,KAAK,SAAS,IAAI,sBAAkB,sBAAwB,WAAW,OAAM,MAAM,IAAI;AAAA,WACtG;AAAA,QACD,OAAO,sBAAkB,OAAM;AAAA,WAC9B;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,sBAAkB,OAAM;AAAA;AAAA,QAE/B,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EA1GvB;AAAA;;;ACuGA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,OAAM;AAAA,EACvB;AAAA;AAAA,IAzGE,SAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,WAAW,MAAM,WAAW;AAAA,IAC5C,MAAM,EAAE,MAAM,SAAS,MAAM,WAAW;AAAA,IACxC,OAAO,EAAE,MAAM,YAAY,MAAM,WAAW;AAAA,IAC5C,KAAK,EAAE,MAAM,YAAY,MAAM,WAAW;AAAA,EAC9C;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,EACX;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,6CAAyC,OAAM,sBAAsB;AAAA,QAChF;AAAA,QACA,OAAO,kCAA8B,sBAAsB;AAAA,MAC/D;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,kCAAmC,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAChF,OAAO,0CAA2C,WAAW,OAAM,QAAQ,GAAG;AAAA,WAC7E,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,8BAA0B,OAAM,UAAU,UAAU,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QAChH,OAAO,8BAA0B,OAAM,UAAU,UAAU,MAAM,OAAM,QAAQ,SAAS;AAAA,MAC5F;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,4BAA4B,OAAM,UAAU,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QAChG;AAAA,QACA,OAAO,4BAA4B,OAAM,UAAU,MAAM,OAAM,QAAQ,SAAS;AAAA,MACpF;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,mCAA+B,OAAO;AAAA,QACjD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,mCAA+B,OAAO;AAAA,QACjD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,+BAA2B,OAAO;AAAA,QAC7C,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,yCAAqC,OAAO;AAAA,QACvD,OAAO,gBAAY,iBAAiB,OAAO,WAAW,OAAM;AAAA,MAChE;AAAA,WACK;AAAA,QACD,OAAO,8CAA0C,OAAM;AAAA,WACtD;AAAA,QACD,OAAO,GAAG,OAAM,KAAK,SAAS,IAAI,4BAAwB,+BAAiC,WAAW,OAAM,MAAM,IAAI;AAAA,WACrH;AAAA,QACD,OAAO,iCAA0B,OAAM;AAAA,WACtC;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,yBAAqB,OAAM;AAAA;AAAA,QAElC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAnGvB;AAAA;;;ACwGA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,OAAM;AAAA,EACvB;AAAA;AAAA,IA1GE,SAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,gEAAa,MAAM,wCAAU;AAAA,IAC7C,MAAM,EAAE,MAAM,SAAS,MAAM,wCAAS;AAAA,IACtC,OAAO,EAAE,MAAM,oDAAW,MAAM,wCAAU;AAAA,IAC1C,KAAK,EAAE,MAAM,oDAAW,MAAM,wCAAU;AAAA,IACxC,KAAK,EAAE,MAAM,4EAAe,MAAM,wCAAU;AAAA,EAChD;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,EACT;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,OAAO,OAAM,aAAa,YAAY,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UACrE,OAAO,yKAA2C,OAAM,wDAAqB;AAAA,QACjF;AAAA,QACA,OAAO,8JAAgC,wDAAqB;AAAA,MAChE;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,8JAAqC,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAClF,OAAO,oMAA6C,WAAW,OAAM,QAAQ,GAAG;AAAA,WAC/E,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,+HAA0B,OAAM,UAAU,oEAAkB,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QACxH,OAAO,+HAA0B,OAAM,UAAU,0EAAmB,MAAM,OAAM,QAAQ,SAAS;AAAA,MACrG;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,yHAAyB,OAAM,gDAAkB,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QACrG;AAAA,QACA,OAAO,yHAAyB,OAAM,sDAAmB,MAAM,OAAM,QAAQ,SAAS;AAAA,MAC1F;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW,eAAe;AAAA,UACjC,OAAO,oOAA+C,OAAO;AAAA,QACjE;AAAA,QACA,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,sPAAkD,OAAO;AAAA,QACpE,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,mOAA8C,OAAO;AAAA,QAChE,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,uSAA2D,OAAO;AAAA,QAC7E,OAAO,sDAAa,iBAAiB,OAAO,WAAW,OAAM;AAAA,MACjE;AAAA,WACK;AAAA,QACD,OAAO,8QAAsD,OAAM;AAAA,WAClE;AAAA,QACD,OAAO,uCAAQ,OAAM,KAAK,SAAS,IAAI,WAAM,0CAAY,OAAM,KAAK,SAAS,IAAI,iBAAO,aAAa,WAAW,OAAM,MAAM,IAAI;AAAA,WAC/H;AAAA,QACD,OAAO,6GAAuB,OAAM;AAAA,WACnC;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,iGAAqB,OAAM;AAAA;AAAA,QAElC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EApGvB;AAAA;;;AC4GA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IA9GE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,cAAc,MAAM,UAAU;AAAA,IAC9C,MAAM,EAAE,MAAM,SAAS,MAAM,UAAU;AAAA,IACvC,OAAO,EAAE,MAAM,SAAS,MAAM,UAAU;AAAA,IACxC,KAAK,EAAE,MAAM,SAAS,MAAM,UAAU;AAAA,IACtC,KAAK,EAAE,MAAM,WAAW,MAAM,UAAU;AAAA,EAC5C;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EAEA,MAAM,iBAAiB;AAAA,IAEnB,KAAK;AAAA,EAET;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,OAAO,2BAA2B,sBAAsB;AAAA,MAC5D;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,2BAAgC,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAC7E,OAAO,mCAAwC,WAAW,OAAM,QAAQ,GAAG;AAAA,WAC1E,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,qBAAqB,OAAM,UAAU,mBAAmB,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QACpH,OAAO,qBAAqB,OAAM,UAAU,iBAAiB,MAAM,OAAM,QAAQ,SAAS;AAAA,MAC9F;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,uBAAuB,OAAM,kBAAkB,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QACnG;AAAA,QACA,OAAO,uBAAuB,OAAM,gBAAgB,MAAM,OAAM,QAAQ,SAAS;AAAA,MACrF;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW,eAAe;AAAA,UACjC,OAAO,oCAAoC,OAAO;AAAA,QACtD;AAAA,QACA,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,kCAAkC,OAAO;AAAA,QACpD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,iCAAiC,OAAO;AAAA,QACnD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,sCAAsC,OAAO;AAAA,QACxD,OAAO,WAAW,iBAAiB,OAAO,WAAW,OAAM;AAAA,MAC/D;AAAA,WACK;AAAA,QACD,OAAO,yCAAyC,OAAM;AAAA,WACrD;AAAA,QACD,OAAO,mBAAmB,OAAM,KAAK,SAAS,IAAI,MAAM,OAAY,WAAW,OAAM,MAAM,IAAI;AAAA,WAC9F;AAAA,QACD,OAAO,kBAAkB,OAAM;AAAA,WAC9B;AAAA,QACD,IAAI,OAAM,WAAW,MAAM,QAAQ,OAAM,OAAO,KAAK,OAAM,QAAQ,SAAS,GAAG;AAAA,UAC3E,MAAM,OAAO,OAAM,QAAQ,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK;AAAA,UAC1D,OAAO,yCAAyC;AAAA,QACpD;AAAA,QACA,OAAO;AAAA,WACN;AAAA,QACD,OAAO,oBAAoB,OAAM;AAAA;AAAA,QAEjC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAxGvB;AAAA;;;ACwGA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IA1GE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,cAAc,MAAM,OAAO;AAAA,IAC3C,MAAM,EAAE,MAAM,WAAW,MAAM,OAAO;AAAA,IACtC,OAAO,EAAE,MAAM,cAAc,MAAM,OAAO;AAAA,IAC1C,KAAK,EAAE,MAAM,cAAc,MAAM,OAAO;AAAA,EAC5C;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACV;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,6CAAuC,OAAM,4BAAuB;AAAA,QAC/E;AAAA,QACA,OAAO,kCAA4B,4BAAuB;AAAA,MAC9D;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,kCAAiC,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAC9E,OAAO,yCAAwC,WAAW,OAAM,QAAQ,GAAG;AAAA,WAC1E,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,iCAA2B,OAAM,UAAU,iBAAiB,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QACxH,OAAO,iCAA2B,OAAM,UAAU,iBAAiB,MAAM,OAAM,QAAQ,SAAS;AAAA,MACpG;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,oCAA8B,OAAM,eAAe,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QACvG;AAAA,QACA,OAAO,oCAA8B,OAAM,eAAe,MAAM,OAAM,QAAQ,SAAS;AAAA,MAC3F;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,kDAA4C,OAAO;AAAA,QAC9D,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,+CAAyC,OAAO;AAAA,QAC3D,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,yCAAyC,OAAO;AAAA,QAC3D,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,oDAAoD,OAAO;AAAA,QACtE,OAAO,YAAY,iBAAiB,OAAO,WAAW,OAAM;AAAA,MAChE;AAAA,WACK;AAAA,QACD,OAAO,uCAAuC,OAAM;AAAA,WACnD;AAAA,QACD,OAAO,WAAW,OAAM,KAAK,SAAS,IAAI,MAAM,kBAAY,OAAM,KAAK,SAAS,IAAI,MAAM,OAAY,WAAW,OAAM,MAAM,IAAI;AAAA,WAChI;AAAA,QACD,OAAO,4BAAsB,OAAM;AAAA,WAClC;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,sBAAsB,OAAM;AAAA;AAAA,QAEnC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EApGvB;AAAA;;;AC+HA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IAjIE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,cAAc,MAAM,QAAQ;AAAA,IAC5C,MAAM,EAAE,MAAM,SAAS,MAAM,QAAQ;AAAA,IACrC,OAAO,EAAE,MAAM,aAAa,MAAM,QAAQ;AAAA,IAC1C,KAAK,EAAE,MAAM,aAAa,MAAM,QAAQ;AAAA,EAC5C;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,MAAM;AAAA,IACN,UAAU;AAAA,IACV,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,IACT,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,IACT,KAAK;AAAA,EACT;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,+CAA2C,OAAM,sBAAsB;AAAA,QAClF;AAAA,QACA,OAAO,oCAAgC,sBAAsB;AAAA,MACjE;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,oCAAqC,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAClF,OAAO,6CAA2C,WAAW,OAAM,QAAQ,GAAG;AAAA,WAC7E,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,MAAM,SAAS,eAAe,OAAM,WAAW,OAAM;AAAA,QACrD,IAAI;AAAA,UACA,OAAO,qCAAqC,UAAU,mBAAmB,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QAC9H,OAAO,qCAAqC,UAAU,iBAAiB,MAAM,OAAM,QAAQ,SAAS;AAAA,MACxG;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,MAAM,SAAS,eAAe,OAAM,WAAW,OAAM;AAAA,QACrD,IAAI,QAAQ;AAAA,UACR,OAAO,yCAAqC,kBAAkB,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QAC3G;AAAA,QACA,OAAO,yCAAqC,gBAAgB,MAAM,OAAM,QAAQ,SAAS;AAAA,MAC7F;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,0CAAsC,OAAO;AAAA,QACxD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,yCAAqC,OAAO;AAAA,QACvD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,qCAAiC,OAAO;AAAA,QACnD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,uDAAgD,OAAO;AAAA,QAClE,OAAO,eAAW,iBAAiB,OAAO,WAAW,OAAM;AAAA,MAC/D;AAAA,WACK;AAAA,QACD,OAAO,kDAAwC,OAAM;AAAA,WACpD;AAAA,QACD,OAAO,QAAQ,OAAM,KAAK,SAAS,IAAI,MAAM,iBAAiB,OAAM,KAAK,SAAS,IAAI,MAAM,OAAY,WAAW,OAAM,MAAM,IAAI;AAAA,WAClI;AAAA,QACD,OAAO,wBAAoB,eAAe,OAAM,WAAW,OAAM;AAAA,WAChE;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,wBAAoB,eAAe,OAAM,WAAW,OAAM;AAAA;AAAA,QAEjE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EA3HvB;AAAA;;;AC6GA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IA/GE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,8CAAU,MAAM,0DAAa;AAAA,IAC7C,MAAM,EAAE,MAAM,4BAAO,MAAM,0DAAa;AAAA,IACxC,OAAO,EAAE,MAAM,4BAAO,MAAM,0DAAa;AAAA,IACzC,KAAK,EAAE,MAAM,4BAAO,MAAM,0DAAa;AAAA,EAC3C;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,EACX;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,0IAAqC,OAAM,uDAAoB;AAAA,QAC1E;AAAA,QACA,OAAO,+HAA0B,uDAAoB;AAAA,MACzD;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW,GAAG;AAAA,UAC3B,OAAO,+HAA+B,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAC5E;AAAA,QACA,OAAO,+JAAsC,WAAW,OAAM,QAAQ,GAAG;AAAA,WACxE,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,sDAAa,OAAM,UAAU,6DAAgB,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QACzG;AAAA,QACA,OAAO,sDAAa,OAAM,UAAU,6DAAgB,MAAM,OAAM,QAAQ,SAAS;AAAA,MACrF;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,sDAAa,OAAM,mCAAe,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QACtF;AAAA,QACA,OAAO,sDAAa,OAAM,mCAAe,MAAM,OAAM,QAAQ,SAAS;AAAA,MAC1E;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW,eAAe;AAAA,UACjC,OAAO,+GAAyB,OAAO;AAAA,QAC3C;AAAA,QACA,IAAI,OAAO,WAAW,aAAa;AAAA,UAC/B,OAAO,+GAAyB,OAAO;AAAA,QAC3C;AAAA,QACA,IAAI,OAAO,WAAW,YAAY;AAAA,UAC9B,OAAO,2HAA2B,OAAO;AAAA,QAC7C;AAAA,QACA,IAAI,OAAO,WAAW,SAAS;AAAA,UAC3B,OAAO,6IAA8B,OAAO;AAAA,QAChD;AAAA,QACA,OAAO,GAAG,iBAAiB,OAAO,WAAW,OAAM;AAAA,MACvD;AAAA,WACK;AAAA,QACD,OAAO,oHAAyB,OAAM;AAAA,WACrC;AAAA,QACD,OAAO,2BAAM,OAAM,KAAK,SAAS,IAAI,uBAAQ,4CAAmB,WAAW,OAAM,MAAM,IAAI;AAAA,WAC1F;AAAA,QACD,OAAO,8EAAiB,OAAM;AAAA,WAC7B;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,0FAAmB,OAAM;AAAA;AAAA,QAEhC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAzGvB;AAAA;;;AC2GA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IA7GE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,cAAU,SAAS,cAAc;AAAA,IACjD,MAAM,EAAE,MAAM,SAAS,SAAS,YAAY;AAAA,IAC5C,OAAO,EAAE,MAAM,WAAW,SAAS,SAAS;AAAA,IAC5C,KAAK,EAAE,MAAM,WAAW,SAAS,SAAS;AAAA,IAC1C,QAAQ,EAAE,MAAM,IAAI,SAAS,QAAQ;AAAA,IACrC,QAAQ,EAAE,MAAM,IAAI,SAAS,uBAAuB;AAAA,IACpD,KAAK,EAAE,MAAM,IAAI,SAAS,gBAAgB;AAAA,IAC1C,MAAM,EAAE,MAAM,IAAI,SAAS,6BAAa;AAAA,EAC5C;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,EACT;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,8CAA8C,OAAM,iBAAiB;AAAA,QAChF;AAAA,QACA,OAAO,mCAAmC,iBAAiB;AAAA,MAC/D;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,yCAAuC,mBAAmB,OAAM,OAAO,EAAE;AAAA,QACpF,OAAO,0DAA2D,WAAW,OAAM,QAAQ,GAAG;AAAA,WAC7F,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,gBAAgB,OAAO,0BAAsB,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,OAAO,KAAK;AAAA,QAC7G;AAAA,QACA,OAAO,qCAAiC,MAAM,OAAM,QAAQ,SAAS;AAAA,MACzE;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,gBAAgB,OAAO,0BAAsB,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,OAAO,KAAK;AAAA,QAC7G;AAAA,QACA,OAAO,qCAAiC,MAAM,OAAM,QAAQ,SAAS;AAAA,MACzE;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,2CAAoC,OAAO;AAAA,QACtD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,4CAAqC,OAAO;AAAA,QACvD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,uDAAuC,OAAO;AAAA,QACzD,IAAI,OAAO,WAAW,SAAS;AAAA,UAC3B,OAAO,gFAA6D,OAAO;AAAA,QAC/E;AAAA,QACA,OAAO,gBAAgB,iBAAiB,OAAO,WAAW,OAAM;AAAA,MACpE;AAAA,WACK;AAAA,QACD,OAAO,2CAAuC,OAAM;AAAA,WACnD;AAAA,QACD,OAAO,GAAG,OAAM,KAAK,SAAS,IAAI,0BAA0B,uBAA4B,WAAW,OAAM,MAAM,IAAI;AAAA,WAClH;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO;AAAA;AAAA,QAEP,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAvGvB;AAAA;;;ACwHA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IA1HE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,iBAAa,MAAM,QAAQ;AAAA,IAC3C,MAAM,EAAE,MAAM,UAAU,MAAM,QAAQ;AAAA,IACtC,OAAO,EAAE,MAAM,kBAAW,MAAM,QAAQ;AAAA,IACxC,KAAK,EAAE,MAAM,kBAAW,MAAM,QAAQ;AAAA,EAC1C;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,aAAa;AAAA,IACb,KAAK;AAAA,IACL,UAAU;AAAA,EACd;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,mCAA+B,OAAM,qBAAqB;AAAA,QACrE;AAAA,QACA,OAAO,wBAAoB,qBAAqB;AAAA,MACpD;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,wBAAyB,mBAAmB,OAAM,OAAO,EAAE;AAAA,QACtE,OAAO,sCAA2C,WAAW,OAAM,QAAQ,GAAG;AAAA,WAC7E,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,gBAAgB,eAAe,OAAM,WAAW,iBAAiB,OAAO,QAAQ,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QAC5I,OAAO,gBAAgB,eAAe,OAAM,WAAW,yBAAqB,MAAM,OAAM,QAAQ,SAAS;AAAA,MAC7G;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,gBAAgB,eAAe,OAAM,WAAW,iBAAiB,OAAO,QAAQ,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QACpI,OAAO,gBAAgB,eAAe,OAAM,WAAW,yBAAqB,MAAM,OAAM,QAAQ,SAAS;AAAA,MAC7G;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,4CAAwC,OAAO;AAAA,QAC1D,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,8CAA0C,OAAO;AAAA,QAC5D,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,sCAAkC,OAAO;AAAA,QACpD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,uDAAgD,OAAO;AAAA,QAClE,OAAO,GAAG,iBAAiB,OAAO,WAAW,OAAM;AAAA,MACvD;AAAA,WACK;AAAA,QACD,OAAO,iDAA6C,OAAM;AAAA,WACzD;AAAA,QACD,OAAO,SAAK,OAAM,KAAK,SAAS,IAAI,MAAM,kBAAkB,OAAM,KAAK,SAAS,IAAI,MAAM,QAAa,WAAW,OAAM,MAAM,IAAI;AAAA,WACjI;AAAA,QACD,OAAO,wBAAoB,OAAM;AAAA,WAChC;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,wBAAwB,OAAM;AAAA;AAAA,QAErC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EApHvB;AAAA;;;ACsGA,SAAO,aAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IAxGE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,iBAAa,MAAM,QAAQ;AAAA,IAC3C,MAAM,EAAE,MAAM,UAAU,MAAM,QAAQ;AAAA,IACtC,OAAO,EAAE,MAAM,kBAAW,MAAM,QAAQ;AAAA,IACxC,KAAK,EAAE,MAAM,kBAAW,MAAM,QAAQ;AAAA,EAC1C;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,EACT;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,2CAAuC,OAAM,qBAAkB;AAAA,QAC1E;AAAA,QACA,OAAO,gCAA4B,qBAAkB;AAAA,MACzD;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,gCAAiC,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAC9E,OAAO,yDAA8D,WAAW,OAAM,QAAQ,GAAG;AAAA,WAChG,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,WAAK;AAAA,QACnC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,4BAA4B,OAAM,UAAU,mBAAmB,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QACnH,OAAO,4BAA4B,OAAM,UAAU,oBAAoB,MAAM,OAAM,QAAQ,SAAS;AAAA,MACxG;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,WAAK;AAAA,QACnC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,4BAA4B,OAAM,cAAc,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QACpG;AAAA,QACA,OAAO,4BAA4B,OAAM,eAAe,MAAM,OAAM,QAAQ,SAAS;AAAA,MACzF;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW,eAAe;AAAA,UACjC,OAAO,4CAAwC,OAAO;AAAA,QAC1D;AAAA,QACA,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,8CAA0C,OAAO;AAAA,QAC5D,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,sCAAkC,OAAO;AAAA,QACpD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,mDAA+C,OAAO;AAAA,QACjE,OAAO,GAAG,iBAAiB,OAAO,WAAW,OAAM;AAAA,MACvD;AAAA,WACK;AAAA,QACD,OAAO,iDAA6C,OAAM;AAAA,WACzD;AAAA,QACD,OAAO,SAAK,OAAM,KAAK,SAAS,IAAI,MAAM,kBAAkB,OAAM,KAAK,SAAS,IAAI,MAAM,QAAa,WAAW,OAAM,MAAM,IAAI;AAAA,WACjI;AAAA,QACD,OAAO,wBAAoB,OAAM;AAAA,WAChC;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,wBAAwB,OAAM;AAAA;AAAA,QAErC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAlGvB;AAAA;;;ACiNA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IAnNE,UAAQ,MAAM;AAAA,EAEhB,MAAM,YAAY;AAAA,IACd,QAAQ,EAAE,OAAO,wCAAS,QAAQ,IAAI;AAAA,IACtC,QAAQ,EAAE,OAAO,4BAAO,QAAQ,IAAI;AAAA,IACpC,SAAS,EAAE,OAAO,iEAAc,QAAQ,IAAI;AAAA,IAC5C,QAAQ,EAAE,OAAO,UAAU,QAAQ,IAAI;AAAA,IACvC,MAAM,EAAE,OAAO,kCAAQ,QAAQ,IAAI;AAAA,IACnC,OAAO,EAAE,OAAO,4BAAO,QAAQ,IAAI;AAAA,IACnC,QAAQ,EAAE,OAAO,8CAAU,QAAQ,IAAI;AAAA,IACvC,MAAM,EAAE,OAAO,gDAAiB,QAAQ,IAAI;AAAA,IAC5C,WAAW,EAAE,OAAO,8EAA2B,QAAQ,IAAI;AAAA,IAC3D,QAAQ,EAAE,OAAO,iDAAkB,QAAQ,IAAI;AAAA,IAC/C,UAAU,EAAE,OAAO,8CAAU,QAAQ,IAAI;AAAA,IACzC,KAAK,EAAE,OAAO,4BAAY,QAAQ,IAAI;AAAA,IACtC,KAAK,EAAE,OAAO,wCAAc,QAAQ,IAAI;AAAA,IACxC,MAAM,EAAE,OAAO,4BAAO,QAAQ,IAAI;AAAA,IAClC,SAAS,EAAE,OAAO,WAAW,QAAQ,IAAI;AAAA,IACzC,KAAK,EAAE,OAAO,OAAO,QAAQ,IAAI;AAAA,IACjC,SAAS,EAAE,OAAO,4DAAc,QAAQ,IAAI;AAAA,IAC5C,OAAO,EAAE,OAAO,sBAAM,QAAQ,IAAI;AAAA,EACtC;AAAA,EAEA,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,kCAAQ,YAAY,sBAAO,WAAW,2BAAO;AAAA,IAC7D,MAAM,EAAE,MAAM,wCAAS,YAAY,sBAAO,WAAW,2BAAO;AAAA,IAC5D,OAAO,EAAE,MAAM,wCAAS,YAAY,sBAAO,WAAW,2BAAO;AAAA,IAC7D,KAAK,EAAE,MAAM,wCAAS,YAAY,sBAAO,WAAW,2BAAO;AAAA,IAC3D,QAAQ,EAAE,MAAM,IAAI,YAAY,sBAAM,WAAW,2BAAO;AAAA,EAC5D;AAAA,EAEA,MAAM,YAAY,CAAC,MAAO,IAAI,UAAU,KAAK;AAAA,EAC7C,MAAM,YAAY,CAAC,MAAM;AAAA,IACrB,MAAM,IAAI,UAAU,CAAC;AAAA,IACrB,IAAI;AAAA,MACA,OAAO,EAAE;AAAA,IAEb,OAAO,KAAK,UAAU,QAAQ;AAAA;AAAA,EAElC,MAAM,eAAe,CAAC,MAAM,SAAG,UAAU,CAAC;AAAA,EAC1C,MAAM,UAAU,CAAC,MAAM;AAAA,IACnB,MAAM,IAAI,UAAU,CAAC;AAAA,IACrB,MAAM,SAAS,GAAG,UAAU;AAAA,IAC5B,OAAO,WAAW,MAAM,kEAAe;AAAA;AAAA,EAE3C,MAAM,YAAY,CAAC,WAAW;AAAA,IAC1B,IAAI,CAAC;AAAA,MACD,OAAO;AAAA,IACX,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO,EAAE,OAAO,sBAAM,QAAQ,IAAI;AAAA,IAClC,OAAO,EAAE,OAAO,uEAAe,QAAQ,IAAI;AAAA,IAC3C,KAAK,EAAE,OAAO,qDAAY,QAAQ,IAAI;AAAA,IACtC,OAAO,EAAE,OAAO,yCAAU,QAAQ,IAAI;AAAA,IACtC,MAAM,EAAE,OAAO,QAAQ,QAAQ,IAAI;AAAA,IACnC,QAAQ,EAAE,OAAO,UAAU,QAAQ,IAAI;AAAA,IACvC,MAAM,EAAE,OAAO,QAAQ,QAAQ,IAAI;AAAA,IACnC,MAAM,EAAE,OAAO,QAAQ,QAAQ,IAAI;AAAA,IACnC,OAAO,EAAE,OAAO,SAAS,QAAQ,IAAI;AAAA,IACrC,MAAM,EAAE,OAAO,QAAQ,QAAQ,IAAI;AAAA,IACnC,KAAK,EAAE,OAAO,OAAO,QAAQ,IAAI;AAAA,IACjC,OAAO,EAAE,OAAO,SAAS,QAAQ,IAAI;AAAA,IACrC,UAAU,EAAE,OAAO,+DAAiB,QAAQ,IAAI;AAAA,IAChD,MAAM,EAAE,OAAO,sCAAY,QAAQ,IAAI;AAAA,IACvC,MAAM,EAAE,OAAO,0BAAU,QAAQ,IAAI;AAAA,IACrC,UAAU,EAAE,OAAO,6CAAc,QAAQ,IAAI;AAAA,IAC7C,MAAM,EAAE,OAAO,uCAAa,QAAQ,IAAI;AAAA,IACxC,MAAM,EAAE,OAAO,uCAAa,QAAQ,IAAI;AAAA,IACxC,QAAQ,EAAE,OAAO,iCAAY,QAAQ,IAAI;AAAA,IACzC,QAAQ,EAAE,OAAO,iCAAY,QAAQ,IAAI;AAAA,IACzC,QAAQ,EAAE,OAAO,0EAAkB,QAAQ,IAAI;AAAA,IAC/C,WAAW,EAAE,OAAO,wIAA8B,QAAQ,IAAI;AAAA,IAC9D,aAAa,EAAE,OAAO,6CAAc,QAAQ,IAAI;AAAA,IAChD,MAAM,EAAE,OAAO,kCAAa,QAAQ,IAAI;AAAA,IACxC,KAAK,EAAE,OAAO,OAAO,QAAQ,IAAI;AAAA,IACjC,WAAW,EAAE,OAAO,sBAAM,QAAQ,IAAI;AAAA,IACtC,UAAU,EAAE,OAAO,sBAAM,QAAQ,IAAI;AAAA,IACrC,WAAW,EAAE,OAAO,sBAAM,QAAQ,IAAI;AAAA,IACtC,aAAa,EAAE,OAAO,sBAAM,QAAQ,IAAI;AAAA,IACxC,WAAW,EAAE,OAAO,sBAAM,QAAQ,IAAI;AAAA,EAC1C;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,EACT;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QAEjB,MAAM,cAAc,OAAM;AAAA,QAC1B,MAAM,WAAW,eAAe,eAAe,OAAO,UAAU,WAAW;AAAA,QAE3E,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB,UAAU,eAAe,SAAS;AAAA,QACnF,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,gIAAqC,OAAM,4CAAmB;AAAA,QACzE;AAAA,QACA,OAAO,qHAA0B,4CAAmB;AAAA,MACxD;AAAA,WACK,iBAAiB;AAAA,QAClB,IAAI,OAAM,OAAO,WAAW,GAAG;AAAA,UAC3B,OAAO,8IAAoC,mBAAmB,OAAM,OAAO,EAAE;AAAA,QACjF;AAAA,QAEA,MAAM,cAAc,OAAM,OAAO,IAAI,CAAC,MAAW,mBAAmB,CAAC,CAAC;AAAA,QACtE,IAAI,OAAM,OAAO,WAAW,GAAG;AAAA,UAC3B,OAAO,kLAAqC,YAAY,mBAAS,YAAY;AAAA,QACjF;AAAA,QAEA,MAAM,YAAY,YAAY,YAAY,SAAS;AAAA,QACnD,MAAM,aAAa,YAAY,MAAM,GAAG,EAAE,EAAE,KAAK,IAAI;AAAA,QACrD,OAAO,kLAAqC,2BAAiB;AAAA,MACjE;AAAA,WACK,WAAW;AAAA,QACZ,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,MAAM,UAAU,aAAa,OAAM,UAAU,OAAO;AAAA,QACpD,IAAI,OAAM,WAAW,UAAU;AAAA,UAE3B,OAAO,GAAG,QAAQ,aAAa,kDAAc,yEAAuB,OAAM,QAAQ,SAAS,KAAK,QAAQ,QAAQ,MAAM,OAAM,YAAY,0CAAY,sDAAc,KAAK;AAAA,QAC3K;AAAA,QACA,IAAI,OAAM,WAAW,UAAU;AAAA,UAE3B,MAAM,aAAa,OAAM,YAAY,mEAAgB,OAAM,YAAY,6BAAS,OAAM;AAAA,UACtF,OAAO,gDAAY,mEAAsB;AAAA,QAC7C;AAAA,QACA,IAAI,OAAM,WAAW,WAAW,OAAM,WAAW,OAAO;AAAA,UAEpD,MAAM,OAAO,OAAM,WAAW,QAAQ,mCAAS;AAAA,UAC/C,MAAM,aAAa,OAAM,YACnB,GAAG,OAAM,WAAW,QAAQ,QAAQ,6CACpC,mCAAS,OAAM,WAAW,QAAQ,QAAQ;AAAA,UAChD,OAAO,gDAAY,WAAW,uCAAc,aAAa,KAAK;AAAA,QAClE;AAAA,QACA,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,KAAK,QAAQ,OAAM,UAAU,OAAO;AAAA,QAC1C,IAAI,QAAQ,MAAM;AAAA,UACd,OAAO,GAAG,OAAO,iCAAiB,WAAW,MAAM,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QAChG;AAAA,QACA,OAAO,GAAG,QAAQ,aAAa,kDAAc,WAAW,MAAM,MAAM,OAAM,QAAQ,SAAS;AAAA,MAC/F;AAAA,WACK,aAAa;AAAA,QACd,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,MAAM,UAAU,aAAa,OAAM,UAAU,OAAO;AAAA,QACpD,IAAI,OAAM,WAAW,UAAU;AAAA,UAE3B,OAAO,GAAG,QAAQ,cAAc,4CAAa,yEAAuB,OAAM,QAAQ,SAAS,KAAK,QAAQ,QAAQ,MAAM,OAAM,YAAY,0CAAY,mCAAU,KAAK;AAAA,QACvK;AAAA,QACA,IAAI,OAAM,WAAW,UAAU;AAAA,UAE3B,MAAM,aAAa,OAAM,YAAY,yEAAiB,OAAM,YAAY,mCAAU,OAAM;AAAA,UACxF,OAAO,0CAAW,mEAAsB;AAAA,QAC5C;AAAA,QACA,IAAI,OAAM,WAAW,WAAW,OAAM,WAAW,OAAO;AAAA,UAEpD,MAAM,OAAO,OAAM,WAAW,QAAQ,mCAAS;AAAA,UAE/C,IAAI,OAAM,YAAY,KAAK,OAAM,WAAW;AAAA,YACxC,MAAM,iBAAiB,OAAM,WAAW,QAAQ,+EAAkB;AAAA,YAClE,OAAO,0CAAW,WAAW,uCAAc;AAAA,UAC/C;AAAA,UACA,MAAM,aAAa,OAAM,YACnB,GAAG,OAAM,WAAW,QAAQ,QAAQ,6CACpC,mCAAS,OAAM,WAAW,QAAQ,QAAQ;AAAA,UAChD,OAAO,0CAAW,WAAW,uCAAc,aAAa,KAAK;AAAA,QACjE;AAAA,QACA,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,KAAK,QAAQ,OAAM,UAAU,OAAO;AAAA,QAC1C,IAAI,QAAQ,MAAM;AAAA,UACd,OAAO,GAAG,OAAO,kCAAkB,WAAW,MAAM,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QACjG;AAAA,QACA,OAAO,GAAG,QAAQ,cAAc,4CAAa,WAAW,MAAM,MAAM,OAAM,QAAQ,SAAS;AAAA,MAC/F;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QAEf,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,0HAA0B,OAAO;AAAA,QAC5C,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,gIAA2B,OAAO;AAAA,QAC7C,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,6GAAuB,OAAO;AAAA,QACzC,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,uJAA8B,OAAO;AAAA,QAEhD,MAAM,YAAY,iBAAiB,OAAO;AAAA,QAC1C,MAAM,OAAO,WAAW,SAAS,OAAO;AAAA,QACxC,MAAM,SAAS,WAAW,UAAU;AAAA,QACpC,MAAM,YAAY,WAAW,MAAM,mCAAS;AAAA,QAC5C,OAAO,GAAG,qBAAU;AAAA,MACxB;AAAA,WACK;AAAA,QACD,OAAO,uKAAoC,OAAM;AAAA,WAChD;AAAA,QACD,OAAO,2BAAM,OAAM,KAAK,SAAS,IAAI,iBAAO,2CAAa,OAAM,KAAK,SAAS,IAAI,iBAAO,aAAa,WAAW,OAAM,MAAM,IAAI;AAAA,WAC/H,eAAe;AAAA,QAChB,OAAO;AAAA,MACX;AAAA,WACK;AAAA,QACD,OAAO;AAAA,WACN,mBAAmB;AAAA,QACpB,MAAM,QAAQ,aAAa,OAAM,UAAU,OAAO;AAAA,QAClD,OAAO,kEAAe;AAAA,MAC1B;AAAA;AAAA,QAEI,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EA7MvB;AAAA;;;ACqHA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IAvHE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,WAAW,MAAM,QAAQ;AAAA,IACzC,MAAM,EAAE,MAAM,WAAW,MAAM,QAAQ;AAAA,IACvC,OAAO,EAAE,MAAM,UAAU,MAAM,QAAQ;AAAA,IACvC,KAAK,EAAE,MAAM,UAAU,MAAM,QAAQ;AAAA,EACzC;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,MAAM;AAAA,IACN,UAAU;AAAA,IACV,KAAK;AAAA,EACT;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,+CAAyC,OAAM,4BAA4B;AAAA,QACtF;AAAA,QACA,OAAO,oCAA8B,4BAA4B;AAAA,MACrE;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,yCAAwC,mBAAmB,OAAM,OAAO,EAAE;AAAA,QACrF,OAAO,8CAA6C,WAAW,OAAM,QAAQ,GAAG;AAAA,WAC/E,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,MAAM,SAAS,eAAe,OAAM,WAAW,OAAM;AAAA,QACrD,IAAI;AAAA,UACA,OAAO,gCAA0B,UAAU,oBAAoB,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QACpH,OAAO,gCAA0B,UAAU,qBAAqB,MAAM,OAAM,QAAQ,SAAS;AAAA,MACjG;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,MAAM,SAAS,eAAe,OAAM,WAAW,OAAM;AAAA,QACrD,IAAI,QAAQ;AAAA,UACR,OAAO,8BAAwB,cAAc,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QAC1F;AAAA,QACA,OAAO,8BAAwB,eAAe,MAAM,OAAM,QAAQ,SAAS;AAAA,MAC/E;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,8CAAwC,OAAO;AAAA,QAC1D,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,6CAAuC,OAAO;AAAA,QACzD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,2CAAqC,OAAO;AAAA,QACvD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,4CAA4C,OAAO;AAAA,QAC9D,OAAO,cAAc,iBAAiB,OAAO,WAAW,OAAM;AAAA,MAClE;AAAA,WACK;AAAA,QACD,OAAO,kDAA4C,OAAM;AAAA,WACxD;AAAA,QACD,OAAO,cAAc,OAAM,KAAK,SAAS,IAAI,oBAAc,kBAAkB,WAAW,OAAM,MAAM,IAAI;AAAA,WACvG;AAAA,QACD,OAAO,2BAAqB,eAAe,OAAM,WAAW,OAAM;AAAA,WACjE;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,2BAA2B,eAAe,OAAM,WAAW,OAAM;AAAA;AAAA,QAExE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAjHvB;AAAA;;;ACuGA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IAzGE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,YAAY,MAAM,SAAS;AAAA,IAC3C,MAAM,EAAE,MAAM,QAAQ,MAAM,SAAS;AAAA,IACrC,OAAO,EAAE,MAAM,QAAQ,MAAM,SAAS;AAAA,IACtC,KAAK,EAAE,MAAM,QAAQ,MAAM,SAAS;AAAA,EACxC;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,EACX;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,+DAA+C,OAAM,kCAA4B;AAAA,QAC5F;AAAA,QACA,OAAO,oDAAoC,kCAA4B;AAAA,MAC3E;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,oDAAyC,mBAAmB,OAAM,OAAO,EAAE;AAAA,QACtF,OAAO,8DAAgD,WAAW,OAAM,QAAQ,GAAG;AAAA,WAClF,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,gBAAY,OAAM,UAAU,uCAA2B,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QACnH,OAAO,uCAA6B,OAAM,UAAU,8BAAqB,MAAM,OAAM,QAAQ,SAAS;AAAA,MAC1G;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,wCAA8B,OAAM,iCAA2B,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QACnH;AAAA,QACA,OAAO,wCAA8B,OAAM,uBAAoB,MAAM,OAAM,QAAQ,SAAS;AAAA,MAChG;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,8BAAuB,OAAO;AAAA,QACzC,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,8BAAuB,OAAO;AAAA,QACzC,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,8BAAuB,OAAO;AAAA,QACzC,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,6BAAsB,OAAO;AAAA,QACxC,OAAO,qBAAc,iBAAiB,OAAO,WAAW,OAAM;AAAA,MAClE;AAAA,WACK;AAAA,QACD,OAAO,8BAAoB,OAAM;AAAA,WAChC;AAAA,QACD,OAAO,mBAAmB,OAAM,KAAK,SAAS,IAAI,MAAM,OAAY,WAAW,OAAM,MAAM,IAAI;AAAA,WAC9F;AAAA,QACD,OAAO,2BAAoB,OAAM;AAAA,WAChC;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,kCAAqB,OAAM;AAAA;AAAA,QAElC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAnGvB;AAAA;;;ACCA,SAAS,iBAAiB,CAAC,OAAO,KAAK,MAAM;AAAA,EACzC,OAAO,KAAK,IAAI,KAAK,MAAM,IAAI,MAAM;AAAA;AAEzC,SAAS,mBAAmB,CAAC,MAAM;AAAA,EAC/B,IAAI,CAAC;AAAA,IACD,OAAO;AAAA,EACX,MAAM,SAAS,CAAC,UAAI,UAAK,UAAK,UAAK,UAAK,gBAAM,QAAG;AAAA,EACjD,MAAM,WAAW,KAAK,KAAK,SAAS;AAAA,EACpC,OAAO,QAAQ,OAAO,SAAS,QAAQ,IAAI,WAAK;AAAA;AAqIpD,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IAtIE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ;AAAA,MACJ,MAAM;AAAA,QACF,KAAK;AAAA,QACL,MAAM;AAAA,MACV;AAAA,MACA,MAAM;AAAA,IACV;AAAA,IACA,MAAM;AAAA,MACF,MAAM;AAAA,QACF,KAAK;AAAA,QACL,MAAM;AAAA,MACV;AAAA,MACA,MAAM;AAAA,IACV;AAAA,IACA,OAAO;AAAA,MACH,MAAM;AAAA,QACF,KAAK;AAAA,QACL,MAAM;AAAA,MACV;AAAA,MACA,MAAM;AAAA,IACV;AAAA,IACA,KAAK;AAAA,MACD,MAAM;AAAA,QACF,KAAK;AAAA,QACL,MAAM;AAAA,MACV;AAAA,MACA,MAAM;AAAA,IACV;AAAA,EACJ;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,EACX;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,8KAA2C,OAAM,+DAAuB;AAAA,QACnF;AAAA,QACA,OAAO,mKAAgC,+DAAuB;AAAA,MAClE;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,mKAAqC,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAClF,OAAO,yPAAqD,WAAW,OAAM,QAAQ,GAAG;AAAA,WACvF,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,MAAM,WAAW,OAAO,OAAM,OAAO;AAAA,UACrC,MAAM,OAAO,kBAAkB,UAAU,OAAO,KAAK,KAAK,OAAO,KAAK,IAAI;AAAA,UAC1E,OAAO,kLAAqC,oBAAoB,OAAM,UAAU,gCAAO,gDAAa,MAAM,OAAM,QAAQ,SAAS,KAAK;AAAA,QAC1I;AAAA,QACA,OAAO,kLAAqC,oBAAoB,OAAM,UAAU,gCAAO,8BAAU,MAAM,OAAM,QAAQ,SAAS;AAAA,MAClI;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,MAAM,WAAW,OAAO,OAAM,OAAO;AAAA,UACrC,MAAM,OAAO,kBAAkB,UAAU,OAAO,KAAK,KAAK,OAAO,KAAK,IAAI;AAAA,UAC1E,OAAO,wLAAsC,oBAAoB,OAAM,MAAM,gDAAa,MAAM,OAAM,QAAQ,SAAS,KAAK;AAAA,QAChI;AAAA,QACA,OAAO,wLAAsC,oBAAoB,OAAM,MAAM,8BAAU,MAAM,OAAM,QAAQ,SAAS;AAAA,MACxH;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,qHAA0B,OAAO;AAAA,QAC5C,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,iIAA4B,OAAO;AAAA,QAC9C,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,6IAA8B,OAAO;AAAA,QAChD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,oKAAiC,OAAO;AAAA,QACnD,OAAO,4BAAO,iBAAiB,OAAO,WAAW,OAAM;AAAA,MAC3D;AAAA,WACK;AAAA,QACD,OAAO,2KAAmC,OAAM;AAAA,WAC/C;AAAA,QACD,OAAO,8FAAkB,OAAM,KAAK,SAAS,IAAI,uBAAQ,OAAY,WAAW,OAAM,MAAM,IAAI;AAAA,WAC/F;AAAA,QACD,OAAO,iEAAc,oBAAoB,OAAM,MAAM;AAAA,WACpD;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,2DAAa,oBAAoB,OAAM,MAAM;AAAA;AAAA,QAEpD,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EA1IvB;AAAA;;;ACqGA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IAvGE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,YAAY,MAAM,WAAW;AAAA,IAC7C,MAAM,EAAE,MAAM,QAAQ,MAAM,WAAW;AAAA,IACvC,OAAO,EAAE,MAAM,QAAQ,MAAM,WAAW;AAAA,IACxC,KAAK,EAAE,MAAM,QAAQ,MAAM,WAAW;AAAA,EAC1C;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,EACT;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,4CAA4C,OAAM,sBAAsB;AAAA,QACnF;AAAA,QACA,OAAO,iCAAiC,sBAAsB;AAAA,MAClE;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,iCAAsC,mBAAmB,OAAM,OAAO,EAAE;AAAA,QACnF,OAAO,mDAAwD,WAAW,OAAM,QAAQ,GAAG;AAAA,WAC1F,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,6BAA6B,OAAM,UAAU,oBAAoB,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QAC7H,OAAO,6BAA6B,OAAM,UAAU,mBAAmB,MAAM,OAAM,QAAQ,SAAS;AAAA,MACxG;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,6BAA6B,OAAM,mBAAmB,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QAC1G;AAAA,QACA,OAAO,6BAA6B,OAAM,kBAAkB,MAAM,OAAM,QAAQ,SAAS;AAAA,MAC7F;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,6CAA6C,OAAO;AAAA,QAC/D,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,8CAA8C,OAAO;AAAA,QAChE,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,0CAA0C,OAAO;AAAA,QAC5D,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,yCAAyC,OAAO;AAAA,QAC3D,OAAO,GAAG,iBAAiB,OAAO,WAAW,OAAM;AAAA,MACvD;AAAA,WACK;AAAA,QACD,OAAO,2CAA2C,OAAM;AAAA,WACvD;AAAA,QACD,OAAO,wBAAwB,OAAM,KAAK,SAAS,IAAI,MAAM,OAAY,WAAW,OAAM,MAAM,IAAI;AAAA,WACnG;AAAA,QACD,OAAO,wBAAwB,OAAM;AAAA,WACpC;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,wBAAwB,OAAM;AAAA;AAAA,QAErC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAjGvB;AAAA;;;ACwGA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IA1GE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,SAAS,MAAM,aAAS;AAAA,IACxC,MAAM,EAAE,MAAM,WAAO,MAAM,aAAU;AAAA,IACrC,OAAO,EAAE,MAAM,SAAS,MAAM,aAAS;AAAA,IACvC,KAAK,EAAE,MAAM,SAAS,MAAM,aAAS;AAAA,EACzC;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,EACX;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,sCAA4B,kDAAyC,OAAM;AAAA,QACtF;AAAA,QACA,OAAO,sCAA4B,uCAA8B;AAAA,MACrE;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,qCAAmC,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAChF,OAAO,iDAA+C,WAAW,OAAM,QAAQ,GAAG;AAAA,WACjF,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,8CAAiC,OAAM,UAAU,gBAAgB,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QAC7H,OAAO,8CAAiC,OAAM,UAAU,iBAAc,MAAM,OAAM,QAAQ,SAAS;AAAA,MACvG;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,iDAAiC,OAAM,eAAe,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QAC1G;AAAA,QACA,OAAO,iDAAiC,OAAM,gBAAa,MAAM,OAAM,QAAQ,SAAS;AAAA,MAC5F;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW,eAAe;AAAA,UACjC,OAAO,oDAAuC,OAAO;AAAA,QACzD;AAAA,QACA,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,mDAAsC,OAAO;AAAA,QACxD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,mDAAyC,OAAO;AAAA,QAC3D,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,uDAA6C,OAAO;AAAA,QAC/D,OAAO,SAAS,iBAAiB,OAAO,WAAW,OAAM;AAAA,MAC7D;AAAA,WACK;AAAA,QACD,OAAO,mDAAyC,OAAM;AAAA,WACrD;AAAA,QACD,OAAO,gBAAS,OAAM,KAAK,SAAS,IAAI,cAAc,gBAAqB,WAAW,OAAM,MAAM,IAAI;AAAA,WACrG;AAAA,QACD,OAAO,sBAAkB,OAAM;AAAA,WAC9B;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,oBAAgB,OAAM;AAAA;AAAA,QAE7B,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EApGvB;AAAA;;;ACuGA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IAzGE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,aAAa,MAAM,QAAQ;AAAA,IAC3C,MAAM,EAAE,MAAM,QAAQ,MAAM,QAAQ;AAAA,IACpC,OAAO,EAAE,MAAM,YAAY,MAAM,QAAQ;AAAA,IACzC,KAAK,EAAE,MAAM,YAAY,MAAM,QAAQ;AAAA,EAC3C;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,EACX;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,uCAAuC,OAAM,sBAAsB;AAAA,QAC9E;AAAA,QACA,OAAO,4BAA4B,sBAAsB;AAAA,MAC7D;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,4BAAiC,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAC9E,OAAO,sCAA2C,WAAW,OAAM,QAAQ,GAAG;AAAA,WAC7E,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,kBAAkB,OAAM,UAAU,uBAAuB,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QACrH,OAAO,kBAAkB,OAAM,UAAU,wBAAwB,MAAM,OAAM,QAAQ,SAAS;AAAA,MAClG;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,mBAAmB,OAAM,qBAAqB,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QAClG;AAAA,QACA,OAAO,mBAAmB,OAAM,sBAAsB,MAAM,OAAM,QAAQ,SAAS;AAAA,MACvF;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,0CAA0C,OAAO;AAAA,QAC5D,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,2CAA2C,OAAO;AAAA,QAC7D,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,uCAAuC,OAAO;AAAA,QACzD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,qDAAqD,OAAO;AAAA,QACvE,OAAO,qBAAqB,iBAAiB,OAAO,WAAW,OAAM;AAAA,MACzE;AAAA,WACK;AAAA,QACD,OAAO,iDAAiD,OAAM;AAAA,WAC7D;AAAA,QACD,OAAO,QAAQ,OAAM,KAAK,SAAS,IAAI,MAAM,sBAAsB,OAAM,KAAK,SAAS,IAAI,MAAM,QAAa,WAAW,OAAM,MAAM,IAAI;AAAA,WACxI;AAAA,QACD,OAAO,wBAAwB,OAAM;AAAA,WACpC;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,wBAAwB,OAAM;AAAA;AAAA,QAErC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAnGvB;AAAA;;;ACsGA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IAxGE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,gBAAK,MAAM,qBAAM;AAAA,IACjC,MAAM,EAAE,MAAM,sBAAM,MAAM,qBAAM;AAAA,IAChC,OAAO,EAAE,MAAM,gBAAK,MAAM,qBAAM;AAAA,IAChC,KAAK,EAAE,MAAM,gBAAK,MAAM,qBAAM;AAAA,EAClC;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,EACX;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,8CAAoB,OAAM,uEAAqB;AAAA,QAC1D;AAAA,QACA,OAAO,mCAAS,uEAAqB;AAAA,MACzC;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,mCAAc,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAC3D,OAAO,mCAAc,WAAW,OAAM,QAAQ,QAAG;AAAA,WAChD,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,mCAAS;AAAA,QACvC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,yCAAU,OAAM,UAAU,iBAAO,OAAM,QAAQ,SAAS,IAAI,OAAO,QAAQ,iBAAO;AAAA,QAC7F,OAAO,yCAAU,OAAM,UAAU,iBAAO,OAAM,QAAQ,SAAS,IAAI;AAAA,MACvE;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,mCAAS;AAAA,QACvC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,yCAAU,OAAM,eAAU,OAAM,QAAQ,SAAS,IAAI,OAAO,OAAO;AAAA,QAC9E,OAAO,yCAAU,OAAM,eAAU,OAAM,QAAQ,SAAS,IAAI;AAAA,MAChE;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,0CAAW,OAAO;AAAA,QAC7B,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,0CAAW,OAAO;AAAA,QAC7B,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,0CAAW,OAAO;AAAA,QAC7B,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,iEAAc,OAAO;AAAA,QAChC,OAAO,qBAAK,iBAAiB,OAAO,WAAW,OAAM;AAAA,MACzD;AAAA,WACK;AAAA,QACD,OAAO,mCAAS,OAAM;AAAA,WACrB;AAAA,QACD,OAAO,+DAAY,OAAM,KAAK,SAAS,IAAI,WAAM,OAAY,WAAW,OAAM,MAAM,QAAG;AAAA,WACtF;AAAA,QACD,OAAO,GAAG,OAAM;AAAA,WACf;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,GAAG,OAAM;AAAA;AAAA,QAEhB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAlGvB;AAAA;;;AC2GA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IA7GE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,8CAAU,MAAM,kFAAiB;AAAA,IACjD,MAAM,EAAE,MAAM,kCAAQ,MAAM,kFAAiB;AAAA,IAC7C,OAAO,EAAE,MAAM,oDAAW,MAAM,kFAAiB;AAAA,IACjD,KAAK,EAAE,MAAM,oDAAW,MAAM,kFAAiB;AAAA,EACnD;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,EACX;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,8KAA2C,OAAM,8DAAsB;AAAA,QAClF;AAAA,QACA,OAAO,mKAAgC,8DAAsB;AAAA,MACjE;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,mKAAqC,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAClF,OAAO,2NAAgD,WAAW,OAAM,QAAQ,GAAG;AAAA,WAClF,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,iJAA6B,OAAM,UAAU,wEAAiB,OAAO,QAAQ,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QACjI,OAAO,iJAA6B,OAAM,UAAU,iGAAsB,MAAM,OAAM,QAAQ,SAAS;AAAA,MAC3G;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,6JAA+B,OAAM,UAAU,OAAO,QAAQ,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QAClH;AAAA,QACA,OAAO,6JAA+B,OAAM,mCAAe,MAAM,OAAM,QAAQ,SAAS;AAAA,MAC5F;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW,eAAe;AAAA,UACjC,OAAO,+JAAiC,OAAO;AAAA,QACnD;AAAA,QACA,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,iLAAoC,OAAO;AAAA,QACtD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,+JAAiC,OAAO;AAAA,QACnD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,uOAA6C,OAAO;AAAA,QAC/D,OAAO,oDAAW,iBAAiB,OAAO,WAAW,OAAM;AAAA,MAC/D;AAAA,WACK;AAAA,QACD,OAAO,4IAA6B,OAAM;AAAA,WACzC;AAAA,QACD,OAAO,kFAAgB,OAAM,KAAK,SAAS,IAAI,uBAAQ,aAAa,WAAW,OAAM,MAAM,IAAI;AAAA,WAC9F;AAAA,QACD,OAAO,qGAAoB,OAAM;AAAA,WAChC;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,uHAAuB,OAAM;AAAA;AAAA,QAEpC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAvGvB;AAAA;;;ACyGA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IA3GE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,8CAAU,MAAM,uCAAS;AAAA,IACzC,MAAM,EAAE,MAAM,gBAAK,MAAM,uCAAS;AAAA,IAClC,OAAO,EAAE,MAAM,4BAAO,MAAM,uCAAS;AAAA,IACrC,KAAK,EAAE,MAAM,4BAAO,MAAM,uCAAS;AAAA,EACvC;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACV;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,wOAAmD,OAAM,iGAA2B;AAAA,QAC/F;AAAA,QACA,OAAO,6NAAwC,iGAA2B;AAAA,MAC9E;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,6NAA6C,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAC1F,OAAO,qPAAiD,WAAW,OAAM,QAAQ,GAAG;AAAA,WACnF,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,yFAAkB,OAAM,UAAU,oCAAW,OAAO,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QAC1G,OAAO,yFAAkB,OAAM,UAAU,oCAAW,OAAO,OAAM,QAAQ,SAAS;AAAA,MACtF;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,+FAAmB,OAAM,UAAU,OAAO,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QACxF;AAAA,QACA,OAAO,+FAAmB,OAAM,UAAU,OAAO,OAAM,QAAQ,SAAS;AAAA,MAC5E;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW,eAAe;AAAA,UACjC,OAAO,sPAA6C,OAAO;AAAA,QAC/D;AAAA,QACA,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,oOAA0C,OAAO;AAAA,QAC5D,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,gMAAoC,OAAO;AAAA,QACtD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,iWAA8D,OAAO;AAAA,QAChF,OAAO,wFAAiB,iBAAiB,OAAO,WAAW,OAAM;AAAA,MACrE;AAAA,WACK;AAAA,QACD,OAAO,iNAAsC,OAAM;AAAA,WAClD;AAAA,QACD,OAAO,0GAAyB,WAAW,OAAM,MAAM,IAAI;AAAA,WAC1D;AAAA,QACD,OAAO,wIAAyB,OAAM;AAAA,WACrC;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,4KAA+B,OAAM;AAAA;AAAA,QAE5C,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EArGvB;AAAA;;;ACEA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO,WAAG;AAAA;AAAA;AAAA,EAHd;AAAA;;;AC0GA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IA5GE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,gBAAK,MAAM,UAAU;AAAA,IACrC,MAAM,EAAE,MAAM,sBAAM,MAAM,UAAU;AAAA,IACpC,OAAO,EAAE,MAAM,UAAI,MAAM,UAAU;AAAA,IACnC,KAAK,EAAE,MAAM,UAAI,MAAM,UAAU;AAAA,EACrC;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,EACT;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,+EAA4B,OAAM,6CAAoB;AAAA,QACjE;AAAA,QACA,OAAO,oEAAiB,6CAAoB;AAAA,MAChD;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,iDAAkB,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAC/D,OAAO,oCAAe,WAAW,OAAM,QAAQ,eAAK;AAAA,WACnD,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,iBAAM;AAAA,QACpC,MAAM,SAAS,QAAQ,iBAAM,0CAAY;AAAA,QACzC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,MAAM,OAAO,QAAQ,QAAQ;AAAA,QAC7B,IAAI;AAAA,UACA,OAAO,GAAG,OAAM,UAAU,mDAAe,OAAM,QAAQ,SAAS,IAAI,QAAQ,MAAM;AAAA,QACtF,OAAO,GAAG,OAAM,UAAU,mDAAe,OAAM,QAAQ,SAAS,KAAK,MAAM;AAAA,MAC/E;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,iBAAM;AAAA,QACpC,MAAM,SAAS,QAAQ,iBAAM,0CAAY;AAAA,QACzC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,MAAM,OAAO,QAAQ,QAAQ;AAAA,QAC7B,IAAI,QAAQ;AAAA,UACR,OAAO,GAAG,OAAM,UAAU,yDAAgB,OAAM,QAAQ,SAAS,IAAI,QAAQ,MAAM;AAAA,QACvF;AAAA,QACA,OAAO,GAAG,OAAM,UAAU,yDAAgB,OAAM,QAAQ,SAAS,KAAK,MAAM;AAAA,MAChF;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW,eAAe;AAAA,UACjC,OAAO,2CAAY,OAAO;AAAA,QAC9B;AAAA,QACA,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,2CAAY,OAAO;AAAA,QAC9B,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,2CAAY,OAAO;AAAA,QAC9B,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,6DAAe,OAAO;AAAA,QACjC,OAAO,sBAAM,iBAAiB,OAAO,WAAW,OAAM;AAAA,MAC1D;AAAA,WACK;AAAA,QACD,OAAO,oCAAU,OAAM;AAAA,WACtB;AAAA,QACD,OAAO,kDAAmB,WAAW,OAAM,MAAM,IAAI;AAAA,WACpD;AAAA,QACD,OAAO,8BAAS,OAAM;AAAA,WACrB;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,8BAAS,OAAM;AAAA;AAAA,QAEtB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAtGvB;AAAA;;;ACIA,SAAS,qBAAqB,CAAC,SAAQ;AAAA,EACnC,MAAM,MAAM,KAAK,IAAI,OAAM;AAAA,EAC3B,MAAM,OAAO,MAAM;AAAA,EACnB,MAAM,QAAQ,MAAM;AAAA,EACpB,IAAK,SAAS,MAAM,SAAS,MAAO,SAAS;AAAA,IACzC,OAAO;AAAA,EACX,IAAI,SAAS;AAAA,IACT,OAAO;AAAA,EACX,OAAO;AAAA;AA0LX,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IAxME,2BAA2B,CAAC,SAAS;AAAA,EACvC,OAAO,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC;AAAA,GAYhD,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ;AAAA,MACJ,MAAM;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,MAAM;AAAA,MACV;AAAA,MACA,MAAM;AAAA,QACF,SAAS;AAAA,UACL,WAAW;AAAA,UACX,cAAc;AAAA,QAClB;AAAA,QACA,QAAQ;AAAA,UACJ,WAAW;AAAA,UACX,cAAc;AAAA,QAClB;AAAA,MACJ;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,MACF,MAAM;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,MAAM;AAAA,MACV;AAAA,MACA,MAAM;AAAA,QACF,SAAS;AAAA,UACL,WAAW;AAAA,UACX,cAAc;AAAA,QAClB;AAAA,QACA,QAAQ;AAAA,UACJ,WAAW;AAAA,UACX,cAAc;AAAA,QAClB;AAAA,MACJ;AAAA,IACJ;AAAA,IACA,OAAO;AAAA,MACH,MAAM;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,MAAM;AAAA,MACV;AAAA,MACA,MAAM;AAAA,QACF,SAAS;AAAA,UACL,WAAW;AAAA,UACX,cAAc;AAAA,QAClB;AAAA,QACA,QAAQ;AAAA,UACJ,WAAW;AAAA,UACX,cAAc;AAAA,QAClB;AAAA,MACJ;AAAA,IACJ;AAAA,IACA,KAAK;AAAA,MACD,MAAM;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,MAAM;AAAA,MACV;AAAA,MACA,MAAM;AAAA,QACF,SAAS;AAAA,UACL,WAAW;AAAA,UACX,cAAc;AAAA,QAClB;AAAA,QACA,QAAQ;AAAA,UACJ,WAAW;AAAA,UACX,cAAc;AAAA,QAClB;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ,UAAU,WAAW,gBAAgB;AAAA,IAC5D,MAAM,SAAS,QAAQ,WAAW;AAAA,IAClC,IAAI,WAAW;AAAA,MACX,OAAO;AAAA,IACX,OAAO;AAAA,MACH,MAAM,OAAO,KAAK;AAAA,MAClB,MAAM,OAAO,KAAK,gBAAgB,YAAY,cAAc;AAAA,IAChE;AAAA;AAAA,EAEJ,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,WAAW;AAAA,IACX,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,MAAM;AAAA,EACV;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,gBAAgB,0CAAoC,OAAM;AAAA,QACrE;AAAA,QACA,OAAO,gBAAgB,+BAAyB;AAAA,MACpD;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,qBAAoB,mBAAmB,OAAM,OAAO,EAAE;AAAA,QACjE,OAAO,oCAA8B,WAAW,OAAM,QAAQ,GAAG;AAAA,WAChE,WAAW;AAAA,QACZ,MAAM,SAAS,eAAe,OAAM,WAAW,OAAM;AAAA,QACrD,MAAM,SAAS,UAAU,OAAM,QAAQ,sBAAsB,OAAO,OAAM,OAAO,CAAC,GAAG,OAAM,aAAa,OAAO,SAAS;AAAA,QACxH,IAAI,QAAQ;AAAA,UACR,OAAO,GAAG,yBAAyB,UAAU,OAAM,UAAU,mBAAQ,KAAK,OAAO,QAAQ,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QACxI,MAAM,MAAM,OAAM,YAAY,qBAAqB;AAAA,QACnD,OAAO,GAAG,yBAAyB,UAAU,OAAM,UAAU,mBAAQ,oBAAe,OAAO,OAAM,QAAQ,SAAS,KAAK,QAAQ;AAAA,MACnI;AAAA,WACK,aAAa;AAAA,QACd,MAAM,SAAS,eAAe,OAAM,WAAW,OAAM;AAAA,QACrD,MAAM,SAAS,UAAU,OAAM,QAAQ,sBAAsB,OAAO,OAAM,OAAO,CAAC,GAAG,OAAM,aAAa,OAAO,QAAQ;AAAA,QACvH,IAAI,QAAQ;AAAA,UACR,OAAO,GAAG,yBAAyB,UAAU,OAAM,UAAU,mBAAQ,KAAK,OAAO,QAAQ,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QACxI,MAAM,MAAM,OAAM,YAAY,0BAAoB;AAAA,QAClD,OAAO,GAAG,yBAAyB,UAAU,OAAM,UAAU,mBAAQ,oBAAe,OAAO,OAAM,QAAQ,SAAS,KAAK,QAAQ;AAAA,MACnI;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW,eAAe;AAAA,UACjC,OAAO,uCAA4B,OAAO;AAAA,QAC9C;AAAA,QACA,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,mCAA6B,OAAO;AAAA,QAC/C,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,sCAA2B,OAAO;AAAA,QAC7C,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,gCAA0B,OAAO;AAAA,QAC5C,OAAO,eAAe,iBAAiB,OAAO,WAAW,OAAM;AAAA,MACnE;AAAA,WACK;AAAA,QACD,OAAO,mCAAwB,OAAM;AAAA,WACpC;AAAA,QACD,OAAO,kBAAY,OAAM,KAAK,SAAS,IAAI,MAAM,YAAY,OAAM,KAAK,SAAS,IAAI,OAAO,SAAc,WAAW,OAAM,MAAM,IAAI;AAAA,WACpI;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO;AAAA,WACN,mBAAmB;AAAA,QACpB,MAAM,SAAS,eAAe,OAAM,WAAW,OAAM;AAAA,QACrD,OAAO,GAAG,yBAAyB,UAAU,OAAM,UAAU,mBAAQ;AAAA,MACzE;AAAA;AAAA,QAEI,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAlMvB;AAAA;;;ACwGA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IA1GE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,kCAAQ,MAAM,8CAAW;AAAA,IACzC,MAAM,EAAE,MAAM,kCAAQ,MAAM,8CAAW;AAAA,IACvC,OAAO,EAAE,MAAM,wCAAS,MAAM,8CAAW;AAAA,IACzC,KAAK,EAAE,MAAM,wCAAS,MAAM,8CAAW;AAAA,EAC3C;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,EACX;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,qIAAqC,OAAM,wDAAqB;AAAA,QAC3E;AAAA,QACA,OAAO,0HAA0B,wDAAqB;AAAA,MAC1D;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,2BAAgC,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAC7E,OAAO,qKAAuC,WAAW,OAAM,QAAQ,GAAG;AAAA,WACzE,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,4IAA6B,OAAM,UAAU,4FAAsB,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QAC/H,OAAO,4IAA6B,OAAM,UAAU,kGAAuB,MAAM,OAAM,QAAQ,SAAS;AAAA,MAC5G;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,gIAA2B,OAAM,0CAAiB,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QACtG;AAAA,QACA,OAAO,gIAA2B,OAAM,gDAAkB,MAAM,OAAM,QAAQ,SAAS;AAAA,MAC3F;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW,eAAe;AAAA,UACjC,OAAO,+LAAwC,OAAO;AAAA,QAC1D;AAAA,QACA,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,yLAAuC,OAAO;AAAA,QACzD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,4KAAoC,OAAO;AAAA,QACtD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,mOAA8C,OAAO;AAAA,QAChE,OAAO,WAAW,iBAAiB,OAAO,WAAW,OAAM;AAAA,MAC/D;AAAA,WACK;AAAA,QACD,OAAO,6KAAqC,OAAM;AAAA,WACjD;AAAA,QACD,OAAO,GAAG,OAAM,KAAK,SAAS,IAAI,8HAAyB,wGAA6B,WAAW,OAAM,MAAM,IAAI;AAAA,WAClH;AAAA,QACD,OAAO,8EAAiB,OAAM;AAAA,WAC7B;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,sGAAqB,OAAM;AAAA;AAAA,QAElC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EApGvB;AAAA;;;ACsGA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IAxGE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,UAAU,MAAM,YAAY;AAAA,IAC5C,MAAM,EAAE,MAAM,QAAQ,MAAM,YAAY;AAAA,IACxC,OAAO,EAAE,MAAM,UAAU,MAAM,YAAY;AAAA,IAC3C,KAAK,EAAE,MAAM,UAAU,MAAM,YAAY;AAAA,EAC7C;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,EACZ;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,wCAAwC,OAAM,sBAAsB;AAAA,QAC/E;AAAA,QACA,OAAO,6BAA6B,sBAAsB;AAAA,MAC9D;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,6BAAkC,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAC/E,OAAO,mDAAwD,WAAW,OAAM,QAAQ,GAAG;AAAA,WAC1F,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,2BAA2B,OAAM,UAAU,WAAW,OAAO,QAAQ,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QACjI,OAAO,2BAA2B,OAAM,UAAU,kBAAkB,MAAM,OAAM,QAAQ,SAAS;AAAA,MACrG;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,2BAA2B,OAAM,UAAU,OAAO,QAAQ,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QAC9G;AAAA,QACA,OAAO,2BAA2B,OAAM,iBAAiB,MAAM,OAAM,QAAQ,SAAS;AAAA,MAC1F;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,2CAA2C,OAAO;AAAA,QAC7D,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,4CAA4C,OAAO;AAAA,QAC9D,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,wCAAwC,OAAO;AAAA,QAC1D,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,gDAAgD,OAAO;AAAA,QAClE,OAAO,GAAG,iBAAiB,OAAO,WAAW,OAAM;AAAA,MACvD;AAAA,WACK;AAAA,QACD,OAAO,mCAAmC,OAAM;AAAA,WAC/C;AAAA,QACD,OAAO,yBAA8B,WAAW,OAAM,MAAM,IAAI;AAAA,WAC/D;AAAA,QACD,OAAO,yBAAyB,OAAM;AAAA,WACrC;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,yBAAyB,OAAM;AAAA;AAAA,QAEtC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAlGvB;AAAA;;;ACyGA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IA3GE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,UAAU,MAAM,QAAQ;AAAA,IACxC,MAAM,EAAE,MAAM,SAAS,MAAM,QAAQ;AAAA,IACrC,OAAO,EAAE,MAAM,aAAa,MAAM,QAAQ;AAAA,IAC1C,KAAK,EAAE,MAAM,aAAa,MAAM,QAAQ;AAAA,EAC5C;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,EACZ;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,yCAAyC,OAAM,qBAAqB;AAAA,QAC/E;AAAA,QACA,OAAO,8BAA8B,qBAAqB;AAAA,MAC9D;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,8BAAmC,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAChF,OAAO,2CAAyC,WAAW,OAAM,QAAQ,GAAG;AAAA,WAC3E,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,MAAM,WAAW,OAAM,WAAW,SAAS,SAAS,OAAM,WAAW,WAAW,SAAS;AAAA,QACzF,IAAI;AAAA,UACA,OAAO,MAAM,0BAA0B,OAAM,UAAU,YAAY,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ,eAAe,OAAO;AAAA,QAC9I,OAAO,MAAM,0BAA0B,OAAM,UAAU,YAAY,MAAM,OAAM,QAAQ,SAAS;AAAA,MACpG;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,MAAM,YAAY,OAAM,WAAW,SAAS,UAAU,OAAM,WAAW,WAAW,SAAS;AAAA,QAC3F,IAAI,QAAQ;AAAA,UACR,OAAO,MAAM,2BAA2B,OAAM,UAAU,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ,OAAO;AAAA,QACpH;AAAA,QACA,OAAO,MAAM,2BAA2B,OAAM,UAAU,MAAM,OAAM,QAAQ,SAAS;AAAA,MACzF;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW,eAAe;AAAA,UACjC,OAAO,8BAA8B,OAAO;AAAA,QAChD;AAAA,QACA,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,6BAA6B,OAAO;AAAA,QAC/C,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,0BAA0B,OAAO;AAAA,QAC5C,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,kDAAkD,OAAO;AAAA,QACpE,OAAO,aAAa,iBAAiB,OAAO,WAAW,OAAM;AAAA,MACjE;AAAA,WACK;AAAA,QACD,OAAO,yCAAyC,OAAM;AAAA,WACrD;AAAA,QACD,OAAO,gBAAgB,OAAM,KAAK,SAAS,IAAI,MAAM,OAAY,WAAW,OAAM,MAAM,IAAI;AAAA,WAC3F;AAAA,QACD,OAAO,oBAAoB,OAAM;AAAA,WAChC;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,uBAAuB,OAAM;AAAA;AAAA,QAEpC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EArGvB;AAAA;;;ACuGA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IAzGE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,QAAQ,MAAM,UAAM;AAAA,IACpC,MAAM,EAAE,MAAM,SAAS,MAAM,UAAM;AAAA,IACnC,OAAO,EAAE,MAAM,aAAa,MAAM,iBAAa;AAAA,IAC/C,KAAK,EAAE,MAAM,aAAa,MAAM,iBAAa;AAAA,EACjD;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,EACX;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,uCAAuC,OAAM,kBAAkB;AAAA,QAC1E;AAAA,QACA,OAAO,4BAA4B,kBAAkB;AAAA,MACzD;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,4BAAiC,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAC9E,OAAO,iCAAsC,WAAW,OAAM,QAAQ,GAAG;AAAA,WACxE,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,0BAA0B,OAAM,UAAU,uBAAmB,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QACzH,OAAO,0BAA0B,OAAM,UAAU,uBAAmB,MAAM,OAAM,QAAQ,SAAS;AAAA,MACrG;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,0BAA0B,OAAM,sBAAkB,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QACtG;AAAA,QACA,OAAO,0BAA0B,OAAM,sBAAkB,MAAM,OAAM,QAAQ,SAAS;AAAA,MAC1F;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,qCAAiC,OAAO;AAAA,QACnD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,mCAA+B,OAAO;AAAA,QACjD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,oCAAgC,OAAO;AAAA,QAClD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,6CAAsC,OAAO;AAAA,QACxD,OAAO,WAAW,iBAAiB,OAAO,WAAW,OAAM;AAAA,MAC/D;AAAA,WACK;AAAA,QACD,OAAO,+CAAwC,OAAM;AAAA,WACpD;AAAA,QACD,OAAO,GAAG,OAAM,KAAK,SAAS,IAAI,sBAAkB,uBAAyB,WAAW,OAAM,MAAM,IAAI;AAAA,WACvG;AAAA,QACD,OAAO,uBAAmB,OAAM;AAAA,WAC/B;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,mBAAmB,OAAM;AAAA;AAAA,QAEhC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAnGvB;AAAA;;;ACwGA,SAAO,WAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IA1GE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,QAAQ,MAAM,sBAAW;AAAA,IACzC,MAAM,EAAE,MAAM,QAAQ,MAAM,sBAAW;AAAA,IACvC,OAAO,EAAE,MAAM,SAAS,MAAM,sBAAW;AAAA,IACzC,KAAK,EAAE,MAAM,SAAS,MAAM,sBAAW;AAAA,EAC3C;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACV;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,qCAAiC,OAAM,yBAAoB;AAAA,QACtE;AAAA,QACA,OAAO,0BAAsB,yBAAoB;AAAA,MACrD;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,0BAA2B,mBAAmB,OAAM,OAAO,EAAE;AAAA,QACxE,OAAO,kCAAgC,WAAW,OAAM,QAAQ,GAAG;AAAA,WAClE,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,sBAAe,OAAM,UAAU,YAAY,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QACvG,OAAO,sBAAe,OAAM,UAAU,YAAY,MAAM,OAAM,QAAQ,SAAS;AAAA,MACnF;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,yBAAe,OAAM,WAAW,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QACpF;AAAA,QACA,OAAO,yBAAe,OAAM,WAAW,MAAM,OAAM,QAAQ,SAAS;AAAA,MACxE;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,oBAAgB,OAAO;AAAA,QAClC,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,oBAAgB,OAAO;AAAA,QAClC,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,oBAAgB,OAAO;AAAA,QAClC,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,mBAAe,OAAO;AAAA,QACjC,OAAO,YAAQ,iBAAiB,OAAO,WAAW,OAAM;AAAA,MAC5D;AAAA,WACK;AAAA,QACD,OAAO,uBAAc,OAAM;AAAA,WAC1B;AAAA,QACD,OAAO,2BAAqB,OAAM,KAAK,SAAS,IAAI,MAAM,OAAY,WAAW,OAAM,MAAM,IAAI;AAAA,WAChG;AAAA,QACD,OAAO,GAAG,OAAM;AAAA,WACf;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,GAAG,OAAM;AAAA;AAAA,QAEhB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EApGvB;AAAA;;;AC6GA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IA/GE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,4BAAO,MAAM,2BAAO;AAAA,IACpC,MAAM,EAAE,MAAM,kCAAQ,MAAM,2BAAO;AAAA,IACnC,OAAO,EAAE,MAAM,4BAAO,MAAM,2BAAO;AAAA,IACnC,KAAK,EAAE,MAAM,4BAAO,MAAM,2BAAO;AAAA,EACrC;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,EACX;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,gGAA8B,OAAM,mDAAqB;AAAA,QACpE;AAAA,QACA,OAAO,qFAAmB,mDAAqB;AAAA,MACnD;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW,GAAG;AAAA,UAC3B,OAAO,qFAAwB,mBAAmB,OAAM,OAAO,EAAE;AAAA,QACrE;AAAA,QACA,OAAO,qHAA+B,WAAW,OAAM,QAAQ,GAAG;AAAA,WACjE,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,0CAAW,OAAM,UAAU,6DAAgB,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QACvG;AAAA,QACA,OAAO,0CAAW,OAAM,UAAU,6DAAgB,MAAM,OAAM,QAAQ,SAAS;AAAA,MACnF;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,sDAAa,OAAM,mCAAe,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QACtF;AAAA,QACA,OAAO,sDAAa,OAAM,mCAAe,MAAM,OAAM,QAAQ,SAAS;AAAA,MAC1E;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW,eAAe;AAAA,UACjC,OAAO,iFAAoB,OAAO;AAAA,QACtC;AAAA,QACA,IAAI,OAAO,WAAW,aAAa;AAAA,UAC/B,OAAO,iFAAoB,OAAO;AAAA,QACtC;AAAA,QACA,IAAI,OAAO,WAAW,YAAY;AAAA,UAC9B,OAAO,0EAAkB,OAAO;AAAA,QACpC;AAAA,QACA,IAAI,OAAO,WAAW,SAAS;AAAA,UAC3B,OAAO,gFAAmB,OAAO;AAAA,QACrC;AAAA,QACA,OAAO,GAAG,iBAAiB,OAAO,WAAW,OAAM;AAAA,MACvD;AAAA,WACK;AAAA,QACD,OAAO,gFAAmB,OAAM;AAAA,WAC/B;AAAA,QACD,OAAO,4BAAO,OAAM,KAAK,SAAS,IAAI,+CAAY,+BAAgB,WAAW,OAAM,MAAM,IAAI;AAAA,WAC5F;AAAA,QACD,OAAO,kEAAe,OAAM;AAAA,WAC3B;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,kEAAe,OAAM;AAAA;AAAA,QAE5B,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAzGvB;AAAA;;;ACwGA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IA1GE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,aAAS,MAAM,YAAO;AAAA,IACtC,MAAM,EAAE,MAAM,aAAS,MAAM,YAAO;AAAA,IACpC,OAAO,EAAE,MAAM,gBAAY,MAAM,YAAO;AAAA,IACxC,KAAK,EAAE,MAAM,gBAAY,MAAM,YAAO;AAAA,EAC1C;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,EACX;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,iEAAsD,OAAM,uBAAuB;AAAA,QAC9F;AAAA,QACA,OAAO,sDAA2C,uBAAuB;AAAA,MAC7E;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,sDAAgD,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAC7F,OAAO,+DAAyD,WAAW,OAAM,QAAQ,GAAG;AAAA,WAC3F,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,uDAAkC,OAAM,UAAU,6CAAyB,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QACvI;AAAA,QACA,OAAO,6CAAkC,OAAM,UAAU,gDAA4B,MAAM,OAAM,QAAQ,SAAS;AAAA,MACtH;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,uDAAkC,OAAM,UAAU,6CAAyB,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QACvI;AAAA,QACA,OAAO,6CAAkC,OAAM,UAAU,gDAA4B,MAAM,OAAM,QAAQ,SAAS;AAAA,MACtH;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,2EAAmD,OAAO;AAAA,QACrE,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,+EAAkD,OAAO;AAAA,QACpE,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,+DAA4C,OAAO;AAAA,QAC9D,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,yEAAsD,OAAO;AAAA,QACxE,OAAO,4BAAsB,iBAAiB,OAAO,WAAW,OAAM;AAAA,MAC1E;AAAA,WACK;AAAA,QACD,OAAO,sEAAiD,OAAM;AAAA,WAC7D;AAAA,QACD,OAAO,uBAAuB,OAAM,KAAK,SAAS,IAAI,MAAM,OAAY,WAAW,OAAM,MAAM,IAAI;AAAA,WAClG;AAAA,QACD,OAAO,8BAAwB,OAAM;AAAA,WACpC;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,0CAA0B,OAAM;AAAA;AAAA,QAEvC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EApGvB;AAAA;;;ACuGA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IAzGE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,cAAc,MAAM,MAAM;AAAA,IAC1C,MAAM,EAAE,MAAM,SAAS,MAAM,MAAM;AAAA,IACnC,OAAO,EAAE,MAAM,SAAS,MAAM,MAAM;AAAA,IACpC,KAAK,EAAE,MAAM,SAAS,MAAM,MAAM;AAAA,EACtC;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,MAAM;AAAA,EACV;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,yCAAqC,OAAM,sBAAsB;AAAA,QAC5E;AAAA,QACA,OAAO,8BAA0B,sBAAsB;AAAA,MAC3D;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,iCAAkC,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAC/E,OAAO,6CAAwC,WAAW,OAAM,QAAQ,GAAG;AAAA,WAC1E,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,8BAA8B,OAAM,UAAU,mBAAmB,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QAC7H,OAAO,8BAA8B,OAAM,UAAU,iBAAiB,MAAM,OAAM,QAAQ,SAAS;AAAA,MACvG;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,+BAA+B,OAAM,kBAAkB,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QAC3G;AAAA,QACA,OAAO,+BAA+B,OAAM,gBAAgB,MAAM,OAAM,QAAQ,SAAS;AAAA,MAC7F;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,2CAAoC,OAAO;AAAA,QACtD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,yCAAqC,OAAO;AAAA,QACvD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,oCAAgC,OAAO;AAAA,QAClD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,qDAA8C,OAAO;AAAA,QAChE,OAAO,GAAG,iBAAiB,OAAO,WAAW,OAAM;AAAA,MACvD;AAAA,WACK;AAAA,QACD,OAAO,kDAAwC,OAAM;AAAA,WACpD;AAAA,QACD,OAAO,QAAQ,OAAM,KAAK,SAAS,IAAI,MAAM,kBAAkB,OAAM,KAAK,SAAS,IAAI,MAAM,OAAY,WAAW,OAAM,MAAM,IAAI;AAAA,WACnI;AAAA,QACD,OAAO,wBAAoB,OAAM;AAAA,WAChC;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,wBAAoB,OAAM;AAAA;AAAA,QAEjC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAnGvB;AAAA;;;ACkHA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IApHE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,aAAa,MAAM,oBAAS;AAAA,IAC5C,MAAM,EAAE,MAAM,eAAS,MAAM,oBAAU;AAAA,IACvC,OAAO,EAAE,MAAM,YAAY,MAAM,oBAAS;AAAA,IAC1C,KAAK,EAAE,MAAM,YAAY,MAAM,oBAAS;AAAA,IACxC,KAAK,EAAE,MAAM,gBAAU,MAAM,oBAAU;AAAA,EAC3C;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,OAAO,wCAA6B,oBAAoB;AAAA,MAC5D;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,wCAAkC,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAC/E,OAAO,wDAA6C,WAAW,OAAM,QAAQ,GAAG;AAAA,WAC/E,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,+BAAyB,OAAM,UAAU,cAAc,OAAO,QAAQ,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QAClI,OAAO,+BAAyB,OAAM,UAAU,0BAAqB,MAAM,OAAM,QAAQ,SAAS;AAAA,MACtG;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,8BAAwB,OAAM,UAAU,OAAO,QAAQ,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QAC3G;AAAA,QACA,OAAO,8BAAwB,OAAM,sBAAiB,MAAM,OAAM,QAAQ,SAAS;AAAA,MACvF;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW,eAAe;AAAA,UACjC,OAAO,yDAAsC,OAAO;AAAA,QACxD;AAAA,QACA,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,oDAAyC,OAAO;AAAA,QAC3D,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,mDAAmC,OAAO;AAAA,QACrD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,oEAAoD,OAAO;AAAA,QACtE,OAAO,mBAAmB,iBAAiB,OAAO,WAAW,OAAM;AAAA,MACvE;AAAA,WACK;AAAA,QACD,OAAO,uDAA4C,OAAM;AAAA,WACxD;AAAA,QACD,OAAO,uBAA4B,WAAW,OAAM,MAAM,IAAI;AAAA,WAC7D;AAAA,QACD,OAAO,6BAAoB,OAAM;AAAA,WAChC;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,+BAAsB,OAAM;AAAA;AAAA,QAEnC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EA9GvB;AAAA;;;ACCA,SAAS,gBAAgB,CAAC,OAAO,KAAK,KAAK,MAAM;AAAA,EAC7C,MAAM,WAAW,KAAK,IAAI,KAAK;AAAA,EAC/B,MAAM,YAAY,WAAW;AAAA,EAC7B,MAAM,gBAAgB,WAAW;AAAA,EACjC,IAAI,iBAAiB,MAAM,iBAAiB,IAAI;AAAA,IAC5C,OAAO;AAAA,EACX;AAAA,EACA,IAAI,cAAc,GAAG;AAAA,IACjB,OAAO;AAAA,EACX;AAAA,EACA,IAAI,aAAa,KAAK,aAAa,GAAG;AAAA,IAClC,OAAO;AAAA,EACX;AAAA,EACA,OAAO;AAAA;AAyIX,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IA1IE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ;AAAA,MACJ,MAAM;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,MAAM;AAAA,MACV;AAAA,MACA,MAAM;AAAA,IACV;AAAA,IACA,MAAM;AAAA,MACF,MAAM;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,MAAM;AAAA,MACV;AAAA,MACA,MAAM;AAAA,IACV;AAAA,IACA,OAAO;AAAA,MACH,MAAM;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,MAAM;AAAA,MACV;AAAA,MACA,MAAM;AAAA,IACV;AAAA,IACA,KAAK;AAAA,MACD,MAAM;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,MAAM;AAAA,MACV;AAAA,MACA,MAAM;AAAA,IACV;AAAA,EACJ;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,EACX;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,gJAAsC,OAAM,8DAAsB;AAAA,QAC7E;AAAA,QACA,OAAO,qIAA2B,8DAAsB;AAAA,MAC5D;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,qIAAgC,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAC7E,OAAO,6LAA2C,WAAW,OAAM,QAAQ,GAAG;AAAA,WAC7E,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,MAAM,WAAW,OAAO,OAAM,OAAO;AAAA,UACrC,MAAM,OAAO,iBAAiB,UAAU,OAAO,KAAK,KAAK,OAAO,KAAK,KAAK,OAAO,KAAK,IAAI;AAAA,UAC1F,OAAO,sNAA2C,OAAM,UAAU,oHAA0B,MAAM,OAAM,QAAQ,SAAS,KAAK;AAAA,QAClI;AAAA,QACA,OAAO,sNAA2C,OAAM,UAAU,qFAAoB,MAAM,OAAM,QAAQ,SAAS;AAAA,MACvH;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,MAAM,WAAW,OAAO,OAAM,OAAO;AAAA,UACrC,MAAM,OAAO,iBAAiB,UAAU,OAAO,KAAK,KAAK,OAAO,KAAK,KAAK,OAAO,KAAK,IAAI;AAAA,UAC1F,OAAO,kOAA6C,OAAM,wEAAsB,MAAM,OAAM,QAAQ,SAAS,KAAK;AAAA,QACtH;AAAA,QACA,OAAO,kOAA6C,OAAM,yCAAgB,MAAM,OAAM,QAAQ,SAAS;AAAA,MAC3G;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,oMAAwC,OAAO;AAAA,QAC1D,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,4NAA4C,OAAO;AAAA,QAC9D,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,uLAAqC,OAAO;AAAA,QACvD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,qQAAkD,OAAO;AAAA,QACpE,OAAO,oDAAW,iBAAiB,OAAO,WAAW,OAAM;AAAA,MAC/D;AAAA,WACK;AAAA,QACD,OAAO,6LAAsC,OAAM;AAAA,WAClD;AAAA,QACD,OAAO,2EAAc,OAAM,KAAK,SAAS,IAAI,iBAAO,0CAAY,OAAM,KAAK,SAAS,IAAI,WAAM,OAAY,WAAW,OAAM,MAAM,IAAI;AAAA,WACpI;AAAA,QACD,OAAO,oFAAkB,OAAM;AAAA,WAC9B;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,4GAAsB,OAAM;AAAA;AAAA,QAEnC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAnJvB;AAAA;;;ACwGA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IA1GE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,UAAU,MAAM,QAAQ;AAAA,IACxC,MAAM,EAAE,MAAM,UAAU,MAAM,QAAQ;AAAA,IACtC,OAAO,EAAE,MAAM,aAAa,MAAM,QAAQ;AAAA,IAC1C,KAAK,EAAE,MAAM,aAAa,MAAM,QAAQ;AAAA,EAC5C;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,EACX;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,gDAA0C,OAAM,qBAAqB;AAAA,QAChF;AAAA,QACA,OAAO,qCAA+B,qBAAqB;AAAA,MAC/D;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,qCAAoC,mBAAmB,OAAM,OAAO,EAAE;AAAA,QACjF,OAAO,uDAAiD,WAAW,OAAM,QAAQ,GAAG;AAAA,WACnF,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,sCAAgC,OAAM,UAAU,oBAAoB,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QAChI,OAAO,sCAAgC,OAAM,UAAU,cAAc,MAAM,OAAM,QAAQ,SAAS;AAAA,MACtG;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,sCAAgC,OAAM,gBAAgB,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QAC1G;AAAA,QACA,OAAO,sCAAgC,OAAM,UAAU,MAAM,OAAM,QAAQ,SAAS;AAAA,MACxF;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW,eAAe;AAAA,UACjC,OAAO,0CAAoC,OAAO;AAAA,QACtD;AAAA,QACA,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,2CAAqC,OAAO;AAAA,QACvD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,mCAAmC,OAAO;AAAA,QACrD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,yCAAyC,OAAO;AAAA,QAC3D,OAAO,cAAc,iBAAiB,OAAO,WAAW,OAAM;AAAA,MAClE;AAAA,WACK;AAAA,QACD,OAAO,sDAA2C,OAAM;AAAA,WACvD;AAAA,QACD,OAAO,cAAc,OAAM,KAAK,SAAS,IAAI,kBAAY,kBAAkB,WAAW,OAAM,MAAM,IAAI;AAAA,WACrG;AAAA,QACD,OAAO,2BAAqB,OAAM;AAAA,WACjC;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,yBAAyB,OAAM;AAAA;AAAA,QAEtC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EApGvB;AAAA;;;ACyGA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IA3GE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,UAAU,MAAM,SAAS;AAAA,IACzC,MAAM,EAAE,MAAM,SAAS,MAAM,SAAS;AAAA,IACtC,OAAO,EAAE,MAAM,UAAU,MAAM,mBAAe;AAAA,IAC9C,KAAK,EAAE,MAAM,UAAU,MAAM,mBAAe;AAAA,EAChD;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,EACX;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,iDAA0C,OAAM,kBAAkB;AAAA,QAC7E;AAAA,QACA,OAAO,sCAA+B,kBAAkB;AAAA,MAC5D;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,sCAAoC,mBAAmB,OAAM,OAAO,EAAE;AAAA,QACjF,OAAO,wCAAsC,WAAW,OAAM,QAAQ,GAAG;AAAA,WACxE,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,oCAA0B,OAAM,UAAU,sBAAmB,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QACzH;AAAA,QACA,OAAO,mCAAyB,OAAM,UAAU,sBAAmB,MAAM,OAAM,QAAQ,SAAS;AAAA,MACpG;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,oCAA0B,OAAM,UAAU,sBAAmB,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QACjH;AAAA,QACA,OAAO,oCAA0B,OAAM,UAAU,sBAAmB,MAAM,OAAM,QAAQ,SAAS;AAAA,MACrG;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW,eAAe;AAAA,UACjC,OAAO,6CAAmC,OAAO;AAAA,QACrD;AAAA,QACA,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,0CAAmC,OAAO;AAAA,QACrD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,6CAAmC,OAAO;AAAA,QACrD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,mDAAyC,OAAO;AAAA,QAC3D,OAAO,cAAc,iBAAiB,OAAO,WAAW,OAAM;AAAA,MAClE;AAAA,WACK;AAAA,QACD,OAAO,8CAA0C,OAAM;AAAA,WACtD;AAAA,QACD,OAAO,GAAG,OAAM,KAAK,SAAS,IAAI,sBAAkB,sBAAwB,WAAW,OAAM,MAAM,IAAI;AAAA,WACtG;AAAA,QACD,OAAO,oBAAoB,OAAM,UAAU;AAAA,WAC1C;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,uBAAmB,OAAM,UAAU;AAAA;AAAA,QAE1C,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EArGvB;AAAA;;;ACyGA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IA3GE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,4EAAe,MAAM,sHAAuB;AAAA,IAC5D,MAAM,EAAE,MAAM,0DAAY,MAAM,sHAAuB;AAAA,IACvD,OAAO,EAAE,MAAM,gEAAa,MAAM,sHAAuB;AAAA,IACzD,KAAK,EAAE,MAAM,gEAAa,MAAM,sHAAuB;AAAA,EAC3D;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACV;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,kNAAiD,OAAM,gFAAyB;AAAA,QAC3F;AAAA,QACA,OAAO,uMAAsC,gFAAyB;AAAA,MAC1E;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,uMAA2C,mBAAmB,OAAM,OAAO,EAAE;AAAA,QACxF,OAAO,mNAA6C,WAAW,OAAM,QAAQ,GAAG;AAAA,WAC/E,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,2LAAoC,OAAM,UAAU,gDAAa,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QAC7H;AAAA,QACA,OAAO,2LAAoC,OAAM,UAAU,gDAAa,MAAM,OAAM,QAAQ,SAAS;AAAA,MACzG;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,uMAAsC,OAAM,UAAU,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QAC1G;AAAA,QACA,OAAO,uMAAsC,OAAM,UAAU,MAAM,OAAM,QAAQ,SAAS;AAAA,MAC9F;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,6DAAe,OAAO;AAAA,QACjC,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,6DAAe,OAAO;AAAA,QACjC,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,6DAAe,OAAO;AAAA,QACjC,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,4DAAc,OAAO;AAAA,QAChC,OAAO,kCAAQ,iBAAiB,OAAO,WAAW,OAAM;AAAA,MAC5D;AAAA,WACK;AAAA,QACD,OAAO,sDAAa,OAAM;AAAA,WACzB;AAAA,QACD,OAAO,uHAAuB,OAAM,KAAK,SAAS,IAAI,uBAAQ,OAAY,WAAW,OAAM,MAAM,IAAI;AAAA,WACpG;AAAA,QACD,OAAO,GAAG,OAAM;AAAA,WACf;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,GAAG,OAAM;AAAA;AAAA,QAEhB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EArGvB;AAAA;;;ACyGA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IA3GE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,oDAAW,MAAM,iCAAQ;AAAA,IACzC,MAAM,EAAE,MAAM,4BAAO,MAAM,iCAAQ;AAAA,IACnC,OAAO,EAAE,MAAM,wCAAS,MAAM,iCAAQ;AAAA,IACtC,KAAK,EAAE,MAAM,wCAAS,MAAM,iCAAQ;AAAA,EACxC;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACV;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,+LAA6C,OAAM,mEAAsB;AAAA,QACpF;AAAA,QACA,OAAO,oLAAkC,mEAAsB;AAAA,MACnE;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,8HAA8B,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAC3E,OAAO,sMAA0C,WAAW,OAAM,QAAQ,GAAG;AAAA,WAC5E,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,+CAAW;AAAA,QACzC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,2DAAa,OAAM,UAAU,sDAAc,OAAO,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QACxG,OAAO,2DAAa,OAAM,UAAU,sDAAc,OAAO,OAAM,QAAQ,SAAS;AAAA,MACpF;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,2DAAa;AAAA,QAC3C,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,mFAAiB,OAAM,wCAAe,OAAO,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QAC3F;AAAA,QACA,OAAO,mFAAiB,OAAM,wCAAe,OAAO,OAAM,QAAQ,SAAS;AAAA,MAC/E;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW,eAAe;AAAA,UACjC,OAAO,2OAA4C,OAAO;AAAA,QAC9D;AAAA,QACA,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,qOAA2C,OAAO;AAAA,QAC7D,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,qLAAmC,OAAO;AAAA,QACrD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,sPAA6C,OAAO;AAAA,QAC/D,OAAO,qGAAoB,iBAAiB,OAAO,WAAW,OAAM;AAAA,MACxE;AAAA,WACK;AAAA,QACD,OAAO,gPAA4C,OAAM;AAAA,WACxD;AAAA,QACD,OAAO,iHAA2B,WAAW,OAAM,MAAM,IAAI;AAAA,WAC5D;AAAA,QACD,OAAO,oGAAmB,OAAM;AAAA,WAC/B;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,gHAAqB,OAAM;AAAA;AAAA,QAElC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EArGvB;AAAA;;;ACoGA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IAtGE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,YAAY,MAAM,cAAQ;AAAA,IAC1C,MAAM,EAAE,MAAM,QAAQ,MAAM,cAAQ;AAAA,IACpC,OAAO,EAAE,MAAM,eAAM,MAAM,cAAS;AAAA,IACpC,KAAK,EAAE,MAAM,eAAM,MAAM,cAAS;AAAA,EACtC;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,EACT;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,+CAAsC,OAAM,yBAAoB;AAAA,QAC3E;AAAA,QACA,OAAO,oCAA2B,yBAAoB;AAAA,MAC1D;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,oCAAgC,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAC7E,OAAO,4EAAsD,WAAW,OAAM,QAAQ,GAAG;AAAA,WACxF,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,gCAAsB,OAAM,UAAU,gBAAW,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QAC7G,OAAO,gCAAsB,OAAM,UAAU,gBAAW,MAAM,OAAM,QAAQ,SAAS;AAAA,MACzF;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,mCAAsB,OAAM,UAAU,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QAC1F,OAAO,mCAAsB,OAAM,UAAU,MAAM,OAAM,QAAQ,SAAS;AAAA,MAC9E;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,uBAAmB,OAAO;AAAA,QACrC,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,uBAAmB,OAAO;AAAA,QACrC,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,uBAAmB,OAAO;AAAA,QACrC,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,sBAAkB,OAAO;AAAA,QACpC,OAAO,eAAW,iBAAiB,OAAO,WAAW,OAAM;AAAA,MAC/D;AAAA,WACK;AAAA,QACD,OAAO,0BAAiB,OAAM;AAAA,WAC7B;AAAA,QACD,OAAO,0BAAoB,OAAM,KAAK,SAAS,IAAI,QAAQ,OAAY,WAAW,OAAM,MAAM,IAAI;AAAA,WACjG;AAAA,QACD,OAAO,GAAG,OAAM;AAAA,WACf;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,GAAG,OAAM;AAAA;AAAA,QAEhB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAhGvB;AAAA;;;ACuGA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IAzGE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,oDAAW,MAAM,uCAAS;AAAA,IAC1C,MAAM,EAAE,MAAM,wCAAS,MAAM,uCAAS;AAAA,IACtC,OAAO,EAAE,MAAM,0DAAY,MAAM,uCAAS;AAAA,IAC1C,KAAK,EAAE,MAAM,0DAAY,MAAM,uCAAS;AAAA,EAC5C;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,EACX;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,6MAAiD,OAAM,8DAAsB;AAAA,QACxF;AAAA,QACA,OAAO,kMAAsC,8DAAsB;AAAA,MACvE;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,kMAA2C,mBAAmB,OAAM,OAAO,EAAE;AAAA,QACxF,OAAO,mMAA4C,WAAW,OAAM,QAAQ,GAAG;AAAA,WAC9E,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,+JAAiC,OAAM,UAAU,sDAAc,OAAO,QAAQ,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QAC1I,OAAO,+JAAiC,OAAM,UAAU,+EAAmB,MAAM,OAAM,QAAQ,SAAS;AAAA,MAC5G;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,mJAA+B,OAAM,UAAU,OAAO,QAAQ,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QAClH;AAAA,QACA,OAAO,mJAA+B,OAAM,mCAAe,MAAM,OAAM,QAAQ,SAAS;AAAA,MAC5F;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,4NAA4C,OAAO;AAAA,QAC9D,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,oPAAgD,OAAO;AAAA,QAClE,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,mMAAuC,OAAO;AAAA,QACzD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,qQAAkD,OAAO;AAAA,QACpE,OAAO,4EAAe,iBAAiB,OAAO,WAAW,OAAM;AAAA,MACnE;AAAA,WACK;AAAA,QACD,OAAO,qNAA0C,OAAM;AAAA,WACtD;AAAA,QACD,OAAO,0GAAoB,OAAM,KAAK,SAAS,IAAI,WAAM,OAAY,WAAW,OAAM,MAAM,IAAI;AAAA,WAC/F;AAAA,QACD,OAAO,4GAAsB,OAAM;AAAA,WAClC;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,8HAAyB,OAAM;AAAA;AAAA,QAEtC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAnGvB;AAAA;;;ACEA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO,WAAG;AAAA;AAAA;AAAA,EAHd;AAAA;;;ACyGA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IA3GE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,4BAAO,MAAM,2BAAO;AAAA,IACpC,MAAM,EAAE,MAAM,kCAAQ,MAAM,2BAAO;AAAA,IACnC,OAAO,EAAE,MAAM,kCAAQ,MAAM,2BAAO;AAAA,IACpC,KAAK,EAAE,MAAM,kCAAQ,MAAM,2BAAO;AAAA,EACtC;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACV;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,4DAAwB,OAAM,oEAAuB;AAAA,QAChE;AAAA,QACA,OAAO,iDAAa,oEAAuB;AAAA,MAC/C;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,iDAAkB,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAC/D,OAAO,gDAAiB,WAAW,OAAM,QAAQ,GAAG;AAAA,WACnD,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,0CAAW,OAAM,UAAU,iDAAc,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QACrG,OAAO,0CAAW,OAAM,UAAU,iDAAc,MAAM,OAAM,QAAQ,SAAS;AAAA,MACjF;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,sDAAa,OAAM,uBAAa,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QACpF;AAAA,QACA,OAAO,sDAAa,OAAM,uBAAa,MAAM,OAAM,QAAQ,SAAS;AAAA,MACxE;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW,eAAe;AAAA,UACjC,OAAO,uDAAc,OAAO;AAAA,QAChC;AAAA,QACA,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,uDAAc,OAAO;AAAA,QAChC,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,uDAAc,OAAO;AAAA,QAChC,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,qFAAmB,OAAO;AAAA,QACrC,OAAO,sBAAM,iBAAiB,OAAO,WAAW,OAAM;AAAA,MAC1D;AAAA,WACK;AAAA,QACD,OAAO,gDAAY,OAAM;AAAA,WACxB;AAAA,QACD,OAAO,oFAAkB,OAAM,KAAK,SAAS,IAAI,WAAM,OAAY,WAAW,OAAM,MAAM,SAAI;AAAA,WAC7F;AAAA,QACD,OAAO,GAAG,OAAM;AAAA,WACf;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,GAAG,OAAM;AAAA;AAAA,QAEhB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EArGvB;AAAA;;;ACyGA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IA3GE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,SAAS,MAAM,sBAAgB;AAAA,IAC/C,MAAM,EAAE,MAAM,QAAQ,MAAM,sBAAgB;AAAA,IAC5C,OAAO,EAAE,MAAM,WAAW,MAAM,sBAAgB;AAAA,IAChD,KAAK,EAAE,MAAM,WAAW,MAAM,sBAAgB;AAAA,IAC9C,KAAK,EAAE,MAAM,SAAS,MAAM,sBAAgB;AAAA,EAChD;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,EACX;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,mDAAwC,OAAM,4BAA4B;AAAA,QACrF;AAAA,QACA,OAAO,wCAA6B,4BAA4B;AAAA,MACpE;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,wCAAkC,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAC/E,OAAO,6DAAuD,WAAW,OAAM,QAAQ,GAAG;AAAA,WACzF,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,wBAAwB,OAAM,UAAU,YAAY,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ,OAAO;AAAA,QACvH,OAAO,wBAAwB,OAAM,UAAU,YAAY,MAAM,OAAM,QAAQ,SAAS;AAAA,MAC5F;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,yBAAyB,OAAM,UAAU,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ,OAAO;AAAA,QAC5G;AAAA,QACA,OAAO,yBAAyB,OAAM,UAAU,MAAM,OAAM,QAAQ,SAAS;AAAA,MACjF;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,8BAAmB,OAAO;AAAA,QACrC,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,8BAAmB,OAAO;AAAA,QACrC,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,8BAAmB,OAAO;AAAA,QACrC,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,6BAAkB,OAAO;AAAA,QACpC,OAAO,uBAAY,iBAAiB,OAAO,WAAW,OAAM;AAAA,MAChE;AAAA,WACK;AAAA,QACD,OAAO,8BAAmB,OAAM;AAAA,WAC/B;AAAA,QACD,OAAO,sBAAgB,OAAM,KAAK,SAAS,IAAI,QAAQ,OAAY,WAAW,OAAM,MAAM,IAAI;AAAA,WAC7F;AAAA,QACD,OAAO,GAAG,OAAM;AAAA,WACf;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,GAAG,OAAM;AAAA;AAAA,QAEhB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EArGvB;AAAA;;;ACuGA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IAzGE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,iBAAQ,MAAM,QAAK;AAAA,IACnC,MAAM,EAAE,MAAM,QAAQ,MAAM,QAAI;AAAA,IAChC,OAAO,EAAE,MAAM,qBAAU,MAAM,QAAK;AAAA,IACpC,KAAK,EAAE,MAAM,qBAAU,MAAM,QAAK;AAAA,EACtC;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,EACX;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,iFAA4C,OAAM,2CAAuB;AAAA,QACpF;AAAA,QACA,OAAO,sEAAiC,2CAAuB;AAAA,MACnE;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,sEAAsC,mBAAmB,OAAM,OAAO,EAAE;AAAA,QACnF,OAAO,wGAA6D,WAAW,OAAM,QAAQ,GAAG;AAAA,WAC/F,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,uCAAoB,OAAM,UAAU,qBAAa,OAAO,QAAQ,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QAC5H,OAAO,uCAAoB,OAAM,UAAU,qBAAa,MAAM,OAAM,QAAQ,SAAS;AAAA,MACzF;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,uCAAoB,OAAM,UAAU,OAAO,QAAQ,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QACvG;AAAA,QACA,OAAO,uCAAoB,OAAM,UAAU,MAAM,OAAM,QAAQ,SAAS;AAAA,MAC5E;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,qFAAyC,OAAO;AAAA,QAC3D,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,+EAA0C,OAAO;AAAA,QAC5D,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,iEAAoC,OAAO;AAAA,QACtD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,+EAAwC,OAAO;AAAA,QAC1D,OAAO,GAAG,iBAAiB,OAAO,WAAW,OAAM;AAAA,MACvD;AAAA,WACK;AAAA,QACD,OAAO,gFAAsC,OAAM;AAAA,WAClD;AAAA,QACD,OAAO,6DAAkC,WAAW,OAAM,MAAM,IAAI;AAAA,WACnE;AAAA,QACD,OAAO,2CAA0B,OAAM;AAAA,WACtC;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,mDAA6B,OAAM;AAAA;AAAA,QAE1C,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAnGvB;AAAA;;;ACwGA,SAAO,aAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IA1GE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,gBAAK,MAAM,eAAK;AAAA,IAChC,MAAM,EAAE,MAAM,gBAAK,MAAM,eAAK;AAAA,IAC9B,OAAO,EAAE,MAAM,UAAI,MAAM,eAAK;AAAA,IAC9B,KAAK,EAAE,MAAM,UAAI,MAAM,eAAK;AAAA,EAChC;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACV;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,yDAAqB,OAAM,0CAAiB;AAAA,QACvD;AAAA,QACA,OAAO,8CAAU,0CAAiB;AAAA,MACtC;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,8CAAe,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAC5D,OAAO,sEAAmB,WAAW,OAAM,QAAQ,GAAG;AAAA,WACrD,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,8CAAU,OAAM,UAAU,YAAO,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QAC7F,OAAO,8CAAU,OAAM,UAAU,YAAO,MAAM,OAAM,QAAQ,SAAS;AAAA,MACzE;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,8CAAU,OAAM,UAAU,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QAC9E;AAAA,QACA,OAAO,8CAAU,OAAM,UAAU,MAAM,OAAM,QAAQ,SAAS;AAAA,MAClE;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,2DAAa,OAAO;AAAA,QAC/B,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,2DAAa,OAAO;AAAA,QAC/B,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,iEAAc,OAAO;AAAA,QAChC,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,8FAAkB,OAAO;AAAA,QACpC,OAAO,eAAI,iBAAiB,OAAO,WAAW,OAAM;AAAA,MACxD;AAAA,WACK;AAAA,QACD,OAAO,oDAAW,OAAM;AAAA,WACvB;AAAA,QACD,OAAO,8CAAoB,WAAW,OAAM,MAAM,IAAI;AAAA,WACrD;AAAA,QACD,OAAO,GAAG,OAAM;AAAA,WACf;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,GAAG,OAAM;AAAA;AAAA,QAEhB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EApGvB;AAAA;;;ACsGA,SAAO,aAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IAxGE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,gBAAK,MAAM,eAAK;AAAA,IAChC,MAAM,EAAE,MAAM,sBAAM,MAAM,eAAK;AAAA,IAC/B,OAAO,EAAE,MAAM,gBAAK,MAAM,eAAK;AAAA,IAC/B,KAAK,EAAE,MAAM,gBAAK,MAAM,eAAK;AAAA,EACjC;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,EACT;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,2EAAwB,OAAM,oCAAgB;AAAA,QACzD;AAAA,QACA,OAAO,gEAAa,oCAAgB;AAAA,MACxC;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,gEAAkB,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAC/D,OAAO,8FAAuB,WAAW,OAAM,QAAQ,GAAG;AAAA,WACzD,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,8CAAU,OAAM,UAAU,yBAAU,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO,QAAQ;AAAA,QAChG,OAAO,8CAAU,OAAM,UAAU,yBAAU,MAAM,OAAM,QAAQ,SAAS;AAAA,MAC5E;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI,QAAQ;AAAA,UACR,OAAO,8CAAU,OAAM,uBAAa,MAAM,OAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,QACjF;AAAA,QACA,OAAO,8CAAU,OAAM,uBAAa,MAAM,OAAM,QAAQ,SAAS;AAAA,MACrE;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW,eAAe;AAAA,UACjC,OAAO,2DAAa,OAAO;AAAA,QAC/B;AAAA,QACA,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,2DAAa,OAAO;AAAA,QAC/B,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,iEAAc,OAAO;AAAA,QAChC,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,4EAAe,OAAO;AAAA,QACjC,OAAO,sBAAM,iBAAiB,OAAO,WAAW,OAAM;AAAA,MAC1D;AAAA,WACK;AAAA,QACD,OAAO,0DAAY,OAAM;AAAA,WACxB;AAAA,QACD,OAAO,6CAAS,OAAM,KAAK,SAAS,IAAI,WAAM,WAAW,WAAW,OAAM,MAAM,QAAG;AAAA,WAClF;AAAA,QACD,OAAO,GAAG,OAAM;AAAA,WACf;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,GAAG,OAAM;AAAA;AAAA,QAEhB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAlGvB;AAAA;;;ACsGA,SAAO,UAAiB,GAAG;AAAA,EACvB,OAAO;AAAA,IACH,aAAa,QAAM;AAAA,EACvB;AAAA;AAAA,IAxGE,UAAQ,MAAM;AAAA,EAChB,MAAM,UAAU;AAAA,IACZ,QAAQ,EAAE,MAAM,UAAM,MAAM,QAAK;AAAA,IACjC,MAAM,EAAE,MAAM,SAAS,MAAM,QAAI;AAAA,IACjC,OAAO,EAAE,MAAM,QAAQ,MAAM,QAAI;AAAA,IACjC,KAAK,EAAE,MAAM,QAAQ,MAAM,QAAI;AAAA,EACnC;AAAA,EACA,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA;AAAA,EAE9B,MAAM,mBAAmB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAM,iBAAiB;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,EACX;AAAA,EACA,OAAO,CAAC,WAAU;AAAA,IACd,QAAQ,OAAM;AAAA,WACL,gBAAgB;AAAA,QACjB,MAAM,WAAW,eAAe,OAAM,aAAa,OAAM;AAAA,QACzD,MAAM,eAAoB,WAAW,OAAM,KAAK;AAAA,QAChD,MAAM,WAAW,eAAe,iBAAiB;AAAA,QACjD,IAAI,SAAS,KAAK,OAAM,QAAQ,GAAG;AAAA,UAC/B,OAAO,2EAAyC,OAAM,uCAAuB;AAAA,QACjF;AAAA,QACA,OAAO,gEAA8B,uCAAuB;AAAA,MAChE;AAAA,WACK;AAAA,QACD,IAAI,OAAM,OAAO,WAAW;AAAA,UACxB,OAAO,gEAAmC,mBAAmB,OAAM,OAAO,EAAE;AAAA,QAChF,OAAO,wEAAoC,WAAW,OAAM,QAAQ,GAAG;AAAA,WACtE,WAAW;AAAA,QACZ,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,kEAA8B,OAAM,UAAU,SAAS,OAAO,QAAQ,MAAM,OAAM,WAAW,OAAO;AAAA,QAC/G,OAAO,4DAA2B,MAAM,OAAM;AAAA,MAClD;AAAA,WACK,aAAa;AAAA,QACd,MAAM,MAAM,OAAM,YAAY,OAAO;AAAA,QACrC,MAAM,SAAS,UAAU,OAAM,MAAM;AAAA,QACrC,IAAI;AAAA,UACA,OAAO,sDAA4B,OAAM,UAAU,OAAO,QAAQ,MAAM,OAAM,WAAW,OAAO;AAAA,QACpG,OAAO,gDAAyB,MAAM,OAAM;AAAA,MAChD;AAAA,WACK,kBAAkB;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,4HAAqC,OAAO;AAAA,QACvD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,yGAAmC,OAAO;AAAA,QACrD,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,oFAA2B,OAAO;AAAA,QAC7C,IAAI,OAAO,WAAW;AAAA,UAClB,OAAO,+GAAoC,OAAO;AAAA,QACtD,OAAO,uBAAS,iBAAiB,OAAO,WAAW,OAAM;AAAA,MAC7D;AAAA,WACK;AAAA,QACD,OAAO,8GAAyC,OAAM;AAAA,WACrD;AAAA,QACD,OAAO,4CAAqB,WAAW,OAAM,MAAM,IAAI;AAAA,WACtD;AAAA,QACD,OAAO,mDAAoB,OAAM;AAAA,WAChC;AAAA,QACD,OAAO;AAAA,WACN;AAAA,QACD,OAAO,qCAAiB,OAAM;AAAA;AAAA,QAE9B,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAlGvB;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;;;AChDO,MAAM,aAAa;AAAA,EACtB,WAAW,GAAG;AAAA,IACV,KAAK,OAAO,IAAI;AAAA,IAChB,KAAK,SAAS,IAAI;AAAA;AAAA,EAEtB,GAAG,CAAC,WAAW,OAAO;AAAA,IAClB,MAAM,OAAO,MAAM;AAAA,IACnB,KAAK,KAAK,IAAI,QAAQ,IAAI;AAAA,IAC1B,IAAI,QAAQ,OAAO,SAAS,YAAY,QAAQ,MAAM;AAAA,MAClD,KAAK,OAAO,IAAI,KAAK,IAAI,MAAM;AAAA,IACnC;AAAA,IACA,OAAO;AAAA;AAAA,EAEX,KAAK,GAAG;AAAA,IACJ,KAAK,OAAO,IAAI;AAAA,IAChB,KAAK,SAAS,IAAI;AAAA,IAClB,OAAO;AAAA;AAAA,EAEX,MAAM,CAAC,QAAQ;AAAA,IACX,MAAM,OAAO,KAAK,KAAK,IAAI,MAAM;AAAA,IACjC,IAAI,QAAQ,OAAO,SAAS,YAAY,QAAQ,MAAM;AAAA,MAClD,KAAK,OAAO,OAAO,KAAK,EAAE;AAAA,IAC9B;AAAA,IACA,KAAK,KAAK,OAAO,MAAM;AAAA,IACvB,OAAO;AAAA;AAAA,EAEX,GAAG,CAAC,QAAQ;AAAA,IAGR,MAAM,IAAI,OAAO,KAAK;AAAA,IACtB,IAAI,GAAG;AAAA,MACH,MAAM,KAAK,KAAM,KAAK,IAAI,CAAC,KAAK,CAAC,EAAG;AAAA,MACpC,OAAO,GAAG;AAAA,MACV,MAAM,IAAI,KAAK,OAAO,KAAK,KAAK,IAAI,MAAM,EAAE;AAAA,MAC5C,OAAO,OAAO,KAAK,CAAC,EAAE,SAAS,IAAI;AAAA,IACvC;AAAA,IACA,OAAO,KAAK,KAAK,IAAI,MAAM;AAAA;AAAA,EAE/B,GAAG,CAAC,QAAQ;AAAA,IACR,OAAO,KAAK,KAAK,IAAI,MAAM;AAAA;AAEnC;AAEO,SAAS,QAAQ,GAAG;AAAA,EACvB,OAAO,IAAI;AAAA;AAAA,IA/CX,KACS,SACA,QAgDA;AAAA;AAAA,EAjDA,UAAU,OAAO,WAAW;AAAA,EAC5B,SAAS,OAAO,UAAU;AAAA,GA+CtC,MAAK,YAAY,yBAAyB,IAAG,uBAAuB,SAAS;AAAA,EACjE,iBAAiB,WAAW;AAAA;;;AC7ClC,SAAS,OAAO,CAAC,QAAO,QAAQ;AAAA,EACnC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,OACE,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,cAAc,CAAC,QAAO,QAAQ;AAAA,EAC1C,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,OACA,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,MAAM,CAAC,QAAO,QAAQ;AAAA,EAClC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,OACC,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,KAAK,CAAC,QAAO,QAAQ;AAAA,EACjC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,OACC,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,KAAK,CAAC,QAAO,QAAQ;AAAA,EACjC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,OACC,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,OAAO,CAAC,QAAO,QAAQ;AAAA,EACnC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,IACP,SAAS;AAAA,OACD,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,OAAO,CAAC,QAAO,QAAQ;AAAA,EACnC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,IACP,SAAS;AAAA,OACD,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,OAAO,CAAC,QAAO,QAAQ;AAAA,EACnC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,IACP,SAAS;AAAA,OACD,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,IAAI,CAAC,QAAO,QAAQ;AAAA,EAChC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,OACC,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,OAAM,CAAC,QAAO,QAAQ;AAAA,EAClC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,OACC,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,OAAO,CAAC,QAAO,QAAQ;AAAA,EACnC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,OACC,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAQE,SAAS,KAAK,CAAC,QAAO,QAAQ;AAAA,EACjC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,OACC,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,MAAM,CAAC,QAAO,QAAQ;AAAA,EAClC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,OACC,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,KAAK,CAAC,QAAO,QAAQ;AAAA,EACjC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,OACC,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,IAAI,CAAC,QAAO,QAAQ;AAAA,EAChC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,OACC,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,MAAM,CAAC,QAAO,QAAQ;AAAA,EAClC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,OACC,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,KAAK,CAAC,QAAO,QAAQ;AAAA,EACjC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,OACC,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,KAAK,CAAC,QAAO,QAAQ;AAAA,EACjC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,OACC,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,IAAI,CAAC,QAAO,QAAQ;AAAA,EAChC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,OACC,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,OAAO,CAAC,QAAO,QAAQ;AAAA,EACnC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,OACC,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,OAAO,CAAC,QAAO,QAAQ;AAAA,EACnC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,OACC,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,OAAO,CAAC,QAAO,QAAQ;AAAA,EACnC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,OACC,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,UAAU,CAAC,QAAO,QAAQ;AAAA,EACtC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,OACC,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,KAAK,CAAC,QAAO,QAAQ;AAAA,EACjC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,OACC,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,IAAI,CAAC,QAAO,QAAQ;AAAA,EAChC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,OACC,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAUE,SAAS,YAAY,CAAC,QAAO,QAAQ;AAAA,EACxC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,WAAW;AAAA,OACH,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,QAAQ,CAAC,QAAO,QAAQ;AAAA,EACpC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,OACC,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,QAAQ,CAAC,QAAO,QAAQ;AAAA,EACpC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,WAAW;AAAA,OACH,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,YAAY,CAAC,QAAO,QAAQ;AAAA,EACxC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,OACC,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,OAAO,CAAC,QAAO,QAAQ;AAAA,EACnC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,QAAQ,CAAC;AAAA,OACD,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,cAAc,CAAC,QAAO,QAAQ;AAAA,EAC1C,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ,CAAC;AAAA,OACD,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,IAAI,CAAC,QAAO,QAAQ;AAAA,EAChC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ;AAAA,OACA,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,QAAQ,CAAC,QAAO,QAAQ;AAAA,EACpC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ;AAAA,OACA,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,QAAQ,CAAC,QAAO,QAAQ;AAAA,EACpC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ;AAAA,OACA,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,MAAM,CAAC,QAAO,QAAQ;AAAA,EAClC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ;AAAA,OACA,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,OAAO,CAAC,QAAO,QAAQ;AAAA,EACnC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ;AAAA,OACA,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,QAAQ,CAAC,QAAO,QAAQ;AAAA,EACpC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,OACE,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,eAAe,CAAC,QAAO,QAAQ;AAAA,EAC3C,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,OACA,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,OAAO,CAAC,QAAO,QAAQ;AAAA,EACnC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,OACE,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,cAAc,CAAC,QAAO,QAAQ;AAAA,EAC1C,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,OACA,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,MAAM,CAAC,QAAO,QAAQ;AAAA,EAClC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ;AAAA,OACA,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,OAAO,CAAC,QAAO,QAAQ;AAAA,EACnC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ;AAAA,OACA,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,OAAO,CAAC,QAAO,QAAQ;AAAA,EACnC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,OACE,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,WAAU,CAAC,QAAO,QAAQ;AAAA,EACtC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,OACE,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,MAAK,CAAC,QAAO,QAAQ;AAAA,EACjC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,OACE,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,IAAI,CAAC,QAAO;AAAA,EACxB,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,EACV,CAAC;AAAA;AAGE,SAAS,QAAQ,CAAC,QAAO;AAAA,EAC5B,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,EACV,CAAC;AAAA;AAGE,SAAS,MAAM,CAAC,QAAO,QAAQ;AAAA,EAClC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,OACE,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,KAAK,CAAC,QAAO,QAAQ;AAAA,EACjC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,OACE,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,KAAK,CAAC,QAAO,QAAQ;AAAA,EACjC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,OACE,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,YAAY,CAAC,QAAO,QAAQ;AAAA,EACxC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,OACA,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,IAAI,CAAC,QAAO,QAAQ;AAAA,EAChC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,OACE,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,GAAG,CAAC,OAAO,QAAQ;AAAA,EAC/B,OAAO,IAAW,kBAAkB;AAAA,IAChC,OAAO;AAAA,OACC,gBAAgB,MAAM;AAAA,IAC9B;AAAA,IACA,WAAW;AAAA,EACf,CAAC;AAAA;AAGE,SAAS,IAAI,CAAC,OAAO,QAAQ;AAAA,EAChC,OAAO,IAAW,kBAAkB;AAAA,IAChC,OAAO;AAAA,OACC,gBAAgB,MAAM;AAAA,IAC9B;AAAA,IACA,WAAW;AAAA,EACf,CAAC;AAAA;AAME,SAAS,GAAG,CAAC,OAAO,QAAQ;AAAA,EAC/B,OAAO,IAAW,qBAAqB;AAAA,IACnC,OAAO;AAAA,OACC,gBAAgB,MAAM;AAAA,IAC9B;AAAA,IACA,WAAW;AAAA,EACf,CAAC;AAAA;AAGE,SAAS,IAAI,CAAC,OAAO,QAAQ;AAAA,EAChC,OAAO,IAAW,qBAAqB;AAAA,IACnC,OAAO;AAAA,OACC,gBAAgB,MAAM;AAAA,IAC9B;AAAA,IACA,WAAW;AAAA,EACf,CAAC;AAAA;AAME,SAAS,SAAS,CAAC,QAAQ;AAAA,EAC9B,OAAO,IAAI,GAAG,MAAM;AAAA;AAIjB,SAAS,SAAS,CAAC,QAAQ;AAAA,EAC9B,OAAO,IAAI,GAAG,MAAM;AAAA;AAIjB,SAAS,YAAY,CAAC,QAAQ;AAAA,EACjC,OAAO,KAAK,GAAG,MAAM;AAAA;AAIlB,SAAS,YAAY,CAAC,QAAQ;AAAA,EACjC,OAAO,KAAK,GAAG,MAAM;AAAA;AAGlB,SAAS,WAAW,CAAC,OAAO,QAAQ;AAAA,EACvC,OAAO,IAAW,oBAAoB;AAAA,IAClC,OAAO;AAAA,OACC,gBAAgB,MAAM;AAAA,IAC9B;AAAA,EACJ,CAAC;AAAA;AAGE,SAAS,QAAQ,CAAC,SAAS,QAAQ;AAAA,EACtC,OAAO,IAAW,iBAAiB;AAAA,IAC/B,OAAO;AAAA,OACC,gBAAgB,MAAM;AAAA,IAC9B;AAAA,EACJ,CAAC;AAAA;AAGE,SAAS,QAAQ,CAAC,SAAS,QAAQ;AAAA,EACtC,OAAO,IAAW,iBAAiB;AAAA,IAC/B,OAAO;AAAA,OACC,gBAAgB,MAAM;AAAA,IAC9B;AAAA,EACJ,CAAC;AAAA;AAGE,SAAS,KAAK,CAAC,MAAM,QAAQ;AAAA,EAChC,OAAO,IAAW,oBAAoB;AAAA,IAClC,OAAO;AAAA,OACC,gBAAgB,MAAM;AAAA,IAC9B;AAAA,EACJ,CAAC;AAAA;AAGE,SAAS,UAAU,CAAC,SAAS,QAAQ;AAAA,EACxC,MAAM,KAAK,IAAW,mBAAmB;AAAA,IACrC,OAAO;AAAA,OACC,gBAAgB,MAAM;AAAA,IAC9B;AAAA,EACJ,CAAC;AAAA,EACD,OAAO;AAAA;AAGJ,SAAS,UAAU,CAAC,SAAS,QAAQ;AAAA,EACxC,OAAO,IAAW,mBAAmB;AAAA,IACjC,OAAO;AAAA,OACC,gBAAgB,MAAM;AAAA,IAC9B;AAAA,EACJ,CAAC;AAAA;AAGE,SAAS,OAAO,CAAC,QAAQ,QAAQ;AAAA,EACpC,OAAO,IAAW,sBAAsB;AAAA,IACpC,OAAO;AAAA,OACC,gBAAgB,MAAM;AAAA,IAC9B;AAAA,EACJ,CAAC;AAAA;AAGE,SAAS,MAAM,CAAC,SAAS,QAAQ;AAAA,EACpC,OAAO,IAAW,eAAe;AAAA,IAC7B,OAAO;AAAA,IACP,QAAQ;AAAA,OACA,gBAAgB,MAAM;AAAA,IAC9B;AAAA,EACJ,CAAC;AAAA;AAGE,SAAS,UAAU,CAAC,QAAQ;AAAA,EAC/B,OAAO,IAAW,mBAAmB;AAAA,IACjC,OAAO;AAAA,IACP,QAAQ;AAAA,OACA,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,UAAU,CAAC,QAAQ;AAAA,EAC/B,OAAO,IAAW,mBAAmB;AAAA,IACjC,OAAO;AAAA,IACP,QAAQ;AAAA,OACA,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,SAAS,CAAC,UAAU,QAAQ;AAAA,EACxC,OAAO,IAAW,kBAAkB;AAAA,IAChC,OAAO;AAAA,IACP,QAAQ;AAAA,OACA,gBAAgB,MAAM;AAAA,IAC9B;AAAA,EACJ,CAAC;AAAA;AAGE,SAAS,WAAW,CAAC,QAAQ,QAAQ;AAAA,EACxC,OAAO,IAAW,oBAAoB;AAAA,IAClC,OAAO;AAAA,IACP,QAAQ;AAAA,OACA,gBAAgB,MAAM;AAAA,IAC9B;AAAA,EACJ,CAAC;AAAA;AAGE,SAAS,SAAS,CAAC,QAAQ,QAAQ;AAAA,EACtC,OAAO,IAAW,kBAAkB;AAAA,IAChC,OAAO;AAAA,IACP,QAAQ;AAAA,OACA,gBAAgB,MAAM;AAAA,IAC9B;AAAA,EACJ,CAAC;AAAA;AAGE,SAAS,SAAS,CAAC,UAAU,QAAQ,QAAQ;AAAA,EAChD,OAAO,IAAW,kBAAkB;AAAA,IAChC,OAAO;AAAA,IACP;AAAA,IACA;AAAA,OACQ,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,KAAK,CAAC,OAAO,QAAQ;AAAA,EACjC,OAAO,IAAW,kBAAkB;AAAA,IAChC,OAAO;AAAA,IACP,MAAM;AAAA,OACE,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,UAAU,CAAC,IAAI;AAAA,EAC3B,OAAO,IAAW,mBAAmB;AAAA,IACjC,OAAO;AAAA,IACP;AAAA,EACJ,CAAC;AAAA;AAIE,SAAS,UAAU,CAAC,MAAM;AAAA,EAC7B,OAAO,WAAW,CAAC,UAAU,MAAM,UAAU,IAAI,CAAC;AAAA;AAI/C,SAAS,KAAK,GAAG;AAAA,EACpB,OAAO,WAAW,CAAC,UAAU,MAAM,KAAK,CAAC;AAAA;AAItC,SAAS,YAAY,GAAG;AAAA,EAC3B,OAAO,WAAW,CAAC,UAAU,MAAM,YAAY,CAAC;AAAA;AAI7C,SAAS,YAAY,GAAG;AAAA,EAC3B,OAAO,WAAW,CAAC,UAAU,MAAM,YAAY,CAAC;AAAA;AAI7C,SAAS,QAAQ,GAAG;AAAA,EACvB,OAAO,WAAW,CAAC,UAAe,SAAQ,KAAK,CAAC;AAAA;AAG7C,SAAS,MAAM,CAAC,QAAO,SAAS,QAAQ;AAAA,EAC3C,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN;AAAA,OAIQ,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,MAAM,CAAC,QAAO,SAAS,QAAQ;AAAA,EAC3C,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN;AAAA,OACQ,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAEE,SAAS,IAAI,CAAC,QAAO,SAAS,QAAQ;AAAA,EACzC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN;AAAA,IACA,WAAW;AAAA,OACH,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,mBAAmB,CAAC,QAAO,eAAe,SAAS,QAAQ;AAAA,EACvE,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN;AAAA,IACA;AAAA,OACQ,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,aAAa,CAAC,QAAO,MAAM,OAAO;AAAA,EAC9C,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACJ,CAAC;AAAA;AAQE,SAAS,MAAM,CAAC,QAAO,OAAO,eAAe,SAAS;AAAA,EACzD,MAAM,UAAU,yBAAiC;AAAA,EACjD,MAAM,SAAS,UAAU,UAAU;AAAA,EACnC,MAAM,OAAO,UAAU,gBAAgB;AAAA,EACvC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN;AAAA,IACA;AAAA,OACQ,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,OAAO,CAAC,QAAO,SAAS,WAAW,QAAQ;AAAA,EACvD,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN;AAAA,IACA;AAAA,OACQ,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,IAAI,CAAC,QAAO,SAAS,WAAW,QAAQ;AAAA,EACpD,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN;AAAA,IACA;AAAA,OACQ,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,IAAI,CAAC,QAAO,WAAW,QAAQ;AAAA,EAC3C,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN;AAAA,OACQ,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,KAAK,CAAC,QAAO,QAAQ,QAAQ;AAAA,EACzC,MAAM,UAAU,MAAM,QAAQ,MAAM,IAAI,OAAO,YAAY,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;AAAA,EAYxF,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN;AAAA,OACQ,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAUE,SAAS,WAAW,CAAC,QAAO,SAAS,QAAQ;AAAA,EAChD,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN;AAAA,OACQ,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,QAAQ,CAAC,QAAO,OAAO,QAAQ;AAAA,EAC3C,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,QAAQ,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAAA,OACrC,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,KAAK,CAAC,QAAO,QAAQ;AAAA,EACjC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,OACE,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,UAAU,CAAC,QAAO,IAAI;AAAA,EAClC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,WAAW;AAAA,EACf,CAAC;AAAA;AAGE,SAAS,SAAS,CAAC,QAAO,WAAW;AAAA,EACxC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN;AAAA,EACJ,CAAC;AAAA;AAGE,SAAS,SAAS,CAAC,QAAO,WAAW;AAAA,EACxC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN;AAAA,EACJ,CAAC;AAAA;AAGE,SAAS,QAAQ,CAAC,QAAO,WAAW,cAAc;AAAA,EACrD,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN;AAAA,QACI,YAAY,GAAG;AAAA,MACf,OAAO,OAAO,iBAAiB,aAAa,aAAa,IAAS,aAAa,YAAY;AAAA;AAAA,EAEnG,CAAC;AAAA;AAGE,SAAS,YAAY,CAAC,QAAO,WAAW,QAAQ;AAAA,EACnD,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN;AAAA,OACQ,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,QAAQ,CAAC,QAAO,WAAW;AAAA,EACvC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN;AAAA,EACJ,CAAC;AAAA;AAGE,SAAS,MAAM,CAAC,QAAO,WAAW,YAAY;AAAA,EACjD,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN;AAAA,IACA,YAAa,OAAO,eAAe,aAAa,aAAa,MAAM;AAAA,EACvE,CAAC;AAAA;AAGE,SAAS,KAAK,CAAC,QAAO,KAAK,KAAK;AAAA,EACnC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN,IAAI;AAAA,IACJ;AAAA,EACJ,CAAC;AAAA;AAGE,SAAS,SAAS,CAAC,QAAO,WAAW;AAAA,EACxC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN;AAAA,EACJ,CAAC;AAAA;AAGE,SAAS,gBAAgB,CAAC,QAAO,OAAO,QAAQ;AAAA,EACnD,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN;AAAA,OACQ,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,KAAK,CAAC,QAAO,QAAQ;AAAA,EACjC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN;AAAA,EACJ,CAAC;AAAA;AAGE,SAAS,QAAQ,CAAC,QAAO,WAAW;AAAA,EACvC,OAAO,IAAI,OAAM;AAAA,IACb,MAAM;AAAA,IACN;AAAA,EACJ,CAAC;AAAA;AAGE,SAAS,OAAO,CAAC,QAAO,IAAI,SAAS;AAAA,EACxC,MAAM,OAAY,gBAAgB,OAAO;AAAA,EACzC,KAAK,UAAU,KAAK,QAAQ;AAAA,EAC5B,MAAM,SAAS,IAAI,OAAM;AAAA,IACrB,MAAM;AAAA,IACN,OAAO;AAAA,IACP;AAAA,OACG;AAAA,EACP,CAAC;AAAA,EACD,OAAO;AAAA;AAIJ,SAAS,OAAO,CAAC,QAAO,IAAI,SAAS;AAAA,EACxC,MAAM,SAAS,IAAI,OAAM;AAAA,IACrB,MAAM;AAAA,IACN,OAAO;AAAA,IACP;AAAA,OACQ,gBAAgB,OAAO;AAAA,EACnC,CAAC;AAAA,EACD,OAAO;AAAA;AAGJ,SAAS,YAAY,CAAC,IAAI,QAAQ;AAAA,EACrC,MAAM,KAAK,OAAO,CAAC,YAAY;AAAA,IAC3B,QAAQ,WAAW,CAAC,WAAU;AAAA,MAC1B,IAAI,OAAO,WAAU,UAAU;AAAA,QAC3B,QAAQ,OAAO,KAAU,MAAM,QAAO,QAAQ,OAAO,GAAG,KAAK,GAAG,CAAC;AAAA,MACrE,EACK;AAAA,QAED,MAAM,SAAS;AAAA,QACf,IAAI,OAAO;AAAA,UACP,OAAO,WAAW;AAAA,QACtB,OAAO,SAAS,OAAO,OAAO;AAAA,QAC9B,OAAO,UAAU,OAAO,QAAQ,QAAQ;AAAA,QACxC,OAAO,SAAS,OAAO,OAAO;AAAA,QAC9B,OAAO,aAAa,OAAO,WAAW,CAAC,GAAG,KAAK,IAAI;AAAA,QACnD,QAAQ,OAAO,KAAU,MAAM,MAAM,CAAC;AAAA;AAAA;AAAA,IAG9C,OAAO,GAAG,QAAQ,OAAO,OAAO;AAAA,KACjC,MAAM;AAAA,EACT,OAAO;AAAA;AAGJ,SAAS,MAAM,CAAC,IAAI,QAAQ;AAAA,EAC/B,MAAM,KAAK,IAAW,UAAU;AAAA,IAC5B,OAAO;AAAA,OACC,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA,EACD,GAAG,KAAK,QAAQ;AAAA,EAChB,OAAO;AAAA;AAGJ,SAAS,QAAQ,CAAC,aAAa;AAAA,EAClC,MAAM,KAAK,IAAW,UAAU,EAAE,OAAO,WAAW,CAAC;AAAA,EACrD,GAAG,KAAK,WAAW;AAAA,IACf,CAAC,SAAS;AAAA,MACN,MAAM,WAAsB,eAAe,IAAI,IAAI,KAAK,CAAC;AAAA,MAC9C,eAAe,IAAI,MAAM,KAAK,UAAU,YAAY,CAAC;AAAA;AAAA,EAExE;AAAA,EACA,GAAG,KAAK,QAAQ,MAAM;AAAA,EACtB,OAAO;AAAA;AAGJ,SAAS,IAAI,CAAC,UAAU;AAAA,EAC3B,MAAM,KAAK,IAAW,UAAU,EAAE,OAAO,OAAO,CAAC;AAAA,EACjD,GAAG,KAAK,WAAW;AAAA,IACf,CAAC,SAAS;AAAA,MACN,MAAM,WAAsB,eAAe,IAAI,IAAI,KAAK,CAAC;AAAA,MAC9C,eAAe,IAAI,MAAM,KAAK,aAAa,SAAS,CAAC;AAAA;AAAA,EAExE;AAAA,EACA,GAAG,KAAK,QAAQ,MAAM;AAAA,EACtB,OAAO;AAAA;AAGJ,SAAS,WAAW,CAAC,SAAS,SAAS;AAAA,EAC1C,MAAM,SAAc,gBAAgB,OAAO;AAAA,EAC3C,IAAI,cAAc,OAAO,UAAU,CAAC,QAAQ,KAAK,OAAO,MAAM,KAAK,SAAS;AAAA,EAC5E,IAAI,aAAa,OAAO,SAAS,CAAC,SAAS,KAAK,MAAM,OAAO,KAAK,UAAU;AAAA,EAC5E,IAAI,OAAO,SAAS,aAAa;AAAA,IAC7B,cAAc,YAAY,IAAI,CAAC,MAAO,OAAO,MAAM,WAAW,EAAE,YAAY,IAAI,CAAE;AAAA,IAClF,aAAa,WAAW,IAAI,CAAC,MAAO,OAAO,MAAM,WAAW,EAAE,YAAY,IAAI,CAAE;AAAA,EACpF;AAAA,EACA,MAAM,YAAY,IAAI,IAAI,WAAW;AAAA,EACrC,MAAM,WAAW,IAAI,IAAI,UAAU;AAAA,EACnC,MAAM,SAAS,QAAQ,SAAiB;AAAA,EACxC,MAAM,WAAW,QAAQ,WAAmB;AAAA,EAC5C,MAAM,UAAU,QAAQ,UAAkB;AAAA,EAC1C,MAAM,eAAe,IAAI,QAAQ,EAAE,MAAM,UAAU,OAAO,OAAO,MAAM,CAAC;AAAA,EACxE,MAAM,gBAAgB,IAAI,SAAS,EAAE,MAAM,WAAW,OAAO,OAAO,MAAM,CAAC;AAAA,EAC3E,MAAM,QAAQ,IAAI,OAAO;AAAA,IACrB,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,WAAY,CAAC,OAAO,YAAY;AAAA,MAC5B,IAAI,OAAO;AAAA,MACX,IAAI,OAAO,SAAS;AAAA,QAChB,OAAO,KAAK,YAAY;AAAA,MAC5B,IAAI,UAAU,IAAI,IAAI,GAAG;AAAA,QACrB,OAAO;AAAA,MACX,EACK,SAAI,SAAS,IAAI,IAAI,GAAG;AAAA,QACzB,OAAO;AAAA,MACX,EACK;AAAA,QACD,QAAQ,OAAO,KAAK;AAAA,UAChB,MAAM;AAAA,UACN,UAAU;AAAA,UACV,QAAQ,CAAC,GAAG,WAAW,GAAG,QAAQ;AAAA,UAClC,OAAO,QAAQ;AAAA,UACf,MAAM;AAAA,UACN,UAAU;AAAA,QACd,CAAC;AAAA,QACD,OAAO,CAAC;AAAA;AAAA;AAAA,IAGhB,kBAAmB,CAAC,OAAO,aAAa;AAAA,MACpC,IAAI,UAAU,MAAM;AAAA,QAChB,OAAO,YAAY,MAAM;AAAA,MAC7B,EACK;AAAA,QACD,OAAO,WAAW,MAAM;AAAA;AAAA;AAAA,IAGhC,OAAO,OAAO;AAAA,EAClB,CAAC;AAAA,EACD,OAAO;AAAA;AAGJ,SAAS,aAAa,CAAC,QAAO,QAAQ,WAAW,UAAU,CAAC,GAAG;AAAA,EAClE,MAAM,SAAc,gBAAgB,OAAO;AAAA,EAC3C,MAAM,MAAM;AAAA,OACA,gBAAgB,OAAO;AAAA,IAC/B,OAAO;AAAA,IACP,MAAM;AAAA,IACN;AAAA,IACA,IAAI,OAAO,cAAc,aAAa,YAAY,CAAC,QAAQ,UAAU,KAAK,GAAG;AAAA,OAC1E;AAAA,EACP;AAAA,EACA,IAAI,qBAAqB,QAAQ;AAAA,IAC7B,IAAI,UAAU;AAAA,EAClB;AAAA,EACA,MAAM,OAAO,IAAI,OAAM,GAAG;AAAA,EAC1B,OAAO;AAAA;AAAA,IA5zBE;AAAA;AAAA,EAjQb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EA8Pa,gBAAgB;AAAA,IACzB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,aAAa;AAAA,EACjB;AAAA;;;AC9PO,SAAS,iBAAiB,CAAC,QAAQ;AAAA,EAEtC,IAAI,SAAS,QAAQ,UAAU;AAAA,EAC/B,IAAI,WAAW;AAAA,IACX,SAAS;AAAA,EACb,IAAI,WAAW;AAAA,IACX,SAAS;AAAA,EACb,OAAO;AAAA,IACH,YAAY,OAAO,cAAc,CAAC;AAAA,IAClC,kBAAkB,QAAQ,YAAY;AAAA,IACtC;AAAA,IACA,iBAAiB,QAAQ,mBAAmB;AAAA,IAC5C,UAAU,QAAQ,aAAa,MAAM;AAAA,IACrC,IAAI,QAAQ,MAAM;AAAA,IAClB,SAAS;AAAA,IACT,MAAM,IAAI;AAAA,IACV,QAAQ,QAAQ,UAAU;AAAA,IAC1B,QAAQ,QAAQ,UAAU;AAAA,IAC1B,UAAU,QAAQ,YAAY;AAAA,EAClC;AAAA;AAEG,SAAS,QAAO,CAAC,QAAQ,KAAK,UAAU,EAAE,MAAM,CAAC,GAAG,YAAY,CAAC,EAAE,GAAG;AAAA,EACzE,IAAI;AAAA,EACJ,MAAM,MAAM,OAAO,KAAK;AAAA,EAExB,MAAM,OAAO,IAAI,KAAK,IAAI,MAAM;AAAA,EAChC,IAAI,MAAM;AAAA,IACN,KAAK;AAAA,IAEL,MAAM,UAAU,QAAQ,WAAW,SAAS,MAAM;AAAA,IAClD,IAAI,SAAS;AAAA,MACT,KAAK,QAAQ,QAAQ;AAAA,IACzB;AAAA,IACA,OAAO,KAAK;AAAA,EAChB;AAAA,EAEA,MAAM,SAAS,EAAE,QAAQ,CAAC,GAAG,OAAO,GAAG,OAAO,WAAW,MAAM,QAAQ,KAAK;AAAA,EAC5E,IAAI,KAAK,IAAI,QAAQ,MAAM;AAAA,EAE3B,MAAM,iBAAiB,OAAO,KAAK,eAAe;AAAA,EAClD,IAAI,gBAAgB;AAAA,IAChB,OAAO,SAAS;AAAA,EACpB,EACK;AAAA,IACD,MAAM,SAAS;AAAA,SACR;AAAA,MACH,YAAY,CAAC,GAAG,QAAQ,YAAY,MAAM;AAAA,MAC1C,MAAM,QAAQ;AAAA,IAClB;AAAA,IACA,IAAI,OAAO,KAAK,mBAAmB;AAAA,MAC/B,OAAO,KAAK,kBAAkB,KAAK,OAAO,QAAQ,MAAM;AAAA,IAC5D,EACK;AAAA,MACD,MAAM,QAAQ,OAAO;AAAA,MACrB,MAAM,YAAY,IAAI,WAAW,IAAI;AAAA,MACrC,IAAI,CAAC,WAAW;AAAA,QACZ,MAAM,IAAI,MAAM,uDAAuD,IAAI,MAAM;AAAA,MACrF;AAAA,MACA,UAAU,QAAQ,KAAK,OAAO,MAAM;AAAA;AAAA,IAExC,MAAM,SAAS,OAAO,KAAK;AAAA,IAC3B,IAAI,QAAQ;AAAA,MAER,IAAI,CAAC,OAAO;AAAA,QACR,OAAO,MAAM;AAAA,MACjB,SAAQ,QAAQ,KAAK,MAAM;AAAA,MAC3B,IAAI,KAAK,IAAI,MAAM,EAAE,WAAW;AAAA,IACpC;AAAA;AAAA,EAGJ,MAAM,QAAO,IAAI,iBAAiB,IAAI,MAAM;AAAA,EAC5C,IAAI;AAAA,IACA,OAAO,OAAO,OAAO,QAAQ,KAAI;AAAA,EACrC,IAAI,IAAI,OAAO,WAAW,eAAe,MAAM,GAAG;AAAA,IAE9C,OAAO,OAAO,OAAO;AAAA,IACrB,OAAO,OAAO,OAAO;AAAA,EACzB;AAAA,EAEA,IAAI,IAAI,OAAO,WAAW,eAAe,OAAO;AAAA,KAC3C,MAAK,OAAO,QAAQ,YAAY,IAAG,UAAU,OAAO,OAAO;AAAA,EAChE,OAAO,OAAO,OAAO;AAAA,EAErB,MAAM,UAAU,IAAI,KAAK,IAAI,MAAM;AAAA,EACnC,OAAO,QAAQ;AAAA;AAEZ,SAAS,WAAW,CAAC,KAAK,QAE/B;AAAA,EAEE,MAAM,OAAO,IAAI,KAAK,IAAI,MAAM;AAAA,EAChC,IAAI,CAAC;AAAA,IACD,MAAM,IAAI,MAAM,2CAA2C;AAAA,EAE/D,MAAM,aAAa,IAAI;AAAA,EACvB,WAAW,SAAS,IAAI,KAAK,QAAQ,GAAG;AAAA,IACpC,MAAM,KAAK,IAAI,iBAAiB,IAAI,MAAM,EAAE,GAAG;AAAA,IAC/C,IAAI,IAAI;AAAA,MACJ,MAAM,WAAW,WAAW,IAAI,EAAE;AAAA,MAClC,IAAI,YAAY,aAAa,MAAM,IAAI;AAAA,QACnC,MAAM,IAAI,MAAM,wBAAwB,qHAAqH;AAAA,MACjK;AAAA,MACA,WAAW,IAAI,IAAI,MAAM,EAAE;AAAA,IAC/B;AAAA,EACJ;AAAA,EAGA,MAAM,UAAU,CAAC,UAAU;AAAA,IAKvB,MAAM,cAAc,IAAI,WAAW,kBAAkB,UAAU;AAAA,IAC/D,IAAI,IAAI,UAAU;AAAA,MACd,MAAM,aAAa,IAAI,SAAS,SAAS,IAAI,MAAM,EAAE,GAAG;AAAA,MAExD,MAAM,eAAe,IAAI,SAAS,QAAQ,CAAC,QAAO;AAAA,MAClD,IAAI,YAAY;AAAA,QACZ,OAAO,EAAE,KAAK,aAAa,UAAU,EAAE;AAAA,MAC3C;AAAA,MAEA,MAAM,KAAK,MAAM,GAAG,SAAS,MAAM,GAAG,OAAO,MAAM,SAAS,IAAI;AAAA,MAChE,MAAM,GAAG,QAAQ;AAAA,MACjB,OAAO,EAAE,OAAO,IAAI,KAAK,GAAG,aAAa,UAAU,MAAM,eAAe,KAAK;AAAA,IACjF;AAAA,IACA,IAAI,MAAM,OAAO,MAAM;AAAA,MACnB,OAAO,EAAE,KAAK,IAAI;AAAA,IACtB;AAAA,IAEA,MAAM,YAAY;AAAA,IAClB,MAAM,eAAe,GAAG,aAAa;AAAA,IACrC,MAAM,QAAQ,MAAM,GAAG,OAAO,MAAM,WAAW,IAAI;AAAA,IACnD,OAAO,EAAE,OAAO,KAAK,eAAe,MAAM;AAAA;AAAA,EAI9C,MAAM,eAAe,CAAC,UAAU;AAAA,IAE5B,IAAI,MAAM,GAAG,OAAO,MAAM;AAAA,MACtB;AAAA,IACJ;AAAA,IACA,MAAM,OAAO,MAAM;AAAA,IACnB,QAAQ,KAAK,UAAU,QAAQ,KAAK;AAAA,IACpC,KAAK,MAAM,KAAK,KAAK,OAAO;AAAA,IAG5B,IAAI;AAAA,MACA,KAAK,QAAQ;AAAA,IAEjB,MAAM,UAAS,KAAK;AAAA,IACpB,WAAW,OAAO,SAAQ;AAAA,MACtB,OAAO,QAAO;AAAA,IAClB;AAAA,IACA,QAAO,OAAO;AAAA;AAAA,EAIlB,IAAI,IAAI,WAAW,SAAS;AAAA,IACxB,WAAW,SAAS,IAAI,KAAK,QAAQ,GAAG;AAAA,MACpC,MAAM,OAAO,MAAM;AAAA,MACnB,IAAI,KAAK,OAAO;AAAA,QACZ,MAAM,IAAI,MAAM,qBACZ,KAAK,KAAK,OAAO,KAAK,GAAG,aACzB,kFAAkF;AAAA,MAC1F;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,WAAW,SAAS,IAAI,KAAK,QAAQ,GAAG;AAAA,IACpC,MAAM,OAAO,MAAM;AAAA,IAEnB,IAAI,WAAW,MAAM,IAAI;AAAA,MACrB,aAAa,KAAK;AAAA,MAClB;AAAA,IACJ;AAAA,IAEA,IAAI,IAAI,UAAU;AAAA,MACd,MAAM,MAAM,IAAI,SAAS,SAAS,IAAI,MAAM,EAAE,GAAG;AAAA,MACjD,IAAI,WAAW,MAAM,MAAM,KAAK;AAAA,QAC5B,aAAa,KAAK;AAAA,QAClB;AAAA,MACJ;AAAA,IACJ;AAAA,IAEA,MAAM,KAAK,IAAI,iBAAiB,IAAI,MAAM,EAAE,GAAG;AAAA,IAC/C,IAAI,IAAI;AAAA,MACJ,aAAa,KAAK;AAAA,MAClB;AAAA,IACJ;AAAA,IAEA,IAAI,KAAK,OAAO;AAAA,MAEZ,aAAa,KAAK;AAAA,MAClB;AAAA,IACJ;AAAA,IAEA,IAAI,KAAK,QAAQ,GAAG;AAAA,MAChB,IAAI,IAAI,WAAW,OAAO;AAAA,QACtB,aAAa,KAAK;AAAA,QAElB;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA;AAEG,SAAS,QAAQ,CAAC,KAAK,QAAQ;AAAA,EAClC,MAAM,OAAO,IAAI,KAAK,IAAI,MAAM;AAAA,EAChC,IAAI,CAAC;AAAA,IACD,MAAM,IAAI,MAAM,2CAA2C;AAAA,EAE/D,MAAM,aAAa,CAAC,cAAc;AAAA,IAC9B,MAAM,OAAO,IAAI,KAAK,IAAI,SAAS;AAAA,IAEnC,IAAI,KAAK,QAAQ;AAAA,MACb;AAAA,IACJ,MAAM,UAAS,KAAK,OAAO,KAAK;AAAA,IAChC,MAAM,UAAU,KAAK,QAAO;AAAA,IAC5B,MAAM,MAAM,KAAK;AAAA,IACjB,KAAK,MAAM;AAAA,IACX,IAAI,KAAK;AAAA,MACL,WAAW,GAAG;AAAA,MACd,MAAM,UAAU,IAAI,KAAK,IAAI,GAAG;AAAA,MAChC,MAAM,YAAY,QAAQ;AAAA,MAE1B,IAAI,UAAU,SAAS,IAAI,WAAW,cAAc,IAAI,WAAW,cAAc,IAAI,WAAW,gBAAgB;AAAA,QAE5G,QAAO,QAAQ,QAAO,SAAS,CAAC;AAAA,QAChC,QAAO,MAAM,KAAK,SAAS;AAAA,MAC/B,EACK;AAAA,QACD,OAAO,OAAO,SAAQ,SAAS;AAAA;AAAA,MAGnC,OAAO,OAAO,SAAQ,OAAO;AAAA,MAC7B,MAAM,cAAc,UAAU,KAAK,WAAW;AAAA,MAE9C,IAAI,aAAa;AAAA,QACb,WAAW,OAAO,SAAQ;AAAA,UACtB,IAAI,QAAQ,UAAU,QAAQ;AAAA,YAC1B;AAAA,UACJ,IAAI,EAAE,OAAO,UAAU;AAAA,YACnB,OAAO,QAAO;AAAA,UAClB;AAAA,QACJ;AAAA,MACJ;AAAA,MAEA,IAAI,UAAU,QAAQ,QAAQ,KAAK;AAAA,QAC/B,WAAW,OAAO,SAAQ;AAAA,UACtB,IAAI,QAAQ,UAAU,QAAQ;AAAA,YAC1B;AAAA,UACJ,IAAI,OAAO,QAAQ,OAAO,KAAK,UAAU,QAAO,IAAI,MAAM,KAAK,UAAU,QAAQ,IAAI,IAAI,GAAG;AAAA,YACxF,OAAO,QAAO;AAAA,UAClB;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,IAIA,MAAM,SAAS,UAAU,KAAK;AAAA,IAC9B,IAAI,UAAU,WAAW,KAAK;AAAA,MAE1B,WAAW,MAAM;AAAA,MACjB,MAAM,aAAa,IAAI,KAAK,IAAI,MAAM;AAAA,MACtC,IAAI,YAAY,OAAO,MAAM;AAAA,QACzB,QAAO,OAAO,WAAW,OAAO;AAAA,QAEhC,IAAI,WAAW,KAAK;AAAA,UAChB,WAAW,OAAO,SAAQ;AAAA,YACtB,IAAI,QAAQ,UAAU,QAAQ;AAAA,cAC1B;AAAA,YACJ,IAAI,OAAO,WAAW,OAAO,KAAK,UAAU,QAAO,IAAI,MAAM,KAAK,UAAU,WAAW,IAAI,IAAI,GAAG;AAAA,cAC9F,OAAO,QAAO;AAAA,YAClB;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,IAEA,IAAI,SAAS;AAAA,MACT;AAAA,MACA,YAAY;AAAA,MACZ,MAAM,KAAK,QAAQ,CAAC;AAAA,IACxB,CAAC;AAAA;AAAA,EAEL,WAAW,SAAS,CAAC,GAAG,IAAI,KAAK,QAAQ,CAAC,EAAE,QAAQ,GAAG;AAAA,IACnD,WAAW,MAAM,EAAE;AAAA,EACvB;AAAA,EACA,MAAM,SAAS,CAAC;AAAA,EAChB,IAAI,IAAI,WAAW,iBAAiB;AAAA,IAChC,OAAO,UAAU;AAAA,EACrB,EACK,SAAI,IAAI,WAAW,YAAY;AAAA,IAChC,OAAO,UAAU;AAAA,EACrB,EACK,SAAI,IAAI,WAAW,YAAY;AAAA,IAChC,OAAO,UAAU;AAAA,EACrB,EACK,SAAI,IAAI,WAAW,eAAe,CAEvC;AAAA,EAIA,IAAI,IAAI,UAAU,KAAK;AAAA,IACnB,MAAM,KAAK,IAAI,SAAS,SAAS,IAAI,MAAM,GAAG;AAAA,IAC9C,IAAI,CAAC;AAAA,MACD,MAAM,IAAI,MAAM,oCAAoC;AAAA,IACxD,OAAO,MAAM,IAAI,SAAS,IAAI,EAAE;AAAA,EACpC;AAAA,EACA,OAAO,OAAO,QAAQ,KAAK,OAAO,KAAK,MAAM;AAAA,EAK7C,MAAM,aAAa,IAAI,iBAAiB,IAAI,MAAM,GAAG;AAAA,EACrD,IAAI,eAAe,aAAa,OAAO,OAAO;AAAA,IAC1C,OAAO,OAAO;AAAA,EAElB,MAAM,OAAO,IAAI,UAAU,QAAQ,CAAC;AAAA,EACpC,WAAW,SAAS,IAAI,KAAK,QAAQ,GAAG;AAAA,IACpC,MAAM,OAAO,MAAM;AAAA,IACnB,IAAI,KAAK,OAAO,KAAK,OAAO;AAAA,MACxB,IAAI,KAAK,IAAI,OAAO,KAAK;AAAA,QACrB,OAAO,KAAK,IAAI;AAAA,MACpB,KAAK,KAAK,SAAS,KAAK;AAAA,IAC5B;AAAA,EACJ;AAAA,EAEA,IAAI,IAAI,UAAU,CAClB,EACK;AAAA,IACD,IAAI,OAAO,KAAK,IAAI,EAAE,SAAS,GAAG;AAAA,MAC9B,IAAI,IAAI,WAAW,iBAAiB;AAAA,QAChC,OAAO,QAAQ;AAAA,MACnB,EACK;AAAA,QACD,OAAO,cAAc;AAAA;AAAA,IAE7B;AAAA;AAAA,EAEJ,IAAI;AAAA,IAIA,MAAM,YAAY,KAAK,MAAM,KAAK,UAAU,MAAM,CAAC;AAAA,IACnD,OAAO,eAAe,WAAW,aAAa;AAAA,MAC1C,OAAO;AAAA,WACA,OAAO;AAAA,QACV,YAAY;AAAA,UACR,OAAO,+BAA+B,QAAQ,SAAS,IAAI,UAAU;AAAA,UACrE,QAAQ,+BAA+B,QAAQ,UAAU,IAAI,UAAU;AAAA,QAC3E;AAAA,MACJ;AAAA,MACA,YAAY;AAAA,MACZ,UAAU;AAAA,IACd,CAAC;AAAA,IACD,OAAO;AAAA,IAEX,OAAO,MAAM;AAAA,IACT,MAAM,IAAI,MAAM,kCAAkC;AAAA;AAAA;AAG1D,SAAS,cAAc,CAAC,SAAS,MAAM;AAAA,EACnC,MAAM,MAAM,QAAQ,EAAE,MAAM,IAAI,IAAM;AAAA,EACtC,IAAI,IAAI,KAAK,IAAI,OAAO;AAAA,IACpB,OAAO;AAAA,EACX,IAAI,KAAK,IAAI,OAAO;AAAA,EACpB,MAAM,MAAM,QAAQ,KAAK;AAAA,EACzB,IAAI,IAAI,SAAS;AAAA,IACb,OAAO;AAAA,EACX,IAAI,IAAI,SAAS;AAAA,IACb,OAAO,eAAe,IAAI,SAAS,GAAG;AAAA,EAC1C,IAAI,IAAI,SAAS;AAAA,IACb,OAAO,eAAe,IAAI,WAAW,GAAG;AAAA,EAC5C,IAAI,IAAI,SAAS;AAAA,IACb,OAAO,eAAe,IAAI,OAAO,GAAG,GAAG;AAAA,EAC3C,IAAI,IAAI,SAAS,aACb,IAAI,SAAS,cACb,IAAI,SAAS,iBACb,IAAI,SAAS,cACb,IAAI,SAAS,cACb,IAAI,SAAS,aACb,IAAI,SAAS,YAAY;AAAA,IACzB,OAAO,eAAe,IAAI,WAAW,GAAG;AAAA,EAC5C;AAAA,EACA,IAAI,IAAI,SAAS,gBAAgB;AAAA,IAC7B,OAAO,eAAe,IAAI,MAAM,GAAG,KAAK,eAAe,IAAI,OAAO,GAAG;AAAA,EACzE;AAAA,EACA,IAAI,IAAI,SAAS,YAAY,IAAI,SAAS,OAAO;AAAA,IAC7C,OAAO,eAAe,IAAI,SAAS,GAAG,KAAK,eAAe,IAAI,WAAW,GAAG;AAAA,EAChF;AAAA,EACA,IAAI,IAAI,SAAS,QAAQ;AAAA,IACrB,IAAI,QAAQ,KAAK,OAAO,IAAI,WAAW;AAAA,MACnC,OAAO;AAAA,IACX,OAAO,eAAe,IAAI,IAAI,GAAG,KAAK,eAAe,IAAI,KAAK,GAAG;AAAA,EACrE;AAAA,EACA,IAAI,IAAI,SAAS,UAAU;AAAA,IACvB,WAAW,OAAO,IAAI,OAAO;AAAA,MACzB,IAAI,eAAe,IAAI,MAAM,MAAM,GAAG;AAAA,QAClC,OAAO;AAAA,IACf;AAAA,IACA,OAAO;AAAA,EACX;AAAA,EACA,IAAI,IAAI,SAAS,SAAS;AAAA,IACtB,WAAW,UAAU,IAAI,SAAS;AAAA,MAC9B,IAAI,eAAe,QAAQ,GAAG;AAAA,QAC1B,OAAO;AAAA,IACf;AAAA,IACA,OAAO;AAAA,EACX;AAAA,EACA,IAAI,IAAI,SAAS,SAAS;AAAA,IACtB,WAAW,QAAQ,IAAI,OAAO;AAAA,MAC1B,IAAI,eAAe,MAAM,GAAG;AAAA,QACxB,OAAO;AAAA,IACf;AAAA,IACA,IAAI,IAAI,QAAQ,eAAe,IAAI,MAAM,GAAG;AAAA,MACxC,OAAO;AAAA,IACX,OAAO;AAAA,EACX;AAAA,EACA,OAAO;AAAA;AAAA,IAME,2BAA2B,CAAC,QAAQ,aAAa,CAAC,MAAM,CAAC,WAAW;AAAA,EAC7E,MAAM,MAAM,kBAAkB,KAAK,QAAQ,WAAW,CAAC;AAAA,EACvD,SAAQ,QAAQ,GAAG;AAAA,EACnB,YAAY,KAAK,MAAM;AAAA,EACvB,OAAO,SAAS,KAAK,MAAM;AAAA,GAElB,iCAAiC,CAAC,QAAQ,IAAI,aAAa,CAAC,MAAM,CAAC,WAAW;AAAA,EACvF,QAAQ,gBAAgB,WAAW,UAAU,CAAC;AAAA,EAC9C,MAAM,MAAM,kBAAkB,KAAM,kBAAkB,CAAC,GAAI,QAAQ,IAAI,WAAW,CAAC;AAAA,EACnF,SAAQ,QAAQ,GAAG;AAAA,EACnB,YAAY,KAAK,MAAM;AAAA,EACvB,OAAO,SAAS,KAAK,MAAM;AAAA;AAAA;AAAA,EA9b/B;AAAA;;;ACkjBO,SAAS,YAAY,CAAC,OAAO,QAAQ;AAAA,EACxC,IAAI,YAAY,OAAO;AAAA,IAEnB,MAAM,YAAW;AAAA,IACjB,MAAM,OAAM,kBAAkB,KAAK,QAAQ,YAAY,cAAc,CAAC;AAAA,IACtE,MAAM,OAAO,CAAC;AAAA,IAEd,WAAW,SAAS,UAAS,OAAO,QAAQ,GAAG;AAAA,MAC3C,OAAO,GAAG,UAAU;AAAA,MACpB,SAAQ,QAAQ,IAAG;AAAA,IACvB;AAAA,IACA,MAAM,UAAU,CAAC;AAAA,IACjB,MAAM,WAAW;AAAA,MACb;AAAA,MACA,KAAK,QAAQ;AAAA,MACb;AAAA,IACJ;AAAA,IAEA,KAAI,WAAW;AAAA,IAEf,WAAW,SAAS,UAAS,OAAO,QAAQ,GAAG;AAAA,MAC3C,OAAO,KAAK,UAAU;AAAA,MACtB,YAAY,MAAK,MAAM;AAAA,MACvB,QAAQ,OAAO,SAAS,MAAK,MAAM;AAAA,IACvC;AAAA,IACA,IAAI,OAAO,KAAK,IAAI,EAAE,SAAS,GAAG;AAAA,MAC9B,MAAM,cAAc,KAAI,WAAW,kBAAkB,UAAU;AAAA,MAC/D,QAAQ,WAAW;AAAA,SACd,cAAc;AAAA,MACnB;AAAA,IACJ;AAAA,IACA,OAAO,EAAE,QAAQ;AAAA,EACrB;AAAA,EAEA,MAAM,MAAM,kBAAkB,KAAK,QAAQ,YAAY,cAAc,CAAC;AAAA,EACtE,SAAQ,OAAO,GAAG;AAAA,EAClB,YAAY,KAAK,KAAK;AAAA,EACtB,OAAO,SAAS,KAAK,KAAK;AAAA;AAAA,IArlBxB,WAQO,kBAAkB,CAAC,QAAQ,KAAK,OAAO,YAAY;AAAA,EAC5D,MAAM,OAAO;AAAA,EACb,KAAK,OAAO;AAAA,EACZ,QAAQ,SAAS,SAAS,QAAQ,UAAU,oBAAoB,OAAO,KAClE;AAAA,EACL,IAAI,OAAO,YAAY;AAAA,IACnB,KAAK,YAAY;AAAA,EACrB,IAAI,OAAO,YAAY;AAAA,IACnB,KAAK,YAAY;AAAA,EAErB,IAAI,QAAQ;AAAA,IACR,KAAK,SAAS,UAAU,WAAW;AAAA,IACnC,IAAI,KAAK,WAAW;AAAA,MAChB,OAAO,KAAK;AAAA,IAGhB,IAAI,WAAW,QAAQ;AAAA,MACnB,OAAO,KAAK;AAAA,IAChB;AAAA,EACJ;AAAA,EACA,IAAI;AAAA,IACA,KAAK,kBAAkB;AAAA,EAC3B,IAAI,YAAY,SAAS,OAAO,GAAG;AAAA,IAC/B,MAAM,UAAU,CAAC,GAAG,QAAQ;AAAA,IAC5B,IAAI,QAAQ,WAAW;AAAA,MACnB,KAAK,UAAU,QAAQ,GAAG;AAAA,IACzB,SAAI,QAAQ,SAAS,GAAG;AAAA,MACzB,KAAK,QAAQ;AAAA,QACT,GAAG,QAAQ,IAAI,CAAC,WAAW;AAAA,aACnB,IAAI,WAAW,cAAc,IAAI,WAAW,cAAc,IAAI,WAAW,gBACvE,EAAE,MAAM,SAAS,IACjB,CAAC;AAAA,UACP,SAAS,MAAM;AAAA,QACnB,EAAE;AAAA,MACN;AAAA,IACJ;AAAA,EACJ;AAAA,GAES,kBAAkB,CAAC,QAAQ,KAAK,OAAO,YAAY;AAAA,EAC5D,MAAM,OAAO;AAAA,EACb,QAAQ,SAAS,SAAS,QAAQ,YAAY,kBAAkB,qBAAqB,OAAO,KAAK;AAAA,EACjG,IAAI,OAAO,WAAW,YAAY,OAAO,SAAS,KAAK;AAAA,IACnD,KAAK,OAAO;AAAA,EAEZ;AAAA,SAAK,OAAO;AAAA,EAEhB,MAAM,QAAQ,OAAO,qBAAqB,YAAY,qBAAqB,WAAW,OAAO;AAAA,EAC7F,MAAM,QAAQ,OAAO,qBAAqB,YAAY,qBAAqB,WAAW,OAAO;AAAA,EAC7F,MAAM,SAAS,IAAI,WAAW,cAAc,IAAI,WAAW;AAAA,EAC3D,IAAI,OAAO;AAAA,IACP,IAAI,QAAQ;AAAA,MACR,KAAK,UAAU;AAAA,MACf,KAAK,mBAAmB;AAAA,IAC5B,EACK;AAAA,MACD,KAAK,mBAAmB;AAAA;AAAA,EAEhC,EACK,SAAI,OAAO,YAAY,UAAU;AAAA,IAClC,KAAK,UAAU;AAAA,EACnB;AAAA,EACA,IAAI,OAAO;AAAA,IACP,IAAI,QAAQ;AAAA,MACR,KAAK,UAAU;AAAA,MACf,KAAK,mBAAmB;AAAA,IAC5B,EACK;AAAA,MACD,KAAK,mBAAmB;AAAA;AAAA,EAEhC,EACK,SAAI,OAAO,YAAY,UAAU;AAAA,IAClC,KAAK,UAAU;AAAA,EACnB;AAAA,EACA,IAAI,OAAO,eAAe;AAAA,IACtB,KAAK,aAAa;AAAA,GAEb,mBAAmB,CAAC,SAAS,MAAM,MAAM,YAAY;AAAA,EAC9D,KAAK,OAAO;AAAA,GAEH,kBAAkB,CAAC,SAAS,KAAK,OAAO,YAAY;AAAA,EAC7D,IAAI,IAAI,oBAAoB,SAAS;AAAA,IACjC,MAAM,IAAI,MAAM,6CAA6C;AAAA,EACjE;AAAA,GAES,kBAAkB,CAAC,SAAS,KAAK,OAAO,YAAY;AAAA,EAC7D,IAAI,IAAI,oBAAoB,SAAS;AAAA,IACjC,MAAM,IAAI,MAAM,8CAA8C;AAAA,EAClE;AAAA,GAES,gBAAgB,CAAC,SAAS,KAAK,MAAM,YAAY;AAAA,EAC1D,IAAI,IAAI,WAAW,eAAe;AAAA,IAC9B,KAAK,OAAO;AAAA,IACZ,KAAK,WAAW;AAAA,IAChB,KAAK,OAAO,CAAC,IAAI;AAAA,EACrB,EACK;AAAA,IACD,KAAK,OAAO;AAAA;AAAA,GAGP,qBAAqB,CAAC,SAAS,KAAK,OAAO,YAAY;AAAA,EAChE,IAAI,IAAI,oBAAoB,SAAS;AAAA,IACjC,MAAM,IAAI,MAAM,gDAAgD;AAAA,EACpE;AAAA,GAES,gBAAgB,CAAC,SAAS,KAAK,OAAO,YAAY;AAAA,EAC3D,IAAI,IAAI,oBAAoB,SAAS;AAAA,IACjC,MAAM,IAAI,MAAM,2CAA2C;AAAA,EAC/D;AAAA,GAES,iBAAiB,CAAC,SAAS,MAAM,MAAM,YAAY;AAAA,EAC5D,KAAK,MAAM,CAAC;AAAA,GAEH,eAAe,CAAC,SAAS,MAAM,OAAO,YAAY,IAGlD,mBAAmB,CAAC,SAAS,MAAM,OAAO,YAAY,IAGtD,gBAAgB,CAAC,SAAS,KAAK,OAAO,YAAY;AAAA,EAC3D,IAAI,IAAI,oBAAoB,SAAS;AAAA,IACjC,MAAM,IAAI,MAAM,2CAA2C;AAAA,EAC/D;AAAA,GAES,gBAAgB,CAAC,QAAQ,MAAM,MAAM,YAAY;AAAA,EAC1D,MAAM,MAAM,OAAO,KAAK;AAAA,EACxB,MAAM,SAAS,cAAc,IAAI,OAAO;AAAA,EAExC,IAAI,OAAO,MAAM,CAAC,MAAM,OAAO,MAAM,QAAQ;AAAA,IACzC,KAAK,OAAO;AAAA,EAChB,IAAI,OAAO,MAAM,CAAC,MAAM,OAAO,MAAM,QAAQ;AAAA,IACzC,KAAK,OAAO;AAAA,EAChB,KAAK,OAAO;AAAA,GAEH,mBAAmB,CAAC,QAAQ,KAAK,MAAM,YAAY;AAAA,EAC5D,MAAM,MAAM,OAAO,KAAK;AAAA,EACxB,MAAM,OAAO,CAAC;AAAA,EACd,WAAW,OAAO,IAAI,QAAQ;AAAA,IAC1B,IAAI,QAAQ,WAAW;AAAA,MACnB,IAAI,IAAI,oBAAoB,SAAS;AAAA,QACjC,MAAM,IAAI,MAAM,0DAA0D;AAAA,MAC9E;AAAA,IAIJ,EACK,SAAI,OAAO,QAAQ,UAAU;AAAA,MAC9B,IAAI,IAAI,oBAAoB,SAAS;AAAA,QACjC,MAAM,IAAI,MAAM,sDAAsD;AAAA,MAC1E,EACK;AAAA,QACD,KAAK,KAAK,OAAO,GAAG,CAAC;AAAA;AAAA,IAE7B,EACK;AAAA,MACD,KAAK,KAAK,GAAG;AAAA;AAAA,EAErB;AAAA,EACA,IAAI,KAAK,WAAW,GAAG,CAEvB,EACK,SAAI,KAAK,WAAW,GAAG;AAAA,IACxB,MAAM,MAAM,KAAK;AAAA,IACjB,KAAK,OAAO,QAAQ,OAAO,SAAS,OAAO;AAAA,IAC3C,IAAI,IAAI,WAAW,cAAc,IAAI,WAAW,eAAe;AAAA,MAC3D,KAAK,OAAO,CAAC,GAAG;AAAA,IACpB,EACK;AAAA,MACD,KAAK,QAAQ;AAAA;AAAA,EAErB,EACK;AAAA,IACD,IAAI,KAAK,MAAM,CAAC,MAAM,OAAO,MAAM,QAAQ;AAAA,MACvC,KAAK,OAAO;AAAA,IAChB,IAAI,KAAK,MAAM,CAAC,MAAM,OAAO,MAAM,QAAQ;AAAA,MACvC,KAAK,OAAO;AAAA,IAChB,IAAI,KAAK,MAAM,CAAC,MAAM,OAAO,MAAM,SAAS;AAAA,MACxC,KAAK,OAAO;AAAA,IAChB,IAAI,KAAK,MAAM,CAAC,MAAM,MAAM,IAAI;AAAA,MAC5B,KAAK,OAAO;AAAA,IAChB,KAAK,OAAO;AAAA;AAAA,GAGP,eAAe,CAAC,SAAS,KAAK,OAAO,YAAY;AAAA,EAC1D,IAAI,IAAI,oBAAoB,SAAS;AAAA,IACjC,MAAM,IAAI,MAAM,0CAA0C;AAAA,EAC9D;AAAA,GAES,2BAA2B,CAAC,QAAQ,MAAM,MAAM,YAAY;AAAA,EACrE,MAAM,QAAQ;AAAA,EACd,MAAM,UAAU,OAAO,KAAK;AAAA,EAC5B,IAAI,CAAC;AAAA,IACD,MAAM,IAAI,MAAM,uCAAuC;AAAA,EAC3D,MAAM,OAAO;AAAA,EACb,MAAM,UAAU,QAAQ;AAAA,GAEf,gBAAgB,CAAC,QAAQ,MAAM,MAAM,YAAY;AAAA,EAC1D,MAAM,QAAQ;AAAA,EACd,MAAM,OAAO;AAAA,IACT,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,iBAAiB;AAAA,EACrB;AAAA,EACA,QAAQ,SAAS,SAAS,SAAS,OAAO,KAAK;AAAA,EAC/C,IAAI,YAAY;AAAA,IACZ,KAAK,YAAY;AAAA,EACrB,IAAI,YAAY;AAAA,IACZ,KAAK,YAAY;AAAA,EACrB,IAAI,MAAM;AAAA,IACN,IAAI,KAAK,WAAW,GAAG;AAAA,MACnB,KAAK,mBAAmB,KAAK;AAAA,MAC7B,OAAO,OAAO,OAAO,IAAI;AAAA,IAC7B,EACK;AAAA,MACD,OAAO,OAAO,OAAO,IAAI;AAAA,MACzB,MAAM,QAAQ,KAAK,IAAI,CAAC,OAAO,EAAE,kBAAkB,EAAE,EAAE;AAAA;AAAA,EAE/D,EACK;AAAA,IACD,OAAO,OAAO,OAAO,IAAI;AAAA;AAAA,GAGpB,mBAAmB,CAAC,SAAS,MAAM,MAAM,YAAY;AAAA,EAC9D,KAAK,OAAO;AAAA,GAEH,kBAAkB,CAAC,SAAS,KAAK,OAAO,YAAY;AAAA,EAC7D,IAAI,IAAI,oBAAoB,SAAS;AAAA,IACjC,MAAM,IAAI,MAAM,mDAAmD;AAAA,EACvE;AAAA,GAES,oBAAoB,CAAC,SAAS,KAAK,OAAO,YAAY;AAAA,EAC/D,IAAI,IAAI,oBAAoB,SAAS;AAAA,IACjC,MAAM,IAAI,MAAM,qDAAqD;AAAA,EACzE;AAAA,GAES,qBAAqB,CAAC,SAAS,KAAK,OAAO,YAAY;AAAA,EAChE,IAAI,IAAI,oBAAoB,SAAS;AAAA,IACjC,MAAM,IAAI,MAAM,iDAAiD;AAAA,EACrE;AAAA,GAES,eAAe,CAAC,SAAS,KAAK,OAAO,YAAY;AAAA,EAC1D,IAAI,IAAI,oBAAoB,SAAS;AAAA,IACjC,MAAM,IAAI,MAAM,0CAA0C;AAAA,EAC9D;AAAA,GAES,eAAe,CAAC,SAAS,KAAK,OAAO,YAAY;AAAA,EAC1D,IAAI,IAAI,oBAAoB,SAAS;AAAA,IACjC,MAAM,IAAI,MAAM,0CAA0C;AAAA,EAC9D;AAAA,GAGS,iBAAiB,CAAC,QAAQ,KAAK,OAAO,WAAW;AAAA,EAC1D,MAAM,OAAO;AAAA,EACb,MAAM,MAAM,OAAO,KAAK;AAAA,EACxB,QAAQ,SAAS,YAAY,OAAO,KAAK;AAAA,EACzC,IAAI,OAAO,YAAY;AAAA,IACnB,KAAK,WAAW;AAAA,EACpB,IAAI,OAAO,YAAY;AAAA,IACnB,KAAK,WAAW;AAAA,EACpB,KAAK,OAAO;AAAA,EACZ,KAAK,QAAQ,SAAQ,IAAI,SAAS,KAAK;AAAA,OAChC;AAAA,IACH,MAAM,CAAC,GAAG,OAAO,MAAM,OAAO;AAAA,EAClC,CAAC;AAAA,GAEQ,kBAAkB,CAAC,QAAQ,KAAK,OAAO,WAAW;AAAA,EAC3D,MAAM,OAAO;AAAA,EACb,MAAM,MAAM,OAAO,KAAK;AAAA,EACxB,KAAK,OAAO;AAAA,EACZ,KAAK,aAAa,CAAC;AAAA,EACnB,MAAM,QAAQ,IAAI;AAAA,EAClB,WAAW,OAAO,OAAO;AAAA,IACrB,KAAK,WAAW,OAAO,SAAQ,MAAM,MAAM,KAAK;AAAA,SACzC;AAAA,MACH,MAAM,CAAC,GAAG,OAAO,MAAM,cAAc,GAAG;AAAA,IAC5C,CAAC;AAAA,EACL;AAAA,EAEA,MAAM,UAAU,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC;AAAA,EAC1C,MAAM,eAAe,IAAI,IAAI,CAAC,GAAG,OAAO,EAAE,OAAO,CAAC,QAAQ;AAAA,IACtD,MAAM,IAAI,IAAI,MAAM,KAAK;AAAA,IACzB,IAAI,IAAI,OAAO,SAAS;AAAA,MACpB,OAAO,EAAE,UAAU;AAAA,IACvB,EACK;AAAA,MACD,OAAO,EAAE,WAAW;AAAA;AAAA,GAE3B,CAAC;AAAA,EACF,IAAI,aAAa,OAAO,GAAG;AAAA,IACvB,KAAK,WAAW,MAAM,KAAK,YAAY;AAAA,EAC3C;AAAA,EAEA,IAAI,IAAI,UAAU,KAAK,IAAI,SAAS,SAAS;AAAA,IAEzC,KAAK,uBAAuB;AAAA,EAChC,EACK,SAAI,CAAC,IAAI,UAAU;AAAA,IAEpB,IAAI,IAAI,OAAO;AAAA,MACX,KAAK,uBAAuB;AAAA,EACpC,EACK,SAAI,IAAI,UAAU;AAAA,IACnB,KAAK,uBAAuB,SAAQ,IAAI,UAAU,KAAK;AAAA,SAChD;AAAA,MACH,MAAM,CAAC,GAAG,OAAO,MAAM,sBAAsB;AAAA,IACjD,CAAC;AAAA,EACL;AAAA,GAES,iBAAiB,CAAC,QAAQ,KAAK,MAAM,WAAW;AAAA,EACzD,MAAM,MAAM,OAAO,KAAK;AAAA,EAGxB,MAAM,cAAc,IAAI,cAAc;AAAA,EACtC,MAAM,UAAU,IAAI,QAAQ,IAAI,CAAC,GAAG,MAAM,SAAQ,GAAG,KAAK;AAAA,OACnD;AAAA,IACH,MAAM,CAAC,GAAG,OAAO,MAAM,cAAc,UAAU,SAAS,CAAC;AAAA,EAC7D,CAAC,CAAC;AAAA,EACF,IAAI,aAAa;AAAA,IACb,KAAK,QAAQ;AAAA,EACjB,EACK;AAAA,IACD,KAAK,QAAQ;AAAA;AAAA,GAGR,wBAAwB,CAAC,QAAQ,KAAK,MAAM,WAAW;AAAA,EAChE,MAAM,MAAM,OAAO,KAAK;AAAA,EACxB,MAAM,IAAI,SAAQ,IAAI,MAAM,KAAK;AAAA,OAC1B;AAAA,IACH,MAAM,CAAC,GAAG,OAAO,MAAM,SAAS,CAAC;AAAA,EACrC,CAAC;AAAA,EACD,MAAM,IAAI,SAAQ,IAAI,OAAO,KAAK;AAAA,OAC3B;AAAA,IACH,MAAM,CAAC,GAAG,OAAO,MAAM,SAAS,CAAC;AAAA,EACrC,CAAC;AAAA,EACD,MAAM,uBAAuB,CAAC,SAAQ,WAAW,QAAO,OAAO,KAAK,GAAG,EAAE,WAAW;AAAA,EACpF,MAAM,QAAQ;AAAA,IACV,GAAI,qBAAqB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAAA,IAC1C,GAAI,qBAAqB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAAA,EAC9C;AAAA,EACA,KAAK,QAAQ;AAAA,GAEJ,iBAAiB,CAAC,QAAQ,KAAK,OAAO,WAAW;AAAA,EAC1D,MAAM,OAAO;AAAA,EACb,MAAM,MAAM,OAAO,KAAK;AAAA,EACxB,KAAK,OAAO;AAAA,EACZ,MAAM,aAAa,IAAI,WAAW,kBAAkB,gBAAgB;AAAA,EACpE,MAAM,WAAW,IAAI,WAAW,kBAAkB,UAAU,IAAI,WAAW,gBAAgB,UAAU;AAAA,EACrG,MAAM,cAAc,IAAI,MAAM,IAAI,CAAC,GAAG,MAAM,SAAQ,GAAG,KAAK;AAAA,OACrD;AAAA,IACH,MAAM,CAAC,GAAG,OAAO,MAAM,YAAY,CAAC;AAAA,EACxC,CAAC,CAAC;AAAA,EACF,MAAM,OAAO,IAAI,OACX,SAAQ,IAAI,MAAM,KAAK;AAAA,OAClB;AAAA,IACH,MAAM,CAAC,GAAG,OAAO,MAAM,UAAU,GAAI,IAAI,WAAW,gBAAgB,CAAC,IAAI,MAAM,MAAM,IAAI,CAAC,CAAE;AAAA,EAChG,CAAC,IACC;AAAA,EACN,IAAI,IAAI,WAAW,iBAAiB;AAAA,IAChC,KAAK,cAAc;AAAA,IACnB,IAAI,MAAM;AAAA,MACN,KAAK,QAAQ;AAAA,IACjB;AAAA,EACJ,EACK,SAAI,IAAI,WAAW,eAAe;AAAA,IACnC,KAAK,QAAQ;AAAA,MACT,OAAO;AAAA,IACX;AAAA,IACA,IAAI,MAAM;AAAA,MACN,KAAK,MAAM,MAAM,KAAK,IAAI;AAAA,IAC9B;AAAA,IACA,KAAK,WAAW,YAAY;AAAA,IAC5B,IAAI,CAAC,MAAM;AAAA,MACP,KAAK,WAAW,YAAY;AAAA,IAChC;AAAA,EACJ,EACK;AAAA,IACD,KAAK,QAAQ;AAAA,IACb,IAAI,MAAM;AAAA,MACN,KAAK,kBAAkB;AAAA,IAC3B;AAAA;AAAA,EAGJ,QAAQ,SAAS,YAAY,OAAO,KAAK;AAAA,EACzC,IAAI,OAAO,YAAY;AAAA,IACnB,KAAK,WAAW;AAAA,EACpB,IAAI,OAAO,YAAY;AAAA,IACnB,KAAK,WAAW;AAAA,GAEX,kBAAkB,CAAC,QAAQ,KAAK,OAAO,WAAW;AAAA,EAC3D,MAAM,OAAO;AAAA,EACb,MAAM,MAAM,OAAO,KAAK;AAAA,EACxB,KAAK,OAAO;AAAA,EAIZ,MAAM,UAAU,IAAI;AAAA,EACpB,MAAM,SAAS,QAAQ,KAAK;AAAA,EAC5B,MAAM,WAAW,QAAQ;AAAA,EACzB,IAAI,IAAI,SAAS,WAAW,YAAY,SAAS,OAAO,GAAG;AAAA,IAEvD,MAAM,cAAc,SAAQ,IAAI,WAAW,KAAK;AAAA,SACzC;AAAA,MACH,MAAM,CAAC,GAAG,OAAO,MAAM,qBAAqB,GAAG;AAAA,IACnD,CAAC;AAAA,IACD,KAAK,oBAAoB,CAAC;AAAA,IAC1B,WAAW,WAAW,UAAU;AAAA,MAC5B,KAAK,kBAAkB,QAAQ,UAAU;AAAA,IAC7C;AAAA,EACJ,EACK;AAAA,IAED,IAAI,IAAI,WAAW,cAAc,IAAI,WAAW,iBAAiB;AAAA,MAC7D,KAAK,gBAAgB,SAAQ,IAAI,SAAS,KAAK;AAAA,WACxC;AAAA,QACH,MAAM,CAAC,GAAG,OAAO,MAAM,eAAe;AAAA,MAC1C,CAAC;AAAA,IACL;AAAA,IACA,KAAK,uBAAuB,SAAQ,IAAI,WAAW,KAAK;AAAA,SACjD;AAAA,MACH,MAAM,CAAC,GAAG,OAAO,MAAM,sBAAsB;AAAA,IACjD,CAAC;AAAA;AAAA,EAGL,MAAM,YAAY,QAAQ,KAAK;AAAA,EAC/B,IAAI,WAAW;AAAA,IACX,MAAM,iBAAiB,CAAC,GAAG,SAAS,EAAE,OAAO,CAAC,MAAM,OAAO,MAAM,YAAY,OAAO,MAAM,QAAQ;AAAA,IAClG,IAAI,eAAe,SAAS,GAAG;AAAA,MAC3B,KAAK,WAAW;AAAA,IACpB;AAAA,EACJ;AAAA,GAES,oBAAoB,CAAC,QAAQ,KAAK,MAAM,WAAW;AAAA,EAC5D,MAAM,MAAM,OAAO,KAAK;AAAA,EACxB,MAAM,QAAQ,SAAQ,IAAI,WAAW,KAAK,MAAM;AAAA,EAChD,MAAM,OAAO,IAAI,KAAK,IAAI,MAAM;AAAA,EAChC,IAAI,IAAI,WAAW,eAAe;AAAA,IAC9B,KAAK,MAAM,IAAI;AAAA,IACf,KAAK,WAAW;AAAA,EACpB,EACK;AAAA,IACD,KAAK,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC;AAAA;AAAA,GAGhC,uBAAuB,CAAC,QAAQ,KAAK,OAAO,WAAW;AAAA,EAChE,MAAM,MAAM,OAAO,KAAK;AAAA,EACxB,SAAQ,IAAI,WAAW,KAAK,MAAM;AAAA,EAClC,MAAM,OAAO,IAAI,KAAK,IAAI,MAAM;AAAA,EAChC,KAAK,MAAM,IAAI;AAAA,GAEN,mBAAmB,CAAC,QAAQ,KAAK,MAAM,WAAW;AAAA,EAC3D,MAAM,MAAM,OAAO,KAAK;AAAA,EACxB,SAAQ,IAAI,WAAW,KAAK,MAAM;AAAA,EAClC,MAAM,OAAO,IAAI,KAAK,IAAI,MAAM;AAAA,EAChC,KAAK,MAAM,IAAI;AAAA,EACf,KAAK,UAAU,KAAK,MAAM,KAAK,UAAU,IAAI,YAAY,CAAC;AAAA,GAEjD,oBAAoB,CAAC,QAAQ,KAAK,MAAM,WAAW;AAAA,EAC5D,MAAM,MAAM,OAAO,KAAK;AAAA,EACxB,SAAQ,IAAI,WAAW,KAAK,MAAM;AAAA,EAClC,MAAM,OAAO,IAAI,KAAK,IAAI,MAAM;AAAA,EAChC,KAAK,MAAM,IAAI;AAAA,EACf,IAAI,IAAI,OAAO;AAAA,IACX,KAAK,YAAY,KAAK,MAAM,KAAK,UAAU,IAAI,YAAY,CAAC;AAAA,GAEvD,iBAAiB,CAAC,QAAQ,KAAK,MAAM,WAAW;AAAA,EACzD,MAAM,MAAM,OAAO,KAAK;AAAA,EACxB,SAAQ,IAAI,WAAW,KAAK,MAAM;AAAA,EAClC,MAAM,OAAO,IAAI,KAAK,IAAI,MAAM;AAAA,EAChC,KAAK,MAAM,IAAI;AAAA,EACf,IAAI;AAAA,EACJ,IAAI;AAAA,IACA,aAAa,IAAI,WAAW,SAAS;AAAA,IAEzC,MAAM;AAAA,IACF,MAAM,IAAI,MAAM,uDAAuD;AAAA;AAAA,EAE3E,KAAK,UAAU;AAAA,GAEN,gBAAgB,CAAC,QAAQ,KAAK,OAAO,WAAW;AAAA,EACzD,MAAM,MAAM,OAAO,KAAK;AAAA,EACxB,MAAM,gBAAgB,IAAI,GAAG,KAAK,OAAO,IAAI,eAAe;AAAA,EAC5D,MAAM,YAAY,IAAI,OAAO,UAAW,gBAAgB,IAAI,MAAM,IAAI,KAAM,IAAI;AAAA,EAChF,SAAQ,WAAW,KAAK,MAAM;AAAA,EAC9B,MAAM,OAAO,IAAI,KAAK,IAAI,MAAM;AAAA,EAChC,KAAK,MAAM;AAAA,GAEF,oBAAoB,CAAC,QAAQ,KAAK,MAAM,WAAW;AAAA,EAC5D,MAAM,MAAM,OAAO,KAAK;AAAA,EACxB,SAAQ,IAAI,WAAW,KAAK,MAAM;AAAA,EAClC,MAAM,OAAO,IAAI,KAAK,IAAI,MAAM;AAAA,EAChC,KAAK,MAAM,IAAI;AAAA,EACf,KAAK,WAAW;AAAA,GAEP,mBAAmB,CAAC,QAAQ,KAAK,OAAO,WAAW;AAAA,EAC5D,MAAM,MAAM,OAAO,KAAK;AAAA,EACxB,SAAQ,IAAI,WAAW,KAAK,MAAM;AAAA,EAClC,MAAM,OAAO,IAAI,KAAK,IAAI,MAAM;AAAA,EAChC,KAAK,MAAM,IAAI;AAAA,GAEN,oBAAoB,CAAC,QAAQ,KAAK,OAAO,WAAW;AAAA,EAC7D,MAAM,MAAM,OAAO,KAAK;AAAA,EACxB,SAAQ,IAAI,WAAW,KAAK,MAAM;AAAA,EAClC,MAAM,OAAO,IAAI,KAAK,IAAI,MAAM;AAAA,EAChC,KAAK,MAAM,IAAI;AAAA,GAEN,gBAAgB,CAAC,QAAQ,KAAK,OAAO,WAAW;AAAA,EACzD,MAAM,YAAY,OAAO,KAAK;AAAA,EAC9B,SAAQ,WAAW,KAAK,MAAM;AAAA,EAC9B,MAAM,OAAO,IAAI,KAAK,IAAI,MAAM;AAAA,EAChC,KAAK,MAAM;AAAA,GAGF;AAAA;AAAA,EAzgBb;AAAA,EACA;AAAA,EACM,YAAY;AAAA,IACd,MAAM;AAAA,IACN,KAAK;AAAA,IACL,UAAU;AAAA,IACV,aAAa;AAAA,IACb,OAAO;AAAA,EACX;AAAA,EAigBa,gBAAgB;AAAA,IACzB,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,WAAW;AAAA,IACX,MAAM;AAAA,IACN,OAAO;AAAA,IACP,KAAK;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,KAAK;AAAA,IACL,kBAAkB;AAAA,IAClB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,WAAW;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,cAAc;AAAA,IACd,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,aAAa;AAAA,IACb,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,IACP,MAAM;AAAA,IACN,UAAU;AAAA,IACV,SAAS;AAAA,IACT,UAAU;AAAA,IACV,MAAM;AAAA,EACV;AAAA;;;AC9hBO,MAAM,oBAAoB;AAAA,MAEzB,gBAAgB,GAAG;AAAA,IACnB,OAAO,KAAK,IAAI;AAAA;AAAA,MAGhB,MAAM,GAAG;AAAA,IACT,OAAO,KAAK,IAAI;AAAA;AAAA,MAGhB,eAAe,GAAG;AAAA,IAClB,OAAO,KAAK,IAAI;AAAA;AAAA,MAGhB,QAAQ,GAAG;AAAA,IACX,OAAO,KAAK,IAAI;AAAA;AAAA,MAGhB,EAAE,GAAG;AAAA,IACL,OAAO,KAAK,IAAI;AAAA;AAAA,MAGhB,OAAO,GAAG;AAAA,IACV,OAAO,KAAK,IAAI;AAAA;AAAA,MAEhB,OAAO,CAAC,OAAO;AAAA,IACf,KAAK,IAAI,UAAU;AAAA;AAAA,MAGnB,IAAI,GAAG;AAAA,IACP,OAAO,KAAK,IAAI;AAAA;AAAA,EAEpB,WAAW,CAAC,QAAQ;AAAA,IAEhB,IAAI,mBAAmB,QAAQ,UAAU;AAAA,IACzC,IAAI,qBAAqB;AAAA,MACrB,mBAAmB;AAAA,IACvB,IAAI,qBAAqB;AAAA,MACrB,mBAAmB;AAAA,IACvB,KAAK,MAAM,kBAAkB;AAAA,MACzB,YAAY;AAAA,MACZ,QAAQ;AAAA,SACJ,QAAQ,YAAY,EAAE,UAAU,OAAO,SAAS;AAAA,SAChD,QAAQ,mBAAmB,EAAE,iBAAiB,OAAO,gBAAgB;AAAA,SACrE,QAAQ,YAAY,EAAE,UAAU,OAAO,SAAS;AAAA,SAChD,QAAQ,MAAM,EAAE,IAAI,OAAO,GAAG;AAAA,IACtC,CAAC;AAAA;AAAA,EAML,OAAO,CAAC,QAAQ,UAAU,EAAE,MAAM,CAAC,GAAG,YAAY,CAAC,EAAE,GAAG;AAAA,IACpD,OAAO,SAAQ,QAAQ,KAAK,KAAK,OAAO;AAAA;AAAA,EAM5C,IAAI,CAAC,QAAQ,SAAS;AAAA,IAElB,IAAI,SAAS;AAAA,MACT,IAAI,QAAQ;AAAA,QACR,KAAK,IAAI,SAAS,QAAQ;AAAA,MAC9B,IAAI,QAAQ;AAAA,QACR,KAAK,IAAI,SAAS,QAAQ;AAAA,MAC9B,IAAI,QAAQ;AAAA,QACR,KAAK,IAAI,WAAW,QAAQ;AAAA,IACpC;AAAA,IACA,YAAY,KAAK,KAAK,MAAM;AAAA,IAC5B,MAAM,SAAS,SAAS,KAAK,KAAK,MAAM;AAAA,IAExC,QAAQ,aAAa,MAAM,gBAAgB;AAAA,IAC3C,OAAO;AAAA;AAEf;AAAA;AAAA,EA9FA;AAAA,EACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECKA;AAAA,EACA;AAAA,EACA;AAAA,EAKA;AAAA,EACA;AAAA,EACA;AAAA,EAfA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAIA;AAAA,EAEA;AAAA,EACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECZA;AAAA;;;;;;;;;;;;;;ACMO,SAAS,SAAQ,CAAC,QAAQ;AAAA,EAC7B,OAAY,aAAa,gBAAgB,MAAM;AAAA;AAM5C,SAAS,KAAI,CAAC,QAAQ;AAAA,EACzB,OAAY,SAAS,YAAY,MAAM;AAAA;AAMpC,SAAS,KAAI,CAAC,QAAQ;AAAA,EACzB,OAAY,SAAS,YAAY,MAAM;AAAA;AAMpC,SAAS,SAAQ,CAAC,QAAQ;AAAA,EAC7B,OAAY,aAAa,gBAAgB,MAAM;AAAA;AAAA,IA1BtC,gBAOA,YAOA,YAOA;AAAA;AAAA,EAvBb;AAAA,EACA;AAAA,EACa,iCAAoC,aAAa,kBAAkB,CAAC,MAAM,QAAQ;AAAA,IACtF,gBAAgB,KAAK,MAAM,GAAG;AAAA,IAC3B,gBAAgB,KAAK,MAAM,GAAG;AAAA,GACzC;AAAA,EAIY,6BAAgC,aAAa,cAAc,CAAC,MAAM,QAAQ;AAAA,IAC9E,YAAY,KAAK,MAAM,GAAG;AAAA,IACvB,gBAAgB,KAAK,MAAM,GAAG;AAAA,GACzC;AAAA,EAIY,6BAAgC,aAAa,cAAc,CAAC,MAAM,QAAQ;AAAA,IAC9E,YAAY,KAAK,MAAM,GAAG;AAAA,IACvB,gBAAgB,KAAK,MAAM,GAAG;AAAA,GACzC;AAAA,EAIY,iCAAoC,aAAa,kBAAkB,CAAC,MAAM,QAAQ;AAAA,IACtF,gBAAgB,KAAK,MAAM,GAAG;AAAA,IAC3B,gBAAgB,KAAK,MAAM,GAAG;AAAA,GACzC;AAAA;;;ICvBK,eAAc,CAAC,MAAM,WAAW;AAAA,EAClC,UAAU,KAAK,MAAM,MAAM;AAAA,EAC3B,KAAK,OAAO;AAAA,EACZ,OAAO,iBAAiB,MAAM;AAAA,IAC1B,QAAQ;AAAA,MACJ,OAAO,CAAC,WAAgB,YAAY,MAAM,MAAM;AAAA,IAEpD;AAAA,IACA,SAAS;AAAA,MACL,OAAO,CAAC,WAAgB,aAAa,MAAM,MAAM;AAAA,IAErD;AAAA,IACA,UAAU;AAAA,MACN,OAAO,CAAC,WAAU;AAAA,QACd,KAAK,OAAO,KAAK,MAAK;AAAA,QACtB,KAAK,UAAU,KAAK,UAAU,KAAK,QAAa,uBAAuB,CAAC;AAAA;AAAA,IAGhF;AAAA,IACA,WAAW;AAAA,MACP,OAAO,CAAC,YAAW;AAAA,QACf,KAAK,OAAO,KAAK,GAAG,OAAM;AAAA,QAC1B,KAAK,UAAU,KAAK,UAAU,KAAK,QAAa,uBAAuB,CAAC;AAAA;AAAA,IAGhF;AAAA,IACA,SAAS;AAAA,MACL,GAAG,GAAG;AAAA,QACF,OAAO,KAAK,OAAO,WAAW;AAAA;AAAA,IAGtC;AAAA,EACJ,CAAC;AAAA,GAOQ,UACA;AAAA;AAAA,EA3Cb;AAAA,EACA;AAAA,EACA;AAAA,EAwCa,2BAA8B,aAAa,YAAY,YAAW;AAAA,EAClE,+BAAkC,aAAa,YAAY,cAAa;AAAA,IACjF,QAAQ;AAAA,EACZ,CAAC;AAAA;;;IC3CY,QACA,aACA,YACA,iBAEA,SACA,SACA,cACA,cACA,aACA,aACA,kBACA;AAAA;AAAA,EAdb;AAAA,EACA;AAAA,EACa,yBAA6B,OAAO,YAAY;AAAA,EAChD,8BAAkC,YAAY,YAAY;AAAA,EAC1D,6BAAiC,WAAW,YAAY;AAAA,EACxD,kCAAsC,gBAAgB,YAAY;AAAA,EAElE,0BAA8B,QAAQ,YAAY;AAAA,EAClD,0BAA8B,QAAQ,YAAY;AAAA,EAClD,+BAAmC,aAAa,YAAY;AAAA,EAC5D,+BAAmC,aAAa,YAAY;AAAA,EAC5D,8BAAkC,YAAY,YAAY;AAAA,EAC1D,8BAAkC,YAAY,YAAY;AAAA,EAC1D,mCAAuC,iBAAiB,YAAY;AAAA,EACpE,mCAAuC,iBAAiB,YAAY;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACKjF,SAAS,mBAAmB,CAAC,MAAM,OAAO,SAAS;AAAA,EAC/C,MAAM,QAAQ,OAAO,eAAe,IAAI;AAAA,EACxC,IAAI,YAAY,iBAAiB,IAAI,KAAK;AAAA,EAC1C,IAAI,CAAC,WAAW;AAAA,IACZ,YAAY,IAAI;AAAA,IAChB,iBAAiB,IAAI,OAAO,SAAS;AAAA,EACzC;AAAA,EACA,IAAI,UAAU,IAAI,KAAK;AAAA,IACnB;AAAA,EACJ,UAAU,IAAI,KAAK;AAAA,EACnB,WAAW,OAAO,SAAS;AAAA,IACvB,MAAM,KAAK,QAAQ;AAAA,IACnB,OAAO,eAAe,OAAO,KAAK;AAAA,MAC9B,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,GAAG,GAAG;AAAA,QACF,MAAM,QAAQ,GAAG,KAAK,IAAI;AAAA,QAC1B,OAAO,eAAe,MAAM,KAAK;AAAA,UAC7B,cAAc;AAAA,UACd,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,OAAO;AAAA,QACX,CAAC;AAAA,QACD,OAAO;AAAA;AAAA,MAEX,GAAG,CAAC,GAAG;AAAA,QACH,OAAO,eAAe,MAAM,KAAK;AAAA,UAC7B,cAAc;AAAA,UACd,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,OAAO;AAAA,QACX,CAAC;AAAA;AAAA,IAET,CAAC;AAAA,EACL;AAAA;AA2OG,SAAS,OAAM,CAAC,QAAQ;AAAA,EAC3B,OAAY,QAAQ,WAAW,MAAM;AAAA;AAWlC,SAAS,MAAK,CAAC,QAAQ;AAAA,EAC1B,OAAY,OAAO,UAAU,MAAM;AAAA;AAOhC,SAAS,KAAI,CAAC,QAAQ;AAAA,EACzB,OAAY,MAAM,SAAS,MAAM;AAAA;AAO9B,SAAS,KAAI,CAAC,QAAQ;AAAA,EACzB,OAAY,MAAM,SAAS,MAAM;AAAA;AAE9B,SAAS,MAAM,CAAC,QAAQ;AAAA,EAC3B,OAAY,QAAQ,SAAS,MAAM;AAAA;AAGhC,SAAS,MAAM,CAAC,QAAQ;AAAA,EAC3B,OAAY,QAAQ,SAAS,MAAM;AAAA;AAGhC,SAAS,MAAM,CAAC,QAAQ;AAAA,EAC3B,OAAY,QAAQ,SAAS,MAAM;AAAA;AAOhC,SAAS,GAAG,CAAC,QAAQ;AAAA,EACxB,OAAY,KAAK,QAAQ,MAAM;AAAA;AAE5B,SAAS,OAAO,CAAC,QAAQ;AAAA,EAC5B,OAAY,KAAK,QAAQ;AAAA,IACrB,UAAe,gBAAQ;AAAA,IACvB,UAAe,gBAAQ;AAAA,OACpB,aAAK,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAOE,SAAS,MAAK,CAAC,QAAQ;AAAA,EAC1B,OAAY,QAAO,UAAU,MAAM;AAAA;AAOhC,SAAS,OAAM,CAAC,QAAQ;AAAA,EAC3B,OAAY,QAAQ,WAAW,MAAM;AAAA;AAmBlC,SAAS,KAAI,CAAC,QAAQ;AAAA,EACzB,OAAY,MAAM,SAAS,MAAM;AAAA;AAO9B,SAAS,MAAK,CAAC,QAAQ;AAAA,EAC1B,OAAY,OAAO,UAAU,MAAM;AAAA;AAOhC,SAAS,KAAI,CAAC,QAAQ;AAAA,EACzB,OAAY,MAAM,SAAS,MAAM;AAAA;AAO9B,SAAS,IAAG,CAAC,QAAQ;AAAA,EACxB,OAAY,KAAK,QAAQ,MAAM;AAAA;AAO5B,SAAS,MAAK,CAAC,QAAQ;AAAA,EAC1B,OAAY,OAAO,UAAU,MAAM;AAAA;AAOhC,SAAS,KAAI,CAAC,QAAQ;AAAA,EACzB,OAAY,MAAM,SAAS,MAAM;AAAA;AAO9B,SAAS,IAAG,CAAC,QAAQ;AAAA,EACxB,OAAY,KAAK,QAAQ,MAAM;AAAA;AAO5B,SAAS,KAAI,CAAC,QAAQ;AAAA,EACzB,OAAY,MAAM,SAAS,MAAM;AAAA;AAM9B,SAAS,OAAM,CAAC,QAAQ;AAAA,EAC3B,OAAY,QAAQ,WAAW,MAAM;AAAA;AAMlC,SAAS,OAAM,CAAC,QAAQ;AAAA,EAC3B,OAAY,QAAQ,WAAW,MAAM;AAAA;AAOlC,SAAS,OAAM,CAAC,QAAQ;AAAA,EAC3B,OAAY,QAAQ,WAAW,MAAM;AAAA;AAOlC,SAAS,UAAS,CAAC,QAAQ;AAAA,EAC9B,OAAY,WAAW,cAAc,MAAM;AAAA;AAOxC,SAAS,KAAI,CAAC,QAAQ;AAAA,EACzB,OAAY,MAAM,SAAS,MAAM;AAAA;AAO9B,SAAS,GAAG,CAAC,QAAQ;AAAA,EACxB,OAAY,KAAK,QAAQ,MAAM;AAAA;AAO5B,SAAS,YAAY,CAAC,QAAQ,WAAW,UAAU,CAAC,GAAG;AAAA,EAC1D,OAAY,cAAc,uBAAuB,QAAQ,WAAW,OAAO;AAAA;AAExE,SAAS,SAAQ,CAAC,SAAS;AAAA,EAC9B,OAAY,cAAc,uBAAuB,YAAiB,gBAAQ,UAAU,OAAO;AAAA;AAExF,SAAS,IAAG,CAAC,SAAS;AAAA,EACzB,OAAY,cAAc,uBAAuB,OAAY,gBAAQ,KAAK,OAAO;AAAA;AAE9E,SAAS,IAAI,CAAC,KAAK,QAAQ;AAAA,EAC9B,MAAM,MAAM,QAAQ,OAAO;AAAA,EAC3B,MAAM,SAAS,GAAG,OAAO;AAAA,EACzB,MAAM,QAAa,gBAAQ;AAAA,EAC3B,IAAI,CAAC;AAAA,IACD,MAAM,IAAI,MAAM,6BAA6B,QAAQ;AAAA,EACzD,OAAY,cAAc,uBAAuB,QAAQ,OAAO,MAAM;AAAA;AA8DnE,SAAS,OAAM,CAAC,QAAQ;AAAA,EAC3B,OAAY,QAAQ,WAAW,MAAM;AAAA;AAMlC,SAAS,GAAG,CAAC,QAAQ;AAAA,EACxB,OAAY,KAAK,iBAAiB,MAAM;AAAA;AAErC,SAAS,OAAO,CAAC,QAAQ;AAAA,EAC5B,OAAY,SAAS,iBAAiB,MAAM;AAAA;AAEzC,SAAS,OAAO,CAAC,QAAQ;AAAA,EAC5B,OAAY,SAAS,iBAAiB,MAAM;AAAA;AAEzC,SAAS,KAAK,CAAC,QAAQ;AAAA,EAC1B,OAAY,OAAO,iBAAiB,MAAM;AAAA;AAEvC,SAAS,MAAM,CAAC,QAAQ;AAAA,EAC3B,OAAY,QAAQ,iBAAiB,MAAM;AAAA;AAOxC,SAAS,QAAO,CAAC,QAAQ;AAAA,EAC5B,OAAY,SAAS,YAAY,MAAM;AAAA;AAwBpC,SAAS,OAAM,CAAC,QAAQ;AAAA,EAC3B,OAAY,QAAQ,WAAW,MAAM;AAAA;AAOlC,SAAS,KAAK,CAAC,QAAQ;AAAA,EAC1B,OAAY,OAAO,iBAAiB,MAAM;AAAA;AAGvC,SAAS,MAAM,CAAC,QAAQ;AAAA,EAC3B,OAAY,QAAQ,iBAAiB,MAAM;AAAA;AAOxC,SAAS,MAAM,CAAC,QAAQ;AAAA,EAC3B,OAAY,QAAQ,WAAW,MAAM;AAAA;AAOzC,SAAS,WAAU,CAAC,QAAQ;AAAA,EACxB,OAAY,YAAW,cAAc,MAAM;AAAA;AAQ/C,SAAS,MAAK,CAAC,QAAQ;AAAA,EACnB,OAAY,OAAM,SAAS,MAAM;AAAA;AAQ9B,SAAS,GAAG,GAAG;AAAA,EAClB,OAAY,KAAK,MAAM;AAAA;AAOpB,SAAS,OAAO,GAAG;AAAA,EACtB,OAAY,SAAS,UAAU;AAAA;AAO5B,SAAS,KAAK,CAAC,QAAQ;AAAA,EAC1B,OAAY,OAAO,UAAU,MAAM;AAAA;AAOvC,SAAS,MAAK,CAAC,QAAQ;AAAA,EACnB,OAAY,MAAM,SAAS,MAAM;AAAA;AAa9B,SAAS,KAAI,CAAC,QAAQ;AAAA,EACzB,OAAY,MAAM,SAAS,MAAM;AAAA;AAyB9B,SAAS,KAAK,CAAC,SAAS,QAAQ;AAAA,EACnC,OAAY,OAAO,UAAU,SAAS,MAAM;AAAA;AAGzC,SAAS,KAAK,CAAC,QAAQ;AAAA,EAC1B,MAAM,QAAQ,OAAO,KAAK,IAAI;AAAA,EAC9B,OAAO,OAAM,OAAO,KAAK,KAAK,CAAC;AAAA;AAmD5B,SAAS,MAAM,CAAC,OAAO,QAAQ;AAAA,EAClC,MAAM,MAAM;AAAA,IACR,MAAM;AAAA,IACN,OAAO,SAAS,CAAC;AAAA,OACd,aAAK,gBAAgB,MAAM;AAAA,EAClC;AAAA,EACA,OAAO,IAAI,UAAU,GAAG;AAAA;AAGrB,SAAS,YAAY,CAAC,OAAO,QAAQ;AAAA,EACxC,OAAO,IAAI,UAAU;AAAA,IACjB,MAAM;AAAA,IACN;AAAA,IACA,UAAU,MAAM;AAAA,OACb,aAAK,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,WAAW,CAAC,OAAO,QAAQ;AAAA,EACvC,OAAO,IAAI,UAAU;AAAA,IACjB,MAAM;AAAA,IACN;AAAA,IACA,UAAU,QAAQ;AAAA,OACf,aAAK,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAQE,SAAS,KAAK,CAAC,SAAS,QAAQ;AAAA,EACnC,OAAO,IAAI,SAAS;AAAA,IAChB,MAAM;AAAA,IACN;AAAA,OACG,aAAK,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAWE,SAAS,GAAG,CAAC,SAAS,QAAQ;AAAA,EACjC,OAAO,IAAI,OAAO;AAAA,IACd,MAAM;AAAA,IACN;AAAA,IACA,WAAW;AAAA,OACR,aAAK,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAME,SAAS,kBAAkB,CAAC,eAAe,SAAS,QAAQ;AAAA,EAE/D,OAAO,IAAI,sBAAsB;AAAA,IAC7B,MAAM;AAAA,IACN;AAAA,IACA;AAAA,OACG,aAAK,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAOE,SAAS,YAAY,CAAC,MAAM,OAAO;AAAA,EACtC,OAAO,IAAI,gBAAgB;AAAA,IACvB,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACJ,CAAC;AAAA;AAWE,SAAS,KAAK,CAAC,OAAO,eAAe,SAAS;AAAA,EACjD,MAAM,UAAU,yBAA8B;AAAA,EAC9C,MAAM,SAAS,UAAU,UAAU;AAAA,EACnC,MAAM,OAAO,UAAU,gBAAgB;AAAA,EACvC,OAAO,IAAI,SAAS;AAAA,IAChB,MAAM;AAAA,IACN;AAAA,IACA;AAAA,OACG,aAAK,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AASE,SAAS,MAAM,CAAC,SAAS,WAAW,QAAQ;AAAA,EAE/C,IAAI,CAAC,aAAa,CAAC,UAAU,MAAM;AAAA,IAC/B,OAAO,IAAI,UAAU;AAAA,MACjB,MAAM;AAAA,MACN,SAAS,QAAO;AAAA,MAChB,WAAW;AAAA,SACR,aAAK,gBAAgB,SAAS;AAAA,IACrC,CAAC;AAAA,EACL;AAAA,EACA,OAAO,IAAI,UAAU;AAAA,IACjB,MAAM;AAAA,IACN;AAAA,IACA;AAAA,OACG,aAAK,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAGE,SAAS,aAAa,CAAC,SAAS,WAAW,QAAQ;AAAA,EACtD,MAAM,IAAS,MAAM,OAAO;AAAA,EAC5B,EAAE,KAAK,SAAS;AAAA,EAChB,OAAO,IAAI,UAAU;AAAA,IACjB,MAAM;AAAA,IACN,SAAS;AAAA,IACT;AAAA,OACG,aAAK,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAEE,SAAS,WAAW,CAAC,SAAS,WAAW,QAAQ;AAAA,EACpD,OAAO,IAAI,UAAU;AAAA,IACjB,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA,MAAM;AAAA,OACH,aAAK,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAaE,SAAS,GAAG,CAAC,SAAS,WAAW,QAAQ;AAAA,EAC5C,OAAO,IAAI,OAAO;AAAA,IACd,MAAM;AAAA,IACN;AAAA,IACA;AAAA,OACG,aAAK,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAWE,SAAS,GAAG,CAAC,WAAW,QAAQ;AAAA,EACnC,OAAO,IAAI,OAAO;AAAA,IACd,MAAM;AAAA,IACN;AAAA,OACG,aAAK,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AA0CL,SAAS,MAAK,CAAC,QAAQ,QAAQ;AAAA,EAC3B,MAAM,UAAU,MAAM,QAAQ,MAAM,IAAI,OAAO,YAAY,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;AAAA,EACxF,OAAO,IAAI,QAAQ;AAAA,IACf,MAAM;AAAA,IACN;AAAA,OACG,aAAK,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAUE,SAAS,UAAU,CAAC,SAAS,QAAQ;AAAA,EACxC,OAAO,IAAI,QAAQ;AAAA,IACf,MAAM;AAAA,IACN;AAAA,OACG,aAAK,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAgBE,SAAS,OAAO,CAAC,OAAO,QAAQ;AAAA,EACnC,OAAO,IAAI,WAAW;AAAA,IAClB,MAAM;AAAA,IACN,QAAQ,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAAA,OAC1C,aAAK,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAUE,SAAS,IAAI,CAAC,QAAQ;AAAA,EACzB,OAAY,MAAM,SAAS,MAAM;AAAA;AAuC9B,SAAS,SAAS,CAAC,IAAI;AAAA,EAC1B,OAAO,IAAI,aAAa;AAAA,IACpB,MAAM;AAAA,IACN,WAAW;AAAA,EACf,CAAC;AAAA;AAQE,SAAS,QAAQ,CAAC,WAAW;AAAA,EAChC,OAAO,IAAI,YAAY;AAAA,IACnB,MAAM;AAAA,IACN;AAAA,EACJ,CAAC;AAAA;AAQE,SAAS,aAAa,CAAC,WAAW;AAAA,EACrC,OAAO,IAAI,iBAAiB;AAAA,IACxB,MAAM;AAAA,IACN;AAAA,EACJ,CAAC;AAAA;AAQE,SAAS,QAAQ,CAAC,WAAW;AAAA,EAChC,OAAO,IAAI,YAAY;AAAA,IACnB,MAAM;AAAA,IACN;AAAA,EACJ,CAAC;AAAA;AAGE,SAAS,QAAO,CAAC,WAAW;AAAA,EAC/B,OAAO,SAAS,SAAS,SAAS,CAAC;AAAA;AAShC,SAAS,SAAQ,CAAC,WAAW,cAAc;AAAA,EAC9C,OAAO,IAAI,WAAW;AAAA,IAClB,MAAM;AAAA,IACN;AAAA,QACI,YAAY,GAAG;AAAA,MACf,OAAO,OAAO,iBAAiB,aAAa,aAAa,IAAI,aAAK,aAAa,YAAY;AAAA;AAAA,EAEnG,CAAC;AAAA;AAQE,SAAS,QAAQ,CAAC,WAAW,cAAc;AAAA,EAC9C,OAAO,IAAI,YAAY;AAAA,IACnB,MAAM;AAAA,IACN;AAAA,QACI,YAAY,GAAG;AAAA,MACf,OAAO,OAAO,iBAAiB,aAAa,aAAa,IAAI,aAAK,aAAa,YAAY;AAAA;AAAA,EAEnG,CAAC;AAAA;AAQE,SAAS,WAAW,CAAC,WAAW,QAAQ;AAAA,EAC3C,OAAO,IAAI,eAAe;AAAA,IACtB,MAAM;AAAA,IACN;AAAA,OACG,aAAK,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAQE,SAAS,OAAO,CAAC,WAAW;AAAA,EAC/B,OAAO,IAAI,WAAW;AAAA,IAClB,MAAM;AAAA,IACN;AAAA,EACJ,CAAC;AAAA;AASL,SAAS,OAAM,CAAC,WAAW,YAAY;AAAA,EACnC,OAAO,IAAI,SAAS;AAAA,IAChB,MAAM;AAAA,IACN;AAAA,IACA,YAAa,OAAO,eAAe,aAAa,aAAa,MAAM;AAAA,EACvE,CAAC;AAAA;AAQE,SAAS,GAAG,CAAC,QAAQ;AAAA,EACxB,OAAY,KAAK,QAAQ,MAAM;AAAA;AAS5B,SAAS,IAAI,CAAC,KAAK,KAAK;AAAA,EAC3B,OAAO,IAAI,QAAQ;AAAA,IACf,MAAM;AAAA,IACN,IAAI;AAAA,IACJ;AAAA,EAEJ,CAAC;AAAA;AAME,SAAS,KAAK,CAAC,KAAK,KAAK,QAAQ;AAAA,EACpC,OAAO,IAAI,SAAS;AAAA,IAChB,MAAM;AAAA,IACN,IAAI;AAAA,IACJ;AAAA,IACA,WAAW,OAAO;AAAA,IAClB,kBAAkB,OAAO;AAAA,EAC7B,CAAC;AAAA;AAEE,SAAS,WAAW,CAAC,QAAO;AAAA,EAC/B,MAAM,MAAM,OAAM,KAAK;AAAA,EACvB,OAAO,IAAI,SAAS;AAAA,IAChB,MAAM;AAAA,IACN,IAAI,IAAI;AAAA,IACR,KAAK,IAAI;AAAA,IACT,WAAW,IAAI;AAAA,IACf,kBAAkB,IAAI;AAAA,EAC1B,CAAC;AAAA;AAYE,SAAS,QAAQ,CAAC,WAAW;AAAA,EAChC,OAAO,IAAI,YAAY;AAAA,IACnB,MAAM;AAAA,IACN;AAAA,EACJ,CAAC;AAAA;AAOE,SAAS,eAAe,CAAC,OAAO,QAAQ;AAAA,EAC3C,OAAO,IAAI,mBAAmB;AAAA,IAC1B,MAAM;AAAA,IACN;AAAA,OACG,aAAK,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA;AAQE,SAAS,IAAI,CAAC,QAAQ;AAAA,EACzB,OAAO,IAAI,QAAQ;AAAA,IACf,MAAM;AAAA,IACN;AAAA,EACJ,CAAC;AAAA;AAQE,SAAS,OAAO,CAAC,WAAW;AAAA,EAC/B,OAAO,IAAI,WAAW;AAAA,IAClB,MAAM;AAAA,IACN;AAAA,EACJ,CAAC;AAAA;AAOE,SAAS,SAAS,CAAC,QAAQ;AAAA,EAC9B,OAAO,IAAI,YAAY;AAAA,IACnB,MAAM;AAAA,IACN,OAAO,MAAM,QAAQ,QAAQ,KAAK,IAAI,MAAM,QAAQ,KAAK,IAAK,QAAQ,SAAS,MAAM,QAAQ,CAAC;AAAA,IAC9F,QAAQ,QAAQ,UAAU,QAAQ;AAAA,EACtC,CAAC;AAAA;AASE,SAAS,KAAK,CAAC,IAAI;AAAA,EACtB,MAAM,KAAK,IAAS,UAAU;AAAA,IAC1B,OAAO;AAAA,EAEX,CAAC;AAAA,EACD,GAAG,KAAK,QAAQ;AAAA,EAChB,OAAO;AAAA;AAEJ,SAAS,MAAM,CAAC,IAAI,SAAS;AAAA,EAChC,OAAY,QAAQ,WAAW,OAAO,MAAM,OAAO,OAAO;AAAA;AAEvD,SAAS,MAAM,CAAC,IAAI,UAAU,CAAC,GAAG;AAAA,EACrC,OAAY,QAAQ,WAAW,IAAI,OAAO;AAAA;AAGvC,SAAS,WAAW,CAAC,IAAI,QAAQ;AAAA,EACpC,OAAY,aAAa,IAAI,MAAM;AAAA;AAKvC,SAAS,WAAW,CAAC,KAAK,SAAS,CAAC,GAAG;AAAA,EACnC,MAAM,OAAO,IAAI,UAAU;AAAA,IACvB,MAAM;AAAA,IACN,OAAO;AAAA,IACP,IAAI,CAAC,SAAS,gBAAgB;AAAA,IAC9B,OAAO;AAAA,OACJ,aAAK,gBAAgB,MAAM;AAAA,EAClC,CAAC;AAAA,EACD,KAAK,KAAK,IAAI,QAAQ;AAAA,EAEtB,KAAK,KAAK,QAAQ,CAAC,YAAY;AAAA,IAC3B,IAAI,EAAE,QAAQ,iBAAiB,MAAM;AAAA,MACjC,QAAQ,OAAO,KAAK;AAAA,QAChB,MAAM;AAAA,QACN,UAAU,IAAI;AAAA,QACd,OAAO,QAAQ;AAAA,QACf;AAAA,QACA,MAAM,CAAC,GAAI,KAAK,KAAK,IAAI,QAAQ,CAAC,CAAE;AAAA,MACxC,CAAC;AAAA,IACL;AAAA;AAAA,EAEJ,OAAO;AAAA;AASJ,SAAS,IAAI,CAAC,QAAQ;AAAA,EACzB,MAAM,aAAa,KAAK,MAAM;AAAA,IAC1B,OAAO,MAAM,CAAC,QAAO,MAAM,GAAG,QAAO,GAAG,SAAQ,GAAG,OAAM,GAAG,MAAM,UAAU,GAAG,OAAO,QAAO,GAAG,UAAU,CAAC,CAAC;AAAA,GAC/G;AAAA,EACD,OAAO;AAAA;AAGJ,SAAS,UAAU,CAAC,IAAI,QAAQ;AAAA,EACnC,OAAO,IAAI,cAAc;AAAA,IACrB,MAAM;AAAA,IACN,IAAI,UAAU,EAAE;AAAA,IAChB,KAAK;AAAA,EACT,CAAC;AAAA;AAAA,IA/1CC,kBAqCO,SAiJA,YAwDA,WAmCA,iBAIA,UAQA,SAQA,SAmBA,QAeA,UAQA,WAaA,SAeA,UAQA,SAQA,QAQA,UAQA,SAQA,QAQA,SAQA,WAOA,WAOA,WAQA,cAQA,SAQA,QAQA,uBAsBA,WA+DA,iBAmBA,YAQA,WAyBA,iBAYA,WAQA,cASA,SASA,QAQA,YAQA,UAQA,SASA,SAaA,UA+BA,WA2EA,UAaA,QAiBA,uBAaA,iBAYA,UAoBA,WA4CA,QAmBA,QAgBA,SA+DA,YAqBA,SAWA,cA2CA,aAYA,kBAYA,aAgBA,YAgBA,aAeA,gBAaA,YAYA,UAeA,QAQA,SAeA,UAuBA,eAIA,aAYA,oBAYA,SAYA,YAYA,aAaA,WAyBA,WACA,OA0BA,aAAa,IAAI,SAAc,YAAY;AAAA,EACpD,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AACZ,GAAG,GAAG,IAAI;AAAA;AAAA,EAp2CV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAYM,mCAAmC,IAAI;AAAA,EAqChC,0BAA6B,aAAa,WAAW,CAAC,MAAM,QAAQ;AAAA,IACxE,SAAS,KAAK,MAAM,GAAG;AAAA,IAC5B,OAAO,OAAO,KAAK,cAAc;AAAA,MAC7B,YAAY;AAAA,QACR,OAAO,+BAA+B,MAAM,OAAO;AAAA,QACnD,QAAQ,+BAA+B,MAAM,QAAQ;AAAA,MACzD;AAAA,IACJ,CAAC;AAAA,IACD,KAAK,eAAe,yBAAyB,MAAM,CAAC,CAAC;AAAA,IACrD,KAAK,MAAM;AAAA,IACX,KAAK,OAAO,IAAI;AAAA,IAChB,OAAO,eAAe,MAAM,QAAQ,EAAE,OAAO,IAAI,CAAC;AAAA,IAMlD,KAAK,QAAQ,CAAC,MAAM,WAAiB,OAAM,MAAM,MAAM,QAAQ,EAAE,QAAQ,KAAK,MAAM,CAAC;AAAA,IACrF,KAAK,YAAY,CAAC,MAAM,WAAiB,WAAU,MAAM,MAAM,MAAM;AAAA,IACrE,KAAK,aAAa,OAAO,MAAM,WAAiB,YAAW,MAAM,MAAM,QAAQ,EAAE,QAAQ,KAAK,WAAW,CAAC;AAAA,IAC1G,KAAK,iBAAiB,OAAO,MAAM,WAAiB,gBAAe,MAAM,MAAM,MAAM;AAAA,IACrF,KAAK,MAAM,KAAK;AAAA,IAChB,KAAK,SAAS,CAAC,MAAM,WAAiB,QAAO,MAAM,MAAM,MAAM;AAAA,IAC/D,KAAK,SAAS,CAAC,MAAM,WAAiB,QAAO,MAAM,MAAM,MAAM;AAAA,IAC/D,KAAK,cAAc,OAAO,MAAM,WAAiB,aAAY,MAAM,MAAM,MAAM;AAAA,IAC/E,KAAK,cAAc,OAAO,MAAM,WAAiB,aAAY,MAAM,MAAM,MAAM;AAAA,IAC/E,KAAK,aAAa,CAAC,MAAM,WAAiB,YAAW,MAAM,MAAM,MAAM;AAAA,IACvE,KAAK,aAAa,CAAC,MAAM,WAAiB,YAAW,MAAM,MAAM,MAAM;AAAA,IACvE,KAAK,kBAAkB,OAAO,MAAM,WAAiB,iBAAgB,MAAM,MAAM,MAAM;AAAA,IACvF,KAAK,kBAAkB,OAAO,MAAM,WAAiB,iBAAgB,MAAM,MAAM,MAAM;AAAA,IAOvF,oBAAoB,MAAM,WAAW;AAAA,MACjC,KAAK,IAAI,MAAM;AAAA,QACX,MAAM,OAAM,KAAK;AAAA,QACjB,OAAO,KAAK,MAAM,aAAK,UAAU,MAAK;AAAA,UAClC,QAAQ;AAAA,YACJ,GAAI,KAAI,UAAU,CAAC;AAAA,YACnB,GAAG,KAAK,IAAI,CAAC,OAAO,OAAO,OAAO,aAAa,EAAE,MAAM,EAAE,OAAO,IAAI,KAAK,EAAE,OAAO,SAAS,GAAG,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE;AAAA,UACvH;AAAA,QACJ,CAAC,GAAG,EAAE,QAAQ,KAAK,CAAC;AAAA;AAAA,MAExB,IAAI,IAAI,MAAM;AAAA,QACV,OAAO,KAAK,MAAM,GAAG,IAAI;AAAA;AAAA,MAE7B,KAAK,CAAC,MAAK,QAAQ;AAAA,QACf,OAAY,MAAM,MAAM,MAAK,MAAM;AAAA;AAAA,MAEvC,KAAK,GAAG;AAAA,QACJ,OAAO;AAAA;AAAA,MAEX,QAAQ,CAAC,KAAK,OAAM;AAAA,QAChB,IAAI,IAAI,MAAM,KAAI;AAAA,QAClB,OAAO;AAAA;AAAA,MAEX,MAAM,CAAC,OAAO,QAAQ;AAAA,QAClB,OAAO,KAAK,MAAM,OAAO,OAAO,MAAM,CAAC;AAAA;AAAA,MAE3C,WAAW,CAAC,YAAY,QAAQ;AAAA,QAC5B,OAAO,KAAK,MAAM,YAAY,YAAY,MAAM,CAAC;AAAA;AAAA,MAErD,SAAS,CAAC,IAAI;AAAA,QACV,OAAO,KAAK,MAAa,WAAU,EAAE,CAAC;AAAA;AAAA,MAE1C,QAAQ,GAAG;AAAA,QACP,OAAO,SAAS,IAAI;AAAA;AAAA,MAExB,aAAa,GAAG;AAAA,QACZ,OAAO,cAAc,IAAI;AAAA;AAAA,MAE7B,QAAQ,GAAG;AAAA,QACP,OAAO,SAAS,IAAI;AAAA;AAAA,MAExB,OAAO,GAAG;AAAA,QACN,OAAO,SAAS,SAAS,IAAI,CAAC;AAAA;AAAA,MAElC,WAAW,CAAC,QAAQ;AAAA,QAChB,OAAO,YAAY,MAAM,MAAM;AAAA;AAAA,MAEnC,KAAK,GAAG;AAAA,QACJ,OAAO,MAAM,IAAI;AAAA;AAAA,MAErB,EAAE,CAAC,KAAK;AAAA,QACJ,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC;AAAA;AAAA,MAE5B,GAAG,CAAC,KAAK;AAAA,QACL,OAAO,aAAa,MAAM,GAAG;AAAA;AAAA,MAEjC,SAAS,CAAC,IAAI;AAAA,QACV,OAAO,KAAK,MAAM,UAAU,EAAE,CAAC;AAAA;AAAA,MAEnC,OAAO,CAAC,GAAG;AAAA,QACP,OAAO,UAAS,MAAM,CAAC;AAAA;AAAA,MAE3B,QAAQ,CAAC,GAAG;AAAA,QACR,OAAO,SAAS,MAAM,CAAC;AAAA;AAAA,MAE3B,KAAK,CAAC,QAAQ;AAAA,QACV,OAAO,QAAO,MAAM,MAAM;AAAA;AAAA,MAE9B,IAAI,CAAC,QAAQ;AAAA,QACT,OAAO,KAAK,MAAM,MAAM;AAAA;AAAA,MAE5B,QAAQ,GAAG;AAAA,QACP,OAAO,SAAS,IAAI;AAAA;AAAA,MAExB,QAAQ,CAAC,aAAa;AAAA,QAClB,MAAM,KAAK,KAAK,MAAM;AAAA,QACjB,eAAe,IAAI,IAAI,EAAE,YAAY,CAAC;AAAA,QAC3C,OAAO;AAAA;AAAA,MAEX,IAAI,IAAI,MAAM;AAAA,QAKV,IAAI,KAAK,WAAW;AAAA,UAChB,OAAY,eAAe,IAAI,IAAI;AAAA,QACvC,MAAM,KAAK,KAAK,MAAM;AAAA,QACjB,eAAe,IAAI,IAAI,KAAK,EAAE;AAAA,QACnC,OAAO;AAAA;AAAA,MAEX,UAAU,GAAG;AAAA,QACT,OAAO,KAAK,UAAU,SAAS,EAAE;AAAA;AAAA,MAErC,UAAU,GAAG;AAAA,QACT,OAAO,KAAK,UAAU,IAAI,EAAE;AAAA;AAAA,MAEhC,KAAK,CAAC,IAAI;AAAA,QACN,OAAO,GAAG,IAAI;AAAA;AAAA,IAEtB,CAAC;AAAA,IACD,OAAO,eAAe,MAAM,eAAe;AAAA,MACvC,GAAG,GAAG;AAAA,QACF,OAAY,eAAe,IAAI,IAAI,GAAG;AAAA;AAAA,MAE1C,cAAc;AAAA,IAClB,CAAC;AAAA,IACD,OAAO;AAAA,GACV;AAAA,EAEY,6BAAgC,aAAa,cAAc,CAAC,MAAM,QAAQ;AAAA,IAC9E,WAAW,KAAK,MAAM,GAAG;AAAA,IAC9B,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,gBAAgB,MAAM,KAAK,MAAM,MAAM;AAAA,IACvG,MAAM,MAAM,KAAK,KAAK;AAAA,IACtB,KAAK,SAAS,IAAI,UAAU;AAAA,IAC5B,KAAK,YAAY,IAAI,WAAW;AAAA,IAChC,KAAK,YAAY,IAAI,WAAW;AAAA,IAChC,oBAAoB,MAAM,cAAc;AAAA,MACpC,KAAK,IAAI,MAAM;AAAA,QACX,OAAO,KAAK,MAAa,OAAM,GAAG,IAAI,CAAC;AAAA;AAAA,MAE3C,QAAQ,IAAI,MAAM;AAAA,QACd,OAAO,KAAK,MAAa,UAAS,GAAG,IAAI,CAAC;AAAA;AAAA,MAE9C,UAAU,IAAI,MAAM;AAAA,QAChB,OAAO,KAAK,MAAa,YAAW,GAAG,IAAI,CAAC;AAAA;AAAA,MAEhD,QAAQ,IAAI,MAAM;AAAA,QACd,OAAO,KAAK,MAAa,UAAS,GAAG,IAAI,CAAC;AAAA;AAAA,MAE9C,GAAG,IAAI,MAAM;AAAA,QACT,OAAO,KAAK,MAAa,WAAU,GAAG,IAAI,CAAC;AAAA;AAAA,MAE/C,GAAG,IAAI,MAAM;AAAA,QACT,OAAO,KAAK,MAAa,WAAU,GAAG,IAAI,CAAC;AAAA;AAAA,MAE/C,MAAM,IAAI,MAAM;AAAA,QACZ,OAAO,KAAK,MAAa,QAAO,GAAG,IAAI,CAAC;AAAA;AAAA,MAE5C,QAAQ,IAAI,MAAM;AAAA,QACd,OAAO,KAAK,MAAa,WAAU,GAAG,GAAG,IAAI,CAAC;AAAA;AAAA,MAElD,SAAS,CAAC,QAAQ;AAAA,QACd,OAAO,KAAK,MAAa,WAAU,MAAM,CAAC;AAAA;AAAA,MAE9C,SAAS,CAAC,QAAQ;AAAA,QACd,OAAO,KAAK,MAAa,WAAU,MAAM,CAAC;AAAA;AAAA,MAE9C,IAAI,GAAG;AAAA,QACH,OAAO,KAAK,MAAa,MAAK,CAAC;AAAA;AAAA,MAEnC,SAAS,IAAI,MAAM;AAAA,QACf,OAAO,KAAK,MAAa,WAAU,GAAG,IAAI,CAAC;AAAA;AAAA,MAE/C,WAAW,GAAG;AAAA,QACV,OAAO,KAAK,MAAa,aAAY,CAAC;AAAA;AAAA,MAE1C,WAAW,GAAG;AAAA,QACV,OAAO,KAAK,MAAa,aAAY,CAAC;AAAA;AAAA,MAE1C,OAAO,GAAG;AAAA,QACN,OAAO,KAAK,MAAa,SAAQ,CAAC;AAAA;AAAA,IAE1C,CAAC;AAAA,GACJ;AAAA,EACY,4BAA+B,aAAa,aAAa,CAAC,MAAM,QAAQ;AAAA,IAC5E,WAAW,KAAK,MAAM,GAAG;AAAA,IAC9B,WAAW,KAAK,MAAM,GAAG;AAAA,IACzB,KAAK,QAAQ,CAAC,WAAW,KAAK,MAAW,OAAO,UAAU,MAAM,CAAC;AAAA,IACjE,KAAK,MAAM,CAAC,WAAW,KAAK,MAAW,KAAK,QAAQ,MAAM,CAAC;AAAA,IAC3D,KAAK,MAAM,CAAC,WAAW,KAAK,MAAW,KAAK,QAAQ,MAAM,CAAC;AAAA,IAC3D,KAAK,QAAQ,CAAC,WAAW,KAAK,MAAW,QAAO,UAAU,MAAM,CAAC;AAAA,IACjE,KAAK,OAAO,CAAC,WAAW,KAAK,MAAW,MAAM,SAAS,MAAM,CAAC;AAAA,IAC9D,KAAK,OAAO,CAAC,WAAW,KAAK,MAAW,MAAM,SAAS,MAAM,CAAC;AAAA,IAC9D,KAAK,SAAS,CAAC,WAAW,KAAK,MAAW,QAAQ,SAAS,MAAM,CAAC;AAAA,IAClE,KAAK,SAAS,CAAC,WAAW,KAAK,MAAW,QAAQ,SAAS,MAAM,CAAC;AAAA,IAClE,KAAK,SAAS,CAAC,WAAW,KAAK,MAAW,QAAQ,SAAS,MAAM,CAAC;AAAA,IAClE,KAAK,SAAS,CAAC,WAAW,KAAK,MAAW,QAAQ,WAAW,MAAM,CAAC;AAAA,IACpE,KAAK,OAAO,CAAC,WAAW,KAAK,MAAW,MAAM,SAAS,MAAM,CAAC;AAAA,IAC9D,KAAK,OAAO,CAAC,WAAW,KAAK,MAAW,MAAM,SAAS,MAAM,CAAC;AAAA,IAC9D,KAAK,QAAQ,CAAC,WAAW,KAAK,MAAW,OAAO,UAAU,MAAM,CAAC;AAAA,IACjE,KAAK,OAAO,CAAC,WAAW,KAAK,MAAW,MAAM,SAAS,MAAM,CAAC;AAAA,IAC9D,KAAK,SAAS,CAAC,WAAW,KAAK,MAAW,QAAQ,WAAW,MAAM,CAAC;AAAA,IACpE,KAAK,YAAY,CAAC,WAAW,KAAK,MAAW,WAAW,cAAc,MAAM,CAAC;AAAA,IAC7E,KAAK,MAAM,CAAC,WAAW,KAAK,MAAW,KAAK,QAAQ,MAAM,CAAC;AAAA,IAC3D,KAAK,QAAQ,CAAC,WAAW,KAAK,MAAW,OAAO,UAAU,MAAM,CAAC;AAAA,IACjE,KAAK,OAAO,CAAC,WAAW,KAAK,MAAW,MAAM,SAAS,MAAM,CAAC;AAAA,IAC9D,KAAK,OAAO,CAAC,WAAW,KAAK,MAAW,MAAM,SAAS,MAAM,CAAC;AAAA,IAC9D,KAAK,SAAS,CAAC,WAAW,KAAK,MAAW,QAAQ,WAAW,MAAM,CAAC;AAAA,IACpE,KAAK,SAAS,CAAC,WAAW,KAAK,MAAW,QAAQ,WAAW,MAAM,CAAC;AAAA,IACpE,KAAK,OAAO,CAAC,WAAW,KAAK,MAAW,MAAM,SAAS,MAAM,CAAC;AAAA,IAE9D,KAAK,WAAW,CAAC,WAAW,KAAK,MAAU,UAAS,MAAM,CAAC;AAAA,IAC3D,KAAK,OAAO,CAAC,WAAW,KAAK,MAAU,MAAK,MAAM,CAAC;AAAA,IACnD,KAAK,OAAO,CAAC,WAAW,KAAK,MAAU,MAAK,MAAM,CAAC;AAAA,IACnD,KAAK,WAAW,CAAC,WAAW,KAAK,MAAU,UAAS,MAAM,CAAC;AAAA,GAC9D;AAAA,EAIY,kCAAqC,aAAa,mBAAmB,CAAC,MAAM,QAAQ;AAAA,IACxF,iBAAiB,KAAK,MAAM,GAAG;AAAA,IACpC,WAAW,KAAK,MAAM,GAAG;AAAA,GAC5B;AAAA,EACY,2BAA8B,aAAa,YAAY,CAAC,MAAM,QAAQ;AAAA,IAE1E,UAAU,KAAK,MAAM,GAAG;AAAA,IAC7B,gBAAgB,KAAK,MAAM,GAAG;AAAA,GACjC;AAAA,EAIY,0BAA6B,aAAa,WAAW,CAAC,MAAM,QAAQ;AAAA,IAExE,SAAS,KAAK,MAAM,GAAG;AAAA,IAC5B,gBAAgB,KAAK,MAAM,GAAG;AAAA,GACjC;AAAA,EAIY,0BAA6B,aAAa,WAAW,CAAC,MAAM,QAAQ;AAAA,IAExE,SAAS,KAAK,MAAM,GAAG;AAAA,IAC5B,gBAAgB,KAAK,MAAM,GAAG;AAAA,GACjC;AAAA,EAeY,yBAA4B,aAAa,UAAU,CAAC,MAAM,QAAQ;AAAA,IAEtE,QAAQ,KAAK,MAAM,GAAG;AAAA,IAC3B,gBAAgB,KAAK,MAAM,GAAG;AAAA,GACjC;AAAA,EAWY,2BAA8B,aAAa,YAAY,CAAC,MAAM,QAAQ;AAAA,IAE1E,UAAU,KAAK,MAAM,GAAG;AAAA,IAC7B,gBAAgB,KAAK,MAAM,GAAG;AAAA,GACjC;AAAA,EAIY,4BAA+B,aAAa,aAAa,CAAC,MAAM,QAAQ;AAAA,IAE5E,WAAW,KAAK,MAAM,GAAG;AAAA,IAC9B,gBAAgB,KAAK,MAAM,GAAG;AAAA,GACjC;AAAA,EASY,0BAA6B,aAAa,WAAW,CAAC,MAAM,QAAQ;AAAA,IAExE,SAAS,KAAK,MAAM,GAAG;AAAA,IAC5B,gBAAgB,KAAK,MAAM,GAAG;AAAA,GACjC;AAAA,EAWY,2BAA8B,aAAa,YAAY,CAAC,MAAM,QAAQ;AAAA,IAE1E,UAAU,KAAK,MAAM,GAAG;AAAA,IAC7B,gBAAgB,KAAK,MAAM,GAAG;AAAA,GACjC;AAAA,EAIY,0BAA6B,aAAa,WAAW,CAAC,MAAM,QAAQ;AAAA,IAExE,SAAS,KAAK,MAAM,GAAG;AAAA,IAC5B,gBAAgB,KAAK,MAAM,GAAG;AAAA,GACjC;AAAA,EAIY,yBAA4B,aAAa,UAAU,CAAC,MAAM,QAAQ;AAAA,IAEtE,QAAQ,KAAK,MAAM,GAAG;AAAA,IAC3B,gBAAgB,KAAK,MAAM,GAAG;AAAA,GACjC;AAAA,EAIY,2BAA8B,aAAa,YAAY,CAAC,MAAM,QAAQ;AAAA,IAE1E,UAAU,KAAK,MAAM,GAAG;AAAA,IAC7B,gBAAgB,KAAK,MAAM,GAAG;AAAA,GACjC;AAAA,EAIY,0BAA6B,aAAa,WAAW,CAAC,MAAM,QAAQ;AAAA,IAExE,SAAS,KAAK,MAAM,GAAG;AAAA,IAC5B,gBAAgB,KAAK,MAAM,GAAG;AAAA,GACjC;AAAA,EAIY,yBAA4B,aAAa,UAAU,CAAC,MAAM,QAAQ;AAAA,IAEtE,QAAQ,KAAK,MAAM,GAAG;AAAA,IAC3B,gBAAgB,KAAK,MAAM,GAAG;AAAA,GACjC;AAAA,EAIY,0BAA6B,aAAa,WAAW,CAAC,MAAM,QAAQ;AAAA,IAExE,SAAS,KAAK,MAAM,GAAG;AAAA,IAC5B,gBAAgB,KAAK,MAAM,GAAG;AAAA,GACjC;AAAA,EAIY,4BAA+B,aAAa,aAAa,CAAC,MAAM,QAAQ;AAAA,IAC5E,WAAW,KAAK,MAAM,GAAG;AAAA,IAC9B,gBAAgB,KAAK,MAAM,GAAG;AAAA,GACjC;AAAA,EAIY,4BAA+B,aAAa,aAAa,CAAC,MAAM,QAAQ;AAAA,IAC5E,WAAW,KAAK,MAAM,GAAG;AAAA,IAC9B,gBAAgB,KAAK,MAAM,GAAG;AAAA,GACjC;AAAA,EAIY,4BAA+B,aAAa,aAAa,CAAC,MAAM,QAAQ;AAAA,IAE5E,WAAW,KAAK,MAAM,GAAG;AAAA,IAC9B,gBAAgB,KAAK,MAAM,GAAG;AAAA,GACjC;AAAA,EAIY,+BAAkC,aAAa,gBAAgB,CAAC,MAAM,QAAQ;AAAA,IAElF,cAAc,KAAK,MAAM,GAAG;AAAA,IACjC,gBAAgB,KAAK,MAAM,GAAG;AAAA,GACjC;AAAA,EAIY,0BAA6B,aAAa,WAAW,CAAC,MAAM,QAAQ;AAAA,IAExE,SAAS,KAAK,MAAM,GAAG;AAAA,IAC5B,gBAAgB,KAAK,MAAM,GAAG;AAAA,GACjC;AAAA,EAIY,yBAA4B,aAAa,UAAU,CAAC,MAAM,QAAQ;AAAA,IAEtE,QAAQ,KAAK,MAAM,GAAG;AAAA,IAC3B,gBAAgB,KAAK,MAAM,GAAG;AAAA,GACjC;AAAA,EAIY,wCAA2C,aAAa,yBAAyB,CAAC,MAAM,QAAQ;AAAA,IAEpG,uBAAuB,KAAK,MAAM,GAAG;AAAA,IAC1C,gBAAgB,KAAK,MAAM,GAAG;AAAA,GACjC;AAAA,EAkBY,4BAA+B,aAAa,aAAa,CAAC,MAAM,QAAQ;AAAA,IAC5E,WAAW,KAAK,MAAM,GAAG;AAAA,IAC9B,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,gBAAgB,MAAM,KAAK,MAAM,MAAM;AAAA,IACvG,oBAAoB,MAAM,aAAa;AAAA,MACnC,EAAE,CAAC,OAAO,QAAQ;AAAA,QACd,OAAO,KAAK,MAAa,IAAG,OAAO,MAAM,CAAC;AAAA;AAAA,MAE9C,GAAG,CAAC,OAAO,QAAQ;AAAA,QACf,OAAO,KAAK,MAAa,KAAI,OAAO,MAAM,CAAC;AAAA;AAAA,MAE/C,GAAG,CAAC,OAAO,QAAQ;AAAA,QACf,OAAO,KAAK,MAAa,KAAI,OAAO,MAAM,CAAC;AAAA;AAAA,MAE/C,EAAE,CAAC,OAAO,QAAQ;AAAA,QACd,OAAO,KAAK,MAAa,IAAG,OAAO,MAAM,CAAC;AAAA;AAAA,MAE9C,GAAG,CAAC,OAAO,QAAQ;AAAA,QACf,OAAO,KAAK,MAAa,KAAI,OAAO,MAAM,CAAC;AAAA;AAAA,MAE/C,GAAG,CAAC,OAAO,QAAQ;AAAA,QACf,OAAO,KAAK,MAAa,KAAI,OAAO,MAAM,CAAC;AAAA;AAAA,MAE/C,GAAG,CAAC,QAAQ;AAAA,QACR,OAAO,KAAK,MAAM,IAAI,MAAM,CAAC;AAAA;AAAA,MAEjC,IAAI,CAAC,QAAQ;AAAA,QACT,OAAO,KAAK,MAAM,IAAI,MAAM,CAAC;AAAA;AAAA,MAEjC,QAAQ,CAAC,QAAQ;AAAA,QACb,OAAO,KAAK,MAAa,IAAG,GAAG,MAAM,CAAC;AAAA;AAAA,MAE1C,WAAW,CAAC,QAAQ;AAAA,QAChB,OAAO,KAAK,MAAa,KAAI,GAAG,MAAM,CAAC;AAAA;AAAA,MAE3C,QAAQ,CAAC,QAAQ;AAAA,QACb,OAAO,KAAK,MAAa,IAAG,GAAG,MAAM,CAAC;AAAA;AAAA,MAE1C,WAAW,CAAC,QAAQ;AAAA,QAChB,OAAO,KAAK,MAAa,KAAI,GAAG,MAAM,CAAC;AAAA;AAAA,MAE3C,UAAU,CAAC,OAAO,QAAQ;AAAA,QACtB,OAAO,KAAK,MAAa,YAAW,OAAO,MAAM,CAAC;AAAA;AAAA,MAEtD,IAAI,CAAC,OAAO,QAAQ;AAAA,QAChB,OAAO,KAAK,MAAa,YAAW,OAAO,MAAM,CAAC;AAAA;AAAA,MAEtD,MAAM,GAAG;AAAA,QACL,OAAO;AAAA;AAAA,IAEf,CAAC;AAAA,IACD,MAAM,MAAM,KAAK,KAAK;AAAA,IACtB,KAAK,WACD,KAAK,IAAI,IAAI,WAAW,OAAO,mBAAmB,IAAI,oBAAoB,OAAO,iBAAiB,KAAK;AAAA,IAC3G,KAAK,WACD,KAAK,IAAI,IAAI,WAAW,OAAO,mBAAmB,IAAI,oBAAoB,OAAO,iBAAiB,KAAK;AAAA,IAC3G,KAAK,SAAS,IAAI,UAAU,IAAI,SAAS,KAAK,KAAK,OAAO,cAAc,IAAI,cAAc,GAAG;AAAA,IAC7F,KAAK,WAAW;AAAA,IAChB,KAAK,SAAS,IAAI,UAAU;AAAA,GAC/B;AAAA,EAIY,kCAAqC,aAAa,mBAAmB,CAAC,MAAM,QAAQ;AAAA,IACxF,iBAAiB,KAAK,MAAM,GAAG;AAAA,IACpC,UAAU,KAAK,MAAM,GAAG;AAAA,GAC3B;AAAA,EAgBY,6BAAgC,aAAa,cAAc,CAAC,MAAM,QAAQ;AAAA,IAC9E,YAAY,KAAK,MAAM,GAAG;AAAA,IAC/B,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,iBAAiB,MAAM,KAAK,MAAM,MAAM;AAAA,GAC3G;AAAA,EAIY,4BAA+B,aAAa,aAAa,CAAC,MAAM,QAAQ;AAAA,IAC5E,WAAW,KAAK,MAAM,GAAG;AAAA,IAC9B,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,gBAAgB,MAAM,KAAK,MAAM,MAAM;AAAA,IACvG,KAAK,MAAM,CAAC,OAAO,WAAW,KAAK,MAAa,KAAI,OAAO,MAAM,CAAC;AAAA,IAClE,KAAK,MAAM,CAAC,OAAO,WAAW,KAAK,MAAa,KAAI,OAAO,MAAM,CAAC;AAAA,IAClE,KAAK,KAAK,CAAC,OAAO,WAAW,KAAK,MAAa,IAAG,OAAO,MAAM,CAAC;AAAA,IAChE,KAAK,MAAM,CAAC,OAAO,WAAW,KAAK,MAAa,KAAI,OAAO,MAAM,CAAC;AAAA,IAClE,KAAK,MAAM,CAAC,OAAO,WAAW,KAAK,MAAa,KAAI,OAAO,MAAM,CAAC;AAAA,IAClE,KAAK,KAAK,CAAC,OAAO,WAAW,KAAK,MAAa,IAAG,OAAO,MAAM,CAAC;AAAA,IAChE,KAAK,MAAM,CAAC,OAAO,WAAW,KAAK,MAAa,KAAI,OAAO,MAAM,CAAC;AAAA,IAClE,KAAK,MAAM,CAAC,OAAO,WAAW,KAAK,MAAa,KAAI,OAAO,MAAM,CAAC;AAAA,IAClE,KAAK,WAAW,CAAC,WAAW,KAAK,MAAa,IAAG,OAAO,CAAC,GAAG,MAAM,CAAC;AAAA,IACnE,KAAK,WAAW,CAAC,WAAW,KAAK,MAAa,IAAG,OAAO,CAAC,GAAG,MAAM,CAAC;AAAA,IACnE,KAAK,cAAc,CAAC,WAAW,KAAK,MAAa,KAAI,OAAO,CAAC,GAAG,MAAM,CAAC;AAAA,IACvE,KAAK,cAAc,CAAC,WAAW,KAAK,MAAa,KAAI,OAAO,CAAC,GAAG,MAAM,CAAC;AAAA,IACvE,KAAK,aAAa,CAAC,OAAO,WAAW,KAAK,MAAa,YAAW,OAAO,MAAM,CAAC;AAAA,IAChF,MAAM,MAAM,KAAK,KAAK;AAAA,IACtB,KAAK,WAAW,IAAI,WAAW;AAAA,IAC/B,KAAK,WAAW,IAAI,WAAW;AAAA,IAC/B,KAAK,SAAS,IAAI,UAAU;AAAA,GAC/B;AAAA,EAIY,kCAAqC,aAAa,mBAAmB,CAAC,MAAM,QAAQ;AAAA,IACxF,iBAAiB,KAAK,MAAM,GAAG;AAAA,IACpC,UAAU,KAAK,MAAM,GAAG;AAAA,GAC3B;AAAA,EASY,4BAA+B,aAAa,aAAa,CAAC,MAAM,QAAQ;AAAA,IAC5E,WAAW,KAAK,MAAM,GAAG;AAAA,IAC9B,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,gBAAgB,MAAM,KAAK,MAAM,MAAM;AAAA,GAC1G;AAAA,EAIY,+BAAkC,aAAa,gBAAgB,CAAC,MAAM,QAAQ;AAAA,IAClF,cAAc,KAAK,MAAM,GAAG;AAAA,IACjC,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,mBAAmB,MAAM,KAAK,MAAM,MAAM;AAAA,GAC7G;AAAA,EAKY,0BAA6B,aAAa,WAAW,CAAC,MAAM,QAAQ;AAAA,IACxE,SAAS,KAAK,MAAM,GAAG;AAAA,IAC5B,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,cAAc,MAAM,KAAK,MAAM,MAAM;AAAA,GACxG;AAAA,EAKY,yBAA4B,aAAa,UAAU,CAAC,MAAM,QAAQ;AAAA,IACtE,QAAQ,KAAK,MAAM,GAAG;AAAA,IAC3B,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,aAAa,MAAM,KAAK,MAAM,MAAM;AAAA,GACvG;AAAA,EAIY,6BAAgC,aAAa,cAAc,CAAC,MAAM,QAAQ;AAAA,IAC9E,YAAY,KAAK,MAAM,GAAG;AAAA,IAC/B,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,iBAAiB,MAAM,KAAK,MAAM,MAAM;AAAA,GAC3G;AAAA,EAIY,2BAA8B,aAAa,YAAY,CAAC,MAAM,QAAQ;AAAA,IAC1E,UAAU,KAAK,MAAM,GAAG;AAAA,IAC7B,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,eAAe,MAAM,KAAK,MAAM,MAAM;AAAA,GACzG;AAAA,EAIY,0BAA6B,aAAa,WAAW,CAAC,MAAM,QAAQ;AAAA,IACxE,SAAS,KAAK,MAAM,GAAG;AAAA,IAC5B,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,cAAc,MAAM,KAAK,MAAM,MAAM;AAAA,GACxG;AAAA,EAKY,0BAA6B,aAAa,WAAW,CAAC,MAAM,QAAQ;AAAA,IACxE,SAAS,KAAK,MAAM,GAAG;AAAA,IAC5B,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,cAAc,MAAM,KAAK,MAAM,MAAM;AAAA,IACrG,KAAK,MAAM,CAAC,OAAO,WAAW,KAAK,MAAa,KAAI,OAAO,MAAM,CAAC;AAAA,IAClE,KAAK,MAAM,CAAC,OAAO,WAAW,KAAK,MAAa,KAAI,OAAO,MAAM,CAAC;AAAA,IAClE,MAAM,IAAI,KAAK,KAAK;AAAA,IACpB,KAAK,UAAU,EAAE,UAAU,IAAI,KAAK,EAAE,OAAO,IAAI;AAAA,IACjD,KAAK,UAAU,EAAE,UAAU,IAAI,KAAK,EAAE,OAAO,IAAI;AAAA,GACpD;AAAA,EAIY,2BAA8B,aAAa,YAAY,CAAC,MAAM,QAAQ;AAAA,IAC1E,UAAU,KAAK,MAAM,GAAG;AAAA,IAC7B,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,eAAe,MAAM,KAAK,MAAM,MAAM;AAAA,IACtG,KAAK,UAAU,IAAI;AAAA,IACnB,oBAAoB,MAAM,YAAY;AAAA,MAClC,GAAG,CAAC,GAAG,QAAQ;AAAA,QACX,OAAO,KAAK,MAAa,WAAU,GAAG,MAAM,CAAC;AAAA;AAAA,MAEjD,QAAQ,CAAC,QAAQ;AAAA,QACb,OAAO,KAAK,MAAa,WAAU,GAAG,MAAM,CAAC;AAAA;AAAA,MAEjD,GAAG,CAAC,GAAG,QAAQ;AAAA,QACX,OAAO,KAAK,MAAa,WAAU,GAAG,MAAM,CAAC;AAAA;AAAA,MAEjD,MAAM,CAAC,GAAG,QAAQ;AAAA,QACd,OAAO,KAAK,MAAa,QAAO,GAAG,MAAM,CAAC;AAAA;AAAA,MAE9C,MAAM,GAAG;AAAA,QACL,OAAO,KAAK;AAAA;AAAA,IAEpB,CAAC;AAAA,GACJ;AAAA,EASY,4BAA+B,aAAa,aAAa,CAAC,MAAM,QAAQ;AAAA,IAC5E,cAAc,KAAK,MAAM,GAAG;AAAA,IACjC,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,gBAAgB,MAAM,KAAK,MAAM,MAAM;AAAA,IACvG,aAAK,WAAW,MAAM,SAAS,MAAM;AAAA,MACjC,OAAO,IAAI;AAAA,KACd;AAAA,IACD,oBAAoB,MAAM,aAAa;AAAA,MACnC,KAAK,GAAG;AAAA,QACJ,OAAO,OAAM,OAAO,KAAK,KAAK,KAAK,IAAI,KAAK,CAAC;AAAA;AAAA,MAEjD,QAAQ,CAAC,UAAU;AAAA,QACf,OAAO,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,SAAmB,CAAC;AAAA;AAAA,MAE9D,WAAW,GAAG;AAAA,QACV,OAAO,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,UAAU,QAAQ,EAAE,CAAC;AAAA;AAAA,MAE/D,KAAK,GAAG;AAAA,QACJ,OAAO,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,UAAU,QAAQ,EAAE,CAAC;AAAA;AAAA,MAE/D,MAAM,GAAG;AAAA,QACL,OAAO,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,UAAU,MAAM,EAAE,CAAC;AAAA;AAAA,MAE7D,KAAK,GAAG;AAAA,QACJ,OAAO,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,UAAU,UAAU,CAAC;AAAA;AAAA,MAE/D,MAAM,CAAC,UAAU;AAAA,QACb,OAAO,aAAK,OAAO,MAAM,QAAQ;AAAA;AAAA,MAErC,UAAU,CAAC,UAAU;AAAA,QACjB,OAAO,aAAK,WAAW,MAAM,QAAQ;AAAA;AAAA,MAEzC,KAAK,CAAC,OAAO;AAAA,QACT,OAAO,aAAK,MAAM,MAAM,KAAK;AAAA;AAAA,MAEjC,IAAI,CAAC,MAAM;AAAA,QACP,OAAO,aAAK,KAAK,MAAM,IAAI;AAAA;AAAA,MAE/B,IAAI,CAAC,MAAM;AAAA,QACP,OAAO,aAAK,KAAK,MAAM,IAAI;AAAA;AAAA,MAE/B,OAAO,IAAI,MAAM;AAAA,QACb,OAAO,aAAK,QAAQ,aAAa,MAAM,KAAK,EAAE;AAAA;AAAA,MAElD,QAAQ,IAAI,MAAM;AAAA,QACd,OAAO,aAAK,SAAS,gBAAgB,MAAM,KAAK,EAAE;AAAA;AAAA,IAE1D,CAAC;AAAA,GACJ;AAAA,EA2BY,2BAA8B,aAAa,YAAY,CAAC,MAAM,QAAQ;AAAA,IAC1E,UAAU,KAAK,MAAM,GAAG;AAAA,IAC7B,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,eAAe,MAAM,KAAK,MAAM,MAAM;AAAA,IACtG,KAAK,UAAU,IAAI;AAAA,GACtB;AAAA,EAQY,yBAA4B,aAAa,UAAU,CAAC,MAAM,QAAQ;AAAA,IAC3E,SAAS,KAAK,MAAM,GAAG;AAAA,IAClB,QAAQ,KAAK,MAAM,GAAG;AAAA,IAC3B,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,eAAe,MAAM,KAAK,MAAM,MAAM;AAAA,IACtG,KAAK,UAAU,IAAI;AAAA,GACtB;AAAA,EAYY,wCAA2C,aAAa,yBAAyB,CAAC,MAAM,QAAQ;AAAA,IACzG,SAAS,KAAK,MAAM,GAAG;AAAA,IAClB,uBAAuB,KAAK,MAAM,GAAG;AAAA,GAC7C;AAAA,EAUY,kCAAqC,aAAa,mBAAmB,CAAC,MAAM,QAAQ;AAAA,IACxF,iBAAiB,KAAK,MAAM,GAAG;AAAA,IACpC,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,sBAAsB,MAAM,KAAK,MAAM,MAAM;AAAA,GAChH;AAAA,EAQY,2BAA8B,aAAa,YAAY,CAAC,MAAM,QAAQ;AAAA,IAC1E,UAAU,KAAK,MAAM,GAAG;AAAA,IAC7B,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,eAAe,MAAM,KAAK,MAAM,MAAM;AAAA,IACtG,KAAK,OAAO,CAAC,SAAS,KAAK,MAAM;AAAA,SAC1B,KAAK,KAAK;AAAA,MACb;AAAA,IACJ,CAAC;AAAA,GACJ;AAAA,EAYY,4BAA+B,aAAa,aAAa,CAAC,MAAM,QAAQ;AAAA,IAC5E,WAAW,KAAK,MAAM,GAAG;AAAA,IAC9B,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,gBAAgB,MAAM,KAAK,MAAM,MAAM;AAAA,IACvG,KAAK,UAAU,IAAI;AAAA,IACnB,KAAK,YAAY,IAAI;AAAA,GACxB;AAAA,EAsCY,yBAA4B,aAAa,UAAU,CAAC,MAAM,QAAQ;AAAA,IACtE,QAAQ,KAAK,MAAM,GAAG;AAAA,IAC3B,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,aAAa,MAAM,KAAK,MAAM,MAAM;AAAA,IACpG,KAAK,UAAU,IAAI;AAAA,IACnB,KAAK,YAAY,IAAI;AAAA,IACrB,KAAK,MAAM,IAAI,SAAS,KAAK,MAAW,SAAS,GAAG,IAAI,CAAC;AAAA,IACzD,KAAK,WAAW,CAAC,WAAW,KAAK,MAAW,SAAS,GAAG,MAAM,CAAC;AAAA,IAC/D,KAAK,MAAM,IAAI,SAAS,KAAK,MAAW,SAAS,GAAG,IAAI,CAAC;AAAA,IACzD,KAAK,OAAO,IAAI,SAAS,KAAK,MAAW,MAAM,GAAG,IAAI,CAAC;AAAA,GAC1D;AAAA,EASY,yBAA4B,aAAa,UAAU,CAAC,MAAM,QAAQ;AAAA,IACtE,QAAQ,KAAK,MAAM,GAAG;AAAA,IAC3B,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,aAAa,MAAM,KAAK,MAAM,MAAM;AAAA,IACpG,KAAK,MAAM,IAAI,SAAS,KAAK,MAAW,SAAS,GAAG,IAAI,CAAC;AAAA,IACzD,KAAK,WAAW,CAAC,WAAW,KAAK,MAAW,SAAS,GAAG,MAAM,CAAC;AAAA,IAC/D,KAAK,MAAM,IAAI,SAAS,KAAK,MAAW,SAAS,GAAG,IAAI,CAAC;AAAA,IACzD,KAAK,OAAO,IAAI,SAAS,KAAK,MAAW,MAAM,GAAG,IAAI,CAAC;AAAA,GAC1D;AAAA,EAQY,0BAA6B,aAAa,WAAW,CAAC,MAAM,QAAQ;AAAA,IACxE,SAAS,KAAK,MAAM,GAAG;AAAA,IAC5B,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,cAAc,MAAM,KAAK,MAAM,MAAM;AAAA,IACrG,KAAK,OAAO,IAAI;AAAA,IAChB,KAAK,UAAU,OAAO,OAAO,IAAI,OAAO;AAAA,IACxC,MAAM,OAAO,IAAI,IAAI,OAAO,KAAK,IAAI,OAAO,CAAC;AAAA,IAC7C,KAAK,UAAU,CAAC,QAAQ,WAAW;AAAA,MAC/B,MAAM,aAAa,CAAC;AAAA,MACpB,WAAW,SAAS,QAAQ;AAAA,QACxB,IAAI,KAAK,IAAI,KAAK,GAAG;AAAA,UACjB,WAAW,SAAS,IAAI,QAAQ;AAAA,QACpC,EAEI;AAAA,gBAAM,IAAI,MAAM,OAAO,yBAAyB;AAAA,MACxD;AAAA,MACA,OAAO,IAAI,QAAQ;AAAA,WACZ;AAAA,QACH,QAAQ,CAAC;AAAA,WACN,aAAK,gBAAgB,MAAM;AAAA,QAC9B,SAAS;AAAA,MACb,CAAC;AAAA;AAAA,IAEL,KAAK,UAAU,CAAC,QAAQ,WAAW;AAAA,MAC/B,MAAM,aAAa,KAAK,IAAI,QAAQ;AAAA,MACpC,WAAW,SAAS,QAAQ;AAAA,QACxB,IAAI,KAAK,IAAI,KAAK,GAAG;AAAA,UACjB,OAAO,WAAW;AAAA,QACtB,EAEI;AAAA,gBAAM,IAAI,MAAM,OAAO,yBAAyB;AAAA,MACxD;AAAA,MACA,OAAO,IAAI,QAAQ;AAAA,WACZ;AAAA,QACH,QAAQ,CAAC;AAAA,WACN,aAAK,gBAAgB,MAAM;AAAA,QAC9B,SAAS;AAAA,MACb,CAAC;AAAA;AAAA,GAER;AAAA,EAwBY,6BAAgC,aAAa,cAAc,CAAC,MAAM,QAAQ;AAAA,IAC9E,YAAY,KAAK,MAAM,GAAG;AAAA,IAC/B,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,iBAAiB,MAAM,KAAK,MAAM,MAAM;AAAA,IACxG,KAAK,SAAS,IAAI,IAAI,IAAI,MAAM;AAAA,IAChC,OAAO,eAAe,MAAM,SAAS;AAAA,MACjC,GAAG,GAAG;AAAA,QACF,IAAI,IAAI,OAAO,SAAS,GAAG;AAAA,UACvB,MAAM,IAAI,MAAM,4EAA4E;AAAA,QAChG;AAAA,QACA,OAAO,IAAI,OAAO;AAAA;AAAA,IAE1B,CAAC;AAAA,GACJ;AAAA,EAQY,0BAA6B,aAAa,WAAW,CAAC,MAAM,QAAQ;AAAA,IACxE,SAAS,KAAK,MAAM,GAAG;AAAA,IAC5B,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,cAAc,MAAM,KAAK,MAAM,MAAM;AAAA,IACrG,KAAK,MAAM,CAAC,MAAM,WAAW,KAAK,MAAW,SAAS,MAAM,MAAM,CAAC;AAAA,IACnE,KAAK,MAAM,CAAC,MAAM,WAAW,KAAK,MAAW,SAAS,MAAM,MAAM,CAAC;AAAA,IACnE,KAAK,OAAO,CAAC,OAAO,WAAW,KAAK,MAAW,MAAM,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC;AAAA,GACvG;AAAA,EAIY,+BAAkC,aAAa,gBAAgB,CAAC,MAAM,QAAQ;AAAA,IAClF,cAAc,KAAK,MAAM,GAAG;AAAA,IACjC,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,mBAAmB,MAAM,KAAK,MAAM,MAAM;AAAA,IAC1G,KAAK,KAAK,QAAQ,CAAC,SAAS,SAAS;AAAA,MACjC,IAAI,KAAK,cAAc,YAAY;AAAA,QAC/B,MAAM,IAAS,gBAAgB,KAAK,YAAY,IAAI;AAAA,MACxD;AAAA,MACA,QAAQ,WAAW,CAAC,WAAU;AAAA,QAC1B,IAAI,OAAO,WAAU,UAAU;AAAA,UAC3B,QAAQ,OAAO,KAAK,aAAK,MAAM,QAAO,QAAQ,OAAO,GAAG,CAAC;AAAA,QAC7D,EACK;AAAA,UAED,MAAM,SAAS;AAAA,UACf,IAAI,OAAO;AAAA,YACP,OAAO,WAAW;AAAA,UACtB,OAAO,SAAS,OAAO,OAAO;AAAA,UAC9B,OAAO,UAAU,OAAO,QAAQ,QAAQ;AAAA,UACxC,OAAO,SAAS,OAAO,OAAO;AAAA,UAE9B,QAAQ,OAAO,KAAK,aAAK,MAAM,MAAM,CAAC;AAAA;AAAA;AAAA,MAG9C,MAAM,SAAS,IAAI,UAAU,QAAQ,OAAO,OAAO;AAAA,MACnD,IAAI,kBAAkB,SAAS;AAAA,QAC3B,OAAO,OAAO,KAAK,CAAC,YAAW;AAAA,UAC3B,QAAQ,QAAQ;AAAA,UAChB,QAAQ,WAAW;AAAA,UACnB,OAAO;AAAA,SACV;AAAA,MACL;AAAA,MACA,QAAQ,QAAQ;AAAA,MAChB,QAAQ,WAAW;AAAA,MACnB,OAAO;AAAA;AAAA,GAEd;AAAA,EAOY,8BAAiC,aAAa,eAAe,CAAC,MAAM,QAAQ;AAAA,IAChF,aAAa,KAAK,MAAM,GAAG;AAAA,IAChC,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,kBAAkB,MAAM,KAAK,MAAM,MAAM;AAAA,IACzG,KAAK,SAAS,MAAM,KAAK,KAAK,IAAI;AAAA,GACrC;AAAA,EAOY,mCAAsC,aAAa,oBAAoB,CAAC,MAAM,QAAQ;AAAA,IAC1F,kBAAkB,KAAK,MAAM,GAAG;AAAA,IACrC,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,kBAAkB,MAAM,KAAK,MAAM,MAAM;AAAA,IACzG,KAAK,SAAS,MAAM,KAAK,KAAK,IAAI;AAAA,GACrC;AAAA,EAOY,8BAAiC,aAAa,eAAe,CAAC,MAAM,QAAQ;AAAA,IAChF,aAAa,KAAK,MAAM,GAAG;AAAA,IAChC,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,kBAAkB,MAAM,KAAK,MAAM,MAAM;AAAA,IACzG,KAAK,SAAS,MAAM,KAAK,KAAK,IAAI;AAAA,GACrC;AAAA,EAWY,6BAAgC,aAAa,cAAc,CAAC,MAAM,QAAQ;AAAA,IAC9E,YAAY,KAAK,MAAM,GAAG;AAAA,IAC/B,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,iBAAiB,MAAM,KAAK,MAAM,MAAM;AAAA,IACxG,KAAK,SAAS,MAAM,KAAK,KAAK,IAAI;AAAA,IAClC,KAAK,gBAAgB,KAAK;AAAA,GAC7B;AAAA,EAUY,8BAAiC,aAAa,eAAe,CAAC,MAAM,QAAQ;AAAA,IAChF,aAAa,KAAK,MAAM,GAAG;AAAA,IAChC,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,kBAAkB,MAAM,KAAK,MAAM,MAAM;AAAA,IACzG,KAAK,SAAS,MAAM,KAAK,KAAK,IAAI;AAAA,GACrC;AAAA,EAUY,iCAAoC,aAAa,kBAAkB,CAAC,MAAM,QAAQ;AAAA,IACtF,gBAAgB,KAAK,MAAM,GAAG;AAAA,IACnC,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,qBAAqB,MAAM,KAAK,MAAM,MAAM;AAAA,IAC5G,KAAK,SAAS,MAAM,KAAK,KAAK,IAAI;AAAA,GACrC;AAAA,EAQY,6BAAgC,aAAa,cAAc,CAAC,MAAM,QAAQ;AAAA,IAC9E,YAAY,KAAK,MAAM,GAAG;AAAA,IAC/B,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,iBAAiB,MAAM,KAAK,MAAM,MAAM;AAAA,IACxG,KAAK,SAAS,MAAM,KAAK,KAAK,IAAI;AAAA,GACrC;AAAA,EAOY,2BAA8B,aAAa,YAAY,CAAC,MAAM,QAAQ;AAAA,IAC1E,UAAU,KAAK,MAAM,GAAG;AAAA,IAC7B,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,eAAe,MAAM,KAAK,MAAM,MAAM;AAAA,IACtG,KAAK,SAAS,MAAM,KAAK,KAAK,IAAI;AAAA,IAClC,KAAK,cAAc,KAAK;AAAA,GAC3B;AAAA,EASY,yBAA4B,aAAa,UAAU,CAAC,MAAM,QAAQ;AAAA,IACtE,QAAQ,KAAK,MAAM,GAAG;AAAA,IAC3B,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,aAAa,MAAM,KAAK,MAAM,MAAM;AAAA,GACvG;AAAA,EAIY,0BAA6B,aAAa,WAAW,CAAC,MAAM,QAAQ;AAAA,IACxE,SAAS,KAAK,MAAM,GAAG;AAAA,IAC5B,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,cAAc,MAAM,KAAK,MAAM,MAAM;AAAA,IACrG,KAAK,KAAK,IAAI;AAAA,IACd,KAAK,MAAM,IAAI;AAAA,GAClB;AAAA,EASY,2BAA8B,aAAa,YAAY,CAAC,MAAM,QAAQ;AAAA,IAC/E,QAAQ,KAAK,MAAM,GAAG;AAAA,IACjB,UAAU,KAAK,MAAM,GAAG;AAAA,GAChC;AAAA,EAoBY,gCAAmC,aAAa,iBAAiB,CAAC,MAAM,QAAQ;AAAA,IACzF,QAAQ,KAAK,MAAM,GAAG;AAAA,IACjB,eAAe,KAAK,MAAM,GAAG;AAAA,GACrC;AAAA,EACY,8BAAiC,aAAa,eAAe,CAAC,MAAM,QAAQ;AAAA,IAChF,aAAa,KAAK,MAAM,GAAG;AAAA,IAChC,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,kBAAkB,MAAM,KAAK,MAAM,MAAM;AAAA,IACzG,KAAK,SAAS,MAAM,KAAK,KAAK,IAAI;AAAA,GACrC;AAAA,EAOY,qCAAwC,aAAa,sBAAsB,CAAC,MAAM,QAAQ;AAAA,IAC9F,oBAAoB,KAAK,MAAM,GAAG;AAAA,IACvC,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,yBAAyB,MAAM,KAAK,MAAM,MAAM;AAAA,GACnH;AAAA,EAQY,0BAA6B,aAAa,WAAW,CAAC,MAAM,QAAQ;AAAA,IACxE,SAAS,KAAK,MAAM,GAAG;AAAA,IAC5B,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,cAAc,MAAM,KAAK,MAAM,MAAM;AAAA,IACrG,KAAK,SAAS,MAAM,KAAK,KAAK,IAAI,OAAO;AAAA,GAC5C;AAAA,EAOY,6BAAgC,aAAa,cAAc,CAAC,MAAM,QAAQ;AAAA,IAC9E,YAAY,KAAK,MAAM,GAAG;AAAA,IAC/B,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,iBAAiB,MAAM,KAAK,MAAM,MAAM;AAAA,IACxG,KAAK,SAAS,MAAM,KAAK,KAAK,IAAI;AAAA,GACrC;AAAA,EAOY,8BAAiC,aAAa,eAAe,CAAC,MAAM,QAAQ;AAAA,IAChF,aAAa,KAAK,MAAM,GAAG;AAAA,IAChC,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,kBAAkB,MAAM,KAAK,MAAM,MAAM;AAAA,GAC5G;AAAA,EASY,4BAA+B,aAAa,aAAa,CAAC,MAAM,QAAQ;AAAA,IAC5E,WAAW,KAAK,MAAM,GAAG;AAAA,IAC9B,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtB,KAAK,KAAK,oBAAoB,CAAC,KAAK,MAAM,WAAsB,gBAAgB,MAAM,KAAK,MAAM,MAAM;AAAA,GAC1G;AAAA,EAqBY,YAAgB;AAAA,EAChB,QAAY;AAAA;;;ACpzClB,SAAS,WAAW,CAAC,MAAK;AAAA,EACxB,OAAO;AAAA,IACR,aAAa;AAAA,EACjB,CAAC;AAAA;AAGE,SAAS,WAAW,GAAG;AAAA,EAC1B,OAAY,OAAO,EAAE;AAAA;AAAA,IAtBZ,cAyBF;AAAA;AAAA,EA3BX;AAAA,EAEa,eAAe;AAAA,IACxB,cAAc;AAAA,IACd,SAAS;AAAA,IACT,WAAW;AAAA,IACX,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,eAAe;AAAA,IACf,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,eAAe;AAAA,IACf,QAAQ;AAAA,EACZ;AAAA,GAcC,QAAS,CAAC,wBAAuB,IAC/B,0BAA0B,wBAAwB,CAAC,EAAE;AAAA;;;ACoDxD,SAAS,aAAa,CAAC,QAAQ,eAAe;AAAA,EAC1C,MAAM,UAAU,OAAO;AAAA,EACvB,IAAI,YAAY,gDAAgD;AAAA,IAC5D,OAAO;AAAA,EACX;AAAA,EACA,IAAI,YAAY,2CAA2C;AAAA,IACvD,OAAO;AAAA,EACX;AAAA,EACA,IAAI,YAAY,2CAA2C;AAAA,IACvD,OAAO;AAAA,EACX;AAAA,EAEA,OAAO,iBAAiB;AAAA;AAE5B,SAAS,WAAU,CAAC,KAAK,KAAK;AAAA,EAC1B,IAAI,CAAC,IAAI,WAAW,GAAG,GAAG;AAAA,IACtB,MAAM,IAAI,MAAM,qEAAqE;AAAA,EACzF;AAAA,EACA,MAAM,OAAO,IAAI,MAAM,CAAC,EAAE,MAAM,GAAG,EAAE,OAAO,OAAO;AAAA,EAEnD,IAAI,KAAK,WAAW,GAAG;AAAA,IACnB,OAAO,IAAI;AAAA,EACf;AAAA,EACA,MAAM,UAAU,IAAI,YAAY,kBAAkB,UAAU;AAAA,EAC5D,IAAI,KAAK,OAAO,SAAS;AAAA,IACrB,MAAM,MAAM,KAAK;AAAA,IACjB,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM;AAAA,MACxB,MAAM,IAAI,MAAM,wBAAwB,KAAK;AAAA,IACjD;AAAA,IACA,OAAO,IAAI,KAAK;AAAA,EACpB;AAAA,EACA,MAAM,IAAI,MAAM,wBAAwB,KAAK;AAAA;AAEjD,SAAS,iBAAiB,CAAC,QAAQ,KAAK;AAAA,EAEpC,IAAI,OAAO,QAAQ,WAAW;AAAA,IAE1B,IAAI,OAAO,OAAO,QAAQ,YAAY,OAAO,KAAK,OAAO,GAAG,EAAE,WAAW,GAAG;AAAA,MACxE,OAAO,EAAE,MAAM;AAAA,IACnB;AAAA,IACA,MAAM,IAAI,MAAM,4DAA4D;AAAA,EAChF;AAAA,EACA,IAAI,OAAO,qBAAqB,WAAW;AAAA,IACvC,MAAM,IAAI,MAAM,mCAAmC;AAAA,EACvD;AAAA,EACA,IAAI,OAAO,0BAA0B,WAAW;AAAA,IAC5C,MAAM,IAAI,MAAM,wCAAwC;AAAA,EAC5D;AAAA,EACA,IAAI,OAAO,OAAO,aAAa,OAAO,SAAS,aAAa,OAAO,SAAS,WAAW;AAAA,IACnF,MAAM,IAAI,MAAM,sDAAsD;AAAA,EAC1E;AAAA,EACA,IAAI,OAAO,qBAAqB,aAAa,OAAO,sBAAsB,WAAW;AAAA,IACjF,MAAM,IAAI,MAAM,0DAA0D;AAAA,EAC9E;AAAA,EAEA,IAAI,OAAO,MAAM;AAAA,IACb,MAAM,UAAU,OAAO;AAAA,IACvB,IAAI,IAAI,KAAK,IAAI,OAAO,GAAG;AAAA,MACvB,OAAO,IAAI,KAAK,IAAI,OAAO;AAAA,IAC/B;AAAA,IACA,IAAI,IAAI,WAAW,IAAI,OAAO,GAAG;AAAA,MAE7B,OAAO,EAAE,KAAK,MAAM;AAAA,QAChB,IAAI,CAAC,IAAI,KAAK,IAAI,OAAO,GAAG;AAAA,UACxB,MAAM,IAAI,MAAM,oCAAoC,SAAS;AAAA,QACjE;AAAA,QACA,OAAO,IAAI,KAAK,IAAI,OAAO;AAAA,OAC9B;AAAA,IACL;AAAA,IACA,IAAI,WAAW,IAAI,OAAO;AAAA,IAC1B,MAAM,WAAW,YAAW,SAAS,GAAG;AAAA,IACxC,MAAM,aAAY,cAAc,UAAU,GAAG;AAAA,IAC7C,IAAI,KAAK,IAAI,SAAS,UAAS;AAAA,IAC/B,IAAI,WAAW,OAAO,OAAO;AAAA,IAC7B,OAAO;AAAA,EACX;AAAA,EAEA,IAAI,OAAO,SAAS,WAAW;AAAA,IAC3B,MAAM,aAAa,OAAO;AAAA,IAE1B,IAAI,IAAI,YAAY,iBAChB,OAAO,aAAa,QACpB,WAAW,WAAW,KACtB,WAAW,OAAO,MAAM;AAAA,MACxB,OAAO,EAAE,KAAK;AAAA,IAClB;AAAA,IACA,IAAI,WAAW,WAAW,GAAG;AAAA,MACzB,OAAO,EAAE,MAAM;AAAA,IACnB;AAAA,IACA,IAAI,WAAW,WAAW,GAAG;AAAA,MACzB,OAAO,EAAE,QAAQ,WAAW,EAAE;AAAA,IAClC;AAAA,IAEA,IAAI,WAAW,MAAM,CAAC,MAAM,OAAO,MAAM,QAAQ,GAAG;AAAA,MAChD,OAAO,EAAE,KAAK,UAAU;AAAA,IAC5B;AAAA,IAEA,MAAM,iBAAiB,WAAW,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAAA,IACzD,IAAI,eAAe,SAAS,GAAG;AAAA,MAC3B,OAAO,eAAe;AAAA,IAC1B;AAAA,IACA,OAAO,EAAE,MAAM,CAAC,eAAe,IAAI,eAAe,IAAI,GAAG,eAAe,MAAM,CAAC,CAAC,CAAC;AAAA,EACrF;AAAA,EAEA,IAAI,OAAO,UAAU,WAAW;AAAA,IAC5B,OAAO,EAAE,QAAQ,OAAO,KAAK;AAAA,EACjC;AAAA,EAEA,MAAM,OAAO,OAAO;AAAA,EACpB,IAAI,MAAM,QAAQ,IAAI,GAAG;AAAA,IAErB,MAAM,cAAc,KAAK,IAAI,CAAC,MAAM;AAAA,MAChC,MAAM,aAAa,KAAK,QAAQ,MAAM,EAAE;AAAA,MACxC,OAAO,kBAAkB,YAAY,GAAG;AAAA,KAC3C;AAAA,IACD,IAAI,YAAY,WAAW,GAAG;AAAA,MAC1B,OAAO,EAAE,MAAM;AAAA,IACnB;AAAA,IACA,IAAI,YAAY,WAAW,GAAG;AAAA,MAC1B,OAAO,YAAY;AAAA,IACvB;AAAA,IACA,OAAO,EAAE,MAAM,WAAW;AAAA,EAC9B;AAAA,EACA,IAAI,CAAC,MAAM;AAAA,IAEP,OAAO,EAAE,IAAI;AAAA,EACjB;AAAA,EACA,IAAI;AAAA,EACJ,QAAQ;AAAA,SACC,UAAU;AAAA,MACX,IAAI,eAAe,EAAE,OAAO;AAAA,MAE5B,IAAI,OAAO,QAAQ;AAAA,QACf,MAAM,SAAS,OAAO;AAAA,QAEtB,IAAI,WAAW,SAAS;AAAA,UACpB,eAAe,aAAa,MAAM,EAAE,MAAM,CAAC;AAAA,QAC/C,EACK,SAAI,WAAW,SAAS,WAAW,iBAAiB;AAAA,UACrD,eAAe,aAAa,MAAM,EAAE,IAAI,CAAC;AAAA,QAC7C,EACK,SAAI,WAAW,UAAU,WAAW,QAAQ;AAAA,UAC7C,eAAe,aAAa,MAAM,EAAE,KAAK,CAAC;AAAA,QAC9C,EACK,SAAI,WAAW,aAAa;AAAA,UAC7B,eAAe,aAAa,MAAM,EAAE,IAAI,SAAS,CAAC;AAAA,QACtD,EACK,SAAI,WAAW,QAAQ;AAAA,UACxB,eAAe,aAAa,MAAM,EAAE,IAAI,KAAK,CAAC;AAAA,QAClD,EACK,SAAI,WAAW,QAAQ;AAAA,UACxB,eAAe,aAAa,MAAM,EAAE,IAAI,KAAK,CAAC;AAAA,QAClD,EACK,SAAI,WAAW,YAAY;AAAA,UAC5B,eAAe,aAAa,MAAM,EAAE,IAAI,SAAS,CAAC;AAAA,QACtD,EACK,SAAI,WAAW,QAAQ;AAAA,UACxB,eAAe,aAAa,MAAM,EAAE,KAAK,CAAC;AAAA,QAC9C,EACK,SAAI,WAAW,QAAQ;AAAA,UACxB,eAAe,aAAa,MAAM,EAAE,KAAK,CAAC;AAAA,QAC9C,EACK,SAAI,WAAW,OAAO;AAAA,UACvB,eAAe,aAAa,MAAM,EAAE,IAAI,CAAC;AAAA,QAC7C,EACK,SAAI,WAAW,QAAQ;AAAA,UACxB,eAAe,aAAa,MAAM,EAAE,OAAO,CAAC;AAAA,QAChD,EACK,SAAI,WAAW,WAAW;AAAA,UAC3B,eAAe,aAAa,MAAM,EAAE,OAAO,CAAC;AAAA,QAChD,EACK,SAAI,WAAW,UAAU;AAAA,UAC1B,eAAe,aAAa,MAAM,EAAE,OAAO,CAAC;AAAA,QAChD,EACK,SAAI,WAAW,aAAa;AAAA,UAC7B,eAAe,aAAa,MAAM,EAAE,UAAU,CAAC;AAAA,QACnD,EACK,SAAI,WAAW,QAAQ;AAAA,UACxB,eAAe,aAAa,MAAM,EAAE,KAAK,CAAC;AAAA,QAC9C,EACK,SAAI,WAAW,OAAO;AAAA,UACvB,eAAe,aAAa,MAAM,EAAE,IAAI,CAAC;AAAA,QAC7C,EACK,SAAI,WAAW,SAAS;AAAA,UACzB,eAAe,aAAa,MAAM,EAAE,MAAM,CAAC;AAAA,QAC/C,EACK,SAAI,WAAW,UAAU;AAAA,UAC1B,eAAe,aAAa,MAAM,EAAE,OAAO,CAAC;AAAA,QAChD,EACK,SAAI,WAAW,QAAQ;AAAA,UACxB,eAAe,aAAa,MAAM,EAAE,KAAK,CAAC;AAAA,QAC9C,EACK,SAAI,WAAW,SAAS;AAAA,UACzB,eAAe,aAAa,MAAM,EAAE,MAAM,CAAC;AAAA,QAC/C,EACK,SAAI,WAAW,QAAQ;AAAA,UACxB,eAAe,aAAa,MAAM,EAAE,KAAK,CAAC;AAAA,QAC9C,EACK,SAAI,WAAW,OAAO;AAAA,UACvB,eAAe,aAAa,MAAM,EAAE,IAAI,CAAC;AAAA,QAC7C,EACK,SAAI,WAAW,SAAS;AAAA,UACzB,eAAe,aAAa,MAAM,EAAE,MAAM,CAAC;AAAA,QAC/C;AAAA,MAGJ;AAAA,MAEA,IAAI,OAAO,OAAO,cAAc,UAAU;AAAA,QACtC,eAAe,aAAa,IAAI,OAAO,SAAS;AAAA,MACpD;AAAA,MACA,IAAI,OAAO,OAAO,cAAc,UAAU;AAAA,QACtC,eAAe,aAAa,IAAI,OAAO,SAAS;AAAA,MACpD;AAAA,MACA,IAAI,OAAO,SAAS;AAAA,QAEhB,eAAe,aAAa,MAAM,IAAI,OAAO,OAAO,OAAO,CAAC;AAAA,MAChE;AAAA,MACA,YAAY;AAAA,MACZ;AAAA,IACJ;AAAA,SACK;AAAA,SACA,WAAW;AAAA,MACZ,IAAI,eAAe,SAAS,YAAY,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE,OAAO;AAAA,MAEpE,IAAI,OAAO,OAAO,YAAY,UAAU;AAAA,QACpC,eAAe,aAAa,IAAI,OAAO,OAAO;AAAA,MAClD;AAAA,MACA,IAAI,OAAO,OAAO,YAAY,UAAU;AAAA,QACpC,eAAe,aAAa,IAAI,OAAO,OAAO;AAAA,MAClD;AAAA,MACA,IAAI,OAAO,OAAO,qBAAqB,UAAU;AAAA,QAC7C,eAAe,aAAa,GAAG,OAAO,gBAAgB;AAAA,MAC1D,EACK,SAAI,OAAO,qBAAqB,QAAQ,OAAO,OAAO,YAAY,UAAU;AAAA,QAC7E,eAAe,aAAa,GAAG,OAAO,OAAO;AAAA,MACjD;AAAA,MACA,IAAI,OAAO,OAAO,qBAAqB,UAAU;AAAA,QAC7C,eAAe,aAAa,GAAG,OAAO,gBAAgB;AAAA,MAC1D,EACK,SAAI,OAAO,qBAAqB,QAAQ,OAAO,OAAO,YAAY,UAAU;AAAA,QAC7E,eAAe,aAAa,GAAG,OAAO,OAAO;AAAA,MACjD;AAAA,MACA,IAAI,OAAO,OAAO,eAAe,UAAU;AAAA,QACvC,eAAe,aAAa,WAAW,OAAO,UAAU;AAAA,MAC5D;AAAA,MACA,YAAY;AAAA,MACZ;AAAA,IACJ;AAAA,SACK,WAAW;AAAA,MACZ,YAAY,EAAE,QAAQ;AAAA,MACtB;AAAA,IACJ;AAAA,SACK,QAAQ;AAAA,MACT,YAAY,EAAE,KAAK;AAAA,MACnB;AAAA,IACJ;AAAA,SACK,UAAU;AAAA,MACX,MAAM,QAAQ,CAAC;AAAA,MACf,MAAM,aAAa,OAAO,cAAc,CAAC;AAAA,MACzC,MAAM,cAAc,IAAI,IAAI,OAAO,YAAY,CAAC,CAAC;AAAA,MAEjD,YAAY,KAAK,eAAe,OAAO,QAAQ,UAAU,GAAG;AAAA,QACxD,MAAM,gBAAgB,cAAc,YAAY,GAAG;AAAA,QAEnD,MAAM,OAAO,YAAY,IAAI,GAAG,IAAI,gBAAgB,cAAc,SAAS;AAAA,MAC/E;AAAA,MAEA,IAAI,OAAO,eAAe;AAAA,QACtB,MAAM,YAAY,cAAc,OAAO,eAAe,GAAG;AAAA,QACzD,MAAM,cAAc,OAAO,wBAAwB,OAAO,OAAO,yBAAyB,WACpF,cAAc,OAAO,sBAAsB,GAAG,IAC9C,EAAE,IAAI;AAAA,QAEZ,IAAI,OAAO,KAAK,KAAK,EAAE,WAAW,GAAG;AAAA,UACjC,YAAY,EAAE,OAAO,WAAW,WAAW;AAAA,UAC3C;AAAA,QACJ;AAAA,QAEA,MAAM,gBAAe,EAAE,OAAO,KAAK,EAAE,YAAY;AAAA,QACjD,MAAM,eAAe,EAAE,YAAY,WAAW,WAAW;AAAA,QACzD,YAAY,EAAE,aAAa,eAAc,YAAY;AAAA,QACrD;AAAA,MACJ;AAAA,MAEA,IAAI,OAAO,mBAAmB;AAAA,QAG1B,MAAM,eAAe,OAAO;AAAA,QAC5B,MAAM,cAAc,OAAO,KAAK,YAAY;AAAA,QAC5C,MAAM,eAAe,CAAC;AAAA,QACtB,WAAW,WAAW,aAAa;AAAA,UAC/B,MAAM,eAAe,cAAc,aAAa,UAAU,GAAG;AAAA,UAC7D,MAAM,YAAY,EAAE,OAAO,EAAE,MAAM,IAAI,OAAO,OAAO,CAAC;AAAA,UACtD,aAAa,KAAK,EAAE,YAAY,WAAW,YAAY,CAAC;AAAA,QAC5D;AAAA,QAEA,MAAM,qBAAqB,CAAC;AAAA,QAC5B,IAAI,OAAO,KAAK,KAAK,EAAE,SAAS,GAAG;AAAA,UAE/B,mBAAmB,KAAK,EAAE,OAAO,KAAK,EAAE,YAAY,CAAC;AAAA,QACzD;AAAA,QACA,mBAAmB,KAAK,GAAG,YAAY;AAAA,QACvC,IAAI,mBAAmB,WAAW,GAAG;AAAA,UACjC,YAAY,EAAE,OAAO,CAAC,CAAC,EAAE,YAAY;AAAA,QACzC,EACK,SAAI,mBAAmB,WAAW,GAAG;AAAA,UACtC,YAAY,mBAAmB;AAAA,QACnC,EACK;AAAA,UAED,IAAI,SAAS,EAAE,aAAa,mBAAmB,IAAI,mBAAmB,EAAE;AAAA,UACxE,SAAS,IAAI,EAAG,IAAI,mBAAmB,QAAQ,KAAK;AAAA,YAChD,SAAS,EAAE,aAAa,QAAQ,mBAAmB,EAAE;AAAA,UACzD;AAAA,UACA,YAAY;AAAA;AAAA,QAEhB;AAAA,MACJ;AAAA,MAIA,MAAM,eAAe,EAAE,OAAO,KAAK;AAAA,MACnC,IAAI,OAAO,yBAAyB,OAAO;AAAA,QAEvC,YAAY,aAAa,OAAO;AAAA,MACpC,EACK,SAAI,OAAO,OAAO,yBAAyB,UAAU;AAAA,QAEtD,YAAY,aAAa,SAAS,cAAc,OAAO,sBAAsB,GAAG,CAAC;AAAA,MACrF,EACK;AAAA,QAED,YAAY,aAAa,YAAY;AAAA;AAAA,MAEzC;AAAA,IACJ;AAAA,SACK,SAAS;AAAA,MAIV,MAAM,cAAc,OAAO;AAAA,MAC3B,MAAM,QAAQ,OAAO;AAAA,MACrB,IAAI,eAAe,MAAM,QAAQ,WAAW,GAAG;AAAA,QAE3C,MAAM,aAAa,YAAY,IAAI,CAAC,SAAS,cAAc,MAAM,GAAG,CAAC;AAAA,QACrE,MAAM,OAAO,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,IACjE,cAAc,OAAO,GAAG,IACxB;AAAA,QACN,IAAI,MAAM;AAAA,UACN,YAAY,EAAE,MAAM,UAAU,EAAE,KAAK,IAAI;AAAA,QAC7C,EACK;AAAA,UACD,YAAY,EAAE,MAAM,UAAU;AAAA;AAAA,QAGlC,IAAI,OAAO,OAAO,aAAa,UAAU;AAAA,UACrC,YAAY,UAAU,MAAM,EAAE,UAAU,OAAO,QAAQ,CAAC;AAAA,QAC5D;AAAA,QACA,IAAI,OAAO,OAAO,aAAa,UAAU;AAAA,UACrC,YAAY,UAAU,MAAM,EAAE,UAAU,OAAO,QAAQ,CAAC;AAAA,QAC5D;AAAA,MACJ,EACK,SAAI,MAAM,QAAQ,KAAK,GAAG;AAAA,QAE3B,MAAM,aAAa,MAAM,IAAI,CAAC,SAAS,cAAc,MAAM,GAAG,CAAC;AAAA,QAC/D,MAAM,OAAO,OAAO,mBAAmB,OAAO,OAAO,oBAAoB,WACnE,cAAc,OAAO,iBAAiB,GAAG,IACzC;AAAA,QACN,IAAI,MAAM;AAAA,UACN,YAAY,EAAE,MAAM,UAAU,EAAE,KAAK,IAAI;AAAA,QAC7C,EACK;AAAA,UACD,YAAY,EAAE,MAAM,UAAU;AAAA;AAAA,QAGlC,IAAI,OAAO,OAAO,aAAa,UAAU;AAAA,UACrC,YAAY,UAAU,MAAM,EAAE,UAAU,OAAO,QAAQ,CAAC;AAAA,QAC5D;AAAA,QACA,IAAI,OAAO,OAAO,aAAa,UAAU;AAAA,UACrC,YAAY,UAAU,MAAM,EAAE,UAAU,OAAO,QAAQ,CAAC;AAAA,QAC5D;AAAA,MACJ,EACK,SAAI,UAAU,WAAW;AAAA,QAE1B,MAAM,UAAU,cAAc,OAAO,GAAG;AAAA,QACxC,IAAI,cAAc,EAAE,MAAM,OAAO;AAAA,QAEjC,IAAI,OAAO,OAAO,aAAa,UAAU;AAAA,UACrC,cAAc,YAAY,IAAI,OAAO,QAAQ;AAAA,QACjD;AAAA,QACA,IAAI,OAAO,OAAO,aAAa,UAAU;AAAA,UACrC,cAAc,YAAY,IAAI,OAAO,QAAQ;AAAA,QACjD;AAAA,QACA,YAAY;AAAA,MAChB,EACK;AAAA,QAED,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC;AAAA;AAAA,MAE/B;AAAA,IACJ;AAAA;AAAA,MAEI,MAAM,IAAI,MAAM,qBAAqB,MAAM;AAAA;AAAA,EAEnD,OAAO;AAAA;AAEX,SAAS,aAAa,CAAC,QAAQ,KAAK;AAAA,EAChC,IAAI,OAAO,WAAW,WAAW;AAAA,IAC7B,OAAO,SAAS,EAAE,IAAI,IAAI,EAAE,MAAM;AAAA,EACtC;AAAA,EAEA,IAAI,aAAa,kBAAkB,QAAQ,GAAG;AAAA,EAC9C,MAAM,kBAAkB,OAAO,QAAQ,OAAO,SAAS,aAAa,OAAO,UAAU;AAAA,EAGrF,IAAI,OAAO,SAAS,MAAM,QAAQ,OAAO,KAAK,GAAG;AAAA,IAC7C,MAAM,UAAU,OAAO,MAAM,IAAI,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAAA,IAC7D,MAAM,aAAa,EAAE,MAAM,OAAO;AAAA,IAClC,aAAa,kBAAkB,EAAE,aAAa,YAAY,UAAU,IAAI;AAAA,EAC5E;AAAA,EAEA,IAAI,OAAO,SAAS,MAAM,QAAQ,OAAO,KAAK,GAAG;AAAA,IAC7C,MAAM,UAAU,OAAO,MAAM,IAAI,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAAA,IAC7D,MAAM,aAAa,EAAE,IAAI,OAAO;AAAA,IAChC,aAAa,kBAAkB,EAAE,aAAa,YAAY,UAAU,IAAI;AAAA,EAC5E;AAAA,EAEA,IAAI,OAAO,SAAS,MAAM,QAAQ,OAAO,KAAK,GAAG;AAAA,IAC7C,IAAI,OAAO,MAAM,WAAW,GAAG;AAAA,MAC3B,aAAa,kBAAkB,aAAa,EAAE,IAAI;AAAA,IACtD,EACK;AAAA,MACD,IAAI,SAAS,kBAAkB,aAAa,cAAc,OAAO,MAAM,IAAI,GAAG;AAAA,MAC9E,MAAM,WAAW,kBAAkB,IAAI;AAAA,MACvC,SAAS,IAAI,SAAU,IAAI,OAAO,MAAM,QAAQ,KAAK;AAAA,QACjD,SAAS,EAAE,aAAa,QAAQ,cAAc,OAAO,MAAM,IAAI,GAAG,CAAC;AAAA,MACvE;AAAA,MACA,aAAa;AAAA;AAAA,EAErB;AAAA,EAEA,IAAI,OAAO,aAAa,QAAQ,IAAI,YAAY,eAAe;AAAA,IAC3D,aAAa,EAAE,SAAS,UAAU;AAAA,EACtC;AAAA,EAEA,IAAI,OAAO,aAAa,MAAM;AAAA,IAC1B,aAAa,EAAE,SAAS,UAAU;AAAA,EACtC;AAAA,EAIA,IAAI,OAAO,YAAY,WAAW;AAAA,IAC9B,aAAa,WAAW,QAAQ,OAAO,OAAO;AAAA,EAClD;AAAA,EAIA,MAAM,YAAY,CAAC;AAAA,EACnB,MAAM,mBAAmB,CAAC,OAAO,MAAM,YAAY,WAAW,eAAe,eAAe,gBAAgB;AAAA,EAC5G,WAAW,OAAO,kBAAkB;AAAA,IAChC,IAAI,OAAO,QAAQ;AAAA,MACf,UAAU,OAAO,OAAO;AAAA,IAC5B;AAAA,EACJ;AAAA,EACA,MAAM,sBAAsB,CAAC,mBAAmB,oBAAoB,eAAe;AAAA,EACnF,WAAW,OAAO,qBAAqB;AAAA,IACnC,IAAI,OAAO,QAAQ;AAAA,MACf,UAAU,OAAO,OAAO;AAAA,IAC5B;AAAA,EACJ;AAAA,EACA,WAAW,OAAO,OAAO,KAAK,MAAM,GAAG;AAAA,IACnC,IAAI,CAAC,gBAAgB,IAAI,GAAG,GAAG;AAAA,MAC3B,UAAU,OAAO,OAAO;AAAA,IAC5B;AAAA,EACJ;AAAA,EACA,IAAI,OAAO,KAAK,SAAS,EAAE,SAAS,GAAG;AAAA,IACnC,IAAI,SAAS,IAAI,YAAY,SAAS;AAAA,EAC1C;AAAA,EAIA,IAAI,OAAO,aAAa;AAAA,IACpB,aAAa,WAAW,SAAS,OAAO,WAAW;AAAA,EACvD;AAAA,EACA,OAAO;AAAA;AAIJ,SAAS,cAAc,CAAC,QAAQ,QAAQ;AAAA,EAE3C,IAAI,OAAO,WAAW,WAAW;AAAA,IAC7B,OAAO,SAAS,EAAE,IAAI,IAAI,EAAE,MAAM;AAAA,EACtC;AAAA,EAKA,IAAI;AAAA,EACJ,IAAI;AAAA,IACA,aAAa,KAAK,MAAM,KAAK,UAAU,MAAM,CAAC;AAAA,IAElD,MAAM;AAAA,IACF,MAAM,IAAI,MAAM,gGAAgG;AAAA;AAAA,EAEpH,MAAM,WAAU,cAAc,YAAY,QAAQ,aAAa;AAAA,EAC/D,MAAM,OAAQ,WAAW,SAAS,WAAW,eAAe,CAAC;AAAA,EAC7D,MAAM,MAAM;AAAA,IACR;AAAA,IACA;AAAA,IACA,MAAM,IAAI;AAAA,IACV,YAAY,IAAI;AAAA,IAChB,YAAY;AAAA,IACZ,UAAU,QAAQ,YAAY;AAAA,EAClC;AAAA,EACA,OAAO,cAAc,YAAY,GAAG;AAAA;AAAA,IAhlBlC,GAMA;AAAA;AAAA,EAXN;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEM,IAAI;AAAA,OACH;AAAA,OACA;AAAA,IACH,KAAK;AAAA,EACT;AAAA,EAEM,kCAAgC,IAAI,IAAI;AAAA,IAE1C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IAEA;AAAA,IACA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IAEA;AAAA,IACA;AAAA,EACJ,CAAC;AAAA;;;;;;;;;;;AC/EM,SAAS,OAAM,CAAC,QAAQ;AAAA,EAC3B,OAAY,eAAuB,WAAW,MAAM;AAAA;AAEjD,SAAS,OAAM,CAAC,QAAQ;AAAA,EAC3B,OAAY,eAAuB,WAAW,MAAM;AAAA;AAEjD,SAAS,QAAO,CAAC,QAAQ;AAAA,EAC5B,OAAY,gBAAwB,YAAY,MAAM;AAAA;AAEnD,SAAS,OAAM,CAAC,QAAQ;AAAA,EAC3B,OAAY,eAAuB,WAAW,MAAM;AAAA;AAEjD,SAAS,KAAI,CAAC,QAAQ;AAAA,EACzB,OAAY,aAAqB,SAAS,MAAM;AAAA;AAAA;AAAA,EAfpD;AAAA,EACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECDA;AAAA,EAOA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EAlBA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAIA,OAAO,WAAG,CAAC;AAAA;;;;ECTX;AAAA,EACA;AAAA;;;ICMa,cAYA,mBAeA,oBAMA,sBAQA,mBAOA,oBAcA,YAAY,SACZ,cAAc,WAGd,aAAa,eAGb,YAAY;AAAA;AAAA,EA5EzB;AAAA,EAOa,eAAe,iBAAE,OAAO;AAAA,IACnC,KAAK,iBAAE,OAAO,EAAE,SAAS,gCAAgC;AAAA,IACzD,SAAS,iBAAE,OAAO,EAAE,SAAS,sCAAsC;AAAA,IACnE,SAAS,iBAAE,OAAO,EAAE,SAAS,oDAAoD;AAAA,IACjF,QAAQ,iBAAE,OAAO,EAAE,SAAS,mCAAmC;AAAA,IAC/D,KAAK,iBAAE,OAAO,EAAE,SAAS,8BAA8B;AAAA,IACvD,OAAO,iBAAE,OAAO,EAAE,SAAS,EAAE,SAAS,mCAAmC;AAAA,IAGzE,KAAK,iBAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,wCAAwC;AAAA,EACzF,CAAC;AAAA,EAEY,oBAAoB,iBAAE,OAAO;AAAA,IACxC,SAAS,iBAAE,OAAO,EAAE,SAAS,0BAA0B;AAAA,IACvD,OAAO,iBAAE,OAAO,EAAE,SAAS,sCAAsC;AAAA,IACjE,SAAS,iBAAE,MAAM,YAAY,EAAE,SAAS,0BAA0B;AAAA,IAKlE,OAAO,iBAAE,OAAO,EAAE,SAAS,EAAE,SAAS,kDAAkD;AAAA,IACxF,kBAAkB,iBACf,MAAM,iBAAE,OAAO,CAAC,EAChB,SAAS,EACT,SAAS,kDAAkD;AAAA,EAChE,CAAC;AAAA,EAEY,qBAAqB,iBAAE,OAAO;AAAA,IACzC,SAAS,iBAAE,OAAO,EAAE,SAAS,kBAAkB;AAAA,IAC/C,SAAS,iBAAE,MAAM,YAAY,EAAE,SAAS,8BAA8B;AAAA,IACtE,QAAQ,iBAAE,OAAO,EAAE,SAAS,2CAA2C;AAAA,EACzE,CAAC;AAAA,EAEY,uBAAuB,iBAAE,OAAO;AAAA,IAC3C,IAAI,iBAAE,QAAQ;AAAA,IACd,MAAM,iBAAE,OAAO,EAAE,SAAS,kBAAkB;AAAA,EAC9C,CAAC;AAAA,EAKY,oBAAoB,iBAAE,OAAO;AAAA,IACxC,MAAM,iBAAE,OAAO,EAAE,SAAS,6CAA6C;AAAA,IACvE,SAAS,iBAAE,OAAO,EAAE,SAAS,0BAA0B;AAAA,IACvD,OAAO,iBAAE,OAAO,EAAE,SAAS,4CAA4C;AAAA,IACvE,UAAU,iBAAE,OAAO,EAAE,SAAS,EAAE,SAAS,iDAAiD;AAAA,EAC5F,CAAC;AAAA,EAEY,qBAAqB,iBAAE,OAAO;AAAA,IACzC,SAAS,iBAAE,OAAO,EAAE,SAAS,uBAAuB;AAAA,IACpD,OAAO,iBAAE,OAAO,EAAE,SAAS,2CAA2C;AAAA,EACxE,CAAC;AAAA;;;AC9CD,SAAS,OAAO,CAAC,IAAc,MAA0B;AAAA,EACvD,MAAM,MAAM,GACT,MAAM,iEAAiE,EACvE,IAAI,IAAG;AAAA,EACV,OAAO,OAAO,EAAE,aAAa,GAAG,aAAa,GAAG,OAAO,KAAK;AAAA;AAG9D,SAAS,OAAO,CAAC,IAAc,MAAa,GAAuD;AAAA,EACjG,GAAG,MACD,0KACF,EAAE,IAAI,MAAK,EAAE,aAAa,EAAE,WAAW;AAAA;AAyBzC,eAAsB,YAAY,CAChC,IACA,MACA,OAA0B,CAAC,GACN;AAAA,EAErB,MAAM,IAAc,OAAO,SAAS,WAAW,EAAE,OAAO,KAAK,IAAI;AAAA,EACjE,MAAM,OAAO,UAAU,EAAE;AAAA,EACzB,MAAM,OAAO,QAAQ,IAAI,IAAG;AAAA,EAC5B,MAAM,SAAS,EAAE,SAAS,KAAK,SAAS;AAAA,EACxC,MAAM,SAAS,gBAAgB,IAAI,KAAK,WAAW;AAAA,EAEnD,MAAM,UAAkC,EAAE,gBAAgB,mBAAmB;AAAA,EAC7E,IAAI;AAAA,IAAQ,QAAQ,gBAAgB,UAAU;AAAA,EAC9C,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,WAAW,IAAG,GAAG;AAAA,IAC/C,QAAQ;AAAA,IACR;AAAA,IACA,MAAM,KAAK,UAAU;AAAA,MACnB,SAAS;AAAA,MACT,OAAO,KAAK;AAAA,MACZ,SAAS,OAAO;AAAA,SACZ,EAAE,aAAa,OAAO,EAAE,OAAO,EAAE,UAAU,IAAI,CAAC;AAAA,SAChD,EAAE,iBAAiB,SAAS,EAAE,kBAAkB,EAAE,gBAAgB,IAAI,CAAC;AAAA,IAC7E,CAAC;AAAA,EACH,CAAC;AAAA,EACD,IAAI,CAAC,IAAI;AAAA,IACP,MAAM,IAAI,QACR,IAAI,WAAW,OAAO,IAAI,WAAW,MAAM,SAAS,WACpD,gBAAgB,IAAI,UAAU,MAAM,IAAI,KAAK,GAC/C;AAAA,EAEF,MAAM,OAAQ,MAAM,IAAI,KAAK;AAAA,EAI7B,MAAM,SAAS,OAAO,IAAI,KAAK,WAAW,CAAC,CAAC;AAAA,EAC5C,QAAQ,IAAI,MAAK,EAAE,aAAa,KAAK,QAAQ,aAAa,OAAO,OAAO,CAAC;AAAA,EAEzE,OAAO,EAAE,QAAQ,OAAO,QAAQ,QAAQ,OAAO;AAAA;AAAA;AAAA,EApFjD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;;;ACwBA,MAAM,UAAU;AAAA,EACd,WAAW,GAAG,aAAa,iBAAiB,cAAc,SAAS,QAAQ,OAAO,SAAS,eAAe;AAAA,IACxG,IAAI,eAAe;AAAA,MAAM,MAAM,IAAI,UAAU,kCAAkC;AAAA,IAC/E,IAAI,mBAAmB;AAAA,MAAM,MAAM,IAAI,UAAU,sCAAsC;AAAA,IACvF,KAAK,cAAc;AAAA,IACnB,KAAK,kBAAkB;AAAA,IACvB,KAAK,eAAe;AAAA,IACpB,KAAK,UAAU;AAAA,IACf,KAAK,SAAS;AAAA,IACd,KAAK,QAAQ,SAAS,IAAI;AAAA,IAC1B,KAAK,UAAU,WAAW,OAAO,UAAU;AAAA,IAC3C,KAAK,cAAc,eAAe;AAAA;AAAA,OAE9B,KAAI,CAAC,OAAO,MAAM;AAAA,IACtB,IAAI,iBAAiB,SAAS;AAAA,MAC5B,QAAQ,QAAQ,WAAK,SAAS,SAAS;AAAA,MACvC,OAAO,OAAO,OAAO,EAAE,QAAQ,WAAK,QAAQ,GAAG,IAAI;AAAA,MACnD,IAAI,KAAK,QAAQ,QAAQ,QAAQ,IAAI,cAAc,GAAG;AAAA,QACpD,KAAK,OAAO,QAAQ,QAAQ,QAAQ,IAAI,sBAAsB,IAAI,OAAO,MAAM,MAAM,MAAM,EAAE,YAAY;AAAA,MAC3G;AAAA,MACA,QAAQ;AAAA,IACV;AAAA,IACA,MAAM,SAAS,IAAI,YAAY,OAAO,OAAO,EAAE,KAAK,MAAM,SAAS,EAAE,GAAG,MAAM,MAAM,QAAQ,KAAK,GAAG,CAAC;AAAA,IACrG,MAAM,SAAS,OAAO,OAAO,CAAC,GAAG,MAAM,MAAM,OAAO,KAAK,CAAC;AAAA,IAC1D,OAAO,OAAO;AAAA,IACd,IAAI;AAAA,MACF,OAAO,IAAI,QAAQ,OAAO,IAAI,SAAS,GAAG,MAAM;AAAA,MAChD,OAAO,GAAG;AAAA,MACV,IAAI,aAAa,WAAW;AAAA,QAC1B,OAAO,IAAI,QAAQ,OAAO,IAAI,SAAS,GAAG,OAAO,OAAO,EAAE,QAAQ,OAAO,GAAG,MAAM,CAAC;AAAA,MACrF;AAAA,MACA,MAAM;AAAA;AAAA;AAAA,OAGJ,MAAK,CAAC,OAAO,MAAM;AAAA,IACvB,SAAS,IAAI,EAAG,KAAK,KAAK,SAAS,KAAK;AAAA,MACtC,MAAM,UAAU,MAAM,MAAM,KAAK,KAAK,OAAO,IAAI,CAAC;AAAA,MAClD,IAAI,MAAM,KAAK,SAAS;AAAA,QACtB,OAAO;AAAA,MACT;AAAA,MACA,MAAM,MAAM,MAAM;AAAA,MAClB,IAAI,IAAI,SAAS,OAAO,IAAI,WAAW,KAAK;AAAA,QAC1C,OAAO;AAAA,MACT;AAAA,MACA,MAAM,IAAI,QAAQ,aAAW,WAAW,SAAS,KAAK,OAAO,IAAI,KAAK,cAAc,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC;AAAA,IACrG;AAAA,IACA,MAAM,IAAI,MAAM,2DAA2D;AAAA;AAE/E;AAAA;AACA,MAAM,YAAY;AAAA,EAChB,WAAW,GAAG,QAAQ,WAAK,SAAS,MAAM,aAAa,iBAAiB,cAAc,SAAS,QAAQ,OAAO,qBAAU,WAAW,oBAAoB,YAAY,gBAAgB;AAAA,IACjL,IAAI,QAAO;AAAA,MAAM,MAAM,IAAI,UAAU,0BAA0B;AAAA,IAC/D,IAAI,eAAe;AAAA,MAAM,MAAM,IAAI,UAAU,kCAAkC;AAAA,IAC/E,IAAI,mBAAmB;AAAA,MAAM,MAAM,IAAI,UAAU,sCAAsC;AAAA,IACvF,KAAK,SAAS,WAAW,OAAO,SAAS;AAAA,IACzC,KAAK,MAAM,IAAI,IAAI,IAAG;AAAA,IACtB,KAAK,UAAU,IAAI,QAAQ,WAAW,CAAC,CAAC;AAAA,IACxC,KAAK,OAAO;AAAA,IACZ,KAAK,cAAc;AAAA,IACnB,KAAK,kBAAkB;AAAA,IACvB,KAAK,eAAe;AAAA,IACpB,IAAI,gBAAgB;AAAA,IACpB,IAAI,CAAC,WAAW,CAAC,QAAQ;AAAA,MAC7B,CAAC,gBAAgB,aAAa,IAAI,mBAAmB,KAAK,KAAK,KAAK,OAAO;AAAA,IACvE;AAAA,IACA,KAAK,UAAU,WAAW,kBAAkB;AAAA,IAC5C,KAAK,SAAS,UAAU,iBAAiB;AAAA,IACzC,KAAK,QAAQ,SAAS,IAAI;AAAA,IAC1B,KAAK,WAAW,aAAY,IAAI,KAAK,EAAE,YAAY,EAAE,QAAQ,iBAAiB,EAAE;AAAA,IAChF,KAAK,YAAY;AAAA,IACjB,KAAK,qBAAqB,sBAAsB,KAAK,YAAY;AAAA,IACjE,KAAK,QAAQ,OAAO,MAAM;AAAA,IAC1B,IAAI,KAAK,YAAY,QAAQ,CAAC,KAAK,aAAa,CAAC,KAAK,QAAQ,IAAI,sBAAsB,GAAG;AAAA,MACzF,KAAK,QAAQ,IAAI,wBAAwB,kBAAkB;AAAA,IAC7D;AAAA,IACA,MAAM,SAAS,KAAK,YAAY,KAAK,IAAI,eAAe,KAAK;AAAA,IAC7D,OAAO,IAAI,cAAc,KAAK,QAAQ;AAAA,IACtC,IAAI,KAAK,gBAAgB,CAAC,KAAK,oBAAoB;AAAA,MACjD,OAAO,IAAI,wBAAwB,KAAK,YAAY;AAAA,IACtD;AAAA,IACA,KAAK,kBAAkB,CAAC,QAAQ,GAAG,KAAK,QAAQ,KAAK,CAAC,EACnD,OAAO,YAAU,cAAc,CAAC,mBAAmB,IAAI,MAAM,CAAC,EAC9D,KAAK;AAAA,IACR,KAAK,gBAAgB,KAAK,gBAAgB,KAAK,GAAG;AAAA,IAClD,KAAK,mBAAmB,KAAK,gBAC1B,IAAI,YAAU,SAAS,OAAO,WAAW,SAAS,KAAK,IAAI,QAAQ,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,QAAQ,QAAQ,GAAG,EAAE,EACxH,KAAK;AAAA,CAAI;AAAA,IACZ,KAAK,mBAAmB,CAAC,KAAK,SAAS,MAAM,GAAG,CAAC,GAAG,KAAK,QAAQ,KAAK,SAAS,cAAc,EAAE,KAAK,GAAG;AAAA,IACvG,IAAI,KAAK,WAAW;AAAA,MAClB,IAAI,KAAK,YAAY,QAAQ,CAAC,OAAO,IAAI,eAAe,GAAG;AAAA,QACzD,OAAO,IAAI,iBAAiB,OAAO;AAAA,MACrC;AAAA,MACA,OAAO,IAAI,mBAAmB,kBAAkB;AAAA,MAChD,OAAO,IAAI,oBAAoB,KAAK,cAAc,MAAM,KAAK,gBAAgB;AAAA,MAC7E,OAAO,IAAI,uBAAuB,KAAK,aAAa;AAAA,IACtD;AAAA,IACA,IAAI,KAAK,YAAY,MAAM;AAAA,MACzB,IAAI;AAAA,QACF,KAAK,cAAc,mBAAmB,KAAK,IAAI,SAAS,QAAQ,OAAO,GAAG,CAAC;AAAA,QAC3E,OAAO,GAAG;AAAA,QACV,KAAK,cAAc,KAAK,IAAI;AAAA;AAAA,IAEhC,EAAO;AAAA,MACL,KAAK,cAAc,KAAK,IAAI,SAAS,QAAQ,QAAQ,GAAG;AAAA;AAAA,IAE1D,IAAI,CAAC,cAAc;AAAA,MACjB,KAAK,cAAc,mBAAmB,KAAK,WAAW,EAAE,QAAQ,QAAQ,GAAG;AAAA,IAC7E;AAAA,IACA,KAAK,cAAc,cAAc,KAAK,WAAW;AAAA,IACjD,MAAM,WAAW,IAAI;AAAA,IACrB,KAAK,gBAAgB,CAAC,GAAG,KAAK,IAAI,YAAY,EAC3C,OAAO,EAAE,OAAO;AAAA,MACf,IAAI,CAAC;AAAA,QAAG,OAAO;AAAA,MACf,IAAI,KAAK,YAAY,MAAM;AAAA,QACzB,IAAI,SAAS,IAAI,CAAC;AAAA,UAAG,OAAO;AAAA,QAC5B,SAAS,IAAI,CAAC;AAAA,MAChB;AAAA,MACA,OAAO;AAAA,KACR,EACA,IAAI,UAAQ,KAAK,IAAI,OAAK,cAAc,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAC/D,KAAK,EAAE,IAAI,MAAM,IAAI,QAAQ,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,CAAC,EACxF,IAAI,UAAQ,KAAK,KAAK,GAAG,CAAC,EAC1B,KAAK,GAAG;AAAA;AAAA,OAEP,KAAI,GAAG;AAAA,IACX,IAAI,KAAK,WAAW;AAAA,MAClB,KAAK,IAAI,aAAa,IAAI,mBAAmB,MAAM,KAAK,UAAU,CAAC;AAAA,MACnE,IAAI,KAAK,gBAAgB,KAAK,oBAAoB;AAAA,QAChD,KAAK,IAAI,aAAa,IAAI,wBAAwB,KAAK,YAAY;AAAA,MACrE;AAAA,IACF,EAAO;AAAA,MACL,KAAK,QAAQ,IAAI,iBAAiB,MAAM,KAAK,WAAW,CAAC;AAAA;AAAA,IAE3D,OAAO;AAAA,MACL,QAAQ,KAAK;AAAA,MACb,KAAK,KAAK;AAAA,MACV,SAAS,KAAK;AAAA,MACd,MAAM,KAAK;AAAA,IACb;AAAA;AAAA,OAEI,WAAU,GAAG;AAAA,IACjB,OAAO;AAAA,MACL,iCAAiC,KAAK,cAAc,MAAM,KAAK;AAAA,MAC/D,mBAAmB,KAAK;AAAA,MACxB,eAAgB,MAAM,KAAK,UAAU;AAAA,IACvC,EAAE,KAAK,IAAI;AAAA;AAAA,OAEP,UAAS,GAAG;AAAA,IAChB,MAAM,QAAO,KAAK,SAAS,MAAM,GAAG,CAAC;AAAA,IACrC,MAAM,WAAW,CAAC,KAAK,iBAAiB,OAAM,KAAK,QAAQ,KAAK,OAAO,EAAE,KAAK;AAAA,IAC9E,IAAI,eAAe,KAAK,MAAM,IAAI,QAAQ;AAAA,IAC1C,IAAI,CAAC,cAAc;AAAA,MACjB,MAAM,QAAQ,MAAM,KAAK,SAAS,KAAK,iBAAiB,KAAI;AAAA,MAC5D,MAAM,UAAU,MAAM,KAAK,OAAO,KAAK,MAAM;AAAA,MAC7C,MAAM,WAAW,MAAM,KAAK,SAAS,KAAK,OAAO;AAAA,MACjD,eAAe,MAAM,KAAK,UAAU,cAAc;AAAA,MAClD,KAAK,MAAM,IAAI,UAAU,YAAY;AAAA,IACvC;AAAA,IACA,OAAO,QAAQ,MAAM,KAAK,cAAc,MAAM,KAAK,aAAa,CAAC,CAAC;AAAA;AAAA,OAE9D,aAAY,GAAG;AAAA,IACnB,OAAO;AAAA,MACL;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,MACL,QAAQ,MAAM,MAAK,MAAM,KAAK,gBAAgB,CAAC,CAAC;AAAA,IAClD,EAAE,KAAK;AAAA,CAAI;AAAA;AAAA,OAEP,gBAAe,GAAG;AAAA,IACtB,OAAO;AAAA,MACL,KAAK,OAAO,YAAY;AAAA,MACxB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK,mBAAmB;AAAA;AAAA,MACxB,KAAK;AAAA,MACL,MAAM,KAAK,YAAY;AAAA,IACzB,EAAE,KAAK;AAAA,CAAI;AAAA;AAAA,OAEP,YAAW,GAAG;AAAA,IAClB,IAAI,aAAa,KAAK,QAAQ,IAAI,sBAAsB,MAAM,KAAK,YAAY,QAAQ,KAAK,YAAY,qBAAqB;AAAA,IAC7H,IAAI,cAAc,MAAM;AAAA,MACtB,IAAI,KAAK,QAAQ,OAAO,KAAK,SAAS,YAAY,EAAE,gBAAgB,KAAK,OAAO;AAAA,QAC9E,MAAM,IAAI,MAAM,2GAA2G;AAAA,MAC7H;AAAA,MACA,aAAa,QAAQ,MAAM,MAAK,KAAK,QAAQ,EAAE,CAAC;AAAA,IAClD;AAAA,IACA,OAAO;AAAA;AAEX;AACA,eAAe,IAAI,CAAC,KAAK,SAAQ;AAAA,EAC/B,MAAM,YAAY,MAAM,OAAO,OAAO,UACpC,OACA,OAAO,QAAQ,WAAW,QAAQ,OAAO,GAAG,IAAI,KAChD,EAAE,MAAM,QAAQ,MAAM,EAAE,MAAM,UAAU,EAAE,GAC1C,OACA,CAAC,MAAM,CACT;AAAA,EACA,OAAO,OAAO,OAAO,KAAK,QAAQ,WAAW,QAAQ,OAAO,OAAM,CAAC;AAAA;AAErE,eAAe,KAAI,CAAC,SAAS;AAAA,EAC3B,OAAO,OAAO,OAAO,OAAO,WAAW,OAAO,YAAY,WAAW,QAAQ,OAAO,OAAO,IAAI,OAAO;AAAA;AAGxG,SAAS,OAAO,CAAC,aAAa;AAAA,EAC5B,MAAM,SAAS,IAAI,WAAW,WAAW;AAAA,EACzC,IAAI,MAAM;AAAA,EACV,SAAS,MAAM,EAAG,MAAM,OAAO,QAAQ,OAAO;AAAA,IAC5C,MAAM,IAAI,OAAO;AAAA,IACjB,OAAO,UAAW,MAAM,IAAK;AAAA,IAC7B,OAAO,UAAU,IAAI;AAAA,EACvB;AAAA,EACA,OAAO;AAAA;AAET,SAAS,aAAa,CAAC,eAAe;AAAA,EACpC,OAAO,cAAc,QAAQ,YAAY,OAAK,MAAM,EAAE,WAAW,CAAC,EAAE,SAAS,EAAE,EAAE,YAAY,CAAC;AAAA;AAEhG,SAAS,kBAAkB,CAAC,MAAK,SAAS;AAAA,EACxC,QAAQ,qBAAU,aAAa;AAAA,EAC/B,IAAI,UAAS,SAAS,SAAS,GAAG;AAAA,IAChC,MAAM,SAAQ,UAAS,MAAM,iDAAiD;AAAA,IAC9E,OAAO,UAAS,OAAO,CAAC,UAAU,OAAM,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE;AAAA,EAC7D;AAAA,EACA,IAAI,UAAS,SAAS,2BAA2B,GAAG;AAAA,IAClD,OAAO,CAAC,MAAM,MAAM;AAAA,EACtB;AAAA,EACA,IAAI,UAAS,SAAS,kBAAkB,GAAG;AAAA,IACzC,MAAM,SAAQ,UAAS,MAAM,uDAAuD;AAAA,IACpF,OAAO,UAAS,OAAO,CAAC,MAAM,OAAM,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE;AAAA,EACzD;AAAA,EACA,MAAM,QAAQ,UAAS,QAAQ,cAAc,EAAE,EAAE,MAAM,2DAA2D;AAAA,EAClH,IAAI,UAAW,SAAS,MAAM,MAAO;AAAA,EACrC,IAAI,SAAS,SAAS,MAAM;AAAA,EAC5B,IAAI,WAAW,UAAU;AAAA,IACvB,SAAS;AAAA,EACX,EAAO,SAAI,WAAW,QAAQ,WAAW,iBAAiB;AAAA,IACxD,SAAS;AAAA,IACT,UAAU;AAAA,EACZ,EAAO,SAAI,YAAY,OAAO;AAAA,IAC5B,IAAI,UAAS,WAAW,MAAM,GAAG;AAAA,MAC/B,UAAU;AAAA,IACZ,EAAO,SAAI,UAAS,WAAW,gBAAgB,GAAG;AAAA,MAChD,UAAU;AAAA,IACZ,EAAO;AAAA,MACL,UAAU,aAAa,UAAU,qBAAqB;AAAA;AAAA,EAE1D,EAAO,SAAI,YAAY,eAAe;AAAA,IACpC,MAAM,gBAAgB,QAAQ,IAAI,cAAc,KAAK,IAAI,MAAM,GAAG,EAAE;AAAA,IACpE,IAAI,iBAAiB,2BAA2B;AAAA,MAC9C,UAAU;AAAA,IACZ,EAAO,SAAI,iBAAiB,yCAAyC;AAAA,MACnE,UAAU;AAAA,IACZ;AAAA,EACF,EAAO,SAAI,UAAU,QAAQ,QAAQ,WAAW,KAAK,GAAG;AAAA,IACtD,SAAS,QAAQ,MAAM,CAAC,EAAE,QAAQ,sBAAsB,EAAE;AAAA,IAC1D,UAAU;AAAA,EACZ,EAAO,SAAI,QAAQ,SAAS,OAAO,GAAG;AAAA,IACpC,UAAU,QAAQ,MAAM,GAAG,EAAE;AAAA,EAC/B,EAAO,SAAI,UAAU,OAAO,KAAK,OAAO,KAAK,CAAC,OAAO,KAAK,MAAM,GAAG;AAAA,IACrE,CAAC,SAAS,MAAM,IAAI,CAAC,QAAQ,OAAO;AAAA,EAClC;AAAA,EACA,OAAO,CAAC,cAAc,YAAY,SAAS,UAAU,EAAE;AAAA;AAAA,IA5RnD,SACA,eAYA,oBAqNA;AAAA;AAAA,EAlOA,UAAU,IAAI;AAAA,EACd,gBAAgB;AAAA,IACpB,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,OAAO;AAAA,IACP,kBAAkB;AAAA,IAClB,2BAA2B;AAAA,IAC3B,uBAAuB;AAAA,EACzB;AAAA,EACM,qBAAqB,IAAI,IAAI;AAAA,IACjC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAAA,EA2MK,YAAY,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA;;;AChMjG,eAAsB,kBAAkB,CACtC,QACA,MACA,MACA,UACA,MAAc,KAAK,IAAI,GACL;AAAA,EAElB,MAAM,SAAS,GAAG,WAAQ;AAAA,EAC1B,IAAI,OAAO,SAAS,IAAI,MAAM,KAAK,MAAM,oBAAoB;AAAA,IAC3D,MAAM,KAAgB,EAAE,MAAM,UAAU,WAAW,MAAM,OAAO;AAAA,IAChE,MAAM,OAAO,IAAI,SAAS,MAAM,IAAI,GAAG,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,EAAE,CAAC,GAAG;AAAA,MACnF,aAAa;AAAA,IACf,CAAC;AAAA,IACD,SAAS,IAAI,QAAQ,GAAG;AAAA,EAC1B;AAAA,EAIA,IAAI,SAA2B;AAAA,EAC/B,MAAM,QAAkB,CAAC;AAAA,EACzB,WAAW,KAAK,MAAM,OAAO,KAAK,UAAU,IAAI,CAAC,GAAG;AAAA,IAClD,IAAI,CAAC,EAAE,IAAI,SAAS,QAAQ;AAAA,MAAG;AAAA,IAC/B,MAAM,QAAQ,MAAM,OAAO,IAAI,EAAE,GAAG;AAAA,IACpC,IAAI,CAAC;AAAA,MAAO;AAAA,IACZ,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,KAAK,KAAK,MAAM,IAAI,YAAY,EAAE,OAAO,KAAK,CAAC;AAAA,MAC/C,MAAM;AAAA,MACN;AAAA;AAAA,IAEF,IAAI,CAAC,GAAG,QAAQ,GAAG,aAAa,KAAK;AAAA,MAInC,IAAI,GAAG,aAAa,MAAM;AAAA,QAAQ,MAAM,KAAK,EAAE,GAAG;AAAA,MAClD;AAAA,IACF;AAAA,IACA,IACE,CAAC,UACD,GAAG,WAAW,OAAO,YACpB,GAAG,aAAa,OAAO,YAAY,GAAG,OAAO,OAAO,MACrD;AAAA,MACA,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EAIA,MAAM,UAAU,SAAS,OAAO,SAAS,OAAO;AAAA,EAGhD,IAAI;AAAA,IAAS,WAAW,KAAK;AAAA,MAAO,MAAM,OAAO,IAAI,CAAC;AAAA,EACtD,OAAO;AAAA;AAAA,IA3EH,QAEA,oBAQA,YAAY,CAAC,SAAiB,GAAG,mBACjC,WAAW,CAAC,MAAc,SAAiB,GAAG,kBAAkB,cAIhE;AAAA;AAAA,EAfA,SAAS,IAAI;AAAA,EAEb,qBAAqB,SAAS;AAAA,EAa9B,WAAW,IAAI;AAAA;;;ACHrB,SAAS,EAAE,CAAC,GAA4B;AAAA,EACtC,MAAM,MAAM,IAAI,WAAW,EAAE,UAAU;AAAA,EACvC,IAAI,IAAI,CAAC;AAAA,EACT,OAAO,IAAI;AAAA;AAgBN,SAAS,KAAK,CAAC,OAA2B;AAAA,EAC/C,IAAI,IAAI;AAAA,EACR,SAAS,IAAI,EAAG,IAAI,MAAM,QAAQ;AAAA,IAAK,KAAK,OAAO,aAAa,MAAM,EAAG;AAAA,EACzE,OAAO,KAAK,CAAC;AAAA;AAGR,SAAS,OAAO,CAAC,KAAyB;AAAA,EAC/C,MAAM,IAAI,KAAK,GAAG;AAAA,EAClB,MAAM,MAAM,IAAI,WAAW,EAAE,MAAM;AAAA,EACnC,SAAS,IAAI,EAAG,IAAI,EAAE,QAAQ;AAAA,IAAK,IAAI,KAAK,EAAE,WAAW,CAAC;AAAA,EAC1D,OAAO;AAAA;AAMF,SAAS,iBAAiB,GAAe;AAAA,EAC9C,OAAO,OAAO,gBAAgB,IAAI,WAAW,SAAS,CAAC;AAAA;AAGzD,eAAe,SAAS,CAAC,YAAoB,MAAsC;AAAA,EACjF,MAAM,OAAO,MAAM,OAAO,OAAO,UAC/B,OACA,GAAG,IAAI,YAAY,EAAE,OAAO,UAAU,CAAC,GACvC,UACA,OACA,CAAC,WAAW,CACd;AAAA,EACA,OAAO,OAAO,OAAO,UACnB,EAAE,MAAM,UAAU,MAAM,GAAG,IAAI,GAAG,YAAY,mBAAmB,MAAM,UAAU,GACjF,MACA,EAAE,MAAM,WAAW,QAAQ,IAAI,GAC/B,OACA,CAAC,WAAW,SAAS,CACvB;AAAA;AAIF,eAAsB,aAAa,CAAC,QAAoB,YAA0C;AAAA,EAChG,MAAM,OAAO,OAAO,gBAAgB,IAAI,WAAW,UAAU,CAAC;AAAA,EAC9D,MAAM,MAAM,MAAM,UAAU,YAAY,IAAI;AAAA,EAC5C,MAAM,KAAK,OAAO,gBAAgB,IAAI,WAAW,QAAQ,CAAC;AAAA,EAC1D,MAAM,KAAK,IAAI,WACb,MAAM,OAAO,OAAO,QAAQ,EAAE,MAAM,WAAW,IAAI,GAAG,EAAE,EAAE,GAAG,KAAK,GAAG,MAAM,CAAC,CAC9E;AAAA,EACA,MAAM,SAAS,IAAI,WAAW,GAAG,SAAS,GAAG,MAAM;AAAA,EACnD,OAAO,IAAI,IAAI,CAAC;AAAA,EAChB,OAAO,IAAI,IAAI,GAAG,MAAM;AAAA,EACxB,OAAO;AAAA,IACL,GAAG;AAAA,IACH,KAAK;AAAA,IACL,MAAM;AAAA,IACN,MAAM,MAAM,IAAI;AAAA,IAChB,MAAM;AAAA,IACN,aAAa,MAAM,MAAM;AAAA,EAC3B;AAAA;AAKF,eAAsB,eAAe,CAAC,KAAkB,YAAyC;AAAA,EAC/F,IAAI,IAAI,MAAM,KAAK,IAAI,QAAQ,mBAAmB,IAAI,SAAS;AAAA,IAC7D,MAAM,IAAI,QAAQ,iBAAiB,iCAAiC;AAAA,EACtE,MAAM,OAAO,QAAQ,IAAI,IAAI;AAAA,EAC7B,MAAM,MAAM,MAAM,UAAU,YAAY,IAAI;AAAA,EAC5C,MAAM,SAAS,QAAQ,IAAI,WAAW;AAAA,EACtC,MAAM,KAAK,OAAO,SAAS,GAAG,QAAQ;AAAA,EACtC,MAAM,KAAK,OAAO,SAAS,QAAQ;AAAA,EACnC,IAAI;AAAA,IACF,MAAM,MAAM,MAAM,OAAO,OAAO,QAAQ,EAAE,MAAM,WAAW,IAAI,GAAG,EAAE,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;AAAA,IACpF,OAAO,IAAI,WAAW,GAAG;AAAA,IACzB,MAAM;AAAA,IACN,MAAM,IAAI,QAAQ,QAAQ,yDAAmD;AAAA;AAAA;AAMjF,eAAe,YAAY,CAAC,QAAwC;AAAA,EAClE,OAAO,OAAO,OAAO,UAAU,OAAO,GAAG,MAAM,GAAG,EAAE,MAAM,UAAU,GAAG,OAAO;AAAA,IAC5E;AAAA,IACA;AAAA,EACF,CAAC;AAAA;AAIH,eAAsB,YAAY,CAAC,QAAoB,WAA4C;AAAA,EACjG,MAAM,MAAM,MAAM,aAAa,MAAM;AAAA,EACrC,MAAM,KAAK,OAAO,gBAAgB,IAAI,WAAW,QAAQ,CAAC;AAAA,EAC1D,MAAM,KAAK,IAAI,WACb,MAAM,OAAO,OAAO,QAAQ,EAAE,MAAM,WAAW,IAAI,GAAG,EAAE,EAAE,GAAG,KAAK,GAAG,SAAS,CAAC,CACjF;AAAA,EACA,MAAM,MAAM,IAAI,WAAW,GAAG,SAAS,GAAG,MAAM;AAAA,EAChD,IAAI,IAAI,IAAI,CAAC;AAAA,EACb,IAAI,IAAI,IAAI,GAAG,MAAM;AAAA,EACrB,OAAO;AAAA;AAIT,eAAsB,YAAY,CAAC,QAAoB,SAA0C;AAAA,EAC/F,MAAM,MAAM,MAAM,aAAa,MAAM;AAAA,EACrC,MAAM,KAAK,QAAQ,SAAS,GAAG,QAAQ;AAAA,EACvC,MAAM,KAAK,QAAQ,SAAS,QAAQ;AAAA,EACpC,IAAI;AAAA,IACF,MAAM,MAAM,MAAM,OAAO,OAAO,QAAQ,EAAE,MAAM,WAAW,IAAI,GAAG,EAAE,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;AAAA,IACpF,OAAO,IAAI,WAAW,GAAG;AAAA,IACzB,MAAM;AAAA,IACN,MAAM,IAAI,QAAQ,QAAQ,2DAAqD;AAAA;AAAA;AAAA,IArI7E,oBAAoB,QACpB,aAAa,IACb,WAAW,IACX,YAAY;AAAA;AAAA,EALlB;AAAA;;;ACuDO,SAAS,oBAAoB,CAAC,SAA2B;AAAA,EAC9D,IAAI,QAAO,sBAAsB;AAAA,IAAM,OAAO,QAAO;AAAA,EACrD,IAAI;AAAA,IACF,OAAO,IAAI,IAAI,QAAO,QAAQ,EAAE,SAAS,WAAW,GAAG,QAAO,SAAS;AAAA,IACvE,MAAM;AAAA,IACN,OAAO;AAAA;AAAA;AAsCJ,SAAS,uBAAuB,CAAC,GAA+B;AAAA,EACrE,UAAU;AAAA;AAGL,SAAS,gBAAgB,CAAC,SAAiC;AAAA,EAChE,IAAI,CAAC;AAAA,IACH,MAAM,IAAI,QAAQ,WAAW,qDAAqD;AAAA,EACpF,OAAO,QAAQ,OAAM;AAAA;AA6BvB,SAAS,UAAU,CAAC,QAAwB;AAAA,EAC1C,MAAM,KAAK,UAAU,IAAI,QAAQ,cAAc,EAAE;AAAA,EACjD,OAAO,IAAI,GAAG,qBAAqB;AAAA;AAYrC,SAAS,GAAE,CAAC,GAA4B;AAAA,EACtC,MAAM,MAAM,IAAI,WAAW,EAAE,UAAU;AAAA,EACvC,IAAI,IAAI,CAAC;AAAA,EACT,OAAO,IAAI;AAAA;AAGb,eAAe,IAAI,CAAC,OAAwC;AAAA,EAC1D,MAAM,SAAS,IAAI,SAAS,IAAG,KAAK,CAAC,EAAE,KAAM,YAAY,IAAI,kBAAkB,MAAM,CAAC;AAAA,EACtF,OAAO,IAAI,WAAW,MAAM,IAAI,SAAS,MAAM,EAAE,YAAY,CAAC;AAAA;AAEhE,eAAe,MAAM,CAAC,OAAwC;AAAA,EAC5D,MAAM,SAAS,IAAI,SAAS,IAAG,KAAK,CAAC,EAAE,KAAM,YAAY,IAAI,oBAAoB,MAAM,CAAC;AAAA,EACxF,OAAO,IAAI,WAAW,MAAM,IAAI,SAAS,MAAM,EAAE,YAAY,CAAC;AAAA;AAIhE,SAAS,OAAO,CAAC,SAA2B;AAAA,EAC1C,OAAO,QAAQ,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,EAAE,KAAK;AAAA,CAAI;AAAA;AAGxD,eAAe,aAAa,CAAC,SAAmB,KAA6C;AAAA,EAC3F,MAAM,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,OAAO,QAAQ,OAAO,CAAC,CAAC;AAAA,EAChE,OAAO,MAAM,aAAa,KAAK,EAAE,IAAI;AAAA;AAGvC,eAAe,aAAa,CAAC,OAAmB,KAA2C;AAAA,EACzF,MAAM,KAAK,MAAM,MAAM,aAAa,KAAK,KAAK,IAAI;AAAA,EAClD,MAAM,QAAQ,IAAI,YAAY,EAAE,OAAO,MAAM,OAAO,EAAE,CAAC;AAAA,EACvD,IAAI,CAAC;AAAA,IAAO,OAAO,CAAC;AAAA,EACpB,OAAO,MACJ,MAAM;AAAA,CAAI,EACV,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,EAC1B,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAW;AAAA;AAGvC,SAAS,WAAW,CAAC,SAAqC;AAAA,EACxD,IAAI,CAAC,QAAO;AAAA,IAAS,OAAO;AAAA,EAK5B,IAAI,CAAC,QAAO;AAAA,IACV,MAAM,IAAI,QACR,iBACA,iFACF;AAAA,EACF,OAAO,QAAQ,QAAO,SAAS;AAAA;AAajC,eAAsB,aAAa,CACjC,SACA,OACA,OACkB;AAAA,EAClB,MAAM,SAAS,iBAAiB,OAAM;AAAA,EACtC,MAAM,MAAM,SAAS,WAAW,QAAO,MAAM,GAAG,KAAI;AAAA,EACpD,MAAM,KAAK,YAAY,OAAM;AAAA,EAC7B,MAAM,OAAO,KAAK,MAAM,aAAa,IAAI,KAAK,IAAI;AAAA,EAClD,IAAI;AAAA,IACF,MAAM,OAAO,IAAI,KAAK,MAAM,EAAE,aAAa,MAAM,aAAa,2BAA2B,CAAC;AAAA,IAC1F,OAAO;AAAA,IACP,OAAO,GAAG;AAAA,IACV,IAAI,UAAU,CAAC,MAAM;AAAA,MAAY,OAAO;AAAA,IACxC,MAAM;AAAA;AAAA;AASV,eAAsB,oBAAoB,CAAC,SAAwC;AAAA,EACjF,MAAM,SAAS,iBAAiB,OAAM;AAAA,EACtC,MAAM,SAAS,SAAS,WAAW,QAAO,MAAM,GAAG,EAAE;AAAA,EACrD,MAAM,OAAO,MAAM,OAAO,KAAK,MAAM;AAAA,EACrC,MAAM,MAAM,IAAI;AAAA,EAChB,WAAW,KAAK,MAAM;AAAA,IACpB,MAAM,OAAO,EAAE,IAAI,MAAM,OAAO,MAAM;AAAA,IACtC,IAAI;AAAA,MAAM,IAAI,IAAI,IAAI;AAAA,EACxB;AAAA,EACA,OAAO;AAAA;AAIT,eAAsB,aAAa,CAAC,SAAkB,OAA0C;AAAA,EAC9F,MAAM,SAAS,iBAAiB,OAAM;AAAA,EACtC,MAAM,MAAM,MAAM,OAAO,IAAI,SAAS,WAAW,QAAO,MAAM,GAAG,KAAI,CAAC;AAAA,EACtE,IAAI,CAAC;AAAA,IAAK,OAAO;AAAA,EACjB,MAAM,KAAK,YAAY,OAAM;AAAA,EAC7B,OAAO,KAAK,aAAa,IAAI,GAAG,IAAI;AAAA;AAItC,eAAe,WAAW,CAAC,GAA4B;AAAA,EACrD,MAAM,SAAS,MAAM,OAAO,OAAO,OACjC,WACA,IAAG,IAAI,YAAY,EAAE,OAAO,CAAC,CAAC,CAChC;AAAA,EACA,OAAO,CAAC,GAAG,IAAI,WAAW,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,GAAG,EAAE;AAAA;AAKrG,SAAS,aAAa,CAAC,IAAc,MAAqB;AAAA,EACxD,MAAM,IAAI,GAAG,MAAM,6CAA6C,EAAE,IAAI,IAAG;AAAA,EAGzE,OAAO,GAAG,eAAe;AAAA;AAE3B,SAAS,aAAa,CAAC,IAAc,MAAa,GAAiB;AAAA,EACjE,GAAG,MAAM,gDAAgD,EAAE,IAAI,GAAG,IAAG;AAAA;AAEvE,SAAS,gBAAgB,CAAC,IAAc,MAAa,MAA6B;AAAA,EAChF,MAAM,IAAI,GACP,MAAM,yEAAyE,EAC/E,IAAI,MAAK,IAAI;AAAA,EAChB,OAAO,GAAG,YAAY;AAAA;AAExB,SAAS,gBAAgB,CAAC,IAAc,MAAa,MAAc,KAAmB;AAAA,EACpF,GAAG,MACD,gFACE,2EACJ,EAAE,IAAI,MAAK,MAAM,GAAG;AAAA;AAOtB,SAAS,mBAAmB,CAAC,IAAc,MAA0B;AAAA,EACnE,MAAM,MAAM,iBAAiB,IAAI,MAAK,eAAe;AAAA,EACrD,OAAO,IAAI,IAAI,MAAM,IAAI,MAAM;AAAA,CAAI,EAAE,OAAO,OAAO,IAAI,CAAC,CAAC;AAAA;AAE3D,SAAS,mBAAmB,CAAC,IAAc,MAAa,MAA8B;AAAA,EACpF,iBAAiB,IAAI,MAAK,iBAAiB,CAAC,GAAG,IAAI,EAAE,KAAK;AAAA,CAAI,CAAC;AAAA;AAQjE,SAAS,eAAe,CAAC,IAAwB;AAAA,EAC/C,OAAO,GACJ,MACC,UAAU;AAAA;AAAA;AAAA;AAAA,SAKZ,EACC,IAAI;AAAA;AAUT,SAAS,iBAAiB,CAAC,SAA6B;AAAA,EACtD,MAAM,IAAc,CAAC;AAAA,EACrB,WAAW,KAAK;AAAA,IAAS,IAAI,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE;AAAA,MAAW,EAAE,EAAE,WAAW,EAAE;AAAA,EACtF,OAAO;AAAA;AAKT,SAAS,aAAa,CAAC,IAAwB;AAAA,EAC7C,MAAM,OAAO,GACV,MAAM,kEAAkE,EACxE,IAAI;AAAA,EACP,MAAM,IAAc,CAAC;AAAA,EACrB,WAAW,KAAK;AAAA,IAAM,EAAE,EAAE,WAAW,EAAE;AAAA,EACvC,OAAO;AAAA;AAKT,SAAS,SAAS,CAAC,OAAiB,MAAyB;AAAA,EAC3D,WAAW,KAAK;AAAA,IAAM,IAAI,CAAC,MAAM,MAAM,MAAM,KAAM,KAAK;AAAA,MAAK,OAAO;AAAA,EACpE,OAAO;AAAA;AAcT,eAAe,QAAQ,CAAC,OAAgB,KAA6C;AAAA,EACnF,MAAM,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,KAAI,CAAC,CAAC;AAAA,EACpE,OAAO,MAAM,aAAa,KAAK,EAAE,IAAI;AAAA;AAEvC,eAAe,QAAQ,CAAC,OAAmB,KAAkD;AAAA,EAC3F,IAAI;AAAA,IACF,MAAM,KAAK,MAAM,MAAM,aAAa,KAAK,KAAK,IAAI;AAAA,IAClD,OAAO,KAAK,MAAM,IAAI,YAAY,EAAE,OAAO,MAAM,OAAO,EAAE,CAAC,CAAC;AAAA,IAC5D,MAAM;AAAA,IACN,OAAO;AAAA;AAAA;AAMX,SAAS,aAAa,CAAC,MAAuB,MAAwB;AAAA,EACpE,MAAM,QAAQ,IAAI;AAAA,EAClB,WAAW,KAAK,MAAM;AAAA,IACpB,MAAM,OAAO,EAAE,IAAI,MAAM,KAAK,MAAM;AAAA,IACpC,MAAM,QAAQ,KAAK,QAAQ,GAAG;AAAA,IAC9B,IAAI,QAAQ;AAAA,MAAG,MAAM,IAAI,KAAK,MAAM,GAAG,KAAK,CAAC;AAAA,EAC/C;AAAA,EACA,OAAO,CAAC,GAAG,KAAK;AAAA;AAOlB,eAAe,eAAe,CAAC,QAAuB,MAAiC;AAAA,EACrF,MAAM,OAAO,UAAU,IAAI;AAAA,EAC3B,OAAO,cAAc,MAAM,OAAO,KAAK,MAAM,WAAW,GAAG,GAAG,IAAI;AAAA;AAYpE,eAAsB,kBAAkB,CACtC,QACA,SACA,YACwB;AAAA,EACxB,IAAI,CAAC,QAAO;AAAA,IAAS,OAAO;AAAA,EAC5B,MAAM,OAAO,WAAW,QAAO,MAAM;AAAA,EACrC,MAAM,OAAO,YAAY,IAAI;AAAA,EAC7B,MAAM,SAAS,OAAO,UACpB,MAAM,MAAM,gBAAgB,KAAK,MAAM,IAAI,YAAY,EAAE,OAAO,KAAK,CAAC,GAAkB,UAAU,CAAC;AAAA,EAErG,MAAM,WAAW,MAAM,OAAO,IAAI,IAAI;AAAA,EACtC,IAAI;AAAA,IAAU,OAAO,OAAO,QAAQ;AAAA,EAEpC,MAAM,IAAI,kBAAkB;AAAA,EAC5B,MAAM,MAAM,MAAM,cAAc,GAAG,UAAU;AAAA,EAC7C,IAAI;AAAA,IACF,MAAM,OAAO,IAAI,MAAM,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,GAAG,CAAC,GAAG;AAAA,MACpE,aAAa;AAAA,MACb,aAAa;AAAA,IACf,CAAC;AAAA,IACD,OAAO,MAAM,CAAC;AAAA,IACd,OAAO,GAAG;AAAA,IAGV,IAAI,UAAU,CAAC,MAAM,YAAY;AAAA,MAC/B,MAAM,SAAS,MAAM,OAAO,IAAI,IAAI;AAAA,MACpC,IAAI;AAAA,QAAQ,OAAO,OAAO,MAAM;AAAA,IAClC;AAAA,IACA,MAAM;AAAA;AAAA;AAqBV,eAAsB,eAAe,CACnC,IACA,QACA,SACA,iBAAyB,yBACyB;AAAA,EAClD,MAAM,MAAM,YAAY,OAAM;AAAA,EAC9B,MAAM,OAAO,WAAW,QAAO,MAAM;AAAA,EACrC,MAAM,OAAO,UAAU,EAAE;AAAA,EAKzB,MAAM,WAAW,MAAM,OAAO,KAAK,WAAW,MAAM,IAAI,CAAC,GACtD,IAAI,CAAC,MAAM,EAAE,GAAG,EAChB,OAAO,CAAC,MAAM,EAAE,SAAS,MAAM,CAAC,EAChC,KAAK;AAAA,EACR,MAAM,aAAa,QAAQ,SAAS,QAAQ,QAAQ,SAAS,KAAM;AAAA,EAEnE,MAAM,UAAU,gBAAgB,EAAE;AAAA,EAClC,IAAI,QAAQ,WAAW;AAAA,IAAG,OAAO;AAAA,EACjC,MAAM,SAAS,QAAQ,OAAO,CAAC,GAAG,MAAO,EAAE,MAAM,IAAI,EAAE,MAAM,GAAI,EAAE;AAAA,EAEnE,MAAM,QAAO,MAAM,YAAY,QAAQ,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK;AAAA,CAAI,CAAC;AAAA,EACtF,MAAM,UAAU,GAAG,aAAa,IAAI,IAAI,SAAS,WAAW;AAAA,EAE5D,MAAM,OAAO,IAAI,SAAS,MAAM,cAAc,SAAS,GAAG,GAAG;AAAA,IAC3D,aAAa;AAAA,EACf,CAAC;AAAA,EAGD,MAAM,OAAO,IACX,MAAM,OAAO,GACb,MAAM,SAAS,EAAE,UAAU,kBAAkB,OAAO,GAAG,SAAS,MAAM,WAAW,GAAG,GAAG,GACvF,EAAE,aAAa,2BAA2B,CAC5C;AAAA,EAKA,WAAW,KAAK,MAAM,OAAO,KAAK,aAAa,IAAI,CAAC,GAAG;AAAA,IACrD,IAAI,CAAC,EAAE,IAAI,SAAS,OAAO;AAAA,MAAG;AAAA,IAC9B,MAAM,KAAK,EAAE,IAAI,MAAM,aAAa,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,EAAE;AAAA,IAClE,IAAI,KAAK,QAAQ;AAAA,MACf,MAAM,OAAO,IAAI,EAAE,GAAG;AAAA,MACtB,MAAM,OAAO,IAAI,MAAM,EAAE,GAAG,CAAC;AAAA,IAC/B;AAAA,EACF;AAAA,EAKA,MAAM,WAAW,QAAQ,MAAM,GAAG,KAAK,IAAI,GAAG,QAAQ,SAAS,cAAc,CAAC;AAAA,EAC9E,WAAW,KAAK;AAAA,IAAU,MAAM,OAAO,IAAI,CAAC;AAAA,EAC5C,OAAO,EAAE,KAAK,SAAS,SAAS,QAAQ,OAAO;AAAA;AA6DjD,SAAS,KAAK,CAAC,KAAqB;AAAA,EAClC,OAAO,SAAS,IAAI,MAAM,GAAG,EAAE,GAAG,EAAE;AAAA;AAItC,SAAS,WAAW,CAAC,GAAmB;AAAA,EACtC,OAAO,KAAK,IAAI,IAAI,MAAM,EAAE,GAAG;AAAA;AAKjC,SAAS,iBAAiB,CAAC,UAAoB,MAA6B;AAAA,EAC1E,MAAM,OAAO,aAAa,IAAI;AAAA,EAC9B,IAAI,MAAqB;AAAA,EACzB,WAAW,KAAK,UAAU;AAAA,IACxB,MAAM,KAAK,EAAE,MAAM,KAAK,MAAM,EAAE,MAAM,QAAQ,EAAE;AAAA,IAChD,IAAI,QAAQ,QAAQ,KAAK;AAAA,MAAK,MAAM;AAAA,EACtC;AAAA,EACA,OAAO;AAAA;AAST,eAAsB,eAAe,CACnC,IACA,SACA,QACA,SACA,OAAwB,CAAC,GACJ;AAAA,EACrB,MAAM,OAAO,UAAU,EAAE;AAAA,EACzB,MAAM,MAAM,YAAY,OAAM;AAAA,EAC9B,MAAM,OAAO,WAAW,QAAO,MAAM;AAAA,EAGrC,MAAM,aAAa,cAAc,IAAI,OAAO;AAAA,EAC5C,MAAM,QAAQ,gBAAgB,IAAI,YAAY,EAAE,UAAU,KAAK,CAAC;AAAA,EAChE,IAAI,SAAS;AAAA,EACb,IAAI,cAAc;AAAA,EAClB,IAAI,MAAM,QAAQ,WAAW,GAAG;AAAA,IAG9B,cAAc,IAAI,SAAS,MAAM,MAAM;AAAA,EACzC,EAAO;AAAA,IACL,MAAM,aAAa,KAAK,kBAAkB;AAAA,IAC1C,MAAM,SAAS,KAAK,gBAAgB;AAAA,IACpC,MAAM,QACJ,KAAK,aAAa,MAAM,QAAQ,UAAU,cAAc,YAAY,MAAM,QAAQ,EAAG,KAAK;AAAA,IAC5F,IAAI,OAAO;AAAA,MAKT,MAAM,IAAI,OAAO,MAAM,MAAM,MAAM,MAAM;AAAA,MACzC,MAAM,OAAO,IAAI,QAAQ,MAAM,IAAI,GAAG,IAAI,YAAY,EAAE,OAAO,CAAC,GAAG;AAAA,QACjE,aAAa;AAAA,MACf,CAAC;AAAA,MACD,MAAM,OAAO,IAAI,GAAG,MAAM,cAAc,MAAM,SAAS,GAAG,GAAG;AAAA,QAC3D,aAAa;AAAA,MACf,CAAC;AAAA,MACD,cAAc,IAAI,SAAS,MAAM,MAAM;AAAA,MACvC,SAAS,MAAM,QAAQ;AAAA,IACzB,EAAO;AAAA,MACL,cAAc;AAAA;AAAA;AAAA,EASlB,IAAI,WAAqB,CAAC;AAAA,EAC1B,IAAI,SAAS;AAAA,EACb,IAAI,KAAK,QAAQ,MAAM;AAAA,IACrB,YAAY,MAAM,OAAO,KAAK,aAAa,IAAI,CAAC,GAC7C,IAAI,CAAC,MAAM,EAAE,GAAG,EAChB,OAAO,CAAC,MAAM,EAAE,SAAS,OAAO,CAAC;AAAA,IACpC,UAAU,MAAM,cAAc,IAAI,SAAS,UAAU,QAAQ,GAAG;AAAA,IAGhE,WAAW,UAAU,MAAM,gBAAgB,QAAQ,IAAI,GAAG;AAAA,MACxD,IAAI,WAAW;AAAA,QAAM;AAAA,MACrB,MAAM,SAAS,iBAAiB,IAAI,SAAS,MAAM;AAAA,MAInD,MAAM,OAAO,MAAM,OAAO,IAAI,QAAQ,MAAM,MAAM,CAAC;AAAA,MACnD,IAAI,MAAM;AAAA,QACR,MAAM,SAAS,IAAI,YAAY,EAAE,OAAO,IAAI;AAAA,QAC5C,IAAI,UAAU,UAAU;AAAA,UAAQ;AAAA,MAClC;AAAA,MACA,MAAM,QAAQ,MAAM,OAAO,KAAK,WAAW,MAAM,MAAM,GAAG,UAAU,SAAS,GAAG,OAC9E,CAAC,MAAM,EAAE,IAAI,SAAS,MAAM,CAC9B;AAAA,MACA,WAAW,OAAO,MAAM;AAAA,QACtB,MAAM,QAAQ,MAAM,OAAO,IAAI,IAAI,GAAG;AAAA,QACtC,IAAI,CAAC;AAAA,UAAO;AAAA,QACZ,MAAM,UAAU,MAAM,cAAc,OAAO,GAAG;AAAA,QAI9C,UAAU,OAAO,IAAI,OAAO;AAAA,QAC5B,iBAAiB,IAAI,SAAS,QAAQ,IAAI,GAAG;AAAA,MAC/C;AAAA,IACF;AAAA,EACF;AAAA,EAOA,IAAI,cAAc;AAAA,EAClB,IAAI,KAAK,SAAS;AAAA,IAChB,MAAM,UAAW,GAAG,MAAM,wCAAwC,EAAE,IAAI,EAAoB;AAAA,IAC5F,IAAI,UAAU,GAAG;AAAA,MACf,MAAM,SAAS,kBAAkB,UAAU,IAAI;AAAA,MAM/C,MAAM,WAAW,KAAK,oBAAoB;AAAA,MAC1C,MAAM,QAAQ,KAAK,sBAAsB;AAAA,MACzC,MAAM,cAAc,KAAK,yBAAyB;AAAA,MAClD,MAAM,QACJ,WAAW,OACP,UACC,GAAG,MAAM,sDAAsD,EAAE,IAAI,MAAM,EAEzE;AAAA,MACT,MAAM,MACJ,WAAW,QACX,SAAS,KAAK,IAAI,UAAU,UAAU,KAAK,KAC1C,QAAQ,KAAK,KAAK,IAAI,IAAI,MAAM,MAAM,KAAK;AAAA,MAI9C,IAAI,OAAQ,MAAM,mBAAmB,QAAQ,MAAM,MAAM,KAAK,YAAY,CAAC,GAAI;AAAA,QAC7E,MAAM,gBAAgB,IAAI,QAAQ,SAAQ,KAAK,sBAAsB;AAAA,QACrE,cAAc;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAAA,EAKA,IAAI,KAAK,WAAW,CAAC,eAAe,SAAS,GAAG;AAAA,IAC9C,MAAM,YAAY,KAAK,yBAAyB;AAAA,IAChD,MAAM,YAAY,MAAM,OAAO,KAAK,WAAW,MAAM,IAAI,CAAC,GAAG,OAAO,CAAC,MACnE,EAAE,IAAI,SAAS,MAAM,CACvB,EAAE;AAAA,IACF,IAAI,YAAY;AAAA,MAAW,MAAM,gBAAgB,IAAI,QAAQ,SAAQ,KAAK,sBAAsB;AAAA,EAClG;AAAA,EAEA,OAAO,EAAE,QAAQ,QAAQ,YAAY;AAAA;AAOvC,eAAe,aAAa,CAC1B,IACA,SACA,SACA,QACA,KACiB;AAAA,EACjB,IAAI,QAAQ,WAAW;AAAA,IAAG,OAAO;AAAA,EACjC,MAAM,WAAW,oBAAoB,IAAI,OAAO;AAAA,EAChD,MAAM,QAAQ,cAAc,EAAE;AAAA,EAC9B,IAAI,SAAS;AAAA,EACb,WAAW,KAAK,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,QAAQ,GAAG;AAAA,IAC7C,IAAI,SAAS,IAAI,CAAC;AAAA,MAAG;AAAA,IAGrB,MAAM,YAAY,MAAM,OAAO,IAAI,MAAM,CAAC,CAAC;AAAA,IAC3C,MAAM,QAAO,YAAY,MAAM,SAAS,WAAW,GAAG,IAAI;AAAA,IAC1D,IAAI,SAAQ,UAAU,OAAO,MAAK,QAAQ,GAAG;AAAA,MAC3C,SAAS,IAAI,CAAC;AAAA,MACd;AAAA,IACF;AAAA,IACA,MAAM,QAAQ,MAAM,OAAO,IAAI,CAAC;AAAA,IAChC,IAAI,CAAC;AAAA,MAAO;AAAA,IACZ,MAAM,UAAU,MAAM,cAAc,OAAO,GAAG;AAAA,IAM9C,UAAU,OAAO,IAAI,OAAO;AAAA,IAC5B,SAAS,IAAI,CAAC;AAAA,IACd,WAAW,KAAK;AAAA,MACd,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,MAAM,EAAE;AAAA,QAAW,MAAM,EAAE,WAAW,EAAE;AAAA,IAG3E,IAAI,OAAM,YAAY;AAAA,MACpB,MAAM,MAAM,iBAAiB,IAAI,SAAS,MAAK,OAAO;AAAA,MACtD,IAAI,CAAC,OAAO,MAAM,MAAK;AAAA,QACrB,iBAAiB,IAAI,SAAS,MAAK,SAAS,MAAK,UAAU;AAAA,IAC/D;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,IAAI,IAAI,OAAO;AAAA,EAClC,oBAAoB,IAAI,SAAS,CAAC,GAAG,QAAQ,EAAE,OAAO,CAAC,MAAM,WAAW,IAAI,CAAC,CAAC,CAAC;AAAA,EAC/E,OAAO;AAAA;AAAA,IAxqBL,UAAuC,MAiBrC,kBAAkB,gBAClB,UAAU,IAIV,WAAW,KAMX,0BAA0B,IAK1B,6BAA6B,KAC7B,+BAA+B,KAG/B,kCAMA,YAAY,CAAC,SAAiB,GAAG,eACjC,aAAa,CAAC,MAAc,SAAiB,GAAG,cAAc,SAC9D,UAAU,CAAC,MAAc,SAAiB,GAAG,cAAc,aAC3D,SAAS,CAAC,MAAc,MAAc,QAC1C,GAAG,cAAc,QAAQ,OAAO,GAAG,EAAE,SAAS,SAAS,GAAG,SACtD,eAAe,CAAC,SAAiB,GAAG,kBACpC,cAAc,CAAC,SAAiB,GAAG,uBA2DnC,WAAW,CAAC,MAAc,UAAiB,GAAG,cAAc,SAsJ5D,QAAQ,CAAC,YAAoB,GAAG;AAAA;AAAA,EAhWtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EA8HM,mCAAmC,KAAK;AAAA;;;AChJ9C;AAYA,SAAS,UAAU,CAAC,SAAiC;AAAA,EAGnD,MAAM,QAAQ,qBAAqB,OAAM;AAAA,EACzC,MAAM,KAAK,IAAI,SAAS;AAAA,IACtB,aAAa,QAAO;AAAA,IACpB,iBAAiB,QAAO;AAAA,IACxB,QAAQ,QAAO,UAAU;AAAA,IACzB,UAAU,QAAO;AAAA,IACjB,QAAQ,QAAO;AAAA,OACX,QAAQ,EAAE,oBAAoB,KAAK,IAAI,CAAC;AAAA,EAC9C,CAAC;AAAA,EAED,OAAO;AAAA,SACC,KAAI,CAAC,QAAgB,YAAqB,WAA8C;AAAA,MAC5F,MAAM,MAAuB,CAAC;AAAA,MAC9B,IAAI;AAAA,MACJ,GAAG;AAAA,QACD,MAAM,MAAM,MAAM,GAAG,KAAK,EAAE,QAAQ,YAAY,SAAS,MAAM,mBAAmB,UAAU,CAAC;AAAA,QAC7F,WAAW,KAAK,IAAI,YAAY,CAAC;AAAA,UAAG,IAAI,KAAK,EAAE,KAAK,EAAE,KAAK,MAAM,EAAE,KAAK,CAAC;AAAA,QAGzE,WAAW,KAAK,IAAI,kBAAkB,CAAC;AAAA,UAAG,IAAI,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC;AAAA,QACpE,oBAAoB,IAAI,cAAc,IAAI,wBAAwB;AAAA,MACpE,SAAS;AAAA,MACT,OAAO;AAAA;AAAA,SAGH,IAAG,CAAC,KAAyC;AAAA,MACjD,MAAM,IAAI,GAAG,KAAK,GAAG;AAAA,MACrB,IAAI;AAAA,QACF,OAAO,IAAI,WAAW,MAAM,EAAE,YAAY,CAAC;AAAA,QAC3C,OAAO,GAAG;AAAA,QAGV,IAAI,MAAM,EAAE,OAAO,EAAE,MAAM,MAAM,IAAI;AAAA,UAAG,MAAM;AAAA,QAC9C,OAAO;AAAA;AAAA;AAAA,SAIL,IAAG,CAAC,KAAa,MAAkB,MAAsC;AAAA,MAO7E,IAAI,MAAM,eAAgB,MAAM,GAAG,KAAK,GAAG,EAAE,OAAO,GAAI;AAAA,QACtD,MAAM,IAAI,QAAQ,YAAY,6BAA6B,KAAK;AAAA,MAClE;AAAA,MACA,MAAM,GAAG,KAAK,GAAG,EAAE,MAAM,MAAM,MAAM,cAAc,EAAE,MAAM,KAAK,YAAY,IAAI,SAAS;AAAA;AAAA,SAGrF,IAAG,CAAC,KAA4B;AAAA,MACpC,MAAM,GAAG,KAAK,GAAG,EAAE,OAAO;AAAA;AAAA,EAE9B;AAAA;AAcF,SAAS,YAAY,CAAC,SAAmD;AAAA,EACvE,MAAM,MAAM,IAAI,UAAU;AAAA,IACxB,aAAa,QAAO;AAAA,IACpB,iBAAiB,QAAO;AAAA,IACxB,QAAQ,QAAO,UAAU;AAAA,IACzB,SAAS;AAAA,EACX,CAAC;AAAA,EACD,MAAM,SAAS,IAAI,IAAI,QAAO,QAAQ,EAAE;AAAA,EAGxC,MAAM,OAAO,qBAAqB,OAAM,IAAI,SAAS,GAAG,UAAU,QAAO;AAAA,EACzE,OAAO,EAAE,KAAK,KAAK,GAAG,aAAa;AAAA;AAGrC,SAAS,SAAS,CAAC,GAAmB;AAAA,EACpC,OAAO,EACJ,QAAQ,MAAM,OAAO,EACrB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,QAAQ;AAAA;AAG3B,SAAS,WAAW,CAAC,GAAmB;AAAA,EACtC,OAAO,EACJ,QAAQ,SAAS,GAAG,EACpB,QAAQ,SAAS,GAAG,EACpB,QAAQ,WAAW,GAAG,EACtB,QAAQ,UAAU,GAAG;AAAA;AAG1B,SAAS,eAAe,CAAC,SAA2B;AAAA,EAClD,MAAM,IAAI,QAAQ,IAAI,CAAC,MAAM,kBAAkB,UAAU,CAAC,mBAAmB,EAAE,KAAK,EAAE;AAAA,EACtF,OACE,iBAAiB,4BAA4B,MAC7C,yEACA,6EACA,sEACA;AAAA;AAKJ,eAAsB,aAAa,CAAC,SAA0C;AAAA,EAC5E,QAAQ,KAAK,cAAQ,aAAa,OAAM;AAAA,EACxC,MAAM,MAAM,MAAM,IAAI,MAAM,MAAK,EAAE,QAAQ,MAAM,CAAC;AAAA,EAClD,IAAI,IAAI,WAAW;AAAA,IAAK,OAAO;AAAA,EAC/B,IAAI,CAAC,IAAI,IAAI;AAAA,IACX,MAAM,SAAS,MAAM,IAAI,KAAK,EAAE,MAAM,MAAM,EAAE;AAAA,IAC9C,MAAM,IAAI,MAAM,uBAAuB,IAAI,UAAU,OAAO,MAAM,GAAG,GAAG,GAAG;AAAA,EAC7E;AAAA,EACA,OAAO,MAAM,IAAI,KAAK;AAAA;AAcjB,SAAS,YAAY,CAAC,UAAyB,SAAmB,QAAwB;AAAA,EAC/F,MAAM,OAAiB,CAAC;AAAA,EACxB,MAAM,OAAiB,CAAC;AAAA,EACxB,IAAI,UAAU;AAAA,IACZ,WAAW,QAAQ,SAAS,MAAM,iCAAiC,KAAK,CAAC,GAAG;AAAA,MAC1E,IAAI,KAAK,SAAS,OAAO,2BAA2B,GAAG;AAAA,QACrD,IAAI;AAAA,UACF,WAAW,KAAK,KAAK,SAAS,6CAA6C;AAAA,YACzE,KAAK,KAAK,YAAY,EAAE,GAAI,KAAK,CAAC,CAAC;AAAA,MACzC,EAAO;AAAA,QACL,KAAK,KAAK,IAAI;AAAA;AAAA,IAElB;AAAA,EACF;AAAA,EACA,MAAM,SAAS,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;AAAA,EACjD,MAAM,eAAe,OAAO,SAAS,GAAG,IAAI,CAAC,GAAG,IAAI;AAAA,EACpD,OACE,2CACA,sBAAsB,KAAK,KAAK,EAAE,IAAI,gBAAgB,YAAY;AAAA;AAWtE,eAAsB,aAAa,CACjC,SACA,SACA,OAA4B,CAAC,GACd;AAAA,EACf,MAAM,QAAQ,QAAQ,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO;AAAA,EACzD,IAAI,MAAM,WAAW;AAAA,IAAG,MAAM,IAAI,QAAQ,iBAAiB,iCAAiC;AAAA,EAC5F,QAAQ,KAAK,cAAQ,aAAa,OAAM;AAAA,EAExC,MAAM,WAAW,MAAM,cAAc,OAAM,EAAE,MAAM,MAAM,IAAI;AAAA,EAC7D,MAAM,MAAM,aAAa,UAAU,OAAO,KAAK,SAAS,KAAK;AAAA,EAC7D,MAAM,OAAO,IAAI,YAAY,EAAE,OAAO,GAAG;AAAA,EACzC,MAAM,aAAa,IAAI,IAAI,aAAa,KAAK,EAAE,OAAO,IAAI,EAAE,OAAO,QAAQ;AAAA,EAE3E,MAAM,MAAM,MAAM,IAAI,MAAM,MAAK;AAAA,IAC/B,QAAQ;AAAA,IACR,MAAM,IAAI,WAAW,IAAI,EAAE;AAAA,IAC3B,SAAS,EAAE,gBAAgB,mBAAmB,eAAe,WAAW;AAAA,EAC1E,CAAC;AAAA,EACD,IAAI,CAAC,IAAI,IAAI;AAAA,IACX,MAAM,SAAS,MAAM,IAAI,KAAK,EAAE,MAAM,MAAM,EAAE;AAAA,IAC9C,MAAM,IAAI,MAAM,uBAAuB,IAAI,UAAU,OAAO,MAAM,GAAG,GAAG,GAAG;AAAA,EAC7E;AAAA;AAAA,IArHI,uBAAuB;AAAA;AAAA,EA/E7B;AAAA,EACA;AAAA,EACA;AAAA,EAoEA,wBAAwB,UAAU;AAAA;;;ACjD3B,SAAS,aAAa,CAAC,GAAuB,YAA4B;AAAA,EAC/E,IAAI,CAAC;AAAA,IAAG,OAAO;AAAA,EACf,MAAM,IAAI,0BAA0B,KAAK,EAAE,KAAK,CAAC;AAAA,EACjD,IAAI,CAAC;AAAA,IAAG,OAAO;AAAA,EACf,MAAM,IAAI,OAAO,EAAE,EAAE;AAAA,EACrB,QAAQ,EAAE;AAAA,SACH;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO,IAAI;AAAA,SACR;AAAA,MACH,OAAO,IAAI;AAAA,SACR;AAAA,MACH,OAAO,IAAI;AAAA;AAAA,MAEX,OAAO,IAAI;AAAA;AAAA;AAUjB,SAAS,OAAO,CAAC,IAAc,KAA4B;AAAA,EACzD,MAAM,MAAM,GAAG,MAAM,sCAAsC,EAAE,IAAI,GAAG;AAAA,EAGpE,OAAO,MAAM,IAAI,QAAQ;AAAA;AAG3B,SAAS,OAAO,CAAC,IAAc,KAAa,OAAqB;AAAA,EAC/D,GAAG,MACD,mGACF,EAAE,IAAI,KAAK,KAAK;AAAA;AAIX,SAAS,SAAS,CAAC,IAAiC;AAAA,EACzD,MAAM,QAAQ,QAAQ,IAAI,OAAO;AAAA,EACjC,IAAI,CAAC;AAAA,IAAO,OAAO;AAAA,EACnB,MAAM,OAAO,QAAQ,IAAI,MAAM;AAAA,EAC/B,OAAO;AAAA,IACL;AAAA,IACA,KAAK,OAAO,QAAQ,IAAI,KAAK,KAAK,CAAC;AAAA,IACnC,MAAM,QAAQ,KAAK,SAAS,IAAI,OAAO;AAAA,IACvC,SAAS,OAAO,QAAQ,IAAI,UAAU,KAAK,CAAC;AAAA,EAC9C;AAAA;AAIK,SAAS,MAAM,CAAC,IAAc,OAAe,SAA6B;AAAA,EAC/E,MAAM,MAAM,KAAK,IAAI;AAAA,EACrB,MAAM,MAAM,QAAQ,IAAI,OAAO;AAAA,EAC/B,MAAM,OAAmB;AAAA,IACvB,OAAO,aAAa,EAAE;AAAA,IACtB,KAAK,MAAM;AAAA,IACX,MAAM;AAAA,IACN,SAAS,MAAM,MAAM,UAAU;AAAA,EACjC;AAAA,EACA,QAAQ,IAAI,SAAS,KAAK,KAAK;AAAA,EAC/B,QAAQ,IAAI,OAAO,OAAO,KAAK,GAAG,CAAC;AAAA,EACnC,QAAQ,IAAI,QAAQ,KAAK,QAAQ,EAAE;AAAA,EACnC,QAAQ,IAAI,YAAY,OAAO,KAAK,OAAO,CAAC;AAAA,EAC5C,OAAO;AAAA;AAIF,SAAS,YAAY,CAAC,IAAc,OAAe,SAA6B;AAAA,EACrF,MAAM,IAAI,UAAU,EAAE;AAAA,EACtB,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,EAAE;AAAA,IAAK,OAAO,OAAO,IAAI,OAAO,OAAO;AAAA,EAC9D,OAAO;AAAA;AAAA,IAxFH,UAAU,cACV,QAAQ,kBACR,SAAS,mBACT,aAAa,uBAgCb,MAAM,UAEC,gBAEA;AAAA;AAAA,EAzCb;AAAA,EAuCa,iBAAiB,cAAc,QAAQ,IAAI,mBAAmB,KAAK,GAAG;AAAA,EAEtE,mBAAmB,cAAc,QAAQ,IAAI,qBAAqB,IAAI,GAAG;AAAA;;;ACnBtF,SAAS,QAAO,CAAC,IAAc,KAA4B;AAAA,EACzD,MAAM,MAAM,GAAG,MAAM,sCAAsC,EAAE,IAAI,GAAG;AAAA,EAGpE,OAAO,MAAM,IAAI,QAAQ;AAAA;AAUpB,SAAS,eAAe,CAAC,IAA4B;AAAA,EAC1D,MAAM,OAAO,SAAQ,IAAI,MAAM;AAAA,EAC/B,MAAM,OAAO,SAAQ,IAAI,MAAM;AAAA,EAC/B,MAAM,WAAW,SAAQ,IAAI,eAAe;AAAA,EAC5C,MAAM,OAAO,SAAQ,IAAI,WAAW;AAAA,EACpC,MAAM,YAAY,SAAQ,IAAI,YAAY;AAAA,EAC1C,OAAO;AAAA,IACL,MAAM,QAAQ,eAAe;AAAA,IAC7B,MAAM,QAAQ,OAAO,OAAO,IAAI,IAAI,eAAe;AAAA,IACnD,gBAAgB,YAAY,OAAO,OAAO,QAAQ,IAAI,eAAe;AAAA,IACrE,UAAU,QAAQ,OAAO,SAAS,MAAM,eAAe;AAAA,IACvD,qBACE,aAAa,OAAO,OAAO,SAAS,IAAI,eAAe;AAAA,EAC3D;AAAA;AAAA,IApDI,SAAS,YACT,SAAS,YACT,kBAAkB,qBAClB,cAAc,iBACd,eAAe,kBAaR;AAAA;AAAA,EAnBb;AAAA,EAmBa,iBAA+B;AAAA,IAC1C,MAAM;AAAA,IACN,MAAM;AAAA,IACN,gBAAgB,cAAc,QAAQ,IAAI,uBAAuB,KAAM;AAAA,IACvE,UAAU;AAAA,IACV,qBAAqB,OAAO,QAAQ,IAAI,kBAAkB,KAAK,IAAI,OAAO,OAAO;AAAA,EACnF;AAAA;;;ACQA,SAAS,IAAI,CAAC,KAAc,KAAqB;AAAA,EAC/C,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,aAAa,IAAI,GAAG;AAAA,EAC/C,IAAI,CAAC;AAAA,IAAG,MAAM,IAAI,QAAQ,iBAAiB,wBAAwB,KAAK;AAAA,EACxE,OAAO;AAAA;AAGT,SAAS,MAAM,CAAC,IAAgE;AAAA,EAC9E,OAAO,OAAO,KAAK,QAAQ;AAAA,IACzB,IAAI;AAAA,MACF,OAAO,SAAS,KAAM,MAAM,GAAG,KAAK,GAAG,KAAM,IAAI;AAAA,MACjD,OAAO,GAAG;AAAA,MACV,OAAO,cAAc,CAAC;AAAA;AAAA;AAAA;AAAA,IA/BtB,YAMA,qBACA,gBAUA,gBACA,gBAkBO;AAAA;AAAA,EAvDb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAgBM,aAAa,iBAAE,OAAO;AAAA,IAC1B,IAAI,iBAAE,OAAO;AAAA,IACb,MAAM,iBAAE,OAAO;AAAA,IACf,OAAO,iBAAE,OAAO,EAAE,SAAS;AAAA,IAC3B,aAAa,iBAAE,OAAO;AAAA,EACxB,CAAC;AAAA,EACK,sBAAsB,WAAW,OAAO,EAAE,YAAY,iBAAE,OAAO,EAAE,CAAC;AAAA,EAClE,iBAAiB,iBAAE,OAAO;AAAA,IAC9B,IAAI,iBAAE,OAAO;AAAA,IACb,SAAS,iBAAE,OAAO;AAAA,IAClB,MAAM,iBAAE,OAAO;AAAA,IACf,cAAc,iBAAE,OAAO;AAAA,IACvB,UAAU,iBAAE,OAAO;AAAA,EACrB,CAAC;AAAA,EAIK,iBAAiB,iBAAE,OAAO,EAAE,MAAM,iBAAE,OAAO,GAAG,OAAO,iBAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAAA,EAC5E,iBAAiB,iBAAE,OAAO,EAAE,MAAM,iBAAE,OAAO,EAAE,SAAS,GAAG,OAAO,iBAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAAA,EAkBhF,cAAuB;AAAA,IAClC;AAAA,MACE,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,UAAU,iBAAE,MAAM,mBAAmB;AAAA,MACrC,SAAS,OAAO,CAAC,QAAQ,SACvB,UAAU,EAAE,EAAE,IAAI,CAAC,OAAO,KAAK,GAAG,YAAY,UAAU,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,CAC7E;AAAA,IACF;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,UAAU,iBAAE,MAAM,cAAc;AAAA,MAChC,SAAS,OAAO,CAAC,OAAO,SAAS,UAAU,IAAI,YAAY,IAAI,KAAK,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC;AAAA,IACvF;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,MACT,UAAU;AAAA,MACV,SAAS,OAAO,OAAO,OAAO,SAAS;AAAA,QACrC,MAAM,OAAO,eAAe,MAAM,MAAM,IAAI,KAAK,CAAC;AAAA,QAClD,OAAO,WAAW,IAAI,IAAI;AAAA,OAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,MACT,UAAU;AAAA,MACV,SAAS,OAAO,OAAO,OAAO,SAAS;AAAA,QACrC,MAAM,OAAO,eAAe,MAAM,MAAM,IAAI,KAAK,CAAC;AAAA,QAClD,OAAO,WAAW,IAAI,KAAK,KAAK,IAAI,GAAG,IAAI;AAAA,OAC5C;AAAA,IACH;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,UAAU,iBAAE,OAAO,EAAE,IAAI,iBAAE,QAAQ,EAAE,CAAC;AAAA,MACtC,SAAS,OAAO,CAAC,OAAO,UAAU,EAAE,IAAI,WAAW,IAAI,KAAK,KAAK,IAAI,CAAC,EAAE,EAAE;AAAA,IAC5E;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,UAAU;AAAA,MACV,SAAS,OAAO,OAAO,OAAO,SAAS;AAAA,QACrC,MAAM,OAAO,YAAY,IAAI,KAAK,KAAK,MAAM,CAAC;AAAA,QAE9C,MAAM,KAAK,IAAI,QAAQ,IAAI,cAAc;AAAA,QACzC,MAAM,QAAO,MAAM,QAAQ,IAAI,KAAK,IAAI,KAAK,KAAK,MAAM,GAAG;AAAA,UACzD,MAAM,MAAM,IAAI,YAAY;AAAA,UAC5B,aAAa,MAAM,OAAO,6BAA6B,KAAK;AAAA,QAC9D,CAAC;AAAA,QACD,QAAQ,SAAS,aAAa,YAAY;AAAA,QAC1C,OAAO;AAAA,OACR;AAAA,IACH;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,UAAU,iBAAE,OAAO,EAAE,IAAI,iBAAE,QAAQ,EAAE,CAAC;AAAA,MACtC,SAAS,OAAO,CAAC,OAAO,UAAU;AAAA,QAChC,IAAI,WAAW,IAAI,YAAY,IAAI,KAAK,KAAK,MAAM,CAAC,EAAE,IAAI,KAAK,KAAK,MAAM,CAAC;AAAA,MAC7E,EAAE;AAAA,IACJ;AAAA,EACF;AAAA;;;AC3GA,eAAe,eAAe,CAAC,IAAc,MAA4B;AAAA,EACvE,MAAM,WAAW,aAAa,IAAI,EAAY,GAAG,IAAI,IAAG;AAAA,EACxD,IAAI;AAAA,IAAU,MAAM,SAAS,MAAM,MAAG;AAAA,MAAG;AAAA,KAAS;AAAA;AAuB7C,SAAS,SAAS,CAAC,IAAyB;AAAA,EACjD,OAAO,GAAG,MAAM,UAAU,mCAAmC,EAAE,IAAI;AAAA;AAG9D,SAAS,QAAO,CAAC,IAAc,MAA6B;AAAA,EACjE,OACG,GAAG,MAAM,UAAU,oCAAoC,EAAE,IAAI,IAAG,KAAwB;AAAA;AAYtF,SAAS,OAAO,CAAC,IAAc,OAA2B;AAAA,EAC/D,GAAG,MACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAOF,EAAE,IAAI,MAAM,KAAK,MAAM,SAAS,MAAM,MAAM,SAAS,MAAM,MAAM,WAAW,IAAI;AAAA;AAW3E,SAAS,cAAc,CAAC,IAAc,OAAkC;AAAA,EAC7E,GAAG,MACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAOF,EAAE,IAAI,MAAM,KAAK,KAAK,UAAU,MAAM,MAAM,GAAG,MAAM,SAAS,IAAI;AAAA;AAGpE,SAAS,cAAc,CAAC,IAAc,KAAoB;AAAA,EACxD,GAAG,MACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAcF,EAAE,IACA,IAAI,aACJ,IAAI,aACJ,IAAI,OACJ,IAAI,OACJ,IAAI,SACJ,IAAI,SACJ,IAAI,cACJ,IAAI,iBACJ,IAAI,aACJ,IAAI,YACJ,IAAI,MACJ,IAAI,QACJ,IAAI,GACN;AAAA;AAiCF,eAAsB,qBAAqB,CACzC,IACA,MACmE;AAAA,EACnE,MAAM,SAAS,KAAK,QAAQ,KAAK,KAAK;AAAA,EACtC,MAAM,UAAU,KAAK,YAAY;AAAA,EACjC,MAAM,UAAmB;AAAA,IACvB,UAAU,KAAK,SAAS,KAAK;AAAA,IAC7B,QAAQ,KAAK,QAAQ,KAAK,KAAK;AAAA,IAC/B,QAAQ,KAAK,OAAO,KAAK;AAAA,IACzB;AAAA,IACA,aAAa,KAAK,YAAY,KAAK;AAAA,IACnC,iBAAiB,KAAK,gBAAgB,KAAK;AAAA,IAC3C;AAAA,IACA,oBAAoB,KAAK;AAAA,IACzB,SAAS,KAAK;AAAA,IACd,UAAU,KAAK;AAAA,EACjB;AAAA,EACA,IAAI,SAAS;AAAA,IACX,IAAI,CAAC,KAAK;AAAA,MAAY,MAAM,IAAI,QAAQ,iBAAiB,6CAA6C;AAAA,IACtG,QAAO,YACJ,MAAM,mBAAmB,iBAAiB,OAAM,GAAG,SAAQ,KAAK,UAAU,KAAM;AAAA,EACrF;AAAA,EACA,MAAM,OAAM,WAAW,QAAO,QAAQ,MAAM;AAAA,EAC5C,MAAM,gBAAgB,IAAI,IAAG;AAAA,EAC7B,MAAM,WAAW,SAAQ,IAAI,IAAG;AAAA,EAChC,eAAe,IAAI,EAAE,WAAK,iBAAQ,OAAO,KAAK,SAAS,QAAO,OAAO,CAAC;AAAA,EACtE,MAAM,OAAO,MAAM,SAAS,IAAI,IAAG;AAAA,EACnC,IAAI,CAAC,KAAK,IAAI;AAAA,IACZ,IAAI;AAAA,MAAU,eAAe,IAAI,QAAQ;AAAA,IACpC;AAAA,iBAAW,IAAI,IAAG;AAAA,IACvB,MAAM,IAAI,QAAQ,WAAW,mCAAmC,KAAK,SAAS,iBAAiB;AAAA,EACjG;AAAA,EACA,OAAO,EAAE,WAAK,iBAAQ,KAAK;AAAA;AAStB,SAAS,UAAU,CAAC,IAAc,MAAsB;AAAA,EAC7D,MAAM,KAAK,GAAG,YAAY,MAAM;AAAA,IAC9B,MAAM,UAAU,GAAG,MAAM,iCAAiC,EAAE,IAAI,IAAG,EAAE,UAAU;AAAA,IAC/E,GAAG,MAAM,4CAA4C,EAAE,IAAI,IAAG;AAAA,IAE9D,GAAG,MAAM,gDAAgD,EAAE,IAAI,IAAG;AAAA,IAClE,OAAO;AAAA,GACR;AAAA,EACD,OAAO,GAAG;AAAA;AAGL,SAAS,cAAc,CAAC,IAAc,MAAa,SAA2B;AAAA,EACnF,OACE,GAAG,MAAM,4CAA4C,EAAE,IAAI,UAAU,IAAI,GAAG,IAAG,EAAE,UAAU;AAAA;AAIxF,SAAS,YAAY,CAAC,IAAc,MAAa,OAAwB;AAAA,EAC9E,OAAO,GAAG,MAAM,0CAA0C,EAAE,IAAI,OAAO,IAAG,EAAE,UAAU;AAAA;AAGjF,SAAS,gBAAgB,CAC9B,IACA,MACA,QACA,SACM;AAAA,EACN,MAAM,MAAM,KAAK,IAAI;AAAA,EACrB,IAAI,WAAW,MAAM;AAAA,IACnB,GAAG,MACD,uGACF,EAAE,IAAI,KAAK,KAAK,QAAQ,WAAS,MAAM,IAAG;AAAA,IAC1C;AAAA,EACF;AAAA,EACA,GAAG,MACD,kFACF,EAAE,IAAI,KAAK,QAAQ,WAAS,MAAM,IAAG;AAAA;AAevC,eAAsB,QAAQ,CAC5B,IACA,MACA,MAC0B;AAAA,EAC1B,IAAI,QAAQ,aAAa,IAAI,EAAY;AAAA,EACzC,IAAI,CAAC,OAAO;AAAA,IACV,QAAQ,IAAI;AAAA,IACZ,aAAa,IAAI,IAAc,KAAK;AAAA,EACtC;AAAA,EACA,MAAM,WAAW,MAAM,IAAI,IAAG;AAAA,EAC9B,IAAI;AAAA,IAAU,OAAO;AAAA,EACrB,MAAM,MAAM,aAAa,IAAI,MAAK,IAAI,EAAE,QAAQ,MAAM;AAAA,IACpD,IAAI,MAAM,IAAI,IAAG,MAAM;AAAA,MAAK,MAAM,OAAO,IAAG;AAAA,GAC7C;AAAA,EACD,MAAM,IAAI,MAAK,GAAG;AAAA,EAClB,OAAO;AAAA;AAGT,eAAe,YAAY,CACzB,IACA,MACA,MAC0B;AAAA,EAC1B,IAAI;AAAA,IACF,MAAM,OAAO,SAAQ,IAAI,IAAG;AAAA,IAC5B,IAAI;AAAA,IACJ,IAAI,MAAM,SAAS,MAAM;AAAA,MACvB,IAAI,CAAC,KAAK;AAAA,QAAQ,MAAM,IAAI,MAAM,gBAAgB,oBAAmB;AAAA,MACrE,MAAM,UAAS,KAAK,MAAM,KAAK,MAAM;AAAA,MAGrC,MAAM,cAA+B;AAAA,WAChC,MAAM;AAAA,QACT,SAAS,MAAM,SAAS,WAAW,QAAO;AAAA,QAC1C,UAAU,MAAM,SAAS,YAAY,QAAO;AAAA,MAC9C;AAAA,MACA,SAAS,MAAM,gBAAgB,IAAI,MAAK,iBAAiB,OAAM,GAAG,SAAQ,WAAW;AAAA,IACvF,EAAO;AAAA,MACL,SAAS,MAAM,aAAa,IAAI,IAAG;AAAA;AAAA,IAErC,iBAAiB,IAAI,MAAK,MAAM,IAAI;AAAA,IACpC,OAAO,EAAE,WAAK,IAAI,MAAM,QAAQ,OAAO,QAAQ,QAAQ,OAAO,QAAQ,aAAa,OAAO,YAAY;AAAA,IACtG,OAAO,GAAG;AAAA,IACV,MAAM,UAAS,EAAY;AAAA,IAC3B,iBAAiB,IAAI,MAAK,SAAS,OAAK;AAAA,IACxC,OAAO,EAAE,WAAK,IAAI,OAAO,eAAM;AAAA;AAAA;AAAA,IAzR7B,YACJ,uIACI,cA+GO,aAAa,CAAC,QAAgB,WAAmB,QAAQ,UAAU,UAqL1E;AAAA;AAAA,EAhTN;AAAA,EACA;AAAA,EACA;AAAA,EAUM,eAAe,IAAI;AAAA,EAoSnB,2BAA2B,IAAI;AAAA;;;AC1R9B,SAAS,mBAAmB,CAAC,IAAc,QAAgB,qBAAkC;AAAA,EAClG,MAAM,MAAM,KAAK,IAAI;AAAA,EAErB,GAAG,MAAM,qDAAqD,EAAE,IAAI,GAAG;AAAA,EACvE,MAAM,OAAO,aAAa,EAAE;AAAA,EAC5B,MAAM,MAAM,MAAM;AAAA,EAClB,GAAG,MACD,6EACF,EAAE,IAAI,MAAM,KAAK,GAAG;AAAA,EACpB,OAAO,EAAE,MAAM,IAAI;AAAA;AAQd,SAAS,iBAAiB,CAAC,IAAc,MAAuB;AAAA,EACrE,OACE,GACG,MAAM,4EAA4E,EAClF,IAAI,MAAM,KAAK,IAAI,CAAC,EAAE,UAAU;AAAA;AAKhC,SAAS,SAAS,CAAC,IAAc,SAAwB,QAA+B;AAAA,EAC7F,MAAM,QAAQ,aAAa,EAAE;AAAA,EAC7B,GAAG,MACD,oFACF,EAAE,IAAI,OAAO,SAAS,QAAQ,KAAK,IAAI,CAAC;AAAA,EACxC,OAAO;AAAA;AAIF,SAAS,eAAe,CAAC,IAAc,OAAwB;AAAA,EACpE,OAAO,GAAG,MAAM,2CAA2C,EAAE,IAAI,KAAK,KAAK;AAAA;AAWtE,SAAS,UAAU,CAAC,IAA0B;AAAA,EACnD,OAAO,GACJ,MAAM,uFAAuF,EAC7F,IAAI;AAAA;AAQF,SAAS,WAAW,CAAC,IAAc,eAA+B;AAAA,EACvE,OAAO,GACJ,MAAM,gEAAgE,EACtE,IAAI,eAAe,aAAa,EAAE;AAAA;AAOhC,SAAS,iBAAiB,CAAC,IAAc,MAAc,MAAiC;AAAA,EAC7F,IAAI,CAAC,kBAAkB,IAAI,KAAK,IAAI,GAAG;AAAA,IACrC,MAAM,IAAI,QAAQ,QAAQ,iCAAiC;AAAA,EAC7D;AAAA,EAEA,IAAI,KAAK,UAAU;AAAA,IACjB,QAAQ,IAAI,EAAE,KAAK,KAAK,UAAU,OAAO,KAAK,OAAO,SAAS,KAAK,QAAQ,CAAC;AAAA,EAC9E;AAAA,EAEA,MAAM,QAAQ,UAAU,IAAI,KAAK,YAAY,MAAM,KAAK,OAAO;AAAA,EAC/D,OAAO,EAAE,SAAS,MAAM,MAAM;AAAA;AAahC,eAAsB,cAAc,CAClC,IACA,MACA,WACA,MACA,SACsB;AAAA,EAEtB,MAAM,WAAW,UAAU,IAAI,WAAW,IAAI;AAAA,EAC9C,MAAM,UAAuB,EAAE,MAAM,SAAS,MAAM,OAAO,UAAU,UAAU,QAAQ;AAAA,EAEvF,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,WAAW,SAAS,GAAG;AAAA,IACrD,QAAQ;AAAA,IACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,IAC9C,MAAM,KAAK,UAAU,OAAO;AAAA,EAC9B,CAAC;AAAA,EACD,IAAI,CAAC,IAAI;AAAA,IACP,MAAM,IAAI,QACR,IAAI,WAAW,OAAO,IAAI,WAAW,MAAM,SAAS,WACpD,mBAAmB,IAAI,UAAU,MAAM,IAAI,KAAK,GAClD;AAAA,EAEF,MAAM,OAAQ,MAAM,IAAI,KAAK;AAAA,EAE7B,QAAQ,IAAI,EAAE,KAAK,WAAW,OAAO,KAAK,OAAO,SAAS,KAAK,QAAQ,CAAC;AAAA,EACxE,OAAO,EAAE,SAAS,KAAK,SAAS,KAAK,UAAU;AAAA;AAAA,IA5HpC;AAAA;AAAA,EAPb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAGa,sBAAsB,cAAc,QAAQ,IAAI,kBAAkB,KAAK,KAAM;AAAA;;;AC4F1F,SAAS,KAAI,CAAC,KAAc,KAAqB;AAAA,EAC/C,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,aAAa,IAAI,GAAG;AAAA,EAC/C,IAAI,CAAC;AAAA,IAAG,MAAM,IAAI,QAAQ,iBAAiB,wBAAwB,KAAK;AAAA,EACxE,OAAO;AAAA;AAST,SAAS,WAAW,CAAC,IAAoD;AAAA,EACvE,OAAO,UAAU,EAAE,EAChB,OAAO,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,MAAM,EACzC,IAAI,CAAC,MAAM;AAAA,IACV,MAAM,IAAI,KAAK,MAAM,EAAE,MAAO;AAAA,IAC9B,OAAO;AAAA,MACL,KAAK,EAAE;AAAA,MACP,OAAO,EAAE;AAAA,MACT,SAAS,EAAE;AAAA,MACX,QAAQ,EAAE;AAAA,MACV,OAAO,EAAE;AAAA,MACT,YAAY,EAAE;AAAA,MACd,eAAe,EAAE;AAAA,MACjB,SAAS,EAAE,YAAY;AAAA,MACvB,UAAU,EAAE,YAAY;AAAA,MACxB,QAAQ,EAAE,UAAU;AAAA,MACpB,QAAQ,EAAE,UAAU;AAAA,MACpB,QAAQ,EAAE,UAAU;AAAA,MACpB,aAAa,EAAE,eAAe;AAAA,MAC9B,SAAS,EAAE,YAAY;AAAA,MACvB,oBAAoB,EAAE,sBAAsB;AAAA,IAC9C;AAAA,GACD;AAAA;AAOL,SAAS,YAAY,CAAC,IAAoB,MAAuB;AAAA,EAC/D,MAAM,IAAI,UAAU,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,QAAO,EAAE,SAAS,QAAQ,EAAE,MAAM;AAAA,EAChF,IAAI,CAAC;AAAA,IAAG,MAAM,IAAI,QAAQ,aAAa,mBAAmB,gBAAe;AAAA,EACzE,OAAO,KAAK,MAAM,EAAE,MAAO;AAAA;AAG7B,SAAS,OAAM,CACb,IACkB;AAAA,EAClB,OAAO,OAAO,KAAK,QAAQ;AAAA,IACzB,IAAI;AAAA,MACF,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG;AAAA,MAC7B,IAAI,eAAe;AAAA,QAAU,OAAO;AAAA,MACpC,OAAO,SAAS,KAAK,OAAO,IAAI;AAAA,MAChC,OAAO,GAAG;AAAA,MACV,OAAO,cAAc,CAAC;AAAA;AAAA;AAAA;AAAA,IArItB,YAaA,mBACA,YAKA,YACA,eAIA,aAOA,cAcA,cAqBA,aAMA,WACA,UAmEO;AAAA;AAAA,EA/Kb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAMA;AAAA,EAOA;AAAA,EAQA;AAAA,EAWM,aAAa,iBAAE,OAAO;AAAA,IAC1B,KAAK,iBAAE,OAAO;AAAA,IACd,aAAa,iBAAE,OAAO;AAAA,IACtB,aAAa,iBAAE,OAAO;AAAA,IACtB,OAAO,iBAAE,OAAO,EAAE,SAAS;AAAA,IAC3B,OAAO,iBAAE,OAAO,EAAE,SAAS;AAAA,IAC3B,SAAS,iBAAE,OAAO,EAAE,SAAS;AAAA,IAC7B,SAAS,iBAAE,OAAO;AAAA,IAClB,cAAc,iBAAE,OAAO,EAAE,SAAS;AAAA,IAClC,iBAAiB,iBAAE,OAAO,EAAE,SAAS;AAAA,IACrC,aAAa,iBAAE,OAAO,EAAE,SAAS;AAAA,IACjC,YAAY,iBAAE,OAAO,EAAE,SAAS;AAAA,EAClC,CAAC;AAAA,EACK,oBAAoB,iBAAE,OAAO,EAAE,MAAM,iBAAE,OAAO,GAAG,KAAK,iBAAE,OAAO,EAAE,CAAC;AAAA,EAClE,aAAa,iBAAE,OAAO;AAAA,IAC1B,KAAK,iBAAE,OAAO;AAAA,IACd,MAAM,iBAAE,OAAO;AAAA,IACf,UAAU,iBAAE,OAAO,EAAE,SAAS;AAAA,EAChC,CAAC;AAAA,EACK,aAAa,iBAAE,OAAO,EAAE,SAAS,iBAAE,OAAO,GAAG,KAAK,iBAAE,OAAO,EAAE,CAAC;AAAA,EAC9D,gBAAgB,iBAAE,OAAO;AAAA,IAC7B,SAAS,iBAAE,QAAQ,EAAE,SAAS;AAAA,IAC9B,OAAO,iBAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,CAAC;AAAA,EACK,cAAc,iBAAE,OAAO;AAAA,IAC3B,KAAK,iBAAE,OAAO;AAAA,IACd,IAAI,iBAAE,QAAQ;AAAA,IACd,QAAQ,iBAAE,OAAO,EAAE,SAAS;AAAA,IAC5B,QAAQ,iBAAE,OAAO,EAAE,SAAS;AAAA,IAC5B,OAAO,iBAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,CAAC;AAAA,EACK,eAAe,iBAAE,OAAO;AAAA,IAC5B,UAAU,iBAAE,OAAO;AAAA,IACnB,QAAQ,iBAAE,OAAO;AAAA,IACjB,aAAa,iBAAE,OAAO;AAAA,IACtB,iBAAiB,iBAAE,OAAO;AAAA,IAC1B,QAAQ,iBAAE,OAAO,EAAE,SAAS;AAAA,IAC5B,QAAQ,iBAAE,OAAO,EAAE,SAAS;AAAA,IAC5B,SAAS,iBAAE,QAAQ,EAAE,SAAS;AAAA,IAC9B,YAAY,iBAAE,OAAO,EAAE,SAAS;AAAA,IAGhC,aAAa,iBAAE,MAAM,iBAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC5C,CAAC;AAAA,EAEK,eAAe,iBAAE,OAAO;AAAA,IAC5B,KAAK,iBAAE,OAAO;AAAA,IACd,OAAO,iBAAE,OAAO,EAAE,SAAS;AAAA,IAC3B,SAAS,iBAAE,OAAO;AAAA,IAClB,QAAQ,iBAAE,OAAO,EAAE,SAAS;AAAA,IAC5B,OAAO,iBAAE,OAAO,EAAE,SAAS;AAAA,IAC3B,YAAY,iBAAE,OAAO,EAAE,SAAS;AAAA,IAChC,eAAe,iBAAE,OAAO,EAAE,SAAS;AAAA,IACnC,SAAS,iBAAE,QAAQ;AAAA,IACnB,UAAU,iBAAE,OAAO,EAAE,SAAS;AAAA,IAC9B,QAAQ,iBAAE,OAAO,EAAE,SAAS;AAAA,IAK5B,QAAQ,iBAAE,OAAO,EAAE,SAAS;AAAA,IAC5B,QAAQ,iBAAE,OAAO,EAAE,SAAS;AAAA,IAC5B,aAAa,iBAAE,OAAO,EAAE,SAAS;AAAA,IACjC,SAAS,iBAAE,QAAQ;AAAA,IACnB,oBAAoB,iBAAE,QAAQ,EAAE,SAAS;AAAA,EAC3C,CAAC;AAAA,EACK,cAAc,iBAAE,OAAO;AAAA,IAC3B,OAAO,iBAAE,OAAO;AAAA,IAChB,UAAU,iBAAE,OAAO,EAAE,SAAS;AAAA,IAC9B,SAAS,iBAAE,OAAO,EAAE,SAAS;AAAA,IAC7B,YAAY,iBAAE,OAAO,EAAE,SAAS;AAAA,EAClC,CAAC;AAAA,EACK,YAAY,iBAAE,OAAO,EAAE,SAAS,iBAAE,OAAO,EAAE,CAAC;AAAA,EAC5C,WAAW,iBAAE,OAAO,EAAE,IAAI,iBAAE,QAAQ,EAAE,CAAC;AAAA,EAmEhC,cAAuB;AAAA,IAClC;AAAA,MACE,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,MACT,UAAU;AAAA,MACV,SAAS,QAAO,OAAO,OAAO,IAAI,WAAW;AAAA,QAC3C,MAAM,OAAQ,MAAM,IAAI,KAAK;AAAA,QAC7B,OAAO,kBAAkB,IAAI,MAAM,IAAI;AAAA,OACxC;AAAA,IACH;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,UAAU;AAAA,MACV,SAAS,QAAO,CAAC,QAAQ,SAAS,oBAAoB,EAAE,CAAC;AAAA,IAC3D;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,MACT,UAAU;AAAA,MACV,SAAS,QAAO,OAAO,OAAO,IAAI,WAAW;AAAA,QAC3C,MAAM,OAAQ,MAAM,IAAI,KAAK;AAAA,QAC7B,OAAO,eAAe,IAAI,MAAM,KAAK,KAAK,KAAK,MAAM,KAAK,QAAQ;AAAA,OACnE;AAAA,IACH;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,UAAU,iBAAE,MAAM,UAAU;AAAA,MAC5B,SAAS,QAAO,CAAC,QAAQ,SAAS,UAAU,EAAE,CAAC;AAAA,IACjD;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,MACT,UAAU;AAAA,MACV,SAAS,QAAO,OAAO,OAAO,SAAS;AAAA,QACrC,MAAM,OAAM,MAAK,KAAK,KAAK;AAAA,QAC3B,MAAM,OAAQ,MAAM,IAAI,KAAK;AAAA,QAC7B,IAAI,KAAK,WAAW;AAAA,UAAM,eAAe,IAAI,MAAK,KAAK,OAAO;AAAA,QAC9D,IAAI,KAAK,SAAS;AAAA,UAAM,aAAa,IAAI,MAAK,KAAK,KAAK;AAAA,QACxD,OAAO,EAAE,IAAI,KAAK;AAAA,OACnB;AAAA,IACH;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,UAAU;AAAA,MACV,SAAS,QAAO,CAAC,OAAO,UAAU,EAAE,IAAI,WAAW,IAAI,MAAK,KAAK,KAAK,CAAC,EAAE,EAAE;AAAA,IAC7E;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,UAAU;AAAA,MACV,SAAS,QAAO,CAAC,OAAO,SAAS,SAAS,IAAI,MAAK,KAAK,KAAK,CAAC,CAAC;AAAA,IACjE;AAAA,IACA;AAAA,MAME,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,MACT,UAAU;AAAA,MACV,SAAS,QAAO,OAAO,OAAO,SAAS;AAAA,QACrC,QAAQ,gBAAgB,SAAU,MAAM,IAAI,KAAK;AAAA,QACjD,QAAQ,WAAK,oBAAW,MAAM,sBAAsB,IAAI,KAAK,MAAM,SAAS,MAAM,UAAU,IAAI,CAAC;AAAA,QAKjG,IAAI,aAAa,QAAQ;AAAA,UACvB,IAAI;AAAA,YACF,MAAM,cAAc,SAAQ,aAAa,EAAE,OAAO,KAAK,CAAC;AAAA,YACxD,MAAM;AAAA,QAGV;AAAA,QACA,MAAM,OAAO,YAAY,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,IAAG;AAAA,QACtD,IAAI,CAAC;AAAA,UAAM,MAAM,IAAI,QAAQ,aAAa,gBAAgB,wBAAuB;AAAA,QACjF,OAAO;AAAA,OACR;AAAA,IACH;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,UAAU,iBAAE,MAAM,YAAY;AAAA,MAC9B,SAAS,QAAO,CAAC,QAAQ,SAAS,YAAY,EAAE,CAAC;AAAA,IACnD;AAAA,IACA;AAAA,MAKE,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,UAAU,iBAAE,OAAO,iBAAE,OAAO,GAAG,iBAAE,QAAQ,CAAC;AAAA,MAC1C,SAAS,QAAO,CAAC,OAAO,SAAS,aAAa,IAAI,MAAK,KAAK,KAAK,CAAC,CAAC;AAAA,IACrE;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,UAAU,iBAAE,MAAM,WAAW;AAAA,MAC7B,SAAS,QAAO,CAAC,QAAQ,SAAS,WAAW,EAAE,CAAC;AAAA,IAClD;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,UAAU;AAAA,MACV,SAAS,QAAO,CAAC,OAAO,UAAU,EAAE,SAAS,YAAY,IAAI,MAAK,KAAK,OAAO,CAAC,EAAE,EAAE;AAAA,IACrF;AAAA,EACF;AAAA;;;ACzSA,iBAAS;AACT;AAmCO,SAAS,YAAY,CAAC,IAA6B;AAAA,EACxD,OAAO,UAAU,EAAE,EAChB,OAAO,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,MAAM,EACzC,IAAI,CAAC,MAAM;AAAA,IACV,IAAI,SAAwB;AAAA,IAC5B,IAAI;AAAA,MACF,SAAU,KAAK,MAAM,EAAE,MAAO,EAAe,UAAU;AAAA,MACvD,MAAM;AAAA,IAGR,OAAO,EAAE,KAAK,EAAE,KAAK,OAAO,EAAE,OAAO,OAAO;AAAA,GAC7C;AAAA;AAOL,eAAe,YAAY,CAAC,IAAc,OAAc,OAAkC;AAAA,EACxF,MAAM,UAAU,OAAM,KAAK;AAAA,EAC3B,WAAW,IAAI,OAAM,MAAM,YAAY,MAAM,CAAC;AAAA;AAUhD,eAAsB,WAAW,CAAC,IAAc,OAA0C;AAAA,EACxF,MAAM,QAAQ,MAAM,QAAQ,KAAI;AAAA,EAChC,IAAI,OAAO;AAAA,IACT,UAAU,IAAI,KAAI;AAAA,IAClB,OAAO;AAAA,EACT;AAAA,EACA,WAAW,QAAQ,UAAU,EAAE,GAAG;AAAA,IAChC,IAAI,CAAC,KAAK;AAAA,MAAS;AAAA,IACnB,IAAI;AAAA,MACF,IAAI,KAAK,SAAS,MAAM;AAAA,QACtB,IAAI,CAAC,KAAK;AAAA,UAAQ;AAAA,QAClB,MAAM,QAAQ,MAAM,cAAc,KAAK,MAAM,KAAK,MAAM,GAAe,KAAI;AAAA,QAC3E,IAAI,SAAS,gBAAgB,OAAO,KAAI,GAAG;AAAA,UACzC,MAAM,aAAa,IAAI,OAAM,KAAK;AAAA,UAClC,OAAO;AAAA,QACT;AAAA,MACF,EAAO;AAAA,QACL,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,SAAS,iBAAgB,KAAK,GAAG,GAAG;AAAA,UAClE,SAAS,KAAK,QAAQ,EAAE,eAAe,UAAU,KAAK,QAAQ,IAAI,CAAC;AAAA,QACrE,CAAC;AAAA,QACD,IAAI,CAAC,IAAI;AAAA,UAAI;AAAA,QACb,MAAM,QAAQ,IAAI,WAAW,MAAM,IAAI,YAAY,CAAC;AAAA,QACpD,IAAI,gBAAgB,OAAO,KAAI,GAAG;AAAA,UAChC,MAAM,aAAa,IAAI,OAAM,KAAK;AAAA,UAClC,OAAO;AAAA,QACT;AAAA;AAAA,MAEF,MAAM;AAAA,EAGV;AAAA,EACA,OAAO;AAAA;AAiBT,eAAe,YAAY,CACzB,MACA,OACA,QACsB;AAAA,EACtB,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,kBAAkB,IAAG,GAAG;AAAA,IACtD,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,gBAAgB;AAAA,SACZ,QAAQ,EAAE,eAAe,UAAU,QAAQ,IAAI,CAAC;AAAA,IACtD;AAAA,IACA,MAAM,KAAK,UAAU,EAAE,OAAO,CAAC;AAAA,EACjC,CAAC;AAAA,EACD,IAAI,CAAC,IAAI;AAAA,IAAI,MAAM,IAAI,MAAM,yBAAmB,IAAI,QAAQ;AAAA,EAC5D,MAAM,OAAQ,MAAM,IAAI,KAAK;AAAA,EAC7B,OAAO,IAAI,IAAI,KAAK,OAAO,CAAC,CAAC;AAAA;AAe/B,eAAsB,oBAAoB,CAAC,IAAqC;AAAA,EAC9E,MAAM,SAAS,WAAW,EAAE;AAAA,EAC5B,MAAM,OAAO,UAAU,EAAE;AAAA,EACzB,MAAM,UAAU,OAAO,UAAU,OAAO,CAAC,MAAM,MAAM,IAAI;AAAA,EACzD,MAAM,QAAQ,YAAY,EAAE;AAAA,EAC5B,MAAM,KAAK,KAAK,IAAI;AAAA,EAEpB,IAAI,QAAQ,WAAW,GAAG;AAAA,IACxB,WAAW,KAAK;AAAA,MAAO,YAAY,IAAI,EAAE,MAAM,KAAK;AAAA,IACpD,oBAAoB,IAAI,EAAE;AAAA,IAC1B,OAAO,EAAE,eAAe,GAAG,eAAe,GAAG,aAAa,CAAC,GAAG,GAAG;AAAA,EACnE;AAAA,EAEA,MAAM,QAAQ,UAAU,EAAE;AAAA,EAC1B,MAAM,cAAc,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI;AAAA,EAC3C,MAAM,aAA4B,CAAC;AAAA,EACnC,MAAM,cAAwB,CAAC;AAAA,EAE/B,WAAW,KAAK,SAAS;AAAA,IACvB,IAAI,OAA0B;AAAA,IAC9B,IAAI;AAAA,MACF,IAAI,EAAE,WAAW,OAAO,GAAG;AAAA,QACzB,MAAM,OAAO,MAAM,KAAK,CAAC,MAAM,EAAE,QAAQ,KAAK,EAAE,SAAS,QAAQ,EAAE,MAAM;AAAA,QACzE,IAAI;AAAA,UAAM,OAAM,MAAM,qBAAqB,KAAK,MAAM,KAAK,MAAO,CAAa;AAAA,MACjF,EAAO;AAAA,QACL,MAAM,OAAO,MAAM,KAAK,CAAC,MAAM,EAAE,YAAY,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG;AAAA,QAC1E,IAAI;AAAA,UAAM,OAAM,MAAM,aAAa,KAAK,KAAK,KAAK,OAAO,WAAW;AAAA;AAAA,MAEtE,MAAM;AAAA,MACN,OAAM;AAAA;AAAA,IAER,IAAI;AAAA,MAAK,WAAW,KAAK,IAAG;AAAA,IACvB;AAAA,kBAAY,KAAK,CAAC;AAAA,EACzB;AAAA,EAEA,MAAM,eAAe,YAAY,WAAW;AAAA,EAC5C,IAAI,gBAAgB;AAAA,EACpB,IAAI,gBAAgB;AAAA,EACpB,WAAW,KAAK,OAAO;AAAA,IACrB,MAAM,YAAY,WAAW,OAAO,CAAC,GAAG,MAAM,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC;AAAA,IAC5E,MAAM,KACJ,OAAO,eAAe,QAClB,gBAAgB,cAAc,QAAQ,SACtC,aAAa;AAAA,IACnB,YAAY,IAAI,EAAE,MAAM,EAAE;AAAA,IAC1B,IAAI,IAAI;AAAA,MACN;AAAA,MACA,iBAAiB,EAAE;AAAA,IACrB;AAAA,EACF;AAAA,EACA,oBAAoB,IAAI,EAAE;AAAA,EAC1B,OAAO,EAAE,eAAe,eAAe,aAAa,GAAG;AAAA;AAuBzD,eAAsB,eAAe,CAAC,IAA8C;AAAA,EAClF,IAAI,WAAW;AAAA,EACf,IAAI,UAAU;AAAA,EACd,MAAM,UAAU,UAAU,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,QAAQ,EAAE,MAAM;AAAA,EAIpF,IAAI,eAAe,EAAE,GAAG;AAAA,IACtB,WAAW,SAAQ,iBAAiB,EAAE,GAAG;AAAA,MACvC,IAAI,MAAM,QAAQ,KAAI;AAAA,QAAG;AAAA,MACzB,IAAI,MAAM,YAAY,IAAI,KAAI;AAAA,QAAG;AAAA,IACnC;AAAA,EACF;AAAA,EAIA,IAAI,QAAQ,SAAS,GAAG;AAAA,IACtB,aAAa,iBAAU,aAAa,EAAE,GAAG;AAAA,MACvC,MAAM,QAAQ,MAAM,QAAQ,KAAI;AAAA,MAChC,IAAI,CAAC;AAAA,QAAO;AAAA,MACZ,IAAI,KAAK;AAAA,MACT,WAAW,KAAK,SAAS;AAAA,QACvB,IAAI;AAAA,UACF,MAAM,cAAc,KAAK,MAAM,EAAE,MAAO,GAAe,OAAM,KAAK;AAAA,UAClE,MAAM;AAAA,UACN,KAAK;AAAA;AAAA,MAET;AAAA,MACA,IAAI,IAAI;AAAA,QACN,WAAW,IAAI,OAAM,KAAK;AAAA,QAC1B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAGA,QAAQ,YAAY,MAAM,aAAa,IAAI,gBAAgB,EAAE,EAAE,mBAAmB;AAAA,EAClF,OAAO,EAAE,UAAU,SAAS,QAAQ;AAAA;AAmBtC,eAAsB,YAAY,CAAC,IAAc,YAA0C;AAAA,EACzF,IAAI,UAAU;AAAA,EACd,IAAI,aAAa;AAAA,EACjB,IAAI,cAAc;AAAA,IAAG,OAAO,EAAE,SAAS,WAAW;AAAA,EAClD,eAAe,EAAE;AAAA,EACjB,IAAI,QAAQ,YAAY,EAAE;AAAA,EAC1B,IAAI,QAAQ,MAAM,OAAO,CAAC,GAAG,MAAM,IAAI,EAAE,MAAM,CAAC;AAAA,EAChD,IAAI,SAAS;AAAA,IAAY,OAAO,EAAE,SAAS,WAAW;AAAA,EAMtD,MAAM,qBAAqB,EAAE;AAAA,EAC7B,QAAQ,YAAY,EAAE;AAAA,EACtB,MAAM,WAAW,KAAK,MAAM,aAAa,eAAe;AAAA,EAExD,MAAM,aAAa,MAChB,OAAO,CAAC,MAAM,CAAC,EAAE,UAAU,YAAY,IAAI,EAAE,IAAI,CAAC,EAClD,KAAK,CAAC,GAAG,OAAO,EAAE,eAAe,MAAM,EAAE,eAAe,EAAE;AAAA,EAC7D,WAAW,KAAK,YAAY;AAAA,IAC1B,IAAI,SAAS;AAAA,MAAU;AAAA,IACvB,cAAc,MAAM,WAAW,EAAE,IAAI;AAAA,IACrC,WAAW,IAAI,EAAE,IAAI;AAAA,IACrB,SAAS,EAAE;AAAA,IACX;AAAA,EACF;AAAA,EACA,OAAO,EAAE,SAAS,WAAW;AAAA;AAsBxB,SAAS,cAAc,CAAC,IAAoB;AAAA,EACjD,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,QAAQ,YAAY,SAAS,CAAC;AAAA,IAC9B,MAAM;AAAA,IACN;AAAA;AAAA,EAEF,MAAM,QAAQ,IAAI,IAAI,YAAY,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;AAAA,EACxD,WAAW,QAAQ,OAAO;AAAA,IACxB,IAAI,MAAM,IAAI,IAAI;AAAA,MAAG;AAAA,IACrB,IAAI;AAAA,MACF,MAAM,KAAK,SAAS,MAAK,SAAS,GAAG,IAAI,CAAC;AAAA,MAC1C,IAAI,GAAG,OAAO;AAAA,QAAG,WAAW,IAAI,MAAM,GAAG,MAAM,IAAI;AAAA,MACnD,MAAM;AAAA,EAGV;AAAA;AAKF,eAAsB,UAAU,CAAC,IAAoC;AAAA,EACnE,eAAe,EAAE;AAAA,EACjB,IAAI,UAAU;AAAA,EACd,IAAI,aAAa;AAAA,EACjB,IAAI,UAAU;AAAA,EACd,WAAW,KAAK,YAAY,EAAE,GAAG;AAAA,IAE/B,IAAI,EAAE,UAAU,CAAC,YAAY,IAAI,EAAE,IAAI,GAAG;AAAA,MACxC;AAAA,MACA;AAAA,IACF;AAAA,IACA,cAAc,MAAM,WAAW,EAAE,IAAI;AAAA,IACrC,WAAW,IAAI,EAAE,IAAI;AAAA,IACrB;AAAA,EACF;AAAA,EACA,OAAO,EAAE,SAAS,YAAY,QAAQ;AAAA;AAAA,IA9FlC,kBAAkB;AAAA;AAAA,EAtQxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAeA;AAAA;;;;;;;;ACjBA,SAAS,GAAG,CAAC,IAAoB;AAAA,EAC/B,MAAM,IAAI,GAAG,YAAY,EAAE,MAAM,GAAG,EAAE,GAAI,KAAK;AAAA,EAC/C,MAAM,OAA8B;AAAA,IAClC,aAAa;AAAA,IACb,cAAc;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,IACd,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,EACrB;AAAA,EACA,OAAO,KAAI,MAAM;AAAA;AAWnB,eAAsB,SAAS,CAAC,KAAc,KAAyC;AAAA,EACrF,MAAM,OAAM,IAAI,IAAI,IAAI,GAAG;AAAA,EAC3B,MAAM,OAAO,mBAAmB,KAAI,SAAS,MAAM,SAAS,MAAM,CAAC;AAAA,EACnE,IAAI,CAAC;AAAA,IAAM,OAAO;AAAA,EAClB,MAAM,MAAM,KAAK,QAAQ,GAAG;AAAA,EAC5B,MAAM,SAAQ,OAAO,IAAI,KAAK,MAAM,GAAG,GAAG,IAAI,MAAM,YAAY;AAAA,EAChE,IAAI,CAAC,oBAAoB,KAAK,KAAI;AAAA,IAAG,OAAO;AAAA,EAE5C,MAAM,YAAY,KAAI,aAAa,IAAI,OAAO,MAAM;AAAA,EACpD,MAAM,QAAQ,YAAY,MAAM,QAAQ,KAAI,IAAI,MAAM,YAAY,IAAI,IAAI,KAAI;AAAA,EAC9E,IAAI,CAAC;AAAA,IAAO,OAAO,IAAI,SAAS,aAAa,EAAE,QAAQ,IAAI,CAAC;AAAA,EAC5D,IAAI;AAAA,IAAW,UAAU,IAAI,IAAI,KAAI;AAAA,EAErC,MAAM,KAAK,OAAO,IAAI,iBAAiB,IAAI,IAAI,gBAAgB,IAAI,IAAI,KAAI,KAAK;AAAA,EAGhF,MAAM,OAAO,IAAI,WAAW,MAAM,UAAU;AAAA,EAC5C,KAAK,IAAI,KAAK;AAAA,EACd,OAAO,IAAI,SAAS,KAAK,QAAQ;AAAA,IAC/B,SAAS,EAAE,gBAAgB,IAAI,iBAAiB,sCAAsC;AAAA,EACxF,CAAC;AAAA;AAAA,IAGG,kBAOA,YAGA,YAIO;AAAA;AAAA,EAvEb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAoDM,mBAAmB,iBAAE,OAAO;AAAA,IAChC,MAAM,iBAAE,OAAO;AAAA,IACf,MAAM,iBAAE,OAAO;AAAA,IACf,cAAc,iBAAE,OAAO;AAAA,IACvB,KAAK,iBAAE,OAAO,EAAE,SAAS,2CAA2C;AAAA,EACtE,CAAC;AAAA,EAEK,aAAa,iBAAE,OAAO;AAAA,IAC1B,QAAQ,iBAAE,MAAM,iBAAE,OAAO,CAAC,EAAE,SAAS,8CAA8C;AAAA,EACrF,CAAC;AAAA,EACK,aAAa,iBAAE,OAAO;AAAA,IAC1B,KAAK,iBAAE,MAAM,iBAAE,OAAO,CAAC,EAAE,SAAS,iDAAiD;AAAA,EACrF,CAAC;AAAA,EAEY,aAAsB;AAAA,IACjC;AAAA,MACE,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SACE,sFACA,yFACA,8EACA;AAAA,MACF,SAAS;AAAA,MACT,UAAU;AAAA,MACV,SAAS,OAAO,OAAO,SAAS;AAAA,QAC9B,IAAI;AAAA,UACF,MAAM,OAAQ,MAAM,IAAI,KAAK;AAAA,UAC7B,MAAM,OAAO,MAAM,QAAQ,KAAK,MAAM,IAAI,KAAK,OAAO,OAAO,CAAC,MAAM,OAAO,MAAM,QAAQ,IAAI,CAAC;AAAA,UAC9F,eAAe,EAAE;AAAA,UACjB,MAAM,OAAO,IAAI,IAAI,YAAY,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;AAAA,UACvD,OAAO,SAAS,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,MAAM,KAAK,IAAI,CAAW,CAAC,EAAE,CAAC;AAAA,UACvE,OAAO,KAAK;AAAA,UACZ,OAAO,cAAc,GAAG;AAAA;AAAA;AAAA,IAG9B;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SACE,2FACA,0FACA;AAAA,MACF,UAAU;AAAA,MACV,SAAS,OAAO,OAAO,SAAS;AAAA,QAC9B,IAAI;AAAA,UACF,MAAM,KAAK,IAAI,QAAQ,IAAI,cAAc,KAAK;AAAA,UAC9C,MAAM,QAAQ,IAAI,WAAW,MAAM,IAAI,YAAY,CAAC;AAAA,UACpD,IAAI,CAAC,MAAM;AAAA,YAAY,MAAM,IAAI,QAAQ,iBAAiB,iBAAiB;AAAA,UAC3E,MAAM,OAAO,MAAM,QAAQ,KAAK;AAAA,UAChC,WAAW,IAAI,KAAK,MAAM,KAAK,MAAM,EAAE;AAAA,UACvC,MAAM,IAAI,IAAI,EAAE;AAAA,UAChB,OAAO,SAAS,KAAK;AAAA,YACnB,MAAM,KAAK;AAAA,YACX,MAAM,KAAK;AAAA,YACX,cAAc;AAAA,YACd,KAAK,SAAS,KAAK,OAAO,IAAI,MAAM,IAAI;AAAA,UAC1C,CAAC;AAAA,UACD,OAAO,KAAK;AAAA,UACZ,OAAO,cAAc,GAAG;AAAA;AAAA;AAAA,IAG9B;AAAA,EACF;AAAA;;;ACnFO,SAAS,aAAa,CAAC,GAAsB;AAAA,EAClD,MAAM,UAAU,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC;AAAA,EACzD,MAAM,OAAO,UAAU,CAAC;AAAA,EACxB,OAAO,SAAS,KAAK,OAAO,EAAE,OAAO,SAAS,KAAK,IAAI,EAAE,OAAO,QAAQ,GAAG;AAAA,IACzE,QAAQ,OAAO,YAAY,QAAQ;AAAA,EACrC,CAAC;AAAA;AAAA,IAnBG,aAoCA,YA+BO;AAAA;AAAA,EAzFb;AAAA,EACA;AAAA,EAQA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAUM,cAA2C;AAAA,IAC/C,eAAe;AAAA,IACf,WAAW;AAAA,IACX,WAAW;AAAA,IACX,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AAAA,EA2BM,aAAsB;AAAA,IAC1B;AAAA,MACE,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,MACT,UAAU;AAAA,WACJ,QAAO,CAAC,OAAO,IAAI,QAAQ;AAAA,QAC/B,MAAM,OAAQ,MAAM,IAAI,KAAK;AAAA,QAC7B,OAAO,IAAI,KAAK,WAAW,CAAC,CAAC;AAAA,QAC7B,MAAM,QAAQ,gBAAgB,IAAI,KAAK,SAAS,GAAG;AAAA,UACjD,OAAO,KAAK;AAAA,UACZ,iBAAiB,KAAK;AAAA,QACxB,CAAC;AAAA,QACD,OAAO,SAAS,KAAK,EAAE,SAAS,MAAM,SAAS,MAAM,SAAS,QAAQ,MAAM,OAAO,CAAC;AAAA;AAAA,IAExF;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,UAAU;AAAA,MACV,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACtB,OAAO,SAAS,KAAK,EAAE,IAAI,MAAM,KAAK,CAAC;AAAA;AAAA,IAE3C;AAAA,EACF;AAAA,EAKa,SAAkB,CAAC,GAAG,YAAY,GAAG,aAAa,GAAG,aAAa,GAAG,UAAU;AAAA;;;;;;;ACnF5F,eAAsB,SAAS,CAAC,KAAc,KAAyC;AAAA,EACrF,MAAM,OAAM,IAAI,IAAI,IAAI,GAAG;AAAA,EAC3B,MAAM,OAAO,KAAI,SAAS,MAAM,UAAU,MAAM;AAAA,EAChD,IAAI,SAAS;AAAA,IAAI,OAAO;AAAA,EAExB,MAAM,QAAQ,KAAK,QAAQ,GAAG;AAAA,EAC9B,MAAM,OAAO,mBAAmB,UAAU,KAAK,OAAO,KAAK,MAAM,GAAG,KAAK,CAAC;AAAA,EAG1E,IAAI,UAAU;AAAA,IAAI,OAAO,SAAS,SAAS,GAAG,KAAI,gBAAgB,SAAS,GAAG;AAAA,EAE9E,MAAM,WAAW,mBAAmB,KAAK,MAAM,QAAQ,CAAC,CAAC;AAAA,EAEzD,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,SAAS,YAAY,IAAI,IAAI,IAAI,EAAE;AAAA,IACnC,MAAM;AAAA,IACN,OAAO,IAAI,SAAS,kBAAkB,EAAE,QAAQ,IAAI,CAAC;AAAA;AAAA,EAGvD,MAAM,QAAO,MAAM,gBAAgB,IAAI,IAAI,QAAQ,QAAQ;AAAA,EAC3D,IAAI,CAAC;AAAA,IAAM,OAAO,IAAI,SAAS,aAAa,EAAE,QAAQ,IAAI,CAAC;AAAA,EAC3D,MAAM,OAAO,IAAI,WAAW,MAAK,MAAM,UAAU;AAAA,EACjD,KAAK,IAAI,MAAK,KAAK;AAAA,EACnB,OAAO,IAAI,SAAS,KAAK,QAAQ,EAAE,SAAS,EAAE,gBAAgB,MAAK,YAAY,EAAE,CAAC;AAAA;AAAA;AAAA,EA/BpF;AAAA;;;ACDA;AACA;;;ACCA;AAFA;AACA;;;ACDO,IAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkNpB,IAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACjN1B;AACA;;;ACDA;AACA;AACA;;;ACFA;AACA;;;ACKA,IAAM,2BAA2B;AAGjC,SAAS,QAAQ,CAAC,GAAmB;AAAA,EACnC,OAAO,EAAE,QAAQ,kBAAkB,GAAG;AAAA;AAIxC,SAAS,GAAG,CAAC,GAAmB;AAAA,EAC9B,OAAO,EAAE,QAAQ,MAAM,IAAI;AAAA;AAG7B,SAAS,SAAS,CAAC,YAAoB,QAAwB;AAAA,EAC7D,OAAO,WAAW,SAAS,UAAU,KAAK,SAAS,MAAM;AAAA;AAGpD,SAAS,QAAQ,CAAC,IAAc,YAAoB,QAAyB;AAAA,EAClF,MAAM,MAAM,GACT,MAAM,qEAAqE,EAC3E,IAAI,UAAU,YAAY,MAAM,CAAC;AAAA,EACpC,OAAO,OAAO;AAAA;AAQT,SAAS,eAAe,CAAC,IAAc,YAAoB,QAAsB;AAAA,EACtF,MAAM,OAAO,UAAU,YAAY,MAAM;AAAA,EACzC,GAAG,KACD,+BAA+B,+BAA+B,IAAI,MAAM,sBACtE,wBAAwB,IAAI,UAAU,sBAC1C;AAAA;AAQK,SAAS,cAAc,CAAC,IAAc,YAAoB,MAAyB;AAAA,EACxF,IAAI,SAAS,IAAI,YAAY,KAAK,EAAE;AAAA,IAAG;AAAA,EACvC,IAAI,KAAK,SAAS,YAAY;AAAA,IAC5B,MAAM,MAAM,GACT,MACC,2EACF,EACC,IAAI,UAAU;AAAA,IACjB,IAAI,IAAI,IAAI;AAAA,MAA0B;AAAA,EACxC;AAAA,EACA,gBAAgB,IAAI,YAAY,KAAK,EAAE;AAAA;;;ADrDzC;AAaO,IAAM,aAAkC,IAAI,IAAI;AAAA,EACrD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAmBM,IAAM,gBAAgB,CAAC,MAAM,eAAe,QAAQ,QAAQ,UAAU,UAAU;AAEvF,IAAM,kBAAkB,cAAc,KAAK,IAAI;AAE/C,SAAS,cAAc,CAAC,MAAgB,QAA0C;AAAA,EAChF,IAAI,SAAS,YAAY,SAAS,gBAAgB;AAAA,IAChD,MAAM,OAAO,QAAQ;AAAA,IACrB,IAAI,CAAC,MAAM,QAAQ,IAAI,KAAK,KAAK,WAAW,KAAK,CAAC,KAAK,MAAM,CAAC,MAAM,OAAO,MAAM,QAAQ;AAAA,MACvF,MAAM,IAAI,QAAQ,iBAAiB,GAAG,wCAAwC;AAAA,EAClF;AAAA,EACA,IAAI,SAAS,YAAY;AAAA,IACvB,IAAI,OAAO,QAAQ,aAAa;AAAA,MAC9B,MAAM,IAAI,QAAQ,iBAAiB,wDAAwD;AAAA,EAC/F;AAAA;AAGF,SAAS,YAAY,CAAC,IAAc,YAA4B;AAAA,EAC9D,MAAM,MAAM,GACT,MACC,mFACF,EACC,IAAI,UAAU;AAAA,EACjB,QAAQ,IAAI,KAAK,KAAK;AAAA;AAGjB,IAAM,cAAc,QAAQ,SAAS,YAAW,CACrD,IACA,YACA,MAUa;AAAA,EACb,IAAI,CAAC,YAAY,IAAI,UAAU;AAAA,IAAG,MAAM,IAAI,QAAQ,aAAa,qBAAqB,YAAY;AAAA,EAClG,IAAI,CAAC,WAAW,IAAI,KAAK,IAAI;AAAA,IAAG,MAAM,IAAI,QAAQ,iBAAiB,0BAA0B,KAAK,MAAM;AAAA,EACxG,eAAe,KAAK,MAAM,KAAK,MAAM;AAAA,EAIrC,MAAM,SAAgC,KAAK,UACvC,KAAM,KAAK,UAAU,CAAC,GAAI,SAAS,KAAK,IACvC,KAAK,UAAU;AAAA,EAEpB,MAAM,KAAK,MAAM,QAAQ,KAAK,IAAI;AAAA,EAClC,KAAK,IAAI,cAAc,IAAI,eAAe,UAAU;AAAA,EACpD,KAAK,IAAI,cAAc,IAAI,QAAQ,KAAK,IAAI;AAAA,EAC5C,KAAK,IAAI,cAAc,IAAI,QAAQ,KAAK,IAAI;AAAA,EAC5C,KAAK,IAAI,cAAc,IAAI,UAAU,MAAM;AAAA,EAC3C,KAAK,IAAI,cAAc,IAAI,YAAY,KAAK,YAAY,aAAa,IAAI,UAAU,CAAC;AAAA,EAGpF,IAAI,KAAK,SAAS,cAAc,KAAK,YAAY;AAAA,IAC/C,gBAAgB,IAAI,YAAY,EAAE;AAAA,EACpC,OAAO,YAAY,IAAI,EAAE;AAAA,CAC1B;AAEM,SAAS,WAAW,CAAC,IAAc,IAAgC;AAAA,EACxE,MAAM,MAAM,GACT,MAAM,UAAU,gEAAgE,EAChF,IAAI,EAAE;AAAA,EACT,IAAI,CAAC;AAAA,IAAK,OAAO;AAAA,EACjB,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAU,KAAK,MAAM,IAAI,MAAM,IAAuB,KAAK;AAAA;AAGnF,SAAS,cAAc,CAAC,IAAc,YAAmC;AAAA,EAC9E,MAAM,OAAO,GACV,MACC,UAAU,2FACZ,EACC,IAAI,UAAU;AAAA,EACjB,OAAO,KAAK,IAAI,CAAC,OAAO;AAAA,OACnB;AAAA,IACH,QAAQ,EAAE,SAAU,KAAK,MAAM,EAAE,MAAM,IAAuB;AAAA,EAChE,EAAE;AAAA;AAGG,IAAM,iBAAiB,QAAQ,SAAS,eAAc,CAC3D,IACA,IACA,QACa;AAAA,EACb,MAAM,MAAM,YAAY,IAAI,EAAE;AAAA,EAC9B,IAAI,CAAC;AAAA,IAAK,MAAM,IAAI,QAAQ,aAAa,qBAAqB,IAAI;AAAA,EAElE,MAAM,cAAc,OAAO,SAAS,aAAa,OAAO,SAAS,IAAI;AAAA,EACrE,IAAI,OAAO,SAAS,aAAa,CAAC,WAAW,IAAI,OAAO,IAAI;AAAA,IAC1D,MAAM,IAAI,QAAQ,iBAAiB,0BAA0B,OAAO,MAAM;AAAA,EAG5E,MAAM,gBAAgB,OAAO,QAAQ,IAAI;AAAA,EACzC,IAAI,OAAO,WAAW;AAAA,IAAW,eAAe,eAAe,OAAO,MAAM;AAAA,EACvE,SAAI;AAAA,IAAa,eAAe,OAAO,MAAO,SAAS;AAAA,EAE5D,IAAI,OAAO,SAAS;AAAA,IAAW,KAAK,IAAI,cAAc,IAAI,QAAQ,OAAO,IAAI;AAAA,EAC7E,IAAI,OAAO,SAAS;AAAA,IAAW,KAAK,IAAI,cAAc,IAAI,QAAQ,OAAO,IAAI;AAAA,EAC7E,IAAI,OAAO,WAAW;AAAA,IAAW,KAAK,IAAI,cAAc,IAAI,UAAU,OAAO,MAAM;AAAA,EACnF,IAAI,OAAO,aAAa;AAAA,IAAW,KAAK,IAAI,cAAc,IAAI,YAAY,OAAO,QAAQ;AAAA,EAKzF,IAAI,aAAa;AAAA,IACf,MAAM,OAAO,GACV,MACC,2FACF,EACC,IAAI,IAAI,aAAa,EAAE;AAAA,IAC1B,WAAW,KAAK;AAAA,MAAM,KAAK,IAAI,WAAW,EAAE,IAAI,IAAI,IAAI;AAAA,EAC1D;AAAA,EACA,OAAO,YAAY,IAAI,EAAE;AAAA,CAC1B;AAKM,SAAS,gBAAgB,CAAC,IAAc,IAAY,OAA4B;AAAA,EACrF,MAAM,MAAM,YAAY,IAAI,EAAE;AAAA,EAC9B,IAAI,CAAC;AAAA,IAAK,MAAM,IAAI,QAAQ,aAAa,qBAAqB,IAAI;AAAA,EAClE,IAAI,CAAC,OAAO,SAAS,KAAK;AAAA,IAAG,MAAM,IAAI,QAAQ,iBAAiB,+BAA+B;AAAA,EAC/F,MAAM,IAAI,KAAK,IAAI,IAAI,KAAK,IAAI,MAAM,KAAK,MAAM,KAAK,CAAC,CAAC;AAAA,EACxD,OAAO,eAAe,IAAI,IAAI,EAAE,QAAQ,KAAM,IAAI,UAAU,CAAC,GAAI,OAAO,EAAE,EAAE,CAAC;AAAA;AAGxE,IAAM,iBAAiB,QAAQ,SAAS,eAAc,CAAC,IAAc,IAAqB;AAAA,EAC/F,MAAM,OAAO,YAAY,IAAI,EAAE;AAAA,EAC/B,IAAI,CAAC;AAAA,IAAM,OAAO;AAAA,EAClB,KAAK,IAAI,cAAc,IAAI,aAAa,CAAC;AAAA,EAIzC,MAAM,OAAO,GACV,MACC,2FACF,EACC,IAAI,KAAK,aAAa,EAAE;AAAA,EAC3B,WAAW,KAAK;AAAA,IAAM,KAAK,IAAI,WAAW,EAAE,IAAI,IAAI,SAAS;AAAA,EAC7D,OAAO;AAAA,CACR;;;AD9KM,IAAM,gBAAgB,CAAC,MAAM,QAAQ,QAAQ,aAAa;AAEjE,IAAM,kBAAkB,cAAc,KAAK,IAAI;AAExC,IAAM,iBAAiB,QAAQ,SAAS,eAAc,CAC3D,IACA,MACa;AAAA,EACb,MAAM,KAAK,MAAM,MAAM,KAAK,IAAI;AAAA,EAChC,MAAM,QAAQ,KAAK,IAAI,aAAa,IAAI,QAAQ,KAAK,IAAI;AAAA,EACzD,KAAK,IAAI,aAAa,IAAI,eAAe,MAAM,GAAG;AAAA,EAClD,IAAI,KAAK,SAAS;AAAA,IAAW,KAAK,IAAI,aAAa,IAAI,QAAQ,KAAK,IAAI;AAAA,EACxE,OAAO,YAAY,IAAI,EAAE;AAAA,CAC1B;AAEM,IAAM,iBAAiB,QAAQ,SAAS,eAAc,CAC3D,IACA,IACA,QACa;AAAA,EACb,IAAI,CAAC,YAAY,IAAI,EAAE;AAAA,IAAG,MAAM,IAAI,QAAQ,aAAa,qBAAqB,IAAI;AAAA,EAClF,IAAI,OAAO,SAAS;AAAA,IAAW,KAAK,IAAI,aAAa,IAAI,QAAQ,OAAO,IAAI;AAAA,EAC5E,IAAI,OAAO,SAAS;AAAA,IAAW,KAAK,IAAI,aAAa,IAAI,QAAQ,OAAO,IAAI;AAAA,EAC5E,OAAO,YAAY,IAAI,EAAE;AAAA,CAC1B;AAWM,IAAM,oBAAoB,QAAQ,SAAS,kBAAiB,CACjE,IACA,IACA,OAAyC,CAAC,GAC7B;AAAA,EACb,MAAM,MAAM,YAAY,IAAI,EAAE;AAAA,EAC9B,IAAI,CAAC;AAAA,IAAK,MAAM,IAAI,QAAQ,aAAa,qBAAqB,IAAI;AAAA,EAClE,MAAM,MAAM,eAAe,IAAI;AAAA,IAC7B,MAAM,KAAK,QAAQ,IAAI;AAAA,IACvB,MAAO,KAAK,QAAQ,IAAI,QAAS;AAAA,EACnC,CAAC;AAAA,EACD,MAAM,YAAY,IAAI;AAAA,EACtB,WAAW,KAAK,eAAe,IAAI,EAAE,GAAG;AAAA,IACtC,MAAM,SACJ,EAAE,QAAQ,aAAa,KAAK,KAAK,EAAE,QAAQ,UAAU,IAAI,GAAG,IAAK,EAAE,UAAU;AAAA,IAC/E,MAAM,KAAK,YAAY,IAAI,IAAI,IAAI,EAAE,MAAM,EAAE,MAAM,MAAM,EAAE,MAAM,QAAQ,UAAU,EAAE,SAAS,CAAC;AAAA,IAC/F,UAAU,IAAI,EAAE,IAAI,GAAG,EAAE;AAAA,EAC3B;AAAA,EACA,WAAW,KAAK,YAAY,IAAI,EAAE,GAAG;AAAA,IACnC,MAAM,OAAgC,CAAC;AAAA,IACvC,YAAY,KAAK,MAAM,OAAO,QAAQ,EAAE,KAAK,GAAG;AAAA,MAC9C,MAAM,MAAM,UAAU,IAAI,GAAG;AAAA,MAC7B,IAAI;AAAA,QAAK,KAAK,OAAO;AAAA,IACvB;AAAA,IACA,aAAa,IAAI,IAAI,IAAI,IAAI;AAAA,EAC/B;AAAA,EACA,OAAO,YAAY,IAAI,IAAI,EAAE;AAAA,CAC9B;AAEM,SAAS,WAAW,CAAC,IAAc,IAAgC;AAAA,EACxE,OAAO,GACJ,MAAM,UAAU,+DAA+D,EAC/E,IAAI,EAAE;AAAA;AAGJ,SAAS,aAAa,CAAC,IAA6B;AAAA,EACzD,OAAO,GACJ,MAAM,UAAU,yEAAyE,EACzF,IAAI;AAAA;AAGF,IAAM,iBAAiB,QAAQ,SAAS,eAAc,CAAC,IAAc,IAAqB;AAAA,EAC/F,IAAI,CAAC,YAAY,IAAI,EAAE;AAAA,IAAG,OAAO;AAAA,EACjC,KAAK,IAAI,aAAa,IAAI,aAAa,CAAC;AAAA,EAMxC,MAAM,YAAY,CAAC,UAAkB;AAAA,IACnC,WAAW,KAAK,aAAa,IAAI,OAAO,eAAe,EAAE;AAAA,MACvD,KAAK,IAAI,OAAO,GAAG,aAAa,CAAC;AAAA;AAAA,EAErC,UAAU,YAAY;AAAA,EACtB,UAAU,SAAS;AAAA,EACnB,WAAW,KAAK,aAAa,IAAI,aAAa,eAAe,EAAE;AAAA,IAC7D,KAAK,IAAI,aAAa,GAAG,eAAe,IAAI;AAAA,EAI9C,GAAG,MAAM,yDAAyD,EAAE,IAAI,EAAE;AAAA,EAC1E,OAAO;AAAA,CACR;AAGD,SAAS,YAAY,CAAC,IAAc,OAAe,KAAa,UAA4B;AAAA,EAC1F,OACE,GACG,MAAM,kBAAkB,eAAe,2BAA2B,EAClE,IAAI,QAAQ,EACf,IAAI,CAAC,MAAM,EAAE,EAAE;AAAA;;;AGvHnB;AACA;AAkBA,IAAM,QAAsC;AAAA,EAC1C,IAAI,EAAE,OAAO,aAAa,SAAS,QAAQ,QAAQ,OAAO,MAAM,WAAW;AAAA,EAC3E,MAAM,EAAE,OAAO,cAAc,SAAS,QAAQ,QAAQ,MAAM,MAAM,WAAW;AAAA,EAC7E,KAAK,EAAE,OAAO,WAAW,SAAS,MAAM,QAAQ,MAAM,MAAM,SAAS;AAAA,EACrE,KAAK,EAAE,OAAO,aAAa,SAAS,SAAS,QAAQ,MAAM,MAAM,WAAW;AAC9E;AAEA,IAAM,eAA6B,CAAC,MAAM,QAAQ,OAAO,KAAK;AAE9D,SAAS,QAAQ,CAAC,GAAiC;AAAA,EACjD,OAAO,MAAM,QAAQ,MAAM;AAAA;AAQ7B,IAAM,KAAK;AAGX,SAAS,WAAW,CAAC,IAAc,YAAmC;AAAA,EACpE,MAAM,MAAM,GACT,MACC,+GACF,EACC,IAAI,UAAU;AAAA,EACjB,OAAO,KAAK,MAAM;AAAA;AAIpB,SAAS,SAAS,CAChB,IACA,MACA,KACA,YACa;AAAA,EACb,MAAM,OAAO,MAAM;AAAA,EAGnB,IAAI,UAAU,KAAK;AAAA,EACnB,IAAI,SAAS,SAAS,YAAY;AAAA,IAChC,MAAM,KAAK,YAAY,IAAI,UAAU;AAAA,IACrC,IAAI;AAAA,MAAI,UAAU,aAAa,GAAG,QAAQ,MAAM,IAAI;AAAA,EACtD;AAAA,EACA,MAAM,YAAY,WAAW;AAAA,EAC7B,MAAM,QAAkB,CAAC;AAAA,EACzB,MAAM,OAAmB,CAAC;AAAA,EAG1B,MAAM,KAAK,sBAAsB;AAAA,EACjC,KAAK,KAAK,KAAK,MAAM,EAAE;AAAA,EAEvB,MAAM,QAAQ,GAAG,QAAQ;AAAA,EACzB,MAAM,KAAK,sBAAsB;AAAA,EACjC,KAAK,KAAK,OAAO,QAAQ,EAAE;AAAA,EAE3B,IAAI,SAAS;AAAA,IACX,MAAM,KAAK,SAAS,qBAAqB;AAAA,IACzC,KAAK,KAAK,GAAG;AAAA,EACf;AAAA,EAEA,IAAI,MAAM,cAAc,2BAA2B,KAAK,kCAAkC,MAAM,KAAK,MAAM;AAAA,EAC3G,IAAI,KAAK,UAAU,YAAY;AAAA,IAC7B,OAAO;AAAA,IACP,KAAK,KAAK,UAAU;AAAA,EACtB;AAAA,EAEA,MAAM,OAAO,GAAG,MAAM,GAAG,EAAE,IAAI,GAAG,IAAI;AAAA,EACtC,OAAO,KAAK,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,EAAE,IAAI,OAAO,EAAE,SAAS,GAAG,EAAE;AAAA;AAS5D,SAAS,iBAAiB,CAC/B,IACA,KACA,OAAmD,CAAC,GACvC;AAAA,EACb,MAAM,QAAsB,KAAK,OAC7B,CAAC,KAAK,IAAI,IACV,SAAS,OAAO,GAAG,CAAC,IAClB,CAAC,OAAO,GAAG,CAAe,IAC1B;AAAA,EAEN,MAAM,MAAmB,CAAC;AAAA,EAC1B,MAAM,OAAO,IAAI;AAAA,EACjB,WAAW,KAAK,OAAO;AAAA,IACrB,WAAW,KAAK,UAAU,IAAI,GAAG,KAAK,KAAK,UAAU,GAAG;AAAA,MACtD,IAAI,KAAK,IAAI,EAAE,EAAE;AAAA,QAAG;AAAA,MACpB,KAAK,IAAI,EAAE,EAAE;AAAA,MACb,IAAI,KAAK,CAAC;AAAA,IACZ;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,GAAG,CAAC,OAA4B;AAAA,EACvC,OAAO,MACJ,IAAI,CAAC,MAAM,KAAK,EAAE,KAAK,EAAE,QAAQ,OAAO,EAAE,QAAQ,QAAQ,EAAE,OAAO,EACnE,KAAK;AAAA,CAAI;AAAA;AAQP,SAAS,aAAa,CAC3B,IACA,KACA,OAAmD,CAAC,GACzC;AAAA,EACX,MAAM,QAAQ,kBAAkB,IAAI,KAAK,IAAI;AAAA,EAC7C,MAAM,QAAQ,MAAM,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG;AAAA,EAC9C,IAAI,MAAM,WAAW;AAAA,IAAG,OAAO,MAAM;AAAA,EACrC,IAAI,MAAM,WAAW,KAAK,MAAM,WAAW;AAAA,IAAG,OAAO,MAAM;AAAA,EAE3D,IAAI,MAAM,WAAW,GAAG;AAAA,IACtB,MAAM,OAAO,KAAK,OAAO,MAAM,KAAK,MAAM,OAAO;AAAA,IACjD,MAAM,IAAI,QAAQ,aAAa,WAAW,SAAS,KAAK;AAAA,EAC1D;AAAA,EACA,MAAM,QAAQ,MAAM,SAAS,IAAI,QAAQ;AAAA,EACzC,MAAM,IAAI,QACR,aACA,cAAc,eAAS,MAAM;AAAA,EAAoB,IAAI,KAAK;AAAA,uBAC5D;AAAA;AAIK,SAAS,UAAU,CACxB,IACA,KACA,OAAmD,CAAC,GAC5C;AAAA,EACR,OAAO,cAAc,IAAI,KAAK,IAAI,EAAE;AAAA;;;ACxJtC,IAAM,SAAS;AAOf,SAAS,QAAQ,CAAC,GAAW,GAA0B;AAAA,EACrD,MAAM,OAAO,OAAO;AAAA,EACpB,IAAI,MAAM,QAAQ,KAAK;AAAA,IAAG,MAAM,IAAI,MAAM,YAAY,QAAQ,GAAG;AAAA,EACjE,IAAI,EAAE,SAAS,IAAI,KAAM,MAAM,QAAQ,EAAE,SAAS,IAAI;AAAA,IACpD,MAAM,IAAI,MAAM,6BAA6B,KAAK,GAAG;AAAA,EAEvD,IAAI,MAAM,MAAM;AAAA,IAEd,IAAI,IAAI;AAAA,IACR,QAAQ,EAAE,MAAM,UAAU,EAAE;AAAA,MAAI;AAAA,IAChC,IAAI,IAAI;AAAA,MAAG,OAAO,EAAE,MAAM,GAAG,CAAC,IAAI,SAAS,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAAA,EACnE;AAAA,EAEA,MAAM,KAAK,MAAM,KAAK,IAAI,OAAO,QAAQ,EAAE,EAAG;AAAA,EAC9C,MAAM,KAAK,MAAM,OAAO,OAAO,SAAS,OAAO,QAAQ,EAAE,EAAG;AAAA,EAC5D,IAAI,KAAK,KAAK,GAAG;AAAA,IACf,MAAM,MAAM,KAAK,MAAM,OAAO,KAAK,GAAG;AAAA,IACtC,OAAO,OAAO;AAAA,EAChB;AAAA,EAEA,IAAI,MAAM,QAAQ,EAAE,SAAS;AAAA,IAAG,OAAO,EAAE,MAAM,GAAG,CAAC;AAAA,EACnD,OAAO,OAAO,MAAO,SAAS,EAAE,MAAM,CAAC,GAAG,IAAI;AAAA;AAIzC,SAAS,UAAU,CAAC,GAAkB,GAA0B;AAAA,EACrE,OAAO,SAAS,KAAK,IAAI,CAAC;AAAA;AAIrB,SAAS,WAAW,CACzB,GACA,GACA,GACU;AAAA,EACV,IAAI,KAAK;AAAA,IAAG,OAAO,CAAC;AAAA,EACpB,IAAI,MAAM;AAAA,IAAG,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC;AAAA,EAErC,IAAI,MAAM,MAAM;AAAA,IACd,IAAI,OAAO,WAAW,GAAG,IAAI;AAAA,IAC7B,MAAM,MAAM,CAAC,IAAI;AAAA,IACjB,SAAS,IAAI,EAAG,IAAI,GAAG,KAAK;AAAA,MAC1B,OAAO,WAAW,MAAM,IAAI;AAAA,MAC5B,IAAI,KAAK,IAAI;AAAA,IACf;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EACA,IAAI,MAAM,MAAM;AAAA,IACd,IAAI,OAAO,WAAW,MAAM,CAAC;AAAA,IAC7B,MAAM,MAAM,CAAC,IAAI;AAAA,IACjB,SAAS,IAAI,EAAG,IAAI,GAAG,KAAK;AAAA,MAC1B,OAAO,WAAW,MAAM,IAAI;AAAA,MAC5B,IAAI,QAAQ,IAAI;AAAA,IAClB;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAGA,MAAM,MAAM,KAAK,MAAM,IAAI,CAAC;AAAA,EAC5B,MAAM,IAAI,WAAW,GAAG,CAAC;AAAA,EACzB,OAAO,CAAC,GAAG,YAAY,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,YAAY,GAAG,GAAG,IAAI,MAAM,CAAC,CAAC;AAAA;;;ALlEzE;AAKA,SAAS,WAAW,CAAC,GAA4C;AAAA,EAC/D,OAAO,OAAO,MAAM,YAAY,OAAO,MAAM,YAAY,OAAO,MAAM;AAAA;AAIxE,SAAS,cAAc,CAAC,GAAwC;AAAA,EAC9D,OAAO,OAAO,MAAM,YAAa,IAAI,IAAI,IAAK;AAAA;AA2BhD,SAAS,eAAe,CAAC,IAAc,MAAmB,OAAuB;AAAA,EAC/E,MAAM,SAAS,KAAK,QAAQ;AAAA,EAC5B,IAAI,CAAC;AAAA,IAAQ,OAAO;AAAA,EACpB,MAAM,QAAQ,kBAAkB,IAAI,OAAO,EAAE,MAAM,OAAO,YAAY,OAAO,CAAC;AAAA,EAC9E,MAAM,QAAQ,MAAM,KAAK,CAAC,MAAM,EAAE,OAAO,KAAK;AAAA,EAC9C,IAAI;AAAA,IAAO,OAAO,MAAM;AAAA,EACxB,IAAI,MAAM,WAAW;AAAA,IAAG,OAAO,MAAM,GAAI;AAAA,EACzC,IAAI,MAAM,WAAW,GAAG;AAAA,IACtB,IAAI,OAAO,KAAK,MAAM;AAAA,MAAO,OAAO;AAAA,IACpC,MAAM,IAAI,QAAQ,aAAa,GAAG,KAAK,4CAA4C,OAAO;AAAA,EAC5F;AAAA,EACA,MAAM,IAAI,QAAQ,aAAa,GAAG,KAAK,6BAA6B,WAAW,MAAM,gCAAgC;AAAA;AAIvH,SAAS,MAAM,CAAC,IAAc,MAAmB,OAAyB;AAAA,EACxE,QAAQ,KAAK;AAAA,SACN;AAAA,SACA;AAAA,SACA,QAAQ;AAAA,MACX,IAAI,UAAU;AAAA,QAAM,OAAO;AAAA,MAC3B,IAAI,OAAO,UAAU;AAAA,QAAU,MAAM,IAAI,QAAQ,iBAAiB,GAAG,KAAK,uBAAuB;AAAA,MACjG,OAAO;AAAA,IACT;AAAA,SACK,UAAU;AAAA,MACb,IAAI,UAAU;AAAA,QAAM,OAAO;AAAA,MAC3B,MAAM,IAAI,OAAO,UAAU,WAAW,QAAQ,OAAO,KAAK;AAAA,MAC1D,IAAI,CAAC,OAAO,SAAS,CAAC;AAAA,QAAG,MAAM,IAAI,QAAQ,iBAAiB,GAAG,KAAK,uBAAuB;AAAA,MAC3F,OAAO;AAAA,IACT;AAAA,SACK,YAAY;AAAA,MACf,IAAI,OAAO,UAAU;AAAA,QAAW,OAAO;AAAA,MACvC,IAAI,UAAU,UAAU,UAAU;AAAA,QAAG,OAAO;AAAA,MAC5C,IAAI,UAAU,WAAW,UAAU,KAAK,UAAU;AAAA,QAAM,OAAO;AAAA,MAC/D,MAAM,IAAI,QAAQ,iBAAiB,GAAG,KAAK,wBAAwB;AAAA,IACrE;AAAA,SACK,UAAU;AAAA,MACb,IAAI,UAAU;AAAA,QAAM,OAAO;AAAA,MAC3B,MAAM,IAAI,OAAO,KAAK;AAAA,MACtB,IAAI,CAAC,KAAK,QAAQ,SAAS,SAAS,CAAC;AAAA,QACnC,MAAM,IAAI,QAAQ,iBAAiB,GAAG,KAAK,UAAU,6BAA6B;AAAA,MACpF,OAAO;AAAA,IACT;AAAA,SACK,gBAAgB;AAAA,MACnB,MAAM,MAAM,UAAU,OAAO,CAAC,IAAI,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAAA,MACvE,MAAM,OAAO,KAAK,QAAQ,WAAW,CAAC;AAAA,MACtC,WAAW,QAAQ;AAAA,QACjB,IAAI,CAAC,KAAK,SAAS,OAAO,IAAI,CAAC;AAAA,UAC7B,MAAM,IAAI,QAAQ,iBAAiB,GAAG,KAAK,UAAU,gCAAgC;AAAA,MACzF,OAAO,IAAI,IAAI,MAAM;AAAA,IACvB;AAAA,SACK,YAAY;AAAA,MACf,MAAM,MAAM,UAAU,OAAO,CAAC,IAAI,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAAA,MACvE,OAAO,IAAI,IAAI,CAAC,MAAM,gBAAgB,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC;AAAA,IAC5D;AAAA;AAAA;AAKJ,SAAS,WAAW,CAAC,OAAkD;AAAA,EACrE,MAAM,SAAS,IAAI;AAAA,EACnB,WAAW,KAAK,OAAO;AAAA,IACrB,MAAM,IAAI,EAAE,KAAK,YAAY;AAAA,IAC7B,MAAM,OAAO,OAAO,IAAI,CAAC;AAAA,IACzB,IAAI;AAAA,MAAM,KAAK,KAAK,CAAC;AAAA,IAChB;AAAA,aAAO,IAAI,GAAG,CAAC,CAAC,CAAC;AAAA,EACxB;AAAA,EACA,OAAO;AAAA;AAST,SAAS,WAAW,CAClB,OACA,MACyC;AAAA,EACzC,MAAM,OAAO,IAAI,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAAA,EAChD,MAAM,SAAS,YAAY,KAAK;AAAA,EAChC,MAAM,MAA+C,CAAC;AAAA,EACtD,YAAY,KAAK,UAAU,OAAO,QAAQ,IAAI,GAAG;AAAA,IAC/C,IAAI,OAAO,KAAK,IAAI,GAAG;AAAA,IACvB,IAAI,CAAC,MAAM;AAAA,MACT,MAAM,UAAU,OAAO,IAAI,IAAI,YAAY,CAAC,KAAK,CAAC;AAAA,MAClD,IAAI,QAAQ,SAAS;AAAA,QACnB,MAAM,IAAI,QACR,aACA,kBAAkB,gBAAgB,QAAQ,sCAC5C;AAAA,MACF,OAAO,QAAQ;AAAA,IACjB;AAAA,IACA,IAAI,CAAC;AAAA,MAAM,MAAM,IAAI,QAAQ,aAAa,qBAAqB,KAAK;AAAA,IACpE,IAAI,KAAK,EAAE,MAAM,MAAM,CAAC;AAAA,EAC1B;AAAA,EACA,OAAO;AAAA;AAIT,SAAS,WAAW,CAClB,KACA,OACW;AAAA,EACX,MAAM,MAAM,KAAK,MAAM,IAAI,QAAQ,IAAI;AAAA,EACvC,MAAM,OAAO,IAAI,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAAA,EAChD,MAAM,SAAkC,CAAC;AAAA,EACzC,MAAM,QAAiC,CAAC;AAAA,EACxC,YAAY,QAAQ,MAAM,OAAO,QAAQ,GAAG,GAAG;AAAA,IAC7C,MAAM,IAAI,KAAK,IAAI,MAAM;AAAA,IACzB,IAAI,CAAC;AAAA,MAAG;AAAA,IACR,OAAO,EAAE,QAAQ;AAAA,IACjB,MAAM,EAAE,MAAM;AAAA,EAChB;AAAA,EACA,OAAO,EAAE,IAAI,IAAI,IAAI,aAAa,IAAI,aAAa,QAAQ,MAAM;AAAA;AAGnE,SAAS,WAAW,CAClB,OACA,UACA,cACQ;AAAA,EACR,MAAM,OAAO,SAAS,KACpB,CAAC,MAAM,EAAE,KAAK,SAAS,UAAU,OAAO,EAAE,UAAU,YAAY,EAAE,KACpE;AAAA,EACA,OAAO,MAAM,OAAO,OAAO,OAAO,KAAK,KAAK,IAAI,IAAI,YAAY;AAAA;AAGlE,SAAS,WAAW,CAAC,IAAc,OAAwB;AAAA,EACzD,OACE,GACG,MAAM,qEAAqE,EAC3E,IAAI,KAAK,KAAK;AAAA;AAIrB,SAAS,gBAAgB,CAAC,IAAuB;AAAA,EAC/C,OAAO,YAAY,IAAI,MAAM,KAAK,YAAY,IAAI,cAAc;AAAA;AAGlE,SAAS,mBAAmB,CAAC,IAAc,UAAkB,UAAkB,YAA2B;AAAA,EACxG,IAAI;AAAA,IAAY,KAAK,IAAI,WAAW,UAAU,aAAa,QAAQ;AAAA,EAC9D;AAAA,OAAG,MAAM,+CAA+C,EAAE,IAAI,UAAU,QAAQ;AAAA;AAGvF,SAAS,kBAAkB,CAAC,IAAc,YAAmC;AAAA,EAC3E,MAAM,MAAM,GACT,MACC;AAAA;AAAA,gDAGF,EACC,IAAI,UAAU;AAAA,EACjB,OAAO,KAAK,aAAa;AAAA;AAG3B,SAAS,iBAAiB,CAAC,IAAc,YAAwC;AAAA,EAC/E,OAAO,GACJ,MACC;AAAA;AAAA,8DAGF,EACC,IAAI,UAAU;AAAA;AAGnB,SAAS,wBAAwB,CAAC,IAAc,YAA0B;AAAA,EACxE,MAAM,OAAO,kBAAkB,IAAI,UAAU;AAAA,EAC7C,MAAM,OAAO,YAAY,MAAM,MAAM,KAAK,MAAM;AAAA,EAChD,KAAK,QAAQ,CAAC,KAAK,MAAM;AAAA,IACvB,IAAI,IAAI,cAAc,KAAK;AAAA,MAAI,KAAK,IAAI,WAAW,IAAI,IAAI,aAAa,KAAK,EAAG;AAAA,GACjF;AAAA;AAGI,IAAM,0BAA0B,QAAQ,SAAS,wBAAuB,CAC7E,IACA,YACM;AAAA,EACN,MAAM,aAAa,iBAAiB,EAAE;AAAA,EACtC,MAAM,SAAS,aACX,CAAC,EAAE,aAAa,WAAW,CAAC,IAC3B,GACE,MACC;AAAA,iFAEF,EACC,IAAI;AAAA,EAEX,WAAW,KAAK,QAAQ;AAAA,IACtB,MAAM,UAAU,GACb,MACC;AAAA;AAAA,kCAGF,EACC,IAAI,EAAE,WAAW;AAAA,IACpB,IAAI,CAAC,QAAQ;AAAA,MAAQ;AAAA,IAErB,MAAM,QAAQ,mBAAmB,IAAI,EAAE,WAAW;AAAA,IAClD,MAAM,OAAO,YAAY,OAAO,MAAM,QAAQ,MAAM;AAAA,IACpD,QAAQ,QAAQ,CAAC,KAAK,MAAM,oBAAoB,IAAI,IAAI,IAAI,KAAK,IAAK,UAAU,CAAC;AAAA,EACnF;AAAA,CACD;AAEM,IAAM,eAAe,QAAQ,SAAS,aAAY,CACvD,IACA,YACA,MACW;AAAA,EACX,MAAM,QAAQ,YAAY,IAAI,UAAU;AAAA,EACxC,IAAI,CAAC;AAAA,IAAO,MAAM,IAAI,QAAQ,aAAa,qBAAqB,YAAY;AAAA,EAC5E,MAAM,QAAQ,eAAe,IAAI,UAAU;AAAA,EAC3C,MAAM,WAAW,YAAY,OAAO,IAAI;AAAA,EACxC,MAAM,KAAK,YAAY,OAAO,UAAU,QAAQ,MAAM,MAAM,KAAK,CAAC;AAAA,EAClE,MAAM,WAAW,WAAW,mBAAmB,IAAI,UAAU,GAAG,IAAI;AAAA,EAEpE,MAAM,QAAQ,KAAK,IAAI,WAAW,IAAI,eAAe,UAAU;AAAA,EAC/D,KAAK,IAAI,WAAW,IAAI,eAAe,MAAM,GAAG;AAAA,EAChD,KAAK,IAAI,WAAW,IAAI,aAAa,QAAQ;AAAA,EAC7C,aAAa,MAAM,WAAW;AAAA,IAC5B,KAAK,IAAI,WAAW,IAAI,KAAK,IAAI,OAAO,IAAI,MAAM,KAAK,CAAC;AAAA,EAC1D,OAAO,UAAU,IAAI,EAAE;AAAA,CACxB;AAEM,SAAS,SAAS,CAAC,IAAc,IAA8B;AAAA,EACpE,MAAM,MAAM,GACT,MAAM,0EAA0E,EAChF,IAAI,EAAE;AAAA,EACT,IAAI,CAAC;AAAA,IAAK,OAAO;AAAA,EACjB,OAAO,YAAY,KAAK,eAAe,IAAI,IAAI,WAAW,CAAC;AAAA;AAI7D,SAAS,UAAU,CAAC,QAAwB;AAAA,EAC1C,OAAO,OAAO,QAAQ,MAAM,IAAI;AAAA;AAG3B,SAAS,WAAW,CACzB,IACA,YACA,OAA4E,CAAC,GAChE;AAAA,EACb,MAAM,QAAQ,eAAe,IAAI,UAAU;AAAA,EAI3C,MAAM,WACJ,KAAK,UAAU,OAAO,KAAK,KAAK,MAAM,EAAE,SACpC,YAAY,OAAO,KAAK,MAAM,EAAE,IAAI,GAAG,MAAM,aAAa;AAAA,IACxD;AAAA,IACA,OAAO,OAAO,IAAI,MAAM,KAAK;AAAA,EAC/B,EAAE,IACF,CAAC;AAAA,EACP,MAAM,aAAa,SAAS,OAAO,CAAC,MAAM,YAAY,EAAE,KAAK,CAAC;AAAA,EAC9D,MAAM,YAAY,SAAS,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC;AAAA,EAG9D,IAAI;AAAA,EACJ,IAAI,WAAW;AAAA,EACf,IAAI,KAAK,MAAM;AAAA,IACb,IAAI,MAAM,KAAK;AAAA,IACf,IAAI,IAAI,WAAW,GAAG,GAAG;AAAA,MACvB,WAAW;AAAA,MACX,MAAM,IAAI,MAAM,CAAC;AAAA,IACnB;AAAA,IACA,IAAI,QAAQ,aAAa,QAAQ,eAAe;AAAA,MAC9C,IAAI,IAAI,MAAM,KAAK,CAAC,OAAM,GAAE,OAAO,GAAG;AAAA,MACtC,IAAI,CAAC,GAAG;AAAA,QACN,MAAM,UAAU,MAAM,OAAO,CAAC,MAAM,EAAE,KAAK,YAAY,MAAM,IAAI,YAAY,CAAC;AAAA,QAC9E,IAAI,QAAQ,SAAS;AAAA,UACnB,MAAM,IAAI,QACR,aACA,eAAe,gBAAgB,QAAQ,sCACzC;AAAA,QACF,IAAI,QAAQ;AAAA,MACd;AAAA,MACA,IAAI,CAAC;AAAA,QAAG,MAAM,IAAI,QAAQ,aAAa,uBAAuB,KAAK;AAAA,MACnE,WAAW;AAAA,IACb;AAAA,EACF;AAAA,EAGA,WAAW,KAAK;AAAA,IAAY,eAAe,IAAI,YAAY,EAAE,IAAI;AAAA,EACjE,IAAI;AAAA,IAAU,eAAe,IAAI,YAAY,QAAQ;AAAA,EAErD,MAAM,QAAQ,CAAC,mBAAmB,eAAe;AAAA,EACjD,MAAM,OAAmB,CAAC,UAAU;AAAA,EACpC,WAAW,KAAK,YAAY;AAAA,IAC1B,MAAM,KAAK,aAAa,WAAW,EAAE,KAAK,EAAE,QAAQ;AAAA,IACpD,KAAK,KAAK,eAAe,EAAE,KAAkC,CAAC;AAAA,EAChE;AAAA,EAEA,MAAM,cAAc,KAAK,QAAQ;AAAA,EACjC,MAAM,YAAY,WACd,aAAa,WAAW,SAAS,EAAE,OACnC;AAAA,EACJ,IAAI,MACF,mDAAmD,MAAM,KAAK,OAAO,QACpE,cACG,8CACA,YAAY,aAAa,WAAW,SAAS;AAAA,EAGnD,MAAM,YAAY,KAAK,SAAS,QAAQ,UAAU,WAAW;AAAA,EAC7D,IAAI,WAAW;AAAA,IACb,OAAO;AAAA,IACP,KAAK,KAAK,KAAK,KAAM;AAAA,EACvB;AAAA,EAEA,IAAI,OACF,GAAG,MAAM,GAAG,EAAE,IAAI,GAAG,IAAI,EACzB,IAAI,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC;AAAA,EAElC,IAAI,UAAU,QAAQ;AAAA,IACpB,OAAO,KAAK,OAAO,CAAC,MAClB,UAAU,MACR,CAAC,MAAM,KAAK,UAAU,EAAE,MAAM,EAAE,KAAK,OAAO,IAAI,MAAM,KAAK,UAAU,EAAE,KAAK,CAC9E,CACF;AAAA,IACA,IAAI,KAAK,SAAS;AAAA,MAAM,OAAO,KAAK,MAAM,GAAG,KAAK,KAAK;AAAA,EACzD;AAAA,EACA,OAAO;AAAA;AAGF,IAAM,aAAa,QAAQ,SAAS,WAAU,CACnD,IACA,IACA,UACA,OACW;AAAA,EACX,IAAI,UAAU,YAAY,UAAU;AAAA,IAClC,MAAM,IAAI,QAAQ,iBAAiB,0BAA0B,OAAO;AAAA,EAEtE,MAAM,MAAM,GACT,MACC,oEACF,EACC,IAAI,EAAE;AAAA,EACT,IAAI,CAAC;AAAA,IAAK,MAAM,IAAI,QAAQ,aAAa,mBAAmB,IAAI;AAAA,EAChE,MAAM,SAAS,GACZ,MACC,oEACF,EACC,IAAI,QAAQ;AAAA,EACf,IAAI,CAAC;AAAA,IAAQ,MAAM,IAAI,QAAQ,aAAa,mBAAmB,UAAU;AAAA,EACzE,IAAI,IAAI,gBAAgB,OAAO;AAAA,IAC7B,MAAM,IAAI,QAAQ,iBAAiB,uCAAuC;AAAA,EAC5E,IAAI,OAAO;AAAA,IAAU,OAAO,UAAU,IAAI,EAAE;AAAA,EAE5C,wBAAwB,IAAI,IAAI,WAAW;AAAA,EAE3C,IAAI,OAAO,kBAAkB,IAAI,IAAI,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;AAAA,EAC3E,IAAI,KAAK,KAAK,UAAU,CAAC,MAAM,EAAE,OAAO,QAAQ;AAAA,EAChD,IAAI,KAAK;AAAA,IAAG,MAAM,IAAI,QAAQ,aAAa,0BAA0B,UAAU;AAAA,EAE/E,IAAI,OAAO,UAAU,WAAY,KAAK,KAAK,IAAI,aAAa,OAAQ,KAAK,IAAK;AAAA,EAC9E,IAAI,QAAQ,UAAU,WAAW,KAAK,IAAK,YAAa,KAAK,KAAK,IAAI,aAAa;AAAA,EACnF,IAAI,SAAS,QAAQ,UAAU,QAAQ,QAAQ,OAAO;AAAA,IACpD,yBAAyB,IAAI,IAAI,WAAW;AAAA,IAC5C,OAAO,kBAAkB,IAAI,IAAI,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;AAAA,IACvE,KAAK,KAAK,UAAU,CAAC,MAAM,EAAE,OAAO,QAAQ;AAAA,IAC5C,OAAO,UAAU,WAAY,KAAK,KAAK,IAAI,aAAa,OAAQ,KAAK,IAAK;AAAA,IAC1E,QAAQ,UAAU,WAAW,KAAK,IAAK,YAAa,KAAK,KAAK,IAAI,aAAa;AAAA,EACjF;AAAA,EACA,KAAK,IAAI,WAAW,IAAI,aAAa,WAAW,MAAM,KAAK,CAAC;AAAA,EAC5D,OAAO,UAAU,IAAI,EAAE;AAAA,CACxB;AAEM,IAAM,eAAe,QAAQ,SAAS,aAAY,CACvD,IACA,IACA,MACW;AAAA,EACX,MAAM,MAAM,GACT,MAAM,oEAAoE,EAC1E,IAAI,EAAE;AAAA,EACT,IAAI,CAAC;AAAA,IAAK,MAAM,IAAI,QAAQ,aAAa,mBAAmB,IAAI;AAAA,EAChE,MAAM,WAAW,YAAY,eAAe,IAAI,IAAI,WAAW,GAAG,IAAI;AAAA,EACtE,aAAa,MAAM,WAAW;AAAA,IAC5B,KAAK,IAAI,WAAW,IAAI,KAAK,IAAI,OAAO,IAAI,MAAM,KAAK,CAAC;AAAA,EAC1D,OAAO,UAAU,IAAI,EAAE;AAAA,CACxB;AAEM,IAAM,eAAe,QAAQ,SAAS,aAAY,CAAC,IAAc,IAAqB;AAAA,EAC3F,MAAM,MAAM,GACT,MAAM,uDAAuD,EAC7D,IAAI,EAAE;AAAA,EACT,IAAI,CAAC;AAAA,IAAK,OAAO;AAAA,EACjB,KAAK,IAAI,WAAW,IAAI,aAAa,CAAC;AAAA,EACtC,OAAO;AAAA,CACR;;;AMpbD;AACA;AAGA;AAeO,IAAM,gBAAgB;AAAA,EAC3B;AAAA,EAAM;AAAA,EAAS;AAAA,EAAQ;AAAA,EAAe;AAAA,EAAa;AAAA,EAAe;AACpE;AAEA,IAAM,kBAAkB,cAAc,KAAK,IAAI;AAE/C,IAAM,mBAAmB;AAAA,EACvB;AAAA,EAAM;AAAA,EAAS;AAAA,EAAe;AAAA,EAAa;AAAA,EAAe;AAC5D;AAEA,IAAM,qBAAqB,iBAAiB,KAAK,IAAI;AAWrD,SAAS,UAAU,CAAC,IAAc,OAA2B;AAAA,EAC3D,OAAO,GACJ,MACC,mHACF,EACC,IAAI,KAAK;AAAA;AAGd,SAAS,WAAW,CAAC,MAAsB;AAAA,EACzC,OAAO,MAAM,OAAO,KAAK,MAAM;AAAA,GAAM,CAAC,EAAE,MAAM,EAAE;AAAA;AAKlD,SAAS,SAAS,CAChB,IACA,OACA,QACM;AAAA,EACN,MAAM,KAAK,YAAY,OAAO,IAAI;AAAA,EAClC,KAAK,IAAI,cAAc,IAAI,UAAU,KAAK;AAAA,EAC1C,KAAK,IAAI,cAAc,IAAI,aAAa,OAAO,SAAS;AAAA,EACxD,IAAI,OAAO;AAAA,IAAY,KAAK,IAAI,cAAc,IAAI,eAAe,OAAO,UAAU;AAAA,EAClF,KAAK,IAAI,cAAc,IAAI,QAAQ,OAAO,IAAI;AAAA;AAGhD,SAAS,YAAY,CACnB,IACA,OACA,QACA,OACA,QACM;AAAA,EACN,MAAM,OAAO,YAAY,OAAO,QAAQ,OAAO,MAAM;AAAA,EACrD,OAAO,QAAQ,CAAC,GAAG,MACjB,UAAU,IAAI,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,KAAK,IAAK,YAAY,EAAE,WAAW,CAAC,CACtF;AAAA;AAIF,SAAS,YAAY,CAAC,IAAc,OAAqB;AAAA,EACvD,IAAI,GAAG,MAAM,wDAAwD,EAAE,IAAI,KAAK;AAAA,IAC9E;AAAA,EACF,MAAM,MAAM,GAAG,MAAM,yCAAyC,EAAE,IAAI,KAAK;AAAA,EAGzE,MAAM,SAAS,eAAe,KAAK,QAAQ,EAAE;AAAA,EAC7C,IAAI,OAAO;AAAA,IAAQ,aAAa,IAAI,OAAO,QAAQ,MAAM,IAAI;AAAA;AAI/D,SAAS,aAAa,CAAC,IAAc,OAAe,MAAoB;AAAA,EACtE,MAAM,MAAM,WAAW,IAAI,KAAK;AAAA,EAChC,MAAM,OAAO,eAAe,IAAI;AAAA,EAChC,MAAM,OAAO,UACX,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,GACrB,KAAK,IAAI,CAAC,MAAM,EAAE,IAAI,CACxB;AAAA,EAEA,WAAW,MAAM,KAAK;AAAA,IAAS,KAAK,IAAI,cAAc,IAAI,IAAK,IAAI,aAAa,CAAC;AAAA,EAEjF,QAAQ,UAAU;AAAA,EAClB,IAAI,IAAI;AAAA,EACR,OAAO,IAAI,MAAM,QAAQ;AAAA,IACvB,MAAM,KAAK,MAAM;AAAA,IACjB,IAAI,UAAU,IAAI;AAAA,MAEhB,MAAM,OAAO,IAAI,GAAG;AAAA,MACpB,MAAM,OAAO,KAAK,GAAI;AAAA,MACtB,KAAK,KAAK,eAAe,OAAO;AAAA,QAAM,KAAK,IAAI,cAAc,KAAK,IAAI,eAAe,IAAI;AAAA,MACzF;AAAA,MACA;AAAA,IACF;AAAA,IACA,IAAI,IAAI;AAAA,IACR,OAAO,IAAI,MAAM,UAAU,YAAY,MAAM;AAAA,MAAK;AAAA,IAClD,MAAM,OAAO,IAAI,IAAI,IAAK,MAAM,IAAI,GAAwB,MAAO,YAAY;AAAA,IAC/E,MAAM,QAAQ,IAAI,MAAM,SAAS,IAAK,MAAM,GAAwB,MAAO,YAAY;AAAA,IACvF,aAAa,IAAI,OAAO,KAAK,MAAM,GAAG,CAAC,GAAG,MAAM,KAAK;AAAA,IACrD,IAAI;AAAA,EACN;AAAA;AAIK,SAAS,eAAe,CAAC,IAAc,IAAoB;AAAA,EAChE,MAAM,MAAM,GACT,MACC;AAAA;AAAA,iGAGF,EACC,IAAI,IAAI,EAAE;AAAA,EACb,OAAO,IAAI,KAAK;AAAA;AAKX,IAAM,iBAAiB,QAAQ,SAAS,eAAc,CAC3D,IACA,MACa;AAAA,EACb,MAAM,KAAK,MAAM,OAAO,KAAK,KAAK;AAAA,EAClC,MAAM,QAAQ,KAAK,IAAI,aAAa,IAAI,SAAS,KAAK,KAAK;AAAA,EAC3D,KAAK,IAAI,aAAa,IAAI,eAAe,MAAM,GAAG;AAAA,EAClD,IAAI,KAAK,gBAAgB;AAAA,IAAW,KAAK,IAAI,aAAa,IAAI,eAAe,KAAK,WAAW;AAAA,EAC7F,IAAI,KAAK,cAAc;AAAA,IAAW,KAAK,IAAI,aAAa,IAAI,aAAa,KAAK,SAAS;AAAA,EACvF,gBAAgB,IAAI,IAAI,KAAK,aAAa,IAAI;AAAA,EAC9C,IAAI,KAAK,SAAS,WAAW;AAAA,IAC3B,MAAM,SAAS,eAAe,KAAK,IAAI;AAAA,IACvC,IAAI,OAAO;AAAA,MAAQ,aAAa,IAAI,IAAI,QAAQ,MAAM,IAAI;AAAA,EAC5D;AAAA,EACA,OAAO,YAAY,IAAI,EAAE;AAAA,CAC1B;AAEM,SAAS,WAAW,CAAC,IAAc,IAAgC;AAAA,EACxE,OAAO,GACJ,MAAM,UAAU,+DAA+D,EAC/E,IAAI,EAAE;AAAA;AAKX,IAAM,WAAW;AAEV,SAAS,aAAa,CAC3B,IACA,OAAqD,CAAC,GACnC;AAAA,EACnB,MAAM,OAAO,UAAU;AAAA,EACvB,IAAI,KAAK,cAAc;AAAA,IACrB,OAAO,GACJ,MAAM,GAAG,0BAA0B,UAAU,EAC7C,IAAI,KAAK,SAAS;AAAA,EACvB,IAAI,KAAK;AAAA,IACP,OAAO,GACJ,MAAM,GAAG,4BAA4B,UAAU,EAC/C,IAAI,KAAK,WAAW;AAAA,EACzB,OAAO,GAAG,MAAM,GAAG,QAAQ,UAAU,EAAE,IAAI;AAAA;AAW7C,SAAS,YAAY,CAAC,UAA6D;AAAA,EACjF,OAAO,aAAa,OAChB,EAAE,QAAQ,qBAAqB,MAAM,CAAC,EAAE,IACxC,EAAE,QAAQ,iBAAiB,MAAM,CAAC,QAAQ,EAAE;AAAA;AAGlD,SAAS,iBAAgB,CAAC,IAAuB;AAAA,EAC/C,OAAO,aAAY,IAAI,MAAM,KAAK,aAAY,IAAI,cAAc;AAAA;AAGlE,SAAS,YAAW,CAAC,IAAc,OAAwB;AAAA,EACzD,OACE,GACG,MAAM,qEAAqE,EAC3E,IAAI,KAAK,KAAK;AAAA;AAKrB,SAAS,mBAAmB,CAC1B,IACA,UACA,WACe;AAAA,EACf,MAAM,IAAI,aAAa,QAAQ;AAAA,EAC/B,MAAM,UAAU,YAAY,iBAAiB;AAAA,EAC7C,MAAM,MAAM,GACT,MACC,yCAAyC,EAAE,SAAS;AAAA;AAAA,gDAGtD,EACC,IAAI,GAAG,EAAE,MAAM,GAAI,YAAY,CAAC,SAAS,IAAI,CAAC,CAAE;AAAA,EACnD,OAAO,KAAK,aAAa;AAAA;AAG3B,SAAS,eAAe,CAAC,IAAc,UAAuC;AAAA,EAC5E,MAAM,IAAI,aAAa,QAAQ;AAAA,EAC/B,OAAO,GACJ,MAAM,6CAA6C,EAAE,4BAA4B,UAAU,EAC3F,IAAI,GAAG,EAAE,IAAI;AAAA;AAIlB,SAAS,iBAAiB,CAAC,IAAc,UAA+B;AAAA,EACtE,MAAM,OAAO,gBAAgB,IAAI,QAAQ;AAAA,EACzC,MAAM,OAAO,YAAY,MAAM,MAAM,KAAK,MAAM;AAAA,EAChD,KAAK,QAAQ,CAAC,KAAK,MAAM;AAAA,IACvB,IAAI,IAAI,cAAc,KAAK;AAAA,MAAI,KAAK,IAAI,aAAa,IAAI,IAAI,aAAa,KAAK,EAAG;AAAA,GACnF;AAAA;AAIH,SAAS,gBAAgB,CAAC,IAAc,UAA+B;AAAA,EACrE,MAAM,aAAa,kBAAiB,EAAE;AAAA,EACtC,MAAM,IAAI,aAAa,QAAQ;AAAA,EAC/B,MAAM,UAAU,GACb,MACC,kCAAkC,EAAE;AAAA,gCAEtC,EACC,IAAI,GAAG,EAAE,IAAI;AAAA,EAChB,IAAI,CAAC,QAAQ;AAAA,IAAQ;AAAA,EACrB,MAAM,OAAO,YAAY,oBAAoB,IAAI,QAAQ,GAAG,MAAM,QAAQ,MAAM;AAAA,EAChF,QAAQ,QAAQ,CAAC,KAAK,MAAM;AAAA,IAC1B,IAAI;AAAA,MAAY,KAAK,IAAI,aAAa,IAAI,IAAI,aAAa,KAAK,EAAG;AAAA,IAC9D;AAAA,SAAG,MAAM,iDAAiD,EAAE,IAAI,KAAK,IAAK,IAAI,EAAE;AAAA,GACtF;AAAA;AAII,IAAM,4BAA4B,QAAQ,SAAS,0BAAyB,CACjF,IACM;AAAA,EACN,MAAM,UAAU,GACb,MAAM,oFAAoF,EAC1F,IAAI;AAAA,EACP,WAAW,KAAK;AAAA,IAAS,iBAAiB,IAAI,EAAE,SAAS;AAAA,CAC1D;AAOD,SAAS,eAAe,CACtB,IACA,IACA,UACA,QACM;AAAA,EAGN,IAAI,MAAiC;AAAA,EACrC,OAAO,KAAK;AAAA,IACV,IAAI,QAAQ;AAAA,MAAI,MAAM,IAAI,QAAQ,iBAAiB,+CAA+C,KAAK;AAAA,IACvG,MAAM,YAAY,IAAI,GAAG,GAAG,aAAa;AAAA,EAC3C;AAAA,EAEA,MAAM,UAAU,YAAY,IAAI,EAAE;AAAA,EAClC,IAAI,YAAY,QAAQ,aAAa,UAAU;AAAA,IAC7C,KAAK,IAAI,aAAa,IAAI,aAAa,QAAQ;AAAA,EAEjD,IAAI;AAAA,EACJ,IAAI,CAAC,QAAQ;AAAA,IACX,MAAM,WAAW,oBAAoB,IAAI,UAAU,EAAE,GAAG,IAAI;AAAA,EAC9D,EAAO;AAAA,IACL,iBAAiB,IAAI,QAAQ;AAAA,IAC7B,MAAM,YAAY,MAAsC;AAAA,MACtD,MAAM,OAAO,gBAAgB,IAAI,QAAQ,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;AAAA,MACpE,MAAM,KAAK,KAAK,UAAU,CAAC,MAAM,EAAE,OAAO,OAAO,QAAQ;AAAA,MACzD,IAAI,KAAK;AAAA,QAAG,MAAM,IAAI,QAAQ,aAAa,4BAA4B,OAAO,UAAU;AAAA,MACxF,OAAO,OAAO,UAAU,WACpB,CAAC,KAAK,KAAK,IAAI,aAAa,MAAM,KAAK,IAAK,SAAS,IACrD,CAAC,KAAK,IAAK,WAAW,KAAK,KAAK,IAAI,aAAa,IAAI;AAAA;AAAA,IAE3D,KAAK,MAAM,SAAS,UAAU;AAAA,IAC9B,IAAI,SAAS,QAAQ,UAAU,QAAQ,QAAQ,OAAO;AAAA,MACpD,kBAAkB,IAAI,QAAQ;AAAA,MAC9B,CAAC,MAAM,KAAK,IAAI,UAAU;AAAA,IAC5B;AAAA,IACA,MAAM,WAAW,MAAM,KAAK;AAAA;AAAA,EAE9B,KAAK,IAAI,aAAa,IAAI,aAAa,GAAG;AAAA;AAQrC,IAAM,eAAe,QAAQ,SAAS,aAAY,CACvD,IACA,IACA,UACA,OACa;AAAA,EACb,MAAM,MAAM,YAAY,IAAI,EAAE;AAAA,EAC9B,IAAI,CAAC;AAAA,IAAK,MAAM,IAAI,QAAQ,aAAa,qBAAqB,IAAI;AAAA,EAClE,IAAI,OAAO;AAAA,IAAU,OAAO;AAAA,EAC5B,MAAM,SAAS,YAAY,IAAI,QAAQ;AAAA,EACvC,IAAI,CAAC;AAAA,IAAQ,MAAM,IAAI,QAAQ,aAAa,4BAA4B,UAAU;AAAA,EAElF,IAAI,UAAU;AAAA,IAAQ,gBAAgB,IAAI,IAAI,QAAQ;AAAA,EACjD;AAAA,oBAAgB,IAAI,IAAI,OAAO,WAAW,EAAE,UAAU,MAAM,CAAC;AAAA,EAClE,OAAO,YAAY,IAAI,EAAE;AAAA,CAC1B;AAUM,IAAM,oBAAoB,QAAQ,SAAS,kBAAiB,CACjE,IACA,IACA,OAAqD,CAAC,GACzC;AAAA,EACb,MAAM,MAAM,YAAY,IAAI,EAAE;AAAA,EAC9B,IAAI,CAAC;AAAA,IAAK,MAAM,IAAI,QAAQ,aAAa,qBAAqB,IAAI;AAAA,EAClE,aAAa,IAAI,EAAE;AAAA,EACnB,MAAM,SAAS,WAAW,IAAI,EAAE;AAAA,EAChC,MAAM,WAAW,KAAK,aAAa,YAAY,KAAK,WAAW,IAAI;AAAA,EACnE,MAAM,MAAM,eAAe,IAAI;AAAA,IAC7B,OAAO,KAAK,SAAS,IAAI;AAAA,IACzB,aAAa,IAAI,eAAe;AAAA,IAChC,WAAW,YAAY;AAAA,EACzB,CAAC;AAAA,EACD,IAAI,OAAO;AAAA,IACT,aACE,IACA,IAAI,IACJ,OAAO,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,EAAE,YAAY,EAAE,GAC/D,MACA,IACF;AAAA,EAEF,IAAI,aAAa,IAAI;AAAA,IAAW,aAAa,IAAI,IAAI,IAAI,IAAI,IAAI,OAAO;AAAA,EACxE,OAAO,YAAY,IAAI,IAAI,EAAE;AAAA,CAC9B;AAEM,IAAM,iBAAiB,QAAQ,SAAS,eAAc,CAC3D,IACA,IACA,QACA,OAA6B,CAAC,GACjB;AAAA,EACb,IAAI,CAAC,YAAY,IAAI,EAAE;AAAA,IAAG,MAAM,IAAI,QAAQ,aAAa,qBAAqB,IAAI;AAAA,EAGlF,IAAI,KAAK,YAAY,aAAa,gBAAgB,IAAI,EAAE,MAAM,KAAK;AAAA,IACjE,MAAM,IAAI,QAAQ,SAAS,iCAAiC,KAAK,wBAAwB;AAAA,EAC3F,IAAI,OAAO,UAAU;AAAA,IAAW,KAAK,IAAI,aAAa,IAAI,SAAS,OAAO,KAAK;AAAA,EAC/E,IAAI,OAAO,gBAAgB;AAAA,IAAW,KAAK,IAAI,aAAa,IAAI,eAAe,OAAO,WAAW;AAAA,EACjG,IAAI,OAAO,cAAc,WAAW;AAAA,IAKlC,MAAM,OAAO,OAAO,aAAa;AAAA,IACjC,KAAK,YAAY,IAAI,EAAE,EAAG,aAAa,UAAU;AAAA,MAAM,gBAAgB,IAAI,IAAI,IAAI;AAAA,EACrF;AAAA,EACA,IAAI,OAAO,SAAS,WAAW;AAAA,IAC7B,aAAa,IAAI,EAAE;AAAA,IACnB,cAAc,IAAI,IAAI,OAAO,IAAI;AAAA,EACnC;AAAA,EACA,OAAO,YAAY,IAAI,EAAE;AAAA,CAC1B;AAeM,IAAM,eAAe,QAAQ,SAAS,aAAY,CACvD,IACA,IACA,MACe;AAAA,EACf,IAAI,CAAC,YAAY,IAAI,EAAE;AAAA,IAAG,MAAM,IAAI,QAAQ,aAAa,qBAAqB,IAAI;AAAA,EAClF,IAAI,KAAK,YAAY,aAAa,gBAAgB,IAAI,EAAE,MAAM,KAAK;AAAA,IACjE,MAAM,IAAI,QAAQ,SAAS,iCAAiC,KAAK,wBAAwB;AAAA,EAC3F,IAAI,KAAK,QAAQ;AAAA,IAAI,MAAM,IAAI,QAAQ,iBAAiB,yBAAyB;AAAA,EAEjF,aAAa,IAAI,EAAE;AAAA,EACnB,MAAM,SAAS,WAAW,IAAI,EAAE;AAAA,EAChC,MAAM,OAAO,mBAAmB,OAAO,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,EAAE,YAAY,EAAE,CAAC;AAAA,EAChG,MAAM,QAAQ,iBAAiB,MAAM,KAAK,GAAG;AAAA,EAC7C,IAAI,UAAU;AAAA,IAAG,MAAM,IAAI,QAAQ,iBAAiB,sCAAsC;AAAA,EAC1F,IAAI,QAAQ,KAAK,CAAC,KAAK;AAAA,IACrB,MAAM,IAAI,QACR,aACA,GAAG,uEACL;AAAA,EAGF,IAAI,CAAC,KAAK,IAAI,SAAS;AAAA;AAAA,CAAM,GAAG;AAAA,IAC9B,MAAM,WAAW,OAAO,OAAO,CAAC,MAAM,EAAE,KAAK,SAAS,KAAK,GAAG,CAAC;AAAA,IAC/D,MAAM,OAAO,SAAS,IAAI,CAAC,MACzB,KAAK,aAAa,EAAE,KAAK,WAAW,KAAK,KAAK,KAAK,GAAG,IAAI,EAAE,KAAK,QAAQ,KAAK,KAAK,KAAK,GAAG,CAC7F;AAAA,IACA,IAAI,KAAK,MAAM,CAAC,MAAM,EAAE,SAAS,KAAK,CAAC,EAAE,SAAS;AAAA;AAAA,CAAM,CAAC,GAAG;AAAA,MAC1D,MAAM,UAAU,KAAK,aAAa,WAAW,SAAS,MAAM,GAAG,CAAC;AAAA,MAChE,QAAQ,QAAQ,CAAC,GAAG,MAAM,KAAK,IAAI,cAAc,EAAE,IAAI,QAAQ,KAAK,EAAG,CAAC;AAAA,MACxE,OAAO,EAAE,IAAI,SAAS,MAAM,UAAU,KAAK,aAAa,QAAQ,GAAG,SAAS,gBAAgB,IAAI,EAAE,EAAE;AAAA,IACtG;AAAA,EACF;AAAA,EAGA,MAAM,UAAU,KAAK,aACjB,KAAK,WAAW,KAAK,KAAK,KAAK,GAAG,IAClC,KAAK,QAAQ,KAAK,KAAK,KAAK,GAAG;AAAA,EACnC,cAAc,IAAI,IAAI,OAAO;AAAA,EAC7B,OAAO,EAAE,IAAI,SAAS,YAAY,MAAM,UAAU,KAAK,aAAa,QAAQ,GAAG,SAAS,gBAAgB,IAAI,EAAE,EAAE;AAAA,CACjH;AAEM,IAAM,iBAAiB,QAAQ,SAAS,eAAc,CAC3D,IACA,IACA,MACe;AAAA,EACf,IAAI,CAAC,YAAY,IAAI,EAAE;AAAA,IAAG,MAAM,IAAI,QAAQ,aAAa,qBAAqB,IAAI;AAAA,EAClF,aAAa,IAAI,EAAE;AAAA,EACnB,MAAM,OAAO,eAAe,IAAI;AAAA,EAChC,IAAI,KAAK,QAAQ;AAAA,IACf,MAAM,SAAS,WAAW,IAAI,EAAE;AAAA,IAChC,MAAM,OAAO,OAAO,SAAS,OAAO,OAAO,SAAS,GAAI,YAAY;AAAA,IACpE,aAAa,IAAI,IAAI,MAAM,MAAM,IAAI;AAAA,EACvC;AAAA,EACA,OAAO,EAAE,IAAI,SAAS,KAAK,SAAS,GAAG,UAAU,KAAK,QAAQ,SAAS,gBAAgB,IAAI,EAAE,EAAE;AAAA,CAChG;AAEM,IAAM,kBAAkB,QAAQ,SAAS,gBAAe,CAC7D,IACA,IACA,MACe;AAAA,EACf,IAAI,CAAC,YAAY,IAAI,EAAE;AAAA,IAAG,MAAM,IAAI,QAAQ,aAAa,qBAAqB,IAAI;AAAA,EAClF,aAAa,IAAI,EAAE;AAAA,EACnB,MAAM,OAAO,eAAe,IAAI;AAAA,EAChC,IAAI,KAAK,QAAQ;AAAA,IACf,MAAM,SAAS,WAAW,IAAI,EAAE;AAAA,IAChC,MAAM,QAAQ,OAAO,SAAS,OAAO,GAAI,YAAY;AAAA,IACrD,aAAa,IAAI,IAAI,MAAM,MAAM,KAAK;AAAA,EACxC;AAAA,EACA,OAAO,EAAE,IAAI,SAAS,KAAK,SAAS,GAAG,UAAU,KAAK,QAAQ,SAAS,gBAAgB,IAAI,EAAE,EAAE;AAAA,CAChG;AAEM,IAAM,iBAAiB,QAAQ,SAAS,eAAc,CAAC,IAAc,IAAqB;AAAA,EAC/F,IAAI,CAAC,YAAY,IAAI,EAAE;AAAA,IAAG,OAAO;AAAA,EACjC,KAAK,IAAI,aAAa,IAAI,aAAa,CAAC;AAAA,EAGxC,WAAW,KAAK,aAAa,IAAI,cAAc,UAAU,EAAE;AAAA,IACzD,KAAK,IAAI,cAAc,GAAG,aAAa,CAAC;AAAA,EAC1C,WAAW,KAAK,aAAa,IAAI,aAAa,aAAa,EAAE;AAAA,IAC3D,KAAK,IAAI,aAAa,GAAG,aAAa,IAAI;AAAA,EAC5C,OAAO;AAAA,CACR;AAGD,SAAS,YAAY,CAAC,IAAc,OAAe,KAAa,UAA4B;AAAA,EAC1F,OACE,GACG,MAAM,kBAAkB,eAAe,2BAA2B,EAClE,IAAI,QAAQ,EACf,IAAI,CAAC,MAAM,EAAE,EAAE;AAAA;AAGnB,SAAS,gBAAgB,CAAC,UAAkB,QAAwB;AAAA,EAClE,IAAI,WAAW;AAAA,IAAI,OAAO;AAAA,EAC1B,IAAI,IAAI;AAAA,EACR,IAAI,IAAI,SAAS,QAAQ,MAAM;AAAA,EAC/B,OAAO,MAAM,IAAI;AAAA,IACf;AAAA,IACA,IAAI,SAAS,QAAQ,QAAQ,IAAI,OAAO,MAAM;AAAA,EAChD;AAAA,EACA,OAAO;AAAA;;;AC1fF,SAAS,SAAS,CAAC,IAAoB;AAAA,EAC5C,GAAG,KAAK,WAAW;AAAA,EACnB,IAAI;AAAA,IACF,GAAG,KAAK,UAAU;AAAA,IAClB,MAAM;AAAA;AAKH,SAAS,YAAY,CAAC,IAAuB;AAAA,EAClD,MAAM,MAAM,GACT,MAAM,6DAA6D,EACnE,IAAI;AAAA,EACP,OAAO,OAAO;AAAA;AAGhB,SAAS,SAAS,CAAC,IAAc,OAAe,QAAyB;AAAA,EACvE,MAAM,OAAO,GAAG,MAAM,qBAAqB,QAAQ,EAAE,IAAI;AAAA,EACzD,OAAO,KAAK,KAAK,CAAC,MAAM,EAAE,SAAS,MAAM;AAAA;AAG3C,SAAS,YAAW,CAAC,IAAc,OAAwB;AAAA,EACzD,OACE,GACG,MAAM,qEAAqE,EAC3E,IAAI,KAAK,KAAK;AAAA;AASd,SAAS,cAAc,CAAC,IAAoB;AAAA,EACjD,IAAI,CAAC,UAAU,IAAI,WAAW,MAAM;AAAA,IAClC,GAAG,KAAK,gEAAgE;AAAA,EAC1E,IAAI,CAAC,UAAU,IAAI,WAAW,WAAW;AAAA,IACvC,GAAG,KAAK,+CAA+C;AAAA,EAEzD,IAAI,CAAC,aAAY,IAAI,eAAe;AAAA,IAAG;AAAA,EAEvC,MAAM,KAAK,GAAG,YAAY,MAAM;AAAA,IAE9B,GAAG,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAMP;AAAA,IACD,GAAG,KAAK,0BAA0B;AAAA,IAClC,wBAAwB,EAAE;AAAA,GAC3B;AAAA,EACD,GAAG;AAAA,EAEH,wBAAwB,EAAE;AAAA;AAQrB,SAAS,YAAY,CAAC,IAAoB;AAAA,EAC/C,MAAM,MAA0B;AAAA,IAC9B,CAAC,SAAS,MAAM;AAAA,IAChB,CAAC,SAAS,MAAM;AAAA,IAChB,CAAC,WAAW,MAAM;AAAA,IAClB,CAAC,WAAW,4BAA4B;AAAA,IACxC,CAAC,gBAAgB,SAAS;AAAA,IAC1B,CAAC,mBAAmB,SAAS;AAAA,IAC7B,CAAC,eAAe,MAAM;AAAA,IACtB,CAAC,cAAc,MAAM;AAAA,IAGrB,CAAC,QAAQ,8BAA8B;AAAA,IACvC,CAAC,UAAU,MAAM;AAAA,EACnB;AAAA,EACA,YAAY,KAAK,SAAS,KAAK;AAAA,IAC7B,IAAI,CAAC,UAAU,IAAI,SAAS,GAAG;AAAA,MAAG,GAAG,KAAK,gCAAgC,OAAO,MAAM;AAAA,EACzF;AAAA,EACA,GAAG,KACD,qDACE,mFACJ;AAAA;AAQK,SAAS,gBAAgB,CAAC,IAAoB;AAAA,EACnD,IAAI,CAAC,UAAU,IAAI,cAAc,aAAa;AAAA,IAC5C,GAAG,KAAK,0EAA0E;AAAA;AAc/E,SAAS,gBAAgB,CAAC,IAAoB;AAAA,EACnD,IAAI,CAAC,UAAU,IAAI,cAAc,QAAQ;AAAA,IACvC,GAAG,KAAK,qEAAqE;AAAA,EAC/E,IAAI,CAAC,UAAU,IAAI,cAAc,SAAS;AAAA,IACxC,GAAG,KAAK,sEAAsE;AAAA,EAChF,IAAI,CAAC,UAAU,IAAI,cAAc,UAAU;AAAA,IACzC,GAAG,KAAK,uEAAuE;AAAA,EACjF,GAAG,KAAK,oCAAoC;AAAA;AASvC,SAAS,gBAAgB,CAAC,IAAoB;AAAA,EACnD,IAAI,CAAC,UAAU,IAAI,aAAa,WAAW;AAAA,IACzC,GAAG,KAAK,iDAAiD;AAAA,EAC3D,0BAA0B,EAAE;AAAA;AAQvB,SAAS,YAAY,CAAC,IAAoB;AAAA,EAC/C,IAAI,CAAC,UAAU,IAAI,gBAAgB,KAAK;AAAA,IACtC,GAAG,KAAK,8CAA8C;AAAA;AAqBnD,SAAS,qBAAqB,CAAC,IAAoB;AAAA,EACxD,IAAI,UAAU,IAAI,gBAAgB,KAAK;AAAA,IAAG;AAAA,EAC1C,MAAM,KAAK,GAAG,YAAY,MAAM;AAAA,IAC9B,GAAG,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAqBP;AAAA,IACD,IAAI,aAAY,IAAI,OAAO;AAAA,MAAG,GAAG,KAAK,mDAAmD;AAAA,GAC1F;AAAA,EACD,GAAG;AAAA;AAIE,SAAS,UAAU,CAAC,IAAoB;AAAA,EAC7C,UAAU,EAAE;AAAA,EACZ,aAAa,EAAE;AAAA,EACf,sBAAsB,EAAE;AAAA,EACxB,eAAe,EAAE;AAAA,EACjB,aAAa,EAAE;AAAA,EACf,iBAAiB,EAAE;AAAA,EACnB,iBAAiB,EAAE;AAAA,EACnB,iBAAiB,EAAE;AAAA;;;AT9Ld,SAAS,UAAU,GAAS;AAAA,EACjC,UAAU,YAAY,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,EAC5C,UAAU,SAAS,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA;AAIpC,SAAS,WAAW,GAAa;AAAA,EACtC,WAAW;AAAA,EACX,MAAM,KAAK,IAAI,SAAS,OAAO,GAAG,EAAE,QAAQ,KAAK,CAAC;AAAA,EAClD,GAAG,KAAK,4BAA4B;AAAA,EACpC,WAAW,EAAE;AAAA,EACb,OAAO;AAAA;;;ADzBT;AAGA;AAGA;;;AWJA,IAAM,MAAM;AAOL,SAAS,kBAAkB,CAAC,IAAkC;AAAA,EACnE,MAAM,MAAM,GAAG,MAAM,sCAAsC,EAAE,IAAI,GAAG;AAAA,EAGpE,IAAI,CAAC;AAAA,IAAK,OAAO;AAAA,EACjB,MAAM,QAAQ,YAAY,IAAI,IAAI,KAAK;AAAA,EACvC,IAAI,CAAC,OAAO;AAAA,IACV,qBAAqB,EAAE;AAAA,IACvB,OAAO;AAAA,EACT;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,kBAAkB,CAAC,IAAc,IAAkB;AAAA,EACjE,GAAG,MACD,mGACF,EAAE,IAAI,KAAK,EAAE;AAAA;AAGR,SAAS,oBAAoB,CAAC,IAAoB;AAAA,EACvD,GAAG,MAAM,gCAAgC,EAAE,IAAI,GAAG;AAAA;;AC/BpD;AAUA,IAAM,aAAa;AAInB,IAAM,uBAAuB;AAE7B,SAAS,QAAQ,CAAC,IAAc,KAA4B;AAAA,EAC1D,OACG,GAAG,MAAM,sCAAsC,EAAE,IAAI,GAAG,GACrD,SAAS;AAAA;AAIjB,SAAS,SAAS,CAAC,IAAc,KAAa,OAAqB;AAAA,EACjE,GAAG,MACD,mGACF,EAAE,IAAI,KAAK,KAAK;AAAA;AAelB,SAAS,eAAe,CAAC,IAAc,IAAkB;AAAA,EACvD,GAAG,MAAM,2DAA2D,EAAE,IAAI,EAAE;AAAA,EAC5E,MAAM,IAAI,GACP,MAAM,mFAAmF,EACzF,IAAI,EAAE;AAAA,EACT,IAAI;AAAA,IACF,GAAG,MACD,6FACF,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,IAAI,EAAE,QAAQ,EAAE;AAAA;AAW1D,SAAS,cAAc,CAAC,IAAc,UAAkB,MAAyC;AAAA,EAC/F,OAAO,GACJ,MACC;AAAA;AAAA;AAAA,eAGS,2CAA2C;AAAA,qBAEtD,EACC,IAAI,GAAG,IAAI;AAAA;AAGhB,SAAS,eAAe,CAAC,IAAc,GAAqB;AAAA,EAC1D,GAAG,MACD,2FACF,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE;AAAA;AAG/C,SAAS,aAAa,CAAC,IAAc,IAAkB;AAAA,EACrD,GAAG,MAAM,yDAAyD,EAAE,IAAI,EAAE;AAAA,EAC1E,MAAM,IAAI,eAAe,IAAI,YAAY,EAAE,EAAE;AAAA,EAC7C,IAAI;AAAA,IAAG,gBAAgB,IAAI,CAAC;AAAA;AAK9B,SAAS,sBAAsB,CAAC,IAAc,YAA0B;AAAA,EACtE,GAAG,MAAM,kEAAkE,EAAE,IAAI,UAAU;AAAA,EAC3F,WAAW,KAAK,eAAe,IAAI,qBAAqB,UAAU;AAAA,IAAG,gBAAgB,IAAI,CAAC;AAAA;AAQ5F,SAAS,WAAW,CAAC,IAAoB;AAAA,EACvC,GAAG,MAAM,wBAAwB,EAAE,IAAI;AAAA,EACvC,WAAW,KAAK,GACb,MAAM,wEAAwE,EAC9E,IAAI;AAAA,IACL,GAAG,MACD,6FACF,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,IAAI,EAAE,QAAQ,EAAE;AAAA,EACxD,WAAW,KAAK,eAAe,IAAI,OAAO;AAAA,IAAG,gBAAgB,IAAI,CAAC;AAAA,EAClE,MAAM,MAAO,GAAG,MAAM,0CAA0C,EAAE,IAAI,EAA2B,KAAK;AAAA,EACtG,UAAU,IAAI,cAAc,OAAO,GAAG,CAAC;AAAA,EACvC,UAAU,IAAI,wBAAwB,oBAAoB;AAAA;AAM5D,SAAS,iBAAiB,CAAC,IAAoB;AAAA,EAC7C,MAAM,SAAS,OAAO,SAAS,IAAI,YAAY,KAAK,GAAG;AAAA,EACvD,QAAQ,SAAS,QAAQ,SAAS,gBAAgB,IAAI,MAAM;AAAA,EAC5D,IAAI,QAAQ,WAAW;AAAA,IAAG;AAAA,EAE1B,MAAM,SAAS,IAAI;AAAA,EACnB,MAAM,YAAY,IAAI;AAAA,EACtB,MAAM,QAAQ,IAAI;AAAA,EAElB,WAAW,KAAK,SAAS;AAAA,IACvB,QAAQ,EAAE;AAAA,WACH;AAAA,QACH,OAAO,IAAI,EAAE,MAAM;AAAA,QACnB;AAAA,WACG,cAAc;AAAA,QACjB,MAAM,MAAM,GACT,MAAM,4CAA4C,EAClD,IAAI,EAAE,MAAM;AAAA,QACf,IAAI,KAAK;AAAA,UAAQ,OAAO,IAAI,IAAI,MAAM;AAAA,QACtC;AAAA,MACF;AAAA,WACK;AAAA,QACH,UAAU,IAAI,EAAE,MAAM;AAAA,QACtB;AAAA,WACG;AAAA,QAEH,IAAI,EAAE,QAAQ,UAAU,EAAE,QAAQ,eAAe,EAAE,QAAQ,eAAe;AAAA,UACxE,MAAM,IAAI,GACP,MAAM,iDAAiD,EACvD,IAAI,EAAE,MAAM;AAAA,UACf,IAAI,GAAG;AAAA,YAAa,MAAM,IAAI,EAAE,WAAW;AAAA,QAC7C;AAAA,QACA;AAAA;AAAA,EAGN;AAAA,EAEA,WAAW,MAAM;AAAA,IAAQ,gBAAgB,IAAI,EAAE;AAAA,EAC/C,WAAW,QAAQ;AAAA,IAAO,uBAAuB,IAAI,IAAI;AAAA,EACzD,WAAW,MAAM,WAAW;AAAA,IAC1B,MAAM,IAAI,GACP,MAAM,8CAA8C,EACpD,IAAI,EAAE;AAAA,IACT,IAAI,GAAG,eAAe,MAAM,IAAI,EAAE,WAAW;AAAA,MAAG;AAAA,IAChD,cAAc,IAAI,EAAE;AAAA,EACtB;AAAA,EACA,UAAU,IAAI,cAAc,OAAO,IAAI,CAAC;AAAA;AAM1C,SAAS,WAAW,CAAC,IAAuB;AAAA,EAC1C,IAAI,CAAC,aAAa,EAAE;AAAA,IAAG,OAAO;AAAA,EAC9B,MAAM,UAAU,SAAS,IAAI,sBAAsB;AAAA,EACnD,MAAM,MAAM,SAAS,IAAI,YAAY;AAAA,EACrC,GAAG,YAAY,MAAM;AAAA,IACnB,IAAI,YAAY,wBAAwB,QAAQ;AAAA,MAAM,YAAY,EAAE;AAAA,IAC/D;AAAA,wBAAkB,EAAE;AAAA,GAC1B,EAAE;AAAA,EACH,OAAO;AAAA;AAIF,SAAS,kBAAkB,CAAC,IAAuB;AAAA,EACxD,IAAI,CAAC,aAAa,EAAE;AAAA,IAAG,OAAO;AAAA,EAC9B,GAAG,YAAY,MAAM,YAAY,EAAE,CAAC,EAAE;AAAA,EACtC,OAAO;AAAA;AAGT,SAAS,SAAS,CAAC,IAAc,OAAe,OAA4B;AAAA,EAC1E,MAAM,QAAQ,MACX,MAAM,KAAK,EACX,OAAO,OAAO,EACd,IAAI,CAAC,MAAM,IAAI,EAAE,QAAQ,MAAM,IAAI,IAAI,EACvC,KAAK,GAAG;AAAA,EACX,IAAI,CAAC;AAAA,IAAO,OAAO,CAAC;AAAA,EACpB,MAAM,OAAO,GACV,MACC,gKACF,EACC,IAAI,OAAO,KAAK;AAAA,EAOnB,OAAO,KAAK,IAAI,CAAC,OAAO;AAAA,IACtB,MAAM,EAAE;AAAA,IACR,IAAI,EAAE;AAAA,IACN,aAAa,EAAE;AAAA,IACf,OAAO,EAAE,SAAS;AAAA,IAClB,SAAS,EAAE;AAAA,EACb,EAAE;AAAA;AAGJ,SAAS,WAAW,CAAC,MAAc,GAAmB;AAAA,EACpD,MAAM,IAAI,KAAK,YAAY,EAAE,QAAQ,EAAE,YAAY,CAAC;AAAA,EACpD,IAAI,IAAI;AAAA,IAAG,OAAO,KAAK,MAAM,GAAG,EAAE;AAAA,EAClC,MAAM,QAAQ,KAAK,IAAI,GAAG,IAAI,EAAE;AAAA,EAChC,OAAO,GAAG,QAAQ,IAAI,WAAK,KAAK,KAAK,MAAM,OAAO,IAAI,EAAE,SAAS,EAAE;AAAA;AAIrE,SAAS,UAAU,CAAC,IAAc,OAAe,OAA4B;AAAA,EAC3E,MAAM,OAAO,IAAI,MAAM,QAAQ,WAAW,MAAM;AAAA,EAChD,MAAM,MAAmB,CAAC;AAAA,EAC1B,MAAM,OAAO,GACV,MACC,0IACF,EACC,IAAI,MAAM,MAAM,KAAK;AAAA,EAMxB,WAAW,KAAK;AAAA,IACd,IAAI,KAAK;AAAA,MACP,MAAM;AAAA,MACN,IAAI,EAAE;AAAA,MACN,aAAa,EAAE;AAAA,MACf,OAAO,EAAE,SAAS;AAAA,MAClB,SAAS,YAAY,EAAE,QAAQ,EAAE,SAAS,IAAI,KAAK;AAAA,IACrD,CAAC;AAAA,EAEH,IAAI,IAAI,SAAS,OAAO;AAAA,IACtB,MAAM,OAAO,GACV,MACC;AAAA;AAAA;AAAA,+CAGuC;AAAA,8DAEzC,EACC,IAAI,MAAM,QAAQ,IAAI,MAAM;AAAA,IAK/B,WAAW,KAAK;AAAA,MACd,IAAI,KAAK;AAAA,QACP,MAAM;AAAA,QACN,IAAI,EAAE;AAAA,QACN,aAAa,EAAE;AAAA,QACf,SAAS,YAAY,EAAE,QAAQ,IAAI,KAAK;AAAA,MAC1C,CAAC;AAAA,EACL;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,MAAM,CACpB,IACA,OACA,OAA2B,CAAC,GACf;AAAA,EACb,MAAM,QAAQ,KAAK,SAAS;AAAA,EAC5B,IAAI,YAAY,EAAE,GAAG;AAAA,IACnB,IAAI;AAAA,MACF,MAAM,OAAO,UAAU,IAAI,OAAO,KAAK;AAAA,MACvC,IAAI,KAAK;AAAA,QAAQ,OAAO;AAAA,MACxB,MAAM;AAAA,EAGV;AAAA,EACA,OAAO,WAAW,IAAI,OAAO,KAAK;AAAA;;;AZvQpC;AACA;AACA;AACA;;;AarBA;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;;;ACVA;AACA;AASO,SAAS,YAAY,CAAC,UAAiB,UAA2B,QAAY;AAAA,EACnF,MAAM,QAAiD,CAAC;AAAA,EAExD,WAAW,SAAS,SAAQ;AAAA,IAC1B,MAAM,KAA8B;AAAA,MAClC,SAAS,MAAM;AAAA,MACf,WAAW;AAAA,QACT,OAAO;AAAA,UACL,aAAa;AAAA,UACb,SAAS,EAAE,oBAAoB,EAAE,QAAQ,iBAAE,aAAa,MAAM,QAAQ,EAAE,EAAE;AAAA,QAC5E;AAAA,MACF;AAAA,IACF;AAAA,IACA,IAAI,MAAM,SAAS;AAAA,MACjB,GAAG,cAAc;AAAA,QACf,UAAU;AAAA,QACV,SAAS,EAAE,oBAAoB,EAAE,QAAQ,iBAAE,aAAa,MAAM,OAAO,EAAE,EAAE;AAAA,MAC3E;AAAA,IACF;AAAA,KACC,MAAM,MAAM,UAAU,CAAC,GAAG,MAAM,OAAO,YAAY,KAAK;AAAA,EAC3D;AAAA,EAEA,OAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM,EAAE,OAAO,oBAAoB,kBAAQ;AAAA,IAC3C;AAAA,EACF;AAAA;;;ACzBF;AACA;AACA;AAcA,IAAM,SAAS;AAEf,SAAS,WAAW,CAAC,KAA6B;AAAA,EAChD,MAAM,SAAS,IAAI,QAAQ,IAAI,QAAQ;AAAA,EACvC,IAAI,CAAC;AAAA,IAAQ,OAAO;AAAA,EACpB,WAAW,QAAQ,OAAO,MAAM,GAAG,GAAG;AAAA,IACpC,OAAO,MAAM,KAAK,KAAK,KAAK,EAAE,MAAM,GAAG;AAAA,IACvC,IAAI,MAAM;AAAA,MAAQ,OAAO,mBAAmB,EAAE,KAAK,GAAG,CAAC;AAAA,EACzD;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,YAAY,CAAC,KAAc,MAAyB;AAAA,EAClE,MAAM,OAAO,IAAI,QAAQ,IAAI,eAAe;AAAA,EAC5C,IAAI,MAAM,WAAW,SAAS;AAAA,IAAG,OAAO,KAAK,MAAM,CAAC;AAAA,EACpD,OAAO,YAAY,GAAG,KAAK,KAAI,aAAa,IAAI,OAAO;AAAA;AAIlD,SAAS,UAAU,CAAC,KAA0B;AAAA,EACnD,OAAO,CAAC,IAAI,UAAU,IAAI,eAAe,QAAQ,IAAI,MAAM;AAAA;AAItD,SAAS,WAAW,CAAC,KAAwD;AAAA,EAClF,IAAI,IAAI;AAAA,IAAO,OAAO;AAAA,EACtB,IAAI,IAAI,eAAe;AAAA,IAAM,OAAO,EAAE,OAAO,IAAI,aAAa,KAAK,SAAS;AAAA,EAC5E,IAAI,IAAI,IAAI;AAAA,IACV,MAAM,IAAI,aAAa,IAAI,IAAI,IAAI,OAAO,IAAI,OAAO;AAAA,IACrD,OAAO,EAAE,OAAO,EAAE,OAAO,KAAK,EAAE,IAAI;AAAA,EACtC;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,aAAa,CAAC,KAAc,MAAU,KAA0B;AAAA,EAC9E,MAAM,MAAM,YAAY,GAAG;AAAA,EAC3B,IAAI,CAAC;AAAA,IAAK,OAAO;AAAA,EACjB,OAAO,aAAa,KAAK,IAAG,MAAM,IAAI;AAAA;AAQjC,SAAS,gBAAgB,CAAC,KAAc,MAAU,KAAiB,IAAuB;AAAA,EAC/F,IAAI,CAAC,WAAW,GAAG;AAAA,IAAG,OAAO;AAAA,EAC7B,MAAM,YAAY,aAAa,KAAK,IAAG;AAAA,EACvC,IAAI,CAAC;AAAA,IAAW,OAAO;AAAA,EACvB,MAAM,MAAM,YAAY,GAAG;AAAA,EAC3B,IAAI,OAAO,cAAc,IAAI;AAAA,IAAO,OAAO;AAAA,EAC3C,OAAO,gBAAgB,IAAI,SAAS;AAAA;AAO/B,SAAS,UAAU,CACxB,KACA,MACA,KACuC;AAAA,EACvC,IAAI,IAAI,SAAS,IAAI,eAAe,QAAQ,CAAC,IAAI;AAAA,IAAI,OAAO;AAAA,EAC5D,MAAM,IAAI,aAAa,IAAI,IAAI,IAAI,OAAO,IAAI,OAAO;AAAA,EACrD,MAAM,YAAY,aAAa,KAAK,IAAG;AAAA,EACvC,IAAI,CAAC;AAAA,IAAW,OAAO;AAAA,EACvB,IAAI,cAAc,EAAE;AAAA,IAAO,OAAO,EAAE,OAAO,EAAE,OAAO,KAAK,EAAE,IAAI;AAAA,EAC/D,IAAI,EAAE,QAAQ,cAAc,EAAE,QAAQ,KAAK,IAAI,IAAI,EAAE,SAAS;AAAA,IAC5D,OAAO,EAAE,OAAO,EAAE,OAAO,KAAK,EAAE,IAAI;AAAA,EACtC;AAAA,EACA,OAAO;AAAA;AAIF,SAAS,SAAS,CAAC,KAAuB;AAAA,EAC/C,OAAO,IAAI,WAAW,UAAU,IAAI,QAAQ,IAAI,QAAQ,KAAK,IAAI,SAAS,WAAW;AAAA;AAGvF,IAAM,eAAe,EAAE,gBAAgB,2BAA2B;AAG3D,SAAS,UAAU,GAAW;AAAA,EACnC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAwBgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAkBZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBb,IAAM,cAAc;AAGb,SAAS,UAAU,CAAC,MAAsB;AAAA,EAC/C,MAAM,IAAI,KAAK,YAAY,EAAE,QAAQ,QAAQ;AAAA,EAC7C,IAAI,KAAK;AAAA,IAAG,OAAO,KAAK,MAAM,GAAG,IAAI,CAAC,IAAI,cAAc,KAAK,MAAM,IAAI,CAAC;AAAA,EACxE,OAAO,cAAc;AAAA;AAMvB,eAAsB,QAAQ,CAAC,KAAe,MAAqC;AAAA,EACjF,MAAM,KAAK,IAAI,QAAQ,IAAI,cAAc,KAAK;AAAA,EAC9C,IAAI,CAAC,GAAG,SAAS,WAAW;AAAA,IAAG,OAAO;AAAA,EACtC,MAAM,OAAO,WAAW,MAAM,IAAI,KAAK,CAAC;AAAA,EACxC,MAAM,UAAU,IAAI,QAAQ,IAAI,OAAO;AAAA,EACvC,OAAO,IAAI,SAAS,MAAM,EAAE,QAAQ,IAAI,QAAQ,QAAQ,CAAC;AAAA;AAGpD,SAAS,YAAY,GAAa;AAAA,EACvC,OAAO,SAAS,KAAK,EAAE,OAAO,eAAe,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA;;;AFhJ1D,MAAM,uBAAuB,QAAQ;AAAA,EAE/B;AAAA,EACA;AAAA,EAFX,WAAW,CACA,MACA,MACT;AAAA,IACA,MACE,eACA,QAAQ,qEACN,mDACJ;AAAA,IAPS;AAAA,IACA;AAAA,IAOT,KAAK,OAAO;AAAA;AAEhB;AAkCA,SAAS,UAAU,CAAC,SAAyB;AAAA,EAC3C,OAAO;AAAA;AAAA;AAAA,6CAGoC;AAAA;AAAA;AAAA;AAMtC,SAAS,WAAW,CAAC,OAAsB,CAAC,GAAkB;AAAA,EACnE,MAAM,KAAK,YAAY;AAAA,EACvB,MAAM,OAAO,UAAU,EAAE;AAAA,EACzB,MAAM,MAAgB,EAAE,IAAI,KAAK;AAAA,EACjC,MAAM,YAAY,KAAK,KAAK,CAAC,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,IAAI;AAAA,EAG7D,MAAM,MAAM,gBAAgB,EAAE;AAAA,EAC9B,MAAM,OAAO,KAAK,QAAQ,IAAI;AAAA,EAC9B,MAAM,OAAO,KAAK,QAAQ,IAAI;AAAA,EAC9B,MAAM,iBAAiB,KAAK,kBAAkB,IAAI;AAAA,EAClD,MAAM,WAAW,KAAK,YAAY,IAAI;AAAA,EAItC,MAAM,OAAmB,KAAK,QAC1B,EAAE,OAAO,MAAM,aAAa,MAAM,IAAI,MAAM,OAAO,GAAG,SAAS,EAAE,IACjE,KAAK,QACH,EAAE,OAAO,OAAO,aAAa,KAAK,OAAO,IAAI,MAAM,OAAO,GAAG,SAAS,EAAE,IACxE;AAAA,IACE,OAAO;AAAA,IACP,aAAa;AAAA,IACb;AAAA,IACA,OAAO;AAAA,IACP,SAAS;AAAA,EACX;AAAA,EAEN,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,SAAS,IAAI,MAAM;AAAA,MACnB;AAAA,MACA,UAAU;AAAA,MACV,KAAK,KAAK,MACN,EAAE,MAAM,IAAI,KAAK,KAAK,IAAI,QAAQ,GAAG,KAAK,IAAI,KAAK,KAAK,IAAI,OAAO,EAAE,IACrE;AAAA,WACE,MAAK,CAAC,KAAK;AAAA,QACf,MAAM,OAAM,IAAI,IAAI,IAAI,GAAG;AAAA,QAO3B,IACE,KAAI,aAAa,aACjB,KAAI,SAAS,WAAW,QAAQ,KAChC,KAAI,aAAa,kBACjB;AAAA,UAIA,IAAI,CAAC,iBAAiB,KAAK,MAAK,MAAM,EAAE;AAAA,YAAG,OAAO,aAAa;AAAA,QACjE,EAAO;AAAA,UACL,MAAM,SACJ,KAAI,aAAa,eACjB,KAAI,aAAa,cACjB,KAAI,aAAa,aAIjB,KAAI,aAAa,2BACjB,KAAI,aAAa,YACjB,KAAI,SAAS,WAAW,SAAS;AAAA,UAKnC,IAAI,CAAC,UAAU,CAAC,cAAc,KAAK,MAAK,IAAI,GAAG;AAAA,YAC7C,OAAO,UAAU,GAAG,IAGhB,IAAI,SAAS,WAAW,GAAG,EAAE,SAAS,KAAK,cAAc,eAAe,IAAI,EAAE,CAAC,IAC/E,aAAa;AAAA,UACnB;AAAA;AAAA,QAKF,IAAI,KAAI,aAAa,YAAY;AAAA,UAC/B,MAAM,IAAI,WAAW,KAAK,MAAK,IAAI;AAAA,UACnC,OAAO,IAAI,SAAS,KAAK,CAAC,IAAI,aAAa;AAAA,QAC7C;AAAA,QAGA,IAAI,IAAI,WAAW,SAAS,KAAI,aAAa,cAAc;AAAA,UACzD,OAAO,SAAS,KAAK,aAAa,gBAAI,SAAS,SAAS,CAAC;AAAA,QAC3D;AAAA,QACA,IAAI,IAAI,WAAW,SAAS,KAAI,aAAa,SAAS;AAAA,UACpD,OAAO,SAAS,IAAI,SAAS,WAAW,YAAY,GAAG,EAAE,SAAS,aAAa,CAAC,GAAG,IAAI;AAAA,QACzF;AAAA,QAGA,IAAI,IAAI,WAAW,SAAS,KAAK,IAAI;AAAA,UACnC,MAAM,MAAM,MAAM,KAAK,GAAG,YAAY,GAAG;AAAA,UACzC,IAAI;AAAA,YAAK,OAAO,SAAS,KAAK,IAAI;AAAA,QACpC;AAAA,QAIA,IAAI,IAAI,WAAW,SAAS,KAAI,SAAS,WAAW,SAAS,GAAG;AAAA,UAC9D,QAAQ,0BAAc;AAAA,UACtB,MAAM,MAAM,MAAM,WAAU,KAAK,GAAG;AAAA,UACpC,IAAI;AAAA,YAAK,OAAO,SAAS,KAAK,IAAI;AAAA,QACpC;AAAA,QAKA,IAAI,IAAI,WAAW,SAAS,KAAI,SAAS,WAAW,QAAQ,GAAG;AAAA,UAC7D,QAAQ,0BAAc;AAAA,UACtB,MAAM,MAAM,MAAM,WAAU,KAAK,GAAG;AAAA,UACpC,IAAI;AAAA,YAAK,OAAO;AAAA,QAClB;AAAA,QAGA,MAAM,QAAQ,UAAU,KAAK,CAAC,MAAM,EAAE,WAAW,IAAI,UAAU,EAAE,SAAS,KAAI,QAAQ;AAAA,QACtF,IAAI;AAAA,UAAO,OAAO,MAAM,QAAQ,KAAK,GAAG;AAAA,QAExC,OAAO,IAAI,SAAS,aAAa,EAAE,QAAQ,IAAI,CAAC;AAAA;AAAA,IAElD,CAAC;AAAA,IACD,OAAO,GAAG;AAAA,IAIV,MAAM,OAAQ,GAAgC;AAAA,IAC9C,IAAI,SAAS,cAAc;AAAA,MACzB,MAAM,IAAI,eAAe,MAAM,IAAI;AAAA,IACrC;AAAA,IACA,IAAI,SAAS,UAAU;AAAA,MACrB,MAAM,IAAI,QACR,iBACA,6BAA6B,QAAQ,uFACvC;AAAA,IACF;AAAA,IACA,MAAM;AAAA;AAAA,EAKR,IAAI,QAA+C;AAAA,EACnD,IAAI,YAAY,iBAAiB,GAAG;AAAA,IAOlC,MAAM,iBAAiB;AAAA,IACvB,MAAM,SAAS,IAAI;AAAA,IACnB,IAAI,aAAa;AAAA,IACjB,IAAI,UAAU;AAAA,IAId,MAAM,gBAAgB;AAAA,IACtB,IAAI,gBAAgB;AAAA,IACpB,MAAM,OAAO,YAA2B;AAAA,MACtC,MAAM,SACH,GAAG,MAAM,wCAAwC,EAAE,IAAI,EAA2B,KAAK;AAAA,MAC1F,MAAM,WAAW,cAAc,KAAK,SAAS;AAAA,MAC7C,aAAa;AAAA,MACb,MAAM,MAAM,KAAK,IAAI;AAAA,MACrB,WAAW,KAAK,UAAU,EAAE,GAAG;AAAA,QAC7B,IAAI,CAAC,EAAE;AAAA,UAAS;AAAA,QAChB,IAAI,EAAE,SAAS,MAAM;AAAA,UACnB,MAAM,SAAS,IAAI,EAAE,GAAG;AAAA,UACxB;AAAA,QACF;AAAA,QACA,MAAM,KAAK,OAAO,IAAI,EAAE,GAAG;AAAA,QAC3B,IAAI,CAAC,YAAY,MAAM,MAAM,GAAG;AAAA,UAAK;AAAA,QACrC,MAAM,MAAM,MAAM,SAAS,IAAI,EAAE,GAAG;AAAA,QACpC,MAAM,OAAO,aAAa,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK;AAAA,QACtE,MAAM,QAAQ,OACV,iBACA,KAAK,KAAK,IAAI,SAAS,kBAAkB,GAAG,cAAc;AAAA,QAC9D,OAAO,IAAI,EAAE,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC;AAAA,MACtD;AAAA,MACA,IAAI,KAAK,IAAI,IAAI,iBAAiB,eAAe;AAAA,QAC/C,gBAAgB,KAAK,IAAI;AAAA,QACzB,IAAI;AAAA,UACF,MAAM,gBAAgB,EAAE;AAAA,UACxB,OAAO,GAAG;AAAA,UACV,QAAQ,MAAM,oCAA8B,CAAC;AAAA;AAAA,MAEjD;AAAA;AAAA,IAEF,QAAQ,YAAY,MAAM;AAAA,MACxB,IAAI;AAAA,QAAS;AAAA,MACb,UAAU;AAAA,MAGL,KAAK,EACP,MAAM,CAAC,MAAM,QAAQ,MAAM,uCAAiC,CAAC,CAAC,EAC9D,QAAQ,MAAM;AAAA,QACb,UAAU;AAAA,OACX;AAAA,OACF,cAAc;AAAA,IACjB,MAAM,QAAQ;AAAA,EAChB;AAAA,EAEA,MAAM,SAAS,YAAY,IAAI;AAAA,EAC/B,MAAM,WAAsC,KAAK,QAC7C,aACA,KAAK,QACH,WACA;AAAA,EACN,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,MAAM,OAAO,QAAQ;AAAA,IACrB;AAAA,IACA,OAAO,QAAQ,SAAS;AAAA,IACxB,KAAK,QAAQ,OAAO;AAAA,IACpB;AAAA,IACA,KAAK,QAAQ,KAAK,GAAG;AAAA,IACrB,UAAU,QAAQ,YAAY,iBAAiB,CAAC;AAAA,IAChD;AAAA,IACA,IAAI,GAAG;AAAA,MACL,IAAI;AAAA,QAAO,cAAc,KAAK;AAAA,MAC9B,OAAO,KAAK;AAAA;AAAA,EAEhB;AAAA;;AGtUF;AACA,wBAAS,0BAAa;AACtB,iBAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACCF,IAAM,WAAW;AAEjB,IAAM,WAAW;AAEjB,IAAM,WAAW;;;ADUxB,IAAM,sBAAsB,YAAY,IAAI,SAAS,aAAa;AAIlE,IAAM,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsCb,IAAM,WAA0C;AAAA,EAC9C,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,UAAU;AAAA,EACV,SAAS;AAAA,EACT,KAAK;AACP;AACA,IAAI,eAAmC;AAEhC,SAAS,cAAc,CAAC,QAOtB;AAAA,EACP,SAAS,KAAK,OAAO;AAAA,EACrB,SAAS,KAAK,OAAO;AAAA,EACrB,SAAS,WAAW,OAAO;AAAA,EAC3B,SAAS,UAAU,OAAO;AAAA,EAC1B,SAAS,MAAM,OAAO;AAAA,EAEtB,MAAM,IAAI,OAAO;AAAA,EACjB,eACE,EAAE,eAAe,KAAK,EAAE,eAAe,EAAE,OAAO,aAC3C,EAAE,SACF,EAAE,MAAM,EAAE;AAAA;AAKnB,SAAS,iBAAiB,CAAC,KAAqB;AAAA,EAC9C,IAAI,SAAS;AAAA,EACb,WAAW,KAAK,aAAY,KAAK,EAAE,eAAe,KAAK,CAAC,GAAG;AAAA,IACzD,IAAI,EAAE,SAAS,YAAY,EAAE,KAAK,WAAW,GAAG;AAAA,MAAG;AAAA,IACnD,MAAM,IAAI,MAAK,KAAK,EAAE,IAAI;AAAA,IAC1B,IAAI,EAAE,YAAY;AAAA,MAAG,SAAS,KAAK,IAAI,QAAQ,kBAAkB,CAAC,CAAC;AAAA,IAC9D,SAAI,UAAU,KAAK,EAAE,IAAI;AAAA,MAAG,SAAS,KAAK,IAAI,QAAQ,UAAS,CAAC,EAAE,OAAO;AAAA,EAChF;AAAA,EACA,OAAO;AAAA;AAST,SAAS,YAAY,CAAC,MAQI;AAAA,EACxB,IAAI,UAAwB;AAAA,EAC5B,IAAI,cAAc;AAAA,EAClB,OAAO,YAAY;AAAA,IACjB,MAAM,aAAa,SAAS,KAAK;AAAA,IACjC,IAAI,cAAc;AAAA,MAAM,OAAO;AAAA,IAE/B,IAAI,qBAAqB;AAAA,MACvB,MAAM,SAAS,cAAc,IAAI,IAAI,MAAM,YAAY,GAAG,CAAC;AAAA,MAC3D,IAAI,SAAS,kBAAkB,MAAM;AAAA,MACrC,WAAW,SAAS,KAAK,aAAa,CAAC,GAAG;AAAA,QACxC,SAAS,KAAK,IAAI,QAAQ,kBAAkB,cAAc,IAAI,IAAI,OAAO,YAAY,GAAG,CAAC,CAAC,CAAC;AAAA,MAC7F;AAAA,MACA,IAAI,WAAU,QAAQ,SAAS,aAAa;AAAA,QAC1C,MAAM,QAAQ,cAAc,IAAI,IAAI,KAAK,OAAO,YAAY,GAAG,CAAC;AAAA,QAChE,MAAM,MAAM,MAAM,IAAI,MAAM,EAAE,aAAa,CAAC,KAAK,GAAG,QAAQ,UAAU,CAAC;AAAA,QACvE,IAAI,CAAC,IAAI;AAAA,UAAS,MAAM,IAAI,eAAe,IAAI,MAAM,GAAG,KAAK,mBAAmB;AAAA,QAChF,UAAS,MAAM,IAAI,QAAQ,GAAI,KAAK;AAAA,QACpC,cAAc;AAAA,MAChB;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,WAAU,MAAM;AAAA,MAClB,MAAM,WAAW,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,KAAK,QAAQ,YAAY,GAAG,CAAC,CAAC;AAAA,MACnF,IAAI,CAAE,MAAM,SAAS,OAAO,GAAI;AAAA,QAC9B,MAAM,IAAI,MAAM,GAAG,KAAK,qCAAqC;AAAA,MAC/D;AAAA,MACA,UAAS,MAAM,SAAS,KAAK;AAAA,IAC/B;AAAA,IACA,OAAO;AAAA;AAAA;AAIX,IAAM,QAAQ,aAAa,EAAE,KAAK,MAAM,OAAO,cAAc,MAAM,WAAW,CAAC;AAC/E,IAAM,WAAW,aAAa,EAAE,KAAK,MAAM,OAAO,YAAY,MAAM,QAAQ,CAAC;AAC7E,IAAM,cAAc,aAAa,EAAE,KAAK,YAAY,OAAO,wBAAwB,MAAM,eAAe,CAAC;AACzG,IAAM,aAAa,aAAa,EAAE,KAAK,WAAW,OAAO,iBAAiB,MAAM,gBAAgB,CAAC;AACjG,IAAM,SAAS,aAAa,EAAE,KAAK,OAAO,OAAO,uBAAuB,MAAM,kBAAkB,WAAW,CAAC,WAAW,EAAE,CAAC;AAI1H,eAAe,MAAM,GAAoB;AAAA,EACvC,IAAI,qBAAqB;AAAA,IACvB,OAAO,IAAI,KAAK,cAAc,IAAI,IAAI,iBAAiB,YAAY,GAAG,CAAC,CAAC,EAAE,KAAK;AAAA,EACjF;AAAA,EACA,OAAO;AAAA;AAMT,eAAe,KAAK,GAAoB;AAAA,EACtC,OAAO,KAAK,IAAI,OAAO,MAAM,QAAQ,IAAI,CAAC,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;AAAA,EACxE,MAAM,WAAU,IAAI,IAAI,aAAa,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,GAAG,EAAE,OAAO,KAAK,EAAE,MAAM,GAAG,EAAE;AAAA,EAC/F,OAAO,IAAI,WAAW,qBAAqB,QAAO;AAAA;AAKpD,eAAe,OAAO,GAAyB;AAAA,EAC7C,IAAI,gBAAgB;AAAA,IAAM,OAAO;AAAA,EACjC,MAAM,OAAO,sBACT,MACE,QAAQ,IAAI,YAAY,2BAA2B,cAAc,IAAI,IAAI,KAAK,YAAY,GAAG,CAAC,CAAC,CAAC,GAChG,cACF,IACA,cAAc,IAAI,IAAI,kBAAkB,YAAY,GAAG,CAAC;AAAA,EAC5D,MAAM,IAAI,IAAI,KAAK,IAAI;AAAA,EACvB,IAAI,CAAE,MAAM,EAAE,OAAO,GAAI;AAAA,IACvB,MAAM,IAAI,MAAM,2BAA2B,qDAA+C;AAAA,EAC5F;AAAA,EACA,OAAO,EAAE,YAAY;AAAA;AAIvB,IAAM,WAAW,KAAK,UAAU;AAAA,EAC9B,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,OAAO;AAAA,EACP,SAAS;AAAA,EACT,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb,OAAO;AAAA,IACL,EAAE,KAAK,uBAAuB,OAAO,WAAW,MAAM,YAAY;AAAA,IAClE,EAAE,KAAK,uBAAuB,OAAO,WAAW,MAAM,YAAY;AAAA,EACpE;AACF,CAAC;AAED,IAAM,QAAgC;AAAA,EACpC,uBAAuB;AAAA,EACvB,uBAAuB;AAAA,EACvB,uBAAuB;AACzB;AAOA,eAAsB,SAAS,GAAkB;AAAA,EAC/C,IAAI;AAAA,IACF,MAAM,MAAM;AAAA,IACZ,MAAM;AAAA;AAOV,SAAS,KAAK,CAAC,MAAc,aAA+B;AAAA,EAC1D,OAAO,IAAI,SAAS,MAAM;AAAA,IACxB,SAAS,EAAE,gBAAgB,aAAa,iBAAiB,WAAW;AAAA,EACtE,CAAC;AAAA;AAKH,eAAsB,UAAU,CAAC,KAAwC;AAAA,EACvE,IAAI,IAAI,WAAW;AAAA,IAAO,OAAO;AAAA,EACjC,QAAQ,aAAa,IAAI,IAAI,IAAI,GAAG;AAAA,EAEpC,IAAI,aAAa;AAAA,IAAK,OAAO,MAAM,MAAM,0BAA0B;AAAA,EACnE,IAAI,aAAa;AAAA,IAAc,OAAO,MAAM,MAAM,OAAO,GAAG,yBAAyB;AAAA,EACrF,IAAI,aAAa;AAAA,IAAyB,OAAO,MAAM,UAAU,2BAA2B;AAAA,EAC5F,MAAM,OAAO,MAAM;AAAA,EACnB,IAAI,MAAM;AAAA,IACR,OAAO,IAAI,SAAS,OAAO,KAAK,MAAM,QAAQ,GAAG;AAAA,MAE/C,SAAS,EAAE,gBAAgB,aAAa,iBAAiB,wBAAwB;AAAA,IACnF,CAAC;AAAA,EACH;AAAA,EACA,IAAI,aAAa,iBAAiB;AAAA,IAChC,IAAI;AAAA,MACF,OAAO,IAAI,SAAS,MAAM,QAAQ,GAAG;AAAA,QAGnC,SAAS,EAAE,gBAAgB,oBAAoB,iBAAiB,wBAAwB;AAAA,MAC1F,CAAC;AAAA,MACD,OAAO,GAAG;AAAA,MACV,QAAQ,MAAM,gDAA0C,CAAC;AAAA,MACzD,OAAO,IAAI,SAAS,6BAA6B,KAAK,EAAE,QAAQ,IAAI,CAAC;AAAA;AAAA,EAEzE;AAAA,EACA,MAAM,SAAgD;AAAA,IACpD,aAAa;AAAA,IACb,UAAU;AAAA,IACV,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,EACrB;AAAA,EACA,MAAM,SAAS,OAAO;AAAA,EACtB,IAAI,QAAQ;AAAA,IACV,IAAI;AAAA,MACF,OAAO,MAAM,MAAM,OAAO,GAAG,gCAAgC;AAAA,MAC7D,OAAO,GAAG;AAAA,MAKV,QAAQ,MAAM,2BAA2B,mBAAa,CAAC;AAAA,MACvD,OAAO,IAAI,SAAS,uBAAuB,KAAK,EAAE,QAAQ,IAAI,CAAC;AAAA;AAAA,EAEnE;AAAA,EACA,OAAO;AAAA;;AEzRT;AACA;AACA;;;ACDA;AAIA;AAYA,IAAM,kBAAkB;AAGxB,SAAS,SAAS,CAAC,MAAqB;AAAA,EACtC,OAAO,OAAO,KAAI,MAAM,GAAG,EAAE,CAAC;AAAA;AAGhC,SAAS,MAAM,CAAC,MAAqB;AAAA,EACnC,OAAO,IAAI,KAAK,UAAU,IAAG,CAAC,EAAE,YAAY;AAAA;AAmB9C,SAAS,YAAY,CAAC,KAAkC;AAAA,EACtD,IAAI,KAAK,WAAW,SAAS;AAAA,IAAG,OAAO;AAAA,EACvC,IAAI,KAAK,WAAW,SAAS;AAAA,IAAG,OAAO;AAAA,EACvC,OAAO;AAAA;AAST,SAAS,gBAAgB,CAAC,SAAqC;AAAA,EAC7D,MAAM,SAAwB,CAAC;AAAA,EAC/B,IAAI,MAAmB,CAAC;AAAA,EACxB,WAAW,KAAK,SAAS;AAAA,IACvB,MAAM,OAAO,IAAI,IAAI,SAAS;AAAA,IAC9B,MAAM,WACJ,SACC,KAAK,QAAQ,QAAQ,EAAE,QAAQ,OAC5B,KAAK,QAAQ,EAAE,MACf,KAAK,YAAY,EAAE,WAAW,UAAU,EAAE,GAAG,IAAI,UAAU,KAAK,GAAG,IAAI;AAAA,IAC7E,IAAI,UAAU;AAAA,MACZ,OAAO,KAAK,GAAG;AAAA,MACf,MAAM,CAAC;AAAA,IACT;AAAA,IACA,IAAI,KAAK,CAAC;AAAA,EACZ;AAAA,EACA,IAAI,IAAI;AAAA,IAAQ,OAAO,KAAK,GAAG;AAAA,EAC/B,OAAO;AAAA;AAIT,SAAS,OAAO,CAAC,OAA+B;AAAA,EAC9C,OAAO,UAAU,QAAQ,UAAU,OAAO,UAAU,WAAW,UAAU;AAAA;AAK3E,SAAS,WAAW,CAClB,SACA,IACoD;AAAA,EACpD,MAAM,MAAM,IAAI;AAAA,EAChB,WAAW,KAAK,SAAS;AAAA,IACvB,IAAI,EAAE,MAAM;AAAA,MAAI;AAAA,IAChB,MAAM,MAAM,IAAI,IAAI,EAAE,GAAG;AAAA,IACzB,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI;AAAA,MAAK,IAAI,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,KAAK,EAAE,IAAI,CAAC;AAAA,EAC5E;AAAA,EACA,OAAO;AAAA;AAIT,SAAS,UAAU,CAAC,KAAc,SAAiB,OAA4B;AAAA,EAC7E,OAAO,IACJ,MACC,UAAU,+EACZ,EACC,IAAI,SAAS,KAAK;AAAA;AAOvB,SAAS,YAAY,CAAC,KAAc,OAAyB;AAAA,EAC3D,OACE,IACG,MACC,wGACF,EACC,IAAI,KAAK,UAAU,KAAK,CAAC,EAC5B,IAAI,CAAC,MAAM,EAAE,MAAM;AAAA;AAIvB,SAAS,UAAU,CAAC,KAAc,OAA4B;AAAA,EAC5D,MAAM,UAAS,aAAa,KAAI,KAAK;AAAA,EACrC,MAAM,eAAe,QAAO,IAAI,MAAM,GAAG,EAAE,KAAK,GAAG;AAAA,EACnD,MAAM,cAAc,QAAO,SACvB,8CAA8C,mBAC9C;AAAA,EACJ,OAAO,IACJ,MACC,UAAU;AAAA,qDACqC;AAAA,oBAEjD,EACC,IAAI,OAAO,GAAG,OAAM;AAAA;AAoBlB,SAAS,qBAAqB,CAAC,KAAc,IAA2B;AAAA,EAC7E,MAAM,UAAU,WAAW,KAAI,EAAE;AAAA,EACjC,IAAI,CAAC,QAAQ;AAAA,IAAQ,MAAM,IAAI,QAAQ,aAAa,qBAAqB,IAAI;AAAA,EAC7E,OAAO,iBAAiB,OAAO,EAC5B,IAAI,CAAC,UAAU;AAAA,IACd,MAAM,gBAAgB,IAAI;AAAA,IAC1B,MAAM,gBAAgB,IAAI;AAAA,IAC1B,IAAI,UAAU;AAAA,IACd,IAAI,UAAU;AAAA,IACd,IAAI,eAAe;AAAA,IACnB,WAAW,KAAK,OAAO;AAAA,MACrB,IAAI,EAAE,YAAY,aAAa;AAAA,QAC7B,IAAI,EAAE,QAAQ;AAAA,UAAe,UAAU;AAAA,QAClC,SAAI,EAAE,QAAQ;AAAA,UAAS,eAAe;AAAA,QACtC,SAAI,EAAE,QAAQ;AAAA,UAAa,UAAU,QAAQ,EAAE,KAAK;AAAA,MAC3D,EAAO,SAAI,EAAE,QAAQ,eAAe,QAAQ,EAAE,KAAK,GAAG;AAAA,QACpD,cAAc,IAAI,EAAE,MAAM;AAAA,MAC5B,EAAO,SAAI,EAAE,QAAQ,QAAQ;AAAA,QAC3B,cAAc,IAAI,EAAE,MAAM;AAAA,MAC5B;AAAA,IACF;AAAA,IACA,MAAM,OAAO,MAAM,MAAM,SAAS;AAAA,IAClC,OAAO;AAAA,MACL,SAAS,KAAK;AAAA,MACd,IAAI,OAAO,KAAK,GAAG;AAAA,MACnB,SAAS,KAAK;AAAA,MACd,MAAM,aAAa,KAAK,GAAG;AAAA,MAC3B,SAAS,MAAM;AAAA,MACf;AAAA,MACA;AAAA,MACA,eAAe;AAAA,MACf,gBAAgB,cAAc;AAAA,MAC9B,gBAAgB,cAAc;AAAA,IAChC;AAAA,GACD,EACA,QAAQ;AAAA;AAaN,SAAS,iBAAiB,CAAC,KAAc,IAAY,IAAkC;AAAA,EAC5F,IAAI,CAAC;AAAA,IAAI,MAAM,IAAI,QAAQ,iBAAiB,wBAAwB;AAAA,EACpE,MAAM,UAAU,WAAW,KAAI,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;AAAA,EAC5D,IAAI,CAAC,QAAQ;AAAA,IACX,MAAM,IAAI,QAAQ,aAAa,0BAA0B,mBAAmB,IAAI;AAAA,EAElF,MAAM,UAAU,YAAY,QAAQ,OAAO,CAAC,MAAM,EAAE,YAAY,WAAW,GAAG,EAAE;AAAA,EAChF,MAAM,SAAQ,CAAC,QAAyB;AAAA,IACtC,MAAM,IAAI,QAAQ,IAAI,GAAG;AAAA,IACzB,OAAO,GAAG,SAAS,OAAO,YAAY,KAAK,MAAM,EAAE,KAAK;AAAA;AAAA,EAK1D,MAAM,UAAU,IAAI;AAAA,EACpB,WAAW,KAAK,SAAS;AAAA,IACvB,IAAI,EAAE,YAAY;AAAA,MAAc;AAAA,KAC/B,QAAQ,IAAI,EAAE,MAAM,KAAK,QAAQ,IAAI,EAAE,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAI,KAAK,CAAC;AAAA,EAC5E;AAAA,EACA,MAAM,UAAuF,CAAC;AAAA,EAC9F,YAAY,SAAS,iBAAiB,SAAS;AAAA,IAC7C,MAAM,OAAO,YAAY,cAAc,EAAE;AAAA,IACzC,MAAM,MAAM,CAAC,QAAyB;AAAA,MACpC,MAAM,IAAI,KAAK,IAAI,GAAG;AAAA,MACtB,OAAO,GAAG,SAAS,OAAO,YAAY,KAAK,MAAM,EAAE,KAAK;AAAA;AAAA,IAE1D,IAAI,IAAI,QAAQ,MAAM;AAAA,MAAI;AAAA,IAC1B,IAAI,KAAK,IAAI,WAAW,KAAK,QAAQ,KAAK,IAAI,WAAW,EAAG,KAAK;AAAA,MAAG;AAAA,IACpE,MAAM,OAAO,IAAI,MAAM;AAAA,IACvB,IAAI,OAAO,SAAS,YAAY,CAAC;AAAA,MAAM;AAAA,IACvC,QAAO,KAAK;AAAA,MACV,IAAI;AAAA,MACJ;AAAA,MACA,WAAY,IAAI,WAAW,KAA4B;AAAA,MACvD,YAAa,IAAI,aAAa,KAA4B;AAAA,IAC5D,CAAC;AAAA,EACH;AAAA,EACA,QAAO,KAAK,CAAC,GAAG,MAAM;AAAA,IACpB,IAAI,EAAE,cAAc,EAAE,WAAW;AAAA,MAC/B,IAAI,EAAE,cAAc;AAAA,QAAM,OAAO;AAAA,MACjC,IAAI,EAAE,cAAc;AAAA,QAAM,OAAO;AAAA,MACjC,OAAO,EAAE,YAAY,EAAE,YAAY,KAAK;AAAA,IAC1C;AAAA,IACA,OAAO,EAAE,KAAK,EAAE,KAAK,KAAK;AAAA,GAC3B;AAAA,EAID,MAAM,OAAO,QAAQ,OACjB,mBAAmB,OAAM,IACvB,OAAM,MAAM,KAA4B;AAAA,EAE9C,OAAO;AAAA,IACL;AAAA,IACA,OAAQ,OAAM,OAAO,KAA4B;AAAA,IACjD;AAAA,IACA,SAAS,QAAQ,IAAI,WAAW,IAAI,QAAQ,QAAQ,IAAI,WAAW,EAAG,KAAK,IAAI;AAAA,IAC/E,SAAS,QAAQ,QAAQ,SAAS,GAAI;AAAA,EACxC;AAAA;AAoBK,IAAM,iBAAiB,QAAQ,SAAS,eAAc,CAC3D,KACA,IACA,IACA,OAA6B,CAAC,GACb;AAAA,EACjB,IAAI,MAAM,YAAY,KAAI,EAAE;AAAA,EAC5B,IAAI,CAAC,OAAO,CAAC,IAAG,MAAM,2CAA2C,EAAE,IAAI,EAAE;AAAA,IACvE,MAAM,IAAI,QAAQ,aAAa,qBAAqB,IAAI;AAAA,EAC1D,IAAI,KAAK,YAAY,aAAa,gBAAgB,KAAI,EAAE,MAAM,KAAK;AAAA,IACjE,MAAM,IAAI,QAAQ,SAAS,iCAAiC,KAAK,wBAAwB;AAAA,EAE3F,MAAM,OAAO,kBAAkB,KAAI,IAAI,EAAE;AAAA,EACzC,IAAI,KAAK;AAAA,IACP,MAAM,IAAI,QAAQ,iBAAiB,2DAA2D;AAAA,EAEhG,MAAM,YAAY,CAAC;AAAA,EACnB,IAAI,CAAC,KAAK;AAAA,IAGR,KAAK,KAAI,aAAa,IAAI,aAAa,CAAC;AAAA,IACxC,MAAM,YAAY,KAAI,EAAE;AAAA,EAC1B;AAAA,EAEA,MAAM,SAA4C,CAAC;AAAA,EACnD,IAAI,KAAK,UAAU,IAAI;AAAA,IAAO,OAAO,QAAQ,KAAK;AAAA,EAClD,IAAI,KAAK,UAAU,IAAI,QAAQ;AAAA,IAAK,OAAO,OAAO,KAAK;AAAA,EACvD,IAAI,OAAO,KAAK,MAAM,EAAE;AAAA,IAAQ,eAAe,KAAI,IAAI,MAAM;AAAA,EAE7D,OAAO;AAAA,IACL;AAAA,IACA,SAAS,OAAO,KAAK,MAAM,EAAE,SAAS,KAAK;AAAA,IAC3C,UAAU,KAAK;AAAA,IACf,SAAS,gBAAgB,KAAI,EAAE;AAAA,IAC/B;AAAA,EACF;AAAA,GACC,QAAQ;AAKX,IAAM,eAAc,IAAI,IAAI,CAAC,eAAe,eAAe,aAAa,WAAW,CAAC;AAgBpF,SAAS,gBAAgB,CAAC,OAAoC;AAAA,EAC5D,MAAM,SAAS,IAAI;AAAA,EACnB,IAAI,UAAU;AAAA,EACd,IAAI,UAAU;AAAA,EACd,IAAI,QAAQ;AAAA,EACZ,WAAW,KAAK,OAAO;AAAA,IACrB,IAAI,EAAE,QAAQ;AAAA,MAAe,UAAU;AAAA,IAClC,SAAI,EAAE,QAAQ;AAAA,MAAa,UAAU,QAAQ,EAAE,KAAK;AAAA,IACpD,SAAI,EAAE,QAAQ;AAAA,MAAa,QAAQ;AAAA,IACnC,SAAI,CAAC,aAAY,IAAI,EAAE,GAAG;AAAA,MAAG,OAAO,IAAI,EAAE,GAAG;AAAA,EACpD;AAAA,EACA,MAAM,OAAO,MAAM,MAAM,SAAS;AAAA,EAClC,OAAO;AAAA,IACL,SAAS,KAAK;AAAA,IACd,IAAI,OAAO,KAAK,GAAG;AAAA,IACnB,SAAS,KAAK;AAAA,IACd,MAAM,aAAa,KAAK,GAAG;AAAA,IAC3B,SAAS,MAAM;AAAA,IACf;AAAA,IACA;AAAA,IACA,QAAQ,CAAC,GAAG,MAAM;AAAA,IAClB;AAAA,EACF;AAAA;AAIK,SAAS,mBAAmB,CAAC,KAAc,IAA8B;AAAA,EAC9E,MAAM,UAAU,WAAW,KAAI,WAAW,EAAE;AAAA,EAC5C,IAAI,CAAC,QAAQ;AAAA,IAAQ,MAAM,IAAI,QAAQ,aAAa,mBAAmB,IAAI;AAAA,EAC3E,OAAO,iBAAiB,OAAO,EAAE,IAAI,gBAAgB,EAAE,QAAQ;AAAA;AA4B1D,SAAS,oBAAoB,CAClC,KACA,YACA,OAA2B,CAAC,GACH;AAAA,EACzB,IAAI,CAAC,IAAG,MAAM,2CAA2C,EAAE,IAAI,UAAU;AAAA,IACvE,MAAM,IAAI,QAAQ,aAAa,qBAAqB,YAAY;AAAA,EAGlE,MAAM,YAEF,IACG,MACC,+GACF,EACC,IAAI,UAAU,GAChB,MAAM;AAAA,EAEX,MAAM,UAAU,IACb,MACC,UAAU;AAAA;AAAA,4BAGZ,EACC,IAAI,UAAU;AAAA,EAEjB,MAAM,MAA+B,CAAC;AAAA,EACtC,IAAI,QAAQ;AAAA,EACZ,SAAS,IAAI,EAAG,KAAK,QAAQ,QAAQ,KAAK;AAAA,IACxC,IAAI,MAAM,QAAQ,UAAU,QAAQ,GAAI,WAAW,QAAQ,OAAQ;AAAA,MAAQ;AAAA,IAC3E,MAAM,QAAQ,QAAQ,OAAQ;AAAA,IAE9B,MAAM,QAAQ,IAAI;AAAA,IAClB,WAAW,KAAK,iBAAiB,QAAQ,MAAM,OAAO,CAAC,CAAC,GAAG;AAAA,MACzD,MAAM,UAAU,IAAI;AAAA,MACpB,WAAW,KAAK;AAAA,QAAG,IAAI,CAAC,aAAY,IAAI,EAAE,GAAG;AAAA,UAAG,QAAQ,IAAI,EAAE,GAAG;AAAA,MACjE,MAAM,SAAS,IAAI;AAAA,MACnB,WAAW,OAAO;AAAA,QAAS,IAAI,MAAM,IAAI,GAAG;AAAA,UAAG,OAAO,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC;AAAA,MAC7E,WAAW,KAAK,GAAG;AAAA,QACjB,IAAI,aAAY,IAAI,EAAE,GAAG;AAAA,UAAG;AAAA,QAC5B,IAAI,EAAE,UAAU;AAAA,UAAM,MAAM,OAAO,EAAE,GAAG;AAAA,QACnC;AAAA,gBAAM,IAAI,EAAE,KAAK,KAAK,MAAM,EAAE,KAAK,CAAC;AAAA,MAC3C;AAAA,MACA,MAAM,QAAuB,CAAC;AAAA,MAC9B,WAAW,OAAO,SAAS;AAAA,QACzB,MAAM,KAAkB,EAAE,MAAM,IAAI;AAAA,QACpC,IAAI,OAAO,IAAI,GAAG;AAAA,UAAG,GAAG,SAAS,OAAO,IAAI,GAAG;AAAA,QAC/C,IAAI,MAAM,IAAI,GAAG;AAAA,UAAG,GAAG,QAAQ,MAAM,IAAI,GAAG;AAAA,QAC5C,MAAM,KAAK,EAAE;AAAA,MACf;AAAA,MACA,IAAI,KAAK;AAAA,WACJ,iBAAiB,CAAC;AAAA,QACrB,WAAW;AAAA,QACX,cACE,aAAa,MAAM,IAAI,SAAS,IAAI,OAAO,MAAM,IAAI,SAAS,KAAK,EAAE,IAAI;AAAA,QAC3E;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,QAAQ;AAAA,EACV;AAAA,EACA,IAAI,KAAK,CAAC,GAAG,MAAO,EAAE,UAAU,EAAE,UAAU,IAAI,EAAG;AAAA,EACnD,OAAO,IAAI,MAAM,GAAG,KAAK,SAAS,GAAG;AAAA;AAahC,SAAS,eAAe,CAAC,KAAc,IAAY,IAAgC;AAAA,EACxF,IAAI,CAAC;AAAA,IAAI,MAAM,IAAI,QAAQ,iBAAiB,wBAAwB;AAAA,EACpE,MAAM,UAAU,WAAW,KAAI,WAAW,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;AAAA,EACvE,IAAI,CAAC,QAAQ;AAAA,IACX,MAAM,IAAI,QAAQ,aAAa,wBAAwB,mBAAmB,IAAI;AAAA,EAEhF,MAAM,OAAO,YAAY,SAAS,EAAE;AAAA,EACpC,MAAM,OAAgC,CAAC;AAAA,EACvC,YAAY,KAAK,QAAQ,MAAM;AAAA,IAC7B,IAAI,aAAY,IAAI,GAAG;AAAA,MAAG;AAAA,IAC1B,IAAI,IAAI,UAAU;AAAA,MAAM;AAAA,IACxB,KAAK,OAAO,KAAK,MAAM,IAAI,KAAK;AAAA,EAClC;AAAA,EACA,MAAM,QAAQ,KAAK,IAAI,aAAa;AAAA,EACpC,OAAO;AAAA,IACL;AAAA,IACA,aAAa,OAAO,SAAS,OAAO,OAAQ,KAAK,MAAM,MAAM,KAAK;AAAA,IAClE,SAAS,KAAK,IAAI,WAAW,IAAI,QAAQ,KAAK,IAAI,WAAW,EAAG,KAAK,IAAI;AAAA,IACzE;AAAA,IACA,SAAS,QAAQ,QAAQ,SAAS,GAAI;AAAA,EACxC;AAAA;AAgBK,IAAM,eAAe,QAAQ,SAAS,aAAY,CACvD,KACA,IACA,IACoB;AAAA,EACpB,MAAM,MAAM,IACT,MAAM,+DAA+D,EACrE,IAAI,EAAE;AAAA,EACT,IAAI,CAAC;AAAA,IAAK,MAAM,IAAI,QAAQ,aAAa,mBAAmB,IAAI;AAAA,EAEhE,MAAM,OAAO,gBAAgB,KAAI,IAAI,EAAE;AAAA,EACvC,IAAI,KAAK;AAAA,IACP,MAAM,IAAI,QAAQ,iBAAiB,8DAA8D;AAAA,EAEnG,MAAM,YAAY,IAAI,IACpB,IAAI,cAAc,eAAe,KAAI,IAAI,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAC5E;AAAA,EACA,MAAM,UAAU,KAAK,MAAM,IAAI,QAAQ,IAAI;AAAA,EAC3C,MAAM,SAAmB,CAAC;AAAA,EAC1B,WAAW,UAAU,WAAW;AAAA,IAC9B,MAAM,SAAS,OAAO,OAAO,KAAK,MAAM,MAAM;AAAA,IAC9C,MAAM,QAAQ,OAAO,OAAO,SAAS,MAAM;AAAA,IAC3C,IAAI,WAAW,CAAC,SAAS,KAAK,UAAU,KAAK,KAAK,OAAO,MAAM,KAAK,UAAU,QAAQ,OAAO,IAAI;AAAA,MAC/F,KAAK,KAAI,WAAW,IAAI,QAAQ,KAAK,KAAK,OAAO;AAAA,MACjD,OAAO,KAAK,MAAM;AAAA,IACpB,EAAO,SAAI,CAAC,UAAU,OAAO;AAAA,MAC3B,KAAK,KAAI,WAAW,IAAI,QAAQ,SAAS;AAAA,MACzC,OAAO,KAAK,MAAM;AAAA,IACpB;AAAA,EACF;AAAA,EACA,MAAM,YAAY,IAAI,cAAc;AAAA,EACpC,IAAI;AAAA,IAAW,KAAK,KAAI,WAAW,IAAI,aAAa,CAAC;AAAA,EAErD,OAAO,EAAE,IAAI,SAAS,OAAO,SAAS,KAAK,WAAW,QAAQ,WAAW,UAAU,KAAK,QAAQ;AAAA,GAC/F,QAAQ;AAKX,IAAM,gBAAgB,CAAC,QAAQ,QAAQ,UAAU,UAAU;AAkBpD,SAAS,qBAAqB,CAAC,KAAc,IAAgC;AAAA,EAClF,MAAM,UAAU,WAAW,KAAI,cAAc,EAAE;AAAA,EAC/C,IAAI,CAAC,QAAQ;AAAA,IAAQ,MAAM,IAAI,QAAQ,aAAa,qBAAqB,IAAI;AAAA,EAC7E,MAAM,eAAe,IAAI,IAErB,IACG,MACC,oHACF,EACC,IAAI,EAAE,EACT,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAC3B;AAAA,EACA,OAAO,iBAAiB,OAAO,EAC5B,IAAI,CAAC,UAAU;AAAA,IACd,MAAM,SAAS,IAAI;AAAA,IACnB,IAAI,UAAU;AAAA,IACd,IAAI,UAAU;AAAA,IACd,WAAW,KAAK,OAAO;AAAA,MACrB,IAAI,EAAE,QAAQ;AAAA,QAAe,UAAU;AAAA,MAClC,SAAI,EAAE,QAAQ;AAAA,QAAa,UAAU,QAAQ,EAAE,KAAK;AAAA,MACpD,SAAK,cAAoC,SAAS,EAAE,GAAG;AAAA,QAAG,OAAO,IAAI,EAAE,GAAG;AAAA,IACjF;AAAA,IACA,MAAM,OAAO,MAAM,MAAM,SAAS;AAAA,IAClC,OAAO;AAAA,MACL,SAAS,KAAK;AAAA,MACd,IAAI,OAAO,KAAK,GAAG;AAAA,MACnB,SAAS,KAAK;AAAA,MACd,MAAM,aAAa,KAAK,GAAG;AAAA,MAC3B,SAAS,MAAM;AAAA,MACf;AAAA,MACA;AAAA,MACA,QAAQ,CAAC,GAAG,MAAM;AAAA,MAClB,eAAe,KAAK,MAAO,aAAa,IAAI,KAAK,GAAG,KAAK,IAAK;AAAA,IAChE;AAAA,GACD,EACA,QAAQ;AAAA;AAeN,SAAS,iBAAiB,CAAC,KAAc,IAAY,IAAkC;AAAA,EAC5F,IAAI,CAAC;AAAA,IAAI,MAAM,IAAI,QAAQ,iBAAiB,wBAAwB;AAAA,EACpE,MAAM,UAAU,WAAW,KAAI,cAAc,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;AAAA,EAC1E,IAAI,CAAC,QAAQ;AAAA,IACX,MAAM,IAAI,QAAQ,aAAa,0BAA0B,mBAAmB,IAAI;AAAA,EAClF,MAAM,OAAO,YAAY,SAAS,EAAE;AAAA,EACpC,MAAM,MAAM,CAAC,QAAyB;AAAA,IACpC,MAAM,IAAI,KAAK,IAAI,GAAG;AAAA,IACtB,OAAO,GAAG,SAAS,OAAO,YAAY,KAAK,MAAM,EAAE,KAAK;AAAA;AAAA,EAE1D,OAAO;AAAA,IACL;AAAA,IACA,aAAc,IAAI,aAAa,KAA4B;AAAA,IAC3D,MAAO,IAAI,MAAM,KAA4B;AAAA,IAC7C,MAAO,IAAI,MAAM,KAA4B;AAAA,IAC7C,QAAQ,IAAI,QAAQ,KAAK;AAAA,IACzB,UAAW,IAAI,UAAU,KAA4B;AAAA,IACrD,SAAS,KAAK,IAAI,WAAW,IAAI,QAAQ,KAAK,IAAI,WAAW,EAAG,KAAK,IAAI;AAAA,IACzE,SAAS,QAAQ,QAAQ,SAAS,GAAI;AAAA,EACxC;AAAA;AA0BK,IAAM,iBAAiB,QAAQ,SAAS,eAAc,CAC3D,KACA,IACA,IACsB;AAAA,EACtB,MAAM,MAAM,IACT,MACC,0FACF,EACC,IAAI,EAAE;AAAA,EAQT,IAAI,CAAC;AAAA,IAAK,MAAM,IAAI,QAAQ,aAAa,qBAAqB,IAAI;AAAA,EAElE,MAAM,OAAO,kBAAkB,KAAI,IAAI,EAAE;AAAA,EACzC,IAAI,KAAK;AAAA,IACP,MAAM,IAAI,QAAQ,iBAAiB,4DAA4D;AAAA,EAGjG,MAAM,SAAkC;AAAA,IACtC,MAAM,IAAI;AAAA,IACV,MAAM,IAAI;AAAA,IACV,QAAQ,IAAI,SAAS,KAAK,MAAM,IAAI,MAAM,IAAI;AAAA,IAC9C,UAAU,IAAI;AAAA,EAChB;AAAA,EACA,MAAM,UAAmC;AAAA,IACvC,MAAM,KAAK;AAAA,IACX,MAAM,KAAK;AAAA,IACX,QAAQ,KAAK;AAAA,IACb,UAAU,KAAK;AAAA,EACjB;AAAA,EACA,MAAM,SAAmB,CAAC;AAAA,EAC1B,WAAW,OAAO,eAAe;AAAA,IAC/B,IAAI,KAAK,UAAU,QAAQ,QAAQ,IAAI,MAAM,KAAK,UAAU,OAAO,QAAQ,IAAI,GAAG;AAAA,MAChF,KAAK,KAAI,cAAc,IAAI,KAAK,QAAQ,IAAI;AAAA,MAC5C,OAAO,KAAK,GAAG;AAAA,IACjB;AAAA,EACF;AAAA,EACA,MAAM,YAAY,IAAI,cAAc;AAAA,EACpC,IAAI;AAAA,IAAW,KAAK,KAAI,cAAc,IAAI,aAAa,CAAC;AAAA,EAIxD,MAAM,aAAa,IAAI,IAEnB,IACG,MACC,mHACF,EACC,IAAI,IAAI,EAAE,EACb,IAAI,CAAC,MAAM,EAAE,GAAG,CACpB;AAAA,EACA,MAAM,cAAc,IACjB,MACC,6GACF,EACC,IAAI,EAAE;AAAA,EAET,MAAM,YAAY,CAAC,QACjB,QAAQ,SAAS,WAAW,IAAI,GAAG,KAAK,IAAI,WAAW,SAAS;AAAA,EAElE,IAAI,WAAW;AAAA,EACf,IAAI,UAAU;AAAA,EACd,IAAI,IAAI;AAAA,EACR,OAAO,IAAI,YAAY,QAAQ;AAAA,IAC7B,MAAM,QAAQ,YAAY,GAAI;AAAA,IAC9B,IAAI,SAAS,YAAY;AAAA,IACzB,IAAI,WAA4C;AAAA,IAChD,MAAO,IAAI,YAAY,UAAU,YAAY,GAAI,WAAW,OAAO,KAAK;AAAA,MACtE,SAAS,YAAY;AAAA,MACrB,IAAI,CAAC,UAAU,OAAO,GAAG;AAAA,QAAG,WAAW;AAAA,IACzC;AAAA,IACA,IAAI,OAAO,OAAO;AAAA,MAAI;AAAA,IACtB,IAAI,CAAC,UAAU,OAAO,GAAG,GAAG;AAAA,MAC1B;AAAA,MACA;AAAA,IACF;AAAA,IACA,MAAM,SAAS,WAAW,SAAS,QAAQ;AAAA,IAC3C,IAAI,WAAW,OAAO;AAAA,MAAO;AAAA,IAC7B,KAAK,KAAI,WAAW,OAAO,IAAI,WAAW,OAAO,YAAY,KAAK,MAAM,MAAM,CAAC;AAAA,IAC/E;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL;AAAA,IACA,SAAS,OAAO,SAAS,KAAK,aAAa,WAAW;AAAA,IACtD;AAAA,IACA,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf;AAAA,IACA,UAAU,KAAK;AAAA,EACjB;AAAA,GACC,QAAQ;AAYJ,SAAS,kBAAkB,CAAC,KAAc,IAAY,QAAqC;AAAA,EAChG,MAAM,OAAO,IACV,MACC,qHACF,EACC,IAAI,IAAI,MAAM;AAAA,EACjB,OAAO,KAAK,IAAI,CAAC,OAAO;AAAA,IACtB,SAAS,EAAE;AAAA,IACX,IAAI,OAAO,EAAE,GAAG;AAAA,IAChB,SAAS,EAAE;AAAA,IACX,OAAO,EAAE,UAAU,OAAO,YAAY,KAAK,MAAM,EAAE,KAAK;AAAA,IACxD,SAAS,EAAE,UAAU;AAAA,EACvB,EAAE;AAAA;;;ADrtBJ;AACA;AAeA;AAUA,IAAM,iBAAiB,iBAAE,OAAO;AAAA,EAC9B,IAAI,iBAAE,OAAO;AAAA,EACb,MAAM,iBAAE,OAAO;AAAA,EACf,MAAM,iBAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,aAAa,iBAAE,OAAO;AACxB,CAAC;AACD,IAAM,iBAAiB,iBAAE,OAAO;AAAA,EAC9B,IAAI,iBAAE,OAAO;AAAA,EACb,aAAa,iBAAE,OAAO;AAAA,EACtB,MAAM,iBAAE,OAAO;AAAA,EACf,MAAM,iBAAE,OAAO;AAAA,EACf,QAAQ,iBAAE,IAAI,EAAE,SAAS;AAAA,EACzB,UAAU,iBAAE,OAAO;AACrB,CAAC;AACD,IAAM,eAAe,iBAAE,OAAO;AAAA,EAC5B,IAAI,iBAAE,OAAO;AAAA,EACb,aAAa,iBAAE,OAAO;AAAA,EACtB,QAAQ,iBACL,OAAO,iBAAE,OAAO,GAAG,iBAAE,IAAI,CAAC,EAC1B,SACC,6LACF;AAAA,EACF,OAAO,iBACJ,OAAO,iBAAE,OAAO,GAAG,iBAAE,IAAI,CAAC,EAC1B,SACC,2HACF;AACJ,CAAC;AACD,IAAM,gBAAgB,iBAAE,OAAO;AAAA,EAC7B,QAAQ,iBAAE,OAAO;AAAA,EACjB,OAAO,iBAAE,KAAK,CAAC,UAAU,OAAO,CAAC;AACnC,CAAC;AACD,IAAM,wBAAwB,iBAAE,OAAO;AAAA,EACrC,IAAI,iBAAE,OAAO;AAAA,EACb,OAAO,iBAAE,OAAO;AAAA,EAChB,aAAa,iBAAE,OAAO,EAAE,SAAS;AAAA,EACjC,WAAW,iBAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,aAAa,iBAAE,OAAO;AAAA,EACtB,WAAW,iBAAE,OAAO,EAAE,SAAS;AACjC,CAAC;AACD,IAAM,kBAAkB,iBAAE,OAAO;AAAA,EAC/B,QAAQ,iBAAE,OAAO;AAAA,EACjB,OAAO,iBAAE,KAAK,CAAC,UAAU,SAAS,MAAM,CAAC;AAC3C,CAAC;AACD,IAAM,iBAAiB,sBAAsB,OAAO;AAAA,EAClD,MAAM,iBAAE,OAAO,EAAE,SAAS;AAAA,EAG1B,SAAS,iBAAE,OAAO,EAAE,SAAS;AAC/B,CAAC;AACD,IAAM,kBAAkB,iBAAE,OAAO;AAAA,EAC/B,MAAM,iBAAE,OAAO;AAAA,EACf,IAAI,iBAAE,OAAO;AAAA,EACb,aAAa,iBAAE,OAAO,EAAE,SAAS;AAAA,EACjC,OAAO,iBAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,SAAS,iBAAE,OAAO;AACpB,CAAC;AACD,IAAM,YAAW,iBAAE,OAAO,EAAE,IAAI,iBAAE,QAAQ,EAAE,CAAC;AAE7C,IAAM,oBAAoB,iBAAE,OAAO,EAAE,MAAM,iBAAE,OAAO,GAAG,MAAM,iBAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AACpF,IAAM,oBAAoB,iBAAE,OAAO;AAAA,EACjC,MAAM,iBAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,MAAM,iBAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AACvC,CAAC;AACD,IAAM,uBAAuB,iBAAE,OAAO;AAAA,EACpC,MAAM,iBAAE,OAAO,EAAE,SAAS,EAAE,SAAS,iDAAiD;AAAA,EACtF,MAAM,iBAAE,OAAO,EAAE,SAAS;AAC5B,CAAC;AACD,IAAM,oBAAoB,iBAAE,OAAO;AAAA,EACjC,IAAI,iBAAE,OAAO;AAAA,EACb,MAAM,iBAAE,OAAO;AAAA,EACf,MAAM,iBAAE,OAAO;AAAA,EACf,QAAQ,iBAAE,IAAI,EAAE,SAAS;AAC3B,CAAC;AACD,IAAM,oBAAoB,iBAAE,OAAO;AAAA,EACjC,MAAM,iBAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,MAAM,iBAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,QAAQ,iBAAE,IAAI,EAAE,SAAS;AAAA,EACzB,UAAU,iBAAE,OAAO,EAAE,SAAS;AAChC,CAAC;AACD,IAAM,cAAc,iBAAE,OAAO,EAAE,OAAO,iBAAE,OAAO,EAAE,CAAC;AAClD,IAAM,kBAAkB,iBACrB,OAAO,iBAAE,OAAO,GAAG,iBAAE,IAAI,CAAC,EAC1B,SAAS,6DAA6D;AACzE,IAAM,oBAAoB,iBAAE,OAAO;AAAA,EACjC,OAAO,iBAAE,OAAO;AAAA,EAChB,MAAM,iBAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,aAAa,iBAAE,OAAO,EAAE,SAAS;AAAA,EACjC,WAAW,iBAAE,OAAO,EAAE,SAAS;AACjC,CAAC;AACD,IAAM,oBAAoB,iBAAE,OAAO;AAAA,EACjC,OAAO,iBAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,MAAM,iBAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,WAAW,iBAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAI1C,UAAU,iBAAE,OAAO,EAAE,SAAS;AAChC,CAAC;AACD,IAAM,uBAAuB,iBAAE,OAAO;AAAA,EACpC,OAAO,iBAAE,OAAO,EAAE,SAAS,EAAE,SAAS,mDAAmD;AAAA,EACzF,WAAW,iBAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAC5C,CAAC;AAED,IAAM,eAAe,iBAAE,OAAO;AAAA,EAG5B,SAAS,iBAAE,OAAO;AAAA,EAClB,IAAI,iBAAE,OAAO,EAAE,SAAS,4CAA4C;AAAA,EACpE,SAAS,iBAAE,OAAO;AAAA,EAClB,MAAM,iBAAE,KAAK,CAAC,QAAQ,UAAU,QAAQ,CAAC,EAAE,SAAS,wBAAwB;AAAA,EAC5E,SAAS,iBAAE,OAAO;AAAA,EAClB,SAAS,iBAAE,QAAQ;AAAA,EACnB,SAAS,iBAAE,QAAQ;AACrB,CAAC;AACD,IAAM,oBAAoB,aAAa,OAAO;AAAA,EAC5C,eAAe,iBAAE,QAAQ;AAAA,EACzB,gBAAgB,iBAAE,OAAO;AAAA,EACzB,gBAAgB,iBAAE,OAAO;AAC3B,CAAC;AACD,IAAM,uBAAuB,aAAa,OAAO;AAAA,EAC/C,QAAQ,iBAAE,MAAM,iBAAE,OAAO,CAAC,EAAE,SAAS,mCAAmC;AAAA,EACxE,OAAO,iBAAE,QAAQ;AACnB,CAAC;AACD,IAAM,8BAA8B,qBAAqB,OAAO;AAAA,EAC9D,WAAW,iBAAE,OAAO;AAAA,EACpB,cAAc,iBACX,OAAO,EACP,SAAS,EACT,SAAS,kFAAkF;AAAA,EAC9F,OAAO,iBACJ,MACC,iBAAE,OAAO;AAAA,IACP,MAAM,iBAAE,OAAO;AAAA,IACf,QAAQ,iBAAE,IAAI,EAAE,SAAS;AAAA,IACzB,OAAO,iBAAE,IAAI,EAAE,SAAS;AAAA,EAC1B,CAAC,CACH,EACC,SAAS,uEAAuE;AACrF,CAAC;AACD,IAAM,6BAA6B,iBAAE,OAAO;AAAA,EAC1C,IAAI,iBAAE,OAAO;AAAA,EACb,OAAO,iBAAE,OAAO;AAAA,EAChB,MAAM,iBAAE,OAAO;AAAA,EACf,SAAS,iBAAE,QAAQ;AAAA,EACnB,SAAS,iBAAE,OAAO;AACpB,CAAC;AACD,IAAM,oBAAoB,iBAAE,OAAO;AAAA,EACjC,IAAI,iBAAE,OAAO,EAAE,SAAS,0CAA0C;AAAA,EAClE,UAAU,iBAAE,OAAO,EAAE,SAAS;AAChC,CAAC;AACD,IAAM,kBAAkB,iBAAE,OAAO;AAAA,EAC/B,IAAI,iBAAE,OAAO,EAAE,SAAS,wCAAwC;AAClE,CAAC;AACD,IAAM,wBAAwB,iBAAE,OAAO;AAAA,EACrC,IAAI,iBAAE,OAAO;AAAA,EACb,SAAS,iBAAE,QAAQ;AAAA,EACnB,UAAU,iBAAE,OAAO;AAAA,EACnB,SAAS,iBAAE,OAAO;AAAA,EAClB,WAAW,iBAAE,QAAQ;AACvB,CAAC;AACD,IAAM,2BAA2B,iBAAE,OAAO;AAAA,EACxC,IAAI,iBAAE,OAAO;AAAA,EACb,SAAS,iBAAE,QAAQ;AAAA,EACnB,QAAQ,iBAAE,MAAM,iBAAE,OAAO,CAAC;AAAA,EAC1B,WAAW,iBAAE,QAAQ;AAAA,EACrB,UAAU,iBAAE,OAAO;AACrB,CAAC;AACD,IAAM,yBAAyB,aAAa,OAAO;AAAA,EACjD,QAAQ,iBAAE,MAAM,iBAAE,OAAO,CAAC,EAAE,SAAS,wDAAwD;AAAA,EAC7F,eAAe,iBAAE,OAAO;AAC1B,CAAC;AACD,IAAM,oBAAoB,iBAAE,OAAO;AAAA,EACjC,IAAI,iBAAE,OAAO,EAAE,SAAS,0CAA0C;AACpE,CAAC;AACD,IAAM,6BAA6B,iBAAE,OAAO;AAAA,EAC1C,IAAI,iBAAE,OAAO;AAAA,EACb,SAAS,iBAAE,QAAQ;AAAA,EACnB,QAAQ,iBAAE,MAAM,iBAAE,OAAO,CAAC;AAAA,EAC1B,gBAAgB,iBAAE,OAAO;AAAA,EACzB,eAAe,iBAAE,OAAO;AAAA,EACxB,WAAW,iBAAE,QAAQ;AAAA,EACrB,UAAU,iBAAE,OAAO;AACrB,CAAC;AACD,IAAM,2BAA2B,iBAAE,OAAO;AAAA,EACxC,IAAI,iBAAE,OAAO;AAAA,EACb,aAAa,iBAAE,OAAO,EAAE,SAAS;AAAA,EACjC,SAAS,iBAAE,QAAQ;AAAA,EACnB,MAAM,iBAAE,OAAO,iBAAE,OAAO,GAAG,iBAAE,IAAI,CAAC,EAAE,SAAS,6CAA6C;AAAA,EAC1F,SAAS,iBAAE,OAAO;AACpB,CAAC;AACD,IAAM,0BAA0B,iBAAE,OAAO;AAAA,EACvC,SAAS,iBAAE,OAAO;AAAA,EAClB,IAAI,iBAAE,OAAO;AAAA,EACb,SAAS,iBAAE,OAAO;AAAA,EAClB,OAAO,iBAAE,IAAI,EAAE,SAAS;AAAA,EACxB,SAAS,iBAAE,QAAQ;AACrB,CAAC;AACD,IAAM,iBAAiB,iBAAE,OAAO;AAAA,EAC9B,SAAS,iBAAE,OAAO;AAAA,EAClB,OAAO,iBAAE,OAAO,EAAE,SAAS,EAAE,SAAS,4CAA4C;AAAA,EAClF,MAAM,iBAAE,QAAQ,EAAE,SAAS,wCAAwC;AACrE,CAAC;AACD,IAAM,mBAAmB,iBAAE,OAAO;AAAA,EAChC,YAAY,iBAAE,OAAO;AAAA,EACrB,gBAAgB,iBAAE,OAAO;AAAA,EACzB,eAAe,iBAAE,OAAO;AAAA,EACxB,OAAO,iBAAE,OAAO;AAAA,EAChB,gBAAgB,iBAAE,OAAO;AAC3B,CAAC;AACD,IAAM,mBAAmB,iBAAE,OAAO;AAAA,EAChC,WAAW,iBAAE,MAAM,iBAAE,OAAO,CAAC;AAAA,EAC7B,YAAY,iBAAE,KAAK,CAAC,OAAO,KAAK,CAAC;AACnC,CAAC;AACD,IAAM,kBAAkB,iBAAE,OAAO;AAAA,EAC/B,QAAQ,iBAAE,OAAO;AAAA,EACjB,OAAO,iBAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,MAAM,iBAAE,QAAQ;AAClB,CAAC;AACD,IAAM,qBAAqB,iBAAE,OAAO;AAAA,EAClC,KAAK,iBAAE,OAAO;AAAA,EACd,OAAO,iBAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,QAAQ,iBAAE,OAAO,EAAE,SAAS;AAC9B,CAAC;AACD,IAAM,kBAAkB,iBAAE,OAAO;AAAA,EAC/B,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO,iBAAE,MAAM,eAAe;AAAA,EAC9B,SAAS,iBAAE,MAAM,kBAAkB,EAAE,SAAS,kEAAkE;AAAA,EAChH,YAAY,iBAAE,OAAO,EAAE,SAAS,+CAA+C;AAAA,EAC/E,aAAa,iBAAE,OAAO;AAAA,EACtB,aAAa,iBAAE,OAAO;AAAA,EACtB,gBAAgB,iBACb,OAAO,EACP,SAAS,EACT,SAAS,yEAAyE;AAAA,EACrF,oBAAoB,iBACjB,MAAM,iBAAE,OAAO,CAAC,EAChB,SAAS,oEAAoE;AAClF,CAAC;AACD,IAAM,SAAS,iBAAE,OAAO;AAAA,EACtB,MAAM,iBAAE,OAAO;AAAA,EACf,QAAQ,iBAAE,QAAQ;AACpB,CAAC;AACD,IAAM,eAAe,iBAAE,OAAO,EAAE,MAAM,iBAAE,OAAO,GAAG,QAAQ,iBAAE,QAAQ,EAAE,CAAC;AACvE,IAAM,oBAAoB,iBAAE,OAAO;AAAA,EACjC,SAAS,iBAAE,OAAO;AAAA,EAClB,YAAY,iBAAE,OAAO;AAAA,EACrB,SAAS,iBAAE,OAAO;AACpB,CAAC;AACD,IAAM,mBAAmB,iBAAE,OAAO;AAAA,EAChC,YAAY,iBACT,MAAM,iBAAE,OAAO,CAAC,EAChB,SAAS,EACT,SAAS,8DAAwD;AAAA,EACpE,YAAY,iBAAE,KAAK,CAAC,OAAO,KAAK,CAAC,EAAE,SAAS;AAC9C,CAAC;AACD,IAAM,yBAAyB,iBAAE,OAAO;AAAA,EACtC,QAAQ;AACV,CAAC;AAID,SAAS,KAAI,CAAC,KAAc,KAAqB;AAAA,EAC/C,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,aAAa,IAAI,GAAG;AAAA,EAC/C,IAAI,CAAC;AAAA,IAAG,MAAM,IAAI,MAAM,wBAAwB,KAAK;AAAA,EACrD,OAAO;AAAA;AAGT,SAAS,GAAG,CAAC,KAAc,KAAiC;AAAA,EAC1D,OAAO,IAAI,IAAI,IAAI,GAAG,EAAE,aAAa,IAAI,GAAG,KAAK;AAAA;AAInD,SAAS,OAAM,CACb,IACkB;AAAA,EAClB,OAAO,OAAO,KAAK,QAAQ;AAAA,IACzB,IAAI;AAAA,MACF,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG;AAAA,MAC7B,IAAI,eAAe;AAAA,QAAU,OAAO;AAAA,MACpC,OAAO,SAAS,KAAK,OAAO,IAAI;AAAA,MAChC,OAAO,GAAG;AAAA,MACV,OAAO,cAAc,CAAC;AAAA;AAAA;AAAA;AAO5B,IAAM,gBAAgB,iBAAE,OAAO,EAAE,SAAS,iBAAE,OAAO,EAAE,CAAC;AAItD,SAAS,aAAa,CAAC,KAAc,cAAwB,CAAC,GAAG;AAAA,EAC/D,eAAe,GAAE;AAAA,EACjB,MAAM,SAAS,YAAY,GAAE,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM;AAAA,EACrD,OAAO;AAAA,IACL,OAAO,WAAW,GAAE;AAAA,IACpB,QAAQ,WAAW,GAAE;AAAA,IACrB,OAAO,WAAW,GAAE;AAAA,IACpB,SAAS,aAAa,GAAE;AAAA,IACxB,YAAY,gBAAgB,GAAE,EAAE;AAAA,IAChC,aAAa,OAAO;AAAA,IACpB,aAAa,OAAO,OAAO,CAAC,GAAG,MAAM,IAAI,EAAE,MAAM,CAAC;AAAA,IAClD,gBAAgB,mBAAmB,GAAE;AAAA,IACrC,oBAAoB;AAAA,EACtB;AAAA;AAGK,IAAM,cAAuB;AAAA,EAClC;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS,MAAM,SAAS,KAAK,EAAE,SAAS,gBAAI,QAAQ,CAAC;AAAA,EACvD;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU,iBAAE,MAAM,cAAc;AAAA,IAChC,SAAS,QAAO,CAAC,QAAQ,cAAS,cAAc,GAAE,CAAC;AAAA,EACrD;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS,QAAO,OAAO,OAAO,cAAS;AAAA,MACrC,MAAM,OAAQ,MAAM,IAAI,KAAK;AAAA,MAC7B,OAAO,eAAe,KAAI,IAAI;AAAA,KAC/B;AAAA,EACH;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS,QAAO,OAAO,OAAO,cAAS;AAAA,MACrC,MAAM,OAAQ,MAAM,IAAI,KAAK;AAAA,MAC7B,OAAO,eAAe,KAAI,MAAK,KAAK,IAAI,GAAG,IAAI;AAAA,KAChD;AAAA,EACH;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS,QAAO,OAAO,OAAO,cAAS;AAAA,MACrC,MAAM,OAAQ,MAAM,IAAI,KAAK,EAAE,MAAM,OAAO,CAAC,EAAE;AAAA,MAC/C,OAAO,kBAAkB,KAAI,MAAK,KAAK,IAAI,GAAG,IAAI;AAAA,KACnD;AAAA,EACH;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS,QAAO,CAAC,OAAO,eAAU,EAAE,IAAI,eAAe,KAAI,MAAK,KAAK,IAAI,CAAC,EAAE,EAAE;AAAA,EAChF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SACE;AAAA,IACF,UAAU,iBAAE,MAAM,2BAA2B;AAAA,IAC7C,SAAS,QAAO,CAAC,OAAO,cAAS;AAAA,MAC/B,MAAM,QAAQ,IAAI,KAAK,OAAO;AAAA,MAC9B,OAAO,qBAAqB,KAAI,MAAK,KAAK,IAAI,GAAG;AAAA,QAC/C,OAAO,QAAQ,OAAO,KAAK,IAAI;AAAA,MACjC,CAAC;AAAA,KACF;AAAA,EACH;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU,iBAAE,MAAM,cAAc;AAAA,IAChC,SAAS,QAAO,CAAC,OAAO,cAAS,eAAe,KAAI,MAAK,KAAK,IAAI,CAAC,CAAC;AAAA,EACtE;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS,QAAO,OAAO,OAAO,cAAS;AAAA,MACrC,MAAM,OAAQ,MAAM,IAAI,KAAK;AAAA,MAM7B,OAAO,YAAY,KAAI,KAAK,IAAI,EAAE,MAAM,KAAK,MAAM,MAAM,KAAK,MAAM,QAAQ,KAAK,OAAO,CAAC;AAAA,KAC1F;AAAA,EACH;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS,QAAO,OAAO,OAAO,cAAS;AAAA,MACrC,MAAM,OAAQ,MAAM,IAAI,KAAK;AAAA,MAM7B,OAAO,eAAe,KAAI,MAAK,KAAK,IAAI,GAAG,IAAI;AAAA,KAChD;AAAA,EACH;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS,QAAO,OAAO,OAAO,cAAS;AAAA,MACrC,MAAM,OAAQ,MAAM,IAAI,KAAK;AAAA,MAC7B,OAAO,iBAAiB,KAAI,MAAK,KAAK,IAAI,GAAG,KAAK,KAAK;AAAA,KACxD;AAAA,EACH;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS,QAAO,CAAC,OAAO,eAAU,EAAE,IAAI,eAAe,KAAI,MAAK,KAAK,IAAI,CAAC,EAAE,EAAE;AAAA,EAChF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU,iBAAE,MAAM,sBAAsB;AAAA,IACxC,SAAS,QAAO,CAAC,OAAO,cAAS,sBAAsB,KAAI,MAAK,KAAK,IAAI,CAAC,CAAC;AAAA,EAC7E;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SACE;AAAA,IACF,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS,QAAO,OAAO,OAAO,cAAS;AAAA,MACrC,MAAM,OAAQ,MAAM,IAAI,KAAK;AAAA,MAC7B,OAAO,eAAe,KAAI,MAAK,KAAK,IAAI,GAAG,KAAK,EAAE;AAAA,KACnD;AAAA,EACH;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU,iBAAE,MAAM,YAAY;AAAA,IAC9B,SAAS,QAAO,CAAC,OAAO,cAAS;AAAA,MAC/B,MAAM,QAAQ,IAAI,KAAK,OAAO;AAAA,MAC9B,OAAO,YAAY,KAAI,MAAK,KAAK,IAAI,GAAG;AAAA,QACtC,MAAM,IAAI,KAAK,MAAM;AAAA,QACrB,OAAO,QAAQ,OAAO,KAAK,IAAI;AAAA,MACjC,CAAC;AAAA,KACF;AAAA,EACH;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS,QAAO,OAAO,OAAO,cAAS;AAAA,MACrC,MAAM,SAAU,MAAM,IAAI,KAAK;AAAA,MAC/B,OAAO,aAAa,KAAI,MAAK,KAAK,IAAI,GAAG,MAAM;AAAA,KAChD;AAAA,EACH;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS,QAAO,CAAC,OAAO,cAAS;AAAA,MAC/B,MAAM,KAAK,MAAK,KAAK,IAAI;AAAA,MACzB,MAAM,MAAM,UAAU,KAAI,EAAE;AAAA,MAC5B,IAAI,CAAC;AAAA,QAAK,MAAM,IAAI,QAAQ,aAAa,mBAAmB,IAAI;AAAA,MAChE,OAAO;AAAA,KACR;AAAA,EACH;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS,QAAO,OAAO,OAAO,cAAS;AAAA,MACrC,MAAM,SAAU,MAAM,IAAI,KAAK;AAAA,MAC/B,OAAO,aAAa,KAAI,MAAK,KAAK,IAAI,GAAG,MAAM;AAAA,KAChD;AAAA,EACH;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS,QAAO,OAAO,OAAO,cAAS;AAAA,MACrC,MAAM,OAAQ,MAAM,IAAI,KAAK;AAAA,MAC7B,OAAO,WAAW,KAAI,MAAK,KAAK,IAAI,GAAG,KAAK,QAAQ,KAAK,KAAK;AAAA,KAC/D;AAAA,EACH;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU,iBAAE,MAAM,oBAAoB;AAAA,IACtC,SAAS,QAAO,CAAC,OAAO,cAAS,oBAAoB,KAAI,MAAK,KAAK,IAAI,CAAC,CAAC;AAAA,EAC3E;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS,QAAO,CAAC,OAAO,cAAS,gBAAgB,KAAI,MAAK,KAAK,IAAI,GAAG,MAAK,KAAK,SAAS,CAAC,CAAC;AAAA,EAC7F;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU,iBAAE,MAAM,uBAAuB;AAAA,IACzC,SAAS,QAAO,CAAC,OAAO,cAAS,mBAAmB,KAAI,MAAK,KAAK,IAAI,GAAG,MAAK,KAAK,MAAM,CAAC,CAAC;AAAA,EAC7F;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SACE;AAAA,IACF,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS,QAAO,OAAO,OAAO,cAAS;AAAA,MACrC,MAAM,OAAQ,MAAM,IAAI,KAAK;AAAA,MAC7B,OAAO,aAAa,KAAI,MAAK,KAAK,IAAI,GAAG,KAAK,EAAE;AAAA,KACjD;AAAA,EACH;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS,QAAO,CAAC,OAAO,eAAU,EAAE,IAAI,aAAa,KAAI,MAAK,KAAK,IAAI,CAAC,EAAE,EAAE;AAAA,EAC9E;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU,iBAAE,MAAM,qBAAqB;AAAA,IACvC,SAAS,QAAO,CAAC,OAAO,cACtB,cAAc,KAAI,EAAE,aAAa,IAAI,KAAK,IAAI,GAAG,WAAW,IAAI,KAAK,QAAQ,EAAE,CAAC,CAClF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS,QAAO,OAAO,OAAO,cAAS;AAAA,MACrC,MAAM,OAAQ,MAAM,IAAI,KAAK;AAAA,MAM7B,OAAO,eAAe,KAAI,IAAI;AAAA,KAC/B;AAAA,EACH;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS,QAAO,CAAC,OAAO,cAAS;AAAA,MAC/B,MAAM,KAAK,MAAK,KAAK,IAAI;AAAA,MACzB,MAAM,OAAM,YAAY,KAAI,EAAE;AAAA,MAC9B,IAAI,CAAC;AAAA,QAAK,MAAM,IAAI,QAAQ,aAAa,qBAAqB,IAAI;AAAA,MAClE,OAAO,KAAK,MAAK,SAAS,gBAAgB,KAAI,KAAI,EAAE,EAAE;AAAA,KACvD;AAAA,EACH;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS,QAAO,OAAO,OAAO,cAAS;AAAA,MACrC,MAAM,OAAQ,MAAM,IAAI,KAAK;AAAA,MAM7B,QAAQ,aAAa,WAAW;AAAA,MAChC,MAAM,OAAM,eAAe,KAAI,MAAK,KAAK,IAAI,GAAG,QAAQ,EAAE,SAAS,SAAS,CAAC;AAAA,MAC7E,OAAO,KAAK,MAAK,SAAS,gBAAgB,KAAI,KAAI,EAAE,EAAE;AAAA,KACvD;AAAA,EACH;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS,QAAO,OAAO,OAAO,cAAS;AAAA,MACrC,MAAM,OAAQ,MAAM,IAAI,KAAK,EAAE,MAAM,OAAO,CAAC,EAAE;AAAA,MAI/C,MAAM,OAAM,kBAAkB,KAAI,MAAK,KAAK,IAAI,GAAG;AAAA,QACjD,OAAO,KAAK;AAAA,QACZ,UAAU,KAAK;AAAA,MACjB,CAAC;AAAA,MACD,OAAO,KAAK,MAAK,SAAS,gBAAgB,KAAI,KAAI,EAAE,EAAE;AAAA,KACvD;AAAA,EACH;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS,QAAO,OAAO,OAAO,cAAS;AAAA,MACrC,MAAM,OAAQ,MAAM,IAAI,KAAK;AAAA,MAC7B,OAAO,aAAa,KAAI,MAAK,KAAK,IAAI,GAAG,KAAK,QAAQ,KAAK,KAAK;AAAA,KACjE;AAAA,EACH;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU,iBAAE,MAAM,iBAAiB;AAAA,IACnC,SAAS,QAAO,CAAC,OAAO,cAAS,sBAAsB,KAAI,MAAK,KAAK,IAAI,CAAC,CAAC;AAAA,EAC7E;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS,QAAO,CAAC,OAAO,cAAS,kBAAkB,KAAI,MAAK,KAAK,IAAI,GAAG,MAAK,KAAK,SAAS,CAAC,CAAC;AAAA,EAC/F;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SACE;AAAA,IACF,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS,QAAO,OAAO,OAAO,cAAS;AAAA,MACrC,MAAM,OAAQ,MAAM,IAAI,KAAK;AAAA,MAC7B,OAAO,eAAe,KAAI,MAAK,KAAK,IAAI,GAAG,KAAK,IAAI,EAAE,SAAS,KAAK,SAAS,CAAC;AAAA,KAC/E;AAAA,EACH;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS,QAAO,CAAC,OAAO,eAAU,EAAE,IAAI,eAAe,KAAI,MAAK,KAAK,IAAI,CAAC,EAAE,EAAE;AAAA,EAChF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU,iBAAE,MAAM,cAAc;AAAA,IAChC,SAAS,QAAO,CAAC,QAAQ,cAAS;AAAA,MAChC,MAAM,OAAO,UAAU,GAAE;AAAA,MACzB,MAAM,QAAQ,IACX,MACC,+FACF,EACC,IAAI;AAAA,MACP,OAAO;AAAA,QACL,EAAE,SAAS,MAAM,OAAO,MAAM,MAAM,KAAK;AAAA,QACzC,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,YAAY,IAAI,EAAE,IAAI,CAAC,OAAO,KAAK,GAAG,MAAM,MAAM,EAAE;AAAA,MAC/E;AAAA,KACD;AAAA,EACH;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU,iBAAE,MAAM,eAAe;AAAA,IACjC,SAAS,QAAO,CAAC,OAAO,cAAS;AAAA,MAC/B,MAAM,QAAQ,IAAI,KAAK,OAAO;AAAA,MAC9B,OAAO,OAAO,KAAI,MAAK,KAAK,GAAG,GAAG,EAAE,OAAO,QAAQ,OAAO,KAAK,IAAI,UAAU,CAAC;AAAA,KAC/E;AAAA,EACH;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SACE,4FACA;AAAA,IACF,UAAU;AAAA,IACV,SAAS,QAAO,CAAC,QAAQ,cAAS,cAAc,GAAE,CAAC;AAAA,EACrD;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SACE,sFACA,yFACA;AAAA,IACF,UAAU;AAAA,IACV,SAAS,QAAO,OAAO,QAAQ,cAAS;AAAA,MACtC,MAAM,IAAI,MAAM,qBAAqB,GAAE;AAAA,MACvC,OAAO,cAAc,KAAI,EAAE,WAAW;AAAA,KACvC;AAAA,EACH;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SACE;AAAA,IACF,UAAU;AAAA,IACV,SAAS,QAAO,CAAC,QAAQ,cAAS,WAAW,GAAE,CAAC;AAAA,EAClD;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SACE;AAAA,IACF,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS,QAAO,OAAO,OAAO,cAAS;AAAA,MACrC,MAAM,OAAQ,MAAM,IAAI,KAAK;AAAA,MAC7B,eAAe,GAAE;AAAA,MACjB,IAAI,CAAC,UAAU,KAAI,KAAK,MAAM,KAAK,MAAM;AAAA,QACvC,MAAM,IAAI,QAAQ,aAAa,sBAAsB,KAAK,MAAM;AAAA,MAClE,OAAO,EAAE,MAAM,KAAK,MAAM,QAAQ,KAAK,OAAO;AAAA,KAC/C;AAAA,EACH;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SACE;AAAA,IACF,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS,QAAO,OAAO,OAAO,cAAS;AAAA,MACrC,MAAM,OAAQ,MAAM,IAAI,KAAK;AAAA,MAC7B,IAAI,KAAK;AAAA,QAAY,aAAa,KAAI,KAAK,UAAU;AAAA,MACrD,IAAI,KAAK;AAAA,QAAY,cAAc,KAAI,KAAK,UAAU;AAAA,MACtD,OAAO,EAAE,QAAQ,WAAW,GAAE,EAAE;AAAA,KACjC;AAAA,EACH;AACF;",
|
|
133
|
+
"debugId": "DA5B2BE6A38E8FBC64756E2164756E21",
|
|
119
134
|
"names": []
|
|
120
135
|
}
|