@gjczone/pi-swarm 0.4.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,8 +5,17 @@
5
5
  * an AgentSwarm batch is running. Each subagent gets a compact braille
6
6
  * spinner with status and item description.
7
7
  *
8
+ * Features:
9
+ * - Debounced, event-driven rendering (replaces pure setInterval polling)
10
+ * - Keyboard interaction: j/k scroll, Enter detail, ? help, tab panel switch
11
+ * - Panel switching: members list / event log
12
+ * - Detail overlay for individual members
13
+ * - Activity/tool tracking per member
14
+ * - ETA estimation
15
+ *
8
16
  * Ported from MoonshotAI/kimi-code's AgentSwarmProgressComponent.
9
17
  */
18
+ import { matchesKey, Key, isKeyRepeat } from "@earendil-works/pi-tui";
10
19
  // ---------------------------------------------------------------------------
11
20
  // Constants
12
21
  // ---------------------------------------------------------------------------
@@ -23,8 +32,6 @@ const BRAILLE_SPINNER = [
23
32
  "\u28DF",
24
33
  "\u287F",
25
34
  ];
26
- /** Animation frame interval in ms. */
27
- const FRAME_INTERVAL_MS = 80;
28
35
  /** Braille characters representing fill levels 0-6 dots for completed bar. */
29
36
  const BRAILLE_LEVELS = [
30
37
  "\u28C0",
@@ -38,6 +45,18 @@ const BRAILLE_LEVELS = [
38
45
  const BRAILLE_EMPTY = BRAILLE_LEVELS[0];
39
46
  const BRAILLE_FULL = BRAILLE_LEVELS[6];
40
47
  const COMPLETED_BAR_WIDTH = 4;
48
+ /** Maximum members shown at once in the list view. */
49
+ const VISIBLE_MEMBERS = 8;
50
+ /** Maximum events shown in the event log panel. */
51
+ const VISIBLE_EVENTS = 10;
52
+ /** Debounce window for coalescing render requests. */
53
+ const DEBOUNCE_MS = 75;
54
+ /** Fallback polling interval when state is active (has running members). */
55
+ const ACTIVE_POLL_MS = 800;
56
+ /** Fallback polling interval when idle (no running members). */
57
+ const IDLE_POLL_MS = 2000;
58
+ /** Animation interval for the braille spinner. */
59
+ const FRAME_INTERVAL_MS = 80;
41
60
  // ---------------------------------------------------------------------------
42
61
  // Snapshot conversion
43
62
  // ---------------------------------------------------------------------------
@@ -49,6 +68,9 @@ export function snapshotToProgressState(snapshot, title) {
49
68
  item: m.item,
50
69
  error: m.error,
51
70
  phaseStartedAt: isAnimatedPhase(m.phase) ? now : undefined,
71
+ currentTool: m.currentTool,
72
+ activity: m.activity,
73
+ usage: m.usage,
52
74
  }));
53
75
  return {
54
76
  title,
@@ -60,6 +82,8 @@ export function snapshotToProgressState(snapshot, title) {
60
82
  members,
61
83
  totalUsage: snapshot.totalUsage,
62
84
  startedAt: snapshot.startedAt ?? now,
85
+ estimatedRemainingMs: snapshot.estimatedRemainingMs,
86
+ eventLog: snapshot.eventLog ? [...snapshot.eventLog] : undefined,
63
87
  };
64
88
  }
