parseman 0.46.0 → 0.47.1
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 +8 -3
- package/dist/analysis/choice-cost-render.d.ts +12 -4
- package/dist/analysis/choice-cost-render.d.ts.map +1 -1
- package/dist/analysis/choice-cost.d.ts +2 -2
- package/dist/analysis/choice-cost.d.ts.map +1 -1
- package/dist/analysis/commitment.d.ts +131 -0
- package/dist/analysis/commitment.d.ts.map +1 -0
- package/dist/analysis/diagnostics.cjs +10339 -7787
- package/dist/analysis/diagnostics.cjs.map +3 -4
- package/dist/analysis/diagnostics.d.ts +2 -2
- package/dist/analysis/diagnostics.js +10339 -7787
- package/dist/analysis/diagnostics.js.map +3 -4
- package/dist/analysis/duplication.d.ts.map +1 -1
- package/dist/analysis/fix.d.ts +3 -3
- package/dist/analysis/fix.d.ts.map +1 -1
- package/dist/analysis/format-number.d.ts +23 -0
- package/dist/analysis/format-number.d.ts.map +1 -0
- package/dist/analysis/gating.d.ts +39 -2
- package/dist/analysis/gating.d.ts.map +1 -1
- package/dist/analysis/rebuild.d.ts.map +1 -1
- package/dist/analysis/terminal.d.ts +5 -2
- package/dist/analysis/terminal.d.ts.map +1 -1
- package/dist/cli/index.cjs +10924 -8506
- package/dist/cli/index.cjs.map +3 -4
- package/dist/cli/index.js +10924 -8506
- package/dist/cli/index.js.map +3 -4
- package/dist/combinators/adjacency.d.ts +100 -0
- package/dist/combinators/adjacency.d.ts.map +1 -0
- package/dist/combinators/choice.d.ts.map +1 -1
- package/dist/combinators/completions.d.ts.map +1 -1
- package/dist/combinators/dispatch.d.ts +8 -1
- package/dist/combinators/dispatch.d.ts.map +1 -1
- package/dist/combinators/expect.d.ts.map +1 -1
- package/dist/combinators/first-set.d.ts.map +1 -1
- package/dist/combinators/gate.d.ts.map +1 -1
- package/dist/combinators/grammar.d.ts +22 -0
- package/dist/combinators/grammar.d.ts.map +1 -1
- package/dist/combinators/literal.d.ts +8 -0
- package/dist/combinators/literal.d.ts.map +1 -1
- package/dist/combinators/map.d.ts +0 -1
- package/dist/combinators/map.d.ts.map +1 -1
- package/dist/combinators/node.d.ts +13 -3
- package/dist/combinators/node.d.ts.map +1 -1
- package/dist/combinators/parser.d.ts +1 -1
- package/dist/combinators/parser.d.ts.map +1 -1
- package/dist/combinators/ref.d.ts.map +1 -1
- package/dist/combinators/regex.d.ts +1 -16
- package/dist/combinators/regex.d.ts.map +1 -1
- package/dist/combinators/repeat.d.ts +30 -2
- package/dist/combinators/repeat.d.ts.map +1 -1
- package/dist/combinators/scanTo.d.ts +71 -1
- package/dist/combinators/scanTo.d.ts.map +1 -1
- package/dist/combinators/sequence.d.ts.map +1 -1
- package/dist/combinators/token.d.ts.map +1 -1
- package/dist/combinators/trivia-boundary.d.ts +26 -0
- package/dist/combinators/trivia-boundary.d.ts.map +1 -0
- package/dist/combinators/trivia-skip.d.ts +45 -1
- package/dist/combinators/trivia-skip.d.ts.map +1 -1
- package/dist/combinators/withCtx.d.ts.map +1 -1
- package/dist/compiler/compile-linkable-table.d.ts +104 -0
- package/dist/compiler/compile-linkable-table.d.ts.map +1 -0
- package/dist/compiler/degradation.d.ts +0 -2
- package/dist/compiler/degradation.d.ts.map +1 -1
- package/dist/compiler/fields.d.ts +13 -0
- package/dist/compiler/fields.d.ts.map +1 -1
- package/dist/compiler/grammar-coverage-ids.d.ts +5 -5
- package/dist/compiler/grammar-coverage-ids.d.ts.map +1 -1
- package/dist/compiler/ir-serialize.d.ts.map +1 -1
- package/dist/compiler/linker.d.ts +47 -53
- package/dist/compiler/linker.d.ts.map +1 -1
- package/dist/compiler/token-alphabet.d.ts +81 -0
- package/dist/compiler/token-alphabet.d.ts.map +1 -0
- package/dist/compiler/token-dispatch.d.ts +95 -0
- package/dist/compiler/token-dispatch.d.ts.map +1 -0
- package/dist/compiler/token-scanner.d.ts +53 -0
- package/dist/compiler/token-scanner.d.ts.map +1 -0
- package/dist/compiler/value-usage.d.ts.map +1 -1
- package/dist/coverage.d.ts +1 -1
- package/dist/coverage.d.ts.map +1 -1
- package/dist/cst/capture-buffer.d.ts +35 -0
- package/dist/cst/capture-buffer.d.ts.map +1 -1
- package/dist/cst/reflection-attach.d.ts +8 -0
- package/dist/cst/reflection-attach.d.ts.map +1 -0
- package/dist/cst/reflection-symbols.d.ts +10 -0
- package/dist/cst/reflection-symbols.d.ts.map +1 -0
- package/dist/cst/reflection.d.ts +2 -4
- package/dist/cst/reflection.d.ts.map +1 -1
- package/dist/cst/root-trivia-scope.d.ts +26 -0
- package/dist/cst/root-trivia-scope.d.ts.map +1 -0
- package/dist/cst/trivia-charscan.d.ts +18 -0
- package/dist/cst/trivia-charscan.d.ts.map +1 -0
- package/dist/cst/trivia-kinds.d.ts +19 -0
- package/dist/cst/trivia-kinds.d.ts.map +1 -1
- package/dist/functional/doc.d.ts.map +1 -1
- package/dist/functional/run-tabled.d.ts +12 -0
- package/dist/functional/run-tabled.d.ts.map +1 -0
- package/dist/functional/run.d.ts +25 -42
- package/dist/functional/run.d.ts.map +1 -1
- package/dist/grammar-metadata.d.ts +3 -0
- package/dist/grammar-metadata.d.ts.map +1 -0
- package/dist/index.cjs +9290 -7181
- package/dist/index.cjs.map +3 -4
- package/dist/index.d.ts +18 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9300 -7191
- package/dist/index.js.map +3 -4
- package/dist/language-service/index.cjs +313 -121
- package/dist/language-service/index.cjs.map +3 -4
- package/dist/language-service/index.js +313 -121
- package/dist/language-service/index.js.map +3 -4
- package/dist/oracle/index.cjs.map +0 -1
- package/dist/oracle/index.js.map +0 -1
- package/dist/parse-context.d.ts +49 -0
- package/dist/parse-context.d.ts.map +1 -0
- package/dist/plugin/evaluator.d.ts +40 -1
- package/dist/plugin/evaluator.d.ts.map +1 -1
- package/dist/plugin/index.cjs +11175 -9534
- package/dist/plugin/index.cjs.map +3 -4
- package/dist/plugin/index.d.ts.map +1 -1
- package/dist/plugin/index.js +11175 -9534
- package/dist/plugin/index.js.map +3 -4
- package/dist/regex/classes.d.ts +28 -0
- package/dist/regex/classes.d.ts.map +1 -1
- package/dist/regex/first-set.d.ts +14 -0
- package/dist/regex/first-set.d.ts.map +1 -1
- package/dist/run/index.cjs +136 -51
- package/dist/run/index.cjs.map +2 -3
- package/dist/run/index.js +136 -51
- package/dist/run/index.js.map +2 -3
- package/dist/spec/index.cjs +2934 -1611
- package/dist/spec/index.cjs.map +3 -4
- package/dist/spec/index.js +2934 -1611
- package/dist/spec/index.js.map +3 -4
- package/dist/spec/model.d.ts +8 -0
- package/dist/spec/model.d.ts.map +1 -1
- package/dist/table/assemble.d.ts +307 -0
- package/dist/table/assemble.d.ts.map +1 -0
- package/dist/table/cell.d.ts +42 -0
- package/dist/table/cell.d.ts.map +1 -0
- package/dist/table/child-slots.d.ts +30 -0
- package/dist/table/child-slots.d.ts.map +1 -0
- package/dist/table/compile-rule-map.d.ts +136 -0
- package/dist/table/compile-rule-map.d.ts.map +1 -0
- package/dist/table/compile.d.ts +56 -0
- package/dist/table/compile.d.ts.map +1 -0
- package/dist/table/duplication-hook.d.ts +32 -0
- package/dist/table/duplication-hook.d.ts.map +1 -0
- package/dist/table/emit-assembly.d.ts +139 -0
- package/dist/table/emit-assembly.d.ts.map +1 -0
- package/dist/table/emit.d.ts +113 -0
- package/dist/table/emit.d.ts.map +1 -0
- package/dist/table/encode-baseline.d.ts +16 -0
- package/dist/table/encode-baseline.d.ts.map +1 -0
- package/dist/table/encode.d.ts +71 -0
- package/dist/table/encode.d.ts.map +1 -0
- package/dist/table/exec-baseline.d.ts +9 -0
- package/dist/table/exec-baseline.d.ts.map +1 -0
- package/dist/table/exec.d.ts +72 -0
- package/dist/table/exec.d.ts.map +1 -0
- package/dist/table/fold.d.ts +25 -0
- package/dist/table/fold.d.ts.map +1 -0
- package/dist/table/index.cjs +11463 -0
- package/dist/table/index.cjs.map +6 -0
- package/dist/table/index.d.ts +100 -0
- package/dist/table/index.d.ts.map +1 -0
- package/dist/table/index.js +11440 -0
- package/dist/table/index.js.map +6 -0
- package/dist/table/inspect.d.ts +17 -0
- package/dist/table/inspect.d.ts.map +1 -0
- package/dist/table/ops.d.ts +453 -0
- package/dist/table/ops.d.ts.map +1 -0
- package/dist/table/program.d.ts +496 -0
- package/dist/table/program.d.ts.map +1 -0
- package/dist/table/run-support.d.ts +38 -0
- package/dist/table/run-support.d.ts.map +1 -0
- package/dist/{compiler/scannable-run.d.ts → table/scan-shapes.d.ts} +14 -13
- package/dist/table/scan-shapes.d.ts.map +1 -0
- package/dist/table/site-labels.d.ts +58 -0
- package/dist/table/site-labels.d.ts.map +1 -0
- package/dist/table/stamp.d.ts +70 -0
- package/dist/table/stamp.d.ts.map +1 -0
- package/dist/types.d.ts +80 -24
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/package.json +26 -2
- package/src/analysis/choice-cost-gate.ts +359 -0
- package/src/analysis/choice-cost-render.ts +293 -0
- package/src/analysis/choice-cost.ts +1008 -0
- package/src/analysis/commitment.ts +557 -0
- package/src/analysis/corpus.ts +130 -0
- package/src/analysis/diagnose-render.ts +625 -0
- package/src/analysis/diagnose.ts +317 -0
- package/src/analysis/diagnostics.ts +33 -0
- package/src/analysis/duplication.ts +1955 -0
- package/src/analysis/fix-render.ts +217 -0
- package/src/analysis/fix.ts +669 -0
- package/src/analysis/format-number.ts +31 -0
- package/src/analysis/gating.ts +792 -0
- package/src/analysis/grammar.ts +72 -0
- package/src/analysis/rebuild.ts +287 -0
- package/src/analysis/terminal.ts +336 -0
- package/src/cli/index.ts +413 -0
- package/src/combinators/adjacency.ts +171 -0
- package/src/combinators/attempt.ts +41 -0
- package/src/combinators/case-fold.ts +90 -0
- package/src/combinators/choice.ts +466 -0
- package/src/combinators/completions.ts +64 -0
- package/src/combinators/dispatch.ts +358 -0
- package/src/combinators/expect.ts +159 -0
- package/src/combinators/first-set.ts +348 -0
- package/src/combinators/gate.ts +50 -0
- package/src/combinators/grammar.ts +272 -0
- package/src/combinators/keywords.ts +145 -0
- package/src/combinators/literal.ts +102 -0
- package/src/combinators/map.ts +106 -0
- package/src/combinators/node.ts +345 -0
- package/src/combinators/not.ts +55 -0
- package/src/combinators/parser.ts +266 -0
- package/src/combinators/peek.ts +63 -0
- package/src/combinators/probe.ts +25 -0
- package/src/combinators/ref.ts +109 -0
- package/src/combinators/regex.ts +170 -0
- package/src/combinators/repeat.ts +561 -0
- package/src/combinators/scanTo.ts +393 -0
- package/src/combinators/sequence.ts +237 -0
- package/src/combinators/token.ts +120 -0
- package/src/combinators/trivia-boundary.ts +48 -0
- package/src/combinators/trivia-skip.ts +852 -0
- package/src/combinators/withCtx.ts +45 -0
- package/src/compiler/build-arity.ts +330 -0
- package/src/compiler/compile-linkable-table.ts +209 -0
- package/src/compiler/degradation.ts +266 -0
- package/src/compiler/fields.ts +191 -0
- package/src/compiler/grammar-coverage-ids.ts +129 -0
- package/src/compiler/ir-serialize.ts +615 -0
- package/src/compiler/linker.ts +954 -0
- package/src/compiler/token-alphabet.ts +209 -0
- package/src/compiler/token-dispatch.ts +353 -0
- package/src/compiler/token-scanner.ts +318 -0
- package/src/compiler/value-usage.ts +147 -0
- package/src/coverage.ts +383 -0
- package/src/cst/capture-buffer.ts +297 -0
- package/src/cst/host-mode.ts +69 -0
- package/src/cst/reflection-attach.ts +11 -0
- package/src/cst/reflection-symbols.ts +9 -0
- package/src/cst/reflection.ts +149 -0
- package/src/cst/relative-spans.ts +207 -0
- package/src/cst/root-trivia-scope.ts +30 -0
- package/src/cst/trivia-charscan.ts +312 -0
- package/src/cst/trivia-entries.ts +285 -0
- package/src/cst/trivia-index.ts +131 -0
- package/src/cst/trivia-kinds.ts +358 -0
- package/src/cst/types.ts +76 -0
- package/src/cst/walk.ts +101 -0
- package/src/functional/doc.ts +959 -0
- package/src/functional/run-tabled.ts +153 -0
- package/src/functional/run.ts +558 -0
- package/src/grammar-metadata.ts +2 -0
- package/src/index.ts +189 -0
- package/src/language-service/index.ts +221 -0
- package/src/line-index.ts +131 -0
- package/src/oracle/digest.ts +620 -0
- package/src/oracle/index.ts +55 -0
- package/src/parse-context.ts +91 -0
- package/src/plugin/direct-builder-static.ts +102 -0
- package/src/plugin/evaluator.ts +1505 -0
- package/src/plugin/free-identifiers.ts +338 -0
- package/src/plugin/index.ts +2281 -0
- package/src/plugin/reducer-resolver.ts +606 -0
- package/src/recovery/scan.ts +155 -0
- package/src/regex/classes.ts +183 -0
- package/src/regex/first-set.ts +316 -0
- package/src/run/index.ts +31 -0
- package/src/spec/ebnf.ts +128 -0
- package/src/spec/index.ts +54 -0
- package/src/spec/model.ts +636 -0
- package/src/spec/railroad-lib.ts +559 -0
- package/src/spec/railroad.ts +256 -0
- package/src/table/assemble.ts +3006 -0
- package/src/table/cell.ts +42 -0
- package/src/table/child-slots.ts +113 -0
- package/src/table/compile-rule-map.ts +336 -0
- package/src/table/compile.ts +244 -0
- package/src/table/duplication-hook.ts +89 -0
- package/src/table/emit-assembly.ts +1777 -0
- package/src/table/emit.ts +429 -0
- package/src/table/encode-baseline.ts +340 -0
- package/src/table/encode.ts +1569 -0
- package/src/table/exec-baseline.ts +537 -0
- package/src/table/exec.ts +1680 -0
- package/src/table/fold.ts +38 -0
- package/src/table/index.ts +108 -0
- package/src/table/inspect.ts +52 -0
- package/src/table/ops.ts +467 -0
- package/src/table/program.ts +876 -0
- package/src/table/run-support.ts +66 -0
- package/src/table/scan-shapes.ts +1578 -0
- package/src/table/site-labels.ts +228 -0
- package/src/table/stamp.ts +229 -0
- package/src/types.ts +563 -0
- package/src/version.ts +16 -0
- package/dist/compiler/codegen.d.ts +0 -334
- package/dist/compiler/codegen.d.ts.map +0 -1
- package/dist/compiler/inline-build.d.ts +0 -11
- package/dist/compiler/inline-build.d.ts.map +0 -1
- package/dist/compiler/inline-callback.d.ts +0 -21
- package/dist/compiler/inline-callback.d.ts.map +0 -1
- package/dist/compiler/line-index.d.ts +0 -2
- package/dist/compiler/line-index.d.ts.map +0 -1
- package/dist/compiler/module-hoist.d.ts +0 -106
- package/dist/compiler/module-hoist.d.ts.map +0 -1
- package/dist/compiler/scannable-run.d.ts.map +0 -1
- package/dist/compiler/scannable-terminal.d.ts +0 -23
- package/dist/compiler/scannable-terminal.d.ts.map +0 -1
- package/dist/compiler/trivia-fast-path.d.ts +0 -38
- package/dist/compiler/trivia-fast-path.d.ts.map +0 -1
package/dist/cli/index.js.map
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../src/cli/index.ts", "../../src/combinators/first-set.ts", "../../src/analysis/gating.ts", "../../src/line-index.ts", "../../src/cst/capture-buffer.ts", "../../src/
|
|
4
|
-
"sourcesContent": ["#!/usr/bin/env node\n/**\n * `parseman` \u2014 the diagnostics CLI.\n *\n * WHY A COMMAND AND NOT A FUNCTION\n * --------------------------------\n * 0.45 collapsed three functions a caller had to choose between into one\n * `diagnoseGrammar()`. That removed the wrong choice but not the real defect: it is\n * still something you must know exists, import, and write a script around. rustc and\n * clippy are commands. `parseman diagnose src/grammar.ts` is found by typing\n * `parseman --help`; a library export is found by reading the source.\n *\n * FOUR LAYERS, AND THIS IS THE FOURTH\n * -----------------------------------\n * Analysis produces data (`analysis/gating.ts`, `analysis/corpus.ts`), policy decides\n * pass/fail (`analysis/diagnose.ts` \u2014 `ok`), rendering makes it readable\n * (`analysis/*-render.ts`). This file is argument parsing and process wiring, and\n * nothing else. It must not become where logic accretes: if a rule about what counts as\n * a finding ever appears below, it is in the wrong file.\n *\n * EXIT CODES\n * ----------\n * 0 analysed, no blocking finding\n * 1 analysed, blocking findings (the established `process.exit(d.ok ? 0 : 1)` contract)\n * 2 COULD NOT ANALYSE \u2014 bad usage, unloadable grammar, unreadable corpus, I/O failure\n *\n * 2 is not a nicety. This repo's own history has the counter-example: `coverage.ts`\n * reporting 100% covered over zero analysable input. A tool that cannot measure must not\n * exit 0.\n *\n * STREAMS\n * -------\n * Output goes through the streams this process already owns. `--json` with no path\n * writes the document to stdout and sends the human rendering to stderr, so stdout stays\n * a single parseable document; `--json=<path>` writes the file and reports a real I/O\n * failure with its path and reason. It never opens a second file description on stdout \u2014\n * `writeFileSync('/dev/stdout')` races the async writes `console.log` has already queued,\n * which is exactly how 0.45's size probe exited 1 while printing a correct table.\n *\n * The compiler is reachable from here, and deliberately not from anywhere a library\n * consumer imports: this is a separate bin entry with its own bundle, so a browser build\n * of `parseman` costs nothing for its existence.\n */\nimport { readFileSync, writeFileSync, readdirSync, statSync } from 'node:fs'\nimport { resolve, relative, join, extname } from 'node:path'\nimport { pathToFileURL } from 'node:url'\nimport { register } from 'node:module'\nimport { diagnoseGrammar, examinedNothing, type GrammarDiagnosis } from '../analysis/diagnose.ts'\nimport { renderDiagnosis } from '../analysis/diagnose-render.ts'\nimport { DEFAULT_WIDTH } from '../analysis/terminal.ts'\nimport { firstSetToString, choiceArms, peelToLeading } from '../analysis/gating.ts'\nimport { armFirstSets, measureChoiceCost, type ChoiceCorpusCost, type CorpusSample } from '../analysis/corpus.ts'\nimport { proposeFixes, applyFixEdits } from '../analysis/fix.ts'\nimport { renderFixReport } from '../analysis/fix-render.ts'\nimport type { Combinator, ParserDef } from '../types.ts'\n\nconst USAGE = `parseman \u2014 grammar diagnostics\n\n parseman diagnose <grammar> [options] analyse a grammar; exit 1 on a blocking finding\n parseman fix <grammar> [options] propose VERIFIED rewrites; preview by default\n\ngrammar\n A module path. The default export is used, or --export <name>. A .ts module needs\n \\`tsx\\` installed (parseman registers it automatically when it is resolvable).\n\noptions\n --corpus <path> File or directory of sample inputs. On \\`diagnose\\` it adds the\n measured second world; on \\`fix\\` it is REQUIRED \u2014 a rewrite with\n no corpus cannot be verified and is never offered.\n --ext <list> Corpus extensions to accept (default: every file). e.g. --ext .css\n --export <name> Named export to analyse instead of the default export.\n --accept <ids> Comma-separated choice ids accepted as intentionally ungated.\n --source <path> Grammar source to locate edits in (default: the grammar path).\n --apply \\`fix\\` only. Write the verified edits. Off by default.\n --json[=<path>] Machine-readable report. With no path it goes to stdout and the\n human rendering goes to stderr.\n --limit <n> Findings to expand (default 20).\n --width <n> Render width. Default: the terminal's when colouring, else 80.\n --no-links Do not emit clickable file links (OSC-8). Some terminals show\n the escape sequence as visible junk instead of a link.\n --color/--no-color Force colour on/off. Default: on only when stdout is a TTY.\n -h, --help This.\n\nexit codes\n 0 clean \u00B7 1 blocking findings \u00B7 2 could not analyse`\n\ntype Args = {\n command: string | undefined\n positional: string[]\n flags: Map<string, string | true>\n}\n\nfunction parseArgs(argv: readonly string[]): Args {\n const flags = new Map<string, string | true>()\n const positional: string[] = []\n for (let i = 0; i < argv.length; i++) {\n const a = argv[i]!\n if (a === '-h') { flags.set('help', true); continue }\n if (!a.startsWith('--')) { positional.push(a); continue }\n const eq = a.indexOf('=')\n if (eq !== -1) { flags.set(a.slice(2, eq), a.slice(eq + 1)); continue }\n const name = a.slice(2)\n // Value-taking flags consume the next argument; boolean flags do not.\n if (['corpus', 'export', 'accept', 'source', 'limit', 'ext', 'width'].includes(name) && i + 1 < argv.length && !argv[i + 1]!.startsWith('--')) {\n flags.set(name, argv[++i]!)\n }\n else flags.set(name, true)\n }\n return { command: positional[0], positional: positional.slice(1), flags }\n}\n\nclass CliError extends Error {}\n\n/** Register the TS loader only when it is needed AND resolvable, so a JS-only user\n * never pays for it and a TS user gets a sentence rather than a module-not-found. */\nasync function registerTsIfNeeded(path: string): Promise<void> {\n if (!['.ts', '.mts', '.cts', '.tsx'].includes(extname(path))) return\n try {\n const api = await import('tsx/esm/api') as { register(): unknown }\n api.register()\n }\n catch {\n throw new CliError(\n `${path} is TypeScript, and the \\`tsx\\` loader is not resolvable from here.\\n`\n + 'Install it (`pnpm add -D tsx`), or point at a built .js module.',\n )\n }\n}\n\n/**\n * A module hook that drops `with { type: 'macro' }` from an import.\n *\n * A grammar written for the macro imports parseman as `import { \u2026 } from 'parseman'\n * with { type: 'macro' }`. Node's default loader rejects any `type` it does not know, so\n * `parseman diagnose src/grammar.ts` died with `TypeError: Import attribute \"type\" with\n * value \"macro\" is not supported` on EVERY macro-authored grammar \u2014 that is, on the\n * grammars this command exists to serve.\n *\n * Dropping the attribute degrades the macro import to a plain runtime import, which is\n * exactly the shape the analysis wants: `rules()`/`composeLeaf()` then EXECUTE and\n * produce real combinators instead of compiled functions. It is also what the macro's\n * own vite plugin does with the attribute, and what the only working workaround (a\n * vite server with the plugin left out) achieved the long way round.\n *\n * The attribute is dropped for `type: 'macro'` ONLY. `type: 'json'` and friends still\n * reach the default loader and still mean what they mean.\n *\n * Source is not rewritten: the attribute is removed from the load/resolve CONTEXT, so\n * nothing depends on parsing the importer's text.\n */\nconst MACRO_ATTR_HOOK = `\nconst strip = (context) => {\n const attrs = context && context.importAttributes\n if (!attrs || attrs.type !== 'macro') return context\n const rest = { ...attrs }\n delete rest.type\n return { ...context, importAttributes: rest }\n}\nexport async function resolve(specifier, context, nextResolve) {\n return nextResolve(specifier, strip(context))\n}\nexport async function load(url, context, nextLoad) {\n return nextLoad(url, strip(context))\n}\n`\nlet macroAttrRegistered = false\nfunction registerMacroAttributeHook(): void {\n if (macroAttrRegistered) return\n macroAttrRegistered = true\n register(`data:text/javascript,${encodeURIComponent(MACRO_ATTR_HOOK)}`)\n}\n\nasync function loadGrammar(path: string, exportName: string | undefined): Promise<unknown> {\n const abs = resolve(path)\n try { statSync(abs) }\n catch { throw new CliError(`no such grammar module: ${path}`) }\n await registerTsIfNeeded(abs)\n // AFTER the TS loader, so this hook is outermost and `nextLoad` still runs it.\n registerMacroAttributeHook()\n let mod: Record<string, unknown>\n try { mod = await import(pathToFileURL(abs).href) as Record<string, unknown> }\n catch (e) {\n throw new CliError(`could not load ${path}\\n ${e instanceof Error ? `${e.name}: ${e.message}` : String(e)}`)\n }\n if (exportName !== undefined) {\n if (!(exportName in mod)) {\n throw new CliError(`${path} has no export \\`${exportName}\\`. It exports: ${Object.keys(mod).join(', ') || '(nothing)'}`)\n }\n return mod[exportName]\n }\n if ('default' in mod) return mod.default\n const names = Object.keys(mod)\n if (names.length === 1) return mod[names[0]!]\n throw new CliError(\n `${path} has no default export, and ${names.length} named exports to choose between.\\n`\n + ` Pick one with --export: ${names.join(', ')}`,\n )\n}\n\nfunction readCorpus(root: string | undefined, extFilter: string | undefined): CorpusSample[] {\n if (root === undefined) return []\n const abs = resolve(root)\n const exts = extFilter?.split(',').map(e => e.trim()).filter(e => e !== '')\n const files: string[] = []\n const walk = (p: string): void => {\n let st: ReturnType<typeof statSync>\n try { st = statSync(p) }\n catch (e) { throw new CliError(`cannot read corpus path ${p}: ${e instanceof Error ? e.message : String(e)}`) }\n if (st.isDirectory()) { for (const e of readdirSync(p).sort()) walk(join(p, e)); return }\n if (exts !== undefined && !exts.includes(extname(p))) return\n files.push(p)\n }\n walk(abs)\n if (files.length === 0) throw new CliError(`corpus ${root} contains no files${exts ? ` matching ${exts.join(',')}` : ''}`)\n // Names are cwd-relative: an absolute path in a report breaks diffability.\n return files.map(f => ({ name: relative(process.cwd(), f), text: readFileSync(f, 'utf8') }))\n}\n\n/** The entry combinator to analyse. A `rules()` map or `compose()` result has no single\n * root to parse with, so `fix` needs the rule the caller parses with, named explicitly. */\nfunction asCombinator(g: unknown): Combinator<unknown> | null {\n return typeof g === 'object' && g !== null && '_def' in (g as object) ? g as Combinator<unknown> : null\n}\n\nconst leadLabel = (raw: Combinator<unknown>): string => {\n const arm = peelToLeading(raw)\n const d = arm._def as ParserDef\n switch (d.tag) {\n case 'literal': return `literal('${d.value}')`\n case 'regex': return `regex(/${d.source}/)`\n case 'keywords': return d.words.length === 1 ? `word('${d.words[0]}')` : `keywords([${d.words.length}])`\n case 'lazy': {\n const own = (arm as { _ruleName?: string })._ruleName\n if (own !== undefined) return own\n // An unnamed ref is not a useful label; resolve it once and describe what it\n // actually leads with, which is the thing the reader is looking for.\n try {\n const t = d.thunk()\n return (t as { _ruleName?: string })._ruleName ?? `\u2192 ${leadLabel(t)}`\n }\n catch { return 'ref(unbound)' }\n }\n default: return d.tag\n }\n}\n\n/**\n * Quote a value for a POSIX shell, and ONLY when it needs it.\n *\n * A suggested command is only a suggestion if it can be pasted, and a path or an export\n * name holding a space, a quote or a glob character silently becomes two arguments (or a\n * different file) without this. Unquoted is kept for the ordinary case so the common\n * rendering stays the one a reader would have typed; anything else takes single quotes,\n * with an embedded `'` closed, escaped and reopened.\n */\nfunction sh(v: string): string {\n return /^[\\w@%+=:,./-]+$/.test(v) ? v : `'${v.replaceAll(\"'\", `'\\\\''`)}'`\n}\n\nfunction writeJson(target: string | true, doc: unknown): void {\n const text = `${JSON.stringify(doc, null, 2)}\\n`\n if (target === true) { process.stdout.write(text); return }\n try { writeFileSync(target, text) }\n catch (e) { throw new CliError(`could not write ${target}: ${e instanceof Error ? e.message : String(e)}`) }\n}\n\nasync function main(argv: readonly string[]): Promise<number> {\n const args = parseArgs(argv)\n if (args.flags.has('help') || args.command === undefined || args.command === 'help') {\n process.stdout.write(`${USAGE}\\n`)\n return args.command === undefined && !args.flags.has('help') ? 2 : 0\n }\n const color = args.flags.has('color') ? args.flags.get('color') !== 'false'\n : args.flags.has('no-color') ? false\n : process.stdout.isTTY === true && process.env.NO_COLOR === undefined\n // Pinned off-TTY. A rendering whose width follows the terminal it happened to be piped\n // from is not diffable, and `docs/samples/` is exactly such a capture.\n const widthFlag = args.flags.get('width')\n const width = typeof widthFlag === 'string' && Number(widthFlag) > 0\n ? Number(widthFlag)\n : (color && typeof process.stdout.columns === 'number' && process.stdout.columns > 0\n ? process.stdout.columns\n : DEFAULT_WIDTH)\n const links = !args.flags.has('no-links')\n const json = args.flags.get('json')\n // JSON on stdout means stdout is a document; the human rendering moves to stderr so it\n // stays one. Both go through streams this process already owns.\n const human = (s: string): void => { (json === true ? process.stderr : process.stdout).write(`${s}\\n`) }\n\n const grammarPath = args.positional[0]\n if (grammarPath === undefined) throw new CliError(`\\`parseman ${args.command}\\` needs a grammar module path.\\n\\n${USAGE}`)\n const exportName = args.flags.get('export')\n const grammar = await loadGrammar(grammarPath, typeof exportName === 'string' ? exportName : undefined)\n const label = relative(process.cwd(), resolve(grammarPath)) || grammarPath\n const acceptFlag = args.flags.get('accept')\n const accept = typeof acceptFlag === 'string' ? acceptFlag.split(',').map(s => s.trim()).filter(s => s !== '') : undefined\n const corpusFlag = args.flags.get('corpus')\n const extFlag = args.flags.get('ext')\n const corpus = readCorpus(typeof corpusFlag === 'string' ? corpusFlag : undefined, typeof extFlag === 'string' ? extFlag : undefined)\n\n if (args.command === 'diagnose') {\n const d: GrammarDiagnosis = diagnoseGrammar(grammar as Parameters<typeof diagnoseGrammar>[0], accept === undefined ? {} : { accept })\n const cost = new Map<string, ChoiceCorpusCost>()\n const sets = new Map<string, readonly string[]>()\n const labels = new Map<string, readonly string[]>()\n for (const c of d.gating.choices) {\n const a = choiceArms(c)\n if (a === undefined) continue\n const fs = armFirstSets(a)\n sets.set(c.id, fs.map(x => firstSetToString(x.firstSet)))\n labels.set(c.id, a.map(x => leadLabel(x)))\n if (corpus.length > 0) cost.set(c.id, measureChoiceCost(c, corpus, fs))\n }\n // The wrench may ONLY appear where a rewrite has actually been PROVED \u2014 applied,\n // recompiled, corpus re-parsed, output identical. Without a corpus there is nothing\n // to prove it against, so nothing is marked. Claiming fixability parseman has not\n // demonstrated would destroy the one guarantee `fix` has.\n const fixable = new Set<string>()\n const root = asCombinator(grammar)\n let fixCommand: string | undefined\n if (root !== null && corpus.length > 0) {\n const probe = proposeFixes(root, { corpus, ...(accept === undefined ? {} : { accept }) })\n for (const f of probe.verified) fixable.add(f.id)\n if (fixable.size > 0) {\n // Every option that changed what was VERIFIED has to appear here, or the command\n // reproduces a different run than the one that earned the wrench: `--ext` and\n // `--corpus` decide the corpus, `--accept` decides the candidate set, `--export`\n // decides the root. Values are shell-quoted so a path or an export name holding a\n // space stays one argument when pasted.\n const opt = (name: string, v: unknown): string => typeof v === 'string' ? ` --${name} ${sh(v)}` : ''\n // A cwd-relative path can begin with `-` (`./--grammar.mjs` relativises to\n // `--grammar.mjs`), and the pasted command would then read its own grammar path as\n // an option. Quoting does not help \u2014 the shell strips the quotes and `parseArgs`\n // still sees a leading `-`. `./` makes it a path again.\n const commandPath = label.startsWith('-') ? `./${label}` : label\n fixCommand = `parseman fix ${sh(commandPath)}`\n + opt('export', exportName) + opt('corpus', corpusFlag)\n + opt('ext', extFlag) + opt('accept', acceptFlag)\n }\n }\n const limitFlag = args.flags.get('limit')\n // `Number('abc')` is NaN, and the renderer's `shown >= limit` is then always false \u2014\n // the flag would be silently ignored and every site expanded. Say so instead.\n const limit = typeof limitFlag === 'string' ? Number(limitFlag) : undefined\n if (limit !== undefined && (!Number.isInteger(limit) || limit < 0)) {\n throw new CliError(`\\`--limit\\` needs a non-negative integer; got \\`${String(limitFlag)}\\`.`)\n }\n human(renderDiagnosis(d, {\n color, width, links, name: label, cost, armFirstSets: sets, armLabels: labels,\n fixable,\n ...(fixCommand === undefined ? {} : { fixCommand }),\n // Sample names are already cwd-relative, so the hyperlink root is the cwd \u2014\n // joining the corpus dir again produced `fixtures/css/fixtures/css/decls.css`.\n ...(typeof corpusFlag === 'string' ? { corpusRoot: process.cwd() } : {}),\n ...(limit === undefined ? {} : { limit }),\n }))\n if (json !== undefined) writeJson(json, d)\n // 2, not 1: a run that walked no choice did not MEASURE this grammar, and `1` is the\n // \"measured, and it failed\" code a gate reads as a real finding. Over a fully fused\n // artifact every rule becomes a blocking finding, so `ok` is false for a reason that\n // has nothing to do with the grammar's quality. See the exit-code contract above.\n return examinedNothing(d) ? 2 : d.ok ? 0 : 1\n }\n\n if (args.command === 'fix') {\n const root = asCombinator(grammar)\n if (root === null) {\n throw new CliError(\n `${label} exported a rule map or a composed grammar, which has no single root to parse with.\\n`\n + ' `fix` verifies by re-parsing, so it needs the rule you parse with: --export <RuleName>.',\n )\n }\n const sourceFlag = args.flags.get('source')\n const sourcePath = typeof sourceFlag === 'string' ? sourceFlag : grammarPath\n let source: { path: string; text: string } | undefined\n try { source = { path: relative(process.cwd(), resolve(sourcePath)), text: readFileSync(resolve(sourcePath), 'utf8') } }\n catch (e) { throw new CliError(`could not read grammar source ${sourcePath}: ${e instanceof Error ? e.message : String(e)}`) }\n const report = proposeFixes(root, {\n corpus,\n ...(source === undefined ? {} : { source }),\n ...(accept === undefined ? {} : { accept }),\n })\n const apply = args.flags.get('apply') === true\n let applied = 0\n if (apply && report.verified.length > 0) {\n const { text, applied: n } = applyFixEdits(source.text, report.verified)\n applied = n\n if (n > 0) {\n try { writeFileSync(resolve(sourcePath), text) }\n catch (e) { throw new CliError(`could not write ${sourcePath}: ${e instanceof Error ? e.message : String(e)}`) }\n }\n }\n human(renderFixReport(report, {\n color, width, links, name: label, sourceRoot: resolve(sourcePath),\n // The COUNT, not a flag. `applyFixEdits` skips an edit whose span moved, so a\n // boolean here reported every verified change as written whenever any one was.\n applied: apply ? applied : 0,\n }))\n if (apply) human(` ${applied} edit(s) written to ${source.path}`)\n if (json !== undefined) writeJson(json, report)\n // Fails closed: a loop that could not run is not a pass.\n return report.ok ? 0 : 2\n }\n\n throw new CliError(`unknown command \\`${args.command}\\`.\\n\\n${USAGE}`)\n}\n\nmain(process.argv.slice(2))\n .then((code) => { process.exitCode = code })\n .catch((e) => {\n process.stderr.write(`${e instanceof CliError ? e.message : e instanceof Error ? `${e.name}: ${e.message}` : String(e)}\\n`)\n process.exitCode = 2\n })\n", "import type { CharRange, FirstSet, Combinator, ParserDef } from '../types.ts'\n\n/**\n * Resolve a NAMED cross-artifact rule reference (`g.Foo`) whose own thunk does not\n * resolve \u2014 the shared-shape hole, bound by name at fuse time.\n *\n * A shape module compiles `Ratio: sequence(g.Value, \u2026)` without defining `Value`, so\n * that `lazy`'s thunk throws and every first-set through it degrades to `any`. Once\n * the shape is FUSED with a dialect that defines `Value`, the hole is bound \u2014 pass a\n * resolver over the fused winner map and the first-set is the real one.\n *\n * Only NAMED refs are resolvable: an unnamed `ref()` that was never `.define()`d\n * carries no name for anyone to bind, so it stays `any`.\n */\nexport type RefResolver = (name: string) => Combinator<unknown> | undefined\n\n/** The `resolve`-supplied target for an unresolvable NAMED lazy, if any. */\nfunction resolveNamedRef(p: Combinator<unknown>, resolve: RefResolver | undefined): Combinator<unknown> | undefined {\n if (resolve === undefined) return undefined\n const name = (p as unknown as { _ruleName?: string })._ruleName\n return name === undefined ? undefined : resolve(name)\n}\n\nexport function union(a: FirstSet, b: FirstSet): FirstSet {\n if (a.kind === 'any' || b.kind === 'any') return { kind: 'any' }\n if (a.kind === 'empty') return b\n if (b.kind === 'empty') return a\n return { kind: 'ranges', ranges: mergeRanges([...a.ranges, ...b.ranges]) }\n}\n\nexport function intersects(a: FirstSet, b: FirstSet): boolean {\n if (a.kind === 'any' || b.kind === 'any') return true\n if (a.kind === 'empty' || b.kind === 'empty') return false\n for (const ra of a.ranges) {\n for (const rb of b.ranges) {\n if (ra.lo <= rb.hi && rb.lo <= ra.hi) return true\n }\n }\n return false\n}\n\nexport function fromChar(code: number): FirstSet {\n return { kind: 'ranges', ranges: [{ lo: code, hi: code }] }\n}\n\n/**\n * True when `combinator`'s first set admits the code point at `input[pos]` (or its\n * first set is `any`). The runtime counterpart of codegen's `firstSetCond` guard \u2014\n * used by the interpreter's first-set fail-fast in `optional`/`many`/`attempt`/\n * `node` to reject a doomed sub-parse before doing any setup. Returns `false` at EOF.\n */\nexport function startsFirstSet(combinator: Combinator<unknown>, input: string, pos: number): boolean {\n const fs = combinator._meta.firstSet\n if (fs.kind === 'any') return true\n if (fs.kind === 'empty') return false\n const code = input.codePointAt(pos)\n if (code === undefined) return false\n for (const r of fs.ranges) if (code >= r.lo && code <= r.hi) return true\n return false\n}\n\nexport function fromRange(lo: number, hi: number): FirstSet {\n return { kind: 'ranges', ranges: [{ lo, hi }] }\n}\n\nexport function any(): FirstSet {\n return { kind: 'any' }\n}\n\nexport function empty(): FirstSet {\n return { kind: 'empty' }\n}\n\n/**\n * Can this parser SUCCEED consuming zero characters (nullable / matches-empty)?\n * Used to compute a sound sequence first-set: a nullable leading term lets the\n * NEXT term's first chars start the whole sequence. MUST err toward `true` when\n * unsure \u2014 over-estimating nullability only widens the (over-approximated) first\n * set, which stays sound; under-estimating would drop valid start chars and make\n * first-char dispatch skip a matching arm.\n */\nexport function matchesEmpty(\n p: Combinator<unknown>,\n seen: Set<Combinator<unknown>> = new Set(),\n resolve?: RefResolver,\n): boolean {\n // Cycle guard: a mutually-nullable ref cycle (e.g. `A = oneOrMore(B); B = oneOrMore(A)`)\n // would recurse forever. Treat a re-entered node as nullable \u2014 the safe (`true`)\n // default, consistent with the err-toward-true contract below.\n if (seen.has(p)) return true\n seen.add(p)\n const me = (c: Combinator<unknown>): boolean => matchesEmpty(c, seen, resolve)\n const d = p._def as ParserDef\n switch (d.tag) {\n case 'literal': return d.value.length === 0\n case 'keywords': return false\n // The routed token itself is the selector's match, never empty; a fallback can be.\n case 'routed': return d.fallback === undefined ? false : me(d.fallback)\n case 'regex':\n // Precise: does the pattern admit a zero-length match? (`a*`, `a?`, `a|`, \u2026)\n try { const m = new RegExp(d.source).exec(''); return m != null && m[0] === '' }\n catch { return true }\n case 'many':\n case 'optional':\n case 'not':\n case 'peek': return true // zero repetitions / absent / lookahead\n // Default `sepBy` is `(item (sep item)*)?` \u2014 it MATCHES THE EMPTY STRING.\n // Any `min >= 1` requires that many ITEMS, so it is nullable only when the\n // item is. (Keying this off `min === 1` reported every `{ min: 2 }` list as\n // nullable \u2014 safe, but wrong, and it put a bogus `nullable-prefix` note on\n // the gating diagnostic for a list that can never match empty.)\n case 'sepBy': return d.min >= 1 ? me(d.parser) : true\n case 'oneOrMore': return me(d.parser)\n case 'sequence': return d.parsers.every(me)\n case 'choice':\n return d.parsers.some(me)\n case 'dispatch':\n return me(d.selector)\n case 'transform':\n case 'label':\n case 'trivia':\n case 'token':\n case 'leaf':\n case 'expect':\n case 'withCtx':\n case 'node':\n case 'grammar':\n case 'recover': return me(d.parser)\n case 'skip': return me(d.main)\n case 'lazy':\n try { return me(d.thunk()) }\n catch { const t = resolveNamedRef(p, resolve); return t ? me(t) : true }\n default: return true // scanTo / guard / unknown \u2192 assume nullable (safe)\n }\n}\n\n/**\n * A ZERO-WIDTH ASSERTION never consumes input, so it contributes NOTHING to a\n * sequence's first-set \u2014 the first consumed char comes from the following\n * non-nullable term. `not(X)` reports `firstSet: any()` (it cannot know what it\n * forbids), which would otherwise poison a sequence's first-set to `any` and kill\n * first-char dispatch of the whole arm. Skipping its contribution is SOUND: a\n * first-set used for dispatch gating must stay a correct SUPERSET of the rule's\n * true first chars, and `not(X) Y` can only start with a char in firstSet(Y) \u2014 the\n * assertion only NARROWS the language (it forbids a full match ahead), it never\n * widens the set of possible first chars beyond Y. So firstSet(Y) is a sound (and\n * tighter) superset.\n *\n * The POSITIVE lookahead `peek(X)` is zero-width too, but it is NOT in this\n * predicate: unlike `not`, it knows what it requires, so its first-set is a real\n * constraint that must be INTERSECTED into the sequence's set rather than dropped\n * (see `isPositiveLookahead` and `sequenceFirstSet`).\n */\nexport function isZeroWidthAssertion(p: Combinator<unknown>): boolean {\n return (p._def as ParserDef).tag === 'not'\n}\n\n/**\n * A POSITIVE zero-width assertion (`peek(X)`). It consumes nothing, so like\n * `not(X)` it does not contribute a first char of its own \u2014 but it does REQUIRE\n * that X match here, so `peek(X) Y` can only start with a char in\n * firstSet(X) \u2229 firstSet(Y). That intersection is what makes a leading `peek()`\n * gate its choice arm; `not(not(X))`, the only previous spelling, reports `any()`\n * and poisons the dispatch instead.\n *\n * Soundness: first-sets are SUPERSETS of the true first chars, and\n * (A \u2287 a) \u2227 (B \u2287 b) \u21D2 A \u2229 B \u2287 a \u2229 b \u2014 so intersecting stays a superset and can\n * never skip a real match. A NULLABLE body succeeds on the empty string and\n * therefore constrains nothing; `peek()` reports `any()` in that case, which the\n * intersection treats as \"no constraint\".\n */\nexport function isPositiveLookahead(p: Combinator<unknown>): boolean {\n return (p._def as ParserDef).tag === 'peek'\n}\n\n/** Intersect a lookahead constraint into an accumulator; `any` = no constraint. */\nfunction narrowBy(acc: FirstSet | null, constraint: FirstSet): FirstSet | null {\n if (constraint.kind === 'any') return acc\n if (acc === null) return constraint\n if (acc.kind === 'any') return constraint\n if (acc.kind === 'empty' || constraint.kind === 'empty') return { kind: 'empty' }\n const ranges: CharRange[] = []\n for (const a of acc.ranges) for (const b of constraint.ranges) {\n const lo = Math.max(a.lo, b.lo)\n const hi = Math.min(a.hi, b.hi)\n if (lo <= hi) ranges.push({ lo, hi })\n }\n return ranges.length === 0 ? { kind: 'empty' } : { kind: 'ranges', ranges }\n}\n\n/**\n * Apply the accumulated `peek()` constraints to a sequence's first-set. When the\n * consuming terms contributed NOTHING (the sequence is all zero-width/nullable,\n * e.g. a bare `peek(X)` arm), the assertion IS the first-set: the sequence can\n * only succeed \u2014 even zero-width \u2014 where X matches.\n */\nfunction applyAssertion(fs: FirstSet, assertion: FirstSet | null): FirstSet {\n if (assertion === null) return fs\n if (fs.kind === 'empty') return assertion\n return narrowBy(fs, assertion) ?? fs\n}\n\n/**\n * First-set of a sequence: union each term's first-set through the NULLABLE\n * PREFIX \u2014 a leading `optional(\u2026)` / `many(\u2026)` / nullable term can be skipped, so\n * the sequence can begin with a LATER term's first char. Stop at (and include)\n * the first non-nullable term. (`parsers[0].firstSet` alone under-approximates\n * and silently breaks first-char dispatch \u2014 see the InterpolatedSelector bug.)\n * A leading zero-width assertion (`not(\u2026)`) is nullable but contributes NOTHING to\n * the first-set (see `isZeroWidthAssertion`) \u2014 its `any` must not poison the union.\n */\nexport function sequenceFirstSet(parsers: readonly Combinator<unknown>[]): FirstSet {\n let fs: FirstSet = empty()\n let assertion: FirstSet | null = null\n for (const p of parsers) {\n if (isPositiveLookahead(p)) {\n // Zero-width but CONSTRAINING: intersect, keep scanning (it consumes nothing).\n assertion = narrowBy(assertion, p._meta.firstSet)\n continue\n }\n if (!isZeroWidthAssertion(p)) fs = union(fs, p._meta.firstSet)\n if (!matchesEmpty(p)) return applyAssertion(fs, assertion)\n }\n return applyAssertion(fs, assertion)\n}\n\n/**\n * Deep first-set that RESOLVES `lazy`/`ref` combinators to their targets. The\n * combinators bake `_meta.firstSet` at CONSTRUCTION, when a `ref()` still reads\n * `any()` (define() never updates it) \u2014 so a `choice`/`sequence` built over refs\n * caches a spuriously-`any` first-set and loses first-char dispatch. Recomputing\n * here, following refs, recovers the real set. Over-approximates on cycles /\n * unknown constructs (returns `any`) \u2014 always sound: a wider set only means \"try\n * this arm for more first chars\", never skips a real match.\n *\n * SOUND ONLY where refs are FINAL (monolithic compile). Under compose OVERRIDE a\n * referenced rule can be replaced with a WIDER first-set, so a baked deep set\n * would wrongly skip valid input \u2014 the compose path defers dispatch to fuse time.\n *\n * `resolve` binds NAMED cross-artifact holes (`g.Foo`) against a fused winner map \u2014\n * see `RefResolver`. Diagnostic-only today: it is what lets the gating analysis ask\n * the question at the site where the hole actually HAS an answer.\n */\nexport function firstSetOf(\n p: Combinator<unknown>,\n seen: Set<Combinator<unknown>> = new Set(),\n resolve?: RefResolver,\n): FirstSet {\n if (seen.has(p)) return any() // cycle \u2192 any (safe over-approximation)\n seen.add(p)\n const fs = (c: Combinator<unknown>): FirstSet => firstSetOf(c, seen, resolve)\n const empties = (c: Combinator<unknown>): boolean => matchesEmpty(c, new Set(), resolve)\n const d = p._def as ParserDef\n switch (d.tag) {\n case 'literal':\n case 'regex':\n case 'keywords': return p._meta.firstSet // terminals: no refs, cached set is exact\n case 'dispatch': return fs(d.selector)\n case 'lazy':\n try { return fs(d.thunk()) }\n catch { const t = resolveNamedRef(p, resolve); return t ? fs(t) : any() }\n case 'choice': {\n let out: FirstSet = empty()\n for (const arm of d.parsers) out = union(out, fs(arm))\n return out\n }\n case 'sequence': {\n // Union through the nullable prefix (a leading nullable term lets a later\n // term's first chars start the sequence) \u2014 ref-resolving `sequenceFirstSet`.\n // A leading zero-width assertion (`not`) contributes nothing (its `any` would\n // poison the union) but is still nullable, so keep scanning past it. A\n // positive `peek()` is zero-width AND constraining \u2192 intersect.\n let out: FirstSet = empty()\n let assertion: FirstSet | null = null\n for (const term of d.parsers) {\n if (isPositiveLookahead(term)) { assertion = narrowBy(assertion, fs(term)); continue }\n if (!isZeroWidthAssertion(term)) out = union(out, fs(term))\n if (!empties(term)) return applyAssertion(out, assertion)\n }\n return applyAssertion(out, assertion)\n }\n case 'peek': {\n // Deep-resolve the body: a `ref()` reads `any()` at CONSTRUCTION, so the\n // shallow `_meta.firstSet` baked into the assertion would lose the gate.\n const inner = d.parser\n return empties(inner) ? any() : fs(inner)\n }\n case 'oneOrMore':\n case 'many':\n case 'optional':\n case 'transform':\n case 'label':\n case 'trivia':\n case 'token':\n case 'leaf':\n case 'node':\n case 'grammar':\n case 'expect': return fs(d.parser)\n case 'sepBy': return fs(d.parser) // both min 0 and min 1 start with the item\n case 'skip': return fs(d.main)\n default: return p._meta.firstSet // not / scanTo / guard / withCtx / recover / unknown\n }\n}\n\nfunction mergeRanges(ranges: CharRange[]): CharRange[] {\n if (ranges.length === 0) return []\n const sorted = [...ranges].sort((a, b) => a.lo - b.lo)\n // Always copy \u2014 never alias input objects\n const out: CharRange[] = [{ lo: sorted[0]!.lo, hi: sorted[0]!.hi }]\n for (let i = 1; i < sorted.length; i++) {\n const top = out[out.length - 1]!\n const cur = sorted[i]!\n if (cur.lo <= top.hi + 1) {\n if (cur.hi > top.hi) top.hi = cur.hi\n } else {\n out.push({ lo: cur.lo, hi: cur.hi })\n }\n }\n return out\n}\n", "/**\n * Static first-char gating diagnostic.\n *\n * Parseman is scannerless PEG: a `choice` is CORRECT regardless of whether it\n * first-char-gates. When a hot choice fails to gate, every non-matching input\n * position speculatively ENTERS a doomed arm (ctx save/restore + child array +\n * recognizer + rollback) instead of being skipped by a cheap first-char test \u2014\n * and nothing tells the author, because the grammar still passes every test. The\n * only symptom is a CPU profile. This module surfaces, at build time, exactly what\n * the compiler already knows: which choices gate, and for those that don't, which\n * arm poisons dispatch and why.\n *\n * `analyzeGating()` is the pure programmatic surface, and `diagnoseGrammar()`\n * (`src/analysis/diagnose.ts`) is the entry point most callers want. `compile()` does\n * NOT run either: a diagnostic is a deliberate act, not a side effect of producing an\n * artifact. Accept a deliberately-ungated choice by listing its `id` in the gating\n * snapshot allowlist (`analyzeGating(entry, { accept })` / `diagnoseGrammar(g, {\n * accept })`) \u2014 the single suppression mechanism.\n *\n * WHERE the question is asked matters as much as the answer. A SHARED SHAPE \u2014 a\n * `rules()` map referencing a rule it doesn't define (`g.Value`) \u2014 has no verdict of\n * its own: the hole makes every first-set through it `any`, but that configuration is\n * never executed and its author cannot fix it. Such a choice is `deferred` here, and\n * re-asked with `resolveRef` at the site that BINDS the name \u2014 `analyzeGrammarGating`\n * on the fused artifact, which really runs and whose author really can fix it.\n */\nimport type { Combinator, FirstSet, ParserDef } from '../types.ts'\nimport { firstSetOf, matchesEmpty, type RefResolver } from '../combinators/first-set.ts'\n\n/** Why an arm's (deep) first-set is `any` / over-broad \u2014 the poison source. */\nexport type FirstSetCause =\n | 'leading-not' // a leading zero-width not(...) (its first-set is `any`)\n | 'nullable-prefix' // a leading optional/many skips to a broad following term\n | 'cross-artifact-ref' // a g.Foo ref resolves to `any` (unresolved across a boundary)\n | 'broad-recognizer' // a scanTo / any-first-set regex / guard leads the arm\n | 'opaque-wrapper' // guard/withCtx/recover contributes `any`\n | 'ref-cycle' // a mutually-recursive ref cycle resolved to `any`\n\n/** An arm whose deep first-set is `any` / over-broad. */\nexport type AnyArm = {\n index: number\n cause: FirstSetCause\n /** Human-readable trail to the poison, e.g. \"via ref g.anyValue \u2192 broad recognizer (regex)\". */\n detail: string\n /**\n * True when only the CONSTRUCTION-time (shallow) first-set was `any` but the\n * deep, ref-resolving first-set is finite \u2014 the monolithic compile recovers a\n * real per-arm guard, so this is NOT a genuine cliff. Never present on a\n * genuinely-ungated finding.\n */\n shallowAnyOnly: boolean\n /**\n * True when the poison is a NAMED cross-artifact hole this artifact cannot resolve\n * (`g.Value` in a shared shape). The author of THIS artifact cannot act on it \u2014 the\n * arm's real first-set only exists once a consumer binds the name \u2014 so a choice\n * whose every `any` arm is one of these is `deferred`, not `ungated`.\n *\n * An UNNAMED unresolved `ref()` is NOT this: nobody can bind it by name, so it is a\n * genuine local finding and stays reportable here.\n */\n unresolvedExternal: boolean\n /** Concrete fix, naming a real primitive. */\n suggestion: string\n}\n\n/** Two arms whose finite first-sets intersect \u2014 a shared prefix. */\nexport type Overlap = {\n a: number\n b: number\n on: FirstSet\n suggestion: string\n}\n\n/** An API-misuse pattern detected in a choice's arms (independent of gating). */\nexport type AntiPattern = {\n kind: 'double-not' | 'leading-not' | 'keyword-regex'\n rule: string\n armIndex: number\n message: string\n}\n\nexport type ChoiceStrategyTag = 'firstMatch' | 'greedyClassify' | 'literalsLongestFirst' | 'sharedPrefix'\n\nexport type ChoiceGating = {\n /**\n * Stable per-choice identity for the accepted-snapshot allowlist. The enclosing\n * rule name when that rule holds exactly one choice, else `rule#N` (0-based\n * occurrence order within the rule). This is the key you list in the snapshot to\n * ACCEPT a known ungated choice.\n */\n id: string\n /** Nearest enclosing rule name (from `_ruleName`), or a synthetic path label. */\n rule: string\n strategy: ChoiceStrategyTag\n /**\n * `yes` \u2014 emits O(1) first-char dispatch (a switch/if jump table).\n * `recoverable` \u2014 not O(1) dispatch, but every arm still first-char-guards via\n * the deep, ref-resolving first-set (monolithic compile) / fuse-time resolution\n * (compose). NOT a cliff; never warned.\n * `no` \u2014 genuinely ungated: a broad/any arm or a finite overlap forces ordered\n * speculative entry with no per-arm first-char skip.\n */\n gates: 'yes' | 'recoverable' | 'no'\n /** True when this ungated choice's `id` is in the accepted-snapshot allowlist. */\n accepted: boolean\n /**\n * `gates: 'no'` was decided by cross-artifact HOLES ONLY \u2014 every `any` arm is an\n * unresolved NAMED `g.Foo` ref and no two finite arms overlap. The verdict is not\n * this artifact's to make: the shape module can't fix it (the hole has no body\n * here) and the configuration it describes never runs. The answer belongs to the\n * FUSED artifact, where the name is bound \u2014 see `analyzeGrammarGating`.\n *\n * Deferred choices are excluded from `ungated`: they neither warn nor fail the\n * `'error'` gate at this site.\n */\n deferred: boolean\n combinedFirstSet: { shallow: FirstSet; deep: FirstSet }\n anyArms: AnyArm[]\n overlaps: Overlap[]\n}\n\n/**\n * The arms a `ChoiceGating` describes, in arm order \u2014 or `undefined` when the report did\n * not come from a live walk (a deserialized snapshot). Carried non-enumerably, so it\n * never reaches the JSON a CI snapshot diffs.\n */\nexport const choiceArms = (c: ChoiceGating): readonly Combinator<unknown>[] | undefined =>\n (c as { arms?: readonly Combinator<unknown>[] }).arms\n\n/** Options for `analyzeGating` \u2014 the accepted-snapshot allowlist. */\nexport type AnalyzeGatingOptions = {\n /**\n * Choice `id`s that are accepted as intentionally ungated. An ungated choice\n * whose id is here is moved to `accepted` (silent, does not fail the CI gate); one\n * whose id is NOT here stays in `ungated` (warned + fails the gate). This is the\n * SINGLE per-choice suppression mechanism.\n */\n accept?: Iterable<string>\n /**\n * Name to attribute an UNNAMED entry to, instead of the synthetic `<entry>`.\n * The macro plugin passes the binding's own variable name, so a warning on a\n * top-level combinator const reads `choice @ directMixinReferenceAhead`\n * (actionable, and a discriminating `accept` key) rather than `choice @\n * <entry>` repeated once per const. Ignored when the entry already carries a\n * `_ruleName`.\n */\n entryName?: string\n /**\n * Bind NAMED cross-artifact holes (`g.Foo`) by name \u2014 supply the FUSED winner map's\n * lookup. With it, an arm led by a shared shape's hole reports the first-set it\n * really has once bound, so `deferred` collapses to a real `yes`/`no` verdict.\n * Without it (the authoring site) such a choice stays `deferred`.\n */\n resolveRef?: RefResolver\n}\n\n/**\n * A rule the walk could NOT introspect. Its choices were never examined, so no\n * verdict about it \u2014 clean or otherwise \u2014 is available.\n *\n * This exists because the alternative is silence. A `compose()` result is a map of\n * FUSED rule functions with no `_def` combinator graph; walking one used to throw a\n * bare `TypeError: Cannot read properties of undefined (reading 'tag')`, and the\n * default-on diagnostic swallowed that throw and returned `undefined` \u2014 a failed\n * analysis and a clean grammar were indistinguishable. Every unanalysable input is\n * now counted and named here, and `formatGatingWarnings` always reports it.\n */\nexport type Unanalysable = {\n /** The rule name (or seed name) whose walk stopped. */\n rule: string\n /** Why it could not be walked, in terms the caller can act on. */\n reason: string\n kind: 'fused-rule' | 'opaque-artifact' | 'not-a-combinator'\n}\n\nexport type GatingReport = {\n totalChoices: number\n gated: number\n recoverable: number\n /**\n * Rules the walk could not introspect (see `Unanalysable`). NON-EMPTY MEANS THE\n * REPORT IS PARTIAL: `totalChoices === 0` with a non-empty `unanalysable` is a\n * blind walk, not a clean grammar. Callers that treat an empty `ungated` as a pass\n * MUST also assert this is empty.\n */\n unanalysable: Unanalysable[]\n /** Genuinely-ungated choices NOT in the accepted allowlist \u2014 warned + gate-failing. */\n ungated: ChoiceGating[]\n /** Ungated choices whose id was in the accepted allowlist \u2014 silent, accepted with intent. */\n accepted: ChoiceGating[]\n /**\n * Choices whose verdict is NOT this artifact's to make \u2014 every `any` arm is an\n * unresolved cross-artifact hole (see `ChoiceGating.deferred`). Silent here; the\n * fused artifact re-asks the question with the hole bound.\n */\n deferred: ChoiceGating[]\n /** Accepted ids that matched no ungated choice \u2014 stale snapshot entries to prune. */\n acceptedUnused: string[]\n /** Every choice, for full inspection / CI snapshots. */\n choices: ChoiceGating[]\n antiPatterns: AntiPattern[]\n}\n\n// \u2500\u2500 first-set helpers (local, to avoid importing codegen and creating a cycle) \u2500\u2500\n\nconst isAny = (fs: FirstSet): boolean => fs.kind === 'any'\n\nfunction intersects(a: FirstSet, b: FirstSet): boolean {\n if (a.kind === 'any' || b.kind === 'any') return true\n if (a.kind === 'empty' || b.kind === 'empty') return false\n for (const ra of a.ranges) for (const rb of b.ranges) if (ra.lo <= rb.hi && rb.lo <= ra.hi) return true\n return false\n}\n\n/** The SHARED first characters of two sets (the actual overlap, not the union). */\nfunction intersection(a: FirstSet, b: FirstSet): FirstSet {\n if (a.kind === 'any') return b\n if (b.kind === 'any') return a\n if (a.kind === 'empty' || b.kind === 'empty') return { kind: 'empty' }\n const ranges = []\n for (const ra of a.ranges) for (const rb of b.ranges) {\n const lo = Math.max(ra.lo, rb.lo)\n const hi = Math.min(ra.hi, rb.hi)\n if (lo <= hi) ranges.push({ lo, hi })\n }\n return ranges.length === 0 ? { kind: 'empty' } : { kind: 'ranges', ranges }\n}\n\nfunction combine(sets: FirstSet[]): FirstSet {\n let acc: FirstSet = { kind: 'empty' }\n for (const s of sets) {\n if (s.kind === 'any') return { kind: 'any' }\n if (s.kind === 'empty') continue\n acc = acc.kind === 'ranges' ? { kind: 'ranges', ranges: [...acc.ranges, ...s.ranges] } : s\n }\n return acc\n}\n\nconst ch = (c: number): string => (c >= 32 && c < 127 ? `'${String.fromCharCode(c)}'` : `\\\\u${c}`)\nexport function firstSetToString(fs: FirstSet): string {\n if (fs.kind === 'any') return 'ANY'\n if (fs.kind === 'empty') return '(empty)'\n return fs.ranges.map(r => (r.lo === r.hi ? ch(r.lo) : `${ch(r.lo)}-${ch(r.hi)}`)).join(',')\n}\n\nconst ruleNameOf = (p: Combinator<unknown>): string | undefined =>\n (p as unknown as { _ruleName?: string })._ruleName\n\n// \u2500\u2500 cause attribution: walk the leading structure, stop at the first `any` \u2500\u2500\n\n/** A regex source that is really a keyword (a literal word, optionally with a\n * trailing boundary lookahead) \u2014 the case word()/keywords() should own. */\nconst KEYWORD_REGEX_RE = /^\\^?[@#.-]?[A-Za-z][\\w-]*(\\(\\?![^)]*\\))?\\$?$/\n\n/**\n * What each cause MEANS and what to do about it, in words a grammar author can act on\n * without having read parseman's source.\n *\n * These strings are the diagnostic. An earlier version of them was accurate and\n * unreadable \u2014 \"give the arm a concrete leading terminal\", \"resolves a g.Foo ref\n * first-set at fuse time\" \u2014 which is the same as having no diagnostic, because the\n * reader cannot tell what happened or what to change. Every term of art here is either\n * replaced or explained where it is used; nothing is deferred to a glossary.\n */\nconst SUGGESTIONS: Record<FirstSetCause, string> = {\n 'broad-recognizer':\n 'This arm can begin with any character, so no single-character test can rule it out. '\n + 'The parser has to enter it \u2014 set up, try, and undo \u2014 at every position it reaches, '\n + 'instead of skipping it for free.\\n'\n + 'To fix: make the arm begin with a fixed character, word or keyword. If it is meant '\n + 'to be a catch-all that matches anything, leave it and add the choice to the accept '\n + 'list at the end.',\n 'leading-not':\n 'This arm begins with a not(...) check, which matches nothing and so says nothing about '\n + 'which character the arm starts with. The parser then cannot rule the arm out and '\n + 'enters it everywhere.\\n'\n + 'To fix: put the term that actually consumes text first and keep not(...) after it as '\n + 'a trailing boundary. If you need to REQUIRE something ahead without consuming it, use '\n + 'peek(X) \u2014 it checks the same thing but still tells parseman that the arm starts with X.',\n 'nullable-prefix':\n 'This arm begins with something optional \u2014 an optional(...) or a repeat that allows zero '\n + 'items \u2014 so the arm can also start with whatever comes AFTER it, and that is broad '\n + 'enough that no character rules the arm out.\\n'\n + 'To fix: give the optional part its own arm so each arm has a definite beginning, or '\n + 'require at least one item. A plain sepBy(item, sep) also matches nothing at all; pass '\n + '{ min: 1 } when the list must not be empty.',\n 'cross-artifact-ref':\n 'This arm hands off to another rule, and that rule has the same problem \u2014 it can begin '\n + 'with any character \u2014 so the cost is inherited rather than caused here.\\n'\n + 'To fix: run this check on the rule it refers to and fix it there. One rule given a '\n + 'definite beginning fixes every choice that uses it.',\n 'opaque-wrapper':\n 'This arm begins with a wrapper that only inspects parser state (a gate/withCtx/recover) '\n + 'and consumes no text, so it says nothing about which character the arm starts with.\\n'\n + 'To fix: put a term that actually matches text in front of the wrapper.',\n 'ref-cycle':\n 'This arm refers back to itself through a cycle of rules, and parseman could not work out '\n + 'a definite first character for any of them.\\n'\n + 'To fix: make sure the base case of the recursion begins with a fixed character or '\n + 'keyword, so the cycle has somewhere definite to start.',\n}\n\n/**\n * The generic per-cause advice, sharpened by what the arm ACTUALLY leads with.\n *\n * One string per cause was quietly wrong in the common case. `broad-recognizer` covers\n * both `regex(/@media/)` \u2014 which `word()` fixes outright \u2014 and `regex(/[^()]+/)`, a\n * genuine catch-all scanner that no primitive can gate and where the keyword advice is\n * noise the reader has to discard. Telling someone \"if this is X, do Y\" when the tool\n * can already see whether it is X is exactly the gap between advice and a diagnostic.\n */\nfunction refineSuggestion(cause: FirstSetCause, arm: Combinator<unknown>): string {\n if (cause !== 'broad-recognizer') return SUGGESTIONS[cause]\n const lead = peelToLeading(arm)\n const d = lead._def as ParserDef\n if (d.tag === 'regex' && KEYWORD_REGEX_RE.test(d.source)) {\n return `This arm matches the fixed word \\`${d.source}\\` with a regular expression, and parseman `\n + 'cannot always tell from a regular expression which character it starts with.\\n'\n + \"To fix: write it as word('\u2026') or keywords([\u2026]) instead. They match exactly the same text and \"\n + 'compile to the same character scan, but they also tell parseman the first character, which is '\n + 'what lets the parser skip this arm when it cannot match.'\n }\n if (d.tag === 'scanTo') {\n return 'This arm ends in a scanTo(...) catch-all, which reads forward until it finds something and '\n + 'so can begin at any character. The parser can never rule it out. That is usually exactly what '\n + 'you want from a fallback.\\n'\n + 'To fix: usually nothing. Add this choice to the accept list at the end so the check keeps '\n + 'flagging the choices that are real problems.'\n }\n return SUGGESTIONS[cause]\n}\n\n/** The classifier's verdict for one arm: the poison, and whether it is a hole that\n * only a downstream fuse can fill (`unresolvedExternal`). */\ntype ArmCause = { cause: FirstSetCause; detail: string; unresolvedExternal?: boolean }\n\nfunction classifyBroadArm(arm: Combinator<unknown>, resolve?: RefResolver): ArmCause {\n const seen = new Set<Combinator<unknown>>()\n /** Re-label an inner verdict, carrying its `unresolvedExternal` through unchanged \u2014\n * the cause changes, but who can FIX it does not. */\n const relabel = (inner: ArmCause | null, cause: FirstSetCause, detail: string): ArmCause =>\n ({ cause, detail, ...(inner?.unresolvedExternal ? { unresolvedExternal: true } : {}) })\n const walk = (p: Combinator<unknown>): ArmCause | null => {\n if (seen.has(p)) return { cause: 'ref-cycle', detail: 'ref cycle' }\n seen.add(p)\n const d = p._def as ParserDef\n switch (d.tag) {\n case 'literal': case 'regex': case 'keywords':\n return isAny(p._meta.firstSet) ? { cause: 'broad-recognizer', detail: `broad recognizer (${d.tag})` } : null\n case 'not':\n return { cause: 'leading-not', detail: 'leading not(...) (first-set ANY)' }\n // peek() CARRIES its body's first-set, so it is only broad when the body is\n // (or the body is nullable) \u2014 walk in for the real cause.\n case 'peek':\n return walk(d.parser)\n case 'scanTo':\n return { cause: 'broad-recognizer', detail: 'scanTo (any first char)' }\n // `guard` (the `gate()` state predicate) has a genuinely-`any` first-set of\n // its own \u2014 it is the poison. `withCtx`/`recover` FORWARD their inner\n // first-set (see firstSetOf), so a broad result comes from the inner parser:\n // walk into it for a precise cause.\n case 'guard':\n return { cause: 'opaque-wrapper', detail: `opaque wrapper (${d.tag})` }\n // attempt/withCtx/recover FORWARD their inner first-set (transparent for\n // dispatch), so a broad result comes from the inner parser \u2014 walk into it.\n case 'attempt': case 'withCtx': case 'recover':\n return walk(d.parser)\n case 'lazy': {\n const name = (p as unknown as { _ruleName?: string })._ruleName\n let target: Combinator<unknown>\n try { target = (d as { thunk(): Combinator<unknown> }).thunk() }\n catch {\n // A NAMED ref the fuse resolver can bind is analyzed against its real body;\n // otherwise the hole itself is the poison \u2014 and it is only the AUTHOR's\n // problem when it is unnamed (nothing can ever bind it by name).\n const bound = name !== undefined ? resolve?.(name) : undefined\n if (bound === undefined)\n return { cause: 'cross-artifact-ref', detail: `unresolved ref${name ? ` g.${name}` : ''}`, unresolvedExternal: name !== undefined }\n target = bound\n }\n const inner = walk(target)\n if (name !== undefined) return inner ? relabel(inner, 'cross-artifact-ref', `via ref g.${name} \u2192 ${inner.detail}`) : null\n return inner\n }\n case 'optional': case 'many': {\n const inner = walk(d.parser)\n return relabel(inner, 'nullable-prefix', inner ? `nullable prefix \u2192 ${inner.detail}` : 'nullable prefix to broad term')\n }\n case 'oneOrMore': case 'transform': case 'label': case 'field':\n case 'trivia': case 'token': case 'leaf': case 'node': case 'grammar': case 'expect':\n return walk(d.parser)\n case 'skip': return walk(d.main)\n case 'sequence': {\n // Scan the nullable prefix the way sequenceFirstSet does: a `not(...)` or a\n // FINITE nullable term (optional/many/nullable regex) is skipped so a LATER\n // term's first chars can start the sequence. Stop at the first term that is\n // non-nullable (it gates \u2192 return null) or broad (it's the poison).\n let sawNullablePrefix = false\n for (const t of d.parsers) {\n if ((t._def as ParserDef).tag === 'not') { sawNullablePrefix = true; continue }\n if (isAny(firstSetOf(t, new Set(), resolve))) {\n const inner = walk(t)\n if (sawNullablePrefix)\n return relabel(inner, 'nullable-prefix', inner ? `nullable prefix \u2192 ${inner.detail}` : 'nullable prefix to broad term')\n return inner ?? { cause: 'broad-recognizer', detail: 'sequence leading term is broad' }\n }\n if (matchesEmpty(t, new Set(), resolve)) { sawNullablePrefix = true; continue } // finite but nullable \u2192 keep scanning\n return null // finite, non-nullable \u2192 this term gates the sequence\n }\n return { cause: 'broad-recognizer', detail: 'sequence of only nullable/zero-width terms' }\n }\n case 'choice': {\n for (const a of d.parsers) { const r = walk(a); if (r) return relabel(r, r.cause, `choice arm \u2192 ${r.detail}`) }\n return null\n }\n case 'dispatch':\n return walk(d.selector)\n default:\n return { cause: 'broad-recognizer', detail: `unmodeled construct (${d.tag})` }\n }\n }\n return walk(arm) ?? { cause: 'broad-recognizer', detail: 'broad (cause not localized)' }\n}\n\n// \u2500\u2500 anti-pattern detection \u2500\u2500\n\n/** Peel non-consuming wrappers to the arm's leading term (mirrors leadingTermOfArm). */\nexport function peelToLeading(arm: Combinator<unknown>): Combinator<unknown> {\n let d = arm._def as ParserDef\n let cur = arm\n for (;;) {\n if (d.tag === 'node' || d.tag === 'grammar' || d.tag === 'transform' || d.tag === 'label' || d.tag === 'attempt') {\n cur = (d as { parser: Combinator<unknown> }).parser\n d = cur._def as ParserDef\n continue\n }\n break\n }\n if (d.tag === 'sequence' && d.parsers.length >= 1) return d.parsers[0]!\n return cur\n}\n\nfunction detectAntiPatterns(rule: string, arms: readonly Combinator<unknown>[]): AntiPattern[] {\n const out: AntiPattern[] = []\n arms.forEach((arm, i) => {\n const lead = peelToLeading(arm)\n const ld = lead._def as ParserDef\n // (a) not(not(...)) \u2014 hand-rolled first-char gating that MISCOMPILES among\n // sibling arms sharing a first char.\n if (ld.tag === 'not') {\n const inner = (ld as { parser: Combinator<unknown> }).parser\n if ((inner._def as ParserDef).tag === 'not') {\n out.push({ kind: 'double-not', rule, armIndex: i,\n message: 'not(not(X)) is a hand-written way of saying \"X must come next, but do not consume it\". '\n + 'parseman does that for you, and the hand-written form is worse than nothing here: because '\n + 'not(...) reveals no first character, the arm cannot be skipped, and among sibling arms that '\n + 'share a first character it can select the wrong one.\\n'\n + 'To fix: write peek(X). It checks the same thing without consuming, and it also tells '\n + 'parseman that the arm starts with whatever X starts with.' })\n } else {\n out.push({ kind: 'leading-not', rule, armIndex: i,\n message: 'This arm begins with not(...), which matches no text and so reveals no first '\n + 'character. The parser therefore cannot skip the arm and enters it at every position.\\n'\n + 'To fix: put the term that actually consumes text first, and keep not(...) after it as a '\n + 'trailing boundary check.' })\n }\n }\n // (b) bare leading regex(/keyword/) \u2014 word()/keywords() would give an exact,\n // resolvable first-set (and lower identically).\n if (ld.tag === 'regex' && KEYWORD_REGEX_RE.test(ld.source)) {\n out.push({ kind: 'keyword-regex', rule, armIndex: i,\n message: `This arm starts with the fixed word \\`${ld.source}\\` written as a regular expression. `\n + \"Writing it as word('\u2026') or keywords([\u2026]) matches exactly the same text and compiles to the \"\n + 'same character scan, but also tells parseman the first character, which is what lets the '\n + 'parser skip the arm when it cannot match.' })\n }\n })\n return out\n}\n\n// \u2500\u2500 the walk \u2500\u2500\n\nexport function analyzeGating(entry: Combinator<unknown>, opts?: AnalyzeGatingOptions): GatingReport {\n return analyzeGatingRules([[ruleNameOf(entry) ?? opts?.entryName ?? '<entry>', entry]], opts)\n}\n\n/**\n * Multi-root variant: analyze a WHOLE `rules()` map in one walk, so every choice\n * is attributed to the rule that owns it.\n *\n * The macro build compiles a grammar through `compileRuleMap`/`compileLinkable`,\n * never through the single-entry `compile()`. Analyzing one entry at a time (or\n * not at all) is what produced unnamed `choice @ <entry>` warnings and ZERO\n * anti-patterns for grammars that in fact have dozens: an unnamed warning in a\n * multi-thousand-line grammar is unactionable. Seeding the walk with EVERY named\n * root is what recovers the rule names \u2014 and, because the walk is shared, each\n * choice is still analyzed exactly once however many rules reach it.\n */\nexport function analyzeGatingRules(\n ruleMap: ReadonlyArray<readonly [string, Combinator<unknown>]>,\n opts?: AnalyzeGatingOptions,\n): GatingReport {\n const raw: { g: Omit<ChoiceGating, 'id' | 'accepted'>; rule: string; arms: readonly Combinator<unknown>[] }[] = []\n const antiPatterns: AntiPattern[] = []\n const unanalysable: Unanalysable[] = []\n const seenUnanalysable = new Set<string>()\n const visited = new Set<Combinator<unknown>>()\n\n const noteUnanalysable = (u: Unanalysable): void => {\n const key = `${u.rule}\\u0000${u.kind}`\n if (seenUnanalysable.has(key)) return\n seenUnanalysable.add(key)\n unanalysable.push(u)\n }\n\n const visit = (p: Combinator<unknown>, enclosingRule: string): void => {\n if (visited.has(p)) return\n visited.add(p)\n // A grammar VALUE that carries no combinator descriptor cannot be walked. The\n // dominant case is a `compose()` result: fusion lowers every rule to an executable\n // function, discarding the combinator graph. Record it \u2014 never throw, and never\n // let the caller mistake the resulting empty walk for a clean grammar.\n const def = (p as { _def?: unknown } | null | undefined)?._def\n if (def === null || typeof def !== 'object') {\n noteUnanalysable(\n typeof p === 'function'\n ? {\n rule: enclosingRule, kind: 'fused-rule',\n reason: 'fused rule function \u2014 a compose()/fuse result has no combinator graph. '\n + 'Analyze the composed grammar itself (analyzeGrammarGating) so the carried IR is re-lowered first.',\n }\n : {\n rule: enclosingRule, kind: 'not-a-combinator',\n reason: `value of type ${p === null ? 'null' : typeof p} is not a combinator and carries no _def descriptor.`,\n },\n )\n return\n }\n const d = def as ParserDef\n const rule = ruleNameOf(p) ?? enclosingRule\n if (d.tag === 'choice') {\n raw.push({ g: analyzeChoice(p, d, rule, opts?.resolveRef), rule, arms: d.parsers })\n antiPatterns.push(...detectAntiPatterns(rule, d.parsers))\n }\n // Structural recursion (+ through refs once).\n const rec = d as Record<string, unknown>\n const kids: Combinator<unknown>[] = []\n if (Array.isArray(rec.parsers)) kids.push(...(rec.parsers as Combinator<unknown>[]))\n for (const k of ['parser', 'main', 'skipped', 'separator', 'sentinel'] as const)\n if (rec[k]) kids.push(rec[k] as Combinator<unknown>)\n if (d.tag === 'dispatch') {\n kids.push(d.selector)\n for (const c of d.cases) kids.push(c.parser)\n if (d.matchers) for (const c of d.matchers) kids.push(c.parser)\n if (d.otherwise !== undefined) kids.push(d.otherwise)\n }\n if (Array.isArray(rec.skip)) kids.push(...(rec.skip as Combinator<unknown>[]))\n // Deliberately NOT `resolveRef`-aware: the WALK must visit the same choices with\n // and without a resolver, so a choice's `id` (per-rule occurrence order) is the\n // same in both passes \u2014 that identity is what lets the fuse-time diagnostic report\n // exactly the choices its authoring site deferred. Nothing is lost: every rule of\n // the fused map is its own seed below, so a rule reached only through a hole is\n // still analyzed, under its own name.\n if (d.tag === 'lazy') { try { kids.push((d as { thunk(): Combinator<unknown> }).thunk()) } catch { /* unresolved */ } }\n for (const k of kids) visit(k, rule)\n }\n\n // Seed with the map's OWN names first: a rule root is usually a `ref()` that\n // already carries `_ruleName`, but a plain (untagged) root would otherwise\n // inherit whichever rule reached it first.\n for (const [name, root] of ruleMap) visit(root, ruleNameOf(root) ?? name)\n\n // Assign a stable per-choice id: bare rule name when unique in the rule, else\n // `rule#N` (occurrence order). This is the key the accepted allowlist uses.\n const perRule = new Map<string, number>()\n for (const r of raw) perRule.set(r.rule, (perRule.get(r.rule) ?? 0) + 1)\n const seenInRule = new Map<string, number>()\n const accept = new Set(opts?.accept ?? [])\n const usedAccept = new Set<string>()\n const choices: ChoiceGating[] = raw.map(({ g, rule, arms }) => {\n const n = seenInRule.get(rule) ?? 0\n seenInRule.set(rule, n + 1)\n const id = (perRule.get(rule) ?? 1) === 1 ? rule : `${rule}#${n}`\n const isAccepted = g.gates === 'no' && accept.has(id)\n if (isAccepted) usedAccept.add(id)\n const out: ChoiceGating = { ...g, id, accepted: isAccepted }\n // The arms themselves, carried for a RENDERER that wants to show the ordering with a\n // dispatch key beside each arm. NON-ENUMERABLE deliberately: `GatingReport` is\n // JSON-serialized into a committed, byte-identity-tested snapshot, and combinators are\n // cyclic graphs full of closures. Attaching them here rather than letting a caller\n // re-walk the grammar is what keeps a second walk from drifting out of step with this\n // one's `id` assignment \u2014 which it did, silently, and mislabelled every arm.\n Object.defineProperty(out, 'arms', { value: arms, enumerable: false, writable: false })\n return out\n })\n\n const gated = choices.filter(c => c.gates === 'yes').length\n const recoverable = choices.filter(c => c.gates === 'recoverable').length\n const ungated = choices.filter(c => c.gates === 'no' && !c.accepted && !c.deferred)\n const accepted = choices.filter(c => c.gates === 'no' && c.accepted)\n const deferred = choices.filter(c => c.gates === 'no' && !c.accepted && c.deferred)\n const acceptedUnused = [...accept].filter(id => !usedAccept.has(id))\n return {\n totalChoices: choices.length, gated, recoverable, unanalysable,\n ungated, accepted, deferred, acceptedUnused, choices, antiPatterns,\n }\n}\n\n// analyzeChoice returns a ChoiceGating WITHOUT id/accepted \u2014 analyzeGating assigns\n// those after the full walk (id needs per-rule counts; accepted needs the allowlist).\nfunction analyzeChoice(\n p: Combinator<unknown>,\n d: Extract<ParserDef, { tag: 'choice' }>,\n rule: string,\n resolve?: RefResolver,\n): Omit<ChoiceGating, 'id' | 'accepted'> {\n const arms = d.parsers\n const shallow = arms.map(a => a._meta.firstSet)\n const deep = arms.map(a => firstSetOf(a, new Set(), resolve))\n\n const anyArms: AnyArm[] = deep\n .map((fs, index) => ({ fs, index }))\n .filter(x => isAny(x.fs))\n .map(({ index }) => {\n const { cause, detail, unresolvedExternal } = classifyBroadArm(arms[index]!, resolve)\n return {\n index, cause, detail, shallowAnyOnly: false,\n unresolvedExternal: unresolvedExternal === true,\n suggestion: refineSuggestion(cause, arms[index]!),\n }\n })\n\n const overlaps: Overlap[] = []\n for (let i = 0; i < deep.length; i++)\n for (let j = i + 1; j < deep.length; j++)\n if (!isAny(deep[i]!) && !isAny(deep[j]!) && intersects(deep[i]!, deep[j]!))\n overlaps.push({ a: i, b: j, on: intersection(deep[i]!, deep[j]!),\n suggestion: 'Two arms of this choice can begin with the same character, so the parser cannot '\n + 'tell from that character which one to try. It tries them in order and undoes the ones that '\n + 'do not match.\\n'\n + 'To fix: pull the shared beginning out in front of the choice so it is matched once \u2014 '\n + 'sequence(shared, choice(rest\u2026)) \u2014 instead of repeating it inside each arm. parseman '\n + 'recognises that shape automatically and turns it back into a single test.' })\n\n // Classification. `disjoint` (from construction, shallow) \u21D2 O(1) dispatch.\n // Otherwise, if the DEEP (ref-resolved) arms are all-finite and pairwise\n // disjoint, monolithic compile still first-char-guards each arm (codegen emits\n // firstSetOf() per-arm guards) \u2014 'recoverable', not a cliff. Else 'no'.\n let gates: ChoiceGating['gates']\n if (d.disjoint) gates = 'yes'\n else if (anyArms.length === 0 && overlaps.length === 0) gates = 'recoverable'\n else gates = 'no'\n\n // Ungated SOLELY because of holes this artifact can't fill: nothing here is\n // actionable and the configuration described never runs. A finite-arm overlap is a\n // real local finding, so it keeps the choice reportable even alongside a hole.\n const deferred = gates === 'no' && overlaps.length === 0 && anyArms.length > 0 && anyArms.every(a => a.unresolvedExternal)\n\n return {\n rule,\n strategy: ((d.strategy as { tag: ChoiceStrategyTag } | undefined)?.tag) ?? 'firstMatch',\n gates,\n deferred,\n combinedFirstSet: { shallow: combine(shallow), deep: combine(deep) },\n anyArms, overlaps,\n }\n}\n\n// \u2500\u2500 warning formatting \u2500\u2500\n\n/**\n * Format the genuinely-ungated findings + anti-patterns as ready-to-print lines.\n * Precise by design: only 'no'-gated choices NOT in the accepted allowlist, plus\n * the anti-pattern lints. Recoverable / gated / accepted / DEFERRED choices produce\n * nothing (a deferred choice's verdict belongs to the fusing artifact, not here).\n */\nexport function formatGatingWarnings(report: GatingReport): string[] {\n const lines: string[] = []\n // FIRST, and unconditionally: a partial walk must never present as a clean one.\n // These lines are emitted even when there are no findings at all, because \"no\n // findings\" over an unanalysable grammar is precisely the failure this reports.\n if (report.unanalysable.length > 0) {\n lines.push(\n `parseman gating: ${report.unanalysable.length} rule(s) UNANALYSABLE \u2014 this report is PARTIAL `\n + `(${report.totalChoices} choice(s) examined). An empty finding list below does NOT mean the grammar is clean.`,\n )\n for (const u of report.unanalysable)\n lines.push(` \u00B7 ${u.rule} [${u.kind}]: ${u.reason}`)\n }\n for (const c of report.ungated) {\n lines.push(`parseman gating: choice @ ${c.id} is UNGATED [${c.strategy}] \u2014 no first-char dispatch; every position speculatively enters doomed arms.`)\n for (const a of c.anyArms)\n lines.push(` \u00B7 arm[${a.index}] first-set ANY (${a.cause}): ${a.detail}\\n fix: ${a.suggestion}`)\n for (const o of c.overlaps)\n lines.push(` \u00B7 arm[${o.a}] \u2229 arm[${o.b}] overlap on ${firstSetToString(o.on)}\\n fix: ${o.suggestion}`)\n lines.push(` (intentional? accept it in the gating snapshot: { accept: ['${c.id}'] }.)`)\n }\n for (const ap of report.antiPatterns)\n lines.push(`parseman anti-pattern [${ap.kind}] @ ${ap.rule} arm[${ap.armIndex}]: ${ap.message}`)\n return lines\n}\n", "import type { Span } from './types.ts'\n\n/**\n * Precomputed index of newline positions for O(log n) offset->line/col lookup.\n * lineStarts[i] is the byte offset of the first character on line i+1.\n */\nexport type LineIndex = { lineStarts: number[] }\ntype LineTrackingContext = {\n trackLines?: boolean | undefined\n _lineIndex?: LineIndex | undefined\n _lineStarts?: number[] | undefined\n _lineScannedTo?: number | undefined\n}\n\nexport function createLineIndex(): LineIndex {\n return { lineStarts: [0] }\n}\n\nexport function buildLineIndex(input: string): LineIndex {\n const lineStarts = [0]\n for (let i = 0; i < input.length; i++) {\n if (input.charCodeAt(i) === 10) lineStarts.push(i + 1)\n }\n return { lineStarts }\n}\n\n/**\n * Record newline offsets for a matched range. Intended for optional parsers that\n * collect line starts while they consume terminals. The collector is deliberately\n * append-only: speculative parses never roll it back. Normalize once at the\n * driver boundary before doing offset->line/column lookup.\n */\nexport function recordLineRange(index: LineIndex, input: string, start: number, end: number): void {\n const lineStarts = index.lineStarts\n for (let i = start; i < end; i++) {\n if (input.charCodeAt(i) === 10) lineStarts.push(i + 1)\n }\n}\n\n/**\n * Records newlines from the context high-water mark through `end`. The start\n * argument is only a caller hint: append-only tracking uses `_lineScannedTo` so\n * overlapping calls can backfill gaps without double-scanning committed ranges.\n */\nexport function recordLineRangeFromContext(\n ctx: LineTrackingContext,\n input: string,\n _startHint: number,\n end: number,\n): void {\n if (!ctx.trackLines) return\n const from = ctx._lineScannedTo ?? 0\n if (end <= from) return\n const index = ctx._lineIndex ?? (ctx._lineStarts ? { lineStarts: ctx._lineStarts } : undefined)\n if (!index) return\n recordLineRange(index, input, from, end)\n ctx._lineScannedTo = end\n}\n\nexport function normalizeLineIndex(index: LineIndex): LineIndex {\n const starts = index.lineStarts\n starts.sort((a, b) => a - b)\n let write = 0\n for (let read = 0; read < starts.length; read++) {\n const value = starts[read]!\n if (write === 0 || starts[write - 1] !== value) starts[write++] = value\n }\n starts.length = write\n if (starts.length === 0 || starts[0] !== 0) starts.unshift(0)\n return index\n}\n\nexport function offsetToLineCol(\n index: LineIndex,\n offset: number\n): { line: number; col: number } {\n const { lineStarts } = index\n let lo = 0\n let hi = lineStarts.length - 1\n while (lo < hi) {\n const mid = (lo + hi + 1) >> 1\n if (lineStarts[mid]! <= offset) lo = mid\n else hi = mid - 1\n }\n return { line: lo + 1, col: offset - lineStarts[lo]! + 1 }\n}\n\n/** Fills startLine/startColumn/endLine/endColumn on a span in-place. */\nexport function annotateSpan(span: Span, index: LineIndex): Span {\n const s = offsetToLineCol(index, span.start)\n const e = offsetToLineCol(index, span.end)\n return {\n ...span,\n startLine: s.line,\n startColumn: s.col,\n endLine: e.line,\n endColumn: e.col,\n }\n}\n\nexport function annotateSpanFromLineContext(\n span: Span,\n ctx: LineTrackingContext,\n): Span {\n if (!ctx.trackLines) return span\n const index = ctx._lineIndex ?? (ctx._lineStarts ? { lineStarts: ctx._lineStarts } : undefined)\n return index ? annotateSpan(span, index) : span\n}\n\nfunction isSpan(value: unknown): value is Span {\n return !!value\n && typeof value === 'object'\n && typeof (value as { start?: unknown }).start === 'number'\n && typeof (value as { end?: unknown }).end === 'number'\n}\n\n/** Annotate every span-shaped object reachable from a parse result value. */\nexport function annotateTreeSpans<T>(value: T, index: LineIndex, seen: WeakSet<object> = new WeakSet()): T {\n if (!value || typeof value !== 'object') return value\n if (seen.has(value)) return value\n seen.add(value)\n\n const obj = value as Record<string, unknown>\n if (isSpan(obj.span)) obj.span = annotateSpan(obj.span, index)\n\n for (const key of Object.keys(obj)) {\n const child = obj[key]\n if (child && typeof child === 'object') annotateTreeSpans(child, index, seen)\n }\n return value\n}\n", "import type { ParseContext, Span } from '../types.ts'\nimport { annotateSpanFromLineContext } from '../line-index.ts'\n\n/** Lazy per-node capture state \u2014 arrays materialized on first push. */\nexport type CstCaptureBuf = {\n single?: unknown | undefined\n ch?: unknown[] | undefined\n rawSingle?: unknown | undefined\n raw?: unknown[] | undefined\n tl?: number[] | undefined\n}\n\nconst EMPTY: unknown[] = []\nconst EMPTY_TL: number[] = []\n\nexport function cstCaptureActive(ctx: ParseContext): boolean {\n return ctx._cstBuf !== undefined || ctx._cstLeaves !== undefined\n}\n\nexport type CstNodeCaptureSaved = {\n ch: ParseContext['_cstChildren']\n lv: ParseContext['_cstLeaves']\n raw: ParseContext['_cstRawChildren']\n tl: ParseContext['_cstTriviaLog']\n cap: boolean | undefined\n buf: CstCaptureBuf | undefined\n}\n\nexport function beginCstNodeCapture(ctx: ParseContext): CstNodeCaptureSaved {\n const saved: CstNodeCaptureSaved = {\n ch: ctx._cstChildren,\n lv: ctx._cstLeaves,\n raw: ctx._cstRawChildren,\n tl: ctx._cstTriviaLog,\n cap: ctx.captureTrivia,\n buf: ctx._cstBuf,\n }\n ctx._cstBuf = {}\n ctx._cstChildren = undefined\n ctx._cstLeaves = undefined\n ctx._cstRawChildren = undefined\n ctx._cstTriviaLog = undefined\n ctx.captureTrivia = true\n return saved\n}\n\nexport function finishCstBuf(buf: CstCaptureBuf | undefined): {\n children: unknown[]\n rawChildren: unknown[]\n triviaLog: number[]\n} {\n if (!buf) return { children: EMPTY, rawChildren: EMPTY, triviaLog: EMPTY_TL }\n const children = buf.ch ?? (buf.single !== undefined ? [buf.single] : EMPTY)\n const rawChildren = buf.raw ?? (buf.rawSingle !== undefined ? [buf.rawSingle] : EMPTY)\n const triviaLog = buf.tl ?? EMPTY_TL\n return { children, rawChildren, triviaLog }\n}\n\nexport function endCstNodeCapture(\n ctx: ParseContext,\n saved: CstNodeCaptureSaved,\n): { children: unknown[]; rawChildren: unknown[]; triviaLog: number[] } {\n const materialized = finishCstBuf(ctx._cstBuf)\n ctx._cstBuf = saved.buf\n ctx._cstChildren = saved.ch\n ctx._cstLeaves = saved.lv\n ctx._cstRawChildren = saved.raw\n ctx._cstTriviaLog = saved.tl\n ctx.captureTrivia = saved.cap\n return materialized\n}\n\nexport function pushCstLeaf(ctx: ParseContext, leaf: unknown): void {\n if (!ctx.trackLines) {\n pushCstChild(ctx, leaf, leaf)\n return\n }\n const annotated = leaf && typeof leaf === 'object' && (leaf as { span?: unknown }).span\n ? { ...(leaf as Record<string, unknown>), span: annotateSpanFromLineContext((leaf as { span: Span }).span, ctx) }\n : leaf\n pushCstChild(ctx, annotated, annotated)\n}\n\n/** Record a built sub-node into the active collector (children vs rawChildren may differ). */\nexport function pushCstChild(ctx: ParseContext, built: unknown, rawEntry: unknown): void {\n const b = ctx._cstBuf\n if (b) {\n if (b.ch) b.ch.push(built)\n else if (b.single !== undefined) { b.ch = [b.single, built]; b.single = undefined }\n else b.single = built\n\n if (b.raw) b.raw.push(rawEntry)\n else if (b.rawSingle !== undefined) { b.raw = [b.rawSingle, rawEntry]; b.rawSingle = undefined }\n else b.rawSingle = rawEntry\n return\n }\n if (ctx._cstChildren) ctx._cstChildren.push(built)\n else if (ctx._cstLeaves) ctx._cstLeaves.push(built)\n if (ctx._cstRawChildren) ctx._cstRawChildren.push(rawEntry)\n}\n\nexport function cstRawLen(ctx: ParseContext): number {\n const b = ctx._cstBuf\n if (b) {\n if (b.raw) return b.raw.length\n return b.rawSingle !== undefined ? 1 : 0\n }\n return ctx._cstRawChildren?.length ?? 0\n}\n\nexport function cstLeavesLen(ctx: ParseContext): number {\n const b = ctx._cstBuf\n if (b) {\n if (b.ch) return b.ch.length\n return b.single !== undefined ? 1 : 0\n }\n return ctx._cstLeaves?.length ?? 0\n}\n\nexport function cstTlLen(ctx: ParseContext): number {\n const b = ctx._cstBuf\n if (b) return b.tl?.length ?? 0\n return ctx._cstTriviaLog?.length ?? 0\n}\n\nexport type CstRollbackMark = { raw: number; tlog: number; leaves: number; fields: number; errors: number }\n\nexport function saveCstMark(ctx: ParseContext): CstRollbackMark {\n return {\n raw: cstRawLen(ctx),\n tlog: cstTlLen(ctx),\n leaves: cstLeavesLen(ctx),\n fields: ctx._fields?.length ?? 0,\n // Speculative rollback must truncate the flat recovery-error sink in lockstep\n // with the CST leaves: a branch that recovered (pushing a ParseError to\n // ctx._errors AND embedding it as a CST child via captureError) then failed\n // must remove BOTH, or the flat error survives as a GHOST that a tree walk\n // can't see (flat run().errors would disagree with the embedded set).\n errors: ctx._errors?.length ?? 0,\n }\n}\n\nfunction rollbackBufList(\n b: CstCaptureBuf,\n keyMulti: 'ch' | 'raw',\n keySingle: 'single' | 'rawSingle',\n len: number,\n): void {\n const arr = b[keyMulti]\n if (arr) {\n if (len === 0) b[keyMulti] = undefined\n else if (len === 1) { b[keySingle] = arr[0]; b[keyMulti] = undefined }\n // Guarded like every other truncation \u2014 see rollbackCstCapture. This is the\n // buffered node-capture path, so it is reached only by the INTERPRETER (the\n // compiled engine inlines its own capture and never calls here), and it is\n // where the redundant-store rate is highest: over a backtracking fixture\n // this branch ran 32,800 times and 31,198 of those \u2014 95% \u2014 restored a\n // length that had not moved.\n else if (arr.length !== len) arr.length = len\n return\n }\n if (len === 0) b[keySingle] = undefined\n}\n\nexport function rollbackCstCapture(ctx: ParseContext, mark: CstRollbackMark): void {\n // Truncate the flat recovery-error sink alongside the CST, so a rolled-back\n // speculative branch leaves no ghost error (see saveCstMark). Guarded on a\n // present sink + a defined mark (rollbackTrivia forwards the same field).\n //\n // Each truncation is guarded on `length !== mark`, mirroring the compiled\n // engine (codegen.ts `captureRestoreBody`). Assigning `array.length` runs V8's\n // length setter \u2014 a backing-store trim decision \u2014 and costs the same when the\n // value is unchanged, which is the overwhelmingly common case here: a\n // speculative branch that captured nothing still pays for every store. The\n // compare is an in-object load. Both engines must carry the guard or the\n // interpreted path silently keeps the cost the compiled path shed.\n if (ctx._errors && mark.errors !== undefined && ctx._errors.length !== mark.errors) ctx._errors.length = mark.errors\n const b = ctx._cstBuf\n if (b) {\n rollbackBufList(b, 'raw', 'rawSingle', mark.raw)\n rollbackBufList(b, 'ch', 'single', mark.leaves)\n if (b.tl) {\n if (mark.tlog === 0) b.tl = undefined\n else if (b.tl.length !== mark.tlog) b.tl.length = mark.tlog\n }\n if (ctx._fields && ctx._fields.length !== mark.fields) ctx._fields.length = mark.fields\n return\n }\n if (ctx._cstRawChildren && ctx._cstRawChildren.length !== mark.raw) ctx._cstRawChildren.length = mark.raw\n if (ctx._cstTriviaLog && ctx._cstTriviaLog.length !== mark.tlog) ctx._cstTriviaLog.length = mark.tlog\n if (ctx._cstLeaves && ctx._cstLeaves.length !== mark.leaves) ctx._cstLeaves.length = mark.leaves\n if (ctx._fields && ctx._fields.length !== mark.fields) ctx._fields.length = mark.fields\n}\n\nexport function pushCstTriviaEntry(\n ctx: ParseContext,\n start: number,\n end: number,\n kindIndex?: number,\n): void {\n const insertIdx = cstRawLen(ctx)\n const b = ctx._cstBuf\n const withKind = ctx.triviaKindLabels !== undefined && kindIndex !== undefined\n if (b) {\n if (!b.tl) {\n b.tl = withKind ? [start, end, insertIdx, kindIndex] : [start, end, insertIdx]\n } else if (withKind) {\n b.tl.push(start, end, insertIdx, kindIndex)\n } else {\n b.tl.push(start, end, insertIdx)\n }\n return\n }\n if (ctx._cstTriviaLog) {\n if (withKind) ctx._cstTriviaLog.push(start, end, insertIdx, kindIndex)\n else ctx._cstTriviaLog.push(start, end, insertIdx)\n }\n}\n\nexport function pushTriviaLogEntry(\n ctx: ParseContext,\n start: number,\n end: number,\n kindIndex?: number,\n): void {\n if (!ctx._triviaLog) return\n if (ctx.triviaKindLabels !== undefined && kindIndex !== undefined) {\n ctx._triviaLog.push(start, end, kindIndex)\n } else {\n ctx._triviaLog.push(start, end)\n }\n}\n\nexport function cstDeferredTriviaActive(ctx: ParseContext): boolean {\n return ctx._triviaLog !== undefined || ctx._cstBuf !== undefined || ctx._cstTriviaLog !== undefined\n}\n", "import type { Combinator, FirstSet, ParseContext, ParseError, ParseResult, RecoveryHelpers } from '../types.ts'\nimport { cstCaptureActive, pushCstChild } from '../cst/capture-buffer.ts'\nimport { annotateSpanFromLineContext, recordLineRangeFromContext } from '../line-index.ts'\n\n/**\n * Recovery MECHANISM \u2014 sync-source-agnostic. These primitives implement \"scan\n * forward to a sync token and emit a ParseError\" and \"is the sync token here?\".\n * They are deliberately independent of WHERE the sync sentinel comes from: the\n * grammar never carries recovery config. Sync points are inferred automatically\n * from grammar structure (see `infer.ts`) and may be overridden externally by the\n * language service via `ctx._listSync`. This is the salvaged core of the old\n * `combinators/recover-scan.ts`.\n */\n\n/**\n * Run `sentinel` at `pos` as PURE lookahead: succeed/fail only, with every\n * side-effecting sink suppressed (CST leaves/children/trivia, the trivia log,\n * the recovery error sink, and the completions probe). A recovery scan probes the\n * sentinel at many positions and must not capture leaves, log trivia, or pollute\n * `completionsAt`'s furthest-failure set as a byproduct of looking ahead.\n */\nfunction probeAt(sentinel: Combinator<unknown>, input: string, pos: number, ctx: ParseContext): boolean {\n const s = {\n _probe: ctx._probe, _errors: ctx._errors,\n _cstLeaves: ctx._cstLeaves, _cstChildren: ctx._cstChildren, _cstRawChildren: ctx._cstRawChildren,\n _cstTriviaLog: ctx._cstTriviaLog, _triviaLog: ctx._triviaLog, _rootTriviaLog: ctx._rootTriviaLog, _fields: ctx._fields, _cstBuf: ctx._cstBuf,\n _tolerant: ctx._tolerant, _sync: ctx._sync,\n }\n ctx._probe = undefined; ctx._errors = undefined\n ctx._cstLeaves = undefined; ctx._cstChildren = undefined; ctx._cstRawChildren = undefined\n ctx._cstTriviaLog = undefined; ctx._triviaLog = undefined; ctx._rootTriviaLog = undefined; ctx._fields = undefined; ctx._cstBuf = undefined\n // A sentinel is pure lookahead: it must not itself enter tolerant recovery (nor\n // read a stale outer `_sync`). Otherwise a sentinel that composes many/sepBy would\n // run recovery on every probed position \u2014 wasted work, and it could resync to the\n // enclosing list's sync token. Cleared here and restored in `finally`.\n ctx._tolerant = undefined; ctx._sync = undefined\n try {\n return sentinel.parse(input, pos, ctx).ok\n } finally {\n ctx._probe = s._probe; ctx._errors = s._errors\n ctx._cstLeaves = s._cstLeaves; ctx._cstChildren = s._cstChildren; ctx._cstRawChildren = s._cstRawChildren\n ctx._cstTriviaLog = s._cstTriviaLog; ctx._triviaLog = s._triviaLog; ctx._rootTriviaLog = s._rootTriviaLog; ctx._fields = s._fields; ctx._cstBuf = s._cstBuf\n ctx._tolerant = s._tolerant; ctx._sync = s._sync\n }\n}\n\n/**\n * Combine two recovery sentinels into one that matches when either does \u2014 used by\n * tolerant `sepBy` to resync to its own separator OR the enclosing delimiter. Cold\n * path only; a bare wrapper so we don't pull `choice()` (and its analysis) in.\n */\nexport function orSentinel(\n a: Combinator<unknown>,\n b: Combinator<unknown> | undefined,\n): Combinator<unknown> {\n if (b === undefined) return a\n return {\n _tag: 'orSentinel',\n _meta: { firstSet: { kind: 'any' }, canMatchNewline: false, isTrivia: false },\n _def: { tag: 'unknown' },\n parse(input: string, pos: number, ctx: ParseContext): ParseResult<unknown> {\n const ra = a.parse(input, pos, ctx)\n if (ra.ok) return ra\n return b.parse(input, pos, ctx)\n },\n }\n}\n\n/**\n * A lightweight zero-width sentinel that \"matches\" (succeeds, consuming nothing)\n * when the input code point at `pos` starts the given first set. Sync inference\n * builds one from a list's follow set so a nested list can resync to the enclosing\n * delimiter with no grammar annotation. Returns `null` when the first set is `any`\n * or `empty` (no usable inference).\n */\nexport function firstSetSentinel(fs: FirstSet): Combinator<null> | null {\n if (fs.kind !== 'ranges' || fs.ranges.length === 0) return null\n const ranges = fs.ranges\n return {\n _tag: 'firstSetSentinel',\n _meta: { firstSet: fs, canMatchNewline: false, isTrivia: false },\n _def: { tag: 'unknown' },\n parse(input: string, pos: number): ParseResult<null> {\n const code = pos < input.length ? input.codePointAt(pos) : undefined\n if (code !== undefined) {\n for (const r of ranges) {\n if (code >= r.lo && code <= r.hi) return { ok: true, value: null, span: { start: pos, end: pos } }\n }\n }\n return { ok: false, expected: [], span: { start: pos, end: pos } }\n },\n }\n}\n\n/**\n * Cold-path recovery scan shared by tolerant `many()` / `sepBy()`. Scans forward\n * from `from` until `sync` matches (or EOF) \u2014 probing the sentinel as pure\n * lookahead \u2014 emits a {@link ParseError} spanning the skipped range, and pushes it\n * to `ctx._errors`. The sync token is NOT consumed; the caller's loop resumes from\n * `end`. Only ever reached after an element has failed, so entirely off the hot path.\n *\n * The caller owns the loop guard: `sepBy` progress is driven by its separator (a\n * zero-width error for a missing element is fine); `many` checks `matchesAt(sync)`\n * itself and breaks when sitting on the terminator, so a zero-width failure can\n * never spin.\n */\nexport function recoverScan(\n input: string,\n from: number,\n ctx: ParseContext,\n sync: Combinator<unknown>,\n expected: string[],\n): { error: ParseError; end: number } {\n let scanPos = from\n while (scanPos < input.length && !probeAt(sync, input, scanPos, ctx)) scanPos++\n const span = { start: from, end: scanPos }\n if (ctx.trackLines) recordLineRangeFromContext(ctx, input, from, scanPos)\n const error: ParseError = { _tag: 'parseError', span: ctx.trackLines ? annotateSpanFromLineContext(span, ctx) : span, expected }\n ctx._errors?.push(error)\n return { error, end: scanPos }\n}\n\n/**\n * Does `sentinel` match at `pos` (pure lookahead)? Used by the tolerant list loops\n * to detect \"we are sitting on the sync/terminator token\" without consuming it or\n * capturing anything.\n */\nexport function matchesAt(\n sentinel: Combinator<unknown>,\n input: string,\n pos: number,\n ctx: ParseContext,\n): boolean {\n return probeAt(sentinel, input, pos, ctx)\n}\n\n/**\n * Embed a recovered error as a `parseError` CST child at the recovery point, so the\n * error lives IN the tree (rides reused subtrees across incremental edits; a tree\n * walk finds every diagnostic) \u2014 not only in the flat `ctx._errors` side-channel.\n * No-op when CST capture is off (value/AST mode). Both the interpreter list loops\n * and the compiled recovery branches call this (the latter via `_ctx._rec.capture`),\n * so the embedded node is identical on both paths.\n */\nexport function captureError(ctx: ParseContext, error: ParseError): void {\n if (cstCaptureActive(ctx)) pushCstChild(ctx, error, error)\n}\n\n/**\n * The recovery-helper bundle handed to a tolerant parse via `ctx._rec`. A COMPILED\n * grammar can't import these, so the driver (`run`, `parseDoc`) injects them; the\n * interpreter list loops read the same bundle, guaranteeing byte-identical recovery\n * across paths. Shared here so every driver installs the exact same instance.\n */\nexport const REC: RecoveryHelpers = { scan: recoverScan, at: matchesAt, or: orSentinel, sentinel: firstSetSentinel, capture: captureError }\n", "import type { Combinator, ParseContext, ParseResult, ParserMeta, ParseError } from '../types.ts'\nimport { captureError } from '../recovery/scan.ts'\nimport { annotateSpanFromLineContext } from '../line-index.ts'\nimport { matchesEmpty, isZeroWidthAssertion } from './first-set.ts'\n\nexport type { ParseError }\n\n/**\n * Statically derive the \"expected\" token set from a combinator's structure,\n * so a failure can name what it wanted without running anything:\n *\n * literal('}') -> ['\"}\"']\n * keywords(['a','b']) -> ['\"a\"', '\"b\"']\n * choice(x, y) -> expected(x) ++ expected(y) (all alternatives)\n * sequence(a, b, \u2026) -> expected(a) ++ \u2026 through the NULLABLE prefix\n * label('s', x) -> ['s'] (an explicit name wins)\n *\n * This is what lets expect() report a meaningful, IDENTICAL expectation in both\n * the interpreter and the compiled output (the compiled path does not rebuild the\n * runtime `expected` array, so it reads this precomputed set instead).\n *\n * The result is DEDUPLICATED. Deriving through a nullable prefix re-reaches the\n * same token from several terms \u2014 a value grammar whose leading terms are all\n * optional names its value-start set once per term \u2014 and an expectation list that\n * offers `\"@{\"` five times is wrong for a reader and expensive for a parser: a\n * choice that loses every arm materializes `[...arm0, ...arm1, \u2026]` at runtime, and\n * those arrays feed the enclosing choice's concat in turn, so duplicates compound\n * multiplicatively up the nesting. On jess's Less grammar the un-deduped sets cost\n * 32% of parse time on `benchmark.less` (medians 20.7 \u2192 14.2 ms over 100\n * interleaved pairs, 99/100 wins, min 19.1 \u2192 13.0), which is the whole of the Less\n * regression 0.35.0 shipped. Dedup is not an optimisation bolted onto the\n * derivation \u2014 a SET is what the derivation always meant.\n */\nexport function deriveExpected(c: Combinator<unknown>): string[] {\n return [...new Set(derive(c, new Set()))]\n}\n\nfunction derive(c: Combinator<unknown>, seen: Set<Combinator<unknown>>): string[] {\n const deriveExpected = (p: Combinator<unknown>): string[] => derive(p, seen)\n const def = c._def\n switch (def.tag) {\n case 'literal': return [JSON.stringify(def.value)]\n case 'regex': return [`/${def.source}/`]\n case 'keywords': return def.words.map(w => JSON.stringify(w))\n case 'label': return [def.label]\n case 'choice': return def.parsers.flatMap(deriveExpected)\n case 'dispatch': return deriveExpected(def.selector)\n // Union through the NULLABLE prefix, mirroring `sequenceFirstSet`. A leading\n // `optional(\u2026)`/`many(\u2026)` can match nothing, so the term after it is equally\n // able to fail first \u2014 deriving from term 0 alone named a token the parse\n // never actually required. A leading `not(\u2026)` is zero-width and contributes\n // nothing (its own expectation is about what must NOT be here), but it is\n // nullable, so keep scanning past it. Stop at the first term that must match.\n case 'sequence': {\n const out: string[] = []\n for (const term of def.parsers) {\n if (!isZeroWidthAssertion(term)) out.push(...deriveExpected(term))\n if (!matchesEmpty(term)) break\n }\n return out\n }\n case 'attempt': return deriveExpected(def.parser)\n // Delegating wrappers whose first-token failure is their inner parser's \u2014 must\n // pass through so a start-failure (and the first-set-miss fast-path in attempt/\n // node, which reads this) names the real expected token, not the wrapper tag.\n case 'field':\n case 'withCtx':\n case 'recover': return deriveExpected(def.parser)\n case 'skip': return deriveExpected(def.main)\n case 'expect': return def.expected\n case 'node':\n case 'grammar':\n case 'trivia':\n case 'token':\n case 'leaf':\n case 'optional':\n case 'many':\n case 'oneOrMore':\n case 'transform':\n case 'not':\n case 'peek': return deriveExpected(def.parser)\n // A bare routed() can only fail as \"there is no routed token here\". With a\n // fallback, THAT is the branch that can fail, so its expectations are the useful\n // ones \u2014 the routed path either succeeds or is not taken.\n case 'routed': return def.fallback === undefined ? ['routed()'] : deriveExpected(def.fallback)\n case 'lazy': {\n // An EXTERNAL ref (a rule from a composed base grammar) has no local\n // definition yet \u2014 its `thunk()` throws until fusion supplies it. Fall back\n // to the rule name as the expected label instead of descending.\n const name = (c as { _ruleName?: string })._ruleName\n // Cycle guard: a RECURSIVE rule re-enters its own definition forever. Reaching\n // one is newly possible now that `sequence` derives through a nullable prefix\n // (`list = choice('end', sequence(optional(item), list))` \u2014 term-0-only\n // derivation used to stop short of the self-reference). Falling back to the rule\n // name, exactly as for an unresolved external ref, cuts the cycle. Removed again\n // on the way out, so a rule referenced twice NON-cyclically still derives fully.\n if (seen.has(c)) return name ? [name] : []\n seen.add(c)\n try { return deriveExpected(def.thunk()) }\n catch { return name ? [name] : [] }\n finally { seen.delete(c) }\n }\n default: return []\n }\n}\n\n/**\n * Required-token combinator. Tries `combinator`; on success returns it verbatim.\n * On failure it does NOT fail \u2014 it records a {@link ParseError} (the statically\n * derived expected set, or `label` when given) into `ctx._errors` and RECOVERS IN\n * PLACE, returning a zero-width success so the enclosing sequence continues as if\n * the token were present.\n *\n * Use it to mark required delimiters/terminators (`}` `)` `;`, a selector before a\n * block) so a missing one is reported with position + expectation rather than\n * aborting the whole parse or being silently swallowed by a catch-all.\n *\n * sequence(literal('{'), declList, expect(literal('}')))\n *\n * Errors are only collected when the parse runs with `{ recover: true }`; without\n * it, expect() still recovers in place but records nothing (zero overhead beyond\n * the inner attempt).\n */\nexport function expect<T>(combinator: Combinator<T>, label?: string): Combinator<T | ParseError> {\n const expected = label !== undefined ? [label] : deriveExpected(combinator)\n const meta: ParserMeta = {\n firstSet: combinator._meta.firstSet,\n canMatchNewline: combinator._meta.canMatchNewline,\n isTrivia: false,\n }\n return {\n _tag: 'expect',\n _meta: meta,\n _def: { tag: 'expect', parser: combinator as Combinator<unknown>, label, expected },\n parse(input: string, pos: number, ctx: ParseContext): ParseResult<T | ParseError> {\n const result = combinator.parse(input, pos, ctx)\n if (result.ok) return result as ParseResult<T | ParseError>\n const span = { start: pos, end: pos }\n const error: ParseError = { _tag: 'parseError', span: ctx.trackLines ? annotateSpanFromLineContext(span, ctx) : span, expected }\n ctx._errors?.push(error)\n // Embed the missing-token error as a `parseError` CST child (no-op when CST\n // capture is off), so it rides the tree exactly like list-recovery errors \u2014\n // a tree walk finds every diagnostic and the error survives incremental\n // reuse, rather than living only in the flat ctx._errors side-channel. Gated\n // on tolerant like the list-recovery embed sites, so a strict CST build is\n // byte-identical to before (and stays in parity with the compiled path,\n // which can only embed when the recovery bundle `_rec` is installed).\n if (ctx._tolerant) captureError(ctx, error)\n return { ok: true, value: error, span: { start: pos, end: pos } }\n },\n }\n}\n\n/** True when `value` is a recovery {@link ParseError} node. */\nexport function isParseError(value: unknown): value is ParseError {\n return typeof value === 'object' && value !== null && (value as ParseError)._tag === 'parseError'\n}\n", "/**\n * Low-level regex char-class primitives, shared by every hand-rolled regex\n * analysis in the codebase \u2014 the interpreter's first-set walker\n * (`./first-set.ts`), `regex()`'s short-scan fast path, and codegen's scannable\n * lowering (`../compiler/scannable-run.ts`). Kept dependency-free (no combinator,\n * no codegen imports) so it lands in even the leanest interpreter bundle.\n *\n * Everything here parses a regex STRUCTURE to code-point ranges; nothing encodes\n * a specific byte meaning (\"this is whitespace\"). `\\d`/`\\w` lower to their ASCII\n * ranges (correct for the default, non-`u` engine); `\\s` uses the fixed\n * `SPACE_RANGES` set (unaffected by the `u` flag).\n */\n\n/** Single-char escapes whose code point is fixed regardless of context. */\nexport const CLASS_ESCAPES: Record<string, number> = { t: 9, n: 10, r: 13, f: 12, v: 11, '0': 0 }\n\n/**\n * `\\s`'s code-point set per the spec's `WhiteSpace` + `LineTerminator`\n * productions \u2014 TAB/LF/VT/FF/CR, SPACE, NBSP, and the Unicode `Zs` space\n * separators. Fixed regardless of the `u` flag, so always safe to lower.\n */\nexport const SPACE_RANGES: Array<[number, number]> = [\n [9, 13], [32, 32], [160, 160], [5760, 5760], [8192, 8202],\n [8232, 8232], [8233, 8233], [8239, 8239], [8287, 8287], [12288, 12288], [65279, 65279],\n]\n\n/**\n * ASCII code-point ranges for the shorthand classes we lower. `\\d`/`\\w` are\n * ASCII-only in the default (non-`u`) engine; `\\s` maps to `SPACE_RANGES`.\n */\nexport function shorthandRanges(ch: 'd' | 'w' | 's'): Array<[number, number]> {\n if (ch === 'd') return [[48, 57]]\n if (ch === 's') return SPACE_RANGES\n // Order matches the canonical `scannable-run` lowering (underscore last), so\n // `ScanShape` output and generated code stay byte-identical. Membership is\n // order-independent (ranges are iterated / the FirstSet union sorts), so the\n // non-sorted order is purely representational \u2014 see PR #16 discussion.\n return [[48, 57], [65, 90], [97, 122], [95, 95]]\n}\n\n/** `\\uXXXX` at `body[i]` \u2192 its code point and the index past it, or null. */\nexport function readUnicodeEscape(body: string, i: number): { cp: number; next: number } | null {\n if (body[i] !== '\\\\' || body[i + 1] !== 'u') return null\n const hex = body.slice(i + 2, i + 6)\n if (!/^[0-9a-fA-F]{4}$/.test(hex)) return null\n return { cp: Number.parseInt(hex, 16), next: i + 6 }\n}\n\ntype ClassAtom = { cp: number } | { set: Array<[number, number]> }\n\n/**\n * Parse a regex char-class body (the chars BETWEEN `[` and `]`, negation `^`\n * already stripped by the caller) to code-point ranges. `\\d`/`\\w`/`\\s` expand to\n * their ranges; `\\uXXXX` and the fixed single-char escapes resolve to their code\n * point; any other letter escape (`\\D`, `\\W`, `\\S`, `\\b`, \u2026) returns null rather\n * than being mis-read as a literal letter, so callers fall back to a safe\n * over-approximation instead of a wrong set.\n */\nexport function parseClassRanges(body: string): Array<[number, number]> | null {\n const ranges: Array<[number, number]> = []\n let i = 0\n const readAtom = (): ClassAtom | null => {\n const ch = body[i]\n if (ch === undefined) return null\n if (ch === '\\\\') {\n const uni = readUnicodeEscape(body, i)\n if (uni) {\n i = uni.next\n return { cp: uni.cp }\n }\n const e = body[i + 1]\n if (e === undefined) return null\n i += 2\n if (e in CLASS_ESCAPES) return { cp: CLASS_ESCAPES[e]! }\n if (e === 'd' || e === 'w' || e === 's') return { set: shorthandRanges(e) }\n // Any other letter escape is a class we can't safely lower (\\D, \\W, \\S, \u2026).\n if ((e >= 'a' && e <= 'z') || (e >= 'A' && e <= 'Z')) return null\n return { cp: e.codePointAt(0)! }\n }\n i += ch.length\n return { cp: ch.codePointAt(0)! }\n }\n while (i < body.length) {\n const lo = readAtom()\n if (lo === null) return null\n if ('set' in lo) {\n ranges.push(...lo.set)\n continue\n }\n if (body[i] === '-' && body[i + 1] !== undefined && body[i + 1] !== ']') {\n i += 1\n const hi = readAtom()\n if (hi === null || 'set' in hi) return null\n ranges.push([lo.cp, hi.cp])\n } else {\n ranges.push([lo.cp, lo.cp])\n }\n }\n return ranges.length ? ranges : null\n}\n", "import type { Combinator, ParseContext } from '../types.ts'\nimport { pushCstTriviaEntry, pushTriviaLogEntry } from './capture-buffer.ts'\nimport { startsFirstSet } from '../combinators/first-set.ts'\n\nexport type TriviaChunk = { start: number; end: number; kindIndex: number }\n\nexport type LabeledTriviaSpec = {\n readonly labels: readonly string[]\n readonly arms: ReadonlyArray<{ label: string; kindIndex: number; parser: Combinator<unknown> }>\n readonly minRepeats: number\n}\n\nconst labeledTriviaSpecs = new WeakMap<Combinator<unknown>, LabeledTriviaSpec | null>()\n\nfunction unwrapTrivia(p: Combinator<unknown>): Combinator<unknown> {\n let cur = p\n while (cur._def.tag === 'trivia') cur = cur._def.parser\n return cur\n}\n\n/** Strip `label()` wrapper; returns inner parser for matching. */\nexport function peelLabel(p: Combinator<unknown>): { label: string; parser: Combinator<unknown> } | null {\n if (p._def.tag === 'label') return { label: p._def.label, parser: p._def.parser }\n return null\n}\n\n/**\n * When every trivia arm is `label(name, parser)` inside `oneOrMore(choice(\u2026))`\n * (or a single labeled arm), return the label table and matchers.\n */\nexport function analyzeLabeledTrivia(trivia: Combinator<unknown>): LabeledTriviaSpec | null {\n const cached = labeledTriviaSpecs.get(trivia)\n if (cached !== undefined) return cached\n\n let core = unwrapTrivia(trivia)\n let minRepeats = 1\n\n if (core._def.tag === 'oneOrMore') {\n core = core._def.parser\n minRepeats = 1\n } else if (core._def.tag === 'many') {\n core = core._def.parser\n minRepeats = 0\n }\n\n const arms: LabeledTriviaSpec['arms'][number][] = []\n\n if (core._def.tag === 'choice') {\n for (let i = 0; i < core._def.parsers.length; i++) {\n const peeled = peelLabel(core._def.parsers[i]!)\n if (!peeled) {\n labeledTriviaSpecs.set(trivia, null)\n return null\n }\n arms.push({ label: peeled.label, kindIndex: i, parser: peeled.parser })\n }\n } else {\n const peeled = peelLabel(core)\n if (!peeled) {\n labeledTriviaSpecs.set(trivia, null)\n return null\n }\n arms.push({ label: peeled.label, kindIndex: 0, parser: peeled.parser })\n }\n\n const spec = {\n labels: arms.map(a => a.label),\n arms,\n minRepeats,\n }\n labeledTriviaSpecs.set(trivia, spec)\n return spec\n}\n\n/** Label table on a `trivia()` combinator, if all arms are labeled. */\nexport function triviaKindLabels(trivia: Combinator<unknown> | undefined): readonly string[] | undefined {\n if (!trivia) return undefined\n const fromMeta = trivia._meta.triviaKindLabels\n if (fromMeta) return fromMeta\n return analyzeLabeledTrivia(trivia)?.labels\n}\n\nfunction matchArmAt(\n input: string,\n pos: number,\n arm: Combinator<unknown>,\n state: unknown,\n): { end: number } | null {\n // The first-set check is structural Parseman metadata. It neither assigns\n // meaning to a label nor recognizes a particular comment form; it avoids\n // entering arms whose own grammar proves they cannot start at this offset.\n if (!startsFirstSet(arm, input, pos)) return null\n const r = arm.parse(input, pos, { trackLines: false, state })\n if (!r.ok || r.span.end <= pos) return null\n return { end: r.span.end }\n}\n\n/**\n * Scan maximal labeled trivia chunks (PEG `oneOrMore(choice(\u2026))` semantics).\n * Each successful arm match becomes one entry with that arm's kind index.\n */\nexport function scanLabeledTriviaChunks(\n input: string,\n cur: number,\n spec: LabeledTriviaSpec,\n state?: unknown,\n): { end: number; chunks: TriviaChunk[] } {\n const chunks: TriviaChunk[] = []\n let pos = cur\n\n while (pos < input.length) {\n let matched: { end: number; kindIndex: number } | null = null\n for (const arm of spec.arms) {\n const m = matchArmAt(input, pos, arm.parser, state)\n if (m) {\n matched = { end: m.end, kindIndex: arm.kindIndex }\n break\n }\n }\n if (!matched) break\n chunks.push({ start: pos, end: matched.end, kindIndex: matched.kindIndex })\n pos = matched.end\n }\n\n if (chunks.length < spec.minRepeats) {\n return { end: cur, chunks: [] }\n }\n return { end: pos, chunks }\n}\n\n/**\n * Scan labeled trivia when no caller will retain individual chunks. This is the\n * ordinary skip path for a classified grammar: labels remain available for an\n * explicit capture request, but merely having labels must not allocate one\n * `{ start, end, kindIndex }` object per whitespace/comment run.\n */\nexport function scanLabeledTriviaEnd(\n input: string,\n cur: number,\n spec: LabeledTriviaSpec,\n state?: unknown,\n): number {\n let pos = cur\n let count = 0\n\n while (pos < input.length) {\n let matched: { end: number } | null = null\n for (const arm of spec.arms) {\n matched = matchArmAt(input, pos, arm.parser, state)\n if (matched) break\n }\n if (!matched) break\n pos = matched.end\n count++\n }\n\n return count < spec.minRepeats ? cur : pos\n}\n\n/**\n * Visit classified trivia matches without constructing per-match objects. The\n * visitor is only invoked after one or more arms matched, which is the shape\n * used by `classifiedTrivia()`; callers with a stronger repeat minimum keep\n * the buffered scanner so an unsuccessful minimum cannot leak a partial run.\n */\nexport function visitLabeledTrivia(\n input: string,\n cur: number,\n spec: LabeledTriviaSpec,\n state: unknown | undefined,\n visit: (start: number, end: number, kindIndex: number) => void,\n): number | undefined {\n if (spec.minRepeats > 1) return undefined\n let pos = cur\n let count = 0\n\n while (pos < input.length) {\n let matched: { end: number; kindIndex: number } | null = null\n for (const arm of spec.arms) {\n const match = matchArmAt(input, pos, arm.parser, state)\n if (match) {\n matched = { end: match.end, kindIndex: arm.kindIndex }\n break\n }\n }\n if (!matched) break\n visit(pos, matched.end, matched.kindIndex)\n pos = matched.end\n count++\n }\n\n return count < spec.minRepeats ? cur : pos\n}\n\nexport function recordTriviaChunks(ctx: ParseContext, chunks: readonly TriviaChunk[]): void {\n const kinds = ctx.triviaKindLabels\n const mask = ctx._triviaCaptureMask\n const rootLog = ctx._rootTriviaLog\n const rootKinds = ctx._rootTriviaKindIndex\n const rootMark = rootLog?.length ?? 0\n for (const ch of chunks) {\n // Global trivia log: always complete (never kind-filtered).\n pushTriviaLogEntry(ctx, ch.start, ch.end, kinds ? ch.kindIndex : undefined)\n const rootKindIndex = ctx._rootTriviaCapture === false || rootLog === undefined || rootKinds === undefined || kinds === undefined\n ? -1\n : (rootKinds[kinds[ch.kindIndex] ?? ''] ?? -1)\n if (rootKindIndex >= 0) {\n // Fill the enclosing committed gap after the scanner has consumed every\n // chunk. A selected marker therefore carries its exact authored context\n // without recording any whitespace-only chunk.\n rootLog!.push(0, 0, ch.start, ch.end, rootKindIndex)\n }\n // Per-node CST log: honour the kind mask when both a mask and labels are\n // present, so a host can capture (e.g.) comments only without logging every\n // whitespace run. No mask / no labels \u2192 capture everything, as before.\n if (ctx.captureTrivia && (ctx._cstBuf !== undefined || ctx._cstTriviaLog !== undefined)) {\n if (mask === undefined || kinds === undefined || (mask & (1 << ch.kindIndex)) !== 0) {\n pushCstTriviaEntry(ctx, ch.start, ch.end, kinds ? ch.kindIndex : undefined)\n }\n }\n }\n if (rootLog !== undefined && rootLog.length !== rootMark && chunks.length > 0) {\n const start = chunks[0]!.start\n const end = chunks[chunks.length - 1]!.end\n for (let offset = rootMark; offset < rootLog.length; offset += 5) {\n rootLog[offset] = start\n rootLog[offset + 1] = end\n }\n }\n}\n\n/**\n * Resolve a per-node trivia capture mask (`ctx._triviaCaptureMask`) from a trivia\n * label table and the kind names a host wants to keep. Returns `undefined` when\n * `labels` is absent (nothing to key on \u2192 capture everything).\n *\n * Names in `keep` that aren't in `labels` are **ignored by design**: `keep` is\n * often a dialect-independent list (e.g. `['blockComment', 'lineComment']`) applied\n * to a grammar whose trivia only defines some of them (CSS has no `lineComment`) \u2014\n * so an unknown name is a normal cross-dialect no-op, not necessarily a typo, and\n * is not worth a warning that would cry wolf on legitimate superset lists. An empty\n * `keep` (or one where nothing matches) yields `0`, which means \"capture NO trivia\n * into per-node logs\" \u2014 an intentional, valid state (the global `_triviaLog` is\n * unaffected either way). If you expect comments and get an empty per-node log,\n * check the name against the grammar's `triviaKindLabels`.\n */\nexport function triviaKindMask(\n labels: readonly string[] | undefined,\n keep: readonly string[],\n): number | undefined {\n if (!labels) return undefined\n let mask = 0\n for (const name of keep) {\n const idx = labels.indexOf(name)\n if (idx >= 0) mask |= 1 << idx\n }\n return mask\n}\n", "import type { Combinator, ParseContext, ParseFail, ParseResult } from '../types.ts'\nimport { parseClassRanges } from '../regex/classes.ts'\nimport {\n analyzeLabeledTrivia,\n recordTriviaChunks,\n scanLabeledTriviaEnd,\n scanLabeledTriviaChunks,\n visitLabeledTrivia,\n} from '../cst/trivia-kinds.ts'\nimport {\n pushCstTriviaEntry,\n pushTriviaLogEntry,\n rollbackCstCapture,\n saveCstMark,\n} from '../cst/capture-buffer.ts'\nimport { recordLineRangeFromContext } from '../line-index.ts'\n\n/**\n * Result of scanning trivia: the position after it, plus a `commit()` that\n * records the matched trivia tokens into the active rawChildren collector.\n * Recording is deferred so callers that may reject the following item (e.g.\n * many()/oneOrMore() retries) can advance speculatively without recording\n * trivia that doesn't actually sit between two accepted items.\n */\nexport type TriviaScan = { end: number; commit: () => void }\n\n/** Saved lengths for rolling back speculative trivia commits. */\nexport type TriviaRollbackMark = { raw: number; tlog: number; leaves: number; fields: number; errors: number; log: number; rootLog: number }\n\nconst NOOP_COMMIT = () => {}\ntype FastTriviaScanner = (input: string, cur: number) => number\nconst fastTriviaCache = new WeakMap<Combinator<unknown>, FastTriviaScanner | null>()\n\n/** True when trivia recording must be deferred until the following term commits. */\nexport function needsDeferredTriviaCommit(ctx: ParseContext): boolean {\n return ctx._triviaLog !== undefined || ctx._rootTriviaLog !== undefined || ctx._cstBuf !== undefined || ctx._cstTriviaLog !== undefined\n}\n\nexport function saveTriviaMark(ctx: ParseContext): TriviaRollbackMark {\n const m = saveCstMark(ctx)\n return {\n raw: m.raw,\n tlog: m.tlog,\n leaves: m.leaves,\n fields: m.fields,\n errors: m.errors,\n log: ctx._triviaLog ? ctx._triviaLog.length : 0,\n rootLog: ctx._rootTriviaLog ? ctx._rootTriviaLog.length : 0,\n }\n}\n\nexport function rollbackTrivia(ctx: ParseContext, mark: TriviaRollbackMark): void {\n rollbackCstCapture(ctx, { raw: mark.raw, tlog: mark.tlog, leaves: mark.leaves, fields: mark.fields, errors: mark.errors })\n // Guarded like every other truncation \u2014 see rollbackCstCapture.\n if (ctx._triviaLog && ctx._triviaLog.length !== mark.log) ctx._triviaLog.length = mark.log\n if (ctx._rootTriviaLog && ctx._rootTriviaLog.length !== mark.rootLog) ctx._rootTriviaLog.length = mark.rootLog\n}\n\nfunction parseTriviaNoCapture(\n triviaP: Combinator<unknown>,\n input: string,\n cur: number,\n ctx: ParseContext,\n): ParseResult<unknown> {\n const probeCtx: ParseContext = {\n trackLines: ctx.trackLines,\n state: ctx.state,\n ...(ctx._lineIndex ? { _lineIndex: ctx._lineIndex } : {}),\n ...(ctx._lineStarts ? { _lineStarts: ctx._lineStarts } : {}),\n ...(ctx._lineScannedTo !== undefined ? { _lineScannedTo: ctx._lineScannedTo } : {}),\n }\n const result = triviaP.parse(input, cur, probeCtx)\n ctx._lineScannedTo = probeCtx._lineScannedTo\n return result\n}\n\n/**\n * A ZERO-WIDTH LOOKAHEAD's mark: everything `saveTriviaMark` covers, plus the\n * completions probe's current best failure.\n *\n * `_probe` is a sink like any other \u2014 `failAt` (probe.ts) replaces\n * `ctx._probe.best` whenever a failure lands at or before the cursor \u2014 but it is\n * deliberately NOT part of `rollbackTrivia`, because most rollbacks must leave it\n * alone. A failed `choice` arm or `sequence` term SHOULD keep its contribution:\n * merging the expectations of alternatives that failed at the cursor is exactly\n * how `completionsAt` builds its set.\n *\n * A lookahead is the exception. `peek`/`not` consume nothing on EITHER outcome\n * and promise to leave no observable trace, so expectations raised INSIDE the\n * probe are not reachable from the enclosing grammar at the cursor:\n * `peek(sequence(literal('a'), literal('zzz')))` over `\"ab\"` offered `\"zzz\"` as\n * the ONLY completion, though no input can ever reach it there.\n */\nexport type LookaheadMark = TriviaRollbackMark & { probeBest: ParseFail | null }\n\nexport function saveLookaheadMark(ctx: ParseContext): LookaheadMark {\n return { ...saveTriviaMark(ctx), probeBest: ctx._probe ? ctx._probe.best : null }\n}\n\nexport function rollbackLookahead(ctx: ParseContext, mark: LookaheadMark): void {\n rollbackTrivia(ctx, mark)\n if (ctx._probe) ctx._probe.best = mark.probeBest\n}\n\nfunction scanWithLabels(input: string, cur: number, ctx: ParseContext): TriviaScan {\n const triviaP = ctx.trivia!\n const spec = analyzeLabeledTrivia(triviaP)\n if (!spec) return { end: cur, commit: NOOP_COMMIT }\n\n const log = ctx._triviaLog\n const rootLog = ctx._rootTriviaLog\n const rootKinds = ctx._rootTriviaKindIndex\n const captureTl = ctx.captureTrivia && (ctx._cstBuf !== undefined || ctx._cstTriviaLog !== undefined)\n const mask = ctx._triviaCaptureMask\n let fullRows: number[] | undefined\n let rootRows: number[] | undefined\n let cstRows: number[] | undefined\n const visitedEnd = visitLabeledTrivia(input, cur, spec, ctx.state, (start, matchEnd, kindIndex) => {\n if (log !== undefined) (fullRows ??= []).push(start, matchEnd, kindIndex)\n const selectedKind = rootLog === undefined || rootKinds === undefined || ctx._rootTriviaCapture === false\n ? undefined\n : rootKinds[spec.labels[kindIndex] ?? '']\n if (selectedKind !== undefined) (rootRows ??= []).push(start, matchEnd, selectedKind)\n if (captureTl && (mask === undefined || (mask & (1 << kindIndex)) !== 0)) {\n (cstRows ??= []).push(start, matchEnd, kindIndex)\n }\n })\n if (visitedEnd !== undefined) {\n if (visitedEnd === cur) return { end: cur, commit: NOOP_COMMIT }\n return {\n end: visitedEnd,\n commit: () => {\n if (fullRows !== undefined && log !== undefined) log.push(...fullRows)\n if (rootRows !== undefined && rootLog !== undefined) {\n for (let i = 0; i < rootRows.length; i += 3) {\n rootLog.push(cur, visitedEnd, rootRows[i]!, rootRows[i + 1]!, rootRows[i + 2]!)\n }\n }\n if (cstRows !== undefined) {\n for (let i = 0; i < cstRows.length; i += 3) {\n pushCstTriviaEntry(ctx, cstRows[i]!, cstRows[i + 1]!, cstRows[i + 2]!)\n }\n }\n },\n }\n }\n\n const { end, chunks } = scanLabeledTriviaChunks(input, cur, spec, ctx.state)\n if (end === cur) return { end: cur, commit: NOOP_COMMIT }\n\n return {\n end,\n commit: () => recordTriviaChunks(ctx, chunks),\n }\n}\n\n/** Skip classified trivia without constructing retained chunk records. */\nfunction skipWithLabels(input: string, cur: number, ctx: ParseContext): number {\n const spec = analyzeLabeledTrivia(ctx.trivia!)\n if (spec) return scanLabeledTriviaEnd(input, cur, spec, ctx.state)\n const tr = parseTriviaNoCapture(ctx.trivia!, input, cur, ctx)\n return tr.ok && tr.span.end > cur ? tr.span.end : cur\n}\n\n/**\n * Skip trivia at `cur` and return the new position. No recording, no wrapper\n * object \u2014 use between sequence/repeat terms when CST trivia capture is off.\n */\nexport function advanceTrivia(input: string, cur: number, ctx: ParseContext): number {\n const triviaP = ctx.trivia\n if (!triviaP) return cur\n if (!ctx.trackLines) {\n const fast = fastTriviaScanner(triviaP)\n if (fast) return fast(input, cur)\n if (ctx.triviaKindLabels) return skipWithLabels(input, cur, ctx)\n const tr = triviaP.parse(input, cur, { trackLines: ctx.trackLines, state: ctx.state })\n return tr.ok && tr.span.end > cur ? tr.span.end : cur\n }\n const trackTriviaLines = ctx.trackLines && triviaP._meta.canMatchNewline\n const fast = fastTriviaScanner(triviaP)\n if (fast) {\n const end = fast(input, cur)\n if (trackTriviaLines) recordLineRangeFromContext(ctx, input, cur, end)\n return end\n }\n if (ctx.triviaKindLabels) {\n const end = skipWithLabels(input, cur, ctx)\n if (trackTriviaLines) recordLineRangeFromContext(ctx, input, cur, end)\n return end\n }\n const tr = parseTriviaNoCapture(triviaP, input, cur, ctx)\n return tr.ok && tr.span.end > cur ? tr.span.end : cur\n}\n\n/**\n * Scan trivia at `cur` using `ctx.trivia`, WITHOUT recording it. Returns the\n * position after the trivia (or `cur` if none) and a `commit()` to record it.\n */\nexport function scanTrivia(input: string, cur: number, ctx: ParseContext): TriviaScan {\n const triviaP = ctx.trivia\n if (!triviaP) return { end: cur, commit: NOOP_COMMIT }\n\n const log = ctx._triviaLog\n const rootLog = ctx._rootTriviaLog\n const captureTl = ctx.captureTrivia && (ctx._cstBuf !== undefined || ctx._cstTriviaLog !== undefined)\n if (!ctx.trackLines) {\n const fast = !ctx.triviaKindLabels ? fastTriviaScanner(triviaP) : null\n if (fast && log === undefined && !captureTl) {\n return { end: fast(input, cur), commit: NOOP_COMMIT }\n }\n\n if (ctx.triviaKindLabels && (log !== undefined || rootLog !== undefined || captureTl)) {\n return scanWithLabels(input, cur, ctx)\n }\n\n if (ctx.triviaKindLabels) return { end: skipWithLabels(input, cur, ctx), commit: NOOP_COMMIT }\n\n if (log !== undefined || rootLog !== undefined || captureTl) {\n const tr = triviaP.parse(input, cur, {\n trackLines: log !== undefined ? false : ctx.trackLines,\n state: ctx.state,\n })\n if (!tr.ok || tr.span.end === cur) return { end: cur, commit: NOOP_COMMIT }\n const end = tr.span.end\n return {\n end,\n commit: () => {\n pushTriviaLogEntry(ctx, cur, end)\n if (captureTl) pushCstTriviaEntry(ctx, cur, end)\n },\n }\n }\n\n const tr = triviaP.parse(input, cur, { trackLines: ctx.trackLines, state: ctx.state })\n return { end: tr.ok ? tr.span.end : cur, commit: NOOP_COMMIT }\n }\n const trackTriviaLines = ctx.trackLines && triviaP._meta.canMatchNewline\n\n const fast = !ctx.triviaKindLabels ? fastTriviaScanner(triviaP) : null\n if (fast && log === undefined && !captureTl) {\n const end = fast(input, cur)\n if (trackTriviaLines) recordLineRangeFromContext(ctx, input, cur, end)\n return { end, commit: NOOP_COMMIT }\n }\n\n if (ctx.triviaKindLabels && (log !== undefined || rootLog !== undefined || captureTl)) {\n const scan = scanWithLabels(input, cur, ctx)\n if (trackTriviaLines) recordLineRangeFromContext(ctx, input, cur, scan.end)\n return scan\n }\n\n if (ctx.triviaKindLabels) {\n const end = skipWithLabels(input, cur, ctx)\n if (trackTriviaLines) recordLineRangeFromContext(ctx, input, cur, end)\n return { end, commit: NOOP_COMMIT }\n }\n\n if (log !== undefined || rootLog !== undefined || captureTl) {\n const tr = parseTriviaNoCapture(triviaP, input, cur, ctx)\n if (!tr.ok || tr.span.end === cur) return { end: cur, commit: NOOP_COMMIT }\n const end = tr.span.end\n return {\n end,\n commit: () => {\n pushTriviaLogEntry(ctx, cur, end)\n if (captureTl) pushCstTriviaEntry(ctx, cur, end)\n },\n }\n }\n\n const tr = parseTriviaNoCapture(triviaP, input, cur, ctx)\n return { end: tr.ok ? tr.span.end : cur, commit: NOOP_COMMIT }\n}\n\n/**\n * Consume trivia at `cur`, recording it immediately. For callers that always\n * accept the trivia between two committed terms (e.g. sequence/sepBy).\n */\nexport function consumeTrivia(input: string, cur: number, ctx: ParseContext): number {\n if (!needsDeferredTriviaCommit(ctx)) return advanceTrivia(input, cur, ctx)\n const scan = scanTrivia(input, cur, ctx)\n scan.commit()\n return scan.end\n}\n\nfunction fastTriviaScanner(trivia: Combinator<unknown>): FastTriviaScanner | null {\n const cached = fastTriviaCache.get(trivia)\n if (cached !== undefined) return cached\n const scanner = buildFastTriviaScanner(trivia)\n fastTriviaCache.set(trivia, scanner)\n return scanner\n}\n\nfunction buildFastTriviaScanner(trivia: Combinator<unknown>): FastTriviaScanner | null {\n const core = trivia._def.tag === 'trivia' ? trivia._def.parser : trivia\n const direct = regexTriviaScanner(core)\n if (direct) return direct\n\n const repeat = core._def.tag === 'oneOrMore' || (core._def.tag === 'many' && core._def.min >= 1)\n ? core._def.parser\n : null\n if (!repeat) return null\n\n const one = regexTriviaScanner(repeat)\n if (one) return loopScanner([one])\n\n if (repeat._def.tag !== 'choice') return null\n const arms = repeat._def.parsers.map(regexTriviaScanner)\n if (arms.some(s => s === null)) return null\n return loopScanner(arms as FastTriviaScanner[])\n}\n\nfunction loopScanner(arms: FastTriviaScanner[]): FastTriviaScanner {\n return (input, cur) => {\n let pos = cur\n scan: while (pos < input.length) {\n for (const arm of arms) {\n const end = arm(input, pos)\n if (end > pos) {\n pos = end\n continue scan\n }\n }\n break\n }\n return pos\n }\n}\n\nfunction regexTriviaScanner(parser: Combinator<unknown>): FastTriviaScanner | null {\n if (parser._def.tag !== 'regex' || parser._def.flags) return null\n const source = parser._def.source\n return classRunSource(source)\n ?? altStarSource(source)\n}\n\nfunction inRanges(cp: number, ranges: Array<[number, number]>): boolean {\n for (let i = 0; i < ranges.length; i++) {\n const r = ranges[i]!\n if (cp >= r[0] && cp <= r[1]) return true\n }\n return false\n}\n\n/** Greedy scanner for a positive char-class body (`^`-negated bodies are rejected upstream). */\nfunction classScanner(classBody: string): FastTriviaScanner | null {\n const ranges = parseClassRanges(classBody)\n if (!ranges) return null\n return (input, cur) => {\n let pos = cur\n while (pos < input.length && inRanges(input.charCodeAt(pos), ranges)) pos++\n return pos\n }\n}\n\n/** Scanner for a `C[^\\n\\r]*` arm \u2014 consumes its leader through a line break. */\nfunction untilLineBreakScanner(leaderCode: number): FastTriviaScanner {\n return (input, cur) => {\n if (input.charCodeAt(cur) !== leaderCode) return cur\n let pos = cur + 1\n while (pos < input.length) {\n const cc = input.charCodeAt(pos)\n if (cc === 10 || cc === 13) break\n pos++\n }\n return pos\n }\n}\n\n/** A bare positive char-class run `[class]*` / `[class]+` (`[ \\t\\n\\r,]*`, \u2026). */\nfunction classRunSource(source: string): FastTriviaScanner | null {\n const m = /^\\[([^\\]^](?:[^\\]]|\\\\.)*)\\][*+]$/.exec(source)\n return m ? classScanner(m[1]!) : null\n}\n\n/**\n * One alternation arm of a `(?:\u2026)*` trivia group: a positive char-class run\n * `[class]` (a trailing `+`/`*` is redundant under the enclosing loop) or a line\n * line-terminated arm `C[^\\n\\r]*` (`C` = one literal leader char, maybe escaped). Anything\n * else is unclassifiable \u2192 no fast path, never a wrong one.\n */\ntype TriviaArm =\n | { kind: 'class'; ranges: Array<[number, number]> }\n | { kind: 'untilLineBreak'; code: number }\n\nfunction classifyTriviaArm(arm: string): TriviaArm | null {\n const cls = /^\\[([^\\]^](?:[^\\]]|\\\\.)*)\\][*+]?$/.exec(arm)\n if (cls) {\n const ranges = parseClassRanges(cls[1]!)\n return ranges ? { kind: 'class', ranges } : null\n }\n const lc = /^(\\\\?.)\\[\\^\\\\n\\\\r\\]\\*$/.exec(arm)\n if (lc) {\n const marker = lc[1]!\n return { kind: 'untilLineBreak', code: (marker.length === 2 ? marker[1]! : marker[0]!).charCodeAt(0) }\n }\n return null\n}\n\nfunction armScanner(arm: TriviaArm): FastTriviaScanner {\n if (arm.kind === 'untilLineBreak') return untilLineBreakScanner(arm.code)\n const ranges = arm.ranges\n return (input, cur) => {\n let pos = cur\n while (pos < input.length && inRanges(input.charCodeAt(pos), ranges)) pos++\n return pos\n }\n}\n\n/**\n * A single tight loop over a merged char-class range list plus (usually one)\n * line-terminated leader \u2014 the fast form of `(?:[class]|C[^\\n\\r]*)*`. Requires the\n * caller to have checked marker/class disjointness (so a bare merged scan\n * matches the regex regardless of arm order).\n */\nfunction fusedTriviaScanner(ranges: Array<[number, number]>, leaders: number[]): FastTriviaScanner {\n const c0 = leaders[0]!\n const single = leaders.length === 1\n return (input, cur) => {\n let pos = cur\n const len = input.length\n for (;;) {\n const c = input.charCodeAt(pos)\n if (pos < len && inRanges(c, ranges)) { pos++; continue }\n if (single ? c === c0 : leaders.includes(c)) {\n pos++\n while (pos < len) {\n const cc = input.charCodeAt(pos)\n if (cc === 10 || cc === 13) break\n pos++\n }\n continue\n }\n break\n }\n return pos\n }\n}\n\n/** Split a `(?:\u2026)*` body on top-level `|`, respecting `[\u2026]`; bail on nested groups. */\nfunction splitTopLevelAlts(body: string): string[] | null {\n const arms: string[] = []\n let inClass = false\n let start = 0\n for (let i = 0; i < body.length; i++) {\n const c = body[i]\n if (c === '\\\\') { i++; continue }\n if (inClass) { if (c === ']') inClass = false; continue }\n if (c === '[') inClass = true\n else if (c === '(') return null // nested group \u2014 leave it to RegExp.exec\n else if (c === '|') { arms.push(body.slice(start, i)); start = i + 1 }\n }\n arms.push(body.slice(start))\n return arms\n}\n\n/**\n * Trivia written as a single regex alternation-star, `(?:arm|arm|\u2026)*` \u2014 e.g.\n * `(?:[ \\t\\n\\r,]|#[^\\n\\r]*)*`. Arms are classified independently and\n * order-independently: char-class arms merge into one range list and line-terminated\n * leaders are collected, so `(?:#\u2026|[class])*` scans the same as `(?:[class]|#\u2026)*`.\n * The common (disjoint) case compiles to one fused loop; a leader that also sits\n * inside a class is the one spot where arm order matters, so that falls back to\n * the ordered `loopScanner`.\n */\nfunction altStarSource(source: string): FastTriviaScanner | null {\n const m = /^\\(\\?:(.*)\\)[*+]$/.exec(source)\n if (!m) return null\n const armSrcs = splitTopLevelAlts(m[1]!)\n if (!armSrcs || armSrcs.length < 2) return null\n const arms: TriviaArm[] = []\n for (const src of armSrcs) {\n const arm = classifyTriviaArm(src)\n if (!arm) return null\n arms.push(arm)\n }\n const ranges: Array<[number, number]> = []\n const leaders: number[] = []\n for (const arm of arms) {\n if (arm.kind === 'class') ranges.push(...arm.ranges)\n else leaders.push(arm.code)\n }\n if (leaders.some(code => inRanges(code, ranges))) {\n return loopScanner(arms.map(armScanner)) // order-significant overlap\n }\n if (leaders.length === 0) return armScanner({ kind: 'class', ranges })\n return fusedTriviaScanner(ranges, leaders)\n}\n", "import type {\n Combinator, ParseContext, ParseResult, ParserMeta, FirstSet,\n AutoNotCheck, CharRange, ChoiceStrategy, GatedArm,\n} from '../types.ts'\nimport { union, intersects, matchesEmpty } from './first-set.ts'\nimport { deriveExpected } from './expect.ts'\nimport { rollbackTrivia, saveTriviaMark } from './trivia-skip.ts'\n\ntype ArmParser<T> = T extends GatedArm<infer U> ? Combinator<U> : T extends Combinator<infer U> ? Combinator<U> : never\ntype UnionArms<T extends (Combinator<unknown> | GatedArm<unknown>)[]> = {\n [K in keyof T]: ArmParser<T[K]>\n}[number] extends Combinator<infer U> ? U : never\n\nexport function choice<T extends [Combinator<unknown> | GatedArm<unknown>, ...(Combinator<unknown> | GatedArm<unknown>)[]]>(\n ...args: T\n): Combinator<UnionArms<T>> {\n // Unwrap gated arms into (parser, gate) pairs\n const parsers = args.map(a => ('gate' in a ? a.combinator : a)) as Combinator<unknown>[]\n const gates = args.map(a => ('gate' in a ? a.gate : null)) as (((state: unknown) => boolean) | null)[]\n\n const hasGates = gates.some(g => g !== null)\n\n // O(1) first-char dispatch is sound when arms are pairwise-disjoint in their\n // first char AND no arm can match empty. Non-nullability is what makes a GATED\n // arm keep its dispatch slot: a gated arm is normally *skipped* so a later arm\n // can retry the same position \u2014 but if every arm is non-nullable and first-sets\n // are disjoint, no later arm can match this first char, so \"skip the gate then\n // retry\" is exactly \"dispatch to this arm, check its gate, and fail the choice\n // if the gate is false\". Every OTHER first char dispatches as before and never\n // touches the gate. A nullable arm matches at ANY position (zero-width), so\n // first-char dispatch can't represent it \u2192 such choices stay on firstMatch.\n // (Requiring non-nullability universally also tightens the ungated path, which\n // was already unsound for a nullable-but-first-set-disjoint arm; in practice no\n // ungated disjoint choice has a nullable arm, so codegen output is unchanged.)\n const disjoint = areDisjoint(parsers.map(p => p._meta.firstSet))\n && parsers.every(p => !matchesEmpty(p))\n\n let combined: FirstSet = { kind: 'empty' }\n for (const p of parsers) combined = union(combined, p._meta.firstSet)\n\n const meta: ParserMeta = {\n firstSet: combined,\n canMatchNewline: parsers.some(p => p._meta.canMatchNewline),\n isTrivia: false,\n disjoint,\n }\n\n // A disjoint choice dispatches by first char (gated arms check their gate inside\n // the dispatched branch); a NON-disjoint gated choice falls to firstMatch \u2014 the\n // greedy/longest-first strategies are incompatible with per-arm predicates.\n const strategy = (disjoint || hasGates) ? null : detectStrategy(parsers)\n // `sharedPrefix` is a `firstMatch` specialization \u2014 the interpreter runs it via\n // the firstMatch loop below, and codegen falls back to firstMatch under\n // coverage/recovery/linkable \u2014 so it needs the same auto-not table computed.\n const autoNot = (!disjoint && !hasGates && (strategy?.tag === 'firstMatch' || strategy?.tag === 'sharedPrefix'))\n ? computeAutoNot(parsers)\n : parsers.map(() => null)\n\n // Runtime state for each strategy (built once, reused on every parse call):\n let greedyLitMap: Map<string, number> | null = null\n let sortedParsers: Combinator<unknown>[] | null = null\n const asciiDispatch = disjoint ? buildAsciiDispatch(parsers) : null\n\n if (strategy?.tag === 'greedyClassify') {\n greedyLitMap = new Map()\n for (let i = 0; i < parsers.length; i++) {\n if (i === strategy.superIndex) continue\n const litVal = getCoreLiteralValue(parsers[i]!)\n if (litVal !== null) greedyLitMap.set(litVal, i)\n }\n } else if (strategy?.tag === 'literalsLongestFirst') {\n sortedParsers = strategy.sortedIndices.map(i => parsers[i]!)\n }\n\n return {\n _tag: 'choice',\n _meta: meta,\n _def: {\n tag: 'choice',\n parsers,\n gates,\n disjoint,\n strategy: strategy ?? { tag: 'firstMatch' },\n autoNot,\n },\n parse(input: string, pos: number, ctx: ParseContext): ParseResult<UnionArms<T>> {\n const expected: string[] = []\n\n // \u2500\u2500 Disjoint: O(1) first-char dispatch (arms may be gated) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n if (disjoint && pos < input.length) {\n const code = input.codePointAt(pos)!\n let idx = code < 128 ? asciiDispatch![code]! : -1\n if (idx < 0) {\n for (let i = 0; i < parsers.length; i++) {\n if (inFirstSet(code, parsers[i]!._meta.firstSet)) { idx = i; break }\n }\n }\n if (idx >= 0) {\n const gate = gates[idx]\n if (gate && !gate(ctx.state)) {\n // Gate blocks this arm. Disjointness + non-nullable arms guarantee no\n // OTHER arm can match this first char, so skip-and-retry is exactly\n // fail-the-choice \u2014 we must not fall through to another arm.\n return { ok: false, expected: deriveExpected(parsers[idx]!), span: { start: pos, end: pos } }\n }\n const result = parsers[idx]!.parse(input, pos, ctx)\n if (result.ok) return result as ParseResult<UnionArms<T>>\n expected.push(...result.expected)\n if (result.committed) return { ok: false, expected, span: { start: pos, end: pos }, committed: true }\n return { ok: false, expected, span: { start: pos, end: pos } }\n }\n return {\n ok: false,\n expected: parsers.flatMap(p => {\n const r = p.parse(input, pos, ctx)\n return r.ok ? [] : r.expected\n }),\n span: { start: pos, end: pos },\n }\n }\n\n // \u2500\u2500 greedyClassify: run one regex, classify by string equality \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // One parse call total. No backtracking.\n if (strategy?.tag === 'greedyClassify') {\n const superResult = parsers[strategy.superIndex]!.parse(input, pos, ctx)\n if (!superResult.ok) return superResult as ParseResult<UnionArms<T>>\n\n const end = superResult.span.end\n const litIdx = greedyLitMap!.get(input.slice(pos, end))\n if (litIdx !== undefined) {\n const litVal = getCoreLiteralValue(parsers[litIdx]!)!\n const value = applyTransforms(parsers[litIdx]!, litVal, { start: pos, end })\n return { ok: true, value: value as UnionArms<T>, span: { start: pos, end } }\n }\n return superResult as ParseResult<UnionArms<T>>\n }\n\n // \u2500\u2500 literalsLongestFirst: sorted descending by length, no backtracking \u2500\n if (strategy?.tag === 'literalsLongestFirst') {\n for (const p of sortedParsers!) {\n const r = p.parse(input, pos, ctx)\n if (r.ok) return r as ParseResult<UnionArms<T>>\n expected.push(...r.expected)\n }\n return { ok: false, expected, span: { start: pos, end: pos } }\n }\n\n // \u2500\u2500 firstMatch (+ gated arms): try each arm in order, skipping gated-off arms \u2500\u2500\n for (let i = 0; i < parsers.length; i++) {\n if (gates[i] && !gates[i]!(ctx.state)) continue // gate blocks this arm\n // Save leaf-array lengths so a failed/rejected arm can be rolled back.\n const mark = saveTriviaMark(ctx)\n const result = parsers[i]!.parse(input, pos, ctx)\n if (!result.ok) {\n rollbackTrivia(ctx, mark)\n expected.push(...result.expected)\n if (result.committed) return { ok: false, expected, span: result.span, committed: true }\n continue\n }\n const checks = autoNot[i]\n if (checks && autoNotFires(input, result.span.end, checks)) {\n rollbackTrivia(ctx, mark)\n continue\n }\n return result as ParseResult<UnionArms<T>>\n }\n return { ok: false, expected, span: { start: pos, end: pos } }\n },\n }\n}\n\n// ---------------------------------------------------------------------------\n// Strategy detection\n// ---------------------------------------------------------------------------\n\nfunction detectStrategy(parsers: Combinator<unknown>[]): ChoiceStrategy {\n // greedyClassify: exactly one regex arm whose regex matches every literal arm's\n // value exactly (and can potentially match more). All other arms must be literals.\n const regexIndices: number[] = []\n const literalIndices: number[] = []\n for (let i = 0; i < parsers.length; i++) {\n if (getCoreRegexDef(parsers[i]!) !== null) regexIndices.push(i)\n else if (getCoreLiteralValue(parsers[i]!) !== null) literalIndices.push(i)\n }\n\n if (\n regexIndices.length === 1 &&\n literalIndices.length === parsers.length - 1 &&\n literalIndices.length > 0\n ) {\n const superIndex = regexIndices[0]!\n const regexDef = getCoreRegexDef(parsers[superIndex]!)!\n const flags = 'y' + regexDef.flags.replace(/[gy]/g, '')\n const re = new RegExp(regexDef.source, flags)\n const allSubsumed = literalIndices.every(i => {\n const litVal = getCoreLiteralValue(parsers[i]!)!\n re.lastIndex = 0\n const m = re.exec(litVal)\n return m !== null && m[0] === litVal\n })\n if (allSubsumed) return { tag: 'greedyClassify', superIndex }\n }\n\n // literalsLongestFirst: every arm is a literal \u2014 try longest first, no backtracking\n if (parsers.length === literalIndices.length) {\n const sortedIndices = [...literalIndices].sort((a, b) =>\n getCoreLiteralValue(parsers[b]!)!.length - getCoreLiteralValue(parsers[a]!)!.length\n )\n return { tag: 'literalsLongestFirst', sortedIndices }\n }\n\n // sharedPrefix: EVERY arm is a bare sequence beginning with the SAME concrete\n // leading literal/regex \u2014 the compiler parses that left factor once. Detected\n // last (its shape is disjoint from the literal-only strategies above).\n const shared = detectSharedPrefix(parsers)\n if (shared !== null) return shared\n\n return { tag: 'firstMatch' }\n}\n\n/**\n * A stable structural key for a bare leading terminal (concrete literal/regex),\n * or `null` when the term is NOT a shareable concrete prefix. Deliberately\n * conservative: only an UNWRAPPED literal (case-sensitive) or regex qualifies \u2014\n * a transform/label/ref/node wrapper changes the value/capture shape and must NOT\n * be left-factored (correctness first; the strategy is opt-in like greedyClassify).\n */\nfunction bareLeadingTermKey(term: Combinator<unknown>): string | null {\n const d = term._def\n if (d.tag === 'literal' && !d.caseInsensitive) return `L:${d.value}`\n // `JSON.stringify` of the pair, not a delimiter join. `source` is arbitrary regex text\n // and can contain any character, so a collision here would judge two structurally\n // DIFFERENT regexes identical and left-factor arms that must not share a prefix \u2014 a\n // correctness bug in the generated parser, not a missed optimization. A JSON array is\n // injective by construction, so no argument about which delimiter cannot occur in a\n // regex source is needed. It is also printable: this was a RAW 0x00 byte, which made\n // the whole file binary to `git diff` and invisible to `grep -rn` (see\n // `scripts/check-control-bytes.mjs`). Runs once per choice when its strategy is chosen,\n // never per match.\n if (d.tag === 'regex') return `R:${JSON.stringify([d.source, d.flags])}`\n // Two lead shapes look eligible and are deliberately NOT. Both were tried and\n // measured; see test/unit/routed-fallback.test.ts, which pins the exclusions.\n //\n // `routed()` \u2014 a bare routed() IS a single-leaf terminal (it reads the\n // dispatch-consumed token, pushes exactly ONE leaf, skips no trivia, runs no\n // sub-parse), so it is replay-safe and admitting it here is correct. It is\n // excluded because it does not PAY. The strategy trades a duplicated lead scan for\n // a prescan plus a prefix-matched flag; routed()'s emission is a context read and\n // one comparison, so there is nothing worth factoring out. Measured on\n // `dispatch(name, when(k, choice(sequence(routed(), tail_i)...)))`, emitted bytes\n // with the strategy MINUS without it: +242 (2 arms), +260 (4), +296 (8) \u2014 it costs\n // more at every width and never crosses over. The same measurement on the\n // regex-lead shape the strategy was built for: -468 (2 arms), -1597 (4), -3846 (8).\n // A routed lead also shares only the ROUTED token; when the expensive shared work\n // is the next term (a prelude), that term is what needs factoring, not this one.\n //\n // `routed(fallback)` \u2014 not a leaf at all: on the fallback path it runs a whole\n // sub-parse, so replaying it as a once-recognized leaf would be wrong, and two\n // routed() with DIFFERENT fallbacks are not interchangeable to begin with.\n //\n // A `lazy` ref lead \u2014 excluded for correctness, not for want of a key. The\n // once-only prescan runs with `ctx.capturing = false`, which suppresses capture\n // only for code emitted HERE (emitLeafCapture, codegen.ts). A ref compiles to a\n // call into a function body generated under its OWN ctx (emitLazy), so its\n // captures and trivia writes would happen during the prescan and then AGAIN in\n // each arm. Replaying a ref needs recorded-and-spliced capture state, not the\n // variable reuse a terminal replay gets away with.\n return null\n}\n\n/**\n * Detect the pure single-group shared-prefix shape: at least two arms, EVERY arm\n * a bare `sequence` with \u22652 terms, and every arm's FIRST term the same concrete\n * literal/regex (identical source/flags or literal string). Returns the plan with\n * a representative prefix combinator (the first arm's leading term \u2014 all members'\n * leading terms are structurally identical, so any one emits identical code),\n * else `null`. Mixed / multi-group / wrapped shapes are conservatively skipped and\n * fall through to `firstMatch`.\n */\nfunction detectSharedPrefix(parsers: Combinator<unknown>[]): ChoiceStrategy | null {\n if (parsers.length < 2) return null\n let key: string | null = null\n let prefix: Combinator<unknown> | null = null\n const members: number[] = []\n for (let i = 0; i < parsers.length; i++) {\n const term0 = leadingTermOfArm(parsers[i]!)\n if (term0 === null) return null\n const k = bareLeadingTermKey(term0)\n if (k === null) return null\n if (key === null) { key = k; prefix = term0 }\n else if (k !== key) return null\n members.push(i)\n }\n if (prefix === null || members.length < 2) return null\n return { tag: 'sharedPrefix', prefix, members }\n}\n\n/**\n * Peel wrappers that neither consume input nor skip trivia before their inner\n * sequence -- `node`, `parser`/`grammar`, `transform`, `label` -- down to the core\n * `sequence` and return its FIRST term (the candidate shared prefix), or null when\n * the arm is not a wrapped-or-bare sequence with >=2 terms. Because none of these\n * wrappers advance the position before the sequence's first term, the term is parsed\n * at the arm's entry position in every arm, so the once-recognized prefix can be\n * replayed there. `attempt`/`optional`/`many`/`choice`/etc. are NOT peeled, so such\n * arms are conservatively excluded.\n */\nexport function leadingTermOfArm(arm: Combinator<unknown>): Combinator<unknown> | null {\n let d = arm._def\n for (;;) {\n if (d.tag === 'node' || d.tag === 'grammar' || d.tag === 'transform' || d.tag === 'label') {\n d = (d as { parser: Combinator<unknown> }).parser._def\n continue\n }\n break\n }\n if (d.tag !== 'sequence' || d.parsers.length < 2) return null\n return d.parsers[0]!\n}\n\n// ---------------------------------------------------------------------------\n// Auto-not analysis (firstMatch fallback only)\n// ---------------------------------------------------------------------------\n\nfunction computeAutoNot(parsers: Combinator<unknown>[]): (AutoNotCheck[] | null)[] {\n return parsers.map((p, i) => {\n const litVal = getCoreLiteralValue(p)\n if (litVal === null) return null\n\n const checks: AutoNotCheck[] = []\n for (let j = i + 1; j < parsers.length; j++) {\n const other = parsers[j]!\n const otherLit = getCoreLiteralValue(other)\n if (otherLit !== null && otherLit.startsWith(litVal) && otherLit.length > litVal.length) {\n checks.push({ kind: 'startsWith', value: otherLit.slice(litVal.length) })\n continue\n }\n const regexDef = getCoreRegexDef(other)\n if (regexDef !== null) {\n const contSet = continuationFirstSet(litVal, regexDef.source, regexDef.flags)\n if (contSet !== null) checks.push({ kind: 'firstSet', set: contSet })\n }\n }\n return checks.length > 0 ? checks : null\n })\n}\n\nfunction autoNotFires(input: string, end: number, checks: AutoNotCheck[]): boolean {\n for (const check of checks) {\n if (check.kind === 'firstSet') {\n const code = end < input.length ? (input.codePointAt(end) ?? -1) : -1\n if (inFirstSet(code, check.set)) return true\n } else {\n if (input.startsWith(check.value, end)) return true\n }\n }\n return false\n}\n\n// ---------------------------------------------------------------------------\n// Helpers: unwrap transform/sequence wrappers\n// ---------------------------------------------------------------------------\n\n/** Walk transform wrappers to find an inner literal's string value. */\nexport function getCoreLiteralValue(p: Combinator<unknown>): string | null {\n const def = p._def\n if (def.tag === 'literal' && !def.caseInsensitive) return def.value\n if (def.tag === 'transform') return getCoreLiteralValue(def.parser)\n return null\n}\n\n/** Walk transform wrappers to find an inner regex's source/flags. */\nexport function getCoreRegexDef(p: Combinator<unknown>): { source: string; flags: string } | null {\n const def = p._def\n if (def.tag === 'regex') return { source: def.source, flags: def.flags }\n if (def.tag === 'transform') return getCoreRegexDef(def.parser)\n if (def.tag === 'label') return getCoreRegexDef(def.parser)\n return null\n}\n\n/**\n * Apply a parser's transform chain to an already-known value, without re-parsing.\n * Used by greedyClassify to avoid a second parse call for the winning literal arm.\n */\nfunction applyTransforms(p: Combinator<unknown>, value: unknown, span: { start: number; end: number }): unknown {\n const def = p._def\n if (def.tag === 'transform') {\n const inner = applyTransforms(def.parser, value, span)\n return def.fn(inner, span)\n }\n return value\n}\n\n// ---------------------------------------------------------------------------\n// Continuation first-set (for firstMatch auto-not analysis)\n// ---------------------------------------------------------------------------\n\nfunction continuationFirstSet(lit: string, source: string, flags: string): FirstSet | null {\n const re = new RegExp(source, 'y' + flags.replace(/[gy]/g, ''))\n re.lastIndex = 0\n const base = re.exec(lit)\n if (!base || base[0] !== lit) return null\n\n const contCodes: number[] = []\n for (let code = 1; code < 128; code++) {\n re.lastIndex = 0\n const m = re.exec(lit + String.fromCharCode(code))\n if (m && m[0].length > lit.length) contCodes.push(code)\n }\n if (contCodes.length === 0) return null\n return codesToFirstSet(contCodes)\n}\n\nfunction codesToFirstSet(codes: number[]): FirstSet {\n codes.sort((a, b) => a - b)\n const ranges: CharRange[] = []\n let lo = codes[0]!, hi = codes[0]!\n for (let i = 1; i < codes.length; i++) {\n if (codes[i] === hi + 1) { hi = codes[i]! }\n else { ranges.push({ lo, hi }); lo = hi = codes[i]! }\n }\n ranges.push({ lo, hi })\n return { kind: 'ranges', ranges }\n}\n\nfunction inFirstSet(code: number, fs: FirstSet): boolean {\n if (fs.kind === 'any') return true\n if (fs.kind === 'empty') return false\n for (const r of fs.ranges) if (code >= r.lo && code <= r.hi) return true\n return false\n}\n\nfunction areDisjoint(sets: FirstSet[]): boolean {\n if (sets.some(s => s.kind === 'any')) return false\n for (let i = 0; i < sets.length; i++)\n for (let j = i + 1; j < sets.length; j++)\n if (intersects(sets[i]!, sets[j]!)) return false\n return true\n}\n\n// ASCII first-char \u2192 arm INDEX (not the parser) so a gated arm's gate can be\n// looked up (gates[idx]) at dispatch time. -1 means \"no arm keys off this char\".\nfunction buildAsciiDispatch(parsers: Combinator<unknown>[]): number[] {\n const table = Array<number>(128).fill(-1)\n for (let i = 0; i < parsers.length; i++) {\n const fs = parsers[i]!._meta.firstSet\n if (fs.kind !== 'ranges') continue\n for (const { lo, hi } of fs.ranges) {\n for (let code = Math.max(0, lo); code <= Math.min(127, hi); code++) {\n table[code] = i\n }\n }\n }\n return table\n}\n", "/**\n * The compiled-artifact \u2194 host contract, in ONE place.\n *\n * This lives on its own \u2014 rather than in `compiler/codegen.ts` where it started \u2014\n * because the DRIVER has to enforce it too. `functional/run.ts` is the `parseman/run`\n * entry, whose whole purpose is to stay small (see `test/unit/run-entry-closure.test.ts`),\n * so it cannot import the compiler to reach an assertion. Neither can it carry its own\n * copy: two spellings of one contract is how the two engines drift, and this contract\n * exists precisely because the failure it prevents is silent.\n *\n * No imports, by design \u2014 that is what keeps it free for both sides to depend on.\n */\n\n/**\n * Which consumer a compiled artifact was lowered FOR.\n *\n * - `'ast'` \u2014 the grammar's own `build` callbacks produce the result (the eval consumer).\n * - `'cst'` \u2014 a positioned-CST `ctx.build` host produces it (linter / IDE / language\n * service), and every node's capture is sized for that host.\n *\n * ONE grammar source serves both; they are two COMPILATIONS of it, not two grammars.\n * Deciding at compile time is what keeps the eval-AST artifact free of per-node host\n * probing \u2014 see the `hostMode` note on the codegen Ctx.\n */\nexport type HostMode = 'ast' | 'cst'\n\n/** Host mode a fused rule map (and each of its rule functions) was lowered for;\n * absent on hand-built maps \u2192 'ast'. */\nexport const FUSED_HOST_MODE = Symbol.for('parseman.fusedHostMode')\n\n/** Whether any fused piece omitted a direct builder's positioned-CST branch. */\nexport const FUSED_HOST_ELIDED = Symbol.for('parseman.fusedHostElided')\n\n/**\n * A compiled artifact and the host it is driven with must agree \u2014 and when they do not,\n * that has to be an ERROR, never a quietly-degraded tree.\n *\n * An `'ast'` artifact does not emit the positioned-CST branch at all, so attaching a\n * `_parsemanCstOutput` host to one would silently get the grammar's own AST objects\n * where the caller asked for a CST. A `'cst'` artifact builds every node through the\n * host, so running one without a host would call `undefined`. Both are compile/run\n * mismatches with an obvious fix, so both say so.\n *\n * Called once per parse from the TypeScript entry points, never from generated code.\n */\nexport function assertHostModeCompatible(mode: HostMode, build: unknown, hostBranchElided = true): void {\n const isCstHost = (build as { _parsemanCstOutput?: true } | undefined)?._parsemanCstOutput === true\n // A purely STRUCTURAL artifact never had a direct-builder host branch to drop, so it\n // serves a CST host in either mode \u2014 that is the long-standing `node(parser)` contract\n // and this change does not touch it. The INTERPRETER passes `false` for the same\n // reason from the other direction: it re-decides per parse and never elides anything.\n if (mode === 'ast' && isCstHost && hostBranchElided) {\n throw new Error(\n 'parseman: this parser was compiled for host mode \"ast\" (the default), so its nodes '\n + 'build through their own `build` callbacks and no positioned-CST branch was emitted. '\n + 'It cannot be driven with a positioned-CST host (cstBuildHost / a language-service '\n + 'host). Compile a second artifact from the SAME grammar with '\n + \"`compile(grammar, { hostMode: 'cst' })` \u2014 or, under the macro, a second \"\n + \"`rules({ hostMode: 'cst' }, factory)` call site \u2014 and drive that one instead.\",\n )\n }\n if (mode === 'cst' && !isCstHost) {\n throw new Error(\n 'parseman: this parser was compiled for host mode \"cst\", so every node builds through '\n + 'a positioned-CST `ctx.build` host. Pass one (e.g. `{ build: cstBuildHost }`), or use '\n + 'an artifact compiled with the default `hostMode: \"ast\"` to get the grammar\\'s own AST.',\n )\n }\n}\n", "/**\n * Static grammar-duplication / overlap / rewrite diagnostic.\n *\n * A parseman grammar is a COMBINATOR TREE, not source text \u2014 so the question\n * \"did I write this production twice?\" is a structural one a machine answers\n * exactly, and a reviewer answers badly. A few hundred productions is tens of\n * thousands of pairs; nobody reads that. This module walks the same tree\n * `analyzeGating` walks and reports nine families:\n *\n * 1. `duplicates` \u2014 subtrees that are structurally IDENTICAL, in \u22652 places.\n * 2. `nearDuplicates` \u2014 subtrees identical except at ONE slot. This is the\n * high-value case: a general rule cloned with one term\n * swapped, where the fix is one production whose varying\n * slot is a `choice`, not N copies of the scaffolding.\n * 3. `regexFragments` \u2014 alternation runs re-spelled across several `regex()`\n * terminals. Structural hashing cannot see inside a\n * regex, so this is its own pass.\n * 4. `regexClasses` \u2014 character classes re-spelled across terminals, and, more\n * usefully, NEAR-identical ones with the drift shown side\n * by side.\n * 5. `overlaps` \u2014 `choice` arms whose first-sets intersect, reported as\n * \"these two arms, on these chars, sharing these leading\n * terms\" rather than gating's \"dispatch failed\".\n * 6. `rewrites` \u2014 ALGEBRAIC simplifications: mechanically-derived exact\n * rewrites (`choice(sequence(A,B), B)` \u2192 `sequence(\n * optional(A), B)`), plus the dead-arm cases that are\n * outright bugs.\n * 7. `divergentNodes` \u2014 ONE `node()` type built by several structurally different\n * productions that are nonetheless variants of one shape.\n * 8. `structureLoss` \u2014 an earlier `choice` arm that FLATTENS what a later arm\n * would have structured: same `node()` type, overlapping\n * first-sets, and the earlier body contains no `node()`\n * at all. The parse succeeds either way, so nothing else\n * \u2014 not a test suite, not an output diff \u2014 reports it.\n * The ordered, consequential half of `divergentNodes`.\n * 9. `keywordRegexes` \u2014 hand-rolled keyword regexes (`regex(/not(?![-\\w])/i)`)\n * that should be `word()`/`keywords()`. Not a style note:\n * `/i` without `/u` gets non-ASCII case folding wrong,\n * and the fix that lives inside `keywords()` (see\n * `combinators/case-fold.ts`) never reached the copies.\n *\n * ## What this CANNOT see\n *\n * Structural hashing is exactly that: STRUCTURAL. Two productions that accept the\n * same language but are shaped differently \u2014 `many(x)` vs `optional(oneOrMore(x))`,\n * a `regex` spelling of what another rule builds from combinators, a rule inlined\n * once and referenced once \u2014 are invisible to `duplicates`/`nearDuplicates` unless\n * they happen to fall into the `rewrites` algebra below. Equally, two subtrees that\n * differ only in a `transform`/`node` CALLBACK are reported as distinct when the\n * callbacks' source text differs, even if the functions are equivalent. This finds\n * COPY-PASTE and mechanical redundancy. It does not find semantic redundancy, and a\n * clean report is not a proof that a grammar has none.\n *\n * `analyzeDuplication()` / `analyzeDuplicationRules()` are the programmatic\n * surface, mirroring `analyzeGating` / `analyzeGatingRules`. The compile-time\n * wiring is OPT-IN (`compile(g, { duplication: 'warn' })` /\n * `PARSEMAN_DUPLICATION=warn`) and runs on ALL THREE lowering paths \u2014 `compile`,\n * `compileRuleMap` and `compileLinkable` \u2014 because the macro build takes the\n * latter two and a diagnostic that only runs on the first is a diagnostic that\n * reports zero findings forever.\n */\nimport type { Combinator, FirstSet, ParserDef } from '../types.ts'\nimport { firstSetOf, type RefResolver } from '../combinators/first-set.ts'\nimport { firstSetToString } from './gating.ts'\n\n// \u2500\u2500 public shapes \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Where a combinator sits: its owning rule, and the accessor path within it. */\nexport type Site = {\n /** Nearest enclosing `_ruleName`, or the seed name it was reached under. */\n rule: string\n /** Structural path inside that rule, e.g. `choice[0] \u203A node(Declaration) \u203A seq[4]`. */\n path: string\n}\n\nexport const siteToString = (s: Site): string => (s.path === '' ? s.rule : `${s.rule} \u203A ${s.path}`)\n\n/** N structurally identical copies of one subtree. */\nexport type DuplicateFinding = {\n kind: 'exact-duplicate'\n id: string\n /** Node count of the repeated subtree. */\n size: number\n /** How many DISTINCT combinator instances share the shape (shared-by-reference\n * reuse is not duplication and is never counted here). */\n count: number\n /** Nodes removed by hoisting the shape to one shared const: `(count - 1) * size`. */\n savings: number\n /** One-line rendering of the repeated shape. */\n shape: string\n sites: Site[]\n suggestion: string\n}\n\n/** N subtrees identical except at ONE slot. */\nexport type NearDuplicateFinding = {\n kind: 'near-duplicate'\n id: string\n /** Node count shared by every member (the scaffolding). */\n sharedSize: number\n count: number\n savings: number\n /** The scaffolding with the varying slot rendered as `\u2039slot\u203A`. */\n shape: string\n /** Path to the varying slot, relative to the members' root. */\n slotPath: string\n /** What each member puts in that slot, aligned with `sites`. */\n variants: string[]\n sites: Site[]\n suggestion: string\n}\n\n/** An alternation run re-spelled across several `regex()` terminals. */\nexport type RegexFragmentFinding = {\n kind: 'regex-fragment'\n id: string\n /** The shared run, as it appears in the sources (`>=|<=|=>|=<|=~|[<>=]`). */\n fragment: string\n /** Number of alternation branches in the run. */\n branches: number\n count: number\n /** Characters removed by hoisting: `(count - 1) * fragment.length`. */\n savings: number\n /** The full source of each regex that carries it, aligned with `sites`. */\n sources: string[]\n sites: Site[]\n suggestion: string\n}\n\n/** One spelling of a character class, and where it appears. */\nexport type RegexClassVariant = {\n /** The class as written, including any `^`: `-_a-zA-Z0-9\u0080-\uFFFF`. */\n source: string\n /** Members this spelling has that the cluster's most common spelling does not,\n * and vice versa \u2014 the DRIFT, rendered `+a-f / -0-9`. */\n delta: string\n count: number\n sites: Site[]\n}\n\n/**\n * A character class (or boundary lookahead class) re-spelled across several\n * `regex()` terminals \u2014 and, when the spellings are not identical, the drift\n * between them.\n */\nexport type RegexClassFinding = {\n kind: 'regex-class'\n id: string\n /** The cluster's most common spelling. */\n canonical: string\n /** Every spelling in the cluster, most common first. Two variants side by side\n * IS the finding: one of them is wrong and reading cannot tell you which. */\n variants: RegexClassVariant[]\n /** Distinct `regex()` terminals across the whole cluster. */\n count: number\n /** True when the cluster holds more than one spelling. */\n drifted: boolean\n /** The class's highest code point is U+FFFF and it was written as an explicit\n * range \u2014 astral-plane characters fall outside it. */\n bmpCeiling: boolean\n suggestion: string\n}\n\n/** Two arms of one `choice` whose first-sets intersect. */\nexport type ArmOverlapFinding = {\n kind: 'arm-overlap'\n id: string\n site: Site\n a: number\n b: number\n /** The SHARED first characters (not the union). */\n on: FirstSet\n /** How many leading terms the two arms spell identically. */\n sharedLeadingTerms: number\n /** Rendering of those shared leading terms, when there are any. */\n sharedPrefix: string | null\n /** True when parseman's `sharedPrefix` choice strategy already recognizes the\n * common prefix once at runtime \u2014 the finding is then about READABILITY, not\n * speed. */\n handledByStrategy: boolean\n /** Both arms lead with a `regex()` whose character classes intersect \u2014 usually\n * a sign the two arms want to be one terminal. */\n regexPair: boolean\n suggestion: string\n}\n\nexport type RewriteKind =\n | 'optional-prefix' // choice(sequence(A, R\u2026), sequence(R\u2026)) \u2192 sequence(optional(A), R\u2026)\n | 'optional-suffix' // choice(sequence(R\u2026, A), sequence(R\u2026)) \u2192 sequence(R\u2026, optional(A))\n | 'left-factor' // choice(sequence(A, B\u2026), sequence(A, C\u2026)) \u2192 sequence(A, choice(B\u2026, C\u2026))\n | 'hand-rolled-sepby' // sequence(X, many(sequence(S, X))) \u2192 sepBy(X, S)\n | 'idempotent-nesting' // optional(optional(X)), many(many(X)), \u2026\n | 'single-element' // choice(X) / sequence(X)\n | 'duplicate-arm' // choice(\u2026, X, \u2026, X, \u2026) \u2014 the later arm is dead\n | 'shadowed-arm' // choice(\u2026, X, \u2026, sequence(X, \u2026), \u2026) \u2014 the later arm is dead\n\n/** A mechanically-derived rewrite. */\nexport type RewriteFinding = {\n kind: 'rewrite'\n id: string\n rewrite: RewriteKind\n site: Site\n /** What is there now. */\n from: string\n /** What it is equal to. */\n to: string\n /**\n * `true` only when the rewrite provably cannot move the parse VALUE \u2014 which,\n * here, means it only deletes an arm that can never be selected. Every other\n * rewrite in this family changes the child arity or nesting of the value the\n * site produces, so a `node()` build / `transform` / downstream consumer that\n * reads positionally WILL see a different tree. Those are reported as\n * CANDIDATES to verify, never as \"fix this\".\n */\n astNeutral: boolean\n /** Non-empty when the rewrite removes speculative work at parse time. */\n perf: string\n /** Only on `hand-rolled-sepby`: whether this SITE can actually take `sepBy`. A\n * count of matches is not a worklist \u2014 in a real grammar most matches are\n * blocked, and reporting them all as convertible generates false work. */\n sepByVerdict?: SepByVerdict\n /** True when this is a latent BUG (an unreachable arm), not a verbosity smell. */\n bug: boolean\n suggestion: string\n}\n\n/**\n * One AST node type built by two or more STRUCTURALLY DIFFERENT productions that\n * are nonetheless variants of a single shape (they spell several of the same\n * terms). This is the clone family near-duplicate detection cannot see: the copies\n * diverge in more than one slot \u2014 extra scaffolding, a hand-rolled whitespace run,\n * a terminal guard \u2014 so no single hole explains them, yet every edit to \"the\n * declaration shape\" still has to land in all of them, and nothing checks that it did.\n */\nexport type DivergentNodeFinding = {\n kind: 'divergent-node'\n id: string\n /** The `node()` type every member produces. */\n nodeType: string\n /** Number of structurally distinct productions building it. */\n count: number\n /** Terms every member spells identically \u2014 the evidence they are one shape. */\n sharedTerms: string[]\n productions: {\n shape: string\n site: Site\n /** Terms this production has that at least one sibling does not. */\n distinctTerms: string[]\n }[]\n suggestion: string\n}\n\n/**\n * An earlier `choice` arm that FLATTENS what a later arm would have STRUCTURED.\n *\n * Both arms build the same `node()` type and can start on the same character, so\n * on the inputs both accept the earlier one wins \u2014 and its body contains no\n * `node()` at all, so the tree it produces is that node over bare leaves. The\n * later arm, on those same inputs, would have produced child nodes. Nothing about\n * this is visible in a parse that succeeds: `ok` is true, the span is right, the\n * text round-trips. Only the SHAPE moved, and only on the subset of inputs the\n * flattening arm happens to accept \u2014 which is why it survives a test suite that\n * checks \"does it parse\" and a corpus diff that checks emitted output. It shows\n * up in whatever consumes the tree: a language service that lints number tokens,\n * a formatter, a refactor.\n *\n * This is the ordered, consequential half of `divergent-node`. That finding says\n * two productions build one type and nothing keeps them in sync, and it expressly\n * allows \"the variants exist for a parse-order reason (a fast path tried first)\".\n * This one is the case where that excuse is the bug: the fast path is not\n * tree-neutral, and here is the list of node types it deletes.\n */\nexport type StructureLossFinding = {\n kind: 'structure-loss'\n id: string\n /** The `choice` that orders the two arms. */\n site: Site\n /** The `node()` type BOTH arms build. */\n nodeType: string\n /** Index of the flattening arm (the earlier one). */\n earlier: number\n /** Index of the structuring arm it shadows. */\n later: number\n /** The characters on which both arms can start \u2014 where the shadowing bites. */\n on: FirstSet\n /** Node types the later arm builds under `nodeType` and the earlier cannot. */\n lostNodeTypes: string[]\n earlierShape: string\n laterShape: string\n suggestion: string\n}\n\n/** A `regex()` that hand-rolls a keyword + word boundary. */\nexport type KeywordRegexFinding = {\n kind: 'keyword-regex'\n id: string\n site: Site\n source: string\n flags: string\n words: string[]\n /** The boundary character class, as a `word()`/`keywords()` `boundary` argument.\n * `null` when the regex enumerates a vocabulary with no guard at all. */\n boundary: string | null\n /** `/i` without `/u`: the fold class is NOT `{c, upper(c), lower(c)}`. */\n caseFoldRisk: boolean\n /** Sibling arm indices in the same `choice` that are also hand-rolled keywords. */\n siblingArms: number[]\n /**\n * >= 3 literal alternatives: a fixed VOCABULARY enumerated by hand rather than a\n * keyword with a guard. The interesting sub-case, because ordering starts to matter\n * and the list is usually long enough that nobody re-reads it.\n */\n vocabulary: boolean\n /**\n * Alternatives are in non-increasing length order. `keywords()` sorts longest-first\n * by construction; a hand-written alternation does not, and nothing checks it.\n */\n longestFirst: boolean\n /**\n * Earlier alternatives that are strict PREFIXES of later ones. Regex alternation is\n * first-match, so the longer branch is reachable only when a trailing boundary guard\n * rejects the following character and forces a backtrack (`rescuedByBoundary`).\n */\n hazards: { shorter: string; longer: string; at: string; rescuedByBoundary: boolean }[]\n /**\n * At least one hazard is NOT rescued by a boundary guard \u2014 a later alternative can\n * never match. That is a live bug, not a cleanup.\n */\n bug: boolean\n suggestion: string\n}\n\nexport type DuplicationReport = {\n duplicates: DuplicateFinding[]\n nearDuplicates: NearDuplicateFinding[]\n regexFragments: RegexFragmentFinding[]\n regexClasses: RegexClassFinding[]\n overlaps: ArmOverlapFinding[]\n rewrites: RewriteFinding[]\n divergentNodes: DivergentNodeFinding[]\n structureLoss: StructureLossFinding[]\n keywordRegexes: KeywordRegexFinding[]\n /** Ids listed in `accept` that matched no finding \u2014 stale entries to prune. */\n acceptedUnused: string[]\n stats: {\n rules: number\n /** Distinct combinator INSTANCES reached. */\n nodes: number\n /** Distinct structural shapes among them. */\n shapes: number\n }\n}\n\nexport type AnalyzeDuplicationOptions = {\n /** Smallest repeated subtree worth reporting, in nodes. Default 3 \u2014 which is\n * what keeps `optional(ws)` (2 nodes) out of the ranking. */\n minSize?: number\n /** Cap per category, applied AFTER ranking. Default 25. */\n maxFindings?: number\n /** Finding `id`s to suppress \u2014 the single per-finding acknowledgement channel,\n * mirroring the gating snapshot allowlist. */\n accept?: Iterable<string>\n /** Bind cross-artifact `g.Foo` holes when computing first-sets for `overlaps`. */\n resolveRef?: RefResolver\n /** Name to attribute an unnamed entry to, instead of `<entry>`. */\n entryName?: string\n}\n\n// \u2500\u2500 canonical structural hashing \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * Ordered structural children per def tag. Explicit rather than \"every key that\n * holds a Combinator\" because a SLOT's position is what near-duplicate detection\n * varies \u2014 a stable, meaningful order is load-bearing, not cosmetic.\n */\nfunction childrenOf(d: ParserDef): readonly Combinator<unknown>[] {\n switch (d.tag) {\n case 'sequence': case 'choice': return d.parsers\n case 'dispatch': return [\n d.selector,\n ...d.cases.map(c => c.parser),\n ...(d.otherwise === undefined ? [] : [d.otherwise]),\n ]\n case 'skip': return [d.main, d.skipped]\n case 'sepBy': return [d.parser, d.separator]\n case 'recover': return [d.parser, d.sentinel]\n case 'scanTo': return [d.sentinel, ...d.skip]\n case 'grammar': return d.triviaParser ? [d.parser, d.triviaParser] : [d.parser]\n // A `lazy` is a REFERENCE, not a subtree: hashing through it would make every\n // rule's shape include the whole reachable grammar. Treated as a leaf, keyed\n // by the rule name it refers to \u2014 which is also the right semantics, since two\n // productions referencing `g.Ident` really do fill that slot the same way.\n case 'lazy': case 'literal': case 'regex': case 'keywords': case 'guard': case 'unknown':\n return []\n default: {\n const rec = d as unknown as { parser?: Combinator<unknown> }\n return rec.parser ? [rec.parser] : []\n }\n }\n}\n\nconst ruleNameOf = (p: Combinator<unknown>): string | undefined =>\n (p as unknown as { _ruleName?: string })._ruleName\n\n/** Source text of a callback, so two COPY-PASTED lambdas hash alike (identity\n * would make every copy distinct and defeat the whole diagnostic). */\nconst fnKey = (src: string | undefined, fn: unknown): string =>\n src ?? (typeof fn === 'function' ? String(fn) : '')\n\n/** The discriminating payload of a node, excluding its children. */\nfunction payloadKey(p: Combinator<unknown>, d: ParserDef): string {\n switch (d.tag) {\n case 'literal': return `literal\\u0000${d.value}\\u0000${d.caseInsensitive}`\n case 'regex': return `regex\\u0000${d.source}\\u0000${d.flags}`\n case 'keywords': return `keywords\\u0000${[...d.words].join('\\u0001')}\\u0000${d.caseInsensitive}\\u0000${d.boundary ?? ''}`\n case 'lazy': {\n const n = ruleNameOf(p)\n return n === undefined ? `ref\\u0000#${anonId(p)}` : `ref\\u0000${n}`\n }\n case 'label': return `label\\u0000${d.label}`\n case 'field': return `field\\u0000${d.name}`\n case 'node': return `node\\u0000${d.type ?? ''}\\u0000${d.unwrap === true}\\u0000${d.collapse === true}\\u0000${fnKey(d.buildSrc, d.build)}`\n case 'transform': return `transform\\u0000${fnKey(d.fnSrc, d.fn)}\\u0000${d.recognitionOnly === true}`\n case 'leaf': return `leaf\\u0000${fnKey(d.fnSrc, d.fn)}`\n case 'many': case 'oneOrMore': return `${d.tag}\\u0000${d.min}\\u0000${d.max ?? ''}`\n case 'sepBy': return `sepBy\\u0000${d.min}\\u0000${d.max ?? ''}\\u0000${d.trailing ?? ''}`\n case 'dispatch': return `dispatch\\u0000${d.cases.map(c => JSON.stringify(c.keys)).join('\\u0002')}\\u0000${d.otherwise !== undefined}`\n case 'expect': return `expect\\u0000${d.label ?? ''}\\u0000${d.expected.join('\\u0001')}`\n case 'scanTo': return `scanTo\\u0000${d.raw}\\u0000${d.orEOF}`\n case 'guard': return `guard\\u0000${fnKey(d.predSrc, d.predicate)}`\n case 'withCtx': return `withCtx\\u0000${d.extraSrc ?? safeJson(d.extra)}`\n case 'grammar': return `grammar\\u0000${d.clearTrivia === true}\\u0000${d.captureTrivia === true}\\u0000${d.trackLines}`\n default: return d.tag\n }\n}\n\nfunction safeJson(v: unknown): string {\n try { return JSON.stringify(v) ?? String(v) } catch { return '?' }\n}\n\nlet anonCounter = 0\nconst anonIds = new WeakMap<object, number>()\n/** Identity key for an UNNAMED unresolvable ref: nothing can bind it by name, so\n * two of them are the same slot only when they are the same object. */\nfunction anonId(p: object): number {\n let id = anonIds.get(p)\n if (id === undefined) { id = ++anonCounter; anonIds.set(p, id) }\n return id\n}\n\n/**\n * Interning gives EXACT structural equality with short keys: a node's key is its\n * payload plus the interned ids of its children, so equal ids \u21D4 equal subtrees,\n * with no hash collisions to reason about.\n */\nclass Interner {\n private readonly ids = new Map<string, number>()\n readonly hole: number\n constructor() { this.hole = this.of('\\u0000HOLE\\u0000') }\n of(key: string): number {\n let id = this.ids.get(key)\n if (id === undefined) { id = this.ids.size; this.ids.set(key, id) }\n return id\n }\n}\n\n// \u2500\u2500 rendering \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst MAX_RENDER = 160\n\n/** A compact one-line rendering of a subtree, for the finding text. */\nfunction render(p: Combinator<unknown>, depth = 3): string {\n const d = p._def as ParserDef\n const name = ruleNameOf(p)\n switch (d.tag) {\n case 'literal': return `literal('${d.value}')`\n case 'regex': return `regex(/${d.source}/${d.flags})`\n case 'keywords': return `keywords([${[...d.words].slice(0, 4).map(w => `'${w}'`).join(', ')}${d.words.length > 4 ? ', \u2026' : ''}])`\n case 'lazy': return `g.${name ?? '?'}`\n case 'guard': return 'gate(\u2026)'\n default: break\n }\n if (depth <= 0) return `${d.tag}(\u2026)`\n const kids = childrenOf(d).map(k => render(k, depth - 1))\n switch (d.tag) {\n case 'sequence': return `sequence(${kids.join(', ')})`\n case 'choice': return `choice(${kids.join(', ')})`\n case 'dispatch': {\n const arms = d.cases.map((c, i) => `when([${c.keys.map(k => JSON.stringify(k)).join(', ')}], ${kids[i + 1] ?? ''})`)\n if (d.otherwise !== undefined) arms.push(`otherwise(${kids[kids.length - 1] ?? ''})`)\n return `dispatch(${kids[0] ?? ''}, ${arms.join(', ')})`\n }\n case 'node': return `node(${d.type ? `'${d.type}', ` : ''}${kids[0] ?? ''})`\n case 'label': return `label('${d.label}', ${kids[0] ?? ''})`\n case 'field': return `field('${d.name}', ${kids[0] ?? ''})`\n case 'many': return `many(${kids[0] ?? ''}${d.min === 0 && d.max === undefined ? '' : `, { min: ${d.min}${d.max === undefined ? '' : `, max: ${d.max}`} }`})`\n case 'oneOrMore': return `oneOrMore(${kids[0] ?? ''}${d.min === 1 && d.max === undefined ? '' : `, { min: ${d.min}${d.max === undefined ? '' : `, max: ${d.max}`} }`})`\n case 'sepBy': return `sepBy(${kids[0] ?? ''}, ${kids[1] ?? ''})`\n default: return `${d.tag}(${kids.join(', ')})`\n }\n}\n\nconst clamp = (s: string): string => (s.length <= MAX_RENDER ? s : `${s.slice(0, MAX_RENDER - 1)}\u2026`)\n\n/** Path segment for a child index, used to build `Site.path` and slot paths. */\nfunction segment(d: ParserDef, index: number): string {\n switch (d.tag) {\n case 'sequence': return `seq[${index}]`\n case 'choice': return `choice[${index}]`\n case 'dispatch':\n if (index === 0) return 'dispatch.selector'\n if (index <= d.cases.length) return `dispatch.when[${index - 1}]`\n return 'dispatch.otherwise'\n case 'node': return `node(${d.type ?? ''})`\n case 'label': return `label(${d.label})`\n case 'field': return `field(${d.name})`\n case 'sepBy': return index === 0 ? 'sepBy.item' : 'sepBy.sep'\n case 'skip': return index === 0 ? 'skip.main' : 'skip.skipped'\n case 'recover': return index === 0 ? 'recover.body' : 'recover.sentinel'\n case 'scanTo': return index === 0 ? 'scanTo.sentinel' : `scanTo.skip[${index - 1}]`\n default: return d.tag\n }\n}\n\n// \u2500\u2500 regex source: alternation runs + keyword shape \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * Every alternation branch list in a regex source, at ANY nesting depth. Depth\n * matters: `/a|b/` and `/x(?:a|b)y/` re-spell the same run, and only one of them\n * has it at top level.\n */\nexport function alternationGroups(src: string): string[][] {\n const out: string[][] = []\n type Frame = { branches: string[]; last: number }\n const stack: Frame[] = [{ branches: [], last: 0 }]\n let i = 0\n while (i < src.length) {\n const c = src[i]!\n if (c === '\\\\') { i += 2; continue }\n if (c === '[') {\n let j = i + 1\n if (src[j] === '^') j++\n if (src[j] === ']') j++\n while (j < src.length && src[j] !== ']') { if (src[j] === '\\\\') j++; j++ }\n i = j + 1\n continue\n }\n if (c === '(') {\n let open = i + 1\n if (src[open] === '?') {\n const rest = src.slice(open)\n const m = /^\\?(?::|=|!|<=|<!|<[^>]*>)/.exec(rest)\n open += m ? m[0].length : 1\n }\n stack.push({ branches: [], last: open })\n i = open\n continue\n }\n if (c === ')') {\n const top = stack.pop()\n if (top !== undefined) {\n top.branches.push(src.slice(top.last, i))\n if (top.branches.length >= 2) out.push(top.branches)\n }\n i++\n continue\n }\n if (c === '|') {\n const top = stack[stack.length - 1]!\n top.branches.push(src.slice(top.last, i))\n top.last = i + 1\n i++\n continue\n }\n i++\n }\n const root = stack[0]!\n root.branches.push(src.slice(root.last))\n if (root.branches.length >= 2) out.push(root.branches)\n return out\n}\n\n/**\n * A LITERAL word: letters, digits, `_`, `-`, optionally vendor-prefixed. No\n * character class, no quantifier, no escape, no group \u2014 anything with regex\n * machinery in it is a pattern, not a vocabulary entry, and is left alone.\n */\nconst WORD_RE_SRC = '-?[A-Za-z][A-Za-z0-9_-]*'\nconst WORDS_RE = new RegExp(`^${WORD_RE_SRC}(?:\\\\|${WORD_RE_SRC})*$`)\n\n/**\n * How many literal alternatives make a regex a VOCABULARY rather than a pattern,\n * when there is no boundary guard to mark it as a keyword. With a guard, one word\n * is already enough (`regex(/not(?![-\\w])/)`); without one, two alternatives are\n * as likely to be an ordinary either/or as a keyword set, so the bar is three.\n */\nconst VOCABULARY_MIN_WORDS = 3\n\n/**\n * Recognize a `regex()` that hand-rolls what `word()`/`keywords()` owns.\n *\n * TWO shapes, because they fail differently:\n *\n * - a word (or word alternation) plus a trailing word-boundary guard \u2014\n * `regex(/not(?![-\\w])/i)`;\n * - a bare alternation of >= 3 literal words with NO guard \u2014 a fixed vocabulary\n * enumerated by hand. A regex enumerating a fixed vocabulary is a keyword set\n * written the hard way: it loses first-set gating, it hand-maintains an ordering\n * the combinator guarantees, and with `/i` and no `/u` it inherits the non-ASCII\n * case-folding bug `keywords()` fixes internally. The no-guard form is also where\n * ordering is load-bearing, since nothing backtracks past a shorter match.\n *\n * Returns the words and the boundary CLASS in the exact form `word(str, boundary)` /\n * `keywords(words, { boundary })` take, so the suggestion names a real call rather\n * than describing one.\n */\nexport function keywordRegexShape(source: string): { words: string[]; boundary: string | null } | null {\n let s = source\n if (s.startsWith('^')) s = s.slice(1)\n // A leading `(?<![-\\w])` is the same boundary on the other side \u2014 word()/keywords()\n // do not emit it, but its presence does not stop the body from being a keyword.\n s = s.replace(/^\\(\\?<!\\[[^\\]]+\\]\\)/, '')\n let boundary: string | null = null\n // Peel a trailing boundary guard.\n const tail = /(?:\\(\\?!\\[([^\\]]+)\\]\\)|\\\\b)$/.exec(s)\n if (tail !== null) {\n const cls = tail[1]\n // `(?![^-\\w])` is NOT a boundary guard \u2014 a negative lookahead of a NEGATED\n // class asserts the opposite, that the next char IS in the class. The capture\n // keeps the leading `^`, so passing it on would hand `word(str, boundary)` a\n // class meaning the reverse, and `boundaryMatches` would read `^` as a literal\n // member and return the inverted verdict. `bug` is derived from unrescued\n // hazards, so that inversion can invent or hide a BUG in error mode. The shape\n // is simply not expressible as a `boundary` argument: reject it.\n if (cls !== undefined && cls.startsWith('^')) return null\n boundary = cls ?? '_0-9A-Za-z'\n s = s.slice(0, tail.index)\n }\n // Unwrap one redundant non-capturing group around the word set.\n const grouped = /^\\(\\?:([^()]*)\\)$/.exec(s)\n if (grouped !== null) s = grouped[1]!\n if (s.endsWith('$')) s = s.slice(0, -1)\n if (!WORDS_RE.test(s)) return null\n const words = s.split('|')\n if (boundary === null && words.length < VOCABULARY_MIN_WORDS) return null\n return { words, boundary }\n}\n\n/** Does a boundary class (`-\\w`, `_0-9A-Za-z`, \u2026) match this character? */\nfunction boundaryMatches(boundary: string, ch: string): boolean {\n const cp = ch.codePointAt(0)!\n for (const m of charClassMembers(boundary)) {\n if (m === '\\\\w') { if (/[A-Za-z0-9_]/.test(ch)) return true; continue }\n if (m === '\\\\d') { if (/[0-9]/.test(ch)) return true; continue }\n if (m === '\\\\s') { if (/\\s/.test(ch)) return true; continue }\n const range = /^(.|\\\\u[0-9a-f]{4})-(.|\\\\u[0-9a-f]{4})$/.exec(m)\n if (range !== null) {\n const dec = (t: string): number => (t.startsWith('\\\\u') ? parseInt(t.slice(2), 16) : t.codePointAt(0)!)\n if (cp >= dec(range[1]!) && cp <= dec(range[2]!)) return true\n continue\n }\n if (m === ch) return true\n }\n return false\n}\n\n/**\n * Ordering hazards in a hand-written alternation: an EARLIER alternative that is a\n * strict prefix of a LATER one. Regex alternation is first-match, not longest-match,\n * so `red|redish` matches only `red` \u2014 unless a trailing boundary guard rejects the\n * character that follows, which makes the engine backtrack into the longer branch.\n *\n * That distinction is the whole point of reporting this: without a rescuing guard the\n * longer word is UNREACHABLE, which is a live bug, not a style finding. `keywords()`\n * sorts longest-first by construction and the hazard cannot exist there at all.\n */\nexport function keywordAlternationHazards(\n words: readonly string[],\n boundary: string | null,\n): { shorter: string; longer: string; at: string; rescuedByBoundary: boolean }[] {\n const out: { shorter: string; longer: string; at: string; rescuedByBoundary: boolean }[] = []\n for (let i = 0; i < words.length; i++) {\n for (let j = i + 1; j < words.length; j++) {\n const a = words[i]!, b = words[j]!\n if (a.length >= b.length || !b.startsWith(a)) continue\n const at = b[a.length]!\n out.push({ shorter: a, longer: b, at, rescuedByBoundary: boundary !== null && boundaryMatches(boundary, at) })\n }\n }\n return out\n}\n\n// \u2500\u2500 the walk \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport function analyzeDuplication(\n entry: Combinator<unknown>,\n opts?: AnalyzeDuplicationOptions,\n): DuplicationReport {\n return analyzeDuplicationRules([[ruleNameOf(entry) ?? opts?.entryName ?? '<entry>', entry]], opts)\n}\n\ntype Visited = {\n p: Combinator<unknown>\n d: ParserDef\n site: Site\n shape: number\n size: number\n /** Nearest enclosing `node()` type, if any. A rewrite under one changes the\n * children that node's build fn sees, which is the AST-neutrality question. */\n enclosingNode: string | null\n /** An enclosing `node()`/`transform()`/`leaf()` carries a REDUCER \u2014 a callback\n * that reads the children array. Any rewrite changing that array's length or\n * stride changes what the callback sees. */\n enclosingReducer: boolean\n}\n\n/**\n * The analysis input is the COMBINATOR TREE \u2014 a `rules()` map, or the map handed to\n * `compileRuleMap`/`compileLinkable`. It is NOT the value `compose()` returns: that\n * is a fused, already-compiled artifact whose entries are emitted parse FUNCTIONS\n * with no `_def` to walk.\n *\n * This is checked, loudly, because the alternative failure mode is the one that\n * matters. `analyzeGating()` handed a composed artifact throws deep inside its\n * walker on the first descriptor-less node \u2014 and a diagnostic that can throw or\n * silently report zero on exactly the grammars it exists to serve is worse than no\n * diagnostic, because a clean run reads as \"no findings\" instead of \"saw nothing\".\n * Silence is not a permitted outcome here.\n */\nfunction assertAnalyzable(ruleMap: ReadonlyArray<readonly [string, Combinator<unknown>]>): void {\n for (const [name, rule] of ruleMap) {\n const def = (rule as { _def?: unknown } | null | undefined)?._def\n if (def !== null && typeof def === 'object' && typeof (def as { tag?: unknown }).tag === 'string') continue\n throw new TypeError(\n `analyzeDuplicationRules: rule '${name}' is not a combinator (no _def). ` +\n `This analysis walks the COMBINATOR TREE; the value returned by compose()/composeLeaf() is a ` +\n `fused, already-compiled artifact whose entries are parse functions. Pass the rules() map itself ` +\n `(or the map given to compileRuleMap/compileLinkable) instead \u2014 for a composed grammar, analyze ` +\n `each piece's own rules() map.`,\n )\n }\n}\n\nexport function analyzeDuplicationRules(\n ruleMap: ReadonlyArray<readonly [string, Combinator<unknown>]>,\n opts?: AnalyzeDuplicationOptions,\n): DuplicationReport {\n assertAnalyzable(ruleMap)\n const minSize = opts?.minSize ?? 3\n const maxFindings = opts?.maxFindings ?? 25\n const interner = new Interner()\n\n const shapeCache = new Map<Combinator<unknown>, number>()\n const sizeCache = new Map<Combinator<unknown>, number>()\n\n const shapeOf = (p: Combinator<unknown>): number => {\n const hit = shapeCache.get(p)\n if (hit !== undefined) return hit\n const d = p._def as ParserDef\n // Seed against self-reference before recursing (a `lazy` is a leaf, so a true\n // cycle cannot form here \u2014 but a defensive seed keeps a malformed def finite).\n shapeCache.set(p, interner.hole)\n const kids = childrenOf(d)\n const id = interner.of(`${payloadKey(p, d)}|${kids.map(shapeOf).join(',')}`)\n shapeCache.set(p, id)\n return id\n }\n const sizeOf = (p: Combinator<unknown>): number => {\n const hit = sizeCache.get(p)\n if (hit !== undefined) return hit\n sizeCache.set(p, 1)\n let n = 1\n for (const k of childrenOf(p._def as ParserDef)) n += sizeOf(k)\n sizeCache.set(p, n)\n return n\n }\n\n // \u2500\u2500 traverse: one entry per distinct combinator INSTANCE \u2500\u2500\n const visited = new Map<Combinator<unknown>, Visited>()\n const visit = (p: Combinator<unknown>, rule: string, path: string, enclosingNode: string | null, enclosingReducer: boolean): void => {\n if (visited.has(p)) return\n const d = p._def as ParserDef\n const own = ruleNameOf(p)\n const here = own !== undefined && own !== rule ? { rule: own, path: '' } : { rule, path }\n visited.set(p, { p, d, site: here, shape: shapeOf(p), size: sizeOf(p), enclosingNode, enclosingReducer })\n const inner = d.tag === 'node' ? d.type ?? '(anonymous)' : enclosingNode\n const innerReducer = enclosingReducer\n || (d.tag === 'node' && (d.build !== undefined || d.buildSrc !== undefined))\n || d.tag === 'transform' || d.tag === 'leaf'\n const kids = childrenOf(d)\n kids.forEach((k, i) => {\n const seg = segment(d, i)\n visit(k, here.rule, here.path === '' ? seg : `${here.path} \u203A ${seg}`, inner, innerReducer)\n })\n // Follow refs so a rule reachable only through one is still attributed \u2014 under\n // its OWN name, because the ref carries `_ruleName`.\n if (d.tag === 'lazy') {\n try {\n const target = (d as { thunk(): Combinator<unknown> }).thunk()\n visit(target, ruleNameOf(target) ?? ruleNameOf(p) ?? here.rule, '', null, false)\n } catch { /* unresolved cross-artifact hole */ }\n }\n }\n for (const [name, root] of ruleMap) visit(root, ruleNameOf(root) ?? name, '', null, false)\n\n const accept = new Set(opts?.accept ?? [])\n const used = new Set<string>()\n const keep = <T extends { id: string }>(f: T): boolean => {\n if (!accept.has(f.id)) return true\n used.add(f.id)\n return false\n }\n\n const duplicates = findExactDuplicates(visited, minSize)\n const nearDuplicates = findNearDuplicates(visited, interner, shapeOf, minSize)\n const regexFragments = findRegexFragments(visited)\n const regexClasses = findRegexClasses(visited)\n const overlaps = findOverlaps(visited, shapeOf, opts?.resolveRef)\n const rewrites = findRewrites(visited, shapeOf)\n const divergentNodes = findDivergentNodes(visited, shapeOf)\n const structureLoss = findStructureLoss(visited, opts?.resolveRef)\n const keywordRegexes = findKeywordRegexes(visited)\n\n // Subsumption, WITHIN each category: a 40-node clone family otherwise reports\n // once at its root and again at every internal node, since each of those is\n // repeated exactly as often. Deliberately NOT applied across categories \u2014 a\n // near-duplicate family and an exact duplicate inside it are two different facts\n // about the same code, and suppressing the second because the first happens to\n // rank higher hides a real repetition behind a maybe-refactor.\n const subsume = <T extends { id: string; savings: number; _members: Combinator<unknown>[] }>(fs: T[]): Set<string> => {\n const covered = new Set<Combinator<unknown>>()\n const surviving = new Set<string>()\n for (const f of [...fs].sort((a, b) => b.savings - a.savings)) {\n if (f._members.every(m => covered.has(m))) continue\n surviving.add(f.id)\n for (const m of f._members) markSubtree(m, covered)\n }\n return surviving\n }\n const survivingExact = subsume(duplicates)\n const survivingNear = subsume(nearDuplicates)\n\n const report: DuplicationReport = {\n duplicates: duplicates.filter(f => survivingExact.has(f.id)).filter(keep).slice(0, maxFindings).map(stripMembers),\n nearDuplicates: nearDuplicates.filter(f => survivingNear.has(f.id)).filter(keep).slice(0, maxFindings).map(stripMembers),\n regexFragments: regexFragments.filter(keep).slice(0, maxFindings),\n regexClasses: regexClasses.filter(keep).slice(0, maxFindings),\n overlaps: overlaps.filter(keep).slice(0, maxFindings),\n rewrites: rewrites.filter(keep).slice(0, maxFindings),\n divergentNodes: divergentNodes.filter(keep).slice(0, maxFindings),\n structureLoss: structureLoss.filter(keep).slice(0, maxFindings),\n keywordRegexes: keywordRegexes.filter(keep).slice(0, maxFindings),\n acceptedUnused: [...accept].filter(id => !used.has(id)),\n stats: { rules: ruleMap.length, nodes: visited.size, shapes: new Set([...visited.values()].map(v => v.shape)).size },\n }\n return report\n}\n\nfunction markSubtree(p: Combinator<unknown>, into: Set<Combinator<unknown>>): void {\n if (into.has(p)) return\n into.add(p)\n for (const k of childrenOf(p._def as ParserDef)) markSubtree(k, into)\n}\n\ntype WithMembers<T> = T & { _members: Combinator<unknown>[] }\nconst stripMembers = <T extends object>(f: WithMembers<T>): T => {\n const { _members, ...rest } = f\n void _members\n return rest as T\n}\n\n// \u2500\u2500 1. exact duplicates \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction findExactDuplicates(\n visited: Map<Combinator<unknown>, Visited>,\n minSize: number,\n): WithMembers<DuplicateFinding>[] {\n const byShape = new Map<number, Visited[]>()\n for (const v of visited.values()) {\n if (v.size < minSize) continue\n const list = byShape.get(v.shape)\n if (list === undefined) byShape.set(v.shape, [v]); else list.push(v)\n }\n const out: WithMembers<DuplicateFinding>[] = []\n for (const group of byShape.values()) {\n if (group.length < 2) continue\n const size = group[0]!.size\n out.push({\n kind: 'exact-duplicate',\n id: `exact-duplicate:${siteToString(group[0]!.site)}`,\n size,\n count: group.length,\n savings: (group.length - 1) * size,\n shape: clamp(render(group[0]!.p)),\n sites: group.map(g => g.site),\n suggestion: `${group.length} DISTINCT instances build this identical ${size}-node shape. Bind it to one const and reference that \u2014 hoisting removes ${(group.length - 1) * size} nodes and makes a future edit land in one place instead of ${group.length}.`,\n _members: group.map(g => g.p),\n })\n }\n return out.sort((a, b) => b.savings - a.savings)\n}\n\n// \u2500\u2500 2. near duplicates (identical but for one slot) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * \"Same shape, one differing slot\" is decided by HOLE KEYS: the key of a subtree\n * with one descendant position blanked. Two subtrees that differ at exactly one\n * position share exactly the hole key that blanks it, so grouping by hole key and\n * keeping the groups whose members' full shapes DIFFER is precisely the family.\n *\n * The root hole is excluded \u2014 blanking the root makes every subtree in the grammar\n * a \"near duplicate\" of every other.\n */\nfunction findNearDuplicates(\n visited: Map<Combinator<unknown>, Visited>,\n interner: Interner,\n shapeOf: (p: Combinator<unknown>) => number,\n minSize: number,\n): WithMembers<NearDuplicateFinding>[] {\n const holeCache = new Map<Combinator<unknown>, number[]>()\n const holesOf = (p: Combinator<unknown>): number[] => {\n const hit = holeCache.get(p)\n if (hit !== undefined) return hit\n holeCache.set(p, [])\n const d = p._def as ParserDef\n const kids = childrenOf(d)\n const kidShapes = kids.map(shapeOf)\n const payload = payloadKey(p, d)\n const out: number[] = []\n kids.forEach((k, i) => {\n for (const inner of [interner.hole, ...holesOf(k)]) {\n const arr = kidShapes.slice()\n arr[i] = inner\n out.push(interner.of(`${payload}|${arr.join(',')}`))\n }\n })\n holeCache.set(p, out)\n return out\n }\n\n const byHole = new Map<number, Visited[]>()\n for (const v of visited.values()) {\n if (v.size < minSize) continue\n for (const h of holesOf(v.p)) {\n const list = byHole.get(h)\n if (list === undefined) byHole.set(h, [v]); else list.push(v)\n }\n }\n\n const out: WithMembers<NearDuplicateFinding>[] = []\n const seenGroups = new Set<string>()\n for (const group of byHole.values()) {\n if (group.length < 2) continue\n // Exact duplicates share every hole key \u2014 they are the OTHER family.\n const shapes = new Set(group.map(g => g.shape))\n if (shapes.size < 2) continue\n // One representative per distinct shape: N copies of variant A and M of variant\n // B is one clone family with two variants, not N\u00D7M findings.\n const perShape = new Map<number, Visited>()\n for (const g of group) if (!perShape.has(g.shape)) perShape.set(g.shape, g)\n const members = [...perShape.values()]\n const key = members.map(m => m.shape).sort((a, b) => a - b).join(',')\n if (seenGroups.has(key)) continue\n seenGroups.add(key)\n const slot = findDivergentSlot(members.map(m => m.p), shapeOf)\n if (slot === null) continue\n const sharedSize = Math.min(...members.map(m => m.size)) - slot.slotSize\n if (sharedSize < minSize) continue\n out.push({\n kind: 'near-duplicate',\n id: `near-duplicate:${siteToString(members[0]!.site)}`,\n sharedSize,\n count: members.length,\n savings: (members.length - 1) * sharedSize,\n shape: clamp(renderWithHole(members[0]!.p, slot.path)),\n slotPath: slot.path.map((i, k) => segment(slot.defs[k]!, i)).join(' \u203A '),\n variants: slot.variants.map(v => clamp(render(v))),\n sites: members.map(m => m.site),\n suggestion: `${members.length} productions share this ${sharedSize}-node scaffolding and differ ONLY at \\`${slot.path.map((i, k) => segment(slot.defs[k]!, i)).join(' \u203A ')}\\`. That is one production whose varying slot is a \\`choice(${slot.variants.map(v => clamp(render(v, 1))).join(', ')})\\` \u2014 not ${members.length} copies of the scaffolding. Re-check the AST: a single production emits one node type where the clones may emit several.`,\n _members: members.map(m => m.p),\n })\n }\n return out.sort((a, b) => b.savings - a.savings)\n}\n\n/** The single child position at which the given subtrees diverge, if there is one. */\nfunction findDivergentSlot(\n members: readonly Combinator<unknown>[],\n shapeOf: (p: Combinator<unknown>) => number,\n): { path: number[]; defs: ParserDef[]; variants: Combinator<unknown>[]; slotSize: number } | null {\n const path: number[] = []\n const defs: ParserDef[] = []\n let cur = [...members]\n for (let guard = 0; guard < 64; guard++) {\n const d0 = cur[0]!._def as ParserDef\n const kidLists = cur.map(c => childrenOf(c._def as ParserDef))\n const arity = kidLists[0]!.length\n if (kidLists.some(k => k.length !== arity) || arity === 0) break\n const diff: number[] = []\n for (let i = 0; i < arity; i++) {\n const s = shapeOf(kidLists[0]![i]!)\n if (kidLists.some(k => shapeOf(k[i]!) !== s)) diff.push(i)\n }\n if (diff.length !== 1) break\n const i = diff[0]!\n path.push(i)\n defs.push(d0)\n cur = kidLists.map(k => k[i]!)\n // Descend while the divergence is still a single slot; stop when the subtrees\n // are wholly different (that IS the varying slot).\n const nextArity = childrenOf(cur[0]!._def as ParserDef).length\n const samePayload = cur.every(c => payloadKey(c, c._def as ParserDef) === payloadKey(cur[0]!, cur[0]!._def as ParserDef))\n if (!samePayload || nextArity === 0) break\n }\n if (path.length === 0) return null\n let slotSize = 0\n const sizeOf = (p: Combinator<unknown>): number => {\n let n = 1\n for (const k of childrenOf(p._def as ParserDef)) n += sizeOf(k)\n return n\n }\n for (const c of cur) slotSize = Math.max(slotSize, sizeOf(c))\n return { path, defs, variants: cur, slotSize }\n}\n\nfunction renderWithHole(p: Combinator<unknown>, path: readonly number[], depth = 0): string {\n if (depth === path.length) return '\\u2039slot\\u203a'\n const d = p._def as ParserDef\n const kids = childrenOf(d)\n const idx = path[depth]!\n const parts = kids.map((k, i) => (i === idx ? renderWithHole(k, path, depth + 1) : render(k, 2)))\n switch (d.tag) {\n case 'sequence': return `sequence(${parts.join(', ')})`\n case 'choice': return `choice(${parts.join(', ')})`\n case 'node': return `node(${d.type ? `'${d.type}', ` : ''}${parts[0] ?? ''})`\n default: return `${d.tag}(${parts.join(', ')})`\n }\n}\n\n// \u2500\u2500 3. regex alternation fragments \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Longest contiguous branch window compared across regexes. Windows shorter than\n * the true maximal shared run are dropped by the containment pass below, so this\n * only has to be long enough to REACH the maximal run \u2014 a whole shared alternation\n * list is additionally offered as one candidate, however long it is. */\nconst MAX_RUN = 32\n\nfunction findRegexFragments(visited: Map<Combinator<unknown>, Visited>): RegexFragmentFinding[] {\n type Occurrence = { site: Site; source: string }\n const byRun = new Map<string, { occ: Occurrence[]; nodes: Set<Combinator<unknown>>; branches: number }>()\n for (const v of visited.values()) {\n const d = v.d\n if (d.tag !== 'regex') continue\n const runs = new Set<string>()\n for (const branches of alternationGroups(d.source)) {\n if (branches.length >= 2) runs.add(branches.join('|'))\n for (let i = 0; i < branches.length; i++) {\n for (let n = 2; n <= Math.min(MAX_RUN, branches.length - i); n++) {\n const run = branches.slice(i, i + n).join('|')\n if (run.length < 4) continue\n runs.add(run)\n }\n }\n }\n for (const run of runs) {\n let e = byRun.get(run)\n if (e === undefined) { e = { occ: [], nodes: new Set(), branches: run.split('|').length }; byRun.set(run, e) }\n if (e.nodes.has(v.p)) continue\n e.nodes.add(v.p)\n e.occ.push({ site: v.site, source: d.source })\n }\n }\n const candidates = [...byRun.entries()]\n .filter(([, e]) => e.occ.length >= 2)\n .map(([run, e]) => ({ run, e, savings: (e.occ.length - 1) * run.length }))\n // COUNT first: \"re-spelled in 7 terminals\" is the headline \u2014 it is the number\n // of places an edit has to land, and the number of chances for one of them to\n // drift. Length only breaks ties.\n .sort((a, b) => b.e.occ.length - a.e.occ.length || b.savings - a.savings || b.run.length - a.run.length)\n\n // Keep only MAXIMAL runs: a 6-branch run that occurs 7\u00D7 makes its own 5-branch\n // sub-runs (also 7\u00D7) noise.\n const kept: typeof candidates = []\n for (const c of candidates) {\n if (kept.some(k => k.e.occ.length >= c.e.occ.length && (`|${k.run}|`).includes(`|${c.run}|`))) continue\n kept.push(c)\n }\n return kept.map(({ run, e }) => ({\n kind: 'regex-fragment' as const,\n id: `regex-fragment:${run}`,\n fragment: run,\n branches: e.branches,\n count: e.occ.length,\n savings: (e.occ.length - 1) * run.length,\n sources: e.occ.map(o => `/${o.source}/`),\n sites: e.occ.map(o => o.site),\n suggestion: `this ${e.branches}-branch alternation is re-spelled in ${e.occ.length} DISTINCT regex() terminals. Hoist it to one shared source string and interpolate it (\\`new RegExp(\\\\\\`\u2026\\\\\\${OP}\u2026\\\\\\`)\\`) or lift the shared part into its own terminal \u2014 an edit to the operator set currently has to land in ${e.occ.length} places, and the analysis cannot tell you when one of them drifts.`,\n }))\n}\n\n// \u2500\u2500 3b. character classes across regexes (and their DRIFT) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * Every `[...]` in a regex source, INCLUDING the ones inside boundary lookaheads\n * (`(?![-\\w])` yields `-\\w`) \u2014 those are the same duplication in a different\n * costume, and the same drift risk.\n */\nexport function extractCharClasses(src: string): string[] {\n const out: string[] = []\n let i = 0\n while (i < src.length) {\n const c = src[i]!\n if (c === '\\\\') { i += 2; continue }\n if (c !== '[') { i++; continue }\n let j = i + 1\n if (src[j] === '^') j++\n if (src[j] === ']') j++\n while (j < src.length && src[j] !== ']') { if (src[j] === '\\\\') j++; j++ }\n out.push(src.slice(i + 1, j))\n i = j + 1\n }\n return out\n}\n\n/**\n * Split a class body into normalized MEMBERS (`a-z`, `\\w`, `-`, `\u0080-\uFFFF`).\n * Non-ASCII literals are rewritten to `\\uXXXX` so a class typed with a raw `\uFFFF`\n * and one typed with `\uFFFF` compare equal \u2014 otherwise the diagnostic reports\n * drift that is only an editor's.\n */\nexport function charClassMembers(body: string): string[] {\n const esc = (ch: string): string => {\n const cp = ch.codePointAt(0)!\n return cp >= 0x80 ? `\\\\u${cp.toString(16).padStart(4, '0')}` : ch\n }\n const atoms: string[] = []\n let i = 0\n while (i < body.length) {\n if (body[i] === '\\\\') {\n // A code-point escape and the RAW character it denotes are the same member.\n // Missing this is not cosmetic: it splits one drifting family into two\n // clusters purely by which file's author typed the escape.\n const m = /^\\\\(?:u\\{([0-9a-fA-F]+)\\}|u([0-9a-fA-F]{4})|x([0-9a-fA-F]{2}))/.exec(body.slice(i))\n if (m !== null) {\n const cp = parseInt(m[1] ?? m[2] ?? m[3]!, 16)\n atoms.push(cp >= 0x80 ? `\\\\u${cp.toString(16).padStart(4, '0')}` : String.fromCodePoint(cp))\n i += m[0].length\n continue\n }\n atoms.push(body.slice(i, i + 2)); i += 2; continue\n }\n atoms.push(esc(body[i]!)); i++\n }\n const members: string[] = []\n for (let k = 0; k < atoms.length; k++) {\n if (k + 2 < atoms.length && atoms[k + 1] === '-' && atoms[k + 2] !== undefined) {\n members.push(`${atoms[k]}-${atoms[k + 2]}`)\n k += 2\n continue\n }\n members.push(atoms[k]!)\n }\n return members\n}\n\nconst CLASS_MIN_MEMBERS = 2\n\nfunction findRegexClasses(visited: Map<Combinator<unknown>, Visited>): RegexClassFinding[] {\n type Spelling = { source: string; members: string[]; key: string; nodes: Set<Combinator<unknown>>; sites: Site[] }\n const spellings = new Map<string, Spelling>()\n for (const v of visited.values()) {\n if (v.d.tag !== 'regex') continue\n for (const body of new Set(extractCharClasses(v.d.source))) {\n const members = charClassMembers(body)\n if (members.length < CLASS_MIN_MEMBERS) continue\n const key = [...new Set(members)].sort().join('\\u0001')\n let s = spellings.get(key)\n if (s === undefined) { s = { source: body, members, key, nodes: new Set(), sites: [] }; spellings.set(key, s) }\n if (s.nodes.has(v.p)) continue\n s.nodes.add(v.p)\n s.sites.push(v.site)\n }\n }\n\n // Cluster spellings that differ by at most `MAX_DELTA` members while sharing a\n // clear majority \u2014 that relation is what makes DRIFT visible: two classes nobody\n // can tell apart by reading, one of which is wrong.\n const MAX_DELTA = 3\n /** Members shared / members in either. Below this the two classes are simply\n * different classes that happen to share a couple of characters \u2014 clustering\n * them would bury the real drift under coincidence. */\n const MIN_JACCARD = 0.6\n const all = [...spellings.values()]\n const parent = all.map((_, i) => i)\n const find = (i: number): number => { while (parent[i] !== i) { parent[i] = parent[parent[i]!]!; i = parent[i]! } return i }\n const union = (a: number, b: number): void => { const ra = find(a), rb = find(b); if (ra !== rb) parent[ra] = rb }\n for (let i = 0; i < all.length; i++) for (let j = i + 1; j < all.length; j++) {\n // A negated class and a positive one are opposites, never drift of each other.\n if (all[i]!.members.includes('^') !== all[j]!.members.includes('^')) continue\n const A = new Set(all[i]!.members), B = new Set(all[j]!.members)\n let shared = 0\n for (const m of A) if (B.has(m)) shared++\n const delta = (A.size - shared) + (B.size - shared)\n const jaccard = shared / (shared + delta)\n if (shared >= 2 && delta > 0 && delta <= MAX_DELTA && jaccard >= MIN_JACCARD) union(i, j)\n }\n const clusters = new Map<number, number[]>()\n all.forEach((_, i) => {\n const r = find(i)\n const list = clusters.get(r)\n if (list === undefined) clusters.set(r, [i]); else list.push(i)\n })\n\n const out: RegexClassFinding[] = []\n for (const idxs of clusters.values()) {\n const members = idxs.map(i => all[i]!).sort((a, b) => b.nodes.size - a.nodes.size)\n const total = members.reduce((n, m) => n + m.nodes.size, 0)\n const drifted = members.length > 1\n if (!drifted && total < 2) continue\n const base = new Set(members[0]!.members)\n const variants: RegexClassVariant[] = members.map(m => {\n const mine = new Set(m.members)\n const plus = [...mine].filter(x => !base.has(x))\n const minus = [...base].filter(x => !mine.has(x))\n return {\n source: m.source,\n delta: m === members[0]\n ? '(reference)'\n : `${plus.map(p => `+\\`${p}\\``).join(' ')}${plus.length > 0 && minus.length > 0 ? ' ' : ''}${minus.map(p => `-\\`${p}\\``).join(' ')}` || '(same members, different spelling)',\n count: m.nodes.size,\n sites: m.sites,\n }\n })\n const bmpCeiling = members.some(m => m.members.some(x => x.endsWith('-\\\\uffff')))\n out.push({\n kind: 'regex-class',\n id: `regex-class:${members[0]!.key}`,\n canonical: members[0]!.source,\n variants,\n count: total,\n drifted,\n bmpCeiling,\n suggestion: [\n drifted\n ? `${members.length} NEARLY-identical spellings of one class, across ${total} regex() terminals. They differ by ${variants.slice(1).map(v => v.delta).join('; ')} \u2014 which is drift, not intent, unless every difference is deliberate. Two classes this close cannot be told apart by reading, so one of them is probably wrong and the tests cannot say which.`\n : `this class is re-spelled in ${total} DISTINCT regex() terminals. Extract it once \u2014 a named sub-leaf, or an interpolated source constant \u2014 so a range fix lands in one place. Re-spelling is how the near-identical variants elsewhere in this report came to exist.`,\n `Prefer the shared recognition surface where one already covers this class rather than a local extraction.`,\n bmpCeiling\n ? `The class tops out at U+FFFF, so astral-plane characters (emoji, many CJK extensions) fall OUTSIDE it. Widening the ceiling is exactly the kind of edit that has to reach every spelling.`\n : '',\n `Single-regex hygiene (duplicate class members, obscure ranges, a missing \\`u\\` flag) is \\`eslint-plugin-regexp\\`'s job and is not duplicated here \u2014 it sees one regex at a time, which is why it cannot see this.`,\n ].filter(s => s !== '').join(' '),\n })\n }\n // Drift first: an exact re-spelling is a tidy-up, a near-match is a latent bug.\n return out.sort((a, b) => Number(b.drifted) - Number(a.drifted) || b.count - a.count)\n}\n\n// \u2500\u2500 4. choice-arm overlap \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction intersects(a: FirstSet, b: FirstSet): boolean {\n if (a.kind === 'any' || b.kind === 'any') return true\n if (a.kind === 'empty' || b.kind === 'empty') return false\n for (const ra of a.ranges) for (const rb of b.ranges) if (ra.lo <= rb.hi && rb.lo <= ra.hi) return true\n return false\n}\n\nfunction intersection(a: FirstSet, b: FirstSet): FirstSet {\n if (a.kind === 'any') return b\n if (b.kind === 'any') return a\n if (a.kind === 'empty' || b.kind === 'empty') return { kind: 'empty' }\n const ranges: { lo: number; hi: number }[] = []\n for (const ra of a.ranges) for (const rb of b.ranges) {\n const lo = Math.max(ra.lo, rb.lo)\n const hi = Math.min(ra.hi, rb.hi)\n if (lo <= hi) ranges.push({ lo, hi })\n }\n return ranges.length === 0 ? { kind: 'empty' } : { kind: 'ranges', ranges }\n}\n\n/** The arm's term list, for shared-prefix comparison (a non-sequence arm is one term). */\nfunction termsOf(arm: Combinator<unknown>): readonly Combinator<unknown>[] {\n let cur = arm\n for (;;) {\n const d = cur._def as ParserDef\n if (d.tag === 'node' || d.tag === 'transform' || d.tag === 'label' || d.tag === 'attempt' || d.tag === 'leaf') {\n cur = (d as { parser: Combinator<unknown> }).parser\n continue\n }\n break\n }\n const d = cur._def as ParserDef\n return d.tag === 'sequence' ? d.parsers : [cur]\n}\n\nfunction leadingRegex(arm: Combinator<unknown>): boolean {\n const t = termsOf(arm)[0]\n return t !== undefined && (t._def as ParserDef).tag === 'regex'\n}\n\nfunction findOverlaps(\n visited: Map<Combinator<unknown>, Visited>,\n shapeOf: (p: Combinator<unknown>) => number,\n resolve?: RefResolver,\n): ArmOverlapFinding[] {\n const out: ArmOverlapFinding[] = []\n for (const v of visited.values()) {\n const d = v.d\n if (d.tag !== 'choice') continue\n const arms = d.parsers\n const fs = arms.map(a => firstSetOf(a, new Set(), resolve))\n const strategy = d.strategy as { tag: string; members?: number[] } | undefined\n for (let i = 0; i < arms.length; i++) {\n for (let j = i + 1; j < arms.length; j++) {\n const A = fs[i]!, B = fs[j]!\n if (A.kind === 'any' || B.kind === 'any') continue // gating's `anyArms` owns that\n if (!intersects(A, B)) continue\n const ta = termsOf(arms[i]!), tb = termsOf(arms[j]!)\n let shared = 0\n while (shared < ta.length && shared < tb.length && shapeOf(ta[shared]!) === shapeOf(tb[shared]!)) shared++\n const handled = strategy?.tag === 'sharedPrefix'\n && Array.isArray(strategy.members) && strategy.members.includes(i) && strategy.members.includes(j)\n const regexPair = leadingRegex(arms[i]!) && leadingRegex(arms[j]!)\n out.push({\n kind: 'arm-overlap',\n id: `arm-overlap:${siteToString(v.site)}:${i}-${j}`,\n site: v.site,\n a: i, b: j,\n on: intersection(A, B),\n sharedLeadingTerms: shared,\n sharedPrefix: shared > 0 ? clamp(ta.slice(0, shared).map(t => render(t, 2)).join(', ')) : null,\n handledByStrategy: handled,\n regexPair,\n suggestion: overlapSuggestion(shared, handled, regexPair),\n })\n }\n }\n }\n return out.sort((a, b) => b.sharedLeadingTerms - a.sharedLeadingTerms)\n}\n\nfunction overlapSuggestion(shared: number, handled: boolean, regexPair: boolean): string {\n if (shared > 0 && handled)\n return `the arms spell ${shared} identical leading term(s). parseman's \\`sharedPrefix\\` strategy already recognizes that prefix ONCE at runtime, so this costs nothing at parse time \u2014 it is a READABILITY finding: left-factoring into \\`sequence(prefix, choice(\u2026))\\` says in the grammar what the compiler had to infer.`\n if (shared > 0)\n return `the arms spell ${shared} identical leading term(s) but do NOT qualify for the \\`sharedPrefix\\` strategy (it needs every arm to be a bare \\`sequence\\` starting with the same concrete terminal). Left-factor into \\`sequence(prefix, choice(\u2026))\\` \u2014 that both removes the re-spelling and lets the inner choice dispatch on its own first char.`\n if (regexPair)\n return `two regex() arms whose character classes intersect. Nothing dispatches between them: the first is tried, and on failure the second re-scans the same position. Two regexes that can start on the same char are usually one terminal \u2014 merge them, or make the distinction explicit with a leading literal.`\n return `the arms can start on the same character, so the choice cannot dispatch between them: on those chars the first arm is entered speculatively and rolled back before the second is tried. Give the arms disjoint leading terminals, or left-factor the common part out.`\n}\n\n// \u2500\u2500 5. algebraic rewrites \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst PERF_ARM = 'removes a speculative arm: on every input position reaching this choice, the deleted arm no longer costs a ctx save, a child-array push and a rollback before the surviving arm is tried. The saving scales with how often the choice is reached and how much the doomed arm consumes before failing.'\nconst PERF_NONE = ''\n\nfunction findRewrites(\n visited: Map<Combinator<unknown>, Visited>,\n shapeOf: (p: Combinator<unknown>) => number,\n): RewriteFinding[] {\n const out: RewriteFinding[] = []\n // `at` discriminates findings that a single site can produce MORE than one of.\n // Without it every `duplicate-arm`/`shadowed-arm` pair at one choice shares an\n // id, so accepting one pair silently suppresses the rest \u2014 and these are\n // `bug: true` findings that error mode is supposed to hold.\n const push = (f: Omit<RewriteFinding, 'kind' | 'id'>, at?: string): void => {\n const site = siteToString(f.site)\n out.push({ kind: 'rewrite', id: `rewrite:${f.rewrite}:${site}${at === undefined ? '' : `:${at}`}`, ...f })\n }\n\n for (const v of visited.values()) {\n const d = v.d\n const site = v.site\n\n // (a) idempotent nesting.\n if (d.tag === 'optional' || d.tag === 'many' || d.tag === 'oneOrMore') {\n const inner = (d as { parser: Combinator<unknown> }).parser\n const id = inner._def as ParserDef\n const collapsed = collapseRepeat(d, id)\n if (collapsed !== null) {\n push({\n rewrite: 'idempotent-nesting', site,\n from: clamp(render(v.p, 2)), to: collapsed,\n astNeutral: false,\n perf: 'the outer wrapper still runs its own bookkeeping (and, for `many(optional(X))`, guards a zero-width iteration on every pass) for a nullability the inner combinator already has.',\n bug: id.tag === 'optional' && d.tag === 'many',\n suggestion: `\\`${clamp(render(v.p, 2))}\\` is exactly \\`${collapsed}\\`. ${id.tag === 'optional' && d.tag === 'many' ? 'The nested form is also a zero-width-iteration hazard: the inner `optional` succeeds consuming nothing, which the repeat has to detect and break on every pass.' : ''} Candidate \u2014 verify AST identity: the collapsed form produces ONE level of array/undefined where the nested form produces two.`,\n })\n }\n }\n\n // (b) single-element choice/sequence.\n if ((d.tag === 'choice' || d.tag === 'sequence') && d.parsers.length === 1) {\n push({\n rewrite: 'single-element', site,\n from: clamp(render(v.p, 2)),\n to: d.tag === 'choice' ? clamp(render(d.parsers[0]!, 2)) : `${clamp(render(d.parsers[0]!, 2))} (note: sequence() of one still wraps its value in a 1-tuple)`,\n astNeutral: d.tag === 'choice',\n perf: d.tag === 'choice' ? 'a one-arm choice still emits its dispatch scaffolding.' : PERF_NONE,\n bug: false,\n suggestion: d.tag === 'choice'\n ? 'a `choice` with one arm IS that arm \u2014 the wrapper only adds dispatch scaffolding. Safe to unwrap (choice forwards its arm value unchanged).'\n : 'a `sequence` with one element only exists to build a 1-tuple. If nothing reads that tuple, drop the wrapper \u2014 CANDIDATE, verify AST identity first.',\n })\n }\n\n if (d.tag !== 'choice') continue\n const arms = d.parsers\n const armShapes = arms.map(shapeOf)\n const strategy = d.strategy as { tag: string; members?: number[] } | undefined\n\n // (c) duplicate arms \u2014 the later one is dead.\n for (let i = 0; i < arms.length; i++) for (let j = i + 1; j < arms.length; j++) {\n if (armShapes[i] !== armShapes[j]) continue\n push({\n rewrite: 'duplicate-arm', site,\n from: `choice(\u2026 arm[${i}] \u2026, arm[${j}] \u2026)`,\n to: `delete arm[${j}]`,\n astNeutral: true,\n perf: PERF_ARM,\n bug: true,\n suggestion: `arm[${i}] and arm[${j}] are the SAME shape (\\`${clamp(render(arms[i]!, 2))}\\`). Under ordered choice arm[${i}] always wins, so arm[${j}] is unreachable \u2014 delete it. This is AST-neutral by construction: an arm that can never be selected contributes nothing to any parse.`,\n }, `${i}-${j}`)\n }\n\n // (d) shadowed arm: an earlier arm is a strict TERM-PREFIX of a later one.\n for (let i = 0; i < arms.length; i++) for (let j = 0; j < arms.length; j++) {\n if (i >= j) continue\n if (armShapes[i] === armShapes[j]) continue\n const ta = termsOf(arms[i]!), tb = termsOf(arms[j]!)\n if (ta.length === 0 || ta.length >= tb.length) continue\n let k = 0\n while (k < ta.length && shapeOf(ta[k]!) === shapeOf(tb[k]!)) k++\n if (k !== ta.length) continue\n push({\n rewrite: 'shadowed-arm', site,\n from: `choice(\u2026 arm[${i}]=${clamp(render(arms[i]!, 2))}, \u2026 arm[${j}]=${clamp(render(arms[j]!, 2))} \u2026)`,\n to: `arm[${j}] is unreachable`,\n astNeutral: true,\n perf: PERF_ARM,\n bug: true,\n suggestion: `arm[${i}] is a strict prefix of arm[${j}] and comes FIRST. Whenever arm[${j}] would match, arm[${i}] also matches, and ordered choice commits to it \u2014 so arm[${j}] can never be selected. Either swap them (longest first) or fold arm[${j}]'s extra terms into arm[${i}] as \\`optional(\u2026)\\`. Verify by hand where a \\`not()\\`/\\`gate()\\` in arm[${i}] makes its success input-dependent in a way this static check cannot see.`,\n }, `${i}-${j}`)\n }\n\n // (e) optional prefix / suffix \u2014 `choice(sequence(A, R\u2026), R\u2026)` is `sequence(optional(A), R\u2026)`.\n for (let i = 0; i + 1 < arms.length; i++) {\n const j = i + 1\n const longer = termsOf(arms[i]!), shorter = termsOf(arms[j]!)\n const ordered = detectOptionalTerm(longer, shorter, shapeOf)\n const reversed = ordered === null ? detectOptionalTerm(shorter, longer, shapeOf) : null\n const hit = ordered ?? reversed\n if (hit === null) continue\n const nodeWrapped = v.enclosingNode ?? wrappingNodeType(arms[i]!) ?? wrappingNodeType(arms[j]!)\n const rest = hit.rest.map(t => render(t, 2)).join(', ')\n const to = hit.where === 'prefix'\n ? `sequence(optional(${render(hit.term, 2)}), ${rest})`\n : `sequence(${rest}, optional(${render(hit.term, 2)}))`\n push({\n rewrite: hit.where === 'prefix' ? 'optional-prefix' : 'optional-suffix',\n site,\n from: clamp(render(v.p, 2)),\n to: clamp(to),\n astNeutral: false,\n perf: PERF_ARM,\n bug: false,\n suggestion: `these two arms differ only by a ${hit.where === 'prefix' ? 'leading' : 'trailing'} \\`${clamp(render(hit.term, 2))}\\`, so the choice is exactly \\`${clamp(to)}\\` \u2014 same language, one arm instead of two.${reversed !== null ? ` NOTE THE ORDER: the shorter arm is FIRST, so under ordered choice the longer arm is only reachable when the shorter one fails \u2014 check that is what you meant.` : ''} CANDIDATE \u2014 verify AST identity before applying:${nodeWrapped === null ? '' : ` this sits under \\`node('${nodeWrapped}')\\`, and`} the two forms produce different child arrays (two children vs. one child plus an absent optional). If a build fn or a downstream consumer reads children positionally, the rewrite MOVES the tree.`,\n }, `${i}-${j}`)\n }\n\n // (f) left-factoring.\n for (let i = 0; i + 1 < arms.length; i++) {\n const j = i + 1\n const ta = termsOf(arms[i]!), tb = termsOf(arms[j]!)\n if (ta.length < 2 || tb.length < 2) continue\n let k = 0\n while (k < ta.length - 1 && k < tb.length - 1 && shapeOf(ta[k]!) === shapeOf(tb[k]!)) k++\n if (k === 0) continue\n const handled = strategy?.tag === 'sharedPrefix'\n && Array.isArray(strategy.members) && strategy.members.includes(i) && strategy.members.includes(j)\n push({\n rewrite: 'left-factor', site,\n from: `choice(sequence(${ta.map(t => render(t, 1)).join(', ')}), sequence(${tb.map(t => render(t, 1)).join(', ')}))`,\n to: clamp(`sequence(${ta.slice(0, k).map(t => render(t, 2)).join(', ')}, choice(sequence(${ta.slice(k).map(t => render(t, 1)).join(', ')}), sequence(${tb.slice(k).map(t => render(t, 1)).join(', ')})))`),\n astNeutral: false,\n perf: handled\n ? 'NONE \u2014 parseman\\'s `sharedPrefix` choice strategy already recognizes this prefix once and replays it, so the runtime cost is identical. This is a readability finding.'\n : PERF_ARM,\n bug: false,\n suggestion: `arm[${i}] and arm[${j}] spell the same ${k} leading term(s). ${handled ? 'The `sharedPrefix` strategy already collapses this AT RUNTIME, so left-factoring buys readability, not speed \u2014 but writing it out means the next reader does not have to trust the optimizer.' : 'Left-factor to `sequence(prefix, choice(tailA, tailB))`: the prefix is then recognized once and the inner choice dispatches on its own first char.'} CANDIDATE \u2014 verify AST identity: factoring nests the tails one level deeper in the value.`,\n }, `${i}-${j}`)\n }\n }\n\n // (g) hand-rolled sepBy \u2014 sequence(X, many(sequence(S, X))).\n for (const v of visited.values()) {\n if (v.d.tag !== 'sequence') continue\n const hit = detectHandRolledSepBy(v.d.parsers, shapeOf)\n if (hit === null) continue\n // Anywhere in the REPETITION, not just on the separator itself: a `field()`\n // wrapping the whole `sequence(sep, item)` is the same blocker.\n const captured = v.d.parsers.some(t => capturesPositionally(t))\n const verdict: SepByVerdict = captured ? 'blocked-by-capture' : v.enclosingReducer ? 'reducer-stride-review' : 'convertible'\n const to = `sepBy(${clamp(render(hit.item, 2))}, ${clamp(render(hit.sep, 2))}${hit.trailing ? `, { trailing: 'allow' }` : ''}, { min: ${hit.min} })`\n out.push({\n kind: 'rewrite',\n id: `rewrite:hand-rolled-sepby:${siteToString(v.site)}`,\n rewrite: 'hand-rolled-sepby',\n site: v.site,\n sepByVerdict: verdict,\n from: clamp(render(v.p, 3)),\n to: verdict === 'convertible' ? to : `${to} \u2014 NOT APPLICABLE HERE (${verdict})`,\n astNeutral: false,\n perf: verdict === 'convertible'\n ? 'the hand-rolled form allocates a tuple per repetition (`sequence(sep, item)`) and a wrapper array around them; `sepBy` builds the item list directly.'\n : PERF_NONE,\n bug: false,\n suggestion: `${SEPBY_SPELLED_OUT(hit.trailing)} ${SEPBY_VERDICT_TEXT[verdict](hit.trailing)}`,\n })\n }\n\n return out\n}\n\nfunction collapseRepeat(outer: ParserDef, inner: ParserDef): string | null {\n const o = outer.tag, i = inner.tag\n if (o === 'optional' && i === 'optional') return 'optional(X)'\n if (o === 'optional' && i === 'many') return 'many(X)'\n if (o === 'many' && i === 'many') return 'many(X)'\n if (o === 'many' && i === 'optional') return 'many(X)'\n if (o === 'optional' && i === 'oneOrMore' && inner.min === 1 && inner.max === undefined) return 'many(X)'\n if (o === 'many' && i === 'oneOrMore' && inner.min === 1 && inner.max === undefined) return 'many(X)'\n return null\n}\n\n/** `node()` type wrapping an arm, for the AST-neutrality caveat. */\nfunction wrappingNodeType(arm: Combinator<unknown>): string | null {\n const d = arm._def as ParserDef\n return d.tag === 'node' ? d.type ?? '(anonymous)' : null\n}\n\n/**\n * `longer` = `shorter` plus ONE extra term at the front or the back. That extra\n * term is exactly an `optional()`.\n */\nfunction detectOptionalTerm(\n longer: readonly Combinator<unknown>[],\n shorter: readonly Combinator<unknown>[],\n shapeOf: (p: Combinator<unknown>) => number,\n): { where: 'prefix' | 'suffix'; term: Combinator<unknown>; rest: readonly Combinator<unknown>[] } | null {\n if (longer.length !== shorter.length + 1 || shorter.length === 0) return null\n const same = (a: readonly Combinator<unknown>[], b: readonly Combinator<unknown>[]): boolean =>\n a.length === b.length && a.every((x, i) => shapeOf(x) === shapeOf(b[i]!))\n if (same(longer.slice(1), shorter)) return { where: 'prefix', term: longer[0]!, rest: shorter }\n if (same(longer.slice(0, -1), shorter)) return { where: 'suffix', term: longer[longer.length - 1]!, rest: shorter }\n return null\n}\n\nconst SEPBY_SPELLED_OUT = (trailing: boolean): string =>\n `this is \\`sepBy(item, sep${trailing ? \", { trailing: 'allow' }\" : ''})\\` spelled out.`\n\n/** The verdict text. Each says what to DO, and the blocked ones say why not. */\nconst SEPBY_VERDICT_TEXT: Record<SepByVerdict, (trailing: boolean) => string> = {\n 'blocked-by-capture': () =>\n 'BLOCKED: the repetition CAPTURES its separator (`field`/`label`), which `sepBy` cannot express \u2014 it yields items and discards separators, so byte-faithful layout replay is lost. Leave this site alone; read it as a parseman gap (a separator-capturing repeat), not as work.',\n 'reducer-stride-review': () =>\n 'NEEDS REVIEW, not conversion: an enclosing `node()`/`transform()` reducer reads this repetition\\'s children, and a left-associating reducer typically STRIDES BY TWO over `[item, sep, item, sep, \u2026]` and re-emits the operator text. `sepBy` yields a FLAT ITEM list with the separators gone, so the reducer has to be rewritten in the same change or the tree moves. Convert only together with the reducer.',\n convertible: (trailing: boolean) =>\n `No separator capture, and no enclosing reducer reads these children \u2014 this site is convertible. Beyond the ${trailing ? 'four' : 'three'} combinators it replaces, \\`sepBy\\` carries the right NULLABILITY: \\`min: 0\\` (the default) matches empty and does NOT gate as a choice arm, \\`min: 1\\` does \u2014 a distinction the hand-rolled shape leaves implicit and gets wrong silently. Still check the consumer: \\`sepBy\\` yields a flat item list where the hand-rolled form yields \\`[first, [[sep, item], \u2026]]\\`.`,\n}\n\n/**\n * Whether a hand-rolled separated list can ACTUALLY become `sepBy` \u2014 a verdict per\n * site, not a count. Reporting every match as convertible generates false work: on\n * the reference Less grammar only a minority are, and the rest are blocked for two\n * concrete, detectable reasons.\n */\nexport type SepByVerdict = 'convertible' | 'blocked-by-capture' | 'reducer-stride-review'\n\n/** Does this subtree capture anything positionally (`field`/`label`)? */\nfunction capturesPositionally(p: Combinator<unknown>, seen = new Set<Combinator<unknown>>()): boolean {\n if (seen.has(p)) return false\n seen.add(p)\n const d = p._def as ParserDef\n if (d.tag === 'field' || d.tag === 'label') return true\n for (const k of childrenOf(d)) if (capturesPositionally(k, seen)) return true\n return false\n}\n\n/** `sequence(X, many(sequence(S, X)) [, optional(S)])` \u2014 a `sepBy` written out. */\nfunction detectHandRolledSepBy(\n terms: readonly Combinator<unknown>[],\n shapeOf: (p: Combinator<unknown>) => number,\n): { item: Combinator<unknown>; sep: Combinator<unknown>; trailing: boolean; min: number } | null {\n if (terms.length < 2 || terms.length > 3) return null\n const item = terms[0]!\n const rep = terms[1]!._def as ParserDef\n if (rep.tag !== 'many' && rep.tag !== 'oneOrMore') return null\n if (rep.max !== undefined) return null\n const innerDef = rep.parser._def as ParserDef\n if (innerDef.tag !== 'sequence' || innerDef.parsers.length !== 2) return null\n const [sep, repeated] = innerDef.parsers as [Combinator<unknown>, Combinator<unknown>]\n if (shapeOf(repeated) !== shapeOf(item)) return null\n let trailing = false\n if (terms.length === 3) {\n const t = terms[2]!._def as ParserDef\n if (t.tag !== 'optional' || shapeOf(t.parser) !== shapeOf(sep)) return null\n trailing = true\n }\n // The leading item plus whatever the repetition itself requires. `rep.min` is\n // already RESOLVED for both tags (`many` defaults it to 0, `oneOrMore` to 1), so\n // one expression covers both \u2014 special-casing the tag dropped an explicit\n // `many(\u2026, { min: n })` back to 1 and under-reported the rewrite's bound.\n return { item, sep, trailing, min: 1 + rep.min }\n}\n\n// \u2500\u2500 5b. one node type, several divergent productions \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * The term list of a `node()`'s BODY. Peels more wrappers than `termsOf` \u2014 a\n * clone typically differs from its original by exactly such a wrapper\n * (`noTrivia(\u2026)` around the sequence), and that difference is the thing to see\n * through, not the thing to report.\n */\nfunction bodyTermsOf(p: Combinator<unknown>): readonly Combinator<unknown>[] {\n let cur = p\n for (;;) {\n const d = cur._def as ParserDef\n if (d.tag === 'node' || d.tag === 'grammar' || d.tag === 'transform' || d.tag === 'label'\n || d.tag === 'attempt' || d.tag === 'leaf' || d.tag === 'token' || d.tag === 'expect' || d.tag === 'field') {\n cur = (d as { parser: Combinator<unknown> }).parser\n continue\n }\n break\n }\n const d = cur._def as ParserDef\n return d.tag === 'sequence' ? d.parsers : [cur]\n}\n\n/** Terms must overlap this much before two productions count as variants of one\n * shape rather than two genuinely different constructs that share a node type. */\nconst MIN_SHARED_TERMS = 2\n\nfunction findDivergentNodes(\n visited: Map<Combinator<unknown>, Visited>,\n shapeOf: (p: Combinator<unknown>) => number,\n): DivergentNodeFinding[] {\n const byType = new Map<string, Map<number, Visited>>()\n for (const v of visited.values()) {\n if (v.d.tag !== 'node' || v.d.type === undefined) continue\n let m = byType.get(v.d.type)\n if (m === undefined) { m = new Map(); byType.set(v.d.type, m) }\n if (!m.has(v.shape)) m.set(v.shape, v)\n }\n\n const out: DivergentNodeFinding[] = []\n for (const [type, m] of byType) {\n if (m.size < 2) continue\n const members = [...m.values()]\n const termSets = members.map(v => bodyTermsOf(v.p).map(t => ({ id: shapeOf(t), text: clamp(render(t, 2)) })))\n // Shared = spelled by EVERY production. That is what makes them one shape.\n const shared = termSets[0]!.filter(t => termSets.every(set => set.some(x => x.id === t.id)))\n const uniqueShared = [...new Map(shared.map(t => [t.id, t])).values()]\n if (uniqueShared.length < MIN_SHARED_TERMS) continue\n const sharedIds = new Set(uniqueShared.map(t => t.id))\n out.push({\n kind: 'divergent-node',\n id: `divergent-node:${type}`,\n nodeType: type,\n count: members.length,\n sharedTerms: uniqueShared.map(t => t.text),\n productions: members.map((v, i) => ({\n shape: clamp(render(v.p, 3)),\n site: v.site,\n distinctTerms: termSets[i]!.filter(t => !sharedIds.has(t.id)).map(t => t.text),\n })),\n suggestion: `\\`${type}\\` is built by ${members.length} structurally different productions that nevertheless spell ${uniqueShared.length} identical term(s) (${uniqueShared.map(t => `\\`${t.text}\\``).join(', ')}) \u2014 they are variants of ONE shape, not ${members.length} constructs. Nothing keeps them in sync: an edit to the ${type} shape has to land in all ${members.length}, and no test fails when it lands in one. Fold them into a single production whose varying part is a \\`choice\\`, or, if the variants exist for a parse-order reason (a fast path tried first), say so at the definition \u2014 the cost of the split is that a reader cannot tell which it is.`,\n })\n }\n return out.sort((a, b) => b.sharedTerms.length * b.count - a.sharedTerms.length * a.count)\n}\n\n// \u2500\u2500 5c. an earlier arm that flattens what a later arm structures \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * Peel the wrappers that are REFERENTIAL or purely annotative, so an arm written\n * `g.FlatDecl` is compared as the production it names. `transform`/`leaf`/`token`\n * are deliberately NOT peeled: each of them collapses its interior to one value\n * on purpose, and treating a `leaf(node('X', \u2026))` as if it still produced an `X`\n * would invert the very question this analysis asks.\n */\nfunction resolveArm(p: Combinator<unknown>): Combinator<unknown> {\n let cur = p\n const seen = new Set<Combinator<unknown>>()\n for (;;) {\n if (seen.has(cur)) return cur\n seen.add(cur)\n const d = cur._def as ParserDef\n if (d.tag === 'label' || d.tag === 'attempt') { cur = d.parser; continue }\n if (d.tag === 'lazy') {\n try { cur = (d as { thunk(): Combinator<unknown> }).thunk(); continue }\n catch { return cur } // unresolved cross-artifact hole\n }\n return cur\n }\n}\n\n/**\n * The `node()` types this subtree can put INSIDE the tree, excluding its own root\n * wrapper. Refs are followed (the structure a declaration's value builds usually\n * lives behind `g.valueList`, and an analysis that stopped at the ref would report\n * every grammar as flat). `leaf()`/`token()` are opaque: they reduce their\n * interior to a single value, so nothing under one reaches the tree.\n */\nfunction nestedNodeTypes(\n root: Combinator<unknown>,\n out: Set<string>,\n seen: Set<Combinator<unknown>>,\n isRoot: boolean,\n): void {\n if (seen.has(root)) return\n seen.add(root)\n const d = root._def as ParserDef\n if (d.tag === 'leaf' || d.tag === 'token') return\n if (d.tag === 'node' && !isRoot) out.add(d.type ?? '(anonymous)')\n if (d.tag === 'lazy') {\n try { nestedNodeTypes((d as { thunk(): Combinator<unknown> }).thunk(), out, seen, false) }\n catch { /* unresolved cross-artifact hole */ }\n return\n }\n for (const k of childrenOf(d)) nestedNodeTypes(k, out, seen, false)\n}\n\n/** Most node types worth naming in one finding before it stops being a list. */\nconst MAX_LOST_TYPES = 8\n\nfunction findStructureLoss(\n visited: Map<Combinator<unknown>, Visited>,\n resolve?: RefResolver,\n): StructureLossFinding[] {\n const nestedCache = new Map<Combinator<unknown>, Set<string>>()\n const nested = (p: Combinator<unknown>): Set<string> => {\n const hit = nestedCache.get(p)\n if (hit !== undefined) return hit\n const out = new Set<string>()\n nestedNodeTypes(p, out, new Set(), true)\n nestedCache.set(p, out)\n return out\n }\n\n const findings: StructureLossFinding[] = []\n for (const v of visited.values()) {\n const d = v.d\n if (d.tag !== 'choice') continue\n const arms = d.parsers\n const resolved = arms.map(resolveArm)\n const nodeTypes = resolved.map(wrappingNodeType)\n const fs = arms.map(a => firstSetOf(a, new Set(), resolve))\n\n for (let i = 0; i < arms.length; i++) {\n // A GATED arm is selected by a runtime predicate, not by order alone. The\n // author has said which branch applies when; that is a deliberate split,\n // not a shadow, so it is not reported as a bug.\n if (d.gates[i] != null) continue\n const type = nodeTypes[i] ?? null\n if (type === null) continue\n // Only the arm that produces NO nested node is reported. \"Earlier arm is\n // strictly poorer than later arm\" is the same family, but grading it means\n // comparing two ref-reachable type sets, and in a recursive grammar the\n // later set reaches most of the grammar \u2014 so the graded rule fires on\n // almost every pair and stops being a signal. Empty-vs-nonempty needs no\n // threshold and is exactly the reported defect: a node over bare leaves.\n if (nested(resolved[i]!).size !== 0) continue\n const A = fs[i]!\n if (A.kind === 'any') continue // gating's `anyArms` owns the any-first-set case\n\n for (let j = i + 1; j < arms.length; j++) {\n if (nodeTypes[j] !== type) continue\n const B = fs[j]!\n // OVER-APPROXIMATION, and the one place this finding can be wrong. A shared\n // first character is NECESSARY for the earlier arm to shadow the later one,\n // not sufficient: two arms can both start on `-` and still accept disjoint\n // languages (`-webkit-x` vs `-5px`), in which case no input reaches both and\n // nothing is shadowed. Deciding \"do these two arms share an input\" is\n // language intersection, which is undecidable for a general CFG, so a\n // first-set test is the strongest decidable proxy available. The finding is\n // therefore \"these arms overlap on these characters, and IF an input reaches\n // both then structure is lost\" \u2014 which is what the suggestion text says, and\n // why a reader is pointed at the two shapes rather than handed a verdict.\n if (B.kind === 'any' || !intersects(A, B)) continue\n const lost = nested(resolved[j]!)\n if (lost.size === 0) continue\n const lostNodeTypes = [...lost].sort()\n findings.push({\n kind: 'structure-loss',\n id: `structure-loss:${siteToString(v.site)}:${i}-${j}`,\n site: v.site,\n nodeType: type,\n earlier: i,\n later: j,\n on: intersection(A, B),\n lostNodeTypes: lostNodeTypes.slice(0, MAX_LOST_TYPES),\n earlierShape: clamp(render(resolved[i]!, 3)),\n laterShape: clamp(render(resolved[j]!, 3)),\n suggestion: structureLossSuggestion(type, i, j, lostNodeTypes),\n })\n }\n }\n }\n return findings.sort((a, b) => b.lostNodeTypes.length - a.lostNodeTypes.length)\n}\n\nfunction structureLossSuggestion(\n type: string,\n i: number,\n j: number,\n lost: readonly string[],\n): string {\n const names = lost.slice(0, MAX_LOST_TYPES).map(t => `\\`${t}\\``).join(', ')\n const more = lost.length > MAX_LOST_TYPES ? ` (and ${lost.length - MAX_LOST_TYPES} more)` : ''\n return `arm[${i}] and arm[${j}] both build \\`${type}\\` and can start on the same character, so on every input BOTH accept, arm[${i}] wins \u2014 and arm[${i}] contains no \\`node()\\`, so it yields a \\`${type}\\` over bare leaves. arm[${j}] would have built ${names}${more} there. The parse still succeeds and the span is still right; only the tree shape changes, and only on the inputs arm[${i}] happens to accept \u2014 so a suite that asserts \"it parses\" and an output diff both stay green while every consumer of the tree (language service, formatter, refactor) silently loses those nodes on the commonest inputs. Decide which tree is the contract: if the structured one is, DELETE arm[${i}] or move it after arm[${j}]; if the flat one is, it must be flat for ALL inputs of this shape, not just the ones arm[${i}] matches \u2014 a fast path that is not tree-neutral is not a fast path.`\n}\n\n// \u2500\u2500 6. hand-rolled keyword regexes \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction findKeywordRegexes(visited: Map<Combinator<unknown>, Visited>): KeywordRegexFinding[] {\n // Sibling map: which choice arms are themselves hand-rolled keywords.\n const armIndexOf = new Map<Combinator<unknown>, { owner: Combinator<unknown>; index: number }>()\n for (const v of visited.values()) {\n if (v.d.tag !== 'choice') continue\n v.d.parsers.forEach((a, i) => {\n let cur = a\n for (;;) {\n const cd = cur._def as ParserDef\n if (cd.tag === 'node' || cd.tag === 'label' || cd.tag === 'transform' || cd.tag === 'leaf' || cd.tag === 'attempt') { cur = cd.parser; continue }\n break\n }\n armIndexOf.set(cur, { owner: v.p, index: i })\n })\n }\n const keywordArms = new Map<Combinator<unknown>, number[]>()\n for (const [arm, { owner }] of armIndexOf) {\n const d = arm._def as ParserDef\n if (d.tag !== 'regex' || keywordRegexShape(d.source) === null) continue\n const list = keywordArms.get(owner) ?? []\n list.push(armIndexOf.get(arm)!.index)\n keywordArms.set(owner, list)\n }\n\n const out: KeywordRegexFinding[] = []\n for (const v of visited.values()) {\n const d = v.d\n if (d.tag !== 'regex') continue\n const shape = keywordRegexShape(d.source)\n if (shape === null) continue\n const ci = d.flags.includes('i')\n const unicode = d.flags.includes('u') || d.flags.includes('v')\n const own = armIndexOf.get(v.p)\n const siblings = own === undefined ? [] : (keywordArms.get(own.owner) ?? []).filter(i => i !== own.index)\n const bq = (s: string): string => `'${s.replace(/\\\\/g, '\\\\\\\\')}'`\n const vocabulary = shape.words.length >= VOCABULARY_MIN_WORDS\n const hazards = keywordAlternationHazards(shape.words, shape.boundary)\n const unrescued = hazards.filter(h => !h.rescuedByBoundary)\n const longestFirst = shape.words.every((w, i) => i === 0 || shape.words[i - 1]!.length >= w.length)\n const shown = shape.words.length > 8 ? [...shape.words.slice(0, 6), '/* \u2026 */', shape.words[shape.words.length - 1]!] : shape.words\n const call = shape.words.length === 1\n ? `word(${bq(shape.words[0]!)}, ${bq(shape.boundary ?? '_0-9A-Za-z')}${ci ? ', { caseInsensitive: true }' : ''})`\n : `keywords([${shown.map(w => (w === '/* \u2026 */' ? w : bq(w))).join(', ')}], { boundary: ${bq(shape.boundary ?? '_0-9A-Za-z')}${ci ? ', caseInsensitive: true' : ''} })`\n out.push({\n kind: 'keyword-regex',\n id: `keyword-regex:${siteToString(v.site)}`,\n site: v.site,\n source: d.source,\n flags: d.flags,\n words: shape.words,\n boundary: shape.boundary,\n caseFoldRisk: ci && !unicode,\n siblingArms: siblings,\n vocabulary,\n longestFirst,\n hazards,\n bug: unrescued.length > 0,\n suggestion: [\n vocabulary\n ? `this regex enumerates a FIXED VOCABULARY of ${shape.words.length} literal words${shape.words.length > 20 ? ' \u2014 the alternation is long enough that nobody re-reads it' : ''}. A regex enumerating a fixed vocabulary is a keyword set written the hard way. Use \\`${call}\\` \u2014 it exposes an EXACT first-set that \\`choice\\` can dispatch on (the alternation exposes none), it owns the boundary so it is not re-spelled per word, it sorts LONGEST-FIRST by construction, and it lowers to a single charCodeAt scan.`\n : `\\`regex(/${d.source}/${d.flags})\\` hand-rolls a keyword and its word boundary. Use \\`${call}\\` \u2014 it owns the boundary (so \\`${shape.boundary ?? ''}\\` is not re-spelled per keyword), exposes an EXACT first-set that \\`choice\\` can dispatch on, and lowers to the same charCodeAt scan.`,\n unrescued.length > 0\n ? `LIVE BUG \u2014 the alternation is ordered so ${unrescued.length} later alternative(s) can NEVER match: ${unrescued.slice(0, 3).map(h => `\\`${h.shorter}\\` precedes \\`${h.longer}\\` and nothing rejects the following \\`${h.at}\\``).join('; ')}${unrescued.length > 3 ? `, and ${unrescued.length - 3} more` : ''}. Regex alternation is FIRST-match, not longest-match, and with no boundary guard to force a backtrack the shorter branch wins outright. \\`keywords()\\` cannot express this bug: it sorts longest-first.`\n : hazards.length > 0\n ? `ORDERING HAZARD (currently harmless): ${hazards.length} earlier alternative(s) are strict prefixes of later ones \u2014 e.g. \\`${hazards[0]!.shorter}\\` before \\`${hazards[0]!.longer}\\`. Regex alternation is first-match, so these work ONLY because the trailing boundary guard rejects the next character and the engine backtracks into the longer branch. That correctness rests on a hand-maintained order plus a guard that happens to cover the right characters; \\`keywords()\\` sorts longest-first by construction and does not depend on either.`\n : !longestFirst && vocabulary\n ? `The alternation is not in longest-first order. It is correct today${shape.boundary === null ? '' : ' (the boundary guard forces a backtrack where it matters)'}, but the ordering is hand-maintained and nothing checks it \u2014 adding a word that extends an existing one is a silent bug. \\`keywords()\\` sorts longest-first by construction.`\n : '',\n ci && !unicode\n ? `CORRECTNESS, not style: \\`/i\\` without \\`/u\\` does NOT fold case the way \\`{c, toUpperCase(c), toLowerCase(c)}\\` suggests \u2014 67 BMP code points fold in ways those three miss (\u03C2/\u03C3, \u00B5/\u03BC, the \u01C4\u01C5\u01C6 digraphs, combining iota subscript). parseman fixed exactly this INSIDE \\`keywords()\\` (see combinators/case-fold.ts); a hand-rolled copy never received the fix, so its first-set is unsound for those inputs.`\n : '',\n siblings.length > 0\n ? `arm[${own?.index}] here sits alongside arm(s) [${siblings.join(', ')}] in the same \\`choice\\`, which are also hand-rolled keywords. A single \\`keywords([\u2026])\\` replaces the whole group and gives longest-match dispatch across it \u2014 which is what that combinator exists for.`\n : '',\n ].filter(s => s !== '').join(' '),\n })\n }\n // Bugs first, then the biggest vocabularies: a 150-word alternation is both the\n // most valuable conversion and the least likely to be spotted by reading.\n return out.sort((a, b) =>\n Number(b.bug) - Number(a.bug)\n || b.hazards.length - a.hazards.length\n || b.words.length - a.words.length\n || b.siblingArms.length - a.siblingArms.length)\n}\n\n// \u2500\u2500 formatting \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport type DuplicationWarnLevel = 'off' | 'warn' | 'error'\n\nconst sitesLine = (sites: readonly Site[]): string =>\n sites.slice(0, 6).map(siteToString).join('\\n ') + (sites.length > 6 ? `\\n \u2026 and ${sites.length - 6} more` : '')\n\n/**\n * Ranked, actionable lines \u2014 same tone and shape as `formatGatingWarnings`: what\n * it is, where it is, and one concrete thing to do about it.\n */\nexport function formatDuplicationFindings(report: DuplicationReport): string[] {\n const lines: string[] = []\n // First: the only family here that is silently WRONG rather than redundant \u2014\n // the parse succeeds, so nothing else reports it.\n for (const f of report.structureLoss) {\n lines.push(`parseman BUG [structure-loss] @ ${siteToString(f.site)}: arm[${f.earlier}] flattens \\`${f.nodeType}\\` where arm[${f.later}] structures it, on ${firstSetToString(f.on)}`)\n lines.push(` flat: ${f.earlierShape}`)\n lines.push(` rich: ${f.laterShape}`)\n lines.push(` lost: ${f.lostNodeTypes.map(t => `\\`${t}\\``).join(', ')}`)\n lines.push(` fix: ${f.suggestion}`)\n }\n for (const f of report.rewrites) {\n lines.push(`parseman ${f.bug ? 'BUG' : 'rewrite'} [${f.rewrite}${f.sepByVerdict === undefined ? '' : `/${f.sepByVerdict}`}] @ ${siteToString(f.site)}${f.astNeutral ? '' : ' (candidate \u2014 verify AST identity)'}`)\n lines.push(` from: ${f.from}`)\n lines.push(` to: ${f.to}`)\n lines.push(` fix: ${f.suggestion}`)\n if (f.perf !== '') lines.push(` perf: ${f.perf}`)\n }\n for (const f of report.divergentNodes) {\n lines.push(`parseman divergent-node: \\`${f.nodeType}\\` is built by ${f.count} different productions sharing ${f.sharedTerms.length} term(s): ${f.sharedTerms.map(t => `\\`${t}\\``).join(', ')}`)\n for (const p of f.productions) lines.push(` ${siteToString(p.site)}\\n ${p.shape}\\n unique to it: ${p.distinctTerms.length === 0 ? '(none)' : p.distinctTerms.map(t => `\\`${t}\\``).join(', ')}`)\n lines.push(` fix: ${f.suggestion}`)\n }\n for (const f of report.keywordRegexes) {\n const src = f.source.length > 90 ? `${f.source.slice(0, 88)}\u2026` : f.source\n lines.push(`parseman ${f.bug ? 'BUG ' : ''}keyword-regex @ ${siteToString(f.site)}: /${src}/${f.flags}${f.vocabulary ? ` [${f.words.length} literal words${f.longestFirst ? '' : ', NOT longest-first'}]` : ''}${f.hazards.length > 0 ? ` [${f.hazards.length} prefix hazard(s)${f.bug ? ', UNRESCUED' : ''}]` : ''}${f.caseFoldRisk ? ' [CASE-FOLD RISK]' : ''}`)\n lines.push(` fix: ${f.suggestion}`)\n }\n for (const f of report.duplicates) {\n lines.push(`parseman duplication: ${f.count}\u00D7 identical ${f.size}-node shape (saves ${f.savings} nodes) \u2014 ${f.shape}`)\n lines.push(` at: ${sitesLine(f.sites)}`)\n lines.push(` fix: ${f.suggestion}`)\n }\n for (const f of report.nearDuplicates) {\n lines.push(`parseman near-duplication: ${f.count} clones of a ${f.sharedSize}-node shape differing at ONE slot (saves ${f.savings} nodes) \u2014 ${f.shape}`)\n lines.push(` slot: ${f.slotPath} \u2208 { ${f.variants.join(' | ')} }`)\n lines.push(` at: ${sitesLine(f.sites)}`)\n lines.push(` fix: ${f.suggestion}`)\n }\n for (const f of report.regexFragments) {\n lines.push(`parseman regex-fragment: \\`${f.fragment}\\` (${f.branches} branches) re-spelled in ${f.count} regex() terminals`)\n lines.push(` at: ${sitesLine(f.sites)}`)\n lines.push(` fix: ${f.suggestion}`)\n }\n for (const f of report.regexClasses) {\n lines.push(`parseman regex-class${f.drifted ? ' DRIFT' : ''}: [${f.canonical}] across ${f.count} regex() terminals${f.bmpCeiling ? ' [BMP ceiling]' : ''}`)\n for (const v of f.variants) lines.push(` [${v.source}] \u00D7${v.count} ${v.delta}\\n ${sitesLine(v.sites)}`)\n lines.push(` fix: ${f.suggestion}`)\n }\n for (const f of report.overlaps) {\n lines.push(`parseman overlap @ ${siteToString(f.site)}: arm[${f.a}] \u2229 arm[${f.b}] on ${firstSetToString(f.on)}${f.sharedPrefix === null ? '' : ` \u2014 shared prefix: ${f.sharedPrefix}`}${f.handledByStrategy ? ' [sharedPrefix strategy already handles this]' : ''}`)\n lines.push(` fix: ${f.suggestion}`)\n }\n return lines\n}\n\n/** Total findings across every category \u2014 the number the `'error'` gate keys on. */\nexport function duplicationFindingCount(report: DuplicationReport): number {\n return report.duplicates.length + report.nearDuplicates.length + report.regexFragments.length\n + report.regexClasses.length + report.overlaps.length + report.rewrites.length\n + report.divergentNodes.length + report.structureLoss.length + report.keywordRegexes.length\n}\n", "import type { Combinator, ParserDef } from '../types.ts'\n\n/**\n * Dead-value analysis (shared by the interpreter and codegen). A container\n * combinator \u2014 `many` / `oneOrMore` / `optional` / `sequence` \u2014 builds an\n * aggregate value (array / tuple / nullable). Under a `node()`, the node builds\n * from the *captured children*, never from that aggregate, so the aggregate is\n * built and thrown away. This pass marks those containers `valueUnused`; the\n * interpreter and the emitter then skip building the aggregate entirely (the\n * elements still parse and self-capture, so trees are identical).\n *\n * Walks ONE combinator tree (a single rule body, or a standalone root), stopping\n * at `lazy`/ref boundaries \u2014 other rules are analyzed on their own root. Starts\n * `consumed = true` (a rule's own value is assumed read \u2014 conservative); `node()`\n * flips it to false for its inner parser; `transform` forces it true (its map fn\n * reads the value). Sharing-safe: any `consumed = true` visit wins and is sticky,\n * so a container reachable from BOTH a consuming and a non-consuming site keeps\n * its aggregate (never wrongly elided).\n *\n * Soundness: a container is marked ONLY when every path to it passes through a\n * `node()` (value-discarding) without an intervening value-reader \u2014 i.e. its\n * aggregate provably isn't observed. Idempotent; safe to re-run.\n */\nexport function markUnusedValues(root: Combinator<unknown>): void {\n const seenConsumed = new WeakSet<Combinator<unknown>>()\n const seenUnconsumed = new WeakSet<Combinator<unknown>>()\n\n const mark = (def: { valueUnused?: boolean }, consumed: boolean): void => {\n if (consumed) def.valueUnused = false\n else if (def.valueUnused !== false) def.valueUnused = true\n }\n\n const visit = (c: Combinator<unknown>, consumed: boolean): void => {\n const seen = consumed ? seenConsumed : seenUnconsumed\n if (seen.has(c)) return\n seen.add(c)\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion\n const def = c._def as ParserDef & { valueUnused?: boolean }\n\n switch (def.tag) {\n case 'many':\n case 'oneOrMore':\n mark(def, consumed)\n visit(def.parser, consumed)\n return\n case 'optional':\n // `optional` returns `inner | null` \u2014 no aggregate array/tuple to elide, so\n // it carries no valueUnused flag. Still descend so an inner many/sequence\n // under a node() is analyzed (it benefits even when its optional wrapper\n // doesn't).\n visit(def.parser, consumed)\n return\n case 'sequence':\n mark(def, consumed)\n for (const p of def.parsers) visit(p, consumed)\n return\n case 'choice':\n // value is the winning arm's value \u2014 propagate consumed to each arm.\n for (const p of def.parsers) visit(p, consumed)\n return\n case 'dispatch':\n visit(def.selector, consumed)\n for (const entry of def.cases) visit(entry.parser, consumed)\n if (def.matchers) for (const entry of def.matchers) visit(entry.parser, consumed)\n if (def.otherwise) visit(def.otherwise, consumed)\n return\n case 'node':\n // builds from captured children, NOT the inner parser value.\n visit(def.parser, false)\n return\n case 'transform':\n // the map fn reads the value \u2192 always consumed.\n visit(def.parser, true)\n return\n case 'field':\n // the field capture records the parsed value \u2192 always consumed.\n visit(def.parser, true)\n return\n case 'skip':\n visit(def.main, consumed) // returns main's value\n visit(def.skipped, false) // skipped value is discarded\n return\n case 'sepBy':\n // sepBy is NOT elided (no valueUnused), so it always builds its array and\n // therefore always reads each item's value \u2014 regardless of whether sepBy's\n // OWN value is observed. Item parser is unconditionally consumed.\n visit(def.parser, true)\n visit(def.separator, false)\n return\n case 'not':\n case 'peek':\n visit(def.parser, false) // lookahead \u2014 value never observed\n return\n case 'grammar':\n visit(def.parser, consumed)\n if (def.triviaParser) visit(def.triviaParser, false)\n return\n case 'recover':\n visit(def.parser, consumed)\n visit(def.sentinel, false)\n return\n case 'token':\n // token() returns the matched source slice, not the wrapped parser value.\n // Its child still parses and captures one outer token leaf; inner aggregate\n // values such as sequence tuples are unobserved and can be elided.\n visit(def.parser, false)\n return\n case 'label':\n case 'trivia':\n case 'attempt':\n case 'withCtx':\n case 'expect':\n visit(def.parser, consumed) // single-child pass-through wrappers\n return\n case 'leaf':\n // The reducer observes the complete inner value even when its own result\n // is immediately captured by a node().\n visit(def.parser, true)\n return\n case 'lazy':\n // An INNER ref boundary \u2014 a distinct rule, analyzed on its own root. Don't\n // descend (and never call thunk(): an external ref would throw). A ref at\n // the ROOT of a rule is different \u2014 it wraps this rule's own body \u2014 and is\n // resolved by resolveRoot() before the walk starts.\n return\n default:\n // literal / regex / keywords / guard / scanTo / unknown \u2014 no container child.\n return\n }\n }\n\n // A rule's root is often a `ref()`/`lazy` wrapping the real body \u2014 that is how\n // rules() and compose() store forward-referenced and composed rules. Walking\n // that lazy directly hits the boundary case and marks nothing, so resolve a\n // ROOT lazy to its defined body first. Inner lazies (references to OTHER rules)\n // stay boundaries \u2014 each rule is analyzed from its own resolved root.\n const resolveRoot = (c: Combinator<unknown>): Combinator<unknown> => {\n const guard = new Set<Combinator<unknown>>()\n let cur = c\n while (!guard.has(cur)) {\n const d = cur._def as ParserDef\n if (d.tag !== 'lazy') return cur\n guard.add(cur)\n try { cur = d.thunk() } catch { return c } // undefined ref \u2192 leave as-is\n }\n return cur\n }\n\n visit(resolveRoot(root), true)\n}\n", "import type { ParseContext, ParseFail } from '../types.ts'\n\n/**\n * Creates a ParseFail and, if a completions probe is active, records it.\n *\n * Rules:\n * - Only failures at or before the probe's target offset are eligible.\n * - A deeper failure (higher pos) replaces the current best.\n * - A tie (same pos) merges expected arrays \u2014 this is what makes choice arms\n * aggregate their alternatives rather than each overwriting the last.\n * - Shallower failures are ignored.\n */\nexport function failAt(ctx: ParseContext, expected: string[], pos: number): ParseFail {\n const r: ParseFail = { ok: false, expected, span: { start: pos, end: pos } }\n const probe = ctx._probe\n if (probe !== undefined && pos <= probe.offset) {\n const best = probe.best\n if (best === null || pos > best.span.start) {\n probe.best = r\n } else if (pos === best.span.start) {\n probe.best = { ...best, expected: [...best.expected, ...expected] }\n }\n }\n return r\n}\n", "import type { Combinator, ParseContext, ParseResult, ParserMeta } from '../types.ts'\nimport { fromChar, empty } from './first-set.ts'\nimport { failAt } from './probe.ts'\nimport { pushCstLeaf, cstCaptureActive } from '../cst/capture-buffer.ts'\nimport { recordLineRangeFromContext } from '../line-index.ts'\n\n/**\n * ASCII case-fold equality \u2014 the interpreter twin of the compiler's `foldEq`\n * (and `/i`-flag regex lowering). Folds ASCII letters via bit 0x20, exact-matches\n * everything else. Deliberately NOT `Intl.Collator` (measured ~9\u00D7 slower, and its\n * Unicode accent-folding is the wrong semantic for a parser). Keeps interpreter /\n * compiled / macro output identical for case-insensitive `literal()`.\n */\nfunction asciiFoldEq(a: string, b: string): boolean {\n if (a.length !== b.length) return false\n for (let i = 0; i < a.length; i++) {\n let ca = a.charCodeAt(i)\n let cb = b.charCodeAt(i)\n if (ca >= 65 && ca <= 90) ca += 32\n if (cb >= 65 && cb <= 90) cb += 32\n if (ca !== cb) return false\n }\n return true\n}\n\nexport type LiteralOptions = {\n caseInsensitive?: boolean\n}\n\nexport function literal(value: string, opts: LiteralOptions = {}): Combinator<string> {\n const caseInsensitive = opts.caseInsensitive ?? false\n\n const firstSet = value.length > 0\n ? fromChar(value.codePointAt(0)!)\n : empty()\n\n const meta: ParserMeta = {\n firstSet,\n canMatchNewline: value.includes('\\n'),\n isTrivia: false,\n }\n const canMatchNewline = meta.canMatchNewline\n\n if (caseInsensitive) {\n const upper = value.toUpperCase()\n const lower = value.toLowerCase()\n const firstUpper = upper.codePointAt(0)\n const firstLower = lower.codePointAt(0)\n // Two discrete points, not one spanning range \u2014 `asciiFoldEq` accepts only\n // the char and its fold twin, so `[min, max]` would over-approximate (e.g.\n // 'a'/'A' \u2192 the whole 65..97 span, pulling B\u2013Z/`[\\]^_\\`` into dispatch).\n meta.firstSet = firstLower !== undefined && firstUpper !== undefined\n ? firstLower === firstUpper\n ? { kind: 'ranges', ranges: [{ lo: firstLower, hi: firstLower }] }\n : { kind: 'ranges', ranges: [\n { lo: firstLower, hi: firstLower },\n { lo: firstUpper, hi: firstUpper },\n ]}\n : firstSet\n }\n\n const expected = [JSON.stringify(value)]\n\n // Single-char case-sensitive literals are the bulk of punctuation-heavy\n // grammars (GraphQL `{ } ( ) : $ @ [ ] ! =`, JSON, CSS). A bare `charCodeAt`\n // compare beats the generic `startsWith` builtin call, and an out-of-bounds\n // `charCodeAt` returns NaN \u2014 so the length check folds into the compare.\n const parse = !caseInsensitive && value.length === 1\n ? (() => {\n const code = value.charCodeAt(0)\n return function parse(input: string, pos: number, ctx: ParseContext): ParseResult<string> {\n if (input.charCodeAt(pos) === code) {\n const span = { start: pos, end: pos + 1 }\n if (canMatchNewline && ctx.trackLines) recordLineRangeFromContext(ctx, input, pos, span.end)\n if (cstCaptureActive(ctx)) pushCstLeaf(ctx, { _tag: 'leaf', value, span })\n return { ok: true, value, span }\n }\n return failAt(ctx, expected, pos)\n }\n })()\n : function parse(input: string, pos: number, ctx: ParseContext): ParseResult<string> {\n const end = pos + value.length\n if (end > input.length) {\n return failAt(ctx, expected, pos)\n }\n const matchedValue = caseInsensitive ? input.slice(pos, end) : value\n if (caseInsensitive ? asciiFoldEq(matchedValue, value) : input.startsWith(value, pos)) {\n const span = { start: pos, end }\n if (canMatchNewline && ctx.trackLines) recordLineRangeFromContext(ctx, input, pos, end)\n if (cstCaptureActive(ctx)) pushCstLeaf(ctx, { _tag: 'leaf', value: matchedValue, span })\n return { ok: true, value: matchedValue, span }\n }\n return failAt(ctx, expected, pos)\n }\n\n return {\n _tag: 'literal',\n _meta: meta,\n _def: { tag: 'literal', value, caseInsensitive },\n parse,\n }\n}\n", "import type { Combinator, ParseContext, ParseResult, ParserMeta, FirstSet } from '../types.ts'\nimport { any } from './first-set.ts'\nimport { failAt } from './probe.ts'\nimport { pushCstLeaf, cstCaptureActive } from '../cst/capture-buffer.ts'\nimport { recordLineRangeFromContext } from '../line-index.ts'\nimport { shorthandRanges, parseClassRanges } from '../regex/classes.ts'\n\n/**\n * Computes a regex terminal's first-set (for choice-dispatch fast paths). The\n * implementation \u2014 `firstSetFromRegex` in `../regex/first-set.ts` \u2014 is a small,\n * dependency-free hand-rolled regex parser, registered by the interpreter/library\n * entry (`index.ts`) via `registerRegexAnalyzer`. It is injected rather than\n * imported so that consumers who import `regex` directly from this subpath (no\n * library entry) never pull the analyzer into their bundle at all. When no\n * analyzer is registered, `regex()` uses the permissive fallback below \u2014 this\n * only disables the dispatch fast paths, never changing matches.\n */\nexport type RegexFirstSetAnalyzer = (pattern: string) => { firstSet: FirstSet; canMatchNewline: boolean }\n\nlet firstSetAnalyzer: RegexFirstSetAnalyzer | null = null\n\nexport function registerRegexAnalyzer(analyzer: RegexFirstSetAnalyzer): void {\n firstSetAnalyzer = analyzer\n}\n\n/** Fallback when no analyzer is registered: \"could start with any char / could\n * match a newline\" \u2014 the same conservative value `firstSetFromRegex` returns on\n * an unparseable pattern, so a missing analyzer degrades to \"no fast path\", not\n * a wrong one. */\nconst permissiveFirstSet: RegexFirstSetAnalyzer = () => ({ firstSet: any(), canMatchNewline: true })\n\nconst SCAN_BAIL_AT = 64\ntype ShortScanner = (input: string, pos: number) => number | null | undefined\n\nfunction inRanges(cp: number, ranges: Array<[number, number]>): boolean {\n for (let i = 0; i < ranges.length; i++) {\n const [lo, hi] = ranges[i]!\n if (cp >= lo && cp <= hi) return true\n }\n return false\n}\n\n/**\n * The positive char-class body (chars between `[` and `]`) as ranges for the\n * short-scan fast path, or null if it can't be lowered \u2014 including a NEGATED\n * class (`[^\u2026]`), which the scan can't express. The class parsing itself is the\n * shared `parseClassRanges` (see `../regex/classes.ts`).\n */\nfunction readClassRanges(body: string): Array<[number, number]> | null {\n if (body.startsWith('^')) return null\n return parseClassRanges(body)\n}\n\nfunction shortScanner(source: string, flags: string): ShortScanner | null {\n if (/[imsuvy]/.test(flags)) return null\n let ranges: Array<[number, number]> | null = null\n let quant = ''\n if (source[0] === '[') {\n let end = 1\n while (end < source.length && source[end] !== ']') {\n if (source[end] === '\\\\') end += 2\n else end++\n }\n if (source[end] !== ']') return null\n ranges = readClassRanges(source.slice(1, end))\n quant = source.slice(end + 1)\n } else if (source[0] === '\\\\' && (source[1] === 'd' || source[1] === 'w' || source[1] === 's')) {\n ranges = shorthandRanges(source[1])\n quant = source.slice(2)\n }\n if (!ranges || (quant !== '+' && quant !== '*')) return null\n const minOne = quant === '+'\n return (input, pos) => {\n let end = pos\n while (end < input.length && inRanges(input.charCodeAt(end), ranges)) {\n end++\n if (end - pos >= SCAN_BAIL_AT) return undefined\n }\n return minOne && end === pos ? null : end\n }\n}\n\n/**\n * ASCII-case-fold a first-set: for every ASCII letter reachable as a leading char,\n * also admit its opposite-case twin (A\u2013Z \u2194 a\u2013z). Non-letter code points and `any`/\n * `empty` are unchanged. Only widens the set (sound superset) \u2014 used to correct a\n * case-insensitive regex's flag-agnostic first-set for first-char dispatch. Unicode\n * case-folding beyond ASCII is deliberately NOT applied (parseman first-sets are\n * ASCII-BMP for dispatch); a non-ASCII letter keeps its own code point only, which\n * stays sound (the interpreter's real `/i` match still runs).\n */\nfunction asciiCaseFold(fs: FirstSet): FirstSet {\n if (fs.kind !== 'ranges') return fs\n const ranges: { lo: number; hi: number }[] = fs.ranges.map(r => ({ lo: r.lo, hi: r.hi }))\n const add = (lo: number, hi: number): void => { if (lo <= hi) ranges.push({ lo, hi }) }\n for (const r of fs.ranges) {\n // Uppercase portion [A\u2013Z] \u2192 lowercase twin (+32).\n const uLo = Math.max(r.lo, 65), uHi = Math.min(r.hi, 90)\n add(uLo + 32, uHi + 32)\n // Lowercase portion [a\u2013z] \u2192 uppercase twin (\u221232).\n const lLo = Math.max(r.lo, 97), lHi = Math.min(r.hi, 122)\n add(lLo - 32, lHi - 32)\n }\n // Normalize: sort + coalesce overlapping/adjacent ranges.\n ranges.sort((a, b) => a.lo - b.lo)\n const merged: { lo: number; hi: number }[] = []\n for (const r of ranges) {\n const last = merged[merged.length - 1]\n if (last && r.lo <= last.hi + 1) last.hi = Math.max(last.hi, r.hi)\n else merged.push({ lo: r.lo, hi: r.hi })\n }\n return { kind: 'ranges', ranges: merged }\n}\n\nexport function regex(pattern: string | RegExp, flags = ''): Combinator<string> {\n const source = typeof pattern === 'string' ? pattern : pattern.source\n const resolvedFlags = typeof pattern === 'string' ? flags : pattern.flags\n\n const anchored = new RegExp(source, 'y' + resolvedFlags.replace(/[gy]/g, ''))\n const scan = shortScanner(source, resolvedFlags)\n\n const raw = (firstSetAnalyzer ?? permissiveFirstSet)(source)\n // The first-set analyzer is flag-agnostic, so for a CASE-INSENSITIVE pattern it\n // returns only the literal-case leading chars \u2014 e.g. `/red|blue/i` \u2192 `{r,b}`, NOT\n // `{r,R,b,B}`. Using that narrow set for first-char DISPATCH would false-EXCLUDE the\n // opposite-case input (`ReD` gated out of a `/(?:red|\u2026)/i` arm), so widen it under\n // `i`. The widening is FLAG-AWARE because `i` alone and `i`+`u` fold different sets:\n // - `/i` WITHOUT `u`: ECMAScript case-insensitive matching folds ONLY the ASCII\n // Basic-Latin case pairs (`a`\u2194`A` \u2026 `z`\u2194`Z`) \u2014 a plain `/[a-z]/i` does NOT match\n // `\u017F`(U+017F) or `K`(U+212A). So `asciiCaseFold` is a SOUND, tight superset, and\n // it preserves at-keyword dispatch (`/@media\u2026/i` still gates on `@`).\n // - `/ui` or `/iv` (Unicode mode \u2014 the `u` OR the ES2024 `v` Unicode-sets flag):\n // matching uses Unicode *simple case folding*, so `/[a-z]/ui` (and `/[a-z]/iv`)\n // ALSO match `\u017F`\u2192s and `K`\u2192k. ASCII-folding can't enumerate those astral/BMP case\n // pairs, so gating on the ASCII set would false-exclude them. Fall back to `any()`\n // (always-try) \u2014 sound, and only forfeits gating for the rare Unicode-mode `/i`\n // recognizer, never the ASCII-only `/i` at-keywords the fix targets.\n const firstSet = !resolvedFlags.includes('i')\n ? raw.firstSet\n : (resolvedFlags.includes('u') || resolvedFlags.includes('v'))\n ? any()\n : asciiCaseFold(raw.firstSet)\n const canMatchNewline = raw.canMatchNewline\n const meta: ParserMeta = { firstSet, canMatchNewline, isTrivia: false }\n\n return {\n _tag: 'regex',\n _meta: meta,\n _def: { tag: 'regex', source, flags: resolvedFlags },\n parse(input: string, pos: number, ctx: ParseContext): ParseResult<string> {\n const scanEnd = scan?.(input, pos)\n if (scanEnd !== undefined) {\n if (scanEnd === null) return failAt(ctx, [`/${source}/`], pos)\n const value = input.slice(pos, scanEnd)\n const span = { start: pos, end: scanEnd }\n if (canMatchNewline && ctx.trackLines) recordLineRangeFromContext(ctx, input, pos, scanEnd)\n if (cstCaptureActive(ctx)) pushCstLeaf(ctx, { _tag: 'leaf', value, span })\n return { ok: true, value, span }\n }\n anchored.lastIndex = pos\n const m = anchored.exec(input)\n if (m === null) {\n return failAt(ctx, [`/${source}/`], pos)\n }\n const span = { start: pos, end: pos + m[0]!.length }\n if (canMatchNewline && ctx.trackLines) recordLineRangeFromContext(ctx, input, pos, span.end)\n if (cstCaptureActive(ctx)) pushCstLeaf(ctx, { _tag: 'leaf', value: m[0]!, span })\n return { ok: true, value: m[0]!, span }\n },\n }\n}\n", "import type { Combinator, ParseContext, ParseResult, ParserMeta, ParseFail } from '../types.ts'\nimport { sequenceFirstSet, firstSetOf, union } from './first-set.ts'\nimport { advanceTrivia, needsDeferredTriviaCommit, rollbackTrivia, saveTriviaMark, scanTrivia } from './trivia-skip.ts'\nimport { firstSetSentinel } from '../recovery/scan.ts'\n\ntype UnwrapParsers<T extends Combinator<unknown>[]> = {\n [K in keyof T]: T[K] extends Combinator<infer U> ? U : never\n}\n\nexport function sequence<T extends [Combinator<unknown>, ...Combinator<unknown>[]]>(\n ...parsers: T\n): Combinator<UnwrapParsers<T>> {\n const meta: ParserMeta = {\n // Union through the nullable prefix \u2014 a leading optional()/many() lets a later\n // term's first char start the sequence. Just `parsers[0]` under-approximates.\n firstSet: sequenceFirstSet(parsers),\n canMatchNewline: parsers.some(p => p._meta.canMatchNewline),\n isTrivia: false,\n }\n\n const def: { tag: 'sequence'; parsers: Combinator<unknown>[]; valueUnused?: boolean } =\n { tag: 'sequence', parsers: parsers as Combinator<unknown>[] }\n\n // Automatic recovery-sync inference, built lazily on the first tolerant parse and\n // never touched on the strict path: followSentinels[i] matches (zero-width) when\n // the input could start any term AFTER i, so a list nested in term i can resync\n // to this sequence's enclosing delimiter with NO grammar annotation. This is the\n // whole of \"recovery config\" \u2014 derived from structure, not authored.\n let followSentinels: (Combinator<null> | null)[] | undefined\n\n // Tolerant twin of the strict loop: identical term-parsing, but around each term\n // it publishes the inferred follow sentinel into ctx._sync so a nested list can\n // resync to this sequence's enclosing delimiter. Cold path (tolerant only).\n function parseTolerant(input: string, pos: number, ctx: ParseContext): ParseResult<UnwrapParsers<T>> {\n followSentinels ??= parsers.map((_, i) => {\n // A nested list can resync to the start of ANY term that follows it here, so\n // union every following term's first set (not just up to the first\n // non-nullable one \u2014 a mandatory middle term must not hide a later close).\n const fs = parsers.slice(i + 1).reduce<ReturnType<typeof firstSetOf>>(\n (acc, p) => union(acc, firstSetOf(p)),\n { kind: 'empty' },\n )\n return firstSetSentinel(fs)\n })\n const values: unknown[] | undefined = def.valueUnused ? undefined : []\n let cur = pos\n const inheritedSync = ctx._sync\n try {\n for (let i = 0; i < parsers.length; i++) {\n // Publish this term's follow set (or keep the inherited sync when the local\n // follow isn't usable, e.g. the last term or an `any` first set).\n ctx._sync = followSentinels[i] ?? inheritedSync\n if (ctx.trivia && i > 0) {\n const mark = saveTriviaMark(ctx)\n let scanEnd: number\n if (needsDeferredTriviaCommit(ctx)) {\n const scan = scanTrivia(input, cur, ctx)\n scan.commit()\n scanEnd = scan.end\n } else {\n scanEnd = advanceTrivia(input, cur, ctx)\n }\n const result = parsers[i]!.parse(input, scanEnd, ctx)\n if (!result.ok) return result as ParseFail\n if (result.span.end > scanEnd) cur = result.span.end\n else rollbackTrivia(ctx, mark)\n if (values !== undefined) values.push(result.value)\n continue\n }\n const result = parsers[i]!.parse(input, cur, ctx)\n if (!result.ok) return result as ParseFail\n if (values !== undefined) values.push(result.value)\n cur = result.span.end\n }\n } finally {\n ctx._sync = inheritedSync\n }\n return {\n ok: true,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion\n value: (values ?? undefined) as UnwrapParsers<T>,\n span: { start: pos, end: cur },\n }\n }\n\n return {\n _tag: 'sequence',\n _meta: meta,\n _def: def,\n parse(input: string, pos: number, ctx: ParseContext): ParseResult<UnwrapParsers<T>> {\n // One cold branch: in tolerant mode publish each term's follow-set as ctx._sync\n // so a nested list resyncs to the enclosing delimiter (dynamic scoping through\n // refs carries this across rule boundaries automatically). The strict loop\n // below is byte-identical to a parser with no recovery.\n if (ctx._tolerant) return parseTolerant(input, pos, ctx)\n\n // Skip the tuple when it's never observed (markUnusedValues): terms still\n // parse (and self-capture) \u2014 only the array of their values is elided.\n const values: unknown[] | undefined = def.valueUnused ? undefined : []\n let cur = pos\n\n for (let i = 0; i < parsers.length; i++) {\n if (ctx.trivia && i > 0) {\n // Skip trivia between terms, but only *consume* it for span purposes if\n // this term actually matches content past the trivia. A term that matches\n // empty (optional/many/lookahead) leaves the trivia for the enclosing rule.\n let scanEnd: number\n let mark = saveTriviaMark(ctx)\n\n if (needsDeferredTriviaCommit(ctx)) {\n const scan = scanTrivia(input, cur, ctx)\n scan.commit()\n scanEnd = scan.end\n } else {\n scanEnd = advanceTrivia(input, cur, ctx)\n }\n\n const result = parsers[i]!.parse(input, scanEnd, ctx)\n if (!result.ok) return result as ParseFail\n if (result.span.end > scanEnd) {\n cur = result.span.end\n } else {\n rollbackTrivia(ctx, mark)\n }\n if (values !== undefined) values.push(result.value)\n continue\n }\n\n const result = parsers[i]!.parse(input, cur, ctx)\n if (!result.ok) return result as ParseFail\n if (values !== undefined) values.push(result.value)\n cur = result.span.end\n }\n\n return {\n ok: true,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion\n value: (values ?? undefined) as UnwrapParsers<T>,\n span: { start: pos, end: cur },\n }\n },\n }\n}\n", "import type { Combinator, ParseContext, ParseResult, ParserMeta } from '../types.ts'\nimport { advanceTrivia, needsDeferredTriviaCommit, rollbackTrivia, saveTriviaMark, scanTrivia } from './trivia-skip.ts'\nimport { matchesEmpty, startsFirstSet } from './first-set.ts'\nimport { deriveExpected } from './expect.ts'\nimport { matchesAt, orSentinel, recoverScan, captureError } from '../recovery/scan.ts'\n\n/**\n * Parse one repetition item at `cur`, first skipping (and, in capture mode,\n * recording) any leading trivia \u2014 so a repeating combinator consumes the trivia\n * between items uniformly, the way advancing the index always should. Trivia is\n * committed *before* the item so rawChildren order stays [item, trivia, item];\n * if the item then fails or makes no progress the trivia is rolled back and the\n * loop stops (the trivia is trailing and belongs to the enclosing context).\n *\n * Returns the item value + end position, the underlying failure (so oneOrMore\n * can propagate a first-item failure), or 'stop'.\n */\nfunction repItem<T>(\n combinator: Combinator<T>,\n input: string,\n cur: number,\n ctx: ParseContext,\n guardable: boolean,\n): { value: T; end: number } | { fail: ParseResult<T>; failPos: number } | 'stop' {\n const mark = saveTriviaMark(ctx)\n let pos = cur\n if (ctx.trivia) {\n if (needsDeferredTriviaCommit(ctx)) {\n const scan = scanTrivia(input, cur, ctx)\n scan.commit()\n pos = scan.end\n } else {\n pos = advanceTrivia(input, cur, ctx)\n }\n }\n // Nothing but trivia left: don't speculatively parse an item at EOF (it would\n // fail and could trigger an item's expect()/error side-effects). The trivia\n // is trailing \u2014 roll it back for the enclosing context and stop.\n if (pos >= input.length) {\n rollbackTrivia(ctx, mark)\n return 'stop'\n }\n // First-set fast-path (mirrors emitMany's codegen guard): a body that can't match\n // empty and whose first set can't start at `pos` can ONLY fail this iteration, so\n // stop before the (composite) body's setup-then-fail. This is behaviour-identical\n // in strict mode \u2014 a swallowed body failure is discarded either way, and a\n // zero-width/leaf miss reaches the same loop stop. Skipped under a completions\n // probe or tolerant recovery, where a swallowed failure still feeds the probe /\n // triggers resync (matching the codegen guard's `!ctx.recovery` gate).\n if (guardable && ctx._probe === undefined && !ctx._tolerant && !startsFirstSet(combinator, input, pos)) {\n rollbackTrivia(ctx, mark)\n return 'stop'\n }\n const result = combinator.parse(input, pos, ctx)\n if (!result.ok) {\n rollbackTrivia(ctx, mark)\n if (result.committed) return { fail: result, failPos: pos }\n // Surface the POST-trivia position where the element actually failed. The\n // tolerant recovery guard must check the sync token there \u2014 not at `cur`,\n // which sits before any leading trivia \u2014 so trailing trivia before the sync\n // isn't mistaken for junk and swallowed into a spurious ParseError.\n return { fail: result, failPos: pos }\n }\n if (result.span.end === pos) {\n rollbackTrivia(ctx, mark)\n return 'stop'\n }\n return { value: result.value, end: result.span.end }\n}\n\nexport type RepeatOptions = {\n /**\n * Minimum number of ITEMS. Default `0`.\n *\n * `min >= 1` is not a validation nicety \u2014 it is what makes the combinator\n * NON-NULLABLE. A nullable arm matches at every position, which disables its\n * `choice`'s first-char dispatch by parseman's own first-set rule; a `min >= 1`\n * repeat keeps the item's first-set, so an arm led by it still gates.\n */\n min?: number\n /** Maximum number of ITEMS. Default: unbounded. Never affects nullability. */\n max?: number\n}\n\n/** Shared `min`/`max` validation \u2014 a bad bound is an authoring error, not a parse\n * outcome, so it throws at CONSTRUCTION where the stack points at the grammar. */\nfunction resolveBounds(what: string, opts: { min?: number; max?: number }): { min: number; max: number } {\n const min = opts.min ?? 0\n const max = opts.max ?? Infinity\n const bad = (msg: string): never => { throw new RangeError(`parseman: ${what} ${msg}`) }\n if (!Number.isInteger(min) || min < 0) bad(`min must be a non-negative integer (got ${String(opts.min)})`)\n if (max !== Infinity && (!Number.isInteger(max) || max < 1)) bad(`max must be a positive integer (got ${String(opts.max)})`)\n if (max < min) bad(`max (${max}) is less than min (${min}) \u2014 the combinator could never succeed`)\n return { min, max }\n}\n\n/**\n * Repetition: `item*` by default, bounded by `{ min, max }` (both count ITEMS).\n *\n * many(g.Decl) // zero or more \u2014 NULLABLE\n * many(g.Decl, { min: 1 }) // one or more \u2014 same as oneOrMore(g.Decl)\n * many(g.HexDigit, { min: 3, max: 8 })\n *\n * `oneOrMore(x)` is kept as the sugar for the common `{ min: 1 }` case.\n */\nexport function many<T>(combinator: Combinator<T>, opts: RepeatOptions = {}): Combinator<T[]> {\n const { min, max } = resolveBounds('many()', opts)\n // `min >= 1` routes to the SAME implementation `oneOrMore` has always used, so\n // `many(x, { min: 1 })` and `oneOrMore(x)` are the identical combinator \u2014 not\n // merely equivalent-looking. (They differ from the min-0 loop in one real way:\n // the mandatory items parse at `pos` with no leading-trivia skip, which is the\n // enclosing context's job.)\n if (min >= 1) return atLeast(combinator, min, max)\n const meta: ParserMeta = {\n firstSet: combinator._meta.firstSet,\n canMatchNewline: combinator._meta.canMatchNewline,\n isTrivia: false,\n }\n const def: { tag: 'many'; parser: Combinator<unknown>; min: 0; max?: number; valueUnused?: boolean } =\n { tag: 'many', parser: combinator as Combinator<unknown>, min: 0, ...(max === Infinity ? {} : { max }) }\n let expected: string[] | undefined\n // A non-nullable body can be first-set-gated per loop iteration (see repItem).\n const guardable = combinator._meta.firstSet.kind !== 'any' && !matchesEmpty(combinator)\n\n return {\n _tag: 'many',\n _meta: meta,\n _def: def,\n parse(input: string, pos: number, ctx: ParseContext): ParseResult<T[]> {\n // When the aggregate is never observed (markUnusedValues), skip the array:\n // items still parse and self-capture into the enclosing node's children.\n const values: T[] | undefined = def.valueUnused ? undefined : []\n let cur = pos\n let count = 0\n while (cur < input.length) {\n if (count >= max) break\n const item = repItem(combinator, input, cur, ctx, guardable)\n if (item === 'stop') break\n if ('fail' in item) {\n if (!item.fail.ok && item.fail.committed) return item.fail\n // Cold path: only reached on an element failure. Strict mode \u21D2 `break`.\n // Tolerant \u21D2 resync to the sync sentinel the enclosing sequence inferred\n // and published as ctx._sync (the grammar carries no recovery config). No\n // sync available \u21D2 nothing to skip to \u2192 break.\n const sync = ctx._tolerant ? ctx._sync : undefined\n if (sync === undefined) break\n // Sync token at the POST-trivia failure position \u21D2 clean list end (the\n // trailing trivia belongs to the enclosing context), not junk. Checking\n // `item.failPos` (past leading trivia), not `cur`, keeps trivia out of\n // both the break decision and the recovered error span.\n if (matchesAt(sync, input, item.failPos, ctx)) break\n expected ??= deriveExpected(combinator)\n const { error, end } = recoverScan(input, item.failPos, ctx, sync, expected)\n if (values !== undefined) values.push(error as unknown as T)\n captureError(ctx, error)\n count++\n cur = end\n continue\n }\n if (values !== undefined) values.push(item.value)\n count++\n cur = item.end\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion\n return { ok: true, value: (values ?? undefined) as T[], span: { start: pos, end: cur } }\n },\n }\n}\n\n/**\n * Sugar for the commonest bound: `many(combinator, { min: 1 })` \u2014 the identical\n * combinator, not merely an equivalent one.\n */\nexport function oneOrMore<T>(combinator: Combinator<T>, opts: RepeatOptions = {}): Combinator<T[]> {\n return many(combinator, { ...opts, min: opts.min ?? 1 })\n}\n\n/**\n * `min >= 1` repetition: `min` MANDATORY items (whose failure propagates) then a\n * greedy loop up to `max`. The tag stays `oneOrMore` \u2014 every downstream switch\n * keys on it for \"non-nullable repeat\" \u2014 and `min` carries the real count.\n */\nfunction atLeast<T>(combinator: Combinator<T>, min: number, max: number): Combinator<T[]> {\n const meta: ParserMeta = {\n firstSet: combinator._meta.firstSet,\n canMatchNewline: combinator._meta.canMatchNewline,\n isTrivia: false,\n }\n const def: { tag: 'oneOrMore'; parser: Combinator<unknown>; min: number; max?: number; valueUnused?: boolean } =\n { tag: 'oneOrMore', parser: combinator as Combinator<unknown>, min, ...(max === Infinity ? {} : { max }) }\n let expected: string[] | undefined\n // A non-nullable body can be first-set-gated per loop iteration (see repItem).\n const guardable = combinator._meta.firstSet.kind !== 'any' && !matchesEmpty(combinator)\n\n return {\n _tag: 'oneOrMore',\n _meta: meta,\n _def: def,\n parse(input: string, pos: number, ctx: ParseContext): ParseResult<T[]> {\n // First item is mandatory (parsed at pos directly \u2014 leading trivia is the\n // enclosing context's responsibility); subsequent items skip leading trivia.\n const first = combinator.parse(input, pos, ctx)\n if (!first.ok) return first\n // Aggregate skipped when never observed (see `many`).\n const values: T[] | undefined = def.valueUnused ? undefined : [first.value]\n let cur = first.span.end\n let count = 1\n // Mandatory items 2..min (only entered for min > 1) \u2014 each failure propagates,\n // exactly like the first. They go through repItem so the trivia BETWEEN items\n // is consumed the same way the loop consumes it.\n while (count < min) {\n const item = repItem(combinator, input, cur, ctx, guardable)\n if (item === 'stop' || 'fail' in item) {\n if (item !== 'stop' && !item.fail.ok && item.fail.committed) return item.fail\n // Anchored at `cur` \u2014 the furthest position the repeat reached \u2014 not at\n // its start. `many(regex(/x/), { min: 3 })` over \"xx\" consumed both x's\n // and got stuck at 2 wanting a third; reporting offset 0 points the\n // caret at input that matched. Same rule as `sepBy`'s `failAt`, and the\n // compiled emitter already anchored here \u2014 this side was the outlier.\n expected ??= deriveExpected(combinator)\n return { ok: false, expected: expected.length > 0 ? expected : [combinator._tag], span: { start: cur, end: cur } }\n }\n if (values !== undefined) values.push(item.value)\n cur = item.end\n count++\n }\n while (cur < input.length) {\n if (count >= max) break\n const item = repItem(combinator, input, cur, ctx, guardable)\n if (item === 'stop') break\n if ('fail' in item) {\n if (!item.fail.ok && item.fail.committed) return item.fail\n // Cold path (element failure). Strict: break. Tolerant: resync \u2014 see many().\n const sync = ctx._tolerant ? ctx._sync : undefined\n if (sync === undefined) break\n if (matchesAt(sync, input, item.failPos, ctx)) break\n expected ??= deriveExpected(combinator)\n const { error, end } = recoverScan(input, item.failPos, ctx, sync, expected)\n if (values !== undefined) values.push(error as unknown as T)\n captureError(ctx, error)\n count++\n cur = end\n continue\n }\n if (values !== undefined) values.push(item.value)\n count++\n cur = item.end\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion\n return { ok: true, value: (values ?? undefined) as T[], span: { start: pos, end: cur } }\n },\n }\n}\n\nexport function optional<T>(combinator: Combinator<T>): Combinator<T | null> {\n const meta: ParserMeta = {\n firstSet: combinator._meta.firstSet,\n canMatchNewline: combinator._meta.canMatchNewline,\n isTrivia: false,\n }\n const firstSetSkippable = !matchesEmpty(combinator)\n\n return {\n _tag: 'optional',\n _meta: meta,\n _def: { tag: 'optional', parser: combinator as Combinator<unknown> },\n parse(input: string, pos: number, ctx: ParseContext): ParseResult<T | null> {\n if (firstSetSkippable && ctx._probe === undefined && !startsFirstSet(combinator, input, pos)) {\n return { ok: true, value: null, span: { start: pos, end: pos } }\n }\n const mark = saveTriviaMark(ctx)\n const result = combinator.parse(input, pos, ctx)\n if (result.ok) return result as ParseResult<T>\n // Inner failed \u2192 roll back any CST leaves/trivia it captured before giving up.\n rollbackTrivia(ctx, mark)\n if (result.committed) return result\n return { ok: true, value: null, span: { start: pos, end: pos } }\n },\n }\n}\n\n/**\n * Non-empty separated list \u2014 `oneOrMore`'s relationship to `many`, for separated\n * lists. `oneOrMoreSep(item, sep)` is exactly `sepBy(item, sep, { min: 1 })`.\n *\n * oneOrMoreSep(g.Selector, literal(',')) // a selector list is never empty\n *\n * REACH FOR THIS, NOT `sepBy`, for any list that cannot actually be empty \u2014\n * selector lists, value lists, media-query preludes, keyframe selectors. `sepBy`'s\n * min-0 default matches the EMPTY STRING, which makes it nullable, and a nullable\n * arm disables its `choice`'s first-char dispatch by parseman's own first-set\n * rule. This form is non-nullable and keeps the item's first-set, so an arm led by\n * it still gates.\n */\nexport function oneOrMoreSep<T, S>(combinator: Combinator<T>, separator: Combinator<S>, opts: SepByOptions = {}): Combinator<T[]> {\n return sepBy(combinator, separator, { ...opts, min: opts.min ?? 1 })\n}\n\n/** How a separator with NO item after it is treated. */\nexport type TrailingSeparator =\n /**\n * DEFAULT, and what `sepBy` has always done: the trailing separator is NOT\n * consumed \u2014 the list ends before it and the enclosing grammar sees it. (It is\n * not an error here; \"forbid\" means the list refuses to own it.)\n */\n | 'forbid'\n /** Consume a trailing separator when present (`a, b,` \u2192 2 items, comma eaten). */\n | 'allow'\n\nexport type SepByOptions = RepeatOptions & {\n /** What to do with a separator that has no item after it. Default `'forbid'`. */\n trailing?: TrailingSeparator\n}\n\n/**\n * Separated list: `(item (sep item)*)?` by default \u2014 note that it MATCHES THE\n * EMPTY STRING, which makes it nullable and therefore un-gateable as a choice arm.\n * For a list that cannot be empty reach for `oneOrMoreSep`, or pass `{ min: 1 }`.\n *\n * sepBy(g.Value, literal(',')) // may be empty \u2014 NULLABLE\n * oneOrMoreSep(g.Selector, literal(',')) // non-empty \u2014 gates as a choice arm\n * sepBy(g.Decl, literal(';'), { trailing: 'allow' })\n *\n * `min`/`max` count ITEMS, not separators.\n */\nexport function sepBy<T, S>(combinator: Combinator<T>, separator: Combinator<S>, opts: SepByOptions = {}): Combinator<T[]> {\n const { min, max } = resolveBounds('sepBy()', opts)\n const trailing = opts.trailing ?? 'forbid'\n const meta: ParserMeta = {\n firstSet: combinator._meta.firstSet,\n canMatchNewline: combinator._meta.canMatchNewline || separator._meta.canMatchNewline,\n isTrivia: false,\n }\n let expected: string[] | undefined\n /**\n * A list-level failure is anchored at the FURTHEST position the list reached,\n * and reports what would have allowed it to CONTINUE there \u2014 never at the\n * list's own start.\n *\n * Anchoring at the start throws away everything the parse learned: for\n * `sepBy(item, ',', { min: 3 })` over `\"a,b\"` the list consumed `a,b` perfectly\n * and got stuck at offset 3 wanting a third item, so a failure reported at 0\n * points the caret at a token that parsed fine. It also mislocates\n * `completionsAt`, which asks what may appear AT a cursor \u2014 the answer belongs\n * at the stuck position, not at the list's start.\n *\n * BOTH engines must follow this rule; it drifted three separate ways across\n * this option surface, and `test/parity/repeat-options-parity.test.ts` is what\n * now holds them together. The empty-set fallback mirrors codegen's\n * `deriveExpectedArr`, so the two payloads are identical.\n */\n const failAt = (at: number): ParseResult<T[]> => {\n expected ??= deriveExpected(combinator)\n return { ok: false, expected: expected.length > 0 ? expected : [combinator._tag], span: { start: at, end: at } }\n }\n\n return {\n _tag: 'sepBy',\n _meta: meta,\n _def: {\n tag: 'sepBy', parser: combinator as Combinator<unknown>, separator: separator as Combinator<unknown>, min,\n ...(max === Infinity ? {} : { max }),\n ...(trailing === 'forbid' ? {} : { trailing }),\n },\n parse(input: string, pos: number, ctx: ParseContext): ParseResult<T[]> {\n const first = combinator.parse(input, pos, ctx)\n const values: T[] = []\n let cur: number\n if (first.ok) {\n values.push(first.value)\n cur = first.span.end\n } else {\n if (first.committed) return first\n // Cold path. Strict: an empty/absent first element is a legal empty list\n // for `sepBy`, and a FAILURE for `sepBy1` (min 1 \u2014 that is the whole point).\n // Tolerant: if the first element is JUNK (a terminator is inferable and we\n // are not already sitting on it) recover it and enter the loop; otherwise\n // it is a genuine empty list.\n const term = ctx._tolerant ? ctx._sync : undefined\n if (term === undefined || matchesAt(term, input, pos, ctx)) {\n // `min >= 1` \u2014 nothing was consumed, so the furthest position IS `pos`.\n // The compiled form swallows the first element's sub-parse (it is\n // discarded on the min-0 path), so it cannot reproduce the inner\n // failure's exact payload; both sides report this same derived set.\n if (min >= 1) return failAt(pos)\n return { ok: true, value: [], span: { start: pos, end: pos } }\n }\n expected ??= deriveExpected(combinator)\n const rec = recoverScan(input, pos, ctx, orSentinel(separator, term), expected)\n values.push(rec.error as unknown as T)\n captureError(ctx, rec.error)\n cur = rec.end\n }\n while (cur < input.length) {\n if (values.length >= max) break\n // One mark for the whole iteration (separator + following item): if the\n // item fails, the trailing separator must be rolled back with it, or its\n // captured leaves leak past the end of the list.\n const loopMark = saveTriviaMark(ctx)\n let sepPos = cur\n if (ctx.trivia) {\n if (needsDeferredTriviaCommit(ctx)) {\n const scan = scanTrivia(input, cur, ctx)\n scan.commit()\n sepPos = scan.end\n } else {\n sepPos = advanceTrivia(input, cur, ctx)\n }\n }\n const sep = separator.parse(input, sepPos, ctx)\n if (!sep.ok) {\n rollbackTrivia(ctx, loopMark)\n if (sep.committed) return sep\n break\n }\n // Mark taken AFTER the separator: `trailing` keeps the separator but must\n // still unwind the trivia + leaves captured past it.\n const sepMark = trailing === 'forbid' ? undefined : saveTriviaMark(ctx)\n let nextPos = sep.span.end\n if (ctx.trivia) {\n if (needsDeferredTriviaCommit(ctx)) {\n const scan = scanTrivia(input, sep.span.end, ctx)\n scan.commit()\n nextPos = scan.end\n } else {\n nextPos = advanceTrivia(input, sep.span.end, ctx)\n }\n }\n const next = combinator.parse(input, nextPos, ctx)\n if (!next.ok) {\n if (next.committed) return next\n // Cold path. Strict: roll back the trailing separator + break. Tolerant:\n // the separator we just consumed is real, so resync the bad element after\n // it. If a terminator is inferable and already present at nextPos, the\n // separator was a trailing one (e.g. `a;}`) \u2192 roll it back and stop.\n //\n // RECOVERY IS TESTED FIRST, and is ORTHOGONAL to `trailing`. This block\n // used to lead with the `sepMark !== undefined` branch \u2014 but sepMark is\n // non-undefined for EVERY 'allow' list, so that branch always won and the\n // resync below became unreachable the moment a grammar opted into a\n // trailing separator. `{a,,b}` recovered under the default 'forbid' and\n // hard-failed under 'allow', which is not a policy anyone would choose:\n // permitting a trailing comma has nothing to do with whether a tolerant\n // parse may resynchronize. (The compiled `failItem` already ordered it\n // this way \u2014 the engines disagreed because of this.)\n //\n // Junk after a REAL separator is recovered whatever `trailing` says, and\n // no rollback happens on that path: both the separator and the recovered\n // error element belong to the list.\n const term = ctx._tolerant ? ctx._sync : undefined\n if (term !== undefined && !matchesAt(term, input, nextPos, ctx)) {\n expected ??= deriveExpected(combinator)\n const rec = recoverScan(input, nextPos, ctx, orSentinel(separator, term), expected)\n values.push(rec.error as unknown as T)\n captureError(ctx, rec.error)\n cur = rec.end\n continue\n }\n if (sepMark !== undefined) {\n // 'allow': the separator we just consumed IS part of the list \u2014 a\n // genuine trailing one, since no resync applied above.\n rollbackTrivia(ctx, sepMark)\n cur = sep.span.end\n break\n }\n rollbackTrivia(ctx, loopMark)\n break\n }\n values.push(next.value)\n cur = next.span.end\n }\n // Too few items: the list is stuck at `cur` wanting another ITEM.\n if (values.length < min) return failAt(cur)\n return { ok: true, value: values, span: { start: pos, end: cur } }\n },\n }\n}\n", "import type { Combinator, ParseContext, ParseResult } from '../types.ts'\nimport { analyzeLabeledTrivia } from '../cst/trivia-kinds.ts'\nimport { choice } from './choice.ts'\nimport { matchesEmpty } from './first-set.ts'\nimport { oneOrMore } from './repeat.ts'\n\nexport function transform<T, U>(\n combinator: Combinator<T>,\n fn: (value: T, span: { start: number; end: number }) => U\n): Combinator<U> {\n return {\n _tag: 'transform',\n _meta: combinator._meta,\n _def: { tag: 'transform', parser: combinator as Combinator<unknown>, fn: fn as (v: unknown, span: { start: number; end: number }) => unknown },\n parse(input: string, pos: number, ctx: ParseContext): ParseResult<U> {\n const result = combinator.parse(input, pos, ctx)\n if (!result.ok) return result\n return { ok: true, value: fn(result.value, result.span), span: result.span }\n },\n }\n}\n\nexport function skip<T, S>(main: Combinator<T>, skipped: Combinator<S>): Combinator<T> {\n return {\n _tag: 'skip',\n _meta: main._meta,\n _def: { tag: 'skip', main: main as Combinator<unknown>, skipped: skipped as Combinator<unknown> },\n parse(input: string, pos: number, ctx: ParseContext): ParseResult<T> {\n const result = main.parse(input, pos, ctx)\n if (!result.ok) return result\n const s = skipped.parse(input, result.span.end, ctx)\n if (!s.ok) return result\n return { ok: true, value: result.value, span: { start: result.span.start, end: s.span.end } }\n },\n }\n}\n\nexport function trivia<T>(combinator: Combinator<T>): Combinator<T> {\n const kindLabels = analyzeLabeledTrivia(combinator as Combinator<unknown>)?.labels\n return {\n _tag: combinator._tag,\n _meta: {\n ...combinator._meta,\n isTrivia: true,\n ...(kindLabels ? { triviaKindLabels: kindLabels } : {}),\n },\n _def: { tag: 'trivia', parser: combinator as Combinator<unknown> },\n parse: combinator.parse.bind(combinator),\n }\n}\n\n/**\n * Build trivia whose category labels are part of its recognition structure.\n *\n * Use this for a grammar that exposes selected root trivia. In contrast to\n * `trivia(label('categoryA', broadRegex))`, every category here owns one arm,\n * so one selected category cannot be silently consumed under another category's\n * broad matcher.\n * `rootTrivia: { select }` rejects ordinary scoped trivia\n * unless that scope explicitly declares itself opaque.\n */\nexport function classifiedTrivia(\n arms: Readonly<Record<string, Combinator<unknown>>>,\n): Combinator<unknown> {\n const entries = Object.entries(arms)\n if (entries.length === 0) {\n throw new TypeError('classifiedTrivia() requires at least one named trivia arm.')\n }\n for (let i = 0; i < entries.length; i++) {\n const [name, arm] = entries[i]!\n const first = arm._meta.firstSet\n if (matchesEmpty(arm) || first.kind !== 'ranges' || first.ranges.length === 0) {\n throw new TypeError(\n `classifiedTrivia(): ${JSON.stringify(name)} must be non-nullable with a concrete finite first set.`,\n )\n }\n }\n const labeledArms = entries.map(([name, arm]) => label(name, arm)) as [\n Combinator<unknown>,\n ...Combinator<unknown>[],\n ]\n const result = trivia(oneOrMore(choice(...labeledArms)))\n result._meta.rootTriviaClassified = true\n return result\n}\n\n/**\n * Attach a string label to a parser arm (e.g. trivia `choice` branches).\n * Parse behavior is unchanged; the label is metadata for tooling and future\n * trivia-kind capture (`'whitespace'`, `'blockComment'`, \u2026).\n */\nexport function label<T>(name: string, combinator: Combinator<T>): Combinator<T> {\n return {\n _tag: combinator._tag,\n _meta: combinator._meta,\n _def: { tag: 'label', label: name, parser: combinator as Combinator<unknown> },\n parse(input: string, pos: number, ctx: ParseContext): ParseResult<T> {\n const result = combinator.parse(input, pos, ctx)\n if (!result.ok) return { ok: false, expected: [name], span: result.span }\n return result\n },\n }\n}\n\n/**\n * Capture a named parse result for the nearest enclosing node() builder.\n * Parse behavior and the normal returned value are unchanged.\n */\nexport function field<T>(name: string, combinator: Combinator<T>): Combinator<T> {\n return {\n _tag: combinator._tag,\n _meta: combinator._meta,\n _def: { tag: 'field', name, parser: combinator as Combinator<unknown> },\n parse(input: string, pos: number, ctx: ParseContext): ParseResult<T> {\n const result = combinator.parse(input, pos, ctx)\n if (!result.ok) return result\n ctx._fields?.push({ name, value: result.value, span: result.span })\n return result\n },\n }\n}\n", "import type { Combinator, ParseContext, ParseResult, ParserMeta } from '../types.ts'\nimport { any } from './first-set.ts'\n\n/**\n * Create a forward-declared parser slot for mutually recursive grammars.\n *\n * Because JS evaluates arguments eagerly, you can't reference a variable\n * before it's declared. ref() creates a placeholder you fill in later:\n *\n * const value = ref<JSONValue>()\n * const array = transform(sequence(literal('['), sepBy(value, literal(',')), literal(']')), ...)\n * const object = transform(sequence(literal('{'), sepBy(pair, literal(',')), literal('}')), ...)\n * value.define(choice(object, array, string, number, bool, nullVal))\n *\n * Unlike lazy(() => x), you use the ref directly \u2014 no wrapping at each call site.\n */\nexport function ref<T>(): Combinator<T> & { define(p: Combinator<T>): void } {\n let resolved: Combinator<T> | null = null\n\n const meta: ParserMeta = {\n firstSet: any(),\n canMatchNewline: true,\n isTrivia: false,\n }\n\n const slot = {\n _tag: 'lazy' as const,\n _meta: meta,\n _def: {\n tag: 'lazy' as const,\n thunk: () => {\n if (!resolved) throw new Error('ref<T>() used before .define() was called')\n return resolved as Combinator<unknown>\n },\n },\n parse(input: string, pos: number, ctx: ParseContext): ParseResult<T> {\n if (!resolved) throw new Error('ref<T>() used before .define() was called')\n return resolved.parse(input, pos, ctx)\n },\n define(p: Combinator<T>): void {\n if (resolved) throw new Error('ref<T>() already defined')\n resolved = p\n meta.firstSet = p._meta.firstSet\n meta.canMatchNewline = p._meta.canMatchNewline\n meta.isTrivia = p._meta.isTrivia\n if (p._meta.triviaKindLabels !== undefined) meta.triviaKindLabels = p._meta.triviaKindLabels\n else delete meta.triviaKindLabels\n if (p._meta.disjoint !== undefined) meta.disjoint = p._meta.disjoint\n else delete meta.disjoint\n },\n }\n\n return slot\n}\n", "import type { Combinator, ParseContext, ParseResult, ParserMeta } from '../types.ts'\nimport { literal } from './literal.ts'\nimport { regex } from './regex.ts'\nimport { sequence } from './sequence.ts'\nimport { choice } from './choice.ts'\nimport { many } from './repeat.ts'\nimport { transform } from './map.ts'\nimport { expect } from './expect.ts'\nimport { any } from './first-set.ts'\nimport { ref } from './ref.ts'\nimport { pushCstLeaf, cstCaptureActive } from '../cst/capture-buffer.ts'\nimport { recordLineRangeFromContext } from '../line-index.ts'\n\nexport type ScanToOptions = {\n /**\n * Per-call opaque-unit skippers (balanced parens/brackets, dialect\n * interpolation, \u2026). These EXTEND the grammar-level ambient default: ambient\n * trivia (comments/ws) and ambient `scanSkip` (strings) are applied too, unless\n * `raw`. So a site only needs to list the extra units its scan requires.\n */\n skip?: Combinator<unknown>[]\n /**\n * Hard opt-out: skip NOTHING ambiently \u2014 no trivia, no scanSkip, and (with no\n * per-call `skip`) a pure raw byte-walk. For the rare site that intends to scan\n * literally through comments/strings.\n */\n raw?: boolean\n /**\n * If true, reaching EOF without finding the sentinel is a success \u2014 returns\n * everything consumed so far. Default false (fail at EOF).\n */\n orEOF?: boolean\n}\n\n/**\n * Resolve the effective ordered skipper list for a scan, folding grammar-level\n * ambient trivia + scanSkip in FRONT of the per-call `skip` (explicit skip\n * EXTENDS the ambient default). Shared by the interpreter `scanTo`/`balanced`;\n * the compiled path bakes the identical list in codegen.\n *\n * raw \u2192 [] (no trivia, no scanSkip, no skip)\n * else \u2192 [ ...trivia?, ...scanSkip?, ...skip ]\n *\n * The ambient trivia (comments/ws) leads so a sentinel hidden in a comment is\n * never matched, then ambient strings, then the site's extra units. The sentinel\n * itself is still checked before any skipper, so a sentinel that also starts a\n * skip region wins (unchanged priority).\n */\nexport function resolveScanSkip(\n explicitSkip: Combinator<unknown>[],\n raw: boolean,\n ctx: ParseContext,\n): Combinator<unknown>[] {\n if (raw) return []\n const trivia = ctx.trivia\n const ambient = ctx.scanSkip\n if (!trivia && !ambient) return explicitSkip\n const out: Combinator<unknown>[] = []\n if (trivia) out.push(trivia)\n if (ambient) out.push(...ambient)\n out.push(...explicitSkip)\n return out\n}\n\n/**\n * Consume input up to (but not including) the sentinel, skipping over any\n * \"hole\" patterns in order so their contents are never mistaken for the sentinel.\n *\n * Returns the consumed text as a string. The sentinel is NOT consumed.\n * Fails if the sentinel is never found (unless orEOF is true).\n *\n * const selector = scanTo(literal('{'), {\n * skip: [cssComment, stringLit, balanced('(', ')'), balanced('[', ']')],\n * })\n */\nexport function scanTo(\n sentinel: Combinator<unknown>,\n { skip, raw = false, orEOF = false }: ScanToOptions = {},\n): Combinator<string> {\n const meta: ParserMeta = {\n firstSet: any(),\n canMatchNewline: true,\n isTrivia: false,\n }\n const explicitSkip = skip ?? []\n\n return {\n _tag: 'scanTo',\n _meta: meta,\n _def: { tag: 'scanTo', sentinel, skip: explicitSkip, raw, orEOF },\n parse(input: string, pos: number, ctx: ParseContext): ParseResult<string> {\n let cur = pos\n // Fold grammar-level ambient trivia + scanSkip into the effective skippers.\n const skip = resolveScanSkip(explicitSkip, raw, ctx)\n\n // Sentinel checks and skip scans must not emit CST children of their own \u2014\n // scanTo represents the whole scanned span as one leaf. Probe them with a\n // collector-free context so their internal literal()/regex() don't push.\n // The error channel IS forwarded, so a committed skipper (e.g. balanced()\n // whose open delimiter was consumed) can still report an unmatched close.\n const probeCtx: ParseContext = {\n trackLines: false,\n state: ctx.state,\n ...(ctx._errors !== undefined ? { _errors: ctx._errors } : {}),\n }\n\n // Record the scanned text as a CSTLeaf so buildNode-driven grammars can\n // see it in children/rawChildren (it would otherwise be lost \u2014 only the\n // returned value carries it). Skipped when no collector is active.\n const emit = (end: number) => {\n if (end > pos && cstCaptureActive(ctx)) {\n const leaf = { _tag: 'leaf', value: input.slice(pos, end), span: { start: pos, end } }\n pushCstLeaf(ctx, leaf)\n }\n }\n\n while (cur < input.length) {\n // Check sentinel \u2014 if it matches here, stop and return consumed text.\n const s = sentinel.parse(input, cur, probeCtx)\n if (s.ok) {\n if (ctx.trackLines) recordLineRangeFromContext(ctx, input, pos, cur)\n emit(cur)\n return { ok: true, value: input.slice(pos, cur), span: { start: pos, end: cur } }\n }\n\n // Try each skipper in order; take first that advances.\n let advanced = false\n for (const skipper of skip) {\n const r = skipper.parse(input, cur, probeCtx)\n if (r.ok && r.span.end > cur) {\n cur = r.span.end\n advanced = true\n break\n }\n }\n\n // Nothing matched \u2014 consume one character and continue.\n if (!advanced) cur++\n }\n\n // Reached EOF without finding sentinel.\n if (orEOF) {\n if (ctx.trackLines) recordLineRangeFromContext(ctx, input, pos, cur)\n emit(cur)\n return { ok: true, value: input.slice(pos, cur), span: { start: pos, end: cur } }\n }\n const sentDef = sentinel._def\n const expected = sentDef.tag === 'literal' ? [JSON.stringify(sentDef.value)] : ['sentinel']\n return { ok: false, expected, span: { start: pos, end: cur } }\n },\n }\n}\n\n/** Codegen marker: a balanced combinator that must re-resolve ambient scanSkip\n * into its interior at emit time (the compiled mirror of the interpreter wrapper). */\nexport type BalancedAmbient = Combinator<string> & {\n _balancedAmbient?: { open: string; close: string; ownSkip: Combinator<unknown>[] }\n}\n\n/**\n * Match a balanced open/close pair, skipping over any holes inside.\n * Returns the full matched text including delimiters.\n *\n * const parenGroup = balanced('(', ')', { skip: [comment, stringLit] })\n *\n * With no per-call `skip`, a balanced under a grammar that declares\n * `rules({ scanSkip })` consults that ambient opaque-unit set in its INTERIOR too,\n * so a delimiter hidden inside a string/bracket run never closes the balance\n * early \u2014 the same footgun closure `scanTo` gets. `raw: true` opts out.\n */\nexport function balanced(\n open: string,\n close: string,\n options: ScanToOptions = {},\n): Combinator<string> {\n const ownSkip = options.skip ?? []\n const combi = buildBalancedInterior(open, close, ownSkip)\n // `raw` keeps the pre-ambient behavior: the eager interior (per-call skip only).\n if (options.raw) return combi\n\n // Ambient-aware in place \u2014 the returned combinator KEEPS its identity (its own\n // interior `self` ref points back to it, and ir-serialize / codegen dedup rely\n // on that), so we override `parse` rather than wrapping. `_def`/`_meta` are\n // unchanged, so every static analysis sees the eager interior; only PARSING and\n // codegen EMIT re-resolve `ctx.scanSkip`. Interiors are cached by the ambient\n // array's identity (stable per grammar). Balanced consults ambient `scanSkip`\n // (opaque units) but NOT trivia \u2014 its delimiters are structural and its content\n // regex already spans whitespace, so adding trivia would perturb every existing\n // balanced; the footgun is a delimiter hidden in opaque-unit content.\n const eagerParse = combi.parse.bind(combi)\n const cache = new Map<readonly Combinator<unknown>[], Combinator<string>>()\n ;(combi as BalancedAmbient)._balancedAmbient = { open, close, ownSkip }\n combi.parse = (input: string, pos: number, ctx: ParseContext): ParseResult<string> => {\n const amb = ctx.scanSkip\n if (!amb || amb.length === 0) return eagerParse(input, pos, ctx)\n let interior = cache.get(amb)\n if (!interior) {\n interior = buildBalancedInterior(open, close, [...amb, ...ownSkip])\n cache.set(amb, interior)\n }\n return interior.parse(input, pos, ctx)\n }\n return combi\n}\n\n/** Build a balanced open/close interior for a FIXED skip set (no ambient). */\nexport function buildBalancedInterior(\n open: string,\n close: string,\n skips: Combinator<unknown>[],\n): Combinator<string> {\n // The interior scan must skip NESTED same-delimiter pairs so depth is counted \u2014\n // otherwise `{{x}}` stops at the first `}`. `self` references this balanced\n // combinator; added to the interior scan's skip list, a nested `open` is\n // consumed intact (recursively) before the scan looks for the matching `close`.\n const self = ref<string>()\n // PREDICTIVE interior \u2014 no char-walk. The body is `many(choice(self, \u2026skips,\n // contentRun))`, where contentRun is a regex of chars that are NOT this pair's\n // delimiters and NOT the start of any skip (so a string/comment arm still wins\n // its position). At any other character \u2014 a stray close, or a *different* bracket\n // type \u2014 no arm matches, `many` stops, and the required close (expect()) reports\n // \"expected <close>\". So an unmatched open, a cross-type close `(a]`, and a stray\n // close all surface as errors; nothing is silently swallowed. Well-formed input\n // is consumed identically.\n const stop = new Set<string>([open, close])\n let bounded = true\n for (const sk of skips) {\n const cs = firstSetClassChars(sk)\n if (cs === null) { bounded = false; break }\n for (const ch of cs) stop.add(ch)\n }\n const cls = [...stop].map(escapeClassChar).join('')\n // A run when every skip's start is bounded (fast); else one char at a time so a\n // skip arm always gets the chance to match at its position.\n const content = bounded\n ? regex(new RegExp(`[^${cls}]+`))\n : regex(new RegExp(`[^${escapeClassChar(open)}${escapeClassChar(close)}]`))\n const inner = many(choice(self, ...skips, content))\n const combi = transform(\n sequence(literal(open), inner, expect(literal(close))),\n // parts: strings (content/self) or arrays (a sequence-shaped skip) or a\n // ParseError (recovered close). `c` is the close string or a ParseError.\n ([o, parts, c]) => o + (parts as unknown[]).map(p => typeof p === 'string' ? p : Array.isArray(p) ? p.join('') : '').join('') + (typeof c === 'string' ? c : ''),\n )\n // Provide the callback source so the macro can inline this library-internal\n // transform (codegen derives map-fn sources from def.fnSrc).\n if (combi._def.tag === 'transform') {\n combi._def.fnSrc = '([o, parts, c]) => o + parts.map(p => typeof p === \"string\" ? p : Array.isArray(p) ? p.join(\"\") : \"\").join(\"\") + (typeof c === \"string\" ? c : \"\")'\n // This is Parseman's structural delimiter reconstruction, not a grammar\n // semantic reduction. It must remain eligible for recognition-only\n // composeLeaf artifacts while user-authored transform() remains excluded.\n combi._def.recognitionOnly = true\n }\n self.define(combi as Combinator<string>)\n return combi\n}\n\n/**\n * The characters a combinator can START with, as char-class members \u2014 or null if\n * its first set is unbounded ('any') or too broad to be a delimiter. Used by\n * balanced() to keep a content run from eating the start of a skip.\n */\nfunction firstSetClassChars(c: Combinator<unknown>): string[] | null {\n const fs = c._meta.firstSet\n if (fs.kind === 'empty') return []\n if (fs.kind !== 'ranges') return null\n const out: string[] = []\n for (const { lo, hi } of fs.ranges) {\n if (hi - lo > 8) return null\n for (let cp = lo; cp <= hi; cp++) out.push(String.fromCodePoint(cp))\n }\n return out\n}\n\nfunction escapeClassChar(ch: string): string {\n return ch.replace(/[\\\\\\]^-]/g, '\\\\$&')\n}\n", "/**\n * Degradation diagnostics \u2014 \"parseman could not do the fast/complete thing here\".\n *\n * A fallback that is CORRECT but slower (or less complete) and announces nothing is\n * indistinguishable from working properly. Every such path in the compiler and the\n * analysis APIs reports through this one channel so a consumer's build gate can\n * assert ZERO degradations, exactly the way jess's `check:macro` already asserts zero\n * `\"falling back to runtime\"` lines.\n *\n * Machine-greppable contract (stable across minor versions):\n *\n * [parseman] degraded [<code>] <where>: <subject> \u2014 <fell back to>; otherwise <what>\n *\n * Grep token is the literal `[parseman] degraded`. The `<code>` is a stable kebab-case\n * identifier; new codes may be added, existing ones are not renamed without a note in\n * CHANGELOG.md.\n *\n * NOT for: user errors (those throw), un-taken optimizations that cost nothing, or\n * anything a grammar author cannot act on. A diagnostic that fires on every rule gets\n * filtered out and becomes the same silence we are trying to end \u2014 so a code that is\n * common and unavoidable AGGREGATES (see `DETAIL_CAP`) into one summary line with a\n * count instead of one line per rule.\n */\n\n/** Off / print / throw. */\nexport type DegradationLevel = 'off' | 'warn' | 'error'\n\n/** Stable, greppable code per degradation class. */\nexport type DegradationCode =\n /** A node build's formal parameter list could not be read \u2192 all capture tiers kept. */\n | 'build-arity-unconfirmed'\n /** A node build looks like an `mk(...)` wrapper but did not match \u2192 no inline-mk. */\n | 'mk-inline-missed'\n /** A composed/carried piece is an opaque artifact \u2192 its rules were not analysed. */\n | 'opaque-artifact'\n /** A coverage-definition request could not read the grammar \u2192 empty is NOT a zero. */\n | 'coverage-definitions-unavailable'\n\n/**\n * Severity. `warn` = a real, measurable cost the author can remove. `info` = the author\n * has nothing to act on (e.g. an imported reducer in someone else's package), but the\n * fact still has to be visible and countable.\n */\nexport type DegradationSeverity = 'warn' | 'info'\n\nexport type Degradation = {\n code: DegradationCode\n severity: DegradationSeverity\n /** Rule / node type / artifact the cost lands on. Never a bare \"<unknown>\" if avoidable. */\n where: string\n /** The reducer, identifier, or input that could not be analysed. */\n subject: string\n /** What parseman did instead. */\n fellBackTo: string\n /** What it would have done had the input been analysable. */\n otherwise: string\n}\n\n/** One line per finding, in the documented greppable shape. */\nexport function formatDegradation(d: Degradation): string {\n return `[parseman] degraded [${d.code}] ${d.where}: ${d.subject} \u2014 ${d.fellBackTo}; otherwise ${d.otherwise}`\n}\n\n/**\n * Per-code detail cap. Above it the remaining sites collapse to one counted summary\n * line. Chosen small on purpose: the point of a detail line is to give an author a\n * concrete place to start, and eight starting points is already more than anyone acts\n * on in one pass. The COUNT is what makes the rest visible.\n */\nconst DETAIL_CAP = 8\n\n/** Group by code, cap the detail lines, and append a counted summary for the rest. */\nexport function formatDegradations(list: readonly Degradation[]): string[] {\n const byCode = new Map<DegradationCode, Degradation[]>()\n for (const d of list) {\n const bucket = byCode.get(d.code)\n if (bucket) bucket.push(d)\n else byCode.set(d.code, [d])\n }\n const out: string[] = []\n for (const [code, items] of byCode) {\n for (const d of items.slice(0, DETAIL_CAP)) out.push(formatDegradation(d))\n if (items.length > DETAIL_CAP) {\n out.push(\n `[parseman] degraded [${code}] +${items.length - DETAIL_CAP} more site(s) not listed `\n + `(${items.length} total). Set PARSEMAN_DEGRADATION=error to fail the build on these.`,\n )\n }\n }\n return out\n}\n\n// ---------------------------------------------------------------------------\n// Capture sink\n//\n// Compilation is single-module and synchronous, so a module-level sink (opened per\n// transform, drained after) records findings without threading a field through every\n// Ctx and every compile*() return \u2014 the same shape as the regex-lowering sink in\n// codegen.ts, for the same reason.\n// ---------------------------------------------------------------------------\n//\n// A STACK, not a single slot. `transformMacro` re-enters itself when it lowers a private\n// source module, so a single slot let the inner call's `endDegradationCapture()` close\n// the OUTER module's sink \u2014 every later finding in the outer pass then bypassed capture\n// and printed instead. A stack scopes each frame to its own module.\n// ---------------------------------------------------------------------------\nconst _sinks: Array<Map<string, Degradation>> = []\n\n/** Begin collecting degradations instead of printing them. */\nexport function beginDegradationCapture(): void {\n _sinks.push(new Map())\n}\n\n/** Stop collecting and return the findings (deduped, insertion-ordered). */\nexport function endDegradationCapture(): Degradation[] {\n const sink = _sinks.pop()\n return sink ? [...sink.values()] : []\n}\n\n/** Open-sink depth, for a caller that must unwind exactly its own frames. */\nexport function degradationCaptureDepth(): number {\n return _sinks.length\n}\n\n/**\n * Close every sink opened above `depth` and return their findings, outermost first.\n *\n * The safety net for an ABORTED capture. `beginDegradationCapture()` and its matching\n * `end` used to sit on the straight-line path of a function that throws between them, so\n * one failed macro transform left the sink open for the REST OF THE PROCESS: every later\n * `recordDegradation` \u2014 including from an unrelated runtime `compile()` \u2014 went into a\n * dead Map and printed nothing. Calling this from a `finally` bounds the damage to the\n * frame that failed, and returns what it had collected so it can still be reported\n * rather than silently dropped.\n */\nexport function unwindDegradationCapture(depth: number): Degradation[] {\n const found: Degradation[] = []\n while (_sinks.length > depth) {\n const sink = _sinks.pop()!\n found.unshift(...sink.values())\n }\n return found\n}\n\n/**\n * Resolve the level: explicit argument wins, else `PARSEMAN_DEGRADATION`, else\n * default-on `'warn'`. Default-on is the whole point \u2014 this exists because the\n * default was silence.\n */\nexport function resolveDegradationLevel(explicit?: DegradationLevel): DegradationLevel {\n if (explicit !== undefined) return explicit\n const env = typeof process !== 'undefined' ? (process.env?.PARSEMAN_DEGRADATION as DegradationLevel | undefined) : undefined\n if (env === 'off' || env === 'warn' || env === 'error') return env\n return 'warn'\n}\n\n/**\n * The dedup key for one finding.\n *\n * `JSON.stringify` of the tuple, NOT a delimiter-joined string. Two of the three\n * components are unbounded author text \u2014 `where` embeds a node type and `subject` is a\n * verbatim slice of reducer SOURCE \u2014 so no single delimiter character can be shown absent\n * from them, and picking a rarer one is the same bug one notch weaker. A JSON array is\n * injective by construction and needs no such argument.\n *\n * It is also PRINTABLE, which is the property this file lost twice. The key was built\n * with RAW 0x00 bytes in a template literal, which makes the whole source file BINARY:\n * `git diff --numstat` reported `- -` for it, GitHub refused to render it, and `grep -rn`\n * skipped it SILENTLY \u2014 no \"binary file matches\", no output, exit 0. The largest new file\n * in the release was invisible to ordinary review. Commit `ed81612` had already removed\n * exactly this pattern from `gating.ts` and `duplication.ts`; it came straight back here.\n * `scripts/check-control-bytes.mjs` now fails CI on it, because a fix without a gate got\n * us a second occurrence and would get us a third.\n *\n * This runs only when a degradation is actually recorded \u2014 never per match \u2014 so the\n * encoding cost is irrelevant.\n */\nfunction degradationKey(d: Degradation): string {\n return JSON.stringify([d.code, d.where, d.subject])\n}\n\n/**\n * Record one degradation. Deduped on `code + where + subject`, so the four capture-tier\n * probes that all consult the same unreadable parameter list produce ONE finding, not\n * four.\n *\n * With a sink open (a macro transform) the finding is collected and the drain site\n * decides what to do with it. With NO sink open \u2014 a runtime `compile()` \u2014 this is the\n * only place that ever sees the finding, so it is also the only place that can honour\n * `'error'`. It therefore throws here. `docs/guide/degradation-diagnostics.md` documents\n * `PARSEMAN_DEGRADATION=error` as \"fail the build\" without qualification, and until this\n * throw existed that was false in library mode: `error` silently behaved as `warn`,\n * because `endDegradationCapture()` had exactly one call site, in the macro plugin.\n */\nexport function recordDegradation(d: Degradation): void {\n const level = resolveDegradationLevel()\n if (level === 'off') return\n const key = degradationKey(d)\n const sink = _sinks[_sinks.length - 1]\n if (sink) {\n if (!sink.has(key)) sink.set(key, d)\n return\n }\n if (_immediate.has(key)) return\n _immediate.add(key)\n if (level === 'error') throw new Error(`parseman: degraded compilation path\\n${formatDegradation(d)}`)\n console.warn(formatDegradation(d))\n}\n\n/** Dedup memo for the sink-less (runtime `compile()`) path. */\nconst _immediate = new Set<string>()\n\n/**\n * Open a per-`compile()` drain and return the function that closes it.\n *\n * This channel stays LOUD. `compile()` no longer prints gating advice \u2014 that is a\n * deliberate diagnostic now (`diagnoseGrammar`) \u2014 but a degradation is not advice: it\n * is parseman reporting that it could not do the thing the caller asked for, and this\n * release exists to stop that happening silently. What changes here is only the SHAPE.\n *\n * Before, the sink-less path printed one ~500-character line per site as it went, with\n * no aggregation \u2014 31 of them for a single code in one `pnpm perf:workloads` run, each\n * repeating the same advice. The macro drain has always aggregated (`formatDegradations`,\n * `DETAIL_CAP`); the runtime path simply had no drain to aggregate at. It has one now,\n * so both paths report the same way and a real count survives instead of a wall.\n *\n * Nested inside a macro transform this is a NO-OP: that transform's sink owns the whole\n * module's findings and returns them on the bundler's warning channel. A per-compile\n * drain underneath it would steal them and print them instead.\n *\n * @returns `drain(report)` \u2014 always unwinds the sink (so a `compile()` that throws\n * cannot leave it open for the rest of the process), and reports only when\n * `report` is true, so a failed compile does not mask its own error with a second one.\n */\nexport function beginCompileDegradationDrain(): (report: boolean) => void {\n if (resolveDegradationLevel() === 'off' || _sinks.length > 0) return () => {}\n const depth = degradationCaptureDepth()\n beginDegradationCapture()\n return (report: boolean) => {\n const found = unwindDegradationCapture(depth)\n if (!report || found.length === 0) return\n // Process-level dedup, preserved from the immediate path: compiling the same grammar\n // twice must not re-print what the author has already been told once.\n const fresh = found.filter(d => {\n const k = degradationKey(d)\n if (_immediate.has(k)) return false\n _immediate.add(k)\n return true\n })\n if (fresh.length === 0) return\n const lines = formatDegradations(fresh)\n if (resolveDegradationLevel() === 'error') {\n throw new Error(`parseman: ${fresh.length} degraded compilation path(s)\\n${lines.join('\\n')}`)\n }\n for (const l of lines) console.warn(l)\n }\n}\n\n/** Test-only: forget the sink-less dedup memo. */\nexport function resetDegradationMemo(): void {\n _immediate.clear()\n}\n\n/** Test-only: is a sink open? Guards against a leaked capture between test files. */\nexport function hasOpenDegradationSink(): boolean {\n return _sinks.length > 0\n}\n\n", "import type { Combinator, ParserDef } from '../types.ts'\nimport { recordDegradation } from './degradation.ts'\n\nexport type GrammarCoverageDefinition = { id: string; kind: 'rule' | 'choice-arm' | 'dispatch-arm' | 'label' }\nexport type GrammarCoveragePlan = {\n definitions: readonly GrammarCoverageDefinition[]\n choices: WeakMap<Combinator<unknown>, readonly string[]>\n dispatches: WeakMap<Combinator<unknown>, readonly string[]>\n /** Trace-only transaction identity. Attempts are not coverage definitions: a\n * rejected transaction must not create a semantic winner or denominator. */\n attempts: WeakMap<Combinator<unknown>, string>\n labels: WeakMap<Combinator<unknown>, readonly string[]>\n rules: WeakMap<Combinator<unknown>, string>\n}\n\nfunction idPart(value: string): string {\n return encodeURIComponent(value)\n}\n\nfunction dispatchArmIds(def: Extract<ParserDef, { tag: 'dispatch' }>, path: string): string[] {\n const ids: string[] = []\n for (const entry of def.cases) ids.push(`dispatch:${path}/when:${entry.keys.map(idPart).join('|')}`)\n for (const entry of def.matchers ?? []) {\n ids.push(`dispatch:${path}/matcher:${entry.kind}:${idPart(entry.value)}${entry.kind === 'matches' && entry.flags ? `:${idPart(entry.flags)}` : ''}`)\n }\n if (def.otherwise) ids.push(`dispatch:${path}/otherwise`)\n return ids\n}\n\nfunction children(def: ParserDef, winners?: Record<string, Combinator<unknown>>): Combinator<unknown>[] {\n switch (def.tag) {\n case 'sequence': case 'choice': return def.parsers\n case 'dispatch': return [def.selector, ...def.cases.map(entry => entry.parser), ...(def.matchers ? def.matchers.map(entry => entry.parser) : []), ...(def.otherwise ? [def.otherwise] : [])]\n case 'many': case 'oneOrMore': case 'optional': case 'attempt': case 'transform': case 'trivia': case 'token': case 'leaf': case 'label': case 'field': case 'grammar': case 'not': case 'peek': case 'node': case 'guard': case 'withCtx': case 'recover': case 'expect': return 'parser' in def ? [def.parser] : []\n case 'sepBy': return [def.parser, def.separator]\n case 'skip': return [def.main, def.skipped]\n case 'scanTo': return [def.sentinel, ...def.skip]\n case 'lazy': {\n let resolved: Combinator<unknown>\n try { resolved = def.thunk() } catch (e) {\n // An unresolvable `ref()` / cross-artifact hole truncates the walk, so every\n // definition beneath it is missing from the plan. That SHRINKS the coverage\n // denominator, which pushes the reported ratio UP \u2014 a blind spot that reads as\n // better coverage. `analyzeGatingRules` routes the same situation into\n // `unanalysable`; the coverage walk has no such field, so it reports here.\n recordDegradation({\n code: 'coverage-definitions-unavailable',\n severity: 'warn',\n where: '<lazy rule reference>',\n subject: `unresolvable reference (${(e as Error).message})`,\n fellBackTo: 'the coverage walk stopped at this reference, so every definition below '\n + 'it is ABSENT from the denominator \u2014 which raises the reported ratio rather than '\n + 'lowering it',\n otherwise: 'the referenced rule and its whole subtree would contribute definitions',\n })\n return []\n }\n const name = (resolved as Combinator<unknown> & { _ruleName?: string })._ruleName\n return name && winners?.[name] ? [winners[name]!] : [resolved]\n }\n default: return []\n }\n}\n\n/** Canonical deterministic IDs for one explicit entry closure, or every public\n * entry in a `rules()` map. Multiple roots share identity maps so a shared\n * subtree still has one stable owner. */\nexport function buildGrammarPlan(entry: Combinator<unknown> | readonly Combinator<unknown>[], winners?: Record<string, Combinator<unknown>>): GrammarCoveragePlan {\n const definitions = new Map<string, GrammarCoverageDefinition>()\n const choices = new WeakMap<Combinator<unknown>, readonly string[]>()\n const dispatches = new WeakMap<Combinator<unknown>, readonly string[]>()\n const attempts = new WeakMap<Combinator<unknown>, string>()\n const labels = new WeakMap<Combinator<unknown>, readonly string[]>()\n const rules = new WeakMap<Combinator<unknown>, string>()\n // A `rules()` map stores named lazy proxies while code generation may emit\n // either that proxy or its resolved body. Final composed winners are the\n // authority for both identities; relying on `_ruleName` alone loses direct\n // local leaf rules and cross-piece references after IR hydration.\n const winnerNames = new Map<Combinator<unknown>, string>()\n if (winners) {\n for (const [name, winner] of Object.entries(winners)) {\n winnerNames.set(winner, name)\n if (winner._def.tag === 'lazy') {\n try { winnerNames.set(winner._def.thunk(), name) } catch { /* unresolved external stays absent */ }\n }\n }\n }\n const seen = new Set<Combinator<unknown>>()\n const visit = (parser: Combinator<unknown>, path: string): void => {\n if (seen.has(parser)) return\n seen.add(parser)\n const rule = winnerNames.get(parser) ?? (parser as Combinator<unknown> & { _ruleName?: string })._ruleName\n // `rules()` references are tagged too for linker naming, but only the final\n // rule definition owns execution coverage; otherwise ref + target double-hit.\n if (rule && (winnerNames.has(parser) || parser._def.tag !== 'lazy')) {\n const id = `rule:${rule}`\n definitions.set(id, { id, kind: 'rule' })\n rules.set(parser, id)\n }\n if (parser._def.tag === 'choice') {\n const ids = parser._def.parsers.map((_, index) => `choice:${path}/arm:${index}`)\n choices.set(parser, ids)\n ids.forEach(id => definitions.set(id, { id, kind: 'choice-arm' }))\n }\n if (parser._def.tag === 'dispatch') {\n const ids = dispatchArmIds(parser._def, path)\n dispatches.set(parser, ids)\n ids.forEach(id => definitions.set(id, { id, kind: 'dispatch-arm' }))\n }\n if (parser._def.tag === 'attempt') attempts.set(parser, `attempt:${path}`)\n if (parser._def.tag === 'label') {\n const id = `label:${path}`\n labels.set(parser, [id])\n definitions.set(id, { id, kind: 'label' })\n }\n children(parser._def, winners).forEach((child, index) => visit(child, `${path}/${parser._def.tag}:${index}`))\n }\n const roots = Array.isArray(entry) ? entry : [entry]\n for (const root of roots) {\n // Rule-map compilation can receive ordinary, unannotated combinators. The\n // caller's winner map is then the only durable public identity for each\n // root; using the generic `entry` path would merge separate roots' choice\n // IDs and omit their rule definitions.\n visit(root, winnerNames.get(root) ?? (root as Combinator<unknown> & { _ruleName?: string })._ruleName ?? 'entry')\n }\n return { definitions: [...definitions.values()].sort((a, b) => a.id.localeCompare(b.id)), choices, dispatches, attempts, labels, rules }\n}\n", "/** View over a flat trivia log (`_triviaLog` or per-node `triviaLog`). */\nexport type TriviaEntriesView = {\n readonly length: number\n readonly labels: readonly string[] | undefined\n readonly stride: number\n start(i: number): number\n end(i: number): number\n /** Raw-child insertion boundary; defined only for a per-node trivia log. */\n insertIndex(i: number): number | undefined\n kindIndex(i: number): number | undefined\n kind(i: number): string | undefined\n text(i: number, input: string): string\n}\n\nexport type RootTriviaGap = {\n /** Start offset of the contiguous trivia gap. */\n readonly start: number\n /** End offset of the contiguous trivia gap. */\n readonly end: number\n /** Entry indices into `entries` that make up this gap. */\n readonly entryIndices: readonly number[]\n /** True when any entry in the gap has the requested labeled trivia kind. */\n hasKind(kind: string): boolean\n /** Slice the full contiguous gap text from the original input. */\n text(input: string): string\n}\n\nexport type RootTriviaIndex = {\n /** Lazy entry-level view over sparse selected-root rows. */\n readonly entries: TriviaEntriesView\n /** Selected-root label table; entry kind indices refer to this array. */\n readonly labels: readonly string[]\n /**\n * Contiguous trivia gaps keyed by the following content offset. Values are\n * entry indices into `entries`, not materialized `{ value, span }` objects.\n */\n readonly before: ReadonlyMap<number, readonly number[]>\n /**\n * Contiguous trivia gaps keyed by the preceding content offset. Values are\n * entry indices into `entries`, not materialized `{ value, span }` objects.\n */\n readonly after: ReadonlyMap<number, readonly number[]>\n entryIndicesBefore(offset: number): readonly number[]\n entryIndicesAfter(offset: number): readonly number[]\n /**\n * Contiguous trivia gap immediately before `offset`, keyed by the following\n * content offset. Returns undefined when no gap sits at that boundary.\n */\n gapBefore(offset: number): RootTriviaGap | undefined\n /**\n * Contiguous trivia gap immediately after `offset`, keyed by the preceding\n * content offset. Returns undefined when no gap sits at that boundary.\n */\n gapAfter(offset: number): RootTriviaGap | undefined\n /** All contiguous trivia gaps in source order. */\n gaps(): readonly RootTriviaGap[]\n /** Source-ordered gaps containing at least one entry with the given label. */\n gapsWithKind(kind: string | readonly string[]): readonly RootTriviaGap[]\n}\n\nconst EMPTY_INDICES: readonly number[] = Object.freeze([])\nconst EMPTY_GAPS: readonly RootTriviaGap[] = Object.freeze([])\n/** Number of packed fields in one selected-root trivia row. */\nexport const SELECTED_ROOT_STRIDE = 5\n\ntype RootTriviaMaps = {\n before: Map<number, number[]>\n after: Map<number, number[]>\n beforeGaps: Map<number, RootTriviaGap>\n afterGaps: Map<number, RootTriviaGap>\n gaps: RootTriviaGap[]\n}\n\nfunction entryOffset(i: number, stride: number): number {\n return i * stride\n}\n\n/**\n * Wrap a flat trivia log. Stride is inferred from `labels`:\n * - root `_triviaLog`: 2 (start, end) or 3 (+ kindIndex)\n * - node `triviaLog`: 3 (start, end, insertIdx) or 4 (+ kindIndex)\n */\nexport function triviaEntries(\n log: readonly number[],\n labels?: readonly string[],\n opts?: { nodeLog?: boolean },\n): TriviaEntriesView {\n const baseStride = opts?.nodeLog ? 3 : 2\n const stride = labels ? baseStride + 1 : baseStride\n const length = Math.floor(log.length / stride)\n\n return {\n length,\n labels,\n stride,\n start(i) {\n return log[entryOffset(i, stride)]!\n },\n end(i) {\n return log[entryOffset(i, stride) + 1]!\n },\n insertIndex(i) {\n return opts?.nodeLog ? log[entryOffset(i, stride) + 2] : undefined\n },\n kindIndex(i) {\n if (!labels) return undefined\n return log[entryOffset(i, stride) + baseStride]\n },\n kind(i) {\n const ki = labels ? log[entryOffset(i, stride) + baseStride] : undefined\n return ki !== undefined ? labels![ki] : undefined\n },\n text(i, input) {\n const s = log[entryOffset(i, stride)]!\n const e = log[entryOffset(i, stride) + 1]!\n return input.slice(s, e)\n },\n }\n}\n\n/**\n * Build a root view over the sparse selected-label rows captured as\n * `[ownedRangeStart, ownedRangeEnd, markerStart, markerEnd, kindIndex]`.\n *\n * This is intentionally a different input shape from `triviaLog`: each row is\n * one selected marker, while the first pair names the complete committed trivia\n * range around it. Thus a mixed trivia run costs one five-number row, not three\n * legacy trivia entries. Rows are source ordered and equal gap pairs are\n * contiguous, which lets singleton boundary lookups binary-search the sparse\n * rows without constructing document-wide maps.\n */\nexport function buildRootTriviaIndex(\n log: readonly number[],\n labels: readonly string[],\n): RootTriviaIndex {\n const length = Math.floor(log.length / SELECTED_ROOT_STRIDE)\n const markerOffset = (i: number) => i * SELECTED_ROOT_STRIDE\n const ownedRangeStart = (i: number) => log[markerOffset(i)]!\n const ownedRangeEnd = (i: number) => log[markerOffset(i) + 1]!\n const markerStart = (i: number) => log[markerOffset(i) + 2]!\n const markerEnd = (i: number) => log[markerOffset(i) + 3]!\n const markerKind = (i: number) => log[markerOffset(i) + 4]!\n\n const entries: TriviaEntriesView = {\n length,\n labels,\n stride: SELECTED_ROOT_STRIDE,\n start: markerStart,\n end: markerEnd,\n insertIndex: () => undefined,\n kindIndex: markerKind,\n kind(i) {\n return labels[markerKind(i)]\n },\n text(i, input) {\n return input.slice(markerStart(i), markerEnd(i))\n },\n }\n\n const lowerBound = (offset: number, by: (i: number) => number): number => {\n let lo = 0\n let hi = length\n while (lo < hi) {\n const mid = (lo + hi) >>> 1\n if (by(mid) < offset) lo = mid + 1\n else hi = mid\n }\n return lo\n }\n\n const gapRowsAt = (offset: number, direction: 'before' | 'after'): [number, number] | undefined => {\n const edge = direction === 'before' ? ownedRangeEnd : ownedRangeStart\n let first = lowerBound(offset, edge)\n if (first === length || edge(first) !== offset) return undefined\n const start = ownedRangeStart(first)\n const end = ownedRangeEnd(first)\n while (first > 0 && ownedRangeStart(first - 1) === start && ownedRangeEnd(first - 1) === end) first--\n let last = first + 1\n while (last < length && ownedRangeStart(last) === start && ownedRangeEnd(last) === end) last++\n return [first, last]\n }\n\n const indices = (first: number, last: number): readonly number[] => {\n const out: number[] = []\n for (let i = first; i < last; i++) out.push(i)\n return out\n }\n\n const makeGap = (first: number, last: number): RootTriviaGap => {\n const start = ownedRangeStart(first)\n const end = ownedRangeEnd(first)\n let entryIndices: readonly number[] | undefined\n return {\n start,\n end,\n get entryIndices() {\n return entryIndices ??= indices(first, last)\n },\n hasKind(kind) {\n for (let i = first; i < last; i++) {\n if (labels[markerKind(i)] === kind) return true\n }\n return false\n },\n text(input) {\n return input.slice(start, end)\n },\n }\n }\n\n let maps: RootTriviaMaps | undefined\n const getMaps = () => {\n if (maps !== undefined) return maps\n const before = new Map<number, number[]>()\n const after = new Map<number, number[]>()\n const beforeGaps = new Map<number, RootTriviaGap>()\n const afterGaps = new Map<number, RootTriviaGap>()\n const gaps: RootTriviaGap[] = []\n for (let first = 0; first < length;) {\n let last = first + 1\n while (last < length && ownedRangeStart(last) === ownedRangeStart(first) && ownedRangeEnd(last) === ownedRangeEnd(first)) last++\n const gap = makeGap(first, last)\n gaps.push(gap)\n afterGaps.set(gap.start, gap)\n beforeGaps.set(gap.end, gap)\n after.set(gap.start, [...gap.entryIndices])\n before.set(gap.end, [...gap.entryIndices])\n first = last\n }\n maps = { before, after, beforeGaps, afterGaps, gaps }\n return maps\n }\n\n return {\n entries,\n labels,\n get before() { return getMaps().before },\n get after() { return getMaps().after },\n entryIndicesBefore(offset) {\n const rows = gapRowsAt(offset, 'before')\n return rows ? indices(rows[0], rows[1]) : EMPTY_INDICES\n },\n entryIndicesAfter(offset) {\n const rows = gapRowsAt(offset, 'after')\n return rows ? indices(rows[0], rows[1]) : EMPTY_INDICES\n },\n gapBefore(offset) {\n const rows = gapRowsAt(offset, 'before')\n return rows ? makeGap(rows[0], rows[1]) : undefined\n },\n gapAfter(offset) {\n const rows = gapRowsAt(offset, 'after')\n return rows ? makeGap(rows[0], rows[1]) : undefined\n },\n gaps() {\n return getMaps().gaps\n },\n gapsWithKind(kind) {\n const kinds = typeof kind === 'string' ? [kind] : kind\n const matches: RootTriviaGap[] = []\n // Do not materialize the document-wide boundary maps for a sparse query.\n // The primary consumer selects comments: it needs only comment-bearing gaps,\n // not an object/Map for every whitespace-owned boundary in the document.\n for (let first = 0; first < length;) {\n let last = first + 1\n while (last < length\n && ownedRangeStart(last) === ownedRangeStart(first)\n && ownedRangeEnd(last) === ownedRangeEnd(first)) last++\n let matched = false\n for (let i = first; i < last && !matched; i++) {\n const label = labels[markerKind(i)]\n for (const kind of kinds) {\n if (label === kind) {\n matched = true\n break\n }\n }\n }\n if (matched) matches.push(makeGap(first, last))\n first = last\n }\n return matches.length === 0 ? EMPTY_GAPS : matches\n },\n }\n}\n", "/**\n * Structural recognition of \"scannable\" parser arms \u2014 regex shapes that lower to\n * a tight character-scan loop instead of `regex.exec` / combinator dispatch. Each\n * shape is derived from the regex STRUCTURE, not from any hardcoded knowledge\n * that a given regex \"is whitespace\" or \"is a comment\":\n *\n * [X]+ / [X]* \u2192 run while the char \u2208 X (chars)\n * <lit>[^X]* \u2192 consume <lit>, run until char \u2208 X (until)\n * <open>(?:\u2026)*<close> \u2192 consume <open>, run to <close> literal (delimited)\n * x?<lit><[X]*>\u2026 \u2192 a general linear chain of lit/run (seq)\n *\n * `seq` is the CATEGORY generalization: any chain of literal segments (required\n * or optional `x?`) and char-class runs (positive/negated, `?`/`*`/`+`). It\n * subsumes CSS/Less `-?ident`, `--custom`, `@-?keyword`, `[^\u2026]+`, `::?`, etc.\n * without hardcoding a single byte \u2014 lowered only when a greedy one-pass scan\n * provably equals the engine's backtracking (see `seqIsUnambiguous`).\n *\n * A `oneOrMore(choice(a, b, \u2026))` where every arm is one of these compiles to a\n * single char-dispatch loop with one branch per arm \u2014 any count/order, because\n * the shapes dispatch on their first 1\u20132 chars and are checked in turn. Trivia\n * (whitespace + comments) is just the value-discarded instance of this; nothing\n * here is trivia-specific.\n */\n\n/**\n * One segment of a `seq` shape. A `seq` is the general category \"a fixed linear\n * chain of literals and char-class runs\" \u2014 no alternation, no groups, no\n * backtracking. It subsumes every CSS/Less token that is \"(optional prefix)?\n * literal* char-run* \u2026\" without hardcoding any particular byte:\n *\n * lit \u2014 a run of fixed code points, optionally present (`x?`) or required.\n * run \u2014 a char-class run: positive/negated ranges, min 0/1, bounded to one\n * char (`[x]`, `[x]?`) or unbounded (`[x]*`, `[x]+`).\n * group \u2014 a non-capturing sub-pattern `(?:\u2026)` (\u00A78f), quantified the same way\n * as `run` (`min`/`unbounded`). `inner` is any already-recognized\n * `ScanShape` for the group's body (so a group can itself contain\n * `seq`/`chars`/`alt`/\u2026 \u2014 including a nested alternation via \u00A78e).\n * Only used when `groupInnerSafe(inner)` holds (see that function).\n *\n * We only lower a `seq` when greedy left-to-right scanning provably equals the\n * regex engine's backtracking match (see `seqIsUnambiguous`).\n */\nexport type SeqPart =\n | { part: 'lit'; cps: number[]; optional: boolean }\n // A char-class run with a general counted quantifier: `min`..`max` occurrences.\n // `max === Infinity` is unbounded (`+`/`*`/`{n,}`). The four legacy shapes map\n // as `+`\u2192{1,\u221E} `*`\u2192{0,\u221E} `?`\u2192{0,1} bare\u2192{1,1}; `{n,m}` (\u00A78c) fills the rest.\n // Greedy scanning has \"wiggle\" a backtracker could exploit iff `max > min`.\n | { part: 'run'; ranges: Array<[number, number]>; negated: boolean; min: number; max: number }\n | { part: 'group'; inner: ScanShape; min: 0 | 1; unbounded: boolean }\n\nexport type ScanShape =\n | { kind: 'chars'; ranges: Array<[number, number]>; minOne: boolean }\n | { kind: 'ident'; head: Array<[number, number]>; tail: Array<[number, number]> }\n | { kind: 'until'; open: number[]; stop: Array<[number, number]> }\n | { kind: 'delimited'; open: number[]; close: number[] }\n // <q>(?:[^<q>\\\\]|\\\\.)*<q> \u2014 a quote-delimited string with backslash escapes.\n // `excluded` = the body's negated class (always contains the quote + backslash,\n // maybe a newline); `escLineTerm` = whether `\\\\` may be followed by a line\n // terminator (`\\\\[\\s\\S]` \u2192 true, `\\\\.` \u2192 false, since `.` excludes them).\n | { kind: 'string'; quote: number; excluded: Array<[number, number]>; escLineTerm: boolean }\n // A linear chain of literal/char-run segments (optional prefixes, literal\n // openers, negated runs, \u2026) \u2014 the general CSS/Less token category.\n | { kind: 'seq'; parts: SeqPart[] }\n // A pure literal matched case-insensitively (`/i`): the general \"ASCII\n // case-fold literal\" category (CSS `url(`, `@media` keywords under `i`, \u2026).\n | { kind: 'litFold'; open: number[] }\n // `<inner>(?!class)` / `<inner>(?=class)` \u2014 a trailing lookahead boundary\n // check on an already-lowered shape. Zero-width: `end` is `inner`'s end, never\n // extended. `classNegated` is the bracket's OWN `[^\u2026]` negation (e.g.\n // `(?![0-9a-fA-F])` vs `(?=[^0-9])`), independent of `negative` (`!` vs `=`).\n | { kind: 'lookahead'; inner: ScanShape; ranges: Array<[number, number]>; classNegated: boolean; negative: boolean }\n // `A|B|C` \u2014 top-level alternation (\u00A78e), split outside any `[]`/`()`, each arm\n // independently lowered. `disjoint` is true iff every pair of arms has\n // provably non-overlapping first-char sets (`firsts[i]` holds that arm's set,\n // or `null` if it could start with any char \u2014 an unbounded-optional `chars`\n // arm, or a non-disjoint mix). When `disjoint`, codegen dispatches straight to\n // the one matching arm; otherwise it tries arms in order and takes the first\n // that succeeds \u2014 the same ordered-choice semantics as regex `|` itself (see\n // the ordered-vs-longest verification in PERF_IDEAS \u00A78e).\n | { kind: 'alt'; arms: ScanShape[]; disjoint: boolean; firsts: Array<CharSet | null> }\n\n/** Backslash (`\\`) code point \u2014 the escape lead char in string shapes. */\nexport const BACKSLASH = 92\n\nconst META = new Set('()[]{}*+?|^$.'.split(''))\n\n// Regex char-class primitives are shared with the interpreter's first-set\n// analyzer and `regex()`'s scanner \u2014 see `../regex/classes.ts`. `SPACE_RANGES`\n// and `parseClassRanges` are re-exported here because codegen's boundary-class\n// lowering imports them from this module.\nimport { CLASS_ESCAPES, SPACE_RANGES, shorthandRanges, readUnicodeEscape, parseClassRanges } from '../regex/classes.ts'\nimport { SELECTED_ROOT_STRIDE } from '../cst/trivia-entries.ts'\n\n/** Placeholder fields filled with the trivia span once the enclosing run ends. */\nconst SELECTED_ROOT_OWNED_RANGE_PLACEHOLDER = Array.from(\n { length: SELECTED_ROOT_STRIDE - 3 },\n () => '0',\n).join(', ')\nexport { SPACE_RANGES, parseClassRanges }\n\n/** A single class token (`[...]` or `\\d`/`\\w`) to ranges, or null. Rejects negation. */\nfunction classToRanges(cls: string): Array<[number, number]> | null {\n if (cls === '\\\\d') return shorthandRanges('d')\n if (cls === '\\\\w') return shorthandRanges('w')\n if (cls === '\\\\s') return shorthandRanges('s')\n const body = cls.slice(1, -1)\n if (body.startsWith('^')) return null\n return parseClassRanges(body)\n}\n\n/** ASCII case-insensitive letter check for `i`-flag literal lowering. */\n// ASCII case-insensitive char compare. For a letter, upper/lower differ only in\n// bit 0x20, and `(c | 32) === <lowercase>` is satisfied by EXACTLY that letter's\n// two cases (nothing else) \u2014 one OR + one compare, ~1.75\u00D7 faster than the\n// two-compare `(c===U || c===L)` form (measured). `(\u2026 | 32)` is parenthesized\n// because `===` binds tighter than `|`. Non-letters keep an exact compare.\n// Exported so the case-insensitive `literal()` emitter (codegen) shares the exact\n// same ASCII fold as `/i`-flag regex lowering \u2014 no `Intl.Collator` on any path.\nexport const foldEq = (cVar: string, cp: number): string => {\n if (cp >= 65 && cp <= 90) return `(${cVar} | 32) === ${cp + 32}`\n if (cp >= 97 && cp <= 122) return `(${cVar} | 32) === ${cp}`\n return `${cVar} === ${cp}`\n}\n\n/** All-literal regex fragment (`\\/\\*`, `\\/\\/`, \u2026) \u2192 its code points, or null on an unescaped metachar. */\nfunction literalCodePoints(frag: string): number[] | null {\n const out: number[] = []\n let i = 0\n while (i < frag.length) {\n const ch = frag[i]!\n if (ch === '\\\\') {\n const e = frag[i + 1]\n if (e === undefined) return null\n out.push(e in CLASS_ESCAPES ? CLASS_ESCAPES[e]! : e.codePointAt(0)!)\n i += 2\n continue\n }\n if (META.has(ch)) return null\n out.push(ch.codePointAt(0)!)\n i += 1\n }\n return out.length ? out : null\n}\n\n/**\n * Recognize a quote-delimited string with backslash escapes:\n * <q>(?:[^\u2026]|\\\\.)*<q> or <q>(?:\\\\.|[^\u2026])*<q> (`?:` optional)\n * where the negated body class contains the quote and the backslash, and the\n * escape body is `.` (no line terminators) or `[\\s\\S]` (any char). Returns null\n * for anything else so the caller falls back to `regex.exec`.\n */\nfunction parseStringShape(source: string): ScanShape | null {\n const q = source[0]\n if (q === undefined || q === '\\\\' || META.has(q)) return null\n if (source.length < 3 || source[source.length - 1] !== q) return null\n const inner = source.slice(1, -1)\n const CLS = String.raw`\\[\\^((?:\\\\.|[^\\]])+)\\]`\n const ESC = String.raw`\\\\\\\\(\\.|\\[\\\\s\\\\S\\]|\\[\\\\S\\\\s\\])`\n // Two arm orders; `?:` optional. Capture groups differ, so read both out.\n let body: string | undefined\n let esc: string | undefined\n let m = new RegExp(`^\\\\((?:\\\\?:)?${CLS}\\\\|${ESC}\\\\)\\\\*$`).exec(inner)\n if (m) { body = m[1]; esc = m[2] }\n else {\n m = new RegExp(`^\\\\((?:\\\\?:)?${ESC}\\\\|${CLS}\\\\)\\\\*$`).exec(inner)\n if (m) { esc = m[1]; body = m[2] }\n }\n if (body === undefined || esc === undefined) return null\n const excluded = parseClassRanges(body)\n if (!excluded) return null\n const qcp = q.codePointAt(0)!\n const inSet = (cp: number) => excluded.some(([lo, hi]) => cp >= lo && cp <= hi)\n if (!inSet(qcp) || !inSet(BACKSLASH)) return null\n return { kind: 'string', quote: qcp, excluded, escLineTerm: esc !== '.' }\n}\n\n/**\n * Parse a regex source into a linear chain of literal / char-run segments, or\n * null if it uses any construct outside that category (alternation, groups,\n * `.`, `{n,m}`, lookaround, unknown escapes). This is the STRUCTURAL recognizer\n * for the `seq` shape \u2014 it encodes categories (optional prefix, literal opener,\n * negated run, \u2026), never any specific byte value.\n */\nfunction parseSeqParts(source: string): SeqPart[] | null {\n const parts: SeqPart[] = []\n let lit: number[] = []\n const flush = () => {\n if (lit.length) { parts.push({ part: 'lit', cps: lit, optional: false }); lit = [] }\n }\n // Parse a `{n}` / `{n,}` / `{n,m}` counted quantifier at `source[at]` (`'{'`).\n // Returns the bounds and the token length, or null when it isn't a well-formed\n // brace quantifier (then the `{` is left for the caller's metachar decline).\n const braceQuant = (at: number): { min: number; max: number; len: number } | null => {\n const close = source.indexOf('}', at)\n if (close === -1) return null\n const body = source.slice(at + 1, close)\n const m = /^(\\d+)(,(\\d*)?)?$/.exec(body)\n if (!m) return null\n const min = Number(m[1])\n const max = m[2] === undefined ? min : m[3] ? Number(m[3]!) : Infinity\n // Decline degenerate/empty-capable or invalid bounds \u2014 RegExp handles them.\n if (max < 1 || min > max) return null\n return { min, max, len: close - at + 1 }\n }\n const runFrom = (ranges: Array<[number, number]>, negated: boolean, at: number) => {\n const q = source[at]\n if (q === '+') { parts.push({ part: 'run', ranges, negated, min: 1, max: Infinity }); return 1 }\n if (q === '*') { parts.push({ part: 'run', ranges, negated, min: 0, max: Infinity }); return 1 }\n if (q === '?') { parts.push({ part: 'run', ranges, negated, min: 0, max: 1 }); return 1 }\n if (q === '{') {\n const b = braceQuant(at)\n if (b) { parts.push({ part: 'run', ranges, negated, min: b.min, max: b.max }); return b.len }\n }\n parts.push({ part: 'run', ranges, negated, min: 1, max: 1 })\n return 0\n }\n let i = 0\n while (i < source.length) {\n const ch = source[i]!\n if (ch === '[') {\n // Read a char class, honoring `\\]`.\n let k = i + 1\n const neg = source[k] === '^'\n if (neg) k++\n let body = ''\n while (k < source.length && source[k] !== ']') {\n if (source[k] === '\\\\') { body += source[k]! + (source[k + 1] ?? ''); k += 2 }\n else { body += source[k]!; k++ }\n }\n if (source[k] !== ']') return null\n const ranges = parseClassRanges(body)\n if (!ranges) return null\n flush()\n i = k + 1\n i += runFrom(ranges, neg, i)\n continue\n }\n if (ch === '\\\\') {\n const e = source[i + 1]\n if (e === 'd' || e === 'w' || e === 's') {\n flush()\n i += 2\n i += runFrom(shorthandRanges(e), false, i)\n continue\n }\n // Escaped literal code point (incl. `\\uXXXX`, `\\t`, `\\(`, \u2026).\n const uni = readUnicodeEscape(source, i)\n let cp: number\n if (uni) { cp = uni.cp; i = uni.next }\n else if (e === undefined) return null\n else if (e in CLASS_ESCAPES) { cp = CLASS_ESCAPES[e]!; i += 2 }\n else if ((e >= 'a' && e <= 'z') || (e >= 'A' && e <= 'Z')) return null\n else { cp = e.codePointAt(0)!; i += 2 }\n if (source[i] === '?') { flush(); parts.push({ part: 'lit', cps: [cp], optional: true }); i++ }\n else lit.push(cp)\n continue\n }\n if (ch === '(') {\n // Only a non-capturing group `(?:\u2026)` is modeled (\u00A78f) \u2014 a bare capturing\n // group, or a lookaround appearing mid-pattern (a TRAILING one is peeled\n // off separately by `stripTrailingLookahead` before we ever get here), is\n // declined outright rather than risk misreading it.\n if (source[i + 1] !== '?' || source[i + 2] !== ':') return null\n let k = i + 3\n let depth = 1\n while (k < source.length && depth > 0) {\n const c2 = source[k]\n if (c2 === '\\\\') { k += 2; continue }\n if (c2 === '[') {\n let j = k + 1\n if (source[j] === '^') j++\n while (j < source.length && source[j] !== ']') {\n if (source[j] === '\\\\') j += 2\n else j++\n }\n if (source[j] !== ']') return null\n k = j + 1\n continue\n }\n if (c2 === '(') depth++\n else if (c2 === ')') depth--\n k++\n }\n if (depth !== 0) return null\n const body = source.slice(i + 3, k - 1)\n const inner = parseScanShape(body)\n if (!inner || !groupInnerSafe(inner)) return null\n const q = source[k]\n // `{n,m}` on a group is a \u00A78c/\u00A78f combination not modeled \u2014 decline.\n if (q === '{') return null\n flush()\n if (q === '+') {\n if (shapeCanBeEmpty(inner)) return null // would loop forever \u2014 decline\n parts.push({ part: 'group', inner, min: 1, unbounded: true })\n i = k + 1\n } else if (q === '*') {\n if (shapeCanBeEmpty(inner)) return null\n parts.push({ part: 'group', inner, min: 0, unbounded: true })\n i = k + 1\n } else if (q === '?') {\n parts.push({ part: 'group', inner, min: 0, unbounded: false })\n i = k + 1\n } else {\n parts.push({ part: 'group', inner, min: 1, unbounded: false })\n i = k\n }\n continue\n }\n // A bare metachar (`|`, `.`, `{`, stray `*`/`+`/`?`, \u2026) is outside the\n // linear-chain category \u2014 bail to the RegExp fallback.\n if (META.has(ch)) return null\n const cp = ch.codePointAt(0)!\n i += ch.length\n if (source[i] === '?') { flush(); parts.push({ part: 'lit', cps: [cp], optional: true }); i++ }\n else lit.push(cp)\n }\n flush()\n return parts.length ? parts : null\n}\n\n/**\n * Only lower a `seq` when greedy left-to-right scanning matches EXACTLY what the\n * backtracking regex engine would. The dangerous cases are (a) an optional part\n * that could also be consumed by what follows, and (b) an unbounded/repeated\n * part whose accepted class overlaps what follows \u2014 both let the engine\n * backtrack to a different boundary than a one-pass scan. We also require at\n * least one mandatory segment (so the token can't match zero-width).\n *\n * A skippable/repeatable part `p` at index `k` is checked against\n * `seqFirstAccept(parts.slice(k + 1))` \u2014 the accept-set of EVERYTHING that\n * could start at the very next position, unioned through any further chain of\n * optionals up to the next mandatory part (the exact same computation\n * `seqFirstAccept` already does for a seq's OWN leading accept-set). This\n * subsumes the simpler \"check only the immediate neighbor\" rule as the\n * one-part-following case, while also correctly handling a CHAIN of several\n * consecutive optional parts (e.g. two independent optional groups in a row,\n * `(?:\\.\\d+)?(?:[eE][+-]?\\d+)?` \u2014 JSON/GraphQL's number tail, \u00A78f): each is\n * safe precisely when disjoint from everything that could follow it, however\n * many further optionals that spans. An empty tail (`p` is the last part)\n * naturally resolves to a trivially-disjoint empty set \u2014 nothing to check.\n *\n * Uniform across `lit`/`run`/`group`: each part's own \"first char it could\n * start with\" (`partFirstAccept`) is compared via `firstSetsDisjoint` \u2014 the\n * same subset/disjoint math used everywhere else in this file (\u00A78b's\n * lookahead guard, \u00A78e's alt-dispatch guard).\n */\nfunction seqIsUnambiguous(parts: SeqPart[]): boolean {\n let hasMandatory = false\n for (let k = 0; k < parts.length; k++) {\n const p = parts[k]!\n const mandatory = p.part === 'lit' ? !p.optional : p.min >= 1\n if (mandatory) hasMandatory = true\n // A `group` part has a right-edge exposure (`groupPartExposure`): the chars a\n // backtracking engine could give back by shrinking the body's own trailing\n // quantifier, dropping the group (if optional/repeated), or \u2014 for a\n // non-disjoint alt body \u2014 switching arms. Ordered-choice greedy scanning\n // matches the engine only when NONE of those relinquished chars could also\n // start what follows the group (else the scan and the engine disagree on\n // where the group ends). Two outcomes:\n // - a concrete class \u2192 must be disjoint from `seqFirstAccept(rest)`. This\n // is the general fix for a group whose body ends in an unbounded run\n // (`(?:\\d+)\\d` must NOT lower), and it lets a mutually-exclusive fixed\n // alt (\u00A78i, exposure `null`) lower at ANY position, not just trailing.\n // - `'unsupported'` \u2192 the exposure can't be bounded (e.g. a non-disjoint\n // alt like `(?:a|ab)` that genuinely needs arm-switching). Sound only\n // when nothing follows to force reconsideration \u2014 the group must be the\n // trailing, matched-exactly-once part (\u00A78h); otherwise decline.\n if (p.part === 'group') {\n const exposure = groupPartExposure(p)\n if (exposure === 'unsupported') {\n const trailingOnce = k === parts.length - 1 && p.min === 1 && !p.unbounded\n if (!trailingOnce) return false\n } else if (exposure !== null) {\n if (!firstSetsDisjoint(exposure, seqFirstAccept(parts.slice(k + 1)))) return false\n }\n }\n // A part needs the disjoint-from-continuation check when a greedy one-pass\n // scan has freedom a backtracking engine could resolve differently: an\n // optional `lit`, a `run` with wiggle (`max > min` \u2014 covers `?`/`*`/`+` and\n // bounded `{n,m}` with `m > n`; a fixed `{n}` run has none), or an\n // optional/repeated `group`. A fixed-length run (`max === min`) consumes an\n // exact count with no boundary to shift, so it never needs the check.\n const needsDisjoint =\n p.part === 'lit' ? p.optional\n : p.part === 'run' ? p.max > p.min\n : (p.unbounded || p.min === 0)\n if (needsDisjoint) {\n const rest = seqFirstAccept(parts.slice(k + 1))\n if (!firstSetsDisjoint(partFirstAccept(p), rest)) return false\n }\n }\n return hasMandatory\n}\n\nfunction rangesOverlap(a: Array<[number, number]>, b: Array<[number, number]>): boolean {\n return a.some(([lo, hi]) => b.some(([lo2, hi2]) => lo <= hi2 && lo2 <= hi))\n}\n\n/** Is every range in `sub` fully contained in some range of `sup`? */\nfunction rangesSubset(sub: Array<[number, number]>, sup: Array<[number, number]>): boolean {\n return sub.every(([lo, hi]) => sup.some(([lo2, hi2]) => lo >= lo2 && hi <= hi2))\n}\n\n/**\n * A `(?!X)`/`(?=X)` operand: a char class (`[...]`, incl. `[^...]`), a\n * shorthand class (`\\d`/`\\w`/`\\s`), or a single literal/escaped char \u2014 never a\n * sub-pattern (no alternation, no nested groups). Returns the ranges to test\n * membership against, and whether the bracket itself was negated (`[^...]`) \u2014\n * independent of the lookahead's own `!`/`=` polarity.\n */\nfunction parseClassOperand(body: string): { ranges: Array<[number, number]>; negated: boolean } | null {\n if (body === '\\\\d' || body === '\\\\w' || body === '\\\\s') {\n return { ranges: shorthandRanges(body[1] as 'd' | 'w' | 's'), negated: false }\n }\n if (body.length >= 2 && body[0] === '[' && body[body.length - 1] === ']') {\n let inner = body.slice(1, -1)\n const negated = inner.startsWith('^')\n if (negated) inner = inner.slice(1)\n const ranges = parseClassRanges(inner)\n return ranges ? { ranges, negated } : null\n }\n const cps = literalCodePoints(body)\n if (cps && cps.length === 1) return { ranges: [[cps[0]!, cps[0]!]], negated: false }\n return null\n}\n\ntype TrailingLookahead = {\n base: string\n ranges: Array<[number, number]>\n classNegated: boolean\n negative: boolean\n}\n\ntype CharSet = { ranges: Array<[number, number]>; negated: boolean }\n\n/** Is char-set `t` fully contained in char-set `u`? Handles all 4 sign combos. */\nfunction classSubset(t: CharSet, u: CharSet): boolean {\n if (!t.negated && !u.negated) return rangesSubset(t.ranges, u.ranges)\n if (!t.negated && u.negated) return !rangesOverlap(t.ranges, u.ranges) // t \u2286 \u00ACu \u27FA t \u2229 u = \u2205\n if (t.negated && !u.negated) return false // \u00ACt \u2286 u is never true for finite ranges u\n return rangesSubset(u.ranges, t.ranges) // \u00ACt \u2286 \u00ACu \u27FA u \u2286 t\n}\n\n/** Are char-sets `t` and `u` disjoint (no overlap)? Handles all 4 sign combos. */\nfunction classDisjoint(t: CharSet, u: CharSet): boolean {\n if (!t.negated && !u.negated) return !rangesOverlap(t.ranges, u.ranges)\n if (!t.negated && u.negated) return rangesSubset(t.ranges, u.ranges) // t \u2229 \u00ACu = \u2205 \u27FA t \u2286 u\n if (t.negated && !u.negated) return rangesSubset(u.ranges, t.ranges) // symmetric\n return false // \u00ACt \u2229 \u00ACu = \u2205 would require t \u222A u = every code point \u2014 can't prove with finite ranges\n}\n\n/** `classDisjoint`, `'any'`-aware: an empty-capable part's first-set degrades\n * to `'any'` (see `shapeFirstAccept`), and `'any'` is never disjoint from\n * anything (it could start with literally any char, including whatever the\n * other side accepts). */\nfunction firstSetsDisjoint(a: CharSet | 'any', b: CharSet | 'any'): boolean {\n if (a === 'any' || b === 'any') return false\n return classDisjoint(a, b)\n}\n\n/**\n * A shape's match as a fixed-length list of per-position char-sets, or `null`\n * if its match length is NOT fixed. Only a `seq` of mandatory `lit`s (each code\n * point is one fixed position) and mandatory single-char runs (`[x]`, min 1,\n * bounded) qualifies \u2014 anything with an optional part, an unbounded/optional\n * run, or a nested group has a variable length and returns `null`. Used to\n * decide when a non-disjoint alternation's arms are mutually exclusive (\u00A78i).\n */\nfunction fixedClassSeq(shape: ScanShape): CharSet[] | null {\n // A case-fold literal is fixed-length: each code point becomes a single-char\n // class holding BOTH ASCII cases (so mutual-exclusivity is judged on what the\n // `/i` match actually accepts \u2014 `and` vs `or` are disjoint at position 0).\n if (shape.kind === 'litFold') {\n return shape.open.map(cp => {\n const other = cp >= 65 && cp <= 90 ? cp + 32 : cp >= 97 && cp <= 122 ? cp - 32 : cp\n return other === cp\n ? { ranges: [[cp, cp]] as Array<[number, number]>, negated: false }\n : { ranges: [[Math.min(cp, other), Math.min(cp, other)], [Math.max(cp, other), Math.max(cp, other)]] as Array<[number, number]>, negated: false }\n })\n }\n if (shape.kind !== 'seq') return null\n const out: CharSet[] = []\n for (const p of shape.parts) {\n if (p.part === 'lit') {\n if (p.optional) return null\n for (const cp of p.cps) out.push({ ranges: [[cp, cp]], negated: false })\n } else if (p.part === 'run' && p.max === p.min && Number.isFinite(p.max)) {\n // A fixed-count run `[x]{n}` (incl. the bare `[x]`, n=1) is n fixed\n // positions of the same class. Variable-length runs return null below.\n for (let c = 0; c < p.max; c++) out.push({ ranges: p.ranges, negated: p.negated })\n } else {\n return null // optional/variable/unbounded run, or a nested group \u2014 length not fixed\n }\n }\n return out.length ? out : null\n}\n\n/**\n * \u00A78i \u2014 is a NON-disjoint `alt` shape one whose arms are pairwise MUTUALLY\n * EXCLUSIVE fixed-length token sets? Every arm must be a `fixedClassSeq`, and no\n * arm's match may ever be a prefix (proper, or an equal-length overlap) of\n * another arm's \u2014 i.e. for every ordered pair (A, B) with `A.length <= B.length`\n * there is a position within A where their classes are DISJOINT. That property\n * guarantees at most one arm matches at any input position, so ordered-choice\n * commit lands on the SAME arm (and the SAME fixed end) the engine would, with\n * no arm to switch to under backtracking \u2014 sound in ANY position, not just\n * trailing (unlike the general non-disjoint alt, which needs the trailing-once\n * gate in `seqIsUnambiguous`). `(?:ab|ac)` and `(?:foo|barn)` qualify;\n * `(?:a|ab)` (arm `a` is a prefix of `ab`) does NOT.\n */\nfunction altFixedMutuallyExclusive(shape: ScanShape): boolean {\n if (shape.kind !== 'alt' || shape.disjoint) return false\n const lists: CharSet[][] = []\n for (const arm of shape.arms) {\n const f = fixedClassSeq(arm)\n if (!f) return false\n lists.push(f)\n }\n for (let i = 0; i < lists.length; i++) {\n for (let j = 0; j < lists.length; j++) {\n if (i === j) continue\n const a = lists[i]!\n const b = lists[j]!\n if (a.length > b.length) continue // only check the shorter (a) as a prefix of the longer (b)\n let disjointAt = false\n for (let p = 0; p < a.length; p++) {\n if (classDisjoint(a[p]!, b[p]!)) { disjointAt = true; break }\n }\n if (!disjointAt) return false // `a` could be a prefix of `b` \u2014 not mutually exclusive\n }\n }\n return true\n}\n\n/**\n * The char-set a backtracking engine could relinquish at a `group` PART's right\n * edge \u2014 its \"trailing exposure\". Combines two independent backtrack moves: the\n * group body's OWN trailing wiggle (`trailingBacktrackClass(inner)`, e.g. the\n * body ends in an unbounded run), and \u2014 if the group is optional (`min 0`) or\n * repeated (`unbounded`) \u2014 the \"drop the last occurrence\" move, which exposes\n * the body's own first-char set. A required-once group (`min 1`, bounded) has\n * only the first move. Returns `'unsupported'` if either component can't be\n * pinned to a concrete set. This is the single computation used everywhere a\n * group's right boundary matters: `trailingBacktrackClass` (a `seq` ending in a\n * group) and `seqIsUnambiguous` (a group at ANY position, followed by more).\n */\nfunction groupPartExposure(part: Extract<SeqPart, { part: 'group' }>): CharSet | null | 'unsupported' {\n const innerWiggle = trailingBacktrackClass(part.inner)\n if (innerWiggle === 'unsupported') return 'unsupported'\n const requiredOnce = !part.unbounded && part.min === 1\n if (requiredOnce) return innerWiggle // no \"drop it\" move possible \u2014 only inner's own wiggle matters\n const dropExposed = shapeFirstAccept(part.inner)\n if (dropExposed === 'any') return 'unsupported'\n if (innerWiggle === null) return dropExposed\n const unioned = unionCharSets([innerWiggle, dropExposed])\n return unioned === 'any' ? 'unsupported' : unioned\n}\n\n/**\n * The char-class a backtracking engine could expose by shrinking `shape`'s\n * OWN trailing quantifier by one position \u2014 i.e. the \"wiggle room\" a trailing\n * lookahead could interact with. Returns `null` when `shape`'s matched length\n * is fully fixed once it succeeds (no quantifier to shrink), which makes\n * wrapping it in a lookahead unconditionally safe. Returns `'unsupported'` for\n * shape kinds whose backtracking semantics aren't modeled here (declines the\n * lookahead lowering rather than risking an unproven guard).\n *\n * Only the LAST quantifier matters: `seqIsUnambiguous` already proves every\n * EARLIER part of a `seq` has exactly one valid parse (no alternate length),\n * so the sole remaining freedom a backtracking engine has \u2014 once we attach an\n * external trailing lookahead \u2014 is in whatever quantifier sits at the very end.\n */\nfunction trailingBacktrackClass(shape: ScanShape): CharSet | null | 'unsupported' {\n if (shape.kind === 'chars') return { ranges: shape.ranges, negated: false }\n if (shape.kind === 'ident') return { ranges: shape.tail, negated: false }\n if (shape.kind === 'litFold') return null // fixed-length literal \u2014 no quantifier at all\n if (shape.kind === 'seq') {\n const last = shape.parts[shape.parts.length - 1]!\n if (last.part === 'lit') return null // fixed literal tail \u2014 no wiggle room\n if (last.part === 'run') {\n // Wiggle iff `max > min`: unbounded (`+`/`*`/`{n,}`), optional (`[x]?`),\n // or bounded `{n,m}` with `m > n` all let a backtracker shrink the trailing\n // run by \u22651 position. A fixed run (`[x]`, `{n}`, `max === min`) has no\n // choice \u2014 no wiggle, hence no risk.\n if (last.max > last.min) return { ranges: last.ranges, negated: last.negated }\n return null\n }\n // A trailing `group` (\u00A78f): its trailing exposure combines its body's own\n // wiggle and (if optional/repeated) the \"drop it\" move \u2014 see\n // `groupPartExposure`, shared with `seqIsUnambiguous`.\n return groupPartExposure(last)\n }\n if (shape.kind === 'alt') {\n // Arm-switching hazard (see `groupInnerSafe`) applies here too: a\n // non-disjoint alt can't be trusted to expose the right wiggle class,\n // since which arm ultimately \"wins\" could itself change under backtrack.\n // A disjoint alt has no such hazard \u2014 exactly one arm is ever reachable\n // from a given starting char, so the union of every arm's OWN wiggle\n // covers whichever one is actually taken. A non-disjoint alt whose arms are\n // fixed-length and mutually exclusive (\u00A78i) also has no wiggle \u2014 exactly one\n // arm matches at any position and its length is fixed, so `null`.\n if (!shape.disjoint) return altFixedMutuallyExclusive(shape) ? null : 'unsupported'\n const classes = shape.arms.map(trailingBacktrackClass)\n if (classes.some(c => c === 'unsupported')) return 'unsupported'\n const concrete = classes.filter((c): c is CharSet => c !== null)\n if (concrete.length === 0) return null\n const unioned = unionCharSets(concrete)\n return unioned === 'any' ? 'unsupported' : unioned\n }\n // `until`/`delimited`/`string`/nested `lookahead` \u2014 not modeled; decline.\n return 'unsupported'\n}\n\n/**\n * Is it safe to lower `inner(?!ranges)` / `inner(?=ranges)` to a one-shot\n * post-match check (vs. requiring real backtracking)? See PERF_IDEAS \u00A78b.\n */\nfunction lookaheadUnambiguous(inner: ScanShape, operand: CharSet, negative: boolean): boolean {\n const tail = trailingBacktrackClass(inner)\n if (tail === 'unsupported') return false\n if (tail === null) return true // inner's length is fixed \u2014 no backtracking possible\n // Negative `(?!op)`: safe iff every char the tail could expose is ALSO\n // excluded by `op` (so shrinking never turns a failure into a pass).\n // Positive `(?=op)`: safe iff the tail is disjoint from `op` (so shrinking\n // could never expose a char that suddenly satisfies `op`).\n return negative ? classSubset(tail, operand) : classDisjoint(tail, operand)\n}\n\n/**\n * Strip a trailing `(?!class)` / `(?=class)` boundary assertion, if present.\n * Only a TRAILING lookahead with a char-class/single-char operand is\n * recognized \u2014 no sub-patterns, no nested groups. Anything else containing an\n * unescaped `(` is left to the other recognizers, which reject it as a\n * metachar (`META`) and fall back to `RegExp.exec`, so a false read here can\n * only fail to lower, never mis-lower.\n */\nfunction stripTrailingLookahead(source: string): TrailingLookahead | null {\n if (!source.endsWith(')')) return null\n for (const negative of [true, false] as const) {\n const lead = negative ? '(?!' : '(?='\n const idx = source.lastIndexOf(lead)\n if (idx === -1) continue\n const body = source.slice(idx + lead.length, -1)\n const operand = body.length ? parseClassOperand(body) : null\n if (!operand) continue\n return { base: source.slice(0, idx), ranges: operand.ranges, classNegated: operand.negated, negative }\n }\n return null\n}\n\n/**\n * Strip ONE redundant outer `(?:\u2026)` wrapper, if it spans the ENTIRE source\n * (nothing before it, nothing \u2014 not even a quantifier \u2014 after its matching\n * close). A non-capturing group with no trailing quantifier is semantically\n * identical to its bare contents, so this is always safe to unwrap; it's what\n * lets `(?:a|b|c)` (a whole-token alternation written as idiomatic regex\n * style, e.g. CSS `basicSel`) reach the top-level `|` split below. Bails\n * (leaves `source` untouched) on anything that isn't a clean whole-string\n * wrap: unbalanced parens, or a group that closes before the string ends\n * (which would mean a quantifier or trailing content follows it).\n */\nfunction unwrapOuterGroup(source: string): string {\n while (source.startsWith('(?:')) {\n let depth = 1\n let i = 3\n let ok = true\n while (i < source.length && depth > 0) {\n const ch = source[i]\n if (ch === '\\\\') { i += 2; continue }\n if (ch === '[') {\n let j = i + 1\n if (source[j] === '^') j++\n while (j < source.length && source[j] !== ']') {\n if (source[j] === '\\\\') j += 2\n else j++\n }\n if (source[j] !== ']') { ok = false; break }\n i = j + 1\n continue\n }\n if (ch === '(') depth++\n else if (ch === ')') depth--\n i++\n }\n if (!ok || depth !== 0 || i !== source.length) break\n source = source.slice(3, -1)\n }\n return source\n}\n\n/**\n * Split a regex source on top-level `|` \u2014 i.e. `|` outside any `[]` bracket\n * class and outside any `(...)` group (parens still count toward depth even\n * though we don't otherwise understand groups; a `|` nested in one is never a\n * split point). Returns null if there's no top-level `|` at all, if brackets/\n * parens are unbalanced, or if any resulting alternative is empty (a\n * zero-width arm \u2014 an unmodeled edge case, decline rather than mis-lower).\n * One redundant whole-string `(?:\u2026)` wrapper is stripped first (see\n * `unwrapOuterGroup`) so `(?:a|b)` splits the same as bare `a|b`.\n */\nfunction splitTopLevelAlternation(source: string): string[] | null {\n const body = unwrapOuterGroup(source)\n const parts: string[] = []\n let depth = 0\n let last = 0\n let i = 0\n while (i < body.length) {\n const ch = body[i]\n if (ch === '\\\\') { i += 2; continue }\n if (ch === '[') {\n let j = i + 1\n if (body[j] === '^') j++\n while (j < body.length && body[j] !== ']') {\n if (body[j] === '\\\\') j += 2\n else j++\n }\n if (body[j] !== ']') return null\n i = j + 1\n continue\n }\n if (ch === '(') { depth++; i++; continue }\n if (ch === ')') { depth--; if (depth < 0) return null; i++; continue }\n if (ch === '|' && depth === 0) {\n parts.push(body.slice(last, i))\n last = i + 1\n i++\n continue\n }\n i++\n }\n if (depth !== 0) return null\n parts.push(body.slice(last))\n if (parts.length < 2 || parts.some(p => p.length === 0)) return null\n return parts\n}\n\n/** Can `shape` match the empty string? Only an unbounded `chars` run with no\n * `+` (`[x]*`) can \u2014 every other shape requires at least one fixed/mandatory\n * char (`seq` always has \u22651 mandatory part per `seqIsUnambiguous`; `ident`/\n * `until`/`delimited`/`string`/`litFold` all require a fixed opening char). A\n * `lookahead`/`alt` defer to what they wrap. */\nfunction shapeCanBeEmpty(shape: ScanShape): boolean {\n if (shape.kind === 'chars') return !shape.minOne\n if (shape.kind === 'lookahead') return shapeCanBeEmpty(shape.inner)\n if (shape.kind === 'alt') return shape.arms.some(shapeCanBeEmpty)\n return false\n}\n\n/** Exact union of char-sets when it's computable, else `'any'` (conservative:\n * forces ordered dispatch rather than guessing at a mixed-polarity union, or\n * when any input is already `'any'`). A single concrete-set list is returned\n * as-is (including if negated) \u2014 the ambiguity is only in combining \u22652 sets\n * of differing polarity. */\nfunction unionCharSets(sets: Array<CharSet | 'any'>): CharSet | 'any' {\n if (sets.some(s => s === 'any')) return 'any'\n const concrete = sets as CharSet[]\n if (concrete.length === 1) return concrete[0]!\n if (concrete.some(s => s.negated)) return 'any'\n return { ranges: concrete.flatMap(s => s.ranges), negated: false }\n}\n\n/** A single seq part's own first-char set, ignoring whether it's skippable.\n * A `group` part delegates to its inner shape's own first-set (\u00A78f) \u2014\n * possibly `'any'` if the inner shape can match empty or is a non-disjoint\n * `alt` (see `shapeFirstAccept`). */\nfunction partFirstAccept(part: SeqPart): CharSet | 'any' {\n if (part.part === 'lit') return { ranges: [[part.cps[0]!, part.cps[0]!]], negated: false }\n if (part.part === 'run') return { ranges: part.ranges, negated: part.negated }\n return shapeFirstAccept(part.inner)\n}\n\n/** The char-set a `seq` can start with: union of each leading skippable part's\n * own set up to and including the first mandatory part (after which later\n * parts can no longer be what the very first input char matches). */\nfunction seqFirstAccept(parts: SeqPart[]): CharSet | 'any' {\n const sets: Array<CharSet | 'any'> = []\n for (const p of parts) {\n const mandatory = p.part === 'lit' ? !p.optional : p.min >= 1\n sets.push(partFirstAccept(p))\n if (mandatory) break\n }\n return unionCharSets(sets)\n}\n\n/**\n * Is `inner` safe to use as a group's body (\u00A78f)? `chars`/`ident`/`seq`/\n * `litFold` are always safe: each is only ever constructed after proving (via\n * `seqIsUnambiguous` or equivalent) that greedy resolution is the UNIQUE valid\n * match at a given position \u2014 there is no alternate length for a backtracker\n * to reconsider, so treating the group as an atomic, resolve-once unit is\n * sound regardless of what follows it. A `lookahead` defers to what it wraps\n * (zero-width, adds no new choice). An `alt` is safe ONLY when `disjoint`:\n * a NON-disjoint alt (`(?:a|ab)`) genuinely can need real backtracking into a\n * DIFFERENT arm if something after the group fails (verified: `/^(?:a|ab)c/`\n * matches \"abc\" via the SECOND arm, only because the first arm's match left\n * \"c\" unsatisfied) \u2014 our ordered-dispatch codegen resolves once and never\n * reconsiders, so that case must decline. `until`/`delimited`/`string` are\n * declined outright, same conservative call as `trailingBacktrackClass`.\n */\nfunction groupInnerSafe(shape: ScanShape): boolean {\n if (shape.kind === 'chars' || shape.kind === 'ident' || shape.kind === 'seq' || shape.kind === 'litFold') return true\n if (shape.kind === 'lookahead') return groupInnerSafe(shape.inner)\n // A disjoint alt is safe anywhere. A NON-disjoint alt is admitted here too,\n // but its ordered-choice-commit is only sound in the trailing-once position \u2014\n // `seqIsUnambiguous` (\u00A78h) enforces that positional constraint; a non-trailing\n // or optional/repeated non-disjoint-alt group is rejected there.\n if (shape.kind === 'alt') return true\n return false\n}\n\n/**\n * The set of first chars a NON-EMPTY match of `shape` could start with, or\n * `'any'` if that can't be pinned down to a single char-set (used to decide\n * whether `alt` arms have disjoint first-sets). A shape that can match empty\n * degrades to `'any'`: since it could succeed with zero chars regardless of\n * what follows, it would \"accept\" any first char by never actually needing one\n * \u2014 treating that as disjoint from anything else would be unsound.\n */\nfunction shapeFirstAccept(shape: ScanShape): CharSet | 'any' {\n if (shapeCanBeEmpty(shape)) return 'any'\n switch (shape.kind) {\n case 'chars': return { ranges: shape.ranges, negated: false }\n case 'ident': return { ranges: shape.head, negated: false }\n case 'until': return { ranges: [[shape.open[0]!, shape.open[0]!]], negated: false }\n case 'delimited': return { ranges: [[shape.open[0]!, shape.open[0]!]], negated: false }\n case 'string': return { ranges: [[shape.quote, shape.quote]], negated: false }\n case 'litFold': {\n const cp = shape.open[0]!\n if (cp >= 65 && cp <= 90) return { ranges: [[cp, cp], [cp + 32, cp + 32]], negated: false }\n if (cp >= 97 && cp <= 122) return { ranges: [[cp, cp], [cp - 32, cp - 32]], negated: false }\n return { ranges: [[cp, cp]], negated: false }\n }\n case 'seq': return seqFirstAccept(shape.parts)\n case 'lookahead': return shapeFirstAccept(shape.inner) // zero-width \u2014 doesn't change first-char acceptance\n case 'alt': {\n // The set of first chars is the union of every arm's own first-set,\n // independent of whether the arms are mutually disjoint (that flag only\n // governs dispatch, not what the shape can start with). Any arm whose\n // first-set is itself `'any'` (stored as `null`) makes the union `'any'`.\n const sets = shape.firsts.map((f): CharSet | 'any' => (f === null ? 'any' : f))\n return unionCharSets(sets)\n }\n }\n}\n\n/** True iff every pair of `sets` is provably disjoint; `'any'` is disjoint from nothing. */\nfunction allPairsDisjoint(sets: Array<CharSet | 'any'>): boolean {\n for (let i = 0; i < sets.length; i++) {\n const a = sets[i]!\n if (a === 'any') return false\n for (let j = i + 1; j < sets.length; j++) {\n const b = sets[j]!\n if (b === 'any' || !classDisjoint(a, b)) return false\n }\n }\n return true\n}\n\n/**\n * Recognize top-level alternation `A|B|C` (\u00A78e): split on `|` outside any\n * `[]`/`()`, lower each arm independently (an arm may itself be a `seq`,\n * `chars`, `lookahead`, \u2026, or even nested alternation via one redundant\n * `(?:\u2026)` wrapper \u2014 see `unwrapOuterGroup`). Declines (null) unless EVERY arm\n * independently lowers \u2014 a single unsupported arm (e.g. one with a nested\n * capturing/non-capturing group, \u00A78f) falls the whole alternation back to\n * `RegExp.exec` rather than partially lowering.\n */\nfunction parseAlternation(source: string): ScanShape | null {\n const parts = splitTopLevelAlternation(source)\n if (!parts) return null\n const arms: ScanShape[] = []\n for (const p of parts) {\n const arm = parseScanShape(p)\n if (!arm) return null\n arms.push(arm)\n }\n const firstSets = arms.map(shapeFirstAccept)\n const disjoint = allPairsDisjoint(firstSets)\n return { kind: 'alt', arms, disjoint, firsts: firstSets.map(f => (f === 'any' ? null : f)) }\n}\n\n/**\n * Recognize one scannable arm from its regex source, or null if it isn't one of\n * the structural shapes. Top-level alternation (\u00A78e) is tried FIRST \u2014 `|` has\n * the lowest precedence in regex, so splitting on it happens before anything\n * else, with each arm then recursively re-entering this same function (so an\n * arm's own trailing lookahead, or its own nested `(?:\u2026)`-wrapped alternation,\n * is still recognized). Failing that: char-class run, ident, string, then\n * open-until-terminator, delimited, and finally the general linear `seq` chain.\n * A trailing `(?!class)`/`(?=class)` is peeled off next (\u00A78b) and re-wraps\n * whatever shape the remaining base recognizes as.\n */\nexport function parseScanShape(source: string): ScanShape | null {\n const alt = parseAlternation(source)\n if (alt) return alt\n const la = stripTrailingLookahead(source)\n if (la) {\n const inner = parseScanShapeCore(la.base)\n if (!inner) return null\n const operand: CharSet = { ranges: la.ranges, negated: la.classNegated }\n if (!lookaheadUnambiguous(inner, operand, la.negative)) return null\n return { kind: 'lookahead', inner, ranges: la.ranges, classNegated: la.classNegated, negative: la.negative }\n }\n return parseScanShapeCore(source)\n}\n\n/**\n * Split a regex fragment on top-level `|` (outside `[]`/`()`), escape-aware.\n * Unlike `splitTopLevelAlternation` this allows a SINGLE arm (no `|` at all) and\n * does not unwrap an outer group \u2014 it's used to enumerate the arms of a\n * `delimited` body, which may legitimately be one bare arm (`[^x]`). Returns\n * null on unbalanced brackets/parens.\n */\nfunction splitDelimArms(body: string): string[] | null {\n const arms: string[] = []\n let depth = 0\n let last = 0\n let i = 0\n while (i < body.length) {\n const ch = body[i]\n if (ch === '\\\\') { i += 2; continue }\n if (ch === '[') {\n let j = i + 1\n if (body[j] === '^') j++\n while (j < body.length && body[j] !== ']') {\n if (body[j] === '\\\\') j += 2\n else j++\n }\n if (body[j] !== ']') return null\n i = j + 1\n continue\n }\n if (ch === '(') { depth++; i++; continue }\n if (ch === ')') { depth--; if (depth < 0) return null; i++; continue }\n if (ch === '|' && depth === 0) { arms.push(body.slice(last, i)); last = i + 1 }\n i++\n }\n if (depth !== 0) return null\n arms.push(body.slice(last))\n return arms\n}\n\n/**\n * Prove that the `delimited` lowering \u2014 \"scan the raw input to the first full\n * `close` literal, ignoring the body entirely\" \u2014 is EQUIVALENT to the real regex\n * `<open>(?:body)*<close>`. That equivalence holds iff `(?:body)*` can never\n * match a string that contains the `close` literal: then greedy repetition stops\n * exactly before the first `close`, which is where the scan lands too.\n *\n * We only prove this for the two-code-point delimiter-safe idiom (the sole shape that expresses\n * \"any char that doesn't form the close\"):\n *\n * n === 1 (`close` is one char l0): body must be exactly `[^l0]`.\n * n === 2 (`close` is `l0 l1`): body must be exactly `[^l0] | l0(?!l1)`.\n *\n * In both the bulk arm `[^l0]` consumes every char except l0, and the guard arm\n * (n === 2) consumes l0 only when it is NOT followed by l1 \u2014 so the body admits\n * l0 but never the full `l0 l1`, and rejects NOTHING else (a body that excluded\n * some non-close char would stop early while the raw scan skipped ahead to the\n * next close, diverging). Anything outside this template \u2014 an alternation whose\n * arms can consume the close (`z(?:a|[0-2]+)*a`), a bulk class narrower/wider\n * than `[^l0]`, a longer close, extra arms \u2014 is declined, falling through to\n * `RegExp.exec`. Sound-by-construction: we only ever return true for a body we\n * can prove never contains `close`.\n */\nfunction delimitedBodySound(body: string, close: number[]): boolean {\n const l0 = close[0]!\n if (close.length > 2) return false\n const arms = splitDelimArms(body)\n if (!arms) return false\n let bulkSeen = false\n let guardSeen = false\n for (const arm of arms) {\n // Bulk arm: a bare negated class `[^l0]` \u2014 excluded set is exactly {l0}.\n const bulk = /^\\[\\^((?:\\\\.|[^\\]])+)\\]$/.exec(arm)\n if (bulk) {\n if (bulkSeen) return false\n const ranges = parseClassRanges(bulk[1]!)\n if (!ranges || ranges.length !== 1 || ranges[0]![0] !== l0 || ranges[0]![1] !== l0) return false\n bulkSeen = true\n continue\n }\n // Guard arm (n === 2 only): `l0(?!l1)` \u2014 consume l0 unless it starts the close.\n if (close.length === 2 && arm.endsWith(')')) {\n const idx = arm.indexOf('(?!')\n if (idx === -1) return false\n const prefix = literalCodePoints(arm.slice(0, idx))\n const op = parseClassOperand(arm.slice(idx + 3, -1))\n const prefixIsL0 = prefix?.length === 1 && prefix[0] === l0\n const forbidsL1 = op && !op.negated && op.ranges.length === 1 &&\n op.ranges[0]![0] === close[1] && op.ranges[0]![1] === close[1]\n if (!prefixIsL0 || !forbidsL1 || guardSeen) return false\n guardSeen = true\n continue\n }\n return false\n }\n // Require the exact arm set: bulk always; guard iff the close is two chars.\n return bulkSeen && guardSeen === (close.length === 2)\n}\n\n/**\n * Structurally recognize `<openLit>(?:<body>)*<closeLit>` \u2014 literal opener, a\n * single non-capturing `*`-repeated group, literal closer \u2014 and lower it to a\n * `delimited` scan ONLY when `delimitedBodySound` proves the body can't contain\n * the close. Returns null (\u2192 fall through to `seq`/`RegExp.exec`) otherwise.\n */\nfunction parseDelimited(source: string): ScanShape | null {\n // An escape-aware body (a literal `\\\\` in the source \u21D2 string-like) is handled\n // by `parseStringShape`; here \"scan to first close\" would wrongly stop at an\n // escaped delimiter, so decline.\n if (source.includes('\\\\\\\\')) return null\n // Opener: literal chars up to the first unescaped `(`, which must open `(?:`.\n let i = 0\n while (i < source.length && source[i] !== '(') {\n i += source[i] === '\\\\' ? 2 : 1\n }\n if (source[i] !== '(' || source[i + 1] !== '?' || source[i + 2] !== ':') return null\n const openFrag = source.slice(0, i)\n // Balanced scan of the group body to its matching `)`.\n let k = i + 3\n let depth = 1\n while (k < source.length && depth > 0) {\n const ch = source[k]\n if (ch === '\\\\') { k += 2; continue }\n if (ch === '[') {\n let j = k + 1\n if (source[j] === '^') j++\n while (j < source.length && source[j] !== ']') {\n if (source[j] === '\\\\') j += 2\n else j++\n }\n if (source[j] !== ']') return null\n k = j + 1\n continue\n }\n if (ch === '(') depth++\n else if (ch === ')') depth--\n k++\n }\n if (depth !== 0) return null\n const body = source.slice(i + 3, k - 1)\n if (source[k] !== '*') return null\n const closeFrag = source.slice(k + 1)\n const open = literalCodePoints(openFrag)\n const close = literalCodePoints(closeFrag)\n if (!open || !close || !delimitedBodySound(body, close)) return null\n return { kind: 'delimited', open, close }\n}\n\nfunction parseScanShapeCore(source: string): ScanShape | null {\n // [X]+ / [X]* \u2014 a positive char-class run. A negated `[^X]+`/`[^X]*` is left to\n // the general `seq` path (which lowers `[^X]+` and declines zero-width `[^X]*`).\n let m = /^\\[((?:\\\\.|[^\\]])+)\\]([+*])$/.exec(source)\n if (m && !m[1]!.startsWith('^')) {\n const ranges = parseClassRanges(m[1]!)\n return ranges ? { kind: 'chars', ranges, minOne: m[2] === '+' } : null\n }\n // \\d+ / \\w+ / \\s+ / \\d* / \\w* / \\s* \u2014 a bare shorthand-class run.\n m = /^\\\\([dws])([+*])$/.exec(source)\n if (m) {\n return { kind: 'chars', ranges: shorthandRanges(m[1] as 'd' | 'w' | 's'), minOne: m[2] === '+' }\n }\n // <head><tail>* \u2014 identifier run: one head char, then a run of tail chars.\n m = /^(\\[(?:\\\\.|[^\\]])+\\]|\\\\[dws])(\\[(?:\\\\.|[^\\]])+\\]|\\\\[dws])\\*$/.exec(source)\n if (m) {\n const head = classToRanges(m[1]!)\n const tail = classToRanges(m[2]!)\n if (head && tail) return { kind: 'ident', head, tail }\n }\n // <q>(?:[^q\\\\]|\\\\.)*<q> \u2014 a quote-delimited string with escapes.\n const str = parseStringShape(source)\n if (str) return str\n // <lit>[^X]* \u2014 consume a literal opener, then run until a terminator char.\n m = /^(.*?)\\[\\^((?:\\\\.|[^\\]])+)\\]\\*$/.exec(source)\n if (m) {\n const open = literalCodePoints(m[1]!)\n const stop = parseClassRanges(m[2]!)\n if (open && stop) return { kind: 'until', open, stop }\n }\n // <open>(?:\u2026)*<close> \u2014 delimited token scanned to its first close literal.\n // Only lowered when the body provably can't contain the close (see\n // `parseDelimited` / `delimitedBodySound`); any other `X(?:\u2026)*Y` declines here\n // and falls through to the `seq` path / `RegExp.exec`.\n const delim = parseDelimited(source)\n if (delim) return delim\n // General category: a linear chain of literals + char runs (optional prefixes,\n // literal openers, negated runs), lowered only when unambiguously greedy.\n const parts = parseSeqParts(source)\n if (parts && seqIsUnambiguous(parts)) return { kind: 'seq', parts }\n return null\n}\n\n/**\n * Flag-aware wrapper around `parseScanShape`. Lowering to a raw code-point scan\n * assumes default regex semantics, so any flag that changes matching (`i` case\n * folding, `u` surrogate handling, `m`/`s` anchor/dot behavior) disables it.\n * `g`/`y` are stickiness-only and safe.\n */\nexport function scanShapeFromRegex(source: string, flags: string): ScanShape | null {\n if (/[msu]/.test(flags)) return null\n if (/i/.test(flags)) return caseFoldShape(source)\n return parseScanShape(source)\n}\n\n/**\n * Case-insensitive (`/i`) scannable shapes. Beyond a pure case-fold literal\n * (`litFold`), this recognizes a top-level alternation of literals (an ordered\n * `alt` of litFolds \u2014 CSS `(?:and|or)`, `(?:media|container|supports)`), each\n * optionally wrapped in a trailing lookahead boundary (`(?![-\\w])`, `(?=\\()`).\n * That last form is the regex spelling of `makeWord` \u2014 a keyword plus a word\n * boundary \u2014 the common CSS at-rule/keyword dispatcher. Anything else declines\n * (\u2192 `RegExp.exec`); a false read here can only fail to lower, never mis-lower.\n */\nfunction caseFoldShape(source: string): ScanShape | null {\n const la = stripTrailingLookahead(source)\n if (la) {\n const inner = caseFoldLiteralOrAlt(la.base)\n if (!inner) return null\n const operand: CharSet = { ranges: la.ranges, negated: la.classNegated }\n if (!lookaheadUnambiguous(inner, operand, la.negative)) return null\n return { kind: 'lookahead', inner, ranges: la.ranges, classNegated: la.classNegated, negative: la.negative }\n }\n return caseFoldLiteralOrAlt(source)\n}\n\n/** A case-fold literal, or a top-level `a|b|c` alternation of pure literals. */\nfunction caseFoldLiteralOrAlt(source: string): ScanShape | null {\n // `foldEq` only folds ASCII letters (65\u201390 / 97\u2013122). A non-ASCII code point\n // with a Unicode case pair (\u00E9/\u00C9, \u00E4/\u00C4, \u2026) would be emitted as an exact compare\n // and silently miss its alternate case \u2014 a mis-lower, not just a failed lower.\n // Decline those so they fall back to `RegExp.exec` (correct Unicode folding),\n // preserving this file's \"a false read can only fail to lower, never mis-lower\".\n const asciiOnly = (cps: number[]): boolean => cps.every(cp => cp <= 127)\n\n const open = literalCodePoints(source)\n if (open) return asciiOnly(open) ? { kind: 'litFold', open } : null\n // `splitTopLevelAlternation` unwraps the outer group itself, so no pre-strip.\n const arms = splitTopLevelAlternation(source)\n if (!arms || arms.length < 2) return null\n const litArms: ScanShape[] = []\n for (const arm of arms) {\n const cp = literalCodePoints(arm)\n if (!cp || !asciiOnly(cp)) return null\n litArms.push({ kind: 'litFold', open: cp })\n }\n // Ordered choice: each litFold arm case-folds on its own, so skipping the\n // first-char dispatch guard (disjoint:false, firsts:null) is always correct \u2014\n // it just tries arms in order, exactly like regex `|`.\n return { kind: 'alt', arms: litArms, disjoint: false, firsts: litArms.map(() => null) }\n}\n\nexport const classCond = (cVar: string, ranges: Array<[number, number]>): string =>\n ranges\n .map(([lo, hi]) => (lo === hi ? `${cVar} === ${lo}` : `(${cVar} >= ${lo} && ${cVar} <= ${hi})`))\n .join(' || ')\n\n/** Literal-match condition at `base + k` for each code point; uses `firstVar` at offset 0. */\nexport const litCond = (base: string, cps: number[], firstVar?: string): string =>\n cps\n .map((cp, k) =>\n k === 0 && firstVar\n ? `${firstVar} === ${cp}`\n : `input.charCodeAt(${base}${k ? ` + ${k}` : ''}) === ${cp}`,\n )\n .join(' && ')\n\n/** Line-terminator code points `.` does not match (`\\n \\r \\u2028 \\u2029`). */\nexport const LINE_TERMINATORS = [10, 13, 8232, 8233] as const\n\n/** The body-stop chars that abort a string match (excluded set minus quote/backslash). */\nexport function stringHardStop(\n shape: Extract<ScanShape, { kind: 'string' }>,\n): Array<[number, number]> {\n return shape.excluded.filter(\n ([lo, hi]) => !(lo === hi && (lo === shape.quote || lo === BACKSLASH)),\n )\n}\n\n/** Mints a fresh, unique local variable name (`prefix` + counter). */\nexport type Mint = (prefix?: string) => string\n\n/**\n * The SINGLE source of truth for how a scannable shape matches at `start`. Both\n * the terminal emitter and the trivia scan loop consume this, so no context can\n * silently reinterpret an incomplete match (e.g. an unterminated string):\n *\n * - `setup` statements (indented by `ind`) that compute the match.\n * - `ok` a boolean expr: did a token match at `start`? (zero-width for\n * `chars*` counts as a match \u2014 terminals allow it.)\n * - `end` the position AFTER the token. **Invariant:** `end === start`\n * whenever there is no progress (match failed or matched empty),\n * so the trivia loop can gate purely on `end > start`.\n *\n * `firstChar`, when supplied, is an expression already equal to\n * `charCodeAt(start)` (the trivia loop reads it once and shares it).\n */\nexport type ShapeMatch = { setup: string[]; ok: string; end: string }\n\nconst codeAt = (start: string, firstChar?: string): string =>\n firstChar ?? `input.charCodeAt(${start})`\n\n// Dispatch-planning thresholds for a disjoint alt's first-char `switch` \u2014 same\n// tuning as codegen's `planDisjointDispatch` (kept local to avoid a scannable-run\n// \u2192 codegen import cycle): only worth a jump table when every arm keys off a few\n// DISCRETE points; a wide range (`[a-z]+`) would explode into dozens of cases.\nconst ALT_SWITCH_RANGE_LIMIT = 4\nconst ALT_SWITCH_MAX_CASES = 48\nconst ALT_SWITCH_MIN_CASES = 3\n\n/**\n * A `switch` jump table for a *disjoint* alt when every arm's first-set is a few\n * discrete code points (operator/keyword first chars); else `{ kind: 'if' }` to\n * keep the range-comparison `if/else if` chain. Arms are pairwise-disjoint, so\n * each code point maps to exactly one arm.\n */\nfunction planAltSwitch(firsts: Array<CharSet | null>): { kind: 'switch'; cases: number[][] } | { kind: 'if' } {\n const cases: number[][] = []\n let total = 0\n for (const fs of firsts) {\n if (!fs || fs.negated) return { kind: 'if' } // any / negated \u2192 no discrete keys\n const pts: number[] = []\n for (const [lo, hi] of fs.ranges) {\n if (hi - lo + 1 > ALT_SWITCH_RANGE_LIMIT) return { kind: 'if' }\n for (let cp = lo; cp <= hi; cp++) pts.push(cp)\n }\n total += pts.length\n if (total > ALT_SWITCH_MAX_CASES) return { kind: 'if' }\n cases.push(pts)\n }\n return total >= ALT_SWITCH_MIN_CASES ? { kind: 'switch', cases } : { kind: 'if' }\n}\n\nexport function emitShapeMatch(\n shape: ScanShape,\n start: string,\n mint: Mint,\n ind: string,\n firstChar?: string,\n): ShapeMatch {\n if (shape.kind === 'lookahead') {\n const inner = emitShapeMatch(shape.inner, start, mint, ind, firstChar)\n const okV = mint('_ok')\n const endV = mint('_end')\n // `charInClass` folds the operand's OWN `[^\u2026]` negation in; `guardFails`\n // then applies the lookahead's `!`/`=` polarity on top. Zero-width: `end`\n // is always `inner.end` (on success) or `start` (on failure) \u2014 never past\n // where `inner` itself stopped.\n const rawIn = classCond(`input.charCodeAt(${inner.end})`, shape.ranges)\n const charInClass = shape.classNegated ? `!(${rawIn})` : `(${rawIn})`\n const hasMatchingChar = `${inner.end} < input.length && ${charInClass}`\n const guardFails = shape.negative ? hasMatchingChar : `!(${hasMatchingChar})`\n return {\n setup: [\n ...inner.setup,\n `${ind}let ${okV} = ${inner.ok}`,\n `${ind}let ${endV} = ${inner.end}`,\n `${ind}if (${okV} && (${guardFails})) { ${okV} = false; ${endV} = ${start} }`,\n ],\n ok: okV,\n end: endV,\n }\n }\n\n if (shape.kind === 'alt') {\n const okV = mint('_ok')\n const endV = mint('_end')\n const lines: string[] = [`${ind}let ${okV} = false`, `${ind}let ${endV} = ${start}`]\n // Fast path: an alternation of case-fold literals (CSS keyword lists like\n // `@media|@container|@supports`, `even|odd`) \u2192 a `switch` on the first char\n // that jumps straight to the matching group, tails compared with the bit-OR\n // fold. Measured ~2.4x over the ordered if-chain / ~1.4x over per-arm bit-OR.\n // Ordered-choice is preserved: arms are grouped by their FOLDED first code\n // point and, within a group, emitted in source order (first match wins);\n // arms in different groups can't both match a given first char.\n if (shape.arms.length >= 2 && shape.arms.every(a => a.kind === 'litFold' && a.open.length >= 1)) {\n const groups = new Map<number, number[][]>()\n for (const a of shape.arms) {\n const open = (a as Extract<ScanShape, { kind: 'litFold' }>).open\n const f = open[0]!\n const lower = f >= 65 && f <= 90 ? f + 32 : f\n ;(groups.get(lower) ?? groups.set(lower, []).get(lower)!).push(open)\n }\n lines.push(`${ind}if (${start} < input.length) switch (${codeAt(start, firstChar)}) {`)\n for (const [lower, arms] of groups) {\n const labels = lower >= 97 && lower <= 122 ? `case ${lower}: case ${lower - 32}:` : `case ${lower}:`\n lines.push(`${ind} ${labels} {`)\n for (const open of arms) {\n const tail = open.slice(1).map((cp, i) => foldEq(`input.charCodeAt(${start} + ${i + 1})`, cp))\n const cond = tail.length ? ` && ${tail.join(' && ')}` : ''\n lines.push(`${ind} if (${start} + ${open.length} <= input.length${cond}) { ${okV} = true; ${endV} = ${start} + ${open.length}; break }`)\n }\n lines.push(`${ind} break`)\n lines.push(`${ind} }`)\n }\n lines.push(`${ind}}`)\n return { setup: lines, ok: okV, end: endV }\n }\n if (shape.disjoint) {\n // Mutually exclusive first-sets: dispatch straight to the one matching\n // arm, no ordering/backtracking concerns (\u00A77b-style disjoint dispatch). A\n // `switch` jump table when arms key off discrete first chars, else the\n // range-comparison `if/else if` chain (same plan as codegen's choice()).\n const plan = planAltSwitch(shape.firsts)\n if (plan.kind === 'switch') {\n lines.push(`${ind}if (${start} < input.length) switch (${codeAt(start, firstChar)}) {`)\n shape.arms.forEach((arm, k) => {\n const labels = plan.cases[k]!.map(cp => `case ${cp}:`).join(' ')\n const m = emitShapeMatch(arm, start, mint, `${ind} `, firstChar)\n lines.push(`${ind} ${labels} {`)\n lines.push(...m.setup)\n lines.push(`${ind} ${okV} = ${m.ok}`)\n lines.push(`${ind} ${endV} = ${m.ok} ? ${m.end} : ${start}`)\n lines.push(`${ind} break`)\n lines.push(`${ind} }`)\n })\n lines.push(`${ind}}`)\n } else {\n const c0 = codeAt(start, firstChar)\n shape.arms.forEach((arm, k) => {\n const fs = shape.firsts[k]! // non-null whenever `disjoint` is true\n const cond = fs.negated ? `!(${classCond(c0, fs.ranges)})` : `(${classCond(c0, fs.ranges)})`\n const m = emitShapeMatch(arm, start, mint, `${ind} `, firstChar)\n lines.push(`${ind}${k === 0 ? 'if' : 'else if'} (${start} < input.length && ${cond}) {`)\n lines.push(...m.setup)\n lines.push(`${ind} ${okV} = ${m.ok}`)\n lines.push(`${ind} ${endV} = ${m.ok} ? ${m.end} : ${start}`)\n lines.push(`${ind}}`)\n })\n }\n } else {\n // Overlapping first-sets: ordered choice \u2014 try each arm in turn and take\n // the first that succeeds. This is exactly regex `|`'s own semantics:\n // first alternative to match AT ALL wins on ITS OWN greedy length, never\n // compared against a later alternative's (possibly longer) match.\n const lbl = mint('_alt')\n lines.push(`${ind}${lbl}: {`)\n for (const arm of shape.arms) {\n const m = emitShapeMatch(arm, start, mint, `${ind} `, firstChar)\n lines.push(...m.setup)\n lines.push(`${ind} if (${m.ok}) { ${okV} = true; ${endV} = ${m.end}; break ${lbl} }`)\n }\n lines.push(`${ind}}`)\n }\n return { setup: lines, ok: okV, end: endV }\n }\n\n if (shape.kind === 'chars') {\n const cur = mint('_e')\n return {\n setup: [\n `${ind}let ${cur} = ${start}`,\n `${ind}while (${cur} < input.length && (${classCond(`input.charCodeAt(${cur})`, shape.ranges)})) ${cur}++`,\n ],\n // `*` always matches (possibly empty); `+` needs at least one char.\n ok: shape.minOne ? `${cur} > ${start}` : 'true',\n end: cur,\n }\n }\n\n if (shape.kind === 'ident') {\n const cur = mint('_e')\n return {\n setup: [\n `${ind}let ${cur} = ${start}`,\n `${ind}if (${start} < input.length && (${classCond(codeAt(start, firstChar), shape.head)})) {`,\n `${ind} ${cur} = ${start} + 1`,\n `${ind} while (${cur} < input.length && (${classCond(`input.charCodeAt(${cur})`, shape.tail)})) ${cur}++`,\n `${ind}}`,\n ],\n ok: `${cur} > ${start}`,\n end: cur,\n }\n }\n\n if (shape.kind === 'seq') {\n const endV = mint('_e')\n const okV = mint('_ok')\n const runCond = (p: Extract<SeqPart, { part: 'run' }>, at: string) => {\n const c = classCond(`input.charCodeAt(${at})`, p.ranges)\n return p.negated ? `!(${c})` : `(${c})`\n }\n const lines = [`${ind}let ${endV} = ${start}`, `${ind}let ${okV} = false`, `${ind}do {`]\n let first = true\n for (const p of shape.parts) {\n if (p.part === 'lit') {\n const L = p.cps.length\n const cond = litCond(endV, p.cps, first ? firstChar : undefined)\n if (p.optional) {\n lines.push(`${ind} if (${endV} + ${L} <= input.length && (${cond})) ${endV} += ${L}`)\n } else {\n lines.push(`${ind} if (!(${endV} + ${L} <= input.length && (${cond}))) break`)\n lines.push(`${ind} ${endV} += ${L}`)\n }\n } else if (p.part === 'run' && p.max === Infinity) {\n // Unbounded run (`+`/`*`/`{n,}`): greedy scan, then enforce the minimum.\n const s = mint('_s')\n lines.push(`${ind} const ${s} = ${endV}`)\n lines.push(`${ind} while (${endV} < input.length && ${runCond(p, endV)}) ${endV}++`)\n if (p.min === 1) lines.push(`${ind} if (${endV} === ${s}) break`)\n else if (p.min > 1) lines.push(`${ind} if (${endV} - ${s} < ${p.min}) break`)\n } else if (p.part === 'run' && p.max === 1) {\n // Exactly one char: required (min 1) or optional (min 0).\n if (p.min === 1) {\n lines.push(`${ind} if (!(${endV} < input.length && ${runCond(p, endV)})) break`)\n lines.push(`${ind} ${endV}++`)\n } else {\n lines.push(`${ind} if (${endV} < input.length && ${runCond(p, endV)}) ${endV}++`)\n }\n } else if (p.part === 'run') {\n // Bounded counted run `[x]{min,max}` (\u00A78c), max \u2265 2: consume up to `max`\n // occurrences, then require at least `min` (greedy \u2014 sound because\n // `seqIsUnambiguous` proved any wiggle is disjoint from what follows).\n const s = mint('_s')\n lines.push(`${ind} const ${s} = ${endV}`)\n lines.push(`${ind} while (${endV} - ${s} < ${p.max} && ${endV} < input.length && ${runCond(p, endV)}) ${endV}++`)\n if (p.min > 0) lines.push(`${ind} if (${endV} - ${s} < ${p.min}) break`)\n } else {\n // `group` (\u00A78f): the group's own body is just another `ScanShape` \u2014\n // recurse via `emitShapeMatch`, then splice its setup in as the body\n // of a required-once check, an optional take, or a repeat loop.\n const inner = emitShapeMatch(p.inner, endV, mint, `${ind} `, first ? firstChar : undefined)\n if (!p.unbounded) {\n lines.push(...inner.setup)\n if (p.min === 1) {\n lines.push(`${ind} if (!(${inner.ok})) break`)\n lines.push(`${ind} ${endV} = ${inner.end}`)\n } else {\n lines.push(`${ind} if (${inner.ok}) ${endV} = ${inner.end}`)\n }\n } else {\n const progV = mint('_prog')\n lines.push(`${ind} let ${progV} = false`)\n lines.push(`${ind} while (true) {`)\n lines.push(...inner.setup)\n lines.push(`${ind} if (!(${inner.ok})) break`)\n lines.push(`${ind} ${endV} = ${inner.end}`)\n lines.push(`${ind} ${progV} = true`)\n lines.push(`${ind} }`)\n if (p.min === 1) lines.push(`${ind} if (!${progV}) break`)\n }\n }\n first = false\n }\n lines.push(`${ind} ${okV} = true`)\n lines.push(`${ind}} while (false)`)\n lines.push(`${ind}if (!${okV}) ${endV} = ${start}`)\n return { setup: lines, ok: okV, end: endV }\n }\n\n if (shape.kind === 'litFold') {\n const openLen = shape.open.length\n const endV = mint('_end')\n const checks = shape.open.map((cp, k) => {\n const cVar = k === 0 && firstChar ? firstChar : `input.charCodeAt(${start} + ${k})`\n return foldEq(cVar, cp)\n })\n return {\n setup: [\n `${ind}let ${endV} = ${start}`,\n `${ind}if (${start} + ${openLen} <= input.length && (${checks.join(' && ')})) ${endV} = ${start} + ${openLen}`,\n ],\n ok: `${endV} > ${start}`,\n end: endV,\n }\n }\n\n if (shape.kind === 'until') {\n const j = mint('_j')\n const openLen = shape.open.length\n const openChk = openLen === 1\n ? `${codeAt(start, firstChar)} === ${shape.open[0]}`\n : litCond(start, shape.open, firstChar)\n return {\n setup: [\n `${ind}let ${j} = ${start}`,\n `${ind}if (${start} + ${openLen} <= input.length && (${openChk})) {`,\n `${ind} ${j} = ${start} + ${openLen}`,\n `${ind} while (${j} < input.length && !(${classCond(`input.charCodeAt(${j})`, shape.stop)})) ${j}++`,\n `${ind}}`,\n ],\n // An open-until-terminator always completes (stop char or EOF), so a matched\n // open literal is a full match; `end === start` iff the open didn't match.\n ok: `${j} > ${start}`,\n end: j,\n }\n }\n\n if (shape.kind === 'string') {\n const okV = mint('_ok')\n const endV = mint('_end')\n const i = mint('_i')\n const c2 = mint('_c')\n const hard = stringHardStop(shape)\n const ltLines = shape.escLineTerm\n ? []\n : (() => {\n const c3 = mint('_c')\n return [\n `${ind} const ${c3} = input.charCodeAt(${i} + 1)`,\n `${ind} if (${LINE_TERMINATORS.map(t => `${c3} === ${t}`).join(' || ')}) break`,\n ]\n })()\n return {\n setup: [\n `${ind}let ${okV} = false`,\n `${ind}let ${endV} = ${start}`,\n `${ind}if (${start} < input.length && (${codeAt(start, firstChar)}) === ${shape.quote}) {`,\n `${ind} let ${i} = ${start} + 1`,\n `${ind} while (${i} < input.length) {`,\n `${ind} const ${c2} = input.charCodeAt(${i})`,\n `${ind} if (${c2} === ${shape.quote}) { ${okV} = true; ${endV} = ${i} + 1; break }`,\n `${ind} if (${c2} === ${BACKSLASH}) {`,\n `${ind} if (${i} + 1 >= input.length) break`,\n ...ltLines,\n `${ind} ${i} += 2`,\n `${ind} continue`,\n `${ind} }`,\n ...(hard.length ? [`${ind} if (${classCond(c2, hard)}) break`] : []),\n `${ind} ${i}++`,\n `${ind} }`,\n `${ind}}`,\n ],\n ok: okV,\n end: endV,\n }\n }\n\n // delimited: <open>\u2026<close>, requires the close literal (unclosed \u21D2 no match).\n const j = mint('_j')\n const endV = mint('_end')\n const openLen = shape.open.length\n const closeLen = shape.close.length\n const openChk = openLen === 1\n ? `${codeAt(start, firstChar)} === ${shape.open[0]}`\n : litCond(start, shape.open, firstChar)\n const closeChk = litCond(j, shape.close)\n return {\n setup: [\n `${ind}let ${j} = ${start}`,\n `${ind}let ${endV} = ${start}`,\n `${ind}if (${start} + ${openLen} <= input.length && (${openChk})) {`,\n `${ind} ${j} = ${start} + ${openLen}`,\n `${ind} while (${j} + ${closeLen - 1} < input.length && !(${closeChk})) ${j}++`,\n `${ind} if (${j} + ${closeLen} <= input.length && (${closeChk})) ${endV} = ${j} + ${closeLen}`,\n `${ind}}`,\n ],\n ok: `${endV} > ${start}`,\n end: endV,\n }\n}\n\n/**\n * One trivia-loop branch for a shape, dispatched on the current char `c`\n * (= charCodeAt(_e)). Advances `_e` and `continue`s ONLY on real progress\n * (`end > _e`) \u2014 an unterminated delimited/string token leaves `end === _e`, so\n * the loop stops there exactly as the interpreter's `oneOrMore(choice(\u2026))` would.\n */\nexport function scanBranch(shape: ScanShape, mint: Mint): string {\n const m = emitShapeMatch(shape, '_e', mint, ' ', 'c')\n return [...m.setup, ` if (${m.end} > _e) { _e = ${m.end}; continue }`].join('\\n')\n}\n\n/**\n * A labeled branch: match one token and, on progress, log its [start, end,\n * kindIndex] trivia chunk. Same completion semantics as scanBranch.\n */\nexport function scanBranchLabeled(shape: ScanShape, kindIndex: number, label: string, mint: Mint): string {\n const m = emitShapeMatch(shape, '_e', mint, ' ', 'c')\n return [\n ...m.setup,\n ` if (${m.end} > _e) {`,\n ` if (_cap) {`,\n ` if (_ctx._triviaLog !== undefined) _ctx._triviaLog.push(_e, ${m.end}, ${kindIndex})`,\n ` const _rk = _ctx._rootTriviaCapture === false || _ctx._rootTriviaLog === undefined ? -1 : (_ctx._rootTriviaKindIndex?.[${JSON.stringify(label)}] ?? -1)`,\n ` if (_rk >= 0) _ctx._rootTriviaLog.push(${SELECTED_ROOT_OWNED_RANGE_PLACEHOLDER}, _e, ${m.end}, _rk)`,\n ` if (_cap === 1 && _ctx._cstTriviaLog !== undefined && _ctx.captureTrivia && (_ctx._triviaCaptureMask === undefined || (_ctx._triviaCaptureMask & ${1 << kindIndex}))) _ctx._cstTriviaLog.push(_e, ${m.end}, _ctx._cstRawChildren ? _ctx._cstRawChildren.length : 0, ${kindIndex})`,\n ` }`,\n ` _e = ${m.end}`,\n ` continue`,\n ` }`,\n ].join('\\n')\n}\n", "import type { Combinator } from '../types.ts'\nimport { getCoreRegexDef } from '../combinators/choice.ts'\nimport type { LabeledTriviaSpec } from '../cst/trivia-kinds.ts'\nimport { SELECTED_ROOT_STRIDE } from '../cst/trivia-entries.ts'\nimport { analyzeLabeledTrivia } from '../cst/trivia-kinds.ts'\nimport { type ScanShape, type Mint, scanShapeFromRegex, scanBranch, scanBranchLabeled } from './scannable-run.ts'\n\n/** Fresh, collision-free local names for one generated scan function. */\nfunction makeMint(): Mint {\n let n = 0\n return (prefix = '_v') => `${prefix}${n++}`\n}\n\nfunction unwrapTrivia(p: Combinator<unknown>): Combinator<unknown> {\n let cur = p\n while (cur._def.tag === 'trivia') cur = cur._def.parser\n return cur\n}\n\nfunction oneOrMoreInner(p: Combinator<unknown>): Combinator<unknown> | null {\n const d = p._def\n if (d.tag === 'oneOrMore') return d.parser\n if (d.tag === 'many' && d.min >= 1) return d.parser\n return null\n}\n\nfunction choiceArms(p: Combinator<unknown>): Combinator<unknown>[] | null {\n if (p._def.tag === 'choice') return p._def.parsers\n return null\n}\n\n/** The scannable shape of one arm (a regex), or null if it isn't scannable. */\nfunction armShape(arm: Combinator<unknown>): ScanShape | null {\n const d = getCoreRegexDef(arm)\n return d ? scanShapeFromRegex(d.source, d.flags) : null\n}\n\n/**\n * A trivia parser that lowers to a hand-rolled char-scan loop: `oneOrMore(choice(\n * \u2026))` (or `many`, min\u22651) where EVERY arm is a scannable shape (a `[X]+` run, a\n * `<lit>[^X]*` open-until-terminator, or a `<open>(?:\u2026)*<close>` delimited token\n * \u2014 see scannable-run.ts). Returns the per-arm shapes, or a single-element list\n * for a bare scannable regex, or null (\u2192 caller falls back to the regex/generic\n * trivia path). A single alternation regex is NOT scannable (one exec matches one\n * arm per call, defeating the loop).\n */\nexport function analyzeTriviaFastPath(trivia: Combinator<unknown>): ScanShape[] | null {\n const core = unwrapTrivia(trivia)\n\n const directDef = getCoreRegexDef(core)\n if (directDef) {\n const shape = scanShapeFromRegex(directDef.source, directDef.flags)\n return shape && shape.kind === 'chars' ? [shape] : null\n }\n\n const inner = oneOrMoreInner(core)\n if (!inner) return null\n\n const innerShape = armShape(inner)\n if (innerShape) return innerShape.kind === 'chars' ? [innerShape] : null\n\n const arms = choiceArms(inner)\n if (!arms || arms.length < 2) return null\n\n const shapes: ScanShape[] = []\n for (const arm of arms) {\n const shape = armShape(arm)\n if (!shape) return null\n shapes.push(shape)\n }\n return shapes\n}\n\nconst CAP_RECORD = [\n ` if (_cap && _e > _pos) {`,\n ` if (_ctx._triviaLog !== undefined) _ctx._triviaLog.push(_pos, _e)`,\n ` if (_cap === 1 && _ctx._cstTriviaLog !== undefined && _ctx.captureTrivia) _ctx._cstTriviaLog.push(_pos, _e, _ctx._cstRawChildren ? _ctx._cstRawChildren.length : 0)`,\n ` }`,\n].join('\\n')\n\nconst SELECTED_ROOT_FINISH = [\n ` if (_cap && _ctx._rootTriviaCapture !== false && _ctx._rootTriviaLog !== undefined && _ctx._rootTriviaLog.length !== _rootMark) {`,\n ` for (let _ri = _rootMark; _ri < _ctx._rootTriviaLog.length; _ri += ${SELECTED_ROOT_STRIDE}) { _ctx._rootTriviaLog[_ri] = _pos; _ctx._rootTriviaLog[_ri + 1] = _e }`,\n ` }`,\n].join('\\n')\n\n/** One char-scan loop carrying a branch per scannable shape, dispatched on `c`. */\nfunction composeFastLoop(shapes: ScanShape[]): string {\n const mint = makeMint()\n return [\n ` while (_e < input.length) {`,\n ` const c = input.charCodeAt(_e)`,\n ...shapes.map(s => scanBranch(s, mint)),\n ` break`,\n ` }`,\n ].join('\\n')\n}\n\n/** Emit a specialized `_tfN` that skips (unlabeled) trivia via a char-scan loop. */\nexport function buildFastTriviaFnDecl(fnName: string, shapes: ScanShape[]): string {\n return [\n `function ${fnName}(input, _pos, _ctx, _cap) {`,\n ` let _e = _pos`,\n composeFastLoop(shapes),\n CAP_RECORD,\n ` return _e`,\n `}`,\n ].join('\\n')\n}\n\n/**\n * A LABELED trivia parser whose every arm is scannable \u2192 per-arm shape + kind\n * index, or null. Same recognition as analyzeTriviaFastPath, but keyed by the\n * label table so the fast loop can log each chunk's category. It accepts any\n * structurally scannable arm set / arm count; labels do not affect recognition.\n */\nexport function analyzeLabeledScannableRun(\n trivia: Combinator<unknown>,\n): Array<{ shape: ScanShape; kindIndex: number; label: string }> | null {\n const spec = analyzeLabeledTrivia(trivia)\n if (!spec) return null\n const out: Array<{ shape: ScanShape; kindIndex: number; label: string }> = []\n for (const arm of spec.arms) {\n const d = getCoreRegexDef(arm.parser)\n const shape = d ? scanShapeFromRegex(d.source, d.flags) : null\n if (!shape) return null\n out.push({ shape, kindIndex: arm.kindIndex, label: arm.label })\n }\n return out\n}\n\n/** Emit a labeled scannable trivia `_tfN`: char-scan loop with per-chunk kind capture. */\nexport function buildLabeledScannableTriviaFnDecl(\n fnName: string,\n arms: ReadonlyArray<{ shape: ScanShape; kindIndex: number; label: string }>,\n): string {\n const mint = makeMint()\n return [\n `function ${fnName}(input, _pos, _ctx, _cap) {`,\n ` let _e = _pos`,\n ` const _rootMark = _cap && _ctx._rootTriviaLog !== undefined ? _ctx._rootTriviaLog.length : 0`,\n ` while (_e < input.length) {`,\n ` const c = input.charCodeAt(_e)`,\n ...arms.map(a => scanBranchLabeled(a.shape, a.kindIndex, a.label, mint)),\n ` break`,\n ` }`,\n SELECTED_ROOT_FINISH,\n ` return _e`,\n `}`,\n ].join('\\n')\n}\n\n/** Labeled trivia with regex arms \u2014 per-chunk kind capture in compiled output. */\nexport function buildLabeledRegexTriviaFnDecl(\n fnName: string,\n spec: LabeledTriviaSpec,\n reNames: string[],\n): string {\n const tryArms = spec.arms.map((arm, i) => {\n const re = reNames[i]!\n const k = arm.kindIndex\n return [\n ` ${re}.lastIndex = _e`,\n ` const _m${i} = ${re}.exec(input)`,\n ` if (_m${i} && _m${i}.index === _e) {`,\n ` const _ce = _e + _m${i}[0].length`,\n ` if (_cap) {`,\n ` if (_ctx._triviaLog !== undefined) _ctx._triviaLog.push(_e, _ce, ${k})`,\n ` const _rk${i} = _ctx._rootTriviaCapture === false || _ctx._rootTriviaLog === undefined ? -1 : (_ctx._rootTriviaKindIndex?.[${JSON.stringify(arm.label)}] ?? -1)`,\n ` if (_rk${i} >= 0) _ctx._rootTriviaLog.push(0, 0, _e, _ce, _rk${i})`,\n ` if (_cap === 1 && _ctx._cstTriviaLog !== undefined && _ctx.captureTrivia && (_ctx._triviaCaptureMask === undefined || (_ctx._triviaCaptureMask & ${1 << k}))) _ctx._cstTriviaLog.push(_e, _ce, _ctx._cstRawChildren ? _ctx._cstRawChildren.length : 0, ${k})`,\n ` }`,\n ` _e = _ce`,\n ` _matched = true`,\n ` continue`,\n ` }`,\n ].join('\\n')\n }).join('\\n')\n\n return [\n `function ${fnName}(input, _pos, _ctx, _cap) {`,\n ` let _e = _pos`,\n ` const _rootMark = _cap && _ctx._rootTriviaLog !== undefined ? _ctx._rootTriviaLog.length : 0`,\n ` while (_e < input.length) {`,\n ` let _matched = false`,\n tryArms,\n ` if (!_matched) break`,\n ` }`,\n SELECTED_ROOT_FINISH,\n ` return _e`,\n `}`,\n ].join('\\n')\n}\n\nexport function labeledTriviaRegexArms(trivia: Combinator<unknown>): LabeledTriviaSpec | null {\n const spec = analyzeLabeledTrivia(trivia)\n if (!spec) return null\n for (const arm of spec.arms) {\n if (!getCoreRegexDef(arm.parser)) return null\n }\n return spec\n}\n\n/** Labeled trivia via per-arm runtime parsers (non-regex or mixed arms). */\nexport function buildLabeledRuntimeTriviaFnDecl(\n fnName: string,\n spec: LabeledTriviaSpec,\n rpStartIndex: number,\n): string {\n const tryArms = spec.arms.map((arm, i) => {\n const k = arm.kindIndex\n const ri = rpStartIndex + i\n return [\n ` const _r${i} = _rp[${ri}].parse(input, _e, _ctx)`,\n ` if (_r${i}.ok && _r${i}.span.end > _e) {`,\n ` const _ce = _r${i}.span.end`,\n ` if (_cap) {`,\n ` if (_ctx._triviaLog !== undefined) _ctx._triviaLog.push(_e, _ce, ${k})`,\n ` const _rk${i} = _ctx._rootTriviaCapture === false || _ctx._rootTriviaLog === undefined ? -1 : (_ctx._rootTriviaKindIndex?.[${JSON.stringify(arm.label)}] ?? -1)`,\n ` if (_rk${i} >= 0) _ctx._rootTriviaLog.push(0, 0, _e, _ce, _rk${i})`,\n ` if (_cap === 1 && _ctx._cstTriviaLog !== undefined && _ctx.captureTrivia && (_ctx._triviaCaptureMask === undefined || (_ctx._triviaCaptureMask & ${1 << k}))) _ctx._cstTriviaLog.push(_e, _ce, _ctx._cstRawChildren ? _ctx._cstRawChildren.length : 0, ${k})`,\n ` }`,\n ` _e = _ce`,\n ` _matched = true`,\n ` continue`,\n ` }`,\n ].join('\\n')\n }).join('\\n')\n\n return [\n `function ${fnName}(input, _pos, _ctx, _cap) {`,\n ` let _e = _pos`,\n ` const _rootMark = _cap && _ctx._rootTriviaLog !== undefined ? _ctx._rootTriviaLog.length : 0`,\n ` while (_e < input.length) {`,\n ` let _matched = false`,\n tryArms,\n ` if (!_matched) break`,\n ` }`,\n SELECTED_ROOT_FINISH,\n ` return _e`,\n `}`,\n ].join('\\n')\n}\n", "/**\n * Lower scannable regex shapes to tight `charCodeAt` scan loops for terminal\n * `regex()` combinators (PERF_IDEAS \u00A78). Trivia uses the SAME match core via\n * `scannable-run.ts` (`emitShapeMatch`); this module is just the terminal\n * wrapper: run the shared match, fail when it doesn't match, then slice the\n * value. Keeping one match core means terminal and trivia can never disagree on\n * what an incomplete token (unclosed string/comment) means.\n */\nimport { type ScanShape, emitShapeMatch } from './scannable-run.ts'\n\nexport type ScanEmitCtx = {\n ind: string\n pos: string\n valueVar: string\n /** Emit `if (cond) { failLine }` lines (no trailing blank). */\n failIf: (cond: string) => string[]\n fresh: (prefix?: string) => string\n}\n\n/** Emit stmts for one terminal regex match, or null when the shape is unsupported. */\nexport function emitScannableTerminal(\n shape: ScanShape,\n c: ScanEmitCtx,\n): { stmts: string[]; endVar: string } | null {\n const m = emitShapeMatch(shape, c.pos, c.fresh, c.ind)\n const stmts = [...m.setup]\n // `chars*` matches unconditionally (possibly empty) \u2014 no failure branch needed.\n if (m.ok !== 'true') stmts.push(...c.failIf(`!(${m.ok})`))\n stmts.push(`${c.ind}const ${c.valueVar} = input.slice(${c.pos}, ${m.end})`)\n return { stmts, endVar: m.end }\n}\n", "import type { ParserDef } from '../types.ts'\nimport { recordDegradation } from './degradation.ts'\n\n/**\n * Per-node children/fields/raw/trivia/state capture is dead work when the build\n * never declares the corresponding formal param. This module derives a build's\n * *confirmed* formal-parameter arity so the compiler and macro can elide their\n * direct-AST-only CST collectors without changing structural/CST output.\n *\n * Conservative by construction: any source we can't confidently parse \u2014 rest params,\n * destructuring, `arguments`, an unrecognized shape \u2014 yields `null` (arity unknown),\n * and callers KEEP full capture. We only ever return a number when the parameter list\n * is a plain comma-separated list of simple identifiers.\n */\n\ntype NodeDef = Extract<ParserDef, { tag: 'node' }>\n\n/**\n * Is a positioned-CST host installed for this parse?\n *\n * `cstBuildHost` (and the language-service hosts) mark themselves with\n * `_parsemanCstOutput`. That flag is what re-routes a node with its OWN direct builder\n * through the host \u2014 and therefore what makes the direct builder's formal arity the\n * WRONG basis for eliding capture, since the consumer is no longer that builder.\n *\n * The COMPILED engine answers this at compile time (`hostMode`, 0.37.0). The interpreter\n * has no compile step, so it asks per parse.\n */\nexport function cstOutputHost(build: unknown): boolean {\n return (build as { _parsemanCstOutput?: true } | undefined)?._parsemanCstOutput === true\n}\n\n/**\n * \u2500\u2500 THE ONE RULE IN THIS FILE \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n * A WRONG NUMBER IS THE BUG. `null` (unknown) IS ALWAYS ACCEPTABLE.\n *\n * `null` fails open: the caller keeps every capture tier and records a degradation, so\n * the output is correct and the cost is visible. A wrong NUMBER silently drops capture\n * tiers \u2014 fields vanish from the AST with no diagnostic, because a confident answer\n * never reaches `recordDegradation`. Every branch below that cannot decide with\n * certainty must therefore return `null`, never a guess.\n * \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n */\n\n/** `x => ...` \u2014 a single unparenthesised identifier parameter. */\nconst SINGLE_IDENT_ARROW_RE = /^[A-Za-z_$][\\w$]*\\s*=>/\n\n/** Start of a formal-parameter list: `(`, or `function name?(`. */\nconst PARAM_LIST_OPEN_RE = /^(?:function\\b[^(]*)?\\(/\n\n/**\n * A host builtin, a `Function.prototype.bind` result and a `Proxy` all stringify to\n * `function () { [native code] }`. That has an EMPTY parameter list which says nothing\n * whatever about the underlying function's arity \u2014 reading it as arity 0 is a confident\n * lie that silently drops every capture tier. None of those are documented reducer\n * shapes and parseman does not owe them support; it owes them an honest `null`.\n */\nconst NATIVE_CODE_RE = /\\{\\s*\\[native code\\]\\s*\\}/\n\n/** Identifier head of a formal param, with its optional `?`. */\nconst PARAM_HEAD_RE = /^[A-Za-z_$][\\w$]*\\s*\\??\\s*/\n\n/**\n * Confirmed count of simple formal parameters the build declares, or `null` when the\n * source can't be parsed into a plain identifier list (\u2192 caller keeps full capture).\n */\nexport function confirmedBuildArity(src: string): number | null {\n const s = src.trim()\n\n // Unreadable source \u2192 unknown. Checked FIRST: its parameter list is empty, and the\n // empty-list answer below would otherwise report a confident 0.\n if (NATIVE_CODE_RE.test(s)) return null\n\n // A stray `arguments` reference defeats formal-arity reasoning entirely; only a\n // full-source scan can rule it out. Cheap guard against the obvious cases.\n //\n // Checked BEFORE the empty-parameter-list answer below. It used to sit after it, which\n // made it unreachable for exactly the shape it matters most for: `function () { return\n // arguments[0] }` has an empty formal list and real arity \u2265 1, and was reported 0.\n if (/\\barguments\\b/.test(s)) return null\n\n // Single-ident arrow: `x => ...` \u2192 exactly one param.\n if (SINGLE_IDENT_ARROW_RE.test(s)) return 1\n\n const inner = paramListText(s)\n if (inner === null) return null\n if (inner.trim() === '') return 0\n\n const parts = splitTopLevel(inner)\n if (parts === null) return null\n\n // Reject anything that isn't a flat list of simple identifiers. A rest param\n // (`...args`), destructuring (`{a}`, `[a]`), or default (`a = 1`) all appear here.\n for (const part of parts) {\n if (!isConfirmableParam(part.trim())) return null\n }\n\n return parts.length\n}\n\n/**\n * The text between a build's parameter parentheses, or `null` when it cannot be located\n * with certainty.\n *\n * Found by a BALANCED scan rather than a character class. The previous `[^)]*` stopped at\n * the first `)`, which in ordinary TypeScript is the one inside a function-typed\n * annotation: `(children: (n: N) => N, fields) => \u2026` yielded `children: (n: N` and\n * reported arity 1 instead of 2 \u2014 a silent under-capture on precisely the typed shape the\n * docs tell authors to write.\n */\nfunction paramListText(s: string): string | null {\n const open = PARAM_LIST_OPEN_RE.exec(s)\n if (!open) return null\n const start = open[0].length\n const end = matchingParen(s, start)\n if (end === null) return null\n // An arrow's list must be followed by `=>`; a `function`'s is followed by its body.\n // Without this a parenthesised expression could be read as a parameter list.\n if (!s.startsWith('function') && !/^\\s*=>/.test(s.slice(end + 1))) return null\n return s.slice(start, end)\n}\n\n/** Index of the `)` closing the list opened just before `start`, else `null`. */\nfunction matchingParen(s: string, start: number): number | null {\n let depth = 0\n for (let i = start; i < s.length; i++) {\n const c = s[i]!\n if (c === '\"' || c === \"'\" || c === '`') {\n const close = skipString(s, i)\n if (close === null) return null\n i = close\n continue\n }\n if (c === '(' || c === '[' || c === '{') depth++\n else if (c === ']' || c === '}') { if (--depth < 0) return null }\n else if (c === ')') { if (depth === 0) return i; depth-- }\n }\n return null\n}\n\n/** Index of the closing quote of the literal opened at `open`, else `null`. */\nfunction skipString(s: string, open: number): number | null {\n const quote = s[open]!\n for (let i = open + 1; i < s.length; i++) {\n if (s[i] === '\\\\') { i++; continue }\n if (s[i] === quote) return i\n }\n return null\n}\n\n/**\n * Split a parameter list on TOP-LEVEL commas, or `null` if it cannot be split with\n * certainty.\n *\n * Tracks `()`/`[]`/`{}` AND `<>`, because a comma inside type arguments belongs to the\n * annotation, not the list: a plain `,`-split turned `(a: Map<K, V>, b) => \u2026` into three\n * fragments. `=>` is consumed as a unit so the `>` of an arrow type is not mistaken for\n * the close of a type-argument list.\n */\nfunction splitTopLevel(inner: string): string[] | null {\n const parts: string[] = []\n let depth = 0\n let angle = 0\n let last = 0\n for (let i = 0; i < inner.length; i++) {\n const c = inner[i]!\n if (c === '=' && inner[i + 1] === '>') { i++; continue }\n if (c === '\"' || c === \"'\" || c === '`') {\n const close = skipString(inner, i)\n if (close === null) return null\n i = close\n continue\n }\n if (c === '(' || c === '[' || c === '{') depth++\n else if (c === ')' || c === ']' || c === '}') { if (--depth < 0) return null }\n else if (c === '<') angle++\n else if (c === '>') { if (--angle < 0) return null }\n else if (c === ',' && depth === 0 && angle === 0) { parts.push(inner.slice(last, i)); last = i + 1 }\n }\n if (depth !== 0 || angle !== 0) return null\n parts.push(inner.slice(last))\n return parts\n}\n\n/**\n * A confirmable formal param: a plain identifier, optionally `?`-optional and optionally\n * carrying a TypeScript type annotation (`c`, `c?`, `c: any`, `c?: Map<K, V>`, `c: (n: N)\n * => N`). The build source is sliced verbatim from the (possibly TS) grammar source, so\n * typed params must be recognized or every typed grammar keeps full capture.\n *\n * A DEFAULT (`a = 1`, `a: number = 1`) stays unconfirmed: the parameter is optional, so\n * the formal count overstates what the reducer is guaranteed to receive.\n */\nfunction isConfirmableParam(part: string): boolean {\n const head = PARAM_HEAD_RE.exec(part)\n if (!head) return false // rest `...a`, destructuring `{a}` / `[a]`\n const rest = part.slice(head[0].length)\n if (rest === '') return true\n if (rest[0] !== ':') return false // `a = 1`, or anything else we cannot read\n return !hasDefaultAssign(rest.slice(1))\n}\n\n/** An `=` that is not part of `=>`, `>=`, `<=`, `==` or `!=` \u2014 i.e. a default value. */\nfunction hasDefaultAssign(annotation: string): boolean {\n for (let i = 0; i < annotation.length; i++) {\n if (annotation[i] !== '=') continue\n if (annotation[i + 1] === '>' || annotation[i + 1] === '=') { i++; continue }\n const prev = annotation[i - 1]\n if (prev === '<' || prev === '>' || prev === '!' || prev === '=') continue\n return true\n }\n return false\n}\n\n/**\n * The source a def's arity/shape analysis must read.\n *\n * `buildSrc` is the source text of the EXPRESSION written at the `node(...)` call\n * site. When the reducer is passed as a bare identifier \u2014 `node('Foo', p, { build:\n * foldOperation })` \u2014 that text is just `\"foldOperation\"`, which matches no parameter\n * list and used to fail open into all five capture tiers, silently. The macro plugin\n * already holds the whole module's AST, so it resolves such an identifier to its\n * module-scope declaration and parks that declaration's source here. `buildSigSrc` is\n * ANALYSIS-ONLY: it is never emitted, so the generated builder reference is unchanged.\n */\nexport function buildAnalysisSrc(def: NodeDef): string {\n return def.buildSigSrc ?? def.buildSrc ?? def.build!.toString()\n}\n\n/**\n * Why a parameter list could not be read \u2014 the actionable half of the diagnostic.\n *\n * Only genuinely undecidable shapes reach here. The resolver (`plugin/reducer-resolver.\n * ts`) handles named reducers, cross-module imports, namespace members, aliases,\n * non-reassigned `let`/`var`, defaults and destructuring; a decline from it carries a\n * machine-readable reason, which is what the author needs in order to fix or declare it.\n */\nconst RESOLVER_REASONS: Record<string, string> = {\n 'rest-parameter': 'its parameter list uses a rest parameter, so the declared arity is unbounded',\n 'arguments': 'its body references `arguments`',\n 'reassigned': 'the binding it names is reassigned, so the function read here is not decidable',\n 'not-a-function': 'the binding it names is not a function declaration',\n 'unresolved-import': 'its module could not be resolved or parsed',\n 'not-found': 'the name did not resolve to any binding',\n 'computed': 'it is a computed expression',\n 'foreign-source': 'it is named in a module the resolver was never told about, so its '\n + 'offsets index no scope tree the resolver holds',\n 'ambiguous-source': 'two distinct registered modules hold byte-identical text, so that '\n + 'text no longer names the module its offsets index',\n}\n\nfunction unconfirmableReason(def: NodeDef, src: string): string {\n const declared = def.buildArityUnresolved\n if (declared !== undefined && RESOLVER_REASONS[declared]) return RESOLVER_REASONS[declared]!\n const s = src.trim()\n const params = s.slice(0, s.indexOf(')') + 1)\n if (params.includes('...')) return RESOLVER_REASONS['rest-parameter']!\n if (/\\barguments\\b/.test(s)) return RESOLVER_REASONS['arguments']!\n if (/^[A-Za-z_$][\\w$]*(\\s*\\.\\s*[A-Za-z_$][\\w$]*)?$/.test(s)) {\n return 'it names a binding this build could not resolve to a function declaration'\n }\n return 'its parameter list could not be parsed'\n}\n\n/**\n * Confirmed formal arity for a node def, reporting once when it cannot be confirmed.\n *\n * Order of authority:\n * 1. `node(..., { buildArity })` \u2014 the author DECLARED it. Nothing overrides that.\n * 2. `def.buildArity` as resolved by the macro's reducer resolver (real scope analysis\n * and cross-module import following).\n * 3. Reading the parameter list out of whatever source we have.\n *\n * Fail-open is the correct BEHAVIOR \u2014 capturing too much is safe, capturing too little\n * is a correctness bug. Fail-open with no diagnostic was the defect. But a diagnostic is\n * the right answer only for the genuinely undecidable; for everything a static analysis\n * can decide, the right answer is to decide it, which is why (2) exists and why (1) gives\n * the author a way out of (3) entirely.\n */\nexport function confirmedArityForDef(def: NodeDef): number | null {\n if (def.buildArity !== undefined) return def.buildArity\n const src = buildAnalysisSrc(def)\n const arity = confirmedBuildArity(src)\n if (arity !== null) return arity\n const subject = `build reducer \\`${(def.buildSrc ?? '<runtime fn>').trim().split('\\n')[0]!.slice(0, 60)}\\``\n recordDegradation({\n code: 'build-arity-unconfirmed',\n severity: 'warn',\n where: `node(\"${def.type ?? '<inferred>'}\")`,\n subject,\n fellBackTo: `could not confirm its declared arity \u2014 ${unconfirmableReason(def, src)} \u2014 `\n + 'so this node captures children, fields and raw children, logs trivia, and clones `_ctx.state` on every match',\n otherwise: 'only the tiers the reducer actually declares would be captured '\n + '(arity >= 1 children, >= 2 fields, >= 4 raw, >= 5 trivia, >= 6 state). '\n + 'Declare it with `node(..., { buildArity: n })` if it cannot be derived',\n })\n return null\n}\n\n/** Build reads its 1st (`children`) arg? Unknown/unparseable \u2192 true (keep capture). */\nexport function buildReadsChildren(def: NodeDef): boolean {\n if (!def.build) return true // structural node: CST output always owns children\n const arity = confirmedArityForDef(def)\n if (arity === null) return true\n return arity >= 1\n}\n\n/** Build reads its 4th (`rawChildren`) arg? Unknown/unparseable \u2192 true (keep capture). */\nexport function buildReadsRaw(def: NodeDef): boolean {\n if (!def.build) return true // structural node: host/default CST may read raw children\n const arity = confirmedArityForDef(def)\n if (arity === null) return true\n return arity >= 4\n}\n\n/** Build reads the 5th (triviaLog) arg? Unknown/unparseable \u2192 true (keep capture). */\nexport function buildReadsTrivia(def: NodeDef): boolean {\n if (!def.build) return true // structural node: host may read trivia \u2014 keep capture\n const arity = confirmedArityForDef(def)\n if (arity === null) return true\n return arity >= 5\n}\n\n/** Build reads the 6th (state) arg? Unknown/unparseable \u2192 true (keep state clone). */\nexport function buildReadsState(def: NodeDef): boolean {\n if (!def.build) return true // structural node: host may read state \u2014 keep clone\n const arity = confirmedArityForDef(def)\n if (arity === null) return true\n return arity >= 6\n}\n", "import type { ParserDef } from '../types.ts'\nimport { buildAnalysisSrc } from './build-arity.ts'\nimport { recordDegradation } from './degradation.ts'\n\n/**\n * A formal param, optionally carrying a TypeScript annotation.\n *\n * The macro path TS-strips `buildSrc` before it reaches here, so a bare `\\w+` was\n * *usually* enough \u2014 but \"usually\" is exactly the failure class this module is being\n * audited for: a `mk` reducer spelled with a type annotation that survives (a runtime\n * `compile()` over untranspiled source, a hand-written IR string) silently loses the\n * inline-`mk` fast path and pays a `_build[n](...)` call on every match, with nothing\n * said. Admitting the annotation removes the class rather than relying on an upstream\n * pass to have removed it. No `=` (default) \u2014 a default is not a plain positional param.\n */\n/** Optional `?` and/or `: T` suffix on a formal param. */\nconst ANN = String.raw`\\s*\\??\\s*(?::[^,)=]+)?`\n/** A whole ignorable param (the `fields` slot, whose name the shape never re-reads). */\nconst ANY_P = String.raw`\\w+${ANN}`\n\n/** `(c, f, s, r, tl) => mk('Type', c, r, s, tl)` \u2014 CSS perf regression builder shape. */\nconst MK_BUILD_RE = new RegExp(\n String.raw`^\\(\\s*(\\w+)${ANN}\\s*,\\s*${ANY_P}\\s*,\\s*(\\w+)${ANN}\\s*,\\s*(\\w+)${ANN}\\s*,\\s*(\\w+)${ANN}\\s*\\)\\s*=>\\s*mk\\s*\\(\\s*(['\"])([^'\"]+)\\5\\s*,\\s*\\1\\s*,\\s*\\3\\s*,\\s*\\2\\s*,\\s*\\4\\s*\\)\\s*$`,\n)\n\nfunction escapeRegExp(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\n/**\n * Same shape, but the type is named by an IDENTIFIER in BOTH positions rather than by a\n * string literal.\n *\n * `node(type, body, (c, f, s, r, tl) => mk(type, c, r, s, tl))` inside a factory is the\n * ordinary way to write a family of nodes \u2014 jess's `less` grammar does it at 31 sites \u2014\n * and it missed the inline path purely because the matcher demanded a quoted literal.\n * Requiring the SAME identifier in both positions is what makes this sound rather than a\n * loosening: the arrow's own parameters are `(c, f, s, r, tl)`, so nothing between the\n * two occurrences can rebind the name, and the evaluator has already resolved that\n * binding to `def.type`. Two spellings of one value, not two values.\n */\nfunction identMkBuildRe(typeIdent: string): RegExp {\n return new RegExp(\n String.raw`^\\(\\s*(\\w+)${ANN}\\s*,\\s*${ANY_P}\\s*,\\s*(\\w+)${ANN}\\s*,\\s*(\\w+)${ANN}\\s*,\\s*(\\w+)${ANN}\\s*\\)\\s*=>\\s*(?:[\\w$.]*\\.)?mk\\s*\\(\\s*${escapeRegExp(typeIdent)}\\s*,\\s*\\1\\s*,\\s*\\3\\s*,\\s*\\2\\s*,\\s*\\4\\s*\\)\\s*$`,\n )\n}\n\n/** Any callee \u2014 covers `mk`, `import_x.mk`, `__vite_ssr_import_0__.mk`, etc. */\nfunction looseMkBuildRe(type: string): RegExp {\n return new RegExp(\n String.raw`^\\(\\s*(\\w+)${ANN}\\s*,\\s*${ANY_P}\\s*,\\s*(\\w+)${ANN}\\s*,\\s*(\\w+)${ANN}\\s*,\\s*(\\w+)${ANN}\\s*\\)\\s*=>\\s*.+\\(\\s*(['\"])${escapeRegExp(type)}\\5\\s*,\\s*\\1\\s*,\\s*\\3\\s*,\\s*\\2\\s*,\\s*\\4\\s*\\)\\s*$`,\n )\n}\n\n/**\n * Does this source LOOK like it wants the inline-`mk` path? Used only to decide whether\n * a miss is worth reporting: a reducer that never mentions `mk(` was never a candidate,\n * and warning about it would be per-rule noise on every grammar that does not use the\n * pattern at all \u2014 the flood that turns a diagnostic back into silence.\n */\nconst LOOKS_LIKE_MK_RE = /=>\\s*(?:[\\w$.]*\\.)?mk\\s*\\(/\n\n\n/**\n * When a node() build is a thin `mk(type, \u2026)` wrapper, emit the object literal\n * at the call site instead of `_build[n](\u2026)`.\n */\nexport function analyzeMkInlineBuild(def: Extract<ParserDef, { tag: 'node' }>): string | null {\n if (!def.build) return null // structural node \u2014 no own build to inline\n if (def.type === undefined) return null\n const src = buildAnalysisSrc(def).trim()\n const strict = src.match(MK_BUILD_RE)\n if (strict) {\n const mkType = strict[6]!\n if (mkType === def.type) return def.type\n reportMkMiss(def.type, src, `it builds a \"${mkType}\" node, not \"${def.type}\"`)\n return null\n }\n if (looseMkBuildRe(def.type).test(src)) return def.type\n // Factory-authored: `node(t, \u2026, (\u2026) => mk(t, \u2026))`. See `identMkBuildRe`.\n if (def.typeSrc !== undefined && identMkBuildRe(def.typeSrc).test(src)) return def.type\n if (LOOKS_LIKE_MK_RE.test(src)) {\n reportMkMiss(def.type, src, 'its parameter list or argument order does not match '\n + '`(children, fields, span, rawChildren, triviaLog) => mk(type, children, rawChildren, span, triviaLog)`')\n }\n return null\n}\n\n/** A near-miss on the inline-`mk` shape costs a real call per match \u2014 say so. */\nfunction reportMkMiss(type: string, src: string, why: string): void {\n recordDegradation({\n code: 'mk-inline-missed',\n severity: 'warn',\n where: `node(\"${type}\")`,\n subject: `build reducer \\`${src.split('\\n')[0]!.slice(0, 80)}\\``,\n fellBackTo: `looks like an inline-\\`mk\\` builder but ${why}, so every match pays a `\n + '`_build[n](...)` call instead of an inlined object literal',\n otherwise: 'the node object would be constructed at the call site with no call frame',\n })\n}\n\n/** Object literal matching `stub-build.ts` `mk()` without the function call. */\nexport function emitInlineMkNodeExpr(\n type: string,\n chV: string,\n rawV: string,\n spanExpr: string,\n tlV: string,\n): string {\n return `{ _tag: 'node', type: ${JSON.stringify(type)}, span: ${spanExpr}, children: ${chV}, rawCount: ${rawV}.length, localTriviaLen: ${tlV}.length }`\n}\n", "import type { Combinator, FieldMap, ParserDef } from '../types.ts'\nimport { confirmedArityForDef } from './build-arity.ts'\n\ntype NodeDef = Extract<ParserDef, { tag: 'node' }>\n\nexport function buildReadsFields(def: NodeDef): boolean {\n if (!def.build) return true\n const arity = confirmedArityForDef(def)\n if (arity === null) return true\n return arity >= 2\n}\n\nexport function parserHasOwnFields(p: Combinator<unknown>, seen: Set<Combinator<unknown>> = new Set()): boolean {\n if (seen.has(p)) return false\n seen.add(p)\n const d = p._def\n switch (d.tag) {\n case 'field': return true\n case 'node': return false\n case 'lazy': {\n try { return parserHasOwnFields(d.thunk(), seen) } catch { return false }\n }\n case 'sequence':\n case 'choice': return d.parsers.some(x => parserHasOwnFields(x, seen))\n case 'dispatch': return parserHasOwnFields(d.selector, seen) || d.cases.some(x => parserHasOwnFields(x.parser, seen)) || (d.matchers ? d.matchers.some(entry => parserHasOwnFields(entry.parser, seen)) : false) || (d.otherwise ? parserHasOwnFields(d.otherwise, seen) : false)\n case 'sepBy': return parserHasOwnFields(d.parser, seen) || parserHasOwnFields(d.separator, seen)\n case 'skip': return parserHasOwnFields(d.main, seen) || parserHasOwnFields(d.skipped, seen)\n case 'grammar': return parserHasOwnFields(d.parser, seen) || (d.triviaParser ? parserHasOwnFields(d.triviaParser, seen) : false)\n case 'scanTo': return parserHasOwnFields(d.sentinel, seen) || d.skip.some(x => parserHasOwnFields(x, seen))\n case 'recover': return parserHasOwnFields(d.parser, seen) || parserHasOwnFields(d.sentinel, seen)\n case 'many':\n case 'oneOrMore':\n case 'optional':\n case 'attempt':\n case 'transform':\n case 'trivia':\n case 'token':\n case 'leaf':\n case 'label':\n case 'expect':\n case 'withCtx':\n case 'not':\n case 'peek':\n return parserHasOwnFields(d.parser, seen)\n default:\n return false\n }\n}\n\n/**\n * Does the node's OWN parse frame ever have a trivia run logged into it?\n * Trivia is logged only by the trivia-skip fn, which runs at `sequence`/`many`/\n * repeat boundaries. A bare terminal (regex/literal/keywords/\u2026) has NO trivia\n * site, so its `_cstTriviaLog` stays empty and its `captureTrivia`/`_cstTriviaLog`/\n * `_triviaCaptureMask` save+install+restore is dead work \u2014 the per-node scope\n * trivia frame can be elided for it (see emitNode `needsTriviaFrame`).\n *\n * Stops at a nested `node()` (it manages its OWN trivia frame; trivia inside it\n * never logs to THIS node's frame). CONSERVATIVE: any unknown / trivia-bearing\n * shape returns `true` (keep the frame) \u2014 we only elide when provably safe.\n */\nexport function parserHasTriviaSite(p: Combinator<unknown>, seen: Set<Combinator<unknown>> = new Set()): boolean {\n if (seen.has(p)) return true // cycle \u2192 conservative (keep the frame)\n seen.add(p)\n const d = p._def\n switch (d.tag) {\n // Trivia is skipped between/around elements or iterations \u2192 a site.\n case 'sequence':\n case 'many':\n case 'oneOrMore':\n case 'sepBy':\n case 'scanTo':\n case 'recover':\n case 'skip':\n return true\n // Nested node manages its own trivia frame; none logs here.\n case 'node': return false\n // Pure terminals + trivia-suppressing token: no site.\n case 'regex':\n case 'literal':\n case 'keywords':\n case 'guard':\n case 'token':\n case 'leaf':\n return false\n // Transparent single-child wrappers: recurse.\n case 'optional':\n case 'attempt':\n case 'transform':\n case 'trivia':\n case 'label':\n case 'expect':\n case 'withCtx':\n case 'not':\n case 'peek':\n case 'field':\n return parserHasTriviaSite(d.parser, seen)\n case 'choice': return d.parsers.some(x => parserHasTriviaSite(x, seen))\n case 'dispatch': return parserHasTriviaSite(d.selector, seen) || d.cases.some(x => parserHasTriviaSite(x.parser, seen)) || (d.matchers ? d.matchers.some(entry => parserHasTriviaSite(entry.parser, seen)) : false) || (d.otherwise ? parserHasTriviaSite(d.otherwise, seen) : false)\n case 'grammar': return parserHasTriviaSite(d.parser, seen)\n case 'lazy': {\n try { return parserHasTriviaSite(d.thunk(), seen) } catch { return true }\n }\n default: return true // unknown shape \u2192 conservative\n }\n}\n\n/**\n * Can this node's inner grammar explicitly enable trivia capture? A surrounding\n * node owns the collector, so a nested `parser({ captureTrivia: true })` must\n * allocate that collector before it enters the grammar scope. Nested node()\n * rules own their separate collector and therefore do not contribute here.\n */\nexport function parserEnablesTriviaCapture(p: Combinator<unknown>, seen: Set<Combinator<unknown>> = new Set()): boolean {\n if (seen.has(p)) return false\n seen.add(p)\n const d = p._def\n switch (d.tag) {\n case 'grammar': return d.captureTrivia === true || parserEnablesTriviaCapture(d.parser, seen)\n case 'node': return false\n case 'sequence':\n case 'choice': return d.parsers.some(x => parserEnablesTriviaCapture(x, seen))\n case 'dispatch': return parserEnablesTriviaCapture(d.selector, seen) || d.cases.some(x => parserEnablesTriviaCapture(x.parser, seen)) || (d.matchers ? d.matchers.some(entry => parserEnablesTriviaCapture(entry.parser, seen)) : false) || (d.otherwise ? parserEnablesTriviaCapture(d.otherwise, seen) : false)\n case 'sepBy': return parserEnablesTriviaCapture(d.parser, seen) || parserEnablesTriviaCapture(d.separator, seen)\n case 'skip': return parserEnablesTriviaCapture(d.main, seen) || parserEnablesTriviaCapture(d.skipped, seen)\n case 'scanTo': return parserEnablesTriviaCapture(d.sentinel, seen) || d.skip.some(x => parserEnablesTriviaCapture(x, seen))\n case 'recover': return parserEnablesTriviaCapture(d.parser, seen) || parserEnablesTriviaCapture(d.sentinel, seen)\n case 'many':\n case 'oneOrMore':\n case 'optional':\n case 'attempt':\n case 'transform':\n case 'trivia':\n case 'token':\n case 'label':\n case 'field':\n case 'expect':\n case 'withCtx':\n case 'not':\n case 'peek': return parserEnablesTriviaCapture(d.parser, seen)\n // leaf() clears the inner CST/trivia collector and publishes only its own\n // terminal result. An inner parser() capture cannot reach this node.\n case 'leaf': return false\n case 'lazy': {\n try { return parserEnablesTriviaCapture(d.thunk(), seen) } catch { return false }\n }\n default: return false\n }\n}\n\nexport function buildFieldMap(captures: ReadonlyArray<{ name: string; value: unknown; span: { start: number; end: number } }> | undefined): FieldMap | undefined {\n if (!captures?.length) return undefined\n const out: FieldMap = {}\n for (const cap of captures) {\n const entry = { value: cap.value, span: cap.span }\n const current = out[cap.name]\n if (current === undefined) out[cap.name] = entry\n else if (Array.isArray(current)) current.push(entry)\n else out[cap.name] = [current, entry]\n }\n return out\n}\n", "const INLINE_BUILTINS = new Set([\n 'parseInt', 'parseFloat', 'String', 'Number', 'Boolean', 'Object', 'Array', 'Math', 'JSON',\n 'undefined', 'null', 'true', 'false', 'NaN', 'Infinity',\n])\n\nfunction escapeRegExp(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\n/** Source text for a transform callback \u2014 macro `fnSrc` or arrow `toString()`. */\nexport function transformFnSource(fn: Function, fnSrc?: string | null): string | null {\n if (fnSrc) return fnSrc.trim()\n const s = fn.toString().trim()\n if (s.includes('[native code]')) return null\n return s\n}\n\nfunction replaceParam(body: string, param: string, valueVar: string): string {\n return body.replace(new RegExp(`\\\\b${escapeRegExp(param)}\\\\b`, 'g'), valueVar)\n}\n\nfunction hasExplicitObjectKey(body: string, param: string): boolean {\n return new RegExp(`\\\\b${escapeRegExp(param)}\\\\b\\\\s*:`).test(body)\n}\n\nfunction stripForIdCheck(body: string): string {\n return body\n .replace(/'[^'\\\\]*(?:\\\\.[^'\\\\]*)*'|\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"/g, '\"\"')\n .replace(/\\bas\\s+const\\b/g, '')\n .replace(/\\b[A-Za-z_$][\\w$]*\\s*:/g, ':')\n}\n\nfunction hasFreeIdentifiers(body: string, allowed: ReadonlySet<string>): boolean {\n const stripped = stripForIdCheck(body)\n const ids = stripped.match(/\\b[A-Za-z_$][\\w$]*\\b/g) ?? []\n for (const id of ids) {\n if (INLINE_BUILTINS.has(id)) continue\n if (allowed.has(id)) continue\n return true\n }\n return false\n}\n\n/** `s => expr` / `() => expr` when expr only uses the param (+ builtins). */\nexport function tryInlineUnaryTransform(src: string, valueVar: string): string | null {\n const allowed = new Set([valueVar])\n const nullary = src.match(/^\\(\\s*\\)\\s*=>\\s*(.+)$/)\n if (nullary) {\n const body = nullary[1]!.trim()\n return hasFreeIdentifiers(body, allowed) ? null : body\n }\n const m = src.match(/^(\\w+)\\s*=>\\s*(.+)$/)\n if (!m) return null\n const body = replaceParam(m[2]!.trim(), m[1]!, valueVar)\n return hasFreeIdentifiers(body, allowed) ? null : body\n}\n\n/** Parse `[a, , c]` destructuring slots (null = ignore). */\nexport function parseArrayDestructure(pattern: string, arity: number): (string | null)[] {\n const slots: (string | null)[] = []\n for (const part of pattern.split(',')) {\n const name = part.trim()\n slots.push(name === '' || name === '_' ? null : name)\n }\n while (slots.length < arity) slots.push(null)\n return slots.slice(0, arity)\n}\n\n/**\n * `([x, y]) => body` \u2014 substitute destructure names with sequence value vars.\n * Caller must ensure body only references slotted params (+ builtins).\n */\nexport function tryInlineDestructureTransform(\n src: string,\n valueVars: string[],\n): string | null {\n const m = src.match(/^\\(\\s*\\[([^\\]]*)\\]\\s*\\)\\s*=>\\s*(.+)$/s)\n if (!m) return null\n const slots = parseArrayDestructure(m[1]!, valueVars.length)\n let body = m[2]!.trim()\n const allowed = new Set(valueVars)\n for (let i = 0; i < slots.length; i++) {\n const name = slots[i]\n if (!name) continue\n if (hasExplicitObjectKey(body, name)) return null\n body = replaceParam(body, name, valueVars[i]!)\n }\n return hasFreeIdentifiers(body, allowed) ? null : body\n}\n\n/**\n * `([, tail]) => tail` / `([_, tail]) => tail` over dispatch().\n *\n * This is a codegen-only proof that the public `[selector, tail]` pair is not\n * observed, so dispatch may return the selected branch value directly. It is\n * intentionally narrower than general destructuring inlining: public dispatch\n * semantics stay unchanged unless the immediate transform discards the selector.\n */\nexport function isDispatchTailOnlyTransform(src: string): boolean {\n const m = src.match(/^\\(\\s*\\[([^\\]]*)\\]\\s*\\)\\s*=>\\s*(.+)$/s)\n if (!m) return false\n const slots = parseArrayDestructure(m[1]!, 2)\n const tail = slots[1]\n return tail !== null && m[2]!.trim() === tail\n}\n", "import type { Combinator, ParserDef } from '../types.ts'\n\nexport const GRAMMAR_REFLECTION: unique symbol = Symbol.for('parseman.grammarReflection') as never\nexport const NODE_TYPE: unique symbol = Symbol.for('parseman.type.nodeType') as never\nexport const NODE_TAG: unique symbol = Symbol.for('parseman.type.nodeTag') as never\n\nexport type GrammarNodeReflection = {\n type: string\n tags: readonly string[]\n}\n\nexport type GrammarReflection = {\n nodes: readonly GrammarNodeReflection[]\n}\n\nexport type GrammarWithReflection<\n NodeType extends string = string,\n NodeTag extends string = string,\n> = {\n readonly [GRAMMAR_REFLECTION]?: GrammarReflection\n readonly [NODE_TYPE]?: NodeType\n readonly [NODE_TAG]?: NodeTag\n}\n\ntype NodeDef = Extract<ParserDef, { tag: 'node' }>\n\nfunction childrenOf(def: ParserDef): readonly Combinator<unknown>[] {\n switch (def.tag) {\n case 'sequence':\n case 'choice':\n return def.parsers\n case 'dispatch':\n return [\n def.selector,\n ...def.cases.map(c => c.parser),\n ...(def.matchers ? def.matchers.map(c => c.parser) : []),\n ...(def.otherwise ? [def.otherwise] : []),\n ]\n case 'many':\n case 'oneOrMore':\n case 'optional':\n case 'attempt':\n case 'transform':\n case 'trivia':\n case 'token':\n case 'leaf':\n case 'label':\n case 'field':\n case 'not':\n case 'peek':\n case 'node':\n case 'withCtx':\n case 'recover':\n case 'expect':\n return [def.parser]\n case 'grammar':\n return def.triviaParser ? [def.parser, def.triviaParser] : [def.parser]\n case 'sepBy':\n return [def.parser, def.separator]\n case 'skip':\n return [def.main, def.skipped]\n case 'scanTo':\n return [def.sentinel, ...def.skip]\n case 'routed':\n return def.fallback ? [def.fallback] : []\n case 'literal':\n case 'regex':\n case 'keywords':\n case 'guard':\n case 'lazy':\n case 'unknown':\n return []\n }\n}\n\nfunction addNode(out: Map<string, string[]>, def: NodeDef): void {\n if (def.type === undefined) return\n const existing = out.get(def.type)\n if (existing === undefined) {\n out.set(def.type, def.tags === undefined ? [] : [...def.tags])\n return\n }\n if (def.tags === undefined) return\n for (const tag of def.tags) {\n if (!existing.includes(tag)) existing.push(tag)\n }\n}\n\nfunction collectFromCombinator(\n parser: Combinator<unknown>,\n out: Map<string, string[]>,\n seen: Set<Combinator<unknown>>,\n followLazy = true,\n): void {\n if (seen.has(parser)) return\n seen.add(parser)\n const def = parser._def\n if (def.tag === 'lazy') {\n if (followLazy) {\n try { collectFromCombinator(def.thunk(), out, seen, followLazy) } catch {}\n }\n return\n }\n if (def.tag === 'node') addNode(out, def)\n for (const child of childrenOf(def)) collectFromCombinator(child, out, seen, followLazy)\n}\n\nexport function collectGrammarReflection(\n ruleMap: ReadonlyArray<readonly [string, Combinator<unknown>]>,\n opts?: { followLazy?: boolean },\n): GrammarReflection {\n const byType = new Map<string, string[]>()\n const followLazy = opts?.followLazy !== false\n for (const [, rule] of ruleMap) {\n if (!followLazy && rule._def.tag === 'lazy') {\n try {\n const resolved = rule._def.thunk()\n if (resolved._def.tag !== 'lazy') collectFromCombinator(resolved, byType, new Set(), false)\n } catch {}\n continue\n }\n collectFromCombinator(rule, byType, new Set(), followLazy)\n }\n return { nodes: [...byType].map(([type, tags]) => ({ type, tags })) }\n}\n\nexport function mergeGrammarReflections(reflections: readonly GrammarReflection[]): GrammarReflection {\n const byType = new Map<string, string[]>()\n for (const reflection of reflections) {\n for (const node of reflection.nodes) {\n const tags = byType.get(node.type)\n if (tags === undefined) {\n byType.set(node.type, [...node.tags])\n continue\n }\n for (const tag of node.tags) {\n if (!tags.includes(tag)) tags.push(tag)\n }\n }\n }\n return { nodes: [...byType].map(([type, tags]) => ({ type, tags })) }\n}\n\nexport function attachGrammarReflection<T extends object>(grammar: T, reflection: GrammarReflection): T {\n Object.defineProperty(grammar, GRAMMAR_REFLECTION, { value: reflection, enumerable: false, configurable: true })\n return grammar\n}\n\nexport function grammarReflectionOf(grammar: object): GrammarReflection | undefined {\n return (grammar as GrammarWithReflection)[GRAMMAR_REFLECTION]\n}\n\nexport function grammarReflectionSource(reflection: GrammarReflection): string {\n return `{ nodes: ${JSON.stringify(reflection.nodes)} }`\n}\n", "/**\n * Compile a Combinator<T> definition tree into an optimized JavaScript function.\n *\n * Design: every sub-emitter uses early-return on failure. Fallible contexts\n * (optional, sepBy loops, many loops) use labeled blocks so early-exit is a\n * `break <label>` rather than an IIFE return \u2014 no function call, no result\n * object allocation per node.\n */\nimport type { Combinator, ParserDef, FirstSet, ParseResult, ParseContext, ParseError, ChoiceStrategy, FieldMap } from '../types.ts'\nimport { getCoreLiteralValue, getCoreRegexDef, leadingTermOfArm } from '../combinators/choice.ts'\nimport { deriveExpected } from '../combinators/expect.ts'\nimport { firstSetOf, matchesEmpty, union, empty, any, isZeroWidthAssertion } from '../combinators/first-set.ts'\nimport { PARSEMAN_VERSION } from '../version.ts'\nimport { assertHostModeCompatible, type HostMode } from '../cst/host-mode.ts'\nimport { analyzeDuplication, analyzeDuplicationRules, formatDuplicationFindings, duplicationFindingCount, type DuplicationReport, type DuplicationWarnLevel } from '../analysis/duplication.ts'\n\n/**\n * A rule's LEADING first-set as a fuse-resolvable recipe.\n *\n * A recipe is a UNION of ORDERED CHAINS (`alts`). Each chain is the leading-term\n * sequence of one alternative; `fusedBody()` resolves it left-to-right against the\n * WINNING rules, UNIONING each segment's first-set and STOPPING after the first\n * segment that is not nullable. A segment is either\n * - a concrete first-set (`set`) with its build-time-known `nullable` flag, or\n * - a rule REFERENCE (`ref`) whose first-set AND nullability are resolved at fuse\n * time (`nullable` is a conservative placeholder until then).\n *\n * Why the ORDER + per-segment nullability matter (the bug this shape fixes): a rule\n * like `sequence(g.CssAstSyntaxStatementAtRuleName, prelude, ';')` leads with a\n * cross-artifact ref. At compile time that ref's nullability is unknown, so a flat\n * \"concrete chars + ref names\" recipe would conservatively treat it as nullable and\n * union the FOLLOWING terms' first-sets \u2014 and the prelude's first-set is `any` (a\n * `scanTo`), collapsing the whole recipe to `any` and losing first-char dispatch.\n * Keeping the leading chain ordered lets fuse-time resolution see the ref is actually\n * NON-nullable and STOP \u2014 so the arm gates on `{@}`, exactly as a grammar-local\n * `regex(/@\u2026/)` would. Grammar authors had to hand-copy those recognizers to work\n * around this; the ordered chain removes the need.\n *\n * Soundness: the resolved set is always a SUPERSET of the rule's true first chars.\n * An unknown/opaque construct contributes its shallow `_meta.firstSet`; a ref whose\n * nullability can't be resolved defaults to nullable (keep unioning \u2014 never drops a\n * valid first char).\n */\n// VERSION-LOCKED FORMAT: this recipe shape is part of the compiled-artifact format\n// (see src/version.ts). It may change freely between parseman versions and carries NO\n// cross-version back-compat \u2014 a fused artifact is always produced and consumed by the\n// SAME parseman version. Do NOT add a \"legacy\"/dual-format read path for an older\n// recipe shape; it is dead code by design (fusedBody's version lock rejects a\n// cross-version artifact before it is ever read).\nexport type FirstSetSeg = { set: FirstSet; nullable: boolean; ref?: string }\nexport type FirstSetRecipe = { alts: FirstSetSeg[][] }\nexport function leadingFirstSetRecipe(p: Combinator<unknown>, seen: Set<Combinator<unknown>> = new Set()): FirstSetRecipe {\n const d = p._def as ParserDef\n // A NAMED rule reference is deferred to fuse time and NEVER recursed into here, so\n // it needs no cycle guard and must NOT be added to `seen`. Otherwise the SAME ref\n // object appearing in two sibling positions of a rule \u2014 e.g. `choice(sequence(not,\n // g.R), sequence(g.R, \u2026))`, where `g.R` is both arm-0's (nullable-prefix) tail and\n // arm-1's lead \u2014 would hit the `seen` guard on its 2nd visit and return an EMPTY\n // recipe, silently dropping arm-1's first chars (an unsound FALSE-EXCLUDE: the\n // fused choice then gates that arm out and rejects valid input). This is handled\n // BEFORE the cycle guard precisely so a legit multi-occurrence ref is never mistaken\n // for a cycle. (Rule ref: first-set + chain-stop nullability both deferred to fuse;\n // `nullable: false` = \"not forced skippable\" \u2014 a wrapping optional/many forces true.)\n if (d.tag === 'lazy') {\n const name = (p as unknown as { _ruleName?: string })._ruleName\n if (name !== undefined) return { alts: [[{ set: empty(), nullable: false, ref: name }]] }\n }\n // PATH-BASED cycle guard: `seen` holds only the combinators on the CURRENT recursion\n // path (ancestors), added on entry and removed on exit (the `finally` below). A\n // genuine self-cycle (a node reachable from itself through the leading structure)\n // returns an empty chain, but a node SHARED across SIBLING / DAG positions \u2014 e.g. an\n // inlined `const term = node(\u2026)` used in several arms \u2014 is recomputed fresh instead\n // of being mistaken for a cycle and silently dropped (which would under-approximate\n // its arm's first-set into a FALSE-EXCLUDE). A global visited-set would conflate the\n // two; only ancestors on the current path are true cycles.\n if (seen.has(p)) return { alts: [[]] }\n seen.add(p)\n const rec = (c: Combinator<unknown>): FirstSetRecipe => leadingFirstSetRecipe(c, seen)\n const seg = (set: FirstSet, nullable: boolean): FirstSetSeg => ({ set, nullable })\n // Force every segment of a recipe to nullable \u2014 used for `optional`/`many`, which\n // are skippable as a whole, so the leading chain must be able to continue PAST\n // them to a following term (and a wrapped rule REF must not stop the chain even if\n // it resolves non-nullable \u2014 the optional can omit it).\n const forceNullable = (r: FirstSetRecipe): FirstSetRecipe =>\n ({ alts: r.alts.map(alt => alt.map(s => ({ ...s, nullable: true }))) })\n // Collapse a multi-alternative term (an inner choice) reached inside a sequence\n // chain into ONE segment. If any alternative's leading run holds a rule REF, its\n // real first chars are only known at fuse time and can't be carried in a linear\n // chain, so widen to `any` (sound superset); otherwise union the concrete sets.\n const collapse = (r: FirstSetRecipe, nullable: boolean): FirstSetSeg => {\n let set: FirstSet = empty()\n let hasRef = false\n for (const alt of r.alts) {\n for (const s of alt) { if (s.ref !== undefined) hasRef = true; set = union(set, s.set); if (!s.nullable) break }\n }\n return seg(hasRef ? any() : set, nullable)\n }\n const compute = (): FirstSetRecipe => {\n switch (d.tag) {\n case 'lazy': {\n // Named lazies (rule refs) are handled above, before the cycle guard. An\n // UNNAMED lazy is an inline thunk \u2014 recurse into it (cycle-guarded by `seen`).\n try { return rec(d.thunk()) } catch { return { alts: [[seg(any(), false)]] } }\n }\n case 'literal': case 'regex': case 'keywords': case 'routed':\n return { alts: [[seg(p._meta.firstSet, matchesEmpty(p))]] }\n case 'choice': {\n // Alternatives union: concat every arm's chains.\n const alts: FirstSetSeg[][] = []\n for (const arm of d.parsers) alts.push(...rec(arm).alts)\n return { alts }\n }\n case 'dispatch':\n return rec(d.selector)\n case 'sequence': {\n // One ordered chain through the nullable prefix, stopping at (and including)\n // the first non-nullable term \u2014 same rule as `sequenceFirstSet`. A leading\n // zero-width assertion (`not`) contributes nothing but is nullable (keep\n // scanning past it). A multi-alt term is collapsed to keep the chain linear.\n const chain: FirstSetSeg[] = []\n for (const term of d.parsers) {\n if (!isZeroWidthAssertion(term)) {\n const tr = rec(term)\n if (tr.alts.length === 1) chain.push(...tr.alts[0]!)\n else chain.push(collapse(tr, matchesEmpty(term)))\n }\n if (!matchesEmpty(term)) return { alts: [chain] }\n }\n return { alts: [chain] }\n }\n // `many`/`optional` are skippable as a whole \u2192 their leading chars start the\n // sequence but the chain must continue past them (force nullable). `oneOrMore`\n // requires at least one repetition, so it is NOT made nullable here.\n case 'many': case 'optional':\n return forceNullable(rec(d.parser))\n case 'oneOrMore': case 'transform': case 'label':\n case 'field': case 'trivia': case 'token': case 'leaf': case 'node': case 'grammar': case 'expect':\n return rec(d.parser)\n case 'sepBy': return rec(d.parser)\n case 'skip': return rec(d.main)\n // not / scanTo / guard / withCtx / recover / unknown \u2192 shallow set (safe).\n default: return { alts: [[seg(p._meta.firstSet, matchesEmpty(p))]] }\n }\n }\n try { return compute() } finally { seen.delete(p) } // pop from the current path\n}\nimport { markUnusedValues } from './value-usage.ts'\nimport { buildBalancedInterior, type BalancedAmbient } from '../combinators/scanTo.ts'\nimport { buildGrammarPlan, type GrammarCoveragePlan } from './grammar-coverage-ids.ts'\nimport { analyzeLabeledTrivia } from '../cst/trivia-kinds.ts'\nimport {\n analyzeLabeledScannableRun,\n analyzeTriviaFastPath,\n buildFastTriviaFnDecl,\n buildLabeledRegexTriviaFnDecl,\n buildLabeledRuntimeTriviaFnDecl,\n buildLabeledScannableTriviaFnDecl,\n labeledTriviaRegexArms,\n} from './trivia-fast-path.ts'\nimport { scanShapeFromRegex, parseClassRanges, emitShapeMatch, foldEq, type ScanShape, type Mint } from './scannable-run.ts'\nimport { emitScannableTerminal } from './scannable-terminal.ts'\nimport { analyzeMkInlineBuild, emitInlineMkNodeExpr } from './inline-build.ts'\nimport { buildReadsChildren, buildReadsRaw, buildReadsTrivia, buildReadsState } from './build-arity.ts'\nimport { buildReadsFields, parserEnablesTriviaCapture, parserHasOwnFields, parserHasTriviaSite } from './fields.ts'\nimport {\n isDispatchTailOnlyTransform,\n transformFnSource,\n tryInlineUnaryTransform,\n tryInlineDestructureTransform,\n} from './inline-callback.ts'\nimport { annotateSpan, normalizeLineIndex, recordLineRange } from './line-index.ts'\nimport { collectGrammarReflection, type GrammarReflection } from '../cst/reflection.ts'\nimport { beginCompileDegradationDrain } from './degradation.ts'\n\n/**\n * Emission-time constant folding for gate expressions.\n *\n * Several per-node gates are compile-time constants once a capability is not\n * compiled in (profiling is the motivating case: it is interpreted-mode only, so\n * every profiling gate is the literal `'false'` here). Building the ternary as a\n * string would leave `false ? undefined : []` in the artifact \u2014 correct, but it\n * is emitted once per node, and a real grammar has thousands of nodes. Folding\n * at emission keeps the artifact free of provably-dead branches instead of\n * relying on a downstream minifier that callers may not run.\n */\nfunction tern(cond: string, whenTrue: string, whenFalse: string): string {\n if (cond === 'false') return whenFalse\n if (cond === 'true') return whenTrue\n return `${cond} ? ${whenTrue} : ${whenFalse}`\n}\n\n/** Fold `!(cond)` when `cond` is a literal. */\nfunction notGate(cond: string): string {\n if (cond === 'false') return 'true'\n if (cond === 'true') return 'false'\n return `!(${cond})`\n}\n\n/** Fold `a || b` when either side is a literal. */\nfunction orGate(a: string, b: string): string {\n if (a === 'false') return b\n if (b === 'false') return a\n if (a === 'true' || b === 'true') return 'true'\n return `${a} || ${b}`\n}\n\n/** Fold `a && b` when either side is a literal. */\nfunction andGate(a: string, b: string): string {\n if (a === 'false' || b === 'false') return 'false'\n if (a === 'true') return b\n if (b === 'true') return a\n return `${a} && ${b}`\n}\n\n/**\n * Runtime prelude helper for the structural-node capture gate. Answers \"does the\n * injected `_ctx.build` host read its (n+1)th positional arg?\" \u2014 `.length` alone\n * under-counts with rest/default params and can't see through a bound fn, so a\n * rest/default param or an `arguments` reference forces full capture (output-safe).\n * Plain positional and bound-native hosts (the common case) trust `.length`.\n * Emitted (memoized on `_ctx._pmCapTL`/`_pmCapST`) wherever a structural node()\n * arity-gates host capture; shared, un-namespaced, mirrors `_EMPTY_TL` placement.\n */\nexport const HOST_READS_DECL =\n 'const _hostReads = (b, n) => { if (b === undefined) return false; let s; try { s = Function.prototype.toString.call(b) } catch (e) { return true } if (/\\\\barguments\\\\b/.test(s)) return true; const m = /^[^(]*\\\\(([\\\\s\\\\S]*?)\\\\)/.exec(s); if (m && /\\\\.\\\\.\\\\.|=/.test(m[1])) return true; return b.length > n }'\n\n/**\n * Raw-children coercion, hoisted out of every node site.\n *\n * The `rawChildren` entry for a produced value is either the value itself (when it\n * is already a tagged CST thing) or a synthesized leaf. Inlined, that test plus the\n * leaf literal is ~300 bytes emitted PER `node()` site \u2014 measured at 2.6% of\n * `example/css`, 7.1% of `probe/node-scale-32`, 11.2% of `probe/trivia-off`.\n *\n * Allocation behaviour is preserved exactly, which is why `span` is the last\n * parameter and may be absent:\n * - line-tracked grammars already hold their span in a local, so they pass it and\n * nothing extra is allocated;\n * - untracked grammars pass nothing and the `{ start, end }` literal is built\n * INSIDE, on the fallback branch only \u2014 exactly where the inline form built it.\n * Passing the literal as an argument instead would have allocated a span on the\n * fast path, which is the one thing this hoist must not do.\n */\nexport const RAW_ENTRY_DECL =\n 'const _rawEntry = (v, input, s, e, span) => (typeof v === \\'object\\' && v !== null && (v._tag === \\'node\\' || v._tag === \\'leaf\\' || v._tag === \\'parseError\\')) ? v : { _tag: \\'leaf\\', value: typeof v === \\'string\\' ? v : (typeof v === \\'object\\' && v !== null ? input.slice(s, e) : \\'\\'), span: span ?? { start: s, end: e } }'\n\nexport const LINE_TRACK_DECL =\n 'const _trackLines = (_ctx, input, start, end) => { const from = _ctx._lineScannedTo ?? 0; if (end <= from) return; for (let i = from; i < end; i++) if (input.charCodeAt(i) === 10) _ctx._lineStarts.push(i + 1); _ctx._lineScannedTo = end }'\n\nexport const LINE_SPAN_DECL =\n 'const _lineCol = (_ctx, offset) => { const starts = _ctx._lineStarts; let lo = 0, hi = starts.length - 1; while (lo < hi) { const mid = (lo + hi + 1) >> 1; if (starts[mid] <= offset) lo = mid; else hi = mid - 1 } return [lo + 1, offset - starts[lo] + 1] }\\n'\n + 'const _spanLines = (_ctx, start, end) => { const s = _lineCol(_ctx, start), e = _lineCol(_ctx, end); return { start, end, startLine: s[0], startColumn: s[1], endLine: e[0], endColumn: e[1] } }'\n\n// ---------------------------------------------------------------------------\n// Regex-lowering diagnostics\n//\n// A regex terminal \"lowers\" when `scanShapeFromRegex` recognizes it and it emits\n// a tight `charCodeAt` scan loop. When it can't, emitRegex falls back to a real\n// `RegExp.exec` call \u2014 correct, but slower. Compilation is single-module and\n// synchronous, so a module-level capture sink (opened per transform, drained\n// after) records the un-lowered patterns without threading a field through every\n// Ctx and compile*() return. Keyed by regex source \u2192 one entry per unique pattern.\n// ---------------------------------------------------------------------------\nlet _loweringSink: Set<string> | null = null\n\n/** Begin capturing regexes that fall back to `RegExp.exec` (didn't lower). */\nexport function beginLoweringCapture(): void {\n _loweringSink = new Set()\n}\n\n/** Stop capturing and return the un-lowered regex sources seen since begin. */\nexport function endLoweringCapture(): string[] {\n const misses = _loweringSink ? [..._loweringSink] : []\n _loweringSink = null\n return misses\n}\n\n// ---------------------------------------------------------------------------\n// Inline-cap reporting\n//\n// When the inline-expansion cap binds it changes what gets emitted, which is a fact a\n// grammar author needs. It is deliberately NOT routed through `recordDegradation`: the\n// cap binding is INTENDED behaviour, and `PARSEMAN_DEGRADATION=error` turns any recorded\n// degradation into a thrown build failure \u2014 a consumer that asserts zero degradations\n// would start failing the moment a grammar grew past the budget, which is the opposite\n// of what a cap is for. It is also not printed during compile. It is collected here and\n// drained by whoever asks, so a separate diagnostic call can report it.\n// ---------------------------------------------------------------------------\n\n/** One emitted function whose inline budget was spent, and what it cost. */\nexport type InlineCapSite = {\n /** The emitted function that hit the budget. */\n fn: string\n /** Approximate combinator nodes in the ref body that became a call instead. */\n nodes: number\n}\n\nlet _inlineCapSink: InlineCapSite[] | null = null\n\n/** Begin collecting inline-cap sites. */\nexport function beginInlineCapCapture(): void {\n _inlineCapSink = []\n}\n\n/** Stop collecting and return the sites, in emission order (deterministic). */\nexport function endInlineCapCapture(): InlineCapSite[] {\n const sites = _inlineCapSink ?? []\n _inlineCapSink = null\n return sites\n}\n\n/**\n * One line per capped function, in the shape the degradation formatter uses so the two\n * read alike. Says exactly what happened and exactly what to do about it, because a\n * diagnostic that does neither is noise.\n */\nexport function formatInlineCapSites(sites: readonly InlineCapSite[], max: number): string[] {\n if (sites.length === 0) return []\n const byFn = new Map<string, { count: number; nodes: number }>()\n for (const s of sites) {\n const cur = byFn.get(s.fn)\n if (cur) { cur.count += 1; cur.nodes += s.nodes }\n else byFn.set(s.fn, { count: 1, nodes: s.nodes })\n }\n return [...byFn].map(([fn, { count, nodes }]) =>\n `[parseman] inline-cap ${fn}: inline budget of ${max} node(s) spent \u2014 `\n + `${count} single-use ref(s) totalling ~${nodes} node(s) became called functions instead of inline bodies. `\n + `Raise it with maxInline (or PARSEMAN_MAX_INLINE) if this rule is hot.`)\n}\n\n// ---------------------------------------------------------------------------\n// Codegen context\n// ---------------------------------------------------------------------------\ntype Ctx = {\n vars: number\n indent: number\n /** Coverage-only emission. Undefined for ordinary compile/macro output. */\n coverage?: { plan: GrammarCoveragePlan; entry?: Combinator<unknown> } | undefined\n activeCoverageRuleId?: string | undefined\n /** A generated named-rule wrapper emits failure after its `_pfail` boundary. */\n suppressCoverageFailure?: boolean | undefined\n /**\n * Compile-time recovery gate (opt-in via `compile(g, { recovery: true })`).\n * When off (default) NO recovery code is emitted \u2014 byte-identical output, and\n * `runtimeParsers` stays empty so macro-inlining is unaffected. When on, lists\n * emit a `_ctx._tolerant`-gated recovery branch and sequences publish an inferred\n * sync sentinel; the machinery is dormant unless the parse is run tolerant.\n */\n recovery?: boolean | undefined\n /**\n * Compile-time HOST MODE (opt-in via `compile(g, { hostMode: 'cst' })`), exactly the\n * shape of the `recovery` gate above.\n *\n * A `node()` with its OWN build is re-routed through a positioned-CST `ctx.build`\n * host when that host marks itself `_parsemanCstOutput` \u2014 that is what lets ONE\n * grammar serve eval-AST and positioned-CST/language-service modes. But `ctx.build`\n * arrives at PARSE time, so asking \"is a CST host installed?\" was a per-node property\n * chain on the hot path of every grammar, even though an eval-AST parse can never\n * take that branch. Measured, that per-node read is enough to move which large\n * compiled functions V8 elects to optimize.\n *\n * The mode is knowable at compile time, so it is decided there:\n * - `'ast'` (default) \u2014 direct builders own their result. The `_parsemanCstOutput`\n * ternary and the `_dcst` host probe are not emitted at all; capture follows the\n * builder's arity alone. Byte-identical to a build with no host machinery.\n * - `'cst'` \u2014 direct builders always build through the host, and the collectors the\n * host reads are captured unconditionally. No per-node probing either way.\n *\n * Misuse cannot be silent: driving an `'ast'` artifact with a positioned-CST host\n * throws (see `assertHostModeCompatible`) rather than producing a thin tree.\n */\n hostMode?: HostMode | undefined\n /**\n * Compile-time line-start tracking gate. When false/undefined, generated parser\n * source contains no line tracking helper, branches, or terminal call sites.\n * When true, successful newline-capable terminals append line starts to\n * `_ctx._lineStarts`; the driver normalizes once before span annotation.\n */\n lineTracking?: boolean | undefined\n /** Regex declarations hoisted to module scope */\n regexDecls: string[]\n /** Dedup map: \"source/flags\" \u2192 variable name (_re0 etc.) */\n regexMap: Map<string, string>\n /** Frozen constant expected-set arrays hoisted to module scope (_fx0 etc.) */\n expectedDecls: string[]\n /** Dedup map: array source \u2192 hoisted const name */\n expectedMap: Map<string, string>\n /** Map functions that need to be captured at compile time */\n mapFns: Array<(v: unknown, span: { start: number; end: number }) => unknown>\n /**\n * Source text of each map function, captured in lockstep with `mapFns`\n * (parallel array). Populated from `def.fnSrc` when present \u2014 lets the macro\n * inline transform callbacks in codegen-traversal order without a fragile\n * pre-accumulated positional array. `null` entries mean the source was not\n * available (interpreter/compile() path with no macro source).\n */\n mapFnSrcs: Array<string | null>\n /** Runtime parser fallbacks (for unknown/_def-less parsers) */\n runtimeParsers: Array<Combinator<unknown>>\n /** Whether any node() elided trivia capture and needs the shared frozen empty log. */\n needsEmptyTl?: boolean | undefined\n /** Whether any structural node() arity-gates host capture and needs the `_hostReads` helper. */\n needsHostReads?: boolean | undefined\n needsRawEntry?: boolean | undefined\n /** Whether any emitted terminal needs the dynamic `_trackLines` helper. */\n needsLineTrack?: boolean | undefined\n /** Whether generated code materializes line/column fields into span objects. */\n needsLineSpan?: boolean | undefined\n /** Set when a DIRECT builder's positioned-CST branch was omitted (host mode 'ast'). */\n hostBranchElided?: boolean | undefined\n /** Lazy/ref parsers and trivia helpers: parser identity \u2192 generated function name */\n namedParsers: Map<Combinator<unknown>, string>\n /**\n * Rule-map composition (linkable form): the `ref` placeholder for each named\n * rule \u2192 its canonical `_r_<Name>` function name. When a `lazy`/`ref` in\n * `emitLazy` is one of these, it is emitted once as `_r_<Name>` (never inlined,\n * so it stays addressable/overridable by name) and siblings call it by that\n * name \u2014 so the whole map fuses into one scope with direct local calls. Unset\n * for single-combinator `compile()` (no rule map \u2192 today's `_pfN` naming).\n */\n ruleNames?: Map<Combinator<unknown>, string> | undefined\n /**\n * Namespace prefix for HOISTED closure-level names (`_re`, `_fx`, `_pf`, `_mf`,\n * `_build`) so two independently-compiled rule maps fuse into one scope without\n * colliding (the linkable form). Empty by default \u2192 byte-identical output.\n * Function-local vars (`_v`/`_e`/\u2026) are per-scope and never namespaced; the\n * sentinel protocol (`_NAMED_FN_*`), `_EMPTY_TL` are SHARED across\n * fused packages (a namespaced sentinel would break cross-package calls) and so\n * are also left un-prefixed; `_r_<Name>` is the composition surface (intended\n * collision = override) and is never prefixed.\n */\n ns?: string | undefined\n /**\n * Linkable (compose) mode: a `choice` arm that is a named rule REF must not bake\n * an inline first-set dispatch guard \u2014 the referenced rule can be overridden at\n * fuse time, changing its first-set. Instead emit a `/*@FS:rule:codevar@*\u200B/true`\n * placeholder that fusedBody() substitutes with the WINNING rule's first-set\n * condition (or leaves `true` = always-try when unknown). Off for monolithic\n * compile() / compileRuleMap where rules are final.\n */\n deferFirstSetRefs?: boolean | undefined\n /** Generated function declaration strings, prepended before the main body */\n namedFnDecls: string[]\n /** Active trivia parser (set by grammar() wrappers, cleared on exit) */\n activeTrivia?: Combinator<unknown> | undefined\n /**\n * Active grammar-level ambient scan-skip (from `rules({ scanSkip })`), seeded at\n * the grammar-seed sites alongside `activeTrivia`. `emitScanTo` bakes it (with\n * `activeTrivia`) in front of a scan's per-call skip list so the compiled scan\n * matches the interpreter's `resolveScanSkip`.\n */\n activeScanSkip?: Combinator<unknown>[] | undefined\n /**\n * The set of balanced() combinators whose ambient interior is CURRENTLY being\n * rebuilt (the active rebuild stack). A precise, identity-keyed cycle guard: the\n * ambient rebuild is suppressed ONLY when re-entering a balanced already on this\n * stack (the true self-cycle \u2014 a balanced that is a MEMBER of its own\n * `activeScanSkip`), which then emits in its eager (non-ambient) form. A NESTED\n * DIFFERENT balanced (not on the stack) still gets its own ambient rebuild, so it\n * keeps skipping ambient opaque units \u2014 matching the interpreter. Entries are\n * added on rebuild entry and removed on exit (finally). `activeScanSkip` is fixed\n * within one rebuild chain, so keying on the balanced identity is precise.\n */\n balancedRebuildStack?: Set<Combinator<unknown>> | undefined\n /** Label table from grammar trivia for default ParseContext. */\n triviaKindLabels?: readonly string[] | undefined\n /** Whether grammar-level trivia was built by `classifiedTrivia()`. */\n rootTriviaClassified?: true | undefined\n /**\n * Whether this compile contains any node() rule. When true, terminals emit a\n * `_ctx._cstLeaves` capture and trivia skips capture trivia tokens \u2014 flowing\n * through `_ctx` so capture crosses named-function (ref) boundaries correctly.\n * When false (no node() anywhere) NO capture code is emitted, so non-CST\n * grammars compile byte-identically to before.\n */\n capturing?: boolean | undefined\n /** Inside the trivia-capture fn: terminals emit CSTTrivia tokens, not leaves. */\n capAsTrivia?: boolean | undefined\n /**\n * Set on a transient probe ctx (e.g. scanTo's `capturing: false` sentinel/skip\n * probe) where emitted code must have NO capture side effects. Suppresses\n * shared-combinator hoisting so a probe never defines \u2014 nor reuses \u2014 a named\n * function compiled in the surrounding capturing context (whose runtime-gated\n * `_cstLeaves` push would fire during the probe).\n */\n noHoist?: boolean | undefined\n /**\n * Inline-expansion cap. See {@link INLINE_MAX_NODES}. `inlineMax` is the per-emitted-\n * function budget in approximate combinator nodes; `inlineLeft` is what remains of it\n * inside the function currently being emitted. Both are plain numbers derived from the\n * grammar and the configured cap \u2014 nothing here reads a clock, a map iteration order,\n * or the environment at emit time, so two compiles of one grammar make the same\n * decisions in the same order.\n */\n inlineMax: number\n inlineLeft: number\n /** Name of the emitted function currently being filled \u2014 reported when the cap binds. */\n currentFnName?: string | undefined\n /** Trivia parser \u2192 name of its capturing variant fn (separate from namedParsers). */\n triviaCaptureNames: Map<Combinator<unknown>, string>\n /**\n * Trivia parser \u2192 name of its fast number-returning variant fn (non-capturing\n * mode). Returns the new position directly instead of a {ok,value,span} object,\n * eliminating two object allocations per trivia skip.\n */\n triviaFnNames: Map<Combinator<unknown>, string>\n /** node() build functions captured at compile time (parallel to buildSrcs). */\n buildFns: Array<(children: ReadonlyArray<unknown>, fields: FieldMap | undefined, span: { start: number; end: number }, raw: ReadonlyArray<unknown>, triviaLog: readonly number[], state: unknown) => unknown>\n /** Source text of each build fn (set from def.buildSrc; null when unavailable). */\n buildSrcs: Array<string | null>\n /**\n * When set, `failStmt` emits `break <label>` instead of `return { ok: false }`.\n * Used by emitFallible to let labeled blocks act as the failure boundary.\n */\n failLabel?: string | undefined\n /**\n * Whether a leaf failure should record its payload into `_ctx._fe`/`_ctx._fx`\n * for an enclosing reader (node/choice/ref/withCtx/runtime) to propagate.\n * Swallowers (optional, many/sepBy loop bodies, not) set this false around the\n * sub-parse whose failure they discard, so the hot path pays nothing. Default\n * true (safe: always record). Only meaningful together with `failLabel`.\n */\n recordFail: boolean\n /**\n * sharedPrefix strategy: leading-terminal combinator instance \u2192 the once-computed\n * value/end variable names to REPLAY at its emit site (instead of re-scanning).\n * Registered by emitSharedPrefix around the arm-loop emission and cleared after,\n * so it is only active for the arms of a single shared-prefix choice. Undefined on\n * every other path \u2192 no interception, byte-identical output.\n */\n replayPrefix?: Map<Combinator<unknown>, { valVar: string; endVar: string }> | undefined\n /**\n * Active dispatch selector for an inlined `routed()` site. Branches that cross\n * generated function boundaries still use `_ctx._routed`; inlined branches can\n * read these locals directly and avoid the object write/read/restore round trip.\n */\n routedLocal?: { valueVar: string; startVar: string; endVar: string } | undefined\n /**\n * Precomputed by analyzeLazyUsage() before codegen starts. emitLazy consults\n * this to inline a single-use, non-recursive ref directly at its call site\n * instead of hoisting it into a named function. Undefined when compile()\n * hasn't run the pre-pass (should not happen in practice \u2014 always set in\n * compile() \u2014 but kept optional so emitLazy degrades to \"always named\" if\n * ever invoked without it, e.g. future direct unit tests of emitLazy).\n */\n lazyUsage?: {\n counts: Map<Combinator<unknown>, number>\n recursive: Set<Combinator<unknown>>\n /** Approx subtree node count (lazy refs counted as 1 leaf), memoized. Gates\n * shared-combinator hoisting: only subtrees big enough that de-duplicating\n * them beats the added call cost are hoisted; tiny shared wrappers stay inline. */\n sizes: Map<Combinator<unknown>, number>\n }\n}\n\n/**\n * Selected-root retention is an opt-in grammar capability. Keep it entirely\n * out of generated code for ordinary trivia grammars: their scanner still gets\n * structural fast paths, but they have neither a category table nor a root log\n * to save, restore, or branch on.\n */\nfunction hasSelectedRootTrivia(ctx: Ctx): boolean {\n return ctx.rootTriviaClassified === true\n}\n\nfunction v(ctx: Ctx, prefix = '_v'): string { return `${prefix}${ctx.vars++}` }\nfunction ind(ctx: Ctx): string { return ' '.repeat(ctx.indent) }\n\n/** Namespace prefix for hoisted closure-level names (empty unless linkable). */\nfunction nsp(ctx: Ctx): string { return ctx.ns ?? '' }\n/** Hoisted map-fn array name (`_mf`, namespaced in linkable mode). */\nfunction mfRef(ctx: Ctx): string { return `${nsp(ctx)}_mf` }\n/** Hoisted build-fn array name (`_build`, namespaced in linkable mode). */\nfunction buildRef(ctx: Ctx): string { return `${nsp(ctx)}_build` }\n\n/** Re-indent emitted lines to an absolute depth while preserving relative nesting. */\nfunction reindentStmts(stmts: string[], targetLevels: number): string[] {\n const nonEmpty = stmts.filter(s => s.trim().length > 0)\n if (nonEmpty.length === 0) return stmts\n const minLeading = Math.min(...nonEmpty.map(s => s.length - s.trimStart().length))\n const targetPrefix = ' '.repeat(targetLevels)\n return stmts.map(s => (s.trim().length === 0 ? '' : targetPrefix + s.slice(minLeading)))\n}\n\nfunction failReturn(ctx: Ctx, expected: string, posExpr: string): string {\n if (ctx.lineTracking) return `return { ok: false, expected: [${expected}], span: ${emitSpanExpr(ctx, posExpr, posExpr)} }`\n return `return { ok: false, expected: [${expected}], span: { start: ${posExpr}, end: ${posExpr} } }`\n}\n\nfunction failReturnArr(ctx: Ctx, expectedArr: string, posExpr: string): string {\n if (ctx.lineTracking) return `return { ok: false, expected: ${expectedArr}, span: ${emitSpanExpr(ctx, posExpr, posExpr)} }`\n return `return { ok: false, expected: ${expectedArr}, span: { start: ${posExpr}, end: ${posExpr} } }`\n}\n\nfunction committedReturnArr(ctx: Ctx, expectedArr: string, posExpr: string): string {\n if (ctx.lineTracking) return `return { ok: false, expected: [...${expectedArr}], span: ${emitSpanExpr(ctx, posExpr, posExpr)}, committed: true }`\n return `return { ok: false, expected: [...${expectedArr}], span: { start: ${posExpr}, end: ${posExpr} }, committed: true }`\n}\n\n/**\n * Hoist a COMPILE-TIME-CONSTANT expected-set array to a shared module-level\n * const and return its variable name. Leaf failures (literal, regex, keyword,\n * not, \u2026) have a fixed expected set, so recording it on the hot failure path\n * must NOT allocate a fresh array every time \u2014 a choice arm that misses or a\n * many/sepBy loop that terminates hits this on essentially every token. We store\n * a reference to the shared array instead (one pointer write, zero allocation).\n *\n * The shared array is NEVER mutated in place by generated code, and every path\n * that surfaces `_ctx._fx` as a user-facing ParseResult copies it first (see\n * `resultFromRecorded` / the dynamic direct-return in `failArrBody`), so the\n * public `expected` array stays fresh & independent. (We deliberately do NOT\n * `Object.freeze` it: a user grammar may define a rule named `Object`, which \u2014\n * once inlined as a local \u2014 would shadow the global and break the freeze call.)\n */\nfunction hoistExpected(ctx: Ctx, constArrSource: string): string {\n let name = ctx.expectedMap.get(constArrSource)\n if (name === undefined) {\n name = `${nsp(ctx)}_fx${ctx.expectedDecls.length}`\n ctx.expectedDecls.push(`const ${name} = ${constArrSource}`)\n ctx.expectedMap.set(constArrSource, name)\n }\n return name\n}\n\n/**\n * Compiled mirror of the interpreter's `failAt` (probe.ts): a `_ctx._probe`-gated\n * furthest-failure update emitted at leaf-fail sites when IDE support is compiled in\n * (`ctx.recovery`). A deeper failure replaces the best; a tie MERGES expected arrays\n * (so choice arms aggregate their alternatives). Fires even inside swallowers\n * (`recordFail` off) \u2014 a completion's deepest failure is often inside an optional/\n * many. Dormant unless `completionsAt` set `_ctx._probe`, so a normal/tolerant parse\n * pays one property read per leaf fail. Empty (no side effects) when recovery is off.\n */\nfunction probeUpdate(ctx: Ctx, expectedArr: string, posExpr: string, constant = true): string {\n if (!ctx.recovery) return ''\n const fx = constant ? hoistExpected(ctx, expectedArr) : expectedArr\n const pb = v(ctx, '_pb')\n return `if (_ctx._probe !== undefined && ${posExpr} <= _ctx._probe.offset) { const ${pb} = _ctx._probe.best; if (${pb} === null || ${posExpr} > ${pb}.span.start) _ctx._probe.best = { ok: false, expected: [...${fx}], span: { start: ${posExpr}, end: ${posExpr} } }; else if (${posExpr} === ${pb}.span.start) _ctx._probe.best = { ok: false, expected: [...${pb}.expected, ...${fx}], span: { start: ${posExpr}, end: ${posExpr} } } } `\n}\n\nfunction failBody(ctx: Ctx, expected: string, posExpr: string): string {\n // Record the failure payload before breaking so an enclosing composite\n // construct can propagate this (deepest) failure verbatim \u2014 parity with the\n // interpreter, which returns the inner failure result. Recording is skipped\n // when no consumer will read it (see `ctx.recordFail`): swallowers like\n // optional/many/sepBy/not never inspect `_ctx._fx`, so a leaf failing inside\n // them just breaks \u2014 the hot path (loop terminations, first-arm misses) pays\n // nothing. The direct-return path is the final answer and needs no recording.\n const probe = probeUpdate(ctx, `[${expected}]`, posExpr)\n const trace = ctx.activeCoverageRuleId === undefined ? '' : `_ctx._grammarTrace?.write({ id: ${JSON.stringify(ctx.activeCoverageRuleId)}, phase: 'failure', offset: ${posExpr} }); `\n if (ctx.failLabel) {\n if (!ctx.recordFail) return probe ? `{ ${probe}${trace}break ${ctx.failLabel} }` : trace ? `{ ${trace}break ${ctx.failLabel} }` : `break ${ctx.failLabel}`\n return `{ ${probe}_ctx._fe = ${posExpr}; _ctx._fx = ${hoistExpected(ctx, `[${expected}]`)}; ${trace}break ${ctx.failLabel} }`\n }\n return probe + trace + failReturn(ctx, expected, posExpr)\n}\n\n/**\n * Like {@link failBody} but the caller already has an array source. When\n * `constant` (the default), the array is hoisted+frozen (zero-alloc hot path).\n * Pass `constant: false` for dynamic sources (e.g. `_ctx._fx`, a runtime concat)\n * that must be assigned verbatim.\n */\nfunction failArrBody(ctx: Ctx, expectedArr: string, posExpr: string, constant = true): string {\n const probe = probeUpdate(ctx, expectedArr, posExpr, constant)\n const trace = ctx.activeCoverageRuleId === undefined ? '' : `_ctx._grammarTrace?.write({ id: ${JSON.stringify(ctx.activeCoverageRuleId)}, phase: 'failure', offset: ${posExpr} }); `\n if (ctx.failLabel) {\n if (!ctx.recordFail) return probe ? `{ ${probe}${trace}break ${ctx.failLabel} }` : trace ? `{ ${trace}break ${ctx.failLabel} }` : `break ${ctx.failLabel}`\n const fx = constant ? hoistExpected(ctx, expectedArr) : expectedArr\n return `{ ${probe}_ctx._fe = ${posExpr}; _ctx._fx = ${fx}; ${trace}break ${ctx.failLabel} }`\n }\n // Direct-return (no enclosing fail label). A dynamic source may reference the\n // shared frozen `_ctx._fx`; copy it so the (possibly frozen) constant never\n // escapes into a user-facing result. Constant sources are inline literals.\n if (!constant) return `${probe}${trace}return { ok: false, expected: [...${expectedArr}], span: ${ctx.lineTracking ? emitSpanExpr(ctx, posExpr, posExpr) : `{ start: ${posExpr}, end: ${posExpr} }`} }`\n return probe + trace + failReturnArr(ctx, expectedArr, posExpr)\n}\n\n/** Build a ParseResult from the recorded deepest failure, copying `_fx` so the\n * shared frozen array never escapes into user-facing results. */\nfunction resultFromRecorded(ctx: Ctx, feExpr = '_ctx._fe', fxExpr = '_ctx._fx'): string {\n const spanExpr = ctx.lineTracking ? emitSpanExpr(ctx, feExpr, feExpr) : `{ start: ${feExpr}, end: ${feExpr} }`\n return `return { ok: false, expected: [...${fxExpr}], span: ${spanExpr}, ...(_ctx._fc ? { committed: true } : {}) }`\n}\n\nfunction committedFailBody(ctx: Ctx, expectedArr = '_ctx._fx', posExpr = '_ctx._fe'): string {\n if (ctx.failLabel) {\n if (!ctx.recordFail) return `{ _ctx._fc = true; break ${ctx.failLabel} }`\n return `{ _ctx._fc = true; _ctx._fe = ${posExpr}; _ctx._fx = ${expectedArr}; break ${ctx.failLabel} }`\n }\n return committedReturnArr(ctx, expectedArr, posExpr)\n}\n\n/**\n * Propagate the already-recorded deepest failure (`_ctx._fe`/`_ctx._fx`) rather\n * than synthesizing a coarse `[\"node\"]`-style placeholder. Used by composite\n * constructs whose interpreter counterpart returns the inner failure verbatim\n * (node, ref/lazy, withCtx, runtime fallback). `srcCtx` is the ctx var holding\n * the payload (`_ctx`, or a spread child ctx for withCtx).\n */\nfunction propagateFailBody(ctx: Ctx, srcCtx = '_ctx'): string {\n if (srcCtx !== '_ctx') {\n // withCtx ran on a spread child ctx; copy its recorded failure back (only\n // when a consumer will read it) before propagating.\n if (ctx.failLabel) {\n if (!ctx.recordFail) return `break ${ctx.failLabel}`\n return `{ _ctx._fe = ${srcCtx}._fe; _ctx._fx = ${srcCtx}._fx; _ctx._fc = ${srcCtx}._fc; break ${ctx.failLabel} }`\n }\n return `{ _ctx._fe = ${srcCtx}._fe; _ctx._fx = ${srcCtx}._fx; _ctx._fc = ${srcCtx}._fc; ${resultFromRecorded(ctx)} }`\n }\n // Same-ctx: `_ctx._fx` already holds the deepest failure \u2014 just break/return.\n if (ctx.failLabel) return `break ${ctx.failLabel}`\n return resultFromRecorded(ctx)\n}\n\nfunction emitIfFail(ctx: Ctx, cond: string, body: string): string[] {\n return [\n `${ind(ctx)}if (${cond}) {`,\n `${ind(ctx)} ${body}`,\n `${ind(ctx)}}`,\n ]\n}\n\nfunction emitElseFail(ctx: Ctx, body: string): string[] {\n return [\n `${ind(ctx)}else {`,\n `${ind(ctx)} ${body}`,\n `${ind(ctx)}}`,\n ]\n}\n\n/** Sentinel + end-position slot for compiled `rules()` / `withCtx` named fns. */\nconst NAMED_FN_FAIL = '_pfFail'\nconst NAMED_FN_END = '_pfEnd'\n\nfunction namedFnPrelude(): string[] {\n return [`const ${NAMED_FN_FAIL} = {}`, `let ${NAMED_FN_END}`]\n}\n\nfunction pushNamedFnDecl(\n ctx: Ctx,\n fnName: string,\n bodyStmts: string[],\n valueVar: string,\n endVar: string,\n failureRuleId?: string,\n): void {\n // Success path returns the value DIRECTLY (setting the shared end slot first);\n // failure breaks `_pfail` and falls through to the sentinel return. No `_pfok`\n // flag / post-block check \u2014 fewer ops on the hot (matched) path, and smaller.\n ctx.namedFnDecls.push([\n `function ${fnName}(input, _pos, _ctx) {`,\n ` _pfail: {`,\n ...reindentStmts(bodyStmts, 2),\n ` ${NAMED_FN_END} = ${endVar}`,\n ` return ${valueVar}`,\n ` }`,\n ...(failureRuleId === undefined\n ? []\n : [` _ctx._grammarTrace?.write({ id: ${JSON.stringify(failureRuleId)}, phase: 'failure', offset: _ctx._fe ?? _pos })`]),\n ` return ${NAMED_FN_FAIL}`,\n `}`,\n ].join('\\n'))\n}\n\nfunction emitNamedFnCall(ctx: Ctx, fnName: string, pos: string): ER {\n const vv = v(ctx, '_pfv')\n const ev = v(ctx, '_pfe')\n return {\n stmts: [\n `${ind(ctx)}const ${vv} = ${fnName}(input, ${pos}, _ctx)`,\n // ref/lazy returns the inner failure verbatim \u2014 propagate the recorded\n // deepest failure (shares _ctx with the named fn), not a \"parser\" label.\n ...emitIfFail(ctx, `${vv} === ${NAMED_FN_FAIL}`, propagateFailBody(ctx)),\n `${ind(ctx)}const ${ev} = ${NAMED_FN_END}`,\n ],\n valueVar: vv,\n endVar: ev,\n }\n}\n\n/**\n * Emit a spanned-leaf capture into the active node()'s collectors (via _ctx,\n * matching the interpreter). Emitted only in a capturing compile; the runtime\n * `if (_ctx._cstLeaves)` guard means terminals outside a node() pay one\n * predictable branch and nothing else.\n */\nfunction emitLeafCapture(ctx: Ctx, valExpr: string, startExpr: string, endExpr: string): string[] {\n if (!ctx.capturing) return []\n if (ctx.capAsTrivia) return []\n const i = ind(ctx)\n const lf = v(ctx, '_lf')\n const spanExpr = emitSpanExpr(ctx, startExpr, endExpr)\n // Gate on EITHER collector: a structural node whose host reads only\n // `rawChildren` (see `_parsemanReadsChildren`) elides `_cstLeaves`/`_cstChildren`\n // but still needs its terminals in `_cstRawChildren`. When both are present the\n // single leaf object is shared by both pushes \u2014 identical to the prior output.\n return [\n `${i}if (_ctx._cstLeaves || _ctx._cstRawChildren) {`,\n `${i} const ${lf} = { _tag: 'leaf', value: ${valExpr}, span: ${spanExpr} }`,\n `${i} if (_ctx._cstLeaves) _ctx._cstLeaves.push(${lf})`,\n `${i} if (_ctx._cstRawChildren) _ctx._cstRawChildren.push(${lf})`,\n `${i}}`,\n ]\n}\n\nfunction emitSpanExpr(ctx: Ctx, startExpr: string, endExpr: string): string {\n if (!ctx.lineTracking) return `{ start: ${startExpr}, end: ${endExpr} }`\n ctx.needsLineSpan = true\n return `_spanLines(_ctx, ${startExpr}, ${endExpr})`\n}\n\nfunction emitLineTrack(ctx: Ctx, startExpr: string, endExpr: string): string[] {\n if (!ctx.lineTracking) return []\n ctx.needsLineTrack = true\n return [`${ind(ctx)}_trackLines(_ctx, input, ${startExpr}, ${endExpr})`]\n}\n\nfunction emitLiteralLineTrack(ctx: Ctx, startExpr: string, value: string): string[] {\n if (!ctx.lineTracking) return []\n const lineDeltas: number[] = []\n for (let i = 0; i < value.length; i++) {\n if (value.charCodeAt(i) === 10) lineDeltas.push(i + 1)\n }\n if (lineDeltas.length === 0) return []\n const fromV = v(ctx, '_ltFrom')\n const endExpr = value.length === 0 ? startExpr : `${startExpr} + ${value.length}`\n return [\n `${ind(ctx)}const ${fromV} = _ctx._lineScannedTo ?? 0`,\n `${ind(ctx)}if (${endExpr} > ${fromV}) {`,\n `${ind(ctx)} for (let i = ${fromV}; i < ${startExpr}; i++) if (input.charCodeAt(i) === 10) _ctx._lineStarts.push(i + 1)`,\n ...lineDeltas.map(delta => {\n const lineStart = `${startExpr} + ${delta}`\n return `${ind(ctx)} if (${lineStart} > ${fromV}) _ctx._lineStarts.push(${lineStart})`\n }),\n `${ind(ctx)} _ctx._lineScannedTo = ${endExpr}`,\n `${ind(ctx)}}`,\n ]\n}\n\nfunction ensureRegexDecl(ctx: Ctx, source: string, flags: string): string {\n const f = 'y' + flags.replace(/[gy]/g, '')\n const key = `${source}/${f}`\n let rName = ctx.regexMap.get(key)\n if (rName === undefined) {\n rName = `${nsp(ctx)}_re${ctx.regexDecls.length}`\n ctx.regexDecls.push(`const ${rName} = /${source}/${f}`)\n ctx.regexMap.set(key, rName)\n }\n return rName\n}\n\nfunction ensurePlainRegexDecl(ctx: Ctx, source: string, flags: string): string {\n const f = flags.replace(/[gy]/g, '')\n const key = `${source}/${f}`\n let rName = ctx.regexMap.get(key)\n if (rName === undefined) {\n rName = `${nsp(ctx)}_re${ctx.regexDecls.length}`\n ctx.regexDecls.push(`const ${rName} = ${new RegExp(source, f).toString()}`)\n ctx.regexMap.set(key, rName)\n }\n return rName\n}\n\n/**\n * When `cap` is truthy, also records `[start, end]` into `_ctx._triviaLog`, and\n * when `cap === 1` also records the CST insert index into `_ctx._cstTriviaLog`.\n * `cap === 2` is the public root-log-only path used by non-node run() entries.\n * One emitted function serves every skip/capture call site \u2014 no duplicate trivia\n * parser tree, no _tc wrapper call.\n */\nfunction ensureTriviaFn(ctx: Ctx): string {\n const trivia = ctx.activeTrivia!\n const existing = ctx.triviaFnNames.get(trivia)\n if (existing) return existing\n // Namespaced like every other hoisted name (`_re`/`_pf`/`_fx`): two fused pieces\n // each define their own `_tf0` (e.g. CSS block-only vs Less block+line trivia),\n // so without the ns prefix they collide in the fused scope and the wrong trivia\n // skipper wins. `nsp(ctx)` is '' for standalone output (byte-identical).\n const fnName = `${nsp(ctx)}_tf${ctx.triviaFnNames.size}`\n ctx.triviaFnNames.set(trivia, fnName)\n ctx.triviaCaptureNames.set(trivia, fnName)\n\n const labeledSpec = analyzeLabeledTrivia(trivia)\n\n // UNLABELED trivia: any scannable shape set \u2192 char-scan loop with a single\n // whole-run [start,end] capture (no per-arm kinds needed).\n if (!labeledSpec) {\n const fastShapes = analyzeTriviaFastPath(trivia)\n if (fastShapes) {\n ctx.namedFnDecls.push(buildFastTriviaFnDecl(fnName, fastShapes))\n return fnName\n }\n } else {\n // LABELED trivia: if every arm is scannable, the same char-scan loop with\n // per-chunk category capture. Recognition is structural; labels are data.\n // Otherwise fall to the regex/runtime kind-tracking loops.\n const labeledShapes = analyzeLabeledScannableRun(trivia)\n if (labeledShapes) {\n ctx.namedFnDecls.push(buildLabeledScannableTriviaFnDecl(fnName, labeledShapes))\n return fnName\n }\n\n const regexSpec = labeledTriviaRegexArms(trivia)\n if (regexSpec) {\n const reNames: string[] = []\n for (const arm of regexSpec.arms) {\n const def = arm.parser._def\n if (def.tag !== 'regex') break\n reNames.push(ensureRegexDecl(ctx, def.source, def.flags))\n }\n if (reNames.length === regexSpec.arms.length) {\n ctx.namedFnDecls.push(buildLabeledRegexTriviaFnDecl(fnName, regexSpec, reNames))\n return fnName\n }\n }\n\n const rpStart = ctx.runtimeParsers.length\n for (const arm of labeledSpec.arms) {\n ctx.runtimeParsers.push(arm.parser)\n }\n ctx.namedFnDecls.push(buildLabeledRuntimeTriviaFnDecl(fnName, labeledSpec, rpStart))\n return fnName\n }\n\n const savedIndent = ctx.indent\n const savedFailLabel = ctx.failLabel\n const savedTrivia = ctx.activeTrivia\n const savedScanSkip = ctx.activeScanSkip\n const savedCapAsTrivia = ctx.capAsTrivia\n ctx.indent = 2\n ctx.failLabel = '_triv'\n ctx.capAsTrivia = true // trivia terminals must not push into _cstLeaves\n ctx.activeTrivia = undefined // trivia parser must not skip trivia within itself\n ctx.activeScanSkip = undefined // nor consult ambient scan-skip within trivia\n const r = emit(trivia, ctx, '_pos')\n ctx.indent = savedIndent\n ctx.failLabel = savedFailLabel\n ctx.capAsTrivia = savedCapAsTrivia\n ctx.activeTrivia = savedTrivia\n ctx.activeScanSkip = savedScanSkip\n\n ctx.namedFnDecls.push([\n `function ${fnName}(input, _pos, _ctx, _cap) {`,\n ` let _e = _pos`,\n ` _triv: {`,\n ...reindentStmts(r.stmts, 2),\n ` _e = ${r.endVar}`,\n ` }`,\n ` if (_cap && _e > _pos) {`,\n ` if (_ctx._triviaLog !== undefined) _ctx._triviaLog.push(_pos, _e)`,\n ` if (_cap === 1 && _ctx._cstTriviaLog !== undefined && _ctx.captureTrivia) _ctx._cstTriviaLog.push(_pos, _e, _ctx._cstRawChildren ? _ctx._cstRawChildren.length : 0)`,\n ` }`,\n ` return _e`,\n `}`,\n ].join('\\n'))\n return fnName\n}\n\n/** Capturing trivia skip \u2014 same compiled fn as ensureTriviaFn, pass `_cap = 1`. */\nfunction ensureTriviaCaptureFn(ctx: Ctx): string {\n return ensureTriviaFn(ctx)\n}\n\n// ---------------------------------------------------------------------------\n// The result every emitter returns.\n// After the emitted stmts, `valueVar` holds the parsed value and `endVar`\n// holds the new position. On failure the emitter already emitted an early\n// `return failResult`.\n// ---------------------------------------------------------------------------\ntype ER = { stmts: string[]; valueVar: string; endVar: string }\ntype FallibleER = { stmts: string[]; okVar: string; valVar: string; endVar: string; mayCommit: boolean }\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\nexport function firstSetCond(codeVar: string, fs: FirstSet): string {\n if (fs.kind === 'any') return 'true'\n if (fs.kind === 'empty') return 'false'\n return fs.ranges.map(r =>\n r.lo === r.hi\n ? `${codeVar} === ${r.lo}`\n : `(${codeVar} >= ${r.lo} && ${codeVar} <= ${r.hi})`\n ).join(' || ')\n}\n\n// A first code point that keys a switch case is only worth enumerating when the\n// arm dispatches on a few DISCRETE points (keyword/operator first chars). A wide\n// range (a char-class arm like `[a-z]+`) would explode into dozens of `case`\n// labels, so those keep the if/else range-comparison form.\nconst SWITCH_RANGE_LIMIT = 4\nconst SWITCH_MAX_CASES = 48\nconst SWITCH_MIN_CASES = 3\n\n// Benchmark/test-only hook: force the `if/else if` disjoint-dispatch form so it\n// can be A/B'd against the `switch` jump table in the same process. Defaults to\n// off \u2014 production always uses planDisjointDispatch. See bench/codegen-ab.ts.\nlet _forceDisjointIf = false\nexport function __setForceDisjointIf(on: boolean): void { _forceDisjointIf = on }\n\n// Test/bench-only: force a `sharedPrefix` choice to compile as ordered `firstMatch`\n// (each arm re-scans the shared prefix), so the shared-once form can be A/B'd against\n// it in the same process. Defaults to off. See bench/shared-prefix-ab.ts.\nlet _forceNoSharedPrefix = false\nexport function __setForceNoSharedPrefix(on: boolean): void { _forceNoSharedPrefix = on }\n\n/**\n * Choose the dispatch form for a *disjoint* choice. Returns per-arm case code\n * points for a `switch` (jump table) when every arm keys off a small discrete\n * set, or `if` to keep the range-comparison `if/else if` chain. The arms are\n * pairwise-disjoint by construction, so each code point maps to exactly one arm.\n */\nfunction planDisjointDispatch(\n parsers: ReadonlyArray<Combinator<unknown>>,\n): { kind: 'switch'; cases: number[][] } | { kind: 'if' } {\n const cases: number[][] = []\n let total = 0\n for (const p of parsers) {\n const fs = p._meta.firstSet\n if (fs.kind !== 'ranges') return { kind: 'if' } // any/empty \u2192 no discrete keys\n const pts: number[] = []\n for (const r of fs.ranges) {\n if (r.hi - r.lo + 1 > SWITCH_RANGE_LIMIT) return { kind: 'if' }\n for (let cp = r.lo; cp <= r.hi; cp++) pts.push(cp)\n }\n total += pts.length\n if (total > SWITCH_MAX_CASES) return { kind: 'if' }\n cases.push(pts)\n }\n return total >= SWITCH_MIN_CASES ? { kind: 'switch', cases } : { kind: 'if' }\n}\n\n// \u2500\u2500 CST/trivia capture rollback: cheap when no buffer is active \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// The four capture buffers (`_cstLeaves`, `_cstRawChildren`, `_cstTriviaLog`,\n// `_triviaLog`) are usually all undefined on the hot path (a grammar with any\n// node() compiles with ctx.capturing=true, but at runtime most callers don't\n// request a CST \u2014 they only want the value). Reading `_x?.length ?? 0` four\n// times per fallible block \u2014 and emitFallible runs for every sequence term,\n// repeat item, optional, and choice arm \u2014 turned into a measurable de-opt\n// (compiled CSS regressed ~2.3\u00D7). We gate the whole save/restore on a single\n// boolean: when no buffer is live the marks are 0 and the restore is one test.\n//\n// Every restore below is emitted as `if (sink && sink.length !== mark) sink.length = mark`\n// \u2014 never the bare `sink.length = mark`. Setting an array's `length` is NOT a\n// plain field store: it goes through V8's length setter, which must consider\n// trimming the backing store, and it costs the same whether or not the value\n// changes. Rollbacks overwhelmingly restore a length that never moved (the\n// speculative branch captured nothing), so the compare is the common path and\n// the setter call is the rare one. `sink.length !== mark` is an in-object load\n// plus an integer compare.\n//\n// This is not a micro-tuning nicety. `not()`'s rollback (0.34.0, correct and\n// required) put six unconditional length stores on a probe that jess's Less\n// grammar executes ~600 times per KB: +32% parse time on benchmark.less.\n// Guarding the stores took that to +4%, and applying the same guard at ALL\n// ~3000 rollback sites made 0.34.0 12% FASTER than 0.33.0 on the same corpus.\n// Keep the guard when adding a rollback site.\n/** Body of a capture restore \u2014 resets each live buffer to its saved length. */\nfunction captureRestoreBody(ctx: Ctx, mL: string, mR: string, mTl: string, mLg: string | null, mF: string | null = null, mRootLg: string | null = null): string {\n const fieldRestore = mF ? `; if (_ctx._fields && _ctx._fields.length !== ${mF}) _ctx._fields.length = ${mF}` : ''\n const base = `if (_ctx._cstLeaves && _ctx._cstLeaves.length !== ${mL}) _ctx._cstLeaves.length = ${mL}; if (_ctx._cstRawChildren && _ctx._cstRawChildren.length !== ${mR}) _ctx._cstRawChildren.length = ${mR}; if (_ctx._cstTriviaLog && _ctx._cstTriviaLog.length !== ${mTl}) _ctx._cstTriviaLog.length = ${mTl}${fieldRestore}`\n // `_triviaLog` is the standalone diagnostic trivia log. The interpreter only\n // rewinds it on a failed *choice* arm (choice.ts), NOT on a failed sequence\n // term \u2014 a sequence returns the failure with earlier trivia still logged. To\n // stay byte-for-byte at parity with the interpreter, only rewind it where the\n // interpreter does (choice arms); sequence-term rollbacks (emitFallible) leave\n // it intact.\n const logRestore = mLg ? `; if (_ctx._triviaLog && _ctx._triviaLog.length !== ${mLg}) _ctx._triviaLog.length = ${mLg}` : ''\n const rootLogRestore = hasSelectedRootTrivia(ctx) && mRootLg ? `; if (_ctx._rootTriviaLog && _ctx._rootTriviaLog.length !== ${mRootLg}) _ctx._rootTriviaLog.length = ${mRootLg}` : ''\n return `${base}${logRestore}${rootLogRestore}`\n}\n\n/**\n * True when parsing `p` may push a capture (leaf/child/trivia) into the active\n * buffers and THEN fail, leaving partial state that an enclosing node() would\n * wrongly absorb. Used to decide whether a fallible block needs CST-rollback.\n *\n * Sound over-approximation: the ONLY constructs that capture-then-fail are\n * - a sequence whose non-final term captures before a later term can fail\n * - a sepBy/oneOrMore item-then-separator partial (handled by their own\n * dedicated rollback, so still covered conservatively here)\n * Atomic terminals (literal/regex/keywords/charClass/guard/not) fail without\n * having captured. node() buffers into a private sub-scope and discards it on\n * failure, so it never leaks. choice/firstMatch roll back each failed arm\n * internally. optional/many never \"fail\" with partial output. Delegating\n * wrappers (transform/label/grammar/withCtx/expect/skip) pass through to inner.\n */\nfunction mayLeavePartialCapture(p: Combinator<unknown>, seen: Set<Combinator<unknown>> = new Set()): boolean {\n if (seen.has(p)) return false\n seen.add(p)\n const d = p._def\n switch (d.tag) {\n // Atomic / non-capturing-then-failing: a failure happens before any push.\n case 'literal':\n case 'regex':\n case 'keywords':\n case 'guard':\n case 'not':\n // peek(): emitted under a non-capturing probe ctx and zero-width on both\n // outcomes, so it can never leave a partial capture behind.\n case 'peek':\n case 'trivia':\n case 'token':\n case 'leaf':\n case 'scanTo':\n case 'unknown':\n return false\n // node() captures into its own private buffers and rolls them back on\n // failure (emitNode restores _ctx.* and never pushes on the !ok path).\n case 'node':\n return false\n // choice/firstMatch already roll back each failed arm; on overall failure\n // nothing committed remains.\n case 'choice':\n return false\n case 'dispatch':\n return capturesLeaf(d.selector, seen) ||\n d.cases.some(x => mayLeavePartialCapture(x.parser, seen) || capturesLeaf(x.parser, seen)) ||\n (d.matchers ? d.matchers.some(x => mayLeavePartialCapture(x.parser, seen) || capturesLeaf(x.parser, seen)) : false) ||\n (d.otherwise ? mayLeavePartialCapture(d.otherwise, seen) || capturesLeaf(d.otherwise, seen) : false)\n case 'attempt':\n return false\n // optional never fails; many/oneOrMore only \"fail\" with zero captured items.\n case 'optional':\n case 'many':\n case 'oneOrMore':\n return false\n // sepBy emits its own per-iteration rollback in emitSepBy.\n case 'sepBy':\n return false\n // A sequence is the real case: an earlier capturing term followed by a term\n // that can fail leaves the earlier captures buffered.\n case 'sequence': {\n const parts = d.parsers\n // Only risky if >=2 terms and some non-final term can capture.\n if (parts.length < 2) return parts.some(x => mayLeavePartialCapture(x, seen))\n for (let i = 0; i < parts.length - 1; i++) {\n if (hasNodeDef(parts[i]!) || capturesLeaf(parts[i]!)) return true\n }\n return false\n }\n // Delegating wrappers: defer to the wrapped parser.\n case 'transform':\n case 'label':\n case 'field':\n case 'expect':\n case 'withCtx':\n case 'grammar':\n return mayLeavePartialCapture(d.parser, seen)\n case 'skip':\n return mayLeavePartialCapture(d.main, seen)\n case 'recover':\n return mayLeavePartialCapture(d.parser, seen)\n case 'lazy': {\n try { return mayLeavePartialCapture(d.thunk(), seen) } catch { return true }\n }\n // Unknown shapes: be safe and keep the rollback.\n default:\n return true\n }\n}\n\n/** True when `p` can report a committed failure through emitFallible's failure channel. */\nfunction mayCommitFailure(p: Combinator<unknown>, seen: Set<Combinator<unknown>> = new Set()): boolean {\n if (seen.has(p)) return false\n seen.add(p)\n const d = p._def\n switch (d.tag) {\n case 'dispatch':\n return true\n case 'choice':\n case 'sequence':\n return d.parsers.some(x => mayCommitFailure(x, seen))\n case 'many':\n case 'oneOrMore':\n case 'optional':\n case 'attempt':\n case 'transform':\n case 'label':\n case 'field':\n case 'grammar':\n case 'node':\n return mayCommitFailure(d.parser, seen)\n case 'sepBy':\n return mayCommitFailure(d.parser, seen) || mayCommitFailure(d.separator, seen)\n case 'skip':\n return mayCommitFailure(d.main, seen) || mayCommitFailure(d.skipped, seen)\n case 'token':\n case 'leaf':\n return mayCommitFailure(d.parser, seen)\n case 'withCtx':\n return mayCommitFailure(d.parser, seen)\n case 'scanTo':\n return mayCommitFailure(d.sentinel, seen) || d.skip.some(x => mayCommitFailure(x, seen))\n case 'lazy': {\n try { return mayCommitFailure(d.thunk(), seen) } catch { return true }\n }\n case 'unknown':\n return true\n default:\n return false\n }\n}\n\n/** True when `p` can push a leaf/node into the capture buffers on success. */\nfunction capturesLeaf(p: Combinator<unknown>, seen: Set<Combinator<unknown>> = new Set()): boolean {\n if (seen.has(p)) return false\n seen.add(p)\n const d = p._def\n switch (d.tag) {\n case 'literal':\n case 'regex':\n case 'keywords':\n case 'node':\n case 'token':\n case 'routed':\n case 'leaf':\n return true\n case 'not':\n case 'peek':\n case 'guard':\n case 'trivia':\n case 'unknown':\n return false\n case 'sequence':\n case 'choice':\n return d.parsers.some(x => capturesLeaf(x, seen))\n case 'dispatch':\n return capturesLeaf(d.selector, seen) ||\n d.cases.some(x => capturesLeaf(x.parser, seen)) ||\n (d.matchers ? d.matchers.some(entry => capturesLeaf(entry.parser, seen)) : false) ||\n (d.otherwise ? capturesLeaf(d.otherwise, seen) : false)\n case 'sepBy':\n return capturesLeaf(d.parser, seen) || capturesLeaf(d.separator, seen)\n case 'many':\n case 'oneOrMore':\n case 'optional':\n case 'attempt':\n case 'transform':\n case 'label':\n case 'field':\n case 'expect':\n case 'withCtx':\n case 'grammar':\n case 'recover':\n return capturesLeaf(d.parser, seen)\n case 'skip':\n return capturesLeaf(d.main, seen)\n case 'scanTo':\n return true\n case 'lazy': {\n try { return capturesLeaf(d.thunk(), seen) } catch { return true }\n }\n default:\n return true\n }\n}\n\n/**\n * Emit `inner` as a labeled block with flat result variables \u2014 no IIFE call,\n * no `{ ok, value, span }` object allocation. The returned stmts declare:\n * let ${okVar} = false, ${valVar}, ${endVar} = ${pos}\n * ${label}: { <inner stmts using break ${label} on failure>; capture success }\n * Callers read ${okVar} to branch on success/failure.\n */\nfunction emitFallible(\n inner: Combinator<unknown>,\n ctx: Ctx,\n pos: string,\n /**\n * When true, the caller DISCARDS this failure (optional/many/sepBy/not) \u2014 the\n * inner leaves need not record `_ctx._fx`, since nobody reads it. Suppresses\n * the hot-path failure bookkeeping for the sub-parse.\n */\n swallow = false,\n): FallibleER {\n const lbl = v(ctx, '_lbl')\n const okV = `${lbl}ok`\n const valV = `${lbl}v`\n const endV = `${lbl}e`\n\n const savedLabel = ctx.failLabel\n const savedIndent = ctx.indent\n const savedRecord = ctx.recordFail\n ctx.failLabel = lbl\n ctx.indent = savedIndent + 1\n if (swallow) ctx.recordFail = false\n const r = emit(inner, ctx, pos)\n ctx.failLabel = savedLabel\n ctx.indent = savedIndent\n ctx.recordFail = savedRecord\n\n const ind0 = ind(ctx)\n // In capturing mode, roll back any CST captures made by a FAILED attempt \u2014 a\n // sub-parser may match terminals (e.g. a sequence that consumes '[') and then\n // fail on a later term, breaking out with those leaves/trivia still buffered.\n // Without this they leak into the enclosing node()'s children. (The non-disjoint\n // choice path does the same per-arm; a disjoint choice commits to one arm and\n // relies on this boundary to undo a failed commit.)\n //\n // The rollback is only needed when `inner` can push a capture and THEN fail\n // (i.e. leave partial buffered state). Atomic terminals, self-contained nodes,\n // choices/repeats that roll back internally, etc. never leave partial captures\n // \u2014 emitting the save/restore around every fallible block (every sequence term)\n // was a ~2.3\u00D7 compiled-CSS regression. Gate it on the structural predicate so\n // hot grammars compile back to tight code while correctness is preserved.\n // A failed sequence term does NOT rewind `_triviaLog` (the interpreter leaves\n // earlier trivia logged) \u2014 only the CST child buffers are restored here.\n const needsRollback = ctx.capturing && mayLeavePartialCapture(inner)\n const mayCommit = mayCommitFailure(inner)\n const needsFieldRollback = needsRollback && parserHasOwnFields(inner)\n const mL = needsRollback ? v(ctx, '_fcl') : null\n const mR = needsRollback ? v(ctx, '_fcr') : null\n const mTl = needsRollback ? v(ctx, '_fctl') : null\n const mF = needsFieldRollback ? v(ctx, '_fcf') : null\n const stmts = [\n `${ind0}let ${okV} = false, ${valV}, ${endV} = ${pos}`,\n ...(mL ? [\n `${ind0}const ${mL} = _ctx._cstLeaves?.length ?? 0`,\n `${ind0}const ${mR} = _ctx._cstRawChildren?.length ?? 0`,\n `${ind0}const ${mTl} = _ctx._cstTriviaLog?.length ?? 0`,\n ...(mF ? [`${ind0}const ${mF} = _ctx._fields?.length ?? 0`] : []),\n ] : []),\n ...(mayCommit ? [`${ind0}_ctx._fc = false`] : []),\n `${ind0}${lbl}: {`,\n ...r.stmts,\n `${ind0} ${valV} = ${r.valueVar}; ${endV} = ${r.endVar}; ${okV} = true`,\n `${ind0}}`,\n ...(mL ? [\n `${ind0}if (!${okV}) { ${captureRestoreBody(ctx, mL, mR!, mTl!, null, mF)} }`,\n ] : []),\n ]\n return { stmts, okVar: okV, valVar: valV, endVar: endV, mayCommit }\n}\n\n// ---------------------------------------------------------------------------\n// Per-combinator emitters\n// ---------------------------------------------------------------------------\n\n/**\n * Above this length, an unrolled `charCodeAt` chain stops paying for itself:\n * measured crossover where native `startsWith` wins on runtime is ~256\u2013512\n * chars, but the unrolled chain's *generated source* grows ~4\u201330\u00D7 faster than\n * `startsWith`'s near-constant call site (see PERF_IDEAS.md). No literal in a\n * real grammar (keywords, punctuation) gets remotely close to this \u2014 the\n * longest in this repo's example grammars is `important` (9 chars) \u2014 so this\n * threshold exists to cap codegen bloat on a pathological literal, not because\n * `startsWith` is faster there.\n */\nconst CHARCODE_CHAIN_MAX = 16\n\nfunction emitLit(def: Extract<ParserDef, { tag: 'literal' }>, ctx: Ctx, pos: string): ER {\n const { value, caseInsensitive } = def\n const len = value.length\n const vv = v(ctx)\n const expectedStr = JSON.stringify(JSON.stringify(value))\n const stmts: string[] = []\n\n if (caseInsensitive && len > 0) {\n // ASCII case fold, the same `(c | 32) === lower` bit-OR compare that `/i`-flag\n // regex lowering uses (foldEq) \u2014 NOT Intl.Collator (measured ~9\u00D7 slower, and\n // its Unicode accent-folding is the wrong semantic for a parser anyway). Folds\n // ASCII letters, exact-matches everything else. The captured value is the\n // input's own casing (slice), not the pattern's.\n const match = Array.from({ length: len }, (_, i) =>\n `(${foldEq(`input.charCodeAt(${pos}${i > 0 ? ` + ${i}` : ''})`, value.charCodeAt(i))})`\n ).join(' && ')\n stmts.push(\n ...emitIfFail(ctx, `${pos} + ${len} > input.length || !(${match})`, failBody(ctx, expectedStr, pos)),\n `${ind(ctx)}const ${vv} = input.slice(${pos}, ${pos} + ${len})`,\n )\n } else if (len === 0) {\n stmts.push(`${ind(ctx)}const ${vv} = ''`)\n } else if (len === 1) {\n const code = value.codePointAt(0)!\n stmts.push(\n ...emitIfFail(ctx, `${pos} >= input.length || input.charCodeAt(${pos}) !== ${code}`, failBody(ctx, expectedStr, pos)),\n `${ind(ctx)}const ${vv} = ${JSON.stringify(value)}`,\n )\n } else if (len <= CHARCODE_CHAIN_MAX) {\n const checks = Array.from({ length: len }, (_, i) =>\n `input.charCodeAt(${pos}${i > 0 ? ` + ${i}` : ''}) !== ${value.codePointAt(i)!}`\n ).join(' || ')\n stmts.push(\n ...emitIfFail(ctx, `${pos} + ${len} > input.length || ${checks}`, failBody(ctx, expectedStr, pos)),\n `${ind(ctx)}const ${vv} = ${JSON.stringify(value)}`,\n )\n } else {\n // startsWith(str, pos) avoids allocating a slice \u2014 it handles the bounds check\n // internally and compares in-place. No first-char guard needed either.\n stmts.push(\n ...emitIfFail(ctx, `!input.startsWith(${JSON.stringify(value)}, ${pos})`, failBody(ctx, expectedStr, pos)),\n `${ind(ctx)}const ${vv} = ${JSON.stringify(value)}`,\n )\n }\n\n const endVar = len === 0 ? pos : `${pos} + ${len}`\n stmts.push(...emitLiteralLineTrack(ctx, pos, value))\n stmts.push(...emitLeafCapture(ctx, vv, pos, endVar))\n return { stmts, valueVar: vv, endVar }\n}\n\nfunction escapeKeywordRe(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\n/**\n * Fast path for `keywords()`/`word()`/`makeWord()`: each word is a FIXED\n * literal (optionally wrapped in the shared boundary lookahead), so this\n * reuses the exact `seq`/`litFold`/`lookahead` `ScanShape` machinery from\n * `scannable-run.ts` (PERF_IDEAS \u00A78b) instead of one `RegExp.exec` alternation\n * per match. Unconditionally ambiguity-safe: `trailingBacktrackClass` treats a\n * single-literal `seq` and `litFold` as fixed-length (no quantifier to\n * backtrack), so wrapping either in a lookahead is safe for ANY boundary class\n * \u2014 no `seqIsUnambiguous`-style check is needed here.\n *\n * Declines (returns `null`, caller falls back to the regex alternation) for:\n * - an empty-string keyword (degenerate; not worth special-casing)\n * - a keyword containing an astral (surrogate-pair) code point \u2014 the `seq`/\n * `litFold` codegen advances one `charCodeAt` UTF-16 unit per code POINT,\n * which only holds for the BMP (same reason `scanShapeFromRegex` refuses\n * the `u` flag entirely); real keyword sets are BMP identifiers, so this\n * is a defensive, not a practical, limitation\n * - a boundary class this file can't parse (defensive; `parseClassRanges`\n * handles every realistic boundary string, e.g. `_0-9A-Za-z`)\n * - `caseInsensitive` over a keyword containing a non-ASCII code point \u2014\n * `litFold` folds ASCII letters only, so `\u00E4` would compile to an exact\n * compare and never match `\u00C4` (the same hazard `caseFoldLiteralOrAlt`\n * declines for regex-derived shapes)\n * - `caseInsensitive` combined with a boundary \u2014 the boundary class would\n * ALSO need ASCII case-folding to match the original regex's `/i` flag\n * (the general \"`/i` on a char class\" problem, PERF_IDEAS \u00A78d, not yet\n * built), so this combination is left on the safe, slower path rather\n * than risk silently narrowing which chars the boundary excludes.\n */\nfunction emitKeywordsFast(def: Extract<ParserDef, { tag: 'keywords' }>, ctx: Ctx, pos: string): ER | null {\n if (def.words.length === 0 || def.words.some(w => w.length === 0)) return null\n if (def.words.some(w => Array.from(w).length !== w.length)) return null\n if (def.caseInsensitive && def.boundary) return null\n // `litFold` folds ASCII letters ONLY (scannable-run.ts `foldEq`), so a keyword\n // holding a non-ASCII code point with a case pair (\u00E4/\u00C4, \u03C3/\u03A3/\u03C2) would compile to\n // an exact compare and silently miss the other case \u2014 while the interpreter's\n // `/iy` regex matches it. `caseFoldLiteralOrAlt` already declines exactly this\n // for regex-derived shapes; the keywords path had simply omitted the guard.\n if (def.caseInsensitive && def.words.some(w => w.split('').some(c => c.charCodeAt(0) > 127))) return null\n\n let boundary: { ranges: Array<[number, number]>; negated: boolean } | null = null\n if (def.boundary) {\n let body = def.boundary\n const negated = body.startsWith('^')\n if (negated) body = body.slice(1)\n const ranges = parseClassRanges(body)\n if (!ranges) return null\n boundary = { ranges, negated }\n }\n\n const mint: Mint = (prefix = '_v') => v(ctx, prefix)\n const lbl = v(ctx, '_kwLbl')\n const valV = v(ctx, '_kwv')\n const endV = v(ctx, '_kwe')\n const bodyInd = ind(ctx) + ' '\n\n const tries: string[] = []\n for (const w of def.words) {\n const cps = Array.from(w, ch => ch.codePointAt(0)!)\n let shape: ScanShape = def.caseInsensitive\n ? { kind: 'litFold', open: cps }\n : { kind: 'seq', parts: [{ part: 'lit', cps, optional: false }] }\n if (boundary) {\n shape = { kind: 'lookahead', inner: shape, ranges: boundary.ranges, classNegated: boundary.negated, negative: true }\n }\n const m = emitShapeMatch(shape, pos, mint, bodyInd)\n tries.push(\n ...m.setup,\n // Slice from input rather than reusing the literal word: `caseInsensitive`\n // must return the text as it actually appeared (e.g. \"ABC\" for keyword\n // \"abc\"), matching what the original `RegExp.exec()[0]` returned.\n `${bodyInd}if (${m.ok}) { ${valV} = input.slice(${pos}, ${m.end}); ${endV} = ${m.end}; break ${lbl} }`,\n )\n }\n\n const stmts = [\n `${ind(ctx)}let ${valV} = '', ${endV} = ${pos}`,\n `${ind(ctx)}${lbl}: {`,\n ...tries,\n `${ind(ctx)}}`,\n // Every word has length >= 1 (checked above), so a real match always\n // advances past `pos` \u2014 `endV === pos` only happens when no candidate matched.\n ...emitIfFail(ctx, `${endV} === ${pos}`, failBody(ctx, '\"keyword\"', pos)),\n ]\n stmts.push(...emitLeafCapture(ctx, valV, pos, endV))\n return { stmts, valueVar: valV, endVar: endV }\n}\n\nfunction emitKeywords(def: Extract<ParserDef, { tag: 'keywords' }>, ctx: Ctx, pos: string): ER {\n const fast = emitKeywordsFast(def, ctx, pos)\n if (fast) return fast\n\n const alt = def.words.map(escapeKeywordRe).join('|')\n const boundary = def.boundary ? `(?![${def.boundary}])` : ''\n // MUST mirror `keywords()`'s own flags exactly (see `src/combinators/keywords.ts`):\n // case-insensitive drops `u` so that matching folds the SAME set the first-set\n // enumerates. Emitting `iuy` here folded by Unicode simple case folding instead,\n // so the COMPILED build matched `\u017Ftroke` against `keywords(['stroke'], \u2026)` while\n // the ASCII first-set gated `\u017F` away \u2014 the unsound gate, and an interpreter/\n // compiled divergence on top of it.\n const flags = def.caseInsensitive ? 'iy' : 'uy'\n const source = `(?:${alt})${boundary}`\n const key = `${source}/${flags}`\n let rName = ctx.regexMap.get(key)\n if (rName === undefined) {\n rName = `${nsp(ctx)}_re${ctx.regexDecls.length}`\n ctx.regexDecls.push(`const ${rName} = /${source}/${flags}`)\n ctx.regexMap.set(key, rName)\n }\n\n const mv = v(ctx, '_m')\n const vv = v(ctx)\n const stmts = [\n `${ind(ctx)}${rName}.lastIndex = ${pos}`,\n `${ind(ctx)}const ${mv} = ${rName}.exec(input)`,\n ...emitIfFail(ctx, `${mv} === null`, failBody(ctx, '\"keyword\"', pos)),\n `${ind(ctx)}const ${vv} = ${mv}[0]`,\n ]\n const endVar = `${pos} + ${vv}.length`\n stmts.push(...emitLeafCapture(ctx, vv, pos, endVar))\n return { stmts, valueVar: vv, endVar }\n}\n\nfunction emitRegex(def: Extract<ParserDef, { tag: 'regex' }>, ctx: Ctx, pos: string, canMatchNewline = true): ER {\n const expectedStr = JSON.stringify(`/${def.source}/`)\n const shape = scanShapeFromRegex(def.source, def.flags)\n if (shape) {\n const vv = v(ctx)\n const scanned = emitScannableTerminal(shape, {\n ind: ind(ctx),\n pos,\n valueVar: vv,\n failIf: (cond: string) => emitIfFail(ctx, cond, failBody(ctx, expectedStr, pos)),\n fresh: (prefix?: string) => v(ctx, prefix),\n })\n if (scanned) {\n const stmts = [\n ...scanned.stmts,\n ...(canMatchNewline ? emitLineTrack(ctx, pos, scanned.endVar) : []),\n ...emitLeafCapture(ctx, vv, pos, scanned.endVar),\n ]\n return { stmts, valueVar: vv, endVar: scanned.endVar }\n }\n }\n\n // Didn't lower to the fast charCodeAt scan \u2014 record it and fall back to RegExp.\n _loweringSink?.add(`/${def.source}/${def.flags}`)\n\n const flags = 'y' + def.flags.replace(/[gy]/g, '')\n const key = `${def.source}/${flags}`\n let rName = ctx.regexMap.get(key)\n if (rName === undefined) {\n rName = `${nsp(ctx)}_re${ctx.regexDecls.length}`\n ctx.regexDecls.push(`const ${rName} = /${def.source}/${flags}`)\n ctx.regexMap.set(key, rName)\n }\n\n const mv = v(ctx, '_m')\n const vv = v(ctx)\n const stmts = [\n `${ind(ctx)}${rName}.lastIndex = ${pos}`,\n `${ind(ctx)}const ${mv} = ${rName}.exec(input)`,\n ...emitIfFail(ctx, `${mv} === null`, failBody(ctx, expectedStr, pos)),\n `${ind(ctx)}const ${vv} = ${mv}[0]`,\n ]\n const endVar = `${pos} + ${vv}.length`\n if (canMatchNewline) stmts.push(...emitLineTrack(ctx, pos, endVar))\n stmts.push(...emitLeafCapture(ctx, vv, pos, endVar))\n return { stmts, valueVar: vv, endVar }\n}\n\n/**\n * A JS expression that builds a zero-width follow-set sync sentinel for `fs` at\n * RUNTIME via `_ctx._rec.sentinel(...)` \u2014 never `_rp` \u2014 so a recovery-enabled\n * grammar keeps `runtimeParsers` empty and stays macro-inlinable. Returns null when\n * the first-set is `any`/`empty` (no usable sentinel). The build is only reached on\n * the tolerant path (the publish that uses it is `_ctx._tolerant`-gated), so a strict\n * parse of the shipped grammar allocates nothing.\n */\nfunction syncSentinelExpr(fs: FirstSet): string | null {\n if (fs.kind !== 'ranges' || fs.ranges.length === 0) return null\n return `_ctx._rec.sentinel({ kind: 'ranges', ranges: ${JSON.stringify(fs.ranges)} })`\n}\n\nfunction emitSeqValues(def: Extract<ParserDef, { tag: 'sequence' }>, ctx: Ctx, pos: string): ER & { valueVars: string[] } {\n const startV = v(ctx, '_start')\n const curV = v(ctx, '_cur')\n const stmts: string[] = [\n `${ind(ctx)}const ${startV} = ${pos}`,\n `${ind(ctx)}let ${curV} = ${pos}`,\n ]\n const valueVars: string[] = []\n\n // Recovery sync publish (compile-time gate): save the inherited sync at entry,\n // then before each term set `_ctx._sync` to the inferred follow-set sentinel of\n // the remaining terms (or the inherited sync when none is usable) so a nested\n // list resyncs to the enclosing delimiter. Runtime-gated by `_ctx._tolerant`;\n // strict parses never touch it.\n const syncInV = ctx.recovery ? v(ctx, '_syncIn') : ''\n if (ctx.recovery) stmts.push(`${ind(ctx)}const ${syncInV} = _ctx._sync`)\n const publishSync = (i: number): string => {\n if (!ctx.recovery) return ''\n const fs = def.parsers.slice(i + 1).reduce<FirstSet>((acc, p) => union(acc, firstSetOf(p)), { kind: 'empty' })\n const ref = syncSentinelExpr(fs)\n return `${ind(ctx)}if (_ctx._tolerant) _ctx._sync = ${ref ?? syncInV}`\n }\n\n for (let i = 0; i < def.parsers.length; i++) {\n const syncPub = publishSync(i)\n if (syncPub) stmts.push(syncPub)\n if (i > 0 && ctx.activeTrivia) {\n if (ctx.capturing) {\n const capFn = ensureTriviaCaptureFn(ctx)\n const markV = v(ctx, '_mk')\n const markTl = v(ctx, '_mktl')\n const markLog = v(ctx, '_mklg')\n const markRootLog = hasSelectedRootTrivia(ctx) ? v(ctx, '_mkrlg') : null\n const scanEndV = v(ctx, '_sne')\n stmts.push(\n `${ind(ctx)}const ${markV} = _ctx._cstRawChildren ? _ctx._cstRawChildren.length : 0`,\n `${ind(ctx)}const ${markTl} = _ctx._cstTriviaLog ? _ctx._cstTriviaLog.length : 0`,\n `${ind(ctx)}const ${markLog} = _ctx._triviaLog ? _ctx._triviaLog.length : 0`,\n ...(markRootLog ? [`${ind(ctx)}const ${markRootLog} = _ctx._rootTriviaLog ? _ctx._rootTriviaLog.length : 0`] : []),\n `${ind(ctx)}const ${scanEndV} = ${capFn}(input, ${curV}, _ctx, 1)`,\n ...emitLineTrack(ctx, curV, scanEndV),\n )\n const r = emit(def.parsers[i]!, ctx, scanEndV)\n stmts.push(...r.stmts)\n const endAfterV = v(ctx, '_sea')\n stmts.push(\n `${ind(ctx)}const ${endAfterV} = ${r.endVar}`,\n `${ind(ctx)}if (${endAfterV} > ${scanEndV}) { ${curV} = ${endAfterV} } else { if (_ctx._cstRawChildren && _ctx._cstRawChildren.length !== ${markV}) _ctx._cstRawChildren.length = ${markV}; if (_ctx._cstTriviaLog && _ctx._cstTriviaLog.length !== ${markTl}) _ctx._cstTriviaLog.length = ${markTl}; if (_ctx._triviaLog && _ctx._triviaLog.length !== ${markLog}) _ctx._triviaLog.length = ${markLog};${markRootLog ? ` if (_ctx._rootTriviaLog && _ctx._rootTriviaLog.length !== ${markRootLog}) _ctx._rootTriviaLog.length = ${markRootLog};` : ''} }`,\n )\n valueVars.push(r.valueVar)\n continue\n } else {\n // Match the interpreter (sequence.ts): scan trivia to a temp position, but\n // only *commit* it (advance cur) if the following term consumes content past\n // it. A term matching empty (optional/many/lookahead) leaves cur pre-trivia,\n // so trailing whitespace stays out of the sequence's span. When run() has\n // installed the public root `_triviaLog`, record that log with `_cap = 2`\n // without enabling per-node CST trivia capture.\n const trivFn = ensureTriviaFn(ctx)\n const markLog = v(ctx, '_mklg')\n const markRootLog = hasSelectedRootTrivia(ctx) ? v(ctx, '_mkrlg') : null\n const scanEndV = v(ctx, '_sne')\n // The root trivia log, read ONCE. This site used to load `_ctx._triviaLog`\n // three separate times per sequence-item boundary \u2014 to take the mark, to\n // compute the `_cap` argument, and again to decide the rollback \u2014 and root\n // trivia is OPT-IN, so a grammar that never asks for it (every `run()` without\n // `rootTrivia`, and every direct `parseWithContext`) paid three property loads\n // per boundary to re-prove the same field undefined. Token-dense grammars with\n // little per-token work pay that most: it is the whole of graphql/document's\n // drift against the pinned v0.35.0 reference in `perf:workloads`.\n //\n // Hoisting is sound only because the load and the rollback bracket ONE sequence\n // item. `_ctx._triviaLog` is reassigned at grammar boundaries (see the\n // save/clear/restore pair emitted for nested grammars), but that pair restores\n // the same reference before control returns here, and the rollback is reached\n // only on the item's success path. A function-wide hoist would NOT be sound.\n const logV = v(ctx, '_tlg')\n const capArg = ctx.noHoist ? '0' : hasSelectedRootTrivia(ctx)\n ? `(${logV} !== undefined || _ctx._rootTriviaLog !== undefined) ? 2 : 0`\n : `${logV} !== undefined ? 2 : 0`\n stmts.push(\n `${ind(ctx)}const ${logV} = _ctx._triviaLog`,\n `${ind(ctx)}const ${markLog} = ${logV} !== undefined ? ${logV}.length : 0`,\n ...(markRootLog ? [`${ind(ctx)}const ${markRootLog} = _ctx._rootTriviaLog ? _ctx._rootTriviaLog.length : 0`] : []),\n `${ind(ctx)}const ${scanEndV} = ${trivFn}(input, ${curV}, _ctx, ${capArg})`,\n ...emitLineTrack(ctx, curV, scanEndV),\n )\n const r = emit(def.parsers[i]!, ctx, scanEndV)\n stmts.push(...r.stmts)\n const endAfterV = v(ctx, '_sea')\n stmts.push(\n `${ind(ctx)}const ${endAfterV} = ${r.endVar}`,\n `${ind(ctx)}if (${endAfterV} > ${scanEndV}) ${curV} = ${endAfterV}; else { if (${logV} !== undefined && ${logV}.length !== ${markLog}) ${logV}.length = ${markLog};${markRootLog ? ` if (_ctx._rootTriviaLog && _ctx._rootTriviaLog.length !== ${markRootLog}) _ctx._rootTriviaLog.length = ${markRootLog};` : ''} }`,\n )\n valueVars.push(r.valueVar)\n continue\n }\n }\n const r = emit(def.parsers[i]!, ctx, curV)\n stmts.push(...r.stmts, `${ind(ctx)}${curV} = ${r.endVar}`)\n valueVars.push(r.valueVar)\n }\n\n return { stmts, valueVar: valueVars[valueVars.length - 1] ?? 'null', endVar: curV, valueVars }\n}\n\nfunction emitSeq(def: Extract<ParserDef, { tag: 'sequence' }>, ctx: Ctx, pos: string): ER {\n const { stmts, endVar, valueVars } = emitSeqValues(def, ctx, pos)\n // The tuple is never observed (markUnusedValues) \u2014 terms still parse + capture;\n // skip allocating `[v1, v2, \u2026]`.\n if (def.valueUnused) return { stmts, valueVar: 'undefined', endVar }\n const arrV = v(ctx, '_arr')\n stmts.push(`${ind(ctx)}const ${arrV} = [${valueVars.join(', ')}]`)\n return { stmts, valueVar: arrV, endVar }\n}\n\n/**\n * Deep-first `expected` labels for a choice's arms \u2014 the concatenation of each\n * arm's leftmost-leaf expected set, matching what the interpreter collects when\n * no arm's first-set matches (choice.ts) and what expect()'s deriveExpected()\n * reports. Falls back to the arm's tag only for arms with no static expectation\n * (e.g. runtime-fallback combinators), preserving the previous behaviour there.\n */\nfunction deriveExpectedArr(parsers: Combinator<unknown>[]): string {\n return JSON.stringify(parsers.flatMap(p => {\n const e = deriveExpected(p)\n return e.length > 0 ? e : [p._tag]\n }))\n}\n\n/**\n * True when `p` can only fail at its own start position (its failure span is\n * `{pos,pos}` and its expected set is a fixed label). Such disjoint-choice arms\n * can be emitted inline: their leaf failure already matches the interpreter's\n * `{expected: <label>, span: {pos,pos}}`. Composite arms (sequence, node, \u2026) can\n * fail deeper, so they must be wrapped to re-anchor the span at the choice pos.\n */\nfunction failsAtStart(p: Combinator<unknown>): boolean {\n const d = p._def\n switch (d.tag) {\n case 'literal': case 'regex': case 'keywords': case 'guard': case 'not': case 'peek':\n return true\n case 'transform': case 'label': case 'field':\n return failsAtStart(d.parser)\n default:\n return false\n }\n}\n\n/** Hoisted module-level const for one arm's static `expected` labels. */\nfunction armStaticExpected(ctx: Ctx, p: Combinator<unknown>): string {\n return hoistExpected(ctx, deriveExpectedArr([p]))\n}\n\n/**\n * True when `p` can succeed at `pos` without consuming input (e.g. a starred\n * regex, optional, many). Such arms must still be tried even when the current\n * code point is outside their first-set \u2014 skipping them would change semantics.\n */\nfunction canMatchEmptyAtStart(p: Combinator<unknown>): boolean {\n const d = p._def\n switch (d.tag) {\n case 'regex':\n // Precise nullability: does the pattern actually match the empty string?\n // The old crude test (`/(?:[*?]|\\{0,|\\{\\d*,)/.test(source)`) fired on ANY\n // `?`/`*`/`{n,}` in the source \u2014 including a `?`/`*` inside a `(?!\u2026)`/`(?=\u2026)`\n // lookahead or applied to a NON-leading term \u2014 so a required-prefix recognizer\n // like `/@media(?![-\\w])/` (first-set `{@}`, cannot match empty) was wrongly\n // flagged nullable. When such a rule is a compileLinkable rule, that poisoned\n // its `firstSets`/`firstSetRecipes` to `any` (below), so a cross-artifact\n // `g.CssAstSyntax*` reference to it resolved to `any` at fuse time and the\n // referencing choice arm lost first-char dispatch. `regexMatchesEmpty` tests\n // `^(?:source)$` against `''` \u2014 the exact \"matches empty\" question \u2014 and falls\n // back to `true` (conservatively nullable \u2192 always-try) if the pattern can't be\n // compiled. Tighter AND sound: the first-set stays a superset (firstSetFromRegex\n // is unchanged); we only stop over-declaring nullability. Also fixes a latent\n // UNSOUNDNESS the crude test had \u2014 `/a{0}/` matches empty but has no `{n,}`, so\n // the old check returned false (would gate a nullable rule); the precise test\n // returns true.\n return regexMatchesEmpty(d.source, d.flags)\n case 'optional': return true\n case 'many': return true\n case 'transform': case 'label': case 'field':\n return canMatchEmptyAtStart(d.parser)\n case 'literal':\n return d.value.length === 0\n default:\n return false\n }\n}\n\n/** Emit a first-set guard when the arm cannot match empty and has a finite first-set. */\nfunction needsFirstSetGuard(p: Combinator<unknown>): boolean {\n const fs = p._meta.firstSet\n return fs.kind !== 'any' && !canMatchEmptyAtStart(p)\n}\n\n/**\n * Emit one arm of a disjoint choice, assigning its value/end to `valV`/`endV`.\n * Leaf arms (failsAtStart) are inlined \u2014 their leaf failure already matches the\n * interpreter. Composite arms are wrapped so that on failure the choice reports\n * the arm's deep `expected` (via _ctx._fx) but re-anchors the span at the choice\n * position `pos` \u2014 exactly what the interpreter's disjoint dispatch returns.\n */\nfunction coverageHit(ctx: Ctx, id: string | undefined, offset = '_pos', end?: string): string[] {\n return id === undefined ? [] : [\n `${ind(ctx)}_ctx._grammarCoverage?.(${JSON.stringify(id)})`,\n `${ind(ctx)}_ctx._grammarTrace?.write({ id: ${JSON.stringify(id)}, phase: 'selected', offset: ${offset}${end === undefined ? '' : `, end: ${end}`} })`,\n `${ind(ctx)}_ctx._grammarTrace?.write({ id: ${JSON.stringify(id)}, phase: 'success', offset: ${offset}${end === undefined ? '' : `, end: ${end}`} })`,\n ]\n}\n\nfunction coverageAttempt(ctx: Ctx, id: string | undefined, offset: string): string[] {\n return id === undefined ? [] : [`${ind(ctx)}_ctx._grammarTrace?.write({ id: ${JSON.stringify(id)}, phase: 'attempt', offset: ${offset} })`]\n}\n\nfunction coverageFailureBacktrack(ctx: Ctx, id: string | undefined, failureOffset: string, startOffset: string): string[] {\n return id === undefined ? [] : [\n `${ind(ctx)}_ctx._grammarTrace?.write({ id: ${JSON.stringify(id)}, phase: 'failure', offset: ${failureOffset} })`,\n `${ind(ctx)}_ctx._grammarTrace?.write({ id: ${JSON.stringify(id)}, phase: 'backtrack', offset: ${startOffset} })`,\n ]\n}\n\nfunction emitDisjointArm(p: Combinator<unknown>, ctx: Ctx, pos: string, valV: string, endV: string, coverageId?: string): string[] {\n // Coverage needs an observable failure/backtrack pair even for an atomic\n // dispatched terminal. Keep the unwrapped hot path only when uninstrumented.\n if (failsAtStart(p) && coverageId === undefined) {\n const r = emit(p, ctx, pos)\n return [...coverageAttempt(ctx, coverageId, pos), ...r.stmts, `${ind(ctx)}${valV} = ${r.valueVar}`, `${ind(ctx)}${endV} = ${r.endVar}`, ...coverageHit(ctx, coverageId, pos, r.endVar)]\n }\n const { stmts, okVar, valVar, endVar } = emitFallible(p, ctx, pos)\n return [\n ...coverageAttempt(ctx, coverageId, pos),\n ...stmts,\n ...emitIfFail(ctx, `!${okVar}`, `${coverageFailureBacktrack(ctx, coverageId, '_ctx._fe', pos).join('; ')}; ${failArrBody(ctx, '_ctx._fx', pos, false)}`),\n `${ind(ctx)}${valV} = ${valVar}`,\n `${ind(ctx)}${endV} = ${endVar}`,\n ...coverageHit(ctx, coverageId, pos, endVar),\n ]\n}\n\n/**\n * Register a disjoint-choice arm's gate predicate (if any) into `mapFns` and emit\n * the guarded arm body. Mirrors emitFirstMatch's gate handling: the gate closure\n * is pushed into `mapFns` (with its source into `mapFnSrcs` \u2014 `def.gateSrcs[i]`\n * for the macro, null for compile()) BEFORE the arm body is emitted, so the\n * per-arm push order (gate, then arm transforms) stays parallel with the macro's\n * pre-accumulated sources and the emitFirstMatch layout.\n *\n * A gated arm dispatches on its first char, then checks the gate INSIDE that\n * branch: gate true \u2192 run the arm; gate false \u2192 FAIL the choice at `pos` (sound\n * because disjoint + non-nullable arms guarantee no other arm matches this char).\n */\nfunction emitDisjointArmGated(\n def: Extract<ParserDef, { tag: 'choice' }>,\n i: number,\n ctx: Ctx,\n pos: string,\n valV: string,\n endV: string,\n coverageId?: string,\n): string[] {\n const p = def.parsers[i]!\n const gate = def.gates[i]\n if (!gate) return emitDisjointArm(p, ctx, pos, valV, endV, coverageId)\n\n const gateIdx = ctx.mapFns.length\n ctx.mapFns.push(gate as (v: unknown, span: unknown) => unknown)\n // Macro path inlines the captured gate source; compile() has no source \u2192 null.\n // Parallel-length invariant with mapFns preserved either way.\n ctx.mapFnSrcs.push(def.gateSrcs?.[i] ?? null)\n const gateCond = `${mfRef(ctx)}[${gateIdx}](_ctx.state)`\n\n const stmts = [`${ind(ctx)}if (${gateCond}) {`]\n ctx.indent++\n stmts.push(...emitDisjointArm(p, ctx, pos, valV, endV, coverageId))\n ctx.indent--\n stmts.push(`${ind(ctx)}} else { ${failArrBody(ctx, deriveExpectedArr([p]), pos)} }`)\n return stmts\n}\n\nfunction emitChoice(parser: Combinator<unknown>, def: Extract<ParserDef, { tag: 'choice' }>, ctx: Ctx, pos: string): ER {\n const coverageIds = ctx.coverage?.plan.choices.get(parser)\n const coverageBase = coverageIds?.[0]?.slice(0, -1)\n const allExpected = deriveExpectedArr(def.parsers)\n\n // \u2500\u2500 Disjoint: O(1) first-char dispatch (arms may be gated) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n if (def.disjoint) {\n const codeV = v(ctx, '_code')\n const valV = v(ctx, '_chv')\n const endV = v(ctx, '_che')\n const stmts: string[] = [\n `${ind(ctx)}const ${codeV} = ${pos} < input.length ? (input.codePointAt(${pos}) ?? -1) : -1`,\n `${ind(ctx)}let ${valV}, ${endV} = ${pos}`,\n ]\n\n const plan = _forceDisjointIf ? { kind: 'if' as const } : planDisjointDispatch(def.parsers)\n\n // Switch (jump table) when arms key off a few discrete first code points.\n if (plan.kind === 'switch') {\n stmts.push(`${ind(ctx)}switch (${codeV}) {`)\n ctx.indent++\n for (let i = 0; i < def.parsers.length; i++) {\n for (const cp of plan.cases[i]!) stmts.push(`${ind(ctx)}case ${cp}:`)\n stmts.push(`${ind(ctx)}{`)\n ctx.indent++\n stmts.push(\n ...emitDisjointArmGated(def, i, ctx, pos, valV, endV, coverageIds?.[i]),\n `${ind(ctx)}break`,\n )\n ctx.indent--\n stmts.push(`${ind(ctx)}}`)\n }\n stmts.push(`${ind(ctx)}default: ${failArrBody(ctx, allExpected, pos)}`)\n ctx.indent--\n stmts.push(`${ind(ctx)}}`)\n return { stmts, valueVar: valV, endVar: endV }\n }\n\n // Otherwise if/else if with range comparisons (cheaper for char-class arms).\n let first = true\n for (let i = 0; i < def.parsers.length; i++) {\n const p = def.parsers[i]!\n const cond = firstSetCond(codeV, p._meta.firstSet)\n const kw = first ? 'if' : 'else if'\n first = false\n stmts.push(`${ind(ctx)}${kw} (${cond}) {`)\n ctx.indent++\n stmts.push(...emitDisjointArmGated(def, i, ctx, pos, valV, endV, coverageIds?.[i]))\n ctx.indent--\n stmts.push(`${ind(ctx)}}`)\n }\n stmts.push(...emitElseFail(ctx, failArrBody(ctx, allExpected, pos)))\n return { stmts, valueVar: valV, endVar: endV }\n }\n\n return emitNonDisjoint(def, def.strategy, allExpected, ctx, pos, coverageBase)\n}\n\nfunction emitTailFallible(\n parser: Combinator<unknown>,\n ctx: Ctx,\n pos: string,\n): FallibleER {\n const savedRecord = ctx.recordFail\n ctx.recordFail = true\n const out = emitFallible(parser, ctx, pos)\n ctx.recordFail = savedRecord\n return out\n}\n\n/** True when `p` can append a ParseError to `ctx._errors` before later failure. */\nfunction mayRecordRecoveryError(p: Combinator<unknown>, recovery: boolean, seen: Set<Combinator<unknown>> = new Set()): boolean {\n if (seen.has(p)) return false\n seen.add(p)\n const d = p._def\n switch (d.tag) {\n case 'expect':\n case 'recover':\n return true\n case 'many':\n case 'oneOrMore':\n case 'sepBy':\n return recovery || mayRecordRecoveryError(d.parser, recovery, seen)\n case 'choice':\n case 'sequence': {\n for (const item of d.parsers) {\n if (mayRecordRecoveryError(item, recovery, seen)) return true\n }\n return false\n }\n case 'dispatch': {\n if (mayRecordRecoveryError(d.selector, recovery, seen)) return true\n for (const item of d.cases) {\n if (mayRecordRecoveryError(item.parser, recovery, seen)) return true\n }\n if (d.matchers?.some(item => mayRecordRecoveryError(item.parser, recovery, seen))) return true\n return d.otherwise ? mayRecordRecoveryError(d.otherwise, recovery, seen) : false\n }\n case 'attempt':\n case 'transform':\n case 'label':\n case 'field':\n case 'grammar':\n case 'node':\n case 'token':\n case 'leaf':\n case 'withCtx':\n case 'optional':\n return mayRecordRecoveryError(d.parser, recovery, seen)\n case 'skip':\n return mayRecordRecoveryError(d.main, recovery, seen) || mayRecordRecoveryError(d.skipped, recovery, seen)\n case 'scanTo':\n if (mayRecordRecoveryError(d.sentinel, recovery, seen)) return true\n for (const item of d.skip) {\n if (mayRecordRecoveryError(item, recovery, seen)) return true\n }\n return false\n case 'lazy': {\n try { return mayRecordRecoveryError(d.thunk(), recovery, seen) } catch { return true }\n }\n case 'unknown':\n return true\n default:\n return false\n }\n}\n\nfunction emitDispatchCombinator(\n parser: Combinator<unknown>,\n def: Extract<ParserDef, { tag: 'dispatch' }>,\n ctx: Ctx,\n pos: string,\n valueMode: 'pair' | 'tail' = 'pair',\n): ER {\n if (parserUsesRouted(def.selector)) {\n throw new Error('parseman: routed() can only appear inside a dispatch() branch')\n }\n const coverageIds = ctx.coverage?.plan.dispatches.get(parser) ?? []\n const branchUsesRouted = (entry: { parser: Combinator<unknown>; usesRouted?: boolean | undefined }): boolean =>\n entry.usesRouted === true || parserUsesRouted(entry.parser)\n const hasRoutedBranch = def.cases.some(branchUsesRouted) ||\n (def.matchers ? def.matchers.some(branchUsesRouted) : false) ||\n (def.otherwise ? def.otherwiseUsesRouted === true || parserUsesRouted(def.otherwise) : false)\n const selectorNeedsRollback = hasRoutedBranch && (\n (ctx.capturing === true && capturesLeaf(def.selector)) ||\n (ctx.activeTrivia !== undefined && parserHasTriviaSite(def.selector)) ||\n parserEnablesTriviaCapture(def.selector) ||\n parserHasOwnFields(def.selector) ||\n mayRecordRecoveryError(def.selector, !!ctx.recovery)\n )\n const selectorLeafMark = selectorNeedsRollback ? v(ctx, '_dsl') : null\n const selectorRawMark = selectorNeedsRollback ? v(ctx, '_dsr') : null\n const selectorTriviaMark = selectorNeedsRollback ? v(ctx, '_dst') : null\n const selectorLogMark = selectorNeedsRollback ? v(ctx, '_dsg') : null\n const selectorRootLogMark = selectorNeedsRollback && hasSelectedRootTrivia(ctx) ? v(ctx, '_dsrg') : null\n const selectorFieldMark = selectorNeedsRollback ? v(ctx, '_dsf') : null\n const selectorErrorMark = selectorNeedsRollback ? v(ctx, '_dse') : null\n const selector = emit(def.selector, ctx, pos)\n const outV = v(ctx, '_dval')\n const outE = v(ctx, '_dend')\n const keyV = v(ctx, '_dkey')\n const stmts: string[] = [\n ...(selectorLeafMark ? [\n `${ind(ctx)}const ${selectorLeafMark} = _ctx._cstLeaves?.length ?? 0`,\n `${ind(ctx)}const ${selectorRawMark} = _ctx._cstRawChildren?.length ?? 0`,\n `${ind(ctx)}const ${selectorTriviaMark} = _ctx._cstTriviaLog?.length ?? 0`,\n `${ind(ctx)}const ${selectorLogMark} = _ctx._triviaLog?.length ?? 0`,\n ...(selectorRootLogMark ? [`${ind(ctx)}const ${selectorRootLogMark} = _ctx._rootTriviaLog?.length ?? 0`] : []),\n `${ind(ctx)}const ${selectorFieldMark} = _ctx._fields?.length ?? 0`,\n `${ind(ctx)}const ${selectorErrorMark} = _ctx._errors?.length ?? 0`,\n ] : []),\n ...selector.stmts,\n `${ind(ctx)}const ${keyV} = ${selector.valueVar}`,\n `${ind(ctx)}let ${outV}, ${outE} = ${selector.endVar}`,\n ]\n\n let wroteBranch = false\n const emitSelectedTail = (entry: { parser: Combinator<unknown>; usesRouted?: boolean | undefined }, keyword: 'if' | 'else if' | 'else', condition?: string, coverageId?: string): void => {\n const parser = entry.parser\n const head = keyword === 'else'\n ? `${ind(ctx)}else {`\n : `${ind(ctx)}${keyword} (${condition}) {`\n stmts.push(head)\n ctx.indent++\n const usesRouted = branchUsesRouted(entry)\n const needsRoutedContext = usesRouted && routedNeedsContextBridge(parser, ctx)\n const routedV = needsRoutedContext ? v(ctx, '_drt') : null\n const mayError = mayRecordRecoveryError(parser, !!ctx.recovery)\n const errMark = mayError ? v(ctx, '_derr') : null\n const logMark = ctx.activeTrivia ? v(ctx, '_dlog') : null\n const rootLogMark = ctx.activeTrivia && hasSelectedRootTrivia(ctx) ? v(ctx, '_drlog') : null\n if (usesRouted) {\n stmts.push(\n ...(routedV ? [`${ind(ctx)}const ${routedV} = _ctx._routed; _ctx._routed = { value: ${selector.valueVar}, span: { start: ${pos}, end: ${selector.endVar} } }`] : []),\n ...(selectorLeafMark ? [\n `${ind(ctx)}if (_ctx._cstLeaves && _ctx._cstLeaves.length !== ${selectorLeafMark}) _ctx._cstLeaves.length = ${selectorLeafMark}; if (_ctx._cstRawChildren && _ctx._cstRawChildren.length !== ${selectorRawMark}) _ctx._cstRawChildren.length = ${selectorRawMark}; if (_ctx._cstTriviaLog && _ctx._cstTriviaLog.length !== ${selectorTriviaMark}) _ctx._cstTriviaLog.length = ${selectorTriviaMark}; if (_ctx._triviaLog && _ctx._triviaLog.length !== ${selectorLogMark}) _ctx._triviaLog.length = ${selectorLogMark};${selectorRootLogMark ? ` if (_ctx._rootTriviaLog && _ctx._rootTriviaLog.length !== ${selectorRootLogMark}) _ctx._rootTriviaLog.length = ${selectorRootLogMark};` : ''} if (_ctx._fields && _ctx._fields.length !== ${selectorFieldMark}) _ctx._fields.length = ${selectorFieldMark}; if (_ctx._errors && _ctx._errors.length !== ${selectorErrorMark}) _ctx._errors.length = ${selectorErrorMark}`,\n ] : []),\n )\n }\n if (errMark) stmts.push(`${ind(ctx)}const ${errMark} = _ctx._errors?.length ?? 0`)\n if (logMark) stmts.push(`${ind(ctx)}const ${logMark} = _ctx._triviaLog?.length ?? 0`)\n if (rootLogMark) stmts.push(`${ind(ctx)}const ${rootLogMark} = _ctx._rootTriviaLog?.length ?? 0`)\n const savedRoutedLocal = ctx.routedLocal\n const savedNoHoist = ctx.noHoist\n if (usesRouted && !needsRoutedContext) {\n ctx.routedLocal = { valueVar: selector.valueVar, startVar: pos, endVar: selector.endVar }\n ctx.noHoist = true\n } else if (usesRouted) {\n ctx.routedLocal = undefined\n }\n const tail = emitTailFallible(parser, ctx, usesRouted ? pos : selector.endVar)\n ctx.routedLocal = savedRoutedLocal\n ctx.noHoist = savedNoHoist\n stmts.push(...coverageAttempt(ctx, coverageId, pos))\n const errorRollback = errMark\n ? `if (_ctx._errors && _ctx._errors.length !== ${errMark}) _ctx._errors.length = ${errMark}; `\n : ''\n const logRollback = logMark\n ? `if (_ctx._triviaLog && _ctx._triviaLog.length !== ${logMark}) _ctx._triviaLog.length = ${logMark}; `\n : ''\n const rootLogRollback = rootLogMark\n ? `if (_ctx._rootTriviaLog && _ctx._rootTriviaLog.length !== ${rootLogMark}) _ctx._rootTriviaLog.length = ${rootLogMark}; `\n : ''\n const routedRollback = routedV ? `_ctx._routed = ${routedV}; ` : ''\n const coverageFailure = coverageId === undefined\n ? ''\n : `_ctx._grammarTrace?.write({ id: ${JSON.stringify(coverageId)}, phase: 'failure', offset: _ctx._fe }); `\n stmts.push(\n ...tail.stmts,\n `${ind(ctx)}if (!${tail.okVar}) { ${routedRollback}${errorRollback}${logRollback}${rootLogRollback}${coverageFailure}${committedFailBody(ctx)} }`,\n ...(routedV ? [`${ind(ctx)}_ctx._routed = ${routedV}`] : []),\n `${ind(ctx)}${outV} = ${valueMode === 'tail' ? tail.valVar : `[${selector.valueVar}, ${tail.valVar}]`}`,\n `${ind(ctx)}${outE} = ${tail.endVar}`,\n ...coverageHit(ctx, coverageId, pos, tail.endVar),\n )\n ctx.indent--\n stmts.push(`${ind(ctx)}}`)\n }\n\n let coverageIndex = 0\n for (const entry of def.cases) {\n const condition = entry.keys.map(key => emitDispatchKeyCondition(keyV, key, entry.caseInsensitive)).join(' || ')\n emitSelectedTail(entry, wroteBranch ? 'else if' : 'if', condition, coverageIds[coverageIndex++])\n wroteBranch = true\n }\n\n const emitMatcherTails = (): void => {\n for (const matcher of def.matchers ?? []) {\n emitSelectedTail(matcher, wroteBranch ? 'else if' : 'if', emitDispatchMatcherCondition(ctx, keyV, matcher), coverageIds[coverageIndex++])\n wroteBranch = true\n }\n }\n\n if (def.otherwise) {\n emitMatcherTails()\n const otherwiseEntry = { parser: def.otherwise, usesRouted: def.otherwiseUsesRouted }\n if (wroteBranch) emitSelectedTail(otherwiseEntry, 'else', undefined, coverageIds[coverageIndex++])\n else emitSelectedTail(otherwiseEntry, 'if', 'true', coverageIds[coverageIndex++])\n } else {\n emitMatcherTails()\n const expected = JSON.stringify(def.cases.flatMap(entry => entry.keys.map(key => JSON.stringify(key))))\n const fail = failArrBody(ctx, expected, selector.endVar)\n stmts.push(wroteBranch ? `${ind(ctx)}else { ${fail} }` : `${ind(ctx)}${fail}`)\n }\n\n return { stmts, valueVar: outV, endVar: outE }\n}\n\nfunction emitDispatchKeyCondition(valueVar: string, key: string, caseInsensitive: boolean): string {\n if (!caseInsensitive) return `${valueVar} === ${JSON.stringify(key)}`\n const parts = [`${valueVar}.length === ${key.length}`]\n for (let i = 0; i < key.length; i++) {\n parts.push(foldEq(`${valueVar}.charCodeAt(${i})`, key.charCodeAt(i)))\n }\n return parts.join(' && ')\n}\n\nfunction emitDispatchMatcherCondition(\n ctx: Ctx,\n valueVar: string,\n matcher: NonNullable<Extract<ParserDef, { tag: 'dispatch' }>['matchers']>[number],\n): string {\n if (matcher.kind === 'matches') {\n const flags = matcher.caseInsensitive && !matcher.flags?.includes('i')\n ? `${matcher.flags ?? ''}i`\n : matcher.flags ?? ''\n return `${ensurePlainRegexDecl(ctx, matcher.value, flags)}.test(${valueVar})`\n }\n\n const text = matcher.value\n const parts = [`${valueVar}.length >= ${text.length}`]\n const offset = matcher.kind === 'endsWith' ? `${valueVar}.length - ${text.length}` : '0'\n for (let i = 0; i < text.length; i++) {\n parts.push(matcher.caseInsensitive\n ? foldEq(`${valueVar}.charCodeAt(${offset}${i === 0 ? '' : ` + ${i}`})`, text.charCodeAt(i))\n : `${valueVar}.charCodeAt(${offset}${i === 0 ? '' : ` + ${i}`}) === ${text.charCodeAt(i)}`)\n }\n return parts.join(' && ')\n}\n\n// \u2500\u2500 greedyClassify: run the super-regex once, classify by string equality \u2500\u2500\u2500\u2500\n// Single regex exec + O(n_literals) string comparisons. Zero backtracking.\nfunction emitGreedyClassify(\n def: Extract<ParserDef, { tag: 'choice' }>,\n superIndex: number,\n ctx: Ctx,\n pos: string,\n coverageBase?: string,\n): ER {\n const superParser = def.parsers[superIndex]!\n const regexDef = getCoreRegexDef(superParser)!\n\n // Hoist the regex (same mechanism as emitRegex, with dedup)\n const cleanFlags = 'y' + regexDef.flags.replace(/[gy]/g, '')\n const reKey = `${regexDef.source}/${cleanFlags}`\n let reVar = ctx.regexMap.get(reKey)\n if (reVar === undefined) {\n reVar = `${nsp(ctx)}_re${ctx.regexDecls.length}`\n ctx.regexDecls.push(`const ${reVar} = /${regexDef.source}/${cleanFlags}`)\n ctx.regexMap.set(reKey, reVar)\n }\n\n const matchV = v(ctx, '_gm')\n const wordV = v(ctx, '_gw')\n const endV = v(ctx, '_ge')\n const valV = v(ctx, '_gcv')\n\n // On no-match the interpreter returns the super-regex arm's failure verbatim\n // (choice.ts) \u2014 report only the regex's expected, not every classified literal.\n const regexExpected = JSON.stringify(deriveExpected(superParser))\n const superCoverageId = coverageBase === undefined ? undefined : `${coverageBase}${superIndex}`\n const stmts: string[] = [\n ...coverageAttempt(ctx, superCoverageId, pos),\n `${ind(ctx)}${reVar}.lastIndex = ${pos}`,\n `${ind(ctx)}const ${matchV} = ${reVar}.exec(input)`,\n ...emitIfFail(ctx, `${matchV} === null`, `${coverageFailureBacktrack(ctx, superCoverageId, pos, pos).join('; ')}; ${failArrBody(ctx, regexExpected, pos)}`),\n `${ind(ctx)}const ${wordV} = ${matchV}[0]`,\n `${ind(ctx)}const ${endV} = ${pos} + ${wordV}.length`,\n `${ind(ctx)}let ${valV}`,\n ]\n\n // For each literal arm: if word === literal, capture + transform chain\n let first = true\n for (let i = 0; i < def.parsers.length; i++) {\n if (i === superIndex) continue\n const p = def.parsers[i]!\n const litVal = getCoreLiteralValue(p)\n if (litVal === null) continue\n\n const kw = first ? 'if' : 'else if'\n first = false\n stmts.push(`${ind(ctx)}${kw} (${wordV} === ${JSON.stringify(litVal)}) {`)\n ctx.indent++\n const tR = emitTransformChain(p, JSON.stringify(litVal), endV, pos, ctx)\n stmts.push(...coverageFailureBacktrack(ctx, superCoverageId, pos, pos))\n stmts.push(...emitLeafCapture(ctx, JSON.stringify(litVal), pos, endV))\n stmts.push(...tR.stmts, `${ind(ctx)}${valV} = ${tR.valueVar}`, ...coverageHit(ctx, coverageBase === undefined ? undefined : `${coverageBase}${i}`, pos, endV))\n ctx.indent--\n stmts.push(`${ind(ctx)}}`)\n }\n\n // Regex arm: capture + transform chain for the matched word\n const rR = emitTransformChain(superParser, wordV, endV, pos, ctx)\n const regexKw = first ? 'if' : 'else'\n stmts.push(`${ind(ctx)}${regexKw} {`)\n ctx.indent++\n stmts.push(...emitLeafCapture(ctx, wordV, pos, endV), ...rR.stmts, `${ind(ctx)}${valV} = ${rR.valueVar}`, ...coverageHit(ctx, coverageBase === undefined ? undefined : `${coverageBase}${superIndex}`, pos, endV))\n ctx.indent--\n stmts.push(`${ind(ctx)}}`)\n return { stmts, valueVar: valV, endVar: endV }\n}\n\n// \u2500\u2500 literalsLongestFirst: sorted startsWith checks, no backtracking \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction emitLiteralsLongestFirst(\n def: Extract<ParserDef, { tag: 'choice' }>,\n sortedIndices: number[],\n allExpected: string,\n ctx: Ctx,\n pos: string,\n coverageBase?: string,\n): ER {\n const valV = v(ctx, '_llv')\n const endV = v(ctx, '_lle')\n const stmts: string[] = [`${ind(ctx)}let ${valV}, ${endV} = ${pos}`]\n\n let first = true\n for (const idx of sortedIndices) {\n const p = def.parsers[idx]!\n const litVal = getCoreLiteralValue(p)!\n const litLen = litVal.length\n\n // Emit the literal check as a direct condition (no IIFE/try-catch \u2014 literals never throw)\n const litCond = emitLiteralCondition(litVal, pos)\n const kw = first ? 'if' : 'else if'\n first = false\n\n const litEnd = `${pos} + ${litLen}`\n stmts.push(`${ind(ctx)}${kw} (${litCond}) {`)\n ctx.indent++\n const tR = emitTransformChain(p, JSON.stringify(litVal), litEnd, pos, ctx)\n stmts.push(\n ...coverageAttempt(ctx, coverageBase === undefined ? undefined : `${coverageBase}${idx}`, pos),\n ...emitLeafCapture(ctx, JSON.stringify(litVal), pos, litEnd),\n ...tR.stmts,\n `${ind(ctx)}${valV} = ${tR.valueVar}`,\n `${ind(ctx)}${endV} = ${litEnd}`,\n ...coverageHit(ctx, coverageBase === undefined ? undefined : `${coverageBase}${idx}`, pos, litEnd),\n )\n ctx.indent--\n stmts.push(`${ind(ctx)}}`)\n }\n stmts.push(...emitElseFail(ctx, failArrBody(ctx, allExpected, pos)))\n\n return { stmts, valueVar: valV, endVar: endV }\n}\n\n// \u2500\u2500 firstMatch fallback: PEG + auto-not inline rejection + per-arm gates \u2500\u2500\u2500\u2500\u2500\n// Uses labeled blocks (emitFallible) instead of IIFE+try/catch to avoid V8\n// deoptimization from exception-based control flow.\nfunction emitFirstMatch(\n def: Extract<ParserDef, { tag: 'choice' }>,\n ctx: Ctx,\n pos: string,\n coverageBase?: string,\n /**\n * `sharedPrefix` support: statements to emit BEFORE the arm loop (the once-only\n * recognition of the shared leading terminal), and a boolean condition ANDed into\n * every arm's first-char guard so no arm is entered when that prefix did not match\n * (the arms REPLAY the prefix rather than re-scanning it \u2014 see emitSharedPrefix).\n * Both undefined on the ordinary firstMatch path \u2192 byte-identical output.\n */\n preStmts?: string[],\n armGuardPrefix?: string,\n): ER {\n const resValV = v(ctx, '_crv')\n const resEndV = v(ctx, '_cre')\n const resOkV = v(ctx, '_crok')\n const codeV = v(ctx, '_chcode')\n // For a TOTAL failure we report the concatenation of each tried arm's deep\n // `expected` (interpreter parity). To keep the hot success path allocation-free\n // (a choice that ultimately matches must NOT pay for error bookkeeping), each\n // failed arm snapshots its expected into a scalar slot (a pointer store, no\n // array/spread). Leaf arms that fail-at-start use a hoisted static const;\n // composite arms snapshot `_ctx._fx`. The concat array is materialized only in\n // the rare all-arms-failed branch. Auto-not-rejected arms leave their slot\n // unset \u2014 matching choice.ts.\n const slots = def.parsers.map(() => v(ctx, '_cfx'))\n // Auto-not arms parse successfully but are semantically rejected only once a\n // later arm wins. Keep that pending set in coverage mode so emitted trace\n // ordering matches the interpreter wrapper exactly.\n const autoRejectedV = coverageBase === undefined ? undefined : v(ctx, '_carej')\n const ind0 = ind(ctx)\n const stmts: string[] = [\n `${ind0}let ${resValV}, ${resEndV} = ${pos}, ${resOkV} = false`,\n `${ind0}let ${slots.join(', ')}`,\n ...(autoRejectedV === undefined ? [] : [`${ind0}const ${autoRejectedV} = []`]),\n `${ind0}const ${codeV} = ${pos} < input.length ? (input.codePointAt(${pos}) ?? -1) : -1`,\n ]\n if (preStmts) stmts.push(...preStmts)\n\n for (let i = 0; i < def.parsers.length; i++) {\n const p = def.parsers[i]!\n const gate = def.gates[i]\n const autoNot = def.autoNot[i]\n const atStart = failsAtStart(p)\n const staticFx = armStaticExpected(ctx, p)\n // A named rule REF in linkable mode: defer its first-char guard to fuse time\n // (the rule can be overridden). Emit a placeholder that fusedBody() rewrites\n // with the WINNING rule's first-set \u2014 `true` (always-try) if left unresolved.\n const deferRuleName = ctx.deferFirstSetRefs\n ? (p as unknown as { _ruleName?: string })._ruleName\n : undefined\n // Non-defer (monolithic, refs are final): if the arm's CACHED first-set is `any`\n // only because it was built over `ref()`s (which cache `any()` at construction),\n // recover a real guard from the DEEP, ref-resolving first-set. Sound here because\n // refs can't be overridden; the compose path defers instead (above).\n const baseFsGuard = deferRuleName !== undefined\n ? `/*@FS:${deferRuleName}:${codeV}@*/true`\n : needsFirstSetGuard(p)\n ? firstSetCond(codeV, p._meta.firstSet)\n : (() => {\n if (p._meta.firstSet.kind !== 'any' || matchesEmpty(p)) return null\n const deep = firstSetOf(p)\n return deep.kind === 'ranges' ? firstSetCond(codeV, deep) : null\n })()\n // sharedPrefix: every arm additionally requires the once-recognized prefix to\n // have matched (`armGuardPrefix`), so a prefix miss skips ALL arms \u2192 each slot\n // takes its `staticFx` (== the prefix expected) exactly as the un-factored\n // firstMatch would, and a prefix hit lets the arm run and REPLAY the prefix.\n const fsGuard = armGuardPrefix === undefined\n ? baseFsGuard\n : baseFsGuard === null ? armGuardPrefix : `${armGuardPrefix} && (${baseFsGuard})`\n\n // Gate: register predicate in mapFns; condition guards entire arm attempt\n let gateCond: string | null = null\n if (gate) {\n const gateIdx = ctx.mapFns.length\n ctx.mapFns.push(gate as (v: unknown, span: unknown) => unknown)\n // Macro path: inline the captured gate source (def.gateSrcs[i]); runtime\n // compile() has no source \u2192 null (closure in mapFns drives it). Parallel-\n // length invariant preserved either way.\n ctx.mapFnSrcs.push(def.gateSrcs?.[i] ?? null)\n gateCond = `${mfRef(ctx)}[${gateIdx}](_ctx.state)`\n }\n const skipCond = gateCond ? `!${resOkV} && ${gateCond}` : `!${resOkV}`\n\n const armHasAutoNot = !!(autoNot && autoNot.length > 0)\n const armNeedsRollback = ctx.capturing &&\n (mayLeavePartialCapture(p) || (armHasAutoNot && capturesLeaf(p)))\n const armNeedsFieldRollback = armNeedsRollback && parserHasOwnFields(p)\n const armMayRecordError = mayRecordRecoveryError(p, !!ctx.recovery)\n const markLeaves = armNeedsRollback ? v(ctx, '_cml') : null\n const markRaw = armNeedsRollback ? v(ctx, '_cmr') : null\n const markTl = armNeedsRollback ? v(ctx, '_cmtl') : null\n const markLog = armNeedsRollback ? v(ctx, '_cmlg') : null\n const markRootLog = ctx.activeTrivia && hasSelectedRootTrivia(ctx) ? v(ctx, '_cmlrg') : null\n const markFields = armNeedsFieldRollback ? v(ctx, '_cmf') : null\n const markErrors = armMayRecordError ? v(ctx, '_cme') : null\n const captureRollback = markLeaves\n ? captureRestoreBody(ctx, markLeaves, markRaw!, markTl!, markLog!, markFields, markRootLog)\n : ''\n const rootRollback = markRootLog && !markLeaves\n ? `if (_ctx._rootTriviaLog && _ctx._rootTriviaLog.length !== ${markRootLog}) _ctx._rootTriviaLog.length = ${markRootLog}`\n : ''\n const errorRollback = markErrors\n ? `if (_ctx._errors && _ctx._errors.length !== ${markErrors}) _ctx._errors.length = ${markErrors}`\n : ''\n const rollback = [captureRollback, rootRollback, errorRollback].filter(Boolean).join('; ')\n const failSlot = atStart ? staticFx : '_ctx._fx'\n\n stmts.push(`${ind0}if (${skipCond}) {`)\n if (fsGuard) stmts.push(`${ind(ctx)}if (${fsGuard}) {`)\n ctx.indent += fsGuard ? 2 : 1\n if (coverageBase !== undefined) stmts.push(`${ind(ctx)}_ctx._grammarTrace?.write({ id: ${JSON.stringify(`${coverageBase}${i}`)}, phase: 'attempt', offset: ${pos} })`)\n\n if (markLeaves) {\n stmts.push(\n `${ind(ctx)}const ${markLeaves} = _ctx._cstLeaves?.length ?? 0`,\n `${ind(ctx)}const ${markRaw} = _ctx._cstRawChildren?.length ?? 0`,\n `${ind(ctx)}const ${markTl} = _ctx._cstTriviaLog?.length ?? 0`,\n `${ind(ctx)}const ${markLog} = _ctx._triviaLog?.length ?? 0`,\n ...(markFields ? [`${ind(ctx)}const ${markFields} = _ctx._fields?.length ?? 0`] : []),\n )\n }\n if (markRootLog) stmts.push(`${ind(ctx)}const ${markRootLog} = _ctx._rootTriviaLog?.length ?? 0`)\n if (markErrors) stmts.push(`${ind(ctx)}const ${markErrors} = _ctx._errors?.length ?? 0`)\n const arm = emitFallible(p, ctx, pos, atStart)\n const { stmts: armStmts, okVar, valVar, endVar } = arm\n stmts.push(...armStmts)\n\n if (autoNot && autoNot.length > 0) {\n const anCode = v(ctx, '_anc')\n const rejectCond = autoNot.map(check =>\n check.kind === 'firstSet'\n ? firstSetCond(anCode, check.set)\n : `input.startsWith(${JSON.stringify(check.value)}, ${endVar})`\n ).join(' || ')\n stmts.push(`${ind(ctx)}if (${okVar}) {`)\n stmts.push(`${ind(ctx)} const ${anCode} = ${endVar} < input.length ? input.charCodeAt(${endVar}) : -1`)\n stmts.push(`${ind(ctx)} if (!(${rejectCond})) {`)\n stmts.push(`${ind(ctx)} ${resValV} = ${valVar}`)\n stmts.push(`${ind(ctx)} ${resEndV} = ${endVar}`)\n stmts.push(`${ind(ctx)} ${resOkV} = true`)\n if (autoRejectedV !== undefined) {\n stmts.push(`${ind(ctx)} for (const _rejectedId of ${autoRejectedV}) { _ctx._grammarTrace?.write({ id: _rejectedId, phase: 'failure', offset: ${pos} }); _ctx._grammarTrace?.write({ id: _rejectedId, phase: 'backtrack', offset: ${pos} }) }`)\n }\n stmts.push(...coverageHit(ctx, coverageBase === undefined ? undefined : `${coverageBase}${i}`, pos, endVar))\n stmts.push(`${ind(ctx)} }`)\n if (autoRejectedV !== undefined) {\n stmts.push(`${ind(ctx)} else { ${autoRejectedV}.push(${JSON.stringify(`${coverageBase}${i}`)}) }`)\n }\n stmts.push(`${ind(ctx)}}`)\n stmts.push(`${ind(ctx)}else { ${slots[i]} = ${failSlot}; ${coverageBase === undefined ? '' : `_ctx._grammarTrace?.write({ id: ${JSON.stringify(`${coverageBase}${i}`)}, phase: 'failure', offset: ${atStart ? pos : '_ctx._fe'} }); _ctx._grammarTrace?.write({ id: ${JSON.stringify(`${coverageBase}${i}`)}, phase: 'backtrack', offset: ${pos} });`} }`)\n if (rollback) stmts.push(`${ind(ctx)}if (!${resOkV}) { ${rollback} }`)\n if (arm.mayCommit) stmts.push(`${ind(ctx)}if (!${resOkV} && _ctx._fc) ${committedFailBody(ctx)}`)\n } else {\n const rejectedFlush = autoRejectedV === undefined\n ? ''\n : `; for (const _rejectedId of ${autoRejectedV}) { _ctx._grammarTrace?.write({ id: _rejectedId, phase: 'failure', offset: ${pos} }); _ctx._grammarTrace?.write({ id: _rejectedId, phase: 'backtrack', offset: ${pos} }) }`\n stmts.push(`${ind(ctx)}if (${okVar}) { ${resValV} = ${valVar}; ${resEndV} = ${endVar}; ${resOkV} = true${coverageBase === undefined ? '' : `${rejectedFlush}; _ctx._grammarCoverage?.(${JSON.stringify(`${coverageBase}${i}`)}); _ctx._grammarTrace?.write({ id: ${JSON.stringify(`${coverageBase}${i}`)}, phase: 'selected', offset: ${pos}, end: ${endVar} }); _ctx._grammarTrace?.write({ id: ${JSON.stringify(`${coverageBase}${i}`)}, phase: 'success', offset: ${pos}, end: ${endVar} })`} }`)\n stmts.push(`${ind(ctx)}else { ${slots[i]} = ${failSlot}${rollback ? `; ${rollback}` : ''}${coverageBase === undefined ? '' : `; _ctx._grammarTrace?.write({ id: ${JSON.stringify(`${coverageBase}${i}`)}, phase: 'failure', offset: ${atStart ? pos : '_ctx._fe'} }); _ctx._grammarTrace?.write({ id: ${JSON.stringify(`${coverageBase}${i}`)}, phase: 'backtrack', offset: ${pos} })`} }`)\n if (arm.mayCommit) stmts.push(`${ind(ctx)}if (!${resOkV} && _ctx._fc) ${committedFailBody(ctx)}`)\n }\n\n ctx.indent -= fsGuard ? 2 : 1\n if (fsGuard) stmts.push(`${ind(ctx)}} else { ${slots[i]} = ${staticFx} }`)\n stmts.push(`${ind0}}`)\n }\n const concatExpr = `[${slots.map(s => `...(${s} || [])`).join(', ')}]`\n stmts.push(...emitIfFail(ctx, `!${resOkV}`, failArrBody(ctx, concatExpr, pos, false)))\n return { stmts, valueVar: resValV, endVar: resEndV }\n}\n\n/**\n * True when `p` would be emitted as a CALL into a separate function body rather than\n * inline \u2014 a lazy/ref, a named rule (linkable/fused form), an already-hoisted parser,\n * or a shared subtree that the lazy-usage pre-pass will hoist to a `_pf` function.\n * Mirrors the hoist decision in emit() (the top-level `_pf` gate + emitLazy).\n */\nfunction emitsAsNamedFn(p: Combinator<unknown>, ctx: Ctx): boolean {\n if (p._def.tag === 'lazy') return true\n if (ctx.ruleNames?.has(p)) return true\n if (ctx.namedParsers.has(p)) return true\n const usage = ctx.lazyUsage\n return !!usage && !ctx.noHoist && !ctx.capAsTrivia && isHoistableTag(p._def.tag)\n && (usage.counts.get(p) ?? 0) > 1 && (usage.sizes.get(p) ?? 0) >= HOIST_MIN_SUBTREE\n}\n\n/**\n * True when a routed-bearing branch must cross a generated function boundary.\n *\n * emitDispatchCombinator suppresses ordinary shared-subtree hoisting while\n * emitting routed branch tails, so same-body `routed()` sites can use locals.\n * Private single-use non-recursive lazy refs mirror emitLazy and inline through\n * this analysis. Named rules, recursive/multi-use refs, and already-generated\n * private functions still cross function bodies; those need the `_ctx._routed`\n * bridge.\n */\nfunction routedNeedsContextBridge(p: Combinator<unknown>, ctx: Ctx, seen: Set<Combinator<unknown>> = new Set()): boolean {\n if (seen.has(p)) return false\n seen.add(p)\n if (p._def.tag === 'lazy') {\n if (ctx.ruleNames?.has(p) || ctx.namedParsers.has(p)) return parserUsesRouted(p)\n const usage = ctx.lazyUsage\n if (usage && (usage.counts.get(p) ?? 0) <= 1 && !usage.recursive.has(p)) {\n try { return routedNeedsContextBridge(p._def.thunk(), ctx, seen) }\n catch { return parserUsesRouted(p) }\n }\n return parserUsesRouted(p)\n }\n if (ctx.ruleNames?.has(p)) return parserUsesRouted(p)\n if (ctx.namedParsers.has(p)) return parserUsesRouted(p)\n const d = p._def\n if (d.tag === 'dispatch') return false\n if (d.tag === 'withCtx') return parserUsesRouted(d.parser)\n return childrenOf(d).some(child => routedNeedsContextBridge(child, ctx, seen))\n}\n\n/**\n * sharedPrefix same-scope guard. The strategy recognizes the shared prefix once into\n * a variable declared in the CHOICE's function, then replays it at each arm's leading\n * term. That only works when the choice and every grouped arm \u2014 through its\n * node/parser/transform/label wrappers down to the shared sequence \u2014 compile into the\n * SAME function body. On the linkable/fused path (and with shared-subtree hoisting) an\n * arm can be emitted into a separate `_pf`/`_r_<Name>` function, which would reference\n * the pre-scan variable out of scope \u2192 a runtime ReferenceError. Return false there so\n * the choice conservatively falls back to the byte-identical firstMatch.\n */\nfunction armReplayInScope(arm: Combinator<unknown>, ctx: Ctx): boolean {\n let p = arm\n for (;;) {\n if (emitsAsNamedFn(p, ctx)) return false\n const d = p._def\n if (d.tag === 'node' || d.tag === 'grammar' || d.tag === 'transform' || d.tag === 'label') {\n p = (d as { parser: Combinator<unknown> }).parser\n continue\n }\n return d.tag === 'sequence'\n }\n}\n\n// \u2500\u2500 sharedPrefix: recognize a common leading literal/regex ONCE, then REPLAY \u2500\u2500\n// Every arm shares the same concrete leading terminal `prefix` (reached by peeling\n// node/parser(grammar)/transform/label wrappers down to the core sequence). We\n// recognize `prefix` a SINGLE time up front (recognition-only \u2014 no leaf capture),\n// then emit each arm through the ordinary emitFirstMatch: an intercept in emit()\n// makes each arm's own leading-terminal instance REPLAY the once-recognized end +\n// value (and push its leaf into whatever capture scope the arm is in \u2014 e.g. the\n// arm's own node() buffer) instead of re-scanning. Because the whole arm (node,\n// parser-trivia, sequence tail, reducer, capture rollback) is emitted by the\n// unchanged emitFirstMatch machinery, the reducer's children[0], spans, trivia\n// logs, and failure `expected` sets stay byte-identical; only the prefix SCAN is\n// shared. The per-arm first-char guard is ANDed with the prefix-matched flag so a\n// prefix miss skips all arms and yields firstMatch's prefix-expected-per-arm set.\nfunction emitSharedPrefix(\n def: Extract<ParserDef, { tag: 'choice' }>,\n strategy: Extract<ChoiceStrategy, { tag: 'sharedPrefix' }>,\n ctx: Ctx,\n pos: string,\n): ER {\n const { prefix, members } = strategy\n\n // Recognize the shared prefix ONCE, recognition-only (capturing suppressed so no\n // leaf reaches the enclosing scope \u2014 each arm replays the leaf into its OWN scope).\n // `swallow=false` keeps recordFail on, so a prefix miss records `_ctx._fx` = the\n // prefix expected, exactly as an un-factored arm's leading term would.\n const savedCapturing = ctx.capturing\n ctx.capturing = false\n const pfx = emitFallible(prefix, ctx, pos, false)\n ctx.capturing = savedCapturing\n\n // Register the replay for EACH arm's own leading-terminal instance (all members'\n // leading terms are structurally identical to `prefix`; each is a distinct object\n // reached during that arm's emission).\n const map = (ctx.replayPrefix ??= new Map())\n const keys: Combinator<unknown>[] = []\n for (const i of members) {\n // Shared with the detector (choice.ts) so codegen groups exactly what detection\n // grouped \u2014 peel node/parser/transform/label to the core sequence's first term.\n const term0 = leadingTermOfArm(def.parsers[i]!)\n if (term0 === null) continue\n map.set(term0, { valVar: pfx.valVar, endVar: pfx.endVar })\n keys.push(term0)\n }\n\n const r = emitFirstMatch(def, ctx, pos, undefined, pfx.stmts, pfx.okVar)\n\n for (const k of keys) map.delete(k)\n return r\n}\n\n/**\n * Replay a shared prefix's already-recognized leaf: emit no scan, reuse the\n * once-computed value + end, and push the leaf into the active capture scope. This\n * reproduces the leading terminal's SUCCESS path byte-for-byte (same value string,\n * same {pos,end} span, same leaf object) \u2014 the arms are only ever reached when the\n * prefix matched, so the scan/failure path is never needed here.\n */\nfunction emitReplayPrefixLeaf(ctx: Ctx, pos: string, replay: { valVar: string; endVar: string }): ER {\n const vv = v(ctx)\n return {\n stmts: [\n `${ind(ctx)}const ${vv} = ${replay.valVar}`,\n ...emitLeafCapture(ctx, vv, pos, replay.endVar),\n ],\n valueVar: vv,\n endVar: replay.endVar,\n }\n}\n\nfunction emitNonDisjoint(\n def: Extract<ParserDef, { tag: 'choice' }>,\n strategy: ChoiceStrategy,\n allExpected: string,\n ctx: Ctx,\n pos: string,\n coverageBase?: string,\n): ER {\n if (strategy.tag === 'greedyClassify')\n return emitGreedyClassify(def, strategy.superIndex, ctx, pos, coverageBase)\n if (strategy.tag === 'literalsLongestFirst')\n return emitLiteralsLongestFirst(def, strategy.sortedIndices, allExpected, ctx, pos, coverageBase)\n if (strategy.tag === 'sharedPrefix') {\n // The shared prefix is always a CONCRETE literal/regex (the detector never\n // groups arms whose leading term is \u2014 or reaches through \u2014 a ref), so it is\n // never overridable and safe to scan once even on the linkable/fused\n // (`deferFirstSetRefs`) path: only the once-recognized prefix SCAN is shared,\n // while each arm's residual terms (which MAY contain deferred refs) continue\n // through the ordinary emitFirstMatch/emitFallible emission that already\n // resolves ref first-sets at fuse time. This is the mode jess actually compiles\n // in, so gating it off here made the whole strategy inert for real grammars.\n // Coverage tracing and tolerant-recovery still carry extra per-arm bookkeeping\n // the rewrite doesn't reproduce, so fall back to the byte-identical firstMatch\n // there (sharedPrefix IS a firstMatch specialization, so the fallback is a\n // semantic no-op). And it only fires when every grouped arm compiles into the\n // SAME function scope as the choice \u2014 otherwise the once-recognized prefix's\n // replay variable would be referenced out of scope from an arm hoisted into its\n // own function (a ReferenceError on the fused/linkable path).\n if (!_forceNoSharedPrefix && coverageBase === undefined && !ctx.recovery\n && strategy.members.every(i => armReplayInScope(def.parsers[i]!, ctx)))\n return emitSharedPrefix(def, strategy, ctx, pos)\n return emitFirstMatch(def, ctx, pos, coverageBase)\n }\n return emitFirstMatch(def, ctx, pos, coverageBase)\n}\n\n// \u2500\u2500 helpers for emitGreedyClassify / emitLiteralsLongestFirst \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Apply transform chain only \u2014 no parsing, value already known. */\n/** Register a map fn, INTERNING by source so identical callbacks (e.g. every\n * balanced()'s merge closure) share one `_mf` slot. Relies on `mapFns` and\n * `mapFnSrcs` staying parallel \u2014 gate/guard/withCtx push a `null` source alongside\n * their `mapFns` entry to preserve that invariant, so interning keeps firing after\n * one of them (a `null` never matches a real source, so their slots are never\n * aliased). */\nfunction pushMapFn(ctx: Ctx, fn: Ctx['mapFns'][number], src: string | null): number {\n if (src !== null && ctx.mapFns.length === ctx.mapFnSrcs.length) {\n const hit = ctx.mapFnSrcs.indexOf(src)\n if (hit !== -1) return hit\n }\n const idx = ctx.mapFns.length\n ctx.mapFns.push(fn)\n ctx.mapFnSrcs.push(src)\n return idx\n}\n\nfunction emitTransformChain(p: Combinator<unknown>, baseValue: string, endV: string, startPos: string, ctx: Ctx): ER {\n const def = p._def\n if (def.tag === 'transform') {\n const innerR = emitTransformChain(def.parser, baseValue, endV, startPos, ctx)\n const fnIdx = pushMapFn(ctx, def.fn, def.fnSrc ?? null)\n const vv = v(ctx)\n return {\n stmts: [...innerR.stmts, `${ind(ctx)}const ${vv} = ${mfRef(ctx)}[${fnIdx}](${innerR.valueVar}, { start: ${startPos}, end: ${endV} })`],\n valueVar: vv,\n endVar: endV,\n }\n }\n return { stmts: [], valueVar: baseValue, endVar: endV }\n}\n\n/** Emit a condition that is true iff input matches `litVal` at `pos`. No side effects. */\nfunction emitLiteralCondition(litVal: string, pos: string): string {\n const len = litVal.length\n if (len === 0) return 'true'\n if (len > CHARCODE_CHAIN_MAX) return `input.startsWith(${JSON.stringify(litVal)}, ${pos})`\n // Short string: charCodeAt checks (same as emitLit)\n const checks = [`${pos} + ${len} <= input.length`]\n for (let i = 0; i < len; i++) {\n const code = litVal.codePointAt(i)!\n checks.push(`input.charCodeAt(${pos}${i > 0 ? ` + ${i}` : ''}) === ${code}`)\n }\n return checks.join(' && ')\n}\n\nfunction emitMany(def: Extract<ParserDef, { tag: 'many' | 'oneOrMore' }>, ctx: Ctx, pos: string): ER {\n // `valueUnused` (markUnusedValues): the array is never observed (this many sits\n // under a node() that builds from captured children). Skip building it \u2014 the\n // loop still runs and items self-capture. Value is `undefined` (unread).\n const wantValue = !def.valueUnused\n const arrV = v(ctx, '_arr')\n const curV = v(ctx, '_cur')\n const stmts: string[] = [\n ...(wantValue ? [`${ind(ctx)}const ${arrV} = []`] : []),\n `${ind(ctx)}let ${curV} = ${pos}`,\n ]\n // Capture this list's recovery sync at ENTRY: a nested element sequence will\n // clobber `_ctx._sync` (and doesn't restore it, unlike the interpreter's\n // finally), so the loop must read its own saved sync, not the live one.\n const mySyncV = ctx.recovery ? v(ctx, '_mysy') : ''\n if (ctx.recovery) stmts.push(`${ind(ctx)}const ${mySyncV} = _ctx._sync`)\n\n // `min` MANDATORY matches, inlined with early-return on failure. min 0/1 is the\n // whole world today, so the loop runs 0 or 1 times and the output is unchanged;\n // `many(x, { min: n })` simply inlines n of them.\n for (let i = 0; i < def.min; i++) {\n const firstR = emit(def.parser, ctx, curV)\n stmts.push(...firstR.stmts)\n if (wantValue) stmts.push(`${ind(ctx)}${arrV}.push(${firstR.valueVar})`)\n stmts.push(`${ind(ctx)}${curV} = ${firstR.endVar}`)\n }\n\n // `max` \u2014 a bounded repeat needs a live item count. `wantValue` lists can read\n // `arr.length`; a value-elided one needs its own counter. Emitted ONLY when a\n // finite max was asked for, so the unbounded default stays byte-identical.\n const maxV = def.max === undefined ? null : (wantValue ? `${arrV}.length` : v(ctx, '_cnt'))\n if (maxV !== null && !wantValue) stmts.push(`${ind(ctx)}let ${maxV} = ${def.min}`)\n\n stmts.push(`${ind(ctx)}while (${curV} < input.length) {`)\n ctx.indent++\n if (maxV !== null) stmts.push(`${ind(ctx)}if (${maxV} >= ${def.max}) break`)\n\n // Mirror interpreter repeat.ts \u2014 skip trivia before each iteration. In capture\n // mode the trivia is committed to rawChildren immediately and rolled back\n // (array truncation) if the following item doesn't materialize.\n let itemPos = curV\n let rollback = ''\n if (ctx.activeTrivia) {\n if (ctx.capturing) {\n const capFn = ensureTriviaCaptureFn(ctx)\n const markV = v(ctx, '_mk')\n const markTl = v(ctx, '_mktl')\n const markLog = v(ctx, '_mklg')\n const markRootLog = hasSelectedRootTrivia(ctx) ? v(ctx, '_mkrlg') : null\n const npV = v(ctx, '_np')\n stmts.push(\n `${ind(ctx)}const ${markV} = _ctx._cstRawChildren ? _ctx._cstRawChildren.length : 0`,\n `${ind(ctx)}const ${markTl} = _ctx._cstTriviaLog ? _ctx._cstTriviaLog.length : 0`,\n `${ind(ctx)}const ${markLog} = _ctx._triviaLog ? _ctx._triviaLog.length : 0`,\n ...(markRootLog ? [`${ind(ctx)}const ${markRootLog} = _ctx._rootTriviaLog ? _ctx._rootTriviaLog.length : 0`] : []),\n `${ind(ctx)}const ${npV} = ${capFn}(input, ${curV}, _ctx, 1)`,\n ...emitLineTrack(ctx, curV, npV),\n )\n itemPos = npV\n rollback = `if (_ctx._cstRawChildren && _ctx._cstRawChildren.length !== ${markV}) _ctx._cstRawChildren.length = ${markV}; if (_ctx._cstTriviaLog && _ctx._cstTriviaLog.length !== ${markTl}) _ctx._cstTriviaLog.length = ${markTl}; if (_ctx._triviaLog && _ctx._triviaLog.length !== ${markLog}) _ctx._triviaLog.length = ${markLog};${markRootLog ? ` if (_ctx._rootTriviaLog && _ctx._rootTriviaLog.length !== ${markRootLog}) _ctx._rootTriviaLog.length = ${markRootLog};` : ''} `\n } else {\n const trivFn = ensureTriviaFn(ctx)\n const markRootLog = hasSelectedRootTrivia(ctx) ? v(ctx, '_mkrlg') : null\n const npV = v(ctx, '_np')\n stmts.push(\n ...(markRootLog ? [`${ind(ctx)}const ${markRootLog} = _ctx._rootTriviaLog ? _ctx._rootTriviaLog.length : 0`] : []),\n `${ind(ctx)}const ${npV} = ${trivFn}(input, ${curV}, _ctx, ${hasSelectedRootTrivia(ctx) ? '_ctx._rootTriviaLog !== undefined ? 2 : 0' : '0'})`,\n ...emitLineTrack(ctx, curV, npV),\n )\n itemPos = npV\n rollback = markRootLog ? `if (_ctx._rootTriviaLog && _ctx._rootTriviaLog.length !== ${markRootLog}) _ctx._rootTriviaLog.length = ${markRootLog}; ` : ''\n }\n }\n\n // First-set body fast-path: if the next code point can't start the loop body,\n // this iteration can only fail \u2014 stop the loop with a single code-point\n // comparison instead of a full body attempt-then-fail. Sound exactly when the\n // body has a discrete (non-`any`) first set and can't match empty\n // (`needsFirstSetGuard`), so a first-set miss is a guaranteed non-match; it\n // mirrors the first-set arm guard the choice codegen already emits. Skipped\n // under `ctx.recovery`: there a swallowed body failure still feeds the\n // completions probe (`probeUpdate` fires inside swallowers), so the IDE build\n // keeps recording the body as a candidate at a non-matching char. A normal\n // parse records nothing on a swallowed body failure (`recordFail` off for many),\n // so skipping the attempt is behavior-identical there \u2014 pure speedup.\n //\n // Skipped when the body already `failsAtStart` (a bare literal/regex/keywords\n // leaf): its own generated code leads with the identical first-char check, so\n // the guard would be pure redundancy and would perturb byte-identical leaf-body\n // output. The win is for COMPOSITE bodies (sequence/node) that do setup before\n // discovering a first-char mismatch \u2014 e.g. `many(sequence(op, atom))`.\n if (!ctx.recovery && !ctx.coverage && !failsAtStart(def.parser) && needsFirstSetGuard(def.parser)) {\n const lcV = v(ctx, '_lc')\n stmts.push(\n `${ind(ctx)}const ${lcV} = ${itemPos} < input.length ? (input.codePointAt(${itemPos}) ?? -1) : -1`,\n `${ind(ctx)}if (!(${firstSetCond(lcV, def.parser._meta.firstSet)})) { ${rollback}break }`,\n )\n }\n\n const iter = emitFallible(def.parser, ctx, itemPos, true)\n const { stmts: iterStmts, okVar: iterOk, valVar: iterVal, endVar: iterEnd } = iter\n stmts.push(...iterStmts)\n if (ctx.recovery) {\n // Tolerant recovery (dormant unless `_ctx._tolerant`): an element that fails \u2014\n // and isn't sitting on the inferred sync token \u2014 is skipped to that token via\n // the SAME interpreter recoverScan (parity), emitted as a ParseError; the loop\n // continues. Zero-width progress is still a clean stop.\n const rrV = v(ctx, '_rr')\n const exp = hoistExpected(ctx, deriveExpectedArr([def.parser]))\n stmts.push(\n `${ind(ctx)}if (!${iterOk}) {`,\n `${ind(ctx)} ${rollback}if (_ctx._tolerant && ${mySyncV} !== undefined && !_ctx._rec.at(${mySyncV}, input, ${itemPos}, _ctx)) {`,\n `${ind(ctx)} const ${rrV} = _ctx._rec.scan(input, ${itemPos}, _ctx, ${mySyncV}, ${exp})`,\n ...(wantValue ? [`${ind(ctx)} ${arrV}.push(${rrV}.error)`] : maxV !== null ? [`${ind(ctx)} ${maxV}++`] : []),\n `${ind(ctx)} _ctx._rec.capture(_ctx, ${rrV}.error)`,\n `${ind(ctx)} ${curV} = ${rrV}.end`,\n `${ind(ctx)} continue`,\n `${ind(ctx)} }`,\n `${ind(ctx)} break`,\n `${ind(ctx)}}`,\n `${ind(ctx)}if (${iterEnd} <= ${itemPos}) { ${rollback}break }`,\n )\n } else {\n stmts.push(`${ind(ctx)}if (!${iterOk}) { ${rollback}${iter.mayCommit ? `if (_ctx._fc) ${committedFailBody(ctx)}; ` : ''}break }`)\n stmts.push(`${ind(ctx)}if (${iterEnd} <= ${itemPos}) { ${rollback}break }`)\n }\n if (wantValue) stmts.push(`${ind(ctx)}${arrV}.push(${iterVal})`)\n else if (maxV !== null) stmts.push(`${ind(ctx)}${maxV}++`)\n stmts.push(`${ind(ctx)}${curV} = ${iterEnd}`)\n ctx.indent--\n stmts.push(`${ind(ctx)}}`)\n\n return { stmts, valueVar: wantValue ? arrV : 'undefined', endVar: curV }\n}\n\nfunction emitOptional(def: Extract<ParserDef, { tag: 'optional' }>, ctx: Ctx, pos: string): ER {\n const valV = v(ctx, '_opt')\n const endV = v(ctx, '_opte')\n\n const inner = emitFallible(def.parser, ctx, pos, true)\n const { stmts: lblStmts, okVar, valVar, endVar } = inner\n\n const ind0 = ind(ctx)\n const stmts = [\n ...lblStmts,\n ...(inner.mayCommit ? [`${ind0}if (!${okVar} && _ctx._fc) ${committedFailBody(ctx)}`] : []),\n `${ind0}const ${valV} = ${okVar} ? ${valVar} : null`,\n `${ind0}const ${endV} = ${okVar} ? ${endVar} : ${pos}`,\n ]\n return { stmts, valueVar: valV, endVar: endV }\n}\n\n/** Transactional parser arm: emitFallible owns the private failure label and\n * structural rollback; Attempt only re-anchors the diagnostic at its entry. */\nfunction emitAttempt(p: Combinator<unknown>, def: Extract<ParserDef, { tag: 'attempt' }>, ctx: Ctx, pos: string): ER {\n const inner = emitFallible(def.parser, ctx, pos)\n // Unlike an ordinary fallible sub-parser, attempt is a semantic transaction:\n // every framework-owned side effect from its rejected branch disappears. Keep\n // this boundary here (rather than teaching emitFallible different semantics),\n // because ordinary sequences deliberately retain their diagnostic trivia.\n const leaves = v(ctx, '_atl')\n const raw = v(ctx, '_atr')\n const trivia = v(ctx, '_att')\n const log = v(ctx, '_atg')\n const rootLog = hasSelectedRootTrivia(ctx) ? v(ctx, '_atrg') : null\n const fields = v(ctx, '_atf')\n const errors = v(ctx, '_ate')\n const rollback = `if (_ctx._cstLeaves && _ctx._cstLeaves.length !== ${leaves}) _ctx._cstLeaves.length = ${leaves}; if (_ctx._cstRawChildren && _ctx._cstRawChildren.length !== ${raw}) _ctx._cstRawChildren.length = ${raw}; if (_ctx._cstTriviaLog && _ctx._cstTriviaLog.length !== ${trivia}) _ctx._cstTriviaLog.length = ${trivia}; if (_ctx._triviaLog && _ctx._triviaLog.length !== ${log}) _ctx._triviaLog.length = ${log};${rootLog ? ` if (_ctx._rootTriviaLog && _ctx._rootTriviaLog.length !== ${rootLog}) _ctx._rootTriviaLog.length = ${rootLog};` : ''} if (_ctx._fields && _ctx._fields.length !== ${fields}) _ctx._fields.length = ${fields}; if (_ctx._errors && _ctx._errors.length !== ${errors}) _ctx._errors.length = ${errors}`\n const traceId = ctx.coverage?.plan.attempts.get(p)\n const traceRollback = traceId === undefined ? '' : ` _ctx._grammarTrace?.write({ id: ${JSON.stringify(traceId)}, phase: 'rollback', offset: ${pos} });`\n // First-set fail-fast before the transaction marks. `attempt(inner)` reads six\n // rollback marks before `inner` recognizes anything; a non-dispatching caller\n // (e.g. `choice(attempt(MixinReference), \u2026)` on the non-disjoint majority) enters\n // it at every position and rejects on the first byte. Bail on a first-set miss\n // before the marks, re-anchoring the failure at `pos` like the transaction's own\n // reject, and recording the same static `expected` the inner start-fail would.\n // Skipped under recovery (the completions probe still wants the swallowed failure).\n const preGuard: string[] = []\n if (!ctx.recovery && !ctx.coverage && needsFirstSetGuard(def.parser)) {\n const gcV = v(ctx, '_agc')\n const gExp = armStaticExpected(ctx, def.parser)\n const gFail = ctx.failLabel\n ? `{ _ctx._fe = ${pos};${ctx.recordFail ? ` _ctx._fx = ${gExp};` : ''} break ${ctx.failLabel} }`\n : `{ _ctx._fe = ${pos}; ${failReturnArr(ctx, gExp, pos)} }`\n preGuard.push(\n `${ind(ctx)}const ${gcV} = ${pos} < input.length ? (input.codePointAt(${pos}) ?? -1) : -1`,\n `${ind(ctx)}if (!(${firstSetCond(gcV, def.parser._meta.firstSet)})) ${gFail}`,\n )\n }\n return {\n stmts: [\n ...preGuard,\n `${ind(ctx)}const ${leaves} = _ctx._cstLeaves?.length ?? 0, ${raw} = _ctx._cstRawChildren?.length ?? 0, ${trivia} = _ctx._cstTriviaLog?.length ?? 0, ${log} = _ctx._triviaLog?.length ?? 0${rootLog ? `, ${rootLog} = _ctx._rootTriviaLog?.length ?? 0` : ''}, ${fields} = _ctx._fields?.length ?? 0, ${errors} = _ctx._errors?.length ?? 0`,\n ...inner.stmts,\n ...emitIfFail(ctx, `!${inner.okVar}`, `{ ${rollback};${traceRollback}${inner.mayCommit ? ` if (_ctx._fc) ${committedFailBody(ctx)};` : ''} _ctx._fe = ${pos}; ${propagateFailBody(ctx)} }`),\n ],\n valueVar: inner.valVar,\n endVar: inner.endVar,\n }\n}\n\nfunction emitSepBy(_p: Combinator<unknown>, def: Extract<ParserDef, { tag: 'sepBy' }>, ctx: Ctx, pos: string): ER {\n const arrV = v(ctx, '_arr')\n const curV = v(ctx, '_cur')\n const rec = !!ctx.recovery\n // Recovery sync = the separator's own follow (resync to the next separator) OR the\n // enclosing delimiter published as _ctx._sync \u2014 captured at ENTRY (element parses\n // clobber _ctx._sync). The separator sentinel is exact for single-char separators.\n const mySyncV = rec ? v(ctx, '_mysy') : ''\n const exp = rec ? hoistExpected(ctx, deriveExpectedArr([def.parser])) : ''\n const sepSent = rec ? syncSentinelExpr(firstSetOf(def.separator)) : null\n const scanSync = sepSent ? `_ctx._rec.or(${sepSent}, ${mySyncV})` : mySyncV\n\n const first = emitFallible(def.parser, ctx, pos, true)\n const { stmts: firstStmts, okVar: firstOk, valVar: firstVal, endVar: firstEnd } = first\n\n const stmts: string[] = [\n `${ind(ctx)}const ${arrV} = []`,\n `${ind(ctx)}let ${curV} = ${pos}`,\n ...(rec ? [`${ind(ctx)}const ${mySyncV} = _ctx._sync`] : []),\n ...firstStmts,\n ]\n\n // A failed element after a real separator. Strict \u2192 the exact original break\n // (byte-identical). Tolerant \u2192 skip to the sync, emit a ParseError, and continue\n // (unless already sitting on the enclosing sync). `originalFail` is that site's\n // exact strict string (the three sites differ \u2014 braces / rollback).\n const failItem = (nextOkVar: string, nextMayCommit: boolean, itemPosVar: string, breakStmt: string): string[] => {\n // A bare `break` stays brace-less \u2014 the emitted source is byte-identical to\n // the pre-options output for every default-option sepBy.\n const commit = nextMayCommit ? `if (_ctx._fc) ${committedFailBody(ctx)}; ` : ''\n if (!rec) return [`${ind(ctx)}if (!${nextOkVar}) { ${commit}${breakStmt} }`]\n const rr = v(ctx, '_rr')\n return [\n `${ind(ctx)}if (!${nextOkVar}) {`,\n ...(nextMayCommit ? [`${ind(ctx)} if (_ctx._fc) ${committedFailBody(ctx)}`] : []),\n `${ind(ctx)} if (_ctx._tolerant && ${mySyncV} !== undefined && !_ctx._rec.at(${mySyncV}, input, ${itemPosVar}, _ctx)) {`,\n `${ind(ctx)} const ${rr} = _ctx._rec.scan(input, ${itemPosVar}, _ctx, ${scanSync}, ${exp})`,\n `${ind(ctx)} ${arrV}.push(${rr}.error); _ctx._rec.capture(_ctx, ${rr}.error); ${curV} = ${rr}.end; continue`,\n `${ind(ctx)} }`,\n `${ind(ctx)} ${breakStmt}`,\n `${ind(ctx)}}`,\n ]\n }\n\n /**\n * The break taken when the item AFTER a separator fails.\n *\n * 'forbid' (default) unwinds the separator with it \u2014 the list ends before it.\n * 'allow' keeps the separator CONSUMED: only what was captured PAST it unwinds\n * (`postSepRb`), and `cur` advances to the separator's end.\n */\n const itemFailBreak = (sepEndVar: string, sepRb: string, postSepRb: string): string =>\n def.trailing === undefined\n ? `${sepRb}break`\n : `${postSepRb}${curV} = ${sepEndVar}; break`\n\n /** Marks taken AFTER the separator, so `trailing` can unwind only past it. */\n const postSepMarks = (): { decl: string[]; rb: string } => {\n if (def.trailing === undefined || !ctx.capturing) return { decl: [], rb: '' }\n const lv = v(ctx, '_tlv'), rw = v(ctx, '_trw'), tl = v(ctx, '_ttl'), lg = v(ctx, '_tlg'), rlg = hasSelectedRootTrivia(ctx) ? v(ctx, '_trlg') : null, fl = v(ctx, '_tlf')\n return {\n decl: [\n `${ind(ctx)}const ${lv} = _ctx._cstLeaves ? _ctx._cstLeaves.length : 0`,\n `${ind(ctx)}const ${rw} = _ctx._cstRawChildren ? _ctx._cstRawChildren.length : 0`,\n `${ind(ctx)}const ${tl} = _ctx._cstTriviaLog ? _ctx._cstTriviaLog.length : 0`,\n `${ind(ctx)}const ${lg} = _ctx._triviaLog ? _ctx._triviaLog.length : 0`,\n ...(rlg ? [`${ind(ctx)}const ${rlg} = _ctx._rootTriviaLog ? _ctx._rootTriviaLog.length : 0`] : []),\n `${ind(ctx)}const ${fl} = _ctx._fields ? _ctx._fields.length : 0`,\n ],\n rb: `if (_ctx._cstLeaves && _ctx._cstLeaves.length !== ${lv}) _ctx._cstLeaves.length = ${lv}; if (_ctx._cstRawChildren && _ctx._cstRawChildren.length !== ${rw}) _ctx._cstRawChildren.length = ${rw}; if (_ctx._cstTriviaLog && _ctx._cstTriviaLog.length !== ${tl}) _ctx._cstTriviaLog.length = ${tl}; if (_ctx._triviaLog && _ctx._triviaLog.length !== ${lg}) _ctx._triviaLog.length = ${lg};${rlg ? ` if (_ctx._rootTriviaLog && _ctx._rootTriviaLog.length !== ${rlg}) _ctx._rootTriviaLog.length = ${rlg};` : ''} if (_ctx._fields && _ctx._fields.length !== ${fl}) _ctx._fields.length = ${fl}; `,\n }\n }\n\n // First element + loop entry. Strict keeps the exact `if (firstOk) { \u2026 while }`\n // shape (byte-identical). Tolerant recovers a junk first element (unless sitting\n // on the enclosing sync) and still enters the loop via a `did` flag.\n if (rec) {\n const rr0 = v(ctx, '_rr0')\n const didV = v(ctx, '_did')\n stmts.push(\n `${ind(ctx)}let ${didV} = false`,\n `${ind(ctx)}if (${firstOk}) { ${arrV}.push(${firstVal}); ${curV} = ${firstEnd}; ${didV} = true }`,\n ...(first.mayCommit ? [`${ind(ctx)}else if (_ctx._fc) ${committedFailBody(ctx)}`] : []),\n `${ind(ctx)}else if (_ctx._tolerant && ${mySyncV} !== undefined && !_ctx._rec.at(${mySyncV}, input, ${pos}, _ctx)) {`,\n `${ind(ctx)} const ${rr0} = _ctx._rec.scan(input, ${pos}, _ctx, ${scanSync}, ${exp})`,\n `${ind(ctx)} ${arrV}.push(${rr0}.error); _ctx._rec.capture(_ctx, ${rr0}.error); ${curV} = ${rr0}.end; ${didV} = true`,\n `${ind(ctx)}}`,\n `${ind(ctx)}if (${didV}) {`,\n )\n ctx.indent++\n stmts.push(`${ind(ctx)}while (${curV} < input.length) {`)\n ctx.indent++\n } else {\n if (first.mayCommit) stmts.push(`${ind(ctx)}if (!${firstOk} && _ctx._fc) ${committedFailBody(ctx)}`)\n stmts.push(`${ind(ctx)}if (${firstOk}) {`)\n ctx.indent++\n stmts.push(\n `${ind(ctx)}${arrV}.push(${firstVal})`,\n `${ind(ctx)}${curV} = ${firstEnd}`,\n `${ind(ctx)}while (${curV} < input.length) {`,\n )\n ctx.indent++\n }\n\n if (def.max !== undefined) stmts.push(`${ind(ctx)}if (${arrV}.length >= ${def.max}) break`)\n\n // Mirror interpreter sepBy \u2014 separate rollback marks for pre-sep and post-sep trivia.\n let sepAtPos = curV\n if (ctx.activeTrivia) {\n if (ctx.capturing) {\n const capFn = ensureTriviaCaptureFn(ctx)\n const markV = v(ctx, '_mk')\n const markTl = v(ctx, '_mktl')\n const markLog = v(ctx, '_mklg')\n const markRootLog = hasSelectedRootTrivia(ctx) ? v(ctx, '_mkrlg') : null\n const markLv = v(ctx, '_mklv')\n const markFld = v(ctx, '_mkf')\n const spV = v(ctx, '_sp')\n // Marks taken BEFORE the separator. If either the separator OR the following\n // item fails, the whole iteration unwinds to here \u2014 crucially undoing the\n // separator's own captured leaves/fields when the item after it fails.\n stmts.push(\n `${ind(ctx)}const ${markV} = _ctx._cstRawChildren ? _ctx._cstRawChildren.length : 0`,\n `${ind(ctx)}const ${markTl} = _ctx._cstTriviaLog ? _ctx._cstTriviaLog.length : 0`,\n `${ind(ctx)}const ${markLog} = _ctx._triviaLog ? _ctx._triviaLog.length : 0`,\n ...(markRootLog ? [`${ind(ctx)}const ${markRootLog} = _ctx._rootTriviaLog ? _ctx._rootTriviaLog.length : 0`] : []),\n `${ind(ctx)}const ${markLv} = _ctx._cstLeaves ? _ctx._cstLeaves.length : 0`,\n `${ind(ctx)}const ${markFld} = _ctx._fields ? _ctx._fields.length : 0`,\n `${ind(ctx)}const ${spV} = ${capFn}(input, ${curV}, _ctx, 1)`,\n ...emitLineTrack(ctx, curV, spV),\n )\n sepAtPos = spV\n const rollbackToSep = `if (_ctx._cstLeaves && _ctx._cstLeaves.length !== ${markLv}) _ctx._cstLeaves.length = ${markLv}; if (_ctx._cstRawChildren && _ctx._cstRawChildren.length !== ${markV}) _ctx._cstRawChildren.length = ${markV}; if (_ctx._cstTriviaLog && _ctx._cstTriviaLog.length !== ${markTl}) _ctx._cstTriviaLog.length = ${markTl}; if (_ctx._triviaLog && _ctx._triviaLog.length !== ${markLog}) _ctx._triviaLog.length = ${markLog};${markRootLog ? ` if (_ctx._rootTriviaLog && _ctx._rootTriviaLog.length !== ${markRootLog}) _ctx._rootTriviaLog.length = ${markRootLog};` : ''} if (_ctx._fields && _ctx._fields.length !== ${markFld}) _ctx._fields.length = ${markFld}; `\n const sep = emitFallible(def.separator, ctx, sepAtPos, true)\n const { stmts: sepStmts, okVar: sepOk, endVar: sepEnd } = sep\n stmts.push(...sepStmts, `${ind(ctx)}if (!${sepOk}) { ${rollbackToSep}${sep.mayCommit ? `if (_ctx._fc) ${committedFailBody(ctx)}; ` : ''}break }`)\n\n const post = postSepMarks()\n stmts.push(...post.decl)\n const npV = v(ctx, '_np')\n stmts.push(`${ind(ctx)}const ${npV} = ${capFn}(input, ${sepEnd}, _ctx, 1)`, ...emitLineTrack(ctx, sepEnd, npV))\n const next = emitFallible(def.parser, ctx, npV, true)\n const { stmts: nextStmts, okVar: nextOk, valVar: nextVal, endVar: nextEnd } = next\n stmts.push(\n ...nextStmts,\n // item failed \u2192 unwind the separator too, back to the end of the last item\n ...failItem(nextOk, next.mayCommit, npV, itemFailBreak(sepEnd, rollbackToSep, post.rb)),\n `${ind(ctx)}${arrV}.push(${nextVal})`,\n `${ind(ctx)}${curV} = ${nextEnd}`,\n )\n } else {\n const trivFn = ensureTriviaFn(ctx)\n const markRootLog = hasSelectedRootTrivia(ctx) ? v(ctx, '_mkrlg') : null\n const spV = v(ctx, '_sp')\n stmts.push(\n ...(markRootLog ? [`${ind(ctx)}const ${markRootLog} = _ctx._rootTriviaLog ? _ctx._rootTriviaLog.length : 0`] : []),\n `${ind(ctx)}const ${spV} = ${trivFn}(input, ${curV}, _ctx, ${hasSelectedRootTrivia(ctx) ? '_ctx._rootTriviaLog !== undefined ? 2 : 0' : '0'})`,\n ...emitLineTrack(ctx, curV, spV),\n )\n sepAtPos = spV\n const sep = emitFallible(def.separator, ctx, sepAtPos, true)\n const { stmts: sepStmts, okVar: sepOk, endVar: sepEnd } = sep\n const rollbackToSep = markRootLog ? `if (_ctx._rootTriviaLog && _ctx._rootTriviaLog.length !== ${markRootLog}) _ctx._rootTriviaLog.length = ${markRootLog}; ` : ''\n stmts.push(...sepStmts, `${ind(ctx)}if (!${sepOk}) { ${rollbackToSep}${sep.mayCommit ? `if (_ctx._fc) ${committedFailBody(ctx)}; ` : ''}break }`)\n\n const postRootLog = hasSelectedRootTrivia(ctx) ? v(ctx, '_psrlg') : null\n const npV = v(ctx, '_np')\n stmts.push(\n ...(postRootLog ? [`${ind(ctx)}const ${postRootLog} = _ctx._rootTriviaLog ? _ctx._rootTriviaLog.length : 0`] : []),\n `${ind(ctx)}const ${npV} = ${trivFn}(input, ${sepEnd}, _ctx, ${hasSelectedRootTrivia(ctx) ? '_ctx._rootTriviaLog !== undefined ? 2 : 0' : '0'})`,\n ...emitLineTrack(ctx, sepEnd, npV),\n )\n const next = emitFallible(def.parser, ctx, npV, true)\n const { stmts: nextStmts, okVar: nextOk, valVar: nextVal, endVar: nextEnd } = next\n stmts.push(\n ...nextStmts,\n ...failItem(nextOk, next.mayCommit, npV, itemFailBreak(sepEnd, rollbackToSep, postRootLog ? `if (_ctx._rootTriviaLog && _ctx._rootTriviaLog.length !== ${postRootLog}) _ctx._rootTriviaLog.length = ${postRootLog}; ` : '')),\n `${ind(ctx)}${arrV}.push(${nextVal})`,\n `${ind(ctx)}${curV} = ${nextEnd}`,\n )\n }\n } else {\n // No trivia. Still mark the leaf buffers before the separator so that an item\n // failing after the separator unwinds the separator's captured leaves too.\n const markLv = ctx.capturing ? v(ctx, '_mklv') : null\n const markRw = ctx.capturing ? v(ctx, '_mkrw') : null\n const markFld = ctx.capturing ? v(ctx, '_mkf') : null\n if (markLv) {\n stmts.push(\n `${ind(ctx)}const ${markLv} = _ctx._cstLeaves ? _ctx._cstLeaves.length : 0`,\n `${ind(ctx)}const ${markRw} = _ctx._cstRawChildren ? _ctx._cstRawChildren.length : 0`,\n `${ind(ctx)}const ${markFld} = _ctx._fields ? _ctx._fields.length : 0`,\n )\n }\n const sep = emitFallible(def.separator, ctx, sepAtPos, true)\n const { stmts: sepStmts, okVar: sepOk, endVar: sepEnd } = sep\n stmts.push(...sepStmts, `${ind(ctx)}if (!${sepOk}) { ${sep.mayCommit ? `if (_ctx._fc) ${committedFailBody(ctx)}; ` : ''}break }`)\n const nextRb = markLv\n ? `if (_ctx._cstLeaves && _ctx._cstLeaves.length !== ${markLv}) _ctx._cstLeaves.length = ${markLv}; if (_ctx._cstRawChildren && _ctx._cstRawChildren.length !== ${markRw}) _ctx._cstRawChildren.length = ${markRw}; if (_ctx._fields && _ctx._fields.length !== ${markFld}) _ctx._fields.length = ${markFld}; `\n : ''\n const post = postSepMarks()\n stmts.push(...post.decl)\n const next = emitFallible(def.parser, ctx, sepEnd, true)\n const { stmts: nextStmts, okVar: nextOk, valVar: nextVal, endVar: nextEnd } = next\n stmts.push(\n ...nextStmts,\n ...failItem(nextOk, next.mayCommit, sepEnd, itemFailBreak(sepEnd, nextRb, post.rb)),\n `${ind(ctx)}${arrV}.push(${nextVal})`,\n `${ind(ctx)}${curV} = ${nextEnd}`,\n )\n }\n ctx.indent--\n stmts.push(`${ind(ctx)}}`)\n ctx.indent--\n stmts.push(`${ind(ctx)}}`)\n\n // `min >= 1`: too few items \u21D2 the whole list FAILS. (The min-0 default's empty\n // alternative is exactly what makes plain sepBy nullable and un-gateable.)\n // Anchored at `curV`, not `pos`: a list failure reports what would have let it\n // CONTINUE, at the furthest position it reached. See the `failAt` comment in\n // `sepBy()` (repeat.ts) for why, and `test/parity/repeat-options-parity.test.ts`\n // for the check that keeps the two engines on the same rule.\n if (def.min >= 1) {\n stmts.push(...emitIfFail(ctx, `${arrV}.length < ${def.min}`, failArrBody(ctx, deriveExpectedArr([def.parser]), curV)))\n }\n\n return { stmts, valueVar: arrV, endVar: curV }\n}\n\nfunction emitScanTo(\n def: Extract<ParserDef, { tag: 'scanTo' }>,\n ctx: Ctx,\n pos: string,\n): ER {\n const curV = v(ctx, '_stcur')\n const foundV = v(ctx, '_stfnd')\n const stmts: string[] = [\n `${ind(ctx)}let ${curV} = ${pos}`,\n `${ind(ctx)}let ${foundV} = false`,\n `${ind(ctx)}while (${curV} < input.length) {`,\n ]\n ctx.indent++\n\n // Sentinel check and skippers must not emit CST leaves \u2014 they are pure position\n // probes. Use a non-capturing ctx so their literal()/regex() don't push leaves.\n const probeCtx: Ctx = { ...ctx, capturing: false, noHoist: true }\n\n // Sentinel check \u2014 labeled block, no IIFE\n const { stmts: sentStmts, okVar: sentOk } = emitFallible(def.sentinel, probeCtx, curV)\n stmts.push(...sentStmts, `${ind(ctx)}if (${sentOk}) { ${foundV} = true; break }`)\n\n // Fold grammar-level ambient trivia + scanSkip in FRONT of the per-call skip\n // list (explicit skip EXTENDS the ambient default) \u2014 mirrors the interpreter's\n // resolveScanSkip so compiled and interpreted scans stay byte-identical. `raw`\n // opts out of everything ambient.\n const effectiveSkip: Combinator<unknown>[] = def.raw\n ? def.skip\n : [\n ...(ctx.activeTrivia ? [ctx.activeTrivia] : []),\n ...(ctx.activeScanSkip ?? []),\n ...def.skip,\n ]\n\n // Skippers \u2014 labeled block per skipper; a failure just means \"not this one\"\n if (effectiveSkip.length > 0) {\n const advV = v(ctx, '_stadv')\n stmts.push(`${ind(ctx)}let ${advV} = false`)\n for (const skipper of effectiveSkip) {\n const { stmts: skStmts, okVar: skOk, endVar: skEnd } = emitFallible(skipper, probeCtx, curV)\n stmts.push(\n `${ind(ctx)}if (!${advV}) {`,\n ...skStmts,\n `${ind(ctx)} if (${skOk} && ${skEnd} > ${curV}) { ${curV} = ${skEnd}; ${advV} = true }`,\n `${ind(ctx)}}`,\n )\n }\n stmts.push(`${ind(ctx)}if (!${advV}) ${curV}++`)\n } else {\n stmts.push(`${ind(ctx)}${curV}++`)\n }\n\n ctx.indent--\n stmts.push(`${ind(ctx)}}`)\n\n // Fail if sentinel was never found (unless orEOF)\n if (!def.orEOF) {\n const sentDef = def.sentinel._def\n const expectedStr = sentDef.tag === 'literal'\n ? JSON.stringify([JSON.stringify(sentDef.value)])\n : `[\"sentinel\"]`\n stmts.push(...emitIfFail(ctx, `!${foundV}`, failArrBody(ctx, expectedStr, pos)))\n }\n\n const valV = v(ctx)\n stmts.push(`${ind(ctx)}const ${valV} = input.slice(${pos}, ${curV})`)\n stmts.push(...emitLineTrack(ctx, pos, curV))\n // scanTo records its scanned span as one leaf (matching the interpreter), but\n // only when it actually consumed something.\n if (ctx.capturing) {\n const cap = reindentStmts(emitLeafCapture(ctx, valV, pos, curV), ctx.indent + 1)\n stmts.push(`${ind(ctx)}if (${curV} > ${pos}) {`, ...cap, `${ind(ctx)}}`)\n }\n return { stmts, valueVar: valV, endVar: curV }\n}\n\n/**\n * Negative lookahead. Run the inner parser in a labeled block; if it succeeds,\n * fail; if it fails, succeed consuming nothing (value null, end === pos).\n */\nfunction emitNot(def: Extract<ParserDef, { tag: 'not' }>, ctx: Ctx, pos: string): ER {\n // not() discards the inner failure (inner failing = not succeeding), so the\n // inner sub-parse need not record \u2014 swallow it.\n //\n // Speculative rollback (mirrors the interpreter's not.ts): a zero-width predicate\n // must leave NO observable trace on EITHER outcome. emitFallible's own restore is\n // not enough on its own \u2014 it fires only `if (!ok)`, and both `mayLeavePartialCapture`\n // and `capturesLeaf` classify `'not'` as non-capturing, so nothing upstream cleans\n // up after it either. Two distinct leaks followed:\n // - inner SUCCESS (not fails): the probe's leaves/rawChildren survive, and an\n // enclosing optional/many that swallows the failure absorbs them \u2014 the compiled\n // engine returned a duplicated leaf where the interpreter returned one.\n // - EITHER outcome: the probe's inter-term trivia skips stay in the GLOBAL\n // `_triviaLog`, which `captureRestoreBody` deliberately never rewinds (see its\n // comment: sequence-term rollbacks stay byte-for-byte with the interpreter).\n // `not` is zero-width, so the enclosing rule re-parses the probed region for\n // real and the span is logged twice. Both engines leaked this one identically,\n // which is why interpreted/compiled parity never flagged it.\n // The emitted rollback restores the same six sinks as `emitAttempt`, unconditionally\n // (not `if (!ok)`), because not() is zero-width on both outcomes.\n //\n // NOT emitted as a `capturing: false` probe ctx the way emitScanTo lowers its\n // sentinel: `emitLazy` does not honour `noHoist`, so a `not(namedRule)` that is the\n // FIRST emission of that rule would compile the SHARED `_r_<Name>`/`_pf` body\n // non-capturing and silently drop real captures at every other call site. Truncating\n // by length is correct regardless of hoisting or sharing.\n const sinksLive = !!ctx.capturing || !!ctx.recovery || !!ctx.activeTrivia\n const leaves = sinksLive ? v(ctx, '_ntl') : null\n const raw = sinksLive ? v(ctx, '_ntr') : null\n const tl = sinksLive ? v(ctx, '_ntt') : null\n const log = sinksLive ? v(ctx, '_ntg') : null\n const rootLog = sinksLive && hasSelectedRootTrivia(ctx) ? v(ctx, '_ntrg') : null\n const fields = sinksLive ? v(ctx, '_ntf') : null\n const errors = sinksLive ? v(ctx, '_nte') : null\n const { stmts, okVar } = emitFallible(def.parser, ctx, pos, true)\n // not() fails (at its own pos) when the inner parser SUCCEEDS; the interpreter\n // reports `not(<innerTag>)` as the expected token \u2014 match that label exactly.\n const label = JSON.stringify(`not(${def.parser._tag})`)\n return {\n stmts: [\n ...(sinksLive ? [\n `${ind(ctx)}const ${leaves} = _ctx._cstLeaves?.length ?? 0, ${raw} = _ctx._cstRawChildren?.length ?? 0, ${tl} = _ctx._cstTriviaLog?.length ?? 0, ${log} = _ctx._triviaLog?.length ?? 0${rootLog ? `, ${rootLog} = _ctx._rootTriviaLog?.length ?? 0` : ''}, ${fields} = _ctx._fields?.length ?? 0, ${errors} = _ctx._errors?.length ?? 0`,\n ] : []),\n ...stmts,\n ...(sinksLive ? [\n `${ind(ctx)}if (_ctx._cstLeaves && _ctx._cstLeaves.length !== ${leaves}) _ctx._cstLeaves.length = ${leaves}; if (_ctx._cstRawChildren && _ctx._cstRawChildren.length !== ${raw}) _ctx._cstRawChildren.length = ${raw}; if (_ctx._cstTriviaLog && _ctx._cstTriviaLog.length !== ${tl}) _ctx._cstTriviaLog.length = ${tl}; if (_ctx._triviaLog && _ctx._triviaLog.length !== ${log}) _ctx._triviaLog.length = ${log};${rootLog ? ` if (_ctx._rootTriviaLog && _ctx._rootTriviaLog.length !== ${rootLog}) _ctx._rootTriviaLog.length = ${rootLog};` : ''} if (_ctx._fields && _ctx._fields.length !== ${fields}) _ctx._fields.length = ${fields}; if (_ctx._errors && _ctx._errors.length !== ${errors}) _ctx._errors.length = ${errors}`,\n ] : []),\n ...emitIfFail(ctx, okVar, failBody(ctx, label, pos)),\n ],\n valueVar: 'null',\n endVar: pos,\n }\n}\n\n/**\n * Positive lookahead. Zero-width on BOTH outcomes, so the body is emitted under a\n * NON-CAPTURING ctx (the same probe treatment `emitScanTo` gives its sentinel):\n * a lookahead that leaves CST leaves behind would double-capture whatever the\n * following term then consumes for real.\n */\nfunction emitPeek(def: Extract<ParserDef, { tag: 'peek' }>, ctx: Ctx, pos: string): ER {\n const probeCtx: Ctx = { ...ctx, capturing: false, noHoist: true }\n // The inner failure is discarded (inner failing = peek failing, reported at\n // peek's own pos with its own label) \u2014 swallow the sub-parse bookkeeping.\n const { stmts, okVar } = emitFallible(def.parser, probeCtx, pos, true)\n ctx.vars = probeCtx.vars\n const label = JSON.stringify(`peek(${def.parser._tag})`)\n return {\n stmts: [\n ...stmts,\n ...emitIfFail(ctx, `!${okVar}`, failBody(ctx, label, pos)),\n ],\n valueVar: 'null',\n endVar: pos,\n }\n}\n\nfunction emitRouted(ctx: Ctx, pos: string, def: Extract<ParserDef, { tag: 'routed' }>): ER {\n const local = ctx.routedLocal\n const fallback = def.fallback\n if (local !== undefined) {\n // Same-body dispatch branch. When the routed site sits at the branch's entry\n // position the guard is textually `X !== X` \u2014 the routed token is provably\n // there, so a fallback is dead code and is not emitted at all.\n if (fallback !== undefined && local.startVar !== pos) {\n return emitRoutedWithFallback(ctx, pos, fallback, {\n test: `${local.startVar} === ${pos}`,\n valExpr: local.valueVar, startExpr: local.startVar, endExpr: local.endVar,\n })\n }\n return {\n stmts: [\n ...emitIfFail(ctx, `${local.startVar} !== ${pos}`, failBody(ctx, '\"routed()\"', pos)),\n ...emitLeafCapture(ctx, local.valueVar, local.startVar, local.endVar),\n ],\n valueVar: local.valueVar,\n endVar: local.endVar,\n }\n }\n const item = v(ctx, '_rt')\n const read = `${ind(ctx)}const ${item} = _ctx._routed`\n if (fallback !== undefined) {\n const r = emitRoutedWithFallback(ctx, pos, fallback, {\n test: `${item} !== undefined && ${item}.span.start === ${pos}`,\n valExpr: `${item}.value`, startExpr: `${item}.span.start`, endExpr: `${item}.span.end`,\n })\n return { ...r, stmts: [read, ...r.stmts] }\n }\n return {\n stmts: [\n read,\n ...emitIfFail(ctx, `${item} === undefined || ${item}.span.start !== ${pos}`, failBody(ctx, '\"routed()\"', pos)),\n ...emitLeafCapture(ctx, `${item}.value`, `${item}.span.start`, `${item}.span.end`),\n ],\n valueVar: `${item}.value`,\n endVar: `${item}.span.end`,\n }\n}\n\n/**\n * `routed(fallback)`: reuse the dispatch-consumed token when it is at `pos`, else\n * parse `fallback` IN PLACE.\n *\n * The fallback goes through the ordinary `emit()` \u2014 not `emitFallible` \u2014 so its\n * failure propagates verbatim (same `expected`, same committed-ness, same trivia\n * state) exactly as if the grammar had spelled the fallback at this position, which\n * is what the interpreter does (`return fallback.parse(input, pos, ctx)`).\n */\nfunction emitRoutedWithFallback(\n ctx: Ctx,\n pos: string,\n fallback: Combinator<unknown>,\n routed: { test: string; valExpr: string; startExpr: string; endExpr: string },\n): ER {\n const valV = v(ctx, '_rtv')\n const endV = v(ctx, '_rte')\n const i = ind(ctx)\n ctx.indent++\n const capture = emitLeafCapture(ctx, routed.valExpr, routed.startExpr, routed.endExpr)\n const fb = emit(fallback, ctx, pos)\n const inner = ind(ctx)\n ctx.indent--\n return {\n stmts: [\n `${i}let ${valV}, ${endV}`,\n `${i}if (${routed.test}) {`,\n ...capture,\n `${inner}${valV} = ${routed.valExpr}; ${endV} = ${routed.endExpr}`,\n `${i}} else {`,\n ...fb.stmts,\n `${inner}${valV} = ${fb.valueVar}; ${endV} = ${fb.endVar}`,\n `${i}}`,\n ],\n valueVar: valV,\n endVar: endV,\n }\n}\n\nfunction escapeTokenLiteral(value: string): string {\n return value.replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n}\n\nfunction regexMatchesEmpty(source: string, flags: string): boolean {\n try { return new RegExp(`^(?:${source})$`, flags).test('') }\n catch { return true }\n}\n\nfunction tokenTerminalSource(p: Combinator<unknown>): { source: string; caseInsensitive: boolean; rawCaseSensitive: string } | null {\n const def = p._def\n switch (def.tag) {\n case 'literal':\n if (def.value.length === 0) return null\n return {\n source: escapeTokenLiteral(def.value),\n caseInsensitive: def.caseInsensitive,\n rawCaseSensitive: def.caseInsensitive ? '' : def.value,\n }\n case 'regex': {\n if (def.flags.replace(/i/g, '') !== '') return null\n if (regexMatchesEmpty(def.source, def.flags)) return null\n return {\n source: `(?:${def.source})`,\n caseInsensitive: def.flags.includes('i'),\n rawCaseSensitive: def.flags.includes('i') ? '' : def.source,\n }\n }\n default:\n return null\n }\n}\n\nfunction tokenSequenceSource(p: Combinator<unknown>): { source: string; flags: string; hasCaseSensitiveLetters: boolean } | null {\n const def = p._def\n const parts = def.tag === 'sequence'\n ? def.parsers.map(tokenTerminalSource)\n : [tokenTerminalSource(p)]\n if (parts.some(part => part === null)) return null\n const typed = parts as Array<{ source: string; caseInsensitive: boolean; rawCaseSensitive: string }>\n const flags = typed.some(part => part.caseInsensitive) ? 'i' : ''\n if (flags.includes('i') && typed.some(part => /[A-Za-z]/.test(part.rawCaseSensitive))) return null\n return {\n source: typed.map(part => part.source).join(''),\n flags,\n hasCaseSensitiveLetters: typed.some(part => /[A-Za-z]/.test(part.rawCaseSensitive)),\n }\n}\n\nfunction combineTokenRegexSources(parts: Array<{ source: string; flags: string; hasCaseSensitiveLetters: boolean }>): { source: string; flags: string } | null {\n const flags = parts.some(part => part.flags.includes('i')) ? 'i' : ''\n if (flags.includes('i') && parts.some(part => part.flags === '' && part.hasCaseSensitiveLetters)) return null\n return { source: parts.map(part => part.source).join(''), flags }\n}\n\nfunction tokenNullableRegex(def: Extract<ParserDef, { tag: 'token' }>): Extract<ParserDef, { tag: 'regex' }> | null {\n const inner = def.parser._def\n if (inner.tag === 'many') {\n const seq = tokenSequenceSource(inner.parser)\n if (!seq) return null\n return { tag: 'regex', source: `(?:${seq.source})*`, flags: seq.flags }\n }\n if (inner.tag === 'optional') {\n const seq = tokenSequenceSource(inner.parser)\n if (!seq) return null\n return { tag: 'regex', source: `(?:${seq.source})?`, flags: seq.flags }\n }\n if (inner.tag === 'sepBy') {\n const item = tokenSequenceSource(inner.parser)\n const sep = tokenSequenceSource(inner.separator)\n if (!item || !sep) return null\n const combined = combineTokenRegexSources([item, sep])\n if (!combined) return null\n return { tag: 'regex', source: `(?:${item.source}(?:${sep.source}${item.source})*)?`, flags: combined.flags }\n }\n return null\n}\n\nfunction emitToken(def: Extract<ParserDef, { tag: 'token' }>, ctx: Ctx, pos: string): ER {\n const lowered = tokenNullableRegex(def)\n if (lowered) return emitRegex(lowered, ctx, pos, def.parser._meta.canMatchNewline)\n\n const savedTrivia = ctx.activeTrivia\n const savedKindLabels = ctx.triviaKindLabels\n ctx.activeTrivia = undefined\n ctx.triviaKindLabels = undefined\n const inner = emitFallible(def.parser, ctx, pos)\n ctx.activeTrivia = savedTrivia\n ctx.triviaKindLabels = savedKindLabels\n\n const i = ind(ctx)\n const sc = v(ctx, '_tokCh')\n const sl = v(ctx, '_tokLv')\n const sr = v(ctx, '_tokRaw')\n const sv = v(ctx, '_tokTr')\n const sk = v(ctx, '_tokKinds')\n const stl = v(ctx, '_tokTl')\n const sol = v(ctx, '_tokLog')\n const srl = hasSelectedRootTrivia(ctx) ? v(ctx, '_tokRootLog') : null\n const sb = v(ctx, '_tokBuf')\n const valV = v(ctx, '_tok')\n\n return {\n stmts: [\n `${i}const ${sc} = _ctx._cstChildren, ${sl} = _ctx._cstLeaves, ${sr} = _ctx._cstRawChildren, ${sv} = _ctx.trivia, ${sk} = _ctx.triviaKindLabels, ${stl} = _ctx._cstTriviaLog, ${sol} = _ctx._triviaLog${srl ? `, ${srl} = _ctx._rootTriviaLog` : ''}, ${sb} = _ctx._cstBuf`,\n `${i}_ctx.trivia = undefined; _ctx.triviaKindLabels = undefined; _ctx._cstChildren = undefined; _ctx._cstLeaves = undefined; _ctx._cstRawChildren = undefined; _ctx._cstTriviaLog = undefined; _ctx._triviaLog = undefined;${srl ? ' _ctx._rootTriviaLog = undefined;' : ''} _ctx._cstBuf = undefined`,\n `${i}try {`,\n ...reindentStmts(inner.stmts, ctx.indent + 1).map(stmt => stmt.replace(/^(\\s*)(?:const|let)\\s+/, '$1var ')),\n `${i}} finally {`,\n `${i} _ctx.trivia = ${sv}; _ctx.triviaKindLabels = ${sk}; _ctx._cstChildren = ${sc}; _ctx._cstLeaves = ${sl}; _ctx._cstRawChildren = ${sr}; _ctx._cstTriviaLog = ${stl}; _ctx._triviaLog = ${sol};${srl ? ` _ctx._rootTriviaLog = ${srl};` : ''} _ctx._cstBuf = ${sb}`,\n `${i}}`,\n ...emitIfFail(ctx, `!${inner.okVar}`, propagateFailBody(ctx)),\n `${i}const ${valV} = input.slice(${pos}, ${inner.endVar})`,\n ...emitLeafCapture(ctx, valV, pos, inner.endVar),\n ],\n valueVar: valV,\n endVar: inner.endVar,\n }\n}\n\n/** Semantic-leaf wrapper: preserve the inner grammar's trivia policy, hide its\n * captures, and expose one callback-reduced leaf at the enclosing level. */\nfunction emitLeaf(def: Extract<ParserDef, { tag: 'leaf' }>, ctx: Ctx, pos: string): ER {\n const inner = emitFallible(def.parser, ctx, pos)\n const i = ind(ctx)\n const sc = v(ctx, '_leafCh')\n const sl = v(ctx, '_leafLv')\n const sr = v(ctx, '_leafRaw')\n const stl = v(ctx, '_leafTl')\n const sol = v(ctx, '_leafLog')\n const sb = v(ctx, '_leafBuf')\n const rawV = v(ctx, '_leafRawValue')\n const valV = v(ctx, '_leaf')\n const fnIdx = pushMapFn(ctx, def.fn, def.fnSrc ?? null)\n return {\n stmts: [\n `${i}const ${sc} = _ctx._cstChildren, ${sl} = _ctx._cstLeaves, ${sr} = _ctx._cstRawChildren, ${stl} = _ctx._cstTriviaLog, ${sol} = _ctx._triviaLog, ${sb} = _ctx._cstBuf`,\n `${i}_ctx._cstChildren = undefined; _ctx._cstLeaves = undefined; _ctx._cstRawChildren = undefined; _ctx._cstTriviaLog = undefined; _ctx._triviaLog = undefined; _ctx._cstBuf = undefined`,\n `${i}try {`,\n ...reindentStmts(inner.stmts, ctx.indent + 1).map(stmt => stmt.replace(/^(\\s*)(?:const|let)\\s+/, '$1var ')),\n `${i}} finally {`,\n `${i} _ctx._cstChildren = ${sc}; _ctx._cstLeaves = ${sl}; _ctx._cstRawChildren = ${sr}; _ctx._cstTriviaLog = ${stl}; _ctx._triviaLog = ${sol}; _ctx._cstBuf = ${sb}`,\n `${i}}`,\n ...emitIfFail(ctx, `!${inner.okVar}`, propagateFailBody(ctx)),\n `${i}const ${rawV} = ${inner.valVar}`,\n `${i}const ${valV} = ${mfRef(ctx)}[${fnIdx}](${rawV}, { start: ${pos}, end: ${inner.endVar} })`,\n ...emitLeafCapture(ctx, valV, pos, inner.endVar),\n ],\n valueVar: valV,\n endVar: inner.endVar,\n }\n}\n\nfunction emitNodeProjectExpr(type: string, project: NonNullable<Extract<ParserDef, { tag: 'node' }>['project']>, chV: string): string {\n const child = `${chV}[${project}]`\n const missing = `(() => { throw new Error(${JSON.stringify(`node(${JSON.stringify(type)}) project child ${project} was not captured`)}) })()`\n const value = `(${child} !== null && typeof ${child} === 'object' && ${child}._tag === 'leaf' ? ${child}.value : ${child})`\n return `(${project} in ${chV} ? ${value} : ${missing})`\n}\n\n/**\n * CST node rule. Collects the inner parse's terminals/trivia into fresh local\n * arrays (capture is emitted inline by the terminals while capChildren is set),\n * calls the build fn, then records the node in the enclosing node()'s collectors.\n */\nfunction emitNode(def: Extract<ParserDef, { tag: 'node' }>, ctx: Ctx, pos: string): ER {\n if (def.type === undefined) {\n throw new Error('node(): inferred node type requires a rules() key; pass node(\"Type\", parser) outside rules()')\n }\n // A STRUCTURAL node has no own build \u2014 it builds via the `ctx.build` host at\n // parse time, else a default positioned CST. No build fn is captured.\n const structural = def.build === undefined && def.project === undefined\n const mkType = structural || def.project !== undefined ? null : analyzeMkInlineBuild(def)\n let buildIdx: number | null = null\n if (!mkType && !structural && def.project === undefined) {\n buildIdx = ctx.buildFns.length\n ctx.buildFns.push(def.build!)\n ctx.buildSrcs.push(def.buildSrc ?? null)\n }\n const i = ind(ctx)\n\n // Arity-gated elision: direct AST builders frequently use only children,\n // fields, and span. Do not allocate their otherwise-unobservable raw CST\n // collector (or children for a zero-argument builder). Structural/CST output\n // retains the full collector contract, and an explicit cstBuildHost switches\n // the direct node back to full capture at runtime. The mk-inline path reads\n // both `rawV.length` and `tlV.length`, so it always keeps those collectors.\n //\n // A STRUCTURAL node builds via the injected `_ctx.build` host, whose arity is\n // only known at parse time \u2014 so instead of defensively capturing both (the old\n // behaviour), gate on what the host reads via the `_hostReads` helper (memoized\n // once per parse on `_ctx._pmCapTL`/`_pmCapST`). Host sig is\n // `(type, children, fields, span, rawChildren, triviaLog, state)`: not reading arg 5\n // (index) means no trivia log, arg 6 means no state (when no host, the default\n // CST embeds `state` \u2192 keep the clone). `_hostReads` is conservative \u2014 a\n // rest/default param or `arguments` forces full capture, so a spread host never\n // silently loses data. jess hosts can ask for fields with arity 3 while trivia/state stay dead\n // (the cstTriviaLog per-token push dominates \u2014 ~28% of a real jess parse).\n // COMPILE-TIME HOST MODE. In `'cst'` every non-structural node builds through the\n // positioned-CST host instead of its own `build`, so capture must follow that HOST,\n // not the builder's arity \u2014 and since the mode is a compile-time constant, \"follow the\n // host\" is simply \"capture\", with no per-node probe. This is the whole point of moving\n // the decision to build time: in `'ast'` the host branch does not exist, and in `'cst'`\n // there is nothing to decide.\n const cstOut = ctx.hostMode === 'cst' && !structural\n // Did this artifact actually DROP a positioned-CST branch? Only a node with its own\n // build has one to drop. A purely STRUCTURAL grammar builds through `ctx.build` at\n // runtime by design \u2014 that is the documented `node(parser)` contract, unchanged here \u2014\n // so an 'ast' compilation of it remains perfectly usable with a CST host, and the\n // compatibility check below must not fire for it. This flag is what keeps the check\n // precise instead of merely conservative.\n if (!structural && !cstOut) ctx.hostBranchElided = true\n const hasProject = def.project !== undefined\n const capturesTrivia = cstOut || mkType !== null || def.captureTrivia === true || def.trailingTrivia === true || (!structural && !hasProject && buildReadsTrivia(def))\n const clonesState = !structural && (cstOut || (!hasProject && buildReadsState(def)))\n const capturesChildren = !structural && (cstOut || mkType !== null || def.unwrap || def.collapse || def.project !== undefined || buildReadsChildren(def))\n const capturesRaw = !structural && (cstOut || mkType !== null || (def.project === undefined && buildReadsRaw(def)))\n const hasFields = parserHasOwnFields(def.parser)\n const capturesFields = hasFields && !structural && (cstOut || (!hasProject && buildReadsFields(def)))\n // A nested parser({ captureTrivia: true }) needs this node's collector, but\n // must not activate it until that parser scope is entered. Keep the collector\n // decision separate from the active capture flag below.\n const innerEnablesTriviaCapture = parserEnablesTriviaCapture(def.parser)\n\n const chV = v(ctx, '_ch')\n const rawV = v(ctx, '_raw')\n const capTLv = (structural || capturesTrivia) ? v(ctx, '_ctl') : null\n const capSTv = structural ? v(ctx, '_cst') : null\n const capFv = structural && hasFields ? v(ctx, '_cf') : null\n const tlV = capturesTrivia || structural ? v(ctx, '_tl') : '_EMPTY_TL'\n // Direct builders that declare trivia retain the established eager collector.\n // `_EMPTY_TL` remains necessary for elided direct builders and host-gated\n // structural nodes only.\n if (!capturesTrivia || structural) ctx.needsEmptyTl = true\n const sc = v(ctx, '_sc'), sl = v(ctx, '_sl'), sr = v(ctx, '_sr'), st = v(ctx, '_st'), stl = v(ctx, '_stl')\n // Per-node-type trivia-kind mask (structural/host nodes only): a host may want\n // one node type captured comments-only and another whitespace-and-all. Scoped\n // here and restored after the inner parse, exactly like captureTrivia/_cstTriviaLog.\n const smk = structural ? v(ctx, '_smk') : null\n if (structural) ctx.needsHostReads = true\n const hostTriviaGate = `_ctx.build !== undefined && (_ctx.build._parsemanCaptureTrivia !== undefined ? _ctx.build._parsemanCaptureTrivia(${JSON.stringify(def.type)}) : (_ctx._pmCapTL ??= _hostReads(_ctx.build, 5)))`\n // Profiling is INTERPRETED-MODE ONLY and is deliberately not compiled in.\n //\n // `run({ profile })` drives its recognizer/capture/host phases through\n // `_ctx._pmProfile`. Emitting those phase gates into the artifact cost a\n // `_ctx._pmProfile` read plus two locals on EVERY node, and threaded a ternary\n // through ~15 further per-node expressions \u2014 machinery a normal parse never\n // executes. The commit that hoisted the reads to two locals recorded the cost it\n // was walking back: \"~+10\u201315% on 2\u20133\u00B5s cases\".\n //\n // These stay as string GATES rather than being deleted inline so the emission\n // sites keep one shape; `tern`/`notGate`/`orGate` fold them away, so the literal\n // `'false'` here means the dead branch never reaches the artifact at all.\n // A compiled artifact is stamped un-profilable (see `FUSED_NO_PROFILE`) and\n // `run()` refuses `profile` on it rather than silently reporting zeros.\n const profileRecognizer = 'false'\n const profileCapture = 'false'\n // Direct builders normally produce their own AST and never inspect CST\n // children/rawChildren. Keep cstBuildHost and profile({ capture: true })\n // truthful by dynamically restoring those collectors only for those explicit\n // modes. The normal AST route pays a boolean/property read instead of a fresh\n // array for every elided collector.\n // In `'cst'` mode a direct builder ALWAYS routes to the host, so its children/raw\n // collectors are always live \u2014 no gate, no probe. In `'ast'` mode the host branch is\n // not emitted at all, so the only thing that can still want those collectors is the\n // profiling capture pass, which is already a hoisted LOCAL (`_cap`) rather than a\n // property chain on `_ctx.build`. Either way the per-node `_parsemanCstOutput` read\n // that used to sit on every direct node is gone.\n // The `_dcst` binding that used to live here is GONE, not folded. Its only gate\n // was `profileCapture`, which is the literal `'false'` above, so it could never\n // reach the artifact \u2014 but reserving its name still advanced `ctx.vars`, which\n // renumbered every subsequent `_NN` in the file. That renumbering was the bulk of\n // the measured ast-vs-cst byte delta and made two otherwise-identical lowerings\n // diff. Nothing downstream reads it; `dcstAlloc` below is unconditionally\n // `'undefined'` because that is what it always constant-folded to.\n // A structural node can make its CST-trivia contract grammar-owned. That is\n // stronger than a host preference: `node(..., undefined, { captureTrivia:\n // true })` must keep its log even when the injected host explicitly opts out.\n // This mirrors the interpreter's `capturesTrivia` decision above.\n const structuralCapturesTrivia = structural && (def.captureTrivia === true || def.trailingTrivia === true)\n // Children-array (chV) elision for structural nodes. chV is a byte-for-byte\n // duplicate of rawV for a structural grammar (every captured item is a CST\n // child, so the rawEntry synthesis never diverges), and a host that builds from\n // `rawChildren` never reads it. `_hostReads` can't detect this \u2014 the host\n // declares `children` positionally to reach later args \u2014 so consult the explicit\n // `_parsemanReadsChildren === false` opt-out. Keep chV whenever it is actually\n // read: a default CST (no host), a collapse host (`_parsemanCstCollapse` inspects\n // it), unwrap/collapse rules (compile-time), or the profiling capture pass.\n const chNeededExpr = (def.unwrap || def.collapse)\n ? 'true'\n : `(_ctx._pmReadsCh ??= (_ctx.build === undefined || _ctx.build._parsemanReadsChildren !== false || _ctx.build._parsemanCstCollapse !== undefined))`\n const chAlloc = (def.unwrap || def.collapse)\n ? tern(profileRecognizer, 'undefined', '[]')\n : tern(profileRecognizer, 'undefined', `${tern(orGate(profileCapture, chNeededExpr), '[]', 'undefined')}`)\n // An elided collector allocates nothing. (Was a `_dcst ? [] : undefined` whose\n // gate constant-folded to `false`; see the note at the removed binding.)\n const dcstAlloc = 'undefined'\n const allocStmt = structural\n ? `${i}const ${capTLv} = ${andGate(notGate(profileRecognizer), orGate(profileCapture, structuralCapturesTrivia ? 'true' : hostTriviaGate))}, ${capSTv} = ${andGate(notGate(orGate(profileRecognizer, profileCapture)), '(_ctx._pmCapST ??= (_ctx.build === undefined || _hostReads(_ctx.build, 6)))')}${capFv ? `, ${capFv} = ${andGate(notGate(profileRecognizer), orGate(profileCapture, '(_ctx.build !== undefined && _hostReads(_ctx.build, 2))'))}` : ''}\\n`\n + `${i}const ${chV} = ${chAlloc}, ${rawV} = ${tern(profileRecognizer, 'undefined', '[]')}, ${tlV} = ${tern(profileRecognizer, 'undefined', innerEnablesTriviaCapture ? '[]' : `${capTLv} ? [] : _EMPTY_TL`)}`\n : capturesTrivia\n ? `${i}const ${capTLv} = ${notGate(profileRecognizer)}, ${chV} = ${tern(profileRecognizer, 'undefined', capturesChildren ? '[]' : dcstAlloc)}, ${rawV} = ${tern(profileRecognizer, 'undefined', capturesRaw ? '[]' : dcstAlloc)}, ${tlV} = ${tern(profileRecognizer, 'undefined', '[]')}`\n : `${i}const ${chV} = ${tern(profileRecognizer, 'undefined', capturesChildren ? '[]' : dcstAlloc)}, ${rawV} = ${tern(profileRecognizer, 'undefined', capturesRaw ? '[]' : dcstAlloc)}`\n // The collector stays installed when a nested grammar can opt in; generated\n // trivia scanners gate their push on `captureTrivia`, so this remains inert\n // until that nested scope activates it.\n const innerTl = structural || capturesTrivia\n ? structural && !innerEnablesTriviaCapture ? `${capTLv} ? ${tlV} : undefined` : tlV\n : 'undefined'\n const fieldsOn = structural ? (capFv ?? 'false') : tern(profileRecognizer, 'false', capturesFields ? 'true' : 'false')\n const sf = hasFields ? v(ctx, '_sf') : null\n const fArr = hasFields ? v(ctx, '_fa') : null\n const fObj = hasFields ? v(ctx, '_fields') : 'undefined'\n // Per-node trivia-frame elision: a node whose parser subtree has NO trivia-skip\n // site (a bare terminal) can never log trivia into its own `_cstTriviaLog`, so\n // its `captureTrivia`/`_cstTriviaLog`/`_triviaCaptureMask` save+install+restore is\n // dead work \u2014 skip it. The parent's values stay untouched (nothing inside writes\n // them) and the node's trivia is empty (build reads `tlV`, which is `_EMPTY_TL` /\n // an unpopulated `_tl`). Sound because `parserHasTriviaSite` is conservative\n // (only `false` when provably no site). Halves the per-node scope frame on the\n // many bare value/token leaf nodes (Num, Color, Quoted, \u2026). See emitNode notes.\n const needsTriviaFrame = def.trailingTrivia === true || parserHasTriviaSite(def.parser)\n const saveTrivia = needsTriviaFrame\n ? `, ${st} = _ctx.captureTrivia, ${stl} = _ctx._cstTriviaLog${smk ? `, ${smk} = _ctx._triviaCaptureMask` : ''}`\n : ''\n const installTrivia = needsTriviaFrame\n ? `; _ctx.captureTrivia = ${capTLv ?? 'false'}; _ctx._cstTriviaLog = ${innerTl}${smk ? `; _ctx._triviaCaptureMask = ${capTLv} && _ctx.build !== undefined && _ctx.build._parsemanTriviaKinds !== undefined ? _ctx.build._parsemanTriviaKinds(${JSON.stringify(def.type)}) : ${smk}` : ''}`\n : ''\n const restoreTrivia = needsTriviaFrame\n ? `; _ctx.captureTrivia = ${st}; _ctx._cstTriviaLog = ${stl}${smk ? `; _ctx._triviaCaptureMask = ${smk}` : ''}`\n : ''\n // First-set fail-fast (before the capture frame is allocated). A node whose\n // body has a discrete (non-`any`) first set and can't match empty is often\n // invoked speculatively at many positions by non-dispatching callers \u2014 e.g.\n // Less `@{\u2026}` interpolation, an early arm of a non-disjoint choice, is entered\n // at every position and rejected on its first byte. The `allocStmt` below\n // allocates the children/raw/trivia arrays and swaps the CST context BEFORE the\n // body recognizes anything, so each such miss allocates then immediately fails.\n // Reject a first-set miss here instead: sound because a miss cannot match, and\n // nothing has been captured yet to roll back. Records the same static `expected`\n // a body start-fail would (named-rule bodies run with recordFail), so diagnostics\n // are unchanged. Skipped under compiled recovery (a swallowed failure still feeds\n // the completions probe there). Mirrors the choice/`many`/`attempt` first-set guards.\n //\n // The gate is `needsFirstSetGuard` ALONE. It used to also require\n // `capturesChildren || structural`, on the theory that a node capturing nothing has\n // \"no frame to save\" and so nothing to protect. That was wrong twice over. Factually:\n // a non-capturing node still allocates `chV`/`rawV` bindings,\n // and still saves + installs + restores `_cstChildren`/`_cstLeaves`/`_cstRawChildren`\n // (and the trivia frame) before the body recognizes a byte. Structurally: capture is a\n // COST question and the guard is a CORRECTNESS-neutral speedup, so using one as a proxy\n // for the other coupled the largest measured parse lever to an unrelated decision \u2014 a\n // confirmed zero-arity `() =>` reducer sets `capturesChildren = false` and thereby\n // DELETED that node's first-set gate. CST mode forces the flag true, so the loss showed\n // up only in 'ast' artifacts, which is why it went unnoticed. Sound to drop: the guard\n // is emitted strictly before every statement this node contributes, `needsFirstSetGuard`\n // guarantees a first-set miss cannot match, and the recorded `expected`/`_fe` are the\n // ones a body start-fail would record \u2014 `emitAttempt` already gates on\n // `needsFirstSetGuard` with no capture precondition, for exactly these reasons.\n const preGuard: string[] = []\n if (!ctx.recovery && !ctx.coverage && needsFirstSetGuard(def.parser)) {\n const gcV = v(ctx, '_ngc')\n const gExp = armStaticExpected(ctx, def.parser)\n const gFail = ctx.failLabel\n ? (ctx.recordFail ? `{ _ctx._fe = ${pos}; _ctx._fx = ${gExp}; break ${ctx.failLabel} }` : `break ${ctx.failLabel}`)\n : failReturnArr(ctx, gExp, pos)\n preGuard.push(\n `${i}const ${gcV} = ${pos} < input.length ? (input.codePointAt(${pos}) ?? -1) : -1`,\n `${i}if (!(${firstSetCond(gcV, def.parser._meta.firstSet)})) ${gFail}`,\n )\n }\n const stmts: string[] = [\n ...preGuard,\n allocStmt,\n `${i}const ${sc} = _ctx._cstChildren, ${sl} = _ctx._cstLeaves, ${sr} = _ctx._cstRawChildren${saveTrivia}${sf ? `, ${sf} = _ctx._fields` : ''}`,\n `${i}_ctx._cstChildren = ${chV}; _ctx._cstLeaves = ${chV}; _ctx._cstRawChildren = ${rawV}${installTrivia}${sf ? `; _ctx._fields = ${fieldsOn} ? [] : undefined` : ''}`,\n ]\n const { stmts: innerStmts, okVar, endVar: innerEndVar } = emitFallible(def.parser, ctx, pos)\n const endVar = def.trailingTrivia === true && ctx.activeTrivia ? v(ctx, '_trailend') : innerEndVar\n stmts.push(...innerStmts)\n if (def.trailingTrivia === true && ctx.activeTrivia) {\n const triviaFn = ensureTriviaFn(ctx)\n stmts.push(`${i}const ${endVar} = ${okVar} ? ${triviaFn}(input, ${innerEndVar}, _ctx, 1) : ${innerEndVar}`, ...emitLineTrack(ctx, innerEndVar, endVar))\n }\n if (sf && fArr) {\n stmts.push(`${i}const ${fArr} = _ctx._fields`)\n }\n stmts.push(`${i}_ctx._cstChildren = ${sc}; _ctx._cstLeaves = ${sl}; _ctx._cstRawChildren = ${sr}${restoreTrivia}${sf ? `; _ctx._fields = ${sf}` : ''}`)\n // node() returns the inner failure verbatim (interpreter parity) \u2014 propagate\n // the recorded deepest failure, not a coarse [\"node\"] at the node's start.\n stmts.push(...emitIfFail(ctx, `!${okVar}`, propagateFailBody(ctx)))\n\n // (profiling counters intentionally not emitted \u2014 interpreted mode only)\n\n let stV = 'undefined'\n if (structural) {\n stV = v(ctx, '_nst')\n stmts.push(`${i}const ${stV} = ${capSTv} && _ctx.state !== undefined ? Object.assign({}, _ctx.state) : undefined`)\n } else if (clonesState) {\n stV = v(ctx, '_nst')\n stmts.push(`${i}const ${stV} = ${andGate(notGate(orGate(profileRecognizer, profileCapture)), '_ctx.state !== undefined')} ? Object.assign({}, _ctx.state) : undefined`)\n }\n if (sf && fArr) {\n const fe = v(ctx, '_fe')\n const cur = v(ctx, '_fc')\n stmts.push(\n `${i}let ${fObj} = undefined`,\n `${i}if (${fArr} && ${fArr}.length) {`,\n `${i} ${fObj} = {}`,\n `${i} for (const ${fe} of ${fArr}) {`,\n `${i} const ${cur} = ${fObj}[${fe}.name], _entry = { value: ${fe}.value, span: ${fe}.span }`,\n `${i} if (${cur} === undefined) ${fObj}[${fe}.name] = _entry`,\n `${i} else if (Array.isArray(${cur})) ${cur}.push(_entry)`,\n `${i} else ${fObj}[${fe}.name] = [${cur}, _entry]`,\n `${i} }`,\n `${i}}`,\n )\n }\n const ndV = v(ctx, '_nd')\n const nodeSpanExpr = emitSpanExpr(ctx, pos, endVar)\n const nodeSpanV = ctx.lineTracking ? v(ctx, '_nspan') : nodeSpanExpr\n if (ctx.lineTracking) stmts.push(`${i}const ${nodeSpanV} = ${nodeSpanExpr}`)\n // A structural node's own \"builder\" is a default positioned CST; a built node's\n // is its inline-mk expr or captured build fn.\n const buildExpr = structural\n ? `{ _tag: 'node', type: ${JSON.stringify(def.type)}, span: ${nodeSpanV}, state: ${stV} ?? null, children: ${chV} }`\n : mkType\n ? emitInlineMkNodeExpr(mkType, chV, rawV, nodeSpanV, tlV)\n : def.project !== undefined\n ? emitNodeProjectExpr(def.type, def.project, chV)\n : `${buildRef(ctx)}[${buildIdx!}](${chV}, ${fObj}, ${nodeSpanV}, ${rawV}, ${tlV}, ${stV})`\n // A structural node builds through the per-parse host. A direct builder owns\n // its semantic result in every lowering mode; the positioned-CST host is the\n // sole exception, so a direct object never becomes a CST child. Linkability\n // must not change that ownership rule.\n const hostBuildArgs = `${JSON.stringify(def.type)}, ${chV}, ${fObj}, ${nodeSpanV}, ${rawV}, ${tlV}, ${stV}${def.tags !== undefined && def.tags.length > 0 ? `, ${JSON.stringify(def.tags)}` : ''}`\n // No profiling comma-expression: `run({ profile })` counts host calls in\n // interpreted mode, so the compiled host branch is the bare call.\n const hostBuildExpr = `_ctx.build(${hostBuildArgs})`\n // A direct builder's consumer is fixed at COMPILE time, so this is a constant choice,\n // not a per-node `_ctx.build?._parsemanCstOutput === true` read. `'cst'` builds through\n // the host (so a direct semantic object can never become a CST child); `'ast'` never\n // emits the host branch at all. Structural nodes are unchanged: their host is the\n // documented `node(parser)` contract and is genuinely a per-parse choice.\n const ndExpr = structural\n ? `_ctx.build !== undefined ? (${hostBuildExpr}) : (${buildExpr})`\n : cstOut\n ? hostBuildExpr\n : buildExpr\n // unwrap/collapse: a single captured child IS the value; unwrap turns a leaf\n // into its string, collapse returns the child exactly. Mirrors node.ts.\n // `cstBuildHost({ collapse })` applies wherever the node's VALUE comes from the host \u2014\n // that is the only situation in which the produced thing is a CST node the host owns.\n // It used to be emitted for `structural` alone, which silently made the documented\n // option a no-op for every `hostMode: 'cst'` grammar whose nodes carry a build reducer\n // (measured in jess: `predicateCalls === 0` across four dialects, and zero occurrences\n // of `_parsemanCstCollapse` in the built artifacts). In `'cst'` mode a direct builder is\n // BYPASSED \u2014 `ndExpr` is `hostBuildExpr` \u2014 so the node is host-built exactly like a\n // structural one, and there is no reason for the policy to skip it.\n const hostCollapses = structural || cstOut\n const hostCollapseExpr = hostCollapses\n ? `_ctx.build !== undefined && _ctx.build._parsemanCstCollapse !== undefined && ${chV}.length === 1 && ${rawV}.length === 1 && _ctx.build._parsemanCstCollapse(${JSON.stringify(def.type)}, ${chV}[0], ${chV}, ${rawV}) ? ${chV}[0] : (${ndExpr})`\n : ndExpr\n const unwrapExpr = `${chV}.length === 1 ? (${chV}[0] !== null && typeof ${chV}[0] === 'object' && ${chV}[0]._tag === 'leaf' ? ${chV}[0].value : ${chV}[0]) : (${ndExpr})`\n const collapseExpr = `${chV}.length === 1 ? ${chV}[0] : (${ndExpr})`\n const finalExpr = def.unwrap\n ? unwrapExpr\n : def.collapse\n ? collapseExpr\n : hostCollapseExpr\n const ndGate = orGate(profileRecognizer, profileCapture)\n const recGate = notGate(profileRecognizer)\n // With profiling out of the compiled path `recGate` is statically true, so the\n // two pushes are emitted unwrapped instead of inside a dead `if (true) { \u2026 }`.\n const pushIndent = recGate === 'true' ? i : `${i} `\n const pushCh = `${pushIndent}if (${sc}) ${sc}.push(${ndV})`\n // See RAW_ENTRY_DECL: the span argument is passed ONLY when it is already a local\n // (line tracking), so the untracked fast path still allocates no span.\n ctx.needsRawEntry = true\n const pushRaw = `${pushIndent}if (${sr}) ${sr}.push(_rawEntry(${ndV}, input, ${pos}, ${endVar}${ctx.lineTracking ? `, ${nodeSpanV}` : ''}))`\n stmts.push(`${i}const ${ndV} = ${tern(ndGate, 'undefined', `(${finalExpr})`)}`)\n if (recGate === 'true') stmts.push(pushCh, pushRaw)\n else stmts.push(`${i}if (${recGate}) {`, pushCh, pushRaw, `${i}}`)\n\n return { stmts, valueVar: ndV, endVar }\n}\n\nfunction emitRuntimeFallback(parser: Combinator<unknown>, ctx: Ctx, pos: string): ER {\n const idx = ctx.runtimeParsers.length\n ctx.runtimeParsers.push(parser)\n const rv = v(ctx, '_rt')\n const vv = v(ctx, '_rtv')\n const ev = v(ctx, '_rte')\n // The runtime parser IS the real combinator, so its result is exactly the\n // interpreter's \u2014 record its failure payload and propagate it verbatim (only\n // when a consumer will read it).\n const failStmt = ctx.failLabel\n ? (ctx.recordFail\n ? `{ _ctx._fe = ${rv}.span.start; _ctx._fx = ${rv}.expected; _ctx._fc = ${rv}.committed === true; break ${ctx.failLabel} }`\n : `{ _ctx._fc = ${rv}.committed === true; break ${ctx.failLabel} }`)\n : `return { ok: false, expected: ${rv}.expected, span: ${rv}.span, ...(${rv}.committed ? { committed: true } : {}) }`\n const stmts = [\n `${ind(ctx)}const ${rv} = _rp[${idx}].parse(input, ${pos}, _ctx)`,\n ...emitIfFail(ctx, `!${rv}.ok`, failStmt),\n `${ind(ctx)}const ${vv} = ${rv}.value`,\n `${ind(ctx)}const ${ev} = ${rv}.span.end`,\n ...(parser._meta.canMatchNewline ? emitLineTrack(ctx, pos, ev) : []),\n ]\n return { stmts, valueVar: vv, endVar: ev }\n}\n\n/**\n * Compile a lazy/ref parser into a named function declaration.\n *\n * The named function is registered in ctx.namedParsers BEFORE its body is\n * emitted. This breaks the recursion cycle: when the body emitter encounters\n * the same ref again it finds it already registered and emits a call instead\n * of recursing infinitely.\n *\n * All named functions share the parent function's scope (via closure), so they\n * can read _rp, _mf, and all hoisted regex consts without extra args.\n *\n * JavaScript hoists function declarations within a function body, so the order\n * we push to namedFnDecls doesn't affect correctness.\n */\nfunction emitLazy(p: Combinator<unknown>, def: Extract<ParserDef, { tag: 'lazy' }>, ctx: Ctx, pos: string): ER {\n // Single-use, non-recursive ref: inline its body at this call site instead\n // of hoisting a named function nobody else calls. Uses the CURRENT ctx\n // indent/failLabel (unlike the named-function path below, which resets\n // both for a fresh function scope) \u2014 the resolved combinator is emitted\n // exactly as if the grammar author had written it inline directly.\n // A named rule (in the rule map) is NEVER inlined: it must stay a standalone\n // `_r_<Name>` function so it's addressable and overridable by name (the\n // linkable/fusable form). Only private (non-map) single-use refs inline.\n const canonical = ctx.ruleNames?.get(p)\n const usage = ctx.lazyUsage\n if (!canonical && usage && (usage.counts.get(p) ?? 0) <= 1 && !usage.recursive.has(p)) {\n let resolved: Combinator<unknown>\n try {\n resolved = def.thunk()\n } catch {\n return emitRuntimeFallback(p, ctx, pos)\n }\n // INLINE EXPANSION CAP (see INLINE_MAX_NODES). Charge this paste against the\n // enclosing function's budget. When it does not fit, fall through to the named-\n // function path below: the ref becomes a `_pfN` and is CALLED. Correctness is\n // unaffected \u2014 that path is the established shape for every multi-use ref \u2014 so the\n // only thing the cap trades is one call for the pasted bytes, and it only ever\n // binds on functions that have already absorbed a full budget's worth of inlining.\n const cost = usage.sizes.get(resolved) ?? 1\n if (cost <= ctx.inlineLeft) {\n ctx.inlineLeft -= cost\n return emit(resolved, ctx, pos)\n }\n _inlineCapSink?.push({ fn: ctx.currentFnName ?? '<root>', nodes: cost })\n }\n\n if (!ctx.namedParsers.has(p)) {\n const fnName = canonical ?? `${nsp(ctx)}_pf${ctx.namedParsers.size}`\n ctx.namedParsers.set(p, fnName) // register FIRST so recursive refs see it\n\n let resolved: Combinator<unknown>\n try {\n resolved = def.thunk()\n } catch {\n // ref.define() not called yet \u2014 fall back to runtime\n ctx.namedParsers.delete(p)\n return emitRuntimeFallback(p, ctx, pos)\n }\n\n const savedIndent = ctx.indent\n const savedFailLabel = ctx.failLabel\n const savedRecord = ctx.recordFail\n // Fresh function body \u2192 fresh inline budget (see INLINE_MAX_NODES).\n const savedInlineLeft = ctx.inlineLeft, savedFnName = ctx.currentFnName\n ctx.inlineLeft = ctx.inlineMax; ctx.currentFnName = fnName\n const failureRuleId = p === ctx.coverage?.entry\n ? undefined\n : (ctx.coverage?.plan.rules.get(p) ?? ctx.coverage?.plan.rules.get(resolved))\n const savedActiveRule = ctx.activeCoverageRuleId\n const savedSuppressFailure = ctx.suppressCoverageFailure\n ctx.indent = 1\n ctx.failLabel = '_pfail' // failures break _pfail (labeled block in fn body)\n // A named fn is compiled ONCE but shared across every call site, so its body\n // must always record `_ctx._fx` \u2014 the caller (emitNamedFnCall) decides via\n // its own recordFail whether to propagate. Baking the first caller's\n // (possibly swallowed) recordFail into the shared body would leave `_ctx._fx`\n // unset for other callers that DO read it.\n ctx.recordFail = true\n // The generated named-rule wrapper owns this event. Do not also emit it at\n // each terminal failure in the named body.\n if (failureRuleId !== undefined) {\n ctx.activeCoverageRuleId = undefined\n ctx.suppressCoverageFailure = true\n }\n const r = emit(resolved, ctx, '_pos')\n ctx.indent = savedIndent\n ctx.failLabel = savedFailLabel\n ctx.recordFail = savedRecord\n ctx.inlineLeft = savedInlineLeft\n ctx.currentFnName = savedFnName\n ctx.activeCoverageRuleId = savedActiveRule\n ctx.suppressCoverageFailure = savedSuppressFailure\n\n pushNamedFnDecl(ctx, fnName, r.stmts, r.valueVar, r.endVar, failureRuleId)\n }\n\n const fnName = ctx.namedParsers.get(p)!\n return emitNamedFnCall(ctx, fnName, pos)\n}\n\n// \u2500\u2500 recover: try inner; on failure scan to sentinel, emit ParseError node \u2500\u2500\u2500\u2500\nfunction emitRecover(def: Extract<ParserDef, { tag: 'recover' }>, ctx: Ctx, pos: string): ER {\n const { stmts: innerStmts, okVar, valVar, endVar } = emitFallible(def.parser, ctx, pos)\n\n const ind0 = ind(ctx)\n const scanV = v(ctx, '_sc')\n const errV = v(ctx, '_err')\n\n // Sentinel check runs inside the while loop.\n const whileBodyLevels = ctx.indent + 2\n const { stmts: sentStmts, okVar: sentOk } = emitFallible(def.sentinel, ctx, scanV)\n\n const stmts: string[] = [\n ...innerStmts,\n `${ind0}if (!${okVar}) {`,\n `${ind0} let ${scanV} = ${pos}`,\n `${ind0} while (${scanV} < input.length) {`,\n ...reindentStmts(sentStmts, whileBodyLevels),\n `${ind0} if (${sentOk}) break`,\n `${ind0} ${scanV}++`,\n `${ind0} }`,\n ...emitLineTrack(ctx, pos, scanV).map(s => `${ind0} ${s.trim()}`),\n `${ind0} const ${errV} = { _tag: 'parseError', span: ${emitSpanExpr(ctx, pos, scanV)}, expected: ${JSON.stringify(deriveExpected(def.parser))} }`,\n `${ind0} if (_ctx._errors) _ctx._errors.push(${errV})`,\n `${ind0} ${valVar} = ${errV}`,\n `${ind0} ${endVar} = ${scanV}`,\n `${ind0} ${okVar} = true`,\n `${ind0}}`,\n ]\n return { stmts, valueVar: valVar, endVar }\n}\n\n// \u2500\u2500 expect: try inner; on failure record a ParseError + recover in place \u2500\u2500\u2500\u2500\u2500\nfunction emitExpect(def: Extract<ParserDef, { tag: 'expect' }>, ctx: Ctx, pos: string): ER {\n const { stmts: innerStmts, okVar, valVar, endVar, mayCommit } = emitFallible(def.parser, ctx, pos)\n const ind0 = ind(ctx)\n const errV = v(ctx, '_err')\n const stmts: string[] = [\n ...innerStmts,\n `${ind0}if (!${okVar}) {`,\n `${ind0} const ${errV} = { _tag: 'parseError', span: ${emitSpanExpr(ctx, pos, pos)}, expected: ${JSON.stringify(def.expected)} }`,\n `${ind0} if (_ctx._errors) _ctx._errors.push(${errV})`,\n // Embed the missing-token error as a `parseError` CST child, mirroring the\n // interpreter (expect.ts) and the list-recovery emit sites \u2014 guarded on\n // `_ctx._tolerant`, under which the driver always installs `_ctx._rec`.\n `${ind0} if (_ctx._tolerant) _ctx._rec.capture(_ctx, ${errV})`,\n ...(mayCommit ? [`${ind0} _ctx._fc = false`] : []),\n `${ind0} ${valVar} = ${errV}`,\n `${ind0} ${endVar} = ${pos}`,\n `${ind0} ${okVar} = true`,\n `${ind0}}`,\n ]\n return { stmts, valueVar: valVar, endVar }\n}\n\n// ---------------------------------------------------------------------------\n// Main dispatch\n// ---------------------------------------------------------------------------\n\n/**\n * Object-identity de-duplication wrapper around `emitDispatch`. A COMPOUND\n * combinator referenced from more than one place (a shared `const value =\n * choice(...)`, or a sub-parser reached from two positions within one rule) is\n * emitted ONCE as a private named function and CALLED at every reference \u2014\n * instead of pasting its full lowered body at each site, which multiplies\n * combinatorially through nested `many`/`sepBy`/`sequence`. Mirrors emitLazy's\n * named-function path (same `_pf` naming, same recordFail/scope reset). Leaf\n * terminals and `lazy` refs are handled elsewhere; named rules keep their own\n * `_r_<Name>` path; probe/ trivia-capture contexts opt out (see `noHoist`).\n */\nfunction emit(p: Combinator<unknown>, ctx: Ctx, pos: string): ER {\n // sharedPrefix: a registered leading terminal replays the once-recognized prefix\n // instead of re-scanning (see emitSharedPrefix). Checked before coverage/hoisting\n // \u2014 the replay is a plain leaf emission with no rule/label identity of its own.\n const replay = ctx.replayPrefix?.get(p)\n if (replay !== undefined) return emitReplayPrefixLeaf(ctx, pos, replay)\n const dispatch = (emissionPos = pos): ER => {\n const savedRule = ctx.activeCoverageRuleId\n const rule = ctx.coverage?.plan.rules.get(p)\n // The outer coverage IIFE owns the entry rule's failure event, because its\n // generated body may return directly from any depth.\n if (rule && p !== ctx.coverage?.entry && !ctx.suppressCoverageFailure) ctx.activeCoverageRuleId = rule\n const result = emitDispatch(p, ctx, emissionPos)\n ctx.activeCoverageRuleId = savedRule\n return result\n }\n const instrument = (r: ER): ER => {\n const ruleId = ctx.coverage?.plan.rules.get(p)\n const labelIds = ctx.coverage?.plan.labels.get(p)\n if (!ruleId && !labelIds) return r\n return {\n ...r,\n stmts: [\n ...(ruleId ? [`${ind(ctx)}_ctx._grammarCoverage?.(${JSON.stringify(ruleId)})`] : []),\n ...(ruleId ? [`${ind(ctx)}_ctx._grammarTrace?.write({ id: ${JSON.stringify(ruleId)}, phase: 'enter', offset: ${pos} })`] : []),\n ...r.stmts,\n ...(ruleId ? [`${ind(ctx)}_ctx._grammarTrace?.write({ id: ${JSON.stringify(ruleId)}, phase: 'success', offset: ${pos}, end: ${r.endVar} })`] : []),\n ...(labelIds?.flatMap(id => [`${ind(ctx)}_ctx._grammarCoverage?.(${JSON.stringify(id)})`]) ?? []),\n ...(labelIds?.flatMap(id => [`${ind(ctx)}_ctx._grammarTrace?.write({ id: ${JSON.stringify(id)}, phase: 'success', offset: ${pos}, end: ${r.endVar} })`]) ?? []),\n ],\n }\n }\n const usage = ctx.lazyUsage\n if (\n usage &&\n !ctx.noHoist &&\n !ctx.capAsTrivia &&\n !ctx.ruleNames?.has(p) &&\n isHoistableTag(p._def.tag) &&\n (usage.counts.get(p) ?? 0) > 1 &&\n // Only hoist subtrees big enough that de-duplicating them beats the call\n // overhead. A tiny shared wrapper (e.g. `optional(literal(';'))`) inlines\n // faster than it calls and barely moves the byte count; the size explosion\n // is all in LARGE choices/sequences referenced from many positions.\n (usage.sizes.get(p) ?? 0) >= HOIST_MIN_SUBTREE\n ) {\n const existing = ctx.namedParsers.get(p)\n if (existing !== undefined) return emitNamedFnCall(ctx, existing, pos)\n const fnName = `${nsp(ctx)}_pf${ctx.namedParsers.size}`\n ctx.namedParsers.set(p, fnName) // register FIRST (defensive; a compound ref never self-recurses)\n const savedIndent = ctx.indent\n const savedFailLabel = ctx.failLabel\n const savedRecord = ctx.recordFail\n const savedInlineLeft = ctx.inlineLeft, savedFnName = ctx.currentFnName\n ctx.inlineLeft = ctx.inlineMax; ctx.currentFnName = fnName\n ctx.indent = 1\n ctx.failLabel = '_pfail' // failures break _pfail (labeled block in the fn body)\n ctx.recordFail = true // shared body always records; each caller decides propagation\n const r = dispatch('_pos')\n ctx.indent = savedIndent\n ctx.failLabel = savedFailLabel\n ctx.recordFail = savedRecord\n ctx.inlineLeft = savedInlineLeft\n ctx.currentFnName = savedFnName\n pushNamedFnDecl(ctx, fnName, r.stmts, r.valueVar, r.endVar)\n return instrument(emitNamedFnCall(ctx, fnName, pos))\n }\n return instrument(dispatch())\n}\n\nfunction emitDispatch(p: Combinator<unknown>, ctx: Ctx, pos: string): ER {\n // A balanced() under a grammar-level ambient scanSkip must re-resolve that set\n // into its INTERIOR at emit time \u2014 the compiled mirror of the interpreter\n // wrapper. Without this the eager `_def` (per-call skip only) would let a\n // delimiter hidden inside a declared opaque region (string) close the balance\n // early. Rebuild the interior with [ambient scanSkip, ...ownSkip] and emit it.\n const bal = (p as BalancedAmbient)._balancedAmbient\n // Precise, identity-keyed cycle guard (`balancedRebuildStack`): break the SECOND\n // recursion class WITHOUT over-suppressing. When a `balanced()` is a MEMBER of its\n // own `activeScanSkip`, the rebuilt interior contains that same skipper \u2014 re-entering\n // here with the unchanged set would rebuild forever (distinct from a balanced's own\n // `self` back-edge, handled below via the lazy-usage merge). Suppress the rebuild\n // ONLY when re-entering a balanced ALREADY on the stack (the true self-cycle); it\n // then emits its eager `_def`. A NESTED DIFFERENT balanced (not on the stack) STILL\n // gets its own ambient rebuild, so it keeps skipping ambient opaque units \u2014 matching\n // the interpreter (a blanket flag would emit it eager and diverge).\n if (bal && ctx.activeScanSkip && ctx.activeScanSkip.length > 0 && !ctx.balancedRebuildStack?.has(p)) {\n const interior = buildBalancedInterior(bal.open, bal.close, [...ctx.activeScanSkip, ...bal.ownSkip])\n markUnusedValues(interior)\n // The interior is created HERE, so it is absent from ctx.lazyUsage \u2014 which\n // `emitLazy` reads to tell a recursive `self` back-edge (name it) from a\n // single-use ref (inline it). Without merging, its `self` would be treated as\n // single-use and inlined forever. Merge the fresh subtree's analysis in (its\n // nodes have unique identities, so no collision) so `self` is named + recursive.\n if (ctx.lazyUsage) {\n const u = analyzeLazyUsage(interior)\n for (const [k, n] of u.counts) ctx.lazyUsage.counts.set(k, (ctx.lazyUsage.counts.get(k) ?? 0) + n)\n for (const k of u.recursive) ctx.lazyUsage.recursive.add(k)\n for (const [k, s] of u.sizes) ctx.lazyUsage.sizes.set(k, s)\n }\n const stack = ctx.balancedRebuildStack ?? (ctx.balancedRebuildStack = new Set())\n stack.add(p)\n try {\n return emit(interior, ctx, pos)\n } finally {\n stack.delete(p)\n }\n }\n const def = p._def\n switch (def.tag) {\n case 'literal': return emitLit(def, ctx, pos)\n case 'regex': return emitRegex(def, ctx, pos, p._meta.canMatchNewline)\n case 'keywords': return emitKeywords(def, ctx, pos)\n case 'sequence': return emitSeq(def, ctx, pos)\n case 'choice': return emitChoice(p, def, ctx, pos)\n case 'dispatch': return emitDispatchCombinator(p, def, ctx, pos)\n case 'attempt': return emitAttempt(p, def, ctx, pos)\n case 'many':\n case 'oneOrMore': return emitMany(def, ctx, pos)\n case 'optional': return emitOptional(def, ctx, pos)\n case 'sepBy': return emitSepBy(p, def, ctx, pos)\n case 'transform': {\n const fnSrc = transformFnSource(def.fn, def.fnSrc)\n if (fnSrc && def.parser._def.tag === 'dispatch' && isDispatchTailOnlyTransform(fnSrc)) {\n return emitDispatchCombinator(def.parser, def.parser._def, ctx, pos, 'tail')\n }\n if (fnSrc && def.parser._def.tag === 'sequence') {\n const seqR = emitSeqValues(def.parser._def, ctx, pos)\n const inlined = tryInlineDestructureTransform(fnSrc, seqR.valueVars)\n if (inlined) {\n const mv = v(ctx, '_mapped')\n return {\n stmts: [...seqR.stmts, `${ind(ctx)}const ${mv} = ${inlined}`],\n valueVar: mv,\n endVar: seqR.endVar,\n }\n }\n }\n const inner = emit(def.parser, ctx, pos)\n if (fnSrc) {\n const unary = tryInlineUnaryTransform(fnSrc, inner.valueVar)\n if (unary) {\n const mv = v(ctx, '_mapped')\n return {\n stmts: [...inner.stmts, `${ind(ctx)}const ${mv} = ${unary}`],\n valueVar: mv,\n endVar: inner.endVar,\n }\n }\n }\n const fnIdx = pushMapFn(ctx, def.fn, def.fnSrc ?? null)\n const mv = v(ctx, '_mapped')\n return {\n stmts: [\n ...inner.stmts,\n `${ind(ctx)}const ${mv} = ${mfRef(ctx)}[${fnIdx}](${inner.valueVar}, { start: ${pos}, end: ${inner.endVar} })`,\n ],\n valueVar: mv,\n endVar: inner.endVar,\n }\n }\n case 'skip': {\n const mainR = emit(def.main, ctx, pos)\n const skipR = emit(def.skipped, ctx, mainR.endVar)\n // skipped is optional \u2014 if it fails we just keep main's end\n const endV = v(ctx, '_skipe')\n return {\n stmts: [\n ...mainR.stmts,\n // try skipped; if fails, keep main end\n `${ind(ctx)}let ${endV} = ${mainR.endVar}`,\n `${ind(ctx)}try {`,\n ...reindentStmts(skipR.stmts, ctx.indent + 1),\n `${ind(ctx)} ${endV} = ${skipR.endVar}`,\n `${ind(ctx)}} catch {}`,\n ],\n valueVar: mainR.valueVar,\n endVar: endV,\n }\n }\n case 'lazy': return emitLazy(p, def, ctx, pos)\n case 'trivia': return emit(def.parser, ctx, pos)\n case 'token': return emitToken(def, ctx, pos)\n case 'leaf': return emitLeaf(def, ctx, pos)\n case 'label': {\n const inner = emitFallible(def.parser, ctx, pos)\n return {\n stmts: [\n ...inner.stmts,\n ...emitIfFail(ctx, `!${inner.okVar}`, failBody(ctx, JSON.stringify(def.label), '_ctx._fe')),\n ],\n valueVar: inner.valVar,\n endVar: inner.endVar,\n }\n }\n case 'field': {\n const inner = emit(def.parser, ctx, pos)\n return {\n stmts: [\n ...inner.stmts,\n `${ind(ctx)}if (_ctx._fields) _ctx._fields.push({ name: ${JSON.stringify(def.name)}, value: ${inner.valueVar}, span: { start: ${pos}, end: ${inner.endVar} } })`,\n ],\n valueVar: inner.valueVar,\n endVar: inner.endVar,\n }\n }\n case 'grammar': {\n const savedTrivia = ctx.activeTrivia\n const savedKindLabels = ctx.triviaKindLabels\n const opaqueRootCapture = hasSelectedRootTrivia(ctx) && def.rootCapture === 'opaque'\n const strictScopeCheck = hasSelectedRootTrivia(ctx) && def.triviaParser !== undefined\n && !def.triviaParser._meta.rootTriviaClassified\n && !opaqueRootCapture\n ? `${ind(ctx)}if (_ctx._rootTriviaStrictScopes) throw new TypeError(${JSON.stringify('parser(): selected root trivia requires classifiedTrivia() for every local trivia scope, or rootCapture: \\'opaque\\'.')})`\n : undefined\n if (def.clearTrivia) {\n // noTrivia / parser({ trivia: null }): contiguous terms, no trivia skipped.\n ctx.activeTrivia = undefined\n ctx.triviaKindLabels = undefined\n } else if (def.triviaParser) {\n ctx.activeTrivia = def.triviaParser\n if (def.triviaParser._meta.triviaKindLabels) {\n ctx.triviaKindLabels = def.triviaParser._meta.triviaKindLabels\n }\n }\n const savedCapture = def.captureTrivia ? v(ctx, '_gcap') : null\n const savedRootCapture = opaqueRootCapture ? v(ctx, '_grtc') : null\n const opaqueValue = opaqueRootCapture ? v(ctx, '_grtv') : null\n const opaqueEnd = opaqueRootCapture ? v(ctx, '_grte') : null\n if (opaqueRootCapture) ctx.indent++\n const r = emit(def.parser, ctx, pos)\n if (opaqueRootCapture) ctx.indent--\n ctx.activeTrivia = savedTrivia\n ctx.triviaKindLabels = savedKindLabels\n if (!savedCapture && !opaqueRootCapture) return strictScopeCheck === undefined ? r : {\n ...r,\n stmts: [strictScopeCheck, ...r.stmts],\n }\n if (opaqueRootCapture) {\n return {\n stmts: [\n ...(strictScopeCheck === undefined ? [] : [strictScopeCheck]),\n `${ind(ctx)}let ${opaqueValue}, ${opaqueEnd}`,\n `${ind(ctx)}${savedCapture ? `const ${savedCapture} = _ctx.captureTrivia; ` : ''}const ${savedRootCapture} = _ctx._rootTriviaCapture; _ctx._rootTriviaCapture = false`,\n `${ind(ctx)}try {`,\n ...(savedCapture ? [`${ind(ctx)} _ctx.captureTrivia = true`] : []),\n ...r.stmts,\n `${ind(ctx)} ${opaqueValue} = ${r.valueVar}; ${opaqueEnd} = ${r.endVar}`,\n `${ind(ctx)}} finally { ${savedCapture ? `_ctx.captureTrivia = ${savedCapture}; ` : ''}_ctx._rootTriviaCapture = ${savedRootCapture} }`,\n ],\n valueVar: opaqueValue!,\n endVar: opaqueEnd!,\n }\n }\n return {\n ...r,\n stmts: [\n ...(strictScopeCheck === undefined ? [] : [strictScopeCheck]),\n `${ind(ctx)}const ${savedCapture} = _ctx.captureTrivia; _ctx.captureTrivia = true`,\n ...r.stmts,\n `${ind(ctx)}_ctx.captureTrivia = ${savedCapture}`,\n ],\n }\n }\n case 'not': return emitNot(def, ctx, pos)\n case 'peek': return emitPeek(def, ctx, pos)\n case 'routed': return emitRouted(ctx, pos, def)\n case 'node': return emitNode(def, ctx, pos)\n case 'scanTo': return emitScanTo(def, ctx, pos)\n case 'recover': return emitRecover(def, ctx, pos)\n case 'expect': return emitExpect(def, ctx, pos)\n case 'guard': {\n const fnIdx = ctx.mapFns.length\n ctx.mapFns.push(def.predicate as (v: unknown, span: unknown) => unknown)\n // Macro path: inline the captured predicate source; runtime compile() \u2192 null.\n ctx.mapFnSrcs.push(def.predSrc ?? null)\n const vv = v(ctx)\n return {\n stmts: [\n ...emitIfFail(ctx, `!${mfRef(ctx)}[${fnIdx}](_ctx.state)`, failBody(ctx, '\"gate\"', pos)),\n `${ind(ctx)}const ${vv} = null`,\n ],\n valueVar: vv,\n endVar: pos,\n }\n }\n case 'withCtx': {\n // Store getter for extra value \u2014 _mf[N]() returns the captured value.\n const evIdx = ctx.mapFns.length\n const extra = def.extra\n ctx.mapFns.push((() => extra) as (v: unknown, span: unknown) => unknown)\n // Macro path: inline the captured `extra` as a getter `() => (extra)` so\n // `_mf[evIdx]()` returns the value; runtime compile() \u2192 null (closure above).\n ctx.mapFnSrcs.push(def.extraSrc !== undefined ? `() => (${def.extraSrc})` : null)\n\n // Wrap inner parser as a named function so it receives _ctx as a parameter.\n // That lets us call it with a modified ctx (user changed) without polluting\n // the outer _ctx variable for subsequent emits.\n const innerParser = def.parser as Combinator<unknown>\n if (!ctx.namedParsers.has(innerParser)) {\n const fnName = `_wcf${ctx.namedParsers.size}`\n ctx.namedParsers.set(innerParser, fnName)\n const savedIndent = ctx.indent\n const savedFailLabel = ctx.failLabel\n const savedRecord = ctx.recordFail\n const savedInlineLeft = ctx.inlineLeft, savedFnName = ctx.currentFnName\n ctx.inlineLeft = ctx.inlineMax; ctx.currentFnName = fnName\n ctx.indent = 1\n ctx.failLabel = '_pfail' // failures break _pfail (same as emitLazy)\n ctx.recordFail = true // shared body always records (see emitLazy)\n // Emit the inner BODY directly (emitDispatch), not through the hoist\n // wrapper `emit()`. We just pre-registered `innerParser \u2192 _wcf` above so\n // OTHER references reuse this named fn; re-entering `emit()` here would\n // re-find that same registration and emit a SELF-CALL (`_wcf` calls\n // `_wcf`) whenever the inner is multiply-reachable (`counts > 1`) and big\n // enough to hoist \u2014 infinite recursion at parse time. Mirrors `emit()`'s\n // own register-then-emitDispatch pattern (never emit-on-self).\n const innerR = emitDispatch(innerParser, ctx, '_pos')\n ctx.indent = savedIndent\n ctx.failLabel = savedFailLabel\n ctx.recordFail = savedRecord\n ctx.inlineLeft = savedInlineLeft\n ctx.currentFnName = savedFnName\n pushNamedFnDecl(ctx, fnName, innerR.stmts, innerR.valueVar, innerR.endVar)\n }\n const fn = ctx.namedParsers.get(innerParser)!\n\n const rv = v(ctx, '_wcr')\n const vv = v(ctx, '_wcv')\n const ev = v(ctx, '_wce')\n return {\n stmts: [\n `${ind(ctx)}const ${rv} = { ..._ctx, state: ${mfRef(ctx)}[${evIdx}]() }`,\n `${ind(ctx)}const ${vv} = ${fn}(input, ${pos}, ${rv})`,\n // withCtx runs on a spread child ctx \u2014 copy its recorded failure back\n // and propagate the inner failure verbatim (interpreter parity).\n ...emitIfFail(ctx, `${vv} === ${NAMED_FN_FAIL}`, propagateFailBody(ctx, rv)),\n `${ind(ctx)}const ${ev} = ${NAMED_FN_END}`,\n ],\n valueVar: vv,\n endVar: ev,\n }\n }\n default: return emitRuntimeFallback(p, ctx, pos)\n }\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n/*\n * Host mode, its fused-map symbols, and the artifact/host compatibility check now live\n * in `src/cst/host-mode.ts` \u2014 the DRIVER (`parseman/run`) has to enforce the same\n * contract and cannot import the compiler to reach it. Re-exported here so every\n * existing `from './compiler/codegen.ts'` import keeps working unchanged.\n */\nexport { assertHostModeCompatible, FUSED_HOST_MODE, FUSED_HOST_ELIDED } from '../cst/host-mode.ts'\nexport type { HostMode } from '../cst/host-mode.ts'\n\nexport type CompiledParser<T> = {\n parse(input: string, pos?: number): ParseResult<T>\n /** Like parse(), but with a caller-supplied ParseContext (e.g. `_triviaLog` for CST grammars). */\n parseWithContext(input: string, ctx: ParseContext, pos?: number): ParseResult<T>\n /**\n * Like parse(), but activates the error-collection channel. Recovery points\n * (expect()) collect their ParseErrors into result.errors instead of only\n * embedding them as values. Always returns ParseOk \u2014 top-level failures are\n * still ParseFail.\n */\n parseWithErrors(input: string, pos?: number): ParseResult<T> & { errors: ParseError[] }\n /** The generated source (for inspection / future source maps) */\n source: string\n /**\n * A self-contained JS expression (IIFE) that evaluates to a parse function.\n * Safe to inline directly into transformed source \u2014 no external references\n * except for runtime-fallback parsers embedded via closures.\n * Returns null if the parser cannot be fully inlined (e.g. contains user\n * closures that can't be serialized).\n */\n inlineExpression: string | null\n /** Present only when compiled with `{ coverage: true }`. */\n coverageDefinitions?: readonly import('./grammar-coverage-ids.ts').GrammarCoverageDefinition[]\n}\n\n/**\n * Does this combinator tree contain a node() anywhere (following ref/lazy\n * thunks)? Determines whether the compile emits CST capture \u2014 so non-node\n * grammars stay byte-identical. `seen` guards against recursion cycles.\n */\nfunction hasNodeDef(p: Combinator<unknown>, seen: Set<Combinator<unknown>> = new Set()): boolean {\n if (seen.has(p)) return false\n seen.add(p)\n const d = p._def\n switch (d.tag) {\n case 'node': return true\n case 'lazy': { try { return hasNodeDef(d.thunk(), seen) } catch { return false } }\n case 'grammar':\n case 'trivia':\n case 'token':\n case 'leaf':\n case 'label':\n case 'field':\n case 'optional':\n case 'many':\n case 'oneOrMore':\n case 'not':\n case 'peek':\n case 'transform': return hasNodeDef(d.parser, seen)\n case 'skip': return hasNodeDef(d.main, seen) || hasNodeDef(d.skipped, seen)\n case 'sequence':\n case 'choice': return d.parsers.some(x => hasNodeDef(x, seen))\n case 'dispatch': return hasNodeDef(d.selector, seen) || d.cases.some(x => hasNodeDef(x.parser, seen)) || (d.matchers ? d.matchers.some(entry => hasNodeDef(entry.parser, seen)) : false) || (d.otherwise ? hasNodeDef(d.otherwise, seen) : false)\n case 'sepBy': return hasNodeDef(d.parser, seen) || hasNodeDef(d.separator, seen)\n case 'scanTo': return hasNodeDef(d.sentinel, seen) || d.skip.some(x => hasNodeDef(x, seen))\n case 'recover': return hasNodeDef(d.parser, seen) || hasNodeDef(d.sentinel, seen)\n case 'expect': return hasNodeDef(d.parser, seen)\n case 'withCtx': return hasNodeDef(d.parser, seen)\n default: return false\n }\n}\n\nfunction hasLineTrackingDef(p: Combinator<unknown>, seen: Set<Combinator<unknown>> = new Set()): boolean {\n if (seen.has(p)) return false\n seen.add(p)\n const d = p._def\n if (p._meta.grammarTrackLines) return true\n if (d.tag === 'grammar' && d.trackLines) return true\n if (d.tag === 'lazy') {\n try { return hasLineTrackingDef(d.thunk(), seen) } catch { return false }\n }\n return childrenOf(d).some(child => hasLineTrackingDef(child, seen))\n}\n\nfunction parserUsesRouted(p: Combinator<unknown>, seen: Set<Combinator<unknown>> = new Set()): boolean {\n if (seen.has(p)) return false\n seen.add(p)\n const d = p._def\n switch (d.tag) {\n case 'routed': return true\n case 'lazy': { try { return parserUsesRouted(d.thunk(), seen) } catch { return false } }\n case 'dispatch': return false\n default: return childrenOf(d).some(child => parserUsesRouted(child, seen))\n }\n}\n\n/** Whether a grammar tree owns a direct semantic node reduction. */\nfunction hasDirectBuildDef(p: Combinator<unknown>, seen: Set<Combinator<unknown>> = new Set()): boolean {\n if (seen.has(p)) return false\n seen.add(p)\n const d = p._def\n if (d.tag === 'node' && d.build !== undefined) return true\n if (d.tag === 'lazy') {\n try { return hasDirectBuildDef(d.thunk(), seen) } catch { return false }\n }\n return childrenOf(d).some(child => hasDirectBuildDef(child, seen))\n}\n\n/** Immediate child combinators of a def, for generic tree walks (childrenOf). */\nfunction childrenOf(def: ParserDef): Combinator<unknown>[] {\n switch (def.tag) {\n case 'sequence':\n case 'choice': return def.parsers\n case 'dispatch': return [def.selector, ...def.cases.map(entry => entry.parser), ...(def.matchers ? def.matchers.map(entry => entry.parser) : []), ...(def.otherwise ? [def.otherwise] : [])]\n case 'many':\n case 'attempt':\n case 'optional':\n case 'transform':\n case 'trivia':\n case 'token':\n case 'leaf':\n case 'label':\n case 'field':\n case 'grammar':\n case 'not':\n case 'peek':\n case 'node':\n case 'withCtx':\n case 'expect': return [def.parser]\n // emitMany's min>=1 branch and emitSepBy both codegen `def.parser` more than\n // once (`min` mandatory matches, then again inside the repeat loop) \u2014 each is a\n // real emit() call site, so the usage analysis must see one edge per site or it\n // undercounts a single-use `parser` ref as inline-safe when it's actually\n // referenced from several positions within this one compiled function.\n case 'oneOrMore': return Array.from({ length: def.min + 1 }, () => def.parser)\n case 'sepBy': return [def.parser, def.parser, def.separator]\n case 'skip': return [def.main, def.skipped]\n case 'recover': return [def.parser, def.sentinel]\n case 'scanTo': return [def.sentinel, ...def.skip]\n // A `routed()` fallback IS emitted at this site (emitRouted), so the usage\n // analysis must see the edge \u2014 otherwise a fallback shared by several routed()\n // sites is miscounted as single-use and inlined at each.\n case 'routed': return def.fallback ? [def.fallback] : []\n case 'lazy':\n case 'literal':\n case 'regex':\n case 'keywords':\n case 'guard':\n case 'unknown': return []\n }\n}\n\n/**\n * Compound combinators worth hoisting into a shared named function when the SAME\n * object is referenced more than once. Leaf terminals (`literal`/`regex`/\n * `keywords`/`guard`) aren't worth a call; `lazy` is owned by emitLazy; the\n * context-bearing wrappers (`grammar`/`trivia`/`label`/`withCtx`/`expect`/`skip`/\n * `recover`/`scanTo`) are excluded so no per-site context (active trivia, capture\n * mode) can be baked into a shared body.\n */\nconst HOISTABLE_TAGS: ReadonlySet<ParserDef['tag']> = new Set<ParserDef['tag']>([\n 'sequence', 'choice', 'dispatch', 'many', 'oneOrMore', 'optional', 'sepBy', 'transform', 'node', 'not',\n])\nfunction isHoistableTag(tag: ParserDef['tag']): boolean {\n return HOISTABLE_TAGS.has(tag)\n}\n\n/** Minimum approximate subtree size (see `subtreeSizes`) for a shared combinator\n * to be hoisted into a named function rather than inlined at each reference.\n * Small enough to catch every real explosion (a value `choice` is ~12+), large\n * enough that trivial shared wrappers stay inline and keep the hot path fast. */\nconst HOIST_MIN_SUBTREE = 3\n\n/**\n * INLINE EXPANSION CAP \u2014 a bound on how much one emitted function may grow by pasting\n * single-use ref bodies into it.\n *\n * The decision procedure, in one sentence: **each emitted function gets a budget of\n * `INLINE_MAX_NODES` combinator nodes of inlined single-use refs; once it is spent, the\n * remaining single-use refs in that function become named functions and are called.**\n *\n * What this limits, precisely. `emitLazy` inlines a ref that is used ONCE and is not\n * recursive, because hoisting a function nobody else calls is pure overhead. That is\n * correct per ref and unbounded in aggregate: a rule whose body is a chain of\n * single-use helpers expands transitively, and the expansion has no ceiling that a\n * grammar author can see or predict. This is NOT the identity-keyed hoisting of a\n * MULTIPLY-referenced subtree (`HOIST_MIN_SUBTREE` above) \u2014 that already works, and a\n * shared object referenced 1 or 38 times emits flat. Conflating the two is what made\n * the size problem look like a duplication problem.\n *\n * Why a per-function budget rather than a per-ref size limit or a whole-artifact budget:\n * - a per-ref limit bounds each paste but not the transitive total, which is the\n * quantity that actually grows;\n * - a whole-artifact budget needs an eviction order, and any order that depends on\n * which function was compiled first is a decision the author cannot predict;\n * - a per-function budget needs no eviction order at all. Emission order within one\n * function is the grammar's own left-to-right order, so \"the refs after the budget\n * runs out\" is stable and explainable.\n *\n * Charge unit is `subtreeSizes` \u2014 the same approximate node count `HOIST_MIN_SUBTREE`\n * uses, so the two policies are denominated in one currency.\n *\n * The default is measured, not chosen by taste: see `bench/size/inline-cap.md` for the\n * size/speed sweep this number came from.\n */\nexport const INLINE_MAX_NODES = 1000\n\n/**\n * Resolve the cap: explicit option wins, then `PARSEMAN_MAX_INLINE`, then the default.\n * The escape hatch is deliberately explicit and OFF by default \u2014 a grammar that really\n * wants unbounded inlining sets `Infinity` and says so, rather than discovering that a\n * silent policy took it away. Read ONCE per compile and stored on the ctx, so a single\n * compile can never observe two different values.\n */\nexport function resolveInlineMax(explicit?: number): number {\n if (explicit !== undefined) return explicit\n const env = typeof process !== 'undefined' ? process.env?.PARSEMAN_MAX_INLINE : undefined\n if (env !== undefined && env !== '') {\n if (env === 'off' || env === 'infinity') return Infinity\n const n = Number(env)\n if (Number.isFinite(n) && n >= 0) return n\n }\n return INLINE_MAX_NODES\n}\n\n/**\n * Static-occurrence analysis for `lazy` (ref()) combinators, ahead of codegen.\n * `emitLazy` currently hoists EVERY lazy ref into its own named function\n * (_pfN), even when it's referenced from exactly one place \u2014 necessary for\n * genuinely recursive/shared rules, wasteful for the common case of a `g.foo`\n * helper rule used for grammar readability but only ever called once. On a\n * large mutually-referential grammar (many `g.xxx` helper rules, each used\n * from ~1 call site) this multiplies function count far past the number of\n * rules a grammar author actually wrote \u2014 observed on the Less grammar:\n * ~1700 compiled functions from ~150 source rules, vs a roughly 1:3 ratio on\n * a comparably-sized but flatter grammar.\n *\n * Returns, for every reachable `lazy` combinator: how many static call sites\n * reference it (`counts`), and whether it participates in a reference cycle\n * (`recursive` \u2014 must stay a named function; inlining a cycle would recurse\n * forever). A ref with count <= 1 and no cycle membership is safe to inline\n * directly at its single call site instead of becoming a named function.\n *\n * Traversal cost: each `lazy` ref's body is descended into at most once\n * (subsequent occurrences just bump the counter) \u2014 polynomial in the number\n * of distinct reachable combinators, matching emitLazy's own memoized\n * codegen cost. Non-lazy nodes are walked without memoization, same as\n * `emit()` itself (a directly-shared non-ref subtree \u2014 discouraged by the\n * `g.xxx` convention but not disallowed \u2014 is revisited per occurrence, same\n * cost class as compilation already pays for it today).\n */\ntype LazyUsage = {\n counts: Map<Combinator<unknown>, number>\n recursive: Set<Combinator<unknown>>\n sizes: Map<Combinator<unknown>, number>\n}\n\nfunction analyzeLazyUsage(root: Combinator<unknown>): LazyUsage {\n return analyzeLazyUsageMulti([root])\n}\n\n/**\n * Memoized approximate subtree size: number of combinator nodes reachable from\n * `p` WITHOUT crossing a `lazy` boundary (a ref counts as 1 leaf \u2014 it lowers to a\n * call, not an inline expansion). This is the size that would be DUPLICATED if the\n * subtree were pasted at another reference, so it's the right quantity to gate\n * hoisting on. Cycles (only possible through a `lazy`, which is a leaf here) can't\n * recur. */\nfunction subtreeSizes(roots: Iterable<Combinator<unknown>>): Map<Combinator<unknown>, number> {\n const sizes = new Map<Combinator<unknown>, number>()\n // A node's inline-expansion size: itself + each child's size, but a `lazy` child\n // counts as 1 (it lowers to a call, so it isn't part of the duplicated bytes).\n // Never crosses a lazy, so it can't cycle (compound nodes don't cycle alone).\n const sz = (p: Combinator<unknown>): number => {\n const cached = sizes.get(p)\n if (cached !== undefined) return cached\n const def = p._def\n let s = 1\n if (def.tag !== 'lazy') {\n for (const child of childrenOf(def)) s += child._def.tag === 'lazy' ? 1 : sz(child)\n }\n sizes.set(p, s)\n return s\n }\n // Visit crosses lazy boundaries (the roots ARE lazy rule-refs) so every reachable\n // compound node gets a size entry; sz() then fills the whole non-lazy subtree.\n const visitedLazy = new Set<Combinator<unknown>>()\n const visit = (p: Combinator<unknown>): void => {\n const def = p._def\n if (def.tag === 'lazy') {\n if (visitedLazy.has(p)) return\n visitedLazy.add(p)\n let resolved: Combinator<unknown>\n try { resolved = def.thunk() } catch { return }\n visit(resolved)\n return\n }\n sz(p)\n for (const child of childrenOf(def)) visit(child)\n }\n for (const root of roots) visit(root)\n return sizes\n}\n\n/**\n * Multi-root variant, for compileRuleMap(): a `rules()` factory's returned\n * map has many top-level entries that legitimately share reachable sub-rules\n * (e.g. `Stylesheet` and `Declaration` both reach `g.valueList`). Walking each\n * entry as its own root into ONE shared counts/descended/active state means a\n * ref's count correctly reflects total usage across the WHOLE rule map \u2014 used\n * once as its own top-level entry AND referenced once internally elsewhere is\n * count 2 (stays a named function, shared correctly), not two independent 1s\n * from two unrelated single-root analyses.\n */\nfunction analyzeLazyUsageMulti(roots: Iterable<Combinator<unknown>>): LazyUsage {\n const counts = new Map<Combinator<unknown>, number>()\n const recursive = new Set<Combinator<unknown>>()\n const descended = new Set<Combinator<unknown>>()\n const active = new Set<Combinator<unknown>>()\n\n function walk(p: Combinator<unknown>): void {\n const def = p._def\n if (def.tag === 'lazy') {\n counts.set(p, (counts.get(p) ?? 0) + 1)\n if (active.has(p)) {\n recursive.add(p)\n return\n }\n if (descended.has(p)) return\n descended.add(p)\n let resolved: Combinator<unknown>\n try {\n resolved = def.thunk()\n } catch {\n return // ref.define() not called yet \u2014 emitLazy's own try/catch handles this at codegen time\n }\n active.add(p)\n walk(resolved)\n active.delete(p)\n return\n }\n // A non-lazy COMPOUND combinator shared by object identity (e.g. a\n // `const value = choice(...)` referenced from several rules, or a sub-parser\n // reached through nested `many`/`sepBy`) is counted per reference edge, so\n // codegen can hoist a multiply-referenced subtree into ONE named function\n // instead of pasting its full lowered body at every reference \u2014 the\n // multiplication that makes nested value grammars explode. We intentionally do\n // NOT memoize the descent here: cycle detection for `lazy` relies on fully\n // traversing every active path (a compound `descended` short-circuit would let\n // the walker return before re-reaching an active `self` ref and marking it\n // recursive \u2192 emitLazy would then inline a recursive ref forever). Non-lazy\n // nodes never form a cycle without passing through a `lazy` (which has its own\n // active/descended guards), so the re-walk stays finite \u2014 same cost as before.\n if (isHoistableTag(def.tag)) {\n counts.set(p, (counts.get(p) ?? 0) + 1)\n }\n for (const child of childrenOf(def)) walk(child)\n }\n\n const rootsArr = [...roots]\n for (const root of rootsArr) walk(root)\n return { counts, recursive, sizes: subtreeSizes(rootsArr) }\n}\n\n/**\n * Dependency manifest for the linkable form: for each rule in the map, the set\n * of OTHER rule names its body references (by name). A referenced rule is a\n * boundary \u2014 we record the edge and do NOT descend into it (its own deps are its\n * own entry). Used by the linker for \u00E0 la carte dep-closure selection and the\n * compose-time name-closure check (every referenced name must resolve in the\n * final set). Self-references are included (a recursive rule depends on itself).\n */\nexport function ruleDependencies(\n ruleMap: ReadonlyArray<readonly [string, Combinator<unknown>]>,\n): Map<string, string[]> {\n const nameOf = new Map<Combinator<unknown>, string>()\n for (const [name, comb] of ruleMap) nameOf.set(comb, name)\n\n const deps = new Map<string, string[]>()\n for (const [name, comb] of ruleMap) {\n const found = new Set<string>()\n const seen = new Set<Combinator<unknown>>()\n const walk = (p: Combinator<unknown>, isRoot: boolean): void => {\n const def = p._def\n // A named `ref` (local OR external) is a rule boundary: record the edge and\n // don't descend. `_ruleName` (set by rules()) also catches EXTERNAL refs \u2014\n // rules referenced by name but defined in another artifact.\n const boundary = def.tag === 'lazy'\n ? (nameOf.get(p) ?? (p as unknown as { _ruleName?: string })._ruleName)\n : nameOf.get(p)\n if (!isRoot && boundary !== undefined) { found.add(boundary); return }\n if (seen.has(p)) return\n seen.add(p)\n if (def.tag === 'lazy') {\n let resolved: Combinator<unknown>\n try { resolved = def.thunk() } catch { return }\n walk(resolved, false)\n return\n }\n for (const child of childrenOf(def)) walk(child, false)\n }\n walk(comb, true)\n deps.set(name, [...found])\n }\n return deps\n}\n\n/**\n * Compile a combinator tree into an optimized parse function at runtime.\n *\n * Uses `new Function` internally, so it will fail in environments with a strict\n * Content Security Policy that omits `'unsafe-eval'`. Prefer the interpreter or\n * macro build plugin in those cases.\n *\n * @see https://www.greadme.com/blog/security/what-is-content-security-policy-complete-guide\n */\n/**\n * The `duplication` compile option. A bare level is shorthand for `{ level }`; the\n * object form adds the `accept` allowlist (finding ids acknowledged as intentional)\n * and the ranking knobs.\n *\n * DEFAULT IS `'off'`, unlike gating. An ungated hot choice is a cliff with no other\n * symptom; a duplicated subtree is a maintenance cost the author may have chosen.\n * More to the point, most findings here are CANDIDATES that need an AST check\n * before they are applied \u2014 a diagnostic that prints \"candidate, verify\" on every\n * build teaches people to stop reading it. Run it deliberately (a lint script, a\n * review pass, `PARSEMAN_DUPLICATION=warn`), not on every compile.\n */\nexport type DuplicationOption =\n | DuplicationWarnLevel\n | { level?: DuplicationWarnLevel; accept?: Iterable<string>; minSize?: number; maxFindings?: number; entryName?: string }\n\nfunction resolveDuplicationLevel(opt: DuplicationOption | undefined): DuplicationWarnLevel {\n const explicit = typeof opt === 'string' ? opt : opt?.level\n if (explicit !== undefined) return explicit\n const env = typeof process !== 'undefined' ? (process.env?.PARSEMAN_DUPLICATION as DuplicationWarnLevel | undefined) : undefined\n if (env === 'off' || env === 'warn' || env === 'error') return env\n return 'off'\n}\n\n/**\n * Run the duplication diagnostic and surface it per the resolved level. Never\n * throws from the analysis itself \u2014 only `'error'` deliberately throws on a real\n * finding. Shared by ALL THREE lowering paths (`compile`, `compileRuleMap`,\n * `compileLinkable`): the macro build never calls `compile()`, and a diagnostic\n * wired only there is a diagnostic that reports zero findings forever \u2014 which is\n * exactly what happened to the gating diagnostic for two minor versions.\n */\nfunction reportDuplication(\n opt: DuplicationOption | undefined,\n analyze: (o: { accept?: Iterable<string>; minSize?: number; maxFindings?: number; entryName?: string } | undefined) => DuplicationReport,\n): DuplicationReport | undefined {\n const level = resolveDuplicationLevel(opt)\n if (level === 'off') return undefined\n const obj = opt !== null && typeof opt === 'object' ? opt : undefined\n const analyzeOpts = obj === undefined ? undefined : {\n ...(obj.accept !== undefined ? { accept: obj.accept } : {}),\n ...(obj.minSize !== undefined ? { minSize: obj.minSize } : {}),\n ...(obj.maxFindings !== undefined ? { maxFindings: obj.maxFindings } : {}),\n ...(obj.entryName !== undefined ? { entryName: obj.entryName } : {}),\n }\n let report: DuplicationReport\n try { report = analyze(analyzeOpts) }\n catch (err) {\n // The analysis is ADVISORY \u2014 it must never break a compile that is otherwise\n // correct, so this does not rethrow even at `'error'`. But it must not be\n // SILENT either: `assertAnalyzable` throws a deliberately actionable TypeError\n // when handed a composed (already-fused) map, and swallowing that reported the\n // same \"no findings\" as a genuinely clean grammar. That is the exact failure\n // the gating diagnostic shipped for two minor versions.\n console.warn(\n `parseman: the duplication diagnostic could not run, so NOTHING was checked \u2014 `\n + `this is not a clean result.\\n ${err instanceof Error ? err.message : String(err)}`,\n )\n return undefined\n }\n const lines = formatDuplicationFindings(report)\n if (lines.length > 0) {\n if (level === 'error') throw new Error(`parseman: ${duplicationFindingCount(report)} duplication/overlap finding(s)\\n${lines.join('\\n')}`)\n for (const l of lines) console.warn(l)\n }\n return report\n}\n\nfunction runDuplicationDiagnostic<T>(combinator: Combinator<T>, opt: DuplicationOption | undefined): DuplicationReport | undefined {\n return reportDuplication(opt, o => analyzeDuplication(combinator as Combinator<unknown>, o))\n}\n\nfunction runDuplicationDiagnosticRules(\n ruleMap: ReadonlyArray<readonly [string, Combinator<unknown>]>,\n opt: DuplicationOption | undefined,\n): DuplicationReport | undefined {\n return reportDuplication(opt, o => analyzeDuplicationRules(ruleMap, o))\n}\n\nexport function compile<T>(combinator: Combinator<T>, mapFnSources?: string[], opts?: { recovery?: boolean; hostMode?: HostMode; coverage?: boolean; duplication?: DuplicationOption; trackLines?: boolean; maxInline?: number }): CompiledParser<T> {\n // Degradations found while compiling THIS grammar are drained as one aggregated block\n // rather than printed one wall-of-text line at a time as they are discovered. A no-op\n // inside a macro transform, whose own sink owns the module's findings.\n const drain = beginCompileDegradationDrain()\n let completed = false\n try {\n const compiled = compileImpl(combinator, mapFnSources, opts)\n completed = true\n return compiled\n }\n finally { drain(completed) }\n}\n\nfunction compileImpl<T>(combinator: Combinator<T>, mapFnSources?: string[], opts?: { recovery?: boolean; hostMode?: HostMode; coverage?: boolean; duplication?: DuplicationOption; trackLines?: boolean; maxInline?: number }): CompiledParser<T> {\n runDuplicationDiagnostic(combinator, opts?.duplication)\n markUnusedValues(combinator)\n // Grammar-level ambient trivia declared via rules({ trivia }, factory): seed it\n // as the default activeTrivia so every rule bakes it (unless a local\n // parser({trivia}) / noTrivia overrides). This is the compiled mirror of the\n // interpreter installing it as ctx.trivia at the entry.\n const grammarTrivia = (combinator._meta as { grammarTrivia?: Combinator<unknown> }).grammarTrivia\n const rootTriviaClassified = grammarTrivia?._meta.rootTriviaClassified === true\n || combinator._meta.rootTriviaClassified === true\n const grammarScanSkip = (combinator._meta as { grammarScanSkip?: Combinator<unknown>[] }).grammarScanSkip\n const grammarHostMode = (combinator._meta as { grammarHostMode?: HostMode }).grammarHostMode\n const grammarTrackLines = combinator._meta.grammarTrackLines\n const _inlineMax = resolveInlineMax(opts?.maxInline)\n const ctx: Ctx = {\n vars: 0,\n indent: 1,\n inlineMax: _inlineMax,\n inlineLeft: _inlineMax,\n regexDecls: [],\n regexMap: new Map(),\n expectedDecls: [],\n expectedMap: new Map(),\n recordFail: true,\n mapFns: [],\n mapFnSrcs: [],\n buildFns: [],\n buildSrcs: [],\n runtimeParsers: [],\n namedParsers: new Map(),\n triviaCaptureNames: new Map(),\n triviaFnNames: new Map(),\n namedFnDecls: [],\n capturing: hasNodeDef(combinator as Combinator<unknown>),\n recovery: opts?.recovery ?? false,\n hostMode: opts?.hostMode ?? grammarHostMode ?? 'ast',\n lineTracking: opts?.trackLines === true || grammarTrackLines === true || hasLineTrackingDef(combinator as Combinator<unknown>),\n ...(opts?.coverage ? { coverage: { plan: buildGrammarPlan(combinator as Combinator<unknown>), entry: combinator as Combinator<unknown> } } : {}),\n lazyUsage: analyzeLazyUsage(combinator as Combinator<unknown>),\n ...(rootTriviaClassified ? { rootTriviaClassified: true as const } : {}),\n ...(grammarTrivia ? {\n activeTrivia: grammarTrivia,\n triviaKindLabels: grammarTrivia._meta.triviaKindLabels,\n } : {}),\n ...(grammarScanSkip ? { activeScanSkip: grammarScanSkip } : {}),\n }\n\n const r = emit(combinator as Combinator<unknown>, ctx, '_pos')\n const coverageRootRuleId = ctx.coverage?.plan.rules.get(combinator as Combinator<unknown>)\n const resultBody = coverageRootRuleId === undefined\n ? [\n ` let pos = _pos`,\n ...r.stmts,\n ` return { ok: true, value: ${r.valueVar}, span: { start: _pos, end: ${r.endVar} } }`,\n ]\n : [\n ` const _coverageResult = (() => {`,\n ` let pos = _pos`,\n ...r.stmts,\n ` return { ok: true, value: ${r.valueVar}, span: { start: _pos, end: ${r.endVar} } }`,\n ` })()`,\n ` if (!_coverageResult.ok) _ctx._grammarTrace?.write({ id: ${JSON.stringify(coverageRootRuleId)}, phase: 'failure', offset: _coverageResult.span.start })`,\n ` return _coverageResult`,\n ]\n\n const namedPrelude = ctx.namedFnDecls.length > 0 ? [...namedFnPrelude(), ''] : []\n const emptyTlDecls = ctx.needsEmptyTl ? ['const _EMPTY_TL = Object.freeze([])'] : []\n const hostReadsDecls = ctx.needsHostReads ? [HOST_READS_DECL] : []\n const rawEntryDecls = ctx.needsRawEntry ? [RAW_ENTRY_DECL] : []\n const lineTrackDecls = ctx.needsLineTrack ? [LINE_TRACK_DECL] : []\n const lineSpanDecls = ctx.needsLineSpan ? [LINE_SPAN_DECL] : []\n\n const source = [\n ...emptyTlDecls,\n ...hostReadsDecls,\n ...rawEntryDecls,\n ...lineTrackDecls,\n ...lineSpanDecls,\n ...ctx.regexDecls,\n ...ctx.expectedDecls,\n '',\n ...namedPrelude,\n ctx.namedFnDecls.join('\\n\\n'),\n `function _parse(input, _pos, _rp, _mf, _build, _ctx) {`,\n ...resultBody,\n `}`,\n ].join('\\n')\n\n const fn = new Function('input', '_pos', '_rp', '_mf', '_build', '_ctx', [\n ...emptyTlDecls,\n ...hostReadsDecls,\n ...rawEntryDecls,\n ...lineTrackDecls,\n ...lineSpanDecls,\n ...ctx.regexDecls,\n ...ctx.expectedDecls,\n ...namedPrelude,\n ...ctx.namedFnDecls.flatMap((decl, i) => (i > 0 ? ['', decl] : [decl])),\n ...(coverageRootRuleId === undefined\n ? [`let pos = _pos`, ...r.stmts, `return { ok: true, value: ${r.valueVar}, span: { start: _pos, end: ${r.endVar} } }`]\n : [\n `const _coverageResult = (() => {`,\n ` let pos = _pos`,\n ...r.stmts,\n ` return { ok: true, value: ${r.valueVar}, span: { start: _pos, end: ${r.endVar} } }`,\n `})()`,\n `if (!_coverageResult.ok) _ctx._grammarTrace?.write({ id: ${JSON.stringify(coverageRootRuleId)}, phase: 'failure', offset: _coverageResult.span.start })`,\n `return _coverageResult`,\n ]),\n ].join('\\n')) as (\n input: string,\n pos: number,\n rp: Array<Combinator<unknown>>,\n mf: Array<(v: unknown, span: { start: number; end: number }) => unknown>,\n build: Ctx['buildFns'],\n ctx: ParseContext,\n ) => ParseResult<T>\n\n const defaultCtx: ParseContext = {\n trackLines: false,\n ...(ctx.triviaKindLabels ? { triviaKindLabels: ctx.triviaKindLabels } : {}),\n }\n\n const annotateWithTrackedLines = <R extends ParseResult<T>>(result: R, lineStarts: number[]): R => {\n const index = normalizeLineIndex({ lineStarts })\n const annotated = { ...result, span: annotateSpan(result.span, index) } as R\n const errors = (annotated as { errors?: ParseError[] }).errors\n if (errors) {\n ;(annotated as { errors: ParseError[] }).errors = errors.map(error => ({\n ...error,\n span: annotateSpan(error.span, index),\n }))\n }\n return annotated\n }\n\n const trackedCtx = (base: ParseContext, input: string, pos: number): ParseContext => {\n if (!ctx.lineTracking) return base\n const lineIndex = { lineStarts: [0] }\n if (pos > 0) recordLineRange(lineIndex, input, 0, pos)\n return { ...base, trackLines: true, _lineStarts: lineIndex.lineStarts, _lineScannedTo: pos }\n }\n\n // Prefer per-def sources captured in codegen-traversal order (set by the\n // macro via def.fnSrc). Fall back to a caller-provided positional array.\n // The derived array is only usable when every traversed transform carried a\n // source \u2014 otherwise we can't inline the closures.\n const derivedSrcs = ctx.mapFnSrcs.length === ctx.mapFns.length && ctx.mapFnSrcs.every((s): s is string => s !== null)\n ? ctx.mapFnSrcs as string[]\n : undefined\n const effectiveSources = mapFnSources ?? derivedSrcs\n\n // node() build fns inline the same way: every traversed node must carry its\n // build source (set by the macro via def.buildSrc) or we can't inline.\n const buildCovered = ctx.buildFns.length === 0 || ctx.buildSrcs.every((s): s is string => s !== null)\n const buildSources = ctx.buildFns.length === 0 ? undefined : (ctx.buildSrcs as string[])\n\n // Build an inline expression when there are no runtime fallbacks, and either\n // no map-function closures or their source text has been provided for injection.\n const mfCovered = ctx.mapFns.length === 0 || (effectiveSources !== undefined && effectiveSources.length === ctx.mapFns.length)\n const canInline = ctx.runtimeParsers.length === 0 && mfCovered && buildCovered\n const inlineExpression: string | null = canInline ? buildInlineExpression(ctx, r, effectiveSources, buildSources, coverageRootRuleId) : null\n\n const compiledMeta = {\n source,\n inlineExpression,\n ...(ctx.coverage === undefined ? {} : { coverageDefinitions: ctx.coverage.plan.definitions }),\n }\n\n if (!ctx.lineTracking) {\n return {\n ...compiledMeta,\n parse(input: string, pos = 0): ParseResult<T> {\n return fn(input, pos, ctx.runtimeParsers, ctx.mapFns, ctx.buildFns, defaultCtx)\n },\n parseWithContext(input: string, parseCtx: ParseContext, pos = 0): ParseResult<T> {\n // ONE check per parse, in TypeScript \u2014 not per node, and not in generated code.\n // That is the point of deciding the mode at compile time: the artifact knows what\n // it was built for, so the mismatch is caught here for free instead of by a\n // property read on every node of every parse.\n assertHostModeCompatible(ctx.hostMode ?? 'ast', parseCtx.build, !!ctx.hostBranchElided)\n return fn(input, pos, ctx.runtimeParsers, ctx.mapFns, ctx.buildFns, parseCtx)\n },\n // Note: collects expect() errors via _errors. Unlike interpreter\n // parse({recover:true}) it does NOT populate furthestFail \u2014 the compiled path\n // inlines failures for throughput and deliberately skips _probe bookkeeping.\n // Callers wanting a furthest-position diagnostic detect unconsumed input\n // (span.end < input.length) instead, which is mode-agnostic.\n parseWithErrors(input: string, pos = 0): ParseResult<T> & { errors: ParseError[] } {\n const errors: ParseError[] = []\n const result = fn(input, pos, ctx.runtimeParsers, ctx.mapFns, ctx.buildFns, { ...defaultCtx, _errors: errors })\n return { ...result, errors } as ParseResult<T> & { errors: ParseError[] }\n },\n }\n }\n\n return {\n ...compiledMeta,\n parse(input: string, pos = 0): ParseResult<T> {\n const parseCtx = trackedCtx(defaultCtx, input, pos)\n const result = fn(input, pos, ctx.runtimeParsers, ctx.mapFns, ctx.buildFns, parseCtx)\n return annotateWithTrackedLines(result, parseCtx._lineStarts!)\n },\n parseWithContext(input: string, parseCtx: ParseContext, pos = 0): ParseResult<T> {\n // ONE check per parse, in TypeScript \u2014 not per node, and not in generated code.\n // That is the point of deciding the mode at compile time: the artifact knows what\n // it was built for, so the mismatch is caught here for free instead of by a\n // property read on every node of every parse.\n assertHostModeCompatible(ctx.hostMode ?? 'ast', parseCtx.build, !!ctx.hostBranchElided)\n const activeCtx = trackedCtx(parseCtx, input, pos)\n const result = fn(input, pos, ctx.runtimeParsers, ctx.mapFns, ctx.buildFns, activeCtx)\n return activeCtx.trackLines ? annotateWithTrackedLines(result, activeCtx._lineStarts!) : result\n },\n // Note: collects expect() errors via _errors. Unlike interpreter\n // parse({recover:true}) it does NOT populate furthestFail \u2014 the compiled path\n // inlines failures for throughput and deliberately skips _probe bookkeeping.\n // Callers wanting a furthest-position diagnostic detect unconsumed input\n // (span.end < input.length) instead, which is mode-agnostic.\n parseWithErrors(input: string, pos = 0): ParseResult<T> & { errors: ParseError[] } {\n const errors: ParseError[] = []\n const parseCtx = trackedCtx({ ...defaultCtx, _errors: errors }, input, pos)\n const result = { ...fn(input, pos, ctx.runtimeParsers, ctx.mapFns, ctx.buildFns, parseCtx), errors } as ParseResult<T> & { errors: ParseError[] }\n return annotateWithTrackedLines(result, parseCtx._lineStarts!) as ParseResult<T> & { errors: ParseError[] }\n },\n }\n}\n\n/**\n * Compile every entry of a `rules(factory)` map's returned object using ONE\n * shared codegen Ctx (regexes, named functions, map/build-fn arrays) instead\n * of running `compile()` independently per entry.\n *\n * Why this exists: `compile()` per entry gives each entry its own namedParsers\n * cache, so a sub-rule reachable from N different top-level entries (e.g.\n * `valueList` reachable from `Declaration`, `CustomDeclaration`, `Guard`, \u2026)\n * gets fully re-compiled N times \u2014 on a richly cross-referential grammar\n * (Less: ~125 rule-map entries, deep mutual reference) this multiplies total\n * compiled size far past what the source grammar actually needs, independent\n * of the per-ref single-use inlining `analyzeLazyUsage` already handles\n * within one compile() call. Sharing one Ctx here means a sub-rule compiles\n * exactly once for the WHOLE rule map, however many entries reach it.\n *\n * Returns a single `replacement` \u2014 ONE shared IIFE, evaluated once, whose\n * result is the `{ key: fn, ... }` map \u2014 meant to replace the entire\n * `rules(factory)` call-expression (not one expression per key; splicing a\n * separate self-contained expression per key would either re-run the shared\n * prelude once per entry or duplicate its text per entry, undoing the win).\n * `keys` lists every entry compileRuleMap() saw, for the caller to validate\n * against the source's own key list.\n *\n * Returns null (same all-or-nothing contract the per-entry `compile()` +\n * `inlineExpression === null` check gave the plugin before) when the map\n * contains anything that can't be inlined \u2014 a runtime-fallback parser, or an\n * uncaptured transform/build closure source. The plugin's existing \"warn and\n * leave this rules() call interpreted\" fallback covers this case unchanged.\n */\n/**\n * Grammar rule names compile to `_r_<Name>` functions and `@FS:<name>` dispatch\n * placeholders, so they MUST be valid JS identifiers. A non-identifier name (e.g.\n * `'my-rule'`) is a grammar-authoring error \u2014 throw rather than silently mangle it\n * to `_r_my_rule`, which could collide with a real `my_rule` rule.\n */\nconst RULE_NAME_RE = /^[A-Za-z_$][A-Za-z0-9_$]*$/\nfunction assertRuleName(name: string): void {\n if (!RULE_NAME_RE.test(name)) {\n throw new Error(\n `parseman: grammar rule name ${JSON.stringify(name)} is not a valid JS identifier. ` +\n `Rule names compile to _r_<Name> functions and dispatch guards \u2014 use letters, digits, ` +\n `_ or $ (and don't start with a digit).`,\n )\n }\n}\n\nfunction publicRuleWrapperSource(\n rule: Combinator<unknown>,\n fnSource: string,\n ambientTriviaKindLabels?: readonly string[],\n ambientRootTriviaClassified?: true,\n): string {\n // A rules({ trivia }) declaration owns the document-root category table. A\n // nested parser({ trivia }) can use a different local table, but must not\n // replace the root labels advertised by the public compiled entry.\n const labels = ambientTriviaKindLabels ?? rule._meta.triviaKindLabels\n const classified = ambientRootTriviaClassified ?? rule._meta.rootTriviaClassified\n if (labels === undefined && classified === undefined) return fnSource\n return `Object.assign(${fnSource}, { _meta: {${labels === undefined ? '' : ` triviaKindLabels: ${JSON.stringify(labels)},`}${classified === undefined ? '' : ' rootTriviaClassified: true,'} } })`\n}\n\nexport function compileRuleMap(\n ruleMap: ReadonlyArray<readonly [string, Combinator<unknown>]>,\n opts?: { trivia?: Combinator<unknown>; scanSkip?: Combinator<unknown>[]; recovery?: boolean; hostMode?: HostMode; trackLines?: boolean; coverage?: boolean; duplication?: DuplicationOption; maxInline?: number },\n): { keys: string[]; replacement: string; hostMode: HostMode; hostBranchElided: boolean; reflection: GrammarReflection; coverageDefinitions?: readonly import('./grammar-coverage-ids.ts').GrammarCoverageDefinition[] } | null {\n runDuplicationDiagnosticRules(ruleMap, opts?.duplication)\n for (const [, rule] of ruleMap) markUnusedValues(rule)\n // Named lazy proxies already carry their stable rule identity and redirect\n // their children through the final winner graph. Register only ordinary\n // unannotated roots here: giving a lazy proxy its own winner makes a lazy\n // reference point back to itself, so its body never enters the coverage plan.\n const coverageWinners = opts?.coverage\n ? Object.fromEntries(ruleMap.filter(([, rule]) => rule._def.tag !== 'lazy')) as Record<string, Combinator<unknown>>\n : undefined\n // Grammar-level ambient trivia declared via rules({ trivia }, factory): seed it\n // as the default activeTrivia so every rule in the map bakes it (unless a local\n // parser({trivia}) / noTrivia overrides). Mirrors the interpreter installing it\n // as ctx.trivia at the entry, and compile()'s single-entry seed.\n const grammarTrivia = opts?.trivia\n const rootTriviaClassified = grammarTrivia?._meta.rootTriviaClassified === true\n || ruleMap.some(([, rule]) => rule._meta.rootTriviaClassified === true)\n // Grammar-level ambient scan-skip: explicit opt, else the first rule that carries\n // a `grammarScanSkip` stamp (from `rules({ scanSkip })`). Mirrors grammarTrivia.\n const grammarScanSkip = opts?.scanSkip\n ?? ruleMap.map(([, r]) => (r._meta as { grammarScanSkip?: Combinator<unknown>[] }).grammarScanSkip).find(Boolean)\n // Grammar-level host mode, same fallback shape as the two above: explicit opt, else a\n // `grammarHostMode` stamp from `rules({ hostMode }, factory)`. The stamp is what lets\n // ONE grammar source be compiled twice (two `rules()` call sites over one factory)\n // under the MACRO, which has no other way to pass a compile option.\n const grammarHostMode = opts?.hostMode\n ?? ruleMap.map(([, r]) => (r._meta as { grammarHostMode?: HostMode }).grammarHostMode).find(Boolean)\n const grammarTrackLines = opts?.trackLines === true\n || ruleMap.some(([, r]) => r._meta.grammarTrackLines === true)\n const _inlineMax = resolveInlineMax(opts?.maxInline)\n const ctx: Ctx = {\n vars: 0,\n indent: 1,\n inlineMax: _inlineMax,\n inlineLeft: _inlineMax,\n regexDecls: [],\n regexMap: new Map(),\n expectedDecls: [],\n expectedMap: new Map(),\n recordFail: true,\n mapFns: [],\n mapFnSrcs: [],\n buildFns: [],\n buildSrcs: [],\n runtimeParsers: [],\n namedParsers: new Map(),\n triviaCaptureNames: new Map(),\n triviaFnNames: new Map(),\n namedFnDecls: [],\n capturing: ruleMap.some(([, rule]) => hasNodeDef(rule)),\n recovery: opts?.recovery ?? false,\n hostMode: grammarHostMode ?? 'ast',\n lineTracking: grammarTrackLines,\n ...(opts?.coverage ? { coverage: { plan: buildGrammarPlan(ruleMap.map(([, rule]) => rule), coverageWinners) } } : {}),\n lazyUsage: analyzeLazyUsageMulti(ruleMap.map(([, rule]) => rule)),\n ...(rootTriviaClassified ? { rootTriviaClassified: true as const } : {}),\n ...(grammarTrivia ? {\n activeTrivia: grammarTrivia,\n triviaKindLabels: grammarTrivia._meta.triviaKindLabels,\n } : {}),\n ...(grammarScanSkip ? { activeScanSkip: grammarScanSkip } : {}),\n }\n\n // Reverse map: each rule's `ref` placeholder \u2192 its canonical `_r_<Name>` fn\n // name. `emitLazy` uses this so every reference to a named rule (sibling call\n // OR the map entry itself) resolves to one shared `_r_<Name>` function \u2014 the\n // linkable form that fuses into a single scope with direct local calls.\n const seenNames = new Map<string, number>()\n const ruleNames = new Map<Combinator<unknown>, string>()\n for (const [key, rule] of ruleMap) {\n assertRuleName(key)\n const base = `_r_${key}`\n const n = seenNames.get(base) ?? 0\n seenNames.set(base, n + 1)\n ruleNames.set(rule, n === 0 ? base : `${base}$${n}`)\n }\n ctx.ruleNames = ruleNames\n\n // A trivia rule (e.g. the grammar's `rw`, returned from the factory so the\n // driver can reach it as `g.rw`) must NOT bake the grammar-level ambient trivia\n // into itself \u2014 it would recursively skip trivia between its own terms and stop\n // short. Emit it with activeTrivia cleared, matching the inline-trivia guard.\n const perEntry = ruleMap.map(([key, rule]) => {\n const savedTrivia = ctx.activeTrivia\n const savedScanSkip = ctx.activeScanSkip\n if (rule._meta.isTrivia) { ctx.activeTrivia = undefined; ctx.activeScanSkip = undefined }\n const r = emit(rule, ctx, '_pos')\n ctx.activeTrivia = savedTrivia\n ctx.activeScanSkip = savedScanSkip\n return { key, rule, r }\n })\n\n const derivedSrcs = ctx.mapFnSrcs.length === ctx.mapFns.length && ctx.mapFnSrcs.every((s): s is string => s !== null)\n ? ctx.mapFnSrcs as string[]\n : undefined\n const buildCovered = ctx.buildFns.length === 0 || ctx.buildSrcs.every((s): s is string => s !== null)\n const buildSources = ctx.buildFns.length === 0 ? undefined : (ctx.buildSrcs as string[])\n const mfCovered = ctx.mapFns.length === 0 || derivedSrcs !== undefined\n const canInline = ctx.runtimeParsers.length === 0 && mfCovered && buildCovered\n if (!canInline) return null\n if (ctx.lineTracking) {\n ctx.needsLineTrack = true\n ctx.needsLineSpan = true\n }\n\n const mfDecl = derivedSrcs?.length ? ` const ${mfRef(ctx)} = [${derivedSrcs.join(', ')}]` : ''\n const buildDecl = buildSources?.length ? ` const ${buildRef(ctx)} = [${buildSources.join(', ')}]` : ''\n const namedPrelude = ctx.namedFnDecls.length > 0 ? namedFnPrelude() : []\n const hoistedDecls = [\n ctx.needsEmptyTl ? ` const _EMPTY_TL = Object.freeze([])` : '',\n ctx.needsHostReads ? ` ${HOST_READS_DECL}` : '',\n ctx.needsRawEntry ? ` ${RAW_ENTRY_DECL}` : '',\n ctx.needsLineTrack ? ` ${LINE_TRACK_DECL}` : '',\n ctx.needsLineSpan ? ` ${LINE_SPAN_DECL}` : '',\n ...ctx.regexDecls.map(d => ` ${d}`),\n ...ctx.expectedDecls.map(d => ` ${d}`),\n mfDecl,\n buildDecl,\n ...namedPrelude.map(l => ` ${l}`),\n ...ctx.namedFnDecls.flatMap((decl, i) => {\n const lines = decl.split('\\n').map(l => ` ${l}`)\n return i > 0 ? ['', ...lines] : lines\n }),\n ].filter(Boolean)\n\n const entryRuleId = (rule: Combinator<unknown>): string | undefined => {\n const direct = ctx.coverage?.plan.rules.get(rule)\n if (direct !== undefined || rule._def.tag !== 'lazy') return direct\n try { return ctx.coverage?.plan.rules.get(rule._def.thunk()) } catch { return undefined }\n }\n const entryFnText = (r: ER, rule: Combinator<unknown>): string => {\n const ruleId = entryRuleId(rule)\n const linePreamble = ctx.lineTracking\n ? [\n ` if (_ctx._lineStarts === undefined) _ctx = { ..._ctx, trackLines: true, _lineStarts: [0], _lineScannedTo: 0 }`,\n ` else _ctx.trackLines = true`,\n ` if (_pos > (_ctx._lineScannedTo ?? 0)) _trackLines(_ctx, input, 0, _pos)`,\n ]\n : []\n const resultSpan = ctx.lineTracking ? `_spanLines(_ctx, _pos, ${r.endVar})` : `{ start: _pos, end: ${r.endVar} }`\n const body = ruleId === undefined\n ? [\n ...linePreamble,\n ` let pos = _pos`,\n ...r.stmts,\n ` return { ok: true, value: ${r.valueVar}, span: ${resultSpan} }`,\n ]\n : [\n ...linePreamble,\n ` const _coverageResult = (() => {`,\n ` let pos = _pos`,\n ...r.stmts,\n ` return { ok: true, value: ${r.valueVar}, span: ${resultSpan} }`,\n ` })()`,\n ` if (!_coverageResult.ok) _ctx._grammarTrace?.write({ id: ${JSON.stringify(ruleId)}, phase: 'failure', offset: _coverageResult.span.start })`,\n ` return _coverageResult`,\n ]\n return [`function(input, _pos, _ctx) {`, ...body, `}`].join('\\n')\n }\n\n // One shared IIFE, evaluated ONCE, returning the whole `{ key: fn, ... }`\n // map \u2014 this whole string is the caller's replacement for the entire\n // `rules(factory)` call-expression (NOT one expression per key spliced into\n // a separately-built object literal, which would either re-run the shared\n // prelude per entry or duplicate its text per entry \u2014 both defeat the point).\n const objBody = perEntry\n .map(({ key, rule, r }) => {\n const src = publicRuleWrapperSource(rule, entryFnText(r, rule), ctx.triviaKindLabels, ctx.rootTriviaClassified)\n return ` ${JSON.stringify(key)}: ${src.split('\\n').join('\\n ')}`\n })\n .join(',\\n')\n const replacement = [\n `/* @__PURE__ */ (() => {`,\n ...hoistedDecls,\n ` return {`,\n objBody,\n ` }`,\n `})()`,\n ].join('\\n')\n\n return {\n keys: perEntry.map(e => e.key),\n replacement,\n // Reported so the MACRO can stamp the emitted map, exactly as `fusedBody` stamps a\n // fused one. Without it a `rules()` artifact carries no mode and every driver-side\n // host check passes vacuously \u2014 see `withHostMode` in the plugin.\n hostMode: ctx.hostMode ?? 'ast',\n hostBranchElided: !!ctx.hostBranchElided,\n reflection: collectGrammarReflection(ruleMap),\n ...(ctx.coverage === undefined ? {} : { coverageDefinitions: ctx.coverage.plan.definitions }),\n }\n}\n\n/**\n * The linkable form of a rule map (RULE_ABI_PLAN \u00A73): the same compiled rule\n * bodies as `compileRuleMap`, but returned as **splice-able pieces** under a\n * namespace `ns` so multiple independently-compiled maps fuse into one scope\n * (see `fuseRules`). `ns` MUST be non-empty and unique per artifact (the caller\n * derives it \u2014 module identity in the macro, a counter in `compile()`).\n *\n * prelude \u2014 namespaced hoisted decls (regexes, expected, `_mf`/`_build`, and\n * private `_pf` helper fns). Sentinels / `_EMPTY_TL`\n * are NOT here \u2014 they are SHARED, emitted once by the linker.\n * ruleFns \u2014 name \u2192 `function _r_<Name>(\u2026) { \u2026 }` source (the composition\n * surface; siblings call these by name).\n * wrappers \u2014 name \u2192 public `(input,pos,ctx) => ParseResult` wrapper source.\n * deps \u2014 name \u2192 referenced rule names (from `ruleDependencies`).\n *\n * Returns null on the same \"can't inline\" conditions as `compileRuleMap`.\n */\nexport type LinkablePieces = {\n /**\n * The parseman version that produced this artifact (the ARTIFACT VERSION LOCK; see\n * `src/version.ts`). REQUIRED \u2014 `compileLinkable` always stamps it. `fusedBody`\n * refuses to link a piece whose stamp differs from the linking parseman OR is absent\n * (a stale pre-invariant artifact, whose recipe/pieces shape is unsupported).\n * Artifacts are version-locked; the format carries no cross-version back-compat.\n */\n v: string\n ns: string\n keys: string[]\n prelude: string[]\n ruleFns: Map<string, string>\n wrappers: Map<string, string>\n /**\n * Per-rule first-set (this artifact's own rules). fusedBody() uses the WINNING\n * artifact's entry to resolve `/*@FS:rule:codevar@*\u200B/true` dispatch placeholders\n * emitted for rule-ref choice arms \u2014 sound under compose override.\n */\n firstSets: Map<string, FirstSet>\n /**\n * Per-rule nullability (does the rule match the empty string?). `fusedBody()`\n * reads it when resolving an ordered-chain recipe segment that REFERENCES this\n * rule: a non-nullable ref terminates the leading chain (stop unioning the tail),\n * a nullable one lets it continue. Optional/absent \u2192 treated as nullable (the safe\n * default: keep unioning, never drop a valid first char).\n */\n nullable?: Map<string, boolean>\n /**\n * Per-rule LEADING first-set recipe \u2014 a union of ordered leading-term chains.\n * `fusedBody()` fixpoint-resolves the leading ref names over the WINNING rules so a\n * `sequence(ref, \u2026)`-led arm/node dispatches on the ref's real first char \u2014\n * matching a monolithic compile \u2014 instead of degrading to always-try because the\n * ref baked `any`. Optional (absent for hand-built pieces \u2192 `any`, always try).\n */\n firstSetRecipes?: Map<string, FirstSetRecipe>\n deps: Map<string, string[]>\n needsEmptyTl: boolean\n needsHostReads: boolean\n needsRawEntry: boolean\n /** Compile-time host mode this piece was lowered for ('ast' when absent). */\n hostMode?: HostMode\n /** Set when a direct builder's positioned-CST branch was omitted. */\n hostBranchElided?: boolean\n /** True when this piece contains any direct `node(..., build)` reduction. */\n hasDirectBuilders?: boolean\n /** True only when this piece has no direct builder or callback-based semantics. */\n isRecognitionOnly?: boolean\n /** Per-rule CST node reflection for grammar-aware visitors. */\n nodeMeta: Map<string, GrammarReflection>\n /**\n * Transform (`_mf`) / build (`_build`) callback FUNCTIONS, injected into the\n * fused scope via `_env` when their SOURCE isn't available (runtime `compile()`\n * mode). Empty when the callbacks were inlined from source (macro mode). Keyed\n * for `_env` as `<ns>mf` / `<ns>build`.\n */\n mfFns: ReadonlyArray<(...args: unknown[]) => unknown>\n buildFns: ReadonlyArray<(...args: unknown[]) => unknown>\n}\n\n\nexport function compileLinkable(\n ruleMapArg: ReadonlyArray<readonly [string, Combinator<unknown>]>,\n ns: string,\n opts?: { trivia?: Combinator<unknown>; scanSkip?: Combinator<unknown>[]; recovery?: boolean; hostMode?: HostMode; trackLines?: boolean; captureTerminals?: boolean; coverage?: GrammarCoveragePlan; duplication?: DuplicationOption; maxInline?: number },\n): LinkablePieces | null {\n if (!ns) throw new Error('compileLinkable: ns must be a non-empty namespace')\n // Opt-IN only. Duplication defaults to\n // `'off'`, but the level ALSO resolves from `PARSEMAN_DUPLICATION` \u2014 so without\n // this guard, setting that env var printed every structural finding twice on the\n // macro path, which lowers the same map through `compileRuleMap`/`compile` and\n // then again here. Structural findings do not depend on fuse-time binding, so the\n // owning site's run is the complete one; this one would only ever be a duplicate.\n if (opts?.duplication !== undefined) runDuplicationDiagnosticRules(ruleMapArg, opts.duplication)\n for (const [, rule] of ruleMapArg) markUnusedValues(rule)\n // Grammar-level ambient trivia through compose(): a piece from rules({ trivia },\n // \u2026) tags `grammarTrivia` on its rules (runtime path), or the macro threads it via\n // `opts.trivia`. Seed it as the default activeTrivia so every fused rule bakes it \u2014\n // the compose mirror of compileRuleMap's seed. `parser`/`noTrivia` still override.\n const grammarTrivia = opts?.trivia\n ?? ruleMapArg.map(([, r]) => (r._meta as { grammarTrivia?: Combinator<unknown> }).grammarTrivia).find(Boolean)\n const rootTriviaClassified = grammarTrivia?._meta.rootTriviaClassified === true\n || ruleMapArg.some(([, rule]) => rule._meta.rootTriviaClassified === true)\n // Grammar-level ambient scan-skip through compose(), mirroring grammarTrivia.\n const grammarScanSkip = opts?.scanSkip\n ?? ruleMapArg.map(([, r]) => (r._meta as { grammarScanSkip?: Combinator<unknown>[] }).grammarScanSkip).find(Boolean)\n // Grammar-level host mode through compose()/linkable(), mirroring the two above.\n const grammarHostMode = opts?.hostMode\n ?? ruleMapArg.map(([, r]) => (r._meta as { grammarHostMode?: HostMode }).grammarHostMode).find(Boolean)\n const grammarTrackLines = opts?.trackLines === true\n || ruleMapArg.some(([, r]) => r._meta.grammarTrackLines === true)\n // Drop EXTERNAL entries: `rules(g => \u2026)` returns a cache that also holds every\n // `g.X` that was ACCESSED, so an accessed-but-not-defined rule (defined in\n // another artifact) leaks into `Object.entries` as an undefined `ref`. Those\n // are not local rules \u2014 they're by-name references resolved at fuse time (the\n // pre-scan below emits their calls). A rule is local iff its value is non-lazy\n // or a `ref` that resolves.\n const ruleMap = ruleMapArg.filter(([, val]) => {\n const d = val._def\n if (d.tag !== 'lazy') return true\n try { d.thunk(); return true } catch { return false }\n })\n const nodeMeta = new Map(ruleMap.map(([name, rule]) => [name, collectGrammarReflection([[name, rule]], { followLazy: false })]))\n const _inlineMax = resolveInlineMax(opts?.maxInline)\n const ctx: Ctx = {\n vars: 0, indent: 1, inlineMax: _inlineMax, inlineLeft: _inlineMax, regexDecls: [], regexMap: new Map(),\n expectedDecls: [], expectedMap: new Map(), recordFail: true,\n mapFns: [], mapFnSrcs: [], buildFns: [], buildSrcs: [], runtimeParsers: [],\n namedParsers: new Map(), triviaCaptureNames: new Map(),\n triviaFnNames: new Map(), namedFnDecls: [],\n // A recognition-only fragment normally has no node collector of its own.\n // Leaf composition can re-lower it beneath a local semantic node, though;\n // in that case its terminals must feed the caller's collector rather than\n // merely returning their scalar parse values.\n capturing: opts?.captureTerminals === true || ruleMap.some(([, rule]) => hasNodeDef(rule)),\n recovery: opts?.recovery ?? false,\n hostMode: grammarHostMode ?? 'ast',\n lineTracking: grammarTrackLines,\n ...(opts?.coverage ? { coverage: { plan: opts.coverage } } : {}),\n lazyUsage: analyzeLazyUsageMulti(ruleMap.map(([, rule]) => rule)),\n ns,\n deferFirstSetRefs: true,\n ...(rootTriviaClassified ? { rootTriviaClassified: true as const } : {}),\n ...(grammarTrivia ? {\n activeTrivia: grammarTrivia,\n triviaKindLabels: grammarTrivia._meta.triviaKindLabels,\n } : {}),\n ...(grammarScanSkip ? { activeScanSkip: grammarScanSkip } : {}),\n }\n // Canonical name per rule. Register in BOTH ruleNames (so sibling `emitLazy`\n // refs resolve by name) AND namedParsers up-front (so a rule emitted before a\n // recursive back-edge still finds itself). Unlike `compileRuleMap`, EVERY rule\n // is force-emitted as a named fn \u2014 even one referenced by nobody but its own\n // entry (its map value is the bare combinator, not a `ref`, so it would\n // otherwise inline and never get a name).\n const seen = new Map<string, number>()\n const ruleNames = new Map<Combinator<unknown>, string>()\n const fnNameToKey = new Map<string, string>()\n for (const [key, rule] of ruleMap) {\n assertRuleName(key)\n const base = `_r_${key}`\n const n = seen.get(base) ?? 0\n seen.set(base, n + 1)\n const fn = n === 0 ? base : `${base}$${n}`\n ruleNames.set(rule, fn)\n fnNameToKey.set(fn, key)\n }\n ctx.ruleNames = ruleNames\n\n // Pre-register EXTERNAL rule references: a named `ref` placeholder that doesn't\n // resolve locally (defined in ANOTHER artifact). Emit a by-name `_r_<Name>`\n // call for it \u2014 no body here; it's provided at fuse time. This is what lets a\n // fragment reference a consumer/base rule (`g.value`, `g.Digits`) without its\n // source. `externalRefs` collects what the pass CLASSIFIED \u2014 the refs that will be\n // bound by name at fuse time \u2014 which `hasSemanticReduction` reads (see there).\n const externalRefs = new Set<Combinator<unknown>>()\n {\n const scanned = new Set<Combinator<unknown>>()\n const scanExternal = (p: Combinator<unknown>): void => {\n if (scanned.has(p)) return\n scanned.add(p)\n const def = p._def\n if (def.tag === 'lazy') {\n let resolved: Combinator<unknown> | undefined\n try { resolved = def.thunk() } catch { resolved = undefined }\n if (resolved === undefined) {\n const name = (p as unknown as { _ruleName?: string })._ruleName\n if (name) {\n externalRefs.add(p)\n if (!ctx.namedParsers.has(p)) {\n assertRuleName(name)\n const fn = `_r_${name}`\n ruleNames.set(p, fn)\n ctx.namedParsers.set(p, fn)\n }\n }\n return\n }\n scanExternal(resolved)\n return\n }\n for (const child of childrenOf(def)) scanExternal(child)\n }\n for (const [, rule] of ruleMap) scanExternal(rule)\n }\n\n // Emit each rule's body as its `_r_<Name>` fn (resolving a `ref` placeholder to\n // its target), then build a public wrapper that calls it.\n const perEntry: Array<{ key: string; rule: Combinator<unknown>; r: ER }> = []\n for (const [key, rule] of ruleMap) {\n const fn = ruleNames.get(rule)!\n if (!ctx.namedParsers.has(rule)) {\n ctx.namedParsers.set(rule, fn)\n let resolved: Combinator<unknown> = rule\n const def = rule._def\n if (def.tag === 'lazy') {\n try { resolved = def.thunk() } catch { return null }\n }\n const savedIndent = ctx.indent, savedFail = ctx.failLabel, savedRec = ctx.recordFail\n const savedInlineLeft = ctx.inlineLeft, savedFnName = ctx.currentFnName\n ctx.inlineLeft = ctx.inlineMax; ctx.currentFnName = fn\n ctx.indent = 1; ctx.failLabel = '_pfail'; ctx.recordFail = true\n // A trivia rule must never carry the ambient trivia (it would recursively\n // skip trivia within itself). Mirrors compileRuleMap's guard.\n const savedTrivia = ctx.activeTrivia\n const savedScanSkip = ctx.activeScanSkip\n if (rule._meta.isTrivia) { ctx.activeTrivia = undefined; ctx.activeScanSkip = undefined }\n const body = emit(resolved, ctx, '_pos')\n ctx.activeTrivia = savedTrivia\n ctx.activeScanSkip = savedScanSkip\n ctx.indent = savedIndent; ctx.failLabel = savedFail; ctx.recordFail = savedRec\n ctx.inlineLeft = savedInlineLeft; ctx.currentFnName = savedFnName\n // Linkable entries run through their named rule body rather than the\n // public compileRuleMap wrapper. Instrument the named boundary itself so\n // a final compose winner remains observable even when its resolved body\n // is emitted under a different identity.\n const ruleId = ctx.coverage?.plan.rules.get(rule)\n const stmts = ruleId === undefined ? body.stmts : [\n `${ind(ctx)}_ctx._grammarCoverage?.(${JSON.stringify(ruleId)})`,\n `${ind(ctx)}_ctx._grammarTrace?.write({ id: ${JSON.stringify(ruleId)}, phase: 'enter', offset: _pos })`,\n ...body.stmts,\n `${ind(ctx)}_ctx._grammarTrace?.write({ id: ${JSON.stringify(ruleId)}, phase: 'success', offset: _pos, end: ${body.endVar} })`,\n ]\n pushNamedFnDecl(ctx, fn, stmts, body.valueVar, body.endVar)\n }\n // Public wrapper: call the named fn, adapt sentinel \u2192 ParseResult.\n perEntry.push({ key, rule, r: emitNamedFnCall(ctx, fn, '_pos') })\n }\n\n // A runtime-parser fallback can't be fused (no source AND no stable identity to\n // inject). Callback fns, by contrast, ARE fusable \u2014 inline their source when\n // available (macro), else inject the fn objects via `_env` (runtime).\n if (ctx.runtimeParsers.length !== 0) return null\n if (ctx.lineTracking) {\n ctx.needsLineTrack = true\n ctx.needsLineSpan = true\n }\n const mfSrcs = ctx.mapFns.length > 0 && ctx.mapFnSrcs.every((s): s is string => s !== null)\n ? ctx.mapFnSrcs as string[] : null\n const buildSrcs = ctx.buildFns.length > 0 && ctx.buildSrcs.every((s): s is string => s !== null)\n ? ctx.buildSrcs as string[] : null\n\n // Split named fns: `_r_<Name>` are the composition surface (ruleFns), everything\n // else (`_ns_pf\u2026` private helpers) is private prelude bundled with the artifact.\n const ruleFns = new Map<string, string>()\n const privateFns: string[] = []\n for (const decl of ctx.namedFnDecls) {\n const fnName = decl.match(/^function (\\S+?)\\(/)?.[1]\n const key = fnName ? fnNameToKey.get(fnName) : undefined\n if (key !== undefined) ruleFns.set(key, decl)\n else privateFns.push(decl)\n }\n\n const mfDecl = ctx.mapFns.length === 0 ? ''\n : mfSrcs ? `const ${mfRef(ctx)} = [${mfSrcs.join(', ')}]`\n : `const ${mfRef(ctx)} = _env[${JSON.stringify(nsp(ctx) + 'mf')}]`\n const buildDecl = ctx.buildFns.length === 0 ? ''\n : buildSrcs ? `const ${buildRef(ctx)} = [${buildSrcs.join(', ')}]`\n : `const ${buildRef(ctx)} = _env[${JSON.stringify(nsp(ctx) + 'build')}]`\n const prelude = [\n ctx.needsLineTrack ? LINE_TRACK_DECL : '',\n ctx.needsLineSpan ? LINE_SPAN_DECL : '',\n ...ctx.regexDecls,\n ...ctx.expectedDecls,\n mfDecl,\n buildDecl,\n ...privateFns,\n ].filter(Boolean)\n\n const wrappers = new Map<string, string>()\n for (const { key, rule, r } of perEntry) {\n const linePreamble = ctx.lineTracking\n ? [\n ` if (_ctx._lineStarts === undefined) _ctx = { ..._ctx, trackLines: true, _lineStarts: [0], _lineScannedTo: 0 }`,\n ` else _ctx.trackLines = true`,\n ` if (_pos > (_ctx._lineScannedTo ?? 0)) _trackLines(_ctx, input, 0, _pos)`,\n ]\n : []\n const resultSpan = ctx.lineTracking ? `_spanLines(_ctx, _pos, ${r.endVar})` : `{ start: _pos, end: ${r.endVar} }`\n wrappers.set(key, publicRuleWrapperSource(rule, [\n `function(input, _pos, _ctx) {`,\n ...linePreamble,\n ` let pos = _pos`,\n ...r.stmts,\n ` return { ok: true, value: ${r.valueVar}, span: ${resultSpan} }`,\n `}`,\n ].join('\\n'), ctx.triviaKindLabels, ctx.rootTriviaClassified))\n }\n\n // Per-rule first-set table for fuse-time dispatch: fusedBody() substitutes each\n // `/*@FS:rule:codevar@*\u200B/true` placeholder (emitted for rule-ref choice arms)\n // with the WINNING rule's condition. Resolve each rule to its real first-set;\n // a rule that can match empty at start gets `any` (\u2192 no guard, always try).\n const firstSets = new Map<string, FirstSet>()\n const firstSetRecipes = new Map<string, FirstSetRecipe>()\n // Per-rule nullability (does the whole rule match empty?) \u2014 fusedBody reads it to\n // decide whether an ordered-chain segment that is a REF to this rule terminates the\n // chain (non-nullable \u2192 stop unioning the tail) or lets it continue (nullable).\n const nullable = new Map<string, boolean>()\n for (const [key, rule] of ruleMap) {\n let resolved: Combinator<unknown> = rule\n const d = rule._def\n if (d.tag === 'lazy') { try { resolved = d.thunk() } catch { resolved = rule } }\n firstSets.set(key, canMatchEmptyAtStart(resolved) ? { kind: 'any' } : resolved._meta.firstSet)\n nullable.set(key, matchesEmpty(resolved))\n // Recipe drives fuse-time dispatch: keep leading ref names unresolved so the\n // WINNING rule (post-override) supplies their first char. An empty-at-start\n // rule stays `any` (always try).\n firstSetRecipes.set(key, canMatchEmptyAtStart(resolved) ? { alts: [[{ set: any(), nullable: false }]] } : leadingFirstSetRecipe(resolved))\n }\n\n return {\n v: PARSEMAN_VERSION,\n ns,\n keys: perEntry.map(e => e.key),\n prelude,\n ruleFns,\n wrappers,\n firstSets,\n nullable,\n firstSetRecipes,\n deps: ruleDependencies(ruleMap),\n needsEmptyTl: !!ctx.needsEmptyTl,\n needsHostReads: !!ctx.needsHostReads,\n needsRawEntry: !!ctx.needsRawEntry,\n hostMode: ctx.hostMode ?? 'ast',\n hostBranchElided: !!ctx.hostBranchElided,\n hasDirectBuilders: ruleMap.some(([, rule]) => hasDirectBuildDef(rule)),\n isRecognitionOnly: !hasSemanticReduction(ruleMap.map(([, rule]) => rule), externalRefs),\n nodeMeta,\n mfFns: mfSrcs ? [] : (ctx.mapFns as ReadonlyArray<(...a: unknown[]) => unknown>),\n buildFns: buildSrcs ? [] : (ctx.buildFns as ReadonlyArray<(...a: unknown[]) => unknown>),\n }\n}\n\n/**\n * Does this rule map reference a rule it doesn't define \u2014 a NAMED `ref` (`g.Foo`)\n * that never got `.define()`d? That is the SHARED-SHAPE signature: the grammar is a\n * shape with a hole, so it can't be inlined as a standalone parser, but it IS\n * linkable (`compileLinkable` emits a by-name `_r_Foo` call for the hole, bound at\n * fuse time). Callers use this to tell that case apart from a genuine\n * \"couldn't compile, fall back to the interpreter\".\n *\n * A `rules()` map's own `Object.entries` also leaks accessed-but-undefined names as\n * top-level entries, so both the entry values AND their bodies are scanned.\n */\nexport function hasExternalRuleRef(\n ruleMap: ReadonlyArray<readonly [string, Combinator<unknown>]>,\n): boolean {\n const seen = new Set<Combinator<unknown>>()\n const visit = (p: Combinator<unknown>): boolean => {\n if (seen.has(p)) return false\n seen.add(p)\n const def = p._def\n if (def.tag === 'lazy') {\n let resolved: Combinator<unknown> | undefined\n try { resolved = def.thunk() } catch { resolved = undefined }\n if (resolved === undefined) return (p as unknown as { _ruleName?: string })._ruleName !== undefined\n return visit(resolved)\n }\n return childrenOf(def).some(visit)\n }\n return ruleMap.some(([, rule]) => visit(rule))\n}\n\n/** A leaf-composed imported piece may carry Parseman's own structural balanced\n * text reconstruction, but never a grammar-authored semantic callback.\n *\n * `externalRefs` are the unresolved NAMED refs `compileLinkable`'s pre-pass already\n * classified as external (`g.Value` naming a rule this artifact doesn't define). They\n * are the one case that fails OPEN: the ref is a HOLE, it holds no callback of its\n * own, and codegen emits it as a by-name `_r_<Name>` call bound at fuse time by\n * whichever piece supplies the name \u2014 either another pre-final piece (itself put\n * through this same gate) or the local leaf (allowed to be semantic by design). So\n * an artifact whose only \"unknown\" is a hole is genuinely recognition-only.\n *\n * EVERY other lazy failure still fails CLOSED. In particular an UNNAMED `ref()` that\n * was never `.define()`d is NOT external \u2014 nobody can bind it by name \u2014 so it stays\n * an opaque subtree of unknown semantics and the answer is \"semantic\". Catching all\n * errors here instead would let that (and any future thunk failure) pass the\n * recognition-only gate. */\nfunction hasSemanticReduction(\n roots: readonly Combinator<unknown>[],\n externalRefs?: ReadonlySet<Combinator<unknown>>,\n): boolean {\n const seen = new Set<Combinator<unknown>>()\n const visit = (parser: Combinator<unknown>): boolean => {\n if (seen.has(parser)) return false\n seen.add(parser)\n const def = parser._def\n if (def.tag === 'transform' && !def.recognitionOnly) return true\n if (def.tag === 'choice' && def.gates.some(Boolean)) return true\n if (def.tag === 'guard' || def.tag === 'withCtx') return true\n if (def.tag === 'node' && def.build !== undefined) return true\n if (def.tag === 'lazy') {\n if (externalRefs?.has(parser)) return false\n try { return visit(def.thunk()) } catch { return true }\n }\n return childrenOf(def).some(visit)\n }\n return roots.some(visit)\n}\n\nfunction buildInlineExpression(\n ctx: Ctx,\n r: ER,\n mapFnSources?: string[],\n buildSources?: string[],\n coverageRootRuleId?: string,\n): string {\n const bodyLines = coverageRootRuleId === undefined\n ? [\n ` let pos = _pos`,\n ...r.stmts,\n ` return { ok: true, value: ${r.valueVar}, span: { start: _pos, end: ${r.endVar} } }`,\n ]\n : [\n ` const _coverageResult = (() => {`,\n ` let pos = _pos`,\n ...r.stmts,\n ` return { ok: true, value: ${r.valueVar}, span: { start: _pos, end: ${r.endVar} } }`,\n ` })()`,\n ` if (!_coverageResult.ok) _ctx._grammarTrace?.write({ id: ${JSON.stringify(coverageRootRuleId)}, phase: 'failure', offset: _coverageResult.span.start })`,\n ` return _coverageResult`,\n ]\n\n const innerFn = [\n `function(input, _pos, _ctx) {`,\n ...bodyLines,\n `}`,\n ].join('\\n')\n\n // Declare _mf / _build inline so the emitted _mf[i] / _build[i] references\n // resolve without runtime closure arrays.\n const mfDecl = mapFnSources?.length ? ` const _mf = [${mapFnSources.join(', ')}]` : ''\n const buildDecl = buildSources?.length ? ` const _build = [${buildSources.join(', ')}]` : ''\n\n const emptyTlDecl = ctx.needsEmptyTl ? ` const _EMPTY_TL = Object.freeze([])` : ''\n const hostReadsDecl = ctx.needsHostReads ? ` ${HOST_READS_DECL}` : ''\n const rawEntryDecl = ctx.needsRawEntry ? ` ${RAW_ENTRY_DECL}` : ''\n const lineTrackDecl = ctx.needsLineTrack ? ` ${LINE_TRACK_DECL}` : ''\n const lineSpanDecl = ctx.needsLineSpan ? ` ${LINE_SPAN_DECL}` : ''\n const needsWrapper = ctx.regexDecls.length > 0 || ctx.expectedDecls.length > 0 || ctx.namedFnDecls.length > 0 || !!mfDecl || !!buildDecl || !!emptyTlDecl || !!hostReadsDecl || !!rawEntryDecl || !!lineTrackDecl || !!lineSpanDecl\n if (!needsWrapper) return innerFn\n\n const namedPrelude = ctx.namedFnDecls.length > 0 ? namedFnPrelude() : []\n const hoistedDecls = [\n emptyTlDecl,\n hostReadsDecl,\n rawEntryDecl,\n lineTrackDecl,\n lineSpanDecl,\n ...ctx.regexDecls.map(d => ` ${d}`),\n ...ctx.expectedDecls.map(d => ` ${d}`),\n mfDecl,\n buildDecl,\n ...namedPrelude.map(l => ` ${l}`),\n ...ctx.namedFnDecls.flatMap((decl, i) => {\n const lines = decl.split('\\n').map(l => ` ${l}`)\n return i > 0 ? ['', ...lines] : lines\n }),\n ].filter(Boolean)\n return [\n `/* @__PURE__ */ (() => {`,\n ...hoistedDecls,\n ` return ${innerFn}`,\n `})()`,\n ].join('\\n')\n}\n", "import type { Combinator, ParseContext, ParseResult, ParseFail, ParseError } from '../types.ts'\nimport { createLineIndex, recordLineRange, normalizeLineIndex, annotateSpan, type LineIndex } from '../line-index.ts'\nimport { markUnusedValues } from '../compiler/value-usage.ts'\nimport { triviaKindMask } from '../cst/trivia-kinds.ts'\n\nexport type ParseOptions = {\n trackLines?: boolean\n /**\n * Enable the error-collection channel. When true, recovery points (expect(), and\n * tolerant list recovery) collect their ParseErrors into a side-channel array\n * rather than only embedding them in the value tree. The returned ParseOk will\n * have an `errors` field listing all recovered errors. Top-level parse failures\n * (where nothing recovered) still return ParseFail as usual.\n */\n recover?: boolean\n}\n\nexport type ParserOptions = ParseOptions & {\n /**\n * Trivia parser for this scope. Three states:\n * - a Combinator \u2192 skip this trivia between sequence/repeat terms\n * - `undefined` \u2192 inherit the enclosing scope's trivia (no change)\n * - `null` \u2192 CLEAR trivia: no trivia skipped, so terms must be contiguous.\n * Re-enable inside a nested region with another parser({ trivia }).\n */\n trivia?: Combinator<unknown> | null\n /**\n * Declare that this local trivia scope intentionally does not preserve\n * selected root categories. Required only by\n * `rootTrivia: { select }` when the scope does not use\n * `classifiedTrivia()`.\n */\n rootCapture?: 'opaque'\n /** Record consumed trivia as CSTTrivia tokens in rawChildren. Default: skip. */\n captureTrivia?: boolean\n /**\n * Restrict PER-NODE CST trivia capture to these trivia kinds (label names from\n * the trivia's `label()` arms). Whitespace and any other unlisted kind is still\n * skipped over but NOT recorded into a node's `triviaLog` \u2014 so a host that only\n * consumes (say) comments pays nothing to log every whitespace run. The global\n * trivia log is unaffected. Requires labeled trivia; ignored otherwise.\n */\n captureTriviaKinds?: readonly string[]\n}\n\nexport interface ParsemanParser<T> extends Combinator<T> {\n parse(input: string): ParseResult<T>\n parse(input: string, pos: number, ctx: ParseContext): ParseResult<T>\n}\n\nfunction annotateResultLines<T, R extends ParseResult<T>>(result: R, index: LineIndex): R {\n const annotated = { ...result, span: annotateSpan(result.span, index) } as R\n const errors = (annotated as { errors?: ParseError[] }).errors\n if (errors) {\n ;(annotated as { errors: ParseError[] }).errors = errors.map(error => ({\n ...error,\n span: annotateSpan(error.span, index),\n }))\n }\n return annotated\n}\n\nfunction createParseLineContext(input: string, pos: number): { lineIndex: LineIndex; lineScannedTo: number } {\n const lineIndex = createLineIndex()\n if (pos > 0) recordLineRange(lineIndex, input, 0, pos)\n return { lineIndex, lineScannedTo: pos }\n}\n\nexport function parser<T>(opts: ParserOptions, root: Combinator<T>): ParsemanParser<T> {\n const clearTrivia = opts.trivia === null\n const opaqueRootCapture = opts.rootCapture === 'opaque'\n if (opaqueRootCapture && opts.trivia === undefined) {\n throw new TypeError('parser({ rootCapture: \\'opaque\\' }) requires an explicit trivia scope.')\n }\n return {\n _tag: 'grammar',\n _meta: {\n ...root._meta,\n // Trivia classification describes this grammar's own active trivia\n // scope. A directly nested grammar may have classified trivia of its\n // own, but that must not advertise classification for this wrapper.\n triviaKindLabels: undefined,\n rootTriviaClassified: undefined,\n ...(opts.trivia?._meta?.triviaKindLabels ? { triviaKindLabels: opts.trivia._meta.triviaKindLabels } : {}),\n ...(opts.trivia?._meta?.rootTriviaClassified ? { rootTriviaClassified: true as const } : {}),\n },\n _def: {\n tag: 'grammar',\n parser: root as Combinator<unknown>,\n triviaParser: clearTrivia ? undefined : (opts.trivia ?? undefined),\n clearTrivia,\n ...(opaqueRootCapture ? { rootCapture: 'opaque' as const } : {}),\n ...(opts.captureTrivia ? { captureTrivia: true } : {}),\n trackLines: opts.trackLines ?? false,\n },\n parse(input: string, pos?: number, _ctx?: ParseContext): ParseResult<T> {\n if (_ctx?._rootTriviaStrictScopes && opts.trivia !== undefined && opts.trivia !== null\n && !opts.trivia._meta.rootTriviaClassified && !opaqueRootCapture) {\n throw new TypeError(\n 'parser(): selected root trivia requires classifiedTrivia() for every local trivia scope, or rootCapture: \\'opaque\\'.',\n )\n }\n const trackLines = opts.trackLines ?? _ctx?.trackLines ?? false\n const lineContext = trackLines && _ctx?._lineIndex === undefined && _ctx?._lineStarts === undefined\n ? createParseLineContext(input, pos ?? 0)\n : undefined\n const lineIndex = trackLines\n ? (_ctx?._lineIndex ?? (_ctx?._lineStarts ? { lineStarts: _ctx._lineStarts } : lineContext!.lineIndex))\n : undefined\n // Preserve any CST collectors / capture flag from the caller (e.g. an\n // enclosing node()), layering this grammar's trivia on top. Without this,\n // a parser() nested inside a node() would drop the node's child collectors.\n const ctx: ParseContext = {\n ..._ctx,\n trackLines,\n ...(lineIndex ? { _lineIndex: lineIndex } : {}),\n ...(lineContext ? { _lineScannedTo: lineContext.lineScannedTo } : {}),\n // trivia: null clears (contiguous terms); a Combinator sets; undefined inherits.\n ...(clearTrivia ? {\n trivia: undefined,\n triviaKindLabels: undefined,\n } : opts.trivia != null ? {\n trivia: opts.trivia,\n ...(opts.trivia._meta.triviaKindLabels\n ? { triviaKindLabels: opts.trivia._meta.triviaKindLabels }\n : {}),\n } : {}),\n ...(opts.captureTrivia || _ctx?.captureTrivia ? { captureTrivia: true } : {}),\n // Kind-filter for per-node capture. Resolve against this scope's trivia\n // labels \u2014 this parser's own trivia if it declares one, else the INHERITED\n // labels (`_ctx.triviaKindLabels`), so captureTriviaKinds still applies when\n // trivia is inherited rather than re-declared here. No labels \u2192 undefined\n // (capture all).\n ...(opts.captureTriviaKinds && !clearTrivia\n ? { _triviaCaptureMask: triviaKindMask(opts.trivia?._meta.triviaKindLabels ?? _ctx?.triviaKindLabels, opts.captureTriviaKinds) }\n : {}),\n // This is a property of the local trivia scope, not a post-parse filter:\n // nested recognition can still skip its trivia, but selected root rows\n // must never be written for an explicitly opaque region.\n ...(opaqueRootCapture ? { _rootTriviaCapture: false } : {}),\n }\n const result = root.parse(input, pos ?? 0, ctx)\n if (trackLines && _ctx && ctx._lineScannedTo !== undefined) {\n _ctx._lineScannedTo = Math.max(_ctx._lineScannedTo ?? 0, ctx._lineScannedTo)\n }\n return lineIndex ? annotateResultLines(result, normalizeLineIndex(lineIndex)) : result\n },\n } as ParsemanParser<T>\n}\n\n/**\n * Run `root` with the active trivia cleared \u2014 no trivia is skipped between its\n * sequence/repeat terms, so they must be contiguous in the input. (Trivia is\n * whatever parser({ trivia }) installed \u2014 often whitespace/comments, but it is\n * grammar-defined.) The inverse of parser({ trivia }); re-enable trivia in a\n * nested region with another parser({ trivia }).\n *\n * Wrap the WHOLE contiguous run: an enclosing sequence skips trivia *before* a\n * term runs, so wrapping just the inner part would let leading trivia through.\n *\n * For a static glued token just use one literal/regex; reach for noTrivia when a\n * glued part is a structured sub-rule \u2014 e.g. a head glued to a `[subscript]`\n * whose interior still allows trivia. Turn trivia back on for a region by nesting\n * another parser({ trivia }) (innermost wins, reverts on exit); put the WHOLE\n * spaced region \u2014 including its leading `[` \u2014 inside it, since sequence skips\n * trivia only between terms, not before its first:\n *\n * // `arr[i + 1]` \u2014 `arr` touches `[`, but the subscript is a spaced expr:\n * noTrivia(sequence(name,\n * parser({ trivia: ws }, sequence(literal('['), expr, literal(']')))))\n */\nexport function noTrivia<T>(root: Combinator<T>): ParsemanParser<T> {\n return parser({ trivia: null }, root)\n}\n\n// Roots already run through dead-value analysis, so a hot parse loop doesn't\n// re-walk the tree. (A `rules()` grammar was analyzed at build; a bare combinator\n// passed straight to parse() is analyzed once here.)\nconst _analyzed = new WeakSet<Combinator<unknown>>()\n\nexport function parse<T>(\n combinator: Combinator<T>,\n input: string,\n opts: ParseOptions = {}\n): ParseResult<T> {\n if (!_analyzed.has(combinator)) {\n _analyzed.add(combinator)\n markUnusedValues(combinator)\n }\n const trackLines = opts.trackLines ?? combinator._meta.grammarTrackLines ?? false\n const lineContext = trackLines ? createParseLineContext(input, 0) : undefined\n const lineIndex = lineContext?.lineIndex\n const _errors = opts.recover ? [] : undefined\n // In recovery mode also track the furthest-position failure, so the caller can\n // report \"where it got stuck + what was expected\" even when a permissive top\n // rule succeeds with unconsumed trailing input. Off by default (it adds\n // bookkeeping to every failed alternative).\n const _probe = opts.recover ? { offset: input.length, best: null as ParseFail | null } : undefined\n // Grammar-level ambient trivia declared via rules({ trivia }, factory): install\n // it as ctx.trivia so it's ambient (interpreter). parser/noTrivia override locally.\n const grammarTrivia = combinator._meta.grammarTrivia\n const grammarScanSkip = combinator._meta.grammarScanSkip\n const ctx: ParseContext = {\n trackLines,\n ...(lineIndex ? { _lineIndex: lineIndex } : {}),\n ...(lineContext ? { _lineScannedTo: lineContext.lineScannedTo } : {}),\n ...(grammarTrivia !== undefined\n ? { trivia: grammarTrivia, ...(grammarTrivia._meta.triviaKindLabels ? { triviaKindLabels: grammarTrivia._meta.triviaKindLabels } : {}) }\n : {}),\n ...(grammarScanSkip !== undefined ? { scanSkip: grammarScanSkip } : {}),\n ...(_errors !== undefined ? { _errors } : {}),\n ...(_probe !== undefined ? { _probe } : {}),\n }\n const result = combinator.parse(input, 0, ctx)\n if (!result.ok) return lineIndex ? annotateResultLines(result, normalizeLineIndex(lineIndex)) : result\n const withErrors = _errors !== undefined\n ? { ...result, errors: _errors, furthestFail: _probe?.best ?? null }\n : result\n return lineIndex ? annotateResultLines(withErrors, normalizeLineIndex(lineIndex)) : withErrors\n}\n", "import type { Combinator } from '../types.ts'\nimport type { HostMode } from '../compiler/codegen.ts'\nimport { ref } from './ref.ts'\nimport { markUnusedValues } from '../compiler/value-usage.ts'\nimport { parser as grammarParser } from './grammar.ts'\nimport { attachGrammarReflection, collectGrammarReflection, NODE_TAG, NODE_TYPE, type GrammarWithReflection } from '../cst/reflection.ts'\n\n/**\n * Non-enumerable key on a `rules()` result holding the factory's declaration\n * order (the returned object's key order), which differs from the result's own\n * reference-creation key order. Read by `parseman/spec` for source-order output.\n */\nexport const RULE_ORDER = '__parsemanRuleOrder'\n\nfunction tagRule(r: Combinator<unknown>, key: string): void {\n ;(r as unknown as { _ruleName?: string })._ruleName = key\n if (r._def.tag === 'node' && r._def.type === undefined) r._def.type = key\n}\n\ntype DefinableRef = Combinator<unknown> & { define(p: Combinator<unknown>): void }\n\nfunction isDefinableRef(v: unknown): v is DefinableRef {\n return !!v\n && typeof v === 'object'\n && '_def' in v\n && (v as { _def: { tag?: string } })._def.tag === 'lazy'\n && typeof (v as { define?: unknown }).define === 'function'\n}\n\nfunction ruleNameOf(r: Combinator<unknown>): string | undefined {\n return (r as unknown as { _ruleName?: string })._ruleName\n}\n\nfunction isNamedRuleRefForAnotherRule(r: Combinator<unknown>, key: string): boolean {\n const name = r._def.tag === 'lazy' ? ruleNameOf(r) : undefined\n return name !== undefined && name !== key\n}\n\n/**\n * Define named grammar rules without forward declarations.\n *\n * Pass a factory that receives all rule names as references (via a Proxy)\n * and returns a record of combinators. rules() handles creating ref()\n * placeholders and wiring them up \u2014 the user never sees ref() at all.\n *\n * const { value } = rules(g => ({\n * value: choice(g.object, g.array, str, num, bool, nil),\n * object: transform(sequence('{', sepBy(g.pair, ','), '}'), Object.fromEntries),\n * array: transform(sequence('[', sepBy(g.value, ','), ']'), ([, items]) => items),\n * pair: transform(sequence(g.key, literal(':'), g.value), ([k,, v]) => [k, v]),\n * }))\n *\n * Not every name in the factory must appear in the returned object \u2014 local helpers\n * (like `comma`, `key`) can be plain const inside the factory and composed normally.\n * Only names that OTHER rules reference via `g.xxx` need to be in the returned record.\n *\n * TypeScript: use an explicit type parameter for full type safety on `g`:\n * rules<{ value: Combinator<JSONValue>; array: Combinator<JSONValue[]> }>(g => ({ ... }))\n * Without it, `g.*` accesses are typed as `any` but the return is still inferred.\n */\n/**\n * Grammar-level options for `rules()`. Parity with `parser({...})`, but declared\n * ONCE for the whole grammar instead of wrapped around a scope. `trivia` becomes\n * the ambient trivia for every rule (installed at the parse entry, inherited\n * everywhere, incremental parse included); `parser({trivia})` / `noTrivia` still\n * override it locally for a sub-region.\n */\nexport type RulesOptions = {\n /** Ambient trivia for the whole grammar. See `parser({ trivia })` for the shape\n * (`null` clears it \u2014 equivalent to omitting it at the grammar level). */\n trivia?: Combinator<unknown> | null\n /**\n * Ambient scan-skip for the whole grammar: opaque non-trivia units (strings,\n * balanced brackets, \u2026) that a `scanTo`/`balanced` with no explicit `skip`\n * consults so a sentinel hidden inside one is never matched. Declared ONCE here\n * and inherited everywhere, mirroring `trivia`. `null`/absent = none.\n */\n scanSkip?: Combinator<unknown>[] | null\n /**\n * Compile-time host mode for this grammar, same meaning as `compile(g, { hostMode })`\n * and `compose(items, { hostMode })`: `'ast'` (default) emits each direct builder's\n * own result and NO positioned-CST branch; `'cst'` builds every node through the\n * `ctx.build` host and captures unconditionally.\n *\n * Declaring it HERE is what lets ONE grammar source serve both consumers under the\n * macro, which cannot take a compile option any other way:\n *\n * ```ts\n * const factory = (g: any) => ({ \u2026 })\n * export const grammar = rules({ trivia: rw }, factory)\n * export const cstGrammar = rules({ trivia: rw, hostMode: 'cst' }, factory)\n * ```\n *\n * Two call sites over one factory, so the macro emits two independent top-level\n * artifacts and each bundle tree-shakes away the one it does not import. Neither\n * pays the other's cost \u2014 which is the whole reason host mode is a compile-time\n * decision rather than a per-node runtime read.\n *\n * The INTERPRETER routes dynamically off the host and does not need this; it is\n * still recorded, so `run()` can refuse a mismatched host once per parse instead of\n * quietly producing the wrong tree shape.\n */\n hostMode?: HostMode\n /**\n * Compile-time line tracking for this grammar. Under the macro this emits a\n * separate line-aware artifact from the same factory; the default artifact\n * remains free of line-tracking helpers and branches.\n */\n trackLines?: boolean\n}\n\n// Options-first, mirroring `parser({ opts }, combinator)` \u2014 set once on the grammar\n// vs scope it locally, same options in the same position. The bare `rules(factory)`\n// form is unchanged. The impl also tolerates the legacy `rules(factory, opts)` order.\ntype RuleNodeType<K extends string, C> =\n C extends { readonly [NODE_TYPE]?: infer T extends string }\n ? [T] extends [never] ? K : T\n : K\n\ntype RuleNodeTag<C> =\n C extends { readonly [NODE_TAG]?: infer Tag extends string } ? Tag : never\n\ntype RuleMapNodeType<T extends Record<string, Combinator<unknown>>> = {\n [K in keyof T & string]: RuleNodeType<K, T[K]>\n}[keyof T & string]\n\ntype RuleMapNodeTag<T extends Record<string, Combinator<unknown>>> = {\n [K in keyof T & string]: RuleNodeTag<T[K]>\n}[keyof T & string]\n\ntype RulesResult<T extends Record<string, Combinator<unknown>>> =\n T & GrammarWithReflection<RuleMapNodeType<T>, RuleMapNodeTag<T>>\n\nexport function rules<T extends Record<string, Combinator<unknown>>>(factory: (self: any) => T): RulesResult<T>\nexport function rules<T extends Record<string, Combinator<unknown>>>(options: RulesOptions, factory: (self: any) => T): RulesResult<T>\nexport function rules<T extends Record<string, Combinator<unknown>>>(\n a: ((self: any) => T) | RulesOptions,\n b?: (self: any) => T,\n): RulesResult<T> {\n const factory = (typeof a === 'function' ? a : b) as (self: any) => T\n const options = (typeof a === 'function' ? b : a) as RulesOptions | undefined\n const cache: Partial<T> = {}\n\n // Proxy: accessing any property creates a ref() placeholder on first touch.\n const proxy = new Proxy(cache, {\n get(target, key) {\n if (typeof key !== 'string') return undefined\n const record = target as Record<string, Combinator<unknown>>\n if (!(key in record)) {\n const r = ref()\n // Tag the placeholder with its rule name so the linkable compiler can\n // emit a by-name `_r_<key>` call for a reference to a rule defined in\n // ANOTHER artifact (resolved at fuse time) \u2014 see compileLinkable.\n tagRule(r, key)\n record[key] = r\n }\n return record[key]\n },\n })\n\n // Evaluate all rule definitions. JavaScript evaluates object-literal values\n // left-to-right, so any `g.ruleName` access inside triggers placeholder creation\n // before the rule's own parser is built \u2014 enabling forward references.\n const definitions = factory(proxy)\n\n // Fill each ref with its actual definition, or store directly if never accessed via proxy.\n for (const key of Object.keys(definitions)) {\n const placeholder = (cache as Record<string, Combinator<unknown>>)[key]\n const parser = (definitions as Record<string, Combinator<unknown>>)[key]!\n if (placeholder === parser) {\n throw new Error(`rules(): rule \"${key}\" cannot be a direct alias to itself`)\n }\n if (isDefinableRef(placeholder)) {\n if (!isNamedRuleRefForAnotherRule(parser, key)) tagRule(parser, key)\n placeholder.define(parser)\n // Propagate actual first-set so later choices wrapping this ref get correct dispatch.\n placeholder._meta.firstSet = parser._meta.firstSet\n placeholder._meta.canMatchNewline = parser._meta.canMatchNewline\n } else if (isNamedRuleRefForAnotherRule(parser, key)) {\n const alias = ref()\n tagRule(alias, key)\n alias.define(parser)\n alias._meta.firstSet = parser._meta.firstSet\n alias._meta.canMatchNewline = parser._meta.canMatchNewline\n ;(cache as Record<string, Combinator<unknown>>)[key] = alias\n } else {\n tagRule(parser, key)\n ;(cache as Record<string, Combinator<unknown>>)[key] = parser\n }\n }\n\n // Declare the grammar-level ambient trivia on every rule, so parsing ANY rule\n // as an entry installs it (run()/parse() read this), and the macro can seed the\n // compiled map. `parser({trivia})` / `noTrivia` still override it locally.\n // `!= null`: a `trivia: null` grammar clears trivia \u2014 same as omitting it at the\n // grammar level \u2014 so store nothing (and never write null, which has no `_meta`).\n if (options?.trivia != null) {\n for (const key of Object.keys(definitions)) {\n const rule = (cache as Record<string, Combinator<unknown>>)[key]\n // Skip trivia rules (e.g. the grammar's `rw`, returned so the driver can\n // reach it as `g.rw`): a trivia rule must never carry ambient trivia, or it\n // would recursively skip trivia within itself. Mirrors the codegen guard.\n if (rule && !rule._meta.isTrivia) (rule._meta as { grammarTrivia?: Combinator<unknown> }).grammarTrivia = options.trivia\n }\n }\n\n // Grammar-level ambient scan-skip, mirroring the trivia stamp above: every\n // non-trivia rule carries it so any parse entry installs `ctx.scanSkip` and the\n // compiled map can seed it. `!= null` so `scanSkip: null` clears (stores nothing).\n if (options?.scanSkip != null) {\n for (const key of Object.keys(definitions)) {\n const rule = (cache as Record<string, Combinator<unknown>>)[key]\n if (rule && !rule._meta.isTrivia) (rule._meta as { grammarScanSkip?: Combinator<unknown>[] }).grammarScanSkip = options.scanSkip\n }\n }\n\n // Grammar-level host mode, mirroring the two stamps above. Only `'cst'` is recorded:\n // `'ast'` is the default everywhere, so stamping it would put a field on every rule of\n // every grammar to say \"unchanged\". Trivia rules are skipped for the same reason as\n // above \u2014 they build no nodes, so the mode is meaningless on them.\n if (options?.hostMode === 'cst') {\n for (const key of Object.keys(definitions)) {\n const rule = (cache as Record<string, Combinator<unknown>>)[key]\n if (rule && !rule._meta.isTrivia) (rule._meta as { grammarHostMode?: HostMode }).grammarHostMode = 'cst'\n }\n }\n\n if (options?.trackLines === true) {\n for (const key of Object.keys(definitions)) {\n const rule = (cache as Record<string, Combinator<unknown>>)[key]\n if (rule && !rule._meta.isTrivia) (rule._meta as { grammarTrackLines?: true }).grammarTrackLines = true\n }\n for (const key of Object.keys(definitions)) {\n const rule = (cache as Record<string, Combinator<unknown>>)[key]\n if (rule && !rule._meta.isTrivia && rule._def.tag !== 'grammar') {\n const wrapped = grammarParser({ trackLines: true }, rule)\n tagRule(wrapped, key)\n ;(wrapped._meta as { grammarTrackLines?: true }).grammarTrackLines = true\n ;(cache as Record<string, Combinator<unknown>>)[key] = wrapped\n }\n }\n }\n\n // Dead-value analysis: mark container aggregates that only feed a node()'s\n // capture so the interpreter (and, via the same flag, the compiled output) skips\n // building them. Each rule is its own root \u2014 refs are boundaries (see value-usage).\n for (const key of Object.keys(definitions)) {\n markUnusedValues((cache as Record<string, Combinator<unknown>>)[key]!)\n }\n\n // Record the factory's DECLARATION order (the returned object's key order).\n // `cache`'s own key order is reference-creation order \u2014 a Proxy artifact \u2014 so\n // it can lead with an internal rule instead of the entry rule. Consumers that\n // want the order the author actually wrote (e.g. `parseman/spec`) read this.\n // Non-enumerable, so Object.keys / spread / for-in over the grammar are\n // unaffected and every existing consumer sees exactly the rules it did before.\n Object.defineProperty(cache, RULE_ORDER, {\n value: Object.keys(definitions),\n enumerable: false,\n configurable: true,\n })\n attachGrammarReflection(cache, collectGrammarReflection(Object.keys(definitions).map(key => [key, (cache as Record<string, Combinator<unknown>>)[key]!])))\n\n return cache as RulesResult<T>\n}\n", "/**\n * The case-fold CLASS of a code point under ECMAScript's NON-Unicode `/i`\n * matching \u2014 the exact relation `keywords({ caseInsensitive: true })` compiles to.\n *\n * A first-set drives O(1) `choice` dispatch, so it MUST be a superset of every\n * character the combinator can really start with. For a case-insensitive matcher\n * that means: for every input char X that the matcher would accept as the first\n * char, X is in the set. Under `/i` WITHOUT `u`, two chars match iff they share a\n * canonical form, and that relation is NOT simply `{c, toUpperCase(c),\n * toLowerCase(c)}` \u2014 67 BMP code points sit in classes those three miss:\n *\n * \u03C3 (U+03C3) \u2194 \u03A3 (U+03A3) \u2194 \u03C2 (U+03C2) final sigma is in the class but is\n * neither the upper- nor lowercase of \u03C3\n * \u00B5 (U+00B5) \u2194 \u03BC (U+03BC) \u2194 \u039C (U+039C) micro sign folds into Greek mu\n * \u01C4 (U+01C4) \u2194 \u01C5 (U+01C5) \u2194 \u01C6 (U+01C6) titlecase digraphs (also \u01C7\u01C8\u01C9\u01CA\u01CB\u01CC\u01F1\u01F2\u01F3)\n * \u0345 (U+0345) \u2194 \u03B9 (U+03B9) \u2194 \u03B9 (U+1FBE) combining iota subscript\n *\n * so widening a first-set by upper/lower alone is UNSOUND for them.\n *\n * The canonical form below is ECMAScript's `Canonicalize` for non-Unicode mode:\n * uppercase the char; if that is not exactly one char, or if it would cross the\n * ASCII boundary INTO Basic Latin, keep the original. That last clause is why\n * `/s/i` does not match `\u017F` (U+017F) and `/k/i` does not match `K` (U+212A) \u2014\n * cross-boundary folds are refused in BOTH directions, which is what keeps an\n * ASCII first-set tight and sound for the common all-ASCII keyword set.\n *\n * The classes are derived from the RUNNING engine's own `toUpperCase`, not a\n * frozen table, so they cannot drift from the regex engine that will do the\n * matching. Verified exhaustively against real `/i` behaviour across the BMP:\n * 1141 multi-member classes, 2307 members, zero disagreements in either\n * direction (see `test/unit/case-fold.test.ts`).\n */\n\n/** ECMAScript `Canonicalize` for non-Unicode `/i`. */\nfunction canonical(ch: string): string {\n const u = ch.toUpperCase()\n // A fold that expands (`\u00DF` \u2192 `SS`) is not a single-char fold: no canonicalization.\n if (u.length !== 1) return ch\n // Refuse a fold that would move a non-ASCII char INTO Basic Latin (`\u017F` \u2192 `S`).\n if (ch.codePointAt(0)! >= 128 && u.codePointAt(0)! < 128) return ch\n return u\n}\n\n/**\n * Lazily-built reverse index over the non-ASCII BMP, keyed by canonical form.\n * Only classes with more than one member are kept (a singleton class needs no\n * widening), which is ~2.3k entries rather than 65k. The ~12ms scan is paid ONCE\n * per process and only when a non-ASCII case-insensitive first char actually\n * appears \u2014 the all-ASCII path below never touches it.\n */\nlet foldIndex: Map<number, readonly number[]> | null = null\n\nfunction buildFoldIndex(): Map<number, readonly number[]> {\n const byCanonical = new Map<string, number[]>()\n for (let cp = 0; cp < 0x10000; cp++) {\n // Lone surrogates have no case and never canonicalize with anything.\n if (cp >= 0xd800 && cp <= 0xdfff) continue\n const key = canonical(String.fromCharCode(cp))\n const bucket = byCanonical.get(key)\n if (bucket) bucket.push(cp)\n else byCanonical.set(key, [cp])\n }\n const index = new Map<number, readonly number[]>()\n for (const members of byCanonical.values()) {\n if (members.length < 2) continue\n for (const cp of members) index.set(cp, members)\n }\n return index\n}\n\n/**\n * Every code point that a non-Unicode `/i` matcher treats as equal to `cp`,\n * INCLUDING `cp` itself. Union these into a first-set to keep case-insensitive\n * dispatch sound.\n */\nexport function caseFoldVariants(cp: number): readonly number[] {\n // Basic Latin: the fold class is exactly the a\u2194A twin, no index needed. (The\n // cross-boundary refusal above is what guarantees nothing outside ASCII joins\n // an ASCII char's class, so this fast path is exact, not an approximation.)\n if (cp < 128) {\n if (cp >= 0x41 && cp <= 0x5a) return [cp, cp + 32]\n if (cp >= 0x61 && cp <= 0x7a) return [cp, cp - 32]\n return [cp]\n }\n // Above the BMP there is nothing to fold: in non-Unicode mode the pattern is\n // matched as UTF-16 code units, and no surrogate has a case mapping.\n if (cp > 0xffff) return [cp]\n foldIndex ??= buildFoldIndex()\n return foldIndex.get(cp) ?? [cp]\n}\n", "import type { Combinator, ParseContext, ParseResult, ParserMeta, FirstSet } from '../types.ts'\nimport { fromChar, union, empty } from './first-set.ts'\nimport { caseFoldVariants } from './case-fold.ts'\nimport { failAt } from './probe.ts'\nimport { pushCstLeaf, cstCaptureActive } from '../cst/capture-buffer.ts'\n\nexport type KeywordsOptions = {\n /** Match case-insensitively. */\n caseInsensitive?: boolean\n /**\n * Character class (regex source, e.g. `'A-Za-z0-9_-'`) that must NOT follow a\n * match \u2014 a word boundary. Prevents matching `red` inside `redish`.\n */\n boundary?: string\n}\n\nexport type WordOptions = Omit<KeywordsOptions, 'boundary'>\n\n/**\n * Match a single keyword with an automatic word-boundary guard. Prevents\n * matching `true` inside `trueish`. The boundary defaults to `_0-9A-Za-z`,\n * which covers most programming-language identifiers.\n *\n * word('true') // matches \"true\" but not \"trueish\"\n * word('color', 'A-Za-z-') // CSS-style identifier boundary\n * word('media', 'A-Za-z0-9_-', { caseInsensitive: true })\n * word('media', { caseInsensitive: true }) // default boundary + options\n *\n * `caseInsensitive` matches `keywords()` and exists because it is REQUIRED, not a\n * nicety: CSS at-keywords, function names and units are ASCII case-insensitive per\n * spec (CSS Syntax \u00A73). Without it the only conforming spellings were\n * `regex(/media/i)` \u2014 which `analyzeGating` correctly flags as the `keyword-regex`\n * anti-pattern \u2014 or `keywords(['media'], \u2026)` for a single word.\n */\nexport function word(str: string, boundary?: string, opts?: WordOptions): Combinator<string>\nexport function word(str: string, opts: WordOptions): Combinator<string>\nexport function word(\n str: string,\n boundaryOrOpts?: string | WordOptions,\n opts?: WordOptions,\n): Combinator<string> {\n const boundary = typeof boundaryOrOpts === 'string' ? boundaryOrOpts : '_0-9A-Za-z'\n const rest = typeof boundaryOrOpts === 'object' && boundaryOrOpts !== null ? boundaryOrOpts : opts\n return keywords([str], { ...rest, boundary })\n}\n\n/**\n * Create a keyword factory with a fixed word-boundary class. Use when many\n * keywords share the same boundary (e.g. CSS identifiers). For a single keyword,\n * `word(str, boundary?)` is enough.\n *\n * const kw = makeWord() // default boundary\n * const cssKw = makeWord('A-Za-z0-9_-', { caseInsensitive: true })\n *\n * const query = kw('query')\n * const color = cssKw('color') // matches \"COLOR\" but not \"color-scheme\"\n */\nexport function makeWord(boundary?: string, opts?: WordOptions): (str: string) => Combinator<string>\nexport function makeWord(opts: WordOptions): (str: string) => Combinator<string>\nexport function makeWord(\n boundaryOrOpts: string | WordOptions = '_0-9A-Za-z',\n opts?: WordOptions,\n): (str: string) => Combinator<string> {\n const boundary = typeof boundaryOrOpts === 'string' ? boundaryOrOpts : '_0-9A-Za-z'\n const rest = typeof boundaryOrOpts === 'object' && boundaryOrOpts !== null ? boundaryOrOpts : opts\n return (str: string) => keywords([str], { ...rest, boundary })\n}\n\nfunction escapeRe(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\n/**\n * Match any one of a set of fixed keywords, longest-first (so `border` wins over\n * `bord`), with an optional trailing word-boundary guard. Compiles to a single\n * sticky regex \u2014 far less error-prone than a hand-maintained alternation, and\n * the common case (keyword sets: CSS colors, units, at-rule names, HTML tags).\n *\n * keywords(CSS_COLOR_NAMES, { caseInsensitive: true, boundary: 'A-Za-z0-9_-' })\n *\n * On success the matched text is recorded as a CSTLeaf (like literal()/regex()).\n */\nexport function keywords(words: readonly string[], opts: KeywordsOptions = {}): Combinator<string> {\n // Longest-first keeps the alternation greedy-correct (regex alternation is\n // first-match, not longest-match).\n const sorted = [...new Set(words)].sort((a, b) => b.length - a.length)\n const alt = sorted.map(escapeRe).join('|')\n const boundary = opts.boundary ? `(?![${opts.boundary}])` : ''\n // Case-INSENSITIVE drops `u` deliberately, so that MATCHING and the first-set\n // below fold the SAME set of characters \u2014 the invariant `regex()` established in\n // 0.32.0 (see the flag-aware widening in `src/combinators/regex.ts`):\n // - `/i` WITHOUT `u` folds only pairs that stay on the SAME side of the ASCII\n // boundary \u2014 every Basic-Latin pair (a\u2194A \u2026 z\u2194Z), and also the non-ASCII ones\n // (\u00E4\u2194\u00C4, \u03C3\u2194\u03A3\u2194\u03C2), but never a pair that crosses it. `caseFoldVariants` below\n // enumerates exactly that relation \u2192 the first-set is a tight, SOUND superset\n // and dispatch stays exact. (Widening by toUpperCase/toLowerCase alone would\n // NOT be: 67 BMP code points sit in fold classes those two miss.)\n // - `/iu` folds by Unicode *simple case folding*, so `/(?:stroke)/iu` also\n // matches `\u017Ftroke` (U+017F \u2192 s). An ASCII-only first-set would then dispatch\n // that input AWAY from this arm \u2014 an unsound gate. `regex()` answers that by\n // falling back to `any()` (forfeiting the gate); `keywords()` answers it by\n // not entering Unicode mode at all, which keeps the gate.\n // Every keyword is fully escaped by `escapeRe`, so `u` mode changes nothing about\n // what a case-SENSITIVE set matches; that path keeps `u` unchanged.\n const flags = opts.caseInsensitive ? 'iy' : 'uy'\n const re = new RegExp(`(?:${alt})${boundary}`, flags)\n\n // First-set: the set of first code points across all keywords (and their\n // case-folded variants when case-insensitive), for choice() dispatch.\n //\n // The fold must cover the SAME pairs the `iy` matcher above accepts, or the gate\n // dispatches valid input away from this arm. `/i` folds non-ASCII pairs too\n // (`/\u00E4rger/i` matches `\u00C4rger`, `/\u03C3/i` matches both `\u03A3` and `\u03C2`) \u2014 it only refuses\n // folds that would CROSS the ASCII boundary. `caseFoldVariants` is that exact\n // relation, so the widening stays a tight, sound superset for every first char,\n // not just the Basic-Latin ones.\n let firstSet: FirstSet = empty()\n for (const w of sorted) {\n if (w.length === 0) continue\n const cp = w.codePointAt(0)!\n firstSet = union(firstSet, fromChar(cp))\n if (opts.caseInsensitive) {\n for (const v of caseFoldVariants(cp)) firstSet = union(firstSet, fromChar(v))\n }\n }\n\n const meta: ParserMeta = { firstSet, canMatchNewline: false, isTrivia: false }\n\n return {\n _tag: 'keywords',\n _meta: meta,\n _def: { tag: 'keywords', words: sorted, caseInsensitive: opts.caseInsensitive ?? false, boundary: opts.boundary },\n parse(input: string, pos: number, ctx: ParseContext): ParseResult<string> {\n re.lastIndex = pos\n const m = re.exec(input)\n if (m === null || m.index !== pos) {\n return failAt(ctx, ['keyword'], pos)\n }\n const value = m[0]!\n const span = { start: pos, end: pos + value.length }\n if (cstCaptureActive(ctx)) pushCstLeaf(ctx, { _tag: 'leaf', value, span })\n return { ok: true, value, span }\n },\n }\n}\n", "import type { Combinator, DispatchCase, DispatchMatcherCase, ParseContext, ParseResult, ParserMeta } from '../types.ts'\nimport { cstCaptureActive, pushCstLeaf } from '../cst/capture-buffer.ts'\nimport { rollbackTrivia, saveTriviaMark } from './trivia-skip.ts'\n\nexport type DispatchWhen<T> = {\n readonly kind: 'when'\n readonly keys: readonly string[]\n readonly parser: Combinator<T>\n readonly caseInsensitive: boolean\n readonly usesRouted?: boolean\n}\n\nexport type DispatchWhenMatcher<T> = {\n readonly kind: 'whenMatcher'\n readonly matcher: DispatchStringMatcher\n readonly parser: Combinator<T>\n readonly caseInsensitive: boolean\n readonly usesRouted?: boolean\n}\n\nexport type DispatchStringMatcher =\n | { readonly kind: 'startsWith'; readonly value: string }\n | { readonly kind: 'endsWith'; readonly value: string }\n | { readonly kind: 'matches'; readonly value: string; readonly flags: string }\n\nexport type DispatchOtherwise<T> = {\n readonly kind: 'otherwise'\n readonly parser: Combinator<T>\n readonly usesRouted?: boolean\n}\n\nexport type DispatchArm<T = unknown> = DispatchWhen<T> | DispatchWhenMatcher<T> | DispatchOtherwise<T>\nexport type DispatchWhenOptions = {\n caseInsensitive?: boolean\n}\nexport type DispatchWhenFactory = <T>(\n key: string | readonly string[],\n parser: Combinator<T>,\n) => DispatchWhen<T>\nexport type DispatchWhenKey = string | readonly string[]\nexport type DispatchWhenSelector = DispatchWhenKey | DispatchStringMatcher\n\ntype ArmValue<T> = T extends DispatchWhen<infer U>\n ? U\n : T extends DispatchWhenMatcher<infer U>\n ? U\n : T extends DispatchOtherwise<infer U>\n ? U\n : never\ntype UnionArms<T extends readonly DispatchArm<unknown>[]> = {\n [K in keyof T]: ArmValue<T[K]>\n}[number]\n\nfunction parserUsesRouted(parser: Combinator<unknown>, seen: Set<Combinator<unknown>> = new Set()): boolean {\n if (seen.has(parser)) return false\n seen.add(parser)\n const def = parser._def\n switch (def.tag) {\n case 'routed':\n return true\n case 'sequence':\n case 'choice':\n return def.parsers.some(entry => parserUsesRouted(entry, seen))\n case 'dispatch':\n return false\n case 'sepBy':\n return parserUsesRouted(def.parser, seen) || parserUsesRouted(def.separator, seen)\n case 'skip':\n return parserUsesRouted(def.main, seen) || parserUsesRouted(def.skipped, seen)\n case 'grammar':\n return parserUsesRouted(def.parser, seen) || (def.triviaParser ? parserUsesRouted(def.triviaParser, seen) : false)\n case 'scanTo':\n return parserUsesRouted(def.sentinel, seen) || def.skip.some(entry => parserUsesRouted(entry, seen))\n case 'recover':\n return parserUsesRouted(def.parser, seen) || parserUsesRouted(def.sentinel, seen)\n case 'lazy':\n try { return parserUsesRouted(def.thunk(), seen) } catch { return false }\n case 'many':\n case 'oneOrMore':\n case 'optional':\n case 'attempt':\n case 'transform':\n case 'trivia':\n case 'token':\n case 'leaf':\n case 'label':\n case 'field':\n case 'not':\n case 'peek':\n case 'node':\n case 'withCtx':\n case 'expect':\n return parserUsesRouted(def.parser, seen)\n default:\n return false\n }\n}\n\nfunction branchUsesRouted(branch: { parser: Combinator<unknown>; usesRouted?: boolean | undefined }): boolean {\n return branch.usesRouted === true || parserUsesRouted(branch.parser)\n}\n\nfunction asciiFoldKey(key: string): string {\n let out = ''\n for (let i = 0; i < key.length; i++) {\n const c = key.charCodeAt(i)\n out += String.fromCharCode(c >= 65 && c <= 90 ? c + 32 : c)\n }\n return out\n}\n\nfunction matchesDispatchMatcher(value: string, matcher: DispatchMatcherCase): boolean {\n const candidate = matcher.caseInsensitive ? asciiFoldKey(value) : value\n const expected = matcher.caseInsensitive ? asciiFoldKey(matcher.value) : matcher.value\n switch (matcher.kind) {\n case 'startsWith':\n return candidate.startsWith(expected)\n case 'endsWith':\n return candidate.endsWith(expected)\n case 'matches': {\n const flags = matcher.caseInsensitive && !matcher.flags?.includes('i')\n ? `${matcher.flags ?? ''}i`\n : matcher.flags ?? ''\n return new RegExp(matcher.value, flags).test(value)\n }\n }\n}\n\nfunction isStringMatcher(value: unknown): value is DispatchStringMatcher {\n if (typeof value !== 'object' || value === null) return false\n const kind = (value as { kind?: unknown }).kind\n return kind === 'startsWith' || kind === 'endsWith' || kind === 'matches'\n}\n\nfunction fixedMatcher(kind: 'startsWith' | 'endsWith', value: string): DispatchStringMatcher {\n if (typeof value !== 'string') throw new TypeError(`parseman: ${kind}() value must be a string`)\n if (value.length === 0) throw new RangeError(`parseman: ${kind}() requires a non-empty value`)\n return { kind, value }\n}\n\nexport function startsWith(prefix: string): DispatchStringMatcher {\n return fixedMatcher('startsWith', prefix)\n}\n\nexport function endsWith(suffix: string): DispatchStringMatcher {\n return fixedMatcher('endsWith', suffix)\n}\n\nexport function matches(pattern: RegExp): DispatchStringMatcher {\n if (!(pattern instanceof RegExp)) throw new TypeError('parseman: matches() requires a RegExp')\n if (pattern.flags.includes('g') || pattern.flags.includes('y')) {\n throw new TypeError('parseman: matches() does not accept global or sticky regex flags')\n }\n return { kind: 'matches', value: pattern.source, flags: pattern.flags }\n}\n\nexport function when<T>(\n key: DispatchWhenKey,\n parser: Combinator<T>,\n opts?: DispatchWhenOptions,\n): DispatchWhen<T>\nexport function when<T>(\n matcher: DispatchStringMatcher,\n parser: Combinator<T>,\n opts?: DispatchWhenOptions,\n): DispatchWhenMatcher<T>\nexport function when<T>(\n key: DispatchWhenSelector,\n parser: Combinator<T>,\n opts: DispatchWhenOptions = {},\n): DispatchWhen<T> | DispatchWhenMatcher<T> {\n const usesRouted = parserUsesRouted(parser as Combinator<unknown>)\n if (isStringMatcher(key)) {\n return { kind: 'whenMatcher', matcher: key, parser, caseInsensitive: opts.caseInsensitive ?? false, usesRouted }\n }\n const keys = Array.isArray(key) ? [...key] : [key]\n if (keys.length === 0) throw new RangeError('parseman: when() requires at least one key')\n for (const item of keys) {\n if (typeof item !== 'string') throw new TypeError('parseman: when() keys must be strings')\n }\n return { kind: 'when', keys, parser, caseInsensitive: opts.caseInsensitive ?? false, usesRouted }\n}\n\nexport function makeWhen(opts: DispatchWhenOptions = {}): DispatchWhenFactory {\n return (key, parser) => when(key, parser, opts)\n}\n\nexport function otherwise<T>(parser: Combinator<T>): DispatchOtherwise<T> {\n return { kind: 'otherwise', parser, usesRouted: parserUsesRouted(parser as Combinator<unknown>) }\n}\n\n/**\n * Reuse the token the enclosing `dispatch()` already consumed to select this branch,\n * instead of re-recognizing it.\n *\n * With no argument this is dispatch-only: outside a dispatch branch (or at a position\n * other than the selector's) it fails with `expected: ['routed()']`.\n *\n * `routed(fallback)` makes the SAME production usable in both contexts: inside a\n * dispatch branch it reuses the routed token; anywhere else it parses `fallback` in\n * place. That is what collapses a `Routed<X>` twin production into its original \u2014\n * `sequence(routed(Name), Prelude, ';')` replaces the pair\n * `sequence(Name, Prelude, ';')` / `sequence(routed(), Prelude, ';')`, which\n * otherwise differ by exactly one element and duplicate a whole production (and a\n * whole compiled emission) for a one-token difference.\n *\n * A `routed()` in a dispatch SELECTOR is still an error with or without a fallback:\n * the selector is what produces the routed token, so reading it there is misuse.\n */\nexport function routed<T = string>(fallback?: Combinator<T>): Combinator<T> {\n return {\n _tag: 'routed',\n _meta: {\n // The routed token is whatever the selector matched, so the first set stays\n // `any` even with a fallback \u2014 `any` already subsumes the fallback's.\n firstSet: { kind: 'any' },\n canMatchNewline: fallback?._meta.canMatchNewline ?? false,\n isTrivia: false,\n },\n _def: fallback === undefined\n ? { tag: 'routed' }\n : { tag: 'routed', fallback: fallback as Combinator<unknown> },\n parse(_input: string, pos: number, ctx: ParseContext): ParseResult<T> {\n const item = ctx._routed\n if (item === undefined || pos !== item.span.start) {\n if (fallback !== undefined) return fallback.parse(_input, pos, ctx)\n return { ok: false, expected: ['routed()'], span: { start: pos, end: pos } }\n }\n if (cstCaptureActive(ctx)) {\n pushCstLeaf(ctx, { _tag: 'leaf', value: item.value, span: item.span })\n }\n return { ok: true, value: item.value as T, span: item.span }\n },\n }\n}\n\nexport function dispatch<S extends string, T extends readonly DispatchArm<unknown>[]>(\n selector: Combinator<S>,\n ...arms: T\n): Combinator<[S, UnionArms<T>]> {\n if (parserUsesRouted(selector as Combinator<unknown>)) {\n throw new Error('parseman: routed() can only appear inside a dispatch() branch')\n }\n let fallback: Combinator<unknown> | undefined\n let fallbackUsesRouted = false\n const matchers: DispatchMatcherCase[] = []\n const cases: DispatchCase[] = []\n const seen: Array<{ raw: string; folded: string; caseInsensitive: boolean }> = []\n\n for (let i = 0; i < arms.length; i++) {\n const arm = arms[i]!\n if (arm.kind === 'otherwise') {\n if (fallback !== undefined) throw new Error('parseman: dispatch() accepts at most one otherwise() arm')\n if (i !== arms.length - 1) throw new Error('parseman: otherwise() must be the last dispatch() arm')\n fallback = arm.parser\n fallbackUsesRouted = arm.usesRouted === true\n continue\n }\n if (arm.kind === 'whenMatcher') {\n const matcher = arm.matcher\n matchers.push({\n kind: matcher.kind,\n value: matcher.value,\n ...(matcher.kind === 'matches' ? { flags: matcher.flags } : {}),\n parser: arm.parser as Combinator<unknown>,\n caseInsensitive: arm.caseInsensitive,\n ...(arm.usesRouted === true ? { usesRouted: true } : {}),\n })\n continue\n }\n for (const key of arm.keys) {\n const folded = asciiFoldKey(key)\n for (const prior of seen) {\n const overlaps = arm.caseInsensitive || prior.caseInsensitive\n ? folded === prior.folded\n : key === prior.raw\n if (overlaps) throw new Error(`parseman: duplicate dispatch key ${JSON.stringify(key)}`)\n }\n seen.push({ raw: key, folded, caseInsensitive: arm.caseInsensitive })\n }\n cases.push({\n keys: arm.keys,\n parser: arm.parser as Combinator<unknown>,\n caseInsensitive: arm.caseInsensitive,\n ...(arm.usesRouted === true ? { usesRouted: true } : {}),\n })\n }\n\n const meta: ParserMeta = {\n firstSet: selector._meta.firstSet,\n canMatchNewline: selector._meta.canMatchNewline ||\n cases.some(entry => entry.parser._meta.canMatchNewline) ||\n matchers.some(entry => entry.parser._meta.canMatchNewline) ||\n (fallback?._meta.canMatchNewline ?? false),\n isTrivia: false,\n }\n\n const byKey = new Map<string, DispatchCase>()\n const byFoldedKey = new Map<string, DispatchCase>()\n for (const entry of cases) {\n for (const key of entry.keys) {\n if (entry.caseInsensitive) byFoldedKey.set(asciiFoldKey(key), entry)\n else byKey.set(key, entry)\n }\n }\n\n return {\n _tag: 'dispatch',\n _meta: meta,\n _def: {\n tag: 'dispatch',\n selector: selector as Combinator<string>,\n cases,\n ...(matchers.length === 0 ? {} : { matchers }),\n ...(fallback === undefined ? {} : { otherwise: fallback, ...(fallbackUsesRouted ? { otherwiseUsesRouted: true } : {}) }),\n },\n parse(input: string, pos: number, ctx: ParseContext): ParseResult<[S, UnionArms<T>]> {\n if (parserUsesRouted(selector as Combinator<unknown>)) {\n throw new Error('parseman: routed() can only appear inside a dispatch() branch')\n }\n const selectorMark = saveTriviaMark(ctx)\n const selected = selector.parse(input, pos, ctx)\n if (!selected.ok) return selected\n\n const branch = byKey.get(selected.value) ??\n (byFoldedKey.size === 0 ? undefined : byFoldedKey.get(asciiFoldKey(selected.value))) ??\n matchers.find(matcher => matchesDispatchMatcher(selected.value, matcher)) ??\n (fallback === undefined ? undefined : { keys: [], parser: fallback, caseInsensitive: false, usesRouted: fallbackUsesRouted })\n if (branch === undefined) {\n const expected = cases.flatMap(entry => entry.keys.map(key => JSON.stringify(key)))\n return { ok: false, expected, span: { start: selected.span.end, end: selected.span.end } }\n }\n\n const savedRouted = ctx._routed\n const usesRouted = branchUsesRouted(branch)\n let mark = saveTriviaMark(ctx)\n if (usesRouted) {\n rollbackTrivia(ctx, selectorMark)\n mark = saveTriviaMark(ctx)\n ctx._routed = { value: selected.value, span: selected.span }\n }\n let result: ParseResult<unknown>\n try {\n result = branch.parser.parse(input, usesRouted ? pos : selected.span.end, ctx)\n } finally {\n if (usesRouted) ctx._routed = savedRouted\n }\n if (!result.ok) {\n rollbackTrivia(ctx, mark)\n return { ...result, committed: true }\n }\n\n return {\n ok: true,\n value: [selected.value, result.value as UnionArms<T>],\n span: { start: pos, end: result.span.end },\n }\n },\n }\n}\n", "import type { Combinator, ParseContext, ParseResult } from '../types.ts'\nimport { rollbackCstCapture, saveCstMark } from '../cst/capture-buffer.ts'\nimport { matchesEmpty, startsFirstSet } from './first-set.ts'\nimport { deriveExpected } from './expect.ts'\n\n/**\n * Transactional ordered-choice arm. On failure it restores Parseman's\n * structural capture/trivia/error sinks and reports failure at its entry point;\n * user-owned `ctx.state` is intentionally not cloned or mutated by Parseman.\n */\nexport function attempt<T>(parser: Combinator<T>): Combinator<T> {\n // First-set fail-fast (mirrors emitAttempt's codegen guard): a non-nullable inner\n // whose first set can't start here can only fail, so reject BEFORE taking the six\n // transaction rollback marks, re-anchoring at `pos` and reporting the same static\n // `expected` the inner start-fail would. Skipped under a completions probe /\n // tolerant recovery, where the swallowed failure still feeds the probe.\n const guardable = parser._meta.firstSet.kind !== 'any' && !matchesEmpty(parser)\n let failExpected: string[] | undefined\n return {\n _tag: 'attempt', _meta: parser._meta, _def: { tag: 'attempt', parser },\n parse(input: string, pos: number, ctx: ParseContext): ParseResult<T> {\n if (guardable && ctx._probe === undefined && !ctx._tolerant && !startsFirstSet(parser, input, pos)) {\n if (failExpected === undefined) {\n const e = deriveExpected(parser)\n failExpected = e.length > 0 ? e : [parser._tag]\n }\n return { ok: false, expected: failExpected, span: { start: pos, end: pos } }\n }\n const mark = saveCstMark(ctx)\n const log = ctx._triviaLog?.length\n const rootLog = ctx._rootTriviaLog?.length\n const result = parser.parse(input, pos, ctx)\n if (result.ok) return result\n rollbackCstCapture(ctx, mark)\n if (log !== undefined && ctx._triviaLog && ctx._triviaLog.length !== log) ctx._triviaLog.length = log\n if (rootLog !== undefined && ctx._rootTriviaLog && ctx._rootTriviaLog.length !== rootLog) ctx._rootTriviaLog.length = rootLog\n if (result.committed) return result\n return { ok: false, expected: result.expected, span: { start: pos, end: pos } }\n },\n }\n}\n", "import type { Combinator, ParseContext, ParseResult, ParserMeta } from '../types.ts'\nimport { any } from './first-set.ts'\nimport { saveLookaheadMark, rollbackLookahead } from './trivia-skip.ts'\n\n/**\n * Negative lookahead. Succeeds (consuming nothing) when `combinator` fails;\n * fails when `combinator` succeeds.\n *\n * The standard way to match a keyword without also matching the prefix\n * of a longer identifier:\n *\n * const kwTrue = sequence(literal('true'), not(regex(/\\w/)))\n * // matches \"true\" in \"true && x\" but NOT in \"trueish\" or \"trueness\"\n */\nexport function not(combinator: Combinator<unknown>): Combinator<null> {\n const meta: ParserMeta = {\n firstSet: any(), // we don't know what NOT matches\n canMatchNewline: false,\n isTrivia: false,\n }\n\n return {\n _tag: 'not',\n _meta: meta,\n _def: { tag: 'not', parser: combinator },\n parse(input: string, pos: number, ctx: ParseContext): ParseResult<null> {\n // Negative lookahead is a pure predicate: whatever the inner attempt\n // captured (CST leaves/rawChildren/per-node trivia/fields), recovered (a\n // ParseError pushed to ctx._errors + embedded via captureError), or committed\n // to the GLOBAL `_triviaLog` must be rolled back on BOTH outcomes \u2014 not()\n // consumes nothing and so may leave no side effect.\n //\n // `rollbackLookahead`, not `rollbackCstCapture`: the latter's mark omits two\n // further sinks a probe can write.\n // - `_triviaLog`, which `scanTrivia().commit()` writes when the probed body\n // skips ambient trivia between terms. Missing it duplicates every probed\n // span once the region is parsed for real \u2014 `_triviaLog` has no dedup\n // anywhere (`triviaEntries()` is a positional view over the flat array),\n // so the duplicate reaches output.\n // - `_probe.best`, the completions tracker, for the same reason `peek()`\n // restores it: expectations raised INSIDE a zero-width probe are not\n // reachable from the enclosing grammar at the cursor, so leaving them\n // offers unreachable tokens as completions.\n // Using the shared lookahead helper means neither can silently regress the\n // next time a sink is added.\n const mark = saveLookaheadMark(ctx)\n const result = combinator.parse(input, pos, ctx)\n rollbackLookahead(ctx, mark)\n if (result.ok) {\n return { ok: false, expected: [`not(${combinator._tag})`], span: { start: pos, end: pos } }\n }\n return { ok: true, value: null, span: { start: pos, end: pos } }\n },\n }\n}\n", "import type { Combinator, ParseContext, ParseResult, ParserMeta } from '../types.ts'\nimport { any, matchesEmpty } from './first-set.ts'\nimport { saveLookaheadMark, rollbackLookahead } from './trivia-skip.ts'\n\n/**\n * Positive lookahead. Succeeds (consuming nothing) when `combinator` matches at\n * this position; fails when it doesn't. The mirror of `not()`.\n *\n * // \"a mixin reference, not a class selector\": require the punctuation ahead,\n * // then let the real production consume it.\n * const mixinRef = sequence(peek(regex(/[.#]/)), mixinCall)\n *\n * WHY THIS EXISTS AS A PRIMITIVE (not `not(not(X))`):\n *\n * `not(not(X))` is behaviourally a positive lookahead, but `not()` reports\n * `firstSet: any()` \u2014 it cannot know what it forbids \u2014 so `not(not(X))` reports\n * `any()` too. An arm leading with it therefore POISONS its choice's first-char\n * dispatch (`analyzeGating` flags it as the `double-not` anti-pattern), and among\n * sibling arms that share a first char the hand-rolled gate miscompiles.\n *\n * `peek(X)` carries X's first-set instead, so a leading `peek()` GATES its arm:\n * `choice(sequence(peek(regex(/[.#]/)), \u2026), \u2026)` still emits O(1) dispatch.\n *\n * The first-set is exact only when X is NON-NULLABLE. A nullable `peek(X)`\n * succeeds on the empty string, so it constrains no first character at all \u2014 it\n * reports `any()`, the sound over-approximation. (Same rule the sequence\n * first-set uses; see `isPositiveLookahead` in `first-set.ts`.)\n */\nexport function peek(combinator: Combinator<unknown>): Combinator<null> {\n const meta: ParserMeta = {\n // A nullable body imposes no first-char constraint \u2014 `any()`, not its set.\n firstSet: matchesEmpty(combinator) ? any() : combinator._meta.firstSet,\n canMatchNewline: false,\n isTrivia: false,\n }\n\n return {\n _tag: 'peek',\n _meta: meta,\n _def: { tag: 'peek', parser: combinator },\n parse(input: string, pos: number, ctx: ParseContext): ParseResult<null> {\n // Zero-width on BOTH outcomes, so the probe must leave NO observable trace:\n // whatever the inner attempt captured (CST leaves/rawChildren/per-node\n // trivia/fields), recovered (`_errors`), or committed to the GLOBAL\n // `_triviaLog` is rolled back either way.\n //\n // `rollbackTrivia`, not `rollbackCstCapture`: the latter's mark omits\n // `_triviaLog`, which is a SEPARATE sink `scanTrivia().commit()` writes when\n // the body skips ambient trivia between terms. Missing it duplicates every\n // probed trivia span once the region is parsed for real \u2014 `_triviaLog` has no\n // dedup anywhere (`triviaEntries()` is a positional view over the flat array),\n // so the duplicate reaches output. Same failure mode as the one recorded in\n // `test/parity/trivia-log-regression.test.ts`. The compiled `peek` emits its\n // body under a non-capturing ctx and so never writes these sinks at all; this\n // is what keeps the two engines at parity.\n const mark = saveLookaheadMark(ctx)\n const result = combinator.parse(input, pos, ctx)\n rollbackLookahead(ctx, mark)\n if (result.ok) return { ok: true, value: null, span: { start: pos, end: pos } }\n return { ok: false, expected: [`peek(${combinator._tag})`], span: { start: pos, end: pos } }\n },\n }\n}\n", "import type { Combinator, FieldMap, ParseContext, ParseResult, ParserMeta, ParserDef } from '../types.ts'\nimport { beginCstNodeCapture, endCstNodeCapture, pushCstChild } from '../cst/capture-buffer.ts'\nimport { buildReadsTrivia, buildReadsState, cstOutputHost } from '../compiler/build-arity.ts'\nimport { buildFieldMap, buildReadsFields, parserHasOwnFields } from '../compiler/fields.ts'\nimport { consumeTrivia } from './trivia-skip.ts'\nimport { matchesEmpty, startsFirstSet } from './first-set.ts'\nimport { deriveExpected } from './expect.ts'\nimport { annotateSpanFromLineContext } from '../line-index.ts'\nimport { NODE_TAG, NODE_TYPE } from '../cst/reflection.ts'\n\n/**\n * A CST/AST node rule. Runs `combinator` while collecting its terminals into\n * `children` / `rawChildren` arrays and trivia spans into `triviaLog`, then\n * calls `build(children, fields, span, rawChildren, triviaLog, state)` to produce the node.\n *\n * - `children` \u2014 structural items in source order: spanned CSTLeaf terminals\n * and sub-nodes (whatever `build` returned for inner nodes).\n * - `rawChildren` \u2014 structural children only (same items as `children`).\n * - `triviaLog` \u2014 flat log of trivia entries: each entry is `[start, end, insertIdx]`\n * consumed between terms. `insertIdx` is the rawChildren index\n * before which the trivia was consumed. Use `buildTriviaIndex`\n * to turn this into a before/after lookup table.\n *\n * If `build` returns a non-node value (e.g. a bare string for an unwrapped rule),\n * the parent records it as a spanned leaf so its source span is still recoverable.\n */\nexport type BuildNode<N> = (\n children: ReadonlyArray<unknown>,\n fields: FieldMap | undefined,\n span: { start: number; end: number },\n rawChildren: ReadonlyArray<unknown>,\n triviaLog: readonly number[],\n state: unknown,\n) => N\n\n/**\n * Options for `node()`.\n * - `unwrap` \u2014 an AST/value wrapper rule that IS its single child when it\n * captured exactly one. A leaf unwraps to its string value; a sub-node is\n * returned as-is.\n * - `collapse` \u2014 a structural wrapper rule that returns its single child exactly\n * as captured. A leaf stays a CSTLeaf; a node stays a node.\n * - `project` \u2014 return one captured semantic child by index while retaining the\n * complete node frame for CST hosts. Leaves unwrap to their string value.\n * - `captureTrivia` \u2014 capture trivia consumed inside this node even when its\n * enclosing `parser()` did not opt into document-wide trivia capture. This is\n * scoped to the node; sibling and parent nodes retain their own setting.\n * - `trailingTrivia` \u2014 after a successful node body, consume the active grammar\n * trivia once into THIS node's log. Intended for a document root whose body is\n * a repetition; do not set it on a block that already has a closing delimiter.\n * - `tags` \u2014 grammar-level CST categories for visitor dispatch. Stored once in\n * grammar reflection; not copied onto every CST node.\n * Both skip `build` only for a one-child match; zero or two-plus children go\n * through `build` normally.\n */\ntype ParserValue<P> = P extends Combinator<infer T> ? T : never\ntype ProjectValue<P extends Combinator<unknown>, I extends number> =\n ParserValue<P> extends readonly unknown[]\n ? I extends keyof ParserValue<P> ? ParserValue<P>[I] : unknown\n : I extends 0 ? ParserValue<P> : unknown\n\nexport type NodeCombinator<T, NodeType extends string = never, NodeTag extends string = never> =\n Combinator<T> & {\n /** Type-only CST node identity carried for grammar-aware visitors. */\n readonly [NODE_TYPE]?: NodeType\n /** Type-only CST tags carried for grammar-aware visitors. */\n readonly [NODE_TAG]?: NodeTag\n }\n\nexport type NodeOptions<Tags extends readonly string[] = readonly never[]> = {\n unwrap?: boolean\n collapse?: boolean\n project?: number\n captureTrivia?: boolean\n trailingTrivia?: boolean\n tags?: Tags\n /**\n * Declared positional arity of `build` \u2014 the ESCAPE HATCH for a reducer parseman\n * cannot read.\n *\n * Arity gates five capture tiers (`>= 1` children, `>= 2` fields, `>= 4` rawChildren,\n * `>= 5` triviaLog, `>= 6` a clone of `_ctx.state`), and parseman normally derives it\n * from the reducer's declaration \u2014 including across module boundaries. A few shapes\n * are genuinely undecidable: a rest parameter (`...args`), a body that reads\n * `arguments`, a reassigned or dynamically constructed reducer. Those fail OPEN, which\n * is safe but pays for every tier on every match, forever.\n *\n * Declaring the arity here turns \"undecidable\" into \"declared\". You are asserting the\n * highest positional argument the reducer reads; parseman then elides everything above\n * it exactly as if it had read the parameter list.\n *\n * DECLARING TOO LOW UNDER-CAPTURES: the reducer will receive an empty `rawChildren` /\n * `triviaLog` or an absent `state` rather than a wrong value. Count the parameters.\n */\n buildArity?: number\n}\nexport type NodeProjectOptions<I extends number = number> =\n Omit<NodeOptions, 'project' | 'unwrap' | 'collapse'> & { project: I; unwrap?: never; collapse?: never }\n\n/** A captured child's value form: a leaf unwraps to its string value, else as-is. */\nfunction unwrapChild(child: unknown): unknown {\n return child !== null && typeof child === 'object' && (child as { _tag?: string })._tag === 'leaf'\n ? (child as { value: unknown }).value\n : child\n}\n\nfunction isCstChild(value: unknown): boolean {\n return typeof value === 'object'\n && value !== null\n && ((value as { _tag?: string })._tag === 'node'\n || (value as { _tag?: string })._tag === 'leaf'\n || (value as { _tag?: string })._tag === 'parseError')\n}\n\nfunction missingInferredType(): never {\n throw new Error('node(): inferred node type requires a rules() key; pass node(\"Type\", parser) outside rules()')\n}\n\nfunction normalizeBuildArity(arity: number | undefined): number | undefined {\n if (arity === undefined) return undefined\n if (!Number.isInteger(arity) || arity < 0 || arity > 6) {\n throw new Error('node() buildArity must be an integer 0..6 (children, fields, span, rawChildren, triviaLog, state)')\n }\n return arity\n}\n\nfunction normalizeProject(project: number | undefined): number | undefined {\n if (project === undefined) return undefined\n if (!Number.isInteger(project) || project < 0) {\n throw new Error('node() project child must be a non-negative integer')\n }\n return project\n}\n\nfunction projectChild(children: ReadonlyArray<unknown>, project: number, type: string): unknown {\n if (!(project in children)) {\n throw new Error(`node(${JSON.stringify(type)}) project child ${project} was not captured`)\n }\n return unwrapChild(children[project])\n}\n\nexport function node<P extends Combinator<unknown>, const I extends number, const Tags extends readonly string[] = readonly never[]>(combinator: P, opts: NodeProjectOptions<I> & { tags?: Tags }): NodeCombinator<ProjectValue<P, I>, never, Tags[number]>\nexport function node<N, const Tags extends readonly string[] = readonly never[]>(combinator: Combinator<unknown>, build?: BuildNode<N>, opts?: NodeOptions<Tags>): NodeCombinator<N, never, Tags[number]>\nexport function node<N, const Tags extends readonly string[] = readonly never[]>(combinator: Combinator<unknown>, opts?: NodeOptions<Tags>): NodeCombinator<N, never, Tags[number]>\nexport function node<const Type extends string, P extends Combinator<unknown>, const I extends number, const Tags extends readonly string[] = readonly never[]>(type: Type, combinator: P, opts: NodeProjectOptions<I> & { tags?: Tags }): NodeCombinator<ProjectValue<P, I>, Type, Tags[number]>\nexport function node<N, const Type extends string, const Tags extends readonly string[] = readonly never[]>(type: Type, combinator: Combinator<unknown>, build?: BuildNode<N>, opts?: NodeOptions<Tags>): NodeCombinator<N, Type, Tags[number]>\nexport function node<N, const Type extends string, const Tags extends readonly string[] = readonly never[]>(type: Type, combinator: Combinator<unknown>, opts?: NodeOptions<Tags>): NodeCombinator<N, Type, Tags[number]>\nexport function node<N>(\n typeOrCombinator: string | Combinator<unknown>,\n combinatorOrBuild?: Combinator<unknown> | BuildNode<N> | NodeOptions,\n buildOrOpts?: BuildNode<N> | NodeOptions,\n maybeOpts?: NodeOptions,\n): Combinator<N> {\n const hasExplicitType = typeof typeOrCombinator === 'string'\n const type = hasExplicitType ? typeOrCombinator : undefined\n const combinator = (hasExplicitType ? combinatorOrBuild : typeOrCombinator) as Combinator<unknown>\n const buildArg = hasExplicitType ? buildOrOpts : combinatorOrBuild\n const build = typeof buildArg === 'function' ? buildArg as BuildNode<N> : undefined\n const opts = (typeof buildArg === 'function' ? maybeOpts : buildArg ?? maybeOpts) as NodeOptions | undefined\n const project = normalizeProject(opts?.project)\n if (project !== undefined && build !== undefined) {\n throw new Error('node() options cannot combine project with a build callback')\n }\n const baseDef = { tag: 'node' as const, parser: combinator, ...(type === undefined ? {} : { type }), ...(build === undefined ? {} : { build }) }\n const meta: ParserMeta = {\n firstSet: combinator._meta.firstSet,\n canMatchNewline: combinator._meta.canMatchNewline,\n isTrivia: false,\n }\n const unwrap = opts?.unwrap === true\n const collapse = opts?.collapse === true\n const captureTrivia = opts?.captureTrivia === true\n const trailingTrivia = opts?.trailingTrivia === true\n const tags = opts?.tags\n const buildArity = normalizeBuildArity(opts?.buildArity)\n if (unwrap && collapse) {\n throw new Error('node() options cannot set both unwrap and collapse')\n }\n if (project !== undefined && (unwrap || collapse)) {\n throw new Error('node() options cannot combine project with unwrap or collapse')\n }\n const def: Extract<ParserDef, { tag: 'node' }> = unwrap || collapse || project !== undefined || captureTrivia || trailingTrivia || buildArity !== undefined || (tags !== undefined && tags.length > 0)\n ? { ...baseDef, ...(unwrap ? { unwrap: true } : {}), ...(collapse ? { collapse: true } : {}), ...(project !== undefined ? { project } : {}), ...(captureTrivia ? { captureTrivia: true } : {}), ...(trailingTrivia ? { trailingTrivia: true } : {}), ...(buildArity !== undefined ? { buildArity } : {}), ...(tags !== undefined && tags.length > 0 ? { tags } : {}) }\n : baseDef\n // Arity-gated elision \u2014 decided once, identically to the compiler (build-arity.ts).\n // When the build never reads the trivia (4th) arg, disable per-node CST-trivia\n // capture for the inner scope; when it never reads state (5th), skip the state clone.\n // A STRUCTURAL node (no own build) defers to `ctx.build` / a default CST, which\n // may read either, so capture both.\n // These are the DIRECT builder's own needs, and they are not the whole story. A node\n // with its own build is re-routed through `ctx.build` when that host marks itself\n // `_parsemanCstOutput` (see the dispatch below) \u2014 and then the HOST, not the builder,\n // is the consumer. Nearly every AST builder is `children => \u2026`, arity 1, so under a CST\n // host these nodes handed the host an EMPTY triviaLog and absent fields and state, and\n // an empty trivia log is indistinguishable from a node that genuinely had none.\n //\n // The COMPILED engine settles this at build time (`compile(g, { hostMode: 'cst' })`,\n // added in 0.37.0), where it costs nothing. The interpreter has no compile step and\n // stays dynamic, so it re-decides per parse \u2014 which is the same answer, reached the\n // only way this engine can reach it.\n const capturesTrivia = captureTrivia || trailingTrivia || (build ? buildReadsTrivia(def) : project === undefined)\n const clonesState = build ? buildReadsState(def) : project === undefined\n const hasOwnFields = parserHasOwnFields(combinator)\n const capturesFields = hasOwnFields && (build ? buildReadsFields(def) : project === undefined)\n // First-set fail-fast (mirrors emitNode's codegen guard): a node whose body can't\n // match empty and whose first set can't start here can only fail, so reject BEFORE\n // allocating the CST capture frame. Sound and output-neutral \u2014 the failing body\n // would capture nothing and beginCstNodeCapture saves/restores every buffer, so\n // skipping returns the same failure the body's start-fail produces. Skipped under a\n // completions probe / tolerant recovery, where the swallowed failure still feeds the\n // probe (matching the codegen guard's `!ctx.recovery` gate).\n const guardable = combinator._meta.firstSet.kind !== 'any' && !matchesEmpty(combinator)\n let failExpected: string[] | undefined\n return {\n _tag: 'node',\n _meta: meta,\n _def: def,\n parse(input: string, pos: number, ctx: ParseContext): ParseResult<N> {\n if (guardable && ctx._probe === undefined && !ctx._tolerant && !startsFirstSet(combinator, input, pos)) {\n if (failExpected === undefined) {\n const e = deriveExpected(combinator)\n failExpected = e.length > 0 ? e : [combinator._tag]\n }\n return { ok: false, expected: failExpected, span: { start: pos, end: pos } }\n }\n // Under a positioned-CST host a direct builder is bypassed, so capture must follow\n // what the HOST reads. Mirrors `hostMode: 'cst'` in the compiled engine, which\n // captures unconditionally there because it knows the mode at compile time.\n const hasDirectValue = build !== undefined || project !== undefined\n const hostCst = hasDirectValue && cstOutputHost(ctx.build)\n const effTrivia = capturesTrivia || hostCst\n const effFields = capturesFields || (hostCst && hasOwnFields)\n const saved = beginCstNodeCapture(ctx)\n const savedFields = ctx._fields\n ctx._fields = effFields ? [] : undefined\n // Per-node-type trivia-kind mask: a structural (host-built) node may want\n // only certain kinds captured (comments for Ruleset, whitespace for\n // CompoundSelector). Scoped here, restored below \u2014 matches the compiled path.\n const savedMask = ctx._triviaCaptureMask\n if (build === undefined && project === undefined && ctx.build?._parsemanTriviaKinds !== undefined && def.type !== undefined) {\n ctx._triviaCaptureMask = ctx.build._parsemanTriviaKinds(def.type)\n }\n // Short-circuit the per-node trivia push (scanTrivia gates on captureTrivia)\n // without touching the global _triviaLog, which is committed independently.\n if (!effTrivia) ctx.captureTrivia = false\n let r = combinator.parse(input, pos, ctx)\n if (r.ok && trailingTrivia && ctx.trivia) {\n const end = consumeTrivia(input, r.span.end, ctx)\n r = { ...r, span: { start: r.span.start, end } }\n }\n const fields = effFields ? buildFieldMap(ctx._fields) : undefined\n ctx._fields = savedFields\n ctx._triviaCaptureMask = savedMask\n const { children, rawChildren, triviaLog } = endCstNodeCapture(ctx, saved)\n\n if (!r.ok) return r\n\n // unwrap/collapse: a single captured child IS the value \u2014 skip build.\n const st = clonesState && ctx.state !== undefined ? Object.assign({}, ctx.state as Record<string, unknown>) : undefined\n const nodeType = def.type ?? missingInferredType()\n const cstOutput = cstOutputHost(ctx.build)\n const span = ctx.trackLines ? annotateSpanFromLineContext(r.span, ctx) : r.span\n // A direct builder that never declared `state` still owes the host its snapshot.\n // The clone happens AFTER the body, so unlike trivia it needs no gate up front \u2014\n // build it here, on a branch the eval-AST path never takes. Matches what\n // `hostMode: 'cst'` does in the compiled engine.\n const hostState = clonesState\n ? st\n : ctx.state !== undefined ? Object.assign({}, ctx.state as Record<string, unknown>) : undefined\n const built: unknown = unwrap && children.length === 1\n ? unwrapChild(children[0])\n : collapse && children.length === 1\n ? children[0]\n // Collapse applies wherever the node's VALUE comes from the host: a structural\n // node, or ANY node under a positioned-CST host, where the direct builder is\n // bypassed and the produced thing is a host-owned CST node either way. Gating on\n // `!build` alone made `cstBuildHost({ collapse })` a documented no-op for every\n // grammar whose rules carry reducers \u2014 silently, in both engines.\n : (cstOutput || (!build && project === undefined))\n && ctx.build?._parsemanCstCollapse\n && children.length === 1\n && rawChildren.length === 1\n && ctx.build._parsemanCstCollapse(nodeType, children[0], children, rawChildren)\n ? children[0]\n : project !== undefined\n ? cstOutput && ctx.build\n ? ctx.build(nodeType, children, fields, span, rawChildren, triviaLog, hostState, tags)\n : projectChild(children, project, nodeType)\n : build\n // A direct builder normally owns its result. The positioned-CST host is\n // the one exception: it must never receive an arbitrary AST object as a\n // child of a CST node, so build this grammar node through that host.\n ? cstOutput && ctx.build\n ? ctx.build(nodeType, children, fields, span, rawChildren, triviaLog, hostState, tags)\n : build(children, fields, span, rawChildren, triviaLog, st)\n // Structural node: a `ctx.build` host if present, else a default CST.\n : ctx.build\n ? ctx.build(nodeType, children, fields, span, rawChildren, triviaLog, st, tags)\n : { _tag: 'node', type: nodeType, span: ctx.trackLines ? { ...span } : { start: r.span.start, end: r.span.end }, state: st ?? null, children }\n const rawEntry = isCstChild(built)\n ? built\n // A direct semantic object is opaque to the raw CST, but its source is\n // not. Preserve the exact matched span so legacy/structural parents can\n // retain text and trivia without fabricating an empty token.\n : { _tag: 'leaf', value: typeof built === 'string' ? built : typeof built === 'object' && built !== null ? input.slice(r.span.start, r.span.end) : '', span }\n if (saved.buf !== undefined || saved.ch !== undefined) {\n pushCstChild(ctx, built, rawEntry)\n }\n return { ok: true, value: built as N, span }\n },\n }\n}\n", "import type { Combinator, ParseContext, ParseResult, ParserMeta } from '../types.ts'\nimport { pushCstLeaf, cstCaptureActive } from '../cst/capture-buffer.ts'\n\n/**\n * Treat a parser as one source token.\n *\n * The wrapped parser runs with trivia cleared, so its parts must be contiguous.\n * On success the token returns the matched source text and captures one CST leaf\n * for the full span, suppressing any internal terminal leaves.\n */\nexport function token(root: Combinator<unknown>): Combinator<string> {\n const meta: ParserMeta = {\n firstSet: root._meta.firstSet,\n canMatchNewline: root._meta.canMatchNewline,\n isTrivia: false,\n }\n return {\n _tag: 'token',\n _meta: meta,\n _def: { tag: 'token', parser: root },\n parse(input: string, pos: number, ctx: ParseContext): ParseResult<string> {\n const savedTrivia = ctx.trivia\n const savedKinds = ctx.triviaKindLabels\n const savedBuf = ctx._cstBuf\n const savedChildren = ctx._cstChildren\n const savedLeaves = ctx._cstLeaves\n const savedRaw = ctx._cstRawChildren\n const savedTriviaLog = ctx._cstTriviaLog\n const savedOuterTriviaLog = ctx._triviaLog\n const savedRootTriviaLog = ctx._rootTriviaLog\n const wasCapturing = cstCaptureActive(ctx)\n\n ctx.trivia = undefined\n ctx.triviaKindLabels = undefined\n ctx._cstBuf = undefined\n ctx._cstChildren = undefined\n ctx._cstLeaves = undefined\n ctx._cstRawChildren = undefined\n ctx._cstTriviaLog = undefined\n delete ctx._triviaLog\n delete ctx._rootTriviaLog\n\n let result: ParseResult<unknown>\n try {\n result = root.parse(input, pos, ctx)\n } finally {\n ctx.trivia = savedTrivia\n ctx.triviaKindLabels = savedKinds\n ctx._cstBuf = savedBuf\n ctx._cstChildren = savedChildren\n ctx._cstLeaves = savedLeaves\n ctx._cstRawChildren = savedRaw\n ctx._cstTriviaLog = savedTriviaLog\n if (savedOuterTriviaLog === undefined) delete ctx._triviaLog\n else ctx._triviaLog = savedOuterTriviaLog\n if (savedRootTriviaLog === undefined) delete ctx._rootTriviaLog\n else ctx._rootTriviaLog = savedRootTriviaLog\n }\n\n if (!result.ok) return result\n\n const span = result.span\n const value = input.slice(pos, span.end)\n if (wasCapturing) pushCstLeaf(ctx, { _tag: 'leaf', value, span })\n return { ok: true, value, span }\n },\n }\n}\n\n/**\n * Reduce a structural parser to one semantic leaf.\n *\n * Unlike `token()`, `leaf()` does not change trivia policy: put `noTrivia()` or\n * a scoped `parser({ trivia })` inside the supplied grammar when that region has\n * a local spacing rule. Internal CST captures are suppressed, while selected\n * root-source trivia remains visible, and one leaf with the reducer's value and\n * the complete consumed span is exposed to the parent.\n */\nexport function leaf<T, U>(\n root: Combinator<T>,\n fn: (value: T, span: { start: number; end: number }) => U,\n): Combinator<U> {\n const meta: ParserMeta = {\n firstSet: root._meta.firstSet,\n canMatchNewline: root._meta.canMatchNewline,\n isTrivia: false,\n }\n return {\n _tag: 'leaf',\n _meta: meta,\n _def: { tag: 'leaf', parser: root as Combinator<unknown>, fn: fn as (v: unknown, span: { start: number; end: number }) => unknown },\n parse(input: string, pos: number, ctx: ParseContext): ParseResult<U> {\n const savedBuf = ctx._cstBuf\n const savedChildren = ctx._cstChildren\n const savedLeaves = ctx._cstLeaves\n const savedRaw = ctx._cstRawChildren\n const savedTriviaLog = ctx._cstTriviaLog\n const savedOuterTriviaLog = ctx._triviaLog\n const wasCapturing = cstCaptureActive(ctx)\n ctx._cstBuf = undefined\n ctx._cstChildren = undefined\n ctx._cstLeaves = undefined\n ctx._cstRawChildren = undefined\n ctx._cstTriviaLog = undefined\n delete ctx._triviaLog\n let result: ParseResult<T>\n try { result = root.parse(input, pos, ctx) }\n finally {\n ctx._cstBuf = savedBuf\n ctx._cstChildren = savedChildren\n ctx._cstLeaves = savedLeaves\n ctx._cstRawChildren = savedRaw\n ctx._cstTriviaLog = savedTriviaLog\n if (savedOuterTriviaLog === undefined) delete ctx._triviaLog\n else ctx._triviaLog = savedOuterTriviaLog\n }\n if (!result.ok) return result\n const value = fn(result.value, result.span)\n if (wasCapturing) pushCstLeaf(ctx, { _tag: 'leaf', value, span: result.span })\n return { ok: true, value, span: result.span }\n },\n }\n}\n", "import type { Combinator, ParseContext, ParseResult, ParserMeta } from '../types.ts'\n\n/**\n * Runs `combinator` with `ctx.state` set to `extra` for the duration of the parse.\n * The outer user context is restored on exit (lexical scoping).\n *\n * const functionBody = withCtx({ inFn: true },\n * sequence(literal('{'), many(statement), literal('}'))\n * )\n *\n * Read back with guard() or from within a transform's span argument.\n */\nexport function withCtx<U, T>(extra: U, combinator: Combinator<T>): Combinator<T> {\n const meta: ParserMeta = {\n firstSet: combinator._meta.firstSet,\n canMatchNewline: combinator._meta.canMatchNewline,\n isTrivia: false,\n }\n return {\n _tag: 'withCtx',\n _meta: meta,\n _def: { tag: 'withCtx', extra, parser: combinator as Combinator<unknown> },\n parse(input: string, pos: number, ctx: ParseContext): ParseResult<T> {\n return combinator.parse(input, pos, { ...ctx, state: extra })\n },\n }\n}\n", "/**\n * Serialize a compiled rule map BACK to a compact combinator-construction source\n * expression \u2014 the \"IR\" a composed grammar carries instead of ~1MB of fully\n * lowered `_r_<Name>` function source. At fuse time the expression is evaluated\n * (with the combinator constructors in scope) to reconstruct the rule map, then\n * re-lowered via `compileLinkable` \u2014 identical behaviour, a fraction of the bytes.\n *\n * The output mirrors how a grammar is WRITTEN, not how it lowers:\n * - a rule reference (`g.Foo`, a `lazy` carrying `_ruleName`) \u2192 `g[\"Foo\"]`\n * - a sub-combinator shared by identity (referenced \u22652\u00D7, e.g. a `balanced` const\n * reused across rules) \u2192 a hoisted `const _s<N> = \u2026`, referenced by name, so it\n * stays shared through the round trip (and `compileLinkable` re-hoists it)\n * - a self-referential combinator (`balanced`'s internal `self = ref()`) \u2192 a\n * `ref()` + `.define()` closure, the same shape the library combinator emits\n * - `transform`/`node` callbacks \u2192 their captured source (`fnSrc`/`buildSrc`)\n *\n * Returns null if the map can't be faithfully serialized (a callback without\n * source, or an unsupported construct) \u2014 the caller then keeps the lowered source.\n */\nimport type { Combinator, DispatchMatcherCase, ParserDef } from '../types.ts'\nimport { rules } from '../combinators/parser.ts'\nimport { ref } from '../combinators/ref.ts'\nimport { regex } from '../combinators/regex.ts'\nimport { literal } from '../combinators/literal.ts'\nimport { keywords } from '../combinators/keywords.ts'\nimport { sequence } from '../combinators/sequence.ts'\nimport { choice } from '../combinators/choice.ts'\nimport { dispatch, endsWith, matches, otherwise, routed, startsWith, when } from '../combinators/dispatch.ts'\nimport { attempt } from '../combinators/attempt.ts'\nimport { many, oneOrMore, optional, sepBy } from '../combinators/repeat.ts'\nimport { not } from '../combinators/not.ts'\nimport { peek } from '../combinators/peek.ts'\nimport { node } from '../combinators/node.ts'\nimport { parser } from '../combinators/grammar.ts'\nimport { scanTo } from '../combinators/scanTo.ts'\nimport { token, leaf } from '../combinators/token.ts'\nimport { classifiedTrivia, transform, skip, trivia, label, field } from '../combinators/map.ts'\nimport { analyzeLabeledTrivia } from '../cst/trivia-kinds.ts'\nimport { expect as expectC } from '../combinators/expect.ts'\nimport { withCtx } from '../combinators/withCtx.ts'\n\ntype Comb = Combinator<unknown>\n\n/** Child combinators of a def, in construction order (mirrors codegen's childrenOf). */\nfunction childrenOf(def: ParserDef): Comb[] {\n switch (def.tag) {\n case 'sequence':\n case 'choice': return def.parsers\n case 'dispatch': return [def.selector, ...def.cases.map(entry => entry.parser), ...(def.matchers ? def.matchers.map(entry => entry.parser) : []), ...(def.otherwise ? [def.otherwise] : [])]\n case 'many':\n case 'oneOrMore':\n case 'optional':\n case 'attempt':\n case 'transform':\n case 'trivia':\n case 'token':\n case 'leaf':\n case 'label':\n case 'field':\n case 'not':\n case 'peek':\n case 'node':\n case 'withCtx':\n case 'expect': return [def.parser]\n case 'grammar': return def.triviaParser ? [def.parser, def.triviaParser] : [def.parser]\n case 'sepBy': return [def.parser, def.separator]\n case 'skip': return [def.main, def.skipped]\n case 'scanTo': return [def.sentinel, ...def.skip]\n case 'routed': return def.fallback ? [def.fallback] : []\n case 'lazy':\n case 'literal':\n case 'regex':\n case 'keywords':\n case 'guard':\n case 'recover':\n case 'unknown': return []\n }\n}\n\nconst ruleNameOf = (c: Comb): string | undefined =>\n (c as unknown as { _ruleName?: string })._ruleName\n\n/** Resolve a lazy's target, or null if it isn't defined yet (external ref). */\nfunction lazyTarget(c: Comb): Comb | null {\n if (c._def.tag !== 'lazy') return null\n try { return c._def.thunk() } catch { return null }\n}\n\nclass Unserializable extends Error {}\n\n/** `, { min, max, trailing }` \u2014 omitted entirely when everything is at its default. */\nfunction repeatOpts(min: number, max: number | undefined, trailing?: string): string {\n const parts: string[] = []\n if (min !== 0) parts.push(`min: ${min}`)\n if (max !== undefined) parts.push(`max: ${max}`)\n if (trailing !== undefined) parts.push(`trailing: ${JSON.stringify(trailing)}`)\n return parts.length === 0 ? '' : `, { ${parts.join(', ')} }`\n}\n\nfunction projectOpt(project: Extract<ParserDef, { tag: 'node' }>['project']): string | undefined {\n if (project === undefined) return undefined\n return `project: ${project}`\n}\n\nfunction tagsOpt(tags: Extract<ParserDef, { tag: 'node' }>['tags']): string | undefined {\n if (tags === undefined || tags.length === 0) return undefined\n return `tags: ${JSON.stringify(tags)}`\n}\n\nfunction matcherExpr(entry: DispatchMatcherCase): string {\n switch (entry.kind) {\n case 'startsWith':\n return `startsWith(${JSON.stringify(entry.value)})`\n case 'endsWith':\n return `endsWith(${JSON.stringify(entry.value)})`\n case 'matches':\n return `matches(${new RegExp(entry.value, entry.flags ?? '').toString()})`\n }\n}\n\nexport function serializeRuleMap(\n ruleMap: ReadonlyArray<readonly [string, Comb]>,\n scanSkip?: readonly Comb[] | null,\n): string | null {\n try {\n return new Serializer(ruleMap, scanSkip ?? []).run()\n } catch (e) {\n if (e instanceof Unserializable) {\n if (process.env.PARSEMAN_IR_DEBUG) console.error(`[ir] fallback: ${(e as Error).message}`)\n return null\n }\n throw e\n }\n}\n\n/** Reconstruct a rule map from serialized IR (the inverse of `serializeRuleMap`) \u2014\n * evaluate the combinator-construction expression with every constructor in scope.\n * Used at fuse time (runtime linker + build-time plugin) to re-lower carried IR. */\nexport function evalRuleMapIR(ir: string): Array<[string, Comb]> {\n // `_tf`/`_nd` reconstruct a transform/node AND restore its captured callback\n // source (`_def.fnSrc`/`buildSrc`) so re-lowering inlines it statically. The live\n // fn is only needed for interpreted mode; a self-contained transform source is\n // eval'd, a node build (which may reference imported AST classes) is left to its\n // source only. Macro-only validation metadata is carried as plain data: this\n // runtime module never parses callback source or imports a compiler frontend.\n const _tf = (child: Comb, src: string, recognitionOnly = false): Comb => {\n let fn: (...a: unknown[]) => unknown\n // eslint-disable-next-line no-eval\n try { fn = (0, eval)(`(${src})`) } catch { fn = () => { throw new Error('IR transform fn not materialized') } }\n const t = transform(child as never, fn as never)\n ;(t._def as { fnSrc?: string }).fnSrc = src\n if (recognitionOnly) (t._def as { recognitionOnly?: boolean }).recognitionOnly = true\n return t as Comb\n }\n const _lf = (child: Comb, src: string): Comb => {\n let fn: (...a: unknown[]) => unknown\n // eslint-disable-next-line no-eval\n try { fn = (0, eval)(`(${src})`) } catch { fn = () => { throw new Error('IR leaf fn not materialized') } }\n const l = leaf(child as never, fn as never)\n ;(l._def as { fnSrc?: string }).fnSrc = src\n return l as Comb\n }\n const _nd = (type: string, child: Comb, src: string, opts?: unknown, staticError?: readonly string[], sigSrc?: string): Comb => {\n if (staticError !== undefined && staticError.length > 0) {\n throw new Error(`IR direct node builder for ${type} must be macro-static and self-contained; unsupported binding(s): ${staticError.join(', ')}`)\n }\n // A serialized direct builder needs an inert sentinel as well as buildSrc.\n // `node(..., undefined)` is structural, so re-lowering a composed artifact\n // silently routes it through ctx.build/default CST even though the IR still\n // carries the callback source. The compiler is the only consumer that may\n // materialize `buildSrc`; raw IR interpretation deliberately rejects direct\n // builders rather than evaluating arbitrary captured source at runtime.\n const n = node(type, child as never, (() => { throw new Error('IR node build requires static re-lowering') }) as never, opts as never)\n ;(n._def as { buildSrc?: string; buildStaticError?: readonly string[] }).buildSrc = src\n if (staticError !== undefined) (n._def as { buildStaticError?: readonly string[] }).buildStaticError = staticError\n // Analysis-only resolved reducer signature (see `buildAnalysisSrc`). Without it a\n // re-lowered composed artifact silently re-acquires the fail-open capture cost the\n // authoring module had already resolved away.\n if (sigSrc !== undefined) (n._def as { buildSigSrc?: string }).buildSigSrc = sigSrc\n return n as Comb\n }\n // `_gch` rebuilds a GATED choice AND restores its `_def.gateSrcs` (parallel to the\n // arms) \u2014 the gate mirror of `_tf`/`_nd`. Each item is either a plain arm or a\n // `[gateSource, arm]` tuple: the source is eval'd to the live predicate (interpreted\n // mode) and recorded as the arm's gateSrcs entry so re-lowering INLINES the gate\n // statically (keeping the artifact fusible via `emitFusedSource`). A missing/failed\n // source falls back to a throwing predicate \u2014 the same contract as `_tf`.\n const _gch = (items: Array<Comb | [string, Comb]>): Comb => {\n const gateSrcs: (string | null)[] = []\n const arms = items.map(it => {\n if (Array.isArray(it)) {\n const [src, comb] = it\n gateSrcs.push(src)\n let gate: (s: unknown) => boolean\n // eslint-disable-next-line no-eval\n try { gate = (0, eval)(`(${src})`) } catch { gate = () => { throw new Error('IR gate fn not materialized') } }\n return { gate, combinator: comb }\n }\n gateSrcs.push(null)\n return it\n })\n const c = (choice as (...a: unknown[]) => Comb)(...arms)\n // `choice` is the authority on gate alignment; `gateSrcs` must line up 1:1 with\n // the constructed `_def.gates`. They always do on the normal path (both from the\n // same `items.map`), but assert it so a future change in `choice` that coalesces\n // or drops arms can't silently ship a mis-aligned gate-source array.\n const gates = (c._def as { gates?: unknown[] }).gates\n if (gates && gates.length !== gateSrcs.length) {\n throw new Error(`_gch: gateSrcs length ${gateSrcs.length} != choice gates length ${gates.length}`)\n }\n ;(c._def as { gateSrcs?: (string | null)[] }).gateSrcs = gateSrcs\n return c\n }\n // `_wc` rebuilds a `withCtx` AND restores its `_def.extraSrc` (the source of the\n // `extra`/state value) \u2014 the withCtx mirror of `_tf`/`_nd`/`_gch`. The source is\n // eval'd to the live `extra` value (interpreted mode) and recorded on the def so\n // re-lowering INLINES the state getter statically (`() => (extraSrc)`), keeping the\n // artifact fusible via `emitFusedSource`. A plain `withCtx(value, inner)` would\n // leave `extraSrc` unset \u2192 codegen emits a source-less runtime closure (a non-static\n // callback) \u2192 `emitFusedSource` fails and a downstream `compose()` silently falls\n // back to a runtime fuse. A missing/failed source falls back to `undefined` state \u2014\n // the same best-effort contract as `_tf`.\n const _wc = (src: string, inner: Comb): Comb => {\n let extra: unknown\n // eslint-disable-next-line no-eval\n try { extra = (0, eval)(`(${src})`) } catch { extra = undefined }\n const w = (withCtx as (e: unknown, c: Comb) => Comb)(extra, inner)\n ;(w._def as { extraSrc?: string }).extraSrc = src\n return w\n }\n // eslint-disable-next-line no-new-func\n const fn = new Function(\n 'rules', 'ref', 'regex', 'literal', 'keywords', 'sequence', 'choice', 'dispatch', 'when', 'startsWith', 'endsWith', 'matches', 'otherwise', 'routed', 'attempt',\n 'many', 'oneOrMore', 'optional', 'sepBy', 'not', 'peek', 'node', 'parser',\n 'scanTo', 'token', 'leaf', 'transform', 'skip', 'trivia', 'classifiedTrivia', 'label', 'field', 'expect', '_tf', '_lf', '_nd', '_gch', '_wc',\n `return (${ir})`,\n )\n const map = fn(\n rules, ref, regex, literal, keywords, sequence, choice, dispatch, when, startsWith, endsWith, matches, otherwise, routed, attempt,\n many, oneOrMore, optional, sepBy, not, peek, node, parser,\n scanTo, token, leaf, transform, skip, trivia, classifiedTrivia, label, field, expectC, _tf, _lf, _nd, _gch, _wc,\n ) as Record<string, Comb>\n return Object.entries(map)\n}\n\nclass Serializer {\n private counts = new Map<Comb, number>()\n private selfRef = new Set<Comb>() // combinators reached by an unnamed lazy pointing back into their own subtree\n private constName = new Map<Comb, string>()\n private emitted = new Set<string>()\n private decls: string[] = []\n private ruleValues = new Set<Comb>()\n private localRuleNames = new Map<Comb, string>()\n private ruleMap: ReadonlyArray<readonly [string, Comb]>\n private scanSkip: readonly Comb[]\n\n constructor(ruleMap: ReadonlyArray<readonly [string, Comb]>, scanSkip: readonly Comb[] = []) {\n this.ruleMap = ruleMap\n this.scanSkip = scanSkip\n for (const [name, c] of ruleMap) {\n this.localRuleNames.set(c, name)\n this.ruleValues.add(this.body(c))\n }\n }\n\n /** A grammar-level `scanSkip` unit is an opaque TERMINAL (a string, a balanced\n * bracket) \u2014 it must not reach a grammar-rule ref (`g[name]`), because the\n * serialized `scanSkip` array sits in the `rules({ scanSkip })` OPTIONS position,\n * outside the `(g) => \u2026` factory where `g` is bound. A unit that does reference a\n * rule can't be carried in options; bail to the full-pieces fallback. */\n private assertNoRuleRef(c: Comb, seen: Set<Comb>): void {\n if (seen.has(c)) return\n seen.add(c)\n if (c._def.tag === 'lazy') {\n if (ruleNameOf(c) !== undefined) throw new Unserializable('scanSkip unit references a grammar rule')\n const target = lazyTarget(c)\n if (target) this.assertNoRuleRef(target, seen)\n return\n }\n for (const child of childrenOf(c._def)) this.assertNoRuleRef(child, seen)\n }\n\n /** A `rules()` map wraps each rule value in a named `lazy` proxy; the real body is\n * its target (compileLinkable unwraps the same way). A ref INSIDE a body stays a\n * `g[name]` ref \u2014 only the top-level entry is unwrapped. */\n private body(c: Comb): Comb {\n return c._def.tag === 'lazy' && ruleNameOf(c) !== undefined ? (lazyTarget(c) ?? c) : c\n }\n\n run(): string {\n for (const [, c] of this.ruleMap) this.analyze(this.body(c), new Set())\n for (const c of this.scanSkip) { this.assertNoRuleRef(c, new Set()); this.analyze(c, new Set()) }\n // A shared sub-combinator (count \u2265 2) or a self-ref target gets a const, EXCEPT\n // a top-level rule value (it already lives under its rule name).\n let n = 0\n for (const [c, count] of this.counts) {\n if (this.ruleValues.has(c)) continue\n if (count >= 2 || this.selfRef.has(c)) this.constName.set(c, `_s${n++}`)\n }\n // Two decl scopes. `scanSkip` is emitted FIRST into `outerDecls` (an IIFE that\n // wraps the whole rules() call) because the `{ scanSkip }` options object\n // precedes the `(g) => \u2026` factory and so cannot see consts declared inside it.\n // A scanSkip unit is grammar-rule free (asserted above), so every const it\n // reaches is g-free and safe in the outer scope; the `emitted` guard then keeps\n // each remaining (factory-only, possibly `g[name]`-referencing) const inside the\n // factory. With no scanSkip, `outerDecls` stays empty and the output is\n // byte-identical to the pre-scanSkip form.\n const outerDecls: string[] = []\n const innerDecls: string[] = []\n let optionsArg = ''\n if (this.scanSkip.length > 0) {\n this.decls = outerDecls\n const units = this.scanSkip.map(c => this.ref(c, null))\n optionsArg = `{ scanSkip: [${units.join(', ')}] }, `\n }\n this.decls = innerDecls\n const body = this.ruleMap\n .map(([name, c]) => ` ${JSON.stringify(name)}: ${this.wrap(this.body(c))}`)\n .join(',\\n')\n // Shared consts go INSIDE the factory: they can reference `g[name]` rule refs,\n // and `g` only exists in the factory scope.\n const factory = innerDecls.length === 0\n ? `(g) => ({\\n${body}\\n})`\n : `(g) => {\\n${innerDecls.map(d => ' ' + d).join('\\n')}\\n return ({\\n${body}\\n})\\n}`\n const call = `rules(${optionsArg}${factory})`\n return outerDecls.length === 0\n ? call\n : `(() => {\\n${outerDecls.map(d => ' ' + d).join('\\n')}\\n return ${call}\\n})()`\n }\n\n /** Count identity references and flag self-referential subtrees. `active` is the\n * set of combinators on the current DFS path (to detect a lazy pointing back). */\n private analyze(c: Comb, active: Set<Comb>): void {\n const def = c._def\n if (def.tag === 'lazy') {\n if (ruleNameOf(c) !== undefined) return // named rule ref \u2014 resolved by g[name]\n const target = lazyTarget(c)\n if (!target) throw new Unserializable('unresolved unnamed ref')\n if (active.has(target)) { this.selfRef.add(target); return } // recursion into an ancestor\n this.analyze(target, active) // inline (unnamed, non-recursive) \u2014 rare\n return\n }\n if (def.tag === 'guard' || def.tag === 'recover' || def.tag === 'unknown') {\n throw new Unserializable(`unsupported tag ${def.tag}`)\n }\n this.counts.set(c, (this.counts.get(c) ?? 0) + 1)\n if ((this.counts.get(c) ?? 0) > 1) return // already descended\n active.add(c)\n for (const child of childrenOf(def)) this.analyze(child, active)\n active.delete(c)\n }\n\n /** Reference `c`: a const var if it has one (emitting its decl first), else inline.\n * `selfOf` is the const currently being wrapped in a ref()/define closure \u2014 an\n * unnamed lazy back into it emits the local ref var instead of recursing. */\n private ref(c: Comb, selfOf: { comb: Comb; var: string } | null): string {\n const cn = this.constName.get(c)\n if (cn) { this.emitDecl(c); return cn }\n return this.expr(c, selfOf)\n }\n\n private emitDecl(c: Comb): void {\n const name = this.constName.get(c)!\n if (this.emitted.has(name)) return\n this.emitted.add(name) // mark first (cycle-safe)\n this.decls.push(`const ${name} = ${this.wrap(c)}`)\n }\n\n private selfN = 0\n\n /** Emit `c`'s own constructor call, wrapping it in a `ref()`+`.define()` closure\n * if it is self-referential (an unnamed lazy in its subtree points back to it) \u2014\n * the shape `balanced()` and other recursive library combinators build. */\n private wrap(c: Comb): string {\n if (!this.selfRef.has(c)) return this.expr(c, null)\n const rv = `_rr${this.selfN++}`\n const bodyExpr = this.expr(c, { comb: c, var: rv })\n return `(() => { const ${rv} = ref(); const _b = ${bodyExpr}; ${rv}.define(_b); return _b })()`\n }\n\n /** Emit the constructor-call source for `c` (never a const shortcut for `c` itself). */\n private expr(c: Comb, selfOf: { comb: Comb; var: string } | null): string {\n const def = c._def\n const kid = (x: Comb) => this.ref(x, selfOf)\n switch (def.tag) {\n case 'lazy': {\n const name = this.localRuleNames.get(c) ?? ruleNameOf(c)\n if (name !== undefined) return `g[${JSON.stringify(name)}]`\n const target = lazyTarget(c)!\n if (selfOf && target === selfOf.comb) return selfOf.var\n return this.ref(target, selfOf)\n }\n case 'literal':\n return `literal(${JSON.stringify(def.value)}${def.caseInsensitive ? ', { caseInsensitive: true }' : ''})`\n case 'regex':\n return `regex(${JSON.stringify(def.source)}, ${JSON.stringify(def.flags)})`\n case 'keywords':\n return `keywords(${JSON.stringify(def.words)}, { caseInsensitive: ${def.caseInsensitive}${def.boundary !== undefined ? `, boundary: ${JSON.stringify(def.boundary)}` : ''} })`\n case 'sequence':\n return `sequence(${def.parsers.map(kid).join(', ')})`\n case 'choice': {\n // Ungated choices stay `choice(a, b, \u2026)` byte-for-byte as before.\n const gates = def.gates\n if (gates.every(g => g === null)) return `choice(${def.parsers.map(kid).join(', ')})`\n // A gated choice round-trips through `_gch`, which rebuilds the choice AND\n // re-attaches `_def.gateSrcs` from each arm's captured gate SOURCE. Preserving\n // gateSrcs is load-bearing: on re-lowering, codegen inlines the gate from its\n // source (a static callback), so the re-lowered artifact stays STATICALLY\n // FUSIBLE. A plain `choice({ gate: fn, \u2026 })` would rebuild the predicate as a\n // source-less runtime closure \u2192 a non-static callback \u2192 `emitFusedSource`\n // (macro static fusion) fails and `compose()` silently falls back to a runtime\n // fuse. Without a captured source we cannot re-emit the gate \u2192 keep full pieces.\n const gateSrcs = def.gateSrcs\n const items = def.parsers.map((p, i) => {\n if (gates[i] === null) return kid(p)\n const src = gateSrcs?.[i]\n if (src == null) throw new Unserializable('choice gate() has no captured source')\n // `[gateSource, arm]` \u2014 `_gch` evals the source to the live predicate and\n // records it as the arm's `gateSrcs` entry.\n return `[${JSON.stringify(src)}, ${kid(p)}]`\n })\n return `_gch([${items.join(', ')}])`\n }\n case 'dispatch': {\n const arms = def.cases.map(entry =>\n `when(${entry.keys.length === 1 ? JSON.stringify(entry.keys[0]) : JSON.stringify(entry.keys)}, ${kid(entry.parser)}${entry.caseInsensitive ? ', { caseInsensitive: true }' : ''})`\n )\n if (def.matchers) {\n for (const entry of def.matchers) {\n arms.push(`when(${matcherExpr(entry)}, ${kid(entry.parser)}${entry.caseInsensitive ? ', { caseInsensitive: true }' : ''})`)\n }\n }\n if (def.otherwise) arms.push(`otherwise(${kid(def.otherwise)})`)\n return `dispatch(${kid(def.selector)}${arms.length === 0 ? '' : `, ${arms.join(', ')}`})`\n }\n case 'many': return `many(${kid(def.parser)}${repeatOpts(def.min, def.max)})`\n // A `oneOrMore` def with min > 1 came from `many(x, { min: n })`; round-trip\n // it through `many` so the bounds survive (oneOrMore defaults min to 1).\n case 'oneOrMore': return def.min === 1 && def.max === undefined\n ? `oneOrMore(${kid(def.parser)})`\n : `many(${kid(def.parser)}${repeatOpts(def.min, def.max)})`\n case 'optional': return `optional(${kid(def.parser)})`\n case 'attempt': return `attempt(${kid(def.parser)})`\n case 'sepBy': return `sepBy(${kid(def.parser)}, ${kid(def.separator)}${repeatOpts(def.min, def.max, def.trailing)})`\n case 'not': return `not(${kid(def.parser)})`\n case 'peek': return `peek(${kid(def.parser)})`\n case 'routed': return def.fallback === undefined ? 'routed()' : `routed(${kid(def.fallback)})`\n case 'trivia': return `trivia(${kid(def.parser)})`\n case 'token': return `token(${kid(def.parser)})`\n case 'leaf': {\n if (def.fnSrc === undefined) throw new Unserializable('leaf without fnSrc')\n return `_lf(${kid(def.parser)}, ${JSON.stringify(def.fnSrc)})`\n }\n case 'label': return `label(${JSON.stringify(def.label)}, ${kid(def.parser)})`\n case 'field': return `field(${JSON.stringify(def.name)}, ${kid(def.parser)})`\n case 'expect': return `expect(${kid(def.parser)}${def.label !== undefined ? `, ${JSON.stringify(def.label)}` : ''})`\n case 'skip': return `skip(${kid(def.main)}, ${kid(def.skipped)})`\n case 'scanTo':\n return `scanTo(${kid(def.sentinel)}, { skip: [${def.skip.map(kid).join(', ')}]${def.raw ? ', raw: true' : ''}, orEOF: ${def.orEOF} })`\n case 'transform': {\n if (def.fnSrc === undefined) throw new Unserializable('transform without fnSrc')\n // `_tf` sets `_def.fnSrc` so re-lowering INLINES the callback (a plain\n // `transform(child, fn)` would leave fnSrc unset \u2192 a non-static runtime\n // callback that emitFusedSource can't inline).\n return `_tf(${kid(def.parser)}, ${JSON.stringify(def.fnSrc)}${def.recognitionOnly ? ', true' : ''})`\n }\n case 'node': {\n if (def.build !== undefined && def.buildSrc === undefined) throw new Unserializable('node build without buildSrc')\n const projectEntry = projectOpt(def.project)\n const tagEntry = tagsOpt(def.tags)\n const optEntries = [\n ...(def.unwrap ? ['unwrap: true'] : []),\n ...(def.collapse ? ['collapse: true'] : []),\n ...(projectEntry === undefined ? [] : [projectEntry]),\n ...(def.captureTrivia ? ['captureTrivia: true'] : []),\n ...(def.trailingTrivia ? ['trailingTrivia: true'] : []),\n // Declared or resolved arity. Carried so a re-lowered composed artifact does\n // not silently re-acquire the fail-open capture cost this module resolved away.\n ...(def.buildArity === undefined ? [] : [`buildArity: ${def.buildArity}`]),\n ...(tagEntry === undefined ? [] : [tagEntry]),\n ]\n const opts = optEntries.length > 0 ? `, { ${optEntries.join(', ')} }` : ''\n // `_nd` sets `_def.buildSrc` (same reason as `_tf`). No build \u2192 plain node.\n if (def.type === undefined) {\n if (def.buildSrc !== undefined) throw new Unserializable('inferred node build without inferred type')\n return opts ? `node(${kid(def.parser)}, undefined${opts})` : `node(${kid(def.parser)})`\n }\n if (def.buildSrc !== undefined) {\n // Trailing optionals, emitted only when present so an artifact that carries\n // neither is byte-identical to what previous versions produced.\n const tail: string[] = []\n if (def.buildStaticError !== undefined || def.buildSigSrc !== undefined) {\n if (!opts) tail.push('undefined')\n tail.push(def.buildStaticError === undefined ? 'undefined' : JSON.stringify(def.buildStaticError))\n }\n if (def.buildSigSrc !== undefined) tail.push(JSON.stringify(def.buildSigSrc))\n const trailing = tail.length > 0 ? `, ${tail.join(', ')}` : ''\n return `_nd(${JSON.stringify(def.type)}, ${kid(def.parser)}, ${JSON.stringify(def.buildSrc)}${opts}${trailing})`\n }\n return opts ? `node(${JSON.stringify(def.type)}, ${kid(def.parser)}, undefined${opts})` : `node(${JSON.stringify(def.type)}, ${kid(def.parser)})`\n }\n case 'grammar': {\n const classified = def.triviaParser?._meta.rootTriviaClassified === true\n const spec = classified && def.triviaParser ? analyzeLabeledTrivia(def.triviaParser) : null\n if (classified && !spec) throw new Unserializable('classified trivia without labeled arms')\n const trivia = def.clearTrivia\n ? 'null'\n : spec\n ? `classifiedTrivia({ ${spec.arms.map(arm => `${JSON.stringify(arm.label)}: ${kid(arm.parser)}`).join(', ')} })`\n : def.triviaParser ? kid(def.triviaParser) : 'undefined'\n return `parser({ trivia: ${trivia}${def.captureTrivia ? ', captureTrivia: true' : ''}${def.rootCapture ? `, rootCapture: ${JSON.stringify(def.rootCapture)}` : ''}${def.trackLines ? ', trackLines: true' : ''} }, ${kid(def.parser)})`\n }\n case 'withCtx': {\n // A `withCtx` round-trips through `_wc`, which rebuilds it AND re-attaches\n // `_def.extraSrc` from the captured `extra` SOURCE. Preserving extraSrc is\n // load-bearing for the same reason as `_tf`/`_gch`: on re-lowering, codegen\n // inlines the state getter from source (a static callback), so the re-lowered\n // artifact stays STATICALLY FUSIBLE. Without a captured source we cannot\n // re-emit the state statically \u2192 keep full pieces (interpreter fallback).\n if (def.extraSrc === undefined) throw new Unserializable('withCtx without extraSrc')\n return `_wc(${JSON.stringify(def.extraSrc)}, ${kid(def.parser)})`\n }\n case 'guard':\n case 'recover':\n case 'unknown':\n throw new Unserializable(`unsupported tag ${def.tag}`)\n }\n }\n}\n", "/**\n * The linker (RULE_ABI_PLAN \u00A74): fuse independently-compiled linkable artifacts\n * (`compileLinkable`) into ONE closure of parse functions.\n *\n * Every rule is a canonical `_r_<Name>` function and every sibling reference is a\n * call to that name; because fusion drops them all into one scope, those calls\n * are **direct local calls** (0% dispatch). Composition is by name:\n * - **override** \u2014 later artifact wins per rule name; because references resolve\n * by name in the shared scope, overriding a rule reroutes EVERY call to it,\n * including calls inside a base artifact's own rules (open recursion).\n * - **\u00E0 la carte** \u2014 `pick(artifact, names)` keeps only those rules + their\n * transitive dependency closure.\n * Private per-artifact state (`_ns_re`, `_ns_pf`, \u2026) is namespaced so it can't\n * collide; the sentinel protocol / `_EMPTY_TL` are shared and\n * emitted once.\n *\n * Uses `new Function` (like `compile()`), so it needs `'unsafe-eval'` under a\n * strict CSP; a build-time variant that emits fused source instead is a later\n * addition. Fusion runs ONCE at parser construction \u2014 parsing is then full speed.\n */\nimport { compileLinkable, firstSetCond, ruleDependencies, HOST_READS_DECL, RAW_ENTRY_DECL } from './codegen.ts'\nimport { FUSED_HOST_MODE, FUSED_HOST_ELIDED } from '../cst/host-mode.ts'\nimport { evalRuleMapIR, serializeRuleMap } from './ir-serialize.ts'\nimport type { LinkablePieces, FirstSetRecipe, HostMode } from './codegen.ts'\nimport { union } from '../combinators/first-set.ts'\nimport { PARSEMAN_VERSION } from '../version.ts'\nimport type { BuildHost, Combinator, CstCollapsePredicate, FirstSet, ParseContext, ParseResult } from '../types.ts'\nimport { grammarReflectionSource, mergeGrammarReflections } from '../cst/reflection.ts'\nimport type { ModuleHoist } from './module-hoist.ts'\n\n/**\n * Compile a `rules()` map to a **linkable artifact** \u2014 the composable, shippable\n * form (RULE_ABI_PLAN \u00A74). A package exports `linkable(rules(g => \u2026))`; consumers\n * import that artifact and `fuse([...])` it \u2014 **no source of the base grammar is\n * ever read**. Under the macro this is precompiled to static pieces; in the\n * interpreter it compiles here at load (like `compile()`).\n *\n * `ns` is a per-artifact namespace; omit it to auto-assign a process-unique one\n * (fine at runtime \u2014 the macro supplies a stable module-derived ns instead).\n */\nlet _nsCounter = 0\nexport function linkable(\n rulesMap: Record<string, Combinator<unknown>>,\n ns?: string,\n trivia?: Combinator<unknown>,\n // Compile-time host mode, same meaning as `compile(g, { hostMode })`: 'ast' (default)\n // emits the grammar's own builders and NO positioned-CST branch; 'cst' builds every\n // node through the host. A linked/fused artifact is version- and mode-locked, so a\n // language service links its own 'cst' artifact rather than switching at parse time.\n hostMode?: HostMode,\n): LinkablePieces {\n const pieces = compileLinkable(\n Object.entries(rulesMap),\n ns ?? `_lk${_nsCounter++}_`,\n { ...(trivia ? { trivia } : {}), ...(hostMode ? { hostMode } : {}) },\n )\n if (!pieces) throw new Error('linkable(): this grammar cannot be compiled to a linkable artifact (contains a runtime-only parser fallback)')\n return pieces\n}\n\nexport type CstBuildHostOptions = {\n /**\n * Collapse transparent one-child CST wrapper nodes at build time.\n * - `true`: collapse any one-child node whose rawChildren also has exactly one\n * entry, so trivia/error boundaries are not silently dropped.\n * - `string[]`: collapse only these grammar node types.\n * - predicate: final policy hook for language-specific public CSTs.\n */\n collapse?: boolean | readonly string[] | CstCollapsePredicate\n /**\n * Materialize `node(..., { tags })` grammar metadata onto produced CST nodes.\n * When omitted, tags stay in grammar reflection for zero per-node tree cost.\n */\n tags?: boolean\n}\n\nfunction normalizeCstCollapse(collapse: CstBuildHostOptions['collapse']): CstCollapsePredicate | undefined {\n if (collapse === true) return () => true\n if (Array.isArray(collapse)) {\n const types = new Set(collapse)\n return type => types.has(type)\n }\n return typeof collapse === 'function' ? collapse : undefined\n}\n\nfunction buildCstNode(\n type: string,\n children: ReadonlyArray<unknown>,\n _fields: unknown,\n span: { start: number; end: number },\n _rawChildren?: ReadonlyArray<unknown>,\n _triviaLog?: readonly number[],\n state?: unknown,\n tags?: readonly string[] | undefined,\n): unknown {\n // Carry the grammar's `ctx.state` snapshot onto the node (null when unset) \u2014 the\n // CST contract includes `state` and incremental re-parse replays it on edit.\n return tags !== undefined && tags.length > 0\n ? { _tag: 'node', type, tags, span: { ...span }, state: state ?? null, children: [...children] }\n : { _tag: 'node', type, span: { ...span }, state: state ?? null, children: [...children] }\n}\n\n/**\n * A generic positioned-CST build host (RULE_ABI_PLAN \u00A77). Pass as `ctx.build`\n * (or `parseDoc(..., { build: cstBuildHost })`) to make ANY linkable/fused\n * grammar produce a uniform CST \u2014 `{ _tag:'node', type, span, state, children }`\n * \u2014 instead of its own eval-AST builders. This is the host the linter and IDE\n * drivers use; the eval driver leaves `ctx.build` unset (grammar's own builders).\n *\n * For public syntax trees, call `cstBuildHost({ collapse })`: Parseman will skip\n * allocating wrapper CST nodes whose single child should stand in for the rule.\n */\nexport function cstBuildHost(options?: CstBuildHostOptions): BuildHost\nexport function cstBuildHost(\n type: string,\n children: ReadonlyArray<unknown>,\n fields: unknown,\n span: { start: number; end: number },\n rawChildren?: ReadonlyArray<unknown>,\n triviaLog?: readonly number[],\n state?: unknown,\n tags?: readonly string[] | undefined,\n): unknown\nexport function cstBuildHost(\n typeOrOptions?: string | CstBuildHostOptions,\n children?: ReadonlyArray<unknown>,\n _fields?: unknown,\n span?: { start: number; end: number },\n rawChildren?: ReadonlyArray<unknown>,\n triviaLog?: readonly number[],\n state?: unknown,\n _tags?: readonly string[] | undefined,\n): unknown {\n if (typeof typeOrOptions === 'string') {\n return buildCstNode(typeOrOptions, children ?? [], _fields, span ?? { start: 0, end: 0 }, rawChildren, triviaLog, state)\n }\n const collapse = normalizeCstCollapse(typeOrOptions?.collapse)\n const materializeTags = typeOrOptions?.tags === true\n const host: BuildHost = (\n type: string,\n children: ReadonlyArray<unknown> | undefined,\n fields: unknown,\n span: { start: number; end: number },\n rawChildren: ReadonlyArray<unknown>,\n triviaLog: readonly number[],\n state: unknown,\n tags?: readonly string[] | undefined,\n // A CST/collapse host always keeps `children` (chV) \u2014 the opt-out never\n // applies \u2014 so `?? []` is unreachable defensive modeling for the widened type.\n ) => buildCstNode(type, children ?? [], fields, span, rawChildren, triviaLog, state, materializeTags ? tags : undefined)\n ;(host as typeof host & { _parsemanCstOutput?: true })._parsemanCstOutput = true\n if (collapse) host._parsemanCstCollapse = collapse\n return host\n}\n\n// `cstBuildHost` itself is also accepted as a BuildHost (without options).\n;(cstBuildHost as unknown as { _parsemanCstOutput?: true })._parsemanCstOutput = true\n\n/**\n * A fused function receives the full ParseContext through `run()`. Direct\n * callers historically supplied a plain context object, so keep that usage\n * valid while making the function assignable to the public `Runnable` type.\n * Generated code treats optional framework fields as absent when they are not\n * provided, matching the interpreter's normal defaults.\n */\nexport type FusedRule = (\n input: string,\n pos: number,\n ctx: ParseContext | Record<string, unknown>,\n) => ParseResult<unknown> & { readonly value?: unknown }\n\n/**\n * Restrict a grammar/artifact to `names` plus their transitive rule-dependency\n * closure (\u00E0 la carte selection) \u2014 e.g. Jess taking parts of Less and parts of\n * Sass: `compose([pick(less, ['MixinCall']), pick(sass, ['EachFor']), css])`. A\n * picked rule pulls in every rule name it references, so the result is always\n * self-consistent within the artifact. Accepts a grammar (`rules()` result) or a\n * compiled artifact; returns an artifact for `compose()`.\n */\nexport function pick(\n grammar: LinkablePieces | Record<string, Combinator<unknown>>,\n names: string[],\n): LinkablePieces {\n // A COMPOSED grammar (`compose([...])` result): it has no single rule map \u2014 its rules\n // live across several carried pieces. Materialize them under the composing trivia it\n // was built with (so the selection keeps composing-wins trivia), then filter across\n // pieces to `names` + their transitive dep closure, keeping each rule in the piece\n // that WINS it (compose override order = last wins). Return a composed-like value so a\n // downstream `compose([pick(composed, \u2026)])` flattens it the same way.\n const carried = (grammar as Record<symbol, unknown>)[COMPOSED_PIECES]\n if (Array.isArray(carried)) {\n const trivia = (grammar as Record<symbol, unknown>)[COMPOSED_TRIVIA] as Combinator<unknown> | undefined\n const pieces = (carried as Array<LinkablePieces | IRPiece>).map(pc => materializePiece(pc, trivia))\n const filtered = pickPieces(pieces, names)\n // A composed-like value (carries COMPOSED_PIECES, no single rule map). It is only\n // ever consumed through compose()'s COMPOSED_PIECES branch \u2014 which is checked before\n // any LinkablePieces field \u2014 so this masquerades as LinkablePieces for the signature.\n const out: Record<string, unknown> = {}\n Object.defineProperty(out, COMPOSED_PIECES, { value: filtered, enumerable: false })\n if (trivia) Object.defineProperty(out, COMPOSED_TRIVIA, { value: trivia, enumerable: false })\n return out as unknown as LinkablePieces\n }\n\n const p = (grammar as LinkablePieces).ruleFns instanceof Map\n ? (grammar as LinkablePieces)\n : linkable(grammar as Record<string, Combinator<unknown>>)\n return pickPieces([p], names)[0] ?? { ...p, keys: [], ruleFns: new Map(), wrappers: new Map(), deps: new Map() }\n}\n\n/** Restrict a set of linkable pieces to `names` + their transitive dep closure,\n * keeping each surviving rule in the piece that WINS it (later piece wins, matching\n * compose override order). Shared by `pick()` (runtime) and the macro's build-time\n * `pick(...)` handling, so \u00E0-la-carte selection is identical on both paths. */\nexport function pickPieces(pieces: LinkablePieces[], names: string[]): LinkablePieces[] {\n const winner = new Map<string, LinkablePieces>()\n for (const pc of pieces) for (const k of pc.keys) winner.set(k, pc)\n // A requested name that isn't in the grammar is a typo \u2014 fail here, not later with a\n // confusing name-closure error at compose() time.\n for (const n of names) {\n if (!winner.has(n)) throw new Error(`pick: rule \"${n}\" is not in this grammar (available: ${[...winner.keys()].join(', ')})`)\n }\n const keep = new Set<string>()\n const visit = (n: string): void => {\n // A missing winner is an EXTERNAL dep (a base-grammar rule) \u2014 it resolves at\n // compose() time, not here. Top-level `names` were already validated above.\n const w = winner.get(n)\n if (keep.has(n) || !w) return\n keep.add(n)\n for (const d of w.deps.get(n) ?? []) visit(d)\n }\n for (const n of names) visit(n)\n const filt = <V>(m: Map<string, V>, pc: LinkablePieces): Map<string, V> =>\n new Map([...m].filter(([k]) => keep.has(k) && winner.get(k) === pc))\n return pieces\n .map(pc => ({ ...pc, keys: pc.keys.filter(k => keep.has(k) && winner.get(k) === pc), ruleFns: filt(pc.ruleFns, pc), wrappers: filt(pc.wrappers, pc), deps: filt(pc.deps, pc), nodeMeta: filt(pc.nodeMeta, pc) }))\n .filter(pc => pc.keys.length > 0)\n}\n\n/**\n * Build the fused-closure body (shared by the runtime `fuseRules` and the\n * build-time `emitFusedSource`). Returns the closure body (which reads `_env`\n * for any non-inlined callbacks) and the `_env` to bind. In macro mode callbacks\n * are inlined from source, so `_env` is empty and the body is fully static.\n */\nexport function fusedBody(pieces: LinkablePieces[], hoist?: ModuleHoist): { body: string; env: Record<string, unknown> } {\n // ARTIFACT VERSION LOCK (see src/version.ts): a compiled artifact is fused by the\n // SAME parseman version that produced it \u2014 the artifact format carries no\n // cross-version back-compat. Reject BOTH a version MISMATCH and an UNSTAMPED piece\n // (a pre-0.32 artifact predates the invariant \u2192 its recipe/pieces shape is\n // unsupported): fail LOUDLY rather than silently mis-reading a stale shape. Every\n // artifact `compileLinkable` produces is stamped, so an absent stamp means a stale\n // serialized artifact, not a current one.\n for (const p of pieces) {\n if (p.v === undefined) {\n throw new Error(\n `parseman: artifact \"${p.ns}\" is UNSTAMPED (compiled before the version-lock invariant). ` +\n `Recompile the grammar with parseman ${PARSEMAN_VERSION}; parseman does not fuse unversioned or cross-version artifacts.`,\n )\n }\n if (p.v !== PARSEMAN_VERSION) {\n throw new Error(\n `parseman: artifact \"${p.ns}\" was compiled with parseman ${p.v}, but is being fused with parseman ${PARSEMAN_VERSION}. ` +\n `Compiled grammar artifacts are version-locked \u2014 recompile the grammar with parseman ${PARSEMAN_VERSION}; parseman does not fuse across versions.`,\n )\n }\n }\n // Winner per rule name \u2014 later pieces override earlier ones.\n const winner = new Map<string, LinkablePieces>()\n for (const p of pieces) for (const k of p.keys) winner.set(k, p)\n\n // Name-closure check: every referenced rule must resolve in the fused set.\n for (const [k, p] of winner) {\n for (const d of p.deps.get(k) ?? []) {\n if (!winner.has(d)) throw new Error(`compose: rule \"${k}\" references missing rule \"${d}\"`)\n }\n }\n\n const contributing = new Set(winner.values())\n const contributingPieces = [...contributing]\n const needsEmptyTl = contributingPieces.some(p => p.needsEmptyTl)\n const needsHostReads = contributingPieces.some(p => p.needsHostReads)\n const needsRawEntry = contributingPieces.some(p => p.needsRawEntry)\n\n const lines: string[] = [\n // Shared sentinel protocol (must match NAMED_FN_FAIL / NAMED_FN_END in codegen).\n 'const _pfFail = {}',\n 'let _pfEnd',\n ...(needsEmptyTl ? ['const _EMPTY_TL = Object.freeze([])'] : []),\n ...(needsHostReads ? [HOST_READS_DECL] : []),\n ...(needsRawEntry ? [RAW_ENTRY_DECL] : []),\n // Each contributing artifact's namespaced private prelude (regexes, _pf, \u2026).\n ...new Set(contributingPieces.flatMap(p => p.prelude)),\n // The winning `_r_<Name>` function for each rule (one per name \u2192 no redeclare).\n ...[...winner].map(([k, p]) => p.ruleFns.get(k)!),\n ]\n const wrapperEntries = [...winner].map(([k, p]) => `${JSON.stringify(k)}: ${p.wrappers.get(k)!}`)\n const reflection = mergeGrammarReflections([...winner].map(([k, p]) => p.nodeMeta.get(k) ?? { nodes: [] }))\n // The host-mode stamp is emitted INTO the body rather than applied afterwards by the\n // caller, so the runtime fuse (`fuseRules`) and the build-time fuse\n // (`emitFusedSource`) cannot disagree about it. They have drifted on exactly this\n // kind of change before, and an unstamped macro artifact is invisible to\n // `assertHostModeCompatible` \u2014 it reads `elided: false` and passes, which is the\n // silent wrong output the whole mechanism exists to prevent.\n const { mode, elided } = hostModeOfPieces(pieces)\n const tailSrc = [\n 'const _map = {',\n wrapperEntries.join(',\\n'),\n '}',\n `Object.defineProperty(_map, Symbol.for(${JSON.stringify(FUSED_HOST_MODE.description!)}), { value: ${JSON.stringify(mode)}, enumerable: false })`,\n `Object.defineProperty(_map, Symbol.for(${JSON.stringify(FUSED_HOST_ELIDED.description!)}), { value: ${JSON.stringify(elided)}, enumerable: false })`,\n `Object.defineProperty(_map, Symbol.for('parseman.grammarReflection'), { value: ${grammarReflectionSource(reflection)}, enumerable: false })`,\n // \u2026and on each rule FUNCTION, because `run(map.Rule, \u2026)` is handed the rule, not the\n // map, and would otherwise have nothing to check against. Done once at fuse time,\n // before any rule has been called, so it costs nothing per parse.\n 'for (const _k of Object.keys(_map)) {',\n ` Object.defineProperty(_map[_k], Symbol.for(${JSON.stringify(FUSED_HOST_MODE.description!)}), { value: ${JSON.stringify(mode)}, enumerable: false })`,\n ` Object.defineProperty(_map[_k], Symbol.for(${JSON.stringify(FUSED_HOST_ELIDED.description!)}), { value: ${JSON.stringify(elided)}, enumerable: false })`,\n '}',\n 'return _map',\n ].join('\\n')\n const rawBody = [...lines, tailSrc].join('\\n')\n\n // Fuse-time first-set dispatch: a rule-ref choice arm was emitted (in linkable\n // mode) as `/*@FS:rule:codevar@*\u200B/true`. Resolve it now against the WINNING rule's\n // LEADING first-set recipe \u2014 sound under override, since we use the final rule, not\n // the one visible when the referencing rule was compiled. Each rule's recipe is a\n // union of ordered leading-term chains; resolving them over the WINNING rules to a\n // fixpoint makes a `sequence(ref, \u2026)`-led arm/node dispatch on the ref's real first\n // char (parity with a monolithic compile) instead of degrading to always-try\n // because the ref baked `any`. A genuinely unknown ref \u2192 `any` (always try).\n const ANY: FirstSet = { kind: 'any' }\n const EMPTY: FirstSet = { kind: 'empty' }\n const recipes = new Map<string, FirstSetRecipe>()\n const shallow = new Map<string, FirstSet>()\n const nullable = new Map<string, boolean>()\n for (const [k, p] of winner) {\n const r = p.firstSetRecipes?.get(k); if (r) recipes.set(k, r)\n const fs = p.firstSets?.get(k); if (fs) shallow.set(k, fs)\n const nu = p.nullable?.get(k); if (nu !== undefined) nullable.set(k, nu)\n }\n const knownRef = (ref: string): boolean => recipes.has(ref) || shallow.has(ref)\n // A referenced rule's resolved first-set (or `any` for a genuinely unknown ref \u2014\n // always try). A ref whose nullability is unknown defaults to nullable (keep\n // unioning the chain tail \u2014 never drops a valid first char).\n const refFS = (ref: string): FirstSet => (knownRef(ref) ? (finalFS.get(ref) ?? ANY) : ANY)\n const refNullable = (ref: string): boolean => (knownRef(ref) ? (nullable.get(ref) ?? true) : true)\n // Resolve a recipe: union each ordered chain, and within a chain union each\n // segment's first-set left-to-right STOPPING after the first non-nullable segment\n // (its tail can't start the rule). A ref segment is skippable if it was forced so\n // at build (a wrapping optional/many \u2192 `seg.nullable`) OR the resolved rule is\n // itself nullable; only a definitely-consuming ref stops the chain.\n const resolveRecipe = (r: FirstSetRecipe): FirstSet => {\n let out: FirstSet = EMPTY\n for (const chain of r.alts) {\n for (const seg of chain) {\n out = union(out, seg.ref !== undefined ? refFS(seg.ref) : seg.set)\n const skippable = seg.ref !== undefined ? (seg.nullable || refNullable(seg.ref)) : seg.nullable\n if (!skippable) break\n }\n }\n return out\n }\n // Least-fixpoint: recipe-bearing rules start EMPTY and grow monotonically via\n // `resolveRecipe` (union of refs is monotone; the chain stop is static), so a\n // recursive rule converges to its tightest sound first-set. Rules with no recipe\n // keep their static shallow set.\n const finalFS = new Map<string, FirstSet>()\n for (const [k] of winner) finalFS.set(k, recipes.has(k) ? EMPTY : (shallow.get(k) ?? ANY))\n for (let iter = 0; iter <= recipes.size; iter++) {\n let changed = false\n for (const [k, r] of recipes) {\n const fs = resolveRecipe(r)\n if (JSON.stringify(finalFS.get(k)) !== JSON.stringify(fs)) { finalFS.set(k, fs); changed = true }\n }\n if (!changed) break\n }\n const resolveFS = (src: string): string => src.replace(\n // Rule name + code-point var are both JS identifiers (rule names are validated\n // at compile time \u2014 see assertRuleName in codegen), so an identifier class\n // matches every well-formed placeholder.\n /\\/\\*@FS:([A-Za-z0-9_$]+):([A-Za-z0-9_$]+)@\\*\\/true/g,\n (_m, name: string, codevar: string) => {\n const fs = finalFS.get(name)\n if (!fs || fs.kind === 'any' || fs.kind === 'empty') return 'true'\n return `(${firstSetCond(codevar, fs)})`\n },\n )\n // Placeholders never span a line, so resolving the declarations one at a time is\n // identical to resolving the joined body \u2014 and it has to happen BEFORE the hoist\n // claims them, or two variants whose dispatch conditions resolve the same way\n // would still be compared as different text.\n const body = hoist === undefined\n ? resolveFS(rawBody)\n : [...hoist.claim(lines.map(resolveFS)), resolveFS(tailSrc)].join('\\n')\n\n // Non-inlined callbacks (runtime compile() mode), keyed `<ns>mf` / `<ns>build`.\n const env: Record<string, unknown> = {}\n for (const p of contributingPieces) {\n if (p.mfFns.length) env[`${p.ns}mf`] = p.mfFns\n if (p.buildFns.length) env[`${p.ns}build`] = p.buildFns\n }\n return { body, env }\n}\n\n/**\n * The host mode a fusion of these pieces lowers to, and whether any of them dropped a\n * direct builder's positioned-CST branch. Shared by BOTH fuses via `fusedBody`, so the\n * runtime and build-time engines cannot label the same artifact differently.\n *\n * A MIXED fusion is the one way the per-parse host check could be defeated. Carried IR\n * re-lowers under this compose's mode, but a piece that arrived ALREADY COMPILED\n * (`linkable()` / `pick()` / a macro artifact) keeps the mode it was built with \u2014 so a\n * 'cst' fusion can contain an 'ast' piece whose direct builders dropped their host\n * branch. The map would be labeled 'cst', `assertHostModeCompatible` would pass, and\n * that piece would hand AST-shaped objects into a positioned CST: precisely the silent\n * wrong output this whole mechanism exists to prevent. Reject it here, where both facts\n * are still in hand.\n */\nfunction hostModeOfPieces(pieces: LinkablePieces[]): { mode: HostMode; elided: boolean } {\n const mode = pieces.find(p => p.hostMode !== undefined && p.hostMode !== 'ast')?.hostMode ?? 'ast'\n const elided = pieces.filter(p => p.hostBranchElided === true)\n if (mode === 'cst' && elided.length > 0) {\n throw new Error(\n `compose: cannot build a positioned-CST artifact from pieces that were `\n + `compiled for host mode \"ast\" \u2014 ${elided.map(p => `\"${p.ns}\"`).join(', ')} `\n + `${elided.length === 1 ? 'dropped its' : 'dropped their'} direct builders' CST branch, `\n + `so ${elided.length === 1 ? 'it' : 'they'} would return AST objects inside the CST. `\n + `An already-compiled piece keeps the mode it was built with; only pieces carried as `\n + `IR are re-lowered by this compose. Re-compile ${elided.length === 1 ? 'it' : 'them'} `\n + `with hostMode: 'cst', or pass the source grammar so it can be re-lowered.`,\n )\n }\n return { mode, elided: elided.length > 0 }\n}\n\n/** Fuse at RUNTIME (via `new Function`) \u2014 used by `compose()` when not compiled\n * by the macro (like `compile()`). The macro path uses `emitFusedSource` instead.\n * Both stamp the host mode from inside `fusedBody`; see `hostModeOfPieces`. */\nexport function fuseRules(pieces: LinkablePieces[]): Record<string, FusedRule> {\n const { body, env } = fusedBody(pieces)\n // eslint-disable-next-line no-new-func\n return new Function('_env', body)(env) as Record<string, FusedRule>\n}\n\nexport { FUSED_HOST_MODE, FUSED_HOST_ELIDED } from '../cst/host-mode.ts'\n\n/** The host mode a fused/composed rule map was built for. Defaults to 'ast'. */\nexport function fusedHostModeOf(registry: object): HostMode {\n const m = (registry as Record<symbol, unknown>)[FUSED_HOST_MODE]\n return m === 'cst' ? 'cst' : 'ast'\n}\n\n/** Whether a fused/composed rule map dropped any direct builder's CST branch. */\nexport function fusedHostElidedOf(registry: object): boolean {\n return (registry as Record<symbol, unknown>)[FUSED_HOST_ELIDED] === true\n}\n\n/**\n * Fuse at BUILD time \u2014 emit the fused closure as a self-contained SOURCE\n * expression (`(() => { \u2026 })()`), with **no `new Function`**. This is what the\n * macro splices in for a `compose([...])` call, so macro output stays eval-free.\n * Requires every callback to be inlined from source (macro mode); throws if any\n * artifact carries runtime-only callback functions.\n */\nexport function emitFusedSource(pieces: LinkablePieces[], hoist?: ModuleHoist): string {\n const { body, env } = fusedBody(pieces, hoist)\n if (Object.keys(env).length > 0) {\n throw new Error('emitFusedSource: artifact carries non-static callbacks (runtime-only); cannot emit static source')\n }\n return `/* @__PURE__ */ (() => {\\n${body}\\n})()`\n}\n\n/**\n * Compose grammars/artifacts into a runnable parser map \u2014 the ONLY public\n * composition entry point. `compose([base, ext, \u2026])`: later entries override\n * earlier ones by rule name, and because fusion re-binds every reference in one\n * shared scope, an override reroutes the base's OWN calls too (open recursion).\n *\n * Each entry may be a **grammar** (a `rules()` result \u2014 a map of combinators,\n * linkable-ified here) OR an already-compiled **linkable artifact** (what the\n * macro emits and a package ships). So a package needs no opt-in wrapper to be\n * composable \u2014 `compose([importedGrammar, myRules])` just works.\n *\n * The macro compiles `compose([...])` to STATIC fused source (no `new Function`).\n * Called at runtime (no macro, like `compile()`) it fuses via `new Function`.\n */\n/** A composed parser carries its flattened source pieces (non-enumerable) so it\n * can be composed AGAIN \u2014 `compose([lessGrammar, delta])` where `lessGrammar` is\n * itself a `compose([...])` result. */\nconst COMPOSED_PIECES = Symbol.for('parseman.composedPieces')\n\n/** The carried pieces a `compose()`/`composeLeaf()` result holds, or `undefined` when\n * the value is not a composed grammar. This is what makes a fused grammar analysable:\n * the pieces are re-lowerable IR even though the fused map itself is only functions. */\nexport function composedPiecesOf(\n grammar: Record<string, unknown>,\n): ReadonlyArray<LinkablePieces | IRPiece> | undefined {\n const pieces = (grammar as unknown as Record<symbol, unknown>)[COMPOSED_PIECES]\n return Array.isArray(pieces) ? pieces as ReadonlyArray<LinkablePieces | IRPiece> : undefined\n}\n\n/**\n * A terminal fused grammar may be used to run a parser, but not as an input to\n * another composition. Macro `composeLeaf()` uses this for a local semantic\n * reduction over imported recognition-only IR: the local reductions stay in\n * their lexical module and therefore never become carried IR.\n */\nconst LEAF_COMPOSED = Symbol.for('parseman.leafComposed')\n\n/** The composing (outermost) trivia a runtime `compose()` applied \u2014 stored so a\n * later `pick(composedGrammar, \u2026)` can re-lower the selected rules under the SAME\n * trivia (composing-wins survives \u00E0-la-carte selection). The carried IR pieces hold\n * no trivia of their own, so it must be remembered separately. Not serialized by the\n * macro (which delegates pick to the runtime linker). */\nconst COMPOSED_TRIVIA = Symbol.for('parseman.composedTrivia')\n\n/** Final winner map for semantic-coverage tooling. It exists only when every\n * carried compose piece is re-lowerable IR; opaque precompiled artifacts have no\n * combinator graph to inspect and therefore deliberately expose no fake map. */\nconst COMPOSED_COVERAGE_RULES = Symbol.for('parseman.composedCoverageRules')\n\n/** The compact IR form a grammar carries instead of its lowered rule source: the\n * combinator-construction expression, re-lowered here at fuse time. */\nexport type IRPiece = { ns: string; ir: string; trackLines?: true }\n\nfunction isIRPiece(p: unknown): p is IRPiece {\n return !!p && typeof p === 'object'\n && typeof (p as IRPiece).ir === 'string' && typeof (p as IRPiece).ns === 'string'\n && !('ruleFns' in (p as object))\n}\n\n/** Memoize a zero-arg thunk, keeping it LAZY. Used where two diagnostic thunks want\n * the same carried-IR hydration: the work must not happen when the diagnostic is off,\n * and must not happen twice when it is on. */\nexport function once<T>(fn: () => T): () => T {\n let done = false\n let value: T\n return () => {\n if (!done) { value = fn(); done = true }\n return value\n }\n}\n\n/** The re-lowerable carried pieces' rule maps, in compose order \u2014 the input to the\n * gating analysis (`diagnoseGrammar`). An opaque precompiled artifact contributes no\n * combinator graph, so it is skipped: a hole it would have bound stays unresolved\n * and its choice stays deferred, never falsely warned.\n *\n * Skipping is not the same as having nothing to say. Use `carriedRuleMapsDetailed`\n * where the skip must be REPORTED \u2014 a diagnostic that drops part of the grammar and\n * then returns a clean result is indistinguishable from one that verified it. */\nexport function carriedRuleMaps(carried: ReadonlyArray<LinkablePieces | IRPiece>): Array<Array<[string, Combinator<unknown>]>> {\n return carriedRuleMapsDetailed(carried).maps\n}\n\n/** `carriedRuleMaps` plus the pieces it could NOT re-lower, named by namespace and\n * rule count, so a caller can report exactly how much of the grammar went unseen. */\nexport function carriedRuleMapsDetailed(\n carried: ReadonlyArray<LinkablePieces | IRPiece>,\n): { maps: Array<Array<[string, Combinator<unknown>]>>; opaque: Array<{ ns: string; ruleNames: string[] }> } {\n const maps: Array<Array<[string, Combinator<unknown>]>> = []\n const opaque: Array<{ ns: string; ruleNames: string[] }> = []\n for (const p of carried) {\n if (isIRPiece(p)) { maps.push(evalRuleMapIR(p.ir)); continue }\n // `ruleFns` is a Map, not a plain object \u2014 `Object.keys` on it silently yields []\n // and every opaque piece would degrade to an anonymous `<artifact _lkN_>`, which is\n // exactly the \"reported, but uselessly\" failure this whole change is against.\n const ruleFns = (p as { ruleFns?: Map<string, string> }).ruleFns\n opaque.push({ ns: p.ns, ruleNames: ruleFns instanceof Map ? [...ruleFns.keys()] : [] })\n }\n return { maps, opaque }\n}\n\n/**\n * Recover the override-winner COMBINATOR map behind a `compose()` result, plus the\n * pieces that could not be recovered.\n *\n * A fused map holds rule functions, so any consumer that walks a combinator graph\n * (gating analysis, the spec/EBNF/railroad model) cannot read it directly. The graph\n * is not lost, though \u2014 `compose()` retains re-lowerable IR \u2014 so this is the single\n * shared recovery both consumers use. Sharing it is the point: two copies of this\n * logic is how one walker gets fixed and the other silently keeps failing.\n *\n * Returns `undefined` when `grammar` is not a composed result.\n */\nexport function recoverComposedRules(\n grammar: Record<string, unknown>,\n): { rules: Map<string, Combinator<unknown>>; opaque: Array<{ ns: string; ruleNames: string[] }> } | undefined {\n const carried = composedPiecesOf(grammar)\n if (carried === undefined) return undefined\n const { maps, opaque } = carriedRuleMapsDetailed(carried)\n const rules = new Map<string, Combinator<unknown>>()\n // Later wins, matching the linker's own fuse semantics. An accessed-but-undefined\n // `g.X` leaks in as an unresolved lazy \u2014 a REFERENCE, not a definition \u2014 and must\n // never shadow the artifact that really defines X.\n for (const map of maps) for (const [name, rule] of map) {\n if (rule._def.tag === 'lazy') { try { rule._def.thunk() } catch { continue } }\n rules.set(name, rule)\n }\n return { rules, opaque }\n}\n\nfunction coverageRulesOf(carried: Array<LinkablePieces | IRPiece>): Record<string, Combinator<unknown>> | undefined {\n const winners: Record<string, Combinator<unknown>> = {}\n for (const piece of carried) {\n if (!isIRPiece(piece)) return undefined\n const map = evalRuleMapIR(piece.ir)\n for (const [name, rule] of map) {\n // An accessed-but-undefined `g.Name` is an external reference, never a\n // rule definition. Match compose's IR filtering rule exactly.\n if (rule._def.tag === 'lazy') {\n try { rule._def.thunk() } catch { continue }\n }\n winners[name] = rule\n }\n }\n return winners\n}\n\n/** Return the final override-winner combinator map carried by runtime\n * `compose()`, or `undefined` when a precompiled opaque artifact participated.\n * This is intentionally internal: callers must not treat it as a parser API. */\nexport function composedCoverageRules(grammar: Record<string, unknown>): Record<string, Combinator<unknown>> | undefined {\n return (grammar as Record<symbol, unknown>)[COMPOSED_COVERAGE_RULES] as Record<string, Combinator<unknown>> | undefined\n}\n\n/** Materialize a carried item to full `LinkablePieces`: an IR piece is evaluated\n * back to a rule map and re-lowered; a full piece passes through. */\nexport function materializePiece(\n p: LinkablePieces | IRPiece,\n trivia?: Combinator<unknown>,\n captureTerminals = false,\n hostMode?: HostMode,\n): LinkablePieces {\n // A piece carried as IR is RE-LOWERED here, which is what lets `compose()` choose the\n // host mode: the same carried grammar can be fused into an eval-AST artifact and into\n // a positioned-CST one. An already-lowered piece keeps whatever mode it was built\n // with \u2014 that is why `compose({ hostMode: 'cst' })` only works on carried IR.\n if (!isIRPiece(p)) return p\n const pieces = compileLinkable(evalRuleMapIR(p.ir), p.ns, {\n ...(trivia ? { trivia } : {}),\n ...(captureTerminals ? { captureTerminals: true } : {}),\n ...(hostMode ? { hostMode } : {}),\n ...(p.trackLines ? { trackLines: true } : {}),\n })\n if (!pieces) throw new Error(`compose: carried IR for ns \"${p.ns}\" could not be re-lowered`)\n return pieces\n}\n\n/** Flatten one `compose()` item to its pieces: a prior composed result \u2192 its\n * carried list; an artifact \u2192 itself; a grammar (`rules()` map) \u2192 linkable-ified. */\nfunction nextComposeNs(used: Set<string>): string {\n let ns: string\n do { ns = `_lk${_nsCounter++}_` } while (used.has(ns))\n used.add(ns)\n return ns\n}\n\n/** Flatten one `compose()` item to its RE-LOWERABLE carried items \u2014 the form stored\n * on the composed result so it can be composed AGAIN under a NEW composing trivia.\n * A grammar (`rules()` map) is carried as compact IR (`{ns, ir}`), NOT baked source,\n * so a later `compose([thisResult, delta])` re-lowers it with the delta's trivia\n * (multi-level composing-wins). A prior composed result contributes its OWN carried\n * items (already IR); a pre-compiled artifact has no source, so it stays baked. */\nfunction itemCarried(\n item: LinkablePieces | Record<string, unknown>,\n used: Set<string>,\n trivia?: Combinator<unknown>,\n // Only reaches the non-serializable fallback below, where the grammar is baked\n // immediately instead of carried as re-lowerable IR. The IR path gets the mode later,\n // in `materializePiece`.\n hostMode?: HostMode,\n): Array<LinkablePieces | IRPiece> {\n const carried = (item as Record<symbol, unknown>)[COMPOSED_PIECES]\n // A prior composed result (runtime or macro-compiled): its carried list is already\n // re-lowerable (IR pieces, plus any pre-compiled artifacts). Pass it through so THIS\n // compose re-lowers it under its own composing trivia. Reserve its namespaces so a\n // sibling grammar map can't collide with them.\n if (Array.isArray(carried)) {\n const items = carried as Array<LinkablePieces | IRPiece>\n for (const p of items) used.add(p.ns)\n return items\n }\n // A pre-compiled artifact (`linkable()`/`pick()`): no source to re-lower \u2014 its trivia\n // was baked when it was compiled. Keep it as-is.\n if ((item as LinkablePieces).ruleFns instanceof Map) {\n const p = item as LinkablePieces\n used.add(p.ns)\n return [p]\n }\n // A grammar (`rules()` map): carry it as compact IR so a later compose re-lowers it\n // under ITS trivia. Unserializable \u2192 bake now with this compose's trivia (can't\n // re-lower later; acceptable fallback, mirrors the macro's full-pieces fallback).\n const map = item as Record<string, Combinator<unknown>>\n const ns = nextComposeNs(used)\n // Drop EXTERNAL entries first (same filter as compileLinkable): a `rules()` cache\n // also holds every ACCESSED-but-undefined `g.X` as an unresolved-lazy entry. Left in,\n // serializeRuleMap would emit `X: g[\"X\"]` \u2014 a self-referential rule that shadows the\n // sibling artifact defining X and recurses forever. They resolve by name at fuse time.\n const entries = Object.entries(map).filter(([, val]) => {\n const d = val._def\n if (d.tag !== 'lazy') return true\n try { d.thunk(); return true } catch { return false }\n })\n // Carry this grammar's ambient `scanSkip` (per-piece \u2014 opaque units are\n // dialect-specific, NOT composing-wins) into the IR so a re-lower stamps\n // `grammarScanSkip` back on. `linkable()`'s fallback reads it off `_meta` directly.\n const scanSkip = entries\n .map(([, val]) => (val._meta as { grammarScanSkip?: Combinator<unknown>[] }).grammarScanSkip)\n .find(Boolean)\n const ir = serializeRuleMap(entries, scanSkip)\n return ir ? [{ ns, ir }] : [linkable(map, ns, trivia, hostMode)]\n}\n\n/** The composed grammar's ambient trivia = the LAST composed item that declares a\n * grammar-level trivia (via `rules({ trivia }, \u2026)`, which tags `grammarTrivia` on its\n * rules). Outermost wins: the composing grammar's trivia applies to every fused rule,\n * including those inherited from a base \u2014 so e.g. an SCSS `rw` (which extends Less's)\n * governs the inherited Less/CSS rules too. `parser`/`noTrivia` still override locally. */\nfunction composingTriviaOf(items: Array<LinkablePieces | Record<string, unknown>>): Combinator<unknown> | undefined {\n for (let i = items.length - 1; i >= 0; i--) {\n const item = items[i] as Record<string, unknown> | undefined\n if (!item || (item as LinkablePieces).ruleFns instanceof Map || (item as Record<symbol, unknown>)[COMPOSED_PIECES]) continue\n for (const v of Object.values(item)) {\n const t = (v as Combinator<unknown> | undefined)?._meta?.grammarTrivia\n if (t) return t\n }\n }\n return undefined\n}\n\nexport function compose(\n items: Array<LinkablePieces | Record<string, unknown>>,\n /**\n * Compile-time host mode for the fused artifact, same meaning as\n * `compile(g, { hostMode })`. Omit (or `'ast'`) for the eval driver \u2014 the fused rules\n * build through the grammar's own `build` callbacks and carry no positioned-CST\n * branch. Pass `'cst'` to fuse a SECOND artifact from the same pieces for the linter /\n * IDE / language-service driver. Two compilations of one grammar, decided here, rather\n * than one artifact deciding per node on every parse.\n */\n opts?: { hostMode?: HostMode },\n): Record<string, FusedRule> {\n if (items.some(item => (item as Record<symbol, unknown>)[LEAF_COMPOSED] === true)) {\n throw new Error('compose: a composeLeaf() result is terminal and cannot be composed again')\n }\n const used = new Set<string>()\n // The composed grammar's ambient trivia comes from the composing grammar itself \u2014\n // whatever the last piece declared via rules({ trivia }, \u2026). No separate option:\n // the trivia rides with the grammar that declared it.\n const trivia = composingTriviaOf(items)\n // Carried items are RE-LOWERABLE (IR); materialize them ONCE with this compose's\n // trivia for the now-fuse, but STORE the un-materialized carried list so a later\n // compose can re-lower it under a different trivia (multi-level composing-wins).\n const carried = items.flatMap(item => itemCarried(item, used, trivia, opts?.hostMode))\n const pieces = carried.map(p => materializePiece(p, trivia, false, opts?.hostMode))\n const map = fuseRules(pieces)\n Object.defineProperty(map, COMPOSED_PIECES, { value: carried, enumerable: false })\n if (trivia) Object.defineProperty(map, COMPOSED_TRIVIA, { value: trivia, enumerable: false })\n const coverageRules = coverageRulesOf(carried)\n if (coverageRules) Object.defineProperty(map, COMPOSED_COVERAGE_RULES, { value: coverageRules, enumerable: false })\n return map\n}\n\n/**\n * Compose a terminal grammar. This is for a leaf parser that overlays local\n * semantic reductions on reusable recognition rules.\n *\n * Under the macro this lowers to STATIC fused source (functions), exactly like\n * `compose()`. It is still macro-only as a *compiled* artifact: without macro\n * lowering there is no safe way to keep lexical builders out of carried IR, so it\n * never falls back to runtime CODEGEN composition.\n *\n * Called at runtime (no macro) it returns the INTERPRETED fuse of the same items\n * \u2014 a combinator map, not a map of compiled functions (`fuseInterpreted`). That is\n * the supported way to run/inspect a leaf grammar without a build step: drive it\n * with `run()` / `parseDoc()`, which accept either shape. The declared return type\n * is the MACRO-path type (a leaf grammar is shipped compiled); use\n * `isInterpretedFuse(map)` when a caller must tell the two apart.\n */\nexport function composeLeaf(\n items: Array<LinkablePieces | Record<string, unknown>>,\n): Record<string, FusedRule> {\n const pieces = items.flatMap(interpretedPieces)\n let fused: Record<string, Combinator<unknown>> | undefined\n const map: Record<string, unknown> = {}\n // LAZY on purpose. A grammar module typically builds SEVERAL leaf grammars over\n // one shared recognition piece (`cssGrammar`, `cssLineGrammar`, `cssCstGrammar`,\n // \u2026). An interpreted fuse binds that shared piece IN PLACE, so only one of them\n // can exist at a time \u2014 fusing all of them at import would make merely importing\n // the module throw. Fusing on first ACCESS means the grammar you actually use\n // works, and reaching for a second, conflicting one fails loudly at that point.\n // (`trackLines`/`hostMode` are compile-time distinctions; the interpreter decides\n // both per parse, so those variants are the same interpreted grammar anyway.)\n for (const name of ruleNamesOf(pieces)) {\n Object.defineProperty(map, name, {\n enumerable: true,\n configurable: true,\n get: () => (fused ??= fusePieces(pieces))[name],\n })\n }\n Object.defineProperty(map, LEAF_COMPOSED, { value: true, enumerable: false })\n Object.defineProperty(map, INTERPRETED_PIECES, {\n value: pieces.filter(p => p.plain).map(p => p.entries),\n enumerable: false,\n })\n return map as unknown as Record<string, FusedRule>\n}\n\n/* \u2500\u2500 Interpreted fuse \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n *\n * `compose()` fuses by CODEGEN: every piece is compiled to `_r_<Name>` functions\n * dropped into one scope, so a reference resolves by NAME and an override reroutes\n * the base piece's own calls (open recursion). None of that exists interpreted \u2014\n * the interpreter runs the combinator graph, and a cross-piece reference is an\n * ordinary `ref()` placeholder that nobody ever `.define()`d. That is why a\n * composed grammar could not be run interpreted at all, and why every diagnostic\n * that must NOT reach codegen (profiling, gating analysis, coverage) had to be\n * hand-fused in throwaway scripts.\n *\n * The interpreted fuse binds those placeholders directly, with the SAME semantics\n * the compiled fuse gets from name resolution:\n * - later piece wins per rule name (matching `fuseRules`/`pickPieces`);\n * - an override REPOINTS the slot every call site already holds, so a base\n * piece's internal calls reroute too (open recursion);\n * - the composing grammar's trivia governs every fused rule (`composingTriviaOf`);\n * - a referenced-but-undefined rule is a fuse-time error, not a parse-time one.\n *\n * It is MUTATING by construction: a hole is a shared object, and binding it is the\n * only way its call sites can see the answer. `repointRef` therefore records what\n * it changed and refuses a CONFLICTING second bind, so two different fusions over\n * one shared piece fail loudly instead of silently rewriting each other's parser.\n * \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n/**\n * A rule slot produced by `ref()` \u2014 what `rules()` stores for every rule that is\n * referenced by name, and for every `g.X` hole a piece leaves for another piece to\n * fill. `parse`/`_def.thunk` are OWN properties of that object, which is what lets\n * the interpreted fuse repoint it in place.\n */\ntype RefSlot = Combinator<unknown> & {\n _def: { tag: 'lazy'; thunk: () => Combinator<unknown> }\n define(p: Combinator<unknown>): void\n parse(input: string, pos: number, ctx: ParseContext): ParseResult<unknown>\n}\n\nfunction isRefSlot(c: Combinator<unknown>): c is RefSlot {\n return c._def.tag === 'lazy' && typeof (c as unknown as { define?: unknown }).define === 'function'\n}\n\n/** What a slot resolved to BEFORE any interpreted fuse touched it (`null` = it was\n * an unbound cross-piece hole). Recorded on first repoint so a LATER fuse computes\n * its winner from the grammar as authored, never from another fusion's binding. */\nconst FUSE_ORIGINAL = Symbol.for('parseman.interpretedFuseOriginal')\n/** What an interpreted fuse repointed this slot at. */\nconst FUSE_TARGET = Symbol.for('parseman.interpretedFuseTarget')\n/** The source rule maps behind a `fuseInterpreted()` result, so it can be fused\n * again \u2014 the interpreted mirror of `COMPOSED_PIECES`. */\nconst INTERPRETED_PIECES = Symbol.for('parseman.interpretedPieces')\n\n/** Whether `map` is an interpreted fuse (a combinator map) rather than a compiled\n * `compose()` result (a map of fused functions). */\nexport function isInterpretedFuse(map: object): boolean {\n return Array.isArray((map as Record<symbol, unknown>)[INTERPRETED_PIECES])\n}\n\ntype NamedEntries = ReadonlyArray<[string, Combinator<unknown>]>\n/** `plain` = the item was an authored `rules()` map. Only plain maps declare the\n * composing trivia, mirroring `composingTriviaOf`, which skips artifacts and prior\n * composed results for exactly the same reason: their trivia was already applied. */\ntype FusePiece = { entries: NamedEntries; plain: boolean }\n\n/** The rule a map entry DEFINES, or `undefined` when it is an external reference\n * (an accessed-but-undefined `g.X`). Same local-vs-external test `compileLinkable`\n * and `itemCarried` apply, so the two fuses agree on what a piece contributes. */\nfunction definitionOf(entry: Combinator<unknown>): Combinator<unknown> | undefined {\n if (isRefSlot(entry)) {\n const original = (entry as unknown as Record<symbol, unknown>)[FUSE_ORIGINAL]\n if (original !== undefined) return (original as Combinator<unknown> | null) ?? undefined\n try { return entry._def.thunk() } catch { return undefined }\n }\n if (entry._def.tag === 'lazy') {\n try { (entry._def as { thunk: () => Combinator<unknown> }).thunk() } catch { return undefined }\n }\n return entry\n}\n\n/** Point `slot` at `target`, updating every call site that holds it. Mirrors\n * `ref().define()`'s metadata propagation; refuses to overwrite a binding a\n * DIFFERENT fusion already made (see the mutation note above). */\nfunction repointRef(slot: RefSlot, target: Combinator<unknown>, name: string): void {\n const tagged = slot as unknown as Record<symbol, unknown>\n const bound = tagged[FUSE_TARGET] as Combinator<unknown> | undefined\n const original = FUSE_ORIGINAL in tagged\n ? tagged[FUSE_ORIGINAL] as Combinator<unknown> | null\n : (() => { try { return slot._def.thunk() } catch { return null } })()\n if ((bound ?? original) === target) return\n if (bound !== undefined) {\n throw new Error(\n `fuseInterpreted: rule \"${name}\" is already bound by a DIFFERENT interpreted fusion of the same grammar piece. `\n + `An interpreted fuse binds the shared placeholder objects in place, so two fusions cannot share a piece \u2014 `\n + `build a fresh instance of the piece (call its rules() factory again, or import the module under a distinct specifier) for the second fusion.`,\n )\n }\n if (!(FUSE_ORIGINAL in tagged)) Object.defineProperty(slot, FUSE_ORIGINAL, { value: original, enumerable: false })\n Object.defineProperty(slot, FUSE_TARGET, { value: target, enumerable: false })\n slot._def.thunk = () => target\n slot.parse = (input, pos, ctx) => target.parse(input, pos, ctx)\n const meta = slot._meta\n meta.firstSet = target._meta.firstSet\n meta.canMatchNewline = target._meta.canMatchNewline\n meta.isTrivia = target._meta.isTrivia\n if (target._meta.triviaKindLabels !== undefined) meta.triviaKindLabels = target._meta.triviaKindLabels\n else delete meta.triviaKindLabels\n if (target._meta.disjoint !== undefined) meta.disjoint = target._meta.disjoint\n else delete meta.disjoint\n}\n\n/** Flatten one `fuseInterpreted()` item to the rule maps it contributes, in order. */\nfunction interpretedPieces(item: LinkablePieces | Record<string, unknown>): FusePiece[] {\n const fused = (item as Record<symbol, unknown>)[INTERPRETED_PIECES]\n if (Array.isArray(fused)) return (fused as NamedEntries[]).map(entries => ({ entries, plain: false }))\n const carried = composedPiecesOf(item as Record<string, unknown>)\n if (carried !== undefined) {\n // A compiled `compose()` result. Its carried IR re-lowers to combinators, but a\n // piece that arrived already COMPILED has no combinator graph at all \u2014 fusing\n // around it would silently drop its rules, which is the one failure mode a\n // diagnostic must never have.\n const { maps, opaque } = carriedRuleMapsDetailed(carried)\n if (opaque.length > 0) {\n throw new Error(\n `fuseInterpreted: cannot interpret a composed grammar containing precompiled artifact(s) `\n + `${opaque.map(o => `\"${o.ns}\" (${o.ruleNames.length} rules)`).join(', ')} \u2014 they carry compiled functions, not a combinator graph. `\n + `Pass the source grammars (the same items you passed to compose()) instead.`,\n )\n }\n return maps.map(entries => ({ entries, plain: false }))\n }\n if ((item as LinkablePieces).ruleFns instanceof Map) {\n throw new Error('fuseInterpreted: a precompiled linkable artifact has no combinator graph to interpret; pass the source grammar (a rules() map) instead')\n }\n return [{ entries: Object.entries(item as Record<string, Combinator<unknown>>), plain: true }]\n}\n\n/**\n * Materialize a composition as a RUNNABLE INTERPRETED rule map \u2014 the interpreted\n * counterpart of `compose()`, with identical fuse semantics (later piece wins,\n * override reroutes the base's own calls, composing trivia governs every rule).\n * No codegen, no `new Function`, no macro build step: the result is a plain map of\n * combinators that `run()` / `parseDoc()` accept exactly like a fused map.\n *\n * This is what diagnostics and profiling run against \u2014 they must stay in\n * interpreted mode, and before this they could not see a composed grammar at all.\n *\n * Items are the SAME items `compose()`/`composeLeaf()` take: `rules()` maps\n * (the intended input), a prior `fuseInterpreted()` result, or a runtime\n * `compose()` result (re-lowered from its carried IR \u2014 note that carried IR cannot\n * materialize direct `node()` builders, so prefer the source maps). A precompiled\n * `linkable()` artifact is rejected: it has no combinator graph.\n *\n * MUTATION: binding a cross-piece hole rewrites the shared placeholder object every\n * call site already holds \u2014 that IS how an override reaches a base piece's own\n * calls. A second, DIFFERENT fusion over the same piece objects therefore throws\n * rather than silently rewriting the first one's parser.\n */\nexport function fuseInterpreted(\n items: Array<LinkablePieces | Record<string, unknown>>,\n opts?: { hostMode?: HostMode },\n): Record<string, Combinator<unknown>> {\n return fusePieces(items.flatMap(interpretedPieces), opts)\n}\n\n/** The rule names a fusion of these pieces defines, in winner order \u2014 computable\n * WITHOUT binding anything, which is what lets `composeLeaf()` expose its key set\n * before it fuses. */\nfunction ruleNamesOf(pieces: FusePiece[]): string[] {\n const names = new Set<string>()\n for (const piece of pieces) {\n for (const [name, value] of piece.entries) if (definitionOf(value) !== undefined) names.add(name)\n }\n return [...names]\n}\n\nfunction fusePieces(\n pieces: FusePiece[],\n opts?: { hostMode?: HostMode },\n): Record<string, Combinator<unknown>> {\n // Composing-wins trivia, read exactly as `composingTriviaOf` reads it for compose():\n // the LAST authored grammar that declared `rules({ trivia }, \u2026)`.\n let trivia: Combinator<unknown> | undefined\n for (let i = pieces.length - 1; i >= 0 && trivia === undefined; i--) {\n if (!pieces[i]!.plain) continue\n for (const [, rule] of pieces[i]!.entries) {\n const t = rule._meta.grammarTrivia\n if (t) { trivia = t; break }\n }\n }\n\n // Winner per rule name \u2014 later piece wins, matching `fuseRules`. The winner is the\n // DEFINITION, never the slot holding it: a slot can be repointed, and a chain\n // through one would make an override of X reroute into itself.\n const winner = new Map<string, Combinator<unknown>>()\n const entry = new Map<string, Combinator<unknown>>()\n for (const piece of pieces) {\n for (const [name, value] of piece.entries) {\n const def = definitionOf(value)\n if (def === undefined) continue\n winner.set(name, def)\n entry.set(name, value)\n }\n }\n\n // Bind every hole (and repoint every overridden slot) before anything runs.\n const missing = new Set<string>()\n for (const piece of pieces) {\n for (const [name, value] of piece.entries) {\n if (!isRefSlot(value)) continue\n const target = winner.get(name)\n if (target === undefined) { missing.add(name); continue }\n repointRef(value, target, name)\n }\n }\n if (missing.size > 0) throw new Error(missingRuleMessage(pieces, missing))\n\n const out: Record<string, Combinator<unknown>> = {}\n for (const [name, value] of entry) {\n out[name] = value\n const meta = value._meta as {\n isTrivia: boolean\n grammarTrivia?: Combinator<unknown>\n grammarHostMode?: HostMode\n }\n // A trivia rule must never carry the ambient trivia (it would recursively skip\n // trivia within itself) \u2014 the same guard `compileLinkable` applies per rule.\n if (trivia !== undefined && !meta.isTrivia) meta.grammarTrivia = trivia\n // Host mode is PER PIECE, exactly as `compileLinkable` resolves it: an explicit\n // option wins, otherwise the owning piece's own `rules({ hostMode })` stamp.\n if (opts?.hostMode !== undefined && !meta.isTrivia) {\n if (opts.hostMode === 'cst') meta.grammarHostMode = 'cst'\n else delete meta.grammarHostMode\n }\n }\n Object.defineProperty(out, INTERPRETED_PIECES, {\n value: pieces.filter(p => p.plain).map(p => p.entries),\n enumerable: false,\n })\n return out\n}\n\n/** Name-closure failure, reported the way the compiled fuse reports it: which rule\n * referenced the missing name. Computed only on the error path. */\nfunction missingRuleMessage(pieces: FusePiece[], missing: Set<string>): string {\n for (const piece of pieces) {\n const deps = ruleDependencies(piece.entries.filter(([, v]) => definitionOf(v) !== undefined))\n for (const [name, ds] of deps) {\n for (const d of ds) if (missing.has(d)) return `fuseInterpreted: rule \"${name}\" references missing rule \"${d}\"`\n }\n }\n return `fuseInterpreted: missing rule(s) ${[...missing].map(n => `\"${n}\"`).join(', ')}`\n}\n", "/**\n * Gating analysis for a WHOLE grammar value \u2014 including a `compose()` result.\n *\n * `analyzeGatingRules` walks combinators. A `compose()` result holds none: fusion\n * lowers every rule to an executable function and the combinator graph is gone from\n * the returned map. Walking one therefore saw nothing \u2014 and, because the default-on\n * fuse-time diagnostic swallowed the resulting error, saw nothing SILENTLY. That is\n * the shape every real composed grammar has (`compose([importedArtifact, rules(\u2026)])`),\n * so the diagnostic was blind on exactly the grammars it exists to serve.\n *\n * The graph is recoverable: `compose()` retains its inputs as carried IR, and that IR\n * re-lowers to real combinators. This module does that recovery, and \u2014 where a piece\n * is a genuinely opaque precompiled artifact carrying rule FUNCTIONS rather than IR \u2014\n * reports it as `unanalysable` instead of quietly dropping it.\n */\nimport type { Combinator } from '../types.ts'\nimport { analyzeGatingRules, type AnalyzeGatingOptions, type GatingReport, type Unanalysable } from './gating.ts'\nimport { recoverComposedRules } from '../compiler/linker.ts'\nimport { recordDegradation } from '../compiler/degradation.ts'\n\n/** A `rules()` map, a `compose()` result, or any rule-name \u2192 value record. */\nexport type AnalysableGrammar = Record<string, unknown>\n\n/**\n * Analyze a grammar's choices, resolving a composed grammar back to its carried IR\n * first. Accepts a `rules()` map (walked directly) or a `compose()` result (recovered).\n *\n * The returned report's `unanalysable` is authoritative: non-empty means part of the\n * grammar was never examined, and a clean `ungated` must NOT be read as a pass.\n */\nexport function analyzeGrammarGating(\n grammar: AnalysableGrammar,\n opts?: AnalyzeGatingOptions,\n): GatingReport {\n const recovered = recoverComposedRules(grammar)\n if (recovered === undefined) {\n // Not a composed grammar \u2014 a plain `rules()` map of combinators. Walk it as-is;\n // any non-combinator value is reported by the walk itself.\n return analyzeGatingRules(Object.entries(grammar) as Array<[string, Combinator<unknown>]>, opts)\n }\n const { rules: winners, opaque } = recovered\n const entries = [...winners]\n const report = analyzeGatingRules(entries, { ...opts, resolveRef: name => winners.get(name) })\n const fromOpaque: Unanalysable[] = opaque.map(o => ({\n rule: o.ruleNames.length > 0 ? o.ruleNames.join(', ') : `<artifact ${o.ns}>`,\n kind: 'opaque-artifact' as const,\n reason: `precompiled artifact \"${o.ns}\" carries compiled rule functions, not re-lowerable IR \u2014 `\n + 'its choices cannot be examined. Recompile the contributing grammar so it carries IR '\n + '(the macro emits IR by default) to bring it back into analysis.',\n }))\n // Also announce it on the degradation channel. `unanalysable` is structured and correct,\n // but it is only seen by a caller that reads the report and knows to check that field;\n // the degradation channel is the greppable, countable one a build gate asserts zero of.\n // `'opaque-artifact'` was a DECLARED degradation code with no record site anywhere \u2014 a\n // published diagnostic vocabulary that could never fire. This is its real trigger.\n for (const o of opaque) {\n recordDegradation({\n code: 'opaque-artifact',\n // `info`, not `warn`: the artifact is usually someone else's package, so the author\n // of THIS grammar has nothing to act on \u2014 but the blind spot still has to be counted.\n severity: 'info',\n where: o.ruleNames.length > 0 ? o.ruleNames.join(', ') : `<artifact ${o.ns}>`,\n subject: `precompiled artifact \"${o.ns}\"`,\n fellBackTo: `it carries compiled rule functions rather than re-lowerable IR, so its `\n + `${o.ruleNames.length > 0 ? `${o.ruleNames.length} rule(s)` : 'rules'} were NOT analysed `\n + 'and a clean gating report must not be read as a pass',\n otherwise: 'its choices would be walked like any other rule. Recompile the contributing '\n + 'grammar so it carries IR (the macro emits IR by default)',\n })\n }\n return fromOpaque.length === 0 ? report : { ...report, unanalysable: [...report.unanalysable, ...fromOpaque] }\n}\n", "/**\n * The DELIBERATE grammar diagnostic \u2014 the one call that asks parseman \"is anything\n * wrong with this grammar?\" and answers in a form a machine can gate on.\n *\n * Why this exists as its own entry point, and why nothing in `compile()` prints any\n * more: a diagnostic that rides along with the thing that produces the artifact is a\n * diagnostic nobody chose to run. Importing one example grammar used to print ~51\n * lines of gating advice through `console.warn` before a single byte was parsed \u2014\n * advice that was correct, detailed, and read by no one, because it arrived unasked\n * in the middle of an unrelated build log. The same principle is already settled one\n * layer down for codegen (\"anything 'diagnostic' doesn't end up in codegen\"); this is\n * that principle applied at build time. Compiling produces an artifact and says\n * nothing. Asking for a diagnosis produces a diagnosis.\n *\n * Design rules this surface holds itself to:\n *\n * 1. MACHINE-READABLE FIRST. `diagnoseGrammar()` returns a plain, JSON-serializable\n * object with a versioned `schema` tag. The human rendering is a separate,\n * optional function over that object \u2014 never the primary product. A CI job gates\n * on `ok`; a person reads `formatGrammarDiagnosis()`.\n * 2. DETERMINISTIC. Findings are sorted by (severity, code, id). Two runs over the\n * same grammar produce byte-identical JSON, so a diagnosis can be committed as a\n * snapshot and diffed.\n * 3. FAILS CLOSED. An analysis that could not run is NOT a pass. `unanalysable` stays\n * authoritative (see `GatingReport.unanalysable`), it is a BLOCKING finding, and a\n * diagnosis whose analysis THREW is reported as a blocking finding rather than as\n * an empty, clean-looking report.\n * 4. ONE ENTRY POINT. It accepts a combinator, a rule-name\u2192combinator map, a `rules()`\n * map, or a `compose()` result, and figures out which it got. Choosing between\n * `analyzeGating` / `analyzeGatingRules` / `analyzeGrammarGating` is exactly the\n * kind of decision that makes people not bother.\n */\nimport type { Combinator } from '../types.ts'\nimport {\n analyzeGating, analyzeGatingRules, firstSetToString,\n type AnalyzeGatingOptions, type GatingReport,\n} from './gating.ts'\nimport { analyzeGrammarGating, type AnalysableGrammar } from './grammar.ts'\nimport {\n beginDegradationCapture, degradationCaptureDepth, unwindDegradationCapture,\n formatDegradation, type Degradation,\n} from '../compiler/degradation.ts'\n\n/** Anything `diagnoseGrammar()` knows how to read. */\nexport type DiagnosableGrammar =\n | Combinator<unknown>\n | AnalysableGrammar\n | ReadonlyArray<readonly [string, Combinator<unknown>]>\n\n/**\n * `blocking` fails `ok` (and therefore a CI gate). `advisory` is reported but does not\n * fail: the author either already acknowledged it (`accepted`) or has nothing to act on.\n */\nexport type DiagnosisSeverity = 'blocking' | 'advisory'\n\n/** Stable, greppable finding class. New codes may be added; existing ones are not renamed. */\nexport type DiagnosisCode =\n /** A hot choice with no first-char dispatch \u2014 every position enters doomed arms. */\n | 'ungated-choice'\n /** An API-misuse pattern in a choice's arms (double-not, leading-not, keyword-regex). */\n | 'anti-pattern'\n /** Part of the grammar could not be examined. A clean report over it is NOT a pass. */\n | 'unanalysable'\n /** The compiler took a correct-but-slower path. Mirrors the `[parseman] degraded` channel. */\n | 'degraded'\n /** An `accept` entry that matched no ungated choice \u2014 a stale snapshot line to prune. */\n | 'stale-accept'\n\nexport type DiagnosisFinding = {\n /** Stable identity: the choice id, `rule#arm`, the rule name, or the degradation code. */\n id: string\n code: DiagnosisCode\n severity: DiagnosisSeverity\n /** Rule / node type the finding lands on. */\n rule: string\n /** One-line statement of what is wrong. */\n message: string\n /** Arm-level evidence and concrete fixes, one entry per contributing cause. */\n details: string[]\n /** The `accept` snapshot key that would silence this finding, when one exists. */\n acceptKey?: string\n}\n\nexport type GrammarDiagnosis = {\n /** Versioned so a committed snapshot can be migrated rather than silently reinterpreted. */\n schema: 'parseman.diagnosis/1'\n /**\n * True only when there is no blocking finding. A CI gate is\n * `process.exit(diagnoseGrammar(g).ok ? 0 : 1)` \u2014 nothing else to remember.\n */\n ok: boolean\n summary: {\n totalChoices: number\n gated: number\n recoverable: number\n ungated: number\n accepted: number\n deferred: number\n antiPatterns: number\n unanalysable: number\n degraded: number\n staleAccepts: number\n }\n /** Sorted (severity, code, id). Deterministic across runs. */\n findings: DiagnosisFinding[]\n /**\n * Every blocking-choice id, sorted \u2014 paste straight into `{ accept: [...] }` to\n * acknowledge the current state as intentional.\n */\n acceptSnapshot: string[]\n /** The full underlying gating report, for callers that want the raw per-choice detail. */\n gating: GatingReport\n /**\n * Degradations recorded WHILE this analysis ran (e.g. an opaque composed artifact).\n * NOT the compile-time set \u2014 compiling is a separate act; see `PARSEMAN_DEGRADATION`.\n *\n * Empty when `PARSEMAN_DEGRADATION=off`, because `recordDegradation` short-circuits on\n * the level. That is not a blind spot: everything this analysis can record is ALSO\n * present in `gating.unanalysable`, which no env var can switch off.\n */\n degradations: Degradation[]\n}\n\nexport type DiagnoseOptions = Pick<AnalyzeGatingOptions, 'accept' | 'entryName'>\n\nconst isCombinator = (g: DiagnosableGrammar): g is Combinator<unknown> =>\n typeof g === 'object' && g !== null && '_def' in (g as object)\n\nconst isRuleEntries = (g: DiagnosableGrammar): g is ReadonlyArray<readonly [string, Combinator<unknown>]> =>\n Array.isArray(g)\n\n/**\n * Diagnose a grammar. Never throws: an analysis that cannot run is reported as a\n * blocking `unanalysable` finding, because a thrown diagnostic and a clean grammar\n * must not look the same to a caller that wrapped this in a try/catch.\n */\nexport function diagnoseGrammar(grammar: DiagnosableGrammar, opts?: DiagnoseOptions): GrammarDiagnosis {\n // Collect rather than print/throw. `analyzeGrammarGating` records an `opaque-artifact`\n // degradation, and with no sink open `PARSEMAN_DEGRADATION=error` makes that THROW \u2014\n // a deliberate diagnostic must report that fact, not die of it. The depth/unwind pair\n // (not a bare begin/end) is what keeps an analysis that throws from leaving the sink\n // open for the rest of the process.\n const depth = degradationCaptureDepth()\n beginDegradationCapture()\n let report: GatingReport\n let degradations: Degradation[]\n try {\n report = runAnalysis(grammar, opts)\n }\n catch (e) {\n const reason = e instanceof Error ? `${e.name}: ${e.message}` : String(e)\n report = emptyReport(`gating analysis threw \u2014 ${reason}`)\n }\n finally {\n degradations = unwindDegradationCapture(depth)\n }\n return assemble(report, degradations)\n}\n\n/**\n * The analysis examined NOTHING: no choice was walked, and rules were skipped.\n *\n * This is NOT \"problems were found\" and must never be presented as a finding count. A\n * diagnosis over a fully opaque grammar has one blocking finding per skipped rule, which\n * `findings.length` then reports as \"176 problems, 176 failing the check\" \u2014 a sentence\n * that reads as 176 discovered defects and actually means the tool inspected zero\n * choices. `ok` is correctly false either way, so `ok` alone cannot tell the two apart;\n * a caller that needs to distinguish \"measured, and it is bad\" from \"could not measure\"\n * asks here. The CLI maps this to exit 2 (COULD NOT ANALYSE), not exit 1.\n *\n * `unanalysable > 0` is required, so a genuinely choice-free grammar (nothing to walk,\n * nothing skipped) stays an ordinary clean pass rather than a measurement failure.\n */\nexport function examinedNothing(d: GrammarDiagnosis): boolean {\n return d.summary.totalChoices === 0 && d.summary.unanalysable > 0\n}\n\n/** Render a diagnosis for a human. The structured object stays the product of record. */\nexport function formatGrammarDiagnosis(d: GrammarDiagnosis): string[] {\n const s = d.summary\n const lines: string[] = []\n lines.push(\n examinedNothing(d)\n // NOT a finding count. See `examinedNothing`.\n ? `parseman: COULD NOT ANALYSE \u2014 0 choice(s) examined; ${s.unanalysable} rule(s) `\n + 'unreadable. No verdict about this grammar is available, good or bad.'\n : d.ok\n ? `parseman: grammar OK \u2014 ${s.gated}/${s.totalChoices} choice(s) gate on first char`\n + `${s.recoverable > 0 ? `, ${s.recoverable} recoverable` : ''}`\n + `${s.accepted > 0 ? `, ${s.accepted} accepted` : ''}`\n + `${s.deferred > 0 ? `, ${s.deferred} deferred to the fusing artifact` : ''}.`\n : `parseman: grammar NOT OK \u2014 ${blockingOf(d).length - s.unanalysable} blocking finding(s) over `\n + `${s.totalChoices} examined choice(s).`,\n )\n // Unanalysable first, always: \"no findings\" over a grammar that was never walked is\n // precisely the failure being reported, and it must not read as a clean bill of health.\n if (s.unanalysable > 0 && !examinedNothing(d)) {\n lines.push(\n ` ${s.unanalysable} rule(s) UNANALYSABLE \u2014 THIS REPORT IS PARTIAL. `\n + 'An empty finding list below does NOT mean the grammar is clean.',\n )\n }\n for (const f of d.findings) {\n lines.push(`${f.severity === 'blocking' ? '\u2717' : '\u00B7'} [${f.code}] ${f.id}: ${f.message}`)\n for (const detail of f.details) lines.push(` ${detail.replace(/\\n/g, '\\n ')}`)\n if (f.acceptKey !== undefined) {\n lines.push(` intentional? add to the gating snapshot: { accept: ['${f.acceptKey}'] }`)\n }\n }\n if (!d.ok && d.acceptSnapshot.length > 0) {\n lines.push(` accept-all snapshot: { accept: [${d.acceptSnapshot.map(i => `'${i}'`).join(', ')}] }`)\n }\n return lines\n}\n\n// \u2500\u2500 internals \u2500\u2500\n\nfunction runAnalysis(grammar: DiagnosableGrammar, opts?: DiagnoseOptions): GatingReport {\n if (isCombinator(grammar)) return analyzeGating(grammar, opts)\n if (isRuleEntries(grammar)) return analyzeGatingRules(grammar, opts)\n // A `rules()` map or a `compose()` result. `analyzeGrammarGating` recovers the carried\n // IR of a composed grammar (whose fused map holds rule FUNCTIONS, not combinators) and\n // re-asks every deferred question with the holes bound \u2014 the fuse-time analysis that\n // used to run implicitly inside `compose()`.\n return analyzeGrammarGating(grammar as AnalysableGrammar, opts)\n}\n\nfunction emptyReport(reason: string): GatingReport {\n return {\n totalChoices: 0, gated: 0, recoverable: 0,\n unanalysable: [{ rule: '<whole grammar>', kind: 'not-a-combinator', reason }],\n ungated: [], accepted: [], deferred: [], acceptedUnused: [], choices: [], antiPatterns: [],\n }\n}\n\nconst blockingOf = (d: GrammarDiagnosis): DiagnosisFinding[] => d.findings.filter(f => f.severity === 'blocking')\n\n/** Sort key order \u2014 blocking before advisory, then by code, then by id. */\nconst SEVERITY_RANK: Record<DiagnosisSeverity, number> = { blocking: 0, advisory: 1 }\nconst CODE_RANK: Record<DiagnosisCode, number> = {\n unanalysable: 0, 'ungated-choice': 1, 'anti-pattern': 2, degraded: 3, 'stale-accept': 4,\n}\n\nfunction assemble(report: GatingReport, degradations: Degradation[]): GrammarDiagnosis {\n const findings: DiagnosisFinding[] = []\n\n for (const u of report.unanalysable) {\n findings.push({\n id: u.rule, code: 'unanalysable', severity: 'blocking', rule: u.rule,\n message: `could not be examined [${u.kind}] \u2014 no verdict about it is available`,\n details: [u.reason],\n })\n }\n for (const c of report.ungated) {\n findings.push({\n id: c.id, code: 'ungated-choice', severity: 'blocking', rule: c.rule,\n message: `choice is UNGATED [${c.strategy}] \u2014 no first-char dispatch; `\n + 'every position speculatively enters doomed arms',\n details: [\n ...c.anyArms.map(a => `arm[${a.index}] first-set ANY (${a.cause}): ${a.detail}\\nfix: ${a.suggestion}`),\n ...c.overlaps.map(o => `arm[${o.a}] \u2229 arm[${o.b}] overlap on ${firstSetToString(o.on)}\\nfix: ${o.suggestion}`),\n ],\n acceptKey: c.id,\n })\n }\n for (const ap of report.antiPatterns) {\n findings.push({\n id: `${ap.rule}#arm${ap.armIndex}`, code: 'anti-pattern', severity: 'blocking', rule: ap.rule,\n message: `[${ap.kind}] ${ap.message}`,\n details: [],\n })\n }\n for (const d of degradations) {\n findings.push({\n // `where` + `code` is the degradation channel's own identity; reuse it so the two\n // surfaces name the same thing the same way.\n id: `${d.code}@${d.where}`, code: 'degraded',\n // Mirrors `DegradationSeverity`: 'warn' is a real cost the author can remove,\n // 'info' is a fact they cannot act on (someone else's package).\n severity: d.severity === 'warn' ? 'blocking' : 'advisory',\n rule: d.where, message: formatDegradation(d), details: [],\n })\n }\n for (const id of report.acceptedUnused) {\n findings.push({\n id, code: 'stale-accept', severity: 'advisory', rule: id,\n message: 'accept entry matched no ungated choice \u2014 the grammar was fixed; prune this line',\n details: [],\n })\n }\n\n findings.sort((a, b) =>\n SEVERITY_RANK[a.severity] - SEVERITY_RANK[b.severity]\n || CODE_RANK[a.code] - CODE_RANK[b.code]\n || (a.id < b.id ? -1 : a.id > b.id ? 1 : 0))\n\n return {\n schema: 'parseman.diagnosis/1',\n ok: !findings.some(f => f.severity === 'blocking'),\n summary: {\n totalChoices: report.totalChoices,\n gated: report.gated,\n recoverable: report.recoverable,\n ungated: report.ungated.length,\n accepted: report.accepted.length,\n deferred: report.deferred.length,\n antiPatterns: report.antiPatterns.length,\n unanalysable: report.unanalysable.length,\n degraded: degradations.length,\n staleAccepts: report.acceptedUnused.length,\n },\n findings,\n acceptSnapshot: report.ungated.map(c => c.id).sort(),\n gating: report,\n degradations,\n }\n}\n", "/**\n * The ONLY module in parseman that talks to a terminal.\n *\n * Everything above it produces DATA \u2014 lines made of spans, each span carrying text and a\n * semantic tone \u2014 and this file turns lines into bytes. That split is not tidiness; it is\n * what makes the rendering diffable. A renderer that emits escape sequences inline has\n * two outputs (styled and plain) that can drift apart, and the plain one is what a\n * snapshot, a CI log and `docs/samples/` all read.\n *\n * WHY LINECRAFT AND NOT HAND-ROLLED ANSI\n * --------------------------------------\n * The first cut of this CLI carried its own `ANSI` constant table. Writing that file\n * silently dropped the ESC bytes, so colour was dead for an entire session and nothing\n * said so \u2014 the output still looked structured, because an escape-less `[2m` prints as\n * `[2m`. Escape sequences are invisible failure surface, and a library that owns them\n * removes the surface. jess already renders its diagnostics through linecraft\n * (`packages/compiler/src/diagnostics.ts`, `packages/lint/src/index.ts`), so following\n * the same idiom also means a jess user and a parseman user see the same shape of output\n * rather than two parallel inventions. Pinned to `0.2.6`, exactly matching jess's pins.\n *\n * SPANS, NOT WHOLE-LINE STYLES\n * ----------------------------\n * jess's lint table styles a whole row at a time, which is right for a table of one\n * thing per line. A grammar finding is not that: within one line the arm index, the\n * production, its first set and the annotation all mean different things, and the\n * annotation is the part that should be shouting. So a line here is a list of SPANS, and\n * a styled line is a linecraft `Grid` of `Styled` cells \u2014 which also gives the columns\n * their alignment for free.\n *\n * THE INVARIANT THAT MUST NOT BREAK\n * ---------------------------------\n * Padding happens in ONE place, before either path sees it, and the plain form is the\n * concatenation of the padded span texts. So the two paths differ in styling and in\n * nothing else \u2014 not in width, not in alignment, not in content. No escape byte is\n * produced at all when colour is off, so the diffable output is byte-stable by\n * construction rather than by stripping. `width` is passed explicitly and defaults to 80\n * off-TTY, so a piped run cannot vary with the terminal it was piped from.\n */\nimport { CodeDebug, Region, Styled, type TextStyle } from 'linecraft'\n\nexport type Tone = TextStyle\n\n/**\n * Semantic tones, named once so the two renderers cannot drift apart.\n *\n * The ladder matters more than the individual colours: within a finding, exactly one\n * thing should be the brightest, and provenance / accept keys / byte costs should\n * recede. A report where everything is emphasised is a report where nothing is.\n */\nexport const TONE = {\n /** The single most important thing in its block. */\n loud: { color: 'brightRed', bold: true } as Tone,\n /** A heading, a count, the thing being named. */\n strong: { bold: true } as Tone,\n /** Supporting detail \u2014 never the finding itself. */\n quiet: { color: 'brightBlack' } as Tone,\n /** Recedes furthest: provenance, snapshot keys, byte costs. */\n faint: { color: 'brightBlack', dim: true } as Tone,\n /** This span IS the problem. */\n bad: { color: 'red' } as Tone,\n /** Real, but not blocking. */\n warn: { color: 'yellow' } as Tone,\n /** A location or an identifier the reader will search for. */\n ident: { color: 'cyan', bold: true } as Tone,\n /** Clean, or the thing to do. */\n good: { color: 'green' } as Tone,\n /** Structure: rules, box drawing, group frames. */\n frame: { color: 'blue' } as Tone,\n} as const\n\n/** One styled run of text. `width` pads it, in BOTH paths, so columns line up. */\nexport type Span = {\n text: string\n style?: Tone\n /** Pad to this column width. Applied once, before either path renders. */\n width?: number\n /** Text that ALREADY contains escapes (a linecraft component's own output). */\n raw?: boolean\n /**\n * Absolute path this span points at. In the STYLED path it becomes a clickable\n * terminal hyperlink; the plain path ignores it entirely, which is what keeps the\n * diffable output free of escapes and of absolute paths.\n */\n link?: string\n}\n\n/** A line is its spans. An empty array is a blank line. */\nexport type Line = Span[]\n\nexport const t = (text: string, style?: Tone, width?: number): Span =>\n ({ text, ...(style === undefined ? {} : { style }), ...(width === undefined ? {} : { width }) })\n\nexport const blank = (): Line => []\n\n/** A horizontal rule. Segmentation is what turns eighty undifferentiated lines into a\n * handful of blocks a reader can skip between. */\nexport const rule = (width: number, style: Tone = TONE.frame, char = '\u2500'): Line =>\n [{ text: char.repeat(Math.max(0, width)), style }]\n\nexport type RenderTarget = {\n /** Emit ANSI. Default false \u2014 never sniffed here; the CLI decides. */\n color?: boolean\n /** Columns. Default 80, which is also what an off-TTY stream reports as nothing. */\n width?: number\n /**\n * Emit OSC-8 terminal hyperlinks on file locations. Only meaningful with `color`,\n * since both are escape sequences. Default: on when colouring. A terminal without\n * OSC-8 support prints the URL as visible junk, so this is the escape hatch.\n */\n links?: boolean\n}\n\nexport const DEFAULT_WIDTH = 80\n\nconst padTo = (s: string, w: number): string => (s.length >= w ? s : s + ' '.repeat(w - s.length))\n\n/** The one place padding happens. Both render paths consume the result of this. */\nconst spanText = (s: Span): string => (s.width === undefined ? s.text : padTo(s.text, s.width))\n\n/**\n * The padded, trailing-trimmed spans of one line \u2014 the SINGLE source both paths read.\n *\n * Both `plain` and `render` consume exactly this, so they cannot disagree about content,\n * padding or alignment. Only what wraps each span differs.\n */\nfunction cellsOf(line: Line): Span[] {\n const cells = line.map(s => ({ ...s, text: spanText(s) })).filter(s => s.text !== '')\n // Trailing whitespace is noise in a log and makes two otherwise-identical renderings\n // compare unequal. Trim it off the END of the line, span by span.\n for (let i = cells.length - 1; i >= 0; i--) {\n const trimmed = cells[i]!.text.replace(/ +$/, '')\n cells[i]!.text = trimmed\n if (trimmed !== '') break\n cells.pop()\n }\n return cells\n}\n\n/** Plain text of a line list \u2014 the byte-stable form, produced without a terminal. */\nexport const plain = (lines: readonly Line[]): string =>\n lines.map(l => cellsOf(l).map(c => c.text).join('')).join('\\n')\n\n/**\n * The escape codes linecraft emits for a tone, learned FROM linecraft and cached.\n *\n * The alternative \u2014 a `Grid` of `Styled` cells \u2014 loses to the component's own layout:\n * `Styled` left-trims its content and the grid re-flows a long cell, so the styled line\n * ended up disagreeing with the plain one in CONTENT, which is the one divergence this\n * module exists to prevent. Asking the library what a tone looks like and wrapping\n * UNCHANGED text in it makes parity structural rather than something a test has to\n * catch: the text between the codes is byte-identical to the plain form because it is\n * the same string.\n *\n * This is not hand-rolled ANSI. No escape sequence is written down anywhere in parseman;\n * every byte of styling comes out of linecraft, once per distinct tone.\n */\nconst CODE_CACHE = new Map<string, { pre: string; post: string }>()\n\nfunction codesFor(style: Tone | undefined): { pre: string; post: string } {\n if (style === undefined) return { pre: '', post: '' }\n const key = JSON.stringify(style)\n const hit = CODE_CACHE.get(key)\n if (hit !== undefined) return hit\n const region = Region({ disableRendering: true, width: 8 })\n region.set(Styled(style, 'X'))\n const line = region.getLine(1)\n region.destroy(false)\n const at = line.indexOf('X')\n const codes = at === -1\n ? { pre: '', post: '' }\n : { pre: line.slice(0, at), post: line.slice(at + 1).replace(/ /g, '') }\n CODE_CACHE.set(key, codes)\n return codes\n}\n\n/**\n * The OSC-8 hyperlink wrapper, also learned FROM linecraft rather than written down.\n *\n * linecraft has `fileLink()`, but its package `exports` map publishes only `.` and\n * `./components`, so it cannot be imported. `CodeDebug` DOES emit one for its file\n * header, so the sequence is recovered the same way tone codes are: render the component\n * once with sentinel values and read back what it wrapped them in. If the shape ever\n * changes \u2014 or is not found \u2014 links are simply not emitted, which degrades to plain text\n * rather than to garbage on screen.\n */\nlet LINK_TEMPLATE: { pre: string; mid: string; post: string } | null | undefined\n\nfunction linkTemplate(): { pre: string; mid: string; post: string } | null {\n if (LINK_TEMPLATE !== undefined) return LINK_TEMPLATE\n const URL_SENTINEL = '/PM_LINK_URL'\n const TEXT_SENTINEL = 'PM_LINK_TEXT'\n const region = Region({ disableRendering: true, width: 120 })\n region.set(CodeDebug({\n startLine: 1, startColumn: 1, errorLine: 'x', message: 'm',\n filePath: TEXT_SENTINEL, fullPath: URL_SENTINEL, type: 'info',\n }))\n let found: { pre: string; mid: string; post: string } | null = null\n for (let i = 1; i <= region.height && found === null; i++) {\n const line = region.getLine(i)\n const u = line.indexOf(URL_SENTINEL)\n const x = line.indexOf(TEXT_SENTINEL)\n if (u === -1 || x === -1 || x < u) continue\n // Everything from the last ESC before the URL, so the whole introducer is captured.\n const start = line.lastIndexOf(ESC, u)\n if (start === -1) continue\n const after = x + TEXT_SENTINEL.length\n const endEsc = line.indexOf(ESC, after)\n if (endEsc === -1) continue\n // The closing OSC-8 runs to the terminator after the empty URL.\n const close = line.indexOf('\\\\', line.indexOf(ESC, endEsc + 1))\n if (close === -1) continue\n found = {\n pre: line.slice(start, u),\n mid: line.slice(u + URL_SENTINEL.length, x),\n post: line.slice(after, close + 1),\n }\n }\n region.destroy(false)\n LINK_TEMPLATE = found\n return found\n}\n\n/** Wrap `text` as a hyperlink to `path`. Zero-width: the visible text is unchanged, so\n * every width and alignment calculation upstream stays correct. */\nfunction linked(text: string, path: string): string {\n const tpl = linkTemplate()\n if (tpl === null) return text\n // Link the VISIBLE text only; column padding stays outside the link so a reader is\n // not clicking on empty space.\n const body = text.replace(/ +$/, '')\n const trail = text.slice(body.length)\n return `${tpl.pre}${path}${tpl.mid}${body}${tpl.post}${trail}`\n}\n\n/**\n * Lines \u2192 a string. Without colour this never constructs a Region at all, so nothing on\n * the diffable path depends on linecraft's environment detection.\n */\nexport function render(lines: readonly Line[], target: RenderTarget = {}): string {\n if (target.color !== true) return plain(lines)\n const wantLinks = target.links !== false\n return lines.map((line) => {\n // A pre-rendered component line (a code frame) already carries its own escapes.\n if (line.length === 1 && line[0]!.raw === true) return line[0]!.text\n return cellsOf(line).map((c) => {\n const { pre, post } = codesFor(c.style)\n const body = wantLinks && c.link !== undefined ? linked(c.text, c.link) : c.text\n return `${pre}${body}${post}`\n }).join('')\n }).join('\\n')\n}\n\n// linecraft's own escapes, for the one component whose plain form is not otherwise\n// reachable. Mirrors `packages/compiler/src/diagnostics.ts:246`. Built from a char code\n// so the ESC byte cannot be lost in transit the way the old constant table's was.\nconst ESC = String.fromCharCode(27)\nconst OSC8 = new RegExp(`${ESC}\\\\]8;;.*?${ESC}\\\\\\\\`, 'g')\nconst SGR = new RegExp(`${ESC}\\\\[[0-9;]*m`, 'g')\n\nexport type CodeFrame = {\n /** Path as the reader should see it \u2014 relative, so no absolute path can be diffed. */\n path: string\n /** Absolute path, used ONLY for the terminal hyperlink, which the plain form strips. */\n fullPath: string\n line: number\n column: number\n endLine?: number\n endColumn?: number\n lineBefore?: string | null\n lineText: string\n lineAfter?: string | null\n message: string\n /** Short label attached to the underline \u2014 the one sentence the caret is making. */\n shortMessage?: string\n type?: 'error' | 'warning' | 'info'\n}\n\n/**\n * A source frame with the caret under the offending span \u2014 linecraft's `CodeDebug`, the\n * same component jess renders its compiler errors with.\n *\n * Its lines come back as RAW spans: the component styles per token, which a span list\n * cannot describe, and it is already the shape a reader wants. The plain form is\n * recovered by stripping \u2014 the one place in this file that has to \u2014 and is asserted\n * escape-free and absolute-path-free by test.\n */\nexport function codeFrame(frame: CodeFrame, target: RenderTarget = {}, indent = ''): Line[] {\n const region = Region({ disableRendering: true, width: (target.width ?? DEFAULT_WIDTH) - indent.length })\n region.set(CodeDebug({\n startLine: frame.line,\n startColumn: frame.column,\n ...(frame.endLine === undefined ? {} : { endLine: frame.endLine }),\n ...(frame.endColumn === undefined ? {} : { endColumn: frame.endColumn }),\n errorLine: frame.lineText,\n lineBefore: frame.lineBefore ?? null,\n lineAfter: frame.lineAfter ?? null,\n message: frame.message,\n ...(frame.shortMessage === undefined ? {} : { shortMessage: frame.shortMessage }),\n filePath: frame.path,\n // The component links its own header. Without colour (or with links off) it is\n // handed the relative path, so no absolute path can reach the diffable output.\n fullPath: target.color === true && target.links !== false ? frame.fullPath : frame.path,\n type: frame.type ?? 'error',\n }))\n const out: Line[] = []\n for (let line = 1; line <= region.height; line++) {\n const text = region.getLine(line)\n const body = target.color === true ? text : text.replace(OSC8, '').replace(SGR, '').replace(/\\s+$/, '')\n out.push(body === '' ? [] : [{ text: indent + body, raw: target.color === true }])\n }\n region.destroy(false)\n return out\n}\n\n/** Deterministic thousands grouping \u2014 `toLocaleString()` differs between machines. */\nexport function groupDigits(n: number): string {\n const s = String(Math.trunc(Math.abs(n)))\n let out = ''\n for (let i = 0; i < s.length; i++) {\n if (i > 0 && (s.length - i) % 3 === 0) out += ','\n out += s[i]\n }\n return (n < 0 ? '-' : '') + out\n}\n\nexport const pad = padTo\n\n/** Hard-wrap on spaces at `width`, prefixing every line with `indent`. */\nexport function wrap(text: string, width: number, indent: string): string[] {\n const out: string[] = []\n for (const para of text.split('\\n')) {\n let line = ''\n for (const word of para.split(/\\s+/).filter(w => w !== '')) {\n if (line === '') line = word\n else if (line.length + 1 + word.length <= width) line += ` ${word}`\n else { out.push(indent + line); line = word }\n }\n out.push(indent + line)\n }\n return out\n}\n", "/**\n * The human layer over `GrammarDiagnosis`.\n *\n * Three layers, not two: `gating.ts`/`corpus.ts` produce data, `diagnose.ts` decides\n * `ok` (the CI verdict), and this file makes either readable. Nothing here computes a\n * finding and nothing here decides pass or fail. A gate consumes the object; a person\n * reads this. If a number appears below that is not in the report, that is a bug here.\n *\n * GROUPED BY CAUSE, NOT BY SITE\n * -----------------------------\n * The first version grouped by site: thirteen findings, each carrying its own copy of\n * the explanation, the `do` line and the `ok as-is?` line. Measured on\n * `examples/css/parser.ts`, that was three distinct explanations rendered nine times\n * across 146 lines. Density that comes from repetition is not detail \u2014 it is the same\n * sentence again, and it buries the arm tables, which are the part a reader acts on.\n *\n * A cause is now stated ONCE, given a glyph, and followed by its sites. That also\n * disposes of the question a glossary would have answered: the glyph is defined at the\n * head of the only group it labels, so there is nothing to look up. Shipping a glossary\n * AND the inline explanations would just re-create the duplication this removes.\n *\n * WHAT CARRIES MEANING\n * --------------------\n * colour \u2014 severity, and importance WITHIN a finding. Exactly one span per block is\n * the brightest thing in it; provenance and accept keys recede.\n * glyph \u2014 the cause class, so sites are scannable without reading prose.\n * rules \u2014 group boundaries, so the report is blocks rather than a paragraph.\n * columns \u2014 the arm table is aligned, so an ANY arm or an overlap is visible as a\n * shape before it is read as text.\n *\n * All of that lives in the STYLED path. The plain path is the same content with the same\n * padding and no escapes, so `docs/samples/` stays diffable and the two cannot drift.\n */\nimport { examinedNothing, type GrammarDiagnosis, type DiagnosisFinding } from './diagnose.ts'\nimport type { ChoiceCorpusCost } from './corpus.ts'\nimport {\n DEFAULT_WIDTH, TONE, blank, codeFrame, groupDigits, pad, render, rule, t, wrap,\n type Line, type RenderTarget, type Tone,\n} from './terminal.ts'\n\nexport type DiagnoseRenderOptions = RenderTarget & {\n /** Grammar label for the header. The CLI passes a cwd-relative path. */\n name?: string\n /** Sites to expand. Default 20; the report always holds all of them. */\n limit?: number\n /** Corpus cost per choice id, from `measureChoiceCost`. */\n cost?: ReadonlyMap<string, ChoiceCorpusCost>\n /** Per-arm first-set renderings per choice id, in arm order. */\n armFirstSets?: ReadonlyMap<string, readonly string[]>\n /** Per-arm leading-term labels per choice id, in arm order. */\n armLabels?: ReadonlyMap<string, readonly string[]>\n /** Absolute corpus root, used ONLY for the frame's terminal hyperlink. */\n corpusRoot?: string\n /**\n * Finding ids for which `proposeFixes` PROVED a rewrite \u2014 applied it, recompiled, and\n * re-parsed the corpus with identical output. Only these may carry the wrench. A\n * candidate that was proposed and rejected must never appear here: offering a fix that\n * does not exist would destroy the one guarantee the feature has.\n */\n fixable?: ReadonlySet<string>\n /** The command that would apply them, printed verbatim so nobody has to guess it. */\n fixCommand?: string\n}\n\nexport { groupDigits }\n\n/**\n * Cause glyphs, in assignment order.\n *\n * Deliberately distinct in SHAPE, not just in colour: a report has to stay readable for\n * a reader who cannot distinguish red from green, and in a log that has been stripped of\n * colour entirely \u2014 which is exactly what `docs/samples/` is.\n */\nconst GLYPHS = ['\u25C6', '\u25B2', '\u25CF', '\u25A0', '\u25C7', '\u25B3', '\u25CB', '\u25A1'] as const\n\n/** A short label per finding code, used in a group headline. */\nconst CODE_LABEL: Record<string, { one: string; many: string }> = {\n 'ungated-choice': {\n one: 'choice the parser cannot narrow down',\n many: 'choices the parser cannot narrow down',\n },\n 'anti-pattern': { one: 'arm that hides its first character', many: 'arms that hide their first character' },\n unanalysable: { one: 'rule parseman could not examine at all', many: 'rules parseman could not examine at all' },\n degraded: { one: 'place the compiler took a slower route', many: 'places the compiler took a slower route' },\n 'stale-accept': {\n one: 'accept-list entry that no longer matches anything',\n many: 'accept-list entries that no longer match anything',\n },\n}\n\n/**\n * The cause an anti-pattern finding belongs to, keyed by KIND.\n *\n * The finding's own message names the specific word it found, which is right for the\n * site line and wrong for the group: keying on the whole message split one cause into\n * one group per site, which is the duplication this rendering exists to remove. The\n * group says what the pattern is; the site says where and which word.\n */\nconst ANTI_KIND_BLURB: Record<string, string> = {\n 'keyword-regex':\n 'These arms match a fixed word using a regular expression. parseman cannot always tell '\n + 'from a regular expression which character it starts with, so the parser cannot skip '\n + 'the arm when that character rules it out.\\n'\n + \"To fix: write the word with word('\u2026') or keywords([\u2026]). Same match, same compiled \"\n + 'character scan, but parseman then knows the first character.',\n 'double-not':\n 'These arms use not(not(X)) \u2014 a hand-written way of saying \"X must come next, but do not '\n + 'consume it\". It hides the first character, so the arm can never be skipped, and among '\n + 'arms that share a first character it can pick the wrong one.\\n'\n + 'To fix: write peek(X). Same check, and parseman still knows the first character.',\n 'leading-not':\n 'These arms begin with not(...), which matches no text and so reveals no first character. '\n + 'The parser cannot skip the arm and enters it at every position.\\n'\n + 'To fix: put the term that actually consumes text first, and keep not(...) after it as a '\n + 'trailing boundary check.',\n}\n\n/**\n * A first set, said in words.\n *\n * `'#','*','-'-'.'` is how the model writes it and is unreadable to anyone who has not\n * met the model. What a reader needs is the sentence: this arm can only begin with these\n * characters, therefore the parser can skip it everywhere else.\n */\nfunction startsWithPhrase(fs: string): string {\n if (fs === 'ANY') return 'can start with any character'\n if (fs === '(empty)') return 'matches nothing'\n const parts = fs.split(',')\n const pretty = parts.map(x => x.replace(/'/g, '')).join(' ')\n if (parts.length === 1) return `starts with \"${pretty}\"`\n if (parts.length > 4) return `starts with ${groupDigits(parts.length)} char ranges`\n return `starts with one of ${pretty.length > 20 ? `${pretty.slice(0, 19)}\u2026` : pretty}`\n}\n\n/** The fallback explanation for a code whose findings carry no `fix:` of their own. */\nconst CODE_BLURB: Record<string, string> = {\n 'ungated-choice': 'The parser cannot tell from the next character which alternative to try, so it '\n + 'tries them in order and undoes the ones that do not match.',\n 'anti-pattern': 'The arm is written in a way that hides which character it starts with, so the parser '\n + 'cannot skip it when it cannot match.',\n unanalysable: 'parseman could not read these rules at all, so it has NO opinion about them \u2014 good or '\n + 'bad. Anything reported elsewhere is therefore incomplete.',\n degraded: 'The compiler could not use its fast route here and fell back to a slower one that produces '\n + 'the same result.',\n 'stale-accept': 'This entry in your accept list no longer matches any finding \u2014 the grammar was fixed '\n + 'and the line was left behind. Delete it.',\n}\n\ntype CauseGroup = {\n glyph: string\n /** The one-per-cause explanation. */\n text: string\n code: string\n severity: 'blocking' | 'advisory'\n findings: DiagnosisFinding[]\n}\n\n/** Every `fix:` a finding carries, in order. The first is its primary cause. */\nfunction suggestionsOf(f: DiagnosisFinding): string[] {\n const out: string[] = []\n for (const d of f.details) {\n const i = d.indexOf('\\nfix: ')\n if (i === -1) continue\n const s = d.slice(i + 6)\n if (!out.includes(s)) out.push(s)\n }\n return out\n}\n\n/**\n * Group findings by primary cause.\n *\n * A finding with two causes is listed ONCE, under its first, with the others flagged\n * inline. Listing it under both would print its arm table twice, which is the\n * duplication this grouping exists to remove.\n */\nfunction groupByCause(findings: readonly DiagnosisFinding[]): CauseGroup[] {\n const groups: CauseGroup[] = []\n const byKey = new Map<string, CauseGroup>()\n for (const f of findings) {\n // An anti-pattern's message names the specific word found at THIS site, which is\n // right for the site line and wrong for the group: keying on it split one pattern\n // into one group per site \u2014 the exact duplication this grouping removes. Key on the\n // KIND, and let the site line carry the word.\n const kind = f.code === 'anti-pattern' ? /^\\[([^\\]]+)\\]/.exec(f.message)?.[1] : undefined\n const text = suggestionsOf(f)[0]\n ?? (kind === undefined ? undefined : ANTI_KIND_BLURB[kind])\n ?? (f.code === 'anti-pattern' ? f.message.replace(/^\\[[^\\]]+\\]\\s*/, '') : undefined)\n ?? CODE_BLURB[f.code]\n ?? f.message\n // JSON, not a delimiter character: a raw separator inside a template literal made\n // this file binary to git once already (see 9dab15d), and a printable one can still\n // collide with the text it separates.\n const key = JSON.stringify([f.code, kind ?? text])\n let g = byKey.get(key)\n if (g === undefined) {\n g = { glyph: '', text, code: f.code, severity: f.severity, findings: [] }\n byKey.set(key, g)\n groups.push(g)\n }\n g.findings.push(f)\n }\n groups.forEach((g, i) => { g.glyph = GLYPHS[i] ?? String.fromCharCode(65 + i) })\n return groups\n}\n\n/** The lines a diagnosis renders to \u2014 data, so a caller can compose them into a larger\n * report without going through a string. */\nexport function diagnosisLines(d: GrammarDiagnosis, opts: DiagnoseRenderOptions = {}): Line[] {\n const limit = opts.limit ?? 20\n const name = opts.name ?? 'grammar'\n const width = opts.width ?? DEFAULT_WIDTH\n const s = d.summary\n const out: Line[] = []\n\n // SUCCESS IS TWO LINES. It is the rendering people see most, and the one usually\n // neglected into a wall of zero-valued tables.\n if (d.ok && s.unanalysable === 0) {\n const parts = [`${groupDigits(s.gated)}/${groupDigits(s.totalChoices)} choices gate on first char`]\n if (s.recoverable > 0) parts.push(`${groupDigits(s.recoverable)} recoverable`)\n if (s.accepted > 0) parts.push(`${groupDigits(s.accepted)} accepted`)\n if (s.deferred > 0) parts.push(`${groupDigits(s.deferred)} deferred to the fusing artifact`)\n if (s.staleAccepts > 0) parts.push(`${groupDigits(s.staleAccepts)} stale accept line(s) to prune`)\n out.push([t('\u2713 ', TONE.good), t(name, TONE.strong), t(' \u2014 nothing to fix', TONE.good)])\n out.push([t(` ${parts.join(' \u00B7 ')}`, TONE.quiet)])\n return out\n }\n\n // NOTHING WAS EXAMINED. Rendered as its own report, not as the finding report with a\n // warning bolted on. The finding report's every sentence \u2014 \"N problems\", \"underlying\n // cause\", \"fixing one fixes every choice listed under it\", \"none of this is a\n // correctness bug\" \u2014 is a claim about defects parseman FOUND, and there are none:\n // there is one blocking finding per rule it could not read. Printed over an opaque\n // artifact that produced `176 problems, 176 failing the check, 1 cause`, which reads\n // as 176 discovered defects and means the tool inspected zero choices.\n if (examinedNothing(d)) return unexaminedLines(d, name, width, limit)\n\n const groups = groupByCause(d.findings)\n const blocking = d.findings.filter(f => f.severity === 'blocking')\n /** Findings that are things parseman FOUND \u2014 never the rules it could not read. */\n const problems = d.findings.length - s.unanalysable\n\n out.push([\n t('\u2717 ', TONE.loud),\n t(name, TONE.strong),\n t(' \u2014 ', TONE.quiet),\n // `findings` and `totalChoices` count different things \u2014 an anti-pattern is a\n // finding about an ARM, not a choice \u2014 so they must not be phrased as a ratio. They\n // were, and a two-arm grammar reported \"3 of 1 choices\".\n //\n // `unanalysable` is excluded from the problem count on purpose: it is not something\n // parseman FOUND in the grammar, it is a rule parseman could not look at. Counting\n // the two together is what let a report that inspected nothing print a confident\n // problem tally. It is stated separately, on the PARTIAL line below.\n t(`${groupDigits(problems)} problem${problems === 1 ? '' : 's'} `\n + `in ${groupDigits(s.totalChoices)} choice${s.totalChoices === 1 ? '' : 's'}`, TONE.loud),\n ])\n out.push([\n t(' '),\n t(`${groupDigits(groups.length)} underlying cause${groups.length === 1 ? '' : 's'}`, TONE.strong),\n t(groups.length < d.findings.length ? '; fixing one fixes every choice listed under it.' : '.', TONE.quiet),\n ])\n for (const l of wrap(\n (s.gated > 0\n ? `${groupDigits(s.gated)} other choice${s.gated === 1 ? '' : 's'} already `\n + `${s.gated === 1 ? 'picks' : 'pick'} the right `\n + 'alternative straight from the next character. '\n : '')\n + 'None of this is a correctness bug \u2014 the grammar parses the same either way; it is work '\n + 'the parser does and did not need to.',\n width - 2, ' ')) out.push([t(l, TONE.faint)])\n // Unanalysable is called out at the top as well as in its group: \"no findings\" over a\n // grammar that was never walked is precisely the failure being reported.\n if (s.unanalysable > 0) {\n out.push([t(` PARTIAL \u2014 ${groupDigits(s.unanalysable)} rule(s) could not be examined; `\n + 'an empty list below does NOT mean the grammar is clean.', TONE.warn)])\n }\n\n // ONE definition of the only term of art that survives, placed immediately before the\n // first table that uses it. A reader meets `arm` here and nowhere earlier.\n let defined = false\n\n let shown = 0\n for (const g of groups) {\n const tone: Tone = g.severity === 'blocking' ? TONE.bad : TONE.warn\n out.push(blank())\n out.push(rule(width, TONE.frame))\n const fixableHere = g.findings.filter(f => opts.fixable?.has(f.id) === true).length\n out.push([\n t(` ${g.glyph} `, tone),\n t(`${groupDigits(g.findings.length)} `\n + `${g.findings.length === 1 ? CODE_LABEL[g.code]?.one ?? g.code : CODE_LABEL[g.code]?.many ?? g.code}`,\n TONE.strong),\n t(g.severity === 'blocking' ? ' fails the check' : ' worth knowing', TONE.faint),\n ])\n for (const l of wrap(g.text, width - 6, '')) out.push([t(' '), t(l, TONE.quiet)])\n if (!defined) {\n defined = true\n out.push(blank())\n out.push([t(' Each numbered line below is one alternative of a choice \u2014 an \"arm\" \u2014 in the',\n TONE.faint)])\n out.push([t(' order the parser tries them.', TONE.faint)])\n }\n out.push(blank())\n\n // ONE site per cause is expanded \u2014 its full arm ordering, and the corpus frame that\n // illustrates the cause. The rest are a table: the same shape repeated thirteen\n // times is what made the first version unreadable, and a reader who needs another\n // site's ordering asks for it by id. `--limit` still governs how many are listed.\n // +2 so the longest cell in a column still has a gap after it. Without it the\n // widest row runs its term straight into the annotation, which is exactly the kind\n // of ragged table this pass exists to remove.\n const idW = Math.min(30, Math.max(...g.findings.map(f => f.id.length))) + 2\n const headW = Math.min(34, Math.max(...g.findings.map(f => headlineOf(f, opts).term.length))) + 2\n let expanded = false\n for (const f of g.findings) {\n if (shown >= limit) break\n shown++\n // Expand only when there IS an ordering to show. An anti-pattern finding names one\n // arm and has no table, so an \"expanded\" version of it is just a lonelier line.\n if (!expanded && opts.armFirstSets?.get(f.id) !== undefined) {\n expanded = true\n out.push(...siteLines(f, g, opts, true).lines)\n if (g.findings.length > 1) out.push(blank())\n continue\n }\n const h = headlineOf(f, opts)\n out.push([\n t(` ${g.glyph} `, tone),\n t(f.id, TONE.ident, idW),\n t(h.arm, TONE.faint, 8),\n t(h.term, TONE.strong, headW),\n t(h.note, h.loud ? TONE.loud : TONE.faint),\n // LAST, always: the wrench is an emoji and may occupy two terminal columns, so\n // nothing may be aligned after it.\n t(opts.fixable?.has(f.id) === true ? ' \uD83D\uDD27 fixable' : '', TONE.good),\n ])\n }\n if (shown >= limit) break\n }\n\n if (shown < d.findings.length) {\n out.push(blank())\n out.push([t(` \u2026 ${groupDigits(d.findings.length - shown)} more site(s) \u2014 `, TONE.quiet),\n t(`--limit ${d.findings.length}`, TONE.strong),\n t(' shows them, --json holds them all', TONE.quiet)])\n }\n\n // ONE accept line, carrying the whole set. A reader who wants to accept these wants a\n // single pasteable thing, not one line per site saying the same thing differently.\n if (!d.ok && d.acceptSnapshot.length > 0) {\n out.push(blank())\n out.push(rule(width, TONE.frame))\n const snap = `{ accept: [${d.acceptSnapshot.map(i => `'${i}'`).join(', ')}] }`\n out.push([t(' Meant to be this way? Pass this and they stop being reported:', TONE.quiet)])\n for (const l of wrap(snap, width - 3, '')) out.push([t(' '), t(l, TONE.faint)])\n }\n\n // THE FOOTER, in a linter's shape and for a linter's reason: after a hundred lines the\n // header has scrolled away, and the last thing on screen is what a person actually\n // reads. It carries the tally, the exit code IN WORDS (the number is for the gate, the\n // sentence is for the human) and \u2014 only when a rewrite has actually been proved \u2014 the\n // exact command that applies it.\n out.push(blank())\n const fixCount = opts.fixable?.size ?? 0\n const parts = [\n `${groupDigits(problems)} problem${problems === 1 ? '' : 's'}`,\n `${groupDigits(blocking.length - s.unanalysable)} failing the check`,\n `${groupDigits(groups.length)} cause${groups.length === 1 ? '' : 's'}`,\n // Never folded into the tally above. A rule that could not be read is a hole in the\n // measurement, and a footer is the last thing a reader sees.\n ...(s.unanalysable > 0 ? [`${groupDigits(s.unanalysable)} rule(s) NOT examined`] : []),\n ]\n out.push([\n t('\u2717 ', TONE.loud),\n t(parts.join(', '), TONE.strong),\n t(` \u00B7 exiting 1 (problems found)`, TONE.faint),\n ])\n if (fixCount > 0 && opts.fixCommand !== undefined) {\n out.push([t(' \uD83D\uDD27 ', TONE.good),\n t(`${groupDigits(fixCount)} of them can be fixed automatically. Run:`, TONE.good)])\n for (const l of wrap(opts.fixCommand, width - 6, '')) out.push([t(' '), t(l, TONE.strong)])\n for (const l of wrap('Each change is applied, the parser rebuilt and your files parsed again '\n + 'before it is offered, so nothing is suggested that has not been checked.',\n width - 6, '')) out.push([t(' '), t(l, TONE.faint)])\n }\n return out\n}\n\n/** What each `Unanalysable.kind` means and what the reader can do about it. Stated once\n * per kind, at the head of the group it labels \u2014 the same rule the cause groups follow. */\nconst KIND_BLURB: Record<string, string> = {\n 'fused-rule':\n 'These rules are compiled functions. Fusion lowers every rule to executable code and '\n + 'discards the combinator graph, so there is nothing left to read.\\n'\n + 'To analyse them: point this at the grammar SOURCE, or at a grammar value that still '\n + 'carries its IR (a rules() map, or a compose() result \u2014 those keep their pieces).',\n 'opaque-artifact':\n 'These rules come from a precompiled artifact that carries rule functions rather than '\n + 're-lowerable IR, so its choices cannot be examined.\\n'\n + 'To analyse them: recompile the contributing grammar so it carries IR \u2014 the macro '\n + 'emits IR by default.',\n 'not-a-combinator':\n 'The value handed to parseman was not a grammar it knows how to walk.\\n'\n + 'To analyse it: pass a combinator, a rules() map, a compose() result, or name the '\n + 'export that holds one with --export.',\n}\n\n/**\n * The report for a run that examined NOTHING.\n *\n * Deliberately not the finding report with a banner on top. Everything that report says\n * is a claim about defects found \u2014 the tally, the \"underlying cause\", the \"fixing one\n * fixes every choice listed under it\", the \"none of this is a correctness bug\". None of\n * it is true here, and printed together they read as a confident audit of a grammar the\n * tool never opened.\n */\nfunction unexaminedLines(\n d: GrammarDiagnosis, name: string, width: number, limit: number,\n): Line[] {\n const out: Line[] = []\n const items = d.gating.unanalysable\n out.push([t('\u2717 ', TONE.loud), t(name, TONE.strong), t(' \u2014 ', TONE.quiet),\n t('COULD NOT ANALYSE', TONE.loud)])\n out.push([t(` 0 choices examined \u00B7 ${groupDigits(items.length)} `\n + `rule${items.length === 1 ? '' : 's'} unreadable`, TONE.warn)])\n for (const l of wrap(\n 'parseman has NO verdict about this grammar \u2014 not \"clean\", not \"problems\". Every line '\n + 'below is a rule it could not read, not a defect it found.',\n width - 2, ' ')) out.push([t(l, TONE.faint)])\n\n // Grouped by KIND: the kind is what a reader acts on, and one artifact usually\n // contributes hundreds of rules for one reason.\n const byKind = new Map<string, typeof items[number][]>()\n for (const u of items) {\n const g = byKind.get(u.kind)\n if (g === undefined) byKind.set(u.kind, [u])\n else g.push(u)\n }\n let shown = 0\n for (const [kind, group] of byKind) {\n out.push(blank())\n out.push(rule(width, TONE.frame))\n out.push([\n t(' \u25A0 ', TONE.warn),\n t(`${groupDigits(group.length)} rule${group.length === 1 ? '' : 's'} could not be read`, TONE.strong),\n t(` [${kind}]`, TONE.faint),\n ])\n for (const l of wrap(KIND_BLURB[kind] ?? group[0]!.reason, width - 6, '')) {\n out.push([t(' '), t(l, TONE.quiet)])\n }\n out.push(blank())\n for (const u of group) {\n if (shown >= limit) break\n shown++\n out.push([t(' '), t(u.rule, TONE.ident)])\n }\n if (shown >= limit) break\n }\n if (shown < items.length) {\n out.push(blank())\n out.push([t(` \u2026 ${groupDigits(items.length - shown)} more \u2014 `, TONE.quiet),\n t(`--limit ${items.length}`, TONE.strong), t(' shows them, --json holds them all', TONE.quiet)])\n }\n\n out.push(blank())\n // The exit code IN WORDS, and it is 2 \u2014 not 1. 1 means \"measured, and it failed\";\n // this run did not measure. See the CLI's exit-code contract.\n out.push([t('\u2717 ', TONE.loud),\n t(`could not analyse \u2014 0 of ${groupDigits(items.length)} rule(s) examined`, TONE.strong),\n t(' \u00B7 exiting 2 (analysis did not run)', TONE.faint)])\n return out\n}\n\nexport function renderDiagnosis(d: GrammarDiagnosis, opts: DiagnoseRenderOptions = {}): string {\n return render(diagnosisLines(d, opts), opts)\n}\n\n/**\n * The one arm a site is about, for the compact table rows.\n *\n * A reader scanning a group needs the site's NAME and the term that poisons it; the full\n * ordering only matters once they start editing that rule, and the expanded exemplar\n * above shows what that ordering looks like for this cause.\n */\nfunction headlineOf(f: DiagnosisFinding, opts: DiagnoseRenderOptions): {\n arm: string; term: string; note: string; loud: boolean\n} {\n const sets = opts.armFirstSets?.get(f.id)\n const labels = opts.armLabels?.get(f.id)\n const cost = opts.cost?.get(f.id)\n const anyIdx = sets?.findIndex(x => x === 'ANY') ?? -1\n if (anyIdx >= 0) {\n const c = cost?.arms[anyIdx]\n return {\n arm: `arm ${anyIdx}`,\n term: (labels?.[anyIdx] ?? '').slice(0, 34),\n note: c === undefined\n ? 'any character \u2014 never skippable'\n : `same \u2014 tried at all ${groupDigits(c.positions)}`,\n loud: true,\n }\n }\n const overlap = f.details.map(d => d.split('\\n')[0]!).find(x => x.includes('overlap on'))\n if (overlap !== undefined) {\n const m = /arm\\[(\\d+)\\] \u2229 arm\\[(\\d+)\\] overlap on (.*)$/.exec(overlap)\n if (m !== null) {\n return { arm: `arm ${m[1]}`, term: `and arm ${m[2]}`, note: `can both start with ${m[3]}`, loud: false }\n }\n }\n const m = /^(.*)#arm(\\d+)$/.exec(f.id)\n if (m !== null) {\n // The specific thing found at THIS site \u2014 the word, from the finding's own message.\n const word = /`([^`]+)`/.exec(f.message)?.[1]\n return { arm: `arm ${m[2]}`, term: `of ${m[1]}`, note: word === undefined ? '' : `matches \\`${word}\\``, loud: false }\n }\n return { arm: '', term: '', note: f.message.split('\\n')[0]!.slice(0, 40), loud: false }\n}\n\n/** One site under its cause: the arm ordering, and nothing the group already said. */\nfunction siteLines(\n f: DiagnosisFinding,\n g: CauseGroup,\n opts: DiagnoseRenderOptions,\n wantFrame: boolean,\n): { lines: Line[]; framed: boolean } {\n const out: Line[] = []\n const cost = opts.cost?.get(f.id)\n const sets = opts.armFirstSets?.get(f.id)\n const labels = opts.armLabels?.get(f.id)\n let framed = false\n\n out.push([\n t(` ${g.glyph} `, f.severity === 'blocking' ? TONE.bad : TONE.warn),\n t(f.id, TONE.ident),\n t(cost === undefined\n ? ''\n : ` \u2014 reached at ${groupDigits(cost.positions)} places in your corpus`,\n TONE.faint),\n t(suggestionsOf(f).length > 1 ? ' (+ another cause)' : '', TONE.warn),\n t(opts.fixable?.has(f.id) === true ? ' \uD83D\uDD27 fixable' : '', TONE.good),\n ])\n\n // WORLD 1 \u2014 the grammar site: the ordering, one column per meaning. This is the part\n // worth keeping per site; everything that used to surround it was the repetition.\n if (sets !== undefined) {\n const lw = Math.min(26, Math.max(8, ...(labels ?? ['']).map(l => l.length)))\n sets.forEach((fs, i) => {\n const armCost = cost?.arms[i]\n const any = fs === 'ANY'\n // Every column says what it MEANS. `'('` and `ANY` were the model's vocabulary,\n // not a sentence: a reader had to already know what a first-set was to read them.\n const starts = startsWithPhrase(fs)\n const note = armCost === undefined\n ? ''\n : any\n ? `\u2192 tried at all ${groupDigits(cost!.positions)}`\n : `\u2192 could match at ${groupDigits(armCost.positions)}`\n out.push([\n t(' ', undefined),\n t(`arm ${pad(String(i), 2)}`, any ? TONE.bad : TONE.faint, 8),\n t(' '),\n t((labels?.[i] ?? '').slice(0, lw), any ? TONE.strong : TONE.quiet, lw),\n t(' '),\n t(starts, any ? TONE.loud : TONE.quiet, 29),\n t(note, any ? TONE.loud : TONE.faint),\n ])\n })\n }\n // THE CONSEQUENCE, spelled out. The table above is an observation; this is why the\n // reader should care, and it is the entire point of the tool.\n if (sets !== undefined && cost !== undefined) {\n const anyIdx = sets.findIndex(x => x === 'ANY')\n if (anyIdx >= 0) {\n for (const l of wrap(\n `Because arm ${anyIdx} can begin with any character, no single-character test can rule it `\n + `out. At all ${groupDigits(cost.positions)} of those places the parser has to enter it \u2014 set `\n + 'up, try, undo \u2014 instead of skipping it for nothing.',\n (opts.width ?? DEFAULT_WIDTH) - 7, '')) out.push([t(' '), t(l, TONE.quiet)])\n }\n }\n\n // Overlaps name a PAIR, which the arm table alone does not show.\n for (const detail of f.details) {\n const first = detail.split('\\n')[0]!\n if (first.includes('overlap on')) {\n const m = /arm\\[(\\d+)\\] \u2229 arm\\[(\\d+)\\] overlap on (.*)$/.exec(first)\n const text = m === null\n ? first\n : `arm ${m[1]} and arm ${m[2]} can both start with ${m[3]}, so that character cannot tell `\n + 'the parser which to try'\n for (const l of wrap(text, (opts.width ?? DEFAULT_WIDTH) - 7, '')) out.push([t(' '), t(l, TONE.warn)])\n }\n else if (sets === undefined && !detail.includes('\\nfix: ')) {\n for (const l of wrap(first, (opts.width ?? DEFAULT_WIDTH) - 6, '')) out.push([t(' '), t(l)])\n }\n }\n\n // WORLD 2 \u2014 the input that pays for it, drawn once per cause. Point at a place a REAL\n // arm wants, not at byte 0: an ANY arm's \"first site\" is always the first character of\n // the corpus, which tells the reader nothing.\n if (wantFrame && cost !== undefined) {\n const broad = cost.arms.find(a => a.any)\n const concrete = cost.arms.find(a => !a.any && a.firstSite !== undefined)\n const site = (concrete ?? cost.arms.find(a => a.firstSite !== undefined))?.firstSite\n if (site !== undefined) {\n out.push(...codeFrame({\n path: site.sample,\n fullPath: opts.corpusRoot === undefined ? site.sample : `${opts.corpusRoot}/${site.sample}`,\n line: site.line,\n column: site.column,\n lineText: site.lineText.replace(/\\t/g, ' '),\n message: broad === undefined\n ? 'one of those places in your corpus'\n : `one of the ${groupDigits(cost.positions)} places, in your own input`,\n shortMessage: broad !== undefined && concrete !== undefined\n ? `arm ${concrete.index} matches here; arm ${broad.index} is entered first anyway`\n : 'the first place in your corpus this choice is reached',\n type: 'warning',\n }, opts, ' '))\n framed = true\n }\n }\n return { lines: out, framed }\n}\n", "/**\n * The SECOND world.\n *\n * A type error has one source to point at. A grammar finding has two \u2014 the ordered\n * choice whose arms cost the time, and the input that pays for it \u2014 and relating them is\n * the whole diagnostic. `gating.ts` owns the first world and is entirely static. This\n * module owns the second, and it is deliberately the smallest honest thing that can be\n * said about a corpus without instrumenting a parse.\n *\n * WHAT IS MEASURED, EXACTLY\n * -------------------------\n * For a choice, every corpus POSITION whose character is in some arm's first set. That\n * is a count of characters, not of times the choice was reached, and the difference\n * matters: a choice nested three rules deep is reached far less often than its first\n * characters occur. So the number is reported as what it is \u2014 an upper bound on entries,\n * derived from the same first sets the compiler dispatches on \u2014 and never as \"this\n * choice ran N times\". Naming it precisely is what keeps it useful; a number that\n * overstates itself is worse than no number, because the reader stops trusting all of\n * them.\n *\n * The one thing this DOES settle, exactly and without any modelling: an arm whose first\n * set is ANY is entered at every one of those positions, because no first character can\n * exclude it. That is the cost the fix removes, and it is arithmetic, not a guess.\n *\n * Determinism: counts and the located example are a pure function of (report, corpus).\n * No timings, no paths beyond the caller's own sample names.\n */\nimport type { Combinator, FirstSet } from '../types.ts'\nimport { firstSetOf } from '../combinators/first-set.ts'\nimport type { ChoiceGating } from './gating.ts'\n\nexport type CorpusSample = { name: string; text: string }\n\n/** A located input position: the caller's sample name plus 1-based line/column. */\nexport type CorpusSite = {\n sample: string\n line: number\n column: number\n /** The source line, untrimmed, for a caret rendering. */\n lineText: string\n}\n\nexport type ArmCorpusCost = {\n index: number\n /** ANY first set \u2014 no character excludes this arm. */\n any: boolean\n /**\n * Corpus positions whose character this arm's first set accepts. For an `any` arm this\n * equals the choice total, which is the point.\n */\n positions: number\n /** The first such position, for the two-world rendering. Absent when there are none. */\n firstSite?: CorpusSite\n}\n\nexport type ChoiceCorpusCost = {\n choiceId: string\n /** Positions whose character SOME arm accepts \u2014 the choice's own reach, bounded. */\n positions: number\n /** Every position in the corpus, so a share can be read. */\n corpusPositions: number\n arms: ArmCorpusCost[]\n}\n\nconst inSet = (fs: FirstSet, cp: number): boolean => {\n if (fs.kind === 'any') return true\n if (fs.kind === 'empty') return false\n for (const r of fs.ranges) if (cp >= r.lo && cp <= r.hi) return true\n return false\n}\n\nfunction siteAt(samples: readonly CorpusSample[], flatIndex: number): CorpusSite {\n let i = flatIndex\n for (const s of samples) {\n if (i < s.text.length) {\n let line = 1\n let lineStart = 0\n for (let j = 0; j < i; j++) if (s.text.charCodeAt(j) === 10) { line++; lineStart = j + 1 }\n let lineEnd = s.text.indexOf('\\n', lineStart)\n if (lineEnd === -1) lineEnd = s.text.length\n return { sample: s.name, line, column: i - lineStart + 1, lineText: s.text.slice(lineStart, lineEnd) }\n }\n i -= s.text.length\n }\n return { sample: '<eof>', line: 0, column: 0, lineText: '' }\n}\n\n/**\n * Measure one choice against a corpus. `choice.anyArms` already knows which arms are\n * broad; this adds how much input that costs.\n */\nexport function measureChoiceCost(c: ChoiceGating, samples: readonly CorpusSample[], arms: readonly { firstSet: FirstSet }[]): ChoiceCorpusCost {\n const counts = arms.map(() => 0)\n const first = arms.map<number>(() => -1)\n let positions = 0\n let corpusPositions = 0\n let flat = 0\n for (const s of samples) {\n for (let i = 0; i < s.text.length; i++) {\n const cp = s.text.charCodeAt(i)\n let hitAny = false\n for (let a = 0; a < arms.length; a++) {\n if (inSet(arms[a]!.firstSet, cp)) {\n counts[a]!++\n if (first[a] === -1) first[a] = flat + i\n hitAny = true\n }\n }\n if (hitAny) positions++\n }\n flat += s.text.length\n corpusPositions += s.text.length\n }\n return {\n choiceId: c.id,\n positions,\n corpusPositions,\n arms: arms.map((a, i) => ({\n index: i,\n any: a.firstSet.kind === 'any',\n positions: counts[i]!,\n ...(first[i]! >= 0 ? { firstSite: siteAt(samples, first[i]!) } : {}),\n })),\n }\n}\n\n/** The per-arm first sets a choice dispatches on, in arm order. */\nexport function armFirstSets(choiceArms: readonly Combinator<unknown>[]): { firstSet: FirstSet }[] {\n return choiceArms.map(a => ({ firstSet: firstSetOf(a) }))\n}\n", "/**\n * The canonical projection and the hashing the identity oracle is built on.\n *\n * Everything here exists to make ONE claim trustworthy: \"this grammar change did\n * not move the tree.\" That claim is only worth as much as the projection behind\n * it, so the rules below are stated rather than left to `JSON.stringify`, which\n * silently collapses several distinctions a grammar refactor can actually move:\n *\n * | value | `JSON.stringify` | here |\n * |------------------------|------------------|-----------------|\n * | `{ a: undefined }` | `{}` | distinct from `{}` |\n * | `NaN` / `\u00B1Infinity` | `null` | each distinct |\n * | `-0` | `0` | distinct from `0` |\n * | `new Map([[1, 2]])` | `{}` | entries, in order |\n * | `new Set([1])` | `{}` | members, in order |\n * | `new Foo({ x: 1 })` | `{\"x\":1}` | tagged `Foo` |\n *\n * A refactor that starts emitting `undefined` where it used to omit a key, or\n * that swaps one node class for another with the same fields, is a tree move.\n * An oracle that cannot see it is worse than no oracle, because it certifies.\n *\n * ## Key order does not matter; array and Map/Set order does\n *\n * Object keys are sorted, so property INSERTION order \u2014 which a refactor churns\n * constantly and which no consumer observes \u2014 never moves a digest. Array\n * elements and Map/Set entries keep their order, because those orders are the\n * output.\n *\n * ## Sharing is not a cycle\n *\n * A node reachable by two paths is written out twice, in full. Only a genuine\n * back-edge into the CURRENT path is abbreviated, and it records the DISTANCE to\n * the ancestor it points at, so a self-reference and a reference to the root are\n * different digests. (Marking every repeat as a cycle \u2014 the easy version \u2014 makes\n * the digest depend on traversal order for any DAG, which parse trees with\n * interned or shared subtrees routinely are.)\n *\n * The cost of that choice is stated plainly, because it has now bitten a\n * consumer: writing a shared subtree once per PATH is EXPONENTIAL in sharing\n * depth. A node referenced from two places at each of `d` levels is written\n * `2^d` times. See {@link DEFAULT_MAX_VISITS} for the backstop and for why the\n * obvious fix is a format change rather than a patch.\n *\n * ## Own ENUMERABLE keys only\n *\n * `Object.keys`, deliberately, not `getOwnPropertyNames`. The oracle answers \"did\n * the OUTPUT move\" and non-enumerable properties are engine bookkeeping a\n * consumer never sees \u2014 parseman's own carried CST pieces among them. Hashing\n * them would make a consumer's grammar digest move when parseman's internals\n * change, which is precisely the wrong sensitivity for a grammar-refactor gate.\n *\n * ## Tokens, not concatenation\n *\n * Every value writes one or more self-contained tokens joined by NUL. Writing\n * `#1` then `#2` into a single buffer would be indistinguishable from `#12`; a\n * projection with an ambiguity in it is a projection that can be made to lie.\n * Strings are JSON-escaped, so no token can contain a raw NUL.\n *\n * ## The projection is streamed, never materialised\n *\n * {@link digestInto} walks a value and pushes the token stream at a caller-owned\n * hash. Nothing accumulates, so there is no maximum-string-length ceiling and no\n * corpus size at which the digest stops being takeable. {@link canonicalize}\n * still builds the string, because reading it is its entire purpose \u2014 but it is\n * a debugging aid, not the path a gate runs on.\n */\nimport { createHash } from 'node:crypto'\n\n/**\n * Bump when the token grammar below changes in a way that alters output for any\n * input. It is a coarse, human-readable companion to the behavioural harness\n * digest \u2014 the harness digest is what actually enforces this, but a reader\n * comparing two reports should not have to diff hex to see that the format moved.\n */\nexport const DIGEST_FORMAT = 1\n\n/**\n * The token separator, in one place.\n *\n * {@link canonicalize} joins with it and {@link StreamSink} interleaves it, and\n * they MUST agree \u2014 the equality of those two byte streams is what lets a\n * streamed digest reproduce one taken from the string form. Sharing the constant\n * is how that stops being a thing anyone has to remember.\n */\nconst SEPARATOR = String.fromCharCode(0)\n\nconst str = (s: string): string => JSON.stringify(s)\n\nconst tagOf = (v: object): string => {\n const ctor = (v as { constructor?: unknown }).constructor\n return typeof ctor === 'function' && typeof ctor.name === 'string' ? ctor.name : ''\n}\n\n/**\n * Where canonical tokens go.\n *\n * Two implementations describing the SAME byte stream: {@link ArraySink}\n * materialises it, {@link StreamSink} pushes it at a hash and forgets it.\n */\ntype CanonicalSink = {\n push(token: string): void\n}\n\n/** Collects tokens so {@link canonicalize} can join them. */\nclass ArraySink implements CanonicalSink {\n readonly tokens: string[] = []\n\n push(token: string): void {\n this.tokens.push(token)\n }\n}\n\n/**\n * Anything that absorbs a stream of text. Node's `crypto.Hash` satisfies it, and\n * so does a three-line test double.\n *\n * The CALLER supplies this, and therefore owns the algorithm and the result.\n * Deciding what the canonical byte stream IS depends on parseman's node shapes\n * and on nothing else; deciding that you wanted sha256-hex does not.\n */\nexport type DigestTarget = {\n update(chunk: string): void\n}\n\n/**\n * Pushes the canonical token stream at a {@link DigestTarget} without ever\n * materialising it.\n *\n * The bytes written are exactly what {@link canonicalize} would have returned \u2014\n * the separator goes BETWEEN tokens, never after \u2014 so hashing either gives the\n * same digest. That equality is not an implementation detail, it is the entire\n * safety argument for streaming: every digest ever recorded stays reproducible.\n * `test/unit/oracle-digest.test.ts` asserts it directly over the canary shapes.\n *\n * Tokens are buffered and flushed in blocks rather than written one at a time:\n * one `update()` per token is a call into native code per AST node. Flushing\n * only ever happens at a token boundary and tokens are whole JS strings, so a\n * surrogate pair can never be split across two `update()` calls \u2014 which would\n * encode to different UTF-8 bytes than the joined string does.\n */\nclass StreamSink implements CanonicalSink {\n private readonly target: DigestTarget\n private buffer: string[] = []\n private buffered = 0\n private started = false\n\n constructor(target: DigestTarget) {\n this.target = target\n }\n\n /**\n * Write text that is NOT a canonical token and takes no separator \u2014 the\n * `OK:` / `ERR:` discriminator, which the string form concatenates onto the\n * front rather than joining.\n */\n prefix(text: string): void {\n if (text === '') return\n this.buffer.push(text)\n this.buffered += text.length\n }\n\n push(token: string): void {\n if (this.started) {\n this.buffer.push(SEPARATOR)\n this.buffered += 1\n } else {\n this.started = true\n }\n this.buffer.push(token)\n this.buffered += token.length\n if (this.buffered >= FLUSH_CHARS) this.flush()\n }\n\n flush(): void {\n if (this.buffer.length === 0) return\n this.target.update(this.buffer.join(''))\n this.buffer = []\n this.buffered = 0\n }\n}\n\n/**\n * How much token text to accumulate before handing a block to the target. Large\n * enough that per-call overhead disappears, small enough that the extra live\n * memory is a rounding error next to the tree being walked.\n */\nconst FLUSH_CHARS = 1 << 16\n\n/**\n * Raised when a walk exceeds its visit budget.\n *\n * A distinct class, and deliberately NOT an ordinary `Error` a caller might\n * lump in with a parse failure: this says the TOOL gave up, which is the\n * opposite of a fact about the grammar.\n */\nexport class CanonicalBudgetError extends Error {\n override readonly name = 'CanonicalBudgetError'\n\n constructor(budget: number, projected?: number) {\n super(\n `canonicalize: exceeded ${budget} visits. The value is not merely large \u2014 it is almost certainly a DAG being `\n + 'unrolled. This projection writes a shared subtree once per PATH that reaches it (see \"Sharing is not a '\n + 'cycle\"), so a node referenced from two places at each of d levels costs 2^d. Deduplicate the shared '\n + 'structure, or raise `maxVisits` if the value really is that big.'\n + (projected === undefined\n ? ''\n : ` Refused EARLY: the walk was projected to visit ${projected} objects, so it could not have finished `\n + 'under this budget however long it ran. See {@link projectVisits}.'),\n )\n }\n}\n\n/**\n * Default visit budget.\n *\n * A backstop against unbounded work, not a correctness feature. Any walk that\n * finishes under budget writes exactly the bytes it always did, so this cannot\n * move a recorded digest \u2014 which is the only reason it can be added to a shipped\n * format at all.\n *\n * It is NOT a fix for the underlying asymmetry. The fix is to dedupe by node\n * IDENTITY instead of by ancestor path, and that rewrites the byte stream for\n * every value with any sharing in it: `{ left: shared, right: shared }` stops\n * being two full writes and becomes a back-reference. That invalidates every\n * digest, every committed baseline, and {@link DIGEST_FORMAT} itself. It is a\n * format decision for the owner, not something to slip in behind a bug fix.\n *\n * ## The tempting middle road does not exist\n *\n * Stated because it looks obviously right and is obviously right about the wrong\n * thing: memoise the canonical BYTES of a subtree by node identity, splice the\n * cached bytes in at each of the two places, and you get the identical output\n * with the work done once. It is sound \u2014 a subtree's bytes depend only on the\n * subtree, except for a back-edge leaving it, which is exactly the case\n * {@link projectVisits} declines \u2014 and it does not help.\n *\n * It does not help because the walk is ALREADY linear in its own output, and it\n * is the OUTPUT that is exponential: a depth-`d` two-way unroll writes 33\u00B72^d\n * chars, measured, and every one of them has to reach the hash. Caching removes\n * re-derivation, of which there is a constant factor's worth; it cannot remove\n * bytes the format requires. At depth 40 that is 36 TB of canonical text \u2014 7\n * hours of sha256 at the 1.37 Gchar/s this machine manages, with traversal,\n * allocation and splicing all free. Depth 40 has no answer to compute quickly.\n * There is only refusing quickly, which is what the probe does.\n */\nexport const DEFAULT_MAX_VISITS = 100_000_000\n\n/**\n * Object visits to spend before the walk stops to ask whether it can possibly\n * finish. Zero cost below it, so nothing a gate actually digests ever pays.\n *\n * A million visits is ~0.4s of walking on the machine this was measured on \u2014\n * far past any real parse tree, far short of the 49 SECONDS an exponential\n * unroll used to spend before {@link DEFAULT_MAX_VISITS} noticed.\n */\nconst EXPANSION_PROBE_VISITS = 1_000_000\n\n/**\n * Distinct objects the probe will look at before giving up on answering.\n *\n * A value with more distinct nodes than this is genuinely enormous rather than\n * DAG-shaped, and the probe has nothing useful to say about it \u2014 an unrolling\n * DAG is tiny in DISTINCT nodes (depth 40 is 41 of them) and huge only in paths.\n * Capping here is what keeps the probe from becoming a second full walk: the cap\n * is what the probe costs, once, in the worst case, and giving up early costs\n * only the old behaviour.\n */\nconst EXPANSION_PROBE_NODES = 200_000\n\n/**\n * How far past the budget a projection must land before it is acted on.\n *\n * The projection re-reads the value \u2014 including any getters \u2014 so it is a\n * measurement of the value, not of the walk, and a value that answers\n * differently the second time can make it wrong. A margin this wide means only\n * an order-of-magnitude disagreement can refuse a walk that would have\n * finished; anything nearer the line falls through to the walk itself, which is\n * the authority. Erring costs time, never bytes.\n */\nconst EXPANSION_PROBE_MARGIN = 4\n\ntype WriteState = {\n readonly path: Map<object, number>\n readonly sink: CanonicalSink\n readonly budget: number\n readonly root: unknown\n visits: number\n /**\n * The value of {@link visits} at which to run the probe, or `-1` to never run\n * it. Exact equality, so it fires once and is then unreachable.\n */\n probeAt: number\n}\n\n/**\n * The number of objects {@link write} will visit for `root`, or `undefined` if\n * that cannot be answered cheaply and exactly.\n *\n * This counts what the walk counts \u2014 one per object visit, zero for a scalar,\n * one for a back-edge \u2014 but MEMOISED by node identity, so a shared subtree is\n * counted once instead of once per path. That is the whole trick: counting the\n * work is linear in DISTINCT nodes even when doing the work is exponential in\n * paths.\n *\n * It answers `undefined` rather than guessing whenever the count could be wrong\n * in the direction that matters:\n *\n * - **A back-edge.** Whether a node abbreviates to `^n` depends on the ancestor\n * set at the moment it is reached, so for a cyclic value a memoised count is\n * not context-free and can come out HIGH. Any back-edge at all abandons the\n * answer.\n * - **Too many distinct nodes.** {@link EXPANSION_PROBE_NODES}, above.\n * - **A throw.** A getter, a Proxy trap, or the added stack depth of running a\n * recursive count on top of an in-progress recursive walk. None of these are\n * the probe's business to diagnose; not answering is always available.\n */\nfunction projectVisits(root: unknown): number | undefined {\n const memo = new Map<object, number>()\n const path = new Set<object>()\n let nodes = 0\n let usable = true\n\n const count = (v: unknown): number => {\n if (typeof v !== 'object' || v === null) return 0\n if (path.has(v)) {\n usable = false\n return 1\n }\n const done = memo.get(v)\n if (done !== undefined) return done\n if (++nodes > EXPANSION_PROBE_NODES) {\n usable = false\n return 1\n }\n\n path.add(v)\n // Mirrors `write`'s child enumeration exactly. Key ORDER is irrelevant to a\n // count, so this does not sort; nothing else here may drift from `write`.\n let total = 1\n if (Array.isArray(v)) {\n for (const item of v) total += count(item)\n } else if (v instanceof Map) {\n for (const [k, val] of v) total += count(k) + count(val)\n } else if (v instanceof Set) {\n for (const item of v) total += count(item)\n } else if (!(v instanceof Date) && !(v instanceof RegExp)) {\n for (const k of Object.keys(v)) total += count((v as Record<string, unknown>)[k])\n }\n path.delete(v)\n\n memo.set(v, total)\n return total\n }\n\n try {\n const total = count(root)\n return usable ? total : undefined\n } catch {\n return undefined\n }\n}\n\n/**\n * Stop a walk that provably cannot finish, at the point it has proved expensive.\n *\n * The budget is a backstop that only notices after the work is done, and for an\n * exponential unroll \"after\" is minutes. This asks the cheap question instead \u2014\n * how many visits would the whole walk take \u2014 and refuses immediately when the\n * answer is far past the budget the walk is already spending.\n *\n * The OUTCOME is unchanged: a walk projected past its budget is a walk that\n * raises {@link CanonicalBudgetError}, so this moves nothing but the clock. It\n * cannot move a digest, because no walk it stops was ever going to produce one.\n */\nfunction probeExpansion(state: WriteState): void {\n state.probeAt = -1\n const projected = projectVisits(state.root)\n if (projected !== undefined && projected / EXPANSION_PROBE_MARGIN > state.budget) {\n throw new CanonicalBudgetError(state.budget, projected)\n }\n}\n\nfunction writeScalar(v: unknown, out: CanonicalSink): void {\n switch (typeof v) {\n case 'undefined':\n out.push('u')\n return\n case 'boolean':\n out.push(v ? 'T' : 'F')\n return\n case 'bigint':\n out.push(`n${v}`)\n return\n case 'string':\n out.push(`s${str(v)}`)\n return\n // TODO(oracle-callable-identity): a callable is projected by NAME and a symbol by\n // DESCRIPTION, so two distinct same-named functions \u2014 or two same-description\n // symbols \u2014 digest identically, and a change between them reads as \"identical\".\n // This is a real hole in a tool whose whole claim is paranoia, and it is left open\n // deliberately: closing it means either hashing `Function.prototype.toString()`,\n // which flips the digest on a comment edit inside a builder, or REFUSING to digest\n // any value carrying a callable, which rejects legitimate ASTs that park a callback\n // on a node. Both are worse than the hole for some caller, and picking between them\n // is a product decision, not a bug fix. Documented under \"What it is not\" in\n // `docs/guide/identity-oracle.md` so no reader infers a guarantee that is not here.\n case 'symbol':\n out.push(`y${str(v.description ?? '')}`)\n return\n case 'function':\n out.push(`f${str(v.name)}`)\n return\n case 'number':\n if (Number.isNaN(v)) out.push('#nan')\n else if (v === Number.POSITIVE_INFINITY) out.push('#inf')\n else if (v === Number.NEGATIVE_INFINITY) out.push('#-inf')\n else if (Object.is(v, -0)) out.push('#-0')\n // Number\u2192string is exact and round-trips in JS, so this loses nothing.\n else out.push(`#${v}`)\n return\n default:\n // `typeof null`. Distinct from `undefined`, which is `'u'`.\n out.push('z')\n }\n}\n\nfunction write(v: unknown, state: WriteState, depth: number): void {\n const out = state.sink\n // Everything that is not a live object reference is written here, so the rest\n // of the function has `v: object` and needs no assertion to index or key on it.\n if (typeof v !== 'object' || v === null) {\n writeScalar(v, out)\n return\n }\n\n // Counted per OBJECT visit, not per token: the runaway this guards against is\n // re-walking structure, and scalars cannot re-walk anything.\n if (--state.visits < 0) throw new CanonicalBudgetError(state.budget)\n // One equality against a number already in a register, on a path that already\n // does three Map operations. Fires at most once per walk; `-1` is unreachable.\n if (state.visits === state.probeAt) probeExpansion(state)\n\n const path = state.path\n const seenAt = path.get(v)\n if (seenAt !== undefined) {\n // Distance to the ancestor, not its identity: a self-reference and a\n // reference to the root must not hash the same.\n out.push(`^${depth - seenAt}`)\n return\n }\n path.set(v, depth)\n\n if (Array.isArray(v)) {\n out.push('[')\n // `for..of` rather than indexing so a sparse hole reads as the `undefined`\n // it is, consistently with a present `undefined` \u2014 the distinction between\n // a hole and an explicit undefined is not observable output.\n for (const item of v) write(item, state, depth + 1)\n out.push(']')\n } else if (v instanceof Map) {\n out.push('M')\n for (const [k, val] of v) {\n write(k, state, depth + 1)\n write(val, state, depth + 1)\n }\n out.push('}')\n } else if (v instanceof Set) {\n out.push('S')\n for (const item of v) write(item, state, depth + 1)\n out.push('}')\n } else if (v instanceof Date) {\n out.push(`D${v.getTime()}`)\n } else if (v instanceof RegExp) {\n out.push(`R${str(v.source)}${str(v.flags)}`)\n } else {\n const tag = tagOf(v)\n out.push(`{${str(tag === 'Object' ? '' : tag)}`)\n for (const k of Object.keys(v).sort()) {\n out.push(`k${str(k)}`)\n write((v as Record<string, unknown>)[k], state, depth + 1)\n }\n out.push('}')\n }\n\n path.delete(v)\n}\n\n/** Options shared by every entry point that walks a value. */\nexport type CanonicalOptions = {\n /**\n * Maximum object visits before {@link CanonicalBudgetError}. Defaults to\n * {@link DEFAULT_MAX_VISITS}. A walk that finishes under budget is byte-for-byte\n * unaffected, so this can never change a digest.\n *\n * MUST be a non-negative safe integer. `NaN`, `Infinity`, a negative and a\n * fractional value are all REJECTED rather than clamped \u2014 see\n * {@link newState} for why a bad budget is a thrown error and not a shrug.\n */\n maxVisits?: number | undefined\n}\n\n/**\n * Build the walk state, validating the budget before anything is written.\n *\n * The budget is spent with `--visits < 0`, and that comparison is silently\n * FALSE for `NaN` \u2014 so `maxVisits: NaN` did not raise the ceiling, it removed\n * it, and the walk it was supposed to bound ran to the OOM the budget exists to\n * prevent. `Infinity` is the same wish spelled honestly and gets the same\n * refusal, because an unbounded walk is not an option this offers. A fraction\n * never reaches `-1` cleanly either.\n *\n * So the budget is checked once, here, where the option is read: a bad number is\n * a caller mistake and says so, rather than turning into a hang under load.\n */\nfunction newState(sink: CanonicalSink, options: CanonicalOptions | undefined, root: unknown): WriteState {\n const budget = options?.maxVisits ?? DEFAULT_MAX_VISITS\n if (!Number.isSafeInteger(budget) || budget < 0) {\n throw new RangeError(\n `canonicalize: maxVisits must be a non-negative safe integer, received ${String(budget)}. `\n + 'A non-finite or fractional budget does not raise the ceiling, it REMOVES it \u2014 the budget is spent with '\n + '`--visits < 0`, which is false forever for NaN and never reached for Infinity \u2014 so the walk this bounds '\n + 'would run unbounded into the OOM the budget exists to prevent.',\n )\n }\n // A budget too small to reach the probe never reaches it: the walk raises\n // CanonicalBudgetError first, exactly as it always did.\n const probeAt = budget >= EXPANSION_PROBE_VISITS ? budget - EXPANSION_PROBE_VISITS : -1\n return { path: new Map(), sink, budget, root, visits: budget, probeAt }\n}\n\n/**\n * The canonical token string for a value. Exported because a moved digest is\n * only actionable if you can see WHAT moved: diff two canonical strings and the\n * answer is a line, not a hex mismatch.\n *\n * This MATERIALISES the projection, so it is bounded by the maximum JS string\n * length and by available memory. Use it to explain a move you already know\n * about; take the digest itself with {@link digestInto}, which is bounded by\n * neither.\n */\nexport function canonicalize(value: unknown, options?: CanonicalOptions): string {\n const out = new ArraySink()\n write(value, newState(out, options, value), 0)\n return out.tokens.join(SEPARATOR)\n}\n\n/**\n * Stream a value's canonical projection into a caller-owned hash.\n *\n * This is the primitive: deterministic serialization of ONE parse result, which\n * is the part only parseman can do \u2014 it is parseman's node shapes that decide\n * which distinctions are semantically meaningful. The caller brings the hash and\n * keeps the result, so the algorithm, the encoding and the digest width are all\n * theirs.\n *\n * ```ts\n * const sha = createHash('sha256')\n * digestInto(sha, tree)\n * const digest = sha.digest('hex')\n * ```\n *\n * `prefix` is written ahead of the first token with NO separator, for callers\n * that discriminate one digest space from another (parseman's own oracle writes\n * `OK:` or `ERR:`). Pass `''` when there is nothing to discriminate.\n *\n * Equivalent to `hash(prefix + canonicalize(value))`, and preferable in every\n * case where you do not need to READ the projection.\n *\n * ## Two sharp edges, stated because the target is YOURS\n *\n * **A throw leaves the target written-to.** The token stream is pushed at\n * `target` as the walk proceeds, so a {@link CanonicalBudgetError}, a throwing\n * getter, or any other failure mid-walk leaves an ARBITRARY PREFIX of the\n * projection already absorbed. The hash object is then polluted: its digest is\n * neither the value's nor anything else's, and it is not recoverable \u2014 a\n * `crypto.Hash` cannot be rewound. On any throw, DISCARD the target and start a\n * fresh one. {@link digestValue} does exactly that by owning its hash for a\n * single call.\n *\n * **Two calls against one target concatenate with NO delimiter.** There is no\n * record separator between calls: `digestInto(t, a); digestInto(t, b)` writes\n * exactly `canonicalize(a) + canonicalize(b)`, with nothing in between. That is\n * ambiguous across the call boundary \u2014 the byte stream does not record where one\n * value ended, so a differently-split sequence can produce the identical stream\n * and therefore the identical digest. Concretely, `digestInto(t, 1);\n * digestInto(t, 2)` and the single call `digestInto(t, 2, '#1')` both write\n * `#1#2`. (Within ONE call the projection is unambiguous \u2014 every token is\n * self-contained and NUL-joined; it is only the seam between calls that is not.)\n *\n * This is DOCUMENTED rather than fixed. Any delimiter at the seam \u2014 written\n * before, after, or between \u2014 changes the bytes some existing caller already\n * hashes, and moving a recorded digest is a {@link DIGEST_FORMAT} decision for\n * the owner, not a patch. Callers hashing a SEQUENCE should digest a wrapper\n * value (`digestInto(t, [a, b])`), or write their own unambiguous separator\n * between calls, or use one target per value.\n */\nexport function digestInto(\n target: DigestTarget,\n value: unknown,\n prefix = '',\n options?: CanonicalOptions,\n): void {\n const sink = new StreamSink(target)\n sink.prefix(prefix)\n write(value, newState(sink, options, value), 0)\n sink.flush()\n}\n\n/**\n * Full 64-hex sha256 of a value's canonical projection, streamed.\n *\n * The convenience wrapper over {@link digestInto} for the common case.\n * Identical to `sha256(prefix + canonicalize(value))` for every value the\n * latter can survive, and unbounded where it is not.\n */\nexport function digestValue(value: unknown, prefix = '', options?: CanonicalOptions): string {\n const sha = createHash('sha256')\n digestInto(sha, value, prefix, options)\n return sha.digest('hex')\n}\n", "/**\n * Rebuild a combinator graph THROUGH THE PUBLIC FACTORIES, substituting selected nodes.\n *\n * This exists so a proposed grammar fix can be APPLIED and then MEASURED, rather than\n * printed and hoped for. Everything downstream \u2014 `proposeFixes()` \u2014 depends on one\n * property: a rewritten grammar must be a real grammar, built the same way the author's\n * was, so that compiling it and parsing with it means the same thing.\n *\n * WHY THE FACTORIES AND NOT A `_def` DEEP-COPY\n * --------------------------------------------\n * A combinator is two things at once: a `_def` descriptor the COMPILER reads, and a\n * `parse` closure the INTERPRETER runs, which captured its children when the factory\n * ran. Patching `_def.parser` moves the compiled engine and leaves the interpreted one\n * on the old graph \u2014 the two engines would then disagree, and a verification that runs\n * either one would certify a rewrite that does not exist in the other. Re-running the\n * factory produces both halves from the same inputs, and also recomputes everything\n * DERIVED that the fix is trying to move in the first place: `_meta.firstSet`,\n * `choice._def.disjoint`, and the choice strategy.\n *\n * FROZEN SUBTREES, NOT A FAILED REBUILD\n * -------------------------------------\n * Some node kinds have no faithful public reconstruction \u2014 `dispatch` (its arms carry\n * matcher objects), `recover`, `scanTo`, `guard`, `withCtx`, `trivia` (classified\n * trivia carries labels derived at construction). Refusing to rebuild a whole grammar\n * because it contains one of them would make this useless on every real grammar. So\n * such a node is REUSED VERBATIM: nothing inside it changed, so reusing it is exact.\n * The cost is precise and reported \u2014 a rewrite target that sits inside a frozen subtree\n * cannot be applied, and comes back in `unapplied` so the caller can say WHY rather\n * than silently dropping it.\n *\n * THE HONESTY BACKSTOP\n * --------------------\n * This module does not claim to be faithful; it is CHECKED. `proposeFixes()` first\n * rebuilds with NO substitutions and requires that identity rebuild to produce\n * byte-identical parse output over the caller's corpus. If any option threading below\n * is wrong, that check fails and NO fix is offered for that grammar. A rebuilder that\n * is wrong makes the tool silent, never wrong.\n */\nimport type { Combinator, ParserDef } from '../types.ts'\nimport { literal } from '../combinators/literal.ts'\nimport { regex } from '../combinators/regex.ts'\nimport { keywords } from '../combinators/keywords.ts'\nimport { sequence } from '../combinators/sequence.ts'\nimport { choice } from '../combinators/choice.ts'\nimport { attempt } from '../combinators/attempt.ts'\nimport { many, oneOrMore, optional, sepBy } from '../combinators/repeat.ts'\nimport { ref } from '../combinators/ref.ts'\nimport { not } from '../combinators/not.ts'\nimport { peek } from '../combinators/peek.ts'\nimport { node } from '../combinators/node.ts'\nimport { transform, skip, label, field } from '../combinators/map.ts'\nimport { token, leaf } from '../combinators/token.ts'\nimport { expect } from '../combinators/expect.ts'\nimport { parser } from '../combinators/grammar.ts'\n\n/** A node kind reused verbatim: no public factory reconstructs it without loss. */\nconst FROZEN_TAGS: ReadonlySet<string> = new Set([\n 'dispatch', 'recover', 'scanTo', 'guard', 'withCtx', 'routed', 'trivia', 'unknown',\n])\n\n/** A subtree that was reused verbatim instead of rebuilt. */\nexport type FrozenSubtree = {\n tag: string\n /** Nearest enclosing rule name, so the report can point at it. */\n rule: string\n}\n\nexport type RebuildResult = {\n root: Combinator<unknown>\n /** Reused-verbatim subtrees, deduplicated by (rule, tag) and sorted. */\n frozen: FrozenSubtree[]\n /**\n * Substitutions that could NOT be applied because their target sits inside a frozen\n * subtree. Non-empty means the returned graph is NOT the graph the caller asked for.\n */\n unapplied: Combinator<unknown>[]\n}\n\n/** `_meta` fields stamped by `rules()` / `parser()` that a factory does not recompute. */\nconst CARRIED_META = [\n 'grammarTrivia', 'grammarScanSkip', 'grammarHostMode', 'grammarTrackLines',\n 'rootTriviaClassified',\n] as const\n\nfunction carryStamps(from: Combinator<unknown>, to: Combinator<unknown>): void {\n const fromRule = (from as { _ruleName?: string })._ruleName\n if (fromRule !== undefined) (to as { _ruleName?: string })._ruleName = fromRule\n const fm = from._meta as Record<string, unknown>\n const tm = to._meta as Record<string, unknown>\n for (const k of CARRIED_META) if (fm[k] !== undefined && tm[k] === undefined) tm[k] = fm[k]\n}\n\n/** Every combinator reachable from `p`, without resolving refs (used to test containment). */\nfunction subtreeContains(p: Combinator<unknown>, targets: ReadonlySet<Combinator<unknown>>): Combinator<unknown>[] {\n const hit: Combinator<unknown>[] = []\n const seen = new Set<Combinator<unknown>>()\n const walk = (c: Combinator<unknown>): void => {\n if (seen.has(c)) return\n seen.add(c)\n if (targets.has(c)) hit.push(c)\n const d = (c as { _def?: unknown })._def as ParserDef | undefined\n if (d === undefined || typeof d !== 'object') return\n const rec = d as unknown as Record<string, unknown>\n const kids: Combinator<unknown>[] = []\n if (Array.isArray(rec.parsers)) kids.push(...(rec.parsers as Combinator<unknown>[]))\n if (Array.isArray(rec.skip)) kids.push(...(rec.skip as Combinator<unknown>[]))\n for (const k of ['parser', 'main', 'skipped', 'separator', 'sentinel', 'selector', 'otherwise', 'fallback', 'triviaParser'])\n if (rec[k]) kids.push(rec[k] as Combinator<unknown>)\n if (d.tag === 'dispatch') {\n for (const c2 of d.cases) kids.push(c2.parser)\n if (d.matchers) for (const c2 of d.matchers) kids.push(c2.parser)\n }\n for (const k of kids) walk(k)\n }\n walk(p)\n return hit\n}\n\n/**\n * Rebuild `root`, replacing every combinator that is a key of `replacements` with its\n * value. The replacement is spliced WITHOUT descending into the original target.\n */\nexport function rebuildCombinator(\n root: Combinator<unknown>,\n replacements: ReadonlyMap<Combinator<unknown>, Combinator<unknown>>,\n): RebuildResult {\n const memo = new Map<Combinator<unknown>, Combinator<unknown>>()\n const frozenKeys = new Set<string>()\n const frozen: FrozenSubtree[] = []\n const unapplied: Combinator<unknown>[] = []\n const targets = new Set(replacements.keys())\n\n const go = (p: Combinator<unknown>, rule: string): Combinator<unknown> => {\n const already = memo.get(p)\n if (already !== undefined) return already\n const sub = replacements.get(p)\n if (sub !== undefined) { memo.set(p, sub); return sub }\n\n const d = (p as { _def?: unknown })._def as ParserDef | undefined\n if (d === undefined || typeof d !== 'object') { memo.set(p, p); return p }\n const here = (p as { _ruleName?: string })._ruleName ?? rule\n\n if (FROZEN_TAGS.has(d.tag)) {\n const key = JSON.stringify([here, d.tag])\n if (!frozenKeys.has(key)) { frozenKeys.add(key); frozen.push({ tag: d.tag, rule: here }) }\n for (const t of subtreeContains(p, targets)) if (!unapplied.includes(t)) unapplied.push(t)\n memo.set(p, p)\n return p\n }\n\n // A ref/lazy is the only place a cycle can close. Publish an EMPTY slot into the\n // memo before descending, so a body that refers back to this rule binds to the\n // new slot rather than re-entering (which would not terminate).\n if (d.tag === 'lazy') {\n let target: Combinator<unknown>\n try { target = (d as { thunk(): Combinator<unknown> }).thunk() }\n catch {\n // An undefined ref: nothing to rebuild through, and nothing inside it to miss.\n memo.set(p, p)\n return p\n }\n const slot = ref<unknown>()\n memo.set(p, slot)\n slot.define(go(target, here))\n carryStamps(p, slot)\n return slot\n }\n\n const one = (c: Combinator<unknown>): Combinator<unknown> => go(c, here)\n let out: Combinator<unknown>\n switch (d.tag) {\n case 'literal':\n out = literal(d.value, d.caseInsensitive ? { caseInsensitive: true } : {}); break\n case 'regex':\n out = regex(d.source, d.flags); break\n case 'keywords':\n out = keywords(d.words, {\n ...(d.caseInsensitive ? { caseInsensitive: true } : {}),\n ...(d.boundary === undefined ? {} : { boundary: d.boundary }),\n }); break\n case 'sequence': {\n const kids = d.parsers.map(one) as [Combinator<unknown>, ...Combinator<unknown>[]]\n out = sequence(...kids); break\n }\n case 'choice': {\n // A per-arm gate predicate cannot be re-wrapped through the public `choice()`\n // arity (it takes GatedArm objects the grammar built), and the whole point of\n // rebuilding a choice is that its strategy is recomputed \u2014 which the gated path\n // suppresses anyway. Freeze it rather than rebuild it wrong.\n if (d.gates.some(g => g !== null)) {\n const key = JSON.stringify([here, \"choice(gated)\"])\n if (!frozenKeys.has(key)) { frozenKeys.add(key); frozen.push({ tag: 'choice(gated)', rule: here }) }\n for (const t of subtreeContains(p, targets)) if (!unapplied.includes(t)) unapplied.push(t)\n memo.set(p, p)\n return p\n }\n const kids = d.parsers.map(one) as [Combinator<unknown>, ...Combinator<unknown>[]]\n out = choice(...kids); break\n }\n case 'attempt': out = attempt(one(d.parser)); break\n case 'not': out = not(one(d.parser)); break\n case 'peek': out = peek(one(d.parser)); break\n case 'optional': out = optional(one(d.parser)); break\n case 'many':\n out = many(one(d.parser), d.max === undefined ? {} : { max: d.max }); break\n case 'oneOrMore':\n out = oneOrMore(one(d.parser), { min: d.min, ...(d.max === undefined ? {} : { max: d.max }) }); break\n case 'sepBy':\n out = sepBy(one(d.parser), one(d.separator), {\n min: d.min,\n ...(d.max === undefined ? {} : { max: d.max }),\n ...(d.trailing === undefined ? {} : { trailing: d.trailing }),\n }); break\n case 'transform': out = transform(one(d.parser), d.fn); break\n case 'skip': out = skip(one(d.main), one(d.skipped)); break\n case 'label': out = label(d.label, one(d.parser)); break\n case 'field': out = field(d.name, one(d.parser)); break\n case 'token': out = token(one(d.parser)); break\n case 'leaf': out = leaf(one(d.parser), d.fn); break\n // A LABELLED expect reproduces `d.expected` exactly (`expect` sets it to `[label]`).\n // An unlabelled one RE-DERIVES it from the rebuilt inner parser, so it can differ\n // from `d.expected` when derivation hit an undefined `lazy` thunk in a different\n // order than the original construction did. That is diagnostic text, not parse\n // output: `fix.ts` \u2014 the only consumer of this rebuild \u2014 compares failures by\n // POSITION and excludes `expected` labels by design (see its module header).\n // Preserving `d.expected` verbatim would need an expected-set override on the\n // public `expect()` signature, which is not worth widening for a label.\n case 'expect': out = expect(one(d.parser), d.label) as Combinator<unknown>; break\n case 'node': {\n const opts = {\n ...(d.unwrap ? { unwrap: true } : {}),\n ...(d.collapse ? { collapse: true } : {}),\n ...(d.project === undefined ? {} : { project: d.project }),\n ...(d.captureTrivia ? { captureTrivia: true } : {}),\n ...(d.trailingTrivia ? { trailingTrivia: true } : {}),\n ...(d.buildArity === undefined ? {} : { buildArity: d.buildArity }),\n ...(d.tags === undefined ? {} : { tags: d.tags }),\n }\n // `node(combinator, build, opts)` \u2014 the UNTYPED-with-build arity \u2014 drops `opts`\n // (src/combinators/node.ts:159-160 reads the 4th positional argument, which that\n // arity never receives). Reconstructing through it would silently lose\n // unwrap/collapse/project/tags, so freeze that one shape instead.\n if (d.type === undefined && d.build !== undefined && Object.keys(opts).length > 0) {\n const key = `${here} node(untyped+build+opts)`\n if (!frozenKeys.has(key)) { frozenKeys.add(key); frozen.push({ tag: 'node(untyped+build+opts)', rule: here }) }\n for (const t of subtreeContains(p, targets)) if (!unapplied.includes(t)) unapplied.push(t)\n memo.set(p, p)\n return p\n }\n out = d.type === undefined\n ? (d.build === undefined ? node(one(d.parser), opts) : node(one(d.parser), d.build))\n : node(d.type, one(d.parser), d.build, opts)\n break\n }\n case 'grammar': {\n const inner = one(d.parser)\n out = parser({\n ...(d.clearTrivia ? { trivia: null } : d.triviaParser === undefined ? {} : { trivia: d.triviaParser }),\n ...(d.rootCapture === undefined ? {} : { rootCapture: d.rootCapture }),\n ...(d.captureTrivia ? { captureTrivia: true } : {}),\n trackLines: d.trackLines,\n }, inner) as unknown as Combinator<unknown>\n break\n }\n default: {\n const key = JSON.stringify([here, (d as { tag: string }).tag])\n if (!frozenKeys.has(key)) { frozenKeys.add(key); frozen.push({ tag: (d as { tag: string }).tag, rule: here }) }\n for (const t of subtreeContains(p, targets)) if (!unapplied.includes(t)) unapplied.push(t)\n memo.set(p, p)\n return p\n }\n }\n carryStamps(p, out)\n memo.set(p, out)\n return out\n }\n\n const rebuilt = go(root, (root as { _ruleName?: string })._ruleName ?? '<entry>')\n frozen.sort((a, b) => (a.rule < b.rule ? -1 : a.rule > b.rule ? 1 : a.tag < b.tag ? -1 : a.tag > b.tag ? 1 : 0))\n return { root: rebuilt, frozen, unapplied }\n}\n", "/**\n * VERIFIED grammar fixes \u2014 the propose \u2192 apply \u2192 recompile \u2192 compare loop.\n *\n * rustc can tell you a suggestion is machine-applicable. It cannot tell you the\n * suggestion is CORRECT: there is no cheap oracle for \"this rewrite of your program\n * means the same thing\". A parser generator has one. A grammar's whole observable\n * behaviour is the tree it produces for an input, so a rewrite can be applied, the\n * grammar recompiled, a corpus re-parsed, and the two outputs compared byte for byte.\n * Unchanged output is not a heuristic that the rewrite was safe; it is the evidence.\n *\n * propose \u2192 apply \u2192 recompile \u2192 compare parse output\n * unchanged \u2192 PROVEN over this corpus; offer it\n * changed \u2192 WRONG; discard, never show it\n *\n * TWO STATES, NEVER A THIRD\n * -------------------------\n * Every candidate site ends as ACTIONABLE (here is the rewrite, here is the evidence,\n * here is the measured benefit) or LOCATED (here is the exact site and the exact reason\n * no rewrite can be offered). There is no \"consider refactoring\": a sentence of advice\n * with no location and no rewrite is the thing this module exists to replace. A rewrite\n * that moved the output is reported as LOCATED with the rejection as its reason \u2014 the\n * site is real, the rewrite is not shown, and the reader is never handed a wrong fix.\n *\n * WHAT \"PROVEN\" MEANS HERE, EXACTLY\n * ---------------------------------\n * Proven OVER THE SUPPLIED CORPUS, on every engine the grammar supports \u2014 both when it\n * compiles, the interpreted one alone when it does not \u2014 and that is stated in every\n * rendering rather than implied. A corpus that never reaches the rewritten arm proves\n * nothing about it, so the evidence carries the sample and byte counts and the caller\n * can judge. Two deliberate exclusions from the comparison:\n *\n * - FAILURE `expected` LABELS are compared as position only, not text. A keyword\n * rewrite changes `/\\@media/` to `keyword` by design; that is diagnostic text, not\n * parse output. Values, spans, and WHERE a parse failed are compared exactly.\n * - The rebuild itself is not trusted, it is CHECKED: before any candidate is\n * considered, the grammar is rebuilt with NO substitution and that identity rebuild\n * must reproduce the corpus output exactly. If `rebuild.ts` threads any option\n * wrongly, this check fails and NO fix is offered. Wrong makes the tool silent.\n *\n * BENEFIT IS MEASURED TOO\n * -----------------------\n * A verified-but-pointless rewrite is not offered either. Benefit is read off the same\n * analysis a CI gate reads \u2014 ungated choices, anti-patterns \u2014 plus the compiled artifact\n * size, which is deterministic and therefore safe to print. No timings: this must be\n * diffable.\n */\nimport type { Combinator, ParseResult, ParserDef } from '../types.ts'\nimport { firstSetOf } from '../combinators/first-set.ts'\nimport { keywords } from '../combinators/keywords.ts'\nimport { peek } from '../combinators/peek.ts'\nimport { parse } from '../combinators/grammar.ts'\nimport { compile } from '../compiler/codegen.ts'\nimport { digestValue } from '../oracle/digest.ts'\nimport { analyzeGating, choiceArms, firstSetToString, peelToLeading, type GatingReport } from './gating.ts'\nimport { rebuildCombinator, type FrozenSubtree } from './rebuild.ts'\n\n/** One corpus document. `name` is a label for the report; it is never a path lookup. */\nexport type FixSample = { name: string; text: string }\n\n/** Stable, greppable fix class. Mirrors the `anti-pattern` kinds `diagnoseGrammar` reports. */\nexport type FixCode = 'keyword-regex' | 'double-not'\n\n/** The engines a comparison ran on. `compiled` is absent when the grammar does not compile. */\nexport type FixEngine = 'interpreted' | 'compiled'\n\nexport type FixEvidence = {\n samples: number\n bytes: number\n engines: FixEngine[]\n /** Always true on a VERIFIED fix \u2014 the field exists so the JSON states the claim. */\n outputUnchanged: true\n}\n\nexport type FixBenefit = {\n ungatedChoicesBefore: number\n ungatedChoicesAfter: number\n antiPatternsBefore: number\n antiPatternsAfter: number\n gatedChoicesBefore: number\n gatedChoicesAfter: number\n /** Bytes of `compile().source`. Deterministic. `null` when the grammar does not compile. */\n codegenBytesBefore: number | null\n codegenBytesAfter: number | null\n}\n\n/** A source edit, offered only when the site is UNAMBIGUOUS in the supplied text. */\nexport type FixEdit = {\n path: string\n /** 1-based, for a diagnostic header. */\n line: number\n column: number\n start: number\n end: number\n oldText: string\n newText: string\n /** The whole source line the edit sits on, so a renderer can draw a real code frame. */\n lineText: string\n}\n\nexport type VerifiedFix = {\n id: string\n code: FixCode\n rule: string\n armIndex: number\n /** How the site reads now, and how it would read. Rendering, not source text. */\n before: string\n after: string\n /** The arm's deep first-set before and after \u2014 the number that makes the fix self-evident. */\n armFirstSetBefore: string\n armFirstSetAfter: string\n /** The enclosing choice's gating verdict, before and after. */\n choiceId: string\n choiceGatesBefore: 'yes' | 'recoverable' | 'no'\n choiceGatesAfter: 'yes' | 'recoverable' | 'no'\n benefit: FixBenefit\n evidence: FixEvidence\n /** Present only when the site was located unambiguously in a supplied source file. */\n edit?: FixEdit\n}\n\nexport type LocatedFinding = {\n id: string\n code: FixCode\n rule: string\n armIndex: number\n /** How the site reads now. */\n site: string\n /** The exact reason no rewrite can be offered. Never advice. */\n reason: string\n}\n\nexport type FixReport = {\n schema: 'parseman.fix/1'\n /**\n * True when every candidate site got a verdict \u2014 i.e. the corpus was usable and the\n * identity rebuild held. FALSE IS NOT \"no fixes\": it means the loop could not run, and\n * an empty `verified` list under it proves nothing. Fails closed.\n */\n ok: boolean\n /** Why `ok` is false, or `null`. */\n blocked: string | null\n corpus: { samples: number; bytes: number }\n engines: FixEngine[]\n verified: VerifiedFix[]\n located: LocatedFinding[]\n /** Subtrees `rebuild.ts` reused verbatim; a candidate inside one cannot be applied. */\n frozen: FrozenSubtree[]\n}\n\nexport type ProposeFixOptions = {\n /**\n * The documents the before/after comparison runs over. REQUIRED and non-empty: with no\n * corpus there is no evidence, and this module does not offer unverified rewrites.\n */\n corpus: readonly FixSample[]\n /** Grammar source, to locate edits in. Without it, fixes carry no `edit`. */\n source?: { path: string; text: string }\n /** Passed through to `analyzeGating` when measuring benefit. */\n accept?: Iterable<string>\n entryName?: string\n}\n\n// \u2500\u2500 output comparison \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * One sample's output, as a comparable token.\n *\n * `OK:`/`ERR:` keeps success and failure in disjoint spaces (the identity-oracle rule),\n * and a failure compares by POSITION rather than by its `expected` labels \u2014 see the\n * module header for why that exclusion is deliberate and not a loosened oracle.\n */\nfunction sampleToken(res: ParseResult<unknown>): string {\n return res.ok\n ? `OK:${digestValue({ value: res.value, span: res.span })}`\n : `ERR:${res.span.start}-${res.span.end}`\n}\n\ntype Outputs = { interpreted: string[]; compiled: string[] | null; codegenBytes: number | null }\n\nfunction outputsOf(root: Combinator<unknown>, corpus: readonly FixSample[]): Outputs {\n const interpreted = corpus.map((s) => {\n try { return sampleToken(parse(root, s.text)) }\n catch (e) { return `THROW:${e instanceof Error ? e.name : 'unknown'}` }\n })\n let compiled: string[] | null = null\n let codegenBytes: number | null = null\n try {\n const c = compile(root)\n codegenBytes = c.source.length\n compiled = corpus.map((s) => {\n try { return sampleToken(c.parse(s.text)) }\n catch (e) { return `THROW:${e instanceof Error ? e.name : 'unknown'}` }\n })\n }\n catch { compiled = null; codegenBytes = null }\n return { interpreted, compiled, codegenBytes }\n}\n\nconst sameList = (a: readonly string[], b: readonly string[]): boolean =>\n a.length === b.length && a.every((x, i) => x === b[i])\n\n/** Identical on every engine BOTH sides could run. A side that compiles and a side that\n * stopped compiling are NOT identical \u2014 losing the compiled engine is a behaviour change. */\nfunction sameOutputs(a: Outputs, b: Outputs): boolean {\n if (!sameList(a.interpreted, b.interpreted)) return false\n if ((a.compiled === null) !== (b.compiled === null)) return false\n if (a.compiled !== null && b.compiled !== null) return sameList(a.compiled, b.compiled)\n return true\n}\n\n// \u2500\u2500 candidate detection \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * A regex that is really a fixed keyword: an optional `^`, a run of characters with no\n * regex meaning, and an optional trailing `(?![\u2026])` word boundary.\n *\n * Deliberately NARROWER than `gating.ts`'s detector, which decides whether to REPORT.\n * This one decides whether to REWRITE, so it must recognise only shapes where\n * `keywords()` is exactly equivalent by construction, before any corpus is consulted.\n */\nconst EXACT_KEYWORD_RE = /^(\\^?)([^\\\\^$*+?()[\\]{}|./]+)(?:\\(\\?!(?:\\[([^\\]]*)\\]|(\\\\[wWdDsS]))\\))?$/\n\ntype KeywordRewrite = { word: string; boundary: string | undefined; caseInsensitive: boolean }\n\n/** `null` when the regex is not provably a keyword, with the reason carried by the caller. */\nfunction keywordRewriteOf(source: string, flags: string): KeywordRewrite | string {\n const m = EXACT_KEYWORD_RE.exec(source)\n if (m === null) return 'the pattern is not a plain keyword (it uses regex syntax beyond a literal word and a trailing (?![\u2026]) boundary)'\n if (m[1] === '^') {\n // `regex()` compiles sticky (`y`) without `m`, so a leading `^` matches only at\n // offset 0 \u2014 this arm can only ever fire at the start of the document. That is a\n // different parser from the keyword, and worth knowing about on its own.\n return 'the pattern is `^`-anchored; under regex()\\'s sticky compilation that matches only at offset 0, which keywords() does not reproduce'\n }\n const extra = flags.replace(/[iy]/g, '')\n if (extra !== '') return `the pattern carries flags /${flags}/ \u2014 only /i/ has a keywords() equivalent`\n // `(?!\\w)` and `(?![\\w])` are the same assertion; keywords() spells its boundary as a\n // character CLASS, so a bare escape is carried through as the class body.\n const boundary = m[3] !== undefined && m[3] !== '' ? m[3] : m[4]\n return { word: m[2]!, boundary, caseInsensitive: flags.includes('i') }\n}\n\ntype Candidate = {\n id: string\n code: FixCode\n rule: string\n armIndex: number\n /** The enclosing choice's `analyzeGating` id \u2014 `rule`, or `rule#N` when the rule holds\n * more than one choice. Resolved by NODE IDENTITY, never by re-deriving occurrence\n * order in a second walk. */\n choiceId: string\n /** The node to replace. */\n target: Combinator<unknown>\n /** The arm the target leads, for the first-set reading. */\n arm: Combinator<unknown>\n before: string\n /** The replacement, or a reason it cannot be built. */\n replacement: Combinator<unknown> | null\n after: string | null\n reason: string | null\n}\n\nconst renderRegex = (d: { source: string; flags: string }): string => `regex(/${d.source}/${d.flags.replace(/y/g, '')})`\n\nfunction renderKeyword(k: KeywordRewrite): string {\n const ci = k.caseInsensitive ? ', { caseInsensitive: true }' : ''\n return k.boundary === undefined\n ? `keywords(['${k.word}']${ci === '' ? '' : `,${ci.slice(1)}`})`\n : `word('${k.word}', '${k.boundary}'${ci})`\n}\n\n/**\n * Walk every choice arm, attributing each to the CHOICE that owns it.\n *\n * The identity a reader greps \u2014 and the one `--apply` attribution reads \u2014 is the choice,\n * not the rule: `analyzeGating` already spells a rule's second choice `rule#1` precisely\n * because a rule can hold several. An id built from the rule alone collides across them,\n * and the report then sorts and renders two distinct sites as one.\n *\n * The choice id is taken from `report` by ARM-ARRAY IDENTITY rather than recomputed here.\n * `gating.ts` says out loud that a second walk drifts out of step with its `id`\n * assignment \u2014 it did, silently, and mislabelled every arm \u2014 so this does not walk twice.\n */\nfunction collectCandidates(root: Combinator<unknown>, report: GatingReport): Candidate[] {\n const out: Candidate[] = []\n const seen = new Set<Combinator<unknown>>()\n // arms array (the choice's own `d.parsers`) \u2192 the id `analyzeGating` gave that choice.\n const idOfChoice = new Map<readonly Combinator<unknown>[], string>()\n for (const c of report.choices) {\n const arms = choiceArms(c)\n if (arms !== undefined) idOfChoice.set(arms, c.id)\n }\n const visit = (p: Combinator<unknown>, enclosing: string): void => {\n if (seen.has(p)) return\n seen.add(p)\n const d = (p as { _def?: unknown })._def as ParserDef | undefined\n if (d === undefined || typeof d !== 'object') return\n const rule = (p as { _ruleName?: string })._ruleName ?? enclosing\n if (d.tag === 'choice') {\n // A choice the report did not describe (an unanalysable one) still gets a site; it\n // falls back to the rule name, which is what the id read before choices were told\n // apart, and is unique whenever the rule holds only this one.\n const choiceId = idOfChoice.get(d.parsers) ?? rule\n d.parsers.forEach((arm, armIndex) => {\n const lead = peelToLeading(arm)\n const ld = lead._def as ParserDef\n const id = `${choiceId}#arm${armIndex}`\n if (ld.tag === 'not') {\n const inner = ld.parser\n if ((inner._def as ParserDef).tag === 'not') {\n const body = (inner._def as Extract<ParserDef, { tag: 'not' }>).parser\n out.push({\n id, code: 'double-not', rule, armIndex, choiceId, target: lead, arm,\n before: 'not(not(\u2026))', replacement: peek(body), after: 'peek(\u2026)', reason: null,\n })\n }\n }\n if (ld.tag === 'regex') {\n const k = keywordRewriteOf(ld.source, ld.flags)\n const before = renderRegex(ld)\n if (typeof k === 'string') {\n // Only a site `gating.ts` would REPORT is worth locating here; a general\n // regex that happens not to be a keyword is not a finding at all.\n if (/^\\^?[@#.-]?[A-Za-z][\\w-]*(\\(\\?![^)]*\\))?\\$?$/.test(ld.source)) {\n out.push({ id, code: 'keyword-regex', rule, armIndex, choiceId, target: lead, arm, before, replacement: null, after: null, reason: k })\n }\n }\n else {\n out.push({\n id, code: 'keyword-regex', rule, armIndex, choiceId, target: lead, arm, before,\n replacement: keywords([k.word], {\n ...(k.caseInsensitive ? { caseInsensitive: true } : {}),\n ...(k.boundary === undefined ? {} : { boundary: k.boundary }),\n }),\n after: renderKeyword(k), reason: null,\n })\n }\n }\n })\n }\n const rec = d as unknown as Record<string, unknown>\n const kids: Combinator<unknown>[] = []\n if (Array.isArray(rec.parsers)) kids.push(...(rec.parsers as Combinator<unknown>[]))\n if (Array.isArray(rec.skip)) kids.push(...(rec.skip as Combinator<unknown>[]))\n for (const k of ['parser', 'main', 'skipped', 'separator', 'sentinel', 'selector', 'otherwise', 'fallback', 'triviaParser'])\n if (rec[k]) kids.push(rec[k] as Combinator<unknown>)\n if (d.tag === 'dispatch') {\n for (const c of d.cases) kids.push(c.parser)\n if (d.matchers) for (const c of d.matchers) kids.push(c.parser)\n }\n if (d.tag === 'lazy') { try { kids.push((d as { thunk(): Combinator<unknown> }).thunk()) } catch { /* undefined ref */ } }\n for (const k of kids) visit(k, rule)\n }\n visit(root, (root as { _ruleName?: string })._ruleName ?? '<entry>')\n // Deterministic order, independent of walk order.\n out.sort((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : a.code < b.code ? -1 : a.code > b.code ? 1 : 0))\n return out\n}\n\n// \u2500\u2500 source location \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * Locate a candidate in the grammar source, and refuse unless it is UNAMBIGUOUS.\n *\n * A source edit is the one part of this loop the verification cannot cover: the loop\n * proves a GRAPH rewrite is output-neutral, and a text edit is only that rewrite if the\n * text really is the site. So the correspondence has to be exact \u2014 one occurrence, in\n * one spelling \u2014 and anything else declines. An edit applied to the wrong site is\n * strictly worse than no `--apply` at all.\n */\nfunction locateEdit(\n source: { path: string; text: string },\n c: Candidate,\n): FixEdit | string {\n const at = (start: number, end: number, oldText: string, newText: string): FixEdit => {\n let line = 1\n let lastNl = -1\n for (let i = 0; i < start; i++) if (source.text.charCodeAt(i) === 10) { line++; lastNl = i }\n let lineEnd = source.text.indexOf('\\n', lastNl + 1)\n if (lineEnd === -1) lineEnd = source.text.length\n return {\n path: source.path, line, column: start - lastNl, start, end, oldText, newText,\n lineText: source.text.slice(lastNl + 1, lineEnd),\n }\n }\n if (c.code === 'keyword-regex') {\n const spellings = [c.before, c.before.replace(/\\/\\)$/, '/)')]\n const hits: number[] = []\n for (const s of new Set(spellings)) {\n let i = source.text.indexOf(s)\n while (i !== -1) { hits.push(i); i = source.text.indexOf(s, i + 1) }\n }\n if (hits.length === 0) {\n return `\\`${c.before}\\` does not appear literally in ${source.path}, so parseman cannot tell `\n + 'which text to change (it is probably built from a helper or a shared constant)'\n }\n if (hits.length > 1) {\n return `\\`${c.before}\\` appears ${hits.length} times in ${source.path}, and editing the wrong `\n + 'one would be worse than editing none'\n }\n return at(hits[0]!, hits[0]! + c.before.length, c.before, c.after!)\n }\n // double-not: find `not(not(` and balance to the outer close.\n const needle = 'not(not('\n const hits: number[] = []\n let i = source.text.indexOf(needle)\n while (i !== -1) { hits.push(i); i = source.text.indexOf(needle, i + 1) }\n if (hits.length === 0) return `\\`not(not(\\` does not appear literally in ${source.path}`\n if (hits.length > 1) {\n return `\\`not(not(\\` appears ${hits.length} times in ${source.path}, and editing the wrong one `\n + 'would be worse than editing none'\n }\n const start = hits[0]!\n // `not(not(` is the needle, so both opens are at fixed offsets. Deriving the inner one\n // with `indexOf('(')` would find a paren inside a string literal in the outer argument.\n const openOuter = start + 3\n const openInner = start + 7\n const end = matchingParen(source.text, openOuter)\n if (typeof end === 'string') return end\n const innerEnd = matchingParen(source.text, openInner)\n if (typeof innerEnd === 'string') return innerEnd\n // `not()` takes one argument, so nothing but whitespace may sit between the inner\n // close and the outer one. Anything else is a shape this rewrite does not describe.\n if (source.text.slice(innerEnd, end - 1).trim() !== '') {\n return 'something other than the inner call sits between the `not(not(` parentheses, so parseman cannot tell which text the rewrite replaces'\n }\n const whole = source.text.slice(start, end)\n const body = source.text.slice(openInner + 1, innerEnd - 1)\n return at(start, end, whole, `peek(${body})`)\n}\n\n/**\n * Index one past the `)` that closes the `(` at `open`, or the reason it cannot be found.\n *\n * A raw character scan is NOT enough here. Grammar source is full of string literals, and\n * `not(not(literal(')')))` closes a naive counter one paren early \u2014 which yields an\n * `oldText` that is not the call. `applyFixEdits` cannot catch that: its `oldText` check\n * compares against the same mis-delimited span, so it passes and writes a WRONG edit into\n * the user's file. So this skips strings, template literals, and comments.\n *\n * Regex literals are deliberately NOT lexed: telling `/` apart from division needs the\n * full expression grammar, and a regex body can hold unbalanced parens. A `/` that is not\n * a comment therefore DECLINES the site rather than risking a guess.\n */\nfunction matchingParen(text: string, open: number): number | string {\n const AMBIGUOUS = 'a `/` inside the `not(not(` site could start a regular expression, and parseman cannot tell where the site ends without reading the whole file as JavaScript'\n const UNBALANCED = 'the parentheses after `not(not(` do not balance, so parseman cannot tell where the site ends'\n let depth = 0\n // Template-literal quasis interleave with `${\u2026}` expressions, which are code again.\n // `inTemplate` is the stack of enclosing quasis; `braces` counts the `{` of the\n // expression frame we are in, so its closing `}` is told from a nested object literal.\n let inTemplate = 0\n let braces = 0\n const braceStack: number[] = []\n let i = open\n while (i < text.length) {\n const ch = text[i]!\n if (inTemplate > 0 && braceStack.length < inTemplate) {\n // Inside a quasi: only `\\`, `` ` `` and `${` mean anything.\n if (ch === '\\\\') { i += 2; continue }\n if (ch === '`') { inTemplate--; i++; continue }\n if (ch === '$' && text[i + 1] === '{') { braceStack.push(braces); braces = 0; i += 2; continue }\n i++\n continue\n }\n if (ch === '\\'' || ch === '\"') {\n const quote = ch\n i++\n for (;;) {\n if (i >= text.length) return UNBALANCED\n const c = text[i]!\n if (c === '\\\\') { i += 2; continue }\n if (c === '\\n') return UNBALANCED // an unterminated string \u2014 this is not the shape we think it is\n i++\n if (c === quote) break\n }\n continue\n }\n if (ch === '`') { inTemplate++; i++; continue }\n if (ch === '/' && text[i + 1] === '/') {\n const nl = text.indexOf('\\n', i)\n if (nl === -1) return UNBALANCED\n i = nl + 1\n continue\n }\n if (ch === '/' && text[i + 1] === '*') {\n const close = text.indexOf('*/', i + 2)\n if (close === -1) return UNBALANCED\n i = close + 2\n continue\n }\n if (ch === '/') return AMBIGUOUS\n if (ch === '{') { braces++; i++; continue }\n if (ch === '}') {\n if (braces === 0 && braceStack.length > 0) { braces = braceStack.pop()!; i++; continue }\n braces--\n i++\n continue\n }\n if (ch === '(') { depth++; i++; continue }\n if (ch === ')') {\n depth--\n if (depth === 0) return i + 1\n i++\n continue\n }\n i++\n }\n return UNBALANCED\n}\n\n// \u2500\u2500 the loop \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst gatingCounts = (r: GatingReport): { ungated: number; anti: number; gated: number } =>\n ({ ungated: r.ungated.length, anti: r.antiPatterns.length, gated: r.gated })\n\n/**\n * Propose fixes, and offer only the ones proven output-neutral over `opts.corpus`.\n *\n * Never throws: a loop that cannot run reports `ok: false` with the reason, because a\n * thrown proposal and a grammar with nothing to fix must not look the same.\n */\nexport function proposeFixes(root: Combinator<unknown>, opts: ProposeFixOptions): FixReport {\n const corpus = opts.corpus\n const bytes = corpus.reduce((n, s) => n + s.text.length, 0)\n const empty = (blocked: string): FixReport => ({\n schema: 'parseman.fix/1', ok: false, blocked,\n corpus: { samples: corpus.length, bytes }, engines: [],\n verified: [], located: [], frozen: [],\n })\n if (corpus.length === 0) {\n return empty('no files were given to check against. Pass --corpus <dir> pointing at some input '\n + 'your grammar parses, and parseman will apply each candidate change, rebuild the parser, and '\n + 'offer only the ones that leave your parse output exactly as it was')\n }\n\n const baseline = outputsOf(root, corpus)\n const engines: FixEngine[] = baseline.compiled === null ? ['interpreted'] : ['interpreted', 'compiled']\n\n // The rebuilder is checked before it is used: an identity rebuild must reproduce the\n // corpus output exactly, or nothing below is trustworthy and nothing is offered.\n let identity: ReturnType<typeof rebuildCombinator>\n try { identity = rebuildCombinator(root, new Map()) }\n catch (e) {\n return empty('the grammar could not be rebuilt, so no change to it could be checked \u2014 '\n + `${e instanceof Error ? `${e.name}: ${e.message}` : String(e)}`)\n }\n if (!sameOutputs(baseline, outputsOf(identity.root, corpus))) {\n return {\n ...empty('parseman rebuilt this grammar without changing anything and got DIFFERENT parse output, '\n + 'which means its own rebuild of your grammar is not faithful. No change to it can be trusted, '\n + 'so none is offered. This is a parseman bug, not a problem with your grammar'),\n engines, frozen: identity.frozen,\n }\n }\n\n const before = analyzeGating(root, { ...(opts.accept === undefined ? {} : { accept: opts.accept }), ...(opts.entryName === undefined ? {} : { entryName: opts.entryName }) })\n const beforeCounts = gatingCounts(before)\n const beforeChoice = new Map(before.choices.map(c => [c.id, c]))\n\n const verified: VerifiedFix[] = []\n const located: LocatedFinding[] = []\n\n for (const c of collectCandidates(root, before)) {\n if (c.replacement === null || c.after === null) {\n located.push({ id: c.id, code: c.code, rule: c.rule, armIndex: c.armIndex, site: c.before, reason: c.reason! })\n continue\n }\n let attempt: ReturnType<typeof rebuildCombinator>\n try { attempt = rebuildCombinator(root, new Map([[c.target, c.replacement]])) }\n catch (e) {\n located.push({ id: c.id, code: c.code, rule: c.rule, armIndex: c.armIndex, site: c.before,\n reason: `applying the rewrite failed outright \u2014 ${e instanceof Error ? `${e.name}: ${e.message}` : String(e)}` })\n continue\n }\n if (attempt.unapplied.length > 0) {\n const frozenTag = attempt.frozen.map(f => f.tag).join(', ')\n located.push({ id: c.id, code: c.code, rule: c.rule, armIndex: c.armIndex, site: c.before,\n reason: `it sits inside a ${frozenTag}, which parseman cannot rebuild exactly. It will not `\n + 'apply a change it cannot then check, so this one is left for you' })\n continue\n }\n const after = outputsOf(attempt.root, corpus)\n if (!sameOutputs(baseline, after)) {\n // Wrong. Not shown \u2014 the site is reported, the rewrite is not.\n located.push({ id: c.id, code: c.code, rule: c.rule, armIndex: c.armIndex, site: c.before,\n reason: 'parseman tried the obvious rewrite here, and your files parsed DIFFERENTLY afterwards. '\n + 'The rewrite is therefore wrong and is not shown' })\n continue\n }\n const afterReport = analyzeGating(attempt.root, { ...(opts.accept === undefined ? {} : { accept: opts.accept }), ...(opts.entryName === undefined ? {} : { entryName: opts.entryName }) })\n const afterCounts = gatingCounts(afterReport)\n if (afterCounts.ungated >= beforeCounts.ungated && afterCounts.anti >= beforeCounts.anti) {\n located.push({ id: c.id, code: c.code, rule: c.rule, armIndex: c.armIndex, site: c.before,\n reason: 'a rewrite here is safe but pointless \u2014 it changes nothing measurable, so it is not '\n + 'worth the diff' })\n continue\n }\n // `c.choiceId` came from `beforeChoice`'s own id assignment by node identity, so this\n // is the choice the candidate actually sits in \u2014 not the rule's first one.\n const choiceId = c.choiceId\n const afterChoice = afterReport.choices.find(x => x.id === choiceId)\n const fix: VerifiedFix = {\n id: c.id, code: c.code, rule: c.rule, armIndex: c.armIndex,\n before: c.before, after: c.after,\n armFirstSetBefore: firstSetToString(firstSetOf(c.arm)),\n armFirstSetAfter: firstSetToString(firstSetOf(c.replacement)),\n choiceId,\n choiceGatesBefore: beforeChoice.get(choiceId)?.gates ?? 'no',\n choiceGatesAfter: afterChoice?.gates ?? 'no',\n benefit: {\n ungatedChoicesBefore: beforeCounts.ungated, ungatedChoicesAfter: afterCounts.ungated,\n antiPatternsBefore: beforeCounts.anti, antiPatternsAfter: afterCounts.anti,\n gatedChoicesBefore: beforeCounts.gated, gatedChoicesAfter: afterCounts.gated,\n codegenBytesBefore: baseline.codegenBytes, codegenBytesAfter: after.codegenBytes,\n },\n evidence: { samples: corpus.length, bytes, engines, outputUnchanged: true },\n }\n if (opts.source !== undefined) {\n const e = locateEdit(opts.source, c)\n if (typeof e === 'string') {\n located.push({ id: c.id, code: c.code, rule: c.rule, armIndex: c.armIndex, site: c.before,\n reason: `the change itself is proven safe, but ${e}. Make it by hand: ${c.before} \u2192 ${c.after}` })\n continue\n }\n fix.edit = e\n }\n verified.push(fix)\n }\n\n verified.sort((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0))\n located.sort((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : a.reason < b.reason ? -1 : a.reason > b.reason ? 1 : 0))\n return {\n schema: 'parseman.fix/1', ok: true, blocked: null,\n corpus: { samples: corpus.length, bytes }, engines,\n verified, located, frozen: identity.frozen,\n }\n}\n\n/**\n * Apply verified edits to a source text, right-to-left so earlier offsets stay valid.\n *\n * Pure: it returns the new text and never touches the filesystem. Writing is the\n * caller's explicit second step, which is what keeps `--apply` from being something that\n * happens to you.\n */\nexport function applyFixEdits(sourceText: string, fixes: readonly VerifiedFix[]): { text: string; applied: number } {\n const edits = fixes.map(f => f.edit).filter((e): e is FixEdit => e !== undefined)\n .sort((a, b) => b.start - a.start)\n let text = sourceText\n let applied = 0\n for (const e of edits) {\n if (text.slice(e.start, e.end) !== e.oldText) continue // the text moved under us; skip\n text = text.slice(0, e.start) + e.newText + text.slice(e.end)\n applied++\n }\n return { text, applied }\n}\n", "/**\n * The human layer over `FixReport`.\n *\n * The claim this rendering has to carry is unusual, so it is made explicitly and never\n * by implication: a fix shown here was APPLIED to the grammar, the grammar was\n * RECOMPILED, the corpus was RE-PARSED, and the output did not move. Every offered\n * rewrite prints that evidence next to it, with the sample and byte counts, because\n * \"proven\" without a corpus size is a word, not a fact.\n *\n * The diff is the primary interface. `--apply` writing to a file is a second, explicit\n * step; what a reader gets by default is what would change, in the form they would read\n * it in a review.\n *\n * TWO STATES, MADE VISUALLY DISTINCT\n * ----------------------------------\n * ACTIONABLE and LOCATED are the whole model, and in the first cut they were two words\n * in the same colour \u2014 which is to say, not a distinction at all until you read them.\n * They now differ in glyph, colour and weight, so a reader triages the report by\n * scanning the left margin rather than by parsing it. LOCATED prints the REASON and\n * never advice: a site that cannot be rewritten is still worth knowing about, and that\n * is the difference between \"here is exactly where the problem is\" and silence.\n *\n * Like `diagnose-render.ts`, this emits LINES OF SPANS and never an escape byte;\n * `terminal.ts` owns every interaction with a terminal.\n */\nimport type { FixReport, VerifiedFix, LocatedFinding } from './fix.ts'\nimport {\n DEFAULT_WIDTH, TONE, blank, codeFrame, groupDigits, render, rule, t, wrap,\n type Line, type RenderTarget,\n} from './terminal.ts'\n\nexport type FixRenderOptions = RenderTarget & {\n name?: string\n /**\n * How many edits were WRITTEN to disk. A count, not a flag: `applyFixEdits` skips an\n * edit whose span moved under it, so a run can write some of `r.verified` and skip the\n * rest. A boolean here made the report say every verified change had been written\n * whenever any one of them had been \u2014 the one number a reader checks after `--apply`,\n * wrong in exactly the case that matters. Absent (or 0) means nothing was written.\n */\n applied?: number\n /** Absolute path of the edited source, used ONLY for the frame's terminal hyperlink. */\n sourceRoot?: string\n}\n\nexport function fixReportLines(r: FixReport, opts: FixRenderOptions = {}): Line[] {\n const name = opts.name ?? 'grammar'\n const width = opts.width ?? DEFAULT_WIDTH\n const out: Line[] = []\n\n if (!r.ok) {\n out.push([t('\u2717 ', TONE.loud), t(name, TONE.strong),\n t(' \u2014 nothing can be offered, because nothing could be checked', TONE.bad)])\n for (const l of wrap(r.blocked ?? 'the verification loop could not run', width - 4, ' ')) out.push([t(l)])\n out.push([t(' parseman only offers a change after it has applied it, rebuilt the parser and', TONE.quiet)])\n out.push([t(' confirmed your files still parse to exactly the same thing. It could not do that', TONE.quiet)])\n out.push([t(' here, so it is offering nothing rather than guessing.', TONE.quiet)])\n return out\n }\n\n const engines = r.engines.join(' + ')\n if (r.verified.length === 0 && r.located.length === 0) {\n out.push([t('\u2713 ', TONE.good), t(name, TONE.strong), t(' \u2014 nothing here can be rewritten', TONE.good)])\n out.push([t(` Checked against ${groupDigits(r.corpus.samples)} of your files `\n + `(${groupDigits(r.corpus.bytes)} bytes). No change parseman knows how to make applies here.`,\n TONE.quiet)])\n return out\n }\n\n // A count of edits actually written, and whether that is all of them. `skipped > 0` is\n // the partial case: `applyFixEdits` declined an edit whose span no longer matched.\n const written = opts.applied ?? 0\n const wrote = written > 0\n const skipped = wrote ? r.verified.length - written : 0\n out.push([\n t(wrote ? '\u2713 ' : '\u25CF ', wrote ? TONE.good : TONE.warn),\n t(name, TONE.strong),\n t(' \u2014 ', TONE.quiet),\n t(`${groupDigits(r.verified.length)} change${r.verified.length === 1 ? '' : 's'} that `\n + `${r.verified.length === 1 ? 'is' : 'are'} safe to make`, TONE.good),\n t(r.located.length > 0\n ? `, ${groupDigits(r.located.length)} place${r.located.length === 1 ? '' : 's'} that `\n + `${r.located.length === 1 ? 'needs' : 'need'} you`\n : '', TONE.warn),\n ])\n for (const l of wrap(\n `Every change below was applied, the parser rebuilt, and your ${groupDigits(r.corpus.samples)} `\n + `file${r.corpus.samples === 1 ? '' : 's'} (${groupDigits(r.corpus.bytes)} bytes) parsed again with `\n + `${engines === 'interpreted + compiled' ? 'both engines' : engines} \u2014 the result was identical `\n + 'every time. A change that altered the result was thrown away and is not shown.',\n width - 2, ' ')) out.push([t(l, TONE.faint)])\n if (!wrote && r.verified.length > 0) {\n out.push([t(' Nothing has been written. Add ', TONE.quiet),\n t('--apply', TONE.strong), t(' to make these edits.', TONE.quiet)])\n }\n\n for (const f of r.verified) out.push(...verifiedLines(f, opts))\n for (const l of r.located) out.push(...locatedLines(l, opts))\n\n if (r.frozen.length > 0) {\n out.push(blank())\n for (const l of wrap(\n `${groupDigits(r.frozen.length)} part(s) of the grammar were left untouched because parseman `\n + 'cannot rebuild them exactly and will not guess: '\n + r.frozen.slice(0, 6).map(f => `${f.rule} (${f.tag})`).join(', ')\n + (r.frozen.length > 6 ? ', \u2026' : ''), width - 2, ' ')) out.push([t(l, TONE.faint)])\n }\n out.push(blank())\n out.push([\n t(wrote ? '\u2713 ' : '\uD83D\uDD27 ', TONE.good),\n t(`${groupDigits(r.verified.length)} safe to apply`, TONE.strong),\n t(r.located.length > 0 ? `, ${groupDigits(r.located.length)} need you` : '', TONE.strong),\n // Name the skipped edits. Silently reporting \"written to disk\" over a partial write\n // is the failure this count exists to prevent: the reader would go on believing the\n // file holds all of them.\n t(wrote\n ? (skipped > 0\n ? ` \u00B7 ${groupDigits(written)} written to disk, ${groupDigits(skipped)} skipped (the source moved under the edit)`\n : ' \u00B7 written to disk')\n : ' \u00B7 add --apply to make them \u00B7 exiting 0 (nothing written)', TONE.faint),\n ])\n return out\n}\n\nexport function renderFixReport(r: FixReport, opts: FixRenderOptions = {}): string {\n return render(fixReportLines(r, opts), opts)\n}\n\nfunction verifiedLines(f: VerifiedFix, opts: FixRenderOptions): Line[] {\n const out: Line[] = []\n const width = opts.width ?? DEFAULT_WIDTH\n const b = f.benefit\n const effects: string[] = []\n if (b.antiPatternsAfter !== b.antiPatternsBefore) {\n // The measured delta, not a hard-coded 1: the rewrite replaces a COMBINATOR, and a\n // combinator shared by several arms removes a finding at each of them.\n const removed = b.antiPatternsBefore - b.antiPatternsAfter\n effects.push(`removes ${groupDigits(removed)} of the ${b.antiPatternsBefore} arms that hide their first character`)\n }\n if (b.ungatedChoicesAfter !== b.ungatedChoicesBefore) {\n effects.push(`${b.ungatedChoicesBefore - b.ungatedChoicesAfter} fewer choice(s) the parser must guess at`)\n }\n if (b.gatedChoicesAfter !== b.gatedChoicesBefore) {\n effects.push(`${b.gatedChoicesAfter - b.gatedChoicesBefore} more choice(s) decided from one character`)\n }\n // The first-set line earns its place only when the set MOVED. Printing `'i' \u2192 'i'`\n // under a heading called \"why\" is how a diagnostic loses trust.\n if (f.armFirstSetBefore !== f.armFirstSetAfter) {\n effects.push(`arm ${f.armIndex} now starts with a known character (${f.armFirstSetAfter})`)\n }\n if (f.choiceGatesBefore !== f.choiceGatesAfter) {\n effects.push(`${f.choiceId} can now be decided from the next character alone`)\n }\n const effect = effects.join(' \u00B7 ')\n\n out.push(blank())\n out.push(rule(width, TONE.frame))\n out.push([\n t(' \uD83D\uDD27 ', TONE.good),\n t('SAFE TO APPLY', { color: 'green', bold: true }),\n t(' '),\n t(f.id, TONE.ident),\n ])\n // The grammar SOURCE is the world this fix lives in, so it is a frame with the caret\n // under the term being replaced rather than a bare `path:line:col`. The frame's own\n // message carries the measured effect, so no line repeats the heading above it.\n if (f.edit !== undefined) {\n out.push(...codeFrame({\n path: f.edit.path,\n fullPath: opts.sourceRoot ?? f.edit.path,\n line: f.edit.line,\n column: f.edit.column,\n // INCLUSIVE, per linecraft's CodeDebug (`highlightEnd - highlightStart + 1`), so the\n // last underlined column is the last column of `oldText` \u2014 not the one after it.\n endColumn: f.edit.column + Math.max(f.edit.oldText.length - 1, 0),\n lineText: f.edit.lineText.replace(/\\t/g, ' '),\n message: effect,\n shortMessage: `\u2192 ${f.edit.newText}`,\n type: 'info',\n }, opts, ' '))\n }\n else {\n out.push([t(' - ', TONE.bad), t(f.before, TONE.bad)])\n out.push([t(' + ', TONE.good), t(f.after, TONE.good)])\n out.push([t(' effect ', TONE.quiet), t(effect, TONE.strong)])\n }\n if (b.codegenBytesBefore !== null && b.codegenBytesAfter !== null && b.codegenBytesAfter !== b.codegenBytesBefore) {\n const d = b.codegenBytesAfter - b.codegenBytesBefore\n out.push([t(' size ', TONE.faint),\n t(`the generated parser ${d > 0 ? 'grows' : 'shrinks'} by ${groupDigits(Math.abs(d))} bytes`, TONE.faint)])\n }\n const checked = `this exact change was made, the parser rebuilt, and your `\n + `${groupDigits(f.evidence.samples)} file${f.evidence.samples === 1 ? '' : 's'} parsed again \u2014 `\n + 'identical result'\n const cl = wrap(checked, width - 12, '')\n out.push([t(' checked ', TONE.quiet), t(cl[0] ?? '', TONE.good)])\n for (const x of cl.slice(1)) out.push([t(' '), t(x, TONE.good)])\n return out\n}\n\nfunction locatedLines(l: LocatedFinding, opts: FixRenderOptions): Line[] {\n const out: Line[] = []\n const width = opts.width ?? DEFAULT_WIDTH\n out.push(blank())\n out.push(rule(width, TONE.frame))\n out.push([\n t(' \u270B ', TONE.warn),\n t('NEEDS YOU', { color: 'yellow', bold: true }),\n t(' '),\n t(l.id, TONE.ident),\n ])\n out.push([t(' here ', TONE.faint), t(l.site, TONE.quiet)])\n const lines = wrap(`No change can be offered here: ${l.reason}`, width - 12, '')\n out.push([t(' why ', TONE.quiet), t(lines[0] ?? '', TONE.warn)])\n for (const x of lines.slice(1)) out.push([t(' '), t(x, TONE.warn)])\n return out\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["resolve", "resolve", "t", "intersects", "resolve", "t", "rule", "write", "children", "leaf", "deriveExpected", "label", "ch", "trivia", "ch", "fast", "tr", "trivia", "parser", "ruleNameOf", "v", "ch", "t", "rule", "out", "i", "union", "intersects", "intersection", "d", "resolve", "parse", "inRanges", "span", "result", "failAt", "main", "trivia", "skip", "emit", "leaf", "ch", "rules", "parser", "rule", "ch", "ESC", "inSet", "cp", "t", "str", "ind", "endV", "openLen", "j", "openChk", "label", "unwrapTrivia", "choiceArms", "trivia", "escapeRegExp", "body", "childrenOf", "parser", "rule", "trivia", "ch", "vv", "stmts", "ref", "r", "parser", "branchUsesRouted", "litCond", "childrenOf", "trivia", "label", "routed", "canonical", "fnName", "dispatch", "rule", "mv", "childrenOf", "v", "ruleNameOf", "parser", "rule", "ch", "v", "parserUsesRouted", "parser", "parser", "parserUsesRouted", "parser", "children", "fn", "t", "children", "span", "rawChildren", "triviaLog", "state", "rules", "rule", "render", "parts", "render", "m", "any", "choiceArms", "v", "token", "v", "probeAt", "rule", "t", "rule", "start", "end", "i", "hits", "matchingParen", "ch", "empty", "attempt", "render", "t", "v", "label"]
|
|
3
|
+
"sources": ["../../src/cli/index.ts", "../../src/combinators/first-set.ts", "../../src/analysis/gating.ts", "../../src/cst/host-mode.ts", "../../src/combinators/trivia-boundary.ts", "../../src/combinators/ref.ts", "../../src/compiler/value-usage.ts", "../../src/line-index.ts", "../../src/cst/capture-buffer.ts", "../../src/parse-context.ts", "../../src/regex/classes.ts", "../../src/cst/trivia-charscan.ts", "../../src/cst/trivia-kinds.ts", "../../src/cst/root-trivia-scope.ts", "../../src/combinators/grammar.ts", "../../src/cst/reflection-symbols.ts", "../../src/cst/reflection.ts", "../../src/cst/reflection-attach.ts", "../../src/combinators/parser.ts", "../../src/combinators/probe.ts", "../../src/regex/first-set.ts", "../../src/combinators/regex.ts", "../../src/combinators/literal.ts", "../../src/combinators/case-fold.ts", "../../src/combinators/keywords.ts", "../../src/combinators/trivia-skip.ts", "../../src/recovery/scan.ts", "../../src/combinators/adjacency.ts", "../../src/combinators/sequence.ts", "../../src/combinators/expect.ts", "../../src/combinators/choice.ts", "../../src/combinators/dispatch.ts", "../../src/combinators/attempt.ts", "../../src/combinators/repeat.ts", "../../src/combinators/not.ts", "../../src/combinators/peek.ts", "../../src/compiler/degradation.ts", "../../src/compiler/build-arity.ts", "../../src/compiler/fields.ts", "../../src/combinators/node.ts", "../../src/combinators/map.ts", "../../src/combinators/token.ts", "../../src/combinators/scanTo.ts", "../../src/combinators/withCtx.ts", "../../src/compiler/ir-serialize.ts", "../../src/table/ops.ts", "../../src/table/program.ts", "../../src/table/encode.ts", "../../src/table/scan-shapes.ts", "../../src/table/child-slots.ts", "../../src/table/site-labels.ts", "../../src/table/emit-assembly.ts", "../../src/table/run-support.ts", "../../src/grammar-metadata.ts", "../../src/table/inspect.ts", "../../src/table/stamp.ts", "../../src/table/cell.ts", "../../src/table/assemble.ts", "../../src/table/emit.ts", "../../src/compiler/grammar-coverage-ids.ts", "../../src/analysis/duplication.ts", "../../src/table/duplication-hook.ts", "../../src/compiler/linker.ts", "../../src/analysis/grammar.ts", "../../src/analysis/diagnose.ts", "../../src/analysis/terminal.ts", "../../src/analysis/format-number.ts", "../../src/analysis/diagnose-render.ts", "../../src/analysis/corpus.ts", "../../src/table/compile.ts", "../../src/oracle/digest.ts", "../../src/analysis/rebuild.ts", "../../src/analysis/fix.ts", "../../src/analysis/fix-render.ts"],
|
|
4
|
+
"mappings": ";;;AA2CA,SAAS,cAAc,eAAe,aAAa,gBAAgB;AACnE,SAAS,SAAS,UAAU,MAAM,eAAe;AACjD,SAAS,qBAAqB;AAC9B,SAAS,gBAAgB;;;AC7BzB,SAAS,gBAAgB,GAAwBA,UAAmE;AAClH,MAAIA,aAAY,OAAW,QAAO;AAClC,QAAM,OAAQ,EAAwC;AACtD,SAAO,SAAS,SAAY,SAAYA,SAAQ,IAAI;AACtD;AAEO,SAAS,MAAM,GAAa,GAAuB;AACxD,MAAI,EAAE,SAAS,SAAS,EAAE,SAAS,MAAO,QAAO,EAAE,MAAM,MAAM;AAC/D,MAAI,EAAE,SAAS,QAAS,QAAO;AAC/B,MAAI,EAAE,SAAS,QAAS,QAAO;AAC/B,SAAO,EAAE,MAAM,UAAU,QAAQ,YAAY,CAAC,GAAG,EAAE,QAAQ,GAAG,EAAE,MAAM,CAAC,EAAE;AAC3E;AAEO,SAAS,WAAW,GAAa,GAAsB;AAC5D,MAAI,EAAE,SAAS,SAAS,EAAE,SAAS,MAAO,QAAO;AACjD,MAAI,EAAE,SAAS,WAAW,EAAE,SAAS,QAAS,QAAO;AACrD,aAAW,MAAM,EAAE,QAAQ;AACzB,eAAW,MAAM,EAAE,QAAQ;AACzB,UAAI,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,GAAI,QAAO;AAAA,IAC/C;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,SAAS,MAAwB;AAC/C,SAAO,EAAE,MAAM,UAAU,QAAQ,CAAC,EAAE,IAAI,MAAM,IAAI,KAAK,CAAC,EAAE;AAC5D;AAQO,SAAS,eAAe,YAAiC,OAAe,KAAsB;AACnG,QAAM,KAAK,WAAW,MAAM;AAC5B,MAAI,GAAG,SAAS,MAAO,QAAO;AAC9B,MAAI,GAAG,SAAS,QAAS,QAAO;AAChC,QAAM,OAAO,MAAM,YAAY,GAAG;AAClC,MAAI,SAAS,OAAW,QAAO;AAC/B,aAAW,KAAK,GAAG,OAAQ,KAAI,QAAQ,EAAE,MAAM,QAAQ,EAAE,GAAI,QAAO;AACpE,SAAO;AACT;AAEO,SAAS,UAAU,IAAY,IAAsB;AAC1D,SAAO,EAAE,MAAM,UAAU,QAAQ,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE;AAChD;AAEO,SAAS,MAAgB;AAC9B,SAAO,EAAE,MAAM,MAAM;AACvB;AAEO,SAAS,QAAkB;AAChC,SAAO,EAAE,MAAM,QAAQ;AACzB;AAUO,SAAS,aACd,GACA,OAAiC,oBAAI,IAAI,GACzCA,UACS;AAIT,MAAI,KAAK,IAAI,CAAC,EAAG,QAAO;AACxB,OAAK,IAAI,CAAC;AACV,MAAI;AACF,WAAO,iBAAiB,GAAG,MAAMA,QAAO;AAAA,EAC1C,UAAE;AACA,SAAK,OAAO,CAAC;AAAA,EACf;AACF;AAEA,SAAS,iBACP,GACA,MACAA,UACS;AACT,QAAM,KAAK,CAAC,MAAoC,aAAa,GAAG,MAAMA,QAAO;AAC7E,QAAM,IAAI,EAAE;AACZ,UAAQ,EAAE,KAAK;AAAA,IACb,KAAK;AAAa,aAAO,EAAE,MAAM,WAAW;AAAA,IAC5C,KAAK;AAAa,aAAO;AAAA;AAAA,IAEzB,KAAK;AAAa,aAAO,EAAE,aAAa,SAAY,QAAQ,GAAG,EAAE,QAAQ;AAAA,IACzE,KAAK;AAEH,UAAI;AAAE,cAAM,IAAI,IAAI,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE;AAAG,eAAO,KAAK,QAAQ,EAAE,CAAC,MAAM;AAAA,MAAG,QACzE;AAAE,eAAO;AAAA,MAAK;AAAA,IACtB,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAY,aAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMxB,KAAK;AAAa,aAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,IAAI;AAAA,IACrD,KAAK;AAAa,aAAO,GAAG,EAAE,MAAM;AAAA,IACpC,KAAK;AAAa,aAAO,EAAE,QAAQ,MAAM,EAAE;AAAA,IAC3C,KAAK;AACH,aAAO,EAAE,QAAQ,KAAK,EAAE;AAAA,IAC1B,KAAK;AACH,aAAO,GAAG,EAAE,QAAQ;AAAA,IACtB,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAa,aAAO,GAAG,EAAE,MAAM;AAAA,IACpC,KAAK;AACH,UAAI;AAAE,eAAO,GAAG,EAAE,MAAM,CAAC;AAAA,MAAE,QACrB;AAAE,cAAMC,KAAI,gBAAgB,GAAGD,QAAO;AAAG,eAAOC,KAAI,GAAGA,EAAC,IAAI;AAAA,MAAK;AAAA,IACzE;AAAkB,aAAO;AAAA,EAC3B;AACF;AAmBO,SAAS,qBAAqB,GAAiC;AACpE,QAAM,MAAO,EAAE,KAAmB;AAIlC,SAAO,QAAQ,SAAS,QAAQ;AAClC;AAgBO,SAAS,oBAAoB,GAAiC;AACnE,SAAQ,EAAE,KAAmB,QAAQ;AACvC;AAGA,SAAS,SAAS,KAAsB,YAAuC;AAC7E,MAAI,WAAW,SAAS,MAAO,QAAO;AACtC,MAAI,QAAQ,KAAM,QAAO;AACzB,MAAI,IAAI,SAAS,MAAO,QAAO;AAC/B,MAAI,IAAI,SAAS,WAAW,WAAW,SAAS,QAAS,QAAO,EAAE,MAAM,QAAQ;AAChF,QAAM,SAAsB,CAAC;AAC7B,aAAW,KAAK,IAAI,OAAQ,YAAW,KAAK,WAAW,QAAQ;AAC7D,UAAM,KAAK,KAAK,IAAI,EAAE,IAAI,EAAE,EAAE;AAC9B,UAAM,KAAK,KAAK,IAAI,EAAE,IAAI,EAAE,EAAE;AAC9B,QAAI,MAAM,GAAI,QAAO,KAAK,EAAE,IAAI,GAAG,CAAC;AAAA,EACtC;AACA,SAAO,OAAO,WAAW,IAAI,EAAE,MAAM,QAAQ,IAAI,EAAE,MAAM,UAAU,OAAO;AAC5E;AAQA,SAAS,eAAe,IAAc,WAAsC;AAC1E,MAAI,cAAc,KAAM,QAAO;AAC/B,MAAI,GAAG,SAAS,QAAS,QAAO;AAChC,SAAO,SAAS,IAAI,SAAS,KAAK;AACpC;AAWO,SAAS,iBAAiB,SAAmD;AAClF,MAAI,KAAe,MAAM;AACzB,MAAI,YAA6B;AACjC,aAAW,KAAK,SAAS;AACvB,QAAI,oBAAoB,CAAC,GAAG;AAE1B,kBAAY,SAAS,WAAW,EAAE,MAAM,QAAQ;AAChD;AAAA,IACF;AACA,QAAI,CAAC,qBAAqB,CAAC,EAAG,MAAK,MAAM,IAAI,EAAE,MAAM,QAAQ;AAC7D,QAAI,CAAC,aAAa,CAAC,EAAG,QAAO,eAAe,IAAI,SAAS;AAAA,EAC3D;AACA,SAAO,eAAe,IAAI,SAAS;AACrC;AAmBO,SAAS,WACd,GACA,OAAiC,oBAAI,IAAI,GACzCD,UACU;AAGV,MAAI,KAAK,IAAI,CAAC,EAAG,QAAO,IAAI;AAC5B,OAAK,IAAI,CAAC;AACV,MAAI;AACF,WAAO,aAAa,GAAG,MAAMA,QAAO;AAAA,EACtC,UAAE;AACA,SAAK,OAAO,CAAC;AAAA,EACf;AACF;AAEA,SAAS,aACP,GACA,MACAA,UACU;AACV,QAAM,KAAK,CAAC,MAAqC,WAAW,GAAG,MAAMA,QAAO;AAC5E,QAAM,UAAU,CAAC,MAAoC,aAAa,GAAG,oBAAI,IAAI,GAAGA,QAAO;AACvF,QAAM,IAAI,EAAE;AACZ,UAAQ,EAAE,KAAK;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAa,aAAO,EAAE,MAAM;AAAA;AAAA,IACjC,KAAK;AAAa,aAAO,GAAG,EAAE,QAAQ;AAAA,IACtC,KAAK;AACH,UAAI;AAAE,eAAO,GAAG,EAAE,MAAM,CAAC;AAAA,MAAE,QACrB;AAAE,cAAMC,KAAI,gBAAgB,GAAGD,QAAO;AAAG,eAAOC,KAAI,GAAGA,EAAC,IAAI,IAAI;AAAA,MAAE;AAAA,IAC1E,KAAK,UAAU;AACb,UAAI,MAAgB,MAAM;AAC1B,iBAAW,OAAO,EAAE,QAAS,OAAM,MAAM,KAAK,GAAG,GAAG,CAAC;AACrD,aAAO;AAAA,IACT;AAAA,IACA,KAAK,YAAY;AAMf,UAAI,MAAgB,MAAM;AAC1B,UAAI,YAA6B;AACjC,iBAAW,QAAQ,EAAE,SAAS;AAC5B,YAAI,oBAAoB,IAAI,GAAG;AAAE,sBAAY,SAAS,WAAW,GAAG,IAAI,CAAC;AAAG;AAAA,QAAS;AACrF,YAAI,CAAC,qBAAqB,IAAI,EAAG,OAAM,MAAM,KAAK,GAAG,IAAI,CAAC;AAC1D,YAAI,CAAC,QAAQ,IAAI,EAAG,QAAO,eAAe,KAAK,SAAS;AAAA,MAC1D;AACA,aAAO,eAAe,KAAK,SAAS;AAAA,IACtC;AAAA,IACA,KAAK,QAAQ;AAGX,YAAM,QAAQ,EAAE;AAChB,aAAO,QAAQ,KAAK,IAAI,IAAI,IAAI,GAAG,KAAK;AAAA,IAC1C;AAAA,IACA,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAa,aAAO,GAAG,EAAE,MAAM;AAAA,IACpC,KAAK;AAAa,aAAO,GAAG,EAAE,MAAM;AAAA;AAAA,IACpC;AAAkB,aAAO,EAAE,MAAM;AAAA,EACnC;AACF;AAEA,SAAS,YAAY,QAAkC;AACrD,MAAI,OAAO,WAAW,EAAG,QAAO,CAAC;AACjC,QAAM,SAAS,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,EAAE;AAErD,QAAM,MAAmB,CAAC,EAAE,IAAI,OAAO,CAAC,EAAG,IAAI,IAAI,OAAO,CAAC,EAAG,GAAG,CAAC;AAClE,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,UAAM,MAAM,IAAI,IAAI,SAAS,CAAC;AAC9B,UAAM,MAAM,OAAO,CAAC;AACpB,QAAI,IAAI,MAAM,IAAI,KAAK,GAAG;AACxB,UAAI,IAAI,KAAK,IAAI,GAAI,KAAI,KAAK,IAAI;AAAA,IACpC,OAAO;AACL,UAAI,KAAK,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,CAAC;AAAA,IACrC;AAAA,EACF;AACA,SAAO;AACT;;;AC7NO,IAAM,aAAa,CAAC,MACxB,EAAgD;AAsF5C,SAAS,WAAW,GAA8C;AACvE,UAAQ,EAAE,KAAK;AAAA,IACb,KAAK;AAAA,IAAY,KAAK;AAAU,aAAO,EAAE;AAAA,IACzC,KAAK;AAAY,aAAO;AAAA,QACtB,EAAE;AAAA,QACF,GAAG,EAAE,MAAM,IAAI,OAAK,EAAE,MAAM;AAAA,QAC5B,GAAI,EAAE,WAAW,EAAE,SAAS,IAAI,OAAK,EAAE,MAAM,IAAI,CAAC;AAAA,QAClD,GAAI,EAAE,cAAc,SAAY,CAAC,IAAI,CAAC,EAAE,SAAS;AAAA,MACnD;AAAA,IACA,KAAK;AAAS,aAAO,CAAC,EAAE,QAAQ,EAAE,SAAS;AAAA,IAC3C,KAAK;AAAW,aAAO,CAAC,EAAE,QAAQ,EAAE,QAAQ;AAAA,IAC5C,KAAK;AAAU,aAAO,CAAC,EAAE,UAAU,GAAG,EAAE,IAAI;AAAA,IAC5C,KAAK;AAAW,aAAO,EAAE,eAAe,CAAC,EAAE,QAAQ,EAAE,YAAY,IAAI,CAAC,EAAE,MAAM;AAAA,IAC9E,KAAK;AAAU,aAAO,EAAE,WAAW,CAAC,EAAE,QAAQ,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOnD,KAAK;AAAA,IAAQ,KAAK;AAAA,IAAW,KAAK;AAAA,IAAS,KAAK;AAAA,IAAY,KAAK;AAAA,IAAS,KAAK;AAAA,IAAa,KAAK;AAC/F,aAAO,CAAC;AAAA,IACV,SAAS;AACP,YAAM,MAAM;AACZ,aAAO,IAAI,SAAS,CAAC,IAAI,MAAM,IAAI,CAAC;AAAA,IACtC;AAAA,EACF;AACF;AAIA,IAAM,QAAQ,CAAC,OAA0B,GAAG,SAAS;AAoBrD,SAAS,aAAa,GAAa,GAAuB;AACxD,MAAI,EAAE,SAAS,MAAO,QAAO;AAC7B,MAAI,EAAE,SAAS,MAAO,QAAO;AAC7B,MAAI,EAAE,SAAS,WAAW,EAAE,SAAS,QAAS,QAAO,EAAE,MAAM,QAAQ;AACrE,QAAM,SAAS,CAAC;AAChB,aAAW,MAAM,EAAE,OAAQ,YAAW,MAAM,EAAE,QAAQ;AACpD,UAAM,KAAK,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE;AAChC,UAAM,KAAK,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE;AAChC,QAAI,MAAM,GAAI,QAAO,KAAK,EAAE,IAAI,GAAG,CAAC;AAAA,EACtC;AACA,SAAO,OAAO,WAAW,IAAI,EAAE,MAAM,QAAQ,IAAI,EAAE,MAAM,UAAU,OAAO;AAC5E;AAEA,SAAS,QAAQ,MAA4B;AAC3C,MAAI,MAAgB,EAAE,MAAM,QAAQ;AACpC,aAAW,KAAK,MAAM;AACpB,QAAI,EAAE,SAAS,MAAO,QAAO,EAAE,MAAM,MAAM;AAC3C,QAAI,EAAE,SAAS,QAAS;AACxB,UAAM,IAAI,SAAS,WAAW,EAAE,MAAM,UAAU,QAAQ,CAAC,GAAG,IAAI,QAAQ,GAAG,EAAE,MAAM,EAAE,IAAI;AAAA,EAC3F;AACA,SAAO;AACT;AAEA,IAAM,KAAK,CAAC,MAAuB,KAAK,MAAM,IAAI,MAAM,IAAI,OAAO,aAAa,CAAC,CAAC,MAAM,MAAM,CAAC;AACxF,SAAS,iBAAiB,IAAsB;AACrD,MAAI,GAAG,SAAS,MAAO,QAAO;AAC9B,MAAI,GAAG,SAAS,QAAS,QAAO;AAChC,SAAO,GAAG,OAAO,IAAI,OAAM,EAAE,OAAO,EAAE,KAAK,GAAG,EAAE,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,EAAG,EAAE,KAAK,GAAG;AAC5F;AAEA,IAAM,aAAa,CAAC,MACjB,EAAwC;AAM3C,IAAM,mBAAmB;AAYzB,IAAM,cAA6C;AAAA,EACjD,oBACE;AAAA,EAMF,eACE;AAAA,EAMF,mBACE;AAAA,EAMF,sBACE;AAAA,EAIF,kBACE;AAAA,EAGF,aACE;AAIJ;AAWA,SAAS,iBAAiB,OAAsB,KAAkC;AAChF,MAAI,UAAU,mBAAoB,QAAO,YAAY,KAAK;AAC1D,QAAMC,QAAO,cAAc,GAAG;AAC9B,QAAM,IAAIA,MAAK;AACf,MAAI,EAAE,QAAQ,WAAW,iBAAiB,KAAK,EAAE,MAAM,GAAG;AACxD,WAAO,qCAAqC,EAAE,MAAM;AAAA;AAAA,EAKtD;AACA,MAAI,EAAE,QAAQ,UAAU;AACtB,WAAO;AAAA,EAKT;AACA,SAAO,YAAY,KAAK;AAC1B;AAMA,SAAS,iBAAiB,KAA0BC,UAAiC;AACnF,QAAM,OAAO,oBAAI,IAAyB;AAG1C,QAAM,UAAU,CAAC,OAAwB,OAAsB,YAC5D,EAAE,OAAO,QAAQ,GAAI,OAAO,qBAAqB,EAAE,oBAAoB,KAAK,IAAI,CAAC,EAAG;AACvF,QAAM,OAAO,CAAC,MAA4C;AACxD,QAAI,KAAK,IAAI,CAAC,EAAG,QAAO,EAAE,OAAO,aAAa,QAAQ,YAAY;AAClE,SAAK,IAAI,CAAC;AACV,UAAM,IAAI,EAAE;AACZ,YAAQ,EAAE,KAAK;AAAA,MACb,KAAK;AAAA,MAAW,KAAK;AAAA,MAAS,KAAK;AACjC,eAAO,MAAM,EAAE,MAAM,QAAQ,IAAI,EAAE,OAAO,oBAAoB,QAAQ,qBAAqB,EAAE,GAAG,IAAI,IAAI;AAAA,MAC1G,KAAK;AACH,eAAO,EAAE,OAAO,eAAe,QAAQ,mCAAmC;AAAA;AAAA;AAAA,MAG5E,KAAK;AACH,eAAO,KAAK,EAAE,MAAM;AAAA,MACtB,KAAK;AACH,eAAO,EAAE,OAAO,oBAAoB,QAAQ,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA,MAKxE,KAAK;AACH,eAAO,EAAE,OAAO,kBAAkB,QAAQ,mBAAmB,EAAE,GAAG,IAAI;AAAA;AAAA;AAAA;AAAA,MAIxE,KAAK;AACH,eAAO,EAAE,OAAO,oBAAoB,QAAQ,GAAG,EAAE,QAAQ,4BAA4B;AAAA;AAAA;AAAA,MAGvF,KAAK;AAAA,MAAW,KAAK;AAAA,MAAW,KAAK;AACnC,eAAO,KAAK,EAAE,MAAM;AAAA,MACtB,KAAK,QAAQ;AACX,cAAM,OAAQ,EAAwC;AACtD,YAAI;AACJ,YAAI;AAAE,mBAAU,EAAuC,MAAM;AAAA,QAAE,QACzD;AAIJ,gBAAM,QAAQ,SAAS,SAAYA,WAAU,IAAI,IAAI;AACrD,cAAI,UAAU;AACZ,mBAAO,EAAE,OAAO,sBAAsB,QAAQ,iBAAiB,OAAO,MAAM,IAAI,KAAK,EAAE,IAAI,oBAAoB,SAAS,OAAU;AACpI,mBAAS;AAAA,QACX;AACA,cAAM,QAAQ,KAAK,MAAM;AACzB,YAAI,SAAS,OAAW,QAAO,QAAQ,QAAQ,OAAO,sBAAsB,aAAa,IAAI,WAAM,MAAM,MAAM,EAAE,IAAI;AACrH,eAAO;AAAA,MACT;AAAA,MACA,KAAK;AAAA,MAAY,KAAK,QAAQ;AAC5B,cAAM,QAAQ,KAAK,EAAE,MAAM;AAC3B,eAAO,QAAQ,OAAO,mBAAmB,QAAQ,0BAAqB,MAAM,MAAM,KAAK,+BAA+B;AAAA,MACxH;AAAA,MACA,KAAK;AAAA,MAAa,KAAK;AAAA,MAAa,KAAK;AAAA,MAAS,KAAK;AAAA,MACvD,KAAK;AAAA,MAAU,KAAK;AAAA,MAAS,KAAK;AAAA,MAAQ,KAAK;AAAA,MAAQ,KAAK;AAAA,MAAW,KAAK;AAC1E,eAAO,KAAK,EAAE,MAAM;AAAA,MACtB,KAAK,YAAY;AAKf,YAAI,oBAAoB;AACxB,mBAAWC,MAAK,EAAE,SAAS;AACzB,cAAKA,GAAE,KAAmB,QAAQ,OAAO;AAAE,gCAAoB;AAAM;AAAA,UAAS;AAC9E,cAAI,MAAM,WAAWA,IAAG,oBAAI,IAAI,GAAGD,QAAO,CAAC,GAAG;AAC5C,kBAAM,QAAQ,KAAKC,EAAC;AACpB,gBAAI;AACF,qBAAO,QAAQ,OAAO,mBAAmB,QAAQ,0BAAqB,MAAM,MAAM,KAAK,+BAA+B;AACxH,mBAAO,SAAS,EAAE,OAAO,oBAAoB,QAAQ,iCAAiC;AAAA,UACxF;AACA,cAAI,aAAaA,IAAG,oBAAI,IAAI,GAAGD,QAAO,GAAG;AAAE,gCAAoB;AAAM;AAAA,UAAS;AAC9E,iBAAO;AAAA,QACT;AACA,eAAO,EAAE,OAAO,oBAAoB,QAAQ,6CAA6C;AAAA,MAC3F;AAAA,MACA,KAAK,UAAU;AACb,mBAAW,KAAK,EAAE,SAAS;AAAE,gBAAM,IAAI,KAAK,CAAC;AAAG,cAAI,EAAG,QAAO,QAAQ,GAAG,EAAE,OAAO,qBAAgB,EAAE,MAAM,EAAE;AAAA,QAAE;AAC9G,eAAO;AAAA,MACT;AAAA,MACA,KAAK;AACH,eAAO,KAAK,EAAE,QAAQ;AAAA,MACxB;AACE,eAAO,EAAE,OAAO,oBAAoB,QAAQ,wBAAwB,EAAE,GAAG,IAAI;AAAA,IACjF;AAAA,EACF;AACA,SAAO,KAAK,GAAG,KAAK,EAAE,OAAO,oBAAoB,QAAQ,8BAA8B;AACzF;AAKO,SAAS,cAAc,KAA+C;AAC3E,MAAI,IAAI,IAAI;AACZ,MAAI,MAAM;AACV,aAAS;AACP,QAAI,EAAE,QAAQ,UAAU,EAAE,QAAQ,aAAa,EAAE,QAAQ,eAAe,EAAE,QAAQ,WAAW,EAAE,QAAQ,WAAW;AAChH,YAAO,EAAsC;AAC7C,UAAI,IAAI;AACR;AAAA,IACF;AACA;AAAA,EACF;AACA,MAAI,EAAE,QAAQ,cAAc,EAAE,QAAQ,UAAU,EAAG,QAAO,EAAE,QAAQ,CAAC;AACrE,SAAO;AACT;AAEA,SAAS,mBAAmBE,OAAc,MAAqD;AAC7F,QAAM,MAAqB,CAAC;AAC5B,OAAK,QAAQ,CAAC,KAAK,MAAM;AACvB,UAAMH,QAAO,cAAc,GAAG;AAC9B,UAAM,KAAKA,MAAK;AAGhB,QAAI,GAAG,QAAQ,OAAO;AACpB,YAAM,QAAS,GAAuC;AACtD,UAAK,MAAM,KAAmB,QAAQ,OAAO;AAC3C,YAAI,KAAK;AAAA,UAAE,MAAM;AAAA,UAAc,MAAAG;AAAA,UAAM,UAAU;AAAA,UAC7C,SAAS;AAAA,QAKuD,CAAC;AAAA,MACrE,OAAO;AACL,YAAI,KAAK;AAAA,UAAE,MAAM;AAAA,UAAe,MAAAA;AAAA,UAAM,UAAU;AAAA,UAC9C,SAAS;AAAA,QAGsB,CAAC;AAAA,MACpC;AAAA,IACF;AAGA,QAAI,GAAG,QAAQ,WAAW,iBAAiB,KAAK,GAAG,MAAM,GAAG;AAC1D,UAAI,KAAK;AAAA,QAAE,MAAM;AAAA,QAAiB,MAAAA;AAAA,QAAM,UAAU;AAAA,QAChD,SAAS,yCAAyC,GAAG,MAAM;AAAA,MAGX,CAAC;AAAA,IACrD;AAAA,EACF,CAAC;AACD,SAAO;AACT;AAIO,SAAS,cAAc,OAA4B,MAA2C;AACnG,SAAO,mBAAmB,CAAC,CAAC,WAAW,KAAK,KAAK,MAAM,aAAa,WAAW,KAAK,CAAC,GAAG,IAAI;AAC9F;AAcO,SAAS,mBACd,SACA,MACc;AACd,QAAM,MAA0G,CAAC;AACjH,QAAM,eAA8B,CAAC;AACrC,QAAM,eAA+B,CAAC;AACtC,QAAM,mBAAmB,oBAAI,IAAY;AACzC,QAAM,UAAU,oBAAI,IAAyB;AAE7C,QAAM,mBAAmB,CAAC,MAA0B;AAClD,UAAM,MAAM,GAAG,EAAE,IAAI,KAAS,EAAE,IAAI;AACpC,QAAI,iBAAiB,IAAI,GAAG,EAAG;AAC/B,qBAAiB,IAAI,GAAG;AACxB,iBAAa,KAAK,CAAC;AAAA,EACrB;AAEA,QAAM,QAAQ,CAAC,GAAwB,kBAAgC;AACrE,QAAI,QAAQ,IAAI,CAAC,EAAG;AACpB,YAAQ,IAAI,CAAC;AAKb,UAAM,MAAO,GAA6C;AAC1D,QAAI,QAAQ,QAAQ,OAAO,QAAQ,UAAU;AAC3C;AAAA,QACE,OAAO,MAAM,aACT;AAAA,UACE,MAAM;AAAA,UAAe,MAAM;AAAA,UAC3B,QAAQ;AAAA,QAEV,IACA;AAAA,UACE,MAAM;AAAA,UAAe,MAAM;AAAA,UAC3B,QAAQ,iBAAiB,MAAM,OAAO,SAAS,OAAO,CAAC;AAAA,QACzD;AAAA,MACN;AACA;AAAA,IACF;AACA,UAAM,IAAI;AACV,UAAMA,QAAO,WAAW,CAAC,KAAK;AAC9B,QAAI,EAAE,QAAQ,UAAU;AACtB,UAAI,KAAK,EAAE,GAAG,cAAc,GAAG,GAAGA,OAAM,MAAM,UAAU,GAAG,MAAAA,OAAM,MAAM,EAAE,QAAQ,CAAC;AAClF,mBAAa,KAAK,GAAG,mBAAmBA,OAAM,EAAE,OAAO,CAAC;AAAA,IAC1D;AAKA,UAAM,OAAO,CAAC,GAAG,WAAW,CAAC,CAAC;AAO9B,QAAI,EAAE,QAAQ,QAAQ;AAAE,UAAI;AAAE,aAAK,KAAM,EAAuC,MAAM,CAAC;AAAA,MAAE,QAAQ;AAAA,MAAmB;AAAA,IAAE;AACtH,eAAW,KAAK,KAAM,OAAM,GAAGA,KAAI;AAAA,EACrC;AAKA,aAAW,CAAC,MAAM,IAAI,KAAK,QAAS,OAAM,MAAM,WAAW,IAAI,KAAK,IAAI;AAIxE,QAAM,UAAU,oBAAI,IAAoB;AACxC,aAAW,KAAK,IAAK,SAAQ,IAAI,EAAE,OAAO,QAAQ,IAAI,EAAE,IAAI,KAAK,KAAK,CAAC;AACvE,QAAM,aAAa,oBAAI,IAAoB;AAC3C,QAAM,SAAS,IAAI,IAAI,MAAM,UAAU,CAAC,CAAC;AACzC,QAAM,aAAa,oBAAI,IAAY;AACnC,QAAM,UAA0B,IAAI,IAAI,CAAC,EAAE,GAAG,MAAAA,OAAM,KAAK,MAAM;AAC7D,UAAM,IAAI,WAAW,IAAIA,KAAI,KAAK;AAClC,eAAW,IAAIA,OAAM,IAAI,CAAC;AAC1B,UAAM,MAAM,QAAQ,IAAIA,KAAI,KAAK,OAAO,IAAIA,QAAO,GAAGA,KAAI,IAAI,CAAC;AAC/D,UAAM,aAAa,EAAE,UAAU,QAAQ,OAAO,IAAI,EAAE;AACpD,QAAI,WAAY,YAAW,IAAI,EAAE;AACjC,UAAM,MAAoB,EAAE,GAAG,GAAG,IAAI,UAAU,WAAW;AAO3D,WAAO,eAAe,KAAK,QAAQ,EAAE,OAAO,MAAM,YAAY,OAAO,UAAU,MAAM,CAAC;AACtF,WAAO;AAAA,EACT,CAAC;AAED,QAAM,QAAQ,QAAQ,OAAO,OAAK,EAAE,UAAU,KAAK,EAAE;AACrD,QAAM,cAAc,QAAQ,OAAO,OAAK,EAAE,UAAU,aAAa,EAAE;AACnE,QAAM,UAAU,QAAQ,OAAO,OAAK,EAAE,UAAU,QAAQ,CAAC,EAAE,YAAY,CAAC,EAAE,QAAQ;AAClF,QAAM,WAAW,QAAQ,OAAO,OAAK,EAAE,UAAU,QAAQ,EAAE,QAAQ;AACnE,QAAM,WAAW,QAAQ,OAAO,OAAK,EAAE,UAAU,QAAQ,CAAC,EAAE,YAAY,EAAE,QAAQ;AAClF,QAAM,iBAAiB,CAAC,GAAG,MAAM,EAAE,OAAO,QAAM,CAAC,WAAW,IAAI,EAAE,CAAC;AACnE,SAAO;AAAA,IACL,cAAc,QAAQ;AAAA,IAAQ;AAAA,IAAO;AAAA,IAAa;AAAA,IAClD;AAAA,IAAS;AAAA,IAAU;AAAA,IAAU;AAAA,IAAgB;AAAA,IAAS;AAAA,EACxD;AACF;AAIA,SAAS,cACP,GACA,GACAA,OACAF,UACuC;AACvC,QAAM,OAAO,EAAE;AACf,QAAM,UAAU,KAAK,IAAI,OAAK,EAAE,MAAM,QAAQ;AAC9C,QAAM,OAAO,KAAK,IAAI,OAAK,WAAW,GAAG,oBAAI,IAAI,GAAGA,QAAO,CAAC;AAE5D,QAAM,UAAoB,KACvB,IAAI,CAAC,IAAI,WAAW,EAAE,IAAI,MAAM,EAAE,EAClC,OAAO,OAAK,MAAM,EAAE,EAAE,CAAC,EACvB,IAAI,CAAC,EAAE,MAAM,MAAM;AAClB,UAAM,EAAE,OAAO,QAAQ,mBAAmB,IAAI,iBAAiB,KAAK,KAAK,GAAIA,QAAO;AACpF,WAAO;AAAA,MACL;AAAA,MAAO;AAAA,MAAO;AAAA,MAAQ,gBAAgB;AAAA,MACtC,oBAAoB,uBAAuB;AAAA,MAC3C,YAAY,iBAAiB,OAAO,KAAK,KAAK,CAAE;AAAA,IAClD;AAAA,EACF,CAAC;AAEH,QAAM,WAAsB,CAAC;AAC7B,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ;AAC/B,aAAS,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ;AACnC,UAAI,CAAC,MAAM,KAAK,CAAC,CAAE,KAAK,CAAC,MAAM,KAAK,CAAC,CAAE,KAAK,WAAW,KAAK,CAAC,GAAI,KAAK,CAAC,CAAE;AACvE,iBAAS,KAAK;AAAA,UAAE,GAAG;AAAA,UAAG,GAAG;AAAA,UAAG,IAAI,aAAa,KAAK,CAAC,GAAI,KAAK,CAAC,CAAE;AAAA,UAC7D,YAAY;AAAA,QAKoE,CAAC;AAMzF,MAAI;AACJ,MAAI,EAAE,SAAU,SAAQ;AAAA,WACf,QAAQ,WAAW,KAAK,SAAS,WAAW,EAAG,SAAQ;AAAA,MAC3D,SAAQ;AAKb,QAAM,WAAW,UAAU,QAAQ,SAAS,WAAW,KAAK,QAAQ,SAAS,KAAK,QAAQ,MAAM,OAAK,EAAE,kBAAkB;AAEzH,SAAO;AAAA,IACL,MAAAE;AAAA,IACA,UAAY,EAAE,UAAqD,OAAQ;AAAA,IAC3E;AAAA,IACA;AAAA,IACA,kBAAkB,EAAE,SAAS,QAAQ,OAAO,GAAG,MAAM,QAAQ,IAAI,EAAE;AAAA,IACnE;AAAA,IAAS;AAAA,EACX;AACF;;;AC3qBO,IAAM,kBAAkB,uBAAO,IAAI,wBAAwB;AAG3D,IAAM,oBAAoB,uBAAO,IAAI,0BAA0B;;;AC5BtE,IAAM,YAAY;AAyBX,SAAS,qBAAqB,GAAwB,QAAgB,WAAoB;AAG/F,MAAI,UAAU,EAAG,QAAO;AACxB,QAAM,IAAI,EAAE;AACZ,UAAQ,EAAE,KAAK;AAAA;AAAA,IAEb,KAAK;AAAY,aAAO,EAAE,QAAQ,SAAS;AAAA,IAC3C,KAAK;AAAA,IAAQ,KAAK;AAAA,IAAa,KAAK;AAAS,aAAO;AAAA;AAAA,IAEpD,KAAK;AAAA,IAAQ,KAAK;AAAA,IAAa,KAAK;AAAA,IAAQ,KAAK;AAAA,IAAS,KAAK;AAAA,IAC/D,KAAK;AAAA,IAAS,KAAK;AAAA,IAAW,KAAK;AAAA,IAAY,KAAK;AAAA,IAAU,KAAK;AAAA,IACnE,KAAK;AAAA,IAAW,KAAK;AACnB,aAAO,qBAAqB,EAAE,QAAQ,QAAQ,CAAC;AAAA;AAAA;AAAA,IAGjD,KAAK;AAAU,aAAO,EAAE,QAAQ,KAAK,OAAK,qBAAqB,GAAG,QAAQ,CAAC,CAAC;AAAA,IAC5E;AAAS,aAAO;AAAA,EAClB;AACF;;;AC9BO,SAAS,MAA6D;AAC3E,MAAI,WAAiC;AAErC,MAAI,cAAc;AAElB,QAAM,OAAmB;AAAA,IACvB,UAAU,IAAI;AAAA,IACd,iBAAiB;AAAA,IACjB,UAAU;AAAA,EACZ;AAEA,QAAM,OAAO;AAAA,IACX,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,MACJ,KAAK;AAAA,MACL,OAAO,MAAM;AACX,YAAI,CAAC,SAAU,OAAM,IAAI,MAAM,2CAA2C;AAC1E,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,MAAM,OAAe,KAAa,KAAmC;AACnE,UAAI,CAAC,SAAU,OAAM,IAAI,MAAM,2CAA2C;AA4C1E,YAAM,KAAK,KAAK;AAChB,UAAI,OAAO,UAAa,eAAe,IAAI,WAAW,QAAW;AAC/D,cAAM,cAAc,IAAI;AACxB,YAAI,SAAS;AACb,YAAI,mBAAmB,GAAG,MAAM;AAChC,YAAI;AAAE,iBAAO,SAAS,MAAM,OAAO,KAAK,GAAG;AAAA,QAAE,UAC7C;AAAU,cAAI,SAAS;AAAW,cAAI,mBAAmB;AAAA,QAAY;AAAA,MACvE;AACA,aAAO,SAAS,MAAM,OAAO,KAAK,GAAG;AAAA,IACvC;AAAA,IACA,OAAO,GAAwB;AAC7B,UAAI,SAAU,OAAM,IAAI,MAAM,0BAA0B;AACxD,iBAAW;AACX,oBAAc,qBAAqB,CAAwB;AAC3D,WAAK,WAAW,EAAE,MAAM;AACxB,WAAK,kBAAkB,EAAE,MAAM;AAC/B,WAAK,WAAW,EAAE,MAAM;AACxB,UAAI,EAAE,MAAM,qBAAqB,OAAW,MAAK,mBAAmB,EAAE,MAAM;AAAA,UACvE,QAAO,KAAK;AACjB,UAAI,EAAE,MAAM,aAAa,OAAW,MAAK,WAAW,EAAE,MAAM;AAAA,UACvD,QAAO,KAAK;AAAA,IACnB;AAAA,EACF;AAEA,SAAO;AACT;;;ACrFO,SAAS,iBAAiB,MAAiC;AAChE,QAAM,eAAe,oBAAI,QAA6B;AACtD,QAAM,iBAAiB,oBAAI,QAA6B;AAExD,QAAM,OAAO,CAAC,KAAgC,aAA4B;AACxE,QAAI,SAAU,KAAI,cAAc;AAAA,aACvB,IAAI,gBAAgB,MAAO,KAAI,cAAc;AAAA,EACxD;AAEA,QAAM,QAAQ,CAAC,GAAwB,aAA4B;AACjE,UAAM,OAAO,WAAW,eAAe;AACvC,QAAI,KAAK,IAAI,CAAC,EAAG;AACjB,SAAK,IAAI,CAAC;AAEV,UAAM,MAAM,EAAE;AAEd,YAAQ,IAAI,KAAK;AAAA,MACf,KAAK;AAAA,MACL,KAAK;AACH,aAAK,KAAK,QAAQ;AAClB,cAAM,IAAI,QAAQ,QAAQ;AAC1B;AAAA,MACF,KAAK;AAKH,cAAM,IAAI,QAAQ,QAAQ;AAC1B;AAAA,MACF,KAAK;AACH,aAAK,KAAK,QAAQ;AAClB,mBAAW,KAAK,IAAI,QAAS,OAAM,GAAG,QAAQ;AAC9C;AAAA,MACF,KAAK;AAEH,mBAAW,KAAK,IAAI,QAAS,OAAM,GAAG,QAAQ;AAC9C;AAAA,MACF,KAAK;AACH,cAAM,IAAI,UAAU,QAAQ;AAC5B,mBAAW,SAAS,IAAI,MAAO,OAAM,MAAM,QAAQ,QAAQ;AAC3D,YAAI,IAAI,SAAU,YAAW,SAAS,IAAI,SAAU,OAAM,MAAM,QAAQ,QAAQ;AAChF,YAAI,IAAI,UAAW,OAAM,IAAI,WAAW,QAAQ;AAChD;AAAA,MACF,KAAK;AAEH,cAAM,IAAI,QAAQ,KAAK;AACvB;AAAA,MACF,KAAK;AAEH,cAAM,IAAI,QAAQ,IAAI;AACtB;AAAA,MACF,KAAK;AAEH,cAAM,IAAI,QAAQ,IAAI;AACtB;AAAA,MACF,KAAK;AAIH,cAAM,IAAI,QAAQ,IAAI;AACtB,cAAM,IAAI,WAAW,KAAK;AAC1B;AAAA,MACF,KAAK;AAAA,MACL,KAAK;AACH,cAAM,IAAI,QAAQ,KAAK;AACvB;AAAA,MACF,KAAK;AACH,cAAM,IAAI,QAAQ,QAAQ;AAC1B,YAAI,IAAI,aAAc,OAAM,IAAI,cAAc,KAAK;AACnD;AAAA,MACF,KAAK;AACH,cAAM,IAAI,QAAQ,QAAQ;AAC1B,cAAM,IAAI,UAAU,KAAK;AACzB;AAAA,MACF,KAAK;AAIH,cAAM,IAAI,QAAQ,KAAK;AACvB;AAAA,MACF,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,cAAM,IAAI,QAAQ,QAAQ;AAC1B;AAAA,MACF,KAAK;AAGH,cAAM,IAAI,QAAQ,IAAI;AACtB;AAAA,MACF,KAAK;AAKH;AAAA,MACF;AAEE;AAAA,IACJ;AAAA,EACF;AAOA,QAAM,cAAc,CAAC,MAAgD;AACnE,UAAM,QAAQ,oBAAI,IAAyB;AAC3C,QAAI,MAAM;AACV,WAAO,CAAC,MAAM,IAAI,GAAG,GAAG;AACtB,YAAM,IAAI,IAAI;AACd,UAAI,EAAE,QAAQ,WAAW;AAAE,cAAM,IAAI,GAAG;AAAG,cAAM,EAAE;AAAQ;AAAA,MAAS;AACpE,UAAI,EAAE,QAAQ,OAAQ,QAAO;AAC7B,YAAM,IAAI,GAAG;AACb,UAAI;AAAE,cAAM,EAAE,MAAM;AAAA,MAAE,QAAQ;AAAE,eAAO;AAAA,MAAE;AAAA,IAC3C;AACA,WAAO;AAAA,EACT;AAEA,QAAM,YAAY,IAAI,GAAG,IAAI;AAC/B;;;ACpIO,SAAS,kBAA6B;AAC3C,SAAO,EAAE,YAAY,CAAC,CAAC,EAAE;AAC3B;AAgBO,SAAS,gBAAgB,OAAkB,OAAe,OAAe,KAAmB;AACjG,QAAM,aAAa,MAAM;AACzB,WAAS,IAAI,OAAO,IAAI,KAAK,KAAK;AAChC,QAAI,MAAM,WAAW,CAAC,MAAM,GAAI,YAAW,KAAK,IAAI,CAAC;AAAA,EACvD;AACF;AAOO,SAAS,2BACd,KACA,OACA,YACA,KACM;AACN,MAAI,CAAC,IAAI,WAAY;AACrB,QAAM,OAAO,IAAI,kBAAkB;AACnC,MAAI,OAAO,KAAM;AACjB,QAAM,QAAQ,IAAI,eAAe,IAAI,cAAc,EAAE,YAAY,IAAI,YAAY,IAAI;AACrF,MAAI,CAAC,MAAO;AACZ,kBAAgB,OAAO,OAAO,MAAM,GAAG;AACvC,MAAI,iBAAiB;AACvB;AAEO,SAAS,mBAAmB,OAA6B;AAC9D,QAAM,SAAS,MAAM;AACrB,SAAO,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC;AAC3B,MAAIC,SAAQ;AACZ,WAAS,OAAO,GAAG,OAAO,OAAO,QAAQ,QAAQ;AAC/C,UAAM,QAAQ,OAAO,IAAI;AACzB,QAAIA,WAAU,KAAK,OAAOA,SAAQ,CAAC,MAAM,MAAO,QAAOA,QAAO,IAAI;AAAA,EACpE;AACA,SAAO,SAASA;AAChB,MAAI,OAAO,WAAW,KAAK,OAAO,CAAC,MAAM,EAAG,QAAO,QAAQ,CAAC;AAC5D,SAAO;AACT;AAEO,SAAS,gBACd,OACA,QAC+B;AAC/B,QAAM,EAAE,WAAW,IAAI;AACvB,MAAI,KAAK;AACT,MAAI,KAAK,WAAW,SAAS;AAC7B,SAAO,KAAK,IAAI;AACd,UAAM,MAAO,KAAK,KAAK,KAAM;AAC7B,QAAI,WAAW,GAAG,KAAM,OAAQ,MAAK;AAAA,QAChC,MAAK,MAAM;AAAA,EAClB;AACA,SAAO,EAAE,MAAM,KAAK,GAAG,KAAK,SAAS,WAAW,EAAE,IAAK,EAAE;AAC3D;AAGO,SAAS,aAAa,MAAY,OAAwB;AAC/D,QAAM,IAAI,gBAAgB,OAAO,KAAK,KAAK;AAC3C,QAAM,IAAI,gBAAgB,OAAO,KAAK,GAAG;AACzC,SAAO;AAAA,IACL,GAAG;AAAA,IACH,WAAW,EAAE;AAAA,IACb,aAAa,EAAE;AAAA,IACf,SAAS,EAAE;AAAA,IACX,WAAW,EAAE;AAAA,EACf;AACF;AAEO,SAAS,4BACd,MACA,KACM;AACN,MAAI,CAAC,IAAI,WAAY,QAAO;AAC5B,QAAM,QAAQ,IAAI,eAAe,IAAI,cAAc,EAAE,YAAY,IAAI,YAAY,IAAI;AACrF,SAAO,QAAQ,aAAa,MAAM,KAAK,IAAI;AAC7C;;;AC5FA,IAAM,QAAmB,CAAC;AAC1B,IAAM,WAAqB,CAAC;AAErB,SAAS,iBAAiB,KAA4B;AAC3D,SAAO,IAAI,YAAY,UAAa,IAAI,eAAe;AACzD;AAWO,SAAS,oBAAoB,KAAwC;AAC1E,QAAM,QAA6B;AAAA,IACjC,IAAI,IAAI;AAAA,IACR,IAAI,IAAI;AAAA,IACR,KAAK,IAAI;AAAA,IACT,IAAI,IAAI;AAAA,IACR,KAAK,IAAI;AAAA,IACT,KAAK,IAAI;AAAA,EACX;AACA,MAAI,UAAU,CAAC;AACf,MAAI,eAAe;AACnB,MAAI,aAAa;AACjB,MAAI,kBAAkB;AACtB,MAAI,gBAAgB;AACpB,MAAI,gBAAgB;AACpB,SAAO;AACT;AAEO,SAAS,aAAa,KAI3B;AACA,MAAI,CAAC,IAAK,QAAO,EAAE,UAAU,OAAO,aAAa,OAAO,WAAW,SAAS;AAC5E,QAAMC,YAAW,IAAI,OAAO,IAAI,WAAW,SAAY,CAAC,IAAI,MAAM,IAAI;AACtE,QAAM,cAAc,IAAI,QAAQ,IAAI,cAAc,SAAY,CAAC,IAAI,SAAS,IAAI;AAChF,QAAM,YAAY,IAAI,MAAM;AAC5B,SAAO,EAAE,UAAAA,WAAU,aAAa,UAAU;AAC5C;AAEO,SAAS,kBACd,KACA,OACsE;AACtE,QAAM,eAAe,aAAa,IAAI,OAAO;AAC7C,MAAI,UAAU,MAAM;AACpB,MAAI,eAAe,MAAM;AACzB,MAAI,aAAa,MAAM;AACvB,MAAI,kBAAkB,MAAM;AAC5B,MAAI,gBAAgB,MAAM;AAC1B,MAAI,gBAAgB,MAAM;AAC1B,SAAO;AACT;AAEO,SAAS,YAAY,KAAmBC,OAAqB;AAClE,MAAI,CAAC,IAAI,YAAY;AACnB,iBAAa,KAAKA,OAAMA,KAAI;AAC5B;AAAA,EACF;AACA,QAAM,YAAYA,SAAQ,OAAOA,UAAS,YAAaA,MAA4B,OAC/E,EAAE,GAAIA,OAAkC,MAAM,4BAA6BA,MAAwB,MAAM,GAAG,EAAE,IAC9GA;AACJ,eAAa,KAAK,WAAW,SAAS;AACxC;AAGO,SAAS,aAAa,KAAmB,OAAgBC,WAAyB;AACvF,QAAM,IAAI,IAAI;AACd,MAAI,GAAG;AACL,QAAI,EAAE,YAAY,MAAM;AACtB,UAAI,EAAE,GAAI,GAAE,GAAG,KAAK,KAAK;AAAA,eAChB,EAAE,WAAW,QAAW;AAAE,UAAE,KAAK,CAAC,EAAE,QAAQ,KAAK;AAAG,UAAE,SAAS;AAAA,MAAU,MAC7E,GAAE,SAAS;AAAA,IAClB;AAEA,QAAI,EAAE,IAAK,GAAE,IAAI,KAAKA,SAAQ;AAAA,aACrB,EAAE,cAAc,QAAW;AAAE,QAAE,MAAM,CAAC,EAAE,WAAWA,SAAQ;AAAG,QAAE,YAAY;AAAA,IAAU,MAC1F,GAAE,YAAYA;AACnB;AAAA,EACF;AACA,MAAI,IAAI,aAAc,KAAI,aAAa,KAAK,KAAK;AAAA,WACxC,IAAI,WAAY,KAAI,WAAW,KAAK,KAAK;AAClD,MAAI,IAAI,gBAAiB,KAAI,gBAAgB,KAAKA,SAAQ;AAC5D;AAEO,SAAS,UAAU,KAA2B;AACnD,QAAM,IAAI,IAAI;AACd,MAAI,GAAG;AACL,QAAI,EAAE,IAAK,QAAO,EAAE,IAAI;AACxB,WAAO,EAAE,cAAc,SAAY,IAAI;AAAA,EACzC;AACA,SAAO,IAAI,iBAAiB,UAAU;AACxC;AAEO,SAAS,aAAa,KAA2B;AACtD,QAAM,IAAI,IAAI;AACd,MAAI,GAAG;AACL,QAAI,EAAE,GAAI,QAAO,EAAE,GAAG;AACtB,WAAO,EAAE,WAAW,SAAY,IAAI;AAAA,EACtC;AACA,SAAO,IAAI,YAAY,UAAU;AACnC;AAEO,SAAS,SAAS,KAA2B;AAClD,QAAM,IAAI,IAAI;AACd,MAAI,EAAG,QAAO,EAAE,IAAI,UAAU;AAC9B,SAAO,IAAI,eAAe,UAAU;AACtC;AAIO,SAAS,YAAY,KAAoC;AAC9D,SAAO;AAAA,IACL,KAAK,UAAU,GAAG;AAAA,IAClB,MAAM,SAAS,GAAG;AAAA,IAClB,QAAQ,aAAa,GAAG;AAAA,IACxB,QAAQ,IAAI,SAAS,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAM/B,QAAQ,IAAI,SAAS,UAAU;AAAA,EACjC;AACF;AAEA,SAAS,gBACP,GACA,UACA,WACA,KACM;AACN,QAAM,MAAM,EAAE,QAAQ;AACtB,MAAI,KAAK;AACP,QAAI,QAAQ,EAAG,GAAE,QAAQ,IAAI;AAAA,aACpB,QAAQ,GAAG;AAAE,QAAE,SAAS,IAAI,IAAI,CAAC;AAAG,QAAE,QAAQ,IAAI;AAAA,IAAU,WAO5D,IAAI,WAAW,IAAK,KAAI,SAAS;AAC1C;AAAA,EACF;AACA,MAAI,QAAQ,EAAG,GAAE,SAAS,IAAI;AAChC;AAmBO,SAAS,oBAAoB,KAAmB,aAA2B;AAChF,QAAM,IAAI,IAAI;AACd,MAAI,GAAG;AACL,oBAAgB,GAAG,MAAM,UAAU,WAAW;AAC9C;AAAA,EACF;AAOA,MAAI,IAAI,cAAc,IAAI,WAAW,WAAW,YAAa,KAAI,WAAW,SAAS;AACvF;AAEO,SAAS,mBAAmB,KAAmB,MAA6B;AACjF,uBAAqB,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK,QAAQ,KAAK,QAAQ,KAAK,MAAM;AACtF;AAeO,SAAS,qBACd,KACA,KACA,MACA,QACA,QACA,QACM;AAYN,MAAI,IAAI,WAAW,WAAW,UAAa,IAAI,QAAQ,WAAW,OAAQ,KAAI,QAAQ,SAAS;AAC/F,QAAM,IAAI,IAAI;AACd,MAAI,GAAG;AACL,oBAAgB,GAAG,OAAO,aAAa,GAAG;AAC1C,oBAAgB,GAAG,MAAM,UAAU,MAAM;AACzC,QAAI,EAAE,IAAI;AACR,UAAI,SAAS,EAAG,GAAE,KAAK;AAAA,eACd,EAAE,GAAG,WAAW,KAAM,GAAE,GAAG,SAAS;AAAA,IAC/C;AACA,QAAI,IAAI,WAAW,IAAI,QAAQ,WAAW,OAAQ,KAAI,QAAQ,SAAS;AACvE;AAAA,EACF;AACA,MAAI,IAAI,mBAAmB,IAAI,gBAAgB,WAAW,IAAK,KAAI,gBAAgB,SAAS;AAC5F,MAAI,IAAI,iBAAiB,IAAI,cAAc,WAAW,KAAM,KAAI,cAAc,SAAS;AACvF,MAAI,IAAI,cAAc,IAAI,WAAW,WAAW,OAAQ,KAAI,WAAW,SAAS;AAChF,MAAI,IAAI,WAAW,IAAI,QAAQ,WAAW,OAAQ,KAAI,QAAQ,SAAS;AACzE;AAEO,SAAS,mBACd,KACA,OACA,KACA,WACM;AACN,QAAM,YAAY,UAAU,GAAG;AAC/B,QAAM,IAAI,IAAI;AACd,QAAM,WAAW,IAAI,qBAAqB,UAAa,cAAc;AACrE,MAAI,GAAG;AACL,QAAI,CAAC,EAAE,IAAI;AACT,QAAE,KAAK,WAAW,CAAC,OAAO,KAAK,WAAW,SAAS,IAAI,CAAC,OAAO,KAAK,SAAS;AAAA,IAC/E,WAAW,UAAU;AACnB,QAAE,GAAG,KAAK,OAAO,KAAK,WAAW,SAAS;AAAA,IAC5C,OAAO;AACL,QAAE,GAAG,KAAK,OAAO,KAAK,SAAS;AAAA,IACjC;AACA;AAAA,EACF;AACA,MAAI,IAAI,eAAe;AACrB,QAAI,SAAU,KAAI,cAAc,KAAK,OAAO,KAAK,WAAW,SAAS;AAAA,QAChE,KAAI,cAAc,KAAK,OAAO,KAAK,SAAS;AAAA,EACnD;AACF;AAEO,SAAS,mBACd,KACA,OACA,KACA,WACM;AACN,MAAI,CAAC,IAAI,WAAY;AACrB,MAAI,IAAI,qBAAqB,UAAa,cAAc,QAAW;AACjE,QAAI,WAAW,KAAK,OAAO,KAAK,SAAS;AAAA,EAC3C,OAAO;AACL,QAAI,WAAW,KAAK,OAAO,GAAG;AAAA,EAChC;AACF;;;AC3PO,SAAS,qBAAmC;AACjD,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,eAAe;AAAA,IACf,oBAAoB;AAAA,IACpB,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,SAAS;AAAA,IACT,WAAW;AAAA,IACX,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,sBAAsB;AAAA,IACtB,yBAAyB;AAAA,IACzB,oBAAoB;AAAA,IACpB,eAAe;AAAA,IACf,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,kBAAkB;AAAA,IAClB,eAAe;AAAA,EACjB;AACF;AAQO,SAAS,2BAA2B,YAAqB,OAA8B;AAC5F,QAAM,MAAM,mBAAmB;AAC/B,MAAI,aAAa;AACjB,MAAI,QAAQ;AACZ,SAAO;AACT;;;AC5EO,IAAM,gBAAwC,EAAE,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,KAAK,EAAE;AAOzF,IAAM,eAAwC;AAAA,EACnD,CAAC,GAAG,EAAE;AAAA,EAAG,CAAC,IAAI,EAAE;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,MAAM,IAAI;AAAA,EAAG,CAAC,MAAM,IAAI;AAAA,EACxD,CAAC,MAAM,IAAI;AAAA,EAAG,CAAC,MAAM,IAAI;AAAA,EAAG,CAAC,MAAM,IAAI;AAAA,EAAG,CAAC,MAAM,IAAI;AAAA,EAAG,CAAC,OAAO,KAAK;AAAA,EAAG,CAAC,OAAO,KAAK;AACvF;AAMO,SAAS,gBAAgBC,KAA8C;AAC5E,MAAIA,QAAO,IAAK,QAAO,CAAC,CAAC,IAAI,EAAE,CAAC;AAChC,MAAIA,QAAO,IAAK,QAAO;AAKvB,SAAO,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;AACjD;AAGO,SAAS,kBAAkB,MAAc,GAAgD;AAC9F,MAAI,KAAK,CAAC,MAAM,QAAQ,KAAK,IAAI,CAAC,MAAM,IAAK,QAAO;AACpD,QAAM,MAAM,KAAK,MAAM,IAAI,GAAG,IAAI,CAAC;AACnC,MAAI,CAAC,mBAAmB,KAAK,GAAG,EAAG,QAAO;AAC1C,SAAO,EAAE,IAAI,OAAO,SAAS,KAAK,EAAE,GAAG,MAAM,IAAI,EAAE;AACrD;AAGA,IAAM,OAAO,IAAI,IAAI,gBAAgB,MAAM,EAAE,CAAC;AAQvC,SAAS,kBAAkB,MAA+B;AAC/D,QAAM,MAAgB,CAAC;AACvB,MAAI,IAAI;AACR,SAAO,IAAI,KAAK,QAAQ;AACtB,UAAMA,MAAK,KAAK,CAAC;AACjB,QAAIA,QAAO,MAAM;AACf,YAAM,IAAI,KAAK,IAAI,CAAC;AACpB,UAAI,MAAM,OAAW,QAAO;AAC5B,UAAI,KAAK,KAAK,gBAAgB,cAAc,CAAC,IAAK,EAAE,YAAY,CAAC,CAAE;AACnE,WAAK;AACL;AAAA,IACF;AACA,QAAI,KAAK,IAAIA,GAAE,EAAG,QAAO;AACzB,QAAI,KAAKA,IAAG,YAAY,CAAC,CAAE;AAC3B,SAAK;AAAA,EACP;AACA,SAAO,IAAI,SAAS,MAAM;AAC5B;AASA,SAAS,gBAAgB,MAAsB;AAC7C,MAAI,IAAI;AACR,MAAI,KAAK,CAAC,MAAM,IAAK;AACrB,SAAO,IAAI,KAAK,QAAQ;AACtB,UAAMA,MAAK,KAAK,CAAC;AACjB,QAAIA,QAAO,MAAM;AAAE,WAAK;AAAG;AAAA,IAAS;AACpC,QAAIA,QAAO,IAAK,QAAO;AACvB;AAAA,EACF;AACA,SAAO;AACT;AAmBO,SAAS,kBAAkB,MAA4E;AAC5G,MAAI,SAAS,SAAS,SAAS,SAAS,SAAS,OAAO;AACtD,WAAO,EAAE,QAAQ,gBAAgB,KAAK,CAAC,CAAoB,GAAG,SAAS,MAAM;AAAA,EAC/E;AACA,MAAI,KAAK,UAAU,KAAK,KAAK,CAAC,MAAM,KAAK;AAGvC,QAAI,gBAAgB,IAAI,MAAM,KAAK,SAAS,EAAG,QAAO;AACtD,QAAI,QAAQ,KAAK,MAAM,GAAG,EAAE;AAC5B,UAAM,UAAU,MAAM,WAAW,GAAG;AACpC,QAAI,QAAS,SAAQ,MAAM,MAAM,CAAC;AAClC,UAAM,SAAS,iBAAiB,KAAK;AACrC,WAAO,SAAS,EAAE,QAAQ,QAAQ,IAAI;AAAA,EACxC;AACA,QAAM,MAAM,kBAAkB,IAAI;AAClC,MAAI,OAAO,IAAI,WAAW,EAAG,QAAO,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAI,IAAI,CAAC,CAAE,CAAC,GAAG,SAAS,MAAM;AACnF,SAAO;AACT;AAYO,SAAS,iBAAiB,MAA8C;AAC7E,QAAM,SAAkC,CAAC;AACzC,MAAI,IAAI;AACR,QAAM,WAAW,MAAwB;AACvC,UAAMA,MAAK,KAAK,CAAC;AACjB,QAAIA,QAAO,OAAW,QAAO;AAC7B,QAAIA,QAAO,MAAM;AACf,YAAM,MAAM,kBAAkB,MAAM,CAAC;AACrC,UAAI,KAAK;AACP,YAAI,IAAI;AACR,eAAO,EAAE,IAAI,IAAI,GAAG;AAAA,MACtB;AACA,YAAM,IAAI,KAAK,IAAI,CAAC;AACpB,UAAI,MAAM,OAAW,QAAO;AAC5B,WAAK;AACL,UAAI,KAAK,cAAe,QAAO,EAAE,IAAI,cAAc,CAAC,EAAG;AACvD,UAAI,MAAM,OAAO,MAAM,OAAO,MAAM,IAAK,QAAO,EAAE,KAAK,gBAAgB,CAAC,EAAE;AAE1E,UAAK,KAAK,OAAO,KAAK,OAAS,KAAK,OAAO,KAAK,IAAM,QAAO;AAC7D,aAAO,EAAE,IAAI,EAAE,YAAY,CAAC,EAAG;AAAA,IACjC;AACA,SAAKA,IAAG;AACR,WAAO,EAAE,IAAIA,IAAG,YAAY,CAAC,EAAG;AAAA,EAClC;AACA,SAAO,IAAI,KAAK,QAAQ;AACtB,UAAM,KAAK,SAAS;AACpB,QAAI,OAAO,KAAM,QAAO;AACxB,QAAI,SAAS,IAAI;AACf,aAAO,KAAK,GAAG,GAAG,GAAG;AACrB;AAAA,IACF;AACA,QAAI,KAAK,CAAC,MAAM,OAAO,KAAK,IAAI,CAAC,MAAM,UAAa,KAAK,IAAI,CAAC,MAAM,KAAK;AACvE,WAAK;AACL,YAAM,KAAK,SAAS;AACpB,UAAI,OAAO,QAAQ,SAAS,GAAI,QAAO;AACvC,aAAO,KAAK,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;AAAA,IAC5B,OAAO;AACL,aAAO,KAAK,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;AAAA,IAC5B;AAAA,EACF;AACA,SAAO,OAAO,SAAS,SAAS;AAClC;;;ACpJA,SAAS,SAAS,IAAY,QAAyB;AACrD,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,UAAM,IAAI,OAAO,CAAC;AAClB,QAAI,MAAM,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,EAAG,QAAO;AAAA,EACvC;AACA,SAAO;AACT;AAQA,SAAS,aAAa,KAA8B;AAClD,QAAM,QAAkB,CAAC;AACzB,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,QAAI,IAAI,IAAI,CAAC;AACb,QAAI,MAAM,MAAM;AACd,UAAI,IAAI,IAAI,CAAC,KAAK;AAClB,UAAI,MAAM,MAAM,cAAc,KAAK,CAAC,EAAG,QAAO;AAC9C;AAAA,IACF,WAAW,mBAAmB,KAAK,CAAC,GAAG;AACrC,aAAO;AAAA,IACT;AACA,UAAM,KAAK,EAAE,WAAW,CAAC,CAAC;AAAA,EAC5B;AACA,SAAO,MAAM,SAAS,IAAI,QAAQ;AACpC;AAMA,SAAS,iBAAiB,KAA4B;AACpD,MAAI,IAAI,WAAW,EAAG,QAAO,IAAI,WAAW,CAAC;AAC7C,MAAI,IAAI,WAAW,KAAK,IAAI,CAAC,MAAM,QAAQ,CAAC,cAAc,KAAK,IAAI,CAAC,CAAE,EAAG,QAAO,IAAI,WAAW,CAAC;AAChG,SAAO;AACT;AAGA,SAAS,iBAAiB,KAAsC;AAC9D,QAAM,IAAI,mCAAmC,KAAK,GAAG;AACrD,MAAI,CAAC,EAAG,QAAO;AACf,QAAM,SAAS,iBAAiB,EAAE,CAAC,CAAE;AACrC,MAAI,CAAC,OAAQ,QAAO;AAGpB,SAAO,CAAC,OAAO,QAAQ;AACrB,QAAI,IAAI;AACR,WAAO,IAAI,MAAM,UAAU,SAAS,MAAM,WAAW,CAAC,GAAG,MAAM,EAAG;AAClE,WAAO;AAAA,EACT;AACF;AAGA,SAAS,gBAAgB,KAAsC;AAC7D,QAAM,IAAI,mCAAmC,KAAK,GAAG;AACrD,MAAI,CAAC,EAAG,QAAO;AACf,QAAM,QAAQ,aAAa,EAAE,CAAC,CAAE;AAChC,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,IAAI,MAAM;AAChB,SAAO,CAAC,OAAO,QAAQ;AACrB,aAAS,IAAI,GAAG,IAAI,GAAG,IAAK,KAAI,MAAM,WAAW,MAAM,CAAC,MAAM,MAAM,CAAC,EAAG,QAAO;AAC/E,QAAI,IAAI,MAAM;AACd,WAAO,IAAI,MAAM,QAAQ;AACvB,YAAM,IAAI,MAAM,WAAW,CAAC;AAC5B,UAAI,MAAM,MAAM,MAAM,GAAI;AAC1B;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;AASA,SAAS,kBAAkB,KAAsC;AAC/D,QAAM,IAAI,uEAAuE,KAAK,GAAG;AACzF,MAAI,CAAC,EAAG,QAAO;AACf,QAAM,OAAO,aAAa,EAAE,CAAC,IAAK,EAAE,CAAC,CAAE;AACvC,QAAM,QAAQ,aAAa,EAAE,CAAC,IAAK,EAAE,CAAC,CAAE;AAGxC,QAAM,eAAe,iBAAiB,EAAE,CAAC,CAAE;AAC3C,QAAM,YAAY,aAAa,EAAE,CAAC,CAAE;AACpC,QAAM,YAAY,aAAa,EAAE,CAAC,CAAE;AACpC,MAAI,CAAC,QAAQ,CAAC,SAAS,iBAAiB,QAAQ,CAAC,aAAa,CAAC,UAAW,QAAO;AAGjF,MAAI,iBAAiB,MAAM,CAAC,KAAK,UAAU,CAAC,MAAM,MAAM,CAAC,KAAK,UAAU,CAAC,MAAM,MAAM,CAAC,EAAG,QAAO;AAChG,QAAM,WAAW,OAAO,aAAa,GAAG,KAAK;AAC7C,QAAM,UAAU,KAAK;AACrB,QAAM,WAAW,SAAS;AAC1B,SAAO,CAAC,OAAO,QAAQ;AACrB,aAAS,IAAI,GAAG,IAAI,SAAS,IAAK,KAAI,MAAM,WAAW,MAAM,CAAC,MAAM,KAAK,CAAC,EAAG,QAAO;AACpF,UAAM,MAAM,MAAM,QAAQ,UAAU,MAAM,OAAO;AACjD,WAAO,MAAM,IAAI,MAAM,MAAM;AAAA,EAC/B;AACF;AAGA,SAAS,UAAU,MAAwB;AACzC,QAAM,MAAgB,CAAC;AACvB,MAAI,QAAQ;AACZ,MAAI,UAAU;AACd,MAAI,QAAQ;AACZ,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,UAAM,IAAI,KAAK,CAAC;AAChB,QAAI,MAAM,MAAM;AAAE;AAAK;AAAA,IAAS;AAChC,QAAI,SAAS;AAAE,UAAI,MAAM,IAAK,WAAU;AAAO;AAAA,IAAS;AACxD,QAAI,MAAM,IAAK,WAAU;AAAA,aAChB,MAAM,IAAK;AAAA,aACX,MAAM,IAAK;AAAA,aACX,MAAM,OAAO,UAAU,GAAG;AAAE,UAAI,KAAK,KAAK,MAAM,OAAO,CAAC,CAAC;AAAG,cAAQ,IAAI;AAAA,IAAE;AAAA,EACrF;AACA,MAAI,KAAK,KAAK,MAAM,KAAK,CAAC;AAC1B,SAAO;AACT;AAGA,SAAS,YAAY,KAAqB;AACxC,MAAI,CAAC,IAAI,WAAW,KAAK,KAAK,CAAC,IAAI,SAAS,GAAG,EAAG,QAAO;AACzD,MAAI,QAAQ;AACZ,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,UAAM,IAAI,IAAI,CAAC;AACf,QAAI,MAAM,MAAM;AAAE;AAAK;AAAA,IAAS;AAChC,QAAI,MAAM,IAAK;AAAA,aACN,MAAM,KAAK;AAAE;AAAS,UAAI,UAAU,EAAG,QAAO,MAAM,IAAI,SAAS,IAAI,IAAI,MAAM,GAAG,EAAE,IAAI;AAAA,IAAI;AAAA,EACvG;AACA,SAAO;AACT;AAeA,SAAS,eAAe,KAAsC;AAC5D,QAAM,IAAI,yBAAyB,KAAK,GAAG;AAC3C,MAAI,CAAC,EAAG,QAAO;AACf,QAAM,QAAQ,UAAU,EAAE,CAAC,CAAE;AAC7B,MAAI,MAAM,SAAS,EAAG,QAAO;AAC7B,QAAM,WAA+B,CAAC;AACtC,aAAW,QAAQ,OAAO;AACxB,UAAM,MAAM,YAAY,YAAY,IAAI,CAAC;AACzC,QAAI,CAAC,IAAK,QAAO;AACjB,aAAS,KAAK,GAAG;AAAA,EACnB;AACA,QAAM,IAAI,SAAS;AACnB,SAAO,CAAC,OAAO,QAAQ;AACrB,QAAI,IAAI;AACR,SAAM,QAAO,IAAI,MAAM,QAAQ;AAC7B,eAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,cAAM,MAAM,SAAS,CAAC,EAAG,OAAO,CAAC;AACjC,YAAI,MAAM,GAAG;AAAE,cAAI;AAAK,mBAAS;AAAA,QAAK;AAAA,MACxC;AACA;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;AAEA,SAAS,YAAY,KAAsC;AACzD,SAAO,iBAAiB,GAAG,KACtB,gBAAgB,GAAG,KACnB,kBAAkB,GAAG,KACrB,eAAe,GAAG;AACzB;AAEA,SAAS,eAAe,GAAiD;AACvE,QAAM,IAAI,EAAE;AACZ,MAAI,EAAE,QAAQ,WAAW,EAAE,MAAO,QAAO;AACzC,SAAO,YAAY,EAAE,MAAM;AAC7B;AAEA,IAAI;AACJ,IAAI;AACJ,IAAI;AACJ,IAAI;AACJ,IAAI;AACJ,IAAI;AACJ,IAAI;AACJ,IAAI;AAUG,SAAS,YAAY,MAA6D;AACvF,MAAI,SAAS,SAAU,QAAO;AAC9B,MAAI,SAAS,SAAU,QAAO;AAC9B,MAAI,SAAS,SAAU,QAAO;AAC9B,MAAI,SAAS,SAAU,QAAO;AAC9B,MAAI,OAAkC,CAAC;AACvC,MAAI,KAAK,aAAa,GAAG;AACvB,WAAO;AAAA,EACT,OAAO;AACL,eAAW,OAAO,KAAK,MAAM;AAC3B,YAAM,IAAI,eAAe,IAAI,MAAM;AACnC,UAAI,CAAC,GAAG;AAAE,eAAO;AAAM;AAAA,MAAM;AAC7B,WAAK,KAAK,CAAC;AAAA,IACb;AAAA,EACF;AACA,aAAW;AACX,cAAY;AACZ,aAAW;AACX,cAAY;AACZ,aAAW;AACX,cAAY;AACZ,aAAW;AACX,cAAY;AACZ,SAAO;AACT;AAGO,SAAS,cAAc,OAAe,KAAa,MAA2C;AACnG,QAAM,IAAI,KAAK;AACf,MAAI,MAAM;AACV,OAAM,QAAO,MAAM,MAAM,QAAQ;AAC/B,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,YAAM,MAAM,KAAK,CAAC,EAAG,OAAO,GAAG;AAC/B,UAAI,MAAM,KAAK;AAAE,cAAM;AAAK,iBAAS;AAAA,MAAK;AAAA,IAC5C;AACA;AAAA,EACF;AACA,SAAO;AACT;AAGO,SAAS,gBACd,OACA,KACA,MACA,OACQ;AACR,QAAM,IAAI,KAAK;AACf,MAAI,MAAM;AACV,OAAM,QAAO,MAAM,MAAM,QAAQ;AAC/B,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,YAAM,MAAM,KAAK,CAAC,EAAG,OAAO,GAAG;AAC/B,UAAI,MAAM,KAAK;AAAE,cAAM,KAAK,KAAK,CAAC;AAAG,cAAM;AAAK,iBAAS;AAAA,MAAK;AAAA,IAChE;AACA;AAAA,EACF;AACA,SAAO;AACT;AAGO,SAAS,mBAAmB,OAAe,KAAa,MAA2C;AACxG,QAAM,IAAI,KAAK;AACf,MAAI,MAAM;AACV,MAAI,OAAO;AACX,OAAM,QAAO,MAAM,MAAM,QAAQ;AAC/B,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,YAAM,MAAM,KAAK,CAAC,EAAG,OAAO,GAAG;AAC/B,UAAI,MAAM,KAAK;AAAE,gBAAQ,KAAK;AAAG,cAAM;AAAK,iBAAS;AAAA,MAAK;AAAA,IAC5D;AACA;AAAA,EACF;AACA,SAAO;AACT;;;ACvSA,IAAI;AACJ,IAAI;AACJ,IAAI;AACJ,IAAI;AACJ,IAAI;AACJ,IAAI;AACJ,IAAI;AACJ,IAAI;AAEJ,SAAS,mBAAmBC,SAA6B,MAA0D;AACjH,mBAAiB;AACjB,iBAAe;AACf,mBAAiB;AACjB,iBAAe;AACf,mBAAiB;AACjB,iBAAe;AACf,mBAAiBA;AACjB,iBAAe;AACf,SAAO;AACT;AAEA,SAAS,aAAa,GAA6C;AACjE,MAAI,MAAM;AACV,SAAO,IAAI,KAAK,QAAQ,SAAU,OAAM,IAAI,KAAK;AACjD,SAAO;AACT;AAGO,SAAS,UAAU,GAA+E;AACvG,MAAI,EAAE,KAAK,QAAQ,QAAS,QAAO,EAAE,OAAO,EAAE,KAAK,OAAO,QAAQ,EAAE,KAAK,OAAO;AAChF,SAAO;AACT;AAMO,SAAS,qBAAqBA,SAAuD;AAC1F,MAAIA,YAAW,eAAgB,QAAO;AACtC,MAAIA,YAAW,eAAgB,QAAO;AACtC,MAAIA,YAAW,eAAgB,QAAO;AACtC,MAAIA,YAAW,eAAgB,QAAO;AAEtC,MAAI,OAAO,aAAaA,OAAM;AAC9B,MAAI,aAAa;AAEjB,MAAI,KAAK,KAAK,QAAQ,aAAa;AACjC,UAAM,MAAM,KAAK,KAAK;AACtB,WAAO,KAAK,KAAK;AACjB,iBAAa;AAAA,EACf,WAAW,KAAK,KAAK,QAAQ,QAAQ;AACnC,WAAO,KAAK,KAAK;AACjB,iBAAa;AAAA,EACf;AAEA,QAAM,OAA4C,CAAC;AAEnD,MAAI,KAAK,KAAK,QAAQ,UAAU;AAC9B,aAAS,IAAI,GAAG,IAAI,KAAK,KAAK,QAAQ,QAAQ,KAAK;AACjD,YAAM,SAAS,UAAU,KAAK,KAAK,QAAQ,CAAC,CAAE;AAC9C,UAAI,CAAC,QAAQ;AACX,eAAO,mBAAmBA,SAAQ,IAAI;AAAA,MACxC;AACA,WAAK,KAAK,EAAE,OAAO,OAAO,OAAO,WAAW,GAAG,QAAQ,OAAO,OAAO,CAAC;AAAA,IACxE;AAAA,EACF,OAAO;AACL,UAAM,SAAS,UAAU,IAAI;AAC7B,QAAI,CAAC,QAAQ;AACX,aAAO,mBAAmBA,SAAQ,IAAI;AAAA,IACxC;AACA,SAAK,KAAK,EAAE,OAAO,OAAO,OAAO,WAAW,GAAG,QAAQ,OAAO,OAAO,CAAC;AAAA,EACxE;AAEA,QAAM,OAAO;AAAA,IACX,QAAQ,KAAK,IAAI,OAAK,EAAE,KAAK;AAAA,IAC7B;AAAA,IACA;AAAA,EACF;AACA,SAAO,mBAAmBA,SAAQ,IAAI;AACxC;AAUA,SAAS,WACP,OACA,KACA,KACA,OACwB;AAIxB,MAAI,CAAC,eAAe,KAAK,OAAO,GAAG,EAAG,QAAO;AAC7C,QAAM,IAAI,IAAI,MAAM,OAAO,KAAK,2BAA2B,OAAO,KAAK,CAAC;AACxE,MAAI,CAAC,EAAE,MAAM,EAAE,KAAK,OAAO,IAAK,QAAO;AACvC,SAAO,EAAE,KAAK,EAAE,KAAK,IAAI;AAC3B;AAMO,SAAS,wBACd,OACA,KACA,MACA,OACwC;AACxC,QAAM,SAAwB,CAAC;AAC/B,MAAI,MAAM;AAEV,SAAO,MAAM,MAAM,QAAQ;AACzB,QAAI,UAAqD;AACzD,eAAW,OAAO,KAAK,MAAM;AAC3B,YAAM,IAAI,WAAW,OAAO,KAAK,IAAI,QAAQ,KAAK;AAClD,UAAI,GAAG;AACL,kBAAU,EAAE,KAAK,EAAE,KAAK,WAAW,IAAI,UAAU;AACjD;AAAA,MACF;AAAA,IACF;AACA,QAAI,CAAC,QAAS;AACd,WAAO,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,KAAK,WAAW,QAAQ,UAAU,CAAC;AAC1E,UAAM,QAAQ;AAAA,EAChB;AAEA,MAAI,OAAO,SAAS,KAAK,YAAY;AACnC,WAAO,EAAE,KAAK,KAAK,QAAQ,CAAC,EAAE;AAAA,EAChC;AACA,SAAO,EAAE,KAAK,KAAK,OAAO;AAC5B;AAQO,SAAS,qBACd,OACA,KACA,MACA,OACQ;AAGR,QAAM,QAAQ,YAAY,IAAI;AAC9B,MAAI,UAAU,KAAM,QAAO,cAAc,OAAO,KAAK,KAAK;AAE1D,MAAI,MAAM;AACV,MAAI,QAAQ;AAEZ,SAAO,MAAM,MAAM,QAAQ;AACzB,QAAI,UAAkC;AACtC,eAAW,OAAO,KAAK,MAAM;AAC3B,gBAAU,WAAW,OAAO,KAAK,IAAI,QAAQ,KAAK;AAClD,UAAI,QAAS;AAAA,IACf;AACA,QAAI,CAAC,QAAS;AACd,UAAM,QAAQ;AACd;AAAA,EACF;AAEA,SAAO,QAAQ,KAAK,aAAa,MAAM;AACzC;AAQO,SAAS,mBACd,OACA,KACA,MACA,OACA,OACoB;AACpB,MAAI,KAAK,aAAa,EAAG,QAAO;AAChC,QAAM,QAAQ,YAAY,IAAI;AAC9B,MAAI,UAAU,KAAM,QAAO,gBAAgB,OAAO,KAAK,OAAO,KAAK;AAEnE,MAAI,MAAM;AACV,MAAI,QAAQ;AAEZ,SAAO,MAAM,MAAM,QAAQ;AACzB,QAAI,UAAqD;AACzD,eAAW,OAAO,KAAK,MAAM;AAC3B,YAAM,QAAQ,WAAW,OAAO,KAAK,IAAI,QAAQ,KAAK;AACtD,UAAI,OAAO;AACT,kBAAU,EAAE,KAAK,MAAM,KAAK,WAAW,IAAI,UAAU;AACrD;AAAA,MACF;AAAA,IACF;AACA,QAAI,CAAC,QAAS;AACd,UAAM,KAAK,QAAQ,KAAK,QAAQ,SAAS;AACzC,UAAM,QAAQ;AACd;AAAA,EACF;AAEA,SAAO,QAAQ,KAAK,aAAa,MAAM;AACzC;AAEO,SAAS,mBAAmB,KAAmB,QAAsC;AAC1F,QAAM,QAAQ,IAAI;AAClB,QAAM,OAAO,IAAI;AACjB,QAAM,UAAU,IAAI;AACpB,QAAM,YAAY,IAAI;AACtB,QAAM,WAAW,SAAS,UAAU;AACpC,aAAWC,OAAM,QAAQ;AAEvB,uBAAmB,KAAKA,IAAG,OAAOA,IAAG,KAAK,QAAQA,IAAG,YAAY,MAAS;AAC1E,UAAM,gBAAgB,IAAI,uBAAuB,SAAS,YAAY,UAAa,cAAc,UAAa,UAAU,SACpH,KACC,UAAU,MAAMA,IAAG,SAAS,KAAK,EAAE,KAAK;AAC7C,QAAI,iBAAiB,GAAG;AAItB,cAAS,KAAK,GAAG,GAAGA,IAAG,OAAOA,IAAG,KAAK,aAAa;AAAA,IACrD;AAIA,QAAI,IAAI,kBAAkB,IAAI,YAAY,UAAa,IAAI,kBAAkB,SAAY;AACvF,UAAI,SAAS,UAAa,UAAU,WAAc,OAAQ,KAAKA,IAAG,eAAgB,GAAG;AACnF,2BAAmB,KAAKA,IAAG,OAAOA,IAAG,KAAK,QAAQA,IAAG,YAAY,MAAS;AAAA,MAC5E;AAAA,IACF;AAAA,EACF;AACA,MAAI,YAAY,UAAa,QAAQ,WAAW,YAAY,OAAO,SAAS,GAAG;AAC7E,UAAM,QAAQ,OAAO,CAAC,EAAG;AACzB,UAAM,MAAM,OAAO,OAAO,SAAS,CAAC,EAAG;AACvC,aAAS,SAAS,UAAU,SAAS,QAAQ,QAAQ,UAAU,GAAG;AAChE,cAAQ,MAAM,IAAI;AAClB,cAAQ,SAAS,CAAC,IAAI;AAAA,IACxB;AAAA,EACF;AACF;AA4BO,SAAS,yBACdC,SACA,OACQ;AACR,QAAM,OAAOA,UAAS,qBAAqBA,OAAM,IAAI;AACrD,MAAI,CAAC,MAAM;AACT,UAAM,IAAI;AAAA,MACR,yBAAyB,MAAM,IAAI,OAAK,KAAK,UAAU,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC;AAAA,IAEvE;AAAA,EACF;AACA,MAAI,OAAO;AACX,aAAW,QAAQ,OAAO;AACxB,UAAM,MAAM,KAAK,OAAO,QAAQ,IAAI;AACpC,QAAI,MAAM,GAAG;AACX,YAAM,IAAI;AAAA,QACR,sCAAsC,KAAK,UAAU,IAAI,CAAC,uCACnB,KAAK,OAAO,IAAI,OAAK,KAAK,UAAU,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC;AAAA,MAC3F;AAAA,IACF;AACA,YAAQ,KAAK;AAAA,EACf;AACA,SAAO;AACT;AAQO,SAAS,iBACd,OACA,KACA,MACA,OACQ;AACR,QAAM,QAAQ,YAAY,IAAI;AAC9B,MAAI,UAAU,KAAM,QAAO,mBAAmB,OAAO,KAAK,KAAK;AAE/D,MAAI,MAAM;AACV,MAAI,OAAO;AACX,SAAO,MAAM,MAAM,QAAQ;AACzB,QAAI,UAAqD;AACzD,eAAW,OAAO,KAAK,MAAM;AAC3B,YAAM,IAAI,WAAW,OAAO,KAAK,IAAI,QAAQ,KAAK;AAClD,UAAI,GAAG;AACL,kBAAU,EAAE,KAAK,EAAE,KAAK,WAAW,IAAI,UAAU;AACjD;AAAA,MACF;AAAA,IACF;AACA,QAAI,CAAC,QAAS;AACd,YAAQ,KAAK,QAAQ;AACrB,UAAM,QAAQ;AAAA,EAChB;AACA,SAAO;AACT;AAEO,SAAS,eACd,QACA,MACoB;AACpB,MAAI,CAAC,OAAQ,QAAO;AACpB,MAAI,OAAO;AACX,aAAW,QAAQ,MAAM;AACvB,UAAM,MAAM,OAAO,QAAQ,IAAI;AAC/B,QAAI,OAAO,EAAG,SAAQ,KAAK;AAAA,EAC7B;AACA,SAAO;AACT;;;ACrVO,IAAM,4BACT;AAUG,SAAS,4BAA4B,QAAmC;AAC7E,MAAI,WAAW,KAAM,OAAM,IAAI,UAAU,yBAAyB;AACpE;;;ACuBA,SAAS,oBAAiD,QAAW,OAAqB;AACxF,QAAM,YAAY,EAAE,GAAG,QAAQ,MAAM,aAAa,OAAO,MAAM,KAAK,EAAE;AACtE,QAAM,SAAU,UAAwC;AACxD,MAAI,QAAQ;AACV;AAAC,IAAC,UAAuC,SAAS,OAAO,IAAI,YAAU;AAAA,MACrE,GAAG;AAAA,MACH,MAAM,aAAa,MAAM,MAAM,KAAK;AAAA,IACtC,EAAE;AAAA,EACJ;AACA,SAAO;AACT;AAEA,SAAS,uBAAuB,OAAe,KAA8D;AAC3G,QAAM,YAAY,gBAAgB;AAClC,MAAI,MAAM,EAAG,iBAAgB,WAAW,OAAO,GAAG,GAAG;AACrD,SAAO,EAAE,WAAW,eAAe,IAAI;AACzC;AAGA,IAAM,iBAAiB,MAAe;AACtC,IAAM,kBAAkB,MAAe;AACvC,IAAM,sBAAsB,CAAC,QAA2C,KAAK,eAAe;AAwBrF,SAAS,OAAU,MAAqB,MAAwC;AACrF,QAAM,cAAc,KAAK,WAAW;AACpC,QAAM,oBAAoB,KAAK,gBAAgB;AAC/C,MAAI,qBAAqB,KAAK,WAAW,QAAW;AAClD,UAAM,IAAI,UAAU,sEAAwE;AAAA,EAC9F;AAEA,QAAM,cAA+C,cAAc,SAAa,KAAK,UAAU;AAQ/F,QAAM,cAAc,aAAa,OAAO;AAExC,QAAM,qBAAqB,gBAAgB,UACtC,CAAC,YAAY,OAAO,wBAAwB,CAAC;AAClD,QAAM,qBAAqB,KAAK,kBAAkB;AAClD,QAAM,eAAe,KAAK,eAAe,OAAO,iBAC5C,KAAK,eAAe,QAAQ,kBAC5B;AAQJ,QAAM,eAAe,cAAc,SAAY,KAAK;AACpD,QAAM,iBAAiB,iBAAiB,SAAY,SAChD,gBAAgB,SAAY,eAAe,aAAa,YAAY,IACpE;AACJ,QAAM,qBAAqB,iBAAiB,UAAa,gBAAgB;AACzE,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,MACL,GAAG,KAAK;AAAA;AAAA;AAAA;AAAA,MAIR,kBAAkB;AAAA,MAClB,sBAAsB;AAAA,MACtB,GAAI,KAAK,QAAQ,OAAO,mBAAmB,EAAE,kBAAkB,KAAK,OAAO,MAAM,iBAAiB,IAAI,CAAC;AAAA,MACvG,GAAI,KAAK,QAAQ,OAAO,uBAAuB,EAAE,sBAAsB,KAAc,IAAI,CAAC;AAAA,IAC5F;AAAA,IACA,MAAM;AAAA,MACJ,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,cAAc;AAAA,MACd;AAAA,MACA,GAAI,oBAAoB,EAAE,aAAa,SAAkB,IAAI,CAAC;AAAA,MAC9D,GAAI,KAAK,gBAAgB,EAAE,eAAe,KAAK,IAAI,CAAC;AAAA,MACpD,YAAY,KAAK,cAAc;AAAA,IACjC;AAAA,IACA,MAAM,OAAe,KAAc,MAAqC;AACtE,UAAI,mBAAoB,6BAA4B,MAAM,uBAAuB;AACjF,YAAM,aAAa,aAAa,IAAI;AACpC,YAAM,cAAc,cAAc,MAAM,eAAe,UAAa,MAAM,gBAAgB,SACtF,uBAAuB,OAAO,OAAO,CAAC,IACtC;AACJ,YAAM,YAAY,aACb,MAAM,eAAe,MAAM,cAAc,EAAE,YAAY,KAAK,YAAY,IAAI,YAAa,aAC1F;AAOJ,YAAM,MAAoB,SAAS,SAAY,mBAAmB,IAAI,EAAE,GAAG,KAAK;AAChF,UAAI,aAAa;AACjB,UAAI,UAAW,KAAI,aAAa;AAChC,UAAI,YAAa,KAAI,iBAAiB,YAAY;AAElD,UAAI,aAAa;AACf,YAAI,SAAS;AACb,YAAI,mBAAmB;AAAA,MACzB,WAAW,gBAAgB,QAAW;AACpC,YAAI,SAAS;AACb,YAAI,YAAa,KAAI,mBAAmB;AAAA,MAC1C;AACA,UAAI,sBAAsB,MAAM,cAAe,KAAI,gBAAgB;AAMnE,UAAI,mBAAmB,OAAW,KAAI,qBAAqB;AAAA,eAClD,mBAAoB,KAAI,qBAAqB,eAAe,MAAM,kBAAkB,YAAY;AAIzG,UAAI,kBAAmB,KAAI,qBAAqB;AAChD,YAAM,SAAS,KAAK,MAAM,OAAO,OAAO,GAAG,GAAG;AAC9C,UAAI,cAAc,QAAQ,IAAI,mBAAmB,QAAW;AAC1D,aAAK,iBAAiB,KAAK,IAAI,KAAK,kBAAkB,GAAG,IAAI,cAAc;AAAA,MAC7E;AACA,aAAO,YAAY,oBAAoB,QAAQ,mBAAmB,SAAS,CAAC,IAAI;AAAA,IAClF;AAAA,EACF;AACF;AA8BA,IAAM,YAAY,oBAAI,QAA6B;AAE5C,SAAS,MACd,YACA,OACA,OAAqB,CAAC,GACN;AAChB,MAAI,CAAC,UAAU,IAAI,UAAU,GAAG;AAC9B,cAAU,IAAI,UAAU;AACxB,qBAAiB,UAAU;AAAA,EAC7B;AACA,QAAM,aAAa,KAAK,cAAc,WAAW,MAAM,qBAAqB;AAC5E,QAAM,cAAc,aAAa,uBAAuB,OAAO,CAAC,IAAI;AACpE,QAAM,YAAY,aAAa;AAC/B,QAAM,UAAU,KAAK,UAAU,CAAC,IAAI;AAKpC,QAAM,SAAS,KAAK,UAAU,EAAE,QAAQ,MAAM,QAAQ,MAAM,KAAyB,IAAI;AAGzF,QAAM,gBAAgB,WAAW,MAAM;AACvC,QAAM,kBAAkB,WAAW,MAAM;AAEzC,QAAM,MAAM,mBAAmB;AAC/B,MAAI,aAAa;AACjB,MAAI,UAAW,KAAI,aAAa;AAChC,MAAI,YAAa,KAAI,iBAAiB,YAAY;AAClD,MAAI,kBAAkB,QAAW;AAC/B,QAAI,SAAS;AACb,QAAI,cAAc,MAAM,iBAAkB,KAAI,mBAAmB,cAAc,MAAM;AAAA,EACvF;AACA,MAAI,oBAAoB,OAAW,KAAI,WAAW;AAClD,MAAI,YAAY,OAAW,KAAI,UAAU;AACzC,MAAI,WAAW,OAAW,KAAI,SAAS;AACvC,QAAM,SAAS,WAAW,MAAM,OAAO,GAAG,GAAG;AAC7C,MAAI,CAAC,OAAO,GAAI,QAAO,YAAY,oBAAoB,QAAQ,mBAAmB,SAAS,CAAC,IAAI;AAChG,QAAM,aAAa,YAAY,SAC3B,EAAE,GAAG,QAAQ,QAAQ,SAAS,cAAc,QAAQ,QAAQ,KAAK,IACjE;AACJ,SAAO,YAAY,oBAAoB,YAAY,mBAAmB,SAAS,CAAC,IAAI;AACtF;;;ACzQO,IAAM,qBAAoC,uBAAO,IAAI,4BAA4B;;;ACmBxF,SAASC,YAAW,KAAgD;AAClE,UAAQ,IAAI,KAAK;AAAA,IACf,KAAK;AAAA,IACL,KAAK;AACH,aAAO,IAAI;AAAA,IACb,KAAK;AACH,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,GAAG,IAAI,MAAM,IAAI,OAAK,EAAE,MAAM;AAAA,QAC9B,GAAI,IAAI,WAAW,IAAI,SAAS,IAAI,OAAK,EAAE,MAAM,IAAI,CAAC;AAAA,QACtD,GAAI,IAAI,YAAY,CAAC,IAAI,SAAS,IAAI,CAAC;AAAA,MACzC;AAAA,IACF,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,CAAC,IAAI,MAAM;AAAA,IACpB,KAAK;AACH,aAAO,CAAC,IAAI,QAAQ,IAAI,QAAQ;AAAA,IAClC,KAAK;AACH,aAAO,IAAI,eAAe,CAAC,IAAI,QAAQ,IAAI,YAAY,IAAI,CAAC,IAAI,MAAM;AAAA,IACxE,KAAK;AACH,aAAO,CAAC,IAAI,QAAQ,IAAI,SAAS;AAAA,IACnC,KAAK;AACH,aAAO,CAAC,IAAI,UAAU,GAAG,IAAI,IAAI;AAAA,IACnC,KAAK;AACH,aAAO,IAAI,WAAW,CAAC,IAAI,QAAQ,IAAI,CAAC;AAAA,IAC1C,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,CAAC;AAAA,EACZ;AACF;AAEA,SAAS,QAAQ,KAA4B,KAAoB;AAC/D,MAAI,IAAI,SAAS,OAAW;AAC5B,QAAM,WAAW,IAAI,IAAI,IAAI,IAAI;AACjC,MAAI,aAAa,QAAW;AAC1B,QAAI,IAAI,IAAI,MAAM,IAAI,SAAS,SAAY,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC;AAC7D;AAAA,EACF;AACA,MAAI,IAAI,SAAS,OAAW;AAC5B,aAAW,OAAO,IAAI,MAAM;AAC1B,QAAI,CAAC,SAAS,SAAS,GAAG,EAAG,UAAS,KAAK,GAAG;AAAA,EAChD;AACF;AAEA,SAAS,sBACPC,SACA,KACA,MACA,aAAa,MACP;AACN,MAAI,KAAK,IAAIA,OAAM,EAAG;AACtB,OAAK,IAAIA,OAAM;AACf,QAAM,MAAMA,QAAO;AACnB,MAAI,IAAI,QAAQ,QAAQ;AACtB,QAAI,YAAY;AACd,UAAI;AAAE,8BAAsB,IAAI,MAAM,GAAG,KAAK,MAAM,UAAU;AAAA,MAAE,QAAQ;AAAA,MAAC;AAAA,IAC3E;AACA;AAAA,EACF;AACA,MAAI,IAAI,QAAQ,OAAQ,SAAQ,KAAK,GAAG;AACxC,aAAW,SAASD,YAAW,GAAG,EAAG,uBAAsB,OAAO,KAAK,MAAM,UAAU;AACzF;AAEO,SAAS,yBACd,SACA,MACmB;AACnB,QAAM,SAAS,oBAAI,IAAsB;AACzC,QAAM,aAAa,MAAM,eAAe;AACxC,aAAW,CAAC,EAAEE,KAAI,KAAK,SAAS;AAC9B,QAAI,CAAC,cAAcA,MAAK,KAAK,QAAQ,QAAQ;AAC3C,UAAI;AACF,cAAM,WAAWA,MAAK,KAAK,MAAM;AACjC,YAAI,SAAS,KAAK,QAAQ,OAAQ,uBAAsB,UAAU,QAAQ,oBAAI,IAAI,GAAG,KAAK;AAAA,MAC5F,QAAQ;AAAA,MAAC;AACT;AAAA,IACF;AACA,0BAAsBA,OAAM,QAAQ,oBAAI,IAAI,GAAG,UAAU;AAAA,EAC3D;AACA,SAAO,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,CAAC,MAAM,IAAI,OAAO,EAAE,MAAM,KAAK,EAAE,EAAE;AACtE;;;ACpHO,SAAS,wBAA0C,SAAY,YAAkC;AACtG,SAAO,eAAe,SAAS,oBAAoB,EAAE,OAAO,YAAY,YAAY,OAAO,cAAc,KAAK,CAAC;AAC/G,SAAO;AACT;;;ACGO,IAAM,aAAa;AAE1B,SAAS,QAAQ,GAAwB,KAAmB;AAC1D;AAAC,EAAC,EAAwC,YAAY;AACtD,MAAI,EAAE,KAAK,QAAQ,UAAU,EAAE,KAAK,SAAS,OAAW,GAAE,KAAK,OAAO;AACxE;AAIA,SAAS,eAAe,GAA+B;AACrD,SAAO,CAAC,CAAC,KACJ,OAAO,MAAM,YACb,UAAU,KACT,EAAiC,KAAK,QAAQ,UAC/C,OAAQ,EAA2B,WAAW;AACrD;AAEA,SAASC,YAAW,GAA4C;AAC9D,SAAQ,EAAwC;AAClD;AAEA,SAAS,6BAA6B,GAAwB,KAAsB;AAClF,QAAM,OAAO,EAAE,KAAK,QAAQ,SAASA,YAAW,CAAC,IAAI;AACrD,SAAO,SAAS,UAAa,SAAS;AACxC;AAmGO,SAAS,MACd,GACA,GACgB;AAChB,QAAM,UAAW,OAAO,MAAM,aAAa,IAAI;AAC/C,QAAM,UAAW,OAAO,MAAM,aAAa,IAAI;AAC/C,QAAM,QAAoB,CAAC;AAG3B,QAAM,QAAQ,IAAI,MAAM,OAAO;AAAA,IAC7B,IAAI,QAAQ,KAAK;AACf,UAAI,OAAO,QAAQ,SAAU,QAAO;AACpC,YAAM,SAAS;AACf,UAAI,EAAE,OAAO,SAAS;AACpB,cAAM,IAAI,IAAI;AAId,gBAAQ,GAAG,GAAG;AACd,eAAO,GAAG,IAAI;AAAA,MAChB;AACA,aAAO,OAAO,GAAG;AAAA,IACnB;AAAA,EACF,CAAC;AAKD,QAAM,cAAc,QAAQ,KAAK;AAGjC,aAAW,OAAO,OAAO,KAAK,WAAW,GAAG;AAC1C,UAAM,cAAe,MAA8C,GAAG;AACtE,UAAMC,UAAU,YAAoD,GAAG;AACvE,QAAI,gBAAgBA,SAAQ;AAC1B,YAAM,IAAI,MAAM,kBAAkB,GAAG,sCAAsC;AAAA,IAC7E;AACA,QAAI,eAAe,WAAW,GAAG;AAC/B,UAAI,CAAC,6BAA6BA,SAAQ,GAAG,EAAG,SAAQA,SAAQ,GAAG;AACnE,kBAAY,OAAOA,OAAM;AAEzB,kBAAY,MAAM,WAAWA,QAAO,MAAM;AAC1C,kBAAY,MAAM,kBAAkBA,QAAO,MAAM;AAAA,IACnD,WAAW,6BAA6BA,SAAQ,GAAG,GAAG;AACpD,YAAM,QAAQ,IAAI;AAClB,cAAQ,OAAO,GAAG;AAClB,YAAM,OAAOA,OAAM;AACnB,YAAM,MAAM,WAAWA,QAAO,MAAM;AACpC,YAAM,MAAM,kBAAkBA,QAAO,MAAM;AAC1C,MAAC,MAA8C,GAAG,IAAI;AAAA,IACzD,OAAO;AACL,cAAQA,SAAQ,GAAG;AAClB,MAAC,MAA8C,GAAG,IAAIA;AAAA,IACzD;AAAA,EACF;AAOA,MAAI,SAAS,UAAU,MAAM;AAC3B,eAAW,OAAO,OAAO,KAAK,WAAW,GAAG;AAC1C,YAAMC,QAAQ,MAA8C,GAAG;AAI/D,UAAIA,SAAQ,CAACA,MAAK,MAAM,SAAU,CAACA,MAAK,MAAkD,gBAAgB,QAAQ;AAAA,IACpH;AAAA,EACF;AAKA,MAAI,SAAS,YAAY,MAAM;AAC7B,eAAW,OAAO,OAAO,KAAK,WAAW,GAAG;AAC1C,YAAMA,QAAQ,MAA8C,GAAG;AAC/D,UAAIA,SAAQ,CAACA,MAAK,MAAM,SAAU,CAACA,MAAK,MAAsD,kBAAkB,QAAQ;AAAA,IAC1H;AAAA,EACF;AAMA,MAAI,SAAS,aAAa,OAAO;AAC/B,eAAW,OAAO,OAAO,KAAK,WAAW,GAAG;AAC1C,YAAMA,QAAQ,MAA8C,GAAG;AAC/D,UAAIA,SAAQ,CAACA,MAAK,MAAM,SAAU,CAACA,MAAK,MAAyC,kBAAkB;AAAA,IACrG;AAAA,EACF;AAEA,MAAI,SAAS,eAAe,MAAM;AAChC,eAAW,OAAO,OAAO,KAAK,WAAW,GAAG;AAC1C,YAAMA,QAAQ,MAA8C,GAAG;AAC/D,UAAIA,SAAQ,CAACA,MAAK,MAAM,SAAU,CAACA,MAAK,MAAuC,oBAAoB;AAAA,IACrG;AACA,eAAW,OAAO,OAAO,KAAK,WAAW,GAAG;AAC1C,YAAMA,QAAQ,MAA8C,GAAG;AAC/D,UAAIA,SAAQ,CAACA,MAAK,MAAM,YAAYA,MAAK,KAAK,QAAQ,WAAW;AAC/D,cAAM,UAAU,OAAc,EAAE,YAAY,KAAK,GAAGA,KAAI;AACxD,gBAAQ,SAAS,GAAG;AACnB,QAAC,QAAQ,MAAuC,oBAAoB;AACpE,QAAC,MAA8C,GAAG,IAAI;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AAKA,aAAW,OAAO,OAAO,KAAK,WAAW,GAAG;AAC1C,qBAAkB,MAA8C,GAAG,CAAE;AAAA,EACvE;AAQA,SAAO,eAAe,OAAO,YAAY;AAAA,IACvC,OAAO,OAAO,KAAK,WAAW;AAAA,IAC9B,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB,CAAC;AACD,0BAAwB,OAAO,yBAAyB,OAAO,KAAK,WAAW,EAAE,IAAI,SAAO,CAAC,KAAM,MAA8C,GAAG,CAAE,CAAC,CAAC,CAAC;AAEzJ,SAAO;AACT;;;AC7PO,SAAS,OAAO,KAAmB,UAAoB,KAAwB;AACpF,QAAM,IAAe,EAAE,IAAI,OAAO,UAAU,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI,EAAE;AAC3E,QAAM,QAAQ,IAAI;AAClB,MAAI,UAAU,UAAa,OAAO,MAAM,QAAQ;AAC9C,UAAM,OAAO,MAAM;AACnB,QAAI,SAAS,QAAQ,MAAM,KAAK,KAAK,OAAO;AAC1C,YAAM,OAAO;AAAA,IACf,WAAW,QAAQ,KAAK,KAAK,OAAO;AAClC,YAAM,OAAO,EAAE,GAAG,MAAM,UAAU,CAAC,GAAG,KAAK,UAAU,GAAG,QAAQ,EAAE;AAAA,IACpE;AAAA,EACF;AACA,SAAO;AACT;;;ACeA,IAAM,MAAY,EAAE,GAAG,MAAM;AAC7B,IAAMC,SAAc,EAAE,GAAG,QAAQ;AAEjC,SAAS,SAAS,KAAe,IAAmB;AAClD,SAAO,EAAE,GAAG,QAAQ,KAAK,GAAG;AAC9B;AAEA,SAAS,YAAY,QAA2C;AAC9D,MAAI,KAAe,MAAM;AACzB,aAAW,CAAC,IAAI,EAAE,KAAK,OAAQ,MAAK,MAAM,IAAI,UAAU,IAAI,EAAE,CAAC;AAC/D,SAAO;AACT;AAEA,SAAS,kBAAkB,QAA0C;AACnE,SAAO,OAAO,KAAK,CAAC,CAAC,IAAI,EAAE,MAAM,MAAM,MAAQ,MAAQ,EAAE;AAC3D;AAaA,IAAM,OAAO,uBAAO,YAAY;AAOhC,SAAS,WAAW,KAAmB;AACrC,MAAI,IAAI;AAER,QAAM,WAAW,MAAY;AAC3B,UAAM,OAAe,CAAC,SAAS,CAAC;AAChC,WAAO,IAAI,CAAC,MAAM,KAAK;AAAE;AAAK,WAAK,KAAK,SAAS,CAAC;AAAA,IAAE;AACpD,WAAO,KAAK,WAAW,IAAI,KAAK,CAAC,IAAK,EAAE,GAAG,OAAO,KAAK;AAAA,EACzD;AAEA,QAAM,WAAW,MAAY;AAC3B,UAAM,QAAgB,CAAC;AACvB,WAAO,IAAI,IAAI,QAAQ;AACrB,YAAMC,MAAK,IAAI,CAAC;AAChB,UAAIA,QAAO,OAAOA,QAAO,IAAK;AAC9B,YAAM,KAAK,gBAAgB,CAAC;AAAA,IAC9B;AACA,QAAI,MAAM,WAAW,EAAG,QAAOD;AAC/B,WAAO,MAAM,WAAW,IAAI,MAAM,CAAC,IAAK,EAAE,GAAG,OAAO,MAAM;AAAA,EAC5D;AAEA,QAAM,kBAAkB,MAAY;AAClC,UAAM,OAAO,UAAU;AACvB,UAAMC,MAAK,IAAI,CAAC;AAChB,QAAI,MAAqB;AACzB,QAAIA,QAAO,KAAK;AAAE,YAAM;AAAG;AAAA,IAAI,WACtBA,QAAO,KAAK;AAAE,YAAM;AAAG;AAAA,IAAI,WAC3BA,QAAO,KAAK;AAAE,YAAM;AAAG;AAAA,IAAI,WAC3BA,QAAO,KAAK;AAAE,YAAM,qBAAqB;AAAA,IAAE;AACpD,QAAI,QAAQ,KAAM,QAAO;AAEzB,QAAI,IAAI,CAAC,MAAM,IAAK;AACpB,WAAO,EAAE,GAAG,OAAO,MAAM,MAAM,IAAI;AAAA,EACrC;AAKA,QAAM,uBAAuB,MAAqB;AAChD,UAAM,QAAQ,IAAI,QAAQ,KAAK,CAAC;AAChC,QAAI,UAAU,GAAI,QAAO;AACzB,UAAM,IAAI,qBAAqB,KAAK,IAAI,MAAM,IAAI,GAAG,KAAK,CAAC;AAC3D,QAAI,CAAC,EAAG,QAAO;AACf,QAAI,QAAQ;AACZ,WAAO,OAAO,SAAS,EAAE,CAAC,GAAI,EAAE;AAAA,EAClC;AAEA,QAAM,YAAY,MAAY;AAC5B,UAAMA,MAAK,IAAI,CAAC;AAChB,YAAQA,KAAI;AAAA,MACV,KAAK;AAAK,eAAO,WAAW;AAAA,MAC5B,KAAK;AAAK,eAAO,WAAW;AAAA,MAC5B,KAAK;AAAK;AAAK,eAAO,SAAS,IAAI,GAAG,KAAK;AAAA;AAAA,MAC3C,KAAK;AAAM,eAAO,YAAY;AAAA,MAC9B,KAAK;AAAA,MACL,KAAK;AAAK;AAAK,eAAOD;AAAA;AAAA,MACtB,KAAK;AAAK;AAAK,eAAO,SAAS,UAAU,KAAM,GAAI,GAAG,KAAK;AAAA;AAAA,MAC3D;AACE,aAAKC,IAAG;AACR,eAAO,SAAS,UAAUA,IAAG,YAAY,CAAC,GAAIA,IAAG,YAAY,CAAC,CAAE,GAAGA,QAAO,IAAI;AAAA,IAClF;AAAA,EACF;AAEA,QAAM,aAAa,MAAY;AAC7B;AAEA,QAAI,aAAa;AACjB,QAAI,IAAI,CAAC,MAAM,KAAK;AAClB,YAAM,KAAK,IAAI,IAAI,CAAC;AACpB,UAAI,OAAO,IAAK,MAAK;AAAA,eACZ,OAAO,OAAO,OAAO,KAAK;AAAE,aAAK;AAAG,qBAAa;AAAA,MAAK,WACtD,OAAO,KAAK;AACnB,cAAM,KAAK,IAAI,IAAI,CAAC;AACpB,YAAI,OAAO,OAAO,OAAO,KAAK;AAAE,eAAK;AAAG,uBAAa;AAAA,QAAK,OACrD;AACH,gBAAM,KAAK,IAAI,QAAQ,KAAK,CAAC;AAC7B,cAAI,OAAO,GAAI,OAAM;AACrB,cAAI,KAAK;AAAA,QACX;AAAA,MACF,MAAO,OAAM;AAAA,IACf;AACA,UAAM,QAAQ,SAAS;AACvB,QAAI,IAAI,CAAC,MAAM,IAAK,OAAM;AAC1B;AACA,WAAO,aAAaD,SAAQ;AAAA,EAC9B;AAEA,QAAM,aAAa,MAAY;AAE7B,QAAI,IAAI,IAAI;AACZ,UAAM,UAAU,IAAI,CAAC,MAAM;AAC3B,QAAI,QAAS;AACb,QAAI,OAAO;AACX,WAAO,IAAI,IAAI,UAAU,IAAI,CAAC,MAAM,KAAK;AACvC,UAAI,IAAI,CAAC,MAAM,MAAM;AAAE,gBAAQ,IAAI,CAAC,KAAM,IAAI,IAAI,CAAC,KAAK;AAAK,aAAK;AAAA,MAAE,OAC/D;AAAE,gBAAQ,IAAI,CAAC;AAAI;AAAA,MAAI;AAAA,IAC9B;AACA,QAAI,IAAI,CAAC,MAAM,IAAK,OAAM;AAC1B,QAAI,IAAI;AACR,UAAM,SAAS,iBAAiB,IAAI;AAKpC,QAAI,QAAS,QAAO,SAAS,IAAI,GAAG,CAAC,UAAU,CAAC,kBAAkB,MAAM,CAAC;AACzE,QAAI,CAAC,OAAQ,QAAO,SAAS,IAAI,GAAG,IAAI;AACxC,WAAO,SAAS,YAAY,MAAM,GAAG,kBAAkB,MAAM,CAAC;AAAA,EAChE;AAEA,QAAM,cAAc,MAAY;AAC9B,UAAM,IAAI,IAAI,IAAI,CAAC;AACnB,QAAI,MAAM,OAAW,OAAM;AAE3B,QAAI,MAAM,OAAO,mBAAmB,KAAK,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG;AACjE,YAAM,KAAK,OAAO,SAAS,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE;AACtD,WAAK;AACL,aAAO,SAAS,UAAU,IAAI,EAAE,GAAG,OAAO,EAAI;AAAA,IAChD;AAEA,QAAI,MAAM,OAAO,mBAAmB,KAAK,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG;AACjE,YAAM,KAAK,OAAO,SAAS,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE;AACtD,WAAK;AACL,aAAO,SAAS,UAAU,IAAI,EAAE,GAAG,OAAO,EAAI;AAAA,IAChD;AACA,SAAK;AACL,YAAQ,GAAG;AAAA,MACT,KAAK;AAAK,eAAO,SAAS,YAAY,gBAAgB,GAAG,CAAC,GAAG,KAAK;AAAA,MAClE,KAAK;AAAK,eAAO,SAAS,YAAY,gBAAgB,GAAG,CAAC,GAAG,KAAK;AAAA,MAClE,KAAK;AAAK,eAAO,SAAS,YAAY,gBAAgB,GAAG,CAAC,GAAG,IAAI;AAAA,MACjE,KAAK;AAAA,MAAK,KAAK;AAAA,MAAK,KAAK;AAAK,eAAO,SAAS,IAAI,GAAG,IAAI;AAAA;AAAA,MACzD,KAAK;AAAA,MAAK,KAAK;AAAK,eAAOA;AAAA;AAAA,MAC3B,KAAK;AAAK,eAAO,SAAS,UAAU,IAAM,EAAI,GAAG,IAAI;AAAA,MACrD,KAAK;AAAK,eAAO,SAAS,UAAU,IAAM,EAAI,GAAG,KAAK;AAAA,MACtD,KAAK;AAAK,eAAO,SAAS,UAAU,GAAM,CAAI,GAAG,KAAK;AAAA,MACtD,KAAK;AAAK,eAAO,SAAS,UAAU,IAAM,EAAI,GAAG,KAAK;AAAA,MACtD,KAAK;AAAK,eAAO,SAAS,UAAU,IAAM,EAAI,GAAG,KAAK;AAAA,MACtD,KAAK;AAAK,eAAO,SAAS,UAAU,GAAG,CAAC,GAAG,KAAK;AAAA,MAChD;AAEE,YAAI,KAAK,OAAO,KAAK,IAAK,QAAO;AAEjC,eAAO,SAAS,UAAU,EAAE,YAAY,CAAC,GAAI,EAAE,YAAY,CAAC,CAAE,GAAG,MAAM,IAAI;AAAA,IAC/E;AAAA,EACF;AAEA,QAAME,QAAO,SAAS;AACtB,MAAI,IAAI,IAAI,OAAQ,OAAM;AAC1B,SAAOA;AACT;AAQA,SAAS,SAAS,GAAkB;AAClC,UAAQ,EAAE,GAAG;AAAA,IACX,KAAK;AAAQ,aAAO;AAAA,IACpB,KAAK;AAAO,aAAO;AAAA,IACnB,KAAK;AAAS,aAAO;AAAA,IACrB,KAAK;AAAO,aAAO,EAAE,MAAM,MAAM,QAAQ;AAAA,IACzC,KAAK;AAAO,aAAO,EAAE,KAAK,KAAK,QAAQ;AAAA,IACvC,KAAK;AAAO,aAAO,EAAE,QAAQ,KAAK,SAAS,EAAE,IAAI;AAAA,EACnD;AACF;AAGA,SAAS,SAAS,GAAmB;AACnC,UAAQ,EAAE,GAAG;AAAA,IACX,KAAK;AAAQ,aAAO,EAAE;AAAA,IACtB,KAAK;AAAO,aAAO,IAAI;AAAA,IACvB,KAAK;AAAS,aAAO,MAAM;AAAA,IAC3B,KAAK;AAAO,aAAO,SAAS,EAAE,IAAI;AAAA,IAClC,KAAK,OAAO;AACV,UAAI,KAAe,MAAM;AACzB,iBAAW,OAAO,EAAE,KAAM,MAAK,MAAM,IAAI,SAAS,GAAG,CAAC;AACtD,aAAO;AAAA,IACT;AAAA,IACA,KAAK,OAAO;AAGV,UAAI,KAAe,MAAM;AACzB,iBAAW,QAAQ,EAAE,OAAO;AAC1B,aAAK,MAAM,IAAI,SAAS,IAAI,CAAC;AAC7B,YAAI,CAAC,SAAS,IAAI,EAAG;AAAA,MACvB;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAKA,SAAS,kBAAkB,GAAkB;AAC3C,UAAQ,EAAE,GAAG;AAAA,IACX,KAAK;AAAQ,aAAO,EAAE;AAAA,IACtB,KAAK;AAAO,aAAO;AAAA,IACnB,KAAK;AAAS,aAAO;AAAA,IACrB,KAAK;AAAO,aAAO,kBAAkB,EAAE,IAAI;AAAA,IAC3C,KAAK;AAAO,aAAO,EAAE,KAAK,KAAK,iBAAiB;AAAA,IAChD,KAAK;AAAO,aAAO,EAAE,MAAM,KAAK,iBAAiB;AAAA,EACnD;AACF;AAyBO,SAAS,kBAAkB,QAAkE;AAClG,MAAI;AACJ,MAAI;AACF,UAAM,WAAW,MAAM;AAAA,EACzB,QAAQ;AACN,WAAO,EAAE,UAAU,IAAI,GAAG,iBAAiB,KAAK;AAAA,EAClD;AAKA,MAAI,SAAS,GAAG,EAAG,QAAO,EAAE,UAAU,IAAI,GAAG,iBAAiB,kBAAkB,GAAG,EAAE;AACrF,SAAO,EAAE,UAAU,SAAS,GAAG,GAAG,iBAAiB,kBAAkB,GAAG,EAAE;AAC5E;;;AC7RA,IAAM,eAAe;AAGrB,SAASC,UAAS,IAAY,QAA0C;AACtE,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,UAAM,CAAC,IAAI,EAAE,IAAI,OAAO,CAAC;AACzB,QAAI,MAAM,MAAM,MAAM,GAAI,QAAO;AAAA,EACnC;AACA,SAAO;AACT;AAQA,SAAS,gBAAgB,MAA8C;AACrE,MAAI,KAAK,WAAW,GAAG,EAAG,QAAO;AACjC,SAAO,iBAAiB,IAAI;AAC9B;AAEA,SAAS,aAAa,QAAgB,OAAoC;AACxE,MAAI,WAAW,KAAK,KAAK,EAAG,QAAO;AACnC,MAAI,SAAyC;AAC7C,MAAI,QAAQ;AACZ,MAAI,OAAO,CAAC,MAAM,KAAK;AACrB,QAAI,MAAM;AACV,WAAO,MAAM,OAAO,UAAU,OAAO,GAAG,MAAM,KAAK;AACjD,UAAI,OAAO,GAAG,MAAM,KAAM,QAAO;AAAA,UAC5B;AAAA,IACP;AACA,QAAI,OAAO,GAAG,MAAM,IAAK,QAAO;AAChC,aAAS,gBAAgB,OAAO,MAAM,GAAG,GAAG,CAAC;AAC7C,YAAQ,OAAO,MAAM,MAAM,CAAC;AAAA,EAC9B,WAAW,OAAO,CAAC,MAAM,SAAS,OAAO,CAAC,MAAM,OAAO,OAAO,CAAC,MAAM,OAAO,OAAO,CAAC,MAAM,MAAM;AAC9F,aAAS,gBAAgB,OAAO,CAAC,CAAC;AAClC,YAAQ,OAAO,MAAM,CAAC;AAAA,EACxB;AACA,MAAI,CAAC,UAAW,UAAU,OAAO,UAAU,IAAM,QAAO;AACxD,QAAM,SAAS,UAAU;AACzB,SAAO,CAAC,OAAO,QAAQ;AACrB,QAAI,MAAM;AACV,WAAO,MAAM,MAAM,UAAUA,UAAS,MAAM,WAAW,GAAG,GAAG,MAAM,GAAG;AACpE;AACA,UAAI,MAAM,OAAO,aAAc,QAAO;AAAA,IACxC;AACA,WAAO,UAAU,QAAQ,MAAM,OAAO;AAAA,EACxC;AACF;AAWA,SAAS,cAAc,IAAwB;AAC7C,MAAI,GAAG,SAAS,SAAU,QAAO;AACjC,QAAM,SAAuC,GAAG,OAAO,IAAI,QAAM,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,GAAG,EAAE;AACxF,QAAM,MAAM,CAAC,IAAY,OAAqB;AAAE,QAAI,MAAM,GAAI,QAAO,KAAK,EAAE,IAAI,GAAG,CAAC;AAAA,EAAE;AACtF,aAAW,KAAK,GAAG,QAAQ;AAEzB,UAAM,MAAM,KAAK,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,IAAI,EAAE,IAAI,EAAE;AACvD,QAAI,MAAM,IAAI,MAAM,EAAE;AAEtB,UAAM,MAAM,KAAK,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,IAAI,EAAE,IAAI,GAAG;AACxD,QAAI,MAAM,IAAI,MAAM,EAAE;AAAA,EACxB;AAEA,SAAO,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,EAAE;AACjC,QAAM,SAAuC,CAAC;AAC9C,aAAW,KAAK,QAAQ;AACtB,UAAM,OAAO,OAAO,OAAO,SAAS,CAAC;AACrC,QAAI,QAAQ,EAAE,MAAM,KAAK,KAAK,EAAG,MAAK,KAAK,KAAK,IAAI,KAAK,IAAI,EAAE,EAAE;AAAA,QAC5D,QAAO,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,GAAG,CAAC;AAAA,EACzC;AACA,SAAO,EAAE,MAAM,UAAU,QAAQ,OAAO;AAC1C;AAEO,SAAS,MAAM,SAA0B,QAAQ,IAAwB;AAC9E,QAAM,SAAS,OAAO,YAAY,WAAW,UAAU,QAAQ;AAC/D,QAAM,gBAAgB,OAAO,YAAY,WAAW,QAAQ,QAAQ;AAEpE,QAAM,WAAW,IAAI,OAAO,QAAQ,MAAM,cAAc,QAAQ,SAAS,EAAE,CAAC;AAC5E,QAAM,OAAO,aAAa,QAAQ,aAAa;AAE/C,QAAM,MAAM,kBAAkB,MAAM;AAgBpC,QAAMC,YAAW,CAAC,cAAc,SAAS,GAAG,IACxC,IAAI,WACH,cAAc,SAAS,GAAG,KAAK,cAAc,SAAS,GAAG,IACxD,IAAI,IACJ,cAAc,IAAI,QAAQ;AAChC,QAAM,kBAAkB,IAAI;AAC5B,QAAM,OAAmB,EAAE,UAAAA,WAAU,iBAAiB,UAAU,MAAM;AAEtE,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM,EAAE,KAAK,SAAS,QAAQ,OAAO,cAAc;AAAA,IACnD,MAAM,OAAe,KAAa,KAAwC;AACxE,YAAM,UAAU,OAAO,OAAO,GAAG;AACjC,UAAI,YAAY,QAAW;AACzB,YAAI,YAAY,KAAM,QAAO,OAAO,KAAK,CAAC,IAAI,MAAM,GAAG,GAAG,GAAG;AAC7D,cAAM,QAAQ,MAAM,MAAM,KAAK,OAAO;AACtC,cAAMC,QAAO,EAAE,OAAO,KAAK,KAAK,QAAQ;AACxC,YAAI,mBAAmB,IAAI,WAAY,4BAA2B,KAAK,OAAO,KAAK,OAAO;AAC1F,YAAI,iBAAiB,GAAG,EAAG,aAAY,KAAK,EAAE,MAAM,QAAQ,OAAO,MAAAA,MAAK,CAAC;AACzE,eAAO,EAAE,IAAI,MAAM,OAAO,MAAAA,MAAK;AAAA,MACjC;AACA,eAAS,YAAY;AACrB,YAAM,IAAI,SAAS,KAAK,KAAK;AAC7B,UAAI,MAAM,MAAM;AACd,eAAO,OAAO,KAAK,CAAC,IAAI,MAAM,GAAG,GAAG,GAAG;AAAA,MACzC;AACA,YAAM,OAAO,EAAE,OAAO,KAAK,KAAK,MAAM,EAAE,CAAC,EAAG,OAAO;AACnD,UAAI,mBAAmB,IAAI,WAAY,4BAA2B,KAAK,OAAO,KAAK,KAAK,GAAG;AAC3F,UAAI,iBAAiB,GAAG,EAAG,aAAY,KAAK,EAAE,MAAM,QAAQ,OAAO,EAAE,CAAC,GAAI,KAAK,CAAC;AAChF,aAAO,EAAE,IAAI,MAAM,OAAO,EAAE,CAAC,GAAI,KAAK;AAAA,IACxC;AAAA,EACF;AACF;;;AC5JO,SAAS,YAAY,GAAW,GAAoB;AACzD,MAAI,EAAE,WAAW,EAAE,OAAQ,QAAO;AAClC,WAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;AACjC,QAAI,KAAK,EAAE,WAAW,CAAC;AACvB,QAAI,KAAK,EAAE,WAAW,CAAC;AACvB,QAAI,MAAM,MAAM,MAAM,GAAI,OAAM;AAChC,QAAI,MAAM,MAAM,MAAM,GAAI,OAAM;AAChC,QAAI,OAAO,GAAI,QAAO;AAAA,EACxB;AACA,SAAO;AACT;AAMO,SAAS,QAAQ,OAAe,OAAuB,CAAC,GAAuB;AACpF,QAAM,kBAAkB,KAAK,mBAAmB;AAEhD,QAAMC,YAAW,MAAM,SAAS,IAC5B,SAAS,MAAM,YAAY,CAAC,CAAE,IAC9B,MAAM;AAEV,QAAM,OAAmB;AAAA,IACvB,UAAAA;AAAA,IACA,iBAAiB,MAAM,SAAS,IAAI;AAAA,IACpC,UAAU;AAAA,EACZ;AACA,QAAM,kBAAkB,KAAK;AAE7B,MAAI,iBAAiB;AACnB,UAAM,QAAQ,MAAM,YAAY;AAChC,UAAM,QAAQ,MAAM,YAAY;AAChC,UAAM,aAAa,MAAM,YAAY,CAAC;AACtC,UAAM,aAAa,MAAM,YAAY,CAAC;AAItC,SAAK,WAAW,eAAe,UAAa,eAAe,SACvD,eAAe,aACb,EAAE,MAAM,UAAU,QAAQ,CAAC,EAAE,IAAI,YAAY,IAAI,WAAW,CAAC,EAAE,IAC/D,EAAE,MAAM,UAAU,QAAQ;AAAA,MACxB,EAAE,IAAI,YAAY,IAAI,WAAW;AAAA,MACjC,EAAE,IAAI,YAAY,IAAI,WAAW;AAAA,IACnC,EAAC,IACHA;AAAA,EACN;AAEA,QAAM,WAAW,CAAC,KAAK,UAAU,KAAK,CAAC;AAMvC,QAAMC,SAAQ,CAAC,mBAAmB,MAAM,WAAW,KAC9C,MAAM;AACL,UAAM,OAAO,MAAM,WAAW,CAAC;AAC/B,WAAO,SAASA,OAAM,OAAe,KAAa,KAAwC;AACxF,UAAI,MAAM,WAAW,GAAG,MAAM,MAAM;AAClC,cAAM,OAAO,EAAE,OAAO,KAAK,KAAK,MAAM,EAAE;AACxC,YAAI,mBAAmB,IAAI,WAAY,4BAA2B,KAAK,OAAO,KAAK,KAAK,GAAG;AAC3F,YAAI,iBAAiB,GAAG,EAAG,aAAY,KAAK,EAAE,MAAM,QAAQ,OAAO,KAAK,CAAC;AACzE,eAAO,EAAE,IAAI,MAAM,OAAO,KAAK;AAAA,MACjC;AACA,aAAO,OAAO,KAAK,UAAU,GAAG;AAAA,IAClC;AAAA,EACF,GAAG,IACH,SAASA,OAAM,OAAe,KAAa,KAAwC;AACjF,UAAM,MAAM,MAAM,MAAM;AACxB,QAAI,MAAM,MAAM,QAAQ;AACtB,aAAO,OAAO,KAAK,UAAU,GAAG;AAAA,IAClC;AACA,UAAM,eAAe,kBAAkB,MAAM,MAAM,KAAK,GAAG,IAAI;AAC/D,QAAI,kBAAkB,YAAY,cAAc,KAAK,IAAI,MAAM,WAAW,OAAO,GAAG,GAAG;AACrF,YAAM,OAAO,EAAE,OAAO,KAAK,IAAI;AAC/B,UAAI,mBAAmB,IAAI,WAAY,4BAA2B,KAAK,OAAO,KAAK,GAAG;AACtF,UAAI,iBAAiB,GAAG,EAAG,aAAY,KAAK,EAAE,MAAM,QAAQ,OAAO,cAAc,KAAK,CAAC;AACvF,aAAO,EAAE,IAAI,MAAM,OAAO,cAAc,KAAK;AAAA,IAC/C;AACA,WAAO,OAAO,KAAK,UAAU,GAAG;AAAA,EAClC;AAEJ,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM,EAAE,KAAK,WAAW,OAAO,gBAAgB;AAAA,IAC/C,OAAAA;AAAA,EACF;AACF;;;ACnEA,SAAS,UAAUC,KAAoB;AACrC,QAAM,IAAIA,IAAG,YAAY;AAEzB,MAAI,EAAE,WAAW,EAAG,QAAOA;AAE3B,MAAIA,IAAG,YAAY,CAAC,KAAM,OAAO,EAAE,YAAY,CAAC,IAAK,IAAK,QAAOA;AACjE,SAAO;AACT;AASA,IAAI,YAAmD;AAEvD,SAAS,iBAAiD;AACxD,QAAM,cAAc,oBAAI,IAAsB;AAC9C,WAAS,KAAK,GAAG,KAAK,OAAS,MAAM;AAEnC,QAAI,MAAM,SAAU,MAAM,MAAQ;AAClC,UAAM,MAAM,UAAU,OAAO,aAAa,EAAE,CAAC;AAC7C,UAAM,SAAS,YAAY,IAAI,GAAG;AAClC,QAAI,OAAQ,QAAO,KAAK,EAAE;AAAA,QACrB,aAAY,IAAI,KAAK,CAAC,EAAE,CAAC;AAAA,EAChC;AACA,QAAM,QAAQ,oBAAI,IAA+B;AACjD,aAAW,WAAW,YAAY,OAAO,GAAG;AAC1C,QAAI,QAAQ,SAAS,EAAG;AACxB,eAAW,MAAM,QAAS,OAAM,IAAI,IAAI,OAAO;AAAA,EACjD;AACA,SAAO;AACT;AAOO,SAAS,iBAAiB,IAA+B;AAI9D,MAAI,KAAK,KAAK;AACZ,QAAI,MAAM,MAAQ,MAAM,GAAM,QAAO,CAAC,IAAI,KAAK,EAAE;AACjD,QAAI,MAAM,MAAQ,MAAM,IAAM,QAAO,CAAC,IAAI,KAAK,EAAE;AACjD,WAAO,CAAC,EAAE;AAAA,EACZ;AAGA,MAAI,KAAK,MAAQ,QAAO,CAAC,EAAE;AAC3B,gBAAc,eAAe;AAC7B,SAAO,UAAU,IAAI,EAAE,KAAK,CAAC,EAAE;AACjC;;;ACrBA,SAAS,SAAS,GAAmB;AACnC,SAAO,EAAE,QAAQ,uBAAuB,MAAM;AAChD;AAYO,SAAS,SAAS,OAA0B,OAAwB,CAAC,GAAuB;AAGjG,QAAM,SAAS,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM;AACrE,QAAM,MAAM,OAAO,IAAI,QAAQ,EAAE,KAAK,GAAG;AACzC,QAAM,WAAW,KAAK,WAAW,OAAO,KAAK,QAAQ,OAAO;AAiB5D,QAAM,QAAQ,KAAK,kBAAkB,OAAO;AAC5C,QAAM,KAAK,IAAI,OAAO,MAAM,GAAG,IAAI,QAAQ,IAAI,KAAK;AAWpD,MAAIC,YAAqB,MAAM;AAC/B,aAAW,KAAK,QAAQ;AACtB,QAAI,EAAE,WAAW,EAAG;AACpB,UAAM,KAAK,EAAE,YAAY,CAAC;AAC1B,IAAAA,YAAW,MAAMA,WAAU,SAAS,EAAE,CAAC;AACvC,QAAI,KAAK,iBAAiB;AACxB,iBAAW,KAAK,iBAAiB,EAAE,EAAG,CAAAA,YAAW,MAAMA,WAAU,SAAS,CAAC,CAAC;AAAA,IAC9E;AAAA,EACF;AAEA,QAAM,OAAmB,EAAE,UAAAA,WAAU,iBAAiB,OAAO,UAAU,MAAM;AAE7E,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM,EAAE,KAAK,YAAY,OAAO,QAAQ,iBAAiB,KAAK,mBAAmB,OAAO,UAAU,KAAK,SAAS;AAAA,IAChH,MAAM,OAAe,KAAa,KAAwC;AACxE,SAAG,YAAY;AACf,YAAM,IAAI,GAAG,KAAK,KAAK;AACvB,UAAI,MAAM,QAAQ,EAAE,UAAU,KAAK;AACjC,eAAO,OAAO,KAAK,CAAC,SAAS,GAAG,GAAG;AAAA,MACrC;AACA,YAAM,QAAQ,EAAE,CAAC;AACjB,YAAM,OAAO,EAAE,OAAO,KAAK,KAAK,MAAM,MAAM,OAAO;AACnD,UAAI,iBAAiB,GAAG,EAAG,aAAY,KAAK,EAAE,MAAM,QAAQ,OAAO,KAAK,CAAC;AACzE,aAAO,EAAE,IAAI,MAAM,OAAO,KAAK;AAAA,IACjC;AAAA,EACF;AACF;;;ACjHA,IAAM,cAAc,MAAM;AAAC;AAW3B,IAAI;AACJ,IAAI;AACJ,IAAI;AACJ,IAAI;AACJ,IAAI;AACJ,IAAI;AACJ,IAAI;AACJ,IAAI;AAGG,SAAS,0BAA0B,KAA4B;AACpE,SAAO,IAAI,eAAe,UAAa,IAAI,mBAAmB,UAAa,IAAI,YAAY,UAAa,IAAI,kBAAkB;AAChI;AAEO,SAAS,eAAe,KAAuC;AACpE,QAAM,IAAI,YAAY,GAAG;AACzB,SAAO;AAAA,IACL,KAAK,EAAE;AAAA,IACP,MAAM,EAAE;AAAA,IACR,QAAQ,EAAE;AAAA,IACV,QAAQ,EAAE;AAAA,IACV,QAAQ,EAAE;AAAA,IACV,KAAK,IAAI,aAAa,IAAI,WAAW,SAAS;AAAA,IAC9C,SAAS,IAAI,iBAAiB,IAAI,eAAe,SAAS;AAAA,EAC5D;AACF;AAQO,SAAS,iBACd,KACA,KACA,MACA,QACA,QACA,QACA,KACA,SACM;AACN,uBAAqB,KAAK,KAAK,MAAM,QAAQ,QAAQ,MAAM;AAC3D,MAAI,IAAI,cAAc,IAAI,WAAW,WAAW,IAAK,KAAI,WAAW,SAAS;AAC7E,MAAI,IAAI,kBAAkB,IAAI,eAAe,WAAW,QAAS,KAAI,eAAe,SAAS;AAC/F;AAEO,SAAS,eAAe,KAAmB,MAAgC;AAChF,qBAAmB,KAAK,EAAE,KAAK,KAAK,KAAK,MAAM,KAAK,MAAM,QAAQ,KAAK,QAAQ,QAAQ,KAAK,QAAQ,QAAQ,KAAK,OAAO,CAAC;AAEzH,MAAI,IAAI,cAAc,IAAI,WAAW,WAAW,KAAK,IAAK,KAAI,WAAW,SAAS,KAAK;AACvF,MAAI,IAAI,kBAAkB,IAAI,eAAe,WAAW,KAAK,QAAS,KAAI,eAAe,SAAS,KAAK;AACzG;AAEA,SAAS,kBAAkB,QAA8B,OAAe,KAAmB;AACzF,MAAI,WAAW,UAAa,OAAO,MAAO;AAC1C,MAAI,OAAO,SAAS,IAAK,QAAO,WAAW,OAAO,GAAG;AACrD,SAAO,UAAU,MAAM;AACzB;AAMO,SAAS,wBACd,KACA,WACA,SACA,UACA,QACA,cACA,YACM;AACN,QAAM,IAAI,IAAI;AACd,MAAI,MAAM,QAAW;AACnB,UAAM,OAAO,EAAE;AACf,sBAAkB,MAAM,WAAW,OAAO;AAC1C,QAAI,SAAS,UAAa,KAAK,WAAW,EAAG,GAAE,KAAK;AAAA,EACtD,OAAO;AACL,sBAAkB,IAAI,eAAe,WAAW,OAAO;AAAA,EACzD;AACA,oBAAkB,IAAI,YAAY,UAAU,MAAM;AAClD,oBAAkB,IAAI,gBAAgB,cAAc,UAAU;AAChE;AAEA,SAAS,qBACP,SACA,OACA,KACA,KACsB;AACtB,QAAM,WAAW,2BAA2B,IAAI,YAAY,IAAI,KAAK;AACrE,WAAS,aAAa,IAAI;AAC1B,WAAS,cAAc,IAAI;AAC3B,WAAS,iBAAiB,IAAI;AAC9B,QAAM,SAAS,QAAQ,MAAM,OAAO,KAAK,QAAQ;AACjD,MAAI,iBAAiB,SAAS;AAC9B,SAAO;AACT;AAqBO,SAAS,kBAAkB,KAAkC;AAClE,SAAO,EAAE,GAAG,eAAe,GAAG,GAAG,WAAW,IAAI,SAAS,IAAI,OAAO,OAAO,KAAK;AAClF;AAEO,SAAS,kBAAkB,KAAmB,MAA2B;AAC9E,iBAAe,KAAK,IAAI;AACxB,MAAI,IAAI,OAAQ,KAAI,OAAO,OAAO,KAAK;AACzC;AAEA,SAAS,eAAe,OAAe,KAAa,KAA+B;AACjF,QAAM,UAAU,IAAI;AACpB,QAAM,OAAO,qBAAqB,OAAO;AACzC,MAAI,CAAC,KAAM,QAAO,EAAE,KAAK,KAAK,QAAQ,YAAY;AAElD,QAAM,MAAM,IAAI;AAChB,QAAM,UAAU,IAAI;AACpB,QAAM,YAAY,IAAI;AACtB,QAAM,YAAY,IAAI,kBAAkB,IAAI,YAAY,UAAa,IAAI,kBAAkB;AAC3F,QAAM,OAAO,IAAI;AACjB,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,QAAM,aAAa,mBAAmB,OAAO,KAAK,MAAM,IAAI,OAAO,CAAC,OAAO,UAAU,cAAc;AACjG,QAAI,QAAQ,OAAW,EAAC,aAAa,CAAC,GAAG,KAAK,OAAO,UAAU,SAAS;AACxE,UAAM,eAAe,YAAY,UAAa,cAAc,UAAa,IAAI,uBAAuB,QAChG,SACA,UAAU,KAAK,OAAO,SAAS,KAAK,EAAE;AAC1C,QAAI,iBAAiB,OAAW,EAAC,aAAa,CAAC,GAAG,KAAK,OAAO,UAAU,YAAY;AACpF,QAAI,cAAc,SAAS,WAAc,OAAQ,KAAK,eAAgB,IAAI;AACxE,OAAC,YAAY,CAAC,GAAG,KAAK,OAAO,UAAU,SAAS;AAAA,IAClD;AAAA,EACF,CAAC;AACD,MAAI,eAAe,QAAW;AAC5B,QAAI,eAAe,IAAK,QAAO,EAAE,KAAK,KAAK,QAAQ,YAAY;AAC/D,WAAO;AAAA,MACL,KAAK;AAAA,MACL,QAAQ,MAAM;AACZ,YAAI,aAAa,UAAa,QAAQ,OAAW,KAAI,KAAK,GAAG,QAAQ;AACrE,YAAI,aAAa,UAAa,YAAY,QAAW;AACnD,mBAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK,GAAG;AAC3C,oBAAQ,KAAK,KAAK,YAAY,SAAS,CAAC,GAAI,SAAS,IAAI,CAAC,GAAI,SAAS,IAAI,CAAC,CAAE;AAAA,UAChF;AAAA,QACF;AACA,YAAI,YAAY,QAAW;AACzB,mBAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK,GAAG;AAC1C,+BAAmB,KAAK,QAAQ,CAAC,GAAI,QAAQ,IAAI,CAAC,GAAI,QAAQ,IAAI,CAAC,CAAE;AAAA,UACvE;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,EAAE,KAAK,OAAO,IAAI,wBAAwB,OAAO,KAAK,MAAM,IAAI,KAAK;AAC3E,MAAI,QAAQ,IAAK,QAAO,EAAE,KAAK,KAAK,QAAQ,YAAY;AAExD,SAAO;AAAA,IACL;AAAA,IACA,QAAQ,MAAM,mBAAmB,KAAK,MAAM;AAAA,EAC9C;AACF;AAGA,SAAS,eAAe,OAAe,KAAa,KAA2B;AAC7E,QAAM,OAAO,qBAAqB,IAAI,MAAO;AAC7C,MAAI,KAAM,QAAO,qBAAqB,OAAO,KAAK,MAAM,IAAI,KAAK;AACjE,QAAM,KAAK,qBAAqB,IAAI,QAAS,OAAO,KAAK,GAAG;AAC5D,SAAO,GAAG,MAAM,GAAG,KAAK,MAAM,MAAM,GAAG,KAAK,MAAM;AACpD;AAGA,SAAS,iBACP,SACA,OACA,KACA,KACA,YACQ;AACR,QAAM,KAAK,QAAQ,MAAM,OAAO,KAAK,2BAA2B,YAAY,IAAI,KAAK,CAAC;AACtF,SAAO,GAAG,KAAK,GAAG,KAAK,MAAM;AAC/B;AAMO,SAAS,cAAc,OAAe,KAAa,KAA2B;AACnF,QAAM,UAAU,IAAI;AACpB,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI,CAAC,IAAI,YAAY;AACnB,UAAMC,QAAO,kBAAkB,OAAO;AACtC,QAAIA,MAAM,QAAOA,MAAK,OAAO,GAAG;AAChC,QAAI,IAAI,iBAAkB,QAAO,eAAe,OAAO,KAAK,GAAG;AAC/D,UAAMC,MAAK,QAAQ,MAAM,OAAO,KAAK,2BAA2B,IAAI,YAAY,IAAI,KAAK,CAAC;AAC1F,WAAOA,IAAG,MAAMA,IAAG,KAAK,MAAM,MAAMA,IAAG,KAAK,MAAM;AAAA,EACpD;AACA,QAAM,mBAAmB,IAAI,cAAc,QAAQ,MAAM;AACzD,QAAM,OAAO,kBAAkB,OAAO;AACtC,MAAI,MAAM;AACR,UAAM,MAAM,KAAK,OAAO,GAAG;AAC3B,QAAI,iBAAkB,4BAA2B,KAAK,OAAO,KAAK,GAAG;AACrE,WAAO;AAAA,EACT;AACA,MAAI,IAAI,kBAAkB;AACxB,UAAM,MAAM,eAAe,OAAO,KAAK,GAAG;AAC1C,QAAI,iBAAkB,4BAA2B,KAAK,OAAO,KAAK,GAAG;AACrE,WAAO;AAAA,EACT;AACA,QAAM,KAAK,qBAAqB,SAAS,OAAO,KAAK,GAAG;AACxD,SAAO,GAAG,MAAM,GAAG,KAAK,MAAM,MAAM,GAAG,KAAK,MAAM;AACpD;AAMO,SAAS,WAAW,OAAe,KAAa,KAA+B;AACpF,QAAM,UAAU,IAAI;AACpB,MAAI,CAAC,QAAS,QAAO,EAAE,KAAK,KAAK,QAAQ,YAAY;AAErD,QAAM,MAAM,IAAI;AAChB,QAAM,UAAU,IAAI;AACpB,QAAM,YAAY,IAAI,kBAAkB,IAAI,YAAY,UAAa,IAAI,kBAAkB;AAC3F,MAAI,CAAC,IAAI,YAAY;AACnB,UAAMD,QAAO,CAAC,IAAI,mBAAmB,kBAAkB,OAAO,IAAI;AAClE,QAAIA,SAAQ,QAAQ,UAAa,CAAC,WAAW;AAC3C,aAAO,EAAE,KAAKA,MAAK,OAAO,GAAG,GAAG,QAAQ,YAAY;AAAA,IACtD;AAEA,QAAI,IAAI,qBAAqB,QAAQ,UAAa,YAAY,UAAa,YAAY;AACrF,aAAO,eAAe,OAAO,KAAK,GAAG;AAAA,IACvC;AAQA,QAAI,IAAI,kBAAkB;AACxB,YAAM,eAAe,kBAAkB,OAAO;AAC9C,aAAO,EAAE,KAAK,eAAe,aAAa,OAAO,GAAG,IAAI,eAAe,OAAO,KAAK,GAAG,GAAG,QAAQ,YAAY;AAAA,IAC/G;AAEA,QAAI,QAAQ,UAAa,YAAY,UAAa,WAAW;AAO3D,YAAM,MAAMA,QACRA,MAAK,OAAO,GAAG,IACf,iBAAiB,SAAS,OAAO,KAAK,KAAK,QAAQ,SAAY,QAAQ,IAAI,UAAU;AACzF,UAAI,QAAQ,IAAK,QAAO,EAAE,KAAK,KAAK,QAAQ,YAAY;AACxD,aAAO;AAAA,QACL;AAAA,QACA,QAAQ,MAAM;AACZ,6BAAmB,KAAK,KAAK,GAAG;AAChC,cAAI,UAAW,oBAAmB,KAAK,KAAK,GAAG;AAAA,QACjD;AAAA,MACF;AAAA,IACF;AAEA,UAAMC,MAAK,QAAQ,MAAM,OAAO,KAAK,2BAA2B,IAAI,YAAY,IAAI,KAAK,CAAC;AAC1F,WAAO,EAAE,KAAKA,IAAG,KAAKA,IAAG,KAAK,MAAM,KAAK,QAAQ,YAAY;AAAA,EAC/D;AACA,QAAM,mBAAmB,IAAI,cAAc,QAAQ,MAAM;AAEzD,QAAM,OAAO,CAAC,IAAI,mBAAmB,kBAAkB,OAAO,IAAI;AAClE,MAAI,QAAQ,QAAQ,UAAa,CAAC,WAAW;AAC3C,UAAM,MAAM,KAAK,OAAO,GAAG;AAC3B,QAAI,iBAAkB,4BAA2B,KAAK,OAAO,KAAK,GAAG;AACrE,WAAO,EAAE,KAAK,QAAQ,YAAY;AAAA,EACpC;AAEA,MAAI,IAAI,qBAAqB,QAAQ,UAAa,YAAY,UAAa,YAAY;AACrF,UAAM,OAAO,eAAe,OAAO,KAAK,GAAG;AAC3C,QAAI,iBAAkB,4BAA2B,KAAK,OAAO,KAAK,KAAK,GAAG;AAC1E,WAAO;AAAA,EACT;AAMA,MAAI,IAAI,kBAAkB;AACxB,UAAM,eAAe,kBAAkB,OAAO;AAC9C,UAAM,MAAM,eAAe,aAAa,OAAO,GAAG,IAAI,eAAe,OAAO,KAAK,GAAG;AACpF,QAAI,iBAAkB,4BAA2B,KAAK,OAAO,KAAK,GAAG;AACrE,WAAO,EAAE,KAAK,QAAQ,YAAY;AAAA,EACpC;AAEA,MAAI,QAAQ,UAAa,YAAY,UAAa,WAAW;AAG3D,QAAI;AACJ,QAAI,MAAM;AACR,YAAM,KAAK,OAAO,GAAG;AACrB,UAAI,iBAAkB,4BAA2B,KAAK,OAAO,KAAK,GAAG;AAAA,IACvE,OAAO;AACL,YAAMA,MAAK,qBAAqB,SAAS,OAAO,KAAK,GAAG;AACxD,YAAMA,IAAG,KAAKA,IAAG,KAAK,MAAM;AAAA,IAC9B;AACA,QAAI,QAAQ,IAAK,QAAO,EAAE,KAAK,KAAK,QAAQ,YAAY;AACxD,WAAO;AAAA,MACL;AAAA,MACA,QAAQ,MAAM;AACZ,2BAAmB,KAAK,KAAK,GAAG;AAChC,YAAI,UAAW,oBAAmB,KAAK,KAAK,GAAG;AAAA,MACjD;AAAA,IACF;AAAA,EACF;AAEA,QAAM,KAAK,qBAAqB,SAAS,OAAO,KAAK,GAAG;AACxD,SAAO,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,MAAM,KAAK,QAAQ,YAAY;AAC/D;AAYO,SAAS,kBACd,GACA,OACA,KACA,KACQ;AACR,QAAM,MAAM,EAAE,OAAO,GAAG;AACxB,MAAI,QAAQ,KAAK;AAEf,QAAI,IAAI,eAAe,OAAW,KAAI,WAAW,KAAK,KAAK,GAAG;AAC9D,QAAI,IAAI,kBAAkB,SAAS,IAAI,YAAY,UAAa,IAAI,kBAAkB,SAAY;AAChG,yBAAmB,KAAK,KAAK,GAAG;AAAA,IAClC;AAAA,EACF;AACA,SAAO;AACT;AAMO,SAAS,cAAc,OAAe,KAAa,KAA2B;AACnF,MAAI,CAAC,0BAA0B,GAAG,EAAG,QAAO,cAAc,OAAO,KAAK,GAAG;AACzE,QAAM,OAAO,WAAW,OAAO,KAAK,GAAG;AACvC,OAAK,OAAO;AACZ,SAAO,KAAK;AACd;AAWO,SAAS,eAAe,OAAe,KAAa,KAA2B;AACpF,MAAI,CAAC,IAAI,OAAQ,QAAO;AAUxB,QAAM,WAAyB,EAAE,GAAG,KAAK,YAAY,MAAM;AAC3D,MAAI,0BAA0B,QAAQ,EAAG,QAAO,WAAW,OAAO,KAAK,QAAQ,EAAE;AACjF,SAAO,cAAc,OAAO,KAAK,QAAQ;AAC3C;AAWO,SAAS,kBAAkBC,SAAuD;AACvF,MAAIA,YAAW,YAAa,QAAO;AACnC,MAAIA,YAAW,YAAa,QAAO;AACnC,MAAIA,YAAW,YAAa,QAAO;AACnC,MAAIA,YAAW,YAAa,QAAO;AACnC,QAAM,UAAU,uBAAuBA,OAAM;AAC7C,gBAAc;AACd,iBAAe;AACf,gBAAc;AACd,iBAAe;AACf,gBAAc;AACd,iBAAe;AACf,gBAAcA;AACd,iBAAe;AACf,SAAO;AACT;AAEA,SAAS,uBAAuBA,SAAuD;AACrF,QAAM,OAAOA,QAAO,KAAK,QAAQ,WAAWA,QAAO,KAAK,SAASA;AACjE,QAAM,SAAS,mBAAmB,IAAI;AACtC,MAAI,OAAQ,QAAO;AAEnB,QAAM,SAAS,KAAK,KAAK,QAAQ,eAAgB,KAAK,KAAK,QAAQ,UAAU,KAAK,KAAK,OAAO,IAC1F,KAAK,KAAK,SACV;AACJ,MAAI,CAAC,OAAQ,QAAO;AAEpB,QAAM,MAAM,mBAAmB,MAAM;AACrC,MAAI,IAAK,QAAO,YAAY,CAAC,GAAG,CAAC;AAEjC,MAAI,OAAO,KAAK,QAAQ,SAAU,QAAO;AACzC,QAAM,OAAO,OAAO,KAAK,QAAQ,IAAI,kBAAkB;AACvD,MAAI,KAAK,KAAK,OAAK,MAAM,IAAI,EAAG,QAAO;AACvC,SAAO,YAAY,IAA2B;AAChD;AAEA,SAAS,YAAY,MAA8C;AACjE,SAAO,CAAC,OAAO,QAAQ;AACrB,QAAI,MAAM;AACV,SAAM,QAAO,MAAM,MAAM,QAAQ;AAC/B,iBAAW,OAAO,MAAM;AACtB,cAAM,MAAM,IAAI,OAAO,GAAG;AAC1B,YAAI,MAAM,KAAK;AACb,gBAAM;AACN,mBAAS;AAAA,QACX;AAAA,MACF;AACA;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;AAEA,SAAS,mBAAmBC,SAAuD;AAkBjF,QAAM,IAAIA,QAAO,KAAK,QAAQ,UAAUA,QAAO,KAAK,OAAO,OAAOA,QAAO;AACzE,MAAI,EAAE,QAAQ,WAAW,EAAE,MAAO,QAAO;AACzC,QAAM,SAAS,EAAE;AACjB,SAAO,eAAe,MAAM,KACvB,cAAc,MAAM,KACpB,gBAAgB,MAAM,KACtB,gBAAgB,MAAM;AAC7B;AASA,SAAS,UAAU,KAAqC;AACtD,MAAI,CAAC,IAAK,QAAO;AACjB,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,IAAK,KAAI,IAAI,CAAC,IAAK,MAAQ,QAAO;AAClE,SAAO,OAAO,aAAa,GAAG,GAAG;AACnC;AAEA,SAASC,UAAS,IAAY,QAA0C;AACtE,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,UAAM,IAAI,OAAO,CAAC;AAClB,QAAI,MAAM,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,EAAG,QAAO;AAAA,EACvC;AACA,SAAO;AACT;AAGA,SAAS,aAAa,WAA6C;AACjE,QAAM,SAAS,iBAAiB,SAAS;AACzC,MAAI,CAAC,OAAQ,QAAO;AACpB,SAAO,CAAC,OAAO,QAAQ;AACrB,QAAI,MAAM;AACV,WAAO,MAAM,MAAM,UAAUA,UAAS,MAAM,WAAW,GAAG,GAAG,MAAM,EAAG;AACtE,WAAO;AAAA,EACT;AACF;AAGA,SAAS,sBAAsB,YAAuC;AACpE,SAAO,CAAC,OAAO,QAAQ;AACrB,QAAI,MAAM,WAAW,GAAG,MAAM,WAAY,QAAO;AACjD,QAAI,MAAM,MAAM;AAChB,WAAO,MAAM,MAAM,QAAQ;AACzB,YAAM,KAAK,MAAM,WAAW,GAAG;AAC/B,UAAI,OAAO,MAAM,OAAO,GAAI;AAC5B;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;AAGA,SAAS,eAAe,QAA0C;AAChE,QAAM,IAAI,mCAAmC,KAAK,MAAM;AACxD,SAAO,IAAI,aAAa,EAAE,CAAC,CAAE,IAAI;AACnC;AAYA,SAAS,gBAAgB,QAA0C;AACjE,QAAM,IAAI,6DAA6D,KAAK,MAAM;AAClF,MAAI,CAAC,EAAG,QAAO;AACf,QAAM,SAAS,UAAU,kBAAkB,EAAE,CAAC,CAAE,CAAC;AACjD,MAAI,WAAW,KAAM,QAAO;AAC5B,QAAM,MAAM,kBAAkB,EAAE,CAAC,CAAE;AACnC,MAAI,CAAC,IAAK,QAAO;AACjB,QAAM,EAAE,QAAQ,QAAQ,IAAI;AAC5B,QAAM,SAAS,EAAE,CAAC,MAAM;AACxB,SAAO,CAAC,OAAO,QAAQ;AACrB,QAAI,CAAC,MAAM,WAAW,QAAQ,GAAG,EAAG,QAAO;AAC3C,UAAM,QAAQ,MAAM,OAAO;AAC3B,UAAM,MAAM,MAAM;AAClB,QAAI,MAAM;AACV,WAAO,MAAM,OAAOA,UAAS,MAAM,WAAW,GAAG,GAAG,MAAM,MAAM,QAAS;AACzE,WAAO,UAAU,QAAQ,QAAQ,MAAM;AAAA,EACzC;AACF;AAYA,SAAS,gBAAgB,QAA0C;AAGjE,MAAI,OAAO,SAAS,MAAM,EAAG,QAAO;AACpC,MAAI,IAAI;AACR,SAAO,IAAI,OAAO,UAAU,OAAO,CAAC,MAAM,IAAK,MAAK,OAAO,CAAC,MAAM,OAAO,IAAI;AAC7E,MAAI,OAAO,CAAC,MAAM,OAAO,OAAO,IAAI,CAAC,MAAM,OAAO,OAAO,IAAI,CAAC,MAAM,IAAK,QAAO;AAChF,MAAI,IAAI,IAAI;AACZ,MAAI,QAAQ;AACZ,SAAO,IAAI,OAAO,UAAU,QAAQ,GAAG;AACrC,UAAMC,MAAK,OAAO,CAAC;AACnB,QAAIA,QAAO,MAAM;AAAE,WAAK;AAAG;AAAA,IAAS;AACpC,QAAIA,QAAO,KAAK;AACd,UAAI,IAAI,IAAI;AACZ,UAAI,OAAO,CAAC,MAAM,IAAK;AACvB,aAAO,IAAI,OAAO,UAAU,OAAO,CAAC,MAAM,IAAK,MAAK,OAAO,CAAC,MAAM,OAAO,IAAI;AAC7E,UAAI,OAAO,CAAC,MAAM,IAAK,QAAO;AAC9B,UAAI,IAAI;AACR;AAAA,IACF;AACA,QAAIA,QAAO,IAAK;AAAA,aACPA,QAAO,IAAK;AACrB;AAAA,EACF;AACA,MAAI,UAAU,KAAK,OAAO,CAAC,MAAM,IAAK,QAAO;AAC7C,QAAM,OAAO,OAAO,MAAM,IAAI,GAAG,IAAI,CAAC;AACtC,QAAM,UAAU,kBAAkB,OAAO,MAAM,GAAG,CAAC,CAAC;AACpD,QAAM,WAAW,kBAAkB,OAAO,MAAM,IAAI,CAAC,CAAC;AACtD,MAAI,CAAC,WAAW,CAAC,YAAY,CAAC,mBAAmB,MAAM,QAAQ,EAAG,QAAO;AACzE,QAAM,OAAO,UAAU,OAAO;AAC9B,QAAM,QAAQ,UAAU,QAAQ;AAChC,MAAI,SAAS,QAAQ,UAAU,KAAM,QAAO;AAC5C,SAAO,CAAC,OAAO,QAAQ;AACrB,QAAI,CAAC,MAAM,WAAW,MAAM,GAAG,EAAG,QAAO;AACzC,UAAM,MAAM,MAAM,QAAQ,OAAO,MAAM,KAAK,MAAM;AAElD,WAAO,QAAQ,KAAK,MAAM,MAAM,MAAM;AAAA,EACxC;AACF;AAGA,SAAS,eAAe,MAA+B;AACrD,QAAM,OAAiB,CAAC;AACxB,MAAI,QAAQ;AACZ,MAAI,OAAO;AACX,MAAI,IAAI;AACR,SAAO,IAAI,KAAK,QAAQ;AACtB,UAAMA,MAAK,KAAK,CAAC;AACjB,QAAIA,QAAO,MAAM;AAAE,WAAK;AAAG;AAAA,IAAS;AACpC,QAAIA,QAAO,KAAK;AACd,UAAI,IAAI,IAAI;AACZ,UAAI,KAAK,CAAC,MAAM,IAAK;AACrB,aAAO,IAAI,KAAK,UAAU,KAAK,CAAC,MAAM,IAAK,MAAK,KAAK,CAAC,MAAM,OAAO,IAAI;AACvE,UAAI,KAAK,CAAC,MAAM,IAAK,QAAO;AAC5B,UAAI,IAAI;AACR;AAAA,IACF;AACA,QAAIA,QAAO,KAAK;AAAE;AAAS;AAAK;AAAA,IAAS;AACzC,QAAIA,QAAO,KAAK;AAAE;AAAS,UAAI,QAAQ,EAAG,QAAO;AAAM;AAAK;AAAA,IAAS;AACrE,QAAIA,QAAO,OAAO,UAAU,GAAG;AAAE,WAAK,KAAK,KAAK,MAAM,MAAM,CAAC,CAAC;AAAG,aAAO,IAAI;AAAA,IAAE;AAC9E;AAAA,EACF;AACA,MAAI,UAAU,EAAG,QAAO;AACxB,OAAK,KAAK,KAAK,MAAM,IAAI,CAAC;AAC1B,SAAO;AACT;AAoBA,SAAS,mBAAmB,MAAc,OAA0B;AAClE,MAAI,MAAM,SAAS,EAAG,QAAO;AAC7B,QAAM,KAAK,MAAM,CAAC;AAClB,QAAM,OAAO,eAAe,IAAI;AAChC,MAAI,CAAC,KAAM,QAAO;AAClB,MAAI,WAAW;AACf,MAAI,YAAY;AAChB,aAAW,OAAO,MAAM;AACtB,UAAM,OAAO,2BAA2B,KAAK,GAAG;AAChD,QAAI,MAAM;AACR,UAAI,SAAU,QAAO;AACrB,YAAM,SAAS,iBAAiB,KAAK,CAAC,CAAE;AACxC,UAAI,CAAC,UAAU,OAAO,WAAW,KAAK,OAAO,CAAC,EAAG,CAAC,MAAM,MAAM,OAAO,CAAC,EAAG,CAAC,MAAM,GAAI,QAAO;AAC3F,iBAAW;AACX;AAAA,IACF;AACA,QAAI,MAAM,WAAW,KAAK,IAAI,SAAS,GAAG,GAAG;AAC3C,YAAM,MAAM,IAAI,QAAQ,KAAK;AAC7B,UAAI,QAAQ,MAAM,UAAW,QAAO;AACpC,YAAM,SAAS,kBAAkB,IAAI,MAAM,GAAG,GAAG,CAAC;AAClD,YAAM,KAAK,kBAAkB,IAAI,MAAM,MAAM,GAAG,EAAE,CAAC;AACnD,UAAI,QAAQ,WAAW,KAAK,OAAO,CAAC,MAAM,GAAI,QAAO;AACrD,UAAI,CAAC,MAAM,GAAG,WAAW,GAAG,OAAO,WAAW,KACzC,GAAG,OAAO,CAAC,EAAG,CAAC,MAAM,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,EAAG,CAAC,MAAM,MAAM,CAAC,EAAG,QAAO;AAC5E,kBAAY;AACZ;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACA,SAAO,YAAY,eAAe,MAAM,WAAW;AACrD;AAYA,SAAS,kBAAkB,KAA+B;AACxD,QAAM,MAAM,oCAAoC,KAAK,GAAG;AACxD,MAAI,KAAK;AACP,UAAM,SAAS,iBAAiB,IAAI,CAAC,CAAE;AACvC,WAAO,SAAS,EAAE,MAAM,SAAS,OAAO,IAAI;AAAA,EAC9C;AACA,QAAM,KAAK,yBAAyB,KAAK,GAAG;AAC5C,MAAI,IAAI;AACN,UAAM,SAAS,GAAG,CAAC;AACnB,WAAO,EAAE,MAAM,kBAAkB,OAAO,OAAO,WAAW,IAAI,OAAO,CAAC,IAAK,OAAO,CAAC,GAAI,WAAW,CAAC,EAAE;AAAA,EACvG;AACA,SAAO;AACT;AAEA,SAAS,WAAW,KAAmC;AACrD,MAAI,IAAI,SAAS,iBAAkB,QAAO,sBAAsB,IAAI,IAAI;AACxE,QAAM,SAAS,IAAI;AACnB,SAAO,CAAC,OAAO,QAAQ;AACrB,QAAI,MAAM;AACV,WAAO,MAAM,MAAM,UAAUD,UAAS,MAAM,WAAW,GAAG,GAAG,MAAM,EAAG;AACtE,WAAO;AAAA,EACT;AACF;AAQA,SAAS,mBAAmB,QAAiC,SAAsC;AACjG,QAAM,KAAK,QAAQ,CAAC;AACpB,QAAM,SAAS,QAAQ,WAAW;AAClC,SAAO,CAAC,OAAO,QAAQ;AACrB,QAAI,MAAM;AACV,UAAM,MAAM,MAAM;AAClB,eAAS;AACP,YAAM,IAAI,MAAM,WAAW,GAAG;AAC9B,UAAI,MAAM,OAAOA,UAAS,GAAG,MAAM,GAAG;AAAE;AAAO;AAAA,MAAS;AACxD,UAAI,SAAS,MAAM,KAAK,QAAQ,SAAS,CAAC,GAAG;AAC3C;AACA,eAAO,MAAM,KAAK;AAChB,gBAAM,KAAK,MAAM,WAAW,GAAG;AAC/B,cAAI,OAAO,MAAM,OAAO,GAAI;AAC5B;AAAA,QACF;AACA;AAAA,MACF;AACA;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;AAGA,SAAS,kBAAkB,MAA+B;AACxD,QAAM,OAAiB,CAAC;AACxB,MAAI,UAAU;AACd,MAAI,QAAQ;AACZ,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,UAAM,IAAI,KAAK,CAAC;AAChB,QAAI,MAAM,MAAM;AAAE;AAAK;AAAA,IAAS;AAChC,QAAI,SAAS;AAAE,UAAI,MAAM,IAAK,WAAU;AAAO;AAAA,IAAS;AACxD,QAAI,MAAM,IAAK,WAAU;AAAA,aAChB,MAAM,IAAK,QAAO;AAAA,aAClB,MAAM,KAAK;AAAE,WAAK,KAAK,KAAK,MAAM,OAAO,CAAC,CAAC;AAAG,cAAQ,IAAI;AAAA,IAAE;AAAA,EACvE;AACA,OAAK,KAAK,KAAK,MAAM,KAAK,CAAC;AAC3B,SAAO;AACT;AAWA,SAAS,cAAc,QAA0C;AAC/D,QAAM,IAAI,oBAAoB,KAAK,MAAM;AACzC,MAAI,CAAC,EAAG,QAAO;AACf,QAAM,UAAU,kBAAkB,EAAE,CAAC,CAAE;AACvC,MAAI,CAAC,WAAW,QAAQ,SAAS,EAAG,QAAO;AAC3C,QAAM,OAAoB,CAAC;AAC3B,aAAW,OAAO,SAAS;AACzB,UAAM,MAAM,kBAAkB,GAAG;AACjC,QAAI,CAAC,IAAK,QAAO;AACjB,SAAK,KAAK,GAAG;AAAA,EACf;AACA,QAAM,SAAkC,CAAC;AACzC,QAAM,UAAoB,CAAC;AAC3B,aAAW,OAAO,MAAM;AACtB,QAAI,IAAI,SAAS,QAAS,QAAO,KAAK,GAAG,IAAI,MAAM;AAAA,QAC9C,SAAQ,KAAK,IAAI,IAAI;AAAA,EAC5B;AACA,MAAI,QAAQ,KAAK,UAAQA,UAAS,MAAM,MAAM,CAAC,GAAG;AAChD,WAAO,YAAY,KAAK,IAAI,UAAU,CAAC;AAAA,EACzC;AACA,MAAI,QAAQ,WAAW,EAAG,QAAO,WAAW,EAAE,MAAM,SAAS,OAAO,CAAC;AACrE,SAAO,mBAAmB,QAAQ,OAAO;AAC3C;;;AC9zBA,SAAS,QAAQ,UAA+B,OAAe,KAAa,KAA4B;AACtG,QAAM,IAAI;AAAA,IACR,QAAQ,IAAI;AAAA,IAAQ,SAAS,IAAI;AAAA,IACjC,YAAY,IAAI;AAAA,IAAY,cAAc,IAAI;AAAA,IAAc,iBAAiB,IAAI;AAAA,IACjF,eAAe,IAAI;AAAA,IAAe,YAAY,IAAI;AAAA,IAAY,gBAAgB,IAAI;AAAA,IAAgB,SAAS,IAAI;AAAA,IAAS,SAAS,IAAI;AAAA,IACrI,WAAW,IAAI;AAAA,IAAW,OAAO,IAAI;AAAA,EACvC;AACA,MAAI,SAAS;AAAW,MAAI,UAAU;AACtC,MAAI,aAAa;AAAW,MAAI,eAAe;AAAW,MAAI,kBAAkB;AAChF,MAAI,gBAAgB;AAAW,MAAI,aAAa;AAAW,MAAI,iBAAiB;AAAW,MAAI,UAAU;AAAW,MAAI,UAAU;AAKlI,MAAI,YAAY;AAAW,MAAI,QAAQ;AACvC,MAAI;AACF,WAAO,SAAS,MAAM,OAAO,KAAK,GAAG,EAAE;AAAA,EACzC,UAAE;AACA,QAAI,SAAS,EAAE;AAAQ,QAAI,UAAU,EAAE;AACvC,QAAI,aAAa,EAAE;AAAY,QAAI,eAAe,EAAE;AAAc,QAAI,kBAAkB,EAAE;AAC1F,QAAI,gBAAgB,EAAE;AAAe,QAAI,aAAa,EAAE;AAAY,QAAI,iBAAiB,EAAE;AAAgB,QAAI,UAAU,EAAE;AAAS,QAAI,UAAU,EAAE;AACpJ,QAAI,YAAY,EAAE;AAAW,QAAI,QAAQ,EAAE;AAAA,EAC7C;AACF;AAOO,SAAS,WACd,GACA,GACqB;AACrB,MAAI,MAAM,OAAW,QAAO;AAC5B,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,GAAG,iBAAiB,OAAO,UAAU,MAAM;AAAA,IAC5E,MAAM,EAAE,KAAK,UAAU;AAAA,IACvB,MAAM,OAAe,KAAa,KAAyC;AACzE,YAAM,KAAK,EAAE,MAAM,OAAO,KAAK,GAAG;AAClC,UAAI,GAAG,GAAI,QAAO;AAClB,aAAO,EAAE,MAAM,OAAO,KAAK,GAAG;AAAA,IAChC;AAAA,EACF;AACF;AASO,SAAS,iBAAiB,IAAuC;AACtE,MAAI,GAAG,SAAS,YAAY,GAAG,OAAO,WAAW,EAAG,QAAO;AAC3D,QAAM,SAAS,GAAG;AAClB,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO,EAAE,UAAU,IAAI,iBAAiB,OAAO,UAAU,MAAM;AAAA,IAC/D,MAAM,EAAE,KAAK,UAAU;AAAA,IACvB,MAAM,OAAe,KAAgC;AACnD,YAAM,OAAO,MAAM,MAAM,SAAS,MAAM,YAAY,GAAG,IAAI;AAC3D,UAAI,SAAS,QAAW;AACtB,mBAAW,KAAK,QAAQ;AACtB,cAAI,QAAQ,EAAE,MAAM,QAAQ,EAAE,GAAI,QAAO,EAAE,IAAI,MAAM,OAAO,MAAM,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI,EAAE;AAAA,QACnG;AAAA,MACF;AACA,aAAO,EAAE,IAAI,OAAO,UAAU,CAAC,GAAG,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI,EAAE;AAAA,IACnE;AAAA,EACF;AACF;AAcO,SAAS,YACd,OACA,MACA,KACA,MACA,UACoC;AACpC,MAAI,UAAU;AACd,SAAO,UAAU,MAAM,UAAU,CAAC,QAAQ,MAAM,OAAO,SAAS,GAAG,EAAG;AACtE,QAAM,OAAO,EAAE,OAAO,MAAM,KAAK,QAAQ;AACzC,MAAI,IAAI,WAAY,4BAA2B,KAAK,OAAO,MAAM,OAAO;AACxE,QAAM,QAAoB,EAAE,MAAM,cAAc,MAAM,IAAI,aAAa,4BAA4B,MAAM,GAAG,IAAI,MAAM,SAAS;AAC/H,MAAI,SAAS,KAAK,KAAK;AACvB,SAAO,EAAE,OAAO,KAAK,QAAQ;AAC/B;AAOO,SAAS,UACd,UACA,OACA,KACA,KACS;AACT,SAAO,QAAQ,UAAU,OAAO,KAAK,GAAG;AAC1C;AAUO,SAAS,aAAa,KAAmB,OAAyB;AACvE,MAAI,iBAAiB,GAAG,EAAG,cAAa,KAAK,OAAO,KAAK;AAC3D;;;ACzGO,SAAS,YAAY,GAA6C;AACvE,SAAO,EAAE,KAAK,QAAQ,cAAc,EAAE,OAAO;AAC/C;AAGO,SAAS,kBAAkB,KAA2B;AAC3D,MAAI,IAAI,aAAa,WAAY,QAAO;AACxC,SAAO,IAAI,UAAU,SAAY,gBAAgB,eAAe,IAAI,MAAM,KAAK,GAAG,CAAC;AACrF;AAMO,SAAS,eAAe,OAAe,KAAa,KAAmB,KAA4B;AACxG,SAAO,eAAe,OAAO,KAAK,KAAK,IAAI,aAAa,eAAe,IAAI,KAAK;AAClF;AAWO,SAAS,eACd,OAAe,KAAa,KAAmB,SAAkB,OACxD;AACT,QAAM,MAAM,eAAe,OAAO,KAAK,GAAG;AAC1C,MAAI,CAAC,QAAS,QAAO,QAAQ;AAC7B,MAAI,QAAQ,IAAK,QAAO;AACxB,MAAI,UAAU,OAAW,QAAO;AAChC,QAAM,OAAO,yBAAyB,IAAI,QAAQ,KAAK;AACvD,QAAM,OAAO,qBAAqB,IAAI,MAAO;AAC7C,UAAQ,iBAAiB,OAAO,KAAK,MAAM,IAAI,KAAK,IAAI,UAAU;AACpE;AAEO,SAAS,cAAc,KAAa,KAA8B;AACvE,SAAO,EAAE,IAAI,OAAO,UAAU,CAAC,kBAAkB,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI,EAAE;AACzF;AAEA,IAAM,sBAAsB;AAYrB,SAAS,gBAAgB,UAAiD;AAC/E,SAAO,IAAI,UAAU,GAAG,QAAQ,OAAO,mBAAmB,EAAE;AAC9D;AAEA,SAAS,oBAAoB,KAAqC;AAChE,QAAM,OAAmB;AAAA;AAAA;AAAA;AAAA,IAIvB,UAAU,EAAE,MAAM,MAAM;AAAA,IACxB,iBAAiB;AAAA,IACjB,UAAU;AAAA,EACZ;AACA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAe;AAKb,YAAM,gBAAgB,IAAI,QAAQ;AAAA,IACpC;AAAA,EACF;AACF;AAYO,SAAS,WAA6B;AAC3C,SAAO,oBAAoB,EAAE,KAAK,aAAa,UAAU,WAAW,CAAC;AACvE;AAkBO,SAAS,YAAY,SAA2D;AACrF,QAAM,QAAQ,SAAS;AACvB,MAAI,UAAU,QAAW;AACvB,QAAI,CAAC,MAAM,QAAQ,KAAK,KAAK,MAAM,WAAW,GAAG;AAC/C,YAAM,IAAI,UAAU,mFAAmF;AAAA,IACzG;AACA,eAAW,KAAK,OAAO;AACrB,UAAI,OAAO,MAAM,YAAY,EAAE,WAAW,GAAG;AAC3C,cAAM,IAAI,UAAU,sEAAsE,KAAK,UAAU,CAAC,CAAC,GAAG;AAAA,MAChH;AAAA,IACF;AAAA,EACF;AACA,SAAO;AAAA,IACL,UAAU,SACN,EAAE,KAAK,aAAa,UAAU,cAAc,IAC5C,EAAE,KAAK,aAAa,UAAU,eAAe,OAAO,CAAC,GAAG,KAAK,EAAE;AAAA,EACrE;AACF;;;AC/JO,SAAS,YACX,SAC2B;AAS9B,MAAI,YAA4C;AAChD,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,UAAM,IAAI,YAAY,QAAQ,CAAC,CAAE;AACjC,QAAI,MAAM,KAAM;AAChB,QAAI,MAAM,GAAG;AACX,YAAM,IAAI;AAAA,QACR,eAAe,EAAE,QAAQ;AAAA,MAE3B;AAAA,IACF;AACA;AAAC,KAAC,cAAc,MAAM,KAAK,EAAE,QAAQ,QAAQ,OAAO,GAAG,MAAM,IAAI,GAAG,CAAC,IAAI;AAAA,EAC3E;AACA,QAAM,eAAe,cAAc;AAEnC,QAAM,OAAmB;AAAA;AAAA;AAAA,IAGvB,UAAU,iBAAiB,OAAO;AAAA,IAClC,iBAAiB,QAAQ,KAAK,OAAK,EAAE,MAAM,eAAe;AAAA,IAC1D,UAAU;AAAA,EACZ;AAEA,QAAM,MACJ,EAAE,KAAK,YAAY,QAA0C;AAO/D,MAAI;AAKJ,WAAS,cAAc,OAAe,KAAa,KAAkD;AACnG,wBAAoB,QAAQ,IAAI,CAAC,GAAG,MAAM;AAIxC,YAAM,KAAK,QAAQ,MAAM,IAAI,CAAC,EAAE;AAAA,QAC9B,CAAC,KAAK,MAAM,MAAM,KAAK,WAAW,CAAC,CAAC;AAAA,QACpC,EAAE,MAAM,QAAQ;AAAA,MAClB;AACA,aAAO,iBAAiB,EAAE;AAAA,IAC5B,CAAC;AACD,UAAM,SAAgC,IAAI,cAAc,SAAY,CAAC;AACrE,QAAI,MAAM;AACV,UAAM,gBAAgB,IAAI;AAC1B,QAAI;AACF,eAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AAGvC,YAAI,QAAQ,gBAAgB,CAAC,KAAK;AAClC,cAAM,MAAM,cAAc,OAAO,OAAO,UAAU,CAAC;AACnD,YAAI,KAAK;AACP,cAAI,CAAC,eAAe,OAAO,KAAK,KAAK,GAAG,EAAG,QAAO,cAAc,KAAK,GAAG;AACxE,cAAI,WAAW,OAAW,QAAO,KAAK,IAAI;AAC1C;AAAA,QACF;AACA,YAAI,IAAI,UAAU,IAAI,GAAG;AACvB,gBAAM,QAAQ,SAAS,GAAG;AAC1B,gBAAM,OAAO,IAAI,YAAY,UAAU;AACvC,gBAAM,WAAW,IAAI,gBAAgB,UAAU;AAC/C,cAAI;AACJ,cAAI,0BAA0B,GAAG,GAAG;AAClC,kBAAM,OAAO,WAAW,OAAO,KAAK,GAAG;AACvC,iBAAK,OAAO;AACZ,sBAAU,KAAK;AAAA,UACjB,OAAO;AACL,sBAAU,cAAc,OAAO,KAAK,GAAG;AAAA,UACzC;AACA,gBAAM,WAAW,SAAS,GAAG;AAC7B,gBAAM,UAAU,IAAI,YAAY,UAAU;AAC1C,gBAAM,cAAc,IAAI,gBAAgB,UAAU;AAClD,gBAAME,UAAS,QAAQ,CAAC,EAAG,MAAM,OAAO,SAAS,GAAG;AACpD,cAAI,CAACA,QAAO,GAAI,QAAOA;AACvB,cAAIA,QAAO,KAAK,MAAM,QAAS,OAAMA,QAAO,KAAK;AAAA,cAC5C,yBAAwB,KAAK,OAAO,UAAU,MAAM,SAAS,UAAU,WAAW;AACvF,cAAI,WAAW,OAAW,QAAO,KAAKA,QAAO,KAAK;AAClD;AAAA,QACF;AACA,cAAM,SAAS,QAAQ,CAAC,EAAG,MAAM,OAAO,KAAK,GAAG;AAChD,YAAI,CAAC,OAAO,GAAI,QAAO;AACvB,YAAI,WAAW,OAAW,QAAO,KAAK,OAAO,KAAK;AAClD,cAAM,OAAO,KAAK;AAAA,MACpB;AAAA,IACF,UAAE;AACA,UAAI,QAAQ;AAAA,IACd;AACA,WAAO;AAAA,MACL,IAAI;AAAA;AAAA,MAEJ,OAAQ,UAAU;AAAA,MAClB,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI;AAAA,IAC/B;AAAA,EACF;AAKA,WAAS,cAAc,OAAe,KAAa,KAAkD;AACnG,UAAM,SAAgC,IAAI,cAAc,SAAY,CAAC;AACrE,QAAI,MAAM;AAEV,aAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,YAAM,MAAM,UAAW,CAAC;AACxB,UAAI,KAAK;AAIP,YAAI,CAAC,eAAe,OAAO,KAAK,KAAK,GAAG,EAAG,QAAO,cAAc,KAAK,GAAG;AACxE,YAAI,WAAW,OAAW,QAAO,KAAK,IAAI;AAC1C;AAAA,MACF;AACA,UAAI,IAAI,UAAU,IAAI,GAAG;AACvB,YAAI;AACJ,cAAM,QAAQ,SAAS,GAAG;AAC1B,cAAM,OAAO,IAAI,YAAY,UAAU;AACvC,cAAM,WAAW,IAAI,gBAAgB,UAAU;AAC/C,YAAI,0BAA0B,GAAG,GAAG;AAClC,gBAAM,OAAO,WAAW,OAAO,KAAK,GAAG;AACvC,eAAK,OAAO;AACZ,oBAAU,KAAK;AAAA,QACjB,OAAO;AACL,oBAAU,cAAc,OAAO,KAAK,GAAG;AAAA,QACzC;AACA,cAAM,WAAW,SAAS,GAAG;AAC7B,cAAM,UAAU,IAAI,YAAY,UAAU;AAC1C,cAAM,cAAc,IAAI,gBAAgB,UAAU;AAClD,cAAMA,UAAS,QAAQ,CAAC,EAAG,MAAM,OAAO,SAAS,GAAG;AACpD,YAAI,CAACA,QAAO,GAAI,QAAOA;AACvB,YAAIA,QAAO,KAAK,MAAM,QAAS,OAAMA,QAAO,KAAK;AAAA,YAC5C,yBAAwB,KAAK,OAAO,UAAU,MAAM,SAAS,UAAU,WAAW;AACvF,YAAI,WAAW,OAAW,QAAO,KAAKA,QAAO,KAAK;AAClD;AAAA,MACF;AACA,YAAM,SAAS,QAAQ,CAAC,EAAG,MAAM,OAAO,KAAK,GAAG;AAChD,UAAI,CAAC,OAAO,GAAI,QAAO;AACvB,UAAI,WAAW,OAAW,QAAO,KAAK,OAAO,KAAK;AAClD,YAAM,OAAO,KAAK;AAAA,IACpB;AAEA,WAAO;AAAA,MACL,IAAI;AAAA;AAAA,MAEJ,OAAQ,UAAU;AAAA,MAClB,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI;AAAA,IAC/B;AAAA,EACF;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM,OAAe,KAAa,KAAkD;AAKlF,UAAI,IAAI,UAAW,QAAO,cAAc,OAAO,KAAK,GAAG;AACvD,UAAI,aAAc,QAAO,cAAc,OAAO,KAAK,GAAG;AAItD,YAAM,SAAgC,IAAI,cAAc,SAAY,CAAC;AACrE,UAAI,MAAM;AAEV,eAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,YAAI,IAAI,UAAU,IAAI,GAAG;AAIvB,cAAI;AACJ,gBAAM,QAAQ,SAAS,GAAG;AAC1B,gBAAM,OAAO,IAAI,YAAY,UAAU;AACvC,gBAAM,WAAW,IAAI,gBAAgB,UAAU;AAE/C,cAAI,0BAA0B,GAAG,GAAG;AAClC,kBAAM,OAAO,WAAW,OAAO,KAAK,GAAG;AACvC,iBAAK,OAAO;AACZ,sBAAU,KAAK;AAAA,UACjB,OAAO;AACL,sBAAU,cAAc,OAAO,KAAK,GAAG;AAAA,UACzC;AAEA,gBAAM,WAAW,SAAS,GAAG;AAC7B,gBAAM,UAAU,IAAI,YAAY,UAAU;AAC1C,gBAAM,cAAc,IAAI,gBAAgB,UAAU;AAClD,gBAAMA,UAAS,QAAQ,CAAC,EAAG,MAAM,OAAO,SAAS,GAAG;AACpD,cAAI,CAACA,QAAO,GAAI,QAAOA;AACvB,cAAIA,QAAO,KAAK,MAAM,SAAS;AAC7B,kBAAMA,QAAO,KAAK;AAAA,UACpB,OAAO;AACL,oCAAwB,KAAK,OAAO,UAAU,MAAM,SAAS,UAAU,WAAW;AAAA,UACpF;AACA,cAAI,WAAW,OAAW,QAAO,KAAKA,QAAO,KAAK;AAClD;AAAA,QACF;AAEA,cAAM,SAAS,QAAQ,CAAC,EAAG,MAAM,OAAO,KAAK,GAAG;AAChD,YAAI,CAAC,OAAO,GAAI,QAAO;AACvB,YAAI,WAAW,OAAW,QAAO,KAAK,OAAO,KAAK;AAClD,cAAM,OAAO,KAAK;AAAA,MACpB;AAEA,aAAO;AAAA,QACL,IAAI;AAAA;AAAA,QAEJ,OAAQ,UAAU;AAAA,QAClB,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI;AAAA,MAC/B;AAAA,IACF;AAAA,EACF;AACF;;;AC3MO,SAAS,eAAe,GAAkC;AAC/D,SAAO,CAAC,GAAG,IAAI,IAAI,OAAO,GAAG,oBAAI,IAAI,CAAC,CAAC,CAAC;AAC1C;AAEA,SAAS,OAAO,GAAwB,MAA0C;AAChF,QAAMC,kBAAiB,CAAC,MAAqC,OAAO,GAAG,IAAI;AAC3E,QAAM,MAAM,EAAE;AACd,UAAQ,IAAI,KAAK;AAAA,IACf,KAAK;AAAa,aAAO,CAAC,KAAK,UAAU,IAAI,KAAK,CAAC;AAAA,IACnD,KAAK;AAAa,aAAO,CAAC,IAAI,IAAI,MAAM,GAAG;AAAA,IAC3C,KAAK;AAAa,aAAO,IAAI,MAAM,IAAI,OAAK,KAAK,UAAU,CAAC,CAAC;AAAA,IAC7D,KAAK;AAAa,aAAO,CAAC,IAAI,KAAK;AAAA,IACnC,KAAK;AAAa,aAAO,IAAI,QAAQ,QAAQA,eAAc;AAAA,IAC3D,KAAK;AAAa,aAAOA,gBAAe,IAAI,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOpD,KAAK,YAAY;AACf,YAAM,MAAgB,CAAC;AACvB,iBAAW,QAAQ,IAAI,SAAS;AAC9B,YAAI,CAAC,qBAAqB,IAAI,EAAG,KAAI,KAAK,GAAGA,gBAAe,IAAI,CAAC;AACjE,YAAI,CAAC,aAAa,IAAI,EAAG;AAAA,MAC3B;AACA,aAAO;AAAA,IACT;AAAA,IACA,KAAK;AAAa,aAAOA,gBAAe,IAAI,MAAM;AAAA;AAAA;AAAA;AAAA,IAIlD,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAa,aAAOA,gBAAe,IAAI,MAAM;AAAA,IAClD,KAAK;AAAa,aAAO,IAAI;AAAA,IAC7B,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAY,aAAOA,gBAAe,IAAI,MAAM;AAAA;AAAA;AAAA;AAAA,IAIjD,KAAK;AAAY,aAAO,IAAI,aAAa,SAAY,CAAC,UAAU,IAAIA,gBAAe,IAAI,QAAQ;AAAA;AAAA;AAAA,IAG/F,KAAK;AAAa,aAAO,CAAC,IAAI,QAAQ;AAAA,IACtC,KAAK,QAAQ;AAIX,YAAM,OAAQ,EAA6B;AAO3C,UAAI,KAAK,IAAI,CAAC,EAAG,QAAO,OAAO,CAAC,IAAI,IAAI,CAAC;AACzC,WAAK,IAAI,CAAC;AACV,UAAI;AAAE,eAAOA,gBAAe,IAAI,MAAM,CAAC;AAAA,MAAE,QACnC;AAAE,eAAO,OAAO,CAAC,IAAI,IAAI,CAAC;AAAA,MAAE,UAClC;AAAU,aAAK,OAAO,CAAC;AAAA,MAAE;AAAA,IAC3B;AAAA,IACA;AAAkB,aAAO,CAAC;AAAA,EAC5B;AACF;AAmBO,SAAS,OAAU,YAA2BC,QAA4C;AAC/F,QAAM,WAAWA,WAAU,SAAY,CAACA,MAAK,IAAI,eAAe,UAAU;AAC1E,QAAM,OAAmB;AAAA,IACvB,UAAU,WAAW,MAAM;AAAA,IAC3B,iBAAiB,WAAW,MAAM;AAAA,IAClC,UAAU;AAAA,EACZ;AACA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM,EAAE,KAAK,UAAU,QAAQ,YAAmC,OAAAA,QAAO,SAAS;AAAA,IAClF,MAAM,OAAe,KAAa,KAAgD;AAChF,YAAM,SAAS,WAAW,MAAM,OAAO,KAAK,GAAG;AAC/C,UAAI,OAAO,GAAI,QAAO;AACtB,YAAM,OAAO,EAAE,OAAO,KAAK,KAAK,IAAI;AACpC,YAAM,QAAoB,EAAE,MAAM,cAAc,MAAM,IAAI,aAAa,4BAA4B,MAAM,GAAG,IAAI,MAAM,SAAS;AAC/H,UAAI,SAAS,KAAK,KAAK;AAQvB,UAAI,IAAI,UAAW,cAAa,KAAK,KAAK;AAC1C,aAAO,EAAE,IAAI,MAAM,OAAO,OAAO,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI,EAAE;AAAA,IAClE;AAAA,EACF;AACF;;;AC5IO,SAAS,UACX,MACuB;AAE1B,QAAM,UAAU,KAAK,IAAI,OAAM,UAAU,IAAI,EAAE,aAAa,CAAE;AAC9D,QAAM,QAAU,KAAK,IAAI,OAAM,UAAU,IAAI,EAAE,OAAS,IAAK;AAE7D,QAAM,WAAW,MAAM,KAAK,OAAK,MAAM,IAAI;AAc3C,QAAM,WAAW,YAAY,QAAQ,IAAI,OAAK,EAAE,MAAM,QAAQ,CAAC,KAC1D,QAAQ,MAAM,OAAK,CAAC,aAAa,CAAC,CAAC;AAExC,MAAI,WAAqB,EAAE,MAAM,QAAQ;AACzC,aAAW,KAAK,QAAS,YAAW,MAAM,UAAU,EAAE,MAAM,QAAQ;AAEpE,QAAM,OAAmB;AAAA,IACvB,UAAU;AAAA,IACV,iBAAiB,QAAQ,KAAK,OAAK,EAAE,MAAM,eAAe;AAAA,IAC1D,UAAU;AAAA,IACV;AAAA,EACF;AAKA,QAAM,WAAY,YAAY,WAAY,OAAO,eAAe,OAAO;AAIvE,QAAM,UAAW,CAAC,YAAY,CAAC,aAAa,UAAU,QAAQ,gBAAgB,UAAU,QAAQ,kBAC5F,eAAe,OAAO,IACtB,QAAQ,IAAI,MAAM,IAAI;AAG1B,MAAI,eAA2C;AAC/C,MAAI,gBAA8C;AAClD,QAAM,gBAAgB,WAAW,mBAAmB,OAAO,IAAI;AAE/D,MAAI,UAAU,QAAQ,kBAAkB;AACtC,mBAAe,oBAAI,IAAI;AACvB,aAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,UAAI,MAAM,SAAS,WAAY;AAC/B,YAAM,SAAS,oBAAoB,QAAQ,CAAC,CAAE;AAC9C,UAAI,WAAW,KAAM,cAAa,IAAI,QAAQ,CAAC;AAAA,IACjD;AAAA,EACF,WAAW,UAAU,QAAQ,wBAAwB;AACnD,oBAAgB,SAAS,cAAc,IAAI,OAAK,QAAQ,CAAC,CAAE;AAAA,EAC7D;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,MACJ,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU,YAAY,EAAE,KAAK,aAAa;AAAA,MAC1C;AAAA,IACF;AAAA,IACA,MAAM,OAAe,KAAa,KAA8C;AAC9E,YAAM,WAAqB,CAAC;AAc5B,UAAI,UAAU;AACZ,cAAM,OAAO,MAAM,MAAM,SAAS,MAAM,YAAY,GAAG,IAAK;AAC5D,YAAI,MAAM,QAAQ,KAAK,OAAO,MAAM,cAAe,IAAI,IAAK;AAC5D,YAAI,MAAM,KAAK,QAAQ,GAAG;AACxB,mBAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,gBAAI,WAAW,MAAM,QAAQ,CAAC,EAAG,MAAM,QAAQ,GAAG;AAAE,oBAAM;AAAG;AAAA,YAAM;AAAA,UACrE;AAAA,QACF;AACA,YAAI,OAAO,GAAG;AACZ,gBAAM,OAAO,MAAM,GAAG;AACtB,cAAI,QAAQ,CAAC,KAAK,IAAI,KAAK,GAAG;AAI5B,mBAAO,EAAE,IAAI,OAAO,UAAU,eAAe,QAAQ,GAAG,CAAE,GAAG,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI,EAAE;AAAA,UAC9F;AACA,gBAAM,SAAS,QAAQ,GAAG,EAAG,MAAM,OAAO,KAAK,GAAG;AAClD,cAAI,OAAO,GAAI,QAAO;AACtB,mBAAS,KAAK,GAAG,OAAO,QAAQ;AAChC,cAAI,OAAO,UAAW,QAAO,EAAE,IAAI,OAAO,UAAU,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI,GAAG,WAAW,KAAK;AACpG,iBAAO,EAAE,IAAI,OAAO,UAAU,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI,EAAE;AAAA,QAC/D;AACA,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,UAAU,QAAQ,QAAQ,OAAK;AAC7B,kBAAM,IAAI,EAAE,MAAM,OAAO,KAAK,GAAG;AACjC,mBAAO,EAAE,KAAK,CAAC,IAAI,EAAE;AAAA,UACvB,CAAC;AAAA,UACD,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI;AAAA,QAC/B;AAAA,MACF;AAIA,UAAI,UAAU,QAAQ,kBAAkB;AACtC,cAAM,cAAc,QAAQ,SAAS,UAAU,EAAG,MAAM,OAAO,KAAK,GAAG;AACvE,YAAI,CAAC,YAAY,GAAI,QAAO;AAE5B,cAAM,MAAM,YAAY,KAAK;AAC7B,cAAM,SAAS,aAAc,IAAI,MAAM,MAAM,KAAK,GAAG,CAAC;AACtD,YAAI,WAAW,QAAW;AACxB,gBAAM,SAAS,oBAAoB,QAAQ,MAAM,CAAE;AACnD,gBAAM,QAAQ,gBAAgB,QAAQ,MAAM,GAAI,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;AAC3E,iBAAO,EAAE,IAAI,MAAM,OAA8B,MAAM,EAAE,OAAO,KAAK,IAAI,EAAE;AAAA,QAC7E;AACA,eAAO;AAAA,MACT;AAGA,UAAI,UAAU,QAAQ,wBAAwB;AAC5C,mBAAW,KAAK,eAAgB;AAC9B,gBAAM,IAAI,EAAE,MAAM,OAAO,KAAK,GAAG;AACjC,cAAI,EAAE,GAAI,QAAO;AACjB,mBAAS,KAAK,GAAG,EAAE,QAAQ;AAAA,QAC7B;AACA,eAAO,EAAE,IAAI,OAAO,UAAU,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI,EAAE;AAAA,MAC/D;AAGA,eAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,YAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAG,IAAI,KAAK,EAAG;AAEvC,cAAM,OAAO,eAAe,GAAG;AAC/B,cAAM,SAAS,QAAQ,CAAC,EAAG,MAAM,OAAO,KAAK,GAAG;AAChD,YAAI,CAAC,OAAO,IAAI;AACd,yBAAe,KAAK,IAAI;AACxB,mBAAS,KAAK,GAAG,OAAO,QAAQ;AAChC,cAAI,OAAO,UAAW,QAAO,EAAE,IAAI,OAAO,UAAU,MAAM,OAAO,MAAM,WAAW,KAAK;AACvF;AAAA,QACF;AACA,cAAM,SAAS,QAAQ,CAAC;AACxB,YAAI,UAAU,aAAa,OAAO,OAAO,KAAK,KAAK,MAAM,GAAG;AAC1D,yBAAe,KAAK,IAAI;AACxB;AAAA,QACF;AACA,eAAO;AAAA,MACT;AACA,aAAO,EAAE,IAAI,OAAO,UAAU,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI,EAAE;AAAA,IAC/D;AAAA,EACF;AACF;AAMA,SAAS,eAAe,SAAgD;AAGtE,QAAM,eAAyB,CAAC;AAChC,QAAM,iBAA2B,CAAC;AAClC,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,QAAI,gBAAgB,QAAQ,CAAC,CAAE,MAAM,KAAM,cAAa,KAAK,CAAC;AAAA,aACrD,oBAAoB,QAAQ,CAAC,CAAE,MAAM,KAAM,gBAAe,KAAK,CAAC;AAAA,EAC3E;AAEA,MACE,aAAa,WAAW,KACxB,eAAe,WAAW,QAAQ,SAAS,KAC3C,eAAe,SAAS,GACxB;AACA,UAAM,aAAa,aAAa,CAAC;AACjC,UAAM,WAAW,gBAAgB,QAAQ,UAAU,CAAE;AACrD,UAAM,QAAQ,MAAM,SAAS,MAAM,QAAQ,SAAS,EAAE;AACtD,UAAM,KAAK,IAAI,OAAO,SAAS,QAAQ,KAAK;AAC5C,UAAM,cAAc,eAAe,MAAM,OAAK;AAC5C,YAAM,SAAS,oBAAoB,QAAQ,CAAC,CAAE;AAC9C,SAAG,YAAY;AACf,YAAM,IAAI,GAAG,KAAK,MAAM;AACxB,aAAO,MAAM,QAAQ,EAAE,CAAC,MAAM;AAAA,IAChC,CAAC;AACD,QAAI,YAAa,QAAO,EAAE,KAAK,kBAAkB,WAAW;AAAA,EAC9D;AAGA,MAAI,QAAQ,WAAW,eAAe,QAAQ;AAC5C,UAAM,gBAAgB,CAAC,GAAG,cAAc,EAAE;AAAA,MAAK,CAAC,GAAG,MACjD,oBAAoB,QAAQ,CAAC,CAAE,EAAG,SAAS,oBAAoB,QAAQ,CAAC,CAAE,EAAG;AAAA,IAC/E;AACA,WAAO,EAAE,KAAK,wBAAwB,cAAc;AAAA,EACtD;AAKA,QAAM,SAAS,mBAAmB,OAAO;AACzC,MAAI,WAAW,KAAM,QAAO;AAE5B,SAAO,EAAE,KAAK,aAAa;AAC7B;AASA,SAAS,mBAAmB,MAA0C;AACpE,QAAM,IAAI,KAAK;AACf,MAAI,EAAE,QAAQ,aAAa,CAAC,EAAE,gBAAiB,QAAO,KAAK,EAAE,KAAK;AAUlE,MAAI,EAAE,QAAQ,QAAS,QAAO,KAAK,KAAK,UAAU,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AA4BtE,SAAO;AACT;AAWA,SAAS,mBAAmB,SAAuD;AACjF,MAAI,QAAQ,SAAS,EAAG,QAAO;AAC/B,MAAI,MAAqB;AACzB,MAAI,SAAqC;AACzC,QAAM,UAAoB,CAAC;AAC3B,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,UAAM,QAAQ,iBAAiB,QAAQ,CAAC,CAAE;AAC1C,QAAI,UAAU,KAAM,QAAO;AAC3B,UAAM,IAAI,mBAAmB,KAAK;AAClC,QAAI,MAAM,KAAM,QAAO;AACvB,QAAI,QAAQ,MAAM;AAAE,YAAM;AAAG,eAAS;AAAA,IAAM,WACnC,MAAM,IAAK,QAAO;AAC3B,YAAQ,KAAK,CAAC;AAAA,EAChB;AACA,MAAI,WAAW,QAAQ,QAAQ,SAAS,EAAG,QAAO;AAClD,SAAO,EAAE,KAAK,gBAAgB,QAAQ,QAAQ;AAChD;AAYO,SAAS,iBAAiB,KAAsD;AACrF,MAAI,IAAI,IAAI;AACZ,aAAS;AACP,QAAI,EAAE,QAAQ,UAAU,EAAE,QAAQ,aAAa,EAAE,QAAQ,eAAe,EAAE,QAAQ,SAAS;AACzF,UAAK,EAAsC,OAAO;AAClD;AAAA,IACF;AACA;AAAA,EACF;AACA,MAAI,EAAE,QAAQ,cAAc,EAAE,QAAQ,SAAS,EAAG,QAAO;AACzD,SAAO,EAAE,QAAQ,CAAC;AACpB;AAMA,SAAS,eAAe,SAA2D;AACjF,SAAO,QAAQ,IAAI,CAAC,GAAG,MAAM;AAC3B,UAAM,SAAS,oBAAoB,CAAC;AACpC,QAAI,WAAW,KAAM,QAAO;AAE5B,UAAM,SAAyB,CAAC;AAChC,aAAS,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AAC3C,YAAM,QAAQ,QAAQ,CAAC;AACvB,YAAM,WAAW,oBAAoB,KAAK;AAC1C,UAAI,aAAa,QAAQ,SAAS,WAAW,MAAM,KAAK,SAAS,SAAS,OAAO,QAAQ;AACvF,eAAO,KAAK,EAAE,MAAM,cAAc,OAAO,SAAS,MAAM,OAAO,MAAM,EAAE,CAAC;AACxE;AAAA,MACF;AACA,YAAM,WAAW,gBAAgB,KAAK;AACtC,UAAI,aAAa,MAAM;AACrB,cAAM,UAAU,qBAAqB,QAAQ,SAAS,QAAQ,SAAS,KAAK;AAC5E,YAAI,YAAY,KAAM,QAAO,KAAK,EAAE,MAAM,YAAY,KAAK,QAAQ,CAAC;AAAA,MACtE;AAAA,IACF;AACA,WAAO,OAAO,SAAS,IAAI,SAAS;AAAA,EACtC,CAAC;AACH;AAEA,SAAS,aAAa,OAAe,KAAa,QAAiC;AACjF,aAAW,SAAS,QAAQ;AAC1B,QAAI,MAAM,SAAS,YAAY;AAC7B,YAAM,OAAO,MAAM,MAAM,SAAU,MAAM,YAAY,GAAG,KAAK,KAAM;AACnE,UAAI,WAAW,MAAM,MAAM,GAAG,EAAG,QAAO;AAAA,IAC1C,OAAO;AACL,UAAI,MAAM,WAAW,MAAM,OAAO,GAAG,EAAG,QAAO;AAAA,IACjD;AAAA,EACF;AACA,SAAO;AACT;AAOO,SAAS,oBAAoB,GAAuC;AACzE,QAAM,MAAM,EAAE;AACd,MAAI,IAAI,QAAQ,aAAa,CAAC,IAAI,gBAAiB,QAAO,IAAI;AAC9D,MAAI,IAAI,QAAQ,YAAa,QAAO,oBAAoB,IAAI,MAAM;AAClE,SAAO;AACT;AAGO,SAAS,gBAAgB,GAAkE;AAChG,QAAM,MAAM,EAAE;AACd,MAAI,IAAI,QAAQ,QAAS,QAAO,EAAE,QAAQ,IAAI,QAAQ,OAAO,IAAI,MAAM;AACvE,MAAI,IAAI,QAAQ,YAAa,QAAO,gBAAgB,IAAI,MAAM;AAC9D,MAAI,IAAI,QAAQ,QAAS,QAAO,gBAAgB,IAAI,MAAM;AAC1D,SAAO;AACT;AAMA,SAAS,gBAAgB,GAAwB,OAAgB,MAA+C;AAC9G,QAAM,MAAM,EAAE;AACd,MAAI,IAAI,QAAQ,aAAa;AAC3B,UAAM,QAAQ,gBAAgB,IAAI,QAAQ,OAAO,IAAI;AACrD,WAAO,IAAI,GAAG,OAAO,IAAI;AAAA,EAC3B;AACA,SAAO;AACT;AAMA,SAAS,qBAAqB,KAAa,QAAgB,OAAgC;AACzF,QAAM,KAAK,IAAI,OAAO,QAAQ,MAAM,MAAM,QAAQ,SAAS,EAAE,CAAC;AAC9D,KAAG,YAAY;AACf,QAAM,OAAO,GAAG,KAAK,GAAG;AACxB,MAAI,CAAC,QAAQ,KAAK,CAAC,MAAM,IAAK,QAAO;AAErC,QAAM,YAAsB,CAAC;AAC7B,WAAS,OAAO,GAAG,OAAO,KAAK,QAAQ;AACrC,OAAG,YAAY;AACf,UAAM,IAAI,GAAG,KAAK,MAAM,OAAO,aAAa,IAAI,CAAC;AACjD,QAAI,KAAK,EAAE,CAAC,EAAE,SAAS,IAAI,OAAQ,WAAU,KAAK,IAAI;AAAA,EACxD;AACA,MAAI,UAAU,WAAW,EAAG,QAAO;AACnC,SAAO,gBAAgB,SAAS;AAClC;AAEA,SAAS,gBAAgB,OAA2B;AAClD,QAAM,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC;AAC1B,QAAM,SAAsB,CAAC;AAC7B,MAAI,KAAK,MAAM,CAAC,GAAI,KAAK,MAAM,CAAC;AAChC,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,QAAI,MAAM,CAAC,MAAM,KAAK,GAAG;AAAE,WAAK,MAAM,CAAC;AAAA,IAAG,OACrC;AAAE,aAAO,KAAK,EAAE,IAAI,GAAG,CAAC;AAAG,WAAK,KAAK,MAAM,CAAC;AAAA,IAAG;AAAA,EACtD;AACA,SAAO,KAAK,EAAE,IAAI,GAAG,CAAC;AACtB,SAAO,EAAE,MAAM,UAAU,OAAO;AAClC;AAEA,SAAS,WAAW,MAAc,IAAuB;AACvD,MAAI,GAAG,SAAS,MAAO,QAAO;AAC9B,MAAI,GAAG,SAAS,QAAS,QAAO;AAChC,aAAW,KAAK,GAAG,OAAQ,KAAI,QAAQ,EAAE,MAAM,QAAQ,EAAE,GAAI,QAAO;AACpE,SAAO;AACT;AAEA,SAAS,YAAY,MAA2B;AAC9C,MAAI,KAAK,KAAK,OAAK,EAAE,SAAS,KAAK,EAAG,QAAO;AAC7C,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ;AAC/B,aAAS,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ;AACnC,UAAI,WAAW,KAAK,CAAC,GAAI,KAAK,CAAC,CAAE,EAAG,QAAO;AAC/C,SAAO;AACT;AAIA,SAAS,mBAAmB,SAA0C;AACpE,QAAM,QAAQ,MAAc,GAAG,EAAE,KAAK,EAAE;AACxC,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,UAAM,KAAK,QAAQ,CAAC,EAAG,MAAM;AAC7B,QAAI,GAAG,SAAS,SAAU;AAC1B,eAAW,EAAE,IAAI,GAAG,KAAK,GAAG,QAAQ;AAClC,eAAS,OAAO,KAAK,IAAI,GAAG,EAAE,GAAG,QAAQ,KAAK,IAAI,KAAK,EAAE,GAAG,QAAQ;AAClE,cAAM,IAAI,IAAI;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;;;AC5ZO,SAAS,iBAAiBC,SAA6B,OAAiC,oBAAI,IAAI,GAAY;AACjH,MAAI,KAAK,IAAIA,OAAM,EAAG,QAAO;AAC7B,OAAK,IAAIA,OAAM;AACf,QAAM,MAAMA,QAAO;AACnB,UAAQ,IAAI,KAAK;AAAA,IACf,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACH,aAAO,IAAI,QAAQ,KAAK,WAAS,iBAAiB,OAAO,IAAI,CAAC;AAAA,IAChE,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO,iBAAiB,IAAI,QAAQ,IAAI,KAAK,iBAAiB,IAAI,WAAW,IAAI;AAAA,IACnF,KAAK;AACH,aAAO,iBAAiB,IAAI,QAAQ,IAAI,MAAM,IAAI,eAAe,iBAAiB,IAAI,cAAc,IAAI,IAAI;AAAA,IAC9G,KAAK;AACH,aAAO,iBAAiB,IAAI,UAAU,IAAI,KAAK,IAAI,KAAK,KAAK,WAAS,iBAAiB,OAAO,IAAI,CAAC;AAAA,IACrG,KAAK;AACH,aAAO,iBAAiB,IAAI,QAAQ,IAAI,KAAK,iBAAiB,IAAI,UAAU,IAAI;AAAA,IAClF,KAAK;AACH,UAAI;AAAE,eAAO,iBAAiB,IAAI,MAAM,GAAG,IAAI;AAAA,MAAE,QAAQ;AAAE,eAAO;AAAA,MAAM;AAAA,IAC1E,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,iBAAiB,IAAI,QAAQ,IAAI;AAAA,IAC1C;AACE,aAAO;AAAA,EACX;AACF;AAEO,SAAS,iBAAiB,QAAoF;AACnH,SAAO,OAAO,eAAe,QAAQ,iBAAiB,OAAO,MAAM;AACrE;AAEO,SAAS,aAAa,KAAqB;AAChD,MAAI,MAAM;AACV,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,UAAM,IAAI,IAAI,WAAW,CAAC;AAC1B,WAAO,OAAO,aAAa,KAAK,MAAM,KAAK,KAAK,IAAI,KAAK,CAAC;AAAA,EAC5D;AACA,SAAO;AACT;AAEO,SAAS,uBAAuB,OAAe,SAAuC;AAC3F,QAAM,YAAY,QAAQ,kBAAkB,aAAa,KAAK,IAAI;AAClE,QAAM,WAAW,QAAQ,kBAAkB,aAAa,QAAQ,KAAK,IAAI,QAAQ;AACjF,UAAQ,QAAQ,MAAM;AAAA,IACpB,KAAK;AACH,aAAO,UAAU,WAAW,QAAQ;AAAA,IACtC,KAAK;AACH,aAAO,UAAU,SAAS,QAAQ;AAAA,IACpC,KAAK,WAAW;AACd,YAAM,QAAQ,QAAQ,mBAAmB,CAAC,QAAQ,OAAO,SAAS,GAAG,IACjE,GAAG,QAAQ,SAAS,EAAE,MACtB,QAAQ,SAAS;AACrB,aAAO,IAAI,OAAO,QAAQ,OAAO,KAAK,EAAE,KAAK,KAAK;AAAA,IACpD;AAAA,EACF;AACF;AAEA,SAAS,gBAAgB,OAAgD;AACvE,MAAI,OAAO,UAAU,YAAY,UAAU,KAAM,QAAO;AACxD,QAAM,OAAQ,MAA6B;AAC3C,SAAO,SAAS,gBAAgB,SAAS,cAAc,SAAS;AAClE;AAEA,SAAS,aAAa,MAAiC,OAAsC;AAC3F,MAAI,OAAO,UAAU,SAAU,OAAM,IAAI,UAAU,aAAa,IAAI,2BAA2B;AAC/F,MAAI,MAAM,WAAW,EAAG,OAAM,IAAI,WAAW,aAAa,IAAI,+BAA+B;AAC7F,SAAO,EAAE,MAAM,MAAM;AACvB;AAEO,SAAS,WAAW,QAAuC;AAChE,SAAO,aAAa,cAAc,MAAM;AAC1C;AAEO,SAAS,SAAS,QAAuC;AAC9D,SAAO,aAAa,YAAY,MAAM;AACxC;AAEO,SAAS,QAAQ,SAAwC;AAC9D,MAAI,EAAE,mBAAmB,QAAS,OAAM,IAAI,UAAU,uCAAuC;AAC7F,MAAI,QAAQ,MAAM,SAAS,GAAG,KAAK,QAAQ,MAAM,SAAS,GAAG,GAAG;AAC9D,UAAM,IAAI,UAAU,kEAAkE;AAAA,EACxF;AACA,SAAO,EAAE,MAAM,WAAW,OAAO,QAAQ,QAAQ,OAAO,QAAQ,MAAM;AACxE;AAYO,SAAS,KACd,KACAA,SACA,OAA4B,CAAC,GACa;AAC1C,QAAM,aAAa,iBAAiBA,OAA6B;AACjE,MAAI,gBAAgB,GAAG,GAAG;AACxB,WAAO,EAAE,MAAM,eAAe,SAAS,KAAK,QAAAA,SAAQ,iBAAiB,KAAK,mBAAmB,OAAO,WAAW;AAAA,EACjH;AACA,QAAM,OAAO,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG;AACjD,MAAI,KAAK,WAAW,EAAG,OAAM,IAAI,WAAW,4CAA4C;AACxF,aAAW,QAAQ,MAAM;AACvB,QAAI,OAAO,SAAS,SAAU,OAAM,IAAI,UAAU,uCAAuC;AAAA,EAC3F;AACA,SAAO,EAAE,MAAM,QAAQ,MAAM,QAAAA,SAAQ,iBAAiB,KAAK,mBAAmB,OAAO,WAAW;AAClG;AAMO,SAAS,UAAaC,SAA6C;AACxE,SAAO,EAAE,MAAM,aAAa,QAAAA,SAAQ,YAAY,iBAAiBA,OAA6B,EAAE;AAClG;AAoBO,SAAS,OAAmB,UAAyC;AAC1E,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA;AAAA;AAAA,MAGL,UAAU,EAAE,MAAM,MAAM;AAAA,MACxB,iBAAiB,UAAU,MAAM,mBAAmB;AAAA,MACpD,UAAU;AAAA,IACZ;AAAA,IACA,MAAM,aAAa,SACf,EAAE,KAAK,SAAS,IAChB,EAAE,KAAK,UAAU,SAA0C;AAAA,IAC/D,MAAM,QAAgB,KAAa,KAAmC;AACpE,YAAM,OAAO,IAAI;AACjB,UAAI,SAAS,UAAa,QAAQ,KAAK,KAAK,OAAO;AACjD,YAAI,aAAa,OAAW,QAAO,SAAS,MAAM,QAAQ,KAAK,GAAG;AAClE,eAAO,EAAE,IAAI,OAAO,UAAU,CAAC,UAAU,GAAG,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI,EAAE;AAAA,MAC7E;AACA,UAAI,iBAAiB,GAAG,GAAG;AACzB,oBAAY,KAAK,EAAE,MAAM,QAAQ,OAAO,KAAK,OAAO,MAAM,KAAK,KAAK,CAAC;AAAA,MACvE;AACA,aAAO,EAAE,IAAI,MAAM,OAAO,KAAK,OAAY,MAAM,KAAK,KAAK;AAAA,IAC7D;AAAA,EACF;AACF;AAEO,SAAS,SACd,aACG,MAC4B;AAC/B,MAAI,iBAAiB,QAA+B,GAAG;AACrD,UAAM,IAAI,MAAM,+DAA+D;AAAA,EACjF;AACA,MAAI;AACJ,MAAI,qBAAqB;AACzB,QAAM,WAAkC,CAAC;AACzC,QAAM,QAAwB,CAAC;AAC/B,QAAM,OAAyE,CAAC;AAEhF,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,UAAM,MAAM,KAAK,CAAC;AAClB,QAAI,IAAI,SAAS,aAAa;AAC5B,UAAI,aAAa,OAAW,OAAM,IAAI,MAAM,0DAA0D;AACtG,UAAI,MAAM,KAAK,SAAS,EAAG,OAAM,IAAI,MAAM,uDAAuD;AAClG,iBAAW,IAAI;AACf,2BAAqB,IAAI,eAAe;AACxC;AAAA,IACF;AACA,QAAI,IAAI,SAAS,eAAe;AAC9B,YAAM,UAAU,IAAI;AACpB,eAAS,KAAK;AAAA,QACZ,MAAM,QAAQ;AAAA,QACd,OAAO,QAAQ;AAAA,QACf,GAAI,QAAQ,SAAS,YAAY,EAAE,OAAO,QAAQ,MAAM,IAAI,CAAC;AAAA,QAC7D,QAAQ,IAAI;AAAA,QACZ,iBAAiB,IAAI;AAAA,QACrB,GAAI,IAAI,eAAe,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;AAAA,MACxD,CAAC;AACD;AAAA,IACF;AACA,eAAW,OAAO,IAAI,MAAM;AAC1B,YAAM,SAAS,aAAa,GAAG;AAC/B,iBAAW,SAAS,MAAM;AACxB,cAAM,WAAW,IAAI,mBAAmB,MAAM,kBAC1C,WAAW,MAAM,SACjB,QAAQ,MAAM;AAClB,YAAI,SAAU,OAAM,IAAI,MAAM,oCAAoC,KAAK,UAAU,GAAG,CAAC,EAAE;AAAA,MACzF;AACA,WAAK,KAAK,EAAE,KAAK,KAAK,QAAQ,iBAAiB,IAAI,gBAAgB,CAAC;AAAA,IACtE;AACA,UAAM,KAAK;AAAA,MACT,MAAM,IAAI;AAAA,MACV,QAAQ,IAAI;AAAA,MACZ,iBAAiB,IAAI;AAAA,MACrB,GAAI,IAAI,eAAe,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;AAAA,IACxD,CAAC;AAAA,EACH;AAEA,QAAM,OAAmB;AAAA,IACvB,UAAU,SAAS,MAAM;AAAA,IACzB,iBAAiB,SAAS,MAAM,mBAC9B,MAAM,KAAK,WAAS,MAAM,OAAO,MAAM,eAAe,KACtD,SAAS,KAAK,WAAS,MAAM,OAAO,MAAM,eAAe,MACxD,UAAU,MAAM,mBAAmB;AAAA,IACtC,UAAU;AAAA,EACZ;AAEA,QAAM,QAAQ,oBAAI,IAA0B;AAC5C,QAAM,cAAc,oBAAI,IAA0B;AAClD,aAAW,SAAS,OAAO;AACzB,eAAW,OAAO,MAAM,MAAM;AAC5B,UAAI,MAAM,gBAAiB,aAAY,IAAI,aAAa,GAAG,GAAG,KAAK;AAAA,UAC9D,OAAM,IAAI,KAAK,KAAK;AAAA,IAC3B;AAAA,EACF;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,MACJ,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA,GAAI,SAAS,WAAW,IAAI,CAAC,IAAI,EAAE,SAAS;AAAA,MAC5C,GAAI,aAAa,SAAY,CAAC,IAAI,EAAE,WAAW,UAAU,GAAI,qBAAqB,EAAE,qBAAqB,KAAK,IAAI,CAAC,EAAG;AAAA,IACxH;AAAA,IACA,MAAM,OAAe,KAAa,KAAmD;AACnF,UAAI,iBAAiB,QAA+B,GAAG;AACrD,cAAM,IAAI,MAAM,+DAA+D;AAAA,MACjF;AACA,YAAM,eAAe,eAAe,GAAG;AACvC,YAAM,WAAW,SAAS,MAAM,OAAO,KAAK,GAAG;AAC/C,UAAI,CAAC,SAAS,GAAI,QAAO;AAEzB,YAAM,SAAS,MAAM,IAAI,SAAS,KAAK,MACpC,YAAY,SAAS,IAAI,SAAY,YAAY,IAAI,aAAa,SAAS,KAAK,CAAC,MAClF,SAAS,KAAK,aAAW,uBAAuB,SAAS,OAAO,OAAO,CAAC,MACvE,aAAa,SAAY,SAAY,EAAE,MAAM,CAAC,GAAG,QAAQ,UAAU,iBAAiB,OAAO,YAAY,mBAAmB;AAC7H,UAAI,WAAW,QAAW;AACxB,cAAM,WAAW,MAAM,QAAQ,WAAS,MAAM,KAAK,IAAI,SAAO,KAAK,UAAU,GAAG,CAAC,CAAC;AAClF,eAAO,EAAE,IAAI,OAAO,UAAU,MAAM,EAAE,OAAO,SAAS,KAAK,KAAK,KAAK,SAAS,KAAK,IAAI,EAAE;AAAA,MAC3F;AAEA,YAAM,cAAc,IAAI;AACxB,YAAM,aAAa,iBAAiB,MAAM;AAC1C,UAAI,OAAO,eAAe,GAAG;AAC7B,UAAI,YAAY;AACd,uBAAe,KAAK,YAAY;AAChC,eAAO,eAAe,GAAG;AACzB,YAAI,UAAU,EAAE,OAAO,SAAS,OAAO,MAAM,SAAS,KAAK;AAAA,MAC7D;AACA,UAAI;AACJ,UAAI;AACF,iBAAS,OAAO,OAAO,MAAM,OAAO,aAAa,MAAM,SAAS,KAAK,KAAK,GAAG;AAAA,MAC/E,UAAE;AACA,YAAI,WAAY,KAAI,UAAU;AAAA,MAChC;AACA,UAAI,CAAC,OAAO,IAAI;AACd,uBAAe,KAAK,IAAI;AACxB,eAAO,EAAE,GAAG,QAAQ,WAAW,KAAK;AAAA,MACtC;AAEA,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,OAAO,CAAC,SAAS,OAAO,OAAO,KAAqB;AAAA,QACpD,MAAM,EAAE,OAAO,KAAK,KAAK,OAAO,KAAK,IAAI;AAAA,MAC3C;AAAA,IACF;AAAA,EACF;AACF;;;AC3VO,SAAS,QAAWC,SAAsC;AAM/D,QAAM,YAAYA,QAAO,MAAM,SAAS,SAAS,SAAS,CAAC,aAAaA,OAAM;AAC9E,MAAI;AACJ,SAAO;AAAA,IACL,MAAM;AAAA,IAAW,OAAOA,QAAO;AAAA,IAAO,MAAM,EAAE,KAAK,WAAW,QAAAA,QAAO;AAAA,IACrE,MAAM,OAAe,KAAa,KAAmC;AACnE,UAAI,aAAa,IAAI,WAAW,UAAa,CAAC,IAAI,aAAa,CAAC,eAAeA,SAAQ,OAAO,GAAG,GAAG;AAClG,YAAI,iBAAiB,QAAW;AAC9B,gBAAM,IAAI,eAAeA,OAAM;AAC/B,yBAAe,EAAE,SAAS,IAAI,IAAI,CAACA,QAAO,IAAI;AAAA,QAChD;AACA,eAAO,EAAE,IAAI,OAAO,UAAU,cAAc,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI,EAAE;AAAA,MAC7E;AACA,YAAM,OAAO,YAAY,GAAG;AAC5B,YAAM,MAAM,IAAI,YAAY;AAC5B,YAAM,UAAU,IAAI,gBAAgB;AACpC,YAAM,SAASA,QAAO,MAAM,OAAO,KAAK,GAAG;AAC3C,UAAI,OAAO,GAAI,QAAO;AACtB,yBAAmB,KAAK,IAAI;AAC5B,UAAI,QAAQ,UAAa,IAAI,cAAc,IAAI,WAAW,WAAW,IAAK,KAAI,WAAW,SAAS;AAClG,UAAI,YAAY,UAAa,IAAI,kBAAkB,IAAI,eAAe,WAAW,QAAS,KAAI,eAAe,SAAS;AACtH,UAAI,OAAO,UAAW,QAAO;AAC7B,aAAO,EAAE,IAAI,OAAO,UAAU,OAAO,UAAU,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI,EAAE;AAAA,IAChF;AAAA,EACF;AACF;;;ACdA,SAAS,QACP,YACA,OACA,KACA,KACA,WACA,WACgF;AAChF,QAAM,OAAO,eAAe,GAAG;AAC/B,MAAI,MAAM;AACV,MAAI,IAAI,QAAQ;AACd,QAAI,0BAA0B,GAAG,GAAG;AAClC,YAAM,OAAO,WAAW,OAAO,KAAK,GAAG;AACvC,WAAK,OAAO;AACZ,YAAM,KAAK;AAAA,IACb,OAAO;AACL,YAAM,cAAc,OAAO,KAAK,GAAG;AAAA,IACrC;AAAA,EACF;AAMA,MAAI,OAAO,MAAM,UAAU,CAAC,WAAW;AACrC,mBAAe,KAAK,IAAI;AACxB,WAAO;AAAA,EACT;AAQA,MAAI,aAAa,IAAI,WAAW,UAAa,CAAC,IAAI,aAAa,CAAC,eAAe,YAAY,OAAO,GAAG,GAAG;AACtG,mBAAe,KAAK,IAAI;AACxB,WAAO;AAAA,EACT;AACA,QAAM,SAAS,WAAW,MAAM,OAAO,KAAK,GAAG;AAC/C,MAAI,CAAC,OAAO,IAAI;AACd,mBAAe,KAAK,IAAI;AACxB,QAAI,OAAO,UAAW,QAAO,EAAE,MAAM,QAAQ,SAAS,IAAI;AAK1D,WAAO,EAAE,MAAM,QAAQ,SAAS,IAAI;AAAA,EACtC;AAOA,MAAI,OAAO,KAAK,QAAQ,OAAO,CAAC,WAAW;AACzC,mBAAe,KAAK,IAAI;AACxB,WAAO;AAAA,EACT;AACA,SAAO,EAAE,OAAO,OAAO,OAAO,KAAK,OAAO,KAAK,IAAI;AACrD;AAkBA,SAAS,cAAc,MAAc,MAAoE;AACvG,QAAM,MAAM,KAAK,OAAO;AACxB,QAAM,MAAM,KAAK,OAAO;AACxB,QAAM,MAAM,CAAC,QAAuB;AAAE,UAAM,IAAI,WAAW,aAAa,IAAI,IAAI,GAAG,EAAE;AAAA,EAAE;AACvF,MAAI,CAAC,OAAO,UAAU,GAAG,KAAK,MAAM,EAAG,KAAI,2CAA2C,OAAO,KAAK,GAAG,CAAC,GAAG;AACzG,MAAI,QAAQ,aAAa,CAAC,OAAO,UAAU,GAAG,KAAK,MAAM,GAAI,KAAI,uCAAuC,OAAO,KAAK,GAAG,CAAC,GAAG;AAC3H,MAAI,MAAM,IAAK,KAAI,QAAQ,GAAG,uBAAuB,GAAG,6CAAwC;AAChG,SAAO,EAAE,KAAK,IAAI;AACpB;AAWO,SAAS,KAAQ,YAA2B,OAAsB,CAAC,GAAoB;AAC5F,QAAM,EAAE,KAAK,IAAI,IAAI,cAAc,UAAU,IAAI;AAMjD,MAAI,OAAO,EAAG,QAAO,QAAQ,YAAY,KAAK,GAAG;AACjD,QAAM,OAAmB;AAAA,IACvB,UAAU,WAAW,MAAM;AAAA,IAC3B,iBAAiB,WAAW,MAAM;AAAA,IAClC,UAAU;AAAA,EACZ;AACA,QAAM,MACJ,EAAE,KAAK,QAAQ,QAAQ,YAAmC,KAAK,GAAG,GAAI,QAAQ,WAAW,CAAC,IAAI,EAAE,IAAI,EAAG;AACzG,MAAI;AAEJ,QAAM,YAAY,WAAW,MAAM,SAAS,SAAS,SAAS,CAAC,aAAa,UAAU;AAEtF,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM,OAAe,KAAa,KAAqC;AAGrE,YAAM,SAA0B,IAAI,cAAc,SAAY,CAAC;AAC/D,UAAI,MAAM;AACV,UAAI,QAAQ;AACZ,aAAO,MAAM,MAAM,QAAQ;AACzB,YAAI,SAAS,IAAK;AAClB,cAAM,OAAO,QAAQ,YAAY,OAAO,KAAK,KAAK,WAAW,KAAK;AAClE,YAAI,SAAS,OAAQ;AACrB,YAAI,UAAU,MAAM;AAClB,cAAI,CAAC,KAAK,KAAK,MAAM,KAAK,KAAK,UAAW,QAAO,KAAK;AAKtD,gBAAM,OAAO,IAAI,YAAY,IAAI,QAAQ;AACzC,cAAI,SAAS,OAAW;AAKxB,cAAI,UAAU,MAAM,OAAO,KAAK,SAAS,GAAG,EAAG;AAC/C,uBAAa,eAAe,UAAU;AACtC,gBAAM,EAAE,OAAO,IAAI,IAAI,YAAY,OAAO,KAAK,SAAS,KAAK,MAAM,QAAQ;AAC3E,cAAI,WAAW,OAAW,QAAO,KAAK,KAAqB;AAC3D,uBAAa,KAAK,KAAK;AACvB;AACA,gBAAM;AACN;AAAA,QACF;AACA,YAAI,WAAW,OAAW,QAAO,KAAK,KAAK,KAAK;AAChD;AACA,cAAM,KAAK;AAAA,MACb;AAEA,aAAO,EAAE,IAAI,MAAM,OAAQ,UAAU,QAAmB,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI,EAAE;AAAA,IACzF;AAAA,EACF;AACF;AAMO,SAAS,UAAa,YAA2B,OAAsB,CAAC,GAAoB;AACjG,SAAO,KAAK,YAAY,EAAE,GAAG,MAAM,KAAK,KAAK,OAAO,EAAE,CAAC;AACzD;AAOA,SAAS,QAAW,YAA2B,KAAa,KAA8B;AACxF,QAAM,OAAmB;AAAA,IACvB,UAAU,WAAW,MAAM;AAAA,IAC3B,iBAAiB,WAAW,MAAM;AAAA,IAClC,UAAU;AAAA,EACZ;AACA,QAAM,MACJ,EAAE,KAAK,aAAa,QAAQ,YAAmC,KAAK,GAAI,QAAQ,WAAW,CAAC,IAAI,EAAE,IAAI,EAAG;AAC3G,MAAI;AAEJ,QAAM,YAAY,WAAW,MAAM,SAAS,SAAS,SAAS,CAAC,aAAa,UAAU;AAEtF,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM,OAAe,KAAa,KAAqC;AAGrE,YAAM,QAAQ,WAAW,MAAM,OAAO,KAAK,GAAG;AAC9C,UAAI,CAAC,MAAM,GAAI,QAAO;AAEtB,YAAM,SAA0B,IAAI,cAAc,SAAY,CAAC,MAAM,KAAK;AAC1E,UAAI,MAAM,MAAM,KAAK;AACrB,UAAI,QAAQ;AAMZ,aAAO,QAAQ,KAAK;AAClB,cAAM,OAAO,QAAQ,YAAY,OAAO,KAAK,KAAK,WAAW,IAAI;AACjE,YAAI,SAAS,UAAU,UAAU,MAAM;AACrC,cAAI,SAAS,UAAU,CAAC,KAAK,KAAK,MAAM,KAAK,KAAK,UAAW,QAAO,KAAK;AAMzE,uBAAa,eAAe,UAAU;AACtC,iBAAO,EAAE,IAAI,OAAO,UAAU,SAAS,SAAS,IAAI,WAAW,CAAC,WAAW,IAAI,GAAG,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI,EAAE;AAAA,QACnH;AACA,YAAI,WAAW,OAAW,QAAO,KAAK,KAAK,KAAK;AAChD,cAAM,KAAK;AACX;AAAA,MACF;AACA,aAAO,MAAM,MAAM,QAAQ;AACzB,YAAI,SAAS,IAAK;AAClB,cAAM,OAAO,QAAQ,YAAY,OAAO,KAAK,KAAK,WAAW,KAAK;AAClE,YAAI,SAAS,OAAQ;AACrB,YAAI,UAAU,MAAM;AAClB,cAAI,CAAC,KAAK,KAAK,MAAM,KAAK,KAAK,UAAW,QAAO,KAAK;AAEtD,gBAAM,OAAO,IAAI,YAAY,IAAI,QAAQ;AACzC,cAAI,SAAS,OAAW;AACxB,cAAI,UAAU,MAAM,OAAO,KAAK,SAAS,GAAG,EAAG;AAC/C,uBAAa,eAAe,UAAU;AACtC,gBAAM,EAAE,OAAO,IAAI,IAAI,YAAY,OAAO,KAAK,SAAS,KAAK,MAAM,QAAQ;AAC3E,cAAI,WAAW,OAAW,QAAO,KAAK,KAAqB;AAC3D,uBAAa,KAAK,KAAK;AACvB;AACA,gBAAM;AACN;AAAA,QACF;AACA,YAAI,WAAW,OAAW,QAAO,KAAK,KAAK,KAAK;AAChD;AACA,cAAM,KAAK;AAAA,MACb;AAEA,aAAO,EAAE,IAAI,MAAM,OAAQ,UAAU,QAAmB,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI,EAAE;AAAA,IACzF;AAAA,EACF;AACF;AAEO,SAAS,SAAY,YAAiD;AAC3E,QAAM,OAAmB;AAAA,IACvB,UAAU,WAAW,MAAM;AAAA,IAC3B,iBAAiB,WAAW,MAAM;AAAA,IAClC,UAAU;AAAA,EACZ;AACA,QAAM,oBAAoB,CAAC,aAAa,UAAU;AAElD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM,EAAE,KAAK,YAAY,QAAQ,WAAkC;AAAA,IACnE,MAAM,OAAe,KAAa,KAA0C;AAC1E,UAAI,qBAAqB,IAAI,WAAW,UAAa,CAAC,eAAe,YAAY,OAAO,GAAG,GAAG;AAC5F,eAAO,EAAE,IAAI,MAAM,OAAO,MAAM,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI,EAAE;AAAA,MACjE;AACA,YAAM,OAAO,eAAe,GAAG;AAC/B,YAAM,SAAS,WAAW,MAAM,OAAO,KAAK,GAAG;AAC/C,UAAI,OAAO,GAAI,QAAO;AAEtB,qBAAe,KAAK,IAAI;AACxB,UAAI,OAAO,UAAW,QAAO;AAC7B,aAAO,EAAE,IAAI,MAAM,OAAO,MAAM,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI,EAAE;AAAA,IACjE;AAAA,EACF;AACF;AA6DO,SAAS,cAAiB,WAA4C;AAC3E,SAAO,EAAE,gBAAgB,UAAU;AACrC;AAEA,SAAS,gBAAmB,WAAoF;AAC9G,SAAO,oBAAoB,YACvB,EAAE,KAAK,UAAU,gBAAgB,MAAM,KAAK,IAC5C,EAAE,KAAK,WAAW,MAAM,MAAM;AACpC;AAaO,SAAS,MACd,YACA,cACA,OAAqB,CAAC,GACL;AACjB,QAAM,EAAE,KAAK,WAAW,MAAM,eAAe,IAAI,gBAAgB,YAAY;AAC7E,QAAM,EAAE,KAAK,IAAI,IAAI,cAAc,WAAW,IAAI;AAClD,QAAM,WAAW,KAAK,YAAY;AAClC,QAAM,OAAmB;AAAA,IACvB,UAAU,WAAW,MAAM;AAAA,IAC3B,iBAAiB,WAAW,MAAM,mBAAmB,UAAU,MAAM;AAAA,IACrE,UAAU;AAAA,EACZ;AACA,MAAI;AAkBJ,QAAMC,UAAS,CAAC,OAAiC;AAC/C,iBAAa,eAAe,UAAU;AACtC,WAAO,EAAE,IAAI,OAAO,UAAU,SAAS,SAAS,IAAI,WAAW,CAAC,WAAW,IAAI,GAAG,MAAM,EAAE,OAAO,IAAI,KAAK,GAAG,EAAE;AAAA,EACjH;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,MACJ,KAAK;AAAA,MAAS,QAAQ;AAAA,MAAmC;AAAA,MAA6C;AAAA,MACtG,GAAI,QAAQ,WAAW,CAAC,IAAI,EAAE,IAAI;AAAA,MAClC,GAAI,aAAa,WAAW,CAAC,IAAI,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,MAI5C,GAAI,iBAAiB,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAAA,IACnD;AAAA,IACA,MAAM,OAAe,KAAa,KAAqC;AACrE,YAAM,QAAQ,WAAW,MAAM,OAAO,KAAK,GAAG;AAC9C,YAAM,SAAc,CAAC;AACrB,UAAI;AACJ,UAAI,MAAM,IAAI;AACZ,eAAO,KAAK,MAAM,KAAK;AACvB,cAAM,MAAM,KAAK;AAAA,MACnB,OAAO;AACL,YAAI,MAAM,UAAW,QAAO;AAM5B,cAAM,OAAO,IAAI,YAAY,IAAI,QAAQ;AACzC,YAAI,SAAS,UAAa,UAAU,MAAM,OAAO,KAAK,GAAG,GAAG;AAK1D,cAAI,OAAO,EAAG,QAAOA,QAAO,GAAG;AAC/B,iBAAO,EAAE,IAAI,MAAM,OAAO,CAAC,GAAG,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI,EAAE;AAAA,QAC/D;AACA,qBAAa,eAAe,UAAU;AACtC,cAAM,MAAM,YAAY,OAAO,KAAK,KAAK,WAAW,WAAW,IAAI,GAAG,QAAQ;AAC9E,eAAO,KAAK,IAAI,KAAqB;AACrC,qBAAa,KAAK,IAAI,KAAK;AAC3B,cAAM,IAAI;AAAA,MACZ;AAcA,aAAO,MAAM,MAAM,UAAU,OAAO,SAAS,KAAK;AAChD,YAAI,OAAO,UAAU,IAAK;AAI1B,cAAM,WAAW,eAAe,GAAG;AACnC,YAAI,SAAS;AACb,YAAI,IAAI,QAAQ;AACd,cAAI,0BAA0B,GAAG,GAAG;AAClC,kBAAM,OAAO,WAAW,OAAO,KAAK,GAAG;AACvC,iBAAK,OAAO;AACZ,qBAAS,KAAK;AAAA,UAChB,OAAO;AACL,qBAAS,cAAc,OAAO,KAAK,GAAG;AAAA,UACxC;AAAA,QACF;AACA,cAAM,MAAM,UAAU,MAAM,OAAO,QAAQ,GAAG;AAC9C,YAAI,CAAC,IAAI,IAAI;AACX,yBAAe,KAAK,QAAQ;AAC5B,cAAI,IAAI,UAAW,QAAO;AAC1B;AAAA,QACF;AAMA,YAAI,CAAC,eAAgB,qBAAoB,KAAK,SAAS,MAAM;AAG7D,cAAM,UAAU,aAAa,WAAW,SAAY,eAAe,GAAG;AACtE,YAAI,UAAU,IAAI,KAAK;AACvB,YAAI,IAAI,QAAQ;AACd,cAAI,0BAA0B,GAAG,GAAG;AAClC,kBAAM,OAAO,WAAW,OAAO,IAAI,KAAK,KAAK,GAAG;AAChD,iBAAK,OAAO;AACZ,sBAAU,KAAK;AAAA,UACjB,OAAO;AACL,sBAAU,cAAc,OAAO,IAAI,KAAK,KAAK,GAAG;AAAA,UAClD;AAAA,QACF;AACA,cAAM,OAAO,WAAW,MAAM,OAAO,SAAS,GAAG;AACjD,YAAI,CAAC,KAAK,IAAI;AACZ,cAAI,KAAK,UAAW,QAAO;AAmB3B,gBAAM,OAAO,IAAI,YAAY,IAAI,QAAQ;AACzC,cAAI,SAAS,UAAa,CAAC,UAAU,MAAM,OAAO,SAAS,GAAG,GAAG;AAC/D,yBAAa,eAAe,UAAU;AACtC,kBAAM,MAAM,YAAY,OAAO,SAAS,KAAK,WAAW,WAAW,IAAI,GAAG,QAAQ;AAClF,mBAAO,KAAK,IAAI,KAAqB;AACrC,yBAAa,KAAK,IAAI,KAAK;AAC3B,kBAAM,IAAI;AACV;AAAA,UACF;AACA,cAAI,YAAY,QAAW;AAGzB,2BAAe,KAAK,OAAO;AAC3B,kBAAM,IAAI,KAAK;AACf;AAAA,UACF;AACA,yBAAe,KAAK,QAAQ;AAC5B;AAAA,QACF;AACA,eAAO,KAAK,KAAK,KAAK;AACtB,cAAM,KAAK,KAAK;AAAA,MAClB;AAEA,UAAI,OAAO,SAAS,IAAK,QAAOA,QAAO,GAAG;AAC1C,aAAO,EAAE,IAAI,MAAM,OAAO,QAAQ,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI,EAAE;AAAA,IACnE;AAAA,EACF;AACF;;;ACliBO,SAAS,IAAI,YAAmD;AACrE,QAAM,OAAmB;AAAA,IACvB,UAAU,IAAI;AAAA;AAAA,IACd,iBAAiB;AAAA,IACjB,UAAU;AAAA,EACZ;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM,EAAE,KAAK,OAAO,QAAQ,WAAW;AAAA,IACvC,MAAM,OAAe,KAAa,KAAsC;AAoBtE,YAAM,OAAO,kBAAkB,GAAG;AAClC,YAAM,SAAS,WAAW,MAAM,OAAO,KAAK,GAAG;AAC/C,wBAAkB,KAAK,IAAI;AAC3B,UAAI,OAAO,IAAI;AACb,eAAO,EAAE,IAAI,OAAO,UAAU,CAAC,OAAO,WAAW,IAAI,GAAG,GAAG,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI,EAAE;AAAA,MAC5F;AACA,aAAO,EAAE,IAAI,MAAM,OAAO,MAAM,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI,EAAE;AAAA,IACjE;AAAA,EACF;AACF;;;AC1BO,SAAS,KAAK,YAAmD;AACtE,QAAM,OAAmB;AAAA;AAAA,IAEvB,UAAU,aAAa,UAAU,IAAI,IAAI,IAAI,WAAW,MAAM;AAAA,IAC9D,iBAAiB;AAAA,IACjB,UAAU;AAAA,EACZ;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM,EAAE,KAAK,QAAQ,QAAQ,WAAW;AAAA,IACxC,MAAM,OAAe,KAAa,KAAsC;AAetE,YAAM,OAAO,kBAAkB,GAAG;AAClC,YAAM,SAAS,WAAW,MAAM,OAAO,KAAK,GAAG;AAC/C,wBAAkB,KAAK,IAAI;AAC3B,UAAI,OAAO,GAAI,QAAO,EAAE,IAAI,MAAM,OAAO,MAAM,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI,EAAE;AAC9E,aAAO,EAAE,IAAI,OAAO,UAAU,CAAC,QAAQ,WAAW,IAAI,GAAG,GAAG,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI,EAAE;AAAA,IAC7F;AAAA,EACF;AACF;;;ACLO,SAAS,kBAAkB,GAAwB;AACxD,SAAO,wBAAwB,EAAE,IAAI,KAAK,EAAE,KAAK,KAAK,EAAE,OAAO,WAAM,EAAE,UAAU,eAAe,EAAE,SAAS;AAC7G;AAQA,IAAM,aAAa;AAGZ,SAAS,mBAAmB,MAAwC;AACzE,QAAM,SAAS,oBAAI,IAAoC;AACvD,aAAW,KAAK,MAAM;AACpB,UAAM,SAAS,OAAO,IAAI,EAAE,IAAI;AAChC,QAAI,OAAQ,QAAO,KAAK,CAAC;AAAA,QACpB,QAAO,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AAAA,EAC7B;AACA,QAAM,MAAgB,CAAC;AACvB,aAAW,CAAC,MAAM,KAAK,KAAK,QAAQ;AAClC,eAAW,KAAK,MAAM,MAAM,GAAG,UAAU,EAAG,KAAI,KAAK,kBAAkB,CAAC,CAAC;AACzE,QAAI,MAAM,SAAS,YAAY;AAC7B,UAAI;AAAA,QACF,wBAAwB,IAAI,MAAM,MAAM,SAAS,UAAU,6BACrD,MAAM,MAAM;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAgBA,IAAM,SAA0C,CAAC;AAG1C,SAAS,0BAAgC;AAC9C,SAAO,KAAK,oBAAI,IAAI,CAAC;AACvB;AASO,SAAS,0BAAkC;AAChD,SAAO,OAAO;AAChB;AAaO,SAAS,yBAAyB,OAA8B;AACrE,QAAM,QAAuB,CAAC;AAC9B,SAAO,OAAO,SAAS,OAAO;AAC5B,UAAM,OAAO,OAAO,IAAI;AACxB,UAAM,QAAQ,GAAG,KAAK,OAAO,CAAC;AAAA,EAChC;AACA,SAAO;AACT;AAOO,SAAS,wBAAwB,UAA+C;AACrF,MAAI,aAAa,OAAW,QAAO;AACnC,QAAM,MAAM,OAAO,YAAY,cAAe,QAAQ,KAAK,uBAAwD;AACnH,MAAI,QAAQ,SAAS,QAAQ,UAAU,QAAQ,QAAS,QAAO;AAC/D,SAAO;AACT;AAuBA,SAAS,eAAe,GAAwB;AAC9C,SAAO,KAAK,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC;AACpD;AAeO,SAAS,kBAAkB,GAAsB;AACtD,QAAM,QAAQ,wBAAwB;AACtC,MAAI,UAAU,MAAO;AACrB,QAAM,MAAM,eAAe,CAAC;AAC5B,QAAM,OAAO,OAAO,OAAO,SAAS,CAAC;AACrC,MAAI,MAAM;AACR,QAAI,CAAC,KAAK,IAAI,GAAG,EAAG,MAAK,IAAI,KAAK,CAAC;AACnC;AAAA,EACF;AACA,MAAI,WAAW,IAAI,GAAG,EAAG;AACzB,aAAW,IAAI,GAAG;AAClB,MAAI,UAAU,QAAS,OAAM,IAAI,MAAM;AAAA,EAAwC,kBAAkB,CAAC,CAAC,EAAE;AACrG,UAAQ,KAAK,kBAAkB,CAAC,CAAC;AACnC;AAGA,IAAM,aAAa,oBAAI,IAAY;AAwB5B,SAAS,+BAA0D;AACxE,MAAI,wBAAwB,MAAM,SAAS,OAAO,SAAS,EAAG,QAAO,MAAM;AAAA,EAAC;AAC5E,QAAM,QAAQ,wBAAwB;AACtC,0BAAwB;AACxB,SAAO,CAAC,WAAoB;AAC1B,UAAM,QAAQ,yBAAyB,KAAK;AAC5C,QAAI,CAAC,UAAU,MAAM,WAAW,EAAG;AAGnC,UAAM,QAAQ,MAAM,OAAO,OAAK;AAC9B,YAAM,IAAI,eAAe,CAAC;AAC1B,UAAI,WAAW,IAAI,CAAC,EAAG,QAAO;AAC9B,iBAAW,IAAI,CAAC;AAChB,aAAO;AAAA,IACT,CAAC;AACD,QAAI,MAAM,WAAW,EAAG;AACxB,UAAM,QAAQ,mBAAmB,KAAK;AACtC,QAAI,wBAAwB,MAAM,SAAS;AACzC,YAAM,IAAI,MAAM,aAAa,MAAM,MAAM;AAAA,EAAkC,MAAM,KAAK,IAAI,CAAC,EAAE;AAAA,IAC/F;AACA,eAAW,KAAK,MAAO,SAAQ,KAAK,CAAC;AAAA,EACvC;AACF;;;AClOO,SAAS,cAAc,OAAyB;AACrD,SAAQ,OAAqD,uBAAuB;AACtF;AAeA,IAAM,wBAAwB;AAG9B,IAAM,qBAAqB;AAS3B,IAAM,iBAAiB;AAGvB,IAAM,gBAAgB;AAMf,SAAS,oBAAoB,KAA4B;AAC9D,QAAM,IAAI,IAAI,KAAK;AAInB,MAAI,eAAe,KAAK,CAAC,EAAG,QAAO;AAQnC,MAAI,gBAAgB,KAAK,CAAC,EAAG,QAAO;AAGpC,MAAI,sBAAsB,KAAK,CAAC,EAAG,QAAO;AAE1C,QAAM,QAAQ,cAAc,CAAC;AAC7B,MAAI,UAAU,KAAM,QAAO;AAC3B,MAAI,MAAM,KAAK,MAAM,GAAI,QAAO;AAEhC,QAAM,QAAQ,cAAc,KAAK;AACjC,MAAI,UAAU,KAAM,QAAO;AAI3B,aAAW,QAAQ,OAAO;AACxB,QAAI,CAAC,mBAAmB,KAAK,KAAK,CAAC,EAAG,QAAO;AAAA,EAC/C;AAEA,SAAO,MAAM;AACf;AAYA,SAAS,cAAc,GAA0B;AAC/C,QAAM,OAAO,mBAAmB,KAAK,CAAC;AACtC,MAAI,CAAC,KAAM,QAAO;AAClB,QAAM,QAAQ,KAAK,CAAC,EAAE;AACtB,QAAM,MAAM,cAAc,GAAG,KAAK;AAClC,MAAI,QAAQ,KAAM,QAAO;AAGzB,MAAI,CAAC,EAAE,WAAW,UAAU,KAAK,CAAC,SAAS,KAAK,EAAE,MAAM,MAAM,CAAC,CAAC,EAAG,QAAO;AAC1E,SAAO,EAAE,MAAM,OAAO,GAAG;AAC3B;AAGA,SAAS,cAAc,GAAW,OAA8B;AAC9D,MAAI,QAAQ;AACZ,WAAS,IAAI,OAAO,IAAI,EAAE,QAAQ,KAAK;AACrC,UAAM,IAAI,EAAE,CAAC;AACb,QAAI,MAAM,OAAO,MAAM,OAAO,MAAM,KAAK;AACvC,YAAM,QAAQ,WAAW,GAAG,CAAC;AAC7B,UAAI,UAAU,KAAM,QAAO;AAC3B,UAAI;AACJ;AAAA,IACF;AACA,QAAI,MAAM,OAAO,MAAM,OAAO,MAAM,IAAK;AAAA,aAChC,MAAM,OAAO,MAAM,KAAK;AAAE,UAAI,EAAE,QAAQ,EAAG,QAAO;AAAA,IAAK,WACvD,MAAM,KAAK;AAAE,UAAI,UAAU,EAAG,QAAO;AAAG;AAAA,IAAQ;AAAA,EAC3D;AACA,SAAO;AACT;AAGA,SAAS,WAAW,GAAW,MAA6B;AAC1D,QAAM,QAAQ,EAAE,IAAI;AACpB,WAAS,IAAI,OAAO,GAAG,IAAI,EAAE,QAAQ,KAAK;AACxC,QAAI,EAAE,CAAC,MAAM,MAAM;AAAE;AAAK;AAAA,IAAS;AACnC,QAAI,EAAE,CAAC,MAAM,MAAO,QAAO;AAAA,EAC7B;AACA,SAAO;AACT;AAWA,SAAS,cAAc,OAAgC;AACrD,QAAM,QAAkB,CAAC;AACzB,MAAI,QAAQ;AACZ,MAAI,QAAQ;AACZ,MAAI,OAAO;AACX,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,UAAM,IAAI,MAAM,CAAC;AACjB,QAAI,MAAM,OAAO,MAAM,IAAI,CAAC,MAAM,KAAK;AAAE;AAAK;AAAA,IAAS;AACvD,QAAI,MAAM,OAAO,MAAM,OAAO,MAAM,KAAK;AACvC,YAAM,QAAQ,WAAW,OAAO,CAAC;AACjC,UAAI,UAAU,KAAM,QAAO;AAC3B,UAAI;AACJ;AAAA,IACF;AACA,QAAI,MAAM,OAAO,MAAM,OAAO,MAAM,IAAK;AAAA,aAChC,MAAM,OAAO,MAAM,OAAO,MAAM,KAAK;AAAE,UAAI,EAAE,QAAQ,EAAG,QAAO;AAAA,IAAK,WACpE,MAAM,IAAK;AAAA,aACX,MAAM,KAAK;AAAE,UAAI,EAAE,QAAQ,EAAG,QAAO;AAAA,IAAK,WAC1C,MAAM,OAAO,UAAU,KAAK,UAAU,GAAG;AAAE,YAAM,KAAK,MAAM,MAAM,MAAM,CAAC,CAAC;AAAG,aAAO,IAAI;AAAA,IAAE;AAAA,EACrG;AACA,MAAI,UAAU,KAAK,UAAU,EAAG,QAAO;AACvC,QAAM,KAAK,MAAM,MAAM,IAAI,CAAC;AAC5B,SAAO;AACT;AAWA,SAAS,mBAAmB,MAAuB;AACjD,QAAM,OAAO,cAAc,KAAK,IAAI;AACpC,MAAI,CAAC,KAAM,QAAO;AAClB,QAAM,OAAO,KAAK,MAAM,KAAK,CAAC,EAAE,MAAM;AACtC,MAAI,SAAS,GAAI,QAAO;AACxB,MAAI,KAAK,CAAC,MAAM,IAAK,QAAO;AAC5B,SAAO,CAAC,iBAAiB,KAAK,MAAM,CAAC,CAAC;AACxC;AAGA,SAAS,iBAAiB,YAA6B;AACrD,WAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC1C,QAAI,WAAW,CAAC,MAAM,IAAK;AAC3B,QAAI,WAAW,IAAI,CAAC,MAAM,OAAO,WAAW,IAAI,CAAC,MAAM,KAAK;AAAE;AAAK;AAAA,IAAS;AAC5E,UAAM,OAAO,WAAW,IAAI,CAAC;AAC7B,QAAI,SAAS,OAAO,SAAS,OAAO,SAAS,OAAO,SAAS,IAAK;AAClE,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAaO,SAAS,iBAAiB,KAAsB;AACrD,SAAO,IAAI,eAAe,IAAI,YAAY,IAAI,MAAO,SAAS;AAChE;AAUA,IAAM,mBAA2C;AAAA,EAC/C,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb,cAAc;AAAA,EACd,kBAAkB;AAAA,EAClB,qBAAqB;AAAA,EACrB,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,kBAAkB;AAAA,EAElB,oBAAoB;AAEtB;AAEA,SAAS,oBAAoB,KAAc,KAAqB;AAC9D,QAAM,WAAW,IAAI;AACrB,MAAI,aAAa,UAAa,iBAAiB,QAAQ,EAAG,QAAO,iBAAiB,QAAQ;AAC1F,QAAM,IAAI,IAAI,KAAK;AACnB,QAAM,SAAS,EAAE,MAAM,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC;AAC5C,MAAI,OAAO,SAAS,KAAK,EAAG,QAAO,iBAAiB,gBAAgB;AACpE,MAAI,gBAAgB,KAAK,CAAC,EAAG,QAAO,iBAAiB,WAAW;AAChE,MAAI,gDAAgD,KAAK,CAAC,GAAG;AAC3D,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAiBO,SAAS,qBAAqB,KAA6B;AAChE,MAAI,IAAI,eAAe,OAAW,QAAO,IAAI;AAC7C,QAAM,MAAM,iBAAiB,GAAG;AAChC,QAAM,QAAQ,oBAAoB,GAAG;AACrC,MAAI,UAAU,KAAM,QAAO;AAC3B,QAAM,UAAU,oBAAoB,IAAI,YAAY,gBAAgB,KAAK,EAAE,MAAM,IAAI,EAAE,CAAC,EAAG,MAAM,GAAG,EAAE,CAAC;AACvG,oBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,UAAU;AAAA,IACV,OAAO,SAAS,IAAI,QAAQ,YAAY;AAAA,IACxC;AAAA,IACA,YAAY,+CAA0C,oBAAoB,KAAK,GAAG,CAAC;AAAA,IAEnF,WAAW;AAAA,EAGb,CAAC;AACD,SAAO;AACT;AAmBO,SAAS,iBAAiB,KAAuB;AACtD,MAAI,CAAC,IAAI,MAAO,QAAO;AACvB,QAAM,QAAQ,qBAAqB,GAAG;AACtC,MAAI,UAAU,KAAM,QAAO;AAC3B,SAAO,SAAS;AAClB;AAGO,SAAS,gBAAgB,KAAuB;AACrD,MAAI,CAAC,IAAI,MAAO,QAAO;AACvB,QAAM,QAAQ,qBAAqB,GAAG;AACtC,MAAI,UAAU,KAAM,QAAO;AAC3B,SAAO,SAAS;AAClB;;;ACpUO,SAAS,iBAAiB,KAAuB;AACtD,MAAI,CAAC,IAAI,MAAO,QAAO;AACvB,QAAM,QAAQ,qBAAqB,GAAG;AACtC,MAAI,UAAU,KAAM,QAAO;AAC3B,SAAO,SAAS;AAClB;AAEO,SAAS,mBAAmB,GAAwB,OAAiC,oBAAI,IAAI,GAAY;AAC9G,MAAI,KAAK,IAAI,CAAC,EAAG,QAAO;AACxB,OAAK,IAAI,CAAC;AACV,QAAM,IAAI,EAAE;AACZ,UAAQ,EAAE,KAAK;AAAA,IACb,KAAK;AAAS,aAAO;AAAA,IACrB,KAAK;AAAQ,aAAO;AAAA,IACpB,KAAK,QAAQ;AACX,UAAI;AAAE,eAAO,mBAAmB,EAAE,MAAM,GAAG,IAAI;AAAA,MAAE,QAAQ;AAAE,eAAO;AAAA,MAAM;AAAA,IAC1E;AAAA,IACA,KAAK;AAAA,IACL,KAAK;AAAU,aAAO,EAAE,QAAQ,KAAK,OAAK,mBAAmB,GAAG,IAAI,CAAC;AAAA,IACrE,KAAK;AAAY,aAAO,mBAAmB,EAAE,UAAU,IAAI,KAAK,EAAE,MAAM,KAAK,OAAK,mBAAmB,EAAE,QAAQ,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,KAAK,WAAS,mBAAmB,MAAM,QAAQ,IAAI,CAAC,IAAI,WAAW,EAAE,YAAY,mBAAmB,EAAE,WAAW,IAAI,IAAI;AAAA,IAC3Q,KAAK;AAAS,aAAO,mBAAmB,EAAE,QAAQ,IAAI,KAAK,mBAAmB,EAAE,WAAW,IAAI;AAAA,IAC/F,KAAK;AAAW,aAAO,mBAAmB,EAAE,QAAQ,IAAI,MAAM,EAAE,eAAe,mBAAmB,EAAE,cAAc,IAAI,IAAI;AAAA,IAC1H,KAAK;AAAU,aAAO,mBAAmB,EAAE,UAAU,IAAI,KAAK,EAAE,KAAK,KAAK,OAAK,mBAAmB,GAAG,IAAI,CAAC;AAAA,IAC1G,KAAK;AAAW,aAAO,mBAAmB,EAAE,QAAQ,IAAI,KAAK,mBAAmB,EAAE,UAAU,IAAI;AAAA,IAChG,KAAK;AAAU,aAAO,EAAE,WAAW,mBAAmB,EAAE,UAAU,IAAI,IAAI;AAAA,IAC1E,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,mBAAmB,EAAE,QAAQ,IAAI;AAAA,IAC1C;AACE,aAAO;AAAA,EACX;AACF;AAoIO,SAAS,cAAc,UAAmI;AAC/J,MAAI,CAAC,UAAU,OAAQ,QAAO;AAC9B,QAAM,MAAgB,CAAC;AACvB,aAAW,OAAO,UAAU;AAC1B,UAAM,QAAQ,EAAE,OAAO,IAAI,OAAO,MAAM,IAAI,KAAK;AACjD,UAAM,UAAU,IAAI,IAAI,IAAI;AAC5B,QAAI,YAAY,OAAW,KAAI,IAAI,IAAI,IAAI;AAAA,aAClC,MAAM,QAAQ,OAAO,EAAG,SAAQ,KAAK,KAAK;AAAA,QAC9C,KAAI,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK;AAAA,EACtC;AACA,SAAO;AACT;;;AC1FO,SAAS,YAAY,OAAyB;AACnD,SAAO,UAAU,QAAQ,OAAO,UAAU,YAAa,MAA4B,SAAS,SACvF,MAA6B,QAC9B;AACN;AAEA,SAAS,WAAW,OAAyB;AAC3C,SAAO,OAAO,UAAU,YACnB,UAAU,SACR,MAA4B,SAAS,UACpC,MAA4B,SAAS,UACrC,MAA4B,SAAS;AAC/C;AAQO,SAAS,sBAA6B;AAC3C,QAAM,IAAI,MAAM,8FAA8F;AAChH;AAEA,SAAS,oBAAoB,OAA+C;AAC1E,MAAI,UAAU,OAAW,QAAO;AAChC,MAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,KAAK,QAAQ,GAAG;AACtD,UAAM,IAAI,MAAM,mGAAmG;AAAA,EACrH;AACA,SAAO;AACT;AAEA,SAAS,iBAAiB,SAAiD;AACzE,MAAI,YAAY,OAAW,QAAO;AAClC,MAAI,CAAC,OAAO,UAAU,OAAO,KAAK,UAAU,GAAG;AAC7C,UAAM,IAAI,MAAM,qDAAqD;AAAA,EACvE;AACA,SAAO;AACT;AAEO,SAAS,aAAaC,WAAkC,SAAiB,MAAuB;AACrG,MAAI,EAAE,WAAWA,YAAW;AAC1B,UAAM,IAAI,MAAM,QAAQ,KAAK,UAAU,IAAI,CAAC,mBAAmB,OAAO,mBAAmB;AAAA,EAC3F;AACA,SAAO,YAAYA,UAAS,OAAO,CAAC;AACtC;AAsBO,SAAS,KACd,kBACA,mBACA,aACA,WACe;AACf,QAAM,kBAAkB,OAAO,qBAAqB;AACpD,QAAM,OAAO,kBAAkB,mBAAmB;AAClD,QAAM,aAAc,kBAAkB,oBAAoB;AAC1D,QAAM,WAAW,kBAAkB,cAAc;AACjD,QAAM,QAAQ,OAAO,aAAa,aAAa,WAA2B;AAC1E,QAAM,OAAQ,OAAO,aAAa,aAAa,YAAY,YAAY;AACvE,QAAM,UAAU,iBAAiB,MAAM,OAAO;AAC9C,MAAI,YAAY,UAAa,UAAU,QAAW;AAChD,UAAM,IAAI,MAAM,6DAA6D;AAAA,EAC/E;AACA,QAAM,UAAU,EAAE,KAAK,QAAiB,QAAQ,YAAY,GAAI,SAAS,SAAY,CAAC,IAAI,EAAE,KAAK,GAAI,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM,EAAG;AAC/I,QAAM,OAAmB;AAAA,IACvB,UAAU,WAAW,MAAM;AAAA,IAC3B,iBAAiB,WAAW,MAAM;AAAA,IAClC,UAAU;AAAA,EACZ;AACA,QAAM,SAAS,MAAM,WAAW;AAChC,QAAM,WAAW,MAAM,aAAa;AACpC,QAAM,gBAAgB,MAAM,kBAAkB;AAC9C,QAAM,iBAAiB,MAAM,mBAAmB;AAChD,QAAM,OAAO,MAAM;AACnB,QAAM,aAAa,oBAAoB,MAAM,UAAU;AACvD,MAAI,UAAU,UAAU;AACtB,UAAM,IAAI,MAAM,oDAAoD;AAAA,EACtE;AACA,MAAI,YAAY,WAAc,UAAU,WAAW;AACjD,UAAM,IAAI,MAAM,+DAA+D;AAAA,EACjF;AACA,QAAM,MAA2C,UAAU,YAAY,YAAY,UAAa,iBAAiB,kBAAkB,eAAe,UAAc,SAAS,UAAa,KAAK,SAAS,IAChM,EAAE,GAAG,SAAS,GAAI,SAAS,EAAE,QAAQ,KAAK,IAAI,CAAC,GAAI,GAAI,WAAW,EAAE,UAAU,KAAK,IAAI,CAAC,GAAI,GAAI,YAAY,SAAY,EAAE,QAAQ,IAAI,CAAC,GAAI,GAAI,gBAAgB,EAAE,eAAe,KAAK,IAAI,CAAC,GAAI,GAAI,iBAAiB,EAAE,gBAAgB,KAAK,IAAI,CAAC,GAAI,GAAI,eAAe,SAAY,EAAE,WAAW,IAAI,CAAC,GAAI,GAAI,SAAS,UAAa,KAAK,SAAS,IAAI,EAAE,KAAK,IAAI,CAAC,EAAG,IACnW;AAiBJ,QAAM,iBAAiB,iBAAiB,mBAAmB,QAAQ,iBAAiB,GAAG,IAAI,YAAY;AACvG,QAAM,cAAc,QAAQ,gBAAgB,GAAG,IAAI,YAAY;AAC/D,QAAM,eAAe,mBAAmB,UAAU;AAClD,QAAM,iBAAiB,iBAAiB,QAAQ,iBAAiB,GAAG,IAAI,YAAY;AAQpF,QAAM,YAAY,WAAW,MAAM,SAAS,SAAS,SAAS,CAAC,aAAa,UAAU;AACtF,MAAI;AACJ,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM,OAAe,KAAa,KAAmC;AACnE,UAAI,aAAa,IAAI,WAAW,UAAa,CAAC,IAAI,aAAa,CAAC,eAAe,YAAY,OAAO,GAAG,GAAG;AACtG,YAAI,iBAAiB,QAAW;AAC9B,gBAAM,IAAI,eAAe,UAAU;AACnC,yBAAe,EAAE,SAAS,IAAI,IAAI,CAAC,WAAW,IAAI;AAAA,QACpD;AACA,eAAO,EAAE,IAAI,OAAO,UAAU,cAAc,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI,EAAE;AAAA,MAC7E;AAIA,YAAM,iBAAiB,UAAU,UAAa,YAAY;AAC1D,YAAM,UAAU,kBAAkB,cAAc,IAAI,KAAK;AACzD,YAAM,aAAa,CAAC;AACpB,YAAM,uBAAuB,cACxB,IAAI,SAAS,UACb,IAAI,OAAO,2BAA2B,SACvC,IAAI,MAAM,uBAAuB,IAAI,IAAI,IACzC;AAMJ,YAAM,YAAY,aACd,iBAAiB,kBAAkB,yBAAyB,QAC5D,kBAAkB;AACtB,YAAM,YAAY,kBAAmB,WAAW;AAChD,YAAM,QAAQ,oBAAoB,GAAG;AACrC,YAAM,cAAc,IAAI;AACxB,UAAI,UAAU,YAAY,CAAC,IAAI;AAI/B,YAAM,YAAY,IAAI;AACtB,UAAI,UAAU,UAAa,YAAY,UAAa,IAAI,OAAO,yBAAyB,UAAa,IAAI,SAAS,QAAW;AAC3H,YAAI,qBAAqB,IAAI,MAAM,qBAAqB,IAAI,IAAI;AAAA,MAClE;AAGA,UAAI,CAAC,UAAW,KAAI,gBAAgB;AACpC,UAAI,IAAI,WAAW,MAAM,OAAO,KAAK,GAAG;AACxC,UAAI,EAAE,MAAM,kBAAkB,IAAI,QAAQ;AACxC,cAAM,MAAM,cAAc,OAAO,EAAE,KAAK,KAAK,GAAG;AAChD,YAAI,EAAE,GAAG,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,OAAO,IAAI,EAAE;AAAA,MACjD;AACA,YAAM,SAAS,YAAY,cAAc,IAAI,OAAO,IAAI;AACxD,UAAI,UAAU;AACd,UAAI,qBAAqB;AACzB,YAAM,EAAE,UAAAA,WAAU,aAAa,UAAU,IAAI,kBAAkB,KAAK,KAAK;AAEzE,UAAI,CAAC,EAAE,GAAI,QAAO;AAGlB,YAAM,KAAK,eAAe,IAAI,UAAU,SAAY,OAAO,OAAO,CAAC,GAAG,IAAI,KAAgC,IAAI;AAC9G,YAAM,WAAW,IAAI,QAAQ,oBAAoB;AACjD,YAAM,YAAY,cAAc,IAAI,KAAK;AACzC,YAAM,OAAO,IAAI,aAAa,4BAA4B,EAAE,MAAM,GAAG,IAAI,EAAE;AAK3E,YAAM,YAAY,cACd,KACA,IAAI,UAAU,SAAY,OAAO,OAAO,CAAC,GAAG,IAAI,KAAgC,IAAI;AACxF,YAAM,QAAiB,UAAUA,UAAS,WAAW,IACjD,YAAYA,UAAS,CAAC,CAAC,IACvB,YAAYA,UAAS,WAAW,IAC9BA,UAAS,CAAC,KAMX,aAAc,CAAC,SAAS,YAAY,WAClC,IAAI,OAAO,wBACXA,UAAS,WAAW,KACpB,YAAY,WAAW,KACvB,IAAI,MAAM,qBAAqB,UAAUA,UAAS,CAAC,GAAGA,WAAU,WAAW,IAC5EA,UAAS,CAAC,IACZ,YAAY,SACV,aAAa,IAAI,QACf,IAAI,MAAM,UAAUA,WAAU,QAAQ,MAAM,aAAa,WAAW,WAAW,IAAI,IACnF,aAAaA,WAAU,SAAS,QAAQ,IAC5C,QAIE,aAAa,IAAI,QACf,IAAI,MAAM,UAAUA,WAAU,QAAQ,MAAM,aAAa,WAAW,WAAW,IAAI,IACnF,MAAMA,WAAU,QAAQ,MAAM,aAAa,WAAW,EAAE,IAE1D,IAAI,QACA,IAAI,MAAM,UAAUA,WAAU,QAAQ,MAAM,aAAa,WAAW,IAAI,IAAI,IAC5E,EAAE,MAAM,QAAQ,MAAM,UAAU,MAAM,IAAI,aAAa,EAAE,GAAG,KAAK,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,KAAK,EAAE,KAAK,IAAI,GAAG,OAAO,MAAM,MAAM,UAAAA,UAAS;AACrJ,YAAMC,YAAW,WAAW,KAAK,IAC7B,QAIA,EAAE,MAAM,QAAQ,OAAO,OAAO,UAAU,WAAW,QAAQ,OAAO,UAAU,YAAY,UAAU,OAAO,MAAM,MAAM,EAAE,KAAK,OAAO,EAAE,KAAK,GAAG,IAAI,IAAI,KAAK;AAC9J,UAAI,MAAM,QAAQ,UAAa,MAAM,OAAO,QAAW;AACrD,qBAAa,KAAK,OAAOA,SAAQ;AAAA,MACnC;AACA,aAAO,EAAE,IAAI,MAAM,OAAO,OAAY,KAAK;AAAA,IAC7C;AAAA,EACF;AACF;;;AClVO,SAAS,UACd,YACA,IACe;AACf,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO,WAAW;AAAA,IAClB,MAAM,EAAE,KAAK,aAAa,QAAQ,YAAmC,GAAwE;AAAA,IAC7I,MAAM,OAAe,KAAa,KAAmC;AACnE,YAAM,SAAS,WAAW,MAAM,OAAO,KAAK,GAAG;AAC/C,UAAI,CAAC,OAAO,GAAI,QAAO;AACvB,aAAO,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,OAAO,OAAO,IAAI,GAAG,MAAM,OAAO,KAAK;AAAA,IAC7E;AAAA,EACF;AACF;AAEO,SAAS,OAAU,YAA0C;AAClE,QAAM,aAAa,qBAAqB,UAAiC,GAAG;AAC5E,SAAO;AAAA,IACL,MAAM,WAAW;AAAA,IACjB,OAAO;AAAA,MACL,GAAG,WAAW;AAAA,MACd,UAAU;AAAA,MACV,GAAI,aAAa,EAAE,kBAAkB,WAAW,IAAI,CAAC;AAAA,IACvD;AAAA,IACA,MAAM,EAAE,KAAK,UAAU,QAAQ,WAAkC;AAAA,IACjE,OAAO,WAAW,MAAM,KAAK,UAAU;AAAA,EACzC;AACF;AAYO,SAAS,iBACd,MACqB;AACrB,QAAM,UAAU,OAAO,QAAQ,IAAI;AACnC,MAAI,QAAQ,WAAW,GAAG;AACxB,UAAM,IAAI,UAAU,4DAA4D;AAAA,EAClF;AACA,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,UAAM,CAAC,MAAM,GAAG,IAAI,QAAQ,CAAC;AAC7B,UAAM,QAAQ,IAAI,MAAM;AACxB,QAAI,aAAa,GAAG,KAAK,MAAM,SAAS,YAAY,MAAM,OAAO,WAAW,GAAG;AAC7E,YAAM,IAAI;AAAA,QACR,uBAAuB,KAAK,UAAU,IAAI,CAAC;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AACA,QAAM,cAAc,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,MAAM,MAAM,MAAM,GAAG,CAAC;AAIjE,QAAM,SAAS,OAAO,UAAU,OAAO,GAAG,WAAW,CAAC,CAAC;AACvD,SAAO,MAAM,uBAAuB;AACpC,SAAO;AACT;AAOO,SAAS,MAAS,MAAc,YAA0C;AAC/E,SAAO;AAAA,IACL,MAAM,WAAW;AAAA,IACjB,OAAO,WAAW;AAAA,IAClB,MAAM,EAAE,KAAK,SAAS,OAAO,MAAM,QAAQ,WAAkC;AAAA,IAC7E,MAAM,OAAe,KAAa,KAAmC;AACnE,YAAM,SAAS,WAAW,MAAM,OAAO,KAAK,GAAG;AAC/C,UAAI,CAAC,OAAO,GAAI,QAAO,EAAE,IAAI,OAAO,UAAU,CAAC,IAAI,GAAG,MAAM,OAAO,KAAK;AACxE,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAMO,SAAS,MAAS,MAAc,YAA0C;AAC/E,SAAO;AAAA,IACL,MAAM,WAAW;AAAA,IACjB,OAAO,WAAW;AAAA,IAClB,MAAM,EAAE,KAAK,SAAS,MAAM,QAAQ,WAAkC;AAAA,IACtE,MAAM,OAAe,KAAa,KAAmC;AACnE,YAAM,SAAS,WAAW,MAAM,OAAO,KAAK,GAAG;AAC/C,UAAI,CAAC,OAAO,GAAI,QAAO;AACvB,UAAI,SAAS,KAAK,EAAE,MAAM,OAAO,OAAO,OAAO,MAAM,OAAO,KAAK,CAAC;AAClE,aAAO;AAAA,IACT;AAAA,EACF;AACF;;;AC/FO,SAAS,MAAM,MAA+C;AACnE,QAAM,OAAmB;AAAA,IACvB,UAAU,KAAK,MAAM;AAAA,IACrB,iBAAiB,KAAK,MAAM;AAAA,IAC5B,UAAU;AAAA,EACZ;AACA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM,EAAE,KAAK,SAAS,QAAQ,KAAK;AAAA,IACnC,MAAM,OAAe,KAAa,KAAwC;AACxE,YAAM,cAAc,IAAI;AACxB,YAAM,aAAa,IAAI;AACvB,YAAM,WAAW,IAAI;AACrB,YAAM,gBAAgB,IAAI;AAC1B,YAAM,cAAc,IAAI;AACxB,YAAM,WAAW,IAAI;AACrB,YAAM,iBAAiB,IAAI;AAC3B,YAAM,sBAAsB,IAAI;AAChC,YAAM,qBAAqB,IAAI;AAC/B,YAAM,eAAe,iBAAiB,GAAG;AAEzC,UAAI,SAAS;AACb,UAAI,mBAAmB;AACvB,UAAI,UAAU;AACd,UAAI,eAAe;AACnB,UAAI,aAAa;AACjB,UAAI,kBAAkB;AACtB,UAAI,gBAAgB;AACpB,UAAI,aAAa;AACjB,UAAI,iBAAiB;AAErB,UAAI;AACJ,UAAI;AACF,iBAAS,KAAK,MAAM,OAAO,KAAK,GAAG;AAAA,MACrC,UAAE;AACA,YAAI,SAAS;AACb,YAAI,mBAAmB;AACvB,YAAI,UAAU;AACd,YAAI,eAAe;AACnB,YAAI,aAAa;AACjB,YAAI,kBAAkB;AACtB,YAAI,gBAAgB;AACpB,YAAI,aAAa;AACjB,YAAI,iBAAiB;AAAA,MACvB;AAEA,UAAI,CAAC,OAAO,GAAI,QAAO;AAEvB,YAAM,OAAO,OAAO;AACpB,YAAM,QAAQ,MAAM,MAAM,KAAK,KAAK,GAAG;AACvC,UAAI,aAAc,aAAY,KAAK,EAAE,MAAM,QAAQ,OAAO,KAAK,CAAC;AAChE,aAAO,EAAE,IAAI,MAAM,OAAO,KAAK;AAAA,IACjC;AAAA,EACF;AACF;AAWO,SAAS,KACd,MACA,IACe;AACf,QAAM,OAAmB;AAAA,IACvB,UAAU,KAAK,MAAM;AAAA,IACrB,iBAAiB,KAAK,MAAM;AAAA,IAC5B,UAAU;AAAA,EACZ;AACA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM,EAAE,KAAK,QAAQ,QAAQ,MAA6B,GAAwE;AAAA,IAClI,MAAM,OAAe,KAAa,KAAmC;AACnE,YAAM,WAAW,IAAI;AACrB,YAAM,gBAAgB,IAAI;AAC1B,YAAM,cAAc,IAAI;AACxB,YAAM,WAAW,IAAI;AACrB,YAAM,iBAAiB,IAAI;AAC3B,YAAM,sBAAsB,IAAI;AAChC,YAAM,eAAe,iBAAiB,GAAG;AACzC,UAAI,UAAU;AACd,UAAI,eAAe;AACnB,UAAI,aAAa;AACjB,UAAI,kBAAkB;AACtB,UAAI,gBAAgB;AACpB,UAAI,aAAa;AACjB,UAAI;AACJ,UAAI;AAAE,iBAAS,KAAK,MAAM,OAAO,KAAK,GAAG;AAAA,MAAE,UAC3C;AACE,YAAI,UAAU;AACd,YAAI,eAAe;AACnB,YAAI,aAAa;AACjB,YAAI,kBAAkB;AACtB,YAAI,gBAAgB;AACpB,YAAI,aAAa;AAAA,MACnB;AACA,UAAI,CAAC,OAAO,GAAI,QAAO;AACvB,YAAM,QAAQ,GAAG,OAAO,OAAO,OAAO,IAAI;AAC1C,UAAI,aAAc,aAAY,KAAK,EAAE,MAAM,QAAQ,OAAO,MAAM,OAAO,KAAK,CAAC;AAC7E,aAAO,EAAE,IAAI,MAAM,OAAO,MAAM,OAAO,KAAK;AAAA,IAC9C;AAAA,EACF;AACF;;;ACjDO,SAAS,gBACd,cACA,KACA,KACuB;AACvB,MAAI,IAAK,QAAO,CAAC;AACjB,QAAMC,UAAS,IAAI;AACnB,QAAM,UAAU,IAAI;AACpB,MAAI,CAACA,WAAU,CAAC,QAAS,QAAO;AAChC,QAAM,MAA6B,CAAC;AACpC,MAAIA,QAAQ,KAAI,KAAKA,OAAM;AAC3B,MAAI,QAAS,KAAI,KAAK,GAAG,OAAO;AAChC,MAAI,KAAK,GAAG,YAAY;AACxB,SAAO;AACT;AAaO,SAAS,OACd,UACA,EAAE,MAAM,MAAM,OAAO,QAAQ,MAAM,IAAmB,CAAC,GACnC;AACpB,QAAM,OAAmB;AAAA,IACvB,UAAU,IAAI;AAAA,IACd,iBAAiB;AAAA,IACjB,UAAU;AAAA,EACZ;AACA,QAAM,eAAe,QAAQ,CAAC;AAE9B,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM,EAAE,KAAK,UAAU,UAAU,MAAM,cAAc,KAAK,MAAM;AAAA,IAChE,MAAM,OAAe,KAAa,KAAwC;AACxE,UAAI,MAAM;AAEV,YAAMC,QAAO,gBAAgB,cAAc,KAAK,GAAG;AAOnD,YAAM,WAAW,2BAA2B,OAAO,IAAI,KAAK;AAC5D,eAAS,UAAU,IAAI;AAKvB,YAAM,OAAO,CAAC,QAAgB;AAC5B,YAAI,MAAM,OAAO,iBAAiB,GAAG,GAAG;AACtC,gBAAMC,QAAO,EAAE,MAAM,QAAQ,OAAO,MAAM,MAAM,KAAK,GAAG,GAAG,MAAM,EAAE,OAAO,KAAK,IAAI,EAAE;AACrF,sBAAY,KAAKA,KAAI;AAAA,QACvB;AAAA,MACF;AAEA,aAAO,MAAM,MAAM,QAAQ;AAEzB,cAAM,IAAI,SAAS,MAAM,OAAO,KAAK,QAAQ;AAC7C,YAAI,EAAE,IAAI;AACR,cAAI,IAAI,WAAY,4BAA2B,KAAK,OAAO,KAAK,GAAG;AACnE,eAAK,GAAG;AACR,iBAAO,EAAE,IAAI,MAAM,OAAO,MAAM,MAAM,KAAK,GAAG,GAAG,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI,EAAE;AAAA,QAClF;AAGA,YAAI,WAAW;AACf,mBAAW,WAAWD,OAAM;AAC1B,gBAAM,IAAI,QAAQ,MAAM,OAAO,KAAK,QAAQ;AAC5C,cAAI,EAAE,MAAM,EAAE,KAAK,MAAM,KAAK;AAC5B,kBAAM,EAAE,KAAK;AACb,uBAAW;AACX;AAAA,UACF;AAAA,QACF;AAGA,YAAI,CAAC,SAAU;AAAA,MACjB;AAGA,UAAI,OAAO;AACT,YAAI,IAAI,WAAY,4BAA2B,KAAK,OAAO,KAAK,GAAG;AACnE,aAAK,GAAG;AACR,eAAO,EAAE,IAAI,MAAM,OAAO,MAAM,MAAM,KAAK,GAAG,GAAG,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI,EAAE;AAAA,MAClF;AACA,YAAM,UAAU,SAAS;AACzB,YAAM,WAAW,QAAQ,QAAQ,YAAY,CAAC,KAAK,UAAU,QAAQ,KAAK,CAAC,IAAI,CAAC,UAAU;AAC1F,aAAO,EAAE,IAAI,OAAO,UAAU,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI,EAAE;AAAA,IAC/D;AAAA,EACF;AACF;AAoDA,SAAS,SACP,OACA,MAAc,OAAe,SAAgC,QAAiB,KAC1D;AACpB;AAAC,EAAC,MAAuB,gBAAgB,EAAE,MAAM,OAAO,SAAS,QAAQ,IAAI;AAC7E,SAAO;AACT;AAiBO,SAAS,SACd,MACA,OACA,UAAyB,CAAC,GACN;AACpB,QAAM,UAAU,QAAQ,QAAQ,CAAC;AACjC,QAAM,SAAS,QAAQ,UAAU;AACjC,QAAM,QAAQ,sBAAsB,MAAM,OAAO,SAAS,MAAM;AAEhE,MAAI,QAAQ,IAAK,QAAO,SAAS,MAAM,KAAK,GAAG,MAAM,OAAO,SAAS,QAAQ,IAAI;AAWjF,QAAM,aAAa,MAAM,MAAM,KAAK,KAAK;AACzC,QAAM,QAAQ,oBAAI,IAAwD;AACzE,EAAC,MAA0B,mBAAmB,EAAE,MAAM,OAAO,SAAS,OAAO;AAC9E,QAAM,QAAQ,CAAC,OAAe,KAAa,QAA2C;AACpF,UAAM,MAAM,IAAI;AAChB,QAAI,CAAC,OAAO,IAAI,WAAW,EAAG,QAAO,WAAW,OAAO,KAAK,GAAG;AAC/D,QAAI,WAAW,MAAM,IAAI,GAAG;AAC5B,QAAI,CAAC,UAAU;AACb,iBAAW,sBAAsB,MAAM,OAAO,CAAC,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM;AAC1E,YAAM,IAAI,KAAK,QAAQ;AAAA,IACzB;AACA,WAAO,SAAS,MAAM,OAAO,KAAK,GAAG;AAAA,EACvC;AA2BA,SAAO,SAAS,MAAM,KAAK,GAAG,MAAM,OAAO,SAAS,QAAQ,KAAK;AACnE;AAGO,SAAS,sBACd,MACA,OACA,OACA,SAAS,OACW;AAKpB,QAAM,OAAO,IAAY;AASzB,QAAM,OAAO,oBAAI,IAAY,CAAC,MAAM,KAAK,CAAC;AAC1C,MAAI,UAAU;AACd,aAAW,MAAM,OAAO;AACtB,UAAM,KAAK,mBAAmB,EAAE;AAChC,QAAI,OAAO,MAAM;AAAE,gBAAU;AAAO;AAAA,IAAM;AAC1C,eAAWE,OAAM,GAAI,MAAK,IAAIA,GAAE;AAAA,EAClC;AACA,QAAM,MAAM,CAAC,GAAG,IAAI,EAAE,IAAI,eAAe,EAAE,KAAK,EAAE;AAGlD,QAAM,UAAU,UACZ,MAAM,IAAI,OAAO,KAAK,GAAG,IAAI,CAAC,IAC9B,MAAM,IAAI,OAAO,KAAK,gBAAgB,IAAI,CAAC,GAAG,gBAAgB,KAAK,CAAC,GAAG,CAAC;AAC5E,QAAM,QAAQ,KAAK,OAAO,MAAM,GAAG,OAAO,OAAO,CAAC;AASlD,QAAM,SAAS,SAAS,QAAQ,KAAK,IAAI,OAAO,QAAQ,KAAK,CAAC;AAC9D,QAAM,QAAQ;AAAA,IACZ,SAAS,QAAQ,IAAI,GAAG,OAAO,MAAM;AAAA;AAAA;AAAA,IAGrC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,IAAK,MAAoB,IAAI,OAAK,OAAO,MAAM,WAAW,IAAI,MAAM,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,OAAO,MAAM,WAAW,IAAI;AAAA,EAC/J;AAGA,MAAI,MAAM,KAAK,QAAQ,aAAa;AAClC,UAAM,KAAK,QAAQ;AAInB,UAAM,KAAK,kBAAkB;AAAA,EAC/B;AAIA;AAAC,EAAC,MAAyB,YAAY,EAAE,MAAM,MAAM;AACrD,OAAK,OAAO,KAA2B;AACvC,SAAO;AACT;AAOA,SAAS,mBAAmB,GAAyC;AACnE,QAAM,KAAK,EAAE,MAAM;AACnB,MAAI,GAAG,SAAS,QAAS,QAAO,CAAC;AACjC,MAAI,GAAG,SAAS,SAAU,QAAO;AACjC,QAAM,MAAgB,CAAC;AACvB,aAAW,EAAE,IAAI,GAAG,KAAK,GAAG,QAAQ;AAClC,QAAI,KAAK,KAAK,EAAG,QAAO;AACxB,aAAS,KAAK,IAAI,MAAM,IAAI,KAAM,KAAI,KAAK,OAAO,cAAc,EAAE,CAAC;AAAA,EACrE;AACA,SAAO;AACT;AAEA,SAAS,gBAAgBA,KAAoB;AAC3C,SAAOA,IAAG,QAAQ,aAAa,MAAM;AACvC;;;AC5XO,SAAS,QAAc,OAAU,YAA0C;AAChF,QAAM,OAAmB;AAAA,IACvB,UAAU,WAAW,MAAM;AAAA,IAC3B,iBAAiB,WAAW,MAAM;AAAA,IAClC,UAAU;AAAA,EACZ;AACA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM,EAAE,KAAK,WAAW,OAAO,QAAQ,WAAkC;AAAA,IACzE,MAAM,OAAe,KAAa,KAAmC;AAgBnE,YAAM,QAAQ,IAAI;AAClB,UAAI,QAAQ;AACZ,UAAI;AAAE,eAAO,WAAW,MAAM,OAAO,KAAK,GAAG;AAAA,MAAE,UAC/C;AAAU,YAAI,QAAQ;AAAA,MAAM;AAAA,IAC9B;AAAA,EACF;AACF;;;ACiHO,SAAS,cAAc,IAAmC;AAO/D,QAAM,MAAM,CAAC,OAAa,KAAa,kBAAkB,UAAgB;AACvE,QAAIC;AAEJ,QAAI;AAAE,MAAAA,OAAM,GAAG,MAAM,IAAI,GAAG,GAAG;AAAA,IAAE,QAAQ;AAAE,MAAAA,MAAK,MAAM;AAAE,cAAM,IAAI,MAAM,kCAAkC;AAAA,MAAE;AAAA,IAAE;AAC9G,UAAMC,KAAI,UAAU,OAAgBD,GAAW;AAC9C,IAACC,GAAE,KAA4B,QAAQ;AACxC,QAAI,gBAAiB,CAACA,GAAE,KAAuC,kBAAkB;AACjF,WAAOA;AAAA,EACT;AACA,QAAM,MAAM,CAAC,OAAa,QAAsB;AAC9C,QAAID;AAEJ,QAAI;AAAE,MAAAA,OAAM,GAAG,MAAM,IAAI,GAAG,GAAG;AAAA,IAAE,QAAQ;AAAE,MAAAA,MAAK,MAAM;AAAE,cAAM,IAAI,MAAM,6BAA6B;AAAA,MAAE;AAAA,IAAE;AACzG,UAAM,IAAI,KAAK,OAAgBA,GAAW;AACzC,IAAC,EAAE,KAA4B,QAAQ;AACxC,WAAO;AAAA,EACT;AACA,QAAM,MAAM,CAAC,MAAc,OAAa,KAAa,MAAgB,aAAiC,WAA0B;AAC9H,QAAI,gBAAgB,UAAa,YAAY,SAAS,GAAG;AACvD,YAAM,IAAI,MAAM,8BAA8B,IAAI,qEAAqE,YAAY,KAAK,IAAI,CAAC,EAAE;AAAA,IACjJ;AAOA,UAAM,IAAI,KAAK,MAAM,QAAiB,MAAM;AAAE,YAAM,IAAI,MAAM,2CAA2C;AAAA,IAAE,IAAa,IAAa;AACpI,IAAC,EAAE,KAAqE,WAAW;AACpF,QAAI,gBAAgB,OAAW,CAAC,EAAE,KAAkD,mBAAmB;AAIvG,QAAI,WAAW,OAAW,CAAC,EAAE,KAAkC,cAAc;AAC7E,WAAO;AAAA,EACT;AAOA,QAAM,OAAO,CAAC,UAA8C;AAC1D,UAAM,WAA8B,CAAC;AACrC,UAAM,OAAO,MAAM,IAAI,QAAM;AAC3B,UAAI,MAAM,QAAQ,EAAE,GAAG;AACrB,cAAM,CAAC,KAAK,IAAI,IAAI;AACpB,iBAAS,KAAK,GAAG;AACjB,YAAI;AAEJ,YAAI;AAAE,kBAAQ,GAAG,MAAM,IAAI,GAAG,GAAG;AAAA,QAAE,QAAQ;AAAE,iBAAO,MAAM;AAAE,kBAAM,IAAI,MAAM,6BAA6B;AAAA,UAAE;AAAA,QAAE;AAC7G,eAAO,EAAE,MAAM,YAAY,KAAK;AAAA,MAClC;AACA,eAAS,KAAK,IAAI;AAClB,aAAO;AAAA,IACT,CAAC;AACD,UAAM,IAAK,OAAqC,GAAG,IAAI;AAKvD,UAAM,QAAS,EAAE,KAA+B;AAChD,QAAI,SAAS,MAAM,WAAW,SAAS,QAAQ;AAC7C,YAAM,IAAI,MAAM,yBAAyB,SAAS,MAAM,2BAA2B,MAAM,MAAM,EAAE;AAAA,IACnG;AACA;AAAC,IAAC,EAAE,KAA0C,WAAW;AACzD,WAAO;AAAA,EACT;AAUA,QAAM,MAAM,CAAC,KAAa,UAAsB;AAC9C,QAAI;AAEJ,QAAI;AAAE,eAAS,GAAG,MAAM,IAAI,GAAG,GAAG;AAAA,IAAE,QAAQ;AAAE,cAAQ;AAAA,IAAU;AAChE,UAAM,IAAK,QAA0C,OAAO,KAAK;AAChE,IAAC,EAAE,KAA+B,WAAW;AAC9C,WAAO;AAAA,EACT;AAEA,QAAM,KAAK,IAAI;AAAA,IACb;AAAA,IAAS;AAAA,IAAO;AAAA,IAAS;AAAA,IAAW;AAAA,IAAY;AAAA,IAAY;AAAA,IAAU;AAAA,IAAY;AAAA,IAAQ;AAAA,IAAc;AAAA,IAAY;AAAA,IAAW;AAAA,IAAa;AAAA,IAAU;AAAA,IACtJ;AAAA,IAAQ;AAAA,IAAa;AAAA,IAAY;AAAA,IAAS;AAAA,IAAiB;AAAA,IAAO;AAAA,IAAQ;AAAA,IAAQ;AAAA,IAClF;AAAA,IAAU;AAAA,IAAY;AAAA,IAAS;AAAA,IAAQ;AAAA,IAAa;AAAA,IAAU;AAAA,IAAoB;AAAA,IAAS;AAAA,IAAS;AAAA,IAAU;AAAA,IAAY;AAAA,IAAe;AAAA,IAAO;AAAA,IAAO;AAAA,IAAO;AAAA,IAAQ;AAAA,IACtK,WAAW,EAAE;AAAA,EACf;AACA,QAAM,MAAM;AAAA,IACV;AAAA,IAAO;AAAA,IAAK;AAAA,IAAO;AAAA,IAAS;AAAA,IAAU;AAAA,IAAU;AAAA,IAAQ;AAAA,IAAU;AAAA,IAAM;AAAA,IAAY;AAAA,IAAU;AAAA,IAAS;AAAA,IAAW;AAAA,IAAQ;AAAA,IAC1H;AAAA,IAAM;AAAA,IAAW;AAAA,IAAU;AAAA,IAAO;AAAA,IAAe;AAAA,IAAK;AAAA,IAAM;AAAA,IAAM;AAAA,IAClE;AAAA,IAAQ;AAAA,IAAU;AAAA,IAAO;AAAA,IAAM;AAAA,IAAW;AAAA,IAAQ;AAAA,IAAkB;AAAA,IAAO;AAAA,IAAO;AAAA,IAAS;AAAA,IAAU;AAAA,IAAa;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAM;AAAA,EACzI;AACA,SAAO,OAAO,QAAQ,GAAG;AAC3B;;;ACjPO,IAAM,SAAS;AAEf,IAAM,QAAQ;AAEd,IAAM,SAAS;AAEf,IAAM,UAAU;AAUhB,IAAM,YAAY;AAKlB,IAAM,SAAS;AAEf,IAAM,UAAU;AAMhB,IAAM,SAAS;AAEf,IAAM,WAAW;AAsBjB,IAAM,UAAU;AAEhB,IAAM,UAAU;AAEhB,IAAM,UAAU;AAEhB,IAAM,SAAS;AAUf,IAAM,UAAU;AAEhB,IAAM,UAAU;AAEhB,IAAM,WAAW;AAQjB,IAAM,eAAe;AACrB,IAAM,cAAc;AACpB,IAAM,gBAAgB;AAWtB,IAAM,WAAW;AAKjB,IAAM,YAAY;AASlB,IAAM,UAAU;AA4BhB,IAAM,UAAU;AAShB,IAAM,WAAW;AASjB,IAAM,YAAY;AAElB,IAAM,kBAAkB;AAUxB,IAAM,WAAW;AAgBjB,IAAM,eAAe;AAWrB,IAAM,aAAa;AAcnB,IAAM,WAAW;AA4BjB,IAAM,SAAS;AA+Bf,IAAM,YAAY;AAwBlB,IAAM,YAAY;AAyBlB,IAAM,aAAa;AA4BnB,IAAM,UAAU;AAyBhB,IAAM,aAAa;AAcnB,IAAM,WAAW;AAyBjB,IAAM,SAAS;AAKf,IAAM,iBAAiB;AAYvB,IAAM,cAAc;AAMpB,IAAM,YAAY;AAElB,IAAM,WAAmC;AAAA,EAC9C,CAAC,MAAM,GAAG;AAAA,EAAO,CAAC,KAAK,GAAG;AAAA,EAAM,CAAC,MAAM,GAAG;AAAA,EAAO,CAAC,OAAO,GAAG;AAAA,EAC5D,CAAC,SAAS,GAAG;AAAA,EAAU,CAAC,MAAM,GAAG;AAAA,EAAO,CAAC,OAAO,GAAG;AAAA,EAAQ,CAAC,MAAM,GAAG;AAAA,EACrE,CAAC,QAAQ,GAAG;AAAA,EAAS,CAAC,OAAO,GAAG;AAAA,EAAQ,CAAC,OAAO,GAAG;AAAA,EAAQ,CAAC,OAAO,GAAG;AAAA,EACtE,CAAC,MAAM,GAAG;AAAA,EAAO,CAAC,OAAO,GAAG;AAAA,EAAQ,CAAC,OAAO,GAAG;AAAA,EAAQ,CAAC,QAAQ,GAAG;AAAA,EACnE,CAAC,YAAY,GAAG;AAAA,EAAa,CAAC,WAAW,GAAG;AAAA,EAAY,CAAC,aAAa,GAAG;AAAA,EACzE,CAAC,QAAQ,GAAG;AAAA,EAAS,CAAC,SAAS,GAAG;AAAA,EAAU,CAAC,OAAO,GAAG;AAAA,EAAQ,CAAC,OAAO,GAAG;AAAA,EAC1E,CAAC,QAAQ,GAAG;AAAA,EAAS,CAAC,SAAS,GAAG;AAAA,EAAU,CAAC,eAAe,GAAG;AAAA,EAAgB,CAAC,WAAW,GAAG;AAAA,EAAY,CAAC,SAAS,GAAG;AAAA,EACvH,CAAC,QAAQ,GAAG;AAAA,EAAS,CAAC,YAAY,GAAG;AAAA,EAAa,CAAC,UAAU,GAAG;AAAA,EAAW,CAAC,QAAQ,GAAG;AAAA,EACvF,CAAC,MAAM,GAAG;AAAA,EACV,CAAC,SAAS,GAAG;AAAA,EAAU,CAAC,SAAS,GAAG;AAAA,EAAU,CAAC,UAAU,GAAG;AAAA,EAC5D,CAAC,OAAO,GAAG;AAAA,EAAQ,CAAC,UAAU,GAAG;AAAA,EAAW,CAAC,QAAQ,GAAG;AAAA,EAAS,CAAC,MAAM,GAAG;AAAA,EAC3E,CAAC,cAAc,GAAG;AACpB;;;ACvRO,SAAS,gBAAgB,MAAkC;AAChE,SAAO,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE;AAC5B;AASO,SAAS,YAAY,MAAuE;AACjG,UAAQ,MAAM;AAAA,IACZ,KAAK;AAAQ,aAAO;AAAA,IACpB,KAAK;AAAc,aAAO;AAAA,IAC1B,KAAK;AAAgB,aAAO;AAAA,IAC5B,KAAK;AAAS,aAAO;AAAA,EACvB;AACF;AAEO,SAAS,YAAY,MAAuE;AACjG,UAAQ,MAAM;AAAA,IACZ,KAAK;AAAG,aAAO;AAAA,IACf,KAAK;AAAG,aAAO;AAAA,IACf,KAAK;AAAG,aAAO;AAAA,IACf,KAAK;AAAG,aAAO;AAAA,EACjB;AACF;AAGO,SAAS,eAAe,MAAuG;AACpI,UAAQ,KAAK,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,IAAI,OAAO,EAAE,IAAI,MAAM,YAAY,IAAI,EAAE,EAAE;AAC/E;AAuFO,SAAS,cAAc,GAAgD;AAC5E,MAAI,UAAU,EAAG,QAAO;AACxB,SAAO,gBAAgB;AAAA,IACrB,MAAM,EAAE;AAAA,IAAG,GAAG,EAAE;AAAA,IAAG,IAAI,EAAE;AAAA,IAAG,IAAI,EAAE;AAAA,IAAG,MAAM,EAAE;AAAA,IAAG,OAAO,EAAE;AAAA,IAAG,KAAK,EAAE;AAAA,IACnE,OAAO,EAAE,KAAK;AAAA,IAAG,KAAK,EAAE,KAAK,CAAC;AAAA,IAC9B,GAAI,EAAE,OAAO,SAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG;AAAA,IAC7C,GAAI,EAAE,OAAO,SAAY,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG;AAAA,IACjD,GAAI,EAAE,MAAM,SAAY,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE;AAAA,IAC7C,GAAI,EAAE,OAAO,SAAY,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG;AAAA,IAClD,GAAI,EAAE,OAAO,SAAY,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG;AAAA,IAC5C,GAAI,EAAE,OAAO,SAAY,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG;AAAA,IAC/C,GAAI,EAAE,OAAO,SAAY,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG;AAAA,IACjD,GAAI,EAAE,OAAO,SAAY,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG;AAAA,IAC1C,GAAI,EAAE,OAAO,SAAY,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG;AAAA,IAC1C,GAAI,EAAE,MAAM,SAAY,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;AAAA,EAC1C,CAAC;AACH;AAkCO,SAAS,qBACd,MACA,OACA,gBACsC;AACtC,QAAM,UAAU,CAAC,SAAoC;AACnD,eAAW,OAAO,KAAM,KAAI,CAAC,OAAO,UAAU,GAAG,KAAK,MAAM,KAAK,OAAO,MAAO,QAAO;AACtF,WAAO;AAAA,EACT;AACA,MAAI,SAAS,UAAa,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,KACxD,mBAAmB,KAAK,mBAAmB,KAC5C,KAAK,OAAO,WAAW,SACvB,KAAK,OAAO,KAAK,WAAS,UAAU,KAAK,UAAU,CAAC,KACpD,QAAQ,KAAK,MAAM,OAAO,CAAC,KAAK,QAAQ,KAAK,OAAO,OAAO,CAAC,KAC5D,KAAK,MAAM,KAAK,aAAW,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG;AACtD,UAAM,IAAI,UAAU,2BAA2B;AAAA,EACjD;AACF;AA6EA,IAAM,gBAAgB,uBAAO,uBAAuB;AAM7C,SAAS,gBAAgB,MAAoB,UAAwC;AAC1F,SAAO,EAAE,GAAG,MAAM,CAAC,aAAa,GAAG,EAAE,SAAS,EAAE;AAClD;AAQA,IAAM,uBAAuB;AAC7B,IAAM,uBAAuB;AAG7B,SAAS,mBAAmB,IAAY,IAAkB;AACxD,aAAW,MAAM,CAAC,IAAI,EAAE,GAAG;AACzB,QAAI,CAAC,OAAO,UAAU,EAAE,KAAK,KAAK,KAAK,KAAK,SAAU;AACpD,YAAM,IAAI,UAAU,iDAAiD,EAAE,EAAE;AAAA,IAC3E;AAAA,EACF;AACA,MAAI,KAAK,IAAI;AACX,UAAM,IAAI,UAAU,yCAAyC,EAAE,MAAM,EAAE,EAAE;AAAA,EAC3E;AACF;AAGO,SAAS,gBAAgB,QAAuD;AACrF,MAAI,OAAO;AACX,aAAW,SAAS,QAAQ;AAC1B,uBAAmB,MAAM,IAAI,MAAM,EAAE;AACrC,QAAI,MAAM,KAAK,MAAQ,QAAO;AAAA,EAChC;AACA,MAAI,CAAC,MAAM;AACT,QAAIE,QAAO;AACX,eAAW,SAAS,OAAQ,CAAAA,SAAQ,OAAO,aAAa,MAAM,IAAI,MAAM,EAAE;AAC1E,WAAOA;AAAA,EACT;AAEA,MAAI,OAAO,OAAO,aAAa,sBAAsB,oBAAoB;AACzE,aAAW,SAAS,QAAQ;AAC1B,YAAQ,OAAO;AAAA,MACb,MAAM,OAAO;AAAA,MAAI,MAAM,KAAK;AAAA,MAC5B,MAAM,OAAO;AAAA,MAAI,MAAM,KAAK;AAAA,IAC9B;AAAA,EACF;AACA,SAAO;AACT;AAGO,SAAS,gBAAgB,MAAiD;AAC/E,MAAI,KAAK,WAAW,CAAC,MAAM,wBAAwB,KAAK,WAAW,CAAC,MAAM,sBAAsB;AAC9F,SAAK,KAAK,SAAS,KAAK,MAAM,EAAG,OAAM,IAAI,UAAU,kDAAkD;AACvG,QAAI,KAAK,WAAW,EAAG,OAAM,IAAI,UAAU,uDAAuD;AAClG,UAAMC,UAA4C,CAAC;AACnD,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK,GAAG;AACvC,YAAM,KAAK,KAAK,WAAW,CAAC,IAAI,QAAU,KAAK,WAAW,IAAI,CAAC;AAC/D,YAAM,KAAK,KAAK,WAAW,IAAI,CAAC,IAAI,QAAU,KAAK,WAAW,IAAI,CAAC;AACnE,yBAAmB,IAAI,EAAE;AACzB,MAAAA,QAAO,KAAK,EAAE,IAAI,GAAG,CAAC;AAAA,IACxB;AACA,WAAOA;AAAA,EACT;AAEA,MAAI,KAAK,SAAS,MAAM,EAAG,OAAM,IAAI,UAAU,uDAAuD;AACtG,QAAM,SAA4C,CAAC;AACnD,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK,GAAG;AACvC,UAAM,KAAK,KAAK,WAAW,CAAC;AAC5B,UAAM,KAAK,KAAK,WAAW,IAAI,CAAC;AAChC,uBAAmB,IAAI,EAAE;AACzB,WAAO,KAAK,EAAE,IAAI,GAAG,CAAC;AAAA,EACxB;AACA,SAAO;AACT;AAEO,SAAS,aAAa,MAA6B;AACxD,QAAM,QAAQ,IAAI,WAAW,GAAG;AAChC,QAAM,KAAe,CAAC;AACtB,aAAW,EAAE,IAAI,IAAI,GAAG,KAAK,gBAAgB,IAAI,GAAG;AAClD,QAAI,KAAK,IAAK,UAAS,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,GAAG,GAAG,IAAK,OAAM,CAAC,IAAI;AACvE,QAAI,MAAM,IAAK,IAAG,KAAK,KAAK,IAAI,IAAI,GAAG,GAAG,EAAE;AAAA,EAC9C;AACA,SAAO,EAAE,OAAO,GAAG;AACrB;AAEO,SAAS,SAAS,KAAoB,MAAuB;AAClE,MAAI,OAAO,EAAG,QAAO;AACrB,MAAI,OAAO,IAAK,QAAO,IAAI,MAAM,IAAI,MAAM;AAC3C,QAAM,KAAK,IAAI;AACf,WAAS,IAAI,GAAG,IAAI,GAAG,QAAQ,KAAK,EAAG,KAAI,QAAQ,GAAG,CAAC,KAAM,QAAQ,GAAG,IAAI,CAAC,EAAI,QAAO;AACxF,SAAO;AACT;AAEA,SAAS,gBAAgB,MAAyB,IAAgD;AAChG,QAAM,QAAQ,IAAI,WAAW,GAAG;AAChC,QAAM,KAAe,CAAC;AACtB,QAAM,OAAiB,CAAC;AACxB,QAAM,SAAmC,CAAC;AAO1C,MAAI,YAAY;AAChB,MAAI,WAAW;AACf,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,UAAM,KAAK,KAAK,CAAC;AACjB,QAAI,KAAK,GAAG;AAAE,WAAK,KAAK,CAAC;AAAG,aAAO,KAAK,IAAI;AAAG,kBAAY;AAAO;AAAA,IAAS;AAC3E,UAAM,MAAM,GAAG,EAAE;AACjB,WAAO,KAAK,GAAG;AACf,aAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC5B,UAAI,IAAI,MAAM,CAAC,MAAM,EAAG;AACxB,UAAI,MAAM,CAAC,MAAM,EAAG,OAAM,CAAC,IAAI,IAAI;AAAA,UAC9B,aAAY;AAAA,IACnB;AACA,QAAI,IAAI,GAAG,SAAS,KAAK,EAAE,WAAW,EAAG,aAAY;AACrD,aAAS,IAAI,GAAG,IAAI,IAAI,GAAG,QAAQ,KAAK,EAAG,IAAG,KAAK,IAAI,GAAG,CAAC,GAAI,IAAI,GAAG,IAAI,CAAC,GAAI,CAAC;AAAA,EAClF;AACA,SAAO,EAAE,OAAO,IAAI,MAAM,QAAQ,UAAU;AAC9C;AAQA,SAAS,YAAY,MAAuC;AAC1D,MAAI,KAAK,SAAS,OAAW,QAAO,KAAK;AACzC,MAAI,KAAK,UAAU,OAAW,QAAO,OAAS,MAAM,IAAI,OAAO,KAAK,MAAM,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC;AAC7F,MAAI,KAAK,SAAS,QAAW;AAC3B,UAAM,CAAC,MAAM,GAAG,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,MAAM,IAAI,OAAO,QAAQ,KAAK,CAAC,CAAC;AAC3F,QAAI,SAAS,OAAW,OAAM,IAAI,UAAU,6DAA6D;AACzG,UAAM,OAAO,KAAK,WAAW,IAAI,OAAO,OAAO,MAAM,GAAG,IAAI;AAK5D,WAAO,OAAS,KAAK,MAAM,EAAE,KAAK,KAAK,OAAO,EAAE,CAAC,CAAC;AAAA,EACpD;AACA,QAAM,OAA4C,CAAC;AACnD,aAAW,CAAC,MAAM,QAAQ,KAAK,KAAK,KAAK,KAAM,MAAK,IAAI,IAAI,MAAM,IAAI,OAAO,QAAQ,KAAK,CAAC;AAC3F,SAAO,iBAAiB,IAAI;AAC9B;AAEO,SAAS,aAAa,MAAmC;AAC9D,QAAM,QAAS,KAA6B,aAAa;AACzD,QAAM,MAAM,OAAO;AACnB,MAAI,QAAQ,OAAW,QAAO;AAC9B,QAAM,KAAK,KAAK,GAAG,IAAI,YAAY;AACnC,QAAM,eAAe,KAAK,eAAe,CAAC,GAAG,IAAI,WAAW;AAC5D,QAAM,QAAuB;AAAA,IAC3B;AAAA,IACA,MAAM,WAAW,KAAK,KAAK,IAAI;AAAA,IAC/B,GAAG,KAAK;AAAA,IACR,KAAK,KAAK;AAAA,IACV;AAAA,IACA,IAAI,KAAK;AAAA,IACT,MAAM,KAAK,KAAK,IAAI,OAAK,gBAAgB,GAAG,EAAE,CAAC;AAAA,IAC/C,QAAQ;AAAA,IACR,YAAY,YAAY,IAAI,iBAAiB;AAAA,IAC7C,gBAAgB,YAAY,IAAI,CAAAC,OAAKA,GAAE,MAAM,qBAAqB,MAAS;AAAA,IAC3E,KAAK,KAAK,IAAI,IAAI,QAAM;AAAA,MACtB,OAAO,IAAI,IAAI,EAAE,IAAI,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAE,CAAC,CAAC;AAAA,MACrD,QAAQ,IAAI,IAAI,EAAE,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAE,CAAC,CAAC;AAAA,MACxD,OAAO,EAAE;AAAA,MACT,QAAQ,EAAE;AAAA,MACV,UAAU,EAAE;AAAA,IACd,EAAE;AAAA,IACF,OAAO,KAAK;AAAA,EACd;AACA,MAAI,UAAU,OAAW,OAAM,WAAW;AAC1C,SAAO;AACT;;;ACtlBA,SAAS,eAAe,GAAqB;AAC3C,QAAM,SAAS,CAAC,MACd,MAAM,QAAQ,OAAO,MAAM,YAAY,OAAO,MAAM,YAAY,OAAO,MAAM;AAC/E,MAAI,OAAO,CAAC,KAAK,aAAa,OAAQ,QAAO;AAC7C,MAAI,MAAM,QAAQ,CAAC,EAAG,QAAO,EAAE,MAAM,MAAM;AAC3C,MAAI,OAAO,MAAM,YAAY,MAAM,MAAM;AACvC,UAAM,QAAQ,OAAO,eAAe,CAAC;AACrC,QAAI,UAAU,OAAO,aAAa,UAAU,KAAM,QAAO;AACzD,WAAO,OAAO,OAAO,CAAC,EAAE,MAAM,OAAK,OAAO,CAAC,KAAM,MAAM,QAAQ,CAAC,KAAK,EAAE,MAAM,MAAM,CAAE;AAAA,EACvF;AACA,SAAO;AACT;AAmBA,SAAS,SAAS,QAA6B,GAAiC;AAC9E,MAAI,MAAM;AAIV,WAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,QAAI,QAAQ,EAAG,QAAO;AACtB,UAAM,IAAI,IAAI;AACd,QAAI,EAAE,QAAQ,aAAa,EAAE,QAAQ,SAAU,QAAO;AACtD,UAAM,EAAE;AAAA,EACV;AACA,SAAO;AACT;AAGO,IAAM,uBAAN,cAAmC,MAAM;AAAA,EACrC;AAAA,EACT,YAAY,KAAa;AAAE,UAAM,kCAAkC,GAAG,GAAG;AAAG,SAAK,MAAM;AAAA,EAAI;AAC7F;AAqDA,IAAM,UAAN,MAAc;AAAA,EACZ,OAAiB,CAAC;AAAA,EAClB,IAAe,CAAC;AAAA,EAChB,MAAiB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBlB,SAA4B,CAAC;AAAA,EAC7B,KAAe,CAAC;AAAA,EAChB,KAA4B,CAAC;AAAA,EAC7B,OAA8B,CAAC;AAAA,EAC/B,MAAsB,CAAC;AAAA,EACvB,SAAwC;AAAA;AAAA,EAExC,eAAgD;AAAA,EAChD,aAAa;AAAA,EACb,QAAoB,CAAC;AAAA;AAAA,EAErB,eAA0C,CAAC;AAAA,EACnC,gBAAgB,oBAAI,IAA4C;AAAA;AAAA,EAExE,aAAuB,CAAC;AAAA;AAAA,EAExB,cAAc,oBAAI,IAAY;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,EAuC9B,UAAqE;AAAA,EACrE,cAA4B,CAAC;AAAA,EACrB,cAAc,oBAAI,IAAiC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWnD,WAAWC,IAAgC;AACjD,UAAM,MAAM,KAAK,YAAY,IAAIA,EAAC;AAClC,QAAI,QAAQ,OAAW,QAAO;AAC9B,UAAM,MAAM,KAAK,YAAY;AAC7B,SAAK,YAAY,IAAIA,IAAG,GAAG;AAC3B,SAAK,YAAY,KAAK,KAAK,aAAaA,EAAC,CAAC;AAC1C,WAAO;AAAA,EACT;AAAA,EAEQ,aAAaA,IAAoC;AACvD,UAAM,YAAY,CAAC,QAA4B;AAC7C,WAAK,YAAY,IAAI,4BAAuB,GAAG,EAAE;AACjD,aAAO,EAAE,MAAM,CAAC,GAAG,MAAMA,GAAE;AAAA,IAC7B;AACA,UAAM,IAAIA,GAAE;AASZ,QAAI,QAAQ,EAAE,QAAQ,WAAW,EAAE,OAAO,OAAO;AASjD,WAAO,MAAM,QAAQ,YAAa,SAAQ,MAAM,OAAO;AACvD,QAAI,MAAM,QAAQ,QAAS,QAAO,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,QAAQ,MAAM,KAAK,EAAE;AAOjF,QAAI,MAAM,QAAQ,eAAe,MAAM,QAAQ,QAAQ;AACrD,aAAO,UAAU,6BAA6B,MAAM,GAAG,GAAG;AAAA,IAC5D;AACA,QAAI,MAAM,QAAQ,QAAW;AAC3B,aAAO,UAAU,wCAAwC,MAAM,GAAG,gCAAgC;AAAA,IACpG;AACA,UAAM,MAAM,MAAM;AAClB,UAAM,MAAM,MAAM,OAAO;AAEzB,UAAM,UAAU,IAAI,QAAQ,WAAW,IAAI,UAAU,CAAC,MAAM,MAAM;AAQlE,UAAM,WAAqD,CAAC;AAC5D,UAAM,OAAyC,CAAC;AAChD,eAAW,OAAO,SAAS;AACzB,YAAM,IAAI,IAAI;AACd,UAAI,EAAE,QAAQ,SAAS;AACrB,aAAK,KAAK,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC;AAC7B;AAAA,MACF;AACA,UAAI,EAAE,QAAQ,QAAS,QAAO,UAAU,kBAAkB,EAAE,GAAG,kCAAkC;AACjG,YAAM,OAAO,EAAE,OAAO;AACtB,UAAI,KAAK,QAAQ,QAAS,QAAO,UAAU,cAAc,KAAK,UAAU,EAAE,KAAK,CAAC,QAAQ,KAAK,GAAG,gBAAgB;AAChH,eAAS,KAAK,CAAC,EAAE,OAAO,KAAK,QAAQ,KAAK,KAAK,CAAC;AAAA,IAClD;AACA,QAAI,SAAS,SAAS,KAAK,KAAK,SAAS,GAAG;AAC1C,aAAO,UAAU,iFAAiF;AAAA,IACpG;AACA,QAAI,SAAS,SAAS,GAAG;AAGvB,UAAI,QAAQ,EAAG,QAAO,UAAU,qDAAqD,GAAG,EAAE;AAC1F,aAAO,EAAE,MAAM,SAAS;AAAA,IAC1B;AACA,WAAO,EAAE,MAAM,CAAC,GAAG,MAAM,MAAM,IAAI;AAAA,EACrC;AAAA,EACA,QAAgC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQhB;AAAA,EACA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWD,QAAQ,OAAe,IAAwB,IAAmB;AACxE,QAAI,OAAO,UAAa,KAAK,QAAQ,OAAW,QAAO;AACvD,UAAM,OAAO,KAAK,SAAS,IAAI,EAAE;AACjC,QAAI,SAAS,QAAW;AACtB,YAAM,IAAI,qBAAqB,eAAe,KAAK,UAAU,EAAE,CAAC,oCAAoC;AAAA,IACtG;AACA,WAAO,KAAK,KAAK,QAAQ,OAAO,MAAM,EAAE;AAAA,EAC1C;AAAA,EAEQ,SAAS,oBAAI,IAAqB;AAAA,EAClC,UAAU,oBAAI,IAAoB;AAAA,EAClC,UAAU,oBAAI,IAAoB;AAAA;AAAA,EAE1C,OAAO,oBAAI,IAAiC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO5C,UAAU,oBAAI,IAAuE;AAAA,EACrF,UAAU,oBAAI,IAAmC;AAAA,EAExC;AAAA;AAAA,EAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA;AAAA,EACT,YAAY,UAAyB;AACnC,SAAK,WAAW;AAChB,SAAK,QAAQ,SAAS,eAAe;AACrC,SAAK,MAAM;AACX,SAAK,OAAO,SAAS;AACrB,SAAK,MAAM,SAAS,aAAa,SAC7B,SACA,SAAS,SAAS,YAAY,IAAI,OAAK,CAAC,EAAE,IAAI,YAAY,EAAE,IAAI,CAAC,CAAU;AAC/E,SAAK,WAAW,IAAI,KAAK,KAAK,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWQ,YAAY,SAAyC,GAAmB;AAC9E,QAAI,KAAe,EAAE,MAAM,QAAQ;AACnC,UAAM,KAAK,KAAK,YAAY;AAC5B,aAAS,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,IAAK,MAAK,MAAM,IAAI,WAAW,QAAQ,CAAC,GAAI,oBAAI,IAAI,GAAG,EAAE,CAAC;AAClG,WAAO,KAAK,UAAU,EAAE;AAAA,EAC1B;AAAA,EAEQ,SAAS,GAAoB;AACnC,UAAM,MAAM,aAAa,SAAS,MAAM,KAAK,UAAU,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,KAAK;AAChF,UAAM,MAAM,KAAK,OAAO,IAAI,GAAG;AAC/B,QAAI,QAAQ,OAAW,QAAO;AAC9B,UAAM,IAAI,KAAK,EAAE;AACjB,SAAK,EAAE,KAAK,CAAC;AACb,SAAK,OAAO,IAAI,KAAK,CAAC;AACtB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,aAAa,oBAAI,IAAoB;AAAA,EACrC,UAAU,OAAkC;AAClD,UAAM,MAAM,KAAK,UAAU,KAAK;AAChC,UAAM,MAAM,KAAK,WAAW,IAAI,GAAG;AACnC,QAAI,QAAQ,OAAW,QAAO;AAC9B,UAAM,IAAI,KAAK,EAAE;AACjB,SAAK,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;AACtB,SAAK,WAAW,IAAI,KAAK,CAAC;AAC1B,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUQ,GAAG,GAAY,KAA4B;AACjD,UAAM,IAAI,KAAK,IAAI;AACnB,SAAK,IAAI,KAAK,CAAC;AACf,SAAK,OAAO,KAAK,GAAG;AACpB,WAAO;AAAA,EACT;AAAA,EAEQ,SAAS,MAAiC;AAChD,UAAM,MAAM,KAAK,UAAU,IAAI;AAC/B,UAAM,MAAM,KAAK,QAAQ,IAAI,GAAG;AAChC,QAAI,QAAQ,OAAW,QAAO;AAC9B,UAAM,IAAI,KAAK,GAAG;AAClB,SAAK,GAAG,KAAK,IAAI;AACjB,SAAK,QAAQ,IAAI,KAAK,CAAC;AACvB,WAAO;AAAA,EACT;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,EAgCQ,cAAuC;AAC7C,UAAM,IAAI,KAAK;AACf,WAAO,MAAM,SAAY,SAAY,CAAC,SAAiB,EAAE,IAAI;AAAA,EAC/D;AAAA;AAAA,EAGQ,UAAU,IAAsB;AACtC,QAAI,GAAG,SAAS,YAAY,GAAG,OAAO,WAAW,EAAG,QAAO;AAK3D,UAAM,OAAO,gBAAgB,GAAG,MAAM;AACtC,UAAM,MAAM,KAAK,QAAQ,IAAI,IAAI;AACjC,QAAI,QAAQ,OAAW,QAAO;AAC9B,UAAM,IAAI,KAAK,GAAG;AAClB,SAAK,GAAG,KAAK,IAAI;AACjB,SAAK,QAAQ,IAAI,MAAM,CAAC;AACxB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUQ,OAAO,OAAe,QAAyC;AACrE,UAAM,MAAgB,CAAC;AACvB,eAAW,KAAK,QAAQ;AACtB,UAAI,EAAE,SAAS,cAAc;AAAE,YAAI,KAAK,GAAG,KAAK,SAAS,EAAE,KAAK,CAAC;AAAG;AAAA,MAAS;AAC7E,YAAM,MAAM,KAAK,UAAU,EAAE,GAAG;AAChC,UAAI,MAAM,EAAG,OAAM,IAAI,qBAAqB,uCAAuC;AACnF,UAAI,KAAK,GAAG,GAAG;AAAA,IACjB;AACA,UAAM,OAAO,KAAK,SAAS,WAAW,IAAI,IAAI,MAAM;AACpD,SAAK,KAAK,OAAO,CAAC,IAAI;AACtB,SAAK,KAAK,OAAO,CAAC,IAAI,IAAI,UAAU;AACpC,aAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,IAAK,MAAK,KAAK,OAAO,IAAI,CAAC,IAAI,IAAI,CAAC;AACpE,WAAO;AAAA,EACT;AAAA,EAEQ,QAAQ,OAAyB;AACvC,UAAM,KAAK,KAAK,KAAK;AACrB,eAAW,KAAK,MAAO,MAAK,KAAK,KAAK,CAAC;AACvC,WAAO;AAAA,EACT;AAAA;AAAA,EAGQ,SAAS,IAAY,GAAmB;AAC9C,UAAM,KAAK,KAAK,KAAK;AACrB,SAAK,KAAK,KAAK,EAAE;AACjB,aAAS,IAAI,GAAG,IAAI,GAAG,IAAK,MAAK,KAAK,KAAK,CAAC;AAC5C,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUQ,QAAQ,GAAoC;AAClD,UAAM,KAAK,KAAK,KAAK,CAAC,EAAE;AACxB,UAAM,KAAK,WAAW,GAAG,oBAAI,IAAI,GAAG,KAAK,YAAY,CAAC;AACtD,WAAO,CAAC,IAAI,GAAG,SAAS,UAAU,KAAK,KAAK,UAAU,EAAE,CAAC;AAAA,EAC3D;AAAA;AAAA,EAGQ,SAAS,MAAwB;AACvC,UAAM,IAAI,KAAK,MAAM;AACrB,SAAK,MAAM,KAAK,IAAI;AACpB,WAAO;AAAA,EACT;AAAA,EAEQ,aAAa,KAA6C;AAChE,UAAM,MAAM,KAAK,cAAc,IAAI,GAAG;AACtC,QAAI,QAAQ,OAAW,QAAO;AAC9B,UAAM,IAAI,KAAK,aAAa;AAG5B,SAAK,cAAc,IAAI,KAAK,CAAC;AAC7B,SAAK,aAAa,KAAK,CAAC,CAAC;AACzB,SAAK,aAAa,CAAC,IAAI,IAAI,IAAI,OAAK,KAAK,QAAQ,CAAC,CAAC;AACnD,WAAO;AAAA,EACT;AAAA;AAAA,EAGQ,gBAAgB,GAA0C;AAChE,QAAI,MAAM,OAAW;AACrB,SAAK,WAAW,EAAE,MAAM;AACxB,QAAI,EAAE,MAAM,yBAAyB,KAAM,MAAK,aAAa;AAAA,EAC/D;AAAA,EAEA,WAAW,MAAc,GAA8B;AAIrD,SAAK,eAAe,EAAE,MAAM;AAC5B,UAAM,OAAO,KAAK,KAAK,CAAC,EAAE;AAC1B,SAAK,eAAe;AAkBpB,UAAM,MAAM,EAAE,MAAM;AACpB,SAAK,WAAW,KAAK,QAAQ,SAAY,KAAK,KAAK,aAAa,GAAG,CAAC;AACpE,UAAM,MAAM,EAAE,MAAM;AAepB,SAAK,gBAAgB,GAAG;AACxB,SAAK,gBAAgB,CAAC;AACtB,QAAI,EAAE,KAAK,QAAQ,UAAW,MAAK,gBAAgB,EAAE,KAAK,YAAY;AAOtE,SAAK,MAAM,IAAI,IAAI,QAAQ,SAAY,OAAO,KAAK,KAAK,gBAAgB,KAAK,WAAW,GAAG,GAAG,IAAI;AAAA,EACpG;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,EAsCQ,UAAU,GAAwB,QAAqC;AAC7E,UAAM,KAAK,KAAK,KAAK,MAAM,EAAE;AAG7B,UAAM,MAAM,EAAE,MAAM,iBAAiB,OAAO,MAAM;AAClD,QAAI,QAAQ,UAAa,KAAK,iBAAiB,OAAW,QAAO;AACjE,QAAI,CAAC,qBAAqB,MAAM,EAAG,QAAO;AAC1C,WAAO,KAAK,KAAK,gBAAgB,KAAK,WAAW,GAAG,GAAG,EAAE;AAAA,EAC3D;AAAA,EAEA,KAAK,GAAiC;AAGpC,UAAM,UAAW,EAAE,KAAmB,QAAQ;AAC9C,UAAM,WAAW,UAAU,KAAK,eAAe;AAC/C,UAAM,UAAU,KAAK;AACrB,UAAM,MAAM,UAAU,QAAQ,IAAI,CAAC,GAAG,IAAI,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACrE,QAAI,QAAQ,OAAW,QAAO,EAAE,IAAI,IAAI;AAGxC,UAAM,WAAW,KAAK,QAAQ,IAAI,CAAC;AACnC,QAAI,aAAa,QAAW;AAC1B,YAAMC,MAAK,KAAK,SAAS,SAAS,CAAC;AACnC,eAAS,KAAKA,MAAK,CAAC;AACpB,aAAO,EAAE,IAAAA,IAAG;AAAA,IACd;AACA,UAAM,UAAoB,CAAC;AAC3B,SAAK,QAAQ,IAAI,GAAG,OAAO;AAM3B,UAAM,KAAK,KAAK,QAAQ,KAAK,UAAU,CAAC,GAAG,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,CAAC;AACrE,SAAK,QAAQ,OAAO,CAAC;AACrB,QAAI,SAAS;AACX,UAAI,UAAU,QAAQ,IAAI,CAAC;AAC3B,UAAI,YAAY,QAAW;AAAE,kBAAU,oBAAI,IAAI;AAAG,gBAAQ,IAAI,GAAG,OAAO;AAAA,MAAE;AAC1E,cAAQ,IAAI,UAAU,EAAE;AAAA,IAC1B,OAAO;AACL,WAAK,KAAK,IAAI,GAAG,EAAE;AAAA,IACrB;AACA,eAAW,QAAQ,SAAS;AAS1B,UAAI,OAAO,MAAM,IAAI;AACnB,cAAMC,QAAQ,EAAwC;AACtD,cAAM,IAAI;AAAA,UACR,sCAAiC,EAAE,IAAI,GAAGA,UAAS,SAAY,KAAK,WAAWA,KAAI,IAAI,+CAA+C,EAAE;AAAA,QAC1I;AAAA,MACF;AACA,WAAK,KAAK,IAAI,IAAI;AAAA,IACpB;AACA,WAAO,EAAE,GAAG;AAAA,EACd;AAAA,EAEQ,UAAU,GAAgC;AAChD,UAAM,IAAI,EAAE;AAaZ,UAAM,MAAO,EAAmB;AAChC,QAAI,QAAQ,OAAW,QAAO,KAAK,KAAK,SAAS,KAAK,SAAS;AAAA,MAC7D,MAAM;AAAA,MACN,QAAQ,IAAI,MAAM,IAAI,MAAM,IAAI,SAAS,IAAI;AAAA,MAC7C,MAAM,IAAI,QAAQ,IAAI,OAAK,KAAK,QAAQ,CAAC,CAAC;AAAA,MAC1C,MAAM,IAAI;AAAA,MACV,OAAO,IAAI;AAAA,IACb,CAAC,CAAC;AACF,QAAI,EAAE,QAAQ,UAAU;AACtB,YAAM,UAAU,EAAE,SAAS;AAC3B,aAAO,KAAK,KAAK,SAAS,KAAK,SAAS;AAAA,QACtC,MAAM;AAAA,QACN,QAAQ,EAAE,MAAM,IAAI,MAAM,EAAE,QAAQ,IAAI;AAAA,QACxC,MAAM,EAAE,KAAK,IAAI,OAAK,KAAK,QAAQ,CAAC,CAAC;AAAA,QACrC,UAAU,KAAK,QAAQ,EAAE,QAAQ;AAAA,QACjC,MAAM,QAAQ,QAAQ,YAAY,QAAQ,QAAQ;AAAA,MACpD,CAAC,CAAC;AAAA,IACJ;AACA,YAAQ,EAAE,KAAK;AAAA,MACb,KAAK,WAAW;AACd,YAAI,EAAE,iBAAiB;AACrB,iBAAO,KAAK,KAAK,KAAK,QAAQ,kBAAkB,WAAW,KAAK,SAAS,EAAE,KAAK,GAAG,KAAK,SAAS,eAAe,CAAC,CAAC,CAAC;AAAA,QACrH;AACA,eAAO,KAAK,KAAK,KAAK,QAAQ,eAAe,QAAQ,KAAK,SAAS,EAAE,KAAK,GAAG,KAAK,SAAS,eAAe,CAAC,CAAC,CAAC;AAAA,MAC/G;AAAA,MACA,KAAK,SAAS;AACZ,cAAM,QAAQ,EAAE,MAAM,SAAS,GAAG,IAAI,EAAE,QAAQ,GAAG,EAAE,KAAK;AAC1D,eAAO,KAAK,KAAK,KAAK,QAAQ,cAAc,OAAO,KAAK,SAAS,IAAI,OAAO,EAAE,QAAQ,KAAK,CAAC,GAAG,KAAK,SAAS,eAAe,CAAC,CAAC,CAAC;AAAA,MACjI;AAAA,MACA,KAAK,YAAY;AAKf,cAAM,MAAM,EAAE,MAAM,IAAI,OAAK,EAAE,QAAQ,uBAAuB,MAAM,CAAC,EAAE,KAAK,GAAG;AAC/E,cAAM,WAAW,EAAE,WAAW,OAAO,EAAE,QAAQ,OAAO;AACtD,cAAM,QAAQ,EAAE,kBAAkB,OAAO;AACzC,eAAO,KAAK;AAAA,UACV,KAAK,QAAQ,cAAc;AAAA,UAC3B,KAAK,SAAS,IAAI,OAAO,MAAM,GAAG,IAAI,QAAQ,IAAI,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAMxD,KAAK,SAAS,CAAC,SAAS,CAAC;AAAA,QAC3B;AAAA,MACF;AAAA,MACA,KAAK,UAAU;AAGb,eAAO,KAAK,KAAK,WAAW,KAAK,KAAK,EAAE,MAAM,EAAE,IAAI,KAAK,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAAA,MACpF;AAAA,MACA,KAAK,YAAY;AACf,cAAM,OAAO,EAAE,QAAQ,IAAI,OAAK,KAAK,KAAK,CAAC,EAAE,EAAE;AAK/C,cAAM,OAAO,KAAK,SAAS,EAAE,cAAc,UAAU,QAAQ,IAAI,KAAK,UAAU,KAAK,MAAM,KAAK,SAAS,EAAE;AAC3G,aAAK,KAAK,OAAO,CAAC,IAAI,KAAK;AAC3B,iBAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,IAAK,MAAK,KAAK,OAAO,IAAI,CAAC,IAAI,KAAK,CAAC;AACtE,YAAI,KAAK,KAAK;AACZ,mBAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,IAAK,MAAK,KAAK,OAAO,IAAI,KAAK,SAAS,CAAC,IAAI,KAAK,YAAY,EAAE,SAAS,CAAC;AAAA,QAC7G;AACA,eAAO;AAAA,MACT;AAAA,MACA,KAAK,UAAU;AAGb,YAAI,EAAE,SAAS,QAAQ,kBAAkB;AACvC,gBAAM,aAAa,EAAE,SAAS;AAC9B,gBAAM,MAAM,KAAK,KAAK,EAAE,QAAQ,UAAU,CAAE,EAAE;AAoB9C,gBAAM,SAAS,KAAK,MAAM,QAAQ,IAAI,CAAC;AACvC,gBAAM,QAAkB,CAAC;AACzB,mBAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,QAAQ,KAAK;AACzC,gBAAI,MAAM,WAAY;AACtB,kBAAM,MAAM,oBAAoB,EAAE,QAAQ,CAAC,CAAE;AAC7C,gBAAI,QAAQ,KAAM;AAClB,kBAAM,KAAK,KAAK,SAAS,GAAG,GAAG,KAAK,QAAQ,KAAK,KAAK,EAAE,QAAQ,CAAC,CAAE,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;AAAA,UAC1F;AACA,gBAAMC,QAAO,KAAK,SAAS,WAAW,IAAI,MAAM,MAAM;AACtD,eAAK,KAAKA,QAAO,CAAC,IAAI;AACtB,eAAK,KAAKA,QAAO,CAAC,IAAI,MAAM,UAAU;AACtC,mBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAK,MAAK,KAAKA,QAAO,IAAI,CAAC,IAAI,MAAM,CAAC;AACxE,iBAAOA;AAAA,QACT;AAQA,cAAM,QAAQ,EAAE,SAAS,QAAQ,yBAC7B,EAAE,SAAS,gBACX,EAAE,QAAQ,IAAI,CAAC,GAAG,MAAM,CAAC;AAC7B,cAAM,OAAO,MAAM,IAAI,OAAK,EAAE,QAAQ,CAAC,CAAE;AAgBzC,cAAM,YAAY,KAAK,MAAM,QAAQ,IAAI,CAAC;AAC1C,cAAM,OAAO,KAAK,IAAI,CAAC,GAAG,MAAM;AAC9B,gBAAM,MAAM,MAAM,CAAC;AACnB,gBAAM,SAAS,EAAE,QAAQ,GAAG;AAC5B,gBAAM,QAAQ,KAAK,KAAK,CAAC,EAAE;AAC3B,gBAAM,KAAK,WAAW,QAAQ,WAAW,UAAa,OAAO,WAAW,IACpE,QACA,KAAK,OAAO,OAAO,MAAM;AAC7B,gBAAM,OAAO,EAAE,MAAM,GAAG;AACxB,gBAAM,QAAQ,SAAS,QAAQ,SAAS,SACpC,KACA,KAAK,KAAK,YAAY,KAAK,GAAG,MAAM,EAAE,WAAW,GAAG,KAAK,IAAI,GAAG,IAAI,KAAK,SAAS,eAAe,CAAC,CAAC,CAAC;AAKxG,iBAAO,KAAK,QAAQ,OAAO,YAAY,GAAG,GAAG,CAAC;AAAA,QAChD,CAAC;AA8BD,cAAM,KAAK,KAAK,YAAY;AAC5B,cAAM,UAAU,KAAK,IAAI,OAAK,aAAa,GAAG,oBAAI,IAAI,GAAG,EAAE,IAAI,KAAK,KAAK,UAAU,WAAW,GAAG,oBAAI,IAAI,GAAG,EAAE,CAAC,CAAC;AAChH,cAAM,UAAU,KAAK,KAAK;AAC1B,aAAK,KAAK,KAAK,OAAO;AAOtB,cAAM,OAAO,KAAK,SAAS,WAAW,IAAI,IAAI,KAAK,MAAM;AACzD,aAAK,KAAK,OAAO,CAAC,IAAI;AACtB,aAAK,KAAK,OAAO,CAAC,IAAI,KAAK;AAM3B,aAAK,KAAK,OAAO,CAAC,IAAI,KAAK,SAAS,KAAK,QAAQ,OAAK,eAAe,CAAC,CAAC,CAAC;AACxE,iBAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,eAAK,KAAK,OAAO,IAAI,CAAC,IAAI,KAAK,CAAC;AAChC,eAAK,KAAK,OAAO,IAAI,KAAK,SAAS,CAAC,IAAI,KAAK,SAAS,eAAe,KAAK,CAAC,CAAE,CAAC;AAAA,QAChF;AACA,eAAO;AAAA,MACT;AAAA,MACA,KAAK;AAAA,MACL,KAAK,aAAa;AAChB,cAAM,QAAQ,KAAK,KAAK,EAAE,MAAM,EAAE;AAClC,cAAM,KAAK,EAAE,cAAc,UAAU;AACrC,cAAM,MAAM,EAAE,QAAQ,SAAS,IAAI,EAAE;AAMrC,eAAO,KAAK,MACR,KAAK,KAAK,IAAI,OAAO,KAAK,EAAE,OAAO,IAAI,IAAI,GAAG,KAAK,SAAS,eAAe,EAAE,MAAM,CAAC,GAAG,EAAE,IACzF,KAAK,KAAK,IAAI,OAAO,KAAK,EAAE,OAAO,IAAI,IAAI,CAAC;AAAA,MAClD;AAAA,MACA,KAAK,SAAS;AACZ,cAAM,QAAQ,KAAK,KAAK,EAAE,MAAM,EAAE;AAClC,cAAM,MAAM,KAAK,KAAK,EAAE,SAAS,EAAE;AAYnC,cAAM,SAAS,EAAE,aAAa,UAAU,IAAI,MAAM,EAAE,mBAAmB,OAAO,IAAI,MAAM,EAAE,OAAO,IAAI,IAAI;AAMzG,YAAI,KAAK,KAAK;AACZ,iBAAO,KAAK;AAAA,YACV;AAAA,YAAQ;AAAA,YAAO,EAAE;AAAA,YAAK,EAAE,OAAO;AAAA,YAAI;AAAA,YAAK;AAAA,YACxC,KAAK,SAAS,eAAe,EAAE,MAAM,CAAC;AAAA,YAAG,KAAK,UAAU,WAAW,EAAE,WAAW,oBAAI,IAAI,GAAG,KAAK,YAAY,CAAC,CAAC;AAAA,UAChH;AAAA,QACF;AACA,eAAO,EAAE,OAAO,IACZ,KAAK,KAAK,QAAQ,OAAO,EAAE,KAAK,EAAE,OAAO,IAAI,KAAK,OAAO,KAAK,SAAS,eAAe,EAAE,MAAM,CAAC,CAAC,IAChG,KAAK,KAAK,QAAQ,OAAO,EAAE,KAAK,EAAE,OAAO,IAAI,KAAK,KAAK;AAAA,MAC7D;AAAA,MACA,KAAK;AACH,eAAO,KAAK,KAAK,QAAQ,KAAK,KAAK,EAAE,MAAM,EAAE,EAAE;AAAA,MACjD,KAAK,aAAa;AAQhB,cAAM,QAAQ,EAAE,OAAO;AACvB,YAAI,MAAM,QAAQ,cAAc,CAAC,KAAK,KAAK,IAAI,EAAE,MAAM,KAAK,CAAC,KAAK,QAAQ,IAAI,EAAE,MAAM,GAAG;AACvF,gBAAM,OAAO,MAAM,QAAQ,IAAI,OAAK,KAAK,KAAK,CAAC,EAAE,EAAE;AACnD,gBAAM,OAAO,KAAK,SAAS,SAAS,IAAI,KAAK,UAAU,KAAK,MAAM,KAAK,SAAS,EAAE;AAClF,eAAK,KAAK,OAAO,CAAC,IAAI,KAAK,GAAG,EAAE,IAAI,EAAE,SAAS,IAAI;AACnD,eAAK,KAAK,OAAO,CAAC,IAAI,KAAK;AAC3B,mBAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,IAAK,MAAK,KAAK,OAAO,IAAI,CAAC,IAAI,KAAK,CAAC;AACtE,cAAI,KAAK,KAAK;AACZ,qBAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,IAAK,MAAK,KAAK,OAAO,IAAI,KAAK,SAAS,CAAC,IAAI,KAAK,YAAY,MAAM,SAAS,CAAC;AAAA,UACjH;AACA,iBAAO;AAAA,QACT;AACA,cAAM,QAAQ,KAAK,KAAK,EAAE,MAAM,EAAE;AAClC,eAAO,KAAK,KAAK,UAAU,KAAK,GAAG,EAAE,IAAI,EAAE,SAAS,IAAI,GAAG,KAAK;AAAA,MAClE;AAAA,MACA,KAAK,QAAQ;AACX,cAAM,QAAQ,KAAK,KAAK,EAAE,MAAM,EAAE;AAClC,eAAO,KAAK,KAAK,SAAS,KAAK,GAAG,EAAE,IAAI,EAAE,SAAS,IAAI,GAAG,KAAK;AAAA,MACjE;AAAA,MACA,KAAK,QAAQ;AAaX,YAAI,EAAE,SAAS,OAAW,qBAAoB;AAC9C,cAAM,QAAQ,KAAK,KAAK,EAAE,MAAM,EAAE;AAKlC,cAAM,SAAS,KAAK,SAAS,aAAa;AAuB1C,cAAM,kBAAkB,EAAE,YAAY;AACtC,cAAM,gBAAgB,EAAE,UAAU,SAAY,iBAAiB,CAAC,IAAI;AACpE,cAAM,eAAe,EAAE,UAAU,SAAY,gBAAgB,CAAC,IAAI;AAClE,cAAM,gBAAgB,EAAE,UAAU,SAAY,iBAAiB,CAAC,IAAI;AAGpE,cAAM,cAAc,mBAAmB,EAAE,MAAM,MAAM,UAAU;AAC/D,cAAM,SAAS,UAAU,EAAE,kBAAkB,QAAQ,EAAE,mBAAmB,QAAQ,gBAAgB,IAAI,MACjG,UAAU,eAAe,IAAI,MAC7B,cAAc,KAAK,MACnB,EAAE,aAAa,OAAO,KAAK,MAC3B,EAAE,WAAW,OAAO,KAAK,MACzB,EAAE,mBAAmB,OAAO,MAAM,MAGlC,EAAE,kBAAkB,OAAO,IAAI;AACpC,cAAM,OAAO,KAAK;AAAA,UAChB,KAAK,QAAQ,gBAAgB;AAAA,UAC7B,EAAE,UAAU,SAAY,KAAK,KAAK,GAAG,EAAE,OAAO,EAAE,YAAY,IAAI;AAAA,UAChE;AAAA,UAAO;AAAA,UACP,EAAE,WAAW;AAAA,UACb,KAAK,SAAS,EAAE,IAAI;AAAA;AAAA;AAAA;AAAA,UAIpB,EAAE,SAAS,SAAY,KAAK,KAAK,SAAS,EAAE,IAAI;AAAA,QAClD;AAaA,YAAI,aAAa,EAAE,MAAM,EAAG,QAAO;AACnC,cAAM,KAAK,EAAE,OAAO,MAAM;AAC1B,YAAI,GAAG,SAAS,MAAO,QAAO;AAC9B,cAAM,MAAM,KAAK,UAAU,EAAE;AAC7B,YAAI,MAAM,EAAG,QAAO;AACpB,cAAM,IAAI,eAAe,EAAE,MAAM;AACjC,eAAO,KAAK,KAAK,SAAS,KAAK,MAAM,KAAK,SAAS,EAAE,SAAS,IAAI,IAAI,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC;AAAA,MACxF;AAAA,MACA,KAAK;AACH,eAAO,KAAK,KAAK,UAAU,KAAK,KAAK,EAAE,MAAM,EAAE,EAAE;AAAA,MACnD,KAAK;AACH,eAAO,KAAK,KAAK,WAAW,EAAE,aAAa,SAAY,KAAK,KAAK,KAAK,EAAE,QAAQ,EAAE,EAAE;AAAA,MACtF,KAAK,YAAY;AAGf,YAAI,iBAAiB,EAAE,QAA+B,GAAG;AACvD,gBAAM,IAAI,qBAAqB,gCAAgC;AAAA,QACjE;AACA,cAAM,MAAM,KAAK,KAAK,EAAE,QAA+B,EAAE;AAOzD,cAAM,aAAa,KAAK,MAAM,WAAW,IAAI,CAAC;AAC9C,YAAI,UAAU;AACd,cAAM,OAAiB,CAAC;AACxB,cAAMC,UAAmB,CAAC;AAC1B,cAAM,MAAgB,CAAC,GAAG,SAAmB,CAAC;AAC9C,cAAM,OAAiB,CAAC,GAAG,UAAoB,CAAC;AAChD,cAAM,QAA0D,CAAC;AACjE,cAAM,WAAqB,CAAC;AAG5B,mBAAW,KAAK,EAAE,OAAO;AACvB,gBAAM,MAAM,KAAK;AACjB,eAAK,KAAK,KAAK,QAAQ,KAAK,KAAK,EAAE,MAAM,EAAE,IAAI,aAAa,SAAS,GAAG,CAAC,CAAC;AAC1E,UAAAA,QAAO,KAAK,iBAAiB,CAAC,IAAI,IAAI,CAAC;AACvC,qBAAW,MAAM,EAAE,MAAM;AACvB,qBAAS,KAAK,KAAK,UAAU,EAAE,CAAC;AAChC,gBAAI,EAAE,iBAAiB;AAAE,mBAAK,KAAK,aAAa,EAAE,CAAC;AAAG,sBAAQ,KAAK,GAAG;AAAA,YAAE,OACnE;AAAE,kBAAI,KAAK,EAAE;AAAG,qBAAO,KAAK,GAAG;AAAA,YAAE;AAAA,UACxC;AAAA,QACF;AACA,cAAM,OAAO,EAAE,YAAY,GAAG,UAAU,GAAG,SAAS,EAAE;AACtD,mBAAW,KAAK,EAAE,YAAY,CAAC,GAAG;AAChC,gBAAM,MAAM,KAAK;AACjB,eAAK,KAAK,KAAK,QAAQ,KAAK,KAAK,EAAE,MAAM,EAAE,IAAI,aAAa,SAAS,GAAG,CAAC,CAAC;AAC1E,UAAAA,QAAO,KAAK,iBAAiB,CAAC,IAAI,IAAI,CAAC;AAavC,cAAI,CAAC,EAAE,iBAAiB;AAAE,kBAAM,KAAK,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,OAAO,EAAE,SAAS,IAAI,GAAG,CAAC;AAAG;AAAA,UAAS;AAC5F,cAAI,EAAE,SAAS,WAAW;AACxB,kBAAM,IAAI,EAAE,SAAS;AACrB,kBAAM,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,GAAG,IAAI,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC;AAC3D;AAAA,UACF;AACA,gBAAM,KAAK,CAAC,EAAE,SAAS,eAAe,IAAI,GAAG,aAAa,EAAE,KAAK,GAAG,IAAI,GAAG,CAAC;AAAA,QAC9E;AACA,cAAM,QAAQ,EAAE,cAAc,SAC1B,KACA,KAAK,QAAQ,KAAK,KAAK,EAAE,SAAS,EAAE,IAAI,aAAa,SAAS,GAAG,CAAC;AACtE,cAAM,SAAS,KAAK,IAAI;AACxB,aAAK,IAAI,KAAK,EAAE,KAAK,QAAQ,MAAM,SAAS,OAAO,QAAAA,SAAQ,SAAS,CAAC;AACrE,cAAM,OAAO,KAAK,SAAS,aAAa,IAAI,KAAK,MAAM;AACvD,aAAK,KAAK,OAAO,CAAC,IAAI;AACtB,aAAK,KAAK,OAAO,CAAC,IAAI;AACtB,aAAK,KAAK,OAAO,CAAC,IAAI;AAgBtB,cAAM,cAAc,EAAE,cAAc,SAChC,QACA,iBAAiB,EAAE,QAAQ,EAAE,WAAkC,YAAY,EAAE,wBAAwB,KAAK,CAAC;AAC/G,aAAK,KAAK,OAAO,CAAC,IAAI,cAAc,IAAI;AACxC,aAAK,KAAK,OAAO,CAAC,IAAI,KAAK;AAC3B,iBAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,IAAK,MAAK,KAAK,OAAO,IAAI,CAAC,IAAI,KAAK,CAAC;AACtE,eAAO;AAAA,MACT;AAAA,MACA,KAAK;AACH,eAAO,KAAK,KAAK,UAAU,KAAK,SAAS,EAAE,IAAI,GAAG,KAAK,KAAK,EAAE,MAAM,EAAE,EAAE;AAAA,MAC1E,KAAK,QAAQ;AAeX,cAAM,UAAW,EAAwC;AACzD,cAAM,SAAS,YAAY,SAAY,SAAY,KAAK,UAAU,OAAO;AACzE,YAAI,WAAW,UAAa,CAAC,SAAS,QAAQ,CAAC,EAAG,QAAO,KAAK,UAAU,GAAG,MAAM;AACjF,YAAI;AACJ,YAAI;AAAE,qBAAW,EAAE,MAAM;AAAA,QAAE,QACrB;AACJ,eAAK,YAAY,IAAI,yDAAoD;AACzE,iBAAO,KAAK,KAAK,SAAS,KAAK,GAAG,GAAG,IAAI,CAAC;AAAA,QAC5C;AACA,eAAO,KAAK,UAAU,GAAG,QAAQ;AAAA,MACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,KAAK;AACH,eAAO,KAAK,KAAK,QAAQ,KAAK,KAAK,EAAE,MAAM,EAAE,IAAI,KAAK,SAAS,CAAC,OAAO,EAAE,OAAO,IAAI,GAAG,CAAC,CAAC;AAAA,MAC3F,KAAK;AAEH,eAAO,KAAK,KAAK,UAAU,KAAK,GAAG,EAAE,WAAW,EAAE,WAAW,IAAI,GAAG,KAAK,SAAS,CAAC,MAAM,CAAC,CAAC;AAAA,MAC7F,KAAK;AAQH,YAAI,EAAE,UAAU,OAAW,0BAAyB,KAAK,cAAc,EAAE,KAAK;AAK9E,eAAO,KAAK;AAAA,UACV;AAAA,UACA,EAAE,aAAa,gBAAgB,IAAI;AAAA,UACnC,EAAE,UAAU,SAAY,KAAK,KAAK,UAAU,EAAE,KAAK;AAAA,UACnD,KAAK,SAAS,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAAA,QACtC;AAAA,MACF,KAAK,WAAW;AAMd,YAAI,CAAC,eAAe,EAAE,KAAK,GAAG;AAC5B,eAAK,YAAY,IAAI,4DAAuD;AAAA,QAC9E;AACA,eAAO,KAAK,KAAK,YAAY,KAAK,SAAS,EAAE,KAAK,GAAG,KAAK,KAAK,EAAE,MAAM,EAAE,EAAE;AAAA,MAC7E;AAAA,MACA,KAAK;AAMH,eAAO,KAAK,KAAK,SAAS,KAAK,KAAK,EAAE,MAAM,EAAE,IAAI,KAAK,SAAS,CAAC,QAAQ,EAAE,OAAO,IAAI,GAAG,CAAC,CAAC;AAAA;AAAA;AAAA,MAG7F,KAAK,WAAW;AACd,cAAM,QAAQ,KAAK,KAAK,YAAY,KAAK,KAAK,EAAE,MAAM,EAAE,EAAE;AAS1D,cAAM,KAAK,EAAE,OAAO,MAAM;AAC1B,YAAI,GAAG,SAAS,SAAS,aAAa,EAAE,MAAM,EAAG,QAAO;AACxD,cAAM,MAAM,KAAK,UAAU,EAAE;AAC7B,YAAI,MAAM,EAAG,QAAO;AACpB,cAAM,IAAI,eAAe,EAAE,MAAM;AACjC,eAAO,KAAK,KAAK,SAAS,KAAK,OAAO,KAAK,SAAS,EAAE,SAAS,IAAI,IAAI,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC;AAAA,MACzF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,KAAK;AACH,eAAO,KAAK;AAAA,UACV,KAAK,KAAK,UAAU,KAAK,KAAK,EAAE,MAAM,EAAE,IAAI,KAAK,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC;AAAA,UACpE,KAAK,MAAM,OAAO,IAAI,CAAC,IAAI,CAAC;AAAA,UAC5B;AAAA,QACF;AAAA;AAAA,MAEF,KAAK;AACH,eAAO,KAAK,KAAK,EAAE,MAAM,EAAE;AAAA,MAC7B,KAAK,WAAW;AAiCd,cAAM,MAAM,EAAE,kBAAkB;AAChC,cAAM,KAAK,MAAM,eAAe;AAchC,cAAM,SAAS,EAAE,gBAAgB,WAAW,IAAI,MAC3C,EAAE,iBAAiB,UACjB,EAAE,aAAa,MAAM,yBAAyB,QAC9C,EAAE,gBAAgB,WAAW,IAAI;AAMxC,cAAM,cAAc,KAAK;AACzB,YAAI,EAAE,gBAAgB,KAAM,MAAK,eAAe;AAAA,iBACvC,EAAE,iBAAiB,OAAW,MAAK,eAAe,EAAE;AAC7D,cAAM,SAAS,KAAK,KAAK,EAAE,MAAM,EAAE;AACnC,aAAK,eAAe;AACpB,YAAI,EAAE,gBAAgB,KAAM,QAAO,KAAK,KAAK,IAAI,IAAI,QAAQ,KAAK;AAClE,YAAI,EAAE,iBAAiB,QAAW;AAChC,iBAAO,OAAO,UAAU,IAAI,KAAK,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI;AAAA,QACjE;AACA,eAAO,KAAK,KAAK,IAAI,KAAK,WAAW,EAAE,YAAY,GAAG,QAAQ,KAAK;AAAA,MACrE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYA,KAAK;AACH,aAAK,YAAY,IAAI,GAAG,EAAE,IAAI,oEAA+D;AAC7F,eAAO,KAAK,KAAK,SAAS,KAAK,GAAG,GAAG,IAAI,CAAC;AAAA,MAC5C;AAIE,cAAM,IAAI,qBAAqB,EAAE,GAAG;AAAA,IACxC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,sBAA4B;AAClC,UAAMC,WAAU,CAAC,OAAuB;AACtC,UAAIL,KAAI;AACR,eAAS,IAAI,GAAG,IAAI,KAAK,KAAK,UAAU,KAAK,KAAKA,EAAC,MAAM,SAAS,IAAK,CAAAA,KAAI,KAAK,KAAKA,KAAI,CAAC;AAC1F,aAAOA;AAAA,IACT;AACA,UAAM,QAAQ,CAAC,OAAyB;AACtC,cAAQ,KAAK,KAAK,EAAE,GAAG;AAAA,QACrB,KAAK;AAAS,iBAAO,CAAC,KAAK,CAAC;AAAA,QAC5B,KAAK;AAAA,QAAS,KAAK;AAAA,QAAQ,KAAK;AAAA,QAAQ,KAAK;AAAA,QAAS,KAAK;AAAA,QAAW,KAAK;AAAA,QAAY,KAAK;AAAA,QAAU,KAAK;AAAQ,iBAAO,CAAC,KAAK,CAAC;AAAA,QACjI,KAAK;AAAA,QAAU,KAAK;AAAA,QAAc,KAAK;AAAA,QAAgB,KAAK;AAAA,QAAY,KAAK;AAAA,QAAU,KAAK;AAAA,QAAS,KAAK;AAAA,QAAS,KAAK;AAAe,iBAAO,CAAC,KAAK,CAAC;AAAA,QACrJ,KAAK;AAAA,QAAQ,KAAK;AAAS,iBAAO,MAAM,KAAK,EAAE,QAAQ,KAAK,KAAK,KAAK,CAAC,EAAG,GAAG,CAAC,GAAG,MAAM,KAAK,IAAI,CAAC;AAAA,QACjG,KAAK;AAAS,iBAAO,MAAM,KAAK,EAAE,QAAQ,KAAK,KAAK,KAAK,CAAC,EAAG,GAAG,CAAC,GAAG,MAAM,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAQpF,KAAK;AAAW,iBAAO,MAAM,KAAK,EAAE,QAAQ,KAAK,KAAK,KAAK,CAAC,EAAG,GAAG,CAAC,GAAG,MAAM,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,QAItF,KAAK;AAAW,iBAAO,CAAC,KAAK,GAAG,GAAG,MAAM,KAAK,EAAE,QAAQ,KAAK,KAAK,KAAK,CAAC,EAAG,GAAG,CAAC,GAAG,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC;AAAA;AAAA,QAEvG,KAAK;AAAW,iBAAO,CAAC,KAAK,CAAC;AAAA,QAC9B,KAAK;AAAA,QAAQ,KAAK;AAAS,iBAAO,KAAK,KAAK,KAAK,CAAC,KAAM,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AAAA,QACtF;AAAS,iBAAO,CAAC;AAAA,MACnB;AAAA,IACF;AACA,UAAM,OAAO,oBAAI,IAAY;AAK7B,UAAM,OAAqB,CAAC;AAC5B,eAAW,KAAK,KAAK,OAAO;AAC1B,UAAI,EAAE,aAAa,OAAW,MAAK,KAAK,EAAE,QAAQ;AAClD,WAAK,KAAK,GAAG,EAAE,IAAI;AAAA,IACrB;AACA,eAAW,OAAO,KAAK,aAAc,MAAK,KAAK,GAAG,GAAG;AACrD,UAAM,QAAQ,CAAC,GAAG,OAAO,OAAO,KAAK,KAAK,GAAG,GAAG,KAAK,IAAI,OAAK,EAAE,CAAC,CAAC,CAAC;AACnE,WAAO,MAAM,SAAS,GAAG;AACvB,YAAM,KAAK,MAAM,IAAI;AACrB,UAAI,KAAK,IAAI,EAAE,EAAG;AAClB,WAAK,IAAI,EAAE;AACX,iBAAW,QAAQ,MAAM,EAAE,GAAG;AAC5B,cAAM,SAASK,SAAQ,KAAK,KAAK,IAAI,CAAE;AACvC,aAAK,KAAK,IAAI,IAAI;AAClB,cAAM,KAAK,MAAM;AAAA,MACnB;AAAA,IACF;AACA,eAAW,QAAQ,OAAO,KAAK,KAAK,KAAK,EAAG,MAAK,MAAM,IAAI,IAAIA,SAAQ,KAAK,MAAM,IAAI,CAAE;AACxF,UAAM,MAAM,CAAC,MAA8B,CAACA,SAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/D,SAAK,QAAQ,KAAK,MAAM,IAAI,QAAM;AAAA,MAChC,GAAG;AAAA,MACH,MAAM,EAAE,KAAK,IAAI,GAAG;AAAA,MACpB,GAAI,EAAE,aAAa,SAAY,CAAC,IAAI,EAAE,UAAU,IAAI,EAAE,QAAQ,EAAE;AAAA,IAClE,EAAE;AACF,SAAK,eAAe,KAAK,aAAa,IAAI,SAAO,IAAI,IAAI,GAAG,CAAC;AAAA,EAC/D;AAAA,EAEA,SAAuB;AACrB,QAAI,KAAK,KAAK,WAAW,EAAG,MAAK,KAAK,QAAQ;AAC9C,SAAK,oBAAoB;AACzB,WAAO,gBAAgB;AAAA,MACrB,MAAM,KAAK;AAAA,MAAM,GAAG,KAAK;AAAA,MAAG,KAAK,KAAK;AAAA,MAAK,IAAI,KAAK;AAAA,MACpD,IAAI,KAAK;AAAA,MAAI,MAAM,KAAK;AAAA,MAAM,KAAK,KAAK;AAAA,MAAK,OAAO,KAAK;AAAA,MACzD,GAAI,KAAK,WAAW,SAAY,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO;AAAA,MAC3D,GAAI,KAAK,aAAa,EAAE,YAAY,EAAW,IAAI,CAAC;AAAA,MACpD,GAAI,KAAK,aAAa,WAAW,IAC7B,CAAC,IACD,EAAE,UAAU,KAAK,cAAc,YAAY,KAAK,WAAW;AAAA,MAC/D,GAAI,KAAK,MAAM,WAAW,IAAI,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM;AAAA,MACvD,GAAI,KAAK,SAAS,aAAa,SAAY,CAAC,IAAI,EAAE,UAAU,KAAK,SAAS,SAAS;AAAA,MACnF,GAAI,KAAK,YAAY,SAAS,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,GAAG,KAAK,WAAW,EAAE,KAAK,EAAE;AAAA,MACnF,GAAI,KAAK,YAAY,WAAW,IAAI,CAAC,IAAI,EAAE,aAAa,KAAK,YAAY;AAAA,MACzE,GAAI,KAAK,MAAM,EAAE,KAAK,EAAW,IAAI,CAAC;AAAA,MACtC,GAAI,KAAK,QAAQ,SAAY,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI;AAAA,MAClD,OAAO,KAAK,QAAQ,IAAI;AAAA,IAC1B,CAAC;AAAA,EACH;AACF;AAsBA,SAAS,oBAAoB,GAAwB,MAAyC;AAC5F,MAAI,KAAK,IAAI,CAAC,EAAG,QAAO;AACxB,OAAK,IAAI,CAAC;AACV,MAAI,EAAE,MAAM,sBAAsB,KAAM,QAAO;AAC/C,QAAM,IAAI,EAAE;AACZ,UAAQ,EAAE,KAAK;AAAA,IACb,KAAK;AACH,UAAI,EAAE,eAAe,KAAM,QAAO;AAClC;AAAA,IACF,KAAK;AACH,UAAI;AAAE,eAAO,oBAAoB,EAAE,MAAM,GAAG,IAAI;AAAA,MAAE,QAC5C;AAAE,eAAO;AAAA,MAAM;AAAA;AAAA;AAAA,IAGvB,KAAK;AACH,iBAAW,KAAK,EAAE,YAAY,CAAC,EAAG,KAAI,oBAAoB,EAAE,QAAQ,IAAI,EAAG,QAAO;AAClF;AAAA,IACF,KAAK;AACH,aAAO,EAAE,aAAa,SAAY,QAAQ,oBAAoB,EAAE,UAAU,IAAI;AAAA,IAChF;AACE;AAAA,EACJ;AACA,aAAW,KAAK,WAAW,CAAC,EAAG,KAAI,oBAAoB,GAAG,IAAI,EAAG,QAAO;AACxE,SAAO;AACT;AAmBO,SAAS,mBACd,SACA,WAA0B,CAAC,GACwB;AAKnD,QAAM,QAAQ,OAAO,KAAK,OAAO;AACjC,QAAM,OAAO,oBAAI,IAAyB;AAC1C,QAAM,QAAQ,SAAS,eAAe,QACjC,MAAM,KAAK,OAAK,oBAAoB,QAAQ,CAAC,GAAI,IAAI,CAAC;AAM3D,QAAM,WAAW,SAAS,YACrB,MAAM,IAAI,OAAK,QAAQ,CAAC,EAAG,MAAM,eAAe,EAAE,KAAK,OAAO;AACnE,QAAM,mBAAmB;AAAA,IACvB,GAAG;AAAA,IACH,GAAI,aAAa,SAAY,CAAC,IAAI,EAAE,SAAS;AAAA,IAC7C,GAAI,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;AAAA,EACtC;AACA,QAAM,MAAM,IAAI,QAAQ,gBAAgB;AACxC,MAAI,UAAU;AACd,aAAW,QAAQ,MAAO,KAAI,WAAW,MAAM,QAAQ,IAAI,CAAE;AAC7D,QAAM,OAAO,IAAI,OAAO;AACxB,SAAO,EAAE,MAAM,QAAQ,IAAI,OAAO;AACpC;;;ACh8CO,IAAM,YAAY;AAEzB,IAAMC,QAAO,IAAI,IAAI,gBAAgB,MAAM,EAAE,CAAC;AAU9C,SAAS,cAAc,KAA6C;AAClE,MAAI,QAAQ,MAAO,QAAO,gBAAgB,GAAG;AAC7C,MAAI,QAAQ,MAAO,QAAO,gBAAgB,GAAG;AAC7C,MAAI,QAAQ,MAAO,QAAO,gBAAgB,GAAG;AAC7C,QAAM,OAAO,IAAI,MAAM,GAAG,EAAE;AAC5B,MAAI,KAAK,WAAW,GAAG,EAAG,QAAO;AACjC,SAAO,iBAAiB,IAAI;AAC9B;AAUO,IAAM,SAAS,CAAC,MAAc,OAAuB;AAC1D,MAAI,MAAM,MAAM,MAAM,GAAI,QAAO,IAAI,IAAI,cAAc,KAAK,EAAE;AAC9D,MAAI,MAAM,MAAM,MAAM,IAAK,QAAO,IAAI,IAAI,cAAc,EAAE;AAC1D,SAAO,GAAG,IAAI,QAAQ,EAAE;AAC1B;AASA,SAAS,iBAAiB,QAAkC;AAC1D,QAAMC,KAAI,OAAO,CAAC;AAClB,MAAIA,OAAM,UAAaA,OAAM,QAAQC,MAAK,IAAID,EAAC,EAAG,QAAO;AACzD,MAAI,OAAO,SAAS,KAAK,OAAO,OAAO,SAAS,CAAC,MAAMA,GAAG,QAAO;AACjE,QAAM,QAAQ,OAAO,MAAM,GAAG,EAAE;AAChC,QAAM,MAAM,OAAO;AACnB,QAAME,OAAM,OAAO;AAEnB,MAAI;AACJ,MAAI;AACJ,MAAI,IAAI,IAAI,OAAO,gBAAgB,GAAG,MAAMA,IAAG,SAAS,EAAE,KAAK,KAAK;AACpE,MAAI,GAAG;AAAE,WAAO,EAAE,CAAC;AAAG,UAAM,EAAE,CAAC;AAAA,EAAE,OAC5B;AACH,QAAI,IAAI,OAAO,gBAAgBA,IAAG,MAAM,GAAG,SAAS,EAAE,KAAK,KAAK;AAChE,QAAI,GAAG;AAAE,YAAM,EAAE,CAAC;AAAG,aAAO,EAAE,CAAC;AAAA,IAAE;AAAA,EACnC;AACA,MAAI,SAAS,UAAa,QAAQ,OAAW,QAAO;AACpD,QAAM,WAAW,iBAAiB,IAAI;AACtC,MAAI,CAAC,SAAU,QAAO;AACtB,QAAM,MAAMF,GAAE,YAAY,CAAC;AAC3B,QAAMG,SAAQ,CAAC,OAAe,SAAS,KAAK,CAAC,CAAC,IAAI,EAAE,MAAM,MAAM,MAAM,MAAM,EAAE;AAC9E,MAAI,CAACA,OAAM,GAAG,KAAK,CAACA,OAAM,SAAS,EAAG,QAAO;AAC7C,SAAO,EAAE,MAAM,UAAU,OAAO,KAAK,UAAU,aAAa,QAAQ,IAAI;AAC1E;AASA,SAAS,cAAc,QAAkC;AACvD,QAAM,QAAmB,CAAC;AAC1B,MAAI,MAAgB,CAAC;AACrB,QAAM,QAAQ,MAAM;AAClB,QAAI,IAAI,QAAQ;AAAE,YAAM,KAAK,EAAE,MAAM,OAAO,KAAK,KAAK,UAAU,MAAM,CAAC;AAAG,YAAM,CAAC;AAAA,IAAE;AAAA,EACrF;AAIA,QAAM,aAAa,CAAC,OAAiE;AACnF,UAAM,QAAQ,OAAO,QAAQ,KAAK,EAAE;AACpC,QAAI,UAAU,GAAI,QAAO;AACzB,UAAM,OAAO,OAAO,MAAM,KAAK,GAAG,KAAK;AACvC,UAAM,IAAI,oBAAoB,KAAK,IAAI;AACvC,QAAI,CAAC,EAAG,QAAO;AACf,UAAM,MAAM,OAAO,EAAE,CAAC,CAAC;AACvB,UAAM,MAAM,EAAE,CAAC,MAAM,SAAY,MAAM,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,CAAE,IAAI;AAE9D,QAAI,MAAM,KAAK,MAAM,IAAK,QAAO;AACjC,WAAO,EAAE,KAAK,KAAK,KAAK,QAAQ,KAAK,EAAE;AAAA,EACzC;AACA,QAAM,UAAU,CAAC,QAAiC,SAAkB,OAAe;AACjF,UAAMH,KAAI,OAAO,EAAE;AACnB,QAAIA,OAAM,KAAK;AAAE,YAAM,KAAK,EAAE,MAAM,OAAO,QAAQ,SAAS,KAAK,GAAG,KAAK,SAAS,CAAC;AAAG,aAAO;AAAA,IAAE;AAC/F,QAAIA,OAAM,KAAK;AAAE,YAAM,KAAK,EAAE,MAAM,OAAO,QAAQ,SAAS,KAAK,GAAG,KAAK,SAAS,CAAC;AAAG,aAAO;AAAA,IAAE;AAC/F,QAAIA,OAAM,KAAK;AAAE,YAAM,KAAK,EAAE,MAAM,OAAO,QAAQ,SAAS,KAAK,GAAG,KAAK,EAAE,CAAC;AAAG,aAAO;AAAA,IAAE;AACxF,QAAIA,OAAM,KAAK;AACb,YAAM,IAAI,WAAW,EAAE;AACvB,UAAI,GAAG;AAAE,cAAM,KAAK,EAAE,MAAM,OAAO,QAAQ,SAAS,KAAK,EAAE,KAAK,KAAK,EAAE,IAAI,CAAC;AAAG,eAAO,EAAE;AAAA,MAAI;AAAA,IAC9F;AACA,UAAM,KAAK,EAAE,MAAM,OAAO,QAAQ,SAAS,KAAK,GAAG,KAAK,EAAE,CAAC;AAC3D,WAAO;AAAA,EACT;AACA,MAAI,IAAI;AACR,SAAO,IAAI,OAAO,QAAQ;AACxB,UAAMI,MAAK,OAAO,CAAC;AACnB,QAAIA,QAAO,KAAK;AAEd,UAAI,IAAI,IAAI;AACZ,YAAM,MAAM,OAAO,CAAC,MAAM;AAC1B,UAAI,IAAK;AACT,UAAI,OAAO;AACX,aAAO,IAAI,OAAO,UAAU,OAAO,CAAC,MAAM,KAAK;AAC7C,YAAI,OAAO,CAAC,MAAM,MAAM;AAAE,kBAAQ,OAAO,CAAC,KAAM,OAAO,IAAI,CAAC,KAAK;AAAK,eAAK;AAAA,QAAE,OACxE;AAAE,kBAAQ,OAAO,CAAC;AAAI;AAAA,QAAI;AAAA,MACjC;AACA,UAAI,OAAO,CAAC,MAAM,IAAK,QAAO;AAC9B,YAAM,SAAS,iBAAiB,IAAI;AACpC,UAAI,CAAC,OAAQ,QAAO;AACpB,YAAM;AACN,UAAI,IAAI;AACR,WAAK,QAAQ,QAAQ,KAAK,CAAC;AAC3B;AAAA,IACF;AACA,QAAIA,QAAO,MAAM;AACf,YAAM,IAAI,OAAO,IAAI,CAAC;AACtB,UAAI,MAAM,OAAO,MAAM,OAAO,MAAM,KAAK;AACvC,cAAM;AACN,aAAK;AACL,aAAK,QAAQ,gBAAgB,CAAC,GAAG,OAAO,CAAC;AACzC;AAAA,MACF;AAEA,YAAM,MAAM,kBAAkB,QAAQ,CAAC;AACvC,UAAIC;AACJ,UAAI,KAAK;AAAE,QAAAA,MAAK,IAAI;AAAI,YAAI,IAAI;AAAA,MAAK,WAC5B,MAAM,OAAW,QAAO;AAAA,eACxB,KAAK,eAAe;AAAE,QAAAA,MAAK,cAAc,CAAC;AAAI,aAAK;AAAA,MAAE,WACpD,KAAK,OAAO,KAAK,OAAS,KAAK,OAAO,KAAK,IAAM,QAAO;AAAA,WAC7D;AAAE,QAAAA,MAAK,EAAE,YAAY,CAAC;AAAI,aAAK;AAAA,MAAE;AACtC,UAAI,OAAO,CAAC,MAAM,KAAK;AAAE,cAAM;AAAG,cAAM,KAAK,EAAE,MAAM,OAAO,KAAK,CAACA,GAAE,GAAG,UAAU,KAAK,CAAC;AAAG;AAAA,MAAI,MACzF,KAAI,KAAKA,GAAE;AAChB;AAAA,IACF;AACA,QAAID,QAAO,KAAK;AAKd,UAAI,OAAO,IAAI,CAAC,MAAM,OAAO,OAAO,IAAI,CAAC,MAAM,IAAK,QAAO;AAC3D,UAAI,IAAI,IAAI;AACZ,UAAI,QAAQ;AACZ,aAAO,IAAI,OAAO,UAAU,QAAQ,GAAG;AACrC,cAAM,KAAK,OAAO,CAAC;AACnB,YAAI,OAAO,MAAM;AAAE,eAAK;AAAG;AAAA,QAAS;AACpC,YAAI,OAAO,KAAK;AACd,cAAI,IAAI,IAAI;AACZ,cAAI,OAAO,CAAC,MAAM,IAAK;AACvB,iBAAO,IAAI,OAAO,UAAU,OAAO,CAAC,MAAM,KAAK;AAC7C,gBAAI,OAAO,CAAC,MAAM,KAAM,MAAK;AAAA,gBACxB;AAAA,UACP;AACA,cAAI,OAAO,CAAC,MAAM,IAAK,QAAO;AAC9B,cAAI,IAAI;AACR;AAAA,QACF;AACA,YAAI,OAAO,IAAK;AAAA,iBACP,OAAO,IAAK;AACrB;AAAA,MACF;AACA,UAAI,UAAU,EAAG,QAAO;AACxB,YAAM,OAAO,OAAO,MAAM,IAAI,GAAG,IAAI,CAAC;AACtC,YAAM,QAAQ,eAAe,IAAI;AACjC,UAAI,CAAC,SAAS,CAAC,eAAe,KAAK,EAAG,QAAO;AAC7C,YAAMJ,KAAI,OAAO,CAAC;AAElB,UAAIA,OAAM,IAAK,QAAO;AACtB,YAAM;AACN,UAAIA,OAAM,KAAK;AACb,YAAI,gBAAgB,KAAK,EAAG,QAAO;AACnC,cAAM,KAAK,EAAE,MAAM,SAAS,OAAO,KAAK,GAAG,WAAW,KAAK,CAAC;AAC5D,YAAI,IAAI;AAAA,MACV,WAAWA,OAAM,KAAK;AACpB,YAAI,gBAAgB,KAAK,EAAG,QAAO;AACnC,cAAM,KAAK,EAAE,MAAM,SAAS,OAAO,KAAK,GAAG,WAAW,KAAK,CAAC;AAC5D,YAAI,IAAI;AAAA,MACV,WAAWA,OAAM,KAAK;AACpB,cAAM,KAAK,EAAE,MAAM,SAAS,OAAO,KAAK,GAAG,WAAW,MAAM,CAAC;AAC7D,YAAI,IAAI;AAAA,MACV,OAAO;AACL,cAAM,KAAK,EAAE,MAAM,SAAS,OAAO,KAAK,GAAG,WAAW,MAAM,CAAC;AAC7D,YAAI;AAAA,MACN;AACA;AAAA,IACF;AAGA,QAAIC,MAAK,IAAIG,GAAE,EAAG,QAAO;AACzB,UAAM,KAAKA,IAAG,YAAY,CAAC;AAC3B,SAAKA,IAAG;AACR,QAAI,OAAO,CAAC,MAAM,KAAK;AAAE,YAAM;AAAG,YAAM,KAAK,EAAE,MAAM,OAAO,KAAK,CAAC,EAAE,GAAG,UAAU,KAAK,CAAC;AAAG;AAAA,IAAI,MACzF,KAAI,KAAK,EAAE;AAAA,EAClB;AACA,QAAM;AACN,SAAO,MAAM,SAAS,QAAQ;AAChC;AA4BA,SAAS,iBAAiB,OAA2B;AACnD,MAAI,eAAe;AACnB,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,UAAM,IAAI,MAAM,CAAC;AACjB,UAAM,YAAY,EAAE,SAAS,QAAQ,CAAC,EAAE,WAAW,EAAE,OAAO;AAC5D,QAAI,UAAW,gBAAe;AAgB9B,QAAI,EAAE,SAAS,SAAS;AACtB,YAAM,WAAW,kBAAkB,CAAC;AACpC,UAAI,aAAa,eAAe;AAC9B,cAAM,eAAe,MAAM,MAAM,SAAS,KAAK,EAAE,QAAQ,KAAK,CAAC,EAAE;AACjE,YAAI,CAAC,aAAc,QAAO;AAAA,MAC5B,WAAW,aAAa,MAAM;AAC5B,YAAI,CAAC,kBAAkB,UAAU,eAAe,MAAM,MAAM,IAAI,CAAC,CAAC,CAAC,EAAG,QAAO;AAAA,MAC/E;AAAA,IACF;AAOA,UAAM,gBACJ,EAAE,SAAS,QAAQ,EAAE,WACnB,EAAE,SAAS,QAAQ,EAAE,MAAM,EAAE,MAC5B,EAAE,aAAa,EAAE,QAAQ;AAC9B,QAAI,eAAe;AACjB,YAAM,OAAO,eAAe,MAAM,MAAM,IAAI,CAAC,CAAC;AAC9C,UAAI,CAAC,kBAAkB,gBAAgB,CAAC,GAAG,IAAI,EAAG,QAAO;AAAA,IAC3D;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,cAAc,GAA4B,GAAqC;AACtF,SAAO,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,KAAK,GAAG,MAAM,MAAM,OAAO,OAAO,EAAE,CAAC;AAC5E;AAGA,SAAS,aAAa,KAA8B,KAAuC;AACzF,SAAO,IAAI,MAAM,CAAC,CAAC,IAAI,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,KAAK,GAAG,MAAM,MAAM,OAAO,MAAM,GAAG,CAAC;AACjF;AAYA,SAAS,YAAYE,IAAY,GAAqB;AACpD,MAAI,CAACA,GAAE,WAAW,CAAC,EAAE,QAAS,QAAO,aAAaA,GAAE,QAAQ,EAAE,MAAM;AACpE,MAAI,CAACA,GAAE,WAAW,EAAE,QAAS,QAAO,CAAC,cAAcA,GAAE,QAAQ,EAAE,MAAM;AACrE,MAAIA,GAAE,WAAW,CAAC,EAAE,QAAS,QAAO;AACpC,SAAO,aAAa,EAAE,QAAQA,GAAE,MAAM;AACxC;AAGA,SAAS,cAAcA,IAAY,GAAqB;AACtD,MAAI,CAACA,GAAE,WAAW,CAAC,EAAE,QAAS,QAAO,CAAC,cAAcA,GAAE,QAAQ,EAAE,MAAM;AACtE,MAAI,CAACA,GAAE,WAAW,EAAE,QAAS,QAAO,aAAaA,GAAE,QAAQ,EAAE,MAAM;AACnE,MAAIA,GAAE,WAAW,CAAC,EAAE,QAAS,QAAO,aAAa,EAAE,QAAQA,GAAE,MAAM;AACnE,SAAO;AACT;AAMA,SAAS,kBAAkB,GAAoB,GAA6B;AAC1E,MAAI,MAAM,SAAS,MAAM,MAAO,QAAO;AACvC,SAAO,cAAc,GAAG,CAAC;AAC3B;AAUA,SAAS,cAAc,OAAoC;AAIzD,MAAI,MAAM,SAAS,WAAW;AAC5B,WAAO,MAAM,KAAK,IAAI,QAAM;AAC1B,YAAM,QAAQ,MAAM,MAAM,MAAM,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,KAAK,KAAK;AACjF,aAAO,UAAU,KACb,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,GAA8B,SAAS,MAAM,IAChE,EAAE,QAAQ,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,KAAK,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,GAA8B,SAAS,MAAM;AAAA,IACpJ,CAAC;AAAA,EACH;AACA,MAAI,MAAM,SAAS,MAAO,QAAO;AACjC,QAAM,MAAiB,CAAC;AACxB,aAAW,KAAK,MAAM,OAAO;AAC3B,QAAI,EAAE,SAAS,OAAO;AACpB,UAAI,EAAE,SAAU,QAAO;AACvB,iBAAW,MAAM,EAAE,IAAK,KAAI,KAAK,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,MAAM,CAAC;AAAA,IACzE,WAAW,EAAE,SAAS,SAAS,EAAE,QAAQ,EAAE,OAAO,OAAO,SAAS,EAAE,GAAG,GAAG;AAGxE,eAAS,IAAI,GAAG,IAAI,EAAE,KAAK,IAAK,KAAI,KAAK,EAAE,QAAQ,EAAE,QAAQ,SAAS,EAAE,QAAQ,CAAC;AAAA,IACnF,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO,IAAI,SAAS,MAAM;AAC5B;AAeA,SAAS,0BAA0B,OAA2B;AAC5D,MAAI,MAAM,SAAS,SAAS,MAAM,SAAU,QAAO;AACnD,QAAM,QAAqB,CAAC;AAC5B,aAAW,OAAO,MAAM,MAAM;AAC5B,UAAM,IAAI,cAAc,GAAG;AAC3B,QAAI,CAAC,EAAG,QAAO;AACf,UAAM,KAAK,CAAC;AAAA,EACd;AACA,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,UAAI,MAAM,EAAG;AACb,YAAM,IAAI,MAAM,CAAC;AACjB,YAAM,IAAI,MAAM,CAAC;AACjB,UAAI,EAAE,SAAS,EAAE,OAAQ;AACzB,UAAI,aAAa;AACjB,eAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;AACjC,YAAI,cAAc,EAAE,CAAC,GAAI,EAAE,CAAC,CAAE,GAAG;AAAE,uBAAa;AAAM;AAAA,QAAM;AAAA,MAC9D;AACA,UAAI,CAAC,WAAY,QAAO;AAAA,IAC1B;AAAA,EACF;AACA,SAAO;AACT;AAcA,SAAS,kBAAkB,MAA2E;AACpG,QAAM,cAAc,uBAAuB,KAAK,KAAK;AACrD,MAAI,gBAAgB,cAAe,QAAO;AAC1C,QAAM,eAAe,CAAC,KAAK,aAAa,KAAK,QAAQ;AACrD,MAAI,aAAc,QAAO;AACzB,QAAM,cAAc,iBAAiB,KAAK,KAAK;AAC/C,MAAI,gBAAgB,MAAO,QAAO;AAClC,MAAI,gBAAgB,KAAM,QAAO;AACjC,QAAM,UAAU,cAAc,CAAC,aAAa,WAAW,CAAC;AACxD,SAAO,YAAY,QAAQ,gBAAgB;AAC7C;AAgBA,SAAS,uBAAuB,OAAkD;AAChF,MAAI,MAAM,SAAS,QAAS,QAAO,EAAE,QAAQ,MAAM,QAAQ,SAAS,MAAM;AAC1E,MAAI,MAAM,SAAS,QAAS,QAAO,EAAE,QAAQ,MAAM,MAAM,SAAS,MAAM;AACxE,MAAI,MAAM,SAAS,UAAW,QAAO;AACrC,MAAI,MAAM,SAAS,OAAO;AACxB,UAAM,OAAO,MAAM,MAAM,MAAM,MAAM,SAAS,CAAC;AAC/C,QAAI,KAAK,SAAS,OAAO;AAiBvB,aAAO,KAAK,WAAW,gBAAgB;AAAA,IACzC;AACA,QAAI,KAAK,SAAS,OAAO;AAKvB,UAAI,KAAK,MAAM,KAAK,IAAK,QAAO,EAAE,QAAQ,KAAK,QAAQ,SAAS,KAAK,QAAQ;AAC7E,aAAO;AAAA,IACT;AAIA,WAAO,kBAAkB,IAAI;AAAA,EAC/B;AACA,MAAI,MAAM,SAAS,OAAO;AASxB,QAAI,CAAC,MAAM,SAAU,QAAO,0BAA0B,KAAK,IAAI,OAAO;AACtE,UAAM,UAAU,MAAM,KAAK,IAAI,sBAAsB;AACrD,QAAI,QAAQ,KAAK,OAAK,MAAM,aAAa,EAAG,QAAO;AACnD,UAAM,WAAW,QAAQ,OAAO,CAAC,MAAoB,MAAM,IAAI;AAC/D,QAAI,SAAS,WAAW,EAAG,QAAO;AAClC,UAAM,UAAU,cAAc,QAAQ;AACtC,WAAO,YAAY,QAAQ,gBAAgB;AAAA,EAC7C;AAEA,SAAO;AACT;AAMA,SAAS,qBAAqB,OAAkB,SAAkB,UAA4B;AAC5F,QAAM,OAAO,uBAAuB,KAAK;AACzC,MAAI,SAAS,cAAe,QAAO;AACnC,MAAI,SAAS,KAAM,QAAO;AAK1B,SAAO,WAAW,YAAY,MAAM,OAAO,IAAI,cAAc,MAAM,OAAO;AAC5E;AAUA,SAAS,uBAAuB,QAA0C;AACxE,MAAI,CAAC,OAAO,SAAS,GAAG,EAAG,QAAO;AAClC,aAAW,YAAY,CAAC,MAAM,KAAK,GAAY;AAC7C,UAAMC,QAAO,WAAW,QAAQ;AAChC,UAAM,MAAM,OAAO,YAAYA,KAAI;AACnC,QAAI,QAAQ,GAAI;AAIhB,UAAM,UAAU,kBAAkB,OAAO,MAAM,MAAMA,MAAK,QAAQ,EAAE,CAAC;AACrE,QAAI,CAAC,QAAS;AACd,WAAO,EAAE,MAAM,OAAO,MAAM,GAAG,GAAG,GAAG,QAAQ,QAAQ,QAAQ,cAAc,QAAQ,SAAS,SAAS;AAAA,EACvG;AACA,SAAO;AACT;AAaA,SAAS,iBAAiB,QAAwB;AAChD,SAAO,OAAO,WAAW,KAAK,GAAG;AAC/B,QAAI,QAAQ;AACZ,QAAI,IAAI;AACR,QAAI,KAAK;AACT,WAAO,IAAI,OAAO,UAAU,QAAQ,GAAG;AACrC,YAAMH,MAAK,OAAO,CAAC;AACnB,UAAIA,QAAO,MAAM;AAAE,aAAK;AAAG;AAAA,MAAS;AACpC,UAAIA,QAAO,KAAK;AACd,YAAI,IAAI,IAAI;AACZ,YAAI,OAAO,CAAC,MAAM,IAAK;AACvB,eAAO,IAAI,OAAO,UAAU,OAAO,CAAC,MAAM,KAAK;AAC7C,cAAI,OAAO,CAAC,MAAM,KAAM,MAAK;AAAA,cACxB;AAAA,QACP;AACA,YAAI,OAAO,CAAC,MAAM,KAAK;AAAE,eAAK;AAAO;AAAA,QAAM;AAC3C,YAAI,IAAI;AACR;AAAA,MACF;AACA,UAAIA,QAAO,IAAK;AAAA,eACPA,QAAO,IAAK;AACrB;AAAA,IACF;AACA,QAAI,CAAC,MAAM,UAAU,KAAK,MAAM,OAAO,OAAQ;AAC/C,aAAS,OAAO,MAAM,GAAG,EAAE;AAAA,EAC7B;AACA,SAAO;AACT;AAYA,SAAS,yBAAyB,QAAiC;AACjE,QAAM,OAAO,iBAAiB,MAAM;AACpC,QAAM,QAAkB,CAAC;AACzB,MAAI,QAAQ;AACZ,MAAI,OAAO;AACX,MAAI,IAAI;AACR,SAAO,IAAI,KAAK,QAAQ;AACtB,UAAMA,MAAK,KAAK,CAAC;AACjB,QAAIA,QAAO,MAAM;AAAE,WAAK;AAAG;AAAA,IAAS;AACpC,QAAIA,QAAO,KAAK;AACd,UAAI,IAAI,IAAI;AACZ,UAAI,KAAK,CAAC,MAAM,IAAK;AACrB,aAAO,IAAI,KAAK,UAAU,KAAK,CAAC,MAAM,KAAK;AACzC,YAAI,KAAK,CAAC,MAAM,KAAM,MAAK;AAAA,YACtB;AAAA,MACP;AACA,UAAI,KAAK,CAAC,MAAM,IAAK,QAAO;AAC5B,UAAI,IAAI;AACR;AAAA,IACF;AACA,QAAIA,QAAO,KAAK;AAAE;AAAS;AAAK;AAAA,IAAS;AACzC,QAAIA,QAAO,KAAK;AAAE;AAAS,UAAI,QAAQ,EAAG,QAAO;AAAM;AAAK;AAAA,IAAS;AACrE,QAAIA,QAAO,OAAO,UAAU,GAAG;AAC7B,YAAM,KAAK,KAAK,MAAM,MAAM,CAAC,CAAC;AAC9B,aAAO,IAAI;AACX;AACA;AAAA,IACF;AACA;AAAA,EACF;AACA,MAAI,UAAU,EAAG,QAAO;AACxB,QAAM,KAAK,KAAK,MAAM,IAAI,CAAC;AAC3B,MAAI,MAAM,SAAS,KAAK,MAAM,KAAK,OAAK,EAAE,WAAW,CAAC,EAAG,QAAO;AAChE,SAAO;AACT;AAOA,SAAS,gBAAgB,OAA2B;AAClD,MAAI,MAAM,SAAS,QAAS,QAAO,CAAC,MAAM;AAC1C,MAAI,MAAM,SAAS,YAAa,QAAO,gBAAgB,MAAM,KAAK;AAClE,MAAI,MAAM,SAAS,MAAO,QAAO,MAAM,KAAK,KAAK,eAAe;AAChE,SAAO;AACT;AAOA,SAAS,cAAc,MAA+C;AACpE,MAAI,KAAK,KAAK,OAAK,MAAM,KAAK,EAAG,QAAO;AACxC,QAAM,WAAW;AACjB,MAAI,SAAS,WAAW,EAAG,QAAO,SAAS,CAAC;AAC5C,MAAI,SAAS,KAAK,OAAK,EAAE,OAAO,EAAG,QAAO;AAC1C,SAAO,EAAE,QAAQ,SAAS,QAAQ,OAAK,EAAE,MAAM,GAAG,SAAS,MAAM;AACnE;AAMA,SAAS,gBAAgB,MAAgC;AACvD,MAAI,KAAK,SAAS,MAAO,QAAO,EAAE,QAAQ,CAAC,CAAC,KAAK,IAAI,CAAC,GAAI,KAAK,IAAI,CAAC,CAAE,CAAC,GAAG,SAAS,MAAM;AACzF,MAAI,KAAK,SAAS,MAAO,QAAO,EAAE,QAAQ,KAAK,QAAQ,SAAS,KAAK,QAAQ;AAC7E,SAAO,iBAAiB,KAAK,KAAK;AACpC;AAKA,SAAS,eAAe,OAAmC;AACzD,QAAM,OAA+B,CAAC;AACtC,aAAW,KAAK,OAAO;AACrB,UAAM,YAAY,EAAE,SAAS,QAAQ,CAAC,EAAE,WAAW,EAAE,OAAO;AAC5D,SAAK,KAAK,gBAAgB,CAAC,CAAC;AAC5B,QAAI,UAAW;AAAA,EACjB;AACA,SAAO,cAAc,IAAI;AAC3B;AAiBA,SAAS,eAAe,OAA2B;AACjD,MAAI,MAAM,SAAS,WAAW,MAAM,SAAS,WAAW,MAAM,SAAS,SAAS,MAAM,SAAS,UAAW,QAAO;AACjH,MAAI,MAAM,SAAS,YAAa,QAAO,eAAe,MAAM,KAAK;AAKjE,MAAI,MAAM,SAAS,MAAO,QAAO;AACjC,SAAO;AACT;AAUA,SAAS,iBAAiB,OAAmC;AAC3D,MAAI,gBAAgB,KAAK,EAAG,QAAO;AACnC,UAAQ,MAAM,MAAM;AAAA,IAClB,KAAK;AAAS,aAAO,EAAE,QAAQ,MAAM,QAAQ,SAAS,MAAM;AAAA,IAC5D,KAAK;AAAS,aAAO,EAAE,QAAQ,MAAM,MAAM,SAAS,MAAM;AAAA,IAC1D,KAAK;AAAS,aAAO,EAAE,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,GAAI,MAAM,KAAK,CAAC,CAAE,CAAC,GAAG,SAAS,MAAM;AAAA,IAClF,KAAK;AAAa,aAAO,EAAE,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,GAAI,MAAM,KAAK,CAAC,CAAE,CAAC,GAAG,SAAS,MAAM;AAAA,IACtF,KAAK;AAAU,aAAO,EAAE,QAAQ,CAAC,CAAC,MAAM,OAAO,MAAM,KAAK,CAAC,GAAG,SAAS,MAAM;AAAA,IAC7E,KAAK,WAAW;AACd,YAAM,KAAK,MAAM,KAAK,CAAC;AACvB,UAAI,MAAM,MAAM,MAAM,GAAI,QAAO,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,IAAI,KAAK,EAAE,CAAC,GAAG,SAAS,MAAM;AAC1F,UAAI,MAAM,MAAM,MAAM,IAAK,QAAO,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,IAAI,KAAK,EAAE,CAAC,GAAG,SAAS,MAAM;AAC3F,aAAO,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,MAAM;AAAA,IAC9C;AAAA,IACA,KAAK;AAAO,aAAO,eAAe,MAAM,KAAK;AAAA,IAC7C,KAAK;AAAa,aAAO,iBAAiB,MAAM,KAAK;AAAA;AAAA,IACrD,KAAK,OAAO;AAKV,YAAM,OAAO,MAAM,OAAO,IAAI,CAAC,MAAwB,MAAM,OAAO,QAAQ,CAAE;AAC9E,aAAO,cAAc,IAAI;AAAA,IAC3B;AAAA,EACF;AACF;AAGA,SAAS,iBAAiB,MAAuC;AAC/D,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,UAAM,IAAI,KAAK,CAAC;AAChB,QAAI,MAAM,MAAO,QAAO;AACxB,aAAS,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACxC,YAAM,IAAI,KAAK,CAAC;AAChB,UAAI,MAAM,SAAS,CAAC,cAAc,GAAG,CAAC,EAAG,QAAO;AAAA,IAClD;AAAA,EACF;AACA,SAAO;AACT;AAWA,SAAS,iBAAiB,QAAkC;AAC1D,QAAM,QAAQ,yBAAyB,MAAM;AAC7C,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,OAAoB,CAAC;AAC3B,aAAW,KAAK,OAAO;AACrB,UAAM,MAAM,eAAe,CAAC;AAC5B,QAAI,CAAC,IAAK,QAAO;AACjB,SAAK,KAAK,GAAG;AAAA,EACf;AACA,QAAM,YAAY,KAAK,IAAI,gBAAgB;AAC3C,QAAM,WAAW,iBAAiB,SAAS;AAC3C,SAAO,EAAE,MAAM,OAAO,MAAM,UAAU,QAAQ,UAAU,IAAI,OAAM,MAAM,QAAQ,OAAO,CAAE,EAAE;AAC7F;AAaO,SAAS,eAAe,QAAkC;AAC/D,QAAM,MAAM,iBAAiB,MAAM;AACnC,MAAI,IAAK,QAAO;AAChB,QAAM,KAAK,uBAAuB,MAAM;AACxC,MAAI,IAAI;AACN,UAAM,QAAQ,mBAAmB,GAAG,IAAI;AACxC,QAAI,CAAC,MAAO,QAAO;AACnB,UAAM,UAAmB,EAAE,QAAQ,GAAG,QAAQ,SAAS,GAAG,aAAa;AACvE,QAAI,CAAC,qBAAqB,OAAO,SAAS,GAAG,QAAQ,EAAG,QAAO;AAC/D,WAAO,EAAE,MAAM,aAAa,OAAO,QAAQ,GAAG,QAAQ,cAAc,GAAG,cAAc,UAAU,GAAG,SAAS;AAAA,EAC7G;AACA,SAAO,mBAAmB,MAAM;AAClC;AASA,SAASI,gBAAe,MAA+B;AACrD,QAAM,OAAiB,CAAC;AACxB,MAAI,QAAQ;AACZ,MAAI,OAAO;AACX,MAAI,IAAI;AACR,SAAO,IAAI,KAAK,QAAQ;AACtB,UAAMJ,MAAK,KAAK,CAAC;AACjB,QAAIA,QAAO,MAAM;AAAE,WAAK;AAAG;AAAA,IAAS;AACpC,QAAIA,QAAO,KAAK;AACd,UAAI,IAAI,IAAI;AACZ,UAAI,KAAK,CAAC,MAAM,IAAK;AACrB,aAAO,IAAI,KAAK,UAAU,KAAK,CAAC,MAAM,KAAK;AACzC,YAAI,KAAK,CAAC,MAAM,KAAM,MAAK;AAAA,YACtB;AAAA,MACP;AACA,UAAI,KAAK,CAAC,MAAM,IAAK,QAAO;AAC5B,UAAI,IAAI;AACR;AAAA,IACF;AACA,QAAIA,QAAO,KAAK;AAAE;AAAS;AAAK;AAAA,IAAS;AACzC,QAAIA,QAAO,KAAK;AAAE;AAAS,UAAI,QAAQ,EAAG,QAAO;AAAM;AAAK;AAAA,IAAS;AACrE,QAAIA,QAAO,OAAO,UAAU,GAAG;AAAE,WAAK,KAAK,KAAK,MAAM,MAAM,CAAC,CAAC;AAAG,aAAO,IAAI;AAAA,IAAE;AAC9E;AAAA,EACF;AACA,MAAI,UAAU,EAAG,QAAO;AACxB,OAAK,KAAK,KAAK,MAAM,IAAI,CAAC;AAC1B,SAAO;AACT;AAyBA,SAASK,oBAAmB,MAAc,OAA0B;AAClE,QAAM,KAAK,MAAM,CAAC;AAClB,MAAI,MAAM,SAAS,EAAG,QAAO;AAC7B,QAAM,OAAOD,gBAAe,IAAI;AAChC,MAAI,CAAC,KAAM,QAAO;AAClB,MAAI,WAAW;AACf,MAAI,YAAY;AAChB,aAAW,OAAO,MAAM;AAEtB,UAAM,OAAO,2BAA2B,KAAK,GAAG;AAChD,QAAI,MAAM;AACR,UAAI,SAAU,QAAO;AACrB,YAAM,SAAS,iBAAiB,KAAK,CAAC,CAAE;AACxC,UAAI,CAAC,UAAU,OAAO,WAAW,KAAK,OAAO,CAAC,EAAG,CAAC,MAAM,MAAM,OAAO,CAAC,EAAG,CAAC,MAAM,GAAI,QAAO;AAC3F,iBAAW;AACX;AAAA,IACF;AAEA,QAAI,MAAM,WAAW,KAAK,IAAI,SAAS,GAAG,GAAG;AAC3C,YAAM,MAAM,IAAI,QAAQ,KAAK;AAC7B,UAAI,QAAQ,GAAI,QAAO;AACvB,YAAM,SAAS,kBAAkB,IAAI,MAAM,GAAG,GAAG,CAAC;AAClD,YAAM,KAAK,kBAAkB,IAAI,MAAM,MAAM,GAAG,EAAE,CAAC;AACnD,YAAM,aAAa,QAAQ,WAAW,KAAK,OAAO,CAAC,MAAM;AACzD,YAAM,YAAY,MAAM,CAAC,GAAG,WAAW,GAAG,OAAO,WAAW,KAC1D,GAAG,OAAO,CAAC,EAAG,CAAC,MAAM,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,EAAG,CAAC,MAAM,MAAM,CAAC;AAC/D,UAAI,CAAC,cAAc,CAAC,aAAa,UAAW,QAAO;AACnD,kBAAY;AACZ;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,SAAO,YAAY,eAAe,MAAM,WAAW;AACrD;AAQA,SAAS,eAAe,QAAkC;AAIxD,MAAI,OAAO,SAAS,MAAM,EAAG,QAAO;AAEpC,MAAI,IAAI;AACR,SAAO,IAAI,OAAO,UAAU,OAAO,CAAC,MAAM,KAAK;AAC7C,SAAK,OAAO,CAAC,MAAM,OAAO,IAAI;AAAA,EAChC;AACA,MAAI,OAAO,CAAC,MAAM,OAAO,OAAO,IAAI,CAAC,MAAM,OAAO,OAAO,IAAI,CAAC,MAAM,IAAK,QAAO;AAChF,QAAM,WAAW,OAAO,MAAM,GAAG,CAAC;AAElC,MAAI,IAAI,IAAI;AACZ,MAAI,QAAQ;AACZ,SAAO,IAAI,OAAO,UAAU,QAAQ,GAAG;AACrC,UAAMJ,MAAK,OAAO,CAAC;AACnB,QAAIA,QAAO,MAAM;AAAE,WAAK;AAAG;AAAA,IAAS;AACpC,QAAIA,QAAO,KAAK;AACd,UAAI,IAAI,IAAI;AACZ,UAAI,OAAO,CAAC,MAAM,IAAK;AACvB,aAAO,IAAI,OAAO,UAAU,OAAO,CAAC,MAAM,KAAK;AAC7C,YAAI,OAAO,CAAC,MAAM,KAAM,MAAK;AAAA,YACxB;AAAA,MACP;AACA,UAAI,OAAO,CAAC,MAAM,IAAK,QAAO;AAC9B,UAAI,IAAI;AACR;AAAA,IACF;AACA,QAAIA,QAAO,IAAK;AAAA,aACPA,QAAO,IAAK;AACrB;AAAA,EACF;AACA,MAAI,UAAU,EAAG,QAAO;AACxB,QAAM,OAAO,OAAO,MAAM,IAAI,GAAG,IAAI,CAAC;AACtC,MAAI,OAAO,CAAC,MAAM,IAAK,QAAO;AAC9B,QAAM,YAAY,OAAO,MAAM,IAAI,CAAC;AACpC,QAAM,OAAO,kBAAkB,QAAQ;AACvC,QAAM,QAAQ,kBAAkB,SAAS;AACzC,MAAI,CAAC,QAAQ,CAAC,SAAS,CAACK,oBAAmB,MAAM,KAAK,EAAG,QAAO;AAChE,SAAO,EAAE,MAAM,aAAa,MAAM,MAAM;AAC1C;AAEA,SAAS,mBAAmB,QAAkC;AAG5D,MAAI,IAAI,+BAA+B,KAAK,MAAM;AAClD,MAAI,KAAK,CAAC,EAAE,CAAC,EAAG,WAAW,GAAG,GAAG;AAC/B,UAAM,SAAS,iBAAiB,EAAE,CAAC,CAAE;AACrC,WAAO,SAAS,EAAE,MAAM,SAAS,QAAQ,QAAQ,EAAE,CAAC,MAAM,IAAI,IAAI;AAAA,EACpE;AAEA,MAAI,oBAAoB,KAAK,MAAM;AACnC,MAAI,GAAG;AACL,WAAO,EAAE,MAAM,SAAS,QAAQ,gBAAgB,EAAE,CAAC,CAAoB,GAAG,QAAQ,EAAE,CAAC,MAAM,IAAI;AAAA,EACjG;AAEA,MAAI,+DAA+D,KAAK,MAAM;AAC9E,MAAI,GAAG;AACL,UAAM,OAAO,cAAc,EAAE,CAAC,CAAE;AAChC,UAAM,OAAO,cAAc,EAAE,CAAC,CAAE;AAChC,QAAI,QAAQ,KAAM,QAAO,EAAE,MAAM,SAAS,MAAM,KAAK;AAAA,EACvD;AAEA,QAAMC,OAAM,iBAAiB,MAAM;AACnC,MAAIA,KAAK,QAAOA;AAEhB,MAAI,kCAAkC,KAAK,MAAM;AACjD,MAAI,GAAG;AACL,UAAM,OAAO,kBAAkB,EAAE,CAAC,CAAE;AACpC,UAAM,OAAO,iBAAiB,EAAE,CAAC,CAAE;AACnC,QAAI,QAAQ,KAAM,QAAO,EAAE,MAAM,SAAS,MAAM,KAAK;AAAA,EACvD;AAKA,QAAM,QAAQ,eAAe,MAAM;AACnC,MAAI,MAAO,QAAO;AAGlB,QAAM,QAAQ,cAAc,MAAM;AAClC,MAAI,SAAS,iBAAiB,KAAK,EAAG,QAAO,EAAE,MAAM,OAAO,MAAM;AAClE,SAAO;AACT;AAQO,SAAS,mBAAmB,QAAgB,OAAiC;AAClF,MAAI,QAAQ,KAAK,KAAK,EAAG,QAAO;AAChC,MAAI,IAAI,KAAK,KAAK,EAAG,QAAO,cAAc,MAAM;AAChD,SAAO,eAAe,MAAM;AAC9B;AAWA,SAAS,cAAc,QAAkC;AACvD,QAAM,KAAK,uBAAuB,MAAM;AACxC,MAAI,IAAI;AACN,UAAM,QAAQ,qBAAqB,GAAG,IAAI;AAC1C,QAAI,CAAC,MAAO,QAAO;AACnB,UAAM,UAAmB,EAAE,QAAQ,GAAG,QAAQ,SAAS,GAAG,aAAa;AACvE,QAAI,CAAC,qBAAqB,OAAO,SAAS,GAAG,QAAQ,EAAG,QAAO;AAC/D,WAAO,EAAE,MAAM,aAAa,OAAO,QAAQ,GAAG,QAAQ,cAAc,GAAG,cAAc,UAAU,GAAG,SAAS;AAAA,EAC7G;AACA,SAAO,qBAAqB,MAAM;AACpC;AAGA,SAAS,qBAAqB,QAAkC;AAM9D,QAAM,YAAY,CAAC,QAA2B,IAAI,MAAM,QAAM,MAAM,GAAG;AAEvE,QAAM,OAAO,kBAAkB,MAAM;AACrC,MAAI,KAAM,QAAO,UAAU,IAAI,IAAI,EAAE,MAAM,WAAW,KAAK,IAAI;AAE/D,QAAM,OAAO,yBAAyB,MAAM;AAC5C,MAAI,CAAC,QAAQ,KAAK,SAAS,EAAG,QAAO;AACrC,QAAM,UAAuB,CAAC;AAC9B,aAAW,OAAO,MAAM;AACtB,UAAM,KAAK,kBAAkB,GAAG;AAChC,QAAI,CAAC,MAAM,CAAC,UAAU,EAAE,EAAG,QAAO;AAClC,YAAQ,KAAK,EAAE,MAAM,WAAW,MAAM,GAAG,CAAC;AAAA,EAC5C;AAIA,SAAO,EAAE,MAAM,OAAO,MAAM,SAAS,UAAU,OAAO,QAAQ,QAAQ,IAAI,MAAM,IAAI,EAAE;AACxF;AASA,IAAM,uBAAuB,MAAe,QAAQ,IAAI,oBAAoB;AAErE,IAAM,YAAY,CAAC,MAAc,WACtC,OACG,IAAI,CAAC,CAAC,IAAI,EAAE,MAAO,OAAO,KAAK,GAAG,IAAI,QAAQ,EAAE,KAAK,IAAI,IAAI,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,GAAI,EAC9F,KAAK,MAAM;AAGT,IAAM,UAAU,CAAC,MAAc,KAAe,aACnD,IACG;AAAA,EAAI,CAAC,IAAI,MACR,MAAM,KAAK,WACP,GAAG,QAAQ,QAAQ,EAAE,KACrB,oBAAoB,IAAI,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE;AAC9D,EACC,KAAK,MAAM;AAGT,IAAM,mBAAmB,CAAC,IAAI,IAAI,MAAM,IAAI;AAG5C,SAAS,eACd,OACyB;AACzB,SAAO,MAAM,SAAS;AAAA,IACpB,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,OAAO,OAAO,MAAM,SAAS,OAAO;AAAA,EAC7D;AACF;AAsBA,IAAM,SAAS,CAAC,OAAe,cAC7B,aAAa,oBAAoB,KAAK;AAMxC,IAAM,yBAAyB;AAC/B,IAAM,uBAAuB;AAC7B,IAAM,uBAAuB;AAQ7B,SAAS,cAAc,QAAuF;AAC5G,QAAM,QAAoB,CAAC;AAC3B,MAAI,QAAQ;AACZ,aAAW,MAAM,QAAQ;AACvB,QAAI,CAAC,MAAM,GAAG,QAAS,QAAO,EAAE,MAAM,KAAK;AAC3C,UAAM,MAAgB,CAAC;AACvB,eAAW,CAAC,IAAI,EAAE,KAAK,GAAG,QAAQ;AAChC,UAAI,KAAK,KAAK,IAAI,uBAAwB,QAAO,EAAE,MAAM,KAAK;AAC9D,eAAS,KAAK,IAAI,MAAM,IAAI,KAAM,KAAI,KAAK,EAAE;AAAA,IAC/C;AACA,aAAS,IAAI;AACb,QAAI,QAAQ,qBAAsB,QAAO,EAAE,MAAM,KAAK;AACtD,UAAM,KAAK,GAAG;AAAA,EAChB;AACA,SAAO,SAAS,uBAAuB,EAAE,MAAM,UAAU,MAAM,IAAI,EAAE,MAAM,KAAK;AAClF;AAEO,SAAS,eACd,OACA,OACA,MACA,KACA,WACY;AACZ,MAAI,MAAM,SAAS,aAAa;AAC9B,UAAM,QAAQ,eAAe,MAAM,OAAO,OAAO,MAAM,KAAK,SAAS;AACrE,UAAM,MAAM,KAAK,KAAK;AACtB,UAAMC,QAAO,KAAK,MAAM;AAKxB,UAAM,QAAQ,UAAU,oBAAoB,MAAM,GAAG,KAAK,MAAM,MAAM;AACtE,UAAM,cAAc,MAAM,eAAe,KAAK,KAAK,MAAM,IAAI,KAAK;AAClE,UAAM,kBAAkB,GAAG,MAAM,GAAG,sBAAsB,WAAW;AACrE,UAAM,aAAa,MAAM,WAAW,kBAAkB,KAAK,eAAe;AAC1E,WAAO;AAAA,MACL,OAAO;AAAA,QACL,GAAG,MAAM;AAAA,QACT,GAAG,GAAG,OAAO,GAAG,MAAM,MAAM,EAAE;AAAA,QAC9B,GAAG,GAAG,OAAOA,KAAI,MAAM,MAAM,GAAG;AAAA,QAChC,GAAG,GAAG,OAAO,GAAG,QAAQ,UAAU,QAAQ,GAAG,aAAaA,KAAI,MAAM,KAAK;AAAA,MAC3E;AAAA,MACA,IAAI;AAAA,MACJ,KAAKA;AAAA,IACP;AAAA,EACF;AAEA,MAAI,MAAM,SAAS,OAAO;AACxB,UAAM,MAAM,KAAK,KAAK;AACtB,UAAMA,QAAO,KAAK,MAAM;AACxB,UAAM,QAAkB,CAAC,GAAG,GAAG,OAAO,GAAG,YAAY,GAAG,GAAG,OAAOA,KAAI,MAAM,KAAK,EAAE;AAQnF,QAAI,MAAM,KAAK,UAAU,KAAK,MAAM,KAAK,MAAM,OAAK,EAAE,SAAS,aAAa,EAAE,KAAK,UAAU,CAAC,GAAG;AAC/F,YAAM,SAAS,oBAAI,IAAwB;AAC3C,iBAAW,KAAK,MAAM,MAAM;AAC1B,cAAM,OAAQ,EAA8C;AAC5D,cAAM,IAAI,KAAK,CAAC;AAChB,cAAM,QAAQ,KAAK,MAAM,KAAK,KAAK,IAAI,KAAK;AAC3C,SAAC,OAAO,IAAI,KAAK,KAAK,OAAO,IAAI,OAAO,CAAC,CAAC,EAAE,IAAI,KAAK,GAAI,KAAK,IAAI;AAAA,MACrE;AACA,YAAM,KAAK,GAAG,GAAG,OAAO,KAAK,4BAA4B,OAAO,OAAO,SAAS,CAAC,KAAK;AACtF,iBAAW,CAAC,OAAO,IAAI,KAAK,QAAQ;AAClC,cAAM,SAAS,SAAS,MAAM,SAAS,MAAM,QAAQ,KAAK,UAAU,QAAQ,EAAE,MAAM,QAAQ,KAAK;AACjG,cAAM,KAAK,GAAG,GAAG,KAAK,MAAM,IAAI;AAChC,mBAAW,QAAQ,MAAM;AACvB,gBAAM,OAAO,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,MAAM,OAAO,oBAAoB,KAAK,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;AAC7F,gBAAM,OAAO,KAAK,SAAS,OAAO,KAAK,KAAK,MAAM,CAAC,KAAK;AACxD,gBAAM,KAAK,GAAG,GAAG,WAAW,KAAK,MAAM,KAAK,MAAM,mBAAmB,IAAI,OAAO,GAAG,YAAYA,KAAI,MAAM,KAAK,MAAM,KAAK,MAAM,WAAW;AAAA,QAC5I;AACA,cAAM,KAAK,GAAG,GAAG,WAAW;AAC5B,cAAM,KAAK,GAAG,GAAG,KAAK;AAAA,MACxB;AACA,YAAM,KAAK,GAAG,GAAG,GAAG;AACpB,aAAO,EAAE,OAAO,OAAO,IAAI,KAAK,KAAKA,MAAK;AAAA,IAC5C;AACA,QAAI,MAAM,UAAU;AAKlB,YAAM,OAAO,cAAc,MAAM,MAAM;AACvC,UAAI,KAAK,SAAS,UAAU;AAC1B,cAAM,KAAK,GAAG,GAAG,OAAO,KAAK,4BAA4B,OAAO,OAAO,SAAS,CAAC,KAAK;AACtF,cAAM,KAAK,QAAQ,CAAC,KAAK,MAAM;AAC7B,gBAAM,SAAS,KAAK,MAAM,CAAC,EAAG,IAAI,QAAM,QAAQ,EAAE,GAAG,EAAE,KAAK,GAAG;AAC/D,gBAAM,IAAI,eAAe,KAAK,OAAO,MAAM,GAAG,GAAG,QAAQ,SAAS;AAClE,gBAAM,KAAK,GAAG,GAAG,KAAK,MAAM,IAAI;AAChC,gBAAM,KAAK,GAAG,EAAE,KAAK;AACrB,gBAAM,KAAK,GAAG,GAAG,OAAO,GAAG,MAAM,EAAE,EAAE,EAAE;AACvC,gBAAM,KAAK,GAAG,GAAG,OAAOA,KAAI,MAAM,EAAE,EAAE,MAAM,EAAE,GAAG,MAAM,KAAK,EAAE;AAC9D,gBAAM,KAAK,GAAG,GAAG,WAAW;AAC5B,gBAAM,KAAK,GAAG,GAAG,KAAK;AAAA,QACxB,CAAC;AACD,cAAM,KAAK,GAAG,GAAG,GAAG;AAAA,MACtB,OAAO;AACL,cAAM,KAAK,OAAO,OAAO,SAAS;AAClC,cAAM,KAAK,QAAQ,CAAC,KAAK,MAAM;AAC7B,gBAAM,KAAK,MAAM,OAAO,CAAC;AACzB,gBAAM,OAAO,GAAG,UAAU,KAAK,UAAU,IAAI,GAAG,MAAM,CAAC,MAAM,IAAI,UAAU,IAAI,GAAG,MAAM,CAAC;AACzF,gBAAM,IAAI,eAAe,KAAK,OAAO,MAAM,GAAG,GAAG,MAAM,SAAS;AAChE,gBAAM,KAAK,GAAG,GAAG,GAAG,MAAM,IAAI,OAAO,SAAS,KAAK,KAAK,sBAAsB,IAAI,KAAK;AACvF,gBAAM,KAAK,GAAG,EAAE,KAAK;AACrB,gBAAM,KAAK,GAAG,GAAG,KAAK,GAAG,MAAM,EAAE,EAAE,EAAE;AACrC,gBAAM,KAAK,GAAG,GAAG,KAAKA,KAAI,MAAM,EAAE,EAAE,MAAM,EAAE,GAAG,MAAM,KAAK,EAAE;AAC5D,gBAAM,KAAK,GAAG,GAAG,GAAG;AAAA,QACtB,CAAC;AAAA,MACH;AAAA,IACF,OAAO;AAKL,YAAM,MAAM,KAAK,MAAM;AACvB,YAAM,KAAK,GAAG,GAAG,GAAG,GAAG,KAAK;AAC5B,iBAAW,OAAO,MAAM,MAAM;AAC5B,cAAM,IAAI,eAAe,KAAK,OAAO,MAAM,GAAG,GAAG,MAAM,SAAS;AAChE,cAAM,KAAK,GAAG,EAAE,KAAK;AACrB,cAAM,KAAK,GAAG,GAAG,SAAS,EAAE,EAAE,OAAO,GAAG,YAAYA,KAAI,MAAM,EAAE,GAAG,WAAW,GAAG,IAAI;AAAA,MACvF;AACA,YAAM,KAAK,GAAG,GAAG,GAAG;AAAA,IACtB;AACA,WAAO,EAAE,OAAO,OAAO,IAAI,KAAK,KAAKA,MAAK;AAAA,EAC5C;AAEA,MAAI,MAAM,SAAS,SAAS;AAC1B,UAAM,MAAM,KAAK,IAAI;AACrB,WAAO;AAAA,MACL,OAAO;AAAA,QACL,GAAG,GAAG,OAAO,GAAG,MAAM,KAAK;AAAA,QAC3B,GAAG,GAAG,UAAU,GAAG,uBAAuB,UAAU,oBAAoB,GAAG,KAAK,MAAM,MAAM,CAAC,MAAM,GAAG;AAAA,MACxG;AAAA;AAAA,MAEA,IAAI,MAAM,SAAS,GAAG,GAAG,MAAM,KAAK,KAAK;AAAA,MACzC,KAAK;AAAA,IACP;AAAA,EACF;AAEA,MAAI,MAAM,SAAS,SAAS;AAC1B,UAAM,MAAM,KAAK,IAAI;AACrB,WAAO;AAAA,MACL,OAAO;AAAA,QACL,GAAG,GAAG,OAAO,GAAG,MAAM,KAAK;AAAA,QAC3B,GAAG,GAAG,OAAO,KAAK,uBAAuB,UAAU,OAAO,OAAO,SAAS,GAAG,MAAM,IAAI,CAAC;AAAA,QACxF,GAAG,GAAG,KAAK,GAAG,MAAM,KAAK;AAAA,QACzB,GAAG,GAAG,YAAY,GAAG,uBAAuB,UAAU,oBAAoB,GAAG,KAAK,MAAM,IAAI,CAAC,MAAM,GAAG;AAAA,QACtG,GAAG,GAAG;AAAA,MACR;AAAA,MACA,IAAI,GAAG,GAAG,MAAM,KAAK;AAAA,MACrB,KAAK;AAAA,IACP;AAAA,EACF;AAEA,MAAI,MAAM,SAAS,OAAO;AACxB,UAAMA,QAAO,KAAK,IAAI;AACtB,UAAM,MAAM,KAAK,KAAK;AACtB,UAAM,UAAU,CAAC,GAAsC,OAAe;AACpE,YAAM,IAAI,UAAU,oBAAoB,EAAE,KAAK,EAAE,MAAM;AACvD,aAAO,EAAE,UAAU,KAAK,CAAC,MAAM,IAAI,CAAC;AAAA,IACtC;AACA,UAAM,QAAQ,CAAC,GAAG,GAAG,OAAOA,KAAI,MAAM,KAAK,IAAI,GAAG,GAAG,OAAO,GAAG,YAAY,GAAG,GAAG,MAAM;AACvF,QAAI,QAAQ;AACZ,eAAW,KAAK,MAAM,OAAO;AAC3B,UAAI,EAAE,SAAS,OAAO;AACpB,cAAM,IAAI,EAAE,IAAI;AAChB,cAAM,OAAO,QAAQA,OAAM,EAAE,KAAK,QAAQ,YAAY,MAAS;AAC/D,YAAI,EAAE,UAAU;AACd,gBAAM,KAAK,GAAG,GAAG,SAASA,KAAI,MAAM,CAAC,wBAAwB,IAAI,MAAMA,KAAI,OAAO,CAAC,EAAE;AAAA,QACvF,OAAO;AACL,gBAAM,KAAK,GAAG,GAAG,WAAWA,KAAI,MAAM,CAAC,wBAAwB,IAAI,WAAW;AAC9E,gBAAM,KAAK,GAAG,GAAG,KAAKA,KAAI,OAAO,CAAC,EAAE;AAAA,QACtC;AAAA,MACF,WAAW,EAAE,SAAS,SAAS,EAAE,QAAQ,UAAU;AAEjD,cAAM,IAAI,KAAK,IAAI;AACnB,cAAM,KAAK,GAAG,GAAG,WAAW,CAAC,MAAMA,KAAI,EAAE;AACzC,cAAM,KAAK,GAAG,GAAG,YAAYA,KAAI,sBAAsB,QAAQ,GAAGA,KAAI,CAAC,KAAKA,KAAI,IAAI;AACpF,YAAI,EAAE,QAAQ,EAAG,OAAM,KAAK,GAAG,GAAG,SAASA,KAAI,QAAQ,CAAC,SAAS;AAAA,iBACxD,EAAE,MAAM,EAAG,OAAM,KAAK,GAAG,GAAG,SAASA,KAAI,MAAM,CAAC,MAAM,EAAE,GAAG,SAAS;AAAA,MAC/E,WAAW,EAAE,SAAS,SAAS,EAAE,QAAQ,GAAG;AAE1C,YAAI,EAAE,QAAQ,GAAG;AACf,gBAAM,KAAK,GAAG,GAAG,WAAWA,KAAI,sBAAsB,QAAQ,GAAGA,KAAI,CAAC,UAAU;AAChF,gBAAM,KAAK,GAAG,GAAG,KAAKA,KAAI,IAAI;AAAA,QAChC,OAAO;AACL,gBAAM,KAAK,GAAG,GAAG,SAASA,KAAI,sBAAsB,QAAQ,GAAGA,KAAI,CAAC,KAAKA,KAAI,IAAI;AAAA,QACnF;AAAA,MACF,WAAW,EAAE,SAAS,OAAO;AAI3B,cAAM,IAAI,KAAK,IAAI;AACnB,cAAM,KAAK,GAAG,GAAG,WAAW,CAAC,MAAMA,KAAI,EAAE;AACzC,cAAM,KAAK,GAAG,GAAG,YAAYA,KAAI,MAAM,CAAC,MAAM,EAAE,GAAG,OAAOA,KAAI,sBAAsB,QAAQ,GAAGA,KAAI,CAAC,KAAKA,KAAI,IAAI;AACjH,YAAI,EAAE,MAAM,EAAG,OAAM,KAAK,GAAG,GAAG,SAASA,KAAI,MAAM,CAAC,MAAM,EAAE,GAAG,SAAS;AAAA,MAC1E,OAAO;AAIL,cAAM,QAAQ,eAAe,EAAE,OAAOA,OAAM,MAAM,GAAG,GAAG,MAAM,QAAQ,YAAY,MAAS;AAC3F,YAAI,CAAC,EAAE,WAAW;AAChB,gBAAM,KAAK,GAAG,MAAM,KAAK;AACzB,cAAI,EAAE,QAAQ,GAAG;AACf,kBAAM,KAAK,GAAG,GAAG,WAAW,MAAM,EAAE,UAAU;AAC9C,kBAAM,KAAK,GAAG,GAAG,KAAKA,KAAI,MAAM,MAAM,GAAG,EAAE;AAAA,UAC7C,OAAO;AACL,kBAAM,KAAK,GAAG,GAAG,SAAS,MAAM,EAAE,KAAKA,KAAI,MAAM,MAAM,GAAG,EAAE;AAAA,UAC9D;AAAA,QACF,OAAO;AACL,gBAAM,QAAQ,KAAK,OAAO;AAC1B,gBAAM,KAAK,GAAG,GAAG,SAAS,KAAK,UAAU;AACzC,gBAAM,KAAK,GAAG,GAAG,kBAAkB;AACnC,gBAAM,KAAK,GAAG,MAAM,KAAK;AACzB,gBAAM,KAAK,GAAG,GAAG,aAAa,MAAM,EAAE,UAAU;AAChD,gBAAM,KAAK,GAAG,GAAG,OAAOA,KAAI,MAAM,MAAM,GAAG,EAAE;AAC7C,gBAAM,KAAK,GAAG,GAAG,OAAO,KAAK,SAAS;AACtC,gBAAM,KAAK,GAAG,GAAG,KAAK;AACtB,cAAI,EAAE,QAAQ,EAAG,OAAM,KAAK,GAAG,GAAG,UAAU,KAAK,SAAS;AAAA,QAC5D;AAAA,MACF;AACA,cAAQ;AAAA,IACV;AACA,UAAM,KAAK,GAAG,GAAG,KAAK,GAAG,SAAS;AAClC,UAAM,KAAK,GAAG,GAAG,iBAAiB;AAClC,UAAM,KAAK,GAAG,GAAG,QAAQ,GAAG,KAAKA,KAAI,MAAM,KAAK,EAAE;AAClD,WAAO,EAAE,OAAO,OAAO,IAAI,KAAK,KAAKA,MAAK;AAAA,EAC5C;AAEA,MAAI,MAAM,SAAS,WAAW;AAC5B,UAAMC,WAAU,MAAM,KAAK;AAC3B,UAAMD,QAAO,KAAK,MAAM;AACxB,UAAM,SAAS,MAAM,KAAK,IAAI,CAAC,IAAI,MAAM;AACvC,YAAM,OAAO,MAAM,KAAK,YAAY,YAAY,oBAAoB,KAAK,MAAM,CAAC;AAChF,aAAO,OAAO,MAAM,EAAE;AAAA,IACxB,CAAC;AACD,WAAO;AAAA,MACL,OAAO;AAAA,QACL,GAAG,GAAG,OAAOA,KAAI,MAAM,KAAK;AAAA,QAC5B,GAAG,GAAG,OAAO,KAAK,MAAMC,QAAO,wBAAwB,OAAO,KAAK,MAAM,CAAC,MAAMD,KAAI,MAAM,KAAK,MAAMC,QAAO;AAAA,MAC9G;AAAA,MACA,IAAI,GAAGD,KAAI,MAAM,KAAK;AAAA,MACtB,KAAKA;AAAA,IACP;AAAA,EACF;AAEA,MAAI,MAAM,SAAS,SAAS;AAC1B,UAAME,KAAI,KAAK,IAAI;AACnB,UAAMD,WAAU,MAAM,KAAK;AAC3B,UAAME,WAAUF,aAAY,IACxB,GAAG,OAAO,OAAO,SAAS,CAAC,QAAQ,MAAM,KAAK,CAAC,CAAC,KAChD,QAAQ,OAAO,MAAM,MAAM,SAAS;AASxC,UAAM,SACJ,MAAM,KAAK,WAAW,KAAK,MAAM,KAAK,CAAC,EAAG,CAAC,MAAM,MAAM,KAAK,CAAC,EAAG,CAAC,IAAI,MAAM,KAAK,CAAC,EAAG,CAAC,IAAI;AAC3F,UAAM,WACJ,WAAW,QAAQ,UAAU,SAAU,qBAAqB;AAAA;AAAA;AAAA;AAAA,MAIxD,GAAG,GAAG,KAAKC,EAAC,oBAAoB,KAAK,UAAU,OAAO,aAAa,MAAM,CAAC,CAAC,KAAKA,EAAC,UACxEA,EAAC,SAASA,EAAC;AAAA,QACpB,GAAG,GAAG,YAAYA,EAAC,wBAAwB,UAAU,oBAAoBA,EAAC,KAAK,MAAM,IAAI,CAAC,MAAMA,EAAC;AACvG,WAAO;AAAA,MACL,OAAO;AAAA,QACL,GAAG,GAAG,OAAOA,EAAC,MAAM,KAAK;AAAA,QACzB,GAAG,GAAG,OAAO,KAAK,MAAMD,QAAO,wBAAwBE,QAAO;AAAA,QAC9D,GAAG,GAAG,KAAKD,EAAC,MAAM,KAAK,MAAMD,QAAO;AAAA,QACpC;AAAA,QACA,GAAG,GAAG;AAAA,MACR;AAAA;AAAA;AAAA,MAGA,IAAI,GAAGC,EAAC,MAAM,KAAK;AAAA,MACnB,KAAKA;AAAA,IACP;AAAA,EACF;AAEA,MAAI,MAAM,SAAS,UAAU;AAC3B,UAAM,MAAM,KAAK,KAAK;AACtB,UAAMF,QAAO,KAAK,MAAM;AACxB,UAAM,IAAI,KAAK,IAAI;AACnB,UAAM,KAAK,KAAK,IAAI;AACpB,UAAM,OAAO,eAAe,KAAK;AACjC,UAAM,UAAU,MAAM,cAClB,CAAC,KACA,MAAM;AACL,YAAM,KAAK,KAAK,IAAI;AACpB,aAAO;AAAA,QACL,GAAG,GAAG,eAAe,EAAE,uBAAuB,CAAC;AAAA,QAC/C,GAAG,GAAG,aAAa,iBAAiB,IAAI,CAAAL,OAAK,GAAG,EAAE,QAAQA,EAAC,EAAE,EAAE,KAAK,MAAM,CAAC;AAAA,MAC7E;AAAA,IACF,GAAG;AACP,WAAO;AAAA,MACL,OAAO;AAAA,QACL,GAAG,GAAG,OAAO,GAAG;AAAA,QAChB,GAAG,GAAG,OAAOK,KAAI,MAAM,KAAK;AAAA,QAC5B,GAAG,GAAG,OAAO,KAAK,uBAAuB,OAAO,OAAO,SAAS,CAAC,SAAS,MAAM,KAAK;AAAA,QACrF,GAAG,GAAG,SAAS,CAAC,MAAM,KAAK;AAAA,QAC3B,GAAG,GAAG,YAAY,CAAC;AAAA,QACnB,GAAG,GAAG,aAAa,EAAE,uBAAuB,CAAC;AAAA,QAC7C,GAAG,GAAG,WAAW,EAAE,QAAQ,MAAM,KAAK,OAAO,GAAG,YAAYA,KAAI,MAAM,CAAC;AAAA,QACvE,GAAG,GAAG,WAAW,EAAE,QAAQ,SAAS;AAAA,QACpC,GAAG,GAAG,aAAa,CAAC;AAAA,QACpB,GAAG;AAAA,QACH,GAAG,GAAG,SAAS,CAAC;AAAA,QAChB,GAAG,GAAG;AAAA,QACN,GAAG,GAAG;AAAA,QACN,GAAI,KAAK,SAAS,CAAC,GAAG,GAAG,WAAW,UAAU,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC;AAAA,QACrE,GAAG,GAAG,OAAO,CAAC;AAAA,QACd,GAAG,GAAG;AAAA,QACN,GAAG,GAAG;AAAA,MACR;AAAA,MACA,IAAI;AAAA,MACJ,KAAKA;AAAA,IACP;AAAA,EACF;AAGA,QAAM,IAAI,KAAK,IAAI;AACnB,QAAM,OAAO,KAAK,MAAM;AACxB,QAAM,UAAU,MAAM,KAAK;AAC3B,QAAM,WAAW,MAAM,MAAM;AAC7B,QAAM,UAAU,YAAY,IACxB,GAAG,OAAO,OAAO,SAAS,CAAC,QAAQ,MAAM,KAAK,CAAC,CAAC,KAChD,QAAQ,OAAO,MAAM,MAAM,SAAS;AACxC,QAAM,WAAW,QAAQ,GAAG,MAAM,KAAK;AAQvC,QAAM,WAAW,OAAO,aAAa,GAAG,MAAM,KAAK;AACnD,QAAM,YAAY,qBAAqB,IACnC;AAAA,IACE,GAAG,GAAG,KAAK,CAAC,oBAAoB,KAAK,UAAU,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC;AAAA,IACnF,GAAG,GAAG,SAAS,CAAC,MAAM,QAAQ,qBAAqB,IAAI,MAAM,CAAC,MAAM,QAAQ;AAAA,EAC9E,IACA;AAAA,IACE,GAAG,GAAG,YAAY,CAAC,MAAM,WAAW,CAAC,wBAAwB,QAAQ,MAAM,CAAC;AAAA,IAC5E,GAAG,GAAG,SAAS,CAAC,MAAM,QAAQ,wBAAwB,QAAQ,MAAM,IAAI,MAAM,CAAC,MAAM,QAAQ;AAAA,EAC/F;AACJ,SAAO;AAAA,IACL,OAAO;AAAA,MACL,GAAG,GAAG,OAAO,CAAC,MAAM,KAAK;AAAA,MACzB,GAAG,GAAG,OAAO,IAAI,MAAM,KAAK;AAAA,MAC5B,GAAG,GAAG,OAAO,KAAK,MAAM,OAAO,wBAAwB,OAAO;AAAA,MAC9D,GAAG,GAAG,KAAK,CAAC,MAAM,KAAK,MAAM,OAAO;AAAA,MACpC,GAAG;AAAA,MACH,GAAG,GAAG;AAAA,IACR;AAAA,IACA,IAAI,GAAG,IAAI,MAAM,KAAK;AAAA,IACtB,KAAK;AAAA,EACP;AACF;;;ACrgDO,SAAS,WAAW,MAAyB,IAAY,KAAwB;AACtF,UAAQ,KAAK,EAAE,GAAG;AAAA;AAAA;AAAA;AAAA,IAIhB,KAAK;AAAA,IAAQ,KAAK;AAAA,IAAO,KAAK;AAAA,IAAc,KAAK;AAAA,IAAa,KAAK;AAAA,IACnE,KAAK;AAAA,IAAS,KAAK;AAAA,IAAW,KAAK;AAAA,IACnC,KAAK;AAAA,IAAU,KAAK;AAAA,IAAQ,KAAK;AAC/B,aAAO;AAAA;AAAA;AAAA;AAAA,IAKT,KAAK;AAAA,IAAS,KAAK;AAAA,IAAQ,KAAK;AAAA,IAAQ,KAAK;AAAA,IAAS,KAAK;AAAA,IAC3D,KAAK;AAAA,IAAU,KAAK;AAAA,IAAY,KAAK;AAAA,IAAU,KAAK;AAAA,IAAQ,KAAK;AAC/D,UAAI,KAAK,KAAK,KAAK,CAAC,CAAE;AACtB,aAAO;AAAA;AAAA,IAGT,KAAK;AAAA,IAAS,KAAK;AAAA,IAAU,KAAK;AAAA,IAAc,KAAK;AAAA,IAAgB,KAAK;AAAA,IAAY,KAAK;AAAA,IAC3F,KAAK;AAAA,IAAS,KAAK;AAAA,IAAe,KAAK;AAAA,IAAU,KAAK;AAAA,IAAS,KAAK;AAClE,UAAI,KAAK,KAAK,KAAK,CAAC,CAAE;AACtB,aAAO;AAAA;AAAA;AAAA;AAAA,IAKT,KAAK;AACH,UAAI,KAAK,KAAK,CAAC,KAAM,EAAG,KAAI,KAAK,KAAK,KAAK,CAAC,CAAE;AAC9C,aAAO;AAAA;AAAA;AAAA;AAAA,IAKT,KAAK,aAAa;AAChB,UAAI,KAAK,KAAK,KAAK,CAAC,CAAE;AACtB,UAAI,KAAK,KAAK,CAAC,KAAM,EAAG,KAAI,KAAK,KAAK,KAAK,CAAC,CAAE;AAC9C,YAAM,IAAI,KAAK,KAAK,CAAC;AACrB,eAAS,IAAI,GAAG,IAAI,GAAG,IAAK,KAAI,KAAK,KAAK,KAAK,IAAI,CAAC,CAAE;AACtD,aAAO;AAAA,IACT;AAAA,IAEA,KAAK;AAAA,IAAQ,KAAK,SAAS;AACzB,YAAM,IAAI,KAAK,KAAK,CAAC;AACrB,eAAS,IAAI,GAAG,IAAI,GAAG,IAAK,KAAI,KAAK,KAAK,KAAK,IAAI,CAAC,CAAE;AACtD,aAAO;AAAA,IACT;AAAA,IAEA,KAAK,SAAS;AACZ,YAAM,IAAI,KAAK,KAAK,CAAC;AACrB,eAAS,IAAI,GAAG,IAAI,GAAG,IAAK,KAAI,KAAK,KAAK,KAAK,IAAI,CAAC,CAAE;AACtD,aAAO;AAAA,IACT;AAAA,IAEA,KAAK,WAAW;AACd,YAAM,IAAI,KAAK,KAAK,CAAC;AACrB,eAAS,IAAI,GAAG,IAAI,GAAG,IAAK,KAAI,KAAK,KAAK,KAAK,IAAI,CAAC,CAAE;AACtD,aAAO;AAAA,IACT;AAAA;AAAA,IAGA,KAAK,WAAW;AACd,UAAI,KAAK,KAAK,KAAK,CAAC,CAAE;AACtB,YAAM,IAAI,KAAK,KAAK,CAAC;AACrB,eAAS,IAAI,GAAG,IAAI,GAAG,IAAK,KAAI,KAAK,KAAK,KAAK,IAAI,IAAI,CAAC,CAAE;AAC1D,aAAO;AAAA,IACT;AAAA,IAEA,KAAK;AAAA,IAAQ,KAAK;AAChB,UAAI,KAAK,KAAK,KAAK,CAAC,CAAE;AACtB,UAAI,KAAK,KAAK,CAAC,KAAM,EAAG,KAAI,KAAK,KAAK,KAAK,CAAC,CAAE;AAC9C,aAAO;AAAA,IAET;AACE,aAAO;AAAA,EACX;AACF;;;AC3CO,IAAM,cAAc;AAEpB,IAAM,WAAW;AAIjB,IAAM,cAAc;AAEpB,IAAM,UAAU;AAEhB,IAAM,SAAS;AAef,IAAM,MAAiB,EAAE,KAAK,aAAa,KAAK,OAAO,KAAK,YAAY;AAE/E,SAAS,KAAK,GAAc,GAAyB;AACnD,QAAM,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM;AACtC,QAAM,MAAM,EAAE,OAAO,EAAE;AACvB,QAAM,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM;AACtC,MAAI,QAAQ,EAAE,OAAO,QAAQ,EAAE,OAAO,QAAQ,EAAE,IAAK,QAAO;AAC5D,SAAO,EAAE,KAAK,KAAK,IAAI;AACzB;AAiBO,SAAS,eAAe,MAAkB,OAAsC;AACrF,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,QAAQ,CAAC,GAAG,KAAK;AACvB,QAAM,OAAiB,CAAC;AACxB,SAAO,MAAM,SAAS,GAAG;AACvB,UAAM,KAAK,MAAM,IAAI;AACrB,QAAI,KAAK,IAAI,EAAE,EAAG;AAClB,SAAK,IAAI,EAAE;AACX,SAAK,SAAS;AACd,eAAW,MAAM,IAAI,IAAI;AACzB,eAAW,KAAK,KAAM,OAAM,KAAK,CAAC;AAAA,EACpC;AACA,SAAO;AACT;AAMA,SAAS,SAAS,MAAkB,IAAY,IAAe,SAA6B;AAC1F,QAAM,KAAK,KAAK,EAAE;AAClB,MAAI,OAAO,YAAY,OAAO,gBAAgB,OAAO,gBAAgB;AACnE,UAAM,KAAK,KAAK,KAAK,CAAC;AACtB,UAAM,MAAM,KAAK,IAAI,WAAW;AAGhC,UAAM,MAAM,OAAO,eAAe,SAAS,GAAG;AAC9C,QAAI,QAAQ,GAAG,OAAO,QAAQ,GAAG,IAAK,QAAO;AAC7C,WAAO,EAAE,KAAK,KAAK,GAAG,KAAK,IAAI;AAAA,EACjC;AACA,MAAI,OAAO,WAAW,OAAO,eAAe;AAI1C,UAAM,OAAQ,KAAK,KAAK,CAAC,IAAK,OAAO,KAAK,UAAW,SAAS;AAC9D,QAAI,GAAG,OAAO,QAAQ,GAAG,IAAK,QAAO;AACrC,WAAO,EAAE,KAAK,GAAG,KAAK,KAAK,MAAM,IAAI;AAAA,EACvC;AAYA,MAAI,OAAO,UAAU;AACnB,QAAI,GAAG,QAAQ,YAAY,CAAC,GAAG,IAAK,QAAO;AAC3C,WAAO,EAAE,KAAK,UAAU,KAAK,OAAO,KAAK,GAAG,IAAI;AAAA,EAClD;AACA,MAAI,OAAO,SAAS;AAClB,QAAI,CAAC,GAAG,IAAK,QAAO;AACpB,WAAO,EAAE,KAAK,GAAG,KAAK,KAAK,OAAO,KAAK,GAAG,IAAI;AAAA,EAChD;AACA,SAAO;AACT;AAiBO,SAAS,kBACd,MACA,OACA,SACY;AACZ,QAAM,SAAS,oBAAI,IAAuB;AAC1C,QAAM,OAAiB,CAAC;AAExB,QAAM,OAAO,CAAC,IAAY,MAAuB;AAC/C,UAAM,MAAM,OAAO,IAAI,EAAE;AACzB,QAAI,QAAQ,QAAW;AACrB,aAAO,IAAI,IAAI,CAAC;AAChB,WAAK,KAAK,EAAE;AACZ;AAAA,IACF;AACA,UAAM,OAAO,KAAK,KAAK,CAAC;AACxB,QAAI,SAAS,IAAK;AAClB,WAAO,IAAI,IAAI,IAAI;AACnB,SAAK,KAAK,EAAE;AAAA,EACd;AAEA,aAAW,KAAK,MAAO,MAAK,GAAG,GAAG;AAElC,QAAM,OAAiB,CAAC;AACxB,SAAO,KAAK,SAAS,GAAG;AACtB,UAAM,KAAK,KAAK,IAAI;AACpB,UAAM,OAAO,SAAS,MAAM,IAAI,OAAO,IAAI,EAAE,GAAI,OAAO;AACxD,SAAK,SAAS;AACd,eAAW,MAAM,IAAI,IAAI;AACzB,eAAW,KAAK,KAAM,MAAK,GAAG,IAAI;AAAA,EACpC;AAEA,SAAO,EAAE,IAAI,CAAC,OAA0B,OAAO,IAAI,EAAE,KAAK,IAAI;AAChE;;;ACrJO,IAAM,cAAN,cAA0B,MAAM;AAAA,EAC5B;AAAA,EACT,YAAY,WAAmB;AAC7B,UAAM,8BAA8B,SAAS,EAAE;AAC/C,SAAK,OAAO;AACZ,SAAK,YAAY;AAAA,EACnB;AACF;AAQO,IAAM,iBAAiB;AAAA,EAC5B;AAAA,EAAM;AAAA,EAAQ;AAAA,EAAK;AAAA,EAAM;AAAA,EAAO;AAAA,EAAQ;AAAA,EAAO;AAAA,EAAO;AAAA,EAAU;AAAA,EAAgB;AAAA,EAChF;AAAA,EAAS;AAAA,EAAQ;AAAA,EAAO;AAAA,EAAY;AAAA,EAAY;AAAA,EAAc;AAAA,EAC9D;AAAA,EAAoB;AAAA,EAAe;AAAA,EAAgB;AAAA,EAAoB;AAAA,EAA2B;AAAA,EAClG;AAAA,EAAY;AAAA,EAAiB;AAAA,EAAiB;AAAA,EAAgB;AAAA,EAC9D;AAAA,EAAuB;AAAA,EAAgB;AAAA,EAAqB;AAAA,EAC5D;AAAA,EAAc;AAAA,EAAiB;AAAA,EAA+B;AAAA,EAAa;AAAA,EAAY;AAAA,EACvF;AAAA,EAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOhB;AAAA,EAAS;AAAA,EAAa;AAAA,EAAe;AAAA,EAAc;AACrD;AAgBA,IAAM,kBAAkB;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;AAgExB,SAAS,EAAE,GAAmB;AAC5B,SAAO,KAAK,UAAU,CAAC;AACzB;AAmBA,IAAM,WAAkB,EAAE,IAAI,OAAO,IAAI,MAAM;AAY/C,SAAS,UAAUI,IAAW,GAAkB;AAC9C,SAAO,GAAG,EAAE,KAAK,IAAIA,EAAC,SAAS,EAAE,GAAG,EAAE,KAAK,IAAIA,EAAC,SAAS,EAAE;AAC7D;AACA,SAAS,UAAUA,IAAW,GAAkB;AAC9C,SAAO,GAAG,EAAE,KAAK;AAAA,EAAKA,EAAC,oDAAoD,EAAE,GAAG,EAAE,KAAK;AAAA,EAAKA,EAAC,oDAAoD,EAAE;AACrJ;AAEA,SAAS,SAASA,IAAW,KAAc,IAAW,UAAU,OAAO,MAAc;AAQnF,MAAI,KAAK;AACP,WAAO,GAAG,OAAO,OAAOA,EAAC,SAASA,EAAC,QAAQA,EAAC,QAAQA,EAAC,QAAQA,EAAC,OAAO,UAAUA,IAAG,CAAC,CAAC;AAAA,IAAO,EAAE;AAAA,gBACjFA,EAAC;AAAA,eACFA,EAAC;AAAA,eACDA,EAAC;AAAA,EACdA,EAAC;AAAA,EACDA,EAAC,gEAAgE,UAAUA,IAAG,CAAC,CAAC;AAAA,EAChF;AACA,SAAO,GAAG,OAAO,OAAOA,EAAC,WAAWA,EAAC,SAASA,EAAC,QAAQA,EAAC,QAAQA,EAAC,QAAQA,EAAC,OAAO,UAAUA,IAAG,CAAC,CAAC;AAAA,IAAO,GAAGA,EAAC;AAAA,CAAW;AAAA;AAAA,gBAExGA,EAAC;AAAA,eACFA,EAAC;AAAA,eACDA,EAAC;AAAA,EACdA,EAAC;AAAA;AAAA,EAEDA,EAAC;AAAA,EACDA,EAAC;AAAA,EACDA,EAAC;AAAA,EACDA,EAAC;AAAA;AAAA,KAEEA,EAAC;AAAA,EACJA,EAAC;AAAA,EACDA,EAAC,gEAAgE,UAAUA,IAAG,CAAC,CAAC;AAAA;AAElF;AAqBA,SAAS,aAAaA,IAAW,KAAc,IAAW,UAAkB;AAW1E,QAAM,KAAK,EAAE,KAAK;AAAA,mDAAsDA,EAAC,yBAAyBA,EAAC,OAAO;AAC1G,QAAM,KAAK,EAAE,KAAK;AAAA,mDAAsDA,EAAC,yBAAyBA,EAAC,OAAO;AAC1G,MAAI,IAAK,QAAO,cAAcA,EAAC,OAAOA,EAAC,MAAMA,EAAC,MAAMA,EAAC,MAAMA,EAAC,MAAM,EAAE,GAAG,EAAE;AACzE,MAAI,CAAC,EAAE,MAAM,CAAC,EAAE,GAAI,QAAO,MAAMA,EAAC,0BAA0BA,EAAC,OAAOA,EAAC,MAAMA,EAAC,kBAAkBA,EAAC,MAAMA,EAAC;AACtG,SAAO,MAAMA,EAAC,2BAA2BA,EAAC,OAAOA,EAAC,MAAMA,EAAC,MAAM,EAAE,KAAK,GAAGA,EAAC,OAAO,GAAG,IAAI,EAAE,KAAK,GAAGA,EAAC,OAAO,WAAW,IAAIA,EAAC,MAAMA,EAAC;AACnI;AAgBA,SAAS,SAAS,QAAgB,KAAaA,IAAW,GAAc,MAAsB;AAC5F,QAAM,OAAO,SAASA,EAAC,KAAK,MAAM;AAAA,KAC/BA,EAAC;AAAA,EACJ,GAAG,IAAIA,EAAC;AAAA;AAER,MAAI,EAAE,QAAQ,SAAU,QAAO;AAC/B,QAAM,UAAU,SAASA,EAAC;AAAA,QACpBA,EAAC;AAAA,QACDA,EAAC;AAAA,QACDA,EAAC,KAAK,IAAI;AAAA,QACVA,EAAC;AAAA,QACDA,EAAC;AAAA,QACDA,EAAC;AAAA,QACDA,EAAC,KAAK,MAAM,UAAUA,EAAC;AAAA,KAC1BA,EAAC;AAAA,EACJ,GAAG,IAAIA,EAAC;AAAA,UACAA,EAAC;AAAA,mCACwBA,EAAC,MAAMA,EAAC,OAAOA,EAAC,MAAMA,EAAC,OAAOA,EAAC,MAAMA,EAAC;AACvE,MAAI,EAAE,QAAQ,YAAa,QAAO;AAClC,SAAO;AAAA,EACP,IAAI;AAAA;AAAA,EAEJ,OAAO;AAAA;AAET;AASA,SAAS,SAAS,WAAmB,YAAoB,MAAsB;AAC7E,MAAI,cAAc,QAAS,QAAO;AAClC,QAAM,OAAO,aAAa,IAAI;AAC9B,MAAI,cAAc,OAAQ,QAAO,eAAe,SAAS,IAAI,IAAI,MAAM,OAAO,UAAU,IAAI,IAAI;AAChG,SAAO,kBAAkB,UAAU,IAAI,IAAI;AAC7C;AAyCA,SAAS,gBAAgB,OAAuD;AAC9E,QAAM,IAAI,IAAI,YAAY,GAAG;AAC7B,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,UAAM,MAAM,MAAM,CAAC;AACnB,UAAM,MAAM,KAAK;AACjB,QAAI,QAAQ,MAAM;AAAE,eAAS,IAAI,GAAG,IAAI,KAAK,IAAK,GAAE,CAAC,KAAM;AAAK;AAAA,IAAS;AACzE,aAAS,IAAI,GAAG,IAAI,KAAK,IAAK,KAAI,IAAI,MAAM,CAAC,MAAM,EAAG,GAAE,CAAC,KAAM;AAAA,EACjE;AACA,SAAO;AACT;AAMO,SAAS,aACd,IACA,IACA,MACqG;AACrG,QAAM,UAAU,KAAK,QAAQ,IAAI,SAAO,IAAI,IAAI,OAAM,IAAI,IAAI,OAAO,GAAG,CAAC,KAAK,IAAK,CAAC;AACpF,SAAO;AAAA,IACL;AAAA,IACA,aAAa,KAAK,YAAY,IAAI,SAAO,IAAI,IAAI,OAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAAA,IAClE,OAAO,KAAK,MAAM,IAAI,QAAM,gBAAgB,QAAQ,EAAE,CAAE,CAAC;AAAA,EAC3D;AACF;AASO,SAAS,mBACdA,IACA,MACA,KASA,WAA8B,CAAC,GACnB;AACZ,QAAM,EAAE,MAAM,GAAG,MAAM,KAAK,eAAe,IAAIA;AAC/C,QAAM,YAAY,CAAC,IAAI;AACvB,QAAM,UAAU,IAAI;AA0BpB,QAAM,MAAM,KAAK,QAAQ,KAAK,IAAI;AAClC,MAAI,IAAI,SAAU,OAAM,IAAI,YAAY,qBAAqB;AAM7D,QAAM,QAAQ,CAAC,GAAG,OAAO,OAAO,KAAK,KAAK,GAAG,GAAG,QAAQ;AACxD,QAAM,SAAS,kBAAkB,MAAM,OAAO,OAAO;AAmBrD,QAAM,SAAgB,MAAM;AAC1B,QAAI,KAAK;AAUT,QAAI,KAAK;AACT,eAAW,MAAM,eAAe,MAAM,KAAK,GAAG;AAC5C,YAAM,KAAK,KAAK,EAAE;AAClB,UAAI,OAAO,SAAS;AAAE,aAAK;AAAM,aAAK;AAAM;AAAA,MAAM;AAClD,UAAI,OAAO,SAAU,MAAK;AAAA,eACjB,OAAO,UAAW,MAAK;AAAA,IAClC;AACA,WAAO,EAAE,IAAI,GAAG;AAAA,EAClB,GAAG;AAEH,QAAM,SAAmB,CAAC;AAC1B,QAAM,OAAO,oBAAI,IAAoB;AACrC,QAAM,UAAU,oBAAI,IAAY;AAChC,QAAM,UAAoB,CAAC;AAC3B,QAAM,WAAqB,CAAC;AAC5B,QAAM,WAAW,oBAAI,IAAoB;AACzC,QAAM,OAAO,oBAAI,IAAoB;AACrC,QAAM,QAAuB,CAAC;AAC9B,QAAM,UAAsC,CAAC;AAC7C,QAAM,cAAuC,CAAC;AAQ9C,QAAM,YAAwB,CAAC;AAC/B,QAAM,kBAA8B,CAAC;AACrC,QAAM,WAAqB,CAAC;AAG5B,WAAS,MAAM,MAAc,MAAsB;AACjD,UAAM,MAAM,KAAK,IAAI,IAAI;AACzB,QAAI,QAAQ,OAAW,QAAO;AAC9B,UAAM,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI;AAC/B,SAAK,IAAI,MAAM,EAAE;AACjB,YAAQ,KAAK,SAAS,EAAE,IAAI,IAAI,EAAE;AAClC,WAAO;AAAA,EACT;AACA,QAAM,OAAO,CAAC,MAAsB,MAAM,KAAK,KAAK,CAAC,GAAG;AACxD,QAAM,QAAQ,CAAC,MAAsB,MAAM,MAAM,MAAM,CAAC,GAAG;AAC3D,QAAM,QAAQ,CAAC,MAAsB,MAAM,MAAM,OAAO,CAAC,GAAG;AAQ5D,QAAM,UAAU,CAAC,QAAwB,MAAM,IAAI,cAAc,MAAM,QAAQ,SAAS,GAAG,GAAG;AAG9F,MAAI,MAAM;AACV,QAAM,MAAM,MAAc,KAAK,KAAK;AAoBpC,WAAS,QAAQ,GAAsB;AACrC,QAAI,EAAE,MAAM,EAAG,QAAO;AACtB,UAAM,KAAK,EAAE;AAMb,UAAM,UAAU,aAAa,CAAC,eAAe,EAAE,KAAMA,GAAE,WAAW,EAAE,KAAK;AACzE,UAAM,MAAM,GAAG,EAAE,IAAI,UAAU,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,IAAI,EAAE,GAAG;AAC9D,UAAM,MAAM,SAAS,IAAI,GAAG;AAC5B,QAAI,QAAQ,OAAW,QAAO;AAC9B,UAAM,KAAK,MAAM,SAAS,IAAI;AAC9B,aAAS,IAAI,KAAK,EAAE;AACpB,QAAI,CAAC,SAAS;AAIZ,eAAS,KAAK,EAAE,MACZ,YAAY,EAAE,+EACd,YAAY,EAAE;AAAA;AAAA,qCAEa;AAC/B,aAAO;AAAA,IACT;AACA,UAAM,KAAK,MAAM,MAAM,cAAc,EAAE,GAAG;AAG1C,UAAM,OAAO,EAAE,MAAM,SAAS;AAC9B,UAAM,YAAY,EAAE,QAAQ,UAAU,UAAU,EAAE,QAAQ,SAAS,OAAO,8BAA8B,IAAI;AAC5G,QAAI,cAAc,QAAQ;AAExB,eAAS,KAAK,YAAY,EAAE,4CAA4C,EAAE,kBAAkB;AAC5F,aAAO;AAAA,IACT;AACA,UAAM,QAAQ,cAAc,UACxB,+BACA,gCAAgC,SAAS;AAC7C,aAAS,KAAK,YAAY,EAAE;AAAA,KAC3B,KAAK,WAAW,EAAE;AAAA,2BACI,EAAE,kBAAkB;AAC3C,WAAO;AAAA,EACT;AAuBA,WAAS,SACP,IACA,IACA,OACA,aACoB;AACpB,UAAM,KAAK,EAAE,EAAE;AACf,QAAI,EAAE,cAAc,QAAS,QAAO;AACpC,UAAM,QAAQ,mBAAmB,GAAG,QAAQ,GAAG,KAAK;AACpD,QAAI,UAAU,KAAM,QAAO;AAC3B,QAAI,IAAI;AACR,UAAM,IAAI,IAAI;AACd,UAAM,IAAI,eAAe,OAAO,OAAO,CAAC,SAAS,SAAS,GAAG,CAAC,GAAG,MAAM,GAAG,GAAG,IAAI,EAAE;AACnF,WAAO;AAAA,EACT,EAAE,MAAM,KAAK,IAAI,CAAC;AAAA,KACf,EAAE,EAAE;AAAA,UACC,EAAE,GAAG;AAAA;AAAA,EAEb,YAAY,GAAG,CAAC;AAAA,EAChB,QAAQ,+BAA+B,EAAE;AAAA;AAAA;AAAA,sBAGrB,EAAE;AAAA,EACtB,IAAI,QAAQ,cAAc,EAAE;AAAA,IAAY,EAAE;AAAA;AAAA,EAE1C;AAEA,WAAS,KAAK,IAAoB;AAChC,UAAM,MAAM,KAAK,IAAI,EAAE;AACvB,QAAI,QAAQ,OAAW,QAAO;AAK9B,UAAM,SAAS,aAAa,EAAE;AAC9B,UAAM,OAAO,KAAK,IAAI,MAAM;AAC5B,QAAI,SAAS,OAAW,QAAO;AAC/B,UAAM,QAAQ,MAAM,MAAM;AAI1B,SAAK,IAAI,QAAQ,KAAK;AACtB,WAAO,KAAK,MAAM,QAAQ,KAAK,CAAC;AAChC,WAAO;AAAA,EACT;AAwBA,WAAS,aAAa,IAAoB;AACxC,QAAI,MAAM;AACV,QAAI;AACJ,eAAS;AACP,cAAQ,IAAI,GAAG;AACf,YAAM,OAAO,QAAQ,GAAG;AACxB,UAAI,SAAS,OAAW,QAAO;AAC/B,UAAI,SAAS,OAAW,QAAO,oBAAI,IAAI,CAAC,GAAG,CAAC;AAAA,eACnC,KAAK,IAAI,GAAG,EAAG,OAAM,IAAI,YAAY,6DAA6D;AAAA,UACtG,MAAK,IAAI,GAAG;AACjB,YAAM;AAAA,IACR;AAAA,EACF;AAGA,WAAS,QAAQ,IAAgC;AAC/C,UAAM,KAAK,KAAK,EAAE;AAGlB,QAAI,OAAO,YAAY,IAAI,YAAY,IAAI,OAAQ,QAAO,KAAK,KAAK,CAAC;AACrE,QAAI,OAAO,QAAS,QAAO,KAAK,KAAK,CAAC;AAiBtC,SAAK,OAAO,kBAAmB,OAAO,YAAY,KAAK,KAAK,CAAC,MAAO,MAAO,KAAK,KAAK,CAAC,KAAM,KACvF,OAAO,GAAG,EAAE,EAAE,QAAQ,KAAK,KAAK,CAAC,GAAI;AACxC,aAAO,KAAK,KAAK,CAAC;AAAA,IACpB;AACA,WAAO;AAAA,EACT;AAEA,WAAS,MAAM,IAAY,OAAuB;AAChD,UAAM,KAAK,KAAK,EAAE;AAClB,UAAM,OAAO,YAAY,KAAK;AAC9B,UAAM,IAAI,OAAO,GAAG,EAAE;AAkBtB,UAAM,WAAW,EAAE,OAAO,CAAC,IAAI,aAAa,iBAAiB;AAC7D,UAAM,cAAc,CAAC,UAA0B;AAC7C,YAAM,OAAO,GAAG,QAAQ,QAAQ,KAAK;AACrC,aAAO,EAAE,MAAM,OAAO,0DAA0D,IAAI;AAAA,IACtF;AACA,YAAQ,IAAI;AAAA,MACV,KAAK;AAAA,MACL,KAAK,cAAc;AACjB,cAAM,IAAI,EAAE,KAAK,KAAK,CAAC,CAAE;AACzB,cAAM,KAAK,MAAM,KAAK,KAAK,CAAC,CAAE;AAC9B,cAAM,QAAQ,OAAO;AAGrB,cAAM,OAAO,EAAE,WAAW,IACtB,2BAA2B,EAAE,WAAW,CAAC,CAAC,KAC1C,EAAE,WAAW,IACX,2BAA2B,EAAE,WAAW,CAAC,CAAC,+BAA+B,EAAE,WAAW,CAAC,CAAC,KACxF,oBAAoB,EAAE,CAAC,CAAC;AAC9B,eAAO,GAAG,IAAI;AAAA,KACjB,IAAI;AAAA,cACK,EAAE,MAAM;AAAA,EACpB,YAAY,EAAE,CAAC,CAAC,CAAC;AAAA,EACjB,QAAQ,+BAA+B,EAAE;AAAA,SAClC,EAAE,CAAC,CAAC;AAAA;AAAA,sBAES,EAAE;AAAA,EACtB,IAAI,QAAQ,cAAc,EAAE;AAAA,IAAY,EAAE;AAAA;AAAA,MAEtC;AAAA,MAEA,KAAK;AAAA,MACL,KAAK,iBAAiB;AACpB,cAAM,IAAI,EAAE,KAAK,KAAK,CAAC,CAAE;AACzB,cAAM,KAAK,MAAM,KAAK,KAAK,CAAC,CAAE;AAC9B,cAAM,QAAQ,OAAO;AAqBrB,cAAM,QAAkB,CAAC;AACzB,cAAM,QAAkB,CAAC;AACzB,iBAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;AACjC,gBAAM,MAAM,EAAE,WAAW,CAAC;AAC1B,gBAAM,IAAI,OAAO,MAAM,OAAO,KAAK,MAAM,KAAK;AAC9C,gBAAM,KAAK,MAAM,IAAI,QAAQ,OAAO,CAAC;AACrC,cAAI,KAAK,MAAM,KAAK,KAAK;AACvB,kBAAM,KAAK,UAAU,CAAC,qBAAqB,EAAE,GAAG;AAChD,kBAAM,KAAK,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,GAAG;AAAA,UAChD,OAAO;AACL,kBAAM,KAAK,oBAAoB,EAAE,OAAO,CAAC,EAAE;AAAA,UAC7C;AAAA,QACF;AACA,eAAO,GAAG,IAAI;AAAA,EACpB,MAAM,SAAS,IAAI,GAAG,MAAM,KAAK,IAAI,CAAC;AAAA,IAAO,EAAE,MAAM,MAAM,KAAK,IAAI,CAAC;AAAA,cACzD,EAAE,MAAM;AAAA;AAAA,EAEpB,YAAY,GAAG,CAAC;AAAA,EAChB,QAAQ,+BAA+B,EAAE;AAAA;AAAA;AAAA,sBAGrB,EAAE;AAAA,EACtB,IAAI,QAAQ,cAAc,EAAE;AAAA,IAAY,EAAE;AAAA;AAAA,MAEtC;AAAA,MAEA,KAAK;AAAA,MACL,KAAK,aAAa;AAChB,cAAM,KAAK,MAAM,KAAK,KAAK,CAAC,CAAE;AAC9B,cAAM,QAAQ,OAAO;AASrB,cAAM,UAAU,SAAS,KAAK,KAAK,CAAC,GAAI,IAAI,OAAO,WAAW;AAC9D,YAAI,YAAY,OAAW,QAAO,GAAG,IAAI,GAAG,OAAO;AAMnD,cAAM,MAAM,EAAE,KAAK,KAAK,CAAC,CAAE;AAC3B,YAAI,EAAE,eAAe,WAAW,CAAC,IAAI,OAAQ,OAAM,IAAI,YAAY,wBAAwB;AAS3F,cAAM,KAAK,KAAK,KAAK,KAAK,CAAC,CAAE;AAC7B,eAAO,GAAG,IAAI;AAAA,EACpB,EAAE;AAAA,KACC,EAAE;AAAA,UACG,EAAE;AAAA;AAAA,EAEV,YAAY,GAAG,CAAC;AAAA,EAChB,QAAQ,+BAA+B,EAAE;AAAA;AAAA;AAAA,sBAGrB,EAAE;AAAA,EACtB,IAAI,QAAQ,cAAc,EAAE;AAAA,IAAY,EAAE;AAAA;AAAA,MAEtC;AAAA,MAEA,KAAK;AASH,eAAO,GAAG,IAAI;AAAA,MAEhB,KAAK,SAAS;AACZ,cAAM,QAAQ,KAAK,KAAK,KAAK,CAAC,CAAE;AAChC,cAAM,KAAK,QAAQ,KAAK,CAACA,GAAE,GAAG,KAAK,KAAK,CAAC,CAAE,CAAE,CAAC,IAAI;AAClD,kBAAU,KAAK,CAAC,KAAK,KAAK,CAAC,CAAE,CAAC;AAC9B,cAAM,MAAM,MAAM,MAAM,OAAO,EAAE,MAAM;AACvC,cAAM,KAAK,MAAM,KAAK,KAAK,CAAC,CAAE;AAC9B,eAAO,GAAG,IAAI;AAAA,eACP,GAAG,0CAA0C,EAAE;AAAA,SACrD,KAAK;AAAA;AAAA,MAER;AAAA,MAEA,KAAK,UAAU;AACb,cAAM,KAAK,MAAM,KAAK,KAAK,CAAC,CAAE;AAC9B,cAAM,QAAQ,KAAK,KAAK,KAAK,CAAC,CAAE;AAChC,eAAO,GAAG,IAAI;AAAA,UACZ,KAAK;AAAA;AAAA,SAEN,EAAE;AAAA;AAAA,MAEL;AAAA,MAEA,KAAK,UAAU;AACb,cAAM,QAAQ,KAAK,KAAK,KAAK,CAAC,CAAE;AAChC,cAAM,KAAK,MAAM,KAAK,KAAK,CAAC,CAAE;AAK9B,eAAO,GAAG,IAAI;AAAA,UACZ,KAAK;AAAA,sBACO,EAAE;AAAA;AAAA;AAAA,MAGlB;AAAA,MAEA,KAAK,UAAU;AACb,cAAM,OAAO,EAAE,EAAE,KAAK,KAAK,CAAC,CAAE,CAAW;AACzC,cAAM,QAAQ,KAAK,KAAK,KAAK,CAAC,CAAE;AAIhC,eAAO,GAAG,IAAI;AAAA,UACZ,KAAK;AAAA;AAAA;AAAA,gCAGiB,IAAI;AAAA;AAAA;AAAA,MAG9B;AAAA,MAEA,KAAK,WAAW;AACd,cAAM,QAAQ,KAAK,KAAK,KAAK,CAAC,CAAE;AAChC,cAAM,KAAK,MAAM,KAAK,KAAK,CAAC,CAAE;AAW9B,eAAO,GAAG,IAAI;AAAA,UACZ,KAAK;AAAA;AAAA,oCAEqB,KAAK,UAAU,IAAI,2BAA2B,qBAAqB,aAAa,EAAE;AAAA;AAAA;AAAA,EAGpH,MAAM,oDAAoD,EAAE;AAAA;AAAA;AAAA;AAAA,MAIxD;AAAA,MAEA,KAAK,WAAW;AACd,cAAM,KAAK,KAAK,KAAK,CAAC;AACtB,cAAM,WAAW,MAAM,IAAI,KAAK,EAAE,IAAI;AAItC,cAAM,OAAO;AACb,eAAO,GAAG,IAAI;AAAA;AAAA;AAAA,EAGpB,aAAa,SAAY,UAAU,QAAQ,oBAAoB,2CAA2C;AAAA;AAAA,EAE1G,EAAE,MAAM,OAAO,0DAA0D,IAAI,EAAE;AAAA;AAAA;AAAA;AAAA,MAI3E;AAAA,MAEA,KAAK,SAAS;AACZ,cAAM,KAAK,KAAK,KAAK,CAAC;AAItB,eAAO,GAAG,IAAI;AAAA,gBACN,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,MAKZ;AAAA,MAEA,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK,gBAAgB;AACnB,cAAM,KAAK,KAAK,KAAK,CAAC;AACtB,cAAM,MAAM,OAAO;AACnB,cAAM,QAAQ,OAAO,iBAAiB,IAAI,KAAK,KAAK,CAAC;AACrD,cAAM,QAAQ,KAAK,KAAK,KAAK,CAAC,CAAE;AAIhC,cAAM,UAAU,aAAa,MAAM,KAAK,CAAC,eAAe,EAAE,IAAK,MAAM,MAAM,cAAc,EAAE,GAAG,IAAI;AAClG,cAAM,MAAM,KAAK,IAAI,cAAc,MAAM,MAAM,UAAU,EAAE,GAAG;AAC9D,cAAM,MAAM,KAAK,IAAI,cAAc,MAAM,MAAM,UAAU,EAAE,0BAA0B;AAIrF,cAAM,UAAU,QAAQ,OAAO,IAAI,+DAA+D;AAClG,cAAM,WAAW,QAAQ,OAAO;AAChC,eAAO,GAAG,IAAI;AAAA,EACpB,MAAM,GAAG,UAAU,oEAAoE,EAAE,yDAAyD,MAAM,0BAA0B,EAAE;AAAA,UAC5K,OAAO;AAAA,aACJ,GAAG;AAAA,uBACO,GAAG;AAAA,EACxB,MAAM,6BAA6B,EAAE,WAAW,KAAK;AAAA,EACrD,MAAM,2BAA2B,EAAE;AAAA;AAAA;AAAA,EAGnC,UAAU,gCAAgC,EAAE;AAAA;AAAA,MAExC;AAAA;AAAA,MAIA,KAAK;AAAA,MACL,KAAK,SAAS;AACZ,cAAM,UAAU,OAAO;AACvB,cAAM,KAAK,UAAU,SAAY,MAAM,KAAK,KAAK,CAAC,CAAE;AACpD,cAAM,QAAQ,KAAK,UAAU,KAAK,KAAK,CAAC,IAAK,KAAK,KAAK,CAAC,CAAE;AAa1D,cAAM,SAAS,EAAE,MAAM,SAAS;AAIhC,eAAO,GAAG,IAAI;AAAA;AAAA;AAAA,EAGpB,UAAU,8FAA8F,EAAE,gBAAgB,MAAM;AAAA,EAChI,UAAU;AAAA;AAAA;AAAA,IAGR,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMJ,UAAU,mCAAmC,EAAE;AAAA,QACzC,KAAK;AAAA,EACX,UAAU;AAAA;AAAA;AAAA;AAAA,IAIR,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YASM,UAAU,uBAAuB,GAAG,EAAE,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKnE;AAAA;AAAA,MAIA,KAAK,YAAY;AACf,cAAM,QAAQ,KAAK,KAAK,KAAK,CAAC,CAAE;AAChC,cAAM,IAAI,IAAI;AACd,eAAO,GAAG,IAAI;AAAA,EACpB,SAAS,GAAG,EAAE,KAAK,KAAK,CAAC;AAAA,UACjB,KAAK;AAAA;AAAA,EAEb,aAAa,GAAG,EAAE,KAAK,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,MAKzB;AAAA,MAEA,KAAK,QAAQ;AACX,cAAM,QAAQ,KAAK,KAAK,KAAK,CAAC,CAAE;AAChC,cAAM,KAAK,MAAM,KAAK,KAAK,CAAC,CAAE;AAC9B,cAAM,IAAI,IAAI;AACd,eAAO,GAAG,IAAI;AAAA,EACpB,SAAS,GAAG,EAAE,KAAK,KAAK,CAAC;AAAA,UACjB,KAAK;AAAA,EACb,aAAa,GAAG,EAAE,KAAK,KAAK,CAAC;AAAA;AAAA;AAAA,UAGrB,EAAE;AAAA;AAAA;AAAA,MAGN;AAAA,MAEA,KAAK,SAAS;AACZ,cAAM,QAAQ,KAAK,KAAK,KAAK,CAAC,CAAE;AAChC,cAAM,KAAK,MAAM,KAAK,KAAK,CAAC,CAAE;AAC9B,cAAM,IAAI,IAAI;AACd,eAAO,GAAG,IAAI;AAAA,EACpB,SAAS,GAAG,EAAE,KAAK,KAAK,CAAC;AAAA,UACjB,KAAK;AAAA,EACb,aAAa,GAAG,EAAE,KAAK,KAAK,CAAC;AAAA,mCACI,EAAE;AAAA;AAAA;AAAA;AAAA,MAI/B;AAAA,MAEA,KAAK,QAAQ;AACX,cAAM,QAAQ,KAAK,KAAK,KAAK,CAAC,CAAE;AAChC,cAAM,IAAI,IAAI;AACd,eAAO,GAAG,IAAI;AAAA,EACpB,SAAS,GAAG,EAAE,KAAK,KAAK,CAAC;AAAA;AAAA,UAEjB,KAAK;AAAA;AAAA;AAAA,EAGb,aAAa,GAAG,EAAE,KAAK,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMzB;AAAA,MAEA,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK,SAAS;AACZ,cAAM,QAAQ,OAAO;AACrB,cAAM,OAAO,QAAQ,KAAK,IAAI,KAAK;AACnC,cAAM,IAAI,KAAK,QAAQ,KAAK,IAAI,KAAK,CAAC;AACtC,cAAM,aAAa,OAAO;AAM1B,iBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,cAAI,KAAK,KAAK,OAAO,CAAC,CAAE,MAAM,QAAQ;AACpC,kBAAM,IAAI,YAAY,qDAAqD;AAAA,UAC7E;AAAA,QACF;AACA,cAAM,KAAK,QAAQ,MAAM,KAAK,KAAK,CAAC,CAAE,IAAI;AAC1C,cAAM,OAAiB,CAAC;AACxB,iBAAS,IAAI,GAAG,IAAI,GAAG,IAAK,MAAK,KAAK,KAAK,KAAK,OAAO,CAAC,CAAE,CAAC;AAyB3D,cAAM,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO;AAChC,cAAM,MAAM,CAAC,MAAsB;AACjC,gBAAM,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,CAAE;AACrC,iBAAO,MAAM,cAAc,aAAa,EAAE,KAAK,aAAa,CAAC,KAAK,EAAE;AAAA,QACtE;AACA,cAAM,QAAkB,CAAC,IAAI;AAC7B,YAAI,IAAK,OAAM,KAAK,SAAS,EAAE,cAAc,QAAQ,IAAI,CAAC,CAAC;AAC3D,cAAM,KAAK,YAAY,KAAK,CAAC,CAAC,mBAAmB,0BAA0B;AAC3E,cAAM,QAAQ,MAAc,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;AAAA,qBAAwB,EAAE;AAAA,KAAS,GAAG,MAAM,KAAK,IAAI,CAAC;AAAA;AAC3G,YAAI,MAAM,GAAG;AACX,gBAAM,KAAK,QAAQ,UAAU,EAAE,gCAAgC,aAAa,gBAAgB,kBAAkB;AAC9G,iBAAO,MAAM;AAAA,QACf;AACA,cAAM,KAAK,cAAc;AACzB,cAAM,QAAkB,CAAC,IAAI;AAC7B,iBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,gBAAM,KAAK,IAAI,CAAC;AAChB,gBAAM,KAAK,OAAO,EAAE,EAAE;AACtB,cAAI,IAAK,OAAM,KAAK,IAAI,CAAC,CAAC;AAC1B,gBAAM,KAAK,SAAS,KAAK,CAAC,GAAI,IAAI,IAAI,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC;AACvD,gBAAM,KAAK,EAAE;AAAA,QACf;AACA,cAAM,KAAK,UAAU;AACrB,cAAM,KAAK,QACP,UAAU,EAAE,KAAK,MAAM,KAAK,GAAG,CAAC,2BAChC,aAAa,WAAW,MAAM,KAAK,GAAG,CAAC,MAAM,kBAAkB;AACnE,eAAO,MAAM;AAAA,MACf;AAAA,MAEA,KAAK,WAAW;AACd,cAAM,QAAQ,KAAK,KAAK,KAAK,CAAC,CAAE;AAChC,cAAM,IAAI,KAAK,KAAK,CAAC;AACrB,cAAM,WAAW,MAAM,KAAK,KAAK,CAAC,CAAE;AACpC,cAAM,OAAO,KAAK;AAClB,cAAM,OAAiB,CAAC;AACxB,iBAAS,IAAI,GAAG,IAAI,GAAG,IAAK,MAAK,KAAK,KAAK,KAAK,OAAO,CAAC,CAAE,CAAC;AAC3D,cAAM,MAAM,YAAY;AAAA,UACtB,MAAM,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,MAAMA,GAAE,GAAG,KAAK,OAAO,IAAI,CAAC,CAAE,CAAsB;AAAA,QACpF,IAAI;AACJ,wBAAgB,KAAK,MAAM,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,MAAM,KAAK,OAAO,IAAI,CAAC,CAAE,CAAC;AAC7E,cAAM,MAAM,MAAM,OAAO,OAAO,GAAG,GAAG;AAEtC,YAAI,MAAM,WAAW;AAGnB,gBAAM,KAAK,KAAK,KAAK,CAAC;AACtB,gBAAM,MAAM,MAAM,MAAM,QAAQ,EAAE,SAAS;AAC3C,gBAAM,QAAQ,MAAM;AAIpB,gBAAM,YAAY,KAAK,IAAI,CAAC,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,uBAAuB,EAAE,KAAK,IAAI;AACvF,iBAAO,GAAG,IAAI;AAAA;AAAA;AAAA,0BAGE,GAAG;AAAA,EAC3B,MAAM,WAAW,IAAI,KAAK,2BAA2B,MAAM,MAAM,QAAQ,EAAE,MAAM,CAAC;AAAA,wEACZ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKtE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAOW,QAAQ;AAAA;AAAA;AAAA,QAGtB;AAKA,cAAM,KAAK,QAAQ,KAAK,MAAM,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,MAAM,MAAM,OAAO,CAAC,KAAK,IAAI,CAAC,IAAI;AAIxF,kBAAU,KAAK,MAAM,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,MAAM,KAAK,KAAK,KAAK,KAAK,CAAC,CAAE,EAAG,CAAC,KAAK,EAAE,CAAC;AACtF,cAAM,QAAQ,QAAQ,EAAE;AACxB,cAAM,OAAO,MAAM,KAAK,OAAO,EAAE,GAAG;AACpC,cAAM,WAAW,KAAK;AACtB,YAAI,WAAW;AACf,YAAI,UAAU;AACZ,qBAAW,MAAM,MAAM,QAAQ,MAAM,KAAK,gBAAgB,KAAK,CAAC,IAAI,CAAC,GAAG;AAGxE,mBAAS,KAAK,EAAE;AAAA,QAClB;AACA,cAAM,IAAI,IAAI;AAKd,cAAM,WAAW,KAAK,IAAI,CAAC,GAAG,MAAM;AAAA,WACjC,KAAK,CAAC;AAAA;AAAA,WAEN,CAAC;AAAA;AAAA,mBAEO,CAAC,yCAAyC,GAAG;AAAA,OACzD,IAAI,CAAC;AAAA;AAAA;AAAA,EAGV,aAAa,GAAG,EAAE,KAAK,KAAK,CAAC;AAAA,EAC7B,EAAE,KAAK,EAAE;AAEH,cAAM,cAAc,KAAK,IAAI,CAAC,GAAG,MAAM;AAAA,KAC1C,IAAI,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC;AAAA;AAAA,WAElC,CAAC;AAAA;AAAA;AAAA;AAAA,EAIV,aAAa,GAAG,EAAE,KAAK,KAAK,CAAC;AAAA,oBACX,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE;AAErC,eAAO,GAAG,IAAI;AAAA;AAAA,EAEpB,SAAS,GAAG,EAAE,KAAK,KAAK,CAAC;AAAA;AAAA,EAEzB,WAAW;AAAA,aACA,QAAQ;AAAA;AAAA,EAEnB,QAAQ;AAAA,mBACS,CAAC,yCAAyC,GAAG;AAAA,2BACrC,QAAQ;AAAA;AAAA;AAAA,IAG/B,EAAE,GAAG,WAAW;AAAA,2BACO,QAAQ;AAAA;AAAA;AAAA,MAG7B;AAAA,MAEA,KAAK,aAAa;AAChB,cAAM,KAAK,KAAK,KAAK,CAAC;AACtB,cAAM,OAAO,IAAI,EAAE;AACnB,cAAM,WAAW,KAAK,KAAK,KAAK,CAAC,CAAE;AACnC,cAAM,UAAU,KAAK,KAAK,CAAC;AAC3B,cAAM,QAAQ,WAAW,IAAI,KAAK,OAAO,IAAI;AAC7C,cAAM,cAAc,KAAK,KAAK,CAAC,MAAO;AACtC,cAAM,IAAI,KAAK,KAAK,CAAC;AACrB,6BAAqB,MAAM,GAAG,KAAK,KAAK,CAAC,CAAE;AAC3C,cAAM,UAAU,KAAK;AACrB,cAAM,OAAiB,CAAC;AACxB,iBAAS,IAAI,GAAG,IAAI,GAAG,IAAK,MAAK,KAAK,KAAK,KAAK,UAAU,CAAC,CAAE,CAAC;AAC9D,cAAM,KAAK,MAAM,MAAM,OAAO,EAAE,SAAS;AACzC,cAAM,KAAK,MAAM,MAAM,OAAO,EAAE,YAAY;AAS5C,cAAM,SAAS,CAAC,MAAyD;AACvE,kBAAQ,EAAE,CAAC,GAAG;AAAA,YACZ,KAAK;AAAG,qBAAO,kBAAkB,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,YACxC,KAAK;AAAG,qBAAO,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,YACtC,KAAK;AAAG,qBAAO,gCAAgC,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,YACtD,KAAK;AAAG,qBAAO,8BAA8B,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,YACpD;AAAS,qBAAO,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,UAClD;AAAA,QACF;AACA,cAAM,QAAQ,KAAK,MAAM,WAAW,IAChC,KACA;AAAA,EAAyB,KAAK,MAAM,IAAI,CAAC,GAAG,MAAM,GAAG,MAAM,IAAI,KAAK,OAAO,MAAM,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA;AACxH,cAAM,OAAO,KAAK,OAAO,OAAO,IAC5B,0BAA0B,MAAM,MAAM,OAAO,EAAE,UAAU,CAAC;AAAA,IAC1D;AACJ,cAAM,KAAK,IAAI;AACf,cAAM,KAAK,IAAI;AACf,cAAM,aAAa,CAAC,WAA2B;AAAA,EACrD,aAAa,IAAI,EAAE,KAAK,KAAK,CAAC;AAAA,EAC9B,SAAS,IAAI,EAAE,KAAK,OAAO,KAAK,CAAC;AAAA;AAAA,QAE3B,MAAM;AAAA;AAEN,cAAM,YAAY,CAAC,WAA2B,KAAK,MAAM;AACzD,cAAM,WAAW,KAAK,IAAI,CAAC,QAAQ,MAAM,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,IACrE,WAAW,MAAM,IACjB,UAAU,MAAM,CAAC,EAAE,EAAE,KAAK,IAAI;AAClC,cAAM,eAAe,UAAU,SAAY,KAAK,WAAW,cACvD,WAAW,KAAK,IAChB,UAAU,KAAK,CAAC;AAKpB,eAAO,GAAG,IAAI;AAAA,EACpB,SAAS,IAAI,EAAE,KAAK,KAAK,CAAC;AAAA,WACjB,QAAQ;AAAA;AAAA;AAAA;AAAA,UAIT,EAAE;AAAA,EACV,IAAI,GAAG,KAAK;AAAA;AAAA,EAEZ,UAAU,SAAY,0BAA0B,EAAE,iBAAiB,EAAE;AAAA;AAAA,EAErE,SAAS,IAAI,EAAE,KAAK,KAAK,CAAC;AAAA;AAAA;AAAA,EAG1B,QAAQ;AAAA,EACR,YAAY;AAAA;AAAA;AAAA,EAGZ,aAAa,IAAI,EAAE,KAAK,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM1B;AAAA,MAEA,KAAK;AAAA,MACL,KAAK,SAAS;AACZ,cAAM,QAAQ,KAAK,KAAK,KAAK,CAAC,CAAE;AAChC,cAAM,MAAM,KAAK,KAAK,CAAC;AACvB,cAAM,MAAM,KAAK,KAAK,CAAC;AACvB,cAAM,QAAQ,KAAK,KAAK,CAAC;AACzB,cAAM,MAAM,SAAS,IAAI,KAAK,KAAK,IAAI;AACvC,cAAM,QAAQ,KAAK,KAAK,CAAC;AACzB,cAAM,kBAAkB,QAAQ,OAAO;AACvC,cAAM,mBAAmB,QAAQ,OAAO;AACxC,cAAM,cAAc,QAAQ,OAAO;AACnC,cAAM,SAAS,aAAa,MAAM,KAAK,KAAK,CAAC,CAAE,IAAI;AACnD,cAAM,UAAU,OAAO;AACvB,cAAM,kBAAkB,QAAQ,KAAK,QAAQ;AAC7C,cAAM,IAAI,IAAI;AAId,cAAM,MAAM,QAAQ,SAChB,UACA,QAAQ,IACL,kBAAkB,SAAS,YAC5B,UAAU,GAAG;AACnB,cAAM,aAAa,kBAAkB,SAAS;AAM9C,cAAM,OAAO,QAAQ,CAAC;AACtB,cAAM,cAAc,EAAE,QAAQ,WAAW,QAAQ,EAAE,QAAQ,cAAc,OAAO;AAChF,cAAM,YAAY,gBAAgB,SAAY,cAAc,OAAO,WAAW;AAC9E,cAAM,WAAW,EAAE,MAAM,SAAS;AAMlC,cAAM,MAAM,MAAM,KAAK,GAAG,CAAC,OAAO;AAClC,cAAM,MAAM,MAAM,KAAK,GAAG,CAAC,OAAO;AAClC,cAAM,KAAK,EAAE,MACT,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,MAAM,KAAK;AAAA,mDAAsD,CAAC,yBAAyB,CAAC,OAAO,EAAE,GAAG,MAAM,KAAK;AAAA,mDAAsD,CAAC,yBAAyB,CAAC,OAAO,EAAE,KAC/P,oCAAoC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;AACpF,cAAM,YAAY,GAAG,MAAM,KAAK;AAAA,EAAK,CAAC,oDAAoD,EAAE,GAAG,MAAM,KAAK;AAAA,EAAK,CAAC,oDAAoD,EAAE;AACtK,cAAM,WAAW,EAAE,MACf;AAAA,gBACI,CAAC;AAAA,eACF,CAAC;AAAA,eACD,CAAC;AAAA,EACd,CAAC;AAAA,EACD,CAAC,gEAAgE,SAAS,KAChE;AAAA;AAAA;AAAA,gBAGI,CAAC;AAAA,eACF,CAAC;AAAA,eACD,CAAC;AAAA;AAAA,EAEd,CAAC;AAAA,EACD,CAAC;AAAA,EACD,CAAC;AAAA;AAAA,EAED,CAAC;AAAA,EACD,CAAC,gEAAgE,SAAS;AAAA;AAgCpE,cAAM,KAAK,GAAG,CAAC;AAKf,cAAM,QAAQ,MAAM,MAAM,KAAK,KAAK,CAAC,CAAE,IAAI;AAC3C,cAAM,UAAU,MAAM,QAAQ,KAAK,KAAK,CAAC,CAAE,IAAI;AAC/C,cAAM,UAAU,QAAQ,SACpB,KACA,YAAY,cACV,cAAc,EAAE,gBAChB,cAAc,OAAO,KAAK,EAAE,IAAI,OAAO,0BAA0B,EAAE;AACzE,cAAM,UAAU,QAAQ,UAAa,QAAQ,IAAI,KAAK,UAAU,GAAG;AACnE,cAAM,YAAY,CAAC,MAAM,KAAK,4BAA4B,EAAE,iBAAiB,OAAO,cAAc,EAAE;AAAA,EAC1G,QAAQ,SAAY,GAAG,EAAE;AAAA,IAAO,EAAE,4CAA4C,OAAO,IAAI,KAAK;AAAA,EAC9F,UAAU,yBAAyB,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAM/B,eAAO,GAAG,IAAI;AAAA,YACV,UAAU,OAAO,WAAW;AAAA,EACtC,gBAAgB,SAAY,6CAA6C,EAAE,GAAG,EAAE,MAAM,KAAK,uCAAuC,GAAG,MAAM,SAAS,EAAE;AAAA,IAAiB,EAAE;AAAA;AAAA;AAAA,EAGzK,OAAO,IAAI,aAAa,GAAG;AAAA,IAAa,EAAE,GAAG,QAAQ,SAAY,sBAAsB,GAAG;AAAA,IAAgC,EAAE,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,MAAM,KAAK,IAAI,CAAC,SAAS,EAAE,GAAG,MAAM,KAAK,IAAI,CAAC,SAAS,EAAE;AAAA,EACzO,QAAQ;AAAA;AAAA;AAAA,EAGR,QAAQ,SAAY;AAAA;AAAA;AAAA,EAGpB,cAAc,UAAU,KAAK,cAAc,SAAS,MAAM,IAAI;AAAA,IAAqB,mBAAmB,IAAI;AAAA,CAAkB;AAAA,WACnH,GAAG;AAAA;AAAA,EAEZ,EAAE;AAAA;AAAA;AAAA;AAAA,EAIF,iBAAiB,KAAK,+BAA+B;AAAA,YAC3C,cAAc,UAAU,SAAS,cAAc,SAAS,GAAG,IAAI,qBAAqB,aAAa,IAAI,uBAAuB;AAAA,QAChI,SAAS,WAAW,YAAY,IAAI,CAAC;AAAA,IACzC,GAAG,SAAS,WAAW,YAAY,IAAI,CAAC;AAAA,CAC3C,+BAA+B,GAAG;AAAA,EACjC,EAAE;AAAA,EACF,kBAAkB,8BAA8B,EAAE;AAAA;AAAA;AAAA,UAG1C,KAAK;AAAA;AAAA,EAEb,MAOE;AAAA,EACF,EAAE;AAAA;AAAA;AAAA,EAGF,SAAS,GAAG,EAAE,KACZ,GAAG,EAAE;AAAA,8BACqB;AAAA,EAC5B,kBAAkB,8BAA8B,EAAE;AAAA;AAAA,uBAE7B,GAAG;AAAA,EACxB,EAAE;AAAA;AAAA;AAAA,EAGF,UAAU,kBAAkB,EAAE;AAAA;AAAA;AAAA,EAG9B,MAAM,IAAI,YAAY,GAAG;AAAA,EACzB,aAAa,uBAAuB,MAAM;AAAA,IAAO,EAAE;AAAA;AAAA,IAEjD,EAAE;AAAA;AAAA;AAAA,MAGA;AAAA,MAEA,KAAK;AAAA,MACL,KAAK,eAAe;AAClB,cAAM,QAAQ,KAAK,KAAK,CAAC;AACzB,cAAM,QAAQ,KAAK,KAAK,KAAK,CAAC,CAAE;AAChC,cAAM,OAAO,KAAK,KAAK,CAAC;AACxB,cAAM,WAAW,KAAK,KAAK,CAAC;AAC5B,cAAM,OAAO,EAAE,KAAK,KAAK,CAAC,CAAE;AAC5B,cAAM,SAAS,KAAK,KAAK,CAAC;AAC1B,cAAM,OAAO,SAAS,IAAI,cAAc,KAAK,MAAM;AACnD,cAAM,UAAU,OAAO;AACvB,cAAM,eAAe,QAAQ,OAAO;AACpC,cAAM,cAAc,QAAQ,OAAO;AACnC,cAAM,aAAa,QAAQ,QAAQ;AACnC,cAAM,YAAY,QAAQ,QAAQ;AAClC,cAAM,UAAU,QAAQ,QAAQ;AAChC,cAAM,kBAAkB,QAAQ,SAAS;AAIzC,cAAM,QAAQ,YAAY,IAAI,MAAM,QAAQ,IAAI;AAChD,cAAM,aAAa,UAAU,UAAa,OAAO;AACjD,cAAM,kBAAkB,QAAQ,OAAO,KAAK;AAC5C,cAAM,uBAAuB,cAAc,IAAI,sBAAsB,SACjE,IAAI,kBAAkB,IAAI,IAC1B;AACJ,cAAM,aAAa,aAAa;AAChC,cAAM,cAAc,eAAe,UAC/B,CAAC,cAAc,kBAAkB,yBAAyB,QAC1D,yBAAyB;AAC7B,cAAM,eAAe,CAAC,cAAc,IAAI,sBAAsB,SAAS,YAAY;AACnF,cAAM,KAAK,EAAE,IAAI;AACjB,cAAM,QAAQ,aAAa,OAAO;AAClC,cAAM,WAAW,WAAW,EAAE,wCAAwC,KAAK,IAAI,IAAI;AACnF,YAAI;AACJ,YAAI,QAAQ,GAAG;AACb,kBAAQ,UACJ,0BAA0B,QAAQ,sBAAsB,IAAI,IAAI,EAAE,MAClE,wBAAwB,IAAI,IAAI,EAAE;AAAA,QACxC,WAAW,UAAU,QAAW;AAE9B,gBAAM,SAAS,GAAG,KAAK,+BAA+B,cAAc,SAAS,UAAU;AACvF,kBAAQ,UAAU,0BAA0B,QAAQ,IAAI,MAAM,KAAK,MAAM,MAAM;AAAA,QACjF,OAAO;AACL,kBAAQ,kCAAkC,EAAE,2CAA2C,IAAI,uBAAuB,EAAE;AAAA,QACtH;AAGA,cAAM,cAAc,iBAAiB,WAAY,UAAU,UAAa,OAAO;AAC/E,cAAM,cAAc,eAChB;AAAA;AAAA;AAAA;AAAA;AAAA,+BAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMJ,cAAM,gBAAgB,eAClB;AAAA;AAAA;AAAA,iCAIA;AAAA;AAAA;AAAA;AAIJ,eAAO,GAAG,IAAI;AAAA;AAAA;AAAA,EAGpB,WAAW;AAAA,oBACO,WAAW;AAAA;AAAA,cAEjB,aAAa,OAAO,WAAW;AAAA,EAC3C,aAAa;AAAA,uHACwG,EAAE;AAAA,IACrH,EAAE,WAAW,KAAK;AAAA,EACpB,kBAAkB,EAAE,QAAQ,WAC1B,cAAc,EAAE,QAAQ,cAAc,6BAA6B,EAAE;AAAA,IACrE,EAAE,kBAAkB,aAAa,+BAA+B,WAAW;AAAA;AAAA,EAE7E,aAAa,uCAAuC,EAAE,GAAG,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAS3D,UAAU,2BAA2B,iBAAiB;AAAA,WACxD,aAAa,kEAAkE,WAAW;AAAA;AAAA,EAEnG,SAAS,sDAAsD,EAAE,GAAG,WAAW,yCAAyC,EAAE,GAAG,cAAc,uIAAuI,EAAE;AAAA,SAC7Q,EAAE,IAAI,KAAK;AAAA,EAClB,EAAE,MAGA,oDACA,sFAAsF;AAAA;AAAA;AAAA;AAAA,MAIpF;AAAA,MAEA;AACE,cAAM,IAAI,YAAY,MAAM,SAAS,EAAG,KAAK,OAAO,EAAE,CAAC,EAAE;AAAA,IAC7D;AAAA,EACF;AAEA,QAAM,cAAwB,CAAC;AAC/B,aAAW,CAAC,OAAO,OAAO,KAAK,OAAO,QAAQ,KAAK,KAAK,GAAG;AAGzD,UAAM,SAAS,KAAK,OAAO;AAC3B,UAAM,KAAK,MAAM,MAAM,QAAQ,mBAAmB,GAAG,CAAC;AACtD,WAAO,KAAK,SAAS,EAAE,IAAI,MAAM,EAAE;AACnC,gBAAY,KAAK,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE;AAAA,EACtC;AAGA,QAAM,QAAkB,CAAC;AACzB,aAAW,MAAM,SAAU,OAAM,KAAK,GAAG,EAAE,IAAI,KAAK,EAAE,CAAC,EAAE;AAMzD,QAAM,SAAS,GAAG,eAAe;AAAA,EACjC,QAAQ,KAAK,IAAI,CAAC;AAAA,EAClB,SAAS,KAAK,IAAI,CAAC;AAAA,EACnB,OAAO,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAkBT,YAAY,KAAK,GAAG,CAAC;AAAA,QACvB,MAAM,KAAK,GAAG,CAAC;AAAA;AAAA;AAAA;AAAA;AAMrB,SAAO;AAAA,IACL;AAAA,IAAQ;AAAA,IAAS;AAAA,IAAO;AAAA,IAAS;AAAA,IACjC,MAAM,EAAE,SAAS,WAAW,aAAa,iBAAiB,OAAO,SAAS;AAAA,EAC5E;AACF;;;ACvtDO,SAAS,QAAQ,KAAmB,QAAkC;AAC3E,QAAM,SAAS,IAAI,eAAe,CAAC,CAAC;AACpC,MAAI,KAAK,GAAG,KAAK,OAAO,SAAS;AACjC,SAAO,KAAK,IAAI;AACd,UAAM,MAAO,KAAK,KAAK,KAAM;AAC7B,QAAI,OAAO,GAAG,KAAM,OAAQ,MAAK;AAAA,QAC5B,MAAK,MAAM;AAAA,EAClB;AACA,SAAO,CAAC,KAAK,GAAG,SAAS,OAAO,EAAE,IAAK,CAAC;AAC1C;AAEO,SAAS,UAAU,KAAmB,OAAe,KAAuB;AACjF,QAAM,IAAI,QAAQ,KAAK,KAAK,GAAG,IAAI,QAAQ,KAAK,GAAG;AACnD,SAAO,EAAE,OAAO,KAAK,WAAW,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE;AAC1F;AAQO,SAAS,SAAS,GAAY,OAAe,GAAW,GAAoB;AACjF,MAAI,OAAO,MAAM,YAAY,MAAM,MAAM;AACvC,UAAM,KAAM,EAAwB;AACpC,QAAI,OAAO,UAAU,OAAO,UAAU,OAAO,aAAc,QAAO;AAAA,EACpE;AACA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO,OAAO,MAAM,WAAW,IAAK,OAAO,MAAM,YAAY,MAAM,OAAO,MAAM,MAAM,GAAG,CAAC,IAAI;AAAA,IAC9F,MAAM,EAAE,OAAO,GAAG,KAAK,EAAE;AAAA,EAC3B;AACF;AAGO,SAAS,KAAK,OAAe,KAAqB;AACvD,MAAI,OAAO,MAAM,OAAQ,QAAO;AAChC,QAAM,IAAI,MAAM,WAAW,GAAG;AAC9B,MAAI,IAAI,SAAU,IAAI,MAAQ,QAAO;AACrC,SAAO,MAAM,YAAY,GAAG,KAAK;AACnC;;;AChEO,IAAM,+BAAuC,uBAAO,IAAI,qCAAqC;;;ACyB7F,SAAS,aAAa,MAAiC;AAC5D,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,QAAQ,OAAO,OAAO,KAAK,KAAK;AACtC,QAAM,OAAO,KAAK;AAClB,QAAM,OAAiB,CAAC;AACxB,SAAO,MAAM,SAAS,GAAG;AACvB,UAAM,KAAK,MAAM,IAAI;AACrB,QAAI,KAAK,IAAI,EAAE,EAAG;AAClB,SAAK,IAAI,EAAE;AACX,SAAK,SAAS;AAMd,QAAI,CAAC,WAAW,MAAM,IAAI,IAAI,EAAG,OAAM,IAAI,MAAM,2BAA2B,OAAO,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE;AACvG,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,IAAK,OAAM,KAAK,KAAK,CAAC,CAAE;AAAA,EAC3D;AACA,SAAO;AACT;;;AC1BA,IAAM,WAAqB,CAAC;AAUrB,SAAS,UAAU,GAA0B;AAClD,SAAO,EAAE,QAAQ;AACnB;AAiDO,SAAS,aACd,MACA,GACA,mBAAsD,CAAC,GACvD,WAA0B,aAAa,IAAI,GAChB;AAmB3B,QAAM,eAAe,CAAC,OAAgD;AACpE,QAAI,KAAK,KAAK,EAAE,MAAM,kBAAkB,KAAK,KAAK,EAAE,MAAM,SAAU,QAAO;AAC3E,UAAM,OAAO,KAAK,KAAK,KAAK,CAAC;AAC7B,WAAO,OAAO,IAAI,SAAY,SAAS,OAAO,IAAI;AAAA,EACpD;AACA,QAAM,WAAW,KAAK,WAAW,UAAa,KAAK,eAAe,IAC9D,SACA;AAAA,IACE,GAAI,KAAK,WAAW,SAAY,CAAC,IAAI,EAAE,kBAAkB,KAAK,OAAO;AAAA,IACrE,GAAI,KAAK,eAAe,IAAI,EAAE,sBAAsB,KAAc,IAAI,CAAC;AAAA,EACzE;AAGJ,QAAM,QAAQ,KAAK,UAAU;AAC7B,QAAM,OAAO,KAAK,YAAY;AAC9B,QAAM,SAAS,SAAS,SAAS,iBAAiB,IAAI;AACtD,QAAM,sBAAsB,KAAK,QAAQ,SACrC,SACA,OAAO,OAAO,eAAe,IAAI,EAAE,IAAI,OAAO,MAAM,CAAC;AAMzD,QAAM,oBAAoB;AAAA,IACxB,GAAG;AAAA,IACH,CAAC,eAAe,GAAG;AAAA,IACnB,CAAC,iBAAiB,GAAG;AAAA,IACrB,GAAI,wBAAwB,SACxB,CAAC,IACD,EAAE,CAAC,4BAA4B,GAAG,oBAAoB;AAAA,EAC5D;AACA,QAAM,MAAM,OAAO,OAAO,iBAAiB;AAC3C,QAAM,QAAQ,OAAO,KAAK,KAAK,KAAK;AACpC,WAAS,KAAK,GAAG,KAAK,MAAM,QAAQ,MAAM;AACxC,UAAM,OAAO,MAAM,EAAE;AACrB,UAAM,QAAQ;AACd,UAAM,UAAU,CAAC,OAAe,KAAa,QAA4C;AAKvF,UAAI,IAAI,kBAAkB,QAAW;AACnC,cAAM,IAAI;AAAA,UACR;AAAA,QAEF;AAAA,MACF;AAKA,YAAM,UAAU,EAAE,YAAY,OAAO,GAAG;AACxC,UAAI,YAAY,UAAa,IAAI,aAAa,QAAW;AACvD,YAAI,WAAW;AAAA,MACjB;AACA,UAAI,MAAM;AACV,UAAI,MAAM;AAIV,UAAI,MAAM;AACV,UAAI,SAAS,IAAI,gBAAgB,QAAW;AAAE,YAAI,cAAc,CAAC,CAAC;AAAG,YAAI,iBAAiB;AAAA,MAAE;AAC5F,YAAM,MAAM,EAAE,QAAQ,OAAO,OAAO,KAAK,GAAG;AAC5C,UAAI,MAAM,GAAG;AACX,cAAM,KAAK,IAAI;AACf,cAAM,KAAK,OAAO,UAAa,KAAK,IAAI,MAAM;AAC9C,cAAM,QAAQ,QAAQ,UAAU,KAAK,IAAI,EAAE,IAAI,EAAE,OAAO,IAAI,KAAK,GAAG;AAOpE,eAAO,UAAU,GAAG,IAChB,EAAE,IAAI,OAAO,UAAW,IAAI,OAAO,UAAuB,MAAM,OAAO,WAAW,KAAK,IACvF,EAAE,IAAI,OAAO,UAAW,IAAI,OAAO,UAAuB,MAAM,MAAM;AAAA,MAC5E;AACA,aAAO,EAAE,IAAI,MAAM,OAAO,EAAE,UAAU,GAAG,MAAM,QAAQ,UAAU,KAAK,KAAK,GAAG,IAAI,EAAE,OAAO,KAAK,IAAI,EAAE;AAAA,IACxG;AACA,UAAM,YAAY,aAAa,KAAK,MAAM,IAAI,CAAE;AAChD,UAAM,OAAO,cAAc,SACvB,WACA,EAAE,GAAG,UAAU,eAAe,UAAU;AAI5C,QAAI,IAAI,IAAI,OAAO,OAAO,SAAS;AAAA,MACjC,GAAI,SAAS,SAAY,CAAC,IAAI,EAAE,OAAO,KAAK;AAAA,MAC5C,CAAC,eAAe,GAAG;AAAA,MACnB,CAAC,iBAAiB,GAAG;AAAA,IACvB,CAAC;AAAA,EACH;AAcA,SAAO;AACT;AAUA,SAAS,iBAAiB,MAA6B;AACrD,QAAM,OAAO,KAAK;AAClB,aAAW,MAAM,aAAa,IAAI,GAAG;AACnC,UAAM,KAAK,KAAK,EAAE;AAClB,SAAK,OAAO,WAAW,OAAO,kBAAkB,KAAK,KAAK,CAAC,MAAM,GAAI,QAAO;AAAA,EAC9E;AACA,SAAO;AACT;;;ACpMO,IAAM,OAAsB,uBAAO,SAAS;AAS5C,IAAM,aAAa,OAAgB,EAAE,GAAG,EAAE;;;ACgGjD,IAAM,eAAgB,WACnB,SAAS,KAAK,kBAAkB;AAKnC,IAAMC,YAA8B,OAAO,OAAO,CAAC,CAAC;AAEpD,IAAM,WAAsB,CAAC;AAC7B,IAAM,aAAuB,CAAC;AAC9B,IAAMC,YAAqB,CAAC;AAC5B,IAAM,YAAsB,CAAC,UAAU;AAEvC,IAAM,cAAyD,OAAO,OAAO,CAAC,CAAC;AAY/E,SAAS,YAAY,GAAwE;AAC3F,QAAM,QAAQ,EAAE,CAAC;AACjB,UAAQ,EAAE,CAAC,GAAG;AAAA,IACZ,KAAK;AAAG,aAAO,SAAO,IAAI,WAAW,KAAK;AAAA,IAC1C,KAAK;AAAG,aAAO,SAAO,IAAI,SAAS,KAAK;AAAA,IACxC,KAAK;AAAG,aAAO,SAAO,aAAa,GAAG,EAAE,WAAW,KAAK;AAAA,IACxD,KAAK;AAAG,aAAO,SAAO,aAAa,GAAG,EAAE,SAAS,KAAK;AAAA;AAAA;AAAA;AAAA,IAItD,SAAS;AAAE,YAAM,QAAQ,EAAE,CAAC;AAAG,aAAO,SAAO,IAAI,OAAO,OAAO,KAAK,EAAE,KAAK,GAAG;AAAA,IAAE;AAAA,EAClF;AACF;AASA,IAAM,cAAc,CAAC,QAAsB;AAAC;AA4H5C,SAAS,SAAS,SAAkB,YAAqB,UAAmB,UAAmB,OAAgB,oBAAoB,MAAc;AAC/I,UAAQ,UAAU,IAAI,MAAM,aAAa,IAAI,MAAM,WAAW,IAAI,MAC7D,WAAW,IAAI,MAAM,QAAQ,KAAK,MAAM,oBAAoB,IAAI;AACvE;AAGO,SAAS,OAAO,GAAmB;AACxC,SAAO,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB;AAC/F;AAuCO,SAAS,SAASC,IAAkB,MAAoB,KAAuB;AACpF,QAAM,EAAE,MAAM,GAAG,KAAK,IAAI,IAAI,MAAM,KAAK,QAAAC,SAAQ,eAAe,IAAID;AAIpE,QAAM,aAAaA,GAAE;AACrB,QAAM,YAAY,CAAC,IAAI;AACvB,QAAM,UAAU,IAAI;AAuBpB,QAAM,MAAM,KAAK,QAAQ,KAAK,IAAI;AAUlC,QAAM,YAAY,oBAAI,IAA0C;AAChE,WAAS,YAAY,KAA2C;AAC9D,QAAI,MAAM,EAAG,QAAO;AACpB,UAAM,MAAM,UAAU,IAAI,GAAG;AAC7B,QAAI,QAAQ,UAAa,UAAU,IAAI,GAAG,EAAG,QAAO;AACpD,UAAM,OAAO,KAAK,GAAG,GAAG;AACxB,UAAM,SAAS,gBAAgB,IAAI;AACnC,UAAM,OAAO,iBAAiB,EAAE,MAAM,UAAU,OAAO,CAAC,KAAK;AAC7D,cAAU,IAAI,KAAK,IAAI;AACvB,WAAO;AAAA,EACT;AAWA,QAAM,KAAK,WAAW;AAUtB,MAAI,OAAiC;AAErC,QAAM,OAAO,oBAAI,IAAmB;AACpC,QAAM,UAAU,oBAAI,IAAY;AAEhC,WAAS,SAAS,KAAmB,OAAe,GAAW,GAAiB;AAC9E,UAAM,KAAW,EAAE,MAAM,QAAQ,OAAO,MAAM,EAAE,OAAO,GAAG,KAAK,EAAE,EAAE;AACnE,gBAAY,KAAK,EAAE;AAAA,EACrB;AAGA,WAAS,eAAe,KAA4B;AAClD,WAAO,IAAI,YAAY,UAClB,IAAI,eAAe,UACnB,IAAI,oBAAoB,UACxB,IAAI,kBAAkB,UACtB,IAAI,YAAY,UAChB,IAAI,YAAY,UAChB,IAAI,eAAe,UACnB,IAAI,mBAAmB;AAAA,EAC9B;AAYA,MAAI,OAAO;AACX,MAAI,MAAM;AACV,MAAI,MAAM;AA8BV,WAAS,QAAQ,KAA4B;AAC3C,UAAM,IAAI,IAAI;AACd,QAAI,MAAM,QAAW;AAInB,YAAM,MAAM,EAAE;AACd,aAAO,QAAQ,SAAY,IAAI,SAAS,EAAE,cAAc,SAAY,IAAI;AACxE,YAAME,MAAK,EAAE;AACb,YAAMA,QAAO,SAAYA,IAAG,SAAS,EAAE,WAAW,SAAY,IAAI;AAClE,YAAM,KAAK,EAAE;AACb,YAAM,OAAO,SAAY,GAAG,SAAS;AACrC,aAAO;AAAA,IACT;AACA,QAAI,IAAI,eAAe,UAClB,IAAI,oBAAoB,UACxB,IAAI,kBAAkB,UACtB,IAAI,YAAY,UAChB,IAAI,YAAY,UAChB,IAAI,eAAe,UACnB,IAAI,mBAAmB,QAAW;AACrC,aAAO,IAAI,iBAAiB,UAAU;AACtC,YAAM,IAAI,eAAe,UAAU;AACnC,YAAM,IAAI,YAAY,UAAU;AAChC,aAAO;AAAA,IACT;AACA,WAAO;AACP,UAAM;AACN,UAAM;AACN,WAAO;AAAA,EACT;AAUA,WAAS,gBAAgB,OAAc,OAAsB;AAC3D,QAAI,MAAM;AACV,SAAK,QAAQ,OAAO,GAAG;AAErB,YAAM,QAAQ;AACd,YAAM,CAAC,OAAO,KAAK,QAAQ;AACzB,cAAM,QAAQ,IAAI;AAClB,YAAI,qBAAqB;AACzB,cAAM,IAAI,MAAM,OAAO,KAAK,GAAG;AAC/B,YAAI,qBAAqB;AACzB,eAAO;AAAA,MACT;AAAA,IACF;AACA,SAAK,QAAQ,OAAO,GAAG;AACrB,YAAM,QAAQ;AACd,YAAM,CAAC,OAAO,KAAK,QAAQ;AACzB,oCAA4B,IAAI,uBAAuB;AACvD,eAAO,MAAM,OAAO,KAAK,GAAG;AAAA,MAC9B;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,WAAS,WAAW,OAAe,KAAa,KAA2B;AACzE,UAAM,IAAI;AACV,QAAI,MAAM,QACL,IAAI,eAAe,UACnB,EAAE,IAAI,kBAAkB,SAAS,IAAI,YAAY,UAAa,IAAI,kBAAkB,UAAa;AACpG,aAAO,EAAE,OAAO,GAAG;AAAA,IACrB;AAIA,QAAI,MAAM,KAAM,QAAO,kBAAkB,GAAG,OAAO,KAAK,GAAG;AAC3D,QAAI,0BAA0B,GAAG,GAAG;AAClC,YAAM,OAAO,WAAW,OAAO,KAAK,GAAG;AACvC,WAAK,OAAO;AACZ,aAAO,KAAK;AAAA,IACd;AACA,WAAO,cAAc,OAAO,KAAK,GAAG;AAAA,EACtC;AASA,MAAI;AAgBJ,MAAI;AAaJ,MAAI,MAA4B;AAQhC,QAAM,SAKD,CAAC;AACN,MAAI,QAAQ;AAgBZ,WAAS,SAAS,OAAc,OAAe,KAAa,KAA2B;AACrF,QAAI,IAAI,WAAW,QAAW;AAC5B,YAAMC,KAAI,MAAM,OAAO,KAAK,GAAG;AAC/B,UAAIA,OAAM,KAAM,QAAO;AACvB,cAAQA;AACR,aAAO,GAAG;AAAA,IACZ;AAOA,QAAI,IAAI,YAAY,UACf,IAAI,eAAe,UACnB,IAAI,oBAAoB,UACxB,IAAI,kBAAkB,UACtB,IAAI,YAAY,UAChB,IAAI,YAAY,UAChB,IAAI,eAAe,UACnB,IAAI,mBAAmB,QAAW;AACrC,YAAMC,WAAU,WAAW,OAAO,KAAK,GAAG;AAC1C,YAAMD,KAAI,MAAM,OAAOC,UAAS,GAAG;AACnC,UAAID,OAAM,KAAM,QAAO;AACvB,cAAQA;AACR,aAAO,GAAG,IAAIC,WAAU,GAAG,IAAI;AAAA,IACjC;AAEA,UAAM,OAAO,eAAe,GAAG;AAC/B,UAAM,MAAM,OAAO,SAAS,GAAG,IAAI;AACnC,UAAM,OAAO,OAAO,IAAI,YAAY,UAAU,IAAI;AAClD,UAAM,QAAQ,OAAO,IAAI,gBAAgB,UAAU,IAAI;AACvD,UAAM,UAAU,WAAW,OAAO,KAAK,GAAG;AAC1C,UAAM,SAAS,OAAO,SAAS,GAAG,IAAI;AACtC,UAAM,UAAU,OAAO,IAAI,YAAY,UAAU,IAAI;AACrD,UAAM,WAAW,OAAO,IAAI,gBAAgB,UAAU,IAAI;AAC1D,UAAM,IAAI,MAAM,OAAO,SAAS,GAAG;AACnC,QAAI,MAAM,KAAM,QAAO;AACvB,YAAQ;AACR,QAAI,GAAG,IAAI,QAAS,QAAO,GAAG;AAG9B,QAAI,KAAM,yBAAwB,KAAK,KAAK,QAAQ,MAAM,SAAS,OAAO,QAAQ;AAClF,WAAO;AAAA,EACT;AAEA,WAASC,WAAU,GAA0B;AAC3C,WAAO,EAAE,QAAQ;AAAA,EACnB;AAeA,WAAS,OAAO,IAAmC,KAAiD;AAClG,QAAI,OAAO,UAAa,GAAG,WAAW,EAAG,QAAO;AAChD,QAAI,QAAQ,OAAW,QAAO,GAAG,MAAM;AACvC,eAAW,KAAK,GAAI,KAAI,KAAK,CAAC;AAC9B,WAAO;AAAA,EACT;AAIA,WAAS,eAAe,KAAmB,OAAe,KAAmB;AAC3E,UAAM,OAAO,IAAI,kBAAkB;AACnC,QAAI,OAAO,KAAM;AACjB,UAAM,SAAS,IAAI;AACnB,QAAI,WAAW,OAAW;AAC1B,aAAS,IAAI,MAAM,IAAI,KAAK,IAAK,KAAI,MAAM,WAAW,CAAC,MAAM,GAAI,QAAO,KAAK,IAAI,CAAC;AAClF,QAAI,iBAAiB;AAAA,EACvB;AAcA,QAAM,WAAW,oBAAI,IAAqD;AAE1E,WAAS,KAAK,IAAmB;AAC/B,UAAM,OAAO,KAAK,IAAI,EAAE;AACxB,QAAI,SAAS,OAAW,QAAO;AAC/B,UAAM,SAAS,SAAS,IAAI,EAAE;AAC9B,QAAI,WAAW,OAAW,QAAO,OAAO;AAExC,QAAI;AACJ,UAAM,MAAa,CAAC,OAAO,KAAK,QAAQ,OAAQ,OAAO,KAAK,GAAG;AAC/D,UAAM,SAAS,EAAE,KAAK,KAAK,CAAC,MAAa;AAAE,eAAS;AAAA,IAAE,EAAE;AACxD,aAAS,IAAI,IAAI,MAAM;AAEvB,UAAM,QAAQ,MAAM,EAAE;AAEtB,aAAS,OAAO,EAAE;AAClB,WAAO,IAAI,KAAK;AAChB,SAAK,IAAI,IAAI,KAAK;AAClB,YAAQ,IAAI,EAAE;AACd,WAAO;AAAA,EACT;AAEA,WAAS,MAAM,IAAmB;AAChC,UAAM,KAAK,KAAK,EAAE;AAClB,YAAQ,IAAI;AAAA;AAAA,MAGV,KAAK,QAAQ;AACX,cAAM,IAAI,EAAE,KAAK,KAAK,CAAC,CAAE;AACzB,cAAM,MAAM,EAAE;AACd,cAAM,KAAK,GAAG,KAAK,KAAK,CAAC,CAAE;AAG3B,YAAI,QAAQ,GAAG;AACb,gBAAM,KAAK,EAAE,WAAW,CAAC;AACzB,iBAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,gBAAI,MAAM,WAAW,GAAG,MAAM,IAAI;AAChC,oBAAM,IAAI,MAAM;AAChB,kBAAI,iBAAiB,GAAG,EAAG,UAAS,KAAK,GAAG,KAAK,CAAC;AAClD,iBAAG,IAAI;AACP,qBAAO;AAAA,YACT;AACA,gBAAI,MAAM;AAAK,gBAAI,MAAM;AACzB,gBAAI,IAAI,WAAW,OAAW,QAAO,KAAK,IAAI,GAAG;AACjD,mBAAO;AAAA,UACT;AAAA,QACF;AACA,YAAI,QAAQ,GAAG;AACb,gBAAM,KAAK,EAAE,WAAW,CAAC,GAAG,KAAK,EAAE,WAAW,CAAC;AAC/C,iBAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,gBAAI,MAAM,WAAW,GAAG,MAAM,MAAM,MAAM,WAAW,MAAM,CAAC,MAAM,IAAI;AACpE,oBAAM,IAAI,MAAM;AAChB,kBAAI,iBAAiB,GAAG,EAAG,UAAS,KAAK,GAAG,KAAK,CAAC;AAClD,iBAAG,IAAI;AACP,qBAAO;AAAA,YACT;AACA,gBAAI,MAAM;AAAK,gBAAI,MAAM;AACzB,gBAAI,IAAI,WAAW,OAAW,QAAO,KAAK,IAAI,GAAG;AACjD,mBAAO;AAAA,UACT;AAAA,QACF;AACA,YAAI,QAAQ,GAAG;AACb,gBAAM,KAAK,EAAE,WAAW,CAAC,GAAG,KAAK,EAAE,WAAW,CAAC,GAAG,KAAK,EAAE,WAAW,CAAC;AACrE,iBAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,gBAAI,MAAM,WAAW,GAAG,MAAM,MAAM,MAAM,WAAW,MAAM,CAAC,MAAM,MAC7D,MAAM,WAAW,MAAM,CAAC,MAAM,IAAI;AACrC,oBAAM,IAAI,MAAM;AAChB,kBAAI,iBAAiB,GAAG,EAAG,UAAS,KAAK,GAAG,KAAK,CAAC;AAClD,iBAAG,IAAI;AACP,qBAAO;AAAA,YACT;AACA,gBAAI,MAAM;AAAK,gBAAI,MAAM;AACzB,gBAAI,IAAI,WAAW,OAAW,QAAO,KAAK,IAAI,GAAG;AACjD,mBAAO;AAAA,UACT;AAAA,QACF;AACA,eAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,cAAI,MAAM,WAAW,GAAG,GAAG,GAAG;AAC5B,kBAAM,IAAI,MAAM;AAChB,gBAAI,iBAAiB,GAAG,EAAG,UAAS,KAAK,GAAG,KAAK,CAAC;AAClD,eAAG,IAAI;AACP,mBAAO;AAAA,UACT;AACA,cAAI,MAAM;AAAK,cAAI,MAAM;AACvB,cAAI,IAAI,WAAW,OAAW,QAAO,KAAK,IAAI,GAAG;AACnD,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,MAEA,KAAK,cAAc;AACjB,cAAM,IAAI,EAAE,KAAK,KAAK,CAAC,CAAE;AACzB,cAAM,MAAM,EAAE;AACd,cAAM,KAAK,GAAG,KAAK,KAAK,CAAC,CAAE;AAC3B,YAAI,QAAQ,GAAG;AACb,gBAAM,KAAK,EAAE,WAAW,CAAC;AACzB,iBAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,gBAAI,MAAM,WAAW,GAAG,MAAM,IAAI;AAChC,oBAAM,IAAI,MAAM;AAChB,kBAAI,iBAAiB,GAAG,EAAG,UAAS,KAAK,GAAG,KAAK,CAAC;AAClD,6BAAe,KAAK,OAAO,CAAC;AAC5B,iBAAG,IAAI;AACP,qBAAO;AAAA,YACT;AACA,gBAAI,MAAM;AAAK,gBAAI,MAAM;AACzB,gBAAI,IAAI,WAAW,OAAW,QAAO,KAAK,IAAI,GAAG;AACjD,mBAAO;AAAA,UACT;AAAA,QACF;AACA,YAAI,QAAQ,GAAG;AACb,gBAAM,KAAK,EAAE,WAAW,CAAC,GAAG,KAAK,EAAE,WAAW,CAAC;AAC/C,iBAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,gBAAI,MAAM,WAAW,GAAG,MAAM,MAAM,MAAM,WAAW,MAAM,CAAC,MAAM,IAAI;AACpE,oBAAM,IAAI,MAAM;AAChB,kBAAI,iBAAiB,GAAG,EAAG,UAAS,KAAK,GAAG,KAAK,CAAC;AAClD,6BAAe,KAAK,OAAO,CAAC;AAC5B,iBAAG,IAAI;AACP,qBAAO;AAAA,YACT;AACA,gBAAI,MAAM;AAAK,gBAAI,MAAM;AACzB,gBAAI,IAAI,WAAW,OAAW,QAAO,KAAK,IAAI,GAAG;AACjD,mBAAO;AAAA,UACT;AAAA,QACF;AACA,YAAI,QAAQ,GAAG;AACb,gBAAM,KAAK,EAAE,WAAW,CAAC,GAAG,KAAK,EAAE,WAAW,CAAC,GAAG,KAAK,EAAE,WAAW,CAAC;AACrE,iBAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,gBAAI,MAAM,WAAW,GAAG,MAAM,MAAM,MAAM,WAAW,MAAM,CAAC,MAAM,MAC7D,MAAM,WAAW,MAAM,CAAC,MAAM,IAAI;AACrC,oBAAM,IAAI,MAAM;AAChB,kBAAI,iBAAiB,GAAG,EAAG,UAAS,KAAK,GAAG,KAAK,CAAC;AAClD,6BAAe,KAAK,OAAO,CAAC;AAC5B,iBAAG,IAAI;AACP,qBAAO;AAAA,YACT;AACA,gBAAI,MAAM;AAAK,gBAAI,MAAM;AACzB,gBAAI,IAAI,WAAW,OAAW,QAAO,KAAK,IAAI,GAAG;AACjD,mBAAO;AAAA,UACT;AAAA,QACF;AACA,eAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,cAAI,MAAM,WAAW,GAAG,GAAG,GAAG;AAC5B,kBAAM,IAAI,MAAM;AAChB,gBAAI,iBAAiB,GAAG,EAAG,UAAS,KAAK,GAAG,KAAK,CAAC;AAClD,2BAAe,KAAK,OAAO,CAAC;AAC5B,eAAG,IAAI;AACP,mBAAO;AAAA,UACT;AACA,cAAI,MAAM;AAAK,cAAI,MAAM;AACvB,cAAI,IAAI,WAAW,OAAW,QAAO,KAAK,IAAI,GAAG;AACnD,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,MAEA,KAAK,OAAO;AACV,cAAM,KAAK,EAAE,KAAK,KAAK,CAAC,CAAE;AAC1B,cAAM,KAAK,GAAG,KAAK,KAAK,CAAC,CAAE;AAC3B,eAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,aAAG,YAAY;AAMf,cAAI,GAAG,KAAK,KAAK,GAAG;AAClB,kBAAM,IAAI,GAAG;AACb,kBAAM,IAAI,MAAM,MAAM,KAAK,CAAC;AAC5B,gBAAI,iBAAiB,GAAG,EAAG,UAAS,KAAK,GAAG,KAAK,CAAC;AAClD,eAAG,IAAI;AACP,mBAAO;AAAA,UACT;AACA,cAAI,MAAM;AAAK,cAAI,MAAM;AACvB,cAAI,IAAI,WAAW,OAAW,QAAO,KAAK,IAAI,GAAG;AACnD,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,MAEA,KAAK,aAAa;AAChB,cAAM,KAAK,EAAE,KAAK,KAAK,CAAC,CAAE;AAC1B,cAAM,KAAK,GAAG,KAAK,KAAK,CAAC,CAAE;AAC3B,eAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,aAAG,YAAY;AACf,cAAI,GAAG,KAAK,KAAK,GAAG;AAClB,kBAAM,IAAI,GAAG;AACb,kBAAM,IAAI,MAAM,MAAM,KAAK,CAAC;AAC5B,gBAAI,iBAAiB,GAAG,EAAG,UAAS,KAAK,GAAG,KAAK,CAAC;AAClD,2BAAe,KAAK,OAAO,CAAC;AAC5B,eAAG,IAAI;AACP,mBAAO;AAAA,UACT;AACA,cAAI,MAAM;AAAK,cAAI,MAAM;AACvB,cAAI,IAAI,WAAW,OAAW,QAAO,KAAK,IAAI,GAAG;AACnD,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,MAEA,KAAK;AAAA,MACL,KAAK,iBAAiB;AACpB,cAAM,IAAI,EAAE,KAAK,KAAK,CAAC,CAAE;AACzB,cAAM,MAAM,EAAE;AACd,cAAM,KAAK,GAAG,KAAK,KAAK,CAAC,CAAE;AAe3B,cAAM,OAAO,CAAC,MAAuB,KAAK,MAAM,KAAK,KAAK,IAAI,KAAK;AACnE,cAAM,YAAsB,CAAC;AAC7B,iBAAS,IAAI,GAAG,IAAI,KAAK,IAAK,WAAU,KAAK,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;AAClE,cAAM,gBAAgB,CAAC,OAAe,QAAyB;AAC7D,mBAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC5B,gBAAI,KAAK,MAAM,WAAW,MAAM,CAAC,CAAC,MAAM,UAAU,CAAC,EAAI,QAAO;AAAA,UAChE;AACA,iBAAO;AAAA,QACT;AACA,YAAI,OAAO,iBAAiB;AAC1B,iBAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,kBAAM,IAAI,MAAM;AAChB,gBAAI,cAAc,OAAO,GAAG,GAAG;AAE7B,oBAAM,UAAU,MAAM,MAAM,KAAK,CAAC;AAClC,kBAAI,iBAAiB,GAAG,EAAG,UAAS,KAAK,SAAS,KAAK,CAAC;AACxD,6BAAe,KAAK,OAAO,CAAC;AAC5B,iBAAG,IAAI;AACP,qBAAO;AAAA,YACT;AACA,gBAAI,MAAM;AAAK,gBAAI,MAAM;AACzB,gBAAI,IAAI,WAAW,OAAW,QAAO,KAAK,IAAI,GAAG;AACjD,mBAAO;AAAA,UACT;AAAA,QACF;AACA,eAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,gBAAM,IAAI,MAAM;AAChB,cAAI,cAAc,OAAO,GAAG,GAAG;AAE7B,kBAAM,UAAU,MAAM,MAAM,KAAK,CAAC;AAClC,gBAAI,iBAAiB,GAAG,EAAG,UAAS,KAAK,SAAS,KAAK,CAAC;AACxD,eAAG,IAAI;AACP,mBAAO;AAAA,UACT;AACA,cAAI,MAAM;AAAK,cAAI,MAAM;AACvB,cAAI,IAAI,WAAW,OAAW,QAAO,KAAK,IAAI,GAAG;AACnD,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,MAEA,KAAK;AACH,eAAO,CAAC,QAAQ,QAAQ;AAAE,aAAG,IAAI;AAAK,iBAAO;AAAA,QAAG;AAAA;AAAA,MAIlD,KAAK,UAAU;AACb,cAAM,OAAO,IAAI,KAAK,KAAK,CAAC,CAAE;AAC9B,cAAM,KAAK,GAAG,KAAK,KAAK,CAAC,CAAE;AAC3B,eAAO,CAAC,QAAQ,KAAK,QAAQ;AAC3B,cAAI,KAAK,IAAI,KAAK,GAAG;AAAE,eAAG,IAAI;AAAK,mBAAO;AAAA,UAAK;AAC/C,cAAI,MAAM;AAAK,cAAI,MAAM;AACzB,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,MAEA,KAAK,QAAQ;AAOX,cAAM,WAAW,KAAK,KAAK,CAAC,MAAM,IAAI,gBAAgB;AACtD,eAAO,MAAM;AAAE,gBAAM,gBAAgB,QAAQ;AAAA,QAAE;AAAA,MACjD;AAAA,MAEA,KAAK,SAAS;AACZ,cAAM,MAAM,GAAG,KAAK,KAAK,CAAC,CAAE;AAC5B,cAAM,KAAK,GAAG,KAAK,KAAK,CAAC,CAAE;AAC3B,cAAM,QAAQ,KAAK,KAAK,KAAK,CAAC,CAAE;AAehC,YAAI,IAAI,YAAY,IAAI,MAAO,QAAO;AACtC,eAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,cAAI,CAAC,SAAS,KAAK,KAAK,OAAO,GAAG,CAAC,GAAG;AACpC,gBAAI,MAAM;AAAK,gBAAI,MAAM;AACzB,mBAAO;AAAA,UACT;AACA,iBAAO,MAAM,OAAO,KAAK,GAAG;AAAA,QAC9B;AAAA,MACF;AAAA,MAEA,KAAK,UAAU;AACb,cAAM,QAAQ,KAAK,KAAK,KAAK,CAAC,CAAE;AAChC,cAAM,KAAK,GAAG,KAAK,KAAK,CAAC,CAAE;AAC3B,eAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,gBAAM,IAAI,MAAM,OAAO,KAAK,GAAG;AAE/B,cAAI,MAAM,KAAM,KAAI,MAAM;AAC1B,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,MAEA,KAAK,QAAQ;AACX,cAAM,QAAQ,KAAK,KAAK,KAAK,CAAC,CAAE;AAOhC,YAAI,CAAC,IAAI,SAAU,QAAO;AAC1B,cAAM,MAAM,KAAK,MAAM,KAAK,KAAK,CAAC,CAAE;AAKpC,YAAI,QAAQ,QAAW;AACrB,gBAAM,IAAI;AAAA,YACR,uBAAuB,EAAE,gCAAgC,KAAK,KAAK,CAAC,CAAC;AAAA,UAEvE;AAAA,QACF;AACA,cAAM,KAAK,IAAI,CAAC;AAIhB,YAAI,KAAK,KAAK,CAAC,MAAM,GAAG;AACtB,iBAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,gBAAI,EAAE;AACN,mBAAO,MAAM,OAAO,KAAK,GAAG;AAAA,UAC9B;AAAA,QACF;AACA,eAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,gBAAM,IAAI,MAAM,OAAO,KAAK,GAAG;AAC/B,cAAI,MAAM,KAAM,KAAI,EAAE;AACtB,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,MAEA,KAAK;AAIH,eAAO,KAAK,KAAK,KAAK,CAAC,CAAE;AAAA,MAE3B,KAAK,SAAS;AAKZ,cAAM,IAAI,IAAI,KAAK,KAAK,CAAC,CAAE;AAC3B,eAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,gBAAM,IAAI,EAAE,MAAM,OAAO,KAAK,GAAG;AACjC,cAAI,CAAC,EAAE,IAAI;AACT,gBAAI,MAAM,EAAE,KAAK;AACjB,gBAAI,MAAM,EAAE;AACZ,gBAAI,MAAM,EAAE,cAAc;AAC1B,mBAAO;AAAA,UACT;AACA,aAAG,IAAI,EAAE,KAAK;AACd,iBAAO,EAAE;AAAA,QACX;AAAA,MACF;AAAA,MAEA,KAAK,WAAW;AACd,cAAM,QAAQ,KAAK,KAAK,KAAK,CAAC,CAAE;AAChC,cAAM,KAAK,GAAG,KAAK,KAAK,CAAC,CAAE;AAM3B,cAAM,aAAa,CAAC,KAAmB,QACrC,KAAK,UAAU,IAAI,UAAU,KAAK,KAAK,GAAG,IAAI,EAAE,OAAO,KAAK,KAAK,IAAI;AAOvE,YAAI,KAAK;AACP,iBAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,kBAAM,IAAI,MAAM,OAAO,KAAK,GAAG;AAC/B,gBAAI,MAAM,KAAM,QAAO;AACvB,kBAAM,OAAO,WAAW,KAAK,GAAG;AAChC,kBAAM,MAAM,EAAE,MAAM,cAAuB,MAAM,UAAU,GAAG;AAC9D,gBAAI,SAAS,KAAK,GAAG;AACrB,gBAAI,IAAI,cAAc,KAAM,cAAa,KAAK,GAAG;AASjD,gBAAI,MAAM;AACV,eAAG,IAAI;AACP,mBAAO;AAAA,UACT;AAAA,QACF;AACA,eAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,gBAAM,IAAI,MAAM,OAAO,KAAK,GAAG;AAC/B,cAAI,MAAM,KAAM,QAAO;AACvB,gBAAM,OAAO,WAAW,KAAK,GAAG;AAChC,gBAAM,MAAM,EAAE,MAAM,cAAuB,MAAM,UAAU,GAAG;AAC9D,cAAI,SAAS,KAAK,GAAG;AACrB,cAAI,MAAM;AACV,aAAG,IAAI;AACP,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,MAEA,KAAK,UAAU;AACb,cAAM,OAAO,EAAE,KAAK,KAAK,CAAC,CAAE;AAC5B,cAAM,QAAQ,KAAK,KAAK,KAAK,CAAC,CAAE;AAChC,eAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,gBAAM,IAAI,MAAM,OAAO,KAAK,GAAG;AAC/B,cAAI,MAAM,KAAM,QAAO;AACvB,cAAI,SAAS,KAAK,EAAE,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,KAAK,KAAK,GAAG,EAAE,EAAE,CAAC;AACrE,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,MAEA,KAAK,UAAU;AACb,cAAM,KAAK,IAAI,KAAK,KAAK,CAAC,CAAE;AAC5B,cAAM,QAAQ,KAAK,KAAK,KAAK,CAAC,CAAE;AAChC,eAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,gBAAM,IAAI,MAAM,OAAO,KAAK,GAAG;AAC/B,cAAI,MAAM,KAAM,QAAO;AACvB,iBAAO,GAAG,GAAG,EAAE,OAAO,KAAK,KAAK,GAAG,EAAE,CAAC;AAAA,QACxC;AAAA,MACF;AAAA,MAEA,KAAK,SAAS;AAKZ,cAAM,KAAK,KAAK,KAAK,CAAC;AACtB,YAAI;AACJ,eAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,gBAAM,IAAI,UAAU,QAAQ,MAAM,EAAE;AACpC,gBAAM,IAAI,EAAE,MAAM,OAAO,KAAK,GAAG;AACjC,cAAI,CAAC,EAAE,IAAI;AACT,gBAAI,MAAM,EAAE,KAAK;AACjB,gBAAI,MAAO,EAAE,YAAYN;AACzB,mBAAO;AAAA,UACT;AACA,aAAG,IAAI,EAAE,KAAK;AACd,iBAAO,EAAE;AAAA,QACX;AAAA,MACF;AAAA,MAEA,KAAK,YAAY;AAEf,cAAM,QAAQ,EAAE,KAAK,KAAK,CAAC,CAAE;AAC7B,cAAM,QAAQ,KAAK,KAAK,KAAK,CAAC,CAAE;AAChC,eAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,gBAAM,QAAQ,IAAI;AAClB,cAAI,QAAQ;AACZ,cAAI;AAAE,mBAAO,MAAM,OAAO,KAAK,GAAG;AAAA,UAAE,UACpC;AAAU,gBAAI,QAAQ;AAAA,UAAM;AAAA,QAC9B;AAAA,MACF;AAAA,MAEA,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK,gBAAgB;AACnB,cAAM,KAAK,KAAK,KAAK,CAAC;AACtB,cAAM,cAAc,KAAK,IAAI,SAAaE,QAAO,EAAE;AACnD,cAAM,cAAc,aAAa,MAAM;AAKvC,cAAM,UACJ,aAAa,MAAM,KAAK,CAAC,eAAe,EAAE,IAAK,WAAW,EAAE,IAAK;AACnE,cAAM,QAAQ,KAAK,KAAK,KAAK,CAAC,CAAE;AAShC,cAAM,aAAoB,KAAK,EAAE,MAAM,eACnC,CAAC,OAAO,KAAK,QAAQ;AACnB,gBAAM,QAAQ,IAAI;AAClB,gBAAM,cAAc,IAAI;AACxB,gBAAM,YAAY;AAClB,gBAAM,WAAW,IAAI;AACrB,iBAAO;AACP,cAAI,SAAS;AACb,cAAI,mBAAmB;AACvB,cAAI,gBAAgB;AACpB,gBAAM,IAAI,MAAM,OAAO,KAAK,GAAG;AAC/B,cAAI,gBAAgB;AACpB,cAAI,SAAS;AACb,cAAI,mBAAmB;AACvB,iBAAO;AACP,iBAAO;AAAA,QACT,IACA,CAAC,OAAO,KAAK,QAAQ;AACnB,gBAAM,QAAQ,IAAI;AAClB,gBAAM,cAAc,IAAI;AACxB,gBAAM,YAAY;AAClB,iBAAO;AACP,cAAI,SAAS;AACb,cAAI,mBAAmB;AACvB,gBAAM,IAAI,MAAM,OAAO,KAAK,GAAG;AAC/B,cAAI,SAAS;AACb,cAAI,mBAAmB;AACvB,iBAAO;AACP,iBAAO;AAAA,QACT;AACJ,eAAO,gBAAgB,YAAY,KAAK,EAAE,MAAM,iBAAiB,IAAI,KAAK,KAAK,CAAC,CAAE;AAAA,MACpF;AAAA,MAEA,KAAK,WAAW;AACd,cAAM,KAAK,KAAK,KAAK,CAAC;AACtB,cAAM,WAAW,MAAM,IAAI,KAAK,EAAE,IAAI;AACtC,eAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,gBAAM,OAAO,IAAI;AACjB,cAAI,SAAS,UAAa,QAAQ,KAAK,KAAK,OAAO;AACjD,gBAAI,aAAa,OAAW,QAAO,SAAS,OAAO,KAAK,GAAG;AAC3D,gBAAI,MAAM;AAAK,gBAAI,MAAM;AACzB,mBAAO;AAAA,UACT;AACA,cAAI,iBAAiB,GAAG,EAAG,aAAY,KAAK,EAAE,MAAM,QAAQ,OAAO,KAAK,OAAO,MAAM,KAAK,KAAK,CAAC;AAChG,aAAG,IAAI,KAAK,KAAK;AACjB,iBAAO,KAAK;AAAA,QACd;AAAA,MACF;AAAA;AAAA,MAIA,KAAK,YAAY;AACf,cAAM,QAAQ,KAAK,KAAK,KAAK,CAAC,CAAE;AAChC,eAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,gBAAM,OAAO,QAAQ,GAAG;AACxB,gBAAM,OAAO;AACb,gBAAM,MAAM;AACZ,gBAAM,MAAM;AACZ,gBAAM,MAAM,OAAO,IAAI,SAAS,UAAU,IAAI;AAC9C,gBAAM,MAAM,OAAO,IAAI,SAAS,UAAU,IAAI;AAC9C,gBAAM,OAAO,OAAO,IAAI,YAAY,UAAU,IAAI;AAClD,gBAAM,QAAQ,OAAO,IAAI,gBAAgB,UAAU,IAAI;AACvD,gBAAM,IAAI,MAAM,OAAO,KAAK,GAAG;AAC/B,cAAI,MAAM,KAAM,QAAO;AACvB,cAAI,KAAM,kBAAiB,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK;AAErE,cAAII,WAAU,GAAG,EAAG,QAAO;AAC3B,cAAI,MAAM;AACV,iBAAO;AAAA,QACT;AAAA,MACF;AAAA;AAAA,MAIA,KAAK,QAAQ;AACX,cAAM,QAAQ,KAAK,KAAK,KAAK,CAAC,CAAE;AAChC,cAAM,KAAK,GAAG,KAAK,KAAK,CAAC,CAAE;AAC3B,eAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,gBAAM,OAAO,QAAQ,GAAG;AACxB,gBAAM,OAAO;AACb,gBAAM,MAAM;AACZ,gBAAM,MAAM;AACZ,gBAAM,MAAM,OAAO,IAAI,SAAS,UAAU,IAAI;AAC9C,gBAAM,MAAM,OAAO,IAAI,SAAS,UAAU,IAAI;AAC9C,gBAAM,OAAO,OAAO,IAAI,YAAY,UAAU,IAAI;AAClD,gBAAM,QAAQ,OAAO,IAAI,gBAAgB,UAAU,IAAI;AACvD,gBAAM,IAAI,MAAM,OAAO,KAAK,GAAG;AAC/B,cAAI,KAAM,kBAAiB,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK;AACrE,cAAI,MAAM,MAAM;AAAE,eAAG,IAAI;AAAK,mBAAO;AAAA,UAAK;AAE1C,cAAI,MAAM;AACV,cAAI,MAAM;AACV,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,MAEA,KAAK,SAAS;AACZ,cAAM,QAAQ,KAAK,KAAK,KAAK,CAAC,CAAE;AAChC,cAAM,KAAK,GAAG,KAAK,KAAK,CAAC,CAAE;AAC3B,eAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,gBAAM,OAAO,QAAQ,GAAG;AACxB,gBAAM,OAAO;AACb,gBAAM,MAAM;AACZ,gBAAM,MAAM;AACZ,gBAAM,MAAM,OAAO,IAAI,SAAS,UAAU,IAAI;AAC9C,gBAAM,MAAM,OAAO,IAAI,SAAS,UAAU,IAAI;AAC9C,gBAAM,OAAO,OAAO,IAAI,YAAY,UAAU,IAAI;AAClD,gBAAM,QAAQ,OAAO,IAAI,gBAAgB,UAAU,IAAI;AACvD,gBAAM,IAAI,MAAM,OAAO,KAAK,GAAG;AAC/B,cAAI,KAAM,kBAAiB,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK;AAErE,cAAI,MAAM,MAAM;AAAE,gBAAI,MAAM;AAAK,gBAAI,MAAM;AAAI,mBAAO;AAAA,UAAK;AAC3D,aAAG,IAAI;AACP,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,MAEA,KAAK,QAAQ;AACX,cAAM,QAAQ,KAAK,KAAK,KAAK,CAAC,CAAE;AAChC,eAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,gBAAM,OAAO,QAAQ,GAAG;AACxB,gBAAM,OAAO;AACb,gBAAM,MAAM;AACZ,gBAAM,MAAM;AACZ,gBAAM,MAAM,OAAO,IAAI,SAAS,UAAU,IAAI;AAC9C,gBAAM,MAAM,OAAO,IAAI,SAAS,UAAU,IAAI;AAC9C,gBAAM,OAAO,OAAO,IAAI,YAAY,UAAU,IAAI;AAClD,gBAAM,QAAQ,OAAO,IAAI,gBAAgB,UAAU,IAAI;AACvD,cAAI,MAAM;AACV,gBAAM,IAAI,MAAM,OAAO,KAAK,GAAG;AAC/B,cAAI,MAAM,MAAM;AACd,gBAAIA,WAAU,GAAG,EAAG,QAAO;AAC3B,gBAAI,KAAM,kBAAiB,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK;AACrE,eAAG,IAAI;AAEP,mBAAO;AAAA,UACT;AACA,iBAAO;AAAA,QACT;AAAA,MACF;AAAA;AAAA,MAIA,KAAK,UAAU;AACb,cAAM,QAAQ,KAAK,KAAK,KAAK,CAAC,CAAE;AAChC,eAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,gBAAM,UAAU,IAAI,QAAQ,SAAS,IAAI;AACzC,gBAAM,OAAO,IAAI,SAAS,YAAY,IAAI,cAAc,UAAU,IAAI;AACtE,gBAAM,OAAO,IAAI,iBAAiB,MAAM,IAAI;AAC5C,gBAAM,WAAW,IAAI,YAAY,UAAU,IAAI;AAC/C,gBAAM,eAAe,iBAAiB,GAAG;AAEzC,gBAAM,QAAQ;AACd,iBAAO;AACP,cAAI,SAAS;AACb,cAAI,mBAAmB;AACvB,cAAI,UAAU;AACd,cAAI,eAAe;AACnB,cAAI,aAAa;AACjB,cAAI,kBAAkB;AACtB,cAAI,gBAAgB;AACpB,cAAI,aAAa;AACjB,cAAI,iBAAiB;AAErB,cAAI;AACJ,cAAI;AACF,gBAAI,MAAM,OAAO,KAAK,GAAG;AAAA,UAC3B,UAAE;AACA,mBAAO;AACP,gBAAI,SAAS;AACb,gBAAI,mBAAmB;AACvB,gBAAI,UAAU;AACd,gBAAI,eAAe;AACnB,gBAAI,aAAa;AACjB,gBAAI,kBAAkB;AACtB,gBAAI,gBAAgB;AACpB,gBAAI,aAAa;AACjB,gBAAI,iBAAiB;AAAA,UACvB;AACA,cAAI,MAAM,KAAM,QAAO;AACvB,gBAAM,MAAM,GAAG;AACf,gBAAM,QAAQ,MAAM,MAAM,KAAK,GAAG;AAClC,cAAI,aAAc,aAAY,KAAK,EAAE,MAAM,QAAQ,OAAO,MAAM,EAAE,OAAO,KAAK,IAAI,EAAE,CAAC;AACrF,aAAG,IAAI;AACP,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,MAEA,KAAK,SAAS;AACZ,cAAM,KAAK,IAAI,KAAK,KAAK,CAAC,CAAE;AAC5B,cAAM,QAAQ,KAAK,KAAK,KAAK,CAAC,CAAE;AAChC,eAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,gBAAM,OAAO,IAAI,SAAS,YAAY,IAAI,cAAc,UAAU,IAAI;AACtE,gBAAM,OAAO,IAAI,iBAAiB,MAAM,IAAI;AAC5C,gBAAM,WAAW,IAAI;AACrB,gBAAM,eAAe,iBAAiB,GAAG;AAEzC,cAAI,UAAU;AACd,cAAI,eAAe;AACnB,cAAI,aAAa;AACjB,cAAI,kBAAkB;AACtB,cAAI,gBAAgB;AACpB,cAAI,aAAa;AAEjB,cAAI;AACJ,cAAI;AACF,gBAAI,MAAM,OAAO,KAAK,GAAG;AAAA,UAC3B,UAAE;AACA,gBAAI,UAAU;AACd,gBAAI,eAAe;AACnB,gBAAI,aAAa;AACjB,gBAAI,kBAAkB;AACtB,gBAAI,gBAAgB;AACpB,gBAAI,aAAa;AAAA,UACnB;AACA,cAAI,MAAM,KAAM,QAAO;AACvB,gBAAM,MAAM,GAAG;AACf,gBAAM,MAAM,GAAG,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;AACrC,cAAI,aAAc,aAAY,KAAK,EAAE,MAAM,QAAQ,OAAO,KAAK,MAAM,EAAE,OAAO,KAAK,IAAI,EAAE,CAAC;AAC1F,aAAG,IAAI;AACP,iBAAO;AAAA,QACT;AAAA,MACF;AAAA;AAAA,MAIA,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK,SAAS;AACZ,cAAM,QAAQ,OAAO;AACrB,cAAM,OAAO,QAAQ,KAAK,IAAI,KAAK;AACnC,cAAM,IAAI,KAAK,QAAQ,KAAK,IAAI,KAAK,CAAC;AAEtC,cAAM,OAAgB,IAAI,MAAa,CAAC;AACxC,iBAAS,IAAI,GAAG,IAAI,GAAG,IAAK,MAAK,CAAC,IAAI,KAAK,KAAK,OAAO,CAAC,CAAE;AAC1D,cAAM,aAAa,OAAO;AAC1B,cAAM,KAAK,QACP,IAAI,KAAK,KAAK,CAAC,CAAE,IACjB;AAaJ,cAAM,WAAW,CAAC,OAAe,KAAa,KAAmB,WAA0C;AACzG,gBAAM,KAAK,KAAK,CAAC,EAAG,OAAO,KAAK,GAAG;AACnC,cAAI,OAAO,KAAM,QAAO;AACxB,cAAI,WAAW,OAAW,QAAO,KAAK,EAAE;AACxC,cAAI,MAAM,GAAG;AACb,mBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,kBAAM,SAAS,KAAK,CAAC,GAAI,OAAO,KAAK,GAAG;AACxC,gBAAI,MAAM,EAAG,QAAO;AACpB,gBAAI,WAAW,OAAW,QAAO,KAAK,KAAK;AAAA,UAC7C;AACA,iBAAO;AAAA,QACT;AAiDA,YAAI,KAAK;AACP,gBAAM,QAA6C,IAAI,MAAuC,CAAC;AAC/F,mBAAS,IAAI,GAAG,IAAI,GAAG,IAAK,OAAM,CAAC,IAAI,YAAY,KAAK,OAAO,IAAI,CAAC,CAAE;AACtE,gBAAM,UAAwB,IAAI,MAAkB,CAAC;AACrD,mBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,kBAAM,QAAQ,KAAK,OAAO,CAAC;AAC3B,gBAAI,KAAK,KAAK,MAAM,QAAQ;AAC1B,oBAAM,MAAM,KAAK,CAAC;AAClB,sBAAQ,CAAC,IAAI,CAAC,OAAO,KAAK,QAAQ,SAAS,KAAK,OAAO,KAAK,GAAG;AAC/D;AAAA,YACF;AACA,kBAAM,UAAU,KAAK,QAAQ,CAAC,MAAM;AACpC,kBAAM,KAAK,KAAK,QAAQ,CAAC;AACzB,kBAAM,QAAQ,KAAK,IAAI,SAAY,EAAE,EAAE;AACvC,kBAAM,KAAK,GAAG,KAAK,QAAQ,CAAC,CAAE;AAC9B,oBAAQ,CAAC,IAAI,CAAC,OAAO,KAAK,QAAQ;AAChC,kBAAI,CAAC,eAAe,OAAO,KAAK,KAAK,SAAS,KAAK,GAAG;AACpD,oBAAI,MAAM;AAAK,oBAAI,MAAM;AACzB,uBAAO;AAAA,cACT;AACA,sBAAQ;AACR,qBAAO;AAAA,YACT;AAAA,UACF;AACA,gBAAM,eAAe,CAAC,OAAe,KAAa,KAAmB,WAA0C;AAC7G,kBAAM,YAAY,IAAI;AACtB,gBAAI,QAAQ,MAAM,CAAC,KAAK;AACxB,kBAAM,KAAK,KAAK,CAAC,EAAG,OAAO,KAAK,GAAG;AACnC,gBAAI,OAAO,MAAM;AAAE,kBAAI,QAAQ;AAAW,qBAAO;AAAA,YAAG;AACpD,gBAAI,WAAW,OAAW,QAAO,KAAK,EAAE;AACxC,gBAAI,MAAM,GAAG;AACb,qBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,kBAAI,QAAQ,MAAM,CAAC,KAAK;AACxB,oBAAM,QAAQ,CAAC,EAAG,OAAO,KAAK,GAAG;AACjC,kBAAI,MAAM,GAAG;AAAE,oBAAI,QAAQ;AAAW,uBAAO;AAAA,cAAG;AAChD,kBAAI,WAAW,OAAW,QAAO,KAAK,KAAK;AAAA,YAC7C;AACA,gBAAI,QAAQ;AACZ,mBAAO;AAAA,UACT;AACA,cAAI,OAAO;AACT,mBAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,oBAAM,SAAoB,CAAC;AAC3B,oBAAM,MAAM,aAAa,OAAO,KAAK,KAAK,MAAM;AAChD,kBAAI,MAAM,EAAG,QAAO;AACpB,iBAAG,IAAI;AACP,qBAAO,GAAI,QAAQ,EAAE,OAAO,KAAK,KAAK,IAAI,CAAC;AAAA,YAC7C;AAAA,UACF;AACA,cAAI,YAAY;AACd,mBAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,oBAAM,SAAoB,CAAC;AAC3B,oBAAM,MAAM,aAAa,OAAO,KAAK,KAAK,MAAM;AAChD,kBAAI,MAAM,EAAG,QAAO;AACpB,iBAAG,IAAI;AACP,qBAAO;AAAA,YACT;AAAA,UACF;AACA,iBAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,kBAAM,MAAM,aAAa,OAAO,KAAK,KAAK,MAAS;AACnD,gBAAI,MAAM,EAAG,QAAO;AACpB,eAAG,IAAI;AACP,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,YAAI,SAAS;AACb,iBAAS,IAAI,GAAG,IAAI,GAAG,IAAK,KAAI,KAAK,KAAK,OAAO,CAAC,CAAE,MAAM,QAAQ;AAAE,mBAAS;AAAM;AAAA,QAAM;AACzF,YAAI,QAAQ;AACV,gBAAM,UAAwB,IAAI,MAAkB,CAAC;AACrD,mBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,kBAAM,QAAQ,KAAK,OAAO,CAAC;AAC3B,gBAAI,KAAK,KAAK,MAAM,QAAQ;AAC1B,oBAAM,MAAM,KAAK,CAAC;AAClB,sBAAQ,CAAC,IAAI,CAAC,OAAO,KAAK,QAAQ,SAAS,KAAK,OAAO,KAAK,GAAG;AAC/D;AAAA,YACF;AACA,kBAAM,UAAU,KAAK,QAAQ,CAAC,MAAM;AACpC,kBAAM,KAAK,KAAK,QAAQ,CAAC;AAKzB,kBAAM,QAAQ,KAAK,IAAI,SAAY,EAAE,EAAE;AACvC,kBAAM,KAAK,GAAG,KAAK,QAAQ,CAAC,CAAE;AAC9B,oBAAQ,CAAC,IAAI,CAAC,OAAO,KAAK,QAAQ;AAChC,kBAAI,CAAC,eAAe,OAAO,KAAK,KAAK,SAAS,KAAK,GAAG;AACpD,oBAAI,MAAM;AAAK,oBAAI,MAAM;AACzB,uBAAO;AAAA,cACT;AACA,sBAAQ;AACR,qBAAO;AAAA,YACT;AAAA,UACF;AACA,gBAAM,cAAc,CAAC,OAAe,KAAa,KAAmB,WAA0C;AAC5G,kBAAM,KAAK,KAAK,CAAC,EAAG,OAAO,KAAK,GAAG;AACnC,gBAAI,OAAO,KAAM,QAAO;AACxB,gBAAI,WAAW,OAAW,QAAO,KAAK,EAAE;AACxC,gBAAI,MAAM,GAAG;AACb,qBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,oBAAM,QAAQ,CAAC,EAAG,OAAO,KAAK,GAAG;AACjC,kBAAI,MAAM,EAAG,QAAO;AACpB,kBAAI,WAAW,OAAW,QAAO,KAAK,KAAK;AAAA,YAC7C;AACA,mBAAO;AAAA,UACT;AACA,cAAI,OAAO;AACT,mBAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,oBAAM,SAAoB,CAAC;AAC3B,oBAAM,MAAM,YAAY,OAAO,KAAK,KAAK,MAAM;AAC/C,kBAAI,MAAM,EAAG,QAAO;AACpB,iBAAG,IAAI;AACP,qBAAO,GAAI,QAAQ,EAAE,OAAO,KAAK,KAAK,IAAI,CAAC;AAAA,YAC7C;AAAA,UACF;AACA,cAAI,YAAY;AACd,mBAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,oBAAM,SAAoB,CAAC;AAC3B,oBAAM,MAAM,YAAY,OAAO,KAAK,KAAK,MAAM;AAC/C,kBAAI,MAAM,EAAG,QAAO;AACpB,iBAAG,IAAI;AACP,qBAAO;AAAA,YACT;AAAA,UACF;AACA,iBAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,kBAAM,MAAM,YAAY,OAAO,KAAK,KAAK,MAAS;AAClD,gBAAI,MAAM,EAAG,QAAO;AACpB,eAAG,IAAI;AACP,mBAAO;AAAA,UACT;AAAA,QACF;AAmBA,YAAI,MAAM,GAAG;AACX,gBAAM,KAAK,KAAK,CAAC;AACjB,cAAI,OAAO;AACT,mBAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,oBAAM,IAAI,GAAG,OAAO,KAAK,GAAG;AAC5B,kBAAI,MAAM,KAAM,QAAO;AACvB,qBAAO,GAAI,CAAC,CAAC,GAAG,EAAE,OAAO,KAAK,KAAK,GAAG,EAAE,CAAC;AAAA,YAC3C;AAAA,UACF;AACA,cAAI,YAAY;AACd,mBAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,oBAAM,IAAI,GAAG,OAAO,KAAK,GAAG;AAC5B,kBAAI,MAAM,KAAM,QAAO;AACvB,qBAAO,CAAC,CAAC;AAAA,YACX;AAAA,UACF;AACA,iBAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,kBAAM,IAAI,GAAG,OAAO,KAAK,GAAG;AAC5B,gBAAI,MAAM,KAAM,QAAO;AACvB,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,YAAI,MAAM,GAAG;AACX,gBAAM,KAAK,KAAK,CAAC,GAAI,KAAK,KAAK,CAAC;AAChC,cAAI,OAAO;AACT,mBAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,oBAAM,KAAK,GAAG,OAAO,KAAK,GAAG;AAC7B,kBAAI,OAAO,KAAM,QAAO;AACxB,oBAAM,MAAM,SAAS,IAAI,OAAO,GAAG,GAAG,GAAG;AACzC,kBAAI,MAAM,EAAG,QAAO;AACpB,iBAAG,IAAI;AACP,qBAAO,GAAI,CAAC,IAAI,KAAK,GAAG,EAAE,OAAO,KAAK,KAAK,IAAI,CAAC;AAAA,YAClD;AAAA,UACF;AACA,cAAI,YAAY;AACd,mBAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,oBAAM,KAAK,GAAG,OAAO,KAAK,GAAG;AAC7B,kBAAI,OAAO,KAAM,QAAO;AACxB,oBAAM,MAAM,SAAS,IAAI,OAAO,GAAG,GAAG,GAAG;AACzC,kBAAI,MAAM,EAAG,QAAO;AACpB,iBAAG,IAAI;AACP,qBAAO,CAAC,IAAI,KAAK;AAAA,YACnB;AAAA,UACF;AACA,iBAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,kBAAM,KAAK,GAAG,OAAO,KAAK,GAAG;AAC7B,gBAAI,OAAO,KAAM,QAAO;AACxB,kBAAM,MAAM,SAAS,IAAI,OAAO,GAAG,GAAG,GAAG;AACzC,gBAAI,MAAM,EAAG,QAAO;AACpB,eAAG,IAAI;AACP,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,YAAI,MAAM,GAAG;AACX,gBAAM,KAAK,KAAK,CAAC,GAAI,KAAK,KAAK,CAAC,GAAI,KAAK,KAAK,CAAC;AAC/C,cAAI,OAAO;AACT,mBAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,oBAAM,KAAK,GAAG,OAAO,KAAK,GAAG;AAC7B,kBAAI,OAAO,KAAM,QAAO;AACxB,kBAAI,MAAM,SAAS,IAAI,OAAO,GAAG,GAAG,GAAG;AACvC,kBAAI,MAAM,EAAG,QAAO;AACpB,oBAAM,KAAK;AACX,oBAAM,SAAS,IAAI,OAAO,KAAK,GAAG;AAClC,kBAAI,MAAM,EAAG,QAAO;AACpB,iBAAG,IAAI;AACP,qBAAO,GAAI,CAAC,IAAI,IAAI,KAAK,GAAG,EAAE,OAAO,KAAK,KAAK,IAAI,CAAC;AAAA,YACtD;AAAA,UACF;AACA,cAAI,YAAY;AACd,mBAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,oBAAM,KAAK,GAAG,OAAO,KAAK,GAAG;AAC7B,kBAAI,OAAO,KAAM,QAAO;AACxB,kBAAI,MAAM,SAAS,IAAI,OAAO,GAAG,GAAG,GAAG;AACvC,kBAAI,MAAM,EAAG,QAAO;AACpB,oBAAM,KAAK;AACX,oBAAM,SAAS,IAAI,OAAO,KAAK,GAAG;AAClC,kBAAI,MAAM,EAAG,QAAO;AACpB,iBAAG,IAAI;AACP,qBAAO,CAAC,IAAI,IAAI,KAAK;AAAA,YACvB;AAAA,UACF;AACA,iBAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,kBAAM,KAAK,GAAG,OAAO,KAAK,GAAG;AAC7B,gBAAI,OAAO,KAAM,QAAO;AACxB,gBAAI,MAAM,SAAS,IAAI,OAAO,GAAG,GAAG,GAAG;AACvC,gBAAI,MAAM,EAAG,QAAO;AACpB,kBAAM,SAAS,IAAI,OAAO,KAAK,GAAG;AAClC,gBAAI,MAAM,EAAG,QAAO;AACpB,eAAG,IAAI;AACP,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,YAAI,OAAO;AACT,iBAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,kBAAM,SAAoB,CAAC;AAC3B,kBAAM,MAAM,SAAS,OAAO,KAAK,KAAK,MAAM;AAC5C,gBAAI,MAAM,EAAG,QAAO;AACpB,eAAG,IAAI;AACP,mBAAO,GAAI,QAAQ,EAAE,OAAO,KAAK,KAAK,IAAI,CAAC;AAAA,UAC7C;AAAA,QACF;AACA,YAAI,YAAY;AACd,iBAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,kBAAM,SAAoB,CAAC;AAC3B,kBAAM,MAAM,SAAS,OAAO,KAAK,KAAK,MAAM;AAC5C,gBAAI,MAAM,EAAG,QAAO;AACpB,eAAG,IAAI;AACP,mBAAO;AAAA,UACT;AAAA,QACF;AACA,eAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,gBAAM,MAAM,SAAS,OAAO,KAAK,KAAK,MAAS;AAC/C,cAAI,MAAM,EAAG,QAAO;AACpB,aAAG,IAAI;AACP,iBAAO;AAAA,QACT;AAAA,MACF;AAAA;AAAA,MAIA,KAAK,WAAW;AACd,cAAM,QAAQ,KAAK,KAAK,KAAK,CAAC,CAAE;AAChC,cAAM,IAAI,KAAK,KAAK,CAAC;AACrB,cAAM,WAAW,GAAG,KAAK,KAAK,CAAC,CAAE;AACjC,cAAM,OAAO,KAAK;AAClB,cAAM,OAAgB,IAAI,MAAa,CAAC;AACxC,iBAAS,IAAI,GAAG,IAAI,GAAG,IAAK,MAAK,CAAC,IAAI,KAAK,KAAK,OAAO,CAAC,CAAE;AAK1D,cAAM,QAAsB,IAAI,MAAgB,CAAC;AACjD,iBAAS,IAAI,GAAG,IAAI,GAAG,IAAK,OAAM,CAAC,IAAI,GAAG,KAAK,OAAO,IAAI,CAAC,CAAE;AAI7D,YAAI,MAAM,WAAW;AACnB,gBAAM,QAAQ,MAAM;AACpB,gBAAM,KAAK,MAAM;AAMjB,iBAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,kBAAM,IAAI,KAAK,OAAO,GAAG;AACzB,gBAAI,MAAM;AACV,gBAAI,KAAK,KAAK,IAAI,KAAK;AACrB,oBAAM,IAAI,MAAM,CAAC;AACjB,kBAAI,MAAM,EAAG,OAAM,IAAI;AAAA,YACzB,WAAW,KAAK,KAAK;AACnB,uBAAS,IAAI,GAAG,IAAI,GAAG,QAAQ,KAAK,GAAG;AACrC,oBAAI,KAAK,GAAG,CAAC,KAAM,KAAK,GAAG,IAAI,CAAC,GAAI;AAAE,wBAAM,GAAG,IAAI,CAAC;AAAI;AAAA,gBAAM;AAAA,cAChE;AAAA,YACF;AACA,gBAAI,OAAO,GAAG;AACZ,kBAAI,MAAM;AACV,oBAAM,IAAI,KAAK,GAAG,EAAG,OAAO,KAAK,GAAG;AACpC,kBAAI,MAAM,KAAM,QAAO;AAEvB,kBAAIA,WAAU,GAAG,EAAG,QAAO;AAM3B,oBAAMC,SAAQ,IAAI;AAClB,kBAAIA,WAAU,UAAaA,OAAM,SAAS,GAAG;AAAE,oBAAI,MAAM;AAAK,uBAAO;AAAA,cAAK;AAAA,YAC5E;AAIA,gBAAI,MAAM;AAAK,gBAAI,MAAM;AACzB,mBAAO;AAAA,UACT;AAAA,QACF;AAKA,cAAM,SAAS,MAAM;AACrB,cAAM,QAAkC,IAAI,MAA4B,CAAC;AACzE,iBAAS,IAAI,GAAG,IAAI,GAAG,IAAK,OAAM,CAAC,IAAI,OAAO,CAAC,KAAK;AAuBpD,cAAM,WAAW,KAAK;AACtB,YAAI;AACJ,YAAI,UAAU;AACZ,gBAAM,IAAI,IAAI,YAAY,GAAG;AAC7B,mBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,kBAAM,MAAM,MAAM,CAAC;AACnB,kBAAM,MAAM,KAAK;AACjB,gBAAI,QAAQ,MAAM;AAChB,uBAAS,IAAI,GAAG,IAAI,KAAK,IAAK,GAAE,CAAC,KAAM;AACvC;AAAA,YACF;AACA,qBAAS,IAAI,GAAG,IAAI,KAAK,IAAK,KAAI,IAAI,MAAM,CAAC,MAAM,EAAG,GAAE,CAAC,KAAM;AAAA,UACjE;AACA,iBAAO;AAAA,QACT;AAEA,YAAI,SAAS,QAAW;AACtB,gBAAM,OAAO;AACb,iBAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,kBAAM,IAAI,KAAK,OAAO,GAAG;AACzB,kBAAM,OAAO,QAAQ,GAAG;AACxB,kBAAM,OAAO;AACb,kBAAM,MAAM;AACZ,kBAAM,MAAM;AACZ,kBAAM,MAAM,OAAO,IAAI,SAAS,UAAU,IAAI;AAC9C,kBAAM,MAAM,OAAO,IAAI,SAAS,UAAU,IAAI;AAC9C,kBAAM,OAAO,OAAO,IAAI,YAAY,UAAU,IAAI;AAClD,kBAAM,QAAQ,OAAO,IAAI,gBAAgB,UAAU,IAAI;AACvD,gBAAI;AACJ,gBAAI,IAAI,KAAK;AAEX,oBAAM,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAC;AAClC,kBAAI,OAAO;AAIX,kBAAI,OAAO;AACX,qBAAO,SAAS,GAAG;AACjB,sBAAM,IAAI,KAAK,KAAK,MAAM,OAAO,CAAC,IAAI;AACtC,wBAAQ,OAAO;AACf,oBAAI,MAAM;AACV,sBAAM,IAAI,KAAK,CAAC,EAAG,OAAO,KAAK,GAAG;AAClC,oBAAI,MAAM,KAAM,QAAO;AACvB,yBAAS,IAAI,MAAM,IAAI,GAAG,IAAK,MAAK,QAAS,KAAK,OAAQ,EAAG,OAAM,OAAO,MAAM,CAAC,GAAI,GAAG;AACxF,uBAAO,IAAI;AACX,sBAAM,OAAO,IAAI,KAAK,GAAG;AAGzB,oBAAID,WAAU,GAAG,GAAG;AAAE,sBAAI,QAAQ,OAAW,KAAI,MAAM;AAAK,yBAAO;AAAA,gBAAK;AACxE,oBAAI,KAAM,kBAAiB,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK;AAAA,cACvE;AACA,uBAAS,IAAI,MAAM,IAAI,GAAG,IAAK,MAAK,QAAS,KAAK,OAAQ,EAAG,OAAM,OAAO,MAAM,CAAC,GAAI,GAAG;AACxF,kBAAI,MAAM;AAAK,kBAAI,MAAM,OAAO;AAChC,qBAAO;AAAA,YACT;AACA,qBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,oBAAM,MAAM,MAAM,CAAC;AACnB,kBAAI,QAAQ,QAAQ,CAAC,SAAS,KAAK,CAAC,GAAG;AAAE,sBAAM,OAAO,MAAM,CAAC,GAAI,GAAG;AAAG;AAAA,cAAS;AAChF,kBAAI,MAAM;AACV,oBAAM,IAAI,KAAK,CAAC,EAAG,OAAO,KAAK,GAAG;AAClC,kBAAI,MAAM,KAAM,QAAO;AACvB,oBAAM,OAAO,IAAI,KAAK,GAAG;AACzB,kBAAIA,WAAU,GAAG,GAAG;AAAE,oBAAI,QAAQ,OAAW,KAAI,MAAM;AAAK,uBAAO;AAAA,cAAK;AACxE,kBAAI,KAAM,kBAAiB,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK;AAAA,YACvE;AACA,gBAAI,MAAM;AAAK,gBAAI,MAAM,OAAO;AAChC,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,eAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,gBAAM,IAAI,KAAK,OAAO,GAAG;AACzB,gBAAM,OAAO,QAAQ,GAAG;AACxB,gBAAM,OAAO;AACb,gBAAM,MAAM;AACZ,gBAAM,MAAM;AACZ,gBAAM,MAAM,OAAO,IAAI,SAAS,UAAU,IAAI;AAC9C,gBAAM,MAAM,OAAO,IAAI,SAAS,UAAU,IAAI;AAC9C,gBAAM,OAAO,OAAO,IAAI,YAAY,UAAU,IAAI;AAClD,gBAAM,QAAQ,OAAO,IAAI,gBAAgB,UAAU,IAAI;AACvD,cAAI;AACJ,mBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,kBAAM,MAAM,MAAM,CAAC;AACnB,gBAAI,QAAQ,QAAQ,CAAC,SAAS,KAAK,CAAC,GAAG;AAAE,oBAAM,OAAO,MAAM,CAAC,GAAI,GAAG;AAAG;AAAA,YAAS;AAChF,gBAAI,MAAM;AACV,kBAAM,IAAI,KAAK,CAAC,EAAG,OAAO,KAAK,GAAG;AAClC,gBAAI,MAAM,KAAM,QAAO;AACvB,kBAAM,OAAO,IAAI,KAAK,GAAG;AACzB,gBAAIA,WAAU,GAAG,GAAG;AAAE,kBAAI,QAAQ,OAAW,KAAI,MAAM;AAAK,qBAAO;AAAA,YAAK;AACxE,gBAAI,KAAM,kBAAiB,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK;AAAA,UACvE;AACA,cAAI,MAAM;AAAK,cAAI,MAAM,OAAO;AAChC,iBAAO;AAAA,QACT;AAAA,MACF;AAAA;AAAA,MAIA,KAAK,WAAW;AACd,cAAM,MAAM,KAAK,KAAK,KAAK,CAAC,CAAE;AAC9B,cAAM,IAAI,KAAK,KAAK,CAAC;AAGrB,cAAM,SAAS,oBAAI,IAAmB;AACtC,iBAAS,IAAI,GAAG,IAAI,GAAG,IAAK,QAAO,IAAI,EAAE,KAAK,KAAK,IAAI,IAAI,CAAC,CAAE,GAAa,KAAK,KAAK,KAAK,IAAI,IAAI,CAAC,CAAE,CAAC;AACtG,eAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,gBAAM,OAAO,QAAQ,GAAG;AACxB,gBAAM,OAAO;AACb,gBAAM,MAAM;AACZ,gBAAM,MAAM;AACZ,gBAAM,MAAM,OAAO,IAAI,SAAS,UAAU,IAAI;AAC9C,gBAAM,MAAM,OAAO,IAAI,SAAS,UAAU,IAAI;AAC9C,gBAAM,OAAO,OAAO,IAAI,YAAY,UAAU,IAAI;AAClD,gBAAM,QAAQ,OAAO,IAAI,gBAAgB,UAAU,IAAI;AACvD,gBAAM,IAAI,IAAI,OAAO,KAAK,GAAG;AAG7B,cAAI,MAAM,KAAM,QAAO;AACvB,gBAAM,MAAM,GAAG;AACf,gBAAM,MAAM,OAAO,IAAI,MAAM,MAAM,KAAK,GAAG,CAAC;AAC5C,cAAI,QAAQ,QAAW;AAAE,eAAG,IAAI;AAAK,mBAAO;AAAA,UAAE;AAG9C,cAAI,KAAM,kBAAiB,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK;AACrE,iBAAO,IAAI,OAAO,KAAK,GAAG;AAAA,QAC5B;AAAA,MACF;AAAA,MAEA,KAAK,YAAY;AAGf,cAAM,OAAO,IAAI,KAAK,KAAK,CAAC,CAAE;AAC9B,cAAM,QAAQ,KAAK,KAAK,KAAK,CAAC,CAAE;AAChC,cAAM,KAAK,GAAG,KAAK,KAAK,CAAC,CAAE;AAC3B,eAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,cAAI,CAAC,KAAK,IAAI,KAAK,GAAG;AAGpB,gBAAI,MAAM;AACV,gBAAI,MAAM;AACV,gBAAI,MAAM;AACV,mBAAO;AAAA,UACT;AACA,iBAAO,MAAM,OAAO,KAAK,GAAG;AAAA,QAC9B;AAAA,MACF;AAAA,MAEA,KAAK,WAAW;AACd,cAAM,QAAQ,KAAK,KAAK,KAAK,CAAC,CAAE;AAChC,cAAM,IAAI,KAAK,KAAK,CAAC;AAIrB,cAAM,OAAiB,CAAC;AACxB,cAAM,OAAwB,CAAC;AAC/B,iBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,gBAAM,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC;AAC7B,cAAI,KAAK,KAAK,IAAI,IAAI,CAAC,MAAO,EAAG,MAAK,KAAK,EAAE,CAAC,CAAW;AAAA,cACpD,MAAK,KAAK,GAAG,CAAC,CAAE;AAAA,QACvB;AACA,cAAM,KAAK,KAAK;AAChB,cAAM,KAAK,KAAK;AAChB,eAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,gBAAM,IAAI,MAAM,OAAO,KAAK,GAAG;AAC/B,cAAI,MAAM,KAAM,QAAO;AACvB,gBAAM,MAAM,GAAG;AACf,mBAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,gBAAI,CAAC,MAAM,WAAW,KAAK,CAAC,GAAI,GAAG,EAAG;AAMtC,gBAAI,MAAM;AACV,gBAAI,MAAM;AACV,mBAAO;AAAA,UACT;AACA,cAAI,OAAO,GAAG;AACZ,kBAAM,IAAI,KAAK,OAAO,GAAG;AACzB,qBAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,kBAAI,CAAC,SAAS,KAAK,CAAC,GAAI,CAAC,EAAG;AAC5B,kBAAI,MAAM;AACV,kBAAI,MAAM;AACV,qBAAO;AAAA,YACT;AAAA,UACF;AACA,aAAG,IAAI;AACP,iBAAO;AAAA,QACT;AAAA,MACF;AAAA;AAAA,MAIA,KAAK;AAAA,MACL,KAAK,SAAS;AACZ,cAAM,QAAQ,KAAK,KAAK,KAAK,CAAC,CAAE;AAChC,cAAM,MAAM,KAAK,KAAK,CAAC;AACvB,cAAM,MAAM,KAAK,KAAK,CAAC;AACvB,cAAM,QAAQ,KAAK,KAAK,CAAC;AACzB,cAAM,MAAM,SAAS,IAAI,KAAK,KAAK,IAAI;AACvC,cAAM,QAAQ,KAAK,KAAK,CAAC;AACzB,cAAM,kBAAkB,QAAQ,OAAO;AACvC,cAAM,mBAAmB,QAAQ,OAAO;AACxC,cAAM,cAAc,QAAQ,OAAO;AACnC,cAAM,SAAS,aAAa,GAAG,KAAK,KAAK,CAAC,CAAE,IAAgBN;AAC5D,cAAM,UAAU,OAAO;AAIvB,cAAM,kBAAkB,QAAQ,KAAK,QAAQ;AAiC7C,YAAI,KAAK;AACP,gBAAMQ,UAAS,GAAG,KAAK,KAAK,CAAC,CAAE;AAC/B,gBAAM,UAAU,YAAY,KAAK,KAAK,CAAC,CAAE;AACzC,iBAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,kBAAM,MAA6B,UAAU,CAAC,IAAI;AAClD,kBAAM,YAAY,IAAI,WAAW;AACjC,kBAAM,WAAW,eAAe,GAAG;AACnC,kBAAM,SAAS,IAAI;AACnB,gBAAI,MAAM;AACV,gBAAI,QAAQ;AACZ,uBAAS;AACP,kBAAI,OAAO,KAAK,SAAS,IAAK;AAC9B,kBAAI,QAAQ,UAAa,QAAQ,KAAK,SAAS,OAAO,OAAO,MAAM,OAAQ;AAC3E,kBAAI,SAAU,SAAQ,GAAG;AACzB,oBAAM,OAAO,WAAW,OAAO;AAC/B,oBAAM,MAAM,WAAW,MAAM;AAC7B,oBAAM,MAAM,WAAW,MAAM;AAC7B,oBAAM,MAAM,WAAW,IAAI,SAAS,UAAU,IAAI;AAClD,oBAAM,MAAM,WAAW,IAAI,SAAS,UAAU,IAAI;AAClD,oBAAM,OAAO,WAAW,IAAI,YAAY,UAAU,IAAI;AACtD,oBAAM,QAAQ,WAAW,IAAI,gBAAgB,UAAU,IAAI;AAC3D,kBAAI,YAAY;AAChB,kBAAI,SAAS;AACb,oBAAM,aAAa,QAAQ,UAAa,SAAS,QAAQ,QAAQ,KAAK;AACtE,kBAAI,QAAQ,UAAa,QAAQ,GAAG;AAClC,sBAAM,eAAe,aAAa,GAAG;AACrC,oBAAI,KAAK;AACT,oBAAI,UAAW,MAAK,WAAW,OAAO,IAAI,GAAG;AAC7C,oBAAI,MAAM;AACV,sBAAM,KAAK,IAAI,OAAO,IAAI,GAAG;AAC7B,oBAAI,OAAO,MAAM;AACf,sBAAI,SAAU,kBAAiB,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK;AACzE,sBAAIF,WAAU,GAAG,EAAG,QAAO;AAC3B;AAAA,gBACF;AACA,oBAAI,CAAC,eAAgB,qBAAoB,KAAK,YAAY;AAC1D,yBAAS,GAAG;AACZ,4BAAY,YAAY,WAAW,OAAO,GAAG,GAAG,GAAG,IAAI,GAAG;AAAA,cAC5D,WAAW,cAAc,QAAQ,KAAK,kBAAkB;AACtD,4BAAY,WAAW,OAAO,WAAW,GAAG;AAAA,cAC9C;AACA,kBAAI,aAAa,MAAM,UAAU,YAAY;AAC3C,oBAAI,SAAU,kBAAiB,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK;AACzE,oBAAI,mBAAmB,UAAU,EAAG,OAAM;AAC1C;AAAA,cACF;AACA,kBAAI,MAAM;AACV,oBAAM,IAAI,MAAM,OAAO,WAAW,GAAG;AACrC,kBAAI,MAAM,MAAM;AACd,oBAAIA,WAAU,GAAG,GAAG;AAClB,sBAAI,SAAU,kBAAiB,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK;AACzE,yBAAO;AAAA,gBACT;AACA,oBAAI,IAAI,cAAc,QACjB,WAAW,WACV,QAAQ,UAAa,SAAS,QAC/B,CAAC,UAAU,QAAQ,OAAO,WAAW,GAAG,GAAG;AAC9C,sBAAI,QAAQ,UAAa,SAAU,kBAAiB,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK;AAC9F,wBAAM,KAAK;AAAA,oBACT;AAAA,oBAAO;AAAA,oBAAW;AAAA,oBAClB,QAAQ,SAAY,SAAS,WAAW,WAAW,QAAQ,YAAY,SAAY,SAAY,MAAM;AAAA,oBACrGE;AAAA,kBACF;AACA,sBAAI,QAAQ,OAAW,KAAI,KAAK,GAAG,KAAK;AACxC,+BAAa,KAAK,GAAG,KAAK;AAC1B;AACA,wBAAM,GAAG;AACT;AAAA,gBACF;AACA,oBAAI,SAAU,kBAAiB,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK;AACzE,oBAAI,mBAAmB,UAAU,EAAG,OAAM;AAC1C;AAAA,cACF;AACA,kBAAI,GAAG,MAAM,aAAa,YAAY;AACpC,oBAAI,SAAU,kBAAiB,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK;AACzE;AAAA,cACF;AACA,kBAAI,QAAQ,OAAW,KAAI,KAAK,CAAC;AACjC,oBAAM,GAAG;AACT;AAAA,YACF;AACA,gBAAI,QAAQ,KAAK;AACf,kBAAI,YAAY;AAAE,oBAAI,MAAM;AAAK,oBAAI,MAAMA;AAAA,cAAO;AAClD,qBAAO;AAAA,YACT;AACA,eAAG,IAAI;AACP,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,eAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,gBAAM,MAA6B,UAAU,CAAC,IAAI;AAClD,gBAAM,YAAY,IAAI,WAAW;AACjC,gBAAM,WAAW,eAAe,GAAG;AACnC,cAAI,MAAM;AACV,cAAI,QAAQ;AACZ,qBAAS;AACP,gBAAI,OAAO,KAAK,SAAS,IAAK;AAI9B,gBAAI,QAAQ,UAAa,QAAQ,KAAK,SAAS,OAAO,OAAO,MAAM,OAAQ;AAI3E,gBAAI,SAAU,SAAQ,GAAG;AACzB,kBAAM,OAAO,WAAW,OAAO;AAC/B,kBAAM,MAAM,WAAW,MAAM;AAC7B,kBAAM,MAAM,WAAW,MAAM;AAC7B,kBAAM,MAAM,WAAW,IAAI,SAAS,UAAU,IAAI;AAClD,kBAAM,MAAM,WAAW,IAAI,SAAS,UAAU,IAAI;AAClD,kBAAM,OAAO,WAAW,IAAI,YAAY,UAAU,IAAI;AACtD,kBAAM,QAAQ,WAAW,IAAI,gBAAgB,UAAU,IAAI;AAC3D,gBAAI,YAAY;AAChB,gBAAI,SAAS;AACb,kBAAM,aAAa,QAAQ,UAAa,SAAS,QAAQ,QAAQ,KAAK;AACtE,gBAAI,QAAQ,UAAa,QAAQ,GAAG;AAClC,oBAAM,eAAe,aAAa,GAAG;AACrC,kBAAI,KAAK;AACT,kBAAI,UAAW,MAAK,WAAW,OAAO,IAAI,GAAG;AAC7C,kBAAI,MAAM;AACV,oBAAM,KAAK,IAAI,OAAO,IAAI,GAAG;AAC7B,kBAAI,OAAO,MAAM;AACf,oBAAI,SAAU,kBAAiB,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK;AACzE,oBAAIF,WAAU,GAAG,EAAG,QAAO;AAC3B;AAAA,cACF;AACA,kBAAI,CAAC,eAAgB,qBAAoB,KAAK,YAAY;AAC1D,uBAAS,GAAG;AACZ,0BAAY,YAAY,WAAW,OAAO,GAAG,GAAG,GAAG,IAAI,GAAG;AAAA,YAC5D,WAAW,cAAc,QAAQ,KAAK,kBAAkB;AACtD,0BAAY,WAAW,OAAO,WAAW,GAAG;AAAA,YAC9C;AACA,gBAAI,aAAa,MAAM,UAAU,YAAY;AAC3C,kBAAI,SAAU,kBAAiB,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK;AACzE,kBAAI,mBAAmB,UAAU,EAAG,OAAM;AAC1C;AAAA,YACF;AACA,gBAAI,MAAM;AACV,kBAAM,IAAI,MAAM,OAAO,WAAW,GAAG;AACrC,gBAAI,MAAM,MAAM;AACd,kBAAI,SAAU,kBAAiB,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK;AACzE,kBAAIA,WAAU,GAAG,EAAG,QAAO;AAC3B,kBAAI,mBAAmB,UAAU,EAAG,OAAM;AAC1C;AAAA,YACF;AACA,gBAAI,GAAG,MAAM,aAAa,YAAY;AAGpC,kBAAI,SAAU,kBAAiB,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK;AACzE;AAAA,YACF;AACA,gBAAI,QAAQ,OAAW,KAAI,KAAK,CAAC;AACjC,kBAAM,GAAG;AACT;AAAA,UACF;AACA,cAAI,QAAQ,KAAK;AACf,gBAAI,YAAY;AAAE,kBAAI,MAAM;AAAK,kBAAI,MAAM;AAAA,YAAO;AAClD,mBAAO;AAAA,UACT;AACA,aAAG,IAAI;AACP,iBAAO;AAAA,QACT;AAAA,MACF;AAAA;AAAA,MAIA,KAAK,aAAa;AAChB,cAAM,OAAO,IAAI,KAAK,KAAK,CAAC,CAAE;AAC9B,cAAM,WAAW,KAAK,KAAK,KAAK,CAAC,CAAE;AACnC,cAAM,UAAU,KAAK,KAAK,CAAC;AAC3B,cAAM,QAAQ,WAAW,IAAI,KAAK,OAAO,IAAI;AAC7C,cAAM,cAAc,KAAK,KAAK,CAAC,MAAO;AACtC,cAAM,IAAI,KAAK,KAAK,CAAC;AACrB,cAAM,UAAU,KAAK;AACrB,cAAM,OAAgB,IAAI,MAAa,CAAC;AACxC,iBAAS,IAAI,GAAG,IAAI,GAAG,IAAK,MAAK,CAAC,IAAI,KAAK,KAAK,UAAU,CAAC,CAAE;AAC7D,cAAM,QAAQ,KAAK;AACnB,cAAM,SAAS,KAAK;AACpB,cAAM,UAAU,KAAK,OAAO,OAAO;AACnC,cAAM,QAAQ,KAAK;AACnB,cAAM,SAAS,MAAM;AACrB,cAAM,UAA2C,IAAI,MAAgC,MAAM;AAC3F,cAAM,WAAqB,IAAI,MAAc,MAAM;AACnD,iBAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAAE,kBAAQ,CAAC,IAAI,YAAY,MAAM,CAAC,CAAE;AAAG,mBAAS,CAAC,IAAI,MAAM,CAAC,EAAG,CAAC;AAAA,QAAE;AACnG,cAAMG,UAAS,KAAK;AACpB,cAAM,WAAW,KAAK;AAEtB,eAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,gBAAM,eAAe,eAAe,GAAG;AACvC,gBAAM,SAAS,SAAS,OAAO,KAAK,GAAG;AACvC,cAAI,WAAW,KAAM,QAAO;AAC5B,gBAAM,SAAS,GAAG;AAClB,gBAAM,MAAM;AAEZ,cAAI,MAAM,MAAM,IAAI,GAAG;AACvB,cAAI,QAAQ,UAAa,QAAS,OAAM,OAAO,IAAI,aAAa,GAAG,CAAC;AACpE,cAAI,QAAQ,QAAW;AACrB,qBAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,kBAAI,QAAQ,CAAC,EAAG,GAAG,GAAG;AACpB,sBAAM,SAAS,CAAC;AAChB;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAEA,cAAI;AACJ,cAAI;AACJ,cAAI,QAAQ,QAAW;AACrB,gBAAI,UAAU,QAAW;AAEvB,kBAAI,MAAM;AACV,kBAAI,MAAM;AACV,qBAAO;AAAA,YACT;AACA,qBAAS;AACT,yBAAa;AAAA,UACf,OAAO;AACL,qBAAS,KAAK,GAAG;AACjB,yBAAaA,QAAO,GAAG,MAAM;AAAA,UAC/B;AAEA,cAAI,OAAO,eAAe,GAAG;AAC7B,cAAI;AACJ,cAAI,YAAY;AACd,kBAAM,cAAc,IAAI;AACxB,2BAAe,KAAK,YAAY;AAChC,mBAAO,eAAe,GAAG;AACzB,gBAAI,UAAU,EAAE,OAAO,KAAK,MAAM,EAAE,OAAO,KAAK,KAAK,OAAO,EAAE;AAC9D,gBAAI;AACF,kBAAI,OAAO,OAAO,KAAK,GAAG;AAAA,YAC5B,UAAE;AACA,kBAAI,UAAU;AAAA,YAChB;AAAA,UACF,OAAO;AACL,gBAAI,OAAO,OAAO,QAAQ,GAAG;AAAA,UAC/B;AACA,cAAI,MAAM,MAAM;AACd,2BAAe,KAAK,IAAI;AAExB,gBAAI,MAAM;AACV,mBAAO;AAAA,UACT;AACA,iBAAO,CAAC,KAAK,CAAC;AAAA,QAChB;AAAA,MACF;AAAA;AAAA,MAIA,KAAK;AAAA,MACL,KAAK,eAAe;AAClB,cAAM,QAAQ,KAAK,KAAK,CAAC;AACzB,cAAM,QAAQ,KAAK,KAAK,KAAK,CAAC,CAAE;AAChC,cAAM,OAAO,KAAK,KAAK,CAAC;AACxB,cAAM,WAAW,KAAK,KAAK,CAAC;AAC5B,cAAM,OAAO,EAAE,KAAK,KAAK,CAAC,CAAE;AAC5B,cAAM,SAAS,KAAK,KAAK,CAAC;AAC1B,cAAM,OAAO,SAAS,IAAI,SAAY,EAAE,MAAM;AAC9C,cAAM,UAAU,OAAO;AACvB,cAAM,eAAe,QAAQ,OAAO;AACpC,cAAM,cAAc,QAAQ,OAAO;AACnC,cAAM,aAAa,QAAQ,QAAQ;AACnC,cAAM,YAAY,QAAQ,QAAQ;AAClC,cAAM,UAAU,QAAQ,QAAQ;AAChC,cAAM,kBAAkB,QAAQ,SAAS;AAKzC,cAAM,QAAQ,YAAY,IACtB,IAAI,QAAQ,IAIZ;AAKJ,cAAM,aAAa,UAAU,UAAa,OAAO;AACjD,cAAM,kBAAkB,QAAQ,OAAO,KAAK;AAC5C,cAAM,uBAAuB,cAAc,IAAI,sBAAsB,SACjE,IAAI,kBAAkB,IAAI,IAC1B;AACJ,cAAM,aAAa,aAAa;AAChC,cAAM,cAAc,eAAe,UAC/B,CAAC,cAAc,kBAAkB,yBAAyB,QAC1D,yBAAyB;AAI7B,cAAM,eAAe,CAAC,cAAc,IAAI,sBAAsB,SAAS,YAAY;AACnF,cAAM,UAAU,CAAC;AACjB,eAAO,CAAC,OAAO,KAAK,QAAQ;AAC1B,gBAAM,OAAO;AAUb,gBAAM,MAAM,IAAI;AAChB,gBAAM,MAAM,IAAI;AAChB,gBAAM,OAAO,IAAI;AACjB,gBAAM,MAAM,IAAI;AAChB,gBAAM,OAAO,IAAI;AACjB,gBAAM,OAAO,IAAI;AACjB,gBAAM,MAAqB,UAAU,EAAE,SAAS,KAAK,IAAI,CAAC;AAC1D,cAAI,UAAU;AACd,cAAI,eAAe;AACnB,cAAI,aAAa;AACjB,cAAI,kBAAkB;AACtB,cAAI,gBAAgB;AAGpB,cAAI,gBAAgB;AACpB,gBAAM,cAAc,IAAI;AACxB,cAAI,UAAU,aAAa,CAAC,IAAI;AAMhC,gBAAM,YAAY,aAAa,IAAI,qBAAqB;AACxD,cAAI,cAAc,MAAM,yBAAyB,QAAW;AAC1D,gBAAI,qBAAqB,KAAK,qBAAqB,IAAI;AAAA,UACzD;AACA,gBAAM,IAAI,MAAM,OAAO,KAAK,GAAG;AAC/B,cAAI,MAAM,QAAQ,kBAAkB,IAAI,WAAW,OAAW,IAAG,IAAI,cAAc,OAAO,GAAG,GAAG,GAAG;AACnG,gBAAM,WAAiC,aAAa,cAAc,IAAI,OAAO,IAAI;AACjF,cAAI,UAAU;AACd,cAAI,WAAY,KAAI,qBAAqB;AACzC,gBAAM,OAAO,UAAU,WAAW,IAAI,OAAO,IAAI,WAAW,SAAY,CAAC,IAAI,MAAM,IAAI;AACvF,gBAAM,WAAW;AACjB,gBAAM,UAAU,IAAI,QAAQ,IAAI,cAAc,SAAY,CAAC,IAAI,SAAS,IAAI;AAC5E,gBAAM,OAAO,IAAI,MAAM;AACvB,cAAI,UAAU;AACd,cAAI,eAAe;AACnB,cAAI,aAAa;AACjB,cAAI,kBAAkB;AACtB,cAAI,gBAAgB;AACpB,cAAI,gBAAgB;AACpB,cAAI,MAAM,KAAM,QAAO;AACvB,gBAAM,MAAM,GAAG;AACf,gBAAM,OAAO,UAAU,UAAU,KAAK,KAAK,GAAG,IAAI,EAAE,OAAO,KAAK,IAAI;AACpE,gBAAM,KAAK,cAAc,IAAI,UAAU,SACnC,OAAO,OAAO,CAAC,GAAG,IAAI,KAAgC,IACtD;AAEJ,cAAI;AACJ,cAAI,UAAU,KAAK,WAAW,GAAG;AAC/B,iBAAK,YAAY,KAAK,CAAC,CAAC;AAAA,UAC1B,WAAW,YAAY,KAAK,WAAW,GAAG;AACxC,iBAAK,KAAK,CAAC;AAAA,UACb;AAAA;AAAA;AAAA,aAGG,WAAY,UAAU,UAAa,OAAO,MACxC,gBACA,MAAM,yBAAyB,UAC/B,KAAK,WAAW,KAChB,QAAQ,WAAW,KACnB,KAAK,qBAAqB,MAAM,KAAK,CAAC,GAAG,MAAM,OAAO;AAAA,YACzD;AACA,iBAAK,KAAK,CAAC;AAAA,UACb,WAAW,QAAQ,GAAG;AACpB,iBAAK,WAAW,SAAS,SACrB,KAAK,MAAM,MAAM,UAAU,MAAM,SAAS,MAAM,aAAa,KAAK,IAAI,UAAU,SAAY,OAAO,OAAO,CAAC,GAAG,IAAI,KAAgC,IAAI,QAAW,IAAI,IACrK,aAAa,MAAM,MAAM,IAAI;AAAA,UACnC,WAAW,UAAU,QAAW;AAC9B,gBAAI,WAAW,SAAS,QAAW;AAEjC,mBAAK,KAAK,MAAM,MAAM,UAAU,MAAM,SAAS,MAAM,aAAa,KAAK,IAAI,UAAU,SAAY,OAAO,OAAO,CAAC,GAAG,IAAI,KAAgC,IAAI,QAAW,IAAI;AAAA,YAC5K,OAAO;AACL,mBAAK,MAAM,MAAM,UAAU,MAAM,SAAS,cAAc,OAAOV,WAAU,EAAE;AAAA,YAC7E;AAAA,UACF,WAAW,SAAS,QAAW;AAC7B,iBAAK,KAAK,MAAM,UAAU,UAAU,MAAM,SAAS,MAAM,IAAI,IAAI;AAAA,UACnE,OAAO;AACL,iBAAK,EAAE,MAAM,QAAQ,MAAM,MAAM,OAAO,MAAM,MAAM,UAAU,KAAK;AAAA,UACrE;AAMA,cAAI,SAAS,UAAa,QAAQ,QAAW;AAC3C,yBAAa,KAAK,IAAI,SAAS,IAAI,OAAO,KAAK,GAAG,CAAC;AAAA,UACrD;AACA,aAAG,IAAI;AACP,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,MAEA;AACE,cAAM,IAAI,MAAM,mCAAmC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE;AAAA,IAC5E;AAAA,EACF;AAIA,WAAS,YAAY,GAAe,KAAsC;AACxE,UAAM,QAAQ,QAAQ,EAAE,CAAC,CAAC;AAO1B,WAAO;AAAA,MACL,MAAM;AAAA,MACN,OAAO,EAAE,UAAU,YAAY,EAAE,CAAC,CAAC,GAAG,iBAAiB,MAAM,UAAU,MAAM;AAAA,MAC7E,MAAM,OAAO,EAAE,KAAK,UAAU;AAAA,MAC9B,MAAM,OAAe,KAAa,KAAyC;AACzE,cAAM,IAAI,MAAM,OAAO,KAAK,GAAG;AAC/B,YAAI,MAAM,MAAM;AACd,gBAAM,KAAK,IAAI;AACf,gBAAM,KAAK,OAAO,UAAa,KAAK,IAAI,MAAM;AAC9C,iBAAO,EAAE,IAAI,OAAO,UAAW,IAAI,OAAOC,WAAuB,MAAM,EAAE,OAAO,IAAI,KAAK,GAAG,EAAE;AAAA,QAChG;AACA,eAAO,EAAE,IAAI,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,KAAK,KAAK,GAAG,EAAE,EAAE;AAAA,MAC/D;AAAA,IACF;AAAA,EACF;AAEA,WAAS,YAAY,KAAuB;AAC1C,QAAI,QAAQ,GAAI,QAAO,EAAE,MAAM,QAAQ;AACvC,QAAI,MAAM,EAAG,QAAO,EAAE,MAAM,MAAM;AAClC,UAAM,OAAO,KAAK,GAAG,GAAG,KAAK;AAC7B,UAAM,SAAS,gBAAgB,IAAI;AACnC,WAAO,EAAE,MAAM,UAAU,OAAO;AAAA,EAClC;AAiBA,QAAM,WAAkC,CAAC;AACzC,MAAI;AAAA,EAEJ,MAAM,sBAAsB,MAAM;AAAA,EAAC;AACnC,MAAI;AACJ,MAAI;AACJ;AAIE,UAAM,WAAqB,CAAC;AAC5B,eAAW,KAAK,KAAK,SAAS,CAAC,GAAG;AAChC,iBAAW,KAAK,EAAE,KAAM,UAAS,KAAK,EAAE,CAAC,CAAC;AAC1C,UAAI,EAAE,aAAa,OAAW,UAAS,KAAK,EAAE,SAAS,CAAC,CAAC;AAAA,IAC3D;AACA,eAAW,OAAO,KAAK,YAAY,CAAC,EAAG,YAAW,KAAK,IAAK,UAAS,KAAK,EAAE,CAAC,CAAC;AAC9E,UAAM,kBAAkB,CAAC,GAAG,OAAO,OAAO,KAAK,KAAK,GAAG,GAAG,QAAQ;AAClE,eAAW,MAAM,eAAe,MAAM,eAAe,GAAG;AACtD,UAAI,KAAK,EAAE,MAAM,YAAa;AAC9B,2BAAqB,IAAI,KAAK,KAAK,CAAC,CAAE,GAAG,KAAK,KAAK,CAAC,GAAI,KAAK,KAAK,CAAC,CAAE;AAAA,IACvE;AAoBA,UAAM,MAAM,IAAI,sBAAsB,SAClC,KAAK,KAAK,KAAK,OAAK,EAAE,QAAQ,OAAO,GAAG,CAAC,IACzC;AACJ,QAAI,QAAQ,QAAW;AACrB,YAAM,QAAQ,aAAaC,GAAE,IAAIA,GAAE,IAAI,IAAI,IAAI;AAC/C,gBAAU,IAAI;AAAA,QACZ;AAAA,QAAI;AAAA,QAAM;AAAA,QAAG;AAAA,QAAI;AAAA,QAAK,MAAM;AAAA,QAAO,MAAM;AAAA,QAAS,MAAM;AAAA,QAAaC;AAAA,QACrEA,QAAO,IAAI,QAAM,IAAI,MAAM,gBAAgB;AAAA,QAAG;AAAA,QAC9C;AAAA,QAAU;AAAA,QAAM;AAAA,QAAKF;AAAA,QAAU;AAAA,QAAU;AAAA,QAAYD;AAAA,QACrD;AAAA,QAAkB;AAAA,QAAa;AAAA,QAAc;AAAA,QAAkB;AAAA,QAAyB;AAAA,QACxF;AAAA,QAAU;AAAA,QAAe;AAAA,QAAe;AAAA,QAAc;AAAA,QACtD;AAAA,QAAqB;AAAA,QAAc;AAAA,QAAmB;AAAA,QACtD;AAAA,QAAY;AAAA,QAAe;AAAA,QAA6B;AAAA,QAAW;AAAA,QAAU;AAAA,QAC7E;AAAA,QAAc;AAAA,QACd,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,MAAM,YAAY,CAAC,CAAC,IAAI;AAAA,QAC9C;AAAA,QAAW;AAAA,QAAa;AAAA,QAAY;AAAA,MACtC;AACA,oBAAc,IAAI,IAAI,IAAI,OAAO;AAAA,IACnC;AAiBA,QAAI;AAGF,UAAI,YAAY,OAAW,OAAM,IAAI,cAAc;AACnD,UAAI,KAAK,QAAQ,QAAW;AAC1B,cAAM,IAAI;AAAA,UACR,cAAc,OAAO,GAAG,CAAC,aAAa,IAAI,OAAO,eAAe,IAAI,UAAU,aAChE,IAAI,QAAQ,aAAa,IAAI,QAAQ,UAAU,IAAI,KAAK;AAAA,QAGxE;AAAA,MACF;AAMA,UAAI,CAAC,aAAc,OAAM,IAAI,YAAY,sCAAsC;AAC/E,YAAM,KAAK,mBAAmBE,IAAG,MAAM,KAAK,QAAQ;AAcpD,UAAI;AACJ,UAAI;AAEF,kBAAU,IAAI,SAAS,GAAG,gBAAgB,GAAG,MAAM;AAAA,MACrD,SAAS,GAAG;AACV,YAAI,aAAa,aAAa;AAC5B,gBAAM,IAAI;AAAA,YACR,gDAAgD,EAAE,OAAO;AAAA,IACA,GAAG;AAAA,UAC9D;AAAA,QACF;AACA,cAAM,IAAI,YAAY,6BAA6B,OAAO,CAAC,CAAC,GAAG;AAAA,MACjE;AACA,gBAAU;AAAA,QACR;AAAA,QAAI;AAAA,QAAM;AAAA,QAAG;AAAA,QAAI;AAAA,QAAK,GAAG;AAAA,QAAO,GAAG;AAAA,QAAS,GAAG;AAAA,QAAaC;AAAA,QAC5DA,QAAO,IAAI,QAAM,IAAI,MAAM,gBAAgB;AAAA,QAAG;AAAA,QAC9C;AAAA,QAAU;AAAA,QAAM;AAAA,QAAKF;AAAA,QAAU;AAAA,QAAU;AAAA,QAAYD;AAAA,QACrD;AAAA,QAAkB;AAAA,QAAa;AAAA,QAAc;AAAA,QAAkB;AAAA,QAAyB;AAAA,QACxF;AAAA,QAAU;AAAA,QAAe;AAAA,QAAe;AAAA,QAAc;AAAA,QACtD;AAAA,QAAqB;AAAA,QAAc;AAAA,QAAmB;AAAA,QACtD;AAAA,QAAY;AAAA,QAAe;AAAA,QAA6B;AAAA,QAAW;AAAA,QAAU;AAAA,QAC7E;AAAA,QAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMd,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,MAAM,YAAY,CAAC,CAAC,IAAI;AAAA,QAC9C;AAAA,QAAW;AAAA,QAAa;AAAA,QAAY;AAAA,MACtC;AACA,oBAAc,GAAG;AAAA,IACnB,SAAS,GAAG;AACV,UAAI,aAAa,eAAe;AAAA,MAA8C,WACrE,aAAa,YAAa,eAAc,EAAE;AAAA,UAC9C,OAAM;AAAA,IACb;AAAA,EACF;AAGA,WAAS,QAAQ,IAAmB;AAClC,UAAM,KAAK;AACX,QAAI,OAAO,QAAW;AACpB,YAAM,IAAI,GAAG,KAAK,EAAE;AACpB,UAAI,MAAM,OAAW,OAAM,IAAI,MAAM,2CAA2C,EAAE,EAAE;AACpF,aAAO;AAAA,IACT;AACA,WAAO,KAAK,EAAE;AAAA,EAChB;AAEA,aAAW,KAAK,KAAK,SAAS,CAAC,GAAG;AAChC,UAAM,OAAO,EAAE,KAAK,IAAI,OAAK,YAAY,CAAC,CAAC;AAC3C,UAAM,OAAO,EAAE,QAAQ,OAAO;AAC9B,QAAI,EAAE,SAAS,GAAG;AAChB,eAAS,KAAK,SAAS,EAAE,MAAO,EAAE,OAAQ,EAAE,MAAM,KAAK,SAAS,EAAE,QAAQ,OAAO,EAAE,CAAC,CAAwB;AAC5G;AAAA,IACF;AACA,UAAM,UAAiC,OAAO,EAAE,SAAS,WACrD,EAAE,KAAK,WAAW,OAAO,EAAE,MAAM,iBAAiB,MAAM,IACxD;AACJ,aAAS,KAAK,OAAO,YAAY,EAAE,UAAW,OAAO,GAAG,EAAE,MAAM,KAAK,QAAQ,EAAE,QAAQ,OAAO,EAAE,CAAC,CAAwB;AAAA,EAC3H;AACA,QAAM,QAAwC;AAE9C,QAAM,YACH,KAAK,YAAY,CAAC,GAAG,IAAI,SAAO,IAAI,IAAI,OAAK,YAAY,CAAC,CAAC,CAAC;AAI/D,MAAI,YAAY,QAAW;AACzB,UAAM,KAAK;AACX,WAAO;AAAA,MACL,QAAQ,GAAG;AAAA,MACX,KAAK,GAAG;AAAA,MACR,OAAO,GAAG;AAAA,MACV,QAAQ,GAAG;AAAA,MACX;AAAA,MACA,SAAS;AAAA,MACT,aAAa;AAAA,IACf;AAAA,EACF;AAEA,QAAM,SAAgC,CAAC;AACvC,aAAW,CAAC,MAAM,OAAO,KAAK,OAAO,QAAQ,KAAK,KAAK,EAAG,QAAO,IAAI,IAAI,KAAK,OAAO;AAYrF,WAAS,MAAM,KAAyB;AAGtC,UAAM,WAAW,IAAI;AACrB,UAAM,eAAe,IAAI,oBAAoB;AAC7C,QAAI,QAAQ,EAAG,QAAO,KAAK,EAAE,MAAM,MAAM,MAAM,MAAM,UAAU,KAAK,KAAK,GAAG,EAAE,CAAC;AAC/E;AACA,WAAO;AACP,WAAO;AACP,UAAM;AAAA,EACR;AAEA,WAAS,SAAe;AACtB,QAAI,SAAS,EAAG,OAAM,IAAI,MAAM,yCAAyC;AACzE;AACA,QAAI,UAAU,EAAG;AACjB,UAAM,QAAQ,OAAO,IAAI;AACzB,WAAO,MAAM;AACb,WAAO,MAAM;AACb,UAAM,MAAM;AACZ,OAAG,IAAI,MAAM;AAAA,EACf;AAEA,SAAO,EAAE,QAAQ,KAAK,MAAM,GAAG,GAAG,OAAO,QAAQ,UAAU,SAAS,YAAY;AAClF;AAaO,IAAM,gBAAN,MAAoB;AAAA,EACR;AAAA,EACA;AAAA,EACA,QAAqC,MAAM,KAAK,EAAE,QAAQ,GAAG,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQvE;AAAA,EACA;AAAA,EAER,YAAY,MAAoB,WAA0B,aAAa,IAAI,GAAG;AAC5E,SAAK,OAAO;AACZ,SAAK,IAAI;AAAA,EACX;AAAA,EAEA,IAAI,KAAuB;AACzB,UAAM,MAAM,OAAO,GAAG;AAEtB,QAAI,IAAI,sBAAsB,OAAW,QAAO,SAAS,KAAK,GAAG,KAAK,MAAM,GAAG;AAC/E,UAAM,MAAM,KAAK,MAAM,GAAG;AAC1B,QAAI,QAAQ,OAAW,QAAO;AAC9B,UAAM,OAAO,SAAS,KAAK,GAAG,KAAK,MAAM,GAAG;AAC5C,SAAK,MAAM,GAAG,IAAI;AAClB,WAAO;AAAA,EACT;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,EA8CA,OAAO,KAA6B;AAClC,UAAM,OAAO,IAAI;AACjB,UAAM,UAAU,SAAS,UAAa,cAAc,IAAI;AACxD,UAAM,oBAAoB,MAAM,2BAA2B,SACtD,MAAM,yBAAyB;AACpC,UAAM,oBAAoB,MAAM;AAChC,UAAM,aAAa,IAAI,eAAe;AACtC,UAAM,WAAW,IAAI,cAAc;AACnC,UAAM,WAAW,IAAI,qBAAqB;AAC1C,UAAM,QAAQ,IAAI,WAAW;AAC7B,UAAM,MAAM,SAAS,SAAS,YAAY,UAAU,UAAU,OAAO,iBAAiB;AACtF,QAAI,QAAQ,KAAK;AACjB,QAAI,sBAAsB,QAAW;AAKnC,UAAI,KAAK,kBAAkB,mBAAmB;AAC5C,gBAAQ,KAAK;AAAA,MACf,OACK;AACH,gBAAQ,MAAM,KAAK,EAAE,QAAQ,GAAG,CAAC;AACjC,aAAK,gBAAgB;AACrB,aAAK,iBAAiB;AAAA,MACxB;AAAA,IACF;AACA,UAAM,MAAM,MAAM,GAAG;AACrB,QAAI,QAAQ,OAAW,QAAO;AAC9B,UAAM,OAAO,SAAS,KAAK,GAAG,KAAK,MAAM;AAAA,MACvC;AAAA,MAAS;AAAA,MAAmB;AAAA,MAC5B;AAAA,MAAY;AAAA,MAAU;AAAA,MAAU;AAAA,IAClC,CAAC;AACD,UAAM,GAAG,IAAI;AACb,WAAO;AAAA,EACT;AACF;AAYO,SAAS,WACd,QACA,mBAAsD,CAAC,GAC5B;AAC3B,QAAM,OAAO,cAAc,MAAM;AACjC,QAAM,WAAW,aAAa,IAAI;AAClC,QAAM,QAAQ,IAAI,cAAc,MAAM,QAAQ;AAC9C,QAAM,QAAQ,OAAO,KAAK,KAAK,KAAK;AACpC,QAAM,SAAS,KAAK;AACpB,MAAI;AAkBJ,MAAI;AACJ,SAAO,aAAa,MAAM;AAAA,IACxB,SAAS,CAAC,IAAI,OAAO,KAAK,QAAQ;AAChC,YAAM,IAAI,YAAY,MAAM,OAAO,GAAG;AACtC,iBAAW;AACX,QAAE,MAAM,GAAG;AACX,UAAI;AACF,cAAM,IAAI,EAAE,OAAO,MAAM,EAAE,CAAE,EAAG,OAAO,KAAK,GAAG;AAC/C,YAAI,MAAM,KAAM,QAAO;AACvB,eAAO;AACP,eAAO,EAAE,IAAI;AAAA,MACf,UAAE;AAGA,UAAE,OAAO;AAAA,MACX;AAAA,IACF;AAAA,IACA,WAAW,MAAM;AAAA,IACjB,aAAa,CAAC,IAAI,QAAQ;AACxB,YAAM,IAAI,MAAM,OAAO,GAAG;AAC1B,iBAAW;AACX,aAAO,EAAE,SAAS,SAAS,EAAE,KAAK,EAAE;AAAA,IACtC;AAAA,EACF,GAAG,kBAAkB,QAAQ;AAC/B;;;ACh7FA,SAAS,SAAS,GAAmB;AACnC,SAAO,KAAK,UAAU,CAAC;AACzB;AAIA,SAAS,cAAc,SAAoC;AACzD,QAAM,QAAQ,IAAI,QAAQ,IAAI,QAAQ,EAAE,KAAK,GAAG,CAAC;AACjD,MAAI,QAAQ,SAAS,EAAG,QAAO;AAC/B,QAAM,YAAY,SAAS,MAAM,EAAE,EAAE,KAAK,CAAAW,QAAM,QAAQ,MAAM,UAAQ,CAAC,KAAK,SAASA,GAAE,CAAC,CAAC;AACzF,MAAI,cAAc,OAAW,QAAO;AACpC,QAAM,QAAQ,GAAG,SAAS,QAAQ,KAAK,SAAS,CAAC,CAAC,UAAU,SAAS,SAAS,CAAC;AAC/E,SAAO,MAAM,SAAS,MAAM,SAAS,QAAQ;AAC/C;AAaA,SAAS,UAAU,GAAoB;AACrC,MAAI,aAAa,OAAQ,QAAO,IAAI,EAAE,MAAM,IAAI,EAAE,KAAK;AACvD,MAAI,OAAO,MAAM,SAAU,QAAO,SAAS,CAAC;AAC5C,MAAI,MAAM,QAAQ,OAAO,MAAM,YAAY,OAAO,MAAM,UAAW,QAAO,KAAK,UAAU,CAAC;AAM1F,MAAI,MAAM,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAK,MAAM,QAAQ,OAAO,MAAM,YAAY,OAAO,MAAM,YAAY,OAAO,MAAM,SAAS,GAAG;AAC5H,WAAO,IAAI,EAAE,IAAI,OAAM,OAAO,MAAM,WAAW,SAAS,CAAC,IAAI,KAAK,UAAU,CAAC,CAAE,EAAE,KAAK,GAAG,CAAC;AAAA,EAC5F;AAOA,MACE,OAAO,MAAM,YAAY,MAAM,QAAQ,CAAC,MAAM,QAAQ,CAAC,KAAK,EAAE,aAAa,YACvE,OAAO,eAAe,CAAC,MAAM,OAAO,aAAa,OAAO,eAAe,CAAC,MAAM,SAC/E,OAAO,OAAO,CAAC,EAAE,MAAM,OACxB,MAAM,QAAQ,OAAO,MAAM,YAAY,OAAO,MAAM,YAAY,OAAO,MAAM,aACzE,MAAM,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAK,MAAM,QAAQ,OAAO,MAAM,YAAY,OAAO,MAAM,YAAY,OAAO,MAAM,SAAS,CAAE,GAC/H;AACA,UAAM,UAAU,OAAO,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,CAAC,IACpE,OAAO,QAAQ,WAAW,SAAS,GAAG,IACpC,MAAM,QAAQ,GAAG,IAAI,IAAI,IAAI,IAAI,OAAM,OAAO,MAAM,WAAW,SAAS,CAAC,IAAI,KAAK,UAAU,CAAC,CAAE,EAAE,KAAK,GAAG,CAAC,MAC1G,KAAK,UAAU,GAAG,CAAC,EAAE;AACzB,WAAO,IAAI,QAAQ,KAAK,GAAG,CAAC;AAAA,EAC9B;AACA,QAAM,QAAQ,OAAO,MAAM,WAAW,OAAO,UAAU,SAAS,KAAK,CAAC,IAAI,OAAO;AACjF,QAAM,IAAI;AAAA,IACR,0DAA0D,KAAK;AAAA,EAGjE;AACF;AAEA,SAAS,eAAeC,IAA8C;AACpE,MAAIA,GAAE,UAAU,OAAW,QAAO,mBAAmB,SAASA,GAAE,MAAM,CAAC,CAAC,CAAC,IAAI,SAASA,GAAE,MAAM,CAAC,CAAC,CAAC;AACjG,MAAIA,GAAE,SAAS,QAAW;AACxB,UAAM,OAAOA,GAAE,KAAK,IAAI,OAAK,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,GAAG;AAC9E,WAAO,kBAAkB,IAAI,SAASA,GAAE,OAAO,CAAC;AAAA,EAClD;AACA,SAAO,UAAUA,GAAE,KAAK,IAAI,OAAK,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC;AACvG;AAEA,SAAS,QAAQ,GAA8C;AAC7D,SAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AACzB;AAEA,SAAS,aAAa,GAA4C;AAChE,QAAM,QAAQ,CAAC,QAAQ,EAAE,IAAI,IAAI,SAAS,EAAE,KAAK,IAAI,SAAS,EAAE,KAAK,IAAI,OAAO,EAAE,KAAK,GAAG,CAAC,GAAG;AAC9F,MAAI,EAAE,aAAa,OAAW,OAAM,KAAK,YAAY,QAAQ,EAAE,QAAQ,CAAC,EAAE;AAC1E,MAAI,EAAE,SAAS,OAAW,OAAM,KAAK,QAAQ,EAAE,SAAS,OAAO,SAAS,SAAS,EAAE,IAAI,CAAC,EAAE;AAC1F,MAAI,EAAE,SAAS,OAAW,OAAM,KAAK,QAAQ,SAAS,EAAE,IAAI,CAAC,EAAE;AAC/D,MAAI,EAAE,UAAU,OAAW,OAAM,KAAK,SAAS,SAAS,EAAE,KAAK,CAAC,EAAE;AAClE,SAAO,IAAI,MAAM,KAAK,GAAG,CAAC;AAC5B;AAEA,SAAS,iBAAiB,GAAgD;AACxE,SAAO,SACK,EAAE,IAAI,IAAI,QAAQ,EAAE,KAAK,GAAG,CAAC,aAC1B,EAAE,OAAO,KAAK,GAAG,CAAC,WACpB,EAAE,KAAK,IAAI,QAAQ,EAAE,KAAK,GAAG,CAAC,cAC3B,EAAE,QAAQ,KAAK,GAAG,CAAC,YACrB,EAAE,MAAM,IAAI,OAAK,IAAI,EAAE,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC,aAClF,EAAE,OAAO,KAAK,GAAG,CAAC,eAChB,EAAE,SAAS,IAAI,QAAQ,EAAE,KAAK,GAAG,CAAC;AAErD;AA0CA,SAAS,eAAe,MAAoB,MAAmC;AA2B7E,MAAI,KAAK,WAAW,EAAG,QAAO,CAAC,OAAO;AACtC,QAAMC,KAAI,aAAa,IAAI;AAG3B,QAAM,WAAqB,CAAC;AAC5B,aAAW,KAAK,KAAK,SAAS,CAAC,GAAG;AAChC,eAAW,KAAK,EAAE,KAAM,UAAS,KAAK,EAAE,CAAC,CAAC;AAC1C,QAAI,EAAE,aAAa,OAAW,UAAS,KAAK,EAAE,SAAS,CAAC,CAAC;AAAA,EAC3D;AACA,aAAW,OAAO,KAAK,YAAY,CAAC,EAAG,YAAW,KAAK,IAAK,UAAS,KAAK,EAAE,CAAC,CAAC;AAE9E,QAAM,MAAgB,CAAC;AACvB,QAAM,OAAO,oBAAI,IAAY;AAC7B,aAAW,OAAO,MAAM;AACtB,UAAM,MAAM,OAAO,GAAG;AACtB,QAAI,KAAK,IAAI,GAAG,EAAG;AACnB,SAAK,IAAI,GAAG;AACZ,QAAI;AACJ,QAAI;AACF,WAAK,mBAAmBA,IAAG,MAAM,KAAK,QAAQ;AAAA,IAChD,SAAS,GAAG;AACV,UAAI,aAAa,YAAa;AAC9B,YAAM;AAAA,IACR;AACA,UAAM,OAAO,GAAG;AAChB,QAAI,KAAK,QACE,GAAG,qBACU,eAAe,KAAK,GAAG,CAAC,KAAK,GAAG,MAAM;AAAA,mBAE9C,KAAK,QAAQ,IAAI,OAAK,IAAI,EAAE,KAAK,GAAG,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC,kBAC/C,KAAK,YAAY,IAAI,OAAK,IAAI,EAAE,KAAK,GAAG,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC,YAC7D,KAAK,MAAM,KAAK,GAAG,CAAC,eAElB,CAAC,GAAG,GAAG,OAAO,EAAE,KAAK,GAAG,CAAC,IAClC;AAAA,EACT;AACA,SAAO,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,IAAI;AACjC;AAsCA,SAAS,gBAAgB,MAAoB,KAAmB;AAI9D,MAAI,KAAK,gBAAgB,UAAa,KAAK,YAAY,SAAS,GAAG;AACjE,UAAM,IAAI;AAAA,MACR,GAAG,GAAG,sHAC0C,KAAK,YAAY,KAAK,IAAI,CAAC;AAAA,IAE7E;AAAA,EACF;AACF;AAOA,SAAS,cAAc,MAAoB,KAAwB,OAAoB,CAAC,GAAa;AACnG,SAAO;AAAA,IACL,GAAG,eAAe,MAAM,KAAK,cAAc,CAAC,CAAC;AAAA,IAC7C,MAAM,KAAK,KAAK,KAAK,GAAG,CAAC;AAAA,IACzB,MAAM,KAAK,EAAE,IAAI,SAAS,EAAE,KAAK,GAAG,CAAC;AAAA,IACrC,KAAK,cAAc,KAAK,EAAE,CAAC;AAAA,IAC3B,MAAM,KAAK,GAAG,IAAI,OAAK,IAAI,EAAE,IAAI,QAAQ,EAAE,KAAK,GAAG,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC;AAAA,IAClE,MAAM,KAAK,KAAK,IAAI,OAAK,IAAI,EAAE,KAAK,GAAG,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC;AAAA,IACtD,KAAK,KAAK,UAAU,KAAK,KAAK,CAAC;AAAA,IAC/B,GAAI,KAAK,UAAU,IAAI,CAAC,MAAM,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOnC,GAAI,KAAK,IAAI,WAAW,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,gBAAgB,EAAE,KAAK,GAAG,CAAC,IAAI;AAAA,IACpF,GAAI,KAAK,WAAW,SAAY,CAAC,IAAI,CAAC,OAAO,KAAK,OAAO,IAAI,QAAQ,EAAE,KAAK,GAAG,CAAC,IAAI;AAAA,IACpF,GAAI,KAAK,eAAe,IAAI,CAAC,OAAO,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,IAIzC,GAAI,KAAK,QAAQ,IAAI,CAAC,OAAO,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMlC,GAAI,KAAK,QAAQ,SAAY,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,MAAM,IAAI,SAAS,EAAE,CAAC,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,CAAC,IAAI;AAAA,IACjH,GAAI,KAAK,aAAa,SAAY,CAAC,IAAI,CAAC,KAAK,SAAS,KAAK,QAAQ,CAAC,GAAG;AAAA,IACvE,GAAI,KAAK,gBAAgB,SAAY,CAAC,IAAI,CAAC,OAAO,KAAK,YAAY,IAAI,cAAc,EAAE,KAAK,GAAG,CAAC,IAAI;AAAA,IACpG,GAAI,KAAK,UAAU,SAAY,CAAC,IAAI,CAAC,OAAO,KAAK,MAAM,IAAI,YAAY,EAAE,KAAK,GAAG,CAAC,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,IAKtF,GAAI,KAAK,aAAa,SAAY,CAAC,IAAI;AAAA,MACrC,OAAO,KAAK,SAAS,IAAI,SAAO,IAAI,IAAI,IAAI,OAAO,EAAE,KAAK,GAAG,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC;AAAA,MAC5E,QAAQ,KAAK,cAAc,CAAC,GAAG,KAAK,GAAG,CAAC;AAAA,IAC1C;AAAA,IACA,MAAM,IAAI,KAAK,GAAG,CAAC;AAAA,EACrB;AACF;AAEO,SAAS,gBAAgB,MAAoB,OAAoB,CAAC,GAAW;AAClF,kBAAgB,MAAM,iBAAiB;AACvC,QAAM,OAAO,KAAK,QAAQ;AAC1B,QAAM,UAAU,KAAK,WAAW;AAChC,QAAM,MAAM,KAAK,aAAa,KAAK,IAAI,IAAI,MAAM,UAAU;AAC3D,QAAMC,OAAM,KAAK,cAAc;AAC/B,SAAO;AAAA,IACL,YAAYA,IAAG,WAAW,SAAS,OAAO,CAAC;AAAA,IAC3C,gBAAgB,IAAI,sBAAsBA,IAAG;AAAA,IAC7C,GAAG,cAAc,MAAM,KAAK,IAAI;AAAA,IAChC;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AA8BO,SAAS,oBAAoB,MAAoB,OAA8B,CAAC,GAAW;AAChG,kBAAgB,MAAM,qBAAqB;AAC3C,QAAM,QAAQ,KAAK,UAAU,SAAY,YAAY,KAAK;AAC1D,QAAMA,OAAM,KAAK,cAAc;AAC/B,QAAM,MAAM,KAAK,aAAa,KAAK,IAAI,IAAI,MAAM,UAAU;AAC3D,QAAM,QAAQ,IAAI,KAAK,mBAAmB,SAAY,KAAK,IAAI,KAAK,cAAc,EAAE;AACpF,SAAO;AAAA,IACL,mBAAmBA,IAAG;AAAA,IACtB,GAAG,cAAc,MAAM,KAAK,IAAI;AAAA,IAChC,UAAU,OAAO,QAAQ,GAAG,KAAK,IAAI,SAAS,KAAK,CAAC;AAAA,EACtD,EAAE,KAAK,IAAI;AACb;;;AClWA,SAAS,OAAO,OAAuB;AACrC,SAAO,mBAAmB,KAAK;AACjC;AAEA,SAAS,eAAe,KAA8C,MAAwB;AAC5F,QAAM,MAAgB,CAAC;AACvB,aAAW,SAAS,IAAI,MAAO,KAAI,KAAK,YAAY,IAAI,SAAS,MAAM,KAAK,IAAI,MAAM,EAAE,KAAK,GAAG,CAAC,EAAE;AACnG,aAAW,SAAS,IAAI,YAAY,CAAC,GAAG;AACtC,QAAI,KAAK,YAAY,IAAI,YAAY,MAAM,IAAI,IAAI,OAAO,MAAM,KAAK,CAAC,GAAG,MAAM,SAAS,aAAa,MAAM,QAAQ,IAAI,OAAO,MAAM,KAAK,CAAC,KAAK,EAAE,EAAE;AAAA,EACrJ;AACA,MAAI,IAAI,UAAW,KAAI,KAAK,YAAY,IAAI,YAAY;AACxD,SAAO;AACT;AAEA,SAAS,SAAS,KAAgB,SAAsE;AACtG,UAAQ,IAAI,KAAK;AAAA,IACf,KAAK;AAAA,IAAY,KAAK;AAAU,aAAO,IAAI;AAAA,IAC3C,KAAK;AAAY,aAAO,CAAC,IAAI,UAAU,GAAG,IAAI,MAAM,IAAI,WAAS,MAAM,MAAM,GAAG,GAAI,IAAI,WAAW,IAAI,SAAS,IAAI,WAAS,MAAM,MAAM,IAAI,CAAC,GAAI,GAAI,IAAI,YAAY,CAAC,IAAI,SAAS,IAAI,CAAC,CAAE;AAAA,IAC3L,KAAK;AAAA,IAAQ,KAAK;AAAA,IAAa,KAAK;AAAA,IAAY,KAAK;AAAA,IAAW,KAAK;AAAA,IAAa,KAAK;AAAA,IAAU,KAAK;AAAA,IAAS,KAAK;AAAA,IAAQ,KAAK;AAAA,IAAS,KAAK;AAAA,IAAS,KAAK;AAAA,IAAW,KAAK;AAAA,IAAO,KAAK;AAAA,IAAQ,KAAK;AAAA,IAAQ,KAAK;AAAA,IAAS,KAAK;AAAA,IAAa,KAAK;AAAA,IAAW,KAAK;AAAA,IAAW,KAAK;AAAU,aAAO,YAAY,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC;AAAA,IACtU,KAAK;AAAS,aAAO,CAAC,IAAI,QAAQ,IAAI,SAAS;AAAA,IAC/C,KAAK;AAAU,aAAO,CAAC,IAAI,UAAU,GAAG,IAAI,IAAI;AAAA,IAChD,KAAK,QAAQ;AACX,UAAI;AACJ,UAAI;AAAE,mBAAW,IAAI,MAAM;AAAA,MAAE,SAAS,GAAG;AAMvC,0BAAkB;AAAA,UAChB,MAAM;AAAA,UACN,UAAU;AAAA,UACV,OAAO;AAAA,UACP,SAAS,2BAA4B,EAAY,OAAO;AAAA,UACxD,YAAY;AAAA,UAGZ,WAAW;AAAA,QACb,CAAC;AACD,eAAO,CAAC;AAAA,MACV;AACA,YAAM,OAAQ,SAA0D;AACxE,aAAO,QAAQ,UAAU,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAE,IAAI,CAAC,QAAQ;AAAA,IAC/D;AAAA,IACA;AAAS,aAAO,CAAC;AAAA,EACnB;AACF;AAKO,SAAS,iBAAiB,OAA6D,SAAoE;AAChK,QAAM,cAAc,oBAAI,IAAuC;AAI/D,QAAM,UAAU,oBAAI,IAA4C;AAChE,QAAM,aAAa,oBAAI,IAA4C;AACnE,QAAM,WAAW,oBAAI,IAAiC;AACtD,QAAM,SAAS,oBAAI,IAA4C;AAC/D,QAAMC,SAAQ,oBAAI,IAAiC;AAKnD,QAAM,cAAc,oBAAI,IAAiC;AACzD,MAAI,SAAS;AACX,eAAW,CAAC,MAAM,MAAM,KAAK,OAAO,QAAQ,OAAO,GAAG;AACpD,kBAAY,IAAI,QAAQ,IAAI;AAC5B,UAAI,OAAO,KAAK,QAAQ,QAAQ;AAC9B,YAAI;AAAE,sBAAY,IAAI,OAAO,KAAK,MAAM,GAAG,IAAI;AAAA,QAAE,QAAQ;AAAA,QAAyC;AAAA,MACpG;AAAA,IACF;AAAA,EACF;AACA,QAAM,OAAO,oBAAI,IAAyB;AAC1C,QAAM,QAAQ,CAACC,SAA6B,SAAuB;AACjE,QAAI,KAAK,IAAIA,OAAM,EAAG;AACtB,SAAK,IAAIA,OAAM;AACf,UAAMC,QAAO,YAAY,IAAID,OAAM,KAAMA,QAAwD;AAGjG,QAAIC,UAAS,YAAY,IAAID,OAAM,KAAKA,QAAO,KAAK,QAAQ,SAAS;AACnE,YAAM,KAAK,QAAQC,KAAI;AACvB,kBAAY,IAAI,IAAI,EAAE,IAAI,MAAM,OAAO,CAAC;AACxC,MAAAF,OAAM,IAAIC,SAAQ,EAAE;AAAA,IACtB;AACA,QAAIA,QAAO,KAAK,QAAQ,UAAU;AAChC,YAAM,MAAMA,QAAO,KAAK,QAAQ,IAAI,CAAC,GAAG,UAAU,UAAU,IAAI,QAAQ,KAAK,EAAE;AAC/E,cAAQ,IAAIA,SAAQ,GAAG;AACvB,UAAI,QAAQ,QAAM,YAAY,IAAI,IAAI,EAAE,IAAI,MAAM,aAAa,CAAC,CAAC;AAAA,IACnE;AACA,QAAIA,QAAO,KAAK,QAAQ,YAAY;AAClC,YAAM,MAAM,eAAeA,QAAO,MAAM,IAAI;AAC5C,iBAAW,IAAIA,SAAQ,GAAG;AAC1B,UAAI,QAAQ,QAAM,YAAY,IAAI,IAAI,EAAE,IAAI,MAAM,eAAe,CAAC,CAAC;AAAA,IACrE;AACA,QAAIA,QAAO,KAAK,QAAQ,UAAW,UAAS,IAAIA,SAAQ,WAAW,IAAI,EAAE;AACzE,QAAIA,QAAO,KAAK,QAAQ,SAAS;AAC/B,YAAM,KAAK,SAAS,IAAI;AACxB,aAAO,IAAIA,SAAQ,CAAC,EAAE,CAAC;AACvB,kBAAY,IAAI,IAAI,EAAE,IAAI,MAAM,QAAQ,CAAC;AAAA,IAC3C;AACA,aAASA,QAAO,MAAM,OAAO,EAAE,QAAQ,CAAC,OAAO,UAAU,MAAM,OAAO,GAAG,IAAI,IAAIA,QAAO,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;AAAA,EAC9G;AACA,QAAM,QAAQ,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AACnD,aAAW,QAAQ,OAAO;AAKxB,UAAM,MAAM,YAAY,IAAI,IAAI,KAAM,KAAsD,aAAa,OAAO;AAAA,EAClH;AACA,SAAO,EAAE,aAAa,CAAC,GAAG,YAAY,OAAO,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,GAAG,cAAc,EAAE,EAAE,CAAC,GAAG,SAAS,YAAY,UAAU,QAAQ,OAAAD,OAAM;AACzI;;;ACrDO,IAAM,eAAe,CAAC,MAAqB,EAAE,SAAS,KAAK,EAAE,OAAO,GAAG,EAAE,IAAI,WAAM,EAAE,IAAI;AAyShG,IAAMG,cAAa,CAAC,MACjB,EAAwC;AAI3C,IAAM,QAAQ,CAAC,KAAyB,OACtC,QAAQ,OAAO,OAAO,aAAa,OAAO,EAAE,IAAI;AAGlD,SAAS,WAAW,GAAwB,GAAsB;AAChE,UAAQ,EAAE,KAAK;AAAA,IACb,KAAK;AAAa,aAAO,YAAgB,EAAE,KAAK,KAAS,EAAE,eAAe;AAAA,IAC1E,KAAK;AAAa,aAAO,UAAc,EAAE,MAAM,KAAS,EAAE,KAAK;AAAA,IAC/D,KAAK;AAAa,aAAO,aAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,GAAQ,CAAC,KAAS,EAAE,eAAe,KAAS,EAAE,YAAY,EAAE;AAAA,IACxH,KAAK,QAAQ;AACX,YAAM,IAAIA,YAAW,CAAC;AACtB,aAAO,MAAM,SAAY,SAAa,OAAO,CAAC,CAAC,KAAK,QAAY,CAAC;AAAA,IACnE;AAAA,IACA,KAAK;AAAa,aAAO,UAAc,EAAE,KAAK;AAAA,IAC9C,KAAK;AAAa,aAAO,UAAc,EAAE,IAAI;AAAA,IAC7C,KAAK;AAAa,aAAO,SAAa,EAAE,QAAQ,EAAE,KAAS,EAAE,WAAW,IAAI,KAAS,EAAE,aAAa,IAAI,KAAS,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC;AAAA,IAC3I,KAAK;AAAa,aAAO,cAAkB,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,KAAS,EAAE,oBAAoB,IAAI;AAAA,IAClG,KAAK;AAAa,aAAO,SAAa,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;AAAA,IAC1D,KAAK;AAAA,IAAQ,KAAK;AAAa,aAAO,GAAG,EAAE,GAAG,KAAS,EAAE,GAAG,KAAS,EAAE,OAAO,EAAE;AAAA,IAChF,KAAK;AAAa,aAAO,UAAc,EAAE,GAAG,KAAS,EAAE,OAAO,EAAE,KAAS,EAAE,YAAY,EAAE;AAAA,IACzF,KAAK;AAAa,aAAO,aAAiB,EAAE,MAAM,IAAI,OAAK,KAAK,UAAU,EAAE,IAAI,CAAC,EAAE,KAAK,GAAQ,CAAC,KAAS,EAAE,cAAc,MAAS;AAAA,IACnI,KAAK;AAAa,aAAO,WAAe,EAAE,SAAS,EAAE,KAAS,EAAE,SAAS,KAAK,GAAQ,CAAC;AAAA,IACvF,KAAK;AAAa,aAAO,WAAe,EAAE,GAAG,KAAS,EAAE,KAAK;AAAA,IAC7D,KAAK;AAAa,aAAO,UAAc,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC;AAAA,IACpE,KAAK;AAAa,aAAO,cAAkB,EAAE,QAAQ,KAAS,EAAE,QAAQ,EAAE,MAAM,KAAK,GAAG,IAAI,EAAE;AAAA,IAC9F,KAAK;AAAa,aAAO,YAAgB,EAAE,YAAY,SAAS,EAAE,KAAK,CAAC;AAAA,IACxE,KAAK;AAAa,aAAO,YAAgB,EAAE,gBAAgB,IAAI,KAAS,EAAE,kBAAkB,IAAI,KAAS,EAAE,UAAU;AAAA,IACrH;AAAkB,aAAO,EAAE;AAAA,EAC7B;AACF;AAEA,SAAS,SAAS,GAAoB;AACpC,MAAI;AAAE,WAAO,KAAK,UAAU,CAAC,KAAK,OAAO,CAAC;AAAA,EAAE,QAAQ;AAAE,WAAO;AAAA,EAAI;AACnE;AAEA,IAAI,cAAc;AAIlB,IAAI;AAGJ,SAAS,OAAO,GAAmB;AACjC,QAAM,MAAM,YAAY,oBAAI,IAAoB;AAChD,MAAI,KAAK,IAAI,IAAI,CAAC;AAClB,MAAI,OAAO,QAAW;AAAE,SAAK,EAAE;AAAa,QAAI,IAAI,GAAG,EAAE;AAAA,EAAE;AAC3D,SAAO;AACT;AAOA,IAAM,WAAN,MAAe;AAAA,EACI,MAAM,oBAAI,IAAoB;AAAA,EACtC;AAAA,EACT,cAAc;AAAE,SAAK,OAAO,KAAK,GAAG,UAAkB;AAAA,EAAE;AAAA,EACxD,GAAG,KAAqB;AACtB,QAAI,KAAK,KAAK,IAAI,IAAI,GAAG;AACzB,QAAI,OAAO,QAAW;AAAE,WAAK,KAAK,IAAI;AAAM,WAAK,IAAI,IAAI,KAAK,EAAE;AAAA,IAAE;AAClE,WAAO;AAAA,EACT;AACF;AAIA,IAAM,aAAa;AAGnB,SAAS,OAAO,GAAwB,QAAQ,GAAW;AACzD,QAAM,IAAI,EAAE;AACZ,QAAM,OAAOA,YAAW,CAAC;AACzB,UAAQ,EAAE,KAAK;AAAA,IACb,KAAK;AAAW,aAAO,YAAY,EAAE,KAAK;AAAA,IAC1C,KAAK;AAAS,aAAO,UAAU,EAAE,MAAM,IAAI,EAAE,KAAK;AAAA,IAClD,KAAK;AAAY,aAAO,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,IAAI,OAAK,IAAI,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC,GAAG,EAAE,MAAM,SAAS,IAAI,aAAQ,EAAE;AAAA,IAC7H,KAAK;AAAQ,aAAO,KAAK,QAAQ,GAAG;AAAA,IACpC,KAAK;AAAS,aAAO;AAAA,IACrB,KAAK;AAAa,aAAO,GAAG,EAAE,QAAQ;AAAA,IACtC;AAAS;AAAA,EACX;AACA,MAAI,SAAS,EAAG,QAAO,GAAG,EAAE,GAAG;AAC/B,QAAM,OAAO,WAAW,CAAC,EAAE,IAAI,OAAK,OAAO,GAAG,QAAQ,CAAC,CAAC;AACxD,UAAQ,EAAE,KAAK;AAAA,IACb,KAAK;AAAY,aAAO,YAAY,KAAK,KAAK,IAAI,CAAC;AAAA,IACnD,KAAK;AAAU,aAAO,UAAU,KAAK,KAAK,IAAI,CAAC;AAAA,IAC/C,KAAK,YAAY;AACf,YAAM,OAAO,EAAE,MAAM,IAAI,CAAC,GAAG,MAAM,SAAS,EAAE,KAAK,IAAI,OAAK,KAAK,UAAU,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,EAAE,GAAG;AACnH,UAAI,EAAE,cAAc,OAAW,MAAK,KAAK,aAAa,KAAK,KAAK,SAAS,CAAC,KAAK,EAAE,GAAG;AACpF,aAAO,YAAY,KAAK,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,IAAI,CAAC;AAAA,IACtD;AAAA,IACA,KAAK;AAAQ,aAAO,QAAQ,EAAE,OAAO,IAAI,EAAE,IAAI,QAAQ,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE;AAAA,IACzE,KAAK;AAAS,aAAO,UAAU,EAAE,KAAK,MAAM,KAAK,CAAC,KAAK,EAAE;AAAA,IACzD,KAAK;AAAS,aAAO,UAAU,EAAE,IAAI,MAAM,KAAK,CAAC,KAAK,EAAE;AAAA,IACxD,KAAK;AAAQ,aAAO,QAAQ,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,KAAK,EAAE,QAAQ,SAAY,KAAK,YAAY,EAAE,GAAG,GAAG,EAAE,QAAQ,SAAY,KAAK,UAAU,EAAE,GAAG,EAAE,IAAI;AAAA,IAC1J,KAAK;AAAa,aAAO,aAAa,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,KAAK,EAAE,QAAQ,SAAY,KAAK,YAAY,EAAE,GAAG,GAAG,EAAE,QAAQ,SAAY,KAAK,UAAU,EAAE,GAAG,EAAE,IAAI;AAAA,IACpK,KAAK;AAAS,aAAO,SAAS,KAAK,CAAC,KAAK,EAAE,KAAK,KAAK,CAAC,KAAK,EAAE;AAAA,IAC7D;AAAS,aAAO,GAAG,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,CAAC;AAAA,EAC7C;AACF;AAEA,IAAM,QAAQ,CAAC,MAAuB,EAAE,UAAU,aAAa,IAAI,GAAG,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC;AAGhG,SAAS,QAAQ,GAAc,OAAuB;AACpD,UAAQ,EAAE,KAAK;AAAA,IACb,KAAK;AAAY,aAAO,OAAO,KAAK;AAAA,IACpC,KAAK;AAAU,aAAO,UAAU,KAAK;AAAA,IACrC,KAAK;AACH,UAAI,UAAU,EAAG,QAAO;AACxB,UAAI,SAAS,EAAE,MAAM,OAAQ,QAAO,iBAAiB,QAAQ,CAAC;AAC9D,aAAO;AAAA,IACT,KAAK;AAAQ,aAAO,QAAQ,EAAE,QAAQ,EAAE;AAAA,IACxC,KAAK;AAAS,aAAO,SAAS,EAAE,KAAK;AAAA,IACrC,KAAK;AAAS,aAAO,SAAS,EAAE,IAAI;AAAA,IACpC,KAAK;AAAS,aAAO,UAAU,IAAI,eAAe;AAAA,IAClD,KAAK;AAAW,aAAO,UAAU,IAAI,iBAAiB;AAAA,IACtD,KAAK;AAAU,aAAO,UAAU,IAAI,oBAAoB,eAAe,QAAQ,CAAC;AAAA,IAChF;AAAS,aAAO,EAAE;AAAA,EACpB;AACF;AASO,SAAS,kBAAkB,KAAyB;AACzD,QAAM,MAAkB,CAAC;AAEzB,QAAM,QAAiB,CAAC,EAAE,UAAU,CAAC,GAAG,MAAM,EAAE,CAAC;AACjD,MAAI,IAAI;AACR,SAAO,IAAI,IAAI,QAAQ;AACrB,UAAM,IAAI,IAAI,CAAC;AACf,QAAI,MAAM,MAAM;AAAE,WAAK;AAAG;AAAA,IAAS;AACnC,QAAI,MAAM,KAAK;AACb,UAAI,IAAI,IAAI;AACZ,UAAI,IAAI,CAAC,MAAM,IAAK;AACpB,UAAI,IAAI,CAAC,MAAM,IAAK;AACpB,aAAO,IAAI,IAAI,UAAU,IAAI,CAAC,MAAM,KAAK;AAAE,YAAI,IAAI,CAAC,MAAM,KAAM;AAAK;AAAA,MAAI;AACzE,UAAI,IAAI;AACR;AAAA,IACF;AACA,QAAI,MAAM,KAAK;AACb,UAAI,OAAO,IAAI;AACf,UAAI,IAAI,IAAI,MAAM,KAAK;AACrB,cAAM,OAAO,IAAI,MAAM,IAAI;AAC3B,cAAM,IAAI,6BAA6B,KAAK,IAAI;AAChD,gBAAQ,IAAI,EAAE,CAAC,EAAE,SAAS;AAAA,MAC5B;AACA,YAAM,KAAK,EAAE,UAAU,CAAC,GAAG,MAAM,KAAK,CAAC;AACvC,UAAI;AACJ;AAAA,IACF;AACA,QAAI,MAAM,KAAK;AACb,YAAM,MAAM,MAAM,IAAI;AACtB,UAAI,QAAQ,QAAW;AACrB,YAAI,SAAS,KAAK,IAAI,MAAM,IAAI,MAAM,CAAC,CAAC;AACxC,YAAI,IAAI,SAAS,UAAU,EAAG,KAAI,KAAK,IAAI,QAAQ;AAAA,MACrD;AACA;AACA;AAAA,IACF;AACA,QAAI,MAAM,KAAK;AACb,YAAM,MAAM,MAAM,MAAM,SAAS,CAAC;AAClC,UAAI,SAAS,KAAK,IAAI,MAAM,IAAI,MAAM,CAAC,CAAC;AACxC,UAAI,OAAO,IAAI;AACf;AACA;AAAA,IACF;AACA;AAAA,EACF;AACA,QAAM,OAAO,MAAM,CAAC;AACpB,OAAK,SAAS,KAAK,IAAI,MAAM,KAAK,IAAI,CAAC;AACvC,MAAI,KAAK,SAAS,UAAU,EAAG,KAAI,KAAK,KAAK,QAAQ;AACrD,SAAO;AACT;AAOA,IAAM,cAAc;AACpB,IAAM,WAAW,IAAI,OAAO,IAAI,WAAW,SAAS,WAAW,KAAK;AAQpE,IAAM,uBAAuB;AAoBtB,SAAS,kBAAkB,QAAqE;AACrG,MAAI,IAAI;AACR,MAAI,EAAE,WAAW,GAAG,EAAG,KAAI,EAAE,MAAM,CAAC;AAGpC,MAAI,EAAE,QAAQ,uBAAuB,EAAE;AACvC,MAAI,WAA0B;AAE9B,QAAM,OAAO,+BAA+B,KAAK,CAAC;AAClD,MAAI,SAAS,MAAM;AACjB,UAAM,MAAM,KAAK,CAAC;AAQlB,QAAI,QAAQ,UAAa,IAAI,WAAW,GAAG,EAAG,QAAO;AACrD,eAAW,OAAO;AAClB,QAAI,EAAE,MAAM,GAAG,KAAK,KAAK;AAAA,EAC3B;AAEA,QAAM,UAAU,oBAAoB,KAAK,CAAC;AAC1C,MAAI,YAAY,KAAM,KAAI,QAAQ,CAAC;AACnC,MAAI,EAAE,SAAS,GAAG,EAAG,KAAI,EAAE,MAAM,GAAG,EAAE;AACtC,MAAI,CAAC,SAAS,KAAK,CAAC,EAAG,QAAO;AAC9B,QAAM,QAAQ,EAAE,MAAM,GAAG;AACzB,MAAI,aAAa,QAAQ,MAAM,SAAS,qBAAsB,QAAO;AACrE,SAAO,EAAE,OAAO,SAAS;AAC3B;AAGA,SAAS,gBAAgB,UAAkBC,KAAqB;AAC9D,QAAM,KAAKA,IAAG,YAAY,CAAC;AAC3B,aAAW,KAAK,iBAAiB,QAAQ,GAAG;AAC1C,QAAI,MAAM,OAAO;AAAE,UAAI,eAAe,KAAKA,GAAE,EAAG,QAAO;AAAM;AAAA,IAAS;AACtE,QAAI,MAAM,OAAO;AAAE,UAAI,QAAQ,KAAKA,GAAE,EAAG,QAAO;AAAM;AAAA,IAAS;AAC/D,QAAI,MAAM,OAAO;AAAE,UAAI,KAAK,KAAKA,GAAE,EAAG,QAAO;AAAM;AAAA,IAAS;AAC5D,UAAM,QAAQ,0CAA0C,KAAK,CAAC;AAC9D,QAAI,UAAU,MAAM;AAClB,YAAM,MAAM,CAACC,OAAuBA,GAAE,WAAW,KAAK,IAAI,SAASA,GAAE,MAAM,CAAC,GAAG,EAAE,IAAIA,GAAE,YAAY,CAAC;AACpG,UAAI,MAAM,IAAI,MAAM,CAAC,CAAE,KAAK,MAAM,IAAI,MAAM,CAAC,CAAE,EAAG,QAAO;AACzD;AAAA,IACF;AACA,QAAI,MAAMD,IAAI,QAAO;AAAA,EACvB;AACA,SAAO;AACT;AAYO,SAAS,0BACd,OACA,UAC+E;AAC/E,QAAM,MAAqF,CAAC;AAC5F,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,aAAS,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACzC,YAAM,IAAI,MAAM,CAAC,GAAI,IAAI,MAAM,CAAC;AAChC,UAAI,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,WAAW,CAAC,EAAG;AAC9C,YAAM,KAAK,EAAE,EAAE,MAAM;AACrB,UAAI,KAAK,EAAE,SAAS,GAAG,QAAQ,GAAG,IAAI,mBAAmB,aAAa,QAAQ,gBAAgB,UAAU,EAAE,EAAE,CAAC;AAAA,IAC/G;AAAA,EACF;AACA,SAAO;AACT;AAIO,SAAS,mBACd,OACA,MACmB;AACnB,SAAO,wBAAwB,CAAC,CAACD,YAAW,KAAK,KAAK,MAAM,aAAa,WAAW,KAAK,CAAC,GAAG,IAAI;AACnG;AA8BA,SAAS,iBAAiB,SAAsE;AAC9F,aAAW,CAAC,MAAMG,KAAI,KAAK,SAAS;AAClC,UAAM,MAAOA,OAAgD;AAC7D,QAAI,QAAQ,QAAQ,OAAO,QAAQ,YAAY,OAAQ,IAA0B,QAAQ,SAAU;AACnG,UAAM,IAAI;AAAA,MACR,kCAAkC,IAAI;AAAA,IAKxC;AAAA,EACF;AACF;AAEO,SAAS,wBACd,SACA,MACmB;AACnB,mBAAiB,OAAO;AACxB,QAAM,UAAU,MAAM,WAAW;AACjC,QAAM,cAAc,MAAM,eAAe;AACzC,QAAM,WAAW,IAAI,SAAS;AAE9B,QAAM,aAAa,oBAAI,IAAiC;AACxD,QAAM,YAAY,oBAAI,IAAiC;AAEvD,QAAM,UAAU,CAAC,MAAmC;AAClD,UAAM,MAAM,WAAW,IAAI,CAAC;AAC5B,QAAI,QAAQ,OAAW,QAAO;AAC9B,UAAM,IAAI,EAAE;AAGZ,eAAW,IAAI,GAAG,SAAS,IAAI;AAC/B,UAAM,OAAO,WAAW,CAAC;AACzB,UAAM,KAAK,SAAS,GAAG,GAAG,WAAW,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,OAAO,EAAE,KAAK,GAAG,CAAC,EAAE;AAC3E,eAAW,IAAI,GAAG,EAAE;AACpB,WAAO;AAAA,EACT;AACA,QAAM,SAAS,CAAC,MAAmC;AACjD,UAAM,MAAM,UAAU,IAAI,CAAC;AAC3B,QAAI,QAAQ,OAAW,QAAO;AAC9B,cAAU,IAAI,GAAG,CAAC;AAClB,QAAI,IAAI;AACR,eAAW,KAAK,WAAW,EAAE,IAAiB,EAAG,MAAK,OAAO,CAAC;AAC9D,cAAU,IAAI,GAAG,CAAC;AAClB,WAAO;AAAA,EACT;AAGA,QAAM,UAAU,oBAAI,IAAkC;AACtD,QAAM,QAAQ,CAAC,GAAwBA,OAAc,MAAc,eAA8B,qBAAoC;AACnI,QAAI,QAAQ,IAAI,CAAC,EAAG;AACpB,UAAM,IAAI,EAAE;AACZ,UAAM,MAAMH,YAAW,CAAC;AACxB,UAAM,OAAO,QAAQ,UAAa,QAAQG,QAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,EAAE,MAAAA,OAAM,KAAK;AACxF,YAAQ,IAAI,GAAG,EAAE,GAAG,GAAG,MAAM,MAAM,OAAO,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,eAAe,iBAAiB,CAAC;AACxG,UAAM,QAAQ,EAAE,QAAQ,SAAS,EAAE,QAAQ,gBAAgB;AAC3D,UAAM,eAAe,oBACf,EAAE,QAAQ,WAAW,EAAE,UAAU,UAAa,EAAE,aAAa,WAC9D,EAAE,QAAQ,eAAe,EAAE,QAAQ;AACxC,UAAM,OAAO,WAAW,CAAC;AACzB,SAAK,QAAQ,CAAC,GAAG,MAAM;AACrB,YAAM,MAAM,QAAQ,GAAG,CAAC;AACxB,YAAM,GAAG,KAAK,MAAM,KAAK,SAAS,KAAK,MAAM,GAAG,KAAK,IAAI,WAAM,GAAG,IAAI,OAAO,YAAY;AAAA,IAC3F,CAAC;AAGD,QAAI,EAAE,QAAQ,QAAQ;AACpB,UAAI;AACF,cAAM,SAAU,EAAuC,MAAM;AAC7D,cAAM,QAAQH,YAAW,MAAM,KAAKA,YAAW,CAAC,KAAK,KAAK,MAAM,IAAI,MAAM,KAAK;AAAA,MACjF,QAAQ;AAAA,MAAuC;AAAA,IACjD;AAAA,EACF;AACA,aAAW,CAAC,MAAM,IAAI,KAAK,QAAS,OAAM,MAAMA,YAAW,IAAI,KAAK,MAAM,IAAI,MAAM,KAAK;AAEzF,QAAM,SAAS,IAAI,IAAI,MAAM,UAAU,CAAC,CAAC;AACzC,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,OAAO,CAA2B,MAAkB;AACxD,QAAI,CAAC,OAAO,IAAI,EAAE,EAAE,EAAG,QAAO;AAC9B,SAAK,IAAI,EAAE,EAAE;AACb,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,oBAAoB,SAAS,OAAO;AACvD,QAAM,iBAAiB,mBAAmB,SAAS,UAAU,SAAS,OAAO;AAC7E,QAAM,iBAAiB,mBAAmB,OAAO;AACjD,QAAM,eAAe,iBAAiB,OAAO;AAC7C,QAAM,WAAW,aAAa,SAAS,SAAS,MAAM,UAAU;AAChE,QAAM,WAAW,aAAa,SAAS,OAAO;AAC9C,QAAM,iBAAiB,mBAAmB,SAAS,OAAO;AAC1D,QAAM,gBAAgB,kBAAkB,SAAS,MAAM,UAAU;AACjE,QAAM,iBAAiB,mBAAmB,OAAO;AAQjD,QAAM,UAAU,CAA6E,OAAyB;AACpH,UAAM,UAAU,oBAAI,IAAyB;AAC7C,UAAM,YAAY,oBAAI,IAAY;AAClC,eAAW,KAAK,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG;AAC7D,UAAI,EAAE,SAAS,MAAM,OAAK,QAAQ,IAAI,CAAC,CAAC,EAAG;AAC3C,gBAAU,IAAI,EAAE,EAAE;AAClB,iBAAW,KAAK,EAAE,SAAU,aAAY,GAAG,OAAO;AAAA,IACpD;AACA,WAAO;AAAA,EACT;AACA,QAAM,iBAAiB,QAAQ,UAAU;AACzC,QAAM,gBAAgB,QAAQ,cAAc;AAE5C,QAAM,SAA4B;AAAA,IAChC,YAAY,WAAW,OAAO,OAAK,eAAe,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,IAAI,YAAY;AAAA,IAChH,gBAAgB,eAAe,OAAO,OAAK,cAAc,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,IAAI,YAAY;AAAA,IACvH,gBAAgB,eAAe,OAAO,IAAI,EAAE,MAAM,GAAG,WAAW;AAAA,IAChE,cAAc,aAAa,OAAO,IAAI,EAAE,MAAM,GAAG,WAAW;AAAA,IAC5D,UAAU,SAAS,OAAO,IAAI,EAAE,MAAM,GAAG,WAAW;AAAA,IACpD,UAAU,SAAS,OAAO,IAAI,EAAE,MAAM,GAAG,WAAW;AAAA,IACpD,gBAAgB,eAAe,OAAO,IAAI,EAAE,MAAM,GAAG,WAAW;AAAA,IAChE,eAAe,cAAc,OAAO,IAAI,EAAE,MAAM,GAAG,WAAW;AAAA,IAC9D,gBAAgB,eAAe,OAAO,IAAI,EAAE,MAAM,GAAG,WAAW;AAAA,IAChE,gBAAgB,CAAC,GAAG,MAAM,EAAE,OAAO,QAAM,CAAC,KAAK,IAAI,EAAE,CAAC;AAAA,IACtD,OAAO,EAAE,OAAO,QAAQ,QAAQ,OAAO,QAAQ,MAAM,QAAQ,IAAI,IAAI,CAAC,GAAG,QAAQ,OAAO,CAAC,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC,EAAE,KAAK;AAAA,EACrH;AACA,SAAO;AACT;AAEA,SAAS,YAAY,GAAwB,MAAsC;AACjF,MAAI,KAAK,IAAI,CAAC,EAAG;AACjB,OAAK,IAAI,CAAC;AACV,aAAW,KAAK,WAAW,EAAE,IAAiB,EAAG,aAAY,GAAG,IAAI;AACtE;AAGA,IAAM,eAAe,CAAmB,MAAyB;AAC/D,QAAM,EAAE,UAAU,GAAG,KAAK,IAAI;AAC9B,OAAK;AACL,SAAO;AACT;AAIA,SAAS,oBACP,SACA,SACiC;AACjC,QAAM,UAAU,oBAAI,IAAuB;AAC3C,aAAW,KAAK,QAAQ,OAAO,GAAG;AAChC,QAAI,EAAE,OAAO,QAAS;AACtB,UAAM,OAAO,QAAQ,IAAI,EAAE,KAAK;AAChC,QAAI,SAAS,OAAW,SAAQ,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;AAAA,QAAQ,MAAK,KAAK,CAAC;AAAA,EACrE;AACA,QAAM,MAAuC,CAAC;AAC9C,aAAW,SAAS,QAAQ,OAAO,GAAG;AACpC,QAAI,MAAM,SAAS,EAAG;AACtB,UAAM,OAAO,MAAM,CAAC,EAAG;AACvB,QAAI,KAAK;AAAA,MACP,MAAM;AAAA,MACN,IAAI,mBAAmB,aAAa,MAAM,CAAC,EAAG,IAAI,CAAC;AAAA,MACnD;AAAA,MACA,OAAO,MAAM;AAAA,MACb,UAAU,MAAM,SAAS,KAAK;AAAA,MAC9B,OAAO,MAAM,OAAO,MAAM,CAAC,EAAG,CAAC,CAAC;AAAA,MAChC,OAAO,MAAM,IAAI,OAAK,EAAE,IAAI;AAAA,MAC5B,YAAY,GAAG,MAAM,MAAM,4CAA4C,IAAI,iFAA4E,MAAM,SAAS,KAAK,IAAI,+DAA+D,MAAM,MAAM;AAAA,MAC1P,UAAU,MAAM,IAAI,OAAK,EAAE,CAAC;AAAA,IAC9B,CAAC;AAAA,EACH;AACA,SAAO,IAAI,KAAK,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,OAAO;AACjD;AAaA,SAAS,mBACP,SACA,UACA,SACA,SACqC;AACrC,QAAM,YAAY,oBAAI,IAAmC;AACzD,QAAM,UAAU,CAAC,MAAqC;AACpD,UAAM,MAAM,UAAU,IAAI,CAAC;AAC3B,QAAI,QAAQ,OAAW,QAAO;AAC9B,cAAU,IAAI,GAAG,CAAC,CAAC;AACnB,UAAM,IAAI,EAAE;AACZ,UAAM,OAAO,WAAW,CAAC;AACzB,UAAM,YAAY,KAAK,IAAI,OAAO;AAClC,UAAM,UAAU,WAAW,GAAG,CAAC;AAC/B,UAAMI,OAAgB,CAAC;AACvB,SAAK,QAAQ,CAAC,GAAG,MAAM;AACrB,iBAAW,SAAS,CAAC,SAAS,MAAM,GAAG,QAAQ,CAAC,CAAC,GAAG;AAClD,cAAM,MAAM,UAAU,MAAM;AAC5B,YAAI,CAAC,IAAI;AACT,QAAAA,KAAI,KAAK,SAAS,GAAG,GAAG,OAAO,IAAI,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;AAAA,MACrD;AAAA,IACF,CAAC;AACD,cAAU,IAAI,GAAGA,IAAG;AACpB,WAAOA;AAAA,EACT;AAEA,QAAM,SAAS,oBAAI,IAAuB;AAC1C,aAAW,KAAK,QAAQ,OAAO,GAAG;AAChC,QAAI,EAAE,OAAO,QAAS;AACtB,eAAW,KAAK,QAAQ,EAAE,CAAC,GAAG;AAC5B,YAAM,OAAO,OAAO,IAAI,CAAC;AACzB,UAAI,SAAS,OAAW,QAAO,IAAI,GAAG,CAAC,CAAC,CAAC;AAAA,UAAQ,MAAK,KAAK,CAAC;AAAA,IAC9D;AAAA,EACF;AAEA,QAAM,MAA2C,CAAC;AAClD,QAAM,aAAa,oBAAI,IAAY;AACnC,aAAW,SAAS,OAAO,OAAO,GAAG;AACnC,QAAI,MAAM,SAAS,EAAG;AAEtB,UAAM,SAAS,IAAI,IAAI,MAAM,IAAI,OAAK,EAAE,KAAK,CAAC;AAC9C,QAAI,OAAO,OAAO,EAAG;AAGrB,UAAM,WAAW,oBAAI,IAAqB;AAC1C,eAAW,KAAK,MAAO,KAAI,CAAC,SAAS,IAAI,EAAE,KAAK,EAAG,UAAS,IAAI,EAAE,OAAO,CAAC;AAC1E,UAAM,UAAU,CAAC,GAAG,SAAS,OAAO,CAAC;AACrC,UAAM,MAAM,QAAQ,IAAI,OAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,EAAE,KAAK,GAAG;AACpE,QAAI,WAAW,IAAI,GAAG,EAAG;AACzB,eAAW,IAAI,GAAG;AAClB,UAAM,OAAO,kBAAkB,QAAQ,IAAI,OAAK,EAAE,CAAC,GAAG,OAAO;AAC7D,QAAI,SAAS,KAAM;AACnB,UAAM,aAAa,KAAK,IAAI,GAAG,QAAQ,IAAI,OAAK,EAAE,IAAI,CAAC,IAAI,KAAK;AAChE,QAAI,aAAa,QAAS;AAC1B,QAAI,KAAK;AAAA,MACP,MAAM;AAAA,MACN,IAAI,kBAAkB,aAAa,QAAQ,CAAC,EAAG,IAAI,CAAC;AAAA,MACpD;AAAA,MACA,OAAO,QAAQ;AAAA,MACf,UAAU,QAAQ,SAAS,KAAK;AAAA,MAChC,OAAO,MAAM,eAAe,QAAQ,CAAC,EAAG,GAAG,KAAK,IAAI,CAAC;AAAA,MACrD,UAAU,KAAK,KAAK,IAAI,CAAC,GAAG,MAAM,QAAQ,KAAK,KAAK,CAAC,GAAI,CAAC,CAAC,EAAE,KAAK,UAAK;AAAA,MACvE,UAAU,KAAK,SAAS,IAAI,OAAK,MAAM,OAAO,CAAC,CAAC,CAAC;AAAA,MACjD,OAAO,QAAQ,IAAI,OAAK,EAAE,IAAI;AAAA,MAC9B,YAAY,GAAG,QAAQ,MAAM,2BAA2B,UAAU,0CAA0C,KAAK,KAAK,IAAI,CAAC,GAAG,MAAM,QAAQ,KAAK,KAAK,CAAC,GAAI,CAAC,CAAC,EAAE,KAAK,UAAK,CAAC,+DAA+D,KAAK,SAAS,IAAI,OAAK,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,kBAAa,QAAQ,MAAM;AAAA,MAC1T,UAAU,QAAQ,IAAI,OAAK,EAAE,CAAC;AAAA,IAChC,CAAC;AAAA,EACH;AACA,SAAO,IAAI,KAAK,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,OAAO;AACjD;AAGA,SAAS,kBACP,SACA,SACiG;AACjG,QAAM,OAAiB,CAAC;AACxB,QAAM,OAAoB,CAAC;AAC3B,MAAI,MAAM,CAAC,GAAG,OAAO;AACrB,WAAS,QAAQ,GAAG,QAAQ,IAAI,SAAS;AACvC,UAAM,KAAK,IAAI,CAAC,EAAG;AACnB,UAAM,WAAW,IAAI,IAAI,OAAK,WAAW,EAAE,IAAiB,CAAC;AAC7D,UAAM,QAAQ,SAAS,CAAC,EAAG;AAC3B,QAAI,SAAS,KAAK,OAAK,EAAE,WAAW,KAAK,KAAK,UAAU,EAAG;AAC3D,UAAM,OAAiB,CAAC;AACxB,aAASC,KAAI,GAAGA,KAAI,OAAOA,MAAK;AAC9B,YAAM,IAAI,QAAQ,SAAS,CAAC,EAAGA,EAAC,CAAE;AAClC,UAAI,SAAS,KAAK,OAAK,QAAQ,EAAEA,EAAC,CAAE,MAAM,CAAC,EAAG,MAAK,KAAKA,EAAC;AAAA,IAC3D;AACA,QAAI,KAAK,WAAW,EAAG;AACvB,UAAM,IAAI,KAAK,CAAC;AAChB,SAAK,KAAK,CAAC;AACX,SAAK,KAAK,EAAE;AACZ,UAAM,SAAS,IAAI,OAAK,EAAE,CAAC,CAAE;AAG7B,UAAM,YAAY,WAAW,IAAI,CAAC,EAAG,IAAiB,EAAE;AACxD,UAAM,cAAc,IAAI,MAAM,OAAK,WAAW,GAAG,EAAE,IAAiB,MAAM,WAAW,IAAI,CAAC,GAAI,IAAI,CAAC,EAAG,IAAiB,CAAC;AACxH,QAAI,CAAC,eAAe,cAAc,EAAG;AAAA,EACvC;AACA,MAAI,KAAK,WAAW,EAAG,QAAO;AAC9B,MAAI,WAAW;AACf,QAAM,SAAS,CAAC,MAAmC;AACjD,QAAI,IAAI;AACR,eAAW,KAAK,WAAW,EAAE,IAAiB,EAAG,MAAK,OAAO,CAAC;AAC9D,WAAO;AAAA,EACT;AACA,aAAW,KAAK,IAAK,YAAW,KAAK,IAAI,UAAU,OAAO,CAAC,CAAC;AAC5D,SAAO,EAAE,MAAM,MAAM,UAAU,KAAK,SAAS;AAC/C;AAEA,SAAS,eAAe,GAAwB,MAAyB,QAAQ,GAAW;AAC1F,MAAI,UAAU,KAAK,OAAQ,QAAO;AAClC,QAAM,IAAI,EAAE;AACZ,QAAM,OAAO,WAAW,CAAC;AACzB,QAAM,MAAM,KAAK,KAAK;AACtB,QAAM,QAAQ,KAAK,IAAI,CAAC,GAAG,MAAO,MAAM,MAAM,eAAe,GAAG,MAAM,QAAQ,CAAC,IAAI,OAAO,GAAG,CAAC,CAAE;AAChG,UAAQ,EAAE,KAAK;AAAA,IACb,KAAK;AAAY,aAAO,YAAY,MAAM,KAAK,IAAI,CAAC;AAAA,IACpD,KAAK;AAAU,aAAO,UAAU,MAAM,KAAK,IAAI,CAAC;AAAA,IAChD,KAAK;AAAQ,aAAO,QAAQ,EAAE,OAAO,IAAI,EAAE,IAAI,QAAQ,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE;AAAA,IAC1E;AAAS,aAAO,GAAG,EAAE,GAAG,IAAI,MAAM,KAAK,IAAI,CAAC;AAAA,EAC9C;AACF;AAQA,IAAM,UAAU;AAEhB,SAAS,mBAAmB,SAAoE;AAE9F,QAAM,QAAQ,oBAAI,IAAsF;AACxG,aAAW,KAAK,QAAQ,OAAO,GAAG;AAChC,UAAM,IAAI,EAAE;AACZ,QAAI,EAAE,QAAQ,QAAS;AACvB,UAAM,OAAO,oBAAI,IAAY;AAC7B,eAAW,YAAY,kBAAkB,EAAE,MAAM,GAAG;AAClD,UAAI,SAAS,UAAU,EAAG,MAAK,IAAI,SAAS,KAAK,GAAG,CAAC;AACrD,eAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,iBAAS,IAAI,GAAG,KAAK,KAAK,IAAI,SAAS,SAAS,SAAS,CAAC,GAAG,KAAK;AAChE,gBAAM,MAAM,SAAS,MAAM,GAAG,IAAI,CAAC,EAAE,KAAK,GAAG;AAC7C,cAAI,IAAI,SAAS,EAAG;AACpB,eAAK,IAAI,GAAG;AAAA,QACd;AAAA,MACF;AAAA,IACF;AACA,eAAW,OAAO,MAAM;AACtB,UAAI,IAAI,MAAM,IAAI,GAAG;AACrB,UAAI,MAAM,QAAW;AAAE,YAAI,EAAE,KAAK,CAAC,GAAG,OAAO,oBAAI,IAAI,GAAG,UAAU,IAAI,MAAM,GAAG,EAAE,OAAO;AAAG,cAAM,IAAI,KAAK,CAAC;AAAA,MAAE;AAC7G,UAAI,EAAE,MAAM,IAAI,EAAE,CAAC,EAAG;AACtB,QAAE,MAAM,IAAI,EAAE,CAAC;AACf,QAAE,IAAI,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,EAAE,OAAO,CAAC;AAAA,IAC/C;AAAA,EACF;AACA,QAAM,aAAa,CAAC,GAAG,MAAM,QAAQ,CAAC,EACnC,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,UAAU,CAAC,EACnC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,GAAG,UAAU,EAAE,IAAI,SAAS,KAAK,IAAI,OAAO,EAAE,EAIxE,KAAK,CAAC,GAAG,MAAM,EAAE,EAAE,IAAI,SAAS,EAAE,EAAE,IAAI,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,SAAS,EAAE,IAAI,MAAM;AAIzG,QAAM,OAA0B,CAAC;AACjC,aAAW,KAAK,YAAY;AAC1B,QAAI,KAAK,KAAK,OAAK,EAAE,EAAE,IAAI,UAAU,EAAE,EAAE,IAAI,UAAW,IAAI,EAAE,GAAG,IAAK,SAAS,IAAI,EAAE,GAAG,GAAG,CAAC,EAAG;AAC/F,SAAK,KAAK,CAAC;AAAA,EACb;AACA,SAAO,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO;AAAA,IAC/B,MAAM;AAAA,IACN,IAAI,kBAAkB,GAAG;AAAA,IACzB,UAAU;AAAA,IACV,UAAU,EAAE;AAAA,IACZ,OAAO,EAAE,IAAI;AAAA,IACb,UAAU,EAAE,IAAI,SAAS,KAAK,IAAI;AAAA,IAClC,SAAS,EAAE,IAAI,IAAI,OAAK,IAAI,EAAE,MAAM,GAAG;AAAA,IACvC,OAAO,EAAE,IAAI,IAAI,OAAK,EAAE,IAAI;AAAA,IAC5B,YAAY,QAAQ,EAAE,QAAQ,wCAAwC,EAAE,IAAI,MAAM,iPAAkO,EAAE,IAAI,MAAM;AAAA,EAClU,EAAE;AACJ;AASO,SAAS,mBAAmB,KAAuB;AACxD,QAAM,MAAgB,CAAC;AACvB,MAAI,IAAI;AACR,SAAO,IAAI,IAAI,QAAQ;AACrB,UAAM,IAAI,IAAI,CAAC;AACf,QAAI,MAAM,MAAM;AAAE,WAAK;AAAG;AAAA,IAAS;AACnC,QAAI,MAAM,KAAK;AAAE;AAAK;AAAA,IAAS;AAC/B,QAAI,IAAI,IAAI;AACZ,QAAI,IAAI,CAAC,MAAM,IAAK;AACpB,QAAI,IAAI,CAAC,MAAM,IAAK;AACpB,WAAO,IAAI,IAAI,UAAU,IAAI,CAAC,MAAM,KAAK;AAAE,UAAI,IAAI,CAAC,MAAM,KAAM;AAAK;AAAA,IAAI;AACzE,QAAI,KAAK,IAAI,MAAM,IAAI,GAAG,CAAC,CAAC;AAC5B,QAAI,IAAI;AAAA,EACV;AACA,SAAO;AACT;AAQO,SAAS,iBAAiB,MAAwB;AACvD,QAAM,MAAM,CAACJ,QAAuB;AAClC,UAAM,KAAKA,IAAG,YAAY,CAAC;AAC3B,WAAO,MAAM,MAAO,MAAM,GAAG,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,KAAKA;AAAA,EACjE;AACA,QAAM,QAAkB,CAAC;AACzB,MAAI,IAAI;AACR,SAAO,IAAI,KAAK,QAAQ;AACtB,QAAI,KAAK,CAAC,MAAM,MAAM;AAIpB,YAAM,IAAI,iEAAiE,KAAK,KAAK,MAAM,CAAC,CAAC;AAC7F,UAAI,MAAM,MAAM;AACd,cAAM,KAAK,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,GAAI,EAAE;AAC7C,cAAM,KAAK,MAAM,MAAO,MAAM,GAAG,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,KAAK,OAAO,cAAc,EAAE,CAAC;AAC3F,aAAK,EAAE,CAAC,EAAE;AACV;AAAA,MACF;AACA,YAAM,KAAK,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC;AAAG,WAAK;AAAG;AAAA,IAC5C;AACA,UAAM,KAAK,IAAI,KAAK,CAAC,CAAE,CAAC;AAAG;AAAA,EAC7B;AACA,QAAM,UAAoB,CAAC;AAC3B,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,QAAI,IAAI,IAAI,MAAM,UAAU,MAAM,IAAI,CAAC,MAAM,OAAO,MAAM,IAAI,CAAC,MAAM,QAAW;AAC9E,cAAQ,KAAK,GAAG,MAAM,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,CAAC,EAAE;AAC1C,WAAK;AACL;AAAA,IACF;AACA,YAAQ,KAAK,MAAM,CAAC,CAAE;AAAA,EACxB;AACA,SAAO;AACT;AAEA,IAAM,oBAAoB;AAE1B,SAAS,iBAAiB,SAAiE;AAEzF,QAAM,YAAY,oBAAI,IAAsB;AAC5C,aAAW,KAAK,QAAQ,OAAO,GAAG;AAChC,QAAI,EAAE,EAAE,QAAQ,QAAS;AACzB,eAAW,QAAQ,IAAI,IAAI,mBAAmB,EAAE,EAAE,MAAM,CAAC,GAAG;AAC1D,YAAM,UAAU,iBAAiB,IAAI;AACrC,UAAI,QAAQ,SAAS,kBAAmB;AACxC,YAAM,MAAM,CAAC,GAAG,IAAI,IAAI,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,GAAQ;AACtD,UAAI,IAAI,UAAU,IAAI,GAAG;AACzB,UAAI,MAAM,QAAW;AAAE,YAAI,EAAE,QAAQ,MAAM,SAAS,KAAK,OAAO,oBAAI,IAAI,GAAG,OAAO,CAAC,EAAE;AAAG,kBAAU,IAAI,KAAK,CAAC;AAAA,MAAE;AAC9G,UAAI,EAAE,MAAM,IAAI,EAAE,CAAC,EAAG;AACtB,QAAE,MAAM,IAAI,EAAE,CAAC;AACf,QAAE,MAAM,KAAK,EAAE,IAAI;AAAA,IACrB;AAAA,EACF;AAKA,QAAM,YAAY;AAIlB,QAAM,cAAc;AACpB,QAAM,MAAM,CAAC,GAAG,UAAU,OAAO,CAAC;AAClC,QAAM,SAAS,IAAI,IAAI,CAAC,GAAG,MAAM,CAAC;AAClC,QAAM,OAAO,CAAC,MAAsB;AAAE,WAAO,OAAO,CAAC,MAAM,GAAG;AAAE,aAAO,CAAC,IAAI,OAAO,OAAO,CAAC,CAAE;AAAI,UAAI,OAAO,CAAC;AAAA,IAAG;AAAE,WAAO;AAAA,EAAE;AAC3H,QAAMK,SAAQ,CAAC,GAAW,MAAoB;AAAE,UAAM,KAAK,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC;AAAG,QAAI,OAAO,GAAI,QAAO,EAAE,IAAI;AAAA,EAAG;AACjH,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,IAAK,UAAS,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AAE5E,QAAI,IAAI,CAAC,EAAG,QAAQ,SAAS,GAAG,MAAM,IAAI,CAAC,EAAG,QAAQ,SAAS,GAAG,EAAG;AACrE,UAAM,IAAI,IAAI,IAAI,IAAI,CAAC,EAAG,OAAO,GAAG,IAAI,IAAI,IAAI,IAAI,CAAC,EAAG,OAAO;AAC/D,QAAI,SAAS;AACb,eAAW,KAAK,EAAG,KAAI,EAAE,IAAI,CAAC,EAAG;AACjC,UAAM,QAAS,EAAE,OAAO,UAAW,EAAE,OAAO;AAC5C,UAAM,UAAU,UAAU,SAAS;AACnC,QAAI,UAAU,KAAK,QAAQ,KAAK,SAAS,aAAa,WAAW,YAAa,CAAAA,OAAM,GAAG,CAAC;AAAA,EAC1F;AACA,QAAM,WAAW,oBAAI,IAAsB;AAC3C,MAAI,QAAQ,CAAC,GAAG,MAAM;AACpB,UAAM,IAAI,KAAK,CAAC;AAChB,UAAM,OAAO,SAAS,IAAI,CAAC;AAC3B,QAAI,SAAS,OAAW,UAAS,IAAI,GAAG,CAAC,CAAC,CAAC;AAAA,QAAQ,MAAK,KAAK,CAAC;AAAA,EAChE,CAAC;AAED,QAAM,MAA2B,CAAC;AAClC,aAAW,QAAQ,SAAS,OAAO,GAAG;AACpC,UAAM,UAAU,KAAK,IAAI,OAAK,IAAI,CAAC,CAAE,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,MAAM,OAAO,EAAE,MAAM,IAAI;AACjF,UAAM,QAAQ,QAAQ,OAAO,CAAC,GAAG,MAAM,IAAI,EAAE,MAAM,MAAM,CAAC;AAC1D,UAAM,UAAU,QAAQ,SAAS;AACjC,QAAI,CAAC,WAAW,QAAQ,EAAG;AAC3B,UAAM,OAAO,IAAI,IAAI,QAAQ,CAAC,EAAG,OAAO;AACxC,UAAM,WAAgC,QAAQ,IAAI,OAAK;AACrD,YAAM,OAAO,IAAI,IAAI,EAAE,OAAO;AAC9B,YAAM,OAAO,CAAC,GAAG,IAAI,EAAE,OAAO,OAAK,CAAC,KAAK,IAAI,CAAC,CAAC;AAC/C,YAAM,QAAQ,CAAC,GAAG,IAAI,EAAE,OAAO,OAAK,CAAC,KAAK,IAAI,CAAC,CAAC;AAChD,aAAO;AAAA,QACL,QAAQ,EAAE;AAAA,QACV,OAAO,MAAM,QAAQ,CAAC,IAClB,gBACA,GAAG,KAAK,IAAI,OAAK,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,GAAG,KAAK,SAAS,KAAK,MAAM,SAAS,IAAI,MAAM,EAAE,GAAG,MAAM,IAAI,OAAK,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,MAAM;AAAA,QAC1I,OAAO,EAAE,MAAM;AAAA,QACf,OAAO,EAAE;AAAA,MACX;AAAA,IACF,CAAC;AACD,UAAM,aAAa,QAAQ,KAAK,OAAK,EAAE,QAAQ,KAAK,OAAK,EAAE,SAAS,UAAU,CAAC,CAAC;AAChF,QAAI,KAAK;AAAA,MACP,MAAM;AAAA,MACN,IAAI,eAAe,QAAQ,CAAC,EAAG,GAAG;AAAA,MAClC,WAAW,QAAQ,CAAC,EAAG;AAAA,MACvB;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA,YAAY;AAAA,QACV,UACI,GAAG,QAAQ,MAAM,oDAAoD,KAAK,sCAAsC,SAAS,MAAM,CAAC,EAAE,IAAI,OAAK,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC,wMAC9J,+BAA+B,KAAK;AAAA,QACxC;AAAA,QACA,aACI,8LACA;AAAA,QACJ;AAAA,MACF,EAAE,OAAO,OAAK,MAAM,EAAE,EAAE,KAAK,GAAG;AAAA,IAClC,CAAC;AAAA,EACH;AAEA,SAAO,IAAI,KAAK,CAAC,GAAG,MAAM,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK;AACtF;AAMA,SAASC,cAAa,GAAa,GAAuB;AACxD,MAAI,EAAE,SAAS,MAAO,QAAO;AAC7B,MAAI,EAAE,SAAS,MAAO,QAAO;AAC7B,MAAI,EAAE,SAAS,WAAW,EAAE,SAAS,QAAS,QAAO,EAAE,MAAM,QAAQ;AACrE,QAAM,SAAuC,CAAC;AAC9C,aAAW,MAAM,EAAE,OAAQ,YAAW,MAAM,EAAE,QAAQ;AACpD,UAAM,KAAK,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE;AAChC,UAAM,KAAK,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE;AAChC,QAAI,MAAM,GAAI,QAAO,KAAK,EAAE,IAAI,GAAG,CAAC;AAAA,EACtC;AACA,SAAO,OAAO,WAAW,IAAI,EAAE,MAAM,QAAQ,IAAI,EAAE,MAAM,UAAU,OAAO;AAC5E;AAGA,SAAS,QAAQ,KAA0D;AACzE,MAAI,MAAM;AACV,aAAS;AACP,UAAMC,KAAI,IAAI;AACd,QAAIA,GAAE,QAAQ,UAAUA,GAAE,QAAQ,eAAeA,GAAE,QAAQ,WAAWA,GAAE,QAAQ,aAAaA,GAAE,QAAQ,QAAQ;AAC7G,YAAOA,GAAsC;AAC7C;AAAA,IACF;AACA;AAAA,EACF;AACA,QAAM,IAAI,IAAI;AACd,SAAO,EAAE,QAAQ,aAAa,EAAE,UAAU,CAAC,GAAG;AAChD;AAEA,SAAS,aAAa,KAAmC;AACvD,QAAMN,KAAI,QAAQ,GAAG,EAAE,CAAC;AACxB,SAAOA,OAAM,UAAcA,GAAE,KAAmB,QAAQ;AAC1D;AAEA,SAAS,aACP,SACA,SACAO,UACqB;AACrB,QAAM,MAA2B,CAAC;AAClC,aAAW,KAAK,QAAQ,OAAO,GAAG;AAChC,UAAM,IAAI,EAAE;AACZ,QAAI,EAAE,QAAQ,SAAU;AACxB,UAAM,OAAO,EAAE;AACf,UAAM,KAAK,KAAK,IAAI,OAAK,WAAW,GAAG,oBAAI,IAAI,GAAGA,QAAO,CAAC;AAC1D,UAAM,WAAW,EAAE;AACnB,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,eAAS,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACxC,cAAM,IAAI,GAAG,CAAC,GAAI,IAAI,GAAG,CAAC;AAC1B,YAAI,EAAE,SAAS,SAAS,EAAE,SAAS,MAAO;AAC1C,YAAI,CAAC,WAAW,GAAG,CAAC,EAAG;AACvB,cAAM,KAAK,QAAQ,KAAK,CAAC,CAAE,GAAG,KAAK,QAAQ,KAAK,CAAC,CAAE;AACnD,YAAI,SAAS;AACb,eAAO,SAAS,GAAG,UAAU,SAAS,GAAG,UAAU,QAAQ,GAAG,MAAM,CAAE,MAAM,QAAQ,GAAG,MAAM,CAAE,EAAG;AAClG,cAAM,UAAU,UAAU,QAAQ,kBAC7B,MAAM,QAAQ,SAAS,OAAO,KAAK,SAAS,QAAQ,SAAS,CAAC,KAAK,SAAS,QAAQ,SAAS,CAAC;AACnG,cAAM,YAAY,aAAa,KAAK,CAAC,CAAE,KAAK,aAAa,KAAK,CAAC,CAAE;AACjE,YAAI,KAAK;AAAA,UACP,MAAM;AAAA,UACN,IAAI,eAAe,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAAA,UACjD,MAAM,EAAE;AAAA,UACR,GAAG;AAAA,UAAG,GAAG;AAAA,UACT,IAAIF,cAAa,GAAG,CAAC;AAAA,UACrB,oBAAoB;AAAA,UACpB,cAAc,SAAS,IAAI,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,IAAI,CAAAL,OAAK,OAAOA,IAAG,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI;AAAA,UAC1F,mBAAmB;AAAA,UACnB;AAAA,UACA,YAAY,kBAAkB,QAAQ,SAAS,SAAS;AAAA,QAC1D,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACA,SAAO,IAAI,KAAK,CAAC,GAAG,MAAM,EAAE,qBAAqB,EAAE,kBAAkB;AACvE;AAEA,SAAS,kBAAkB,QAAgB,SAAkB,WAA4B;AACvF,MAAI,SAAS,KAAK;AAChB,WAAO,kBAAkB,MAAM;AACjC,MAAI,SAAS;AACX,WAAO,kBAAkB,MAAM;AACjC,MAAI;AACF,WAAO;AACT,SAAO;AACT;AAIA,IAAM,WAAW;AACjB,IAAM,YAAY;AAElB,SAAS,aACP,SACA,SACkB;AAClB,QAAM,MAAwB,CAAC;AAK/B,QAAM,OAAO,CAAC,GAAwC,OAAsB;AAC1E,UAAM,OAAO,aAAa,EAAE,IAAI;AAChC,QAAI,KAAK,EAAE,MAAM,WAAW,IAAI,WAAW,EAAE,OAAO,IAAI,IAAI,GAAG,OAAO,SAAY,KAAK,IAAI,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC;AAAA,EAC3G;AAEA,aAAW,KAAK,QAAQ,OAAO,GAAG;AAChC,UAAM,IAAI,EAAE;AACZ,UAAM,OAAO,EAAE;AAGf,QAAI,EAAE,QAAQ,cAAc,EAAE,QAAQ,UAAU,EAAE,QAAQ,aAAa;AACrE,YAAM,QAAS,EAAsC;AACrD,YAAM,KAAK,MAAM;AACjB,YAAM,YAAY,eAAe,GAAG,EAAE;AACtC,UAAI,cAAc,MAAM;AACtB,aAAK;AAAA,UACH,SAAS;AAAA,UAAsB;AAAA,UAC/B,MAAM,MAAM,OAAO,EAAE,GAAG,CAAC,CAAC;AAAA,UAAG,IAAI;AAAA,UACjC,YAAY;AAAA,UACZ,MAAM;AAAA,UACN,KAAK,GAAG,QAAQ,cAAc,EAAE,QAAQ;AAAA,UACxC,YAAY,KAAK,MAAM,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,mBAAmB,SAAS,OAAO,GAAG,QAAQ,cAAc,EAAE,QAAQ,SAAS,oKAAoK,EAAE;AAAA,QAC7R,CAAC;AAAA,MACH;AAAA,IACF;AAGA,SAAK,EAAE,QAAQ,YAAY,EAAE,QAAQ,eAAe,EAAE,QAAQ,WAAW,GAAG;AAC1E,WAAK;AAAA,QACH,SAAS;AAAA,QAAkB;AAAA,QAC3B,MAAM,MAAM,OAAO,EAAE,GAAG,CAAC,CAAC;AAAA,QAC1B,IAAI,EAAE,QAAQ,WAAW,MAAM,OAAO,EAAE,QAAQ,CAAC,GAAI,CAAC,CAAC,IAAI,GAAG,MAAM,OAAO,EAAE,QAAQ,CAAC,GAAI,CAAC,CAAC,CAAC;AAAA,QAC7F,YAAY,EAAE,QAAQ;AAAA,QACtB,MAAM,EAAE,QAAQ,WAAW,2DAA2D;AAAA,QACtF,KAAK;AAAA,QACL,YAAY,EAAE,QAAQ,WAClB,qJACA;AAAA,MACN,CAAC;AAAA,IACH;AAEA,QAAI,EAAE,QAAQ,SAAU;AACxB,UAAM,OAAO,EAAE;AACf,UAAM,YAAY,KAAK,IAAI,OAAO;AAClC,UAAM,WAAW,EAAE;AAGnB,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,IAAK,UAAS,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AAC9E,UAAI,UAAU,CAAC,MAAM,UAAU,CAAC,EAAG;AACnC,WAAK;AAAA,QACH,SAAS;AAAA,QAAiB;AAAA,QAC1B,MAAM,qBAAgB,CAAC,iBAAY,CAAC;AAAA,QACpC,IAAI,cAAc,CAAC;AAAA,QACnB,YAAY;AAAA,QACZ,MAAM;AAAA,QACN,KAAK;AAAA,QACL,YAAY,OAAO,CAAC,aAAa,CAAC,2BAA2B,MAAM,OAAO,KAAK,CAAC,GAAI,CAAC,CAAC,CAAC,iCAAiC,CAAC,yBAAyB,CAAC;AAAA,MACrJ,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE;AAAA,IAChB;AAGA,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,IAAK,UAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AAC1E,UAAI,KAAK,EAAG;AACZ,UAAI,UAAU,CAAC,MAAM,UAAU,CAAC,EAAG;AACnC,YAAM,KAAK,QAAQ,KAAK,CAAC,CAAE,GAAG,KAAK,QAAQ,KAAK,CAAC,CAAE;AACnD,UAAI,GAAG,WAAW,KAAK,GAAG,UAAU,GAAG,OAAQ;AAC/C,UAAI,IAAI;AACR,aAAO,IAAI,GAAG,UAAU,QAAQ,GAAG,CAAC,CAAE,MAAM,QAAQ,GAAG,CAAC,CAAE,EAAG;AAC7D,UAAI,MAAM,GAAG,OAAQ;AACrB,WAAK;AAAA,QACH,SAAS;AAAA,QAAgB;AAAA,QACzB,MAAM,qBAAgB,CAAC,KAAK,MAAM,OAAO,KAAK,CAAC,GAAI,CAAC,CAAC,CAAC,gBAAW,CAAC,KAAK,MAAM,OAAO,KAAK,CAAC,GAAI,CAAC,CAAC,CAAC;AAAA,QACjG,IAAI,OAAO,CAAC;AAAA,QACZ,YAAY;AAAA,QACZ,MAAM;AAAA,QACN,KAAK;AAAA,QACL,YAAY,OAAO,CAAC,+BAA+B,CAAC,mCAAmC,CAAC,sBAAsB,CAAC,kEAA6D,CAAC,yEAAyE,CAAC,4BAA4B,CAAC,iFAA4E,CAAC;AAAA,MACnW,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE;AAAA,IAChB;AAGA,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK,QAAQ,KAAK;AACxC,YAAM,IAAI,IAAI;AACd,YAAM,SAAS,QAAQ,KAAK,CAAC,CAAE,GAAG,UAAU,QAAQ,KAAK,CAAC,CAAE;AAC5D,YAAM,UAAU,mBAAmB,QAAQ,SAAS,OAAO;AAC3D,YAAM,WAAW,YAAY,OAAO,mBAAmB,SAAS,QAAQ,OAAO,IAAI;AACnF,YAAM,MAAM,WAAW;AACvB,UAAI,QAAQ,KAAM;AAClB,YAAM,cAAc,EAAE,iBAAiB,iBAAiB,KAAK,CAAC,CAAE,KAAK,iBAAiB,KAAK,CAAC,CAAE;AAC9F,YAAM,OAAO,IAAI,KAAK,IAAI,CAAAA,OAAK,OAAOA,IAAG,CAAC,CAAC,EAAE,KAAK,IAAI;AACtD,YAAM,KAAK,IAAI,UAAU,WACrB,qBAAqB,OAAO,IAAI,MAAM,CAAC,CAAC,MAAM,IAAI,MAClD,YAAY,IAAI,cAAc,OAAO,IAAI,MAAM,CAAC,CAAC;AACrD,WAAK;AAAA,QACH,SAAS,IAAI,UAAU,WAAW,oBAAoB;AAAA,QACtD;AAAA,QACA,MAAM,MAAM,OAAO,EAAE,GAAG,CAAC,CAAC;AAAA,QAC1B,IAAI,MAAM,EAAE;AAAA,QACZ,YAAY;AAAA,QACZ,MAAM;AAAA,QACN,KAAK;AAAA,QACL,YAAY,mCAAmC,IAAI,UAAU,WAAW,YAAY,UAAU,MAAM,MAAM,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,kCAAkC,MAAM,EAAE,CAAC,mDAA8C,aAAa,OAAO,wKAAmK,EAAE,yDAAoD,gBAAgB,OAAO,KAAK,4BAA4B,WAAW,WAAW;AAAA,MACphB,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE;AAAA,IAChB;AAGA,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK,QAAQ,KAAK;AACxC,YAAM,IAAI,IAAI;AACd,YAAM,KAAK,QAAQ,KAAK,CAAC,CAAE,GAAG,KAAK,QAAQ,KAAK,CAAC,CAAE;AACnD,UAAI,GAAG,SAAS,KAAK,GAAG,SAAS,EAAG;AACpC,UAAI,IAAI;AACR,aAAO,IAAI,GAAG,SAAS,KAAK,IAAI,GAAG,SAAS,KAAK,QAAQ,GAAG,CAAC,CAAE,MAAM,QAAQ,GAAG,CAAC,CAAE,EAAG;AACtF,UAAI,MAAM,EAAG;AACb,YAAM,UAAU,UAAU,QAAQ,kBAC7B,MAAM,QAAQ,SAAS,OAAO,KAAK,SAAS,QAAQ,SAAS,CAAC,KAAK,SAAS,QAAQ,SAAS,CAAC;AACnG,WAAK;AAAA,QACH,SAAS;AAAA,QAAe;AAAA,QACxB,MAAM,mBAAmB,GAAG,IAAI,CAAAA,OAAK,OAAOA,IAAG,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,eAAe,GAAG,IAAI,CAAAA,OAAK,OAAOA,IAAG,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC;AAAA,QAChH,IAAI,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,EAAE,IAAI,CAAAA,OAAK,OAAOA,IAAG,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,EAAE,IAAI,CAAAA,OAAK,OAAOA,IAAG,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,EAAE,IAAI,CAAAA,OAAK,OAAOA,IAAG,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,KAAK;AAAA,QACzM,YAAY;AAAA,QACZ,MAAM,UACF,+KACA;AAAA,QACJ,KAAK;AAAA,QACL,YAAY,OAAO,CAAC,aAAa,CAAC,oBAAoB,CAAC,qBAAqB,UAAU,uMAAkM,oJAAoJ;AAAA,MAC9a,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE;AAAA,IAChB;AAAA,EACF;AAGA,aAAW,KAAK,QAAQ,OAAO,GAAG;AAChC,QAAI,EAAE,EAAE,QAAQ,WAAY;AAC5B,UAAM,MAAM,sBAAsB,EAAE,EAAE,SAAS,OAAO;AACtD,QAAI,QAAQ,KAAM;AAGlB,UAAM,WAAW,EAAE,EAAE,QAAQ,KAAK,CAAAA,OAAK,qBAAqBA,EAAC,CAAC;AAC9D,UAAM,UAAwB,WAAW,uBAAuB,EAAE,mBAAmB,0BAA0B;AAC/G,UAAM,KAAK,SAAS,MAAM,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,WAAW,4BAA4B,EAAE,YAAY,IAAI,GAAG;AAC/I,QAAI,KAAK;AAAA,MACP,MAAM;AAAA,MACN,IAAI,6BAA6B,aAAa,EAAE,IAAI,CAAC;AAAA,MACrD,SAAS;AAAA,MACT,MAAM,EAAE;AAAA,MACR,cAAc;AAAA,MACd,MAAM,MAAM,OAAO,EAAE,GAAG,CAAC,CAAC;AAAA,MAC1B,IAAI,YAAY,gBAAgB,KAAK,GAAG,EAAE,kCAA6B,OAAO;AAAA,MAC9E,YAAY;AAAA,MACZ,MAAM,YAAY,gBACd,0JACA;AAAA,MACJ,KAAK;AAAA,MACL,YAAY,GAAG,kBAAkB,IAAI,QAAQ,CAAC,IAAI,mBAAmB,OAAO,EAAE,IAAI,QAAQ,CAAC;AAAA,IAC7F,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEA,SAAS,eAAe,OAAkB,OAAiC;AACzE,QAAM,IAAI,MAAM,KAAK,IAAI,MAAM;AAC/B,MAAI,MAAM,cAAc,MAAM,WAAY,QAAO;AACjD,MAAI,MAAM,cAAc,MAAM,OAAQ,QAAO;AAC7C,MAAI,MAAM,UAAU,MAAM,OAAQ,QAAO;AACzC,MAAI,MAAM,UAAU,MAAM,WAAY,QAAO;AAC7C,MAAI,MAAM,cAAc,MAAM,eAAe,MAAM,QAAQ,KAAK,MAAM,QAAQ,OAAW,QAAO;AAChG,MAAI,MAAM,UAAU,MAAM,eAAe,MAAM,QAAQ,KAAK,MAAM,QAAQ,OAAW,QAAO;AAC5F,SAAO;AACT;AAGA,SAAS,iBAAiB,KAAyC;AACjE,QAAM,IAAI,IAAI;AACd,SAAO,EAAE,QAAQ,SAAS,EAAE,QAAQ,gBAAgB;AACtD;AAMA,SAAS,mBACP,QACA,SACA,SACwG;AACxG,MAAI,OAAO,WAAW,QAAQ,SAAS,KAAK,QAAQ,WAAW,EAAG,QAAO;AACzE,QAAM,OAAO,CAAC,GAAmC,MAC/C,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,MAAM,QAAQ,EAAE,CAAC,CAAE,CAAC;AAC1E,MAAI,KAAK,OAAO,MAAM,CAAC,GAAG,OAAO,EAAG,QAAO,EAAE,OAAO,UAAU,MAAM,OAAO,CAAC,GAAI,MAAM,QAAQ;AAC9F,MAAI,KAAK,OAAO,MAAM,GAAG,EAAE,GAAG,OAAO,EAAG,QAAO,EAAE,OAAO,UAAU,MAAM,OAAO,OAAO,SAAS,CAAC,GAAI,MAAM,QAAQ;AAClH,SAAO;AACT;AAEA,IAAM,oBAAoB,CAAC,aACzB,4BAA4B,WAAW,4BAA4B,EAAE;AAGvE,IAAM,qBAA0E;AAAA,EAC9E,sBAAsB,MACpB;AAAA,EACF,yBAAyB,MACvB;AAAA,EACF,aAAa,CAAC,aACZ,mHAA8G,WAAW,SAAS,OAAO;AAC7I;AAWA,SAAS,qBAAqB,GAAwB,OAAO,oBAAI,IAAyB,GAAY;AACpG,MAAI,KAAK,IAAI,CAAC,EAAG,QAAO;AACxB,OAAK,IAAI,CAAC;AACV,QAAM,IAAI,EAAE;AACZ,MAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,QAAS,QAAO;AACnD,aAAW,KAAK,WAAW,CAAC,EAAG,KAAI,qBAAqB,GAAG,IAAI,EAAG,QAAO;AACzE,SAAO;AACT;AAGA,SAAS,sBACP,OACA,SACgG;AAChG,MAAI,MAAM,SAAS,KAAK,MAAM,SAAS,EAAG,QAAO;AACjD,QAAM,OAAO,MAAM,CAAC;AACpB,QAAM,MAAM,MAAM,CAAC,EAAG;AACtB,MAAI,IAAI,QAAQ,UAAU,IAAI,QAAQ,YAAa,QAAO;AAC1D,MAAI,IAAI,QAAQ,OAAW,QAAO;AAClC,QAAM,WAAW,IAAI,OAAO;AAC5B,MAAI,SAAS,QAAQ,cAAc,SAAS,QAAQ,WAAW,EAAG,QAAO;AACzE,QAAM,CAAC,KAAK,QAAQ,IAAI,SAAS;AACjC,MAAI,QAAQ,QAAQ,MAAM,QAAQ,IAAI,EAAG,QAAO;AAChD,MAAI,WAAW;AACf,MAAI,MAAM,WAAW,GAAG;AACtB,UAAMA,KAAI,MAAM,CAAC,EAAG;AACpB,QAAIA,GAAE,QAAQ,cAAc,QAAQA,GAAE,MAAM,MAAM,QAAQ,GAAG,EAAG,QAAO;AACvE,eAAW;AAAA,EACb;AAKA,SAAO,EAAE,MAAM,KAAK,UAAU,KAAK,IAAI,IAAI,IAAI;AACjD;AAUA,SAAS,YAAY,GAAwD;AAC3E,MAAI,MAAM;AACV,aAAS;AACP,UAAMM,KAAI,IAAI;AACd,QAAIA,GAAE,QAAQ,UAAUA,GAAE,QAAQ,aAAaA,GAAE,QAAQ,eAAeA,GAAE,QAAQ,WAC7EA,GAAE,QAAQ,aAAaA,GAAE,QAAQ,UAAUA,GAAE,QAAQ,WAAWA,GAAE,QAAQ,YAAYA,GAAE,QAAQ,SAAS;AAC5G,YAAOA,GAAsC;AAC7C;AAAA,IACF;AACA;AAAA,EACF;AACA,QAAM,IAAI,IAAI;AACd,SAAO,EAAE,QAAQ,aAAa,EAAE,UAAU,CAAC,GAAG;AAChD;AAIA,IAAM,mBAAmB;AAEzB,SAAS,mBACP,SACA,SACwB;AACxB,QAAM,SAAS,oBAAI,IAAkC;AACrD,aAAW,KAAK,QAAQ,OAAO,GAAG;AAChC,QAAI,EAAE,EAAE,QAAQ,UAAU,EAAE,EAAE,SAAS,OAAW;AAClD,QAAI,IAAI,OAAO,IAAI,EAAE,EAAE,IAAI;AAC3B,QAAI,MAAM,QAAW;AAAE,UAAI,oBAAI,IAAI;AAAG,aAAO,IAAI,EAAE,EAAE,MAAM,CAAC;AAAA,IAAE;AAC9D,QAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAG,GAAE,IAAI,EAAE,OAAO,CAAC;AAAA,EACvC;AAEA,QAAM,MAA8B,CAAC;AACrC,aAAW,CAAC,MAAM,CAAC,KAAK,QAAQ;AAC9B,QAAI,EAAE,OAAO,EAAG;AAChB,UAAM,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC;AAC9B,UAAM,WAAW,QAAQ,IAAI,OAAK,YAAY,EAAE,CAAC,EAAE,IAAI,CAAAN,QAAM,EAAE,IAAI,QAAQA,EAAC,GAAG,MAAM,MAAM,OAAOA,IAAG,CAAC,CAAC,EAAE,EAAE,CAAC;AAE5G,UAAM,SAAS,SAAS,CAAC,EAAG,OAAO,CAAAA,OAAK,SAAS,MAAM,SAAO,IAAI,KAAK,OAAK,EAAE,OAAOA,GAAE,EAAE,CAAC,CAAC;AAC3F,UAAM,eAAe,CAAC,GAAG,IAAI,IAAI,OAAO,IAAI,CAAAA,OAAK,CAACA,GAAE,IAAIA,EAAC,CAAC,CAAC,EAAE,OAAO,CAAC;AACrE,QAAI,aAAa,SAAS,iBAAkB;AAC5C,UAAM,YAAY,IAAI,IAAI,aAAa,IAAI,CAAAA,OAAKA,GAAE,EAAE,CAAC;AACrD,QAAI,KAAK;AAAA,MACP,MAAM;AAAA,MACN,IAAI,kBAAkB,IAAI;AAAA,MAC1B,UAAU;AAAA,MACV,OAAO,QAAQ;AAAA,MACf,aAAa,aAAa,IAAI,CAAAA,OAAKA,GAAE,IAAI;AAAA,MACzC,aAAa,QAAQ,IAAI,CAAC,GAAG,OAAO;AAAA,QAClC,OAAO,MAAM,OAAO,EAAE,GAAG,CAAC,CAAC;AAAA,QAC3B,MAAM,EAAE;AAAA,QACR,eAAe,SAAS,CAAC,EAAG,OAAO,CAAAA,OAAK,CAAC,UAAU,IAAIA,GAAE,EAAE,CAAC,EAAE,IAAI,CAAAA,OAAKA,GAAE,IAAI;AAAA,MAC/E,EAAE;AAAA,MACF,YAAY,KAAK,IAAI,kBAAkB,QAAQ,MAAM,+DAA+D,aAAa,MAAM,uBAAuB,aAAa,IAAI,CAAAA,OAAK,KAAKA,GAAE,IAAI,IAAI,EAAE,KAAK,IAAI,CAAC,gDAA2C,QAAQ,MAAM,2DAA2D,IAAI,6BAA6B,QAAQ,MAAM;AAAA,IACpX,CAAC;AAAA,EACH;AACA,SAAO,IAAI,KAAK,CAAC,GAAG,MAAM,EAAE,YAAY,SAAS,EAAE,QAAQ,EAAE,YAAY,SAAS,EAAE,KAAK;AAC3F;AAWA,SAAS,WAAW,GAA6C;AAC/D,MAAI,MAAM;AACV,QAAM,OAAO,oBAAI,IAAyB;AAC1C,aAAS;AACP,QAAI,KAAK,IAAI,GAAG,EAAG,QAAO;AAC1B,SAAK,IAAI,GAAG;AACZ,UAAM,IAAI,IAAI;AACd,QAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,WAAW;AAAE,YAAM,EAAE;AAAQ;AAAA,IAAS;AACzE,QAAI,EAAE,QAAQ,QAAQ;AACpB,UAAI;AAAE,cAAO,EAAuC,MAAM;AAAG;AAAA,MAAS,QAChE;AAAE,eAAO;AAAA,MAAI;AAAA,IACrB;AACA,WAAO;AAAA,EACT;AACF;AASA,SAAS,gBACP,MACA,KACA,MACA,QACM;AACN,MAAI,KAAK,IAAI,IAAI,EAAG;AACpB,OAAK,IAAI,IAAI;AACb,QAAM,IAAI,KAAK;AACf,MAAI,EAAE,QAAQ,UAAU,EAAE,QAAQ,QAAS;AAC3C,MAAI,EAAE,QAAQ,UAAU,CAAC,OAAQ,KAAI,IAAI,EAAE,QAAQ,aAAa;AAChE,MAAI,EAAE,QAAQ,QAAQ;AACpB,QAAI;AAAE,sBAAiB,EAAuC,MAAM,GAAG,KAAK,MAAM,KAAK;AAAA,IAAE,QACnF;AAAA,IAAuC;AAC7C;AAAA,EACF;AACA,aAAW,KAAK,WAAW,CAAC,EAAG,iBAAgB,GAAG,KAAK,MAAM,KAAK;AACpE;AAGA,IAAM,iBAAiB;AAEvB,SAAS,kBACP,SACAO,UACwB;AACxB,QAAM,cAAc,oBAAI,IAAsC;AAC9D,QAAM,SAAS,CAAC,MAAwC;AACtD,UAAM,MAAM,YAAY,IAAI,CAAC;AAC7B,QAAI,QAAQ,OAAW,QAAO;AAC9B,UAAM,MAAM,oBAAI,IAAY;AAC5B,oBAAgB,GAAG,KAAK,oBAAI,IAAI,GAAG,IAAI;AACvC,gBAAY,IAAI,GAAG,GAAG;AACtB,WAAO;AAAA,EACT;AAEA,QAAM,WAAmC,CAAC;AAC1C,aAAW,KAAK,QAAQ,OAAO,GAAG;AAChC,UAAM,IAAI,EAAE;AACZ,QAAI,EAAE,QAAQ,SAAU;AACxB,UAAM,OAAO,EAAE;AACf,UAAM,WAAW,KAAK,IAAI,UAAU;AACpC,UAAM,YAAY,SAAS,IAAI,gBAAgB;AAC/C,UAAM,KAAK,KAAK,IAAI,OAAK,WAAW,GAAG,oBAAI,IAAI,GAAGA,QAAO,CAAC;AAE1D,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AAIpC,UAAI,EAAE,MAAM,CAAC,KAAK,KAAM;AACxB,YAAM,OAAO,UAAU,CAAC,KAAK;AAC7B,UAAI,SAAS,KAAM;AAOnB,UAAI,OAAO,SAAS,CAAC,CAAE,EAAE,SAAS,EAAG;AACrC,YAAM,IAAI,GAAG,CAAC;AACd,UAAI,EAAE,SAAS,MAAO;AAEtB,eAAS,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACxC,YAAI,UAAU,CAAC,MAAM,KAAM;AAC3B,cAAM,IAAI,GAAG,CAAC;AAWd,YAAI,EAAE,SAAS,SAAS,CAAC,WAAW,GAAG,CAAC,EAAG;AAC3C,cAAM,OAAO,OAAO,SAAS,CAAC,CAAE;AAChC,YAAI,KAAK,SAAS,EAAG;AACrB,cAAM,gBAAgB,CAAC,GAAG,IAAI,EAAE,KAAK;AACrC,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,IAAI,kBAAkB,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAAA,UACpD,MAAM,EAAE;AAAA,UACR,UAAU;AAAA,UACV,SAAS;AAAA,UACT,OAAO;AAAA,UACP,IAAIF,cAAa,GAAG,CAAC;AAAA,UACrB,eAAe,cAAc,MAAM,GAAG,cAAc;AAAA,UACpD,cAAc,MAAM,OAAO,SAAS,CAAC,GAAI,CAAC,CAAC;AAAA,UAC3C,YAAY,MAAM,OAAO,SAAS,CAAC,GAAI,CAAC,CAAC;AAAA,UACzC,YAAY,wBAAwB,MAAM,GAAG,GAAG,aAAa;AAAA,QAC/D,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACA,SAAO,SAAS,KAAK,CAAC,GAAG,MAAM,EAAE,cAAc,SAAS,EAAE,cAAc,MAAM;AAChF;AAEA,SAAS,wBACP,MACA,GACA,GACA,MACQ;AACR,QAAM,QAAQ,KAAK,MAAM,GAAG,cAAc,EAAE,IAAI,CAAAL,OAAK,KAAKA,EAAC,IAAI,EAAE,KAAK,IAAI;AAC1E,QAAM,OAAO,KAAK,SAAS,iBAAiB,SAAS,KAAK,SAAS,cAAc,WAAW;AAC5F,SAAO,OAAO,CAAC,aAAa,CAAC,kBAAkB,IAAI,8EAA8E,CAAC,yBAAoB,CAAC,8CAA8C,IAAI,4BAA4B,CAAC,sBAAsB,KAAK,GAAG,IAAI,yHAAyH,CAAC,0SAAqS,CAAC,0BAA0B,CAAC,8FAA8F,CAAC;AACpyB;AAIA,SAAS,mBAAmB,SAAmE;AAE7F,QAAM,aAAa,oBAAI,IAAwE;AAC/F,aAAW,KAAK,QAAQ,OAAO,GAAG;AAChC,QAAI,EAAE,EAAE,QAAQ,SAAU;AAC1B,MAAE,EAAE,QAAQ,QAAQ,CAAC,GAAG,MAAM;AAC5B,UAAI,MAAM;AACV,iBAAS;AACP,cAAM,KAAK,IAAI;AACf,YAAI,GAAG,QAAQ,UAAU,GAAG,QAAQ,WAAW,GAAG,QAAQ,eAAe,GAAG,QAAQ,UAAU,GAAG,QAAQ,WAAW;AAAE,gBAAM,GAAG;AAAQ;AAAA,QAAS;AAChJ;AAAA,MACF;AACA,iBAAW,IAAI,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;AAAA,IAC9C,CAAC;AAAA,EACH;AACA,QAAM,cAAc,oBAAI,IAAmC;AAC3D,aAAW,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,YAAY;AACzC,UAAM,IAAI,IAAI;AACd,QAAI,EAAE,QAAQ,WAAW,kBAAkB,EAAE,MAAM,MAAM,KAAM;AAC/D,UAAM,OAAO,YAAY,IAAI,KAAK,KAAK,CAAC;AACxC,SAAK,KAAK,WAAW,IAAI,GAAG,EAAG,KAAK;AACpC,gBAAY,IAAI,OAAO,IAAI;AAAA,EAC7B;AAEA,QAAM,MAA6B,CAAC;AACpC,aAAW,KAAK,QAAQ,OAAO,GAAG;AAChC,UAAM,IAAI,EAAE;AACZ,QAAI,EAAE,QAAQ,QAAS;AACvB,UAAM,QAAQ,kBAAkB,EAAE,MAAM;AACxC,QAAI,UAAU,KAAM;AACpB,UAAM,KAAK,EAAE,MAAM,SAAS,GAAG;AAC/B,UAAM,UAAU,EAAE,MAAM,SAAS,GAAG,KAAK,EAAE,MAAM,SAAS,GAAG;AAC7D,UAAM,MAAM,WAAW,IAAI,EAAE,CAAC;AAC9B,UAAM,WAAW,QAAQ,SAAY,CAAC,KAAK,YAAY,IAAI,IAAI,KAAK,KAAK,CAAC,GAAG,OAAO,OAAK,MAAM,IAAI,KAAK;AACxG,UAAM,KAAK,CAAC,MAAsB,IAAI,EAAE,QAAQ,OAAO,MAAM,CAAC;AAC9D,UAAM,aAAa,MAAM,MAAM,UAAU;AACzC,UAAM,UAAU,0BAA0B,MAAM,OAAO,MAAM,QAAQ;AACrE,UAAM,YAAY,QAAQ,OAAO,OAAK,CAAC,EAAE,iBAAiB;AAC1D,UAAM,eAAe,MAAM,MAAM,MAAM,CAAC,GAAG,MAAM,MAAM,KAAK,MAAM,MAAM,IAAI,CAAC,EAAG,UAAU,EAAE,MAAM;AAClG,UAAM,QAAQ,MAAM,MAAM,SAAS,IAAI,CAAC,GAAG,MAAM,MAAM,MAAM,GAAG,CAAC,GAAG,gBAAW,MAAM,MAAM,MAAM,MAAM,SAAS,CAAC,CAAE,IAAI,MAAM;AAC7H,UAAM,OAAO,MAAM,MAAM,WAAW,IAChC,QAAQ,GAAG,MAAM,MAAM,CAAC,CAAE,CAAC,KAAK,GAAG,MAAM,YAAY,YAAY,CAAC,GAAG,KAAK,gCAAgC,EAAE,MAC5G,aAAa,MAAM,IAAI,OAAM,MAAM,iBAAY,IAAI,GAAG,CAAC,CAAE,EAAE,KAAK,IAAI,CAAC,kBAAkB,GAAG,MAAM,YAAY,YAAY,CAAC,GAAG,KAAK,4BAA4B,EAAE;AACnK,QAAI,KAAK;AAAA,MACP,MAAM;AAAA,MACN,IAAI,iBAAiB,aAAa,EAAE,IAAI,CAAC;AAAA,MACzC,MAAM,EAAE;AAAA,MACR,QAAQ,EAAE;AAAA,MACV,OAAO,EAAE;AAAA,MACT,OAAO,MAAM;AAAA,MACb,UAAU,MAAM;AAAA,MAChB,cAAc,MAAM,CAAC;AAAA,MACrB,aAAa;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,MACA,KAAK,UAAU,SAAS;AAAA,MACxB,YAAY;AAAA,QACV,aACI,+CAA+C,MAAM,MAAM,MAAM,iBAAiB,MAAM,MAAM,SAAS,KAAK,mEAA8D,EAAE,yFAAyF,IAAI,sPACzQ,YAAY,EAAE,MAAM,IAAI,EAAE,KAAK,yDAAyD,IAAI,wCAAmC,MAAM,YAAY,EAAE;AAAA,QACvJ,UAAU,SAAS,IACf,iDAA4C,UAAU,MAAM,0CAA0C,UAAU,MAAM,GAAG,CAAC,EAAE,IAAI,OAAK,KAAK,EAAE,OAAO,iBAAiB,EAAE,MAAM,0CAA0C,EAAE,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,GAAG,UAAU,SAAS,IAAI,SAAS,UAAU,SAAS,CAAC,UAAU,EAAE,6MAC7S,QAAQ,SAAS,IACf,yCAAyC,QAAQ,MAAM,2EAAsE,QAAQ,CAAC,EAAG,OAAO,eAAe,QAAQ,CAAC,EAAG,MAAM,2WACjL,CAAC,gBAAgB,aACf,qEAAqE,MAAM,aAAa,OAAO,KAAK,2DAA2D,uLAC/J;AAAA,QACR,MAAM,CAAC,UACH,0bACA;AAAA,QACJ,SAAS,SAAS,IACd,OAAO,KAAK,KAAK,iCAAiC,SAAS,KAAK,IAAI,CAAC,wNACrE;AAAA,MACN,EAAE,OAAO,OAAK,MAAM,EAAE,EAAE,KAAK,GAAG;AAAA,IAClC,CAAC;AAAA,EACH;AAGA,SAAO,IAAI,KAAK,CAAC,GAAG,MAClB,OAAO,EAAE,GAAG,IAAI,OAAO,EAAE,GAAG,KACzB,EAAE,QAAQ,SAAS,EAAE,QAAQ,UAC7B,EAAE,MAAM,SAAS,EAAE,MAAM,UACzB,EAAE,YAAY,SAAS,EAAE,YAAY,MAAM;AAClD;AAMA,IAAM,YAAY,CAAC,UACjB,MAAM,MAAM,GAAG,CAAC,EAAE,IAAI,YAAY,EAAE,KAAK,UAAU,KAAK,MAAM,SAAS,IAAI;AAAA,mBAAiB,MAAM,SAAS,CAAC,UAAU;AAMjH,SAAS,0BAA0B,QAAqC;AAC7E,QAAM,QAAkB,CAAC;AAGzB,aAAW,KAAK,OAAO,eAAe;AACpC,UAAM,KAAK,mCAAmC,aAAa,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,gBAAgB,EAAE,QAAQ,gBAAgB,EAAE,KAAK,uBAAuB,iBAAiB,EAAE,EAAE,CAAC,EAAE;AACpL,UAAM,KAAK,WAAW,EAAE,YAAY,EAAE;AACtC,UAAM,KAAK,WAAW,EAAE,UAAU,EAAE;AACpC,UAAM,KAAK,WAAW,EAAE,cAAc,IAAI,CAAAA,OAAK,KAAKA,EAAC,IAAI,EAAE,KAAK,IAAI,CAAC,EAAE;AACvE,UAAM,KAAK,WAAW,EAAE,UAAU,EAAE;AAAA,EACtC;AACA,aAAW,KAAK,OAAO,UAAU;AAC/B,UAAM,KAAK,YAAY,EAAE,MAAM,QAAQ,SAAS,KAAK,EAAE,OAAO,GAAG,EAAE,iBAAiB,SAAY,KAAK,IAAI,EAAE,YAAY,EAAE,OAAO,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,aAAa,KAAK,yCAAoC,EAAE;AACjN,UAAM,KAAK,WAAW,EAAE,IAAI,EAAE;AAC9B,UAAM,KAAK,WAAW,EAAE,EAAE,EAAE;AAC5B,UAAM,KAAK,WAAW,EAAE,UAAU,EAAE;AACpC,QAAI,EAAE,SAAS,GAAI,OAAM,KAAK,WAAW,EAAE,IAAI,EAAE;AAAA,EACnD;AACA,aAAW,KAAK,OAAO,gBAAgB;AACrC,UAAM,KAAK,8BAA8B,EAAE,QAAQ,kBAAkB,EAAE,KAAK,kCAAkC,EAAE,YAAY,MAAM,aAAa,EAAE,YAAY,IAAI,CAAAA,OAAK,KAAKA,EAAC,IAAI,EAAE,KAAK,IAAI,CAAC,EAAE;AAC9L,eAAW,KAAK,EAAE,YAAa,OAAM,KAAK,SAAS,aAAa,EAAE,IAAI,CAAC;AAAA,UAAa,EAAE,KAAK;AAAA,wBAA2B,EAAE,cAAc,WAAW,IAAI,WAAW,EAAE,cAAc,IAAI,CAAAA,OAAK,KAAKA,EAAC,IAAI,EAAE,KAAK,IAAI,CAAC,EAAE;AACjN,UAAM,KAAK,WAAW,EAAE,UAAU,EAAE;AAAA,EACtC;AACA,aAAW,KAAK,OAAO,gBAAgB;AACrC,UAAM,MAAM,EAAE,OAAO,SAAS,KAAK,GAAG,EAAE,OAAO,MAAM,GAAG,EAAE,CAAC,WAAM,EAAE;AACnE,UAAM,KAAK,YAAY,EAAE,MAAM,SAAS,EAAE,mBAAmB,aAAa,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,aAAa,MAAM,EAAE,MAAM,MAAM,iBAAiB,EAAE,eAAe,KAAK,qBAAqB,MAAM,EAAE,GAAG,EAAE,QAAQ,SAAS,IAAI,MAAM,EAAE,QAAQ,MAAM,oBAAoB,EAAE,MAAM,gBAAgB,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,uBAAuB,EAAE,EAAE;AACpW,UAAM,KAAK,WAAW,EAAE,UAAU,EAAE;AAAA,EACtC;AACA,aAAW,KAAK,OAAO,YAAY;AACjC,UAAM,KAAK,yBAAyB,EAAE,KAAK,kBAAe,EAAE,IAAI,sBAAsB,EAAE,OAAO,kBAAa,EAAE,KAAK,EAAE;AACrH,UAAM,KAAK,YAAY,UAAU,EAAE,KAAK,CAAC,EAAE;AAC3C,UAAM,KAAK,WAAW,EAAE,UAAU,EAAE;AAAA,EACtC;AACA,aAAW,KAAK,OAAO,gBAAgB;AACrC,UAAM,KAAK,8BAA8B,EAAE,KAAK,gBAAgB,EAAE,UAAU,4CAA4C,EAAE,OAAO,kBAAa,EAAE,KAAK,EAAE;AACvJ,UAAM,KAAK,YAAY,EAAE,QAAQ,aAAQ,EAAE,SAAS,KAAK,KAAK,CAAC,IAAI;AACnE,UAAM,KAAK,YAAY,UAAU,EAAE,KAAK,CAAC,EAAE;AAC3C,UAAM,KAAK,WAAW,EAAE,UAAU,EAAE;AAAA,EACtC;AACA,aAAW,KAAK,OAAO,gBAAgB;AACrC,UAAM,KAAK,8BAA8B,EAAE,QAAQ,OAAO,EAAE,QAAQ,4BAA4B,EAAE,KAAK,oBAAoB;AAC3H,UAAM,KAAK,YAAY,UAAU,EAAE,KAAK,CAAC,EAAE;AAC3C,UAAM,KAAK,WAAW,EAAE,UAAU,EAAE;AAAA,EACtC;AACA,aAAW,KAAK,OAAO,cAAc;AACnC,UAAM,KAAK,uBAAuB,EAAE,UAAU,WAAW,EAAE,MAAM,EAAE,SAAS,YAAY,EAAE,KAAK,qBAAqB,EAAE,aAAa,oBAAoB,EAAE,EAAE;AAC3J,eAAW,KAAK,EAAE,SAAU,OAAM,KAAK,UAAU,EAAE,MAAM,UAAO,EAAE,KAAK,KAAK,EAAE,KAAK;AAAA,UAAa,UAAU,EAAE,KAAK,CAAC,EAAE;AACpH,UAAM,KAAK,WAAW,EAAE,UAAU,EAAE;AAAA,EACtC;AACA,aAAW,KAAK,OAAO,UAAU;AAC/B,UAAM,KAAK,sBAAsB,aAAa,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,gBAAW,EAAE,CAAC,QAAQ,iBAAiB,EAAE,EAAE,CAAC,GAAG,EAAE,iBAAiB,OAAO,KAAK,0BAAqB,EAAE,YAAY,EAAE,GAAG,EAAE,oBAAoB,kDAAkD,EAAE,EAAE;AACnQ,UAAM,KAAK,WAAW,EAAE,UAAU,EAAE;AAAA,EACtC;AACA,SAAO;AACT;AAGO,SAAS,wBAAwB,QAAmC;AACzE,SAAO,OAAO,WAAW,SAAS,OAAO,eAAe,SAAS,OAAO,eAAe,SACnF,OAAO,aAAa,SAAS,OAAO,SAAS,SAAS,OAAO,SAAS,SACtE,OAAO,eAAe,SAAS,OAAO,cAAc,SAAS,OAAO,eAAe;AACzF;;;ACv4DA,SAAS,wBAAwB,KAA0D;AACzF,QAAM,WAAW,OAAO,QAAQ,WAAW,MAAM,KAAK;AACtD,MAAI,aAAa,OAAW,QAAO;AACnC,QAAM,MAAM,OAAO,YAAY,cAAe,QAAQ,KAAK,uBAA4D;AACvH,MAAI,QAAQ,SAAS,QAAQ,UAAU,QAAQ,QAAS,QAAO;AAC/D,SAAO;AACT;AAUA,SAAS,kBACP,KACA,SAC+B;AAC/B,QAAM,QAAQ,wBAAwB,GAAG;AACzC,MAAI,UAAU,MAAO,QAAO;AAC5B,QAAM,MAAM,QAAQ,QAAQ,OAAO,QAAQ,WAAW,MAAM;AAC5D,QAAM,cAAc,QAAQ,SAAY,SAAY;AAAA,IAClD,GAAI,IAAI,WAAW,SAAY,EAAE,QAAQ,IAAI,OAAO,IAAI,CAAC;AAAA,IACzD,GAAI,IAAI,YAAY,SAAY,EAAE,SAAS,IAAI,QAAQ,IAAI,CAAC;AAAA,IAC5D,GAAI,IAAI,gBAAgB,SAAY,EAAE,aAAa,IAAI,YAAY,IAAI,CAAC;AAAA,IACxE,GAAI,IAAI,cAAc,SAAY,EAAE,WAAW,IAAI,UAAU,IAAI,CAAC;AAAA,EACpE;AACA,MAAI;AACJ,MAAI;AAAE,aAAS,QAAQ,WAAW;AAAA,EAAE,SAC7B,KAAK;AAOV,YAAQ;AAAA,MACN;AAAA,IACoC,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAAA,IACtF;AACA,WAAO;AAAA,EACT;AACA,QAAM,QAAQ,0BAA0B,MAAM;AAC9C,MAAI,MAAM,SAAS,GAAG;AACpB,QAAI,UAAU,QAAS,OAAM,IAAI,MAAM,aAAa,wBAAwB,MAAM,CAAC;AAAA,EAAoC,MAAM,KAAK,IAAI,CAAC,EAAE;AACzI,eAAW,KAAK,MAAO,SAAQ,KAAK,CAAC;AAAA,EACvC;AACA,SAAO;AACT;AAEO,SAAS,yBAA4B,YAA2B,KAAmE;AACxI,SAAO,kBAAkB,KAAK,OAAK,mBAAmB,YAAmC,CAAC,CAAC;AAC7F;;;ACRA,SAAS,qBAAqB,UAA6E;AACzG,MAAI,aAAa,KAAM,QAAO,MAAM;AACpC,MAAI,MAAM,QAAQ,QAAQ,GAAG;AAC3B,UAAM,QAAQ,IAAI,IAAI,QAAQ;AAC9B,WAAO,UAAQ,MAAM,IAAI,IAAI;AAAA,EAC/B;AACA,SAAO,OAAO,aAAa,aAAa,WAAW;AACrD;AAEA,SAAS,aACP,MACAQ,WACA,SACA,MACA,cACA,YACA,OACA,MACS;AAGT,SAAO,SAAS,UAAa,KAAK,SAAS,IACvC,EAAE,MAAM,QAAQ,MAAM,MAAM,MAAM,EAAE,GAAG,KAAK,GAAG,OAAO,SAAS,MAAM,UAAU,CAAC,GAAGA,SAAQ,EAAE,IAC7F,EAAE,MAAM,QAAQ,MAAM,MAAM,EAAE,GAAG,KAAK,GAAG,OAAO,SAAS,MAAM,UAAU,CAAC,GAAGA,SAAQ,EAAE;AAC7F;AAuBO,SAAS,aACd,eACAA,WACA,SACA,MACA,aACA,WACA,OACA,OACS;AACT,MAAI,OAAO,kBAAkB,UAAU;AACrC,WAAO,aAAa,eAAeA,aAAY,CAAC,GAAG,SAAS,QAAQ,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,aAAa,WAAW,KAAK;AAAA,EACzH;AACA,QAAM,WAAW,qBAAqB,eAAe,QAAQ;AAC7D,QAAM,kBAAkB,eAAe,SAAS;AAChD,QAAM,OAAkB,CACtB,MACAA,WACA,QACAC,OACAC,cACAC,YACAC,QACA,SAGG,aAAa,MAAMJ,aAAY,CAAC,GAAG,QAAQC,OAAMC,cAAaC,YAAWC,QAAO,kBAAkB,OAAO,MAAS;AACtH,EAAC,KAAqD,qBAAqB;AAC5E,MAAI,SAAU,MAAK,uBAAuB;AAC1C,SAAO;AACT;AAGE,aAA0D,qBAAqB;AAuJjF,SAAS,iBAAiB,GAA8E;AACtG,MAAI,UAAU,CAAC,EAAG,QAAO,cAAc,EAAE,EAAE;AAI3C,MAAI,EAAE,OAAO,KAAM,QAAO,cAAc,EAAE,EAAE;AAC5C,SAAO,EAAE,QAAQ,SAAS,IAAI,EAAE,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAkC,IAAI;AACrG;AAyDO,IAAM,kBAAkB,uBAAO,IAAI,yBAAyB;AAK5D,SAAS,iBACd,SACoD;AACpD,QAAM,SAAU,QAA+C,eAAe;AAC9E,SAAO,MAAM,QAAQ,MAAM,IAAI,SAAmD;AACpF;AAyBA,SAAS,UAAU,GAA0B;AAC3C,SAAO,CAAC,CAAC,KAAK,OAAO,MAAM,YACtB,OAAQ,EAAc,OAAO,YAAY,OAAQ,EAAc,OAAO,YACtE,EAAE,UAAW;AACpB;AAqCO,SAAS,wBACd,SAC2G;AAC3G,QAAM,OAAoD,CAAC;AAC3D,QAAM,SAAqD,CAAC;AAC5D,aAAW,KAAK,SAAS;AAIvB,UAAMC,SAAQ,iBAAiB,CAAC;AAChC,QAAIA,WAAU,QAAW;AAAE,WAAK,KAAKA,MAAK;AAAG;AAAA,IAAS;AAKtD,WAAO,KAAK,EAAE,IAAI,EAAE,IAAI,WAAW,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;AAAA,EACtE;AACA,SAAO,EAAE,MAAM,OAAO;AACxB;AAcO,SAAS,qBACd,SAC6G;AAC7G,QAAM,UAAU,iBAAiB,OAAO;AACxC,MAAI,YAAY,OAAW,QAAO;AAClC,QAAM,EAAE,MAAM,OAAO,IAAI,wBAAwB,OAAO;AACxD,QAAMA,SAAQ,oBAAI,IAAiC;AAInD,aAAW,OAAO,KAAM,YAAW,CAAC,MAAMC,KAAI,KAAK,KAAK;AACtD,QAAIA,MAAK,KAAK,QAAQ,QAAQ;AAAE,UAAI;AAAE,QAAAA,MAAK,KAAK,MAAM;AAAA,MAAE,QAAQ;AAAE;AAAA,MAAS;AAAA,IAAE;AAC7E,IAAAD,OAAM,IAAI,MAAMC,KAAI;AAAA,EACtB;AACA,SAAO,EAAE,OAAAD,QAAO,OAAO;AACzB;;;AC7cO,SAAS,qBACd,SACA,MACc;AACd,QAAM,YAAY,qBAAqB,OAAO;AAC9C,MAAI,cAAc,QAAW;AAG3B,WAAO,mBAAmB,OAAO,QAAQ,OAAO,GAA2C,IAAI;AAAA,EACjG;AACA,QAAM,EAAE,OAAO,SAAS,OAAO,IAAI;AACnC,QAAM,UAAU,CAAC,GAAG,OAAO;AAC3B,QAAM,SAAS,mBAAmB,SAAS,EAAE,GAAG,MAAM,YAAY,UAAQ,QAAQ,IAAI,IAAI,EAAE,CAAC;AAC7F,QAAM,aAA6B,OAAO,IAAI,QAAM;AAAA,IAClD,MAAM,EAAE,UAAU,SAAS,IAAI,EAAE,UAAU,KAAK,IAAI,IAAI,aAAa,EAAE,EAAE;AAAA,IACzE,MAAM;AAAA,IACN,QAAQ,yBAAyB,EAAE,EAAE;AAAA,EAGvC,EAAE;AAMF,aAAW,KAAK,QAAQ;AACtB,sBAAkB;AAAA,MAChB,MAAM;AAAA;AAAA;AAAA,MAGN,UAAU;AAAA,MACV,OAAO,EAAE,UAAU,SAAS,IAAI,EAAE,UAAU,KAAK,IAAI,IAAI,aAAa,EAAE,EAAE;AAAA,MAC1E,SAAS,yBAAyB,EAAE,EAAE;AAAA,MACtC,YAAY,0EACL,EAAE,UAAU,SAAS,IAAI,GAAG,EAAE,UAAU,MAAM,aAAa,OAAO;AAAA,MAEzE,WAAW;AAAA,IAEb,CAAC;AAAA,EACH;AACA,SAAO,WAAW,WAAW,IAAI,SAAS,EAAE,GAAG,QAAQ,cAAc,CAAC,GAAG,OAAO,cAAc,GAAG,UAAU,EAAE;AAC/G;;;ACsDA,IAAM,eAAe,CAAC,MACpB,OAAO,MAAM,YAAY,MAAM,QAAQ,UAAW;AAEpD,IAAM,gBAAgB,CAAC,MACrB,MAAM,QAAQ,CAAC;AAOV,SAAS,gBAAgB,SAA6B,MAA0C;AAMrG,QAAM,QAAQ,wBAAwB;AACtC,0BAAwB;AACxB,MAAI;AACJ,MAAI;AACJ,MAAI;AACF,aAAS,YAAY,SAAS,IAAI;AAAA,EACpC,SACO,GAAG;AACR,UAAM,SAAS,aAAa,QAAQ,GAAG,EAAE,IAAI,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;AACxE,aAAS,YAAY,gCAA2B,MAAM,EAAE;AAAA,EAC1D,UACA;AACE,mBAAe,yBAAyB,KAAK;AAAA,EAC/C;AACA,SAAOE,UAAS,QAAQ,YAAY;AACtC;AAgBO,SAAS,gBAAgB,GAA8B;AAC5D,SAAO,EAAE,QAAQ,iBAAiB,KAAK,EAAE,QAAQ,eAAe;AAClE;AA0CA,SAAS,YAAY,SAA6B,MAAsC;AACtF,MAAI,aAAa,OAAO,EAAG,QAAO,cAAc,SAAS,IAAI;AAC7D,MAAI,cAAc,OAAO,EAAG,QAAO,mBAAmB,SAAS,IAAI;AAKnE,SAAO,qBAAqB,SAA8B,IAAI;AAChE;AAEA,SAAS,YAAY,QAA8B;AACjD,SAAO;AAAA,IACL,cAAc;AAAA,IAAG,OAAO;AAAA,IAAG,aAAa;AAAA,IACxC,cAAc,CAAC,EAAE,MAAM,mBAAmB,MAAM,oBAAoB,OAAO,CAAC;AAAA,IAC5E,SAAS,CAAC;AAAA,IAAG,UAAU,CAAC;AAAA,IAAG,UAAU,CAAC;AAAA,IAAG,gBAAgB,CAAC;AAAA,IAAG,SAAS,CAAC;AAAA,IAAG,cAAc,CAAC;AAAA,EAC3F;AACF;AAKA,IAAM,gBAAmD,EAAE,UAAU,GAAG,UAAU,EAAE;AACpF,IAAM,YAA2C;AAAA,EAC/C,cAAc;AAAA,EAAG,kBAAkB;AAAA,EAAG,gBAAgB;AAAA,EAAG,UAAU;AAAA,EAAG,gBAAgB;AACxF;AAEA,SAASC,UAAS,QAAsB,cAA+C;AACrF,QAAM,WAA+B,CAAC;AAEtC,aAAW,KAAK,OAAO,cAAc;AACnC,aAAS,KAAK;AAAA,MACZ,IAAI,EAAE;AAAA,MAAM,MAAM;AAAA,MAAgB,UAAU;AAAA,MAAY,MAAM,EAAE;AAAA,MAChE,SAAS,0BAA0B,EAAE,IAAI;AAAA,MACzC,SAAS,CAAC,EAAE,MAAM;AAAA,IACpB,CAAC;AAAA,EACH;AACA,aAAW,KAAK,OAAO,SAAS;AAC9B,aAAS,KAAK;AAAA,MACZ,IAAI,EAAE;AAAA,MAAI,MAAM;AAAA,MAAkB,UAAU;AAAA,MAAY,MAAM,EAAE;AAAA,MAChE,SAAS,sBAAsB,EAAE,QAAQ;AAAA,MAEzC,SAAS;AAAA,QACP,GAAG,EAAE,QAAQ,IAAI,OAAK,OAAO,EAAE,KAAK,oBAAoB,EAAE,KAAK,MAAM,EAAE,MAAM;AAAA,OAAU,EAAE,UAAU,EAAE;AAAA,QACrG,GAAG,EAAE,SAAS,IAAI,OAAK,OAAO,EAAE,CAAC,gBAAW,EAAE,CAAC,gBAAgB,iBAAiB,EAAE,EAAE,CAAC;AAAA,OAAU,EAAE,UAAU,EAAE;AAAA,MAC/G;AAAA,MACA,WAAW,EAAE;AAAA,IACf,CAAC;AAAA,EACH;AACA,aAAW,MAAM,OAAO,cAAc;AACpC,aAAS,KAAK;AAAA,MACZ,IAAI,GAAG,GAAG,IAAI,OAAO,GAAG,QAAQ;AAAA,MAAI,MAAM;AAAA,MAAgB,UAAU;AAAA,MAAY,MAAM,GAAG;AAAA,MACzF,SAAS,IAAI,GAAG,IAAI,KAAK,GAAG,OAAO;AAAA,MACnC,SAAS,CAAC;AAAA,IACZ,CAAC;AAAA,EACH;AACA,aAAW,KAAK,cAAc;AAC5B,aAAS,KAAK;AAAA;AAAA;AAAA,MAGZ,IAAI,GAAG,EAAE,IAAI,IAAI,EAAE,KAAK;AAAA,MAAI,MAAM;AAAA;AAAA;AAAA,MAGlC,UAAU,EAAE,aAAa,SAAS,aAAa;AAAA,MAC/C,MAAM,EAAE;AAAA,MAAO,SAAS,kBAAkB,CAAC;AAAA,MAAG,SAAS,CAAC;AAAA,IAC1D,CAAC;AAAA,EACH;AACA,aAAW,MAAM,OAAO,gBAAgB;AACtC,aAAS,KAAK;AAAA,MACZ;AAAA,MAAI,MAAM;AAAA,MAAgB,UAAU;AAAA,MAAY,MAAM;AAAA,MACtD,SAAS;AAAA,MACT,SAAS,CAAC;AAAA,IACZ,CAAC;AAAA,EACH;AAEA,WAAS,KAAK,CAAC,GAAG,MAChB,cAAc,EAAE,QAAQ,IAAI,cAAc,EAAE,QAAQ,KACjD,UAAU,EAAE,IAAI,IAAI,UAAU,EAAE,IAAI,MACnC,EAAE,KAAK,EAAE,KAAK,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE;AAE7C,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,IAAI,CAAC,SAAS,KAAK,OAAK,EAAE,aAAa,UAAU;AAAA,IACjD,SAAS;AAAA,MACP,cAAc,OAAO;AAAA,MACrB,OAAO,OAAO;AAAA,MACd,aAAa,OAAO;AAAA,MACpB,SAAS,OAAO,QAAQ;AAAA,MACxB,UAAU,OAAO,SAAS;AAAA,MAC1B,UAAU,OAAO,SAAS;AAAA,MAC1B,cAAc,OAAO,aAAa;AAAA,MAClC,cAAc,OAAO,aAAa;AAAA,MAClC,UAAU,aAAa;AAAA,MACvB,cAAc,OAAO,eAAe;AAAA,IACtC;AAAA,IACA;AAAA,IACA,gBAAgB,OAAO,QAAQ,IAAI,OAAK,EAAE,EAAE,EAAE,KAAK;AAAA,IACnD,QAAQ;AAAA,IACR;AAAA,EACF;AACF;;;ACtRA,SAAS,WAAW,QAAQ,cAA8B;;;AChBnD,SAAS,YAAY,GAAmB;AAC7C,QAAM,IAAI,OAAO,KAAK,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC;AACxC,MAAI,MAAM;AACV,WAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;AACjC,QAAI,IAAI,MAAM,EAAE,SAAS,KAAK,MAAM,EAAG,QAAO;AAC9C,WAAO,EAAE,CAAC;AAAA,EACZ;AACA,UAAQ,IAAI,IAAI,MAAM,MAAM;AAC9B;;;ADoBO,IAAM,OAAO;AAAA;AAAA,EAElB,MAAM,EAAE,OAAO,aAAa,MAAM,KAAK;AAAA;AAAA,EAEvC,QAAQ,EAAE,MAAM,KAAK;AAAA;AAAA,EAErB,OAAO,EAAE,OAAO,cAAc;AAAA;AAAA,EAE9B,OAAO,EAAE,OAAO,eAAe,KAAK,KAAK;AAAA;AAAA,EAEzC,KAAK,EAAE,OAAO,MAAM;AAAA;AAAA,EAEpB,MAAM,EAAE,OAAO,SAAS;AAAA;AAAA,EAExB,OAAO,EAAE,OAAO,QAAQ,MAAM,KAAK;AAAA;AAAA,EAEnC,MAAM,EAAE,OAAO,QAAQ;AAAA;AAAA,EAEvB,OAAO,EAAE,OAAO,OAAO;AACzB;AAqBO,IAAM,IAAI,CAAC,MAAc,OAAc,WAC3C,EAAE,MAAM,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM,GAAI,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM,EAAG;AAEzF,IAAM,QAAQ,MAAY,CAAC;AAI3B,IAAM,OAAO,CAAC,OAAe,QAAc,KAAK,OAAO,OAAO,aACnE,CAAC,EAAE,MAAM,KAAK,OAAO,KAAK,IAAI,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC;AAe5C,IAAM,gBAAgB;AAE7B,IAAM,QAAQ,CAAC,GAAW,MAAuB,EAAE,UAAU,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,EAAE,MAAM;AAGhG,IAAM,WAAW,CAAC,MAAqB,EAAE,UAAU,SAAY,EAAE,OAAO,MAAM,EAAE,MAAM,EAAE,KAAK;AAQ7F,SAAS,QAAQ,MAAoB;AACnC,QAAM,QAAQ,KAAK,IAAI,QAAM,EAAE,GAAG,GAAG,MAAM,SAAS,CAAC,EAAE,EAAE,EAAE,OAAO,OAAK,EAAE,SAAS,EAAE;AAGpF,WAAS,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;AAC1C,UAAM,UAAU,MAAM,CAAC,EAAG,KAAK,QAAQ,OAAO,EAAE;AAChD,UAAM,CAAC,EAAG,OAAO;AACjB,QAAI,YAAY,GAAI;AACpB,UAAM,IAAI;AAAA,EACZ;AACA,SAAO;AACT;AAGO,IAAM,QAAQ,CAAC,UACpB,MAAM,IAAI,OAAK,QAAQ,CAAC,EAAE,IAAI,OAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI;AAgBhE,IAAM,aAAa,oBAAI,IAA2C;AAElE,SAAS,SAAS,OAAwD;AACxE,MAAI,UAAU,OAAW,QAAO,EAAE,KAAK,IAAI,MAAM,GAAG;AACpD,QAAM,MAAM,KAAK,UAAU,KAAK;AAChC,QAAM,MAAM,WAAW,IAAI,GAAG;AAC9B,MAAI,QAAQ,OAAW,QAAO;AAC9B,QAAM,SAAS,OAAO,EAAE,kBAAkB,MAAM,OAAO,EAAE,CAAC;AAC1D,SAAO,IAAI,OAAO,OAAO,GAAG,CAAC;AAC7B,QAAM,OAAO,OAAO,QAAQ,CAAC;AAC7B,SAAO,QAAQ,KAAK;AACpB,QAAM,KAAK,KAAK,QAAQ,GAAG;AAC3B,QAAM,QAAQ,OAAO,KACjB,EAAE,KAAK,IAAI,MAAM,GAAG,IACpB,EAAE,KAAK,KAAK,MAAM,GAAG,EAAE,GAAG,MAAM,KAAK,MAAM,KAAK,CAAC,EAAE,QAAQ,MAAM,EAAE,EAAE;AACzE,aAAW,IAAI,KAAK,KAAK;AACzB,SAAO;AACT;AAYA,IAAI;AAEJ,SAAS,eAAkE;AACzE,MAAI,kBAAkB,OAAW,QAAO;AACxC,QAAM,eAAe;AACrB,QAAM,gBAAgB;AACtB,QAAM,SAAS,OAAO,EAAE,kBAAkB,MAAM,OAAO,IAAI,CAAC;AAC5D,SAAO,IAAI,UAAU;AAAA,IACnB,WAAW;AAAA,IAAG,aAAa;AAAA,IAAG,WAAW;AAAA,IAAK,SAAS;AAAA,IACvD,UAAU;AAAA,IAAe,UAAU;AAAA,IAAc,MAAM;AAAA,EACzD,CAAC,CAAC;AACF,MAAI,QAA2D;AAC/D,WAAS,IAAI,GAAG,KAAK,OAAO,UAAU,UAAU,MAAM,KAAK;AACzD,UAAM,OAAO,OAAO,QAAQ,CAAC;AAC7B,UAAM,IAAI,KAAK,QAAQ,YAAY;AACnC,UAAM,IAAI,KAAK,QAAQ,aAAa;AACpC,QAAI,MAAM,MAAM,MAAM,MAAM,IAAI,EAAG;AAEnC,UAAM,QAAQ,KAAK,YAAY,KAAK,CAAC;AACrC,QAAI,UAAU,GAAI;AAClB,UAAM,QAAQ,IAAI,cAAc;AAChC,UAAM,SAAS,KAAK,QAAQ,KAAK,KAAK;AACtC,QAAI,WAAW,GAAI;AAEnB,UAAM,QAAQ,KAAK,QAAQ,MAAM,KAAK,QAAQ,KAAK,SAAS,CAAC,CAAC;AAC9D,QAAI,UAAU,GAAI;AAClB,YAAQ;AAAA,MACN,KAAK,KAAK,MAAM,OAAO,CAAC;AAAA,MACxB,KAAK,KAAK,MAAM,IAAI,aAAa,QAAQ,CAAC;AAAA,MAC1C,MAAM,KAAK,MAAM,OAAO,QAAQ,CAAC;AAAA,IACnC;AAAA,EACF;AACA,SAAO,QAAQ,KAAK;AACpB,kBAAgB;AAChB,SAAO;AACT;AAIA,SAAS,OAAO,MAAc,MAAsB;AAClD,QAAM,MAAM,aAAa;AACzB,MAAI,QAAQ,KAAM,QAAO;AAGzB,QAAM,OAAO,KAAK,QAAQ,OAAO,EAAE;AACnC,QAAM,QAAQ,KAAK,MAAM,KAAK,MAAM;AACpC,SAAO,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,KAAK;AAC9D;AAMO,SAASC,QAAO,OAAwB,SAAuB,CAAC,GAAW;AAChF,MAAI,OAAO,UAAU,KAAM,QAAO,MAAM,KAAK;AAC7C,QAAM,YAAY,OAAO,UAAU;AACnC,SAAO,MAAM,IAAI,CAAC,SAAS;AAEzB,QAAI,KAAK,WAAW,KAAK,KAAK,CAAC,EAAG,QAAQ,KAAM,QAAO,KAAK,CAAC,EAAG;AAChE,WAAO,QAAQ,IAAI,EAAE,IAAI,CAAC,MAAM;AAC9B,YAAM,EAAE,KAAK,KAAK,IAAI,SAAS,EAAE,KAAK;AACtC,YAAM,OAAO,aAAa,EAAE,SAAS,SAAY,OAAO,EAAE,MAAM,EAAE,IAAI,IAAI,EAAE;AAC5E,aAAO,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI;AAAA,IAC7B,CAAC,EAAE,KAAK,EAAE;AAAA,EACZ,CAAC,EAAE,KAAK,IAAI;AACd;AAKA,IAAM,MAAM,OAAO,aAAa,EAAE;AAClC,IAAM,OAAO,IAAI,OAAO,GAAG,GAAG,YAAY,GAAG,QAAQ,GAAG;AACxD,IAAM,MAAM,IAAI,OAAO,GAAG,GAAG,eAAe,GAAG;AA6BxC,SAAS,UAAU,OAAkB,SAAuB,CAAC,GAAG,SAAS,IAAY;AAC1F,QAAM,SAAS,OAAO,EAAE,kBAAkB,MAAM,QAAQ,OAAO,SAAS,iBAAiB,OAAO,OAAO,CAAC;AACxG,SAAO,IAAI,UAAU;AAAA,IACnB,WAAW,MAAM;AAAA,IACjB,aAAa,MAAM;AAAA,IACnB,GAAI,MAAM,YAAY,SAAY,CAAC,IAAI,EAAE,SAAS,MAAM,QAAQ;AAAA,IAChE,GAAI,MAAM,cAAc,SAAY,CAAC,IAAI,EAAE,WAAW,MAAM,UAAU;AAAA,IACtE,WAAW,MAAM;AAAA,IACjB,YAAY,MAAM,cAAc;AAAA,IAChC,WAAW,MAAM,aAAa;AAAA,IAC9B,SAAS,MAAM;AAAA,IACf,GAAI,MAAM,iBAAiB,SAAY,CAAC,IAAI,EAAE,cAAc,MAAM,aAAa;AAAA,IAC/E,UAAU,MAAM;AAAA;AAAA;AAAA,IAGhB,UAAU,OAAO,UAAU,QAAQ,OAAO,UAAU,QAAQ,MAAM,WAAW,MAAM;AAAA,IACnF,MAAM,MAAM,QAAQ;AAAA,EACtB,CAAC,CAAC;AACF,QAAM,MAAc,CAAC;AACrB,WAAS,OAAO,GAAG,QAAQ,OAAO,QAAQ,QAAQ;AAChD,UAAM,OAAO,OAAO,QAAQ,IAAI;AAChC,UAAM,OAAO,OAAO,UAAU,OAAO,OAAO,KAAK,QAAQ,MAAM,EAAE,EAAE,QAAQ,KAAK,EAAE,EAAE,QAAQ,QAAQ,EAAE;AACtG,QAAI,KAAK,SAAS,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,SAAS,MAAM,KAAK,OAAO,UAAU,KAAK,CAAC,CAAC;AAAA,EACnF;AACA,SAAO,QAAQ,KAAK;AACpB,SAAO;AACT;AAOO,IAAM,MAAM;AAGZ,SAAS,KAAK,MAAc,OAAe,QAA0B;AAC1E,QAAM,MAAgB,CAAC;AACvB,aAAW,QAAQ,KAAK,MAAM,IAAI,GAAG;AACnC,QAAI,OAAO;AACX,eAAW,QAAQ,KAAK,MAAM,KAAK,EAAE,OAAO,OAAK,MAAM,EAAE,GAAG;AAC1D,UAAI,SAAS,GAAI,QAAO;AAAA,eACf,KAAK,SAAS,IAAI,KAAK,UAAU,MAAO,SAAQ,IAAI,IAAI;AAAA,WAC5D;AAAE,YAAI,KAAK,SAAS,IAAI;AAAG,eAAO;AAAA,MAAK;AAAA,IAC9C;AACA,QAAI,KAAK,SAAS,IAAI;AAAA,EACxB;AACA,SAAO;AACT;;;AEtQA,IAAM,SAAS,CAAC,UAAK,UAAK,UAAK,UAAK,UAAK,UAAK,UAAK,QAAG;AAGtD,IAAM,aAA4D;AAAA,EAChE,kBAAkB;AAAA,IAChB,KAAK;AAAA,IACL,MAAM;AAAA,EACR;AAAA,EACA,gBAAgB,EAAE,KAAK,sCAAsC,MAAM,uCAAuC;AAAA,EAC1G,cAAc,EAAE,KAAK,0CAA0C,MAAM,0CAA0C;AAAA,EAC/G,UAAU,EAAE,KAAK,0CAA0C,MAAM,0CAA0C;AAAA,EAC3G,gBAAgB;AAAA,IACd,KAAK;AAAA,IACL,MAAM;AAAA,EACR;AACF;AAUA,IAAM,kBAA0C;AAAA,EAC9C,iBACE;AAAA,EAKF,cACE;AAAA,EAIF,eACE;AAIJ;AASA,SAAS,iBAAiB,IAAoB;AAC5C,MAAI,OAAO,MAAO,QAAO;AACzB,MAAI,OAAO,UAAW,QAAO;AAC7B,QAAM,QAAQ,GAAG,MAAM,GAAG;AAC1B,QAAM,SAAS,MAAM,IAAI,OAAK,EAAE,QAAQ,MAAM,EAAE,CAAC,EAAE,KAAK,GAAG;AAC3D,MAAI,MAAM,WAAW,EAAG,QAAO,gBAAgB,MAAM;AACrD,MAAI,MAAM,SAAS,EAAG,QAAO,eAAe,YAAY,MAAM,MAAM,CAAC;AACrE,SAAO,sBAAsB,OAAO,SAAS,KAAK,GAAG,OAAO,MAAM,GAAG,EAAE,CAAC,WAAM,MAAM;AACtF;AAGA,IAAM,aAAqC;AAAA,EACzC,kBAAkB;AAAA,EAElB,gBAAgB;AAAA,EAEhB,cAAc;AAAA,EAEd,UAAU;AAAA,EAEV,gBAAgB;AAElB;AAYA,SAAS,cAAc,GAA+B;AACpD,QAAM,MAAgB,CAAC;AACvB,aAAW,KAAK,EAAE,SAAS;AACzB,UAAM,IAAI,EAAE,QAAQ,SAAS;AAC7B,QAAI,MAAM,GAAI;AACd,UAAM,IAAI,EAAE,MAAM,IAAI,CAAC;AACvB,QAAI,CAAC,IAAI,SAAS,CAAC,EAAG,KAAI,KAAK,CAAC;AAAA,EAClC;AACA,SAAO;AACT;AASA,SAAS,aAAa,UAAqD;AACzE,QAAM,SAAuB,CAAC;AAC9B,QAAM,QAAQ,oBAAI,IAAwB;AAC1C,aAAW,KAAK,UAAU;AAKxB,UAAM,OAAO,EAAE,SAAS,iBAAiB,gBAAgB,KAAK,EAAE,OAAO,IAAI,CAAC,IAAI;AAChF,UAAM,OAAO,cAAc,CAAC,EAAE,CAAC,MACzB,SAAS,SAAY,SAAY,gBAAgB,IAAI,OACrD,EAAE,SAAS,iBAAiB,EAAE,QAAQ,QAAQ,kBAAkB,EAAE,IAAI,WACvE,WAAW,EAAE,IAAI,KACjB,EAAE;AAIP,UAAM,MAAM,KAAK,UAAU,CAAC,EAAE,MAAM,QAAQ,IAAI,CAAC;AACjD,QAAI,IAAI,MAAM,IAAI,GAAG;AACrB,QAAI,MAAM,QAAW;AACnB,UAAI,EAAE,OAAO,IAAI,MAAM,MAAM,EAAE,MAAM,UAAU,EAAE,UAAU,UAAU,CAAC,EAAE;AACxE,YAAM,IAAI,KAAK,CAAC;AAChB,aAAO,KAAK,CAAC;AAAA,IACf;AACA,MAAE,SAAS,KAAK,CAAC;AAAA,EACnB;AACA,SAAO,QAAQ,CAAC,GAAG,MAAM;AAAE,MAAE,QAAQ,OAAO,CAAC,KAAK,OAAO,aAAa,KAAK,CAAC;AAAA,EAAE,CAAC;AAC/E,SAAO;AACT;AAIO,SAAS,eAAe,GAAqB,OAA8B,CAAC,GAAW;AAC5F,QAAM,QAAQ,KAAK,SAAS;AAC5B,QAAM,OAAO,KAAK,QAAQ;AAC1B,QAAM,QAAQ,KAAK,SAAS;AAC5B,QAAM,IAAI,EAAE;AACZ,QAAM,MAAc,CAAC;AAIrB,MAAI,EAAE,MAAM,EAAE,iBAAiB,GAAG;AAChC,UAAMC,SAAQ,CAAC,GAAG,YAAY,EAAE,KAAK,CAAC,IAAI,YAAY,EAAE,YAAY,CAAC,6BAA6B;AAClG,QAAI,EAAE,cAAc,EAAG,CAAAA,OAAM,KAAK,GAAG,YAAY,EAAE,WAAW,CAAC,cAAc;AAC7E,QAAI,EAAE,WAAW,EAAG,CAAAA,OAAM,KAAK,GAAG,YAAY,EAAE,QAAQ,CAAC,WAAW;AACpE,QAAI,EAAE,WAAW,EAAG,CAAAA,OAAM,KAAK,GAAG,YAAY,EAAE,QAAQ,CAAC,kCAAkC;AAC3F,QAAI,EAAE,eAAe,EAAG,CAAAA,OAAM,KAAK,GAAG,YAAY,EAAE,YAAY,CAAC,gCAAgC;AACjG,QAAI,KAAK,CAAC,EAAE,WAAM,KAAK,IAAI,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,EAAE,0BAAqB,KAAK,IAAI,CAAC,CAAC;AACtF,QAAI,KAAK,CAAC,EAAE,KAAKA,OAAM,KAAK,QAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;AAClD,WAAO;AAAA,EACT;AASA,MAAI,gBAAgB,CAAC,EAAG,QAAO,gBAAgB,GAAG,MAAM,OAAO,KAAK;AAEpE,QAAM,SAAS,aAAa,EAAE,QAAQ;AACtC,QAAM,WAAW,EAAE,SAAS,OAAO,OAAK,EAAE,aAAa,UAAU;AAEjE,QAAM,WAAW,EAAE,SAAS,SAAS,EAAE;AAEvC,MAAI,KAAK;AAAA,IACP,EAAE,WAAM,KAAK,IAAI;AAAA,IACjB,EAAE,MAAM,KAAK,MAAM;AAAA,IACnB,EAAE,YAAO,KAAK,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASnB,EAAE,GAAG,YAAY,QAAQ,CAAC,WAAW,aAAa,IAAI,KAAK,GAAG,OACpD,YAAY,EAAE,YAAY,CAAC,UAAU,EAAE,iBAAiB,IAAI,KAAK,GAAG,IAAI,KAAK,IAAI;AAAA,EAC7F,CAAC;AACD,MAAI,KAAK;AAAA,IACP,EAAE,IAAI;AAAA,IACN,EAAE,GAAG,YAAY,OAAO,MAAM,CAAC,oBAAoB,OAAO,WAAW,IAAI,KAAK,GAAG,IAAI,KAAK,MAAM;AAAA,IAChG,EAAE,OAAO,SAAS,EAAE,SAAS,SAAS,qDAAqD,KAAK,KAAK,KAAK;AAAA,EAC5G,CAAC;AACD,aAAW,KAAK;AAAA,KACb,EAAE,QAAQ,IACP,GAAG,YAAY,EAAE,KAAK,CAAC,gBAAgB,EAAE,UAAU,IAAI,KAAK,GAAG,YAC1D,EAAE,UAAU,IAAI,UAAU,MAAM,8DAErC,MACF;AAAA,IAEF,QAAQ;AAAA,IAAG;AAAA,EAAI,EAAG,KAAI,KAAK,CAAC,EAAE,GAAG,KAAK,KAAK,CAAC,CAAC;AAG/C,MAAI,EAAE,eAAe,GAAG;AACtB,QAAI,KAAK,CAAC,EAAE,oBAAe,YAAY,EAAE,YAAY,CAAC,2FACS,KAAK,IAAI,CAAC,CAAC;AAAA,EAC5E;AAIA,MAAI,UAAU;AAEd,MAAI,QAAQ;AACZ,aAAW,KAAK,QAAQ;AACtB,UAAM,OAAa,EAAE,aAAa,aAAa,KAAK,MAAM,KAAK;AAC/D,QAAI,KAAK,MAAM,CAAC;AAChB,QAAI,KAAK,KAAK,OAAO,KAAK,KAAK,CAAC;AAChC,UAAM,cAAc,EAAE,SAAS,OAAO,OAAK,KAAK,SAAS,IAAI,EAAE,EAAE,MAAM,IAAI,EAAE;AAC7E,QAAI,KAAK;AAAA,MACP,EAAE,IAAI,EAAE,KAAK,KAAK,IAAI;AAAA,MACtB;AAAA,QAAE,GAAG,YAAY,EAAE,SAAS,MAAM,CAAC,IAC5B,EAAE,SAAS,WAAW,IAAI,WAAW,EAAE,IAAI,GAAG,OAAO,EAAE,OAAO,WAAW,EAAE,IAAI,GAAG,QAAQ,EAAE,IAAI;AAAA,QACvG,KAAK;AAAA,MAAM;AAAA,MACX,EAAE,EAAE,aAAa,aAAa,uBAAuB,oBAAoB,KAAK,KAAK;AAAA,IACrF,CAAC;AACD,eAAW,KAAK,KAAK,EAAE,MAAM,QAAQ,GAAG,EAAE,EAAG,KAAI,KAAK,CAAC,EAAE,MAAM,GAAG,EAAE,GAAG,KAAK,KAAK,CAAC,CAAC;AACnF,QAAI,CAAC,SAAS;AACZ,gBAAU;AACV,UAAI,KAAK,MAAM,CAAC;AAChB,UAAI,KAAK,CAAC;AAAA,QAAE;AAAA,QACV,KAAK;AAAA,MAAK,CAAC,CAAC;AACd,UAAI,KAAK,CAAC,EAAE,oCAAoC,KAAK,KAAK,CAAC,CAAC;AAAA,IAC9D;AACA,QAAI,KAAK,MAAM,CAAC;AAShB,UAAM,MAAM,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,EAAE,SAAS,IAAI,OAAK,EAAE,GAAG,MAAM,CAAC,CAAC,IAAI;AAC1E,UAAM,QAAQ,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,EAAE,SAAS,IAAI,OAAK,WAAW,GAAG,IAAI,EAAE,KAAK,MAAM,CAAC,CAAC,IAAI;AAChG,QAAI,WAAW;AACf,eAAW,KAAK,EAAE,UAAU;AAC1B,UAAI,SAAS,MAAO;AACpB;AAGA,UAAI,CAAC,YAAY,KAAK,cAAc,IAAI,EAAE,EAAE,MAAM,QAAW;AAC3D,mBAAW;AACX,YAAI,KAAK,GAAG,UAAU,GAAG,GAAG,MAAM,IAAI,EAAE,KAAK;AAC7C,YAAI,EAAE,SAAS,SAAS,EAAG,KAAI,KAAK,MAAM,CAAC;AAC3C;AAAA,MACF;AACA,YAAM,IAAI,WAAW,GAAG,IAAI;AAC5B,UAAI,KAAK;AAAA,QACP,EAAE,IAAI,EAAE,KAAK,KAAK,IAAI;AAAA,QACtB,EAAE,EAAE,IAAI,KAAK,OAAO,GAAG;AAAA,QACvB,EAAE,EAAE,KAAK,KAAK,OAAO,CAAC;AAAA,QACtB,EAAE,EAAE,MAAM,KAAK,QAAQ,KAAK;AAAA,QAC5B,EAAE,EAAE,MAAM,EAAE,OAAO,KAAK,OAAO,KAAK,KAAK;AAAA;AAAA;AAAA,QAGzC,EAAE,KAAK,SAAS,IAAI,EAAE,EAAE,MAAM,OAAO,wBAAiB,IAAI,KAAK,IAAI;AAAA,MACrE,CAAC;AAAA,IACH;AACA,QAAI,SAAS,MAAO;AAAA,EACtB;AAEA,MAAI,QAAQ,EAAE,SAAS,QAAQ;AAC7B,QAAI,KAAK,MAAM,CAAC;AAChB,QAAI,KAAK;AAAA,MAAC,EAAE,YAAO,YAAY,EAAE,SAAS,SAAS,KAAK,CAAC,yBAAoB,KAAK,KAAK;AAAA,MACrF,EAAE,WAAW,EAAE,SAAS,MAAM,IAAI,KAAK,MAAM;AAAA,MAC7C,EAAE,sCAAsC,KAAK,KAAK;AAAA,IAAC,CAAC;AAAA,EACxD;AAIA,MAAI,CAAC,EAAE,MAAM,EAAE,eAAe,SAAS,GAAG;AACxC,QAAI,KAAK,MAAM,CAAC;AAChB,QAAI,KAAK,KAAK,OAAO,KAAK,KAAK,CAAC;AAChC,UAAM,OAAO,cAAc,EAAE,eAAe,IAAI,OAAK,IAAI,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC;AACzE,QAAI,KAAK,CAAC,EAAE,kEAAkE,KAAK,KAAK,CAAC,CAAC;AAC1F,eAAW,KAAK,KAAK,MAAM,QAAQ,GAAG,EAAE,EAAG,KAAI,KAAK,CAAC,EAAE,KAAK,GAAG,EAAE,GAAG,KAAK,KAAK,CAAC,CAAC;AAAA,EAClF;AAOA,MAAI,KAAK,MAAM,CAAC;AAChB,QAAM,WAAW,KAAK,SAAS,QAAQ;AACvC,QAAM,QAAQ;AAAA,IACZ,GAAG,YAAY,QAAQ,CAAC,WAAW,aAAa,IAAI,KAAK,GAAG;AAAA,IAC5D,GAAG,YAAY,SAAS,SAAS,EAAE,YAAY,CAAC;AAAA,IAChD,GAAG,YAAY,OAAO,MAAM,CAAC,SAAS,OAAO,WAAW,IAAI,KAAK,GAAG;AAAA;AAAA;AAAA,IAGpE,GAAI,EAAE,eAAe,IAAI,CAAC,GAAG,YAAY,EAAE,YAAY,CAAC,uBAAuB,IAAI,CAAC;AAAA,EACtF;AACA,MAAI,KAAK;AAAA,IACP,EAAE,WAAM,KAAK,IAAI;AAAA,IACjB,EAAE,MAAM,KAAK,IAAI,GAAG,KAAK,MAAM;AAAA,IAC/B,EAAE,sCAAmC,KAAK,KAAK;AAAA,EACjD,CAAC;AACD,MAAI,WAAW,KAAK,KAAK,eAAe,QAAW;AACjD,QAAI,KAAK;AAAA,MAAC,EAAE,eAAQ,KAAK,IAAI;AAAA,MAC3B,EAAE,GAAG,YAAY,QAAQ,CAAC,6CAA6C,KAAK,IAAI;AAAA,IAAC,CAAC;AACpF,eAAW,KAAK,KAAK,KAAK,YAAY,QAAQ,GAAG,EAAE,EAAG,KAAI,KAAK,CAAC,EAAE,MAAM,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC,CAAC;AAC7F,eAAW,KAAK;AAAA,MAAK;AAAA,MAErB,QAAQ;AAAA,MAAG;AAAA,IAAE,EAAG,KAAI,KAAK,CAAC,EAAE,MAAM,GAAG,EAAE,GAAG,KAAK,KAAK,CAAC,CAAC;AAAA,EACxD;AACA,SAAO;AACT;AAIA,IAAM,aAAqC;AAAA,EACzC,cACE;AAAA,EAIF,mBACE;AAAA,EAIF,oBACE;AAGJ;AAWA,SAAS,gBACP,GAAqB,MAAc,OAAe,OAC1C;AACR,QAAM,MAAc,CAAC;AACrB,QAAM,QAAQ,EAAE,OAAO;AACvB,MAAI,KAAK;AAAA,IAAC,EAAE,WAAM,KAAK,IAAI;AAAA,IAAG,EAAE,MAAM,KAAK,MAAM;AAAA,IAAG,EAAE,YAAO,KAAK,KAAK;AAAA,IACrE,EAAE,qBAAqB,KAAK,IAAI;AAAA,EAAC,CAAC;AACpC,MAAI,KAAK,CAAC,EAAE,6BAA0B,YAAY,MAAM,MAAM,CAAC,QACpD,MAAM,WAAW,IAAI,KAAK,GAAG,eAAe,KAAK,IAAI,CAAC,CAAC;AAClE,aAAW,KAAK;AAAA,IACd;AAAA,IAEA,QAAQ;AAAA,IAAG;AAAA,EAAI,EAAG,KAAI,KAAK,CAAC,EAAE,GAAG,KAAK,KAAK,CAAC,CAAC;AAI/C,QAAM,SAAS,oBAAI,IAAoC;AACvD,aAAW,KAAK,OAAO;AACrB,UAAM,IAAI,OAAO,IAAI,EAAE,IAAI;AAC3B,QAAI,MAAM,OAAW,QAAO,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AAAA,QACtC,GAAE,KAAK,CAAC;AAAA,EACf;AACA,MAAI,QAAQ;AACZ,aAAW,CAAC,MAAM,KAAK,KAAK,QAAQ;AAClC,QAAI,KAAK,MAAM,CAAC;AAChB,QAAI,KAAK,KAAK,OAAO,KAAK,KAAK,CAAC;AAChC,QAAI,KAAK;AAAA,MACP,EAAE,YAAO,KAAK,IAAI;AAAA,MAClB,EAAE,GAAG,YAAY,MAAM,MAAM,CAAC,QAAQ,MAAM,WAAW,IAAI,KAAK,GAAG,sBAAsB,KAAK,MAAM;AAAA,MACpG,EAAE,OAAO,IAAI,KAAK,KAAK,KAAK;AAAA,IAC9B,CAAC;AACD,eAAW,KAAK,KAAK,WAAW,IAAI,KAAK,MAAM,CAAC,EAAG,QAAQ,QAAQ,GAAG,EAAE,GAAG;AACzE,UAAI,KAAK,CAAC,EAAE,MAAM,GAAG,EAAE,GAAG,KAAK,KAAK,CAAC,CAAC;AAAA,IACxC;AACA,QAAI,KAAK,MAAM,CAAC;AAChB,eAAW,KAAK,OAAO;AACrB,UAAI,SAAS,MAAO;AACpB;AACA,UAAI,KAAK,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,MAAM,KAAK,KAAK,CAAC,CAAC;AAAA,IAC5C;AACA,QAAI,SAAS,MAAO;AAAA,EACtB;AACA,MAAI,QAAQ,MAAM,QAAQ;AACxB,QAAI,KAAK,MAAM,CAAC;AAChB,QAAI,KAAK;AAAA,MAAC,EAAE,YAAO,YAAY,MAAM,SAAS,KAAK,CAAC,iBAAY,KAAK,KAAK;AAAA,MACxE,EAAE,WAAW,MAAM,MAAM,IAAI,KAAK,MAAM;AAAA,MAAG,EAAE,sCAAsC,KAAK,KAAK;AAAA,IAAC,CAAC;AAAA,EACnG;AAEA,MAAI,KAAK,MAAM,CAAC;AAGhB,MAAI,KAAK;AAAA,IAAC,EAAE,WAAM,KAAK,IAAI;AAAA,IACzB,EAAE,iCAA4B,YAAY,MAAM,MAAM,CAAC,qBAAqB,KAAK,MAAM;AAAA,IACvF,EAAE,4CAAyC,KAAK,KAAK;AAAA,EAAC,CAAC;AACzD,SAAO;AACT;AAEO,SAAS,gBAAgB,GAAqB,OAA8B,CAAC,GAAW;AAC7F,SAAOC,QAAO,eAAe,GAAG,IAAI,GAAG,IAAI;AAC7C;AASA,SAAS,WAAW,GAAqB,MAEvC;AACA,QAAM,OAAO,KAAK,cAAc,IAAI,EAAE,EAAE;AACxC,QAAM,SAAS,KAAK,WAAW,IAAI,EAAE,EAAE;AACvC,QAAM,OAAO,KAAK,MAAM,IAAI,EAAE,EAAE;AAChC,QAAM,SAAS,MAAM,UAAU,OAAK,MAAM,KAAK,KAAK;AACpD,MAAI,UAAU,GAAG;AACf,UAAM,IAAI,MAAM,KAAK,MAAM;AAC3B,WAAO;AAAA,MACL,KAAK,OAAO,MAAM;AAAA,MAClB,OAAO,SAAS,MAAM,KAAK,IAAI,MAAM,GAAG,EAAE;AAAA,MAC1C,MAAM,MAAM,SACR,yCACA,4BAAuB,YAAY,EAAE,SAAS,CAAC;AAAA,MACnD,MAAM;AAAA,IACR;AAAA,EACF;AACA,QAAM,UAAU,EAAE,QAAQ,IAAI,OAAK,EAAE,MAAM,IAAI,EAAE,CAAC,CAAE,EAAE,KAAK,OAAK,EAAE,SAAS,YAAY,CAAC;AACxF,MAAI,YAAY,QAAW;AACzB,UAAMC,KAAI,+CAA+C,KAAK,OAAO;AACrE,QAAIA,OAAM,MAAM;AACd,aAAO,EAAE,KAAK,OAAOA,GAAE,CAAC,CAAC,IAAI,MAAM,WAAWA,GAAE,CAAC,CAAC,IAAI,MAAM,uBAAuBA,GAAE,CAAC,CAAC,IAAI,MAAM,MAAM;AAAA,IACzG;AAAA,EACF;AACA,QAAM,IAAI,kBAAkB,KAAK,EAAE,EAAE;AACrC,MAAI,MAAM,MAAM;AAEd,UAAM,OAAO,YAAY,KAAK,EAAE,OAAO,IAAI,CAAC;AAC5C,WAAO,EAAE,KAAK,OAAO,EAAE,CAAC,CAAC,IAAI,MAAM,MAAM,EAAE,CAAC,CAAC,IAAI,MAAM,SAAS,SAAY,KAAK,aAAa,IAAI,MAAM,MAAM,MAAM;AAAA,EACtH;AACA,SAAO,EAAE,KAAK,IAAI,MAAM,IAAI,MAAM,EAAE,QAAQ,MAAM,IAAI,EAAE,CAAC,EAAG,MAAM,GAAG,EAAE,GAAG,MAAM,MAAM;AACxF;AAGA,SAAS,UACP,GACA,GACA,MACA,WACoC;AACpC,QAAM,MAAc,CAAC;AACrB,QAAM,OAAO,KAAK,MAAM,IAAI,EAAE,EAAE;AAChC,QAAM,OAAO,KAAK,cAAc,IAAI,EAAE,EAAE;AACxC,QAAM,SAAS,KAAK,WAAW,IAAI,EAAE,EAAE;AACvC,MAAI,SAAS;AAEb,MAAI,KAAK;AAAA,IACP,EAAE,IAAI,EAAE,KAAK,KAAK,EAAE,aAAa,aAAa,KAAK,MAAM,KAAK,IAAI;AAAA,IAClE,EAAE,EAAE,IAAI,KAAK,KAAK;AAAA,IAClB;AAAA,MAAE,SAAS,SACP,KACA,wBAAmB,YAAY,KAAK,SAAS,CAAC;AAAA,MAClD,KAAK;AAAA,IAAK;AAAA,IACV,EAAE,cAAc,CAAC,EAAE,SAAS,IAAI,wBAAwB,IAAI,KAAK,IAAI;AAAA,IACrE,EAAE,KAAK,SAAS,IAAI,EAAE,EAAE,MAAM,OAAO,wBAAiB,IAAI,KAAK,IAAI;AAAA,EACrE,CAAC;AAID,MAAI,SAAS,QAAW;AACtB,UAAM,KAAK,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,UAAU,CAAC,EAAE,GAAG,IAAI,OAAK,EAAE,MAAM,CAAC,CAAC;AAC3E,SAAK,QAAQ,CAAC,IAAI,MAAM;AACtB,YAAM,UAAU,MAAM,KAAK,CAAC;AAC5B,YAAMC,OAAM,OAAO;AAGnB,YAAM,SAAS,iBAAiB,EAAE;AAClC,YAAM,OAAO,YAAY,SACrB,KACAA,OACE,uBAAkB,YAAY,KAAM,SAAS,CAAC,KAC9C,yBAAoB,YAAY,QAAQ,SAAS,CAAC;AACxD,UAAI,KAAK;AAAA,QACP,EAAE,SAAS,MAAS;AAAA,QACpB,EAAE,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,IAAIA,OAAM,KAAK,MAAM,KAAK,OAAO,CAAC;AAAA,QAC5D,EAAE,GAAG;AAAA,QACL,GAAG,SAAS,CAAC,KAAK,IAAI,MAAM,GAAG,EAAE,GAAGA,OAAM,KAAK,SAAS,KAAK,OAAO,EAAE;AAAA,QACtE,EAAE,GAAG;AAAA,QACL,EAAE,QAAQA,OAAM,KAAK,OAAO,KAAK,OAAO,EAAE;AAAA,QAC1C,EAAE,MAAMA,OAAM,KAAK,OAAO,KAAK,KAAK;AAAA,MACtC,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAGA,MAAI,SAAS,UAAa,SAAS,QAAW;AAC5C,UAAM,SAAS,KAAK,UAAU,OAAK,MAAM,KAAK;AAC9C,QAAI,UAAU,GAAG;AACf,iBAAW,KAAK;AAAA,QACd,eAAe,MAAM,mFACJ,YAAY,KAAK,SAAS,CAAC;AAAA,SAE3C,KAAK,SAAS,iBAAiB;AAAA,QAAG;AAAA,MAAE,EAAG,KAAI,KAAK,CAAC,EAAE,OAAO,GAAG,EAAE,GAAG,KAAK,KAAK,CAAC,CAAC;AAAA,IACnF;AAAA,EACF;AAGA,aAAW,UAAU,EAAE,SAAS;AAC9B,UAAM,QAAQ,OAAO,MAAM,IAAI,EAAE,CAAC;AAClC,QAAI,MAAM,SAAS,YAAY,GAAG;AAChC,YAAM,IAAI,+CAA+C,KAAK,KAAK;AACnE,YAAM,OAAO,MAAM,OACf,QACA,OAAO,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,wBAAwB,EAAE,CAAC,CAAC;AAE3D,iBAAW,KAAK,KAAK,OAAO,KAAK,SAAS,iBAAiB,GAAG,EAAE,EAAG,KAAI,KAAK,CAAC,EAAE,OAAO,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC;AAAA,IAC3G,WACS,SAAS,UAAa,CAAC,OAAO,SAAS,SAAS,GAAG;AAC1D,iBAAW,KAAK,KAAK,QAAQ,KAAK,SAAS,iBAAiB,GAAG,EAAE,EAAG,KAAI,KAAK,CAAC,EAAE,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC;AAAA,IACjG;AAAA,EACF;AAKA,MAAI,aAAa,SAAS,QAAW;AACnC,UAAM,QAAQ,KAAK,KAAK,KAAK,OAAK,EAAE,GAAG;AACvC,UAAM,WAAW,KAAK,KAAK,KAAK,OAAK,CAAC,EAAE,OAAO,EAAE,cAAc,MAAS;AACxE,UAAM,QAAQ,YAAY,KAAK,KAAK,KAAK,OAAK,EAAE,cAAc,MAAS,IAAI;AAC3E,QAAI,SAAS,QAAW;AACtB,UAAI,KAAK,GAAG,UAAU;AAAA,QACpB,MAAM,KAAK;AAAA,QACX,UAAU,KAAK,eAAe,SAAY,KAAK,SAAS,GAAG,KAAK,UAAU,IAAI,KAAK,MAAM;AAAA,QACzF,MAAM,KAAK;AAAA,QACX,QAAQ,KAAK;AAAA,QACb,UAAU,KAAK,SAAS,QAAQ,OAAO,GAAG;AAAA,QAC1C,SAAS,UAAU,SACf,uCACA,cAAc,YAAY,KAAK,SAAS,CAAC;AAAA,QAC7C,cAAc,UAAU,UAAa,aAAa,SAC9C,OAAO,SAAS,KAAK,sBAAsB,MAAM,KAAK,6BACtD;AAAA,QACJ,MAAM;AAAA,MACR,GAAG,MAAM,OAAO,CAAC;AACjB,eAAS;AAAA,IACX;AAAA,EACF;AACA,SAAO,EAAE,OAAO,KAAK,OAAO;AAC9B;;;AChjBA,IAAM,QAAQ,CAAC,IAAc,OAAwB;AACnD,MAAI,GAAG,SAAS,MAAO,QAAO;AAC9B,MAAI,GAAG,SAAS,QAAS,QAAO;AAChC,aAAW,KAAK,GAAG,OAAQ,KAAI,MAAM,EAAE,MAAM,MAAM,EAAE,GAAI,QAAO;AAChE,SAAO;AACT;AAEA,SAAS,OAAO,SAAkC,WAA+B;AAC/E,MAAI,IAAI;AACR,aAAW,KAAK,SAAS;AACvB,QAAI,IAAI,EAAE,KAAK,QAAQ;AACrB,UAAI,OAAO;AACX,UAAI,YAAY;AAChB,eAAS,IAAI,GAAG,IAAI,GAAG,IAAK,KAAI,EAAE,KAAK,WAAW,CAAC,MAAM,IAAI;AAAE;AAAQ,oBAAY,IAAI;AAAA,MAAE;AACzF,UAAI,UAAU,EAAE,KAAK,QAAQ,MAAM,SAAS;AAC5C,UAAI,YAAY,GAAI,WAAU,EAAE,KAAK;AACrC,aAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,QAAQ,IAAI,YAAY,GAAG,UAAU,EAAE,KAAK,MAAM,WAAW,OAAO,EAAE;AAAA,IACvG;AACA,SAAK,EAAE,KAAK;AAAA,EACd;AACA,SAAO,EAAE,QAAQ,SAAS,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG;AAC7D;AAMO,SAAS,kBAAkB,GAAiB,SAAkC,MAA2D;AAC9I,QAAM,SAAS,KAAK,IAAI,MAAM,CAAC;AAC/B,QAAM,QAAQ,KAAK,IAAY,MAAM,EAAE;AACvC,MAAI,YAAY;AAChB,MAAI,kBAAkB;AACtB,MAAI,OAAO;AACX,aAAW,KAAK,SAAS;AACvB,aAAS,IAAI,GAAG,IAAI,EAAE,KAAK,QAAQ,KAAK;AACtC,YAAM,KAAK,EAAE,KAAK,WAAW,CAAC;AAC9B,UAAI,SAAS;AACb,eAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,YAAI,MAAM,KAAK,CAAC,EAAG,UAAU,EAAE,GAAG;AAChC,iBAAO,CAAC;AACR,cAAI,MAAM,CAAC,MAAM,GAAI,OAAM,CAAC,IAAI,OAAO;AACvC,mBAAS;AAAA,QACX;AAAA,MACF;AACA,UAAI,OAAQ;AAAA,IACd;AACA,YAAQ,EAAE,KAAK;AACf,uBAAmB,EAAE,KAAK;AAAA,EAC5B;AACA,SAAO;AAAA,IACL,UAAU,EAAE;AAAA,IACZ;AAAA,IACA;AAAA,IACA,MAAM,KAAK,IAAI,CAAC,GAAG,OAAO;AAAA,MACxB,OAAO;AAAA,MACP,KAAK,EAAE,SAAS,SAAS;AAAA,MACzB,WAAW,OAAO,CAAC;AAAA,MACnB,GAAI,MAAM,CAAC,KAAM,IAAI,EAAE,WAAW,OAAO,SAAS,MAAM,CAAC,CAAE,EAAE,IAAI,CAAC;AAAA,IACpE,EAAE;AAAA,EACJ;AACF;AAGO,SAAS,aAAaC,aAAsE;AACjG,SAAOA,YAAW,IAAI,QAAM,EAAE,UAAU,WAAW,CAAC,EAAE,EAAE;AAC1D;;;AC9GA,IAAM,QAAQ;AAsBd,SAAS,UAAU,IAA4B;AAC7C,MAAI,OAAO,OAAO,WAAY,QAAO;AACrC,QAAM,OAAO,SAAS,UAAU,SAAS,KAAK,EAAE;AAChD,MAAI,CAAC,KAAK,SAAS,eAAe,EAAG,QAAO;AAM5C,QAAM,OAAQ,GAA0B;AACxC,SAAO,OAAO,SAAS,YAAY,KAAK,SAAS,KAC3C,WAAkD,IAAI,MAAM,KAC9D,OACA;AACN;AAyDO,SAAS,QACd,YACA,cACA,OAA4B,CAAC,GACV;AAOnB,2BAAyB,YAAY,KAAK,WAAW;AAKrD,QAAM,QAAQ,6BAA6B;AAC3C,MAAI,WAAW;AACf,MAAI;AACF,UAAM,MAAM,YAAY,YAAY,cAAc,IAAI;AACtD,eAAW;AACX,WAAO;AAAA,EACT,UAAE;AAAU,UAAM,QAAQ;AAAA,EAAE;AAC9B;AAEA,SAAS,YACP,YACA,cACA,OAA4B,CAAC,GACV;AACnB,QAAM,OAAO,KAAK,aAAa,OAAO,iBAAiB,UAAiC,IAAI;AAC5F,QAAM,WAA0B;AAAA,IAC9B,GAAI,KAAK,aAAa,SAAY,CAAC,IAAI,EAAE,UAAU,KAAK,SAAS;AAAA,IACjE,GAAI,KAAK,eAAe,SAAY,CAAC,IAAI,EAAE,YAAY,KAAK,WAAW;AAAA,IACvE,GAAI,SAAS,SAAY,CAAC,IAAI,EAAE,UAAU,KAAK;AAAA,EACjD;AASA,QAAM,EAAE,MAAM,OAAO,IAAI,mBAAmB,EAAE,CAAC,KAAK,GAAG,WAAkC,GAAG,QAAQ;AAWpG,QAAM,WAAW,gBAAgB,IAAI;AACrC,QAAM,QAAQ,WAAW,QAAQ,EAAE,KAAK;AAaxC,QAAM,UAAU,KAAK,aAAa;AAClC,QAAM,WAAW,YAAY,UAAa,QAAQ,WAAW,OAAO,SAAS,UAAU;AACvF,QAAM,UAAU,OAAO,IAAI,CAAC,GAAG,MAAM,KAAK,WAAW,CAAC,KAAK,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC;AAUjF,QAAM,YAAY,QAAQ,OAAiB,CAAC,KAAK,GAAG,MAAO,MAAM,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,KAAM,CAAC,CAAC;AAC9F,QAAM,cAAc;AAAA,IAClB,GAAI,KAAK,eAAe,CAAC;AAAA,IACzB,GAAI,UAAU,WAAW,IACrB,CAAC,IACD,CAAC,8CAA8C,UAAU,KAAK,IAAI,CAAC,+EAA0E;AAAA,EACnJ;AACA,QAAM,YAAY,YAAY,WAAW;AACzC,QAAM,WAAW,EAAE,WAAW,QAAoB;AAClD,QAAM,SAAS,YAAY,gBAAgB,UAAU,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI;AACzF,QAAM,mBAAmB,YACrB,oBAAoB,UAAU,EAAE,OAAO,OAAO,YAAY,KAAK,cAAc,cAAc,GAAG,SAAS,CAAC,IACxG;AAEJ,QAAM,UAAU,CAAC,OAAe,KAAa,QAC3C,MAAM,OAAO,KAAK,GAAG;AAEvB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,GAAI,YAAY,CAAC,IAAI,EAAE,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,IAKnC,GAAI,SAAS,SAAY,CAAC,IAAI,EAAE,qBAAqB,KAAK,YAAY;AAAA,IACtE,MAAM,OAAe,MAAM,GAAmB;AAC5C,aAAO,QAAQ,OAAO,KAAK,mBAAmB,CAAC;AAAA,IACjD;AAAA,IACA,iBAAiB,OAAe,UAAwB,MAAM,GAAmB;AAC/E,aAAO,QAAQ,OAAO,KAAK,QAAQ;AAAA,IACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,gBAAgB,OAAe,MAAM,GAA8C;AACjF,YAAM,MAAM,mBAAmB;AAC/B,YAAM,SAAuB,CAAC;AAC9B,UAAI,UAAU;AACd,UAAI,YAAY;AAChB,YAAM,IAAI,QAAQ,OAAO,KAAK,GAAG;AACjC,aAAO,EAAE,GAAG,GAAG,OAAO;AAAA,IACxB;AAAA,EACF;AACF;;;ACjLA,SAAS,kBAAkB;AAkB3B,IAAM,YAAY,OAAO,aAAa,CAAC;AAEvC,IAAM,MAAM,CAAC,MAAsB,KAAK,UAAU,CAAC;AAEnD,IAAM,QAAQ,CAAC,MAAsB;AACnC,QAAM,OAAQ,EAAgC;AAC9C,SAAO,OAAO,SAAS,cAAc,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO;AACnF;AAiDA,IAAM,aAAN,MAA0C;AAAA,EACvB;AAAA,EACT,SAAmB,CAAC;AAAA,EACpB,WAAW;AAAA,EACX,UAAU;AAAA,EAElB,YAAY,QAAsB;AAChC,SAAK,SAAS;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,MAAoB;AACzB,QAAI,SAAS,GAAI;AACjB,SAAK,OAAO,KAAK,IAAI;AACrB,SAAK,YAAY,KAAK;AAAA,EACxB;AAAA,EAEA,KAAKC,QAAqB;AACxB,QAAI,KAAK,SAAS;AAChB,WAAK,OAAO,KAAK,SAAS;AAC1B,WAAK,YAAY;AAAA,IACnB,OAAO;AACL,WAAK,UAAU;AAAA,IACjB;AACA,SAAK,OAAO,KAAKA,MAAK;AACtB,SAAK,YAAYA,OAAM;AACvB,QAAI,KAAK,YAAY,YAAa,MAAK,MAAM;AAAA,EAC/C;AAAA,EAEA,QAAc;AACZ,QAAI,KAAK,OAAO,WAAW,EAAG;AAC9B,SAAK,OAAO,OAAO,KAAK,OAAO,KAAK,EAAE,CAAC;AACvC,SAAK,SAAS,CAAC;AACf,SAAK,WAAW;AAAA,EAClB;AACF;AAOA,IAAM,cAAc,KAAK;AASlB,IAAM,uBAAN,cAAmC,MAAM;AAAA,EAC5B,OAAO;AAAA,EAEzB,YAAY,QAAgB,WAAoB;AAC9C;AAAA,MACE,0BAA0B,MAAM,oWAI7B,cAAc,SACb,KACA,mDAAmD,SAAS;AAAA,IAElE;AAAA,EACF;AACF;AAmCO,IAAM,qBAAqB;AAUlC,IAAM,yBAAyB;AAY/B,IAAM,wBAAwB;AAY9B,IAAM,yBAAyB;AAqC/B,SAAS,cAAc,MAAmC;AACxD,QAAM,OAAO,oBAAI,IAAoB;AACrC,QAAM,OAAO,oBAAI,IAAY;AAC7B,MAAI,QAAQ;AACZ,MAAI,SAAS;AAEb,QAAM,QAAQ,CAAC,MAAuB;AACpC,QAAI,OAAO,MAAM,YAAY,MAAM,KAAM,QAAO;AAChD,QAAI,KAAK,IAAI,CAAC,GAAG;AACf,eAAS;AACT,aAAO;AAAA,IACT;AACA,UAAM,OAAO,KAAK,IAAI,CAAC;AACvB,QAAI,SAAS,OAAW,QAAO;AAC/B,QAAI,EAAE,QAAQ,uBAAuB;AACnC,eAAS;AACT,aAAO;AAAA,IACT;AAEA,SAAK,IAAI,CAAC;AAGV,QAAI,QAAQ;AACZ,QAAI,MAAM,QAAQ,CAAC,GAAG;AACpB,iBAAW,QAAQ,EAAG,UAAS,MAAM,IAAI;AAAA,IAC3C,WAAW,aAAa,KAAK;AAC3B,iBAAW,CAAC,GAAG,GAAG,KAAK,EAAG,UAAS,MAAM,CAAC,IAAI,MAAM,GAAG;AAAA,IACzD,WAAW,aAAa,KAAK;AAC3B,iBAAW,QAAQ,EAAG,UAAS,MAAM,IAAI;AAAA,IAC3C,WAAW,EAAE,aAAa,SAAS,EAAE,aAAa,SAAS;AACzD,iBAAW,KAAK,OAAO,KAAK,CAAC,EAAG,UAAS,MAAO,EAA8B,CAAC,CAAC;AAAA,IAClF;AACA,SAAK,OAAO,CAAC;AAEb,SAAK,IAAI,GAAG,KAAK;AACjB,WAAO;AAAA,EACT;AAEA,MAAI;AACF,UAAM,QAAQ,MAAM,IAAI;AACxB,WAAO,SAAS,QAAQ;AAAA,EAC1B,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAcA,SAAS,eAAe,OAAyB;AAC/C,QAAM,UAAU;AAChB,QAAM,YAAY,cAAc,MAAM,IAAI;AAC1C,MAAI,cAAc,UAAa,YAAY,yBAAyB,MAAM,QAAQ;AAChF,UAAM,IAAI,qBAAqB,MAAM,QAAQ,SAAS;AAAA,EACxD;AACF;AAEA,SAAS,YAAY,GAAY,KAA0B;AACzD,UAAQ,OAAO,GAAG;AAAA,IAChB,KAAK;AACH,UAAI,KAAK,GAAG;AACZ;AAAA,IACF,KAAK;AACH,UAAI,KAAK,IAAI,MAAM,GAAG;AACtB;AAAA,IACF,KAAK;AACH,UAAI,KAAK,IAAI,CAAC,EAAE;AAChB;AAAA,IACF,KAAK;AACH,UAAI,KAAK,IAAI,IAAI,CAAC,CAAC,EAAE;AACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWF,KAAK;AACH,UAAI,KAAK,IAAI,IAAI,EAAE,eAAe,EAAE,CAAC,EAAE;AACvC;AAAA,IACF,KAAK;AACH,UAAI,KAAK,IAAI,IAAI,EAAE,IAAI,CAAC,EAAE;AAC1B;AAAA,IACF,KAAK;AACH,UAAI,OAAO,MAAM,CAAC,EAAG,KAAI,KAAK,MAAM;AAAA,eAC3B,MAAM,OAAO,kBAAmB,KAAI,KAAK,MAAM;AAAA,eAC/C,MAAM,OAAO,kBAAmB,KAAI,KAAK,OAAO;AAAA,eAChD,OAAO,GAAG,GAAG,EAAE,EAAG,KAAI,KAAK,KAAK;AAAA,UAEpC,KAAI,KAAK,IAAI,CAAC,EAAE;AACrB;AAAA,IACF;AAEE,UAAI,KAAK,GAAG;AAAA,EAChB;AACF;AAEA,SAAS,MAAM,GAAY,OAAmB,OAAqB;AACjE,QAAM,MAAM,MAAM;AAGlB,MAAI,OAAO,MAAM,YAAY,MAAM,MAAM;AACvC,gBAAY,GAAG,GAAG;AAClB;AAAA,EACF;AAIA,MAAI,EAAE,MAAM,SAAS,EAAG,OAAM,IAAI,qBAAqB,MAAM,MAAM;AAGnE,MAAI,MAAM,WAAW,MAAM,QAAS,gBAAe,KAAK;AAExD,QAAM,OAAO,MAAM;AACnB,QAAM,SAAS,KAAK,IAAI,CAAC;AACzB,MAAI,WAAW,QAAW;AAGxB,QAAI,KAAK,IAAI,QAAQ,MAAM,EAAE;AAC7B;AAAA,EACF;AACA,OAAK,IAAI,GAAG,KAAK;AAEjB,MAAI,MAAM,QAAQ,CAAC,GAAG;AACpB,QAAI,KAAK,GAAG;AAIZ,eAAW,QAAQ,EAAG,OAAM,MAAM,OAAO,QAAQ,CAAC;AAClD,QAAI,KAAK,GAAG;AAAA,EACd,WAAW,aAAa,KAAK;AAC3B,QAAI,KAAK,GAAG;AACZ,eAAW,CAAC,GAAG,GAAG,KAAK,GAAG;AACxB,YAAM,GAAG,OAAO,QAAQ,CAAC;AACzB,YAAM,KAAK,OAAO,QAAQ,CAAC;AAAA,IAC7B;AACA,QAAI,KAAK,GAAG;AAAA,EACd,WAAW,aAAa,KAAK;AAC3B,QAAI,KAAK,GAAG;AACZ,eAAW,QAAQ,EAAG,OAAM,MAAM,OAAO,QAAQ,CAAC;AAClD,QAAI,KAAK,GAAG;AAAA,EACd,WAAW,aAAa,MAAM;AAC5B,QAAI,KAAK,IAAI,EAAE,QAAQ,CAAC,EAAE;AAAA,EAC5B,WAAW,aAAa,QAAQ;AAC9B,QAAI,KAAK,IAAI,IAAI,EAAE,MAAM,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,EAAE;AAAA,EAC7C,OAAO;AACL,UAAM,MAAM,MAAM,CAAC;AACnB,QAAI,KAAK,IAAI,IAAI,QAAQ,WAAW,KAAK,GAAG,CAAC,EAAE;AAC/C,eAAW,KAAK,OAAO,KAAK,CAAC,EAAE,KAAK,GAAG;AACrC,UAAI,KAAK,IAAI,IAAI,CAAC,CAAC,EAAE;AACrB,YAAO,EAA8B,CAAC,GAAG,OAAO,QAAQ,CAAC;AAAA,IAC3D;AACA,QAAI,KAAK,GAAG;AAAA,EACd;AAEA,OAAK,OAAO,CAAC;AACf;AA6BA,SAAS,SAAS,MAAqB,SAAuC,MAA2B;AACvG,QAAM,SAAS,SAAS,aAAa;AACrC,MAAI,CAAC,OAAO,cAAc,MAAM,KAAK,SAAS,GAAG;AAC/C,UAAM,IAAI;AAAA,MACR,yEAAyE,OAAO,MAAM,CAAC;AAAA,IAIzF;AAAA,EACF;AAGA,QAAMC,WAAU,UAAU,yBAAyB,SAAS,yBAAyB;AACrF,SAAO,EAAE,MAAM,oBAAI,IAAI,GAAG,MAAM,QAAQ,MAAM,QAAQ,QAAQ,SAAAA,SAAQ;AACxE;AAoEO,SAAS,WACd,QACA,OACA,SAAS,IACT,SACM;AACN,QAAM,OAAO,IAAI,WAAW,MAAM;AAClC,OAAK,OAAO,MAAM;AAClB,QAAM,OAAO,SAAS,MAAM,SAAS,KAAK,GAAG,CAAC;AAC9C,OAAK,MAAM;AACb;AASO,SAAS,YAAY,OAAgB,SAAS,IAAI,SAAoC;AAC3F,QAAM,MAAM,WAAW,QAAQ;AAC/B,aAAW,KAAK,OAAO,QAAQ,OAAO;AACtC,SAAO,IAAI,OAAO,KAAK;AACzB;;;ACljBA,IAAM,cAAmC,oBAAI,IAAI;AAAA,EAC/C;AAAA,EAAY;AAAA,EAAW;AAAA,EAAU;AAAA,EAAS;AAAA,EAAW;AAAA,EAAU;AAAA,EAAU;AAC3E,CAAC;AAqBD,IAAM,eAAe;AAAA,EACnB;AAAA,EAAiB;AAAA,EAAmB;AAAA,EAAmB;AAAA,EACvD;AACF;AAEA,SAAS,YAAY,MAA2B,IAA+B;AAC7E,QAAM,WAAY,KAAgC;AAClD,MAAI,aAAa,OAAW,CAAC,GAA8B,YAAY;AACvE,QAAM,KAAK,KAAK;AAChB,QAAM,KAAK,GAAG;AACd,aAAW,KAAK,aAAc,KAAI,GAAG,CAAC,MAAM,UAAa,GAAG,CAAC,MAAM,OAAW,IAAG,CAAC,IAAI,GAAG,CAAC;AAC5F;AAGA,SAAS,gBAAgB,GAAwB,SAAkE;AACjH,QAAM,MAA6B,CAAC;AACpC,QAAM,OAAO,oBAAI,IAAyB;AAC1C,QAAM,OAAO,CAAC,MAAiC;AAC7C,QAAI,KAAK,IAAI,CAAC,EAAG;AACjB,SAAK,IAAI,CAAC;AACV,QAAI,QAAQ,IAAI,CAAC,EAAG,KAAI,KAAK,CAAC;AAC9B,UAAM,IAAK,EAAyB;AACpC,QAAI,MAAM,UAAa,OAAO,MAAM,SAAU;AAC9C,UAAM,MAAM;AACZ,UAAM,OAA8B,CAAC;AACrC,QAAI,MAAM,QAAQ,IAAI,OAAO,EAAG,MAAK,KAAK,GAAI,IAAI,OAAiC;AACnF,QAAI,MAAM,QAAQ,IAAI,IAAI,EAAG,MAAK,KAAK,GAAI,IAAI,IAA8B;AAC7E,eAAW,KAAK,CAAC,UAAU,QAAQ,WAAW,aAAa,YAAY,YAAY,aAAa,YAAY,cAAc;AACxH,UAAI,IAAI,CAAC,EAAG,MAAK,KAAK,IAAI,CAAC,CAAwB;AACrD,QAAI,EAAE,QAAQ,YAAY;AACxB,iBAAW,MAAM,EAAE,MAAO,MAAK,KAAK,GAAG,MAAM;AAC7C,UAAI,EAAE,SAAU,YAAW,MAAM,EAAE,SAAU,MAAK,KAAK,GAAG,MAAM;AAAA,IAClE;AACA,eAAW,KAAK,KAAM,MAAK,CAAC;AAAA,EAC9B;AACA,OAAK,CAAC;AACN,SAAO;AACT;AAMO,SAAS,kBACd,MACA,cACe;AACf,QAAM,OAAO,oBAAI,IAA8C;AAC/D,QAAM,aAAa,oBAAI,IAAY;AACnC,QAAM,SAA0B,CAAC;AACjC,QAAM,YAAmC,CAAC;AAC1C,QAAM,UAAU,IAAI,IAAI,aAAa,KAAK,CAAC;AAE3C,QAAM,KAAK,CAAC,GAAwBC,UAAsC;AACxE,UAAM,UAAU,KAAK,IAAI,CAAC;AAC1B,QAAI,YAAY,OAAW,QAAO;AAClC,UAAM,MAAM,aAAa,IAAI,CAAC;AAC9B,QAAI,QAAQ,QAAW;AAAE,WAAK,IAAI,GAAG,GAAG;AAAG,aAAO;AAAA,IAAI;AAEtD,UAAM,IAAK,EAAyB;AACpC,QAAI,MAAM,UAAa,OAAO,MAAM,UAAU;AAAE,WAAK,IAAI,GAAG,CAAC;AAAG,aAAO;AAAA,IAAE;AACzE,UAAM,OAAQ,EAA6B,aAAaA;AAExD,QAAI,YAAY,IAAI,EAAE,GAAG,GAAG;AAC1B,YAAM,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC;AACxC,UAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AAAE,mBAAW,IAAI,GAAG;AAAG,eAAO,KAAK,EAAE,KAAK,EAAE,KAAK,MAAM,KAAK,CAAC;AAAA,MAAE;AACzF,iBAAWC,MAAK,gBAAgB,GAAG,OAAO,EAAG,KAAI,CAAC,UAAU,SAASA,EAAC,EAAG,WAAU,KAAKA,EAAC;AACzF,WAAK,IAAI,GAAG,CAAC;AACb,aAAO;AAAA,IACT;AAKA,QAAI,EAAE,QAAQ,QAAQ;AACpB,UAAI;AACJ,UAAI;AAAE,iBAAU,EAAuC,MAAM;AAAA,MAAE,QACzD;AAEJ,aAAK,IAAI,GAAG,CAAC;AACb,eAAO;AAAA,MACT;AACA,YAAM,OAAO,IAAa;AAC1B,WAAK,IAAI,GAAG,IAAI;AAChB,WAAK,OAAO,GAAG,QAAQ,IAAI,CAAC;AAC5B,kBAAY,GAAG,IAAI;AACnB,aAAO;AAAA,IACT;AAEA,UAAM,MAAM,CAAC,MAAgD,GAAG,GAAG,IAAI;AACvE,QAAI;AACJ,YAAQ,EAAE,KAAK;AAAA,MACb,KAAK;AACH,cAAM,QAAQ,EAAE,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,KAAK,IAAI,CAAC,CAAC;AAAG;AAAA,MAC9E,KAAK;AACH,cAAM,MAAM,EAAE,QAAQ,EAAE,KAAK;AAAG;AAAA,MAClC,KAAK;AACH,cAAM,SAAS,EAAE,OAAO;AAAA,UACtB,GAAI,EAAE,kBAAkB,EAAE,iBAAiB,KAAK,IAAI,CAAC;AAAA,UACrD,GAAI,EAAE,aAAa,SAAY,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS;AAAA,QAC7D,CAAC;AAAG;AAAA,MACN,KAAK,YAAY;AACf,cAAM,OAAO,EAAE,QAAQ,IAAI,GAAG;AAC9B,cAAM,SAAS,GAAG,IAAI;AAAG;AAAA,MAC3B;AAAA,MACA,KAAK,UAAU;AAKb,YAAI,EAAE,MAAM,KAAK,OAAK,MAAM,IAAI,GAAG;AACjC,gBAAM,MAAM,KAAK,UAAU,CAAC,MAAM,eAAe,CAAC;AAClD,cAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AAAE,uBAAW,IAAI,GAAG;AAAG,mBAAO,KAAK,EAAE,KAAK,iBAAiB,MAAM,KAAK,CAAC;AAAA,UAAE;AACnG,qBAAWA,MAAK,gBAAgB,GAAG,OAAO,EAAG,KAAI,CAAC,UAAU,SAASA,EAAC,EAAG,WAAU,KAAKA,EAAC;AACzF,eAAK,IAAI,GAAG,CAAC;AACb,iBAAO;AAAA,QACT;AACA,cAAM,OAAO,EAAE,QAAQ,IAAI,GAAG;AAC9B,cAAM,OAAO,GAAG,IAAI;AAAG;AAAA,MACzB;AAAA;AAAA,MAEA,KAAK;AACH,cAAM,EAAE,aAAa,aACjB,SAAS,IACT,EAAE,UAAU,SAAY,YAAY,IAAI,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC;AAC1E;AAAA,MACF,KAAK;AAAW,cAAM,QAAQ,IAAI,EAAE,MAAM,CAAC;AAAG;AAAA,MAC9C,KAAK;AAAO,cAAM,IAAI,IAAI,EAAE,MAAM,CAAC;AAAG;AAAA,MACtC,KAAK;AAAQ,cAAM,KAAK,IAAI,EAAE,MAAM,CAAC;AAAG;AAAA,MACxC,KAAK;AAAY,cAAM,SAAS,IAAI,EAAE,MAAM,CAAC;AAAG;AAAA,MAChD,KAAK;AACH,cAAM,KAAK,IAAI,EAAE,MAAM,GAAG,EAAE,QAAQ,SAAY,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC;AAAG;AAAA,MACxE,KAAK;AACH,cAAM,UAAU,IAAI,EAAE,MAAM,GAAG,EAAE,KAAK,EAAE,KAAK,GAAI,EAAE,QAAQ,SAAY,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAG,CAAC;AAAG;AAAA,MAClG,KAAK;AACH,cAAM,MAAM,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,SAAS,GAAG;AAAA,UAC3C,KAAK,EAAE;AAAA,UACP,GAAI,EAAE,QAAQ,SAAY,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI;AAAA,UAC5C,GAAI,EAAE,aAAa,SAAY,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS;AAAA,QAC7D,CAAC;AAAG;AAAA,MACN,KAAK;AAAa,cAAM,UAAU,IAAI,EAAE,MAAM,GAAG,EAAE,EAAE;AAAG;AAAA,MACxD,KAAK;AAAS,cAAM,MAAM,EAAE,OAAO,IAAI,EAAE,MAAM,CAAC;AAAG;AAAA,MACnD,KAAK;AAAS,cAAM,MAAM,EAAE,MAAM,IAAI,EAAE,MAAM,CAAC;AAAG;AAAA,MAClD,KAAK;AAAS,cAAM,MAAM,IAAI,EAAE,MAAM,CAAC;AAAG;AAAA,MAC1C,KAAK;AAAQ,cAAM,KAAK,IAAI,EAAE,MAAM,GAAG,EAAE,EAAE;AAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAS9C,KAAK;AAAU,cAAM,OAAO,IAAI,EAAE,MAAM,GAAG,EAAE,KAAK;AAA0B;AAAA,MAC5E,KAAK,QAAQ;AACX,cAAM,OAAO;AAAA,UACX,GAAI,EAAE,SAAS,EAAE,QAAQ,KAAK,IAAI,CAAC;AAAA,UACnC,GAAI,EAAE,WAAW,EAAE,UAAU,KAAK,IAAI,CAAC;AAAA,UACvC,GAAI,EAAE,YAAY,SAAY,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ;AAAA,UACxD,GAAI,EAAE,gBAAgB,EAAE,eAAe,KAAK,IAAI,CAAC;AAAA,UACjD,GAAI,EAAE,iBAAiB,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAAA,UACnD,GAAI,EAAE,eAAe,SAAY,CAAC,IAAI,EAAE,YAAY,EAAE,WAAW;AAAA,UACjE,GAAI,EAAE,SAAS,SAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK;AAAA,QACjD;AAKA,YAAI,EAAE,SAAS,UAAa,EAAE,UAAU,UAAa,OAAO,KAAK,IAAI,EAAE,SAAS,GAAG;AACjF,gBAAM,MAAM,GAAG,IAAI;AACnB,cAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AAAE,uBAAW,IAAI,GAAG;AAAG,mBAAO,KAAK,EAAE,KAAK,4BAA4B,MAAM,KAAK,CAAC;AAAA,UAAE;AAC9G,qBAAWA,MAAK,gBAAgB,GAAG,OAAO,EAAG,KAAI,CAAC,UAAU,SAASA,EAAC,EAAG,WAAU,KAAKA,EAAC;AACzF,eAAK,IAAI,GAAG,CAAC;AACb,iBAAO;AAAA,QACT;AACA,cAAM,EAAE,SAAS,SACZ,EAAE,UAAU,SAAY,KAAK,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,KAAK,IAAI,EAAE,MAAM,GAAG,EAAE,KAAK,IAChF,KAAK,EAAE,MAAM,IAAI,EAAE,MAAM,GAAG,EAAE,OAAO,IAAI;AAC7C;AAAA,MACF;AAAA,MACA,KAAK,WAAW;AACd,cAAM,QAAQ,IAAI,EAAE,MAAM;AAC1B,cAAM,OAAO;AAAA,UACX,GAAI,EAAE,cAAc,EAAE,QAAQ,KAAK,IAAI,EAAE,iBAAiB,SAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa;AAAA,UACpG,GAAI,EAAE,gBAAgB,SAAY,CAAC,IAAI,EAAE,aAAa,EAAE,YAAY;AAAA,UACpE,GAAI,EAAE,gBAAgB,EAAE,eAAe,KAAK,IAAI,CAAC;AAAA,UACjD,YAAY,EAAE;AAAA,QAChB,GAAG,KAAK;AACR;AAAA,MACF;AAAA,MACA,SAAS;AACP,cAAM,MAAM,KAAK,UAAU,CAAC,MAAO,EAAsB,GAAG,CAAC;AAC7D,YAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AAAE,qBAAW,IAAI,GAAG;AAAG,iBAAO,KAAK,EAAE,KAAM,EAAsB,KAAK,MAAM,KAAK,CAAC;AAAA,QAAE;AAC9G,mBAAWA,MAAK,gBAAgB,GAAG,OAAO,EAAG,KAAI,CAAC,UAAU,SAASA,EAAC,EAAG,WAAU,KAAKA,EAAC;AACzF,aAAK,IAAI,GAAG,CAAC;AACb,eAAO;AAAA,MACT;AAAA,IACF;AACA,gBAAY,GAAG,GAAG;AAClB,SAAK,IAAI,GAAG,GAAG;AACf,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,GAAG,MAAO,KAAgC,aAAa,SAAS;AAChF,SAAO,KAAK,CAAC,GAAG,MAAO,EAAE,OAAO,EAAE,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,MAAM,EAAE,MAAM,KAAK,EAAE,MAAM,EAAE,MAAM,IAAI,CAAE;AAC/G,SAAO,EAAE,MAAM,SAAS,QAAQ,UAAU;AAC5C;;;ACnHA,SAAS,YAAY,KAAmC;AACtD,SAAO,IAAI,KACP,MAAM,YAAY,EAAE,OAAO,IAAI,OAAO,MAAM,IAAI,KAAK,CAAC,CAAC,KACvD,OAAO,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,GAAG;AAC3C;AAeA,SAAS,UAAU,MAA2B,QAAuC;AACnF,QAAM,cAAc,OAAO,IAAI,CAAC,MAAM;AACpC,QAAI;AAAE,aAAO,YAAY,MAAM,MAAM,EAAE,IAAI,CAAC;AAAA,IAAE,SACvC,GAAG;AAAE,aAAO,SAAS,aAAa,QAAQ,EAAE,OAAO,SAAS;AAAA,IAAG;AAAA,EACxE,CAAC;AACD,MAAI,WAA4B;AAChC,MAAI,gBAA+B;AACnC,MAAI;AACF,UAAM,IAAI,QAAQ,IAAI;AACtB,oBAAgB,EAAE,OAAO;AACzB,eAAW,OAAO,IAAI,CAAC,MAAM;AAC3B,UAAI;AAAE,eAAO,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC;AAAA,MAAE,SACnC,GAAG;AAAE,eAAO,SAAS,aAAa,QAAQ,EAAE,OAAO,SAAS;AAAA,MAAG;AAAA,IACxE,CAAC;AAAA,EACH,QACM;AAAE,eAAW;AAAM,oBAAgB;AAAA,EAAK;AAC9C,SAAO,EAAE,aAAa,UAAU,cAAc;AAChD;AAEA,IAAM,WAAW,CAAC,GAAsB,MACtC,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,CAAC,GAAG,MAAM,MAAM,EAAE,CAAC,CAAC;AAIvD,SAAS,YAAY,GAAY,GAAqB;AACpD,MAAI,CAAC,SAAS,EAAE,aAAa,EAAE,WAAW,EAAG,QAAO;AACpD,MAAK,EAAE,aAAa,UAAW,EAAE,aAAa,MAAO,QAAO;AAC5D,MAAI,EAAE,aAAa,QAAQ,EAAE,aAAa,KAAM,QAAO,SAAS,EAAE,UAAU,EAAE,QAAQ;AACtF,SAAO;AACT;AAYA,IAAM,mBAAmB;AAKzB,SAAS,iBAAiB,QAAgB,OAAwC;AAChF,QAAM,IAAI,iBAAiB,KAAK,MAAM;AACtC,MAAI,MAAM,KAAM,QAAO;AACvB,MAAI,EAAE,CAAC,MAAM,KAAK;AAIhB,WAAO;AAAA,EACT;AACA,QAAM,QAAQ,MAAM,QAAQ,SAAS,EAAE;AACvC,MAAI,UAAU,GAAI,QAAO,8BAA8B,KAAK;AAG5D,QAAM,WAAW,EAAE,CAAC,MAAM,UAAa,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;AAC/D,SAAO,EAAE,MAAM,EAAE,CAAC,GAAI,UAAU,iBAAiB,MAAM,SAAS,GAAG,EAAE;AACvE;AAsBA,IAAM,cAAc,CAAC,MAAiD,UAAU,EAAE,MAAM,IAAI,EAAE,MAAM,QAAQ,MAAM,EAAE,CAAC;AAErH,SAAS,cAAc,GAA2B;AAChD,QAAM,KAAK,EAAE,kBAAkB,gCAAgC;AAC/D,SAAO,EAAE,aAAa,SAClB,cAAc,EAAE,IAAI,KAAK,OAAO,KAAK,KAAK,IAAI,GAAG,MAAM,CAAC,CAAC,EAAE,MAC3D,SAAS,EAAE,IAAI,OAAO,EAAE,QAAQ,IAAI,EAAE;AAC5C;AAcA,SAAS,kBAAkB,MAA2B,QAAmC;AACvF,QAAM,MAAmB,CAAC;AAC1B,QAAM,OAAO,oBAAI,IAAyB;AAE1C,QAAM,aAAa,oBAAI,IAA4C;AACnE,aAAW,KAAK,OAAO,SAAS;AAC9B,UAAM,OAAO,WAAW,CAAC;AACzB,QAAI,SAAS,OAAW,YAAW,IAAI,MAAM,EAAE,EAAE;AAAA,EACnD;AACA,QAAM,QAAQ,CAAC,GAAwB,cAA4B;AACjE,QAAI,KAAK,IAAI,CAAC,EAAG;AACjB,SAAK,IAAI,CAAC;AACV,UAAM,IAAK,EAAyB;AACpC,QAAI,MAAM,UAAa,OAAO,MAAM,SAAU;AAC9C,UAAMC,QAAQ,EAA6B,aAAa;AACxD,QAAI,EAAE,QAAQ,UAAU;AAItB,YAAM,WAAW,WAAW,IAAI,EAAE,OAAO,KAAKA;AAC9C,QAAE,QAAQ,QAAQ,CAAC,KAAK,aAAa;AACnC,cAAMC,QAAO,cAAc,GAAG;AAC9B,cAAM,KAAKA,MAAK;AAChB,cAAM,KAAK,GAAG,QAAQ,OAAO,QAAQ;AACrC,YAAI,GAAG,QAAQ,OAAO;AACpB,gBAAM,QAAQ,GAAG;AACjB,cAAK,MAAM,KAAmB,QAAQ,OAAO;AAC3C,kBAAM,OAAQ,MAAM,KAA4C;AAChE,gBAAI,KAAK;AAAA,cACP;AAAA,cAAI,MAAM;AAAA,cAAc,MAAAD;AAAA,cAAM;AAAA,cAAU;AAAA,cAAU,QAAQC;AAAA,cAAM;AAAA,cAChE,QAAQ;AAAA,cAAe,aAAa,KAAK,IAAI;AAAA,cAAG,OAAO;AAAA,cAAW,QAAQ;AAAA,YAC5E,CAAC;AAAA,UACH;AAAA,QACF;AACA,YAAI,GAAG,QAAQ,SAAS;AACtB,gBAAM,IAAI,iBAAiB,GAAG,QAAQ,GAAG,KAAK;AAC9C,gBAAM,SAAS,YAAY,EAAE;AAC7B,cAAI,OAAO,MAAM,UAAU;AAGzB,gBAAI,+CAA+C,KAAK,GAAG,MAAM,GAAG;AAClE,kBAAI,KAAK,EAAE,IAAI,MAAM,iBAAiB,MAAAD,OAAM,UAAU,UAAU,QAAQC,OAAM,KAAK,QAAQ,aAAa,MAAM,OAAO,MAAM,QAAQ,EAAE,CAAC;AAAA,YACxI;AAAA,UACF,OACK;AACH,gBAAI,KAAK;AAAA,cACP;AAAA,cAAI,MAAM;AAAA,cAAiB,MAAAD;AAAA,cAAM;AAAA,cAAU;AAAA,cAAU,QAAQC;AAAA,cAAM;AAAA,cAAK;AAAA,cACxE,aAAa,SAAS,CAAC,EAAE,IAAI,GAAG;AAAA,gBAC9B,GAAI,EAAE,kBAAkB,EAAE,iBAAiB,KAAK,IAAI,CAAC;AAAA,gBACrD,GAAI,EAAE,aAAa,SAAY,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS;AAAA,cAC7D,CAAC;AAAA,cACD,OAAO,cAAc,CAAC;AAAA,cAAG,QAAQ;AAAA,YACnC,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,UAAM,MAAM;AACZ,UAAM,OAA8B,CAAC;AACrC,QAAI,MAAM,QAAQ,IAAI,OAAO,EAAG,MAAK,KAAK,GAAI,IAAI,OAAiC;AACnF,QAAI,MAAM,QAAQ,IAAI,IAAI,EAAG,MAAK,KAAK,GAAI,IAAI,IAA8B;AAC7E,eAAW,KAAK,CAAC,UAAU,QAAQ,WAAW,aAAa,YAAY,YAAY,aAAa,YAAY,cAAc;AACxH,UAAI,IAAI,CAAC,EAAG,MAAK,KAAK,IAAI,CAAC,CAAwB;AACrD,QAAI,EAAE,QAAQ,YAAY;AACxB,iBAAW,KAAK,EAAE,MAAO,MAAK,KAAK,EAAE,MAAM;AAC3C,UAAI,EAAE,SAAU,YAAW,KAAK,EAAE,SAAU,MAAK,KAAK,EAAE,MAAM;AAAA,IAChE;AACA,QAAI,EAAE,QAAQ,QAAQ;AAAE,UAAI;AAAE,aAAK,KAAM,EAAuC,MAAM,CAAC;AAAA,MAAE,QAAQ;AAAA,MAAsB;AAAA,IAAE;AACzH,eAAW,KAAK,KAAM,OAAM,GAAGD,KAAI;AAAA,EACrC;AACA,QAAM,MAAO,KAAgC,aAAa,SAAS;AAEnE,MAAI,KAAK,CAAC,GAAG,MAAO,EAAE,KAAK,EAAE,KAAK,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,IAAI,CAAE;AACxG,SAAO;AACT;AAaA,SAAS,WACP,QACA,GACkB;AAClB,QAAM,KAAK,CAACE,QAAeC,MAAa,SAAiB,YAA6B;AACpF,QAAI,OAAO;AACX,QAAI,SAAS;AACb,aAASC,KAAI,GAAGA,KAAIF,QAAOE,KAAK,KAAI,OAAO,KAAK,WAAWA,EAAC,MAAM,IAAI;AAAE;AAAQ,eAASA;AAAA,IAAE;AAC3F,QAAI,UAAU,OAAO,KAAK,QAAQ,MAAM,SAAS,CAAC;AAClD,QAAI,YAAY,GAAI,WAAU,OAAO,KAAK;AAC1C,WAAO;AAAA,MACL,MAAM,OAAO;AAAA,MAAM;AAAA,MAAM,QAAQF,SAAQ;AAAA,MAAQ,OAAAA;AAAA,MAAO,KAAAC;AAAA,MAAK;AAAA,MAAS;AAAA,MACtE,UAAU,OAAO,KAAK,MAAM,SAAS,GAAG,OAAO;AAAA,IACjD;AAAA,EACF;AACA,MAAI,EAAE,SAAS,iBAAiB;AAC9B,UAAM,YAAY,CAAC,EAAE,QAAQ,EAAE,OAAO,QAAQ,SAAS,IAAI,CAAC;AAC5D,UAAME,QAAiB,CAAC;AACxB,eAAW,KAAK,IAAI,IAAI,SAAS,GAAG;AAClC,UAAID,KAAI,OAAO,KAAK,QAAQ,CAAC;AAC7B,aAAOA,OAAM,IAAI;AAAE,QAAAC,MAAK,KAAKD,EAAC;AAAG,QAAAA,KAAI,OAAO,KAAK,QAAQ,GAAGA,KAAI,CAAC;AAAA,MAAE;AAAA,IACrE;AACA,QAAIC,MAAK,WAAW,GAAG;AACrB,aAAO,KAAK,EAAE,MAAM,mCAAmC,OAAO,IAAI;AAAA,IAEpE;AACA,QAAIA,MAAK,SAAS,GAAG;AACnB,aAAO,KAAK,EAAE,MAAM,cAAcA,MAAK,MAAM,aAAa,OAAO,IAAI;AAAA,IAEvE;AACA,WAAO,GAAGA,MAAK,CAAC,GAAIA,MAAK,CAAC,IAAK,EAAE,OAAO,QAAQ,EAAE,QAAQ,EAAE,KAAM;AAAA,EACpE;AAEA,QAAM,SAAS;AACf,QAAM,OAAiB,CAAC;AACxB,MAAI,IAAI,OAAO,KAAK,QAAQ,MAAM;AAClC,SAAO,MAAM,IAAI;AAAE,SAAK,KAAK,CAAC;AAAG,QAAI,OAAO,KAAK,QAAQ,QAAQ,IAAI,CAAC;AAAA,EAAE;AACxE,MAAI,KAAK,WAAW,EAAG,QAAO,6CAA6C,OAAO,IAAI;AACtF,MAAI,KAAK,SAAS,GAAG;AACnB,WAAO,wBAAwB,KAAK,MAAM,aAAa,OAAO,IAAI;AAAA,EAEpE;AACA,QAAM,QAAQ,KAAK,CAAC;AAGpB,QAAM,YAAY,QAAQ;AAC1B,QAAM,YAAY,QAAQ;AAC1B,QAAM,MAAMC,eAAc,OAAO,MAAM,SAAS;AAChD,MAAI,OAAO,QAAQ,SAAU,QAAO;AACpC,QAAM,WAAWA,eAAc,OAAO,MAAM,SAAS;AACrD,MAAI,OAAO,aAAa,SAAU,QAAO;AAGzC,MAAI,OAAO,KAAK,MAAM,UAAU,MAAM,CAAC,EAAE,KAAK,MAAM,IAAI;AACtD,WAAO;AAAA,EACT;AACA,QAAM,QAAQ,OAAO,KAAK,MAAM,OAAO,GAAG;AAC1C,QAAM,OAAO,OAAO,KAAK,MAAM,YAAY,GAAG,WAAW,CAAC;AAC1D,SAAO,GAAG,OAAO,KAAK,OAAO,QAAQ,IAAI,GAAG;AAC9C;AAeA,SAASA,eAAc,MAAc,MAA+B;AAClE,QAAM,YAAY;AAClB,QAAM,aAAa;AACnB,MAAI,QAAQ;AAIZ,MAAI,aAAa;AACjB,MAAI,SAAS;AACb,QAAM,aAAuB,CAAC;AAC9B,MAAI,IAAI;AACR,SAAO,IAAI,KAAK,QAAQ;AACtB,UAAMC,MAAK,KAAK,CAAC;AACjB,QAAI,aAAa,KAAK,WAAW,SAAS,YAAY;AAEpD,UAAIA,QAAO,MAAM;AAAE,aAAK;AAAG;AAAA,MAAS;AACpC,UAAIA,QAAO,KAAK;AAAE;AAAc;AAAK;AAAA,MAAS;AAC9C,UAAIA,QAAO,OAAO,KAAK,IAAI,CAAC,MAAM,KAAK;AAAE,mBAAW,KAAK,MAAM;AAAG,iBAAS;AAAG,aAAK;AAAG;AAAA,MAAS;AAC/F;AACA;AAAA,IACF;AACA,QAAIA,QAAO,OAAQA,QAAO,KAAK;AAC7B,YAAM,QAAQA;AACd;AACA,iBAAS;AACP,YAAI,KAAK,KAAK,OAAQ,QAAO;AAC7B,cAAM,IAAI,KAAK,CAAC;AAChB,YAAI,MAAM,MAAM;AAAE,eAAK;AAAG;AAAA,QAAS;AACnC,YAAI,MAAM,KAAM,QAAO;AACvB;AACA,YAAI,MAAM,MAAO;AAAA,MACnB;AACA;AAAA,IACF;AACA,QAAIA,QAAO,KAAK;AAAE;AAAc;AAAK;AAAA,IAAS;AAC9C,QAAIA,QAAO,OAAO,KAAK,IAAI,CAAC,MAAM,KAAK;AACrC,YAAM,KAAK,KAAK,QAAQ,MAAM,CAAC;AAC/B,UAAI,OAAO,GAAI,QAAO;AACtB,UAAI,KAAK;AACT;AAAA,IACF;AACA,QAAIA,QAAO,OAAO,KAAK,IAAI,CAAC,MAAM,KAAK;AACrC,YAAM,QAAQ,KAAK,QAAQ,MAAM,IAAI,CAAC;AACtC,UAAI,UAAU,GAAI,QAAO;AACzB,UAAI,QAAQ;AACZ;AAAA,IACF;AACA,QAAIA,QAAO,IAAK,QAAO;AACvB,QAAIA,QAAO,KAAK;AAAE;AAAU;AAAK;AAAA,IAAS;AAC1C,QAAIA,QAAO,KAAK;AACd,UAAI,WAAW,KAAK,WAAW,SAAS,GAAG;AAAE,iBAAS,WAAW,IAAI;AAAI;AAAK;AAAA,MAAS;AACvF;AACA;AACA;AAAA,IACF;AACA,QAAIA,QAAO,KAAK;AAAE;AAAS;AAAK;AAAA,IAAS;AACzC,QAAIA,QAAO,KAAK;AACd;AACA,UAAI,UAAU,EAAG,QAAO,IAAI;AAC5B;AACA;AAAA,IACF;AACA;AAAA,EACF;AACA,SAAO;AACT;AAIA,IAAM,eAAe,CAAC,OACnB,EAAE,SAAS,EAAE,QAAQ,QAAQ,MAAM,EAAE,aAAa,QAAQ,OAAO,EAAE,MAAM;AAQrE,SAAS,aAAa,MAA2B,MAAoC;AAC1F,QAAM,SAAS,KAAK;AACpB,QAAM,QAAQ,OAAO,OAAO,CAAC,GAAG,MAAM,IAAI,EAAE,KAAK,QAAQ,CAAC;AAC1D,QAAMC,SAAQ,CAAC,aAAgC;AAAA,IAC7C,QAAQ;AAAA,IAAkB,IAAI;AAAA,IAAO;AAAA,IACrC,QAAQ,EAAE,SAAS,OAAO,QAAQ,MAAM;AAAA,IAAG,SAAS,CAAC;AAAA,IACrD,UAAU,CAAC;AAAA,IAAG,SAAS,CAAC;AAAA,IAAG,QAAQ,CAAC;AAAA,EACtC;AACA,MAAI,OAAO,WAAW,GAAG;AACvB,WAAOA,OAAM,iPAE2D;AAAA,EAC1E;AAEA,QAAM,WAAW,UAAU,MAAM,MAAM;AACvC,QAAM,UAAuB,SAAS,aAAa,OAAO,CAAC,aAAa,IAAI,CAAC,eAAe,UAAU;AAItG,MAAI;AACJ,MAAI;AAAE,eAAW,kBAAkB,MAAM,oBAAI,IAAI,CAAC;AAAA,EAAE,SAC7C,GAAG;AACR,WAAOA,OAAM,gFACN,aAAa,QAAQ,GAAG,EAAE,IAAI,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,EAAE;AAAA,EACrE;AACA,MAAI,CAAC,YAAY,UAAU,UAAU,SAAS,MAAM,MAAM,CAAC,GAAG;AAC5D,WAAO;AAAA,MACL,GAAGA,OAAM,kQAEwE;AAAA,MACjF;AAAA,MAAS,QAAQ,SAAS;AAAA,IAC5B;AAAA,EACF;AAEA,QAAM,SAAS,cAAc,MAAM,EAAE,GAAI,KAAK,WAAW,SAAY,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,GAAI,GAAI,KAAK,cAAc,SAAY,CAAC,IAAI,EAAE,WAAW,KAAK,UAAU,EAAG,CAAC;AAC5K,QAAM,eAAe,aAAa,MAAM;AACxC,QAAM,eAAe,IAAI,IAAI,OAAO,QAAQ,IAAI,OAAK,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAE/D,QAAM,WAA0B,CAAC;AACjC,QAAM,UAA4B,CAAC;AAEnC,aAAW,KAAK,kBAAkB,MAAM,MAAM,GAAG;AAC/C,QAAI,EAAE,gBAAgB,QAAQ,EAAE,UAAU,MAAM;AAC9C,cAAQ,KAAK,EAAE,IAAI,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,EAAE,MAAM,UAAU,EAAE,UAAU,MAAM,EAAE,QAAQ,QAAQ,EAAE,OAAQ,CAAC;AAC9G;AAAA,IACF;AACA,QAAIC;AACJ,QAAI;AAAE,MAAAA,WAAU,kBAAkB,MAAM,oBAAI,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;AAAA,IAAE,SACvE,GAAG;AACR,cAAQ,KAAK;AAAA,QAAE,IAAI,EAAE;AAAA,QAAI,MAAM,EAAE;AAAA,QAAM,MAAM,EAAE;AAAA,QAAM,UAAU,EAAE;AAAA,QAAU,MAAM,EAAE;AAAA,QACjF,QAAQ,+CAA0C,aAAa,QAAQ,GAAG,EAAE,IAAI,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC;AAAA,MAAG,CAAC;AAClH;AAAA,IACF;AACA,QAAIA,SAAQ,UAAU,SAAS,GAAG;AAChC,YAAM,YAAYA,SAAQ,OAAO,IAAI,OAAK,EAAE,GAAG,EAAE,KAAK,IAAI;AAC1D,cAAQ,KAAK;AAAA,QAAE,IAAI,EAAE;AAAA,QAAI,MAAM,EAAE;AAAA,QAAM,MAAM,EAAE;AAAA,QAAM,UAAU,EAAE;AAAA,QAAU,MAAM,EAAE;AAAA,QACjF,QAAQ,oBAAoB,SAAS;AAAA,MACkC,CAAC;AAC1E;AAAA,IACF;AACA,UAAM,QAAQ,UAAUA,SAAQ,MAAM,MAAM;AAC5C,QAAI,CAAC,YAAY,UAAU,KAAK,GAAG;AAEjC,cAAQ,KAAK;AAAA,QAAE,IAAI,EAAE;AAAA,QAAI,MAAM,EAAE;AAAA,QAAM,MAAM,EAAE;AAAA,QAAM,UAAU,EAAE;AAAA,QAAU,MAAM,EAAE;AAAA,QACjF,QAAQ;AAAA,MAC8C,CAAC;AACzD;AAAA,IACF;AACA,UAAM,cAAc,cAAcA,SAAQ,MAAM,EAAE,GAAI,KAAK,WAAW,SAAY,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,GAAI,GAAI,KAAK,cAAc,SAAY,CAAC,IAAI,EAAE,WAAW,KAAK,UAAU,EAAG,CAAC;AACzL,UAAM,cAAc,aAAa,WAAW;AAC5C,QAAI,YAAY,WAAW,aAAa,WAAW,YAAY,QAAQ,aAAa,MAAM;AACxF,cAAQ,KAAK;AAAA,QAAE,IAAI,EAAE;AAAA,QAAI,MAAM,EAAE;AAAA,QAAM,MAAM,EAAE;AAAA,QAAM,UAAU,EAAE;AAAA,QAAU,MAAM,EAAE;AAAA,QACjF,QAAQ;AAAA,MACa,CAAC;AACxB;AAAA,IACF;AAGA,UAAM,WAAW,EAAE;AACnB,UAAM,cAAc,YAAY,QAAQ,KAAK,OAAK,EAAE,OAAO,QAAQ;AACnE,UAAM,MAAmB;AAAA,MACvB,IAAI,EAAE;AAAA,MAAI,MAAM,EAAE;AAAA,MAAM,MAAM,EAAE;AAAA,MAAM,UAAU,EAAE;AAAA,MAClD,QAAQ,EAAE;AAAA,MAAQ,OAAO,EAAE;AAAA,MAC3B,mBAAmB,iBAAiB,WAAW,EAAE,GAAG,CAAC;AAAA,MACrD,kBAAkB,iBAAiB,WAAW,EAAE,WAAW,CAAC;AAAA,MAC5D;AAAA,MACA,mBAAmB,aAAa,IAAI,QAAQ,GAAG,SAAS;AAAA,MACxD,kBAAkB,aAAa,SAAS;AAAA,MACxC,SAAS;AAAA,QACP,sBAAsB,aAAa;AAAA,QAAS,qBAAqB,YAAY;AAAA,QAC7E,oBAAoB,aAAa;AAAA,QAAM,mBAAmB,YAAY;AAAA,QACtE,oBAAoB,aAAa;AAAA,QAAO,mBAAmB,YAAY;AAAA,QACvE,qBAAqB,SAAS;AAAA,QAAe,oBAAoB,MAAM;AAAA,MACzE;AAAA,MACA,UAAU,EAAE,SAAS,OAAO,QAAQ,OAAO,SAAS,iBAAiB,KAAK;AAAA,IAC5E;AACA,QAAI,KAAK,WAAW,QAAW;AAC7B,YAAM,IAAI,WAAW,KAAK,QAAQ,CAAC;AACnC,UAAI,OAAO,MAAM,UAAU;AACzB,gBAAQ,KAAK;AAAA,UAAE,IAAI,EAAE;AAAA,UAAI,MAAM,EAAE;AAAA,UAAM,MAAM,EAAE;AAAA,UAAM,UAAU,EAAE;AAAA,UAAU,MAAM,EAAE;AAAA,UACjF,QAAQ,yCAAyC,CAAC,sBAAsB,EAAE,MAAM,WAAM,EAAE,KAAK;AAAA,QAAG,CAAC;AACnG;AAAA,MACF;AACA,UAAI,OAAO;AAAA,IACb;AACA,aAAS,KAAK,GAAG;AAAA,EACnB;AAEA,WAAS,KAAK,CAAC,GAAG,MAAO,EAAE,KAAK,EAAE,KAAK,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,CAAE;AAChE,UAAQ,KAAK,CAAC,GAAG,MAAO,EAAE,KAAK,EAAE,KAAK,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,SAAS,EAAE,SAAS,KAAK,EAAE,SAAS,EAAE,SAAS,IAAI,CAAE;AACpH,SAAO;AAAA,IACL,QAAQ;AAAA,IAAkB,IAAI;AAAA,IAAM,SAAS;AAAA,IAC7C,QAAQ,EAAE,SAAS,OAAO,QAAQ,MAAM;AAAA,IAAG;AAAA,IAC3C;AAAA,IAAU;AAAA,IAAS,QAAQ,SAAS;AAAA,EACtC;AACF;AASO,SAAS,cAAc,YAAoB,OAAkE;AAClH,QAAM,QAAQ,MAAM,IAAI,OAAK,EAAE,IAAI,EAAE,OAAO,CAAC,MAAoB,MAAM,MAAS,EAC7E,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AACnC,MAAI,OAAO;AACX,MAAI,UAAU;AACd,aAAW,KAAK,OAAO;AACrB,QAAI,KAAK,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,QAAS;AAC9C,WAAO,KAAK,MAAM,GAAG,EAAE,KAAK,IAAI,EAAE,UAAU,KAAK,MAAM,EAAE,GAAG;AAC5D;AAAA,EACF;AACA,SAAO,EAAE,MAAM,QAAQ;AACzB;;;AC/mBO,SAAS,eAAe,GAAc,OAAyB,CAAC,GAAW;AAChF,QAAM,OAAO,KAAK,QAAQ;AAC1B,QAAM,QAAQ,KAAK,SAAS;AAC5B,QAAM,MAAc,CAAC;AAErB,MAAI,CAAC,EAAE,IAAI;AACT,QAAI,KAAK;AAAA,MAAC,EAAE,WAAM,KAAK,IAAI;AAAA,MAAG,EAAE,MAAM,KAAK,MAAM;AAAA,MAC/C,EAAE,oEAA+D,KAAK,GAAG;AAAA,IAAC,CAAC;AAC7E,eAAW,KAAK,KAAK,EAAE,WAAW,uCAAuC,QAAQ,GAAG,IAAI,EAAG,KAAI,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1G,QAAI,KAAK,CAAC,EAAE,mFAAmF,KAAK,KAAK,CAAC,CAAC;AAC3G,QAAI,KAAK,CAAC,EAAE,sFAAsF,KAAK,KAAK,CAAC,CAAC;AAC9G,QAAI,KAAK,CAAC,EAAE,2DAA2D,KAAK,KAAK,CAAC,CAAC;AACnF,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,EAAE,QAAQ,KAAK,KAAK;AACpC,MAAI,EAAE,SAAS,WAAW,KAAK,EAAE,QAAQ,WAAW,GAAG;AACrD,QAAI,KAAK,CAAC,EAAE,WAAM,KAAK,IAAI,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,EAAE,yCAAoC,KAAK,IAAI,CAAC,CAAC;AACrG,QAAI,KAAK,CAAC;AAAA,MAAE,qBAAqB,YAAY,EAAE,OAAO,OAAO,CAAC,mBACtD,YAAY,EAAE,OAAO,KAAK,CAAC;AAAA,MACnC,KAAK;AAAA,IAAK,CAAC,CAAC;AACZ,WAAO;AAAA,EACT;AAIA,QAAM,UAAU,KAAK,WAAW;AAChC,QAAM,QAAQ,UAAU;AACxB,QAAM,UAAU,QAAQ,EAAE,SAAS,SAAS,UAAU;AACtD,MAAI,KAAK;AAAA,IACP,EAAE,QAAQ,YAAO,WAAM,QAAQ,KAAK,OAAO,KAAK,IAAI;AAAA,IACpD,EAAE,MAAM,KAAK,MAAM;AAAA,IACnB,EAAE,YAAO,KAAK,KAAK;AAAA,IACnB,EAAE,GAAG,YAAY,EAAE,SAAS,MAAM,CAAC,UAAU,EAAE,SAAS,WAAW,IAAI,KAAK,GAAG,SACxE,EAAE,SAAS,WAAW,IAAI,OAAO,KAAK,iBAAiB,KAAK,IAAI;AAAA,IACvE,EAAE,EAAE,QAAQ,SAAS,IACjB,KAAK,YAAY,EAAE,QAAQ,MAAM,CAAC,SAAS,EAAE,QAAQ,WAAW,IAAI,KAAK,GAAG,SACvE,EAAE,QAAQ,WAAW,IAAI,UAAU,MAAM,SAC9C,IAAI,KAAK,IAAI;AAAA,EACnB,CAAC;AACD,aAAW,KAAK;AAAA,IACd,gEAAgE,YAAY,EAAE,OAAO,OAAO,CAAC,QACpF,EAAE,OAAO,YAAY,IAAI,KAAK,GAAG,KAAK,YAAY,EAAE,OAAO,KAAK,CAAC,6BACrE,YAAY,2BAA2B,iBAAiB,OAAO;AAAA,IAEpE,QAAQ;AAAA,IAAG;AAAA,EAAI,EAAG,KAAI,KAAK,CAAC,EAAE,GAAG,KAAK,KAAK,CAAC,CAAC;AAC/C,MAAI,CAAC,SAAS,EAAE,SAAS,SAAS,GAAG;AACnC,QAAI,KAAK;AAAA,MAAC,EAAE,oCAAoC,KAAK,KAAK;AAAA,MACxD,EAAE,WAAW,KAAK,MAAM;AAAA,MAAG,EAAE,yBAAyB,KAAK,KAAK;AAAA,IAAC,CAAC;AAAA,EACtE;AAEA,aAAW,KAAK,EAAE,SAAU,KAAI,KAAK,GAAG,cAAc,GAAG,IAAI,CAAC;AAC9D,aAAW,KAAK,EAAE,QAAS,KAAI,KAAK,GAAG,aAAa,GAAG,IAAI,CAAC;AAE5D,MAAI,EAAE,OAAO,SAAS,GAAG;AACvB,QAAI,KAAK,MAAM,CAAC;AAChB,eAAW,KAAK;AAAA,MACd,GAAG,YAAY,EAAE,OAAO,MAAM,CAAC,kHAE7B,EAAE,OAAO,MAAM,GAAG,CAAC,EAAE,IAAI,OAAK,GAAG,EAAE,IAAI,KAAK,EAAE,GAAG,GAAG,EAAE,KAAK,IAAI,KAC9D,EAAE,OAAO,SAAS,IAAI,aAAQ;AAAA,MAAK,QAAQ;AAAA,MAAG;AAAA,IAAI,EAAG,KAAI,KAAK,CAAC,EAAE,GAAG,KAAK,KAAK,CAAC,CAAC;AAAA,EACvF;AACA,MAAI,KAAK,MAAM,CAAC;AAChB,MAAI,KAAK;AAAA,IACP,EAAE,QAAQ,YAAO,cAAO,KAAK,IAAI;AAAA,IACjC,EAAE,GAAG,YAAY,EAAE,SAAS,MAAM,CAAC,kBAAkB,KAAK,MAAM;AAAA,IAChE,EAAE,EAAE,QAAQ,SAAS,IAAI,KAAK,YAAY,EAAE,QAAQ,MAAM,CAAC,cAAc,IAAI,KAAK,MAAM;AAAA;AAAA;AAAA;AAAA,IAIxF,EAAE,QACG,UAAU,IACP,WAAQ,YAAY,OAAO,CAAC,qBAAqB,YAAY,OAAO,CAAC,+CACrE,4BACJ,uEAAiE,KAAK,KAAK;AAAA,EACjF,CAAC;AACD,SAAO;AACT;AAEO,SAAS,gBAAgB,GAAc,OAAyB,CAAC,GAAW;AACjF,SAAOC,QAAO,eAAe,GAAG,IAAI,GAAG,IAAI;AAC7C;AAEA,SAAS,cAAc,GAAgB,MAAgC;AACrE,QAAM,MAAc,CAAC;AACrB,QAAM,QAAQ,KAAK,SAAS;AAC5B,QAAM,IAAI,EAAE;AACZ,QAAM,UAAoB,CAAC;AAC3B,MAAI,EAAE,sBAAsB,EAAE,oBAAoB;AAGhD,UAAM,UAAU,EAAE,qBAAqB,EAAE;AACzC,YAAQ,KAAK,WAAW,YAAY,OAAO,CAAC,WAAW,EAAE,kBAAkB,uCAAuC;AAAA,EACpH;AACA,MAAI,EAAE,wBAAwB,EAAE,sBAAsB;AACpD,YAAQ,KAAK,GAAG,EAAE,uBAAuB,EAAE,mBAAmB,2CAA2C;AAAA,EAC3G;AACA,MAAI,EAAE,sBAAsB,EAAE,oBAAoB;AAChD,YAAQ,KAAK,GAAG,EAAE,oBAAoB,EAAE,kBAAkB,4CAA4C;AAAA,EACxG;AAGA,MAAI,EAAE,sBAAsB,EAAE,kBAAkB;AAC9C,YAAQ,KAAK,OAAO,EAAE,QAAQ,uCAAuC,EAAE,gBAAgB,GAAG;AAAA,EAC5F;AACA,MAAI,EAAE,sBAAsB,EAAE,kBAAkB;AAC9C,YAAQ,KAAK,GAAG,EAAE,QAAQ,mDAAmD;AAAA,EAC/E;AACA,QAAM,SAAS,QAAQ,KAAK,QAAK;AAEjC,MAAI,KAAK,MAAM,CAAC;AAChB,MAAI,KAAK,KAAK,OAAO,KAAK,KAAK,CAAC;AAChC,MAAI,KAAK;AAAA,IACP,EAAE,eAAQ,KAAK,IAAI;AAAA,IACnB,EAAE,iBAAiB,EAAE,OAAO,SAAS,MAAM,KAAK,CAAC;AAAA,IACjD,EAAE,IAAI;AAAA,IACN,EAAE,EAAE,IAAI,KAAK,KAAK;AAAA,EACpB,CAAC;AAID,MAAI,EAAE,SAAS,QAAW;AACxB,QAAI,KAAK,GAAG,UAAU;AAAA,MACpB,MAAM,EAAE,KAAK;AAAA,MACb,UAAU,KAAK,cAAc,EAAE,KAAK;AAAA,MACpC,MAAM,EAAE,KAAK;AAAA,MACb,QAAQ,EAAE,KAAK;AAAA;AAAA;AAAA,MAGf,WAAW,EAAE,KAAK,SAAS,KAAK,IAAI,EAAE,KAAK,QAAQ,SAAS,GAAG,CAAC;AAAA,MAChE,UAAU,EAAE,KAAK,SAAS,QAAQ,OAAO,GAAG;AAAA,MAC5C,SAAS;AAAA,MACT,cAAc,UAAK,EAAE,KAAK,OAAO;AAAA,MACjC,MAAM;AAAA,IACR,GAAG,MAAM,KAAK,CAAC;AAAA,EACjB,OACK;AACH,QAAI,KAAK,CAAC,EAAE,SAAS,KAAK,GAAG,GAAG,EAAE,EAAE,QAAQ,KAAK,GAAG,CAAC,CAAC;AACtD,QAAI,KAAK,CAAC,EAAE,SAAS,KAAK,IAAI,GAAG,EAAE,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC;AACvD,QAAI,KAAK,CAAC,EAAE,eAAe,KAAK,KAAK,GAAG,EAAE,QAAQ,KAAK,MAAM,CAAC,CAAC;AAAA,EACjE;AACA,MAAI,EAAE,wBAAwB,QAAQ,EAAE,uBAAuB,QAAQ,EAAE,uBAAuB,EAAE,qBAAqB;AACrH,UAAM,IAAI,EAAE,qBAAqB,EAAE;AACnC,QAAI,KAAK;AAAA,MAAC,EAAE,eAAe,KAAK,KAAK;AAAA,MACnC,EAAE,wBAAwB,IAAI,IAAI,UAAU,SAAS,OAAO,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,KAAK,KAAK;AAAA,IAAC,CAAC;AAAA,EAC9G;AACA,QAAM,UAAU,4DACT,YAAY,EAAE,SAAS,OAAO,CAAC,QAAQ,EAAE,SAAS,YAAY,IAAI,KAAK,GAAG;AAEjF,QAAM,KAAK,KAAK,SAAS,QAAQ,IAAI,EAAE;AACvC,MAAI,KAAK,CAAC,EAAE,eAAe,KAAK,KAAK,GAAG,EAAE,GAAG,CAAC,KAAK,IAAI,KAAK,IAAI,CAAC,CAAC;AAClE,aAAW,KAAK,GAAG,MAAM,CAAC,EAAG,KAAI,KAAK,CAAC,EAAE,aAAa,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC;AACzE,SAAO;AACT;AAEA,SAAS,aAAa,GAAmB,MAAgC;AACvE,QAAM,MAAc,CAAC;AACrB,QAAM,QAAQ,KAAK,SAAS;AAC5B,MAAI,KAAK,MAAM,CAAC;AAChB,MAAI,KAAK,KAAK,OAAO,KAAK,KAAK,CAAC;AAChC,MAAI,KAAK;AAAA,IACP,EAAE,YAAO,KAAK,IAAI;AAAA,IAClB,EAAE,aAAa,EAAE,OAAO,UAAU,MAAM,KAAK,CAAC;AAAA,IAC9C,EAAE,QAAQ;AAAA,IACV,EAAE,EAAE,IAAI,KAAK,KAAK;AAAA,EACpB,CAAC;AACD,MAAI,KAAK,CAAC,EAAE,eAAe,KAAK,KAAK,GAAG,EAAE,EAAE,MAAM,KAAK,KAAK,CAAC,CAAC;AAC9D,QAAM,QAAQ,KAAK,kCAAkC,EAAE,MAAM,IAAI,QAAQ,IAAI,EAAE;AAC/E,MAAI,KAAK,CAAC,EAAE,eAAe,KAAK,KAAK,GAAG,EAAE,MAAM,CAAC,KAAK,IAAI,KAAK,IAAI,CAAC,CAAC;AACrE,aAAW,KAAK,MAAM,MAAM,CAAC,EAAG,KAAI,KAAK,CAAC,EAAE,aAAa,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC;AAC5E,SAAO;AACT;;;AzEhKA,IAAM,QAAQ;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;AAoCd,SAAS,UAAU,MAA+B;AAChD,QAAM,QAAQ,oBAAI,IAA2B;AAC7C,QAAM,aAAuB,CAAC;AAC9B,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,UAAM,IAAI,KAAK,CAAC;AAChB,QAAI,MAAM,MAAM;AAAE,YAAM,IAAI,QAAQ,IAAI;AAAG;AAAA,IAAS;AACpD,QAAI,CAAC,EAAE,WAAW,IAAI,GAAG;AAAE,iBAAW,KAAK,CAAC;AAAG;AAAA,IAAS;AACxD,UAAM,KAAK,EAAE,QAAQ,GAAG;AACxB,QAAI,OAAO,IAAI;AAAE,YAAM,IAAI,EAAE,MAAM,GAAG,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC,CAAC;AAAG;AAAA,IAAS;AACtE,UAAM,OAAO,EAAE,MAAM,CAAC;AAEtB,QAAI,CAAC,UAAU,UAAU,UAAU,UAAU,SAAS,OAAO,OAAO,EAAE,SAAS,IAAI,KAAK,IAAI,IAAI,KAAK,UAAU,CAAC,KAAK,IAAI,CAAC,EAAG,WAAW,IAAI,GAAG;AAC7I,YAAM,IAAI,MAAM,KAAK,EAAE,CAAC,CAAE;AAAA,IAC5B,MACK,OAAM,IAAI,MAAM,IAAI;AAAA,EAC3B;AACA,SAAO,EAAE,SAAS,WAAW,CAAC,GAAG,YAAY,WAAW,MAAM,CAAC,GAAG,MAAM;AAC1E;AAEA,IAAM,WAAN,cAAuB,MAAM;AAAC;AAI9B,eAAe,mBAAmB,MAA6B;AAC7D,MAAI,CAAC,CAAC,OAAO,QAAQ,QAAQ,MAAM,EAAE,SAAS,QAAQ,IAAI,CAAC,EAAG;AAC9D,MAAI;AACF,UAAM,MAAM,MAAM,OAAO,aAAa;AACtC,QAAI,SAAS;AAAA,EACf,QACM;AACJ,UAAM,IAAI;AAAA,MACR,GAAG,IAAI;AAAA;AAAA,IAET;AAAA,EACF;AACF;AAuBA,IAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAexB,IAAI,sBAAsB;AAC1B,SAAS,6BAAmC;AAC1C,MAAI,oBAAqB;AACzB,wBAAsB;AACtB,WAAS,wBAAwB,mBAAmB,eAAe,CAAC,EAAE;AACxE;AAEA,eAAe,YAAY,MAAc,YAAkD;AACzF,QAAM,MAAM,QAAQ,IAAI;AACxB,MAAI;AAAE,aAAS,GAAG;AAAA,EAAE,QACd;AAAE,UAAM,IAAI,SAAS,2BAA2B,IAAI,EAAE;AAAA,EAAE;AAC9D,QAAM,mBAAmB,GAAG;AAE5B,6BAA2B;AAC3B,MAAI;AACJ,MAAI;AAAE,UAAM,MAAM,OAAO,cAAc,GAAG,EAAE;AAAA,EAAiC,SACtE,GAAG;AACR,UAAM,IAAI,SAAS,kBAAkB,IAAI;AAAA,IAAO,aAAa,QAAQ,GAAG,EAAE,IAAI,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,EAAE;AAAA,EAC9G;AACA,MAAI,eAAe,QAAW;AAC5B,QAAI,EAAE,cAAc,MAAM;AACxB,YAAM,IAAI,SAAS,GAAG,IAAI,oBAAoB,UAAU,mBAAmB,OAAO,KAAK,GAAG,EAAE,KAAK,IAAI,KAAK,WAAW,EAAE;AAAA,IACzH;AACA,WAAO,IAAI,UAAU;AAAA,EACvB;AACA,MAAI,aAAa,IAAK,QAAO,IAAI;AACjC,QAAM,QAAQ,OAAO,KAAK,GAAG;AAC7B,MAAI,MAAM,WAAW,EAAG,QAAO,IAAI,MAAM,CAAC,CAAE;AAC5C,QAAM,IAAI;AAAA,IACR,GAAG,IAAI,+BAA+B,MAAM,MAAM;AAAA,4BACnB,MAAM,KAAK,IAAI,CAAC;AAAA,EACjD;AACF;AAEA,SAAS,WAAW,MAA0B,WAA+C;AAC3F,MAAI,SAAS,OAAW,QAAO,CAAC;AAChC,QAAM,MAAM,QAAQ,IAAI;AACxB,QAAM,OAAO,WAAW,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC,EAAE,OAAO,OAAK,MAAM,EAAE;AAC1E,QAAM,QAAkB,CAAC;AACzB,QAAM,OAAO,CAAC,MAAoB;AAChC,QAAI;AACJ,QAAI;AAAE,WAAK,SAAS,CAAC;AAAA,IAAE,SAChB,GAAG;AAAE,YAAM,IAAI,SAAS,2BAA2B,CAAC,KAAK,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC,CAAC,EAAE;AAAA,IAAE;AAC9G,QAAI,GAAG,YAAY,GAAG;AAAE,iBAAW,KAAK,YAAY,CAAC,EAAE,KAAK,EAAG,MAAK,KAAK,GAAG,CAAC,CAAC;AAAG;AAAA,IAAO;AACxF,QAAI,SAAS,UAAa,CAAC,KAAK,SAAS,QAAQ,CAAC,CAAC,EAAG;AACtD,UAAM,KAAK,CAAC;AAAA,EACd;AACA,OAAK,GAAG;AACR,MAAI,MAAM,WAAW,EAAG,OAAM,IAAI,SAAS,UAAU,IAAI,qBAAqB,OAAO,aAAa,KAAK,KAAK,GAAG,CAAC,KAAK,EAAE,EAAE;AAEzH,SAAO,MAAM,IAAI,QAAM,EAAE,MAAM,SAAS,QAAQ,IAAI,GAAG,CAAC,GAAG,MAAM,aAAa,GAAG,MAAM,EAAE,EAAE;AAC7F;AAIA,SAAS,aAAa,GAAwC;AAC5D,SAAO,OAAO,MAAM,YAAY,MAAM,QAAQ,UAAW,IAAe,IAA2B;AACrG;AAEA,IAAM,YAAY,CAAC,QAAqC;AACtD,QAAM,MAAM,cAAc,GAAG;AAC7B,QAAM,IAAI,IAAI;AACd,UAAQ,EAAE,KAAK;AAAA,IACb,KAAK;AAAW,aAAO,YAAY,EAAE,KAAK;AAAA,IAC1C,KAAK;AAAS,aAAO,UAAU,EAAE,MAAM;AAAA,IACvC,KAAK;AAAY,aAAO,EAAE,MAAM,WAAW,IAAI,SAAS,EAAE,MAAM,CAAC,CAAC,OAAO,aAAa,EAAE,MAAM,MAAM;AAAA,IACpG,KAAK,QAAQ;AACX,YAAM,MAAO,IAA+B;AAC5C,UAAI,QAAQ,OAAW,QAAO;AAG9B,UAAI;AACF,cAAMC,KAAI,EAAE,MAAM;AAClB,eAAQA,GAA6B,aAAa,UAAK,UAAUA,EAAC,CAAC;AAAA,MACrE,QACM;AAAE,eAAO;AAAA,MAAe;AAAA,IAChC;AAAA,IACA;AAAS,aAAO,EAAE;AAAA,EACpB;AACF;AAWA,SAAS,GAAG,GAAmB;AAC7B,SAAO,mBAAmB,KAAK,CAAC,IAAI,IAAI,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC;AACxE;AAEA,SAAS,UAAU,QAAuB,KAAoB;AAC5D,QAAM,OAAO,GAAG,KAAK,UAAU,KAAK,MAAM,CAAC,CAAC;AAAA;AAC5C,MAAI,WAAW,MAAM;AAAE,YAAQ,OAAO,MAAM,IAAI;AAAG;AAAA,EAAO;AAC1D,MAAI;AAAE,kBAAc,QAAQ,IAAI;AAAA,EAAE,SAC3B,GAAG;AAAE,UAAM,IAAI,SAAS,mBAAmB,MAAM,KAAK,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC,CAAC,EAAE;AAAA,EAAE;AAC7G;AAEA,eAAe,KAAK,MAA0C;AAC5D,QAAM,OAAO,UAAU,IAAI;AAC3B,MAAI,KAAK,MAAM,IAAI,MAAM,KAAK,KAAK,YAAY,UAAa,KAAK,YAAY,QAAQ;AACnF,YAAQ,OAAO,MAAM,GAAG,KAAK;AAAA,CAAI;AACjC,WAAO,KAAK,YAAY,UAAa,CAAC,KAAK,MAAM,IAAI,MAAM,IAAI,IAAI;AAAA,EACrE;AACA,QAAM,QAAQ,KAAK,MAAM,IAAI,OAAO,IAAI,KAAK,MAAM,IAAI,OAAO,MAAM,UAChE,KAAK,MAAM,IAAI,UAAU,IAAI,QAC3B,QAAQ,OAAO,UAAU,QAAQ,QAAQ,IAAI,aAAa;AAGhE,QAAM,YAAY,KAAK,MAAM,IAAI,OAAO;AACxC,QAAM,QAAQ,OAAO,cAAc,YAAY,OAAO,SAAS,IAAI,IAC/D,OAAO,SAAS,IACf,SAAS,OAAO,QAAQ,OAAO,YAAY,YAAY,QAAQ,OAAO,UAAU,IAC7E,QAAQ,OAAO,UACf;AACR,QAAM,QAAQ,CAAC,KAAK,MAAM,IAAI,UAAU;AACxC,QAAM,OAAO,KAAK,MAAM,IAAI,MAAM;AAGlC,QAAM,QAAQ,CAAC,MAAoB;AAAE,KAAC,SAAS,OAAO,QAAQ,SAAS,QAAQ,QAAQ,MAAM,GAAG,CAAC;AAAA,CAAI;AAAA,EAAE;AAEvG,QAAM,cAAc,KAAK,WAAW,CAAC;AACrC,MAAI,gBAAgB,OAAW,OAAM,IAAI,SAAS,cAAc,KAAK,OAAO;AAAA;AAAA,EAAsC,KAAK,EAAE;AACzH,QAAM,aAAa,KAAK,MAAM,IAAI,QAAQ;AAC1C,QAAM,UAAU,MAAM,YAAY,aAAa,OAAO,eAAe,WAAW,aAAa,MAAS;AACtG,QAAMC,SAAQ,SAAS,QAAQ,IAAI,GAAG,QAAQ,WAAW,CAAC,KAAK;AAC/D,QAAM,aAAa,KAAK,MAAM,IAAI,QAAQ;AAC1C,QAAM,SAAS,OAAO,eAAe,WAAW,WAAW,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC,EAAE,OAAO,OAAK,MAAM,EAAE,IAAI;AACjH,QAAM,aAAa,KAAK,MAAM,IAAI,QAAQ;AAC1C,QAAM,UAAU,KAAK,MAAM,IAAI,KAAK;AACpC,QAAM,SAAS,WAAW,OAAO,eAAe,WAAW,aAAa,QAAW,OAAO,YAAY,WAAW,UAAU,MAAS;AAEpI,MAAI,KAAK,YAAY,YAAY;AAC/B,UAAM,IAAsB,gBAAgB,SAAkD,WAAW,SAAY,CAAC,IAAI,EAAE,OAAO,CAAC;AACpI,UAAM,OAAO,oBAAI,IAA8B;AAC/C,UAAM,OAAO,oBAAI,IAA+B;AAChD,UAAM,SAAS,oBAAI,IAA+B;AAClD,eAAW,KAAK,EAAE,OAAO,SAAS;AAChC,YAAM,IAAI,WAAW,CAAC;AACtB,UAAI,MAAM,OAAW;AACrB,YAAM,KAAK,aAAa,CAAC;AACzB,WAAK,IAAI,EAAE,IAAI,GAAG,IAAI,OAAK,iBAAiB,EAAE,QAAQ,CAAC,CAAC;AACxD,aAAO,IAAI,EAAE,IAAI,EAAE,IAAI,OAAK,UAAU,CAAC,CAAC,CAAC;AACzC,UAAI,OAAO,SAAS,EAAG,MAAK,IAAI,EAAE,IAAI,kBAAkB,GAAG,QAAQ,EAAE,CAAC;AAAA,IACxE;AAKA,UAAM,UAAU,oBAAI,IAAY;AAChC,UAAM,OAAO,aAAa,OAAO;AACjC,QAAI;AACJ,QAAI,SAAS,QAAQ,OAAO,SAAS,GAAG;AACtC,YAAM,QAAQ,aAAa,MAAM,EAAE,QAAQ,GAAI,WAAW,SAAY,CAAC,IAAI,EAAE,OAAO,EAAG,CAAC;AACxF,iBAAW,KAAK,MAAM,SAAU,SAAQ,IAAI,EAAE,EAAE;AAChD,UAAI,QAAQ,OAAO,GAAG;AAMpB,cAAM,MAAM,CAAC,MAAc,MAAuB,OAAO,MAAM,WAAW,MAAM,IAAI,IAAI,GAAG,CAAC,CAAC,KAAK;AAKlG,cAAM,cAAcA,OAAM,WAAW,GAAG,IAAI,KAAKA,MAAK,KAAKA;AAC3D,qBAAa,gBAAgB,GAAG,WAAW,CAAC,KACxC,IAAI,UAAU,UAAU,IAAI,IAAI,UAAU,UAAU,IACpD,IAAI,OAAO,OAAO,IAAI,IAAI,UAAU,UAAU;AAAA,MACpD;AAAA,IACF;AACA,UAAM,YAAY,KAAK,MAAM,IAAI,OAAO;AAGxC,UAAM,QAAQ,OAAO,cAAc,WAAW,OAAO,SAAS,IAAI;AAClE,QAAI,UAAU,WAAc,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,IAAI;AAClE,YAAM,IAAI,SAAS,mDAAmD,OAAO,SAAS,CAAC,KAAK;AAAA,IAC9F;AACA,UAAM,gBAAgB,GAAG;AAAA,MACvB;AAAA,MAAO;AAAA,MAAO;AAAA,MAAO,MAAMA;AAAA,MAAO;AAAA,MAAM,cAAc;AAAA,MAAM,WAAW;AAAA,MACvE;AAAA,MACA,GAAI,eAAe,SAAY,CAAC,IAAI,EAAE,WAAW;AAAA;AAAA;AAAA,MAGjD,GAAI,OAAO,eAAe,WAAW,EAAE,YAAY,QAAQ,IAAI,EAAE,IAAI,CAAC;AAAA,MACtE,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM;AAAA,IACzC,CAAC,CAAC;AACF,QAAI,SAAS,OAAW,WAAU,MAAM,CAAC;AAKzC,WAAO,gBAAgB,CAAC,IAAI,IAAI,EAAE,KAAK,IAAI;AAAA,EAC7C;AAEA,MAAI,KAAK,YAAY,OAAO;AAC1B,UAAM,OAAO,aAAa,OAAO;AACjC,QAAI,SAAS,MAAM;AACjB,YAAM,IAAI;AAAA,QACR,GAAGA,MAAK;AAAA;AAAA,MAEV;AAAA,IACF;AACA,UAAM,aAAa,KAAK,MAAM,IAAI,QAAQ;AAC1C,UAAM,aAAa,OAAO,eAAe,WAAW,aAAa;AACjE,QAAI;AACJ,QAAI;AAAE,eAAS,EAAE,MAAM,SAAS,QAAQ,IAAI,GAAG,QAAQ,UAAU,CAAC,GAAG,MAAM,aAAa,QAAQ,UAAU,GAAG,MAAM,EAAE;AAAA,IAAE,SAChH,GAAG;AAAE,YAAM,IAAI,SAAS,iCAAiC,UAAU,KAAK,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC,CAAC,EAAE;AAAA,IAAE;AAC7H,UAAM,SAAS,aAAa,MAAM;AAAA,MAChC;AAAA,MACA,GAAI,WAAW,SAAY,CAAC,IAAI,EAAE,OAAO;AAAA,MACzC,GAAI,WAAW,SAAY,CAAC,IAAI,EAAE,OAAO;AAAA,IAC3C,CAAC;AACD,UAAM,QAAQ,KAAK,MAAM,IAAI,OAAO,MAAM;AAC1C,QAAI,UAAU;AACd,QAAI,SAAS,OAAO,SAAS,SAAS,GAAG;AACvC,YAAM,EAAE,MAAM,SAAS,EAAE,IAAI,cAAc,OAAO,MAAM,OAAO,QAAQ;AACvE,gBAAU;AACV,UAAI,IAAI,GAAG;AACT,YAAI;AAAE,wBAAc,QAAQ,UAAU,GAAG,IAAI;AAAA,QAAE,SACxC,GAAG;AAAE,gBAAM,IAAI,SAAS,mBAAmB,UAAU,KAAK,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC,CAAC,EAAE;AAAA,QAAE;AAAA,MACjH;AAAA,IACF;AACA,UAAM,gBAAgB,QAAQ;AAAA,MAC5B;AAAA,MAAO;AAAA,MAAO;AAAA,MAAO,MAAMA;AAAA,MAAO,YAAY,QAAQ,UAAU;AAAA;AAAA;AAAA,MAGhE,SAAS,QAAQ,UAAU;AAAA,IAC7B,CAAC,CAAC;AACF,QAAI,MAAO,OAAM,KAAK,OAAO,uBAAuB,OAAO,IAAI,EAAE;AACjE,QAAI,SAAS,OAAW,WAAU,MAAM,MAAM;AAE9C,WAAO,OAAO,KAAK,IAAI;AAAA,EACzB;AAEA,QAAM,IAAI,SAAS,qBAAqB,KAAK,OAAO;AAAA;AAAA,EAAU,KAAK,EAAE;AACvE;AAEA,KAAK,QAAQ,KAAK,MAAM,CAAC,CAAC,EACvB,KAAK,CAAC,SAAS;AAAE,UAAQ,WAAW;AAAK,CAAC,EAC1C,MAAM,CAAC,MAAM;AACZ,UAAQ,OAAO,MAAM,GAAG,aAAa,WAAW,EAAE,UAAU,aAAa,QAAQ,GAAG,EAAE,IAAI,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC;AAAA,CAAI;AAC1H,UAAQ,WAAW;AACrB,CAAC;",
|
|
5
|
+
"names": ["resolve", "t", "lead", "resolve", "t", "rule", "write", "children", "leaf", "rawEntry", "ch", "trivia", "ch", "trivia", "childrenOf", "parser", "rule", "ruleNameOf", "parser", "rule", "EMPTY", "ch", "node", "inRanges", "firstSet", "span", "firstSet", "parse", "ch", "firstSet", "fast", "tr", "trivia", "parser", "inRanges", "ch", "result", "deriveExpected", "label", "parser", "parser", "parser", "failAt", "children", "rawEntry", "trivia", "skip", "leaf", "ch", "fn", "t", "spec", "ranges", "t", "t", "ip", "rule", "head", "routed", "resolve", "META", "q", "META", "ESC", "inSet", "ch", "cp", "t", "lead", "splitDelimArms", "delimitedBodySound", "str", "endV", "openLen", "j", "openChk", "t", "EMPTY_TL", "EMPTY_FX", "t", "trivia", "ch", "v", "scanEnd", "committed", "armFx", "itemFx", "routed", "ch", "t", "t", "ref", "rules", "parser", "rule", "ruleNameOf", "ch", "t", "rule", "out", "i", "union", "intersection", "d", "resolve", "children", "span", "rawChildren", "triviaLog", "state", "rules", "rule", "assemble", "assemble", "render", "parts", "render", "m", "any", "choiceArms", "token", "probeAt", "rule", "t", "rule", "lead", "start", "end", "i", "hits", "matchingParen", "ch", "empty", "attempt", "render", "t", "label"]
|
|
7
6
|
}
|