plevinjs 0.1.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.
package/dist/zstd.js ADDED
@@ -0,0 +1,574 @@
1
+ /**
2
+ * Zstandard decompression with dictionaries, condensed from fzstd (MIT, 101arrowz).
3
+ */
4
+ const FRAME_MAGIC = 0x2fb528;
5
+ const DICTIONARY_MAGIC = 0xec30a437;
6
+ const bitsToBase = (bits, first) => {
7
+ const base = new Int32Array(bits.length);
8
+ let next = first;
9
+ for (let code = 0; code < bits.length; code += 1) {
10
+ base[code] = next;
11
+ next += 1 << bits[code];
12
+ }
13
+ return base;
14
+ };
15
+ const LITERAL_BITS = new Uint8Array([
16
+ ...Array(16).fill(0),
17
+ 1,
18
+ 1,
19
+ 1,
20
+ 1,
21
+ 2,
22
+ 2,
23
+ 3,
24
+ 3,
25
+ 4,
26
+ 6,
27
+ 7,
28
+ 8,
29
+ 9,
30
+ 10,
31
+ 11,
32
+ 12,
33
+ 13,
34
+ 14,
35
+ 15,
36
+ 16,
37
+ ]);
38
+ const MATCH_BITS = new Uint8Array([
39
+ ...Array(32).fill(0),
40
+ 1,
41
+ 1,
42
+ 1,
43
+ 1,
44
+ 2,
45
+ 2,
46
+ 3,
47
+ 3,
48
+ 4,
49
+ 4,
50
+ 5,
51
+ 7,
52
+ 8,
53
+ 9,
54
+ 10,
55
+ 11,
56
+ 12,
57
+ 13,
58
+ 14,
59
+ 15,
60
+ 16,
61
+ ]);
62
+ const LITERAL_BASE = bitsToBase(LITERAL_BITS, 0);
63
+ const MATCH_BASE = bitsToBase(MATCH_BITS, 3);
64
+ const LITERAL_DEFAULT = [
65
+ 4, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 1, 1,
66
+ 1, 1, 1, -1, -1, -1, -1,
67
+ ];
68
+ const MATCH_DEFAULT = [
69
+ 1,
70
+ 4,
71
+ 3,
72
+ 2,
73
+ 2,
74
+ 2,
75
+ 2,
76
+ 2,
77
+ 2,
78
+ ...Array(37).fill(1),
79
+ ...Array(7).fill(-1),
80
+ ];
81
+ const OFFSET_DEFAULT = [
82
+ 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1,
83
+ -1,
84
+ ];
85
+ const fail = (reason) => {
86
+ throw new Error(`zstd: ${reason}`);
87
+ };
88
+ const highestBit = (value) => {
89
+ let bits = 0;
90
+ while (1 << bits <= value)
91
+ bits += 1;
92
+ return bits - 1;
93
+ };
94
+ const spread = (counts, symbols, log) => {
95
+ const size = 1 << log;
96
+ const table = {
97
+ log,
98
+ symbols: new Uint8Array(size),
99
+ bits: new Uint8Array(size),
100
+ next: new Uint16Array(size),
101
+ };
102
+ const states = new Uint16Array(256);
103
+ let high = size;
104
+ for (let symbol = 0; symbol < symbols; symbol += 1) {
105
+ if (counts[symbol] < 0) {
106
+ states[symbol] = 1;
107
+ high -= 1;
108
+ table.symbols[high] = symbol;
109
+ }
110
+ else {
111
+ states[symbol] = counts[symbol];
112
+ }
113
+ }
114
+ const step = (size >> 1) + (size >> 3) + 3;
115
+ let at = 0;
116
+ for (let symbol = 0; symbol < symbols; symbol += 1) {
117
+ for (let held = 0; held < counts[symbol]; held += 1) {
118
+ table.symbols[at] = symbol;
119
+ do
120
+ at = (at + step) & (size - 1);
121
+ while (at >= high);
122
+ }
123
+ }
124
+ if (at !== 0)
125
+ fail("the symbols do not spread over the table");
126
+ for (let cell = 0; cell < size; cell += 1) {
127
+ const state = states[table.symbols[cell]]++;
128
+ const bits = log - highestBit(state);
129
+ table.bits[cell] = bits;
130
+ table.next[cell] = (state << bits) - size;
131
+ }
132
+ return table;
133
+ };
134
+ const readFse = (data, at, maxLog) => {
135
+ const log = (data[at] & 15) + 5;
136
+ if (log > maxLog)
137
+ fail("an entropy table is too accurate");
138
+ const counts = new Int16Array(256);
139
+ let position = (at << 3) + 4;
140
+ let left = 1 << log;
141
+ let symbol = -1;
142
+ while (symbol < 255 && left > 0) {
143
+ const bits = highestBit(left + 1);
144
+ const byte = position >> 3;
145
+ const mask = (1 << (bits + 1)) - 1;
146
+ const wide = (data[byte] | (data[byte + 1] << 8) | (data[byte + 2] << 16)) >> (position & 7);
147
+ const narrow = wide & ((1 << bits) - 1);
148
+ const largest = mask - left - 1;
149
+ let value = wide & mask;
150
+ if (narrow < largest) {
151
+ position += bits;
152
+ value = narrow;
153
+ }
154
+ else {
155
+ position += bits + 1;
156
+ if (value > (1 << bits) - 1)
157
+ value -= largest;
158
+ }
159
+ value -= 1;
160
+ symbol += 1;
161
+ counts[symbol] = value;
162
+ left -= value < 0 ? -value : value;
163
+ if (value !== 0)
164
+ continue;
165
+ let repeat = 3;
166
+ while (repeat === 3) {
167
+ const byteAt = position >> 3;
168
+ repeat = ((data[byteAt] | (data[byteAt + 1] << 8)) >> (position & 7)) & 3;
169
+ position += 2;
170
+ symbol += repeat;
171
+ }
172
+ }
173
+ if (symbol > 255 || left !== 0)
174
+ fail("the entropy counts do not add up");
175
+ return [spread(counts, symbol + 1, log), (position + 7) >> 3];
176
+ };
177
+ const buildHuffman = (weights, count) => {
178
+ let sum = 0;
179
+ for (let symbol = 0; symbol < count; symbol += 1) {
180
+ const weight = weights[symbol];
181
+ if (weight > 11)
182
+ fail("a huffman weight is out of range");
183
+ sum += weight ? 1 << (weight - 1) : 0;
184
+ }
185
+ const maxBits = highestBit(sum) + 1;
186
+ const size = 1 << maxBits;
187
+ const rest = size - sum;
188
+ if (rest & (rest - 1))
189
+ fail("the huffman weights do not add up");
190
+ weights[count] = highestBit(rest) + 1;
191
+ const ranks = new Uint32Array(13);
192
+ for (let symbol = 0; symbol <= count; symbol += 1) {
193
+ weights[symbol] = weights[symbol] && maxBits + 1 - weights[symbol];
194
+ ranks[weights[symbol]] += 1;
195
+ }
196
+ const table = {
197
+ maxBits,
198
+ symbols: new Uint8Array(size),
199
+ bits: new Uint8Array(size),
200
+ };
201
+ const starts = new Uint32Array(13);
202
+ for (let bits = maxBits; bits > 0; bits -= 1) {
203
+ const start = starts[bits];
204
+ starts[bits - 1] = start + ranks[bits] * (1 << (maxBits - bits));
205
+ table.bits.fill(bits, start, starts[bits - 1]);
206
+ }
207
+ if (starts[0] !== size)
208
+ fail("the huffman codes do not fill the table");
209
+ for (let symbol = 0; symbol <= count; symbol += 1) {
210
+ const bits = weights[symbol];
211
+ if (!bits)
212
+ continue;
213
+ const start = starts[bits];
214
+ starts[bits] = start + (1 << (maxBits - bits));
215
+ table.symbols.fill(symbol, start, starts[bits]);
216
+ }
217
+ return table;
218
+ };
219
+ const readHuffman = (data, at) => {
220
+ const header = data[at];
221
+ const weights = new Uint8Array(256);
222
+ if (header >= 128) {
223
+ const count = header - 127;
224
+ for (let symbol = 0; symbol < count; symbol += 2) {
225
+ const byte = data[at + 1 + (symbol >> 1)];
226
+ weights[symbol] = byte >> 4;
227
+ weights[symbol + 1] = byte & 15;
228
+ }
229
+ return [buildHuffman(weights, count), at + 1 + ((count + 1) >> 1)];
230
+ }
231
+ const [table, start] = readFse(data, at + 1, 6);
232
+ const end = at + 1 + header;
233
+ const last = data[end - 1];
234
+ if (!last)
235
+ fail("a huffman bitstream ends on a zero byte");
236
+ const floor = start << 3;
237
+ let position = (end << 3) - 8 + highestBit(last);
238
+ let count = 0;
239
+ let first = 0;
240
+ let second = 0;
241
+ let firstBits = table.log;
242
+ let secondBits = table.log;
243
+ for (;;) {
244
+ position -= firstBits;
245
+ if (position < floor)
246
+ break;
247
+ let byte = position >> 3;
248
+ first +=
249
+ ((data[byte] | (data[byte + 1] << 8)) >> (position & 7)) & ((1 << firstBits) - 1);
250
+ weights[count] = table.symbols[first];
251
+ count += 1;
252
+ position -= secondBits;
253
+ if (position < floor)
254
+ break;
255
+ byte = position >> 3;
256
+ second +=
257
+ ((data[byte] | (data[byte + 1] << 8)) >> (position & 7)) & ((1 << secondBits) - 1);
258
+ weights[count] = table.symbols[second];
259
+ count += 1;
260
+ firstBits = table.bits[first];
261
+ first = table.next[first];
262
+ secondBits = table.bits[second];
263
+ second = table.next[second];
264
+ }
265
+ return [buildHuffman(weights, count), end];
266
+ };
267
+ const decodeStream = (data, table, out) => {
268
+ const last = data[data.length - 1];
269
+ if (!last)
270
+ fail("a literal bitstream ends on a zero byte");
271
+ const mask = (1 << table.maxBits) - 1;
272
+ const floor = -table.maxBits;
273
+ let bits = table.maxBits;
274
+ let position = (data.length << 3) - 8 + highestBit(last) - bits;
275
+ let state = 0;
276
+ let written = 0;
277
+ while (position > floor && written < out.length) {
278
+ const byte = position >> 3;
279
+ const wide = (data[byte] | (data[byte + 1] << 8) | (data[byte + 2] << 16)) >> (position & 7);
280
+ state = ((state << bits) | wide) & mask;
281
+ out[written] = table.symbols[state];
282
+ written += 1;
283
+ bits = table.bits[state];
284
+ position -= bits;
285
+ }
286
+ if (position !== floor || written !== out.length) {
287
+ fail("a literal bitstream is the wrong length");
288
+ }
289
+ };
290
+ const decodeLiterals = (data, table, out, streams) => {
291
+ if (!streams) {
292
+ decodeStream(data, table, out);
293
+ return;
294
+ }
295
+ const quarter = (out.length + 3) >> 2;
296
+ let at = 6;
297
+ for (let stream = 0; stream < 4; stream += 1) {
298
+ const size = data[stream << 1] | (data[(stream << 1) + 1] << 8);
299
+ const end = stream === 3 ? data.length : at + size;
300
+ const from = quarter * stream;
301
+ decodeStream(data.subarray(at, end), table, out.subarray(from, from + quarter));
302
+ at = end;
303
+ }
304
+ };
305
+ const DEFAULT_TABLES = () => {
306
+ const build = (counts, log) => {
307
+ const held = new Int16Array(256);
308
+ held.set(counts);
309
+ return spread(held, counts.length, log);
310
+ };
311
+ return {
312
+ literal: build(LITERAL_DEFAULT, 6),
313
+ match: build(MATCH_DEFAULT, 6),
314
+ offset: build(OFFSET_DEFAULT, 5),
315
+ };
316
+ };
317
+ const PREDEFINED = DEFAULT_TABLES();
318
+ const rleTable = (symbol) => {
319
+ const table = spread(Int16Array.of(...Array(symbol).fill(0), 1), symbol + 1, 0);
320
+ return table;
321
+ };
322
+ const readLiterals = (data, at, entropy) => {
323
+ const header = data[at];
324
+ const kind = header & 3;
325
+ const format = (header >> 2) & 3;
326
+ let size = header >> 4;
327
+ let packed = 0;
328
+ let byte = at;
329
+ if (kind < 2) {
330
+ if (format & 1) {
331
+ size |= data[byte + 1] << 4;
332
+ byte += 1;
333
+ if (format & 2) {
334
+ size |= data[byte + 1] << 12;
335
+ byte += 1;
336
+ }
337
+ }
338
+ else {
339
+ size = header >> 3;
340
+ }
341
+ byte += 1;
342
+ if (kind === 0) {
343
+ return [{ data: data.subarray(byte, byte + size), size }, byte + size];
344
+ }
345
+ return [{ data: new Uint8Array(size).fill(data[byte]), size }, byte + 1];
346
+ }
347
+ if (format < 2) {
348
+ size |= (data[at + 1] & 63) << 4;
349
+ packed = (data[at + 1] >> 6) | (data[at + 2] << 2);
350
+ byte = at + 3;
351
+ }
352
+ else if (format === 2) {
353
+ size |= (data[at + 1] << 4) | ((data[at + 2] & 3) << 12);
354
+ packed = (data[at + 2] >> 2) | (data[at + 3] << 6);
355
+ byte = at + 4;
356
+ }
357
+ else {
358
+ size |= (data[at + 1] << 4) | ((data[at + 2] & 63) << 12);
359
+ packed = (data[at + 2] >> 6) | (data[at + 3] << 2) | (data[at + 4] << 10);
360
+ byte = at + 5;
361
+ }
362
+ if (kind === 2) {
363
+ const [table, after] = readHuffman(data, byte);
364
+ entropy.huffman = table;
365
+ packed -= after - byte;
366
+ byte = after;
367
+ }
368
+ const table = entropy.huffman ?? fail("literals without a huffman table");
369
+ const out = new Uint8Array(size);
370
+ decodeLiterals(data.subarray(byte, byte + packed), table, out, format !== 0);
371
+ return [{ data: out, size }, byte + packed];
372
+ };
373
+ const readTables = (data, at, entropy) => {
374
+ const modes = data[at];
375
+ if (modes & 3)
376
+ fail("a sequence header reserves bits that are set");
377
+ const held = entropy.tables;
378
+ const held3 = [
379
+ held?.match ?? null,
380
+ held?.offset ?? null,
381
+ held?.literal ?? null,
382
+ ];
383
+ const fallbacks = [PREDEFINED.match, PREDEFINED.offset, PREDEFINED.literal];
384
+ const tables = [...fallbacks];
385
+ let byte = at + 1;
386
+ for (let which = 2; which > -1; which -= 1) {
387
+ const mode = (modes >> ((which << 1) + 2)) & 3;
388
+ if (mode === 1) {
389
+ tables[which] = rleTable(data[byte]);
390
+ byte += 1;
391
+ }
392
+ else if (mode === 2) {
393
+ const [table, after] = readFse(data, byte, 9 - (which & 1));
394
+ tables[which] = table;
395
+ byte = after;
396
+ }
397
+ else if (mode === 3) {
398
+ tables[which] = held3[which] ?? fail("a repeated table was never sent");
399
+ }
400
+ }
401
+ const built = { match: tables[0], offset: tables[1], literal: tables[2] };
402
+ entropy.tables = built;
403
+ return [built, byte];
404
+ };
405
+ const readCount = (data, at) => {
406
+ const first = data[at];
407
+ if (first < 128)
408
+ return [first, at + 1];
409
+ if (first < 255)
410
+ return [((first - 128) << 8) | data[at + 1], at + 2];
411
+ return [(data[at + 1] | (data[at + 2] << 8)) + 0x7f00, at + 3];
412
+ };
413
+ const nextOffset = (raw, literals, recent) => {
414
+ if (raw > 3) {
415
+ recent[2] = recent[1];
416
+ recent[1] = recent[0];
417
+ recent[0] = raw - 3;
418
+ return recent[0];
419
+ }
420
+ const index = raw - (literals !== 0 ? 1 : 0);
421
+ if (index === 0)
422
+ return recent[0];
423
+ const offset = index === 3 ? recent[0] - 1 : recent[index];
424
+ if (index > 1)
425
+ recent[2] = recent[1];
426
+ recent[1] = recent[0];
427
+ recent[0] = offset;
428
+ return offset;
429
+ };
430
+ const runSequences = (data, at, end, count, literals, entropy, out, written) => {
431
+ const [tables] = readTables(data, at, entropy);
432
+ const last = data[end - 1];
433
+ if (!last)
434
+ fail("a sequence bitstream ends on a zero byte");
435
+ const grab = (position, bits) => {
436
+ const byte = position >> 3;
437
+ const wide = (data[byte] |
438
+ (data[byte + 1] << 8) |
439
+ (data[byte + 2] << 16) |
440
+ (data[byte + 3] << 24)) >>>
441
+ (position & 7);
442
+ return bits === 32 ? wide : wide & ((1 << bits) - 1);
443
+ };
444
+ let position = (end << 3) - 8 + highestBit(last) - tables.literal.log;
445
+ let literal = grab(position, tables.literal.log);
446
+ position -= tables.offset.log;
447
+ let offset = grab(position, tables.offset.log);
448
+ position -= tables.match.log;
449
+ let match = grab(position, tables.match.log);
450
+ let read = 0;
451
+ let cursor = written;
452
+ for (let done = 0; done < count; done += 1) {
453
+ const literalCode = tables.literal.symbols[literal];
454
+ const literalBits = tables.literal.bits[literal];
455
+ const matchCode = tables.match.symbols[match];
456
+ const matchBits = tables.match.bits[match];
457
+ const offsetCode = tables.offset.symbols[offset];
458
+ const offsetBits = tables.offset.bits[offset];
459
+ position -= offsetCode;
460
+ const raw = (1 << offsetCode) + grab(position, offsetCode);
461
+ position -= MATCH_BITS[matchCode];
462
+ const matchLength = MATCH_BASE[matchCode] + grab(position, MATCH_BITS[matchCode]);
463
+ position -= LITERAL_BITS[literalCode];
464
+ const literalLength = LITERAL_BASE[literalCode] + grab(position, LITERAL_BITS[literalCode]);
465
+ position -= literalBits;
466
+ literal = tables.literal.next[literal] + grab(position, literalBits);
467
+ position -= matchBits;
468
+ match = tables.match.next[match] + grab(position, matchBits);
469
+ position -= offsetBits;
470
+ offset = tables.offset.next[offset] + grab(position, offsetBits);
471
+ const distance = nextOffset(raw, literalLength, entropy.offsets);
472
+ out.set(literals.data.subarray(read, read + literalLength), cursor);
473
+ read += literalLength;
474
+ cursor += literalLength;
475
+ if (distance > cursor)
476
+ fail("a match reaches before the window");
477
+ for (let step = 0; step < matchLength; step += 1) {
478
+ out[cursor + step] = out[cursor + step - distance];
479
+ }
480
+ cursor += matchLength;
481
+ }
482
+ out.set(literals.data.subarray(read, literals.size), cursor);
483
+ return cursor + literals.size - read;
484
+ };
485
+ const decodeBlock = (data, at, end, entropy, out, written) => {
486
+ const [literals, next] = readLiterals(data, at, entropy);
487
+ const [count, start] = readCount(data, next);
488
+ if (count === 0) {
489
+ out.set(literals.data.subarray(0, literals.size), written);
490
+ return written + literals.size;
491
+ }
492
+ return runSequences(data, start, end, count, literals, entropy, out, written);
493
+ };
494
+ const readFrame = (data) => {
495
+ const magic = data[0] | (data[1] << 8) | (data[2] << 16);
496
+ if (magic !== FRAME_MAGIC || data[3] !== 253)
497
+ fail("not a zstd frame");
498
+ const flags = data[4];
499
+ const single = (flags >> 5) & 1;
500
+ const sizeFlag = flags >> 6;
501
+ const at = 6 - single + (flags & 3 ? ((flags & 3) === 3 ? 4 : flags & 3) : 0);
502
+ const sizeBytes = sizeFlag ? 1 << sizeFlag : single;
503
+ let size = 0;
504
+ for (let step = 0; step < sizeBytes; step += 1)
505
+ size += data[at + step] * 256 ** step;
506
+ return [at + sizeBytes, sizeBytes ? size + (sizeFlag === 1 ? 256 : 0) : 0];
507
+ };
508
+ const grow = (out, needed) => {
509
+ if (needed <= out.length)
510
+ return out;
511
+ const wider = new Uint8Array(Math.max(needed, out.length * 2));
512
+ wider.set(out);
513
+ return wider;
514
+ };
515
+ /** One frame, with any dictionary laid in front of it as the window it reaches. */
516
+ export const decompress = (data, dictionary) => {
517
+ const [start, size] = readFrame(data);
518
+ const prefix = dictionary ? dictionary.content : new Uint8Array(0);
519
+ const entropy = {
520
+ huffman: dictionary?.huffman ?? null,
521
+ tables: dictionary?.tables ?? null,
522
+ offsets: Int32Array.from(dictionary ? dictionary.offsets : [1, 4, 8]),
523
+ };
524
+ let out = new Uint8Array(prefix.length + (size || 1 << 16));
525
+ out.set(prefix);
526
+ let written = prefix.length;
527
+ let at = start;
528
+ for (;;) {
529
+ const header = data[at] | (data[at + 1] << 8) | (data[at + 2] << 16);
530
+ const kind = (header >> 1) & 3;
531
+ const held = header >> 3;
532
+ at += 3;
533
+ out = grow(out, written + held + (1 << 17));
534
+ if (kind === 0) {
535
+ out.set(data.subarray(at, at + held), written);
536
+ written += held;
537
+ at += held;
538
+ }
539
+ else if (kind === 1) {
540
+ out.fill(data[at], written, written + held);
541
+ written += held;
542
+ at += 1;
543
+ }
544
+ else if (kind === 2) {
545
+ written = decodeBlock(data, at, at + held, entropy, out, written);
546
+ at += held;
547
+ }
548
+ else {
549
+ fail("a block has no known type");
550
+ }
551
+ if (header & 1)
552
+ break;
553
+ }
554
+ return out.subarray(prefix.length, written);
555
+ };
556
+ /** A trained dictionary: its entropy tables, its repeat offsets and its content. */
557
+ export const loadDictionary = (data) => {
558
+ const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
559
+ if (view.getUint32(0, true) !== DICTIONARY_MAGIC) {
560
+ return { id: 0, content: data, huffman: null, tables: null, offsets: [1, 4, 8] };
561
+ }
562
+ const [huffman, afterHuffman] = readHuffman(data, 8);
563
+ const [offset, afterOffset] = readFse(data, afterHuffman, 8);
564
+ const [match, afterMatch] = readFse(data, afterOffset, 9);
565
+ const [literal, afterLiteral] = readFse(data, afterMatch, 9);
566
+ return {
567
+ id: view.getUint32(4, true),
568
+ content: data.subarray(afterLiteral + 12),
569
+ huffman,
570
+ tables: { literal, match, offset },
571
+ offsets: [0, 1, 2].map((step) => view.getUint32(afterLiteral + step * 4, true)),
572
+ };
573
+ };
574
+ //# sourceMappingURL=zstd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zstd.js","sourceRoot":"","sources":["../src/zstd.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,GAAG,QAAQ,CAAC;AAC7B,MAAM,gBAAgB,GAAG,UAAU,CAAC;AAEpC,MAAM,UAAU,GAAG,CAAC,IAAgB,EAAE,KAAa,EAAc,EAAE;IACjE,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAClB,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,IAAI,UAAU,CAAC;IAClC,GAAG,KAAK,CAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5B,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,EAAE;IACF,EAAE;IACF,EAAE;IACF,EAAE;IACF,EAAE;IACF,EAAE;IACF,EAAE;CACH,CAAC,CAAC;AACH,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC;IAChC,GAAG,KAAK,CAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5B,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,EAAE;IACF,EAAE;IACF,EAAE;IACF,EAAE;IACF,EAAE;IACF,EAAE;IACF,EAAE;CACH,CAAC,CAAC;AACH,MAAM,YAAY,GAAG,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;AACjD,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AAE7C,MAAM,eAAe,GAAG;IACtB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IACrF,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;CACxB,CAAC;AACF,MAAM,aAAa,GAAG;IACpB,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,GAAG,KAAK,CAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5B,GAAG,KAAK,CAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;CAC7B,CAAC;AACF,MAAM,cAAc,GAAG;IACrB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACtF,CAAC,CAAC;CACH,CAAC;AAmCF,MAAM,IAAI,GAAG,CAAC,MAAc,EAAS,EAAE;IACrC,MAAM,IAAI,KAAK,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;AACrC,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,KAAa,EAAU,EAAE;IAC3C,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,OAAO,CAAC,IAAI,IAAI,IAAI,KAAK;QAAE,IAAI,IAAI,CAAC,CAAC;IACrC,OAAO,IAAI,GAAG,CAAC,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,CAAC,MAAkB,EAAE,OAAe,EAAE,GAAW,EAAY,EAAE;IAC5E,MAAM,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC;IACtB,MAAM,KAAK,GAAa;QACtB,GAAG;QACH,OAAO,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC;QAC7B,IAAI,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC;QAC1B,IAAI,EAAE,IAAI,WAAW,CAAC,IAAI,CAAC;KAC5B,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;QACnD,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACnB,IAAI,IAAI,CAAC,CAAC;YACV,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC3C,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;QACnD,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;YACpD,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;YAC3B;gBAAG,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;mBAC1B,EAAE,IAAI,IAAI,EAAE;QACrB,CAAC;IACH,CAAC;IACD,IAAI,EAAE,KAAK,CAAC;QAAE,IAAI,CAAC,0CAA0C,CAAC,CAAC;IAE/D,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC;IAC5C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,CAAC,IAAgB,EAAE,EAAU,EAAE,MAAc,EAAsB,EAAE;IACnF,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,GAAG,GAAG,MAAM;QAAE,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,QAAQ,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC;IACpB,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;IAEhB,OAAO,MAAM,GAAG,GAAG,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,QAAQ,IAAI,CAAC,CAAC;QAC3B,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,IAAI,GACR,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QAClF,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC;QAChC,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;QACxB,IAAI,MAAM,GAAG,OAAO,EAAE,CAAC;YACrB,QAAQ,IAAI,IAAI,CAAC;YACjB,KAAK,GAAG,MAAM,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,QAAQ,IAAI,IAAI,GAAG,CAAC,CAAC;YACrB,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC;gBAAE,KAAK,IAAI,OAAO,CAAC;QAChD,CAAC;QACD,KAAK,IAAI,CAAC,CAAC;QACX,MAAM,IAAI,CAAC,CAAC;QACZ,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;QACvB,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QACnC,IAAI,KAAK,KAAK,CAAC;YAAE,SAAS;QAC1B,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,OAAO,MAAM,KAAK,CAAC,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,QAAQ,IAAI,CAAC,CAAC;YAC7B,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC1E,QAAQ,IAAI,CAAC,CAAC;YACd,MAAM,IAAI,MAAM,CAAC;QACnB,CAAC;IACH,CAAC;IACD,IAAI,MAAM,GAAG,GAAG,IAAI,IAAI,KAAK,CAAC;QAAE,IAAI,CAAC,kCAAkC,CAAC,CAAC;IACzE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAChE,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,OAAmB,EAAE,KAAa,EAAgB,EAAE;IACxE,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,MAAM,GAAG,EAAE;YAAE,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAC1D,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;IACD,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,CAAC,IAAI,OAAO,CAAC;IAC1B,MAAM,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC;IACxB,IAAI,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;QAAE,IAAI,CAAC,mCAAmC,CAAC,CAAC;IACjE,OAAO,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEtC,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;IAClC,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,IAAI,KAAK,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;QAClD,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QACnE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,KAAK,GAAiB;QAC1B,OAAO;QACP,OAAO,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC;QAC7B,IAAI,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC;KAC3B,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;IACnC,KAAK,IAAI,IAAI,GAAG,OAAO,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3B,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC;QACjE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI;QAAE,IAAI,CAAC,yCAAyC,CAAC,CAAC;IAExE,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,IAAI,KAAK,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC;QAC/C,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,IAAgB,EAAE,EAAU,EAA0B,EAAE;IAC3E,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IACxB,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,MAAM,GAAG,GAAG,CAAC;QAC3B,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1C,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;YAC5B,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;QAClC,CAAC;QACD,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC;IAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC3B,IAAI,CAAC,IAAI;QAAE,IAAI,CAAC,yCAAyC,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,CAAC;IACzB,IAAI,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC;IAC1B,IAAI,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC;IAE3B,SAAS,CAAC;QACR,QAAQ,IAAI,SAAS,CAAC;QACtB,IAAI,QAAQ,GAAG,KAAK;YAAE,MAAM;QAC5B,IAAI,IAAI,GAAG,QAAQ,IAAI,CAAC,CAAC;QACzB,KAAK;YACH,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACpF,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACtC,KAAK,IAAI,CAAC,CAAC;QACX,QAAQ,IAAI,UAAU,CAAC;QACvB,IAAI,QAAQ,GAAG,KAAK;YAAE,MAAM;QAC5B,IAAI,GAAG,QAAQ,IAAI,CAAC,CAAC;QACrB,MAAM;YACJ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QACrF,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACvC,KAAK,IAAI,CAAC,CAAC;QACX,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;AAC7C,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,IAAgB,EAAE,KAAmB,EAAE,GAAe,EAAQ,EAAE;IACpF,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnC,IAAI,CAAC,IAAI;QAAE,IAAI,CAAC,yCAAyC,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;IAC7B,IAAI,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC;IACzB,IAAI,QAAQ,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAChE,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,OAAO,QAAQ,GAAG,KAAK,IAAI,OAAO,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QAChD,MAAM,IAAI,GAAG,QAAQ,IAAI,CAAC,CAAC;QAC3B,MAAM,IAAI,GACR,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QAClF,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;QACxC,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC,CAAC;QACb,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,QAAQ,IAAI,IAAI,CAAC;IACnB,CAAC;IACD,IAAI,QAAQ,KAAK,KAAK,IAAI,OAAO,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC;QACjD,IAAI,CAAC,yCAAyC,CAAC,CAAC;IAClD,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CACrB,IAAgB,EAChB,KAAmB,EACnB,GAAe,EACf,OAAgB,EACV,EAAE;IACR,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAC/B,OAAO;IACT,CAAC;IACD,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC;QACnD,MAAM,IAAI,GAAG,OAAO,GAAG,MAAM,CAAC;QAC9B,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;QAChF,EAAE,GAAG,GAAG,CAAC;IACX,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,GAAmB,EAAE;IAC1C,MAAM,KAAK,GAAG,CAAC,MAAgB,EAAE,GAAW,EAAY,EAAE;QACxD,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjB,OAAO,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC,CAAC;IACF,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC;QAClC,KAAK,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;QAC9B,MAAM,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;KACjC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;AAEpC,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAY,EAAE;IAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,KAAK,CAAS,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACxF,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAIF,MAAM,YAAY,GAAG,CACnB,IAAgB,EAChB,EAAU,EACV,OAAgB,EACI,EAAE;IACtB,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IACxB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC;IACxB,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,IAAI,GAAG,MAAM,IAAI,CAAC,CAAC;IACvB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,IAAI,GAAG,EAAE,CAAC;IAEd,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QACb,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACf,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,IAAI,CAAC,CAAC;YACV,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;gBACf,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC7B,IAAI,IAAI,CAAC,CAAC;YACZ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,MAAM,IAAI,CAAC,CAAC;QACrB,CAAC;QACD,IAAI,IAAI,CAAC,CAAC;QACV,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC;QACzE,CAAC;QACD,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACnD,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;IAChB,CAAC;SAAM,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACzD,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACnD,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;IAChB,CAAC;SAAM,CAAC;QACN,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1D,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1E,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;IAChB,CAAC;IAED,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/C,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;QACxB,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC;QACvB,IAAI,GAAG,KAAK,CAAC;IACf,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAC1E,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;IACjC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC;IAC7E,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,GAAG,MAAM,CAAC,CAAC;AAC9C,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CACjB,IAAgB,EAChB,EAAU,EACV,OAAgB,EACU,EAAE;IAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IACvB,IAAI,KAAK,GAAG,CAAC;QAAE,IAAI,CAAC,8CAA8C,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAC5B,MAAM,KAAK,GAAwB;QACjC,IAAI,EAAE,KAAK,IAAI,IAAI;QACnB,IAAI,EAAE,MAAM,IAAI,IAAI;QACpB,IAAI,EAAE,OAAO,IAAI,IAAI;KACtB,CAAC;IACF,MAAM,SAAS,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAe,CAAC,GAAG,SAAS,CAAC,CAAC;IAC1C,IAAI,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;IAElB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/C,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACrC,IAAI,IAAI,CAAC,CAAC;QACZ,CAAC;aAAM,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;YAC5D,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;YACtB,IAAI,GAAG,KAAK,CAAC;QACf,CAAC;aAAM,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1E,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;IACvB,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,IAAgB,EAAE,EAAU,EAAoB,EAAE;IACnE,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IACvB,IAAI,KAAK,GAAG,GAAG;QAAE,OAAO,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IACxC,IAAI,KAAK,GAAG,GAAG;QAAE,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;AACjE,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,QAAgB,EAAE,MAAkB,EAAU,EAAE;IAC/E,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;QACZ,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QACpB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3D,IAAI,KAAK,GAAG,CAAC;QAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;IACnB,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CACnB,IAAgB,EAChB,EAAU,EACV,GAAW,EACX,KAAa,EACb,QAAkB,EAClB,OAAgB,EAChB,GAAe,EACf,OAAe,EACP,EAAE;IACV,MAAM,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC3B,IAAI,CAAC,IAAI;QAAE,IAAI,CAAC,0CAA0C,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,CAAC,QAAgB,EAAE,IAAY,EAAU,EAAE;QACtD,MAAM,IAAI,GAAG,QAAQ,IAAI,CAAC,CAAC;QAC3B,MAAM,IAAI,GACR,CAAC,IAAI,CAAC,IAAI,CAAC;YACT,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACtB,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACzB,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QACjB,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACvD,CAAC,CAAC;IAEF,IAAI,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;IACtE,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjD,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;IAC9B,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC/C,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;IAC7B,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,MAAM,GAAG,OAAO,CAAC;IAErB,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;QAC3C,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE9C,QAAQ,IAAI,UAAU,CAAC;QACvB,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,UAAU,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC3D,QAAQ,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC;QAClC,MAAM,WAAW,GAAG,UAAU,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;QAClF,QAAQ,IAAI,YAAY,CAAC,WAAW,CAAC,CAAC;QACtC,MAAM,aAAa,GACjB,YAAY,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC;QAExE,QAAQ,IAAI,WAAW,CAAC;QACxB,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACrE,QAAQ,IAAI,SAAS,CAAC;QACtB,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC7D,QAAQ,IAAI,UAAU,CAAC;QACvB,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAEjE,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACjE,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,aAAa,CAAC,EAAE,MAAM,CAAC,CAAC;QACpE,IAAI,IAAI,aAAa,CAAC;QACtB,MAAM,IAAI,aAAa,CAAC;QACxB,IAAI,QAAQ,GAAG,MAAM;YAAE,IAAI,CAAC,mCAAmC,CAAC,CAAC;QACjE,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,WAAW,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;YACjD,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,IAAI,GAAG,QAAQ,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,IAAI,WAAW,CAAC;IACxB,CAAC;IAED,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IAC7D,OAAO,MAAM,GAAG,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;AACvC,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAClB,IAAgB,EAChB,EAAU,EACV,GAAW,EACX,OAAgB,EAChB,GAAe,EACf,OAAe,EACP,EAAE;IACV,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IACzD,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7C,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;QAC3D,OAAO,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC;IACjC,CAAC;IACD,OAAO,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;AAChF,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,IAAgB,EAAoB,EAAE;IACvD,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACzD,IAAI,KAAK,KAAK,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;QAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACvE,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,MAAM,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,KAAK,IAAI,CAAC,CAAC;IAC5B,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IACpD,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,SAAS,EAAE,IAAI,IAAI,CAAC;QAAE,IAAI,IAAI,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC;IACtF,OAAO,CAAC,EAAE,GAAG,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7E,CAAC,CAAC;AAEF,MAAM,IAAI,GAAG,CAAC,GAAe,EAAE,MAAc,EAAc,EAAE;IAC3D,IAAI,MAAM,IAAI,GAAG,CAAC,MAAM;QAAE,OAAO,GAAG,CAAC;IACrC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/D,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACf,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,mFAAmF;AACnF,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,IAAgB,EAChB,UAA8B,EAClB,EAAE;IACd,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IACnE,MAAM,OAAO,GAAY;QACvB,OAAO,EAAE,UAAU,EAAE,OAAO,IAAI,IAAI;QACpC,MAAM,EAAE,UAAU,EAAE,MAAM,IAAI,IAAI;QAClC,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;KACtE,CAAC;IAEF,IAAI,GAAG,GAAe,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACxE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAChB,IAAI,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;IAC5B,IAAI,EAAE,GAAG,KAAK,CAAC;IACf,SAAS,CAAC;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACrE,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,CAAC;QACzB,EAAE,IAAI,CAAC,CAAC;QACR,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC5C,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;YAC/C,OAAO,IAAI,IAAI,CAAC;YAChB,EAAE,IAAI,IAAI,CAAC;QACb,CAAC;aAAM,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACtB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC,CAAC;YAC5C,OAAO,IAAI,IAAI,CAAC;YAChB,EAAE,IAAI,CAAC,CAAC;QACV,CAAC;aAAM,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YAClE,EAAE,IAAI,IAAI,CAAC;QACb,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,MAAM,GAAG,CAAC;YAAE,MAAM;IACxB,CAAC;IACD,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC,CAAC;AAEF,oFAAoF;AACpF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAgB,EAAc,EAAE;IAC7D,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACzE,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,gBAAgB,EAAE,CAAC;QACjD,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IACnF,CAAC;IACD,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACrD,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;IAC7D,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;IAC1D,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;IAC7D,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC;QAC3B,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,EAAE,CAAC;QACzC,OAAO;QACP,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE;QAClC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;KAChF,CAAC;AACJ,CAAC,CAAC"}