@rindle/client 0.4.3 → 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.
package/dist/types.d.ts CHANGED
@@ -79,6 +79,7 @@ export type ChangeEvent = {
79
79
  } | {
80
80
  type: "batch";
81
81
  events: FlatChange[];
82
+ catchUp?: boolean;
82
83
  };
83
84
  export type Mutation = {
84
85
  op: "add";
@@ -201,8 +202,13 @@ export interface Backend {
201
202
  /** Optional DIRECT-COMMIT path for LOCAL-only tables (`201-LOCAL-ONLY-TABLES-DESIGN.md` §6):
202
203
  * applies the writes straight to the engine, OUTSIDE the optimistic pending stack (a local
203
204
  * table is untracked, so it never rebases). The backend rejects any synced/tracked table (M2).
204
- * Backends with no local-table support (a plain remote sync backend) omit it. */
205
- writeLocal?(mutations: Mutation[]): void;
205
+ * Backends with no local-table support (a plain remote sync backend) omit it.
206
+ *
207
+ * `onCommitted` (207 §5.1) runs after the engine commit is applied but BEFORE subscriber
208
+ * delivery: a subscriber throwing during delivery re-raises out of this call, and a caller
209
+ * that must stay coherent with the engine (the persistence tap) cannot tell that throw from
210
+ * a pre-commit rejection — the callback can, because it fires exactly when the commit is in. */
211
+ writeLocal?(mutations: Mutation[], onCommitted?: () => void): void;
206
212
  onEvent(handler: (queryId: QueryId, event: ChangeEvent) => void): void;
207
213
  /** Optional: the backend pushes per-query {@link ResultType} changes here and the core routes
208
214
  * each to the matching view (so `view.resultType` tracks it). Backends with no lifecycle (the
@@ -251,6 +257,32 @@ export interface MutationEnvelope {
251
257
  name: string;
252
258
  args: unknown;
253
259
  }
260
+ /** A room authority's verdict for a NON-applied mutation (RINDLE-REALTIME-QUERY-ENABLEMENT
261
+ * §3.3, the deopt handshake; Slice H-iv-b server half / H-v client half). Sent on the author's
262
+ * own socket for every mutation the room did NOT apply, always BEFORE the lmid ack that burns
263
+ * the `mid` (same-socket ordering only — the ack may reach the client through another path
264
+ * first, e.g. a replayed lmid snapshot). Applied mutations send NOTHING: silence + lmid
265
+ * coverage ⇒ applied.
266
+ *
267
+ * - `kind: "deopt"` — the room's §3.3 commit gate refused the routed mutation (or its
268
+ * environment fell short, e.g. `tx.query`); the mid is burnt in the ROOM ledger with zero
269
+ * effects and the client re-enqueues the same logical mutation onto the daemon stream.
270
+ * `name`/`args` are echoed so the frame is SELF-CONTAINED: a client that already retired the
271
+ * entry (the burnt-mid confirm won the race, or the frame is a replay re-answer) re-invokes
272
+ * from the frame alone.
273
+ * - `kind: "rejected"` — FINAL (authz/validation): the mid is burnt the same way and the
274
+ * prediction snaps back on the ordinary lmid release; no re-route.
275
+ *
276
+ * `reason` may be absent on a re-answered frame whose record was seeded from journal replay
277
+ * (the verdict is journaled; the reason is not). */
278
+ export interface MutationOutcomeFrame {
279
+ mid: number;
280
+ kind: "deopt" | "rejected";
281
+ reason?: string;
282
+ /** Echoed on DEOPT frames only (self-contained re-invoke — see above). */
283
+ name?: string;
284
+ args?: unknown;
285
+ }
254
286
  /** The connection-level progress frame (§8.6): advances the coherent-apply release point
255
287
  * (`cvMin`). A pure release signal — mutation confirmation does NOT ride it: `lmid` is a
256
288
  * row in {@link CLIENT_MUTATIONS_TABLE}, delivered through the client's own per-client
@@ -258,6 +290,13 @@ export interface MutationEnvelope {
258
290
  * `cvMin` as the commit's effects (transactionally coherent by construction). */
259
291
  export interface ProgressFrame {
260
292
  cvMin: number;
293
+ /** A ROOM shell's upstream-absorption advert (`301-ECHO-FENCE-DESIGN.md` §1.2, optional —
294
+ * old shells omit both): "I have absorbed upstream daemon commits through cv `upstreamCv`
295
+ * of daemon boot `upstreamBoot`." The client's §301 direction-B pin fence: a pin stamped
296
+ * `(boot, cv)` at its parking daemon release drops once the room advertises coverage under
297
+ * the §2.4 boot rule. The daemon's own progress frames never carry these. */
298
+ upstreamCv?: number;
299
+ upstreamBoot?: string;
261
300
  }
262
301
  /** The replicated bookkeeping table carrying each client's high-water mutation id
263
302
  * (`lmid`). Engine-hosted and served like any base table; reserved (never part of a
@@ -290,5 +329,35 @@ export interface OptimisticSource {
290
329
  * boot id). The backend resets its `cv` watermark so the server's reset `cv` sequence is
291
330
  * accepted rather than dropped as stale. In-process sources never restart and omit it. */
292
331
  onRestart?(handler: () => void): void;
332
+ /** Optional (§301 §2.4): the transport's observed authority BOOT-ID stream — fired on the
333
+ * FIRST observation and on every change (the same signal that drives {@link onRestart}, plus
334
+ * the initial one). The backend keeps client-local ordinals over these opaque ids; the
335
+ * direction-B pin fence's boot rule compares a room's advertised
336
+ * {@link ProgressFrame.upstreamBoot} against them. Sources that cannot observe one omit it —
337
+ * direction-B pins then hold to the state-match fallback across restarts (conservative). */
338
+ onBootId?(handler: (bootId: string) => void): void;
339
+ /** Optional (Slice H-v): the channel's {@link MutationOutcomeFrame} stream — the room deopt
340
+ * handshake's client half. **OUT-OF-BAND BY DESIGN**: the frame carries no `cv` and the source
341
+ * MUST dispatch it immediately on arrival, never behind the cv buffer — a deopt has to migrate
342
+ * its pending entry BEFORE the buffered lmid release that would otherwise retire it as a
343
+ * success (and the §7.3 hold-back trigger, keyed on the entry's confirming domain, would then
344
+ * park its staged writes the wrong way). Sources whose authority never deopts (the in-process
345
+ * native source, a plain daemon) omit it. */
346
+ onMutationOutcome?(handler: (frame: MutationOutcomeFrame) => void): void;
347
+ /** Optional (Slice H-v, the §7.5 rule-3 crash-window closer): fired when the transport
348
+ * RE-establishes its session (reconnect → re-`init`), BEFORE any post-reconnect frame is
349
+ * processed — the ordering is load-bearing: the re-subscribed lmid stream's fresh snapshot may
350
+ * cover a mid whose `mutationOutcome` frame died with the old socket, and once that release
351
+ * retires the entry as an apparent success there is nothing left to re-send. The backend
352
+ * re-sends this domain's unconfirmed pending envelopes with their ORIGINAL mids, in mid order;
353
+ * the source may DEFER their delivery until the session is re-authorized (a room's
354
+ * `pushMutation` requires the lease-token subscribe's subject). Idempotent under the domain's
355
+ * own ledger — a processed mid dedups silently (silence + lmid coverage ⇒ applied), a
356
+ * non-applied mid is re-answered from the authority's recorded-outcome map (resolving even an
357
+ * already-retired entry through the handshake's not-found arm). Distinct from
358
+ * {@link onRestart} (a NEW server incarnation): a same-incarnation socket drop re-syncs
359
+ * without restarting, and envelopes sent into the dead socket are exactly what this recovers.
360
+ * In-process sources never drop a session and omit it. */
361
+ onResync?(handler: () => void): void;
293
362
  }
294
363
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,EAAE;AACF,sFAAsF;AACtF,0EAA0E;AA0O1E;;8EAE8E;AAC9E,MAAM,CAAC,MAAM,sBAAsB,GAAG,0BAA0B,CAAC;AAEjE;;mEAEmE;AACnE,MAAM,CAAC,MAAM,eAAe,GAAG,oBAAoB,CAAC;AAEpD;qDACqD;AACrD,MAAM,CAAC,MAAM,uBAAuB,GAA0B;IAC5D,IAAI,EAAE,sBAAsB;IAC5B,OAAO,EAAE,CAAC,WAAW,EAAE,kBAAkB,CAAC;IAC1C,UAAU,EAAE,CAAC,CAAC,CAAC;CAChB,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,EAAE;AACF,sFAAsF;AACtF,0EAA0E;AAsR1E;;8EAE8E;AAC9E,MAAM,CAAC,MAAM,sBAAsB,GAAG,0BAA0B,CAAC;AAEjE;;mEAEmE;AACnE,MAAM,CAAC,MAAM,eAAe,GAAG,oBAAoB,CAAC;AAEpD;qDACqD;AACrD,MAAM,CAAC,MAAM,uBAAuB,GAA0B;IAC5D,IAAI,EAAE,sBAAsB;IAC5B,OAAO,EAAE,CAAC,WAAW,EAAE,kBAAkB,CAAC;IAC1C,UAAU,EAAE,CAAC,CAAC,CAAC;CAChB,CAAC"}
package/dist/view.d.ts CHANGED
@@ -1,10 +1,19 @@
1
- import type { ColType, FlatChange, QueryId, ResultType, WireSchema } from "./types.ts";
1
+ import type { ColType, FlatChange, QueryId, ResultType, WireSchema, WireValue } from "./types.ts";
2
2
  /** Per-level column types (parallel to the WireSchema), used to JSON.parse json columns on
3
3
  * projection. Built by the Store from the typed schema; absent ⇒ no parsing (bare values). */
4
4
  export interface ViewTypes {
5
5
  columnTypes: ColType[];
6
6
  rels: Record<number, ViewTypes>;
7
7
  }
8
+ /** The phase of an {@link ArrayView.onChanges} delivery: the initial hydrate `snapshot` vs a later
9
+ * incremental `batch` — the same distinction a narrator draws (`ChangeEvent` `snapshot`/`batch`). */
10
+ export type ChangePhase = "snapshot" | "batch";
11
+ /** A per-view change listener ({@link ArrayView.onChanges}): the net `FlatChange[]` this view folded,
12
+ * the {@link ChangePhase} it arrived on, and the view's `WireSchema` (the position→name source for
13
+ * `resolveChange`). This is the DIFF the data channel ({@link ArrayView.subscribe}) discards — the
14
+ * seam a narrator drives off. The `schema` is passed (not closed over) because the first `snapshot`
15
+ * fires synchronously inside `materialize`, before the caller holds the view handle. */
16
+ export type ViewChangeListener = (changes: FlatChange[], phase: ChangePhase, schema: WireSchema) => void;
8
17
  /** The public ArrayView contract `materialize()` returns. */
9
18
  export interface ArrayView<R> {
10
19
  /** The current materialized result (reference-stable where data is unchanged). */
@@ -26,6 +35,14 @@ export interface ArrayView<R> {
26
35
  /** Subscribe; fires immediately with the current data, then after each applied batch (and after
27
36
  * a {@link resultType} change — re-read `resultType` in the listener). */
28
37
  subscribe(listener: (data: readonly R[]) => void): () => void;
38
+ /** Subscribe to this view's folded CHANGE stream — the `FlatChange[]` it applies, NET of no-op
39
+ * cycles (a rebase's balanced `remove`+`add` / edit round-trip cancels, so a correctly predicted
40
+ * optimistic write delivers nothing here). Carries the diff {@link subscribe} throws away; the
41
+ * per-view seam a narrator rides. Does NOT replay on subscribe — attach via
42
+ * `store.materialize(query, { onChanges })` to catch a synchronous backend's first snapshot.
43
+ * A view with any change listener also enriches its own `remove` ops with the evicted subtree
44
+ * (per-view, no global opt-in). Returns a detach function. */
45
+ onChanges(listener: ViewChangeListener): () => void;
29
46
  /** Tear down + stop receiving updates. */
30
47
  destroy(): void;
31
48
  }
@@ -44,6 +61,10 @@ export interface SingularArrayView<R> {
44
61
  /** Subscribe; fires immediately with the current row, then after each applied batch (and after
45
62
  * a {@link resultType} change). */
46
63
  subscribe(listener: (data: R | null) => void): () => void;
64
+ /** Subscribe to the view's folded CHANGE stream — see {@link ArrayView.onChanges}. The changes
65
+ * are the same positional `FlatChange`s as the plural view (a `.one()` is just the list capped to
66
+ * one), so a narrator resolves them identically. */
67
+ onChanges(listener: ViewChangeListener): () => void;
47
68
  /** Tear down + stop receiving updates. */
48
69
  destroy(): void;
49
70
  }
@@ -57,8 +78,15 @@ export declare class SingularView<R> implements SingularArrayView<R> {
57
78
  get schema(): WireSchema | null;
58
79
  get resultType(): ResultType;
59
80
  subscribe(listener: (data: R | null) => void): () => void;
81
+ onChanges(listener: ViewChangeListener): () => void;
60
82
  destroy(): void;
61
83
  }
84
+ /** Elementwise equality over positional bare-cell rows — THE row comparator for every JS-side
85
+ * diff (views, aggregate heads, the persistence mirror), exported so no caller grows a drifted
86
+ * private copy. Per cell: `===` keeps `-0 === 0` (the engine's key semantics treat them equal);
87
+ * the `Object.is` arm makes a NaN cell equal itself (under `!==` alone, a NaN-bearing row never
88
+ * matches any copy of itself, so every diff re-emits it as a spurious edit forever). */
89
+ export declare function rowsEqual(a: WireValue[], b: WireValue[]): boolean;
62
90
  export declare class FlatArrayView<R = unknown> implements ArrayView<R> {
63
91
  private readonly _qid;
64
92
  private _schema;
@@ -69,6 +97,8 @@ export declare class FlatArrayView<R = unknown> implements ArrayView<R> {
69
97
  private cached;
70
98
  private rt;
71
99
  private readonly listeners;
100
+ private readonly changeListeners;
101
+ private pendingSegments;
72
102
  constructor(schema?: WireSchema, types?: ViewTypes, qid?: QueryId);
73
103
  get qid(): QueryId;
74
104
  get schema(): WireSchema | null;
@@ -80,14 +110,25 @@ export declare class FlatArrayView<R = unknown> implements ArrayView<R> {
80
110
  /** (Re)bind to a schema and clear the tree IN PLACE. The first `hello` (pending → ready)
81
111
  * and a re-hydrate (gap → new epoch — FLAT-CHANGES-DESIGN.md §2.3) both go through here, so
82
112
  * the caller's view reference and its subscribers survive a re-subscribe. Does NOT notify —
83
- * the snapshot that follows (`applyChanges`) does, avoiding an empty-then-filled flicker. */
113
+ * the snapshot that follows (`applyChanges`) does, avoiding an empty-then-filled flicker.
114
+ * KEEPS any SSR `seeded` rows: they are retired only when the first live snapshot lands
115
+ * ({@link retireSeed}, driven by the Store), so `data` shows the seed — not an empty tree —
116
+ * across the whole `hello`→first-`snapshot` gap. */
84
117
  reset(schema: WireSchema, types?: ViewTypes): void;
85
118
  /** Install a pre-projected SSR first-paint snapshot (SSR-DESIGN.md §6). The rows are already
86
119
  * in result shape (json columns parsed, relationships nested), so a view with no live backend
87
120
  * (the server one-shot Store) reads them directly, and a browser view shows them until its
88
- * first live `hello` (`reset`) swaps in the maintained tree. Does NOT notify — it is set at
89
- * materialize time, before any subscriber, and the live snapshot that follows notifies. */
121
+ * first live snapshot lands ({@link retireSeed}). Does NOT notify — it is set at materialize
122
+ * time, before any subscriber, and the live snapshot that follows notifies. */
90
123
  seed(rows: readonly R[]): void;
124
+ /** Retire the SSR first-paint seed — the Store calls this as it folds the maintained tree's first
125
+ * live snapshot, so `data` switches from the seed to the live tree with no empty gap between them
126
+ * (the seed deliberately survived the earlier `reset`/`hello`). Idempotent. Does NOT notify — the
127
+ * snapshot fold it accompanies does; BUT when that fold is empty (a 0-row result, or rows already
128
+ * in `top`) it notifies nothing, so the Store forces a {@link notify} on the strength of the `true`
129
+ * return here — else the view reads the live tree yet never re-renders (a frozen seed). Returns
130
+ * whether a live seed was actually cleared (so the Store knows a forced notify is owed). */
131
+ retireSeed(): boolean;
91
132
  /** Apply a batch (the hydrate snapshot or one transaction's events) in order, then
92
133
  * notify subscribers once. Order is significant (FLAT-CHANGES-DESIGN.md §5.4). A no-op
93
134
  * while pending (changes never precede the `hello` that resets the schema).
@@ -95,15 +136,19 @@ export declare class FlatArrayView<R = unknown> implements ArrayView<R> {
95
136
  * `enrichRemoves` ⇒ before a removed node is dropped, reconstruct its full subtree and attach it
96
137
  * to the `remove` op's `node` (in place, so the same event object the Store fans out to its
97
138
  * change subscribers carries it). Off by default — paid only when a consumer asked for it, and
98
- * only on a real eviction (an rc-decrement that keeps the row leaves `node` absent).
139
+ * only on a real eviction (an rc-decrement that keeps the row leaves `node` absent). A view with
140
+ * an attached {@link onChanges} listener ALSO enriches (per-view, no global opt-in), so a
141
+ * narrator can resolve a removed row's subs whether or not the store-global counter is set.
99
142
  *
100
143
  * `deferNotify` ⇒ fold but do NOT notify; the caller is responsible for calling {@link flush}
101
144
  * later. The Store uses this to fold every view in one commit before notifying any subscriber
102
145
  * (cross-view-atomic notification — `Store.onCommitBoundary`); standalone use leaves it off, so
103
146
  * a bare view still fires its subscribers after each applied batch.
104
147
  *
105
- * Returns whether the batch changed the view (so a deferring caller knows it must be flushed). */
106
- applyChanges(events: FlatChange[], enrichRemoves?: boolean, deferNotify?: boolean): boolean;
148
+ * `phase` tags the {@link onChanges} delivery (`snapshot` for the hydrate, `batch` otherwise); it
149
+ * does not affect the fold. Returns whether the batch changed the view (so a deferring caller
150
+ * knows it must be flushed). */
151
+ applyChanges(events: FlatChange[], enrichRemoves?: boolean, deferNotify?: boolean, phase?: ChangePhase): boolean;
107
152
  /** Notify subscribers with the current data. The deferred half of {@link applyChanges} (when
108
153
  * `deferNotify` was set): the Store calls this at the commit-notify barrier — after every view
109
154
  * touched by the same commit has folded — so a subscriber that re-reads a sibling view inside
@@ -111,6 +156,13 @@ export declare class FlatArrayView<R = unknown> implements ArrayView<R> {
111
156
  flush(): void;
112
157
  get data(): readonly R[];
113
158
  subscribe(listener: (data: readonly R[]) => void): () => void;
159
+ onChanges(listener: ViewChangeListener): () => void;
160
+ /** Net the folded batch and hand the survivors to the change listeners, AFTER the data `notify`
161
+ * (the order `Store.subscribeChanges` consumers already observe). A batch that nets to nothing —
162
+ * a correctly predicted rebase — makes no call, so a narrator sees only real change. Each listener
163
+ * is isolated: a throwing one reports to `note` (the caller re-raises the first) and the rest still
164
+ * run, so one bad narration template never starves a sibling listener nor corrupts the view. */
165
+ private deliverChanges;
114
166
  destroy(): void;
115
167
  private applyAt;
116
168
  private applyOp;
@@ -121,6 +173,9 @@ export declare class FlatArrayView<R = unknown> implements ArrayView<R> {
121
173
  private applyRemove;
122
174
  private applyEdit;
123
175
  private project;
124
- private notify;
176
+ /** Notify data subscribers with the current {@link data}. Normally driven by a fold ({@link
177
+ * applyChanges}/{@link flush}); the Store also calls it directly to land a seed retirement whose
178
+ * accompanying fold was empty (see {@link retireSeed}). */
179
+ notify(): void;
125
180
  }
126
181
  //# sourceMappingURL=view.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../src/view.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../src/view.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAU,OAAO,EAAE,UAAU,EAAY,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEpH;+FAC+F;AAC/F,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,OAAO,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CACjC;AAED;sGACsG;AACtG,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC;AAE/C;;;;yFAIyF;AACzF,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;AAEzG,6DAA6D;AAC7D,MAAM,WAAW,SAAS,CAAC,CAAC;IAC1B,kFAAkF;IAClF,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC;IAC5B;;;gEAG4D;IAC5D,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB;;6FAEyF;IACzF,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IACnC;;;gEAG4D;IAC5D,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC;+EAC2E;IAC3E,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC9D;;;;;;mEAM+D;IAC/D,SAAS,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,IAAI,CAAC;IACpD,0CAA0C;IAC1C,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;wFAEwF;AACxF,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,wEAAwE;IACxE,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACxB,uDAAuD;IACvD,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,oEAAoE;IACpE,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IACnC,sEAAsE;IACtE,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC;wCACoC;IACpC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC1D;;yDAEqD;IACrD,SAAS,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,IAAI,CAAC;IACpD,0CAA0C;IAC1C,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;mFACmF;AACnF,qBAAa,YAAY,CAAC,CAAC,CAAE,YAAW,iBAAiB,CAAC,CAAC,CAAC;IAC1D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;gBAEzB,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;IAI/B,IAAI,IAAI,IAAI,CAAC,GAAG,IAAI,CAEnB;IAED,IAAI,GAAG,IAAI,OAAO,CAEjB;IAED,IAAI,MAAM,IAAI,UAAU,GAAG,IAAI,CAE9B;IAED,IAAI,UAAU,IAAI,UAAU,CAE3B;IAED,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,KAAK,IAAI,GAAG,MAAM,IAAI;IAIzD,SAAS,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,IAAI;IAInD,OAAO,IAAI,IAAI;CAGhB;AAmED;;;;yFAIyF;AACzF,wBAAgB,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,OAAO,CAMjE;AAkJD,qBAAa,aAAa,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,SAAS,CAAC,CAAC,CAAC;IAG7D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAU;IAI/B,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,KAAK,CAAC,CAAY;IAM1B,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,MAAM,CAA6B;IAI3C,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA2C;IAGrE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiC;IAOjE,OAAO,CAAC,eAAe,CAAuD;gBAElE,MAAM,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,GAAG,GAAE,OAAW;IAMpE,IAAI,GAAG,IAAI,OAAO,CAEjB;IAED,IAAI,MAAM,IAAI,UAAU,GAAG,IAAI,CAE9B;IAED,IAAI,UAAU,IAAI,UAAU,CAE3B;IAED;;wDAEoD;IACpD,aAAa,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI;IAMnC;;;;;;yDAMqD;IACrD,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI;IAalD;;;;oFAIgF;IAChF,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,GAAG,IAAI;IAI9B;;;;;;iGAM6F;IAC7F,UAAU,IAAI,OAAO;IAMrB;;;;;;;;;;;;;;;;;;qCAkBiC;IACjC,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,aAAa,UAAQ,EAAE,WAAW,UAAQ,EAAE,KAAK,GAAE,WAAqB,GAAG,OAAO;IA8CrH;;;iFAG6E;IAC7E,KAAK,IAAI,IAAI;IAwBb,IAAI,IAAI,IAAI,SAAS,CAAC,EAAE,CAUvB;IAED,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,KAAK,IAAI,GAAG,MAAM,IAAI;IAQ7D,SAAS,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,IAAI;IAOnD;;;;qGAIiG;IACjG,OAAO,CAAC,cAAc;IAgBtB,OAAO,IAAI,IAAI;IASf,OAAO,CAAC,OAAO;IAef,OAAO,CAAC,OAAO;IAYf,OAAO,CAAC,QAAQ;IAUhB;;uBAEmB;IACnB,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,SAAS;IAwDjB,OAAO,CAAC,OAAO;IAoCf;;gEAE4D;IAC5D,MAAM,IAAI,IAAI;CAIf"}