@substrat-run/kernel 0.142.0 → 0.144.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 (169) hide show
  1. package/dist/attachment-extractor.d.ts +0 -9
  2. package/dist/attachment-extractor.d.ts.map +1 -1
  3. package/dist/attachment-extractor.js +2 -2
  4. package/dist/attachment-extractor.js.map +1 -1
  5. package/dist/attachment-text.d.ts +0 -5
  6. package/dist/attachment-text.d.ts.map +1 -1
  7. package/dist/attachment-text.js +0 -4
  8. package/dist/attachment-text.js.map +1 -1
  9. package/dist/attribution.d.ts +0 -7
  10. package/dist/attribution.d.ts.map +1 -1
  11. package/dist/attribution.js +0 -7
  12. package/dist/attribution.js.map +1 -1
  13. package/dist/audit-outcome.d.ts +60 -2
  14. package/dist/audit-outcome.d.ts.map +1 -1
  15. package/dist/audit-outcome.js +63 -3
  16. package/dist/audit-outcome.js.map +1 -1
  17. package/dist/capability.d.ts +20 -13
  18. package/dist/capability.d.ts.map +1 -1
  19. package/dist/capability.js +76 -16
  20. package/dist/capability.js.map +1 -1
  21. package/dist/connector-calls.d.ts +0 -5
  22. package/dist/connector-calls.d.ts.map +1 -1
  23. package/dist/connector-calls.js +1 -1
  24. package/dist/connector-calls.js.map +1 -1
  25. package/dist/denial-query.d.ts +0 -14
  26. package/dist/denial-query.d.ts.map +1 -1
  27. package/dist/denial-query.js +1 -1
  28. package/dist/denial-query.js.map +1 -1
  29. package/dist/derived-handlers.d.ts +17 -0
  30. package/dist/derived-handlers.d.ts.map +1 -0
  31. package/dist/derived-handlers.js +198 -0
  32. package/dist/derived-handlers.js.map +1 -0
  33. package/dist/entity-binding.d.ts +121 -0
  34. package/dist/entity-binding.d.ts.map +1 -0
  35. package/dist/entity-binding.js +235 -0
  36. package/dist/entity-binding.js.map +1 -0
  37. package/dist/entity-grant-shape.d.ts +127 -12
  38. package/dist/entity-grant-shape.d.ts.map +1 -1
  39. package/dist/entity-grant-shape.js +399 -137
  40. package/dist/entity-grant-shape.js.map +1 -1
  41. package/dist/entity-grant.d.ts +5 -7
  42. package/dist/entity-grant.d.ts.map +1 -1
  43. package/dist/entity-grant.js +6 -7
  44. package/dist/entity-grant.js.map +1 -1
  45. package/dist/entity-state.d.ts +0 -17
  46. package/dist/entity-state.d.ts.map +1 -1
  47. package/dist/entity-state.js +2 -2
  48. package/dist/entity-state.js.map +1 -1
  49. package/dist/entity-trash.d.ts +2 -2
  50. package/dist/entity-trash.d.ts.map +1 -1
  51. package/dist/entity-trash.js +6 -6
  52. package/dist/entity-trash.js.map +1 -1
  53. package/dist/grant-scoped-read.d.ts +0 -2
  54. package/dist/grant-scoped-read.d.ts.map +1 -1
  55. package/dist/grant-scoped-read.js +2 -2
  56. package/dist/grant-scoped-read.js.map +1 -1
  57. package/dist/index.d.ts +53 -55
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +51 -53
  60. package/dist/index.js.map +1 -1
  61. package/dist/job-run.d.ts +0 -39
  62. package/dist/job-run.d.ts.map +1 -1
  63. package/dist/job-run.js +6 -6
  64. package/dist/job-run.js.map +1 -1
  65. package/dist/list-index.d.ts +0 -45
  66. package/dist/list-index.d.ts.map +1 -1
  67. package/dist/list-index.js +2 -39
  68. package/dist/list-index.js.map +1 -1
  69. package/dist/membership-executor.d.ts +2 -1
  70. package/dist/membership-executor.d.ts.map +1 -1
  71. package/dist/membership-executor.js +1 -1
  72. package/dist/membership-executor.js.map +1 -1
  73. package/dist/migration-digest.d.ts +0 -12
  74. package/dist/migration-digest.d.ts.map +1 -1
  75. package/dist/migration-digest.js +1 -1
  76. package/dist/migration-digest.js.map +1 -1
  77. package/dist/module-erasure.d.ts +2 -1
  78. package/dist/module-erasure.d.ts.map +1 -1
  79. package/dist/module-erasure.js +12 -1
  80. package/dist/module-erasure.js.map +1 -1
  81. package/dist/module-operations.d.ts +146 -0
  82. package/dist/module-operations.d.ts.map +1 -0
  83. package/dist/module-operations.js +174 -0
  84. package/dist/module-operations.js.map +1 -0
  85. package/dist/peer.d.ts +0 -2
  86. package/dist/peer.d.ts.map +1 -1
  87. package/dist/peer.js +0 -4
  88. package/dist/peer.js.map +1 -1
  89. package/dist/platform-request-query.d.ts +6 -6
  90. package/dist/platform-request-query.d.ts.map +1 -1
  91. package/dist/platform-request-query.js +23 -7
  92. package/dist/platform-request-query.js.map +1 -1
  93. package/dist/platform-sweep.d.ts +26 -2
  94. package/dist/platform-sweep.d.ts.map +1 -1
  95. package/dist/platform-sweep.js +6 -2
  96. package/dist/platform-sweep.js.map +1 -1
  97. package/dist/refusal-query.d.ts +0 -11
  98. package/dist/refusal-query.d.ts.map +1 -1
  99. package/dist/refusal-query.js +1 -1
  100. package/dist/refusal-query.js.map +1 -1
  101. package/dist/refusals.d.ts +1 -3
  102. package/dist/refusals.d.ts.map +1 -1
  103. package/dist/refusals.js +0 -2
  104. package/dist/refusals.js.map +1 -1
  105. package/dist/row-decode.d.ts +16 -1
  106. package/dist/row-decode.d.ts.map +1 -1
  107. package/dist/row-decode.js +18 -6
  108. package/dist/row-decode.js.map +1 -1
  109. package/dist/scope-copy-ledger.d.ts +0 -2
  110. package/dist/scope-copy-ledger.d.ts.map +1 -1
  111. package/dist/scope-copy-ledger.js +1 -1
  112. package/dist/scope-copy-ledger.js.map +1 -1
  113. package/dist/scope-host.d.ts +47 -101
  114. package/dist/scope-host.d.ts.map +1 -1
  115. package/dist/scope-host.js +0 -17
  116. package/dist/scope-host.js.map +1 -1
  117. package/dist/scope-lifecycle.d.ts +0 -21
  118. package/dist/scope-lifecycle.d.ts.map +1 -1
  119. package/dist/scope-lifecycle.js +1 -1
  120. package/dist/scope-lifecycle.js.map +1 -1
  121. package/dist/scope-role-admin.d.ts +0 -6
  122. package/dist/scope-role-admin.d.ts.map +1 -1
  123. package/dist/scope-role-admin.js +1 -1
  124. package/dist/scope-role-admin.js.map +1 -1
  125. package/dist/search-index.d.ts +0 -23
  126. package/dist/search-index.d.ts.map +1 -1
  127. package/dist/search-index.js +2 -24
  128. package/dist/search-index.js.map +1 -1
  129. package/dist/spine-restore.d.ts +0 -22
  130. package/dist/spine-restore.d.ts.map +1 -1
  131. package/dist/spine-restore.js +2 -2
  132. package/dist/spine-restore.js.map +1 -1
  133. package/dist/sql-identifier.d.ts +3 -0
  134. package/dist/sql-identifier.d.ts.map +1 -1
  135. package/dist/sql-identifier.js +2 -0
  136. package/dist/sql-identifier.js.map +1 -1
  137. package/dist/sql-limits.d.ts +4 -0
  138. package/dist/sql-limits.d.ts.map +1 -1
  139. package/dist/sql-limits.js +4 -0
  140. package/dist/sql-limits.js.map +1 -1
  141. package/dist/subject-redaction.d.ts +0 -38
  142. package/dist/subject-redaction.d.ts.map +1 -1
  143. package/dist/subject-redaction.js +4 -4
  144. package/dist/subject-redaction.js.map +1 -1
  145. package/dist/system-switch-record.d.ts +0 -4
  146. package/dist/system-switch-record.d.ts.map +1 -1
  147. package/dist/system-switch-record.js +2 -2
  148. package/dist/system-switch-record.js.map +1 -1
  149. package/dist/system-switch.d.ts +5 -23
  150. package/dist/system-switch.d.ts.map +1 -1
  151. package/dist/system-switch.js +8 -1
  152. package/dist/system-switch.js.map +1 -1
  153. package/dist/table-ownership.d.ts +0 -32
  154. package/dist/table-ownership.d.ts.map +1 -1
  155. package/dist/table-ownership.js +5 -5
  156. package/dist/table-ownership.js.map +1 -1
  157. package/dist/testing.d.ts +17 -0
  158. package/dist/testing.d.ts.map +1 -0
  159. package/dist/testing.js +15 -0
  160. package/dist/testing.js.map +1 -0
  161. package/dist/vertical-events.d.ts +1 -7
  162. package/dist/vertical-events.d.ts.map +1 -1
  163. package/dist/vertical-events.js +2 -10
  164. package/dist/vertical-events.js.map +1 -1
  165. package/package.json +6 -2
  166. package/dist/connect-state.d.ts +0 -103
  167. package/dist/connect-state.d.ts.map +0 -1
  168. package/dist/connect-state.js +0 -128
  169. package/dist/connect-state.js.map +0 -1
