@elaraai/e3 1.0.58 → 1.0.59

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/src/task.js CHANGED
@@ -2,7 +2,8 @@
2
2
  * Copyright (c) 2025 Elara AI Pty Ltd
3
3
  * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
4
  */
5
- import { Expr, variant, ArrayType, StringType, East, IRType } from '@elaraai/east';
5
+ import { Expr, variant, some, none, ArrayType, StringType, NullType, FunctionType, StructType, East, IRType, encodeEastIR, toEastTypeValue, isTypeValueEqual } from '@elaraai/east';
6
+ import { TASK_KIND_PARTITION, TASK_KIND_STREAM, encodePartitionTaskMetadata, encodeStreamTaskMetadata } from '@elaraai/e3-types';
6
7
  import { DEFAULT_RUNNER, runnerToCommand } from './runner.js';
7
8
  import { validateEnvironmentDecl } from './environment.js';
8
9
  /**
@@ -176,4 +177,420 @@ export function customTask(name, inputs, outputType, command, config) {
176
177
  output.deps.add(taskDef);
177
178
  return taskDef;
178
179
  }
180
+ /** Default carved-slice byte target for {@link partitionTask}. */
181
+ const DEFAULT_TARGET_PARTITION_BYTES = 256 * 1024 * 1024;
182
+ /** The East key type a collection dataset is carved by. */
183
+ function collectionKeyType(name, dataset) {
184
+ const type = dataset.type;
185
+ switch (type.type) {
186
+ case 'Dict': return type.key;
187
+ case 'Set': return type.key;
188
+ case 'Array': return type.value;
189
+ default:
190
+ throw new Error(`partitionTask '${name}': partitioned dataset '${dataset.name}' must be a collection (Array, Set or Dict), got ${type.type}`);
191
+ }
192
+ }
193
+ /** Extracts the shape a `by` projection reads — see {@link ProjectionShape}
194
+ * — or `null` for any other (unaccepted) shape. */
195
+ function projectionFieldPrefix(ir) {
196
+ const param = ir.value.parameters[0]?.value.name;
197
+ if (param === undefined)
198
+ return null;
199
+ // Chase wrappers to the expression the body evaluates to.
200
+ const unwrap = (node) => {
201
+ for (;;) {
202
+ if (node.type === 'Block') {
203
+ const statements = node.value.statements;
204
+ if (statements.length === 0)
205
+ return node;
206
+ node = statements[statements.length - 1];
207
+ }
208
+ else if (node.type === 'Return') {
209
+ node = node.value.value;
210
+ }
211
+ else if (node.type === 'As' || node.type === 'WrapRecursive' || node.type === 'UnwrapRecursive') {
212
+ node = node.value.value;
213
+ }
214
+ else {
215
+ return node;
216
+ }
217
+ }
218
+ };
219
+ const isParam = (node) => node.type === 'Variable' && node.value.name === param;
220
+ const fieldOf = (node) => node.type === 'GetField' && isParam(unwrap(node.value.struct)) ? node.value.field : null;
221
+ // Walks a GetField chain down to the parameter: `key.a.b` → ['a', 'b'].
222
+ const pathOf = (node) => {
223
+ const path = [];
224
+ let cur = node;
225
+ while (cur.type === 'GetField') {
226
+ path.unshift(cur.value.field);
227
+ cur = unwrap(cur.value.struct);
228
+ }
229
+ return isParam(cur) && path.length > 0 ? path : null;
230
+ };
231
+ const body = unwrap(ir.value.body);
232
+ if (isParam(body))
233
+ return { kind: 'fields', names: [] };
234
+ const chain = pathOf(body);
235
+ if (chain !== null) {
236
+ // A one-step chain is a top-level field read — the `fields` family.
237
+ return chain.length === 1 ? { kind: 'fields', names: chain } : { kind: 'path', names: chain };
238
+ }
239
+ if (body.type === 'Struct') {
240
+ const fields = [];
241
+ for (const { value } of body.value.fields) {
242
+ const f = fieldOf(unwrap(value));
243
+ if (f === null)
244
+ return null;
245
+ fields.push(f);
246
+ }
247
+ return { kind: 'fields', names: fields };
248
+ }
249
+ return null;
250
+ }
251
+ /**
252
+ * Defines a partitioned task: e3 carves the huge partitioned input(s) into
253
+ * key-range slices, runs `fn` once per partition as an ordinary
254
+ * content-addressed execution (parallel, memoized per partition), and
255
+ * assembles the output — by splicing shards in partition order, or by
256
+ * folding partials pairwise when `combine` is given.
257
+ *
258
+ * `fn` always returns the output type: without `combine` each execution
259
+ * returns its *shard* of the output (Array shards concatenate freely;
260
+ * Dict/Set shard key ranges must ascend disjointly in partition order — any
261
+ * key-preserving or monotone re-keying transform qualifies). The shard
262
+ * contract is deliberately enforced at SPLICE TIME, not build time: whether
263
+ * an arbitrary body preserves key order is not decidable from types, and a
264
+ * static rule would false-reject permitted monotone re-keys — a violation
265
+ * fails the task deterministically at splice, naming the offending
266
+ * partitions and the remedies (`combine` / `customTask`). With `combine`
267
+ * each execution returns a *partial* and the partials fold.
268
+ *
269
+ * Parameter order is fixed and fully typed: the partition slices first (in
270
+ * declared order, each typed as its dataset's own collection type), then the
271
+ * ordinary `inputs` in order.
272
+ *
273
+ * @typeParam Name - Task name (literal type)
274
+ * @typeParam Partitions - Partitioned input dataset defs
275
+ * @typeParam Inputs - Ordinary input dataset defs
276
+ * @typeParam Output - Output type
277
+ * @param name - Task name
278
+ * @param spec - The declaration: partitioned inputs, alignment, output type,
279
+ * combine mode, sizing, runner and environment
280
+ * @param fn - Implementation body, run once per partition
281
+ * @returns A TaskDef with `.output` for chaining
282
+ * @throws {Error} When a partitioned dataset is not a collection, partitions
283
+ * mix collection kinds (or include Arrays) under co-partitioning, key
284
+ * types cannot align, `by` (explicit or the implicit alignment under
285
+ * co-partitioning) does not read a leading prefix of every partitioned
286
+ * dataset's key, or the output is not a collection in splice mode (no
287
+ * `combine`).
288
+ *
289
+ * @example
290
+ * ```ts
291
+ * const sales = e3.input('sales', DictType(StringType, SaleType));
292
+ *
293
+ * const cleaned = e3.partitionTask('cleaned', {
294
+ * partitions: [sales],
295
+ * output: DictType(StringType, SaleType),
296
+ * }, ($, slice) => slice.filter(($, sale) => East.greater(sale.qty, 0n)));
297
+ * ```
298
+ */
299
+ export function partitionTask(name, spec, fn) {
300
+ const partitions = spec.partitions;
301
+ const inputs = (spec.inputs ?? []);
302
+ const output = spec.output;
303
+ // Partitioned inputs must be collections; co-partitioning is restricted to
304
+ // Dict/Set roots (a shared key space must exist for boundary alignment —
305
+ // an Array has none).
306
+ const keyTypes = partitions.map((p) => collectionKeyType(name, p));
307
+ const kinds = partitions.map((p) => p.type.type);
308
+ if (partitions.length > 1) {
309
+ const first = kinds[0];
310
+ if (first === 'Array' || kinds.some((k) => k !== first)) {
311
+ throw new Error(`partitionTask '${name}': co-partitioning is restricted to Dict/Set roots sharing a key space — ` +
312
+ `got [${kinds.join(', ')}]. Partition one dataset and access the others as ordinary inputs, or re-key upstream.`);
313
+ }
314
+ }
315
+ // The `by` parameter type: a single partition's own key, or the strict
316
+ // field-wise intersection of every key struct under co-partitioning.
317
+ let byParamType;
318
+ if (partitions.length === 1) {
319
+ byParamType = keyTypes[0];
320
+ }
321
+ else if (keyTypes.every((k) => k.type === 'Struct')) {
322
+ const first = keyTypes[0];
323
+ const shared = {};
324
+ for (const [field, fieldType] of Object.entries(first.fields)) {
325
+ const everywhere = keyTypes.every((k) => {
326
+ const other = k.fields[field];
327
+ return other !== undefined && isTypeValueEqual(toEastTypeValue(other), toEastTypeValue(fieldType));
328
+ });
329
+ if (everywhere)
330
+ shared[field] = fieldType;
331
+ }
332
+ if (Object.keys(shared).length === 0) {
333
+ throw new Error(`partitionTask '${name}': co-partitioned key types share no identically-typed fields — the datasets have no common key space`);
334
+ }
335
+ byParamType = StructType(shared);
336
+ }
337
+ else {
338
+ const first = toEastTypeValue(keyTypes[0]);
339
+ if (!keyTypes.every((k) => isTypeValueEqual(toEastTypeValue(k), first))) {
340
+ throw new Error(`partitionTask '${name}': co-partitioned key types must be identical (or share struct fields) for boundary alignment`);
341
+ }
342
+ byParamType = keyTypes[0];
343
+ }
344
+ // Reify `by` and validate the leading-prefix soundness condition per
345
+ // dataset: struct keys sort lexicographically by declared field order, so
346
+ // the projection must read a leading prefix of each dataset's OWN order.
347
+ let byIr;
348
+ let byShape = null;
349
+ if (spec.by !== undefined) {
350
+ const byFn = East.function([byParamType], undefined, spec.by);
351
+ const bundle = byFn.toIR();
352
+ const shape = projectionFieldPrefix(bundle.ir);
353
+ if (shape === null) {
354
+ throw new Error(`partitionTask '${name}': \`by\` must project a leading prefix of the partition key — ` +
355
+ `accepted shapes: the key itself, a leading field (\`key.f\`), a nested leading-field ` +
356
+ `path (\`key.a.b\`, each step the first field of its level), or a struct literal of ` +
357
+ `leading fields in declared order (\`{ f1: key.f1, f2: key.f2 }\`)`);
358
+ }
359
+ if (shape.names.length > 0) {
360
+ for (let i = 0; i < partitions.length; i++) {
361
+ const keyType = keyTypes[i];
362
+ if (keyType.type !== 'Struct') {
363
+ throw new Error(`partitionTask '${name}': \`by\` reads key fields, but partitioned dataset '${partitions[i].name}' has a non-struct key (${keyType.type}) — use the identity projection`);
364
+ }
365
+ if (shape.kind === 'fields') {
366
+ const order = Object.keys(keyType.fields);
367
+ const misaligned = shape.names.length > order.length || shape.names.some((f, j) => order[j] !== f);
368
+ if (misaligned) {
369
+ throw new Error(`partitionTask '${name}': \`by\` projects (${shape.names.join(', ')}), which is not a leading prefix of ` +
370
+ `partitioned dataset '${partitions[i].name}' key field order (${order.join(', ')})`);
371
+ }
372
+ }
373
+ else {
374
+ // Nested path: every step must read the FIRST field of its
375
+ // level's struct — struct keys sort lexicographically by declared
376
+ // field order, so only first-field descent preserves it.
377
+ let level = keyType;
378
+ for (let j = 0; j < shape.names.length; j++) {
379
+ const step = shape.names[j];
380
+ if (level.type !== 'Struct') {
381
+ throw new Error(`partitionTask '${name}': \`by\` path (key.${shape.names.join('.')}) descends into a ${level.type} at '${step}' — ` +
382
+ `every step must read the first field of a struct level of partitioned dataset '${partitions[i].name}'`);
383
+ }
384
+ const levelFields = level.fields;
385
+ const order = Object.keys(levelFields);
386
+ if (order[0] !== step) {
387
+ throw new Error(`partitionTask '${name}': \`by\` path (key.${shape.names.slice(0, j + 1).join('.')}) reads '${step}', which is not ` +
388
+ `the first field of partitioned dataset '${partitions[i].name}' key level (${order.join(', ')})`);
389
+ }
390
+ level = levelFields[step];
391
+ }
392
+ }
393
+ }
394
+ }
395
+ byShape = shape;
396
+ byIr = encodeEastIR(bundle);
397
+ }
398
+ // Under co-partitioning with non-identical key types, the EFFECTIVE
399
+ // boundary projection must ALSO be a leading prefix of every dataset's
400
+ // key order when it is implicit:
401
+ // - with no `by`, the runtime aligns secondaries under the PRIMARY's key
402
+ // comparator — the projection is the primary's full field sequence;
403
+ // - with an identity `by`, it is the shared-intersection struct in its
404
+ // declared field order.
405
+ // A key set like {sku,period} × {period,sku} passes the field-wise
406
+ // intersection yet sorts differently per dataset — accepted, it would
407
+ // silently mis-assign rows at run time with a success status.
408
+ if (partitions.length > 1) {
409
+ const firstKey = toEastTypeValue(keyTypes[0]);
410
+ const keysIdentical = keyTypes.every((k) => isTypeValueEqual(toEastTypeValue(k), firstKey));
411
+ const validatedByFields = byShape !== null && byShape.names.length > 0;
412
+ if (!keysIdentical && !validatedByFields) {
413
+ // Non-identical keys reach here only via the struct-intersection path.
414
+ const sourceFields = (t) => t.fields;
415
+ const effective = spec.by !== undefined
416
+ ? { label: 'the identity `by` projection reads the shared key fields', fields: sourceFields(byParamType) }
417
+ : { label: `with no \`by\`, co-partition boundaries align on partitioned dataset '${partitions[0].name}' key order`, fields: sourceFields(keyTypes[0]) };
418
+ const eff = Object.keys(effective.fields);
419
+ for (let i = 0; i < partitions.length; i++) {
420
+ const fields = sourceFields(keyTypes[i]);
421
+ const order = Object.keys(fields);
422
+ const misaligned = eff.length > order.length || eff.some((f, j) => order[j] !== f || !isTypeValueEqual(toEastTypeValue(effective.fields[f]), toEastTypeValue(fields[f])));
423
+ if (misaligned) {
424
+ throw new Error(`partitionTask '${name}': ${effective.label} (${eff.join(', ')}), which is not a leading prefix of ` +
425
+ `partitioned dataset '${partitions[i].name}' key field order (${order.join(', ')}) — ` +
426
+ `declare \`by\` as a shared leading-prefix projection, or re-key upstream`);
427
+ }
428
+ }
429
+ }
430
+ }
431
+ // Splice mode (no `combine`) assembles the output from per-partition
432
+ // SHARDS in partition order — only a collection can splice. A
433
+ // non-collection output would pass definition time and fail only when the
434
+ // input first carves into two or more partitions.
435
+ if (spec.combine === undefined && output.type !== 'Array' && output.type !== 'Set' && output.type !== 'Dict') {
436
+ throw new Error(`partitionTask '${name}': without \`combine\`, each partition returns a shard of the output and the shards ` +
437
+ `splice in partition order — the output must be a collection (Array, Set or Dict), got ${output.type}. ` +
438
+ `Provide \`combine\` to fold non-collection partials.`);
439
+ }
440
+ // Reify `combine` as a free East function (Out, Out) -> Out.
441
+ let combineIr;
442
+ if (spec.combine !== undefined) {
443
+ const combineFn = East.function([output, output], output, spec.combine);
444
+ combineIr = encodeEastIR(combineFn.toIR());
445
+ }
446
+ const targetPartitionBytes = spec.targetPartitionBytes ?? DEFAULT_TARGET_PARTITION_BYTES;
447
+ if (!Number.isInteger(targetPartitionBytes) || targetPartitionBytes <= 0) {
448
+ throw new Error(`partitionTask '${name}': targetPartitionBytes must be a positive integer, got ${spec.targetPartitionBytes}`);
449
+ }
450
+ const bodyFn = East.function([...partitions.map((p) => p.type), ...inputs.map((i) => i.type)], output, fn);
451
+ const metadata = encodePartitionTaskMetadata({
452
+ partitions: BigInt(partitions.length),
453
+ by: byIr !== undefined ? some(byIr) : none,
454
+ combine: combineIr !== undefined ? some(combineIr) : none,
455
+ targetPartitionBytes: BigInt(targetPartitionBytes),
456
+ });
457
+ return task(name, [...partitions, ...inputs], bodyFn, {
458
+ kind: TASK_KIND_PARTITION,
459
+ metadata,
460
+ ...(spec.runner !== undefined && { runner: spec.runner }),
461
+ ...(spec.environment !== undefined && { environment: spec.environment }),
462
+ });
463
+ }
464
+ /**
465
+ * Defines a streaming task: one execution whose runner feeds the `stream`
466
+ * input segment-by-segment in canonical order (state is ordinary `$.let`
467
+ * locals) and writes the output incrementally through the `emit` capability
468
+ * — bounded memory at both ends, exact left-fold semantics, no parallelism
469
+ * and no partial recompute.
470
+ *
471
+ * `emit` is a runner-implemented function value: `emit(key, value)` for Dict
472
+ * outputs, `emit(element)` for Array/Set outputs. The streaming writer
473
+ * re-batches emissions byte-adaptively; Dict/Set outputs must be emitted in
474
+ * strictly ascending (key) order (the canonical-segment contract, enforced
475
+ * at runtime), Array outputs emit freely. The body's return value is unused
476
+ * — the output dataset is what `emit` wrote.
477
+ *
478
+ * With no `stream`, the task is a producer: its body loops over
479
+ * platform-function sources (paginated APIs, database cursors) and emits.
480
+ * A producer's real input is the outside world, so it follows the existing
481
+ * integration-task conventions for re-run semantics — `emit` changes nothing
482
+ * about that.
483
+ *
484
+ * @typeParam Name - Task name (literal type)
485
+ * @typeParam Output - Output collection type
486
+ * @typeParam Stream - Streamed input dataset def, when present
487
+ * @typeParam Inputs - Ordinary input dataset defs
488
+ * @param name - Task name
489
+ * @param spec - The declaration: stream input, ordinary inputs, output
490
+ * collection type, runner and environment
491
+ * @param fn - Implementation body; receives the stream value (when
492
+ * declared), the inputs, then `emit`, and returns nothing
493
+ * @returns A TaskDef with `.output` for chaining
494
+ * @throws {Error} When the output is not a collection type or the runner is
495
+ * the `custom` runtime.
496
+ *
497
+ * @example
498
+ * ```ts
499
+ * const events = e3.input('events', ArrayType(EventType));
500
+ *
501
+ * const balances = e3.streamTask('balances', {
502
+ * stream: events,
503
+ * output: ArrayType(BalanceType),
504
+ * }, ($, events, emit) => {
505
+ * const balance = $.let(0.0);
506
+ * $.for(events, ($, event) => {
507
+ * $.assign(balance, balance.add(event.amount));
508
+ * $(emit({ at: event.at, balance }));
509
+ * });
510
+ * });
511
+ * ```
512
+ */
513
+ export function streamTask(name, spec, fn) {
514
+ if (spec.environment)
515
+ validateEnvironmentDecl(spec.environment, name);
516
+ const output = spec.output;
517
+ const inputs = (spec.inputs ?? []);
518
+ let emitKind;
519
+ let emitType;
520
+ switch (output.type) {
521
+ case 'Dict':
522
+ emitKind = 'dict';
523
+ emitType = FunctionType([output.key, output.value], NullType);
524
+ break;
525
+ case 'Set':
526
+ emitKind = 'set';
527
+ emitType = FunctionType([output.key], NullType);
528
+ break;
529
+ case 'Array':
530
+ emitKind = 'array';
531
+ emitType = FunctionType([output.value], NullType);
532
+ break;
533
+ default:
534
+ throw new Error(`streamTask '${name}': output must be a collection type (Array, Set or Dict), got ${output.type} — for small results use e3.task`);
535
+ }
536
+ const runner = spec.runner ?? DEFAULT_RUNNER;
537
+ if (runner.runtime === 'custom') {
538
+ throw new Error(`streamTask '${name}': the custom runtime cannot carry the streaming flags — use a stock runtime (east-node, east-py, east-c)`);
539
+ }
540
+ const paramTypes = [
541
+ ...(spec.stream !== undefined ? [spec.stream.type] : []),
542
+ ...inputs.map((i) => i.type),
543
+ emitType,
544
+ ];
545
+ const bodyFn = East.function(paramTypes, NullType, fn);
546
+ const eastIR = bodyFn.toIR();
547
+ const taskTree = createTaskTree(name);
548
+ const functionIRDataset = createFunctionIRDataset(name, taskTree, eastIR);
549
+ const input_datasets = [
550
+ functionIRDataset,
551
+ ...(spec.stream !== undefined ? [spec.stream] : []),
552
+ ...inputs,
553
+ ];
554
+ const outputDataset = createOutputDataset(name, taskTree, output);
555
+ // The command mirrors task()'s, with the streaming flags ahead of the
556
+ // input list: the runner constructs the emit sink for the output kind and
557
+ // feeds the flagged `-i` input (0-based; the stream is always the first
558
+ // one) lazily instead of whole-decoding it.
559
+ const argvPrefix = [
560
+ ...runnerToCommand(runner),
561
+ '--emit', emitKind,
562
+ ...(spec.stream !== undefined ? ['--stream', '0'] : []),
563
+ ];
564
+ const commandFn = East.function([ArrayType(StringType), StringType], ArrayType(StringType), ($, input_paths, output_path) => {
565
+ const command = $.let(argvPrefix, ArrayType(StringType));
566
+ const i = $.let(1n);
567
+ $.while(East.less(i, input_paths.size()), $ => {
568
+ $(command.pushLast('-i'));
569
+ $(command.pushLast(input_paths.get(i)));
570
+ $.assign(i, i.add(1n));
571
+ });
572
+ $(command.pushLast('-o'));
573
+ $(command.pushLast(output_path));
574
+ $(command.pushLast(input_paths.get(0n)));
575
+ $.return(command);
576
+ });
577
+ const metadata = encodeStreamTaskMetadata({
578
+ stream: spec.stream !== undefined,
579
+ emit: emitKind,
580
+ });
581
+ const taskDef = {
582
+ kind: 'task',
583
+ name,
584
+ command: commandFn.toIR(),
585
+ inputs: input_datasets,
586
+ output: outputDataset,
587
+ deps: collectDeps(taskTree, outputDataset, input_datasets),
588
+ taskKind: TASK_KIND_STREAM,
589
+ metadata,
590
+ runner,
591
+ ...(spec.environment !== undefined && { environment: spec.environment }),
592
+ };
593
+ outputDataset.deps.add(taskDef);
594
+ return taskDef;
595
+ }
179
596
  //# sourceMappingURL=task.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/task.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/task.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAuB,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACzM,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAEjI,OAAO,EAAE,cAAc,EAAE,eAAe,EAAe,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAwB,MAAM,kBAAkB,CAAC;AAUjF;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAgB;IACpC,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACjC,IAAI,EAAE,IAAI,GAAG,EAAE;CAChB,CAAC;AAEF;;;;;GAKG;AACH,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,IAAI;QACJ,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACzD,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;KAC3B,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,uBAAuB,CAAC,IAAY,EAAE,QAAqB,EAAE,MAAgD;IACpH,OAAO;QACL,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAC1F,IAAI,EAAE,MAAM;QACZ,6EAA6E;QAC7E,gDAAgD;QAChD,OAAO,EAAE,MAAa;QACtB,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;KAC5C,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,mBAAmB,CAC1B,IAAU,EACV,QAAqB,EACrB,UAAkB;IAElB,OAAO;QACL,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACrF,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;KAC5C,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,WAAW,CAClB,QAAqB,EACrB,aAAyB,EACzB,MAAoB;IAEpB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAsC,CAAC;IAE3D,oBAAoB;IACpB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAEpB,6BAA6B;IAC7B,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAEnB,4CAA4C;IAC5C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAC7B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC;IAED,mFAAmF;IACnF,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAExB,OAAO,IAAI,CAAC;AACd,CAAC;AAiDD,MAAM,UAAU,IAAI,CAClB,IAAY,EACZ,MAAoB,EACpB,EAAwD,EACxD,MAAiG;IAEjG,IAAI,MAAM,EAAE,WAAW;QAAE,uBAAuB,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAC3E,qEAAqE;IACrE,gEAAgE;IAChE,MAAM,MAAM,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;IACzB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAe,CAAC,CAAC,MAAkB,CAAC;IAEjE,8CAA8C;IAC9C,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAEtC,gEAAgE;IAChE,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAE1E,+CAA+C;IAC/C,MAAM,cAAc,GAAG;QACrB,iBAAiB;QACjB,GAAG,MAAM;KACV,CAAC;IAEF,4BAA4B;IAC5B,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IAE/D,2EAA2E;IAC3E,oEAAoE;IACpE,0EAA0E;IAC1E,oEAAoE;IACpE,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,EAAE,MAAM,IAAI,cAAc,CAAC,CAAC;IAErE,qEAAqE;IACrE,2EAA2E;IAC3E,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAC7B,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,EACnC,SAAS,CAAC,UAAU,CAAC,EACrB,CAAC,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE;QAC9B,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;QAEzD,0BAA0B;QAC1B,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;YAC5C,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1B,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACxC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,cAAc;QACd,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;QACzB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAA;QAEhC,iCAAiC;QACjC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAExC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACpB,CAAC,CACF,CAAC;IAEF,MAAM,OAAO,GAAY;QACvB,IAAI,EAAE,MAAM;QACZ,IAAI;QACJ,uEAAuE;QACvE,OAAO,EAAE,SAAS,CAAC,IAAI,EAA0C;QACjE,MAAM,EAAE,cAAc;QACtB,MAAM;QACN,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC;QACnD,QAAQ,EAAE,MAAM,EAAE,IAAI;QACtB,QAAQ,EAAE,MAAM,EAAE,QAAQ;QAC1B,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,cAAc;QACxC,WAAW,EAAE,MAAM,EAAE,WAAW;KACjC,CAAC;IAEF,iFAAiF;IACjF,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAEzB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,IAAU,EACV,MAAc,EACd,UAAkB,EAClB,OAAkJ,EAClJ,MAA0C;IAE1C,IAAI,MAAM,EAAE,WAAW;QAAE,uBAAuB,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAE3E,8CAA8C;IAC9C,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAEtC,4BAA4B;IAC5B,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IAE/D,sCAAsC;IACtC,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CACjC,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,EACnC,UAAU,EACV,OAAO,CACR,CAAC;IAEF,4CAA4C;IAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAC7B,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,EACnC,SAAS,CAAC,UAAU,CAAC,EACrB,CAAC,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CACzF,CAAC;IAEF,MAAM,OAAO,GAAqG;QAChH,IAAI,EAAE,MAAM;QACZ,IAAI;QACJ,uEAAuE;QACvE,OAAO,EAAE,SAAS,CAAC,IAAI,EAA0C;QACjE,MAAM;QACN,MAAM;QACN,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;QAC3C,WAAW,EAAE,MAAM,EAAE,WAAW;KACjC,CAAC;IAEF,iFAAiF;IACjF,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAEzB,OAAO,OAAO,CAAC;AACjB,CAAC;AA0GD,kEAAkE;AAClE,MAAM,8BAA8B,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;AAEzD,2DAA2D;AAC3D,SAAS,iBAAiB,CAAC,IAAY,EAAE,OAAmB;IAC1D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAuD,CAAC;IAC7E,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC,CAAC,OAAO,IAAI,CAAC,GAAI,CAAC;QAC9B,KAAK,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,GAAI,CAAC;QAC7B,KAAK,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,KAAM,CAAC;QACjC;YACE,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,2BAA2B,OAAO,CAAC,IAAI,oDAAoD,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAClJ,CAAC;AACH,CAAC;AAkBD;oDACoD;AACpD,SAAS,qBAAqB,CAAC,EAAc;IAC3C,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC;IACjD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAErC,0DAA0D;IAC1D,MAAM,MAAM,GAAG,CAAC,IAAS,EAAO,EAAE;QAChC,SAAS,CAAC;YACR,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;gBACzC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,IAAI,CAAC;gBACzC,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC3C,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAClC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YAC1B,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;gBAClG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,CAAC,IAAS,EAAW,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC;IAC9F,MAAM,OAAO,GAAG,CAAC,IAAS,EAAiB,EAAE,CAC3C,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAe,CAAC,CAAC,CAAC,IAAI,CAAC;IACrG,wEAAwE;IACxE,MAAM,MAAM,GAAG,CAAC,IAAS,EAAmB,EAAE;QAC5C,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,IAAI,GAAG,GAAG,IAAI,CAAC;QACf,OAAO,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAe,CAAC,CAAC;YACxC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACvD,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,IAAW,CAAC,CAAC;IAC1C,IAAI,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACxD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,oEAAoE;QACpE,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAChG,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC1C,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACjC,IAAI,CAAC,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC3C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,MAAM,UAAU,aAAa,CAM3B,IAAU,EACV,IAAmD,EACnD,EAGsC;IAEtC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAmC,CAAC;IAC5D,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAA0B,CAAC;IAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAkB,CAAC;IAEvC,2EAA2E;IAC3E,yEAAyE;IACzE,sBAAsB;IACtB,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACnE,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAAC,CAAC,IAAiB,CAAC,IAAI,CAAC,CAAC;IAC/D,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACxB,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CACb,kBAAkB,IAAI,2EAA2E;gBACjG,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,wFAAwF,CACjH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,uEAAuE;IACvE,qEAAqE;IACrE,IAAI,WAAqB,CAAC;IAC1B,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC;IAC7B,CAAC;SAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;QACtD,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAqD,CAAC;QAC9E,MAAM,MAAM,GAA6B,EAAE,CAAC;QAC5C,KAAK,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9D,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;gBACtC,MAAM,KAAK,GAAI,CAAqD,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACnF,OAAO,KAAK,KAAK,SAAS,IAAI,gBAAgB,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;YACrG,CAAC,CAAC,CAAC;YACH,IAAI,UAAU;gBAAE,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;QAC5C,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,uGAAuG,CAAC,CAAC;QACjJ,CAAC;QACD,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;YACxE,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,+FAA+F,CAAC,CAAC;QACzI,CAAC;QACD,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC;IAC7B,CAAC;IAED,qEAAqE;IACrE,0EAA0E;IAC1E,yEAAyE;IACzE,IAAI,IAA4B,CAAC;IACjC,IAAI,OAAO,GAA2B,IAAI,CAAC;IAC3C,IAAI,IAAI,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,EAAS,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,qBAAqB,CAAC,MAAM,CAAC,EAAgB,CAAC,CAAC;QAC7D,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACb,kBAAkB,IAAI,iEAAiE;gBACvF,uFAAuF;gBACvF,qFAAqF;gBACrF,mEAAmE,CACpE,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3C,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC;gBAC7B,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC9B,MAAM,IAAI,KAAK,CACb,kBAAkB,IAAI,wDAAwD,UAAU,CAAC,CAAC,CAAE,CAAC,IAAI,2BAA2B,OAAO,CAAC,IAAI,iCAAiC,CAC1K,CAAC;gBACJ,CAAC;gBACD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAE,OAA2D,CAAC,MAAM,CAAC,CAAC;oBAC/F,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;oBACnG,IAAI,UAAU,EAAE,CAAC;wBACf,MAAM,IAAI,KAAK,CACb,kBAAkB,IAAI,uBAAuB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,sCAAsC;4BACzG,wBAAwB,UAAU,CAAC,CAAC,CAAE,CAAC,IAAI,sBAAsB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACrF,CAAC;oBACJ,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,2DAA2D;oBAC3D,kEAAkE;oBAClE,yDAAyD;oBACzD,IAAI,KAAK,GAAa,OAAO,CAAC;oBAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC;wBAC7B,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;4BAC5B,MAAM,IAAI,KAAK,CACb,kBAAkB,IAAI,uBAAuB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB,KAAK,CAAC,IAAI,QAAQ,IAAI,MAAM;gCACnH,kFAAkF,UAAU,CAAC,CAAC,CAAE,CAAC,IAAI,GAAG,CACzG,CAAC;wBACJ,CAAC;wBACD,MAAM,WAAW,GAA8B,KAAyD,CAAC,MAAM,CAAC;wBAChH,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;wBACvC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;4BACtB,MAAM,IAAI,KAAK,CACb,kBAAkB,IAAI,uBAAuB,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,kBAAkB;gCACpH,2CAA2C,UAAU,CAAC,CAAC,CAAE,CAAC,IAAI,gBAAgB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAClG,CAAC;wBACJ,CAAC;wBACD,KAAK,GAAG,WAAW,CAAC,IAAI,CAAE,CAAC;oBAC7B,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,GAAG,KAAK,CAAC;QAChB,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAED,oEAAoE;IACpE,uEAAuE;IACvE,iCAAiC;IACjC,yEAAyE;IACzE,sEAAsE;IACtE,uEAAuE;IACvE,0BAA0B;IAC1B,mEAAmE;IACnE,sEAAsE;IACtE,8DAA8D;IAC9D,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC;QAC/C,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC5F,MAAM,iBAAiB,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACvE,IAAI,CAAC,aAAa,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzC,uEAAuE;YACvE,MAAM,YAAY,GAAG,CAAC,CAAW,EAA4B,EAAE,CAC5D,CAAqD,CAAC,MAAM,CAAC;YAChE,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,KAAK,SAAS;gBACrC,CAAC,CAAC,EAAE,KAAK,EAAE,0DAA0D,EAAE,MAAM,EAAE,YAAY,CAAC,WAAW,CAAC,EAAE;gBAC1G,CAAC,CAAC,EAAE,KAAK,EAAE,yEAAyE,UAAU,CAAC,CAAC,CAAE,CAAC,IAAI,aAAa,EAAE,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;YAC7J,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3C,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC;gBAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAClC,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAChE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC;gBAC3G,IAAI,UAAU,EAAE,CAAC;oBACf,MAAM,IAAI,KAAK,CACb,kBAAkB,IAAI,MAAM,SAAS,CAAC,KAAK,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,sCAAsC;wBACpG,wBAAwB,UAAU,CAAC,CAAC,CAAE,CAAC,IAAI,sBAAsB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;wBACvF,0EAA0E,CAC3E,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,qEAAqE;IACrE,8DAA8D;IAC9D,0EAA0E;IAC1E,kDAAkD;IAClD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC7G,MAAM,IAAI,KAAK,CACb,kBAAkB,IAAI,sFAAsF;YAC5G,yFAAyF,MAAM,CAAC,IAAI,IAAI;YACxG,sDAAsD,CACvD,CAAC;IACJ,CAAC;IAED,6DAA6D;IAC7D,IAAI,SAAiC,CAAC;IACtC,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,OAAc,CAAC,CAAC;QAC/E,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,IAAI,8BAA8B,CAAC;IACzF,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC,IAAI,oBAAoB,IAAI,CAAC,EAAE,CAAC;QACzE,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,2DAA2D,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAChI,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAC1B,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAe,EAC9E,MAAM,EACN,EAAS,CACV,CAAC;IAEF,MAAM,QAAQ,GAAG,2BAA2B,CAAC;QAC3C,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;QACrC,EAAE,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;QAC1C,OAAO,EAAE,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI;QACzD,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,CAAC;KACnD,CAAC,CAAC;IAEH,OAAO,IAAI,CACT,IAAI,EACJ,CAAC,GAAG,UAAU,EAAE,GAAG,MAAM,CAAiB,EAC1C,MAAa,EACb;QACE,IAAI,EAAE,mBAAmB;QACzB,QAAQ;QACR,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QACzD,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;KACzE,CACuC,CAAC;AAC7C,CAAC;AA0DD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,MAAM,UAAU,UAAU,CAMxB,IAAU,EACV,IAA4C,EAC5C,EAAwF;IAExF,IAAI,IAAI,CAAC,WAAW;QAAE,uBAAuB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IACtE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAyD,CAAC;IAC9E,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAA0B,CAAC;IAE5D,IAAI,QAAkC,CAAC;IACvC,IAAI,QAAkB,CAAC;IACvB,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,MAAM;YACT,QAAQ,GAAG,MAAM,CAAC;YAClB,QAAQ,GAAG,YAAY,CAAC,CAAC,MAAM,CAAC,GAAI,EAAE,MAAM,CAAC,KAAM,CAAC,EAAE,QAAQ,CAAC,CAAC;YAChE,MAAM;QACR,KAAK,KAAK;YACR,QAAQ,GAAG,KAAK,CAAC;YACjB,QAAQ,GAAG,YAAY,CAAC,CAAC,MAAM,CAAC,GAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;YACjD,MAAM;QACR,KAAK,OAAO;YACV,QAAQ,GAAG,OAAO,CAAC;YACnB,QAAQ,GAAG,YAAY,CAAC,CAAC,MAAM,CAAC,KAAM,CAAC,EAAE,QAAQ,CAAC,CAAC;YACnD,MAAM;QACR;YACE,MAAM,IAAI,KAAK,CAAC,eAAe,IAAI,iEAAiE,MAAM,CAAC,IAAI,kCAAkC,CAAC,CAAC;IACvJ,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,cAAc,CAAC;IAC7C,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,eAAe,IAAI,2GAA2G,CAAC,CAAC;IAClJ,CAAC;IAED,MAAM,UAAU,GAAe;QAC7B,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,MAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5B,QAAQ;KACT,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAS,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAE7B,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1E,MAAM,cAAc,GAAG;QACrB,iBAAiB;QACjB,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAoB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,GAAG,MAAM;KACV,CAAC;IACF,MAAM,aAAa,GAAG,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAElE,sEAAsE;IACtE,0EAA0E;IAC1E,wEAAwE;IACxE,4CAA4C;IAC5C,MAAM,UAAU,GAAG;QACjB,GAAG,eAAe,CAAC,MAAM,CAAC;QAC1B,QAAQ,EAAE,QAAQ;QAClB,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACxD,CAAC;IACF,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAC7B,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,EACnC,SAAS,CAAC,UAAU,CAAC,EACrB,CAAC,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE;QAC9B,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;QACzD,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;YAC5C,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1B,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACxC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1B,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACzC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACpB,CAAC,CACF,CAAC;IAEF,MAAM,QAAQ,GAAG,wBAAwB,CAAC;QACxC,MAAM,EAAE,IAAI,CAAC,MAAM,KAAK,SAAS;QACjC,IAAI,EAAE,QAAQ;KACf,CAAC,CAAC;IAEH,MAAM,OAAO,GAAY;QACvB,IAAI,EAAE,MAAM;QACZ,IAAI;QACJ,OAAO,EAAE,SAAS,CAAC,IAAI,EAA0C;QACjE,MAAM,EAAE,cAAc;QACtB,MAAM,EAAE,aAAa;QACrB,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE,aAAa,EAAE,cAAc,CAAC;QAC1D,QAAQ,EAAE,gBAAgB;QAC1B,QAAQ;QACR,MAAM;QACN,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;KACzE,CAAC;IACF,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAEhC,OAAO,OAAgD,CAAC;AAC1D,CAAC"}