taskflow-core 0.3.0-beta.1.1 → 1.0.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 (50) hide show
  1. package/README.md +34 -25
  2. package/dist/build-info.json +2 -2
  3. package/dist/control-execution.d.ts +6 -0
  4. package/dist/control-execution.d.ts.map +1 -0
  5. package/dist/control-execution.js +5 -0
  6. package/dist/control-execution.js.map +1 -0
  7. package/dist/exec/step-kinds.d.ts.map +1 -1
  8. package/dist/exec/step-kinds.js +1 -0
  9. package/dist/exec/step-kinds.js.map +1 -1
  10. package/dist/exec/step.d.ts.map +1 -1
  11. package/dist/exec/step.js +1 -0
  12. package/dist/exec/step.js.map +1 -1
  13. package/dist/host/runner-types.d.ts +3 -0
  14. package/dist/host/runner-types.d.ts.map +1 -1
  15. package/dist/legacy-writer-lifecycle.d.ts +22 -0
  16. package/dist/legacy-writer-lifecycle.d.ts.map +1 -0
  17. package/dist/legacy-writer-lifecycle.js +205 -0
  18. package/dist/legacy-writer-lifecycle.js.map +1 -0
  19. package/dist/persistent-mutex.d.ts +9 -0
  20. package/dist/persistent-mutex.d.ts.map +1 -0
  21. package/dist/persistent-mutex.js +27 -0
  22. package/dist/persistent-mutex.js.map +1 -0
  23. package/dist/resources/mutex-bootstrap.d.ts +12 -0
  24. package/dist/resources/mutex-bootstrap.d.ts.map +1 -0
  25. package/dist/resources/mutex-bootstrap.js +176 -0
  26. package/dist/resources/mutex-bootstrap.js.map +1 -0
  27. package/dist/resources/persistence.d.ts.map +1 -1
  28. package/dist/resources/persistence.js +145 -77
  29. package/dist/resources/persistence.js.map +1 -1
  30. package/dist/resume.d.ts +21 -1
  31. package/dist/resume.d.ts.map +1 -1
  32. package/dist/resume.js +75 -1
  33. package/dist/resume.js.map +1 -1
  34. package/dist/runner-core.d.ts +5 -0
  35. package/dist/runner-core.d.ts.map +1 -1
  36. package/dist/runner-core.js +40 -3
  37. package/dist/runner-core.js.map +1 -1
  38. package/dist/runtime.d.ts +6 -0
  39. package/dist/runtime.d.ts.map +1 -1
  40. package/dist/runtime.js +28 -0
  41. package/dist/runtime.js.map +1 -1
  42. package/dist/schema.d.ts +14 -4
  43. package/dist/schema.d.ts.map +1 -1
  44. package/dist/schema.js +61 -13
  45. package/dist/schema.js.map +1 -1
  46. package/dist/store.d.ts +24 -0
  47. package/dist/store.d.ts.map +1 -1
  48. package/dist/store.js +114 -6
  49. package/dist/store.js.map +1 -1
  50. package/package.json +1 -1
@@ -2,6 +2,7 @@ import * as crypto from "node:crypto";
2
2
  import * as fs from "node:fs";
3
3
  import * as path from "node:path";
4
4
  import { execFileSync } from "node:child_process";
5
+ import { bindMutexQueue } from "./mutex-bootstrap.js";
5
6
  /** Exact, platform-native process-birth identity when the platform exposes one.
6
7
  * Never return an uptime estimate or a lower-precision timestamp: incomparable
7
8
  * identities could falsely reclaim a live owner's lock. */
@@ -76,7 +77,7 @@ export function defaultProcessInspector(pid) {
76
77
  }
77
78
  catch (error) {
78
79
  const code = error.code;
79
- if (code !== "EPERM")
80
+ if (code === "ESRCH")
80
81
  return { alive: false };
81
82
  const birthToken = readProcessBirthToken(pid);
82
83
  return birthToken === undefined
@@ -219,12 +220,21 @@ function ownerIsStale(record, identity, inspect) {
219
220
  return record.birthTokenKind === "native" && observed.birthTokenKind === "native" &&
220
221
  observed.birthToken !== undefined && observed.birthToken !== record.birthToken;
221
222
  }
223
+ function sameIdentity(a, b) {
224
+ return a.dev === b.dev && a.ino === b.ino;
225
+ }
226
+ function sameOwner(a, b) {
227
+ return a.kind === b.kind && a.token === b.token && a.pid === b.pid &&
228
+ a.birthToken === b.birthToken && a.birthTokenKind === b.birthTokenKind &&
229
+ a.createdAt === b.createdAt &&
230
+ (a.kind !== "ticket" || (b.kind === "ticket" && a.ticket === b.ticket));
231
+ }
222
232
  // A mutex instance can disappear after returning a completed critical-section
223
233
  // result. Keep deferred exact-ticket cleanup shared by duplicate module instances
224
234
  // in this JS realm, keyed by the immutable ticket path. The fsynced `done` state
225
235
  // on the ticket itself carries the same fact across worker isolates/processes.
226
236
  const persistenceGlobal = globalThis;
227
- const PROCESS_PENDING_TICKET_RELEASES = persistenceGlobal.__taskflowPendingMutexTicketReleasesV1 ??= new Map();
237
+ const PROCESS_PENDING_TICKET_RELEASES = persistenceGlobal.__taskflowPendingMutexTicketReleasesV2 ??= new Map();
228
238
  function delay(ms, signal) {
229
239
  if (signal?.aborted)
230
240
  return Promise.reject(new CoordinatorAbortError());
@@ -260,34 +270,60 @@ export class PersistentFileMutex {
260
270
  #queueDirectory() {
261
271
  return `${this.lockPath}.queue`;
262
272
  }
263
- #removeTicketBestEffort(ticketPath, queueDirectory) {
273
+ #assertQueue(queueDirectory, expected) {
274
+ const current = fs.lstatSync(queueDirectory);
275
+ if (!current.isDirectory() || !sameIdentity(current, expected)) {
276
+ throw new Error("TFWS_MUTEX_IDENTITY: mutex queue was replaced");
277
+ }
278
+ }
279
+ #bindQueue(queueDirectory) {
280
+ return bindMutexQueue(queueDirectory, this.identity, (owner) => ownerIsStale(owner, this.identity, this.inspectProcess), fsyncDirectory);
281
+ }
282
+ #removeTicketBestEffort(ticketPath, pending, terminalOnly = true) {
264
283
  for (let attempt = 0; attempt < 3; attempt++) {
265
284
  try {
285
+ this.#assertQueue(pending.queueDirectory, pending.queueIdentity);
286
+ const stat = fs.lstatSync(ticketPath);
287
+ if (!stat.isFile() || !sameIdentity(stat, pending.fileIdentity))
288
+ return false;
289
+ const current = JSON.parse(fs.readFileSync(ticketPath, "utf8"));
290
+ if (!sameOwner(current, pending.record) || current.state !== (terminalOnly ? "done" : pending.record.state))
291
+ return false;
292
+ if (!sameIdentity(fs.lstatSync(ticketPath), stat))
293
+ return false;
266
294
  fs.unlinkSync(ticketPath);
267
- fsyncDirectory(queueDirectory);
295
+ fsyncDirectory(pending.queueDirectory);
268
296
  return true;
269
297
  }
270
298
  catch (error) {
271
- if (error.code === "ENOENT")
299
+ // A missing ticket is already released, but a missing queue is not.
300
+ if (error.code === "ENOENT") {
301
+ try {
302
+ this.#assertQueue(pending.queueDirectory, pending.queueIdentity);
303
+ }
304
+ catch {
305
+ return false;
306
+ }
272
307
  return true;
308
+ }
273
309
  }
274
310
  }
