@real-life/trust-protocol 0.4.0 → 0.5.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.
Files changed (88) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/README.md +47 -25
  3. package/dist/adapters/vti-mediator.d.ts +18 -3
  4. package/dist/adapters/vti-mediator.d.ts.map +1 -1
  5. package/dist/adapters/vti-mediator.js +51 -13
  6. package/dist/adapters/vti-mediator.js.map +1 -1
  7. package/dist/codec.d.ts +9 -1
  8. package/dist/codec.d.ts.map +1 -1
  9. package/dist/codec.js +107 -23
  10. package/dist/codec.js.map +1 -1
  11. package/dist/engine.d.ts +15 -3
  12. package/dist/engine.d.ts.map +1 -1
  13. package/dist/engine.js +130 -16
  14. package/dist/engine.js.map +1 -1
  15. package/dist/entropy.d.ts +1 -1
  16. package/dist/entropy.d.ts.map +1 -1
  17. package/dist/entropy.js +1 -1
  18. package/dist/entropy.js.map +1 -1
  19. package/dist/events.d.ts +21 -0
  20. package/dist/events.d.ts.map +1 -1
  21. package/dist/events.js.map +1 -1
  22. package/dist/holder-api.d.ts +29 -1
  23. package/dist/holder-api.d.ts.map +1 -1
  24. package/dist/holder-api.js +12 -2
  25. package/dist/holder-api.js.map +1 -1
  26. package/dist/holder-state-v2.d.ts +858 -0
  27. package/dist/holder-state-v2.d.ts.map +1 -0
  28. package/dist/holder-state-v2.js +2 -0
  29. package/dist/holder-state-v2.js.map +1 -0
  30. package/dist/index.d.ts +2 -1
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +10 -6
  33. package/dist/index.js.map +1 -1
  34. package/dist/internal.d.ts +2 -1
  35. package/dist/internal.d.ts.map +1 -1
  36. package/dist/internal.js +1 -1
  37. package/dist/internal.js.map +1 -1
  38. package/dist/introduction/holder.d.ts.map +1 -1
  39. package/dist/introduction/holder.js +7 -0
  40. package/dist/introduction/holder.js.map +1 -1
  41. package/dist/invariants.d.ts.map +1 -1
  42. package/dist/invariants.js +70 -0
  43. package/dist/invariants.js.map +1 -1
  44. package/dist/membership/holder.d.ts +3 -5
  45. package/dist/membership/holder.d.ts.map +1 -1
  46. package/dist/membership/holder.js +165 -88
  47. package/dist/membership/holder.js.map +1 -1
  48. package/dist/membership.d.ts +31 -0
  49. package/dist/membership.d.ts.map +1 -1
  50. package/dist/membership.js +25 -2
  51. package/dist/membership.js.map +1 -1
  52. package/dist/message/holder.d.ts +49 -0
  53. package/dist/message/holder.d.ts.map +1 -0
  54. package/dist/message/holder.js +290 -0
  55. package/dist/message/holder.js.map +1 -0
  56. package/dist/message.d.ts +43 -0
  57. package/dist/message.d.ts.map +1 -0
  58. package/dist/message.js +51 -0
  59. package/dist/message.js.map +1 -0
  60. package/dist/receive.d.ts +4 -3
  61. package/dist/receive.d.ts.map +1 -1
  62. package/dist/receive.js +23 -4
  63. package/dist/receive.js.map +1 -1
  64. package/dist/results.d.ts +17 -2
  65. package/dist/results.d.ts.map +1 -1
  66. package/dist/results.js.map +1 -1
  67. package/dist/schemas.d.ts.map +1 -1
  68. package/dist/schemas.js +9 -6
  69. package/dist/schemas.js.map +1 -1
  70. package/dist/state.d.ts +66 -5
  71. package/dist/state.d.ts.map +1 -1
  72. package/dist/state.js +2 -1
  73. package/dist/state.js.map +1 -1
  74. package/dist/trust/continuity.d.ts.map +1 -1
  75. package/dist/trust/continuity.js +7 -1
  76. package/dist/trust/continuity.js.map +1 -1
  77. package/dist/trust/entries.d.ts.map +1 -1
  78. package/dist/trust/entries.js +103 -2
  79. package/dist/trust/entries.js.map +1 -1
  80. package/dist/views.d.ts +34 -2
  81. package/dist/views.d.ts.map +1 -1
  82. package/dist/views.js +19 -1
  83. package/dist/views.js.map +1 -1
  84. package/dist/wire.d.ts +47 -6
  85. package/dist/wire.d.ts.map +1 -1
  86. package/dist/wire.js.map +1 -1
  87. package/package.json +6 -2
  88. package/schemas/holder-state-v2.schema.json +4123 -0
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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","sourcesContent":["// engine — the holder's small engine (lib Stage 2, note §4.1–4.4, 4.7).\n//\n// Modules own their rules as pure transitions and register commands,\n// task handlers and duty handlers here, once, at construction; after\n// that the registries are frozen. No module has a commit path of its\n// own: the engine coordinates snapshot, preparation, check, commit and\n// release, and nothing else.\n//\n// An act runs in four steps (note §4.2), serialized by one in-engine\n// queue:\n// 1. read the snapshot {state, version} from the store and decode it;\n// raise `when` to state.lastWhen (4.7)\n// 2. prepare (async, outside the transaction): crypto, entropy, ports;\n// `prepared` is bound to the version and commitSeq it ran against\n// 3. apply (synchronous, pure, on a deep-frozen snapshot), then one CAS\n// commit of state, outbox, duties, the act journal and commitSeq;\n// on `conflict` back to 1 — the queue serializes this engine, CAS\n// catches every other writer — bounded by retry.commitAttempts\n// 4. only after the commit: events to subscribers, the result returned\n//\n// A commit that throws has an unknown outcome: InfraError\n// 'unknown-commit-outcome'. The engine then settles before its next\n// operation: it re-reads and, if the commit landed (the stored state is\n// the one it wrote, or the journal holds the act at its commitSeq),\n// releases that commit's events late; otherwise drops them. A repeated\n// human act finds its result in the journal (note §4.2).\n//\n// Choices this file makes where the note leaves them open:\n// - snapshots handed to prepare/apply are always deep-frozen (also in\n// production): a mutating module throws a TypeError, nothing commits\n// - every act reads the store afresh; the engine caches no state\n// - eventId is `<commitSeq>.<index>`: unique per holder, no entropy\n// - the input is bound at the public call: a canonical, deep-frozen JSON\n// copy (undefined object members dropped, anything else non-JSON\n// refused); its hash, every preparation and every apply use that copy\n// - a `when` above lastWhen is a state change and commits; a non-human\n// act whose apply returns the identical state object and nothing else\n// commits nothing only when lastWhen stays too. A human act always\n// commits, because its journal entry is the result. Refusals and\n// journal replays commit nothing, lastWhen included\n// - outbound of an act starts at attempt 1 with nextAttemptAt =\n// when + ceil(backoff(1)); resume() re-emits only items that are due\n// and pauses re-emission while the last step is awaiting-transport\n// (the adapter holds the item) and never re-emits an accepted one. It\n// gives up every non-terminal item (submitted, held or accepted) at\n// first submission + horizonMs, never by attempt\n// count; nextDueAt is the earliest due re-emission or horizon expiry\n// - the holder's give-up is failed(expired-by-adapter-policy); a later\n// delivered report is late by that history, whatever the adapter says\n// - replay of a human act returns the journaled events and the outbound\n// of its documents that are not terminal (delivered, failed), at their\n// current attempt. Idempotency is bounded by the journal's retention:\n// max(P90D, retry.horizonMs), the key-retention of Delivery §7 that\n// bounds effects and their acks; after it the same actId is a new act\n// - KeyProvider, Log and Access rejections inside a preparation become\n// InfraError('key-provider' | 'log' | 'access') with the cause. Known\n// limitation: a provider's argument errors (a module passing a label\n// outside the registry, say) are wrapped the same way, so a module\n// programming error surfaces as an infrastructure error; the original\n// error stays in `cause`\n// - events are deep-frozen before listeners or callers see them; a\n// listener's throw or rejection is dropped\n// - the next state is validated by the codec before every commit; an\n// invalid state is a programming error and throws\n// - receive (receive.ts) is a built-in like tick: a failed disposition\n// commits nothing, lastWhen included (like a refusal); duplicate-known\n// commits only a raised lastWhen; a CAS conflict re-reads and runs the\n// stages again, which re-checks the effect cache at stage 4\n// - an ack is stored sealed (StoredAck: envelope, digest, recipient) in\n// its effect, so every re-send is byte-identical down to the envelope.\n// It stays `sent: false` until any report on its digest. Unsent, it has\n// the outbox's retry schedule: attempt 1 at the receive, re-offered by\n// resume when due (attempt + 1, backoff), counted into nextDueAt, and at\n// its horizon (effect commit + horizonMs) marked sent by the horizon\n// (`sentBy: 'horizon'`, no event: acks have no trias). A duplicate's\n// re-send carries attempt + 1 and does not move the schedule (it\n// commits nothing beyond lastWhen)\n// - outbound of one commit, in order: outbox re-emissions, released\n// acks, new documents\n// - resume runs duties after the outbox, ordered by dueAt (absent: due\n// always, counted as 0), then id. An Applied fulfils the duty and the\n// engine removes it in the same commit; 'not-due' and a refusal keep it\n// without a trace. A duty of a registered kind at another version is\n// announced as duty.unsupported on every resume (a commit of its own);\n// a kind no module registers is kept silently. A duty with awaitHead\n// runs only when its handler's awaitHolds says so (none: never). Each\n// planned duty is checked again against the state the duties before it\n// left: still present at the handler's version, due, its awaited head\n// holding; a prepared duty whose data changed since its preparation is\n// deferred to the next resume and prepared afresh there. Its handler's\n// apply re-checks every other state-dependent precondition itself\n// (note §4.2 step 3). nextDueAt comes from the final duty set, the\n// duties created in this resume included: a future dueAt, or `when` for\n// duty work runnable now that did not run; a duty that ran and stayed\n// (not-due, refused) sets no timer while its record is unchanged since\n// that run. A duty whose kind changed since the plan is not run by the\n// planned handler; the next resume dispatches it. New documents of\n// duties count in too. The duties a handler opens are folded into the\n// state before the next handler runs (an id already open is kept), so\n// later handlers' drop rules and dedupe see them; they run on the next\n// resume (the plan is fixed at the snapshot)\n// - every committed operation but resume names the duty work it opened or\n// unblocked as nextDueAt on its result (ActResult, ReceiveResult\n// unique): `when` where a duty that is new, changed, or newly runnable\n// (its awaited head now holding) can run now, else the earliest future\n// dueAt among those; absent where it opened none. It is the app's cue to\n// call resume (or set a timer), as resume's own nextDueAt is. A journal\n// replay of a human act carries none: its duties were announced then\n// - sweeps (Trust 5.4 reconciliation, PR 4b) run in resume after the\n// duties, in registration order, on the state the duties left; their\n// preparations run against resume's snapshot beside the duties'. A\n// piece whose inputs moved since is skipped and makes `when` the\n// nextDueAt, as does sweep work that became pending during the resume\n// itself (a give-up at the horizon, a duty's change) without having\n// been prepared. Their new documents count into nextDueAt like the\n// duties'. Every other committed operation whose state adds a key to\n// a sweep's `pending` names `when` as its nextDueAt; a sweep that\n// declares the state parts it reads (`reads`) is skipped there when the\n// operation left all of them untouched (by reference)\n// - a verified delivery-ack runs the ack handler registered for the\n// acknowledged item's type in its own transaction; a report never does\n// - an outbox item that turns failed (a failed report, or the holder's\n// own give-up at the horizon inside resume) runs the failure handler\n// registered for its type in that same transaction, once, at the\n// transition; duties it opens are folded into the state there (so two\n// failures of one resume cannot open one duty twice) and count into\n// nextDueAt like any new duty. A late delivered after failed runs the\n// ack handler as usual, never the failure handler again\n// - the Encounter latch exception (receive.ts TaskRefusal, Refusal):\n// a refusal carrying `latch` commits exactly that state (checked to\n// shrink encounter.challenges and touch nothing else) and the raised\n// lastWhen, with no journal entry, cache entry, ack, outbound or event;\n// the result stays the refusal (receive: failed at stage 9)\n// - a task handler's refusal commits nothing; its TaskDiscarded (an\n// assembly discarded at a resource limit or rejected, Trust 5365/5366)\n// commits its state and nothing else: disposition `discarded` with the\n// reason, no cache entry, no ack, no event\n// - a transition's `renames` (Applied) are followed in the effect cache by\n// the engine after the transition: each stored ack's recipient.contactId\n// that a rename names moves to its new id; the envelope, sealed to the\n// key agreement, is untouched (an ack re-sent is byte-identical)\n// - a module's ownRetries are task types it re-issues itself: resume\n// never re-emits their outbox items (the horizon still gives them up);\n// its keepKeys name own rkids tick must not tombstone though no live\n// tuple carries them. Both trust the registered modules: no ownership\n// of a type or a key is checked (modules are the library's own, not\n// app plug-ins)\n// - a failure handler gets the retry backoff, so a failure can make work\n// due no earlier than its schedule allows\n// - the timer contract: tick does the time-driven work (expiry,\n// retention, the modules' `retain`), resume the delivery work (retries,\n// due duties, sweeps, acks). nextDueAt names the earliest of both: on\n// resume, the earliest future deadline of the expiry work (prompt\n// expiresAt, effect expiry, the act journal's, a terminal outbox item's\n// and an address key's retention, every module's `deadlines`); on an\n// act or receive, also a deadline the commit newly introduced. The app\n// sets one timer on it and, when it fires, calls tick and then resume\n// (README \"The holder\")\n// - after its own retention, tick runs every module's `retain` hook on\n// the result (the trust module drops in-flight star deliveries whose\n// outbox items have all been retained away); the address keys' retention\n// comes last, its live set and keepKeys read on what the hooks left, so\n// a key whose last claim (an act's pin, 8290) left in this tick leaves in\n// the same tick and no passed key deadline outlives it\n// - without an Access port, EngineOptions.accessFrom (createHolder: the\n// membership module's localAccess) builds one over each preparation's\n// own snapshot, so it describes exactly the state the commit lands on\n// - EngineOptions.check (createHolder's `invariants: true`) runs on every\n// commit after the codec's validation and before the CAS; its throw\n// aborts the operation, nothing commits\n// - tick retains with the key-retention max(P90D, horizonMs): effects\n// with their acks at expiresAt; terminal outbox items once the\n// retention has passed since their last step, unless a kept journal\n// entry names them; an address key not shown for the retention and\n// the own rkid of no tuple that is not deactivated becomes a tombstone —\n// except a member key (a group/… label): an identity context of\n// Identity §6.1 rather than a delivery address of Delivery §5 (one\n// derivation per group, reused whenever the holder is invited to it\n// again), it leaves `addresses` without a tombstone (a point for\n// Delivery 0.82: addresses and identity contexts)\nimport { jcs, b64uOf } from './core.js'\nimport { CODEC, decodeState, encodeState } from './codec.js'\nimport { emptyState, toOpaque, triasOf } from './state.js'\nimport type { Dec, Duty, Effect, HolderState, Millis, OutboxItem, OutboxStep, Prompt, PromptChoice, PromptKind } from './state.js'\nimport type { Access, CarrierKey, DeliveryReport, KeyProvider, KeyRelease, Log, Outbound, RetryPolicy, Store, StoreSnapshot } from './ports.js'\nimport type { HolderEvent } from './events.js'\nimport { CryptoUnavailableError, InfraError } from './results.js'\nimport type { ActError, ActResult, InfraErrorCode, ReceiveResult, ResumeResult } from './results.js'\nimport { randomEntropy } from './entropy.js'\nimport type { Entropy, PlatformRandom } from './entropy.js'\nimport { ED_PKCS8, X_PKCS8 } from './keys-seed.js'\nimport { freezeDeep } from './util-freeze.js'\nimport { ACK_TYPE } from './ack.js'\nimport { challengeAged } from './encounter.js'\nimport { ackOutbound, handlerPrepared, isTaskRefusal, markDelivered, prepareReceive } from './receive.js'\nimport { isTaskDiscarded } from './receive.js'\nimport type { Arrival, Channel, ReceivePlan, ReceivedDocument, TaskDiscarded, TaskRefusal } from './receive.js'\nimport type { CommitOp } from './invariants.js'\nexport type { Arrival, Channel, ReceivedDocument, TaskDiscarded, TaskFailure, TaskRefusal } from './receive.js'\n\n// ── types ──────────────────────────────────────────────────────────────\n\ntype DistributiveOmit<T, K extends PropertyKey> = T extends unknown ? Omit<T, K> : never\n\n/** An event as a module emits it; the engine adds eventId, commitSeq, actId. */\nexport type EventDraft = DistributiveOmit<HolderEvent, 'eventId' | 'commitSeq' | 'actId'>\n/** A document as a module issues it; the engine sets attempt 1 and files it in the outbox. */\nexport type OutboundDraft = Omit<Outbound, 'attempt'>\n\n/** What a WebCrypto handle must offer; resolved at construction. The\n * default entropy also needs getRandomValues and randomUUID from it. */\nexport type CryptoHandle = { subtle: SubtleCrypto } & Partial<PlatformRandom>\n\n/** What a preparation sees. The snapshot is deep-frozen; `release` is the\n * key release read from its `addresses` (note §3 KeyProvider). */\nexport interface PrepareCtx {\n readonly snapshot: Readonly<HolderState>\n readonly keys: KeyProvider\n readonly entropy: Entropy\n readonly access?: Access\n readonly log?: Log\n readonly crypto: CryptoHandle\n readonly when: Millis\n readonly release: KeyRelease\n}\n\n/** A preparation's value, bound to the store version and commitSeq of the\n * snapshot it ran against. The commit is CAS on exactly that version, so\n * a prepared value never lands on any other state. */\nexport interface Prepared<P = unknown> {\n readonly value: P\n readonly version: string | null\n readonly commitSeq: Dec\n}\n\n/** A holder-local identity rename (2100, 2140): stored acks whose\n * recipient.contactId is one of `from` (for an own rkid in `rkids`, or\n * any where null) now name `to`. */\nexport interface IdentityRename { from: string[], to: string, rkids: string[] | null }\n\n/** A transition's outcome: the next state (a new object; the input is\n * frozen) and what it issues. `renames`: identities the transition\n * rewrote; the engine follows them in the stored acks (only the core\n * writes the effect cache; the sealed envelopes stay untouched). */\nexport interface Applied {\n state: HolderState\n outbound?: OutboundDraft[]\n events?: EventDraft[]\n duties?: Duty[]\n renames?: IdentityRename[]\n}\n\n/** A refused act: nothing commits — except an Encounter aging latch\n * (`latch`, receive.ts TaskRefusal): then exactly that state and the\n * raised lastWhen commit, without a journal entry, outbound or event. */\nexport interface Refusal { ok: false, code: ActError, ref?: string, latch?: HolderState }\n\n/** The Encounter latch exception (receive.ts TaskRefusal): a latch state\n * differs from its base in encounter.challenges alone; every challenge it\n * keeps is byte-identical, and every one it removes is aged at `when`, the\n * commit's authoritative time (Encounter 5190, 5260). Anything else is a\n * programming error and throws. */\nfunction checkLatch (base: Readonly<HolderState>, latch: Readonly<HolderState>, when: Millis): void {\n for (const k of Object.keys(base) as Array<keyof HolderState>) {\n if (k === 'encounter') continue\n if (base[k] !== latch[k]) throw new Error(`engine: an aging latch changed ${k}`)\n }\n const e = base.encounter, l = latch.encounter\n for (const k of Object.keys(e) as Array<keyof HolderState['encounter']>) {\n if (k !== 'challenges' && e[k] !== l[k]) throw new Error(`engine: an aging latch changed encounter.${k}`)\n }\n for (const [v, c] of Object.entries(l.challenges)) {\n if (!Object.hasOwn(e.challenges, v)) throw new Error('engine: an aging latch added a challenge')\n if (jcs(c) !== jcs(e.challenges[v])) throw new Error(`engine: an aging latch changed the challenge ${v}`)\n }\n for (const [v, c] of Object.entries(e.challenges)) {\n if (!Object.hasOwn(l.challenges, v) && !challengeAged(c.tCh, when)) throw new Error(`engine: an aging latch removed the unaged challenge ${v}`)\n }\n}\n\n/** One command of a module. `human` acts need an actId and are journaled. */\nexport interface CommandDef<I = any, P = any> {\n human: boolean\n prepare?: (ctx: PrepareCtx, input: I) => Promise<P>\n /** synchronous and pure: must not mutate `state`, returns a new object */\n apply: (state: Readonly<HolderState>, prepared: Prepared<P>, input: I, when: Millis) => Applied | Refusal\n}\n\n/**\n * A received task type's handler, keyed by its full task URI with\n * version (note §4.3; receive.ts runs it). `decode` is the payload's\n * decoder and validator (stage 7: refuse 'malformed'; stage 8: any other\n * reason); `prepare` the async stage-8 work (MAC checks, key agreement),\n * which may also refuse; `apply` the synchronous stage-9 transition. The\n * core, never the handler, writes the effect-cache entry with its ack in\n * the same commit and releases the events after it; a handler whose\n * state touches `effects` is a programming error and throws.\n */\nexport interface TaskHandler<T = any, P = any> {\n /** the registry entry's proof declaration (Delivery 4.4): whether the\n * document itself carries a `proof` (its artifacts' own MACs and\n * signatures are the payload's business); checked at stage 6 */\n proof: 'absent' | 'required'\n decode: (payload: unknown) => T | TaskRefusal\n /** the acceptance binding of a document that may arrive on an own key no\n * tuple carries yet (receive.ts): the counterpart's key agreement and\n * contact, from the document itself, or a refusal; absent: the arrival\n * tuple's binding (Delivery 4.4) */\n channel?: (state: Readonly<HolderState>, doc: ReceivedDocument<T>, rkid: string) => Channel | TaskRefusal\n /** under the arrival tuple's binding: the document may arrive on a tuple\n * a chaining deactivated, because the handler binds it to the tuples an\n * act pinned and checks that pin itself (Trust 8270); absent: the arrival\n * tuple must be the active head of a live relationship (6190, 6240) */\n pinned?: true\n prepare?: (ctx: PrepareCtx, doc: ReceivedDocument<T>, arrival: Arrival) => Promise<P | TaskRefusal>\n /** a TaskDiscarded commits its `state` as the disposition `discarded`\n * (no effect-cache entry, no ack): a resource-limit discard (Trust 5365) */\n apply: (state: Readonly<HolderState>, prepared: Prepared<P>, doc: ReceivedDocument<T>, arrival: Arrival) => Applied | TaskRefusal | TaskDiscarded\n}\n\n/** What a duty's apply sees beside the state: its preparation. */\nexport interface DutyCtx<P = unknown> {\n readonly prepared: Prepared<P>\n /** the holder's retry backoff (RetryPolicy): the delay before attempt\n * n, for duties that re-schedule themselves (dueAt) */\n readonly backoff: (attempt: number) => number\n}\n\n/**\n * A duty kind's handler at one version (note §2.1 duties), run by\n * resume(when). A duty of the kind at another `v` stays untouched and is\n * announced as duty.unsupported. `awaitHolds` is the module's pure\n * condition for a duty that carries an `awaitHead` (6596); without it\n * such a duty never runs. `apply` returning Applied fulfils the duty\n * (the engine removes it in the same commit); 'not-due' and a refusal\n * leave it as it is.\n */\nexport interface DutyHandler<P = any> {\n v: number\n prepare?: (ctx: PrepareCtx, duty: Duty) => Promise<P>\n awaitHolds?: (state: Readonly<HolderState>, duty: Duty) => boolean\n apply: (state: Readonly<HolderState>, duty: Duty, ctx: DutyCtx<P>, when: Millis) => Applied | Refusal | 'not-due'\n}\n\n/**\n * A module's reconciliation sweep (Trust 5.4), run by resume(when) after\n * the duties, on the state they left. `prepare` runs against resume's\n * snapshot (before the duties); `apply` re-checks every prepared piece\n * against the state it gets and skips one whose inputs moved, reporting\n * `deferred` (resume then names `when` as nextDueAt). `pending` is the\n * pure answer to \"would the sweep issue now?\", as keys: an operation\n * other than resume whose commit adds a key names `when` as its\n * nextDueAt, the app's cue to call resume (engine.ts header).\n */\nexport interface SweepHandler<P = any> {\n pending: (state: Readonly<HolderState>, when: Millis) => string[]\n /** the top-level state parts `pending` reads; where given, an operation\n * that replaced none of them skips `pending` (its keys cannot change) */\n reads?: ReadonlyArray<keyof HolderState>\n prepare: (ctx: PrepareCtx) => Promise<P>\n apply: (state: Readonly<HolderState>, prepared: Prepared<P>, when: Millis) => Applied & { deferred?: boolean }\n}\n\n/**\n * What a verified delivery-ack does for the module whose task type the\n * acknowledged outbox item carries (receive.ts, the common ack path):\n * synchronous and pure, inside the ack's transaction, after the item is\n * marked delivered. Adapter reports never reach it: only a verified ack\n * completes (ports.ts DeliveryReport, 5660).\n */\nexport type AckHandler = (state: Readonly<HolderState>, ref: string, when: Millis) => Applied\n\n/**\n * What the module whose task type an outbox item carries does when that\n * item turns failed (a failed report, or the holder's give-up at the\n * horizon): synchronous and pure, inside that transaction, after the item\n * is marked failed. Its duties are folded into the state (an id already\n * open is kept as it is); it must not write the effect cache.\n */\nexport type FailureHandler = (state: Readonly<HolderState>, ref: string, when: Millis, ctx: { readonly backoff: (attempt: number) => number }) => Applied\n\n/**\n * What a human's choice on a prompt of one kind does in its domain\n * (prompts.ts): synchronous and pure like apply, run inside the decision's\n * own transition, so the domain effect and the closing commit together.\n * It sees the prompt still open; the prompts module removes it after. A\n * refusal refuses the decision.\n */\nexport type DecisionHandler = DecisionFn | DecisionDef\n\n/** The synchronous form: the domain effect needs no preparation. */\nexport type DecisionFn = (state: Readonly<HolderState>, prompt: Readonly<Prompt>, choice: PromptChoice, when: Millis) => Applied | Refusal\n\n/**\n * The prepared form, for a domain effect that signs or seals (the\n * counter-step, the membership accept, the introduction's consent):\n * `prepare` runs in the decision's preparation against its snapshot, the\n * prompt still open there; `apply` gets its value bound to that snapshot.\n */\nexport interface DecisionDef<P = any> {\n prepare?: (ctx: PrepareCtx, prompt: Readonly<Prompt>, choice: PromptChoice) => Promise<P>\n apply: (state: Readonly<HolderState>, prompt: Readonly<Prompt>, choice: PromptChoice, when: Millis, prepared: Prepared<P>) => Applied | Refusal\n}\n\n/** A domain module: what it registers with the engine. */\nexport interface HolderModule {\n name: string\n commands: Record<string, CommandDef>\n tasks?: Record<string, TaskHandler>\n duties?: Record<string, DutyHandler>\n /** reconciliation sweeps, run by resume after the duties, by name */\n sweeps?: Record<string, SweepHandler>\n /** ack handlers by the full task type URI of the acknowledged document;\n * at most one per type across all modules */\n acks?: Record<string, AckHandler>\n /** failure handlers by the full task type URI of the failed document;\n * at most one per type across all modules */\n failures?: Record<string, FailureHandler>\n /** task types whose documents the module re-issues itself (a fresh\n * document, never a reproduction): the outbox never re-emits their\n * items and gives them up only at the horizon. Trusted as registered:\n * the engine checks no ownership of the types named, since modules are\n * part of the library, not app plug-ins */\n ownRetries?: readonly string[]\n /** own rkids the module still needs although no live tuple carries\n * them: tick does not tombstone them. Trusted as registered, like\n * ownRetries: no check that the module has any claim to the keys */\n keepKeys?: (state: Readonly<HolderState>) => Iterable<string>\n /** the module's own retention, run by tick after the engine's: pure and\n * synchronous, returning the same state object where nothing goes */\n retain?: (state: Readonly<HolderState>, when: Millis) => HolderState\n /** the times at which the module's `retain` (run by tick) changes the\n * state: counted into nextDueAt (the timer contract, the header) */\n deadlines?: (state: Readonly<HolderState>) => Iterable<Millis>\n /** at most one handler per prompt kind across all modules; collected by\n * createHolder for the prompts module (prompts.ts) */\n decisions?: Partial<Record<PromptKind, DecisionHandler>>\n}\n\n/** The ports of a holder (note §3); retry fields fall back to ENGINE_DEFAULTS. */\nexport interface EnginePorts {\n store: Store\n keys: KeyProvider\n entropy?: Entropy\n log?: Log\n access?: Access\n retry?: Partial<RetryPolicy>\n crypto?: CryptoHandle\n}\n\n/** Engine options beside the ports. `check` runs on every commit before\n * the store's CAS, on the state read and the state about to be written,\n * with the operation; a throw aborts the operation and nothing commits\n * (createHolder's `invariants: true`, invariants.ts). */\nexport interface EngineOptions {\n check?: (before: Readonly<HolderState>, after: Readonly<HolderState>, op: CommitOp) => void\n /** where no Access port is given: an Access over each preparation's own\n * snapshot (createHolder passes the membership module's localAccess) */\n accessFrom?: (state: Readonly<HolderState>) => Access\n}\n\n/** Announced after every commit of this engine, with its commitSeq. */\nexport type CommitListener = (commit: { commitSeq: Dec, events: HolderEvent[] }) => void\n\n/** A deep-frozen decoded state and its commitSeq. */\nexport interface EngineSnapshot { state: Readonly<HolderState>, commitSeq: Dec }\n\nexport interface Engine {\n /** the names registered at construction, frozen */\n readonly registry: Readonly<{ commands: readonly string[], tasks: readonly string[], duties: readonly string[], sweeps: readonly string[] }>\n act (command: string, input: unknown, when: Millis, opts?: { actId?: string }): Promise<ActResult>\n /** expiry and retention: effects, prompts, the act journal, terminal\n * outbox items, address keys to tombstones; raises lastWhen */\n tick (when: Millis): Promise<ActResult>\n /** re-emits due outbox items (attempt + 1) or gives them up, runs due\n * duties, re-emits unsent acks */\n resume (when: Millis): Promise<ResumeResult>\n /** an adapter's delivery report (Delivery §6.1); on an ack's digest it\n * marks the stored ack sent */\n report (report: DeliveryReport, when: Millis): Promise<ActResult>\n /** an arriving envelope: Delivery §6.2 stages 1–9 (receive.ts) */\n receive (env: unknown, when: Millis): Promise<ReceiveResult>\n subscribe (listener: CommitListener): () => void\n snapshot (): Promise<EngineSnapshot>\n}\n\n// ── defaults ───────────────────────────────────────────────────────────\n\nconst DAY = 86_400_000\n\n/** Defaults of the retry policy and the retention it implies. */\nexport const ENGINE_DEFAULTS = Object.freeze({\n /** 30 s, doubling, at most 6 h */\n backoff: (attempt: number): number => Math.min(30_000 * 2 ** Math.max(0, attempt - 1), 6 * 3_600_000),\n /** P7D, inside Delivery's give-up range [P1D, P90D]; the only give-up */\n horizonMs: 7 * DAY,\n commitAttempts: 8,\n /** max(P90D, horizonMs) with the default horizon */\n retentionMs: 90 * DAY,\n})\n\n/** Delivery's give-up range for horizonMs: [P1D, P90D]. */\nconst HORIZON_MIN = DAY\nconst HORIZON_MAX = 90 * DAY\n\nconst BUILTIN = ['tick', 'resume', 'report', 'receive'] as const\nconst TASK_URI = /^[a-z][a-z0-9+.-]*:\\S+\\/[0-9]+\\.[0-9]+$/\n\n// ── helpers ────────────────────────────────────────────────────────────\n\nconst ALGORITHMS = ['Ed25519', 'X25519', 'HKDF', 'HMAC', 'AES-GCM', 'SHA-256'] as const\n\nconst concat = (a: Uint8Array, b: Uint8Array): Uint8Array => { const o = new Uint8Array(a.length + b.length); o.set(a); o.set(b, a.length); return o }\n\n/** Resolves the WebCrypto handle and probes every algorithm the library uses. */\nasync function resolveCrypto (c?: CryptoHandle): Promise<CryptoHandle> {\n const h = c ?? (globalThis.crypto as CryptoHandle | undefined)\n const S = h?.subtle\n if (!S || typeof S.importKey !== 'function' || typeof S.digest !== 'function') throw new CryptoUnavailableError(['subtle', ...ALGORITHMS])\n const k = new Uint8Array(32).fill(1)\n const probes: Record<typeof ALGORITHMS[number], () => Promise<unknown>> = {\n Ed25519: () => S.importKey('pkcs8', concat(ED_PKCS8, k), { name: 'Ed25519' }, false, ['sign']),\n X25519: () => S.importKey('pkcs8', concat(X_PKCS8, k), { name: 'X25519' }, false, ['deriveBits']),\n HKDF: () => S.importKey('raw', k, 'HKDF', false, ['deriveBits']),\n HMAC: () => S.importKey('raw', k, { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']),\n 'AES-GCM': () => S.importKey('raw', k, { name: 'AES-GCM' }, false, ['encrypt']),\n 'SHA-256': () => S.digest('SHA-256', k),\n }\n const ok = await Promise.all(ALGORITHMS.map(async (a) => { try { await probes[a](); return true } catch { return false } }))\n const missing = ALGORITHMS.filter((_, i) => !ok[i])\n if (missing.length) throw new CryptoUnavailableError(missing)\n return h as CryptoHandle\n}\n\nconst te = new TextEncoder()\n/** The stack's document digest (u + multihash sha2-256 over JCS), on the resolved handle. */\nconst digestOf = async (S: SubtleCrypto, x: unknown): Promise<string> =>\n 'u' + b64uOf(concat(Uint8Array.from([0x12, 0x20]), new Uint8Array(await S.digest('SHA-256', te.encode(jcs(x))))))\n\n/** Drops undefined object members (as JSON does) without hiding what jcs refuses. */\nconst dropUndefined = (x: unknown): unknown => {\n if (x === null || typeof x !== 'object') return x\n if (Object.getOwnPropertySymbols(x).length > 0) return x\n if (Array.isArray(x)) {\n if (Object.getOwnPropertyNames(x).length !== x.length + 1) return x\n for (let i = 0; i < x.length; i++) if (!(i in x)) return x\n return x.map(dropUndefined)\n }\n const proto = Object.getPrototypeOf(x)\n if (proto !== null && proto !== Object.prototype) return x\n if (Object.getOwnPropertyNames(x).length !== Object.keys(x).length) return x\n // own data properties, never assignment: a \"__proto__\" key stays a key\n // (assignment would hit the inherited setter and change the prototype)\n const out: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(x)) {\n if (v !== undefined) Object.defineProperty(out, k, { value: dropUndefined(v), enumerable: true, writable: true, configurable: true })\n }\n return out\n}\n\n/** The act input as bound at the call: canonical JSON, deep-frozen. A\n * \"__proto__\" member is an ordinary key throughout: jcs serializes own\n * keys (Object.keys) and JSON.parse defines own data properties, so it is\n * hashed, journaled and handed to prepare/apply like any other key. */\nconst bindInput = <T>(x: T): T => freezeDeep(JSON.parse(jcs(x === undefined ? null : dropUndefined(x))) as T)\n\n/** when + ceil(delay), clamped to safe integer milliseconds. */\nconst dueAt = (when: Millis, delay: number): Millis => {\n const d = Number.isNaN(delay) ? 0 : Math.max(0, Math.ceil(delay))\n return Math.min(when + d, Number.MAX_SAFE_INTEGER)\n}\n\n/** A port whose rejections become InfraError(code); InfraError passes as is. */\nfunction guard<T extends object> (port: T, names: ReadonlyArray<keyof T & string>, code: InfraErrorCode, wrapResult?: (r: any) => unknown): T {\n const out: Record<string, unknown> = {}\n for (const n of names) {\n out[n] = async (...args: unknown[]) => {\n let r: unknown\n try { r = await (port[n] as (...a: unknown[]) => Promise<unknown>).apply(port, args) } catch (e) {\n throw e instanceof InfraError ? e : new InfraError(code, `${code}: ${n} failed`, { cause: e })\n }\n return wrapResult ? wrapResult(r) : r\n }\n }\n return Object.freeze(out) as T\n}\n\nconst inc = (d: Dec): Dec => (BigInt(d) + 1n).toString()\n\nconst releaseOf = (state: Readonly<HolderState>): KeyRelease => (rkid) => {\n if (state.addresses.tombstones.includes(rkid)) return { status: 'retired' }\n if (!Object.hasOwn(state.addresses.keys, rkid)) return { status: 'unknown' }\n const k = state.addresses.keys[rkid]\n return k.retiredAt !== undefined ? { status: 'retired' } : { status: 'live', label: k.label }\n}\n\nconst isRefusal = (r: unknown): r is Refusal => (r as Refusal)?.ok === false\n\n/** The effect cache with the stored acks' recipients renamed. */\nfunction renameAcks (effects: HolderState['effects'], renames: readonly IdentityRename[]): HolderState['effects'] {\n let out: HolderState['effects'] | null = null\n for (const [d, e] of Object.entries(effects)) {\n let a = e.ack\n if (!a) continue\n for (const r of renames) {\n if (r.from.includes(a.recipient.contactId) && (r.rkids === null || r.rkids.includes(a.recipient.via ?? a.recipient.rkid))) a = { ...a, recipient: { ...a.recipient, contactId: r.to } }\n }\n if (a !== e.ack) (out ??= { ...effects })[d] = { ...e, ack: a }\n }\n return out ?? effects\n}\n\nconst checkWhen = (when: unknown): void => {\n if (!Number.isSafeInteger(when) || (when as number) < 0) throw new TypeError(`when must be non-negative integer milliseconds, got ${String(when)}`)\n}\n\n// ── internal command form: built-ins may also re-emit and schedule ─────\n\ninterface InternalApplied extends Applied {\n /** outbox items re-emitted (already in state, attempt set) */\n emit?: Outbound[]\n /** outbound handed out without an outbox item: acks (receive.ts). It\n * forces no commit; with nothing else to commit it is released as is */\n release?: Outbound[]\n nextDueAt?: Millis\n /** passed through to the caller of #run */\n detail?: unknown\n}\n/** A built-in's end without a commit, lastWhen included, carrying its answer. */\ninterface Halt { halt: true, detail: unknown }\ninterface InternalDef {\n human: boolean\n prepare?: (ctx: PrepareCtx, input: any) => Promise<unknown>\n apply: (state: Readonly<HolderState>, prepared: Prepared<any>, input: any, when: Millis) => InternalApplied | Refusal | Halt\n}\n\n/** Outbound order of one commit: re-emissions, then released acks, then new documents. */\ntype RunResult = { ok: true, outbound: Outbound[], events: HolderEvent[], nextDueAt?: Millis, detail?: unknown } | Refusal | Halt\n\n/** A duty's dueAt; absent counts as 0 (due always). */\nconst dutyDue = (d: Duty): number => (Number.isSafeInteger(d.dueAt) ? d.dueAt as number : 0)\n\n/** Due, and not waiting on a head its handler's awaitHolds denies (none: waits forever). */\nconst dutyRunnable = (d: Duty, h: DutyHandler, state: Readonly<HolderState>, when: Millis): boolean => {\n if (dutyDue(d) > when) return false\n const awaits = (d as { awaitHead?: unknown }).awaitHead\n return typeof awaits !== 'string' || (h.awaitHolds?.(state, d) ?? false)\n}\n\nconst isHalt = (r: unknown): r is Halt => (r as Halt)?.halt === true\n\nconst actResult = (r: RunResult): ActResult => {\n if (isHalt(r)) throw new Error('engine: an act does not halt')\n return r.ok ? { ok: true, outbound: r.outbound, events: r.events, ...(r.nextDueAt !== undefined ? { nextDueAt: r.nextDueAt } : {}) } : r\n}\n\ninterface Policy { backoff: (attempt: number) => number, horizonMs: number, commitAttempts: number, retentionMs: number }\n\n// ── the engine ─────────────────────────────────────────────────────────\n\nclass HolderEngine implements Engine {\n readonly registry: Engine['registry']\n readonly #store: Store\n readonly #ports: EnginePorts\n /** the ports a preparation sees, rejections typed (InfraError) */\n readonly #keys: KeyProvider\n readonly #log?: Log\n readonly #access?: Access\n readonly #crypto: CryptoHandle\n readonly #entropy: Entropy\n readonly #policy: Policy\n readonly #commands: ReadonlyMap<string, InternalDef>\n readonly #tasks: ReadonlyMap<string, TaskHandler>\n readonly #duties: ReadonlyMap<string, DutyHandler>\n readonly #sweeps: ReadonlyMap<string, SweepHandler>\n readonly #acks: ReadonlyMap<string, AckHandler>\n readonly #failures: ReadonlyMap<string, FailureHandler>\n readonly #ownRetries: ReadonlySet<string>\n readonly #keepKeys: ReadonlyArray<(state: Readonly<HolderState>) => Iterable<string>>\n readonly #retain: ReadonlyArray<(state: Readonly<HolderState>, when: Millis) => HolderState>\n readonly #deadlines: ReadonlyArray<(state: Readonly<HolderState>) => Iterable<Millis>>\n readonly #builtins: Readonly<Record<typeof BUILTIN[number], InternalDef>>\n readonly #check?: EngineOptions['check']\n readonly #accessFrom?: EngineOptions['accessFrom']\n readonly #listeners = new Set<CommitListener>()\n #chain: Promise<unknown> = Promise.resolve()\n /** a commit whose outcome is unknown, settled before the next operation */\n #unsettled: { text: string, actId?: string, commitSeq: Dec, events: HolderEvent[] } | null = null\n\n constructor (ports: EnginePorts, crypto: CryptoHandle, modules: readonly HolderModule[], opts: EngineOptions = {}) {\n if (opts.check !== undefined && typeof opts.check !== 'function') throw new TypeError('check must be a function')\n this.#check = opts.check\n if (opts.accessFrom !== undefined && typeof opts.accessFrom !== 'function') throw new TypeError('accessFrom must be a function')\n this.#accessFrom = opts.accessFrom\n this.#store = ports.store\n this.#ports = ports\n this.#crypto = crypto\n this.#entropy = ports.entropy ?? randomEntropy(crypto)\n const r = ports.retry ?? {}\n const horizonMs = r.horizonMs ?? ENGINE_DEFAULTS.horizonMs\n const backoff = r.backoff ?? ENGINE_DEFAULTS.backoff\n const commitAttempts = r.commitAttempts ?? ENGINE_DEFAULTS.commitAttempts\n if (!Number.isSafeInteger(horizonMs) || horizonMs < HORIZON_MIN || horizonMs > HORIZON_MAX) throw new RangeError(`retry.horizonMs must be integer ms within [P1D, P90D], got ${horizonMs}`)\n if (typeof backoff !== 'function') throw new RangeError('retry.backoff must be a function')\n for (let n = 1; n <= 3; n++) {\n const d = backoff(n)\n if (typeof d !== 'number' || !Number.isFinite(d) || d < 0) throw new RangeError(`retry.backoff(${n}) must be a finite non-negative number, got ${d}`)\n }\n if (!Number.isSafeInteger(commitAttempts) || commitAttempts < 1) throw new RangeError('retry.commitAttempts must be a positive integer')\n this.#policy = Object.freeze({ backoff, horizonMs, commitAttempts, retentionMs: Math.max(ENGINE_DEFAULTS.retentionMs, horizonMs) })\n const carrierKey = (k: CarrierKey): CarrierKey => Object.freeze({ principal: k.principal, sign: guard(k, ['sign'], 'key-provider').sign })\n const base = guard(ports.keys, ['anchorOf', 'sign', 'agree'], 'key-provider')\n this.#keys = Object.freeze({\n anchorOf: base.anchorOf, sign: base.sign, agree: base.agree,\n carrierPrincipal: guard(ports.keys, ['carrierPrincipal'], 'key-provider', carrierKey).carrierPrincipal,\n })\n if (ports.log) this.#log = guard(ports.log, ['head', 'at', 'append'], 'log')\n if (ports.access) this.#access = guard(ports.access, ['memberships', 'membership'], 'access')\n\n const commands = new Map<string, InternalDef>()\n const tasks = new Map<string, TaskHandler>()\n const duties = new Map<string, DutyHandler>()\n const sweeps = new Map<string, SweepHandler>()\n const acks = new Map<string, AckHandler>()\n const failures = new Map<string, FailureHandler>()\n const ownRetries = new Set<string>()\n const keepKeys: Array<(state: Readonly<HolderState>) => Iterable<string>> = []\n const retain: Array<(state: Readonly<HolderState>, when: Millis) => HolderState> = []\n const deadlines: Array<(state: Readonly<HolderState>) => Iterable<Millis>> = []\n const names = new Set<string>()\n for (const m of modules) {\n if (!m || typeof m.name !== 'string' || !m.name) throw new TypeError('a module needs a name')\n if (names.has(m.name)) throw new Error(`duplicate module ${m.name}`)\n names.add(m.name)\n for (const [name, def] of Object.entries(m.commands ?? {})) {\n if (commands.has(name) || (BUILTIN as readonly string[]).includes(name)) throw new Error(`duplicate command ${name} (module ${m.name})`)\n if (typeof def?.apply !== 'function' || typeof def.human !== 'boolean') throw new TypeError(`command ${name} (module ${m.name}) needs human and apply`)\n commands.set(name, Object.freeze({ ...def }))\n }\n for (const [uri, h] of Object.entries(m.tasks ?? {})) {\n if (!TASK_URI.test(uri)) throw new Error(`not a full task URI with version: ${uri} (module ${m.name})`)\n if (uri === ACK_TYPE) throw new Error(`${uri} is built in: acks take the common path (module ${m.name})`)\n if (tasks.has(uri)) throw new Error(`duplicate task ${uri} (module ${m.name})`)\n if (typeof h?.apply !== 'function' || typeof h.decode !== 'function') throw new TypeError(`task ${uri} (module ${m.name}) needs decode and apply`)\n if (h.proof !== 'absent' && h.proof !== 'required') throw new TypeError(`task ${uri} (module ${m.name}) needs its proof declaration: 'absent' or 'required'`)\n if (h.channel !== undefined && typeof h.channel !== 'function') throw new TypeError(`task ${uri} (module ${m.name}): channel must be a function`)\n if (h.pinned !== undefined && (h.pinned !== true || h.channel !== undefined)) throw new TypeError(`task ${uri} (module ${m.name}): pinned is true or absent, and only under the tuple binding`)\n tasks.set(uri, Object.freeze({ ...h }))\n }\n for (const [kind, h] of Object.entries(m.duties ?? {})) {\n if (duties.has(kind)) throw new Error(`duplicate duty ${kind} (module ${m.name})`)\n if (typeof h?.apply !== 'function') throw new TypeError(`duty ${kind} (module ${m.name}) needs apply`)\n if (!Number.isSafeInteger(h.v) || h.v < 1) throw new TypeError(`duty ${kind} (module ${m.name}) needs its version v, a positive integer`)\n if (h.awaitHolds !== undefined && typeof h.awaitHolds !== 'function') throw new TypeError(`duty ${kind} (module ${m.name}): awaitHolds must be a function`)\n duties.set(kind, Object.freeze({ ...h }))\n }\n for (const [name, h] of Object.entries(m.sweeps ?? {})) {\n if (sweeps.has(name)) throw new Error(`duplicate sweep ${name} (module ${m.name})`)\n if (typeof h?.apply !== 'function' || typeof h.prepare !== 'function' || typeof h.pending !== 'function') throw new TypeError(`sweep ${name} (module ${m.name}) needs pending, prepare and apply`)\n sweeps.set(name, Object.freeze({ ...h }))\n }\n for (const [uri, h] of Object.entries(m.acks ?? {})) {\n if (!TASK_URI.test(uri)) throw new Error(`not a full task URI with version: ${uri} (module ${m.name})`)\n if (acks.has(uri)) throw new Error(`duplicate ack handler ${uri} (module ${m.name})`)\n if (typeof h !== 'function') throw new TypeError(`ack handler ${uri} (module ${m.name}) must be a function`)\n acks.set(uri, h)\n }\n for (const [uri, h] of Object.entries(m.failures ?? {})) {\n if (!TASK_URI.test(uri)) throw new Error(`not a full task URI with version: ${uri} (module ${m.name})`)\n if (failures.has(uri)) throw new Error(`duplicate failure handler ${uri} (module ${m.name})`)\n if (typeof h !== 'function') throw new TypeError(`failure handler ${uri} (module ${m.name}) must be a function`)\n failures.set(uri, h)\n }\n for (const uri of m.ownRetries ?? []) {\n if (!TASK_URI.test(uri)) throw new Error(`not a full task URI with version: ${uri} (module ${m.name})`)\n ownRetries.add(uri)\n }\n if (m.keepKeys !== undefined) {\n if (typeof m.keepKeys !== 'function') throw new TypeError(`keepKeys (module ${m.name}) must be a function`)\n keepKeys.push(m.keepKeys)\n }\n if (m.retain !== undefined) {\n if (typeof m.retain !== 'function') throw new TypeError(`retain (module ${m.name}) must be a function`)\n retain.push(m.retain)\n }\n if (m.deadlines !== undefined) {\n if (typeof m.deadlines !== 'function') throw new TypeError(`deadlines (module ${m.name}) must be a function`)\n deadlines.push(m.deadlines)\n }\n }\n this.#commands = commands\n this.#tasks = tasks\n this.#duties = duties\n this.#sweeps = sweeps\n this.#acks = acks\n this.#failures = failures\n this.#ownRetries = ownRetries\n this.#keepKeys = Object.freeze(keepKeys)\n this.#deadlines = Object.freeze(deadlines)\n this.#retain = Object.freeze(retain)\n this.#builtins = Object.freeze({ tick: this.#tickDef(), resume: this.#resumeDef(), report: this.#reportDef(), receive: this.#receiveDef() })\n this.registry = Object.freeze({\n commands: Object.freeze([...commands.keys()]),\n tasks: Object.freeze([...tasks.keys()]),\n duties: Object.freeze([...duties.keys()]),\n sweeps: Object.freeze([...sweeps.keys()]),\n })\n }\n\n // ── loading ──────────────────────────────────────────────────────────\n\n async #readRaw (): Promise<StoreSnapshot> {\n try { return await this.#store.read() } catch (e) { throw new InfraError('store-read', undefined, { cause: e }) }\n }\n\n async #read (): Promise<{ state: Readonly<HolderState>, version: string | null }> {\n const snap = await this.#readRaw()\n if (snap.state === null) throw new Error('engine: the store holds no state')\n return { state: freezeDeep(decodeState(snap.state)), version: snap.version }\n }\n\n /** Initialise an empty store with the empty state, or check the stored one decodes. */\n async load (): Promise<void> {\n const snap = await this.#readRaw()\n if (snap.state !== null) { decodeState(snap.state); return }\n let cause: unknown\n try { if ((await this.#store.commit(null, toOpaque(emptyState(CODEC)))).ok) return } catch (e) { cause = e }\n const again = await this.#readRaw() // conflict or unknown outcome: someone (maybe we) wrote\n if (again.state === null) throw new InfraError('store-commit', 'could not initialise the store', { cause })\n decodeState(again.state)\n }\n\n // ── the queue ────────────────────────────────────────────────────────\n\n #enqueue<T> (fn: () => Promise<T>): Promise<T> {\n const p = this.#chain.then(async () => { await this.#settle(); return fn() })\n this.#chain = p.then(() => undefined, () => undefined)\n return p\n }\n\n async #settle (): Promise<void> {\n const u = this.#unsettled\n if (!u) return\n const { state } = await this.#read()\n const landed = jcs(state) === u.text ||\n (u.actId !== undefined && Object.hasOwn(state.acts, u.actId) && state.acts[u.actId].commitSeq === u.commitSeq)\n this.#unsettled = null\n if (landed) this.#announce(u.commitSeq, u.events)\n }\n\n #announce (commitSeq: Dec, events: HolderEvent[]): void {\n for (const l of [...this.#listeners]) {\n // a listener's failure (throw or rejection) neither undoes nor blocks the commit\n try {\n const r: unknown = l({ commitSeq, events })\n if (r !== null && typeof r === 'object' && typeof (r as Promise<unknown>).then === 'function') (r as Promise<unknown>).then(undefined, () => undefined)\n } catch { /* dropped */ }\n }\n }\n\n // ── the four steps ───────────────────────────────────────────────────\n\n /** `input` is already bound (bindInput); `inputHash` its journal hash for human acts. */\n async #run (def: InternalDef, op: CommitOp, input: unknown, when: Millis, actId?: string, inputHash?: string): Promise<RunResult> {\n for (let attempt = 1; attempt <= this.#policy.commitAttempts; attempt++) {\n // 1 — snapshot, when\n const { state, version } = await this.#read()\n const at = Math.max(when, state.lastWhen)\n if (def.human && Object.hasOwn(state.acts, actId!)) {\n const rec = state.acts[actId!]\n if (rec.inputHash !== inputHash) return { ok: false, code: 'actid-conflict' }\n const live = rec.outboundDigests.filter((d) => { const t = triasOf(this.#itemOf(state, d)); return t !== 'delivered' && t !== 'failed' })\n const events: HolderEvent[] = structuredClone(rec.events) as HolderEvent[]\n return { ok: true, outbound: live.map((d) => this.#outboundOf(state, d)), events: freezeDeep(events) }\n }\n // 2 — prepare, bound to this snapshot\n const ctx: PrepareCtx = Object.freeze({\n snapshot: state, keys: this.#keys, entropy: this.#entropy, access: this.#access ?? this.#accessFrom?.(state), log: this.#log,\n crypto: this.#crypto, when: at, release: releaseOf(state),\n })\n const value = def.prepare ? await def.prepare(ctx, input) : undefined\n const prepared: Prepared = Object.freeze({ value, version, commitSeq: state.commitSeq })\n // 3 — apply, assemble, CAS\n const r = def.apply(state, prepared, input, at)\n if (isHalt(r)) return r\n if (isRefusal(r)) {\n const refusal: Refusal = { ok: false, code: r.code, ...(r.ref !== undefined ? { ref: r.ref } : {}) }\n if (!r.latch) return refusal\n // the Encounter latch exception: the latch and lastWhen commit, nothing else\n checkLatch(state, r.latch, at)\n const seq = inc(state.commitSeq)\n const next: HolderState = { ...r.latch, commitSeq: seq, lastWhen: at }\n const text = encodeState(next)\n if (this.#check) this.#check(state, next, op.kind === 'act' ? { ...op, events: [] } : op)\n let res\n try { res = await this.#store.commit(version, toOpaque(next)) } catch (e) {\n this.#unsettled = { text, commitSeq: seq, events: [] }\n throw new InfraError('unknown-commit-outcome', undefined, { cause: e })\n }\n if (!res.ok) continue\n this.#announce(seq, [])\n return refusal\n }\n const drafts = r.outbound ?? []\n const eventDrafts = r.events ?? []\n const newDuties = r.duties ?? []\n const emit = r.emit ?? []\n const release = r.release ?? []\n // resume computes its own timer; every other operation names the duty\n // work it opened or unblocked, the app's cue to call resume\n const wake = r.nextDueAt ?? (def === this.#builtins.resume ? undefined : this.#wake(state, r.state, newDuties, at))\n const extra = { ...(wake !== undefined ? { nextDueAt: wake } : {}), ...(r.detail !== undefined ? { detail: r.detail } : {}) }\n if (!def.human && r.state === state && !r.renames?.length && at === state.lastWhen && !drafts.length && !eventDrafts.length && !newDuties.length && !emit.length) {\n return { ok: true, outbound: [...release], events: [], ...extra }\n }\n const seq = inc(state.commitSeq)\n const events: HolderEvent[] = eventDrafts.map((e, i) => ({ ...e, eventId: `${seq}.${i}`, commitSeq: seq, ...(def.human ? { actId } : {}) }) as HolderEvent)\n freezeDeep(events)\n const outbound: Outbound[] = drafts.map((o) => ({ digest: o.digest, envelope: o.envelope, type: o.type, threadId: o.threadId, recipient: o.recipient, attempt: 1 }))\n const outbox: Record<string, OutboxItem> = { ...r.state.outbox }\n for (const o of outbound) {\n if (Object.hasOwn(outbox, o.digest)) throw new Error(`engine: outbound ${o.digest} is already in the outbox`)\n outbox[o.digest] = {\n type: o.type, threadId: o.threadId, recipient: o.recipient, envelope: o.envelope, attempt: 1,\n history: [{ status: 'submitted', at, attempt: 1 }], nextAttemptAt: dueAt(at, this.#policy.backoff(1)),\n }\n }\n const duties: Record<string, Duty> = { ...r.state.duties }\n for (const d of newDuties) {\n if (Object.hasOwn(duties, d.id)) throw new Error(`engine: duty ${d.id} already exists`)\n duties[d.id] = d\n }\n const acts = def.human\n ? { ...r.state.acts, [actId!]: { actId: actId!, inputHash: inputHash!, commitSeq: seq, outboundDigests: outbound.map((o) => o.digest), events, at } }\n : r.state.acts\n const effects = r.renames?.length ? renameAcks(r.state.effects, r.renames) : r.state.effects\n const next: HolderState = { ...r.state, effects, commitSeq: seq, lastWhen: at, outbox, duties, acts }\n const text = encodeState(next) // validates; an invalid next state is a programming error\n if (this.#check) {\n const d = (r.detail ?? {}) as { disposition?: string, digest?: string, type?: string, ref?: string, rkid?: string, fulfilled?: string[] }\n const pick = <K extends keyof typeof d>(k: K) => (d[k] !== undefined ? { [k]: d[k] } : {})\n this.#check(state, next,\n op.kind === 'receive' ? { kind: 'receive', ...pick('disposition'), ...pick('digest'), ...pick('type'), ...pick('ref'), ...pick('rkid') }\n : op.kind === 'resume' ? { kind: 'resume', fulfilled: d.fulfilled ?? [] }\n : op.kind === 'act' ? { ...op, events } : op)\n }\n let res\n try { res = await this.#store.commit(version, toOpaque(next)) } catch (e) {\n this.#unsettled = { text, commitSeq: seq, events, ...(def.human ? { actId } : {}) }\n throw new InfraError('unknown-commit-outcome', undefined, { cause: e })\n }\n if (!res.ok) continue\n // 4 — release\n this.#announce(seq, events)\n return { ok: true, outbound: [...emit, ...release, ...outbound], events, ...extra }\n }\n throw new InfraError('commit-conflict', `no commit after ${this.#policy.commitAttempts} attempts`)\n }\n\n /** The work an operation opened or unblocked: its duty work (#dutyWake),\n * or `when` where a sweep's pending keys gained one. */\n /** Every time at which tick's expiry and retention change `state`: the\n * engine's own and the modules' `deadlines` (the timer contract). */\n #expiries (state: Readonly<HolderState>): Millis[] {\n const retention = this.#policy.retentionMs\n const out: Millis[] = []\n for (const p of Object.values(state.prompts)) if (p.expiresAt !== undefined) out.push(p.expiresAt)\n for (const e of Object.values(state.effects)) out.push(e.expiresAt)\n for (const a of Object.values(state.acts)) out.push(a.at + retention)\n for (const it of Object.values(state.outbox)) {\n const t = triasOf(it)\n if ((t === 'delivered' || t === 'failed') && it.history.length) out.push(it.history[it.history.length - 1].at + retention)\n }\n for (const k of Object.values(state.addresses.keys)) out.push(k.lastShown + retention)\n for (const f of this.#deadlines) for (const t of f(state)) out.push(t)\n return out.filter((t) => Number.isSafeInteger(t))\n }\n\n /** The earliest expiry deadline after `when`, among those `only` admits. */\n #nextExpiry (state: Readonly<HolderState>, when: Millis, only: (t: Millis) => boolean = () => true): Millis | undefined {\n let next: Millis | undefined\n for (const t of this.#expiries(state)) if (t > when && only(t) && (next === undefined || t < next)) next = t\n return next\n }\n\n #wake (before: Readonly<HolderState>, after: Readonly<HolderState>, added: readonly Duty[], when: Millis): Millis | undefined {\n const d0 = this.#dutyWake(before, after, added, when)\n // a deadline the commit introduced (a prompt opened, an act started, …)\n const had = before === after ? null : new Set(this.#expiries(before))\n const x = had === null ? undefined : this.#nextExpiry(after, when, (t) => !had.has(t))\n const d = d0 === undefined ? x : x === undefined ? d0 : Math.min(d0, x)\n if (d === when || before === after) return d\n for (const sw of this.#sweeps.values()) {\n // a sweep whose declared inputs are untouched (by reference) cannot have new pending keys\n if (sw.reads && sw.reads.every((k) => before[k] === after[k])) continue\n const had = new Set(sw.pending(before, when))\n if (sw.pending(after, when).some((k) => !had.has(k))) return when\n }\n return d\n }\n\n /** The duty work an operation opened or unblocked: over the duties that\n * are new, changed, or runnable now but not before, `when` where one\n * is runnable now, else the earliest future dueAt; undefined where none. */\n #dutyWake (before: Readonly<HolderState>, after: Readonly<HolderState>, added: readonly Duty[], when: Millis): Millis | undefined {\n let wake: Millis | undefined\n for (const d of [...Object.values(after.duties), ...added]) {\n const h = this.#duties.get(d.kind)\n if (!h || d.v !== h.v) continue\n const prev = Object.hasOwn(before.duties, d.id) ? before.duties[d.id] : undefined\n const runnable = dutyRunnable(d, h, after, when)\n if (prev !== undefined && jcs(prev) === jcs(d) && (!runnable || dutyRunnable(prev, h, before, when))) continue\n const t = runnable ? when : dutyDue(d) > when ? dutyDue(d) : undefined\n if (t !== undefined) wake = wake === undefined ? t : Math.min(wake, t)\n }\n return wake\n }\n\n /** The failure handlers of the items `digests` (each just turned\n * failed), in order, on `state`; their duties folded into the state. */\n #failed (state: HolderState, digests: readonly string[], when: Millis): { state: HolderState, events: EventDraft[] } {\n let cur = state\n const events: EventDraft[] = []\n for (const digest of digests) {\n const h = this.#failures.get(cur.outbox[digest].type)\n if (!h) continue\n const r = h(cur, digest, when, { backoff: this.#policy.backoff })\n if (r.state.effects !== cur.effects) throw new Error(`engine: the failure handler of ${cur.outbox[digest].type} wrote the effect cache`)\n if (r.outbound?.length) throw new Error(`engine: the failure handler of ${cur.outbox[digest].type} issued documents; it opens duties`)\n cur = r.state\n events.push(...(r.events ?? []))\n if (r.duties?.length) {\n const duties = { ...cur.duties }\n for (const d of r.duties) if (!Object.hasOwn(duties, d.id)) duties[d.id] = d\n cur = { ...cur, duties }\n }\n }\n return { state: cur, events }\n }\n\n #itemOf (state: Readonly<HolderState>, digest: string): OutboxItem {\n if (!Object.hasOwn(state.outbox, digest)) throw new Error(`engine: journaled outbound ${digest} is missing from the outbox`)\n return state.outbox[digest]\n }\n\n #outboundOf (state: Readonly<HolderState>, digest: string): Outbound {\n const it = this.#itemOf(state, digest)\n return structuredClone({ digest, envelope: it.envelope, type: it.type, threadId: it.threadId, recipient: it.recipient, attempt: it.attempt })\n }\n\n // ── built-ins ────────────────────────────────────────────────────────\n\n #tickDef (): InternalDef {\n const policy = (): Policy => this.#policy\n const retainers = () => this.#retain\n const keepers = () => this.#keepKeys\n return {\n human: false,\n apply (state, _p, _input, when) {\n const retention = policy().retentionMs\n let dropped = false\n const keep = <T>(rec: Record<string, T>, live: (x: T, key: string) => boolean): Record<string, T> => {\n const out: Record<string, T> = {}\n for (const [k, v] of Object.entries(rec)) { if (live(v, k)) out[k] = v; else dropped = true }\n return out\n }\n // effects leave with their acks (Delivery 4.2); prompts at expiry; the\n // act journal after the retention\n const effects = keep(state.effects, (x) => x.expiresAt > when)\n const prompts = keep(state.prompts, (x) => x.expiresAt === undefined || x.expiresAt > when)\n const acts = keep(state.acts, (x) => x.at + retention > when)\n // terminal outbox items, the retention after their last step, unless a\n // kept journal entry still answers with them (replay needs the item)\n const journaled = new Set(Object.values(acts).flatMap((a) => a.outboundDigests))\n const outbox = keep(state.outbox, (it, digest) => {\n const t = triasOf(it)\n if (t !== 'delivered' && t !== 'failed') return true\n const last = it.history.length ? it.history[it.history.length - 1].at : 0\n return last + retention > when || journaled.has(digest)\n })\n let next: HolderState = dropped ? { ...state, effects, prompts, acts, outbox } : state as HolderState\n // the modules' own retention, on what the engine's left\n for (const r of retainers()) {\n const after = r(next, when)\n if (after.effects !== next.effects) throw new Error('engine: a module\\'s retain wrote the effect cache')\n next = after\n }\n // addresses (Delivery §5), on what the retention left, so a key whose\n // last claim left in this tick leaves with it: a key not shown for the\n // retention, and the own rkid of no live tuple, becomes a tombstone —\n // its id alone, kept forever; tombstones never shrink\n const held = next\n const live = new Set<string>()\n for (const r of Object.values(held.relationships)) for (const t of r.tuples) if (!t.deactivated) live.add(t.rkid)\n // and the rkids a module still needs (a deactivated prior whose continuity flow is open)\n for (const k of keepers()) for (const rkid of k(held)) live.add(rkid)\n const tombstones = [...held.addresses.tombstones]\n let gone = false\n const keys: HolderState['addresses']['keys'] = {}\n for (const [rkid, k] of Object.entries(held.addresses.keys)) {\n if (k.lastShown + retention > when || live.has(rkid)) { keys[rkid] = k; continue }\n gone = true\n // a member key (group/…) is an identity context, not a delivery\n // address of Delivery §5: it leaves without a tombstone, so the same\n // derivation can serve the same group again (a re-invitation)\n if (!k.label.startsWith('group/') && !tombstones.includes(rkid)) tombstones.push(rkid)\n }\n if (gone) next = { ...held, addresses: { keys, tombstones } }\n return { state: next } // unchanged: the engine still commits a raised lastWhen\n },\n }\n }\n\n /** The duties a resume plans to run, in fixed order (dueAt, then id),\n * and the registered kinds met at an unknown version. Each planned\n * duty is checked again against the current state right before its\n * handler runs (#resumeDef). */\n #dutyPlan (state: Readonly<HolderState>, when: Millis): { run: Array<{ duty: Duty, h: DutyHandler }>, unsupported: Duty[] } {\n const order = Object.values(state.duties).sort((a, b) => (dutyDue(a) - dutyDue(b)) || (a.id < b.id ? -1 : a.id > b.id ? 1 : 0))\n const run: Array<{ duty: Duty, h: DutyHandler }> = []\n const unsupported: Duty[] = []\n for (const duty of order) {\n const h = this.#duties.get(duty.kind)\n if (!h) continue // a kind no module here registers: kept, silent\n if (duty.v !== h.v) { unsupported.push(duty); continue }\n if (dutyRunnable(duty, h, state, when)) run.push({ duty, h })\n }\n return { run, unsupported }\n }\n\n #resumeDef (): InternalDef {\n const expiryAfter = (st: Readonly<HolderState>, w: Millis): Millis | undefined => this.#nextExpiry(st, w)\n const policy = (): Policy => this.#policy\n const plan = (state: Readonly<HolderState>, when: Millis) => this.#dutyPlan(state, when)\n const handlers = (): ReadonlyMap<string, DutyHandler> => this.#duties\n const sweeps = (): ReadonlyMap<string, SweepHandler> => this.#sweeps\n const failed = (st: HolderState, digests: readonly string[], when: Millis) => this.#failed(st, digests, when)\n const ownRetries = (): ReadonlySet<string> => this.#ownRetries\n return {\n human: false,\n // the due duties' and the sweeps' preparations, against the snapshot apply will see\n async prepare (ctx) {\n const values: Record<string, unknown> = {}\n for (const { duty, h } of plan(ctx.snapshot, ctx.when).run) if (h.prepare) values[duty.id] = await h.prepare(ctx, duty)\n const swept: Record<string, unknown> = {}\n for (const [name, sw] of sweeps()) swept[name] = await sw.prepare(ctx)\n return { duties: values, sweeps: swept }\n },\n apply (state, prepared, _input, when) {\n const p = policy()\n const outbox: Record<string, OutboxItem> = { ...state.outbox }\n const emit: Outbound[] = []\n const events: EventDraft[] = []\n const gaveUp: string[] = []\n let nextDueAt: Millis | undefined\n const due = (t: Millis): void => { nextDueAt = nextDueAt === undefined ? t : Math.min(nextDueAt, t) }\n // 1 — the outbox, by due time, then digest\n const order = Object.keys(state.outbox).sort((a, b) =>\n ((state.outbox[a].nextAttemptAt ?? 0) - (state.outbox[b].nextAttemptAt ?? 0)) || (a < b ? -1 : a > b ? 1 : 0))\n for (const digest of order) {\n const it = state.outbox[digest]\n const trias = triasOf(it)\n if (trias === 'delivered' || trias === 'failed') continue\n // the horizon applies to every non-terminal item: held, accepted or not\n const first = it.history.length ? it.history[0].at : when\n const expiry = Math.min(first + p.horizonMs, Number.MAX_SAFE_INTEGER)\n if (when >= expiry) {\n const { nextAttemptAt: _, ...rest } = it\n outbox[digest] = { ...rest, history: [...it.history, { status: 'failed', at: when, reason: 'expired-by-adapter-policy' }] }\n events.push({ type: 'delivery.status', digest, threadId: it.threadId, status: 'failed' })\n gaveUp.push(digest)\n continue\n }\n due(expiry)\n // never re-emitted: an accepted item (the service has it) and one the\n // adapter holds (awaiting-transport, until it reports again)\n if (trias === 'accepted' || it.history[it.history.length - 1]?.status === 'awaiting-transport') continue\n // a type its module re-issues itself is never reproduced (Trust 6710)\n if (ownRetries().has(it.type)) continue\n if (it.nextAttemptAt !== undefined && it.nextAttemptAt > when) { due(it.nextAttemptAt); continue }\n const attempt = it.attempt + 1\n const nextAttemptAt = dueAt(when, p.backoff(attempt))\n outbox[digest] = { ...it, attempt, nextAttemptAt, history: [...it.history, { status: 'submitted', at: when, attempt }] }\n emit.push(structuredClone({ digest, envelope: it.envelope, type: it.type, threadId: it.threadId, recipient: it.recipient, attempt }))\n due(nextAttemptAt)\n }\n // 2 — duties, in the plan's order, each on the state the one before\n // left and checked against it right before its handler: still there\n // at the handler's version, due, its awaited head still holding. A\n // prepared duty whose data changed since its preparation is deferred\n // to the next resume, which prepares it afresh (due at once)\n const { run, unsupported } = plan(state, when)\n for (const d of unsupported) events.push({ type: 'duty.unsupported', dutyId: d.id, kind: d.kind, v: d.v })\n // the outbox changed only by a re-emission or a give-up (an event so far)\n let cur: HolderState = !emit.length && !events.length ? state as HolderState : { ...state, outbox }\n // the failure handlers of the items given up, in the give-up's transaction\n if (gaveUp.length) { const f = failed(cur, gaveUp, when); cur = f.state; events.push(...f.events) }\n const drafts: OutboundDraft[] = []\n const renames: IdentityRename[] = []\n // the duties whose handler returned Applied (invariants.ts: fulfilment)\n const fulfilled: string[] = []\n // ran and stayed (not-due, refused): id → its record as it ran\n const kept = new Map<string, string>()\n const { duties: values, sweeps: swept } = prepared.value as { duties: Record<string, unknown>, sweeps: Record<string, unknown> }\n for (const { duty, h } of run) {\n if (!Object.hasOwn(cur.duties, duty.id)) continue // fulfilled or dropped meanwhile\n const now = cur.duties[duty.id]\n // another kind or version since the plan: the next resume dispatches it\n if (now.kind !== duty.kind || now.id !== duty.id || now.v !== h.v || !dutyRunnable(now, h, cur, when)) continue // the final pass sets its timer\n if (h.prepare && jcs(now) !== jcs(duty)) continue // prepared on other data\n const r = h.apply(cur, now, Object.freeze({ prepared: Object.freeze({ value: values[duty.id], version: prepared.version, commitSeq: prepared.commitSeq }), backoff: p.backoff }), when)\n if (r === 'not-due' || isRefusal(r)) { kept.set(duty.id, jcs(now)); continue }\n // fulfilled: the duty leaves; what its handler opened is folded into\n // the state at once (an id already open is kept), so the duties\n // after it see it — their drop rules and their dedupe included\n const left = { ...r.state.duties }\n delete left[duty.id]\n for (const d of r.duties ?? []) if (!Object.hasOwn(left, d.id)) left[d.id] = d\n cur = { ...r.state, duties: left }\n fulfilled.push(duty.id)\n drafts.push(...(r.outbound ?? []))\n events.push(...(r.events ?? []))\n renames.push(...(r.renames ?? []))\n }\n // 2b — the sweeps, on the state the duties left; a prepared piece\n // whose inputs moved is skipped and due again at once\n for (const [name, sw] of sweeps()) {\n const r = sw.apply(cur, Object.freeze({ value: swept[name], version: prepared.version, commitSeq: prepared.commitSeq }), when)\n if (r.state.effects !== cur.effects) throw new Error(`engine: the sweep ${name} wrote the effect cache`)\n cur = r.state\n if (r.duties?.length) {\n const all = { ...cur.duties }\n for (const d of r.duties) if (!Object.hasOwn(all, d.id)) all[d.id] = d\n cur = { ...cur, duties: all }\n }\n drafts.push(...(r.outbound ?? []))\n events.push(...(r.events ?? []))\n if (r.deferred) due(when)\n }\n // work a sweep owes now but did not prepare: a divergence the outbox\n // step (a give-up at the horizon) or a duty of this resume created —\n // due at once, prepared by the next resume\n if (cur !== state) {\n for (const sw of sweeps().values()) {\n const had = new Set(sw.pending(state, when))\n if (sw.pending(cur, when).some((k) => !had.has(k))) { due(when); break }\n }\n }\n // the timer from the final duty set, new duties included: a future\n // dueAt, or `when` for work runnable now that did not run (deferred,\n // newly created, newly unblocked); a duty that ran and stayed\n // (not-due, refused) sets none while its record is unchanged since\n // its run — changed by a later duty, it counts like any other\n for (const d of Object.values(cur.duties)) {\n const h = handlers().get(d.kind)\n if (!h || d.v !== h.v || kept.get(d.id) === jcs(d)) continue\n if (dutyDue(d) > when) due(dutyDue(d))\n else if (dutyRunnable(d, h, cur, when)) due(when)\n }\n // the duties' new documents enter the outbox in #run, due at backoff(1)\n if (drafts.length) due(dueAt(when, p.backoff(1)))\n // 3 — acks still unsent (a restart between the receive commit and the\n // send, or no report yet): re-offered byte-identical on the retry\n // policy, by effect digest; at the horizon marked sent by it\n const release: Outbound[] = []\n let effects: HolderState['effects'] | null = null\n for (const d of Object.keys(cur.effects).sort()) {\n const a = cur.effects[d].ack\n if (!a || a.sent) continue\n const expiry = Math.min(a.at + p.horizonMs, Number.MAX_SAFE_INTEGER)\n effects ??= { ...cur.effects }\n if (when >= expiry) {\n const { nextAttemptAt: _, ...rest } = a\n effects[d] = { ...cur.effects[d], ack: { ...rest, sent: true, sentBy: 'horizon' } }\n continue\n }\n due(expiry)\n if (a.nextAttemptAt !== undefined && a.nextAttemptAt > when) { due(a.nextAttemptAt); continue }\n const attempt = a.attempt + 1\n const nextAttemptAt = dueAt(when, p.backoff(attempt))\n effects[d] = { ...cur.effects[d], ack: { ...a, attempt, nextAttemptAt } }\n release.push(ackOutbound(a, attempt))\n due(nextAttemptAt)\n }\n if (effects && jcs(effects) !== jcs(cur.effects)) cur = { ...cur, effects }\n // the expiry work tick does (the timer contract, the header)\n const ex = expiryAfter(cur, when)\n if (ex !== undefined) due(ex)\n return {\n state: cur, emit, events, outbound: drafts, release, detail: { fulfilled },\n ...(renames.length ? { renames } : {}),\n ...(nextDueAt !== undefined ? { nextDueAt } : {}),\n }\n },\n }\n }\n\n #reportDef (): InternalDef {\n const failed = (st: HolderState, digests: readonly string[], when: Millis) => this.#failed(st, digests, when)\n return {\n human: false,\n apply (state, _p, report: DeliveryReport, when) {\n if (!Object.hasOwn(state.outbox, report.digest)) {\n // an ack (outbox-less): any report says the app handed it over\n const eff = Object.keys(state.effects).find((d) => state.effects[d].ack?.digest === report.digest)\n if (eff === undefined) return { ok: false, code: 'unknown-digest' }\n const e = state.effects[eff]\n if (e.ack!.sent) return { state: state as HolderState }\n const { nextAttemptAt: _, ...ack } = e.ack!\n return { state: { ...state, effects: { ...state.effects, [eff]: { ...e, ack: { ...ack, sent: true, sentBy: 'report' } } } } }\n }\n const it = state.outbox[report.digest]\n const trias = triasOf(it)\n const had = (s: OutboxStep['status']): boolean => it.history.some((x) => x.status === s)\n const same = { state: state as HolderState }\n let step: OutboxStep\n switch (report.status) {\n case 'awaiting-transport': {\n const last = it.history[it.history.length - 1]\n if (trias !== 'submitted') return same // no step back before the trias\n if (last?.status === 'awaiting-transport' && last.reason === report.reason) return same\n step = { status: 'awaiting-transport', at: when, reason: report.reason }\n break\n }\n case 'accepted':\n if (had('accepted') || trias !== 'submitted') return same\n step = { status: 'accepted', at: when }\n break\n case 'delivered': {\n // lateness is the holder's own history: delivered after failed\n // (its own give-up or the adapter's) is late, whatever the flag says\n const m = markDelivered(state, report.digest, when)\n return m.event ? { state: { ...state, outbox: m.outbox }, events: [m.event] } : same\n }\n case 'failed':\n if (had('failed') || trias === 'delivered') return same\n step = report.reason === 'rejected-by-receiver'\n ? { status: 'failed', at: when, reason: report.reason, code: report.code }\n : { status: 'failed', at: when, reason: report.reason }\n break\n default:\n throw new TypeError(`unknown report status ${String((report as { status?: unknown }).status)}`)\n }\n const base = step.status === 'awaiting-transport' ? it : (({ nextAttemptAt: _, ...rest }) => rest)(it)\n const outbox = { ...state.outbox, [report.digest]: { ...base, history: [...it.history, step] } }\n const events: EventDraft[] = step.status === 'awaiting-transport' ? [] : [{\n type: 'delivery.status', digest: report.digest, threadId: it.threadId, status: step.status,\n }]\n if (step.status === 'failed') {\n const f = failed({ ...state, outbox }, [report.digest], when)\n return { state: f.state, events: [...events, ...f.events] }\n }\n return { state: { ...state, outbox }, events }\n },\n }\n }\n\n #receiveDef (): InternalDef {\n const tasks = (): ReadonlyMap<string, TaskHandler> => this.#tasks\n const acks = (): ReadonlyMap<string, AckHandler> => this.#acks\n const policy = (): Policy => this.#policy\n return {\n human: false,\n prepare: (ctx, env) => prepareReceive(ctx, env, tasks()),\n apply (state, prepared, _env, when) {\n const plan = prepared.value as ReceivePlan\n const cached = (ack: Effect['ack']): Effect => ({ ack, expiresAt: Math.min(when + policy().retentionMs, Number.MAX_SAFE_INTEGER) })\n switch (plan.kind) {\n case 'failed': return { halt: true, detail: plan.result }\n case 'duplicate': {\n // the stored ack, byte-identical; a terminal document has none\n // (its outbound attempt is one past the schedule's, which it does not move)\n const a = state.effects[plan.digest].ack\n return { state: state as HolderState, release: a ? [ackOutbound(a, a.attempt + 1)] : [], detail: { disposition: 'duplicate-known', digest: plan.digest } }\n }\n case 'ack': {\n // terminal: the sender-status update and its cache entry, no ack;\n // the issuing module's ack handler runs in the same transaction\n const m = markDelivered(state, plan.ref, when)\n let next: HolderState = { ...state, outbox: m.outbox }\n const events: EventDraft[] = m.event ? [m.event] : []\n const h = acks().get(state.outbox[plan.ref].type)\n if (h) {\n const r = h(next, plan.ref, when)\n if (r.state.effects !== next.effects) throw new Error(`engine: the ack handler of ${state.outbox[plan.ref].type} wrote the effect cache`)\n next = r.state\n events.push(...(r.events ?? []))\n }\n return {\n state: { ...next, effects: { ...next.effects, [plan.digest]: cached(null) } },\n events,\n detail: { disposition: 'unique', digest: plan.digest, type: ACK_TYPE, ref: plan.ref },\n }\n }\n case 'task': {\n const h = tasks().get(plan.type)!\n const r = h.apply(state, handlerPrepared(prepared, plan.value), plan.doc, plan.arrival)\n if (isTaskRefusal(r)) {\n const failedDetail = { disposition: 'failed', reason: r.reason, stage: 9, digest: plan.digest, ...(r.ref !== undefined ? { ref: r.ref } : {}) }\n if (!r.latch) return { halt: true, detail: failedDetail }\n // the Encounter latch exception (receive.ts): only the latch commits\n checkLatch(state, r.latch, when)\n return { state: r.latch, detail: failedDetail }\n }\n if (isTaskDiscarded(r)) {\n // a resource-limit discard: its state commits; no cache entry, no ack\n if (r.state.effects !== state.effects) throw new Error(`engine: the handler of ${plan.type} wrote the effect cache`)\n return { state: r.state, detail: { disposition: 'discarded', digest: plan.digest, type: plan.type, reason: r.reason, ...(r.ref !== undefined ? { ref: r.ref } : {}) } }\n }\n if (r.state.effects !== state.effects) throw new Error(`engine: the handler of ${plan.type} wrote the effect cache; the core writes it`)\n return {\n state: { ...r.state, effects: { ...state.effects, [plan.digest]: cached({ ...plan.ack, at: when, attempt: 1, nextAttemptAt: dueAt(when, policy().backoff(1)), sent: false }) } },\n ...(r.outbound ? { outbound: r.outbound } : {}),\n ...(r.events ? { events: r.events } : {}),\n ...(r.duties ? { duties: r.duties } : {}),\n ...(r.renames ? { renames: r.renames } : {}),\n release: [ackOutbound(plan.ack, 1)],\n detail: { disposition: 'unique', digest: plan.digest, type: plan.type, rkid: plan.arrival.rkid },\n }\n }\n }\n },\n }\n }\n\n // ── public surface ───────────────────────────────────────────────────\n\n act (command: string, input: unknown, when: Millis, opts: { actId?: string } = {}): Promise<ActResult> {\n let def: InternalDef | undefined\n let bound: unknown\n let hash: Promise<string> | undefined\n let actId: string | undefined\n try {\n def = this.#commands.get(command)\n if (!def) throw new Error((BUILTIN as readonly string[]).includes(command) ? `${command} is built in: call engine.${command}()` : `unknown command ${command}`)\n checkWhen(when)\n actId = def.human ? opts.actId : undefined\n if (def.human && (typeof actId !== 'string' || actId === '')) return Promise.resolve({ ok: false, code: 'actid-missing' })\n // bound here, synchronously: later changes by the caller reach nothing\n bound = bindInput(input)\n if (def.human) {\n hash = digestOf(this.#crypto.subtle, { command, input: bound })\n hash.catch(() => undefined) // awaited in the queue; no unhandled rejection meanwhile\n }\n } catch (e) { return Promise.reject(e) }\n const d = def\n return this.#enqueue(async () => {\n return actResult(await this.#run(d, { kind: 'act', command }, bound, when, actId, hash === undefined ? undefined : await hash))\n })\n }\n\n tick (when: Millis): Promise<ActResult> {\n try { checkWhen(when) } catch (e) { return Promise.reject(e) }\n return this.#enqueue(async () => {\n return actResult(await this.#run(this.#builtins.tick, { kind: 'tick' }, null, when))\n })\n }\n\n resume (when: Millis): Promise<ResumeResult> {\n try { checkWhen(when) } catch (e) { return Promise.reject(e) }\n return this.#enqueue(async () => {\n const r = await this.#run(this.#builtins.resume, { kind: 'resume' }, null, when)\n if (isHalt(r) || !r.ok) throw new Error('engine: resume does not refuse')\n return { outbound: r.outbound, events: r.events, ...(r.nextDueAt !== undefined ? { nextDueAt: r.nextDueAt } : {}) }\n })\n }\n\n report (report: DeliveryReport, when: Millis): Promise<ActResult> {\n let bound: DeliveryReport\n try { checkWhen(when); bound = bindInput(report) } catch (e) { return Promise.reject(e) }\n return this.#enqueue(async () => {\n return actResult(await this.#run(this.#builtins.report, { kind: 'report', status: bound.status }, bound, when))\n })\n }\n\n receive (env: unknown, when: Millis): Promise<ReceiveResult> {\n try { checkWhen(when) } catch (e) { return Promise.reject(e) }\n // bound at the call like any input; what is not JSON is no envelope\n let bound: unknown\n try { bound = bindInput(env) } catch { bound = null }\n return this.#enqueue(async () => {\n const r = await this.#run(this.#builtins.receive, { kind: 'receive' }, bound, when)\n if (isHalt(r)) return r.detail as ReceiveResult\n if (!r.ok) throw new Error('engine: receive does not refuse')\n if ((r.detail as { disposition?: string } | undefined)?.disposition === 'failed') return r.detail as ReceiveResult // a latch committed\n const d = r.detail as { disposition: 'unique' | 'duplicate-known' | 'discarded', digest: string, type?: string, reason?: 'resource-limit' | 'rejected', ref?: string }\n if (d.disposition === 'discarded') return { disposition: 'discarded', digest: d.digest, type: d.type!, reason: d.reason!, ...(d.ref !== undefined ? { ref: d.ref } : {}) }\n return d.disposition === 'unique'\n ? { disposition: 'unique', digest: d.digest, type: d.type!, outbound: r.outbound, events: r.events, ...(r.nextDueAt !== undefined ? { nextDueAt: r.nextDueAt } : {}) }\n : { disposition: 'duplicate-known', digest: d.digest, outbound: r.outbound }\n })\n }\n\n subscribe (listener: CommitListener): () => void {\n if (typeof listener !== 'function') throw new TypeError('listener must be a function')\n this.#listeners.add(listener)\n return () => { this.#listeners.delete(listener) }\n }\n\n snapshot (): Promise<EngineSnapshot> {\n return this.#enqueue(async () => {\n const { state } = await this.#read()\n return Object.freeze({ state, commitSeq: state.commitSeq })\n })\n }\n}\n\n/**\n * Build an engine over the ports and modules: resolves and probes\n * WebCrypto, freezes the registries (duplicate command names, task URIs\n * or duty kinds throw), and initialises an empty store with the empty\n * state at the current codec.\n */\nexport async function createEngine (ports: EnginePorts, modules: readonly HolderModule[], opts: EngineOptions = {}): Promise<Engine> {\n if (!ports?.store || !ports.keys) throw new TypeError('createEngine needs a store and keys')\n const crypto = await resolveCrypto(ports.crypto)\n const engine = new HolderEngine(ports, crypto, modules, opts)\n await engine.load()\n return engine\n}\n"]}
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,EAAE;AACF,qEAAqE;AACrE,qEAAqE;AACrE,qEAAqE;AACrE,uEAAuE;AACvE,6BAA6B;AAC7B,EAAE;AACF,qEAAqE;AACrE,SAAS;AACT,wEAAwE;AACxE,4CAA4C;AAC5C,yEAAyE;AACzE,uEAAuE;AACvE,0EAA0E;AAC1E,uEAAuE;AACvE,uEAAuE;AACvE,oEAAoE;AACpE,yEAAyE;AACzE,EAAE;AACF,0DAA0D;AAC1D,oEAAoE;AACpE,wEAAwE;AACxE,oEAAoE;AACpE,uEAAuE;AACvE,yDAAyD;AACzD,EAAE;AACF,2DAA2D;AAC3D,wEAAwE;AACxE,yEAAyE;AACzE,mEAAmE;AACnE,sEAAsE;AACtE,2EAA2E;AAC3E,qEAAqE;AACrE,0EAA0E;AAC1E,yEAAyE;AACzE,0EAA0E;AAC1E,uEAAuE;AACvE,qEAAqE;AACrE,2EAA2E;AAC3E,wEAAwE;AACxE,2EAA2E;AAC3E,yEAAyE;AACzE,kEAAkE;AAClE,yEAAyE;AACzE,uEAAuE;AACvE,0EAA0E;AAC1E,wEAAwE;AACxE,qDAAqD;AACrD,iEAAiE;AACjE,gEAAgE;AAChE,uCAAuC;AACvC,sEAAsE;AACtE,6DAA6D;AAC7D,0EAA0E;AAC1E,0EAA0E;AAC1E,yEAAyE;AACzE,uEAAuE;AACvE,+HAA+H;AAC/H,wEAAwE;AACxE,0EAA0E;AAC1E,yEAAyE;AACzE,0EAA0E;AAC1E,yEAAyE;AACzE,uEAAuE;AACvE,0EAA0E;AAC1E,6BAA6B;AAC7B,qEAAqE;AACrE,+CAA+C;AAC/C,uEAAuE;AACvE,sDAAsD;AACtD,yEAAyE;AACzE,2EAA2E;AAC3E,2EAA2E;AAC3E,gEAAgE;AAChE,0EAA0E;AAC1E,2EAA2E;AAC3E,4EAA4E;AAC5E,2EAA2E;AAC3E,6EAA6E;AAC7E,yEAAyE;AACzE,yEAAyE;AACzE,qEAAqE;AACrE,uCAAuC;AACvC,sEAAsE;AACtE,0BAA0B;AAC1B,yEAAyE;AACzE,0EAA0E;AAC1E,4EAA4E;AAC5E,yEAAyE;AACzE,2EAA2E;AAC3E,yEAAyE;AACzE,0EAA0E;AAC1E,2EAA2E;AAC3E,0EAA0E;AAC1E,2EAA2E;AAC3E,2EAA2E;AAC3E,sEAAsE;AACtE,uEAAuE;AACvE,4EAA4E;AAC5E,0EAA0E;AAC1E,2EAA2E;AAC3E,2EAA2E;AAC3E,uEAAuE;AACvE,0EAA0E;AAC1E,0EAA0E;AAC1E,2EAA2E;AAC3E,iDAAiD;AACjD,4EAA4E;AAC5E,qEAAqE;AACrE,2EAA2E;AAC3E,2EAA2E;AAC3E,6EAA6E;AAC7E,4EAA4E;AAC5E,yEAAyE;AACzE,uEAAuE;AACvE,yEAAyE;AACzE,uEAAuE;AACvE,qEAAqE;AACrE,0EAA0E;AAC1E,wEAAwE;AACxE,uEAAuE;AACvE,yEAAyE;AACzE,sEAAsE;AACtE,4EAA4E;AAC5E,0DAA0D;AAC1D,sEAAsE;AACtE,2EAA2E;AAC3E,yEAAyE;AACzE,yEAAyE;AACzE,qEAAqE;AACrE,0EAA0E;AAC1E,wEAAwE;AACxE,0EAA0E;AAC1E,4DAA4D;AAC5D,uEAAuE;AACvE,wEAAwE;AACxE,yEAAyE;AACzE,4EAA4E;AAC5E,gEAAgE;AAChE,sEAAsE;AACtE,2EAA2E;AAC3E,2EAA2E;AAC3E,+CAA+C;AAC/C,6EAA6E;AAC7E,6EAA6E;AAC7E,2EAA2E;AAC3E,qEAAqE;AACrE,uEAAuE;AACvE,2EAA2E;AAC3E,yEAAyE;AACzE,0EAA0E;AAC1E,wEAAwE;AACxE,oBAAoB;AACpB,2EAA2E;AAC3E,8CAA8C;AAC9C,kEAAkE;AAClE,4EAA4E;AAC5E,0EAA0E;AAC1E,sEAAsE;AACtE,4EAA4E;AAC5E,yEAAyE;AACzE,2EAA2E;AAC3E,0EAA0E;AAC1E,4BAA4B;AAC5B,yEAAyE;AACzE,yEAAyE;AACzE,6EAA6E;AAC7E,4EAA4E;AAC5E,8EAA8E;AAC9E,2DAA2D;AAC3D,0EAA0E;AAC1E,0EAA0E;AAC1E,0EAA0E;AAC1E,4EAA4E;AAC5E,wEAAwE;AACxE,4CAA4C;AAC5C,wEAAwE;AACxE,mEAAmE;AACnE,wEAAwE;AACxE,uEAAuE;AACvE,6EAA6E;AAC7E,oEAAoE;AACpE,uEAAuE;AACvE,wEAAwE;AACxE,qEAAqE;AACrE,sDAAsD;AACtD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAI1D,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEjE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAE5C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AACzG,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAiE9C;;;;oCAIoC;AACpC,SAAS,UAAU,CAAE,IAA2B,EAAE,KAA4B,EAAE,IAAY;IAC1F,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAA6B,EAAE,CAAC;QAC9D,IAAI,CAAC,KAAK,WAAW;YAAE,SAAQ;QAC/B,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,EAAE,CAAC,CAAA;IAClF,CAAC;IACD,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,KAAK,CAAC,SAAS,CAAA;IAC7C,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAA0C,EAAE,CAAC;QACxE,IAAI,CAAC,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,EAAE,CAAC,CAAA;IAC3G,CAAC;IACD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;QAChG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,EAAE,CAAC,CAAA;IAC3G,CAAC;IACD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,EAAE,CAAC,CAAA;IACjJ,CAAC;AACH,CAAC;AAuND,0EAA0E;AAE1E,MAAM,GAAG,GAAG,UAAU,CAAA;AAEtB,iEAAiE;AACjE,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3C,kCAAkC;IAClC,OAAO,EAAE,CAAC,OAAe,EAAU,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;IACrG,yEAAyE;IACzE,SAAS,EAAE,CAAC,GAAG,GAAG;IAClB,cAAc,EAAE,CAAC;IACjB,oDAAoD;IACpD,WAAW,EAAE,EAAE,GAAG,GAAG;CACtB,CAAC,CAAA;AAEF,2DAA2D;AAC3D,MAAM,WAAW,GAAG,GAAG,CAAA;AACvB,MAAM,WAAW,GAAG,EAAE,GAAG,GAAG,CAAA;AAE5B,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAU,CAAA;AAChE,MAAM,QAAQ,GAAG,yCAAyC,CAAA;AAE1D,0EAA0E;AAE1E,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAU,CAAA;AAEvF,MAAM,MAAM,GAAG,CAAC,CAAa,EAAE,CAAa,EAAc,EAAE,GAAG,MAAM,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA,CAAC,CAAC,CAAA;AAEtJ,iFAAiF;AACjF,KAAK,UAAU,aAAa,CAAE,CAAgB;IAC5C,MAAM,CAAC,GAAG,CAAC,IAAK,UAAU,CAAC,MAAmC,CAAA;IAC9D,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,UAAU,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,UAAU;QAAE,MAAM,IAAI,sBAAsB,CAAC,CAAC,QAAQ,EAAE,GAAG,UAAU,CAAC,CAAC,CAAA;IAC1I,MAAM,CAAC,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACpC,MAAM,MAAM,GAA8D;QACxE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC;QAC9F,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,YAAY,CAAC,CAAC;QACjG,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,YAAY,CAAC,CAAC;QAChE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC;QACrF,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC;QAC/E,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;KACxC,CAAA;IACD,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC;QAAC,MAAM,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAAC,OAAO,IAAI,CAAA;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAA;IAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5H,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IACnD,IAAI,OAAO,CAAC,MAAM;QAAE,MAAM,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAA;IAC7D,OAAO,CAAiB,CAAA;AAC1B,CAAC;AAED,MAAM,EAAE,GAAG,IAAI,WAAW,EAAE,CAAA;AAC5B,6FAA6F;AAC7F,MAAM,QAAQ,GAAG,KAAK,EAAE,CAAe,EAAE,CAAU,EAAmB,EAAE,CACtE,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAEnH,qFAAqF;AACrF,MAAM,aAAa,GAAG,CAAC,CAAU,EAAW,EAAE;IAC5C,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAA;IACjD,IAAI,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,CAAA;IACxD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACrB,IAAI,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,CAAA;QACnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAAE,OAAO,CAAC,CAAA;QAC1D,OAAO,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;IAC7B,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;IACtC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,CAAC,SAAS;QAAE,OAAO,CAAC,CAAA;IAC1D,IAAI,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM;QAAE,OAAO,CAAC,CAAA;IAC5E,uEAAuE;IACvE,uEAAuE;IACvE,MAAM,GAAG,GAA4B,EAAE,CAAA;IACvC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,IAAI,CAAC,KAAK,SAAS;YAAE,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAA;IACvI,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED;;;wEAGwE;AACxE,MAAM,SAAS,GAAG,CAAI,CAAI,EAAK,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAM,CAAC,CAAA;AAE7G,gEAAgE;AAChE,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,KAAa,EAAU,EAAE;IACpD,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IACjE,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAA;AACpD,CAAC,CAAA;AAED,gFAAgF;AAChF,SAAS,KAAK,CAAoB,IAAO,EAAE,KAAsC,EAAE,IAAoB,EAAE,UAAgC;IACvI,MAAM,GAAG,GAA4B,EAAE,CAAA;IACvC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,GAAG,IAAe,EAAE,EAAE;YACpC,IAAI,CAAU,CAAA;YACd,IAAI,CAAC;gBAAC,CAAC,GAAG,MAAO,IAAI,CAAC,CAAC,CAA2C,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YAAC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBAChG,MAAM,CAAC,YAAY,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;YAChG,CAAC;YACD,OAAO,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACvC,CAAC,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAM,CAAA;AAChC,CAAC;AAED,MAAM,GAAG,GAAG,CAAC,CAAM,EAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAA;AAExD,MAAM,SAAS,GAAG,CAAC,KAA4B,EAAc,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE;IACvE,IAAI,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;IAC3E,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;IAC5E,MAAM,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACpC,OAAO,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAA;AAC/F,CAAC,CAAA;AAED,MAAM,SAAS,GAAG,CAAC,CAAU,EAAgB,EAAE,CAAE,CAAa,EAAE,EAAE,KAAK,KAAK,CAAA;AAE5E,iEAAiE;AACjE,SAAS,UAAU,CAAE,OAA+B,EAAE,OAAkC;IACtF,IAAI,GAAG,GAAkC,IAAI,CAAA;IAC7C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7C,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAA;QACb,IAAI,CAAC,CAAC;YAAE,SAAQ;QAChB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,EAAE,GAAG,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAA;QACzL,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG;YAAE,CAAC,GAAG,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAA;IACjE,CAAC;IACD,OAAO,GAAG,IAAI,OAAO,CAAA;AACvB,CAAC;AAED,MAAM,SAAS,GAAG,CAAC,IAAa,EAAQ,EAAE;IACxC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAK,IAAe,GAAG,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,uDAAuD,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACrJ,CAAC,CAAA;AAyBD,uDAAuD;AACvD,MAAM,OAAO,GAAG,CAAC,CAAO,EAAU,EAAE,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAE5F,4FAA4F;AAC5F,MAAM,YAAY,GAAG,CAAC,CAAO,EAAE,CAAc,EAAE,KAA4B,EAAE,IAAY,EAAW,EAAE;IACpG,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI;QAAE,OAAO,KAAK,CAAA;IACnC,MAAM,MAAM,GAAI,CAA6B,CAAC,SAAS,CAAA;IACvD,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,CAAA;AAC1E,CAAC,CAAA;AAED,MAAM,MAAM,GAAG,CAAC,CAAU,EAAa,EAAE,CAAE,CAAU,EAAE,IAAI,KAAK,IAAI,CAAA;AAEpE,MAAM,SAAS,GAAG,CAAC,CAAY,EAAa,EAAE;IAC5C,IAAI,MAAM,CAAC,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;IAC9D,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;AAC1I,CAAC,CAAA;AAID,0EAA0E;AAE1E,MAAM,YAAY;IACP,QAAQ,CAAoB;IAC5B,MAAM,CAAO;IACb,MAAM,CAAa;IAC5B,kEAAkE;IACzD,KAAK,CAAa;IAClB,IAAI,CAAM;IACV,OAAO,CAAS;IAChB,OAAO,CAAc;IACrB,QAAQ,CAAS;IACjB,OAAO,CAAQ;IACf,SAAS,CAAkC;IAC3C,MAAM,CAAkC;IACxC,OAAO,CAAkC;IACzC,OAAO,CAAmC;IAC1C,KAAK,CAAiC;IACtC,SAAS,CAAqC;IAC9C,WAAW,CAAqB;IAChC,SAAS,CAAiF;IAC1F,OAAO,CAA4E;IACnF,SAAS,CAAsD;IAC/D,UAAU,CAAmE;IAC7E,SAAS,CAAuD;IAChE,MAAM,CAAyB;IAC/B,WAAW,CAA8B;IACzC,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAA;IAC/C,MAAM,GAAqB,OAAO,CAAC,OAAO,EAAE,CAAA;IAC5C,2EAA2E;IAC3E,UAAU,GAAmF,IAAI,CAAA;IAEjG,YAAa,KAAkB,EAAE,MAAoB,EAAE,OAAgC,EAAE,OAAsB,EAAE;QAC/G,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,UAAU;YAAE,MAAM,IAAI,SAAS,CAAC,0BAA0B,CAAC,CAAA;QACjH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,UAAU;YAAE,MAAM,IAAI,SAAS,CAAC,+BAA+B,CAAC,CAAA;QAChI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAA;QAClC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAA;QACzB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACnB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;QACrB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,CAAA;QACtD,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAA;QAC3B,MAAM,SAAS,GAAG,CAAC,CAAC,SAAS,IAAI,eAAe,CAAC,SAAS,CAAA;QAC1D,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,eAAe,CAAC,OAAO,CAAA;QACpD,MAAM,cAAc,GAAG,CAAC,CAAC,cAAc,IAAI,eAAe,CAAC,cAAc,CAAA;QACzE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,WAAW,IAAI,SAAS,GAAG,WAAW;YAAE,MAAM,IAAI,UAAU,CAAC,8DAA8D,SAAS,EAAE,CAAC,CAAA;QAC3L,IAAI,OAAO,OAAO,KAAK,UAAU;YAAE,MAAM,IAAI,UAAU,CAAC,kCAAkC,CAAC,CAAA;QAC3F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;YACpB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;gBAAE,MAAM,IAAI,UAAU,CAAC,iBAAiB,CAAC,+CAA+C,CAAC,EAAE,CAAC,CAAA;QACvJ,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,cAAc,GAAG,CAAC;YAAE,MAAM,IAAI,UAAU,CAAC,iDAAiD,CAAC,CAAA;QACxI,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,WAAW,EAAE,SAAS,CAAC,EAAE,CAAC,CAAA;QACnI,MAAM,UAAU,GAAG,CAAC,CAAa,EAAc,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;QAC1I,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,CAAA;QAC7E,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK;YAC3D,gBAAgB,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,kBAAkB,CAAC,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC,gBAAgB;SACvG,CAAC,CAAA;QACF,IAAI,KAAK,CAAC,GAAG;YAAE,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAA;QAC5E,IAAI,KAAK,CAAC,MAAM;YAAE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,aAAa,EAAE,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAA;QAE7F,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAA;QAC/C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAA;QAC5C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAA;QAC7C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAwB,CAAA;QAC9C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAsB,CAAA;QAC1C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA0B,CAAA;QAClD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAA;QACpC,MAAM,QAAQ,GAA4E,EAAE,CAAA;QAC5F,MAAM,MAAM,GAAuE,EAAE,CAAA;QACrF,MAAM,QAAQ,GAAiD,EAAE,CAAA;QACjE,MAAM,SAAS,GAA8D,EAAE,CAAA;QAC/E,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAA;QAC/B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,IAAI;gBAAE,MAAM,IAAI,SAAS,CAAC,uBAAuB,CAAC,CAAA;YAC7F,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;YACpE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YACjB,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC3D,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAK,OAA6B,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,YAAY,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;gBACxI,IAAI,OAAO,GAAG,EAAE,KAAK,KAAK,UAAU,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,SAAS;oBAAE,MAAM,IAAI,SAAS,CAAC,WAAW,IAAI,YAAY,CAAC,CAAC,IAAI,yBAAyB,CAAC,CAAA;gBACvJ,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAA;YAC/C,CAAC;YACD,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;gBACrD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,GAAG,YAAY,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;gBACvG,IAAI,GAAG,KAAK,QAAQ;oBAAE,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,mDAAmD,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;gBACzG,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,YAAY,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;gBAC/E,IAAI,OAAO,CAAC,EAAE,KAAK,KAAK,UAAU,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,UAAU;oBAAE,MAAM,IAAI,SAAS,CAAC,QAAQ,GAAG,YAAY,CAAC,CAAC,IAAI,0BAA0B,CAAC,CAAA;gBAClJ,IAAI,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,UAAU;oBAAE,MAAM,IAAI,SAAS,CAAC,QAAQ,GAAG,YAAY,CAAC,CAAC,IAAI,uDAAuD,CAAC,CAAA;gBAC7J,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU;oBAAE,MAAM,IAAI,SAAS,CAAC,QAAQ,GAAG,YAAY,CAAC,CAAC,IAAI,+BAA+B,CAAC,CAAA;gBACjJ,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC;oBAAE,MAAM,IAAI,SAAS,CAAC,QAAQ,GAAG,YAAY,CAAC,CAAC,IAAI,+DAA+D,CAAC,CAAA;gBAC/L,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;YACzC,CAAC;YACD,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;gBACvD,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,YAAY,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;gBAClF,IAAI,OAAO,CAAC,EAAE,KAAK,KAAK,UAAU;oBAAE,MAAM,IAAI,SAAS,CAAC,QAAQ,IAAI,YAAY,CAAC,CAAC,IAAI,eAAe,CAAC,CAAA;gBACtG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;oBAAE,MAAM,IAAI,SAAS,CAAC,QAAQ,IAAI,YAAY,CAAC,CAAC,IAAI,2CAA2C,CAAC,CAAA;gBACzI,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,UAAU,KAAK,UAAU;oBAAE,MAAM,IAAI,SAAS,CAAC,QAAQ,IAAI,YAAY,CAAC,CAAC,IAAI,kCAAkC,CAAC,CAAA;gBAC3J,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;YAC3C,CAAC;YACD,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;gBACvD,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,YAAY,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;gBACnF,IAAI,OAAO,CAAC,EAAE,KAAK,KAAK,UAAU,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU;oBAAE,MAAM,IAAI,SAAS,CAAC,SAAS,IAAI,YAAY,CAAC,CAAC,IAAI,oCAAoC,CAAC,CAAA;gBAClM,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;YAC3C,CAAC;YACD,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;gBACpD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,GAAG,YAAY,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;gBACvG,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,YAAY,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;gBACrF,IAAI,OAAO,CAAC,KAAK,UAAU;oBAAE,MAAM,IAAI,SAAS,CAAC,eAAe,GAAG,YAAY,CAAC,CAAC,IAAI,sBAAsB,CAAC,CAAA;gBAC5G,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;YAClB,CAAC;YACD,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC;gBACxD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,GAAG,YAAY,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;gBACvG,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,YAAY,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;gBAC7F,IAAI,OAAO,CAAC,KAAK,UAAU;oBAAE,MAAM,IAAI,SAAS,CAAC,mBAAmB,GAAG,YAAY,CAAC,CAAC,IAAI,sBAAsB,CAAC,CAAA;gBAChH,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;YACtB,CAAC;YACD,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC;gBACrC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,GAAG,YAAY,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;gBACvG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACrB,CAAC;YACD,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC7B,IAAI,OAAO,CAAC,CAAC,QAAQ,KAAK,UAAU;oBAAE,MAAM,IAAI,SAAS,CAAC,oBAAoB,CAAC,CAAC,IAAI,sBAAsB,CAAC,CAAA;gBAC3G,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;YAC3B,CAAC;YACD,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC3B,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,UAAU;oBAAE,MAAM,IAAI,SAAS,CAAC,kBAAkB,CAAC,CAAC,IAAI,sBAAsB,CAAC,CAAA;gBACvG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;YACvB,CAAC;YACD,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC9B,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,UAAU;oBAAE,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC,IAAI,sBAAsB,CAAC,CAAA;gBAC7G,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;YAC7B,CAAC;YACD,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC7B,IAAI,OAAO,CAAC,CAAC,QAAQ,KAAK,UAAU;oBAAE,MAAM,IAAI,SAAS,CAAC,oBAAoB,CAAC,CAAC,IAAI,sBAAsB,CAAC,CAAA;gBAC3G,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;YAC3B,CAAC;QACH,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;QACzB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACnB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;QACrB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;QACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;QACjB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;QACzB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAA;QAC7B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QACxC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QAC1C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACpC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QACxC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;QAC5I,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;YAC5B,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7C,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACvC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACzC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;SAC1C,CAAC,CAAA;IACJ,CAAC;IAED,wEAAwE;IAExE,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC;YAAC,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;QAAC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YAAC,MAAM,IAAI,UAAU,CAAC,YAAY,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;QAAC,CAAC;IACnH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;QAClC,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;QAC5E,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAA;IAC9E,CAAC;IAED,uFAAuF;IACvF,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;QAClC,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAAC,OAAM;QAAC,CAAC;QAC5D,IAAI,KAAc,CAAA;QAClB,IAAI,CAAC;YAAC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;gBAAE,OAAM;QAAC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YAAC,KAAK,GAAG,CAAC,CAAA;QAAC,CAAC;QAC5G,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA,CAAG,wDAAwD;QAC9F,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI;YAAE,MAAM,IAAI,UAAU,CAAC,cAAc,EAAE,gCAAgC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;QAC3G,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC;IAED,wEAAwE;IAExE,QAAQ,CAAK,EAAoB;QAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAA,CAAC,CAAC,CAAC,CAAA;QAC7E,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;QACtD,OAAO,CAAC,CAAA;IACV,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAA;QACzB,IAAI,CAAC,CAAC;YAAE,OAAM;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;QACpC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI;YAClC,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,SAAS,CAAC,CAAA;QAChH,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;QACtB,IAAI,MAAM;YAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;IACnD,CAAC;IAED,SAAS,CAAE,SAAc,EAAE,MAAqB;QAC9C,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACrC,iFAAiF;YACjF,IAAI,CAAC;gBACH,MAAM,CAAC,GAAY,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAA;gBAC3C,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAQ,CAAsB,CAAC,IAAI,KAAK,UAAU;oBAAG,CAAsB,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;YACzJ,CAAC;YAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,wEAAwE;IAExE,yFAAyF;IACzF,KAAK,CAAC,IAAI,CAAE,GAAgB,EAAE,EAAY,EAAE,KAAc,EAAE,IAAY,EAAE,KAAc,EAAE,SAAkB;QAC1G,iFAAiF;QACjF,IAAI,UAA8B,CAAA;QAClC;gFACwE;QACxE,IAAI,MAAM,GAAG,CAAC,CAAA;QACd,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,EAAE,EAAE,CAAC;YACxE,qBAAqB;YACrB,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;YAC7C,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;YACzC,IAAI,GAAG,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAM,CAAC,EAAE,CAAC;gBACnD,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,KAAM,CAAC,CAAA;gBAC9B,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS;oBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAA;gBAC7E,MAAM,MAAM,GAAkB,eAAe,CAAC,GAAG,CAAC,MAAM,CAAkB,CAAA;gBAC1E,qEAAqE;gBACrE,8DAA8D;gBAC9D,oEAAoE;gBACpE,+DAA+D;gBAC/D,2CAA2C;gBAC3C,MAAM,IAAI,GAAa,EAAE,CAAA;gBACzB,MAAM,OAAO,GAAa,EAAE,CAAA;gBAC5B,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC;oBACpC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;oBACjC,MAAM,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAA;oBACrB,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,QAAQ;wBAAE,SAAQ;oBACjD,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC;wBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;wBAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBAC9D,CAAC;gBACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oBACnB,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAA;oBAC7E,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS;wBAAE,UAAU,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,SAAS,CAAC,CAAA;oBAC5I,iEAAiE;oBACjE,wEAAwE;oBACxE,IAAI,MAAM,EAAE,IAAI,GAAG,CAAC,eAAe,CAAC,MAAM;wBAAE,OAAO,EAAE,CAAA;oBACrD,SAAQ;gBACV,CAAC;gBACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;YACxK,CAAC;YACD,sCAAsC;YACtC,MAAM,GAAG,GAAe,MAAM,CAAC,MAAM,CAAC;gBACpC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI;gBAC5H,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC;aAC1D,CAAC,CAAA;YACF,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;YACrE,MAAM,QAAQ,GAAa,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAA;YACxF,2BAA2B;YAC3B,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,CAAA;YAC/C,IAAI,MAAM,CAAC,CAAC,CAAC;gBAAE,OAAO,CAAC,CAAA;YACvB,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjB,MAAM,OAAO,GAAY,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;gBACpG,IAAI,CAAC,CAAC,CAAC,KAAK;oBAAE,OAAO,OAAO,CAAA;gBAC5B,6EAA6E;gBAC7E,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;gBAC9B,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;gBAChC,MAAM,IAAI,GAAgB,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;gBACtE,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;gBAC9B,IAAI,IAAI,CAAC,MAAM;oBAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;gBACzF,IAAI,GAAG,CAAA;gBACP,IAAI,CAAC;oBAAC,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;gBAAC,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACzE,IAAI,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;oBACtD,MAAM,IAAI,UAAU,CAAC,wBAAwB,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;gBACzE,CAAC;gBACD,IAAI,CAAC,GAAG,CAAC,EAAE;oBAAE,SAAQ;gBACrB,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;gBACvB,OAAO,OAAO,CAAA;YAChB,CAAC;YACD,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAA;YAC/B,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,CAAA;YAClC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,CAAA;YAChC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,CAAA;YACzB,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,EAAE,CAAA;YAC/B,sEAAsE;YACtE,4DAA4D;YAC5D,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAA;YACnH,MAAM,KAAK,GAAG,EAAE,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;YAC7H,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,IAAI,EAAE,KAAK,KAAK,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjK,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,CAAA;YACnE,CAAC;YACD,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;YAChC,MAAM,MAAM,GAAkB,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAgB,CAAC,CAAA;YAC3J,UAAU,CAAC,MAAM,CAAC,CAAA;YAClB,MAAM,QAAQ,GAAe,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;YACpK,MAAM,MAAM,GAA+B,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAA;YAChE,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;gBACxC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,MAAM,2BAA2B,CAAC,CAAA;gBAC7G,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;gBAChC,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,MAAM,eAAe,IAAI,eAAe,EAAE,EAAE,CAAC,CAAA;gBAC1J,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG;oBACjB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;oBAC5F,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBACrG,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACnD,CAAA;YACH,CAAC;YACD,MAAM,MAAM,GAAyB,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAA;YAC1D,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC1B,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAA;gBACvF,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;YAClB,CAAC;YACD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK;gBACpB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,KAAM,CAAC,EAAE,EAAE,KAAK,EAAE,KAAM,EAAE,SAAS,EAAE,SAAU,EAAE,SAAS,EAAE,GAAG,EAAE,eAAe,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE;gBACrJ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAA;YAChB,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAA;YAC5F,MAAM,IAAI,GAAgB,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;YACrG,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA,CAAG,0DAA0D;YAC3F,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAgH,CAAA;gBACzI,MAAM,IAAI,GAAG,CAA2B,CAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;gBAC1F,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EACrB,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE;oBACtI,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,EAAE,EAAE;wBACvE,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;YACrD,CAAC;YACD,IAAI,GAAG,CAAA;YACP,IAAI,CAAC;gBAAC,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;YAAC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACzE,IAAI,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;gBACnF,MAAM,IAAI,UAAU,CAAC,wBAAwB,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;YACzE,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,SAAQ;YACrB,cAAc;YACd,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;YAC3B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,OAAO,EAAE,GAAG,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,CAAA;QACrF,CAAC;QACD,MAAM,IAAI,UAAU,CAAC,iBAAiB,EAAE,mBAAmB,IAAI,CAAC,OAAO,CAAC,cAAc,WAAW,CAAC,CAAA;IACpG,CAAC;IAED;6DACyD;IACzD;0EACsE;IACtE,SAAS,CAAE,KAA4B;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAA;QAC1C,MAAM,GAAG,GAAa,EAAE,CAAA;QACxB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;YAAE,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS;gBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QAClG,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QACnE,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,CAAA;QACrE,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7C,MAAM,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAA;YACrB,IAAI,CAAC,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,CAAA;QAC5H,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC,CAAA;QACtF,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU;YAAE,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACtE,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;IACnD,CAAC;IAED,4EAA4E;IAC5E,WAAW,CAAE,KAA4B,EAAE,IAAY,EAAE,OAA+B,GAAG,EAAE,CAAC,IAAI;QAChG,IAAI,IAAwB,CAAA;QAC5B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,GAAG,IAAI,CAAC;gBAAE,IAAI,GAAG,CAAC,CAAA;QAC5G,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,CAAE,MAA6B,EAAE,KAA4B,EAAE,KAAsB,EAAE,IAAY;QACtG,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;QACrD,wEAAwE;QACxE,MAAM,GAAG,GAAG,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAA;QACrE,MAAM,CAAC,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QACtF,MAAM,CAAC,GAAG,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;QACvE,IAAI,CAAC,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK;YAAE,OAAO,CAAC,CAAA;QAC5C,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,0FAA0F;YAC1F,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC;gBAAE,SAAQ;YACvE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAA;YAC7C,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAA;QACnE,CAAC;QACD,OAAO,CAAC,CAAA;IACV,CAAC;IAED;;iFAE6E;IAC7E,SAAS,CAAE,MAA6B,EAAE,KAA4B,EAAE,KAAsB,EAAE,IAAY;QAC1G,IAAI,IAAwB,CAAA;QAC5B,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;YAC3D,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YAClC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;gBAAE,SAAQ;YAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;YACjF,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;YAChD,IAAI,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;gBAAE,SAAQ;YAC9G,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;YACtE,IAAI,CAAC,KAAK,SAAS;gBAAE,IAAI,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QACxE,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED;6EACyE;IACzE,OAAO,CAAE,KAAkB,EAAE,OAA0B,EAAE,IAAY;QACnE,IAAI,GAAG,GAAG,KAAK,CAAA;QACf,MAAM,MAAM,GAAiB,EAAE,CAAA;QAC/B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAA;YACrD,IAAI,CAAC,CAAC;gBAAE,SAAQ;YAChB,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;YACjE,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,yBAAyB,CAAC,CAAA;YACxI,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,oCAAoC,CAAC,CAAA;YACtI,GAAG,GAAG,CAAC,CAAC,KAAK,CAAA;YACb,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAA;YAChC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;gBACrB,MAAM,MAAM,GAAG,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,CAAA;gBAChC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM;oBAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC;wBAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;gBAC5E,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,CAAA;YAC1B,CAAC;QACH,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAA;IAC/B,CAAC;IAED;;gFAE4E;IAC5E,UAAU;QACR,MAAM,MAAM,GAAG,CAAC,EAAwB,EAAE,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;QACjF,MAAM,MAAM,GAAG,CAAC,EAAe,EAAE,OAA0B,EAAE,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;QAC7G,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,CAAE,KAAK,EAAE,EAAE,EAAE,OAAiB,EAAE,IAAI;gBACvC,MAAM,MAAM,GAA+B,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAA;gBAC9D,MAAM,MAAM,GAAiB,EAAE,CAAA;gBAC/B,MAAM,IAAI,GAAa,EAAE,CAAA;gBACzB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;oBACxB,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;oBAC1B,MAAM,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAA;oBACrB,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,QAAQ;wBAAE,SAAQ;oBACjD,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;oBAC5B,IAAI,CAAC,GAAG;wBAAE,SAAQ;oBAClB,MAAM,EAAE,aAAa,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,CAAA;oBACxC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAA;oBAChG,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA;oBAC5F,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACd,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,MAAM;oBAAE,OAAO,EAAE,KAAK,EAAE,KAAoB,EAAE,CAAA;gBACxD,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;gBAClD,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAA;YAC7D,CAAC;SACF,CAAA;IACH,CAAC;IAED;;;+CAG2C;IAC3C,OAAO,CAAE,EAAwB,EAAE,IAAY;QAC7C,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;QACzD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAA;QAChF,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,CAAA;QACzB,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM;YAAE,OAAO,cAAc,CAAA;QAC/E,OAAO,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5D,CAAC;IAED,OAAO,CAAE,KAA4B,EAAE,MAAc;QACnD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,6BAA6B,CAAC,CAAA;QAC5H,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC7B,CAAC;IAED,WAAW,CAAE,KAA4B,EAAE,MAAc;QACvD,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QACtC,OAAO,eAAe,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAA;IAC/I,CAAC;IAED,wEAAwE;IAExE,QAAQ;QACN,MAAM,MAAM,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC,OAAO,CAAA;QACzC,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAA;QACpC,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAA;QACpC,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,CAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI;gBAC5B,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,WAAW,CAAA;gBACtC,IAAI,OAAO,GAAG,KAAK,CAAA;gBACnB,MAAM,IAAI,GAAG,CAAI,GAAsB,EAAE,IAAoC,EAAqB,EAAE;oBAClG,MAAM,GAAG,GAAsB,EAAE,CAAA;oBACjC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;wBAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;4BAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;;4BAAM,OAAO,GAAG,IAAI,CAAA;oBAAC,CAAC;oBAC7F,OAAO,GAAG,CAAA;gBACZ,CAAC,CAAA;gBACD,uEAAuE;gBACvE,kCAAkC;gBAClC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,CAAA;gBAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,CAAA;gBAC3F,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC,CAAA;gBAC7D,uEAAuE;gBACvE,qEAAqE;gBACrE,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAA;gBAChF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE;oBAC/C,MAAM,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAA;oBACrB,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,QAAQ;wBAAE,OAAO,IAAI,CAAA;oBACpD,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;oBACzE,OAAO,IAAI,GAAG,SAAS,GAAG,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;gBACzD,CAAC,CAAC,CAAA;gBACF,IAAI,IAAI,GAAgB,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,KAAoB,CAAA;gBACrG,wDAAwD;gBACxD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,EAAE,CAAC;oBAC5B,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;oBAC3B,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO;wBAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;oBACxG,IAAI,GAAG,KAAK,CAAA;gBACd,CAAC;gBACD,sEAAsE;gBACtE,uEAAuE;gBACvE,sEAAsE;gBACtE,sDAAsD;gBACtD,MAAM,IAAI,GAAG,IAAI,CAAA;gBACjB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;gBAC9B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;oBAAE,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM;wBAAE,IAAI,CAAC,CAAC,CAAC,WAAW;4BAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;gBACjH,yFAAyF;gBACzF,iEAAiE;gBACjE,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;oBAAE,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC;wBAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;gBAC3E,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;gBACjD,IAAI,IAAI,GAAG,KAAK,CAAA;gBAChB,MAAM,IAAI,GAAqC,EAAE,CAAA;gBACjD,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC5D,IAAI,CAAC,CAAC,SAAS,GAAG,SAAS,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;wBAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBAAC,SAAQ;oBAAC,CAAC;oBAClF,IAAI,GAAG,IAAI,CAAA;oBACX,gEAAgE;oBAChE,qEAAqE;oBACrE,8DAA8D;oBAC9D,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;wBAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACxF,CAAC;gBACD,IAAI,IAAI;oBAAE,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,CAAA;gBAC7D,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA,CAAG,wDAAwD;YACnF,CAAC;SACF,CAAA;IACH,CAAC;IAED;;;qCAGiC;IACjC,SAAS,CAAE,KAA4B,EAAE,IAAY;QACnD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC/H,MAAM,GAAG,GAA0C,EAAE,CAAA;QACrD,MAAM,WAAW,GAAW,EAAE,CAAA;QAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACrC,IAAI,CAAC,CAAC;gBAAE,SAAQ,CAAoC,gDAAgD;YACpG,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAAC,SAAQ;YAAC,CAAC;YACxD,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAA;QAC/D,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,CAAA;IAC7B,CAAC;IAED,UAAU;QACR,MAAM,WAAW,GAAG,CAAC,EAAyB,EAAE,CAAS,EAAsB,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;QACzG,MAAM,MAAM,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC,OAAO,CAAA;QACzC,MAAM,IAAI,GAAG,CAAC,KAA4B,EAAE,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QACxF,MAAM,QAAQ,GAAG,GAAqC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAA;QACrE,MAAM,MAAM,GAAG,GAAsC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAA;QACpE,MAAM,MAAM,GAAG,CAAC,EAAe,EAAE,OAA0B,EAAE,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;QAC7G,MAAM,UAAU,GAAG,GAAwB,EAAE,CAAC,IAAI,CAAC,WAAW,CAAA;QAC9D,MAAM,MAAM,GAAG,CAAC,EAAwB,EAAE,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;QACjF,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,oFAAoF;YACpF,KAAK,CAAC,OAAO,CAAE,GAAG;gBAChB,MAAM,MAAM,GAA4B,EAAE,CAAA;gBAC1C,KAAK,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG;oBAAE,IAAI,CAAC,CAAC,OAAO;wBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;gBACvH,MAAM,KAAK,GAA4B,EAAE,CAAA;gBACzC,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,MAAM,EAAE;oBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;gBACtE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;YAC1C,CAAC;YACD,KAAK,CAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI;gBAClC,MAAM,CAAC,GAAG,MAAM,EAAE,CAAA;gBAClB,MAAM,MAAM,GAA+B,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAA;gBAC9D,MAAM,IAAI,GAAe,EAAE,CAAA;gBAC3B,MAAM,MAAM,GAAiB,EAAE,CAAA;gBAC/B,MAAM,MAAM,GAAa,EAAE,CAAA;gBAC3B,IAAI,SAA6B,CAAA;gBACjC,MAAM,GAAG,GAAG,CAAC,CAAS,EAAQ,EAAE,GAAG,SAAS,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA,CAAC,CAAC,CAAA;gBACrG,2CAA2C;gBAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACpD,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;gBAChH,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE,CAAC;oBAC3B,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;oBAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,EAAE,CAAC,CAAA;oBACzB,IAAI,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,QAAQ;wBAAE,SAAQ;oBACzD,oEAAoE;oBACpE,+DAA+D;oBAC/D,qEAAqE;oBACrE,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;oBAC5B,IAAI,GAAG,EAAE,CAAC;wBACR,MAAM,EAAE,aAAa,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,CAAA;wBACxC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAA;wBACnG,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA;wBACzF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;wBACnB,SAAQ;oBACV,CAAC;oBACD,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;oBACzD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAA;oBACrE,GAAG,CAAC,EAAE,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;oBACzE,sEAAsE;oBACtE,6DAA6D;oBAC7D,IAAI,KAAK,KAAK,UAAU,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,oBAAoB;wBAAE,SAAQ;oBACxG,sEAAsE;oBACtE,IAAI,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;wBAAE,SAAQ;oBACvC,IAAI,EAAE,CAAC,aAAa,KAAK,SAAS,IAAI,EAAE,CAAC,aAAa,GAAG,IAAI,EAAE,CAAC;wBAAC,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;wBAAC,SAAQ;oBAAC,CAAC;oBAClG,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,GAAG,CAAC,CAAA;oBAC9B,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;oBACrD,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAA;oBACxH,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;oBACrI,GAAG,CAAC,aAAa,CAAC,CAAA;gBACpB,CAAC;gBACD,oEAAoE;gBACpE,oEAAoE;gBACpE,mEAAmE;gBACnE,qEAAqE;gBACrE,6DAA6D;gBAC7D,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;gBAC9C,KAAK,MAAM,CAAC,IAAI,WAAW;oBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;gBAC1G,0EAA0E;gBAC1E,IAAI,GAAG,GAAgB,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAoB,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,CAAA;gBACnG,2EAA2E;gBAC3E,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;oBAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC;oBAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAA;gBAAC,CAAC;gBACnG,MAAM,MAAM,GAAoB,EAAE,CAAA;gBAClC,MAAM,OAAO,GAAqB,EAAE,CAAA;gBACpC,wEAAwE;gBACxE,MAAM,SAAS,GAAa,EAAE,CAAA;gBAC9B,+DAA+D;gBAC/D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAA;gBACtC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,KAA6E,CAAA;gBAChI,KAAK,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC;oBAC9B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;wBAAE,SAAQ,CAAiB,iCAAiC;oBACnG,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;oBAC/B,wEAAwE;oBACxE,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;wBAAE,SAAQ,CAAG,gCAAgC;oBAClJ,IAAI,CAAC,CAAC,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC;wBAAE,SAAQ,CAAiB,yBAAyB;oBAC3F,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;oBACvL,IAAI,CAAC,KAAK,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;wBAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;wBAAC,SAAQ;oBAAC,CAAC;oBAC9E,qEAAqE;oBACrE,gEAAgE;oBAChE,+DAA+D;oBAC/D,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAA;oBAClC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;oBACpB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE;wBAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;4BAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;oBAC9E,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;oBAClC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;oBACvB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAA;oBAClC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAA;oBAChC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAA;gBACpC,CAAC;gBACD,kEAAkE;gBAClE,sDAAsD;gBACtD,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,MAAM,EAAE,EAAE,CAAC;oBAClC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;oBAC9H,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO;wBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,yBAAyB,CAAC,CAAA;oBACxG,GAAG,GAAG,CAAC,CAAC,KAAK,CAAA;oBACb,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;wBACrB,MAAM,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,CAAA;wBAC7B,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM;4BAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;gCAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;wBACtE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAA;oBAC/B,CAAC;oBACD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAA;oBAClC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAA;oBAChC,IAAI,CAAC,CAAC,QAAQ;wBAAE,GAAG,CAAC,IAAI,CAAC,CAAA;gBAC3B,CAAC;gBACD,qEAAqE;gBACrE,qEAAqE;gBACrE,2CAA2C;gBAC3C,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;oBAClB,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC;wBACnC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA;wBAC5C,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;4BAAC,GAAG,CAAC,IAAI,CAAC,CAAC;4BAAC,MAAK;wBAAC,CAAC;oBAC1E,CAAC;gBACH,CAAC;gBACD,mEAAmE;gBACnE,qEAAqE;gBACrE,8DAA8D;gBAC9D,mEAAmE;gBACnE,8DAA8D;gBAC9D,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC1C,MAAM,CAAC,GAAG,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;oBAChC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;wBAAE,SAAQ;oBAC5D,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI;wBAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;yBACjC,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;wBAAE,GAAG,CAAC,IAAI,CAAC,CAAA;gBACnD,CAAC;gBACD,wEAAwE;gBACxE,IAAI,MAAM,CAAC,MAAM;oBAAE,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;gBACjD,sEAAsE;gBACtE,kEAAkE;gBAClE,6DAA6D;gBAC7D,MAAM,OAAO,GAAe,EAAE,CAAA;gBAC9B,IAAI,OAAO,GAAkC,IAAI,CAAA;gBACjD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;oBAChD,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;oBAC5B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI;wBAAE,SAAQ;oBAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAA;oBACpE,OAAO,KAAK,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,CAAA;oBAC9B,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;wBACnB,MAAM,EAAE,aAAa,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,CAAA;wBACvC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,CAAA;wBACnF,SAAQ;oBACV,CAAC;oBACD,GAAG,CAAC,MAAM,CAAC,CAAA;oBACX,IAAI,CAAC,CAAC,aAAa,KAAK,SAAS,IAAI,CAAC,CAAC,aAAa,GAAG,IAAI,EAAE,CAAC;wBAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;wBAAC,SAAQ;oBAAC,CAAC;oBAC/F,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAA;oBAC7B,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;oBACrD,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,CAAA;oBACzE,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;oBACrC,GAAG,CAAC,aAAa,CAAC,CAAA;gBACpB,CAAC;gBACD,IAAI,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;oBAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,CAAA;gBAC3E,6DAA6D;gBAC7D,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;gBACjC,IAAI,EAAE,KAAK,SAAS;oBAAE,GAAG,CAAC,EAAE,CAAC,CAAA;gBAC7B,OAAO;oBACL,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE;oBAC1E,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACtC,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAClD,CAAA;YACH,CAAC;SACF,CAAA;IACH,CAAC;IAED,UAAU;QACR,MAAM,MAAM,GAAG,CAAC,EAAe,EAAE,OAA0B,EAAE,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;QAC7G,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,CAAE,KAAK,EAAE,EAAE,EAAE,MAAsB,EAAE,IAAI;gBAC5C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;oBAChD,+DAA+D;oBAC/D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,CAAA;oBAClG,IAAI,GAAG,KAAK,SAAS;wBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAA;oBACnE,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;oBAC5B,IAAI,CAAC,CAAC,GAAI,CAAC,IAAI;wBAAE,OAAO,EAAE,KAAK,EAAE,KAAoB,EAAE,CAAA;oBACvD,MAAM,EAAE,aAAa,EAAE,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,GAAI,CAAA;oBAC3C,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,CAAA;gBAC/H,CAAC;gBACD,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;gBACtC,MAAM,KAAK,GAAG,OAAO,CAAC,EAAE,CAAC,CAAA;gBACzB,MAAM,GAAG,GAAG,CAAC,CAAuB,EAAW,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAA;gBACxF,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,KAAoB,EAAE,CAAA;gBAC5C,IAAI,IAAgB,CAAA;gBACpB,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;oBACtB,KAAK,oBAAoB,CAAC,CAAC,CAAC;wBAC1B,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;wBAC9C,IAAI,KAAK,KAAK,WAAW;4BAAE,OAAO,IAAI,CAAA,CAAkC,gCAAgC;wBACxG,IAAI,IAAI,EAAE,MAAM,KAAK,oBAAoB,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;4BAAE,OAAO,IAAI,CAAA;wBACvF,IAAI,GAAG,EAAE,MAAM,EAAE,oBAAoB,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAA;wBACxE,MAAK;oBACP,CAAC;oBACD,KAAK,UAAU;wBACb,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,KAAK,KAAK,WAAW;4BAAE,OAAO,IAAI,CAAA;wBACzD,IAAI,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;wBACvC,MAAK;oBACP,KAAK,WAAW,CAAC,CAAC,CAAC;wBACjB,+DAA+D;wBAC/D,qEAAqE;wBACrE,MAAM,CAAC,GAAG,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;wBACnD,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;oBACtF,CAAC;oBACD,KAAK,QAAQ;wBACX,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,KAAK,WAAW;4BAAE,OAAO,IAAI,CAAA;wBACvD,IAAI,GAAG,MAAM,CAAC,MAAM,KAAK,sBAAsB;4BAC7C,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE;4BAC1E,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAA;wBACzD,MAAK;oBACP;wBACE,MAAM,IAAI,SAAS,CAAC,yBAAyB,MAAM,CAAE,MAA+B,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;gBACnG,CAAC;gBACD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,KAAK,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAA;gBACtG,MAAM,MAAM,GAAG,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,CAAA;gBAChG,MAAM,MAAM,GAAiB,IAAI,CAAC,MAAM,KAAK,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;wBACxE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM;qBAC3F,CAAC,CAAA;gBACF,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;oBAC7B,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAA;oBAC7D,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAA;gBAC7D,CAAC;gBACD,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,CAAA;YAChD,CAAC;SACF,CAAA;IACH,CAAC;IAED,WAAW;QACT,MAAM,KAAK,GAAG,GAAqC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAA;QACjE,MAAM,IAAI,GAAG,GAAoC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAA;QAC9D,MAAM,aAAa,GAAG,GAAyD,EAAE,CAAC,IAAI,CAAC,SAAS,CAAA;QAChG,MAAM,MAAM,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC,OAAO,CAAA;QACzC,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;YACxD,KAAK,CAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI;gBAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAoB,CAAA;gBAC1C,MAAM,MAAM,GAAG,CAAC,GAAkB,EAAU,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,MAAM,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAA;gBACnI,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;oBAClB,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAA;oBACzD,KAAK,WAAW,CAAC,CAAC,CAAC;wBACjB,+DAA+D;wBAC/D,4EAA4E;wBAC5E,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAA;wBACxC,OAAO,EAAE,KAAK,EAAE,KAAoB,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAA;oBAC5J,CAAC;oBACD,KAAK,KAAK,CAAC,CAAC,CAAC;wBACX,kEAAkE;wBAClE,gEAAgE;wBAChE,MAAM,CAAC,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;wBAC9C,IAAI,IAAI,GAAgB,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAA;wBACtD,MAAM,MAAM,GAAiB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;wBACrD,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAA;wBACjD,IAAI,CAAC,EAAE,CAAC;4BACN,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;4BACjC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO;gCAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,yBAAyB,CAAC,CAAA;4BACzI,IAAI,GAAG,CAAC,CAAC,KAAK,CAAA;4BACd,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAA;wBAClC,CAAC;wBACD,gEAAgE;wBAChE,mDAAmD;wBACnD,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,EAAE,CAAC;4BACnC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;4BACzC,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO;gCAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;wBACxG,CAAC;wBACD,OAAO;4BACL,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE;4BAC7E,MAAM;4BACN,MAAM,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;yBACtF,CAAA;oBACH,CAAC;oBACD,KAAK,MAAM,CAAC,CAAC,CAAC;wBACZ,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAE,CAAA;wBACjC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;wBACvF,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;4BACrB,MAAM,YAAY,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;4BAC/I,IAAI,CAAC,CAAC,CAAC,KAAK;gCAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAA;4BACzD,qEAAqE;4BACrE,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;4BAChC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,CAAA;wBACjD,CAAC;wBACD,IAAI,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;4BACvB,sEAAsE;4BACtE,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO;gCAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,CAAC,IAAI,yBAAyB,CAAC,CAAA;4BACpH,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAA;wBACzK,CAAC;wBACD,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO;4BAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,CAAC,IAAI,6CAA6C,CAAC,CAAA;wBACxI,uDAAuD;wBACvD,IAAI,KAAK,GAAG,CAAC,CAAC,KAAK,CAAA;wBACnB,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,EAAE,CAAC;4BACnC,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;4BAC3C,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO;gCAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;wBACzG,CAAC;wBACD,OAAO;4BACL,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;4BAC9K,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;4BAC/C,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;4BACzC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;4BACzC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;4BAC5C,OAAO,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;4BACnC,MAAM,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;yBACjG,CAAA;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;SACF,CAAA;IACH,CAAC;IAED,wEAAwE;IAExE,GAAG,CAAE,OAAe,EAAE,KAAc,EAAE,IAAY,EAAE,OAA2B,EAAE;QAC/E,IAAI,GAA4B,CAAA;QAChC,IAAI,KAAc,CAAA;QAClB,IAAI,IAAiC,CAAA;QACrC,IAAI,KAAyB,CAAA;QAC7B,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YACjC,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAE,OAA6B,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,6BAA6B,OAAO,IAAI,CAAC,CAAC,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAA;YAC/J,SAAS,CAAC,IAAI,CAAC,CAAA;YACf,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;YAC1C,IAAI,GAAG,CAAC,KAAK,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,EAAE,CAAC;gBAAE,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAA;YAC1H,uEAAuE;YACvE,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;YACxB,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;gBACd,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;gBAC/D,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA,CAAG,yDAAyD;YACzF,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YAAC,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAAC,CAAC;QACxC,MAAM,CAAC,GAAG,GAAG,CAAA;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;YAC9B,OAAO,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAA;QACjI,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,CAAE,IAAY;QAChB,IAAI,CAAC;YAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAAC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YAAC,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAAC,CAAC;QAC9D,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;YAC9B,OAAO,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;QACtF,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,CAAE,IAAY;QAClB,IAAI,CAAC;YAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAAC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YAAC,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAAC,CAAC;QAC9D,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;YAC9B,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;YAChF,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;YACzE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;QACrH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,CAAE,MAAsB,EAAE,IAAY;QAC1C,IAAI,KAAqB,CAAA;QACzB,IAAI,CAAC;YAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAAC,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA;QAAC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YAAC,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAAC,CAAC;QACzF,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;YAC9B,OAAO,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA;QACjH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,CAAE,GAAY,EAAE,IAAY;QACjC,IAAI,CAAC;YAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAAC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YAAC,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAAC,CAAC;QAC9D,oEAAoE;QACpE,IAAI,KAAc,CAAA;QAClB,IAAI,CAAC;YAAC,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,KAAK,GAAG,IAAI,CAAA;QAAC,CAAC;QACrD,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;YAC9B,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;YACnF,IAAI,MAAM,CAAC,CAAC,CAAC;gBAAE,OAAO,CAAC,CAAC,MAAuB,CAAA;YAC/C,IAAI,CAAC,CAAC,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;YAC7D,IAAK,CAAC,CAAC,MAA+C,EAAE,WAAW,KAAK,QAAQ;gBAAE,OAAO,CAAC,CAAC,MAAuB,CAAA,CAAG,oBAAoB;YACzI,MAAM,CAAC,GAAG,CAAC,CAAC,MAA0J,CAAA;YACtK,IAAI,CAAC,CAAC,WAAW,KAAK,WAAW;gBAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAO,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;YAC1K,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ;gBAC/B,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;gBACtK,CAAC,CAAC,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAA;QAChF,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,SAAS,CAAE,QAAwB;QACjC,IAAI,OAAO,QAAQ,KAAK,UAAU;YAAE,MAAM,IAAI,SAAS,CAAC,6BAA6B,CAAC,CAAA;QACtF,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC7B,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA,CAAC,CAAC,CAAA;IACnD,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;YAC9B,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;YACpC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAA;QAC7D,CAAC,CAAC,CAAA;IACJ,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAE,KAAkB,EAAE,OAAgC,EAAE,OAAsB,EAAE;IAChH,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI;QAAE,MAAM,IAAI,SAAS,CAAC,qCAAqC,CAAC,CAAA;IAC5F,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAChD,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;IAC7D,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;IACnB,OAAO,MAAM,CAAA;AACf,CAAC","sourcesContent":["// engine — the holder's small engine (lib Stage 2, note §4.1–4.4, 4.7).\n//\n// Modules own their rules as pure transitions and register commands,\n// task handlers and duty handlers here, once, at construction; after\n// that the registries are frozen. No module has a commit path of its\n// own: the engine coordinates snapshot, preparation, check, commit and\n// release, and nothing else.\n//\n// An act runs in four steps (note §4.2), serialized by one in-engine\n// queue:\n// 1. read the snapshot {state, version} from the store and decode it;\n// raise `when` to state.lastWhen (4.7)\n// 2. prepare (async, outside the transaction): crypto, entropy, ports;\n// `prepared` is bound to the version and commitSeq it ran against\n// 3. apply (synchronous, pure, on a deep-frozen snapshot), then one CAS\n// commit of state, outbox, duties, the act journal and commitSeq;\n// on `conflict` back to 1 — the queue serializes this engine, CAS\n// catches every other writer — bounded by retry.commitAttempts\n// 4. only after the commit: events to subscribers, the result returned\n//\n// A commit that throws has an unknown outcome: InfraError\n// 'unknown-commit-outcome'. The engine then settles before its next\n// operation: it re-reads and, if the commit landed (the stored state is\n// the one it wrote, or the journal holds the act at its commitSeq),\n// releases that commit's events late; otherwise drops them. A repeated\n// human act finds its result in the journal (note §4.2).\n//\n// Choices this file makes where the note leaves them open:\n// - snapshots handed to prepare/apply are always deep-frozen (also in\n// production): a mutating module throws a TypeError, nothing commits\n// - every act reads the store afresh; the engine caches no state\n// - eventId is `<commitSeq>.<index>`: unique per holder, no entropy\n// - the input is bound at the public call: a canonical, deep-frozen JSON\n// copy (undefined object members dropped, anything else non-JSON\n// refused); its hash, every preparation and every apply use that copy\n// - a `when` above lastWhen is a state change and commits; a non-human\n// act whose apply returns the identical state object and nothing else\n// commits nothing only when lastWhen stays too. A human act always\n// commits, because its journal entry is the result. Refusals and\n// journal replays commit nothing, lastWhen included — but for a replay\n// that finds one of its documents past its lifetime or the horizon:\n// that give-up runs first as an operation of its own on the one commit\n// path (resume's CommitOp, its timer carried to the replay's answer)\n// - outbound of an act starts at attempt 1 with nextAttemptAt =\n// when + ceil(backoff(1)); resume() re-emits only items that are due\n// and pauses re-emission while the last step is awaiting-transport\n// (the adapter holds the item) and never re-emits an accepted one. It\n// gives up every non-terminal item (submitted, held or accepted) at\n// first submission + horizonMs, never by attempt\n// count, or earlier at the sender lifetime its type declared\n// (expiresAt, Delivery 7020); nextDueAt is the earliest due\n// re-emission, horizon or lifetime\n// - the holder's give-up is failed(expired-by-adapter-policy), at a\n// lifetime failed(task-expired) (Delivery 6110); a later\n// delivered report is late by that history, whatever the adapter says\n// - replay of a human act returns the journaled events and the outbound\n// of its documents that are not terminal (delivered, failed) and not\n// due for the give-up, at their current attempt; one due for it is\n// given up in a commit of its own first (6115: never handed out again). Idempotency is bounded by the journal's retention:\n// max(P90D, retry.horizonMs), the key-retention of Delivery §7 that\n// bounds effects and their acks; after it the same actId is a new act\n// - KeyProvider, Log and Access rejections inside a preparation become\n// InfraError('key-provider' | 'log' | 'access') with the cause. Known\n// limitation: a provider's argument errors (a module passing a label\n// outside the registry, say) are wrapped the same way, so a module\n// programming error surfaces as an infrastructure error; the original\n// error stays in `cause`\n// - events are deep-frozen before listeners or callers see them; a\n// listener's throw or rejection is dropped\n// - the next state is validated by the codec before every commit; an\n// invalid state is a programming error and throws\n// - receive (receive.ts) is a built-in like tick: a failed disposition\n// commits nothing, lastWhen included (like a refusal); duplicate-known\n// commits only a raised lastWhen; a CAS conflict re-reads and runs the\n// stages again, which re-checks the effect cache at stage 4\n// - an ack is stored sealed (StoredAck: envelope, digest, recipient) in\n// its effect, so every re-send is byte-identical down to the envelope.\n// It stays `sent: false` until any report on its digest. Unsent, it has\n// the outbox's retry schedule: attempt 1 at the receive, re-offered by\n// resume when due (attempt + 1, backoff), counted into nextDueAt, and at\n// its horizon (effect commit + horizonMs) marked sent by the horizon\n// (`sentBy: 'horizon'`, no event: acks have no trias). A duplicate's\n// re-send carries attempt + 1 and does not move the schedule (it\n// commits nothing beyond lastWhen)\n// - outbound of one commit, in order: outbox re-emissions, released\n// acks, new documents\n// - resume runs duties after the outbox, ordered by dueAt (absent: due\n// always, counted as 0), then id. An Applied fulfils the duty and the\n// engine removes it in the same commit; 'not-due' and a refusal keep it\n// without a trace. A duty of a registered kind at another version is\n// announced as duty.unsupported on every resume (a commit of its own);\n// a kind no module registers is kept silently. A duty with awaitHead\n// runs only when its handler's awaitHolds says so (none: never). Each\n// planned duty is checked again against the state the duties before it\n// left: still present at the handler's version, due, its awaited head\n// holding; a prepared duty whose data changed since its preparation is\n// deferred to the next resume and prepared afresh there. Its handler's\n// apply re-checks every other state-dependent precondition itself\n// (note §4.2 step 3). nextDueAt comes from the final duty set, the\n// duties created in this resume included: a future dueAt, or `when` for\n// duty work runnable now that did not run; a duty that ran and stayed\n// (not-due, refused) sets no timer while its record is unchanged since\n// that run. A duty whose kind changed since the plan is not run by the\n// planned handler; the next resume dispatches it. New documents of\n// duties count in too. The duties a handler opens are folded into the\n// state before the next handler runs (an id already open is kept), so\n// later handlers' drop rules and dedupe see them; they run on the next\n// resume (the plan is fixed at the snapshot)\n// - every committed operation but resume names the duty work it opened or\n// unblocked as nextDueAt on its result (ActResult, ReceiveResult\n// unique): `when` where a duty that is new, changed, or newly runnable\n// (its awaited head now holding) can run now, else the earliest future\n// dueAt among those; absent where it opened none. It is the app's cue to\n// call resume (or set a timer), as resume's own nextDueAt is. A journal\n// replay of a human act carries none: its duties were announced then\n// - sweeps (Trust 5.4 reconciliation, PR 4b) run in resume after the\n// duties, in registration order, on the state the duties left; their\n// preparations run against resume's snapshot beside the duties'. A\n// piece whose inputs moved since is skipped and makes `when` the\n// nextDueAt, as does sweep work that became pending during the resume\n// itself (a give-up at the horizon, a duty's change) without having\n// been prepared. Their new documents count into nextDueAt like the\n// duties'. Every other committed operation whose state adds a key to\n// a sweep's `pending` names `when` as its nextDueAt; a sweep that\n// declares the state parts it reads (`reads`) is skipped there when the\n// operation left all of them untouched (by reference)\n// - a verified delivery-ack runs the ack handler registered for the\n// acknowledged item's type in its own transaction; a report never does\n// - an outbox item that turns failed (a failed report, or the holder's\n// own give-up at the horizon inside resume) runs the failure handler\n// registered for its type in that same transaction, once, at the\n// transition; duties it opens are folded into the state there (so two\n// failures of one resume cannot open one duty twice) and count into\n// nextDueAt like any new duty. A late delivered after failed runs the\n// ack handler as usual, never the failure handler again\n// - the Encounter latch exception (receive.ts TaskRefusal, Refusal):\n// a refusal carrying `latch` commits exactly that state (checked to\n// shrink encounter.challenges and touch nothing else) and the raised\n// lastWhen, with no journal entry, cache entry, ack, outbound or event;\n// the result stays the refusal (receive: failed at stage 9)\n// - a task handler's refusal commits nothing; its TaskDiscarded (an\n// assembly discarded at a resource limit or rejected, Trust 5365/5366)\n// commits its state and nothing else: disposition `discarded` with the\n// reason, no cache entry, no ack, no event\n// - a transition's `renames` (Applied) are followed in the effect cache by\n// the engine after the transition: each stored ack's recipient.contactId\n// that a rename names moves to its new id; the envelope, sealed to the\n// key agreement, is untouched (an ack re-sent is byte-identical)\n// - a module's ownRetries are task types it re-issues itself: resume\n// never re-emits their outbox items (the horizon still gives them up);\n// its keepKeys name own rkids tick must not tombstone though no live\n// tuple carries them. Both trust the registered modules: no ownership\n// of a type or a key is checked (modules are the library's own, not\n// app plug-ins)\n// - a failure handler gets the retry backoff, so a failure can make work\n// due no earlier than its schedule allows\n// - the timer contract: tick does the time-driven work (expiry,\n// retention, the modules' `retain`), resume the delivery work (retries,\n// due duties, sweeps, acks). nextDueAt names the earliest of both: on\n// resume, the earliest future deadline of the expiry work (prompt\n// expiresAt, effect expiry, the act journal's, a terminal outbox item's\n// and an address key's retention, every module's `deadlines`); on an\n// act or receive, also a deadline the commit newly introduced. The app\n// sets one timer on it and, when it fires, calls tick and then resume\n// (README \"The holder\")\n// - after its own retention, tick runs every module's `retain` hook on\n// the result (the trust module drops in-flight star deliveries whose\n// outbox items have all been retained away); the address keys' retention\n// comes last, its live set and keepKeys read on what the hooks left, so\n// a key whose last claim (an act's pin, 8290) left in this tick leaves in\n// the same tick and no passed key deadline outlives it\n// - without an Access port, EngineOptions.accessFrom (createHolder: the\n// membership module's localAccess) builds one over each preparation's\n// own snapshot, so it describes exactly the state the commit lands on\n// - EngineOptions.check (createHolder's `invariants: true`) runs on every\n// commit after the codec's validation and before the CAS; its throw\n// aborts the operation, nothing commits\n// - tick retains with the key-retention max(P90D, horizonMs): effects\n// with their acks at expiresAt; terminal outbox items once the\n// retention has passed since their last step, unless a kept journal\n// entry names them; an address key not shown for the retention and\n// the own rkid of no tuple that is not deactivated becomes a tombstone —\n// except a member key (a group/… label): an identity context of\n// Identity §6.1 rather than a delivery address of Delivery §5 (one\n// derivation per group, reused whenever the holder is invited to it\n// again), it leaves `addresses` without a tombstone (a point for\n// Delivery 0.82: addresses and identity contexts)\nimport { jcs, b64uOf } from './core.js'\nimport { CODEC, decodeState, encodeState } from './codec.js'\nimport { emptyState, toOpaque, triasOf } from './state.js'\nimport type { Dec, Duty, Effect, HolderState, Millis, OutboxItem, OutboxStep, Prompt, PromptChoice, PromptKind } from './state.js'\nimport type { Access, CarrierKey, DeliveryReport, KeyProvider, KeyRelease, Log, Outbound, RetryPolicy, Store, StoreSnapshot } from './ports.js'\nimport type { HolderEvent } from './events.js'\nimport { CryptoUnavailableError, InfraError } from './results.js'\nimport type { ActError, ActResult, InfraErrorCode, ReceiveResult, ResumeResult } from './results.js'\nimport { randomEntropy } from './entropy.js'\nimport type { Entropy, PlatformRandom } from './entropy.js'\nimport { ED_PKCS8, X_PKCS8 } from './keys-seed.js'\nimport { freezeDeep } from './util-freeze.js'\nimport { ACK_TYPE } from './ack.js'\nimport { challengeAged } from './encounter.js'\nimport { ackOutbound, handlerPrepared, isTaskRefusal, markDelivered, prepareReceive } from './receive.js'\nimport { isTaskDiscarded } from './receive.js'\nimport type { Arrival, Channel, ReceivePlan, ReceivedDocument, TaskDiscarded, TaskRefusal } from './receive.js'\nimport type { CommitOp } from './invariants.js'\nexport type { Arrival, Channel, ReceivedDocument, TaskDiscarded, TaskFailure, TaskRefusal } from './receive.js'\n\n// ── types ──────────────────────────────────────────────────────────────\n\ntype DistributiveOmit<T, K extends PropertyKey> = T extends unknown ? Omit<T, K> : never\n\n/** An event as a module emits it; the engine adds eventId, commitSeq, actId. */\nexport type EventDraft = DistributiveOmit<HolderEvent, 'eventId' | 'commitSeq' | 'actId'>\n/** A document as a module issues it; the engine sets attempt 1 and files\n * it in the outbox. `expiresAt`: the sender lifetime its type declares\n * (Delivery RLTP-DEL-7020), after which resume moves it to\n * failed(task-expired) and never hands it out again (6110, 6115). */\nexport type OutboundDraft = Omit<Outbound, 'attempt'> & { expiresAt?: Millis }\n\n/** What a WebCrypto handle must offer; resolved at construction. The\n * default entropy also needs getRandomValues and randomUUID from it. */\nexport type CryptoHandle = { subtle: SubtleCrypto } & Partial<PlatformRandom>\n\n/** What a preparation sees. The snapshot is deep-frozen; `release` is the\n * key release read from its `addresses` (note §3 KeyProvider). */\nexport interface PrepareCtx {\n readonly snapshot: Readonly<HolderState>\n readonly keys: KeyProvider\n readonly entropy: Entropy\n readonly access?: Access\n readonly log?: Log\n readonly crypto: CryptoHandle\n readonly when: Millis\n readonly release: KeyRelease\n}\n\n/** A preparation's value, bound to the store version and commitSeq of the\n * snapshot it ran against. The commit is CAS on exactly that version, so\n * a prepared value never lands on any other state. */\nexport interface Prepared<P = unknown> {\n readonly value: P\n readonly version: string | null\n readonly commitSeq: Dec\n}\n\n/** A holder-local identity rename (2100, 2140): stored acks whose\n * recipient.contactId is one of `from` (for an own rkid in `rkids`, or\n * any where null) now name `to`. */\nexport interface IdentityRename { from: string[], to: string, rkids: string[] | null }\n\n/** A transition's outcome: the next state (a new object; the input is\n * frozen) and what it issues. `renames`: identities the transition\n * rewrote; the engine follows them in the stored acks (only the core\n * writes the effect cache; the sealed envelopes stay untouched). */\nexport interface Applied {\n state: HolderState\n outbound?: OutboundDraft[]\n events?: EventDraft[]\n duties?: Duty[]\n renames?: IdentityRename[]\n}\n\n/** A refused act: nothing commits — except an Encounter aging latch\n * (`latch`, receive.ts TaskRefusal): then exactly that state and the\n * raised lastWhen commit, without a journal entry, outbound or event. */\nexport interface Refusal { ok: false, code: ActError, ref?: string, latch?: HolderState }\n\n/** The Encounter latch exception (receive.ts TaskRefusal): a latch state\n * differs from its base in encounter.challenges alone; every challenge it\n * keeps is byte-identical, and every one it removes is aged at `when`, the\n * commit's authoritative time (Encounter 5190, 5260). Anything else is a\n * programming error and throws. */\nfunction checkLatch (base: Readonly<HolderState>, latch: Readonly<HolderState>, when: Millis): void {\n for (const k of Object.keys(base) as Array<keyof HolderState>) {\n if (k === 'encounter') continue\n if (base[k] !== latch[k]) throw new Error(`engine: an aging latch changed ${k}`)\n }\n const e = base.encounter, l = latch.encounter\n for (const k of Object.keys(e) as Array<keyof HolderState['encounter']>) {\n if (k !== 'challenges' && e[k] !== l[k]) throw new Error(`engine: an aging latch changed encounter.${k}`)\n }\n for (const [v, c] of Object.entries(l.challenges)) {\n if (!Object.hasOwn(e.challenges, v)) throw new Error('engine: an aging latch added a challenge')\n if (jcs(c) !== jcs(e.challenges[v])) throw new Error(`engine: an aging latch changed the challenge ${v}`)\n }\n for (const [v, c] of Object.entries(e.challenges)) {\n if (!Object.hasOwn(l.challenges, v) && !challengeAged(c.tCh, when)) throw new Error(`engine: an aging latch removed the unaged challenge ${v}`)\n }\n}\n\n/** One command of a module. `human` acts need an actId and are journaled. */\nexport interface CommandDef<I = any, P = any> {\n human: boolean\n prepare?: (ctx: PrepareCtx, input: I) => Promise<P>\n /** synchronous and pure: must not mutate `state`, returns a new object */\n apply: (state: Readonly<HolderState>, prepared: Prepared<P>, input: I, when: Millis) => Applied | Refusal\n}\n\n/**\n * A received task type's handler, keyed by its full task URI with\n * version (note §4.3; receive.ts runs it). `decode` is the payload's\n * decoder and validator (stage 7: refuse 'malformed'; stage 8: any other\n * reason); `prepare` the async stage-8 work (MAC checks, key agreement),\n * which may also refuse; `apply` the synchronous stage-9 transition. The\n * core, never the handler, writes the effect-cache entry with its ack in\n * the same commit and releases the events after it; a handler whose\n * state touches `effects` is a programming error and throws.\n */\nexport interface TaskHandler<T = any, P = any> {\n /** the registry entry's proof declaration (Delivery 4.4): whether the\n * document itself carries a `proof` (its artifacts' own MACs and\n * signatures are the payload's business); checked at stage 6 */\n proof: 'absent' | 'required'\n decode: (payload: unknown) => T | TaskRefusal\n /** the acceptance binding of a document that may arrive on an own key no\n * tuple carries yet (receive.ts): the counterpart's key agreement and\n * contact, from the document itself, or a refusal; absent: the arrival\n * tuple's binding (Delivery 4.4) */\n channel?: (state: Readonly<HolderState>, doc: ReceivedDocument<T>, rkid: string) => Channel | TaskRefusal\n /** under the arrival tuple's binding: the document may arrive on a tuple\n * a chaining deactivated, because the handler binds it to the tuples an\n * act pinned and checks that pin itself (Trust 8270); absent: the arrival\n * tuple must be the active head of a live relationship (6190, 6240) */\n pinned?: true\n prepare?: (ctx: PrepareCtx, doc: ReceivedDocument<T>, arrival: Arrival) => Promise<P | TaskRefusal>\n /** a TaskDiscarded commits its `state` as the disposition `discarded`\n * (no effect-cache entry, no ack): a resource-limit discard (Trust 5365) */\n apply: (state: Readonly<HolderState>, prepared: Prepared<P>, doc: ReceivedDocument<T>, arrival: Arrival) => Applied | TaskRefusal | TaskDiscarded\n}\n\n/** What a duty's apply sees beside the state: its preparation. */\nexport interface DutyCtx<P = unknown> {\n readonly prepared: Prepared<P>\n /** the holder's retry backoff (RetryPolicy): the delay before attempt\n * n, for duties that re-schedule themselves (dueAt) */\n readonly backoff: (attempt: number) => number\n}\n\n/**\n * A duty kind's handler at one version (note §2.1 duties), run by\n * resume(when). A duty of the kind at another `v` stays untouched and is\n * announced as duty.unsupported. `awaitHolds` is the module's pure\n * condition for a duty that carries an `awaitHead` (6596); without it\n * such a duty never runs. `apply` returning Applied fulfils the duty\n * (the engine removes it in the same commit); 'not-due' and a refusal\n * leave it as it is.\n */\nexport interface DutyHandler<P = any> {\n v: number\n prepare?: (ctx: PrepareCtx, duty: Duty) => Promise<P>\n awaitHolds?: (state: Readonly<HolderState>, duty: Duty) => boolean\n apply: (state: Readonly<HolderState>, duty: Duty, ctx: DutyCtx<P>, when: Millis) => Applied | Refusal | 'not-due'\n}\n\n/**\n * A module's reconciliation sweep (Trust 5.4), run by resume(when) after\n * the duties, on the state they left. `prepare` runs against resume's\n * snapshot (before the duties); `apply` re-checks every prepared piece\n * against the state it gets and skips one whose inputs moved, reporting\n * `deferred` (resume then names `when` as nextDueAt). `pending` is the\n * pure answer to \"would the sweep issue now?\", as keys: an operation\n * other than resume whose commit adds a key names `when` as its\n * nextDueAt, the app's cue to call resume (engine.ts header).\n */\nexport interface SweepHandler<P = any> {\n pending: (state: Readonly<HolderState>, when: Millis) => string[]\n /** the top-level state parts `pending` reads; where given, an operation\n * that replaced none of them skips `pending` (its keys cannot change) */\n reads?: ReadonlyArray<keyof HolderState>\n prepare: (ctx: PrepareCtx) => Promise<P>\n apply: (state: Readonly<HolderState>, prepared: Prepared<P>, when: Millis) => Applied & { deferred?: boolean }\n}\n\n/**\n * What a verified delivery-ack does for the module whose task type the\n * acknowledged outbox item carries (receive.ts, the common ack path):\n * synchronous and pure, inside the ack's transaction, after the item is\n * marked delivered. Adapter reports never reach it: only a verified ack\n * completes (ports.ts DeliveryReport, 5660).\n */\nexport type AckHandler = (state: Readonly<HolderState>, ref: string, when: Millis) => Applied\n\n/**\n * What the module whose task type an outbox item carries does when that\n * item turns failed (a failed report, or the holder's give-up at the\n * horizon): synchronous and pure, inside that transaction, after the item\n * is marked failed. Its duties are folded into the state (an id already\n * open is kept as it is); it must not write the effect cache.\n */\nexport type FailureHandler = (state: Readonly<HolderState>, ref: string, when: Millis, ctx: { readonly backoff: (attempt: number) => number }) => Applied\n\n/**\n * What a human's choice on a prompt of one kind does in its domain\n * (prompts.ts): synchronous and pure like apply, run inside the decision's\n * own transition, so the domain effect and the closing commit together.\n * It sees the prompt still open; the prompts module removes it after. A\n * refusal refuses the decision.\n */\nexport type DecisionHandler = DecisionFn | DecisionDef\n\n/** The synchronous form: the domain effect needs no preparation. */\nexport type DecisionFn = (state: Readonly<HolderState>, prompt: Readonly<Prompt>, choice: PromptChoice, when: Millis) => Applied | Refusal\n\n/**\n * The prepared form, for a domain effect that signs or seals (the\n * counter-step, the membership accept, the introduction's consent):\n * `prepare` runs in the decision's preparation against its snapshot, the\n * prompt still open there; `apply` gets its value bound to that snapshot.\n */\nexport interface DecisionDef<P = any> {\n prepare?: (ctx: PrepareCtx, prompt: Readonly<Prompt>, choice: PromptChoice) => Promise<P>\n apply: (state: Readonly<HolderState>, prompt: Readonly<Prompt>, choice: PromptChoice, when: Millis, prepared: Prepared<P>) => Applied | Refusal\n}\n\n/** A domain module: what it registers with the engine. */\nexport interface HolderModule {\n name: string\n commands: Record<string, CommandDef>\n tasks?: Record<string, TaskHandler>\n duties?: Record<string, DutyHandler>\n /** reconciliation sweeps, run by resume after the duties, by name */\n sweeps?: Record<string, SweepHandler>\n /** ack handlers by the full task type URI of the acknowledged document;\n * at most one per type across all modules */\n acks?: Record<string, AckHandler>\n /** failure handlers by the full task type URI of the failed document;\n * at most one per type across all modules */\n failures?: Record<string, FailureHandler>\n /** task types whose documents the module re-issues itself (a fresh\n * document, never a reproduction): the outbox never re-emits their\n * items and gives them up only at the horizon. Trusted as registered:\n * the engine checks no ownership of the types named, since modules are\n * part of the library, not app plug-ins */\n ownRetries?: readonly string[]\n /** own rkids the module still needs although no live tuple carries\n * them: tick does not tombstone them. Trusted as registered, like\n * ownRetries: no check that the module has any claim to the keys */\n keepKeys?: (state: Readonly<HolderState>, when: Millis) => Iterable<string>\n /** the module's own retention, run by tick after the engine's: pure and\n * synchronous, returning the same state object where nothing goes */\n retain?: (state: Readonly<HolderState>, when: Millis) => HolderState\n /** the times at which the module's `retain` (run by tick) changes the\n * state: counted into nextDueAt (the timer contract, the header) */\n deadlines?: (state: Readonly<HolderState>) => Iterable<Millis>\n /** at most one handler per prompt kind across all modules; collected by\n * createHolder for the prompts module (prompts.ts) */\n decisions?: Partial<Record<PromptKind, DecisionHandler>>\n /** run in the stage-9 transaction of every document disposed `unique`\n * (through a task handler, after it; or a verified delivery-ack, after\n * its ack handler), on the state it left: pure and\n * synchronous, returning the same object where nothing changes; it must\n * not write the effect cache (the readiness of a tuple, Message Tasks\n * 5.1) */\n accepted?: (state: Readonly<HolderState>, doc: ReceivedDocument, arrival: Arrival) => HolderState\n}\n\n/** The ports of a holder (note §3); retry fields fall back to ENGINE_DEFAULTS. */\nexport interface EnginePorts {\n store: Store\n keys: KeyProvider\n entropy?: Entropy\n log?: Log\n access?: Access\n retry?: Partial<RetryPolicy>\n crypto?: CryptoHandle\n}\n\n/** Engine options beside the ports. `check` runs on every commit before\n * the store's CAS, on the state read and the state about to be written,\n * with the operation; a throw aborts the operation and nothing commits\n * (createHolder's `invariants: true`, invariants.ts). */\nexport interface EngineOptions {\n check?: (before: Readonly<HolderState>, after: Readonly<HolderState>, op: CommitOp) => void\n /** where no Access port is given: an Access over each preparation's own\n * snapshot (createHolder passes the membership module's localAccess) */\n accessFrom?: (state: Readonly<HolderState>) => Access\n}\n\n/** Announced after every commit of this engine, with its commitSeq. */\nexport type CommitListener = (commit: { commitSeq: Dec, events: HolderEvent[] }) => void\n\n/** A deep-frozen decoded state and its commitSeq. */\nexport interface EngineSnapshot { state: Readonly<HolderState>, commitSeq: Dec }\n\nexport interface Engine {\n /** the names registered at construction, frozen */\n readonly registry: Readonly<{ commands: readonly string[], tasks: readonly string[], duties: readonly string[], sweeps: readonly string[] }>\n act (command: string, input: unknown, when: Millis, opts?: { actId?: string }): Promise<ActResult>\n /** expiry and retention: effects, prompts, the act journal, terminal\n * outbox items, address keys to tombstones; raises lastWhen */\n tick (when: Millis): Promise<ActResult>\n /** re-emits due outbox items (attempt + 1) or gives them up, runs due\n * duties, re-emits unsent acks */\n resume (when: Millis): Promise<ResumeResult>\n /** an adapter's delivery report (Delivery §6.1); on an ack's digest it\n * marks the stored ack sent */\n report (report: DeliveryReport, when: Millis): Promise<ActResult>\n /** an arriving envelope: Delivery §6.2 stages 1–9 (receive.ts) */\n receive (env: unknown, when: Millis): Promise<ReceiveResult>\n subscribe (listener: CommitListener): () => void\n snapshot (): Promise<EngineSnapshot>\n}\n\n// ── defaults ───────────────────────────────────────────────────────────\n\nconst DAY = 86_400_000\n\n/** Defaults of the retry policy and the retention it implies. */\nexport const ENGINE_DEFAULTS = Object.freeze({\n /** 30 s, doubling, at most 6 h */\n backoff: (attempt: number): number => Math.min(30_000 * 2 ** Math.max(0, attempt - 1), 6 * 3_600_000),\n /** P7D, inside Delivery's give-up range [P1D, P90D]; the only give-up */\n horizonMs: 7 * DAY,\n commitAttempts: 8,\n /** max(P90D, horizonMs) with the default horizon */\n retentionMs: 90 * DAY,\n})\n\n/** Delivery's give-up range for horizonMs: [P1D, P90D]. */\nconst HORIZON_MIN = DAY\nconst HORIZON_MAX = 90 * DAY\n\nconst BUILTIN = ['tick', 'resume', 'report', 'receive'] as const\nconst TASK_URI = /^[a-z][a-z0-9+.-]*:\\S+\\/[0-9]+\\.[0-9]+$/\n\n// ── helpers ────────────────────────────────────────────────────────────\n\nconst ALGORITHMS = ['Ed25519', 'X25519', 'HKDF', 'HMAC', 'AES-GCM', 'SHA-256'] as const\n\nconst concat = (a: Uint8Array, b: Uint8Array): Uint8Array => { const o = new Uint8Array(a.length + b.length); o.set(a); o.set(b, a.length); return o }\n\n/** Resolves the WebCrypto handle and probes every algorithm the library uses. */\nasync function resolveCrypto (c?: CryptoHandle): Promise<CryptoHandle> {\n const h = c ?? (globalThis.crypto as CryptoHandle | undefined)\n const S = h?.subtle\n if (!S || typeof S.importKey !== 'function' || typeof S.digest !== 'function') throw new CryptoUnavailableError(['subtle', ...ALGORITHMS])\n const k = new Uint8Array(32).fill(1)\n const probes: Record<typeof ALGORITHMS[number], () => Promise<unknown>> = {\n Ed25519: () => S.importKey('pkcs8', concat(ED_PKCS8, k), { name: 'Ed25519' }, false, ['sign']),\n X25519: () => S.importKey('pkcs8', concat(X_PKCS8, k), { name: 'X25519' }, false, ['deriveBits']),\n HKDF: () => S.importKey('raw', k, 'HKDF', false, ['deriveBits']),\n HMAC: () => S.importKey('raw', k, { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']),\n 'AES-GCM': () => S.importKey('raw', k, { name: 'AES-GCM' }, false, ['encrypt']),\n 'SHA-256': () => S.digest('SHA-256', k),\n }\n const ok = await Promise.all(ALGORITHMS.map(async (a) => { try { await probes[a](); return true } catch { return false } }))\n const missing = ALGORITHMS.filter((_, i) => !ok[i])\n if (missing.length) throw new CryptoUnavailableError(missing)\n return h as CryptoHandle\n}\n\nconst te = new TextEncoder()\n/** The stack's document digest (u + multihash sha2-256 over JCS), on the resolved handle. */\nconst digestOf = async (S: SubtleCrypto, x: unknown): Promise<string> =>\n 'u' + b64uOf(concat(Uint8Array.from([0x12, 0x20]), new Uint8Array(await S.digest('SHA-256', te.encode(jcs(x))))))\n\n/** Drops undefined object members (as JSON does) without hiding what jcs refuses. */\nconst dropUndefined = (x: unknown): unknown => {\n if (x === null || typeof x !== 'object') return x\n if (Object.getOwnPropertySymbols(x).length > 0) return x\n if (Array.isArray(x)) {\n if (Object.getOwnPropertyNames(x).length !== x.length + 1) return x\n for (let i = 0; i < x.length; i++) if (!(i in x)) return x\n return x.map(dropUndefined)\n }\n const proto = Object.getPrototypeOf(x)\n if (proto !== null && proto !== Object.prototype) return x\n if (Object.getOwnPropertyNames(x).length !== Object.keys(x).length) return x\n // own data properties, never assignment: a \"__proto__\" key stays a key\n // (assignment would hit the inherited setter and change the prototype)\n const out: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(x)) {\n if (v !== undefined) Object.defineProperty(out, k, { value: dropUndefined(v), enumerable: true, writable: true, configurable: true })\n }\n return out\n}\n\n/** The act input as bound at the call: canonical JSON, deep-frozen. A\n * \"__proto__\" member is an ordinary key throughout: jcs serializes own\n * keys (Object.keys) and JSON.parse defines own data properties, so it is\n * hashed, journaled and handed to prepare/apply like any other key. */\nconst bindInput = <T>(x: T): T => freezeDeep(JSON.parse(jcs(x === undefined ? null : dropUndefined(x))) as T)\n\n/** when + ceil(delay), clamped to safe integer milliseconds. */\nconst dueAt = (when: Millis, delay: number): Millis => {\n const d = Number.isNaN(delay) ? 0 : Math.max(0, Math.ceil(delay))\n return Math.min(when + d, Number.MAX_SAFE_INTEGER)\n}\n\n/** A port whose rejections become InfraError(code); InfraError passes as is. */\nfunction guard<T extends object> (port: T, names: ReadonlyArray<keyof T & string>, code: InfraErrorCode, wrapResult?: (r: any) => unknown): T {\n const out: Record<string, unknown> = {}\n for (const n of names) {\n out[n] = async (...args: unknown[]) => {\n let r: unknown\n try { r = await (port[n] as (...a: unknown[]) => Promise<unknown>).apply(port, args) } catch (e) {\n throw e instanceof InfraError ? e : new InfraError(code, `${code}: ${n} failed`, { cause: e })\n }\n return wrapResult ? wrapResult(r) : r\n }\n }\n return Object.freeze(out) as T\n}\n\nconst inc = (d: Dec): Dec => (BigInt(d) + 1n).toString()\n\nconst releaseOf = (state: Readonly<HolderState>): KeyRelease => (rkid) => {\n if (state.addresses.tombstones.includes(rkid)) return { status: 'retired' }\n if (!Object.hasOwn(state.addresses.keys, rkid)) return { status: 'unknown' }\n const k = state.addresses.keys[rkid]\n return k.retiredAt !== undefined ? { status: 'retired' } : { status: 'live', label: k.label }\n}\n\nconst isRefusal = (r: unknown): r is Refusal => (r as Refusal)?.ok === false\n\n/** The effect cache with the stored acks' recipients renamed. */\nfunction renameAcks (effects: HolderState['effects'], renames: readonly IdentityRename[]): HolderState['effects'] {\n let out: HolderState['effects'] | null = null\n for (const [d, e] of Object.entries(effects)) {\n let a = e.ack\n if (!a) continue\n for (const r of renames) {\n if (r.from.includes(a.recipient.contactId) && (r.rkids === null || r.rkids.includes(a.recipient.via ?? a.recipient.rkid))) a = { ...a, recipient: { ...a.recipient, contactId: r.to } }\n }\n if (a !== e.ack) (out ??= { ...effects })[d] = { ...e, ack: a }\n }\n return out ?? effects\n}\n\nconst checkWhen = (when: unknown): void => {\n if (!Number.isSafeInteger(when) || (when as number) < 0) throw new TypeError(`when must be non-negative integer milliseconds, got ${String(when)}`)\n}\n\n// ── internal command form: built-ins may also re-emit and schedule ─────\n\ninterface InternalApplied extends Applied {\n /** outbox items re-emitted (already in state, attempt set) */\n emit?: Outbound[]\n /** outbound handed out without an outbox item: acks (receive.ts). It\n * forces no commit; with nothing else to commit it is released as is */\n release?: Outbound[]\n nextDueAt?: Millis\n /** passed through to the caller of #run */\n detail?: unknown\n}\n/** A built-in's end without a commit, lastWhen included, carrying its answer. */\ninterface Halt { halt: true, detail: unknown }\ninterface InternalDef {\n human: boolean\n prepare?: (ctx: PrepareCtx, input: any) => Promise<unknown>\n apply: (state: Readonly<HolderState>, prepared: Prepared<any>, input: any, when: Millis) => InternalApplied | Refusal | Halt\n}\n\n/** Outbound order of one commit: re-emissions, then released acks, then new documents. */\ntype RunResult = { ok: true, outbound: Outbound[], events: HolderEvent[], nextDueAt?: Millis, detail?: unknown } | Refusal | Halt\n\n/** A duty's dueAt; absent counts as 0 (due always). */\nconst dutyDue = (d: Duty): number => (Number.isSafeInteger(d.dueAt) ? d.dueAt as number : 0)\n\n/** Due, and not waiting on a head its handler's awaitHolds denies (none: waits forever). */\nconst dutyRunnable = (d: Duty, h: DutyHandler, state: Readonly<HolderState>, when: Millis): boolean => {\n if (dutyDue(d) > when) return false\n const awaits = (d as { awaitHead?: unknown }).awaitHead\n return typeof awaits !== 'string' || (h.awaitHolds?.(state, d) ?? false)\n}\n\nconst isHalt = (r: unknown): r is Halt => (r as Halt)?.halt === true\n\nconst actResult = (r: RunResult): ActResult => {\n if (isHalt(r)) throw new Error('engine: an act does not halt')\n return r.ok ? { ok: true, outbound: r.outbound, events: r.events, ...(r.nextDueAt !== undefined ? { nextDueAt: r.nextDueAt } : {}) } : r\n}\n\ninterface Policy { backoff: (attempt: number) => number, horizonMs: number, commitAttempts: number, retentionMs: number }\n\n// ── the engine ─────────────────────────────────────────────────────────\n\nclass HolderEngine implements Engine {\n readonly registry: Engine['registry']\n readonly #store: Store\n readonly #ports: EnginePorts\n /** the ports a preparation sees, rejections typed (InfraError) */\n readonly #keys: KeyProvider\n readonly #log?: Log\n readonly #access?: Access\n readonly #crypto: CryptoHandle\n readonly #entropy: Entropy\n readonly #policy: Policy\n readonly #commands: ReadonlyMap<string, InternalDef>\n readonly #tasks: ReadonlyMap<string, TaskHandler>\n readonly #duties: ReadonlyMap<string, DutyHandler>\n readonly #sweeps: ReadonlyMap<string, SweepHandler>\n readonly #acks: ReadonlyMap<string, AckHandler>\n readonly #failures: ReadonlyMap<string, FailureHandler>\n readonly #ownRetries: ReadonlySet<string>\n readonly #keepKeys: ReadonlyArray<(state: Readonly<HolderState>, when: Millis) => Iterable<string>>\n readonly #retain: ReadonlyArray<(state: Readonly<HolderState>, when: Millis) => HolderState>\n readonly #accepted: ReadonlyArray<NonNullable<HolderModule['accepted']>>\n readonly #deadlines: ReadonlyArray<(state: Readonly<HolderState>) => Iterable<Millis>>\n readonly #builtins: Readonly<Record<typeof BUILTIN[number], InternalDef>>\n readonly #check?: EngineOptions['check']\n readonly #accessFrom?: EngineOptions['accessFrom']\n readonly #listeners = new Set<CommitListener>()\n #chain: Promise<unknown> = Promise.resolve()\n /** a commit whose outcome is unknown, settled before the next operation */\n #unsettled: { text: string, actId?: string, commitSeq: Dec, events: HolderEvent[] } | null = null\n\n constructor (ports: EnginePorts, crypto: CryptoHandle, modules: readonly HolderModule[], opts: EngineOptions = {}) {\n if (opts.check !== undefined && typeof opts.check !== 'function') throw new TypeError('check must be a function')\n this.#check = opts.check\n if (opts.accessFrom !== undefined && typeof opts.accessFrom !== 'function') throw new TypeError('accessFrom must be a function')\n this.#accessFrom = opts.accessFrom\n this.#store = ports.store\n this.#ports = ports\n this.#crypto = crypto\n this.#entropy = ports.entropy ?? randomEntropy(crypto)\n const r = ports.retry ?? {}\n const horizonMs = r.horizonMs ?? ENGINE_DEFAULTS.horizonMs\n const backoff = r.backoff ?? ENGINE_DEFAULTS.backoff\n const commitAttempts = r.commitAttempts ?? ENGINE_DEFAULTS.commitAttempts\n if (!Number.isSafeInteger(horizonMs) || horizonMs < HORIZON_MIN || horizonMs > HORIZON_MAX) throw new RangeError(`retry.horizonMs must be integer ms within [P1D, P90D], got ${horizonMs}`)\n if (typeof backoff !== 'function') throw new RangeError('retry.backoff must be a function')\n for (let n = 1; n <= 3; n++) {\n const d = backoff(n)\n if (typeof d !== 'number' || !Number.isFinite(d) || d < 0) throw new RangeError(`retry.backoff(${n}) must be a finite non-negative number, got ${d}`)\n }\n if (!Number.isSafeInteger(commitAttempts) || commitAttempts < 1) throw new RangeError('retry.commitAttempts must be a positive integer')\n this.#policy = Object.freeze({ backoff, horizonMs, commitAttempts, retentionMs: Math.max(ENGINE_DEFAULTS.retentionMs, horizonMs) })\n const carrierKey = (k: CarrierKey): CarrierKey => Object.freeze({ principal: k.principal, sign: guard(k, ['sign'], 'key-provider').sign })\n const base = guard(ports.keys, ['anchorOf', 'sign', 'agree'], 'key-provider')\n this.#keys = Object.freeze({\n anchorOf: base.anchorOf, sign: base.sign, agree: base.agree,\n carrierPrincipal: guard(ports.keys, ['carrierPrincipal'], 'key-provider', carrierKey).carrierPrincipal,\n })\n if (ports.log) this.#log = guard(ports.log, ['head', 'at', 'append'], 'log')\n if (ports.access) this.#access = guard(ports.access, ['memberships', 'membership'], 'access')\n\n const commands = new Map<string, InternalDef>()\n const tasks = new Map<string, TaskHandler>()\n const duties = new Map<string, DutyHandler>()\n const sweeps = new Map<string, SweepHandler>()\n const acks = new Map<string, AckHandler>()\n const failures = new Map<string, FailureHandler>()\n const ownRetries = new Set<string>()\n const keepKeys: Array<(state: Readonly<HolderState>, when: Millis) => Iterable<string>> = []\n const retain: Array<(state: Readonly<HolderState>, when: Millis) => HolderState> = []\n const accepted: Array<NonNullable<HolderModule['accepted']>> = []\n const deadlines: Array<(state: Readonly<HolderState>) => Iterable<Millis>> = []\n const names = new Set<string>()\n for (const m of modules) {\n if (!m || typeof m.name !== 'string' || !m.name) throw new TypeError('a module needs a name')\n if (names.has(m.name)) throw new Error(`duplicate module ${m.name}`)\n names.add(m.name)\n for (const [name, def] of Object.entries(m.commands ?? {})) {\n if (commands.has(name) || (BUILTIN as readonly string[]).includes(name)) throw new Error(`duplicate command ${name} (module ${m.name})`)\n if (typeof def?.apply !== 'function' || typeof def.human !== 'boolean') throw new TypeError(`command ${name} (module ${m.name}) needs human and apply`)\n commands.set(name, Object.freeze({ ...def }))\n }\n for (const [uri, h] of Object.entries(m.tasks ?? {})) {\n if (!TASK_URI.test(uri)) throw new Error(`not a full task URI with version: ${uri} (module ${m.name})`)\n if (uri === ACK_TYPE) throw new Error(`${uri} is built in: acks take the common path (module ${m.name})`)\n if (tasks.has(uri)) throw new Error(`duplicate task ${uri} (module ${m.name})`)\n if (typeof h?.apply !== 'function' || typeof h.decode !== 'function') throw new TypeError(`task ${uri} (module ${m.name}) needs decode and apply`)\n if (h.proof !== 'absent' && h.proof !== 'required') throw new TypeError(`task ${uri} (module ${m.name}) needs its proof declaration: 'absent' or 'required'`)\n if (h.channel !== undefined && typeof h.channel !== 'function') throw new TypeError(`task ${uri} (module ${m.name}): channel must be a function`)\n if (h.pinned !== undefined && (h.pinned !== true || h.channel !== undefined)) throw new TypeError(`task ${uri} (module ${m.name}): pinned is true or absent, and only under the tuple binding`)\n tasks.set(uri, Object.freeze({ ...h }))\n }\n for (const [kind, h] of Object.entries(m.duties ?? {})) {\n if (duties.has(kind)) throw new Error(`duplicate duty ${kind} (module ${m.name})`)\n if (typeof h?.apply !== 'function') throw new TypeError(`duty ${kind} (module ${m.name}) needs apply`)\n if (!Number.isSafeInteger(h.v) || h.v < 1) throw new TypeError(`duty ${kind} (module ${m.name}) needs its version v, a positive integer`)\n if (h.awaitHolds !== undefined && typeof h.awaitHolds !== 'function') throw new TypeError(`duty ${kind} (module ${m.name}): awaitHolds must be a function`)\n duties.set(kind, Object.freeze({ ...h }))\n }\n for (const [name, h] of Object.entries(m.sweeps ?? {})) {\n if (sweeps.has(name)) throw new Error(`duplicate sweep ${name} (module ${m.name})`)\n if (typeof h?.apply !== 'function' || typeof h.prepare !== 'function' || typeof h.pending !== 'function') throw new TypeError(`sweep ${name} (module ${m.name}) needs pending, prepare and apply`)\n sweeps.set(name, Object.freeze({ ...h }))\n }\n for (const [uri, h] of Object.entries(m.acks ?? {})) {\n if (!TASK_URI.test(uri)) throw new Error(`not a full task URI with version: ${uri} (module ${m.name})`)\n if (acks.has(uri)) throw new Error(`duplicate ack handler ${uri} (module ${m.name})`)\n if (typeof h !== 'function') throw new TypeError(`ack handler ${uri} (module ${m.name}) must be a function`)\n acks.set(uri, h)\n }\n for (const [uri, h] of Object.entries(m.failures ?? {})) {\n if (!TASK_URI.test(uri)) throw new Error(`not a full task URI with version: ${uri} (module ${m.name})`)\n if (failures.has(uri)) throw new Error(`duplicate failure handler ${uri} (module ${m.name})`)\n if (typeof h !== 'function') throw new TypeError(`failure handler ${uri} (module ${m.name}) must be a function`)\n failures.set(uri, h)\n }\n for (const uri of m.ownRetries ?? []) {\n if (!TASK_URI.test(uri)) throw new Error(`not a full task URI with version: ${uri} (module ${m.name})`)\n ownRetries.add(uri)\n }\n if (m.keepKeys !== undefined) {\n if (typeof m.keepKeys !== 'function') throw new TypeError(`keepKeys (module ${m.name}) must be a function`)\n keepKeys.push(m.keepKeys)\n }\n if (m.retain !== undefined) {\n if (typeof m.retain !== 'function') throw new TypeError(`retain (module ${m.name}) must be a function`)\n retain.push(m.retain)\n }\n if (m.deadlines !== undefined) {\n if (typeof m.deadlines !== 'function') throw new TypeError(`deadlines (module ${m.name}) must be a function`)\n deadlines.push(m.deadlines)\n }\n if (m.accepted !== undefined) {\n if (typeof m.accepted !== 'function') throw new TypeError(`accepted (module ${m.name}) must be a function`)\n accepted.push(m.accepted)\n }\n }\n this.#commands = commands\n this.#tasks = tasks\n this.#duties = duties\n this.#sweeps = sweeps\n this.#acks = acks\n this.#failures = failures\n this.#ownRetries = ownRetries\n this.#keepKeys = Object.freeze(keepKeys)\n this.#deadlines = Object.freeze(deadlines)\n this.#retain = Object.freeze(retain)\n this.#accepted = Object.freeze(accepted)\n this.#builtins = Object.freeze({ tick: this.#tickDef(), resume: this.#resumeDef(), report: this.#reportDef(), receive: this.#receiveDef() })\n this.registry = Object.freeze({\n commands: Object.freeze([...commands.keys()]),\n tasks: Object.freeze([...tasks.keys()]),\n duties: Object.freeze([...duties.keys()]),\n sweeps: Object.freeze([...sweeps.keys()]),\n })\n }\n\n // ── loading ──────────────────────────────────────────────────────────\n\n async #readRaw (): Promise<StoreSnapshot> {\n try { return await this.#store.read() } catch (e) { throw new InfraError('store-read', undefined, { cause: e }) }\n }\n\n async #read (): Promise<{ state: Readonly<HolderState>, version: string | null }> {\n const snap = await this.#readRaw()\n if (snap.state === null) throw new Error('engine: the store holds no state')\n return { state: freezeDeep(decodeState(snap.state)), version: snap.version }\n }\n\n /** Initialise an empty store with the empty state, or check the stored one decodes. */\n async load (): Promise<void> {\n const snap = await this.#readRaw()\n if (snap.state !== null) { decodeState(snap.state); return }\n let cause: unknown\n try { if ((await this.#store.commit(null, toOpaque(emptyState(CODEC)))).ok) return } catch (e) { cause = e }\n const again = await this.#readRaw() // conflict or unknown outcome: someone (maybe we) wrote\n if (again.state === null) throw new InfraError('store-commit', 'could not initialise the store', { cause })\n decodeState(again.state)\n }\n\n // ── the queue ────────────────────────────────────────────────────────\n\n #enqueue<T> (fn: () => Promise<T>): Promise<T> {\n const p = this.#chain.then(async () => { await this.#settle(); return fn() })\n this.#chain = p.then(() => undefined, () => undefined)\n return p\n }\n\n async #settle (): Promise<void> {\n const u = this.#unsettled\n if (!u) return\n const { state } = await this.#read()\n const landed = jcs(state) === u.text ||\n (u.actId !== undefined && Object.hasOwn(state.acts, u.actId) && state.acts[u.actId].commitSeq === u.commitSeq)\n this.#unsettled = null\n if (landed) this.#announce(u.commitSeq, u.events)\n }\n\n #announce (commitSeq: Dec, events: HolderEvent[]): void {\n for (const l of [...this.#listeners]) {\n // a listener's failure (throw or rejection) neither undoes nor blocks the commit\n try {\n const r: unknown = l({ commitSeq, events })\n if (r !== null && typeof r === 'object' && typeof (r as Promise<unknown>).then === 'function') (r as Promise<unknown>).then(undefined, () => undefined)\n } catch { /* dropped */ }\n }\n }\n\n // ── the four steps ───────────────────────────────────────────────────\n\n /** `input` is already bound (bindInput); `inputHash` its journal hash for human acts. */\n async #run (def: InternalDef, op: CommitOp, input: unknown, when: Millis, actId?: string, inputHash?: string): Promise<RunResult> {\n /** a replay's give-up work (below): its timer, carried to the replay's answer */\n let replayWake: Millis | undefined\n /** give-ups a replay ran: each moves at least one of its finitely many\n * journaled documents to failed, so they are bounded by that number */\n let gaveUp = 0\n for (let attempt = 1; attempt <= this.#policy.commitAttempts; attempt++) {\n // 1 — snapshot, when\n const { state, version } = await this.#read()\n const at = Math.max(when, state.lastWhen)\n if (def.human && Object.hasOwn(state.acts, actId!)) {\n const rec = state.acts[actId!]\n if (rec.inputHash !== inputHash) return { ok: false, code: 'actid-conflict' }\n const events: HolderEvent[] = structuredClone(rec.events) as HolderEvent[]\n // the act's documents are handed out again only while live; one past\n // its sender lifetime or the horizon is given up first, in an\n // operation of its own on the engine's one commit path (as resume's\n // give-up: Delivery 6110, 6115), and is never handed out — the\n // journal's events are not announced again\n const live: string[] = []\n const expired: string[] = []\n for (const d of rec.outboundDigests) {\n const it = this.#itemOf(state, d)\n const t = triasOf(it)\n if (t === 'delivered' || t === 'failed') continue\n if (this.#giveUp(it, at)) expired.push(d); else live.push(d)\n }\n if (expired.length) {\n const g = await this.#run(this.#giveUpDef(), { kind: 'resume' }, expired, at)\n if (!isHalt(g) && g.ok && g.nextDueAt !== undefined) replayWake = replayWake === undefined ? g.nextDueAt : Math.min(replayWake, g.nextDueAt)\n // re-read: the act's documents as the give-up left them, outside\n // the CAS budget (no conflict happened); bounded by the act's documents\n if (gaveUp++ <= rec.outboundDigests.length) attempt--\n continue\n }\n return { ok: true, outbound: live.map((d) => this.#outboundOf(state, d)), events: freezeDeep(events), ...(replayWake !== undefined ? { nextDueAt: replayWake } : {}) }\n }\n // 2 — prepare, bound to this snapshot\n const ctx: PrepareCtx = Object.freeze({\n snapshot: state, keys: this.#keys, entropy: this.#entropy, access: this.#access ?? this.#accessFrom?.(state), log: this.#log,\n crypto: this.#crypto, when: at, release: releaseOf(state),\n })\n const value = def.prepare ? await def.prepare(ctx, input) : undefined\n const prepared: Prepared = Object.freeze({ value, version, commitSeq: state.commitSeq })\n // 3 — apply, assemble, CAS\n const r = def.apply(state, prepared, input, at)\n if (isHalt(r)) return r\n if (isRefusal(r)) {\n const refusal: Refusal = { ok: false, code: r.code, ...(r.ref !== undefined ? { ref: r.ref } : {}) }\n if (!r.latch) return refusal\n // the Encounter latch exception: the latch and lastWhen commit, nothing else\n checkLatch(state, r.latch, at)\n const seq = inc(state.commitSeq)\n const next: HolderState = { ...r.latch, commitSeq: seq, lastWhen: at }\n const text = encodeState(next)\n if (this.#check) this.#check(state, next, op.kind === 'act' ? { ...op, events: [] } : op)\n let res\n try { res = await this.#store.commit(version, toOpaque(next)) } catch (e) {\n this.#unsettled = { text, commitSeq: seq, events: [] }\n throw new InfraError('unknown-commit-outcome', undefined, { cause: e })\n }\n if (!res.ok) continue\n this.#announce(seq, [])\n return refusal\n }\n const drafts = r.outbound ?? []\n const eventDrafts = r.events ?? []\n const newDuties = r.duties ?? []\n const emit = r.emit ?? []\n const release = r.release ?? []\n // resume computes its own timer; every other operation names the duty\n // work it opened or unblocked, the app's cue to call resume\n const wake = r.nextDueAt ?? (def === this.#builtins.resume ? undefined : this.#wake(state, r.state, newDuties, at))\n const extra = { ...(wake !== undefined ? { nextDueAt: wake } : {}), ...(r.detail !== undefined ? { detail: r.detail } : {}) }\n if (!def.human && r.state === state && !r.renames?.length && at === state.lastWhen && !drafts.length && !eventDrafts.length && !newDuties.length && !emit.length) {\n return { ok: true, outbound: [...release], events: [], ...extra }\n }\n const seq = inc(state.commitSeq)\n const events: HolderEvent[] = eventDrafts.map((e, i) => ({ ...e, eventId: `${seq}.${i}`, commitSeq: seq, ...(def.human ? { actId } : {}) }) as HolderEvent)\n freezeDeep(events)\n const outbound: Outbound[] = drafts.map((o) => ({ digest: o.digest, envelope: o.envelope, type: o.type, threadId: o.threadId, recipient: o.recipient, attempt: 1 }))\n const outbox: Record<string, OutboxItem> = { ...r.state.outbox }\n for (const [i, o] of outbound.entries()) {\n if (Object.hasOwn(outbox, o.digest)) throw new Error(`engine: outbound ${o.digest} is already in the outbox`)\n const life = drafts[i].expiresAt\n if (life !== undefined && (!Number.isSafeInteger(life) || life <= at)) throw new Error(`engine: outbound ${o.digest} expires at ${life}, not after ${at}`)\n outbox[o.digest] = {\n type: o.type, threadId: o.threadId, recipient: o.recipient, envelope: o.envelope, attempt: 1,\n history: [{ status: 'submitted', at, attempt: 1 }], nextAttemptAt: dueAt(at, this.#policy.backoff(1)),\n ...(life !== undefined ? { expiresAt: life } : {}),\n }\n }\n const duties: Record<string, Duty> = { ...r.state.duties }\n for (const d of newDuties) {\n if (Object.hasOwn(duties, d.id)) throw new Error(`engine: duty ${d.id} already exists`)\n duties[d.id] = d\n }\n const acts = def.human\n ? { ...r.state.acts, [actId!]: { actId: actId!, inputHash: inputHash!, commitSeq: seq, outboundDigests: outbound.map((o) => o.digest), events, at } }\n : r.state.acts\n const effects = r.renames?.length ? renameAcks(r.state.effects, r.renames) : r.state.effects\n const next: HolderState = { ...r.state, effects, commitSeq: seq, lastWhen: at, outbox, duties, acts }\n const text = encodeState(next) // validates; an invalid next state is a programming error\n if (this.#check) {\n const d = (r.detail ?? {}) as { disposition?: string, digest?: string, type?: string, ref?: string, rkid?: string, fulfilled?: string[] }\n const pick = <K extends keyof typeof d>(k: K) => (d[k] !== undefined ? { [k]: d[k] } : {})\n this.#check(state, next,\n op.kind === 'receive' ? { kind: 'receive', ...pick('disposition'), ...pick('digest'), ...pick('type'), ...pick('ref'), ...pick('rkid') }\n : op.kind === 'resume' ? { kind: 'resume', fulfilled: d.fulfilled ?? [] }\n : op.kind === 'act' ? { ...op, events } : op)\n }\n let res\n try { res = await this.#store.commit(version, toOpaque(next)) } catch (e) {\n this.#unsettled = { text, commitSeq: seq, events, ...(def.human ? { actId } : {}) }\n throw new InfraError('unknown-commit-outcome', undefined, { cause: e })\n }\n if (!res.ok) continue\n // 4 — release\n this.#announce(seq, events)\n return { ok: true, outbound: [...emit, ...release, ...outbound], events, ...extra }\n }\n throw new InfraError('commit-conflict', `no commit after ${this.#policy.commitAttempts} attempts`)\n }\n\n /** The work an operation opened or unblocked: its duty work (#dutyWake),\n * or `when` where a sweep's pending keys gained one. */\n /** Every time at which tick's expiry and retention change `state`: the\n * engine's own and the modules' `deadlines` (the timer contract). */\n #expiries (state: Readonly<HolderState>): Millis[] {\n const retention = this.#policy.retentionMs\n const out: Millis[] = []\n for (const p of Object.values(state.prompts)) if (p.expiresAt !== undefined) out.push(p.expiresAt)\n for (const e of Object.values(state.effects)) out.push(e.expiresAt)\n for (const a of Object.values(state.acts)) out.push(a.at + retention)\n for (const it of Object.values(state.outbox)) {\n const t = triasOf(it)\n if ((t === 'delivered' || t === 'failed') && it.history.length) out.push(it.history[it.history.length - 1].at + retention)\n }\n for (const k of Object.values(state.addresses.keys)) out.push(k.lastShown + retention)\n for (const f of this.#deadlines) for (const t of f(state)) out.push(t)\n return out.filter((t) => Number.isSafeInteger(t))\n }\n\n /** The earliest expiry deadline after `when`, among those `only` admits. */\n #nextExpiry (state: Readonly<HolderState>, when: Millis, only: (t: Millis) => boolean = () => true): Millis | undefined {\n let next: Millis | undefined\n for (const t of this.#expiries(state)) if (t > when && only(t) && (next === undefined || t < next)) next = t\n return next\n }\n\n #wake (before: Readonly<HolderState>, after: Readonly<HolderState>, added: readonly Duty[], when: Millis): Millis | undefined {\n const d0 = this.#dutyWake(before, after, added, when)\n // a deadline the commit introduced (a prompt opened, an act started, …)\n const had = before === after ? null : new Set(this.#expiries(before))\n const x = had === null ? undefined : this.#nextExpiry(after, when, (t) => !had.has(t))\n const d = d0 === undefined ? x : x === undefined ? d0 : Math.min(d0, x)\n if (d === when || before === after) return d\n for (const sw of this.#sweeps.values()) {\n // a sweep whose declared inputs are untouched (by reference) cannot have new pending keys\n if (sw.reads && sw.reads.every((k) => before[k] === after[k])) continue\n const had = new Set(sw.pending(before, when))\n if (sw.pending(after, when).some((k) => !had.has(k))) return when\n }\n return d\n }\n\n /** The duty work an operation opened or unblocked: over the duties that\n * are new, changed, or runnable now but not before, `when` where one\n * is runnable now, else the earliest future dueAt; undefined where none. */\n #dutyWake (before: Readonly<HolderState>, after: Readonly<HolderState>, added: readonly Duty[], when: Millis): Millis | undefined {\n let wake: Millis | undefined\n for (const d of [...Object.values(after.duties), ...added]) {\n const h = this.#duties.get(d.kind)\n if (!h || d.v !== h.v) continue\n const prev = Object.hasOwn(before.duties, d.id) ? before.duties[d.id] : undefined\n const runnable = dutyRunnable(d, h, after, when)\n if (prev !== undefined && jcs(prev) === jcs(d) && (!runnable || dutyRunnable(prev, h, before, when))) continue\n const t = runnable ? when : dutyDue(d) > when ? dutyDue(d) : undefined\n if (t !== undefined) wake = wake === undefined ? t : Math.min(wake, t)\n }\n return wake\n }\n\n /** The failure handlers of the items `digests` (each just turned\n * failed), in order, on `state`; their duties folded into the state. */\n #failed (state: HolderState, digests: readonly string[], when: Millis): { state: HolderState, events: EventDraft[] } {\n let cur = state\n const events: EventDraft[] = []\n for (const digest of digests) {\n const h = this.#failures.get(cur.outbox[digest].type)\n if (!h) continue\n const r = h(cur, digest, when, { backoff: this.#policy.backoff })\n if (r.state.effects !== cur.effects) throw new Error(`engine: the failure handler of ${cur.outbox[digest].type} wrote the effect cache`)\n if (r.outbound?.length) throw new Error(`engine: the failure handler of ${cur.outbox[digest].type} issued documents; it opens duties`)\n cur = r.state\n events.push(...(r.events ?? []))\n if (r.duties?.length) {\n const duties = { ...cur.duties }\n for (const d of r.duties) if (!Object.hasOwn(duties, d.id)) duties[d.id] = d\n cur = { ...cur, duties }\n }\n }\n return { state: cur, events }\n }\n\n /** The give-up of the outbox items named (a replay found them due, see\n * #run): as resume's, the failed step, the status event, the failure\n * handlers in the same transaction; items no longer due are left alone. */\n #giveUpDef (): InternalDef {\n const giveUp = (it: Readonly<OutboxItem>, when: Millis) => this.#giveUp(it, when)\n const failed = (st: HolderState, digests: readonly string[], when: Millis) => this.#failed(st, digests, when)\n return {\n human: false,\n apply (state, _p, digests: string[], when) {\n const outbox: Record<string, OutboxItem> = { ...state.outbox }\n const events: EventDraft[] = []\n const gave: string[] = []\n for (const d of digests) {\n const it = state.outbox[d]\n const t = triasOf(it)\n if (t === 'delivered' || t === 'failed') continue\n const why = giveUp(it, when)\n if (!why) continue\n const { nextAttemptAt: _, ...rest } = it\n outbox[d] = { ...rest, history: [...rest.history, { status: 'failed', at: when, reason: why }] }\n events.push({ type: 'delivery.status', digest: d, threadId: it.threadId, status: 'failed' })\n gave.push(d)\n }\n if (!gave.length) return { state: state as HolderState }\n const f = failed({ ...state, outbox }, gave, when)\n return { state: f.state, events: [...events, ...f.events] }\n },\n }\n }\n\n /** Why a non-terminal outbox item is given up at `when`, or null: its\n * sender lifetime, where it ends no later than the horizon\n * (failed(task-expired), Delivery 6110), else the horizon\n * (failed(expired-by-adapter-policy)). */\n #giveUp (it: Readonly<OutboxItem>, when: Millis): 'task-expired' | 'expired-by-adapter-policy' | null {\n const first = it.history.length ? it.history[0].at : when\n const expiry = Math.min(first + this.#policy.horizonMs, Number.MAX_SAFE_INTEGER)\n const life = it.expiresAt\n if (life !== undefined && when >= life && life <= expiry) return 'task-expired'\n return when >= expiry ? 'expired-by-adapter-policy' : null\n }\n\n #itemOf (state: Readonly<HolderState>, digest: string): OutboxItem {\n if (!Object.hasOwn(state.outbox, digest)) throw new Error(`engine: journaled outbound ${digest} is missing from the outbox`)\n return state.outbox[digest]\n }\n\n #outboundOf (state: Readonly<HolderState>, digest: string): Outbound {\n const it = this.#itemOf(state, digest)\n return structuredClone({ digest, envelope: it.envelope, type: it.type, threadId: it.threadId, recipient: it.recipient, attempt: it.attempt })\n }\n\n // ── built-ins ────────────────────────────────────────────────────────\n\n #tickDef (): InternalDef {\n const policy = (): Policy => this.#policy\n const retainers = () => this.#retain\n const keepers = () => this.#keepKeys\n return {\n human: false,\n apply (state, _p, _input, when) {\n const retention = policy().retentionMs\n let dropped = false\n const keep = <T>(rec: Record<string, T>, live: (x: T, key: string) => boolean): Record<string, T> => {\n const out: Record<string, T> = {}\n for (const [k, v] of Object.entries(rec)) { if (live(v, k)) out[k] = v; else dropped = true }\n return out\n }\n // effects leave with their acks (Delivery 4.2); prompts at expiry; the\n // act journal after the retention\n const effects = keep(state.effects, (x) => x.expiresAt > when)\n const prompts = keep(state.prompts, (x) => x.expiresAt === undefined || x.expiresAt > when)\n const acts = keep(state.acts, (x) => x.at + retention > when)\n // terminal outbox items, the retention after their last step, unless a\n // kept journal entry still answers with them (replay needs the item)\n const journaled = new Set(Object.values(acts).flatMap((a) => a.outboundDigests))\n const outbox = keep(state.outbox, (it, digest) => {\n const t = triasOf(it)\n if (t !== 'delivered' && t !== 'failed') return true\n const last = it.history.length ? it.history[it.history.length - 1].at : 0\n return last + retention > when || journaled.has(digest)\n })\n let next: HolderState = dropped ? { ...state, effects, prompts, acts, outbox } : state as HolderState\n // the modules' own retention, on what the engine's left\n for (const r of retainers()) {\n const after = r(next, when)\n if (after.effects !== next.effects) throw new Error('engine: a module\\'s retain wrote the effect cache')\n next = after\n }\n // addresses (Delivery §5), on what the retention left, so a key whose\n // last claim left in this tick leaves with it: a key not shown for the\n // retention, and the own rkid of no live tuple, becomes a tombstone —\n // its id alone, kept forever; tombstones never shrink\n const held = next\n const live = new Set<string>()\n for (const r of Object.values(held.relationships)) for (const t of r.tuples) if (!t.deactivated) live.add(t.rkid)\n // and the rkids a module still needs (a deactivated prior whose continuity flow is open)\n // (at this tick's time: a claim that ends now ends in this tick)\n for (const k of keepers()) for (const rkid of k(held, when)) live.add(rkid)\n const tombstones = [...held.addresses.tombstones]\n let gone = false\n const keys: HolderState['addresses']['keys'] = {}\n for (const [rkid, k] of Object.entries(held.addresses.keys)) {\n if (k.lastShown + retention > when || live.has(rkid)) { keys[rkid] = k; continue }\n gone = true\n // a member key (group/…) is an identity context, not a delivery\n // address of Delivery §5: it leaves without a tombstone, so the same\n // derivation can serve the same group again (a re-invitation)\n if (!k.label.startsWith('group/') && !tombstones.includes(rkid)) tombstones.push(rkid)\n }\n if (gone) next = { ...held, addresses: { keys, tombstones } }\n return { state: next } // unchanged: the engine still commits a raised lastWhen\n },\n }\n }\n\n /** The duties a resume plans to run, in fixed order (dueAt, then id),\n * and the registered kinds met at an unknown version. Each planned\n * duty is checked again against the current state right before its\n * handler runs (#resumeDef). */\n #dutyPlan (state: Readonly<HolderState>, when: Millis): { run: Array<{ duty: Duty, h: DutyHandler }>, unsupported: Duty[] } {\n const order = Object.values(state.duties).sort((a, b) => (dutyDue(a) - dutyDue(b)) || (a.id < b.id ? -1 : a.id > b.id ? 1 : 0))\n const run: Array<{ duty: Duty, h: DutyHandler }> = []\n const unsupported: Duty[] = []\n for (const duty of order) {\n const h = this.#duties.get(duty.kind)\n if (!h) continue // a kind no module here registers: kept, silent\n if (duty.v !== h.v) { unsupported.push(duty); continue }\n if (dutyRunnable(duty, h, state, when)) run.push({ duty, h })\n }\n return { run, unsupported }\n }\n\n #resumeDef (): InternalDef {\n const expiryAfter = (st: Readonly<HolderState>, w: Millis): Millis | undefined => this.#nextExpiry(st, w)\n const policy = (): Policy => this.#policy\n const plan = (state: Readonly<HolderState>, when: Millis) => this.#dutyPlan(state, when)\n const handlers = (): ReadonlyMap<string, DutyHandler> => this.#duties\n const sweeps = (): ReadonlyMap<string, SweepHandler> => this.#sweeps\n const failed = (st: HolderState, digests: readonly string[], when: Millis) => this.#failed(st, digests, when)\n const ownRetries = (): ReadonlySet<string> => this.#ownRetries\n const giveUp = (it: Readonly<OutboxItem>, when: Millis) => this.#giveUp(it, when)\n return {\n human: false,\n // the due duties' and the sweeps' preparations, against the snapshot apply will see\n async prepare (ctx) {\n const values: Record<string, unknown> = {}\n for (const { duty, h } of plan(ctx.snapshot, ctx.when).run) if (h.prepare) values[duty.id] = await h.prepare(ctx, duty)\n const swept: Record<string, unknown> = {}\n for (const [name, sw] of sweeps()) swept[name] = await sw.prepare(ctx)\n return { duties: values, sweeps: swept }\n },\n apply (state, prepared, _input, when) {\n const p = policy()\n const outbox: Record<string, OutboxItem> = { ...state.outbox }\n const emit: Outbound[] = []\n const events: EventDraft[] = []\n const gaveUp: string[] = []\n let nextDueAt: Millis | undefined\n const due = (t: Millis): void => { nextDueAt = nextDueAt === undefined ? t : Math.min(nextDueAt, t) }\n // 1 — the outbox, by due time, then digest\n const order = Object.keys(state.outbox).sort((a, b) =>\n ((state.outbox[a].nextAttemptAt ?? 0) - (state.outbox[b].nextAttemptAt ?? 0)) || (a < b ? -1 : a > b ? 1 : 0))\n for (const digest of order) {\n const it = state.outbox[digest]\n const trias = triasOf(it)\n if (trias === 'delivered' || trias === 'failed') continue\n // the horizon applies to every non-terminal item: held, accepted or\n // not; a sender lifetime the type declares ends it earlier, as\n // failed(task-expired), never handed out again (Delivery 6110, 6115)\n const why = giveUp(it, when)\n if (why) {\n const { nextAttemptAt: _, ...rest } = it\n outbox[digest] = { ...rest, history: [...it.history, { status: 'failed', at: when, reason: why }] }\n events.push({ type: 'delivery.status', digest, threadId: it.threadId, status: 'failed' })\n gaveUp.push(digest)\n continue\n }\n const first = it.history.length ? it.history[0].at : when\n const expiry = Math.min(first + p.horizonMs, Number.MAX_SAFE_INTEGER)\n due(it.expiresAt !== undefined ? Math.min(it.expiresAt, expiry) : expiry)\n // never re-emitted: an accepted item (the service has it) and one the\n // adapter holds (awaiting-transport, until it reports again)\n if (trias === 'accepted' || it.history[it.history.length - 1]?.status === 'awaiting-transport') continue\n // a type its module re-issues itself is never reproduced (Trust 6710)\n if (ownRetries().has(it.type)) continue\n if (it.nextAttemptAt !== undefined && it.nextAttemptAt > when) { due(it.nextAttemptAt); continue }\n const attempt = it.attempt + 1\n const nextAttemptAt = dueAt(when, p.backoff(attempt))\n outbox[digest] = { ...it, attempt, nextAttemptAt, history: [...it.history, { status: 'submitted', at: when, attempt }] }\n emit.push(structuredClone({ digest, envelope: it.envelope, type: it.type, threadId: it.threadId, recipient: it.recipient, attempt }))\n due(nextAttemptAt)\n }\n // 2 — duties, in the plan's order, each on the state the one before\n // left and checked against it right before its handler: still there\n // at the handler's version, due, its awaited head still holding. A\n // prepared duty whose data changed since its preparation is deferred\n // to the next resume, which prepares it afresh (due at once)\n const { run, unsupported } = plan(state, when)\n for (const d of unsupported) events.push({ type: 'duty.unsupported', dutyId: d.id, kind: d.kind, v: d.v })\n // the outbox changed only by a re-emission or a give-up (an event so far)\n let cur: HolderState = !emit.length && !events.length ? state as HolderState : { ...state, outbox }\n // the failure handlers of the items given up, in the give-up's transaction\n if (gaveUp.length) { const f = failed(cur, gaveUp, when); cur = f.state; events.push(...f.events) }\n const drafts: OutboundDraft[] = []\n const renames: IdentityRename[] = []\n // the duties whose handler returned Applied (invariants.ts: fulfilment)\n const fulfilled: string[] = []\n // ran and stayed (not-due, refused): id → its record as it ran\n const kept = new Map<string, string>()\n const { duties: values, sweeps: swept } = prepared.value as { duties: Record<string, unknown>, sweeps: Record<string, unknown> }\n for (const { duty, h } of run) {\n if (!Object.hasOwn(cur.duties, duty.id)) continue // fulfilled or dropped meanwhile\n const now = cur.duties[duty.id]\n // another kind or version since the plan: the next resume dispatches it\n if (now.kind !== duty.kind || now.id !== duty.id || now.v !== h.v || !dutyRunnable(now, h, cur, when)) continue // the final pass sets its timer\n if (h.prepare && jcs(now) !== jcs(duty)) continue // prepared on other data\n const r = h.apply(cur, now, Object.freeze({ prepared: Object.freeze({ value: values[duty.id], version: prepared.version, commitSeq: prepared.commitSeq }), backoff: p.backoff }), when)\n if (r === 'not-due' || isRefusal(r)) { kept.set(duty.id, jcs(now)); continue }\n // fulfilled: the duty leaves; what its handler opened is folded into\n // the state at once (an id already open is kept), so the duties\n // after it see it — their drop rules and their dedupe included\n const left = { ...r.state.duties }\n delete left[duty.id]\n for (const d of r.duties ?? []) if (!Object.hasOwn(left, d.id)) left[d.id] = d\n cur = { ...r.state, duties: left }\n fulfilled.push(duty.id)\n drafts.push(...(r.outbound ?? []))\n events.push(...(r.events ?? []))\n renames.push(...(r.renames ?? []))\n }\n // 2b — the sweeps, on the state the duties left; a prepared piece\n // whose inputs moved is skipped and due again at once\n for (const [name, sw] of sweeps()) {\n const r = sw.apply(cur, Object.freeze({ value: swept[name], version: prepared.version, commitSeq: prepared.commitSeq }), when)\n if (r.state.effects !== cur.effects) throw new Error(`engine: the sweep ${name} wrote the effect cache`)\n cur = r.state\n if (r.duties?.length) {\n const all = { ...cur.duties }\n for (const d of r.duties) if (!Object.hasOwn(all, d.id)) all[d.id] = d\n cur = { ...cur, duties: all }\n }\n drafts.push(...(r.outbound ?? []))\n events.push(...(r.events ?? []))\n if (r.deferred) due(when)\n }\n // work a sweep owes now but did not prepare: a divergence the outbox\n // step (a give-up at the horizon) or a duty of this resume created —\n // due at once, prepared by the next resume\n if (cur !== state) {\n for (const sw of sweeps().values()) {\n const had = new Set(sw.pending(state, when))\n if (sw.pending(cur, when).some((k) => !had.has(k))) { due(when); break }\n }\n }\n // the timer from the final duty set, new duties included: a future\n // dueAt, or `when` for work runnable now that did not run (deferred,\n // newly created, newly unblocked); a duty that ran and stayed\n // (not-due, refused) sets none while its record is unchanged since\n // its run — changed by a later duty, it counts like any other\n for (const d of Object.values(cur.duties)) {\n const h = handlers().get(d.kind)\n if (!h || d.v !== h.v || kept.get(d.id) === jcs(d)) continue\n if (dutyDue(d) > when) due(dutyDue(d))\n else if (dutyRunnable(d, h, cur, when)) due(when)\n }\n // the duties' new documents enter the outbox in #run, due at backoff(1)\n if (drafts.length) due(dueAt(when, p.backoff(1)))\n // 3 — acks still unsent (a restart between the receive commit and the\n // send, or no report yet): re-offered byte-identical on the retry\n // policy, by effect digest; at the horizon marked sent by it\n const release: Outbound[] = []\n let effects: HolderState['effects'] | null = null\n for (const d of Object.keys(cur.effects).sort()) {\n const a = cur.effects[d].ack\n if (!a || a.sent) continue\n const expiry = Math.min(a.at + p.horizonMs, Number.MAX_SAFE_INTEGER)\n effects ??= { ...cur.effects }\n if (when >= expiry) {\n const { nextAttemptAt: _, ...rest } = a\n effects[d] = { ...cur.effects[d], ack: { ...rest, sent: true, sentBy: 'horizon' } }\n continue\n }\n due(expiry)\n if (a.nextAttemptAt !== undefined && a.nextAttemptAt > when) { due(a.nextAttemptAt); continue }\n const attempt = a.attempt + 1\n const nextAttemptAt = dueAt(when, p.backoff(attempt))\n effects[d] = { ...cur.effects[d], ack: { ...a, attempt, nextAttemptAt } }\n release.push(ackOutbound(a, attempt))\n due(nextAttemptAt)\n }\n if (effects && jcs(effects) !== jcs(cur.effects)) cur = { ...cur, effects }\n // the expiry work tick does (the timer contract, the header)\n const ex = expiryAfter(cur, when)\n if (ex !== undefined) due(ex)\n return {\n state: cur, emit, events, outbound: drafts, release, detail: { fulfilled },\n ...(renames.length ? { renames } : {}),\n ...(nextDueAt !== undefined ? { nextDueAt } : {}),\n }\n },\n }\n }\n\n #reportDef (): InternalDef {\n const failed = (st: HolderState, digests: readonly string[], when: Millis) => this.#failed(st, digests, when)\n return {\n human: false,\n apply (state, _p, report: DeliveryReport, when) {\n if (!Object.hasOwn(state.outbox, report.digest)) {\n // an ack (outbox-less): any report says the app handed it over\n const eff = Object.keys(state.effects).find((d) => state.effects[d].ack?.digest === report.digest)\n if (eff === undefined) return { ok: false, code: 'unknown-digest' }\n const e = state.effects[eff]\n if (e.ack!.sent) return { state: state as HolderState }\n const { nextAttemptAt: _, ...ack } = e.ack!\n return { state: { ...state, effects: { ...state.effects, [eff]: { ...e, ack: { ...ack, sent: true, sentBy: 'report' } } } } }\n }\n const it = state.outbox[report.digest]\n const trias = triasOf(it)\n const had = (s: OutboxStep['status']): boolean => it.history.some((x) => x.status === s)\n const same = { state: state as HolderState }\n let step: OutboxStep\n switch (report.status) {\n case 'awaiting-transport': {\n const last = it.history[it.history.length - 1]\n if (trias !== 'submitted') return same // no step back before the trias\n if (last?.status === 'awaiting-transport' && last.reason === report.reason) return same\n step = { status: 'awaiting-transport', at: when, reason: report.reason }\n break\n }\n case 'accepted':\n if (had('accepted') || trias !== 'submitted') return same\n step = { status: 'accepted', at: when }\n break\n case 'delivered': {\n // lateness is the holder's own history: delivered after failed\n // (its own give-up or the adapter's) is late, whatever the flag says\n const m = markDelivered(state, report.digest, when)\n return m.event ? { state: { ...state, outbox: m.outbox }, events: [m.event] } : same\n }\n case 'failed':\n if (had('failed') || trias === 'delivered') return same\n step = report.reason === 'rejected-by-receiver'\n ? { status: 'failed', at: when, reason: report.reason, code: report.code }\n : { status: 'failed', at: when, reason: report.reason }\n break\n default:\n throw new TypeError(`unknown report status ${String((report as { status?: unknown }).status)}`)\n }\n const base = step.status === 'awaiting-transport' ? it : (({ nextAttemptAt: _, ...rest }) => rest)(it)\n const outbox = { ...state.outbox, [report.digest]: { ...base, history: [...it.history, step] } }\n const events: EventDraft[] = step.status === 'awaiting-transport' ? [] : [{\n type: 'delivery.status', digest: report.digest, threadId: it.threadId, status: step.status,\n }]\n if (step.status === 'failed') {\n const f = failed({ ...state, outbox }, [report.digest], when)\n return { state: f.state, events: [...events, ...f.events] }\n }\n return { state: { ...state, outbox }, events }\n },\n }\n }\n\n #receiveDef (): InternalDef {\n const tasks = (): ReadonlyMap<string, TaskHandler> => this.#tasks\n const acks = (): ReadonlyMap<string, AckHandler> => this.#acks\n const acceptedHooks = (): ReadonlyArray<NonNullable<HolderModule['accepted']>> => this.#accepted\n const policy = (): Policy => this.#policy\n return {\n human: false,\n prepare: (ctx, env) => prepareReceive(ctx, env, tasks()),\n apply (state, prepared, _env, when) {\n const plan = prepared.value as ReceivePlan\n const cached = (ack: Effect['ack']): Effect => ({ ack, expiresAt: Math.min(when + policy().retentionMs, Number.MAX_SAFE_INTEGER) })\n switch (plan.kind) {\n case 'failed': return { halt: true, detail: plan.result }\n case 'duplicate': {\n // the stored ack, byte-identical; a terminal document has none\n // (its outbound attempt is one past the schedule's, which it does not move)\n const a = state.effects[plan.digest].ack\n return { state: state as HolderState, release: a ? [ackOutbound(a, a.attempt + 1)] : [], detail: { disposition: 'duplicate-known', digest: plan.digest } }\n }\n case 'ack': {\n // terminal: the sender-status update and its cache entry, no ack;\n // the issuing module's ack handler runs in the same transaction\n const m = markDelivered(state, plan.ref, when)\n let next: HolderState = { ...state, outbox: m.outbox }\n const events: EventDraft[] = m.event ? [m.event] : []\n const h = acks().get(state.outbox[plan.ref].type)\n if (h) {\n const r = h(next, plan.ref, when)\n if (r.state.effects !== next.effects) throw new Error(`engine: the ack handler of ${state.outbox[plan.ref].type} wrote the effect cache`)\n next = r.state\n events.push(...(r.events ?? []))\n }\n // a verified ack is an accepted document of its issuer too: the\n // modules' accepted hooks, in the same transaction\n for (const hook of acceptedHooks()) {\n next = hook(next, plan.doc, plan.arrival)\n if (next.effects !== state.effects) throw new Error('engine: an accepted hook wrote the effect cache')\n }\n return {\n state: { ...next, effects: { ...next.effects, [plan.digest]: cached(null) } },\n events,\n detail: { disposition: 'unique', digest: plan.digest, type: ACK_TYPE, ref: plan.ref },\n }\n }\n case 'task': {\n const h = tasks().get(plan.type)!\n const r = h.apply(state, handlerPrepared(prepared, plan.value), plan.doc, plan.arrival)\n if (isTaskRefusal(r)) {\n const failedDetail = { disposition: 'failed', reason: r.reason, stage: 9, digest: plan.digest, ...(r.ref !== undefined ? { ref: r.ref } : {}) }\n if (!r.latch) return { halt: true, detail: failedDetail }\n // the Encounter latch exception (receive.ts): only the latch commits\n checkLatch(state, r.latch, when)\n return { state: r.latch, detail: failedDetail }\n }\n if (isTaskDiscarded(r)) {\n // a resource-limit discard: its state commits; no cache entry, no ack\n if (r.state.effects !== state.effects) throw new Error(`engine: the handler of ${plan.type} wrote the effect cache`)\n return { state: r.state, detail: { disposition: 'discarded', digest: plan.digest, type: plan.type, reason: r.reason, ...(r.ref !== undefined ? { ref: r.ref } : {}) } }\n }\n if (r.state.effects !== state.effects) throw new Error(`engine: the handler of ${plan.type} wrote the effect cache; the core writes it`)\n // the modules' accepted hooks, in the same transaction\n let after = r.state\n for (const hook of acceptedHooks()) {\n after = hook(after, plan.doc, plan.arrival)\n if (after.effects !== state.effects) throw new Error('engine: an accepted hook wrote the effect cache')\n }\n return {\n state: { ...after, effects: { ...state.effects, [plan.digest]: cached({ ...plan.ack, at: when, attempt: 1, nextAttemptAt: dueAt(when, policy().backoff(1)), sent: false }) } },\n ...(r.outbound ? { outbound: r.outbound } : {}),\n ...(r.events ? { events: r.events } : {}),\n ...(r.duties ? { duties: r.duties } : {}),\n ...(r.renames ? { renames: r.renames } : {}),\n release: [ackOutbound(plan.ack, 1)],\n detail: { disposition: 'unique', digest: plan.digest, type: plan.type, rkid: plan.arrival.rkid },\n }\n }\n }\n },\n }\n }\n\n // ── public surface ───────────────────────────────────────────────────\n\n act (command: string, input: unknown, when: Millis, opts: { actId?: string } = {}): Promise<ActResult> {\n let def: InternalDef | undefined\n let bound: unknown\n let hash: Promise<string> | undefined\n let actId: string | undefined\n try {\n def = this.#commands.get(command)\n if (!def) throw new Error((BUILTIN as readonly string[]).includes(command) ? `${command} is built in: call engine.${command}()` : `unknown command ${command}`)\n checkWhen(when)\n actId = def.human ? opts.actId : undefined\n if (def.human && (typeof actId !== 'string' || actId === '')) return Promise.resolve({ ok: false, code: 'actid-missing' })\n // bound here, synchronously: later changes by the caller reach nothing\n bound = bindInput(input)\n if (def.human) {\n hash = digestOf(this.#crypto.subtle, { command, input: bound })\n hash.catch(() => undefined) // awaited in the queue; no unhandled rejection meanwhile\n }\n } catch (e) { return Promise.reject(e) }\n const d = def\n return this.#enqueue(async () => {\n return actResult(await this.#run(d, { kind: 'act', command }, bound, when, actId, hash === undefined ? undefined : await hash))\n })\n }\n\n tick (when: Millis): Promise<ActResult> {\n try { checkWhen(when) } catch (e) { return Promise.reject(e) }\n return this.#enqueue(async () => {\n return actResult(await this.#run(this.#builtins.tick, { kind: 'tick' }, null, when))\n })\n }\n\n resume (when: Millis): Promise<ResumeResult> {\n try { checkWhen(when) } catch (e) { return Promise.reject(e) }\n return this.#enqueue(async () => {\n const r = await this.#run(this.#builtins.resume, { kind: 'resume' }, null, when)\n if (isHalt(r) || !r.ok) throw new Error('engine: resume does not refuse')\n return { outbound: r.outbound, events: r.events, ...(r.nextDueAt !== undefined ? { nextDueAt: r.nextDueAt } : {}) }\n })\n }\n\n report (report: DeliveryReport, when: Millis): Promise<ActResult> {\n let bound: DeliveryReport\n try { checkWhen(when); bound = bindInput(report) } catch (e) { return Promise.reject(e) }\n return this.#enqueue(async () => {\n return actResult(await this.#run(this.#builtins.report, { kind: 'report', status: bound.status }, bound, when))\n })\n }\n\n receive (env: unknown, when: Millis): Promise<ReceiveResult> {\n try { checkWhen(when) } catch (e) { return Promise.reject(e) }\n // bound at the call like any input; what is not JSON is no envelope\n let bound: unknown\n try { bound = bindInput(env) } catch { bound = null }\n return this.#enqueue(async () => {\n const r = await this.#run(this.#builtins.receive, { kind: 'receive' }, bound, when)\n if (isHalt(r)) return r.detail as ReceiveResult\n if (!r.ok) throw new Error('engine: receive does not refuse')\n if ((r.detail as { disposition?: string } | undefined)?.disposition === 'failed') return r.detail as ReceiveResult // a latch committed\n const d = r.detail as { disposition: 'unique' | 'duplicate-known' | 'discarded', digest: string, type?: string, reason?: 'resource-limit' | 'rejected', ref?: string }\n if (d.disposition === 'discarded') return { disposition: 'discarded', digest: d.digest, type: d.type!, reason: d.reason!, ...(d.ref !== undefined ? { ref: d.ref } : {}) }\n return d.disposition === 'unique'\n ? { disposition: 'unique', digest: d.digest, type: d.type!, outbound: r.outbound, events: r.events, ...(r.nextDueAt !== undefined ? { nextDueAt: r.nextDueAt } : {}) }\n : { disposition: 'duplicate-known', digest: d.digest, outbound: r.outbound }\n })\n }\n\n subscribe (listener: CommitListener): () => void {\n if (typeof listener !== 'function') throw new TypeError('listener must be a function')\n this.#listeners.add(listener)\n return () => { this.#listeners.delete(listener) }\n }\n\n snapshot (): Promise<EngineSnapshot> {\n return this.#enqueue(async () => {\n const { state } = await this.#read()\n return Object.freeze({ state, commitSeq: state.commitSeq })\n })\n }\n}\n\n/**\n * Build an engine over the ports and modules: resolves and probes\n * WebCrypto, freezes the registries (duplicate command names, task URIs\n * or duty kinds throw), and initialises an empty store with the empty\n * state at the current codec.\n */\nexport async function createEngine (ports: EnginePorts, modules: readonly HolderModule[], opts: EngineOptions = {}): Promise<Engine> {\n if (!ports?.store || !ports.keys) throw new TypeError('createEngine needs a store and keys')\n const crypto = await resolveCrypto(ports.crypto)\n const engine = new HolderEngine(ports, crypto, modules, opts)\n await engine.load()\n return engine\n}\n"]}