@hyperscale0/udl 1.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/AUTHORS +8 -0
  2. package/CHANGELOG.md +36 -0
  3. package/LICENSE +661 -0
  4. package/LICENSING.md +51 -0
  5. package/README.md +163 -0
  6. package/SECURITY.md +42 -0
  7. package/TRADEMARKS.md +35 -0
  8. package/conformance/README.md +79 -0
  9. package/conformance/invalid/blank-title.expected.json +10 -0
  10. package/conformance/invalid/blank-title.udl +50 -0
  11. package/conformance/invalid/depth-budget.expected.json +10 -0
  12. package/conformance/invalid/depth-budget.udl +49 -0
  13. package/conformance/invalid/format-version.expected.json +10 -0
  14. package/conformance/invalid/format-version.udl +50 -0
  15. package/conformance/invalid/invalid-utf8.expected.json +10 -0
  16. package/conformance/invalid/invalid-utf8.udl +1 -0
  17. package/conformance/invalid/malformed-json.expected.json +10 -0
  18. package/conformance/invalid/malformed-json.udl +1 -0
  19. package/conformance/invalid/missing-create-verb.expected.json +10 -0
  20. package/conformance/invalid/missing-create-verb.udl +45 -0
  21. package/conformance/invalid/not-an-object.expected.json +10 -0
  22. package/conformance/invalid/not-an-object.udl +1 -0
  23. package/conformance/invalid/noun-id-not-snake-case.expected.json +10 -0
  24. package/conformance/invalid/noun-id-not-snake-case.udl +50 -0
  25. package/conformance/invalid/unknown-key.expected.json +10 -0
  26. package/conformance/invalid/unknown-key.udl +51 -0
  27. package/conformance/invalid/unreachable-state.expected.json +10 -0
  28. package/conformance/invalid/unreachable-state.udl +51 -0
  29. package/conformance/invalid/verb-without-transition.expected.json +10 -0
  30. package/conformance/invalid/verb-without-transition.udl +55 -0
  31. package/conformance/valid/cards.expected.json +5 -0
  32. package/conformance/valid/cards.udl +1092 -0
  33. package/conformance/valid/commerce-escrow.expected.json +5 -0
  34. package/conformance/valid/commerce-escrow.udl +1011 -0
  35. package/conformance/valid/hand-edited.expected.json +5 -0
  36. package/conformance/valid/hand-edited.udl +1 -0
  37. package/conformance/valid/insured-car-marketplace.expected.json +5 -0
  38. package/conformance/valid/insured-car-marketplace.udl +831 -0
  39. package/conformance/valid/insured-travel.expected.json +5 -0
  40. package/conformance/valid/insured-travel.udl +2621 -0
  41. package/conformance/valid/minimal.expected.json +5 -0
  42. package/conformance/valid/minimal.udl +50 -0
  43. package/conformance/valid/protection.expected.json +5 -0
  44. package/conformance/valid/protection.udl +1136 -0
  45. package/dist/canonical.d.ts +2 -0
  46. package/dist/canonical.d.ts.map +1 -0
  47. package/dist/canonical.js +35 -0
  48. package/dist/canonical.js.map +1 -0
  49. package/dist/cli.d.ts +3 -0
  50. package/dist/cli.d.ts.map +1 -0
  51. package/dist/cli.js +138 -0
  52. package/dist/cli.js.map +1 -0
  53. package/dist/duration.d.ts +3 -0
  54. package/dist/duration.d.ts.map +1 -0
  55. package/dist/duration.js +23 -0
  56. package/dist/duration.js.map +1 -0
  57. package/dist/evolution.d.ts +63 -0
  58. package/dist/evolution.d.ts.map +1 -0
  59. package/dist/evolution.js +345 -0
  60. package/dist/evolution.js.map +1 -0
  61. package/dist/finance.d.ts +53 -0
  62. package/dist/finance.d.ts.map +1 -0
  63. package/dist/finance.js +511 -0
  64. package/dist/finance.js.map +1 -0
  65. package/dist/index.d.ts +11 -0
  66. package/dist/index.d.ts.map +1 -0
  67. package/dist/index.js +8 -0
  68. package/dist/index.js.map +1 -0
  69. package/dist/limits.d.ts +33 -0
  70. package/dist/limits.d.ts.map +1 -0
  71. package/dist/limits.js +33 -0
  72. package/dist/limits.js.map +1 -0
  73. package/dist/parser.d.ts +4 -0
  74. package/dist/parser.d.ts.map +1 -0
  75. package/dist/parser.js +54 -0
  76. package/dist/parser.js.map +1 -0
  77. package/dist/schema.d.ts +757 -0
  78. package/dist/schema.d.ts.map +1 -0
  79. package/dist/schema.js +281 -0
  80. package/dist/schema.js.map +1 -0
  81. package/dist/validation.d.ts +64 -0
  82. package/dist/validation.d.ts.map +1 -0
  83. package/dist/validation.js +1323 -0
  84. package/dist/validation.js.map +1 -0
  85. package/package.json +84 -0
  86. package/spec/README.md +137 -0
  87. package/spec/udl.schema.json +1019 -0
  88. package/src/canonical.ts +41 -0
  89. package/src/cli.ts +148 -0
  90. package/src/duration.ts +26 -0
  91. package/src/evolution.ts +587 -0
  92. package/src/finance.ts +775 -0
  93. package/src/index.ts +59 -0
  94. package/src/limits.ts +32 -0
  95. package/src/parser.ts +61 -0
  96. package/src/schema.ts +339 -0
  97. package/src/validation.ts +2053 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