275
311
  return false;
276
312
  }
277
- #markQueueRecordDone(recordPath, expected) {
278
- const noFollow = typeof fs.constants.O_NOFOLLOW === "number" ? fs.constants.O_NOFOLLOW : 0;
313
+ #markQueueRecordDone(recordPath, pending) {
279
314
  for (let attempt = 0; attempt < 3; attempt++) {
280
315
  let fd;
281
316
  try {
282
- fd = fs.openSync(recordPath, fs.constants.O_RDWR | noFollow);
317
+ this.#assertQueue(pending.queueDirectory, pending.queueIdentity);
318
+ fd = fs.openSync(recordPath, fs.constants.O_RDWR | fs.constants.O_NOFOLLOW);
319
+ const stat = fs.fstatSync(fd);
320
+ if (!stat.isFile() || !sameIdentity(stat, pending.fileIdentity) ||
321
+ !sameIdentity(stat, fs.lstatSync(recordPath)))
322
+ return false;
283
323
  const raw = fs.readFileSync(fd, "utf8");
284
324
  const current = JSON.parse(raw);
285
- if (current.kind !== expected.kind || current.token !== expected.token ||
286
- (current.kind === "ticket" && expected.kind === "ticket" && current.ticket !== expected.ticket) ||
287
- current.pid !== expected.pid ||
288
- current.birthToken !== expected.birthToken || current.birthTokenKind !== expected.birthTokenKind) {
325
+ if (!sameOwner(current, pending.record))
289
326
  return false;
290
- }
291
327
  if (current.state === "done")
292
328
  return true;
293
329
  if (current.state !== "held")
@@ -296,15 +332,21 @@ export class PersistentFileMutex {
296
332
  if (terminal.byteLength !== Buffer.byteLength(raw))
297
333
  return false;
298
334
  let offset = 0;
299
- while (offset < terminal.byteLength) {
335
+ while (offset < terminal.byteLength)
300
336
  offset += fs.writeSync(fd, terminal, offset, terminal.byteLength - offset, offset);
301
- }
302
337
  fs.fsyncSync(fd);
303
338
  return true;
304
339
  }
305
340
  catch (error) {
306
- if (error.code === "ENOENT")
341
+ if (error.code === "ENOENT") {
342
+ try {
343
+ this.#assertQueue(pending.queueDirectory, pending.queueIdentity);
344
+ }
345
+ catch {
346
+ return false;
347
+ }
307
348
  return true;
349
+ }
308
350
  }
309
351
  finally {
310
352
  if (fd !== undefined)
@@ -315,20 +357,30 @@ export class PersistentFileMutex {
315
357
  }
316
358
  #drainPendingTicketReleases() {
317
359
  const ownQueueDirectory = this.#queueDirectory();
318
- for (const [ticketPath, queueDirectory] of PROCESS_PENDING_TICKET_RELEASES) {
319
- if (queueDirectory !== ownQueueDirectory)
360
+ for (const [ticketPath, pending] of PROCESS_PENDING_TICKET_RELEASES) {
361
+ if (pending.queueDirectory !== ownQueueDirectory)
320
362
  continue;
321
- if (this.#removeTicketBestEffort(ticketPath, queueDirectory)) {
363
+ if (this.#markQueueRecordDone(ticketPath, pending) && this.#removeTicketBestEffort(ticketPath, pending)) {
322
364
  PROCESS_PENDING_TICKET_RELEASES.delete(ticketPath);
323
365
  }
324
366
  }
325
- if ([...PROCESS_PENDING_TICKET_RELEASES.values()].some((queueDirectory) => queueDirectory === ownQueueDirectory)) {
367
+ if ([...PROCESS_PENDING_TICKET_RELEASES.values()].some((pending) => pending.queueDirectory === ownQueueDirectory)) {
326
368
  throw new Error("TFWS_CONTROL_PLANE_CLEANUP: a prior mutex ticket could not be released");
327
369
  }
328
370
  }
329
- #readQueueRecord(filePath) {
371
+ #readQueueRecord(filePath, queueIdentity, allowCorruptCleanup = true) {
372
+ let fd;
373
+ let stat;
374
+ let raw;
375
+ const queueDirectory = path.dirname(filePath);
330
376
  try {
331
- const record = readJsonFile(filePath, undefined);
377
+ this.#assertQueue(queueDirectory, queueIdentity);
378
+ fd = fs.openSync(filePath, fs.constants.O_RDONLY | fs.constants.O_NOFOLLOW);
379
+ stat = fs.fstatSync(fd);
380
+ if (!stat.isFile())
381
+ throw new Error("invalid mutex queue file");
382
+ raw = fs.readFileSync(fd, "utf8");
383
+ const record = JSON.parse(raw);
332
384
  if (!record || (record.kind !== "choosing" && record.kind !== "ticket") ||
333
385
  typeof record.token !== "string" || !Number.isSafeInteger(record.pid) ||
334
386
  typeof record.birthToken !== "string" || record.birthToken.length === 0 ||
@@ -336,33 +388,35 @@ export class PersistentFileMutex {
336
388
  (record.state !== "held" && record.state !== "done")) {
337
389
  throw new Error("invalid mutex queue record");
338
390
  }
339
- if (record.kind === "ticket" &&
340
- (!Number.isSafeInteger(record.ticket) || record.ticket < 1)) {
391
+ if (record.kind === "ticket" && (!Number.isSafeInteger(record.ticket) || record.ticket < 1)) {
341
392
  throw new Error("invalid mutex ticket");
342
393
  }
343
- return record;
394
+ if (!sameIdentity(stat, fs.lstatSync(filePath)))
395
+ throw new Error("mutex queue record was replaced");
396
+ return { record, fileIdentity: stat };
344
397
  }
345
398
  catch (error) {
346
399
  if (error.code === "ENOENT")
347
400
  return undefined;
348
- try {
349
- const stat = fs.statSync(filePath);
350
- if (this.now() - stat.mtimeMs >= this.corruptLockStaleMs) {
351
- // Queue filenames contain a never-reused UUID. Removing this exact
352
- // corrupt path cannot delete a newer owner's ticket (unlike renaming
353
- // one shared lockPath after a stale read).
401
+ // A corrupt record is reclaimable only if its exact inode and bytes
402
+ // still match our observation. Never follow or remove symlink records.
403
+ if (allowCorruptCleanup && stat?.isFile() && raw !== undefined && this.now() - stat.mtimeMs >= this.corruptLockStaleMs) {
404
+ this.#assertQueue(queueDirectory, queueIdentity);
405
+ const current = fs.lstatSync(filePath);
406
+ if (current.isFile() && sameIdentity(current, stat) && fs.readFileSync(filePath, "utf8") === raw &&
407
+ sameIdentity(fs.lstatSync(filePath), stat)) {
354
408
  fs.unlinkSync(filePath);
355
409
  return undefined;
356
410
  }
357
411
  }
358
- catch (statError) {
359
- if (statError.code === "ENOENT")
360
- return undefined;
361
- }
362
412
  throw error;
363
413
  }
414
+ finally {
415
+ if (fd !== undefined)
416
+ fs.closeSync(fd);
417
+ }
364
418
  }
365
- #queueSnapshot(queueDirectory) {
419
+ #queueSnapshot(queueDirectory, queueIdentity, own) {
366
420
  const choosing = [];
367
421
  const tickets = [];
368
422
  let names;
@@ -370,8 +424,7 @@ export class PersistentFileMutex {
370
424
  names = fs.readdirSync(queueDirectory);
371
425
  }
372
426
  catch (error) {
373
- if (error.code === "ENOENT")
374
- return { choosing, tickets };
427
+ // Missing queue evidence cannot be interpreted as an empty mutex.
375
428
  throw error;
376
429
  }
377
430
  for (const name of names) {
@@ -380,34 +433,22 @@ export class PersistentFileMutex {
380
433
  if (!choosingName && !ticketName)
381
434
  continue;
382
435
  const filePath = path.join(queueDirectory, name);
383
- const record = this.#readQueueRecord(filePath);
384
- if (!record)
436
+ const isOwn = own !== undefined && (choosingName?.[1] ?? ticketName?.[1]) === own.record.token;
437
+ const observed = this.#readQueueRecord(filePath, queueIdentity, !isOwn);
438
+ if (!observed)
385
439
  continue;
440
+ const { record, fileIdentity } = observed;
441
+ const pending = { queueDirectory, queueIdentity, record, fileIdentity };
442
+ if (isOwn && (!sameOwner(record, own.record) || record.state !== "held" ||
443
+ !sameIdentity(fileIdentity, own.fileIdentity))) {
444
+ throw new Error("TFWS_MUTEX_IDENTITY: own waiting record was replaced");
445
+ }
386
446
  if (record.token !== (choosingName?.[1] ?? ticketName?.[1])) {
387
447
  throw new Error("mutex queue token does not match its immutable filename");
388
448
  }
389
- if (record.state === "done") {
390
- // The owner durably ended its critical section before cleanup failed.
391
- // Any process/worker may remove this exact immutable terminal ticket;
392
- // no birth-token inference is involved.
393
- try {
394
- fs.unlinkSync(filePath);
395
- }
396
- catch (error) {
397
- if (error.code !== "ENOENT")
398
- throw error;
399
- }
400
- continue;
401
- }
402
- if (ownerIsStale(record, this.identity, this.inspectProcess)) {
403
- // Every contender owns a unique immutable file, so stale recovery is
404
- // exact-path deletion with no shared-name ABA window.
405
- try {
406
- fs.unlinkSync(filePath);
407
- }
408
- catch (error) {
409
- if (error.code !== "ENOENT")
410
- throw error;
449
+ if (record.state === "done" || ownerIsStale(record, this.identity, this.inspectProcess)) {
450
+ if (!this.#removeTicketBestEffort(filePath, pending, false)) {
451
+ throw new Error("TFWS_MUTEX_IDENTITY: observed queue record changed during cleanup");
411
452
  }
412
453
  continue;
413
454
  }
@@ -426,7 +467,21 @@ export class PersistentFileMutex {
426
467
  const timeoutMs = options.timeoutMs ?? 10_000;
427
468
  const deadline = this.now() + timeoutMs;
428
469
  const queueDirectory = this.#queueDirectory();
429
- ensureDirectory(queueDirectory);
470
+ let queueIdentity;
471
+ while (true) {
472
+ try {
473
+ queueIdentity = this.#bindQueue(queueDirectory);
474
+ break;
475
+ }
476
+ catch (error) {
477
+ // A concurrent first creator may still be publishing its anchor.
478
+ // Existing queues never authorize us to synthesize that anchor.
479
+ if (error.code !== "ENOENT" || this.now() >= deadline) {
480
+ throw new Error("TFWS_MUTEX_IDENTITY: queue anchor is missing or invalid", { cause: error });
481
+ }
482
+ await delay(Math.min(this.pollMs, Math.max(1, deadline - this.now())), options.signal);
483
+ }
484
+ }
430
485
  const token = crypto.randomUUID();
431
486
  const choosingPath = path.join(queueDirectory, `choosing-${token}.json`);
432
487
  const ticketPath = path.join(queueDirectory, `ticket-${token}.json`);
@@ -437,13 +492,15 @@ export class PersistentFileMutex {
437
492
  createdAt: this.now(),
438
493
  state: "held",
439
494
  };
440
- let publishedTicket = false;
441
- let own;
495
+ let choosingPending;
496
+ let ticketPending;
442
497
  try {
498
+ this.#assertQueue(queueDirectory, queueIdentity);
443
499
  writeJsonAtomicDurable(choosingPath, choosing);
500
+ choosingPending = { queueDirectory, queueIdentity, record: choosing, fileIdentity: fs.lstatSync(choosingPath) };
444
501
  if (options.signal?.aborted)
445
502
  throw new CoordinatorAbortError();
446
- const initial = this.#queueSnapshot(queueDirectory);
503
+ const initial = this.#queueSnapshot(queueDirectory, queueIdentity, choosingPending);
447
504
  const maxTicket = initial.tickets.reduce((max, item) => Math.max(max, item.record.ticket), 0);
448
505
  if (maxTicket >= Number.MAX_SAFE_INTEGER)
449
506
  throw new Error("mutex ticket space exhausted");
@@ -455,31 +512,42 @@ export class PersistentFileMutex {
455
512
  createdAt: this.now(),
456
513
  state: "held",
457
514
  };
458
- own = ticketRecord;
515
+ this.#assertQueue(queueDirectory, queueIdentity);
459
516
  writeJsonAtomicDurable(ticketPath, ticketRecord);
460
- publishedTicket = true;
461
- fs.unlinkSync(choosingPath);
517
+ ticketPending = { queueDirectory, queueIdentity, record: ticketRecord, fileIdentity: fs.lstatSync(ticketPath) };
518
+ if (!this.#markQueueRecordDone(choosingPath, choosingPending) ||
519
+ !this.#removeTicketBestEffort(choosingPath, choosingPending)) {
520
+ throw new Error("TFWS_MUTEX_IDENTITY: choosing record could not be retired");
521
+ }
462
522
  fsyncDirectory(queueDirectory);
463
523
  while (true) {
464
524
  if (options.signal?.aborted)
465
525
  throw new CoordinatorAbortError();
466
- const snapshot = this.#queueSnapshot(queueDirectory);
526
+ this.#assertQueue(queueDirectory, queueIdentity);
527
+ const snapshot = this.#queueSnapshot(queueDirectory, queueIdentity, ticketPending);
528
+ const ownTicket = snapshot.tickets.find((item) => item.path === ticketPath)?.record;
529
+ if (!ownTicket || !sameOwner(ownTicket, ticketRecord) ||
530
+ !sameIdentity(fs.lstatSync(ticketPath), ticketPending.fileIdentity)) {
531
+ throw new Error("TFWS_MUTEX_IDENTITY: own waiting ticket was lost or replaced");
532
+ }
467
533
  const otherChoosing = snapshot.choosing.some((item) => item.record.token !== token);
468
534
  const earlier = snapshot.tickets.some((item) => item.record.token !== token &&
469
535
  (item.record.ticket < ticketRecord.ticket ||
470
536
  (item.record.ticket === ticketRecord.ticket && item.record.token < token)));
471
537
  if (!otherChoosing && !earlier) {
538
+ this.#assertQueue(queueDirectory, queueIdentity);
539
+ const pending = ticketPending;
472
540
  let released = false;
473
541
  return () => {
474
542
  if (released)
475
543
  return;
476
- const terminal = this.#markQueueRecordDone(ticketPath, ticketRecord);
477
- if (this.#removeTicketBestEffort(ticketPath, queueDirectory)) {
544
+ const terminal = this.#markQueueRecordDone(ticketPath, pending);
545
+ if (terminal && this.#removeTicketBestEffort(ticketPath, pending)) {
478
546
  released = true;
479
547
  PROCESS_PENDING_TICKET_RELEASES.delete(ticketPath);
480
548
  return;
481
549
  }
482
- PROCESS_PENDING_TICKET_RELEASES.set(ticketPath, queueDirectory);
550
+ PROCESS_PENDING_TICKET_RELEASES.set(ticketPath, pending);
483
551
  console.warn(`[taskflow] mutex ticket cleanup deferred for ${path.basename(ticketPath)}` +
484
552
  (terminal ? " (critical section durably released)" : " (release marker unavailable; fail-closed)"));
485
553
  };
@@ -492,15 +560,15 @@ export class PersistentFileMutex {
492
560
  }
493
561
  catch (error) {
494
562
  const candidates = [
495
- [choosingPath, choosing],
496
- ...(publishedTicket && own ? [[ticketPath, own]] : []),
563
+ ...(choosingPending ? [[choosingPath, choosingPending]] : []),
564
+ ...(ticketPending ? [[ticketPath, ticketPending]] : []),
497
565
  ];
498
566
  for (const [candidate, record] of candidates) {
499
567
  // A cancelled/timed-out contender is no longer live. Persist that fact in
500
568
  // the immutable queue record before unlink so permission failures cannot
501
569
  // leave a same-process ticket that blocks the queue forever.
502
- this.#markQueueRecordDone(candidate, record);
503
- this.#removeTicketBestEffort(candidate, queueDirectory);
570
+ if (this.#markQueueRecordDone(candidate, record))
571
+ this.#removeTicketBestEffort(candidate, record);
504
572
  }
505
573
  fsyncDirectory(queueDirectory);
506
574
  throw error;
@@ -1 +1 @@
1
- {"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../src/resources/persistence.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../src/resources/persistence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;2DAE2D;AAC3D,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAChD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5D,IAAI,CAAC;QACJ,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,iCAAiC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YACjF,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YACjE,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACzC,IAAI,CAAC,MAAM,IAAI,UAAU,GAAG,CAAC;gBAAE,OAAO,SAAS,CAAC;YAChD,4EAA4E;YAC5E,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YACtE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;gBAAE,OAAO,SAAS,CAAC;YACtD,OAAO,SAAS,MAAM,IAAI,UAAU,EAAE,CAAC;QACxC,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,YAAY,CAAC,gBAAgB,EAAE;gBAC7C,SAAS;gBACT,YAAY;gBACZ,iBAAiB;gBACjB,UAAU;gBACV,oBAAoB,GAAG,iEAAiE;aACxF,EAAE;gBACF,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;aACnC,CAAC,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,oBAAoB,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACxE,CAAC;QACD,4EAA4E;QAC5E,wEAAwE;QACxE,OAAO,SAAS,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAC;IAClB,CAAC;AACF,CAAC;AAID,MAAM,0BAA0B,GAAG,qBAAqB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACtE,MAAM,mBAAmB,GAAG,0BAA0B,IAAI,UAAU,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;AAC1F,MAAM,wBAAwB,GAA0B,0BAA0B,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;AA8CvH,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IACxC,IAAI,GAAG,oBAAoB,CAAC;IACrC,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACvC,CAAC;CACD;AAED,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IACtC,IAAI,GAAG,WAAW,CAAC;IAC5B,YAAY,OAAO,GAAG,+BAA+B;QACpD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC1B,CAAC;CACD;AAED,MAAM,UAAU,sBAAsB;IACrC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,mBAAmB,EAAE,cAAc,EAAE,wBAAwB,EAAE,CAAC;AACxG,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,GAAW;IAClD,IAAI,GAAG,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC;QACzB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,mBAAmB,EAAE,cAAc,EAAE,wBAAwB,EAAE,CAAC;IACnG,CAAC;IACD,IAAI,CAAC;QACJ,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,MAAM,UAAU,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;QAC9C,OAAO,UAAU,KAAK,SAAS;YAC9B,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;YACjB,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC;IAC1D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,GAAI,KAA+B,CAAC,IAAI,CAAC;QACnD,IAAI,IAAI,KAAK,OAAO;YAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC9C,MAAM,UAAU,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;QAC9C,OAAO,UAAU,KAAK,SAAS;YAC9B,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;YACjB,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC;IAC1D,CAAC;AACF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC/C,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,SAAiB;IAChD,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC/C,IAAI,CAAC;QACJ,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC;YAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC;gBAAS,CAAC;YAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACR,4EAA4E;QAC5E,yEAAyE;IAC1E,CAAC;AACF,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAAgB,EAAE,KAAc;IACtE,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,GAAG,QAAQ,QAAQ,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;IACvF,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1C,IAAI,CAAC;QACJ,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5C,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;YAAS,CAAC;QACV,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC;QACJ,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC9B,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,CAAC;YAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;QACxD,MAAM,KAAK,CAAC;IACb,CAAC;AACF,CAAC;AAED,MAAM,UAAU,YAAY,CAAI,QAAgB,EAAE,QAAW;IAC5D,IAAI,CAAC;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAM,CAAC;IAC3D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,QAAQ,CAAC;QACxE,MAAM,KAAK,CAAC;IACb,CAAC;AACF,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAAgB,EAAE,OAA2B;IACnF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACjC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACxC,+EAA+E;IAC/E,iFAAiF;IACjF,gDAAgD;IAChD,IAAI,OAAO,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACpD,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAC1C,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC7C,IAAI,CAAC;gBACJ,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;gBAC5C,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACxB,CAAC;oBAAS,CAAC;gBACV,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACxB,CAAC;QACF,CAAC;IACF,CAAC;IACD,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7C,IAAI,CAAC;QACJ,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACxD,IAAI,MAAM,GAAG,CAAC,CAAC;YACf,OAAO,MAAM,GAAG,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;QAC7F,CAAC;QACD,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;YAAS,CAAC;QACV,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,OAAO;QAAE,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,aAAa,CAAI,QAAgB;IAChD,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACJ,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QAClE,MAAM,KAAK,CAAC;IACb,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,qBAAqB,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,OAAO,GAAQ,EAAE,CAAC;IACxB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,IAAI,CAAC;YACJ,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,qBAAqB,IAAI,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,MAAM;YAChE,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,GAAG,CAAC,OAAO,QAAQ,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxI,CAAC;IACF,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,MAAuB,EAAE,QAAyB,EAAE,OAAyB;IAClG,IAAI,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG,EAAE,CAAC;QACjC,0EAA0E;QAC1E,2EAA2E;QAC3E,+EAA+E;QAC/E,uEAAuE;QACvE,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ,IAAI,QAAQ,CAAC,cAAc,KAAK,QAAQ;YAChF,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,UAAU,CAAC;IAC5C,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACjC,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ,IAAI,QAAQ,CAAC,cAAc,KAAK,QAAQ;QAChF,QAAQ,CAAC,UAAU,KAAK,SAAS,IAAI,QAAQ,CAAC,UAAU,KAAK,MAAM,CAAC,UAAU,CAAC;AACjF,CAAC;AAYD,SAAS,YAAY,CAAC,CAAe,EAAE,CAAe;IACrD,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC;AAC3C,CAAC;AACD,SAAS,SAAS,CAAC,CAA0C,EAAE,CAA0C;IACxG,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG;QACjE,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,cAAc,KAAK,CAAC,CAAC,cAAc;QACtE,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,SAAS;QAC3B,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,8EAA8E;AAC9E,kFAAkF;AAClF,iFAAiF;AACjF,+EAA+E;AAC/E,MAAM,iBAAiB,GAAG,UAA2D,CAAC;AACtF,MAAM,+BAA+B,GACpC,iBAAiB,CAAC,sCAAsC,KAAK,IAAI,GAAG,EAA0B,CAAC;AAEhG,SAAS,KAAK,CAAC,EAAU,EAAE,MAAoB;IAC9C,IAAI,MAAM,EAAE,OAAO;QAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,qBAAqB,EAAE,CAAC,CAAC;IACxE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACnE,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC7B,MAAM,EAAE,CAAC;YACT,OAAO,EAAE,CAAC;QACX,CAAC,EAAE,EAAE,CAAC,CAAC;QACP,MAAM,OAAO,GAAG,GAAG,EAAE;YACpB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,EAAE,CAAC;YACT,MAAM,CAAC,IAAI,qBAAqB,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC;QACF,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACJ,CAAC;AAOD,MAAM,OAAO,mBAAmB;IACtB,QAAQ,CAAS;IACjB,QAAQ,CAAkB;IAC1B,cAAc,CAAmB;IACjC,MAAM,CAAS;IACf,kBAAkB,CAAS;IAC3B,GAAG,CAAe;IAE3B,YAAY,QAAgB,EAAE,OAAO,GAAoD,EAAE;QAC1F,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,eAAe,IAAI,sBAAsB,EAAE,CAAC;QACpE,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,uBAAuB,CAAC;QACxE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,IAAI,MAAM,CAAC;QAC/D,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;IACpC,CAAC;IAED,eAAe;QACd,OAAO,GAAG,IAAI,CAAC,QAAQ,QAAQ,CAAC;IACjC,CAAC;IAED,YAAY,CAAC,cAAsB,EAAE,QAAsB;QAC1D,MAAM,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QAClE,CAAC;IACF,CAAC;IAED,UAAU,CAAC,cAAsB;QAChC,OAAO,cAAc,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,EAClD,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC,CAAC;IACtF,CAAC;IAED,uBAAuB,CAAC,UAAkB,EAAE,OAAuB,EAAE,YAAY,GAAG,IAAI;QACvF,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;YAC9C,IAAI,CAAC;gBACJ,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;gBACjE,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;gBACtC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC;oBAAE,OAAO,KAAK,CAAC;gBAC9E,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAsB,CAAC;gBACrF,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,KAAK,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;oBAAE,OAAO,KAAK,CAAC;gBAC1H,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC;oBAAE,OAAO,KAAK,CAAC;gBAChE,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;gBAC1B,cAAc,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;gBACvC,OAAO,IAAI,CAAC;YACb,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,oEAAoE;gBACpE,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACxD,IAAI,CAAC;wBAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;oBAAC,CAAC;oBACzE,MAAM,CAAC;wBAAC,OAAO,KAAK,CAAC;oBAAC,CAAC;oBACvB,OAAO,IAAI,CAAC;gBACb,CAAC;YACF,CAAC;QACF,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IAED,oBAAoB,CAAC,UAAkB,EAAE,OAAuB;QAC/D,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;YAC9C,IAAI,EAAsB,CAAC;YAC3B,IAAI,CAAC;gBACJ,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;gBACjE,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;gBAC5E,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBAC9B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC;oBAC9D,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;oBAAE,OAAO,KAAK,CAAC;gBAC7D,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;gBACxC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4C,CAAC;gBAC3E,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACtD,IAAI,OAAO,CAAC,KAAK,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAC;gBAC1C,IAAI,OAAO,CAAC,KAAK,KAAK,MAAM;oBAAE,OAAO,KAAK,CAAC;gBAC3C,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;gBAC5E,IAAI,QAAQ,CAAC,UAAU,KAAK,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACjE,IAAI,MAAM,GAAG,CAAC,CAAC;gBACf,OAAO,MAAM,GAAG,QAAQ,CAAC,UAAU;oBAAE,MAAM,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,UAAU,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC;gBACxH,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACjB,OAAO,IAAI,CAAC;YACb,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACxD,IAAI,CAAC;wBAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;oBAAC,CAAC;oBACzE,MAAM,CAAC;wBAAC,OAAO,KAAK,CAAC;oBAAC,CAAC;oBACvB,OAAO,IAAI,CAAC;gBACb,CAAC;YACF,CAAC;oBAAS,CAAC;gBAAC,IAAI,EAAE,KAAK,SAAS;oBAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YAAC,CAAC;QACtD,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IAED,2BAA2B;QAC1B,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACjD,KAAK,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,+BAA+B,EAAE,CAAC;YACrE,IAAI,OAAO,CAAC,cAAc,KAAK,iBAAiB;gBAAE,SAAS;YAC3D,IAAI,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC;gBACzG,+BAA+B,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACpD,CAAC;QACF,CAAC;QACD,IAAI,CAAC,GAAG,+BAA+B,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,cAAc,KAAK,iBAAiB,CAAC,EAAE,CAAC;YACnH,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;QAC3F,CAAC;IACF,CAAC;IAED,gBAAgB,CAAC,QAAgB,EAAE,aAA2B,EAAE,mBAAmB,GAAG,IAAI;QAIzF,IAAI,EAAsB,CAAC;QAC3B,IAAI,IAA0B,CAAC;QAC/B,IAAI,GAAuB,CAAC;QAC5B,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,CAAC;YACJ,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;YACjD,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAC5E,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAChE,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAClC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4C,CAAC;YAC1E,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC;gBACtE,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC;gBACrE,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;gBACvE,CAAC,MAAM,CAAC,cAAc,KAAK,QAAQ,IAAI,MAAM,CAAC,cAAc,KAAK,QAAQ,CAAC;gBAC1E,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,EAAE,CAAC;gBACvD,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAC/C,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;gBAC7F,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACzC,CAAC;YACD,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACpG,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,SAAS,CAAC;YACzE,oEAAoE;YACpE,uEAAuE;YACvE,IAAI,mBAAmB,IAAI,IAAI,EAAE,MAAM,EAAE,IAAI,GAAG,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBACxH,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;gBACjD,MAAM,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBACvC,IAAI,OAAO,CAAC,MAAM,EAAE,IAAI,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,GAAG;oBAC/F,YAAY,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;oBAC7C,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;oBACxB,OAAO,SAAS,CAAC;gBAClB,CAAC;YACF,CAAC;YACD,MAAM,KAAK,CAAC;QACb,CAAC;gBAAS,CAAC;YAAC,IAAI,EAAE,KAAK,SAAS;gBAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC;IACtD,CAAC;IAED,cAAc,CAAC,cAAsB,EAAE,aAA2B,EAAE,GAAoB;QAIvF,MAAM,QAAQ,GAAyD,EAAE,CAAC;QAC1E,MAAM,OAAO,GAAuD,EAAE,CAAC;QACvE,IAAI,KAAe,CAAC;QACpB,IAAI,CAAC;YACJ,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,kEAAkE;YAClE,MAAM,KAAK,CAAC;QACb,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAC1B,MAAM,YAAY,GAAG,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChE,MAAM,UAAU,GAAG,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5D,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU;gBAAE,SAAS;YAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,GAAG,KAAK,SAAS,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;YAC/F,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC;YACxE,IAAI,CAAC,QAAQ;gBAAE,SAAS;YACxB,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,QAAQ,CAAC;YAC1C,MAAM,OAAO,GAAG,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;YACxE,IAAI,KAAK,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM;gBACtE,CAAC,YAAY,CAAC,YAAY,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;gBACjD,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;YACzE,CAAC;YACD,IAAI,MAAM,CAAC,KAAK,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7D,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;YAC5E,CAAC;YACD,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM,IAAI,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;gBACzF,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;oBAC7D,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;gBACtF,CAAC;gBACD,SAAS;YACV,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,YAAY;gBAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;YAC1F,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,UAAU;gBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACtF,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAO,GAAwB,EAAE;QAC9C,6EAA6E;QAC7E,4EAA4E;QAC5E,wDAAwD;QACxD,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACxC,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,IAAI,aAA2B,CAAC;QAChC,OAAO,IAAI,EAAE,CAAC;YACb,IAAI,CAAC;gBAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;gBAAC,MAAM;YAAC,CAAC;YAC/D,OAAO,KAAK,EAAE,CAAC;gBACd,iEAAiE;gBACjE,gEAAgE;gBAChE,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ,EAAE,CAAC;oBAClF,MAAM,IAAI,KAAK,CAAC,yDAAyD,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC9F,CAAC;gBACD,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YACxF,CAAC;QACF,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,YAAY,KAAK,OAAO,CAAC,CAAC;QACzE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,KAAK,OAAO,CAAC,CAAC;QACrE,MAAM,QAAQ,GAAwB;YACrC,IAAI,EAAE,UAAU;YAChB,GAAG,IAAI,CAAC,QAAQ;YAChB,KAAK;YACL,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,KAAK,EAAE,MAAM;SACb,CAAC;QACF,IAAI,eAA2C,CAAC;QAChD,IAAI,aAAyC,CAAC;QAC9C,IAAI,CAAC;YACJ,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;YACjD,sBAAsB,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;YAC/C,eAAe,GAAG,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC;YAChH,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO;gBAAE,MAAM,IAAI,qBAAqB,EAAE,CAAC;YAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC;YACpF,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9F,IAAI,SAAS,IAAI,MAAM,CAAC,gBAAgB;gBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAC1F,MAAM,YAAY,GAAsB;gBACvC,IAAI,EAAE,QAAQ;gBACd,GAAG,IAAI,CAAC,QAAQ;gBAChB,KAAK;gBACL,MAAM,EAAE,SAAS,GAAG,CAAC;gBACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,KAAK,EAAE,MAAM;aACb,CAAC;YACF,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;YACjD,sBAAsB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;YACjD,aAAa,GAAG,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;YAChH,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,eAAe,CAAC;gBAC5D,CAAC,IAAI,CAAC,uBAAuB,CAAC,YAAY,EAAE,eAAe,CAAC,EAAE,CAAC;gBAC/D,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;YAC9E,CAAC;YACD,cAAc,CAAC,cAAc,CAAC,CAAC;YAE/B,OAAO,IAAI,EAAE,CAAC;gBACb,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO;oBAAE,MAAM,IAAI,qBAAqB,EAAE,CAAC;gBAC/D,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;gBACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;gBACnF,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE,MAAM,CAAC;gBACpF,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,YAAY,CAAC;oBACpD,CAAC,YAAY,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,YAAY,CAAC,EAAE,CAAC;oBACtE,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;gBACjF,CAAC;gBACD,MAAM,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;gBACpF,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAC9C,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK;oBAC3B,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM;wBACxC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC9E,IAAI,CAAC,aAAa,IAAI,CAAC,OAAO,EAAE,CAAC;oBAChC,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;oBACjD,MAAM,OAAO,GAAG,aAAa,CAAC;oBAC9B,IAAI,QAAQ,GAAG,KAAK,CAAC;oBACrB,OAAO,GAAG,EAAE;wBACX,IAAI,QAAQ;4BAAE,OAAO;wBACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;wBAChE,IAAI,QAAQ,IAAI,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC;4BACnE,QAAQ,GAAG,IAAI,CAAC;4BAChB,+BAA+B,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;4BACnD,OAAO;wBACR,CAAC;wBACD,+BAA+B,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;wBACzD,OAAO,CAAC,IAAI,CACX,gDAAgD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;4BAC3E,CAAC,QAAQ,CAAC,CAAC,CAAC,sCAAsC,CAAC,CAAC,CAAC,4CAA4C,CAAC,CAClG,CAAC;oBACH,CAAC,CAAC;gBACH,CAAC;gBACD,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ,EAAE,CAAC;oBAC5B,MAAM,IAAI,uBAAuB,CAAC,kCAAkC,SAAS,IAAI,CAAC,CAAC;gBACpF,CAAC;gBACD,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YACxF,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,UAAU,GAAoC;gBACnD,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,eAAe,CAA6B,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzF,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,aAAa,CAA6B,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aACnF,CAAC;YACF,KAAK,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;gBAC9C,0EAA0E;gBAC1E,yEAAyE;gBACzE,6DAA6D;gBAC7D,IAAI,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,MAAM,CAAC;oBAAE,IAAI,CAAC,uBAAuB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACnG,CAAC;YACD,cAAc,CAAC,cAAc,CAAC,CAAC;YAC/B,MAAM,KAAK,CAAC;QACb,CAAC;IACF,CAAC;IAED,KAAK,CAAC,YAAY,CAAI,EAAwB,EAAE,OAAO,GAAwB,EAAE;QAChF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC;YACJ,OAAO,MAAM,EAAE,EAAE,CAAC;QACnB,CAAC;gBAAS,CAAC;YACV,OAAO,EAAE,CAAC;QACX,CAAC;IACF,CAAC;CACD;AAED,MAAM,UAAU,qBAAqB,CACpC,MAAuB,EACvB,QAAyB,EACzB,OAAyB;IAEzB,OAAO,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC"}
package/dist/resume.d.ts CHANGED
@@ -18,7 +18,7 @@
18
18
  * (pi / MCP) call it and hand the child RunState to `executeTaskflow`.
19
19
  */
20
20
  import { type Phase, type Taskflow } from "./schema.ts";
21
- import { type RunState } from "./store.ts";
21
+ import { type ProcessLiveness, type RunState } from "./store.ts";
22
22
  /** Overrides for re-running exactly one phase on resume. `phaseId` is required;
23
23
  * at least one of the other fields must be supplied. All values are applied to
24
24
  * the CHILD's def only (the parent def + persisted file are never touched). */
@@ -29,6 +29,26 @@ export interface ResumeOverrides {
29
29
  timeout?: number;
30
30
  idleTimeout?: number;
31
31
  }
32
+ /** A durable approval marker is safe only when the graph itself prevents all
33
+ * other unfinished phases from dispatching before one of these waits settles.
34
+ * Best-effort progress persistence cannot prove that a concurrent child stopped.
35
+ * Timed approvals may settle independently of the UI callback, so a stale marker
36
+ * cannot prove that their downstream children remain blocked. */
37
+ export declare function isQuiescentApprovalCheckpoint(prev: RunState, waitingIds: readonly string[]): boolean;
38
+ /** Prepare an orphaned foreground checkpoint for an immutable resume fork.
39
+ * Only a valid recorded PID whose OS probe proves ESRCH may be recovered.
40
+ * PID reuse, EPERM, unavailable birth tokens and missing metadata stay closed.
41
+ * The parent object/file is never changed and no signal other than 0 is sent. */
42
+ export declare function resumeSourceAfterOwnerExit(prev: RunState, options: {
43
+ cwd: string;
44
+ inspectProcess?: (pid: number) => ProcessLiveness;
45
+ }): {
46
+ ok: true;
47
+ value: RunState;
48
+ } | {
49
+ ok: false;
50
+ errors: string[];
51
+ };
32
52
  /** Runs are resumable only when execution stopped non-terminally. Completed and
33
53
  * blocked runs are immutable terminal history; use a fresh run or recompute. */
34
54
  export declare function validateResumeRun(prev: RunState): {
@@ -1 +1 @@
1
- {"version":3,"file":"resume.d.ts","sourceRoot":"","sources":["../src/resume.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAoC,KAAK,KAAK,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC1F,OAAO,EAA6B,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtE;;gFAEgF;AAChF,MAAM,WAAW,eAAe;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAQD;gFACgF;AAChF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAOnF;AAED;;8EAE8E;AAC9E,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,eAAe,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAoC9G;AAED;;+CAE+C;AAC/C,wBAAgB,qBAAqB,CACpC,IAAI,EAAE,QAAQ,EACd,SAAS,CAAC,EAAE,eAAe,GACzB;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAEnC;AAED;6CAC6C;AAC7C,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,eAAe,GAAG,QAAQ,CASjF;AAED;;sDAEsD;AACtD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAkB9E;AAED;;;;;;;;;;;0BAW0B;AAC1B,wBAAgB,gBAAgB,CAC/B,IAAI,EAAE,QAAQ,EACd,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,eAAe,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GACrE,QAAQ,CAgDV"}
1
+ {"version":3,"file":"resume.d.ts","sourceRoot":"","sources":["../src/resume.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAoC,KAAK,KAAK,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC1F,OAAO,EAA0B,KAAK,eAAe,EAAmB,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI1G;;gFAEgF;AAChF,MAAM,WAAW,eAAe;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;iEAIiE;AACjE,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAmBpG;AAED;;;iFAGiF;AACjF,wBAAgB,0BAA0B,CACzC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,eAAe,CAAA;CAAE,GACzE;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,QAAQ,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAgCjE;AAQD;gFACgF;AAChF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAOnF;AAED;;8EAE8E;AAC9E,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,eAAe,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAoC9G;AAED;;+CAE+C;AAC/C,wBAAgB,qBAAqB,CACpC,IAAI,EAAE,QAAQ,EACd,SAAS,CAAC,EAAE,eAAe,GACzB;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAEnC;AAED;6CAC6C;AAC7C,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,eAAe,GAAG,QAAQ,CASjF;AAED;;sDAEsD;AACtD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAkB9E;AAED;;;;;;;;;;;0BAW0B;AAC1B,wBAAgB,gBAAgB,CAC/B,IAAI,EAAE,QAAQ,EACd,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,eAAe,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GACrE,QAAQ,CAiDV"}
package/dist/resume.js CHANGED
@@ -18,8 +18,81 @@
18
18
  * (pi / MCP) call it and hand the child RunState to `executeTaskflow`.
19
19
  */
20
20
  import { validateTaskflow, dependenciesOf } from "./schema.js";
21
- import { newRunId } from "./store.js";
21
+ import { newRunId, probeProcess } from "./store.js";
22
22
  import { getBuildInfo } from "./build-info.js";
23
+ import { directoryIdentity } from "./cwd-bridge.js";
24
+ /** A durable approval marker is safe only when the graph itself prevents all
25
+ * other unfinished phases from dispatching before one of these waits settles.
26
+ * Best-effort progress persistence cannot prove that a concurrent child stopped.
27
+ * Timed approvals may settle independently of the UI callback, so a stale marker
28
+ * cannot prove that their downstream children remain blocked. */
29
+ export function isQuiescentApprovalCheckpoint(prev, waitingIds) {
30
+ if (!waitingIds.length || new Set(waitingIds).size !== waitingIds.length)
31
+ return false;
32
+ const waiting = new Set(waitingIds);
33
+ const phases = new Map(prev.def.phases.map((phase) => [phase.id, phase]));
34
+ const isStopped = (id) => ["done", "failed", "skipped"].includes(prev.phases[id]?.status ?? "");
35
+ for (const id of waiting) {
36
+ const phase = phases.get(id);
37
+ if (phase?.type !== "approval" || phase.timeoutMs !== undefined || prev.phases[id]?.status !== "running")
38
+ return false;
39
+ }
40
+ if (Object.values(prev.phases).some((phase) => phase.status === "running" && !waiting.has(phase.id)))
41
+ return false;
42
+ const blockedByApproval = (id, visiting = new Set()) => {
43
+ if (waiting.has(id))
44
+ return true;
45
+ if (isStopped(id) || visiting.has(id))
46
+ return false;
47
+ const phase = phases.get(id);
48
+ if (!phase || phase.join === "any")
49
+ return false;
50
+ const next = new Set(visiting).add(id);
51
+ return dependenciesOf(phase).some((dependency) => blockedByApproval(dependency, next));
52
+ };
53
+ return prev.def.phases.every((phase) => isStopped(phase.id) || blockedByApproval(phase.id));
54
+ }
55
+ /** Prepare an orphaned foreground checkpoint for an immutable resume fork.
56
+ * Only a valid recorded PID whose OS probe proves ESRCH may be recovered.
57
+ * PID reuse, EPERM, unavailable birth tokens and missing metadata stay closed.
58
+ * The parent object/file is never changed and no signal other than 0 is sent. */
59
+ export function resumeSourceAfterOwnerExit(prev, options) {
60
+ if (prev.status !== "running")
61
+ return { ok: true, value: prev };
62
+ const owner = prev.foregroundOwner;
63
+ if (!owner || owner.version !== 1 || !Number.isSafeInteger(owner.pid) || owner.pid <= 0 || owner.pid > 0x7fffffff
64
+ || typeof owner.instanceId !== "string" || !owner.instanceId.trim()
65
+ || !Number.isFinite(owner.startedAt) || owner.startedAt < 0) {
66
+ return { ok: false, errors: [`Run '${prev.runId}' is running without a verifiable foreground owner; refusing orphan recovery`] };
67
+ }
68
+ const savedRoot = prev.invocationRootSnapshot;
69
+ const currentRoot = directoryIdentity(options.cwd);
70
+ if (!savedRoot || !currentRoot || savedRoot.canonicalPath !== currentRoot.canonicalPath
71
+ || savedRoot.device !== currentRoot.device || savedRoot.inode !== currentRoot.inode) {
72
+ return { ok: false, errors: [`Run '${prev.runId}' interrupted checkpoint belongs to a missing, replaced or different invocation root`] };
73
+ }
74
+ const running = Object.values(prev.phases).filter((phase) => phase.status === "running").map((phase) => phase.id).sort();
75
+ const waiting = owner.approvalWait;
76
+ if (!Array.isArray(waiting) || !waiting.every((id) => typeof id === "string") || !running.length || waiting.length !== running.length
77
+ || running.some((id, index) => [...waiting].sort()[index] !== id) || !isQuiescentApprovalCheckpoint(prev, waiting)) {
78
+ return { ok: false, errors: [`Run '${prev.runId}' has no proven quiescent approval checkpoint; in-flight children may still be executing`] };
79
+ }
80
+ let liveness = "unknown";
81
+ if (owner.pid !== process.pid) {
82
+ try {
83
+ liveness = (options.inspectProcess ?? probeProcess)(owner.pid);
84
+ }
85
+ catch { /* unknown is not dead */ }
86
+ }
87
+ if (liveness !== "dead") {
88
+ return { ok: false, errors: [`Run '${prev.runId}' foreground owner ${owner.pid} is alive or unobservable; refusing concurrent resume`] };
89
+ }
90
+ // This stopped-state view exists only in memory for the existing validation
91
+ // and fork helpers. Historical 'running' and its owner remain on disk.
92
+ return { ok: true, value: { ...prev, status: "failed", foregroundInterruption: {
93
+ kind: "approval-owner-exit", ownerPid: owner.pid, ownerInstanceId: owner.instanceId, detectedAt: Date.now(),
94
+ } } };
95
+ }
23
96
  function resumeStatusErrors(prev) {
24
97
  return prev.status === "failed" || prev.status === "paused"
25
98
  ? []
@@ -177,6 +250,7 @@ export function forkRunForResume(prev, opts = {}) {
177
250
  ...(prev.flowSourceFile !== undefined ? { flowSourceFile: prev.flowSourceFile } : {}),
178
251
  ...(prev.flowSourceDirIdentity !== undefined ? { flowSourceDirIdentity: structuredClone(prev.flowSourceDirIdentity) } : {}),
179
252
  parentRunId: prev.runId,
253
+ ...(prev.foregroundInterruption ? { foregroundInterruption: structuredClone(prev.foregroundInterruption) } : {}),
180
254
  // Preserve workspace provenance/authority so a resume cannot silently
181
255
  // escape or downgrade the parent's cwd boundary.
182
256
  ...(prev.invocationRootSnapshot !== undefined ? { invocationRootSnapshot: structuredClone(prev.invocationRootSnapshot) } : {}),