65
89
  function mapMemberPhase(phase) {
@@ -84,18 +108,37 @@ function isAnimatedPhase(phase) {
84
108
  // ---------------------------------------------------------------------------
85
109
  export class AgentSwarmProgressComponent {
86
110
  state_ = null;
87
- animationFrame;
88
111
  renderedWidth;
89
112
  cachedLines;
90
113
  onRequestRender;
114
+ // Render scheduler
115
+ animationFrame;
91
116
  frameIndex = 0;
117
+ pollTimer;
118
+ debounceTimer;
119
+ pendingInvalidate = false;
120
+ hasActiveMembers = false;
121
+ // Input / UI state
122
+ scrollOffset = 0;
123
+ selectedIndex = -1;
124
+ activePanel = "members";
125
+ overlay = null;
92
126
  constructor(onRequestRender) {
93
127
  this.onRequestRender = onRequestRender;
128
+ this.startPolling();
94
129
  this.startAnimation();
95
130
  }
131
+ // -------------------------------------------------------------------
132
+ // Public API
133
+ // -------------------------------------------------------------------
96
134
  update(state) {
97
135
  this.state_ = state;
98
- this.invalidate();
136
+ this.hasActiveMembers = state.active > 0;
137
+ // Reset scroll offset if it exceeds member count
138
+ if (this.scrollOffset > Math.max(0, state.members.length - VISIBLE_MEMBERS)) {
139
+ this.scrollOffset = Math.max(0, state.members.length - VISIBLE_MEMBERS);
140
+ }
141
+ this.requestRender();
99
142
  }
100
143
  complete() {
101
144
  if (this.state_) {
@@ -111,19 +154,103 @@ export class AgentSwarmProgressComponent {
111
154
  this.state_.queued = 0;
112
155
  this.state_.completed = this.state_.total - this.state_.failed;
113
156
  }
114
- this.invalidate();
157
+ this.hasActiveMembers = false;
158
+ this.requestRender();
115
159
  }
116
160
  dispose() {
117
- if (this.animationFrame !== undefined) {
118
- clearInterval(this.animationFrame);
119
- this.animationFrame = undefined;
120
- }
161
+ this.stopTimers();
121
162
  this.onRequestRender = undefined;
122
163
  }
123
164
  invalidate() {
124
165
  this.renderedWidth = undefined;
125
166
  this.cachedLines = undefined;
126
167
  }
168
+ // -------------------------------------------------------------------
169
+ // Keyboard input
170
+ // -------------------------------------------------------------------
171
+ handleInput(data) {
172
+ // Ignore key repeats for navigation keys to avoid scroll jank
173
+ const isRepeat = isKeyRepeat(data);
174
+ // Close overlay on Escape / q
175
+ if (this.overlay) {
176
+ if (matchesKey(data, Key.escape) || matchesKey(data, "q")) {
177
+ this.overlay = null;
178
+ this.requestRender();
179
+ return;
180
+ }
181
+ return;
182
+ }
183
+ // Navigation
184
+ if (matchesKey(data, "j") || matchesKey(data, Key.down)) {
185
+ if (!isRepeat) {
186
+ this.scrollDown(1);
187
+ }
188
+ return;
189
+ }
190
+ if (matchesKey(data, "k") || matchesKey(data, Key.up)) {
191
+ if (!isRepeat) {
192
+ this.scrollUp(1);
193
+ }
194
+ return;
195
+ }
196
+ if (matchesKey(data, Key.pageDown)) {
197
+ this.scrollDown(VISIBLE_MEMBERS);
198
+ return;
199
+ }
200
+ if (matchesKey(data, Key.pageUp)) {
201
+ this.scrollUp(VISIBLE_MEMBERS);
202
+ return;
203
+ }
204
+ if (matchesKey(data, "g") || matchesKey(data, Key.home)) {
205
+ this.scrollOffset = 0;
206
+ this.selectedIndex = -1;
207
+ this.requestRender();
208
+ return;
209
+ }
210
+ if (matchesKey(data, Key.shift("g")) || matchesKey(data, Key.end)) {
211
+ if (this.state_) {
212
+ const maxScroll = Math.max(0, this.state_.members.length - VISIBLE_MEMBERS);
213
+ this.scrollOffset = maxScroll;
214
+ this.selectedIndex = Math.max(0, this.state_.members.length - 1);
215
+ }
216
+ this.requestRender();
217
+ return;
218
+ }
219
+ // Panel switching
220
+ if (matchesKey(data, Key.tab) || matchesKey(data, "1")) {
221
+ this.activePanel = "members";
222
+ this.scrollOffset = 0;
223
+ this.selectedIndex = -1;
224
+ this.requestRender();
225
+ return;
226
+ }
227
+ if (matchesKey(data, "2")) {
228
+ this.activePanel = "events";
229
+ this.scrollOffset = 0;
230
+ this.requestRender();
231
+ return;
232
+ }
233
+ // Detail overlay
234
+ if (matchesKey(data, Key.enter) || matchesKey(data, Key.return)) {
235
+ if (this.activePanel === "members" && this.state_) {
236
+ const idx = this.selectedIndex >= 0 ? this.selectedIndex : this.scrollOffset;
237
+ if (idx >= 0 && idx < this.state_.members.length) {
238
+ this.overlay = { kind: "detail" };
239
+ this.requestRender();
240
+ }
241
+ }
242
+ return;
243
+ }
244
+ // Help overlay
245
+ if (matchesKey(data, "?")) {
246
+ this.overlay = { kind: "help" };
247
+ this.requestRender();
248
+ return;
249
+ }
250
+ }
251
+ // -------------------------------------------------------------------
252
+ // Rendering
253
+ // -------------------------------------------------------------------
127
254
  render(width) {
128
255
  const safeWidth = Math.max(20, width);
129
256
  if (this.cachedLines && this.renderedWidth === safeWidth) {
@@ -133,12 +260,20 @@ export class AgentSwarmProgressComponent {
133
260
  this.cachedLines = [];
134
261
  return this.cachedLines;
135
262
  }
263
+ // If overlay is active, render overlay content
264
+ if (this.overlay) {
265
+ const lines = this.renderOverlay(safeWidth);
266
+ this.cachedLines = lines;
267
+ return this.cachedLines;
268
+ }
136
269
  const state = this.state_;
137
270
  const contentWidth = safeWidth - 4;
138
271
  const lines = [];
139
- // Header: title
272
+ // Header: title + panel indicator
140
273
  const title = state.title ?? "Agent Swarm";
141
- lines.push(` ${truncateText(title, contentWidth)}`);
274
+ const panelLabel = this.activePanel === "members" ? "[1]members" : "[2]events";
275
+ const headerText = `${title} ${panelLabel}`;
276
+ lines.push(` ${truncateText(headerText, contentWidth)}`);
142
277
  // Overall progress bar
143
278
  const barWidth = Math.max(1, contentWidth);
144
279
  const total = state.total || 1;
@@ -147,19 +282,16 @@ export class AgentSwarmProgressComponent {
147
282
  const done = "\u2501".repeat(doneChars);
148
283
  const remaining = "\u2501".repeat(barWidth - doneChars);
149
284
  lines.push(` ${done}${remaining}`);
150
- // Member rows
151
- const maxMembers = Math.min(state.members.length, 20);
152
- for (let i = 0; i < maxMembers; i += 1) {
153
- const member = state.members[i];
154
- if (!member)
155
- continue;
156
- const row = renderMemberRow(member, contentWidth, this.frameIndex);
157
- lines.push(` ${row}`);
285
+ if (this.activePanel === "members") {
286
+ this.renderMembersPanel(lines, state, contentWidth);
287
+ }
288
+ else {
289
+ this.renderEventsPanel(lines, state, contentWidth);
158
290
  }
159
291
  // Separator
160
292
  const sep = "\u2500".repeat(contentWidth);
161
293
  lines.push(` ${sep}`);
162
- // Footer: counts + tokens + elapsed
294
+ // Footer: counts + tokens + elapsed + ETA
163
295
  const footer = buildFooter(state, contentWidth);
164
296
  lines.push(` ${footer}`);
165
297
  // Bottom border
@@ -169,31 +301,271 @@ export class AgentSwarmProgressComponent {
169
301
  this.renderedWidth = safeWidth;
170
302
  return this.cachedLines;
171
303
  }
304
+ // -------------------------------------------------------------------
305
+ // Panel rendering
306
+ // -------------------------------------------------------------------
307
+ renderMembersPanel(lines, state, contentWidth) {
308
+ const maxMembers = Math.min(state.members.length, this.scrollOffset + VISIBLE_MEMBERS);
309
+ const hasMore = state.members.length > VISIBLE_MEMBERS;
310
+ // Scroll indicator (top)
311
+ if (hasMore && this.scrollOffset > 0) {
312
+ lines.push(` \u2191 ${this.scrollOffset} more above`);
313
+ }
314
+ for (let i = this.scrollOffset; i < maxMembers; i += 1) {
315
+ const member = state.members[i];
316
+ if (!member)
317
+ continue;
318
+ const isSelected = i === this.selectedIndex ||
319
+ (this.selectedIndex < 0 && i === this.scrollOffset);
320
+ const row = renderMemberRow(member, contentWidth, this.frameIndex, isSelected);
321
+ lines.push(` ${row}`);
322
+ }
323
+ // Scroll indicator (bottom)
324
+ if (hasMore && maxMembers < state.members.length) {
325
+ const remaining = state.members.length - maxMembers;
326
+ lines.push(` \u2193 ${remaining} more below`);
327
+ }
328
+ }
329
+ renderEventsPanel(lines, state, contentWidth) {
330
+ const events = state.eventLog ?? [];
331
+ const displayEvents = events.slice(-VISIBLE_EVENTS);
332
+ if (displayEvents.length === 0) {
333
+ lines.push(` ${padRight("(no events yet)", contentWidth)}`);
334
+ return;
335
+ }
336
+ for (const event of displayEvents) {
337
+ const time = new Date(event.timestamp).toLocaleTimeString();
338
+ const icon = eventIcon(event.type);
339
+ const detail = truncateText(event.detail, contentWidth - 12);
340
+ lines.push(` ${icon} ${time} ${detail}`);
341
+ }
342
+ }
343
+ // -------------------------------------------------------------------
344
+ // Overlays
345
+ // -------------------------------------------------------------------
346
+ renderOverlay(width) {
347
+ if (!this.overlay)
348
+ return [];
349
+ if (this.overlay.kind === "help") {
350
+ return this.renderHelpOverlay(width);
351
+ }
352
+ return this.renderDetailOverlay(width);
353
+ }
354
+ renderHelpOverlay(width) {
355
+ const safeWidth = Math.max(30, width);
356
+ const contentWidth = safeWidth - 6;
357
+ const lines = [];
358
+ const bottom = `\u2514${"\u2500".repeat(safeWidth - 2)}\u2518`;
359
+ lines.push(` \u250C${"\u2500".repeat(safeWidth - 2)}\u2510`);
360
+ lines.push(` \u2502 ${padRight("Help" + " ".repeat(contentWidth - 4), safeWidth - 4)}\u2502`);
361
+ lines.push(` \u2502 ${padRight("", safeWidth - 4)}\u2502`);
362
+ const helpItems = [
363
+ ["j/k, up/down", "Scroll member list"],
364
+ ["g / Shift+G", "Go to top / bottom"],
365
+ ["Enter", "View member detail"],
366
+ ["1 or Tab", "Members panel"],
367
+ ["2", "Events panel"],
368
+ ["?", "Toggle this help"],
369
+ ["q / Esc", "Close overlay"],
370
+ ];
371
+ for (const [key, desc] of helpItems) {
372
+ const line = `${padRight(key, 18)} ${desc}`;
373
+ lines.push(` \u2502 ${padRight(line, safeWidth - 4)}\u2502`);
374
+ }
375
+ lines.push(` \u2502 ${padRight("", safeWidth - 4)}\u2502`);
376
+ lines.push(` \u2502 ${padRight("Press q or Esc to close", safeWidth - 4)}\u2502`);
377
+ lines.push(bottom);
378
+ return lines;
379
+ }
380
+ renderDetailOverlay(width) {
381
+ const safeWidth = Math.max(30, width);
382
+ const contentWidth = safeWidth - 6;
383
+ const lines = [];
384
+ if (!this.state_)
385
+ return [];
386
+ const idx = this.selectedIndex >= 0 ? this.selectedIndex : this.scrollOffset;
387
+ const member = this.state_.members[idx];
388
+ if (!member)
389
+ return [];
390
+ const bottom = `\u2514${"\u2500".repeat(safeWidth - 2)}\u2518`;
391
+ lines.push(` \u250C${"\u2500".repeat(safeWidth - 2)}\u2510`);
392
+ lines.push(` \u2502 ${padRight(`Agent #${String(member.index).padStart(2, "0")}`, safeWidth - 4)}\u2502`);
393
+ lines.push(` \u2502 ${padRight("", safeWidth - 4)}\u2502`);
394
+ const fields = [
395
+ { label: "Status", value: shortPhaseLabel(member.phase) },
396
+ ];
397
+ if (member.item) {
398
+ fields.push({ label: "Item", value: member.item });
399
+ }
400
+ if (member.currentTool) {
401
+ fields.push({ label: "Tool", value: member.currentTool });
402
+ }
403
+ if (member.activity) {
404
+ fields.push({ label: "Activity", value: member.activity });
405
+ }
406
+ if (member.usage) {
407
+ fields.push({
408
+ label: "Tokens",
409
+ value: `${Math.round(member.usage.input)}in / ${Math.round(member.usage.output)}out`,
410
+ });
411
+ }
412
+ if (member.error) {
413
+ fields.push({ label: "Error", value: member.error });
414
+ }
415
+ for (const field of fields) {
416
+ const line = `${padRight(field.label + ":", 10)} ${truncateText(field.value, contentWidth - 12)}`;
417
+ lines.push(` \u2502 ${padRight(line, safeWidth - 4)}\u2502`);
418
+ }
419
+ lines.push(` \u2502 ${padRight("", safeWidth - 4)}\u2502`);
420
+ lines.push(` \u2502 ${padRight("Press q or Esc to close", safeWidth - 4)}\u2502`);
421
+ lines.push(bottom);
422
+ return lines;
423
+ }
424
+ // -------------------------------------------------------------------
425
+ // Scroll helpers
426
+ // -------------------------------------------------------------------
427
+ scrollDown(n) {
428
+ if (!this.state_)
429
+ return;
430
+ const memberCount = this.state_.members.length;
431
+ const maxOffset = Math.max(0, memberCount - 1);
432
+ this.selectedIndex = Math.min(maxOffset, Math.max(0, this.selectedIndex < 0 ? this.scrollOffset : this.selectedIndex) + n);
433
+ if (this.selectedIndex - this.scrollOffset >= VISIBLE_MEMBERS ||
434
+ this.selectedIndex < this.scrollOffset) {
435
+ this.scrollOffset = Math.max(0, this.selectedIndex - VISIBLE_MEMBERS + 1);
436
+ const maxScroll = Math.max(0, memberCount - VISIBLE_MEMBERS);
437
+ this.scrollOffset = Math.min(this.scrollOffset, maxScroll);
438
+ }
439
+ this.requestRender();
440
+ }
441
+ scrollUp(n) {
442
+ if (!this.state_)
443
+ return;
444
+ this.selectedIndex = Math.max(0, (this.selectedIndex < 0 ? this.scrollOffset : this.selectedIndex) - n);
445
+ if (this.selectedIndex < this.scrollOffset) {
446
+ this.scrollOffset = Math.max(0, this.selectedIndex);
447
+ }
448
+ this.requestRender();
449
+ }
450
+ // -------------------------------------------------------------------
451
+ // Render scheduling
452
+ // -------------------------------------------------------------------
453
+ /**
454
+ * Request a debounced render. Multiple calls within the debounce window
455
+ * coalesce into a single render pass. State changes also trigger immediate
456
+ * invalidation.
457
+ */
458
+ requestRender() {
459
+ this.invalidate();
460
+ if (this.debounceTimer !== undefined) {
461
+ this.pendingInvalidate = true;
462
+ return;
463
+ }
464
+ this.debounceTimer = setTimeout(() => {
465
+ this.debounceTimer = undefined;
466
+ this.pendingInvalidate = false;
467
+ this.onRequestRender?.();
468
+ this.updatePollingInterval();
469
+ }, DEBOUNCE_MS);
470
+ // Also trigger an immediate render for faster response to inputs
471
+ this.onRequestRender?.();
472
+ }
473
+ /**
474
+ * Start the fallback polling timer. Falls back to polling when no
475
+ * state changes trigger requests, ensuring the spinner animates.
476
+ */
477
+ startPolling() {
478
+ this.schedulePoll();
479
+ }
480
+ schedulePoll() {
481
+ const interval = this.hasActiveMembers ? ACTIVE_POLL_MS : IDLE_POLL_MS;
482
+ this.pollTimer = setTimeout(() => {
483
+ this.pollTimer = undefined;
484
+ // Tick the spinner frame even without state changes
485
+ if (this.state_) {
486
+ this.invalidate();
487
+ this.onRequestRender?.();
488
+ }
489
+ this.schedulePoll();
490
+ }, interval);
491
+ }
492
+ /**
493
+ * Adjust polling interval based on active member count.
494
+ */
495
+ updatePollingInterval() {
496
+ // Will be picked up on next poll cycle
497
+ }
498
+ /**
499
+ * Start the animation tick for the braille spinner.
500
+ */
172
501
  startAnimation() {
173
502
  this.animationFrame = setInterval(() => {
174
503
  this.frameIndex = (this.frameIndex + 1) % BRAILLE_SPINNER.length;
175
- this.invalidate();
176
- this.onRequestRender?.();
504
+ // Only invalidate and re-render if there are active members (spinner visible)
505
+ // or if we're in an overlay that uses animation
506
+ if (this.hasActiveMembers || this.overlay) {
507
+ this.invalidate();
508
+ this.onRequestRender?.();
509
+ }
177
510
  }, FRAME_INTERVAL_MS);
178
511
  }
512
+ stopTimers() {
513
+ if (this.animationFrame !== undefined) {
514
+ clearInterval(this.animationFrame);
515
+ this.animationFrame = undefined;
516
+ }
517
+ if (this.debounceTimer !== undefined) {
518
+ clearTimeout(this.debounceTimer);
519
+ this.debounceTimer = undefined;
520
+ }
521
+ if (this.pollTimer !== undefined) {
522
+ clearTimeout(this.pollTimer);
523
+ this.pollTimer = undefined;
524
+ }
525
+ }
179
526
  }
180
527
  // ---------------------------------------------------------------------------
181
528
  // Rendering helpers
182
529
  // ---------------------------------------------------------------------------
183
- function renderMemberRow(member, width, frameIndex) {
530
+ function eventIcon(type) {
531
+ switch (type) {
532
+ case "started":
533
+ return "\u25B6"; // ▶
534
+ case "completed":
535
+ return "\u2713"; // ✓
536
+ case "failed":
537
+ return "\u2717"; // ✗
538
+ case "tool_execution":
539
+ return "\u2699"; // ⚙
540
+ case "suspended":
541
+ return "\u23F3"; // ⏳
542
+ case "phase_change":
543
+ return "\u2192"; // →
544
+ }
545
+ }
546
+ function renderMemberRow(member, width, frameIndex, selected) {
547
+ const prefix = selected ? ">" : " ";
184
548
  const indexLabel = `#${String(member.index).padStart(2, "0")}`;
185
549
  const icon = memberIcon(member, frameIndex);
186
550
  const statusLabel = shortPhaseLabel(member.phase);
187
- const itemLabel = member.item ?? "";
188
- // Layout: #NN [icon] status item
189
- const fixed = `${indexLabel} ${icon} ${statusLabel}`;
551
+ // Layout with optional activity column
552
+ const fixed = `${prefix}${indexLabel} ${icon} ${statusLabel}`;
190
553
  const fixedLen = visibleLen(fixed);
191
- if (fixedLen >= width) {
192
- return truncateText(fixed, width);
554
+ let remaining = Math.max(0, width - fixedLen - 2);
555
+ // Show current tool if available
556
+ let activitySuffix = "";
557
+ if (member.currentTool && member.phase === "working") {
558
+ const toolInfo = member.activity
559
+ ? `${member.currentTool}: ${member.activity}`
560
+ : member.currentTool;
561
+ if (toolInfo.length < remaining - 2) {
562
+ activitySuffix = ` ${truncateText(toolInfo, Math.min(30, remaining - 2))}`;
563
+ remaining -= visibleLen(activitySuffix);
564
+ }
193
565
  }
194
- const itemSpace = Math.max(0, width - fixedLen - 2);
195
- const truncatedItem = truncateText(itemLabel, itemSpace);
196
- return `${fixed} ${truncatedItem}`;
566
+ const itemLabel = member.item ?? "";
567
+ const truncatedItem = truncateText(itemLabel, Math.max(0, remaining));
568
+ return `${fixed} ${truncatedItem}${activitySuffix}`;
197
569
  }
198
570
  function memberIcon(member, frameIndex) {
199
571
  switch (member.phase) {
@@ -246,6 +618,11 @@ function buildFooter(state, width) {
246
618
  parts.splice(1, 0, `${state.failed}fail`);
247
619
  if (state.active > 0)
248
620
  parts.splice(1, 0, `${state.active}act`);
621
+ // ETA
622
+ if (state.estimatedRemainingMs !== undefined &&
623
+ state.estimatedRemainingMs > 0) {
624
+ parts.push(formatElapsed(state.estimatedRemainingMs));
625
+ }
249
626
  const full = parts.join(" | ");
250
627
  if (full.length <= width)
251
628
  return full;
@@ -272,4 +649,9 @@ function truncateText(text, maxLen) {
272
649
  return text.slice(0, 1);
273
650
  return text.slice(0, Math.max(0, maxLen - 1)) + "\u2026";
274
651
  }
652
+ function padRight(text, width) {
653
+ if (text.length >= width)
654
+ return text.slice(0, width);
655
+ return text + " ".repeat(width - text.length);
656
+ }
275
657
  //# sourceMappingURL=progress.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/tui/progress.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/tui/progress.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAQtE,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,8CAA8C;AAC9C,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAE9B,yDAAyD;AACzD,MAAM,eAAe,GAAG;IACtB,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;CACA,CAAC;AAEX,8EAA8E;AAC9E,MAAM,cAAc,GAAG;IACrB,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;CACA,CAAC;AAEX,MAAM,aAAa,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;AACxC,MAAM,YAAY,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;AACvC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAE9B,sDAAsD;AACtD,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B,mDAAmD;AACnD,MAAM,cAAc,GAAG,EAAE,CAAC;AAE1B,sDAAsD;AACtD,MAAM,WAAW,GAAG,EAAE,CAAC;AAEvB,4EAA4E;AAC5E,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,gEAAgE;AAChE,MAAM,YAAY,GAAG,IAAI,CAAC;AAE1B,kDAAkD;AAClD,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAoD7B,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E,MAAM,UAAU,uBAAuB,CACrC,QAA+B,EAC/B,KAAc;IAEd,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,OAAO,GAAmB,QAAQ,CAAC,OAAO,CAAC,GAAG,CAClD,CAAC,CAAoB,EAAgB,EAAE,CAAC,CAAC;QACvC,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC;QAC9B,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,cAAc,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;QAC1D,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,KAAK,EAAE,CAAC,CAAC,KAAK;KACf,CAAC,CACH,CAAC;IAEF,OAAO;QACL,KAAK;QACL,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,OAAO;QACP,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,GAAG;QACpC,oBAAoB,EAAE,QAAQ,CAAC,oBAAoB;QACnD,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;KACjE,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAiC;IACvD,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;QAClB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB,KAAK,WAAW;YACd,OAAO,WAAW,CAAC;QACrB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;QAClB,KAAK,WAAW;YACd,OAAO,WAAW,CAAC;IACvB,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAiC;IACxD,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,WAAW,CAAC;AACtD,CAAC;AAED,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,MAAM,OAAO,2BAA2B;IAC9B,MAAM,GAA8B,IAAI,CAAC;IACzC,aAAa,CAAqB;IAClC,WAAW,CAAuB;IAClC,eAAe,CAA2B;IAElD,mBAAmB;IACX,cAAc,CAA6C;IAC3D,UAAU,GAAG,CAAC,CAAC;IACf,SAAS,CAA4C;IACrD,aAAa,CAA4C;IACzD,iBAAiB,GAAG,KAAK,CAAC;IAC1B,gBAAgB,GAAG,KAAK,CAAC;IAEjC,mBAAmB;IACX,YAAY,GAAG,CAAC,CAAC;IACjB,aAAa,GAAG,CAAC,CAAC,CAAC;IACnB,WAAW,GAAY,SAAS,CAAC;IACjC,OAAO,GAAwB,IAAI,CAAC;IAE5C,YAAY,eAA4B;QACtC,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAED,sEAAsE;IACtE,aAAa;IACb,sEAAsE;IAEtE,MAAM,CAAC,KAAyB;QAC9B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAEzC,iDAAiD;QACjD,IACE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,eAAe,CAAC,EACvE,CAAC;YACD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED,QAAQ;QACN,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpC,IACE,CAAC,CAAC,KAAK,KAAK,WAAW;oBACvB,CAAC,CAAC,KAAK,KAAK,QAAQ;oBACpB,CAAC,CAAC,KAAK,KAAK,WAAW,EACvB,CAAC;oBACD,CAAC,CAAC,KAAK,GAAG,WAAW,CAAC;oBACtB,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAChC,CAAC;YACH,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QACjE,CAAC;QACD,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED,OAAO;QACL,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;IACnC,CAAC;IAED,UAAU;QACR,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;IAC/B,CAAC;IAED,sEAAsE;IACtE,iBAAiB;IACjB,sEAAsE;IAEtE,WAAW,CAAC,IAAY;QACtB,8DAA8D;QAC9D,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAEnC,8BAA8B;QAC9B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;gBAC1D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;gBACpB,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrB,OAAO;YACT,CAAC;YACD,OAAO;QACT,CAAC;QAED,aAAa;QACb,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACxD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACrB,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACtD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;YACjC,OAAO;QACT,CAAC;QACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACxD,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;YACxB,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAClE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CACxB,CAAC,EACD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,eAAe,CAC7C,CAAC;gBACF,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;gBAC9B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACnE,CAAC;YACD,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,kBAAkB;QAClB,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;YAC7B,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;YACxB,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;YAC5B,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,iBAAiB;QACjB,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAChE,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAClD,MAAM,GAAG,GACP,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;gBACnE,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;oBACjD,IAAI,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;oBAClC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,CAAC;YACH,CAAC;YACD,OAAO;QACT,CAAC;QAED,eAAe;QACf,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YAChC,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;IACH,CAAC;IAED,sEAAsE;IACtE,YAAY;IACZ,sEAAsE;IAEtE,MAAM,CAAC,KAAa;QAClB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACtC,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACzD,OAAO,IAAI,CAAC,WAAW,CAAC;QAC1B,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrD,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,WAAW,CAAC;QAC1B,CAAC;QAED,+CAA+C;QAC/C,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YAC5C,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,OAAO,IAAI,CAAC,WAAW,CAAC;QAC1B,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,MAAM,YAAY,GAAG,SAAS,GAAG,CAAC,CAAC;QACnC,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,kCAAkC;QAClC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,aAAa,CAAC;QAC3C,MAAM,UAAU,GACd,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC;QAC9D,MAAM,UAAU,GAAG,GAAG,KAAK,KAAK,UAAU,EAAE,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,KAAK,YAAY,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;QAE1D,uBAAuB;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;QAC/B,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;QAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,CAAC;QACnD,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,SAAS,EAAE,CAAC,CAAC;QAEpC,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;QACtD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;QACrD,CAAC;QAED,YAAY;QACZ,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;QAEvB,0CAA0C;QAC1C,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC;QAE1B,gBAAgB;QAChB,MAAM,MAAM,GAAG,SAAS,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC;QAC9D,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEnB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,sEAAsE;IACtE,kBAAkB;IAClB,sEAAsE;IAE9D,kBAAkB,CACxB,KAAe,EACf,KAAyB,EACzB,YAAoB;QAEpB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CACzB,KAAK,CAAC,OAAO,CAAC,MAAM,EACpB,IAAI,CAAC,YAAY,GAAG,eAAe,CACpC,CAAC;QACF,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,eAAe,CAAC;QAEvD,yBAAyB;QACzB,IAAI,OAAO,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,aAAa,CAAC,CAAC;QACzD,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACvD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,CAAC,MAAM;gBAAE,SAAS;YACtB,MAAM,UAAU,GACd,CAAC,KAAK,IAAI,CAAC,aAAa;gBACxB,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC;YACtD,MAAM,GAAG,GAAG,eAAe,CACzB,MAAM,EACN,YAAY,EACZ,IAAI,CAAC,UAAU,EACf,UAAU,CACX,CAAC;YACF,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;QACzB,CAAC;QAED,4BAA4B;QAC5B,IAAI,OAAO,IAAI,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACjD,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC;YACpD,KAAK,CAAC,IAAI,CAAC,YAAY,SAAS,aAAa,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAEO,iBAAiB,CACvB,KAAe,EACf,KAAyB,EACzB,YAAoB;QAEpB,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;QACpC,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,CAAC;QAEpD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,iBAAiB,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE,CAAC;YAC5D,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,GAAG,EAAE,CAAC,CAAC;YAC7D,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,sEAAsE;IACtE,WAAW;IACX,sEAAsE;IAE9D,aAAa,CAAC,KAAa;QACjC,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QAE7B,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAEO,iBAAiB,CAAC,KAAa;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACtC,MAAM,YAAY,GAAG,SAAS,GAAG,CAAC,CAAC;QACnC,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,MAAM,MAAM,GAAG,SAAS,QAAQ,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC;QAE/D,KAAK,CAAC,IAAI,CAAC,WAAW,QAAQ,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC9D,KAAK,CAAC,IAAI,CACR,aAAa,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,QAAQ,CACpF,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,aAAa,QAAQ,CAAC,EAAE,EAAE,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QAE7D,MAAM,SAAS,GAAG;YAChB,CAAC,cAAc,EAAE,oBAAoB,CAAC;YACtC,CAAC,aAAa,EAAE,oBAAoB,CAAC;YACrC,CAAC,OAAO,EAAE,oBAAoB,CAAC;YAC/B,CAAC,UAAU,EAAE,eAAe,CAAC;YAC7B,CAAC,GAAG,EAAE,cAAc,CAAC;YACrB,CAAC,GAAG,EAAE,kBAAkB,CAAC;YACzB,CAAC,SAAS,EAAE,eAAe,CAAC;SAC7B,CAAC;QAEF,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,SAAS,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,aAAa,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QACjE,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,aAAa,QAAQ,CAAC,EAAE,EAAE,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC7D,KAAK,CAAC,IAAI,CACR,aAAa,QAAQ,CAAC,yBAAyB,EAAE,SAAS,GAAG,CAAC,CAAC,QAAQ,CACxE,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEnB,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,mBAAmB,CAAC,KAAa;QACvC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACtC,MAAM,YAAY,GAAG,SAAS,GAAG,CAAC,CAAC;QACnC,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAE5B,MAAM,GAAG,GACP,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;QACnE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAEvB,MAAM,MAAM,GAAG,SAAS,QAAQ,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC;QAE/D,KAAK,CAAC,IAAI,CAAC,WAAW,QAAQ,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC9D,KAAK,CAAC,IAAI,CACR,aAAa,QAAQ,CAAC,UAAU,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,GAAG,CAAC,CAAC,QAAQ,CAChG,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,aAAa,QAAQ,CAAC,EAAE,EAAE,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QAE7D,MAAM,MAAM,GAA4C;YACtD,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;SAC1D,CAAC;QAEF,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,QAAQ;gBACf,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK;aACrF,CAAC,CAAC;QACL,CAAC;QACD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,YAAY,GAAG,EAAE,CAAC,EAAE,CAAC;YAClG,KAAK,CAAC,IAAI,CAAC,aAAa,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QACjE,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,aAAa,QAAQ,CAAC,EAAE,EAAE,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC7D,KAAK,CAAC,IAAI,CACR,aAAa,QAAQ,CAAC,yBAAyB,EAAE,SAAS,GAAG,CAAC,CAAC,QAAQ,CACxE,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEnB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,sEAAsE;IACtE,iBAAiB;IACjB,sEAAsE;IAE9D,UAAU,CAAC,CAAS;QAC1B,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QACzB,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAC3B,SAAS,EACT,IAAI,CAAC,GAAG,CACN,CAAC,EACD,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAChE,GAAG,CAAC,CACN,CAAC;QACF,IACE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,IAAI,eAAe;YACzD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,EACtC,CAAC;YACD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,GAAG,eAAe,GAAG,CAAC,CAAC,CAAC;YAC1E,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,eAAe,CAAC,CAAC;YAC7D,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAEO,QAAQ,CAAC,CAAS;QACxB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QACzB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAC3B,CAAC,EACD,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CACtE,CAAC;QACF,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YAC3C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED,sEAAsE;IACtE,oBAAoB;IACpB,sEAAsE;IAEtE;;;;OAIG;IACK,aAAa;QACnB,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACrC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAC9B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE;YACnC,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;YAC/B,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;YAC/B,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;YACzB,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC/B,CAAC,EAAE,WAAW,CAAC,CAAC;QAEhB,iEAAiE;QACjE,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACK,YAAY;QAClB,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAEO,YAAY;QAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC;QACvE,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3B,oDAAoD;YACpD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,IAAI,CAAC,UAAU,EAAE,CAAC;gBAClB,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;YAC3B,CAAC;YACD,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC,EAAE,QAAQ,CAAC,CAAC;IACf,CAAC;IAED;;OAEG;IACK,qBAAqB;QAC3B,uCAAuC;IACzC,CAAC;IAED;;OAEG;IACK,cAAc;QACpB,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;YACrC,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC;YACjE,8EAA8E;YAC9E,gDAAgD;YAChD,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC1C,IAAI,CAAC,UAAU,EAAE,CAAC;gBAClB,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC,EAAE,iBAAiB,CAAC,CAAC;IACxB,CAAC;IAEO,UAAU;QAChB,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YACtC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACnC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAClC,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACrC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACjC,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QACjC,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACjC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC7B,CAAC;IACH,CAAC;CACF;AAED,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E,SAAS,SAAS,CAAC,IAA2B;IAC5C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,SAAS;YACZ,OAAO,QAAQ,CAAC,CAAC,IAAI;QACvB,KAAK,WAAW;YACd,OAAO,QAAQ,CAAC,CAAC,IAAI;QACvB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC,CAAC,IAAI;QACvB,KAAK,gBAAgB;YACnB,OAAO,QAAQ,CAAC,CAAC,IAAI;QACvB,KAAK,WAAW;YACd,OAAO,QAAQ,CAAC,CAAC,IAAI;QACvB,KAAK,cAAc;YACjB,OAAO,QAAQ,CAAC,CAAC,IAAI;IACzB,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CACtB,MAAoB,EACpB,KAAa,EACb,UAAkB,EAClB,QAAiB;IAEjB,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACpC,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IAC/D,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAElD,uCAAuC;IACvC,MAAM,KAAK,GAAG,GAAG,MAAM,GAAG,UAAU,IAAI,IAAI,IAAI,WAAW,EAAE,CAAC;IAC9D,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAEnC,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC;IAElD,iCAAiC;IACjC,IAAI,cAAc,GAAG,EAAE,CAAC;IACxB,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACrD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ;YAC9B,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,KAAK,MAAM,CAAC,QAAQ,EAAE;YAC7C,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;QACvB,IAAI,QAAQ,CAAC,MAAM,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC;YACpC,cAAc,GAAG,IAAI,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3E,SAAS,IAAI,UAAU,CAAC,cAAc,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;IACpC,MAAM,aAAa,GAAG,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IAEtE,OAAO,GAAG,KAAK,KAAK,aAAa,GAAG,cAAc,EAAE,CAAC;AACvD,CAAC;AAED,SAAS,UAAU,CAAC,MAAoB,EAAE,UAAkB;IAC1D,QAAQ,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,KAAK,WAAW;YACd,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAChC,KAAK,QAAQ,CAAC;QACd,KAAK,WAAW;YACd,OAAO,SAAS,CAAC;QACnB,KAAK,SAAS,CAAC;QACf,KAAK,QAAQ;YACX,OAAO,SAAS,CAAC;QACnB,KAAK,WAAW,CAAC;QACjB,KAAK,SAAS,CAAC;QACf,KAAK,WAAW;YACd,OAAO,eAAe,CAAC,UAAU,GAAG,eAAe,CAAC,MAAM,CAAE,GAAG,GAAG,CAAC;IACvE,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAkB;IACzC,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,SAAS,CAAC;QACf,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC;QAChB,KAAK,WAAW;YACd,OAAO,MAAM,CAAC;QAChB,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC;QAChB,KAAK,WAAW;YACd,OAAO,MAAM,CAAC;QAChB,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC;QAChB,KAAK,WAAW;YACd,OAAO,OAAO,CAAC;QACjB,KAAK,WAAW;YACd,OAAO,OAAO,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,KAAyB,EAAE,KAAa;IAC3D,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,IAAI;QAChC,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC;QACT,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,CAAC;QACb,WAAW,EAAE,CAAC;KACf,CAAC;IACF,MAAM,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC;IACrE,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;IAC7E,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;IAE5D,MAAM,KAAK,GAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAClD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,MAAM,CAAC,CAAC;IAChE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;IAE/D,MAAM;IACN,IACE,KAAK,CAAC,oBAAoB,KAAK,SAAS;QACxC,KAAK,CAAC,oBAAoB,GAAG,CAAC,EAC9B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,aAAa,CAAC,EAAU;IAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IACvC,IAAI,QAAQ,GAAG,EAAE;QAAE,OAAO,GAAG,QAAQ,GAAG,CAAC;IACzC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;IACpC,MAAM,CAAC,GAAG,QAAQ,GAAG,EAAE,CAAC;IACxB,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AACtB,CAAC;AAED,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC;AACpD,CAAC;AAED,SAAS,YAAY,CAAC,IAAY,EAAE,MAAc;IAChD,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;AAC3D,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY,EAAE,KAAa;IAC3C,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACtD,OAAO,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAChD,CAAC"}