package/dist/schema.js ADDED
@@ -0,0 +1,281 @@
1
+ import { z } from "zod";
2
+ export const UDL_FORMAT_VERSION = 1;
3
+ const snakeCasePattern = /^[a-z][a-z0-9]*(?:_[a-z0-9]+)*$/;
4
+ const camelCasePattern = /^[a-z][A-Za-z0-9]*$/;
5
+ const fieldPathPattern = /^[a-z][A-Za-z0-9]*(?:\.[a-z][A-Za-z0-9]*)*$/;
6
+ const idPrefixPattern = /^[a-z]{2,8}$/;
7
+ const eventNamePattern = /^[a-z][a-z0-9_]*(?:\.[a-z][a-z0-9_]*)+$/;
8
+ const udlSnakeCaseSchema = z
9
+ .string()
10
+ .regex(snakeCasePattern, "must be a snake_case identifier");
11
+ const udlVerbNameSchema = z
12
+ .string()
13
+ .regex(snakeCasePattern, "must be a snake_case verb identifier");
14
+ const udlFieldNameSchema = z
15
+ .string()
16
+ .regex(camelCasePattern, "must be a camelCase field name");
17
+ const nonEmptyTextSchema = z
18
+ .string()
19
+ .refine((value) => value.trim().length > 0, "must not be blank");
20
+ const fieldPathSchema = z
21
+ .string()
22
+ .regex(fieldPathPattern, "must be a dot-separated camelCase field path");
23
+ const jsonObjectSchema = z.record(z.string(), z.json());
24
+ const stringMapSchema = z.record(nonEmptyTextSchema, nonEmptyTextSchema);
25
+ const udlDeclaredValuePolicySchema = z.enum(["required", "optional", "none"]);
26
+ const udlSubjectSchema = z.strictObject({
27
+ declaredValue: udlDeclaredValuePolicySchema,
28
+ kind: udlSnakeCaseSchema,
29
+ schema: jsonObjectSchema,
30
+ title: nonEmptyTextSchema,
31
+ version: z.number().int().positive(),
32
+ });
33
+ const udlNounSubjectSchema = z.strictObject({
34
+ kinds: z.array(udlSnakeCaseSchema).min(1),
35
+ });
36
+ const udlLifecycleTransitionSchema = z.strictObject({
37
+ from: z.array(udlSnakeCaseSchema).min(1),
38
+ to: udlSnakeCaseSchema,
39
+ });
40
+ const udlLifecycleSchema = z.strictObject({
41
+ initial: udlSnakeCaseSchema,
42
+ states: z.array(udlSnakeCaseSchema).min(1),
43
+ transitions: z.record(udlVerbNameSchema, udlLifecycleTransitionSchema),
44
+ });
45
+ const udlUpdatePolicySchema = z.strictObject({
46
+ fields: z.array(udlFieldNameSchema).min(1),
47
+ states: z.array(udlSnakeCaseSchema).min(1),
48
+ });
49
+ const udlGateSchema = z.strictObject({
50
+ /** Local field key <- referenced instance path; create verbs only. */
51
+ bind: z.record(udlFieldNameSchema, fieldPathSchema).optional(),
52
+ field: udlFieldNameSchema,
53
+ /** Local instance path === referenced instance path at admission. */
54
+ match: z.record(fieldPathSchema, fieldPathSchema).optional(),
55
+ /** Opt-in over an optional reference field: absent passes, set is held to the clause. */
56
+ optional: z.literal(true).optional(),
57
+ statuses: z.array(udlSnakeCaseSchema).min(1),
58
+ /** One dependent ever per referenced instance; create verbs only. */
59
+ unique: z.literal(true).optional(),
60
+ });
61
+ const udlBindingSchema = z.discriminatedUnion("from", [
62
+ z.strictObject({ from: z.literal("const"), value: z.string() }),
63
+ z.strictObject({ from: z.literal("instance"), path: fieldPathSchema }),
64
+ z.strictObject({ from: z.literal("input"), path: fieldPathSchema }),
65
+ ]);
66
+ const udlStepOperationSchema = z.enum([
67
+ "account.escrow.provision",
68
+ "account.freeze",
69
+ "account.unfreeze",
70
+ ]);
71
+ const udlMoveOperationSchema = z.enum([
72
+ "internal_transfer.create",
73
+ "internal_transfer.reserve",
74
+ "internal_transfer.post",
75
+ "internal_transfer.void",
76
+ ]);
77
+ export const udlKernelOperationSchema = z.enum([
78
+ ...udlStepOperationSchema.options,
79
+ ...udlMoveOperationSchema.options,
80
+ ]);
81
+ const udlStepSchema = z.strictObject({
82
+ bind: z.record(fieldPathSchema, udlBindingSchema),
83
+ capture: stringMapSchema.optional(),
84
+ operation: udlStepOperationSchema,
85
+ });
86
+ const udlMoveSchema = z.strictObject({
87
+ bind: z.record(fieldPathSchema, udlBindingSchema),
88
+ capture: stringMapSchema.optional(),
89
+ key: udlSnakeCaseSchema,
90
+ operation: udlMoveOperationSchema,
91
+ });
92
+ const udlDueRecurrenceSchema = z.strictObject({
93
+ countField: udlFieldNameSchema.optional(),
94
+ period: z.union([
95
+ nonEmptyTextSchema,
96
+ z.strictObject({
97
+ calendar: z.enum(["gregorian", "hijri"]),
98
+ months: z.number().int().positive(),
99
+ }),
100
+ ]),
101
+ untilField: udlFieldNameSchema.optional(),
102
+ });
103
+ const udlDueParentStatusSchema = z.strictObject({
104
+ nounId: udlSnakeCaseSchema,
105
+ refField: udlFieldNameSchema,
106
+ statuses: z.array(udlSnakeCaseSchema).min(1),
107
+ });
108
+ const udlDueSchema = z.strictObject({
109
+ every: udlDueRecurrenceSchema.optional(),
110
+ field: udlFieldNameSchema,
111
+ offset: nonEmptyTextSchema.optional(),
112
+ whenParentStatus: udlDueParentStatusSchema.optional(),
113
+ });
114
+ const udlDeadlineSchema = z.strictObject({
115
+ field: udlFieldNameSchema,
116
+ offset: nonEmptyTextSchema.optional(),
117
+ });
118
+ const udlSetsAtSchema = z.strictObject({
119
+ field: udlFieldNameSchema,
120
+ offset: nonEmptyTextSchema,
121
+ });
122
+ const udlUnwindPenaltySchema = z.strictObject({
123
+ bps: z.number().int().min(0).max(9_999),
124
+ withinOffset: nonEmptyTextSchema.optional(),
125
+ });
126
+ const udlUnwindSchema = z.strictObject({
127
+ beforeField: udlFieldNameSchema.optional(),
128
+ confirm: udlVerbNameSchema,
129
+ penalty: z.array(udlUnwindPenaltySchema).min(1),
130
+ quote: udlVerbNameSchema,
131
+ refundableField: udlFieldNameSchema,
132
+ refundDestinationField: udlFieldNameSchema,
133
+ });
134
+ const udlDecisionSchema = z.strictObject({
135
+ capability: udlSnakeCaseSchema,
136
+ deadlineMs: z.number().int().positive(),
137
+ // A decision that never came back is not an approval. `approve` would let a
138
+ // document release money because a counterparty went quiet, so the grammar
139
+ // admits only the fail-closed answer. Every published document already
140
+ // writes `decline`; widening later is additive, narrowing later would not
141
+ // be.
142
+ onTimeout: z.literal("decline"),
143
+ });
144
+ const udlExampleSchema = z.strictObject({
145
+ input: jsonObjectSchema,
146
+ name: nonEmptyTextSchema,
147
+ output: z.json().optional(),
148
+ });
149
+ const udlAggregateCheckSchema = z.discriminatedUnion("kind", [
150
+ z.strictObject({
151
+ amountField: udlFieldNameSchema,
152
+ kind: z.literal("sum_at_least"),
153
+ targetField: udlFieldNameSchema,
154
+ }),
155
+ z.strictObject({
156
+ amountField: udlFieldNameSchema,
157
+ kind: z.literal("sum_below"),
158
+ targetField: udlFieldNameSchema,
159
+ }),
160
+ z.strictObject({
161
+ amountField: udlFieldNameSchema,
162
+ kind: z.literal("sum_exactly"),
163
+ targetField: udlFieldNameSchema,
164
+ }),
165
+ // Siblings summed against a cap read from the LOCKED anchor row's
166
+ // machinery-seeded ref (never a stored field on the counted rows).
167
+ z.strictObject({
168
+ amountField: udlFieldNameSchema,
169
+ anchorRef: udlFieldNameSchema,
170
+ kind: z.literal("sum_within_anchor_ref"),
171
+ }),
172
+ z.strictObject({
173
+ kind: z.literal("count_at_least"),
174
+ targetField: udlFieldNameSchema,
175
+ }),
176
+ z.strictObject({ kind: z.literal("all_in") }),
177
+ z.strictObject({
178
+ field: udlFieldNameSchema,
179
+ kind: z.literal("count_equals_field"),
180
+ }),
181
+ ]);
182
+ const udlAggregateConditionSchema = z.strictObject({
183
+ check: udlAggregateCheckSchema,
184
+ nounId: udlSnakeCaseSchema.optional(),
185
+ over: z.enum(["children", "siblings"]),
186
+ refField: udlFieldNameSchema,
187
+ statuses: z.array(udlSnakeCaseSchema).min(1),
188
+ });
189
+ // The tenant-backend decision port: the verb's caller asserts the acting
190
+ // party, checked at admission against the noun's party bindings for the
191
+ // allowed roles.
192
+ const udlPortSchema = z.strictObject({
193
+ allowedParties: z
194
+ .array(z.enum(["payer", "beneficiary", "subjectHolder"]))
195
+ .min(1),
196
+ });
197
+ // A same-instance conservation law: the piece fields (money, minor units)
198
+ // must sum exactly to the total field; admission refuses a create whose
199
+ // pieces diverge.
200
+ const udlPartitionSchema = z.strictObject({
201
+ pieceFields: z.array(udlFieldNameSchema).min(2),
202
+ totalField: udlFieldNameSchema,
203
+ });
204
+ const udlVerbSchema = z.strictObject({
205
+ deadline: udlDeadlineSchema.optional(),
206
+ decision: udlDecisionSchema.optional(),
207
+ description: nonEmptyTextSchema.optional(),
208
+ due: udlDueSchema.optional(),
209
+ earnable: z.boolean().optional(),
210
+ eventName: z.string().regex(eventNamePattern).optional(),
211
+ examples: z.array(udlExampleSchema).min(1).optional(),
212
+ input: jsonObjectSchema.optional(),
213
+ moves: z.array(udlMoveSchema).default([]),
214
+ port: udlPortSchema.optional(),
215
+ requiresAggregate: z.array(udlAggregateConditionSchema).min(1).optional(),
216
+ requiresDrainedAccount: z.strictObject({ path: fieldPathSchema }).optional(),
217
+ requiresRefs: z.array(udlGateSchema).min(1).optional(),
218
+ setsAt: udlSetsAtSchema.optional(),
219
+ steps: z.array(udlStepSchema),
220
+ summary: nonEmptyTextSchema,
221
+ });
222
+ const udlAggregateBaseShape = {
223
+ childNounId: udlSnakeCaseSchema,
224
+ childRefField: udlFieldNameSchema,
225
+ childStatuses: z.array(udlSnakeCaseSchema).min(1),
226
+ parentField: udlFieldNameSchema,
227
+ };
228
+ // Two measures, mutually exclusive by strictness: a sum cap over a child money
229
+ // field, or a count cap (optionally windowed to the rolling `days` ending at
230
+ // the child's own as-written date-time value).
231
+ const udlAggregateSchema = z.union([
232
+ z.strictObject({
233
+ ...udlAggregateBaseShape,
234
+ childField: udlFieldNameSchema,
235
+ }),
236
+ z.strictObject({
237
+ ...udlAggregateBaseShape,
238
+ count: z.literal(true),
239
+ window: z
240
+ .strictObject({
241
+ field: udlFieldNameSchema,
242
+ days: z.number().int().min(1).max(3650),
243
+ })
244
+ .optional(),
245
+ }),
246
+ ]);
247
+ const udlNounSchema = z.strictObject({
248
+ aggregateInvariants: z.array(udlAggregateSchema).min(1).optional(),
249
+ description: nonEmptyTextSchema.optional(),
250
+ distinctParties: z.literal(true).optional(),
251
+ fields: z.record(udlFieldNameSchema, jsonObjectSchema),
252
+ id: udlSnakeCaseSchema,
253
+ idPrefix: z
254
+ .string()
255
+ .regex(idPrefixPattern, "must contain 2 to 8 lowercase letters"),
256
+ lifecycle: udlLifecycleSchema,
257
+ parties: z
258
+ .strictObject({
259
+ beneficiary: udlFieldNameSchema.optional(),
260
+ payer: udlFieldNameSchema.optional(),
261
+ subjectHolder: udlFieldNameSchema.optional(),
262
+ })
263
+ .optional(),
264
+ partitions: z.array(udlPartitionSchema).min(1).optional(),
265
+ required: z.array(udlFieldNameSchema),
266
+ subject: udlNounSubjectSchema.optional(),
267
+ summary: nonEmptyTextSchema,
268
+ title: nonEmptyTextSchema,
269
+ unwind: udlUnwindSchema.optional(),
270
+ update: udlUpdatePolicySchema.optional(),
271
+ verbs: z.record(udlVerbNameSchema, udlVerbSchema),
272
+ });
273
+ export const udlDocumentSchema = z.strictObject({
274
+ nouns: z.array(udlNounSchema).min(1),
275
+ product: udlSnakeCaseSchema,
276
+ subjects: z.array(udlSubjectSchema),
277
+ title: nonEmptyTextSchema,
278
+ udl: z.literal(UDL_FORMAT_VERSION),
279
+ version: z.number().int().positive(),
280
+ });
281
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import { type ValidationResult } from "@cfworker/json-schema";
2
+ import { type UdlDocument } from "./schema.js";
3
+ export type UdlIssueCode = "invalid_json" | "invalid_semantics" | "invalid_shape" | "invalid_utf8" | "resource_limit";
4
+ export interface UdlIssue {
5
+ readonly code: UdlIssueCode;
6
+ readonly message: string;
7
+ readonly path: string;
8
+ }
9
+ export type UdlValidationResult = {
10
+ readonly ok: true;
11
+ readonly value: UdlDocument;
12
+ } | {
13
+ readonly issues: readonly UdlIssue[];
14
+ readonly ok: false;
15
+ };
16
+ export declare class UdlError extends Error {
17
+ readonly issues: readonly UdlIssue[];
18
+ constructor(issues: readonly UdlIssue[]);
19
+ }
20
+ export declare function validateUdl(value: unknown): UdlValidationResult;
21
+ export declare function assertValidUdl(value: unknown): UdlDocument;
22
+ /**
23
+ * Applies the sealed UDL JSON Schema subset to one value. Both inputs pass the
24
+ * same deterministic admission budgets as a complete UDL document before the
25
+ * standard validator or sealed format validators run.
26
+ */
27
+ export declare function validateUdlSchemaValue(schema: Readonly<Record<string, unknown>>, value: unknown): ValidationResult;
28
+ /**
29
+ * One budget's worth of reference-shape classification: the memo of the answers
30
+ * already bought and what is left of the probe budget. What is guaranteed is
31
+ * that separate opens are independent — each {@link openReferenceShapeBudget}
32
+ * call returns its own memo and its own counter, and nothing resets either
33
+ * afterwards. Sharing is the caller's call, and both choices are made today:
34
+ * `validateUdl` opens one budget for its semantic pass, while the engine's
35
+ * `checkComposerDocument` deliberately runs its noun-composition and
36
+ * gate-deadlock passes on a single shared budget.
37
+ */
38
+ export interface ReferenceShapeBudget {
39
+ /**
40
+ * Does this field schema identify exactly one noun family, by accepting that
41
+ * family's scoped id and refusing a foreign one? Answering compiles two JSON
42
+ * Schema validators, and the question is asked once per declared noun per
43
+ * reference gate — a product a document controls both factors of. The answer
44
+ * is pure in (schema, prefix), so each pair is paid for once per budget.
45
+ *
46
+ * Once {@link UDL_LIMITS.maxSchemaProbes} answers have been bought this
47
+ * budget stops buying: {@link exhausted} is true from that moment on, and a
48
+ * pair not already in the memo answers "no" without being asked (memoized
49
+ * pairs go on answering truthfully). Nothing in this type forces
50
+ * a caller to notice that: reading {@link exhausted} and refusing instead of
51
+ * trusting a dropped "no" is a convention each consumer keeps by hand. The
52
+ * two that exist keep it — `validateUdl` below, and the engine's
53
+ * `checkComposerDocument` — and a third would have to be written to.
54
+ */
55
+ accepts(schema: Readonly<Record<string, unknown>>, prefix: string): boolean;
56
+ /**
57
+ * True once the probe budget is spent — which is the moment the last answer
58
+ * is bought, before any answer has been dropped. A consumer that refuses
59
+ * here refuses a document that fit the budget exactly.
60
+ */
61
+ readonly exhausted: boolean;
62
+ }
63
+ export declare function openReferenceShapeBudget(): ReferenceShapeBudget;
64
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAGL,KAAK,WAAW,EAMjB,MAAM,aAAa,CAAC;AAKrB,MAAM,MAAM,YAAY,GACpB,cAAc,GACd,mBAAmB,GACnB,eAAe,GACf,cAAc,GACd,gBAAgB,CAAC;AAErB,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,mBAAmB,GAC3B;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GAClD;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAA;CAAE,CAAC;AAEjE,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,CAAC;gBAEzB,MAAM,EAAE,SAAS,QAAQ,EAAE;CAUxC;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,CAiC/D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAI1D;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACzC,KAAK,EAAE,OAAO,GACb,gBAAgB,CA2BlB;AA6qDD;;;;;;;;;GASG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5E;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAeD,wBAAgB,wBAAwB,IAAI,oBAAoB,CAwB/D"}