@@ -36,13 +36,25 @@ import type { SwitchSql } from './system-switch.js';
36
36
  * the principal; a table column naming the principal), and a person is marked only on their
37
37
  * own record, and only when they hold a row there (live or tombstoned) for some key of the
38
38
  * shape — evidence they were given it. Someone `ctx.grant`ed even the whole shape on another
39
- * person's record is never marked. A shape with no `holder` gets no backfill. Each batch marks
40
- * at most what the pass's budget allows; the markers are the progress, since a marked pair is
41
- * no longer a candidate, and a record tuple (`shape:<type>`, `shape-backfilled`, `scope:<id>`)
42
- * ends it once a batch comes back short.
39
+ * person's record is never marked. A shape with no `holder` gets no backfill. It is read in
40
+ * windows like the walks (#2154): each pass reads at most its read budget of rows, in an index
41
+ * order, marks at most its write budget, and hands back the last row it read as the cursor's
42
+ * `row`, so the next pass seeks past it rather than re-reading from the start. A record tuple
43
+ * (`shape:<type>`, `shape-backfilled`, `scope:<id>`) ends it once a read reaches the end of the
44
+ * range, and never before. A table holder's read is keyed on `idColumn` and then the row's own
45
+ * identity (its `rowid`, or a `WITHOUT ROWID` table's primary key), because nothing makes
46
+ * `idColumn` unique or the principal non-NULL, and a key that ties lets a window's edge skip a row.
47
+ *
48
+ * The cut-off is the cursor. Evidence that lands behind it while the backfill runs (a direct
49
+ * grant of a shape key to the person on their own record, for `'self'` or a table holder) is not
50
+ * marked, and once the record is written nothing is: the same accepted gap as a grant landing
51
+ * after the record. There is deliberately no confirming walk, as a retirement has: it would
52
+ * double every first backfill's reads to catch a grant that a shape grant should have made. For
53
+ * `'grantee'` nothing can land at all, since the first pass records the grantee keys and the
54
+ * tuple writer refuses them to every other grant from then on.
43
55
  * - `holder: 'grantee'` (#2083), for a record that names no principal (a portal customer, a
44
56
  * contact): whoever holds a live current or retired key of the shape on such an entity was given it.
45
- * Each pass records current and retired keys (`shape-grantee-key`), and the explicit tuple
57
+ * Each reconcile records current and retired keys (`shape-grantee-key`), and the explicit tuple
46
58
  * writer makes non-shape grants refuse them on that entity type. A tuple from before the
47
59
  * first such pass cannot be told apart. A marker already written by a shape grant persists
48
60
  * through retirement, so its holder receives the new keys even if their old key was K alone.
@@ -51,8 +63,36 @@ import type { SwitchSql } from './system-switch.js';
51
63
  * record. A sharing shape, which people reach through `ctx.grant` (todo's `list`), is skipped
52
64
  * whole, backfill included, so a sharee is never marked a holder.
53
65
  */
66
+ /**
67
+ * The index every marker walk reads (#2083): markers only, in `(object, subject)` order, so one
68
+ * shape's markers are one range (`<type>:` up to `<type>;`) and a pass's cursor is a seek into
69
+ * it. Without it a pass scanned the whole `_substrat_tuples` table, even when it had nothing to
70
+ * do. Partial, so it costs a row per marker and nothing for any other tuple. SQLite uses a
71
+ * partial index only where it can prove the index's WHERE from the query's, so the walks write the
72
+ * relation as this same literal: proved from the text alone, with no dependence on SQLite
73
+ * re-planning once a parameter is bound. In KERNEL_DDL on both adapters, which every wake re-runs,
74
+ * so an existing scope builds it on its next wake.
75
+ */
76
+ export declare const SHAPE_MARKER_INDEX_DDL = "CREATE INDEX IF NOT EXISTS _substrat_tuples_shape_marker ON _substrat_tuples (object, subject) WHERE relation = 'bootstrap'";
54
77
  /** Holders topped up per pass — one transaction each, so a large scope never holds one long. */
55
78
  export declare const SHAPE_TOP_UP_BATCH = 500;
79
+ /**
80
+ * Rows a pass may READ, per row of work it may write: markers on a walk, and the tuples or table
81
+ * rows the backfill reads for candidates (#2154). The budget bounds writes, but finding
82
+ * the holders who need one means reading past the ones who do not, and on a scope where nobody
83
+ * does (the common reconcile: nothing changed) that is every marker. Ten per row keeps a pass at
84
+ * 5000 index rows by default, short on any scope, while a rollout still spends most of each pass
85
+ * writing. A pass that reads its window without filling its budget hands back a cursor, and the
86
+ * next pass reads on from there.
87
+ */
88
+ export declare const SHAPE_MARKER_READS_PER_ROW = 10;
89
+ /**
90
+ * Confirming walks that may take keys, per shape per reconcile, before its retirement is left open
91
+ * for the next reconcile. Each one that takes keys starts another, so a steady stream of grants of
92
+ * a retired key landing ahead of the walk would otherwise keep a single reconcile walking forever.
93
+ * Left open, the retirement keeps no record, so the next reconcile simply runs it again.
94
+ */
95
+ export declare const SHAPE_RETIRE_CONFIRMS_MAX = 3;
56
96
  /** The largest batch a caller may ask for: past this a pass is the long transaction it exists to avoid. */
57
97
  export declare const SHAPE_TOP_UP_BATCH_MAX = 5000;
58
98
  /** `batch`, or `validation_failed`: a pass size is a positive integer no larger than the max. */
@@ -64,6 +104,54 @@ export declare function shapeTopUpBatch(batch?: number): number;
64
104
  * transaction, so the marker and its keys land together or not at all.
65
105
  */
66
106
  export declare function grantEntityShapeIn(db: SwitchSql, principal: PrincipalId, entity: EntityRef, permissions: readonly string[]): void;
107
+ /**
108
+ * Where a pass stopped, so the next pass of the same reconcile starts there instead of at the
109
+ * first marker (#2083): the shape (its index in `shapes`), the step of it, and for a marker walk
110
+ * the last marker it read. Without it every pass re-read the holders earlier passes had already
111
+ * finished, and a rollout cost passes × markers.
112
+ *
113
+ * Skipping what lies behind it is safe because a walk leaves every marker it passes finished:
114
+ * topped up (each key now has a row) or with its retired keys tombstoned. A marker written behind
115
+ * it mid-run is complete when a shape grant writes it, and the backfill finishes before its
116
+ * shape's walks begin. The exception is a shape grant by an OLDER deployment, carrying the shape
117
+ * as it was, landing behind the cursor while the reconcile runs:
118
+ *
119
+ * - Missing a key the shape gained: the top-up keeps no record, so the next reconcile's top-up
120
+ * reaches that holder.
121
+ * - Holding a key the shape retired: a retirement ends in a run-once record, so a holder it never
122
+ * saw would never be reached. The first walk therefore never writes that record. Once it reaches
123
+ * the last marker, a CONFIRMING walk starts again from the first (`confirm`), and the record is
124
+ * written only when a confirming walk reaches the last marker having taken nothing; one that
125
+ * took keys starts another, up to `SHAPE_RETIRE_CONFIRMS_MAX`; past that the retirement is left
126
+ * open for the next reconcile. A grant landing behind the confirming walk itself is the gap
127
+ * left, the same as one landing after the retirement finished.
128
+ */
129
+ export interface ShapeCursor {
130
+ shape: number;
131
+ step: 'backfill' | 'retire' | 'topUp';
132
+ /** The last marker a walk read; `null` resumes the step from its start. */
133
+ marker: {
134
+ object: string;
135
+ subject: string;
136
+ } | null;
137
+ /**
138
+ * The backfill only (#2154): the sort key of the last row its read reached, `[object, relation,
139
+ * subject]` of a tuple for a `'self'` or `'grantee'` holder, `[id, rowid]` for a table holder
140
+ * (`[id, …primary key]` for a `WITHOUT ROWID` table). Absent
141
+ * or `null` reads the backfill from its start, which is always safe: a pair it already marked
142
+ * is no longer a candidate, so a cursor from before this field (or one a rollback ignores) only
143
+ * costs a re-read.
144
+ */
145
+ row?: readonly (string | number)[] | null;
146
+ /**
147
+ * A confirming retire walk only: whether it has taken nothing so far, and how many confirming
148
+ * walks before it, on this shape in this reconcile, took keys.
149
+ */
150
+ confirm?: {
151
+ clean: boolean;
152
+ count: number;
153
+ };
154
+ }
67
155
  /** Where a pass runs and how its events are stamped — the facts only the adapter holds. */
68
156
  export interface ShapePass {
69
157
  tenantId: string;
@@ -73,22 +161,49 @@ export interface ShapePass {
73
161
  now: string;
74
162
  /** Rows of work at most: a backfill mark or a holder topped up each count one. */
75
163
  limit: number;
164
+ /** The previous pass's `next`; absent or `null` starts the reconcile from the beginning. */
165
+ after?: ShapeCursor | null;
76
166
  /** The adapter's monotonic event-id mint, given the instant in ms. */
77
167
  mintEventId: (ms: number) => string;
78
168
  /** The deploy writing the events, for the outbox `version` column. */
79
169
  version: string | null;
80
170
  }
81
171
  /**
82
- * One pass of the reconcile over one scope, at most `limit` rows of work: backfill marks for any
83
- * shape whose backfill is not done here, then holders whose retired keys are taken back, each
84
- * with its `entity.grants-retired` event, then holders topped up, each with its
85
- * `entity.grants-topped-up` event. `done` is false when the budget ran out, and the caller runs
86
- * another pass. Run it inside ONE transaction, so the keys and their events commit together.
87
- * Re-running a finished scope writes nothing.
172
+ * One pass of the reconcile over one scope, at most `limit` rows of work and
173
+ * `limit × SHAPE_MARKER_READS_PER_ROW` rows read (markers, and the backfill's tuples or table
174
+ * rows): backfill marks for any shape whose backfill
175
+ * is not done here, then holders whose retired keys are taken back, each with its
176
+ * `entity.grants-retired` event, then holders topped up, each with its `entity.grants-topped-up`
177
+ * event. `next` is `null` once the scope is done; otherwise the caller runs another pass with it
178
+ * as `after`. `retirementsLeftOpen` counts the shapes whose retirement this pass gave up on at
179
+ * `SHAPE_RETIRE_CONFIRMS_MAX`, for the next reconcile to run again. Run it inside ONE
180
+ * transaction, so the keys and their events commit together. Re-running a finished scope writes
181
+ * nothing.
88
182
  */
89
183
  export declare function topUpEntityGrantShapes(db: SwitchSql, pass: ShapePass): {
90
184
  toppedUp: number;
91
185
  retired: number;
92
- done: boolean;
186
+ retirementsLeftOpen: number;
187
+ next: ShapeCursor | null;
93
188
  };
189
+ /**
190
+ * A BINDING shape's record (#1686), on the scope's tuple spine beside the grantee keys: which
191
+ * table column names the record's person (`<table>.<idColumn>.<principalColumn>`), the key that
192
+ * lets someone bind or unbind them, and the shape's current keys — what a binding invite's claim
193
+ * gives. The claim and an unbind read these, never the vertical's code: the shape is the reviewed
194
+ * registry the platform last reconciled this scope with. Each identifier is a SQL identifier, so
195
+ * `.` cannot occur inside one.
196
+ */
197
+ export declare const BIND_HOLDER_RELATION = "shape-bind-holder";
198
+ export declare const BIND_PERMISSION_RELATION = "shape-bind-permission";
199
+ export declare const BIND_KEY_RELATION = "shape-bind-key";
200
+ /**
201
+ * `(shape:<type>, shape-bound, bound)`: this scope has declared a binding for `<type>` (#1686).
202
+ * Written by the first reconcile that records the binding (and by every claim, to the same effect)
203
+ * and STICKY — no reconcile removes it, whatever later
204
+ * versions declare — so an erasure keeps releasing that type's holders after a version drops the
205
+ * shape, drops its `bind` or moves its holder column. A spine tuple like the others here, so
206
+ * module code can never write one (`ctx.sql` refuses every `_substrat_*` write).
207
+ */
208
+ export declare const BOUND_EVER_RELATION = "shape-bound";
94
209
  //# sourceMappingURL=entity-grant-shape.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"entity-grant-shape.d.ts","sourceRoot":"","sources":["../src/entity-grant-shape.ts"],"names":[],"mappings":"AAAA,OAAO,EAUL,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,yBAAyB,CAAC;AAMjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAEH,gGAAgG;AAChG,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,2GAA2G;AAC3G,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAE3C,iGAAiG;AACjG,wBAAgB,eAAe,CAAC,KAAK,GAAE,MAA2B,GAAG,MAAM,CAS1E;AAiBD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CASjI;AAED,2FAA2F;AAC3F,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACpC,8EAA8E;IAC9E,GAAG,EAAE,MAAM,CAAC;IACZ,kFAAkF;IAClF,KAAK,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,sEAAsE;IACtE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,SAAS,EACb,IAAI,EAAE,SAAS,GACd;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CA+EtD"}
1
+ {"version":3,"file":"entity-grant-shape.d.ts","sourceRoot":"","sources":["../src/entity-grant-shape.ts"],"names":[],"mappings":"AAAA,OAAO,EAUL,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,yBAAyB,CAAC;AAMjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAMpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG;AAEH;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,gIAAsJ,CAAC;AAE1L,gGAAgG;AAChG,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC;;;;;;;;GAQG;AACH,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAC7C;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,2GAA2G;AAC3G,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAE3C,iGAAiG;AACjG,wBAAgB,eAAe,CAAC,KAAK,GAAE,MAA2B,GAAG,MAAM,CAS1E;AAuBD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CASjI;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;IACtC,2EAA2E;IAC3E,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACnD;;;;;;;OAOG;IACH,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC;IAC1C;;;OAGG;IACH,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7C;AAED,2FAA2F;AAC3F,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACpC,8EAA8E;IAC9E,GAAG,EAAE,MAAM,CAAC;IACZ,kFAAkF;IAClF,KAAK,EAAE,MAAM,CAAC;IACd,4FAA4F;IAC5F,KAAK,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,sEAAsE;IACtE,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,sEAAsE;IACtE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,SAAS,EACb,IAAI,EAAE,SAAS,GACd;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,CA+D9F;AAuZD;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,sBAAsB,CAAC;AACxD,eAAO,MAAM,wBAAwB,0BAA0B,CAAC;AAChE,eAAO,MAAM,iBAAiB,mBAAmB,CAAC;AAClD;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,gBAAgB,CAAC"}