@thomasfosterau/effect-parse 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +202 -0
- package/README.md +19 -1
- package/dist/Ascii.d.ts.map +1 -1
- package/dist/Ascii.js +5 -3
- package/dist/Ascii.js.map +1 -1
- package/dist/Binary.d.ts +5 -2
- package/dist/Binary.d.ts.map +1 -1
- package/dist/Binary.js +20 -3
- package/dist/Binary.js.map +1 -1
- package/dist/Bits.d.ts.map +1 -1
- package/dist/Bits.js +4 -0
- package/dist/Bits.js.map +1 -1
- package/dist/Input.d.ts +21 -3
- package/dist/Input.d.ts.map +1 -1
- package/dist/Input.js +31 -4
- package/dist/Input.js.map +1 -1
- package/dist/Nom.d.ts.map +1 -1
- package/dist/ParseError.d.ts +69 -11
- package/dist/ParseError.d.ts.map +1 -1
- package/dist/ParseError.js +129 -28
- package/dist/ParseError.js.map +1 -1
- package/dist/Parser.d.ts +10 -4
- package/dist/Parser.d.ts.map +1 -1
- package/dist/Parser.js +10 -24
- package/dist/Parser.js.map +1 -1
- package/dist/ParserSchema.d.ts.map +1 -1
- package/dist/ParserSchema.js +1 -2
- package/dist/ParserSchema.js.map +1 -1
- package/dist/ParserStream.d.ts +119 -12
- package/dist/ParserStream.d.ts.map +1 -1
- package/dist/ParserStream.js +282 -55
- package/dist/ParserStream.js.map +1 -1
- package/dist/Syntax.js +1 -1
- package/dist/Text.d.ts.map +1 -1
- package/dist/Text.js +13 -7
- package/dist/Text.js.map +1 -1
- package/dist/Token.d.ts +10 -1
- package/dist/Token.d.ts.map +1 -1
- package/dist/Token.js +14 -5
- package/dist/Token.js.map +1 -1
- package/dist/internal/compiler/closure.d.ts +1 -1
- package/dist/internal/compiler/closure.d.ts.map +1 -1
- package/dist/internal/compiler/closure.js +7 -17
- package/dist/internal/compiler/closure.js.map +1 -1
- package/dist/internal/compiler/first.d.ts.map +1 -1
- package/dist/internal/compiler/first.js +2 -1
- package/dist/internal/compiler/first.js.map +1 -1
- package/dist/internal/compiler/graph.d.ts +23 -1
- package/dist/internal/compiler/graph.d.ts.map +1 -1
- package/dist/internal/compiler/graph.js +27 -5
- package/dist/internal/compiler/graph.js.map +1 -1
- package/dist/internal/compiler/jit.d.ts.map +1 -1
- package/dist/internal/compiler/jit.js +26 -13
- package/dist/internal/compiler/jit.js.map +1 -1
- package/dist/internal/compiler/registry.d.ts +1 -1
- package/dist/internal/compiler/wasm.d.ts.map +1 -1
- package/dist/internal/compiler/wasm.js +105 -34
- package/dist/internal/compiler/wasm.js.map +1 -1
- package/dist/internal/node.d.ts +19 -1
- package/dist/internal/node.d.ts.map +1 -1
- package/dist/internal/node.js +42 -8
- package/dist/internal/node.js.map +1 -1
- package/dist/internal/run.d.ts +3 -1
- package/dist/internal/run.d.ts.map +1 -1
- package/dist/internal/run.js +4 -2
- package/dist/internal/run.js.map +1 -1
- package/dist/internal/stack.d.ts +8 -0
- package/dist/internal/stack.d.ts.map +1 -1
- package/dist/internal/stack.js +17 -1
- package/dist/internal/stack.js.map +1 -1
- package/dist/internal/tokens.d.ts +10 -3
- package/dist/internal/tokens.d.ts.map +1 -1
- package/dist/internal/tokens.js +22 -9
- package/dist/internal/tokens.js.map +1 -1
- package/dist/internal/tuple.d.ts +6 -0
- package/dist/internal/tuple.d.ts.map +1 -0
- package/dist/internal/tuple.js +170 -0
- package/dist/internal/tuple.js.map +1 -0
- package/package.json +17 -10
- package/src/Ascii.ts +5 -3
- package/src/Binary.ts +24 -3
- package/src/Bits.ts +4 -0
- package/src/Input.ts +37 -4
- package/src/ParseError.ts +206 -52
- package/src/Parser.ts +19 -29
- package/src/ParserSchema.ts +1 -2
- package/src/ParserStream.ts +336 -62
- package/src/Text.ts +16 -12
- package/src/Token.ts +14 -5
- package/src/internal/compiler/closure.ts +9 -18
- package/src/internal/compiler/first.ts +6 -0
- package/src/internal/compiler/graph.ts +32 -4
- package/src/internal/compiler/jit.ts +37 -17
- package/src/internal/compiler/wasm.ts +141 -68
- package/src/internal/node.ts +49 -3
- package/src/internal/run.ts +4 -2
- package/src/internal/stack.ts +17 -0
- package/src/internal/tokens.ts +20 -10
- package/src/internal/tuple.ts +141 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"closure.js","names":[],"sources":["../../../src/internal/compiler/closure.ts"],"sourcesContent":["/**\n * The closure compiler: turns a parser's description into specialized\n * closures with the step signature. Compiled steps return a value, or\n * `Fail` with only `state.mode` set: no diagnostics are recorded.\n *\n * Nothing here generates code, so it works under a Content Security\n * Policy. Parsers that can't be compiled run their own (interpreted) steps\n * on the same state.\n */\nimport * as Predicate from \"effect/Predicate\"\nimport type { Encoding } from \"../../Encoding.js\"\nimport type { ErrMode, Input, State } from \"../../Input.js\"\nimport { Fail } from \"../../Input.js\"\nimport * as Option from \"effect/Option\"\nimport * as Result from \"effect/Result\"\nimport type { Node, NodeOf, ParserLike } from \"../node.js\"\nimport { addEntry, flushEntries, fromEntries, isPlainKey } from \"../entries.js\"\nimport { Defer, nodeOf, scansFloat } from \"../node.js\"\nimport { floatScan, floatTexts, scanFloatBytes, scanFloatString, toFloat } from \"../numbers.js\"\nimport { charOf, fastLimit, firstCodePoint, fold, textIn, utf16be, utf16le, utf8, utf8Text, validate } from \"../text.js\"\nimport { countTokens, indexOf, indexOfAny } from \"../tokens.js\"\nimport type { AltPlan } from \"./first.js\"\nimport { Key } from \"../key.js\"\nimport * as Resume from \"../resume.js\"\nimport type { Backend } from \"./registry.js\"\nimport type { EntryPair } from \"./entries.js\"\nimport { buildsEntries, pairOf } from \"./entries.js\"\nimport { FirstSets, planAlt } from \"./first.js\"\nimport { nextStop, SearchHead, StopCache, stopChars } from \"./search.js\"\nimport { acceptTable, kindOfEncoding, TableSize, textSet, tokenSet } from \"./sets.js\"\n\nexport type Step = (state: State<any>) => any\n\n/** A parser that the compiler left to its interpreted step. */\nexport interface Fallback {\n readonly name: string | undefined\n readonly tag: Node[\"_tag\"]\n readonly reason: string\n}\n\n/** The maximum number of distinct parsers compiled for one root. */\nconst maxNodes = 2048\n\nconst BT: ErrMode = \"Backtrack\"\nconst CUT: ErrMode = \"Cut\"\nconst INC: ErrMode = \"Incomplete\"\n\n/**\n * How many units past the cursor a single token can depend on (a code\n * point is at most 4 units). In a partial parse, a token parser that read\n * no closer than this to the end of the input behaves exactly as on\n * complete input.\n */\nconst Margin = 4\n\nconst lowerAscii = (c: number): number => (c >= 65 && c <= 90 ? c + 32 : c)\n\ninterface Slot {\n fn: Step | undefined\n}\n\nclass Compiler {\n readonly used = new Map<ParserLike, Slot>()\n readonly unused = new Map<ParserLike, Slot>()\n readonly firsts: FirstSets\n readonly fallbacks: Array<Fallback> = []\n private readonly fellBack = new Set<ParserLike>()\n private budget = maxNodes\n\n /**\n * `resumable`: compile for streaming parses, which may be partial (see\n * `state.partial`) and keep checkpoints (see `internal/resume.ts`).\n */\n constructor(\n readonly kind: 0 | 1 | 2,\n readonly resumable = false\n ) {\n this.firsts = new FirstSets(kind)\n }\n\n /**\n * In a resumable build, runs the compiled token parser `step`, and falls\n * back to the interpreted one when it read within `lookahead` units of\n * the end of a partial input, where it might have to report `Incomplete`.\n * Compiled token parsers leave `state.pos` where they stopped reading,\n * even when they fail.\n */\n private partialSafe(p: ParserLike, step: Step, lookahead: number): Step {\n if (!this.resumable) return step\n const interpreted = p.step\n const ahead = Math.max(lookahead, Margin)\n return (s) => {\n if (!s.partial) return step(s)\n const start = s.pos\n const r = step(s)\n if (s.pos + ahead <= s.end) return r\n s.pos = start\n return interpreted(s)\n }\n }\n\n /** Compiles `p`; when `used` is false its output is not needed. */\n compile(p: ParserLike, used: boolean): Step {\n const memo = used ? this.used : this.unused\n const slot = memo.get(p)\n if (slot !== undefined) {\n if (slot.fn !== undefined) return slot.fn\n // A cycle through `suspend`: the slot is filled once the cycle is compiled, before any parse runs\n return (s) => (slot.fn ?? p.step)(s)\n }\n const fresh: Slot = { fn: undefined }\n memo.set(p, fresh)\n const node = nodeOf(p)\n const fn = --this.budget < 0 ? this.fallback(p, node, \"node budget exceeded\") : this.build(p, node, used)\n fresh.fn = fn\n return fn\n }\n\n fallback(p: ParserLike, node: Node, reason: string): Step {\n this.note(p, node, reason)\n return p.step\n }\n\n /** Records that (part of) `p` runs interpreted. */\n note(p: ParserLike, node: Node, reason: string): void {\n if (!this.fellBack.has(p)) {\n this.fellBack.add(p)\n this.fallbacks.push({ name: p.name, tag: node._tag, reason })\n }\n }\n\n /** Whether a token node reads this input kind natively. */\n private native(enc: Encoding<any> | undefined): boolean {\n return enc === undefined ? this.kind !== 2 : kindOfEncoding(enc) === this.kind\n }\n\n build(p: ParserLike, node: Node, used: boolean): Step {\n switch (node._tag) {\n case \"Opaque\":\n return this.fallback(p, node, \"not describable (Parser.make, gen, ...)\")\n case \"Fixed\":\n // `Binary`'s numbers: the step is already what a closure would be\n return p.step\n case \"Combinator\":\n return node.build(node.parsers.map((q) => this.compile(q, true)))\n case \"Succeed\": {\n const value = node.value\n return () => value\n }\n case \"Sync\": {\n const evaluate = node.evaluate\n return used ? () => evaluate() : () => undefined\n }\n case \"Fail\": {\n const mode = node.mode\n return (s) => {\n s.mode = mode\n return Fail\n }\n }\n case \"Eof\":\n return (s) => {\n if (s.pos < s.end) {\n s.mode = BT\n return Fail\n }\n // `eof`'s own failure: `Incomplete`, needing one more unit\n if (s.partial) return s.incomplete(1)\n return undefined\n }\n case \"Location\":\n return (s) => s.pos\n case \"RestLen\":\n return (s) => s.end - s.pos\n case \"Suspend\":\n return this.compile(node.resolve(), used)\n case \"Any\":\n case \"Literal\":\n case \"OneOf\":\n case \"Take\":\n case \"TakeWhile\":\n case \"TakeUntil\":\n case \"TakeUntilAny\":\n case \"Rest\":\n if (!this.native(node.encoding)) return this.fallback(p, node, \"token parser on array input\")\n return this.partialSafe(\n p,\n node.encoding === undefined ? this.token(p, node, used) : this.text(p, node, node.encoding, used),\n marginOf(node)\n )\n case \"TillLineEnding\":\n case \"Identifier\":\n case \"Bom\":\n return this.fallback(p, node, \"leaf parser without a compiled form\")\n case \"Escaped\":\n if (!this.native(node.encoding)) return this.fallback(p, node, \"token parser on array input\")\n return this.escaped(node)\n case \"Map\": {\n if (!used) return this.compile(node.self, false)\n if (node.f === toFloat) {\n const step = this.float(node)\n if (step !== undefined) return step\n }\n // Streaming builds keep the array, which their checkpoints hold\n if (node.f === fromEntries && buildsEntries(node.self)) return this.entries(node.self)\n const c = this.compile(node.self, true)\n const f = node.f\n return (s) => {\n const a = c(s)\n return a === Fail ? Fail : f(a)\n }\n }\n case \"As\": {\n const c = this.compile(node.self, false)\n if (!used) return c\n const value = node.value\n return (s) => (c(s) === Fail ? Fail : value)\n }\n case \"Tap\": {\n const c = this.compile(node.self, true)\n const f = node.f\n return (s) => {\n const a = c(s)\n if (a !== Fail) f(a)\n return a\n }\n }\n case \"TryMap\": {\n const c = this.compile(node.self, true)\n const f = node.f\n return (s) => {\n const a = c(s)\n if (a === Fail) return Fail\n const r = f(a)\n if (Result.isSuccess(r)) return r.success\n s.mode = BT\n return Fail\n }\n }\n case \"FilterMap\": {\n const c = this.compile(node.self, true)\n const f = node.f\n return (s) => {\n const a = c(s)\n if (a === Fail) return Fail\n const o = f(a)\n if (Option.isSome(o)) return o.value\n s.mode = BT\n return Fail\n }\n }\n case \"FastPath\": {\n const c = this.compile(node.self, used)\n const fast = node.fast\n return (s) => {\n const start = s.pos\n const a = fast(s)\n if (a !== Defer) return a\n s.pos = start\n return c(s)\n }\n }\n case \"MapOrFail\": {\n const c = this.compile(node.self, true)\n const f = node.f\n return (s) => {\n const a = c(s)\n if (a === Fail) return Fail\n const b = f(a)\n if (b === Fail) s.mode = BT\n return b\n }\n }\n case \"Filter\": {\n const c = this.compile(node.self, true)\n const predicate = node.predicate\n return (s) => {\n const a = c(s)\n if (a === Fail) return Fail\n if (predicate(a)) return a\n s.mode = BT\n return Fail\n }\n }\n case \"FlatMap\": {\n // The parser returned by `f` runs interpreted\n const c = this.compile(node.self, true)\n const f = node.f\n this.note(p, node, \"the parser returned by the function runs interpreted\")\n return (s) => {\n const a = c(s)\n return a === Fail ? Fail : f(a).step(s)\n }\n }\n case \"Taken\":\n if (node.encoding !== undefined && !this.native(node.encoding)) {\n return this.fallback(p, node, \"Text parser on another input kind\")\n }\n return this.taken(node, used)\n case \"WithTaken\": {\n const c = this.compile(node.self, true)\n return (s) => {\n const start = s.pos\n const a = c(s)\n return a === Fail ? Fail : [a, s.slice(start, s.pos)]\n }\n }\n case \"MapSpan\": {\n const c = this.compile(node.self, used)\n if (!used) return c\n const f = node.f\n return (s) => {\n const start = s.pos\n const a = c(s)\n return a === Fail ? Fail : f(a, start, s.pos)\n }\n }\n case \"Span\": {\n const c = this.compile(node.self, false)\n if (!used) return c\n return (s) => {\n const start = s.pos\n return c(s) === Fail ? Fail : { start, end: s.pos }\n }\n }\n case \"WithSpan\": {\n const c = this.compile(node.self, true)\n return (s) => {\n const start = s.pos\n const a = c(s)\n return a === Fail ? Fail : [a, { start, end: s.pos }]\n }\n }\n case \"Mode\": {\n const c = this.compile(node.self, used)\n const from = node.from\n const to = node.to\n return (s) => {\n const a = c(s)\n if (a === Fail && s.mode === from) s.mode = to\n return a\n }\n }\n case \"Context\":\n case \"Expected\":\n case \"Quiet\":\n case \"MapError\":\n case \"OrFail\":\n case \"Trace\":\n case \"Syntax\":\n case \"RetryAfter\":\n // Diagnostics only, or inactive outside parseRecoverable / tracing\n return this.compile(node.self, used)\n case \"ResumeAfter\": {\n const c = this.compile(node.self, used)\n if (!used) return c\n return (s) => {\n const a = c(s)\n return a === Fail ? Fail : Option.some(a)\n }\n }\n case \"Opt\":\n case \"OrElseSucceed\": {\n const c = this.compile(node.self, used)\n const orElse = !used ? undefined : Predicate.isTagged(node, \"Opt\") ? Option.none : node.value\n const some = used && Predicate.isTagged(node, \"Opt\")\n return (s) => {\n const start = s.pos\n const a = c(s)\n if (a !== Fail) return some ? Option.some(a) : a\n if (s.mode !== BT) return Fail\n s.pos = start\n return orElse === undefined ? undefined : orElse()\n }\n }\n case \"Peek\": {\n const c = this.compile(node.self, used)\n return (s) => {\n const start = s.pos\n const a = c(s)\n if (a !== Fail) s.pos = start\n return a\n }\n }\n case \"Not\": {\n const c = this.compile(node.self, false)\n return (s) => {\n const start = s.pos\n if (c(s) !== Fail) {\n s.pos = start\n s.mode = BT\n return Fail\n }\n if (s.mode !== BT) return Fail\n s.pos = start\n return undefined\n }\n }\n case \"Seq\":\n return this.seq(node, used)\n case \"Struct\": {\n const keys = node.keys\n const steps = node.parsers.map((q) => this.compile(q, used))\n const n = steps.length\n if (!used) return this.chain(steps)\n return (s) => {\n const out: Record<string, unknown> = {}\n for (let i = 0; i < n; i++) {\n const a = steps[i](s)\n if (a === Fail) return Fail\n out[keys[i]] = a\n }\n return out\n }\n }\n case \"SeqWith\": {\n const steps = node.parsers.map((q) => this.compile(q, used))\n if (!used) return this.chain(steps)\n return this.seqWith(steps, node.f)\n }\n case \"ZipWith\": {\n const c1 = this.compile(node.self, used)\n const c2 = this.compile(node.that, used)\n if (!used) return this.chain([c1, c2])\n const f = node.f\n return (s) => {\n const a = c1(s)\n if (a === Fail) return Fail\n const b = c2(s)\n return b === Fail ? Fail : f(a, b)\n }\n }\n case \"Alt\":\n return this.alt(node, used)\n case \"Dispatch\":\n return this.dispatch(p, node, used)\n case \"Repeat\":\n case \"Fold\": {\n // A run of a character set whose characters are not kept scans as a `takeWhile` (#79)\n const element = Predicate.isTagged(node, \"Repeat\") && !used ? nodeOf(node.self) : undefined\n if (\n element !== undefined &&\n Predicate.isTagged(element, \"OneOf\") &&\n this.kind !== 2 &&\n this.native(element.encoding)\n ) {\n const { encoding, negate, set } = element\n const run: NodeOf<\"TakeWhile\"> = { _tag: \"TakeWhile\", set, negate, encoding, min: node.min, max: node.max }\n // The repetition's own step is the exact fallback near the end of a partial input\n return this.partialSafe(\n p,\n encoding === undefined ? this.token(p, run, false) : this.text(p, run, encoding, false),\n Margin\n )\n }\n return this.repeat(node, used)\n }\n case \"RepeatTill\":\n return this.repeatTill(node)\n case \"Separated\":\n return this.separated(node, used)\n case \"SeparatedFold\":\n return this.separatedFold(node)\n case \"Service\":\n case \"Provide\":\n return this.fallback(p, node, \"services stay interpreted\")\n }\n }\n\n /** `seqWith`: up to three parsers without an array of values. */\n seqWith(steps: ReadonlyArray<Step>, f: NodeOf<\"SeqWith\">[\"f\"]): Step {\n const n = steps.length\n if (n === 0) return () => f()\n const [c1, c2, c3] = steps\n if (n === 1)\n return (s) => {\n const a = c1(s)\n return a === Fail ? Fail : f(a)\n }\n if (n === 2)\n return (s) => {\n const a = c1(s)\n if (a === Fail) return Fail\n const b = c2(s)\n return b === Fail ? Fail : f(a, b)\n }\n if (n === 3)\n return (s) => {\n const a = c1(s)\n if (a === Fail) return Fail\n const b = c2(s)\n if (b === Fail) return Fail\n const c = c3(s)\n return c === Fail ? Fail : f(a, b, c)\n }\n return (s) => {\n const values = new Array(n)\n for (let i = 0; i < n; i++) {\n const a = steps[i](s)\n if (a === Fail) return Fail\n values[i] = a\n }\n return f(...values)\n }\n }\n\n /** Runs steps in order, for their effect on the cursor only. */\n chain(steps: ReadonlyArray<Step>): Step {\n const n = steps.length\n if (n === 0) return () => undefined\n if (n === 1) return steps[0]\n if (n === 2) {\n const a = steps[0]\n const b = steps[1]\n return (s) => (a(s) === Fail ? Fail : b(s))\n }\n return (s) => {\n for (let i = 0; i < n; i++) if (steps[i](s) === Fail) return Fail\n return undefined\n }\n }\n\n seq(node: NodeOf<\"Seq\">, used: boolean): Step {\n const output = node.output\n const keep = (i: number) =>\n used && (output === \"tuple\" || output === i || (Array.isArray(output) && output.includes(i)))\n const steps = node.parsers.map((q, i) => this.compile(q, keep(i)))\n const n = steps.length\n if (!used) return this.chain(steps)\n if (output === \"tuple\") {\n return (s) => {\n const out = new Array(n)\n for (let i = 0; i < n; i++) {\n const a = steps[i](s)\n if (a === Fail) return Fail\n out[i] = a\n }\n return out\n }\n }\n if (Predicate.isNumber(output)) {\n if (n === 2) {\n const a = steps[0]\n const b = steps[1]\n return output === 0\n ? (s) => {\n const x = a(s)\n if (x === Fail) return Fail\n return b(s) === Fail ? Fail : x\n }\n : (s) => (a(s) === Fail ? Fail : b(s))\n }\n return (s) => {\n let out: unknown\n for (let i = 0; i < n; i++) {\n const a = steps[i](s)\n if (a === Fail) return Fail\n if (i === output) out = a\n }\n return out\n }\n }\n const [i0, i1] = output\n return (s) => {\n let x: unknown\n let y: unknown\n for (let i = 0; i < n; i++) {\n const a = steps[i](s)\n if (a === Fail) return Fail\n if (i === i0) x = a\n else if (i === i1) y = a\n }\n return [x, y]\n }\n }\n\n /** The unit at the cursor, or -1 at the end of the input. */\n private unitReader(): (s: State<any>) => number {\n return this.kind === 0\n ? (s: State<string>) => (s.pos < s.end ? s.input.charCodeAt(s.pos) : -1)\n : (s: State<Uint8Array>) => (s.pos < s.end ? s.input[s.pos] : -1)\n }\n\n alt(node: NodeOf<\"Alt\">, used: boolean): Step {\n const steps = node.parsers.map((q) => this.compile(q, used))\n const n = steps.length\n if (n === 0) {\n return (s) => {\n s.mode = BT\n return Fail\n }\n }\n if (n === 1) return steps[0]\n const plan: AltPlan | undefined = this.kind === 2 ? undefined : planAlt(node.parsers.map((q) => this.firsts.of(q)))\n if (plan === undefined) {\n return (s) => {\n const start = s.pos\n for (let i = 0; i < n; i++) {\n const a = steps[i](s)\n if (a !== Fail) return a\n if (s.mode !== BT) return Fail\n s.pos = start\n }\n s.mode = BT\n return Fail\n }\n }\n const lists = plan.lists.map((l) => l.map((i) => steps[i]))\n const { byUnit, end, high } = plan\n const unit = this.unitReader()\n const resumable = this.resumable\n return (s) => {\n // Near the end of a partial input, branches may be incomplete rather than fail\n const u = resumable && s.partial && s.pos + Margin > s.end ? -2 : unit(s)\n const candidates = u === -2 ? steps : lists[u < 0 ? end : u < TableSize ? byUnit[u] : high]\n const start = s.pos\n for (let i = 0; i < candidates.length; i++) {\n const a = candidates[i](s)\n if (a !== Fail) return a\n if (s.mode !== BT) return Fail\n s.pos = start\n }\n s.mode = BT\n return Fail\n }\n }\n\n dispatch(p: ParserLike, node: NodeOf<\"Dispatch\">, used: boolean): Step {\n const selector = this.compile(node.selector, true)\n const choose = node.choose\n const compiled = new Map<ParserLike, Step>()\n if (node.cases !== undefined) {\n for (const key of Reflect.ownKeys(node.cases)) {\n const q = node.cases[key]\n if (!compiled.has(q)) compiled.set(q, this.compile(q, used))\n }\n }\n if (node.otherwise !== undefined && !compiled.has(node.otherwise)) {\n compiled.set(node.otherwise, this.compile(node.otherwise, used))\n }\n const general: Step = (s) => {\n const start = s.pos\n const key = selector(s)\n if (key === Fail) return Fail\n const q = choose(key)\n if (q === undefined) {\n s.pos = start\n s.mode = BT\n return Fail\n }\n return (compiled.get(q) ?? q.step)(s)\n }\n if (node.cases === undefined) {\n this.note(p, node, \"the parser returned by the function of cases runs interpreted\")\n return general\n }\n // Switch on the next unit when the selector is `any` or `peek(any)`\n const top = nodeOf(node.selector)\n const peek = Predicate.isTagged(top, \"Peek\")\n const sel = peek ? nodeOf(top.self) : top\n if (!Predicate.isTagged(sel, \"Any\") || !this.native(sel.encoding)) return general\n const enc = sel.encoding\n // Units below `limit` are whole tokens, so the key is known in advance\n const limit = enc === undefined ? (this.kind === 0 ? 0xd800 : TableSize) : Math.min(fastLimit(enc), 0xd800)\n const size = Math.min(limit, TableSize)\n if (size === 0) return general\n const table: Array<Step | null> = []\n for (let u = 0; u < size; u++) {\n const key = enc === undefined && this.kind === 1 ? u : charOf(u)\n const q = choose(key)\n table.push(q === undefined ? null : (compiled.get(q) ?? q.step))\n }\n const unit = this.unitReader()\n const advance = peek ? 0 : 1\n const resumable = this.resumable\n return (s) => {\n if (resumable && s.partial && s.pos + Margin > s.end) return general(s)\n const u = unit(s)\n if (u < 0) {\n s.mode = BT\n return Fail\n }\n if (u >= size) return general(s)\n const q = table[u]\n if (q === null) {\n s.mode = BT\n return Fail\n }\n s.pos += advance\n return q(s)\n }\n }\n\n repeat(node: NodeOf<\"Repeat\"> | NodeOf<\"Fold\">, used: boolean): Step {\n const { max, min } = node\n const checkLoop = max === Infinity\n const isFold = Predicate.isTagged(node, \"Fold\")\n const cond = isFold ? node.while : undefined\n const c = this.compile(node.self, used)\n const resumable = this.resumable\n const key = new Key()\n // The accumulator: an array, the fold's value, or nothing when unused (and unneeded by `while`)\n const tracked = used || cond !== undefined\n const init: () => unknown = !tracked ? () => undefined : isFold ? node.init : () => []\n const add: (acc: any, a: unknown) => unknown = !tracked\n ? (acc) => acc\n : isFold\n ? node.f\n : (acc, a) => {\n acc.push(a)\n return acc\n }\n return (s) => {\n const entry = s.pos\n let acc: unknown\n let count = 0\n let resumed = false\n if (resumable && s.resume !== undefined) {\n // SAFETY: only this loop saves checkpoints under `key`: `{ acc, count, pos }` when it runs out, a `Done` when it completes\n const cp = Resume.take(s, key, entry) as Resume.Done | { acc: unknown; count: number; pos: number } | undefined\n if (cp instanceof Resume.Done) {\n s.pos = cp.pos\n return cp.value\n }\n if (cp !== undefined) {\n acc = cp.acc\n count = cp.count\n s.pos = cp.pos\n resumed = true\n }\n }\n if (!resumed) acc = init()\n for (; count < max; count++) {\n if (cond !== undefined && count >= min && !cond(acc)) break\n const start = s.pos\n const a = c(s)\n if (a === Fail) {\n if (s.mode === INC && s.resume !== undefined) Resume.save(s, key, entry, { acc, count, pos: start })\n if (s.mode !== BT || count < min) return Fail\n s.pos = start\n return resumed ? Resume.done(s, key, entry, true, acc) : acc\n }\n if (checkLoop && s.pos === start) {\n s.mode = CUT\n return Fail\n }\n acc = add(acc, a)\n }\n return resumed ? Resume.done(s, key, entry, true, acc) : acc\n }\n }\n\n /**\n * `map(self, Object.fromEntries)`, where `buildsEntries(self)`: builds the\n * object directly (see the JIT).\n */\n private entries(p: ParserLike): Step {\n const node = nodeOf(p)\n if (Predicate.isTagged(node, \"Mode\")) {\n const c = this.entries(node.self)\n const from = node.from\n const to = node.to\n return (s) => {\n const a = c(s)\n if (a === Fail && s.mode === from) s.mode = to\n return a\n }\n }\n if (Predicate.isTagged(node, \"Seq\")) {\n // SAFETY: `buildsEntries` passes through a sequence only when it keeps one output, by index\n const i = node.output as number\n const steps = node.parsers.map((q, j) => (j === i ? this.entries(q) : this.compile(q, false)))\n return (s) => {\n let out: unknown\n for (let j = 0; j < steps.length; j++) {\n const a = steps[j](s)\n if (a === Fail) return Fail\n if (j === i) out = a\n }\n return out\n }\n }\n if (Predicate.isTagged(node, \"Repeat\") || Predicate.isTagged(node, \"Separated\")) {\n const pair = pairOf(node.self)\n if (pair !== undefined) return this.entriesLoop(node, pair)\n // Not reached (`buildsEntries` found the pair): build the pairs, then the object\n const c = this.compile(p, true)\n return (s) => {\n const a = c(s)\n // SAFETY: a used `repeat` or `separated` returns the array of its elements, here the pairs\n return a === Fail ? Fail : fromEntries(a as Iterable<readonly [PropertyKey, unknown]>)\n }\n }\n // SAFETY: the other nodes `buildsEntries` passes through are diagnostics, which all wrap a `self`\n return this.entries((node as { readonly self: ParserLike }).self)\n }\n\n private entriesLoop(node: NodeOf<\"Repeat\"> | NodeOf<\"Separated\">, pair: EntryPair): Step {\n const parts = pair.parsers.map((q, j) => this.compile(q, j === pair.key || j === pair.value))\n const { key: ki, value: vi } = pair\n // Parses an entry and adds it to `acc`\n const entry = (s: State<any>, acc: EntriesAcc): boolean => {\n let key: unknown\n let value: unknown\n for (let j = 0; j < parts.length; j++) {\n const a = parts[j](s)\n if (a === Fail) return false\n if (j === ki) key = a\n else if (j === vi) value = a\n }\n acc.add(key, value)\n return true\n }\n const { max, min } = node\n const checkLoop = max === Infinity\n // A streaming build's checkpoint holds the object built so far (see `repeat`)\n const resumable = this.resumable\n const site = new Key()\n if (Predicate.isTagged(node, \"Repeat\")) {\n return (s) => {\n const at = s.pos\n const cp = resumable && s.resume !== undefined ? resumeEntries(s, site, at) : undefined\n if (cp instanceof Resume.Done) return cp.value\n const resumed = cp !== undefined\n const acc = cp?.acc ?? new EntriesAcc()\n for (let count = cp?.count ?? 0; count < max; count++) {\n const start = s.pos\n let key: unknown\n let value: unknown\n let ok = true\n for (let j = 0; j < parts.length; j++) {\n const a = parts[j](s)\n if (a === Fail) {\n ok = false\n break\n }\n if (j === ki) key = a\n else if (j === vi) value = a\n }\n if (!ok) {\n return stopEntries(s, site, at, resumed, acc, count, start, min)\n }\n if (checkLoop && s.pos === start) {\n s.mode = CUT\n return Fail\n }\n acc.add(key, value)\n }\n return entriesDone(s, site, at, resumed, acc)\n }\n }\n const sep = this.compile(node.separator, false)\n return (s) => {\n const at = s.pos\n const cp = resumable && s.resume !== undefined ? resumeEntries(s, site, at) : undefined\n if (cp instanceof Resume.Done) return cp.value\n const resumed = cp !== undefined\n const acc = cp?.acc ?? new EntriesAcc()\n let count = cp?.count ?? 0\n if (!resumed) {\n if (max === 0) return acc.result()\n const start = s.pos\n if (!entry(s, acc)) {\n if (s.mode !== BT || min > 0) return Fail\n s.pos = start\n return acc.result()\n }\n count++\n }\n while (count < max) {\n const start = s.pos\n if (sep(s) === Fail) {\n return stopEntries(s, site, at, resumed, acc, count, start, min)\n }\n if (checkLoop && s.pos === start) {\n s.mode = CUT\n return Fail\n }\n if (!entry(s, acc)) {\n return stopEntries(s, site, at, resumed, acc, count, start, min)\n }\n count++\n }\n return entriesDone(s, site, at, resumed, acc)\n }\n }\n\n repeatTill(node: NodeOf<\"RepeatTill\">): Step {\n const { max, min } = node\n const c = this.compile(node.self, true)\n const end = this.compile(node.end, true)\n return (s) => {\n const acc: Array<unknown> = []\n while (true) {\n const start = s.pos\n if (acc.length >= min) {\n const b = end(s)\n if (b !== Fail) return [acc, b]\n if (s.mode !== BT) return Fail\n s.pos = start\n if (acc.length >= max) return Fail\n }\n const a = c(s)\n if (a === Fail) return Fail\n if (s.pos === start) {\n s.mode = CUT\n return Fail\n }\n acc.push(a)\n }\n }\n }\n\n separated(node: NodeOf<\"Separated\">, used: boolean): Step {\n const { max, min } = node\n const checkLoop = max === Infinity\n const c = this.compile(node.self, used)\n const sep = this.compile(node.separator, false)\n const resumable = this.resumable\n const key = new Key()\n return (s) => {\n const entry = s.pos\n let acc: Array<unknown> | undefined\n let count = 0\n let resumed = false\n if (resumable && s.resume !== undefined) {\n // SAFETY: only this loop saves checkpoints under `key`: `{ acc, count, pos }` when it runs out, a `Done` when it completes\n const cp = Resume.take(s, key, entry) as\n | Resume.Done\n | { acc: Array<unknown>; count: number; pos: number }\n | undefined\n if (cp instanceof Resume.Done) {\n s.pos = cp.pos\n return cp.value\n }\n if (cp !== undefined) {\n acc = cp.acc\n count = cp.count\n s.pos = cp.pos\n resumed = true\n }\n }\n if (!resumed) {\n acc = used ? [] : undefined\n if (max === 0) return acc\n const start = s.pos\n const first = c(s)\n if (first === Fail) {\n if (s.mode !== BT || min > 0) return Fail\n s.pos = start\n return acc\n }\n acc?.push(first)\n count = 1\n }\n while (count < max) {\n const start = s.pos\n if (sep(s) === Fail) {\n if (s.mode === INC && s.resume !== undefined) Resume.save(s, key, entry, { acc, count, pos: start })\n if (s.mode !== BT || count < min) return Fail\n s.pos = start\n return resumed ? Resume.done(s, key, entry, true, acc) : acc\n }\n if (checkLoop && s.pos === start) {\n s.mode = CUT\n return Fail\n }\n const a = c(s)\n if (a === Fail) {\n if (s.mode === INC && s.resume !== undefined) Resume.save(s, key, entry, { acc, count, pos: start })\n if (s.mode !== BT || count < min) return Fail\n s.pos = start\n return resumed ? Resume.done(s, key, entry, true, acc) : acc\n }\n acc?.push(a)\n count++\n }\n return resumed ? Resume.done(s, key, entry, true, acc) : acc\n }\n }\n\n separatedFold(node: NodeOf<\"SeparatedFold\">): Step {\n const c = this.compile(node.self, true)\n const sep = this.compile(node.separator, true)\n const op = node.op\n const resumable = this.resumable\n const key = new Key()\n if (!node.right) {\n return (s) => {\n const entry = s.pos\n let acc: unknown\n let resumed = false\n if (resumable && s.resume !== undefined) {\n // SAFETY: only this loop saves checkpoints under `key`: `{ acc, pos }` when it runs out, a `Done` when it completes\n const cp = Resume.take(s, key, entry) as Resume.Done | { acc: unknown; pos: number } | undefined\n if (cp instanceof Resume.Done) {\n s.pos = cp.pos\n return cp.value\n }\n if (cp !== undefined) {\n acc = cp.acc\n s.pos = cp.pos\n resumed = true\n }\n }\n if (!resumed) {\n acc = c(s)\n if (acc === Fail) return Fail\n }\n while (true) {\n const start = s.pos\n const x = sep(s)\n if (x === Fail) {\n if (s.mode === INC && s.resume !== undefined) Resume.save(s, key, entry, { acc, pos: start })\n if (s.mode !== BT) return Fail\n s.pos = start\n return resumed ? Resume.done(s, key, entry, true, acc) : acc\n }\n if (s.pos === start) {\n s.mode = CUT\n return Fail\n }\n const a = c(s)\n if (a === Fail) {\n if (s.mode === INC && s.resume !== undefined) Resume.save(s, key, entry, { acc, pos: start })\n if (s.mode !== BT) return Fail\n s.pos = start\n return resumed ? Resume.done(s, key, entry, true, acc) : acc\n }\n acc = op(acc, x, a)\n }\n }\n }\n return (s) => {\n const first = c(s)\n if (first === Fail) return Fail\n const values: Array<unknown> = [first]\n const seps: Array<unknown> = []\n while (true) {\n const start = s.pos\n const x = sep(s)\n if (x === Fail) {\n if (s.mode !== BT) return Fail\n s.pos = start\n break\n }\n if (s.pos === start) {\n s.mode = CUT\n return Fail\n }\n const a = c(s)\n if (a === Fail) {\n if (s.mode !== BT) return Fail\n s.pos = start\n break\n }\n seps.push(x)\n values.push(a)\n }\n let acc = values[values.length - 1]\n for (let i = seps.length - 1; i >= 0; i--) acc = op(values[i], seps[i], acc)\n return acc\n }\n }\n\n // ---------------------------------------------------------------------------\n // Token parsers (`Token`, `Ascii`)\n // ---------------------------------------------------------------------------\n\n token(p: ParserLike, node: TokenNode, used: boolean): Step {\n // SAFETY: `build` compiles a token node without an encoding only when `native` holds, that is when `kind` is not 2\n const kind = this.kind as 0 | 1\n switch (node._tag) {\n case \"Any\":\n if (kind === 1) {\n return (s: State<Uint8Array>) => {\n const pos = s.pos\n if (pos >= s.end) return fail(s)\n s.pos = pos + 1\n return s.input[pos]\n }\n }\n return (s) => {\n const pos = s.pos\n if (pos >= s.end) return fail(s)\n const str: string = s.input\n const c = str.charCodeAt(pos)\n if (c >= 0xd800 && c <= 0xdbff && pos + 1 < str.length && (str.charCodeAt(pos + 1) & 0xfc00) === 0xdc00) {\n s.pos = pos + 2\n return used ? str.slice(pos, pos + 2) : undefined\n }\n s.pos = pos + 1\n return used ? str[pos] : undefined\n }\n case \"Literal\":\n return this.tokenLiteral(p, node)\n case \"OneOf\": {\n const set = tokenSet(node.set, kind)\n const negate = node.negate\n const accept = acceptTable(set, negate)\n const test = set.test\n if (kind === 1) {\n return (s: State<Uint8Array>) => {\n const pos = s.pos\n if (pos >= s.end) return fail(s)\n const b = s.input[pos]\n if (accept[b] === 0) return fail(s)\n s.pos = pos + 1\n return b\n }\n }\n return (s) => {\n const pos = s.pos\n if (pos >= s.end) return fail(s)\n const str: string = s.input\n const c = str.charCodeAt(pos)\n if (c < TableSize) {\n if (accept[c] === 0) return fail(s)\n s.pos = pos + 1\n return used ? str[pos] : undefined\n }\n let cp = c\n if (c >= 0xd800 && c <= 0xdbff && pos + 1 < str.length) {\n const d = str.charCodeAt(pos + 1)\n if ((d & 0xfc00) === 0xdc00) cp = ((c - 0xd800) << 10) + (d - 0xdc00) + 0x10000\n }\n if (test(cp) === negate) return fail(s)\n const len = cp > 0xffff ? 2 : 1\n s.pos = pos + len\n return !used ? undefined : len === 1 ? str[pos] : str.slice(pos, pos + 2)\n }\n }\n case \"Take\": {\n const count = node.count\n if (kind === 1) {\n return (s: State<Uint8Array>) => {\n const start = s.pos\n if (s.end - start < count) return failAt(s, s.end)\n s.pos = start + count\n return used ? s.input.subarray(start, start + count) : undefined\n }\n }\n return (s) => {\n const str: string = s.input\n const start = s.pos\n const end = s.end\n let i = start\n let got = 0\n while (got < count && i < end) {\n const c = str.charCodeAt(i)\n i += c >= 0xd800 && c <= 0xdbff && i + 1 < str.length && (str.charCodeAt(i + 1) & 0xfc00) === 0xdc00 ? 2 : 1\n got++\n }\n if (got < count) return failAt(s, i)\n s.pos = i\n return used ? str.slice(start, i) : undefined\n }\n }\n case \"TakeWhile\":\n return this.tokenTakeWhile(node, used)\n case \"TakeUntil\":\n case \"TakeUntilAny\": {\n const { max, min } = node\n const bounded = min > 0 || max !== Infinity\n const search: (s: State<Input>, from: number) => number = Predicate.isTagged(node, \"TakeUntil\")\n ? (s, from) => indexOf(s, node.literal, from)\n : (s, from) => indexOfAny(s, node.literals, from)\n return (s) => {\n const start = s.pos\n const idx = search(s, start)\n if (idx < 0) return failAt(s, s.end)\n if (bounded) {\n const count = countTokens(s, start, idx)\n if (count < min || count > max) return failAt(s, idx)\n }\n s.pos = idx\n return used ? s.slice(start, idx) : undefined\n }\n }\n case \"Rest\":\n return (s) => {\n const start = s.pos\n s.pos = s.end\n return used ? s.slice(start, s.end) : undefined\n }\n }\n }\n\n tokenLiteral(p: ParserLike, node: NodeOf<\"Literal\">): Step {\n const lit = node.literal\n const literalKind = Predicate.isString(lit) ? 0 : lit instanceof Uint8Array ? 1 : 2\n if (this.kind === 0) {\n if (!Predicate.isString(lit)) return this.fallback(p, node, \"byte or array literal on string input\")\n const str = lit\n const len = str.length\n if (node.caseless) {\n const lowered = Array.from({ length: len }, (_, i) => lowerAscii(str.charCodeAt(i)))\n return (s) => {\n const pos = s.pos\n if (s.end - pos < len) return fail(s)\n const input: string = s.input\n for (let i = 0; i < len; i++) {\n if (lowerAscii(input.charCodeAt(pos + i)) !== lowered[i]) return fail(s)\n }\n s.pos = pos + len\n return input.slice(pos, pos + len)\n }\n }\n return stringLiteral(str, str)\n }\n const bytes = Predicate.isString(lit) ? new TextEncoder().encode(lit) : lit instanceof Uint8Array ? lit : undefined\n if (bytes === undefined) return this.fallback(p, node, \"array literal on byte input\")\n const len = bytes.length\n const sameKind = literalKind === 1 && !node.caseless\n const expect = node.caseless ? Array.from(bytes, lowerAscii) : Array.from(bytes)\n const caseless = node.caseless\n return (s) => {\n const pos = s.pos\n if (s.end - pos < len) return fail(s)\n const input: Uint8Array = s.input\n for (let i = 0; i < len; i++) {\n const b = input[pos + i]\n if ((caseless ? lowerAscii(b) : b) !== expect[i]) return fail(s)\n }\n s.pos = pos + len\n return sameKind ? lit : input.subarray(pos, pos + len)\n }\n }\n\n tokenTakeWhile(node: NodeOf<\"TakeWhile\">, used: boolean): Step {\n // SAFETY: called from `token` only, whose `kind` is not 2\n const kind = this.kind as 0 | 1\n const { max, min, negate } = node\n const set = tokenSet(node.set, kind)\n const accept = acceptTable(set, negate)\n if (kind === 1) {\n return (s) => {\n const bytes: Uint8Array = s.input\n const start = s.pos\n const limit = max === Infinity ? s.end : Math.min(s.end, start + max)\n let i = start\n while (i < limit && accept[bytes[i]] === 1) i++\n if (i - start < min) return failAt(s, i)\n s.pos = i\n return used ? bytes.subarray(start, i) : undefined\n }\n }\n const stops = negate && min <= 1 && max === Infinity ? stopChars(set) : undefined\n if (stops !== undefined) return stopTakeTill(stops, min, used)\n const test = set.test\n return (s) => {\n const str: string = s.input\n const start = s.pos\n const end = s.end\n let i = start\n let count = 0\n while (count < max && i < end) {\n const c = str.charCodeAt(i)\n if (c < TableSize) {\n if (accept[c] === 0) break\n i++\n } else if (c < 0xd800 || c > 0xdbff) {\n if (test(c) === negate) break\n i++\n } else {\n let cp = c\n if (i + 1 < str.length) {\n const d = str.charCodeAt(i + 1)\n if ((d & 0xfc00) === 0xdc00) cp = ((c - 0xd800) << 10) + (d - 0xdc00) + 0x10000\n }\n if (test(cp) === negate) break\n i += cp > 0xffff ? 2 : 1\n }\n count++\n }\n if (count < min) return failAt(s, i)\n s.pos = i\n return used ? str.slice(start, i) : undefined\n }\n }\n\n // ---------------------------------------------------------------------------\n // Text parsers, specialized per encoding\n // ---------------------------------------------------------------------------\n\n text(p: ParserLike, node: TokenNode, enc: Encoding<any>, used: boolean): Step {\n const { fast, unitAt, width: unitWidth } = unitReader(this.kind, enc)\n const decode = enc.decode\n const width = enc.width\n // UTF-8 decodes through the state's ASCII run (see `utf8Text`)\n const toText: (s: State<any>, start: number, end: number) => string =\n enc === utf8 ? utf8Text : (s, start, end) => enc.text(s.input, start, end)\n switch (node._tag) {\n case \"Any\":\n return (s) => {\n const pos = s.pos\n const end = s.end\n if (pos >= end) return fail(s)\n const c = unitAt(s.input, pos, end)\n if (c < fast) {\n s.pos = pos + unitWidth\n return used ? charOf(c) : undefined\n }\n const cp = decode(s.input, pos, end)\n if (cp < 0) return fail(s)\n s.pos = pos + width(cp)\n return used ? charOf(cp) : undefined\n }\n case \"Literal\": {\n // SAFETY: a `Literal` with an encoding is a `Text` literal, which records the string it encodes\n const lit = node.literal as string\n if (node.caseless) {\n const folded = Array.from(lit, (c) => fold(firstCodePoint(c)))\n const n = folded.length\n return (s) => {\n const start = s.pos\n const end = s.end\n const input = s.input\n let pos = start\n for (let i = 0; i < n; i++) {\n if (pos >= end) return failAt(s, pos)\n const c = unitAt(input, pos, end)\n let cp: number\n if (c < fast) {\n cp = c\n pos += unitWidth\n } else {\n cp = decode(input, pos, end)\n if (cp < 0) return failAt(s, pos)\n pos += width(cp)\n }\n if (fold(cp) !== folded[i]) return failAt(s, pos)\n }\n s.pos = pos\n return used ? toText(s, start, pos) : undefined\n }\n }\n const encoded = enc.encode(lit)\n if (Predicate.isString(encoded)) return stringLiteral(encoded, lit)\n const bytes: Uint8Array = encoded\n const len = bytes.length\n if (len === 1) {\n const b0 = bytes[0]\n return (s: State<Uint8Array>) => {\n const pos = s.pos\n if (pos < s.end && s.input[pos] === b0) {\n s.pos = pos + 1\n return lit\n }\n return fail(s)\n }\n }\n return (s) => {\n const pos = s.pos\n if (s.end - pos < len) return fail(s)\n const input: Uint8Array = s.input\n for (let i = 0; i < len; i++) if (input[pos + i] !== bytes[i]) return fail(s)\n s.pos = pos + len\n return lit\n }\n }\n case \"OneOf\": {\n const set = textSet(node.set)\n const negate = node.negate\n const accept = acceptTable(set, negate)\n const test = set.test\n return (s) => {\n const pos = s.pos\n const end = s.end\n if (pos >= end) return fail(s)\n const c = unitAt(s.input, pos, end)\n if (c < fast && c < TableSize) {\n if (accept[c] === 0) return fail(s)\n s.pos = pos + unitWidth\n return used ? charOf(c) : undefined\n }\n const cp = c < fast ? c : decode(s.input, pos, end)\n if (cp < 0 || test(cp) === negate) return fail(s)\n s.pos = pos + (c < fast ? unitWidth : width(cp))\n return used ? charOf(cp) : undefined\n }\n }\n case \"Take\": {\n const count = node.count\n return (s) => {\n const start = s.pos\n const end = s.end\n const input = s.input\n let pos = start\n for (let got = 0; got < count; got++) {\n if (pos >= end) return failAt(s, pos)\n const c = unitAt(input, pos, end)\n if (c < fast) pos += unitWidth\n else {\n const cp = decode(input, pos, end)\n if (cp < 0) return failAt(s, pos)\n pos += width(cp)\n }\n }\n s.pos = pos\n return used ? toText(s, start, pos) : undefined\n }\n }\n case \"TakeWhile\": {\n const { max, min, negate } = node\n const set = textSet(node.set)\n const accept = acceptTable(set, negate)\n const test = set.test\n const loop: TextLoop = { max, min, negate, accept, test, small: Math.min(fast, TableSize), fast, used }\n // One function per kind of unit read, from its own source: a loop\n // shared by every encoding sees several readers once a program\n // parses more than one, and stops inlining them\n if (unitWidth === 2) return takeWhileUtf16(loop, enc === utf16le ? 0 : 1, enc)\n return this.kind === 0 ? takeWhileString(loop, enc) : takeWhileBytes(loop, enc)\n }\n case \"TakeUntil\":\n case \"TakeUntilAny\":\n case \"Rest\":\n return this.fallback(p, node, \"Text parser without a compiled form\")\n }\n }\n\n taken(node: NodeOf<\"Taken\">, used: boolean): Step {\n const c = this.compile(node.self, false)\n const enc = node.encoding\n if (enc === undefined) {\n if (!used) return c\n if (this.kind === 0) {\n return (s: State<string>) => {\n const start = s.pos\n return c(s) === Fail ? Fail : s.input.slice(start, s.pos)\n }\n }\n return (s) => {\n const start = s.pos\n return c(s) === Fail ? Fail : s.slice(start, s.pos)\n }\n }\n // `Text.taken` checks that the text is well formed, then decodes it\n const { fast, unitAt, width } = unitReader(this.kind, enc)\n // UTF-8 decodes through the state's ASCII run (see `utf8Text`)\n const toText: (s: State<any>, start: number, end: number) => string =\n enc === utf8 ? utf8Text : (s, start, end) => enc.text(s.input, start, end)\n return (s) => {\n const start = s.pos\n if (c(s) === Fail) return Fail\n const end = s.pos\n const input = s.input\n let i = start\n while (i < end && unitAt(input, i, end) < fast) i += width\n if (i < end && validate(enc, s, i, end) < 0) return fail(s)\n return used ? toText(s, start, end) : undefined\n }\n }\n\n /**\n * `Ascii.float` and `Text.float` (`map(floatText, toFloat)`): numbers in\n * decimal notation are matched and converted in one pass, without\n * slicing the input; the rest runs the compiled parser (see the JIT).\n */\n private float(node: NodeOf<\"Map\">): Step | undefined {\n if (!floatTexts.has(node.self) || this.kind === 2) return undefined\n if (!scansFloat(node.self, (enc) => this.native(enc))) return undefined\n const c = this.compile(node.self, true)\n const scan = this.kind === 0 ? scanFloatString : scanFloatBytes\n const resumable = this.resumable\n return (s) => {\n const v = scan(s.input, s.pos, s.end)\n // Near the end of a partial input, the parser may have to report `Incomplete`\n if (v === undefined || (resumable && s.partial && floatScan.read + Margin > s.end)) {\n const t = c(s)\n return t === Fail ? Fail : toFloat(t)\n }\n if (v === Fail) return fail(s)\n s.pos = floatScan.end\n return v\n }\n }\n\n escaped(node: NodeOf<\"Escaped\">): Step {\n const raw = node.raw\n const normal = this.compile(node.normal, !raw)\n const escape = this.compile(node.escape, !raw)\n const enc = node.encoding\n const ctrl = node.control\n const kind = this.kind\n // Matches the control character, advancing past it\n let control: (s: State<any>) => boolean\n if (enc === undefined || (ctrl < fastLimit(enc) && ctrl < TableSize)) {\n control =\n kind === 0\n ? (s: State<string>) => {\n if (s.pos < s.end && s.input.charCodeAt(s.pos) === ctrl) {\n s.pos++\n return true\n }\n return false\n }\n : (s: State<Uint8Array>) => {\n if (s.pos < s.end && s.input[s.pos] === ctrl) {\n s.pos++\n return true\n }\n return false\n }\n } else if (ctrl < unitReader(kind, enc).fast) {\n const { unitAt, width } = unitReader(kind, enc)\n control = (s) => {\n if (s.pos < s.end && unitAt(s.input, s.pos, s.end) === ctrl) {\n s.pos += width\n return true\n }\n return false\n }\n } else {\n control = (s) => {\n if (s.pos >= s.end) return false\n const cp = enc.decode(s.input, s.pos, s.end)\n if (cp !== ctrl) return false\n s.pos += enc.width(cp)\n return true\n }\n }\n const resumable = this.resumable\n const key = new Key()\n /** Fails as incomplete, keeping a checkpoint in a streaming parse. */\n const incomplete = (s: State<any>, start: number, checkpoint: EscapedCheckpoint): typeof Fail => {\n if (s.resume !== undefined) Resume.save(s, key, start, checkpoint)\n s.mode = INC\n return Fail\n }\n if (raw) {\n const slice: (s: State<any>, start: number) => Input =\n enc === undefined ? (s, start) => s.slice(start, s.pos) : (s, start) => textIn(enc, s, start, s.pos)\n return (s) => {\n const start = s.pos\n let resumed = false\n if (resumable && s.resume !== undefined) {\n // SAFETY: only this raw loop saves checkpoints under `key`: the position it stopped at, or a `Done` when it completes\n const cp = Resume.take(s, key, start) as Resume.Done | Extract<EscapedCheckpoint, number> | undefined\n if (cp instanceof Resume.Done) {\n s.pos = cp.pos\n return cp.value\n }\n if (cp !== undefined) {\n s.pos = cp\n resumed = true\n }\n }\n while (s.pos < s.end) {\n const before = s.pos\n if (normal(s) !== Fail) {\n if (s.pos === before) {\n s.mode = CUT\n return Fail\n }\n continue\n }\n if (s.mode === INC) return incomplete(s, start, before)\n if (s.mode !== BT) return Fail\n s.pos = before\n if (control(s)) {\n if (escape(s) === Fail) return s.mode === INC ? incomplete(s, start, before) : Fail\n } else {\n return resumed ? Resume.done(s, key, start, true, slice(s, start)) : slice(s, start)\n }\n }\n if (s.partial) {\n // The text ran out of input: `escaped`'s own failure, needing more\n s.incomplete(0)\n return incomplete(s, start, s.pos)\n }\n return resumed ? Resume.done(s, key, start, true, slice(s, start)) : slice(s, start)\n }\n }\n return (s) => {\n const start = s.pos\n let out = \"\"\n let resumed = false\n if (resumable && s.resume !== undefined) {\n // SAFETY: only this loop saves checkpoints under `key`: `{ out, pos }` when it runs out, a `Done` when it completes\n const cp = Resume.take(s, key, start) as Resume.Done | Exclude<EscapedCheckpoint, number> | undefined\n if (cp instanceof Resume.Done) {\n s.pos = cp.pos\n return cp.value\n }\n if (cp !== undefined) {\n out = cp.out\n s.pos = cp.pos\n resumed = true\n }\n }\n while (s.pos < s.end) {\n const before = s.pos\n const a = normal(s)\n if (a !== Fail) {\n if (s.pos !== before) {\n out += a\n continue\n }\n } else {\n if (s.mode === INC) return incomplete(s, start, { out, pos: before })\n if (s.mode !== BT) return Fail\n s.pos = before\n }\n if (control(s)) {\n const b = escape(s)\n if (b === Fail) return s.mode === INC ? incomplete(s, start, { out, pos: before }) : Fail\n out += b\n } else {\n return resumed ? Resume.done(s, key, start, true, out) : out\n }\n }\n if (s.partial) {\n // The text ran out of input: `escaped`'s own failure, needing more\n s.incomplete(0)\n return incomplete(s, start, { out, pos: s.pos })\n }\n return resumed ? Resume.done(s, key, start, true, out) : out\n }\n }\n}\n\n/** How far past the cursor a token parser may read: its literals' length in UTF-8 at most, or `Margin`. */\nconst marginOf = (node: TokenNode): number => {\n if (Predicate.isTagged(node, \"Literal\") || Predicate.isTagged(node, \"TakeUntil\")) return node.literal.length * 4\n if (Predicate.isTagged(node, \"TakeUntilAny\")) return Math.max(0, ...node.literals.map((lit) => lit.length)) * 4\n return Margin\n}\n\ntype TokenNode = NodeOf<\"Any\" | \"Literal\" | \"OneOf\" | \"Take\" | \"TakeWhile\" | \"TakeUntil\" | \"TakeUntilAny\" | \"Rest\">\n\n/**\n * Where a compiled `escaped` that ran out of input resumes: the position\n * (`takeEscaped`, which slices the input), or the text unescaped so far and\n * the position after it.\n */\ntype EscapedCheckpoint = number | { readonly out: string; readonly pos: number }\n\nconst fail = (s: State<any>): typeof Fail => {\n s.mode = BT\n return Fail\n}\n\n/** Fails, leaving the cursor at `pos`: how far a token parser read (see `partialSafe`). */\n/** The settings of a compiled `Text` `takeWhile` loop. */\ninterface TextLoop {\n readonly max: number\n readonly min: number\n readonly negate: boolean\n /** 1 where a code below `small` is accepted (see `acceptTable`). */\n readonly accept: Uint8Array\n readonly test: (code: number) => boolean\n readonly small: number\n /** Units below it are whole code points. */\n readonly fast: number\n readonly used: boolean\n}\n\n// `takeWhile` for each kind of unit read. The three loops differ only in\n// how they read a unit; they are written out because a single loop calling\n// a reader, or branching on one, measured slower (see `text`).\n\nconst takeWhileString = (loop: TextLoop, enc: Encoding<string>): Step => {\n const { accept, fast, max, min, negate, small, test, used } = loop\n const { decode, text, width } = enc\n return (s) => {\n const input: string = s.input\n const start = s.pos\n const end = s.end\n let i = start\n let count = 0\n while (count < max && i < end) {\n const c = input.charCodeAt(i)\n if (c < small) {\n if (accept[c] === 0) break\n i++\n } else if (c < fast) {\n if (test(c) === negate) break\n i++\n } else {\n const cp = decode(input, i, end)\n if (cp < 0 || test(cp) === negate) break\n i += width(cp)\n }\n count++\n }\n if (count < min) return failAt(s, i)\n s.pos = i\n return used ? text(input, start, i) : undefined\n }\n}\n\nconst takeWhileBytes = (loop: TextLoop, enc: Encoding<Uint8Array>): Step => {\n const { accept, max, min, negate, small, test, used } = loop\n const { decode, text, width } = enc\n return (s) => {\n const input: Uint8Array = s.input\n const start = s.pos\n const end = s.end\n let i = start\n let count = 0\n while (count < max && i < end) {\n const c = input[i]\n // A byte below `fast` is below `small` too, as `small` is `fast` or the table size\n if (c < small) {\n if (accept[c] === 0) break\n i++\n } else {\n const cp = decode(input, i, end)\n if (cp < 0 || test(cp) === negate) break\n i += width(cp)\n }\n count++\n }\n if (count < min) return failAt(s, i)\n s.pos = i\n return used ? text(input, start, i) : undefined\n }\n}\n\n/** For UTF-16 bytes; `lo` is the offset of a unit's low byte (0 for little endian). */\nconst takeWhileUtf16 = (loop: TextLoop, lo: 0 | 1, enc: Encoding<Uint8Array>): Step => {\n const { accept, fast, max, min, negate, small, test, used } = loop\n const { decode, text, width } = enc\n const hi = 1 - lo\n return (s) => {\n const input: Uint8Array = s.input\n const start = s.pos\n const end = s.end\n let i = start\n let count = 0\n while (count < max && i < end) {\n // A unit cut off by `end` reads as 0xFFFF, so `decode` reports it\n const c = i + 1 < end ? input[i + lo] | (input[i + hi] << 8) : 0xffff\n if (c < fast ? (c < small ? accept[c] === 0 : test(c) === negate) : false) break\n if (c < fast) i += 2\n else {\n const cp = decode(input, i, end)\n if (cp < 0 || test(cp) === negate) break\n i += width(cp)\n }\n count++\n }\n if (count < min) return failAt(s, i)\n s.pos = i\n return used ? text(input, start, i) : undefined\n }\n}\n\n/**\n * How a `Text` parser reads its encoding's code units: a unit below `fast`\n * is a whole code point, `width` input units long. UTF-16 bytes get a unit\n * reader, as in the JIT; a unit cut off by `end` reads as 0xFFFF, so it\n * takes the `decode` path, which reports it truncated.\n */\ninterface UnitReader {\n readonly width: 1 | 2\n readonly fast: number\n readonly unitAt: (input: any, i: number, end: number) => number\n}\n\nconst unitReader = (kind: 0 | 1 | 2, enc: Encoding<any>): UnitReader => {\n if (kind === 1 && (enc === utf16le || enc === utf16be)) {\n return {\n width: 2,\n fast: 0xd800,\n unitAt:\n enc === utf16le\n ? (input: Uint8Array, i, end) => (i + 1 < end ? input[i] | (input[i + 1] << 8) : 0xffff)\n : (input: Uint8Array, i, end) => (i + 1 < end ? (input[i] << 8) | input[i + 1] : 0xffff)\n }\n }\n // `end` is declared though unused: calls with more arguments than\n // parameters measured 1-2% slower on the JSON benchmark\n return {\n width: 1,\n fast: fastLimit(enc),\n unitAt: kind === 0 ? (input: string, i, _end) => input.charCodeAt(i) : (input: Uint8Array, i, _end) => input[i]\n }\n}\n\nconst failAt = (s: State<any>, pos: number): typeof Fail => {\n s.pos = pos\n s.mode = BT\n return Fail\n}\n\n/** A literal matched against a string input, returning `value`. */\nconst stringLiteral = (str: string, value: unknown): Step => {\n const len = str.length\n if (len === 0) return () => value\n if (len === 1) {\n const c0 = str.charCodeAt(0)\n return (s: State<string>) => {\n const pos = s.pos\n if (pos < s.end && s.input.charCodeAt(pos) === c0) {\n s.pos = pos + 1\n return value\n }\n return fail(s)\n }\n }\n return (s: State<string>) => {\n const pos = s.pos\n if (s.end - pos >= len && s.input.startsWith(str, pos)) {\n s.pos = pos + len\n return value\n }\n return fail(s)\n }\n}\n\n/**\n * `Token.takeTill` on a string, of one to three stop characters that are\n * whole code points (see `search.ts`): every other unit, surrogates\n * included, is accepted, so the run ends at the first stop character, or\n * at the state's end.\n */\nconst stopTakeTill = (stops: ReadonlyArray<number>, min: number, used: boolean): Step => {\n const head = stops.length === 1 ? SearchHead : 2 * SearchHead\n const c0 = stops[0]\n const c1 = stops.length > 1 ? stops[1] : -1\n const c2 = stops.length > 2 ? stops[2] : -1\n const one = String.fromCharCode(c0)\n const site = new StopCache(stops.map((u) => String.fromCharCode(u)))\n return (s: State<string>) => {\n const str = s.input\n const start = s.pos\n const end = s.end\n const h = start + head < end ? start + head : end\n let i = start\n let c = -1\n while (i < h && (c = str.charCodeAt(i)) !== c0 && c !== c1 && c !== c2) i++\n // A run that ends right after the head needs no search\n if (i === h && i < end && (c = str.charCodeAt(i)) !== c0 && c !== c1 && c !== c2) {\n if (stops.length === 1) {\n const at = str.indexOf(one, i)\n i = at < 0 || at > end ? end : at\n } else i = nextStop(site, s, i)\n }\n if (i - start < min) return failAt(s, i)\n s.pos = i\n return used ? str.slice(start, i) : undefined\n }\n}\n\n/** A checkpoint of `entriesLoop`: the object so far, the entries parsed and where the next one starts. */\ninterface EntriesCheckpoint {\n readonly acc: EntriesAcc\n readonly count: number\n readonly pos: number\n}\n\n/** Takes the checkpoint `entriesLoop` saved at `at`, restoring the position of a completed one. */\nconst resumeEntries = (s: State<any>, key: Key, at: number): Resume.Done | EntriesCheckpoint | undefined => {\n // SAFETY: only `entriesLoop` saves checkpoints under its `key`: an `EntriesCheckpoint` when it runs out, a `Done` when it completes\n const cp = Resume.take(s, key, at) as Resume.Done | EntriesCheckpoint | undefined\n if (cp instanceof Resume.Done) s.pos = cp.pos\n else if (cp !== undefined) s.pos = cp.pos\n return cp\n}\n\n/** The object `entriesLoop` built, recorded as done when the loop resumed. */\nconst entriesDone = (s: State<any>, key: Key, at: number, resumed: boolean, acc: EntriesAcc): object =>\n resumed ? Resume.done(s, key, at, true, acc.result()) : acc.result()\n\n/**\n * Where `entriesLoop` stops at an entry (or separator) that failed at\n * `start`: a checkpoint when the input ran out, `Fail` unless the failure\n * backtracks after `min` entries, otherwise the object.\n */\nconst stopEntries = (\n s: State<any>,\n site: Key,\n at: number,\n resumed: boolean,\n acc: EntriesAcc,\n count: number,\n start: number,\n min: number\n): object | typeof Fail => {\n if (s.mode === INC && s.resume !== undefined) Resume.save(s, site, at, { acc, count, pos: start })\n if (s.mode !== BT || count < min) return Fail\n s.pos = start\n return entriesDone(s, site, at, resumed, acc)\n}\n\n/** The object of `Object.fromEntries`, built an entry at a time (see `internal/entries.ts`). */\nclass EntriesAcc {\n readonly o: Record<string, unknown> = {}\n deferred: Array<unknown> | undefined = undefined\n add(key: unknown, value: unknown): void {\n if (this.deferred === undefined && isPlainKey(key)) this.o[key] = value\n else this.deferred = addEntry(this.o, this.deferred, key, value)\n }\n result(): object {\n if (this.deferred !== undefined) flushEntries(this.o, this.deferred)\n return this.o\n }\n}\n\nexport interface ClosureCompiler {\n readonly compile: (p: ParserLike, used: boolean) => Step\n readonly note: (p: ParserLike, node: Node, reason: string) => void\n readonly firsts: FirstSets\n readonly fallbacks: ReadonlyArray<Fallback>\n}\n\nexport const createClosureCompiler = (kind: 0 | 1 | 2, resumable = false): ClosureCompiler => {\n const compiler = new Compiler(kind, resumable)\n return {\n compile: (p, used) => compiler.compile(p, used),\n note: (p, node, reason) => compiler.note(p, node, reason),\n firsts: compiler.firsts,\n fallbacks: compiler.fallbacks\n }\n}\n\n/** A compiled root parser, with the parts of it that run interpreted. */\nexport interface CompiledRoot {\n readonly step: Step\n readonly fallbacks: ReadonlyArray<Fallback>\n}\n\n/** Compiles a root parser for one input kind. */\nconst compileClosure = (root: ParserLike, kind: 0 | 1 | 2, resumable = false): CompiledRoot => {\n const compiler = new Compiler(kind, resumable)\n const step = compiler.compile(root, true)\n return { step, fallbacks: compiler.fallbacks }\n}\n\n/** The closure compiler as a backend. */\nexport const backend: Backend = {\n build: (p, kind, resumable) =>\n Result.match(\n Result.try(() => compileClosure(p, kind, resumable)),\n {\n onSuccess: ({ fallbacks, step }) => ({\n backend: \"closure\" as const,\n step,\n guarded: false,\n fallbacks,\n error: undefined\n }),\n onFailure: (error) => ({\n backend: \"interpreted\" as const,\n step: undefined,\n guarded: false,\n fallbacks: [],\n error\n })\n }\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAyCA,MAAM,WAAW;AAEjB,MAAM,KAAc;AACpB,MAAM,MAAe;AACrB,MAAM,MAAe;;;;;;;AAQrB,MAAM,SAAS;AAEf,MAAM,cAAc,MAAuB,KAAK,MAAM,KAAK,KAAK,IAAI,KAAK;AAMzE,IAAM,WAAN,MAAe;CAaF;CACA;CAbX,uBAAgB,IAAI,IAAsB;CAC1C,yBAAkB,IAAI,IAAsB;CAC5C;CACA,YAAsC,CAAC;CACvC,2BAA4B,IAAI,IAAgB;CAChD,SAAiB;;;;;CAMjB,YACE,MACA,YAAqB,OACrB;EAFS,KAAA,OAAA;EACA,KAAA,YAAA;EAET,KAAK,SAAS,IAAI,UAAU,IAAI;CAClC;;;;;;;;CASA,YAAoB,GAAe,MAAY,WAAyB;EACtE,IAAI,CAAC,KAAK,WAAW,OAAO;EAC5B,MAAM,cAAc,EAAE;EACtB,MAAM,QAAQ,KAAK,IAAI,WAAW,MAAM;EACxC,QAAQ,MAAM;GACZ,IAAI,CAAC,EAAE,SAAS,OAAO,KAAK,CAAC;GAC7B,MAAM,QAAQ,EAAE;GAChB,MAAM,IAAI,KAAK,CAAC;GAChB,IAAI,EAAE,MAAM,SAAS,EAAE,KAAK,OAAO;GACnC,EAAE,MAAM;GACR,OAAO,YAAY,CAAC;EACtB;CACF;;CAGA,QAAQ,GAAe,MAAqB;EAC1C,MAAM,OAAO,OAAO,KAAK,OAAO,KAAK;EACrC,MAAM,OAAO,KAAK,IAAI,CAAC;EACvB,IAAI,SAAS,KAAA,GAAW;GACtB,IAAI,KAAK,OAAO,KAAA,GAAW,OAAO,KAAK;GAEvC,QAAQ,OAAO,KAAK,MAAM,EAAE,KAAA,CAAM,CAAC;EACrC;EACA,MAAM,QAAc,EAAE,IAAI,KAAA,EAAU;EACpC,KAAK,IAAI,GAAG,KAAK;EACjB,MAAM,OAAO,OAAO,CAAC;EACrB,MAAM,KAAK,EAAE,KAAK,SAAS,IAAI,KAAK,SAAS,GAAG,MAAM,sBAAsB,IAAI,KAAK,MAAM,GAAG,MAAM,IAAI;EACxG,MAAM,KAAK;EACX,OAAO;CACT;CAEA,SAAS,GAAe,MAAY,QAAsB;EACxD,KAAK,KAAK,GAAG,MAAM,MAAM;EACzB,OAAO,EAAE;CACX;;CAGA,KAAK,GAAe,MAAY,QAAsB;EACpD,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,GAAG;GACzB,KAAK,SAAS,IAAI,CAAC;GACnB,KAAK,UAAU,KAAK;IAAE,MAAM,EAAE;IAAM,KAAK,KAAK;IAAM;GAAO,CAAC;EAC9D;CACF;;CAGA,OAAe,KAAyC;EACtD,OAAO,QAAQ,KAAA,IAAY,KAAK,SAAS,IAAI,eAAe,GAAG,MAAM,KAAK;CAC5E;CAEA,MAAM,GAAe,MAAY,MAAqB;EACpD,QAAQ,KAAK,MAAb;GACE,KAAK,UACH,OAAO,KAAK,SAAS,GAAG,MAAM,yCAAyC;GACzE,KAAK,SAEH,OAAO,EAAE;GACX,KAAK,cACH,OAAO,KAAK,MAAM,KAAK,QAAQ,KAAK,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC,CAAC;GAClE,KAAK,WAAW;IACd,MAAM,QAAQ,KAAK;IACnB,aAAa;GACf;GACA,KAAK,QAAQ;IACX,MAAM,WAAW,KAAK;IACtB,OAAO,aAAa,SAAS,UAAU,KAAA;GACzC;GACA,KAAK,QAAQ;IACX,MAAM,OAAO,KAAK;IAClB,QAAQ,MAAM;KACZ,EAAE,OAAO;KACT,OAAO;IACT;GACF;GACA,KAAK,OACH,QAAQ,MAAM;IACZ,IAAI,EAAE,MAAM,EAAE,KAAK;KACjB,EAAE,OAAO;KACT,OAAO;IACT;IAEA,IAAI,EAAE,SAAS,OAAO,EAAE,WAAW,CAAC;GAEtC;GACF,KAAK,YACH,QAAQ,MAAM,EAAE;GAClB,KAAK,WACH,QAAQ,MAAM,EAAE,MAAM,EAAE;GAC1B,KAAK,WACH,OAAO,KAAK,QAAQ,KAAK,QAAQ,GAAG,IAAI;GAC1C,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;IACH,IAAI,CAAC,KAAK,OAAO,KAAK,QAAQ,GAAG,OAAO,KAAK,SAAS,GAAG,MAAM,6BAA6B;IAC5F,OAAO,KAAK,YACV,GACA,KAAK,aAAa,KAAA,IAAY,KAAK,MAAM,GAAG,MAAM,IAAI,IAAI,KAAK,KAAK,GAAG,MAAM,KAAK,UAAU,IAAI,GAChG,SAAS,IAAI,CACf;GACF,KAAK;GACL,KAAK;GACL,KAAK,OACH,OAAO,KAAK,SAAS,GAAG,MAAM,qCAAqC;GACrE,KAAK;IACH,IAAI,CAAC,KAAK,OAAO,KAAK,QAAQ,GAAG,OAAO,KAAK,SAAS,GAAG,MAAM,6BAA6B;IAC5F,OAAO,KAAK,QAAQ,IAAI;GAC1B,KAAK,OAAO;IACV,IAAI,CAAC,MAAM,OAAO,KAAK,QAAQ,KAAK,MAAM,KAAK;IAC/C,IAAI,KAAK,MAAM,SAAS;KACtB,MAAM,OAAO,KAAK,MAAM,IAAI;KAC5B,IAAI,SAAS,KAAA,GAAW,OAAO;IACjC;IAEA,IAAI,KAAK,MAAM,eAAe,cAAc,KAAK,IAAI,GAAG,OAAO,KAAK,QAAQ,KAAK,IAAI;IACrF,MAAM,IAAI,KAAK,QAAQ,KAAK,MAAM,IAAI;IACtC,MAAM,IAAI,KAAK;IACf,QAAQ,MAAM;KACZ,MAAM,IAAI,EAAE,CAAC;KACb,OAAO,MAAM,OAAO,OAAO,EAAE,CAAC;IAChC;GACF;GACA,KAAK,MAAM;IACT,MAAM,IAAI,KAAK,QAAQ,KAAK,MAAM,KAAK;IACvC,IAAI,CAAC,MAAM,OAAO;IAClB,MAAM,QAAQ,KAAK;IACnB,QAAQ,MAAO,EAAE,CAAC,MAAM,OAAO,OAAO;GACxC;GACA,KAAK,OAAO;IACV,MAAM,IAAI,KAAK,QAAQ,KAAK,MAAM,IAAI;IACtC,MAAM,IAAI,KAAK;IACf,QAAQ,MAAM;KACZ,MAAM,IAAI,EAAE,CAAC;KACb,IAAI,MAAM,MAAM,EAAE,CAAC;KACnB,OAAO;IACT;GACF;GACA,KAAK,UAAU;IACb,MAAM,IAAI,KAAK,QAAQ,KAAK,MAAM,IAAI;IACtC,MAAM,IAAI,KAAK;IACf,QAAQ,MAAM;KACZ,MAAM,IAAI,EAAE,CAAC;KACb,IAAI,MAAM,MAAM,OAAO;KACvB,MAAM,IAAI,EAAE,CAAC;KACb,IAAI,OAAO,UAAU,CAAC,GAAG,OAAO,EAAE;KAClC,EAAE,OAAO;KACT,OAAO;IACT;GACF;GACA,KAAK,aAAa;IAChB,MAAM,IAAI,KAAK,QAAQ,KAAK,MAAM,IAAI;IACtC,MAAM,IAAI,KAAK;IACf,QAAQ,MAAM;KACZ,MAAM,IAAI,EAAE,CAAC;KACb,IAAI,MAAM,MAAM,OAAO;KACvB,MAAM,IAAI,EAAE,CAAC;KACb,IAAI,OAAO,OAAO,CAAC,GAAG,OAAO,EAAE;KAC/B,EAAE,OAAO;KACT,OAAO;IACT;GACF;GACA,KAAK,YAAY;IACf,MAAM,IAAI,KAAK,QAAQ,KAAK,MAAM,IAAI;IACtC,MAAM,OAAO,KAAK;IAClB,QAAQ,MAAM;KACZ,MAAM,QAAQ,EAAE;KAChB,MAAM,IAAI,KAAK,CAAC;KAChB,IAAI,MAAM,OAAO,OAAO;KACxB,EAAE,MAAM;KACR,OAAO,EAAE,CAAC;IACZ;GACF;GACA,KAAK,aAAa;IAChB,MAAM,IAAI,KAAK,QAAQ,KAAK,MAAM,IAAI;IACtC,MAAM,IAAI,KAAK;IACf,QAAQ,MAAM;KACZ,MAAM,IAAI,EAAE,CAAC;KACb,IAAI,MAAM,MAAM,OAAO;KACvB,MAAM,IAAI,EAAE,CAAC;KACb,IAAI,MAAM,MAAM,EAAE,OAAO;KACzB,OAAO;IACT;GACF;GACA,KAAK,UAAU;IACb,MAAM,IAAI,KAAK,QAAQ,KAAK,MAAM,IAAI;IACtC,MAAM,YAAY,KAAK;IACvB,QAAQ,MAAM;KACZ,MAAM,IAAI,EAAE,CAAC;KACb,IAAI,MAAM,MAAM,OAAO;KACvB,IAAI,UAAU,CAAC,GAAG,OAAO;KACzB,EAAE,OAAO;KACT,OAAO;IACT;GACF;GACA,KAAK,WAAW;IAEd,MAAM,IAAI,KAAK,QAAQ,KAAK,MAAM,IAAI;IACtC,MAAM,IAAI,KAAK;IACf,KAAK,KAAK,GAAG,MAAM,sDAAsD;IACzE,QAAQ,MAAM;KACZ,MAAM,IAAI,EAAE,CAAC;KACb,OAAO,MAAM,OAAO,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IACxC;GACF;GACA,KAAK;IACH,IAAI,KAAK,aAAa,KAAA,KAAa,CAAC,KAAK,OAAO,KAAK,QAAQ,GAC3D,OAAO,KAAK,SAAS,GAAG,MAAM,mCAAmC;IAEnE,OAAO,KAAK,MAAM,MAAM,IAAI;GAC9B,KAAK,aAAa;IAChB,MAAM,IAAI,KAAK,QAAQ,KAAK,MAAM,IAAI;IACtC,QAAQ,MAAM;KACZ,MAAM,QAAQ,EAAE;KAChB,MAAM,IAAI,EAAE,CAAC;KACb,OAAO,MAAM,OAAO,OAAO,CAAC,GAAG,EAAE,MAAM,OAAO,EAAE,GAAG,CAAC;IACtD;GACF;GACA,KAAK,WAAW;IACd,MAAM,IAAI,KAAK,QAAQ,KAAK,MAAM,IAAI;IACtC,IAAI,CAAC,MAAM,OAAO;IAClB,MAAM,IAAI,KAAK;IACf,QAAQ,MAAM;KACZ,MAAM,QAAQ,EAAE;KAChB,MAAM,IAAI,EAAE,CAAC;KACb,OAAO,MAAM,OAAO,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG;IAC9C;GACF;GACA,KAAK,QAAQ;IACX,MAAM,IAAI,KAAK,QAAQ,KAAK,MAAM,KAAK;IACvC,IAAI,CAAC,MAAM,OAAO;IAClB,QAAQ,MAAM;KACZ,MAAM,QAAQ,EAAE;KAChB,OAAO,EAAE,CAAC,MAAM,OAAO,OAAO;MAAE;MAAO,KAAK,EAAE;KAAI;IACpD;GACF;GACA,KAAK,YAAY;IACf,MAAM,IAAI,KAAK,QAAQ,KAAK,MAAM,IAAI;IACtC,QAAQ,MAAM;KACZ,MAAM,QAAQ,EAAE;KAChB,MAAM,IAAI,EAAE,CAAC;KACb,OAAO,MAAM,OAAO,OAAO,CAAC,GAAG;MAAE;MAAO,KAAK,EAAE;KAAI,CAAC;IACtD;GACF;GACA,KAAK,QAAQ;IACX,MAAM,IAAI,KAAK,QAAQ,KAAK,MAAM,IAAI;IACtC,MAAM,OAAO,KAAK;IAClB,MAAM,KAAK,KAAK;IAChB,QAAQ,MAAM;KACZ,MAAM,IAAI,EAAE,CAAC;KACb,IAAI,MAAM,QAAQ,EAAE,SAAS,MAAM,EAAE,OAAO;KAC5C,OAAO;IACT;GACF;GACA,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK,cAEH,OAAO,KAAK,QAAQ,KAAK,MAAM,IAAI;GACrC,KAAK,eAAe;IAClB,MAAM,IAAI,KAAK,QAAQ,KAAK,MAAM,IAAI;IACtC,IAAI,CAAC,MAAM,OAAO;IAClB,QAAQ,MAAM;KACZ,MAAM,IAAI,EAAE,CAAC;KACb,OAAO,MAAM,OAAO,OAAO,OAAO,KAAK,CAAC;IAC1C;GACF;GACA,KAAK;GACL,KAAK,iBAAiB;IACpB,MAAM,IAAI,KAAK,QAAQ,KAAK,MAAM,IAAI;IACtC,MAAM,SAAS,CAAC,OAAO,KAAA,IAAY,UAAU,SAAS,MAAM,KAAK,IAAI,OAAO,OAAO,KAAK;IACxF,MAAM,OAAO,QAAQ,UAAU,SAAS,MAAM,KAAK;IACnD,QAAQ,MAAM;KACZ,MAAM,QAAQ,EAAE;KAChB,MAAM,IAAI,EAAE,CAAC;KACb,IAAI,MAAM,MAAM,OAAO,OAAO,OAAO,KAAK,CAAC,IAAI;KAC/C,IAAI,EAAE,SAAS,IAAI,OAAO;KAC1B,EAAE,MAAM;KACR,OAAO,WAAW,KAAA,IAAY,KAAA,IAAY,OAAO;IACnD;GACF;GACA,KAAK,QAAQ;IACX,MAAM,IAAI,KAAK,QAAQ,KAAK,MAAM,IAAI;IACtC,QAAQ,MAAM;KACZ,MAAM,QAAQ,EAAE;KAChB,MAAM,IAAI,EAAE,CAAC;KACb,IAAI,MAAM,MAAM,EAAE,MAAM;KACxB,OAAO;IACT;GACF;GACA,KAAK,OAAO;IACV,MAAM,IAAI,KAAK,QAAQ,KAAK,MAAM,KAAK;IACvC,QAAQ,MAAM;KACZ,MAAM,QAAQ,EAAE;KAChB,IAAI,EAAE,CAAC,MAAM,MAAM;MACjB,EAAE,MAAM;MACR,EAAE,OAAO;MACT,OAAO;KACT;KACA,IAAI,EAAE,SAAS,IAAI,OAAO;KAC1B,EAAE,MAAM;IAEV;GACF;GACA,KAAK,OACH,OAAO,KAAK,IAAI,MAAM,IAAI;GAC5B,KAAK,UAAU;IACb,MAAM,OAAO,KAAK;IAClB,MAAM,QAAQ,KAAK,QAAQ,KAAK,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC;IAC3D,MAAM,IAAI,MAAM;IAChB,IAAI,CAAC,MAAM,OAAO,KAAK,MAAM,KAAK;IAClC,QAAQ,MAAM;KACZ,MAAM,MAA+B,CAAC;KACtC,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;MAC1B,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC;MACpB,IAAI,MAAM,MAAM,OAAO;MACvB,IAAI,KAAK,MAAM;KACjB;KACA,OAAO;IACT;GACF;GACA,KAAK,WAAW;IACd,MAAM,QAAQ,KAAK,QAAQ,KAAK,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC;IAC3D,IAAI,CAAC,MAAM,OAAO,KAAK,MAAM,KAAK;IAClC,OAAO,KAAK,QAAQ,OAAO,KAAK,CAAC;GACnC;GACA,KAAK,WAAW;IACd,MAAM,KAAK,KAAK,QAAQ,KAAK,MAAM,IAAI;IACvC,MAAM,KAAK,KAAK,QAAQ,KAAK,MAAM,IAAI;IACvC,IAAI,CAAC,MAAM,OAAO,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;IACrC,MAAM,IAAI,KAAK;IACf,QAAQ,MAAM;KACZ,MAAM,IAAI,GAAG,CAAC;KACd,IAAI,MAAM,MAAM,OAAO;KACvB,MAAM,IAAI,GAAG,CAAC;KACd,OAAO,MAAM,OAAO,OAAO,EAAE,GAAG,CAAC;IACnC;GACF;GACA,KAAK,OACH,OAAO,KAAK,IAAI,MAAM,IAAI;GAC5B,KAAK,YACH,OAAO,KAAK,SAAS,GAAG,MAAM,IAAI;GACpC,KAAK;GACL,KAAK,QAAQ;IAEX,MAAM,UAAU,UAAU,SAAS,MAAM,QAAQ,KAAK,CAAC,OAAO,OAAO,KAAK,IAAI,IAAI,KAAA;IAClF,IACE,YAAY,KAAA,KACZ,UAAU,SAAS,SAAS,OAAO,KACnC,KAAK,SAAS,KACd,KAAK,OAAO,QAAQ,QAAQ,GAC5B;KACA,MAAM,EAAE,UAAU,QAAQ,QAAQ;KAClC,MAAM,MAA2B;MAAE,MAAM;MAAa;MAAK;MAAQ;MAAU,KAAK,KAAK;MAAK,KAAK,KAAK;KAAI;KAE1G,OAAO,KAAK,YACV,GACA,aAAa,KAAA,IAAY,KAAK,MAAM,GAAG,KAAK,KAAK,IAAI,KAAK,KAAK,GAAG,KAAK,UAAU,KAAK,GACtF,MACF;IACF;IACA,OAAO,KAAK,OAAO,MAAM,IAAI;GAC/B;GACA,KAAK,cACH,OAAO,KAAK,WAAW,IAAI;GAC7B,KAAK,aACH,OAAO,KAAK,UAAU,MAAM,IAAI;GAClC,KAAK,iBACH,OAAO,KAAK,cAAc,IAAI;GAChC,KAAK;GACL,KAAK,WACH,OAAO,KAAK,SAAS,GAAG,MAAM,2BAA2B;EAC7D;CACF;;CAGA,QAAQ,OAA4B,GAAiC;EACnE,MAAM,IAAI,MAAM;EAChB,IAAI,MAAM,GAAG,aAAa,EAAE;EAC5B,MAAM,CAAC,IAAI,IAAI,MAAM;EACrB,IAAI,MAAM,GACR,QAAQ,MAAM;GACZ,MAAM,IAAI,GAAG,CAAC;GACd,OAAO,MAAM,OAAO,OAAO,EAAE,CAAC;EAChC;EACF,IAAI,MAAM,GACR,QAAQ,MAAM;GACZ,MAAM,IAAI,GAAG,CAAC;GACd,IAAI,MAAM,MAAM,OAAO;GACvB,MAAM,IAAI,GAAG,CAAC;GACd,OAAO,MAAM,OAAO,OAAO,EAAE,GAAG,CAAC;EACnC;EACF,IAAI,MAAM,GACR,QAAQ,MAAM;GACZ,MAAM,IAAI,GAAG,CAAC;GACd,IAAI,MAAM,MAAM,OAAO;GACvB,MAAM,IAAI,GAAG,CAAC;GACd,IAAI,MAAM,MAAM,OAAO;GACvB,MAAM,IAAI,GAAG,CAAC;GACd,OAAO,MAAM,OAAO,OAAO,EAAE,GAAG,GAAG,CAAC;EACtC;EACF,QAAQ,MAAM;GACZ,MAAM,SAAS,IAAI,MAAM,CAAC;GAC1B,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;IAC1B,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC;IACpB,IAAI,MAAM,MAAM,OAAO;IACvB,OAAO,KAAK;GACd;GACA,OAAO,EAAE,GAAG,MAAM;EACpB;CACF;;CAGA,MAAM,OAAkC;EACtC,MAAM,IAAI,MAAM;EAChB,IAAI,MAAM,GAAG,aAAa,KAAA;EAC1B,IAAI,MAAM,GAAG,OAAO,MAAM;EAC1B,IAAI,MAAM,GAAG;GACX,MAAM,IAAI,MAAM;GAChB,MAAM,IAAI,MAAM;GAChB,QAAQ,MAAO,EAAE,CAAC,MAAM,OAAO,OAAO,EAAE,CAAC;EAC3C;EACA,QAAQ,MAAM;GACZ,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,IAAI,MAAM,EAAE,CAAC,CAAC,MAAM,MAAM,OAAO;EAE/D;CACF;CAEA,IAAI,MAAqB,MAAqB;EAC5C,MAAM,SAAS,KAAK;EACpB,MAAM,QAAQ,MACZ,SAAS,WAAW,WAAW,WAAW,KAAM,MAAM,QAAQ,MAAM,KAAK,OAAO,SAAS,CAAC;EAC5F,MAAM,QAAQ,KAAK,QAAQ,KAAK,GAAG,MAAM,KAAK,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC;EACjE,MAAM,IAAI,MAAM;EAChB,IAAI,CAAC,MAAM,OAAO,KAAK,MAAM,KAAK;EAClC,IAAI,WAAW,SACb,QAAQ,MAAM;GACZ,MAAM,MAAM,IAAI,MAAM,CAAC;GACvB,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;IAC1B,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC;IACpB,IAAI,MAAM,MAAM,OAAO;IACvB,IAAI,KAAK;GACX;GACA,OAAO;EACT;EAEF,IAAI,UAAU,SAAS,MAAM,GAAG;GAC9B,IAAI,MAAM,GAAG;IACX,MAAM,IAAI,MAAM;IAChB,MAAM,IAAI,MAAM;IAChB,OAAO,WAAW,KACb,MAAM;KACL,MAAM,IAAI,EAAE,CAAC;KACb,IAAI,MAAM,MAAM,OAAO;KACvB,OAAO,EAAE,CAAC,MAAM,OAAO,OAAO;IAChC,KACC,MAAO,EAAE,CAAC,MAAM,OAAO,OAAO,EAAE,CAAC;GACxC;GACA,QAAQ,MAAM;IACZ,IAAI;IACJ,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;KAC1B,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC;KACpB,IAAI,MAAM,MAAM,OAAO;KACvB,IAAI,MAAM,QAAQ,MAAM;IAC1B;IACA,OAAO;GACT;EACF;EACA,MAAM,CAAC,IAAI,MAAM;EACjB,QAAQ,MAAM;GACZ,IAAI;GACJ,IAAI;GACJ,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;IAC1B,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC;IACpB,IAAI,MAAM,MAAM,OAAO;IACvB,IAAI,MAAM,IAAI,IAAI;SACb,IAAI,MAAM,IAAI,IAAI;GACzB;GACA,OAAO,CAAC,GAAG,CAAC;EACd;CACF;;CAGA,aAAgD;EAC9C,OAAO,KAAK,SAAS,KAChB,MAAsB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,WAAW,EAAE,GAAG,IAAI,MAClE,MAA0B,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;CAClE;CAEA,IAAI,MAAqB,MAAqB;EAC5C,MAAM,QAAQ,KAAK,QAAQ,KAAK,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC;EAC3D,MAAM,IAAI,MAAM;EAChB,IAAI,MAAM,GACR,QAAQ,MAAM;GACZ,EAAE,OAAO;GACT,OAAO;EACT;EAEF,IAAI,MAAM,GAAG,OAAO,MAAM;EAC1B,MAAM,OAA4B,KAAK,SAAS,IAAI,KAAA,IAAY,QAAQ,KAAK,QAAQ,KAAK,MAAM,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC;EAClH,IAAI,SAAS,KAAA,GACX,QAAQ,MAAM;GACZ,MAAM,QAAQ,EAAE;GAChB,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;IAC1B,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC;IACpB,IAAI,MAAM,MAAM,OAAO;IACvB,IAAI,EAAE,SAAS,IAAI,OAAO;IAC1B,EAAE,MAAM;GACV;GACA,EAAE,OAAO;GACT,OAAO;EACT;EAEF,MAAM,QAAQ,KAAK,MAAM,KAAK,MAAM,EAAE,KAAK,MAAM,MAAM,EAAE,CAAC;EAC1D,MAAM,EAAE,QAAQ,KAAK,SAAS;EAC9B,MAAM,OAAO,KAAK,WAAW;EAC7B,MAAM,YAAY,KAAK;EACvB,QAAQ,MAAM;GAEZ,MAAM,IAAI,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,EAAE,MAAM,KAAK,KAAK,CAAC;GACxE,MAAM,aAAa,MAAM,KAAK,QAAQ,MAAM,IAAI,IAAI,MAAM,IAAI,YAAY,OAAO,KAAK;GACtF,MAAM,QAAQ,EAAE;GAChB,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;IAC1C,MAAM,IAAI,WAAW,EAAE,CAAC,CAAC;IACzB,IAAI,MAAM,MAAM,OAAO;IACvB,IAAI,EAAE,SAAS,IAAI,OAAO;IAC1B,EAAE,MAAM;GACV;GACA,EAAE,OAAO;GACT,OAAO;EACT;CACF;CAEA,SAAS,GAAe,MAA0B,MAAqB;EACrE,MAAM,WAAW,KAAK,QAAQ,KAAK,UAAU,IAAI;EACjD,MAAM,SAAS,KAAK;EACpB,MAAM,2BAAW,IAAI,IAAsB;EAC3C,IAAI,KAAK,UAAU,KAAA,GACjB,KAAK,MAAM,OAAO,QAAQ,QAAQ,KAAK,KAAK,GAAG;GAC7C,MAAM,IAAI,KAAK,MAAM;GACrB,IAAI,CAAC,SAAS,IAAI,CAAC,GAAG,SAAS,IAAI,GAAG,KAAK,QAAQ,GAAG,IAAI,CAAC;EAC7D;EAEF,IAAI,KAAK,cAAc,KAAA,KAAa,CAAC,SAAS,IAAI,KAAK,SAAS,GAC9D,SAAS,IAAI,KAAK,WAAW,KAAK,QAAQ,KAAK,WAAW,IAAI,CAAC;EAEjE,MAAM,WAAiB,MAAM;GAC3B,MAAM,QAAQ,EAAE;GAChB,MAAM,MAAM,SAAS,CAAC;GACtB,IAAI,QAAQ,MAAM,OAAO;GACzB,MAAM,IAAI,OAAO,GAAG;GACpB,IAAI,MAAM,KAAA,GAAW;IACnB,EAAE,MAAM;IACR,EAAE,OAAO;IACT,OAAO;GACT;GACA,QAAQ,SAAS,IAAI,CAAC,KAAK,EAAE,KAAA,CAAM,CAAC;EACtC;EACA,IAAI,KAAK,UAAU,KAAA,GAAW;GAC5B,KAAK,KAAK,GAAG,MAAM,+DAA+D;GAClF,OAAO;EACT;EAEA,MAAM,MAAM,OAAO,KAAK,QAAQ;EAChC,MAAM,OAAO,UAAU,SAAS,KAAK,MAAM;EAC3C,MAAM,MAAM,OAAO,OAAO,IAAI,IAAI,IAAI;EACtC,IAAI,CAAC,UAAU,SAAS,KAAK,KAAK,KAAK,CAAC,KAAK,OAAO,IAAI,QAAQ,GAAG,OAAO;EAC1E,MAAM,MAAM,IAAI;EAEhB,MAAM,QAAQ,QAAQ,KAAA,IAAa,KAAK,SAAS,IAAI,QAAS,YAAa,KAAK,IAAI,UAAU,GAAG,GAAG,KAAM;EAC1G,MAAM,OAAO,KAAK,IAAI,OAAO,SAAS;EACtC,IAAI,SAAS,GAAG,OAAO;EACvB,MAAM,QAA4B,CAAC;EACnC,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,KAAK;GAE7B,MAAM,IAAI,OADE,QAAQ,KAAA,KAAa,KAAK,SAAS,IAAI,IAAI,OAAO,CAAC,CAC3C;GACpB,MAAM,KAAK,MAAM,KAAA,IAAY,OAAQ,SAAS,IAAI,CAAC,KAAK,EAAE,IAAK;EACjE;EACA,MAAM,OAAO,KAAK,WAAW;EAC7B,MAAM,UAAU,OAAO,IAAI;EAC3B,MAAM,YAAY,KAAK;EACvB,QAAQ,MAAM;GACZ,IAAI,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,EAAE,KAAK,OAAO,QAAQ,CAAC;GACtE,MAAM,IAAI,KAAK,CAAC;GAChB,IAAI,IAAI,GAAG;IACT,EAAE,OAAO;IACT,OAAO;GACT;GACA,IAAI,KAAK,MAAM,OAAO,QAAQ,CAAC;GAC/B,MAAM,IAAI,MAAM;GAChB,IAAI,MAAM,MAAM;IACd,EAAE,OAAO;IACT,OAAO;GACT;GACA,EAAE,OAAO;GACT,OAAO,EAAE,CAAC;EACZ;CACF;CAEA,OAAO,MAAyC,MAAqB;EACnE,MAAM,EAAE,KAAK,QAAQ;EACrB,MAAM,YAAY,QAAQ;EAC1B,MAAM,SAAS,UAAU,SAAS,MAAM,MAAM;EAC9C,MAAM,OAAO,SAAS,KAAK,QAAQ,KAAA;EACnC,MAAM,IAAI,KAAK,QAAQ,KAAK,MAAM,IAAI;EACtC,MAAM,YAAY,KAAK;EACvB,MAAM,MAAM,IAAI,IAAI;EAEpB,MAAM,UAAU,QAAQ,SAAS,KAAA;EACjC,MAAM,OAAsB,CAAC,gBAAgB,KAAA,IAAY,SAAS,KAAK,aAAa,CAAC;EACrF,MAAM,MAAyC,CAAC,WAC3C,QAAQ,MACT,SACE,KAAK,KACJ,KAAK,MAAM;GACV,IAAI,KAAK,CAAC;GACV,OAAO;EACT;EACN,QAAQ,MAAM;GACZ,MAAM,QAAQ,EAAE;GAChB,IAAI;GACJ,IAAI,QAAQ;GACZ,IAAI,UAAU;GACd,IAAI,aAAa,EAAE,WAAW,KAAA,GAAW;IAEvC,MAAM,KAAK,OAAO,KAAK,GAAG,KAAK,KAAK;IACpC,IAAI,cAAc,OAAO,MAAM;KAC7B,EAAE,MAAM,GAAG;KACX,OAAO,GAAG;IACZ;IACA,IAAI,OAAO,KAAA,GAAW;KACpB,MAAM,GAAG;KACT,QAAQ,GAAG;KACX,EAAE,MAAM,GAAG;KACX,UAAU;IACZ;GACF;GACA,IAAI,CAAC,SAAS,MAAM,KAAK;GACzB,OAAO,QAAQ,KAAK,SAAS;IAC3B,IAAI,SAAS,KAAA,KAAa,SAAS,OAAO,CAAC,KAAK,GAAG,GAAG;IACtD,MAAM,QAAQ,EAAE;IAChB,MAAM,IAAI,EAAE,CAAC;IACb,IAAI,MAAM,MAAM;KACd,IAAI,EAAE,SAAS,OAAO,EAAE,WAAW,KAAA,GAAW,OAAO,KAAK,GAAG,KAAK,OAAO;MAAE;MAAK;MAAO,KAAK;KAAM,CAAC;KACnG,IAAI,EAAE,SAAS,MAAM,QAAQ,KAAK,OAAO;KACzC,EAAE,MAAM;KACR,OAAO,UAAU,OAAO,KAAK,GAAG,KAAK,OAAO,MAAM,GAAG,IAAI;IAC3D;IACA,IAAI,aAAa,EAAE,QAAQ,OAAO;KAChC,EAAE,OAAO;KACT,OAAO;IACT;IACA,MAAM,IAAI,KAAK,CAAC;GAClB;GACA,OAAO,UAAU,OAAO,KAAK,GAAG,KAAK,OAAO,MAAM,GAAG,IAAI;EAC3D;CACF;;;;;CAMA,QAAgB,GAAqB;EACnC,MAAM,OAAO,OAAO,CAAC;EACrB,IAAI,UAAU,SAAS,MAAM,MAAM,GAAG;GACpC,MAAM,IAAI,KAAK,QAAQ,KAAK,IAAI;GAChC,MAAM,OAAO,KAAK;GAClB,MAAM,KAAK,KAAK;GAChB,QAAQ,MAAM;IACZ,MAAM,IAAI,EAAE,CAAC;IACb,IAAI,MAAM,QAAQ,EAAE,SAAS,MAAM,EAAE,OAAO;IAC5C,OAAO;GACT;EACF;EACA,IAAI,UAAU,SAAS,MAAM,KAAK,GAAG;GAEnC,MAAM,IAAI,KAAK;GACf,MAAM,QAAQ,KAAK,QAAQ,KAAK,GAAG,MAAO,MAAM,IAAI,KAAK,QAAQ,CAAC,IAAI,KAAK,QAAQ,GAAG,KAAK,CAAE;GAC7F,QAAQ,MAAM;IACZ,IAAI;IACJ,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;KACrC,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC;KACpB,IAAI,MAAM,MAAM,OAAO;KACvB,IAAI,MAAM,GAAG,MAAM;IACrB;IACA,OAAO;GACT;EACF;EACA,IAAI,UAAU,SAAS,MAAM,QAAQ,KAAK,UAAU,SAAS,MAAM,WAAW,GAAG;GAC/E,MAAM,OAAO,OAAO,KAAK,IAAI;GAC7B,IAAI,SAAS,KAAA,GAAW,OAAO,KAAK,YAAY,MAAM,IAAI;GAE1D,MAAM,IAAI,KAAK,QAAQ,GAAG,IAAI;GAC9B,QAAQ,MAAM;IACZ,MAAM,IAAI,EAAE,CAAC;IAEb,OAAO,MAAM,OAAO,OAAO,YAAY,CAA8C;GACvF;EACF;EAEA,OAAO,KAAK,QAAS,KAAuC,IAAI;CAClE;CAEA,YAAoB,MAA8C,MAAuB;EACvF,MAAM,QAAQ,KAAK,QAAQ,KAAK,GAAG,MAAM,KAAK,QAAQ,GAAG,MAAM,KAAK,OAAO,MAAM,KAAK,KAAK,CAAC;EAC5F,MAAM,EAAE,KAAK,IAAI,OAAO,OAAO;EAE/B,MAAM,SAAS,GAAe,QAA6B;GACzD,IAAI;GACJ,IAAI;GACJ,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;IACrC,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC;IACpB,IAAI,MAAM,MAAM,OAAO;IACvB,IAAI,MAAM,IAAI,MAAM;SACf,IAAI,MAAM,IAAI,QAAQ;GAC7B;GACA,IAAI,IAAI,KAAK,KAAK;GAClB,OAAO;EACT;EACA,MAAM,EAAE,KAAK,QAAQ;EACrB,MAAM,YAAY,QAAQ;EAE1B,MAAM,YAAY,KAAK;EACvB,MAAM,OAAO,IAAI,IAAI;EACrB,IAAI,UAAU,SAAS,MAAM,QAAQ,GACnC,QAAQ,MAAM;GACZ,MAAM,KAAK,EAAE;GACb,MAAM,KAAK,aAAa,EAAE,WAAW,KAAA,IAAY,cAAc,GAAG,MAAM,EAAE,IAAI,KAAA;GAC9E,IAAI,cAAc,OAAO,MAAM,OAAO,GAAG;GACzC,MAAM,UAAU,OAAO,KAAA;GACvB,MAAM,MAAM,IAAI,OAAO,IAAI,WAAW;GACtC,KAAK,IAAI,QAAQ,IAAI,SAAS,GAAG,QAAQ,KAAK,SAAS;IACrD,MAAM,QAAQ,EAAE;IAChB,IAAI;IACJ,IAAI;IACJ,IAAI,KAAK;IACT,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;KACrC,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC;KACpB,IAAI,MAAM,MAAM;MACd,KAAK;MACL;KACF;KACA,IAAI,MAAM,IAAI,MAAM;UACf,IAAI,MAAM,IAAI,QAAQ;IAC7B;IACA,IAAI,CAAC,IACH,OAAO,YAAY,GAAG,MAAM,IAAI,SAAS,KAAK,OAAO,OAAO,GAAG;IAEjE,IAAI,aAAa,EAAE,QAAQ,OAAO;KAChC,EAAE,OAAO;KACT,OAAO;IACT;IACA,IAAI,IAAI,KAAK,KAAK;GACpB;GACA,OAAO,YAAY,GAAG,MAAM,IAAI,SAAS,GAAG;EAC9C;EAEF,MAAM,MAAM,KAAK,QAAQ,KAAK,WAAW,KAAK;EAC9C,QAAQ,MAAM;GACZ,MAAM,KAAK,EAAE;GACb,MAAM,KAAK,aAAa,EAAE,WAAW,KAAA,IAAY,cAAc,GAAG,MAAM,EAAE,IAAI,KAAA;GAC9E,IAAI,cAAc,OAAO,MAAM,OAAO,GAAG;GACzC,MAAM,UAAU,OAAO,KAAA;GACvB,MAAM,MAAM,IAAI,OAAO,IAAI,WAAW;GACtC,IAAI,QAAQ,IAAI,SAAS;GACzB,IAAI,CAAC,SAAS;IACZ,IAAI,QAAQ,GAAG,OAAO,IAAI,OAAO;IACjC,MAAM,QAAQ,EAAE;IAChB,IAAI,CAAC,MAAM,GAAG,GAAG,GAAG;KAClB,IAAI,EAAE,SAAS,MAAM,MAAM,GAAG,OAAO;KACrC,EAAE,MAAM;KACR,OAAO,IAAI,OAAO;IACpB;IACA;GACF;GACA,OAAO,QAAQ,KAAK;IAClB,MAAM,QAAQ,EAAE;IAChB,IAAI,IAAI,CAAC,MAAM,MACb,OAAO,YAAY,GAAG,MAAM,IAAI,SAAS,KAAK,OAAO,OAAO,GAAG;IAEjE,IAAI,aAAa,EAAE,QAAQ,OAAO;KAChC,EAAE,OAAO;KACT,OAAO;IACT;IACA,IAAI,CAAC,MAAM,GAAG,GAAG,GACf,OAAO,YAAY,GAAG,MAAM,IAAI,SAAS,KAAK,OAAO,OAAO,GAAG;IAEjE;GACF;GACA,OAAO,YAAY,GAAG,MAAM,IAAI,SAAS,GAAG;EAC9C;CACF;CAEA,WAAW,MAAkC;EAC3C,MAAM,EAAE,KAAK,QAAQ;EACrB,MAAM,IAAI,KAAK,QAAQ,KAAK,MAAM,IAAI;EACtC,MAAM,MAAM,KAAK,QAAQ,KAAK,KAAK,IAAI;EACvC,QAAQ,MAAM;GACZ,MAAM,MAAsB,CAAC;GAC7B,OAAO,MAAM;IACX,MAAM,QAAQ,EAAE;IAChB,IAAI,IAAI,UAAU,KAAK;KACrB,MAAM,IAAI,IAAI,CAAC;KACf,IAAI,MAAM,MAAM,OAAO,CAAC,KAAK,CAAC;KAC9B,IAAI,EAAE,SAAS,IAAI,OAAO;KAC1B,EAAE,MAAM;KACR,IAAI,IAAI,UAAU,KAAK,OAAO;IAChC;IACA,MAAM,IAAI,EAAE,CAAC;IACb,IAAI,MAAM,MAAM,OAAO;IACvB,IAAI,EAAE,QAAQ,OAAO;KACnB,EAAE,OAAO;KACT,OAAO;IACT;IACA,IAAI,KAAK,CAAC;GACZ;EACF;CACF;CAEA,UAAU,MAA2B,MAAqB;EACxD,MAAM,EAAE,KAAK,QAAQ;EACrB,MAAM,YAAY,QAAQ;EAC1B,MAAM,IAAI,KAAK,QAAQ,KAAK,MAAM,IAAI;EACtC,MAAM,MAAM,KAAK,QAAQ,KAAK,WAAW,KAAK;EAC9C,MAAM,YAAY,KAAK;EACvB,MAAM,MAAM,IAAI,IAAI;EACpB,QAAQ,MAAM;GACZ,MAAM,QAAQ,EAAE;GAChB,IAAI;GACJ,IAAI,QAAQ;GACZ,IAAI,UAAU;GACd,IAAI,aAAa,EAAE,WAAW,KAAA,GAAW;IAEvC,MAAM,KAAK,OAAO,KAAK,GAAG,KAAK,KAAK;IAIpC,IAAI,cAAc,OAAO,MAAM;KAC7B,EAAE,MAAM,GAAG;KACX,OAAO,GAAG;IACZ;IACA,IAAI,OAAO,KAAA,GAAW;KACpB,MAAM,GAAG;KACT,QAAQ,GAAG;KACX,EAAE,MAAM,GAAG;KACX,UAAU;IACZ;GACF;GACA,IAAI,CAAC,SAAS;IACZ,MAAM,OAAO,CAAC,IAAI,KAAA;IAClB,IAAI,QAAQ,GAAG,OAAO;IACtB,MAAM,QAAQ,EAAE;IAChB,MAAM,QAAQ,EAAE,CAAC;IACjB,IAAI,UAAU,MAAM;KAClB,IAAI,EAAE,SAAS,MAAM,MAAM,GAAG,OAAO;KACrC,EAAE,MAAM;KACR,OAAO;IACT;IACA,KAAK,KAAK,KAAK;IACf,QAAQ;GACV;GACA,OAAO,QAAQ,KAAK;IAClB,MAAM,QAAQ,EAAE;IAChB,IAAI,IAAI,CAAC,MAAM,MAAM;KACnB,IAAI,EAAE,SAAS,OAAO,EAAE,WAAW,KAAA,GAAW,OAAO,KAAK,GAAG,KAAK,OAAO;MAAE;MAAK;MAAO,KAAK;KAAM,CAAC;KACnG,IAAI,EAAE,SAAS,MAAM,QAAQ,KAAK,OAAO;KACzC,EAAE,MAAM;KACR,OAAO,UAAU,OAAO,KAAK,GAAG,KAAK,OAAO,MAAM,GAAG,IAAI;IAC3D;IACA,IAAI,aAAa,EAAE,QAAQ,OAAO;KAChC,EAAE,OAAO;KACT,OAAO;IACT;IACA,MAAM,IAAI,EAAE,CAAC;IACb,IAAI,MAAM,MAAM;KACd,IAAI,EAAE,SAAS,OAAO,EAAE,WAAW,KAAA,GAAW,OAAO,KAAK,GAAG,KAAK,OAAO;MAAE;MAAK;MAAO,KAAK;KAAM,CAAC;KACnG,IAAI,EAAE,SAAS,MAAM,QAAQ,KAAK,OAAO;KACzC,EAAE,MAAM;KACR,OAAO,UAAU,OAAO,KAAK,GAAG,KAAK,OAAO,MAAM,GAAG,IAAI;IAC3D;IACA,KAAK,KAAK,CAAC;IACX;GACF;GACA,OAAO,UAAU,OAAO,KAAK,GAAG,KAAK,OAAO,MAAM,GAAG,IAAI;EAC3D;CACF;CAEA,cAAc,MAAqC;EACjD,MAAM,IAAI,KAAK,QAAQ,KAAK,MAAM,IAAI;EACtC,MAAM,MAAM,KAAK,QAAQ,KAAK,WAAW,IAAI;EAC7C,MAAM,KAAK,KAAK;EAChB,MAAM,YAAY,KAAK;EACvB,MAAM,MAAM,IAAI,IAAI;EACpB,IAAI,CAAC,KAAK,OACR,QAAQ,MAAM;GACZ,MAAM,QAAQ,EAAE;GAChB,IAAI;GACJ,IAAI,UAAU;GACd,IAAI,aAAa,EAAE,WAAW,KAAA,GAAW;IAEvC,MAAM,KAAK,OAAO,KAAK,GAAG,KAAK,KAAK;IACpC,IAAI,cAAc,OAAO,MAAM;KAC7B,EAAE,MAAM,GAAG;KACX,OAAO,GAAG;IACZ;IACA,IAAI,OAAO,KAAA,GAAW;KACpB,MAAM,GAAG;KACT,EAAE,MAAM,GAAG;KACX,UAAU;IACZ;GACF;GACA,IAAI,CAAC,SAAS;IACZ,MAAM,EAAE,CAAC;IACT,IAAI,QAAQ,MAAM,OAAO;GAC3B;GACA,OAAO,MAAM;IACX,MAAM,QAAQ,EAAE;IAChB,MAAM,IAAI,IAAI,CAAC;IACf,IAAI,MAAM,MAAM;KACd,IAAI,EAAE,SAAS,OAAO,EAAE,WAAW,KAAA,GAAW,OAAO,KAAK,GAAG,KAAK,OAAO;MAAE;MAAK,KAAK;KAAM,CAAC;KAC5F,IAAI,EAAE,SAAS,IAAI,OAAO;KAC1B,EAAE,MAAM;KACR,OAAO,UAAU,OAAO,KAAK,GAAG,KAAK,OAAO,MAAM,GAAG,IAAI;IAC3D;IACA,IAAI,EAAE,QAAQ,OAAO;KACnB,EAAE,OAAO;KACT,OAAO;IACT;IACA,MAAM,IAAI,EAAE,CAAC;IACb,IAAI,MAAM,MAAM;KACd,IAAI,EAAE,SAAS,OAAO,EAAE,WAAW,KAAA,GAAW,OAAO,KAAK,GAAG,KAAK,OAAO;MAAE;MAAK,KAAK;KAAM,CAAC;KAC5F,IAAI,EAAE,SAAS,IAAI,OAAO;KAC1B,EAAE,MAAM;KACR,OAAO,UAAU,OAAO,KAAK,GAAG,KAAK,OAAO,MAAM,GAAG,IAAI;IAC3D;IACA,MAAM,GAAG,KAAK,GAAG,CAAC;GACpB;EACF;EAEF,QAAQ,MAAM;GACZ,MAAM,QAAQ,EAAE,CAAC;GACjB,IAAI,UAAU,MAAM,OAAO;GAC3B,MAAM,SAAyB,CAAC,KAAK;GACrC,MAAM,OAAuB,CAAC;GAC9B,OAAO,MAAM;IACX,MAAM,QAAQ,EAAE;IAChB,MAAM,IAAI,IAAI,CAAC;IACf,IAAI,MAAM,MAAM;KACd,IAAI,EAAE,SAAS,IAAI,OAAO;KAC1B,EAAE,MAAM;KACR;IACF;IACA,IAAI,EAAE,QAAQ,OAAO;KACnB,EAAE,OAAO;KACT,OAAO;IACT;IACA,MAAM,IAAI,EAAE,CAAC;IACb,IAAI,MAAM,MAAM;KACd,IAAI,EAAE,SAAS,IAAI,OAAO;KAC1B,EAAE,MAAM;KACR;IACF;IACA,KAAK,KAAK,CAAC;IACX,OAAO,KAAK,CAAC;GACf;GACA,IAAI,MAAM,OAAO,OAAO,SAAS;GACjC,KAAK,IAAI,IAAI,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK,MAAM,GAAG,OAAO,IAAI,KAAK,IAAI,GAAG;GAC3E,OAAO;EACT;CACF;CAMA,MAAM,GAAe,MAAiB,MAAqB;EAEzD,MAAM,OAAO,KAAK;EAClB,QAAQ,KAAK,MAAb;GACE,KAAK;IACH,IAAI,SAAS,GACX,QAAQ,MAAyB;KAC/B,MAAM,MAAM,EAAE;KACd,IAAI,OAAO,EAAE,KAAK,OAAO,KAAK,CAAC;KAC/B,EAAE,MAAM,MAAM;KACd,OAAO,EAAE,MAAM;IACjB;IAEF,QAAQ,MAAM;KACZ,MAAM,MAAM,EAAE;KACd,IAAI,OAAO,EAAE,KAAK,OAAO,KAAK,CAAC;KAC/B,MAAM,MAAc,EAAE;KACtB,MAAM,IAAI,IAAI,WAAW,GAAG;KAC5B,IAAI,KAAK,SAAU,KAAK,SAAU,MAAM,IAAI,IAAI,WAAW,IAAI,WAAW,MAAM,CAAC,IAAI,WAAY,OAAQ;MACvG,EAAE,MAAM,MAAM;MACd,OAAO,OAAO,IAAI,MAAM,KAAK,MAAM,CAAC,IAAI,KAAA;KAC1C;KACA,EAAE,MAAM,MAAM;KACd,OAAO,OAAO,IAAI,OAAO,KAAA;IAC3B;GACF,KAAK,WACH,OAAO,KAAK,aAAa,GAAG,IAAI;GAClC,KAAK,SAAS;IACZ,MAAM,MAAM,SAAS,KAAK,KAAK,IAAI;IACnC,MAAM,SAAS,KAAK;IACpB,MAAM,SAAS,YAAY,KAAK,MAAM;IACtC,MAAM,OAAO,IAAI;IACjB,IAAI,SAAS,GACX,QAAQ,MAAyB;KAC/B,MAAM,MAAM,EAAE;KACd,IAAI,OAAO,EAAE,KAAK,OAAO,KAAK,CAAC;KAC/B,MAAM,IAAI,EAAE,MAAM;KAClB,IAAI,OAAO,OAAO,GAAG,OAAO,KAAK,CAAC;KAClC,EAAE,MAAM,MAAM;KACd,OAAO;IACT;IAEF,QAAQ,MAAM;KACZ,MAAM,MAAM,EAAE;KACd,IAAI,OAAO,EAAE,KAAK,OAAO,KAAK,CAAC;KAC/B,MAAM,MAAc,EAAE;KACtB,MAAM,IAAI,IAAI,WAAW,GAAG;KAC5B,IAAI,IAAI,WAAW;MACjB,IAAI,OAAO,OAAO,GAAG,OAAO,KAAK,CAAC;MAClC,EAAE,MAAM,MAAM;MACd,OAAO,OAAO,IAAI,OAAO,KAAA;KAC3B;KACA,IAAI,KAAK;KACT,IAAI,KAAK,SAAU,KAAK,SAAU,MAAM,IAAI,IAAI,QAAQ;MACtD,MAAM,IAAI,IAAI,WAAW,MAAM,CAAC;MAChC,KAAK,IAAI,WAAY,OAAQ,MAAO,IAAI,SAAW,OAAO,IAAI,SAAU;KAC1E;KACA,IAAI,KAAK,EAAE,MAAM,QAAQ,OAAO,KAAK,CAAC;KACtC,MAAM,MAAM,KAAK,QAAS,IAAI;KAC9B,EAAE,MAAM,MAAM;KACd,OAAO,CAAC,OAAO,KAAA,IAAY,QAAQ,IAAI,IAAI,OAAO,IAAI,MAAM,KAAK,MAAM,CAAC;IAC1E;GACF;GACA,KAAK,QAAQ;IACX,MAAM,QAAQ,KAAK;IACnB,IAAI,SAAS,GACX,QAAQ,MAAyB;KAC/B,MAAM,QAAQ,EAAE;KAChB,IAAI,EAAE,MAAM,QAAQ,OAAO,OAAO,OAAO,GAAG,EAAE,GAAG;KACjD,EAAE,MAAM,QAAQ;KAChB,OAAO,OAAO,EAAE,MAAM,SAAS,OAAO,QAAQ,KAAK,IAAI,KAAA;IACzD;IAEF,QAAQ,MAAM;KACZ,MAAM,MAAc,EAAE;KACtB,MAAM,QAAQ,EAAE;KAChB,MAAM,MAAM,EAAE;KACd,IAAI,IAAI;KACR,IAAI,MAAM;KACV,OAAO,MAAM,SAAS,IAAI,KAAK;MAC7B,MAAM,IAAI,IAAI,WAAW,CAAC;MAC1B,KAAK,KAAK,SAAU,KAAK,SAAU,IAAI,IAAI,IAAI,WAAW,IAAI,WAAW,IAAI,CAAC,IAAI,WAAY,QAAS,IAAI;MAC3G;KACF;KACA,IAAI,MAAM,OAAO,OAAO,OAAO,GAAG,CAAC;KACnC,EAAE,MAAM;KACR,OAAO,OAAO,IAAI,MAAM,OAAO,CAAC,IAAI,KAAA;IACtC;GACF;GACA,KAAK,aACH,OAAO,KAAK,eAAe,MAAM,IAAI;GACvC,KAAK;GACL,KAAK,gBAAgB;IACnB,MAAM,EAAE,KAAK,QAAQ;IACrB,MAAM,UAAU,MAAM,KAAK,QAAQ;IACnC,MAAM,SAAoD,UAAU,SAAS,MAAM,WAAW,KACzF,GAAG,SAAS,QAAQ,GAAG,KAAK,SAAS,IAAI,KACzC,GAAG,SAAS,WAAW,GAAG,KAAK,UAAU,IAAI;IAClD,QAAQ,MAAM;KACZ,MAAM,QAAQ,EAAE;KAChB,MAAM,MAAM,OAAO,GAAG,KAAK;KAC3B,IAAI,MAAM,GAAG,OAAO,OAAO,GAAG,EAAE,GAAG;KACnC,IAAI,SAAS;MACX,MAAM,QAAQ,YAAY,GAAG,OAAO,GAAG;MACvC,IAAI,QAAQ,OAAO,QAAQ,KAAK,OAAO,OAAO,GAAG,GAAG;KACtD;KACA,EAAE,MAAM;KACR,OAAO,OAAO,EAAE,MAAM,OAAO,GAAG,IAAI,KAAA;IACtC;GACF;GACA,KAAK,QACH,QAAQ,MAAM;IACZ,MAAM,QAAQ,EAAE;IAChB,EAAE,MAAM,EAAE;IACV,OAAO,OAAO,EAAE,MAAM,OAAO,EAAE,GAAG,IAAI,KAAA;GACxC;EACJ;CACF;CAEA,aAAa,GAAe,MAA+B;EACzD,MAAM,MAAM,KAAK;EACjB,MAAM,cAAc,UAAU,SAAS,GAAG,IAAI,IAAI,eAAe,aAAa,IAAI;EAClF,IAAI,KAAK,SAAS,GAAG;GACnB,IAAI,CAAC,UAAU,SAAS,GAAG,GAAG,OAAO,KAAK,SAAS,GAAG,MAAM,uCAAuC;GACnG,MAAM,MAAM;GACZ,MAAM,MAAM,IAAI;GAChB,IAAI,KAAK,UAAU;IACjB,MAAM,UAAU,MAAM,KAAK,EAAE,QAAQ,IAAI,IAAI,GAAG,MAAM,WAAW,IAAI,WAAW,CAAC,CAAC,CAAC;IACnF,QAAQ,MAAM;KACZ,MAAM,MAAM,EAAE;KACd,IAAI,EAAE,MAAM,MAAM,KAAK,OAAO,KAAK,CAAC;KACpC,MAAM,QAAgB,EAAE;KACxB,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,KACvB,IAAI,WAAW,MAAM,WAAW,MAAM,CAAC,CAAC,MAAM,QAAQ,IAAI,OAAO,KAAK,CAAC;KAEzE,EAAE,MAAM,MAAM;KACd,OAAO,MAAM,MAAM,KAAK,MAAM,GAAG;IACnC;GACF;GACA,OAAO,cAAc,KAAK,GAAG;EAC/B;EACA,MAAM,QAAQ,UAAU,SAAS,GAAG,IAAI,IAAI,YAAY,CAAC,CAAC,OAAO,GAAG,IAAI,eAAe,aAAa,MAAM,KAAA;EAC1G,IAAI,UAAU,KAAA,GAAW,OAAO,KAAK,SAAS,GAAG,MAAM,6BAA6B;EACpF,MAAM,MAAM,MAAM;EAClB,MAAM,WAAW,gBAAgB,KAAK,CAAC,KAAK;EAC5C,MAAM,SAAS,KAAK,WAAW,MAAM,KAAK,OAAO,UAAU,IAAI,MAAM,KAAK,KAAK;EAC/E,MAAM,WAAW,KAAK;EACtB,QAAQ,MAAM;GACZ,MAAM,MAAM,EAAE;GACd,IAAI,EAAE,MAAM,MAAM,KAAK,OAAO,KAAK,CAAC;GACpC,MAAM,QAAoB,EAAE;GAC5B,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,KAAK;IAC5B,MAAM,IAAI,MAAM,MAAM;IACtB,KAAK,WAAW,WAAW,CAAC,IAAI,OAAO,OAAO,IAAI,OAAO,KAAK,CAAC;GACjE;GACA,EAAE,MAAM,MAAM;GACd,OAAO,WAAW,MAAM,MAAM,SAAS,KAAK,MAAM,GAAG;EACvD;CACF;CAEA,eAAe,MAA2B,MAAqB;EAE7D,MAAM,OAAO,KAAK;EAClB,MAAM,EAAE,KAAK,KAAK,WAAW;EAC7B,MAAM,MAAM,SAAS,KAAK,KAAK,IAAI;EACnC,MAAM,SAAS,YAAY,KAAK,MAAM;EACtC,IAAI,SAAS,GACX,QAAQ,MAAM;GACZ,MAAM,QAAoB,EAAE;GAC5B,MAAM,QAAQ,EAAE;GAChB,MAAM,QAAQ,QAAQ,WAAW,EAAE,MAAM,KAAK,IAAI,EAAE,KAAK,QAAQ,GAAG;GACpE,IAAI,IAAI;GACR,OAAO,IAAI,SAAS,OAAO,MAAM,QAAQ,GAAG;GAC5C,IAAI,IAAI,QAAQ,KAAK,OAAO,OAAO,GAAG,CAAC;GACvC,EAAE,MAAM;GACR,OAAO,OAAO,MAAM,SAAS,OAAO,CAAC,IAAI,KAAA;EAC3C;EAEF,MAAM,QAAQ,UAAU,OAAO,KAAK,QAAQ,WAAW,UAAU,GAAG,IAAI,KAAA;EACxE,IAAI,UAAU,KAAA,GAAW,OAAO,aAAa,OAAO,KAAK,IAAI;EAC7D,MAAM,OAAO,IAAI;EACjB,QAAQ,MAAM;GACZ,MAAM,MAAc,EAAE;GACtB,MAAM,QAAQ,EAAE;GAChB,MAAM,MAAM,EAAE;GACd,IAAI,IAAI;GACR,IAAI,QAAQ;GACZ,OAAO,QAAQ,OAAO,IAAI,KAAK;IAC7B,MAAM,IAAI,IAAI,WAAW,CAAC;IAC1B,IAAI,IAAI,WAAW;KACjB,IAAI,OAAO,OAAO,GAAG;KACrB;IACF,OAAO,IAAI,IAAI,SAAU,IAAI,OAAQ;KACnC,IAAI,KAAK,CAAC,MAAM,QAAQ;KACxB;IACF,OAAO;KACL,IAAI,KAAK;KACT,IAAI,IAAI,IAAI,IAAI,QAAQ;MACtB,MAAM,IAAI,IAAI,WAAW,IAAI,CAAC;MAC9B,KAAK,IAAI,WAAY,OAAQ,MAAO,IAAI,SAAW,OAAO,IAAI,SAAU;KAC1E;KACA,IAAI,KAAK,EAAE,MAAM,QAAQ;KACzB,KAAK,KAAK,QAAS,IAAI;IACzB;IACA;GACF;GACA,IAAI,QAAQ,KAAK,OAAO,OAAO,GAAG,CAAC;GACnC,EAAE,MAAM;GACR,OAAO,OAAO,IAAI,MAAM,OAAO,CAAC,IAAI,KAAA;EACtC;CACF;CAMA,KAAK,GAAe,MAAiB,KAAoB,MAAqB;EAC5E,MAAM,EAAE,MAAM,QAAQ,OAAO,cAAc,WAAW,KAAK,MAAM,GAAG;EACpE,MAAM,SAAS,IAAI;EACnB,MAAM,QAAQ,IAAI;EAElB,MAAM,SACJ,QAAQ,OAAO,YAAY,GAAG,OAAO,QAAQ,IAAI,KAAK,EAAE,OAAO,OAAO,GAAG;EAC3E,QAAQ,KAAK,MAAb;GACE,KAAK,OACH,QAAQ,MAAM;IACZ,MAAM,MAAM,EAAE;IACd,MAAM,MAAM,EAAE;IACd,IAAI,OAAO,KAAK,OAAO,KAAK,CAAC;IAC7B,MAAM,IAAI,OAAO,EAAE,OAAO,KAAK,GAAG;IAClC,IAAI,IAAI,MAAM;KACZ,EAAE,MAAM,MAAM;KACd,OAAO,OAAO,OAAO,CAAC,IAAI,KAAA;IAC5B;IACA,MAAM,KAAK,OAAO,EAAE,OAAO,KAAK,GAAG;IACnC,IAAI,KAAK,GAAG,OAAO,KAAK,CAAC;IACzB,EAAE,MAAM,MAAM,MAAM,EAAE;IACtB,OAAO,OAAO,OAAO,EAAE,IAAI,KAAA;GAC7B;GACF,KAAK,WAAW;IAEd,MAAM,MAAM,KAAK;IACjB,IAAI,KAAK,UAAU;KACjB,MAAM,SAAS,MAAM,KAAK,MAAM,MAAM,KAAK,eAAe,CAAC,CAAC,CAAC;KAC7D,MAAM,IAAI,OAAO;KACjB,QAAQ,MAAM;MACZ,MAAM,QAAQ,EAAE;MAChB,MAAM,MAAM,EAAE;MACd,MAAM,QAAQ,EAAE;MAChB,IAAI,MAAM;MACV,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;OAC1B,IAAI,OAAO,KAAK,OAAO,OAAO,GAAG,GAAG;OACpC,MAAM,IAAI,OAAO,OAAO,KAAK,GAAG;OAChC,IAAI;OACJ,IAAI,IAAI,MAAM;QACZ,KAAK;QACL,OAAO;OACT,OAAO;QACL,KAAK,OAAO,OAAO,KAAK,GAAG;QAC3B,IAAI,KAAK,GAAG,OAAO,OAAO,GAAG,GAAG;QAChC,OAAO,MAAM,EAAE;OACjB;OACA,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,OAAO,OAAO,GAAG,GAAG;MAClD;MACA,EAAE,MAAM;MACR,OAAO,OAAO,OAAO,GAAG,OAAO,GAAG,IAAI,KAAA;KACxC;IACF;IACA,MAAM,UAAU,IAAI,OAAO,GAAG;IAC9B,IAAI,UAAU,SAAS,OAAO,GAAG,OAAO,cAAc,SAAS,GAAG;IAClE,MAAM,QAAoB;IAC1B,MAAM,MAAM,MAAM;IAClB,IAAI,QAAQ,GAAG;KACb,MAAM,KAAK,MAAM;KACjB,QAAQ,MAAyB;MAC/B,MAAM,MAAM,EAAE;MACd,IAAI,MAAM,EAAE,OAAO,EAAE,MAAM,SAAS,IAAI;OACtC,EAAE,MAAM,MAAM;OACd,OAAO;MACT;MACA,OAAO,KAAK,CAAC;KACf;IACF;IACA,QAAQ,MAAM;KACZ,MAAM,MAAM,EAAE;KACd,IAAI,EAAE,MAAM,MAAM,KAAK,OAAO,KAAK,CAAC;KACpC,MAAM,QAAoB,EAAE;KAC5B,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,KAAK,IAAI,MAAM,MAAM,OAAO,MAAM,IAAI,OAAO,KAAK,CAAC;KAC5E,EAAE,MAAM,MAAM;KACd,OAAO;IACT;GACF;GACA,KAAK,SAAS;IACZ,MAAM,MAAM,QAAQ,KAAK,GAAG;IAC5B,MAAM,SAAS,KAAK;IACpB,MAAM,SAAS,YAAY,KAAK,MAAM;IACtC,MAAM,OAAO,IAAI;IACjB,QAAQ,MAAM;KACZ,MAAM,MAAM,EAAE;KACd,MAAM,MAAM,EAAE;KACd,IAAI,OAAO,KAAK,OAAO,KAAK,CAAC;KAC7B,MAAM,IAAI,OAAO,EAAE,OAAO,KAAK,GAAG;KAClC,IAAI,IAAI,QAAQ,IAAI,WAAW;MAC7B,IAAI,OAAO,OAAO,GAAG,OAAO,KAAK,CAAC;MAClC,EAAE,MAAM,MAAM;MACd,OAAO,OAAO,OAAO,CAAC,IAAI,KAAA;KAC5B;KACA,MAAM,KAAK,IAAI,OAAO,IAAI,OAAO,EAAE,OAAO,KAAK,GAAG;KAClD,IAAI,KAAK,KAAK,KAAK,EAAE,MAAM,QAAQ,OAAO,KAAK,CAAC;KAChD,EAAE,MAAM,OAAO,IAAI,OAAO,YAAY,MAAM,EAAE;KAC9C,OAAO,OAAO,OAAO,EAAE,IAAI,KAAA;IAC7B;GACF;GACA,KAAK,QAAQ;IACX,MAAM,QAAQ,KAAK;IACnB,QAAQ,MAAM;KACZ,MAAM,QAAQ,EAAE;KAChB,MAAM,MAAM,EAAE;KACd,MAAM,QAAQ,EAAE;KAChB,IAAI,MAAM;KACV,KAAK,IAAI,MAAM,GAAG,MAAM,OAAO,OAAO;MACpC,IAAI,OAAO,KAAK,OAAO,OAAO,GAAG,GAAG;MAEpC,IADU,OAAO,OAAO,KAAK,GACzB,IAAI,MAAM,OAAO;WAChB;OACH,MAAM,KAAK,OAAO,OAAO,KAAK,GAAG;OACjC,IAAI,KAAK,GAAG,OAAO,OAAO,GAAG,GAAG;OAChC,OAAO,MAAM,EAAE;MACjB;KACF;KACA,EAAE,MAAM;KACR,OAAO,OAAO,OAAO,GAAG,OAAO,GAAG,IAAI,KAAA;IACxC;GACF;GACA,KAAK,aAAa;IAChB,MAAM,EAAE,KAAK,KAAK,WAAW;IAC7B,MAAM,MAAM,QAAQ,KAAK,GAAG;IAG5B,MAAM,OAAiB;KAAE;KAAK;KAAK;KAAQ,QAF5B,YAAY,KAAK,MAEgB;KAAG,MADtC,IAAI;KACwC,OAAO,KAAK,IAAI,MAAM,SAAS;KAAG;KAAM;IAAK;IAItG,IAAI,cAAc,GAAG,OAAO,eAAe,MAAM,QAAQ,UAAU,IAAI,GAAG,GAAG;IAC7E,OAAO,KAAK,SAAS,IAAI,gBAAgB,MAAM,GAAG,IAAI,eAAe,MAAM,GAAG;GAChF;GACA,KAAK;GACL,KAAK;GACL,KAAK,QACH,OAAO,KAAK,SAAS,GAAG,MAAM,qCAAqC;EACvE;CACF;CAEA,MAAM,MAAuB,MAAqB;EAChD,MAAM,IAAI,KAAK,QAAQ,KAAK,MAAM,KAAK;EACvC,MAAM,MAAM,KAAK;EACjB,IAAI,QAAQ,KAAA,GAAW;GACrB,IAAI,CAAC,MAAM,OAAO;GAClB,IAAI,KAAK,SAAS,GAChB,QAAQ,MAAqB;IAC3B,MAAM,QAAQ,EAAE;IAChB,OAAO,EAAE,CAAC,MAAM,OAAO,OAAO,EAAE,MAAM,MAAM,OAAO,EAAE,GAAG;GAC1D;GAEF,QAAQ,MAAM;IACZ,MAAM,QAAQ,EAAE;IAChB,OAAO,EAAE,CAAC,MAAM,OAAO,OAAO,EAAE,MAAM,OAAO,EAAE,GAAG;GACpD;EACF;EAEA,MAAM,EAAE,MAAM,QAAQ,UAAU,WAAW,KAAK,MAAM,GAAG;EAEzD,MAAM,SACJ,QAAQ,OAAO,YAAY,GAAG,OAAO,QAAQ,IAAI,KAAK,EAAE,OAAO,OAAO,GAAG;EAC3E,QAAQ,MAAM;GACZ,MAAM,QAAQ,EAAE;GAChB,IAAI,EAAE,CAAC,MAAM,MAAM,OAAO;GAC1B,MAAM,MAAM,EAAE;GACd,MAAM,QAAQ,EAAE;GAChB,IAAI,IAAI;GACR,OAAO,IAAI,OAAO,OAAO,OAAO,GAAG,GAAG,IAAI,MAAM,KAAK;GACrD,IAAI,IAAI,OAAO,SAAS,KAAK,GAAG,GAAG,GAAG,IAAI,GAAG,OAAO,KAAK,CAAC;GAC1D,OAAO,OAAO,OAAO,GAAG,OAAO,GAAG,IAAI,KAAA;EACxC;CACF;;;;;;CAOA,MAAc,MAAuC;EACnD,IAAI,CAAC,WAAW,IAAI,KAAK,IAAI,KAAK,KAAK,SAAS,GAAG,OAAO,KAAA;EAC1D,IAAI,CAAC,WAAW,KAAK,OAAO,QAAQ,KAAK,OAAO,GAAG,CAAC,GAAG,OAAO,KAAA;EAC9D,MAAM,IAAI,KAAK,QAAQ,KAAK,MAAM,IAAI;EACtC,MAAM,OAAO,KAAK,SAAS,IAAI,kBAAkB;EACjD,MAAM,YAAY,KAAK;EACvB,QAAQ,MAAM;GACZ,MAAM,IAAI,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG;GAEpC,IAAI,MAAM,KAAA,KAAc,aAAa,EAAE,WAAW,UAAU,OAAO,SAAS,EAAE,KAAM;IAClF,MAAM,IAAI,EAAE,CAAC;IACb,OAAO,MAAM,OAAO,OAAO,QAAQ,CAAC;GACtC;GACA,IAAI,MAAM,MAAM,OAAO,KAAK,CAAC;GAC7B,EAAE,MAAM,UAAU;GAClB,OAAO;EACT;CACF;CAEA,QAAQ,MAA+B;EACrC,MAAM,MAAM,KAAK;EACjB,MAAM,SAAS,KAAK,QAAQ,KAAK,QAAQ,CAAC,GAAG;EAC7C,MAAM,SAAS,KAAK,QAAQ,KAAK,QAAQ,CAAC,GAAG;EAC7C,MAAM,MAAM,KAAK;EACjB,MAAM,OAAO,KAAK;EAClB,MAAM,OAAO,KAAK;EAElB,IAAI;EACJ,IAAI,QAAQ,KAAA,KAAc,OAAO,UAAU,GAAG,KAAK,OAAO,WACxD,UACE,SAAS,KACJ,MAAqB;GACpB,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,WAAW,EAAE,GAAG,MAAM,MAAM;IACvD,EAAE;IACF,OAAO;GACT;GACA,OAAO;EACT,KACC,MAAyB;GACxB,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,MAAM;IAC5C,EAAE;IACF,OAAO;GACT;GACA,OAAO;EACT;OACD,IAAI,OAAO,WAAW,MAAM,GAAG,CAAC,CAAC,MAAM;GAC5C,MAAM,EAAE,QAAQ,UAAU,WAAW,MAAM,GAAG;GAC9C,WAAW,MAAM;IACf,IAAI,EAAE,MAAM,EAAE,OAAO,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM;KAC3D,EAAE,OAAO;KACT,OAAO;IACT;IACA,OAAO;GACT;EACF,OACE,WAAW,MAAM;GACf,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO;GAC3B,MAAM,KAAK,IAAI,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG;GAC3C,IAAI,OAAO,MAAM,OAAO;GACxB,EAAE,OAAO,IAAI,MAAM,EAAE;GACrB,OAAO;EACT;EAEF,MAAM,YAAY,KAAK;EACvB,MAAM,MAAM,IAAI,IAAI;;EAEpB,MAAM,cAAc,GAAe,OAAe,eAA+C;GAC/F,IAAI,EAAE,WAAW,KAAA,GAAW,OAAO,KAAK,GAAG,KAAK,OAAO,UAAU;GACjE,EAAE,OAAO;GACT,OAAO;EACT;EACA,IAAI,KAAK;GACP,MAAM,QACJ,QAAQ,KAAA,KAAa,GAAG,UAAU,EAAE,MAAM,OAAO,EAAE,GAAG,KAAK,GAAG,UAAU,OAAO,KAAK,GAAG,OAAO,EAAE,GAAG;GACrG,QAAQ,MAAM;IACZ,MAAM,QAAQ,EAAE;IAChB,IAAI,UAAU;IACd,IAAI,aAAa,EAAE,WAAW,KAAA,GAAW;KAEvC,MAAM,KAAK,OAAO,KAAK,GAAG,KAAK,KAAK;KACpC,IAAI,cAAc,OAAO,MAAM;MAC7B,EAAE,MAAM,GAAG;MACX,OAAO,GAAG;KACZ;KACA,IAAI,OAAO,KAAA,GAAW;MACpB,EAAE,MAAM;MACR,UAAU;KACZ;IACF;IACA,OAAO,EAAE,MAAM,EAAE,KAAK;KACpB,MAAM,SAAS,EAAE;KACjB,IAAI,OAAO,CAAC,MAAM,MAAM;MACtB,IAAI,EAAE,QAAQ,QAAQ;OACpB,EAAE,OAAO;OACT,OAAO;MACT;MACA;KACF;KACA,IAAI,EAAE,SAAS,KAAK,OAAO,WAAW,GAAG,OAAO,MAAM;KACtD,IAAI,EAAE,SAAS,IAAI,OAAO;KAC1B,EAAE,MAAM;KACR,IAAI,QAAQ,CAAC,GACP;UAAA,OAAO,CAAC,MAAM,MAAM,OAAO,EAAE,SAAS,MAAM,WAAW,GAAG,OAAO,MAAM,IAAI;KAAA,OAE/E,OAAO,UAAU,OAAO,KAAK,GAAG,KAAK,OAAO,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,MAAM,GAAG,KAAK;IAEvF;IACA,IAAI,EAAE,SAAS;KAEb,EAAE,WAAW,CAAC;KACd,OAAO,WAAW,GAAG,OAAO,EAAE,GAAG;IACnC;IACA,OAAO,UAAU,OAAO,KAAK,GAAG,KAAK,OAAO,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,MAAM,GAAG,KAAK;GACrF;EACF;EACA,QAAQ,MAAM;GACZ,MAAM,QAAQ,EAAE;GAChB,IAAI,MAAM;GACV,IAAI,UAAU;GACd,IAAI,aAAa,EAAE,WAAW,KAAA,GAAW;IAEvC,MAAM,KAAK,OAAO,KAAK,GAAG,KAAK,KAAK;IACpC,IAAI,cAAc,OAAO,MAAM;KAC7B,EAAE,MAAM,GAAG;KACX,OAAO,GAAG;IACZ;IACA,IAAI,OAAO,KAAA,GAAW;KACpB,MAAM,GAAG;KACT,EAAE,MAAM,GAAG;KACX,UAAU;IACZ;GACF;GACA,OAAO,EAAE,MAAM,EAAE,KAAK;IACpB,MAAM,SAAS,EAAE;IACjB,MAAM,IAAI,OAAO,CAAC;IAClB,IAAI,MAAM,MACJ;SAAA,EAAE,QAAQ,QAAQ;MACpB,OAAO;MACP;KACF;WACK;KACL,IAAI,EAAE,SAAS,KAAK,OAAO,WAAW,GAAG,OAAO;MAAE;MAAK,KAAK;KAAO,CAAC;KACpE,IAAI,EAAE,SAAS,IAAI,OAAO;KAC1B,EAAE,MAAM;IACV;IACA,IAAI,QAAQ,CAAC,GAAG;KACd,MAAM,IAAI,OAAO,CAAC;KAClB,IAAI,MAAM,MAAM,OAAO,EAAE,SAAS,MAAM,WAAW,GAAG,OAAO;MAAE;MAAK,KAAK;KAAO,CAAC,IAAI;KACrF,OAAO;IACT,OACE,OAAO,UAAU,OAAO,KAAK,GAAG,KAAK,OAAO,MAAM,GAAG,IAAI;GAE7D;GACA,IAAI,EAAE,SAAS;IAEb,EAAE,WAAW,CAAC;IACd,OAAO,WAAW,GAAG,OAAO;KAAE;KAAK,KAAK,EAAE;IAAI,CAAC;GACjD;GACA,OAAO,UAAU,OAAO,KAAK,GAAG,KAAK,OAAO,MAAM,GAAG,IAAI;EAC3D;CACF;AACF;;AAGA,MAAM,YAAY,SAA4B;CAC5C,IAAI,UAAU,SAAS,MAAM,SAAS,KAAK,UAAU,SAAS,MAAM,WAAW,GAAG,OAAO,KAAK,QAAQ,SAAS;CAC/G,IAAI,UAAU,SAAS,MAAM,cAAc,GAAG,OAAO,KAAK,IAAI,GAAG,GAAG,KAAK,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI;CAC9G,OAAO;AACT;AAWA,MAAM,QAAQ,MAA+B;CAC3C,EAAE,OAAO;CACT,OAAO;AACT;AAqBA,MAAM,mBAAmB,MAAgB,QAAgC;CACvE,MAAM,EAAE,QAAQ,MAAM,KAAK,KAAK,QAAQ,OAAO,MAAM,SAAS;CAC9D,MAAM,EAAE,QAAQ,MAAM,UAAU;CAChC,QAAQ,MAAM;EACZ,MAAM,QAAgB,EAAE;EACxB,MAAM,QAAQ,EAAE;EAChB,MAAM,MAAM,EAAE;EACd,IAAI,IAAI;EACR,IAAI,QAAQ;EACZ,OAAO,QAAQ,OAAO,IAAI,KAAK;GAC7B,MAAM,IAAI,MAAM,WAAW,CAAC;GAC5B,IAAI,IAAI,OAAO;IACb,IAAI,OAAO,OAAO,GAAG;IACrB;GACF,OAAO,IAAI,IAAI,MAAM;IACnB,IAAI,KAAK,CAAC,MAAM,QAAQ;IACxB;GACF,OAAO;IACL,MAAM,KAAK,OAAO,OAAO,GAAG,GAAG;IAC/B,IAAI,KAAK,KAAK,KAAK,EAAE,MAAM,QAAQ;IACnC,KAAK,MAAM,EAAE;GACf;GACA;EACF;EACA,IAAI,QAAQ,KAAK,OAAO,OAAO,GAAG,CAAC;EACnC,EAAE,MAAM;EACR,OAAO,OAAO,KAAK,OAAO,OAAO,CAAC,IAAI,KAAA;CACxC;AACF;AAEA,MAAM,kBAAkB,MAAgB,QAAoC;CAC1E,MAAM,EAAE,QAAQ,KAAK,KAAK,QAAQ,OAAO,MAAM,SAAS;CACxD,MAAM,EAAE,QAAQ,MAAM,UAAU;CAChC,QAAQ,MAAM;EACZ,MAAM,QAAoB,EAAE;EAC5B,MAAM,QAAQ,EAAE;EAChB,MAAM,MAAM,EAAE;EACd,IAAI,IAAI;EACR,IAAI,QAAQ;EACZ,OAAO,QAAQ,OAAO,IAAI,KAAK;GAC7B,MAAM,IAAI,MAAM;GAEhB,IAAI,IAAI,OAAO;IACb,IAAI,OAAO,OAAO,GAAG;IACrB;GACF,OAAO;IACL,MAAM,KAAK,OAAO,OAAO,GAAG,GAAG;IAC/B,IAAI,KAAK,KAAK,KAAK,EAAE,MAAM,QAAQ;IACnC,KAAK,MAAM,EAAE;GACf;GACA;EACF;EACA,IAAI,QAAQ,KAAK,OAAO,OAAO,GAAG,CAAC;EACnC,EAAE,MAAM;EACR,OAAO,OAAO,KAAK,OAAO,OAAO,CAAC,IAAI,KAAA;CACxC;AACF;;AAGA,MAAM,kBAAkB,MAAgB,IAAW,QAAoC;CACrF,MAAM,EAAE,QAAQ,MAAM,KAAK,KAAK,QAAQ,OAAO,MAAM,SAAS;CAC9D,MAAM,EAAE,QAAQ,MAAM,UAAU;CAChC,MAAM,KAAK,IAAI;CACf,QAAQ,MAAM;EACZ,MAAM,QAAoB,EAAE;EAC5B,MAAM,QAAQ,EAAE;EAChB,MAAM,MAAM,EAAE;EACd,IAAI,IAAI;EACR,IAAI,QAAQ;EACZ,OAAO,QAAQ,OAAO,IAAI,KAAK;GAE7B,MAAM,IAAI,IAAI,IAAI,MAAM,MAAM,IAAI,MAAO,MAAM,IAAI,OAAO,IAAK;GAC/D,IAAI,IAAI,OAAQ,IAAI,QAAQ,OAAO,OAAO,IAAI,KAAK,CAAC,MAAM,SAAU,OAAO;GAC3E,IAAI,IAAI,MAAM,KAAK;QACd;IACH,MAAM,KAAK,OAAO,OAAO,GAAG,GAAG;IAC/B,IAAI,KAAK,KAAK,KAAK,EAAE,MAAM,QAAQ;IACnC,KAAK,MAAM,EAAE;GACf;GACA;EACF;EACA,IAAI,QAAQ,KAAK,OAAO,OAAO,GAAG,CAAC;EACnC,EAAE,MAAM;EACR,OAAO,OAAO,KAAK,OAAO,OAAO,CAAC,IAAI,KAAA;CACxC;AACF;AAcA,MAAM,cAAc,MAAiB,QAAmC;CACtE,IAAI,SAAS,MAAM,QAAQ,WAAW,QAAQ,UAC5C,OAAO;EACL,OAAO;EACP,MAAM;EACN,QACE,QAAQ,WACH,OAAmB,GAAG,QAAS,IAAI,IAAI,MAAM,MAAM,KAAM,MAAM,IAAI,MAAM,IAAK,SAC9E,OAAmB,GAAG,QAAS,IAAI,IAAI,MAAO,MAAM,MAAM,IAAK,MAAM,IAAI,KAAK;CACvF;CAIF,OAAO;EACL,OAAO;EACP,MAAM,UAAU,GAAG;EACnB,QAAQ,SAAS,KAAK,OAAe,GAAG,SAAS,MAAM,WAAW,CAAC,KAAK,OAAmB,GAAG,SAAS,MAAM;CAC/G;AACF;AAEA,MAAM,UAAU,GAAe,QAA6B;CAC1D,EAAE,MAAM;CACR,EAAE,OAAO;CACT,OAAO;AACT;;AAGA,MAAM,iBAAiB,KAAa,UAAyB;CAC3D,MAAM,MAAM,IAAI;CAChB,IAAI,QAAQ,GAAG,aAAa;CAC5B,IAAI,QAAQ,GAAG;EACb,MAAM,KAAK,IAAI,WAAW,CAAC;EAC3B,QAAQ,MAAqB;GAC3B,MAAM,MAAM,EAAE;GACd,IAAI,MAAM,EAAE,OAAO,EAAE,MAAM,WAAW,GAAG,MAAM,IAAI;IACjD,EAAE,MAAM,MAAM;IACd,OAAO;GACT;GACA,OAAO,KAAK,CAAC;EACf;CACF;CACA,QAAQ,MAAqB;EAC3B,MAAM,MAAM,EAAE;EACd,IAAI,EAAE,MAAM,OAAO,OAAO,EAAE,MAAM,WAAW,KAAK,GAAG,GAAG;GACtD,EAAE,MAAM,MAAM;GACd,OAAO;EACT;EACA,OAAO,KAAK,CAAC;CACf;AACF;;;;;;;AAQA,MAAM,gBAAgB,OAA8B,KAAa,SAAwB;CACvF,MAAM,OAAO,MAAM,WAAW,IAAI,aAAa,IAAI;CACnD,MAAM,KAAK,MAAM;CACjB,MAAM,KAAK,MAAM,SAAS,IAAI,MAAM,KAAK;CACzC,MAAM,KAAK,MAAM,SAAS,IAAI,MAAM,KAAK;CACzC,MAAM,MAAM,OAAO,aAAa,EAAE;CAClC,MAAM,OAAO,IAAI,UAAU,MAAM,KAAK,MAAM,OAAO,aAAa,CAAC,CAAC,CAAC;CACnE,QAAQ,MAAqB;EAC3B,MAAM,MAAM,EAAE;EACd,MAAM,QAAQ,EAAE;EAChB,MAAM,MAAM,EAAE;EACd,MAAM,IAAI,QAAQ,OAAO,MAAM,QAAQ,OAAO;EAC9C,IAAI,IAAI;EACR,IAAI,IAAI;EACR,OAAO,IAAI,MAAM,IAAI,IAAI,WAAW,CAAC,OAAO,MAAM,MAAM,MAAM,MAAM,IAAI;EAExE,IAAI,MAAM,KAAK,IAAI,QAAQ,IAAI,IAAI,WAAW,CAAC,OAAO,MAAM,MAAM,MAAM,MAAM,IAAI;GAChF,IAAI,MAAM,WAAW,GAAG;IACtB,MAAM,KAAK,IAAI,QAAQ,KAAK,CAAC;IAC7B,IAAI,KAAK,KAAK,KAAK,MAAM,MAAM;GACjC,OAAO,IAAI,SAAS,MAAM,GAAG,CAAC;EAChC;EACA,IAAI,IAAI,QAAQ,KAAK,OAAO,OAAO,GAAG,CAAC;EACvC,EAAE,MAAM;EACR,OAAO,OAAO,IAAI,MAAM,OAAO,CAAC,IAAI,KAAA;CACtC;AACF;;AAUA,MAAM,iBAAiB,GAAe,KAAU,OAA4D;CAE1G,MAAM,KAAK,OAAO,KAAK,GAAG,KAAK,EAAE;CACjC,IAAI,cAAc,OAAO,MAAM,EAAE,MAAM,GAAG;MACrC,IAAI,OAAO,KAAA,GAAW,EAAE,MAAM,GAAG;CACtC,OAAO;AACT;;AAGA,MAAM,eAAe,GAAe,KAAU,IAAY,SAAkB,QAC1E,UAAU,OAAO,KAAK,GAAG,KAAK,IAAI,MAAM,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO;;;;;;AAOrE,MAAM,eACJ,GACA,MACA,IACA,SACA,KACA,OACA,OACA,QACyB;CACzB,IAAI,EAAE,SAAS,OAAO,EAAE,WAAW,KAAA,GAAW,OAAO,KAAK,GAAG,MAAM,IAAI;EAAE;EAAK;EAAO,KAAK;CAAM,CAAC;CACjG,IAAI,EAAE,SAAS,MAAM,QAAQ,KAAK,OAAO;CACzC,EAAE,MAAM;CACR,OAAO,YAAY,GAAG,MAAM,IAAI,SAAS,GAAG;AAC9C;;AAGA,IAAM,aAAN,MAAiB;CACf,IAAsC,CAAC;CACvC,WAAuC,KAAA;CACvC,IAAI,KAAc,OAAsB;EACtC,IAAI,KAAK,aAAa,KAAA,KAAa,WAAW,GAAG,GAAG,KAAK,EAAE,OAAO;OAC7D,KAAK,WAAW,SAAS,KAAK,GAAG,KAAK,UAAU,KAAK,KAAK;CACjE;CACA,SAAiB;EACf,IAAI,KAAK,aAAa,KAAA,GAAW,aAAa,KAAK,GAAG,KAAK,QAAQ;EACnE,OAAO,KAAK;CACd;AACF;AASA,MAAa,yBAAyB,MAAiB,YAAY,UAA2B;CAC5F,MAAM,WAAW,IAAI,SAAS,MAAM,SAAS;CAC7C,OAAO;EACL,UAAU,GAAG,SAAS,SAAS,QAAQ,GAAG,IAAI;EAC9C,OAAO,GAAG,MAAM,WAAW,SAAS,KAAK,GAAG,MAAM,MAAM;EACxD,QAAQ,SAAS;EACjB,WAAW,SAAS;CACtB;AACF;;AASA,MAAM,kBAAkB,MAAkB,MAAiB,YAAY,UAAwB;CAC7F,MAAM,WAAW,IAAI,SAAS,MAAM,SAAS;CAE7C,OAAO;EAAE,MADI,SAAS,QAAQ,MAAM,IACxB;EAAG,WAAW,SAAS;CAAU;AAC/C;;AAGA,MAAa,UAAmB,EAC9B,QAAQ,GAAG,MAAM,cACf,OAAO,MACL,OAAO,UAAU,eAAe,GAAG,MAAM,SAAS,CAAC,GACnD;CACE,YAAY,EAAE,WAAW,YAAY;EACnC,SAAS;EACT;EACA,SAAS;EACT;EACA,OAAO,KAAA;CACT;CACA,YAAY,WAAW;EACrB,SAAS;EACT,MAAM,KAAA;EACN,SAAS;EACT,WAAW,CAAC;EACZ;CACF;AACF,CACF,EACJ"}
|
|
1
|
+
{"version":3,"file":"closure.js","names":[],"sources":["../../../src/internal/compiler/closure.ts"],"sourcesContent":["/**\n * The closure compiler: turns a parser's description into specialized\n * closures with the step signature. Compiled steps return a value, or\n * `Fail` with only `state.mode` set: no diagnostics are recorded.\n *\n * Nothing here generates code, so it works under a Content Security\n * Policy. Parsers that can't be compiled run their own (interpreted) steps\n * on the same state.\n */\nimport * as Predicate from \"effect/Predicate\"\nimport type { Encoding } from \"../../Encoding.js\"\nimport type { ErrMode, Input, State } from \"../../Input.js\"\nimport { Fail } from \"../../Input.js\"\nimport * as Option from \"effect/Option\"\nimport * as Result from \"effect/Result\"\nimport type { Node, NodeOf, ParserLike } from \"../node.js\"\nimport { addEntry, flushEntries, fromEntries, isPlainKey } from \"../entries.js\"\nimport { Defer, nodeOf, scansFloat } from \"../node.js\"\nimport { floatScan, floatTexts, scanFloatBytes, scanFloatString, toFloat } from \"../numbers.js\"\nimport { charOf, fastLimit, firstCodePoint, fold, textIn, utf16be, utf16le, utf8, utf8Text, validate } from \"../text.js\"\nimport { countTokens, indexOf, indexOfAny } from \"../tokens.js\"\nimport { tupleStep } from \"../tuple.js\"\nimport type { AltPlan } from \"./first.js\"\nimport { Key } from \"../key.js\"\nimport * as Resume from \"../resume.js\"\nimport type { Backend } from \"./registry.js\"\nimport type { EntryPair } from \"./entries.js\"\nimport { buildsEntries, pairOf } from \"./entries.js\"\nimport { FirstSets, planAlt } from \"./first.js\"\nimport { nextStop, SearchHead, StopCache, stopChars } from \"./search.js\"\nimport { acceptTable, kindOfEncoding, TableSize, textSet, tokenSet } from \"./sets.js\"\n\nexport type Step = (state: State<any>) => any\n\n/** A parser that the compiler left to its interpreted step. */\nexport interface Fallback {\n readonly name: string | undefined\n readonly tag: Node[\"_tag\"]\n readonly reason: string\n}\n\n/** The maximum number of distinct parsers compiled for one root. */\nconst maxNodes = 2048\n\nconst BT: ErrMode = \"Backtrack\"\nconst CUT: ErrMode = \"Cut\"\nconst INC: ErrMode = \"Incomplete\"\n\n/**\n * How many units past the cursor a single token can depend on (a code\n * point is at most 4 units). In a partial parse, a token parser that read\n * no closer than this to the end of the input behaves exactly as on\n * complete input.\n */\nconst Margin = 4\n\nconst lowerAscii = (c: number): number => (c >= 65 && c <= 90 ? c + 32 : c)\n\ninterface Slot {\n fn: Step | undefined\n}\n\nclass Compiler {\n readonly used = new Map<ParserLike, Slot>()\n readonly unused = new Map<ParserLike, Slot>()\n readonly firsts: FirstSets\n readonly fallbacks: Array<Fallback> = []\n private readonly fellBack = new Set<ParserLike>()\n private budget = maxNodes\n\n /**\n * `resumable`: compile for streaming parses, which may be partial (see\n * `state.partial`) and keep checkpoints (see `internal/resume.ts`).\n */\n constructor(\n readonly kind: 0 | 1 | 2,\n readonly resumable = false\n ) {\n this.firsts = new FirstSets(kind)\n }\n\n /**\n * In a resumable build, runs the compiled token parser `step`, and falls\n * back to the interpreted one when it read within `lookahead` units of\n * the end of a partial input, where it might have to report `Incomplete`.\n * Compiled token parsers leave `state.pos` where they stopped reading,\n * even when they fail.\n */\n private partialSafe(p: ParserLike, step: Step, lookahead: number): Step {\n if (!this.resumable) return step\n const interpreted = p.step\n const ahead = Math.max(lookahead, Margin)\n return (s) => {\n if (!s.partial) return step(s)\n const start = s.pos\n const r = step(s)\n if (s.pos + ahead <= s.end) return r\n s.pos = start\n return interpreted(s)\n }\n }\n\n /** Compiles `p`; when `used` is false its output is not needed. */\n compile(p: ParserLike, used: boolean): Step {\n const memo = used ? this.used : this.unused\n const slot = memo.get(p)\n if (slot !== undefined) {\n if (slot.fn !== undefined) return slot.fn\n // A cycle through `suspend`: the slot is filled once the cycle is compiled, before any parse runs\n return (s) => (slot.fn ?? p.step)(s)\n }\n const fresh: Slot = { fn: undefined }\n memo.set(p, fresh)\n const node = nodeOf(p)\n const fn = --this.budget < 0 ? this.fallback(p, node, \"node budget exceeded\") : this.build(p, node, used)\n fresh.fn = fn\n return fn\n }\n\n fallback(p: ParserLike, node: Node, reason: string): Step {\n this.note(p, node, reason)\n return p.step\n }\n\n /** Records that (part of) `p` runs interpreted. */\n note(p: ParserLike, node: Node, reason: string): void {\n if (!this.fellBack.has(p)) {\n this.fellBack.add(p)\n this.fallbacks.push({ name: p.name, tag: node._tag, reason })\n }\n }\n\n /** Whether a token node reads this input kind natively. */\n private native(enc: Encoding<any> | undefined): boolean {\n return enc === undefined ? this.kind !== 2 : kindOfEncoding(enc) === this.kind\n }\n\n build(p: ParserLike, node: Node, used: boolean): Step {\n switch (node._tag) {\n case \"Opaque\":\n return this.fallback(p, node, \"not describable (Parser.make, gen, ...)\")\n case \"Fixed\":\n // `Binary`'s numbers: the step is already what a closure would be\n return p.step\n case \"Combinator\":\n return node.build(node.parsers.map((q) => this.compile(q, true)))\n case \"Succeed\": {\n const value = node.value\n return () => value\n }\n case \"Sync\": {\n const evaluate = node.evaluate\n return used ? () => evaluate() : () => undefined\n }\n case \"Fail\": {\n const mode = node.mode\n return (s) => {\n s.mode = mode\n return Fail\n }\n }\n case \"Eof\":\n return (s) => {\n if (s.pos < s.end) {\n s.mode = BT\n return Fail\n }\n // `eof`'s own failure: `Incomplete`, needing one more unit\n if (s.partial) return s.incomplete(1)\n return undefined\n }\n case \"Location\":\n return (s) => s.pos\n case \"RestLen\":\n return (s) => s.end - s.pos\n case \"Suspend\":\n return this.compile(node.resolve(), used)\n case \"Any\":\n case \"Literal\":\n case \"OneOf\":\n case \"Take\":\n case \"TakeWhile\":\n case \"TakeUntil\":\n case \"TakeUntilAny\":\n case \"Rest\":\n if (!this.native(node.encoding)) return this.fallback(p, node, \"token parser on array input\")\n return this.partialSafe(\n p,\n node.encoding === undefined ? this.token(p, node, used) : this.text(p, node, node.encoding, used),\n marginOf(node)\n )\n case \"TillLineEnding\":\n case \"Identifier\":\n case \"Bom\":\n return this.fallback(p, node, \"leaf parser without a compiled form\")\n case \"Escaped\":\n if (!this.native(node.encoding)) return this.fallback(p, node, \"token parser on array input\")\n return this.escaped(node)\n case \"Map\": {\n if (!used) return this.compile(node.self, false)\n if (node.f === toFloat) {\n const step = this.float(node)\n if (step !== undefined) return step\n }\n // Streaming builds keep the array, which their checkpoints hold\n if (node.f === fromEntries && buildsEntries(node.self)) return this.entries(node.self)\n const c = this.compile(node.self, true)\n const f = node.f\n return (s) => {\n const a = c(s)\n return a === Fail ? Fail : f(a)\n }\n }\n case \"As\": {\n const c = this.compile(node.self, false)\n if (!used) return c\n const value = node.value\n return (s) => (c(s) === Fail ? Fail : value)\n }\n case \"Tap\": {\n const c = this.compile(node.self, true)\n const f = node.f\n return (s) => {\n const a = c(s)\n if (a !== Fail) f(a)\n return a\n }\n }\n case \"TryMap\": {\n const c = this.compile(node.self, true)\n const f = node.f\n return (s) => {\n const a = c(s)\n if (a === Fail) return Fail\n const r = f(a)\n if (Result.isSuccess(r)) return r.success\n s.mode = BT\n return Fail\n }\n }\n case \"FilterMap\": {\n const c = this.compile(node.self, true)\n const f = node.f\n return (s) => {\n const a = c(s)\n if (a === Fail) return Fail\n const o = f(a)\n if (Option.isSome(o)) return o.value\n s.mode = BT\n return Fail\n }\n }\n case \"FastPath\": {\n const c = this.compile(node.self, used)\n const fast = node.fast\n return (s) => {\n const start = s.pos\n const a = fast(s)\n if (a !== Defer) return a\n s.pos = start\n return c(s)\n }\n }\n case \"MapOrFail\": {\n const c = this.compile(node.self, true)\n const f = node.f\n return (s) => {\n const a = c(s)\n if (a === Fail) return Fail\n const b = f(a)\n if (b === Fail) s.mode = BT\n return b\n }\n }\n case \"Filter\": {\n const c = this.compile(node.self, true)\n const predicate = node.predicate\n return (s) => {\n const a = c(s)\n if (a === Fail) return Fail\n if (predicate(a)) return a\n s.mode = BT\n return Fail\n }\n }\n case \"FlatMap\": {\n // The parser returned by `f` runs interpreted\n const c = this.compile(node.self, true)\n const f = node.f\n this.note(p, node, \"the parser returned by the function runs interpreted\")\n return (s) => {\n const a = c(s)\n return a === Fail ? Fail : f(a).step(s)\n }\n }\n case \"Taken\":\n if (node.encoding !== undefined && !this.native(node.encoding)) {\n return this.fallback(p, node, \"Text parser on another input kind\")\n }\n return this.taken(node, used)\n case \"WithTaken\": {\n const c = this.compile(node.self, true)\n return (s) => {\n const start = s.pos\n const a = c(s)\n return a === Fail ? Fail : [a, s.slice(start, s.pos)]\n }\n }\n case \"MapSpan\": {\n const c = this.compile(node.self, used)\n if (!used) return c\n const f = node.f\n return (s) => {\n const start = s.pos\n const a = c(s)\n return a === Fail ? Fail : f(a, start, s.pos)\n }\n }\n case \"Span\": {\n const c = this.compile(node.self, false)\n if (!used) return c\n return (s) => {\n const start = s.pos\n return c(s) === Fail ? Fail : { start, end: s.pos }\n }\n }\n case \"WithSpan\": {\n const c = this.compile(node.self, true)\n return (s) => {\n const start = s.pos\n const a = c(s)\n return a === Fail ? Fail : [a, { start, end: s.pos }]\n }\n }\n case \"Mode\": {\n const c = this.compile(node.self, used)\n const from = node.from\n const to = node.to\n return (s) => {\n const a = c(s)\n if (a === Fail && s.mode === from) s.mode = to\n return a\n }\n }\n case \"Context\":\n case \"Expected\":\n case \"Quiet\":\n case \"MapError\":\n case \"OrFail\":\n case \"Trace\":\n case \"Syntax\":\n case \"RetryAfter\":\n // Diagnostics only, or inactive outside parseRecoverable / tracing\n return this.compile(node.self, used)\n case \"ResumeAfter\": {\n const c = this.compile(node.self, used)\n if (!used) return c\n return (s) => {\n const a = c(s)\n return a === Fail ? Fail : Option.some(a)\n }\n }\n case \"Opt\":\n case \"OrElseSucceed\": {\n const c = this.compile(node.self, used)\n const orElse = !used ? undefined : Predicate.isTagged(node, \"Opt\") ? Option.none : node.value\n const some = used && Predicate.isTagged(node, \"Opt\")\n return (s) => {\n const start = s.pos\n const a = c(s)\n if (a !== Fail) return some ? Option.some(a) : a\n if (s.mode !== BT) return Fail\n s.pos = start\n return orElse === undefined ? undefined : orElse()\n }\n }\n case \"Peek\": {\n const c = this.compile(node.self, used)\n return (s) => {\n const start = s.pos\n const a = c(s)\n if (a !== Fail) s.pos = start\n return a\n }\n }\n case \"Not\": {\n const c = this.compile(node.self, false)\n return (s) => {\n const start = s.pos\n if (c(s) !== Fail) {\n s.pos = start\n s.mode = BT\n return Fail\n }\n if (s.mode !== BT) return Fail\n s.pos = start\n return undefined\n }\n }\n case \"Seq\":\n return this.seq(node, used)\n case \"Struct\": {\n const keys = node.keys\n const steps = node.parsers.map((q) => this.compile(q, used))\n const n = steps.length\n if (!used) return this.chain(steps)\n return (s) => {\n const out: Record<string, unknown> = {}\n for (let i = 0; i < n; i++) {\n const a = steps[i](s)\n if (a === Fail) return Fail\n out[keys[i]] = a\n }\n return out\n }\n }\n case \"SeqWith\": {\n const steps = node.parsers.map((q) => this.compile(q, used))\n if (!used) return this.chain(steps)\n return this.seqWith(steps, node.f)\n }\n case \"ZipWith\": {\n const c1 = this.compile(node.self, used)\n const c2 = this.compile(node.that, used)\n if (!used) return this.chain([c1, c2])\n const f = node.f\n return (s) => {\n const a = c1(s)\n if (a === Fail) return Fail\n const b = c2(s)\n return b === Fail ? Fail : f(a, b)\n }\n }\n case \"Alt\":\n return this.alt(node, used)\n case \"Dispatch\":\n return this.dispatch(p, node, used)\n case \"Repeat\":\n case \"Fold\": {\n // A run of a character set whose characters are not kept scans as a `takeWhile` (#79)\n const element = Predicate.isTagged(node, \"Repeat\") && !used ? nodeOf(node.self) : undefined\n if (\n element !== undefined &&\n Predicate.isTagged(element, \"OneOf\") &&\n this.kind !== 2 &&\n this.native(element.encoding)\n ) {\n const { encoding, negate, set } = element\n const run: NodeOf<\"TakeWhile\"> = { _tag: \"TakeWhile\", set, negate, encoding, min: node.min, max: node.max }\n // The repetition's own step is the exact fallback near the end of a partial input\n return this.partialSafe(\n p,\n encoding === undefined ? this.token(p, run, false) : this.text(p, run, encoding, false),\n Margin\n )\n }\n return this.repeat(node, used)\n }\n case \"RepeatTill\":\n return this.repeatTill(node)\n case \"Separated\":\n return this.separated(node, used)\n case \"SeparatedFold\":\n return this.separatedFold(node)\n case \"Service\":\n case \"Provide\":\n return this.fallback(p, node, \"services stay interpreted\")\n }\n }\n\n /** `seqWith`: up to three parsers without an array of values. */\n seqWith(steps: ReadonlyArray<Step>, f: NodeOf<\"SeqWith\">[\"f\"]): Step {\n const n = steps.length\n if (n === 0) return () => f()\n const [c1, c2, c3] = steps\n if (n === 1)\n return (s) => {\n const a = c1(s)\n return a === Fail ? Fail : f(a)\n }\n if (n === 2)\n return (s) => {\n const a = c1(s)\n if (a === Fail) return Fail\n const b = c2(s)\n return b === Fail ? Fail : f(a, b)\n }\n if (n === 3)\n return (s) => {\n const a = c1(s)\n if (a === Fail) return Fail\n const b = c2(s)\n if (b === Fail) return Fail\n const c = c3(s)\n return c === Fail ? Fail : f(a, b, c)\n }\n return (s) => {\n const values = new Array(n)\n for (let i = 0; i < n; i++) {\n const a = steps[i](s)\n if (a === Fail) return Fail\n values[i] = a\n }\n return f(...values)\n }\n }\n\n /** Runs steps in order, for their effect on the cursor only. */\n chain(steps: ReadonlyArray<Step>): Step {\n const n = steps.length\n if (n === 0) return () => undefined\n if (n === 1) return steps[0]\n if (n === 2) {\n const a = steps[0]\n const b = steps[1]\n return (s) => (a(s) === Fail ? Fail : b(s))\n }\n return (s) => {\n for (let i = 0; i < n; i++) if (steps[i](s) === Fail) return Fail\n return undefined\n }\n }\n\n seq(node: NodeOf<\"Seq\">, used: boolean): Step {\n const output = node.output\n const keep = (i: number) =>\n used && (output === \"tuple\" || output === i || (Array.isArray(output) && output.includes(i)))\n const steps = node.parsers.map((q, i) => this.compile(q, keep(i)))\n const n = steps.length\n if (!used) return this.chain(steps)\n if (output === \"tuple\") return tupleStep(steps)\n if (Predicate.isNumber(output)) {\n if (n === 2) {\n const a = steps[0]\n const b = steps[1]\n return output === 0\n ? (s) => {\n const x = a(s)\n if (x === Fail) return Fail\n return b(s) === Fail ? Fail : x\n }\n : (s) => (a(s) === Fail ? Fail : b(s))\n }\n return (s) => {\n let out: unknown\n for (let i = 0; i < n; i++) {\n const a = steps[i](s)\n if (a === Fail) return Fail\n if (i === output) out = a\n }\n return out\n }\n }\n const [i0, i1] = output\n return (s) => {\n let x: unknown\n let y: unknown\n for (let i = 0; i < n; i++) {\n const a = steps[i](s)\n if (a === Fail) return Fail\n if (i === i0) x = a\n else if (i === i1) y = a\n }\n return [x, y]\n }\n }\n\n /** The unit at the cursor, or -1 at the end of the input. */\n private unitReader(): (s: State<any>) => number {\n return this.kind === 0\n ? (s: State<string>) => (s.pos < s.end ? s.input.charCodeAt(s.pos) : -1)\n : (s: State<Uint8Array>) => (s.pos < s.end ? s.input[s.pos] : -1)\n }\n\n alt(node: NodeOf<\"Alt\">, used: boolean): Step {\n const steps = node.parsers.map((q) => this.compile(q, used))\n const n = steps.length\n if (n === 0) {\n return (s) => {\n s.mode = BT\n return Fail\n }\n }\n if (n === 1) return steps[0]\n const plan: AltPlan | undefined = this.kind === 2 ? undefined : planAlt(node.parsers.map((q) => this.firsts.of(q)))\n if (plan === undefined) {\n return (s) => {\n const start = s.pos\n for (let i = 0; i < n; i++) {\n const a = steps[i](s)\n if (a !== Fail) return a\n if (s.mode !== BT) return Fail\n s.pos = start\n }\n s.mode = BT\n return Fail\n }\n }\n const lists = plan.lists.map((l) => l.map((i) => steps[i]))\n const { byUnit, end, high } = plan\n const unit = this.unitReader()\n const resumable = this.resumable\n return (s) => {\n // Near the end of a partial input, branches may be incomplete rather than fail\n const u = resumable && s.partial && s.pos + Margin > s.end ? -2 : unit(s)\n const candidates = u === -2 ? steps : lists[u < 0 ? end : u < TableSize ? byUnit[u] : high]\n const start = s.pos\n for (let i = 0; i < candidates.length; i++) {\n const a = candidates[i](s)\n if (a !== Fail) return a\n if (s.mode !== BT) return Fail\n s.pos = start\n }\n s.mode = BT\n return Fail\n }\n }\n\n dispatch(p: ParserLike, node: NodeOf<\"Dispatch\">, used: boolean): Step {\n const selector = this.compile(node.selector, true)\n const choose = node.choose\n const compiled = new Map<ParserLike, Step>()\n if (node.cases !== undefined) {\n for (const key of Reflect.ownKeys(node.cases)) {\n const q = node.cases[key]\n if (!compiled.has(q)) compiled.set(q, this.compile(q, used))\n }\n }\n if (node.otherwise !== undefined && !compiled.has(node.otherwise)) {\n compiled.set(node.otherwise, this.compile(node.otherwise, used))\n }\n const general: Step = (s) => {\n const start = s.pos\n const key = selector(s)\n if (key === Fail) return Fail\n const q = choose(key)\n if (q === undefined) {\n s.pos = start\n s.mode = BT\n return Fail\n }\n return (compiled.get(q) ?? q.step)(s)\n }\n if (node.cases === undefined) {\n this.note(p, node, \"the parser returned by the function of cases runs interpreted\")\n return general\n }\n // Switch on the next unit when the selector is `any` or `peek(any)`\n const top = nodeOf(node.selector)\n const peek = Predicate.isTagged(top, \"Peek\")\n const sel = peek ? nodeOf(top.self) : top\n if (!Predicate.isTagged(sel, \"Any\") || !this.native(sel.encoding)) return general\n const enc = sel.encoding\n // Units below `limit` are whole tokens, so the key is known in advance\n const limit = enc === undefined ? (this.kind === 0 ? 0xd800 : TableSize) : Math.min(fastLimit(enc), 0xd800)\n const size = Math.min(limit, TableSize)\n if (size === 0) return general\n const table: Array<Step | null> = []\n for (let u = 0; u < size; u++) {\n const key = enc === undefined && this.kind === 1 ? u : charOf(u)\n const q = choose(key)\n table.push(q === undefined ? null : (compiled.get(q) ?? q.step))\n }\n const unit = this.unitReader()\n const advance = peek ? 0 : 1\n const resumable = this.resumable\n return (s) => {\n if (resumable && s.partial && s.pos + Margin > s.end) return general(s)\n const u = unit(s)\n if (u < 0) {\n s.mode = BT\n return Fail\n }\n if (u >= size) return general(s)\n const q = table[u]\n if (q === null) {\n s.mode = BT\n return Fail\n }\n s.pos += advance\n return q(s)\n }\n }\n\n repeat(node: NodeOf<\"Repeat\"> | NodeOf<\"Fold\">, used: boolean): Step {\n const { max, min } = node\n // Bounded or not, the repetition checks progress below (#115)\n const isFold = Predicate.isTagged(node, \"Fold\")\n const cond = isFold ? node.while : undefined\n const c = this.compile(node.self, used)\n const resumable = this.resumable\n const key = new Key()\n // The accumulator: an array, the fold's value, or nothing when unused (and unneeded by `while`)\n const tracked = used || cond !== undefined\n const init: () => unknown = !tracked ? () => undefined : isFold ? node.init : () => []\n const add: (acc: any, a: unknown) => unknown = !tracked\n ? (acc) => acc\n : isFold\n ? node.f\n : (acc, a) => {\n acc.push(a)\n return acc\n }\n return (s) => {\n const entry = s.pos\n let acc: unknown\n let count = 0\n let resumed = false\n if (resumable && s.resume !== undefined) {\n // SAFETY: only this loop saves checkpoints under `key`: `{ acc, count, pos }` when it runs out, a `Done` when it completes\n const cp = Resume.take(s, key, entry) as Resume.Done | { acc: unknown; count: number; pos: number } | undefined\n if (cp instanceof Resume.Done) {\n s.pos = cp.pos\n return cp.value\n }\n if (cp !== undefined) {\n acc = cp.acc\n count = cp.count\n s.pos = cp.pos\n resumed = true\n }\n }\n if (!resumed) acc = init()\n for (; count < max; count++) {\n if (cond !== undefined && count >= min && !cond(acc)) break\n const start = s.pos\n const a = c(s)\n if (a === Fail) {\n if (s.mode === INC && s.resume !== undefined) Resume.save(s, key, entry, { acc, count, pos: start })\n if (s.mode !== BT || count < min) return Fail\n s.pos = start\n return resumed ? Resume.done(s, key, entry, true, acc) : acc\n }\n if (s.pos === start) {\n s.mode = CUT\n return Fail\n }\n acc = add(acc, a)\n }\n return resumed ? Resume.done(s, key, entry, true, acc) : acc\n }\n }\n\n /**\n * `map(self, Object.fromEntries)`, where `buildsEntries(self)`: builds the\n * object directly (see the JIT).\n */\n private entries(p: ParserLike): Step {\n const node = nodeOf(p)\n if (Predicate.isTagged(node, \"Mode\")) {\n const c = this.entries(node.self)\n const from = node.from\n const to = node.to\n return (s) => {\n const a = c(s)\n if (a === Fail && s.mode === from) s.mode = to\n return a\n }\n }\n if (Predicate.isTagged(node, \"Seq\")) {\n // SAFETY: `buildsEntries` passes through a sequence only when it keeps one output, by index\n const i = node.output as number\n const steps = node.parsers.map((q, j) => (j === i ? this.entries(q) : this.compile(q, false)))\n return (s) => {\n let out: unknown\n for (let j = 0; j < steps.length; j++) {\n const a = steps[j](s)\n if (a === Fail) return Fail\n if (j === i) out = a\n }\n return out\n }\n }\n if (Predicate.isTagged(node, \"Repeat\") || Predicate.isTagged(node, \"Separated\")) {\n const pair = pairOf(node.self)\n if (pair !== undefined) return this.entriesLoop(node, pair)\n // Not reached (`buildsEntries` found the pair): build the pairs, then the object\n const c = this.compile(p, true)\n return (s) => {\n const a = c(s)\n // SAFETY: a used `repeat` or `separated` returns the array of its elements, here the pairs\n return a === Fail ? Fail : fromEntries(a as Iterable<readonly [PropertyKey, unknown]>)\n }\n }\n // SAFETY: the other nodes `buildsEntries` passes through are diagnostics, which all wrap a `self`\n return this.entries((node as { readonly self: ParserLike }).self)\n }\n\n private entriesLoop(node: NodeOf<\"Repeat\"> | NodeOf<\"Separated\">, pair: EntryPair): Step {\n const parts = pair.parsers.map((q, j) => this.compile(q, j === pair.key || j === pair.value))\n const { key: ki, value: vi } = pair\n // Parses an entry and adds it to `acc`\n const entry = (s: State<any>, acc: EntriesAcc): boolean => {\n let key: unknown\n let value: unknown\n for (let j = 0; j < parts.length; j++) {\n const a = parts[j](s)\n if (a === Fail) return false\n if (j === ki) key = a\n else if (j === vi) value = a\n }\n acc.add(key, value)\n return true\n }\n const { max, min } = node\n // Bounded or not, the repetition checks progress below (#115)\n // A streaming build's checkpoint holds the object built so far (see `repeat`)\n const resumable = this.resumable\n const site = new Key()\n if (Predicate.isTagged(node, \"Repeat\")) {\n return (s) => {\n const at = s.pos\n const cp = resumable && s.resume !== undefined ? resumeEntries(s, site, at) : undefined\n if (cp instanceof Resume.Done) return cp.value\n const resumed = cp !== undefined\n const acc = cp?.acc ?? new EntriesAcc()\n for (let count = cp?.count ?? 0; count < max; count++) {\n const start = s.pos\n let key: unknown\n let value: unknown\n let ok = true\n for (let j = 0; j < parts.length; j++) {\n const a = parts[j](s)\n if (a === Fail) {\n ok = false\n break\n }\n if (j === ki) key = a\n else if (j === vi) value = a\n }\n if (!ok) {\n return stopEntries(s, site, at, resumed, acc, count, start, min)\n }\n if (s.pos === start) {\n s.mode = CUT\n return Fail\n }\n acc.add(key, value)\n }\n return entriesDone(s, site, at, resumed, acc)\n }\n }\n const sep = this.compile(node.separator, false)\n return (s) => {\n const at = s.pos\n const cp = resumable && s.resume !== undefined ? resumeEntries(s, site, at) : undefined\n if (cp instanceof Resume.Done) return cp.value\n const resumed = cp !== undefined\n const acc = cp?.acc ?? new EntriesAcc()\n let count = cp?.count ?? 0\n if (!resumed) {\n if (max === 0) return acc.result()\n const start = s.pos\n if (!entry(s, acc)) {\n if (s.mode !== BT || min > 0) return Fail\n s.pos = start\n return acc.result()\n }\n count++\n }\n while (count < max) {\n const start = s.pos\n if (sep(s) === Fail) {\n return stopEntries(s, site, at, resumed, acc, count, start, min)\n }\n if (s.pos === start) {\n s.mode = CUT\n return Fail\n }\n if (!entry(s, acc)) {\n return stopEntries(s, site, at, resumed, acc, count, start, min)\n }\n count++\n }\n return entriesDone(s, site, at, resumed, acc)\n }\n }\n\n repeatTill(node: NodeOf<\"RepeatTill\">): Step {\n const { max, min } = node\n const c = this.compile(node.self, true)\n const end = this.compile(node.end, true)\n return (s) => {\n const acc: Array<unknown> = []\n while (true) {\n const start = s.pos\n if (acc.length >= min) {\n const b = end(s)\n if (b !== Fail) return [acc, b]\n if (s.mode !== BT) return Fail\n s.pos = start\n if (acc.length >= max) return Fail\n }\n const a = c(s)\n if (a === Fail) return Fail\n if (s.pos === start) {\n s.mode = CUT\n return Fail\n }\n acc.push(a)\n }\n }\n }\n\n separated(node: NodeOf<\"Separated\">, used: boolean): Step {\n const { max, min } = node\n // Bounded or not, the repetition checks progress below (#115)\n const c = this.compile(node.self, used)\n const sep = this.compile(node.separator, false)\n const resumable = this.resumable\n const key = new Key()\n return (s) => {\n const entry = s.pos\n let acc: Array<unknown> | undefined\n let count = 0\n let resumed = false\n if (resumable && s.resume !== undefined) {\n // SAFETY: only this loop saves checkpoints under `key`: `{ acc, count, pos }` when it runs out, a `Done` when it completes\n const cp = Resume.take(s, key, entry) as\n | Resume.Done\n | { acc: Array<unknown>; count: number; pos: number }\n | undefined\n if (cp instanceof Resume.Done) {\n s.pos = cp.pos\n return cp.value\n }\n if (cp !== undefined) {\n acc = cp.acc\n count = cp.count\n s.pos = cp.pos\n resumed = true\n }\n }\n if (!resumed) {\n acc = used ? [] : undefined\n if (max === 0) return acc\n const start = s.pos\n const first = c(s)\n if (first === Fail) {\n if (s.mode !== BT || min > 0) return Fail\n s.pos = start\n return acc\n }\n acc?.push(first)\n count = 1\n }\n while (count < max) {\n const start = s.pos\n if (sep(s) === Fail) {\n if (s.mode === INC && s.resume !== undefined) Resume.save(s, key, entry, { acc, count, pos: start })\n if (s.mode !== BT || count < min) return Fail\n s.pos = start\n return resumed ? Resume.done(s, key, entry, true, acc) : acc\n }\n if (s.pos === start) {\n s.mode = CUT\n return Fail\n }\n const a = c(s)\n if (a === Fail) {\n if (s.mode === INC && s.resume !== undefined) Resume.save(s, key, entry, { acc, count, pos: start })\n if (s.mode !== BT || count < min) return Fail\n s.pos = start\n return resumed ? Resume.done(s, key, entry, true, acc) : acc\n }\n acc?.push(a)\n count++\n }\n return resumed ? Resume.done(s, key, entry, true, acc) : acc\n }\n }\n\n separatedFold(node: NodeOf<\"SeparatedFold\">): Step {\n const c = this.compile(node.self, true)\n const sep = this.compile(node.separator, true)\n const op = node.op\n const resumable = this.resumable\n const key = new Key()\n if (!node.right) {\n return (s) => {\n const entry = s.pos\n let acc: unknown\n let resumed = false\n if (resumable && s.resume !== undefined) {\n // SAFETY: only this loop saves checkpoints under `key`: `{ acc, pos }` when it runs out, a `Done` when it completes\n const cp = Resume.take(s, key, entry) as Resume.Done | { acc: unknown; pos: number } | undefined\n if (cp instanceof Resume.Done) {\n s.pos = cp.pos\n return cp.value\n }\n if (cp !== undefined) {\n acc = cp.acc\n s.pos = cp.pos\n resumed = true\n }\n }\n if (!resumed) {\n acc = c(s)\n if (acc === Fail) return Fail\n }\n while (true) {\n const start = s.pos\n const x = sep(s)\n if (x === Fail) {\n if (s.mode === INC && s.resume !== undefined) Resume.save(s, key, entry, { acc, pos: start })\n if (s.mode !== BT) return Fail\n s.pos = start\n return resumed ? Resume.done(s, key, entry, true, acc) : acc\n }\n if (s.pos === start) {\n s.mode = CUT\n return Fail\n }\n const a = c(s)\n if (a === Fail) {\n if (s.mode === INC && s.resume !== undefined) Resume.save(s, key, entry, { acc, pos: start })\n if (s.mode !== BT) return Fail\n s.pos = start\n return resumed ? Resume.done(s, key, entry, true, acc) : acc\n }\n acc = op(acc, x, a)\n }\n }\n }\n return (s) => {\n const first = c(s)\n if (first === Fail) return Fail\n const values: Array<unknown> = [first]\n const seps: Array<unknown> = []\n while (true) {\n const start = s.pos\n const x = sep(s)\n if (x === Fail) {\n if (s.mode !== BT) return Fail\n s.pos = start\n break\n }\n if (s.pos === start) {\n s.mode = CUT\n return Fail\n }\n const a = c(s)\n if (a === Fail) {\n if (s.mode !== BT) return Fail\n s.pos = start\n break\n }\n seps.push(x)\n values.push(a)\n }\n let acc = values[values.length - 1]\n for (let i = seps.length - 1; i >= 0; i--) acc = op(values[i], seps[i], acc)\n return acc\n }\n }\n\n // ---------------------------------------------------------------------------\n // Token parsers (`Token`, `Ascii`)\n // ---------------------------------------------------------------------------\n\n token(p: ParserLike, node: TokenNode, used: boolean): Step {\n // SAFETY: `build` compiles a token node without an encoding only when `native` holds, that is when `kind` is not 2\n const kind = this.kind as 0 | 1\n switch (node._tag) {\n case \"Any\":\n if (kind === 1) {\n return (s: State<Uint8Array>) => {\n const pos = s.pos\n if (pos >= s.end) return fail(s)\n s.pos = pos + 1\n return s.input[pos]\n }\n }\n return (s) => {\n const pos = s.pos\n if (pos >= s.end) return fail(s)\n const str: string = s.input\n const c = str.charCodeAt(pos)\n if (c >= 0xd800 && c <= 0xdbff && pos + 1 < str.length && (str.charCodeAt(pos + 1) & 0xfc00) === 0xdc00) {\n s.pos = pos + 2\n return used ? str.slice(pos, pos + 2) : undefined\n }\n s.pos = pos + 1\n return used ? str[pos] : undefined\n }\n case \"Literal\":\n return this.tokenLiteral(p, node)\n case \"OneOf\": {\n const set = tokenSet(node.set, kind)\n const negate = node.negate\n const accept = acceptTable(set, negate)\n const test = set.test\n if (kind === 1) {\n return (s: State<Uint8Array>) => {\n const pos = s.pos\n if (pos >= s.end) return fail(s)\n const b = s.input[pos]\n if (accept[b] === 0) return fail(s)\n s.pos = pos + 1\n return b\n }\n }\n return (s) => {\n const pos = s.pos\n if (pos >= s.end) return fail(s)\n const str: string = s.input\n const c = str.charCodeAt(pos)\n if (c < TableSize) {\n if (accept[c] === 0) return fail(s)\n s.pos = pos + 1\n return used ? str[pos] : undefined\n }\n let cp = c\n if (c >= 0xd800 && c <= 0xdbff && pos + 1 < str.length) {\n const d = str.charCodeAt(pos + 1)\n if ((d & 0xfc00) === 0xdc00) cp = ((c - 0xd800) << 10) + (d - 0xdc00) + 0x10000\n }\n if (test(cp) === negate) return fail(s)\n const len = cp > 0xffff ? 2 : 1\n s.pos = pos + len\n return !used ? undefined : len === 1 ? str[pos] : str.slice(pos, pos + 2)\n }\n }\n case \"Take\": {\n const count = node.count\n if (kind === 1) {\n return (s: State<Uint8Array>) => {\n const start = s.pos\n if (s.end - start < count) return failAt(s, s.end)\n s.pos = start + count\n return used ? s.input.subarray(start, start + count) : undefined\n }\n }\n return (s) => {\n const str: string = s.input\n const start = s.pos\n const end = s.end\n let i = start\n let got = 0\n while (got < count && i < end) {\n const c = str.charCodeAt(i)\n i += c >= 0xd800 && c <= 0xdbff && i + 1 < str.length && (str.charCodeAt(i + 1) & 0xfc00) === 0xdc00 ? 2 : 1\n got++\n }\n if (got < count) return failAt(s, i)\n s.pos = i\n return used ? str.slice(start, i) : undefined\n }\n }\n case \"TakeWhile\":\n return this.tokenTakeWhile(node, used)\n case \"TakeUntil\":\n case \"TakeUntilAny\": {\n const { max, min } = node\n const bounded = min > 0 || max !== Infinity\n const search: (s: State<Input>, from: number) => number = Predicate.isTagged(node, \"TakeUntil\")\n ? (s, from) => indexOf(s, node.literal, from)\n : (s, from) => indexOfAny(s, node.literals, from)\n return (s) => {\n const start = s.pos\n const idx = search(s, start)\n if (idx < 0) return failAt(s, s.end)\n if (bounded) {\n const count = countTokens(s, start, idx)\n if (count < min || count > max) return failAt(s, idx)\n }\n s.pos = idx\n return used ? s.slice(start, idx) : undefined\n }\n }\n case \"Rest\":\n return (s) => {\n const start = s.pos\n s.pos = s.end\n return used ? s.slice(start, s.end) : undefined\n }\n }\n }\n\n tokenLiteral(p: ParserLike, node: NodeOf<\"Literal\">): Step {\n const lit = node.literal\n const literalKind = Predicate.isString(lit) ? 0 : lit instanceof Uint8Array ? 1 : 2\n if (this.kind === 0) {\n if (!Predicate.isString(lit)) return this.fallback(p, node, \"byte or array literal on string input\")\n const str = lit\n const len = str.length\n if (node.caseless) {\n const lowered = Array.from({ length: len }, (_, i) => lowerAscii(str.charCodeAt(i)))\n return (s) => {\n const pos = s.pos\n if (s.end - pos < len) return fail(s)\n const input: string = s.input\n for (let i = 0; i < len; i++) {\n if (lowerAscii(input.charCodeAt(pos + i)) !== lowered[i]) return fail(s)\n }\n s.pos = pos + len\n return input.slice(pos, pos + len)\n }\n }\n return stringLiteral(str, str)\n }\n const bytes = Predicate.isString(lit) ? new TextEncoder().encode(lit) : lit instanceof Uint8Array ? lit : undefined\n if (bytes === undefined) return this.fallback(p, node, \"array literal on byte input\")\n const len = bytes.length\n const sameKind = literalKind === 1 && !node.caseless\n const expect = node.caseless ? Array.from(bytes, lowerAscii) : Array.from(bytes)\n const caseless = node.caseless\n return (s) => {\n const pos = s.pos\n if (s.end - pos < len) return fail(s)\n const input: Uint8Array = s.input\n for (let i = 0; i < len; i++) {\n const b = input[pos + i]\n if ((caseless ? lowerAscii(b) : b) !== expect[i]) return fail(s)\n }\n s.pos = pos + len\n return sameKind ? lit : input.subarray(pos, pos + len)\n }\n }\n\n tokenTakeWhile(node: NodeOf<\"TakeWhile\">, used: boolean): Step {\n // SAFETY: called from `token` only, whose `kind` is not 2\n const kind = this.kind as 0 | 1\n const { max, min, negate } = node\n const set = tokenSet(node.set, kind)\n const accept = acceptTable(set, negate)\n if (kind === 1) {\n return (s) => {\n const bytes: Uint8Array = s.input\n const start = s.pos\n const limit = max === Infinity ? s.end : Math.min(s.end, start + max)\n let i = start\n while (i < limit && accept[bytes[i]] === 1) i++\n if (i - start < min) return failAt(s, i)\n s.pos = i\n return used ? bytes.subarray(start, i) : undefined\n }\n }\n const stops = negate && min <= 1 && max === Infinity ? stopChars(set) : undefined\n if (stops !== undefined) return stopTakeTill(stops, min, used)\n const test = set.test\n return (s) => {\n const str: string = s.input\n const start = s.pos\n const end = s.end\n let i = start\n let count = 0\n while (count < max && i < end) {\n const c = str.charCodeAt(i)\n if (c < TableSize) {\n if (accept[c] === 0) break\n i++\n } else if (c < 0xd800 || c > 0xdbff) {\n if (test(c) === negate) break\n i++\n } else {\n let cp = c\n if (i + 1 < str.length) {\n const d = str.charCodeAt(i + 1)\n if ((d & 0xfc00) === 0xdc00) cp = ((c - 0xd800) << 10) + (d - 0xdc00) + 0x10000\n }\n if (test(cp) === negate) break\n i += cp > 0xffff ? 2 : 1\n }\n count++\n }\n if (count < min) return failAt(s, i)\n s.pos = i\n return used ? str.slice(start, i) : undefined\n }\n }\n\n // ---------------------------------------------------------------------------\n // Text parsers, specialized per encoding\n // ---------------------------------------------------------------------------\n\n text(p: ParserLike, node: TokenNode, enc: Encoding<any>, used: boolean): Step {\n const { fast, unitAt, width: unitWidth } = unitReader(this.kind, enc)\n const decode = enc.decode\n const width = enc.width\n // UTF-8 decodes through the state's ASCII run (see `utf8Text`)\n const toText: (s: State<any>, start: number, end: number) => string =\n enc === utf8 ? utf8Text : (s, start, end) => enc.text(s.input, start, end)\n switch (node._tag) {\n case \"Any\":\n return (s) => {\n const pos = s.pos\n const end = s.end\n if (pos >= end) return fail(s)\n const c = unitAt(s.input, pos, end)\n if (c < fast) {\n s.pos = pos + unitWidth\n return used ? charOf(c) : undefined\n }\n const cp = decode(s.input, pos, end)\n if (cp < 0) return fail(s)\n s.pos = pos + width(cp)\n return used ? charOf(cp) : undefined\n }\n case \"Literal\": {\n // SAFETY: a `Literal` with an encoding is a `Text` literal, which records the string it encodes\n const lit = node.literal as string\n if (node.caseless) {\n const folded = Array.from(lit, (c) => fold(firstCodePoint(c)))\n const n = folded.length\n return (s) => {\n const start = s.pos\n const end = s.end\n const input = s.input\n let pos = start\n for (let i = 0; i < n; i++) {\n if (pos >= end) return failAt(s, pos)\n const c = unitAt(input, pos, end)\n let cp: number\n if (c < fast) {\n cp = c\n pos += unitWidth\n } else {\n cp = decode(input, pos, end)\n if (cp < 0) return failAt(s, pos)\n pos += width(cp)\n }\n if (fold(cp) !== folded[i]) return failAt(s, pos)\n }\n s.pos = pos\n return used ? toText(s, start, pos) : undefined\n }\n }\n const encoded = enc.encode(lit)\n if (Predicate.isString(encoded)) return stringLiteral(encoded, lit)\n const bytes: Uint8Array = encoded\n const len = bytes.length\n if (len === 1) {\n const b0 = bytes[0]\n return (s: State<Uint8Array>) => {\n const pos = s.pos\n if (pos < s.end && s.input[pos] === b0) {\n s.pos = pos + 1\n return lit\n }\n return fail(s)\n }\n }\n return (s) => {\n const pos = s.pos\n if (s.end - pos < len) return fail(s)\n const input: Uint8Array = s.input\n for (let i = 0; i < len; i++) if (input[pos + i] !== bytes[i]) return fail(s)\n s.pos = pos + len\n return lit\n }\n }\n case \"OneOf\": {\n const set = textSet(node.set)\n const negate = node.negate\n const accept = acceptTable(set, negate)\n const test = set.test\n return (s) => {\n const pos = s.pos\n const end = s.end\n if (pos >= end) return fail(s)\n const c = unitAt(s.input, pos, end)\n if (c < fast && c < TableSize) {\n if (accept[c] === 0) return fail(s)\n s.pos = pos + unitWidth\n return used ? charOf(c) : undefined\n }\n const cp = c < fast ? c : decode(s.input, pos, end)\n if (cp < 0 || test(cp) === negate) return fail(s)\n s.pos = pos + (c < fast ? unitWidth : width(cp))\n return used ? charOf(cp) : undefined\n }\n }\n case \"Take\": {\n const count = node.count\n return (s) => {\n const start = s.pos\n const end = s.end\n const input = s.input\n let pos = start\n for (let got = 0; got < count; got++) {\n if (pos >= end) return failAt(s, pos)\n const c = unitAt(input, pos, end)\n if (c < fast) pos += unitWidth\n else {\n const cp = decode(input, pos, end)\n if (cp < 0) return failAt(s, pos)\n pos += width(cp)\n }\n }\n s.pos = pos\n return used ? toText(s, start, pos) : undefined\n }\n }\n case \"TakeWhile\": {\n const { max, min, negate } = node\n const set = textSet(node.set)\n const accept = acceptTable(set, negate)\n const test = set.test\n const loop: TextLoop = { max, min, negate, accept, test, small: Math.min(fast, TableSize), fast, used }\n // One function per kind of unit read, from its own source: a loop\n // shared by every encoding sees several readers once a program\n // parses more than one, and stops inlining them\n if (unitWidth === 2) return takeWhileUtf16(loop, enc === utf16le ? 0 : 1, enc)\n return this.kind === 0 ? takeWhileString(loop, enc) : takeWhileBytes(loop, enc)\n }\n case \"TakeUntil\":\n case \"TakeUntilAny\":\n case \"Rest\":\n return this.fallback(p, node, \"Text parser without a compiled form\")\n }\n }\n\n taken(node: NodeOf<\"Taken\">, used: boolean): Step {\n const c = this.compile(node.self, false)\n const enc = node.encoding\n if (enc === undefined) {\n if (!used) return c\n if (this.kind === 0) {\n return (s: State<string>) => {\n const start = s.pos\n return c(s) === Fail ? Fail : s.input.slice(start, s.pos)\n }\n }\n return (s) => {\n const start = s.pos\n return c(s) === Fail ? Fail : s.slice(start, s.pos)\n }\n }\n // `Text.taken` checks that the text is well formed, then decodes it\n const { fast, unitAt, width } = unitReader(this.kind, enc)\n // UTF-8 decodes through the state's ASCII run (see `utf8Text`)\n const toText: (s: State<any>, start: number, end: number) => string =\n enc === utf8 ? utf8Text : (s, start, end) => enc.text(s.input, start, end)\n return (s) => {\n const start = s.pos\n if (c(s) === Fail) return Fail\n const end = s.pos\n const input = s.input\n let i = start\n while (i < end && unitAt(input, i, end) < fast) i += width\n if (i < end && validate(enc, s, i, end) < 0) return fail(s)\n return used ? toText(s, start, end) : undefined\n }\n }\n\n /**\n * `Ascii.float` and `Text.float` (`map(floatText, toFloat)`): numbers in\n * decimal notation are matched and converted in one pass, without\n * slicing the input; the rest runs the compiled parser (see the JIT).\n */\n private float(node: NodeOf<\"Map\">): Step | undefined {\n if (!floatTexts.has(node.self) || this.kind === 2) return undefined\n if (!scansFloat(node.self, (enc) => this.native(enc))) return undefined\n const c = this.compile(node.self, true)\n const scan = this.kind === 0 ? scanFloatString : scanFloatBytes\n const resumable = this.resumable\n return (s) => {\n const v = scan(s.input, s.pos, s.end)\n // Near the end of a partial input, the parser may have to report `Incomplete`\n if (v === undefined || (resumable && s.partial && floatScan.read + Margin > s.end)) {\n const t = c(s)\n return t === Fail ? Fail : toFloat(t)\n }\n if (v === Fail) return fail(s)\n s.pos = floatScan.end\n return v\n }\n }\n\n escaped(node: NodeOf<\"Escaped\">): Step {\n const raw = node.raw\n const normal = this.compile(node.normal, !raw)\n const escape = this.compile(node.escape, !raw)\n const enc = node.encoding\n const ctrl = node.control\n const kind = this.kind\n // Matches the control character, advancing past it\n let control: (s: State<any>) => boolean\n if (enc === undefined || (ctrl < fastLimit(enc) && ctrl < TableSize)) {\n control =\n kind === 0\n ? (s: State<string>) => {\n if (s.pos < s.end && s.input.charCodeAt(s.pos) === ctrl) {\n s.pos++\n return true\n }\n return false\n }\n : (s: State<Uint8Array>) => {\n if (s.pos < s.end && s.input[s.pos] === ctrl) {\n s.pos++\n return true\n }\n return false\n }\n } else if (ctrl < unitReader(kind, enc).fast) {\n const { unitAt, width } = unitReader(kind, enc)\n control = (s) => {\n if (s.pos < s.end && unitAt(s.input, s.pos, s.end) === ctrl) {\n s.pos += width\n return true\n }\n return false\n }\n } else {\n control = (s) => {\n if (s.pos >= s.end) return false\n const cp = enc.decode(s.input, s.pos, s.end)\n if (cp !== ctrl) return false\n s.pos += enc.width(cp)\n return true\n }\n }\n const resumable = this.resumable\n const key = new Key()\n /** Fails as incomplete, keeping a checkpoint in a streaming parse. */\n const incomplete = (s: State<any>, start: number, checkpoint: EscapedCheckpoint): typeof Fail => {\n if (s.resume !== undefined) Resume.save(s, key, start, checkpoint)\n s.mode = INC\n return Fail\n }\n if (raw) {\n const slice: (s: State<any>, start: number) => Input =\n enc === undefined ? (s, start) => s.slice(start, s.pos) : (s, start) => textIn(enc, s, start, s.pos)\n return (s) => {\n const start = s.pos\n let resumed = false\n if (resumable && s.resume !== undefined) {\n // SAFETY: only this raw loop saves checkpoints under `key`: the position it stopped at, or a `Done` when it completes\n const cp = Resume.take(s, key, start) as Resume.Done | Extract<EscapedCheckpoint, number> | undefined\n if (cp instanceof Resume.Done) {\n s.pos = cp.pos\n return cp.value\n }\n if (cp !== undefined) {\n s.pos = cp\n resumed = true\n }\n }\n while (s.pos < s.end) {\n const before = s.pos\n if (normal(s) !== Fail) {\n if (s.pos === before) {\n s.mode = CUT\n return Fail\n }\n continue\n }\n if (s.mode === INC) return incomplete(s, start, before)\n if (s.mode !== BT) return Fail\n s.pos = before\n if (control(s)) {\n if (escape(s) === Fail) return s.mode === INC ? incomplete(s, start, before) : Fail\n } else {\n return resumed ? Resume.done(s, key, start, true, slice(s, start)) : slice(s, start)\n }\n }\n if (s.partial) {\n // The text ran out of input: `escaped`'s own failure, needing more\n s.incomplete(0)\n return incomplete(s, start, s.pos)\n }\n return resumed ? Resume.done(s, key, start, true, slice(s, start)) : slice(s, start)\n }\n }\n return (s) => {\n const start = s.pos\n let out = \"\"\n let resumed = false\n if (resumable && s.resume !== undefined) {\n // SAFETY: only this loop saves checkpoints under `key`: `{ out, pos }` when it runs out, a `Done` when it completes\n const cp = Resume.take(s, key, start) as Resume.Done | Exclude<EscapedCheckpoint, number> | undefined\n if (cp instanceof Resume.Done) {\n s.pos = cp.pos\n return cp.value\n }\n if (cp !== undefined) {\n out = cp.out\n s.pos = cp.pos\n resumed = true\n }\n }\n while (s.pos < s.end) {\n const before = s.pos\n const a = normal(s)\n if (a !== Fail) {\n if (s.pos !== before) {\n out += a\n continue\n }\n } else {\n if (s.mode === INC) return incomplete(s, start, { out, pos: before })\n if (s.mode !== BT) return Fail\n s.pos = before\n }\n if (control(s)) {\n const b = escape(s)\n if (b === Fail) return s.mode === INC ? incomplete(s, start, { out, pos: before }) : Fail\n out += b\n } else {\n return resumed ? Resume.done(s, key, start, true, out) : out\n }\n }\n if (s.partial) {\n // The text ran out of input: `escaped`'s own failure, needing more\n s.incomplete(0)\n return incomplete(s, start, { out, pos: s.pos })\n }\n return resumed ? Resume.done(s, key, start, true, out) : out\n }\n }\n}\n\n/** How far past the cursor a token parser may read: its literals' length in UTF-8 at most, or `Margin`. */\nconst marginOf = (node: TokenNode): number => {\n if (Predicate.isTagged(node, \"Literal\") || Predicate.isTagged(node, \"TakeUntil\")) return node.literal.length * 4\n if (Predicate.isTagged(node, \"TakeUntilAny\")) return Math.max(0, ...node.literals.map((lit) => lit.length)) * 4\n return Margin\n}\n\ntype TokenNode = NodeOf<\"Any\" | \"Literal\" | \"OneOf\" | \"Take\" | \"TakeWhile\" | \"TakeUntil\" | \"TakeUntilAny\" | \"Rest\">\n\n/**\n * Where a compiled `escaped` that ran out of input resumes: the position\n * (`takeEscaped`, which slices the input), or the text unescaped so far and\n * the position after it.\n */\ntype EscapedCheckpoint = number | { readonly out: string; readonly pos: number }\n\nconst fail = (s: State<any>): typeof Fail => {\n s.mode = BT\n return Fail\n}\n\n/** Fails, leaving the cursor at `pos`: how far a token parser read (see `partialSafe`). */\n/** The settings of a compiled `Text` `takeWhile` loop. */\ninterface TextLoop {\n readonly max: number\n readonly min: number\n readonly negate: boolean\n /** 1 where a code below `small` is accepted (see `acceptTable`). */\n readonly accept: Uint8Array\n readonly test: (code: number) => boolean\n readonly small: number\n /** Units below it are whole code points. */\n readonly fast: number\n readonly used: boolean\n}\n\n// `takeWhile` for each kind of unit read. The three loops differ only in\n// how they read a unit; they are written out because a single loop calling\n// a reader, or branching on one, measured slower (see `text`).\n\nconst takeWhileString = (loop: TextLoop, enc: Encoding<string>): Step => {\n const { accept, fast, max, min, negate, small, test, used } = loop\n const { decode, text, width } = enc\n return (s) => {\n const input: string = s.input\n const start = s.pos\n const end = s.end\n let i = start\n let count = 0\n while (count < max && i < end) {\n const c = input.charCodeAt(i)\n if (c < small) {\n if (accept[c] === 0) break\n i++\n } else if (c < fast) {\n if (test(c) === negate) break\n i++\n } else {\n const cp = decode(input, i, end)\n if (cp < 0 || test(cp) === negate) break\n i += width(cp)\n }\n count++\n }\n if (count < min) return failAt(s, i)\n s.pos = i\n return used ? text(input, start, i) : undefined\n }\n}\n\nconst takeWhileBytes = (loop: TextLoop, enc: Encoding<Uint8Array>): Step => {\n const { accept, max, min, negate, small, test, used } = loop\n const { decode, text, width } = enc\n return (s) => {\n const input: Uint8Array = s.input\n const start = s.pos\n const end = s.end\n let i = start\n let count = 0\n while (count < max && i < end) {\n const c = input[i]\n // A byte below `fast` is below `small` too, as `small` is `fast` or the table size\n if (c < small) {\n if (accept[c] === 0) break\n i++\n } else {\n const cp = decode(input, i, end)\n if (cp < 0 || test(cp) === negate) break\n i += width(cp)\n }\n count++\n }\n if (count < min) return failAt(s, i)\n s.pos = i\n return used ? text(input, start, i) : undefined\n }\n}\n\n/** For UTF-16 bytes; `lo` is the offset of a unit's low byte (0 for little endian). */\nconst takeWhileUtf16 = (loop: TextLoop, lo: 0 | 1, enc: Encoding<Uint8Array>): Step => {\n const { accept, fast, max, min, negate, small, test, used } = loop\n const { decode, text, width } = enc\n const hi = 1 - lo\n return (s) => {\n const input: Uint8Array = s.input\n const start = s.pos\n const end = s.end\n let i = start\n let count = 0\n while (count < max && i < end) {\n // A unit cut off by `end` reads as 0xFFFF, so `decode` reports it\n const c = i + 1 < end ? input[i + lo] | (input[i + hi] << 8) : 0xffff\n if (c < fast ? (c < small ? accept[c] === 0 : test(c) === negate) : false) break\n if (c < fast) i += 2\n else {\n const cp = decode(input, i, end)\n if (cp < 0 || test(cp) === negate) break\n i += width(cp)\n }\n count++\n }\n if (count < min) return failAt(s, i)\n s.pos = i\n return used ? text(input, start, i) : undefined\n }\n}\n\n/**\n * How a `Text` parser reads its encoding's code units: a unit below `fast`\n * is a whole code point, `width` input units long. UTF-16 bytes get a unit\n * reader, as in the JIT; a unit cut off by `end` reads as 0xFFFF, so it\n * takes the `decode` path, which reports it truncated.\n */\ninterface UnitReader {\n readonly width: 1 | 2\n readonly fast: number\n readonly unitAt: (input: any, i: number, end: number) => number\n}\n\nconst unitReader = (kind: 0 | 1 | 2, enc: Encoding<any>): UnitReader => {\n if (kind === 1 && (enc === utf16le || enc === utf16be)) {\n return {\n width: 2,\n fast: 0xd800,\n unitAt:\n enc === utf16le\n ? (input: Uint8Array, i, end) => (i + 1 < end ? input[i] | (input[i + 1] << 8) : 0xffff)\n : (input: Uint8Array, i, end) => (i + 1 < end ? (input[i] << 8) | input[i + 1] : 0xffff)\n }\n }\n // `end` is declared though unused: calls with more arguments than\n // parameters measured 1-2% slower on the JSON benchmark\n return {\n width: 1,\n fast: fastLimit(enc),\n unitAt: kind === 0 ? (input: string, i, _end) => input.charCodeAt(i) : (input: Uint8Array, i, _end) => input[i]\n }\n}\n\nconst failAt = (s: State<any>, pos: number): typeof Fail => {\n s.pos = pos\n s.mode = BT\n return Fail\n}\n\n/** A literal matched against a string input, returning `value`. */\nconst stringLiteral = (str: string, value: unknown): Step => {\n const len = str.length\n if (len === 0) return () => value\n if (len === 1) {\n const c0 = str.charCodeAt(0)\n return (s: State<string>) => {\n const pos = s.pos\n if (pos < s.end && s.input.charCodeAt(pos) === c0) {\n s.pos = pos + 1\n return value\n }\n return fail(s)\n }\n }\n return (s: State<string>) => {\n const pos = s.pos\n if (s.end - pos >= len && s.input.startsWith(str, pos)) {\n s.pos = pos + len\n return value\n }\n return fail(s)\n }\n}\n\n/**\n * `Token.takeTill` on a string, of one to three stop characters that are\n * whole code points (see `search.ts`): every other unit, surrogates\n * included, is accepted, so the run ends at the first stop character, or\n * at the state's end.\n */\nconst stopTakeTill = (stops: ReadonlyArray<number>, min: number, used: boolean): Step => {\n const head = stops.length === 1 ? SearchHead : 2 * SearchHead\n const c0 = stops[0]\n const c1 = stops.length > 1 ? stops[1] : -1\n const c2 = stops.length > 2 ? stops[2] : -1\n const one = String.fromCharCode(c0)\n const site = new StopCache(stops.map((u) => String.fromCharCode(u)))\n return (s: State<string>) => {\n const str = s.input\n const start = s.pos\n const end = s.end\n const h = start + head < end ? start + head : end\n let i = start\n let c = -1\n while (i < h && (c = str.charCodeAt(i)) !== c0 && c !== c1 && c !== c2) i++\n // A run that ends right after the head needs no search\n if (i === h && i < end && (c = str.charCodeAt(i)) !== c0 && c !== c1 && c !== c2) {\n if (stops.length === 1) {\n const at = str.indexOf(one, i)\n i = at < 0 || at > end ? end : at\n } else i = nextStop(site, s, i)\n }\n if (i - start < min) return failAt(s, i)\n s.pos = i\n return used ? str.slice(start, i) : undefined\n }\n}\n\n/** A checkpoint of `entriesLoop`: the object so far, the entries parsed and where the next one starts. */\ninterface EntriesCheckpoint {\n readonly acc: EntriesAcc\n readonly count: number\n readonly pos: number\n}\n\n/** Takes the checkpoint `entriesLoop` saved at `at`, restoring the position of a completed one. */\nconst resumeEntries = (s: State<any>, key: Key, at: number): Resume.Done | EntriesCheckpoint | undefined => {\n // SAFETY: only `entriesLoop` saves checkpoints under its `key`: an `EntriesCheckpoint` when it runs out, a `Done` when it completes\n const cp = Resume.take(s, key, at) as Resume.Done | EntriesCheckpoint | undefined\n if (cp instanceof Resume.Done) s.pos = cp.pos\n else if (cp !== undefined) s.pos = cp.pos\n return cp\n}\n\n/** The object `entriesLoop` built, recorded as done when the loop resumed. */\nconst entriesDone = (s: State<any>, key: Key, at: number, resumed: boolean, acc: EntriesAcc): object =>\n resumed ? Resume.done(s, key, at, true, acc.result()) : acc.result()\n\n/**\n * Where `entriesLoop` stops at an entry (or separator) that failed at\n * `start`: a checkpoint when the input ran out, `Fail` unless the failure\n * backtracks after `min` entries, otherwise the object.\n */\nconst stopEntries = (\n s: State<any>,\n site: Key,\n at: number,\n resumed: boolean,\n acc: EntriesAcc,\n count: number,\n start: number,\n min: number\n): object | typeof Fail => {\n if (s.mode === INC && s.resume !== undefined) Resume.save(s, site, at, { acc, count, pos: start })\n if (s.mode !== BT || count < min) return Fail\n s.pos = start\n return entriesDone(s, site, at, resumed, acc)\n}\n\n/** The object of `Object.fromEntries`, built an entry at a time (see `internal/entries.ts`). */\nclass EntriesAcc {\n readonly o: Record<string, unknown> = {}\n deferred: Array<unknown> | undefined = undefined\n add(key: unknown, value: unknown): void {\n if (this.deferred === undefined && isPlainKey(key)) this.o[key] = value\n else this.deferred = addEntry(this.o, this.deferred, key, value)\n }\n result(): object {\n if (this.deferred !== undefined) flushEntries(this.o, this.deferred)\n return this.o\n }\n}\n\nexport interface ClosureCompiler {\n readonly compile: (p: ParserLike, used: boolean) => Step\n readonly note: (p: ParserLike, node: Node, reason: string) => void\n readonly firsts: FirstSets\n readonly fallbacks: ReadonlyArray<Fallback>\n}\n\nexport const createClosureCompiler = (kind: 0 | 1 | 2, resumable = false): ClosureCompiler => {\n const compiler = new Compiler(kind, resumable)\n return {\n compile: (p, used) => compiler.compile(p, used),\n note: (p, node, reason) => compiler.note(p, node, reason),\n firsts: compiler.firsts,\n fallbacks: compiler.fallbacks\n }\n}\n\n/** A compiled root parser, with the parts of it that run interpreted. */\nexport interface CompiledRoot {\n readonly step: Step\n readonly fallbacks: ReadonlyArray<Fallback>\n}\n\n/** Compiles a root parser for one input kind. */\nconst compileClosure = (root: ParserLike, kind: 0 | 1 | 2, resumable = false): CompiledRoot => {\n const compiler = new Compiler(kind, resumable)\n const step = compiler.compile(root, true)\n return { step, fallbacks: compiler.fallbacks }\n}\n\n/** The closure compiler as a backend. */\nexport const backend: Backend = {\n build: (p, kind, resumable) =>\n Result.match(\n Result.try(() => compileClosure(p, kind, resumable)),\n {\n onSuccess: ({ fallbacks, step }) => ({\n backend: \"closure\" as const,\n step,\n guarded: false,\n fallbacks,\n error: undefined\n }),\n onFailure: (error) => ({\n backend: \"interpreted\" as const,\n step: undefined,\n guarded: false,\n fallbacks: [],\n error\n })\n }\n )\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"first.d.ts","names":[],"sources":["../../../src/internal/compiler/first.ts"],"mappings":";qBA0Ba;iBAII;WACN;WACA,OAAO;WACP;;qBAgCE;WAEU;mBADJ;EACI,YAAA;EAErB,GAAG,GAAG,aAAa;;UAUX;UAcA;
|
|
1
|
+
{"version":3,"file":"first.d.ts","names":[],"sources":["../../../src/internal/compiler/first.ts"],"mappings":";qBA0Ba;iBAII;WACN;WACA,OAAO;WACP;;qBAgCE;WAEU;mBADJ;EACI,YAAA;EAErB,GAAG,GAAG,aAAa;;UAUX;UAcA;UAgIA;;;;;;;iBAiBO;;WAEN,QAAQ;WACR;WACA;WACA,OAAO,cAAc;;qBAGnB,UAAW,QAAQ,cAAc,WAAS"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as Predicate from "effect/Predicate";
|
|
2
|
+
import { nodeOf } from "../node.js";
|
|
2
3
|
import { fastLimit, isEmptyUnits } from "../text.js";
|
|
3
4
|
import * as Arr from "effect/Array";
|
|
4
|
-
import { nodeOf } from "../node.js";
|
|
5
5
|
import { TableSize, kindOfEncoding, reachesAbove, textSet, tokenSet } from "./sets.js";
|
|
6
6
|
// src/internal/compiler/first.ts
|
|
7
7
|
/**
|
|
@@ -185,6 +185,7 @@ var FirstSets = class {
|
|
|
185
185
|
const f = this.of(node.self);
|
|
186
186
|
return node.from === "Backtrack" ? f.mode === Unknown ? f : unknown : f;
|
|
187
187
|
}
|
|
188
|
+
case "Not":
|
|
188
189
|
case "Opt":
|
|
189
190
|
case "OrElseSucceed": {
|
|
190
191
|
const f = this.of(node.self);
|