@floegence/floeterm-terminal-web 0.4.31 → 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.
@@ -0,0 +1,633 @@
1
+ import { TerminalCore } from '../core/TerminalCore';
2
+ import { SequenceBuffer } from '../internal/SequenceBuffer';
3
+ import { createTerminalError } from '../utils/errors';
4
+ import { getDefaultTerminalConfig, getThemeColors } from '../utils/config';
5
+ import { createConsoleLogger, noopLogger } from '../utils/logger';
6
+ import { concatChunks } from '../utils/history';
7
+ import { TerminalState, computeConnectionState, computeTerminalState, } from '../types';
8
+ var ConnectionState;
9
+ (function (ConnectionState) {
10
+ ConnectionState["IDLE"] = "idle";
11
+ ConnectionState["CONNECTING"] = "connecting";
12
+ ConnectionState["CONNECTED"] = "connected";
13
+ ConnectionState["DISCONNECTED"] = "disconnected";
14
+ ConnectionState["RETRYING"] = "retrying";
15
+ ConnectionState["FAILED"] = "failed";
16
+ ConnectionState["ABORTED"] = "aborted";
17
+ })(ConnectionState || (ConnectionState = {}));
18
+ const MAX_WRITE_BATCH_CHUNKS = 64;
19
+ const MAX_WRITE_BATCH_BYTES = 256 * 1024;
20
+ const createDefaultScheduler = () => ({
21
+ requestFrame: callback => {
22
+ if (typeof requestAnimationFrame === 'function') {
23
+ return requestAnimationFrame(callback);
24
+ }
25
+ return setTimeout(() => callback(Date.now()), 0);
26
+ },
27
+ cancelFrame: id => {
28
+ if (typeof cancelAnimationFrame === 'function') {
29
+ cancelAnimationFrame(id);
30
+ return;
31
+ }
32
+ clearTimeout(id);
33
+ },
34
+ setTimer: (callback, delayMs) => setTimeout(callback, delayMs),
35
+ clearTimer: id => clearTimeout(id),
36
+ });
37
+ export class FrameworkNeutralTerminalInstanceController {
38
+ constructor(options) {
39
+ this.listeners = new Set();
40
+ this.container = null;
41
+ this.terminalCore = null;
42
+ this.isInitializing = false;
43
+ this.terminalDataUnsubscribe = null;
44
+ this.sequenceBuffer = new SequenceBuffer();
45
+ this.replayCompleteReceived = false;
46
+ this.isReplayActive = false;
47
+ this.lastAppliedSequence = 0;
48
+ this.loadingState = 'idle';
49
+ this.loadingMessage = '';
50
+ this.connectionState = ConnectionState.IDLE;
51
+ this.connectionError = null;
52
+ this.retryCount = 0;
53
+ this.retryTimeout = null;
54
+ this.initializeTimeout = null;
55
+ this.queueRetryTimeout = null;
56
+ this.state = {
57
+ state: TerminalState.IDLE,
58
+ error: undefined,
59
+ dimensions: { cols: 80, rows: 24 }
60
+ };
61
+ this.dimensions = { cols: 80, rows: 24 };
62
+ this.dataQueue = [];
63
+ this.isProcessing = false;
64
+ this.queueGeneration = 0;
65
+ this.flushRaf = null;
66
+ this.disposed = false;
67
+ this.actions = {
68
+ write: data => {
69
+ const chunk = {
70
+ data: new TextEncoder().encode(data),
71
+ sequence: 0,
72
+ timestampMs: Date.now()
73
+ };
74
+ this.addChunkToQueue(chunk);
75
+ },
76
+ clear: () => {
77
+ this.terminalCore?.clear();
78
+ this.dataQueue = [];
79
+ const sessionId = this.options.sessionId;
80
+ if (!sessionId) {
81
+ return;
82
+ }
83
+ this.options.transport.clear(sessionId)
84
+ .catch(error => this.logger.warn('[TerminalInstanceController] Clear history failed', { error }))
85
+ .finally(() => {
86
+ this.options.transport.sendInput(sessionId, '\r')
87
+ .catch(error => this.logger.warn('[TerminalInstanceController] Clear redraw failed', { error }));
88
+ });
89
+ },
90
+ findNext: (term, options) => this.terminalCore?.findNext(term, options) ?? false,
91
+ findPrevious: (term, options) => this.terminalCore?.findPrevious(term, options) ?? false,
92
+ clearSearch: () => this.terminalCore?.clearSearch(),
93
+ serialize: () => this.terminalCore?.serialize() ?? '',
94
+ getSelectionText: () => this.terminalCore?.getSelectionText() ?? '',
95
+ hasSelection: () => this.terminalCore?.hasSelection() ?? false,
96
+ copySelection: source => this.terminalCore?.copySelection(source) ?? Promise.resolve({
97
+ copied: false,
98
+ reason: 'empty_selection',
99
+ source: source ?? 'command'
100
+ }),
101
+ setConnected: connected => this.terminalCore?.setConnected(connected),
102
+ forceResize: () => this.terminalCore?.forceResize(),
103
+ setSearchResultsCallback: callback => this.terminalCore?.setSearchResultsCallback(callback),
104
+ focus: () => this.terminalCore?.focus(),
105
+ getTerminalInfo: () => this.terminalCore?.getTerminalInfo() ?? null,
106
+ sendInput: data => this.handleUserInput(data),
107
+ setAppearance: appearance => this.applyCoreAppearance(appearance),
108
+ setTheme: theme => this.applyCoreAppearance({ themeName: theme }),
109
+ setFontSize: size => this.applyCoreAppearance({ fontSize: size }),
110
+ setPresentationScale: scale => this.applyCoreAppearance({ presentationScale: scale }),
111
+ reinitialize: () => this.reinitialize(),
112
+ };
113
+ this.handleStateChange = (newState) => {
114
+ this.updateState({ state: newState });
115
+ };
116
+ this.handleResize = async (size) => {
117
+ this.dimensions = size;
118
+ this.updateState({ dimensions: size });
119
+ this.options.onResize?.(size.cols, size.rows);
120
+ const sessionId = this.options.sessionId;
121
+ if (!sessionId) {
122
+ return;
123
+ }
124
+ try {
125
+ await this.options.transport.resize(sessionId, size.cols, size.rows);
126
+ }
127
+ catch (error) {
128
+ this.logger.warn('[TerminalInstanceController] Resize request failed', { error });
129
+ }
130
+ };
131
+ this.handleError = (error) => {
132
+ this.updateState({ error, state: TerminalState.ERROR });
133
+ this.options.onError?.(error);
134
+ };
135
+ this.options = { ...options };
136
+ this.logger = options.logger ?? createConsoleLogger();
137
+ this.scheduler = options.scheduler ?? createDefaultScheduler();
138
+ this.subscribeToTerminalData();
139
+ }
140
+ get connection() {
141
+ return computeConnectionState(this.createConnectionState());
142
+ }
143
+ async mount(container) {
144
+ if (this.disposed) {
145
+ throw new Error('Cannot mount a disposed TerminalInstanceController');
146
+ }
147
+ this.container = container;
148
+ this.scheduleInitialize();
149
+ }
150
+ unmount() {
151
+ this.clearInitializeTimeout();
152
+ this.cleanupTerminal();
153
+ this.container = null;
154
+ }
155
+ dispose() {
156
+ if (this.disposed) {
157
+ return;
158
+ }
159
+ this.disposed = true;
160
+ this.clearInitializeTimeout();
161
+ this.clearRetryTimeout();
162
+ this.clearQueueRetryTimeout();
163
+ this.cancelDataQueueFlush();
164
+ this.terminalDataUnsubscribe?.();
165
+ this.terminalDataUnsubscribe = null;
166
+ this.cleanupTerminal();
167
+ this.updateState({ state: TerminalState.DISPOSED });
168
+ this.listeners.clear();
169
+ }
170
+ updateOptions(options) {
171
+ if (this.disposed) {
172
+ return;
173
+ }
174
+ const previousSessionId = this.options.sessionId;
175
+ const previousIsActive = this.options.isActive;
176
+ const previousTheme = this.options.themeName;
177
+ const previousFontSize = this.options.fontSize;
178
+ const previousFontFamily = this.options.config?.fontFamily;
179
+ const previousPresentationScale = this.options.presentationScale;
180
+ this.options = {
181
+ ...this.options,
182
+ ...options,
183
+ config: options.config !== undefined ? options.config : this.options.config,
184
+ };
185
+ if (options.sessionId !== undefined && options.sessionId !== previousSessionId) {
186
+ this.resetSessionState();
187
+ this.subscribeToTerminalData();
188
+ if (this.terminalCore) {
189
+ void this.reinitialize();
190
+ }
191
+ return;
192
+ }
193
+ if (options.isActive !== undefined && options.isActive !== previousIsActive) {
194
+ if (this.options.isActive) {
195
+ this.scheduleInitialize();
196
+ if (this.terminalCore && this.options.sessionId) {
197
+ void this.connectToSession();
198
+ }
199
+ }
200
+ else {
201
+ this.terminalCore?.setConnected(false);
202
+ }
203
+ }
204
+ const nextFontFamily = this.options.config?.fontFamily;
205
+ if (previousTheme !== this.options.themeName
206
+ || previousFontSize !== this.options.fontSize
207
+ || previousFontFamily !== nextFontFamily
208
+ || previousPresentationScale !== this.options.presentationScale) {
209
+ this.applyCoreAppearance({
210
+ themeName: this.options.themeName,
211
+ ...(typeof this.options.fontSize === 'number' ? { fontSize: this.options.fontSize } : {}),
212
+ ...(typeof nextFontFamily === 'string' ? { fontFamily: nextFontFamily } : {}),
213
+ presentationScale: this.options.presentationScale ?? 1
214
+ });
215
+ }
216
+ }
217
+ getSnapshot() {
218
+ return {
219
+ state: computeTerminalState(this.state),
220
+ connection: computeConnectionState(this.createConnectionState()),
221
+ loadingState: this.loadingState,
222
+ loadingMessage: this.loadingMessage,
223
+ };
224
+ }
225
+ subscribe(listener) {
226
+ this.listeners.add(listener);
227
+ listener(this.getSnapshot());
228
+ return () => {
229
+ this.listeners.delete(listener);
230
+ };
231
+ }
232
+ getCore() {
233
+ return this.terminalCore;
234
+ }
235
+ emit() {
236
+ if (this.disposed) {
237
+ return;
238
+ }
239
+ const snapshot = this.getSnapshot();
240
+ for (const listener of this.listeners) {
241
+ listener(snapshot);
242
+ }
243
+ }
244
+ updateState(updates) {
245
+ this.state = { ...this.state, ...updates };
246
+ this.emit();
247
+ }
248
+ setLoading(state, message) {
249
+ this.loadingState = state;
250
+ this.loadingMessage = message;
251
+ this.emit();
252
+ }
253
+ setConnectionState(state) {
254
+ this.connectionState = state;
255
+ this.terminalCore?.setConnected(state === ConnectionState.CONNECTED);
256
+ this.emit();
257
+ }
258
+ setConnectionError(error) {
259
+ this.connectionError = error;
260
+ this.emit();
261
+ }
262
+ createConnectionState() {
263
+ return {
264
+ state: this.connectionState,
265
+ error: this.connectionError,
266
+ retryCount: this.retryCount,
267
+ connect: () => void this.connectToSession(),
268
+ disconnect: () => {
269
+ this.clearRetryTimeout();
270
+ this.setConnectionState(ConnectionState.ABORTED);
271
+ },
272
+ retry: () => {
273
+ this.clearRetryTimeout();
274
+ this.retryCount = 0;
275
+ this.setConnectionError(null);
276
+ this.setConnectionState(ConnectionState.IDLE);
277
+ void this.connectToSession();
278
+ },
279
+ clearError: () => this.setConnectionError(null),
280
+ };
281
+ }
282
+ resetSessionState() {
283
+ this.queueGeneration += 1;
284
+ this.sequenceBuffer.reset(1);
285
+ this.replayCompleteReceived = false;
286
+ this.isReplayActive = false;
287
+ this.lastAppliedSequence = 0;
288
+ this.dataQueue = [];
289
+ this.isProcessing = false;
290
+ this.cancelDataQueueFlush();
291
+ this.clearQueueRetryTimeout();
292
+ this.setConnectionState(ConnectionState.IDLE);
293
+ this.setConnectionError(null);
294
+ this.retryCount = 0;
295
+ this.clearRetryTimeout();
296
+ }
297
+ handleUserInput(data) {
298
+ const sessionId = this.options.sessionId;
299
+ if (!sessionId) {
300
+ return;
301
+ }
302
+ this.options.transport.sendInput(sessionId, data).catch(error => {
303
+ this.logger.warn('[TerminalInstanceController] sendInput failed', { error });
304
+ });
305
+ }
306
+ scheduleFocus() {
307
+ if (!this.options.autoFocus) {
308
+ return;
309
+ }
310
+ this.scheduler.requestFrame(() => {
311
+ this.scheduler.requestFrame(() => {
312
+ this.terminalCore?.focus();
313
+ });
314
+ });
315
+ }
316
+ cleanupTerminal() {
317
+ if (this.terminalCore) {
318
+ this.terminalCore.dispose();
319
+ this.terminalCore = null;
320
+ }
321
+ this.dataQueue = [];
322
+ this.isProcessing = false;
323
+ }
324
+ finishReplayIfIdle() {
325
+ if (!this.replayCompleteReceived || this.dataQueue.length > 0 || this.isProcessing) {
326
+ return;
327
+ }
328
+ if (this.isReplayActive) {
329
+ this.terminalCore?.endHistoryReplay?.();
330
+ this.isReplayActive = false;
331
+ }
332
+ this.setLoading('ready', '');
333
+ this.scheduleFocus();
334
+ }
335
+ scheduleDataQueueFlush() {
336
+ if (this.flushRaf !== null) {
337
+ return;
338
+ }
339
+ const generation = this.queueGeneration;
340
+ this.flushRaf = this.scheduler.requestFrame(() => {
341
+ this.flushRaf = null;
342
+ if (this.queueGeneration !== generation) {
343
+ return;
344
+ }
345
+ void this.processDataQueue();
346
+ });
347
+ }
348
+ cancelDataQueueFlush() {
349
+ if (this.flushRaf === null) {
350
+ return;
351
+ }
352
+ this.scheduler.cancelFrame(this.flushRaf);
353
+ this.flushRaf = null;
354
+ }
355
+ async processDataQueue() {
356
+ const generation = this.queueGeneration;
357
+ if (this.isProcessing || !this.terminalCore || this.dataQueue.length === 0) {
358
+ return;
359
+ }
360
+ const terminalState = this.terminalCore.getState();
361
+ if (terminalState !== TerminalState.READY && terminalState !== TerminalState.CONNECTED) {
362
+ this.clearQueueRetryTimeout();
363
+ this.queueRetryTimeout = this.scheduler.setTimer(() => {
364
+ this.queueRetryTimeout = null;
365
+ if (this.queueGeneration !== generation) {
366
+ return;
367
+ }
368
+ void this.processDataQueue();
369
+ }, 100);
370
+ return;
371
+ }
372
+ this.isProcessing = true;
373
+ try {
374
+ let batchLength = 0;
375
+ let batchBytes = 0;
376
+ for (const chunk of this.dataQueue) {
377
+ if (batchLength >= MAX_WRITE_BATCH_CHUNKS) {
378
+ break;
379
+ }
380
+ if (batchLength > 0 && batchBytes + chunk.data.byteLength > MAX_WRITE_BATCH_BYTES) {
381
+ break;
382
+ }
383
+ batchLength += 1;
384
+ batchBytes += chunk.data.byteLength;
385
+ }
386
+ const batch = this.dataQueue.splice(0, Math.max(1, batchLength));
387
+ if (this.queueGeneration !== generation) {
388
+ return;
389
+ }
390
+ const payload = batch.length === 1 ? batch[0].data : concatChunks(batch.map(chunk => chunk.data));
391
+ this.terminalCore.write(payload);
392
+ for (const chunk of batch) {
393
+ if (this.queueGeneration !== generation) {
394
+ return;
395
+ }
396
+ if (chunk.sequence > this.lastAppliedSequence) {
397
+ this.lastAppliedSequence = chunk.sequence;
398
+ }
399
+ }
400
+ }
401
+ finally {
402
+ this.isProcessing = false;
403
+ if (this.dataQueue.length > 0) {
404
+ this.scheduleDataQueueFlush();
405
+ }
406
+ else {
407
+ this.finishReplayIfIdle();
408
+ }
409
+ }
410
+ }
411
+ addChunkToQueue(chunk) {
412
+ if (chunk.sequence > 0 && chunk.sequence <= this.lastAppliedSequence) {
413
+ return;
414
+ }
415
+ const ready = this.sequenceBuffer.push(chunk);
416
+ if (ready.length === 0) {
417
+ return;
418
+ }
419
+ this.dataQueue.push(...ready);
420
+ if (!this.isProcessing) {
421
+ this.scheduleDataQueueFlush();
422
+ }
423
+ }
424
+ applyCoreAppearance(appearance) {
425
+ const core = this.terminalCore;
426
+ if (!core) {
427
+ return;
428
+ }
429
+ const theme = appearance.themeName ? getThemeColors(appearance.themeName) : undefined;
430
+ if (core.setAppearance) {
431
+ core.setAppearance({
432
+ ...(theme ? { theme } : {}),
433
+ ...(typeof appearance.fontSize === 'number' ? { fontSize: appearance.fontSize } : {}),
434
+ ...(typeof appearance.fontFamily === 'string' ? { fontFamily: appearance.fontFamily } : {}),
435
+ ...(typeof appearance.presentationScale === 'number' ? { presentationScale: appearance.presentationScale } : {})
436
+ });
437
+ return;
438
+ }
439
+ if (theme) {
440
+ core.setTheme(theme);
441
+ }
442
+ if (typeof appearance.fontSize === 'number') {
443
+ core.setFontSize(appearance.fontSize);
444
+ }
445
+ if (typeof appearance.fontFamily === 'string') {
446
+ core.setFontFamily?.(appearance.fontFamily);
447
+ }
448
+ if (typeof appearance.presentationScale === 'number') {
449
+ core.setPresentationScale(appearance.presentationScale);
450
+ }
451
+ }
452
+ scheduleInitialize() {
453
+ if (!this.options.isActive || !this.container || this.terminalCore || this.isInitializing || this.initializeTimeout) {
454
+ return;
455
+ }
456
+ this.initializeTimeout = this.scheduler.setTimer(() => {
457
+ this.initializeTimeout = null;
458
+ void this.initializeTerminal();
459
+ }, 100);
460
+ }
461
+ clearInitializeTimeout() {
462
+ if (!this.initializeTimeout) {
463
+ return;
464
+ }
465
+ this.scheduler.clearTimer(this.initializeTimeout);
466
+ this.initializeTimeout = null;
467
+ }
468
+ async initializeTerminal() {
469
+ if (!this.container || this.isInitializing || this.terminalCore || this.disposed) {
470
+ return;
471
+ }
472
+ this.isInitializing = true;
473
+ this.setLoading('initializing_terminal', 'Initializing terminal...');
474
+ try {
475
+ const configOverrides = {
476
+ ...(this.options.config ?? {}),
477
+ ...(this.options.fontSize ? { fontSize: this.options.fontSize } : {}),
478
+ ...(this.options.presentationScale ? { presentationScale: this.options.presentationScale } : {}),
479
+ };
480
+ const config = getDefaultTerminalConfig(this.options.themeName ?? 'dark', configOverrides);
481
+ const CoreCtor = this.options.coreConstructor ?? TerminalCore;
482
+ this.terminalCore = new CoreCtor(this.container, config, {
483
+ onData: data => this.handleUserInput(data),
484
+ onResize: size => void this.handleResize(size),
485
+ onStateChange: this.handleStateChange,
486
+ onError: this.handleError
487
+ }, this.logger ?? noopLogger);
488
+ await this.terminalCore.initialize();
489
+ if (this.isReplayActive) {
490
+ this.terminalCore.startHistoryReplay(30000);
491
+ }
492
+ const sessionId = this.options.sessionId;
493
+ if (sessionId) {
494
+ const dimensions = this.terminalCore.getDimensions();
495
+ await this.options.transport.resize(sessionId, dimensions.cols, dimensions.rows);
496
+ }
497
+ void this.processDataQueue();
498
+ if (!this.isReplayActive || this.replayCompleteReceived) {
499
+ this.setLoading('ready', '');
500
+ }
501
+ else {
502
+ this.setLoading('processing_history', 'Restoring terminal...');
503
+ }
504
+ if (this.options.isActive && sessionId) {
505
+ await this.connectToSession();
506
+ }
507
+ }
508
+ catch (error) {
509
+ this.handleError(error instanceof Error ? error : new Error(String(error)));
510
+ this.setLoading('ready', '');
511
+ }
512
+ finally {
513
+ this.isInitializing = false;
514
+ }
515
+ }
516
+ async connectToSession() {
517
+ const sessionId = this.options.sessionId;
518
+ if (!sessionId || this.disposed) {
519
+ return;
520
+ }
521
+ this.clearRetryTimeout();
522
+ this.setConnectionState(ConnectionState.CONNECTING);
523
+ this.setConnectionError(null);
524
+ this.setLoading('attaching', 'Attaching to session...');
525
+ try {
526
+ const dims = this.terminalCore?.getDimensions() ?? this.dimensions;
527
+ await this.options.transport.attach(sessionId, dims.cols, dims.rows);
528
+ this.setConnectionState(ConnectionState.CONNECTED);
529
+ this.retryCount = 0;
530
+ this.emit();
531
+ if (!this.isReplayActive || this.replayCompleteReceived) {
532
+ this.setLoading('ready', '');
533
+ }
534
+ else {
535
+ this.setLoading('processing_history', 'Restoring terminal...');
536
+ }
537
+ }
538
+ catch (error) {
539
+ const terminalError = createTerminalError('transport', error);
540
+ this.setConnectionState(ConnectionState.FAILED);
541
+ this.setConnectionError(terminalError);
542
+ this.setLoading('ready', '');
543
+ this.scheduleConnectionRetry();
544
+ }
545
+ }
546
+ scheduleConnectionRetry() {
547
+ if (this.connectionState !== ConnectionState.FAILED || this.disposed) {
548
+ return;
549
+ }
550
+ const delay = Math.min(5000, 1000 * Math.pow(2, this.retryCount));
551
+ this.clearRetryTimeout();
552
+ this.retryTimeout = this.scheduler.setTimer(() => {
553
+ this.retryTimeout = null;
554
+ this.retryCount += 1;
555
+ this.setConnectionState(ConnectionState.RETRYING);
556
+ void this.connectToSession();
557
+ }, delay);
558
+ }
559
+ clearRetryTimeout() {
560
+ if (!this.retryTimeout) {
561
+ return;
562
+ }
563
+ this.scheduler.clearTimer(this.retryTimeout);
564
+ this.retryTimeout = null;
565
+ }
566
+ clearQueueRetryTimeout() {
567
+ if (!this.queueRetryTimeout) {
568
+ return;
569
+ }
570
+ this.scheduler.clearTimer(this.queueRetryTimeout);
571
+ this.queueRetryTimeout = null;
572
+ }
573
+ subscribeToTerminalData() {
574
+ this.terminalDataUnsubscribe?.();
575
+ this.terminalDataUnsubscribe = null;
576
+ const sessionId = this.options.sessionId;
577
+ if (!sessionId) {
578
+ return;
579
+ }
580
+ this.isReplayActive = true;
581
+ this.replayCompleteReceived = false;
582
+ this.terminalCore?.startHistoryReplay(30000);
583
+ this.setLoading('processing_history', 'Restoring terminal...');
584
+ const lastSeq = this.terminalCore ? this.lastAppliedSequence : 0;
585
+ const unsubscribe = this.options.eventSource.onTerminalData(sessionId, (payload) => {
586
+ if (payload.type === 'replay-complete') {
587
+ this.replayCompleteReceived = true;
588
+ const ready = this.sequenceBuffer.flushPending();
589
+ if (ready.length > 0) {
590
+ this.dataQueue.push(...ready);
591
+ this.scheduleDataQueueFlush();
592
+ }
593
+ else if (typeof payload.sequence === 'number'
594
+ && payload.sequence > this.lastAppliedSequence
595
+ && this.dataQueue.length === 0
596
+ && !this.isProcessing) {
597
+ this.lastAppliedSequence = payload.sequence;
598
+ this.sequenceBuffer.reset(payload.sequence + 1);
599
+ }
600
+ this.finishReplayIfIdle();
601
+ return;
602
+ }
603
+ const chunk = {
604
+ data: payload.data,
605
+ sequence: payload.sequence ?? 0,
606
+ timestampMs: payload.timestampMs ?? Date.now()
607
+ };
608
+ this.addChunkToQueue(chunk);
609
+ }, { lastSeq });
610
+ this.terminalDataUnsubscribe = unsubscribe;
611
+ }
612
+ async reinitialize() {
613
+ this.terminalDataUnsubscribe?.();
614
+ this.terminalDataUnsubscribe = null;
615
+ this.queueGeneration += 1;
616
+ this.sequenceBuffer.reset(1);
617
+ this.replayCompleteReceived = false;
618
+ this.isReplayActive = true;
619
+ this.lastAppliedSequence = 0;
620
+ this.dataQueue = [];
621
+ this.isProcessing = false;
622
+ this.cancelDataQueueFlush();
623
+ this.clearQueueRetryTimeout();
624
+ this.setLoading('processing_history', 'Restoring terminal...');
625
+ this.cleanupTerminal();
626
+ this.subscribeToTerminalData();
627
+ await this.initializeTerminal();
628
+ }
629
+ }
630
+ export const createTerminalInstance = (options) => {
631
+ return new FrameworkNeutralTerminalInstanceController(options);
632
+ };
633
+ //# sourceMappingURL=TerminalInstanceController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TerminalInstanceController.js","sourceRoot":"","sources":["../../src/manager/TerminalInstanceController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,oBAAoB,GAmBrB,MAAM,UAAU,CAAC;AAElB,IAAK,eAQJ;AARD,WAAK,eAAe;IAClB,gCAAa,CAAA;IACb,4CAAyB,CAAA;IACzB,0CAAuB,CAAA;IACvB,gDAA6B,CAAA;IAC7B,wCAAqB,CAAA;IACrB,oCAAiB,CAAA;IACjB,sCAAmB,CAAA;AACrB,CAAC,EARI,eAAe,KAAf,eAAe,QAQnB;AAED,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAClC,MAAM,qBAAqB,GAAG,GAAG,GAAG,IAAI,CAAC;AAEzC,MAAM,sBAAsB,GAAG,GAA8B,EAAE,CAAC,CAAC;IAC/D,YAAY,EAAE,QAAQ,CAAC,EAAE;QACvB,IAAI,OAAO,qBAAqB,KAAK,UAAU,EAAE,CAAC;YAChD,OAAO,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAsB,CAAC;IACxE,CAAC;IACD,WAAW,EAAE,EAAE,CAAC,EAAE;QAChB,IAAI,OAAO,oBAAoB,KAAK,UAAU,EAAE,CAAC;YAC/C,oBAAoB,CAAC,EAAE,CAAC,CAAC;YACzB,OAAO;QACT,CAAC;QACD,YAAY,CAAC,EAA8C,CAAC,CAAC;IAC/D,CAAC;IACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC9D,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;CACnC,CAAC,CAAC;AAEH,MAAM,OAAO,0CAA0C;IAoFrD,YAAY,OAAgC;QAhF3B,cAAS,GAAG,IAAI,GAAG,EAA4B,CAAC;QAEzD,cAAS,GAAuB,IAAI,CAAC;QACrC,iBAAY,GAA4B,IAAI,CAAC;QAC7C,mBAAc,GAAG,KAAK,CAAC;QACvB,4BAAuB,GAAwB,IAAI,CAAC;QACpD,mBAAc,GAAG,IAAI,cAAc,EAAE,CAAC;QACtC,2BAAsB,GAAG,KAAK,CAAC;QAC/B,mBAAc,GAAG,KAAK,CAAC;QACvB,wBAAmB,GAAG,CAAC,CAAC;QAExB,iBAAY,GAAyB,MAAM,CAAC;QAC5C,mBAAc,GAAG,EAAE,CAAC;QACpB,oBAAe,GAAoB,eAAe,CAAC,IAAI,CAAC;QACxD,oBAAe,GAAyB,IAAI,CAAC;QAC7C,eAAU,GAAG,CAAC,CAAC;QACf,iBAAY,GAAyC,IAAI,CAAC;QAC1D,sBAAiB,GAAyC,IAAI,CAAC;QAC/D,sBAAiB,GAAyC,IAAI,CAAC;QAE/D,UAAK,GAAyB;YACpC,KAAK,EAAE,aAAa,CAAC,IAAI;YACzB,KAAK,EAAE,SAAS;YAChB,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;SACnC,CAAC;QACM,eAAU,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QAEpC,cAAS,GAAwB,EAAE,CAAC;QACpC,iBAAY,GAAG,KAAK,CAAC;QACrB,oBAAe,GAAG,CAAC,CAAC;QACpB,aAAQ,GAAkB,IAAI,CAAC;QAC/B,aAAQ,GAAG,KAAK,CAAC;QAEhB,YAAO,GAA2B;YACzC,KAAK,EAAE,IAAI,CAAC,EAAE;gBACZ,MAAM,KAAK,GAAsB;oBAC/B,IAAI,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;oBACpC,QAAQ,EAAE,CAAC;oBACX,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;iBACxB,CAAC;gBACF,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC;YACD,KAAK,EAAE,GAAG,EAAE;gBACV,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC;gBAC3B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;gBACpB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;gBACzC,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC;qBACpC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mDAAmD,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;qBAChG,OAAO,CAAC,GAAG,EAAE;oBACZ,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC;yBAC9C,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kDAAkD,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;gBACrG,CAAC,CAAC,CAAC;YACP,CAAC;YACD,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,KAAK;YAChF,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,KAAK;YACxF,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE;YACnD,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE;YACrD,gBAAgB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,gBAAgB,EAAE,IAAI,EAAE;YACnE,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,EAAE,IAAI,KAAK;YAC9D,aAAa,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC;gBACnF,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,iBAAiB;gBACzB,MAAM,EAAE,MAAM,IAAI,SAAS;aAC5B,CAAC;YACF,YAAY,EAAE,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,SAAS,CAAC;YACrE,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE;YACnD,wBAAwB,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,wBAAwB,CAAC,QAAQ,CAAC;YAC3F,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE;YACvC,eAAe,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,eAAe,EAAE,IAAI,IAAI;YACnE,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YAC7C,aAAa,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;YACjE,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YACjE,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YACjE,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC;YACrF,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE;SACxC,CAAC;QA2LM,sBAAiB,GAAG,CAAC,QAAuB,EAAQ,EAAE;YAC5D,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACxC,CAAC,CAAC;QAEM,iBAAY,GAAG,KAAK,EAAE,IAAoC,EAAiB,EAAE;YACnF,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,IAAI,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;YACvC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAE9C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;YACzC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO;YACT,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACvE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oDAAoD,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACpF,CAAC;QACH,CAAC,CAAC;QAEM,gBAAW,GAAG,CAAC,KAAY,EAAQ,EAAE;YAC3C,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC;YACxD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC,CAAC;QAhNA,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,mBAAmB,EAAE,CAAC;QACtD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,sBAAsB,EAAE,CAAC;QAC/D,IAAI,CAAC,uBAAuB,EAAE,CAAC;IACjC,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,sBAAsB,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,SAAsB;QAChC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,OAAO;QACL,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IACxB,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC;QACjC,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;QACpC,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAED,aAAa,CAAC,OAAuC;QACnD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;QACjD,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QAC/C,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;QAC7C,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QAC/C,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC;QAC3D,MAAM,yBAAyB,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC;QAEjE,IAAI,CAAC,OAAO,GAAG;YACb,GAAG,IAAI,CAAC,OAAO;YACf,GAAG,OAAO;YACV,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM;SAC5E,CAAC;QAEF,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,CAAC,SAAS,KAAK,iBAAiB,EAAE,CAAC;YAC/E,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;YAC3B,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,KAAK,gBAAgB,EAAE,CAAC;YAC5E,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAC1B,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC1B,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;oBAChD,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC/B,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC;QACvD,IACE,aAAa,KAAK,IAAI,CAAC,OAAO,CAAC,SAAS;eACrC,gBAAgB,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ;eAC1C,kBAAkB,KAAK,cAAc;eACrC,yBAAyB,KAAK,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAC/D,CAAC;YACD,IAAI,CAAC,mBAAmB,CAAC;gBACvB,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;gBACjC,GAAG,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzF,GAAG,CAAC,OAAO,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7E,iBAAiB,EAAE,IAAI,CAAC,OAAO,CAAC,iBAAiB,IAAI,CAAC;aACvD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,WAAW;QACT,OAAO;YACL,KAAK,EAAE,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC;YACvC,UAAU,EAAE,sBAAsB,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAChE,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,cAAc,EAAE,IAAI,CAAC,cAAc;SACpC,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,QAAkC;QAC1C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAEO,IAAI;QACV,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACpC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,OAAsC;QACxD,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC;QAC3C,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAEO,UAAU,CAAC,KAA2B,EAAE,OAAe;QAC7D,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;QAC9B,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAEO,kBAAkB,CAAC,KAAsB;QAC/C,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,KAAK,KAAK,eAAe,CAAC,SAAS,CAAC,CAAC;QACrE,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAEO,kBAAkB,CAAC,KAA2B;QACpD,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAEO,qBAAqB;QAC3B,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,eAAe;YAC3B,KAAK,EAAE,IAAI,CAAC,eAAe;YAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,gBAAgB,EAAE;YAC3C,UAAU,EAAE,GAAG,EAAE;gBACf,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACzB,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YACnD,CAAC;YACD,KAAK,EAAE,GAAG,EAAE;gBACV,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACzB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;gBACpB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;gBAC9B,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;gBAC9C,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC/B,CAAC;YACD,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;SAChD,CAAC;IACJ,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;QACpC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IA4BO,eAAe,CAAC,IAAY;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;QACzC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YAC9D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+CAA+C,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/E,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,aAAa;QACnB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE;YAC/B,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE;gBAC/B,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,eAAe;QACrB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;IAEO,kBAAkB;QACxB,IAAI,CAAC,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACnF,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,YAAY,EAAE,gBAAgB,EAAE,EAAE,CAAC;YACxC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC9B,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAEO,sBAAsB;QAC5B,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC;QACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE;YAC/C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,IAAI,CAAC,eAAe,KAAK,UAAU,EAAE,CAAC;gBACxC,OAAO;YACT,CAAC;YACD,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,oBAAoB;QAC1B,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC;QACxC,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3E,OAAO;QACT,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;QACnD,IAAI,aAAa,KAAK,aAAa,CAAC,KAAK,IAAI,aAAa,KAAK,aAAa,CAAC,SAAS,EAAE,CAAC;YACvF,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC9B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE;gBACpD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;gBAC9B,IAAI,IAAI,CAAC,eAAe,KAAK,UAAU,EAAE,CAAC;oBACxC,OAAO;gBACT,CAAC;gBACD,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC/B,CAAC,EAAE,GAAG,CAAC,CAAC;YACR,OAAO;QACT,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzB,IAAI,CAAC;YACH,IAAI,WAAW,GAAG,CAAC,CAAC;YACpB,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnC,IAAI,WAAW,IAAI,sBAAsB,EAAE,CAAC;oBAC1C,MAAM;gBACR,CAAC;gBACD,IAAI,WAAW,GAAG,CAAC,IAAI,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,qBAAqB,EAAE,CAAC;oBAClF,MAAM;gBACR,CAAC;gBACD,WAAW,IAAI,CAAC,CAAC;gBACjB,UAAU,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;YACtC,CAAC;YAED,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;YACjE,IAAI,IAAI,CAAC,eAAe,KAAK,UAAU,EAAE,CAAC;gBACxC,OAAO;YACT,CAAC;YACD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACnG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACjC,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;gBAC1B,IAAI,IAAI,CAAC,eAAe,KAAK,UAAU,EAAE,CAAC;oBACxC,OAAO;gBACT,CAAC;gBACD,IAAI,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;oBAC9C,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,QAAQ,CAAC;gBAC5C,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,KAAwB;QAC9C,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACrE,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAChC,CAAC;IACH,CAAC;IAEO,mBAAmB,CAAC,UAAqC;QAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC;QAC/B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACtF,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC,aAAa,CAAC;gBACjB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3B,GAAG,CAAC,OAAO,UAAU,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrF,GAAG,CAAC,OAAO,UAAU,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3F,GAAG,CAAC,OAAO,UAAU,CAAC,iBAAiB,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACjH,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QACD,IAAI,OAAO,UAAU,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC5C,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,OAAO,UAAU,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YAC9C,IAAI,CAAC,aAAa,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,OAAO,UAAU,CAAC,iBAAiB,KAAK,QAAQ,EAAE,CAAC;YACrD,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAEO,kBAAkB;QACxB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACpH,OAAO;QACT,CAAC;QAED,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE;YACpD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAC9B,KAAK,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACjC,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC;IAEO,sBAAsB;QAC5B,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAClD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAChC,CAAC;IAEO,KAAK,CAAC,kBAAkB;QAC9B,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjF,OAAO;QACT,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,UAAU,CAAC,uBAAuB,EAAE,0BAA0B,CAAC,CAAC;QAErE,IAAI,CAAC;YACH,MAAM,eAAe,GAAG;gBACtB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;gBAC9B,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACjG,CAAC;YACF,MAAM,MAAM,GAAG,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,MAAM,EAAE,eAAe,CAAC,CAAC;YAE3F,MAAM,QAAQ,GAA4B,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,YAAY,CAAC;YACvF,IAAI,CAAC,YAAY,GAAG,IAAI,QAAQ,CAC9B,IAAI,CAAC,SAAS,EACd,MAAM,EACN;gBACE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;gBAC1C,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;gBAC9C,aAAa,EAAE,IAAI,CAAC,iBAAiB;gBACrC,OAAO,EAAE,IAAI,CAAC,WAAW;aAC1B,EACD,IAAI,CAAC,MAAM,IAAI,UAAU,CAC1B,CAAC;YAEF,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC9C,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;YACzC,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC;gBACrD,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;YACnF,CAAC;YAED,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAE7B,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBACxD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,CAAC;YACjE,CAAC;YAED,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACvC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAChC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,WAAW,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5E,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC/B,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC9B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;QACzC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChC,OAAO;QACT,CAAC;QAED,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QACpD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,yBAAyB,CAAC,CAAC;QAExD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,aAAa,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC;YACnE,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACrE,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YACnD,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;YACpB,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBACxD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,aAAa,GAAG,mBAAmB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YAC9D,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YAChD,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YACvC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC7B,IAAI,CAAC,uBAAuB,EAAE,CAAC;QACjC,CAAC;IACH,CAAC;IAEO,uBAAuB;QAC7B,IAAI,IAAI,CAAC,eAAe,KAAK,eAAe,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACrE,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE;YAC/C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;YACrB,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YAClD,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC/B,CAAC,EAAE,KAAK,CAAC,CAAC;IACZ,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAEO,sBAAsB;QAC5B,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAClD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAChC,CAAC;IAEO,uBAAuB;QAC7B,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC;QACjC,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;QAEpC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;QACzC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;QACpC,IAAI,CAAC,YAAY,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,CAAC;QAE/D,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,OAA0B,EAAE,EAAE;YACpG,IAAI,OAAO,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;gBACvC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;gBACnC,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;gBACjD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACrB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;oBAC9B,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBAChC,CAAC;qBAAM,IACL,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ;uBACjC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,mBAAmB;uBAC3C,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;uBAC3B,CAAC,IAAI,CAAC,YAAY,EACrB,CAAC;oBACD,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC;oBAC5C,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;gBAClD,CAAC;gBACD,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC1B,OAAO;YACT,CAAC;YAED,MAAM,KAAK,GAAsB;gBAC/B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,CAAC;gBAC/B,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,EAAE;aAC/C,CAAC;YACF,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAEhB,IAAI,CAAC,uBAAuB,GAAG,WAAW,CAAC;IAC7C,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC;QACjC,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;QACpC,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;QACpC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,CAAC;QAC/D,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC7B,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;IACpC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,OAAgC,EAA8B,EAAE;IACrG,OAAO,IAAI,0CAA0C,CAAC,OAAO,CAAC,CAAC;AACjE,CAAC,CAAC"}