@xlsxflow/core 1.1.4 → 1.1.6
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/CHANGELOG.md +24 -0
- package/README.md +33 -12
- package/dist/index.cjs +52 -16
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +52 -16
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -2
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/core/zip-stream-writer.ts","../src/core/cfb.ts","../src/core/zip-random-access.ts","../src/core/xml-stream.ts","../src/core/utils.ts","../src/core/style-reader.ts","../src/core/number-format.ts","../src/core/worksheet-parser.ts","../src/core/image.ts","../src/core/xls.ts","../src/core/ods.ts","../src/core/style-engine.ts","../src/core/conditional-formatter.ts","../src/core/formula-engine.ts","../src/core/writer.ts","../src/core/random-access.ts","../src/core/style-patcher.ts","../src/core/sheet-shift.ts","../src/core/editor.ts","../src/core/index.ts","../src/core/csv.ts","../src/core/ods-writer.ts","../src/index.ts"],"sourcesContent":["const CRC_TABLE = (() => {\n const t = new Uint32Array(256);\n for (let n = 0; n < 256; n++) {\n let c = n;\n for (let k = 0; k < 8; k++) c = (c & 1) ? (c >>> 1) ^ 0xedb88320 : c >>> 1;\n t[n] = c >>> 0;\n }\n return t;\n})();\n\nexport function crc32(bytes: Uint8Array): number {\n return (crc32Update(0xffffffff, bytes) ^ 0xffffffff) >>> 0;\n}\n\n// Running CRC-32 over chunks: start at 0xffffffff, finish with (crc ^ 0xffffffff) >>> 0\nexport function crc32Update(crc: number, bytes: Uint8Array): number {\n for (let i = 0; i < bytes.length; i++) crc = CRC_TABLE[(crc ^ bytes[i]) & 0xff] ^ (crc >>> 8);\n return crc;\n}\n\nconst MAX_U32 = 0xffffffff;\n\n// General-purpose flag bit 11: the entry name is UTF-8 (set only when it isn't plain ASCII)\nconst utf8Flag = (name: Uint8Array) => name.some(b => b > 0x7f) ? 0x0800 : 0;\n\n// No ZIP64 support: fail loudly instead of writing a corrupt archive.\nfunction assertNoZip64(value: number, what: string) {\n if (value > MAX_U32) throw new Error(`ZIP64 not supported: ${what} exceeds 4 GiB.`);\n}\n\ninterface CdEntry {\n filename: Uint8Array;\n offset: number;\n uncompressedSize: number;\n compressedSize: number;\n crc: number;\n flags: number;\n method: number;\n}\n\n// A true Single-Pass Streaming ZIP Writer\nexport class ZipStreamWriter {\n private cdEntries: CdEntry[] = [];\n private offset = 0;\n private streamController!: ReadableStreamDefaultController<Uint8Array>;\n private waiting: (() => void)[] = [];\n private cancelled = false;\n public stream: ReadableStream<Uint8Array>;\n private textEncoder = new TextEncoder();\n\n constructor(highWaterMarkBytes = 1 << 20) {\n this.stream = new ReadableStream<Uint8Array>({\n start: (controller) => {\n this.streamController = controller;\n },\n pull: () => this.wake(),\n // Consumer gone: unblock any pending write so the producer can see the error.\n cancel: () => {\n this.cancelled = true;\n this.wake();\n }\n }, new ByteLengthQueuingStrategy({ highWaterMark: highWaterMarkBytes }));\n }\n\n // Adds a file to the zip. `inputStream` MUST be raw uncompressed data.\n async addFile(filenameStr: string, inputStream: ReadableStream<Uint8Array>): Promise<void> {\n const filename = this.textEncoder.encode(filenameStr);\n const flags = 0x0008 | utf8Flag(filename);\n const startOffset = this.offset;\n await this.pushChunk(this.localHeader(filename, flags, 8, 0, 0, 0));\n\n // Stream data, tracking sizes and CRC32\n let uncompressedSize = 0;\n let crc = 0xffffffff;\n\n const crcStream = new TransformStream<Uint8Array, Uint8Array>({\n // CompressionStream takes every write at once, so the input is held back here instead,\n // while nobody reads the output\n transform: async (chunk, controller) => {\n await this.roomInQueue();\n uncompressedSize += chunk.length;\n crc = crc32Update(crc, chunk);\n controller.enqueue(chunk);\n }\n });\n\n let compressedSize = 0;\n const reader = inputStream\n .pipeThrough(crcStream)\n .pipeThrough(new CompressionStream('deflate-raw') as any as TransformStream<Uint8Array, Uint8Array>)\n .getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n compressedSize += value.length;\n await this.pushChunk(value);\n }\n } catch (err) {\n // Stop the source too (a row generator's finally runs, a database cursor closes)\n await reader.cancel(err).catch(() => {});\n throw err;\n }\n\n crc = (crc ^ 0xffffffff) >>> 0;\n assertNoZip64(uncompressedSize, filenameStr);\n assertNoZip64(compressedSize, filenameStr);\n\n // Data Descriptor\n const desc = new Uint8Array(16);\n const descView = new DataView(desc.buffer);\n descView.setUint32(0, 0x08074b50, true);\n descView.setUint32(4, crc, true);\n descView.setUint32(8, compressedSize, true);\n descView.setUint32(12, uncompressedSize, true);\n await this.pushChunk(desc);\n\n this.cdEntries.push({ filename, offset: startOffset, uncompressedSize, compressedSize, crc, flags, method: 8 });\n }\n\n // Adds a file that is ALREADY compressed (pass-through for the Editor)\n async addCompressedFile(filenameStr: string, compressedStream: ReadableStream<Uint8Array>, uncompressedSize: number, compressedSize: number, crc: number, method = 8): Promise<void> {\n const filename = this.textEncoder.encode(filenameStr);\n const flags = utf8Flag(filename);\n const startOffset = this.offset;\n await this.pushChunk(this.localHeader(filename, flags, method, crc, compressedSize, uncompressedSize));\n\n const reader = compressedStream.getReader();\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n await this.pushChunk(value);\n }\n\n this.cdEntries.push({ filename, offset: startOffset, uncompressedSize, compressedSize, crc, flags, method });\n }\n\n async close(): Promise<void> {\n // 0xFFFF in the end record means \"see the ZIP64 record\", which readers then look for\n if (this.cdEntries.length >= 0xffff) throw new Error('ZIP64 not supported: 65535 entries or more.');\n const cdStartOffset = this.offset;\n\n for (const entry of this.cdEntries) {\n const cd = new Uint8Array(46 + entry.filename.length);\n const view = new DataView(cd.buffer);\n view.setUint32(0, 0x02014b50, true);\n view.setUint16(4, 20, true); // version made by\n view.setUint16(6, 20, true); // version needed\n view.setUint16(8, entry.flags, true);\n view.setUint16(10, entry.method, true);\n view.setUint32(16, entry.crc, true);\n view.setUint32(20, entry.compressedSize, true);\n view.setUint32(24, entry.uncompressedSize, true);\n view.setUint16(28, entry.filename.length, true);\n view.setUint32(42, entry.offset, true);\n cd.set(entry.filename, 46);\n await this.pushChunk(cd);\n }\n\n const cdSize = this.offset - cdStartOffset;\n assertNoZip64(this.offset, 'archive');\n\n const eocd = new Uint8Array(22);\n const eocdView = new DataView(eocd.buffer);\n eocdView.setUint32(0, 0x06054b50, true);\n eocdView.setUint16(8, this.cdEntries.length, true);\n eocdView.setUint16(10, this.cdEntries.length, true);\n eocdView.setUint32(12, cdSize, true);\n eocdView.setUint32(16, cdStartOffset, true);\n await this.pushChunk(eocd);\n\n this.streamController.close();\n }\n\n // Propagate a producer failure to whoever is reading `stream`.\n error(err: unknown) {\n try { this.streamController.error(err); } catch { /* already closed/errored */ }\n }\n\n private localHeader(filename: Uint8Array, flags: number, method: number, crc: number, compressedSize: number, uncompressedSize: number): Uint8Array {\n assertNoZip64(this.offset, 'archive');\n const header = new Uint8Array(30 + filename.length);\n const view = new DataView(header.buffer);\n view.setUint32(0, 0x04034b50, true);\n view.setUint16(4, 20, true);\n view.setUint16(6, flags, true);\n view.setUint16(8, method, true);\n view.setUint32(14, crc, true);\n view.setUint32(18, compressedSize, true);\n view.setUint32(22, uncompressedSize, true);\n view.setUint16(26, filename.length, true);\n header.set(filename, 30);\n return header;\n }\n\n // Enqueue and wait while the consumer's queue is full, so memory stays bounded.\n private async pushChunk(chunk: Uint8Array) {\n if (this.cancelled) throw new Error('ZIP stream cancelled by consumer.');\n this.streamController.enqueue(chunk);\n this.offset += chunk.length;\n await this.roomInQueue();\n }\n\n private async roomInQueue() {\n while ((this.streamController.desiredSize ?? 1) <= 0) {\n if (this.cancelled) throw new Error('ZIP stream cancelled by consumer.');\n await new Promise<void>(resolve => this.waiting.push(resolve));\n }\n if (this.cancelled) throw new Error('ZIP stream cancelled by consumer.');\n }\n\n private wake() {\n const waiting = this.waiting;\n this.waiting = [];\n for (const resolve of waiting) resolve();\n }\n}\n","// Reader for Compound File Binary files [MS-CFB]: the container of .xls workbooks and of\n// password-protected .xlsx files. Streams are read from an in-memory copy of the file.\n\nconst SIGNATURE = [0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1, 0x1a, 0xe1];\nconst END_OF_CHAIN = 0xfffffffe;\nconst MAX_REGULAR_SECTOR = 0xfffffffa;\n\nexport interface CfbEntry {\n path: string; // \"Workbook\", or \"Storage/Stream\" inside a storage\n type: 'storage' | 'stream';\n size: number;\n}\n\nexport function isCfb(bytes: Uint8Array): boolean {\n return bytes.length >= 8 && SIGNATURE.every((b, i) => bytes[i] === b);\n}\n\nconst corrupt = (why: string) => new Error(`Corrupt compound file: ${why}`);\n\ninterface DirEntry { name: string; type: number; left: number; right: number; child: number; start: number; size: number }\n\nexport class CfbReader {\n private readonly view: DataView;\n private readonly sectorSize: number;\n private readonly miniSectorSize: number;\n private readonly miniCutoff: number;\n private readonly fat: Uint32Array;\n private miniFat?: Uint32Array;\n private miniStream?: Uint8Array;\n private readonly dir: DirEntry[];\n private readonly byPath = new Map<string, DirEntry & { path: string }>();\n\n constructor(private readonly bytes: Uint8Array) {\n if (!isCfb(bytes)) throw new Error('Not a compound file (no D0CF11E0 signature)');\n if (bytes.length < 512) throw corrupt(`only ${bytes.length} bytes, shorter than its 512-byte header`);\n this.view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n const u16 = (o: number) => this.view.getUint16(o, true);\n const u32 = (o: number) => this.view.getUint32(o, true);\n\n const sectorShift = u16(0x1e);\n if (sectorShift !== 9 && sectorShift !== 12) throw corrupt(`sector shift ${sectorShift}`);\n this.sectorSize = 1 << sectorShift;\n const miniShift = u16(0x20);\n if (miniShift !== 6) throw corrupt(`mini sector shift ${miniShift}`);\n this.miniSectorSize = 1 << miniShift;\n this.miniCutoff = u32(0x38);\n\n // The FAT's own sectors are listed in the header (109 slots) and then in a chain of DIFAT sectors\n const numFatSectors = u32(0x2c);\n const sectorCount = Math.ceil(bytes.length / this.sectorSize) - 1;\n if (numFatSectors > sectorCount) throw corrupt(`${numFatSectors} FAT sectors in a ${bytes.length}-byte file`);\n const fatSectors: number[] = [];\n for (let i = 0; i < 109 && fatSectors.length < numFatSectors; i++) fatSectors.push(u32(0x4c + i * 4));\n const perDifat = this.sectorSize / 4 - 1;\n for (let s = u32(0x44), hops = 0; fatSectors.length < numFatSectors; hops++) {\n if (s > MAX_REGULAR_SECTOR || hops > sectorCount) throw corrupt('DIFAT chain ends early');\n const at = this.sectorOffset(s);\n for (let i = 0; i < perDifat && fatSectors.length < numFatSectors; i++) fatSectors.push(u32(at + i * 4));\n s = u32(at + perDifat * 4);\n }\n const perSector = this.sectorSize / 4;\n this.fat = new Uint32Array(numFatSectors * perSector);\n fatSectors.forEach((s, i) => {\n const at = this.sectorOffset(s);\n for (let j = 0; j < perSector; j++) this.fat[i * perSector + j] = u32(at + j * 4);\n });\n\n // Directory: 128-byte entries in the chain starting at the header's first directory sector\n const dirBytes = this.readChain(u32(0x30), Infinity);\n this.dir = [];\n for (let at = 0; at + 128 <= dirBytes.length; at += 128) {\n const d = new DataView(dirBytes.buffer, dirBytes.byteOffset + at, 128);\n const nameLen = Math.min(d.getUint16(64, true), 64);\n let name = '';\n for (let i = 0; i + 2 < nameLen; i += 2) name += String.fromCharCode(d.getUint16(i, true));\n // Version 3 files may leave garbage in the size's high half\n const size = sectorShift === 9 ? d.getUint32(120, true) : d.getUint32(120, true) + d.getUint32(124, true) * 2 ** 32;\n this.dir.push({ name, type: d.getUint8(66), left: d.getUint32(68, true), right: d.getUint32(72, true),\n child: d.getUint32(76, true), start: d.getUint32(116, true), size });\n }\n if (this.dir[0]?.type !== 5) throw corrupt('no root entry');\n this.walk(this.dir[0].child, '');\n }\n\n // Start of a sector, checked to hold `need` bytes (the last sector of a file may be cut short)\n private sectorOffset(sector: number, need = this.sectorSize): number {\n const at = (sector + 1) * this.sectorSize;\n if (sector > MAX_REGULAR_SECTOR || at + need > this.bytes.length) {\n throw corrupt(`sector ${sector} is outside the file`);\n }\n return at;\n }\n\n // Sibling entries form a red-black tree; children of a storage hang off its `child`\n private walk(root: number, prefix: string) {\n const stack = [root];\n const seen = new Set<number>();\n while (stack.length) {\n const id = stack.pop()!;\n if (id > MAX_REGULAR_SECTOR) continue; // NOSTREAM\n if (seen.has(id) || !this.dir[id]) throw corrupt('directory tree loops or points outside the directory');\n seen.add(id);\n const e = this.dir[id];\n stack.push(e.left, e.right);\n if (e.type !== 1 && e.type !== 2) continue;\n const path = prefix + e.name;\n this.byPath.set(path.toLowerCase(), { ...e, path });\n if (e.type === 1) this.walk(e.child, path + '/');\n }\n }\n\n private readChain(start: number, size: number, mini = false): Uint8Array {\n const table = mini ? this.miniFat! : this.fat;\n const unit = mini ? this.miniSectorSize : this.sectorSize;\n const source = mini ? this.miniStream! : this.bytes;\n const sectors: number[] = [];\n for (let s = start; s !== END_OF_CHAIN && sectors.length * unit < size; s = table[s]) {\n if (s >= table.length || sectors.length > table.length) throw corrupt(`${mini ? 'mini ' : ''}sector chain is broken or loops`);\n sectors.push(s);\n }\n const total = Math.min(size, sectors.length * unit);\n if (size !== Infinity && total < size) throw corrupt(`stream is shorter (${total} bytes) than its stated ${size}`);\n const out = new Uint8Array(total);\n sectors.forEach((s, i) => {\n const len = Math.min(unit, total - i * unit);\n const at = mini ? s * unit : this.sectorOffset(s, len);\n if (at + len > source.length) throw corrupt(`mini sector ${s} is outside the mini stream`);\n out.set(source.subarray(at, at + len), i * unit);\n });\n return out;\n }\n\n entries(): CfbEntry[] {\n return [...this.byPath.values()].map(e => ({ path: e.path, type: e.type === 1 ? 'storage' : 'stream', size: e.size }));\n }\n\n has(path: string): boolean {\n return this.byPath.get(path.toLowerCase())?.type === 2;\n }\n\n // A stream's bytes, by path (case-insensitive, as in the format); undefined if there is none\n read(path: string): Uint8Array | undefined {\n const e = this.byPath.get(path.toLowerCase());\n if (!e || e.type !== 2) return undefined;\n if (e.size >= this.miniCutoff) {\n if (e.size > this.bytes.length) throw corrupt(`stream ${e.path} is larger than the file`);\n return this.readChain(e.start, e.size);\n }\n if (!this.miniStream) {\n const root = this.dir[0];\n this.miniStream = this.readChain(root.start, root.size);\n const view = new DataView(this.bytes.buffer, this.bytes.byteOffset, this.bytes.byteLength);\n const miniFatBytes = this.readChain(view.getUint32(0x3c, true), view.getUint32(0x40, true) * this.sectorSize);\n this.miniFat = new Uint32Array(miniFatBytes.length / 4);\n const mv = new DataView(miniFatBytes.buffer, miniFatBytes.byteOffset, miniFatBytes.byteLength);\n for (let i = 0; i < this.miniFat.length; i++) this.miniFat[i] = mv.getUint32(i * 4, true);\n }\n return this.readChain(e.start, e.size, true);\n }\n}\n","import { RandomAccessReader } from './random-access';\nimport { crc32Update } from './zip-stream-writer';\nimport { isCfb } from './cfb';\n\nexport interface ZipRecord {\n filename: string;\n compressionMethod: number;\n crc: number;\n compressedSize: number;\n uncompressedSize: number;\n localHeaderOffset: number;\n}\n\nexport class ZipRandomAccessParser {\n private records = new Map<string, ZipRecord>();\n // Part names are case-insensitive in OPC: a rels target \"Sheet1.xml\" finds \"sheet1.xml\"\n private lowerCase = new Map<string, ZipRecord>();\n\n constructor(private reader: RandomAccessReader) {}\n\n async parseCentralDirectory(): Promise<void> {\n const size = this.reader.size;\n if (size < 22) throw new Error(\"File too small to be a valid ZIP.\");\n\n // The EOCD record can be anywhere in the last 65535 + 22 bytes due to an optional file comment.\n const searchSize = Math.min(size, 65535 + 22);\n const searchStart = size - searchSize;\n const buffer = await this.reader.read(searchStart, searchSize);\n \n const dataView = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n\n // Search backwards for the EOCD signature (0x06054b50). The real record's comment reaches the end\n // of the file, so the signature bytes inside a comment are skipped; failing that (junk appended\n // after the archive), the last signature is used.\n let eocdOffset = -1;\n for (let i = buffer.length - 22; i >= 0; i--) {\n if (dataView.getUint32(i, true) !== 0x06054b50) continue;\n if (eocdOffset === -1) eocdOffset = i;\n if (i + 22 + dataView.getUint16(i + 20, true) === buffer.length) {\n eocdOffset = i;\n break;\n }\n }\n\n if (eocdOffset === -1) {\n if (isCfb(buffer.subarray(0, 8)) || searchStart > 0 && isCfb(await this.reader.read(0, 8))) {\n throw new Error('This file is a compound file, not a ZIP: an .xls, or a workbook saved with a password. Decrypt it first with decryptWorkbook from @xlsxflow/pro.');\n }\n throw new Error(\"End of Central Directory (EOCD) not found. This may not be a valid ZIP file.\");\n }\n\n const totalRecords = dataView.getUint16(eocdOffset + 10, true);\n const cdOffset = dataView.getUint32(eocdOffset + 16, true);\n const cdSize = dataView.getUint32(eocdOffset + 12, true);\n if (totalRecords === 0xffff || cdOffset === 0xffffffff || cdSize === 0xffffffff) {\n throw new Error(\"ZIP64 archives are not supported.\");\n }\n\n if (cdOffset + cdSize > searchStart + eocdOffset || cdSize < 46 * totalRecords) {\n throw new Error(\"Corrupt ZIP: the central directory is outside the file or too small for its records.\");\n }\n\n // Read the Central Directory\n const cdBuffer = await this.reader.read(cdOffset, cdSize);\n const cdView = new DataView(cdBuffer.buffer, cdBuffer.byteOffset, cdBuffer.byteLength);\n\n let offset = 0;\n const textDecoder = new TextDecoder();\n\n for (let i = 0; i < totalRecords; i++) {\n if (offset + 46 > cdBuffer.length || cdView.getUint32(offset, true) !== 0x02014b50) {\n throw new Error(`Central Directory record signature mismatch at index ${i}`);\n }\n\n const compressionMethod = cdView.getUint16(offset + 10, true);\n const crc = cdView.getUint32(offset + 16, true);\n const compressedSize = cdView.getUint32(offset + 20, true);\n const uncompressedSize = cdView.getUint32(offset + 24, true);\n const filenameLength = cdView.getUint16(offset + 28, true);\n const extraFieldLength = cdView.getUint16(offset + 30, true);\n const fileCommentLength = cdView.getUint16(offset + 32, true);\n const localHeaderOffset = cdView.getUint32(offset + 42, true);\n\n if (offset + 46 + filenameLength > cdBuffer.length) {\n throw new Error(`Corrupt ZIP: central directory record ${i} runs past the directory`);\n }\n const filenameBuffer = cdBuffer.subarray(offset + 46, offset + 46 + filenameLength);\n const filename = textDecoder.decode(filenameBuffer);\n\n if (filename.includes('../') || filename.includes('..\\\\')) {\n throw new Error(`Security Exception: Path traversal detected in ZIP filename: ${filename}`);\n }\n\n const record = { filename, compressionMethod, crc, compressedSize, uncompressedSize, localHeaderOffset };\n this.records.set(filename, record);\n if (!this.lowerCase.has(filename.toLowerCase())) this.lowerCase.set(filename.toLowerCase(), record);\n\n offset += 46 + filenameLength + extraFieldLength + fileCommentLength;\n }\n\n // Entries must not share bytes: aliased names would let one small deflated entry be inflated many times\n const byOffset = [...this.records.values()].sort((a, b) => a.localHeaderOffset - b.localHeaderOffset);\n for (let i = 1; i < byOffset.length; i++) {\n const prev = byOffset[i - 1];\n if (prev.localHeaderOffset + 30 + prev.compressedSize > byOffset[i].localHeaderOffset) {\n throw new Error(`Corrupt ZIP: entries ${prev.filename} and ${byOffset[i].filename} overlap`);\n }\n }\n }\n\n has(filename: string): boolean {\n return this.records.has(filename) || this.lowerCase.has(filename.toLowerCase());\n }\n\n getFiles(): string[] {\n return Array.from(this.records.keys());\n }\n\n getRecord(filename: string): ZipRecord {\n const record = this.records.get(filename) ?? this.lowerCase.get(filename.toLowerCase());\n if (!record) throw new Error(`File ${filename} not found in ZIP.`);\n return record;\n }\n\n // Raw (still compressed) bytes of an entry, for pass-through copying.\n async extractRawStream(filename: string): Promise<ReadableStream<Uint8Array>> {\n const record = this.getRecord(filename);\n if (record.compressedSize === 0xffffffff || record.localHeaderOffset === 0xffffffff) {\n throw new Error(`ZIP64 entry not supported: ${filename}`);\n }\n\n // The local header has a variable length filename and extra field.\n if (record.localHeaderOffset + 30 > this.reader.size) {\n throw new Error(`Corrupt ZIP: entry ${filename} points past the end of the file`);\n }\n const headerBuffer = await this.reader.read(record.localHeaderOffset, 30);\n const headerView = new DataView(headerBuffer.buffer, headerBuffer.byteOffset, headerBuffer.byteLength);\n if (headerView.getUint32(0, true) !== 0x04034b50) {\n throw new Error(`Local File Header signature mismatch for ${filename}`);\n }\n const dataOffset = record.localHeaderOffset + 30 + headerView.getUint16(26, true) + headerView.getUint16(28, true);\n if (dataOffset + record.compressedSize > this.reader.size) {\n throw new Error(`Corrupt ZIP: entry ${filename} extends past the end of the file`);\n }\n return this.reader.stream(dataOffset, record.compressedSize);\n }\n\n async extractStream(filename: string): Promise<ReadableStream<Uint8Array>> {\n const record = this.getRecord(filename);\n if (record.compressionMethod !== 0 && record.compressionMethod !== 8) {\n throw new Error(`Unsupported compression method ${record.compressionMethod} for ${filename}`);\n }\n const stream = await this.extractRawStream(filename);\n const data = record.compressionMethod === 0 ? stream\n : stream.pipeThrough(new DecompressionStream('deflate-raw') as any as TransformStream<Uint8Array, Uint8Array>);\n\n // Node reports bad deflate data as a bare TypeError; name the entry instead\n const inflated = data.getReader();\n let total = 0;\n let crc = 0xffffffff;\n return new ReadableStream<Uint8Array>({\n async pull(controller) {\n try {\n const { done, value } = await inflated.read();\n if (done) {\n // Changed bytes must fail, not read as different data\n if (total !== record.uncompressedSize || ((crc ^ 0xffffffff) >>> 0) !== record.crc) {\n return controller.error(new Error(`Corrupt ZIP entry ${filename}: its data does not match the size and CRC-32 in the directory`));\n }\n return controller.close();\n }\n crc = crc32Update(crc, value);\n // The directory states each entry's size; inflating past it means a crafted entry (a zip bomb)\n total += value.length;\n if (total > record.uncompressedSize) {\n await inflated.cancel();\n return controller.error(new Error(`Corrupt ZIP entry ${filename}: inflates past its stated size of ${record.uncompressedSize} bytes`));\n }\n controller.enqueue(value);\n } catch (err: any) {\n const detail = err?.cause?.message || err?.message || String(err);\n controller.error(new Error(`Corrupt ZIP entry ${filename}: ${detail}`, { cause: err }));\n }\n },\n cancel(reason) {\n return inflated.cancel(reason);\n }\n });\n }\n}\n","export type XmlToken =\n | { type: 'startElement', name: string, attributes: Record<string, string> }\n | { type: 'endElement', name: string }\n | { type: 'text', value: string };\n\nfunction codePoint(cp: number, fallback: string): string {\n // Out-of-range references (e.g. �) are left as written instead of aborting the parse\n return cp <= 0x10ffff ? String.fromCodePoint(cp) : fallback;\n}\n\nfunction unescapeXml(text: string): string {\n if (text.indexOf('&') === -1) return text;\n return text.replace(/&(?:amp|lt|gt|quot|apos|#x[0-9a-fA-F]+|#\\d+);/g, (match) => {\n switch (match) {\n case '&': return '&';\n case '<': return '<';\n case '>': return '>';\n case '"': return '\"';\n case ''': return \"'\";\n default:\n if (match.startsWith('&#x')) return codePoint(parseInt(match.slice(3, -1), 16), match);\n return codePoint(parseInt(match.slice(2, -1), 10), match);\n }\n });\n}\n\n// XML end-of-line handling: literal CRLF / CR become LF (escaped survives, it's decoded later)\nfunction normalizeEol(text: string): string {\n return text.indexOf('\\r') === -1 ? text : text.replace(/\\r\\n?/g, '\\n');\n}\n\nfunction stripNamespace(name: string): string {\n const colonIdx = name.indexOf(':');\n return colonIdx !== -1 ? name.slice(colonIdx + 1) : name;\n}\n\ntype Pending = 'text' | 'tag' | 'cdata' | 'comment' | null;\n\n// Emits one array of tokens per input chunk. Per-token stream chunks cost a promise round-trip\n// each (~5 per cell), which dominated read time; batching removes that overhead.\nexport function createXmlBatchParser(): TransformStream<Uint8Array, XmlToken[]> {\n let decoder: TextDecoder | undefined;\n let buffer = '';\n let isFirstChunk = true;\n\n // When a construct spans chunks, remember how far it was already scanned (and the quote state\n // inside a tag) so the next chunk resumes there. Rescanning from the start is O(n^2) on a\n // hostile file with one huge tag / text node / CDATA section.\n let pending: Pending = null;\n let scanFrom = 0;\n let pendingQuote = '';\n\n return new TransformStream({\n transform(chunk, controller) {\n // XML parsers must read UTF-16 as well as UTF-8; a UTF-16 part starts with its byte-order mark\n decoder ??= new TextDecoder(chunk[0] === 0xff && chunk[1] === 0xfe ? 'utf-16le' : chunk[0] === 0xfe && chunk[1] === 0xff ? 'utf-16be' : 'utf-8');\n buffer += decoder.decode(chunk, { stream: true });\n if (isFirstChunk) {\n if (buffer.charCodeAt(0) === 0xFEFF) {\n buffer = buffer.slice(1);\n }\n isFirstChunk = false;\n }\n\n const out: XmlToken[] = [];\n let index = 0;\n const resumed = pending;\n pending = null;\n\n while (index < buffer.length) {\n const resumeAt = (kind: Pending, from: number) => (index === 0 && resumed === kind ? Math.max(from, scanFrom) : from);\n\n const tagStart = buffer.indexOf('<', resumeAt('text', index));\n if (tagStart === -1) {\n // No more tags: keep the rest (from index) for the next chunk\n pending = 'text';\n scanFrom = buffer.length;\n break;\n }\n\n if (tagStart > index) {\n out.push({ type: 'text', value: unescapeXml(normalizeEol(buffer.slice(index, tagStart))) });\n }\n\n if (buffer.startsWith('<![CDATA[', tagStart)) {\n const cdataEnd = buffer.indexOf(']]>', resumeAt('cdata', tagStart + 9) - (resumed === 'cdata' && index === 0 ? 2 : 0));\n if (cdataEnd === -1) {\n pending = 'cdata';\n scanFrom = buffer.length;\n index = tagStart; // incomplete: resume here next chunk\n break;\n }\n out.push({ type: 'text', value: normalizeEol(buffer.slice(tagStart + 9, cdataEnd)) }); // CDATA is not escaped\n index = cdataEnd + 3;\n continue;\n }\n\n if (buffer.startsWith('<!--', tagStart)) {\n const commentEnd = buffer.indexOf('-->', resumeAt('comment', tagStart + 4) - (resumed === 'comment' && index === 0 ? 2 : 0));\n if (commentEnd === -1) {\n pending = 'comment';\n scanFrom = buffer.length;\n index = tagStart; // incomplete: resume here next chunk\n break;\n }\n index = commentEnd + 3;\n continue;\n }\n\n // Find the closing '>' outside quoted attribute values\n const resuming = index === 0 && resumed === 'tag';\n let tagEnd = -1;\n let quote = resuming ? pendingQuote : '';\n for (let i = resuming ? Math.max(scanFrom, tagStart + 1) : tagStart + 1; i < buffer.length; i++) {\n const char = buffer.charCodeAt(i);\n if (quote) {\n if (char === quote.charCodeAt(0)) quote = '';\n } else if (char === 34 /* \" */ || char === 39 /* ' */) {\n quote = buffer[i];\n } else if (char === 62 /* > */) {\n tagEnd = i;\n break;\n }\n }\n\n if (tagEnd === -1) {\n pending = 'tag';\n pendingQuote = quote;\n scanFrom = buffer.length;\n index = tagStart; // incomplete: resume here next chunk\n break;\n }\n\n const tagContent = buffer.slice(tagStart + 1, tagEnd);\n index = tagEnd + 1;\n\n if (tagContent.startsWith('/')) {\n out.push({ type: 'endElement', name: stripNamespace(tagContent.slice(1).trim()) });\n } else if (tagContent.startsWith('?')) {\n // XML declaration, ignore\n } else if (tagContent.startsWith('!')) {\n // DOCTYPE or other DTD declarations, ignore\n } else {\n // Parse start element and attributes; any XML whitespace may separate the name from attributes\n const isSelfClosing = tagContent.endsWith('/');\n const content = isSelfClosing ? tagContent.slice(0, -1) : tagContent;\n const ws = content.search(/\\s/);\n const name = stripNamespace(ws === -1 ? content : content.slice(0, ws));\n const attributes: Record<string, string> = {};\n\n if (ws !== -1) readAttributes(content, ws, attributes);\n\n out.push({ type: 'startElement', name, attributes });\n if (isSelfClosing) out.push({ type: 'endElement', name });\n }\n }\n buffer = buffer.slice(index);\n scanFrom -= index;\n if (out.length) controller.enqueue(out);\n },\n flush(controller) {\n buffer += decoder?.decode() ?? '';\n // Handle trailing text if any\n if (buffer.length > 0 && pending !== 'tag' && pending !== 'cdata' && pending !== 'comment') {\n controller.enqueue([{ type: 'text', value: unescapeXml(normalizeEol(buffer)) }]);\n }\n }\n });\n}\n\n// name=\"value\" pairs from i on, in one pass: a regex here backtracks quadratically on junk like <c aaaa…>\nconst isSpace = (c: string) => c === ' ' || c === '\\n' || c === '\\t' || c === '\\r';\nfunction readAttributes(s: string, i: number, attributes: Record<string, string>) {\n const n = s.length;\n while (i < n) {\n while (i < n && isSpace(s[i])) i++;\n const start = i;\n while (i < n && !isSpace(s[i]) && s[i] !== '=') i++;\n const name = s.slice(start, i);\n while (i < n && isSpace(s[i])) i++;\n if (s[i] !== '=') { if (i === start) i++; continue; }\n i++;\n while (i < n && isSpace(s[i])) i++;\n const quote = s[i];\n if (quote !== '\"' && quote !== \"'\") continue;\n const end = s.indexOf(quote, i + 1);\n if (end === -1) return;\n if (/^[a-zA-Z0-9_:.-]+$/.test(name)) attributes[stripNamespace(name)] = unescapeXml(normalizeEol(s.slice(i + 1, end)));\n i = end + 1;\n }\n}\n\n// Token-at-a-time view of createXmlBatchParser, kept for API compatibility.\nexport function createXmlStreamParser(): { readable: ReadableStream<XmlToken>; writable: WritableStream<Uint8Array> } {\n const batches = createXmlBatchParser();\n const flatten = new TransformStream<XmlToken[], XmlToken>({\n transform(batch, controller) {\n for (const token of batch) controller.enqueue(token);\n }\n });\n return { writable: batches.writable, readable: batches.readable.pipeThrough(flatten) };\n}\n","import type { ParseResult, CellValue } from './worksheet-parser';\n\nexport async function sheetToJson<T = Record<string, CellValue>>(\n parseResult: ParseResult,\n headerRowIndex: number = 0\n): Promise<T[]> {\n const results: T[] = [];\n let headers: string[] = [];\n let skip = headerRowIndex; // rows above the header, counted as the reader yields them\n\n for await (const row of parseResult) {\n if (skip-- > 0) continue;\n if (headers.length === 0) {\n const seen = new Set<string>();\n headers = row.cells.map((c, i) => {\n const base = c !== null && c !== undefined ? String(c) : `Column${i + 1}`;\n // A repeated header gets a suffix (\"Name_2\") so its column isn't lost\n let name = base;\n for (let n = 2; seen.has(name); n++) name = `${base}_${n}`;\n seen.add(name);\n return name;\n });\n continue;\n }\n\n // Values right of the header row get their own column name, as blank headers do\n for (let i = headers.length; i < row.cells.length; i++) {\n if (row.cells[i] === null || row.cells[i] === undefined) continue;\n let name = `Column${i + 1}`;\n for (let n = 2; headers.includes(name); n++) name = `Column${i + 1}_${n}`;\n while (headers.length < i) headers.push(`Column${headers.length + 1}`);\n headers.push(name);\n }\n const obj: any = {};\n for (let i = 0; i < headers.length; i++) {\n const value = row.cells[i] ?? null;\n // A \"__proto__\" header must be an ordinary key, not a prototype change\n if (headers[i] === '__proto__') Object.defineProperty(obj, '__proto__', { value, enumerable: true, writable: true, configurable: true });\n else obj[headers[i]] = value;\n }\n results.push(obj as T);\n }\n\n return results;\n}\n\nfunction escapeCsv(val: any): string {\n if (val === null || val === undefined) return '';\n const str = String(val);\n if (str.includes(',') || str.includes('\"') || str.includes('\\n') || str.includes('\\r')) {\n return `\"${str.replace(/\"/g, '\"\"')}\"`;\n }\n return str;\n}\n\nexport async function streamToCsv(parseResult: ParseResult): Promise<string> {\n const rows: string[] = [];\n let last = 0;\n for await (const row of parseResult) {\n // Rows missing between rows are blank lines, as in Excel's CSV export, so nothing shifts up\n for (let gap = last ? row.rowNumber - last - 1 : 0; gap > 0; gap--) rows.push('');\n last = row.rowNumber;\n rows.push(row.cells.map(escapeCsv).join(','));\n }\n return rows.join('\\n');\n}\n\nexport function attr(tag: string, name: string): string | null {\n const m = new RegExp(`\\\\s${name}\\\\s*=\\\\s*(?:\"([^\"]*)\"|'([^']*)')`).exec(tag);\n if (!m) return null;\n return unescapeXml(m[1] ?? m[2]);\n}\n\n// Resolves a relationship Target against the directory of the part that owns the .rels file.\nfunction resolveTarget(baseDir: string, target: string): string {\n const parts = (target.startsWith('/') ? target.slice(1) : baseDir + target).split('/');\n const out: string[] = [];\n for (const p of parts) {\n if (p === '..') out.pop();\n else if (p !== '.' && p !== '') out.push(p);\n }\n return out.join('/');\n}\n\nexport interface Relationship { id: string; type: string; path: string; external: boolean }\n\nfunction parseRels(relsXml: string, baseDir: string): Relationship[] {\n const rels: Relationship[] = [];\n for (const [tag] of relsXml.matchAll(/<(?:\\w+:)?Relationship\\b[^>]*>/g)) {\n const id = attr(tag, 'Id');\n const target = attr(tag, 'Target');\n if (!id || !target) continue;\n // External targets (hyperlink URLs) are kept verbatim, not resolved as package paths\n const external = attr(tag, 'TargetMode') === 'External';\n rels.push({ id, type: attr(tag, 'Type') ?? '', path: external ? target : resolveTarget(baseDir, target), external });\n }\n return rels;\n}\n\nexport const dirOf = (path: string) => path.slice(0, path.lastIndexOf('/') + 1);\nexport const relsPathOf = (path: string) => `${dirOf(path)}_rels/${path.slice(path.lastIndexOf('/') + 1)}.rels`;\n// Relationship types end the same way in Transitional and Strict OOXML\nconst byType = (rels: Relationship[], suffix: string) => rels.find(r => !r.external && r.type.endsWith(suffix))?.path;\n\nexport interface WorkbookParts {\n workbookPath: string;\n workbookXml: string;\n sheets: Map<string, string>; // sheet name -> ZIP entry path, in tab order\n chartsheets: Set<string>; // paths in `sheets` that are chart sheets (no cells)\n sharedStrings?: string;\n styles?: string;\n theme?: string;\n}\n\n// Locates the workbook and its parts through the package relationships instead of assuming xl/ names.\nexport async function resolveWorkbookParts(readText: (path: string) => Promise<string>): Promise<WorkbookParts> {\n const rootRels = parseRels(await readText('_rels/.rels'), '');\n const workbookPath = byType(rootRels, '/officeDocument') ?? 'xl/workbook.xml';\n const workbookXml = await readText(workbookPath);\n const rels = parseRels(await readText(relsPathOf(workbookPath)), dirOf(workbookPath));\n\n const sheets = new Map<string, string>();\n const chartsheets = new Set<string>();\n for (const [tag] of workbookXml.matchAll(/<(?:\\w+:)?sheet\\b[^>]*>/g)) {\n const name = attr(tag, 'name');\n const rId = attr(tag, 'r:id') ?? attr(tag, '\\\\w+:id');\n const rel = rId ? rels.find(r => r.id === rId && !r.external) : undefined;\n if (name && rel) sheets.set(name, rel.path);\n if (rel?.type.endsWith('/chartsheet')) chartsheets.add(rel.path);\n }\n return {\n workbookPath, workbookXml, sheets, chartsheets,\n sharedStrings: byType(rels, '/sharedStrings'), styles: byType(rels, '/styles'), theme: byType(rels, '/theme'),\n };\n}\n\n// The relationships of any part (its _rels/<name>.rels), targets resolved to ZIP paths unless external\nexport async function partRelationships(readText: (path: string) => Promise<string>, partPath: string): Promise<Relationship[]> {\n return parseRels(await readText(relsPathOf(partPath)), dirOf(partPath));\n}\n\n// Relationship id -> target of a worksheet's hyperlinks (from its .rels part)\nexport async function hyperlinkTargets(readText: (path: string) => Promise<string>, sheetPath: string): Promise<Map<string, string>> {\n const rels = await partRelationships(readText, sheetPath);\n return new Map(rels.filter(r => r.type.endsWith('/hyperlink')).map(r => [r.id, r.path]));\n}\n\n// Maps sheet name -> ZIP entry path for a workbook at xl/workbook.xml, in tab order.\nexport function resolveSheetPaths(workbookXml: string, relsXml: string): Map<string, string> {\n const rels = parseRels(relsXml, 'xl/');\n const paths = new Map<string, string>();\n for (const [tag] of workbookXml.matchAll(/<(?:\\w+:)?sheet\\b[^>]*>/g)) {\n const name = attr(tag, 'name');\n const rId = attr(tag, 'r:id') ?? attr(tag, '\\\\w+:id');\n const rel = rId ? rels.find(r => r.id === rId && !r.external) : undefined;\n if (name && rel) paths.set(name, rel.path);\n }\n return paths;\n}\n\n// Decodes OOXML ST_Xstring escapes (_x000D_ = CR, _x005F_ = literal underscore).\nexport function decodeXString(s: string): string {\n if (s.indexOf('_x') === -1) return s;\n return s.replace(/_x([0-9A-Fa-f]{4})_/g, (_, h) => String.fromCharCode(parseInt(h, 16)));\n}\n\n// Excel's sheet size (A..XFD, 1..1048576)\nexport const MAX_COLUMNS = 16384;\nexport const MAX_ROWS = 1048576;\n// Excel's limit on the characters in one cell\nexport const MAX_CELL_TEXT = 32767;\n\nexport function checkCellText(s: string, ref: string): string {\n if (s.length > MAX_CELL_TEXT) throw new Error(`Cell ${ref} has ${s.length} characters, more than Excel's ${MAX_CELL_TEXT}.`);\n return s;\n}\n\n// Colours are ARGB hex (\"FFFF0000\"); \"FF0000\" and \"#FF0000\" get an opaque alpha. Anything else\n// makes Excel repair the file.\nexport function argb(c: string): string {\n const m = /^#?([0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/.exec(String(c));\n if (!m) throw new Error(`Invalid colour \"${c}\": use ARGB hex such as \"FFFF0000\".`);\n return (m[1].length === 6 ? 'FF' + m[1] : m[1]).toUpperCase();\n}\n\n// 0-based column of letters like \"BC\" (or a reference like \"BC12\"); -1 when there are none\nexport function colIndex(ref: string): number {\n const match = ref.match(/[A-Za-z]+/);\n if (!match) return -1;\n const letters = match[0].toUpperCase();\n let idx = 0;\n for (let i = 0; i < letters.length; i++) idx = idx * 26 + (letters.charCodeAt(i) - 64);\n return idx - 1;\n}\n\n// 0-based column index -> letters (0 -> A, 26 -> AA)\nexport function colLetter(index: number): string {\n let col = '';\n for (let c = index + 1; c > 0; c = Math.floor((c - 1) / 26)) col = String.fromCharCode(((c - 1) % 26) + 65) + col;\n return col;\n}\n\n// A1 cell refs, whole-column (A:C) and whole-row (1:3) ranges. The lookarounds keep function names\n// (LOG10(), ATAN2()) and unquoted sheet names (Q1!A1) from being taken for references.\nconst REF_RE = /(?<![A-Za-z0-9_.$])(?:(\\$?)([A-Za-z]{1,3})(\\$?)(\\d+)(?![A-Za-z0-9_(!])|(\\$?)([A-Za-z]{1,3}):(\\$?)([A-Za-z]{1,3})(?![A-Za-z0-9_(!])|(\\$?)(\\d+):(\\$?)(\\d+)(?![0-9!]))/g;\n\n// How a reference sits in the formula: alone, or as the first / last cell of a range\nexport type RefRole = 'single' | 'start' | 'end';\n// Returns the new 0-based column / 1-based row, or null when the reference no longer exists (#REF!).\n// `sheet` is the sheet qualifier written before the reference, if any (unquoted).\nexport type RefMapper = (value: number, absolute: boolean, role: RefRole, sheet: string | undefined) => number | null;\n\nconst unquoteSheet = (quoted: string) => quoted.slice(1, -1).replace(/''/g, \"'\");\n\n// Rewrites every A1 reference in a formula through mapCol / mapRow. String literals are left alone.\n// A reference moved off the sheet, or a range turned inside out, becomes #REF!.\nexport function mapFormulaRefs(formula: string, mapCol: RefMapper, mapRow: RefMapper): string {\n const parts = formula.split(/(\"(?:[^\"]|\"\")*\"|'(?:[^']|'')*')/);\n for (let i = 0; i < parts.length; i += 2) {\n const part = parts[i];\n let prevEnd = -1;\n let prevSheet: string | undefined;\n let prevRow = 0;\n let prevCol = 0;\n parts[i] = part.replace(REF_RE, (m: string, ...g: any[]) => {\n const offset: number = g[12];\n const before = part.slice(0, offset);\n const isEnd = before.endsWith(':') && prevEnd === offset - 1;\n let sheet: string | undefined;\n if (isEnd) sheet = prevSheet;\n else if (before.endsWith('!')) {\n // [1]Sheet!A1 points into another workbook: \"[\" can't be in a sheet name, so no sheet matches it\n const plain = /(\\]?)([A-Za-z0-9_.\\u00C0-\\uFFFF]+)!$/.exec(before);\n sheet = plain ? (plain[1] ? `[external]${plain[2]}` : plain[2])\n : offset === 1 && i > 0 && parts[i - 1].startsWith(\"'\") ? unquoteSheet(parts[i - 1]) : undefined;\n }\n const role: RefRole = isEnd ? 'end' : part[offset + m.length] === ':' ? 'start' : 'single';\n // The end of a range pushed past the sheet's edge stays at the edge, as in Excel (SUM(B1:B1048576))\n const col = (abs: string, letters: string, r: RefRole) => {\n let c = mapCol(colIndex(letters), !!abs, r, sheet);\n if (c !== null && c >= MAX_COLUMNS && r === 'end' && colIndex(letters) < MAX_COLUMNS) c = MAX_COLUMNS - 1;\n return c !== null && c >= 0 && c < MAX_COLUMNS ? abs + colLetter(c) : null;\n };\n const row = (abs: string, digits: string, r: RefRole) => {\n let n = mapRow(parseInt(digits, 10), !!abs, r, sheet);\n if (n !== null && n > MAX_ROWS && r === 'end' && parseInt(digits, 10) <= MAX_ROWS) n = MAX_ROWS;\n return n !== null && n >= 1 && n <= MAX_ROWS ? n : null;\n };\n prevEnd = offset + m.length;\n prevSheet = sheet;\n let out: string | null;\n if (g[1] !== undefined) {\n const c = col(g[0], g[1], role), r = row(g[2], g[3], role);\n const ci = c === null ? 0 : colIndex(c.replace('$', ''));\n // The end of a range must not land above or left of its start (rows or columns removed under it)\n const inverted = role === 'end' && (r !== null && r < prevRow || c !== null && ci < prevCol);\n prevRow = r ?? 0;\n prevCol = ci;\n out = c === null || r === null || inverted ? null : c + g[2] + r;\n } else if (g[5] !== undefined) {\n const a = col(g[4], g[5], 'start'), b = col(g[6], g[7], 'end');\n out = a === null || b === null || colIndex(b.replace('$', '')) < colIndex(a.replace('$', '')) ? null : `${a}:${b}`;\n } else {\n const a = row(g[8], g[9], 'start'), b = row(g[10], g[11], 'end');\n out = a === null || b === null || b < a ? null : `${g[8]}${a}:${g[10]}${b}`;\n }\n return out ?? '#REF!';\n // A range with a dead end is dead as a whole\n }).replace(/\\$?[A-Za-z]{1,3}\\$?\\d+:#REF!|#REF!:\\$?[A-Za-z]{1,3}\\$?\\d+/g, '#REF!');\n }\n return parts.join('');\n}\n\n// Moves the relative references of a formula by (rows, cols), as Excel does when it fills a shared\n// formula from its anchor cell into the other cells of the range. Absolute parts ($A$1) stay put.\nexport function shiftFormula(formula: string, rows: number, cols: number): string {\n if (!rows && !cols) return formula;\n return mapFormulaRefs(formula, (c, abs) => (abs ? c : c + cols), (r, abs) => (abs ? r : r + rows));\n}\n\n// Date -> Excel 1900-system serial (UTC). Serials 1..60 sit one day early because of Excel's\n// phantom 1900-02-29, mirroring excelToIsoDate on the read side.\n// Dates before 1900-01-01 have no serial in Excel; they come out as small/negative numbers.\nexport function dateToSerial(d: Date): number {\n const serial = (d.getTime() - Date.UTC(1899, 11, 30)) / 86400000;\n return serial >= 2 && serial < 61 ? serial - 1 : serial;\n}\n\n// Inverse of decodeXString: literal \"_xHHHH_\" text is protected, and characters XML cannot carry\n// (control characters) or would normalise away (CR) are written as escapes.\nexport function encodeXString(s: string): string {\n return s\n .replace(/_(?=x[0-9A-Fa-f]{4}_)/g, '_x005F_')\n .replace(/[\\x00-\\x08\\x0B\\x0C\\r\\x0E-\\x1F\\uFFFE\\uFFFF]/g, c => `_x${c.charCodeAt(0).toString(16).toUpperCase().padStart(4, '0')}_`);\n}\n\n// The format SheetWriter gives a date without one: the time only when there is one\nexport const defaultDateFormat = (d: Date) => d.getTime() % 86400000 === 0 ? 'yyyy-mm-dd' : 'yyyy-mm-dd hh:mm:ss';\n\n// True when a number format renders dates/times. Ignores quoted text, escapes, colours and\n// locale tags, so \"0 \\\"days\\\"\", \"[Red]0.0\" and \"#,##0 \\\"USD\\\"\" are not mistaken for dates.\nexport function isDateFormatCode(code: string): boolean {\n const stripped = code\n .replace(/\"[^\"]*\"/g, '')\n .replace(/\\\\./g, '')\n .replace(/[_*]./g, '')\n .replace(/\\[(?!(?:h+|m+|s+)\\])[^\\]]*\\]/gi, ''); // keep elapsed-time [h] [mm] [ss]\n return /[ymdhs]/i.test(stripped) || /\\[(?:h+|m+|s+)\\]/i.test(stripped);\n}\n\n// After cells change, cached formula results are stale: mark the workbook for a full recalculation\n// on open, and drop the calculation chain, which lists formula cells by address (Excel reports a\n// broken file when a listed cell no longer holds a formula). Returns the parts to rewrite and the\n// parts to leave out of the package.\nexport async function recalcOnOpen(\n readText: (path: string) => Promise<string>,\n parts: WorkbookParts,\n workbookXml = parts.workbookXml,\n): Promise<{ replace: Map<string, string>; drop: Set<string> }> {\n let wb = workbookXml;\n if (/<(?:\\w+:)?calcPr\\b/.test(wb)) {\n wb = wb.replace(/<((?:\\w+:)?)calcPr\\b([^>]*?)(\\/?)>/, (_m, p: string, attrs: string, slash: string) =>\n `<${p}calcPr${attrs.replace(/\\sfullCalcOnLoad=\"[^\"]*\"/, '')} fullCalcOnLoad=\"1\"${slash}>`);\n } else {\n // calcPr comes before these in CT_Workbook\n const p = /<((?:\\w+:)?)workbook\\b/.exec(wb)?.[1] ?? '';\n const at = wb.search(/<(?:\\w+:)?(?:oleSize|customWorkbookViews|pivotCaches|smartTagPr|smartTagTypes|webPublishing|fileRecoveryPr|webPublishObjects|extLst)\\b|<\\/(?:\\w+:)?workbook>/);\n wb = wb.slice(0, at) + `<${p}calcPr fullCalcOnLoad=\"1\"/>` + wb.slice(at);\n }\n const replace = new Map([[parts.workbookPath, wb]]);\n const drop = new Set<string>();\n const calcChain = (await partRelationships(readText, parts.workbookPath)).find(r => r.type.endsWith('/calcChain'))?.path;\n if (calcChain) {\n drop.add(calcChain);\n const relsPath = relsPathOf(parts.workbookPath);\n replace.set(relsPath, (await readText(relsPath)).replace(/<(?:\\w+:)?Relationship\\b[^>]*?Type=\"[^\"]*\\/calcChain\"[^>]*\\/>/, ''));\n const escaped = calcChain.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n replace.set('[Content_Types].xml', (await readText('[Content_Types].xml'))\n .replace(new RegExp(`<(?:\\\\w+:)?Override\\\\b[^>]*?PartName=\"/${escaped}\"[^>]*/>`), ''));\n }\n return { replace, drop };\n}\n\n// Excel refuses to open a workbook that breaks these rules\nexport function validateSheetName(name: string, existing: Iterable<string>): void {\n if (!name || name.length > 31 || /[\\\\/?*:[\\]\\x00-\\x1F\\uFFFE\\uFFFF]/.test(name) || name.startsWith(\"'\") || name.endsWith(\"'\")) {\n throw new Error(`Invalid sheet name \"${name}\": 1-31 characters, none of \\\\ / ? * : [ ] or control characters, and no leading or trailing apostrophe.`);\n }\n for (const other of existing) {\n if (other.toLowerCase() === name.toLowerCase()) throw new Error(`Duplicate sheet name \"${name}\".`);\n }\n}\n\n// Characters XML 1.0 can't carry at all. Text that allows _xHHHH_ escapes keeps them through\n// encodeXString first; anywhere else (names, properties, formulas) they are dropped.\nexport const INVALID_XML_CHARS = /[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\uFFFE\\uFFFF]/g;\nexport const escapeXml = (val: string) =>\n val.replace(INVALID_XML_CHARS, '').replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\"/g, '"');\nexport const escapeRe = (s: string) => s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n// Out-of-range references (�) stay as written instead of throwing\nconst fromCodePoint = (cp: number, m: string) => (cp <= 0x10ffff ? String.fromCodePoint(cp) : m);\nexport const unescapeXml = (s: string) =>\n s.replace(/&(?:#x([0-9a-fA-F]+)|#(\\d+)|(amp|lt|gt|quot|apos));/g, (m, hex, dec, name) =>\n hex ? fromCodePoint(parseInt(hex, 16), m) : dec ? fromCodePoint(parseInt(dec, 10), m)\n : ({ amp: '&', lt: '<', gt: '>', quot: '\"', apos: \"'\" } as Record<string, string>)[name] ?? m);\n\n// Elements named by `names` (an alternation such as 'comment' or 'a|b'), any prefix, in document order.\n// One pass with indexOf: lazy regexes like <x>[\\s\\S]*?</x> restart at every opener and turn quadratic\n// when the closing tag is missing. Same-name nesting is not supported; an unclosed element ends the scan.\nexport function* xmlElements(xml: string, names: string): Generator<{ name: string; attrs: string; body: string; whole: string }> {\n const opener = new RegExp(`<(\\\\w+:)?(${names})(?=[\\\\s/>])`, 'y');\n for (let i = xml.indexOf('<'); i !== -1; i = xml.indexOf('<', i)) {\n opener.lastIndex = i;\n const m = opener.exec(xml);\n if (!m) { i++; continue; }\n const gt = xml.indexOf('>', opener.lastIndex);\n if (gt === -1) return;\n if (xml[gt - 1] === '/') {\n yield { name: m[2], attrs: xml.slice(opener.lastIndex, gt - 1), body: '', whole: xml.slice(i, gt + 1) };\n i = gt + 1;\n continue;\n }\n const close = `</${m[1] ?? ''}${m[2]}>`;\n const end = xml.indexOf(close, gt);\n if (end === -1) return;\n yield { name: m[2], attrs: xml.slice(opener.lastIndex, gt), body: xml.slice(gt + 1, end), whole: xml.slice(i, end + close.length) };\n i = end + close.length;\n }\n}\n","import type { CellFont } from './types';\n\n// Excel's default indexed palette (ECMA-376 Part 1, 18.8.27); 64/65 are the system text/background colours\nconst DEFAULT_INDEXED = (\n '000000FFFFFFFF000000FF000000FFFFFF00FF00FF00FFFF' +\n '000000FFFFFFFF000000FF000000FFFFFF00FF00FF00FFFF' +\n '800000008000000080808000800080008080C0C0C0808080' +\n '9999FF993366FFFFCCCCFFFF660066FF80800066CCCCCCFF' +\n '000080FF00FFFFFF0000FFFF8000808000000080800000FF' +\n '00CCFFCCFFFFCCFFCCFFFF9999CCFFFF99CCCC99FFFFCC99' +\n '3366FF33CCCC99CC00FFCC00FF9900FF6600666699969696' +\n '003366339966003300333300993300993366333399333333' +\n '000000FFFFFF'\n).match(/.{6}/g)!.map(hex => 'FF' + hex);\n\n// Theme colour slots in the order Excel indexes them: lt1/dk1 and lt2/dk2 are swapped relative to the XML\nconst THEME_SLOTS = ['lt1', 'dk1', 'lt2', 'dk2', 'accent1', 'accent2', 'accent3', 'accent4', 'accent5', 'accent6', 'hlink', 'folHlink'];\n\nexport function parseThemeColors(themeXml: string): string[] {\n const scheme = /<(?:\\w+:)?clrScheme\\b[\\s\\S]*?<\\/(?:\\w+:)?clrScheme>/.exec(themeXml)?.[0] ?? '';\n return THEME_SLOTS.map(slot => {\n const body = new RegExp(`<(?:\\\\w+:)?${slot}>([\\\\s\\\\S]*?)</(?:\\\\w+:)?${slot}>`).exec(scheme)?.[1] ?? '';\n const hex = /srgbClr\\s+val=\"([0-9A-Fa-f]{6})\"/.exec(body)?.[1] ?? /lastClr=\"([0-9A-Fa-f]{6})\"/.exec(body)?.[1];\n return hex ? 'FF' + hex.toUpperCase() : '';\n });\n}\n\n// Excel's tint: scale HSL lightness towards black (tint < 0) or white (tint > 0).\n// Float HSL lands within 2 per channel of Excel's rendering; Excel's exact rounding is undocumented.\nfunction applyTint(argb: string, tint: number): string {\n const [r, g, b] = [2, 4, 6].map(i => parseInt(argb.slice(i, i + 2), 16) / 255);\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h = 0, s = 0, l = (max + min) / 2;\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = max === r ? (g - b) / d + (g < b ? 6 : 0) : max === g ? (b - r) / d + 2 : (r - g) / d + 4;\n h /= 6;\n }\n l = tint < 0 ? l * (1 + tint) : l * (1 - tint) + tint;\n const hue = (p: number, q: number, t: number) => {\n t = (t + 1) % 1;\n return t < 1 / 6 ? p + (q - p) * 6 * t : t < 1 / 2 ? q : t < 2 / 3 ? p + (q - p) * (2 / 3 - t) * 6 : p;\n };\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s, p = 2 * l - q;\n const rgb = s === 0 ? [l, l, l] : [hue(p, q, h + 1 / 3), hue(p, q, h), hue(p, q, h - 1 / 3)];\n return argb.slice(0, 2) + rgb.map(c => Math.round(c * 255).toString(16).padStart(2, '0')).join('').toUpperCase();\n}\n\nexport type ColorResolver = (attrs: Record<string, string>) => string | undefined;\n\n// Turns a CT_Color (rgb / theme / indexed, optional tint) into ARGB hex; \"auto\" and unknown slots give undefined\nexport function colorResolver(theme: string[], indexed: string[] = DEFAULT_INDEXED): ColorResolver {\n return a => {\n let argb: string | undefined;\n if (a['rgb']) argb = a['rgb'].length === 6 ? 'FF' + a['rgb'] : a['rgb'];\n else if (a['theme'] !== undefined) argb = theme[parseInt(a['theme'], 10)] || undefined;\n else if (a['indexed'] !== undefined) argb = (indexed[parseInt(a['indexed'], 10)] ?? DEFAULT_INDEXED[parseInt(a['indexed'], 10)]) || undefined;\n if (!argb || !/^[0-9A-Fa-f]{8}$/.test(argb)) return undefined;\n const tint = Number(a['tint'] || 0);\n return tint ? applyTint(argb.toUpperCase(), Math.max(-1, Math.min(1, tint))) : argb.toUpperCase();\n };\n}\n\n// One child element of <font> (styles) or <rPr> (rich text runs). Returns false for unrelated elements.\nexport function applyFontElement(font: CellFont, name: string, a: Record<string, string>, color: (a: Record<string, string>) => void): boolean {\n const on = a['val'] !== '0' && a['val'] !== 'false';\n switch (name) {\n case 'b': font.bold = on; return true;\n case 'i': font.italic = on; return true;\n case 'u': font.underline = a['val'] !== 'none'; return true;\n case 'sz': font.size = Number(a['val']); return true;\n case 'name': case 'rFont': font.name = a['val']; return true;\n case 'color': color(a); return true;\n }\n return false;\n}\n","// Renders cell values the way Excel (en-US) displays them for a number format code.\n\nconst MONTHS = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\nconst DAYS = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n\n// t: lit, num (0 # ? . , % / E+ E-), date (y m d h s, and n for minutes), elapsed ([h] [m] [s]), ampm, text (@), general\ninterface Tok { t: string; v: string; n?: number }\ninterface Section { toks: Tok[]; cond?: [string, number]; date: boolean; text: boolean }\n\nconst cache = new Map<string, Section[]>();\n\nexport function formatValue(value: number | string | boolean | Date | null | undefined, code: string, date1904 = false): string {\n if (value == null) return '';\n if (typeof value === 'boolean') return value ? 'TRUE' : 'FALSE';\n if (value instanceof Date) value = toSerial(value, date1904);\n let secs = cache.get(code);\n if (!secs) {\n if (cache.size >= 1000) cache.clear(); // codes come from files, so keep the cache bounded\n cache.set(code, secs = splitSections(code.trim() ? code : 'General').map(parseSection));\n }\n const text = secs.length === 4 ? secs[3] : secs[secs.length - 1].text ? secs[secs.length - 1] : undefined;\n if (typeof value === 'string') return text ? text.toks.map(t => t.t === 'text' ? value : t.v).join('') : value;\n if (!Number.isFinite(value)) return String(value);\n const [sec, signed] = pick(secs.slice(0, text ? secs.length - 1 : 3), value);\n if (!sec) return general(value);\n const neg = value < 0 && signed, x = Math.abs(value);\n if (sec.date) return neg ? general(value) : fmtDate(sec.toks, x, date1904);\n return (neg ? '-' : '') + fmtNumber(sec.toks, x);\n}\n\nfunction toSerial(d: Date, date1904: boolean): number {\n const days = d.getTime() / 864e5;\n if (date1904) return days + 24107;\n const s = days + 25569;\n return s < 61 ? s - 1 : s; // Excel's phantom 1900-02-29 is serial 60\n}\n\nfunction splitSections(code: string): string[] {\n const out: string[] = [];\n let cur = '', quoted = false, bracket = false;\n for (let i = 0; i < code.length; i++) {\n const c = code[i];\n if (c === ';' && !quoted && !bracket) { out.push(cur); cur = ''; continue; }\n cur += c;\n if (quoted) quoted = c !== '\"';\n else if (c === '\"') quoted = true;\n else if ((c === '\\\\' || c === '_' || c === '*') && i + 1 < code.length) cur += code[++i];\n else if (c === '[') bracket = true;\n else if (c === ']') bracket = false;\n }\n out.push(cur);\n return out.slice(0, 4);\n}\n\nfunction parseSection(s: string): Section {\n const toks: Tok[] = [];\n let cond: [string, number] | undefined;\n const lit = (v: string) => toks.push({ t: 'lit', v });\n // fractional seconds like ss.00 attach to the seconds token\n const subsec = (i: number, tok: Tok) => {\n const m = /^\\.0+/.exec(s.slice(i + 1));\n if (m) tok.n = m[0].length - 1;\n toks.push(tok);\n return m ? i + m[0].length : i;\n };\n for (let i = 0; i < s.length; i++) {\n const c = s[i], lc = c.toLowerCase();\n if (c === '\"') {\n const j = s.indexOf('\"', i + 1), end = j < 0 ? s.length : j;\n lit(s.slice(i + 1, end));\n i = end;\n } else if (c === '\\\\') lit(s[++i] ?? '');\n else if (c === '_') { i++; lit(' '); }\n else if (c === '*') i++;\n else if (c === '[') {\n const j = s.indexOf(']', i), end = j < 0 ? s.length : j, b = s.slice(i + 1, end);\n i = end;\n const m = /^(<=|>=|<>|<|>|=)\\s*(-?[\\d.]+(?:e[+-]?\\d+)?)$/i.exec(b);\n if (m) cond = [m[1], +m[2]];\n else if (/^(h+|m+|s+)$/i.test(b)) i = subsec(i, { t: 'elapsed', v: b.toLowerCase() });\n else if (b[0] === '$') lit(b.slice(1).split('-')[0]);\n // colors and other tags are ignored\n } else if (s.slice(i, i + 7).toLowerCase() === 'general') { toks.push({ t: 'general', v: '' }); i += 6; }\n else if (s.slice(i, i + 5).toUpperCase() === 'AM/PM') { toks.push({ t: 'ampm', v: 'AM/PM' }); i += 4; }\n else if (/^a\\/p$/i.test(s.slice(i, i + 3))) { toks.push({ t: 'ampm', v: s.slice(i, i + 3) }); i += 2; }\n else if ('ymdhs'.includes(lc)) {\n let j = i;\n while (s[j + 1]?.toLowerCase() === lc) j++;\n i = subsec(j, { t: 'date', v: lc.repeat(j - i + 1) });\n } else if (lc === 'e' && (s[i + 1] === '+' || s[i + 1] === '-')) toks.push({ t: 'num', v: 'E' + s[++i] });\n else if ('0#?.,%/'.includes(c)) toks.push({ t: 'num', v: c });\n else if (c === '@') toks.push({ t: 'text', v: '' });\n else lit(c);\n }\n // m means minutes right after an hour or right before a second\n const dt = toks.filter(t => t.t === 'date' || t.t === 'elapsed');\n dt.forEach((t, k) => {\n if (t.t === 'date' && t.v[0] === 'm' && (dt[k - 1]?.v[0] === 'h' || dt[k + 1]?.v[0] === 's')) t.v = 'n'.repeat(t.v.length);\n });\n return { toks, cond, date: dt.length > 0 || toks.some(t => t.t === 'ampm'), text: toks.some(t => t.t === 'text') };\n}\n\nfunction test([op, n]: [string, number], v: number): boolean {\n return op === '<' ? v < n : op === '<=' ? v <= n : op === '>' ? v > n : op === '>=' ? v >= n : op === '<>' ? v !== n : v === n;\n}\n\n// Returns the section for v and whether a minus sign should be shown\nfunction pick([a, b, c]: Section[], v: number): [Section | undefined, boolean] {\n if (!a) return [undefined, true];\n if (a.cond || b?.cond) {\n const s = a.cond && test(a.cond, v) ? a : b?.cond && test(b.cond, v) ? b : a.cond && b?.cond ? c : b;\n // a section meant for negatives writes its own sign\n return [s, !(s?.cond && s.cond[0][0] === '<' && s.cond[1] <= 0)];\n }\n if (v < 0 && b) return [b, false];\n if (v === 0 && c) return [c, true];\n return [a, true];\n}\n\n// |x| as 15 significant digits and a decimal exponent, the precision Excel works in\nfunction sig15(x: number): [string, number] {\n const [m, e] = Math.abs(x).toExponential(14).split('e');\n return [m.replace('.', ''), +e];\n}\n\n// |x| rounded half away from zero to n decimals, as [integer digits without leading zeros, n decimals]\nfunction fixed(x: number, n: number): [string, string] {\n let [ds, e] = sig15(x), p = e + 1;\n if (p < 0) { ds = '0'.repeat(-p) + ds; p = 0; }\n ds = ds.padEnd(p + n + 1, '0');\n let keep = ds.slice(0, p + n);\n if (ds[p + n] >= '5') keep = (BigInt(keep || '0') + BigInt(1)).toString().padStart(keep.length, '0');\n return [keep.slice(0, keep.length - n).replace(/^0+/, ''), n ? keep.slice(-n) : ''];\n}\n\nfunction general(v: number): string {\n if (!v) return '0';\n const sign = v < 0 ? '-' : '';\n let [ds, e] = sig15(v);\n // fits in 11 characters as a plain number\n if (e >= -4 && e <= 10) {\n const [i, f] = fixed(v, Math.max(0, 9 - Math.max(e, 0)));\n const t = f.replace(/0+$/, '');\n if (i.length <= 11) return sign + (i || '0') + (t ? '.' + t : '');\n }\n let m = ds.slice(0, 6);\n if (ds[6] >= '5') m = String(+m + 1);\n if (m.length > 6) { m = m.slice(0, 6); e++; }\n return sign + m[0] + ('.' + m.slice(1)).replace(/\\.?0+$/, '') + 'E' + (e < 0 ? '-' : '+') + String(Math.abs(e)).padStart(2, '0');\n}\n\nconst isPh = (t: Tok | undefined) => t?.t === 'num' && '0#?'.includes(t.v);\n\n// Right-aligns digits into placeholders; the first placeholder takes any overflow\nfunction fillInt(toks: Tok[], idx: number[], digits: string, out: string[], group = false) {\n let j = digits.length;\n for (let k = idx.length - 1; k >= 0; k--) {\n const p = toks[idx[k]].v;\n if (j > 0) { out[idx[k]] = k ? digits[--j] : digits.slice(0, j); if (!k) j = 0; }\n else out[idx[k]] = p === '0' ? '0' : p === '?' ? ' ' : '';\n }\n if (!group) return;\n let n = 0;\n for (let k = idx.length - 1; k >= 0; k--) {\n let s = '';\n for (const c of [...out[idx[k]]].reverse()) {\n if (c >= '0' && c <= '9') { if (n && n % 3 === 0) s = ',' + s; n++; }\n s = c + s;\n }\n out[idx[k]] = s;\n }\n}\n\n// Trailing zeros are dropped for # and blanked for ?\nfunction fillDec(toks: Tok[], idx: number[], frac: string, out: string[]) {\n let trailing = true;\n for (let k = idx.length - 1; k >= 0; k--) {\n const p = toks[idx[k]].v;\n if (trailing && frac[k] === '0' && p !== '0') out[idx[k]] = p === '?' ? ' ' : '';\n else { trailing = false; out[idx[k]] = frac[k]; }\n }\n}\n\nfunction fmtNumber(toks: Tok[], x: number): string {\n const out = toks.map(t => t.t === 'general' ? general(x) : t.t === 'num' && (t.v === ',' || isPh(t)) ? '' : t.v);\n const idx = toks.flatMap((t, i) => isPh(t) ? [i] : []);\n if (!idx.length) return out.join('');\n x *= 100 ** toks.filter(t => t.t === 'num' && t.v === '%').length;\n\n const slash = toks.findIndex(t => t.t === 'num' && t.v === '/');\n if (slash > 0 && isPh(toks[slash - 1])) return fraction(toks, idx, slash, x, out);\n\n const e = toks.findIndex(t => t.t === 'num' && t.v[0] === 'E');\n const end = e >= 0 ? e : toks.length;\n const dot = toks.findIndex((t, i) => t.t === 'num' && t.v === '.' && i < end);\n const intEnd = dot >= 0 ? dot : end;\n const intIdx = idx.filter(i => i < intEnd), decIdx = idx.filter(i => i > intEnd && i < end);\n\n if (e >= 0) {\n const ip = Math.max(intIdx.length, 1);\n // with # in the integer part the exponent is a multiple of the integer digit count (engineering)\n const eng = ip > 1 && intIdx.some(i => toks[i].v === '#');\n const expOf = (p: number) => eng ? Math.floor(p / ip) * ip : p - ip + 1;\n let [ds, p] = x ? sig15(x) : ['0', 0];\n let exp = x ? expOf(p) : 0;\n let [mi, mf] = fixed(Number(`${ds[0]}.${ds.slice(1)}e${p - exp}`), decIdx.length);\n if (x && mi.length > p - exp + 1) { exp = expOf(++p); [mi, mf] = fixed(10 ** (p - exp), decIdx.length); }\n fillInt(toks, intIdx, mi, out);\n fillDec(toks, decIdx, mf, out);\n out[e] = 'E' + (exp < 0 ? '-' : toks[e].v === 'E+' ? '+' : '');\n fillInt(toks, idx.filter(i => i > e), String(Math.abs(exp)), out);\n return out.join('');\n }\n\n // a comma with no digit placeholder after it scales by 1000, one between digits groups thousands\n let scale = 0, group = false;\n toks.forEach((t, i) => {\n if (t.t !== 'num' || t.v !== ',') return;\n const bound = i < intEnd ? intEnd : end;\n if (!idx.some(j => j > i && j < bound)) scale++;\n else if (i < intEnd && idx.some(j => j < i)) group = true;\n });\n const [int, frac] = fixed(x / 1000 ** scale, decIdx.length);\n fillInt(toks, intIdx, int, out, group);\n fillDec(toks, decIdx, frac, out);\n return out.join('');\n}\n\nfunction fraction(toks: Tok[], idx: number[], slash: number, x: number, out: string[]): string {\n let a = slash - 1;\n while (isPh(toks[a - 1])) a--;\n let b = slash + 1;\n while (b < toks.length && (isPh(toks[b]) || toks[b].t === 'lit' && /^\\d$/.test(toks[b].v))) b++;\n const numIdx = idx.filter(i => i >= a && i < slash), intIdx = idx.filter(i => i < a);\n const denIdx = Array.from({ length: b - slash - 1 }, (_, k) => slash + 1 + k);\n const denText = denIdx.map(i => toks[i].v).join('');\n const fixedDen = /^[1-9]\\d*$/.test(denText) ? +denText : 0;\n\n let whole = intIdx.length ? Math.floor(x) : 0, n: number, d: number;\n const f = x - whole;\n if (fixedDen) { d = fixedDen; n = Math.round(f * d); }\n else {\n [n, d] = bestFraction(f, 10 ** Math.min(denIdx.length, 15) - 1);\n }\n if (intIdx.length && n === d) { whole++; n = 0; }\n\n fillInt(toks, intIdx, whole || !n ? String(whole) : '', out);\n fillInt(toks, numIdx, String(n), out);\n const ds = String(d);\n denIdx.forEach((i, k) => {\n const p = toks[i].v;\n out[i] = fixedDen ? p : ds[k] ?? (p === '?' ? ' ' : p === '0' ? '0' : '');\n });\n // a whole number blanks out the fraction but keeps its width\n if (intIdx.length && !n) for (let i = a; i < b; i++) out[i] = out[i].replace(/./g, ' ');\n return out.join('');\n}\n\n// Best approximation of f in [0, 1) with a denominator up to max, smallest denominator on ties.\n// Continued fractions keep this to a few dozen steps; trying every denominator hung on codes like # ?/??????????.\nexport function bestFraction(f: number, max: number): [number, number] {\n let n = Math.round(f), d = 1, err = Math.abs(f - n);\n const consider = (p: number, q: number) => {\n const e = Math.abs(f - p / q);\n if (q >= 1 && q <= max && (e < err - 1e-12 || Math.abs(e - err) <= 1e-12 && q < d)) { n = p; d = q; err = e; }\n };\n let [p0, q0, p1, q1] = [0, 1, 1, 0];\n let x = f;\n for (let i = 0; i < 64 && err; i++) {\n const a = Math.floor(x);\n const [p2, q2] = [a * p1 + p0, a * q1 + q0];\n if (q2 > max) {\n // the best within max may be a semiconvergent between the last two convergents\n const k = Math.floor((max - q0) / q1);\n for (const j of [k, Math.ceil(a / 2)]) if (j >= 1 && j <= k) consider(j * p1 + p0, j * q1 + q0);\n break;\n }\n consider(p2, q2);\n [p0, q0, p1, q1] = [p1, q1, p2, q2];\n if (x - a < 1e-15) break;\n x = 1 / (x - a);\n }\n return [n, d];\n}\n\n// Calendar date for an integer serial: [year, month, day, weekday]\nfunction ymd(days: number, date1904: boolean): number[] {\n if (date1904) {\n const dt = new Date(Date.UTC(1904, 0, 1 + days));\n return [dt.getUTCFullYear(), dt.getUTCMonth() + 1, dt.getUTCDate(), dt.getUTCDay()];\n }\n // Excel treats 1900 as a leap year: serial 1 is 1900-01-01 (a Sunday to Excel), 60 is 1900-02-29, 0 is 1900-01-00\n const wd = (days + 6) % 7;\n if (days === 0) return [1900, 1, 0, wd];\n if (days === 60) return [1900, 2, 29, wd];\n const dt = new Date(Date.UTC(1899, 11, days < 60 ? 31 + days : 30 + days));\n return [dt.getUTCFullYear(), dt.getUTCMonth() + 1, dt.getUTCDate(), wd];\n}\n\nfunction fmtDate(toks: Tok[], v: number, date1904: boolean): string {\n // Excel rounds to the smallest shown unit (whole seconds unless fractions are shown) before splitting\n const k = Math.max(0, ...toks.map(t => t.n ?? 0)), per = 10 ** k;\n const ticks = Math.round(v * 86400 * per);\n const days = Math.floor(ticks / (86400 * per)), rem = ticks - days * 86400 * per;\n const sub = rem % per, secs = (rem - sub) / per;\n const H = Math.floor(secs / 3600), M = Math.floor(secs / 60) % 60, S = secs % 60;\n const [y, mo, d, wd] = ymd(days, date1904);\n const h12 = toks.some(t => t.t === 'ampm');\n const pad = (n: number, w: number) => String(n).padStart(w, '0');\n const frac = (t: Tok) => t.n ? '.' + pad(sub, k).slice(0, t.n) : '';\n return toks.map(t => {\n const w = t.v.length;\n if (t.t === 'elapsed') {\n const total = t.v[0] === 'h' ? days * 24 + H : t.v[0] === 'm' ? (days * 24 + H) * 60 + M : days * 86400 + secs;\n return pad(total, w) + frac(t);\n }\n if (t.t === 'ampm') return w > 3 ? (H < 12 ? 'AM' : 'PM') : H < 12 ? t.v[0] : t.v[2];\n if (t.t !== 'date') return t.v;\n switch (t.v[0]) {\n case 'y': return w > 2 ? pad(y, 4) : pad(y % 100, 2);\n case 'm': return w === 1 ? String(mo) : w === 2 ? pad(mo, 2) : w === 3 ? MONTHS[mo - 1].slice(0, 3) : w === 5 ? MONTHS[mo - 1][0] : MONTHS[mo - 1];\n case 'd': return w === 1 ? String(d) : w === 2 ? pad(d, 2) : w === 3 ? DAYS[wd].slice(0, 3) : DAYS[wd];\n case 'h': { const h = h12 ? H % 12 || 12 : H; return w > 1 ? pad(h, 2) : String(h); }\n case 'n': return w > 1 ? pad(M, 2) : String(M);\n default: return (w > 1 ? pad(S, 2) : String(S)) + frac(t);\n }\n }).join('');\n}\n\n// Number formats Excel does not write into styles.xml (ECMA-376 Part 1, 18.8.30)\nexport const BUILTIN_NUM_FMTS: [number, string][] = [\n [1, '0'], [2, '0.00'], [3, '#,##0'], [4, '#,##0.00'], [9, '0%'], [10, '0.00%'], [11, '0.00E+00'],\n [12, '# ?/?'], [13, '# ??/??'], [14, 'mm-dd-yy'], [15, 'd-mmm-yy'], [16, 'd-mmm'], [17, 'mmm-yy'],\n [18, 'h:mm AM/PM'], [19, 'h:mm:ss AM/PM'], [20, 'h:mm'], [21, 'h:mm:ss'], [22, 'm/d/yy h:mm'],\n [37, '#,##0 ;(#,##0)'], [38, '#,##0 ;[Red](#,##0)'], [39, '#,##0.00;(#,##0.00)'], [40, '#,##0.00;[Red](#,##0.00)'],\n [45, 'mm:ss'], [46, '[h]:mm:ss'], [47, 'mmss.0'], [48, '##0.0E+0'], [49, '@'],\n];\n\n// Formats Excel stores by id only and shows by locale, as en-US Excel shows them\nexport const DISPLAY_NUM_FMTS = new Map<number, string>([\n [5, '\"$\"#,##0_);(\"$\"#,##0)'], [6, '\"$\"#,##0_);[Red](\"$\"#,##0)'], [7, '\"$\"#,##0.00_);(\"$\"#,##0.00)'], [8, '\"$\"#,##0.00_);[Red](\"$\"#,##0.00)'],\n [14, 'm/d/yyyy'], [22, 'm/d/yyyy h:mm'],\n [41, '_(* #,##0_);_(* \\\\(#,##0\\\\);_(* \"-\"_);_(@_)'], [42, '_(\"$\"* #,##0_);_(\"$\"* \\\\(#,##0\\\\);_(\"$\"* \"-\"_);_(@_)'],\n [43, '_(* #,##0.00_);_(* \\\\(#,##0.00\\\\);_(* \"-\"??_);_(@_)'], [44, '_(\"$\"* #,##0.00_);_(\"$\"* \\\\(#,##0.00\\\\);_(\"$\"* \"-\"??_);_(@_)'],\n]);\n\n// Builtin date/time ids (27-36 and 50-58 are dates in CJK locales)\nexport const isBuiltinDateFormat = (id: number) =>\n (id >= 14 && id <= 22) || (id >= 27 && id <= 36) || (id >= 45 && id <= 47) || (id >= 50 && id <= 58);\n","import { XmlToken } from './xml-stream';\nimport { decodeXString, colIndex, shiftFormula, dateToSerial, MAX_COLUMNS, unescapeXml, xmlElements } from './utils';\nimport { applyFontElement, ColorResolver } from './style-reader';\nimport { formatValue } from './number-format';\nimport type { CellStyle, RichTextRun, SheetImage } from './types';\n\nexport type CellValue = string | number | boolean | null;\n\nexport function excelToIsoDate(serial: number, is1904: boolean = false): string {\n let days = Math.floor(serial);\n // Excel stores times with ms precision; rounding avoids 18:29:59.999 for 18:30\n const timeMs = Math.round((serial - days) * 86400000);\n\n let epoch: number;\n if (is1904) {\n // 1904 date system starts on Jan 1, 1904\n epoch = Date.UTC(1904, 0, 1);\n } else {\n // 1900 date system has the leap year bug (phantom Feb 29 1900 = serial 60), so serials\n // 1..60 sit one day later than the 1899-12-30 epoch implies. Serial 0 (pure time) does not.\n if (days >= 1 && days <= 60) days++;\n epoch = Date.UTC(1899, 11, 30);\n }\n\n return new Date(epoch + days * 86400000 + timeMs).toISOString();\n}\n\nexport interface SheetComment {\n ref: string;\n text: string;\n author?: string;\n}\n\n// Notes from a comments part. Threaded comments (Excel 365) also write their text here.\nexport function parseComments(xml: string): SheetComment[] {\n const authors = [...xmlElements(xml, 'author')].map(el => unescapeXml(el.body));\n const out: SheetComment[] = [];\n for (const el of xmlElements(xml, 'comment')) {\n const ref = /\\sref=\"([^\"]*)\"/.exec(el.attrs)?.[1];\n if (!ref) continue;\n let text = '';\n // phonetic hints (rPh) hold their own <t>, which is not part of the note\n for (const t of xmlElements(el.body, 't|rPh')) if (t.name === 't') text += t.body;\n const comment: SheetComment = { ref, text: decodeXString(unescapeXml(text)) };\n const author = authors[parseInt(/\\sauthorId=\"(\\d+)\"/.exec(el.attrs)?.[1] ?? '-1', 10)];\n if (author) comment.author = author;\n out.push(comment);\n }\n return out;\n}\n\n\nexport interface SheetMetadata {\n mergedCells: string[];\n hiddenRows: number[];\n hiddenCols: number[];\n freezePanes?: { row: number; col: number; topLeftCell: string; activePane: string };\n // hyperlink is a URL, or \"#Sheet!A1\" for a place in the workbook (the writer's format)\n hyperlinks: { ref: string; hyperlink: string; tooltip?: string }[];\n}\n\n// Collects the formatted runs (<r>) of one rich string (<si> or <is>)\nexport class RichTextCollector {\n runs: RichTextRun[] = [];\n private run: RichTextRun | undefined;\n private inRPr = false;\n private inText = false;\n\n constructor(private color: ColorResolver) {}\n\n reset() {\n this.runs = [];\n this.run = undefined;\n this.inRPr = this.inText = false;\n }\n\n token(t: XmlToken) {\n if (t.type === 'startElement') {\n if (t.name === 'r') this.run = { text: '' };\n else if (!this.run) return;\n else if (t.name === 'rPr') {\n this.inRPr = true;\n this.run.font = {};\n } else if (this.inRPr) {\n const font = this.run.font!;\n applyFontElement(font, t.name, t.attributes, a => { const c = this.color(a); if (c) font.color = c; });\n } else if (t.name === 't') this.inText = true;\n } else if (t.type === 'endElement') {\n if (t.name === 'rPr') this.inRPr = false;\n else if (t.name === 't') this.inText = false;\n else if (t.name === 'r' && this.run) {\n this.run.text = decodeXString(this.run.text);\n if (this.run.font && !Object.keys(this.run.font).length) delete this.run.font;\n this.runs.push(this.run);\n this.run = undefined;\n }\n } else if (this.inText && this.run) {\n this.run.text += t.value;\n }\n }\n}\n\nexport interface RowData {\n rowNumber: number;\n cells: CellValue[];\n // Only with the `formulas` / `styles` parse options, and only on rows that have any.\n // Indexed like `cells`; formulas have no leading \"=\".\n formulas?: (string | undefined)[];\n styles?: (CellStyle | undefined)[]; // shared between cells with the same style: do not mutate\n richText?: (RichTextRun[] | undefined)[]; // only cells whose text has formatted runs\n formatted?: (string | undefined)[]; // with the `formatted` option: each cell's text as Excel shows it\n // With the `errors` option (.xlsx only): true for cells holding an error value such as #N/A, which\n // `cells` gives as text, to tell them from text that reads \"#N/A\"\n errors?: (true | undefined)[];\n}\n\nexport interface WorksheetOptions {\n formulas?: boolean;\n errors?: boolean;\n cellStyles?: (CellStyle | undefined)[]; // by style index; set to report styles\n numFmts?: (string | undefined)[]; // number format code by style index; set to report formatted text\n richText?: ColorResolver; // set to report rich text runs\n sharedRichText?: Map<number, RichTextRun[]>;\n hyperlinkTargets?: Map<string, string>; // relationship id -> URL\n images?: () => Promise<SheetImage[]>;\n comments?: () => Promise<SheetComment[]>;\n maxPaddingCells?: number; // empty cells added before far-right cells; the reader ties it to maxUncompressedBytes\n}\n\nexport class ParseResult implements AsyncIterable<RowData> {\n constructor(\n private generator: AsyncGenerator<RowData>,\n private metadataPromise: Promise<SheetMetadata>,\n private images: () => Promise<SheetImage[]> = async () => [],\n private comments: () => Promise<SheetComment[]> = async () => []\n ) {}\n\n [Symbol.asyncIterator]() {\n return this.generator;\n }\n\n async getMetadata(): Promise<SheetMetadata> {\n return this.metadataPromise;\n }\n\n // The sheet's pictures, in the writer's `images` format. Image files are read on this call.\n getImages(): Promise<SheetImage[]> {\n return this.images();\n }\n\n // The sheet's notes (comments), in sheet order\n getComments(): Promise<SheetComment[]> {\n return this.comments();\n }\n}\n\n// \"2026-10-08T14:05:00\" or \"2026-10-08\" (a t=\"d\" cell, no zone: UTC) as an ISO string; undefined when unreadable\nfunction isoDateCell(text: string): string | undefined {\n const t = text.trim();\n const zoned = /(?:Z|[+-]\\d\\d:?\\d\\d)$/.test(t) ? t : t.includes('T') ? t + 'Z' : t + 'T00:00:00Z';\n const d = new Date(zoned);\n return isNaN(d.getTime()) ? undefined : d.toISOString();\n}\n\nexport function parseWorksheet(\n xmlTokenStream: ReadableStream<XmlToken | XmlToken[]>,\n sharedStrings: Map<number, string>,\n styles: Map<number, number>,\n is1904: boolean = false,\n options: WorksheetOptions = {}\n): ParseResult {\n let resolveMeta!: (m: SheetMetadata) => void;\n let rejectMeta!: (e: any) => void;\n const metadataPromise = new Promise<SheetMetadata>((res, rej) => {\n resolveMeta = res;\n rejectMeta = rej;\n });\n // The row iterator already surfaces parse errors; callers who never ask for metadata\n // must not get an unhandled rejection (fatal by default in Node).\n metadataPromise.catch(() => {});\n const mergedCells: string[] = [];\n const hiddenRows: number[] = [];\n const hiddenColMarks = new Uint8Array(MAX_COLUMNS + 1); // by column; repeated <col> ranges cost nothing extra\n let padding = 0;\n const hyperlinks: SheetMetadata['hyperlinks'] = [];\n let freezePanes: SheetMetadata['freezePanes'] = undefined;\n\n async function* generateRows(): AsyncGenerator<RowData> {\n const reader = xmlTokenStream.getReader();\n \n let currentRow: CellValue[] = [];\n let currentCellType: string | null = null;\n let currentStyleId: number | null = null;\n let currentCellValue: string | null = null;\n let inRow = false;\n let inCell = false;\n let inValue = false;\n let inFormula = false;\n let inPhonetic = false;\n let currentFormula = '';\n let currentFormulaSi: string | null = null;\n let currentFormulaRef: string | null = null;\n let hasFormula = false;\n let rowFormulas: (string | undefined)[] | undefined;\n let rowStyles: (CellStyle | undefined)[] | undefined;\n let rowRichText: (RichTextRun[] | undefined)[] | undefined;\n let rowFormatted: (string | undefined)[] | undefined;\n let rowErrors: (true | undefined)[] | undefined;\n let rawNumber: number | undefined; // a date cell's serial, for formatted text\n const runs = options.richText ? new RichTextCollector(options.richText) : undefined;\n \n let skipDepth = 0;\n\n // Shared formula anchors by si: the text and the cell it was written for\n const sharedFormulas = new Map<string, { formula: string; row: number; col: number }>();\n\n let currentRowNumber = 0;\n let openedWorksheet = false, closedWorksheet = false;\n let currentColIndex = 0;\n let currentCellCol = 0;\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n for (const token of (Array.isArray(value) ? value : [value]) as XmlToken[]) {\n if (runs && inCell) runs.token(token);\n if (token.type === 'startElement') {\n if (token.name === 'AlternateContent') {\n skipDepth++;\n }\n if (skipDepth > 0) {\n if (token.name === 'Fallback') {\n // we could choose to parse fallbacks, but often they are duplicate\n }\n continue;\n }\n\n if (token.name === 'worksheet') openedWorksheet = true;\n if (token.name === 'row') {\n inRow = true;\n currentRow = [];\n rowFormulas = rowStyles = rowRichText = rowFormatted = undefined;\n rowErrors = undefined;\n currentColIndex = 0;\n // A missing or unusable r (\"abc\", \"0\") means the row after the previous one\n const r = Number(token.attributes['r']);\n currentRowNumber = Number.isInteger(r) && r >= 1 ? r : currentRowNumber + 1;\n if (token.attributes['hidden'] === '1' || token.attributes['hidden'] === 'true') {\n hiddenRows.push(currentRowNumber);\n }\n } else if (token.name === 'col') {\n if (token.attributes['hidden'] === '1' || token.attributes['hidden'] === 'true') {\n // Clamp to the sheet's real width: a hostile max=\"999999999\" must not allocate a billion entries\n const min = Math.max(1, parseInt(token.attributes['min'] || '1', 10) || 1);\n const max = Math.min(MAX_COLUMNS, parseInt(token.attributes['max'] || '0', 10) || 0);\n if (min <= max) hiddenColMarks.fill(1, min, max + 1);\n }\n } else if (token.name === 'c') {\n inCell = true;\n currentCellType = token.attributes['t'] || null;\n currentStyleId = token.attributes['s'] ? parseInt(token.attributes['s'], 10) : null;\n currentCellValue = null;\n hasFormula = false;\n runs?.reset();\n\n const r = token.attributes['r'];\n const refCol = r ? colIndex(r) : -1;\n currentCellCol = refCol >= 0 ? refCol : currentColIndex;\n if (currentCellCol >= MAX_COLUMNS) {\n throw new Error(`Invalid cell reference \"${r}\": beyond the last column (XFD)`);\n }\n // A tiny cell at XFD pads its row to 16,384 cells, so padding counts against the byte limit\n padding += Math.max(0, currentCellCol - currentRow.length);\n if (padding > (options.maxPaddingCells ?? Infinity)) {\n throw new Error(`Security Error: rows padded with more than ${options.maxPaddingCells} empty cells (maxUncompressedBytes).`);\n }\n while (currentRow.length < currentCellCol) currentRow.push(null);\n } else if (token.name === 'rPh') {\n inPhonetic = true; // phonetic hints are not part of the cell text\n } else if ((token.name === 'v' || token.name === 't') && !inPhonetic) {\n inValue = true;\n if (currentCellValue === null) currentCellValue = '';\n } else if (token.name === 'f') {\n inFormula = true;\n hasFormula = true;\n currentFormula = '';\n currentFormulaSi = token.attributes['si'] || null;\n currentFormulaRef = token.attributes['ref'] || null;\n } else if (token.name === 'hyperlink') {\n const { ref, id, location, tooltip } = token.attributes;\n const target = id ? options.hyperlinkTargets?.get(id) : undefined;\n const hyperlink = target ? (location ? `${target}#${location}` : target) : location ? `#${location}` : '';\n if (ref && hyperlink) hyperlinks.push(tooltip ? { ref, hyperlink, tooltip } : { ref, hyperlink });\n } else if (token.name === 'mergeCell') {\n if (token.attributes['ref']) mergedCells.push(token.attributes['ref']);\n } else if (token.name === 'pane') {\n // frozenSplit: frozen after being split, which Excel also writes\n if (token.attributes['state'] === 'frozen' || token.attributes['state'] === 'frozenSplit') {\n freezePanes = {\n row: parseInt(token.attributes['ySplit'] || '0', 10),\n col: parseInt(token.attributes['xSplit'] || '0', 10),\n topLeftCell: token.attributes['topLeftCell'] || '',\n activePane: token.attributes['activePane'] || 'bottomRight'\n };\n }\n }\n } else if (token.type === 'text') {\n if (skipDepth > 0) continue;\n if (inValue) {\n currentCellValue = (currentCellValue || '') + token.value;\n } else if (inFormula) {\n currentFormula += token.value;\n }\n } else if (token.type === 'endElement') {\n if (token.name === 'AlternateContent') {\n skipDepth--;\n continue;\n }\n if (skipDepth > 0) continue;\n\n if (token.name === 'worksheet') closedWorksheet = true;\n if (token.name === 'row') {\n const row: RowData = { rowNumber: currentRowNumber, cells: currentRow };\n if (rowFormulas) row.formulas = rowFormulas;\n if (rowStyles) row.styles = rowStyles;\n if (rowRichText) row.richText = rowRichText;\n if (rowFormatted) row.formatted = rowFormatted;\n if (rowErrors) row.errors = rowErrors;\n yield row;\n inRow = false;\n } else if (token.name === 'c') {\n let resolvedValue: CellValue = null;\n \n // If the cell had a shared formula reference but no <v>, we still don't have the evaluated value\n // since we are streaming. A full formula engine would calculate it. \n // For now, if currentCellValue is null but we have a formula, we could return the formula string \n // or null. We'll stick to yielding null for cached value.\n \n if (currentCellValue !== null) {\n if (currentCellType === 'inlineStr' || currentCellType === 'str') {\n // Strings may legitimately be empty\n resolvedValue = decodeXString(currentCellValue);\n } else if (currentCellValue === '') {\n // <v></v> on a non-string cell carries no value\n resolvedValue = null;\n } else if (currentCellType === 's') {\n const index = parseInt(currentCellValue, 10);\n // An index past the table points nowhere: the cell is empty\n resolvedValue = sharedStrings.get(index) ?? null;\n } else if (currentCellType === 'b') {\n resolvedValue = currentCellValue === '1' || currentCellValue === 'true';\n } else if (currentCellType === 'e') {\n resolvedValue = currentCellValue;\n if (options.errors) (rowErrors ??= [])[currentCellCol] = true;\n } else {\n const num = Number(currentCellValue);\n const iso = currentCellType === 'd' ? isoDateCell(currentCellValue) : undefined;\n if (iso) {\n // t=\"d\": ISO text without a zone, read as UTC like serial dates\n rawNumber = dateToSerial(new Date(iso)) - (is1904 ? 1462 : 0);\n resolvedValue = iso;\n } else if (isNaN(num)) {\n resolvedValue = currentCellValue;\n } else if (currentStyleId !== null && styles.get(currentStyleId) === 14) {\n rawNumber = num;\n resolvedValue = excelToIsoDate(num, is1904);\n } else {\n resolvedValue = num === 0 ? 0 : num; // normalise -0\n }\n }\n }\n \n if (options.formulas && hasFormula) {\n let formula: string | undefined = currentFormula ? decodeXString(currentFormula) : undefined;\n if (!formula && currentFormulaSi !== null) {\n // A follower cell of a shared formula: the anchor's text, moved to this cell\n const anchor = sharedFormulas.get(currentFormulaSi);\n if (anchor) formula = shiftFormula(anchor.formula, currentRowNumber - anchor.row, currentCellCol - anchor.col);\n }\n if (formula) (rowFormulas ??= [])[currentCellCol] = formula;\n }\n if (runs) {\n const cellRuns = currentCellType === 's' && currentCellValue\n ? options.sharedRichText?.get(parseInt(currentCellValue, 10))\n : runs.runs.length ? runs.runs : undefined;\n if (cellRuns) (rowRichText ??= [])[currentCellCol] = cellRuns;\n }\n if (options.numFmts && resolvedValue !== null) {\n const code = currentStyleId !== null ? options.numFmts[currentStyleId] : undefined;\n (rowFormatted ??= [])[currentCellCol] = currentCellType === 'e' ? String(resolvedValue)\n : formatValue(rawNumber ?? resolvedValue, code ?? 'General', is1904);\n }\n rawNumber = undefined;\n if (options.cellStyles && currentStyleId !== null) {\n const style = options.cellStyles[currentStyleId];\n if (style) (rowStyles ??= [])[currentCellCol] = style;\n }\n\n // Indexed write: also correct when a cell's r points left of the previous cell\n currentRow[currentCellCol] = resolvedValue;\n currentColIndex = currentCellCol + 1;\n inCell = false;\n currentCellType = null;\n currentStyleId = null;\n currentCellValue = null;\n } else if (token.name === 'rPh') {\n inPhonetic = false;\n } else if (token.name === 'v' || token.name === 't') {\n inValue = false;\n } else if (token.name === 'f') {\n inFormula = false;\n if (currentFormulaSi !== null && currentFormulaRef !== null && currentFormula) {\n sharedFormulas.set(currentFormulaSi, { formula: decodeXString(currentFormula), row: currentRowNumber, col: currentCellCol });\n }\n }\n }\n }\n }\n // A part cut off inside a row (an intact zip around a truncated sheet) must not read as a shorter sheet\n if (inRow || inCell || openedWorksheet && !closedWorksheet) throw new Error('Worksheet XML is cut off: the sheet ends before its closing tags.');\n const hiddenCols: number[] = [];\n hiddenColMarks.forEach((hidden, c) => { if (hidden) hiddenCols.push(c); });\n resolveMeta({ mergedCells, hiddenRows, hiddenCols, freezePanes, hyperlinks });\n } catch (e) {\n rejectMeta(e);\n throw e;\n } finally {\n reader.releaseLock();\n }\n }\n\n return new ParseResult(generateRows(), metadataPromise, options.images, options.comments);\n}\n","import type { SheetImage } from './types';\nimport { colIndex, colLetter, MAX_COLUMNS, MAX_ROWS, partRelationships, unescapeXml, xmlElements, escapeXml } from './utils';\n\nconst EMU_PER_PX = 9525;\n\nexport interface ImageInfo { ext: 'png' | 'jpeg' | 'gif'; width: number; height: number }\n\n// Format and pixel size from the file header\nexport function imageInfo(b: Uint8Array): ImageInfo {\n const info = headerInfo(b);\n // A truncated header reads past the end of the bytes and gives NaN (or 0) sizes\n if (!(info.width > 0 && info.height > 0)) throw new Error(`The ${info.ext.toUpperCase()} image is truncated or has no size.`);\n return info;\n}\n\nfunction headerInfo(b: Uint8Array): ImageInfo {\n const be16 = (i: number) => (b[i] << 8) | b[i + 1];\n const be32 = (i: number) => ((b[i] << 24) | (b[i + 1] << 16) | (b[i + 2] << 8) | b[i + 3]) >>> 0;\n if (b[0] === 0x89 && b[1] === 0x50 && b[2] === 0x4e && b[3] === 0x47) {\n return { ext: 'png', width: be32(16), height: be32(20) };\n }\n if (b[0] === 0x47 && b[1] === 0x49 && b[2] === 0x46) {\n return { ext: 'gif', width: b[6] | (b[7] << 8), height: b[8] | (b[9] << 8) };\n }\n if (b[0] === 0xff && b[1] === 0xd8) {\n // Walk the marker segments to the frame header (SOF0-15, minus DHT/JPG/DAC)\n for (let i = 2; i + 9 < b.length;) {\n if (b[i] !== 0xff) { i++; continue; }\n const marker = b[i + 1];\n if (marker === 0xff) { i++; continue; }\n if (marker >= 0xc0 && marker <= 0xcf && marker !== 0xc4 && marker !== 0xc8 && marker !== 0xcc) {\n return { ext: 'jpeg', width: be16(i + 7), height: be16(i + 5) };\n }\n i += 2 + be16(i + 2);\n }\n throw new Error('JPEG image has no frame header.');\n }\n throw new Error('Unsupported image: only PNG, JPEG and GIF can be embedded.');\n}\n\n// The pictures of a worksheet's drawing, in the writer's SheetImage shape. Charts and shapes are\n// skipped. Pictures sharing a media file share one `data` array.\n// Offsets inside the anchor cell are ignored, and absoluteAnchor pictures are skipped\nexport async function readSheetImages(\n readText: (path: string) => Promise<string>,\n readBytes: (path: string) => Promise<Uint8Array | undefined>,\n sheetPath: string,\n): Promise<SheetImage[]> {\n const images: SheetImage[] = [];\n const media = new Map<string, Uint8Array | undefined>();\n for (const rel of await partRelationships(readText, sheetPath)) {\n if (rel.external || !rel.type.endsWith('/drawing')) continue;\n const xml = await readText(rel.path);\n const targets = new Map((await partRelationships(readText, rel.path)).filter(r => !r.external).map(r => [r.id, r.path]));\n for (const { whole: anchor, name: kind } of xmlElements(xml, 'twoCellAnchor|oneCellAnchor')) {\n const pic = xmlElements(anchor, 'pic').next().value?.whole;\n const embed = pic && /<(?:\\w+:)?blip\\b[^>]*?\\s(?:\\w+:)?embed=\"([^\"]*)\"/.exec(pic)?.[1];\n const path = embed && targets.get(embed);\n if (!path) continue;\n if (!media.has(path)) media.set(path, await readBytes(path));\n const data = media.get(path);\n if (!data) continue;\n\n const pos = (tag: string) => {\n const m = new RegExp(`<(?:\\\\w+:)?${tag}>([\\\\s\\\\S]*?)</(?:\\\\w+:)?${tag}>`).exec(anchor)?.[1] ?? '';\n const num = (name: string) => parseInt(new RegExp(`<(?:\\\\w+:)?${name}>(-?\\\\d+)<`).exec(m)?.[1] ?? '0', 10);\n return { col: num('col'), row: num('row'), offset: num('colOff') + num('rowOff') };\n };\n const from = pos('from');\n const at = colLetter(from.col) + (from.row + 1);\n const descr = pic && /<(?:\\w+:)?cNvPr\\b[^>]*?\\sdescr=\"([^\"]*)\"/.exec(pic)?.[1];\n const altText = descr ? unescapeXml(descr) : undefined;\n let image: SheetImage;\n if (kind === 'twoCellAnchor') {\n // `to` is the cell the far edge lands in; at offset 0 the picture ends on the cell before it\n const to = pos('to');\n const end = to.offset === 0 ? { col: Math.max(from.col, to.col - 1), row: Math.max(from.row, to.row - 1) } : to;\n image = { data, range: `${at}:${colLetter(end.col)}${end.row + 1}` };\n } else {\n const ext = /<(?:\\w+:)?ext\\b[^>]*?\\scx=\"(\\d+)\"[^>]*?\\scy=\"(\\d+)\"/.exec(anchor);\n image = ext ? { data, at, width: Math.round(+ext[1] / EMU_PER_PX), height: Math.round(+ext[2] / EMU_PER_PX) } : { data, at };\n }\n if (altText) image.altText = altText;\n images.push(image);\n }\n }\n return images;\n}\n\n\n\nconst cellPos = (ref: string) => {\n const m = /^\\$?([A-Za-z]{1,3})\\$?(\\d+)$/.exec(ref.trim());\n const col = m ? colIndex(m[1]) : -1, row = m ? parseInt(m[2], 10) - 1 : -1;\n if (col < 0 || col >= MAX_COLUMNS || row < 0 || row >= MAX_ROWS) throw new Error(`Invalid anchor cell \"${ref}\".`);\n return { col, row };\n};\nconst marker = (tag: string, { col, row }: { col: number; row: number }) =>\n `<xdr:${tag}><xdr:col>${col}</xdr:col><xdr:colOff>0</xdr:colOff><xdr:row>${row}</xdr:row><xdr:rowOff>0</xdr:rowOff></xdr:${tag}>`;\n\n// Where a drawing object goes: stretched over cells, or at a cell with a size in pixels\nexport type Placement = { range: string } | { at: string; width?: number; height?: number };\n\nexport const DRAWING_NS = 'xmlns:xdr=\"http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing\" ' +\n 'xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" ' +\n 'xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"';\n\n// One anchor (xdr: prefix) holding `body`. `natural` is the size used when the placement gives\n// none; a missing side keeps its aspect ratio. `attrs` lands on the anchor element, e.g. DRAWING_NS\n// when the anchor is added to a drawing that declares other prefixes.\nexport function anchorXml(place: Placement, natural: { width: number; height: number }, body: string, attrs = ''): string {\n if (!place || typeof (place as any).range !== 'string' && typeof (place as any).at !== 'string') {\n throw new Error('A picture or chart needs a placement: \"at\" (a cell) or \"range\".');\n }\n if ('range' in place) {\n const [from, to = from] = place.range.split(':');\n const a = cellPos(from), b = cellPos(to);\n // The object fills the range, given either way round: it ends at the far edge of the last cell\n const start = { col: Math.min(a.col, b.col), row: Math.min(a.row, b.row) };\n const end = { col: Math.max(a.col, b.col) + 1, row: Math.max(a.row, b.row) + 1 };\n return `<xdr:twoCellAnchor editAs=\"oneCell\"${attrs}>${marker('from', start)}${marker('to', end)}${body}<xdr:clientData/></xdr:twoCellAnchor>`;\n }\n const { width: w, height: h } = natural;\n const width = place.width ?? (place.height ? w * place.height / h : w);\n const height = place.height ?? h * width / w;\n if (!(width > 0 && height > 0 && isFinite(width) && isFinite(height))) {\n throw new Error(`Invalid size ${place.width ?? ''}x${place.height ?? ''} at ${place.at}: width and height must be positive numbers.`);\n }\n return `<xdr:oneCellAnchor${attrs}>${marker('from', cellPos(place.at))}<xdr:ext cx=\"${Math.round(width * EMU_PER_PX)}\" cy=\"${Math.round(height * EMU_PER_PX)}\"/>${body}<xdr:clientData/></xdr:oneCellAnchor>`;\n}\n\nexport const drawingPartXml = (anchors: string) =>\n `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<xdr:wsDr ${DRAWING_NS}>${anchors}</xdr:wsDr>`;\n\n// One drawing part per sheet; `rIds[i]` is the drawing relationship of images[i]'s media\nexport function drawingXml(images: SheetImage[], infos: ImageInfo[], rIds: string[]): string {\n return drawingPartXml(images.map((img, i) => anchorXml(img, infos[i],\n `<xdr:pic><xdr:nvPicPr><xdr:cNvPr id=\"${i + 2}\" name=\"Picture ${i + 1}\"${img.altText ? ` descr=\"${escapeXml(img.altText)}\"` : ''}/>` +\n `<xdr:cNvPicPr><a:picLocks noChangeAspect=\"1\"/></xdr:cNvPicPr></xdr:nvPicPr>` +\n `<xdr:blipFill><a:blip r:embed=\"${rIds[i]}\"/><a:stretch><a:fillRect/></a:stretch></xdr:blipFill>` +\n `<xdr:spPr><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></xdr:spPr></xdr:pic>`)).join(''));\n}\n","// Reader for Excel 97-2003 workbooks (.xls, BIFF8 records in a compound file) [MS-XLS].\n// Returns the same rows and metadata as the .xlsx reader. The file is held in memory; .xls sheets\n// are limited to 65,536 rows, so that stays modest.\n\nimport { CfbReader } from './cfb';\nimport { ParseResult, excelToIsoDate, type CellValue, type RowData, type SheetMetadata } from './worksheet-parser';\nimport { BUILTIN_NUM_FMTS, DISPLAY_NUM_FMTS, isBuiltinDateFormat, formatValue } from './number-format';\nimport { colLetter, isDateFormatCode } from './utils';\nimport type { DefinedName, WorkbookProperties } from './types';\n\nconst corrupt = (why: string) => new Error(`Corrupt .xls file: ${why}`);\n\nconst ERRORS: Record<number, string> = {\n 0x00: '#NULL!', 0x07: '#DIV/0!', 0x0f: '#VALUE!', 0x17: '#REF!', 0x1d: '#NAME?', 0x24: '#NUM!', 0x2a: '#N/A', 0x2b: '#GETTING_DATA',\n};\n\n// Characters stored one byte each are UTF-16 code units with a zero high byte, i.e. Latin-1\nfunction latin1(bytes: Uint8Array): string {\n let s = '';\n for (let i = 0; i < bytes.length; i += 8192) s += String.fromCharCode(...bytes.subarray(i, i + 8192));\n return s;\n}\nconst utf16 = new TextDecoder('utf-16le');\nconst chars = (bytes: Uint8Array, high: boolean) => high ? utf16.decode(bytes) : latin1(bytes);\n\nconst u16 = (b: Uint8Array, o: number) => {\n if (o + 2 > b.length) throw corrupt('record is cut short');\n return b[o] | (b[o + 1] << 8);\n};\nconst u32 = (b: Uint8Array, o: number) => (u16(b, o) | (u16(b, o + 2) << 16)) >>> 0;\nconst f64 = (b: Uint8Array, o: number) => {\n if (o + 8 > b.length) throw corrupt('record is cut short');\n return new DataView(b.buffer, b.byteOffset + o, 8).getFloat64(0, true);\n};\n\n// XLUnicodeString (16-bit length) or ShortXLUnicodeString (8-bit length); returns the text and its size\nfunction xlString(b: Uint8Array, o: number, lengthBytes: 1 | 2): [string, number] {\n const cch = lengthBytes === 1 ? b[o] : u16(b, o);\n const high = (b[o + lengthBytes] & 1) === 1;\n const start = o + lengthBytes + 1;\n const end = start + cch * (high ? 2 : 1);\n if (end > b.length) throw corrupt('string runs past its record');\n return [chars(b.subarray(start, end), high), end - o];\n}\n\n// RK numbers: a 30-bit integer or the top 30 bits of a double, optionally divided by 100\nfunction rk(value: number): number {\n let n: number;\n if (value & 2) n = value >> 2;\n else {\n const view = new DataView(new ArrayBuffer(8));\n view.setUint32(4, value & 0xfffffffc, true);\n n = view.getFloat64(0, true);\n }\n return value & 1 ? n / 100 : n;\n}\n\ninterface Rec { type: number; data: Uint8Array; next: number }\n\nfunction recordAt(stream: Uint8Array, pos: number): Rec | undefined {\n if (pos + 4 > stream.length) return undefined;\n const len = u16(stream, pos + 2);\n if (pos + 4 + len > stream.length) throw corrupt(`record at ${pos} runs past the end of the stream`);\n return { type: u16(stream, pos), data: stream.subarray(pos + 4, pos + 4 + len), next: pos + 4 + len };\n}\n\n// The shared string table spans CONTINUE records. A string's characters may break across them, and\n// each continuation then starts with a fresh flags byte saying whether the rest is 8- or 16-bit.\nfunction parseSst(chunks: Uint8Array[]): string[] {\n let ci = 0, off = 8; // skip cstTotal and cstUnique\n const total = u32(chunks[0], 4);\n const strings: string[] = [];\n const advance = () => { while (ci < chunks.length && off >= chunks[ci].length) { ci++; off = 0; } };\n const read16 = () => { advance(); const v = u16(chunks[ci] ?? new Uint8Array(), off); off += 2; return v; };\n const read32 = () => { const lo = read16(); return (lo | (read16() << 16)) >>> 0; };\n const skip = (n: number) => {\n while (n > 0) {\n advance();\n if (ci >= chunks.length) throw corrupt('shared string table is cut short');\n const take = Math.min(n, chunks[ci].length - off);\n off += take; n -= take;\n }\n };\n for (let i = 0; i < total; i++) {\n advance();\n if (ci >= chunks.length) break; // some writers overstate the count\n const cch = read16();\n advance();\n const flags = chunks[ci]?.[off++];\n if (flags === undefined) throw corrupt('shared string table is cut short');\n let high = (flags & 1) === 1;\n const runs = flags & 8 ? read16() : 0;\n const ext = flags & 4 ? read32() : 0;\n let text = '';\n for (let left = cch; left > 0;) {\n if (off >= chunks[ci].length) {\n ci++; off = 0;\n if (ci >= chunks.length) throw corrupt('shared string table is cut short');\n high = (chunks[ci][off++] & 1) === 1;\n }\n const take = Math.min(left, Math.floor((chunks[ci].length - off) / (high ? 2 : 1)));\n if (take === 0) throw corrupt('a 16-bit character is split across records');\n text += chars(chunks[ci].subarray(off, off + take * (high ? 2 : 1)), high);\n off += take * (high ? 2 : 1);\n left -= take;\n }\n skip(runs * 4 + ext);\n strings.push(text);\n }\n return strings;\n}\n\nexport interface XlsSheet { name: string; state: 'visible' | 'hidden' | 'veryHidden'; offset: number; isWorksheet: boolean }\n\nexport class XlsWorkbook {\n readonly sheets: XlsSheet[] = [];\n readonly definedNames: DefinedName[] = [];\n readonly properties: WorkbookProperties = {};\n private sst: string[] = [];\n private xfFormats: number[] = [];\n private formats = new Map<number, string>(BUILTIN_NUM_FMTS);\n private dateFormats = new Set<number>();\n private date1904 = false;\n private readonly stream: Uint8Array;\n\n constructor(cfb: CfbReader) {\n const stream = cfb.read('Workbook') ?? cfb.read('Book');\n if (!stream) throw new Error('Not an Excel workbook: the compound file has no Workbook stream');\n this.stream = stream;\n this.parseGlobals();\n readProperties(cfb, this.properties);\n }\n\n private parseGlobals() {\n const s = this.stream;\n const bof = recordAt(s, 0);\n if (!bof || (bof.type & 0xff) !== 0x09) throw corrupt('no BOF record');\n if (bof.type !== 0x0809 || u16(bof.data, 0) !== 0x0600) {\n throw new Error('Only Excel 97-2003 (BIFF8) .xls files are supported; this one is from Excel 95 or earlier');\n }\n const externSheets: number[] = []; // XTI index -> first sheet index\n const names: { name: string; builtin: boolean; scope: number; rgce: Uint8Array }[] = [];\n for (let r = recordAt(s, bof.next); r; r = recordAt(s, r.next)) {\n const d = r.data;\n switch (r.type) {\n case 0x000a: // EOF\n this.resolveNames(names, externSheets);\n return;\n case 0x002f: // FILEPASS\n throw new Error('This .xls file is password-protected. Encrypted .xls files are not supported; save it as .xlsx in Excel');\n case 0x0022: // DATEMODE\n this.date1904 = u16(d, 0) === 1;\n break;\n case 0x041e: { // FORMAT\n const id = u16(d, 0);\n const [code] = xlString(d, 2, 2);\n this.formats.set(id, code);\n if (isDateFormatCode(code)) this.dateFormats.add(id);\n break;\n }\n case 0x00e0: // XF\n this.xfFormats.push(u16(d, 2));\n break;\n case 0x0085: { // BOUNDSHEET\n const [name] = xlString(d, 6, 1);\n const state = d[4] & 3;\n this.sheets.push({ name, state: state === 1 ? 'hidden' : state === 2 ? 'veryHidden' : 'visible', offset: u32(d, 0), isWorksheet: d[5] === 0 });\n break;\n }\n case 0x00fc: { // SST, with its CONTINUE records\n const chunks = [d];\n let next = recordAt(s, r.next);\n while (next?.type === 0x003c) { chunks.push(next.data); r = next; next = recordAt(s, r.next); }\n this.sst = parseSst(chunks);\n break;\n }\n case 0x0017: // EXTERNSHEET\n for (let i = 0, n = u16(d, 0); i < n; i++) externSheets.push(u16(d, 2 + i * 6 + 2) === 0xfffe ? -1 : u16(d, 2 + i * 6 + 2));\n break;\n case 0x0018: { // NAME\n const flags = u16(d, 0);\n const cch = d[3], cce = u16(d, 4), scope = u16(d, 8);\n const high = (d[14] & 1) === 1;\n const nameEnd = 15 + cch * (high ? 2 : 1);\n const raw = d.subarray(15, nameEnd);\n const builtin = (flags & 0x20) !== 0;\n names.push({ name: builtin ? (BUILTIN_NAMES[raw[0]] ?? `_xlnm.${raw[0]}`) : chars(raw, high), builtin, scope, rgce: d.subarray(nameEnd, nameEnd + cce) });\n break;\n }\n }\n }\n throw corrupt('workbook globals have no EOF record');\n }\n\n // Names whose formula is a single reference or range on a sheet; other formulas are left out\n private resolveNames(names: { name: string; scope: number; rgce: Uint8Array }[], externSheets: number[]) {\n for (const { name, scope, rgce } of names) {\n const ref = this.reference(rgce, externSheets);\n if (ref === undefined) continue;\n const out: DefinedName = { name, ref };\n if (scope > 0 && this.sheets[scope - 1]) out.sheet = this.sheets[scope - 1].name;\n this.definedNames.push(out);\n }\n }\n\n private reference(rgce: Uint8Array, externSheets: number[]): string | undefined {\n const parts: string[] = [];\n for (let i = 0; i < rgce.length;) {\n const ptg = rgce[i] & 0x1f | 0x20; // reference class does not matter here\n const sheetName = (xti: number) => {\n const sheet = this.sheets[externSheets[xti]];\n if (!sheet) return undefined;\n return /^[A-Za-z_][A-Za-z0-9_.]*$/.test(sheet.name) ? sheet.name : `'${sheet.name.replace(/'/g, \"''\")}'`;\n };\n const cell = (row: number, col: number) => `$${colLetter(col & 0x3fff)}$${row + 1}`;\n if (ptg === 0x3a && i + 7 <= rgce.length) { // ptgRef3d\n const sheet = sheetName(u16(rgce, i + 1));\n if (!sheet) return undefined;\n parts.push(`${sheet}!${cell(u16(rgce, i + 3), u16(rgce, i + 5))}`);\n i += 7;\n } else if (ptg === 0x3b && i + 11 <= rgce.length) { // ptgArea3d\n const sheet = sheetName(u16(rgce, i + 1));\n if (!sheet) return undefined;\n const [r1, r2, c1, c2] = [u16(rgce, i + 3), u16(rgce, i + 5), u16(rgce, i + 7) & 0xff, u16(rgce, i + 9) & 0xff];\n // Whole rows and columns read as $1:$2 and $A:$B, as in .xlsx\n const area = r1 === 0 && r2 === 0xffff ? `$${colLetter(c1)}:$${colLetter(c2)}`\n : c1 === 0 && c2 === 0xff ? `$${r1 + 1}:$${r2 + 1}` : `${cell(r1, c1)}:${cell(r2, c2)}`;\n parts.push(`${sheet}!${area}`);\n i += 11;\n } else if (rgce[i] === 0x10 && parts.length) { // ptgUnion, as in print titles \"A:A,1:1\"\n i++;\n } else if (ptg === 0x29) { // ptgMemFunc: wraps the references that follow\n i += 3;\n } else {\n return undefined;\n }\n }\n return parts.length ? parts.join(',') : undefined;\n }\n\n private formatCode(xf: number): string | undefined {\n const id = this.xfFormats[xf];\n return id === undefined ? undefined : DISPLAY_NUM_FMTS.get(id) ?? this.formats.get(id);\n }\n\n private isDate(xf: number): boolean {\n const id = this.xfFormats[xf];\n return id !== undefined && (isBuiltinDateFormat(id) || this.dateFormats.has(id));\n }\n\n parseSheet(name: string | undefined, formatted: boolean): ParseResult {\n const sheet = name === undefined ? this.sheets.find(s => s.isWorksheet) : this.sheets.find(s => s.name === name);\n if (!sheet) throw new Error(name === undefined ? 'No worksheets found in the workbook.' : `Sheet with name \"${name}\" not found in workbook.`);\n if (!sheet.isWorksheet) throw new Error(`Sheet \"${sheet.name}\" is a chart or macro sheet, not a worksheet`);\n\n const rows = new Map<number, { cells: CellValue[]; formatted?: (string | undefined)[] }>();\n const meta: SheetMetadata = { mergedCells: [], hiddenRows: [], hiddenCols: [], hyperlinks: [] };\n const set = (row: number, col: number, xf: number, value: CellValue, raw?: number) => {\n let r = rows.get(row);\n if (!r) rows.set(row, r = { cells: [] });\n while (r.cells.length < col) r.cells.push(null);\n if (typeof value === 'number' && this.isDate(xf)) value = excelToIsoDate(value, this.date1904);\n else if (Object.is(value, -0)) value = 0;\n r.cells[col] = value;\n if (formatted && value !== null) {\n (r.formatted ??= [])[col] = typeof value === 'string' && ERROR_TEXTS.has(value) && raw === undefined\n ? value : formatValue(raw ?? value, this.formatCode(xf) ?? 'General', this.date1904);\n }\n };\n const blank = (row: number, col: number) => {\n let r = rows.get(row);\n if (!r) rows.set(row, r = { cells: [] });\n while (r.cells.length <= col) r.cells.push(null);\n };\n\n const s = this.stream;\n const bof = recordAt(s, sheet.offset);\n if (!bof || bof.type !== 0x0809) throw corrupt(`sheet \"${sheet.name}\" does not start with a BOF record`);\n let pendingString: { row: number; col: number; xf: number } | undefined;\n let frozen = false;\n let pane: SheetMetadata['freezePanes'];\n let depth = 0; // charts embedded in the sheet are nested BOF...EOF blocks\n for (let r = recordAt(s, bof.next); r; r = recordAt(s, r.next)) {\n const d = r.data;\n if (r.type === 0x0809) { depth++; continue; }\n if (r.type === 0x000a) { if (depth-- === 0) break; continue; }\n if (depth > 0) continue;\n switch (r.type) {\n case 0x0203: // NUMBER\n set(u16(d, 0), u16(d, 2), u16(d, 4), f64(d, 6), f64(d, 6));\n break;\n case 0x027e: { // RK\n const n = rk(u32(d, 6));\n set(u16(d, 0), u16(d, 2), u16(d, 4), n, n);\n break;\n }\n case 0x00bd: { // MULRK\n const row = u16(d, 0), first = u16(d, 2);\n for (let i = 0; 4 + i * 6 + 6 <= d.length - 2; i++) {\n const n = rk(u32(d, 4 + i * 6 + 2));\n set(row, first + i, u16(d, 4 + i * 6), n, n);\n }\n break;\n }\n case 0x00fd: // LABELSST\n set(u16(d, 0), u16(d, 2), u16(d, 4), this.sst[u32(d, 6)] ?? '');\n break;\n case 0x0204: case 0x00d6: // LABEL, RSTRING\n set(u16(d, 0), u16(d, 2), u16(d, 4), xlString(d, 6, 2)[0]);\n break;\n case 0x0205: { // BOOLERR\n const isError = d[7] === 1;\n set(u16(d, 0), u16(d, 2), u16(d, 4), isError ? ERRORS[d[6]] ?? '#VALUE!' : d[6] === 1);\n break;\n }\n case 0x0201: // BLANK\n blank(u16(d, 0), u16(d, 2));\n break;\n case 0x00be: // MULBLANK\n blank(u16(d, 0), u16(d, d.length - 2));\n break;\n case 0x0006: { // FORMULA: the cached result\n const row = u16(d, 0), col = u16(d, 2), xf = u16(d, 4);\n pendingString = undefined;\n if (u16(d, 12) !== 0xffff) set(row, col, xf, f64(d, 6), f64(d, 6));\n else if (d[6] === 0) pendingString = { row, col, xf }; // text follows in a STRING record\n else if (d[6] === 1) set(row, col, xf, d[8] === 1);\n else if (d[6] === 2) set(row, col, xf, ERRORS[d[8]] ?? '#VALUE!');\n else if (d[6] === 3) set(row, col, xf, '');\n break;\n }\n case 0x0207: // STRING\n if (pendingString) set(pendingString.row, pendingString.col, pendingString.xf, xlString(d, 0, 2)[0]);\n pendingString = undefined;\n break;\n case 0x00e5: // MERGECELLS\n for (let i = 0, n = u16(d, 0); i < n; i++) {\n const o = 2 + i * 8;\n meta.mergedCells.push(`${colLetter(u16(d, o + 4))}${u16(d, o) + 1}:${colLetter(u16(d, o + 6))}${u16(d, o + 2) + 1}`);\n }\n break;\n case 0x0208: // ROW\n if (u16(d, 12) & 0x20) meta.hiddenRows.push(u16(d, 0) + 1);\n break;\n case 0x007d: // COLINFO\n if (u16(d, 8) & 1) for (let c = u16(d, 0); c <= Math.min(u16(d, 2), 255); c++) meta.hiddenCols.push(c + 1);\n break;\n case 0x023e: // WINDOW2\n frozen = (u16(d, 0) & 0x08) !== 0;\n break;\n case 0x0041: { // PANE\n const col = u16(d, 0), row = u16(d, 2);\n pane = { row, col, topLeftCell: `${colLetter(u16(d, 6))}${u16(d, 4) + 1}`, activePane: PANES[d[8]] ?? 'bottomRight' };\n break;\n }\n }\n }\n if (frozen && pane) meta.freezePanes = pane;\n\n const sorted = [...rows.entries()].sort((a, b) => a[0] - b[0]);\n async function* generate(): AsyncGenerator<RowData> {\n for (const [row, r] of sorted) {\n const data: RowData = { rowNumber: row + 1, cells: r.cells };\n if (r.formatted) data.formatted = r.formatted;\n yield data;\n }\n }\n return new ParseResult(generate(), Promise.resolve(meta));\n }\n}\n\nconst ERROR_TEXTS = new Set(Object.values(ERRORS));\nconst PANES = ['bottomRight', 'topRight', 'bottomLeft', 'topLeft'];\nconst BUILTIN_NAMES: Record<number, string> = {\n 0x00: '_xlnm.Consolidate_Area', 0x01: '_xlnm.Auto_Open', 0x02: '_xlnm.Auto_Close', 0x03: '_xlnm.Extract', 0x04: '_xlnm.Database',\n 0x05: '_xlnm.Criteria', 0x06: '_xlnm.Print_Area', 0x07: '_xlnm.Print_Titles', 0x08: '_xlnm.Recorder', 0x09: '_xlnm.Data_Form',\n 0x0a: '_xlnm.Auto_Activate', 0x0b: '_xlnm.Auto_Deactivate', 0x0c: '_xlnm.Sheet_Title', 0x0d: '_xlnm._FilterDatabase',\n};\n\n// Title, author and so on, from the OLE property sets [MS-OLEPS]\nfunction readProperties(cfb: CfbReader, out: WorkbookProperties) {\n const read = (stream: string, keys: Record<number, keyof WorkbookProperties>) => {\n const b = cfb.read(stream);\n if (!b || b.length < 48) return;\n try {\n const section = u32(b, 44);\n const count = u32(b, section + 4);\n let codepage = 1252;\n const values = new Map<number, number>();\n for (let i = 0; i < Math.min(count, 1000); i++) values.set(u32(b, section + 8 + i * 8), section + u32(b, section + 12 + i * 8));\n const cp = values.get(1);\n if (cp !== undefined && u16(b, cp) === 2) codepage = u16(b, cp + 4);\n for (const [id, key] of Object.entries(keys)) {\n const at = values.get(+id);\n if (at === undefined) continue;\n const type = u16(b, at);\n if (type === 0x1e) { // VT_LPSTR, in the property set's code page\n const len = u32(b, at + 4);\n const raw = b.subarray(at + 8, at + 8 + len);\n const text = codepage === 1200 ? utf16.decode(raw) : codepage === 65001 ? new TextDecoder().decode(raw) : latin1(raw);\n const value = text.replace(/\\0+$/, '');\n if (value) (out as Record<string, unknown>)[key] = value;\n } else if (type === 0x40 && key === 'created') { // VT_FILETIME: 100 ns ticks since 1601\n const ticks = u32(b, at + 4) + u32(b, at + 8) * 2 ** 32;\n if (ticks) out.created = new Date(ticks / 10000 - 11644473600000);\n }\n }\n } catch {\n // Properties are optional; a damaged property set must not stop the workbook from opening\n }\n };\n read('\\u0005SummaryInformation', { 2: 'title', 3: 'subject', 4: 'creator', 5: 'keywords', 6: 'description', 12: 'created' });\n read('\\u0005DocumentSummaryInformation', { 2: 'category', 14: 'manager', 15: 'company' });\n}\n","// Reader for OpenDocument spreadsheets (.ods, as saved by LibreOffice, Google Sheets and Excel).\n// content.xml streams through the same tokenizer as .xlsx sheets, so memory stays flat.\n\nimport { createXmlBatchParser, type XmlToken } from './xml-stream';\nimport { ParseResult, excelToIsoDate, type CellValue, type RowData, type SheetComment, type SheetMetadata } from './worksheet-parser';\nimport { colLetter, unescapeXml, xmlElements } from './utils';\nimport type { DefinedName, WorkbookProperties } from './types';\n\nexport const ODS_MIMETYPE = 'application/vnd.oasis.opendocument.spreadsheet';\n\nconst MAX_ROWS = 1 << 20;\nconst MAX_COLUMNS = 1 << 14;\nconst ERROR_TEXT = /^#(NULL!|DIV\\/0!|VALUE!|REF!|NAME\\?|NUM!|N\\/A|GETTING_DATA|SPILL!|CALC!)$/;\n\ntype TokenSource = () => Promise<ReadableStream<Uint8Array>>;\n\nasync function* tokens(open: TokenSource): AsyncGenerator<XmlToken> {\n const reader = (await open()).pipeThrough(createXmlBatchParser()).getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) return;\n yield* value;\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nconst repeat = (value: string | undefined, max: number) => Math.min(Math.max(parseInt(value ?? '1', 10) || 1, 1), max);\n\n// \"2026-10-08\" or \"2026-10-08T14:04:30\" (local time in the file) as the ISO string the .xlsx reader returns\nfunction odsDate(value: string): string | null {\n const m = /^(-?\\d{4,})-(\\d\\d)-(\\d\\d)(?:T(\\d\\d):(\\d\\d):(\\d\\d)(\\.\\d+)?)?/.exec(value);\n if (!m) return null;\n const ms = Date.UTC(+m[1], +m[2] - 1, +m[3], +(m[4] ?? 0), +(m[5] ?? 0), +(m[6] ?? 0), Math.round(+(m[7] ?? 0) * 1000));\n return isNaN(ms) ? null : new Date(ms).toISOString();\n}\n\n// \"PT14H04M30S\" as a fraction of a day, shown like an .xlsx time-only cell\nfunction odsTime(value: string): string | null {\n const m = /^(-)?P(?:(\\d+)D)?T(?:(\\d+)H)?(?:(\\d+)M)?(?:(\\d+(?:\\.\\d+)?)S)?$/.exec(value);\n if (!m) return null;\n const seconds = (+(m[2] ?? 0) * 24 + +(m[3] ?? 0)) * 3600 + +(m[4] ?? 0) * 60 + +(m[5] ?? 0);\n return excelToIsoDate((m[1] ? -seconds : seconds) / 86400);\n}\n\n// OpenFormula to Excel syntax: \"of:=SUM([.A1:.B2];[$Sheet2.C3])\" -> \"SUM(A1:B2,Sheet2!C3)\"\nexport function odsFormula(formula: string): string {\n let f = formula.replace(/^(?:of:)?=/, '');\n f = f.replace(/\\[([^\\]]*)\\]/g, (_, ref: string) => ref.split(':').map(part => {\n const dot = part.lastIndexOf('.');\n const sheet = part.slice(0, dot).replace(/^\\$/, '');\n const cell = part.slice(dot + 1);\n return sheet ? `${sheet.startsWith(\"'\") ? sheet : /^[A-Za-z_][\\w.]*$/.test(sheet) ? sheet : `'${sheet}'`}!${cell}` : cell;\n }).join(':').replace(/^([^!]+!)([^:]+):\\1/, '$1$2:'));\n // Separators outside string literals\n return f.replace(/\"[^\"]*\"|;/g, s => s === ';' ? ',' : s);\n}\n\n// \"$Sheet1.$A$1:.$B$2\" -> \"Sheet1!$A$1:$B$2\"\nfunction odsRange(address: string): string {\n return address.split(' ').map(range => odsFormula(`[${range}]`)).join(',');\n}\n\nexport interface OdsSheet { name: string; state: 'visible' | 'hidden' }\n\nexport async function readOdsWorkbook(content: TokenSource, readText: (name: string) => Promise<string>) {\n const sheets: OdsSheet[] = [];\n const definedNames: DefinedName[] = [];\n const hiddenStyles = new Set<string>();\n let style: string | undefined;\n for await (const t of tokens(content)) {\n if (t.type !== 'startElement') continue;\n const a = t.attributes;\n if (t.name === 'style' && a['family'] === 'table') style = a['name'];\n else if (t.name === 'table-properties' && style && a['display'] === 'false') hiddenStyles.add(style);\n else if (t.name === 'table' && a['name'] !== undefined) {\n sheets.push({ name: a['name'], state: hiddenStyles.has(a['style-name'] ?? '') ? 'hidden' : 'visible' });\n } else if (t.name === 'named-range' && a['name'] && a['cell-range-address']) {\n definedNames.push({ name: a['name'], ref: odsRange(a['cell-range-address']) });\n } else if (t.name === 'named-expression' && a['name'] && a['expression']) {\n definedNames.push({ name: a['name'], ref: odsFormula(a['expression']) });\n }\n }\n\n const meta = await readText('meta.xml');\n const text = (tag: string) => { for (const el of xmlElements(meta, tag)) return unescapeXml(el.body); return undefined; };\n const properties: WorkbookProperties = {};\n for (const [key, tag] of [['title', 'dc:title'], ['subject', 'dc:subject'], ['creator', 'meta:initial-creator'],\n ['keywords', 'meta:keyword'], ['description', 'dc:description']] as const) {\n const v = text(tag);\n if (v) properties[key] = v;\n }\n if (!properties.creator && text('dc:creator')) properties.creator = text('dc:creator');\n const created = text('meta:creation-date');\n // Without a zone the time is UTC, as written by OdsWriter (and stored by Excel)\n const createdAt = created && new Date(/(?:Z|[+-]\\d\\d:?\\d\\d)$/.test(created) ? created : created + 'Z');\n if (createdAt && !isNaN(createdAt.getTime())) properties.created = createdAt;\n return { sheets, definedNames, properties };\n}\n\n// Frozen panes are view settings, kept in settings.xml per sheet\nasync function freezePanes(readText: (name: string) => Promise<string>, sheet: string): Promise<SheetMetadata['freezePanes']> {\n const settings = await readText('settings.xml');\n // Per-sheet entries sit inside the view's own (unnamed) entry and hold no entries themselves\n for (const m of settings.matchAll(/<config:config-item-map-entry\\s+config:name=\"([^\"]*)\"\\s*>([\\s\\S]*?)<\\/config:config-item-map-entry>/g)) {\n if (unescapeXml(m[1]) !== sheet) continue;\n const item = (name: string) => {\n for (const el of xmlElements(m[2], 'config:config-item')) if (el.attrs.includes(`config:name=\"${name}\"`)) return parseInt(el.body, 10) || 0;\n return 0;\n };\n const cols = item('HorizontalSplitMode') === 2 ? item('HorizontalSplitPosition') : 0;\n const rows = item('VerticalSplitMode') === 2 ? item('VerticalSplitPosition') : 0;\n if (!rows && !cols) return undefined;\n const pane = rows && cols ? 'bottomRight' : rows ? 'bottomLeft' : 'topRight';\n return { row: rows, col: cols, topLeftCell: `${colLetter(cols ? item('PositionRight') : 0)}${(rows ? item('PositionBottom') : 0) + 1}`, activePane: pane };\n }\n return undefined;\n}\n\nexport interface OdsParseOptions { sheetName?: string; formulas?: boolean; formatted?: boolean; maxPaddingCells?: number }\n\nexport function parseOds(content: TokenSource, readText: (name: string) => Promise<string>, options: OdsParseOptions): ParseResult {\n let resolveMeta!: (m: SheetMetadata) => void;\n let rejectMeta!: (e: unknown) => void;\n const metadata = new Promise<SheetMetadata>((res, rej) => { resolveMeta = res; rejectMeta = rej; });\n metadata.catch(() => {}); // surfaced by the row iterator; awaiting getMetadata() still sees it\n const comments: SheetComment[] = [];\n let finished: Promise<void> = Promise.resolve();\n\n async function* generate(): AsyncGenerator<RowData> {\n const meta: SheetMetadata = { mergedCells: [], hiddenRows: [], hiddenCols: [], hyperlinks: [] };\n let done!: () => void;\n finished = new Promise(r => { done = r; });\n try {\n let found: string | undefined;\n let depth = 0; // table elements open inside the target sheet (a table in a cell's shape, say)\n let row = 0, col = 0, column = 0;\n let rowRepeat = 1, rowHidden = false;\n let cells: CellValue[] = [], formulas: (string | undefined)[] | undefined, formatted: (string | undefined)[] | undefined;\n let cell: Record<string, string> | undefined;\n let cellRepeat = 1;\n let text: string[] = [], para = -1, link: string | undefined;\n let note: { text: string[]; author?: string; inAuthor: boolean } | undefined;\n let padding = 0, rowPadding = 0;\n const checkPadding = (total: number) => {\n if (total > (options.maxPaddingCells ?? Infinity)) {\n throw new Error(`Security Error: rows padded with more than ${options.maxPaddingCells} empty cells (maxUncompressedBytes).`);\n }\n };\n let emitted = 0;\n\n for await (const t of tokens(content)) {\n if (!found) {\n if (t.type === 'startElement' && t.name === 'table' && (options.sheetName === undefined || t.attributes['name'] === options.sheetName)) {\n found = t.attributes['name'] ?? '';\n }\n continue;\n }\n if (t.type === 'startElement') {\n const a = t.attributes;\n if (t.name === 'table') { depth++; continue; }\n if (depth > 0) continue;\n if (note) {\n if (t.name === 'creator') note.inAuthor = true;\n else if (t.name === 'p') note.text.push('');\n continue;\n }\n switch (t.name) {\n case 'table-column': {\n const n = repeat(a['number-columns-repeated'], MAX_COLUMNS - column);\n if (a['visibility'] === 'collapse') for (let c = column; c < column + n; c++) meta.hiddenCols.push(c + 1);\n column += n;\n break;\n }\n case 'table-row':\n rowRepeat = repeat(a['number-rows-repeated'], MAX_ROWS - row);\n rowHidden = a['visibility'] === 'collapse';\n cells = []; formulas = undefined; formatted = undefined; col = 0; rowPadding = 0;\n break;\n case 'table-cell': case 'covered-table-cell':\n cell = a; cellRepeat = repeat(a['number-columns-repeated'], MAX_COLUMNS - col);\n text = []; para = -1; link = undefined;\n if (t.name === 'table-cell' && (a['number-columns-spanned'] || a['number-rows-spanned'])) {\n const cols = repeat(a['number-columns-spanned'], MAX_COLUMNS - col), rows = repeat(a['number-rows-spanned'], MAX_ROWS - row);\n if (cols > 1 || rows > 1) meta.mergedCells.push(`${colLetter(col)}${row + 1}:${colLetter(col + cols - 1)}${row + rows}`);\n }\n break;\n case 'annotation':\n note = { text: [], inAuthor: false };\n break;\n case 'p':\n if (cell) { text.push(''); para++; }\n break;\n case 's':\n if (cell && para >= 0) text[para] += ' '.repeat(repeat(a['c'], 1000));\n break;\n case 'tab':\n if (cell && para >= 0) text[para] += '\\t';\n break;\n case 'line-break':\n if (cell && para >= 0) text[para] += '\\n';\n break;\n case 'a':\n if (cell && a['href']) link = a['href'];\n break;\n }\n } else if (t.type === 'text') {\n if (depth > 0) continue;\n if (note) {\n if (note.inAuthor) note.author = (note.author ?? '') + t.value;\n else if (note.text.length) note.text[note.text.length - 1] += t.value;\n } else if (cell && para >= 0) text[para] += t.value;\n } else {\n if (t.name === 'table') {\n if (depth-- > 0) continue;\n break; // end of the sheet\n }\n if (depth > 0) continue;\n if (note) {\n if (t.name === 'creator') note.inAuthor = false;\n else if (t.name === 'annotation') {\n comments.push({ ref: `${colLetter(col)}${row + 1}`, text: note.text.join('\\n'), ...(note.author ? { author: note.author } : {}) });\n note = undefined;\n }\n continue;\n }\n if ((t.name === 'table-cell' || t.name === 'covered-table-cell') && cell) {\n const a = cell;\n const shown = text.join('\\n');\n let value: CellValue = null;\n switch (a['value-type']) {\n case 'float': case 'percentage': case 'currency': {\n const n = Number(a['value']);\n value = isNaN(n) ? shown || null : n === 0 ? 0 : n;\n // Excel saves a formula error as the number 0 with the error as its text\n if (a['formula'] && ERROR_TEXT.test(shown)) value = shown;\n break;\n }\n case 'date': value = odsDate(a['date-value'] ?? '') ?? shown; break;\n case 'time': value = odsTime(a['time-value'] ?? '') ?? shown; break;\n case 'boolean': value = a['boolean-value'] === 'true'; break;\n case 'string': value = a['string-value'] ?? shown; break;\n default: value = shown || null; // formula errors carry only their text\n }\n if (value !== null || a['formula']) {\n rowPadding += Math.max(0, col - cells.length);\n checkPadding(padding + rowPadding);\n while (cells.length < col) cells.push(null);\n for (let i = 0; i < cellRepeat; i++) {\n cells[col + i] = value;\n if (options.formulas && a['formula']) (formulas ??= [])[col + i] = odsFormula(a['formula']);\n if (options.formatted && value !== null) (formatted ??= [])[col + i] = shown;\n }\n if (link && value !== null) meta.hyperlinks.push({ ref: `${colLetter(col)}${row + 1}`, hyperlink: link });\n }\n col += cellRepeat;\n cell = undefined;\n } else if (t.name === 'table-row') {\n if (rowHidden) for (let r = row; r < row + rowRepeat; r++) meta.hiddenRows.push(r + 1);\n if (cells.length) {\n for (let i = 0; i < rowRepeat; i++) {\n // Each repeated copy carries its padding again, so a tiny file can't expand without bound\n padding += rowPadding;\n checkPadding(padding);\n if (++emitted > MAX_ROWS) throw new Error('Sheet has more than 1,048,576 rows');\n const data: RowData = { rowNumber: row + i + 1, cells: i ? cells.slice() : cells };\n if (formulas) data.formulas = formulas;\n if (formatted) data.formatted = formatted;\n yield data;\n }\n }\n row += rowRepeat;\n }\n }\n }\n if (!found) throw new Error(options.sheetName === undefined ? 'No worksheets found in the workbook.' : `Sheet with name \"${options.sheetName}\" not found in workbook.`);\n meta.freezePanes = await freezePanes(readText, found);\n resolveMeta(meta);\n } catch (e) {\n rejectMeta(e);\n throw e;\n } finally {\n done();\n }\n }\n\n const rows = generate();\n return new ParseResult(rows, metadata, async () => [], async () => { await finished; return comments; });\n}\n","import { argb, escapeXml as escapeText } from './utils';\nimport { CellStyle, CellFont, CellFill, GradientFill, CellBorder, CellAlignment, HighlightStyle } from './types';\n\nconst escapeXml = (val: unknown) => escapeText(String(val));\n\n// Child elements of a <font> (styles) or, with nameTag \"rFont\", of a rich text run's <rPr>\nexport function fontXml(font: CellFont, nameTag = 'name'): string {\n let xml = '';\n if (font.bold) xml += '<b/>';\n if (font.italic) xml += '<i/>';\n if (font.underline) xml += '<u/>';\n if (font.size) xml += `<sz val=\"${escapeXml(font.size)}\"/>`;\n if (font.color) xml += `<color rgb=\"${argb(font.color)}\"/>`;\n if (font.name) xml += `<${nameTag} val=\"${escapeXml(font.name)}\"/>`;\n return xml;\n}\n\nexport const borderSideXml = (tag: string, s?: { style: string; color?: string }) =>\n s ? `<${tag} style=\"${escapeXml(s.style)}\">${s.color ? `<color rgb=\"${argb(s.color)}\"/>` : ''}</${tag}>` : `<${tag}/>`;\n\nexport function borderXml(b: CellBorder): string {\n const side = borderSideXml;\n return `<border>${side('left', b.left)}${side('right', b.right)}${side('top', b.top)}${side('bottom', b.bottom)}<diagonal/></border>`;\n}\n\nexport function fillXml(fill: CellFill | GradientFill): string {\n if (fill.type === 'gradient') {\n const stops = fill.stops.map(s => `<stop position=\"${s.position}\"><color rgb=\"${argb(s.color)}\"/></stop>`).join('');\n return `<fill><gradientFill degree=\"${escapeXml(fill.degree ?? 0)}\">${stops}</gradientFill></fill>`;\n }\n return `<fill><patternFill patternType=\"solid\"><fgColor rgb=\"${argb(fill.fgColor)}\"/></patternFill></fill>`;\n}\n\n// Attributes of an <alignment> element\nexport function alignmentAttrs(alignment: CellAlignment): Record<string, string> {\n const attrs: Record<string, string> = {};\n if (alignment.horizontal) attrs.horizontal = escapeXml(alignment.horizontal);\n // OOXML has no \"middle\"; Excel repairs the file if it sees one\n if (alignment.vertical) attrs.vertical = alignment.vertical === 'middle' ? 'center' : escapeXml(alignment.vertical);\n if (alignment.wrapText) attrs.wrapText = '1';\n return attrs;\n}\n\n// Registry of unique styles: maps to integer index for OOXML styleSheet\ninterface StyleRegistry {\n fonts: Map<string, number>;\n fills: Map<string, number>;\n borders: Map<string, number>;\n numFmts: Map<string, number>;\n cellXfs: { fontId: number; fillId: number; borderId: number; numFmtId: number; alignmentXml: string }[];\n}\n\nexport class StyleEngine {\n private registry: StyleRegistry = {\n fonts: new Map(),\n fills: new Map(),\n borders: new Map(),\n numFmts: new Map(),\n cellXfs: [],\n };\n private xfIndex = new Map<string, number>();\n // Differential formats used by conditional formatting, in dxfId order\n private dxfs = new Map<string, number>();\n\n // dxfId for a highlight style\n registerDxf(style: HighlightStyle): number {\n const key = JSON.stringify(style);\n let id = this.dxfs.get(key);\n if (id === undefined) {\n this.dxfs.set(key, id = this.dxfs.size);\n if (style.numFmt) this.registerNumFmt(style.numFmt);\n }\n return id;\n }\n\n private dxfXml(style: HighlightStyle): string {\n let xml = style.font ? `<font>${fontXml(style.font)}</font>` : '';\n if (style.numFmt) xml += `<numFmt numFmtId=\"${this.registerNumFmt(style.numFmt)}\" formatCode=\"${escapeXml(style.numFmt)}\"/>`;\n if (style.fill?.type === 'solid') {\n // A differential solid fill takes its colour from bgColor\n const c = argb(style.fill.fgColor);\n xml += `<fill><patternFill patternType=\"solid\"><fgColor rgb=\"${c}\"/><bgColor rgb=\"${c}\"/></patternFill></fill>`;\n }\n if (style.border) xml += borderXml(style.border);\n return `<dxf>${xml}</dxf>`;\n }\n\n registerStyle(style: CellStyle): number {\n const fontId = style.font ? this.registerFont(style.font) : 0;\n const fillId = style.fill ? this.registerFill(style.fill) : 0;\n const borderId = style.border ? this.registerBorder(style.border) : 0;\n const numFmtId = style.numFmt ? this.registerNumFmt(style.numFmt) : 0;\n const alignmentXml = style.alignment ? this.buildAlignmentXml(style.alignment) : '';\n\n const key = `${fontId}|${fillId}|${borderId}|${numFmtId}|${alignmentXml}`;\n const existing = this.xfIndex.get(key);\n if (existing !== undefined) return existing;\n\n this.registry.cellXfs.push({ fontId, fillId, borderId, numFmtId, alignmentXml });\n const id = this.registry.cellXfs.length; // 1-based because 0 is the default xf\n this.xfIndex.set(key, id);\n return id;\n }\n\n private registerFont(font: CellFont): number {\n const key = JSON.stringify(font);\n if (this.registry.fonts.has(key)) return this.registry.fonts.get(key)!;\n const id = this.registry.fonts.size + 1; // slot 0 = default font\n this.registry.fonts.set(key, id);\n return id;\n }\n\n private registerFill(fill: CellFill | GradientFill): number {\n const key = JSON.stringify(fill);\n if (this.registry.fills.has(key)) return this.registry.fills.get(key)!;\n const id = this.registry.fills.size + 2; // slots 0-1 = required none/gray125\n this.registry.fills.set(key, id);\n return id;\n }\n\n private registerBorder(border: CellBorder): number {\n const key = JSON.stringify(border);\n if (this.registry.borders.has(key)) return this.registry.borders.get(key)!;\n const id = this.registry.borders.size + 1; // slot 0 = empty border\n this.registry.borders.set(key, id);\n return id;\n }\n\n private registerNumFmt(fmt: string): number {\n if (this.registry.numFmts.has(fmt)) return this.registry.numFmts.get(fmt)!;\n const id = 164 + this.registry.numFmts.size;\n this.registry.numFmts.set(fmt, id);\n return id;\n }\n\n private buildAlignmentXml(alignment: CellAlignment): string {\n const attrs = Object.entries(alignmentAttrs(alignment)).map(([k, v]) => `${k}=\"${v}\"`);\n return attrs.length ? `<alignment ${attrs.join(' ')}/>` : '';\n }\n\n // Serialize entire style registry to OOXML styleSheet XML\n toXml(): string {\n const numFmtsXml = this.buildNumFmtsXml();\n const fontsXml = this.buildFontsXml();\n const fillsXml = this.buildFillsXml();\n const bordersXml = this.buildBordersXml();\n const cellXfsXml = this.buildCellXfsXml();\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<styleSheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\">\n${numFmtsXml}\n${fontsXml}\n${fillsXml}\n${bordersXml}\n<cellStyleXfs count=\"1\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\"/></cellStyleXfs>\n<cellXfs count=\"${this.registry.cellXfs.length + 1}\">\n${cellXfsXml}\n</cellXfs>\n<cellStyles count=\"1\"><cellStyle name=\"Normal\" xfId=\"0\" builtinId=\"0\"/></cellStyles>\n${this.dxfs.size ? `<dxfs count=\"${this.dxfs.size}\">${[...this.dxfs.keys()].map(k => this.dxfXml(JSON.parse(k))).join('')}</dxfs>` : ''}\n</styleSheet>`;\n }\n\n private buildNumFmtsXml(): string {\n if (this.registry.numFmts.size === 0) return '';\n const entries: string[] = [];\n for (const [fmt, id] of this.registry.numFmts) {\n entries.push(`<numFmt numFmtId=\"${id}\" formatCode=\"${escapeXml(fmt)}\"/>`);\n }\n return `<numFmts count=\"${entries.length}\">${entries.join('')}</numFmts>`;\n }\n\n private buildFontsXml(): string {\n const fontEntries: string[] = [\n '<font><sz val=\"11\"/><name val=\"Calibri\"/></font>' // default\n ];\n\n for (const [key] of this.registry.fonts) {\n fontEntries.push(`<font>${fontXml(JSON.parse(key))}</font>`);\n }\n\n return `<fonts count=\"${fontEntries.length}\">${fontEntries.join('')}</fonts>`;\n }\n\n private buildFillsXml(): string {\n const fillEntries: string[] = [\n '<fill><patternFill patternType=\"none\"/></fill>',\n '<fill><patternFill patternType=\"gray125\"/></fill>',\n ];\n\n for (const [key] of this.registry.fills) fillEntries.push(fillXml(JSON.parse(key)));\n\n return `<fills count=\"${fillEntries.length}\">${fillEntries.join('')}</fills>`;\n }\n\n private buildBordersXml(): string {\n const borderEntries: string[] = [\n '<border><left/><right/><top/><bottom/><diagonal/></border>'\n ];\n\n for (const [key] of this.registry.borders) borderEntries.push(borderXml(JSON.parse(key)));\n\n return `<borders count=\"${borderEntries.length}\">${borderEntries.join('')}</borders>`;\n }\n\n private buildCellXfsXml(): string {\n // Default xf\n const entries: string[] = [\n '<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\"/>'\n ];\n\n for (const xf of this.registry.cellXfs) {\n entries.push(\n `<xf numFmtId=\"${xf.numFmtId}\" fontId=\"${xf.fontId}\" fillId=\"${xf.fillId}\" borderId=\"${xf.borderId}\" xfId=\"0\" applyNumberFormat=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"${xf.alignmentXml ? ' applyAlignment=\"1\"' : ''}>${xf.alignmentXml}</xf>`\n );\n }\n\n return entries.join('\\n');\n }\n}\n","import { argb, escapeXml as escapeText } from './utils';\nimport { ConditionalFormat, DataBarRule, ColorScaleRule, ConditionalFormatRule, HighlightStyle } from './types';\n\nconst escapeXml = (val: unknown) => escapeText(String(val));\n\nconst color = (rgb: string) => `<color rgb=\"${argb(rgb)}\"/>`;\nconst bound = (type: 'min' | 'max', value?: number) =>\n value === undefined ? `<cfvo type=\"${type}\"/>` : `<cfvo type=\"num\" val=\"${escapeXml(value)}\"/>`;\nconst formula = (f: string | number) => `<formula>${escapeXml(String(f).replace(/^=/, ''))}</formula>`;\n// Excel string literal inside a formula\nconst literal = (s: string) => `\"${s.replace(/\"/g, '\"\"')}\"`;\n\nexport class ConditionalFormatter {\n // `dxf` registers a highlight style and returns its dxfId\n constructor(private dxf: (style: HighlightStyle) => number = () => 0) {}\n\n // Priorities must be unique within a sheet: rule i gets priority i + 1\n toXml(formats: ConditionalFormat[]): string {\n return formats.map((cf, i) => {\n // The first cell of the first area: relative formulas are written for it\n const topLeft = cf.range.split(/[\\s:]/)[0].replace(/\\$/g, '');\n const rule = this.ruleXml(cf.rule, i + 1, topLeft);\n return `<conditionalFormatting sqref=\"${escapeXml(cf.range)}\">${rule}</conditionalFormatting>`;\n }).join('\\n');\n }\n\n private ruleXml(rule: ConditionalFormatRule, priority: number, cell: string): string {\n const head = (type: string, extra = '') => {\n const dxf = 'style' in rule ? ` dxfId=\"${this.dxf(rule.style)}\"` : '';\n return `<cfRule type=\"${type}\"${dxf} priority=\"${priority}\"${extra}>`;\n };\n switch (rule.type) {\n case 'dataBar': return `${head('dataBar')}${this.buildDataBar(rule)}</cfRule>`;\n case 'colorScale': return `${head('colorScale')}${this.buildColorScale(rule)}</cfRule>`;\n case 'cellIs':\n return `${head('cellIs', ` operator=\"${escapeXml(rule.operator)}\"`)}${rule.formulae.map(formula).join('')}</cfRule>`;\n case 'expression': return `${head('expression')}${formula(rule.formula)}</cfRule>`;\n case 'top10':\n return `${head('top10', `${rule.percent ? ' percent=\"1\"' : ''}${rule.bottom ? ' bottom=\"1\"' : ''} rank=\"${escapeXml(rule.rank)}\"`)}</cfRule>`;\n case 'aboveAverage': return `${head('aboveAverage', rule.below ? ' aboveAverage=\"0\"' : '')}</cfRule>`;\n case 'duplicateValues':\n case 'uniqueValues': return `${head(rule.type)}</cfRule>`;\n case 'containsText':\n case 'notContainsText':\n case 'beginsWith':\n case 'endsWith': {\n // Excel stores the test as a formula too, and evaluates that one\n const t = literal(rule.text);\n const test = {\n containsText: `NOT(ISERROR(SEARCH(${t},${cell})))`,\n notContainsText: `ISERROR(SEARCH(${t},${cell}))`,\n beginsWith: `LEFT(${cell},LEN(${t}))=${t}`,\n endsWith: `RIGHT(${cell},LEN(${t}))=${t}`,\n }[rule.type];\n const operator = rule.type === 'notContainsText' ? 'notContains' : rule.type;\n return `${head(rule.type, ` operator=\"${operator}\" text=\"${escapeXml(rule.text)}\"`)}${formula(test)}</cfRule>`;\n }\n case 'iconSet': {\n const n = parseInt(rule.iconSet, 10);\n const cfvos = Array.from({ length: n }, (_, k) => `<cfvo type=\"percent\" val=\"${Math.round(k * 100 / n)}\"/>`).join('');\n const attrs = `${rule.reverse ? ' reverse=\"1\"' : ''}${rule.showValue === false ? ' showValue=\"0\"' : ''}`;\n return `${head('iconSet')}<iconSet iconSet=\"${escapeXml(rule.iconSet)}\"${attrs}>${cfvos}</iconSet></cfRule>`;\n }\n default:\n throw new Error(`Unknown conditional format type \"${(rule as { type: string }).type}\".`);\n }\n }\n\n private buildDataBar(rule: DataBarRule): string {\n return `<dataBar>${bound('min', rule.minValue)}${bound('max', rule.maxValue)}${color(rule.color)}</dataBar>`;\n }\n\n private buildColorScale(rule: ColorScaleRule): string {\n const mid = rule.midColor !== undefined;\n return `<colorScale><cfvo type=\"min\"/>${mid ? '<cfvo type=\"percentile\" val=\"50\"/>' : ''}<cfvo type=\"max\"/>` +\n `${color(rule.minColor)}${mid ? color(rule.midColor!) : ''}${color(rule.maxColor)}</colorScale>`;\n }\n}\n","export type FormulaResult = number | string | boolean | null;\n\n// A formula cell handed to loadData; its value is computed when a formula reads it\nexport interface FormulaCell { formula: string }\n\ntype TokenType = 'NUMBER' | 'STRING' | 'CELL' | 'RANGE' | 'IDENTIFIER' | 'OP' | 'PAREN_L' | 'PAREN_R' | 'COMMA';\n\ninterface Token {\n type: TokenType;\n value: string;\n}\n\ninterface ASTNode {\n type: 'NUMBER' | 'STRING' | 'BOOL' | 'CELL' | 'RANGE' | 'CALL' | 'BINARY' | 'NEG' | 'PERCENT';\n value?: any;\n left?: ASTNode;\n right?: ASTNode;\n operator?: string;\n name?: string;\n args?: ASTNode[];\n}\n\n// An Excel error value (#DIV/0!, #VALUE!), kept apart from text that happens to start with \"#\"\nexport class FormulaError {\n constructor(readonly code: string) {}\n}\n\nexport const ERROR_CODES = new Set(['#NULL!', '#DIV/0!', '#VALUE!', '#REF!', '#NAME?', '#NUM!', '#N/A']);\n\n// Syntax or functions this engine doesn't know: no cached value, Excel computes it on open\nclass Unsupported extends Error {}\n// A formula that reads its own cell, directly or through others\nclass Circular extends Error {}\n\ntype Value = number | string | boolean | null | FormulaError;\n\nconst DIV0 = new FormulaError('#DIV/0!');\nconst VALUE = new FormulaError('#VALUE!');\n\n// Numbers turned into text keep Excel's 15 significant digits (\"0.333333333333333\", 1E+21)\nexport function numberText(n: number): string {\n return String(Number(n.toPrecision(15))).replace('e', 'E');\n}\n\nexport class FormulaEngine {\n private cells = new Map<string, FormulaResult | FormulaCell>();\n private results = new Map<string, Value>();\n private evaluating = new Set<string>();\n\n clear() {\n this.cells.clear();\n this.results.clear();\n }\n\n loadData(data: (FormulaResult | FormulaCell)[][], startRow = 1) {\n data.forEach((row, ri) => {\n row.forEach((cell, ci) => {\n const ref = this.toRef(ri + startRow, ci);\n this.cells.set(ref, cell);\n });\n });\n }\n\n // Errors come back as their code (\"#DIV/0!\")\n evaluate(formula: string): FormulaResult {\n const v = this.evaluateRaw(formula);\n return v instanceof FormulaError ? v.code : v;\n }\n\n // Like evaluate, but errors stay FormulaError so text such as \"#1 pick\" is told apart from them\n evaluateRaw(formula: string): Value {\n try {\n return this.run(formula);\n } catch (err) {\n // A circular reference is stored as 0, as Excel does\n if (err instanceof Circular) return 0;\n return null;\n }\n }\n\n // The value of a loaded cell, computing its formula (and the formulas it reads) when it has one\n cellValue(ref: string): Value {\n try {\n return this.lookup(ref.toUpperCase());\n } catch (err) {\n if (err instanceof Circular) return 0;\n return null;\n }\n }\n\n private run(formula: string): Value {\n const clean = formula.replace(/^=/, '').trim();\n if (!clean) return null;\n // A formula is never blank: =A1 over an empty cell is 0\n return this.scalar(this.parse(this.tokenize(clean))) ?? 0;\n }\n\n private lookup(ref: string): Value {\n const cell = this.cells.get(ref);\n if (cell === null || typeof cell !== 'object') return cell ?? null;\n if (this.results.has(ref)) {\n const known = this.results.get(ref)!;\n if (known === undefined) throw new Unsupported();\n return known;\n }\n if (this.evaluating.has(ref)) throw new Circular();\n this.evaluating.add(ref);\n try {\n const v = this.run(cell.formula);\n this.results.set(ref, v);\n return v;\n } catch (err) {\n if (!(err instanceof Circular)) this.results.set(ref, undefined as any);\n throw err;\n } finally {\n this.evaluating.delete(ref);\n }\n }\n\n private tokenize(expr: string): Token[] {\n const tokens: Token[] = [];\n let i = 0;\n while (i < expr.length) {\n const char = expr[i];\n if (/\\s/.test(char)) { i++; continue; }\n if (char === '(') { tokens.push({ type: 'PAREN_L', value: '(' }); i++; continue; }\n if (char === ')') { tokens.push({ type: 'PAREN_R', value: ')' }); i++; continue; }\n if (char === ',') { tokens.push({ type: 'COMMA', value: ',' }); i++; continue; }\n if (/[+\\-*/^<>=%&]/.test(char)) {\n let op = char;\n if (char === '<' || char === '>') {\n if (expr[i + 1] === '=') { op += '='; i++; }\n else if (char === '<' && expr[i + 1] === '>') { op += '>'; i++; }\n }\n tokens.push({ type: 'OP', value: op });\n i++;\n continue;\n }\n if (char === '\"') {\n // \"\" inside a string is one quote\n let str = '';\n i++;\n for (;;) {\n if (i >= expr.length) throw new Unsupported();\n if (expr[i] === '\"') {\n if (expr[i + 1] !== '\"') break;\n i++;\n }\n str += expr[i++];\n }\n i++;\n tokens.push({ type: 'STRING', value: str });\n continue;\n }\n const num = /^(?:\\d+\\.?\\d*|\\.\\d+)(?:[Ee][+-]?\\d+)?/.exec(expr.slice(i));\n if (num) {\n tokens.push({ type: 'NUMBER', value: num[0] });\n i += num[0].length;\n continue;\n }\n if (/[A-Za-z$]/.test(char)) {\n // \"$\" only pins a reference when copied; it does not change what it points at\n let id = '';\n while (i < expr.length && /[A-Za-z0-9$_.]/.test(expr[i])) { id += expr[i++]; }\n id = id.replace(/\\$/g, '');\n if (i < expr.length && expr[i] === ':') {\n i++;\n let endId = '';\n while (i < expr.length && /[A-Za-z0-9$]/.test(expr[i])) { endId += expr[i++]; }\n endId = endId.replace(/\\$/g, '');\n if (!/^[A-Z]{1,3}\\d+$/i.test(id) || !/^[A-Z]{1,3}\\d+$/i.test(endId)) throw new Unsupported();\n tokens.push({ type: 'RANGE', value: id.toUpperCase() + ':' + endId.toUpperCase() });\n } else if (/^[A-Z]{1,3}\\d+$/i.test(id)) {\n tokens.push({ type: 'CELL', value: id.toUpperCase() });\n } else {\n tokens.push({ type: 'IDENTIFIER', value: id.toUpperCase() });\n }\n continue;\n }\n // Sheet references ('Q1'!A1, Data!A1), arrays, error literals and the rest\n throw new Unsupported();\n }\n return tokens;\n }\n\n private parse(tokens: Token[]): ASTNode {\n let pos = 0;\n const isOp = (...ops: string[]) => pos < tokens.length && tokens[pos].type === 'OP' && ops.includes(tokens[pos].value);\n const expect = (type: TokenType) => {\n if (tokens[pos]?.type !== type) throw new Unsupported();\n pos++;\n };\n\n const parseAtom = (): ASTNode => {\n const token = tokens[pos];\n if (!token) throw new Unsupported();\n if (token.type === 'NUMBER') { pos++; return { type: 'NUMBER', value: parseFloat(token.value) }; }\n if (token.type === 'STRING') { pos++; return { type: 'STRING', value: token.value }; }\n if (token.type === 'CELL') { pos++; return { type: 'CELL', value: token.value }; }\n if (token.type === 'RANGE') { pos++; return { type: 'RANGE', value: token.value }; }\n if (token.type === 'IDENTIFIER') {\n const name = token.value;\n pos++;\n if (tokens[pos]?.type === 'PAREN_L') {\n pos++;\n const args: ASTNode[] = [];\n if (tokens[pos]?.type !== 'PAREN_R') {\n args.push(parseExpression());\n while (tokens[pos]?.type === 'COMMA') {\n pos++;\n args.push(parseExpression());\n }\n }\n expect('PAREN_R');\n return { type: 'CALL', name, args };\n }\n if (name === 'TRUE') return { type: 'BOOL', value: true };\n if (name === 'FALSE') return { type: 'BOOL', value: false };\n throw new Unsupported(); // defined names\n }\n if (token.type === 'PAREN_L') {\n pos++;\n const node = parseExpression();\n expect('PAREN_R');\n return node;\n }\n throw new Unsupported();\n };\n\n // Unary minus binds tighter than ^ in Excel (-2^2 is 4); % divides by 100\n const parseUnary = (): ASTNode => {\n if (isOp('-')) { pos++; return { type: 'NEG', left: parseUnary() }; }\n if (isOp('+')) { pos++; return parseUnary(); }\n let node = parseAtom();\n while (isOp('%')) { pos++; node = { type: 'PERCENT', left: node }; }\n return node;\n };\n\n const binary = (next: () => ASTNode, ...ops: string[]) => (): ASTNode => {\n let node = next();\n while (isOp(...ops)) {\n const operator = tokens[pos++].value;\n node = { type: 'BINARY', operator, left: node, right: next() };\n }\n return node;\n };\n // Excel's ^ is left-associative: 2^3^2 is 64\n const parsePower = binary(parseUnary, '^');\n const parseFactor = binary(parsePower, '*', '/');\n const parseTerm = binary(parseFactor, '+', '-');\n const parseConcat = binary(parseTerm, '&');\n const parseExpression = binary(parseConcat, '=', '<>', '<', '>', '<=', '>=');\n\n const ast = parseExpression();\n if (pos !== tokens.length) throw new Unsupported();\n return ast;\n }\n\n // A single value: a range used where one value is expected is not supported (implicit intersection)\n private scalar(node: ASTNode): Value {\n const v = this.evaluateAst(node);\n if (Array.isArray(v)) throw new Unsupported();\n return v;\n }\n\n private evaluateAst(node: ASTNode): any {\n switch (node.type) {\n case 'NUMBER': case 'STRING': case 'BOOL': return node.value;\n case 'CELL': return this.lookup(node.value);\n case 'RANGE': return this.getRangeValues(node.value);\n case 'NEG': {\n const n = toNumber(this.scalar(node.left!));\n return n instanceof FormulaError ? n : -n;\n }\n case 'PERCENT': {\n const n = toNumber(this.scalar(node.left!));\n return n instanceof FormulaError ? n : n / 100;\n }\n case 'BINARY': return this.binary(node.operator!, this.scalar(node.left!), this.scalar(node.right!));\n case 'CALL': return this.call(node.name!, node.args!);\n }\n throw new Unsupported();\n }\n\n private binary(op: string, left: Value, right: Value): Value {\n if (left instanceof FormulaError) return left;\n if (right instanceof FormulaError) return right;\n if (op === '&') return toText(left) + toText(right);\n if (['=', '<>', '<', '>', '<=', '>='].includes(op)) {\n const c = compare(left, right);\n return op === '=' ? c === 0 : op === '<>' ? c !== 0 : op === '<' ? c < 0 : op === '>' ? c > 0 : op === '<=' ? c <= 0 : c >= 0;\n }\n const l = toNumber(left), r = toNumber(right);\n if (l instanceof FormulaError) return l;\n if (r instanceof FormulaError) return r;\n switch (op) {\n case '+': return l + r;\n case '-': return l - r;\n case '*': return l * r;\n case '/': return r === 0 ? DIV0 : l / r;\n case '^': {\n const p = Math.pow(l, r);\n return isFinite(p) ? p : new FormulaError('#NUM!');\n }\n }\n throw new Unsupported();\n }\n\n private call(name: string, argNodes: ASTNode[]): Value {\n if (name === 'IF') {\n if (argNodes.length < 1 || argNodes.length > 3) throw new Unsupported();\n const cond = toBool(this.scalar(argNodes[0]));\n if (cond instanceof FormulaError) return cond;\n if (cond) return argNodes.length > 1 ? this.scalar(argNodes[1]) ?? 0 : true;\n return argNodes.length > 2 ? this.scalar(argNodes[2]) ?? 0 : false;\n }\n if (name === 'CONCATENATE') {\n let out = '';\n for (const a of argNodes) {\n const v = this.scalar(a);\n if (v instanceof FormulaError) return v;\n out += toText(v);\n }\n return out;\n }\n if (!['SUM', 'AVERAGE', 'COUNT', 'MAX', 'MIN'].includes(name)) throw new Unsupported();\n // Values typed into the call count (TRUE as 1, \"3\" as 3); in referenced cells only numbers do\n const nums: number[] = [];\n for (const a of argNodes) {\n const v = this.evaluateAst(a);\n const referenced = a.type === 'CELL' || a.type === 'RANGE';\n for (const x of Array.isArray(v) ? v : [v]) {\n if (x instanceof FormulaError) {\n if (name === 'COUNT') continue;\n return x;\n }\n if (typeof x === 'number') nums.push(x);\n else if (!referenced && x !== null) {\n const n = toNumber(x);\n if (n instanceof FormulaError) {\n if (name === 'COUNT') continue;\n return n;\n }\n nums.push(n);\n }\n }\n }\n switch (name) {\n case 'SUM': return nums.reduce((a, b) => a + b, 0);\n case 'COUNT': return nums.length;\n case 'AVERAGE': return nums.length ? nums.reduce((a, b) => a + b, 0) / nums.length : DIV0;\n case 'MAX': return nums.length ? Math.max(...nums) : 0;\n default: return nums.length ? Math.min(...nums) : 0;\n }\n }\n\n private getRangeValues(range: string): Value[] {\n const [startRef, endRef] = range.split(':');\n const [c1, r1] = this.parseRef(startRef);\n const [c2, r2] = this.parseRef(endRef);\n const values: Value[] = [];\n // A3:A1 is the same range as A1:A3\n for (let r = Math.min(r1, r2); r <= Math.max(r1, r2); r++) {\n for (let c = Math.min(c1, c2); c <= Math.max(c1, c2); c++) {\n values.push(this.lookup(this.toRef(r, c - 1)));\n }\n }\n return values;\n }\n\n private parseRef(ref: string): [number, number] {\n const match = ref.match(/^([A-Z]+)(\\d+)$/i)!;\n const col = match[1].toUpperCase().split('').reduce((acc, ch) => acc * 26 + (ch.charCodeAt(0) - 64), 0);\n const row = parseInt(match[2], 10);\n return [col, row];\n }\n\n private toRef(row: number, colIndex: number): string {\n let col = '';\n let c = colIndex + 1;\n while (c > 0) {\n col = String.fromCharCode(((c - 1) % 26) + 65) + col;\n c = Math.floor((c - 1) / 26);\n }\n return `${col}${row}`;\n }\n}\n\n// Excel's conversions: blank is 0 / \"\" / FALSE, booleans are 1 and 0, text must read as a number\nfunction toNumber(v: Value): number | FormulaError {\n if (v instanceof FormulaError) return v;\n if (v === null) return 0;\n if (typeof v === 'boolean') return v ? 1 : 0;\n if (typeof v === 'number') return v;\n const t = v.trim();\n const n = t === '' ? NaN : Number(t);\n return isFinite(n) ? n : VALUE;\n}\n\nfunction toText(v: Value): string {\n if (v === null) return '';\n if (typeof v === 'boolean') return v ? 'TRUE' : 'FALSE';\n if (typeof v === 'number') return numberText(v);\n return String(v);\n}\n\nfunction toBool(v: Value): boolean | FormulaError {\n if (v instanceof FormulaError) return v;\n if (v === null) return false;\n if (typeof v === 'boolean') return v;\n if (typeof v === 'number') return v !== 0;\n const t = v.toUpperCase();\n return t === 'TRUE' ? true : t === 'FALSE' ? false : VALUE;\n}\n\n// Excel orders numbers < text < booleans; text compares without case. A blank takes the other side's type.\nfunction compare(a: Value, b: Value): number {\n if (a === null) a = typeof b === 'string' ? '' : typeof b === 'boolean' ? false : 0;\n if (b === null) b = typeof a === 'string' ? '' : typeof a === 'boolean' ? false : 0;\n const rank = (v: Value) => typeof v === 'number' ? 0 : typeof v === 'string' ? 1 : 2;\n if (rank(a) !== rank(b)) return rank(a) - rank(b);\n if (typeof a === 'string') {\n const x = a.toLowerCase(), y = (b as string).toLowerCase();\n return x < y ? -1 : x > y ? 1 : 0;\n }\n const x = Number(a), y = Number(b);\n return x < y ? -1 : x > y ? 1 : 0;\n}\n","import { Row, StyledCell, CellValue, SheetOptions, SheetImage, CellComment, TableOptions, PageSetup, RichTextRun, WorkbookProperties, DefinedName } from './types';\nimport { StyleEngine, fontXml } from './style-engine';\nimport { ConditionalFormatter } from './conditional-formatter';\nimport { FormulaEngine, FormulaError } from './formula-engine';\nimport { ZipStreamWriter } from './zip-stream-writer';\nimport { encodeXString, colLetter, colIndex, dateToSerial, validateSheetName, defaultDateFormat, checkCellText, argb, escapeXml as escapeText, MAX_COLUMNS, MAX_ROWS } from './utils';\nimport { imageInfo, drawingXml, type ImageInfo } from './image';\n\nconst escapeXml = (val: unknown): string => escapeText(String(val)).replace(/'/g, ''');\n\n// \"A1:B2\" (or one cell) -> 0-based corners, checked against Excel's sheet size\nexport function parseRange(ref: string, what: string): { c1: number; r1: number; c2: number; r2: number } {\n const m = /^\\$?([A-Za-z]{1,3})\\$?(\\d+)(?::\\$?([A-Za-z]{1,3})\\$?(\\d+))?$/.exec(String(ref).trim());\n const box = m && {\n c1: colIndex(m[1]), r1: parseInt(m[2], 10) - 1,\n c2: colIndex(m[3] ?? m[1]), r2: parseInt(m[4] ?? m[2], 10) - 1,\n };\n if (!box || [box.c1, box.c2].some(c => c >= MAX_COLUMNS) || [box.r1, box.r2].some(r => r < 0 || r >= MAX_ROWS)) {\n throw new Error(`Invalid ${what} \"${ref}\".`);\n }\n return { c1: Math.min(box.c1, box.c2), r1: Math.min(box.r1, box.r2), c2: Math.max(box.c1, box.c2), r2: Math.max(box.r1, box.r2) };\n}\n\ntype Box = ReturnType<typeof parseRange>;\nconst overlaps = (a: Box, b: Box) => a.c1 <= b.c2 && b.c1 <= a.c2 && a.r1 <= b.r2 && b.r1 <= a.r2;\n\nfunction isStyledCell(v: CellValue | StyledCell): v is StyledCell {\n return typeof v === 'object' && v !== null && 'value' in v;\n}\n\n\n// \"A1:C10\" -> \"$A$1:$C$10\"\nconst absoluteRef = (ref: string) => ref.replace(/([A-Za-z]+)(\\d+)/g, '$$$1$$$2');\n\nfunction stringXml(s: string): string {\n const text = escapeXml(encodeXString(s));\n // Leading/trailing whitespace is dropped by Excel unless marked as preserved\n return /^\\s|\\s$/.test(s) ? `<t xml:space=\"preserve\">${text}</t>` : `<t>${text}</t>`;\n}\n\n// Rich text runs; plain text is one unformatted run\nconst runsXml = (text: string | RichTextRun[]) => typeof text === 'string' ? `<r>${stringXml(text)}</r>`\n : text.map(run => `<r>${run.font ? `<rPr>${fontXml(run.font, 'rFont')}</rPr>` : ''}${stringXml(run.text)}</r>`).join('');\n\nconst REL = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships';\n\n// What a sheet produced while streaming, for the parts written after it\ninterface SheetParts {\n links: string[]; // external hyperlink targets, rId1..n\n comments: { ref: string; row: number; col: number; comment: CellComment }[];\n}\n\n// Excel's legacy 16-bit sheet password hash (ECMA-376 Part 4, 14.7.1)\nexport function legacyPasswordHash(password: string): string {\n let hash = 0;\n for (let i = password.length - 1; i >= 0; i--) {\n hash = ((hash >> 14) & 1) | ((hash << 1) & 0x7fff);\n hash ^= password.charCodeAt(i);\n }\n hash = ((hash >> 14) & 1) | ((hash << 1) & 0x7fff);\n return (hash ^ password.length ^ 0xce4b).toString(16).toUpperCase();\n}\n\nconst quoteSheet = (name: string) => `'${name.replace(/'/g, \"''\")}'`;\n\nexport interface WriterOptions {\n // Store strings once in xl/sharedStrings.xml instead of inline. Smaller files when values repeat,\n // but every distinct string is kept in memory until the workbook is finished.\n sharedStrings?: boolean;\n properties?: WorkbookProperties;\n definedNames?: DefinedName[];\n}\n\nconst W3CDTF = (d: Date) => d.toISOString().replace(/\\.\\d{3}Z$/, 'Z');\nconst propXml = (tag: string, v?: string) => v === undefined ? '' : `<${tag}>${escapeXml(v)}</${tag}>`;\n\nfunction corePropsXml(p: WorkbookProperties): string {\n const created = p.created ? `<dcterms:created xsi:type=\"dcterms:W3CDTF\">${W3CDTF(p.created)}</dcterms:created>` : '';\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<cp:coreProperties xmlns:cp=\"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:dcterms=\"http://purl.org/dc/terms/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">` +\n propXml('dc:title', p.title) + propXml('dc:subject', p.subject) + propXml('dc:creator', p.creator) + propXml('cp:keywords', p.keywords) +\n propXml('dc:description', p.description) + propXml('cp:category', p.category) + created + '</cp:coreProperties>';\n}\n\nfunction appPropsXml(p: WorkbookProperties): string {\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Properties xmlns=\"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\"><Application>XlsxFlow</Application>${propXml('Manager', p.manager)}${propXml('Company', p.company)}</Properties>`;\n}\n\n// A name Excel accepts: letters, digits, _ . and \\, not a cell reference (A1, R1C1) and not reserved\nfunction validateDefinedName(name: string) {\n if (!/^[A-Za-z_\\\\][A-Za-z0-9_.\\\\]*$/.test(name) || name.length > 255 || /^[A-Za-z]{1,3}\\d+$/.test(name) || /^([Rr]\\d*)?([Cc]\\d*)?$/.test(name) || /^_xlnm\\./i.test(name)) {\n throw new Error(`Invalid defined name \"${name}\"`);\n }\n}\n\n// Builds a complete .xlsx Uint8Array from structured row data.\n// Uses a pure JS ZIP writer (no dependencies) to pack OOXML parts.\nexport class SheetWriter {\n private styleEngine = new StyleEngine();\n private conditionalFormatter = new ConditionalFormatter(style => this.styleEngine.registerDxf(style));\n private formulaEngine = new FormulaEngine();\n private sheets: { name: string; rows: Row[] | AsyncIterable<Row>; options: SheetOptions }[] = [];\n private sharedStrings = new Map<string, number>();\n private sharedStringRefs = 0;\n // Embedded pictures by their data object, so a logo used on every sheet is stored once\n private media = new Map<Uint8Array | ArrayBuffer, { path: string; bytes: Uint8Array; info: ImageInfo }>();\n\n constructor(private writerOptions: WriterOptions = {}) {}\n\n addSheet(name: string, rows: Row[] | AsyncIterable<Row>, options: SheetOptions = {}): this {\n validateSheetName(name, this.sheets.map(s => s.name));\n const zoom = options.view?.zoom;\n if (zoom !== undefined && !(zoom >= 10 && zoom <= 400)) throw new Error(`Zoom must be between 10 and 400, got ${zoom}`);\n this.sheets.push({ name, rows, options });\n return this;\n }\n\n // Accept rows directly or via options, returning a standard ReadableStream\n write(rows?: Row[], options: SheetOptions = {}): ReadableStream<Uint8Array> {\n if (rows) {\n this.addSheet(options.name ?? 'Sheet1', rows, options);\n }\n if (this.sheets.length === 0) {\n this.addSheet('Sheet1', []);\n }\n if (this.activeSheet() < 0) throw new Error('A workbook needs at least one visible sheet');\n const scopes = new Set<string>();\n for (const n of this.writerOptions.definedNames ?? []) {\n validateDefinedName(n.name);\n if (n.sheet !== undefined && !this.sheets.some(s => s.name === n.sheet)) throw new Error(`Sheet \"${n.sheet}\" of defined name \"${n.name}\" not found`);\n const key = `${n.sheet ?? ''}!${n.name.toLowerCase()}`;\n if (scopes.has(key)) throw new Error(`Duplicate defined name \"${n.name}\"`);\n scopes.add(key);\n }\n const props = this.writerOptions.properties;\n\n const zip = new ZipStreamWriter();\n for (const img of this.sheets.flatMap(s => s.options.images ?? [])) {\n if (this.media.has(img.data)) continue;\n const bytes = img.data instanceof Uint8Array ? img.data : new Uint8Array(img.data);\n const info = imageInfo(bytes);\n this.media.set(img.data, { path: `media/image${this.media.size + 1}.${info.ext}`, bytes, info });\n }\n let drawings = 0;\n const commentSheets: number[] = [];\n\n // Push the build process to background so we can return the stream immediately\n (async () => {\n try {\n const tables = this.planTables();\n await this.streamString(zip, '_rels/.rels', this.buildRootRels());\n await this.streamString(zip, 'xl/workbook.xml', this.buildWorkbookXml());\n await this.streamString(zip, 'xl/_rels/workbook.xml.rels', this.buildWorkbookRels());\n if (props) {\n await this.streamString(zip, 'docProps/core.xml', corePropsXml(props));\n await this.streamString(zip, 'docProps/app.xml', appPropsXml(props));\n }\n\n for (let i = 0; i < this.sheets.length; i++) {\n const sheet = this.sheets[i];\n // Formulas resolve against the sheet they live in\n this.formulaEngine.clear();\n if (Array.isArray(sheet.rows)) {\n this.formulaEngine.loadData(sheet.rows.map(row => row.map(cell => {\n if (isStyledCell(cell) && cell.formula) return { formula: cell.formula };\n const v = !isStyledCell(cell) ? cell : cell.richText && cell.value == null ? cell.richText.map(r => r.text).join('') : cell.value;\n return v instanceof Date ? dateToSerial(v) : v;\n })));\n if (sheet.options.autoFitColumns) this.applyAutoFit(sheet.rows, sheet.options);\n }\n const parts: SheetParts = { links: [], comments: [] };\n const sheetTables = tables.filter(t => t.sheet === i);\n await zip.addFile(`xl/worksheets/sheet${i + 1}.xml`, this.buildWorksheetXmlStream(sheet.rows, sheet.options, parts, sheetTables.length, Array.isArray(sheet.rows)));\n const images = sheet.options.images ?? [];\n const drawing = images.length ? ++drawings : 0;\n const rels = this.buildSheetRels(parts.links, drawing, parts.comments.length ? i + 1 : 0, sheetTables.map(t => t.id));\n if (rels) await this.streamString(zip, `xl/worksheets/_rels/sheet${i + 1}.xml.rels`, rels);\n if (drawing) await this.writeDrawing(zip, drawing, images);\n if (parts.comments.length) {\n commentSheets.push(i + 1);\n await this.streamString(zip, `xl/comments${i + 1}.xml`, commentsXml(parts.comments));\n await this.streamString(zip, `xl/drawings/vmlDrawing${i + 1}.vml`, vmlXml(parts.comments, i + 1));\n }\n for (const t of sheetTables) await this.streamString(zip, `xl/tables/table${t.id}.xml`, tableXml(t.table, t.id, t.columns));\n }\n // Written last: whether a streamed sheet has comments is only known after streaming it\n await this.streamString(zip, '[Content_Types].xml', this.buildContentTypes(drawings, commentSheets, tables.length));\n\n // styles.xml goes last: streamed (AsyncIterable) rows register styles while being written.\n // Entry order is irrelevant to readers, which use the central directory.\n await this.streamString(zip, 'xl/sharedStrings.xml', this.buildSharedStringsXml());\n await this.streamString(zip, 'xl/styles.xml', this.styleEngine.toXml());\n\n for (const { path, bytes } of this.media.values()) {\n await zip.addFile(`xl/${path}`, new ReadableStream({ start(c) { c.enqueue(bytes); c.close(); } }));\n }\n await zip.close();\n } catch (err) {\n zip.error(err);\n }\n })();\n\n return zip.stream;\n }\n\n // Tables get workbook-wide ids; their header names come from the options or the header row\n private planTables(): { sheet: number; id: number; table: TableOptions; columns: string[] }[] {\n const plan: { sheet: number; id: number; table: TableOptions; columns: string[] }[] = [];\n const names = new Set<string>();\n this.sheets.forEach((sheet, i) => {\n const boxes: Box[] = [];\n for (const table of sheet.options.tables ?? []) {\n // Table names follow the defined-name rules: no \"AB12\", \"R1C1\" or \"C\"\n let valid = !names.has(String(table.name).toLowerCase());\n try { validateDefinedName(table.name); } catch { valid = false; }\n if (!valid) throw new Error(`Invalid or duplicate table name \"${table.name}\".`);\n names.add(table.name.toLowerCase());\n const m = /^([A-Za-z]{1,3})(\\d+):([A-Za-z]{1,3})(\\d+)$/.exec(table.ref.replace(/\\$/g, ''));\n if (!m) throw new Error(`Invalid table range \"${table.ref}\".`);\n const box = parseRange(table.ref, 'table range');\n if (boxes.some(b => overlaps(b, box))) throw new Error(`Table \"${table.name}\" overlaps another table on sheet \"${sheet.name}\".`);\n boxes.push(box);\n const first = colIndex(m[1]);\n const width = colIndex(m[3]) - first + 1;\n let columns = table.columns;\n if (!columns) {\n if (!Array.isArray(sheet.rows)) throw new Error(`Table \"${table.name}\": pass columns when rows are an AsyncIterable.`);\n const header = sheet.rows[parseInt(m[2], 10) - 1] ?? [];\n columns = Array.from({ length: width }, (_, k) => {\n const cell = header[first + k];\n const v = isStyledCell(cell) ? cell.value : cell;\n return v == null ? '' : String(v);\n });\n }\n if (columns.length !== width) throw new Error(`Table \"${table.name}\" has ${width} columns but ${columns.length} names.`);\n if (columns.some(c => !c) || new Set(columns.map(c => c.toLowerCase())).size !== columns.length) {\n throw new Error(`Table \"${table.name}\" needs unique, non-empty header names.`);\n }\n plan.push({ sheet: i, id: plan.length + 1, table, columns });\n }\n });\n return plan;\n }\n\n private async writeDrawing(zip: ZipStreamWriter, n: number, images: SheetImage[]) {\n const targets: string[] = [];\n const rIds = images.map(img => {\n const target = `../${this.media.get(img.data)!.path}`;\n let k = targets.indexOf(target);\n if (k < 0) k = targets.push(target) - 1;\n return `rId${k + 1}`;\n });\n await this.streamString(zip, `xl/drawings/drawing${n}.xml`, drawingXml(images, images.map(img => this.media.get(img.data)!.info), rIds));\n const rels = targets.map((t, k) =>\n `<Relationship Id=\"rId${k + 1}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\" Target=\"${t}\"/>`).join('');\n await this.streamString(zip, `xl/drawings/_rels/drawing${n}.xml.rels`, `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">${rels}</Relationships>`);\n }\n\n private applyAutoFit(rows: Row[], options: SheetOptions) {\n const colWidths: number[] = [];\n for (const row of rows) {\n row.forEach((cell, ci) => {\n const val = isStyledCell(cell) ? cell.value : cell;\n const str = val instanceof Date ? 'yyyy-mm-dd hh:mm:ss' : val !== null && val !== undefined ? String(val) : '';\n // Add a little padding (e.g. 1.2 multiplier) + base width\n const estWidth = Math.min(255, Math.max(10, str.length * 1.2));\n if (!colWidths[ci] || estWidth > colWidths[ci]) colWidths[ci] = estWidth;\n });\n }\n options.columnWidths = options.columnWidths || [];\n for (let ci = 0; ci < colWidths.length; ci++) {\n if (options.columnWidths[ci] === undefined && colWidths[ci] !== undefined) {\n options.columnWidths[ci] = Math.round(colWidths[ci] * 100) / 100;\n }\n }\n }\n\n private async streamString(zip: ZipStreamWriter, filename: string, content: string) {\n const encoder = new TextEncoder();\n const data = encoder.encode(content);\n const stream = new ReadableStream({\n start(c) { c.enqueue(data); c.close(); }\n });\n await zip.addFile(filename, stream);\n }\n\n // Pull-based so rows are only generated as fast as the ZIP consumer drains them.\n private buildWorksheetXmlStream(rows: Row[] | AsyncIterable<Row>, options: SheetOptions, parts: SheetParts, tables: number, evaluate: boolean): ReadableStream<Uint8Array> {\n const encoder = new TextEncoder();\n const chunks = this.worksheetXmlChunks(rows, options, parts, tables, evaluate);\n return new ReadableStream({\n async pull(controller) {\n const { done, value } = await chunks.next();\n if (done) controller.close();\n else controller.enqueue(encoder.encode(value));\n },\n async cancel() {\n await chunks.return(undefined);\n }\n });\n }\n\n // Hyperlink targets and comments are collected in `parts` for the parts written after the sheet\n // `evaluate`: the rows are an array loaded into the formula engine, so formulas get cached results\n private async *worksheetXmlChunks(rows: Row[] | AsyncIterable<Row>, options: SheetOptions, parts: SheetParts, tables: number, evaluate: boolean): AsyncGenerator<string> {\n const links = parts.links;\n const hyperlinks: string[] = [];\n const colCount = Math.max(options.columnWidths?.length ?? 0, options.columns?.length ?? 0);\n let colWidths = '';\n for (let i = 0; i < colCount; i++) {\n const c = options.columns?.[i] ?? {};\n const width = c.width ?? options.columnWidths?.[i];\n if (width === undefined && !c.hidden && !c.outlineLevel) continue;\n colWidths += `<col min=\"${i + 1}\" max=\"${i + 1}\"${width !== undefined ? ` width=\"${escapeXml(width)}\" customWidth=\"1\"` : ''}` +\n `${c.hidden ? ' hidden=\"1\"' : ''}${c.outlineLevel ? ` outlineLevel=\"${escapeXml(c.outlineLevel)}\"` : ''}/>`;\n }\n const rowOptions = Object.entries(options.rows ?? {}).map(([r, o]) => {\n const n = Number(r);\n if (!Number.isInteger(n) || n < 1 || n > MAX_ROWS) throw new Error(`Row options for \"${r}\": rows are numbered 1 to ${MAX_ROWS}.`);\n return [n, o] as const;\n }).sort((a, b) => a[0] - b[0]);\n const rowAttrs = new Map(rowOptions.map(([r, o]) =>\n [r, `${o.height !== undefined ? ` ht=\"${escapeXml(o.height)}\" customHeight=\"1\"` : ''}${o.hidden ? ' hidden=\"1\"' : ''}${o.outlineLevel ? ` outlineLevel=\"${escapeXml(o.outlineLevel)}\"` : ''}`]));\n let nextRowOption = 0;\n // Rows that only exist for their options (height, hidden, outline) and hold no cells\n const optionRowsBefore = (limit: number) => {\n let xml = '';\n for (; nextRowOption < rowOptions.length && rowOptions[nextRowOption][0] < limit; nextRowOption++) {\n xml += ` <row r=\"${rowOptions[nextRowOption][0]}\"${rowAttrs.get(rowOptions[nextRowOption][0])}/>\\n`;\n }\n return xml;\n };\n const outlineRow = Math.max(0, ...rowOptions.map(([, o]) => o.outlineLevel ?? 0));\n const outlineCol = Math.max(0, ...(options.columns ?? []).map(c => c?.outlineLevel ?? 0));\n const page = options.pageSetup;\n const fitToPage = page && (page.fitToWidth !== undefined || page.fitToHeight !== undefined);\n const sheetPr = options.tabColor || fitToPage\n ? `<sheetPr>${options.tabColor ? `<tabColor rgb=\"${argb(options.tabColor)}\"/>` : ''}${fitToPage ? '<pageSetUpPr fitToPage=\"1\"/>' : ''}</sheetPr>`\n : '';\n const sheetFormatPr = outlineRow || outlineCol\n ? `<sheetFormatPr defaultRowHeight=\"15\"${outlineRow ? ` outlineLevelRow=\"${outlineRow}\"` : ''}${outlineCol ? ` outlineLevelCol=\"${outlineCol}\"` : ''}/>`\n : '';\n\n let pane = '';\n if (options.freezePanes) {\n const { row = 0, col = 0 } = options.freezePanes;\n let activePane = 'bottomRight';\n if (row > 0 && col === 0) activePane = 'bottomLeft';\n if (row === 0 && col > 0) activePane = 'topRight';\n const topLeftCell = colLetter(col) + (row + 1);\n pane = `<pane ySplit=\"${row}\" xSplit=\"${col}\" topLeftCell=\"${topLeftCell}\" activePane=\"${activePane}\" state=\"frozen\"/>`;\n }\n const view = options.view ?? {};\n const viewAttrs = (view.showGridLines === false ? ' showGridLines=\"0\"' : '') + (view.showHeadings === false ? ' showRowColHeaders=\"0\"' : '') +\n (view.rightToLeft ? ' rightToLeft=\"1\"' : '') + (view.zoom !== undefined ? ` zoomScale=\"${Math.round(view.zoom)}\"` : '');\n const sheetViews = pane || viewAttrs ? `<sheetViews><sheetView${viewAttrs} workbookViewId=\"0\">${pane}</sheetView></sheetViews>` : '';\n\n let header = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n`;\n header += `<worksheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">\\n`;\n header += ` ${sheetPr}${sheetViews}${sheetFormatPr}\\n`;\n header += ` ${colWidths ? `<cols>${colWidths}</cols>` : ''}\\n`;\n header += ` <sheetData>\\n`;\n yield header;\n\n let ri = 0;\n \n // Handle both Array and AsyncIterable\n const iterator = Symbol.asyncIterator in rows \n ? (rows as AsyncIterable<Row>)[Symbol.asyncIterator]()\n : (async function*() { for (const r of rows as Row[]) yield r; })();\n\n let chunkStr = '';\n // Ends the caller's row source when the output is cancelled or fails (its finally blocks run)\n try {\n while (true) {\n const { done, value: row } = await iterator.next();\n if (done) break;\n\n const rowNum = ri + 1;\n // Past Excel's sheet size the file is damaged, so refuse it instead\n if (rowNum > MAX_ROWS) throw new Error(`Row ${rowNum} is past Excel's last row (${MAX_ROWS}).`);\n if (row.length > MAX_COLUMNS) throw new Error(`Row ${rowNum} has ${row.length} cells, more than Excel's ${MAX_COLUMNS} columns.`);\n chunkStr += optionRowsBefore(rowNum);\n if (rowOptions[nextRowOption]?.[0] === rowNum) nextRowOption++;\n const cellsXml = row.map((cell, ci) => {\n const colRef = colLetter(ci) + rowNum;\n const styledCell: StyledCell = isStyledCell(cell) ? cell : { value: cell };\n const val = styledCell.value;\n let cellStyle = styledCell.style;\n if (val instanceof Date && !cellStyle?.numFmt) {\n // A date needs a date format, or Excel shows the bare serial number\n cellStyle = { ...cellStyle, numFmt: defaultDateFormat(val) };\n }\n const style = cellStyle ? this.styleEngine.registerStyle(cellStyle) : 0;\n const sAttr = style > 0 ? ` s=\"${style}\"` : '';\n\n if (styledCell.comment !== undefined) {\n const comment = typeof styledCell.comment === 'string' ? { text: styledCell.comment } : styledCell.comment;\n parts.comments.push({ ref: colRef, row: rowNum - 1, col: ci, comment });\n }\n\n if (styledCell.hyperlink) {\n if (styledCell.hyperlink.startsWith('#')) {\n hyperlinks.push(`<hyperlink ref=\"${colRef}\" location=\"${escapeXml(styledCell.hyperlink.slice(1))}\"/>`);\n } else {\n links.push(styledCell.hyperlink);\n hyperlinks.push(`<hyperlink ref=\"${colRef}\" r:id=\"rId${links.length}\"/>`);\n }\n }\n\n if (styledCell.formula) {\n // Streamed rows aren't in the engine, so their formulas get no (made-up) cached value\n const result = evaluate ? this.formulaEngine.cellValue(colRef) : null;\n let tAttr = '';\n let cachedVal = '';\n if (typeof result === 'number' && isFinite(result)) cachedVal = `<v>${result}</v>`;\n else if (typeof result === 'boolean') { tAttr = ' t=\"b\"'; cachedVal = `<v>${result ? 1 : 0}</v>`; }\n else if (result instanceof FormulaError) { tAttr = ' t=\"e\"'; cachedVal = `<v>${escapeXml(result.code)}</v>`; }\n else if (typeof result === 'string') { tAttr = ' t=\"str\"'; cachedVal = `<v>${escapeXml(encodeXString(result))}</v>`; }\n return `<c r=\"${colRef}\"${tAttr}${sAttr}><f>${escapeXml(styledCell.formula.replace(/^=/, ''))}</f>${cachedVal}</c>`;\n }\n\n if (styledCell.richText) {\n // Rich text is always inline, even with sharedStrings on\n return `<c r=\"${colRef}\" t=\"inlineStr\"${sAttr}><is>${runsXml(styledCell.richText)}</is></c>`;\n }\n if (val === null || val === undefined) return `<c r=\"${colRef}\"${sAttr}/>`;\n if (typeof val === 'boolean') return `<c r=\"${colRef}\" t=\"b\"${sAttr}><v>${val ? 1 : 0}</v></c>`;\n if (typeof val === 'number') {\n // NaN/Infinity have no representation in a cell\n return isFinite(val) ? `<c r=\"${colRef}\"${sAttr}><v>${val}</v></c>` : `<c r=\"${colRef}\" t=\"e\"${sAttr}><v>#NUM!</v></c>`;\n }\n if (val instanceof Date) {\n if (isNaN(val.getTime())) throw new Error(`Invalid Date in cell ${colRef}`);\n return `<c r=\"${colRef}\"${sAttr}><v>${dateToSerial(val)}</v></c>`;\n }\n if (typeof val === 'string') {\n checkCellText(val, colRef);\n if (this.writerOptions.sharedStrings) {\n let index = this.sharedStrings.get(val);\n if (index === undefined) this.sharedStrings.set(val, index = this.sharedStrings.size);\n this.sharedStringRefs++;\n return `<c r=\"${colRef}\" t=\"s\"${sAttr}><v>${index}</v></c>`;\n }\n return `<c r=\"${colRef}\" t=\"inlineStr\"${sAttr}><is>${stringXml(val)}</is></c>`;\n }\n return `<c r=\"${colRef}\"${sAttr}/>`;\n }).join('');\n \n chunkStr += ` <row r=\"${rowNum}\"${rowAttrs.get(rowNum) ?? ''}>${cellsXml}</row>\\n`;\n ri++;\n\n // Flush every ~64KB of string data to keep O(1) memory while avoiding chunk overhead\n if (chunkStr.length > 65536) {\n yield chunkStr;\n chunkStr = '';\n }\n }\n } finally {\n await iterator.return?.();\n }\n \n chunkStr += optionRowsBefore(Infinity);\n if (chunkStr.length > 0) {\n yield chunkStr;\n }\n\n let footer = ` </sheetData>\\n`;\n if (options.protection) {\n const p = options.protection === true ? {} : options.protection;\n // In the file, an action set to 1 is locked; allowing it means writing 0\n const allowed = (['formatCells', 'formatColumns', 'formatRows', 'insertRows', 'insertColumns', 'deleteRows', 'deleteColumns', 'sort', 'autoFilter'] as const)\n .filter(k => p[k]).map(k => ` ${k}=\"0\"`).join('');\n footer += ` <sheetProtection${p.password ? ` password=\"${legacyPasswordHash(p.password)}\"` : ''} sheet=\"1\" objects=\"1\" scenarios=\"1\"${allowed}/>\\n`;\n }\n\n if (options.autoFilter) footer += ` <autoFilter ref=\"${escapeXml(options.autoFilter)}\"/>\\n`;\n\n if (options.mergeCells && options.mergeCells.length > 0) {\n // Overlapping or malformed merges make Excel repair the file\n const boxes: Box[] = [];\n for (const ref of options.mergeCells) {\n const box = parseRange(ref, 'merge range');\n if (boxes.some(b => overlaps(b, box))) throw new Error(`Merge \"${ref}\" overlaps another merge.`);\n boxes.push(box);\n }\n const merges = options.mergeCells.map(ref => `<mergeCell ref=\"${escapeXml(ref)}\"/>`).join('');\n footer += ` <mergeCells count=\"${options.mergeCells.length}\">${merges}</mergeCells>\\n`;\n }\n\n if (options.conditionalFormats) {\n footer += this.conditionalFormatter.toXml(options.conditionalFormats) + '\\n';\n }\n\n if (options.dataValidations && options.dataValidations.length > 0) {\n const dvs = options.dataValidations.map(dv => {\n let attr = `sqref=\"${escapeXml(dv.sqref)}\"`;\n if (dv.type) attr += ` type=\"${escapeXml(dv.type)}\"`;\n if (dv.allowBlank !== undefined) attr += ` allowBlank=\"${dv.allowBlank ? 1 : 0}\"`;\n if (dv.showInputMessage !== undefined) attr += ` showInputMessage=\"${dv.showInputMessage ? 1 : 0}\"`;\n if (dv.errorStyle) attr += ` errorStyle=\"${escapeXml(dv.errorStyle)}\"`;\n if (dv.operator) attr += ` operator=\"${escapeXml(dv.operator)}\"`;\n if (dv.showErrorMessage !== undefined || dv.error) attr += ` showErrorMessage=\"${dv.showErrorMessage ?? true ? 1 : 0}\"`;\n if (dv.prompt && dv.showInputMessage === undefined) attr += ' showInputMessage=\"1\"';\n for (const k of ['errorTitle', 'error', 'promptTitle', 'prompt'] as const) {\n if (dv[k]) attr += ` ${k}=\"${escapeXml(dv[k]!)}\"`;\n }\n // The file stores formulas without \"=\"; a typed list (\"a,b,c\") holds at most 255 characters\n const f1 = dv.formula1?.replace(/^=/, ''), f2 = dv.formula2?.replace(/^=/, '');\n if (dv.type === 'list' && f1?.startsWith('\"') && f1.length - 2 > 255) {\n throw new Error(`List validation for ${dv.sqref} has ${f1.length - 2} characters; Excel allows 255. Put the items in cells and refer to the range.`);\n }\n let inner = '';\n if (f1) inner += `<formula1>${escapeXml(f1)}</formula1>`;\n if (f2) inner += `<formula2>${escapeXml(f2)}</formula2>`;\n return `<dataValidation ${attr}>${inner}</dataValidation>`;\n }).join('');\n footer += ` <dataValidations count=\"${options.dataValidations.length}\">${dvs}</dataValidations>\\n`;\n }\n\n if (hyperlinks.length) footer += ` <hyperlinks>${hyperlinks.join('')}</hyperlinks>\\n`;\n footer += pageSetupXml(page);\n if (options.images?.length) footer += ` <drawing r:id=\"rIdDrawing\"/>\\n`;\n if (parts.comments.length) footer += ` <legacyDrawing r:id=\"rIdVml\"/>\\n`;\n if (tables) footer += ` <tableParts count=\"${tables}\">${Array.from({ length: tables }, (_, k) => `<tablePart r:id=\"rIdTable${k + 1}\"/>`).join('')}</tableParts>\\n`;\n\n footer += `</worksheet>`;\n yield footer;\n }\n\n // Empty unless the sharedStrings option is on (strings are written inline by default)\n private buildSharedStringsXml(): string {\n let items = '';\n for (const s of this.sharedStrings.keys()) items += `<si>${stringXml(s)}</si>`;\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<sst xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" count=\"${this.sharedStringRefs}\" uniqueCount=\"${this.sharedStrings.size}\">${items}</sst>`;\n }\n\n // '' when the sheet has no relationships\n private buildSheetRels(links: string[], drawing: number, comments: number, tableIds: number[]): string {\n let rels = links.map((target, i) =>\n `<Relationship Id=\"rId${i + 1}\" Type=\"${REL}/hyperlink\" Target=\"${escapeXml(target)}\" TargetMode=\"External\"/>`\n ).join('');\n if (drawing) rels += `<Relationship Id=\"rIdDrawing\" Type=\"${REL}/drawing\" Target=\"../drawings/drawing${drawing}.xml\"/>`;\n if (comments) {\n rels += `<Relationship Id=\"rIdComments\" Type=\"${REL}/comments\" Target=\"../comments${comments}.xml\"/>` +\n `<Relationship Id=\"rIdVml\" Type=\"${REL}/vmlDrawing\" Target=\"../drawings/vmlDrawing${comments}.vml\"/>`;\n }\n tableIds.forEach((id, k) => { rels += `<Relationship Id=\"rIdTable${k + 1}\" Type=\"${REL}/table\" Target=\"../tables/table${id}.xml\"/>`; });\n if (!rels) return '';\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">${rels}</Relationships>`;\n }\n\n private buildWorkbookXml(): string {\n const sheetsXml = this.sheets.map((s, i) =>\n `<sheet name=\"${escapeXml(s.name)}\" sheetId=\"${i + 1}\"${s.options.state && s.options.state !== 'visible' ? ` state=\"${s.options.state}\"` : ''} r:id=\"rId${i + 1}\"/>`\n ).join('');\n const userNames = (this.writerOptions.definedNames ?? []).map(n => {\n const local = n.sheet === undefined ? '' : ` localSheetId=\"${this.sheets.findIndex(s => s.name === n.sheet)}\"`;\n const ref = n.ref.startsWith('=') ? n.ref.slice(1) : n.ref;\n return `<definedName name=\"${escapeXml(n.name)}\"${n.comment ? ` comment=\"${escapeXml(n.comment)}\"` : ''}${local}${n.hidden ? ' hidden=\"1\"' : ''}>${escapeXml(ref)}</definedName>`;\n }).join('');\n const active = this.activeSheet();\n // Excel tracks each sheet's filter range in a hidden defined name\n const filterNames = this.sheets.map((s, i) => s.options.autoFilter\n ? `<definedName name=\"_xlnm._FilterDatabase\" localSheetId=\"${i}\" hidden=\"1\">${escapeXml(`'${s.name.replace(/'/g, \"''\")}'!${absoluteRef(s.options.autoFilter)}`)}</definedName>`\n : ''\n ).join('') + this.sheets.map((s, i) => {\n const page = s.options.pageSetup;\n let names = '';\n // Every range of a multi-range print area names its sheet\n const area = page?.printArea?.split(',').map(r => `${quoteSheet(s.name)}!${absoluteRef(r.trim())}`).join(',');\n if (area) names += `<definedName name=\"_xlnm.Print_Area\" localSheetId=\"${i}\">${escapeXml(area)}</definedName>`;\n if (page?.printTitleRows) {\n const rows = page.printTitleRows.replace(/\\$/g, '').split(':').map(r => `$${r}`).join(':');\n names += `<definedName name=\"_xlnm.Print_Titles\" localSheetId=\"${i}\">${escapeXml(`${quoteSheet(s.name)}!${rows.includes(':') ? rows : `${rows}:${rows}`}`)}</definedName>`;\n }\n return names;\n }).join('');\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<workbook xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"\n xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">\n ${active > 0 ? `<bookViews><workbookView firstSheet=\"${active}\" activeTab=\"${active}\"/></bookViews>` : ''}\n <sheets>\n ${sheetsXml}\n </sheets>\n ${filterNames || userNames ? `<definedNames>${filterNames}${userNames}</definedNames>` : ''}\n</workbook>`;\n }\n\n // The first visible sheet, which Excel opens on\n private activeSheet(): number {\n return this.sheets.findIndex(s => !s.options.state || s.options.state === 'visible');\n }\n\n private buildWorkbookRels(): string {\n const sheetRels = this.sheets.map((_, i) => \n `<Relationship Id=\"rId${i + 1}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\" Target=\"worksheets/sheet${i + 1}.xml\"/>`\n ).join('\\n ');\n \n const ssId = this.sheets.length + 1;\n const stylesId = this.sheets.length + 2;\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\n ${sheetRels}\n <Relationship Id=\"rId${ssId}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\" Target=\"sharedStrings.xml\"/>\n <Relationship Id=\"rId${stylesId}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\" Target=\"styles.xml\"/>\n</Relationships>`;\n }\n\n private buildRootRels(): string {\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\n <Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\" Target=\"xl/workbook.xml\"/>${this.writerOptions.properties ? `\n <Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\" Target=\"docProps/core.xml\"/>\n <Relationship Id=\"rId3\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties\" Target=\"docProps/app.xml\"/>` : ''}\n</Relationships>`;\n }\n\n private buildContentTypes(drawings: number, commentSheets: number[], tables: number): string {\n const sheetOverrides = this.sheets.map((_, i) => \n `<Override PartName=\"/xl/worksheets/sheet${i + 1}.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\"/>`\n ).join('\\n ');\n const exts = new Set([...this.media.values()].map(m => m.info.ext));\n const imageTypes = [...exts].map(e => `<Default Extension=\"${e}\" ContentType=\"image/${e}\"/>`).join('');\n const drawingOverrides = Array.from({ length: drawings }, (_, i) =>\n `<Override PartName=\"/xl/drawings/drawing${i + 1}.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.drawing+xml\"/>`).join('') +\n commentSheets.map(n => `<Override PartName=\"/xl/comments${n}.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\"/>`).join('') +\n Array.from({ length: tables }, (_, i) =>\n `<Override PartName=\"/xl/tables/table${i + 1}.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\"/>`).join('') +\n (commentSheets.length ? '<Default Extension=\"vml\" ContentType=\"application/vnd.openxmlformats-officedocument.vmlDrawing\"/>' : '');\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">\n <Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/>\n <Default Extension=\"xml\" ContentType=\"application/xml\"/>\n ${imageTypes}${drawingOverrides}\n <Override PartName=\"/xl/workbook.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\"/>\n ${sheetOverrides}\n <Override PartName=\"/xl/sharedStrings.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\"/>\n <Override PartName=\"/xl/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\"/>${this.writerOptions.properties ? `\n <Override PartName=\"/docProps/core.xml\" ContentType=\"application/vnd.openxmlformats-package.core-properties+xml\"/>\n <Override PartName=\"/docProps/app.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.extended-properties+xml\"/>` : ''}\n</Types>`;\n }\n\n\n}\n\nfunction pageSetupXml(page?: PageSetup): string {\n if (!page) return '';\n let xml = '';\n if (page.gridLines || page.horizontalCentered) {\n xml += ` <printOptions${page.horizontalCentered ? ' horizontalCentered=\"1\"' : ''}${page.gridLines ? ' gridLines=\"1\"' : ''}/>\\n`;\n }\n // Excel's \"Normal\" margins, in inches; all six are required\n const m = { left: 0.7, right: 0.7, top: 0.75, bottom: 0.75, header: 0.3, footer: 0.3, ...page.margins };\n const e = escapeXml;\n xml += ` <pageMargins left=\"${e(m.left)}\" right=\"${e(m.right)}\" top=\"${e(m.top)}\" bottom=\"${e(m.bottom)}\" header=\"${e(m.header)}\" footer=\"${e(m.footer)}\"/>\\n`;\n const attrs = [\n page.paperSize !== undefined && `paperSize=\"${e(page.paperSize)}\"`,\n page.scale !== undefined && `scale=\"${e(page.scale)}\"`,\n page.fitToWidth !== undefined && `fitToWidth=\"${e(page.fitToWidth)}\"`,\n page.fitToHeight !== undefined && `fitToHeight=\"${e(page.fitToHeight)}\"`,\n page.orientation && `orientation=\"${e(page.orientation)}\"`,\n ].filter(Boolean).join(' ');\n if (attrs) xml += ` <pageSetup ${attrs}/>\\n`;\n if (page.header || page.footer) {\n xml += ` <headerFooter>${page.header ? `<oddHeader>${escapeXml(page.header)}</oddHeader>` : ''}${page.footer ? `<oddFooter>${escapeXml(page.footer)}</oddFooter>` : ''}</headerFooter>\\n`;\n }\n return xml;\n}\n\nfunction commentsXml(comments: SheetParts['comments']): string {\n const authors = [...new Set(comments.map(c => c.comment.author ?? ''))];\n const list = comments.map(c => `<comment ref=\"${c.ref}\" authorId=\"${authors.indexOf(c.comment.author ?? '')}\"><text>${runsXml(c.comment.text)}</text></comment>`).join('');\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<comments xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"><authors>${authors.map(a => `<author>${escapeXml(a)}</author>`).join('')}</authors><commentList>${list}</commentList></comments>`;\n}\n\n// The legacy VML shapes Excel needs to show the note boxes (hidden until the cell is hovered)\nfunction vmlXml(comments: SheetParts['comments'], sheet: number): string {\n const shapes = comments.map((c, i) =>\n `<v:shape id=\"_x0000_s${sheet * 1024 + i + 1}\" type=\"#_x0000_t202\" style=\"position:absolute;margin-left:59.25pt;margin-top:1.5pt;width:108pt;height:59.25pt;z-index:${i + 1};visibility:hidden\" fillcolor=\"#ffffe1\" o:insetmode=\"auto\">` +\n `<v:fill color2=\"#ffffe1\"/><v:shadow on=\"t\" color=\"black\" obscured=\"t\"/><v:path o:connecttype=\"none\"/>` +\n `<v:textbox style=\"mso-direction-alt:auto\"><div style=\"text-align:left\"></div></v:textbox>` +\n `<x:ClientData ObjectType=\"Note\"><x:MoveWithCells/><x:SizeWithCells/>` +\n `<x:Anchor>${c.col + 1}, 15, ${c.row}, 10, ${c.col + 3}, 15, ${c.row + 4}, 4</x:Anchor><x:AutoFill>False</x:AutoFill>` +\n `<x:Row>${c.row}</x:Row><x:Column>${c.col}</x:Column></x:ClientData></v:shape>`).join('');\n return `<xml xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:x=\"urn:schemas-microsoft-com:office:excel\">` +\n `<o:shapelayout v:ext=\"edit\"><o:idmap v:ext=\"edit\" data=\"${sheet}\"/></o:shapelayout>` +\n `<v:shapetype id=\"_x0000_t202\" coordsize=\"21600,21600\" o:spt=\"202\" path=\"m,l,21600r21600,l21600,xe\"><v:stroke joinstyle=\"miter\"/><v:path gradientshapeok=\"t\" o:connecttype=\"rect\"/></v:shapetype>` +\n `${shapes}</xml>`;\n}\n\nfunction tableXml(table: TableOptions, id: number, columns: string[]): string {\n const ref = table.ref.replace(/\\$/g, '');\n const filter = table.autoFilter === false ? '' : `<autoFilter ref=\"${ref}\"/>`;\n const cols = columns.map((c, k) => `<tableColumn id=\"${k + 1}\" name=\"${escapeXml(c)}\"/>`).join('');\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<table xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" id=\"${id}\" name=\"${escapeXml(table.name)}\" displayName=\"${escapeXml(table.name)}\" ref=\"${ref}\" totalsRowShown=\"0\">` +\n `${filter}<tableColumns count=\"${columns.length}\">${cols}</tableColumns>` +\n `<tableStyleInfo name=\"${escapeXml(table.style ?? 'TableStyleMedium2')}\" showFirstColumn=\"0\" showLastColumn=\"0\" showRowStripes=\"${table.showRowStripes === false ? 0 : 1}\" showColumnStripes=\"0\"/></table>`;\n}\n","export interface RandomAccessReader {\n size: number;\n read(offset: number, length: number): Promise<Uint8Array>;\n stream(offset: number, length: number): ReadableStream<Uint8Array>;\n close(): Promise<void>;\n}\n\n// Offsets come from the file itself, so a corrupt one must fail here, not allocate or crash\nfunction checkRange(offset: number, length: number, size: number) {\n if (!(offset >= 0 && length >= 0 && offset + length <= size)) {\n throw new Error(`Corrupt ZIP: read of ${length} bytes at ${offset} is outside the ${size}-byte file`);\n }\n}\n\n// Built-in adapter for Web Blob/File\nexport function createBlobReader(blob: Blob): RandomAccessReader {\n return {\n size: blob.size,\n async read(offset: number, length: number): Promise<Uint8Array> {\n checkRange(offset, length, blob.size);\n const slice = blob.slice(offset, offset + length);\n return new Uint8Array(await slice.arrayBuffer());\n },\n stream(offset: number, length: number): ReadableStream<Uint8Array> {\n const slice = blob.slice(offset, offset + length);\n return slice.stream();\n },\n async close() {}\n };\n}\n\n// Built-in adapter for Node.js fs.promises\n// Dynamic, bundler-ignored imports so browser bundles don't try to resolve Node built-ins\nexport async function createFileReader(filePath: string): Promise<RandomAccessReader> {\n const fs = await import(/* webpackIgnore: true */ /* turbopackIgnore: true */ 'fs/promises');\n const { createReadStream } = await import(/* webpackIgnore: true */ /* turbopackIgnore: true */ 'fs');\n const { Readable } = await import(/* webpackIgnore: true */ /* turbopackIgnore: true */ 'stream');\n const stat = await fs.stat(filePath);\n const fd = await fs.open(filePath, 'r');\n\n return {\n size: stat.size,\n async read(offset: number, length: number): Promise<Uint8Array> {\n checkRange(offset, length, stat.size);\n const buffer = new Uint8Array(length);\n let filled = 0;\n while (filled < length) {\n const { bytesRead } = await fd.read(buffer, filled, length - filled, offset + filled);\n if (bytesRead === 0) throw new Error(`Unexpected end of file reading ${filePath} at ${offset + filled}`);\n filled += bytesRead;\n }\n return buffer;\n },\n stream(offset: number, length: number): ReadableStream<Uint8Array> {\n if (length === 0) return new ReadableStream({ start(c) { c.close(); } });\n // Opens its own handle, so streams outlive close(). toWeb keeps backpressure.\n return Readable.toWeb(createReadStream(filePath, { start: offset, end: offset + length - 1 })) as ReadableStream<Uint8Array>;\n },\n async close() {\n await fd.close();\n }\n };\n}\n","import { CellStyle, CellFont } from './types';\nimport { fontXml, fillXml, borderSideXml, alignmentAttrs } from './style-engine';\nimport { attr, isDateFormatCode, defaultDateFormat, escapeXml } from './utils';\nimport { isBuiltinDateFormat } from './number-format';\n\nconst escapeAttr = escapeXml;\n\nconst FONT_TAGS: [keyof CellFont, string][] = [\n ['bold', 'b'], ['italic', 'i'], ['underline', 'u'], ['size', 'sz'], ['color', 'color'], ['name', 'name'],\n];\n// CT_Font child order, which Excel writes and the schema checks\nconst FONT_ORDER = ['b', 'i', 'strike', 'condense', 'extend', 'outline', 'shadow', 'u', 'vertAlign', 'sz', 'color', 'name', 'family', 'charset', 'scheme'];\nconst SIDES = ['left', 'right', 'top', 'bottom'] as const;\n// CT_Stylesheet child order, to place a section the file does not have yet\nconst SECTIONS = ['numFmts', 'fonts', 'fills', 'borders', 'cellStyleXfs', 'cellXfs', 'cellStyles', 'dxfs', 'tableStyles', 'colors', 'extLst'];\n\nfunction setAttr(open: string, name: string, value: string): string {\n const re = new RegExp(`\\\\s${name}=\"[^\"]*\"`);\n return re.test(open) ? open.replace(re, ` ${name}=\"${value}\"`) : open.replace(/\\s*(\\/?)>$/, ` ${name}=\"${value}\"$1>`);\n}\n\n// Adds cell formats to an existing workbook's styles part. A patch changes only what it names: font\n// properties, border sides and alignment settings are merged into the cell's current format, while\n// a fill or number format replaces the old one.\nexport class StylePatcher {\n private p: string;\n private fonts: string[];\n private fills: string[];\n private borders: string[];\n private xfs: string[];\n private numFmts = new Map<string, number>();\n private nextNumFmt = 164;\n private added: Record<'numFmts' | 'fonts' | 'fills' | 'borders' | 'cellXfs', string[]> = { numFmts: [], fonts: [], fills: [], borders: [], cellXfs: [] };\n private memo = new Map<string, number>();\n\n constructor(private xml: string) {\n this.p = /<((?:\\w+:)?)styleSheet\\b/.exec(xml)?.[1] ?? '';\n this.fonts = this.items('fonts', 'font');\n this.fills = this.items('fills', 'fill');\n this.borders = this.items('borders', 'border');\n this.xfs = this.items('cellXfs', 'xf');\n for (const tag of this.items('numFmts', 'numFmt')) {\n const id = parseInt(attr(tag, 'numFmtId') ?? '', 10);\n const code = attr(tag, 'formatCode');\n if (code !== null && !isNaN(id)) this.numFmts.set(code, id);\n if (id >= this.nextNumFmt) this.nextNumFmt = id + 1;\n }\n }\n\n get changed(): boolean {\n return this.added.cellXfs.length > 0;\n }\n\n // The cellXfs index of format `base` with `style` applied\n patch(base: number, style: CellStyle): number {\n const key = `${base}|${JSON.stringify(style)}`;\n let id = this.memo.get(key);\n if (id !== undefined) return id;\n\n const p = this.p;\n // `base` may be a format added earlier in this edit (a date format, then a style)\n const xf = this.at('cellXfs', base) ?? this.xfs[0] ?? `<${p}xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\"/>`;\n let open = /^<[^>]*>/.exec(xf)![0];\n let inner = open.endsWith('/>') ? '' : xf.slice(open.length, xf.lastIndexOf('<'));\n open = open.replace(/\\s*\\/>$/, '>');\n\n if (style.font) {\n const old = this.at('fonts', parseInt(attr(open, 'fontId') ?? '0', 10)) ?? '';\n let font = old.endsWith('/>') ? '' : old.replace(/^<[^>]*>/, '').replace(/<\\/[^>]*>$/, '');\n for (const [key, tag] of FONT_TAGS) {\n if (!(key in style.font)) continue;\n font = font.replace(new RegExp(`<${p}${tag}\\\\b[^>]*?(?:/>|>[\\\\s\\\\S]*?</${p}${tag}>)`, 'g'), '');\n if (style.font[key] !== undefined && style.font[key] !== false) font += this.prefix(fontXml({ [key]: style.font[key] }));\n }\n const rank = (el: string) => (FONT_ORDER.indexOf(/^<(?:\\w+:)?(\\w+)/.exec(el)![1]) + 1 || FONT_ORDER.length + 1);\n font = (font.match(/<((?:\\w+:)?\\w+)\\b[^>]*?(?:\\/>|>[\\s\\S]*?<\\/\\1>)/g) ?? []).sort((a, b) => rank(a) - rank(b)).join('');\n open = setAttr(setAttr(open, 'fontId', String(this.add('fonts', `<${p}font>${font}</${p}font>`))), 'applyFont', '1');\n }\n if (style.fill) {\n open = setAttr(setAttr(open, 'fillId', String(this.add('fills', this.prefix(fillXml(style.fill))))), 'applyFill', '1');\n }\n if (style.border) {\n const old = this.at('borders', parseInt(attr(open, 'borderId') ?? '0', 10)) ?? `<${p}border/>`;\n const element = (tag: string) => new RegExp(`<${p}${tag}\\\\b[^>]*?(?:/>|>[\\\\s\\\\S]*?</${p}${tag}>)`).exec(old)?.[0];\n const sides = SIDES.map(side => side in style.border!\n ? this.prefix(borderSideXml(side, style.border![side])) : element(side) ?? `<${p}${side}/>`);\n const border = `${/^<[^>]*?(?=\\/?>)/.exec(old)![0]}>${sides.join('')}${element('diagonal') ?? `<${p}diagonal/>`}</${p}border>`;\n open = setAttr(setAttr(open, 'borderId', String(this.add('borders', border))), 'applyBorder', '1');\n }\n if (style.numFmt !== undefined) {\n let fmt = this.numFmts.get(style.numFmt);\n if (fmt === undefined) {\n this.numFmts.set(style.numFmt, fmt = this.nextNumFmt++);\n this.added.numFmts.push(`<${p}numFmt numFmtId=\"${fmt}\" formatCode=\"${escapeAttr(style.numFmt)}\"/>`);\n }\n open = setAttr(setAttr(open, 'numFmtId', String(fmt)), 'applyNumberFormat', '1');\n }\n if (style.alignment) {\n const re = new RegExp(`<${p}alignment\\\\b[^>]*?/>|<${p}alignment\\\\b[^>]*>[\\\\s\\\\S]*?</${p}alignment>`);\n const old = re.exec(inner)?.[0] ?? '';\n const attrs: Record<string, string> = {};\n for (const m of old.matchAll(/\\s([\\w:]+)=\"([^\"]*)\"/g)) attrs[m[1]] = m[2];\n Object.assign(attrs, alignmentAttrs(style.alignment));\n if ('wrapText' in style.alignment && !style.alignment.wrapText) delete attrs.wrapText;\n const element = `<${p}alignment${Object.entries(attrs).map(([k, v]) => ` ${k}=\"${v}\"`).join('')}/>`;\n inner = old ? inner.replace(old, element) : element + inner; // alignment is the first child\n open = setAttr(open, 'applyAlignment', '1');\n }\n\n id = this.add('cellXfs', inner ? `${open}${inner}</${p}xf>` : open.replace(/>$/, '/>'));\n this.memo.set(key, id);\n return id;\n }\n\n // The format for date `d` in a cell of format `base`: `base` when it already shows dates, otherwise\n // `base` with a date format, since a date in a General cell shows as its serial number\n dateFormat(base: number, d: Date): number {\n const xf = this.at('cellXfs', base) ?? '';\n const id = parseInt(attr(/^<[^>]*>/.exec(xf)?.[0] ?? '', 'numFmtId') ?? '0', 10);\n const code = [...this.numFmts].find(([, v]) => v === id)?.[0];\n if (isBuiltinDateFormat(id) || (code !== undefined && isDateFormatCode(code))) return base;\n return this.patch(base, { numFmt: defaultDateFormat(d) });\n }\n\n toXml(): string {\n let xml = this.xml;\n for (const section of ['numFmts', 'fonts', 'fills', 'borders', 'cellXfs'] as const) {\n const items = this.added[section];\n if (!items.length) continue;\n const p = this.p;\n const m = new RegExp(`<${p}${section}\\\\b([^>]*?)(/?)>`).exec(xml);\n if (m) {\n const count = this.existing(section) + items.length;\n const open = setAttr(`<${p}${section}${m[1]}>`, 'count', String(count));\n if (m[2]) {\n xml = xml.replace(m[0], `${open}${items.join('')}</${p}${section}>`);\n } else {\n const close = xml.indexOf(`</${p}${section}>`, m.index);\n xml = xml.slice(0, m.index) + open + xml.slice(m.index + m[0].length, close) + items.join('') + xml.slice(close);\n }\n } else {\n // Before the first later section, or the end of the stylesheet\n const later = SECTIONS.slice(SECTIONS.indexOf(section) + 1).map(s => `<${p}${s}\\\\b`).join('|');\n const at = xml.search(new RegExp(`${later}|</${p}styleSheet>`));\n xml = xml.slice(0, at) + `<${p}${section} count=\"${items.length}\">${items.join('')}</${p}${section}>` + xml.slice(at);\n }\n }\n return xml;\n }\n\n private existing(section: 'numFmts' | 'fonts' | 'fills' | 'borders' | 'cellXfs'): number {\n return section === 'numFmts' ? this.items('numFmts', 'numFmt').length : this.list(section).length;\n }\n\n private list(section: 'fonts' | 'fills' | 'borders' | 'cellXfs'): string[] {\n return section === 'fonts' ? this.fonts : section === 'fills' ? this.fills : section === 'borders' ? this.borders : this.xfs;\n }\n\n // Item `i` of a section, counting the ones added in this edit after the file's own\n private at(section: 'fonts' | 'fills' | 'borders' | 'cellXfs', i: number): string | undefined {\n const own = this.list(section);\n return i < own.length ? own[i] : this.added[section][i - own.length];\n }\n\n // The index of `element` in a section, appending it unless an identical one is already there:\n // repeating the same restyle on an edited file reuses the formats the first run added\n private add(section: 'fonts' | 'fills' | 'borders' | 'cellXfs', element: string): number {\n const own = this.list(section);\n const found = own.indexOf(element);\n if (found >= 0) return found;\n const added = this.added[section].indexOf(element);\n if (added >= 0) return own.length + added;\n this.added[section].push(element);\n return own.length + this.added[section].length - 1;\n }\n\n private items(section: string, tag: string): string[] {\n const p = this.p;\n const m = new RegExp(`<${p}${section}\\\\b[^>]*?(?:/>|>([\\\\s\\\\S]*?)</${p}${section}>)`).exec(this.xml);\n return [...(m?.[1] ?? '').matchAll(new RegExp(`<${p}${tag}\\\\b[^>]*?(?:/>|>[\\\\s\\\\S]*?</${p}${tag}>)`, 'g'))].map(x => x[0]);\n }\n\n // Our builders write unprefixed elements; a prefixed stylesheet needs its prefix on them\n private prefix(xml: string): string {\n return this.p ? xml.replace(/<(\\/?)([A-Za-z])/g, `<$1${this.p}$2`) : xml;\n }\n}\n","import {\n mapFormulaRefs, shiftFormula, colIndex, colLetter, attr, escapeXml, unescapeXml, MAX_ROWS, MAX_COLUMNS, type RefRole,\n} from './utils';\n\n// Rows or columns inserted before `at`, or at..at+count-1 deleted (1-based; column 1 is A). Later\n// operations use the numbers left by earlier ones, as when they are done one after another in Excel.\nexport interface ShiftOp { at: number; count: number; insert: boolean }\n\n// Where the rows (or columns) of a sheet end up\nexport class AxisMap {\n constructor(readonly ops: ShiftOp[]) {}\n\n // A cell in a deleted row is gone (null); a range keeps what remains: its start moves to the row\n // after the deletion and its end to the row before it, which turns a range of deleted rows inside out.\n map(n: number, role: RefRole): number | null {\n for (const { at, count, insert } of this.ops) {\n if (insert) {\n if (n >= at) n += count;\n } else if (n >= at + count) n -= count;\n else if (n >= at) {\n if (role === 'single') return null;\n n = role === 'start' ? at : at - 1;\n }\n }\n return n;\n }\n}\n\nexport interface SheetShift { rows?: AxisMap; cols?: AxisMap }\n// Sheet name (lower case: Excel compares them so) -> how its rows and columns move\nexport type ShiftMaps = Map<string, SheetShift>;\n\n// Column mappers work on 0-based columns, as mapFormulaRefs passes them\nconst mapCol = (s: SheetShift | undefined, c: number, role: RefRole) => {\n if (!s?.cols) return c;\n const n = s.cols.map(c + 1, role);\n return n === null ? null : n - 1;\n};\nconst mapRow = (s: SheetShift | undefined, r: number, role: RefRole) => (s?.rows ? s.rows.map(r, role) : r);\n\nconst firstRow = (area: string) => parseInt(/\\d+/.exec(area)?.[0] ?? '1', 10);\nconst lastRow = (area: string) => parseInt(/(\\d+)\\D*$/.exec(area)?.[1] ?? '1', 10);\nconst firstCol = (area: string) => colIndex(/[A-Za-z]+/.exec(area)?.[0] ?? 'A');\nconst lastCol = (area: string) => colIndex(/([A-Za-z]+)\\$?\\d*\\s*$/.exec(area)?.[1] ?? 'A');\n\n// An area (A1, A1:B5, 3:7, C:D) after rows and columns move, or null when nothing of it is left\nexport function mapArea(area: string, s: SheetShift): string | null {\n const out = mapFormulaRefs(area.includes(':') ? area : `${area}:${area}`,\n (c, _abs, role) => mapCol(s, c, role), (r, _abs, role) => mapRow(s, r, role));\n if (out.includes('#REF!')) return null;\n const [a, b] = out.split(':');\n return a === b ? a : out;\n}\n\n// A space-separated list of areas (sqref); null when none is left\nconst mapAreas = (sqref: string, s: SheetShift) => {\n const areas = sqref.trim().split(/\\s+/).map(a => mapArea(a, s)).filter((a): a is string => a !== null);\n return areas.length ? areas.join(' ') : null;\n};\n\n// A cell that should land somewhere even when its row or column is deleted (a selection, a scroll\n// position): it moves to the row or column after the deleted ones\nfunction mapCellStart(ref: string, s: SheetShift): string {\n const out = mapFormulaRefs(ref, c => mapCol(s, c, 'start'), r => mapRow(s, r, 'start'));\n return out.includes('#REF!') ? ref : out;\n}\n\n// The top-left cell of an area before and after the move, for formulas counted relative to it\ntype Anchor = { row: number; toRow: number; col: number; toCol: number };\n\n// A formula on sheet `sheet` ('' for workbook-level names and charts). `anchor` is set for conditional\n// formats and validations, whose relative references count from the top-left cell of their range: one\n// that points into deleted rows or columns keeps its distance from that cell instead of becoming #REF!.\nexport function mapFormula(f: string, sheet: string, maps: ShiftMaps, anchor?: Anchor): string {\n const own = maps.get(sheet.toLowerCase());\n if (!own && !f.includes('!')) return f;\n const target = (q: string | undefined) => (q === undefined ? own : maps.get(q.toLowerCase()));\n return mapFormulaRefs(f,\n (c, abs, role, q) => {\n const s = target(q);\n const n = mapCol(s, c, role);\n return n === null && anchor && !abs && q === undefined ? c - anchor.col + anchor.toCol : n;\n },\n (r, abs, role, q) => {\n const s = target(q);\n const n = mapRow(s, r, role);\n return n === null && anchor && !abs && q === undefined ? r - anchor.row + anchor.toRow : n;\n });\n}\n\nfunction anchorOf(area: string, s: SheetShift): Anchor {\n const row = firstRow(area), col = firstCol(area);\n return { row, toRow: mapRow(s, row, 'start')!, col, toCol: mapCol(s, col, 'start')! };\n}\n\n// Counts the children of a wrapper (<mergeCells count=\"n\">), removing the wrapper when none are left\nfunction recount(xml: string, wrapper: string, child: string, countAttr = 'count'): string {\n return xml.replace(new RegExp(`<((?:\\\\w+:)?)${wrapper}\\\\b([^>]*?)(?:/>|>([\\\\s\\\\S]*?)</\\\\1${wrapper}>)`, 'g'),\n (_whole, p: string, attrs: string, inner = '') => {\n const n = inner.match(new RegExp(`<(?:\\\\w+:)?${child}\\\\b`, 'g'))?.length ?? 0;\n if (!n) return '';\n const counted = attrs.replace(new RegExp(`\\\\s${countAttr}=\"\\\\d+\"`), ` ${countAttr}=\"${n}\"`);\n return `<${p}${wrapper}${counted}>${inner}</${p}${wrapper}>`;\n });\n}\n\n// An autoFilter keeps its column filters on the columns they filter; colId counts from its first column\nfunction mapAutoFilter(xml: string, s: SheetShift): string {\n return xml.replace(/<((?:\\w+:)?)autoFilter\\b([^>]*?)(\\/>|>([\\s\\S]*?)<\\/\\1autoFilter>)/g, (whole, p: string, attrs: string, rest: string, inner?: string) => {\n const ref = attr(attrs, 'ref');\n if (ref === null) return whole;\n const mapped = mapArea(ref, s);\n if (mapped === null) return '';\n const from = firstCol(ref), to = firstCol(mapped);\n if (inner !== undefined && s.cols) {\n inner = inner.replace(/<((?:\\w+:)?)filterColumn\\b([^>]*?)(?:\\/>|>[\\s\\S]*?<\\/\\1filterColumn>)/g, (column, _fp, fAttrs: string) => {\n const id = parseInt(attr(fAttrs, 'colId') ?? '0', 10);\n const c = mapCol(s, from + id, 'single');\n return c === null ? '' : column.replace(/\\scolId=\"\\d+\"/, ` colId=\"${c - to}\"`);\n });\n rest = `>${inner}</${p}autoFilter>`;\n }\n return `<${p}autoFilter${attrs.replace(/\\sref=\"[^\"]*\"/, ` ref=\"${mapped}\"`)}${rest}`;\n });\n}\n\n// The worksheet XML around <sheetData>: column widths, merges, conditional formats, validations,\n// links, filters, page breaks, sparklines and selections follow their cells; formulas follow the\n// cells they point at\nexport function mapSheetXml(xml: string, sheet: string, maps: ShiftMaps): string {\n const own = maps.get(sheet.toLowerCase());\n\n xml = xml.replace(/<((?:\\w+:)?)(conditionalFormatting|dataValidation)\\b([^>]*?)(?:\\/>|>([\\s\\S]*?)<\\/\\1\\2>)/g,\n (whole, p: string, tag: string, attrs: string, inner = '') => {\n // x14 extensions keep the range in an <xm:sqref> child\n const child = /<((?:\\w+:)?)sqref>([^<]*)<\\/\\1sqref>/.exec(inner);\n const sqref = attr(attrs, 'sqref') ?? child?.[2];\n let anchor: Anchor | undefined;\n if (own && sqref) {\n const mapped = mapAreas(sqref, own);\n if (mapped === null) return '';\n anchor = anchorOf(sqref, own);\n attrs = attrs.replace(/\\ssqref=\"[^\"]*\"/, ` sqref=\"${mapped}\"`);\n if (child) inner = inner.replace(child[0], `<${child[1]}sqref>${mapped}</${child[1]}sqref>`);\n }\n inner = inner.replace(/<((?:\\w+:)?)(formula1|formula2|formula|f)>([^<]*)<\\/\\1\\2>/g, (_m: string, fp: string, ftag: string, f: string) =>\n `<${fp}${ftag}>${escapeXml(mapFormula(unescapeXml(f), sheet, maps, anchor))}</${fp}${ftag}>`);\n return whole.endsWith('/>') && !inner ? `<${p}${tag}${attrs}/>` : `<${p}${tag}${attrs}>${inner}</${p}${tag}>`;\n });\n xml = recount(xml, 'dataValidations', 'dataValidation');\n\n // Sparklines (x14): the data range follows its cells; a sparkline whose own cell is deleted goes\n const mapF = (s: string) => s.replace(/<((?:\\w+:)?)f>([^<]*)<\\/\\1f>/g, (_m: string, p: string, f: string) =>\n `<${p}f>${escapeXml(mapFormula(unescapeXml(f), sheet, maps))}</${p}f>`);\n xml = xml.replace(/<((?:\\w+:)?)sparklineGroup\\b([^>]*)>([\\s\\S]*?)<\\/\\1sparklineGroup>/g, (whole, p: string, attrs: string, inner: string) => {\n const list = /<((?:\\w+:)?)sparklines>([\\s\\S]*?)<\\/\\1sparklines>/.exec(inner);\n if (!list) return whole;\n const lines = list[2].replace(/<((?:\\w+:)?)sparkline>([\\s\\S]*?)<\\/\\1sparkline>/g, (_m: string, sp: string, body: string) => {\n const loc = /<((?:\\w+:)?)sqref>([^<]*)<\\/\\1sqref>/.exec(body);\n if (own && loc) {\n const mapped = mapArea(loc[2], own);\n if (mapped === null) return '';\n body = body.replace(loc[0], `<${loc[1]}sqref>${mapped}</${loc[1]}sqref>`);\n }\n return `<${sp}sparkline>${mapF(body)}</${sp}sparkline>`;\n });\n if (!/<(?:\\w+:)?sparkline>/.test(lines)) return '';\n // The group's own <xm:f> (a date axis) sits outside the list\n return `<${p}sparklineGroup${attrs}>${mapF(inner.slice(0, list.index))}<${list[1]}sparklines>${lines}</${list[1]}sparklines>` +\n `${mapF(inner.slice(list.index + list[0].length))}</${p}sparklineGroup>`;\n });\n xml = recount(xml, 'sparklineGroups', 'sparklineGroup', 'nonexistent');\n // An extension left empty, and then an empty extension list, go too\n xml = xml.replace(/<((?:\\w+:)?)ext\\b[^>]*>\\s*<\\/\\1ext>/g, '').replace(/<((?:\\w+:)?)extLst>\\s*<\\/\\1extLst>/g, '');\n if (!own) return xml;\n\n // One element type at a time, so that one nested in another (sortState in autoFilter) is reached.\n // An element whose area is gone is removed with its children.\n const mapAttr = (tag: string, name: string) => {\n xml = xml.replace(new RegExp(`<((?:\\\\w+:)?)${tag}\\\\b([^>]*?)(/>|>([\\\\s\\\\S]*?)</\\\\1${tag}>)`, 'g'), (whole, p: string, attrs: string, rest: string) => {\n const value = attr(attrs, name);\n if (value === null) return whole;\n const mapped = name === 'sqref' ? mapAreas(value, own) : mapArea(value, own);\n return mapped === null ? '' : `<${p}${tag}${attrs.replace(new RegExp(`\\\\s${name}=\"[^\"]*\"`), ` ${name}=\"${mapped}\"`)}${rest}`;\n });\n };\n mapAttr('mergeCell', 'ref');\n xml = xml.replace(/<(?:\\w+:)?mergeCell\\b[^>]*?\\sref=\"[^\":]*\"[^>]*\\/>/g, ''); // a merge left with one cell\n xml = recount(xml, 'mergeCells', 'mergeCell');\n mapAttr('hyperlink', 'ref');\n xml = recount(xml, 'hyperlinks', 'hyperlink', 'nonexistent');\n xml = mapAutoFilter(xml, own);\n for (const tag of ['dimension', 'sortState', 'sortCondition']) mapAttr(tag, 'ref');\n for (const tag of ['ignoredError', 'protectedRange']) mapAttr(tag, 'sqref');\n xml = recount(xml, 'ignoredErrors', 'ignoredError', 'nonexistent');\n xml = recount(xml, 'protectedRanges', 'protectedRange', 'nonexistent');\n\n // Column widths and styles: inserted columns get the default width, deleted ones take theirs along\n if (own.cols) {\n const cols = own.cols;\n xml = xml.replace(/<((?:\\w+:)?)col\\b([^>]*?)\\/>/g, (_m, p: string, attrs: string) => {\n const min = cols.map(parseInt(attr(attrs, 'min') ?? '1', 10), 'start')!;\n const max = cols.map(parseInt(attr(attrs, 'max') ?? '1', 10), 'end')!;\n if (max < min) return '';\n return `<${p}col${attrs.replace(/\\smin=\"\\d+\"/, ` min=\"${min}\"`).replace(/\\smax=\"\\d+\"/, ` max=\"${Math.min(max, MAX_COLUMNS)}\"`)}/>`;\n });\n xml = recount(xml, 'cols', 'col', 'nonexistent');\n }\n\n // The view: a selection or scroll position in deleted cells moves to the cells after them\n xml = xml.replace(/<((?:\\w+:)?)(selection|pane)\\b([^>]*?)\\/>/g, (_m, p: string, tag: string, attrs: string) => {\n attrs = attrs.replace(/\\s(activeCell|topLeftCell)=\"([^\"]*)\"/g, (_a, name: string, ref: string) => ` ${name}=\"${mapCellStart(ref, own)}\"`);\n const sqref = attr(attrs, 'sqref');\n if (sqref !== null) attrs = attrs.replace(/\\ssqref=\"[^\"]*\"/, ` sqref=\"${mapAreas(sqref, own) ?? attr(attrs, 'activeCell') ?? 'A1'}\"`);\n return `<${p}${tag}${attrs}/>`;\n });\n\n // A break's id is the 0-based row (column) it sits above (left of)\n for (const [section, axis] of [['rowBreaks', own.rows], ['colBreaks', own.cols]] as const) {\n if (!axis) continue;\n xml = xml.replace(new RegExp(`<((?:\\\\w+:)?)${section}\\\\b[\\\\s\\\\S]*?</\\\\1${section}>`), list => {\n list = list.replace(/<(?:\\w+:)?brk\\b([^>]*?)\\/>/g, (whole, attrs: string) => {\n const n = axis.map(parseInt(attr(attrs, 'id') ?? '0', 10) + 1, 'start')!;\n return whole.replace(/\\sid=\"\\d+\"/, ` id=\"${n - 1}\"`);\n });\n const n = list.match(/<(?:\\w+:)?brk\\b/g)?.length ?? 0;\n return n ? list.replace(/\\scount=\"\\d+\"/, ` count=\"${n}\"`).replace(/\\smanualBreakCount=\"\\d+\"/, ` manualBreakCount=\"${n}\"`) : '';\n });\n }\n return xml;\n}\n\n// Streams a worksheet, moving its rows and cells and the references in its formulas. Sheets whose\n// own cells do not move only have formulas that point at other sheets rewritten.\nexport function createShiftTransform(sheet: string, maps: ShiftMaps): TransformStream<string, string> {\n const own = maps.get(sheet.toLowerCase());\n let buffer = '';\n let p = '';\n let state: 'head' | 'rows' | 'tail' = 'head';\n // Shared formulas are written out per cell when the cells under them move unevenly\n const shared = new Map<string, { text: string; row: number; col: number; expand: boolean }>();\n const mapF = (f: string) => mapFormula(f, sheet, maps);\n\n const rewriteRow = (whole: string, attrs: string, inner: string | undefined): string => {\n const r = parseInt(attr(attrs, 'r') ?? '0', 10);\n const to = r ? mapRow(own, r, 'single') : r;\n if (to === null) return '';\n if (to > MAX_ROWS) throw new Error(`Sheet \"${sheet}\": inserting rows pushes row ${r} past Excel's last row.`);\n if (to === r && !own?.cols && !inner?.includes('<' + p + 'f')) return whole;\n\n let col = 0;\n const cells = (inner ?? '').replace(new RegExp(`<${p}c\\\\b([^>]*?)(?:/>|>([\\\\s\\\\S]*?)</${p}c>)`, 'g'), (cell, cAttrs: string, body?: string) => {\n const ref = /\\sr=\"([A-Za-z]+)\\d+\"/.exec(cAttrs);\n if (ref) col = colIndex(ref[1]);\n const c = col++;\n const toCol = mapCol(own, c, 'single');\n if (toCol === null) return '';\n if (toCol >= MAX_COLUMNS) throw new Error(`Sheet \"${sheet}\": inserting columns pushes column ${colLetter(c)} past Excel's last column.`);\n if (to !== r || toCol !== c) cell = cell.replace(/\\sr=\"[A-Za-z]+\\d+\"/, ` r=\"${colLetter(toCol)}${to}\"`);\n const f = body && new RegExp(`<${p}f\\\\b([^>]*?)(?:/>|>([\\\\s\\\\S]*?)</${p}f>)`).exec(body);\n if (!f) return cell;\n const text = unescapeXml(f[2] ?? '');\n const kind = attr(f[1], 't');\n const si = attr(f[1], 'si');\n let xml: string | undefined;\n if (kind === 'shared' && si !== null) {\n if (text) {\n const mapped = mapF(text);\n const expand = !!own || mapped !== text;\n shared.set(si, { text, row: r, col: c, expand });\n if (expand) xml = `<${p}f>${escapeXml(mapped)}</${p}f>`;\n } else {\n const a = shared.get(si);\n if (a) {\n // Even when the anchor's own references stay, this cell's may point into moved rows\n const own = shiftFormula(a.text, r - a.row, c - a.col);\n const mapped = mapF(own);\n if (a.expand || mapped !== own) xml = `<${p}f>${escapeXml(mapped)}</${p}f>`;\n }\n }\n } else if (kind === 'dataTable') {\n // A What-If data table: its result range and its input cells (r1, r2) follow their cells\n let fAttrs = f[1];\n const range = attr(fAttrs, 'ref');\n if (own && range) fAttrs = fAttrs.replace(/\\sref=\"[^\"]*\"/, ` ref=\"${mapArea(range, own) ?? range}\"`);\n fAttrs = fAttrs.replace(/\\s(r1|r2)=\"([^\"]*)\"/g, (_m, name: string, ref: string) => ` ${name}=\"${escapeXml(mapF(unescapeXml(ref)))}\"`);\n xml = f[0].replace(f[1], () => fAttrs);\n } else if (text) {\n let fAttrs = f[1];\n const range = attr(fAttrs, 'ref');\n if (own && range) fAttrs = fAttrs.replace(/\\sref=\"[^\"]*\"/, ` ref=\"${mapArea(range, own) ?? range}\"`);\n xml = `<${p}f${fAttrs}>${escapeXml(mapF(text))}</${p}f>`;\n }\n return xml === undefined ? cell : cell.replace(f[0], () => xml!);\n });\n let open = to === r ? attrs : attrs.replace(/\\sr=\"\\d+\"/, ` r=\"${to}\"`);\n if (own?.cols) open = open.replace(/\\sspans=\"[^\"]*\"/, ''); // an optional hint, now stale\n return inner === undefined ? `<${p}row${open}/>` : `<${p}row${open}>${cells}</${p}row>`;\n };\n\n return new TransformStream({\n transform(chunk, controller) {\n buffer += chunk;\n let out = '';\n while (true) {\n if (state === 'head') {\n const m = /<((?:\\w+:)?)sheetData\\b[^>]*?(\\/?)>/.exec(buffer);\n if (!m) break;\n p = m[1];\n out += mapSheetXml(buffer.slice(0, m.index), sheet, maps) + m[0];\n buffer = buffer.slice(m.index + m[0].length);\n state = m[2] ? 'tail' : 'rows';\n } else if (state === 'rows') {\n const m = new RegExp(`^\\\\s*(?:<${p}row\\\\b([^>]*?)(?:/>|>([\\\\s\\\\S]*?)</${p}row>)|</${p}sheetData>)`).exec(buffer);\n if (!m) break;\n if (m[1] === undefined) {\n out += m[0];\n state = 'tail';\n } else out += rewriteRow(m[0].trimStart(), m[1], m[2]);\n buffer = buffer.slice(m[0].length);\n } else break; // the tail is mapped whole at the end\n }\n if (out) controller.enqueue(out);\n },\n flush(controller) {\n if (state !== 'tail') {\n controller.error(new Error(`Sheet \"${sheet}\" has no complete <sheetData> element.`));\n return;\n }\n controller.enqueue(mapSheetXml(buffer, sheet, maps));\n },\n });\n}\n\n// Notes (legacy and threaded) on moved cells move with them; notes on deleted cells go\nexport function mapComments(xml: string, s: SheetShift): string {\n return xml.replace(/<((?:\\w+:)?)(comment|threadedComment)\\b([^>]*?)(?:\\/>|>[\\s\\S]*?<\\/\\1\\2>)/g, (whole, _p, _t, attrs: string) => {\n const ref = attr(attrs, 'ref');\n if (!ref) return whole;\n const mapped = mapArea(ref, s);\n return mapped === null ? '' : whole.replace(/(\\sref=\")[^\"]*\"/, `$1${mapped}\"`);\n });\n}\n\n// The note boxes drawn for legacy notes (VML). Prefixes vary: v:/x: from Excel, ns1:/ns2: from openpyxl.\nexport function mapVml(xml: string, s: SheetShift): string {\n return xml.replace(/<((?:\\w+:)?)shape\\b[\\s\\S]*?<\\/\\1shape>/g, shape => {\n const row = /<((?:\\w+:)?)Row>(\\d+)<\\/\\1Row>/.exec(shape);\n const col = /<((?:\\w+:)?)Column>(\\d+)<\\/\\1Column>/.exec(shape);\n if (!row || !col) return shape;\n const r = parseInt(row[2], 10), c = parseInt(col[2], 10);\n const toR = mapRow(s, r + 1, 'single'), toC = mapCol(s, c, 'single');\n if (toR === null || toC === null) return '';\n const dr = toR - 1 - r, dc = toC - c;\n if (!dr && !dc) return shape;\n return shape\n .replace(row[0], `<${row[1]}Row>${toR - 1}</${row[1]}Row>`)\n .replace(col[0], `<${col[1]}Column>${toC}</${col[1]}Column>`)\n .replace(/<((?:\\w+:)?)Anchor>([^<]*)<\\/\\1Anchor>/, (_m, p: string, a: string) => {\n const v = a.split(',').map(x => parseInt(x.trim(), 10));\n v[0] += dc; v[4] += dc; v[2] += dr; v[6] += dr;\n return `<${p}Anchor>${v.join(', ')}</${p}Anchor>`;\n });\n });\n}\n\n// Pictures and charts move with their cells; one spanning inserted rows or columns grows unless it is\n// set to keep its size (oneCell) or position (absolute). One whose cells are all deleted shrinks.\nexport function mapDrawing(xml: string, s: SheetShift): string {\n const at = (el: string, axis: string) => new RegExp(`(<(?:\\\\w+:)?${el}>[\\\\s\\\\S]*?<(?:\\\\w+:)?${axis}>)(\\\\d+)(<)`);\n return xml.replace(/<((?:\\w+:)?)(twoCellAnchor|oneCellAnchor)\\b([^>]*)>([\\s\\S]*?)<\\/\\1\\2>/g, (whole, p: string, tag: string, attrs: string, inner: string) => {\n const editAs = attr(attrs, 'editAs') ?? (tag === 'oneCellAnchor' ? 'oneCell' : 'twoCell');\n if (editAs === 'absolute') return whole;\n for (const [axis, map] of [['row', (n: number, role: RefRole) => mapRow(s, n + 1, role)! - 1], ['col', (n: number, role: RefRole) => mapCol(s, n, role)!]] as const) {\n const from = at('from', axis).exec(inner);\n if (!from) continue;\n const f = parseInt(from[2], 10);\n const nf = map(f, 'start');\n const to = at('to', axis).exec(inner);\n inner = inner.replace(at('from', axis), `$1${nf}$3`);\n if (to) {\n const t = parseInt(to[2], 10);\n inner = inner.replace(at('to', axis), `$1${Math.max(nf, editAs === 'oneCell' ? t + nf - f : map(t, 'end'))}$3`);\n }\n }\n return `<${p}${tag}${attrs}>${inner}</${p}${tag}>`;\n });\n}\n\n// A table's range follows its cells. Its columns follow theirs: deleted ones go, and inserted ones get\n// a new column whose name is returned as a header cell to write. Deleting the header row or every data\n// row is refused.\nexport function mapTable(xml: string, sheet: string, maps: ShiftMaps): { xml: string; headers: { ref: string; name: string }[] } {\n const own = maps.get(sheet.toLowerCase());\n const headers: { ref: string; name: string }[] = [];\n if (own) {\n const table = /<(?:\\w+:)?table\\b[^>]*>/.exec(xml)?.[0] ?? '';\n const name = attr(table, 'displayName') ?? attr(table, 'name') ?? '';\n const ref = attr(table, 'ref') ?? '';\n const header = attr(table, 'headerRowCount') !== '0';\n if (header && mapRow(own, firstRow(ref), 'single') === null) {\n throw new Error(`Deleting rows on sheet \"${sheet}\" would remove the header row of table \"${name}\".`);\n }\n const mapped = mapArea(ref, own);\n if (mapped === null) throw new Error(`Deleting cells on sheet \"${sheet}\" would remove table \"${name}\".`);\n const totals = parseInt(attr(table, 'totalsRowCount') ?? '0', 10);\n if (lastRow(mapped) - firstRow(mapped) + 1 < (header ? 1 : 0) + totals + 1) {\n throw new Error(`Deleting rows on sheet \"${sheet}\" would leave table \"${name}\" without data rows.`);\n }\n\n if (own.cols) {\n const from = firstCol(ref), to = firstCol(mapped), width = lastCol(mapped) - to + 1;\n xml = xml.replace(/<((?:\\w+:)?)tableColumns\\b([^>]*)>([\\s\\S]*?)<\\/\\1tableColumns>/, (_m, p: string, attrs: string, inner: string) => {\n const old = [...inner.matchAll(/<((?:\\w+:)?)tableColumn\\b([^>]*?)(?:\\/>|>[\\s\\S]*?<\\/\\1tableColumn>)/g)];\n const names = new Set(old.map(c => (attr(c[2], 'name') ?? '').toLowerCase()));\n let id = Math.max(0, ...old.map(c => parseInt(attr(c[2], 'id') ?? '0', 10)));\n const slots: string[] = new Array(width);\n old.forEach((c, i) => {\n const at = mapCol(own, from + i, 'single');\n if (at !== null) slots[at - to] = c[0];\n });\n let k = 1;\n for (let i = 0; i < width; i++) {\n if (slots[i]) continue;\n while (names.has(`column${k}`)) k++;\n names.add(`column${k}`);\n slots[i] = `<${p}tableColumn id=\"${++id}\" name=\"Column${k}\"/>`;\n if (header) headers.push({ ref: colLetter(to + i) + firstRow(mapped), name: `Column${k}` });\n }\n return `<${p}tableColumns${attrs.replace(/\\scount=\"\\d+\"/, ` count=\"${width}\"`)}>${slots.join('')}</${p}tableColumns>`;\n });\n }\n xml = mapAutoFilter(xml, own).replace(/(<(?:\\w+:)?(?:table|sortState|sortCondition)\\b[^>]*?\\sref=\")([^\"]*)\"/g,\n (_m, pre: string, area: string) => `${pre}${mapArea(area, own) ?? area}\"`);\n }\n xml = xml.replace(/<((?:\\w+:)?)(calculatedColumnFormula|totalsRowFormula)\\b([^>]*)>([^<]*)<\\/\\1\\2>/g,\n (_m, p: string, tag: string, attrs: string, f: string) => `<${p}${tag}${attrs}>${escapeXml(mapFormula(unescapeXml(f), sheet, maps))}</${p}${tag}>`);\n return { xml, headers };\n}\n\n// Chart series follow the cells they plot. Cached values are dropped when a series moves, and Excel\n// rebuilds them from the cells.\nexport function mapChart(xml: string, maps: ShiftMaps): string {\n let changed = false;\n const out = xml.replace(/(<(?:\\w+:)?f>)([^<]*)(<\\/(?:\\w+:)?f>)/g, (whole, open: string, f: string, close: string) => {\n const mapped = mapFormula(unescapeXml(f), '', maps);\n if (mapped === unescapeXml(f)) return whole;\n changed = true;\n return open + escapeXml(mapped) + close;\n });\n return changed ? out.replace(/<((?:\\w+:)?)(numCache|strCache)\\b[\\s\\S]*?<\\/\\1\\2>/g, '') : xml;\n}\n\n// A pivot table on a sheet whose rows or columns move is drawn where its cells went\nexport function mapPivotTable(xml: string, s: SheetShift): string {\n return xml.replace(/(<(?:\\w+:)?location\\b[^>]*?\\sref=\")([^\"]*)\"/, (_m, pre: string, ref: string) => `${pre}${mapArea(ref, s) ?? ref}\"`);\n}\n\n// A pivot cache over moved cells reads the new range and refreshes when the file opens\nexport function mapPivotCache(xml: string, maps: ShiftMaps): string {\n let changed = false;\n const out = xml.replace(/<((?:\\w+:)?)worksheetSource\\b([^>]*?)\\/>/, (whole, p: string, attrs: string) => {\n const ref = attr(attrs, 'ref');\n const s = maps.get((attr(attrs, 'sheet') ?? '').toLowerCase());\n const mapped = ref && s ? mapArea(ref, s) : null;\n if (!mapped || mapped === ref) return whole;\n changed = true;\n return `<${p}worksheetSource${attrs.replace(/\\sref=\"[^\"]*\"/, ` ref=\"${mapped}\"`)}/>`;\n });\n if (!changed) return xml;\n return out.replace(/<((?:\\w+:)?)pivotCacheDefinition\\b([^>]*?)>/, (_m, p: string, attrs: string) =>\n `<${p}pivotCacheDefinition${attrs.replace(/\\srefreshOnLoad=\"[^\"]*\"/, '')} refreshOnLoad=\"1\">`);\n}\n\n// Workbook defined names (print areas, named ranges) follow the cells they point at\nexport function mapDefinedNames(wb: string, maps: ShiftMaps): string {\n return wb.replace(/(<(?:\\w+:)?definedName\\b[^>]*>)([^<]*)(<\\/(?:\\w+:)?definedName>)/g, (_m, open: string, f: string, close: string) =>\n open + escapeXml(mapFormula(unescapeXml(f), '', maps)) + close);\n}\n","import { RandomAccessReader } from './random-access';\nimport { ZipRandomAccessParser } from './zip-random-access';\nimport { Row, SheetOptions, CellValue, CellStyle } from './types';\nimport { ZipStreamWriter } from './zip-stream-writer';\nimport { StylePatcher } from './style-patcher';\nimport {\n AxisMap, createShiftTransform, mapComments, mapVml, mapDrawing, mapTable, mapChart, mapPivotCache, mapPivotTable, mapDefinedNames,\n type ShiftOp, type ShiftMaps,\n} from './sheet-shift';\nimport {\n resolveWorkbookParts, partRelationships, recalcOnOpen, attr, dirOf, relsPathOf, validateSheetName,\n colIndex, colLetter, dateToSerial, MAX_ROWS, MAX_COLUMNS, checkCellText, encodeXString, shiftFormula, escapeXml, unescapeXml, escapeRe, xmlElements, type WorkbookParts } from './utils';\n\n// A new cell value; null clears it. The object form sets a formula (leading \"=\" optional) or a value,\n// and can change the cell's style: only the style properties given change. With neither `value` nor\n// `formula`, the cell keeps its content.\nexport type CellEdit = CellValue | { value?: CellValue; formula?: string; style?: CellStyle };\ntype EditedRows = Map<number, Map<number, CellEdit>>;\n\nconst KEEP = Symbol('keep');\nfunction contentOf(edit: CellEdit): CellValue | { formula: string } | typeof KEEP {\n if (edit === null || typeof edit !== 'object' || edit instanceof Date) return edit ?? null;\n if (edit.formula !== undefined) return { formula: edit.formula };\n return 'value' in edit ? edit.value ?? null : KEEP;\n}\nconst styleOf = (edit: CellEdit) =>\n edit !== null && typeof edit === 'object' && !(edit instanceof Date) ? edit.style : undefined;\n\n\n// The cell XML for an edit; `attrs` keeps the existing cell's style (s=...) and other attributes\nfunction editedCell(p: string, ref: string, attrs: string, edit: CellValue | { formula: string }): string {\n if (edit === null || edit === undefined) return `<${p}c r=\"${ref}\"${attrs}/>`;\n if (typeof edit === 'number') {\n return isFinite(edit) ? `<${p}c r=\"${ref}\"${attrs}><${p}v>${edit}</${p}v></${p}c>` : `<${p}c r=\"${ref}\"${attrs} t=\"e\"><${p}v>#NUM!</${p}v></${p}c>`;\n }\n if (typeof edit === 'boolean') return `<${p}c r=\"${ref}\"${attrs} t=\"b\"><${p}v>${edit ? 1 : 0}</${p}v></${p}c>`;\n if (edit instanceof Date) {\n if (isNaN(edit.getTime())) throw new Error(`Invalid Date for cell ${ref}`);\n return `<${p}c r=\"${ref}\"${attrs}><${p}v>${dateToSerial(edit)}</${p}v></${p}c>`;\n }\n if (typeof edit === 'object') return `<${p}c r=\"${ref}\"${attrs}><${p}f>${escapeXml(edit.formula.replace(/^=/, ''))}</${p}f></${p}c>`;\n const text = escapeXml(encodeXString(checkCellText(edit, ref)));\n const t = /^\\s|\\s$/.test(edit) ? `<${p}t xml:space=\"preserve\">${text}</${p}t>` : `<${p}t>${text}</${p}t>`;\n return `<${p}c r=\"${ref}\"${attrs} t=\"inlineStr\"><${p}is>${t}</${p}is></${p}c>`;\n}\n\n// The cells of new rows (a new sheet, or rows appended to one) as edits, rows numbered from 1\nfunction rowsToEdits(name: string, rows: Row[]): EditedRows {\n const edits: EditedRows = new Map();\n rows.forEach((row, ri) => {\n const cells = new Map<number, CellEdit>();\n row.forEach((cell, ci) => {\n if (cell === null || cell === undefined) return;\n if (typeof cell !== 'object' || cell instanceof Date) {\n cells.set(ci, cell);\n return;\n }\n if (cell.hyperlink !== undefined || cell.comment !== undefined) {\n throw new Error(`Sheet \"${name}\": SheetEditor does not write hyperlinks or notes in new rows; use SheetWriter.`);\n }\n // Rich text is written as plain text here\n const value = cell.richText && cell.value == null ? cell.richText.map(r => r.text).join('') : cell.value;\n cells.set(ci, { value, formula: cell.formula, style: cell.style });\n });\n if (cells.size) edits.set(ri + 1, cells);\n });\n return edits;\n}\n\nconst WORKSHEET_TYPE = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet';\nconst WORKSHEET_CONTENT = 'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml';\n\n// An element in the shape of a regex match: [whole, attributes, body], body undefined when self-closing\nconst asMatch = (el: { whole: string; attrs: string; body: string }) =>\n [el.whole, el.attrs, el.whole.endsWith('/>') ? undefined : el.body] as unknown as RegExpMatchArray;\n\nexport class SheetEditor {\n private appends = new Map<string, Row[][]>();\n private cellEdits = new Map<string, EditedRows>();\n private additions = new Map<string, Row[]>();\n private deletions = new Set<string>();\n private shiftOps = new Map<string, { rows: ShiftOp[]; cols: ShiftOp[] }>();\n\n // Appends `rows` after the last existing row of sheet `sheetName`. Cells take values, formulas and\n // styles, as in addSheet. Called again for the same sheet, the rows go after the earlier ones.\n appendSheet(sheetName: string, rows: Row[], _options: SheetOptions = {}): this {\n let batches = this.appends.get(sheetName);\n if (!batches) this.appends.set(sheetName, batches = []);\n batches.push(rows);\n return this;\n }\n\n // Sets cells of an existing sheet by address, e.g. { B2: 42, C2: { formula: 'B2*2' } }. A cell\n // keeps its style, so a date written over a date-formatted cell shows as a date. Formulas are\n // recalculated when Excel opens the file.\n setCells(sheetName: string, cells: Record<string, CellEdit>): this {\n let rows = this.cellEdits.get(sheetName);\n if (!rows) this.cellEdits.set(sheetName, rows = new Map());\n for (const [ref, edit] of Object.entries(cells)) {\n const m = /^\\$?([A-Za-z]{1,3})\\$?(\\d+)$/.exec(ref);\n const r = m ? parseInt(m[2], 10) : 0;\n if (!m || r < 1 || r > MAX_ROWS || colIndex(m[1]) >= MAX_COLUMNS) throw new Error(`Invalid cell reference \"${ref}\".`);\n if (!rows.has(r)) rows.set(r, new Map());\n rows.get(r)!.set(colIndex(m[1]), edit);\n }\n return this;\n }\n\n // Adds a sheet after the existing ones. Cells take values, formulas and styles; for hyperlinks,\n // notes and sheet options, write the workbook with SheetWriter.\n addSheet(sheetName: string, rows: Row[]): this {\n validateSheetName(sheetName, this.additions.keys());\n this.additions.set(sheetName, rows);\n return this;\n }\n\n // Removes a sheet. Names scoped to it go; other defined names that point at it become #REF!.\n // Formulas in other sheets that point at it are not rewritten.\n deleteSheet(sheetName: string): this {\n this.deletions.add(sheetName);\n return this;\n }\n\n // Inserts `count` empty rows before row `at`. Everything below moves down, and every reference to\n // the moved rows follows them: formulas on any sheet, defined names, merges, conditional formats,\n // validations, hyperlinks, tables, pictures, notes, sparklines, chart series and pivot sources. A\n // range that spans row `at` grows. setCells addresses count after the rows have moved.\n insertRows(sheetName: string, at: number, count = 1): this {\n return this.shiftOp(sheetName, 'rows', at, count, true);\n }\n\n // Deletes rows start..start+count-1. References to the deleted cells become #REF!, as in Excel, and\n // ranges that covered them shrink.\n deleteRows(sheetName: string, start: number, count = 1): this {\n return this.shiftOp(sheetName, 'rows', start, count, false);\n }\n\n // Inserts `count` empty columns before column `at` ('C' or 3), like insertRows. Inserting inside a\n // table adds table columns named Column1, Column2...\n insertColumns(sheetName: string, at: number | string, count = 1): this {\n return this.shiftOp(sheetName, 'cols', typeof at === 'string' ? colIndex(at) + 1 : at, count, true);\n }\n\n // Deletes columns start..start+count-1 ('C' or 3), like deleteRows\n deleteColumns(sheetName: string, start: number | string, count = 1): this {\n return this.shiftOp(sheetName, 'cols', typeof start === 'string' ? colIndex(start) + 1 : start, count, false);\n }\n\n private shiftOp(sheetName: string, axis: 'rows' | 'cols', at: number, count: number, insert: boolean): this {\n const max = axis === 'rows' ? MAX_ROWS : MAX_COLUMNS;\n if (!Number.isInteger(at) || at < 1 || at > max || !Number.isInteger(count) || count < 1) {\n throw new Error(`Invalid ${axis === 'rows' ? 'rows' : 'columns'}: start ${at}, count ${count}.`);\n }\n let ops = this.shiftOps.get(sheetName);\n if (!ops) this.shiftOps.set(sheetName, ops = { rows: [], cols: [] });\n ops[axis].push({ at, count, insert });\n return this;\n }\n\n // maxUncompressedBytes caps each part as the reader's option does: parts read whole default to 1 GiB,\n // streamed worksheets are only capped when it is set\n edit(reader: RandomAccessReader, options?: { maxUncompressedBytes?: number }): ReadableStream<Uint8Array> {\n const zipIn = new ZipRandomAccessParser(reader);\n // Inflating is capped at each entry's stated size, so checking the stated size bounds the real one\n const checkSize = (name: string, max: number) => {\n const size = zipIn.getRecord(name).uncompressedSize;\n if (size > max) throw new Error(`Security Error: ${name} is ${size} bytes uncompressed, over the limit of ${max}.`);\n };\n const zipOut = new ZipStreamWriter();\n\n (async () => {\n try {\n await zipIn.parseCentralDirectory();\n\n // Resolve sheet paths up front via random access, independent of entry order.\n const readText = async (name: string) => {\n if (!zipIn.has(name)) return '';\n checkSize(name, options?.maxUncompressedBytes ?? 1024 ** 3);\n return this.readStreamToString(await zipIn.extractStream(name));\n };\n const parts = await resolveWorkbookParts(readText);\n // Parts rewritten whole, read back by later steps\n const overlay = new Map<string, string>();\n const read = async (path: string) => overlay.get(path) ?? readText(path);\n const written = new Set<string>();\n const pathOf = (sheetName: string) => {\n if (this.deletions.has(sheetName)) throw new Error(`Sheet \"${sheetName}\" is being deleted.`);\n const path = parts.sheets.get(sheetName);\n if (!path || !zipIn.has(path)) throw new Error(`Sheet \"${sheetName}\" not found in workbook.`);\n return path;\n };\n\n const appendByPath = new Map<string, EditedRows>();\n for (const [sheetName, batches] of this.appends) appendByPath.set(pathOf(sheetName), rowsToEdits(sheetName, batches.flat()));\n const editsByPath = new Map<string, EditedRows>();\n for (const [sheetName, rows] of this.cellEdits) editsByPath.set(pathOf(sheetName), rows);\n\n for (const sheetName of this.deletions) await removeSheet(sheetName, parts, read, overlay, written);\n const added = new Map<string, EditedRows>();\n for (const [sheetName, rows] of this.additions) {\n const free = (path: string) => !zipIn.has(path) && !added.has(path);\n added.set(await insertSheet(sheetName, parts, read, overlay, free), rowsToEdits(sheetName, rows));\n }\n\n // Moving rows: every sheet's formulas may point at them, so all sheets stream through a\n // transform; the parts tied to a sheet's rows and the workbook's names are rewritten whole\n const rowMaps: ShiftMaps = new Map();\n for (const [sheetName, ops] of this.shiftOps) {\n pathOf(sheetName);\n rowMaps.set(sheetName.toLowerCase(), {\n rows: ops.rows.length ? new AxisMap(ops.rows) : undefined,\n cols: ops.cols.length ? new AxisMap(ops.cols) : undefined,\n });\n }\n const shiftByPath = new Map<string, string>();\n if (rowMaps.size) {\n const update = async (path: string, change: (xml: string) => string) => {\n if (!zipIn.has(path) || written.has(path)) return;\n const xml = await read(path);\n const changed = change(xml);\n if (changed !== xml) overlay.set(path, changed);\n };\n await update(parts.workbookPath, wb => mapDefinedNames(wb, rowMaps));\n for (const [sheetName, path] of parts.sheets) {\n if (this.deletions.has(sheetName)) continue;\n shiftByPath.set(path, sheetName);\n const map = rowMaps.get(sheetName.toLowerCase());\n for (const rel of await partRelationships(read, path)) {\n if (rel.external) continue;\n const type = rel.type.slice(rel.type.lastIndexOf('/'));\n if (type === '/table') {\n await update(rel.path, xml => {\n const { xml: table, headers } = mapTable(xml, sheetName, rowMaps);\n // Columns inserted into a table need header cells matching their names\n if (headers.length) {\n const edits: EditedRows = new Map([...editsByPath.get(path) ?? []].map(([r, cells]) => [r, new Map(cells)]));\n for (const { ref, name } of headers) {\n const m = /^([A-Z]+)(\\d+)$/.exec(ref)!;\n const r = parseInt(m[2], 10), c = colIndex(m[1]);\n if (!edits.has(r)) edits.set(r, new Map());\n if (!edits.get(r)!.has(c)) edits.get(r)!.set(c, name);\n }\n editsByPath.set(path, edits);\n }\n return table;\n });\n }\n if (!map) continue;\n if (type === '/comments' || type === '/threadedComment') await update(rel.path, xml => mapComments(xml, map));\n if (type === '/vmlDrawing') await update(rel.path, xml => mapVml(xml, map));\n if (type === '/drawing') await update(rel.path, xml => mapDrawing(xml, map));\n if (type === '/pivotTable') await update(rel.path, xml => mapPivotTable(xml, map));\n }\n }\n // Charts on any sheet can plot the moved rows, and so can pivot tables\n for (const path of parts.sheets.values()) {\n for (const rel of await partRelationships(read, path)) {\n if (rel.external || !rel.type.endsWith('/drawing')) continue;\n for (const chart of await partRelationships(read, rel.path)) {\n if (!chart.external && chart.type.endsWith('/chart')) await update(chart.path, xml => mapChart(xml, rowMaps));\n }\n }\n }\n for (const rel of await partRelationships(read, parts.workbookPath)) {\n if (!rel.external && rel.type.endsWith('/pivotCacheDefinition')) await update(rel.path, xml => mapPivotCache(xml, rowMaps));\n }\n }\n\n // Edited cells invalidate cached formula results\n if (editsByPath.size || added.size || appendByPath.size || this.deletions.size || rowMaps.size) {\n const { replace, drop } = await recalcOnOpen(read, parts, await read(parts.workbookPath));\n for (const [path, xml] of replace) overlay.set(path, xml);\n for (const path of drop) written.add(path);\n }\n\n // Styles gain the formats of restyled cells as the sheets stream, so they are written last\n let patcher: StylePatcher | undefined;\n const styled = [...editsByPath.values(), ...added.values(), ...appendByPath.values()]\n .some(rows => [...rows.values()].some(cells => [...cells.values()].some(e => styleOf(e))));\n // Dates may need a date format added to their cells\n const dated = [...editsByPath.values(), ...added.values(), ...appendByPath.values()]\n .some(rows => [...rows.values()].some(cells => [...cells.values()].some(e => contentOf(e) instanceof Date)));\n if (styled || (dated && parts.styles)) {\n if (!parts.styles) throw new Error('Workbook has no styles part.');\n patcher = new StylePatcher(await read(parts.styles));\n written.add(parts.styles);\n }\n\n for (const [path, xml] of overlay) {\n if (written.has(path)) continue;\n await zipOut.addFile(path, new Response(xml).body!);\n written.add(path);\n }\n const decode = (bytes: ReadableStream<Uint8Array>) => bytes.pipeThrough(new TextDecoderStream() as any as TransformStream<Uint8Array, string>);\n const encode = (text: ReadableStream<string>) => text.pipeThrough(new TextEncoderStream() as any as TransformStream<string, Uint8Array>);\n if (added.size) {\n // A new sheet uses the workbook's namespace (Transitional or Strict)\n const root = /<((?:\\w+:)?)workbook\\b[^>]*>/.exec(await read(parts.workbookPath));\n const ns = (root && attr(root[0], root[1] ? `xmlns:${root[1].slice(0, -1)}` : 'xmlns')) ?? 'http://schemas.openxmlformats.org/spreadsheetml/2006/main';\n const empty = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<worksheet xmlns=\"${escapeXml(ns)}\"><sheetData/></worksheet>`;\n for (const [path, edits] of added) {\n await zipOut.addFile(path, encode(decode(new Response(empty).body!).pipeThrough(this.createEditTransform(edits, patcher))));\n }\n }\n\n for (const filename of zipIn.getFiles()) {\n if (written.has(filename)) continue;\n const append = appendByPath.get(filename);\n const edits = editsByPath.get(filename);\n const shift = shiftByPath.get(filename);\n if (append || edits || shift !== undefined) {\n checkSize(filename, options?.maxUncompressedBytes ?? Infinity);\n let text = decode(await zipIn.extractStream(filename));\n if (shift !== undefined) text = text.pipeThrough(createShiftTransform(shift, rowMaps));\n if (edits || append) text = text.pipeThrough(this.createEditTransform(edits ?? new Map(), patcher, append));\n await zipOut.addFile(filename, encode(text));\n } else {\n // Untouched entries are copied without decompressing\n const record = zipIn.getRecord(filename);\n await zipOut.addCompressedFile(filename, await zipIn.extractRawStream(filename),\n record.uncompressedSize, record.compressedSize, record.crc, record.compressionMethod);\n }\n }\n if (patcher) await zipOut.addFile(parts.styles!, new Response(patcher.toXml()).body!);\n await zipOut.close();\n } catch (err) {\n zipOut.error(err);\n }\n })();\n\n return zipOut.stream;\n }\n\n // Streams a worksheet, rewriting edited cells as their rows pass by and adding rows and cells\n // that did not exist. `append` rows (numbered from 1) go after the last row. Only one row at a\n // time is held in memory.\n private createEditTransform(edits: EditedRows, patcher?: StylePatcher, append?: EditedRows): TransformStream<string, string> {\n const pending = [...edits.keys()].sort((a, b) => a - b);\n let next = 0;\n let lastRow = 0; // number of the last row read, for rows without an r attribute\n let buffer = '';\n let p = ''; // namespace prefix of the sheet's elements\n let state: 'head' | 'rows' | 'tail' = 'head';\n let scanned = 0; // buffer known to hold no </row> before here\n // Shared formulas whose anchor cell was overwritten: their other cells get the formula written out\n const sharedAnchors = new Map<string, { text: string; row: number; col: number }>();\n const brokenShared = new Set<string>();\n\n // An edited cell; `existing` is the cell's current element, if any\n const cellXml = (ref: string, edit: CellEdit, existing?: RegExpMatchArray): string => {\n let attrs = existing ? existing[1].replace(/\\sr=\"[^\"]*\"/, '') : '';\n const style = styleOf(edit);\n if (style) {\n const base = parseInt(/\\ss=\"(\\d+)\"/.exec(attrs)?.[1] ?? '0', 10);\n attrs = `${attrs.replace(/\\ss=\"[^\"]*\"/, '')} s=\"${patcher!.patch(base, style)}\"`;\n }\n const content = contentOf(edit);\n if (content instanceof Date && patcher) {\n const base = parseInt(/\\ss=\"(\\d+)\"/.exec(attrs)?.[1] ?? '0', 10);\n attrs = `${attrs.replace(/\\ss=\"[^\"]*\"/, '')} s=\"${patcher.dateFormat(base, content)}\"`;\n }\n if (content === KEEP) {\n return existing?.[2] !== undefined ? `<${p}c r=\"${ref}\"${attrs}>${existing[2]}</${p}c>` : `<${p}c r=\"${ref}\"${attrs}/>`;\n }\n // Keeps the style; drops the type and the metadata of rich values and dynamic arrays\n return editedCell(p, ref, attrs.replace(/\\s(?:t|vm|cm)=\"[^\"]*\"/g, ''), content);\n };\n\n const newRow = (r: number, rowEdits = edits.get(r)!) => {\n const cells = [...rowEdits.entries()].sort((a, b) => a[0] - b[0])\n .map(([c, e]) => cellXml(colLetter(c) + r, e)).join('');\n return `<${p}row r=\"${r}\">${cells}</${p}row>`;\n };\n const rowsBefore = (limit: number) => {\n let xml = '';\n for (; next < pending.length && pending[next] < limit; next++) xml += newRow(pending[next]);\n return xml;\n };\n // The rows still to come at the end of sheetData: new edited rows, then the appended rows\n const lastRows = () => {\n let xml = rowsBefore(Infinity);\n if (!append?.size) return xml;\n const base = Math.max(lastRow, pending[pending.length - 1] ?? 0);\n const last = base + Math.max(...append.keys());\n if (last > MAX_ROWS) throw new Error(`Appending rows would reach row ${last}, past Excel's last row (${MAX_ROWS}).`);\n for (const [r, cells] of [...append].sort((a, b) => a[0] - b[0])) xml += newRow(base + r, cells);\n return xml;\n };\n\n const rewriteRow = (open: string, inner: string, r: number): string => {\n // A copy: the edits stay intact for another edit() call\n const rowEdits = edits.has(r) ? new Map(edits.get(r)) : undefined;\n if (rowEdits) next++;\n let changed = !!rowEdits;\n const cells: [number, string][] = [];\n let col = 0;\n for (const el of xmlElements(inner, 'c')) {\n const m = asMatch(el);\n const ref = /\\sr=\"([A-Za-z]+)\\d+\"/.exec(m[1]);\n col = ref ? colIndex(ref[1]) : col;\n const edit = rowEdits?.get(col);\n const formula = m[2] && xmlElements(m[2], 'f').next().value;\n const f = formula ? asMatch(formula) : undefined;\n const si = f && /\\st=\"shared\"/.test(f[1]) ? /\\ssi=\"(\\d+)\"/.exec(f[1])?.[1] : undefined;\n let xml = m[0];\n const anchor = si !== undefined && f && f[2] !== undefined;\n if (anchor) sharedAnchors.set(si!, { text: unescapeXml(f![2]), row: r, col });\n if (rowEdits?.has(col)) {\n // the group's formula text lived in this cell\n if (anchor && contentOf(edit as CellEdit) !== KEEP) brokenShared.add(si!);\n xml = cellXml(colLetter(col) + r, edit as CellEdit, m);\n rowEdits.delete(col);\n } else if (si !== undefined && f && !anchor) {\n if (brokenShared.has(si)) {\n const a = sharedAnchors.get(si);\n if (a) {\n xml = xml.replace(f[0], `<${p}f>${escapeXml(shiftFormula(a.text, r - a.row, col - a.col))}</${p}f>`);\n changed = true;\n }\n }\n }\n cells.push([col, xml]);\n col++;\n }\n for (const [c, e] of rowEdits ?? []) cells.push([c, cellXml(colLetter(c) + r, e)]);\n if (!changed) return `${open}${inner}</${p}row>`;\n cells.sort((a, b) => a[0] - b[0]);\n return `${open.replace(/\\sspans=\"[^\"]*\"/, '').replace(/\\/>$/, '>')}${cells.map(c => c[1]).join('')}</${p}row>`;\n };\n\n return new TransformStream({\n transform(chunk, controller) {\n buffer += chunk;\n let out = '';\n while (true) {\n if (state === 'head') {\n const m = /<((?:\\w+:)?)sheetData\\b[^>]*?(\\/?)>/.exec(buffer);\n if (!m) break;\n p = m[1];\n if (m[2]) {\n // Empty sheet: <sheetData/> becomes a pair holding the new rows\n out += buffer.slice(0, m.index) + `<${p}sheetData>${lastRows()}</${p}sheetData>`;\n buffer = buffer.slice(m.index + m[0].length);\n state = 'tail';\n } else {\n out += buffer.slice(0, m.index + m[0].length);\n buffer = buffer.slice(m.index + m[0].length);\n state = 'rows';\n }\n } else if (state === 'rows') {\n const gt = buffer.indexOf('>');\n if (gt === -1) break;\n const opening = buffer.slice(0, gt + 1);\n if (!opening.endsWith('/>') && !opening.includes(`</${p}sheetData`)) {\n const close = buffer.indexOf(`</${p}row>`, Math.max(gt, scanned));\n if (close === -1) { scanned = Math.max(0, buffer.length - p.length - 6); break; }\n }\n scanned = 0;\n const m = new RegExp(`^\\\\s*(?:<${p}row\\\\b([^>]*?)(?:/>|>([\\\\s\\\\S]*?)</${p}row>)|</${p}sheetData>)`).exec(buffer);\n if (!m) break;\n if (m[0].trimStart().startsWith(`</${p}sheetData`)) {\n out += lastRows() + m[0];\n state = 'tail';\n } else {\n // A row without r is the one after the previous row, as the reader counts it\n const rAttr = /\\sr=\"(\\d+)\"/.exec(m[1])?.[1];\n const r = rAttr ? parseInt(rAttr, 10) : lastRow + 1;\n lastRow = Math.max(lastRow, r);\n out += rowsBefore(r);\n const open = m[0].slice(0, m[0].indexOf('>') + 1);\n // Rows are only parsed when they have edits or take part in a shared formula\n out += edits.has(r) || (m[2] ?? '').includes('t=\"shared\"') ? rewriteRow(open.trimStart(), m[2] ?? '', r) : m[0];\n }\n buffer = buffer.slice(m[0].length);\n } else {\n out += buffer;\n buffer = '';\n break;\n }\n }\n if (out) controller.enqueue(out);\n },\n flush(controller) {\n if (state !== 'tail') {\n controller.error(new Error('Worksheet has no complete <sheetData> element.'));\n return;\n }\n if (buffer) controller.enqueue(buffer);\n },\n });\n }\n\n private async readStreamToString(stream: ReadableStream<Uint8Array>): Promise<string> {\n const reader = stream.pipeThrough(new TextDecoderStream() as any as TransformStream<Uint8Array, string>).getReader();\n let result = '';\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n result += value;\n }\n return result;\n }\n}\n\nconst sheetTags = (wb: string) => [...wb.matchAll(/<(?:\\w+:)?sheet\\b[^>]*>/g)].map(m => m[0]);\nconst relTag = (rels: string, id: string) =>\n new RegExp(`<(?:\\\\w+:)?Relationship\\\\b[^>]*?\\\\sId=\"${escapeRe(id)}\"[^>]*/>`).exec(rels)?.[0];\nconst overrideTag = (types: string, path: string) =>\n new RegExp(`<(?:\\\\w+:)?Override\\\\b[^>]*?PartName=\"/${escapeRe(path)}\"[^>]*/>`).exec(types)?.[0];\n\nasync function removeSheet(name: string, parts: WorkbookParts, read: (path: string) => Promise<string>,\n overlay: Map<string, string>, dropped: Set<string>) {\n let wb = await read(parts.workbookPath);\n const tags = sheetTags(wb);\n const idx = tags.findIndex(t => attr(t, 'name') === name);\n if (idx < 0) throw new Error(`Sheet \"${name}\" not found in workbook.`);\n if (!tags.some((t, i) => i !== idx && !/\\sstate=\"(?:hidden|veryHidden)\"/.test(t))) {\n throw new Error(`Cannot delete sheet \"${name}\": a workbook needs a visible sheet.`);\n }\n const rId = attr(tags[idx], 'r:id') ?? attr(tags[idx], '\\\\w+:id');\n wb = wb.replace(tags[idx], '');\n\n // Names scoped to the sheet go and later sheets' scopes shift down; references to it become #REF!\n const quoted = new RegExp(`'${escapeRe(name.replace(/'/g, \"''\"))}'!`, 'gi');\n const plain = /^[A-Za-z_\\u00C0-\\uFFFF][\\w.\\u00C0-\\uFFFF]*$/.test(name)\n ? new RegExp(`(^|[^\\\\w.'!])${escapeRe(name)}!`, 'gi') : undefined;\n wb = wb.replace(/<((?:\\w+:)?)definedName\\b([^>]*)>([\\s\\S]*?)<\\/\\1definedName>/g, (whole, _p, attrs: string, text: string) => {\n const local = attr(attrs, 'localSheetId');\n if (local !== null) {\n const n = parseInt(local, 10);\n return n === idx ? '' : n > idx ? whole.replace(/\\slocalSheetId=\"\\d+\"/, ` localSheetId=\"${n - 1}\"`) : whole;\n }\n const formula = unescapeXml(text);\n let mapped = formula.replace(quoted, '#REF!');\n if (plain) mapped = mapped.replace(plain, '$1#REF!');\n return mapped === formula ? whole : whole.replace(`>${text}<`, `>${escapeXml(mapped)}<`);\n });\n wb = wb.replace(/<(?:\\w+:)?workbookView\\b[^>]*>/g, view => view.replace(/\\s(activeTab|firstSheet)=\"(\\d+)\"/g, (_m, a: string, v: string) => {\n const n = parseInt(v, 10);\n return ` ${a}=\"${n > idx ? n - 1 : Math.min(n, tags.length - 2)}\"`;\n }));\n overlay.set(parts.workbookPath, wb);\n\n const path = (await partRelationships(read, parts.workbookPath)).find(r => r.id === rId)?.path;\n const relsPath = relsPathOf(parts.workbookPath);\n const rels = await read(relsPath);\n overlay.set(relsPath, rels.replace(relTag(rels, rId ?? '') ?? '', ''));\n if (path) {\n // The sheet's own drawings, notes and tables stay in the package, unreferenced\n const types = await read('[Content_Types].xml');\n overlay.set('[Content_Types].xml', types.replace(overrideTag(types, path) ?? '', ''));\n dropped.add(path);\n dropped.add(relsPathOf(path));\n }\n}\n\n// Registers a new, empty worksheet part after the existing sheets; returns its path\nasync function insertSheet(name: string, parts: WorkbookParts, read: (path: string) => Promise<string>,\n overlay: Map<string, string>, free: (path: string) => boolean): Promise<string> {\n let wb = await read(parts.workbookPath);\n const tags = sheetTags(wb);\n validateSheetName(name, tags.map(t => attr(t, 'name') ?? ''));\n const dir = dirOf(parts.workbookPath);\n let n = 1;\n while (!free(`${dir}worksheets/sheet${n}.xml`)) n++;\n const path = `${dir}worksheets/sheet${n}.xml`;\n\n const relsPath = relsPathOf(parts.workbookPath);\n let rels = await read(relsPath);\n let k = 1;\n while (relTag(rels, `rId${k}`)) k++;\n // Strict OOXML files use other type URIs: copy them from an existing sheet\n const sheetRel = (await partRelationships(read, parts.workbookPath)).find(r => r.type.endsWith('/worksheet'));\n rels = rels.replace(/<\\/((?:\\w+:)?)Relationships>/, (close, p: string) =>\n `<${p}Relationship Id=\"rId${k}\" Type=\"${sheetRel?.type ?? WORKSHEET_TYPE}\" Target=\"worksheets/sheet${n}.xml\"/>${close}`);\n overlay.set(relsPath, rels);\n\n const sheetId = Math.max(0, ...tags.map(t => parseInt(attr(t, 'sheetId') ?? '0', 10))) + 1;\n const rPrefix = /<(?:\\w+:)?sheet\\b[^>]*?\\s(\\w+):id=\"/.exec(wb)?.[1] ?? 'r';\n wb = wb.replace(/<\\/((?:\\w+:)?)sheets>/, (close, p: string) =>\n `<${p}sheet name=\"${escapeXml(name)}\" sheetId=\"${sheetId}\" ${rPrefix}:id=\"rId${k}\"/>${close}`);\n overlay.set(parts.workbookPath, wb);\n\n const types = await read('[Content_Types].xml');\n const contentType = sheetRel && /ContentType=\"([^\"]*)\"/.exec(overrideTag(types, sheetRel.path) ?? '')?.[1];\n overlay.set('[Content_Types].xml', types.replace(/<\\/((?:\\w+:)?)Types>/, (close, p: string) =>\n `<${p}Override PartName=\"/${path}\" ContentType=\"${contentType ?? WORKSHEET_CONTENT}\"/>${close}`));\n return path;\n}\n","import { RandomAccessReader } from './random-access';\nimport { ZipRandomAccessParser } from './zip-random-access';\nimport { createXmlBatchParser, XmlToken } from './xml-stream';\nimport { parseWorksheet, parseComments, ParseResult, RichTextCollector } from './worksheet-parser';\nimport { resolveWorkbookParts, partRelationships, hyperlinkTargets, decodeXString, isDateFormatCode, attr, unescapeXml, xmlElements } from './utils';\nimport { parseThemeColors, colorResolver, applyFontElement, ColorResolver } from './style-reader';\nimport { readSheetImages } from './image';\nimport { BUILTIN_NUM_FMTS, DISPLAY_NUM_FMTS, isBuiltinDateFormat } from './number-format';\nimport { CfbReader, isCfb } from './cfb';\nimport { XlsWorkbook } from './xls';\nimport { ODS_MIMETYPE, parseOds, readOdsWorkbook } from './ods';\nimport type { CellStyle, CellFont, CellFill, GradientFill, CellBorder, BorderSide, CellAlignment, RichTextRun, DefinedName, WorkbookProperties } from './types';\nexport { SheetWriter } from './writer';\nexport { createFileReader, createBlobReader, type RandomAccessReader } from './random-access';\nexport { sheetToJson, streamToCsv, resolveSheetPaths } from './utils';\nexport { SheetEditor } from './editor';\n\nexport interface ParseOptions {\n sheetName?: string;\n // Zip bomb protection: max uncompressed bytes per part. Parts held in memory (workbook, rels,\n // shared strings, styles) default to 1 GiB; the streamed worksheet is only limited when set.\n // Pass Infinity to disable.\n maxUncompressedBytes?: number;\n formulas?: boolean; // report cell formulas in RowData.formulas\n styles?: boolean; // report cell styles in RowData.styles\n richText?: boolean; // report formatted text runs in RowData.richText\n formatted?: boolean; // report each cell's text as Excel shows it (en-US) in RowData.formatted\n errors?: boolean; // mark error cells (#N/A, #DIV/0!) in RowData.errors (.xlsx only)\n}\n\nconst DEFAULT_MAX_PART_BYTES = 1 << 30;\n\n// OpenDocument files name their type in a `mimetype` entry\nconst isOds = async (zip: ZipRandomAccessParser, readText: (name: string) => Promise<string>) =>\n zip.has('mimetype') && zip.has('content.xml') && (await readText('mimetype')).trim() === ODS_MIMETYPE;\n\n// Compound files (.xls, and .xlsx saved with a password) are read whole, so their size is capped\nasync function openCompound(reader: RandomAccessReader, maxBytes = DEFAULT_MAX_PART_BYTES): Promise<XlsWorkbook | undefined> {\n if (reader.size < 8 || !isCfb(await reader.read(0, 8))) return undefined;\n if (reader.size > maxBytes) throw new Error(`Security Error: the ${reader.size}-byte file is larger than maxUncompressedBytes (${maxBytes}).`);\n const cfb = new CfbReader(await reader.read(0, reader.size));\n if (cfb.has('EncryptionInfo')) {\n throw new Error('This workbook is password-protected. Decrypt it first with decryptWorkbook from @xlsxflow/pro, or save it without a password in Excel.');\n }\n return new XlsWorkbook(cfb);\n}\n\nexport interface WorkbookInfo {\n sheets: { name: string; state: 'visible' | 'hidden' | 'veryHidden' }[]; // in tab order\n definedNames: DefinedName[]; // includes Excel's own, such as _xlnm.Print_Area\n properties: WorkbookProperties;\n}\n\n// Text of the first <tag> element in xml, unescaped\nconst elementText = (xml: string, tag: string) => {\n for (const el of xmlElements(xml, tag)) return unescapeXml(el.body);\n return undefined;\n};\n\nfunction createByteLimitStream(maxBytes: number): TransformStream<Uint8Array, Uint8Array> {\n let bytesRead = 0;\n return new TransformStream({\n transform(chunk, controller) {\n bytesRead += chunk.length;\n if (bytesRead > maxBytes) {\n controller.error(new Error(`Security Error: Stream exceeded maximum uncompressed size of ${maxBytes} bytes.`));\n } else {\n controller.enqueue(chunk);\n }\n }\n });\n}\n\n// Shared string table (index -> text) of a workbook's sharedStrings part\nexport async function readSharedStrings(stream: ReadableStream<Uint8Array>): Promise<Map<number, string>> {\n const map = new Map<number, string>();\n await SheetReader.parseSharedStrings(stream.pipeThrough(createXmlBatchParser()), map);\n return map;\n}\n\nexport class SheetReader {\n // Sheet names and visibility, defined names and document properties, without reading any sheet\n async readWorkbook(reader: RandomAccessReader, options?: Pick<ParseOptions, 'maxUncompressedBytes'>): Promise<WorkbookInfo> {\n const xls = await openCompound(reader, options?.maxUncompressedBytes);\n if (xls) return { sheets: xls.sheets.map(({ name, state }) => ({ name, state })), definedNames: xls.definedNames, properties: xls.properties };\n const zip = new ZipRandomAccessParser(reader);\n await zip.parseCentralDirectory();\n const max = options?.maxUncompressedBytes ?? DEFAULT_MAX_PART_BYTES;\n const readText = async (name: string) => zip.has(name)\n ? this.readStreamToString(max !== Infinity ? (await zip.extractStream(name)).pipeThrough(createByteLimitStream(max)) : await zip.extractStream(name))\n : '';\n if (await isOds(zip, readText)) {\n const content = async () => { const st = await zip.extractStream('content.xml'); return max !== Infinity ? st.pipeThrough(createByteLimitStream(max)) : st; };\n return readOdsWorkbook(content, readText);\n }\n const parts = await resolveWorkbookParts(readText);\n\n const sheets: WorkbookInfo['sheets'] = [];\n for (const [tag] of parts.workbookXml.matchAll(/<(?:\\w+:)?sheet\\b[^>]*>/g)) {\n const name = attr(tag, 'name');\n const state = attr(tag, 'state');\n if (name !== null) sheets.push({ name, state: state === 'hidden' || state === 'veryHidden' ? state : 'visible' });\n }\n const definedNames: DefinedName[] = [];\n for (const { attrs: open, body: text } of xmlElements(parts.workbookXml, 'definedName')) {\n const local = attr(open, 'localSheetId');\n const comment = attr(open, 'comment');\n // attr() has already unescaped attribute values; only element text is still escaped\n const name: DefinedName = { name: attr(open, 'name') ?? '', ref: unescapeXml(text) };\n if (local !== null && sheets[+local]) name.sheet = sheets[+local].name;\n if (comment !== null) name.comment = comment;\n if (/^(?:1|true)$/.test(attr(open, 'hidden') ?? '')) name.hidden = true;\n definedNames.push(name);\n }\n\n const rootRels = await partRelationships(readText, '');\n const core = await readText(rootRels.find(r => r.type.endsWith('/core-properties'))?.path ?? 'docProps/core.xml');\n const app = await readText(rootRels.find(r => r.type.endsWith('/extended-properties'))?.path ?? 'docProps/app.xml');\n const properties: WorkbookProperties = {};\n for (const [key, tag] of [['title', 'dc:title'], ['subject', 'dc:subject'], ['creator', 'dc:creator'], ['keywords', 'cp:keywords'],\n ['description', 'dc:description'], ['category', 'cp:category']] as const) {\n const v = elementText(core, tag);\n if (v !== undefined) properties[key] = v;\n }\n const created = elementText(core, 'dcterms:created');\n if (created && !isNaN(Date.parse(created))) properties.created = new Date(created);\n for (const [key, tag] of [['company', 'Company'], ['manager', 'Manager']] as const) {\n const v = elementText(app, tag);\n if (v !== undefined) properties[key] = v;\n }\n return { sheets, definedNames, properties };\n }\n\n async parse(reader: RandomAccessReader, options?: ParseOptions): Promise<ParseResult> {\n const xls = await openCompound(reader, options?.maxUncompressedBytes);\n if (xls) return xls.parseSheet(options?.sheetName, !!options?.formatted);\n const zip = new ZipRandomAccessParser(reader);\n await zip.parseCentralDirectory();\n\n const sharedStrings = new Map<number, string>();\n const styles = new Map<number, number>();\n const limit = (st: ReadableStream<Uint8Array>, max = options?.maxUncompressedBytes ?? DEFAULT_MAX_PART_BYTES) =>\n max !== Infinity ? st.pipeThrough(createByteLimitStream(max)) : st;\n const readText = async (name: string) =>\n zip.has(name) ? this.readStreamToString(limit(await zip.extractStream(name))) : '';\n if (await isOds(zip, readText)) {\n const content = async () => limit(await zip.extractStream('content.xml'), options?.maxUncompressedBytes ?? Infinity);\n return parseOds(content, readText, { sheetName: options?.sheetName, formulas: options?.formulas, formatted: options?.formatted, maxPaddingCells: options?.maxUncompressedBytes });\n }\n\n // 1. Locate workbook, sheets, shared strings and styles via package relationships\n const parts = await resolveWorkbookParts(readText);\n let worksheetZipPath: string | undefined;\n if (options?.sheetName) {\n worksheetZipPath = parts.sheets.get(options.sheetName);\n if (!worksheetZipPath) throw new Error(`Sheet with name \"${options.sheetName}\" not found in workbook.`);\n } else {\n // The first tab with cells: a chart sheet first in the tab order is skipped, as the .xls reader does\n worksheetZipPath = [...parts.sheets.values()].find(path => !parts.chartsheets.has(path))\n ?? zip.getFiles().find(f => /^xl\\/worksheets\\/[^/]+\\.xml$/.test(f));\n if (!worksheetZipPath) throw new Error(\"No worksheets found in ZIP.\");\n }\n const is1904 = /<(?:\\w+:)?workbookPr\\b[^>]*\\bdate1904=\"(?:1|true)\"/.test(parts.workbookXml);\n\n // 2. Parse Styles (if exists). Colours can refer to the theme, only read when they are reported.\n const theme = (options?.styles || options?.richText) && parts.theme ? parseThemeColors(await readText(parts.theme)) : [];\n const stylesPath = parts.styles ?? 'xl/styles.xml';\n let cellStyles: (CellStyle | undefined)[] = [];\n let color = colorResolver(theme);\n let formats: (string | undefined)[] = [];\n if (zip.has(stylesPath)) {\n const xmlStream = limit(await zip.extractStream(stylesPath)).pipeThrough(createXmlBatchParser());\n ({ cellStyles, color, formats } = await this.parseStyles(xmlStream, styles, theme));\n }\n\n // 3. Parse Shared Strings (if exists)\n const sstPath = parts.sharedStrings ?? 'xl/sharedStrings.xml';\n const sharedRichText = options?.richText ? new Map<number, RichTextRun[]>() : undefined;\n if (zip.has(sstPath)) {\n const xmlStream = limit(await zip.extractStream(sstPath)).pipeThrough(createXmlBatchParser());\n await SheetReader.parseSharedStrings(xmlStream, sharedStrings, sharedRichText && { map: sharedRichText, color });\n }\n\n // 4. Parse Worksheet\n if (!zip.has(worksheetZipPath)) {\n throw new Error(`Worksheet ${worksheetZipPath} not found in ZIP.`);\n }\n // Rows are yielded as they stream, so an unlimited worksheet costs time, not memory\n const xmlStream = limit(await zip.extractStream(worksheetZipPath), options?.maxUncompressedBytes ?? Infinity)\n .pipeThrough(createXmlBatchParser());\n return parseWorksheet(xmlStream, sharedStrings, styles, is1904, {\n formulas: options?.formulas,\n errors: options?.errors,\n cellStyles: options?.styles ? cellStyles : undefined,\n numFmts: options?.formatted ? formats : undefined,\n richText: options?.richText ? color : undefined,\n sharedRichText,\n hyperlinkTargets: await hyperlinkTargets(readText, worksheetZipPath),\n maxPaddingCells: options?.maxUncompressedBytes,\n comments: async () => {\n const rel = (await partRelationships(readText, worksheetZipPath)).find(r => !r.external && r.type.endsWith('/comments'));\n return rel ? parseComments(await readText(rel.path)) : [];\n },\n images: () => readSheetImages(readText, async path => zip.has(path)\n ? new Uint8Array(await new Response(limit(await zip.extractStream(path))).arrayBuffer()) : undefined, worksheetZipPath),\n });\n }\n\n static async parseSharedStrings(\n xmlTokenStream: ReadableStream<XmlToken | XmlToken[]>,\n map: Map<number, string>,\n rich?: { map: Map<number, RichTextRun[]>; color: ColorResolver }\n ) {\n const reader = xmlTokenStream.getReader();\n const runs = rich && new RichTextCollector(rich.color);\n let index = 0;\n let inText = false;\n let inPhonetic = false;\n let currentString = '';\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n for (const token of (Array.isArray(value) ? value : [value]) as XmlToken[]) {\n runs?.token(token);\n if (token.type === 'startElement' && token.name === 'si') {\n currentString = '';\n runs?.reset();\n } else if (token.type === 'startElement' && token.name === 'rPh') {\n inPhonetic = true; // phonetic hints are not part of the cell text\n } else if (token.type === 'endElement' && token.name === 'rPh') {\n inPhonetic = false;\n } else if (token.type === 'startElement' && token.name === 't' && !inPhonetic) {\n inText = true;\n } else if (token.type === 'text' && inText) {\n currentString += token.value;\n } else if (token.type === 'endElement' && token.name === 't') {\n inText = false;\n } else if (token.type === 'endElement' && token.name === 'si') {\n if (runs?.runs.length) rich!.map.set(index, runs.runs);\n map.set(index++, decodeXString(currentString));\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n\n // Fills `dateStyles` (style index -> 14 when it formats dates), returns each style as a CellStyle and the\n // colour resolver for this workbook (theme + its indexed palette).\n private async parseStyles(xmlTokenStream: ReadableStream<XmlToken | XmlToken[]>, dateStyles: Map<number, number>, theme: string[]) {\n const reader = xmlTokenStream.getReader();\n const numFmts = new Map<number, string>(BUILTIN_NUM_FMTS);\n const customDateFmts = new Set<number>();\n const fonts: (CellFont | undefined)[] = [];\n const fills: (CellFill | GradientFill | undefined)[] = [];\n const borders: (CellBorder | undefined)[] = [];\n const cellStyles: (CellStyle | undefined)[] = [];\n const formats: (string | undefined)[] = []; // number format code by style index, for formatted text\n\n // Only direct children of these lists count: dxfs and cellStyleXfs reuse the same element names\n let section = '';\n let font: CellFont | undefined;\n let fill: CellFill | GradientFill | undefined;\n let pattern = '';\n let border: CellBorder | undefined;\n let side: BorderSide | undefined;\n let xf: CellStyle | undefined;\n // A custom palette (<colors>) comes after the styles that use it, so colours are resolved at the end\n const palette: string[] = [];\n const colors: [Record<string, string>, (argb: string) => void][] = [];\n const later = (a: Record<string, string>, set: (argb: string) => void) => colors.push([a, set]);\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n for (const token of (Array.isArray(value) ? value : [value]) as XmlToken[]) {\n if (token.type === 'startElement') {\n const a = token.attributes;\n if (font) { const f = font; if (applyFontElement(f, token.name, a, c => later(c, argb => { f.color = argb; }))) continue; }\n switch (token.name) {\n case 'numFmts': case 'fonts': case 'fills': case 'borders': case 'cellXfs':\n section = token.name;\n break;\n case 'numFmt':\n if (section === 'numFmts') {\n const id = parseInt(a['numFmtId'] || '0', 10);\n numFmts.set(id, a['formatCode'] || '');\n if (isDateFormatCode(a['formatCode'] || '')) customDateFmts.add(id);\n }\n break;\n case 'font':\n if (section === 'fonts') font = {};\n break;\n case 'rgbColor':\n if (section === 'indexedColors') palette.push(a['rgb'] ?? '');\n break;\n case 'indexedColors':\n section = token.name;\n break;\n case 'color':\n if (side) { const target = side; later(a, c => { target.color = c; }); }\n else if (font) { const target = font; later(a, c => { target.color = c; }); }\n else if (fill?.type === 'gradient' && fill.stops.length) { const stop = fill.stops[fill.stops.length - 1]; later(a, c => { stop.color = c; }); }\n break;\n case 'fill':\n if (section === 'fills') fills.push(fill = undefined);\n break;\n case 'patternFill':\n pattern = a['patternType'] || '';\n break;\n case 'fgColor':\n if (section === 'fills' && pattern === 'solid') {\n const solid: CellFill = fill = { type: 'solid', fgColor: '' };\n later(a, c => { solid.fgColor = c; });\n }\n break;\n case 'gradientFill':\n if (section === 'fills') fill = { type: 'gradient', degree: Number(a['degree'] || 0), stops: [] };\n break;\n case 'stop':\n if (fill?.type === 'gradient') fill.stops.push({ position: Number(a['position'] || 0), color: '' });\n break;\n case 'border':\n if (section === 'borders') border = {};\n break;\n case 'left': case 'right': case 'top': case 'bottom':\n if (border && a['style'] && a['style'] !== 'none') {\n side = border[token.name as 'left'] = { style: a['style'] as BorderSide['style'] };\n }\n break;\n case 'xf':\n if (section === 'cellXfs') {\n const index = cellStyles.length;\n const numFmtId = parseInt(a['numFmtId'] || '0', 10);\n const isDate = isBuiltinDateFormat(numFmtId) || customDateFmts.has(numFmtId);\n dateStyles.set(index, isDate ? 14 : 0);\n formats.push(DISPLAY_NUM_FMTS.get(numFmtId) ?? numFmts.get(numFmtId));\n\n xf = {};\n const fontId = parseInt(a['fontId'] || '0', 10);\n const fillId = parseInt(a['fillId'] || '0', 10);\n const borderId = parseInt(a['borderId'] || '0', 10);\n // Font 0 is the workbook default; fills 0 and 1 are the mandatory none/gray125\n if (fontId > 0 && fonts[fontId]) xf.font = fonts[fontId];\n if (fillId > 1 && fills[fillId]) xf.fill = fills[fillId];\n if (borders[borderId]) xf.border = borders[borderId];\n if (numFmtId > 0 && numFmts.has(numFmtId)) xf.numFmt = numFmts.get(numFmtId);\n cellStyles.push(xf);\n }\n break;\n case 'alignment':\n if (xf) {\n const alignment: CellAlignment = {};\n if (a['horizontal']) alignment.horizontal = a['horizontal'] as CellAlignment['horizontal'];\n if (a['vertical']) alignment.vertical = a['vertical'] as CellAlignment['vertical'];\n if (a['wrapText'] === '1' || a['wrapText'] === 'true') alignment.wrapText = true;\n if (Object.keys(alignment).length) xf.alignment = alignment;\n }\n break;\n }\n } else if (token.type === 'endElement') {\n switch (token.name) {\n case 'numFmts': case 'fonts': case 'fills': case 'borders': case 'cellXfs': case 'indexedColors':\n section = '';\n break;\n case 'font':\n if (font) fonts.push(font);\n font = undefined;\n break;\n case 'fill':\n if (section === 'fills') fills[fills.length - 1] = fill;\n fill = undefined;\n pattern = '';\n break;\n case 'left': case 'right': case 'top': case 'bottom':\n side = undefined;\n break;\n case 'border':\n if (border) borders.push(Object.keys(border).length ? border : undefined);\n border = undefined;\n break;\n case 'xf':\n xf = undefined;\n break;\n }\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n const color = colorResolver(theme, palette.length ? palette : undefined);\n for (const [a, set] of colors) {\n const argb = color(a);\n if (argb) set(argb);\n }\n // Colours that did not resolve (auto, unknown theme slot) are dropped; so is a solid fill without one\n fills.forEach((f, i) => { if (f?.type === 'solid' && !f.fgColor) fills[i] = undefined; });\n for (const f of fills) if (f?.type === 'gradient') f.stops = f.stops.filter(st => st.color);\n const kept = new Set(fills);\n for (const st of cellStyles) if (st?.fill && !kept.has(st.fill)) delete st.fill;\n // Default-looking styles report as no style\n return { cellStyles: cellStyles.map(st => (st && Object.keys(st).length ? st : undefined)), color, formats };\n }\n\n private async readStreamToString(stream: ReadableStream<Uint8Array>): Promise<string> {\n const textDecoder = new TextDecoderStream();\n const reader = stream.pipeThrough(textDecoder as any).getReader();\n let result = '';\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n result += value;\n }\n return result;\n }\n}\n\n","import { CellValue } from './types';\n\nexport interface CsvOptions {\n delimiter?: string; // default \",\"\n convert?: boolean; // default true: unquoted numbers and TRUE/FALSE become numbers and booleans. Empty unquoted fields are null either way\n}\n\n// Numbers as Excel would read them; \"007\" and \"1e5x\" stay text\nconst NUMBER = /^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$/;\n\nfunction convertField(s: string): CellValue {\n if (s === '') return null;\n // \"1e400\" overflows a double: keep the text rather than lose it to Infinity\n if (NUMBER.test(s) && isFinite(Number(s))) return Number(s);\n const upper = s.toUpperCase();\n return upper === 'TRUE' ? true : upper === 'FALSE' ? false : s;\n}\n\n// Streams the rows of a CSV file (RFC 4180: quoted fields may hold delimiters, line breaks and \"\"),\n// one row at a time. Feed it straight to SheetWriter.addSheet to convert CSV to xlsx.\nexport async function* parseCsv(\n input: ReadableStream<Uint8Array> | string,\n options: CsvOptions = {},\n): AsyncGenerator<CellValue[]> {\n const delimiter = options.delimiter ?? ',';\n if (delimiter.length !== 1 || delimiter === '\"' || delimiter === '\\n' || delimiter === '\\r') {\n throw new Error(`Invalid CSV delimiter ${JSON.stringify(delimiter)}.`);\n }\n const convert = options.convert !== false;\n\n let row: CellValue[] = [];\n let field = '';\n let quoted = false; // the current field started with a quote\n let inQuotes = false;\n let skipLF = false; // the previous character was a \\r ending a row\n let first = true;\n const rows: CellValue[][] = [];\n\n const endField = () => {\n // An empty unquoted field is null in both modes; a quoted \"\" stays an empty string\n row.push(quoted ? field : !convert ? (field === '' ? null : field) : convertField(field));\n field = '';\n quoted = false;\n };\n const endRow = () => {\n // A blank line is an empty row\n if (row.length || field !== '' || quoted) endField();\n rows.push(row);\n row = [];\n };\n\n const feed = (text: string) => {\n if (first && text) {\n if (text.charCodeAt(0) === 0xfeff) text = text.slice(1); // byte order mark\n first = false;\n }\n for (let i = 0; i < text.length; i++) {\n const c = text[i];\n if (skipLF) {\n skipLF = false;\n if (c === '\\n') continue;\n }\n if (inQuotes) {\n if (c === '\"') inQuotes = false;\n else field += c;\n } else if (c === '\"') {\n // A quote right after a quoted field's closing quote is an escaped (\"\") quote\n if (quoted) field += '\"';\n else if (field === '') quoted = true;\n else { field += c; continue; } // a stray quote inside an unquoted field is kept\n inQuotes = true;\n } else if (c === delimiter) endField();\n else if (c === '\\n' || c === '\\r') {\n endRow();\n skipLF = c === '\\r';\n } else field += c;\n }\n };\n\n if (typeof input === 'string') {\n feed(input);\n yield* rows.splice(0);\n } else {\n const reader = input.pipeThrough(new TextDecoderStream() as any as TransformStream<Uint8Array, string>).getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n feed(value);\n yield* rows.splice(0);\n }\n } finally {\n // Stops reading when the caller ends the loop early\n await reader.cancel().catch(() => {});\n }\n }\n if (inQuotes) throw new Error('CSV ends inside a quoted field.');\n if (row.length || field !== '' || quoted) endRow();\n yield* rows.splice(0);\n}\n","// Writer for OpenDocument spreadsheets (.ods). Rows stream into content.xml one at a time.\n// Writes values, formulas, dates, merged cells, column widths, frozen panes, hidden sheets and\n// document properties; styles and the other .xlsx sheet options are left out.\n\nimport { ZipStreamWriter, crc32 } from './zip-stream-writer';\nimport { ODS_MIMETYPE } from './ods';\nimport { colIndex, colLetter, dateToSerial, validateSheetName, escapeXml as escapeText } from './utils';\nimport { FormulaEngine, FormulaError, type FormulaResult } from './formula-engine';\nimport type { CellValue, Row, StyledCell, WorkbookProperties } from './types';\n\nexport interface OdsSheetOptions {\n columnWidths?: number[]; // in characters, as in SheetOptions\n mergeCells?: string[]; // e.g. [\"A1:C1\"]\n freezePanes?: { row?: number; col?: number };\n state?: 'visible' | 'hidden';\n}\n\nexport interface OdsWriterOptions {\n properties?: WorkbookProperties;\n}\n\nconst escapeXml = (val: unknown) => escapeText(String(val));\n\nconst isStyledCell = (v: CellValue | StyledCell): v is StyledCell =>\n v !== null && typeof v === 'object' && !(v instanceof Date);\n\n// Excel syntax to OpenFormula: \"SUM(A1:B2,Sheet2!C3)\" -> \"of:=SUM([.A1:.B2];[$Sheet2.C3])\"\n// Cell references and ranges, then whole columns (C:C) and whole rows (1:3)\nconst REF = /((?:'(?:[^']|'')+'|[A-Za-z_][\\w.]*)!)?(\\$?[A-Za-z]{1,3}\\$?\\d+(?::\\$?[A-Za-z]{1,3}\\$?\\d+)?|\\$?[A-Za-z]{1,3}:\\$?[A-Za-z]{1,3}|\\$?\\d+:\\$?\\d+)(?![\\w(!:])/y;\nexport function toOpenFormula(formula: string): string {\n const f = formula.replace(/^=/, '');\n let out = '';\n for (let i = 0; i < f.length;) {\n const c = f[i];\n if (c === '\"') { // string literal, copied as is\n let j = i + 1;\n while (j < f.length && !(f[j] === '\"' && f[j + 1] !== '\"')) j += f[j] === '\"' ? 2 : 1;\n out += f.slice(i, j + 1);\n i = j + 1;\n continue;\n }\n if (c === ',') { out += ';'; i++; continue; }\n // A reference starts where an identifier could not be continuing\n if (!/[\\w.$]/.test(f[i - 1] ?? '')) {\n REF.lastIndex = i;\n const m = REF.exec(f);\n if (m) {\n const sheet = m[1] ? `$${m[1].slice(0, -1)}` : '';\n out += `[${m[2].split(':').map(part => `${sheet}.${part}`).join(':')}]`;\n i = REF.lastIndex;\n continue;\n }\n }\n out += c;\n i++;\n }\n return `of:=${out}`;\n}\n\n// Paragraphs per line, and runs of spaces as <text:s/>, since ODF collapses whitespace\nfunction textXml(s: string): string {\n return s.split('\\n').map(line => `<text:p>${escapeXml(line)\n .replace(/\\t/g, '<text:tab/>')\n .replace(/^ | {2,}/g, m => m === ' ' ? '<text:s/>' : ` <text:s text:c=\"${m.length - 1}\"/>`)}</text:p>`).join('');\n}\n\n// UTC, like SheetWriter; milliseconds only when there are some\nconst dateValue = (d: Date) => d.toISOString().slice(0, d.getUTCMilliseconds() ? 23 : 19);\nconst hasTime = (d: Date) => d.getTime() % 86400000 !== 0;\n\n// `evaluate` gives the formula's result, or null when it isn't known (streamed rows, errors)\nfunction cellXml(cell: CellValue | StyledCell | undefined, span: string, covered: boolean, evaluate: () => FormulaResult): string {\n if (covered) return '<table:covered-table-cell/>';\n let value = isStyledCell(cell!) ? cell.value : cell;\n const formula = isStyledCell(cell!) && cell.formula ? ` table:formula=\"${escapeXml(toOpenFormula(cell.formula))}\"` : '';\n // A formula without a value gets its result stored, as SheetWriter does, for readers that don't recalculate\n if (formula && value == null) value = evaluate();\n if (value === null || value === undefined || (typeof value === 'number' && !isFinite(value))) {\n return formula || span ? `<table:table-cell${formula}${span}/>` : '<table:table-cell/>';\n }\n if (typeof value === 'number') {\n return `<table:table-cell${formula} office:value-type=\"float\" office:value=\"${value}\"${span}><text:p>${value}</text:p></table:table-cell>`;\n }\n if (typeof value === 'boolean') {\n return `<table:table-cell table:style-name=\"ceBool\"${formula} office:value-type=\"boolean\" office:boolean-value=\"${value}\"${span}><text:p>${value ? 'TRUE' : 'FALSE'}</text:p></table:table-cell>`;\n }\n if (value instanceof Date) {\n const v = dateValue(value);\n const shown = hasTime(value) ? v.replace('T', ' ') : v.slice(0, 10);\n return `<table:table-cell table:style-name=\"${hasTime(value) ? 'ceDateTime' : 'ceDate'}\"${formula} office:value-type=\"date\" office:date-value=\"${v}\"${span}><text:p>${shown}</text:p></table:table-cell>`;\n }\n return `<table:table-cell${formula} office:value-type=\"string\"${span}>${textXml(String(value))}</table:table-cell>`;\n}\n\nconst NS = 'xmlns:office=\"urn:oasis:names:tc:opendocument:xmlns:office:1.0\" xmlns:style=\"urn:oasis:names:tc:opendocument:xmlns:style:1.0\" '\n + 'xmlns:text=\"urn:oasis:names:tc:opendocument:xmlns:text:1.0\" xmlns:table=\"urn:oasis:names:tc:opendocument:xmlns:table:1.0\" '\n + 'xmlns:fo=\"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0\" xmlns:number=\"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0\" '\n + 'xmlns:of=\"urn:oasis:names:tc:opendocument:xmlns:of:1.2\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" '\n + 'xmlns:meta=\"urn:oasis:names:tc:opendocument:xmlns:meta:1.0\" xmlns:config=\"urn:oasis:names:tc:opendocument:xmlns:config:1.0\" '\n // LibreOffice resolves the ooo: prefix in \"ooo:view-settings\"; without it the frozen panes are ignored\n + 'xmlns:ooo=\"http://openoffice.org/2004/office\" office:version=\"1.3\"';\n\ninterface Sheet { name: string; rows: Row[] | AsyncIterable<Row>; options: OdsSheetOptions }\n\nexport class OdsWriter {\n private sheets: Sheet[] = [];\n\n constructor(private readonly writerOptions: OdsWriterOptions = {}) {}\n\n addSheet(name: string, rows: Row[] | AsyncIterable<Row>, options: OdsSheetOptions = {}): this {\n validateSheetName(name, this.sheets.map(s => s.name));\n for (const range of options.mergeCells ?? []) parseRange(range);\n this.sheets.push({ name, rows, options });\n return this;\n }\n\n write(): ReadableStream<Uint8Array> {\n if (this.sheets.length === 0) this.addSheet('Sheet1', []);\n if (this.sheets.every(s => s.options.state === 'hidden')) throw new Error('A workbook needs at least one visible sheet');\n const zip = new ZipStreamWriter();\n const encoder = new TextEncoder();\n const text = (s: string) => new ReadableStream<Uint8Array>({ start(c) { c.enqueue(encoder.encode(s)); c.close(); } });\n\n (async () => {\n try {\n // The mimetype entry comes first and uncompressed, so tools can sniff the type\n const mime = encoder.encode(ODS_MIMETYPE);\n await zip.addCompressedFile('mimetype', new ReadableStream({ start(c) { c.enqueue(mime); c.close(); } }), mime.length, mime.length, crc32(mime), 0);\n await zip.addFile('content.xml', this.contentStream());\n await zip.addFile('styles.xml', text(`<?xml version=\"1.0\" encoding=\"UTF-8\"?><office:document-styles ${NS}><office:styles/></office:document-styles>`));\n await zip.addFile('meta.xml', text(this.metaXml()));\n await zip.addFile('settings.xml', text(this.settingsXml()));\n await zip.addFile('META-INF/manifest.xml', text('<?xml version=\"1.0\" encoding=\"UTF-8\"?>'\n + '<manifest:manifest xmlns:manifest=\"urn:oasis:names:tc:opendocument:xmlns:manifest:1.0\" manifest:version=\"1.3\">'\n + `<manifest:file-entry manifest:full-path=\"/\" manifest:version=\"1.3\" manifest:media-type=\"${ODS_MIMETYPE}\"/>`\n + ['content.xml', 'styles.xml', 'meta.xml', 'settings.xml'].map(p => `<manifest:file-entry manifest:full-path=\"${p}\" manifest:media-type=\"text/xml\"/>`).join('')\n + '</manifest:manifest>'));\n await zip.close();\n } catch (err) {\n zip.error(err);\n }\n })();\n return zip.stream;\n }\n\n private contentStream(): ReadableStream<Uint8Array> {\n const encoder = new TextEncoder();\n const sheets = this.sheets;\n async function* parts(): AsyncGenerator<string> {\n const columnStyles = new Map<number, string>();\n sheets.forEach(s => s.options.columnWidths?.forEach(w => { if (w > 0 && !columnStyles.has(w)) columnStyles.set(w, `co${columnStyles.size + 1}`); }));\n yield `<?xml version=\"1.0\" encoding=\"UTF-8\"?><office:document-content ${NS}><office:automatic-styles>`\n + '<number:date-style style:name=\"NDate\"><number:year number:style=\"long\"/><number:text>-</number:text><number:month number:style=\"long\"/><number:text>-</number:text><number:day number:style=\"long\"/></number:date-style>'\n + '<number:date-style style:name=\"NDateTime\"><number:year number:style=\"long\"/><number:text>-</number:text><number:month number:style=\"long\"/><number:text>-</number:text><number:day number:style=\"long\"/><number:text> </number:text><number:hours number:style=\"long\"/><number:text>:</number:text><number:minutes number:style=\"long\"/><number:text>:</number:text><number:seconds number:style=\"long\"/></number:date-style>'\n + '<number:boolean-style style:name=\"NBool\"><number:boolean/></number:boolean-style>'\n + '<style:style style:name=\"ceBool\" style:family=\"table-cell\" style:data-style-name=\"NBool\"/>'\n + '<style:style style:name=\"ceDate\" style:family=\"table-cell\" style:data-style-name=\"NDate\"/>'\n + '<style:style style:name=\"ceDateTime\" style:family=\"table-cell\" style:data-style-name=\"NDateTime\"/>'\n + '<style:style style:name=\"taVisible\" style:family=\"table\"><style:table-properties table:display=\"true\"/></style:style>'\n + '<style:style style:name=\"taHidden\" style:family=\"table\"><style:table-properties table:display=\"false\"/></style:style>'\n // Excel's width unit is about 7 pixels at 96 dpi, plus 5 pixels of padding\n + [...columnStyles].map(([w, name]) => `<style:style style:name=\"${name}\" style:family=\"table-column\"><style:table-column-properties style:column-width=\"${((w * 7 + 5) / 96).toFixed(4)}in\"/></style:style>`).join('')\n + '</office:automatic-styles><office:body><office:spreadsheet>';\n\n for (const sheet of sheets) {\n yield `<table:table table:name=\"${escapeXml(sheet.name)}\" table:style-name=\"${sheet.options.state === 'hidden' ? 'taHidden' : 'taVisible'}\">`\n + (sheet.options.columnWidths ?? []).map(w => w > 0 ? `<table:table-column table:style-name=\"${columnStyles.get(w)}\"/>` : '<table:table-column/>').join('');\n\n // Merges: spans go on the top-left cell, and the cells they cover are written as covered\n const merges = (sheet.options.mergeCells ?? []).map(parseRange);\n const lastMergeRow = Math.max(-1, ...merges.map(m => m.r2));\n const mergeAt = (r: number, c: number) => merges.find(m => m.r1 === r && m.c1 === c);\n // Formulas resolve against the sheet they live in; streamed rows can't be looked back at\n const engine = new FormulaEngine();\n if (Array.isArray(sheet.rows)) {\n engine.loadData(sheet.rows.map(row => row.map(cell => {\n if (isStyledCell(cell) && cell.formula) return { formula: cell.formula };\n const v = isStyledCell(cell) ? cell.value : cell;\n return v instanceof Date ? dateToSerial(v) : v ?? null;\n })));\n }\n const evaluate = (ref: string) => {\n if (!Array.isArray(sheet.rows)) return null;\n const v = engine.cellValue(ref);\n return v instanceof FormulaError ? v.code : v;\n };\n const covered = (r: number, c: number) => merges.some(m => r >= m.r1 && r <= m.r2 && c >= m.c1 && c <= m.c2 && (r !== m.r1 || c !== m.c1));\n\n let r = 0, batch = '';\n const writeRow = (row: Row) => {\n const width = Math.max(row.length, ...merges.filter(m => r >= m.r1 && r <= m.r2).map(m => m.c2 + 1));\n let xml = '<table:table-row>';\n for (let c = 0; c < width; c++) {\n const m = mergeAt(r, c);\n const span = m ? ` table:number-columns-spanned=\"${m.c2 - m.c1 + 1}\" table:number-rows-spanned=\"${m.r2 - m.r1 + 1}\"` : '';\n xml += cellXml(row[c], span, covered(r, c), () => evaluate(colLetter(c) + (r + 1)));\n }\n r++;\n return xml + (width ? '' : '<table:table-cell/>') + '</table:table-row>';\n };\n for await (const row of sheet.rows) {\n batch += writeRow(row);\n if (batch.length > 1 << 16) { yield batch; batch = ''; }\n }\n while (r <= lastMergeRow) batch += writeRow([]); // merges below the last row still need their cells\n yield batch + '</table:table>';\n }\n yield '</office:spreadsheet></office:body></office:document-content>';\n }\n const it = parts();\n return new ReadableStream<Uint8Array>({\n async pull(controller) {\n const { done, value } = await it.next();\n if (done) controller.close(); else controller.enqueue(encoder.encode(value));\n },\n async cancel() { await it.return(undefined); },\n });\n }\n\n private metaXml(): string {\n const p = this.writerOptions.properties ?? {};\n const el = (tag: string, v?: string) => v ? `<${tag}>${escapeXml(v)}</${tag}>` : '';\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?><office:document-meta ${NS}><office:meta>`\n + '<meta:generator>XlsxFlow</meta:generator>'\n + el('dc:title', p.title) + el('dc:subject', p.subject) + el('meta:initial-creator', p.creator) + el('dc:creator', p.creator)\n + el('meta:keyword', p.keywords) + el('dc:description', p.description)\n + el('meta:creation-date', (p.created ?? new Date()).toISOString().slice(0, 19))\n + '</office:meta></office:document-meta>';\n }\n\n // Frozen panes are view settings: split mode 2 freezes, the positions say where\n private settingsXml(): string {\n const item = (name: string, type: string, value: string | number) => `<config:config-item config:name=\"${name}\" config:type=\"${type}\">${value}</config:config-item>`;\n const tables = this.sheets.filter(s => s.options.freezePanes?.row || s.options.freezePanes?.col).map(s => {\n const rows = s.options.freezePanes!.row ?? 0, cols = s.options.freezePanes!.col ?? 0;\n return `<config:config-item-map-entry config:name=\"${escapeXml(s.name)}\">`\n + item('HorizontalSplitMode', 'short', cols ? 2 : 0) + item('VerticalSplitMode', 'short', rows ? 2 : 0)\n + item('HorizontalSplitPosition', 'int', cols) + item('VerticalSplitPosition', 'int', rows)\n + item('ActiveSplitRange', 'short', 2) + item('PositionLeft', 'int', 0) + item('PositionRight', 'int', cols)\n + item('PositionTop', 'int', 0) + item('PositionBottom', 'int', rows)\n + '</config:config-item-map-entry>';\n }).join('');\n const first = this.sheets.find(s => s.options.state !== 'hidden')!;\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?><office:document-settings ${NS}><office:settings>`\n + '<config:config-item-set config:name=\"ooo:view-settings\"><config:config-item-map-indexed config:name=\"Views\"><config:config-item-map-entry>'\n + item('ViewId', 'string', 'view1') + item('ActiveTable', 'string', escapeXml(first.name))\n + `<config:config-item-map-named config:name=\"Tables\">${tables}</config:config-item-map-named>`\n + '</config:config-item-map-entry></config:config-item-map-indexed></config:config-item-set></office:settings></office:document-settings>';\n }\n}\n\nfunction parseRange(range: string) {\n const m = /^\\$?([A-Za-z]{1,3})\\$?(\\d+):\\$?([A-Za-z]{1,3})\\$?(\\d+)$/.exec(range);\n if (!m) throw new Error(`Invalid merge range \"${range}\"`);\n const [c1, r1, c2, r2] = [colIndex(m[1]), +m[2] - 1, colIndex(m[3]), +m[4] - 1];\n return { r1: Math.min(r1, r2), r2: Math.max(r1, r2), c1: Math.min(c1, c2), c2: Math.max(c1, c2) };\n}\n","export { SheetReader, type ParseOptions, type WorkbookInfo, sheetToJson, streamToCsv, createBlobReader, createFileReader, type RandomAccessReader } from './core/index';\nexport { SheetEditor, type CellEdit } from './core/editor';\nexport { parseCsv, type CsvOptions } from './core/csv';\nexport { SheetWriter, legacyPasswordHash, type WriterOptions } from './core/writer';\nexport { OdsWriter, type OdsSheetOptions, type OdsWriterOptions } from './core/ods-writer';\nexport { createXmlStreamParser } from './core/xml-stream';\nexport { parseWorksheet, type RowData, type SheetMetadata, type SheetComment } from './core/worksheet-parser';\nexport type { CellValue, StyledCell, Row, CellStyle, CellFont, CellFill, GradientFill, CellBorder, CellAlignment, BorderSide, RichTextRun, SheetOptions, SheetImage, CellComment, HighlightStyle, ComparisonOperator, RowOptions, ColumnOptions, SheetProtection, PageSetup, TableOptions, SheetView, WorkbookProperties, DefinedName, ConditionalFormatRule, ConditionalFormat, DataValidation } from './core/types';\nexport { StyleEngine } from './core/style-engine';\nexport { FormulaEngine } from './core/formula-engine';\nexport { ConditionalFormatter } from './core/conditional-formatter';\n\n// Low-level building blocks (used by @xlsxflow/pro)\nexport { readSharedStrings } from './core/index';\nexport { ZipRandomAccessParser } from './core/zip-random-access';\nexport { ZipStreamWriter, crc32 } from './core/zip-stream-writer';\nexport { CfbReader, isCfb, type CfbEntry } from './core/cfb';\nexport { StylePatcher } from './core/style-patcher';\nexport {\n resolveWorkbookParts, partRelationships, recalcOnOpen, mapFormulaRefs, shiftFormula, dateToSerial,\n colIndex, colLetter, encodeXString, decodeXString, checkCellText,\n type WorkbookParts, type Relationship, type RefMapper, type RefRole,\n} from './core/utils';\nexport { anchorXml, drawingPartXml, DRAWING_NS, type Placement } from './core/image';\n\nexport const XlsxFlow = {\n async readFile(filePath: string, options?: import('./core/index').ParseOptions) {\n const { createFileReader } = await import('./core/random-access');\n const { SheetReader } = await import('./core/index');\n const reader = new SheetReader();\n const fileReader = await createFileReader(filePath);\n // Comments, images and .ods content are read after parse() returns, when the handle is closed:\n // those reads open a short-lived handle of their own\n let closed = false;\n const lateRead = async (offset: number, length: number) => {\n const late = await createFileReader(filePath);\n try { return await late.read(offset, length); } finally { await late.close(); }\n };\n try {\n return await reader.parse({\n size: fileReader.size,\n read: (offset, length) => closed ? lateRead(offset, length) : fileReader.read(offset, length),\n stream: (offset, length) => fileReader.stream(offset, length),\n close: async () => {},\n }, options);\n } finally {\n closed = true;\n await fileReader.close();\n }\n }\n};\n"],"names":["corrupt","unescapeXml","MAX_COLUMNS","MAX_ROWS","escapeXml","escapeText","parseRange","isStyledCell"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/core/zip-stream-writer.ts","../src/core/cfb.ts","../src/core/zip-random-access.ts","../src/core/xml-stream.ts","../src/core/utils.ts","../src/core/style-reader.ts","../src/core/number-format.ts","../src/core/worksheet-parser.ts","../src/core/image.ts","../src/core/xls.ts","../src/core/ods.ts","../src/core/style-engine.ts","../src/core/conditional-formatter.ts","../src/core/formula-engine.ts","../src/core/writer.ts","../src/core/random-access.ts","../src/core/style-patcher.ts","../src/core/sheet-shift.ts","../src/core/editor.ts","../src/core/index.ts","../src/core/csv.ts","../src/core/ods-writer.ts","../src/index.ts"],"sourcesContent":["const CRC_TABLE = (() => {\n const t = new Uint32Array(256);\n for (let n = 0; n < 256; n++) {\n let c = n;\n for (let k = 0; k < 8; k++) c = (c & 1) ? (c >>> 1) ^ 0xedb88320 : c >>> 1;\n t[n] = c >>> 0;\n }\n return t;\n})();\n\nexport function crc32(bytes: Uint8Array): number {\n return (crc32Update(0xffffffff, bytes) ^ 0xffffffff) >>> 0;\n}\n\n// Running CRC-32 over chunks: start at 0xffffffff, finish with (crc ^ 0xffffffff) >>> 0\nexport function crc32Update(crc: number, bytes: Uint8Array): number {\n for (let i = 0; i < bytes.length; i++) crc = CRC_TABLE[(crc ^ bytes[i]) & 0xff] ^ (crc >>> 8);\n return crc;\n}\n\nconst MAX_U32 = 0xffffffff;\n\n// General-purpose flag bit 11: the entry name is UTF-8 (set only when it isn't plain ASCII)\nconst utf8Flag = (name: Uint8Array) => name.some(b => b > 0x7f) ? 0x0800 : 0;\n\n// No ZIP64 support: fail loudly instead of writing a corrupt archive.\nfunction assertNoZip64(value: number, what: string) {\n if (value > MAX_U32) throw new Error(`ZIP64 not supported: ${what} exceeds 4 GiB.`);\n}\n\ninterface CdEntry {\n filename: Uint8Array;\n offset: number;\n uncompressedSize: number;\n compressedSize: number;\n crc: number;\n flags: number;\n method: number;\n}\n\n// A true Single-Pass Streaming ZIP Writer\nexport class ZipStreamWriter {\n private cdEntries: CdEntry[] = [];\n private offset = 0;\n private streamController!: ReadableStreamDefaultController<Uint8Array>;\n private waiting: (() => void)[] = [];\n private cancelled = false;\n public stream: ReadableStream<Uint8Array>;\n private textEncoder = new TextEncoder();\n\n constructor(highWaterMarkBytes = 1 << 20) {\n this.stream = new ReadableStream<Uint8Array>({\n start: (controller) => {\n this.streamController = controller;\n },\n pull: () => this.wake(),\n // Consumer gone: unblock any pending write so the producer can see the error.\n cancel: () => {\n this.cancelled = true;\n this.wake();\n }\n }, new ByteLengthQueuingStrategy({ highWaterMark: highWaterMarkBytes }));\n }\n\n // Adds a file to the zip. `inputStream` MUST be raw uncompressed data.\n async addFile(filenameStr: string, inputStream: ReadableStream<Uint8Array>): Promise<void> {\n const filename = this.textEncoder.encode(filenameStr);\n const flags = 0x0008 | utf8Flag(filename);\n const startOffset = this.offset;\n await this.pushChunk(this.localHeader(filename, flags, 8, 0, 0, 0));\n\n // Stream data, tracking sizes and CRC32\n let uncompressedSize = 0;\n let crc = 0xffffffff;\n\n const compressor = new CompressionStream('deflate-raw') as any as TransformStream<Uint8Array, Uint8Array>;\n const writer = compressor.writable.getWriter();\n const reader = compressor.readable.getReader();\n const input = inputStream.getReader();\n // Node's and Bun's CompressionStream accept thousands of writes without backpressure, so only a few\n // chunks are fed ahead: a write resolves once the chunk is compressed, which waits while nobody reads\n // the output. Rows are then only pulled as fast as the ZIP is consumed.\n // A few writes in flight keep the compressor busy while the next chunk is built\n const inFlight: Promise<void>[] = [];\n const feed = (async () => {\n try {\n while (true) {\n const { done, value } = await input.read();\n if (done) break;\n await this.roomInQueue();\n uncompressedSize += value.length;\n crc = crc32Update(crc, value);\n const written = writer.write(value);\n written.catch(() => {}); // after a failure, writes nobody awaits any more must not go unhandled\n inFlight.push(written);\n if (inFlight.length >= 4) await inFlight.shift();\n }\n await Promise.all(inFlight);\n await writer.close();\n } catch (err) {\n // Stop the source too (a row generator's finally runs, a database cursor closes)\n await input.cancel(err).catch(() => {});\n await writer.abort(err).catch(() => {});\n throw err;\n }\n })();\n\n let compressedSize = 0;\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n compressedSize += value.length;\n await this.pushChunk(value);\n }\n await feed;\n } catch (err) {\n await reader.cancel(err).catch(() => {});\n await input.cancel(err).catch(() => {});\n await feed.catch(() => {});\n throw err;\n }\n\n crc = (crc ^ 0xffffffff) >>> 0;\n assertNoZip64(uncompressedSize, filenameStr);\n assertNoZip64(compressedSize, filenameStr);\n\n // Data Descriptor\n const desc = new Uint8Array(16);\n const descView = new DataView(desc.buffer);\n descView.setUint32(0, 0x08074b50, true);\n descView.setUint32(4, crc, true);\n descView.setUint32(8, compressedSize, true);\n descView.setUint32(12, uncompressedSize, true);\n await this.pushChunk(desc);\n\n this.cdEntries.push({ filename, offset: startOffset, uncompressedSize, compressedSize, crc, flags, method: 8 });\n }\n\n // Adds a file that is ALREADY compressed (pass-through for the Editor)\n async addCompressedFile(filenameStr: string, compressedStream: ReadableStream<Uint8Array>, uncompressedSize: number, compressedSize: number, crc: number, method = 8): Promise<void> {\n const filename = this.textEncoder.encode(filenameStr);\n const flags = utf8Flag(filename);\n const startOffset = this.offset;\n await this.pushChunk(this.localHeader(filename, flags, method, crc, compressedSize, uncompressedSize));\n\n const reader = compressedStream.getReader();\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n await this.pushChunk(value);\n }\n\n this.cdEntries.push({ filename, offset: startOffset, uncompressedSize, compressedSize, crc, flags, method });\n }\n\n async close(): Promise<void> {\n // 0xFFFF in the end record means \"see the ZIP64 record\", which readers then look for\n if (this.cdEntries.length >= 0xffff) throw new Error('ZIP64 not supported: 65535 entries or more.');\n const cdStartOffset = this.offset;\n\n for (const entry of this.cdEntries) {\n const cd = new Uint8Array(46 + entry.filename.length);\n const view = new DataView(cd.buffer);\n view.setUint32(0, 0x02014b50, true);\n view.setUint16(4, 20, true); // version made by\n view.setUint16(6, 20, true); // version needed\n view.setUint16(8, entry.flags, true);\n view.setUint16(10, entry.method, true);\n view.setUint32(16, entry.crc, true);\n view.setUint32(20, entry.compressedSize, true);\n view.setUint32(24, entry.uncompressedSize, true);\n view.setUint16(28, entry.filename.length, true);\n view.setUint32(42, entry.offset, true);\n cd.set(entry.filename, 46);\n await this.pushChunk(cd);\n }\n\n const cdSize = this.offset - cdStartOffset;\n assertNoZip64(this.offset, 'archive');\n\n const eocd = new Uint8Array(22);\n const eocdView = new DataView(eocd.buffer);\n eocdView.setUint32(0, 0x06054b50, true);\n eocdView.setUint16(8, this.cdEntries.length, true);\n eocdView.setUint16(10, this.cdEntries.length, true);\n eocdView.setUint32(12, cdSize, true);\n eocdView.setUint32(16, cdStartOffset, true);\n await this.pushChunk(eocd);\n\n this.streamController.close();\n }\n\n // Propagate a producer failure to whoever is reading `stream`.\n error(err: unknown) {\n try { this.streamController.error(err); } catch { /* already closed/errored */ }\n }\n\n private localHeader(filename: Uint8Array, flags: number, method: number, crc: number, compressedSize: number, uncompressedSize: number): Uint8Array {\n assertNoZip64(this.offset, 'archive');\n const header = new Uint8Array(30 + filename.length);\n const view = new DataView(header.buffer);\n view.setUint32(0, 0x04034b50, true);\n view.setUint16(4, 20, true);\n view.setUint16(6, flags, true);\n view.setUint16(8, method, true);\n view.setUint32(14, crc, true);\n view.setUint32(18, compressedSize, true);\n view.setUint32(22, uncompressedSize, true);\n view.setUint16(26, filename.length, true);\n header.set(filename, 30);\n return header;\n }\n\n // Enqueue and wait while the consumer's queue is full, so memory stays bounded.\n private async pushChunk(chunk: Uint8Array) {\n if (this.cancelled) throw new Error('ZIP stream cancelled by consumer.');\n this.streamController.enqueue(chunk);\n this.offset += chunk.length;\n await this.roomInQueue();\n }\n\n private async roomInQueue() {\n while ((this.streamController.desiredSize ?? 1) <= 0) {\n if (this.cancelled) throw new Error('ZIP stream cancelled by consumer.');\n await new Promise<void>(resolve => this.waiting.push(resolve));\n }\n if (this.cancelled) throw new Error('ZIP stream cancelled by consumer.');\n }\n\n private wake() {\n const waiting = this.waiting;\n this.waiting = [];\n for (const resolve of waiting) resolve();\n }\n}\n","// Reader for Compound File Binary files [MS-CFB]: the container of .xls workbooks and of\n// password-protected .xlsx files. Streams are read from an in-memory copy of the file.\n\nconst SIGNATURE = [0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1, 0x1a, 0xe1];\nconst END_OF_CHAIN = 0xfffffffe;\nconst MAX_REGULAR_SECTOR = 0xfffffffa;\n\nexport interface CfbEntry {\n path: string; // \"Workbook\", or \"Storage/Stream\" inside a storage\n type: 'storage' | 'stream';\n size: number;\n}\n\nexport function isCfb(bytes: Uint8Array): boolean {\n return bytes.length >= 8 && SIGNATURE.every((b, i) => bytes[i] === b);\n}\n\nconst corrupt = (why: string) => new Error(`Corrupt compound file: ${why}`);\n\ninterface DirEntry { name: string; type: number; left: number; right: number; child: number; start: number; size: number }\n\nexport class CfbReader {\n private readonly view: DataView;\n private readonly sectorSize: number;\n private readonly miniSectorSize: number;\n private readonly miniCutoff: number;\n private readonly fat: Uint32Array;\n private miniFat?: Uint32Array;\n private miniStream?: Uint8Array;\n private readonly dir: DirEntry[];\n private readonly byPath = new Map<string, DirEntry & { path: string }>();\n\n constructor(private readonly bytes: Uint8Array) {\n if (!isCfb(bytes)) throw new Error('Not a compound file (no D0CF11E0 signature)');\n if (bytes.length < 512) throw corrupt(`only ${bytes.length} bytes, shorter than its 512-byte header`);\n this.view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n const u16 = (o: number) => this.view.getUint16(o, true);\n const u32 = (o: number) => this.view.getUint32(o, true);\n\n const sectorShift = u16(0x1e);\n if (sectorShift !== 9 && sectorShift !== 12) throw corrupt(`sector shift ${sectorShift}`);\n this.sectorSize = 1 << sectorShift;\n const miniShift = u16(0x20);\n if (miniShift !== 6) throw corrupt(`mini sector shift ${miniShift}`);\n this.miniSectorSize = 1 << miniShift;\n this.miniCutoff = u32(0x38);\n\n // The FAT's own sectors are listed in the header (109 slots) and then in a chain of DIFAT sectors\n const numFatSectors = u32(0x2c);\n const sectorCount = Math.ceil(bytes.length / this.sectorSize) - 1;\n if (numFatSectors > sectorCount) throw corrupt(`${numFatSectors} FAT sectors in a ${bytes.length}-byte file`);\n const fatSectors: number[] = [];\n for (let i = 0; i < 109 && fatSectors.length < numFatSectors; i++) fatSectors.push(u32(0x4c + i * 4));\n const perDifat = this.sectorSize / 4 - 1;\n for (let s = u32(0x44), hops = 0; fatSectors.length < numFatSectors; hops++) {\n if (s > MAX_REGULAR_SECTOR || hops > sectorCount) throw corrupt('DIFAT chain ends early');\n const at = this.sectorOffset(s);\n for (let i = 0; i < perDifat && fatSectors.length < numFatSectors; i++) fatSectors.push(u32(at + i * 4));\n s = u32(at + perDifat * 4);\n }\n const perSector = this.sectorSize / 4;\n this.fat = new Uint32Array(numFatSectors * perSector);\n fatSectors.forEach((s, i) => {\n const at = this.sectorOffset(s);\n for (let j = 0; j < perSector; j++) this.fat[i * perSector + j] = u32(at + j * 4);\n });\n\n // Directory: 128-byte entries in the chain starting at the header's first directory sector\n const dirBytes = this.readChain(u32(0x30), Infinity);\n this.dir = [];\n for (let at = 0; at + 128 <= dirBytes.length; at += 128) {\n const d = new DataView(dirBytes.buffer, dirBytes.byteOffset + at, 128);\n const nameLen = Math.min(d.getUint16(64, true), 64);\n let name = '';\n for (let i = 0; i + 2 < nameLen; i += 2) name += String.fromCharCode(d.getUint16(i, true));\n // Version 3 files may leave garbage in the size's high half\n const size = sectorShift === 9 ? d.getUint32(120, true) : d.getUint32(120, true) + d.getUint32(124, true) * 2 ** 32;\n this.dir.push({ name, type: d.getUint8(66), left: d.getUint32(68, true), right: d.getUint32(72, true),\n child: d.getUint32(76, true), start: d.getUint32(116, true), size });\n }\n if (this.dir[0]?.type !== 5) throw corrupt('no root entry');\n this.walk(this.dir[0].child, '');\n }\n\n // Start of a sector, checked to hold `need` bytes (the last sector of a file may be cut short)\n private sectorOffset(sector: number, need = this.sectorSize): number {\n const at = (sector + 1) * this.sectorSize;\n if (sector > MAX_REGULAR_SECTOR || at + need > this.bytes.length) {\n throw corrupt(`sector ${sector} is outside the file`);\n }\n return at;\n }\n\n // Sibling entries form a red-black tree; children of a storage hang off its `child`\n private walk(root: number, prefix: string) {\n const stack = [root];\n const seen = new Set<number>();\n while (stack.length) {\n const id = stack.pop()!;\n if (id > MAX_REGULAR_SECTOR) continue; // NOSTREAM\n if (seen.has(id) || !this.dir[id]) throw corrupt('directory tree loops or points outside the directory');\n seen.add(id);\n const e = this.dir[id];\n stack.push(e.left, e.right);\n if (e.type !== 1 && e.type !== 2) continue;\n const path = prefix + e.name;\n this.byPath.set(path.toLowerCase(), { ...e, path });\n if (e.type === 1) this.walk(e.child, path + '/');\n }\n }\n\n private readChain(start: number, size: number, mini = false): Uint8Array {\n const table = mini ? this.miniFat! : this.fat;\n const unit = mini ? this.miniSectorSize : this.sectorSize;\n const source = mini ? this.miniStream! : this.bytes;\n const sectors: number[] = [];\n for (let s = start; s !== END_OF_CHAIN && sectors.length * unit < size; s = table[s]) {\n if (s >= table.length || sectors.length > table.length) throw corrupt(`${mini ? 'mini ' : ''}sector chain is broken or loops`);\n sectors.push(s);\n }\n const total = Math.min(size, sectors.length * unit);\n if (size !== Infinity && total < size) throw corrupt(`stream is shorter (${total} bytes) than its stated ${size}`);\n const out = new Uint8Array(total);\n sectors.forEach((s, i) => {\n const len = Math.min(unit, total - i * unit);\n const at = mini ? s * unit : this.sectorOffset(s, len);\n if (at + len > source.length) throw corrupt(`mini sector ${s} is outside the mini stream`);\n out.set(source.subarray(at, at + len), i * unit);\n });\n return out;\n }\n\n entries(): CfbEntry[] {\n return [...this.byPath.values()].map(e => ({ path: e.path, type: e.type === 1 ? 'storage' : 'stream', size: e.size }));\n }\n\n has(path: string): boolean {\n return this.byPath.get(path.toLowerCase())?.type === 2;\n }\n\n // A stream's bytes, by path (case-insensitive, as in the format); undefined if there is none\n read(path: string): Uint8Array | undefined {\n const e = this.byPath.get(path.toLowerCase());\n if (!e || e.type !== 2) return undefined;\n if (e.size >= this.miniCutoff) {\n if (e.size > this.bytes.length) throw corrupt(`stream ${e.path} is larger than the file`);\n return this.readChain(e.start, e.size);\n }\n if (!this.miniStream) {\n const root = this.dir[0];\n this.miniStream = this.readChain(root.start, root.size);\n const view = new DataView(this.bytes.buffer, this.bytes.byteOffset, this.bytes.byteLength);\n const miniFatBytes = this.readChain(view.getUint32(0x3c, true), view.getUint32(0x40, true) * this.sectorSize);\n this.miniFat = new Uint32Array(miniFatBytes.length / 4);\n const mv = new DataView(miniFatBytes.buffer, miniFatBytes.byteOffset, miniFatBytes.byteLength);\n for (let i = 0; i < this.miniFat.length; i++) this.miniFat[i] = mv.getUint32(i * 4, true);\n }\n return this.readChain(e.start, e.size, true);\n }\n}\n","import { RandomAccessReader } from './random-access';\nimport { crc32Update } from './zip-stream-writer';\nimport { isCfb } from './cfb';\n\nexport interface ZipRecord {\n filename: string;\n compressionMethod: number;\n crc: number;\n compressedSize: number;\n uncompressedSize: number;\n localHeaderOffset: number;\n}\n\nexport class ZipRandomAccessParser {\n private records = new Map<string, ZipRecord>();\n // Part names are case-insensitive in OPC: a rels target \"Sheet1.xml\" finds \"sheet1.xml\"\n private lowerCase = new Map<string, ZipRecord>();\n\n constructor(private reader: RandomAccessReader) {}\n\n async parseCentralDirectory(): Promise<void> {\n const size = this.reader.size;\n if (size < 22) throw new Error(\"File too small to be a valid ZIP.\");\n\n // The EOCD record can be anywhere in the last 65535 + 22 bytes due to an optional file comment.\n const searchSize = Math.min(size, 65535 + 22);\n const searchStart = size - searchSize;\n const buffer = await this.reader.read(searchStart, searchSize);\n \n const dataView = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n\n // Search backwards for the EOCD signature (0x06054b50). The real record's comment reaches the end\n // of the file, so the signature bytes inside a comment are skipped; failing that (junk appended\n // after the archive), the last signature is used.\n let eocdOffset = -1;\n for (let i = buffer.length - 22; i >= 0; i--) {\n if (dataView.getUint32(i, true) !== 0x06054b50) continue;\n if (eocdOffset === -1) eocdOffset = i;\n if (i + 22 + dataView.getUint16(i + 20, true) === buffer.length) {\n eocdOffset = i;\n break;\n }\n }\n\n if (eocdOffset === -1) {\n if (isCfb(buffer.subarray(0, 8)) || searchStart > 0 && isCfb(await this.reader.read(0, 8))) {\n throw new Error('This file is a compound file, not a ZIP: an .xls, or a workbook saved with a password. Decrypt it first with decryptWorkbook from @xlsxflow/pro.');\n }\n throw new Error(\"End of Central Directory (EOCD) not found. This may not be a valid ZIP file.\");\n }\n\n const totalRecords = dataView.getUint16(eocdOffset + 10, true);\n const cdOffset = dataView.getUint32(eocdOffset + 16, true);\n const cdSize = dataView.getUint32(eocdOffset + 12, true);\n if (totalRecords === 0xffff || cdOffset === 0xffffffff || cdSize === 0xffffffff) {\n throw new Error(\"ZIP64 archives are not supported.\");\n }\n\n if (cdOffset + cdSize > searchStart + eocdOffset || cdSize < 46 * totalRecords) {\n throw new Error(\"Corrupt ZIP: the central directory is outside the file or too small for its records.\");\n }\n\n // Read the Central Directory\n const cdBuffer = await this.reader.read(cdOffset, cdSize);\n const cdView = new DataView(cdBuffer.buffer, cdBuffer.byteOffset, cdBuffer.byteLength);\n\n let offset = 0;\n const textDecoder = new TextDecoder();\n\n for (let i = 0; i < totalRecords; i++) {\n if (offset + 46 > cdBuffer.length || cdView.getUint32(offset, true) !== 0x02014b50) {\n throw new Error(`Central Directory record signature mismatch at index ${i}`);\n }\n\n const compressionMethod = cdView.getUint16(offset + 10, true);\n const crc = cdView.getUint32(offset + 16, true);\n const compressedSize = cdView.getUint32(offset + 20, true);\n const uncompressedSize = cdView.getUint32(offset + 24, true);\n const filenameLength = cdView.getUint16(offset + 28, true);\n const extraFieldLength = cdView.getUint16(offset + 30, true);\n const fileCommentLength = cdView.getUint16(offset + 32, true);\n const localHeaderOffset = cdView.getUint32(offset + 42, true);\n\n if (offset + 46 + filenameLength > cdBuffer.length) {\n throw new Error(`Corrupt ZIP: central directory record ${i} runs past the directory`);\n }\n const filenameBuffer = cdBuffer.subarray(offset + 46, offset + 46 + filenameLength);\n const filename = textDecoder.decode(filenameBuffer);\n\n if (filename.includes('../') || filename.includes('..\\\\')) {\n throw new Error(`Security Exception: Path traversal detected in ZIP filename: ${filename}`);\n }\n\n const record = { filename, compressionMethod, crc, compressedSize, uncompressedSize, localHeaderOffset };\n this.records.set(filename, record);\n if (!this.lowerCase.has(filename.toLowerCase())) this.lowerCase.set(filename.toLowerCase(), record);\n\n offset += 46 + filenameLength + extraFieldLength + fileCommentLength;\n }\n\n // Entries must not share bytes: aliased names would let one small deflated entry be inflated many times\n const byOffset = [...this.records.values()].sort((a, b) => a.localHeaderOffset - b.localHeaderOffset);\n for (let i = 1; i < byOffset.length; i++) {\n const prev = byOffset[i - 1];\n if (prev.localHeaderOffset + 30 + prev.compressedSize > byOffset[i].localHeaderOffset) {\n throw new Error(`Corrupt ZIP: entries ${prev.filename} and ${byOffset[i].filename} overlap`);\n }\n }\n }\n\n has(filename: string): boolean {\n return this.records.has(filename) || this.lowerCase.has(filename.toLowerCase());\n }\n\n getFiles(): string[] {\n return Array.from(this.records.keys());\n }\n\n getRecord(filename: string): ZipRecord {\n const record = this.records.get(filename) ?? this.lowerCase.get(filename.toLowerCase());\n if (!record) throw new Error(`File ${filename} not found in ZIP.`);\n return record;\n }\n\n // Raw (still compressed) bytes of an entry, for pass-through copying.\n async extractRawStream(filename: string): Promise<ReadableStream<Uint8Array>> {\n const record = this.getRecord(filename);\n if (record.compressedSize === 0xffffffff || record.localHeaderOffset === 0xffffffff) {\n throw new Error(`ZIP64 entry not supported: ${filename}`);\n }\n\n // The local header has a variable length filename and extra field.\n if (record.localHeaderOffset + 30 > this.reader.size) {\n throw new Error(`Corrupt ZIP: entry ${filename} points past the end of the file`);\n }\n const headerBuffer = await this.reader.read(record.localHeaderOffset, 30);\n const headerView = new DataView(headerBuffer.buffer, headerBuffer.byteOffset, headerBuffer.byteLength);\n if (headerView.getUint32(0, true) !== 0x04034b50) {\n throw new Error(`Local File Header signature mismatch for ${filename}`);\n }\n const dataOffset = record.localHeaderOffset + 30 + headerView.getUint16(26, true) + headerView.getUint16(28, true);\n if (dataOffset + record.compressedSize > this.reader.size) {\n throw new Error(`Corrupt ZIP: entry ${filename} extends past the end of the file`);\n }\n return this.reader.stream(dataOffset, record.compressedSize);\n }\n\n async extractStream(filename: string): Promise<ReadableStream<Uint8Array>> {\n const record = this.getRecord(filename);\n if (record.compressionMethod !== 0 && record.compressionMethod !== 8) {\n throw new Error(`Unsupported compression method ${record.compressionMethod} for ${filename}`);\n }\n const stream = await this.extractRawStream(filename);\n const data = record.compressionMethod === 0 ? stream\n : stream.pipeThrough(new DecompressionStream('deflate-raw') as any as TransformStream<Uint8Array, Uint8Array>);\n\n // Node reports bad deflate data as a bare TypeError; name the entry instead\n const inflated = data.getReader();\n let total = 0;\n let crc = 0xffffffff;\n return new ReadableStream<Uint8Array>({\n async pull(controller) {\n try {\n const { done, value } = await inflated.read();\n if (done) {\n // Changed bytes must fail, not read as different data\n if (total !== record.uncompressedSize || ((crc ^ 0xffffffff) >>> 0) !== record.crc) {\n return controller.error(new Error(`Corrupt ZIP entry ${filename}: its data does not match the size and CRC-32 in the directory`));\n }\n return controller.close();\n }\n crc = crc32Update(crc, value);\n // The directory states each entry's size; inflating past it means a crafted entry (a zip bomb)\n total += value.length;\n if (total > record.uncompressedSize) {\n await inflated.cancel();\n return controller.error(new Error(`Corrupt ZIP entry ${filename}: inflates past its stated size of ${record.uncompressedSize} bytes`));\n }\n controller.enqueue(value);\n } catch (err: any) {\n const detail = err?.cause?.message || err?.message || String(err);\n controller.error(new Error(`Corrupt ZIP entry ${filename}: ${detail}`, { cause: err }));\n }\n },\n cancel(reason) {\n return inflated.cancel(reason);\n }\n });\n }\n}\n","export type XmlToken =\n | { type: 'startElement', name: string, attributes: Record<string, string> }\n | { type: 'endElement', name: string }\n | { type: 'text', value: string };\n\nfunction codePoint(cp: number, fallback: string): string {\n // Out-of-range references (e.g. �) are left as written instead of aborting the parse\n return cp <= 0x10ffff ? String.fromCodePoint(cp) : fallback;\n}\n\nfunction unescapeXml(text: string): string {\n if (text.indexOf('&') === -1) return text;\n return text.replace(/&(?:amp|lt|gt|quot|apos|#x[0-9a-fA-F]+|#\\d+);/g, (match) => {\n switch (match) {\n case '&': return '&';\n case '<': return '<';\n case '>': return '>';\n case '"': return '\"';\n case ''': return \"'\";\n default:\n if (match.startsWith('&#x')) return codePoint(parseInt(match.slice(3, -1), 16), match);\n return codePoint(parseInt(match.slice(2, -1), 10), match);\n }\n });\n}\n\n// XML end-of-line handling: literal CRLF / CR become LF (escaped survives, it's decoded later)\nfunction normalizeEol(text: string): string {\n return text.indexOf('\\r') === -1 ? text : text.replace(/\\r\\n?/g, '\\n');\n}\n\nfunction stripNamespace(name: string): string {\n const colonIdx = name.indexOf(':');\n return colonIdx !== -1 ? name.slice(colonIdx + 1) : name;\n}\n\ntype Pending = 'text' | 'tag' | 'cdata' | 'comment' | null;\n\n// Emits one array of tokens per input chunk. Per-token stream chunks cost a promise round-trip\n// each (~5 per cell), which dominated read time; batching removes that overhead.\nexport function createXmlBatchParser(): TransformStream<Uint8Array, XmlToken[]> {\n let decoder: TextDecoder | undefined;\n let buffer = '';\n let isFirstChunk = true;\n\n // When a construct spans chunks, remember how far it was already scanned (and the quote state\n // inside a tag) so the next chunk resumes there. Rescanning from the start is O(n^2) on a\n // hostile file with one huge tag / text node / CDATA section.\n let pending: Pending = null;\n let scanFrom = 0;\n let pendingQuote = '';\n\n return new TransformStream({\n transform(chunk, controller) {\n // XML parsers must read UTF-16 as well as UTF-8; a UTF-16 part starts with its byte-order mark\n decoder ??= new TextDecoder(chunk[0] === 0xff && chunk[1] === 0xfe ? 'utf-16le' : chunk[0] === 0xfe && chunk[1] === 0xff ? 'utf-16be' : 'utf-8');\n buffer += decoder.decode(chunk, { stream: true });\n if (isFirstChunk) {\n if (buffer.charCodeAt(0) === 0xFEFF) {\n buffer = buffer.slice(1);\n }\n isFirstChunk = false;\n }\n\n const out: XmlToken[] = [];\n let index = 0;\n const resumed = pending;\n pending = null;\n\n while (index < buffer.length) {\n const resumeAt = (kind: Pending, from: number) => (index === 0 && resumed === kind ? Math.max(from, scanFrom) : from);\n\n const tagStart = buffer.indexOf('<', resumeAt('text', index));\n if (tagStart === -1) {\n // No more tags: keep the rest (from index) for the next chunk\n pending = 'text';\n scanFrom = buffer.length;\n break;\n }\n\n if (tagStart > index) {\n out.push({ type: 'text', value: unescapeXml(normalizeEol(buffer.slice(index, tagStart))) });\n }\n\n if (buffer.startsWith('<![CDATA[', tagStart)) {\n const cdataEnd = buffer.indexOf(']]>', resumeAt('cdata', tagStart + 9) - (resumed === 'cdata' && index === 0 ? 2 : 0));\n if (cdataEnd === -1) {\n pending = 'cdata';\n scanFrom = buffer.length;\n index = tagStart; // incomplete: resume here next chunk\n break;\n }\n out.push({ type: 'text', value: normalizeEol(buffer.slice(tagStart + 9, cdataEnd)) }); // CDATA is not escaped\n index = cdataEnd + 3;\n continue;\n }\n\n if (buffer.startsWith('<!--', tagStart)) {\n const commentEnd = buffer.indexOf('-->', resumeAt('comment', tagStart + 4) - (resumed === 'comment' && index === 0 ? 2 : 0));\n if (commentEnd === -1) {\n pending = 'comment';\n scanFrom = buffer.length;\n index = tagStart; // incomplete: resume here next chunk\n break;\n }\n index = commentEnd + 3;\n continue;\n }\n\n // Find the closing '>' outside quoted attribute values\n const resuming = index === 0 && resumed === 'tag';\n let tagEnd = -1;\n let quote = resuming ? pendingQuote : '';\n for (let i = resuming ? Math.max(scanFrom, tagStart + 1) : tagStart + 1; i < buffer.length; i++) {\n const char = buffer.charCodeAt(i);\n if (quote) {\n if (char === quote.charCodeAt(0)) quote = '';\n } else if (char === 34 /* \" */ || char === 39 /* ' */) {\n quote = buffer[i];\n } else if (char === 62 /* > */) {\n tagEnd = i;\n break;\n }\n }\n\n if (tagEnd === -1) {\n pending = 'tag';\n pendingQuote = quote;\n scanFrom = buffer.length;\n index = tagStart; // incomplete: resume here next chunk\n break;\n }\n\n const tagContent = buffer.slice(tagStart + 1, tagEnd);\n index = tagEnd + 1;\n\n if (tagContent.startsWith('/')) {\n out.push({ type: 'endElement', name: stripNamespace(tagContent.slice(1).trim()) });\n } else if (tagContent.startsWith('?')) {\n // XML declaration, ignore\n } else if (tagContent.startsWith('!')) {\n // DOCTYPE or other DTD declarations, ignore\n } else {\n // Parse start element and attributes; any XML whitespace may separate the name from attributes\n const isSelfClosing = tagContent.endsWith('/');\n const content = isSelfClosing ? tagContent.slice(0, -1) : tagContent;\n const ws = content.search(/\\s/);\n const name = stripNamespace(ws === -1 ? content : content.slice(0, ws));\n const attributes: Record<string, string> = {};\n\n if (ws !== -1) readAttributes(content, ws, attributes);\n\n out.push({ type: 'startElement', name, attributes });\n if (isSelfClosing) out.push({ type: 'endElement', name });\n }\n }\n buffer = buffer.slice(index);\n scanFrom -= index;\n if (out.length) controller.enqueue(out);\n },\n flush(controller) {\n buffer += decoder?.decode() ?? '';\n // Handle trailing text if any\n if (buffer.length > 0 && pending !== 'tag' && pending !== 'cdata' && pending !== 'comment') {\n controller.enqueue([{ type: 'text', value: unescapeXml(normalizeEol(buffer)) }]);\n }\n }\n });\n}\n\n// name=\"value\" pairs from i on, in one pass: a regex here backtracks quadratically on junk like <c aaaa…>\nconst isSpace = (c: string) => c === ' ' || c === '\\n' || c === '\\t' || c === '\\r';\nfunction readAttributes(s: string, i: number, attributes: Record<string, string>) {\n const n = s.length;\n while (i < n) {\n while (i < n && isSpace(s[i])) i++;\n const start = i;\n while (i < n && !isSpace(s[i]) && s[i] !== '=') i++;\n const name = s.slice(start, i);\n while (i < n && isSpace(s[i])) i++;\n if (s[i] !== '=') { if (i === start) i++; continue; }\n i++;\n while (i < n && isSpace(s[i])) i++;\n const quote = s[i];\n if (quote !== '\"' && quote !== \"'\") continue;\n const end = s.indexOf(quote, i + 1);\n if (end === -1) return;\n if (/^[a-zA-Z0-9_:.-]+$/.test(name)) attributes[stripNamespace(name)] = unescapeXml(normalizeEol(s.slice(i + 1, end)));\n i = end + 1;\n }\n}\n\n// Token-at-a-time view of createXmlBatchParser, kept for API compatibility.\nexport function createXmlStreamParser(): { readable: ReadableStream<XmlToken>; writable: WritableStream<Uint8Array> } {\n const batches = createXmlBatchParser();\n const flatten = new TransformStream<XmlToken[], XmlToken>({\n transform(batch, controller) {\n for (const token of batch) controller.enqueue(token);\n }\n });\n return { writable: batches.writable, readable: batches.readable.pipeThrough(flatten) };\n}\n","import type { ParseResult, CellValue } from './worksheet-parser';\n\nexport async function sheetToJson<T = Record<string, CellValue>>(\n parseResult: ParseResult,\n headerRowIndex: number = 0\n): Promise<T[]> {\n const results: T[] = [];\n let headers: string[] = [];\n let skip = headerRowIndex; // rows above the header, counted as the reader yields them\n\n for await (const row of parseResult) {\n if (skip-- > 0) continue;\n if (headers.length === 0) {\n const seen = new Set<string>();\n headers = row.cells.map((c, i) => {\n const base = c !== null && c !== undefined ? String(c) : `Column${i + 1}`;\n // A repeated header gets a suffix (\"Name_2\") so its column isn't lost\n let name = base;\n for (let n = 2; seen.has(name); n++) name = `${base}_${n}`;\n seen.add(name);\n return name;\n });\n continue;\n }\n\n // Values right of the header row get their own column name, as blank headers do\n for (let i = headers.length; i < row.cells.length; i++) {\n if (row.cells[i] === null || row.cells[i] === undefined) continue;\n let name = `Column${i + 1}`;\n for (let n = 2; headers.includes(name); n++) name = `Column${i + 1}_${n}`;\n while (headers.length < i) headers.push(`Column${headers.length + 1}`);\n headers.push(name);\n }\n const obj: any = {};\n for (let i = 0; i < headers.length; i++) {\n const value = row.cells[i] ?? null;\n // A \"__proto__\" header must be an ordinary key, not a prototype change\n if (headers[i] === '__proto__') Object.defineProperty(obj, '__proto__', { value, enumerable: true, writable: true, configurable: true });\n else obj[headers[i]] = value;\n }\n results.push(obj as T);\n }\n\n return results;\n}\n\nfunction escapeCsv(val: any): string {\n if (val === null || val === undefined) return '';\n const str = String(val);\n if (str.includes(',') || str.includes('\"') || str.includes('\\n') || str.includes('\\r')) {\n return `\"${str.replace(/\"/g, '\"\"')}\"`;\n }\n return str;\n}\n\nexport async function streamToCsv(parseResult: ParseResult): Promise<string> {\n const rows: string[] = [];\n let last = 0;\n for await (const row of parseResult) {\n // Rows missing between rows are blank lines, as in Excel's CSV export, so nothing shifts up\n for (let gap = last ? row.rowNumber - last - 1 : 0; gap > 0; gap--) rows.push('');\n last = row.rowNumber;\n rows.push(row.cells.map(escapeCsv).join(','));\n }\n return rows.join('\\n');\n}\n\nexport function attr(tag: string, name: string): string | null {\n const m = new RegExp(`\\\\s${name}\\\\s*=\\\\s*(?:\"([^\"]*)\"|'([^']*)')`).exec(tag);\n if (!m) return null;\n return unescapeXml(m[1] ?? m[2]);\n}\n\n// Resolves a relationship Target against the directory of the part that owns the .rels file.\nfunction resolveTarget(baseDir: string, target: string): string {\n const parts = (target.startsWith('/') ? target.slice(1) : baseDir + target).split('/');\n const out: string[] = [];\n for (const p of parts) {\n if (p === '..') out.pop();\n else if (p !== '.' && p !== '') out.push(p);\n }\n return out.join('/');\n}\n\nexport interface Relationship { id: string; type: string; path: string; external: boolean }\n\nfunction parseRels(relsXml: string, baseDir: string): Relationship[] {\n const rels: Relationship[] = [];\n for (const [tag] of relsXml.matchAll(/<(?:\\w+:)?Relationship\\b[^>]*>/g)) {\n const id = attr(tag, 'Id');\n const target = attr(tag, 'Target');\n if (!id || !target) continue;\n // External targets (hyperlink URLs) are kept verbatim, not resolved as package paths\n const external = attr(tag, 'TargetMode') === 'External';\n rels.push({ id, type: attr(tag, 'Type') ?? '', path: external ? target : resolveTarget(baseDir, target), external });\n }\n return rels;\n}\n\nexport const dirOf = (path: string) => path.slice(0, path.lastIndexOf('/') + 1);\nexport const relsPathOf = (path: string) => `${dirOf(path)}_rels/${path.slice(path.lastIndexOf('/') + 1)}.rels`;\n// Relationship types end the same way in Transitional and Strict OOXML\nconst byType = (rels: Relationship[], suffix: string) => rels.find(r => !r.external && r.type.endsWith(suffix))?.path;\n\nexport interface WorkbookParts {\n workbookPath: string;\n workbookXml: string;\n sheets: Map<string, string>; // sheet name -> ZIP entry path, in tab order\n chartsheets: Set<string>; // paths in `sheets` that are chart sheets (no cells)\n sharedStrings?: string;\n styles?: string;\n theme?: string;\n}\n\n// Locates the workbook and its parts through the package relationships instead of assuming xl/ names.\nexport async function resolveWorkbookParts(readText: (path: string) => Promise<string>): Promise<WorkbookParts> {\n const rootRels = parseRels(await readText('_rels/.rels'), '');\n const workbookPath = byType(rootRels, '/officeDocument') ?? 'xl/workbook.xml';\n const workbookXml = await readText(workbookPath);\n const rels = parseRels(await readText(relsPathOf(workbookPath)), dirOf(workbookPath));\n\n const sheets = new Map<string, string>();\n const chartsheets = new Set<string>();\n for (const [tag] of workbookXml.matchAll(/<(?:\\w+:)?sheet\\b[^>]*>/g)) {\n const name = attr(tag, 'name');\n const rId = attr(tag, 'r:id') ?? attr(tag, '\\\\w+:id');\n const rel = rId ? rels.find(r => r.id === rId && !r.external) : undefined;\n if (name && rel) sheets.set(name, rel.path);\n if (rel?.type.endsWith('/chartsheet')) chartsheets.add(rel.path);\n }\n return {\n workbookPath, workbookXml, sheets, chartsheets,\n sharedStrings: byType(rels, '/sharedStrings'), styles: byType(rels, '/styles'), theme: byType(rels, '/theme'),\n };\n}\n\n// The relationships of any part (its _rels/<name>.rels), targets resolved to ZIP paths unless external\nexport async function partRelationships(readText: (path: string) => Promise<string>, partPath: string): Promise<Relationship[]> {\n return parseRels(await readText(relsPathOf(partPath)), dirOf(partPath));\n}\n\n// Relationship id -> target of a worksheet's hyperlinks (from its .rels part)\nexport async function hyperlinkTargets(readText: (path: string) => Promise<string>, sheetPath: string): Promise<Map<string, string>> {\n const rels = await partRelationships(readText, sheetPath);\n return new Map(rels.filter(r => r.type.endsWith('/hyperlink')).map(r => [r.id, r.path]));\n}\n\n// Maps sheet name -> ZIP entry path for a workbook at xl/workbook.xml, in tab order.\nexport function resolveSheetPaths(workbookXml: string, relsXml: string): Map<string, string> {\n const rels = parseRels(relsXml, 'xl/');\n const paths = new Map<string, string>();\n for (const [tag] of workbookXml.matchAll(/<(?:\\w+:)?sheet\\b[^>]*>/g)) {\n const name = attr(tag, 'name');\n const rId = attr(tag, 'r:id') ?? attr(tag, '\\\\w+:id');\n const rel = rId ? rels.find(r => r.id === rId && !r.external) : undefined;\n if (name && rel) paths.set(name, rel.path);\n }\n return paths;\n}\n\n// Decodes OOXML ST_Xstring escapes (_x000D_ = CR, _x005F_ = literal underscore).\nexport function decodeXString(s: string): string {\n if (s.indexOf('_x') === -1) return s;\n return s.replace(/_x([0-9A-Fa-f]{4})_/g, (_, h) => String.fromCharCode(parseInt(h, 16)));\n}\n\n// Excel's sheet size (A..XFD, 1..1048576)\nexport const MAX_COLUMNS = 16384;\nexport const MAX_ROWS = 1048576;\n// Excel's limit on the characters in one cell\nexport const MAX_CELL_TEXT = 32767;\n\nexport function checkCellText(s: string, ref: string): string {\n if (s.length > MAX_CELL_TEXT) throw new Error(`Cell ${ref} has ${s.length} characters, more than Excel's ${MAX_CELL_TEXT}.`);\n return s;\n}\n\n// Colours are ARGB hex (\"FFFF0000\"); \"FF0000\" and \"#FF0000\" get an opaque alpha. Anything else\n// makes Excel repair the file.\nexport function argb(c: string): string {\n const m = /^#?([0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/.exec(String(c));\n if (!m) throw new Error(`Invalid colour \"${c}\": use ARGB hex such as \"FFFF0000\".`);\n return (m[1].length === 6 ? 'FF' + m[1] : m[1]).toUpperCase();\n}\n\n// 0-based column of letters like \"BC\" (or a reference like \"BC12\"); -1 when there are none\nexport function colIndex(ref: string): number {\n const match = ref.match(/[A-Za-z]+/);\n if (!match) return -1;\n const letters = match[0].toUpperCase();\n let idx = 0;\n for (let i = 0; i < letters.length; i++) idx = idx * 26 + (letters.charCodeAt(i) - 64);\n return idx - 1;\n}\n\n// 0-based column index -> letters (0 -> A, 26 -> AA)\nexport function colLetter(index: number): string {\n let col = '';\n for (let c = index + 1; c > 0; c = Math.floor((c - 1) / 26)) col = String.fromCharCode(((c - 1) % 26) + 65) + col;\n return col;\n}\n\n// A1 cell refs, whole-column (A:C) and whole-row (1:3) ranges. The lookarounds keep function names\n// (LOG10(), ATAN2()) and unquoted sheet names (Q1!A1) from being taken for references.\nconst REF_RE = /(?<![A-Za-z0-9_.$])(?:(\\$?)([A-Za-z]{1,3})(\\$?)(\\d+)(?![A-Za-z0-9_(!])|(\\$?)([A-Za-z]{1,3}):(\\$?)([A-Za-z]{1,3})(?![A-Za-z0-9_(!])|(\\$?)(\\d+):(\\$?)(\\d+)(?![0-9!]))/g;\n\n// How a reference sits in the formula: alone, or as the first / last cell of a range\nexport type RefRole = 'single' | 'start' | 'end';\n// Returns the new 0-based column / 1-based row, or null when the reference no longer exists (#REF!).\n// `sheet` is the sheet qualifier written before the reference, if any (unquoted).\nexport type RefMapper = (value: number, absolute: boolean, role: RefRole, sheet: string | undefined) => number | null;\n\nconst unquoteSheet = (quoted: string) => quoted.slice(1, -1).replace(/''/g, \"'\");\n\n// Rewrites every A1 reference in a formula through mapCol / mapRow. String literals are left alone.\n// A reference moved off the sheet, or a range turned inside out, becomes #REF!.\nexport function mapFormulaRefs(formula: string, mapCol: RefMapper, mapRow: RefMapper): string {\n const parts = formula.split(/(\"(?:[^\"]|\"\")*\"|'(?:[^']|'')*')/);\n for (let i = 0; i < parts.length; i += 2) {\n const part = parts[i];\n let prevEnd = -1;\n let prevSheet: string | undefined;\n let prevRow = 0;\n let prevCol = 0;\n parts[i] = part.replace(REF_RE, (m: string, ...g: any[]) => {\n const offset: number = g[12];\n const before = part.slice(0, offset);\n const isEnd = before.endsWith(':') && prevEnd === offset - 1;\n let sheet: string | undefined;\n if (isEnd) sheet = prevSheet;\n else if (before.endsWith('!')) {\n // [1]Sheet!A1 points into another workbook: \"[\" can't be in a sheet name, so no sheet matches it\n const plain = /(\\]?)([A-Za-z0-9_.\\u00C0-\\uFFFF]+)!$/.exec(before);\n sheet = plain ? (plain[1] ? `[external]${plain[2]}` : plain[2])\n : offset === 1 && i > 0 && parts[i - 1].startsWith(\"'\") ? unquoteSheet(parts[i - 1]) : undefined;\n }\n const role: RefRole = isEnd ? 'end' : part[offset + m.length] === ':' ? 'start' : 'single';\n // The end of a range pushed past the sheet's edge stays at the edge, as in Excel (SUM(B1:B1048576))\n const col = (abs: string, letters: string, r: RefRole) => {\n let c = mapCol(colIndex(letters), !!abs, r, sheet);\n if (c !== null && c >= MAX_COLUMNS && r === 'end' && colIndex(letters) < MAX_COLUMNS) c = MAX_COLUMNS - 1;\n return c !== null && c >= 0 && c < MAX_COLUMNS ? abs + colLetter(c) : null;\n };\n const row = (abs: string, digits: string, r: RefRole) => {\n let n = mapRow(parseInt(digits, 10), !!abs, r, sheet);\n if (n !== null && n > MAX_ROWS && r === 'end' && parseInt(digits, 10) <= MAX_ROWS) n = MAX_ROWS;\n return n !== null && n >= 1 && n <= MAX_ROWS ? n : null;\n };\n prevEnd = offset + m.length;\n prevSheet = sheet;\n let out: string | null;\n if (g[1] !== undefined) {\n const c = col(g[0], g[1], role), r = row(g[2], g[3], role);\n const ci = c === null ? 0 : colIndex(c.replace('$', ''));\n // The end of a range must not land above or left of its start (rows or columns removed under it)\n const inverted = role === 'end' && (r !== null && r < prevRow || c !== null && ci < prevCol);\n prevRow = r ?? 0;\n prevCol = ci;\n out = c === null || r === null || inverted ? null : c + g[2] + r;\n } else if (g[5] !== undefined) {\n const a = col(g[4], g[5], 'start'), b = col(g[6], g[7], 'end');\n out = a === null || b === null || colIndex(b.replace('$', '')) < colIndex(a.replace('$', '')) ? null : `${a}:${b}`;\n } else {\n const a = row(g[8], g[9], 'start'), b = row(g[10], g[11], 'end');\n out = a === null || b === null || b < a ? null : `${g[8]}${a}:${g[10]}${b}`;\n }\n return out ?? '#REF!';\n // A range with a dead end is dead as a whole\n }).replace(/\\$?[A-Za-z]{1,3}\\$?\\d+:#REF!|#REF!:\\$?[A-Za-z]{1,3}\\$?\\d+/g, '#REF!');\n }\n return parts.join('');\n}\n\n// Moves the relative references of a formula by (rows, cols), as Excel does when it fills a shared\n// formula from its anchor cell into the other cells of the range. Absolute parts ($A$1) stay put.\nexport function shiftFormula(formula: string, rows: number, cols: number): string {\n if (!rows && !cols) return formula;\n return mapFormulaRefs(formula, (c, abs) => (abs ? c : c + cols), (r, abs) => (abs ? r : r + rows));\n}\n\n// Date -> Excel 1900-system serial (UTC). Serials 1..60 sit one day early because of Excel's\n// phantom 1900-02-29, mirroring excelToIsoDate on the read side.\n// Dates before 1900-01-01 have no serial in Excel; they come out as small/negative numbers.\nexport function dateToSerial(d: Date): number {\n const serial = (d.getTime() - Date.UTC(1899, 11, 30)) / 86400000;\n return serial >= 2 && serial < 61 ? serial - 1 : serial;\n}\n\n// Inverse of decodeXString: literal \"_xHHHH_\" text is protected, and characters XML cannot carry\n// (control characters) or would normalise away (CR) are written as escapes.\nexport function encodeXString(s: string): string {\n return s\n .replace(/_(?=x[0-9A-Fa-f]{4}_)/g, '_x005F_')\n .replace(/[\\x00-\\x08\\x0B\\x0C\\r\\x0E-\\x1F\\uFFFE\\uFFFF]/g, c => `_x${c.charCodeAt(0).toString(16).toUpperCase().padStart(4, '0')}_`);\n}\n\n// The format SheetWriter gives a date without one: the time only when there is one\nexport const defaultDateFormat = (d: Date) => d.getTime() % 86400000 === 0 ? 'yyyy-mm-dd' : 'yyyy-mm-dd hh:mm:ss';\n\n// True when a number format renders dates/times. Ignores quoted text, escapes, colours and\n// locale tags, so \"0 \\\"days\\\"\", \"[Red]0.0\" and \"#,##0 \\\"USD\\\"\" are not mistaken for dates.\nexport function isDateFormatCode(code: string): boolean {\n const stripped = code\n .replace(/\"[^\"]*\"/g, '')\n .replace(/\\\\./g, '')\n .replace(/[_*]./g, '')\n .replace(/\\[(?!(?:h+|m+|s+)\\])[^\\]]*\\]/gi, ''); // keep elapsed-time [h] [mm] [ss]\n return /[ymdhs]/i.test(stripped) || /\\[(?:h+|m+|s+)\\]/i.test(stripped);\n}\n\n// After cells change, cached formula results are stale: mark the workbook for a full recalculation\n// on open, and drop the calculation chain, which lists formula cells by address (Excel reports a\n// broken file when a listed cell no longer holds a formula). Returns the parts to rewrite and the\n// parts to leave out of the package.\nexport async function recalcOnOpen(\n readText: (path: string) => Promise<string>,\n parts: WorkbookParts,\n workbookXml = parts.workbookXml,\n): Promise<{ replace: Map<string, string>; drop: Set<string> }> {\n let wb = workbookXml;\n if (/<(?:\\w+:)?calcPr\\b/.test(wb)) {\n wb = wb.replace(/<((?:\\w+:)?)calcPr\\b([^>]*?)(\\/?)>/, (_m, p: string, attrs: string, slash: string) =>\n `<${p}calcPr${attrs.replace(/\\sfullCalcOnLoad=\"[^\"]*\"/, '')} fullCalcOnLoad=\"1\"${slash}>`);\n } else {\n // calcPr comes before these in CT_Workbook\n const p = /<((?:\\w+:)?)workbook\\b/.exec(wb)?.[1] ?? '';\n const at = wb.search(/<(?:\\w+:)?(?:oleSize|customWorkbookViews|pivotCaches|smartTagPr|smartTagTypes|webPublishing|fileRecoveryPr|webPublishObjects|extLst)\\b|<\\/(?:\\w+:)?workbook>/);\n wb = wb.slice(0, at) + `<${p}calcPr fullCalcOnLoad=\"1\"/>` + wb.slice(at);\n }\n const replace = new Map([[parts.workbookPath, wb]]);\n const drop = new Set<string>();\n const calcChain = (await partRelationships(readText, parts.workbookPath)).find(r => r.type.endsWith('/calcChain'))?.path;\n if (calcChain) {\n drop.add(calcChain);\n const relsPath = relsPathOf(parts.workbookPath);\n replace.set(relsPath, (await readText(relsPath)).replace(/<(?:\\w+:)?Relationship\\b[^>]*?Type=\"[^\"]*\\/calcChain\"[^>]*\\/>/, ''));\n const escaped = calcChain.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n replace.set('[Content_Types].xml', (await readText('[Content_Types].xml'))\n .replace(new RegExp(`<(?:\\\\w+:)?Override\\\\b[^>]*?PartName=\"/${escaped}\"[^>]*/>`), ''));\n }\n return { replace, drop };\n}\n\n// Excel refuses to open a workbook that breaks these rules\nexport function validateSheetName(name: string, existing: Iterable<string>): void {\n if (!name || name.length > 31 || /[\\\\/?*:[\\]\\x00-\\x1F\\uFFFE\\uFFFF]/.test(name) || name.startsWith(\"'\") || name.endsWith(\"'\")) {\n throw new Error(`Invalid sheet name \"${name}\": 1-31 characters, none of \\\\ / ? * : [ ] or control characters, and no leading or trailing apostrophe.`);\n }\n for (const other of existing) {\n if (other.toLowerCase() === name.toLowerCase()) throw new Error(`Duplicate sheet name \"${name}\".`);\n }\n}\n\n// Characters XML 1.0 can't carry at all. Text that allows _xHHHH_ escapes keeps them through\n// encodeXString first; anywhere else (names, properties, formulas) they are dropped.\nexport const INVALID_XML_CHARS = /[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\uFFFE\\uFFFF]/g;\nexport const escapeXml = (val: string) =>\n val.replace(INVALID_XML_CHARS, '').replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\"/g, '"');\nexport const escapeRe = (s: string) => s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n// Out-of-range references (�) stay as written instead of throwing\nconst fromCodePoint = (cp: number, m: string) => (cp <= 0x10ffff ? String.fromCodePoint(cp) : m);\nexport const unescapeXml = (s: string) =>\n s.replace(/&(?:#x([0-9a-fA-F]+)|#(\\d+)|(amp|lt|gt|quot|apos));/g, (m, hex, dec, name) =>\n hex ? fromCodePoint(parseInt(hex, 16), m) : dec ? fromCodePoint(parseInt(dec, 10), m)\n : ({ amp: '&', lt: '<', gt: '>', quot: '\"', apos: \"'\" } as Record<string, string>)[name] ?? m);\n\n// Elements named by `names` (an alternation such as 'comment' or 'a|b'), any prefix, in document order.\n// One pass with indexOf: lazy regexes like <x>[\\s\\S]*?</x> restart at every opener and turn quadratic\n// when the closing tag is missing. Same-name nesting is not supported; an unclosed element ends the scan.\nexport function* xmlElements(xml: string, names: string): Generator<{ name: string; attrs: string; body: string; whole: string }> {\n const opener = new RegExp(`<(\\\\w+:)?(${names})(?=[\\\\s/>])`, 'y');\n for (let i = xml.indexOf('<'); i !== -1; i = xml.indexOf('<', i)) {\n opener.lastIndex = i;\n const m = opener.exec(xml);\n if (!m) { i++; continue; }\n const gt = xml.indexOf('>', opener.lastIndex);\n if (gt === -1) return;\n if (xml[gt - 1] === '/') {\n yield { name: m[2], attrs: xml.slice(opener.lastIndex, gt - 1), body: '', whole: xml.slice(i, gt + 1) };\n i = gt + 1;\n continue;\n }\n const close = `</${m[1] ?? ''}${m[2]}>`;\n const end = xml.indexOf(close, gt);\n if (end === -1) return;\n yield { name: m[2], attrs: xml.slice(opener.lastIndex, gt), body: xml.slice(gt + 1, end), whole: xml.slice(i, end + close.length) };\n i = end + close.length;\n }\n}\n","import type { CellFont } from './types';\n\n// Excel's default indexed palette (ECMA-376 Part 1, 18.8.27); 64/65 are the system text/background colours\nconst DEFAULT_INDEXED = (\n '000000FFFFFFFF000000FF000000FFFFFF00FF00FF00FFFF' +\n '000000FFFFFFFF000000FF000000FFFFFF00FF00FF00FFFF' +\n '800000008000000080808000800080008080C0C0C0808080' +\n '9999FF993366FFFFCCCCFFFF660066FF80800066CCCCCCFF' +\n '000080FF00FFFFFF0000FFFF8000808000000080800000FF' +\n '00CCFFCCFFFFCCFFCCFFFF9999CCFFFF99CCCC99FFFFCC99' +\n '3366FF33CCCC99CC00FFCC00FF9900FF6600666699969696' +\n '003366339966003300333300993300993366333399333333' +\n '000000FFFFFF'\n).match(/.{6}/g)!.map(hex => 'FF' + hex);\n\n// Theme colour slots in the order Excel indexes them: lt1/dk1 and lt2/dk2 are swapped relative to the XML\nconst THEME_SLOTS = ['lt1', 'dk1', 'lt2', 'dk2', 'accent1', 'accent2', 'accent3', 'accent4', 'accent5', 'accent6', 'hlink', 'folHlink'];\n\nexport function parseThemeColors(themeXml: string): string[] {\n const scheme = /<(?:\\w+:)?clrScheme\\b[\\s\\S]*?<\\/(?:\\w+:)?clrScheme>/.exec(themeXml)?.[0] ?? '';\n return THEME_SLOTS.map(slot => {\n const body = new RegExp(`<(?:\\\\w+:)?${slot}>([\\\\s\\\\S]*?)</(?:\\\\w+:)?${slot}>`).exec(scheme)?.[1] ?? '';\n const hex = /srgbClr\\s+val=\"([0-9A-Fa-f]{6})\"/.exec(body)?.[1] ?? /lastClr=\"([0-9A-Fa-f]{6})\"/.exec(body)?.[1];\n return hex ? 'FF' + hex.toUpperCase() : '';\n });\n}\n\n// Excel's tint: scale HSL lightness towards black (tint < 0) or white (tint > 0).\n// Float HSL lands within 2 per channel of Excel's rendering; Excel's exact rounding is undocumented.\nfunction applyTint(argb: string, tint: number): string {\n const [r, g, b] = [2, 4, 6].map(i => parseInt(argb.slice(i, i + 2), 16) / 255);\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h = 0, s = 0, l = (max + min) / 2;\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = max === r ? (g - b) / d + (g < b ? 6 : 0) : max === g ? (b - r) / d + 2 : (r - g) / d + 4;\n h /= 6;\n }\n l = tint < 0 ? l * (1 + tint) : l * (1 - tint) + tint;\n const hue = (p: number, q: number, t: number) => {\n t = (t + 1) % 1;\n return t < 1 / 6 ? p + (q - p) * 6 * t : t < 1 / 2 ? q : t < 2 / 3 ? p + (q - p) * (2 / 3 - t) * 6 : p;\n };\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s, p = 2 * l - q;\n const rgb = s === 0 ? [l, l, l] : [hue(p, q, h + 1 / 3), hue(p, q, h), hue(p, q, h - 1 / 3)];\n return argb.slice(0, 2) + rgb.map(c => Math.round(c * 255).toString(16).padStart(2, '0')).join('').toUpperCase();\n}\n\nexport type ColorResolver = (attrs: Record<string, string>) => string | undefined;\n\n// Turns a CT_Color (rgb / theme / indexed, optional tint) into ARGB hex; \"auto\" and unknown slots give undefined\nexport function colorResolver(theme: string[], indexed: string[] = DEFAULT_INDEXED): ColorResolver {\n return a => {\n let argb: string | undefined;\n if (a['rgb']) argb = a['rgb'].length === 6 ? 'FF' + a['rgb'] : a['rgb'];\n else if (a['theme'] !== undefined) argb = theme[parseInt(a['theme'], 10)] || undefined;\n else if (a['indexed'] !== undefined) argb = (indexed[parseInt(a['indexed'], 10)] ?? DEFAULT_INDEXED[parseInt(a['indexed'], 10)]) || undefined;\n if (!argb || !/^[0-9A-Fa-f]{8}$/.test(argb)) return undefined;\n const tint = Number(a['tint'] || 0);\n return tint ? applyTint(argb.toUpperCase(), Math.max(-1, Math.min(1, tint))) : argb.toUpperCase();\n };\n}\n\n// One child element of <font> (styles) or <rPr> (rich text runs). Returns false for unrelated elements.\nexport function applyFontElement(font: CellFont, name: string, a: Record<string, string>, color: (a: Record<string, string>) => void): boolean {\n const on = a['val'] !== '0' && a['val'] !== 'false';\n switch (name) {\n case 'b': font.bold = on; return true;\n case 'i': font.italic = on; return true;\n case 'u': font.underline = a['val'] !== 'none'; return true;\n case 'sz': font.size = Number(a['val']); return true;\n case 'name': case 'rFont': font.name = a['val']; return true;\n case 'color': color(a); return true;\n }\n return false;\n}\n","// Renders cell values the way Excel (en-US) displays them for a number format code.\n\nconst MONTHS = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\nconst DAYS = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n\n// t: lit, num (0 # ? . , % / E+ E-), date (y m d h s, and n for minutes), elapsed ([h] [m] [s]), ampm, text (@), general\ninterface Tok { t: string; v: string; n?: number }\ninterface Section { toks: Tok[]; cond?: [string, number]; date: boolean; text: boolean }\n\nconst cache = new Map<string, Section[]>();\n\nexport function formatValue(value: number | string | boolean | Date | null | undefined, code: string, date1904 = false): string {\n if (value == null) return '';\n if (typeof value === 'boolean') return value ? 'TRUE' : 'FALSE';\n if (value instanceof Date) value = toSerial(value, date1904);\n let secs = cache.get(code);\n if (!secs) {\n if (cache.size >= 1000) cache.clear(); // codes come from files, so keep the cache bounded\n cache.set(code, secs = splitSections(code.trim() ? code : 'General').map(parseSection));\n }\n const text = secs.length === 4 ? secs[3] : secs[secs.length - 1].text ? secs[secs.length - 1] : undefined;\n if (typeof value === 'string') return text ? text.toks.map(t => t.t === 'text' ? value : t.v).join('') : value;\n if (!Number.isFinite(value)) return String(value);\n const [sec, signed] = pick(secs.slice(0, text ? secs.length - 1 : 3), value);\n if (!sec) return general(value);\n const neg = value < 0 && signed, x = Math.abs(value);\n if (sec.date) return neg ? general(value) : fmtDate(sec.toks, x, date1904);\n return (neg ? '-' : '') + fmtNumber(sec.toks, x);\n}\n\nfunction toSerial(d: Date, date1904: boolean): number {\n const days = d.getTime() / 864e5;\n if (date1904) return days + 24107;\n const s = days + 25569;\n return s < 61 ? s - 1 : s; // Excel's phantom 1900-02-29 is serial 60\n}\n\nfunction splitSections(code: string): string[] {\n const out: string[] = [];\n let cur = '', quoted = false, bracket = false;\n for (let i = 0; i < code.length; i++) {\n const c = code[i];\n if (c === ';' && !quoted && !bracket) { out.push(cur); cur = ''; continue; }\n cur += c;\n if (quoted) quoted = c !== '\"';\n else if (c === '\"') quoted = true;\n else if ((c === '\\\\' || c === '_' || c === '*') && i + 1 < code.length) cur += code[++i];\n else if (c === '[') bracket = true;\n else if (c === ']') bracket = false;\n }\n out.push(cur);\n return out.slice(0, 4);\n}\n\nfunction parseSection(s: string): Section {\n const toks: Tok[] = [];\n let cond: [string, number] | undefined;\n const lit = (v: string) => toks.push({ t: 'lit', v });\n // fractional seconds like ss.00 attach to the seconds token\n const subsec = (i: number, tok: Tok) => {\n const m = /^\\.0+/.exec(s.slice(i + 1));\n if (m) tok.n = m[0].length - 1;\n toks.push(tok);\n return m ? i + m[0].length : i;\n };\n for (let i = 0; i < s.length; i++) {\n const c = s[i], lc = c.toLowerCase();\n if (c === '\"') {\n const j = s.indexOf('\"', i + 1), end = j < 0 ? s.length : j;\n lit(s.slice(i + 1, end));\n i = end;\n } else if (c === '\\\\') lit(s[++i] ?? '');\n else if (c === '_') { i++; lit(' '); }\n else if (c === '*') i++;\n else if (c === '[') {\n const j = s.indexOf(']', i), end = j < 0 ? s.length : j, b = s.slice(i + 1, end);\n i = end;\n const m = /^(<=|>=|<>|<|>|=)\\s*(-?[\\d.]+(?:e[+-]?\\d+)?)$/i.exec(b);\n if (m) cond = [m[1], +m[2]];\n else if (/^(h+|m+|s+)$/i.test(b)) i = subsec(i, { t: 'elapsed', v: b.toLowerCase() });\n else if (b[0] === '$') lit(b.slice(1).split('-')[0]);\n // colors and other tags are ignored\n } else if (s.slice(i, i + 7).toLowerCase() === 'general') { toks.push({ t: 'general', v: '' }); i += 6; }\n else if (s.slice(i, i + 5).toUpperCase() === 'AM/PM') { toks.push({ t: 'ampm', v: 'AM/PM' }); i += 4; }\n else if (/^a\\/p$/i.test(s.slice(i, i + 3))) { toks.push({ t: 'ampm', v: s.slice(i, i + 3) }); i += 2; }\n else if ('ymdhs'.includes(lc)) {\n let j = i;\n while (s[j + 1]?.toLowerCase() === lc) j++;\n i = subsec(j, { t: 'date', v: lc.repeat(j - i + 1) });\n } else if (lc === 'e' && (s[i + 1] === '+' || s[i + 1] === '-')) toks.push({ t: 'num', v: 'E' + s[++i] });\n else if ('0#?.,%/'.includes(c)) toks.push({ t: 'num', v: c });\n else if (c === '@') toks.push({ t: 'text', v: '' });\n else lit(c);\n }\n // m means minutes right after an hour or right before a second\n const dt = toks.filter(t => t.t === 'date' || t.t === 'elapsed');\n dt.forEach((t, k) => {\n if (t.t === 'date' && t.v[0] === 'm' && (dt[k - 1]?.v[0] === 'h' || dt[k + 1]?.v[0] === 's')) t.v = 'n'.repeat(t.v.length);\n });\n return { toks, cond, date: dt.length > 0 || toks.some(t => t.t === 'ampm'), text: toks.some(t => t.t === 'text') };\n}\n\nfunction test([op, n]: [string, number], v: number): boolean {\n return op === '<' ? v < n : op === '<=' ? v <= n : op === '>' ? v > n : op === '>=' ? v >= n : op === '<>' ? v !== n : v === n;\n}\n\n// Returns the section for v and whether a minus sign should be shown\nfunction pick([a, b, c]: Section[], v: number): [Section | undefined, boolean] {\n if (!a) return [undefined, true];\n if (a.cond || b?.cond) {\n const s = a.cond && test(a.cond, v) ? a : b?.cond && test(b.cond, v) ? b : a.cond && b?.cond ? c : b;\n // a section meant for negatives writes its own sign\n return [s, !(s?.cond && s.cond[0][0] === '<' && s.cond[1] <= 0)];\n }\n if (v < 0 && b) return [b, false];\n if (v === 0 && c) return [c, true];\n return [a, true];\n}\n\n// |x| as 15 significant digits and a decimal exponent, the precision Excel works in\nfunction sig15(x: number): [string, number] {\n const [m, e] = Math.abs(x).toExponential(14).split('e');\n return [m.replace('.', ''), +e];\n}\n\n// |x| rounded half away from zero to n decimals, as [integer digits without leading zeros, n decimals]\nfunction fixed(x: number, n: number): [string, string] {\n let [ds, e] = sig15(x), p = e + 1;\n if (p < 0) { ds = '0'.repeat(-p) + ds; p = 0; }\n ds = ds.padEnd(p + n + 1, '0');\n let keep = ds.slice(0, p + n);\n if (ds[p + n] >= '5') keep = (BigInt(keep || '0') + BigInt(1)).toString().padStart(keep.length, '0');\n return [keep.slice(0, keep.length - n).replace(/^0+/, ''), n ? keep.slice(-n) : ''];\n}\n\nfunction general(v: number): string {\n if (!v) return '0';\n const sign = v < 0 ? '-' : '';\n let [ds, e] = sig15(v);\n // fits in 11 characters as a plain number\n if (e >= -4 && e <= 10) {\n const [i, f] = fixed(v, Math.max(0, 9 - Math.max(e, 0)));\n const t = f.replace(/0+$/, '');\n if (i.length <= 11) return sign + (i || '0') + (t ? '.' + t : '');\n }\n let m = ds.slice(0, 6);\n if (ds[6] >= '5') m = String(+m + 1);\n if (m.length > 6) { m = m.slice(0, 6); e++; }\n return sign + m[0] + ('.' + m.slice(1)).replace(/\\.?0+$/, '') + 'E' + (e < 0 ? '-' : '+') + String(Math.abs(e)).padStart(2, '0');\n}\n\nconst isPh = (t: Tok | undefined) => t?.t === 'num' && '0#?'.includes(t.v);\n\n// Right-aligns digits into placeholders; the first placeholder takes any overflow\nfunction fillInt(toks: Tok[], idx: number[], digits: string, out: string[], group = false) {\n let j = digits.length;\n for (let k = idx.length - 1; k >= 0; k--) {\n const p = toks[idx[k]].v;\n if (j > 0) { out[idx[k]] = k ? digits[--j] : digits.slice(0, j); if (!k) j = 0; }\n else out[idx[k]] = p === '0' ? '0' : p === '?' ? ' ' : '';\n }\n if (!group) return;\n let n = 0;\n for (let k = idx.length - 1; k >= 0; k--) {\n let s = '';\n for (const c of [...out[idx[k]]].reverse()) {\n if (c >= '0' && c <= '9') { if (n && n % 3 === 0) s = ',' + s; n++; }\n s = c + s;\n }\n out[idx[k]] = s;\n }\n}\n\n// Trailing zeros are dropped for # and blanked for ?\nfunction fillDec(toks: Tok[], idx: number[], frac: string, out: string[]) {\n let trailing = true;\n for (let k = idx.length - 1; k >= 0; k--) {\n const p = toks[idx[k]].v;\n if (trailing && frac[k] === '0' && p !== '0') out[idx[k]] = p === '?' ? ' ' : '';\n else { trailing = false; out[idx[k]] = frac[k]; }\n }\n}\n\nfunction fmtNumber(toks: Tok[], x: number): string {\n const out = toks.map(t => t.t === 'general' ? general(x) : t.t === 'num' && (t.v === ',' || isPh(t)) ? '' : t.v);\n const idx = toks.flatMap((t, i) => isPh(t) ? [i] : []);\n if (!idx.length) return out.join('');\n x *= 100 ** toks.filter(t => t.t === 'num' && t.v === '%').length;\n\n const slash = toks.findIndex(t => t.t === 'num' && t.v === '/');\n if (slash > 0 && isPh(toks[slash - 1])) return fraction(toks, idx, slash, x, out);\n\n const e = toks.findIndex(t => t.t === 'num' && t.v[0] === 'E');\n const end = e >= 0 ? e : toks.length;\n const dot = toks.findIndex((t, i) => t.t === 'num' && t.v === '.' && i < end);\n const intEnd = dot >= 0 ? dot : end;\n const intIdx = idx.filter(i => i < intEnd), decIdx = idx.filter(i => i > intEnd && i < end);\n\n if (e >= 0) {\n const ip = Math.max(intIdx.length, 1);\n // with # in the integer part the exponent is a multiple of the integer digit count (engineering)\n const eng = ip > 1 && intIdx.some(i => toks[i].v === '#');\n const expOf = (p: number) => eng ? Math.floor(p / ip) * ip : p - ip + 1;\n let [ds, p] = x ? sig15(x) : ['0', 0];\n let exp = x ? expOf(p) : 0;\n let [mi, mf] = fixed(Number(`${ds[0]}.${ds.slice(1)}e${p - exp}`), decIdx.length);\n if (x && mi.length > p - exp + 1) { exp = expOf(++p); [mi, mf] = fixed(10 ** (p - exp), decIdx.length); }\n fillInt(toks, intIdx, mi, out);\n fillDec(toks, decIdx, mf, out);\n out[e] = 'E' + (exp < 0 ? '-' : toks[e].v === 'E+' ? '+' : '');\n fillInt(toks, idx.filter(i => i > e), String(Math.abs(exp)), out);\n return out.join('');\n }\n\n // a comma with no digit placeholder after it scales by 1000, one between digits groups thousands\n let scale = 0, group = false;\n toks.forEach((t, i) => {\n if (t.t !== 'num' || t.v !== ',') return;\n const bound = i < intEnd ? intEnd : end;\n if (!idx.some(j => j > i && j < bound)) scale++;\n else if (i < intEnd && idx.some(j => j < i)) group = true;\n });\n const [int, frac] = fixed(x / 1000 ** scale, decIdx.length);\n fillInt(toks, intIdx, int, out, group);\n fillDec(toks, decIdx, frac, out);\n return out.join('');\n}\n\nfunction fraction(toks: Tok[], idx: number[], slash: number, x: number, out: string[]): string {\n let a = slash - 1;\n while (isPh(toks[a - 1])) a--;\n let b = slash + 1;\n while (b < toks.length && (isPh(toks[b]) || toks[b].t === 'lit' && /^\\d$/.test(toks[b].v))) b++;\n const numIdx = idx.filter(i => i >= a && i < slash), intIdx = idx.filter(i => i < a);\n const denIdx = Array.from({ length: b - slash - 1 }, (_, k) => slash + 1 + k);\n const denText = denIdx.map(i => toks[i].v).join('');\n const fixedDen = /^[1-9]\\d*$/.test(denText) ? +denText : 0;\n\n let whole = intIdx.length ? Math.floor(x) : 0, n: number, d: number;\n const f = x - whole;\n if (fixedDen) { d = fixedDen; n = Math.round(f * d); }\n else {\n [n, d] = bestFraction(f, 10 ** Math.min(denIdx.length, 15) - 1);\n }\n if (intIdx.length && n === d) { whole++; n = 0; }\n\n fillInt(toks, intIdx, whole || !n ? String(whole) : '', out);\n fillInt(toks, numIdx, String(n), out);\n const ds = String(d);\n denIdx.forEach((i, k) => {\n const p = toks[i].v;\n out[i] = fixedDen ? p : ds[k] ?? (p === '?' ? ' ' : p === '0' ? '0' : '');\n });\n // a whole number blanks out the fraction but keeps its width\n if (intIdx.length && !n) for (let i = a; i < b; i++) out[i] = out[i].replace(/./g, ' ');\n return out.join('');\n}\n\n// Best approximation of f in [0, 1) with a denominator up to max, smallest denominator on ties.\n// Continued fractions keep this to a few dozen steps; trying every denominator hung on codes like # ?/??????????.\nexport function bestFraction(f: number, max: number): [number, number] {\n let n = Math.round(f), d = 1, err = Math.abs(f - n);\n const consider = (p: number, q: number) => {\n const e = Math.abs(f - p / q);\n if (q >= 1 && q <= max && (e < err - 1e-12 || Math.abs(e - err) <= 1e-12 && q < d)) { n = p; d = q; err = e; }\n };\n let [p0, q0, p1, q1] = [0, 1, 1, 0];\n let x = f;\n for (let i = 0; i < 64 && err; i++) {\n const a = Math.floor(x);\n const [p2, q2] = [a * p1 + p0, a * q1 + q0];\n if (q2 > max) {\n // the best within max may be a semiconvergent between the last two convergents\n const k = Math.floor((max - q0) / q1);\n for (const j of [k, Math.ceil(a / 2)]) if (j >= 1 && j <= k) consider(j * p1 + p0, j * q1 + q0);\n break;\n }\n consider(p2, q2);\n [p0, q0, p1, q1] = [p1, q1, p2, q2];\n if (x - a < 1e-15) break;\n x = 1 / (x - a);\n }\n return [n, d];\n}\n\n// Calendar date for an integer serial: [year, month, day, weekday]\nfunction ymd(days: number, date1904: boolean): number[] {\n if (date1904) {\n const dt = new Date(Date.UTC(1904, 0, 1 + days));\n return [dt.getUTCFullYear(), dt.getUTCMonth() + 1, dt.getUTCDate(), dt.getUTCDay()];\n }\n // Excel treats 1900 as a leap year: serial 1 is 1900-01-01 (a Sunday to Excel), 60 is 1900-02-29, 0 is 1900-01-00\n const wd = (days + 6) % 7;\n if (days === 0) return [1900, 1, 0, wd];\n if (days === 60) return [1900, 2, 29, wd];\n const dt = new Date(Date.UTC(1899, 11, days < 60 ? 31 + days : 30 + days));\n return [dt.getUTCFullYear(), dt.getUTCMonth() + 1, dt.getUTCDate(), wd];\n}\n\nfunction fmtDate(toks: Tok[], v: number, date1904: boolean): string {\n // Excel rounds to the smallest shown unit (whole seconds unless fractions are shown) before splitting\n const k = Math.max(0, ...toks.map(t => t.n ?? 0)), per = 10 ** k;\n const ticks = Math.round(v * 86400 * per);\n const days = Math.floor(ticks / (86400 * per)), rem = ticks - days * 86400 * per;\n const sub = rem % per, secs = (rem - sub) / per;\n const H = Math.floor(secs / 3600), M = Math.floor(secs / 60) % 60, S = secs % 60;\n const [y, mo, d, wd] = ymd(days, date1904);\n const h12 = toks.some(t => t.t === 'ampm');\n const pad = (n: number, w: number) => String(n).padStart(w, '0');\n const frac = (t: Tok) => t.n ? '.' + pad(sub, k).slice(0, t.n) : '';\n return toks.map(t => {\n const w = t.v.length;\n if (t.t === 'elapsed') {\n const total = t.v[0] === 'h' ? days * 24 + H : t.v[0] === 'm' ? (days * 24 + H) * 60 + M : days * 86400 + secs;\n return pad(total, w) + frac(t);\n }\n if (t.t === 'ampm') return w > 3 ? (H < 12 ? 'AM' : 'PM') : H < 12 ? t.v[0] : t.v[2];\n if (t.t !== 'date') return t.v;\n switch (t.v[0]) {\n case 'y': return w > 2 ? pad(y, 4) : pad(y % 100, 2);\n case 'm': return w === 1 ? String(mo) : w === 2 ? pad(mo, 2) : w === 3 ? MONTHS[mo - 1].slice(0, 3) : w === 5 ? MONTHS[mo - 1][0] : MONTHS[mo - 1];\n case 'd': return w === 1 ? String(d) : w === 2 ? pad(d, 2) : w === 3 ? DAYS[wd].slice(0, 3) : DAYS[wd];\n case 'h': { const h = h12 ? H % 12 || 12 : H; return w > 1 ? pad(h, 2) : String(h); }\n case 'n': return w > 1 ? pad(M, 2) : String(M);\n default: return (w > 1 ? pad(S, 2) : String(S)) + frac(t);\n }\n }).join('');\n}\n\n// Number formats Excel does not write into styles.xml (ECMA-376 Part 1, 18.8.30)\nexport const BUILTIN_NUM_FMTS: [number, string][] = [\n [1, '0'], [2, '0.00'], [3, '#,##0'], [4, '#,##0.00'], [9, '0%'], [10, '0.00%'], [11, '0.00E+00'],\n [12, '# ?/?'], [13, '# ??/??'], [14, 'mm-dd-yy'], [15, 'd-mmm-yy'], [16, 'd-mmm'], [17, 'mmm-yy'],\n [18, 'h:mm AM/PM'], [19, 'h:mm:ss AM/PM'], [20, 'h:mm'], [21, 'h:mm:ss'], [22, 'm/d/yy h:mm'],\n [37, '#,##0 ;(#,##0)'], [38, '#,##0 ;[Red](#,##0)'], [39, '#,##0.00;(#,##0.00)'], [40, '#,##0.00;[Red](#,##0.00)'],\n [45, 'mm:ss'], [46, '[h]:mm:ss'], [47, 'mmss.0'], [48, '##0.0E+0'], [49, '@'],\n];\n\n// Formats Excel stores by id only and shows by locale, as en-US Excel shows them\nexport const DISPLAY_NUM_FMTS = new Map<number, string>([\n [5, '\"$\"#,##0_);(\"$\"#,##0)'], [6, '\"$\"#,##0_);[Red](\"$\"#,##0)'], [7, '\"$\"#,##0.00_);(\"$\"#,##0.00)'], [8, '\"$\"#,##0.00_);[Red](\"$\"#,##0.00)'],\n [14, 'm/d/yyyy'], [22, 'm/d/yyyy h:mm'],\n [41, '_(* #,##0_);_(* \\\\(#,##0\\\\);_(* \"-\"_);_(@_)'], [42, '_(\"$\"* #,##0_);_(\"$\"* \\\\(#,##0\\\\);_(\"$\"* \"-\"_);_(@_)'],\n [43, '_(* #,##0.00_);_(* \\\\(#,##0.00\\\\);_(* \"-\"??_);_(@_)'], [44, '_(\"$\"* #,##0.00_);_(\"$\"* \\\\(#,##0.00\\\\);_(\"$\"* \"-\"??_);_(@_)'],\n]);\n\n// Builtin date/time ids (27-36 and 50-58 are dates in CJK locales)\nexport const isBuiltinDateFormat = (id: number) =>\n (id >= 14 && id <= 22) || (id >= 27 && id <= 36) || (id >= 45 && id <= 47) || (id >= 50 && id <= 58);\n","import { XmlToken } from './xml-stream';\nimport { decodeXString, colIndex, shiftFormula, dateToSerial, MAX_COLUMNS, unescapeXml, xmlElements } from './utils';\nimport { applyFontElement, ColorResolver } from './style-reader';\nimport { formatValue } from './number-format';\nimport type { CellStyle, RichTextRun, SheetImage } from './types';\n\nexport type CellValue = string | number | boolean | null;\n\nexport function excelToIsoDate(serial: number, is1904: boolean = false): string {\n let days = Math.floor(serial);\n // Excel stores times with ms precision; rounding avoids 18:29:59.999 for 18:30\n const timeMs = Math.round((serial - days) * 86400000);\n\n let epoch: number;\n if (is1904) {\n // 1904 date system starts on Jan 1, 1904\n epoch = Date.UTC(1904, 0, 1);\n } else {\n // 1900 date system has the leap year bug (phantom Feb 29 1900 = serial 60), so serials\n // 1..60 sit one day later than the 1899-12-30 epoch implies. Serial 0 (pure time) does not.\n if (days >= 1 && days <= 60) days++;\n epoch = Date.UTC(1899, 11, 30);\n }\n\n return new Date(epoch + days * 86400000 + timeMs).toISOString();\n}\n\nexport interface SheetComment {\n ref: string;\n text: string;\n author?: string;\n}\n\n// Notes from a comments part. Threaded comments (Excel 365) also write their text here.\nexport function parseComments(xml: string): SheetComment[] {\n const authors = [...xmlElements(xml, 'author')].map(el => unescapeXml(el.body));\n const out: SheetComment[] = [];\n for (const el of xmlElements(xml, 'comment')) {\n const ref = /\\sref=\"([^\"]*)\"/.exec(el.attrs)?.[1];\n if (!ref) continue;\n let text = '';\n // phonetic hints (rPh) hold their own <t>, which is not part of the note\n for (const t of xmlElements(el.body, 't|rPh')) if (t.name === 't') text += t.body;\n const comment: SheetComment = { ref, text: decodeXString(unescapeXml(text)) };\n const author = authors[parseInt(/\\sauthorId=\"(\\d+)\"/.exec(el.attrs)?.[1] ?? '-1', 10)];\n if (author) comment.author = author;\n out.push(comment);\n }\n return out;\n}\n\n\nexport interface SheetMetadata {\n mergedCells: string[];\n hiddenRows: number[];\n hiddenCols: number[];\n freezePanes?: { row: number; col: number; topLeftCell: string; activePane: string };\n // hyperlink is a URL, or \"#Sheet!A1\" for a place in the workbook (the writer's format)\n hyperlinks: { ref: string; hyperlink: string; tooltip?: string }[];\n}\n\n// Collects the formatted runs (<r>) of one rich string (<si> or <is>)\nexport class RichTextCollector {\n runs: RichTextRun[] = [];\n private run: RichTextRun | undefined;\n private inRPr = false;\n private inText = false;\n\n constructor(private color: ColorResolver) {}\n\n reset() {\n this.runs = [];\n this.run = undefined;\n this.inRPr = this.inText = false;\n }\n\n token(t: XmlToken) {\n if (t.type === 'startElement') {\n if (t.name === 'r') this.run = { text: '' };\n else if (!this.run) return;\n else if (t.name === 'rPr') {\n this.inRPr = true;\n this.run.font = {};\n } else if (this.inRPr) {\n const font = this.run.font!;\n applyFontElement(font, t.name, t.attributes, a => { const c = this.color(a); if (c) font.color = c; });\n } else if (t.name === 't') this.inText = true;\n } else if (t.type === 'endElement') {\n if (t.name === 'rPr') this.inRPr = false;\n else if (t.name === 't') this.inText = false;\n else if (t.name === 'r' && this.run) {\n this.run.text = decodeXString(this.run.text);\n if (this.run.font && !Object.keys(this.run.font).length) delete this.run.font;\n this.runs.push(this.run);\n this.run = undefined;\n }\n } else if (this.inText && this.run) {\n this.run.text += t.value;\n }\n }\n}\n\nexport interface RowData {\n rowNumber: number;\n cells: CellValue[];\n // Only with the `formulas` / `styles` parse options, and only on rows that have any.\n // Indexed like `cells`; formulas have no leading \"=\".\n formulas?: (string | undefined)[];\n styles?: (CellStyle | undefined)[]; // shared between cells with the same style: do not mutate\n richText?: (RichTextRun[] | undefined)[]; // only cells whose text has formatted runs\n formatted?: (string | undefined)[]; // with the `formatted` option: each cell's text as Excel shows it\n // With the `errors` option (.xlsx only): true for cells holding an error value such as #N/A, which\n // `cells` gives as text, to tell them from text that reads \"#N/A\"\n errors?: (true | undefined)[];\n}\n\nexport interface WorksheetOptions {\n formulas?: boolean;\n errors?: boolean;\n cellStyles?: (CellStyle | undefined)[]; // by style index; set to report styles\n numFmts?: (string | undefined)[]; // number format code by style index; set to report formatted text\n richText?: ColorResolver; // set to report rich text runs\n sharedRichText?: Map<number, RichTextRun[]>;\n hyperlinkTargets?: Map<string, string>; // relationship id -> URL\n images?: () => Promise<SheetImage[]>;\n comments?: () => Promise<SheetComment[]>;\n maxPaddingCells?: number; // empty cells added before far-right cells; the reader ties it to maxUncompressedBytes\n}\n\nexport class ParseResult implements AsyncIterable<RowData> {\n constructor(\n private generator: AsyncGenerator<RowData>,\n private metadataPromise: Promise<SheetMetadata>,\n private images: () => Promise<SheetImage[]> = async () => [],\n private comments: () => Promise<SheetComment[]> = async () => []\n ) {}\n\n [Symbol.asyncIterator]() {\n return this.generator;\n }\n\n async getMetadata(): Promise<SheetMetadata> {\n return this.metadataPromise;\n }\n\n // The sheet's pictures, in the writer's `images` format. Image files are read on this call.\n getImages(): Promise<SheetImage[]> {\n return this.images();\n }\n\n // The sheet's notes (comments), in sheet order\n getComments(): Promise<SheetComment[]> {\n return this.comments();\n }\n}\n\n// \"2026-10-08T14:05:00\" or \"2026-10-08\" (a t=\"d\" cell, no zone: UTC) as an ISO string; undefined when unreadable\nfunction isoDateCell(text: string): string | undefined {\n const t = text.trim();\n const zoned = /(?:Z|[+-]\\d\\d:?\\d\\d)$/.test(t) ? t : t.includes('T') ? t + 'Z' : t + 'T00:00:00Z';\n const d = new Date(zoned);\n return isNaN(d.getTime()) ? undefined : d.toISOString();\n}\n\nexport function parseWorksheet(\n xmlTokenStream: ReadableStream<XmlToken | XmlToken[]>,\n sharedStrings: Map<number, string>,\n styles: Map<number, number>,\n is1904: boolean = false,\n options: WorksheetOptions = {}\n): ParseResult {\n let resolveMeta!: (m: SheetMetadata) => void;\n let rejectMeta!: (e: any) => void;\n const metadataPromise = new Promise<SheetMetadata>((res, rej) => {\n resolveMeta = res;\n rejectMeta = rej;\n });\n // The row iterator already surfaces parse errors; callers who never ask for metadata\n // must not get an unhandled rejection (fatal by default in Node).\n metadataPromise.catch(() => {});\n const mergedCells: string[] = [];\n const hiddenRows: number[] = [];\n const hiddenColMarks = new Uint8Array(MAX_COLUMNS + 1); // by column; repeated <col> ranges cost nothing extra\n let padding = 0;\n const hyperlinks: SheetMetadata['hyperlinks'] = [];\n let freezePanes: SheetMetadata['freezePanes'] = undefined;\n\n async function* generateRows(): AsyncGenerator<RowData> {\n const reader = xmlTokenStream.getReader();\n \n let currentRow: CellValue[] = [];\n let currentCellType: string | null = null;\n let currentStyleId: number | null = null;\n let currentCellValue: string | null = null;\n let inRow = false;\n let inCell = false;\n let inValue = false;\n let inFormula = false;\n let inPhonetic = false;\n let currentFormula = '';\n let currentFormulaSi: string | null = null;\n let currentFormulaRef: string | null = null;\n let hasFormula = false;\n let rowFormulas: (string | undefined)[] | undefined;\n let rowStyles: (CellStyle | undefined)[] | undefined;\n let rowRichText: (RichTextRun[] | undefined)[] | undefined;\n let rowFormatted: (string | undefined)[] | undefined;\n let rowErrors: (true | undefined)[] | undefined;\n let rawNumber: number | undefined; // a date cell's serial, for formatted text\n const runs = options.richText ? new RichTextCollector(options.richText) : undefined;\n \n let skipDepth = 0;\n\n // Shared formula anchors by si: the text and the cell it was written for\n const sharedFormulas = new Map<string, { formula: string; row: number; col: number }>();\n\n let currentRowNumber = 0;\n let openedWorksheet = false, closedWorksheet = false;\n let currentColIndex = 0;\n let currentCellCol = 0;\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n for (const token of (Array.isArray(value) ? value : [value]) as XmlToken[]) {\n if (runs && inCell) runs.token(token);\n if (token.type === 'startElement') {\n if (token.name === 'AlternateContent') {\n skipDepth++;\n }\n if (skipDepth > 0) {\n if (token.name === 'Fallback') {\n // we could choose to parse fallbacks, but often they are duplicate\n }\n continue;\n }\n\n if (token.name === 'worksheet') openedWorksheet = true;\n if (token.name === 'row') {\n inRow = true;\n currentRow = [];\n rowFormulas = rowStyles = rowRichText = rowFormatted = undefined;\n rowErrors = undefined;\n currentColIndex = 0;\n // A missing or unusable r (\"abc\", \"0\") means the row after the previous one\n const r = Number(token.attributes['r']);\n currentRowNumber = Number.isInteger(r) && r >= 1 ? r : currentRowNumber + 1;\n if (token.attributes['hidden'] === '1' || token.attributes['hidden'] === 'true') {\n hiddenRows.push(currentRowNumber);\n }\n } else if (token.name === 'col') {\n if (token.attributes['hidden'] === '1' || token.attributes['hidden'] === 'true') {\n // Clamp to the sheet's real width: a hostile max=\"999999999\" must not allocate a billion entries\n const min = Math.max(1, parseInt(token.attributes['min'] || '1', 10) || 1);\n const max = Math.min(MAX_COLUMNS, parseInt(token.attributes['max'] || '0', 10) || 0);\n if (min <= max) hiddenColMarks.fill(1, min, max + 1);\n }\n } else if (token.name === 'c') {\n inCell = true;\n currentCellType = token.attributes['t'] || null;\n currentStyleId = token.attributes['s'] ? parseInt(token.attributes['s'], 10) : null;\n currentCellValue = null;\n hasFormula = false;\n runs?.reset();\n\n const r = token.attributes['r'];\n const refCol = r ? colIndex(r) : -1;\n currentCellCol = refCol >= 0 ? refCol : currentColIndex;\n if (currentCellCol >= MAX_COLUMNS) {\n throw new Error(`Invalid cell reference \"${r}\": beyond the last column (XFD)`);\n }\n // A tiny cell at XFD pads its row to 16,384 cells, so padding counts against the byte limit\n padding += Math.max(0, currentCellCol - currentRow.length);\n if (padding > (options.maxPaddingCells ?? Infinity)) {\n throw new Error(`Security Error: rows padded with more than ${options.maxPaddingCells} empty cells (maxUncompressedBytes).`);\n }\n while (currentRow.length < currentCellCol) currentRow.push(null);\n } else if (token.name === 'rPh') {\n inPhonetic = true; // phonetic hints are not part of the cell text\n } else if ((token.name === 'v' || token.name === 't') && !inPhonetic) {\n inValue = true;\n if (currentCellValue === null) currentCellValue = '';\n } else if (token.name === 'f') {\n inFormula = true;\n hasFormula = true;\n currentFormula = '';\n currentFormulaSi = token.attributes['si'] || null;\n currentFormulaRef = token.attributes['ref'] || null;\n } else if (token.name === 'hyperlink') {\n const { ref, id, location, tooltip } = token.attributes;\n const target = id ? options.hyperlinkTargets?.get(id) : undefined;\n const hyperlink = target ? (location ? `${target}#${location}` : target) : location ? `#${location}` : '';\n if (ref && hyperlink) hyperlinks.push(tooltip ? { ref, hyperlink, tooltip } : { ref, hyperlink });\n } else if (token.name === 'mergeCell') {\n if (token.attributes['ref']) mergedCells.push(token.attributes['ref']);\n } else if (token.name === 'pane') {\n // frozenSplit: frozen after being split, which Excel also writes\n if (token.attributes['state'] === 'frozen' || token.attributes['state'] === 'frozenSplit') {\n freezePanes = {\n row: parseInt(token.attributes['ySplit'] || '0', 10),\n col: parseInt(token.attributes['xSplit'] || '0', 10),\n topLeftCell: token.attributes['topLeftCell'] || '',\n activePane: token.attributes['activePane'] || 'bottomRight'\n };\n }\n }\n } else if (token.type === 'text') {\n if (skipDepth > 0) continue;\n if (inValue) {\n currentCellValue = (currentCellValue || '') + token.value;\n } else if (inFormula) {\n currentFormula += token.value;\n }\n } else if (token.type === 'endElement') {\n if (token.name === 'AlternateContent') {\n skipDepth--;\n continue;\n }\n if (skipDepth > 0) continue;\n\n if (token.name === 'worksheet') closedWorksheet = true;\n if (token.name === 'row') {\n const row: RowData = { rowNumber: currentRowNumber, cells: currentRow };\n if (rowFormulas) row.formulas = rowFormulas;\n if (rowStyles) row.styles = rowStyles;\n if (rowRichText) row.richText = rowRichText;\n if (rowFormatted) row.formatted = rowFormatted;\n if (rowErrors) row.errors = rowErrors;\n yield row;\n inRow = false;\n } else if (token.name === 'c') {\n let resolvedValue: CellValue = null;\n \n // If the cell had a shared formula reference but no <v>, we still don't have the evaluated value\n // since we are streaming. A full formula engine would calculate it. \n // For now, if currentCellValue is null but we have a formula, we could return the formula string \n // or null. We'll stick to yielding null for cached value.\n \n if (currentCellValue !== null) {\n if (currentCellType === 'inlineStr' || currentCellType === 'str') {\n // Strings may legitimately be empty\n resolvedValue = decodeXString(currentCellValue);\n } else if (currentCellValue === '') {\n // <v></v> on a non-string cell carries no value\n resolvedValue = null;\n } else if (currentCellType === 's') {\n const index = parseInt(currentCellValue, 10);\n // An index past the table points nowhere: the cell is empty\n resolvedValue = sharedStrings.get(index) ?? null;\n } else if (currentCellType === 'b') {\n resolvedValue = currentCellValue === '1' || currentCellValue === 'true';\n } else if (currentCellType === 'e') {\n resolvedValue = currentCellValue;\n if (options.errors) (rowErrors ??= [])[currentCellCol] = true;\n } else {\n const num = Number(currentCellValue);\n const iso = currentCellType === 'd' ? isoDateCell(currentCellValue) : undefined;\n if (iso) {\n // t=\"d\": ISO text without a zone, read as UTC like serial dates\n rawNumber = dateToSerial(new Date(iso)) - (is1904 ? 1462 : 0);\n resolvedValue = iso;\n } else if (isNaN(num)) {\n resolvedValue = currentCellValue;\n } else if (currentStyleId !== null && styles.get(currentStyleId) === 14) {\n rawNumber = num;\n resolvedValue = excelToIsoDate(num, is1904);\n } else {\n resolvedValue = num === 0 ? 0 : num; // normalise -0\n }\n }\n }\n \n if (options.formulas && hasFormula) {\n let formula: string | undefined = currentFormula ? decodeXString(currentFormula) : undefined;\n if (!formula && currentFormulaSi !== null) {\n // A follower cell of a shared formula: the anchor's text, moved to this cell\n const anchor = sharedFormulas.get(currentFormulaSi);\n if (anchor) formula = shiftFormula(anchor.formula, currentRowNumber - anchor.row, currentCellCol - anchor.col);\n }\n if (formula) (rowFormulas ??= [])[currentCellCol] = formula;\n }\n if (runs) {\n const cellRuns = currentCellType === 's' && currentCellValue\n ? options.sharedRichText?.get(parseInt(currentCellValue, 10))\n : runs.runs.length ? runs.runs : undefined;\n if (cellRuns) (rowRichText ??= [])[currentCellCol] = cellRuns;\n }\n if (options.numFmts && resolvedValue !== null) {\n const code = currentStyleId !== null ? options.numFmts[currentStyleId] : undefined;\n (rowFormatted ??= [])[currentCellCol] = currentCellType === 'e' ? String(resolvedValue)\n : formatValue(rawNumber ?? resolvedValue, code ?? 'General', is1904);\n }\n rawNumber = undefined;\n if (options.cellStyles && currentStyleId !== null) {\n const style = options.cellStyles[currentStyleId];\n if (style) (rowStyles ??= [])[currentCellCol] = style;\n }\n\n // Indexed write: also correct when a cell's r points left of the previous cell\n currentRow[currentCellCol] = resolvedValue;\n currentColIndex = currentCellCol + 1;\n inCell = false;\n currentCellType = null;\n currentStyleId = null;\n currentCellValue = null;\n } else if (token.name === 'rPh') {\n inPhonetic = false;\n } else if (token.name === 'v' || token.name === 't') {\n inValue = false;\n } else if (token.name === 'f') {\n inFormula = false;\n if (currentFormulaSi !== null && currentFormulaRef !== null && currentFormula) {\n sharedFormulas.set(currentFormulaSi, { formula: decodeXString(currentFormula), row: currentRowNumber, col: currentCellCol });\n }\n }\n }\n }\n }\n // A part cut off inside a row (an intact zip around a truncated sheet) must not read as a shorter sheet\n if (inRow || inCell || openedWorksheet && !closedWorksheet) throw new Error('Worksheet XML is cut off: the sheet ends before its closing tags.');\n const hiddenCols: number[] = [];\n hiddenColMarks.forEach((hidden, c) => { if (hidden) hiddenCols.push(c); });\n resolveMeta({ mergedCells, hiddenRows, hiddenCols, freezePanes, hyperlinks });\n } catch (e) {\n rejectMeta(e);\n throw e;\n } finally {\n reader.releaseLock();\n }\n }\n\n return new ParseResult(generateRows(), metadataPromise, options.images, options.comments);\n}\n","import type { SheetImage } from './types';\nimport { colIndex, colLetter, MAX_COLUMNS, MAX_ROWS, partRelationships, unescapeXml, xmlElements, escapeXml } from './utils';\n\nconst EMU_PER_PX = 9525;\n\nexport interface ImageInfo { ext: 'png' | 'jpeg' | 'gif'; width: number; height: number }\n\n// Format and pixel size from the file header\nexport function imageInfo(b: Uint8Array): ImageInfo {\n const info = headerInfo(b);\n // A truncated header reads past the end of the bytes and gives NaN (or 0) sizes\n if (!(info.width > 0 && info.height > 0)) throw new Error(`The ${info.ext.toUpperCase()} image is truncated or has no size.`);\n return info;\n}\n\nfunction headerInfo(b: Uint8Array): ImageInfo {\n const be16 = (i: number) => (b[i] << 8) | b[i + 1];\n const be32 = (i: number) => ((b[i] << 24) | (b[i + 1] << 16) | (b[i + 2] << 8) | b[i + 3]) >>> 0;\n if (b[0] === 0x89 && b[1] === 0x50 && b[2] === 0x4e && b[3] === 0x47) {\n return { ext: 'png', width: be32(16), height: be32(20) };\n }\n if (b[0] === 0x47 && b[1] === 0x49 && b[2] === 0x46) {\n return { ext: 'gif', width: b[6] | (b[7] << 8), height: b[8] | (b[9] << 8) };\n }\n if (b[0] === 0xff && b[1] === 0xd8) {\n // Walk the marker segments to the frame header (SOF0-15, minus DHT/JPG/DAC)\n for (let i = 2; i + 9 < b.length;) {\n if (b[i] !== 0xff) { i++; continue; }\n const marker = b[i + 1];\n if (marker === 0xff) { i++; continue; }\n if (marker >= 0xc0 && marker <= 0xcf && marker !== 0xc4 && marker !== 0xc8 && marker !== 0xcc) {\n return { ext: 'jpeg', width: be16(i + 7), height: be16(i + 5) };\n }\n i += 2 + be16(i + 2);\n }\n throw new Error('JPEG image has no frame header.');\n }\n throw new Error('Unsupported image: only PNG, JPEG and GIF can be embedded.');\n}\n\n// The pictures of a worksheet's drawing, in the writer's SheetImage shape. Charts and shapes are\n// skipped. Pictures sharing a media file share one `data` array.\n// Offsets inside the anchor cell are ignored, and absoluteAnchor pictures are skipped\nexport async function readSheetImages(\n readText: (path: string) => Promise<string>,\n readBytes: (path: string) => Promise<Uint8Array | undefined>,\n sheetPath: string,\n): Promise<SheetImage[]> {\n const images: SheetImage[] = [];\n const media = new Map<string, Uint8Array | undefined>();\n for (const rel of await partRelationships(readText, sheetPath)) {\n if (rel.external || !rel.type.endsWith('/drawing')) continue;\n const xml = await readText(rel.path);\n const targets = new Map((await partRelationships(readText, rel.path)).filter(r => !r.external).map(r => [r.id, r.path]));\n for (const { whole: anchor, name: kind } of xmlElements(xml, 'twoCellAnchor|oneCellAnchor')) {\n const pic = xmlElements(anchor, 'pic').next().value?.whole;\n const embed = pic && /<(?:\\w+:)?blip\\b[^>]*?\\s(?:\\w+:)?embed=\"([^\"]*)\"/.exec(pic)?.[1];\n const path = embed && targets.get(embed);\n if (!path) continue;\n if (!media.has(path)) media.set(path, await readBytes(path));\n const data = media.get(path);\n if (!data) continue;\n\n const pos = (tag: string) => {\n const m = new RegExp(`<(?:\\\\w+:)?${tag}>([\\\\s\\\\S]*?)</(?:\\\\w+:)?${tag}>`).exec(anchor)?.[1] ?? '';\n const num = (name: string) => parseInt(new RegExp(`<(?:\\\\w+:)?${name}>(-?\\\\d+)<`).exec(m)?.[1] ?? '0', 10);\n return { col: num('col'), row: num('row'), offset: num('colOff') + num('rowOff') };\n };\n const from = pos('from');\n const at = colLetter(from.col) + (from.row + 1);\n const descr = pic && /<(?:\\w+:)?cNvPr\\b[^>]*?\\sdescr=\"([^\"]*)\"/.exec(pic)?.[1];\n const altText = descr ? unescapeXml(descr) : undefined;\n let image: SheetImage;\n if (kind === 'twoCellAnchor') {\n // `to` is the cell the far edge lands in; at offset 0 the picture ends on the cell before it\n const to = pos('to');\n const end = to.offset === 0 ? { col: Math.max(from.col, to.col - 1), row: Math.max(from.row, to.row - 1) } : to;\n image = { data, range: `${at}:${colLetter(end.col)}${end.row + 1}` };\n } else {\n const ext = /<(?:\\w+:)?ext\\b[^>]*?\\scx=\"(\\d+)\"[^>]*?\\scy=\"(\\d+)\"/.exec(anchor);\n image = ext ? { data, at, width: Math.round(+ext[1] / EMU_PER_PX), height: Math.round(+ext[2] / EMU_PER_PX) } : { data, at };\n }\n if (altText) image.altText = altText;\n images.push(image);\n }\n }\n return images;\n}\n\n\n\nconst cellPos = (ref: string) => {\n const m = /^\\$?([A-Za-z]{1,3})\\$?(\\d+)$/.exec(ref.trim());\n const col = m ? colIndex(m[1]) : -1, row = m ? parseInt(m[2], 10) - 1 : -1;\n if (col < 0 || col >= MAX_COLUMNS || row < 0 || row >= MAX_ROWS) throw new Error(`Invalid anchor cell \"${ref}\".`);\n return { col, row };\n};\nconst marker = (tag: string, { col, row }: { col: number; row: number }) =>\n `<xdr:${tag}><xdr:col>${col}</xdr:col><xdr:colOff>0</xdr:colOff><xdr:row>${row}</xdr:row><xdr:rowOff>0</xdr:rowOff></xdr:${tag}>`;\n\n// Where a drawing object goes: stretched over cells, or at a cell with a size in pixels\nexport type Placement = { range: string } | { at: string; width?: number; height?: number };\n\nexport const DRAWING_NS = 'xmlns:xdr=\"http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing\" ' +\n 'xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" ' +\n 'xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"';\n\n// One anchor (xdr: prefix) holding `body`. `natural` is the size used when the placement gives\n// none; a missing side keeps its aspect ratio. `attrs` lands on the anchor element, e.g. DRAWING_NS\n// when the anchor is added to a drawing that declares other prefixes.\nexport function anchorXml(place: Placement, natural: { width: number; height: number }, body: string, attrs = ''): string {\n if (!place || typeof (place as any).range !== 'string' && typeof (place as any).at !== 'string') {\n throw new Error('A picture or chart needs a placement: \"at\" (a cell) or \"range\".');\n }\n if ('range' in place) {\n const [from, to = from] = place.range.split(':');\n const a = cellPos(from), b = cellPos(to);\n // The object fills the range, given either way round: it ends at the far edge of the last cell\n const start = { col: Math.min(a.col, b.col), row: Math.min(a.row, b.row) };\n const end = { col: Math.max(a.col, b.col) + 1, row: Math.max(a.row, b.row) + 1 };\n return `<xdr:twoCellAnchor editAs=\"oneCell\"${attrs}>${marker('from', start)}${marker('to', end)}${body}<xdr:clientData/></xdr:twoCellAnchor>`;\n }\n const { width: w, height: h } = natural;\n const width = place.width ?? (place.height ? w * place.height / h : w);\n const height = place.height ?? h * width / w;\n if (!(width > 0 && height > 0 && isFinite(width) && isFinite(height))) {\n throw new Error(`Invalid size ${place.width ?? ''}x${place.height ?? ''} at ${place.at}: width and height must be positive numbers.`);\n }\n return `<xdr:oneCellAnchor${attrs}>${marker('from', cellPos(place.at))}<xdr:ext cx=\"${Math.round(width * EMU_PER_PX)}\" cy=\"${Math.round(height * EMU_PER_PX)}\"/>${body}<xdr:clientData/></xdr:oneCellAnchor>`;\n}\n\nexport const drawingPartXml = (anchors: string) =>\n `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<xdr:wsDr ${DRAWING_NS}>${anchors}</xdr:wsDr>`;\n\n// One drawing part per sheet; `rIds[i]` is the drawing relationship of images[i]'s media\nexport function drawingXml(images: SheetImage[], infos: ImageInfo[], rIds: string[]): string {\n return drawingPartXml(images.map((img, i) => anchorXml(img, infos[i],\n `<xdr:pic><xdr:nvPicPr><xdr:cNvPr id=\"${i + 2}\" name=\"Picture ${i + 1}\"${img.altText ? ` descr=\"${escapeXml(img.altText)}\"` : ''}/>` +\n `<xdr:cNvPicPr><a:picLocks noChangeAspect=\"1\"/></xdr:cNvPicPr></xdr:nvPicPr>` +\n `<xdr:blipFill><a:blip r:embed=\"${rIds[i]}\"/><a:stretch><a:fillRect/></a:stretch></xdr:blipFill>` +\n `<xdr:spPr><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></xdr:spPr></xdr:pic>`)).join(''));\n}\n","// Reader for Excel 97-2003 workbooks (.xls, BIFF8 records in a compound file) [MS-XLS].\n// Returns the same rows and metadata as the .xlsx reader. The file is held in memory; .xls sheets\n// are limited to 65,536 rows, so that stays modest.\n\nimport { CfbReader } from './cfb';\nimport { ParseResult, excelToIsoDate, type CellValue, type RowData, type SheetMetadata } from './worksheet-parser';\nimport { BUILTIN_NUM_FMTS, DISPLAY_NUM_FMTS, isBuiltinDateFormat, formatValue } from './number-format';\nimport { colLetter, isDateFormatCode } from './utils';\nimport type { DefinedName, WorkbookProperties } from './types';\n\nconst corrupt = (why: string) => new Error(`Corrupt .xls file: ${why}`);\n\nconst ERRORS: Record<number, string> = {\n 0x00: '#NULL!', 0x07: '#DIV/0!', 0x0f: '#VALUE!', 0x17: '#REF!', 0x1d: '#NAME?', 0x24: '#NUM!', 0x2a: '#N/A', 0x2b: '#GETTING_DATA',\n};\n\n// Characters stored one byte each are UTF-16 code units with a zero high byte, i.e. Latin-1\nfunction latin1(bytes: Uint8Array): string {\n let s = '';\n for (let i = 0; i < bytes.length; i += 8192) s += String.fromCharCode(...bytes.subarray(i, i + 8192));\n return s;\n}\nconst utf16 = new TextDecoder('utf-16le');\nconst chars = (bytes: Uint8Array, high: boolean) => high ? utf16.decode(bytes) : latin1(bytes);\n\nconst u16 = (b: Uint8Array, o: number) => {\n if (o + 2 > b.length) throw corrupt('record is cut short');\n return b[o] | (b[o + 1] << 8);\n};\nconst u32 = (b: Uint8Array, o: number) => (u16(b, o) | (u16(b, o + 2) << 16)) >>> 0;\nconst f64 = (b: Uint8Array, o: number) => {\n if (o + 8 > b.length) throw corrupt('record is cut short');\n return new DataView(b.buffer, b.byteOffset + o, 8).getFloat64(0, true);\n};\n\n// XLUnicodeString (16-bit length) or ShortXLUnicodeString (8-bit length); returns the text and its size\nfunction xlString(b: Uint8Array, o: number, lengthBytes: 1 | 2): [string, number] {\n const cch = lengthBytes === 1 ? b[o] : u16(b, o);\n const high = (b[o + lengthBytes] & 1) === 1;\n const start = o + lengthBytes + 1;\n const end = start + cch * (high ? 2 : 1);\n if (end > b.length) throw corrupt('string runs past its record');\n return [chars(b.subarray(start, end), high), end - o];\n}\n\n// RK numbers: a 30-bit integer or the top 30 bits of a double, optionally divided by 100\nfunction rk(value: number): number {\n let n: number;\n if (value & 2) n = value >> 2;\n else {\n const view = new DataView(new ArrayBuffer(8));\n view.setUint32(4, value & 0xfffffffc, true);\n n = view.getFloat64(0, true);\n }\n return value & 1 ? n / 100 : n;\n}\n\ninterface Rec { type: number; data: Uint8Array; next: number }\n\nfunction recordAt(stream: Uint8Array, pos: number): Rec | undefined {\n if (pos + 4 > stream.length) return undefined;\n const len = u16(stream, pos + 2);\n if (pos + 4 + len > stream.length) throw corrupt(`record at ${pos} runs past the end of the stream`);\n return { type: u16(stream, pos), data: stream.subarray(pos + 4, pos + 4 + len), next: pos + 4 + len };\n}\n\n// The shared string table spans CONTINUE records. A string's characters may break across them, and\n// each continuation then starts with a fresh flags byte saying whether the rest is 8- or 16-bit.\nfunction parseSst(chunks: Uint8Array[]): string[] {\n let ci = 0, off = 8; // skip cstTotal and cstUnique\n const total = u32(chunks[0], 4);\n const strings: string[] = [];\n const advance = () => { while (ci < chunks.length && off >= chunks[ci].length) { ci++; off = 0; } };\n const read16 = () => { advance(); const v = u16(chunks[ci] ?? new Uint8Array(), off); off += 2; return v; };\n const read32 = () => { const lo = read16(); return (lo | (read16() << 16)) >>> 0; };\n const skip = (n: number) => {\n while (n > 0) {\n advance();\n if (ci >= chunks.length) throw corrupt('shared string table is cut short');\n const take = Math.min(n, chunks[ci].length - off);\n off += take; n -= take;\n }\n };\n for (let i = 0; i < total; i++) {\n advance();\n if (ci >= chunks.length) break; // some writers overstate the count\n const cch = read16();\n advance();\n const flags = chunks[ci]?.[off++];\n if (flags === undefined) throw corrupt('shared string table is cut short');\n let high = (flags & 1) === 1;\n const runs = flags & 8 ? read16() : 0;\n const ext = flags & 4 ? read32() : 0;\n let text = '';\n for (let left = cch; left > 0;) {\n if (off >= chunks[ci].length) {\n ci++; off = 0;\n if (ci >= chunks.length) throw corrupt('shared string table is cut short');\n high = (chunks[ci][off++] & 1) === 1;\n }\n const take = Math.min(left, Math.floor((chunks[ci].length - off) / (high ? 2 : 1)));\n if (take === 0) throw corrupt('a 16-bit character is split across records');\n text += chars(chunks[ci].subarray(off, off + take * (high ? 2 : 1)), high);\n off += take * (high ? 2 : 1);\n left -= take;\n }\n skip(runs * 4 + ext);\n strings.push(text);\n }\n return strings;\n}\n\nexport interface XlsSheet { name: string; state: 'visible' | 'hidden' | 'veryHidden'; offset: number; isWorksheet: boolean }\n\nexport class XlsWorkbook {\n readonly sheets: XlsSheet[] = [];\n readonly definedNames: DefinedName[] = [];\n readonly properties: WorkbookProperties = {};\n private sst: string[] = [];\n private xfFormats: number[] = [];\n private formats = new Map<number, string>(BUILTIN_NUM_FMTS);\n private dateFormats = new Set<number>();\n private date1904 = false;\n private readonly stream: Uint8Array;\n\n constructor(cfb: CfbReader) {\n const stream = cfb.read('Workbook') ?? cfb.read('Book');\n if (!stream) throw new Error('Not an Excel workbook: the compound file has no Workbook stream');\n this.stream = stream;\n this.parseGlobals();\n readProperties(cfb, this.properties);\n }\n\n private parseGlobals() {\n const s = this.stream;\n const bof = recordAt(s, 0);\n if (!bof || (bof.type & 0xff) !== 0x09) throw corrupt('no BOF record');\n if (bof.type !== 0x0809 || u16(bof.data, 0) !== 0x0600) {\n throw new Error('Only Excel 97-2003 (BIFF8) .xls files are supported; this one is from Excel 95 or earlier');\n }\n const externSheets: number[] = []; // XTI index -> first sheet index\n const names: { name: string; builtin: boolean; scope: number; rgce: Uint8Array }[] = [];\n for (let r = recordAt(s, bof.next); r; r = recordAt(s, r.next)) {\n const d = r.data;\n switch (r.type) {\n case 0x000a: // EOF\n this.resolveNames(names, externSheets);\n return;\n case 0x002f: // FILEPASS\n throw new Error('This .xls file is password-protected. Encrypted .xls files are not supported; save it as .xlsx in Excel');\n case 0x0022: // DATEMODE\n this.date1904 = u16(d, 0) === 1;\n break;\n case 0x041e: { // FORMAT\n const id = u16(d, 0);\n const [code] = xlString(d, 2, 2);\n this.formats.set(id, code);\n if (isDateFormatCode(code)) this.dateFormats.add(id);\n break;\n }\n case 0x00e0: // XF\n this.xfFormats.push(u16(d, 2));\n break;\n case 0x0085: { // BOUNDSHEET\n const [name] = xlString(d, 6, 1);\n const state = d[4] & 3;\n this.sheets.push({ name, state: state === 1 ? 'hidden' : state === 2 ? 'veryHidden' : 'visible', offset: u32(d, 0), isWorksheet: d[5] === 0 });\n break;\n }\n case 0x00fc: { // SST, with its CONTINUE records\n const chunks = [d];\n let next = recordAt(s, r.next);\n while (next?.type === 0x003c) { chunks.push(next.data); r = next; next = recordAt(s, r.next); }\n this.sst = parseSst(chunks);\n break;\n }\n case 0x0017: // EXTERNSHEET\n for (let i = 0, n = u16(d, 0); i < n; i++) externSheets.push(u16(d, 2 + i * 6 + 2) === 0xfffe ? -1 : u16(d, 2 + i * 6 + 2));\n break;\n case 0x0018: { // NAME\n const flags = u16(d, 0);\n const cch = d[3], cce = u16(d, 4), scope = u16(d, 8);\n const high = (d[14] & 1) === 1;\n const nameEnd = 15 + cch * (high ? 2 : 1);\n const raw = d.subarray(15, nameEnd);\n const builtin = (flags & 0x20) !== 0;\n names.push({ name: builtin ? (BUILTIN_NAMES[raw[0]] ?? `_xlnm.${raw[0]}`) : chars(raw, high), builtin, scope, rgce: d.subarray(nameEnd, nameEnd + cce) });\n break;\n }\n }\n }\n throw corrupt('workbook globals have no EOF record');\n }\n\n // Names whose formula is a single reference or range on a sheet; other formulas are left out\n private resolveNames(names: { name: string; scope: number; rgce: Uint8Array }[], externSheets: number[]) {\n for (const { name, scope, rgce } of names) {\n const ref = this.reference(rgce, externSheets);\n if (ref === undefined) continue;\n const out: DefinedName = { name, ref };\n if (scope > 0 && this.sheets[scope - 1]) out.sheet = this.sheets[scope - 1].name;\n this.definedNames.push(out);\n }\n }\n\n private reference(rgce: Uint8Array, externSheets: number[]): string | undefined {\n const parts: string[] = [];\n for (let i = 0; i < rgce.length;) {\n const ptg = rgce[i] & 0x1f | 0x20; // reference class does not matter here\n const sheetName = (xti: number) => {\n const sheet = this.sheets[externSheets[xti]];\n if (!sheet) return undefined;\n return /^[A-Za-z_][A-Za-z0-9_.]*$/.test(sheet.name) ? sheet.name : `'${sheet.name.replace(/'/g, \"''\")}'`;\n };\n const cell = (row: number, col: number) => `$${colLetter(col & 0x3fff)}$${row + 1}`;\n if (ptg === 0x3a && i + 7 <= rgce.length) { // ptgRef3d\n const sheet = sheetName(u16(rgce, i + 1));\n if (!sheet) return undefined;\n parts.push(`${sheet}!${cell(u16(rgce, i + 3), u16(rgce, i + 5))}`);\n i += 7;\n } else if (ptg === 0x3b && i + 11 <= rgce.length) { // ptgArea3d\n const sheet = sheetName(u16(rgce, i + 1));\n if (!sheet) return undefined;\n const [r1, r2, c1, c2] = [u16(rgce, i + 3), u16(rgce, i + 5), u16(rgce, i + 7) & 0xff, u16(rgce, i + 9) & 0xff];\n // Whole rows and columns read as $1:$2 and $A:$B, as in .xlsx\n const area = r1 === 0 && r2 === 0xffff ? `$${colLetter(c1)}:$${colLetter(c2)}`\n : c1 === 0 && c2 === 0xff ? `$${r1 + 1}:$${r2 + 1}` : `${cell(r1, c1)}:${cell(r2, c2)}`;\n parts.push(`${sheet}!${area}`);\n i += 11;\n } else if (rgce[i] === 0x10 && parts.length) { // ptgUnion, as in print titles \"A:A,1:1\"\n i++;\n } else if (ptg === 0x29) { // ptgMemFunc: wraps the references that follow\n i += 3;\n } else {\n return undefined;\n }\n }\n return parts.length ? parts.join(',') : undefined;\n }\n\n private formatCode(xf: number): string | undefined {\n const id = this.xfFormats[xf];\n return id === undefined ? undefined : DISPLAY_NUM_FMTS.get(id) ?? this.formats.get(id);\n }\n\n private isDate(xf: number): boolean {\n const id = this.xfFormats[xf];\n return id !== undefined && (isBuiltinDateFormat(id) || this.dateFormats.has(id));\n }\n\n parseSheet(name: string | undefined, formatted: boolean): ParseResult {\n const sheet = name === undefined ? this.sheets.find(s => s.isWorksheet) : this.sheets.find(s => s.name === name);\n if (!sheet) throw new Error(name === undefined ? 'No worksheets found in the workbook.' : `Sheet with name \"${name}\" not found in workbook.`);\n if (!sheet.isWorksheet) throw new Error(`Sheet \"${sheet.name}\" is a chart or macro sheet, not a worksheet`);\n\n const rows = new Map<number, { cells: CellValue[]; formatted?: (string | undefined)[] }>();\n const meta: SheetMetadata = { mergedCells: [], hiddenRows: [], hiddenCols: [], hyperlinks: [] };\n const set = (row: number, col: number, xf: number, value: CellValue, raw?: number) => {\n let r = rows.get(row);\n if (!r) rows.set(row, r = { cells: [] });\n while (r.cells.length < col) r.cells.push(null);\n if (typeof value === 'number' && this.isDate(xf)) value = excelToIsoDate(value, this.date1904);\n else if (Object.is(value, -0)) value = 0;\n r.cells[col] = value;\n if (formatted && value !== null) {\n (r.formatted ??= [])[col] = typeof value === 'string' && ERROR_TEXTS.has(value) && raw === undefined\n ? value : formatValue(raw ?? value, this.formatCode(xf) ?? 'General', this.date1904);\n }\n };\n const blank = (row: number, col: number) => {\n let r = rows.get(row);\n if (!r) rows.set(row, r = { cells: [] });\n while (r.cells.length <= col) r.cells.push(null);\n };\n\n const s = this.stream;\n const bof = recordAt(s, sheet.offset);\n if (!bof || bof.type !== 0x0809) throw corrupt(`sheet \"${sheet.name}\" does not start with a BOF record`);\n let pendingString: { row: number; col: number; xf: number } | undefined;\n let frozen = false;\n let pane: SheetMetadata['freezePanes'];\n let depth = 0; // charts embedded in the sheet are nested BOF...EOF blocks\n for (let r = recordAt(s, bof.next); r; r = recordAt(s, r.next)) {\n const d = r.data;\n if (r.type === 0x0809) { depth++; continue; }\n if (r.type === 0x000a) { if (depth-- === 0) break; continue; }\n if (depth > 0) continue;\n switch (r.type) {\n case 0x0203: // NUMBER\n set(u16(d, 0), u16(d, 2), u16(d, 4), f64(d, 6), f64(d, 6));\n break;\n case 0x027e: { // RK\n const n = rk(u32(d, 6));\n set(u16(d, 0), u16(d, 2), u16(d, 4), n, n);\n break;\n }\n case 0x00bd: { // MULRK\n const row = u16(d, 0), first = u16(d, 2);\n for (let i = 0; 4 + i * 6 + 6 <= d.length - 2; i++) {\n const n = rk(u32(d, 4 + i * 6 + 2));\n set(row, first + i, u16(d, 4 + i * 6), n, n);\n }\n break;\n }\n case 0x00fd: // LABELSST\n set(u16(d, 0), u16(d, 2), u16(d, 4), this.sst[u32(d, 6)] ?? '');\n break;\n case 0x0204: case 0x00d6: // LABEL, RSTRING\n set(u16(d, 0), u16(d, 2), u16(d, 4), xlString(d, 6, 2)[0]);\n break;\n case 0x0205: { // BOOLERR\n const isError = d[7] === 1;\n set(u16(d, 0), u16(d, 2), u16(d, 4), isError ? ERRORS[d[6]] ?? '#VALUE!' : d[6] === 1);\n break;\n }\n case 0x0201: // BLANK\n blank(u16(d, 0), u16(d, 2));\n break;\n case 0x00be: // MULBLANK\n blank(u16(d, 0), u16(d, d.length - 2));\n break;\n case 0x0006: { // FORMULA: the cached result\n const row = u16(d, 0), col = u16(d, 2), xf = u16(d, 4);\n pendingString = undefined;\n if (u16(d, 12) !== 0xffff) set(row, col, xf, f64(d, 6), f64(d, 6));\n else if (d[6] === 0) pendingString = { row, col, xf }; // text follows in a STRING record\n else if (d[6] === 1) set(row, col, xf, d[8] === 1);\n else if (d[6] === 2) set(row, col, xf, ERRORS[d[8]] ?? '#VALUE!');\n else if (d[6] === 3) set(row, col, xf, '');\n break;\n }\n case 0x0207: // STRING\n if (pendingString) set(pendingString.row, pendingString.col, pendingString.xf, xlString(d, 0, 2)[0]);\n pendingString = undefined;\n break;\n case 0x00e5: // MERGECELLS\n for (let i = 0, n = u16(d, 0); i < n; i++) {\n const o = 2 + i * 8;\n meta.mergedCells.push(`${colLetter(u16(d, o + 4))}${u16(d, o) + 1}:${colLetter(u16(d, o + 6))}${u16(d, o + 2) + 1}`);\n }\n break;\n case 0x0208: // ROW\n if (u16(d, 12) & 0x20) meta.hiddenRows.push(u16(d, 0) + 1);\n break;\n case 0x007d: // COLINFO\n if (u16(d, 8) & 1) for (let c = u16(d, 0); c <= Math.min(u16(d, 2), 255); c++) meta.hiddenCols.push(c + 1);\n break;\n case 0x023e: // WINDOW2\n frozen = (u16(d, 0) & 0x08) !== 0;\n break;\n case 0x0041: { // PANE\n const col = u16(d, 0), row = u16(d, 2);\n pane = { row, col, topLeftCell: `${colLetter(u16(d, 6))}${u16(d, 4) + 1}`, activePane: PANES[d[8]] ?? 'bottomRight' };\n break;\n }\n }\n }\n if (frozen && pane) meta.freezePanes = pane;\n\n const sorted = [...rows.entries()].sort((a, b) => a[0] - b[0]);\n async function* generate(): AsyncGenerator<RowData> {\n for (const [row, r] of sorted) {\n const data: RowData = { rowNumber: row + 1, cells: r.cells };\n if (r.formatted) data.formatted = r.formatted;\n yield data;\n }\n }\n return new ParseResult(generate(), Promise.resolve(meta));\n }\n}\n\nconst ERROR_TEXTS = new Set(Object.values(ERRORS));\nconst PANES = ['bottomRight', 'topRight', 'bottomLeft', 'topLeft'];\nconst BUILTIN_NAMES: Record<number, string> = {\n 0x00: '_xlnm.Consolidate_Area', 0x01: '_xlnm.Auto_Open', 0x02: '_xlnm.Auto_Close', 0x03: '_xlnm.Extract', 0x04: '_xlnm.Database',\n 0x05: '_xlnm.Criteria', 0x06: '_xlnm.Print_Area', 0x07: '_xlnm.Print_Titles', 0x08: '_xlnm.Recorder', 0x09: '_xlnm.Data_Form',\n 0x0a: '_xlnm.Auto_Activate', 0x0b: '_xlnm.Auto_Deactivate', 0x0c: '_xlnm.Sheet_Title', 0x0d: '_xlnm._FilterDatabase',\n};\n\n// Title, author and so on, from the OLE property sets [MS-OLEPS]\nfunction readProperties(cfb: CfbReader, out: WorkbookProperties) {\n const read = (stream: string, keys: Record<number, keyof WorkbookProperties>) => {\n const b = cfb.read(stream);\n if (!b || b.length < 48) return;\n try {\n const section = u32(b, 44);\n const count = u32(b, section + 4);\n let codepage = 1252;\n const values = new Map<number, number>();\n for (let i = 0; i < Math.min(count, 1000); i++) values.set(u32(b, section + 8 + i * 8), section + u32(b, section + 12 + i * 8));\n const cp = values.get(1);\n if (cp !== undefined && u16(b, cp) === 2) codepage = u16(b, cp + 4);\n for (const [id, key] of Object.entries(keys)) {\n const at = values.get(+id);\n if (at === undefined) continue;\n const type = u16(b, at);\n if (type === 0x1e) { // VT_LPSTR, in the property set's code page\n const len = u32(b, at + 4);\n const raw = b.subarray(at + 8, at + 8 + len);\n const text = codepage === 1200 ? utf16.decode(raw) : codepage === 65001 ? new TextDecoder().decode(raw) : latin1(raw);\n const value = text.replace(/\\0+$/, '');\n if (value) (out as Record<string, unknown>)[key] = value;\n } else if (type === 0x40 && key === 'created') { // VT_FILETIME: 100 ns ticks since 1601\n const ticks = u32(b, at + 4) + u32(b, at + 8) * 2 ** 32;\n if (ticks) out.created = new Date(ticks / 10000 - 11644473600000);\n }\n }\n } catch {\n // Properties are optional; a damaged property set must not stop the workbook from opening\n }\n };\n read('\\u0005SummaryInformation', { 2: 'title', 3: 'subject', 4: 'creator', 5: 'keywords', 6: 'description', 12: 'created' });\n read('\\u0005DocumentSummaryInformation', { 2: 'category', 14: 'manager', 15: 'company' });\n}\n","// Reader for OpenDocument spreadsheets (.ods, as saved by LibreOffice, Google Sheets and Excel).\n// content.xml streams through the same tokenizer as .xlsx sheets, so memory stays flat.\n\nimport { createXmlBatchParser, type XmlToken } from './xml-stream';\nimport { ParseResult, excelToIsoDate, type CellValue, type RowData, type SheetComment, type SheetMetadata } from './worksheet-parser';\nimport { colLetter, unescapeXml, xmlElements } from './utils';\nimport type { DefinedName, WorkbookProperties } from './types';\n\nexport const ODS_MIMETYPE = 'application/vnd.oasis.opendocument.spreadsheet';\n\nconst MAX_ROWS = 1 << 20;\nconst MAX_COLUMNS = 1 << 14;\nconst ERROR_TEXT = /^#(NULL!|DIV\\/0!|VALUE!|REF!|NAME\\?|NUM!|N\\/A|GETTING_DATA|SPILL!|CALC!)$/;\n\ntype TokenSource = () => Promise<ReadableStream<Uint8Array>>;\n\nasync function* tokens(open: TokenSource): AsyncGenerator<XmlToken> {\n const reader = (await open()).pipeThrough(createXmlBatchParser()).getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) return;\n yield* value;\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nconst repeat = (value: string | undefined, max: number) => Math.min(Math.max(parseInt(value ?? '1', 10) || 1, 1), max);\n\n// \"2026-10-08\" or \"2026-10-08T14:04:30\" (local time in the file) as the ISO string the .xlsx reader returns\nfunction odsDate(value: string): string | null {\n const m = /^(-?\\d{4,})-(\\d\\d)-(\\d\\d)(?:T(\\d\\d):(\\d\\d):(\\d\\d)(\\.\\d+)?)?/.exec(value);\n if (!m) return null;\n const ms = Date.UTC(+m[1], +m[2] - 1, +m[3], +(m[4] ?? 0), +(m[5] ?? 0), +(m[6] ?? 0), Math.round(+(m[7] ?? 0) * 1000));\n return isNaN(ms) ? null : new Date(ms).toISOString();\n}\n\n// \"PT14H04M30S\" as a fraction of a day, shown like an .xlsx time-only cell\nfunction odsTime(value: string): string | null {\n const m = /^(-)?P(?:(\\d+)D)?T(?:(\\d+)H)?(?:(\\d+)M)?(?:(\\d+(?:\\.\\d+)?)S)?$/.exec(value);\n if (!m) return null;\n const seconds = (+(m[2] ?? 0) * 24 + +(m[3] ?? 0)) * 3600 + +(m[4] ?? 0) * 60 + +(m[5] ?? 0);\n return excelToIsoDate((m[1] ? -seconds : seconds) / 86400);\n}\n\n// OpenFormula to Excel syntax: \"of:=SUM([.A1:.B2];[$Sheet2.C3])\" -> \"SUM(A1:B2,Sheet2!C3)\"\nexport function odsFormula(formula: string): string {\n let f = formula.replace(/^(?:of:)?=/, '');\n f = f.replace(/\\[([^\\]]*)\\]/g, (_, ref: string) => ref.split(':').map(part => {\n const dot = part.lastIndexOf('.');\n const sheet = part.slice(0, dot).replace(/^\\$/, '');\n const cell = part.slice(dot + 1);\n return sheet ? `${sheet.startsWith(\"'\") ? sheet : /^[A-Za-z_][\\w.]*$/.test(sheet) ? sheet : `'${sheet}'`}!${cell}` : cell;\n }).join(':').replace(/^([^!]+!)([^:]+):\\1/, '$1$2:'));\n // Separators outside string literals\n return f.replace(/\"[^\"]*\"|;/g, s => s === ';' ? ',' : s);\n}\n\n// \"$Sheet1.$A$1:.$B$2\" -> \"Sheet1!$A$1:$B$2\"\nfunction odsRange(address: string): string {\n return address.split(' ').map(range => odsFormula(`[${range}]`)).join(',');\n}\n\nexport interface OdsSheet { name: string; state: 'visible' | 'hidden' }\n\nexport async function readOdsWorkbook(content: TokenSource, readText: (name: string) => Promise<string>) {\n const sheets: OdsSheet[] = [];\n const definedNames: DefinedName[] = [];\n const hiddenStyles = new Set<string>();\n let style: string | undefined;\n for await (const t of tokens(content)) {\n if (t.type !== 'startElement') continue;\n const a = t.attributes;\n if (t.name === 'style' && a['family'] === 'table') style = a['name'];\n else if (t.name === 'table-properties' && style && a['display'] === 'false') hiddenStyles.add(style);\n else if (t.name === 'table' && a['name'] !== undefined) {\n sheets.push({ name: a['name'], state: hiddenStyles.has(a['style-name'] ?? '') ? 'hidden' : 'visible' });\n } else if (t.name === 'named-range' && a['name'] && a['cell-range-address']) {\n definedNames.push({ name: a['name'], ref: odsRange(a['cell-range-address']) });\n } else if (t.name === 'named-expression' && a['name'] && a['expression']) {\n definedNames.push({ name: a['name'], ref: odsFormula(a['expression']) });\n }\n }\n\n const meta = await readText('meta.xml');\n const text = (tag: string) => { for (const el of xmlElements(meta, tag)) return unescapeXml(el.body); return undefined; };\n const properties: WorkbookProperties = {};\n for (const [key, tag] of [['title', 'dc:title'], ['subject', 'dc:subject'], ['creator', 'meta:initial-creator'],\n ['keywords', 'meta:keyword'], ['description', 'dc:description']] as const) {\n const v = text(tag);\n if (v) properties[key] = v;\n }\n if (!properties.creator && text('dc:creator')) properties.creator = text('dc:creator');\n const created = text('meta:creation-date');\n // Without a zone the time is UTC, as written by OdsWriter (and stored by Excel)\n const createdAt = created && new Date(/(?:Z|[+-]\\d\\d:?\\d\\d)$/.test(created) ? created : created + 'Z');\n if (createdAt && !isNaN(createdAt.getTime())) properties.created = createdAt;\n return { sheets, definedNames, properties };\n}\n\n// Frozen panes are view settings, kept in settings.xml per sheet\nasync function freezePanes(readText: (name: string) => Promise<string>, sheet: string): Promise<SheetMetadata['freezePanes']> {\n const settings = await readText('settings.xml');\n // Per-sheet entries sit inside the view's own (unnamed) entry and hold no entries themselves\n for (const m of settings.matchAll(/<config:config-item-map-entry\\s+config:name=\"([^\"]*)\"\\s*>([\\s\\S]*?)<\\/config:config-item-map-entry>/g)) {\n if (unescapeXml(m[1]) !== sheet) continue;\n const item = (name: string) => {\n for (const el of xmlElements(m[2], 'config:config-item')) if (el.attrs.includes(`config:name=\"${name}\"`)) return parseInt(el.body, 10) || 0;\n return 0;\n };\n const cols = item('HorizontalSplitMode') === 2 ? item('HorizontalSplitPosition') : 0;\n const rows = item('VerticalSplitMode') === 2 ? item('VerticalSplitPosition') : 0;\n if (!rows && !cols) return undefined;\n const pane = rows && cols ? 'bottomRight' : rows ? 'bottomLeft' : 'topRight';\n return { row: rows, col: cols, topLeftCell: `${colLetter(cols ? item('PositionRight') : 0)}${(rows ? item('PositionBottom') : 0) + 1}`, activePane: pane };\n }\n return undefined;\n}\n\nexport interface OdsParseOptions { sheetName?: string; formulas?: boolean; formatted?: boolean; maxPaddingCells?: number }\n\nexport function parseOds(content: TokenSource, readText: (name: string) => Promise<string>, options: OdsParseOptions): ParseResult {\n let resolveMeta!: (m: SheetMetadata) => void;\n let rejectMeta!: (e: unknown) => void;\n const metadata = new Promise<SheetMetadata>((res, rej) => { resolveMeta = res; rejectMeta = rej; });\n metadata.catch(() => {}); // surfaced by the row iterator; awaiting getMetadata() still sees it\n const comments: SheetComment[] = [];\n let finished: Promise<void> = Promise.resolve();\n\n async function* generate(): AsyncGenerator<RowData> {\n const meta: SheetMetadata = { mergedCells: [], hiddenRows: [], hiddenCols: [], hyperlinks: [] };\n let done!: () => void;\n finished = new Promise(r => { done = r; });\n try {\n let found: string | undefined;\n let depth = 0; // table elements open inside the target sheet (a table in a cell's shape, say)\n let row = 0, col = 0, column = 0;\n let rowRepeat = 1, rowHidden = false;\n let cells: CellValue[] = [], formulas: (string | undefined)[] | undefined, formatted: (string | undefined)[] | undefined;\n let cell: Record<string, string> | undefined;\n let cellRepeat = 1;\n let text: string[] = [], para = -1, link: string | undefined;\n let note: { text: string[]; author?: string; inAuthor: boolean } | undefined;\n let padding = 0, rowPadding = 0;\n const checkPadding = (total: number) => {\n if (total > (options.maxPaddingCells ?? Infinity)) {\n throw new Error(`Security Error: rows padded with more than ${options.maxPaddingCells} empty cells (maxUncompressedBytes).`);\n }\n };\n let emitted = 0;\n\n for await (const t of tokens(content)) {\n if (!found) {\n if (t.type === 'startElement' && t.name === 'table' && (options.sheetName === undefined || t.attributes['name'] === options.sheetName)) {\n found = t.attributes['name'] ?? '';\n }\n continue;\n }\n if (t.type === 'startElement') {\n const a = t.attributes;\n if (t.name === 'table') { depth++; continue; }\n if (depth > 0) continue;\n if (note) {\n if (t.name === 'creator') note.inAuthor = true;\n else if (t.name === 'p') note.text.push('');\n continue;\n }\n switch (t.name) {\n case 'table-column': {\n const n = repeat(a['number-columns-repeated'], MAX_COLUMNS - column);\n if (a['visibility'] === 'collapse') for (let c = column; c < column + n; c++) meta.hiddenCols.push(c + 1);\n column += n;\n break;\n }\n case 'table-row':\n rowRepeat = repeat(a['number-rows-repeated'], MAX_ROWS - row);\n rowHidden = a['visibility'] === 'collapse';\n cells = []; formulas = undefined; formatted = undefined; col = 0; rowPadding = 0;\n break;\n case 'table-cell': case 'covered-table-cell':\n cell = a; cellRepeat = repeat(a['number-columns-repeated'], MAX_COLUMNS - col);\n text = []; para = -1; link = undefined;\n if (t.name === 'table-cell' && (a['number-columns-spanned'] || a['number-rows-spanned'])) {\n const cols = repeat(a['number-columns-spanned'], MAX_COLUMNS - col), rows = repeat(a['number-rows-spanned'], MAX_ROWS - row);\n if (cols > 1 || rows > 1) meta.mergedCells.push(`${colLetter(col)}${row + 1}:${colLetter(col + cols - 1)}${row + rows}`);\n }\n break;\n case 'annotation':\n note = { text: [], inAuthor: false };\n break;\n case 'p':\n if (cell) { text.push(''); para++; }\n break;\n case 's':\n if (cell && para >= 0) text[para] += ' '.repeat(repeat(a['c'], 1000));\n break;\n case 'tab':\n if (cell && para >= 0) text[para] += '\\t';\n break;\n case 'line-break':\n if (cell && para >= 0) text[para] += '\\n';\n break;\n case 'a':\n if (cell && a['href']) link = a['href'];\n break;\n }\n } else if (t.type === 'text') {\n if (depth > 0) continue;\n if (note) {\n if (note.inAuthor) note.author = (note.author ?? '') + t.value;\n else if (note.text.length) note.text[note.text.length - 1] += t.value;\n } else if (cell && para >= 0) text[para] += t.value;\n } else {\n if (t.name === 'table') {\n if (depth-- > 0) continue;\n break; // end of the sheet\n }\n if (depth > 0) continue;\n if (note) {\n if (t.name === 'creator') note.inAuthor = false;\n else if (t.name === 'annotation') {\n comments.push({ ref: `${colLetter(col)}${row + 1}`, text: note.text.join('\\n'), ...(note.author ? { author: note.author } : {}) });\n note = undefined;\n }\n continue;\n }\n if ((t.name === 'table-cell' || t.name === 'covered-table-cell') && cell) {\n const a = cell;\n const shown = text.join('\\n');\n let value: CellValue = null;\n switch (a['value-type']) {\n case 'float': case 'percentage': case 'currency': {\n const n = Number(a['value']);\n value = isNaN(n) ? shown || null : n === 0 ? 0 : n;\n // Excel saves a formula error as the number 0 with the error as its text\n if (a['formula'] && ERROR_TEXT.test(shown)) value = shown;\n break;\n }\n case 'date': value = odsDate(a['date-value'] ?? '') ?? shown; break;\n case 'time': value = odsTime(a['time-value'] ?? '') ?? shown; break;\n case 'boolean': value = a['boolean-value'] === 'true'; break;\n case 'string': value = a['string-value'] ?? shown; break;\n default: value = shown || null; // formula errors carry only their text\n }\n if (value !== null || a['formula']) {\n rowPadding += Math.max(0, col - cells.length);\n checkPadding(padding + rowPadding);\n while (cells.length < col) cells.push(null);\n for (let i = 0; i < cellRepeat; i++) {\n cells[col + i] = value;\n if (options.formulas && a['formula']) (formulas ??= [])[col + i] = odsFormula(a['formula']);\n if (options.formatted && value !== null) (formatted ??= [])[col + i] = shown;\n }\n if (link && value !== null) meta.hyperlinks.push({ ref: `${colLetter(col)}${row + 1}`, hyperlink: link });\n }\n col += cellRepeat;\n cell = undefined;\n } else if (t.name === 'table-row') {\n if (rowHidden) for (let r = row; r < row + rowRepeat; r++) meta.hiddenRows.push(r + 1);\n if (cells.length) {\n for (let i = 0; i < rowRepeat; i++) {\n // Each repeated copy carries its padding again, so a tiny file can't expand without bound\n padding += rowPadding;\n checkPadding(padding);\n if (++emitted > MAX_ROWS) throw new Error('Sheet has more than 1,048,576 rows');\n const data: RowData = { rowNumber: row + i + 1, cells: i ? cells.slice() : cells };\n if (formulas) data.formulas = formulas;\n if (formatted) data.formatted = formatted;\n yield data;\n }\n }\n row += rowRepeat;\n }\n }\n }\n if (!found) throw new Error(options.sheetName === undefined ? 'No worksheets found in the workbook.' : `Sheet with name \"${options.sheetName}\" not found in workbook.`);\n meta.freezePanes = await freezePanes(readText, found);\n resolveMeta(meta);\n } catch (e) {\n rejectMeta(e);\n throw e;\n } finally {\n done();\n }\n }\n\n const rows = generate();\n return new ParseResult(rows, metadata, async () => [], async () => { await finished; return comments; });\n}\n","import { argb, escapeXml as escapeText } from './utils';\nimport { CellStyle, CellFont, CellFill, GradientFill, CellBorder, CellAlignment, HighlightStyle } from './types';\n\nconst escapeXml = (val: unknown) => escapeText(String(val));\n\n// Child elements of a <font> (styles) or, with nameTag \"rFont\", of a rich text run's <rPr>\nexport function fontXml(font: CellFont, nameTag = 'name'): string {\n let xml = '';\n if (font.bold) xml += '<b/>';\n if (font.italic) xml += '<i/>';\n if (font.underline) xml += '<u/>';\n if (font.size) xml += `<sz val=\"${escapeXml(font.size)}\"/>`;\n if (font.color) xml += `<color rgb=\"${argb(font.color)}\"/>`;\n if (font.name) xml += `<${nameTag} val=\"${escapeXml(font.name)}\"/>`;\n return xml;\n}\n\nexport const borderSideXml = (tag: string, s?: { style: string; color?: string }) =>\n s ? `<${tag} style=\"${escapeXml(s.style)}\">${s.color ? `<color rgb=\"${argb(s.color)}\"/>` : ''}</${tag}>` : `<${tag}/>`;\n\nexport function borderXml(b: CellBorder): string {\n const side = borderSideXml;\n return `<border>${side('left', b.left)}${side('right', b.right)}${side('top', b.top)}${side('bottom', b.bottom)}<diagonal/></border>`;\n}\n\nexport function fillXml(fill: CellFill | GradientFill): string {\n if (fill.type === 'gradient') {\n const stops = fill.stops.map(s => `<stop position=\"${s.position}\"><color rgb=\"${argb(s.color)}\"/></stop>`).join('');\n return `<fill><gradientFill degree=\"${escapeXml(fill.degree ?? 0)}\">${stops}</gradientFill></fill>`;\n }\n return `<fill><patternFill patternType=\"solid\"><fgColor rgb=\"${argb(fill.fgColor)}\"/></patternFill></fill>`;\n}\n\n// Attributes of an <alignment> element\nexport function alignmentAttrs(alignment: CellAlignment): Record<string, string> {\n const attrs: Record<string, string> = {};\n if (alignment.horizontal) attrs.horizontal = escapeXml(alignment.horizontal);\n // OOXML has no \"middle\"; Excel repairs the file if it sees one\n if (alignment.vertical) attrs.vertical = alignment.vertical === 'middle' ? 'center' : escapeXml(alignment.vertical);\n if (alignment.wrapText) attrs.wrapText = '1';\n return attrs;\n}\n\n// Registry of unique styles: maps to integer index for OOXML styleSheet\ninterface StyleRegistry {\n fonts: Map<string, number>;\n fills: Map<string, number>;\n borders: Map<string, number>;\n numFmts: Map<string, number>;\n cellXfs: { fontId: number; fillId: number; borderId: number; numFmtId: number; alignmentXml: string }[];\n}\n\nexport class StyleEngine {\n private registry: StyleRegistry = {\n fonts: new Map(),\n fills: new Map(),\n borders: new Map(),\n numFmts: new Map(),\n cellXfs: [],\n };\n private xfIndex = new Map<string, number>();\n // Differential formats used by conditional formatting, in dxfId order\n private dxfs = new Map<string, number>();\n\n // dxfId for a highlight style\n registerDxf(style: HighlightStyle): number {\n const key = JSON.stringify(style);\n let id = this.dxfs.get(key);\n if (id === undefined) {\n this.dxfs.set(key, id = this.dxfs.size);\n if (style.numFmt) this.registerNumFmt(style.numFmt);\n }\n return id;\n }\n\n private dxfXml(style: HighlightStyle): string {\n let xml = style.font ? `<font>${fontXml(style.font)}</font>` : '';\n if (style.numFmt) xml += `<numFmt numFmtId=\"${this.registerNumFmt(style.numFmt)}\" formatCode=\"${escapeXml(style.numFmt)}\"/>`;\n if (style.fill?.type === 'solid') {\n // A differential solid fill takes its colour from bgColor\n const c = argb(style.fill.fgColor);\n xml += `<fill><patternFill patternType=\"solid\"><fgColor rgb=\"${c}\"/><bgColor rgb=\"${c}\"/></patternFill></fill>`;\n }\n if (style.border) xml += borderXml(style.border);\n return `<dxf>${xml}</dxf>`;\n }\n\n registerStyle(style: CellStyle): number {\n const fontId = style.font ? this.registerFont(style.font) : 0;\n const fillId = style.fill ? this.registerFill(style.fill) : 0;\n const borderId = style.border ? this.registerBorder(style.border) : 0;\n const numFmtId = style.numFmt ? this.registerNumFmt(style.numFmt) : 0;\n const alignmentXml = style.alignment ? this.buildAlignmentXml(style.alignment) : '';\n\n const key = `${fontId}|${fillId}|${borderId}|${numFmtId}|${alignmentXml}`;\n const existing = this.xfIndex.get(key);\n if (existing !== undefined) return existing;\n\n this.registry.cellXfs.push({ fontId, fillId, borderId, numFmtId, alignmentXml });\n const id = this.registry.cellXfs.length; // 1-based because 0 is the default xf\n this.xfIndex.set(key, id);\n return id;\n }\n\n private registerFont(font: CellFont): number {\n const key = JSON.stringify(font);\n if (this.registry.fonts.has(key)) return this.registry.fonts.get(key)!;\n const id = this.registry.fonts.size + 1; // slot 0 = default font\n this.registry.fonts.set(key, id);\n return id;\n }\n\n private registerFill(fill: CellFill | GradientFill): number {\n const key = JSON.stringify(fill);\n if (this.registry.fills.has(key)) return this.registry.fills.get(key)!;\n const id = this.registry.fills.size + 2; // slots 0-1 = required none/gray125\n this.registry.fills.set(key, id);\n return id;\n }\n\n private registerBorder(border: CellBorder): number {\n const key = JSON.stringify(border);\n if (this.registry.borders.has(key)) return this.registry.borders.get(key)!;\n const id = this.registry.borders.size + 1; // slot 0 = empty border\n this.registry.borders.set(key, id);\n return id;\n }\n\n private registerNumFmt(fmt: string): number {\n if (this.registry.numFmts.has(fmt)) return this.registry.numFmts.get(fmt)!;\n const id = 164 + this.registry.numFmts.size;\n this.registry.numFmts.set(fmt, id);\n return id;\n }\n\n private buildAlignmentXml(alignment: CellAlignment): string {\n const attrs = Object.entries(alignmentAttrs(alignment)).map(([k, v]) => `${k}=\"${v}\"`);\n return attrs.length ? `<alignment ${attrs.join(' ')}/>` : '';\n }\n\n // Serialize entire style registry to OOXML styleSheet XML\n toXml(): string {\n const numFmtsXml = this.buildNumFmtsXml();\n const fontsXml = this.buildFontsXml();\n const fillsXml = this.buildFillsXml();\n const bordersXml = this.buildBordersXml();\n const cellXfsXml = this.buildCellXfsXml();\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<styleSheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\">\n${numFmtsXml}\n${fontsXml}\n${fillsXml}\n${bordersXml}\n<cellStyleXfs count=\"1\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\"/></cellStyleXfs>\n<cellXfs count=\"${this.registry.cellXfs.length + 1}\">\n${cellXfsXml}\n</cellXfs>\n<cellStyles count=\"1\"><cellStyle name=\"Normal\" xfId=\"0\" builtinId=\"0\"/></cellStyles>\n${this.dxfs.size ? `<dxfs count=\"${this.dxfs.size}\">${[...this.dxfs.keys()].map(k => this.dxfXml(JSON.parse(k))).join('')}</dxfs>` : ''}\n</styleSheet>`;\n }\n\n private buildNumFmtsXml(): string {\n if (this.registry.numFmts.size === 0) return '';\n const entries: string[] = [];\n for (const [fmt, id] of this.registry.numFmts) {\n entries.push(`<numFmt numFmtId=\"${id}\" formatCode=\"${escapeXml(fmt)}\"/>`);\n }\n return `<numFmts count=\"${entries.length}\">${entries.join('')}</numFmts>`;\n }\n\n private buildFontsXml(): string {\n const fontEntries: string[] = [\n '<font><sz val=\"11\"/><name val=\"Calibri\"/></font>' // default\n ];\n\n for (const [key] of this.registry.fonts) {\n fontEntries.push(`<font>${fontXml(JSON.parse(key))}</font>`);\n }\n\n return `<fonts count=\"${fontEntries.length}\">${fontEntries.join('')}</fonts>`;\n }\n\n private buildFillsXml(): string {\n const fillEntries: string[] = [\n '<fill><patternFill patternType=\"none\"/></fill>',\n '<fill><patternFill patternType=\"gray125\"/></fill>',\n ];\n\n for (const [key] of this.registry.fills) fillEntries.push(fillXml(JSON.parse(key)));\n\n return `<fills count=\"${fillEntries.length}\">${fillEntries.join('')}</fills>`;\n }\n\n private buildBordersXml(): string {\n const borderEntries: string[] = [\n '<border><left/><right/><top/><bottom/><diagonal/></border>'\n ];\n\n for (const [key] of this.registry.borders) borderEntries.push(borderXml(JSON.parse(key)));\n\n return `<borders count=\"${borderEntries.length}\">${borderEntries.join('')}</borders>`;\n }\n\n private buildCellXfsXml(): string {\n // Default xf\n const entries: string[] = [\n '<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\"/>'\n ];\n\n for (const xf of this.registry.cellXfs) {\n entries.push(\n `<xf numFmtId=\"${xf.numFmtId}\" fontId=\"${xf.fontId}\" fillId=\"${xf.fillId}\" borderId=\"${xf.borderId}\" xfId=\"0\" applyNumberFormat=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"${xf.alignmentXml ? ' applyAlignment=\"1\"' : ''}>${xf.alignmentXml}</xf>`\n );\n }\n\n return entries.join('\\n');\n }\n}\n","import { argb, escapeXml as escapeText } from './utils';\nimport { ConditionalFormat, DataBarRule, ColorScaleRule, ConditionalFormatRule, HighlightStyle } from './types';\n\nconst escapeXml = (val: unknown) => escapeText(String(val));\n\nconst color = (rgb: string) => `<color rgb=\"${argb(rgb)}\"/>`;\nconst bound = (type: 'min' | 'max', value?: number) =>\n value === undefined ? `<cfvo type=\"${type}\"/>` : `<cfvo type=\"num\" val=\"${escapeXml(value)}\"/>`;\nconst formula = (f: string | number) => `<formula>${escapeXml(String(f).replace(/^=/, ''))}</formula>`;\n// Excel string literal inside a formula\nconst literal = (s: string) => `\"${s.replace(/\"/g, '\"\"')}\"`;\n\nexport class ConditionalFormatter {\n // `dxf` registers a highlight style and returns its dxfId\n constructor(private dxf: (style: HighlightStyle) => number = () => 0) {}\n\n // Priorities must be unique within a sheet: rule i gets priority i + 1\n toXml(formats: ConditionalFormat[]): string {\n return formats.map((cf, i) => {\n // The first cell of the first area: relative formulas are written for it\n const topLeft = cf.range.split(/[\\s:]/)[0].replace(/\\$/g, '');\n const rule = this.ruleXml(cf.rule, i + 1, topLeft);\n return `<conditionalFormatting sqref=\"${escapeXml(cf.range)}\">${rule}</conditionalFormatting>`;\n }).join('\\n');\n }\n\n private ruleXml(rule: ConditionalFormatRule, priority: number, cell: string): string {\n const head = (type: string, extra = '') => {\n const dxf = 'style' in rule ? ` dxfId=\"${this.dxf(rule.style)}\"` : '';\n return `<cfRule type=\"${type}\"${dxf} priority=\"${priority}\"${extra}>`;\n };\n switch (rule.type) {\n case 'dataBar': return `${head('dataBar')}${this.buildDataBar(rule)}</cfRule>`;\n case 'colorScale': return `${head('colorScale')}${this.buildColorScale(rule)}</cfRule>`;\n case 'cellIs':\n return `${head('cellIs', ` operator=\"${escapeXml(rule.operator)}\"`)}${rule.formulae.map(formula).join('')}</cfRule>`;\n case 'expression': return `${head('expression')}${formula(rule.formula)}</cfRule>`;\n case 'top10':\n return `${head('top10', `${rule.percent ? ' percent=\"1\"' : ''}${rule.bottom ? ' bottom=\"1\"' : ''} rank=\"${escapeXml(rule.rank)}\"`)}</cfRule>`;\n case 'aboveAverage': return `${head('aboveAverage', rule.below ? ' aboveAverage=\"0\"' : '')}</cfRule>`;\n case 'duplicateValues':\n case 'uniqueValues': return `${head(rule.type)}</cfRule>`;\n case 'containsText':\n case 'notContainsText':\n case 'beginsWith':\n case 'endsWith': {\n // Excel stores the test as a formula too, and evaluates that one\n const t = literal(rule.text);\n const test = {\n containsText: `NOT(ISERROR(SEARCH(${t},${cell})))`,\n notContainsText: `ISERROR(SEARCH(${t},${cell}))`,\n beginsWith: `LEFT(${cell},LEN(${t}))=${t}`,\n endsWith: `RIGHT(${cell},LEN(${t}))=${t}`,\n }[rule.type];\n const operator = rule.type === 'notContainsText' ? 'notContains' : rule.type;\n return `${head(rule.type, ` operator=\"${operator}\" text=\"${escapeXml(rule.text)}\"`)}${formula(test)}</cfRule>`;\n }\n case 'iconSet': {\n const n = parseInt(rule.iconSet, 10);\n const cfvos = Array.from({ length: n }, (_, k) => `<cfvo type=\"percent\" val=\"${Math.round(k * 100 / n)}\"/>`).join('');\n const attrs = `${rule.reverse ? ' reverse=\"1\"' : ''}${rule.showValue === false ? ' showValue=\"0\"' : ''}`;\n return `${head('iconSet')}<iconSet iconSet=\"${escapeXml(rule.iconSet)}\"${attrs}>${cfvos}</iconSet></cfRule>`;\n }\n default:\n throw new Error(`Unknown conditional format type \"${(rule as { type: string }).type}\".`);\n }\n }\n\n private buildDataBar(rule: DataBarRule): string {\n return `<dataBar>${bound('min', rule.minValue)}${bound('max', rule.maxValue)}${color(rule.color)}</dataBar>`;\n }\n\n private buildColorScale(rule: ColorScaleRule): string {\n const mid = rule.midColor !== undefined;\n return `<colorScale><cfvo type=\"min\"/>${mid ? '<cfvo type=\"percentile\" val=\"50\"/>' : ''}<cfvo type=\"max\"/>` +\n `${color(rule.minColor)}${mid ? color(rule.midColor!) : ''}${color(rule.maxColor)}</colorScale>`;\n }\n}\n","export type FormulaResult = number | string | boolean | null;\n\n// A formula cell handed to loadData; its value is computed when a formula reads it\nexport interface FormulaCell { formula: string }\n\ntype TokenType = 'NUMBER' | 'STRING' | 'CELL' | 'RANGE' | 'IDENTIFIER' | 'OP' | 'PAREN_L' | 'PAREN_R' | 'COMMA';\n\ninterface Token {\n type: TokenType;\n value: string;\n}\n\ninterface ASTNode {\n type: 'NUMBER' | 'STRING' | 'BOOL' | 'CELL' | 'RANGE' | 'CALL' | 'BINARY' | 'NEG' | 'PERCENT';\n value?: any;\n left?: ASTNode;\n right?: ASTNode;\n operator?: string;\n name?: string;\n args?: ASTNode[];\n}\n\n// An Excel error value (#DIV/0!, #VALUE!), kept apart from text that happens to start with \"#\"\nexport class FormulaError {\n constructor(readonly code: string) {}\n}\n\nexport const ERROR_CODES = new Set(['#NULL!', '#DIV/0!', '#VALUE!', '#REF!', '#NAME?', '#NUM!', '#N/A']);\n\n// Syntax or functions this engine doesn't know: no cached value, Excel computes it on open\nclass Unsupported extends Error {}\n// A formula that reads its own cell, directly or through others\nclass Circular extends Error {}\n\ntype Value = number | string | boolean | null | FormulaError;\n\nconst DIV0 = new FormulaError('#DIV/0!');\nconst VALUE = new FormulaError('#VALUE!');\n\n// Numbers turned into text keep Excel's 15 significant digits (\"0.333333333333333\", 1E+21)\nexport function numberText(n: number): string {\n return String(Number(n.toPrecision(15))).replace('e', 'E');\n}\n\nexport class FormulaEngine {\n private cells = new Map<string, FormulaResult | FormulaCell>();\n private results = new Map<string, Value>();\n private evaluating = new Set<string>();\n\n clear() {\n this.cells.clear();\n this.results.clear();\n }\n\n loadData(data: (FormulaResult | FormulaCell)[][], startRow = 1) {\n data.forEach((row, ri) => {\n row.forEach((cell, ci) => {\n const ref = this.toRef(ri + startRow, ci);\n this.cells.set(ref, cell);\n });\n });\n }\n\n // Errors come back as their code (\"#DIV/0!\")\n evaluate(formula: string): FormulaResult {\n const v = this.evaluateRaw(formula);\n return v instanceof FormulaError ? v.code : v;\n }\n\n // Like evaluate, but errors stay FormulaError so text such as \"#1 pick\" is told apart from them\n evaluateRaw(formula: string): Value {\n try {\n return this.run(formula);\n } catch (err) {\n // A circular reference is stored as 0, as Excel does\n if (err instanceof Circular) return 0;\n return null;\n }\n }\n\n // The value of a loaded cell, computing its formula (and the formulas it reads) when it has one\n cellValue(ref: string): Value {\n try {\n return this.lookup(ref.toUpperCase());\n } catch (err) {\n if (err instanceof Circular) return 0;\n return null;\n }\n }\n\n private run(formula: string): Value {\n const clean = formula.replace(/^=/, '').trim();\n if (!clean) return null;\n // A formula is never blank: =A1 over an empty cell is 0\n return this.scalar(this.parse(this.tokenize(clean))) ?? 0;\n }\n\n private lookup(ref: string): Value {\n const cell = this.cells.get(ref);\n if (cell === null || typeof cell !== 'object') return cell ?? null;\n if (this.results.has(ref)) {\n const known = this.results.get(ref)!;\n if (known === undefined) throw new Unsupported();\n return known;\n }\n if (this.evaluating.has(ref)) throw new Circular();\n this.evaluating.add(ref);\n try {\n const v = this.run(cell.formula);\n this.results.set(ref, v);\n return v;\n } catch (err) {\n if (!(err instanceof Circular)) this.results.set(ref, undefined as any);\n throw err;\n } finally {\n this.evaluating.delete(ref);\n }\n }\n\n private tokenize(expr: string): Token[] {\n const tokens: Token[] = [];\n let i = 0;\n while (i < expr.length) {\n const char = expr[i];\n if (/\\s/.test(char)) { i++; continue; }\n if (char === '(') { tokens.push({ type: 'PAREN_L', value: '(' }); i++; continue; }\n if (char === ')') { tokens.push({ type: 'PAREN_R', value: ')' }); i++; continue; }\n if (char === ',') { tokens.push({ type: 'COMMA', value: ',' }); i++; continue; }\n if (/[+\\-*/^<>=%&]/.test(char)) {\n let op = char;\n if (char === '<' || char === '>') {\n if (expr[i + 1] === '=') { op += '='; i++; }\n else if (char === '<' && expr[i + 1] === '>') { op += '>'; i++; }\n }\n tokens.push({ type: 'OP', value: op });\n i++;\n continue;\n }\n if (char === '\"') {\n // \"\" inside a string is one quote\n let str = '';\n i++;\n for (;;) {\n if (i >= expr.length) throw new Unsupported();\n if (expr[i] === '\"') {\n if (expr[i + 1] !== '\"') break;\n i++;\n }\n str += expr[i++];\n }\n i++;\n tokens.push({ type: 'STRING', value: str });\n continue;\n }\n const num = /^(?:\\d+\\.?\\d*|\\.\\d+)(?:[Ee][+-]?\\d+)?/.exec(expr.slice(i));\n if (num) {\n tokens.push({ type: 'NUMBER', value: num[0] });\n i += num[0].length;\n continue;\n }\n if (/[A-Za-z$]/.test(char)) {\n // \"$\" only pins a reference when copied; it does not change what it points at\n let id = '';\n while (i < expr.length && /[A-Za-z0-9$_.]/.test(expr[i])) { id += expr[i++]; }\n id = id.replace(/\\$/g, '');\n if (i < expr.length && expr[i] === ':') {\n i++;\n let endId = '';\n while (i < expr.length && /[A-Za-z0-9$]/.test(expr[i])) { endId += expr[i++]; }\n endId = endId.replace(/\\$/g, '');\n if (!/^[A-Z]{1,3}\\d+$/i.test(id) || !/^[A-Z]{1,3}\\d+$/i.test(endId)) throw new Unsupported();\n tokens.push({ type: 'RANGE', value: id.toUpperCase() + ':' + endId.toUpperCase() });\n } else if (/^[A-Z]{1,3}\\d+$/i.test(id)) {\n tokens.push({ type: 'CELL', value: id.toUpperCase() });\n } else {\n tokens.push({ type: 'IDENTIFIER', value: id.toUpperCase() });\n }\n continue;\n }\n // Sheet references ('Q1'!A1, Data!A1), arrays, error literals and the rest\n throw new Unsupported();\n }\n return tokens;\n }\n\n private parse(tokens: Token[]): ASTNode {\n let pos = 0;\n const isOp = (...ops: string[]) => pos < tokens.length && tokens[pos].type === 'OP' && ops.includes(tokens[pos].value);\n const expect = (type: TokenType) => {\n if (tokens[pos]?.type !== type) throw new Unsupported();\n pos++;\n };\n\n const parseAtom = (): ASTNode => {\n const token = tokens[pos];\n if (!token) throw new Unsupported();\n if (token.type === 'NUMBER') { pos++; return { type: 'NUMBER', value: parseFloat(token.value) }; }\n if (token.type === 'STRING') { pos++; return { type: 'STRING', value: token.value }; }\n if (token.type === 'CELL') { pos++; return { type: 'CELL', value: token.value }; }\n if (token.type === 'RANGE') { pos++; return { type: 'RANGE', value: token.value }; }\n if (token.type === 'IDENTIFIER') {\n const name = token.value;\n pos++;\n if (tokens[pos]?.type === 'PAREN_L') {\n pos++;\n const args: ASTNode[] = [];\n if (tokens[pos]?.type !== 'PAREN_R') {\n args.push(parseExpression());\n while (tokens[pos]?.type === 'COMMA') {\n pos++;\n args.push(parseExpression());\n }\n }\n expect('PAREN_R');\n return { type: 'CALL', name, args };\n }\n if (name === 'TRUE') return { type: 'BOOL', value: true };\n if (name === 'FALSE') return { type: 'BOOL', value: false };\n throw new Unsupported(); // defined names\n }\n if (token.type === 'PAREN_L') {\n pos++;\n const node = parseExpression();\n expect('PAREN_R');\n return node;\n }\n throw new Unsupported();\n };\n\n // Unary minus binds tighter than ^ in Excel (-2^2 is 4); % divides by 100\n const parseUnary = (): ASTNode => {\n if (isOp('-')) { pos++; return { type: 'NEG', left: parseUnary() }; }\n if (isOp('+')) { pos++; return parseUnary(); }\n let node = parseAtom();\n while (isOp('%')) { pos++; node = { type: 'PERCENT', left: node }; }\n return node;\n };\n\n const binary = (next: () => ASTNode, ...ops: string[]) => (): ASTNode => {\n let node = next();\n while (isOp(...ops)) {\n const operator = tokens[pos++].value;\n node = { type: 'BINARY', operator, left: node, right: next() };\n }\n return node;\n };\n // Excel's ^ is left-associative: 2^3^2 is 64\n const parsePower = binary(parseUnary, '^');\n const parseFactor = binary(parsePower, '*', '/');\n const parseTerm = binary(parseFactor, '+', '-');\n const parseConcat = binary(parseTerm, '&');\n const parseExpression = binary(parseConcat, '=', '<>', '<', '>', '<=', '>=');\n\n const ast = parseExpression();\n if (pos !== tokens.length) throw new Unsupported();\n return ast;\n }\n\n // A single value: a range used where one value is expected is not supported (implicit intersection)\n private scalar(node: ASTNode): Value {\n const v = this.evaluateAst(node);\n if (Array.isArray(v)) throw new Unsupported();\n return v;\n }\n\n private evaluateAst(node: ASTNode): any {\n switch (node.type) {\n case 'NUMBER': case 'STRING': case 'BOOL': return node.value;\n case 'CELL': return this.lookup(node.value);\n case 'RANGE': return this.getRangeValues(node.value);\n case 'NEG': {\n const n = toNumber(this.scalar(node.left!));\n return n instanceof FormulaError ? n : -n;\n }\n case 'PERCENT': {\n const n = toNumber(this.scalar(node.left!));\n return n instanceof FormulaError ? n : n / 100;\n }\n case 'BINARY': return this.binary(node.operator!, this.scalar(node.left!), this.scalar(node.right!));\n case 'CALL': return this.call(node.name!, node.args!);\n }\n throw new Unsupported();\n }\n\n private binary(op: string, left: Value, right: Value): Value {\n if (left instanceof FormulaError) return left;\n if (right instanceof FormulaError) return right;\n if (op === '&') return toText(left) + toText(right);\n if (['=', '<>', '<', '>', '<=', '>='].includes(op)) {\n const c = compare(left, right);\n return op === '=' ? c === 0 : op === '<>' ? c !== 0 : op === '<' ? c < 0 : op === '>' ? c > 0 : op === '<=' ? c <= 0 : c >= 0;\n }\n const l = toNumber(left), r = toNumber(right);\n if (l instanceof FormulaError) return l;\n if (r instanceof FormulaError) return r;\n switch (op) {\n case '+': return l + r;\n case '-': return l - r;\n case '*': return l * r;\n case '/': return r === 0 ? DIV0 : l / r;\n case '^': {\n const p = Math.pow(l, r);\n return isFinite(p) ? p : new FormulaError('#NUM!');\n }\n }\n throw new Unsupported();\n }\n\n private call(name: string, argNodes: ASTNode[]): Value {\n if (name === 'IF') {\n if (argNodes.length < 1 || argNodes.length > 3) throw new Unsupported();\n const cond = toBool(this.scalar(argNodes[0]));\n if (cond instanceof FormulaError) return cond;\n if (cond) return argNodes.length > 1 ? this.scalar(argNodes[1]) ?? 0 : true;\n return argNodes.length > 2 ? this.scalar(argNodes[2]) ?? 0 : false;\n }\n if (name === 'CONCATENATE') {\n let out = '';\n for (const a of argNodes) {\n const v = this.scalar(a);\n if (v instanceof FormulaError) return v;\n out += toText(v);\n }\n return out;\n }\n if (!['SUM', 'AVERAGE', 'COUNT', 'MAX', 'MIN'].includes(name)) throw new Unsupported();\n // Values typed into the call count (TRUE as 1, \"3\" as 3); in referenced cells only numbers do\n const nums: number[] = [];\n for (const a of argNodes) {\n const v = this.evaluateAst(a);\n const referenced = a.type === 'CELL' || a.type === 'RANGE';\n for (const x of Array.isArray(v) ? v : [v]) {\n if (x instanceof FormulaError) {\n if (name === 'COUNT') continue;\n return x;\n }\n if (typeof x === 'number') nums.push(x);\n else if (!referenced && x !== null) {\n const n = toNumber(x);\n if (n instanceof FormulaError) {\n if (name === 'COUNT') continue;\n return n;\n }\n nums.push(n);\n }\n }\n }\n switch (name) {\n case 'SUM': return nums.reduce((a, b) => a + b, 0);\n case 'COUNT': return nums.length;\n case 'AVERAGE': return nums.length ? nums.reduce((a, b) => a + b, 0) / nums.length : DIV0;\n case 'MAX': return nums.length ? Math.max(...nums) : 0;\n default: return nums.length ? Math.min(...nums) : 0;\n }\n }\n\n private getRangeValues(range: string): Value[] {\n const [startRef, endRef] = range.split(':');\n const [c1, r1] = this.parseRef(startRef);\n const [c2, r2] = this.parseRef(endRef);\n const values: Value[] = [];\n // A3:A1 is the same range as A1:A3\n for (let r = Math.min(r1, r2); r <= Math.max(r1, r2); r++) {\n for (let c = Math.min(c1, c2); c <= Math.max(c1, c2); c++) {\n values.push(this.lookup(this.toRef(r, c - 1)));\n }\n }\n return values;\n }\n\n private parseRef(ref: string): [number, number] {\n const match = ref.match(/^([A-Z]+)(\\d+)$/i)!;\n const col = match[1].toUpperCase().split('').reduce((acc, ch) => acc * 26 + (ch.charCodeAt(0) - 64), 0);\n const row = parseInt(match[2], 10);\n return [col, row];\n }\n\n private toRef(row: number, colIndex: number): string {\n let col = '';\n let c = colIndex + 1;\n while (c > 0) {\n col = String.fromCharCode(((c - 1) % 26) + 65) + col;\n c = Math.floor((c - 1) / 26);\n }\n return `${col}${row}`;\n }\n}\n\n// Excel's conversions: blank is 0 / \"\" / FALSE, booleans are 1 and 0, text must read as a number\nfunction toNumber(v: Value): number | FormulaError {\n if (v instanceof FormulaError) return v;\n if (v === null) return 0;\n if (typeof v === 'boolean') return v ? 1 : 0;\n if (typeof v === 'number') return v;\n const t = v.trim();\n const n = t === '' ? NaN : Number(t);\n return isFinite(n) ? n : VALUE;\n}\n\nfunction toText(v: Value): string {\n if (v === null) return '';\n if (typeof v === 'boolean') return v ? 'TRUE' : 'FALSE';\n if (typeof v === 'number') return numberText(v);\n return String(v);\n}\n\nfunction toBool(v: Value): boolean | FormulaError {\n if (v instanceof FormulaError) return v;\n if (v === null) return false;\n if (typeof v === 'boolean') return v;\n if (typeof v === 'number') return v !== 0;\n const t = v.toUpperCase();\n return t === 'TRUE' ? true : t === 'FALSE' ? false : VALUE;\n}\n\n// Excel orders numbers < text < booleans; text compares without case. A blank takes the other side's type.\nfunction compare(a: Value, b: Value): number {\n if (a === null) a = typeof b === 'string' ? '' : typeof b === 'boolean' ? false : 0;\n if (b === null) b = typeof a === 'string' ? '' : typeof a === 'boolean' ? false : 0;\n const rank = (v: Value) => typeof v === 'number' ? 0 : typeof v === 'string' ? 1 : 2;\n if (rank(a) !== rank(b)) return rank(a) - rank(b);\n if (typeof a === 'string') {\n const x = a.toLowerCase(), y = (b as string).toLowerCase();\n return x < y ? -1 : x > y ? 1 : 0;\n }\n const x = Number(a), y = Number(b);\n return x < y ? -1 : x > y ? 1 : 0;\n}\n","import { Row, StyledCell, CellValue, SheetOptions, SheetImage, CellComment, TableOptions, PageSetup, RichTextRun, WorkbookProperties, DefinedName } from './types';\nimport { StyleEngine, fontXml } from './style-engine';\nimport { ConditionalFormatter } from './conditional-formatter';\nimport { FormulaEngine, FormulaError } from './formula-engine';\nimport { ZipStreamWriter } from './zip-stream-writer';\nimport { encodeXString, colLetter, colIndex, dateToSerial, validateSheetName, defaultDateFormat, checkCellText, argb, escapeXml as escapeText, MAX_COLUMNS, MAX_ROWS } from './utils';\nimport { imageInfo, drawingXml, type ImageInfo } from './image';\n\nconst escapeXml = (val: unknown): string => escapeText(String(val)).replace(/'/g, ''');\n\n// \"A1:B2\" (or one cell) -> 0-based corners, checked against Excel's sheet size\nexport function parseRange(ref: string, what: string): { c1: number; r1: number; c2: number; r2: number } {\n const m = /^\\$?([A-Za-z]{1,3})\\$?(\\d+)(?::\\$?([A-Za-z]{1,3})\\$?(\\d+))?$/.exec(String(ref).trim());\n const box = m && {\n c1: colIndex(m[1]), r1: parseInt(m[2], 10) - 1,\n c2: colIndex(m[3] ?? m[1]), r2: parseInt(m[4] ?? m[2], 10) - 1,\n };\n if (!box || [box.c1, box.c2].some(c => c >= MAX_COLUMNS) || [box.r1, box.r2].some(r => r < 0 || r >= MAX_ROWS)) {\n throw new Error(`Invalid ${what} \"${ref}\".`);\n }\n return { c1: Math.min(box.c1, box.c2), r1: Math.min(box.r1, box.r2), c2: Math.max(box.c1, box.c2), r2: Math.max(box.r1, box.r2) };\n}\n\ntype Box = ReturnType<typeof parseRange>;\nconst overlaps = (a: Box, b: Box) => a.c1 <= b.c2 && b.c1 <= a.c2 && a.r1 <= b.r2 && b.r1 <= a.r2;\n\nfunction isStyledCell(v: CellValue | StyledCell): v is StyledCell {\n return typeof v === 'object' && v !== null && 'value' in v;\n}\n\n\n// \"A1:C10\" -> \"$A$1:$C$10\"\nconst absoluteRef = (ref: string) => ref.replace(/([A-Za-z]+)(\\d+)/g, '$$$1$$$2');\n\nfunction stringXml(s: string): string {\n const text = escapeXml(encodeXString(s));\n // Leading/trailing whitespace is dropped by Excel unless marked as preserved\n return /^\\s|\\s$/.test(s) ? `<t xml:space=\"preserve\">${text}</t>` : `<t>${text}</t>`;\n}\n\n// Rich text runs; plain text is one unformatted run\nconst runsXml = (text: string | RichTextRun[]) => typeof text === 'string' ? `<r>${stringXml(text)}</r>`\n : text.map(run => `<r>${run.font ? `<rPr>${fontXml(run.font, 'rFont')}</rPr>` : ''}${stringXml(run.text)}</r>`).join('');\n\nconst REL = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships';\n\n// What a sheet produced while streaming, for the parts written after it\ninterface SheetParts {\n links: string[]; // external hyperlink targets, rId1..n\n comments: { ref: string; row: number; col: number; comment: CellComment }[];\n}\n\n// Excel's legacy 16-bit sheet password hash (ECMA-376 Part 4, 14.7.1)\nexport function legacyPasswordHash(password: string): string {\n let hash = 0;\n for (let i = password.length - 1; i >= 0; i--) {\n hash = ((hash >> 14) & 1) | ((hash << 1) & 0x7fff);\n hash ^= password.charCodeAt(i);\n }\n hash = ((hash >> 14) & 1) | ((hash << 1) & 0x7fff);\n return (hash ^ password.length ^ 0xce4b).toString(16).toUpperCase();\n}\n\nconst quoteSheet = (name: string) => `'${name.replace(/'/g, \"''\")}'`;\n\nexport interface WriterOptions {\n // Store strings once in xl/sharedStrings.xml instead of inline. Smaller files when values repeat,\n // but every distinct string is kept in memory until the workbook is finished.\n sharedStrings?: boolean;\n properties?: WorkbookProperties;\n definedNames?: DefinedName[];\n}\n\nconst W3CDTF = (d: Date) => d.toISOString().replace(/\\.\\d{3}Z$/, 'Z');\nconst propXml = (tag: string, v?: string) => v === undefined ? '' : `<${tag}>${escapeXml(v)}</${tag}>`;\n\nfunction corePropsXml(p: WorkbookProperties): string {\n const created = p.created ? `<dcterms:created xsi:type=\"dcterms:W3CDTF\">${W3CDTF(p.created)}</dcterms:created>` : '';\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<cp:coreProperties xmlns:cp=\"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:dcterms=\"http://purl.org/dc/terms/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">` +\n propXml('dc:title', p.title) + propXml('dc:subject', p.subject) + propXml('dc:creator', p.creator) + propXml('cp:keywords', p.keywords) +\n propXml('dc:description', p.description) + propXml('cp:category', p.category) + created + '</cp:coreProperties>';\n}\n\nfunction appPropsXml(p: WorkbookProperties): string {\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Properties xmlns=\"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\"><Application>XlsxFlow</Application>${propXml('Manager', p.manager)}${propXml('Company', p.company)}</Properties>`;\n}\n\n// A name Excel accepts: letters, digits, _ . and \\, not a cell reference (A1, R1C1) and not reserved\nfunction validateDefinedName(name: string) {\n if (!/^[A-Za-z_\\\\][A-Za-z0-9_.\\\\]*$/.test(name) || name.length > 255 || /^[A-Za-z]{1,3}\\d+$/.test(name) || /^([Rr]\\d*)?([Cc]\\d*)?$/.test(name) || /^_xlnm\\./i.test(name)) {\n throw new Error(`Invalid defined name \"${name}\"`);\n }\n}\n\n// Builds a complete .xlsx Uint8Array from structured row data.\n// Uses a pure JS ZIP writer (no dependencies) to pack OOXML parts.\nexport class SheetWriter {\n private styleEngine = new StyleEngine();\n private conditionalFormatter = new ConditionalFormatter(style => this.styleEngine.registerDxf(style));\n private formulaEngine = new FormulaEngine();\n private sheets: { name: string; rows: Row[] | AsyncIterable<Row>; options: SheetOptions }[] = [];\n private sharedStrings = new Map<string, number>();\n private sharedStringRefs = 0;\n // Embedded pictures by their data object, so a logo used on every sheet is stored once\n private media = new Map<Uint8Array | ArrayBuffer, { path: string; bytes: Uint8Array; info: ImageInfo }>();\n\n constructor(private writerOptions: WriterOptions = {}) {}\n\n addSheet(name: string, rows: Row[] | AsyncIterable<Row>, options: SheetOptions = {}): this {\n validateSheetName(name, this.sheets.map(s => s.name));\n const zoom = options.view?.zoom;\n if (zoom !== undefined && !(zoom >= 10 && zoom <= 400)) throw new Error(`Zoom must be between 10 and 400, got ${zoom}`);\n this.sheets.push({ name, rows, options });\n return this;\n }\n\n // Accept rows directly or via options, returning a standard ReadableStream\n write(rows?: Row[], options: SheetOptions = {}): ReadableStream<Uint8Array> {\n if (rows) {\n this.addSheet(options.name ?? 'Sheet1', rows, options);\n }\n if (this.sheets.length === 0) {\n this.addSheet('Sheet1', []);\n }\n if (this.activeSheet() < 0) throw new Error('A workbook needs at least one visible sheet');\n const scopes = new Set<string>();\n for (const n of this.writerOptions.definedNames ?? []) {\n validateDefinedName(n.name);\n if (n.sheet !== undefined && !this.sheets.some(s => s.name === n.sheet)) throw new Error(`Sheet \"${n.sheet}\" of defined name \"${n.name}\" not found`);\n const key = `${n.sheet ?? ''}!${n.name.toLowerCase()}`;\n if (scopes.has(key)) throw new Error(`Duplicate defined name \"${n.name}\"`);\n scopes.add(key);\n }\n const props = this.writerOptions.properties;\n\n const zip = new ZipStreamWriter();\n for (const img of this.sheets.flatMap(s => s.options.images ?? [])) {\n if (this.media.has(img.data)) continue;\n const bytes = img.data instanceof Uint8Array ? img.data : new Uint8Array(img.data);\n const info = imageInfo(bytes);\n this.media.set(img.data, { path: `media/image${this.media.size + 1}.${info.ext}`, bytes, info });\n }\n let drawings = 0;\n const commentSheets: number[] = [];\n\n // Push the build process to background so we can return the stream immediately\n (async () => {\n try {\n const tables = this.planTables();\n await this.streamString(zip, '_rels/.rels', this.buildRootRels());\n await this.streamString(zip, 'xl/workbook.xml', this.buildWorkbookXml());\n await this.streamString(zip, 'xl/_rels/workbook.xml.rels', this.buildWorkbookRels());\n if (props) {\n await this.streamString(zip, 'docProps/core.xml', corePropsXml(props));\n await this.streamString(zip, 'docProps/app.xml', appPropsXml(props));\n }\n\n for (let i = 0; i < this.sheets.length; i++) {\n const sheet = this.sheets[i];\n // Formulas resolve against the sheet they live in\n this.formulaEngine.clear();\n if (Array.isArray(sheet.rows)) {\n this.formulaEngine.loadData(sheet.rows.map(row => row.map(cell => {\n if (isStyledCell(cell) && cell.formula) return { formula: cell.formula };\n const v = !isStyledCell(cell) ? cell : cell.richText && cell.value == null ? cell.richText.map(r => r.text).join('') : cell.value;\n return v instanceof Date ? dateToSerial(v) : v;\n })));\n if (sheet.options.autoFitColumns) this.applyAutoFit(sheet.rows, sheet.options);\n }\n const parts: SheetParts = { links: [], comments: [] };\n const sheetTables = tables.filter(t => t.sheet === i);\n await zip.addFile(`xl/worksheets/sheet${i + 1}.xml`, this.buildWorksheetXmlStream(sheet.rows, sheet.options, parts, sheetTables.length, Array.isArray(sheet.rows)));\n const images = sheet.options.images ?? [];\n const drawing = images.length ? ++drawings : 0;\n const rels = this.buildSheetRels(parts.links, drawing, parts.comments.length ? i + 1 : 0, sheetTables.map(t => t.id));\n if (rels) await this.streamString(zip, `xl/worksheets/_rels/sheet${i + 1}.xml.rels`, rels);\n if (drawing) await this.writeDrawing(zip, drawing, images);\n if (parts.comments.length) {\n commentSheets.push(i + 1);\n await this.streamString(zip, `xl/comments${i + 1}.xml`, commentsXml(parts.comments));\n await this.streamString(zip, `xl/drawings/vmlDrawing${i + 1}.vml`, vmlXml(parts.comments, i + 1));\n }\n for (const t of sheetTables) await this.streamString(zip, `xl/tables/table${t.id}.xml`, tableXml(t.table, t.id, t.columns));\n }\n // Written last: whether a streamed sheet has comments is only known after streaming it\n await this.streamString(zip, '[Content_Types].xml', this.buildContentTypes(drawings, commentSheets, tables.length));\n\n // styles.xml goes last: streamed (AsyncIterable) rows register styles while being written.\n // Entry order is irrelevant to readers, which use the central directory.\n await this.streamString(zip, 'xl/sharedStrings.xml', this.buildSharedStringsXml());\n await this.streamString(zip, 'xl/styles.xml', this.styleEngine.toXml());\n\n for (const { path, bytes } of this.media.values()) {\n await zip.addFile(`xl/${path}`, new ReadableStream({ start(c) { c.enqueue(bytes); c.close(); } }));\n }\n await zip.close();\n } catch (err) {\n zip.error(err);\n }\n })();\n\n return zip.stream;\n }\n\n // Tables get workbook-wide ids; their header names come from the options or the header row\n private planTables(): { sheet: number; id: number; table: TableOptions; columns: string[] }[] {\n const plan: { sheet: number; id: number; table: TableOptions; columns: string[] }[] = [];\n const names = new Set<string>();\n this.sheets.forEach((sheet, i) => {\n const boxes: Box[] = [];\n for (const table of sheet.options.tables ?? []) {\n // Table names follow the defined-name rules: no \"AB12\", \"R1C1\" or \"C\"\n let valid = !names.has(String(table.name).toLowerCase());\n try { validateDefinedName(table.name); } catch { valid = false; }\n if (!valid) throw new Error(`Invalid or duplicate table name \"${table.name}\".`);\n names.add(table.name.toLowerCase());\n const m = /^([A-Za-z]{1,3})(\\d+):([A-Za-z]{1,3})(\\d+)$/.exec(table.ref.replace(/\\$/g, ''));\n if (!m) throw new Error(`Invalid table range \"${table.ref}\".`);\n const box = parseRange(table.ref, 'table range');\n if (boxes.some(b => overlaps(b, box))) throw new Error(`Table \"${table.name}\" overlaps another table on sheet \"${sheet.name}\".`);\n // Excel tables cannot hold merged cells: it repairs the file by removing the table\n const merge = sheet.options.mergeCells?.find(ref => overlaps(parseRange(ref, 'merge range'), box));\n if (merge) throw new Error(`Merge \"${merge}\" overlaps table \"${table.name}\" on sheet \"${sheet.name}\"; Excel tables cannot contain merged cells.`);\n boxes.push(box);\n const first = colIndex(m[1]);\n const width = colIndex(m[3]) - first + 1;\n let columns = table.columns;\n if (!columns) {\n if (!Array.isArray(sheet.rows)) throw new Error(`Table \"${table.name}\": pass columns when rows are an AsyncIterable.`);\n const header = sheet.rows[parseInt(m[2], 10) - 1] ?? [];\n columns = Array.from({ length: width }, (_, k) => {\n const cell = header[first + k];\n const v = isStyledCell(cell) ? cell.value : cell;\n return v == null ? '' : String(v);\n });\n }\n if (columns.length !== width) throw new Error(`Table \"${table.name}\" has ${width} columns but ${columns.length} names.`);\n if (columns.some(c => !c) || new Set(columns.map(c => c.toLowerCase())).size !== columns.length) {\n throw new Error(`Table \"${table.name}\" needs unique, non-empty header names.`);\n }\n plan.push({ sheet: i, id: plan.length + 1, table, columns });\n }\n });\n return plan;\n }\n\n private async writeDrawing(zip: ZipStreamWriter, n: number, images: SheetImage[]) {\n const targets: string[] = [];\n const rIds = images.map(img => {\n const target = `../${this.media.get(img.data)!.path}`;\n let k = targets.indexOf(target);\n if (k < 0) k = targets.push(target) - 1;\n return `rId${k + 1}`;\n });\n await this.streamString(zip, `xl/drawings/drawing${n}.xml`, drawingXml(images, images.map(img => this.media.get(img.data)!.info), rIds));\n const rels = targets.map((t, k) =>\n `<Relationship Id=\"rId${k + 1}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\" Target=\"${t}\"/>`).join('');\n await this.streamString(zip, `xl/drawings/_rels/drawing${n}.xml.rels`, `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">${rels}</Relationships>`);\n }\n\n private applyAutoFit(rows: Row[], options: SheetOptions) {\n const colWidths: number[] = [];\n for (const row of rows) {\n row.forEach((cell, ci) => {\n const val = isStyledCell(cell) ? cell.value : cell;\n const str = val instanceof Date ? 'yyyy-mm-dd hh:mm:ss' : val !== null && val !== undefined ? String(val) : '';\n // Add a little padding (e.g. 1.2 multiplier) + base width\n const estWidth = Math.min(255, Math.max(10, str.length * 1.2));\n if (!colWidths[ci] || estWidth > colWidths[ci]) colWidths[ci] = estWidth;\n });\n }\n options.columnWidths = options.columnWidths || [];\n for (let ci = 0; ci < colWidths.length; ci++) {\n if (options.columnWidths[ci] === undefined && colWidths[ci] !== undefined) {\n options.columnWidths[ci] = Math.round(colWidths[ci] * 100) / 100;\n }\n }\n }\n\n private async streamString(zip: ZipStreamWriter, filename: string, content: string) {\n const encoder = new TextEncoder();\n const data = encoder.encode(content);\n const stream = new ReadableStream({\n start(c) { c.enqueue(data); c.close(); }\n });\n await zip.addFile(filename, stream);\n }\n\n // Pull-based so rows are only generated as fast as the ZIP consumer drains them.\n private buildWorksheetXmlStream(rows: Row[] | AsyncIterable<Row>, options: SheetOptions, parts: SheetParts, tables: number, evaluate: boolean): ReadableStream<Uint8Array> {\n const encoder = new TextEncoder();\n const chunks = this.worksheetXmlChunks(rows, options, parts, tables, evaluate);\n return new ReadableStream({\n async pull(controller) {\n const { done, value } = await chunks.next();\n if (done) controller.close();\n else controller.enqueue(encoder.encode(value));\n },\n async cancel() {\n await chunks.return(undefined);\n }\n });\n }\n\n // Hyperlink targets and comments are collected in `parts` for the parts written after the sheet\n // `evaluate`: the rows are an array loaded into the formula engine, so formulas get cached results\n private async *worksheetXmlChunks(rows: Row[] | AsyncIterable<Row>, options: SheetOptions, parts: SheetParts, tables: number, evaluate: boolean): AsyncGenerator<string> {\n const links = parts.links;\n const hyperlinks: string[] = [];\n const colCount = Math.max(options.columnWidths?.length ?? 0, options.columns?.length ?? 0);\n let colWidths = '';\n for (let i = 0; i < colCount; i++) {\n const c = options.columns?.[i] ?? {};\n const width = c.width ?? options.columnWidths?.[i];\n if (width === undefined && !c.hidden && !c.outlineLevel) continue;\n colWidths += `<col min=\"${i + 1}\" max=\"${i + 1}\"${width !== undefined ? ` width=\"${escapeXml(width)}\" customWidth=\"1\"` : ''}` +\n `${c.hidden ? ' hidden=\"1\"' : ''}${c.outlineLevel ? ` outlineLevel=\"${escapeXml(c.outlineLevel)}\"` : ''}/>`;\n }\n const rowOptions = Object.entries(options.rows ?? {}).map(([r, o]) => {\n const n = Number(r);\n if (!Number.isInteger(n) || n < 1 || n > MAX_ROWS) throw new Error(`Row options for \"${r}\": rows are numbered 1 to ${MAX_ROWS}.`);\n return [n, o] as const;\n }).sort((a, b) => a[0] - b[0]);\n const rowAttrs = new Map(rowOptions.map(([r, o]) =>\n [r, `${o.height !== undefined ? ` ht=\"${escapeXml(o.height)}\" customHeight=\"1\"` : ''}${o.hidden ? ' hidden=\"1\"' : ''}${o.outlineLevel ? ` outlineLevel=\"${escapeXml(o.outlineLevel)}\"` : ''}`]));\n let nextRowOption = 0;\n // Rows that only exist for their options (height, hidden, outline) and hold no cells\n const optionRowsBefore = (limit: number) => {\n let xml = '';\n for (; nextRowOption < rowOptions.length && rowOptions[nextRowOption][0] < limit; nextRowOption++) {\n xml += ` <row r=\"${rowOptions[nextRowOption][0]}\"${rowAttrs.get(rowOptions[nextRowOption][0])}/>\\n`;\n }\n return xml;\n };\n const outlineRow = Math.max(0, ...rowOptions.map(([, o]) => o.outlineLevel ?? 0));\n const outlineCol = Math.max(0, ...(options.columns ?? []).map(c => c?.outlineLevel ?? 0));\n const page = options.pageSetup;\n const fitToPage = page && (page.fitToWidth !== undefined || page.fitToHeight !== undefined);\n const sheetPr = options.tabColor || fitToPage\n ? `<sheetPr>${options.tabColor ? `<tabColor rgb=\"${argb(options.tabColor)}\"/>` : ''}${fitToPage ? '<pageSetUpPr fitToPage=\"1\"/>' : ''}</sheetPr>`\n : '';\n const sheetFormatPr = outlineRow || outlineCol\n ? `<sheetFormatPr defaultRowHeight=\"15\"${outlineRow ? ` outlineLevelRow=\"${outlineRow}\"` : ''}${outlineCol ? ` outlineLevelCol=\"${outlineCol}\"` : ''}/>`\n : '';\n\n let pane = '';\n if (options.freezePanes) {\n const { row = 0, col = 0 } = options.freezePanes;\n let activePane = 'bottomRight';\n if (row > 0 && col === 0) activePane = 'bottomLeft';\n if (row === 0 && col > 0) activePane = 'topRight';\n const topLeftCell = colLetter(col) + (row + 1);\n pane = `<pane ySplit=\"${row}\" xSplit=\"${col}\" topLeftCell=\"${topLeftCell}\" activePane=\"${activePane}\" state=\"frozen\"/>`;\n }\n const view = options.view ?? {};\n const viewAttrs = (view.showGridLines === false ? ' showGridLines=\"0\"' : '') + (view.showHeadings === false ? ' showRowColHeaders=\"0\"' : '') +\n (view.rightToLeft ? ' rightToLeft=\"1\"' : '') + (view.zoom !== undefined ? ` zoomScale=\"${Math.round(view.zoom)}\"` : '');\n const sheetViews = pane || viewAttrs ? `<sheetViews><sheetView${viewAttrs} workbookViewId=\"0\">${pane}</sheetView></sheetViews>` : '';\n\n let header = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n`;\n header += `<worksheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">\\n`;\n header += ` ${sheetPr}${sheetViews}${sheetFormatPr}\\n`;\n header += ` ${colWidths ? `<cols>${colWidths}</cols>` : ''}\\n`;\n header += ` <sheetData>\\n`;\n yield header;\n\n let ri = 0;\n \n // Handle both Array and AsyncIterable\n const iterator = Symbol.asyncIterator in rows \n ? (rows as AsyncIterable<Row>)[Symbol.asyncIterator]()\n : (async function*() { for (const r of rows as Row[]) yield r; })();\n\n let chunkStr = '';\n // Ends the caller's row source when the output is cancelled or fails (its finally blocks run)\n try {\n while (true) {\n const { done, value: row } = await iterator.next();\n if (done) break;\n\n const rowNum = ri + 1;\n // Past Excel's sheet size the file is damaged, so refuse it instead\n if (rowNum > MAX_ROWS) throw new Error(`Row ${rowNum} is past Excel's last row (${MAX_ROWS}).`);\n if (row.length > MAX_COLUMNS) throw new Error(`Row ${rowNum} has ${row.length} cells, more than Excel's ${MAX_COLUMNS} columns.`);\n chunkStr += optionRowsBefore(rowNum);\n if (rowOptions[nextRowOption]?.[0] === rowNum) nextRowOption++;\n const cellsXml = row.map((cell, ci) => {\n const colRef = colLetter(ci) + rowNum;\n const styledCell: StyledCell = isStyledCell(cell) ? cell : { value: cell };\n const val = styledCell.value;\n let cellStyle = styledCell.style;\n if (val instanceof Date && !cellStyle?.numFmt) {\n // A date needs a date format, or Excel shows the bare serial number\n cellStyle = { ...cellStyle, numFmt: defaultDateFormat(val) };\n }\n const style = cellStyle ? this.styleEngine.registerStyle(cellStyle) : 0;\n const sAttr = style > 0 ? ` s=\"${style}\"` : '';\n\n if (styledCell.comment !== undefined) {\n const comment = typeof styledCell.comment === 'string' ? { text: styledCell.comment } : styledCell.comment;\n parts.comments.push({ ref: colRef, row: rowNum - 1, col: ci, comment });\n }\n\n if (styledCell.hyperlink) {\n if (styledCell.hyperlink.startsWith('#')) {\n hyperlinks.push(`<hyperlink ref=\"${colRef}\" location=\"${escapeXml(styledCell.hyperlink.slice(1))}\"/>`);\n } else {\n links.push(styledCell.hyperlink);\n hyperlinks.push(`<hyperlink ref=\"${colRef}\" r:id=\"rId${links.length}\"/>`);\n }\n }\n\n if (styledCell.formula) {\n // Streamed rows aren't in the engine, so their formulas get no (made-up) cached value\n const result = evaluate ? this.formulaEngine.cellValue(colRef) : null;\n let tAttr = '';\n let cachedVal = '';\n if (typeof result === 'number' && isFinite(result)) cachedVal = `<v>${result}</v>`;\n else if (typeof result === 'boolean') { tAttr = ' t=\"b\"'; cachedVal = `<v>${result ? 1 : 0}</v>`; }\n else if (result instanceof FormulaError) { tAttr = ' t=\"e\"'; cachedVal = `<v>${escapeXml(result.code)}</v>`; }\n else if (typeof result === 'string') { tAttr = ' t=\"str\"'; cachedVal = `<v>${escapeXml(encodeXString(result))}</v>`; }\n return `<c r=\"${colRef}\"${tAttr}${sAttr}><f>${escapeXml(styledCell.formula.replace(/^=/, ''))}</f>${cachedVal}</c>`;\n }\n\n if (styledCell.richText) {\n // Rich text is always inline, even with sharedStrings on\n return `<c r=\"${colRef}\" t=\"inlineStr\"${sAttr}><is>${runsXml(styledCell.richText)}</is></c>`;\n }\n if (val === null || val === undefined) return `<c r=\"${colRef}\"${sAttr}/>`;\n if (typeof val === 'boolean') return `<c r=\"${colRef}\" t=\"b\"${sAttr}><v>${val ? 1 : 0}</v></c>`;\n if (typeof val === 'number') {\n // NaN/Infinity have no representation in a cell\n return isFinite(val) ? `<c r=\"${colRef}\"${sAttr}><v>${val}</v></c>` : `<c r=\"${colRef}\" t=\"e\"${sAttr}><v>#NUM!</v></c>`;\n }\n if (val instanceof Date) {\n if (isNaN(val.getTime())) throw new Error(`Invalid Date in cell ${colRef}`);\n return `<c r=\"${colRef}\"${sAttr}><v>${dateToSerial(val)}</v></c>`;\n }\n if (typeof val === 'string') {\n checkCellText(val, colRef);\n if (this.writerOptions.sharedStrings) {\n let index = this.sharedStrings.get(val);\n if (index === undefined) this.sharedStrings.set(val, index = this.sharedStrings.size);\n this.sharedStringRefs++;\n return `<c r=\"${colRef}\" t=\"s\"${sAttr}><v>${index}</v></c>`;\n }\n return `<c r=\"${colRef}\" t=\"inlineStr\"${sAttr}><is>${stringXml(val)}</is></c>`;\n }\n return `<c r=\"${colRef}\"${sAttr}/>`;\n }).join('');\n \n chunkStr += ` <row r=\"${rowNum}\"${rowAttrs.get(rowNum) ?? ''}>${cellsXml}</row>\\n`;\n ri++;\n\n // Flush every ~64KB of string data to keep O(1) memory while avoiding chunk overhead\n if (chunkStr.length > 65536) {\n yield chunkStr;\n chunkStr = '';\n }\n }\n } finally {\n await iterator.return?.();\n }\n \n chunkStr += optionRowsBefore(Infinity);\n if (chunkStr.length > 0) {\n yield chunkStr;\n }\n\n let footer = ` </sheetData>\\n`;\n if (options.protection) {\n const p = options.protection === true ? {} : options.protection;\n // In the file, an action set to 1 is locked; allowing it means writing 0\n const allowed = (['formatCells', 'formatColumns', 'formatRows', 'insertRows', 'insertColumns', 'deleteRows', 'deleteColumns', 'sort', 'autoFilter'] as const)\n .filter(k => p[k]).map(k => ` ${k}=\"0\"`).join('');\n footer += ` <sheetProtection${p.password ? ` password=\"${legacyPasswordHash(p.password)}\"` : ''} sheet=\"1\" objects=\"1\" scenarios=\"1\"${allowed}/>\\n`;\n }\n\n if (options.autoFilter) footer += ` <autoFilter ref=\"${escapeXml(options.autoFilter)}\"/>\\n`;\n\n if (options.mergeCells && options.mergeCells.length > 0) {\n // Overlapping or malformed merges make Excel repair the file\n const boxes: Box[] = [];\n for (const ref of options.mergeCells) {\n const box = parseRange(ref, 'merge range');\n if (boxes.some(b => overlaps(b, box))) throw new Error(`Merge \"${ref}\" overlaps another merge.`);\n boxes.push(box);\n }\n const merges = options.mergeCells.map(ref => `<mergeCell ref=\"${escapeXml(ref)}\"/>`).join('');\n footer += ` <mergeCells count=\"${options.mergeCells.length}\">${merges}</mergeCells>\\n`;\n }\n\n if (options.conditionalFormats) {\n footer += this.conditionalFormatter.toXml(options.conditionalFormats) + '\\n';\n }\n\n if (options.dataValidations && options.dataValidations.length > 0) {\n const dvs = options.dataValidations.map(dv => {\n let attr = `sqref=\"${escapeXml(dv.sqref)}\"`;\n if (dv.type) attr += ` type=\"${escapeXml(dv.type)}\"`;\n if (dv.allowBlank !== undefined) attr += ` allowBlank=\"${dv.allowBlank ? 1 : 0}\"`;\n if (dv.showInputMessage !== undefined) attr += ` showInputMessage=\"${dv.showInputMessage ? 1 : 0}\"`;\n if (dv.errorStyle) attr += ` errorStyle=\"${escapeXml(dv.errorStyle)}\"`;\n if (dv.operator) attr += ` operator=\"${escapeXml(dv.operator)}\"`;\n if (dv.showErrorMessage !== undefined || dv.error) attr += ` showErrorMessage=\"${dv.showErrorMessage ?? true ? 1 : 0}\"`;\n if (dv.prompt && dv.showInputMessage === undefined) attr += ' showInputMessage=\"1\"';\n for (const k of ['errorTitle', 'error', 'promptTitle', 'prompt'] as const) {\n if (dv[k]) attr += ` ${k}=\"${escapeXml(dv[k]!)}\"`;\n }\n // The file stores formulas without \"=\"; a typed list (\"a,b,c\") holds at most 255 characters\n const f1 = dv.formula1?.replace(/^=/, ''), f2 = dv.formula2?.replace(/^=/, '');\n if (dv.type === 'list' && f1?.startsWith('\"') && f1.length - 2 > 255) {\n throw new Error(`List validation for ${dv.sqref} has ${f1.length - 2} characters; Excel allows 255. Put the items in cells and refer to the range.`);\n }\n let inner = '';\n if (f1) inner += `<formula1>${escapeXml(f1)}</formula1>`;\n if (f2) inner += `<formula2>${escapeXml(f2)}</formula2>`;\n return `<dataValidation ${attr}>${inner}</dataValidation>`;\n }).join('');\n footer += ` <dataValidations count=\"${options.dataValidations.length}\">${dvs}</dataValidations>\\n`;\n }\n\n if (hyperlinks.length) footer += ` <hyperlinks>${hyperlinks.join('')}</hyperlinks>\\n`;\n footer += pageSetupXml(page);\n if (options.images?.length) footer += ` <drawing r:id=\"rIdDrawing\"/>\\n`;\n if (parts.comments.length) footer += ` <legacyDrawing r:id=\"rIdVml\"/>\\n`;\n if (tables) footer += ` <tableParts count=\"${tables}\">${Array.from({ length: tables }, (_, k) => `<tablePart r:id=\"rIdTable${k + 1}\"/>`).join('')}</tableParts>\\n`;\n\n footer += `</worksheet>`;\n yield footer;\n }\n\n // Empty unless the sharedStrings option is on (strings are written inline by default)\n private buildSharedStringsXml(): string {\n let items = '';\n for (const s of this.sharedStrings.keys()) items += `<si>${stringXml(s)}</si>`;\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<sst xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" count=\"${this.sharedStringRefs}\" uniqueCount=\"${this.sharedStrings.size}\">${items}</sst>`;\n }\n\n // '' when the sheet has no relationships\n private buildSheetRels(links: string[], drawing: number, comments: number, tableIds: number[]): string {\n let rels = links.map((target, i) =>\n `<Relationship Id=\"rId${i + 1}\" Type=\"${REL}/hyperlink\" Target=\"${escapeXml(target)}\" TargetMode=\"External\"/>`\n ).join('');\n if (drawing) rels += `<Relationship Id=\"rIdDrawing\" Type=\"${REL}/drawing\" Target=\"../drawings/drawing${drawing}.xml\"/>`;\n if (comments) {\n rels += `<Relationship Id=\"rIdComments\" Type=\"${REL}/comments\" Target=\"../comments${comments}.xml\"/>` +\n `<Relationship Id=\"rIdVml\" Type=\"${REL}/vmlDrawing\" Target=\"../drawings/vmlDrawing${comments}.vml\"/>`;\n }\n tableIds.forEach((id, k) => { rels += `<Relationship Id=\"rIdTable${k + 1}\" Type=\"${REL}/table\" Target=\"../tables/table${id}.xml\"/>`; });\n if (!rels) return '';\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">${rels}</Relationships>`;\n }\n\n private buildWorkbookXml(): string {\n const sheetsXml = this.sheets.map((s, i) =>\n `<sheet name=\"${escapeXml(s.name)}\" sheetId=\"${i + 1}\"${s.options.state && s.options.state !== 'visible' ? ` state=\"${s.options.state}\"` : ''} r:id=\"rId${i + 1}\"/>`\n ).join('');\n const userNames = (this.writerOptions.definedNames ?? []).map(n => {\n const local = n.sheet === undefined ? '' : ` localSheetId=\"${this.sheets.findIndex(s => s.name === n.sheet)}\"`;\n const ref = n.ref.startsWith('=') ? n.ref.slice(1) : n.ref;\n return `<definedName name=\"${escapeXml(n.name)}\"${n.comment ? ` comment=\"${escapeXml(n.comment)}\"` : ''}${local}${n.hidden ? ' hidden=\"1\"' : ''}>${escapeXml(ref)}</definedName>`;\n }).join('');\n const active = this.activeSheet();\n // Excel tracks each sheet's filter range in a hidden defined name\n const filterNames = this.sheets.map((s, i) => s.options.autoFilter\n ? `<definedName name=\"_xlnm._FilterDatabase\" localSheetId=\"${i}\" hidden=\"1\">${escapeXml(`'${s.name.replace(/'/g, \"''\")}'!${absoluteRef(s.options.autoFilter)}`)}</definedName>`\n : ''\n ).join('') + this.sheets.map((s, i) => {\n const page = s.options.pageSetup;\n let names = '';\n // Every range of a multi-range print area names its sheet\n const area = page?.printArea?.split(',').map(r => `${quoteSheet(s.name)}!${absoluteRef(r.trim())}`).join(',');\n if (area) names += `<definedName name=\"_xlnm.Print_Area\" localSheetId=\"${i}\">${escapeXml(area)}</definedName>`;\n if (page?.printTitleRows) {\n const rows = page.printTitleRows.replace(/\\$/g, '').split(':').map(r => `$${r}`).join(':');\n names += `<definedName name=\"_xlnm.Print_Titles\" localSheetId=\"${i}\">${escapeXml(`${quoteSheet(s.name)}!${rows.includes(':') ? rows : `${rows}:${rows}`}`)}</definedName>`;\n }\n return names;\n }).join('');\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<workbook xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"\n xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">\n ${active > 0 ? `<bookViews><workbookView firstSheet=\"${active}\" activeTab=\"${active}\"/></bookViews>` : ''}\n <sheets>\n ${sheetsXml}\n </sheets>\n ${filterNames || userNames ? `<definedNames>${filterNames}${userNames}</definedNames>` : ''}\n</workbook>`;\n }\n\n // The first visible sheet, which Excel opens on\n private activeSheet(): number {\n return this.sheets.findIndex(s => !s.options.state || s.options.state === 'visible');\n }\n\n private buildWorkbookRels(): string {\n const sheetRels = this.sheets.map((_, i) => \n `<Relationship Id=\"rId${i + 1}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\" Target=\"worksheets/sheet${i + 1}.xml\"/>`\n ).join('\\n ');\n \n const ssId = this.sheets.length + 1;\n const stylesId = this.sheets.length + 2;\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\n ${sheetRels}\n <Relationship Id=\"rId${ssId}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\" Target=\"sharedStrings.xml\"/>\n <Relationship Id=\"rId${stylesId}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\" Target=\"styles.xml\"/>\n</Relationships>`;\n }\n\n private buildRootRels(): string {\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\n <Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\" Target=\"xl/workbook.xml\"/>${this.writerOptions.properties ? `\n <Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\" Target=\"docProps/core.xml\"/>\n <Relationship Id=\"rId3\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties\" Target=\"docProps/app.xml\"/>` : ''}\n</Relationships>`;\n }\n\n private buildContentTypes(drawings: number, commentSheets: number[], tables: number): string {\n const sheetOverrides = this.sheets.map((_, i) => \n `<Override PartName=\"/xl/worksheets/sheet${i + 1}.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\"/>`\n ).join('\\n ');\n const exts = new Set([...this.media.values()].map(m => m.info.ext));\n const imageTypes = [...exts].map(e => `<Default Extension=\"${e}\" ContentType=\"image/${e}\"/>`).join('');\n const drawingOverrides = Array.from({ length: drawings }, (_, i) =>\n `<Override PartName=\"/xl/drawings/drawing${i + 1}.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.drawing+xml\"/>`).join('') +\n commentSheets.map(n => `<Override PartName=\"/xl/comments${n}.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\"/>`).join('') +\n Array.from({ length: tables }, (_, i) =>\n `<Override PartName=\"/xl/tables/table${i + 1}.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\"/>`).join('') +\n (commentSheets.length ? '<Default Extension=\"vml\" ContentType=\"application/vnd.openxmlformats-officedocument.vmlDrawing\"/>' : '');\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">\n <Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/>\n <Default Extension=\"xml\" ContentType=\"application/xml\"/>\n ${imageTypes}${drawingOverrides}\n <Override PartName=\"/xl/workbook.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\"/>\n ${sheetOverrides}\n <Override PartName=\"/xl/sharedStrings.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\"/>\n <Override PartName=\"/xl/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\"/>${this.writerOptions.properties ? `\n <Override PartName=\"/docProps/core.xml\" ContentType=\"application/vnd.openxmlformats-package.core-properties+xml\"/>\n <Override PartName=\"/docProps/app.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.extended-properties+xml\"/>` : ''}\n</Types>`;\n }\n\n\n}\n\nfunction pageSetupXml(page?: PageSetup): string {\n if (!page) return '';\n let xml = '';\n if (page.gridLines || page.horizontalCentered) {\n xml += ` <printOptions${page.horizontalCentered ? ' horizontalCentered=\"1\"' : ''}${page.gridLines ? ' gridLines=\"1\"' : ''}/>\\n`;\n }\n // Excel's \"Normal\" margins, in inches; all six are required\n const m = { left: 0.7, right: 0.7, top: 0.75, bottom: 0.75, header: 0.3, footer: 0.3, ...page.margins };\n const e = escapeXml;\n xml += ` <pageMargins left=\"${e(m.left)}\" right=\"${e(m.right)}\" top=\"${e(m.top)}\" bottom=\"${e(m.bottom)}\" header=\"${e(m.header)}\" footer=\"${e(m.footer)}\"/>\\n`;\n const attrs = [\n page.paperSize !== undefined && `paperSize=\"${e(page.paperSize)}\"`,\n page.scale !== undefined && `scale=\"${e(page.scale)}\"`,\n page.fitToWidth !== undefined && `fitToWidth=\"${e(page.fitToWidth)}\"`,\n page.fitToHeight !== undefined && `fitToHeight=\"${e(page.fitToHeight)}\"`,\n page.orientation && `orientation=\"${e(page.orientation)}\"`,\n ].filter(Boolean).join(' ');\n if (attrs) xml += ` <pageSetup ${attrs}/>\\n`;\n if (page.header || page.footer) {\n xml += ` <headerFooter>${page.header ? `<oddHeader>${escapeXml(page.header)}</oddHeader>` : ''}${page.footer ? `<oddFooter>${escapeXml(page.footer)}</oddFooter>` : ''}</headerFooter>\\n`;\n }\n return xml;\n}\n\nfunction commentsXml(comments: SheetParts['comments']): string {\n const authors = [...new Set(comments.map(c => c.comment.author ?? ''))];\n const list = comments.map(c => `<comment ref=\"${c.ref}\" authorId=\"${authors.indexOf(c.comment.author ?? '')}\"><text>${runsXml(c.comment.text)}</text></comment>`).join('');\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<comments xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"><authors>${authors.map(a => `<author>${escapeXml(a)}</author>`).join('')}</authors><commentList>${list}</commentList></comments>`;\n}\n\n// The legacy VML shapes Excel needs to show the note boxes (hidden until the cell is hovered)\nfunction vmlXml(comments: SheetParts['comments'], sheet: number): string {\n const shapes = comments.map((c, i) =>\n `<v:shape id=\"_x0000_s${sheet * 1024 + i + 1}\" type=\"#_x0000_t202\" style=\"position:absolute;margin-left:59.25pt;margin-top:1.5pt;width:108pt;height:59.25pt;z-index:${i + 1};visibility:hidden\" fillcolor=\"#ffffe1\" o:insetmode=\"auto\">` +\n `<v:fill color2=\"#ffffe1\"/><v:shadow on=\"t\" color=\"black\" obscured=\"t\"/><v:path o:connecttype=\"none\"/>` +\n `<v:textbox style=\"mso-direction-alt:auto\"><div style=\"text-align:left\"></div></v:textbox>` +\n `<x:ClientData ObjectType=\"Note\"><x:MoveWithCells/><x:SizeWithCells/>` +\n `<x:Anchor>${c.col + 1}, 15, ${c.row}, 10, ${c.col + 3}, 15, ${c.row + 4}, 4</x:Anchor><x:AutoFill>False</x:AutoFill>` +\n `<x:Row>${c.row}</x:Row><x:Column>${c.col}</x:Column></x:ClientData></v:shape>`).join('');\n return `<xml xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:x=\"urn:schemas-microsoft-com:office:excel\">` +\n `<o:shapelayout v:ext=\"edit\"><o:idmap v:ext=\"edit\" data=\"${sheet}\"/></o:shapelayout>` +\n `<v:shapetype id=\"_x0000_t202\" coordsize=\"21600,21600\" o:spt=\"202\" path=\"m,l,21600r21600,l21600,xe\"><v:stroke joinstyle=\"miter\"/><v:path gradientshapeok=\"t\" o:connecttype=\"rect\"/></v:shapetype>` +\n `${shapes}</xml>`;\n}\n\nfunction tableXml(table: TableOptions, id: number, columns: string[]): string {\n const ref = table.ref.replace(/\\$/g, '');\n const filter = table.autoFilter === false ? '' : `<autoFilter ref=\"${ref}\"/>`;\n const cols = columns.map((c, k) => `<tableColumn id=\"${k + 1}\" name=\"${escapeXml(c)}\"/>`).join('');\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<table xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" id=\"${id}\" name=\"${escapeXml(table.name)}\" displayName=\"${escapeXml(table.name)}\" ref=\"${ref}\" totalsRowShown=\"0\">` +\n `${filter}<tableColumns count=\"${columns.length}\">${cols}</tableColumns>` +\n `<tableStyleInfo name=\"${escapeXml(table.style ?? 'TableStyleMedium2')}\" showFirstColumn=\"0\" showLastColumn=\"0\" showRowStripes=\"${table.showRowStripes === false ? 0 : 1}\" showColumnStripes=\"0\"/></table>`;\n}\n","export interface RandomAccessReader {\n size: number;\n read(offset: number, length: number): Promise<Uint8Array>;\n stream(offset: number, length: number): ReadableStream<Uint8Array>;\n close(): Promise<void>;\n}\n\n// Offsets come from the file itself, so a corrupt one must fail here, not allocate or crash\nfunction checkRange(offset: number, length: number, size: number) {\n if (!(offset >= 0 && length >= 0 && offset + length <= size)) {\n throw new Error(`Corrupt ZIP: read of ${length} bytes at ${offset} is outside the ${size}-byte file`);\n }\n}\n\n// Built-in adapter for Web Blob/File\nexport function createBlobReader(blob: Blob): RandomAccessReader {\n return {\n size: blob.size,\n async read(offset: number, length: number): Promise<Uint8Array> {\n checkRange(offset, length, blob.size);\n const slice = blob.slice(offset, offset + length);\n return new Uint8Array(await slice.arrayBuffer());\n },\n stream(offset: number, length: number): ReadableStream<Uint8Array> {\n // Bun's Blob.slice(start, end).stream() runs on to the end of the original blob, so stop at length\n let left = length;\n return blob.slice(offset, offset + length).stream().pipeThrough(new TransformStream<Uint8Array, Uint8Array>({\n start(controller) { if (left <= 0) controller.terminate(); },\n transform(chunk, controller) {\n controller.enqueue(chunk.length > left ? chunk.subarray(0, left) : chunk);\n left -= chunk.length;\n if (left <= 0) controller.terminate();\n }\n }));\n },\n async close() {}\n };\n}\n\n// Built-in adapter for Node.js fs.promises\n// Dynamic, bundler-ignored imports so browser bundles don't try to resolve Node built-ins\nexport async function createFileReader(filePath: string): Promise<RandomAccessReader> {\n const fs = await import(/* webpackIgnore: true */ /* turbopackIgnore: true */ 'fs/promises');\n const { createReadStream } = await import(/* webpackIgnore: true */ /* turbopackIgnore: true */ 'fs');\n const { Readable } = await import(/* webpackIgnore: true */ /* turbopackIgnore: true */ 'stream');\n const stat = await fs.stat(filePath);\n const fd = await fs.open(filePath, 'r');\n\n return {\n size: stat.size,\n async read(offset: number, length: number): Promise<Uint8Array> {\n checkRange(offset, length, stat.size);\n const buffer = new Uint8Array(length);\n let filled = 0;\n while (filled < length) {\n const { bytesRead } = await fd.read(buffer, filled, length - filled, offset + filled);\n if (bytesRead === 0) throw new Error(`Unexpected end of file reading ${filePath} at ${offset + filled}`);\n filled += bytesRead;\n }\n return buffer;\n },\n stream(offset: number, length: number): ReadableStream<Uint8Array> {\n if (length === 0) return new ReadableStream({ start(c) { c.close(); } });\n // Opens its own handle, so streams outlive close(). toWeb keeps backpressure.\n return Readable.toWeb(createReadStream(filePath, { start: offset, end: offset + length - 1 })) as ReadableStream<Uint8Array>;\n },\n async close() {\n await fd.close();\n }\n };\n}\n","import { CellStyle, CellFont } from './types';\nimport { fontXml, fillXml, borderSideXml, alignmentAttrs } from './style-engine';\nimport { attr, isDateFormatCode, defaultDateFormat, escapeXml } from './utils';\nimport { isBuiltinDateFormat } from './number-format';\n\nconst escapeAttr = escapeXml;\n\nconst FONT_TAGS: [keyof CellFont, string][] = [\n ['bold', 'b'], ['italic', 'i'], ['underline', 'u'], ['size', 'sz'], ['color', 'color'], ['name', 'name'],\n];\n// CT_Font child order, which Excel writes and the schema checks\nconst FONT_ORDER = ['b', 'i', 'strike', 'condense', 'extend', 'outline', 'shadow', 'u', 'vertAlign', 'sz', 'color', 'name', 'family', 'charset', 'scheme'];\nconst SIDES = ['left', 'right', 'top', 'bottom'] as const;\n// CT_Stylesheet child order, to place a section the file does not have yet\nconst SECTIONS = ['numFmts', 'fonts', 'fills', 'borders', 'cellStyleXfs', 'cellXfs', 'cellStyles', 'dxfs', 'tableStyles', 'colors', 'extLst'];\n\nfunction setAttr(open: string, name: string, value: string): string {\n const re = new RegExp(`\\\\s${name}=\"[^\"]*\"`);\n return re.test(open) ? open.replace(re, ` ${name}=\"${value}\"`) : open.replace(/\\s*(\\/?)>$/, ` ${name}=\"${value}\"$1>`);\n}\n\n// Adds cell formats to an existing workbook's styles part. A patch changes only what it names: font\n// properties, border sides and alignment settings are merged into the cell's current format, while\n// a fill or number format replaces the old one.\nexport class StylePatcher {\n private p: string;\n private fonts: string[];\n private fills: string[];\n private borders: string[];\n private xfs: string[];\n private numFmts = new Map<string, number>();\n private nextNumFmt = 164;\n private added: Record<'numFmts' | 'fonts' | 'fills' | 'borders' | 'cellXfs', string[]> = { numFmts: [], fonts: [], fills: [], borders: [], cellXfs: [] };\n private memo = new Map<string, number>();\n\n constructor(private xml: string) {\n this.p = /<((?:\\w+:)?)styleSheet\\b/.exec(xml)?.[1] ?? '';\n this.fonts = this.items('fonts', 'font');\n this.fills = this.items('fills', 'fill');\n this.borders = this.items('borders', 'border');\n this.xfs = this.items('cellXfs', 'xf');\n for (const tag of this.items('numFmts', 'numFmt')) {\n const id = parseInt(attr(tag, 'numFmtId') ?? '', 10);\n const code = attr(tag, 'formatCode');\n if (code !== null && !isNaN(id)) this.numFmts.set(code, id);\n if (id >= this.nextNumFmt) this.nextNumFmt = id + 1;\n }\n }\n\n get changed(): boolean {\n return this.added.cellXfs.length > 0;\n }\n\n // The cellXfs index of format `base` with `style` applied\n patch(base: number, style: CellStyle): number {\n const key = `${base}|${JSON.stringify(style)}`;\n let id = this.memo.get(key);\n if (id !== undefined) return id;\n\n const p = this.p;\n // `base` may be a format added earlier in this edit (a date format, then a style)\n const xf = this.at('cellXfs', base) ?? this.xfs[0] ?? `<${p}xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\"/>`;\n let open = /^<[^>]*>/.exec(xf)![0];\n let inner = open.endsWith('/>') ? '' : xf.slice(open.length, xf.lastIndexOf('<'));\n open = open.replace(/\\s*\\/>$/, '>');\n\n if (style.font) {\n const old = this.at('fonts', parseInt(attr(open, 'fontId') ?? '0', 10)) ?? '';\n let font = old.endsWith('/>') ? '' : old.replace(/^<[^>]*>/, '').replace(/<\\/[^>]*>$/, '');\n for (const [key, tag] of FONT_TAGS) {\n if (!(key in style.font)) continue;\n font = font.replace(new RegExp(`<${p}${tag}\\\\b[^>]*?(?:/>|>[\\\\s\\\\S]*?</${p}${tag}>)`, 'g'), '');\n if (style.font[key] !== undefined && style.font[key] !== false) font += this.prefix(fontXml({ [key]: style.font[key] }));\n }\n const rank = (el: string) => (FONT_ORDER.indexOf(/^<(?:\\w+:)?(\\w+)/.exec(el)![1]) + 1 || FONT_ORDER.length + 1);\n font = (font.match(/<((?:\\w+:)?\\w+)\\b[^>]*?(?:\\/>|>[\\s\\S]*?<\\/\\1>)/g) ?? []).sort((a, b) => rank(a) - rank(b)).join('');\n open = setAttr(setAttr(open, 'fontId', String(this.add('fonts', `<${p}font>${font}</${p}font>`))), 'applyFont', '1');\n }\n if (style.fill) {\n open = setAttr(setAttr(open, 'fillId', String(this.add('fills', this.prefix(fillXml(style.fill))))), 'applyFill', '1');\n }\n if (style.border) {\n const old = this.at('borders', parseInt(attr(open, 'borderId') ?? '0', 10)) ?? `<${p}border/>`;\n const element = (tag: string) => new RegExp(`<${p}${tag}\\\\b[^>]*?(?:/>|>[\\\\s\\\\S]*?</${p}${tag}>)`).exec(old)?.[0];\n const sides = SIDES.map(side => side in style.border!\n ? this.prefix(borderSideXml(side, style.border![side])) : element(side) ?? `<${p}${side}/>`);\n const border = `${/^<[^>]*?(?=\\/?>)/.exec(old)![0]}>${sides.join('')}${element('diagonal') ?? `<${p}diagonal/>`}</${p}border>`;\n open = setAttr(setAttr(open, 'borderId', String(this.add('borders', border))), 'applyBorder', '1');\n }\n if (style.numFmt !== undefined) {\n let fmt = this.numFmts.get(style.numFmt);\n if (fmt === undefined) {\n this.numFmts.set(style.numFmt, fmt = this.nextNumFmt++);\n this.added.numFmts.push(`<${p}numFmt numFmtId=\"${fmt}\" formatCode=\"${escapeAttr(style.numFmt)}\"/>`);\n }\n open = setAttr(setAttr(open, 'numFmtId', String(fmt)), 'applyNumberFormat', '1');\n }\n if (style.alignment) {\n const re = new RegExp(`<${p}alignment\\\\b[^>]*?/>|<${p}alignment\\\\b[^>]*>[\\\\s\\\\S]*?</${p}alignment>`);\n const old = re.exec(inner)?.[0] ?? '';\n const attrs: Record<string, string> = {};\n for (const m of old.matchAll(/\\s([\\w:]+)=\"([^\"]*)\"/g)) attrs[m[1]] = m[2];\n Object.assign(attrs, alignmentAttrs(style.alignment));\n if ('wrapText' in style.alignment && !style.alignment.wrapText) delete attrs.wrapText;\n const element = `<${p}alignment${Object.entries(attrs).map(([k, v]) => ` ${k}=\"${v}\"`).join('')}/>`;\n inner = old ? inner.replace(old, element) : element + inner; // alignment is the first child\n open = setAttr(open, 'applyAlignment', '1');\n }\n\n id = this.add('cellXfs', inner ? `${open}${inner}</${p}xf>` : open.replace(/>$/, '/>'));\n this.memo.set(key, id);\n return id;\n }\n\n // The format for date `d` in a cell of format `base`: `base` when it already shows dates, otherwise\n // `base` with a date format, since a date in a General cell shows as its serial number\n dateFormat(base: number, d: Date): number {\n const xf = this.at('cellXfs', base) ?? '';\n const id = parseInt(attr(/^<[^>]*>/.exec(xf)?.[0] ?? '', 'numFmtId') ?? '0', 10);\n const code = [...this.numFmts].find(([, v]) => v === id)?.[0];\n if (isBuiltinDateFormat(id) || (code !== undefined && isDateFormatCode(code))) return base;\n return this.patch(base, { numFmt: defaultDateFormat(d) });\n }\n\n toXml(): string {\n let xml = this.xml;\n for (const section of ['numFmts', 'fonts', 'fills', 'borders', 'cellXfs'] as const) {\n const items = this.added[section];\n if (!items.length) continue;\n const p = this.p;\n const m = new RegExp(`<${p}${section}\\\\b([^>]*?)(/?)>`).exec(xml);\n if (m) {\n const count = this.existing(section) + items.length;\n const open = setAttr(`<${p}${section}${m[1]}>`, 'count', String(count));\n if (m[2]) {\n xml = xml.replace(m[0], `${open}${items.join('')}</${p}${section}>`);\n } else {\n const close = xml.indexOf(`</${p}${section}>`, m.index);\n xml = xml.slice(0, m.index) + open + xml.slice(m.index + m[0].length, close) + items.join('') + xml.slice(close);\n }\n } else {\n // Before the first later section, or the end of the stylesheet\n const later = SECTIONS.slice(SECTIONS.indexOf(section) + 1).map(s => `<${p}${s}\\\\b`).join('|');\n const at = xml.search(new RegExp(`${later}|</${p}styleSheet>`));\n xml = xml.slice(0, at) + `<${p}${section} count=\"${items.length}\">${items.join('')}</${p}${section}>` + xml.slice(at);\n }\n }\n return xml;\n }\n\n private existing(section: 'numFmts' | 'fonts' | 'fills' | 'borders' | 'cellXfs'): number {\n return section === 'numFmts' ? this.items('numFmts', 'numFmt').length : this.list(section).length;\n }\n\n private list(section: 'fonts' | 'fills' | 'borders' | 'cellXfs'): string[] {\n return section === 'fonts' ? this.fonts : section === 'fills' ? this.fills : section === 'borders' ? this.borders : this.xfs;\n }\n\n // Item `i` of a section, counting the ones added in this edit after the file's own\n private at(section: 'fonts' | 'fills' | 'borders' | 'cellXfs', i: number): string | undefined {\n const own = this.list(section);\n return i < own.length ? own[i] : this.added[section][i - own.length];\n }\n\n // The index of `element` in a section, appending it unless an identical one is already there:\n // repeating the same restyle on an edited file reuses the formats the first run added\n private add(section: 'fonts' | 'fills' | 'borders' | 'cellXfs', element: string): number {\n const own = this.list(section);\n const found = own.indexOf(element);\n if (found >= 0) return found;\n const added = this.added[section].indexOf(element);\n if (added >= 0) return own.length + added;\n this.added[section].push(element);\n return own.length + this.added[section].length - 1;\n }\n\n private items(section: string, tag: string): string[] {\n const p = this.p;\n const m = new RegExp(`<${p}${section}\\\\b[^>]*?(?:/>|>([\\\\s\\\\S]*?)</${p}${section}>)`).exec(this.xml);\n return [...(m?.[1] ?? '').matchAll(new RegExp(`<${p}${tag}\\\\b[^>]*?(?:/>|>[\\\\s\\\\S]*?</${p}${tag}>)`, 'g'))].map(x => x[0]);\n }\n\n // Our builders write unprefixed elements; a prefixed stylesheet needs its prefix on them\n private prefix(xml: string): string {\n return this.p ? xml.replace(/<(\\/?)([A-Za-z])/g, `<$1${this.p}$2`) : xml;\n }\n}\n","import {\n mapFormulaRefs, shiftFormula, colIndex, colLetter, attr, escapeXml, unescapeXml, MAX_ROWS, MAX_COLUMNS, type RefRole,\n} from './utils';\n\n// Rows or columns inserted before `at`, or at..at+count-1 deleted (1-based; column 1 is A). Later\n// operations use the numbers left by earlier ones, as when they are done one after another in Excel.\nexport interface ShiftOp { at: number; count: number; insert: boolean }\n\n// Where the rows (or columns) of a sheet end up\nexport class AxisMap {\n constructor(readonly ops: ShiftOp[]) {}\n\n // A cell in a deleted row is gone (null); a range keeps what remains: its start moves to the row\n // after the deletion and its end to the row before it, which turns a range of deleted rows inside out.\n map(n: number, role: RefRole): number | null {\n for (const { at, count, insert } of this.ops) {\n if (insert) {\n if (n >= at) n += count;\n } else if (n >= at + count) n -= count;\n else if (n >= at) {\n if (role === 'single') return null;\n n = role === 'start' ? at : at - 1;\n }\n }\n return n;\n }\n}\n\nexport interface SheetShift { rows?: AxisMap; cols?: AxisMap }\n// Sheet name (lower case: Excel compares them so) -> how its rows and columns move\nexport type ShiftMaps = Map<string, SheetShift>;\n\n// Column mappers work on 0-based columns, as mapFormulaRefs passes them\nconst mapCol = (s: SheetShift | undefined, c: number, role: RefRole) => {\n if (!s?.cols) return c;\n const n = s.cols.map(c + 1, role);\n return n === null ? null : n - 1;\n};\nconst mapRow = (s: SheetShift | undefined, r: number, role: RefRole) => (s?.rows ? s.rows.map(r, role) : r);\n\nconst firstRow = (area: string) => parseInt(/\\d+/.exec(area)?.[0] ?? '1', 10);\nconst lastRow = (area: string) => parseInt(/(\\d+)\\D*$/.exec(area)?.[1] ?? '1', 10);\nconst firstCol = (area: string) => colIndex(/[A-Za-z]+/.exec(area)?.[0] ?? 'A');\nconst lastCol = (area: string) => colIndex(/([A-Za-z]+)\\$?\\d*\\s*$/.exec(area)?.[1] ?? 'A');\n\n// An area (A1, A1:B5, 3:7, C:D) after rows and columns move, or null when nothing of it is left\nexport function mapArea(area: string, s: SheetShift): string | null {\n const out = mapFormulaRefs(area.includes(':') ? area : `${area}:${area}`,\n (c, _abs, role) => mapCol(s, c, role), (r, _abs, role) => mapRow(s, r, role));\n if (out.includes('#REF!')) return null;\n const [a, b] = out.split(':');\n return a === b ? a : out;\n}\n\n// A space-separated list of areas (sqref); null when none is left\nconst mapAreas = (sqref: string, s: SheetShift) => {\n const areas = sqref.trim().split(/\\s+/).map(a => mapArea(a, s)).filter((a): a is string => a !== null);\n return areas.length ? areas.join(' ') : null;\n};\n\n// A cell that should land somewhere even when its row or column is deleted (a selection, a scroll\n// position): it moves to the row or column after the deleted ones\nfunction mapCellStart(ref: string, s: SheetShift): string {\n const out = mapFormulaRefs(ref, c => mapCol(s, c, 'start'), r => mapRow(s, r, 'start'));\n return out.includes('#REF!') ? ref : out;\n}\n\n// The top-left cell of an area before and after the move, for formulas counted relative to it\ntype Anchor = { row: number; toRow: number; col: number; toCol: number };\n\n// A formula on sheet `sheet` ('' for workbook-level names and charts). `anchor` is set for conditional\n// formats and validations, whose relative references count from the top-left cell of their range: one\n// that points into deleted rows or columns keeps its distance from that cell instead of becoming #REF!.\nexport function mapFormula(f: string, sheet: string, maps: ShiftMaps, anchor?: Anchor): string {\n const own = maps.get(sheet.toLowerCase());\n if (!own && !f.includes('!')) return f;\n const target = (q: string | undefined) => (q === undefined ? own : maps.get(q.toLowerCase()));\n return mapFormulaRefs(f,\n (c, abs, role, q) => {\n const s = target(q);\n const n = mapCol(s, c, role);\n return n === null && anchor && !abs && q === undefined ? c - anchor.col + anchor.toCol : n;\n },\n (r, abs, role, q) => {\n const s = target(q);\n const n = mapRow(s, r, role);\n return n === null && anchor && !abs && q === undefined ? r - anchor.row + anchor.toRow : n;\n });\n}\n\nfunction anchorOf(area: string, s: SheetShift): Anchor {\n const row = firstRow(area), col = firstCol(area);\n return { row, toRow: mapRow(s, row, 'start')!, col, toCol: mapCol(s, col, 'start')! };\n}\n\n// Counts the children of a wrapper (<mergeCells count=\"n\">), removing the wrapper when none are left\nfunction recount(xml: string, wrapper: string, child: string, countAttr = 'count'): string {\n return xml.replace(new RegExp(`<((?:\\\\w+:)?)${wrapper}\\\\b([^>]*?)(?:/>|>([\\\\s\\\\S]*?)</\\\\1${wrapper}>)`, 'g'),\n (_whole, p: string, attrs: string, inner = '') => {\n const n = inner.match(new RegExp(`<(?:\\\\w+:)?${child}\\\\b`, 'g'))?.length ?? 0;\n if (!n) return '';\n const counted = attrs.replace(new RegExp(`\\\\s${countAttr}=\"\\\\d+\"`), ` ${countAttr}=\"${n}\"`);\n return `<${p}${wrapper}${counted}>${inner}</${p}${wrapper}>`;\n });\n}\n\n// An autoFilter keeps its column filters on the columns they filter; colId counts from its first column\nfunction mapAutoFilter(xml: string, s: SheetShift): string {\n return xml.replace(/<((?:\\w+:)?)autoFilter\\b([^>]*?)(\\/>|>([\\s\\S]*?)<\\/\\1autoFilter>)/g, (whole, p: string, attrs: string, rest: string, inner?: string) => {\n const ref = attr(attrs, 'ref');\n if (ref === null) return whole;\n const mapped = mapArea(ref, s);\n if (mapped === null) return '';\n const from = firstCol(ref), to = firstCol(mapped);\n if (inner !== undefined && s.cols) {\n inner = inner.replace(/<((?:\\w+:)?)filterColumn\\b([^>]*?)(?:\\/>|>[\\s\\S]*?<\\/\\1filterColumn>)/g, (column, _fp, fAttrs: string) => {\n const id = parseInt(attr(fAttrs, 'colId') ?? '0', 10);\n const c = mapCol(s, from + id, 'single');\n return c === null ? '' : column.replace(/\\scolId=\"\\d+\"/, ` colId=\"${c - to}\"`);\n });\n rest = `>${inner}</${p}autoFilter>`;\n }\n return `<${p}autoFilter${attrs.replace(/\\sref=\"[^\"]*\"/, ` ref=\"${mapped}\"`)}${rest}`;\n });\n}\n\n// The worksheet XML around <sheetData>: column widths, merges, conditional formats, validations,\n// links, filters, page breaks, sparklines and selections follow their cells; formulas follow the\n// cells they point at\nexport function mapSheetXml(xml: string, sheet: string, maps: ShiftMaps): string {\n const own = maps.get(sheet.toLowerCase());\n\n xml = xml.replace(/<((?:\\w+:)?)(conditionalFormatting|dataValidation)\\b([^>]*?)(?:\\/>|>([\\s\\S]*?)<\\/\\1\\2>)/g,\n (whole, p: string, tag: string, attrs: string, inner = '') => {\n // x14 extensions keep the range in an <xm:sqref> child\n const child = /<((?:\\w+:)?)sqref>([^<]*)<\\/\\1sqref>/.exec(inner);\n const sqref = attr(attrs, 'sqref') ?? child?.[2];\n let anchor: Anchor | undefined;\n if (own && sqref) {\n const mapped = mapAreas(sqref, own);\n if (mapped === null) return '';\n anchor = anchorOf(sqref, own);\n attrs = attrs.replace(/\\ssqref=\"[^\"]*\"/, ` sqref=\"${mapped}\"`);\n if (child) inner = inner.replace(child[0], `<${child[1]}sqref>${mapped}</${child[1]}sqref>`);\n }\n inner = inner.replace(/<((?:\\w+:)?)(formula1|formula2|formula|f)>([^<]*)<\\/\\1\\2>/g, (_m: string, fp: string, ftag: string, f: string) =>\n `<${fp}${ftag}>${escapeXml(mapFormula(unescapeXml(f), sheet, maps, anchor))}</${fp}${ftag}>`);\n return whole.endsWith('/>') && !inner ? `<${p}${tag}${attrs}/>` : `<${p}${tag}${attrs}>${inner}</${p}${tag}>`;\n });\n xml = recount(xml, 'dataValidations', 'dataValidation');\n\n // Sparklines (x14): the data range follows its cells; a sparkline whose own cell is deleted goes\n const mapF = (s: string) => s.replace(/<((?:\\w+:)?)f>([^<]*)<\\/\\1f>/g, (_m: string, p: string, f: string) =>\n `<${p}f>${escapeXml(mapFormula(unescapeXml(f), sheet, maps))}</${p}f>`);\n xml = xml.replace(/<((?:\\w+:)?)sparklineGroup\\b([^>]*)>([\\s\\S]*?)<\\/\\1sparklineGroup>/g, (whole, p: string, attrs: string, inner: string) => {\n const list = /<((?:\\w+:)?)sparklines>([\\s\\S]*?)<\\/\\1sparklines>/.exec(inner);\n if (!list) return whole;\n const lines = list[2].replace(/<((?:\\w+:)?)sparkline>([\\s\\S]*?)<\\/\\1sparkline>/g, (_m: string, sp: string, body: string) => {\n const loc = /<((?:\\w+:)?)sqref>([^<]*)<\\/\\1sqref>/.exec(body);\n if (own && loc) {\n const mapped = mapArea(loc[2], own);\n if (mapped === null) return '';\n body = body.replace(loc[0], `<${loc[1]}sqref>${mapped}</${loc[1]}sqref>`);\n }\n return `<${sp}sparkline>${mapF(body)}</${sp}sparkline>`;\n });\n if (!/<(?:\\w+:)?sparkline>/.test(lines)) return '';\n // The group's own <xm:f> (a date axis) sits outside the list\n return `<${p}sparklineGroup${attrs}>${mapF(inner.slice(0, list.index))}<${list[1]}sparklines>${lines}</${list[1]}sparklines>` +\n `${mapF(inner.slice(list.index + list[0].length))}</${p}sparklineGroup>`;\n });\n xml = recount(xml, 'sparklineGroups', 'sparklineGroup', 'nonexistent');\n // An extension left empty, and then an empty extension list, go too\n xml = xml.replace(/<((?:\\w+:)?)ext\\b[^>]*>\\s*<\\/\\1ext>/g, '').replace(/<((?:\\w+:)?)extLst>\\s*<\\/\\1extLst>/g, '');\n if (!own) return xml;\n\n // One element type at a time, so that one nested in another (sortState in autoFilter) is reached.\n // An element whose area is gone is removed with its children.\n const mapAttr = (tag: string, name: string) => {\n xml = xml.replace(new RegExp(`<((?:\\\\w+:)?)${tag}\\\\b([^>]*?)(/>|>([\\\\s\\\\S]*?)</\\\\1${tag}>)`, 'g'), (whole, p: string, attrs: string, rest: string) => {\n const value = attr(attrs, name);\n if (value === null) return whole;\n const mapped = name === 'sqref' ? mapAreas(value, own) : mapArea(value, own);\n return mapped === null ? '' : `<${p}${tag}${attrs.replace(new RegExp(`\\\\s${name}=\"[^\"]*\"`), ` ${name}=\"${mapped}\"`)}${rest}`;\n });\n };\n mapAttr('mergeCell', 'ref');\n xml = xml.replace(/<(?:\\w+:)?mergeCell\\b[^>]*?\\sref=\"[^\":]*\"[^>]*\\/>/g, ''); // a merge left with one cell\n xml = recount(xml, 'mergeCells', 'mergeCell');\n mapAttr('hyperlink', 'ref');\n xml = recount(xml, 'hyperlinks', 'hyperlink', 'nonexistent');\n xml = mapAutoFilter(xml, own);\n for (const tag of ['dimension', 'sortState', 'sortCondition']) mapAttr(tag, 'ref');\n for (const tag of ['ignoredError', 'protectedRange']) mapAttr(tag, 'sqref');\n xml = recount(xml, 'ignoredErrors', 'ignoredError', 'nonexistent');\n xml = recount(xml, 'protectedRanges', 'protectedRange', 'nonexistent');\n\n // Column widths and styles: inserted columns get the default width, deleted ones take theirs along\n if (own.cols) {\n const cols = own.cols;\n xml = xml.replace(/<((?:\\w+:)?)col\\b([^>]*?)\\/>/g, (_m, p: string, attrs: string) => {\n const min = cols.map(parseInt(attr(attrs, 'min') ?? '1', 10), 'start')!;\n const max = cols.map(parseInt(attr(attrs, 'max') ?? '1', 10), 'end')!;\n if (max < min) return '';\n return `<${p}col${attrs.replace(/\\smin=\"\\d+\"/, ` min=\"${min}\"`).replace(/\\smax=\"\\d+\"/, ` max=\"${Math.min(max, MAX_COLUMNS)}\"`)}/>`;\n });\n xml = recount(xml, 'cols', 'col', 'nonexistent');\n }\n\n // The view: a selection or scroll position in deleted cells moves to the cells after them\n xml = xml.replace(/<((?:\\w+:)?)(selection|pane)\\b([^>]*?)\\/>/g, (_m, p: string, tag: string, attrs: string) => {\n attrs = attrs.replace(/\\s(activeCell|topLeftCell)=\"([^\"]*)\"/g, (_a, name: string, ref: string) => ` ${name}=\"${mapCellStart(ref, own)}\"`);\n const sqref = attr(attrs, 'sqref');\n if (sqref !== null) attrs = attrs.replace(/\\ssqref=\"[^\"]*\"/, ` sqref=\"${mapAreas(sqref, own) ?? attr(attrs, 'activeCell') ?? 'A1'}\"`);\n return `<${p}${tag}${attrs}/>`;\n });\n\n // A break's id is the 0-based row (column) it sits above (left of)\n for (const [section, axis] of [['rowBreaks', own.rows], ['colBreaks', own.cols]] as const) {\n if (!axis) continue;\n xml = xml.replace(new RegExp(`<((?:\\\\w+:)?)${section}\\\\b[\\\\s\\\\S]*?</\\\\1${section}>`), list => {\n list = list.replace(/<(?:\\w+:)?brk\\b([^>]*?)\\/>/g, (whole, attrs: string) => {\n const n = axis.map(parseInt(attr(attrs, 'id') ?? '0', 10) + 1, 'start')!;\n return whole.replace(/\\sid=\"\\d+\"/, ` id=\"${n - 1}\"`);\n });\n const n = list.match(/<(?:\\w+:)?brk\\b/g)?.length ?? 0;\n return n ? list.replace(/\\scount=\"\\d+\"/, ` count=\"${n}\"`).replace(/\\smanualBreakCount=\"\\d+\"/, ` manualBreakCount=\"${n}\"`) : '';\n });\n }\n return xml;\n}\n\n// Streams a worksheet, moving its rows and cells and the references in its formulas. Sheets whose\n// own cells do not move only have formulas that point at other sheets rewritten.\nexport function createShiftTransform(sheet: string, maps: ShiftMaps): TransformStream<string, string> {\n const own = maps.get(sheet.toLowerCase());\n let buffer = '';\n let p = '';\n let state: 'head' | 'rows' | 'tail' = 'head';\n // Shared formulas are written out per cell when the cells under them move unevenly\n const shared = new Map<string, { text: string; row: number; col: number; expand: boolean }>();\n const mapF = (f: string) => mapFormula(f, sheet, maps);\n\n const rewriteRow = (whole: string, attrs: string, inner: string | undefined): string => {\n const r = parseInt(attr(attrs, 'r') ?? '0', 10);\n const to = r ? mapRow(own, r, 'single') : r;\n if (to === null) return '';\n if (to > MAX_ROWS) throw new Error(`Sheet \"${sheet}\": inserting rows pushes row ${r} past Excel's last row.`);\n if (to === r && !own?.cols && !inner?.includes('<' + p + 'f')) return whole;\n\n let col = 0;\n const cells = (inner ?? '').replace(new RegExp(`<${p}c\\\\b([^>]*?)(?:/>|>([\\\\s\\\\S]*?)</${p}c>)`, 'g'), (cell, cAttrs: string, body?: string) => {\n const ref = /\\sr=\"([A-Za-z]+)\\d+\"/.exec(cAttrs);\n if (ref) col = colIndex(ref[1]);\n const c = col++;\n const toCol = mapCol(own, c, 'single');\n if (toCol === null) return '';\n if (toCol >= MAX_COLUMNS) throw new Error(`Sheet \"${sheet}\": inserting columns pushes column ${colLetter(c)} past Excel's last column.`);\n if (to !== r || toCol !== c) cell = cell.replace(/\\sr=\"[A-Za-z]+\\d+\"/, ` r=\"${colLetter(toCol)}${to}\"`);\n const f = body && new RegExp(`<${p}f\\\\b([^>]*?)(?:/>|>([\\\\s\\\\S]*?)</${p}f>)`).exec(body);\n if (!f) return cell;\n const text = unescapeXml(f[2] ?? '');\n const kind = attr(f[1], 't');\n const si = attr(f[1], 'si');\n let xml: string | undefined;\n if (kind === 'shared' && si !== null) {\n if (text) {\n const mapped = mapF(text);\n const expand = !!own || mapped !== text;\n shared.set(si, { text, row: r, col: c, expand });\n if (expand) xml = `<${p}f>${escapeXml(mapped)}</${p}f>`;\n } else {\n const a = shared.get(si);\n if (a) {\n // Even when the anchor's own references stay, this cell's may point into moved rows\n const own = shiftFormula(a.text, r - a.row, c - a.col);\n const mapped = mapF(own);\n if (a.expand || mapped !== own) xml = `<${p}f>${escapeXml(mapped)}</${p}f>`;\n }\n }\n } else if (kind === 'dataTable') {\n // A What-If data table: its result range and its input cells (r1, r2) follow their cells\n let fAttrs = f[1];\n const range = attr(fAttrs, 'ref');\n if (own && range) fAttrs = fAttrs.replace(/\\sref=\"[^\"]*\"/, ` ref=\"${mapArea(range, own) ?? range}\"`);\n fAttrs = fAttrs.replace(/\\s(r1|r2)=\"([^\"]*)\"/g, (_m, name: string, ref: string) => ` ${name}=\"${escapeXml(mapF(unescapeXml(ref)))}\"`);\n xml = f[0].replace(f[1], () => fAttrs);\n } else if (text) {\n let fAttrs = f[1];\n const range = attr(fAttrs, 'ref');\n if (own && range) fAttrs = fAttrs.replace(/\\sref=\"[^\"]*\"/, ` ref=\"${mapArea(range, own) ?? range}\"`);\n xml = `<${p}f${fAttrs}>${escapeXml(mapF(text))}</${p}f>`;\n }\n return xml === undefined ? cell : cell.replace(f[0], () => xml!);\n });\n let open = to === r ? attrs : attrs.replace(/\\sr=\"\\d+\"/, ` r=\"${to}\"`);\n if (own?.cols) open = open.replace(/\\sspans=\"[^\"]*\"/, ''); // an optional hint, now stale\n return inner === undefined ? `<${p}row${open}/>` : `<${p}row${open}>${cells}</${p}row>`;\n };\n\n return new TransformStream({\n transform(chunk, controller) {\n buffer += chunk;\n let out = '';\n while (true) {\n if (state === 'head') {\n const m = /<((?:\\w+:)?)sheetData\\b[^>]*?(\\/?)>/.exec(buffer);\n if (!m) break;\n p = m[1];\n out += mapSheetXml(buffer.slice(0, m.index), sheet, maps) + m[0];\n buffer = buffer.slice(m.index + m[0].length);\n state = m[2] ? 'tail' : 'rows';\n } else if (state === 'rows') {\n const m = new RegExp(`^\\\\s*(?:<${p}row\\\\b([^>]*?)(?:/>|>([\\\\s\\\\S]*?)</${p}row>)|</${p}sheetData>)`).exec(buffer);\n if (!m) break;\n if (m[1] === undefined) {\n out += m[0];\n state = 'tail';\n } else out += rewriteRow(m[0].trimStart(), m[1], m[2]);\n buffer = buffer.slice(m[0].length);\n } else break; // the tail is mapped whole at the end\n }\n if (out) controller.enqueue(out);\n },\n flush(controller) {\n if (state !== 'tail') {\n controller.error(new Error(`Sheet \"${sheet}\" has no complete <sheetData> element.`));\n return;\n }\n controller.enqueue(mapSheetXml(buffer, sheet, maps));\n },\n });\n}\n\n// Notes (legacy and threaded) on moved cells move with them; notes on deleted cells go\nexport function mapComments(xml: string, s: SheetShift): string {\n return xml.replace(/<((?:\\w+:)?)(comment|threadedComment)\\b([^>]*?)(?:\\/>|>[\\s\\S]*?<\\/\\1\\2>)/g, (whole, _p, _t, attrs: string) => {\n const ref = attr(attrs, 'ref');\n if (!ref) return whole;\n const mapped = mapArea(ref, s);\n return mapped === null ? '' : whole.replace(/(\\sref=\")[^\"]*\"/, `$1${mapped}\"`);\n });\n}\n\n// The note boxes drawn for legacy notes (VML). Prefixes vary: v:/x: from Excel, ns1:/ns2: from openpyxl.\nexport function mapVml(xml: string, s: SheetShift): string {\n return xml.replace(/<((?:\\w+:)?)shape\\b[\\s\\S]*?<\\/\\1shape>/g, shape => {\n const row = /<((?:\\w+:)?)Row>(\\d+)<\\/\\1Row>/.exec(shape);\n const col = /<((?:\\w+:)?)Column>(\\d+)<\\/\\1Column>/.exec(shape);\n if (!row || !col) return shape;\n const r = parseInt(row[2], 10), c = parseInt(col[2], 10);\n const toR = mapRow(s, r + 1, 'single'), toC = mapCol(s, c, 'single');\n if (toR === null || toC === null) return '';\n const dr = toR - 1 - r, dc = toC - c;\n if (!dr && !dc) return shape;\n return shape\n .replace(row[0], `<${row[1]}Row>${toR - 1}</${row[1]}Row>`)\n .replace(col[0], `<${col[1]}Column>${toC}</${col[1]}Column>`)\n .replace(/<((?:\\w+:)?)Anchor>([^<]*)<\\/\\1Anchor>/, (_m, p: string, a: string) => {\n const v = a.split(',').map(x => parseInt(x.trim(), 10));\n v[0] += dc; v[4] += dc; v[2] += dr; v[6] += dr;\n return `<${p}Anchor>${v.join(', ')}</${p}Anchor>`;\n });\n });\n}\n\n// Pictures and charts move with their cells; one spanning inserted rows or columns grows unless it is\n// set to keep its size (oneCell) or position (absolute). One whose cells are all deleted shrinks.\nexport function mapDrawing(xml: string, s: SheetShift): string {\n const at = (el: string, axis: string) => new RegExp(`(<(?:\\\\w+:)?${el}>[\\\\s\\\\S]*?<(?:\\\\w+:)?${axis}>)(\\\\d+)(<)`);\n return xml.replace(/<((?:\\w+:)?)(twoCellAnchor|oneCellAnchor)\\b([^>]*)>([\\s\\S]*?)<\\/\\1\\2>/g, (whole, p: string, tag: string, attrs: string, inner: string) => {\n const editAs = attr(attrs, 'editAs') ?? (tag === 'oneCellAnchor' ? 'oneCell' : 'twoCell');\n if (editAs === 'absolute') return whole;\n for (const [axis, map] of [['row', (n: number, role: RefRole) => mapRow(s, n + 1, role)! - 1], ['col', (n: number, role: RefRole) => mapCol(s, n, role)!]] as const) {\n const from = at('from', axis).exec(inner);\n if (!from) continue;\n const f = parseInt(from[2], 10);\n const nf = map(f, 'start');\n const to = at('to', axis).exec(inner);\n inner = inner.replace(at('from', axis), `$1${nf}$3`);\n if (to) {\n const t = parseInt(to[2], 10);\n inner = inner.replace(at('to', axis), `$1${Math.max(nf, editAs === 'oneCell' ? t + nf - f : map(t, 'end'))}$3`);\n }\n }\n return `<${p}${tag}${attrs}>${inner}</${p}${tag}>`;\n });\n}\n\n// A table's range follows its cells. Its columns follow theirs: deleted ones go, and inserted ones get\n// a new column whose name is returned as a header cell to write. Deleting the header row or every data\n// row is refused.\nexport function mapTable(xml: string, sheet: string, maps: ShiftMaps): { xml: string; headers: { ref: string; name: string }[] } {\n const own = maps.get(sheet.toLowerCase());\n const headers: { ref: string; name: string }[] = [];\n if (own) {\n const table = /<(?:\\w+:)?table\\b[^>]*>/.exec(xml)?.[0] ?? '';\n const name = attr(table, 'displayName') ?? attr(table, 'name') ?? '';\n const ref = attr(table, 'ref') ?? '';\n const header = attr(table, 'headerRowCount') !== '0';\n if (header && mapRow(own, firstRow(ref), 'single') === null) {\n throw new Error(`Deleting rows on sheet \"${sheet}\" would remove the header row of table \"${name}\".`);\n }\n const mapped = mapArea(ref, own);\n if (mapped === null) throw new Error(`Deleting cells on sheet \"${sheet}\" would remove table \"${name}\".`);\n const totals = parseInt(attr(table, 'totalsRowCount') ?? '0', 10);\n if (lastRow(mapped) - firstRow(mapped) + 1 < (header ? 1 : 0) + totals + 1) {\n throw new Error(`Deleting rows on sheet \"${sheet}\" would leave table \"${name}\" without data rows.`);\n }\n\n if (own.cols) {\n const from = firstCol(ref), to = firstCol(mapped), width = lastCol(mapped) - to + 1;\n xml = xml.replace(/<((?:\\w+:)?)tableColumns\\b([^>]*)>([\\s\\S]*?)<\\/\\1tableColumns>/, (_m, p: string, attrs: string, inner: string) => {\n const old = [...inner.matchAll(/<((?:\\w+:)?)tableColumn\\b([^>]*?)(?:\\/>|>[\\s\\S]*?<\\/\\1tableColumn>)/g)];\n const names = new Set(old.map(c => (attr(c[2], 'name') ?? '').toLowerCase()));\n let id = Math.max(0, ...old.map(c => parseInt(attr(c[2], 'id') ?? '0', 10)));\n const slots: string[] = new Array(width);\n old.forEach((c, i) => {\n const at = mapCol(own, from + i, 'single');\n if (at !== null) slots[at - to] = c[0];\n });\n let k = 1;\n for (let i = 0; i < width; i++) {\n if (slots[i]) continue;\n while (names.has(`column${k}`)) k++;\n names.add(`column${k}`);\n slots[i] = `<${p}tableColumn id=\"${++id}\" name=\"Column${k}\"/>`;\n if (header) headers.push({ ref: colLetter(to + i) + firstRow(mapped), name: `Column${k}` });\n }\n return `<${p}tableColumns${attrs.replace(/\\scount=\"\\d+\"/, ` count=\"${width}\"`)}>${slots.join('')}</${p}tableColumns>`;\n });\n }\n xml = mapAutoFilter(xml, own).replace(/(<(?:\\w+:)?(?:table|sortState|sortCondition)\\b[^>]*?\\sref=\")([^\"]*)\"/g,\n (_m, pre: string, area: string) => `${pre}${mapArea(area, own) ?? area}\"`);\n }\n xml = xml.replace(/<((?:\\w+:)?)(calculatedColumnFormula|totalsRowFormula)\\b([^>]*)>([^<]*)<\\/\\1\\2>/g,\n (_m, p: string, tag: string, attrs: string, f: string) => `<${p}${tag}${attrs}>${escapeXml(mapFormula(unescapeXml(f), sheet, maps))}</${p}${tag}>`);\n return { xml, headers };\n}\n\n// Chart series follow the cells they plot. Cached values are dropped when a series moves, and Excel\n// rebuilds them from the cells.\nexport function mapChart(xml: string, maps: ShiftMaps): string {\n let changed = false;\n const out = xml.replace(/(<(?:\\w+:)?f>)([^<]*)(<\\/(?:\\w+:)?f>)/g, (whole, open: string, f: string, close: string) => {\n const mapped = mapFormula(unescapeXml(f), '', maps);\n if (mapped === unescapeXml(f)) return whole;\n changed = true;\n return open + escapeXml(mapped) + close;\n });\n return changed ? out.replace(/<((?:\\w+:)?)(numCache|strCache)\\b[\\s\\S]*?<\\/\\1\\2>/g, '') : xml;\n}\n\n// A pivot table on a sheet whose rows or columns move is drawn where its cells went\nexport function mapPivotTable(xml: string, s: SheetShift): string {\n return xml.replace(/(<(?:\\w+:)?location\\b[^>]*?\\sref=\")([^\"]*)\"/, (_m, pre: string, ref: string) => `${pre}${mapArea(ref, s) ?? ref}\"`);\n}\n\n// A pivot cache over moved cells reads the new range and refreshes when the file opens\nexport function mapPivotCache(xml: string, maps: ShiftMaps): string {\n let changed = false;\n const out = xml.replace(/<((?:\\w+:)?)worksheetSource\\b([^>]*?)\\/>/, (whole, p: string, attrs: string) => {\n const ref = attr(attrs, 'ref');\n const s = maps.get((attr(attrs, 'sheet') ?? '').toLowerCase());\n const mapped = ref && s ? mapArea(ref, s) : null;\n if (!mapped || mapped === ref) return whole;\n changed = true;\n return `<${p}worksheetSource${attrs.replace(/\\sref=\"[^\"]*\"/, ` ref=\"${mapped}\"`)}/>`;\n });\n if (!changed) return xml;\n return out.replace(/<((?:\\w+:)?)pivotCacheDefinition\\b([^>]*?)>/, (_m, p: string, attrs: string) =>\n `<${p}pivotCacheDefinition${attrs.replace(/\\srefreshOnLoad=\"[^\"]*\"/, '')} refreshOnLoad=\"1\">`);\n}\n\n// Workbook defined names (print areas, named ranges) follow the cells they point at\nexport function mapDefinedNames(wb: string, maps: ShiftMaps): string {\n return wb.replace(/(<(?:\\w+:)?definedName\\b[^>]*>)([^<]*)(<\\/(?:\\w+:)?definedName>)/g, (_m, open: string, f: string, close: string) =>\n open + escapeXml(mapFormula(unescapeXml(f), '', maps)) + close);\n}\n","import { RandomAccessReader } from './random-access';\nimport { ZipRandomAccessParser } from './zip-random-access';\nimport { Row, SheetOptions, CellValue, CellStyle } from './types';\nimport { ZipStreamWriter } from './zip-stream-writer';\nimport { StylePatcher } from './style-patcher';\nimport {\n AxisMap, createShiftTransform, mapComments, mapVml, mapDrawing, mapTable, mapChart, mapPivotCache, mapPivotTable, mapDefinedNames,\n type ShiftOp, type ShiftMaps,\n} from './sheet-shift';\nimport {\n resolveWorkbookParts, partRelationships, recalcOnOpen, attr, dirOf, relsPathOf, validateSheetName,\n colIndex, colLetter, dateToSerial, MAX_ROWS, MAX_COLUMNS, checkCellText, encodeXString, shiftFormula, escapeXml, unescapeXml, escapeRe, xmlElements, type WorkbookParts } from './utils';\n\n// A new cell value; null clears it. The object form sets a formula (leading \"=\" optional) or a value,\n// and can change the cell's style: only the style properties given change. With neither `value` nor\n// `formula`, the cell keeps its content.\nexport type CellEdit = CellValue | { value?: CellValue; formula?: string; style?: CellStyle };\ntype EditedRows = Map<number, Map<number, CellEdit>>;\n\nconst KEEP = Symbol('keep');\nfunction contentOf(edit: CellEdit): CellValue | { formula: string } | typeof KEEP {\n if (edit === null || typeof edit !== 'object' || edit instanceof Date) return edit ?? null;\n if (edit.formula !== undefined) return { formula: edit.formula };\n return 'value' in edit ? edit.value ?? null : KEEP;\n}\nconst styleOf = (edit: CellEdit) =>\n edit !== null && typeof edit === 'object' && !(edit instanceof Date) ? edit.style : undefined;\n\n\n// The cell XML for an edit; `attrs` keeps the existing cell's style (s=...) and other attributes\nfunction editedCell(p: string, ref: string, attrs: string, edit: CellValue | { formula: string }): string {\n if (edit === null || edit === undefined) return `<${p}c r=\"${ref}\"${attrs}/>`;\n if (typeof edit === 'number') {\n return isFinite(edit) ? `<${p}c r=\"${ref}\"${attrs}><${p}v>${edit}</${p}v></${p}c>` : `<${p}c r=\"${ref}\"${attrs} t=\"e\"><${p}v>#NUM!</${p}v></${p}c>`;\n }\n if (typeof edit === 'boolean') return `<${p}c r=\"${ref}\"${attrs} t=\"b\"><${p}v>${edit ? 1 : 0}</${p}v></${p}c>`;\n if (edit instanceof Date) {\n if (isNaN(edit.getTime())) throw new Error(`Invalid Date for cell ${ref}`);\n return `<${p}c r=\"${ref}\"${attrs}><${p}v>${dateToSerial(edit)}</${p}v></${p}c>`;\n }\n if (typeof edit === 'object') return `<${p}c r=\"${ref}\"${attrs}><${p}f>${escapeXml(edit.formula.replace(/^=/, ''))}</${p}f></${p}c>`;\n const text = escapeXml(encodeXString(checkCellText(edit, ref)));\n const t = /^\\s|\\s$/.test(edit) ? `<${p}t xml:space=\"preserve\">${text}</${p}t>` : `<${p}t>${text}</${p}t>`;\n return `<${p}c r=\"${ref}\"${attrs} t=\"inlineStr\"><${p}is>${t}</${p}is></${p}c>`;\n}\n\n// The cells of new rows (a new sheet, or rows appended to one) as edits, rows numbered from 1\nfunction rowsToEdits(name: string, rows: Row[]): EditedRows {\n const edits: EditedRows = new Map();\n rows.forEach((row, ri) => {\n const cells = new Map<number, CellEdit>();\n row.forEach((cell, ci) => {\n if (cell === null || cell === undefined) return;\n if (typeof cell !== 'object' || cell instanceof Date) {\n cells.set(ci, cell);\n return;\n }\n if (cell.hyperlink !== undefined || cell.comment !== undefined) {\n throw new Error(`Sheet \"${name}\": SheetEditor does not write hyperlinks or notes in new rows; use SheetWriter.`);\n }\n // Rich text is written as plain text here\n const value = cell.richText && cell.value == null ? cell.richText.map(r => r.text).join('') : cell.value;\n cells.set(ci, { value, formula: cell.formula, style: cell.style });\n });\n if (cells.size) edits.set(ri + 1, cells);\n });\n return edits;\n}\n\nconst WORKSHEET_TYPE = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet';\nconst WORKSHEET_CONTENT = 'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml';\n\n// An element in the shape of a regex match: [whole, attributes, body], body undefined when self-closing\nconst asMatch = (el: { whole: string; attrs: string; body: string }) =>\n [el.whole, el.attrs, el.whole.endsWith('/>') ? undefined : el.body] as unknown as RegExpMatchArray;\n\nexport class SheetEditor {\n private appends = new Map<string, Row[][]>();\n private cellEdits = new Map<string, EditedRows>();\n private additions = new Map<string, Row[]>();\n private deletions = new Set<string>();\n private shiftOps = new Map<string, { rows: ShiftOp[]; cols: ShiftOp[] }>();\n\n // Appends `rows` after the last existing row of sheet `sheetName`. Cells take values, formulas and\n // styles, as in addSheet. Called again for the same sheet, the rows go after the earlier ones.\n appendSheet(sheetName: string, rows: Row[], _options: SheetOptions = {}): this {\n let batches = this.appends.get(sheetName);\n if (!batches) this.appends.set(sheetName, batches = []);\n batches.push(rows);\n return this;\n }\n\n // Sets cells of an existing sheet by address, e.g. { B2: 42, C2: { formula: 'B2*2' } }. A cell\n // keeps its style, so a date written over a date-formatted cell shows as a date. Formulas are\n // recalculated when Excel opens the file.\n setCells(sheetName: string, cells: Record<string, CellEdit>): this {\n let rows = this.cellEdits.get(sheetName);\n if (!rows) this.cellEdits.set(sheetName, rows = new Map());\n for (const [ref, edit] of Object.entries(cells)) {\n const m = /^\\$?([A-Za-z]{1,3})\\$?(\\d+)$/.exec(ref);\n const r = m ? parseInt(m[2], 10) : 0;\n if (!m || r < 1 || r > MAX_ROWS || colIndex(m[1]) >= MAX_COLUMNS) throw new Error(`Invalid cell reference \"${ref}\".`);\n if (!rows.has(r)) rows.set(r, new Map());\n rows.get(r)!.set(colIndex(m[1]), edit);\n }\n return this;\n }\n\n // Adds a sheet after the existing ones. Cells take values, formulas and styles; for hyperlinks,\n // notes and sheet options, write the workbook with SheetWriter.\n addSheet(sheetName: string, rows: Row[]): this {\n validateSheetName(sheetName, this.additions.keys());\n this.additions.set(sheetName, rows);\n return this;\n }\n\n // Removes a sheet. Names scoped to it go; other defined names that point at it become #REF!.\n // Formulas in other sheets that point at it are not rewritten.\n deleteSheet(sheetName: string): this {\n this.deletions.add(sheetName);\n return this;\n }\n\n // Inserts `count` empty rows before row `at`. Everything below moves down, and every reference to\n // the moved rows follows them: formulas on any sheet, defined names, merges, conditional formats,\n // validations, hyperlinks, tables, pictures, notes, sparklines, chart series and pivot sources. A\n // range that spans row `at` grows. setCells addresses count after the rows have moved.\n insertRows(sheetName: string, at: number, count = 1): this {\n return this.shiftOp(sheetName, 'rows', at, count, true);\n }\n\n // Deletes rows start..start+count-1. References to the deleted cells become #REF!, as in Excel, and\n // ranges that covered them shrink.\n deleteRows(sheetName: string, start: number, count = 1): this {\n return this.shiftOp(sheetName, 'rows', start, count, false);\n }\n\n // Inserts `count` empty columns before column `at` ('C' or 3), like insertRows. Inserting inside a\n // table adds table columns named Column1, Column2...\n insertColumns(sheetName: string, at: number | string, count = 1): this {\n return this.shiftOp(sheetName, 'cols', typeof at === 'string' ? colIndex(at) + 1 : at, count, true);\n }\n\n // Deletes columns start..start+count-1 ('C' or 3), like deleteRows\n deleteColumns(sheetName: string, start: number | string, count = 1): this {\n return this.shiftOp(sheetName, 'cols', typeof start === 'string' ? colIndex(start) + 1 : start, count, false);\n }\n\n private shiftOp(sheetName: string, axis: 'rows' | 'cols', at: number, count: number, insert: boolean): this {\n const max = axis === 'rows' ? MAX_ROWS : MAX_COLUMNS;\n if (!Number.isInteger(at) || at < 1 || at > max || !Number.isInteger(count) || count < 1) {\n throw new Error(`Invalid ${axis === 'rows' ? 'rows' : 'columns'}: start ${at}, count ${count}.`);\n }\n let ops = this.shiftOps.get(sheetName);\n if (!ops) this.shiftOps.set(sheetName, ops = { rows: [], cols: [] });\n ops[axis].push({ at, count, insert });\n return this;\n }\n\n // maxUncompressedBytes caps each part as the reader's option does: parts read whole default to 1 GiB,\n // streamed worksheets are only capped when it is set\n edit(reader: RandomAccessReader, options?: { maxUncompressedBytes?: number }): ReadableStream<Uint8Array> {\n const zipIn = new ZipRandomAccessParser(reader);\n // Inflating is capped at each entry's stated size, so checking the stated size bounds the real one\n const checkSize = (name: string, max: number) => {\n const size = zipIn.getRecord(name).uncompressedSize;\n if (size > max) throw new Error(`Security Error: ${name} is ${size} bytes uncompressed, over the limit of ${max}.`);\n };\n const zipOut = new ZipStreamWriter();\n\n (async () => {\n try {\n await zipIn.parseCentralDirectory();\n\n // Resolve sheet paths up front via random access, independent of entry order.\n const readText = async (name: string) => {\n if (!zipIn.has(name)) return '';\n checkSize(name, options?.maxUncompressedBytes ?? 1024 ** 3);\n return this.readStreamToString(await zipIn.extractStream(name));\n };\n const parts = await resolveWorkbookParts(readText);\n // Parts rewritten whole, read back by later steps\n const overlay = new Map<string, string>();\n const read = async (path: string) => overlay.get(path) ?? readText(path);\n const written = new Set<string>();\n const pathOf = (sheetName: string) => {\n if (this.deletions.has(sheetName)) throw new Error(`Sheet \"${sheetName}\" is being deleted.`);\n const path = parts.sheets.get(sheetName);\n if (!path || !zipIn.has(path)) throw new Error(`Sheet \"${sheetName}\" not found in workbook.`);\n return path;\n };\n\n const appendByPath = new Map<string, EditedRows>();\n for (const [sheetName, batches] of this.appends) appendByPath.set(pathOf(sheetName), rowsToEdits(sheetName, batches.flat()));\n const editsByPath = new Map<string, EditedRows>();\n for (const [sheetName, rows] of this.cellEdits) editsByPath.set(pathOf(sheetName), rows);\n\n for (const sheetName of this.deletions) await removeSheet(sheetName, parts, read, overlay, written);\n const added = new Map<string, EditedRows>();\n for (const [sheetName, rows] of this.additions) {\n const free = (path: string) => !zipIn.has(path) && !added.has(path);\n added.set(await insertSheet(sheetName, parts, read, overlay, free), rowsToEdits(sheetName, rows));\n }\n\n // Moving rows: every sheet's formulas may point at them, so all sheets stream through a\n // transform; the parts tied to a sheet's rows and the workbook's names are rewritten whole\n const rowMaps: ShiftMaps = new Map();\n for (const [sheetName, ops] of this.shiftOps) {\n pathOf(sheetName);\n rowMaps.set(sheetName.toLowerCase(), {\n rows: ops.rows.length ? new AxisMap(ops.rows) : undefined,\n cols: ops.cols.length ? new AxisMap(ops.cols) : undefined,\n });\n }\n const shiftByPath = new Map<string, string>();\n if (rowMaps.size) {\n const update = async (path: string, change: (xml: string) => string) => {\n if (!zipIn.has(path) || written.has(path)) return;\n const xml = await read(path);\n const changed = change(xml);\n if (changed !== xml) overlay.set(path, changed);\n };\n await update(parts.workbookPath, wb => mapDefinedNames(wb, rowMaps));\n for (const [sheetName, path] of parts.sheets) {\n if (this.deletions.has(sheetName)) continue;\n shiftByPath.set(path, sheetName);\n const map = rowMaps.get(sheetName.toLowerCase());\n for (const rel of await partRelationships(read, path)) {\n if (rel.external) continue;\n const type = rel.type.slice(rel.type.lastIndexOf('/'));\n if (type === '/table') {\n await update(rel.path, xml => {\n const { xml: table, headers } = mapTable(xml, sheetName, rowMaps);\n // Columns inserted into a table need header cells matching their names\n if (headers.length) {\n const edits: EditedRows = new Map([...editsByPath.get(path) ?? []].map(([r, cells]) => [r, new Map(cells)]));\n for (const { ref, name } of headers) {\n const m = /^([A-Z]+)(\\d+)$/.exec(ref)!;\n const r = parseInt(m[2], 10), c = colIndex(m[1]);\n if (!edits.has(r)) edits.set(r, new Map());\n if (!edits.get(r)!.has(c)) edits.get(r)!.set(c, name);\n }\n editsByPath.set(path, edits);\n }\n return table;\n });\n }\n if (!map) continue;\n if (type === '/comments' || type === '/threadedComment') await update(rel.path, xml => mapComments(xml, map));\n if (type === '/vmlDrawing') await update(rel.path, xml => mapVml(xml, map));\n if (type === '/drawing') await update(rel.path, xml => mapDrawing(xml, map));\n if (type === '/pivotTable') await update(rel.path, xml => mapPivotTable(xml, map));\n }\n }\n // Charts on any sheet can plot the moved rows, and so can pivot tables\n for (const path of parts.sheets.values()) {\n for (const rel of await partRelationships(read, path)) {\n if (rel.external || !rel.type.endsWith('/drawing')) continue;\n for (const chart of await partRelationships(read, rel.path)) {\n if (!chart.external && chart.type.endsWith('/chart')) await update(chart.path, xml => mapChart(xml, rowMaps));\n }\n }\n }\n for (const rel of await partRelationships(read, parts.workbookPath)) {\n if (!rel.external && rel.type.endsWith('/pivotCacheDefinition')) await update(rel.path, xml => mapPivotCache(xml, rowMaps));\n }\n }\n\n // Edited cells invalidate cached formula results\n if (editsByPath.size || added.size || appendByPath.size || this.deletions.size || rowMaps.size) {\n const { replace, drop } = await recalcOnOpen(read, parts, await read(parts.workbookPath));\n for (const [path, xml] of replace) overlay.set(path, xml);\n for (const path of drop) written.add(path);\n }\n\n // Styles gain the formats of restyled cells as the sheets stream, so they are written last\n let patcher: StylePatcher | undefined;\n const styled = [...editsByPath.values(), ...added.values(), ...appendByPath.values()]\n .some(rows => [...rows.values()].some(cells => [...cells.values()].some(e => styleOf(e))));\n // Dates may need a date format added to their cells\n const dated = [...editsByPath.values(), ...added.values(), ...appendByPath.values()]\n .some(rows => [...rows.values()].some(cells => [...cells.values()].some(e => contentOf(e) instanceof Date)));\n if (styled || (dated && parts.styles)) {\n if (!parts.styles) throw new Error('Workbook has no styles part.');\n patcher = new StylePatcher(await read(parts.styles));\n written.add(parts.styles);\n }\n\n for (const [path, xml] of overlay) {\n if (written.has(path)) continue;\n await zipOut.addFile(path, new Response(xml).body!);\n written.add(path);\n }\n const decode = (bytes: ReadableStream<Uint8Array>) => bytes.pipeThrough(new TextDecoderStream() as any as TransformStream<Uint8Array, string>);\n const encode = (text: ReadableStream<string>) => text.pipeThrough(new TextEncoderStream() as any as TransformStream<string, Uint8Array>);\n if (added.size) {\n // A new sheet uses the workbook's namespace (Transitional or Strict)\n const root = /<((?:\\w+:)?)workbook\\b[^>]*>/.exec(await read(parts.workbookPath));\n const ns = (root && attr(root[0], root[1] ? `xmlns:${root[1].slice(0, -1)}` : 'xmlns')) ?? 'http://schemas.openxmlformats.org/spreadsheetml/2006/main';\n const empty = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<worksheet xmlns=\"${escapeXml(ns)}\"><sheetData/></worksheet>`;\n for (const [path, edits] of added) {\n await zipOut.addFile(path, encode(decode(new Response(empty).body!).pipeThrough(this.createEditTransform(edits, patcher))));\n }\n }\n\n for (const filename of zipIn.getFiles()) {\n if (written.has(filename)) continue;\n const append = appendByPath.get(filename);\n const edits = editsByPath.get(filename);\n const shift = shiftByPath.get(filename);\n if (append || edits || shift !== undefined) {\n checkSize(filename, options?.maxUncompressedBytes ?? Infinity);\n let text = decode(await zipIn.extractStream(filename));\n if (shift !== undefined) text = text.pipeThrough(createShiftTransform(shift, rowMaps));\n if (edits || append) text = text.pipeThrough(this.createEditTransform(edits ?? new Map(), patcher, append));\n await zipOut.addFile(filename, encode(text));\n } else {\n // Untouched entries are copied without decompressing\n const record = zipIn.getRecord(filename);\n await zipOut.addCompressedFile(filename, await zipIn.extractRawStream(filename),\n record.uncompressedSize, record.compressedSize, record.crc, record.compressionMethod);\n }\n }\n if (patcher) await zipOut.addFile(parts.styles!, new Response(patcher.toXml()).body!);\n await zipOut.close();\n } catch (err) {\n zipOut.error(err);\n }\n })();\n\n return zipOut.stream;\n }\n\n // Streams a worksheet, rewriting edited cells as their rows pass by and adding rows and cells\n // that did not exist. `append` rows (numbered from 1) go after the last row. Only one row at a\n // time is held in memory.\n private createEditTransform(edits: EditedRows, patcher?: StylePatcher, append?: EditedRows): TransformStream<string, string> {\n const pending = [...edits.keys()].sort((a, b) => a - b);\n let next = 0;\n let lastRow = 0; // number of the last row read, for rows without an r attribute\n let buffer = '';\n let p = ''; // namespace prefix of the sheet's elements\n let state: 'head' | 'rows' | 'tail' = 'head';\n let scanned = 0; // buffer known to hold no </row> before here\n // Shared formulas whose anchor cell was overwritten: their other cells get the formula written out\n const sharedAnchors = new Map<string, { text: string; row: number; col: number }>();\n const brokenShared = new Set<string>();\n\n // An edited cell; `existing` is the cell's current element, if any\n const cellXml = (ref: string, edit: CellEdit, existing?: RegExpMatchArray): string => {\n let attrs = existing ? existing[1].replace(/\\sr=\"[^\"]*\"/, '') : '';\n const style = styleOf(edit);\n if (style) {\n const base = parseInt(/\\ss=\"(\\d+)\"/.exec(attrs)?.[1] ?? '0', 10);\n attrs = `${attrs.replace(/\\ss=\"[^\"]*\"/, '')} s=\"${patcher!.patch(base, style)}\"`;\n }\n const content = contentOf(edit);\n if (content instanceof Date && patcher) {\n const base = parseInt(/\\ss=\"(\\d+)\"/.exec(attrs)?.[1] ?? '0', 10);\n attrs = `${attrs.replace(/\\ss=\"[^\"]*\"/, '')} s=\"${patcher.dateFormat(base, content)}\"`;\n }\n if (content === KEEP) {\n return existing?.[2] !== undefined ? `<${p}c r=\"${ref}\"${attrs}>${existing[2]}</${p}c>` : `<${p}c r=\"${ref}\"${attrs}/>`;\n }\n // Keeps the style; drops the type and the metadata of rich values and dynamic arrays\n return editedCell(p, ref, attrs.replace(/\\s(?:t|vm|cm)=\"[^\"]*\"/g, ''), content);\n };\n\n const newRow = (r: number, rowEdits = edits.get(r)!) => {\n const cells = [...rowEdits.entries()].sort((a, b) => a[0] - b[0])\n .map(([c, e]) => cellXml(colLetter(c) + r, e)).join('');\n return `<${p}row r=\"${r}\">${cells}</${p}row>`;\n };\n const rowsBefore = (limit: number) => {\n let xml = '';\n for (; next < pending.length && pending[next] < limit; next++) xml += newRow(pending[next]);\n return xml;\n };\n // The rows still to come at the end of sheetData: new edited rows, then the appended rows\n const lastRows = () => {\n let xml = rowsBefore(Infinity);\n if (!append?.size) return xml;\n const base = Math.max(lastRow, pending[pending.length - 1] ?? 0);\n const last = base + Math.max(...append.keys());\n if (last > MAX_ROWS) throw new Error(`Appending rows would reach row ${last}, past Excel's last row (${MAX_ROWS}).`);\n for (const [r, cells] of [...append].sort((a, b) => a[0] - b[0])) xml += newRow(base + r, cells);\n return xml;\n };\n\n const rewriteRow = (open: string, inner: string, r: number): string => {\n // A copy: the edits stay intact for another edit() call\n const rowEdits = edits.has(r) ? new Map(edits.get(r)) : undefined;\n if (rowEdits) next++;\n let changed = !!rowEdits;\n const cells: [number, string][] = [];\n let col = 0;\n for (const el of xmlElements(inner, 'c')) {\n const m = asMatch(el);\n const ref = /\\sr=\"([A-Za-z]+)\\d+\"/.exec(m[1]);\n col = ref ? colIndex(ref[1]) : col;\n const edit = rowEdits?.get(col);\n const formula = m[2] && xmlElements(m[2], 'f').next().value;\n const f = formula ? asMatch(formula) : undefined;\n const si = f && /\\st=\"shared\"/.test(f[1]) ? /\\ssi=\"(\\d+)\"/.exec(f[1])?.[1] : undefined;\n let xml = m[0];\n const anchor = si !== undefined && f && f[2] !== undefined;\n if (anchor) sharedAnchors.set(si!, { text: unescapeXml(f![2]), row: r, col });\n if (rowEdits?.has(col)) {\n // the group's formula text lived in this cell\n if (anchor && contentOf(edit as CellEdit) !== KEEP) brokenShared.add(si!);\n xml = cellXml(colLetter(col) + r, edit as CellEdit, m);\n rowEdits.delete(col);\n } else if (si !== undefined && f && !anchor) {\n if (brokenShared.has(si)) {\n const a = sharedAnchors.get(si);\n if (a) {\n xml = xml.replace(f[0], `<${p}f>${escapeXml(shiftFormula(a.text, r - a.row, col - a.col))}</${p}f>`);\n changed = true;\n }\n }\n }\n cells.push([col, xml]);\n col++;\n }\n for (const [c, e] of rowEdits ?? []) cells.push([c, cellXml(colLetter(c) + r, e)]);\n if (!changed) return `${open}${inner}</${p}row>`;\n cells.sort((a, b) => a[0] - b[0]);\n return `${open.replace(/\\sspans=\"[^\"]*\"/, '').replace(/\\/>$/, '>')}${cells.map(c => c[1]).join('')}</${p}row>`;\n };\n\n return new TransformStream({\n transform(chunk, controller) {\n buffer += chunk;\n let out = '';\n while (true) {\n if (state === 'head') {\n const m = /<((?:\\w+:)?)sheetData\\b[^>]*?(\\/?)>/.exec(buffer);\n if (!m) break;\n p = m[1];\n if (m[2]) {\n // Empty sheet: <sheetData/> becomes a pair holding the new rows\n out += buffer.slice(0, m.index) + `<${p}sheetData>${lastRows()}</${p}sheetData>`;\n buffer = buffer.slice(m.index + m[0].length);\n state = 'tail';\n } else {\n out += buffer.slice(0, m.index + m[0].length);\n buffer = buffer.slice(m.index + m[0].length);\n state = 'rows';\n }\n } else if (state === 'rows') {\n const gt = buffer.indexOf('>');\n if (gt === -1) break;\n const opening = buffer.slice(0, gt + 1);\n if (!opening.endsWith('/>') && !opening.includes(`</${p}sheetData`)) {\n const close = buffer.indexOf(`</${p}row>`, Math.max(gt, scanned));\n if (close === -1) { scanned = Math.max(0, buffer.length - p.length - 6); break; }\n }\n scanned = 0;\n const m = new RegExp(`^\\\\s*(?:<${p}row\\\\b([^>]*?)(?:/>|>([\\\\s\\\\S]*?)</${p}row>)|</${p}sheetData>)`).exec(buffer);\n if (!m) break;\n if (m[0].trimStart().startsWith(`</${p}sheetData`)) {\n out += lastRows() + m[0];\n state = 'tail';\n } else {\n // A row without r is the one after the previous row, as the reader counts it\n const rAttr = /\\sr=\"(\\d+)\"/.exec(m[1])?.[1];\n const r = rAttr ? parseInt(rAttr, 10) : lastRow + 1;\n lastRow = Math.max(lastRow, r);\n out += rowsBefore(r);\n const open = m[0].slice(0, m[0].indexOf('>') + 1);\n // Rows are only parsed when they have edits or take part in a shared formula\n out += edits.has(r) || (m[2] ?? '').includes('t=\"shared\"') ? rewriteRow(open.trimStart(), m[2] ?? '', r) : m[0];\n }\n buffer = buffer.slice(m[0].length);\n } else {\n out += buffer;\n buffer = '';\n break;\n }\n }\n if (out) controller.enqueue(out);\n },\n flush(controller) {\n if (state !== 'tail') {\n controller.error(new Error('Worksheet has no complete <sheetData> element.'));\n return;\n }\n if (buffer) controller.enqueue(buffer);\n },\n });\n }\n\n private async readStreamToString(stream: ReadableStream<Uint8Array>): Promise<string> {\n const reader = stream.pipeThrough(new TextDecoderStream() as any as TransformStream<Uint8Array, string>).getReader();\n let result = '';\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n result += value;\n }\n return result;\n }\n}\n\nconst sheetTags = (wb: string) => [...wb.matchAll(/<(?:\\w+:)?sheet\\b[^>]*>/g)].map(m => m[0]);\nconst relTag = (rels: string, id: string) =>\n new RegExp(`<(?:\\\\w+:)?Relationship\\\\b[^>]*?\\\\sId=\"${escapeRe(id)}\"[^>]*/>`).exec(rels)?.[0];\nconst overrideTag = (types: string, path: string) =>\n new RegExp(`<(?:\\\\w+:)?Override\\\\b[^>]*?PartName=\"/${escapeRe(path)}\"[^>]*/>`).exec(types)?.[0];\n\nasync function removeSheet(name: string, parts: WorkbookParts, read: (path: string) => Promise<string>,\n overlay: Map<string, string>, dropped: Set<string>) {\n let wb = await read(parts.workbookPath);\n const tags = sheetTags(wb);\n const idx = tags.findIndex(t => attr(t, 'name') === name);\n if (idx < 0) throw new Error(`Sheet \"${name}\" not found in workbook.`);\n if (!tags.some((t, i) => i !== idx && !/\\sstate=\"(?:hidden|veryHidden)\"/.test(t))) {\n throw new Error(`Cannot delete sheet \"${name}\": a workbook needs a visible sheet.`);\n }\n const rId = attr(tags[idx], 'r:id') ?? attr(tags[idx], '\\\\w+:id');\n wb = wb.replace(tags[idx], '');\n\n // Names scoped to the sheet go and later sheets' scopes shift down; references to it become #REF!\n const quoted = new RegExp(`'${escapeRe(name.replace(/'/g, \"''\"))}'!`, 'gi');\n const plain = /^[A-Za-z_\\u00C0-\\uFFFF][\\w.\\u00C0-\\uFFFF]*$/.test(name)\n ? new RegExp(`(^|[^\\\\w.'!])${escapeRe(name)}!`, 'gi') : undefined;\n wb = wb.replace(/<((?:\\w+:)?)definedName\\b([^>]*)>([\\s\\S]*?)<\\/\\1definedName>/g, (whole, _p, attrs: string, text: string) => {\n const local = attr(attrs, 'localSheetId');\n if (local !== null) {\n const n = parseInt(local, 10);\n return n === idx ? '' : n > idx ? whole.replace(/\\slocalSheetId=\"\\d+\"/, ` localSheetId=\"${n - 1}\"`) : whole;\n }\n const formula = unescapeXml(text);\n let mapped = formula.replace(quoted, '#REF!');\n if (plain) mapped = mapped.replace(plain, '$1#REF!');\n return mapped === formula ? whole : whole.replace(`>${text}<`, `>${escapeXml(mapped)}<`);\n });\n wb = wb.replace(/<(?:\\w+:)?workbookView\\b[^>]*>/g, view => view.replace(/\\s(activeTab|firstSheet)=\"(\\d+)\"/g, (_m, a: string, v: string) => {\n const n = parseInt(v, 10);\n return ` ${a}=\"${n > idx ? n - 1 : Math.min(n, tags.length - 2)}\"`;\n }));\n overlay.set(parts.workbookPath, wb);\n\n const path = (await partRelationships(read, parts.workbookPath)).find(r => r.id === rId)?.path;\n const relsPath = relsPathOf(parts.workbookPath);\n const rels = await read(relsPath);\n overlay.set(relsPath, rels.replace(relTag(rels, rId ?? '') ?? '', ''));\n if (path) {\n // The sheet's own drawings, notes and tables stay in the package, unreferenced\n const types = await read('[Content_Types].xml');\n overlay.set('[Content_Types].xml', types.replace(overrideTag(types, path) ?? '', ''));\n dropped.add(path);\n dropped.add(relsPathOf(path));\n }\n}\n\n// Registers a new, empty worksheet part after the existing sheets; returns its path\nasync function insertSheet(name: string, parts: WorkbookParts, read: (path: string) => Promise<string>,\n overlay: Map<string, string>, free: (path: string) => boolean): Promise<string> {\n let wb = await read(parts.workbookPath);\n const tags = sheetTags(wb);\n validateSheetName(name, tags.map(t => attr(t, 'name') ?? ''));\n const dir = dirOf(parts.workbookPath);\n let n = 1;\n while (!free(`${dir}worksheets/sheet${n}.xml`)) n++;\n const path = `${dir}worksheets/sheet${n}.xml`;\n\n const relsPath = relsPathOf(parts.workbookPath);\n let rels = await read(relsPath);\n let k = 1;\n while (relTag(rels, `rId${k}`)) k++;\n // Strict OOXML files use other type URIs: copy them from an existing sheet\n const sheetRel = (await partRelationships(read, parts.workbookPath)).find(r => r.type.endsWith('/worksheet'));\n rels = rels.replace(/<\\/((?:\\w+:)?)Relationships>/, (close, p: string) =>\n `<${p}Relationship Id=\"rId${k}\" Type=\"${sheetRel?.type ?? WORKSHEET_TYPE}\" Target=\"worksheets/sheet${n}.xml\"/>${close}`);\n overlay.set(relsPath, rels);\n\n const sheetId = Math.max(0, ...tags.map(t => parseInt(attr(t, 'sheetId') ?? '0', 10))) + 1;\n const rPrefix = /<(?:\\w+:)?sheet\\b[^>]*?\\s(\\w+):id=\"/.exec(wb)?.[1] ?? 'r';\n wb = wb.replace(/<\\/((?:\\w+:)?)sheets>/, (close, p: string) =>\n `<${p}sheet name=\"${escapeXml(name)}\" sheetId=\"${sheetId}\" ${rPrefix}:id=\"rId${k}\"/>${close}`);\n overlay.set(parts.workbookPath, wb);\n\n const types = await read('[Content_Types].xml');\n const contentType = sheetRel && /ContentType=\"([^\"]*)\"/.exec(overrideTag(types, sheetRel.path) ?? '')?.[1];\n overlay.set('[Content_Types].xml', types.replace(/<\\/((?:\\w+:)?)Types>/, (close, p: string) =>\n `<${p}Override PartName=\"/${path}\" ContentType=\"${contentType ?? WORKSHEET_CONTENT}\"/>${close}`));\n return path;\n}\n","import { RandomAccessReader } from './random-access';\nimport { ZipRandomAccessParser } from './zip-random-access';\nimport { createXmlBatchParser, XmlToken } from './xml-stream';\nimport { parseWorksheet, parseComments, ParseResult, RichTextCollector } from './worksheet-parser';\nimport { resolveWorkbookParts, partRelationships, hyperlinkTargets, decodeXString, isDateFormatCode, attr, unescapeXml, xmlElements } from './utils';\nimport { parseThemeColors, colorResolver, applyFontElement, ColorResolver } from './style-reader';\nimport { readSheetImages } from './image';\nimport { BUILTIN_NUM_FMTS, DISPLAY_NUM_FMTS, isBuiltinDateFormat } from './number-format';\nimport { CfbReader, isCfb } from './cfb';\nimport { XlsWorkbook } from './xls';\nimport { ODS_MIMETYPE, parseOds, readOdsWorkbook } from './ods';\nimport type { CellStyle, CellFont, CellFill, GradientFill, CellBorder, BorderSide, CellAlignment, RichTextRun, DefinedName, WorkbookProperties } from './types';\nexport { SheetWriter } from './writer';\nexport { createFileReader, createBlobReader, type RandomAccessReader } from './random-access';\nexport { sheetToJson, streamToCsv, resolveSheetPaths } from './utils';\nexport { SheetEditor } from './editor';\n\nexport interface ParseOptions {\n sheetName?: string;\n // Zip bomb protection: max uncompressed bytes per part. Parts held in memory (workbook, rels,\n // shared strings, styles) default to 1 GiB; the streamed worksheet is only limited when set.\n // Pass Infinity to disable.\n maxUncompressedBytes?: number;\n formulas?: boolean; // report cell formulas in RowData.formulas\n styles?: boolean; // report cell styles in RowData.styles\n richText?: boolean; // report formatted text runs in RowData.richText\n formatted?: boolean; // report each cell's text as Excel shows it (en-US) in RowData.formatted\n errors?: boolean; // mark error cells (#N/A, #DIV/0!) in RowData.errors (.xlsx only)\n}\n\nconst DEFAULT_MAX_PART_BYTES = 1 << 30;\n\n// OpenDocument files name their type in a `mimetype` entry\nconst isOds = async (zip: ZipRandomAccessParser, readText: (name: string) => Promise<string>) =>\n zip.has('mimetype') && zip.has('content.xml') && (await readText('mimetype')).trim() === ODS_MIMETYPE;\n\n// Compound files (.xls, and .xlsx saved with a password) are read whole, so their size is capped\nasync function openCompound(reader: RandomAccessReader, maxBytes = DEFAULT_MAX_PART_BYTES): Promise<XlsWorkbook | undefined> {\n if (reader.size < 8 || !isCfb(await reader.read(0, 8))) return undefined;\n if (reader.size > maxBytes) throw new Error(`Security Error: the ${reader.size}-byte file is larger than maxUncompressedBytes (${maxBytes}).`);\n const cfb = new CfbReader(await reader.read(0, reader.size));\n if (cfb.has('EncryptionInfo')) {\n throw new Error('This workbook is password-protected. Decrypt it first with decryptWorkbook from @xlsxflow/pro, or save it without a password in Excel.');\n }\n return new XlsWorkbook(cfb);\n}\n\nexport interface WorkbookInfo {\n sheets: { name: string; state: 'visible' | 'hidden' | 'veryHidden' }[]; // in tab order\n definedNames: DefinedName[]; // includes Excel's own, such as _xlnm.Print_Area\n properties: WorkbookProperties;\n}\n\n// Text of the first <tag> element in xml, unescaped\nconst elementText = (xml: string, tag: string) => {\n for (const el of xmlElements(xml, tag)) return unescapeXml(el.body);\n return undefined;\n};\n\nfunction createByteLimitStream(maxBytes: number): TransformStream<Uint8Array, Uint8Array> {\n let bytesRead = 0;\n return new TransformStream({\n transform(chunk, controller) {\n bytesRead += chunk.length;\n if (bytesRead > maxBytes) {\n controller.error(new Error(`Security Error: Stream exceeded maximum uncompressed size of ${maxBytes} bytes.`));\n } else {\n controller.enqueue(chunk);\n }\n }\n });\n}\n\n// Shared string table (index -> text) of a workbook's sharedStrings part\nexport async function readSharedStrings(stream: ReadableStream<Uint8Array>): Promise<Map<number, string>> {\n const map = new Map<number, string>();\n await SheetReader.parseSharedStrings(stream.pipeThrough(createXmlBatchParser()), map);\n return map;\n}\n\nexport class SheetReader {\n // Sheet names and visibility, defined names and document properties, without reading any sheet\n async readWorkbook(reader: RandomAccessReader, options?: Pick<ParseOptions, 'maxUncompressedBytes'>): Promise<WorkbookInfo> {\n const xls = await openCompound(reader, options?.maxUncompressedBytes);\n if (xls) return { sheets: xls.sheets.map(({ name, state }) => ({ name, state })), definedNames: xls.definedNames, properties: xls.properties };\n const zip = new ZipRandomAccessParser(reader);\n await zip.parseCentralDirectory();\n const max = options?.maxUncompressedBytes ?? DEFAULT_MAX_PART_BYTES;\n const readText = async (name: string) => zip.has(name)\n ? this.readStreamToString(max !== Infinity ? (await zip.extractStream(name)).pipeThrough(createByteLimitStream(max)) : await zip.extractStream(name))\n : '';\n if (await isOds(zip, readText)) {\n const content = async () => { const st = await zip.extractStream('content.xml'); return max !== Infinity ? st.pipeThrough(createByteLimitStream(max)) : st; };\n return readOdsWorkbook(content, readText);\n }\n const parts = await resolveWorkbookParts(readText);\n\n const sheets: WorkbookInfo['sheets'] = [];\n for (const [tag] of parts.workbookXml.matchAll(/<(?:\\w+:)?sheet\\b[^>]*>/g)) {\n const name = attr(tag, 'name');\n const state = attr(tag, 'state');\n if (name !== null) sheets.push({ name, state: state === 'hidden' || state === 'veryHidden' ? state : 'visible' });\n }\n const definedNames: DefinedName[] = [];\n for (const { attrs: open, body: text } of xmlElements(parts.workbookXml, 'definedName')) {\n const local = attr(open, 'localSheetId');\n const comment = attr(open, 'comment');\n // attr() has already unescaped attribute values; only element text is still escaped\n const name: DefinedName = { name: attr(open, 'name') ?? '', ref: unescapeXml(text) };\n if (local !== null && sheets[+local]) name.sheet = sheets[+local].name;\n if (comment !== null) name.comment = comment;\n if (/^(?:1|true)$/.test(attr(open, 'hidden') ?? '')) name.hidden = true;\n definedNames.push(name);\n }\n\n const rootRels = await partRelationships(readText, '');\n const core = await readText(rootRels.find(r => r.type.endsWith('/core-properties'))?.path ?? 'docProps/core.xml');\n const app = await readText(rootRels.find(r => r.type.endsWith('/extended-properties'))?.path ?? 'docProps/app.xml');\n const properties: WorkbookProperties = {};\n for (const [key, tag] of [['title', 'dc:title'], ['subject', 'dc:subject'], ['creator', 'dc:creator'], ['keywords', 'cp:keywords'],\n ['description', 'dc:description'], ['category', 'cp:category']] as const) {\n const v = elementText(core, tag);\n if (v !== undefined) properties[key] = v;\n }\n const created = elementText(core, 'dcterms:created');\n if (created && !isNaN(Date.parse(created))) properties.created = new Date(created);\n for (const [key, tag] of [['company', 'Company'], ['manager', 'Manager']] as const) {\n const v = elementText(app, tag);\n if (v !== undefined) properties[key] = v;\n }\n return { sheets, definedNames, properties };\n }\n\n async parse(reader: RandomAccessReader, options?: ParseOptions): Promise<ParseResult> {\n const xls = await openCompound(reader, options?.maxUncompressedBytes);\n if (xls) return xls.parseSheet(options?.sheetName, !!options?.formatted);\n const zip = new ZipRandomAccessParser(reader);\n await zip.parseCentralDirectory();\n\n const sharedStrings = new Map<number, string>();\n const styles = new Map<number, number>();\n const limit = (st: ReadableStream<Uint8Array>, max = options?.maxUncompressedBytes ?? DEFAULT_MAX_PART_BYTES) =>\n max !== Infinity ? st.pipeThrough(createByteLimitStream(max)) : st;\n const readText = async (name: string) =>\n zip.has(name) ? this.readStreamToString(limit(await zip.extractStream(name))) : '';\n if (await isOds(zip, readText)) {\n const content = async () => limit(await zip.extractStream('content.xml'), options?.maxUncompressedBytes ?? Infinity);\n return parseOds(content, readText, { sheetName: options?.sheetName, formulas: options?.formulas, formatted: options?.formatted, maxPaddingCells: options?.maxUncompressedBytes });\n }\n\n // 1. Locate workbook, sheets, shared strings and styles via package relationships\n const parts = await resolveWorkbookParts(readText);\n let worksheetZipPath: string | undefined;\n if (options?.sheetName) {\n worksheetZipPath = parts.sheets.get(options.sheetName);\n if (!worksheetZipPath) throw new Error(`Sheet with name \"${options.sheetName}\" not found in workbook.`);\n } else {\n // The first tab with cells: a chart sheet first in the tab order is skipped, as the .xls reader does\n worksheetZipPath = [...parts.sheets.values()].find(path => !parts.chartsheets.has(path))\n ?? zip.getFiles().find(f => /^xl\\/worksheets\\/[^/]+\\.xml$/.test(f));\n if (!worksheetZipPath) throw new Error(\"No worksheets found in ZIP.\");\n }\n const is1904 = /<(?:\\w+:)?workbookPr\\b[^>]*\\bdate1904=\"(?:1|true)\"/.test(parts.workbookXml);\n\n // 2. Parse Styles (if exists). Colours can refer to the theme, only read when they are reported.\n const theme = (options?.styles || options?.richText) && parts.theme ? parseThemeColors(await readText(parts.theme)) : [];\n const stylesPath = parts.styles ?? 'xl/styles.xml';\n let cellStyles: (CellStyle | undefined)[] = [];\n let color = colorResolver(theme);\n let formats: (string | undefined)[] = [];\n if (zip.has(stylesPath)) {\n const xmlStream = limit(await zip.extractStream(stylesPath)).pipeThrough(createXmlBatchParser());\n ({ cellStyles, color, formats } = await this.parseStyles(xmlStream, styles, theme));\n }\n\n // 3. Parse Shared Strings (if exists)\n const sstPath = parts.sharedStrings ?? 'xl/sharedStrings.xml';\n const sharedRichText = options?.richText ? new Map<number, RichTextRun[]>() : undefined;\n if (zip.has(sstPath)) {\n const xmlStream = limit(await zip.extractStream(sstPath)).pipeThrough(createXmlBatchParser());\n await SheetReader.parseSharedStrings(xmlStream, sharedStrings, sharedRichText && { map: sharedRichText, color });\n }\n\n // 4. Parse Worksheet\n if (!zip.has(worksheetZipPath)) {\n throw new Error(`Worksheet ${worksheetZipPath} not found in ZIP.`);\n }\n // Rows are yielded as they stream, so an unlimited worksheet costs time, not memory\n const xmlStream = limit(await zip.extractStream(worksheetZipPath), options?.maxUncompressedBytes ?? Infinity)\n .pipeThrough(createXmlBatchParser());\n return parseWorksheet(xmlStream, sharedStrings, styles, is1904, {\n formulas: options?.formulas,\n errors: options?.errors,\n cellStyles: options?.styles ? cellStyles : undefined,\n numFmts: options?.formatted ? formats : undefined,\n richText: options?.richText ? color : undefined,\n sharedRichText,\n hyperlinkTargets: await hyperlinkTargets(readText, worksheetZipPath),\n maxPaddingCells: options?.maxUncompressedBytes,\n comments: async () => {\n const rel = (await partRelationships(readText, worksheetZipPath)).find(r => !r.external && r.type.endsWith('/comments'));\n return rel ? parseComments(await readText(rel.path)) : [];\n },\n images: () => readSheetImages(readText, async path => zip.has(path)\n ? new Uint8Array(await new Response(limit(await zip.extractStream(path))).arrayBuffer()) : undefined, worksheetZipPath),\n });\n }\n\n static async parseSharedStrings(\n xmlTokenStream: ReadableStream<XmlToken | XmlToken[]>,\n map: Map<number, string>,\n rich?: { map: Map<number, RichTextRun[]>; color: ColorResolver }\n ) {\n const reader = xmlTokenStream.getReader();\n const runs = rich && new RichTextCollector(rich.color);\n let index = 0;\n let inText = false;\n let inPhonetic = false;\n let currentString = '';\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n for (const token of (Array.isArray(value) ? value : [value]) as XmlToken[]) {\n runs?.token(token);\n if (token.type === 'startElement' && token.name === 'si') {\n currentString = '';\n runs?.reset();\n } else if (token.type === 'startElement' && token.name === 'rPh') {\n inPhonetic = true; // phonetic hints are not part of the cell text\n } else if (token.type === 'endElement' && token.name === 'rPh') {\n inPhonetic = false;\n } else if (token.type === 'startElement' && token.name === 't' && !inPhonetic) {\n inText = true;\n } else if (token.type === 'text' && inText) {\n currentString += token.value;\n } else if (token.type === 'endElement' && token.name === 't') {\n inText = false;\n } else if (token.type === 'endElement' && token.name === 'si') {\n if (runs?.runs.length) rich!.map.set(index, runs.runs);\n map.set(index++, decodeXString(currentString));\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n\n // Fills `dateStyles` (style index -> 14 when it formats dates), returns each style as a CellStyle and the\n // colour resolver for this workbook (theme + its indexed palette).\n private async parseStyles(xmlTokenStream: ReadableStream<XmlToken | XmlToken[]>, dateStyles: Map<number, number>, theme: string[]) {\n const reader = xmlTokenStream.getReader();\n const numFmts = new Map<number, string>(BUILTIN_NUM_FMTS);\n const customDateFmts = new Set<number>();\n const fonts: (CellFont | undefined)[] = [];\n const fills: (CellFill | GradientFill | undefined)[] = [];\n const borders: (CellBorder | undefined)[] = [];\n const cellStyles: (CellStyle | undefined)[] = [];\n const formats: (string | undefined)[] = []; // number format code by style index, for formatted text\n\n // Only direct children of these lists count: dxfs and cellStyleXfs reuse the same element names\n let section = '';\n let font: CellFont | undefined;\n let fill: CellFill | GradientFill | undefined;\n let pattern = '';\n let border: CellBorder | undefined;\n let side: BorderSide | undefined;\n let xf: CellStyle | undefined;\n // A custom palette (<colors>) comes after the styles that use it, so colours are resolved at the end\n const palette: string[] = [];\n const colors: [Record<string, string>, (argb: string) => void][] = [];\n const later = (a: Record<string, string>, set: (argb: string) => void) => colors.push([a, set]);\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n for (const token of (Array.isArray(value) ? value : [value]) as XmlToken[]) {\n if (token.type === 'startElement') {\n const a = token.attributes;\n if (font) { const f = font; if (applyFontElement(f, token.name, a, c => later(c, argb => { f.color = argb; }))) continue; }\n switch (token.name) {\n case 'numFmts': case 'fonts': case 'fills': case 'borders': case 'cellXfs':\n section = token.name;\n break;\n case 'numFmt':\n if (section === 'numFmts') {\n const id = parseInt(a['numFmtId'] || '0', 10);\n numFmts.set(id, a['formatCode'] || '');\n if (isDateFormatCode(a['formatCode'] || '')) customDateFmts.add(id);\n }\n break;\n case 'font':\n if (section === 'fonts') font = {};\n break;\n case 'rgbColor':\n if (section === 'indexedColors') palette.push(a['rgb'] ?? '');\n break;\n case 'indexedColors':\n section = token.name;\n break;\n case 'color':\n if (side) { const target = side; later(a, c => { target.color = c; }); }\n else if (font) { const target = font; later(a, c => { target.color = c; }); }\n else if (fill?.type === 'gradient' && fill.stops.length) { const stop = fill.stops[fill.stops.length - 1]; later(a, c => { stop.color = c; }); }\n break;\n case 'fill':\n if (section === 'fills') fills.push(fill = undefined);\n break;\n case 'patternFill':\n pattern = a['patternType'] || '';\n break;\n case 'fgColor':\n if (section === 'fills' && pattern === 'solid') {\n const solid: CellFill = fill = { type: 'solid', fgColor: '' };\n later(a, c => { solid.fgColor = c; });\n }\n break;\n case 'gradientFill':\n if (section === 'fills') fill = { type: 'gradient', degree: Number(a['degree'] || 0), stops: [] };\n break;\n case 'stop':\n if (fill?.type === 'gradient') fill.stops.push({ position: Number(a['position'] || 0), color: '' });\n break;\n case 'border':\n if (section === 'borders') border = {};\n break;\n case 'left': case 'right': case 'top': case 'bottom':\n if (border && a['style'] && a['style'] !== 'none') {\n side = border[token.name as 'left'] = { style: a['style'] as BorderSide['style'] };\n }\n break;\n case 'xf':\n if (section === 'cellXfs') {\n const index = cellStyles.length;\n const numFmtId = parseInt(a['numFmtId'] || '0', 10);\n const isDate = isBuiltinDateFormat(numFmtId) || customDateFmts.has(numFmtId);\n dateStyles.set(index, isDate ? 14 : 0);\n formats.push(DISPLAY_NUM_FMTS.get(numFmtId) ?? numFmts.get(numFmtId));\n\n xf = {};\n const fontId = parseInt(a['fontId'] || '0', 10);\n const fillId = parseInt(a['fillId'] || '0', 10);\n const borderId = parseInt(a['borderId'] || '0', 10);\n // Font 0 is the workbook default; fills 0 and 1 are the mandatory none/gray125\n if (fontId > 0 && fonts[fontId]) xf.font = fonts[fontId];\n if (fillId > 1 && fills[fillId]) xf.fill = fills[fillId];\n if (borders[borderId]) xf.border = borders[borderId];\n if (numFmtId > 0 && numFmts.has(numFmtId)) xf.numFmt = numFmts.get(numFmtId);\n cellStyles.push(xf);\n }\n break;\n case 'alignment':\n if (xf) {\n const alignment: CellAlignment = {};\n if (a['horizontal']) alignment.horizontal = a['horizontal'] as CellAlignment['horizontal'];\n if (a['vertical']) alignment.vertical = a['vertical'] as CellAlignment['vertical'];\n if (a['wrapText'] === '1' || a['wrapText'] === 'true') alignment.wrapText = true;\n if (Object.keys(alignment).length) xf.alignment = alignment;\n }\n break;\n }\n } else if (token.type === 'endElement') {\n switch (token.name) {\n case 'numFmts': case 'fonts': case 'fills': case 'borders': case 'cellXfs': case 'indexedColors':\n section = '';\n break;\n case 'font':\n if (font) fonts.push(font);\n font = undefined;\n break;\n case 'fill':\n if (section === 'fills') fills[fills.length - 1] = fill;\n fill = undefined;\n pattern = '';\n break;\n case 'left': case 'right': case 'top': case 'bottom':\n side = undefined;\n break;\n case 'border':\n if (border) borders.push(Object.keys(border).length ? border : undefined);\n border = undefined;\n break;\n case 'xf':\n xf = undefined;\n break;\n }\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n const color = colorResolver(theme, palette.length ? palette : undefined);\n for (const [a, set] of colors) {\n const argb = color(a);\n if (argb) set(argb);\n }\n // Colours that did not resolve (auto, unknown theme slot) are dropped; so is a solid fill without one\n fills.forEach((f, i) => { if (f?.type === 'solid' && !f.fgColor) fills[i] = undefined; });\n for (const f of fills) if (f?.type === 'gradient') f.stops = f.stops.filter(st => st.color);\n const kept = new Set(fills);\n for (const st of cellStyles) if (st?.fill && !kept.has(st.fill)) delete st.fill;\n // Default-looking styles report as no style\n return { cellStyles: cellStyles.map(st => (st && Object.keys(st).length ? st : undefined)), color, formats };\n }\n\n private async readStreamToString(stream: ReadableStream<Uint8Array>): Promise<string> {\n const textDecoder = new TextDecoderStream();\n const reader = stream.pipeThrough(textDecoder as any).getReader();\n let result = '';\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n result += value;\n }\n return result;\n }\n}\n\n","import { CellValue } from './types';\n\nexport interface CsvOptions {\n delimiter?: string; // default \",\"\n convert?: boolean; // default true: unquoted numbers and TRUE/FALSE become numbers and booleans. Empty unquoted fields are null either way\n}\n\n// Numbers as Excel would read them; \"007\" and \"1e5x\" stay text\nconst NUMBER = /^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$/;\n\nfunction convertField(s: string): CellValue {\n if (s === '') return null;\n // \"1e400\" overflows a double: keep the text rather than lose it to Infinity\n if (NUMBER.test(s) && isFinite(Number(s))) return Number(s);\n const upper = s.toUpperCase();\n return upper === 'TRUE' ? true : upper === 'FALSE' ? false : s;\n}\n\n// Streams the rows of a CSV file (RFC 4180: quoted fields may hold delimiters, line breaks and \"\"),\n// one row at a time. Feed it straight to SheetWriter.addSheet to convert CSV to xlsx.\nexport async function* parseCsv(\n input: ReadableStream<Uint8Array> | string,\n options: CsvOptions = {},\n): AsyncGenerator<CellValue[]> {\n const delimiter = options.delimiter ?? ',';\n if (delimiter.length !== 1 || delimiter === '\"' || delimiter === '\\n' || delimiter === '\\r') {\n throw new Error(`Invalid CSV delimiter ${JSON.stringify(delimiter)}.`);\n }\n const convert = options.convert !== false;\n\n let row: CellValue[] = [];\n let field = '';\n let quoted = false; // the current field started with a quote\n let inQuotes = false;\n let skipLF = false; // the previous character was a \\r ending a row\n let first = true;\n const rows: CellValue[][] = [];\n\n const endField = () => {\n // An empty unquoted field is null in both modes; a quoted \"\" stays an empty string\n row.push(quoted ? field : !convert ? (field === '' ? null : field) : convertField(field));\n field = '';\n quoted = false;\n };\n const endRow = () => {\n // A blank line is an empty row\n if (row.length || field !== '' || quoted) endField();\n rows.push(row);\n row = [];\n };\n\n const feed = (text: string) => {\n if (first && text) {\n if (text.charCodeAt(0) === 0xfeff) text = text.slice(1); // byte order mark\n first = false;\n }\n for (let i = 0; i < text.length; i++) {\n const c = text[i];\n if (skipLF) {\n skipLF = false;\n if (c === '\\n') continue;\n }\n if (inQuotes) {\n if (c === '\"') inQuotes = false;\n else field += c;\n } else if (c === '\"') {\n // A quote right after a quoted field's closing quote is an escaped (\"\") quote\n if (quoted) field += '\"';\n else if (field === '') quoted = true;\n else { field += c; continue; } // a stray quote inside an unquoted field is kept\n inQuotes = true;\n } else if (c === delimiter) endField();\n else if (c === '\\n' || c === '\\r') {\n endRow();\n skipLF = c === '\\r';\n } else field += c;\n }\n };\n\n if (typeof input === 'string') {\n feed(input);\n yield* rows.splice(0);\n } else {\n const reader = input.pipeThrough(new TextDecoderStream() as any as TransformStream<Uint8Array, string>).getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n feed(value);\n yield* rows.splice(0);\n }\n } finally {\n // Stops reading when the caller ends the loop early\n await reader.cancel().catch(() => {});\n }\n }\n if (inQuotes) throw new Error('CSV ends inside a quoted field.');\n if (row.length || field !== '' || quoted) endRow();\n yield* rows.splice(0);\n}\n","// Writer for OpenDocument spreadsheets (.ods). Rows stream into content.xml one at a time.\n// Writes values, formulas, dates, merged cells, column widths, frozen panes, hidden sheets and\n// document properties; styles and the other .xlsx sheet options are left out.\n\nimport { ZipStreamWriter, crc32 } from './zip-stream-writer';\nimport { ODS_MIMETYPE } from './ods';\nimport { colIndex, colLetter, dateToSerial, validateSheetName, escapeXml as escapeText } from './utils';\nimport { FormulaEngine, FormulaError, type FormulaResult } from './formula-engine';\nimport type { CellValue, Row, StyledCell, WorkbookProperties } from './types';\n\nexport interface OdsSheetOptions {\n columnWidths?: number[]; // in characters, as in SheetOptions\n mergeCells?: string[]; // e.g. [\"A1:C1\"]\n freezePanes?: { row?: number; col?: number };\n state?: 'visible' | 'hidden';\n}\n\nexport interface OdsWriterOptions {\n properties?: WorkbookProperties;\n}\n\nconst escapeXml = (val: unknown) => escapeText(String(val));\n\nconst isStyledCell = (v: CellValue | StyledCell): v is StyledCell =>\n v !== null && typeof v === 'object' && !(v instanceof Date);\n\n// Excel syntax to OpenFormula: \"SUM(A1:B2,Sheet2!C3)\" -> \"of:=SUM([.A1:.B2];[$Sheet2.C3])\"\n// Cell references and ranges, then whole columns (C:C) and whole rows (1:3)\nconst REF = /((?:'(?:[^']|'')+'|[A-Za-z_][\\w.]*)!)?(\\$?[A-Za-z]{1,3}\\$?\\d+(?::\\$?[A-Za-z]{1,3}\\$?\\d+)?|\\$?[A-Za-z]{1,3}:\\$?[A-Za-z]{1,3}|\\$?\\d+:\\$?\\d+)(?![\\w(!:])/y;\nexport function toOpenFormula(formula: string): string {\n const f = formula.replace(/^=/, '');\n let out = '';\n for (let i = 0; i < f.length;) {\n const c = f[i];\n if (c === '\"') { // string literal, copied as is\n let j = i + 1;\n while (j < f.length && !(f[j] === '\"' && f[j + 1] !== '\"')) j += f[j] === '\"' ? 2 : 1;\n out += f.slice(i, j + 1);\n i = j + 1;\n continue;\n }\n if (c === ',') { out += ';'; i++; continue; }\n // A reference starts where an identifier could not be continuing\n if (!/[\\w.$]/.test(f[i - 1] ?? '')) {\n REF.lastIndex = i;\n const m = REF.exec(f);\n if (m) {\n const sheet = m[1] ? `$${m[1].slice(0, -1)}` : '';\n out += `[${m[2].split(':').map(part => `${sheet}.${part}`).join(':')}]`;\n i = REF.lastIndex;\n continue;\n }\n }\n out += c;\n i++;\n }\n return `of:=${out}`;\n}\n\n// Paragraphs per line, and runs of spaces as <text:s/>, since ODF collapses whitespace\nfunction textXml(s: string): string {\n return s.split('\\n').map(line => `<text:p>${escapeXml(line)\n .replace(/\\t/g, '<text:tab/>')\n .replace(/^ | {2,}/g, m => m === ' ' ? '<text:s/>' : ` <text:s text:c=\"${m.length - 1}\"/>`)}</text:p>`).join('');\n}\n\n// UTC, like SheetWriter; milliseconds only when there are some\nconst dateValue = (d: Date) => d.toISOString().slice(0, d.getUTCMilliseconds() ? 23 : 19);\nconst hasTime = (d: Date) => d.getTime() % 86400000 !== 0;\n\n// `evaluate` gives the formula's result, or null when it isn't known (streamed rows, errors)\nfunction cellXml(cell: CellValue | StyledCell | undefined, span: string, covered: boolean, evaluate: () => FormulaResult): string {\n if (covered) return '<table:covered-table-cell/>';\n let value = isStyledCell(cell!) ? cell.value : cell;\n const formula = isStyledCell(cell!) && cell.formula ? ` table:formula=\"${escapeXml(toOpenFormula(cell.formula))}\"` : '';\n // A formula without a value gets its result stored, as SheetWriter does, for readers that don't recalculate\n if (formula && value == null) value = evaluate();\n if (value === null || value === undefined || (typeof value === 'number' && !isFinite(value))) {\n return formula || span ? `<table:table-cell${formula}${span}/>` : '<table:table-cell/>';\n }\n if (typeof value === 'number') {\n return `<table:table-cell${formula} office:value-type=\"float\" office:value=\"${value}\"${span}><text:p>${value}</text:p></table:table-cell>`;\n }\n if (typeof value === 'boolean') {\n return `<table:table-cell table:style-name=\"ceBool\"${formula} office:value-type=\"boolean\" office:boolean-value=\"${value}\"${span}><text:p>${value ? 'TRUE' : 'FALSE'}</text:p></table:table-cell>`;\n }\n if (value instanceof Date) {\n const v = dateValue(value);\n const shown = hasTime(value) ? v.replace('T', ' ') : v.slice(0, 10);\n return `<table:table-cell table:style-name=\"${hasTime(value) ? 'ceDateTime' : 'ceDate'}\"${formula} office:value-type=\"date\" office:date-value=\"${v}\"${span}><text:p>${shown}</text:p></table:table-cell>`;\n }\n return `<table:table-cell${formula} office:value-type=\"string\"${span}>${textXml(String(value))}</table:table-cell>`;\n}\n\nconst NS = 'xmlns:office=\"urn:oasis:names:tc:opendocument:xmlns:office:1.0\" xmlns:style=\"urn:oasis:names:tc:opendocument:xmlns:style:1.0\" '\n + 'xmlns:text=\"urn:oasis:names:tc:opendocument:xmlns:text:1.0\" xmlns:table=\"urn:oasis:names:tc:opendocument:xmlns:table:1.0\" '\n + 'xmlns:fo=\"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0\" xmlns:number=\"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0\" '\n + 'xmlns:of=\"urn:oasis:names:tc:opendocument:xmlns:of:1.2\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" '\n + 'xmlns:meta=\"urn:oasis:names:tc:opendocument:xmlns:meta:1.0\" xmlns:config=\"urn:oasis:names:tc:opendocument:xmlns:config:1.0\" '\n // LibreOffice resolves the ooo: prefix in \"ooo:view-settings\"; without it the frozen panes are ignored\n + 'xmlns:ooo=\"http://openoffice.org/2004/office\" office:version=\"1.3\"';\n\ninterface Sheet { name: string; rows: Row[] | AsyncIterable<Row>; options: OdsSheetOptions }\n\nexport class OdsWriter {\n private sheets: Sheet[] = [];\n\n constructor(private readonly writerOptions: OdsWriterOptions = {}) {}\n\n addSheet(name: string, rows: Row[] | AsyncIterable<Row>, options: OdsSheetOptions = {}): this {\n validateSheetName(name, this.sheets.map(s => s.name));\n for (const range of options.mergeCells ?? []) parseRange(range);\n this.sheets.push({ name, rows, options });\n return this;\n }\n\n write(): ReadableStream<Uint8Array> {\n if (this.sheets.length === 0) this.addSheet('Sheet1', []);\n if (this.sheets.every(s => s.options.state === 'hidden')) throw new Error('A workbook needs at least one visible sheet');\n const zip = new ZipStreamWriter();\n const encoder = new TextEncoder();\n const text = (s: string) => new ReadableStream<Uint8Array>({ start(c) { c.enqueue(encoder.encode(s)); c.close(); } });\n\n (async () => {\n try {\n // The mimetype entry comes first and uncompressed, so tools can sniff the type\n const mime = encoder.encode(ODS_MIMETYPE);\n await zip.addCompressedFile('mimetype', new ReadableStream({ start(c) { c.enqueue(mime); c.close(); } }), mime.length, mime.length, crc32(mime), 0);\n await zip.addFile('content.xml', this.contentStream());\n await zip.addFile('styles.xml', text(`<?xml version=\"1.0\" encoding=\"UTF-8\"?><office:document-styles ${NS}><office:styles/></office:document-styles>`));\n await zip.addFile('meta.xml', text(this.metaXml()));\n await zip.addFile('settings.xml', text(this.settingsXml()));\n await zip.addFile('META-INF/manifest.xml', text('<?xml version=\"1.0\" encoding=\"UTF-8\"?>'\n + '<manifest:manifest xmlns:manifest=\"urn:oasis:names:tc:opendocument:xmlns:manifest:1.0\" manifest:version=\"1.3\">'\n + `<manifest:file-entry manifest:full-path=\"/\" manifest:version=\"1.3\" manifest:media-type=\"${ODS_MIMETYPE}\"/>`\n + ['content.xml', 'styles.xml', 'meta.xml', 'settings.xml'].map(p => `<manifest:file-entry manifest:full-path=\"${p}\" manifest:media-type=\"text/xml\"/>`).join('')\n + '</manifest:manifest>'));\n await zip.close();\n } catch (err) {\n zip.error(err);\n }\n })();\n return zip.stream;\n }\n\n private contentStream(): ReadableStream<Uint8Array> {\n const encoder = new TextEncoder();\n const sheets = this.sheets;\n async function* parts(): AsyncGenerator<string> {\n const columnStyles = new Map<number, string>();\n sheets.forEach(s => s.options.columnWidths?.forEach(w => { if (w > 0 && !columnStyles.has(w)) columnStyles.set(w, `co${columnStyles.size + 1}`); }));\n yield `<?xml version=\"1.0\" encoding=\"UTF-8\"?><office:document-content ${NS}><office:automatic-styles>`\n + '<number:date-style style:name=\"NDate\"><number:year number:style=\"long\"/><number:text>-</number:text><number:month number:style=\"long\"/><number:text>-</number:text><number:day number:style=\"long\"/></number:date-style>'\n + '<number:date-style style:name=\"NDateTime\"><number:year number:style=\"long\"/><number:text>-</number:text><number:month number:style=\"long\"/><number:text>-</number:text><number:day number:style=\"long\"/><number:text> </number:text><number:hours number:style=\"long\"/><number:text>:</number:text><number:minutes number:style=\"long\"/><number:text>:</number:text><number:seconds number:style=\"long\"/></number:date-style>'\n + '<number:boolean-style style:name=\"NBool\"><number:boolean/></number:boolean-style>'\n + '<style:style style:name=\"ceBool\" style:family=\"table-cell\" style:data-style-name=\"NBool\"/>'\n + '<style:style style:name=\"ceDate\" style:family=\"table-cell\" style:data-style-name=\"NDate\"/>'\n + '<style:style style:name=\"ceDateTime\" style:family=\"table-cell\" style:data-style-name=\"NDateTime\"/>'\n + '<style:style style:name=\"taVisible\" style:family=\"table\"><style:table-properties table:display=\"true\"/></style:style>'\n + '<style:style style:name=\"taHidden\" style:family=\"table\"><style:table-properties table:display=\"false\"/></style:style>'\n // Excel's width unit is about 7 pixels at 96 dpi, plus 5 pixels of padding\n + [...columnStyles].map(([w, name]) => `<style:style style:name=\"${name}\" style:family=\"table-column\"><style:table-column-properties style:column-width=\"${((w * 7 + 5) / 96).toFixed(4)}in\"/></style:style>`).join('')\n + '</office:automatic-styles><office:body><office:spreadsheet>';\n\n for (const sheet of sheets) {\n yield `<table:table table:name=\"${escapeXml(sheet.name)}\" table:style-name=\"${sheet.options.state === 'hidden' ? 'taHidden' : 'taVisible'}\">`\n + (sheet.options.columnWidths ?? []).map(w => w > 0 ? `<table:table-column table:style-name=\"${columnStyles.get(w)}\"/>` : '<table:table-column/>').join('');\n\n // Merges: spans go on the top-left cell, and the cells they cover are written as covered\n const merges = (sheet.options.mergeCells ?? []).map(parseRange);\n const lastMergeRow = Math.max(-1, ...merges.map(m => m.r2));\n const mergeAt = (r: number, c: number) => merges.find(m => m.r1 === r && m.c1 === c);\n // Formulas resolve against the sheet they live in; streamed rows can't be looked back at\n const engine = new FormulaEngine();\n if (Array.isArray(sheet.rows)) {\n engine.loadData(sheet.rows.map(row => row.map(cell => {\n if (isStyledCell(cell) && cell.formula) return { formula: cell.formula };\n const v = isStyledCell(cell) ? cell.value : cell;\n return v instanceof Date ? dateToSerial(v) : v ?? null;\n })));\n }\n const evaluate = (ref: string) => {\n if (!Array.isArray(sheet.rows)) return null;\n const v = engine.cellValue(ref);\n return v instanceof FormulaError ? v.code : v;\n };\n const covered = (r: number, c: number) => merges.some(m => r >= m.r1 && r <= m.r2 && c >= m.c1 && c <= m.c2 && (r !== m.r1 || c !== m.c1));\n\n let r = 0, batch = '';\n const writeRow = (row: Row) => {\n const width = Math.max(row.length, ...merges.filter(m => r >= m.r1 && r <= m.r2).map(m => m.c2 + 1));\n let xml = '<table:table-row>';\n for (let c = 0; c < width; c++) {\n const m = mergeAt(r, c);\n const span = m ? ` table:number-columns-spanned=\"${m.c2 - m.c1 + 1}\" table:number-rows-spanned=\"${m.r2 - m.r1 + 1}\"` : '';\n xml += cellXml(row[c], span, covered(r, c), () => evaluate(colLetter(c) + (r + 1)));\n }\n r++;\n return xml + (width ? '' : '<table:table-cell/>') + '</table:table-row>';\n };\n for await (const row of sheet.rows) {\n batch += writeRow(row);\n if (batch.length > 1 << 16) { yield batch; batch = ''; }\n }\n while (r <= lastMergeRow) batch += writeRow([]); // merges below the last row still need their cells\n yield batch + '</table:table>';\n }\n yield '</office:spreadsheet></office:body></office:document-content>';\n }\n const it = parts();\n return new ReadableStream<Uint8Array>({\n async pull(controller) {\n const { done, value } = await it.next();\n if (done) controller.close(); else controller.enqueue(encoder.encode(value));\n },\n async cancel() { await it.return(undefined); },\n });\n }\n\n private metaXml(): string {\n const p = this.writerOptions.properties ?? {};\n const el = (tag: string, v?: string) => v ? `<${tag}>${escapeXml(v)}</${tag}>` : '';\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?><office:document-meta ${NS}><office:meta>`\n + '<meta:generator>XlsxFlow</meta:generator>'\n + el('dc:title', p.title) + el('dc:subject', p.subject) + el('meta:initial-creator', p.creator) + el('dc:creator', p.creator)\n + el('meta:keyword', p.keywords) + el('dc:description', p.description)\n + el('meta:creation-date', (p.created ?? new Date()).toISOString().slice(0, 19))\n + '</office:meta></office:document-meta>';\n }\n\n // Frozen panes are view settings: split mode 2 freezes, the positions say where\n private settingsXml(): string {\n const item = (name: string, type: string, value: string | number) => `<config:config-item config:name=\"${name}\" config:type=\"${type}\">${value}</config:config-item>`;\n const tables = this.sheets.filter(s => s.options.freezePanes?.row || s.options.freezePanes?.col).map(s => {\n const rows = s.options.freezePanes!.row ?? 0, cols = s.options.freezePanes!.col ?? 0;\n return `<config:config-item-map-entry config:name=\"${escapeXml(s.name)}\">`\n + item('HorizontalSplitMode', 'short', cols ? 2 : 0) + item('VerticalSplitMode', 'short', rows ? 2 : 0)\n + item('HorizontalSplitPosition', 'int', cols) + item('VerticalSplitPosition', 'int', rows)\n + item('ActiveSplitRange', 'short', 2) + item('PositionLeft', 'int', 0) + item('PositionRight', 'int', cols)\n + item('PositionTop', 'int', 0) + item('PositionBottom', 'int', rows)\n + '</config:config-item-map-entry>';\n }).join('');\n const first = this.sheets.find(s => s.options.state !== 'hidden')!;\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?><office:document-settings ${NS}><office:settings>`\n + '<config:config-item-set config:name=\"ooo:view-settings\"><config:config-item-map-indexed config:name=\"Views\"><config:config-item-map-entry>'\n + item('ViewId', 'string', 'view1') + item('ActiveTable', 'string', escapeXml(first.name))\n + `<config:config-item-map-named config:name=\"Tables\">${tables}</config:config-item-map-named>`\n + '</config:config-item-map-entry></config:config-item-map-indexed></config:config-item-set></office:settings></office:document-settings>';\n }\n}\n\nfunction parseRange(range: string) {\n const m = /^\\$?([A-Za-z]{1,3})\\$?(\\d+):\\$?([A-Za-z]{1,3})\\$?(\\d+)$/.exec(range);\n if (!m) throw new Error(`Invalid merge range \"${range}\"`);\n const [c1, r1, c2, r2] = [colIndex(m[1]), +m[2] - 1, colIndex(m[3]), +m[4] - 1];\n return { r1: Math.min(r1, r2), r2: Math.max(r1, r2), c1: Math.min(c1, c2), c2: Math.max(c1, c2) };\n}\n","export { SheetReader, type ParseOptions, type WorkbookInfo, sheetToJson, streamToCsv, createBlobReader, createFileReader, type RandomAccessReader } from './core/index';\nexport { SheetEditor, type CellEdit } from './core/editor';\nexport { parseCsv, type CsvOptions } from './core/csv';\nexport { SheetWriter, legacyPasswordHash, type WriterOptions } from './core/writer';\nexport { OdsWriter, type OdsSheetOptions, type OdsWriterOptions } from './core/ods-writer';\nexport { createXmlStreamParser } from './core/xml-stream';\nexport { parseWorksheet, type RowData, type SheetMetadata, type SheetComment } from './core/worksheet-parser';\nexport type { CellValue, StyledCell, Row, CellStyle, CellFont, CellFill, GradientFill, CellBorder, CellAlignment, BorderSide, RichTextRun, SheetOptions, SheetImage, CellComment, HighlightStyle, ComparisonOperator, RowOptions, ColumnOptions, SheetProtection, PageSetup, TableOptions, SheetView, WorkbookProperties, DefinedName, ConditionalFormatRule, ConditionalFormat, DataValidation } from './core/types';\nexport { StyleEngine } from './core/style-engine';\nexport { FormulaEngine } from './core/formula-engine';\nexport { ConditionalFormatter } from './core/conditional-formatter';\n\n// Low-level building blocks (used by @xlsxflow/pro)\nexport { readSharedStrings } from './core/index';\nexport { ZipRandomAccessParser } from './core/zip-random-access';\nexport { ZipStreamWriter, crc32 } from './core/zip-stream-writer';\nexport { CfbReader, isCfb, type CfbEntry } from './core/cfb';\nexport { StylePatcher } from './core/style-patcher';\nexport {\n resolveWorkbookParts, partRelationships, recalcOnOpen, mapFormulaRefs, shiftFormula, dateToSerial,\n colIndex, colLetter, encodeXString, decodeXString, checkCellText,\n type WorkbookParts, type Relationship, type RefMapper, type RefRole,\n} from './core/utils';\nexport { anchorXml, drawingPartXml, DRAWING_NS, type Placement } from './core/image';\n\nexport const XlsxFlow = {\n async readFile(filePath: string, options?: import('./core/index').ParseOptions) {\n const { createFileReader } = await import('./core/random-access');\n const { SheetReader } = await import('./core/index');\n const reader = new SheetReader();\n const fileReader = await createFileReader(filePath);\n // Comments, images and .ods content are read after parse() returns, when the handle is closed:\n // those reads open a short-lived handle of their own\n let closed = false;\n const lateRead = async (offset: number, length: number) => {\n const late = await createFileReader(filePath);\n try { return await late.read(offset, length); } finally { await late.close(); }\n };\n try {\n return await reader.parse({\n size: fileReader.size,\n read: (offset, length) => closed ? lateRead(offset, length) : fileReader.read(offset, length),\n stream: (offset, length) => fileReader.stream(offset, length),\n close: async () => {},\n }, options);\n } finally {\n closed = true;\n await fileReader.close();\n }\n }\n};\n"],"names":["corrupt","unescapeXml","MAX_COLUMNS","MAX_ROWS","escapeXml","escapeText","parseRange","isStyledCell"],"mappings":"AAAA,MAAM,SAAS,GAAG,CAAC,MAAK;AACtB,IAAA,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC;AAC9B,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;QAC5B,IAAI,CAAC,GAAG,CAAC;QACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,UAAU,GAAG,CAAC,KAAK,CAAC;AAC1E,QAAA,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;IAChB;AACA,IAAA,OAAO,CAAC;AACV,CAAC,GAAG;AAEE,SAAU,KAAK,CAAC,KAAiB,EAAA;AACrC,IAAA,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,UAAU,MAAM,CAAC;AAC5D;AAEA;AACM,SAAU,WAAW,CAAC,GAAW,EAAE,KAAiB,EAAA;AACxD,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,GAAG,GAAG,SAAS,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;AAC7F,IAAA,OAAO,GAAG;AACZ;AAEA,MAAM,OAAO,GAAG,UAAU;AAE1B;AACA,MAAM,QAAQ,GAAG,CAAC,IAAgB,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC;AAE5E;AACA,SAAS,aAAa,CAAC,KAAa,EAAE,IAAY,EAAA;IAChD,IAAI,KAAK,GAAG,OAAO;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,CAAA,eAAA,CAAiB,CAAC;AACrF;AAYA;MACa,eAAe,CAAA;IAClB,SAAS,GAAc,EAAE;IACzB,MAAM,GAAG,CAAC;AACV,IAAA,gBAAgB;IAChB,OAAO,GAAmB,EAAE;IAC5B,SAAS,GAAG,KAAK;AAClB,IAAA,MAAM;AACL,IAAA,WAAW,GAAG,IAAI,WAAW,EAAE;AAEvC,IAAA,WAAA,CAAY,kBAAkB,GAAG,CAAC,IAAI,EAAE,EAAA;AACtC,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,cAAc,CAAa;AAC3C,YAAA,KAAK,EAAE,CAAC,UAAU,KAAI;AACpB,gBAAA,IAAI,CAAC,gBAAgB,GAAG,UAAU;YACpC,CAAC;AACD,YAAA,IAAI,EAAE,MAAM,IAAI,CAAC,IAAI,EAAE;;YAEvB,MAAM,EAAE,MAAK;AACX,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI;gBACrB,IAAI,CAAC,IAAI,EAAE;YACb;SACD,EAAE,IAAI,yBAAyB,CAAC,EAAE,aAAa,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC1E;;AAGA,IAAA,MAAM,OAAO,CAAC,WAAmB,EAAE,WAAuC,EAAA;QACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC;QACrD,MAAM,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC;AACzC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM;QAC/B,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;;QAGnE,IAAI,gBAAgB,GAAG,CAAC;QACxB,IAAI,GAAG,GAAG,UAAU;AAEpB,QAAA,MAAM,UAAU,GAAG,IAAI,iBAAiB,CAAC,aAAa,CAAmD;QACzG,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE;QAC9C,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE;AAC9C,QAAA,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,EAAE;;;;;QAKrC,MAAM,QAAQ,GAAoB,EAAE;AACpC,QAAA,MAAM,IAAI,GAAG,CAAC,YAAW;AACvB,YAAA,IAAI;gBACF,OAAO,IAAI,EAAE;oBACX,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE;AAC1C,oBAAA,IAAI,IAAI;wBAAE;AACV,oBAAA,MAAM,IAAI,CAAC,WAAW,EAAE;AACxB,oBAAA,gBAAgB,IAAI,KAAK,CAAC,MAAM;AAChC,oBAAA,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC;oBAC7B,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;oBACnC,OAAO,CAAC,KAAK,CAAC,QAAO,CAAC,CAAC,CAAC;AACxB,oBAAA,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AACtB,oBAAA,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC;AAAE,wBAAA,MAAM,QAAQ,CAAC,KAAK,EAAE;gBAClD;AACA,gBAAA,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC3B,gBAAA,MAAM,MAAM,CAAC,KAAK,EAAE;YACtB;YAAE,OAAO,GAAG,EAAE;;AAEZ,gBAAA,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAK,EAAE,CAAC,CAAC;AACvC,gBAAA,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAK,EAAE,CAAC,CAAC;AACvC,gBAAA,MAAM,GAAG;YACX;QACF,CAAC,GAAG;QAEJ,IAAI,cAAc,GAAG,CAAC;AACtB,QAAA,IAAI;YACF,OAAO,IAAI,EAAE;gBACX,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE;AAC3C,gBAAA,IAAI,IAAI;oBAAE;AACV,gBAAA,cAAc,IAAI,KAAK,CAAC,MAAM;AAC9B,gBAAA,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YAC7B;AACA,YAAA,MAAM,IAAI;QACZ;QAAE,OAAO,GAAG,EAAE;AACZ,YAAA,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAK,EAAE,CAAC,CAAC;AACxC,YAAA,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAK,EAAE,CAAC,CAAC;YACvC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAK,EAAE,CAAC,CAAC;AAC1B,YAAA,MAAM,GAAG;QACX;QAEA,GAAG,GAAG,CAAC,GAAG,GAAG,UAAU,MAAM,CAAC;AAC9B,QAAA,aAAa,CAAC,gBAAgB,EAAE,WAAW,CAAC;AAC5C,QAAA,aAAa,CAAC,cAAc,EAAE,WAAW,CAAC;;AAG1C,QAAA,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QAC1C,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC;QACvC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;QAChC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC;QAC3C,QAAQ,CAAC,SAAS,CAAC,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC;AAC9C,QAAA,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAE1B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,cAAc,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACjH;;AAGA,IAAA,MAAM,iBAAiB,CAAC,WAAmB,EAAE,gBAA4C,EAAE,gBAAwB,EAAE,cAAsB,EAAE,GAAW,EAAE,MAAM,GAAG,CAAC,EAAA;QAClK,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC;AACrD,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC;AAChC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM;QAC/B,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC;AAEtG,QAAA,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,EAAE;QAC3C,OAAO,IAAI,EAAE;YACX,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE;AAC3C,YAAA,IAAI,IAAI;gBAAE;AACV,YAAA,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAC7B;QAEA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,cAAc,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC9G;AAEA,IAAA,MAAM,KAAK,GAAA;;AAET,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,MAAM;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC;AACnG,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM;AAEjC,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE;AAClC,YAAA,MAAM,EAAE,GAAG,IAAI,UAAU,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;YACrD,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC;YACpC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC;YACnC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YAC5B,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YAC5B,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC;YACpC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC;YACtC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC;YACnC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC;YAC9C,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC,gBAAgB,EAAE,IAAI,CAAC;AAChD,YAAA,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;YAC/C,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC;YACtC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;AAC1B,YAAA,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,aAAa;AAC1C,QAAA,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC;AAErC,QAAA,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QAC1C,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC;AACvC,QAAA,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC;AAClD,QAAA,QAAQ,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC;QACnD,QAAQ,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;QACpC,QAAQ,CAAC,SAAS,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC;AAC3C,QAAA,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAE1B,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;IAC/B;;AAGA,IAAA,KAAK,CAAC,GAAY,EAAA;AAChB,QAAA,IAAI;AAAE,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC;QAAE;AAAE,QAAA,MAAM,+BAA+B;IACjF;IAEQ,WAAW,CAAC,QAAoB,EAAE,KAAa,EAAE,MAAc,EAAE,GAAW,EAAE,cAAsB,EAAE,gBAAwB,EAAA;AACpI,QAAA,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC;QACnD,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;QACxC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC;QACnC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC;QAC3B,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC;QAC9B,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC;QAC/B,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC;QAC7B,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC;QACxC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC;QAC1C,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;AACzC,QAAA,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;AACxB,QAAA,OAAO,MAAM;IACf;;IAGQ,MAAM,SAAS,CAAC,KAAiB,EAAA;QACvC,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;AACxE,QAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC;AACpC,QAAA,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM;AAC3B,QAAA,MAAM,IAAI,CAAC,WAAW,EAAE;IAC1B;AAEQ,IAAA,MAAM,WAAW,GAAA;AACvB,QAAA,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,EAAE;YACpD,IAAI,IAAI,CAAC,SAAS;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;AACxE,YAAA,MAAM,IAAI,OAAO,CAAO,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChE;QACA,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;IAC1E;IAEQ,IAAI,GAAA;AACV,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;AAC5B,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;QACjB,KAAK,MAAM,OAAO,IAAI,OAAO;AAAE,YAAA,OAAO,EAAE;IAC1C;AACD;;AC3OD;AACA;AAEA,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AAClE,MAAM,YAAY,GAAG,UAAU;AAC/B,MAAM,kBAAkB,GAAG,UAAU;AAQ/B,SAAU,KAAK,CAAC,KAAiB,EAAA;IACrC,OAAO,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACvE;AAEA,MAAMA,SAAO,GAAG,CAAC,GAAW,KAAK,IAAI,KAAK,CAAC,CAAA,uBAAA,EAA0B,GAAG,CAAA,CAAE,CAAC;MAI9D,SAAS,CAAA;AAWS,IAAA,KAAA;AAVZ,IAAA,IAAI;AACJ,IAAA,UAAU;AACV,IAAA,cAAc;AACd,IAAA,UAAU;AACV,IAAA,GAAG;AACZ,IAAA,OAAO;AACP,IAAA,UAAU;AACD,IAAA,GAAG;AACH,IAAA,MAAM,GAAG,IAAI,GAAG,EAAuC;AAExE,IAAA,WAAA,CAA6B,KAAiB,EAAA;QAAjB,IAAA,CAAA,KAAK,GAAL,KAAK;AAChC,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC;AACjF,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG;YAAE,MAAMA,SAAO,CAAC,CAAA,KAAA,EAAQ,KAAK,CAAC,MAAM,CAAA,wCAAA,CAA0C,CAAC;AACrG,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC;AAC1E,QAAA,MAAM,GAAG,GAAG,CAAC,CAAS,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC;AACvD,QAAA,MAAM,GAAG,GAAG,CAAC,CAAS,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC;AAEvD,QAAA,MAAM,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,WAAW,KAAK,CAAC,IAAI,WAAW,KAAK,EAAE;AAAE,YAAA,MAAMA,SAAO,CAAC,CAAA,aAAA,EAAgB,WAAW,CAAA,CAAE,CAAC;AACzF,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,WAAW;AAClC,QAAA,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC;QAC3B,IAAI,SAAS,KAAK,CAAC;AAAE,YAAA,MAAMA,SAAO,CAAC,CAAA,kBAAA,EAAqB,SAAS,CAAA,CAAE,CAAC;AACpE,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,SAAS;AACpC,QAAA,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC;;AAG3B,QAAA,MAAM,aAAa,GAAG,GAAG,CAAC,IAAI,CAAC;AAC/B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QACjE,IAAI,aAAa,GAAG,WAAW;YAAE,MAAMA,SAAO,CAAC,CAAA,EAAG,aAAa,CAAA,kBAAA,EAAqB,KAAK,CAAC,MAAM,CAAA,UAAA,CAAY,CAAC;QAC7G,MAAM,UAAU,GAAa,EAAE;AAC/B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC,EAAE;AAAE,YAAA,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACrG,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC;QACxC,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,UAAU,CAAC,MAAM,GAAG,aAAa,EAAE,IAAI,EAAE,EAAE;AAC3E,YAAA,IAAI,CAAC,GAAG,kBAAkB,IAAI,IAAI,GAAG,WAAW;AAAE,gBAAA,MAAMA,SAAO,CAAC,wBAAwB,CAAC;YACzF,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AAC/B,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,IAAI,UAAU,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC,EAAE;AAAE,gBAAA,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACxG,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,QAAQ,GAAG,CAAC,CAAC;QAC5B;AACA,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC;QACrC,IAAI,CAAC,GAAG,GAAG,IAAI,WAAW,CAAC,aAAa,GAAG,SAAS,CAAC;QACrD,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE;AAAE,gBAAA,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AACnF,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;AACpD,QAAA,IAAI,CAAC,GAAG,GAAG,EAAE;AACb,QAAA,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,IAAI,GAAG,EAAE;AACvD,YAAA,MAAM,CAAC,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,GAAG,EAAE,EAAE,GAAG,CAAC;AACtE,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;YACnD,IAAI,IAAI,GAAG,EAAE;AACb,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,OAAO,EAAE,CAAC,IAAI,CAAC;AAAE,gBAAA,IAAI,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;;AAE1F,YAAA,MAAM,IAAI,GAAG,WAAW,KAAK,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;AACnH,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC;gBACnG,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;QACxE;QACA,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC;AAAE,YAAA,MAAMA,SAAO,CAAC,eAAe,CAAC;AAC3D,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;IAClC;;AAGQ,IAAA,YAAY,CAAC,MAAc,EAAE,IAAI,GAAG,IAAI,CAAC,UAAU,EAAA;QACzD,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU;AACzC,QAAA,IAAI,MAAM,GAAG,kBAAkB,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AAChE,YAAA,MAAMA,SAAO,CAAC,CAAA,OAAA,EAAU,MAAM,CAAA,oBAAA,CAAsB,CAAC;QACvD;AACA,QAAA,OAAO,EAAE;IACX;;IAGQ,IAAI,CAAC,IAAY,EAAE,MAAc,EAAA;AACvC,QAAA,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC;AACpB,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;AAC9B,QAAA,OAAO,KAAK,CAAC,MAAM,EAAE;AACnB,YAAA,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,EAAG;YACvB,IAAI,EAAE,GAAG,kBAAkB;AAAE,gBAAA,SAAS;AACtC,YAAA,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAAE,gBAAA,MAAMA,SAAO,CAAC,sDAAsD,CAAC;AACxG,YAAA,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACZ,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC;YAC3B,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC;gBAAE;AAClC,YAAA,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC,IAAI;AAC5B,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;AACnD,YAAA,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC;gBAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,GAAG,GAAG,CAAC;QAClD;IACF;AAEQ,IAAA,SAAS,CAAC,KAAa,EAAE,IAAY,EAAE,IAAI,GAAG,KAAK,EAAA;AACzD,QAAA,MAAM,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,OAAQ,GAAG,IAAI,CAAC,GAAG;AAC7C,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU;AACzD,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,UAAW,GAAG,IAAI,CAAC,KAAK;QACnD,MAAM,OAAO,GAAa,EAAE;QAC5B,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,KAAK,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE;AACpF,YAAA,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM;AAAE,gBAAA,MAAMA,SAAO,CAAC,CAAA,EAAG,IAAI,GAAG,OAAO,GAAG,EAAE,CAAA,+BAAA,CAAiC,CAAC;AAC9H,YAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACjB;AACA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;AACnD,QAAA,IAAI,IAAI,KAAK,QAAQ,IAAI,KAAK,GAAG,IAAI;YAAE,MAAMA,SAAO,CAAC,CAAA,mBAAA,EAAsB,KAAK,2BAA2B,IAAI,CAAA,CAAE,CAAC;AAClH,QAAA,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC;QACjC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACvB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC;YAC5C,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC;AACtD,YAAA,IAAI,EAAE,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM;AAAE,gBAAA,MAAMA,SAAO,CAAC,CAAA,YAAA,EAAe,CAAC,CAAA,2BAAA,CAA6B,CAAC;AAC1F,YAAA,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;AAClD,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,GAAG;IACZ;IAEA,OAAO,GAAA;QACL,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,SAAS,GAAG,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACxH;AAEA,IAAA,GAAG,CAAC,IAAY,EAAA;AACd,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,KAAK,CAAC;IACxD;;AAGA,IAAA,IAAI,CAAC,IAAY,EAAA;AACf,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAC7C,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC;AAAE,YAAA,OAAO,SAAS;QACxC,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;YAC7B,IAAI,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;gBAAE,MAAMA,SAAO,CAAC,CAAA,OAAA,EAAU,CAAC,CAAC,IAAI,CAAA,wBAAA,CAA0B,CAAC;AACzF,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC;QACxC;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACxB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;YACvD,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;AAC1F,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;AAC7G,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,WAAW,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;AACvD,YAAA,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,UAAU,EAAE,YAAY,CAAC,UAAU,CAAC;AAC9F,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE;AAAE,gBAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;QAC3F;AACA,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC;IAC9C;AACD;;MClJY,qBAAqB,CAAA;AAKZ,IAAA,MAAA;AAJZ,IAAA,OAAO,GAAG,IAAI,GAAG,EAAqB;;AAEtC,IAAA,SAAS,GAAG,IAAI,GAAG,EAAqB;AAEhD,IAAA,WAAA,CAAoB,MAA0B,EAAA;QAA1B,IAAA,CAAA,MAAM,GAAN,MAAM;IAAuB;AAEjD,IAAA,MAAM,qBAAqB,GAAA;AACzB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI;QAC7B,IAAI,IAAI,GAAG,EAAE;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;;AAGnE,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;AAC7C,QAAA,MAAM,WAAW,GAAG,IAAI,GAAG,UAAU;AACrC,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;AAE9D,QAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;;;;AAKlF,QAAA,IAAI,UAAU,GAAG,EAAE;AACnB,QAAA,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YAC5C,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,UAAU;gBAAE;YAChD,IAAI,UAAU,KAAK,EAAE;gBAAE,UAAU,GAAG,CAAC;AACrC,YAAA,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE;gBAC/D,UAAU,GAAG,CAAC;gBACd;YACF;QACF;AAEA,QAAA,IAAI,UAAU,KAAK,EAAE,EAAE;AACrB,YAAA,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,WAAW,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;AAC1F,gBAAA,MAAM,IAAI,KAAK,CAAC,kJAAkJ,CAAC;YACrK;AACA,YAAA,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC;QACjG;AAEA,QAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,CAAC,UAAU,GAAG,EAAE,EAAE,IAAI,CAAC;AAC9D,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,UAAU,GAAG,EAAE,EAAE,IAAI,CAAC;AAC1D,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,UAAU,GAAG,EAAE,EAAE,IAAI,CAAC;AACxD,QAAA,IAAI,YAAY,KAAK,MAAM,IAAI,QAAQ,KAAK,UAAU,IAAI,MAAM,KAAK,UAAU,EAAE;AAC/E,YAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;QACtD;AAEA,QAAA,IAAI,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,UAAU,IAAI,MAAM,GAAG,EAAE,GAAG,YAAY,EAAE;AAC9E,YAAA,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC;QACzG;;AAGA,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;AACzD,QAAA,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;QAEtF,IAAI,MAAM,GAAG,CAAC;AACd,QAAA,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE;AAErC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE;AACrC,YAAA,IAAI,MAAM,GAAG,EAAE,GAAG,QAAQ,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,UAAU,EAAE;AAClF,gBAAA,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAA,CAAE,CAAC;YAC9E;AAEA,YAAA,MAAM,iBAAiB,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC;AAC7D,YAAA,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC;AAC/C,YAAA,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC;AAC1D,YAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC;AAC5D,YAAA,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC;AAC1D,YAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC;AAC5D,YAAA,MAAM,iBAAiB,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC;AAC7D,YAAA,MAAM,iBAAiB,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC;YAE7D,IAAI,MAAM,GAAG,EAAE,GAAG,cAAc,GAAG,QAAQ,CAAC,MAAM,EAAE;AAClD,gBAAA,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA,wBAAA,CAA0B,CAAC;YACvF;AACA,YAAA,MAAM,cAAc,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE,GAAG,cAAc,CAAC;YACnF,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC;AAEnD,YAAA,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACzD,gBAAA,MAAM,IAAI,KAAK,CAAC,gEAAgE,QAAQ,CAAA,CAAE,CAAC;YAC7F;AAEA,YAAA,MAAM,MAAM,GAAG,EAAE,QAAQ,EAAE,iBAAiB,EAAE,GAAG,EAAE,cAAc,EAAE,gBAAgB,EAAE,iBAAiB,EAAE;YACxG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;AAAE,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC;YAEnG,MAAM,IAAI,EAAE,GAAG,cAAc,GAAG,gBAAgB,GAAG,iBAAiB;QACtE;;AAGA,QAAA,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,iBAAiB,GAAG,CAAC,CAAC,iBAAiB,CAAC;AACrG,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;AAC5B,YAAA,IAAI,IAAI,CAAC,iBAAiB,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE;AACrF,gBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,qBAAA,EAAwB,IAAI,CAAC,QAAQ,CAAA,KAAA,EAAQ,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA,QAAA,CAAU,CAAC;YAC9F;QACF;IACF;AAEA,IAAA,GAAG,CAAC,QAAgB,EAAA;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IACjF;IAEA,QAAQ,GAAA;QACN,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACxC;AAEA,IAAA,SAAS,CAAC,QAAgB,EAAA;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;AACvF,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,CAAA,kBAAA,CAAoB,CAAC;AAClE,QAAA,OAAO,MAAM;IACf;;IAGA,MAAM,gBAAgB,CAAC,QAAgB,EAAA;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;AACvC,QAAA,IAAI,MAAM,CAAC,cAAc,KAAK,UAAU,IAAI,MAAM,CAAC,iBAAiB,KAAK,UAAU,EAAE;AACnF,YAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,QAAQ,CAAA,CAAE,CAAC;QAC3D;;AAGA,QAAA,IAAI,MAAM,CAAC,iBAAiB,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AACpD,YAAA,MAAM,IAAI,KAAK,CAAC,sBAAsB,QAAQ,CAAA,gCAAA,CAAkC,CAAC;QACnF;AACA,QAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,EAAE,CAAC;AACzE,QAAA,MAAM,UAAU,GAAG,IAAI,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,UAAU,EAAE,YAAY,CAAC,UAAU,CAAC;QACtG,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,UAAU,EAAE;AAChD,YAAA,MAAM,IAAI,KAAK,CAAC,4CAA4C,QAAQ,CAAA,CAAE,CAAC;QACzE;QACA,MAAM,UAAU,GAAG,MAAM,CAAC,iBAAiB,GAAG,EAAE,GAAG,UAAU,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC;AAClH,QAAA,IAAI,UAAU,GAAG,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AACzD,YAAA,MAAM,IAAI,KAAK,CAAC,sBAAsB,QAAQ,CAAA,iCAAA,CAAmC,CAAC;QACpF;AACA,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9D;IAEA,MAAM,aAAa,CAAC,QAAgB,EAAA;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;AACvC,QAAA,IAAI,MAAM,CAAC,iBAAiB,KAAK,CAAC,IAAI,MAAM,CAAC,iBAAiB,KAAK,CAAC,EAAE;YACpE,MAAM,IAAI,KAAK,CAAC,CAAA,+BAAA,EAAkC,MAAM,CAAC,iBAAiB,CAAA,KAAA,EAAQ,QAAQ,CAAA,CAAE,CAAC;QAC/F;QACA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;QACpD,MAAM,IAAI,GAAG,MAAM,CAAC,iBAAiB,KAAK,CAAC,GAAG;cAC1C,MAAM,CAAC,WAAW,CAAC,IAAI,mBAAmB,CAAC,aAAa,CAAmD,CAAC;;AAGhH,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE;QACjC,IAAI,KAAK,GAAG,CAAC;QACb,IAAI,GAAG,GAAG,UAAU;QACpB,OAAO,IAAI,cAAc,CAAa;YACpC,MAAM,IAAI,CAAC,UAAU,EAAA;AACnB,gBAAA,IAAI;oBACF,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;oBAC7C,IAAI,IAAI,EAAE;;wBAER,IAAI,KAAK,KAAK,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC,GAAG,GAAG,UAAU,MAAM,CAAC,MAAM,MAAM,CAAC,GAAG,EAAE;AAClF,4BAAA,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAA,kBAAA,EAAqB,QAAQ,CAAA,8DAAA,CAAgE,CAAC,CAAC;wBACnI;AACA,wBAAA,OAAO,UAAU,CAAC,KAAK,EAAE;oBAC3B;AACA,oBAAA,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC;;AAE7B,oBAAA,KAAK,IAAI,KAAK,CAAC,MAAM;AACrB,oBAAA,IAAI,KAAK,GAAG,MAAM,CAAC,gBAAgB,EAAE;AACnC,wBAAA,MAAM,QAAQ,CAAC,MAAM,EAAE;AACvB,wBAAA,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAA,kBAAA,EAAqB,QAAQ,CAAA,mCAAA,EAAsC,MAAM,CAAC,gBAAgB,CAAA,MAAA,CAAQ,CAAC,CAAC;oBACxI;AACA,oBAAA,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC;gBAC3B;gBAAE,OAAO,GAAQ,EAAE;AACjB,oBAAA,MAAM,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,OAAO,IAAI,GAAG,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC;AACjE,oBAAA,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAA,EAAA,EAAK,MAAM,CAAA,CAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;gBACzF;YACF,CAAC;AACD,YAAA,MAAM,CAAC,MAAM,EAAA;AACX,gBAAA,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;YAChC;AACD,SAAA,CAAC;IACJ;AACD;;ACxLD,SAAS,SAAS,CAAC,EAAU,EAAE,QAAgB,EAAA;;AAE7C,IAAA,OAAO,EAAE,IAAI,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,GAAG,QAAQ;AAC7D;AAEA,SAASC,aAAW,CAAC,IAAY,EAAA;IAC/B,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE;AAAE,QAAA,OAAO,IAAI;IACzC,OAAO,IAAI,CAAC,OAAO,CAAC,gDAAgD,EAAE,CAAC,KAAK,KAAI;QAC9E,QAAQ,KAAK;AACX,YAAA,KAAK,OAAO,EAAE,OAAO,GAAG;AACxB,YAAA,KAAK,MAAM,EAAE,OAAO,GAAG;AACvB,YAAA,KAAK,MAAM,EAAE,OAAO,GAAG;AACvB,YAAA,KAAK,QAAQ,EAAE,OAAO,GAAG;AACzB,YAAA,KAAK,QAAQ,EAAE,OAAO,GAAG;AACzB,YAAA;AACE,gBAAA,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;AAAE,oBAAA,OAAO,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC;AACtF,gBAAA,OAAO,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC;;AAE/D,IAAA,CAAC,CAAC;AACJ;AAEA;AACA,SAAS,YAAY,CAAC,IAAY,EAAA;IAChC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;AACxE;AAEA,SAAS,cAAc,CAAC,IAAY,EAAA;IAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AAClC,IAAA,OAAO,QAAQ,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI;AAC1D;AAIA;AACA;SACgB,oBAAoB,GAAA;AAClC,IAAA,IAAI,OAAgC;IACpC,IAAI,MAAM,GAAG,EAAE;IACf,IAAI,YAAY,GAAG,IAAI;;;;IAKvB,IAAI,OAAO,GAAY,IAAI;IAC3B,IAAI,QAAQ,GAAG,CAAC;IAChB,IAAI,YAAY,GAAG,EAAE;IAErB,OAAO,IAAI,eAAe,CAAC;QACzB,SAAS,CAAC,KAAK,EAAE,UAAU,EAAA;;YAEzB,OAAO,KAAK,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,UAAU,GAAG,OAAO,CAAC;AAChJ,YAAA,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YACjD,IAAI,YAAY,EAAE;gBAChB,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE;AACnC,oBAAA,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC1B;gBACA,YAAY,GAAG,KAAK;YACtB;YAEA,MAAM,GAAG,GAAe,EAAE;YAC1B,IAAI,KAAK,GAAG,CAAC;YACb,MAAM,OAAO,GAAG,OAAO;YACvB,OAAO,GAAG,IAAI;AAEd,YAAA,OAAO,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE;AAC5B,gBAAA,MAAM,QAAQ,GAAG,CAAC,IAAa,EAAE,IAAY,MAAM,KAAK,KAAK,CAAC,IAAI,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC;AAErH,gBAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC7D,gBAAA,IAAI,QAAQ,KAAK,EAAE,EAAE;;oBAEnB,OAAO,GAAG,MAAM;AAChB,oBAAA,QAAQ,GAAG,MAAM,CAAC,MAAM;oBACxB;gBACF;AAEA,gBAAA,IAAI,QAAQ,GAAG,KAAK,EAAE;oBACpB,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAEA,aAAW,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7F;gBAEA,IAAI,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE;AAC5C,oBAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,GAAG,CAAC,CAAC,IAAI,OAAO,KAAK,OAAO,IAAI,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACtH,oBAAA,IAAI,QAAQ,KAAK,EAAE,EAAE;wBACnB,OAAO,GAAG,OAAO;AACjB,wBAAA,QAAQ,GAAG,MAAM,CAAC,MAAM;AACxB,wBAAA,KAAK,GAAG,QAAQ,CAAC;wBACjB;oBACF;oBACA,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;AACtF,oBAAA,KAAK,GAAG,QAAQ,GAAG,CAAC;oBACpB;gBACF;gBAEA,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE;AACvC,oBAAA,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,SAAS,EAAE,QAAQ,GAAG,CAAC,CAAC,IAAI,OAAO,KAAK,SAAS,IAAI,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5H,oBAAA,IAAI,UAAU,KAAK,EAAE,EAAE;wBACrB,OAAO,GAAG,SAAS;AACnB,wBAAA,QAAQ,GAAG,MAAM,CAAC,MAAM;AACxB,wBAAA,KAAK,GAAG,QAAQ,CAAC;wBACjB;oBACF;AACA,oBAAA,KAAK,GAAG,UAAU,GAAG,CAAC;oBACtB;gBACF;;gBAGA,MAAM,QAAQ,GAAG,KAAK,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK;AACjD,gBAAA,IAAI,MAAM,GAAG,EAAE;gBACf,IAAI,KAAK,GAAG,QAAQ,GAAG,YAAY,GAAG,EAAE;AACxC,gBAAA,KAAK,IAAI,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,GAAG,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC/F,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;oBACjC,IAAI,KAAK,EAAE;AACT,wBAAA,IAAI,IAAI,KAAK,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;4BAAE,KAAK,GAAG,EAAE;oBAC9C;AAAO,yBAAA,IAAI,IAAI,KAAK,EAAE,YAAY,IAAI,KAAK,EAAE,UAAU;AACrD,wBAAA,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;oBACnB;AAAO,yBAAA,IAAI,IAAI,KAAK,EAAE,UAAU;wBAC9B,MAAM,GAAG,CAAC;wBACV;oBACF;gBACF;AAEA,gBAAA,IAAI,MAAM,KAAK,EAAE,EAAE;oBACjB,OAAO,GAAG,KAAK;oBACf,YAAY,GAAG,KAAK;AACpB,oBAAA,QAAQ,GAAG,MAAM,CAAC,MAAM;AACxB,oBAAA,KAAK,GAAG,QAAQ,CAAC;oBACjB;gBACF;AAEA,gBAAA,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,MAAM,CAAC;AACrD,gBAAA,KAAK,GAAG,MAAM,GAAG,CAAC;AAElB,gBAAA,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;oBAC9B,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;gBACpF;AAAO,qBAAA,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AAEhC,qBAAA,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;qBAEhC;;oBAEL,MAAM,aAAa,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC9C,oBAAA,MAAM,OAAO,GAAG,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,UAAU;oBACpE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;oBAC/B,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,KAAK,EAAE,GAAG,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACvE,MAAM,UAAU,GAA2B,EAAE;oBAE7C,IAAI,EAAE,KAAK,EAAE;AAAE,wBAAA,cAAc,CAAC,OAAO,EAAE,EAAE,EAAE,UAAU,CAAC;AAEtD,oBAAA,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AACpD,oBAAA,IAAI,aAAa;wBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;gBAC3D;YACF;AACA,YAAA,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;YAC5B,QAAQ,IAAI,KAAK;YACjB,IAAI,GAAG,CAAC,MAAM;AAAE,gBAAA,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC;QACzC,CAAC;AACD,QAAA,KAAK,CAAC,UAAU,EAAA;AACd,YAAA,MAAM,IAAI,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;;AAEjC,YAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,SAAS,EAAE;gBACzF,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAEA,aAAW,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;YACnF;QACF;AACD,KAAA,CAAC;AACJ;AAEA;AACA,MAAM,OAAO,GAAG,CAAC,CAAS,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI;AAClF,SAAS,cAAc,CAAC,CAAS,EAAE,CAAS,EAAE,UAAkC,EAAA;AAC9E,IAAA,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM;AAClB,IAAA,OAAO,CAAC,GAAG,CAAC,EAAE;QACZ,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAAE,YAAA,CAAC,EAAE;QAClC,MAAM,KAAK,GAAG,CAAC;AACf,QAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG;AAAE,YAAA,CAAC,EAAE;QACnD,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAAE,YAAA,CAAC,EAAE;AAClC,QAAA,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;YAAE,IAAI,CAAC,KAAK,KAAK;AAAE,gBAAA,CAAC,EAAE;YAAE;QAAU;AACpD,QAAA,CAAC,EAAE;QACH,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAAE,YAAA,CAAC,EAAE;AAClC,QAAA,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;AAClB,QAAA,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG;YAAE;AACpC,QAAA,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,GAAG,KAAK,EAAE;YAAE;AAChB,QAAA,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,GAAGA,aAAW,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACtH,QAAA,CAAC,GAAG,GAAG,GAAG,CAAC;IACb;AACF;AAEA;SACgB,qBAAqB,GAAA;AACnC,IAAA,MAAM,OAAO,GAAG,oBAAoB,EAAE;AACtC,IAAA,MAAM,OAAO,GAAG,IAAI,eAAe,CAAuB;QACxD,SAAS,CAAC,KAAK,EAAE,UAAU,EAAA;YACzB,KAAK,MAAM,KAAK,IAAI,KAAK;AAAE,gBAAA,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC;QACtD;AACD,KAAA,CAAC;AACF,IAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE;AACxF;;ACvMO,eAAe,WAAW,CAC/B,WAAwB,EACxB,iBAAyB,CAAC,EAAA;IAE1B,MAAM,OAAO,GAAQ,EAAE;IACvB,IAAI,OAAO,GAAa,EAAE;AAC1B,IAAA,IAAI,IAAI,GAAG,cAAc,CAAC;AAE1B,IAAA,WAAW,MAAM,GAAG,IAAI,WAAW,EAAE;QACnC,IAAI,IAAI,EAAE,GAAG,CAAC;YAAE;AAChB,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACxB,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;AAC9B,YAAA,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;gBAC/B,MAAM,IAAI,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA,CAAE;;gBAEzE,IAAI,IAAI,GAAG,IAAI;AACf,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;AAAE,oBAAA,IAAI,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,CAAC,EAAE;AAC1D,gBAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AACd,gBAAA,OAAO,IAAI;AACb,YAAA,CAAC,CAAC;YACF;QACF;;AAGA,QAAA,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtD,YAAA,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS;gBAAE;AACzD,YAAA,IAAI,IAAI,GAAG,CAAA,MAAA,EAAS,CAAC,GAAG,CAAC,EAAE;AAC3B,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gBAAE,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,EAAE;AACzE,YAAA,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,CAAA,MAAA,EAAS,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA,CAAE,CAAC;AACtE,YAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QACpB;QACA,MAAM,GAAG,GAAQ,EAAE;AACnB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACvC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI;;AAElC,YAAA,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,WAAW;gBAAE,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;;gBACnI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;QAC9B;AACA,QAAA,OAAO,CAAC,IAAI,CAAC,GAAQ,CAAC;IACxB;AAEA,IAAA,OAAO,OAAO;AAChB;AAEA,SAAS,SAAS,CAAC,GAAQ,EAAA;AACzB,IAAA,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS;AAAE,QAAA,OAAO,EAAE;AAChD,IAAA,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;AACvB,IAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;QACtF,OAAO,CAAA,CAAA,EAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA,CAAA,CAAG;IACvC;AACA,IAAA,OAAO,GAAG;AACZ;AAEO,eAAe,WAAW,CAAC,WAAwB,EAAA;IACxD,MAAM,IAAI,GAAa,EAAE;IACzB,IAAI,IAAI,GAAG,CAAC;AACZ,IAAA,WAAW,MAAM,GAAG,IAAI,WAAW,EAAE;;QAEnC,KAAK,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE;AAAE,YAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACjF,QAAA,IAAI,GAAG,GAAG,CAAC,SAAS;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/C;AACA,IAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB;AAEM,SAAU,IAAI,CAAC,GAAW,EAAE,IAAY,EAAA;AAC5C,IAAA,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,CAAA,GAAA,EAAM,IAAI,CAAA,gCAAA,CAAkC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC5E,IAAA,IAAI,CAAC,CAAC;AAAE,QAAA,OAAO,IAAI;AACnB,IAAA,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC;AAEA;AACA,SAAS,aAAa,CAAC,OAAe,EAAE,MAAc,EAAA;AACpD,IAAA,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC;IACtF,MAAM,GAAG,GAAa,EAAE;AACxB,IAAA,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;QACrB,IAAI,CAAC,KAAK,IAAI;YAAE,GAAG,CAAC,GAAG,EAAE;AACpB,aAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7C;AACA,IAAA,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AACtB;AAIA,SAAS,SAAS,CAAC,OAAe,EAAE,OAAe,EAAA;IACjD,MAAM,IAAI,GAAmB,EAAE;AAC/B,IAAA,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,iCAAiC,CAAC,EAAE;QACvE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC;AAClC,QAAA,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM;YAAE;;QAEpB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,KAAK,UAAU;AACvD,QAAA,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IACtH;AACA,IAAA,OAAO,IAAI;AACb;AAEO,MAAM,KAAK,GAAG,CAAC,IAAY,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACxE,MAAM,UAAU,GAAG,CAAC,IAAY,KAAK,CAAA,EAAG,KAAK,CAAC,IAAI,CAAC,CAAA,MAAA,EAAS,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO;AAC/G;AACA,MAAM,MAAM,GAAG,CAAC,IAAoB,EAAE,MAAc,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;AAYrH;AACO,eAAe,oBAAoB,CAAC,QAA2C,EAAA;AACpF,IAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,QAAQ,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;IAC7D,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,EAAE,iBAAiB,CAAC,IAAI,iBAAiB;AAC7E,IAAA,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC;AAChD,IAAA,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;AAErF,IAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB;AACxC,IAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU;AACrC,IAAA,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAAE;QACpE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;AAC9B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC;AACrD,QAAA,MAAM,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,SAAS;QACzE,IAAI,IAAI,IAAI,GAAG;YAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC;AAC3C,QAAA,IAAI,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;AAAE,YAAA,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;IAClE;IACA,OAAO;AACL,QAAA,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW;QAC9C,aAAa,EAAE,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC;KAC9G;AACH;AAEA;AACO,eAAe,iBAAiB,CAAC,QAA2C,EAAE,QAAgB,EAAA;AACnG,IAAA,OAAO,SAAS,CAAC,MAAM,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;AACzE;AAEA;AACO,eAAe,gBAAgB,CAAC,QAA2C,EAAE,SAAiB,EAAA;IACnG,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC;AACzD,IAAA,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1F;AAeA;AACM,SAAU,aAAa,CAAC,CAAS,EAAA;IACrC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE;AAAE,QAAA,OAAO,CAAC;IACpC,OAAO,CAAC,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC1F;AAEA;AACO,MAAMC,aAAW,GAAG,KAAK;AACzB,MAAMC,UAAQ,GAAG,OAAO;AAC/B;AACO,MAAM,aAAa,GAAG,KAAK;AAE5B,SAAU,aAAa,CAAC,CAAS,EAAE,GAAW,EAAA;AAClD,IAAA,IAAI,CAAC,CAAC,MAAM,GAAG,aAAa;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,CAAA,KAAA,EAAQ,GAAG,CAAA,KAAA,EAAQ,CAAC,CAAC,MAAM,CAAA,+BAAA,EAAkC,aAAa,CAAA,CAAA,CAAG,CAAC;AAC5H,IAAA,OAAO,CAAC;AACV;AAEA;AACA;AACM,SAAU,IAAI,CAAC,CAAS,EAAA;IAC5B,MAAM,CAAC,GAAG,qCAAqC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC/D,IAAA,IAAI,CAAC,CAAC;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA,mCAAA,CAAqC,CAAC;AAClF,IAAA,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE;AAC/D;AAEA;AACM,SAAU,QAAQ,CAAC,GAAW,EAAA;IAClC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC;AACpC,IAAA,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE;IACrB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;IACtC,IAAI,GAAG,GAAG,CAAC;AACX,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE;AAAE,QAAA,GAAG,GAAG,GAAG,GAAG,EAAE,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACtF,OAAO,GAAG,GAAG,CAAC;AAChB;AAEA;AACM,SAAU,SAAS,CAAC,KAAa,EAAA;IACrC,IAAI,GAAG,GAAG,EAAE;IACZ,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AAAE,QAAA,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,GAAG;AACjH,IAAA,OAAO,GAAG;AACZ;AAEA;AACA;AACA,MAAM,MAAM,GAAG,sKAAsK;AAQrL,MAAM,YAAY,GAAG,CAAC,MAAc,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;AAEhF;AACA;SACgB,cAAc,CAAC,OAAe,EAAE,MAAiB,EAAE,MAAiB,EAAA;IAClF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC;AAC9D,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AACxC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;AACrB,QAAA,IAAI,OAAO,GAAG,EAAE;AAChB,QAAA,IAAI,SAA6B;QACjC,IAAI,OAAO,GAAG,CAAC;QACf,IAAI,OAAO,GAAG,CAAC;AACf,QAAA,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,GAAG,CAAQ,KAAI;AACzD,YAAA,MAAM,MAAM,GAAW,CAAC,CAAC,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC;AACpC,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,KAAK,MAAM,GAAG,CAAC;AAC5D,YAAA,IAAI,KAAyB;AAC7B,YAAA,IAAI,KAAK;gBAAE,KAAK,GAAG,SAAS;AACvB,iBAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;;gBAE7B,MAAM,KAAK,GAAG,sCAAsC,CAAC,IAAI,CAAC,MAAM,CAAC;gBACjE,KAAK,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,aAAa,KAAK,CAAC,CAAC,CAAC,CAAA,CAAE,GAAG,KAAK,CAAC,CAAC,CAAC;AAC5D,sBAAE,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS;YACpG;AACA,YAAA,MAAM,IAAI,GAAY,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,OAAO,GAAG,QAAQ;;YAE1F,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,OAAe,EAAE,CAAU,KAAI;AACvD,gBAAA,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC;AAClD,gBAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAID,aAAW,IAAI,CAAC,KAAK,KAAK,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAGA,aAAW;AAAE,oBAAA,CAAC,GAAGA,aAAW,GAAG,CAAC;gBACzG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAGA,aAAW,GAAG,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI;AAC5E,YAAA,CAAC;YACD,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,MAAc,EAAE,CAAU,KAAI;AACtD,gBAAA,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC;AACrD,gBAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAGC,UAAQ,IAAI,CAAC,KAAK,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,IAAIA,UAAQ;oBAAE,CAAC,GAAGA,UAAQ;AAC/F,gBAAA,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAIA,UAAQ,GAAG,CAAC,GAAG,IAAI;AACzD,YAAA,CAAC;AACD,YAAA,OAAO,GAAG,MAAM,GAAG,CAAC,CAAC,MAAM;YAC3B,SAAS,GAAG,KAAK;AACjB,YAAA,IAAI,GAAkB;AACtB,YAAA,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;AACtB,gBAAA,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;gBAC1D,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;;gBAExD,MAAM,QAAQ,GAAG,IAAI,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE,GAAG,OAAO,CAAC;AAC5F,gBAAA,OAAO,GAAG,CAAC,IAAI,CAAC;gBAChB,OAAO,GAAG,EAAE;gBACZ,GAAG,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAClE;AAAO,iBAAA,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;AAC7B,gBAAA,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;gBAC9D,GAAG,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,EAAE;YACpH;iBAAO;AACL,gBAAA,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AAChE,gBAAA,GAAG,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAA,EAAG,CAAC,CAAC,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,EAAE,CAAC,CAAA,EAAG,CAAC,EAAE;YAC7E;YACA,OAAO,GAAG,IAAI,OAAO;;QAEvB,CAAC,CAAC,CAAC,OAAO,CAAC,4DAA4D,EAAE,OAAO,CAAC;IACnF;AACA,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AACvB;AAEA;AACA;SACgB,YAAY,CAAC,OAAe,EAAE,IAAY,EAAE,IAAY,EAAA;AACtE,IAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,OAAO;IAClC,OAAO,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;AACpG;AAEA;AACA;AACA;AACM,SAAU,YAAY,CAAC,CAAO,EAAA;IAClC,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,QAAQ;AAChE,IAAA,OAAO,MAAM,IAAI,CAAC,IAAI,MAAM,GAAG,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM;AACzD;AAEA;AACA;AACM,SAAU,aAAa,CAAC,CAAS,EAAA;AACrC,IAAA,OAAO;AACJ,SAAA,OAAO,CAAC,wBAAwB,EAAE,SAAS;AAC3C,SAAA,OAAO,CAAC,6CAA6C,EAAE,CAAC,IAAI,CAAA,EAAA,EAAK,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAA,CAAG,CAAC;AACrI;AAEA;AACO,MAAM,iBAAiB,GAAG,CAAC,CAAO,KAAK,CAAC,CAAC,OAAO,EAAE,GAAG,QAAQ,KAAK,CAAC,GAAG,YAAY,GAAG,qBAAqB;AAEjH;AACA;AACM,SAAU,gBAAgB,CAAC,IAAY,EAAA;IAC3C,MAAM,QAAQ,GAAG;AACd,SAAA,OAAO,CAAC,UAAU,EAAE,EAAE;AACtB,SAAA,OAAO,CAAC,MAAM,EAAE,EAAE;AAClB,SAAA,OAAO,CAAC,QAAQ,EAAE,EAAE;AACpB,SAAA,OAAO,CAAC,gCAAgC,EAAE,EAAE,CAAC,CAAC;AACjD,IAAA,OAAO,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC;AACxE;AAEA;AACA;AACA;AACA;AACO,eAAe,YAAY,CAChC,QAA2C,EAC3C,KAAoB,EACpB,WAAW,GAAG,KAAK,CAAC,WAAW,EAAA;IAE/B,IAAI,EAAE,GAAG,WAAW;AACpB,IAAA,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;AACjC,QAAA,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,oCAAoC,EAAE,CAAC,EAAE,EAAE,CAAS,EAAE,KAAa,EAAE,KAAa,KAChG,CAAA,CAAA,EAAI,CAAC,CAAA,MAAA,EAAS,KAAK,CAAC,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAA,mBAAA,EAAsB,KAAK,CAAA,CAAA,CAAG,CAAC;IAC9F;SAAO;;AAEL,QAAA,MAAM,CAAC,GAAG,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;QACtD,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,8JAA8J,CAAC;QACpL,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAA,2BAAA,CAA6B,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;IAC1E;AACA,IAAA,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;AACnD,IAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;AAC9B,IAAA,MAAM,SAAS,GAAG,CAAC,MAAM,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI;IACxH,IAAI,SAAS,EAAE;AACb,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;QACnB,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,MAAM,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,+DAA+D,EAAE,EAAE,CAAC,CAAC;QAC9H,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC,MAAM,QAAQ,CAAC,qBAAqB,CAAC;AACtE,aAAA,OAAO,CAAC,IAAI,MAAM,CAAC,CAAA,uCAAA,EAA0C,OAAO,CAAA,QAAA,CAAU,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1F;AACA,IAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AAC1B;AAEA;AACM,SAAU,iBAAiB,CAAC,IAAY,EAAE,QAA0B,EAAA;AACxE,IAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,kCAAkC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC5H,QAAA,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,CAAA,wGAAA,CAA0G,CAAC;IACxJ;AACA,IAAA,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE;QAC5B,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,CAAA,EAAA,CAAI,CAAC;IACpG;AACF;AAEA;AACA;AACO,MAAM,iBAAiB,GAAG,2CAA2C;AACrE,MAAMC,WAAS,GAAG,CAAC,GAAW,KACnC,GAAG,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;AACxH,MAAM,QAAQ,GAAG,CAAC,CAAS,KAAK,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC;AAC/E;AACA,MAAM,aAAa,GAAG,CAAC,EAAU,EAAE,CAAS,MAAM,EAAE,IAAI,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACzF,MAAM,WAAW,GAAG,CAAC,CAAS,KACnC,CAAC,CAAC,OAAO,CAAC,sDAAsD,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAClF,GAAG,GAAG,aAAa,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,aAAa,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;AAClF,MAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEpG;AACA;AACA;UACiB,WAAW,CAAC,GAAW,EAAE,KAAa,EAAA;IACrD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,CAAA,UAAA,EAAa,KAAK,CAAA,YAAA,CAAc,EAAE,GAAG,CAAC;IAChE,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE;AAChE,QAAA,MAAM,CAAC,SAAS,GAAG,CAAC;QACpB,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QAC1B,IAAI,CAAC,CAAC,EAAE;AAAE,YAAA,CAAC,EAAE;YAAE;QAAU;AACzB,QAAA,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC;QAC7C,IAAI,EAAE,KAAK,EAAE;YAAE;QACf,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;AACvB,YAAA,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE;AACvG,YAAA,CAAC,GAAG,EAAE,GAAG,CAAC;YACV;QACF;AACA,QAAA,MAAM,KAAK,GAAG,CAAA,EAAA,EAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG;QACvC,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QAClC,IAAI,GAAG,KAAK,EAAE;YAAE;QAChB,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE;AACnI,QAAA,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,MAAM;IACxB;AACF;;AClYA;AACA,MAAM,eAAe,GAAG,CACtB,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;AAClD,IAAA,cAAc,EACd,KAAK,CAAC,OAAO,CAAE,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,GAAG,GAAG,CAAC;AAExC;AACA,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,CAAC;AAEjI,SAAU,gBAAgB,CAAC,QAAgB,EAAA;AAC/C,IAAA,MAAM,MAAM,GAAG,qDAAqD,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;AAC9F,IAAA,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,IAAG;QAC5B,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,CAAA,WAAA,EAAc,IAAI,CAAA,yBAAA,EAA4B,IAAI,CAAA,CAAA,CAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;QACtG,MAAM,GAAG,GAAG,kCAAkC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9G,QAAA,OAAO,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE,GAAG,EAAE;AAC5C,IAAA,CAAC,CAAC;AACJ;AAEA;AACA;AACA,SAAS,SAAS,CAAC,IAAY,EAAE,IAAY,EAAA;AAC3C,IAAA,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;IAC9E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACtD,IAAA,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC;AACrC,IAAA,IAAI,GAAG,KAAK,GAAG,EAAE;AACf,QAAA,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG;QACnB,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC;QACnD,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;QAC7F,CAAC,IAAI,CAAC;IACR;IACA,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI;IACrD,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,KAAI;QAC9C,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;AACf,QAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;AACxG,IAAA,CAAC;AACD,IAAA,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;IAC9D,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5F,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE;AAClH;AAIA;SACgB,aAAa,CAAC,KAAe,EAAE,UAAoB,eAAe,EAAA;IAChF,OAAO,CAAC,IAAG;AACT,QAAA,IAAI,IAAwB;QAC5B,IAAI,CAAC,CAAC,KAAK,CAAC;YAAE,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;AAClE,aAAA,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,SAAS;AAAE,YAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,SAAS;AACjF,aAAA,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,SAAS;AAAE,YAAA,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS;QAC7I,IAAI,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;AAAE,YAAA,OAAO,SAAS;QAC7D,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACnC,QAAA,OAAO,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE;AACnG,IAAA,CAAC;AACH;AAEA;AACM,SAAU,gBAAgB,CAAC,IAAc,EAAE,IAAY,EAAE,CAAyB,EAAE,KAA0C,EAAA;AAClI,IAAA,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,OAAO;IACnD,QAAQ,IAAI;AACV,QAAA,KAAK,GAAG;AAAE,YAAA,IAAI,CAAC,IAAI,GAAG,EAAE;AAAE,YAAA,OAAO,IAAI;AACrC,QAAA,KAAK,GAAG;AAAE,YAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAAE,YAAA,OAAO,IAAI;AACvC,QAAA,KAAK,GAAG;YAAE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,MAAM;AAAE,YAAA,OAAO,IAAI;AAC3D,QAAA,KAAK,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI;AACpD,QAAA,KAAK,MAAM;AAAE,QAAA,KAAK,OAAO;AAAE,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI;AAC5D,QAAA,KAAK,OAAO;YAAE,KAAK,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI;;AAErC,IAAA,OAAO,KAAK;AACd;;AC5EA;AAEA,MAAM,MAAM,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC;AACzI,MAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC;AAM3F,MAAM,KAAK,GAAG,IAAI,GAAG,EAAqB;AAEpC,SAAU,WAAW,CAAC,KAA0D,EAAE,IAAY,EAAE,QAAQ,GAAG,KAAK,EAAA;IACpH,IAAI,KAAK,IAAI,IAAI;AAAE,QAAA,OAAO,EAAE;IAC5B,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,GAAG,MAAM,GAAG,OAAO;IAC/D,IAAI,KAAK,YAAY,IAAI;AAAE,QAAA,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IAC5D,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;IAC1B,IAAI,CAAC,IAAI,EAAE;AACT,QAAA,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI;AAAE,YAAA,KAAK,CAAC,KAAK,EAAE,CAAC;AACtC,QAAA,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACzF;AACA,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS;IACzG,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,QAAA,OAAO,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK;AAC9G,IAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;AAAE,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC;AACjD,IAAA,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC;AAC5E,IAAA,IAAI,CAAC,GAAG;AAAE,QAAA,OAAO,OAAO,CAAC,KAAK,CAAC;AAC/B,IAAA,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,IAAI,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;IACpD,IAAI,GAAG,CAAC,IAAI;QAAE,OAAO,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC;IAC1E,OAAO,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;AAClD;AAEA,SAAS,QAAQ,CAAC,CAAO,EAAE,QAAiB,EAAA;IAC1C,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,KAAK;AAChC,IAAA,IAAI,QAAQ;QAAE,OAAO,IAAI,GAAG,KAAK;AACjC,IAAA,MAAM,CAAC,GAAG,IAAI,GAAG,KAAK;AACtB,IAAA,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5B;AAEA,SAAS,aAAa,CAAC,IAAY,EAAA;IACjC,MAAM,GAAG,GAAa,EAAE;IACxB,IAAI,GAAG,GAAG,EAAE,EAAE,MAAM,GAAG,KAAK,EAAE,OAAO,GAAG,KAAK;AAC7C,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE;AAAE,YAAA,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,GAAG,GAAG,EAAE;YAAE;QAAU;QAC3E,GAAG,IAAI,CAAC;AACR,QAAA,IAAI,MAAM;AAAE,YAAA,MAAM,GAAG,CAAC,KAAK,GAAG;aACzB,IAAI,CAAC,KAAK,GAAG;YAAE,MAAM,GAAG,IAAI;aAC5B,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM;AAAE,YAAA,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;aACnF,IAAI,CAAC,KAAK,GAAG;YAAE,OAAO,GAAG,IAAI;aAC7B,IAAI,CAAC,KAAK,GAAG;YAAE,OAAO,GAAG,KAAK;IACrC;AACA,IAAA,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;IACb,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AACxB;AAEA,SAAS,YAAY,CAAC,CAAS,EAAA;IAC7B,MAAM,IAAI,GAAU,EAAE;AACtB,IAAA,IAAI,IAAkC;AACtC,IAAA,MAAM,GAAG,GAAG,CAAC,CAAS,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;;AAErD,IAAA,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,GAAQ,KAAI;AACrC,QAAA,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACtC,QAAA,IAAI,CAAC;YAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACd,QAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;AAChC,IAAA,CAAC;AACD,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACjC,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE;AACpC,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACb,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;AAC3D,YAAA,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;YACxB,CAAC,GAAG,GAAG;QACT;aAAO,IAAI,CAAC,KAAK,IAAI;YAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AACnC,aAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AAAE,YAAA,CAAC,EAAE;YAAE,GAAG,CAAC,GAAG,CAAC;QAAE;aAChC,IAAI,CAAC,KAAK,GAAG;AAAE,YAAA,CAAC,EAAE;AAClB,aAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AAClB,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;YAChF,CAAC,GAAG,GAAG;YACP,MAAM,CAAC,GAAG,gDAAgD,CAAC,IAAI,CAAC,CAAC,CAAC;AAClE,YAAA,IAAI,CAAC;AAAE,gBAAA,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtB,iBAAA,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;AAAE,gBAAA,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;AAChF,iBAAA,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG;AAAE,gBAAA,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;;QAEtD;AAAO,aAAA,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,SAAS,EAAE;AAAE,YAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;YAAE,CAAC,IAAI,CAAC;QAAE;AACnG,aAAA,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE;AAAE,YAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;YAAE,CAAC,IAAI,CAAC;QAAE;AACjG,aAAA,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAAE,CAAC,IAAI,CAAC;QAAE;AACjG,aAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;YAC7B,IAAI,CAAC,GAAG,CAAC;YACT,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE;AAAE,gBAAA,CAAC,EAAE;YAC1C,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACvD;aAAO,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC;AAAE,YAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AACpG,aAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;AAAE,YAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;aACxD,IAAI,CAAC,KAAK,GAAG;AAAE,YAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;;YAC9C,GAAG,CAAC,CAAC,CAAC;IACb;;IAEA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC;IAChE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AAClB,QAAA,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;AAAE,YAAA,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC5H,IAAA,CAAC,CAAC;IACF,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,EAAE;AACpH;AAEA,SAAS,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAmB,EAAE,CAAS,EAAA;AAChD,IAAA,OAAO,EAAE,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AAChI;AAEA;AACA,SAAS,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAY,EAAE,CAAS,EAAA;AAC3C,IAAA,IAAI,CAAC,CAAC;AAAE,QAAA,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;IAChC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE;QACrB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC;;AAEpG,QAAA,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAClE;AACA,IAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AAAE,QAAA,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC;AACjC,IAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAAE,QAAA,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC;AAClC,IAAA,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC;AAClB;AAEA;AACA,SAAS,KAAK,CAAC,CAAS,EAAA;IACtB,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;AACvD,IAAA,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACjC;AAEA;AACA,SAAS,KAAK,CAAC,CAAS,EAAE,CAAS,EAAA;AACjC,IAAA,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;AACjC,IAAA,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;QAAE,CAAC,GAAG,CAAC;IAAE;AAC9C,IAAA,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;AAC9B,IAAA,IAAI,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAC7B,IAAA,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG;QAAE,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;AACpG,IAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACrF;AAEA,SAAS,OAAO,CAAC,CAAS,EAAA;AACxB,IAAA,IAAI,CAAC,CAAC;AAAE,QAAA,OAAO,GAAG;AAClB,IAAA,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE;IAC7B,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;;IAEtB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE;AACtB,QAAA,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE;YAAE,OAAO,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;IACnE;IACA,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AACtB,IAAA,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG;QAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACpC,IAAA,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;QAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAAE,QAAA,CAAC,EAAE;IAAE;IAC5C,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAClI;AAEA,MAAM,IAAI,GAAG,CAAC,CAAkB,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAE1E;AACA,SAAS,OAAO,CAAC,IAAW,EAAE,GAAa,EAAE,MAAc,EAAE,GAAa,EAAE,KAAK,GAAG,KAAK,EAAA;AACvF,IAAA,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM;AACrB,IAAA,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;QACxC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAAE,YAAA,IAAI,CAAC,CAAC;gBAAE,CAAC,GAAG,CAAC;QAAE;;AAC3E,YAAA,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,GAAG,GAAG,EAAE;IAC3D;AACA,IAAA,IAAI,CAAC,KAAK;QAAE;IACZ,IAAI,CAAC,GAAG,CAAC;AACT,IAAA,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;QACxC,IAAI,CAAC,GAAG,EAAE;AACV,QAAA,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE;YAC1C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,EAAE;AAAE,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AAAE,oBAAA,CAAC,GAAG,GAAG,GAAG,CAAC;AAAE,gBAAA,CAAC,EAAE;YAAE;AACpE,YAAA,CAAC,GAAG,CAAC,GAAG,CAAC;QACX;QACA,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB;AACF;AAEA;AACA,SAAS,OAAO,CAAC,IAAW,EAAE,GAAa,EAAE,IAAY,EAAE,GAAa,EAAA;IACtE,IAAI,QAAQ,GAAG,IAAI;AACnB,IAAA,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;QACxC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG;AAAE,YAAA,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,GAAG,GAAG,EAAE;aAC3E;YAAE,QAAQ,GAAG,KAAK;YAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAAE;IAClD;AACF;AAEA,SAAS,SAAS,CAAC,IAAW,EAAE,CAAS,EAAA;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAChH,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACtD,IAAI,CAAC,GAAG,CAAC,MAAM;AAAE,QAAA,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;IACpC,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM;IAEjE,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;AAC/D,IAAA,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AAAE,QAAA,OAAO,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC;IAEjF,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;AAC9D,IAAA,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM;AACpC,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AAC7E,IAAA,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG;AACnC,IAAA,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,GAAG,CAAC;AAE3F,IAAA,IAAI,CAAC,IAAI,CAAC,EAAE;AACV,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;;QAErC,MAAM,GAAG,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;AACzD,QAAA,MAAM,KAAK,GAAG,CAAC,CAAS,KAAK,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;QACvE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;AACrC,QAAA,IAAI,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;AAC1B,QAAA,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA,EAAG,EAAE,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAA,CAAE,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;AACjF,QAAA,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE;AAAE,YAAA,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;AAAE,YAAA,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;QAAE;QACxG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,CAAC;QAC9B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,CAAC;AAC9B,QAAA,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;AAC9D,QAAA,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC;AACjE,QAAA,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;IACrB;;AAGA,IAAA,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK;IAC5B,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;QACpB,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE;AAClC,QAAA,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,GAAG;AACvC,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AAAE,YAAA,KAAK,EAAE;AAC1C,aAAA,IAAI,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAAE,KAAK,GAAG,IAAI;AAC3D,IAAA,CAAC,CAAC;AACF,IAAA,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;IAC3D,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;IACtC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC;AAChC,IAAA,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AACrB;AAEA,SAAS,QAAQ,CAAC,IAAW,EAAE,GAAa,EAAE,KAAa,EAAE,CAAS,EAAE,GAAa,EAAA;AACnF,IAAA,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC;IACjB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAAE,QAAA,CAAC,EAAE;AAC7B,IAAA,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC;AACjB,IAAA,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAAE,QAAA,CAAC,EAAE;AAC/F,IAAA,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpF,IAAA,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACnD,IAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC;IAE1D,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAS,EAAE,CAAS;AACnE,IAAA,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK;IACnB,IAAI,QAAQ,EAAE;QAAE,CAAC,GAAG,QAAQ;QAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;IAAE;SAChD;QACH,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IACjE;IACA,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE;AAAE,QAAA,KAAK,EAAE;QAAE,CAAC,GAAG,CAAC;IAAE;IAEhD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC;AAC5D,IAAA,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;AACrC,IAAA,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;IACpB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;QACtB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACnB,QAAA,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC;AAC3E,IAAA,CAAC,CAAC;;AAEF,IAAA,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;QAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AAAE,YAAA,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;AACvF,IAAA,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AACrB;AAEA;AACA;AACM,SAAU,YAAY,CAAC,CAAS,EAAE,GAAW,EAAA;IACjD,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACnD,IAAA,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,CAAS,KAAI;AACxC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,GAAG,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;YAAE,CAAC,GAAG,CAAC;YAAE,CAAC,GAAG,CAAC;YAAE,GAAG,GAAG,CAAC;QAAE;AAC/G,IAAA,CAAC;AACD,IAAA,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACnC,IAAI,CAAC,GAAG,CAAC;AACT,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE;QAClC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACvB,QAAA,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;AAC3C,QAAA,IAAI,EAAE,GAAG,GAAG,EAAE;;AAEZ,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,CAAC;AACrC,YAAA,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAAE,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAAE,oBAAA,QAAQ,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;YAC/F;QACF;AACA,QAAA,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;AAChB,QAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACnC,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK;YAAE;QACnB,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjB;AACA,IAAA,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AACf;AAEA;AACA,SAAS,GAAG,CAAC,IAAY,EAAE,QAAiB,EAAA;IAC1C,IAAI,QAAQ,EAAE;AACZ,QAAA,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAChD,OAAO,CAAC,EAAE,CAAC,cAAc,EAAE,EAAE,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC;IACrF;;IAEA,MAAM,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC;IACzB,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;IACvC,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;AACzC,IAAA,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1E,OAAO,CAAC,EAAE,CAAC,cAAc,EAAE,EAAE,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,EAAE,CAAC;AACzE;AAEA,SAAS,OAAO,CAAC,IAAW,EAAE,CAAS,EAAE,QAAiB,EAAA;;AAExD,IAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,IAAI,CAAC;AAChE,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC;IACzC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG;AAChF,IAAA,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,IAAI,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG;AAC/C,IAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,EAAE;AAChF,IAAA,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC;AAC1C,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC;IAC1C,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,CAAS,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAChE,IAAA,MAAM,IAAI,GAAG,CAAC,CAAM,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;AACnE,IAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAG;AAClB,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM;AACpB,QAAA,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;YACrB,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,IAAI,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI;YAC9G,OAAO,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAChC;AACA,QAAA,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM;AAAE,YAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpF,QAAA,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM;YAAE,OAAO,CAAC,CAAC,CAAC;AAC9B,QAAA,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACZ,KAAK,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;AACpD,YAAA,KAAK,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;YAClJ,KAAK,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;YACtG,KAAK,GAAG,EAAE;AAAE,gBAAA,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC;AAAE,gBAAA,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;YAAE;YACpF,KAAK,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AAC9C,YAAA,SAAS,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;;AAE7D,IAAA,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACb;AAEA;AACO,MAAM,gBAAgB,GAAuB;AAClD,IAAA,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC;AAChG,IAAA,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC;IACjG,CAAC,EAAE,EAAE,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,aAAa,CAAC;IAC7F,CAAC,EAAE,EAAE,gBAAgB,CAAC,EAAE,CAAC,EAAE,EAAE,qBAAqB,CAAC,EAAE,CAAC,EAAE,EAAE,qBAAqB,CAAC,EAAE,CAAC,EAAE,EAAE,0BAA0B,CAAC;IAClH,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC;CAC9E;AAED;AACO,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAiB;IACtD,CAAC,CAAC,EAAE,uBAAuB,CAAC,EAAE,CAAC,CAAC,EAAE,4BAA4B,CAAC,EAAE,CAAC,CAAC,EAAE,6BAA6B,CAAC,EAAE,CAAC,CAAC,EAAE,kCAAkC,CAAC;IAC5I,CAAC,EAAE,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,eAAe,CAAC;IACvC,CAAC,EAAE,EAAE,6CAA6C,CAAC,EAAE,CAAC,EAAE,EAAE,sDAAsD,CAAC;IACjH,CAAC,EAAE,EAAE,qDAAqD,CAAC,EAAE,CAAC,EAAE,EAAE,8DAA8D,CAAC;AAClI,CAAA,CAAC;AAEF;AACO,MAAM,mBAAmB,GAAG,CAAC,EAAU,KAC5C,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;SCpVtF,cAAc,CAAC,MAAc,EAAE,SAAkB,KAAK,EAAA;IACpE,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;;AAE7B,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,IAAI,IAAI,QAAQ,CAAC;AAErD,IAAA,IAAI,KAAa;IACjB,IAAI,MAAM,EAAE;;QAEV,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B;SAAO;;;AAGL,QAAA,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;AAAE,YAAA,IAAI,EAAE;QACnC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;IAChC;AAEA,IAAA,OAAO,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,QAAQ,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE;AACjE;AAQA;AACM,SAAU,aAAa,CAAC,GAAW,EAAA;IACvC,MAAM,OAAO,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAC/E,MAAM,GAAG,GAAmB,EAAE;IAC9B,KAAK,MAAM,EAAE,IAAI,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE;AAC5C,QAAA,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,GAAG;YAAE;QACV,IAAI,IAAI,GAAG,EAAE;;QAEb,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC;AAAE,YAAA,IAAI,CAAC,CAAC,IAAI,KAAK,GAAG;AAAE,gBAAA,IAAI,IAAI,CAAC,CAAC,IAAI;AACjF,QAAA,MAAM,OAAO,GAAiB,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE;QAC7E,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;AACtF,QAAA,IAAI,MAAM;AAAE,YAAA,OAAO,CAAC,MAAM,GAAG,MAAM;AACnC,QAAA,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;IACnB;AACA,IAAA,OAAO,GAAG;AACZ;AAYA;MACa,iBAAiB,CAAA;AAMR,IAAA,KAAA;IALpB,IAAI,GAAkB,EAAE;AAChB,IAAA,GAAG;IACH,KAAK,GAAG,KAAK;IACb,MAAM,GAAG,KAAK;AAEtB,IAAA,WAAA,CAAoB,KAAoB,EAAA;QAApB,IAAA,CAAA,KAAK,GAAL,KAAK;IAAkB;IAE3C,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE;AACd,QAAA,IAAI,CAAC,GAAG,GAAG,SAAS;QACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK;IAClC;AAEA,IAAA,KAAK,CAAC,CAAW,EAAA;AACf,QAAA,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc,EAAE;AAC7B,YAAA,IAAI,CAAC,CAAC,IAAI,KAAK,GAAG;gBAAE,IAAI,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE;iBACtC,IAAI,CAAC,IAAI,CAAC,GAAG;gBAAE;AACf,iBAAA,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE;AACzB,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,gBAAA,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE;YACpB;AAAO,iBAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACrB,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAK;gBAC3B,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,IAAG,EAAG,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;oBAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACxG;AAAO,iBAAA,IAAI,CAAC,CAAC,IAAI,KAAK,GAAG;AAAE,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI;QAC/C;AAAO,aAAA,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,EAAE;AAClC,YAAA,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK;AAAE,gBAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AACnC,iBAAA,IAAI,CAAC,CAAC,IAAI,KAAK,GAAG;AAAE,gBAAA,IAAI,CAAC,MAAM,GAAG,KAAK;iBACvC,IAAI,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE;AACnC,gBAAA,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5C,gBAAA,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM;AAAE,oBAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI;gBAC7E,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACxB,gBAAA,IAAI,CAAC,GAAG,GAAG,SAAS;YACtB;QACF;aAAO,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE;YAClC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK;QAC1B;IACF;AACD;MA6BY,WAAW,CAAA;AAEZ,IAAA,SAAA;AACA,IAAA,eAAA;AACA,IAAA,MAAA;AACA,IAAA,QAAA;AAJV,IAAA,WAAA,CACU,SAAkC,EAClC,eAAuC,EACvC,MAAA,GAAsC,YAAY,EAAE,EACpD,QAAA,GAA0C,YAAY,EAAE,EAAA;QAHxD,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,eAAe,GAAf,eAAe;QACf,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,QAAQ,GAAR,QAAQ;IACf;IAEH,CAAC,MAAM,CAAC,aAAa,CAAC,GAAA;QACpB,OAAO,IAAI,CAAC,SAAS;IACvB;AAEA,IAAA,MAAM,WAAW,GAAA;QACf,OAAO,IAAI,CAAC,eAAe;IAC7B;;IAGA,SAAS,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE;IACtB;;IAGA,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;IACxB;AACD;AAED;AACA,SAAS,WAAW,CAAC,IAAY,EAAA;AAC/B,IAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;AACrB,IAAA,MAAM,KAAK,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,YAAY;AAChG,IAAA,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;AACzB,IAAA,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC,WAAW,EAAE;AACzD;AAEM,SAAU,cAAc,CAC5B,cAAqD,EACrD,aAAkC,EAClC,MAA2B,EAC3B,MAAA,GAAkB,KAAK,EACvB,UAA4B,EAAE,EAAA;AAE9B,IAAA,IAAI,WAAwC;AAC5C,IAAA,IAAI,UAA6B;IACjC,MAAM,eAAe,GAAG,IAAI,OAAO,CAAgB,CAAC,GAAG,EAAE,GAAG,KAAI;QAC9D,WAAW,GAAG,GAAG;QACjB,UAAU,GAAG,GAAG;AAClB,IAAA,CAAC,CAAC;;;IAGF,eAAe,CAAC,KAAK,CAAC,MAAK,EAAE,CAAC,CAAC;IAC/B,MAAM,WAAW,GAAa,EAAE;IAChC,MAAM,UAAU,GAAa,EAAE;IAC/B,MAAM,cAAc,GAAG,IAAI,UAAU,CAACF,aAAW,GAAG,CAAC,CAAC,CAAC;IACvD,IAAI,OAAO,GAAG,CAAC;IACf,MAAM,UAAU,GAAgC,EAAE;IAClD,IAAI,WAAW,GAAiC,SAAS;IAEzD,gBAAgB,YAAY,GAAA;AAC1B,QAAA,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,EAAE;QAEzC,IAAI,UAAU,GAAgB,EAAE;QAChC,IAAI,eAAe,GAAkB,IAAI;QACzC,IAAI,cAAc,GAAkB,IAAI;QACxC,IAAI,gBAAgB,GAAkB,IAAI;QAC1C,IAAI,KAAK,GAAG,KAAK;QACjB,IAAI,MAAM,GAAG,KAAK;QAClB,IAAI,OAAO,GAAG,KAAK;QACnB,IAAI,SAAS,GAAG,KAAK;QACrB,IAAI,UAAU,GAAG,KAAK;QACtB,IAAI,cAAc,GAAG,EAAE;QACvB,IAAI,gBAAgB,GAAkB,IAAI;QAC1C,IAAI,iBAAiB,GAAkB,IAAI;QAC3C,IAAI,UAAU,GAAG,KAAK;AACtB,QAAA,IAAI,WAA+C;AACnD,QAAA,IAAI,SAAgD;AACpD,QAAA,IAAI,WAAsD;AAC1D,QAAA,IAAI,YAAgD;AACpD,QAAA,IAAI,SAA2C;QAC/C,IAAI,SAA6B,CAAC;AAClC,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,SAAS;QAEnF,IAAI,SAAS,GAAG,CAAC;;AAGjB,QAAA,MAAM,cAAc,GAAG,IAAI,GAAG,EAAyD;QAEvF,IAAI,gBAAgB,GAAG,CAAC;AACxB,QAAA,IAAI,eAAe,GAAG,KAAK,EAAE,eAAe,GAAG,KAAK;QACpD,IAAI,eAAe,GAAG,CAAC;QACvB,IAAI,cAAc,GAAG,CAAC;AAEtB,QAAA,IAAI;YACF,OAAO,IAAI,EAAE;gBACX,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE;AAC3C,gBAAA,IAAI,IAAI;oBAAE;gBAEV,KAAK,MAAM,KAAK,KAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,GAAiB;oBAC1E,IAAI,IAAI,IAAI,MAAM;AAAE,wBAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AACrC,oBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE;AACjC,wBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE;AACrC,4BAAA,SAAS,EAAE;wBACb;AACA,wBAAA,IAAI,SAAS,GAAG,CAAC,EAAE;AACjB,4BAAA,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE;;4BAE/B;4BACA;wBACF;AAEA,wBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;4BAAE,eAAe,GAAG,IAAI;AACtD,wBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE;4BACxB,KAAK,GAAG,IAAI;4BACZ,UAAU,GAAG,EAAE;4BACf,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,YAAY,GAAG,SAAS;4BAChE,SAAS,GAAG,SAAS;4BACrB,eAAe,GAAG,CAAC;;4BAEnB,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;4BACvC,gBAAgB,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,gBAAgB,GAAG,CAAC;AAC3E,4BAAA,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,MAAM,EAAE;AAC/E,gCAAA,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC;4BACnC;wBACF;AAAO,6BAAA,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE;AAC/B,4BAAA,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,MAAM,EAAE;;gCAE/E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;gCAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAACA,aAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;gCACpF,IAAI,GAAG,IAAI,GAAG;oCAAE,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC;4BACtD;wBACF;AAAO,6BAAA,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,EAAE;4BAC7B,MAAM,GAAG,IAAI;4BACb,eAAe,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI;4BAC/C,cAAc,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI;4BACnF,gBAAgB,GAAG,IAAI;4BACvB,UAAU,GAAG,KAAK;4BAClB,IAAI,EAAE,KAAK,EAAE;4BAEb,MAAM,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;AAC/B,4BAAA,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACnC,4BAAA,cAAc,GAAG,MAAM,IAAI,CAAC,GAAG,MAAM,GAAG,eAAe;AACvD,4BAAA,IAAI,cAAc,IAAIA,aAAW,EAAE;AACjC,gCAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA,+BAAA,CAAiC,CAAC;4BAChF;;AAEA,4BAAA,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC;4BAC1D,IAAI,OAAO,IAAI,OAAO,CAAC,eAAe,IAAI,QAAQ,CAAC,EAAE;gCACnD,MAAM,IAAI,KAAK,CAAC,CAAA,2CAAA,EAA8C,OAAO,CAAC,eAAe,CAAA,oCAAA,CAAsC,CAAC;4BAC9H;AACA,4BAAA,OAAO,UAAU,CAAC,MAAM,GAAG,cAAc;AAAE,gCAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;wBAClE;AAAO,6BAAA,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE;AAC/B,4BAAA,UAAU,GAAG,IAAI,CAAC;wBACpB;AAAO,6BAAA,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE;4BACpE,OAAO,GAAG,IAAI;4BACd,IAAI,gBAAgB,KAAK,IAAI;gCAAE,gBAAgB,GAAG,EAAE;wBACtD;AAAO,6BAAA,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,EAAE;4BAC7B,SAAS,GAAG,IAAI;4BAChB,UAAU,GAAG,IAAI;4BACjB,cAAc,GAAG,EAAE;4BACnB,gBAAgB,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI;4BACjD,iBAAiB,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI;wBACrD;AAAO,6BAAA,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE;AACrC,4BAAA,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,UAAU;AACvD,4BAAA,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS;AACjE,4BAAA,MAAM,SAAS,GAAG,MAAM,IAAI,QAAQ,GAAG,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE,GAAG,MAAM,IAAI,QAAQ,GAAG,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE,GAAG,EAAE;4BACzG,IAAI,GAAG,IAAI,SAAS;gCAAE,UAAU,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;wBACnG;AAAO,6BAAA,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE;AACrC,4BAAA,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;gCAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;wBACxE;AAAO,6BAAA,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;;AAEhC,4BAAA,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,aAAa,EAAE;AACzF,gCAAA,WAAW,GAAG;AACZ,oCAAA,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;AACpD,oCAAA,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;oCACpD,WAAW,EAAE,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,EAAE;oCAClD,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI;iCAC/C;4BACH;wBACF;oBACF;AAAO,yBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;wBAChC,IAAI,SAAS,GAAG,CAAC;4BAAE;wBACnB,IAAI,OAAO,EAAE;4BACX,gBAAgB,GAAG,CAAC,gBAAgB,IAAI,EAAE,IAAI,KAAK,CAAC,KAAK;wBAC3D;6BAAO,IAAI,SAAS,EAAE;AACpB,4BAAA,cAAc,IAAI,KAAK,CAAC,KAAK;wBAC/B;oBACF;AAAO,yBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE;AACtC,wBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE;AACrC,4BAAA,SAAS,EAAE;4BACX;wBACF;wBACA,IAAI,SAAS,GAAG,CAAC;4BAAE;AAEnB,wBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;4BAAE,eAAe,GAAG,IAAI;AACtD,wBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE;4BACxB,MAAM,GAAG,GAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,EAAE;AACvE,4BAAA,IAAI,WAAW;AAAE,gCAAA,GAAG,CAAC,QAAQ,GAAG,WAAW;AAC3C,4BAAA,IAAI,SAAS;AAAE,gCAAA,GAAG,CAAC,MAAM,GAAG,SAAS;AACrC,4BAAA,IAAI,WAAW;AAAE,gCAAA,GAAG,CAAC,QAAQ,GAAG,WAAW;AAC3C,4BAAA,IAAI,YAAY;AAAE,gCAAA,GAAG,CAAC,SAAS,GAAG,YAAY;AAC9C,4BAAA,IAAI,SAAS;AAAE,gCAAA,GAAG,CAAC,MAAM,GAAG,SAAS;AACrC,4BAAA,MAAM,GAAG;4BACT,KAAK,GAAG,KAAK;wBACf;AAAO,6BAAA,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,EAAE;4BAC7B,IAAI,aAAa,GAAc,IAAI;;;;;AAOnC,4BAAA,IAAI,gBAAgB,KAAK,IAAI,EAAE;gCAC7B,IAAI,eAAe,KAAK,WAAW,IAAI,eAAe,KAAK,KAAK,EAAE;;AAEhE,oCAAA,aAAa,GAAG,aAAa,CAAC,gBAAgB,CAAC;gCACjD;AAAO,qCAAA,IAAI,gBAAgB,KAAK,EAAE,EAAE;;oCAElC,aAAa,GAAG,IAAI;gCACtB;AAAO,qCAAA,IAAI,eAAe,KAAK,GAAG,EAAE;oCAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,gBAAgB,EAAE,EAAE,CAAC;;oCAE5C,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI;gCAClD;AAAO,qCAAA,IAAI,eAAe,KAAK,GAAG,EAAE;oCAClC,aAAa,GAAG,gBAAgB,KAAK,GAAG,IAAI,gBAAgB,KAAK,MAAM;gCACzE;AAAO,qCAAA,IAAI,eAAe,KAAK,GAAG,EAAE;oCAClC,aAAa,GAAG,gBAAgB;oCAChC,IAAI,OAAO,CAAC,MAAM;wCAAE,CAAC,SAAS,KAAK,EAAE,EAAE,cAAc,CAAC,GAAG,IAAI;gCAC/D;qCAAO;AACL,oCAAA,MAAM,GAAG,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACpC,oCAAA,MAAM,GAAG,GAAG,eAAe,KAAK,GAAG,GAAG,WAAW,CAAC,gBAAgB,CAAC,GAAG,SAAS;oCAC/E,IAAI,GAAG,EAAE;;wCAEP,SAAS,GAAG,YAAY,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC;wCAC7D,aAAa,GAAG,GAAG;oCACrB;AAAO,yCAAA,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;wCACrB,aAAa,GAAG,gBAAgB;oCAClC;AAAO,yCAAA,IAAI,cAAc,KAAK,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,EAAE,EAAE;wCACvE,SAAS,GAAG,GAAG;AACf,wCAAA,aAAa,GAAG,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC;oCAC7C;yCAAO;AACL,wCAAA,aAAa,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;oCACtC;gCACF;4BACF;AAEA,4BAAA,IAAI,OAAO,CAAC,QAAQ,IAAI,UAAU,EAAE;AAClC,gCAAA,IAAI,OAAO,GAAuB,cAAc,GAAG,aAAa,CAAC,cAAc,CAAC,GAAG,SAAS;AAC5F,gCAAA,IAAI,CAAC,OAAO,IAAI,gBAAgB,KAAK,IAAI,EAAE;;oCAEzC,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,gBAAgB,CAAC;AACnD,oCAAA,IAAI,MAAM;AAAE,wCAAA,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC;gCAChH;AACA,gCAAA,IAAI,OAAO;oCAAE,CAAC,WAAW,KAAK,EAAE,EAAE,cAAc,CAAC,GAAG,OAAO;4BAC7D;4BACA,IAAI,IAAI,EAAE;AACR,gCAAA,MAAM,QAAQ,GAAG,eAAe,KAAK,GAAG,IAAI;AAC1C,sCAAE,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,QAAQ,CAAC,gBAAgB,EAAE,EAAE,CAAC;AAC5D,sCAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,GAAG,SAAS;AAC5C,gCAAA,IAAI,QAAQ;oCAAE,CAAC,WAAW,KAAK,EAAE,EAAE,cAAc,CAAC,GAAG,QAAQ;4BAC/D;4BACA,IAAI,OAAO,CAAC,OAAO,IAAI,aAAa,KAAK,IAAI,EAAE;AAC7C,gCAAA,MAAM,IAAI,GAAG,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,SAAS;AAClF,gCAAA,CAAC,YAAY,KAAK,EAAE,EAAE,cAAc,CAAC,GAAG,eAAe,KAAK,GAAG,GAAG,MAAM,CAAC,aAAa;AACpF,sCAAE,WAAW,CAAC,SAAS,IAAI,aAAa,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,CAAC;4BACxE;4BACA,SAAS,GAAG,SAAS;4BACrB,IAAI,OAAO,CAAC,UAAU,IAAI,cAAc,KAAK,IAAI,EAAE;gCACjD,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC;AAChD,gCAAA,IAAI,KAAK;oCAAE,CAAC,SAAS,KAAK,EAAE,EAAE,cAAc,CAAC,GAAG,KAAK;4BACvD;;AAGA,4BAAA,UAAU,CAAC,cAAc,CAAC,GAAG,aAAa;AAC1C,4BAAA,eAAe,GAAG,cAAc,GAAG,CAAC;4BACpC,MAAM,GAAG,KAAK;4BACd,eAAe,GAAG,IAAI;4BACtB,cAAc,GAAG,IAAI;4BACrB,gBAAgB,GAAG,IAAI;wBACzB;AAAO,6BAAA,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE;4BAC/B,UAAU,GAAG,KAAK;wBACpB;AAAO,6BAAA,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,EAAE;4BACnD,OAAO,GAAG,KAAK;wBACjB;AAAO,6BAAA,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,EAAE;4BAC7B,SAAS,GAAG,KAAK;4BACjB,IAAI,gBAAgB,KAAK,IAAI,IAAI,iBAAiB,KAAK,IAAI,IAAI,cAAc,EAAE;gCAC7E,cAAc,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,aAAa,CAAC,cAAc,CAAC,EAAE,GAAG,EAAE,gBAAgB,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC;4BAC9H;wBACF;oBACF;gBACF;YACF;;AAEA,YAAA,IAAI,KAAK,IAAI,MAAM,IAAI,eAAe,IAAI,CAAC,eAAe;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC;YAChJ,MAAM,UAAU,GAAa,EAAE;YAC/B,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,KAAI,EAAG,IAAI,MAAM;gBAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1E,YAAA,WAAW,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;QAC/E;QAAE,OAAO,CAAC,EAAE;YACV,UAAU,CAAC,CAAC,CAAC;AACb,YAAA,MAAM,CAAC;QACT;gBAAU;YACR,MAAM,CAAC,WAAW,EAAE;QACtB;IACF;AAEA,IAAA,OAAO,IAAI,WAAW,CAAC,YAAY,EAAE,EAAE,eAAe,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC;AAC3F;;AC/aA,MAAM,UAAU,GAAG,IAAI;AAIvB;AACM,SAAU,SAAS,CAAC,CAAa,EAAA;AACrC,IAAA,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC;;AAE1B,IAAA,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,CAAA,IAAA,EAAO,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAA,mCAAA,CAAqC,CAAC;AAC7H,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,UAAU,CAAC,CAAa,EAAA;IAC/B,MAAM,IAAI,GAAG,CAAC,CAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,CAAC,CAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;AAChG,IAAA,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;AACpE,QAAA,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE;IAC1D;IACA,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;AACnD,QAAA,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;IAC9E;AACA,IAAA,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;;AAElC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG;AACjC,YAAA,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;AAAE,gBAAA,CAAC,EAAE;gBAAE;YAAU;YACpC,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACvB,YAAA,IAAI,MAAM,KAAK,IAAI,EAAE;AAAE,gBAAA,CAAC,EAAE;gBAAE;YAAU;YACtC,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,EAAE;gBAC7F,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;YACjE;YACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACtB;AACA,QAAA,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC;IACpD;AACA,IAAA,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC;AAC/E;AAEA;AACA;AACA;AACO,eAAe,eAAe,CACnC,QAA2C,EAC3C,SAA4D,EAC5D,SAAiB,EAAA;IAEjB,MAAM,MAAM,GAAiB,EAAE;AAC/B,IAAA,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkC;IACvD,KAAK,MAAM,GAAG,IAAI,MAAM,iBAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE;AAC9D,QAAA,IAAI,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;YAAE;QACpD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,iBAAiB,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACxH,QAAA,KAAK,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,WAAW,CAAC,GAAG,EAAE,6BAA6B,CAAC,EAAE;AAC3F,YAAA,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK;AAC1D,YAAA,MAAM,KAAK,GAAG,GAAG,IAAI,kDAAkD,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACtF,MAAM,IAAI,GAAG,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACxC,YAAA,IAAI,CAAC,IAAI;gBAAE;AACX,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;YAC5D,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,YAAA,IAAI,CAAC,IAAI;gBAAE;AAEX,YAAA,MAAM,GAAG,GAAG,CAAC,GAAW,KAAI;gBAC1B,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,CAAA,WAAA,EAAc,GAAG,CAAA,yBAAA,EAA4B,GAAG,CAAA,CAAA,CAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;AACjG,gBAAA,MAAM,GAAG,GAAG,CAAC,IAAY,KAAK,QAAQ,CAAC,IAAI,MAAM,CAAC,cAAc,IAAI,CAAA,UAAA,CAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;gBAC1G,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE;AACpF,YAAA,CAAC;AACD,YAAA,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC;AACxB,YAAA,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;AAC/C,YAAA,MAAM,KAAK,GAAG,GAAG,IAAI,0CAA0C,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9E,YAAA,MAAM,OAAO,GAAG,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,SAAS;AACtD,YAAA,IAAI,KAAiB;AACrB,YAAA,IAAI,IAAI,KAAK,eAAe,EAAE;;AAE5B,gBAAA,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;gBACpB,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE;gBAC/G,KAAK,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA,EAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAA,CAAE,EAAE;YACtE;iBAAO;gBACL,MAAM,GAAG,GAAG,qDAAqD,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC9E,KAAK,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE;YAC9H;AACA,YAAA,IAAI,OAAO;AAAE,gBAAA,KAAK,CAAC,OAAO,GAAG,OAAO;AACpC,YAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QACpB;IACF;AACA,IAAA,OAAO,MAAM;AACf;AAIA,MAAM,OAAO,GAAG,CAAC,GAAW,KAAI;IAC9B,MAAM,CAAC,GAAG,8BAA8B,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AACzD,IAAA,MAAM,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE;AAC1E,IAAA,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,IAAIA,aAAW,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,IAAIC,UAAQ;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,CAAA,EAAA,CAAI,CAAC;AACjH,IAAA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE;AACrB,CAAC;AACD,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE,GAAG,EAAE,GAAG,EAAgC,KACrE,CAAA,KAAA,EAAQ,GAAG,CAAA,UAAA,EAAa,GAAG,gDAAgD,GAAG,CAAA,0CAAA,EAA6C,GAAG,CAAA,CAAA,CAAG;AAK5H,MAAM,UAAU,GAAG,kFAAkF;IAC1G,kEAAkE;AAClE,IAAA;AAEF;AACA;AACA;AACM,SAAU,SAAS,CAAC,KAAgB,EAAE,OAA0C,EAAE,IAAY,EAAE,KAAK,GAAG,EAAE,EAAA;AAC9G,IAAA,IAAI,CAAC,KAAK,IAAI,OAAQ,KAAa,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAQ,KAAa,CAAC,EAAE,KAAK,QAAQ,EAAE;AAC/F,QAAA,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC;IACpF;AACA,IAAA,IAAI,OAAO,IAAI,KAAK,EAAE;AACpB,QAAA,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;AAChD,QAAA,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC;;AAExC,QAAA,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE;AAC1E,QAAA,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAChF,QAAA,OAAO,sCAAsC,KAAK,CAAA,CAAA,EAAI,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA,EAAG,IAAI,uCAAuC;IAC/I;IACA,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,OAAO;IACvC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;IACtE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC;IAC5C,IAAI,EAAE,KAAK,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE;QACrE,MAAM,IAAI,KAAK,CAAC,CAAA,aAAA,EAAgB,KAAK,CAAC,KAAK,IAAI,EAAE,CAAA,CAAA,EAAI,KAAK,CAAC,MAAM,IAAI,EAAE,CAAA,IAAA,EAAO,KAAK,CAAC,EAAE,CAAA,4CAAA,CAA8C,CAAC;IACvI;AACA,IAAA,OAAO,CAAA,kBAAA,EAAqB,KAAK,CAAA,CAAA,EAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,gBAAgB,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,CAAA,MAAA,EAAS,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,CAAA,GAAA,EAAM,IAAI,uCAAuC;AAC/M;AAEO,MAAM,cAAc,GAAG,CAAC,OAAe,KAC5C,CAAA,mEAAA,EAAsE,UAAU,CAAA,CAAA,EAAI,OAAO;AAE7F;SACgB,UAAU,CAAC,MAAoB,EAAE,KAAkB,EAAE,IAAc,EAAA;IACjF,OAAO,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAClE,CAAA,qCAAA,EAAwC,CAAC,GAAG,CAAC,CAAA,gBAAA,EAAmB,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,GAAG,WAAWC,WAAS,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG,EAAE,CAAA,EAAA,CAAI;QACpI,CAAA,2EAAA,CAA6E;AAC7E,QAAA,CAAA,+BAAA,EAAkC,IAAI,CAAC,CAAC,CAAC,CAAA,sDAAA,CAAwD;QACjG,CAAA,8EAAA,CAAgF,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAChG;;AC7IA;AACA;AACA;AAQA,MAAM,OAAO,GAAG,CAAC,GAAW,KAAK,IAAI,KAAK,CAAC,CAAA,mBAAA,EAAsB,GAAG,CAAA,CAAE,CAAC;AAEvE,MAAM,MAAM,GAA2B;AACrC,IAAA,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe;CACpI;AAED;AACA,SAAS,MAAM,CAAC,KAAiB,EAAA;IAC/B,IAAI,CAAC,GAAG,EAAE;AACV,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI;AAAE,QAAA,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;AACrG,IAAA,OAAO,CAAC;AACV;AACA,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,UAAU,CAAC;AACzC,MAAM,KAAK,GAAG,CAAC,KAAiB,EAAE,IAAa,KAAK,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;AAE9F,MAAM,GAAG,GAAG,CAAC,CAAa,EAAE,CAAS,KAAI;AACvC,IAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM;AAAE,QAAA,MAAM,OAAO,CAAC,qBAAqB,CAAC;AAC1D,IAAA,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AACD,MAAM,GAAG,GAAG,CAAC,CAAa,EAAE,CAAS,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC;AACnF,MAAM,GAAG,GAAG,CAAC,CAAa,EAAE,CAAS,KAAI;AACvC,IAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM;AAAE,QAAA,MAAM,OAAO,CAAC,qBAAqB,CAAC;IAC1D,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC;AACxE,CAAC;AAED;AACA,SAAS,QAAQ,CAAC,CAAa,EAAE,CAAS,EAAE,WAAkB,EAAA;IAC5D,MAAM,GAAG,GAAG,WAAW,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AAChD,IAAA,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;AAC3C,IAAA,MAAM,KAAK,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC;AACjC,IAAA,MAAM,GAAG,GAAG,KAAK,GAAG,GAAG,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;AACxC,IAAA,IAAI,GAAG,GAAG,CAAC,CAAC,MAAM;AAAE,QAAA,MAAM,OAAO,CAAC,6BAA6B,CAAC;AAChE,IAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;AACvD;AAEA;AACA,SAAS,EAAE,CAAC,KAAa,EAAA;AACvB,IAAA,IAAI,CAAS;IACb,IAAI,KAAK,GAAG,CAAC;AAAE,QAAA,CAAC,GAAG,KAAK,IAAI,CAAC;SACxB;QACH,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;QAC7C,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,GAAG,UAAU,EAAE,IAAI,CAAC;QAC3C,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC;IAC9B;AACA,IAAA,OAAO,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;AAChC;AAIA,SAAS,QAAQ,CAAC,MAAkB,EAAE,GAAW,EAAA;AAC/C,IAAA,IAAI,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM;AAAE,QAAA,OAAO,SAAS;IAC7C,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;IAChC,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM;AAAE,QAAA,MAAM,OAAO,CAAC,CAAA,UAAA,EAAa,GAAG,CAAA,gCAAA,CAAkC,CAAC;AACpG,IAAA,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE;AACvG;AAEA;AACA;AACA,SAAS,QAAQ,CAAC,MAAoB,EAAA;IACpC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;IACpB,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/B,MAAM,OAAO,GAAa,EAAE;IAC5B,MAAM,OAAO,GAAG,QAAQ,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;AAAE,QAAA,EAAE,EAAE;QAAE,GAAG,GAAG,CAAC;IAAE,CAAC,CAAC,CAAC;AACnG,IAAA,MAAM,MAAM,GAAG,MAAK,EAAG,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,UAAU,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC3G,IAAA,MAAM,MAAM,GAAG,MAAK,EAAG,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,MAAM,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACnF,IAAA,MAAM,IAAI,GAAG,CAAC,CAAS,KAAI;AACzB,QAAA,OAAO,CAAC,GAAG,CAAC,EAAE;AACZ,YAAA,OAAO,EAAE;AACT,YAAA,IAAI,EAAE,IAAI,MAAM,CAAC,MAAM;AAAE,gBAAA,MAAM,OAAO,CAAC,kCAAkC,CAAC;AAC1E,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC;YACjD,GAAG,IAAI,IAAI;YAAE,CAAC,IAAI,IAAI;QACxB;AACF,IAAA,CAAC;AACD,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;AAC9B,QAAA,OAAO,EAAE;AACT,QAAA,IAAI,EAAE,IAAI,MAAM,CAAC,MAAM;AAAE,YAAA,MAAM;AAC/B,QAAA,MAAM,GAAG,GAAG,MAAM,EAAE;AACpB,QAAA,OAAO,EAAE;QACT,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC;QACjC,IAAI,KAAK,KAAK,SAAS;AAAE,YAAA,MAAM,OAAO,CAAC,kCAAkC,CAAC;QAC1E,IAAI,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC;AAC5B,QAAA,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,CAAC;AACrC,QAAA,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,CAAC;QACpC,IAAI,IAAI,GAAG,EAAE;QACb,KAAK,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI,GAAG,CAAC,GAAG;YAC9B,IAAI,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;AAC5B,gBAAA,EAAE,EAAE;gBAAE,GAAG,GAAG,CAAC;AACb,gBAAA,IAAI,EAAE,IAAI,MAAM,CAAC,MAAM;AAAE,oBAAA,MAAM,OAAO,CAAC,kCAAkC,CAAC;AAC1E,gBAAA,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC;YACtC;AACA,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,GAAG,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACnF,IAAI,IAAI,KAAK,CAAC;AAAE,gBAAA,MAAM,OAAO,CAAC,4CAA4C,CAAC;AAC3E,YAAA,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;AAC1E,YAAA,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,IAAI,IAAI;QACd;AACA,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC;AACpB,QAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;IACpB;AACA,IAAA,OAAO,OAAO;AAChB;MAIa,WAAW,CAAA;IACb,MAAM,GAAe,EAAE;IACvB,YAAY,GAAkB,EAAE;IAChC,UAAU,GAAuB,EAAE;IACpC,GAAG,GAAa,EAAE;IAClB,SAAS,GAAa,EAAE;AACxB,IAAA,OAAO,GAAG,IAAI,GAAG,CAAiB,gBAAgB,CAAC;AACnD,IAAA,WAAW,GAAG,IAAI,GAAG,EAAU;IAC/B,QAAQ,GAAG,KAAK;AACP,IAAA,MAAM;AAEvB,IAAA,WAAA,CAAY,GAAc,EAAA;AACxB,QAAA,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;AACvD,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC;AAC/F,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;QACpB,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC;IACtC;IAEQ,YAAY,GAAA;AAClB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM;QACrB,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1B,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,MAAM,IAAI;AAAE,YAAA,MAAM,OAAO,CAAC,eAAe,CAAC;AACtE,QAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,MAAM,EAAE;AACtD,YAAA,MAAM,IAAI,KAAK,CAAC,2FAA2F,CAAC;QAC9G;AACA,QAAA,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,MAAM,KAAK,GAA0E,EAAE;QACvF,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE;AAC9D,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI;AAChB,YAAA,QAAQ,CAAC,CAAC,IAAI;gBACZ,KAAK,MAAM;AACT,oBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC;oBACtC;gBACF,KAAK,MAAM;AACT,oBAAA,MAAM,IAAI,KAAK,CAAC,yGAAyG,CAAC;gBAC5H,KAAK,MAAM;oBACT,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC;oBAC/B;AACF,gBAAA,KAAK,MAAM,EAAE;oBACX,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACpB,oBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBAChC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC;oBAC1B,IAAI,gBAAgB,CAAC,IAAI,CAAC;AAAE,wBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;oBACpD;gBACF;gBACA,KAAK,MAAM;AACT,oBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC9B;AACF,gBAAA,KAAK,MAAM,EAAE;AACX,oBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBAChC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;oBACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,KAAK,CAAC,GAAG,QAAQ,GAAG,KAAK,KAAK,CAAC,GAAG,YAAY,GAAG,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC9I;gBACF;AACA,gBAAA,KAAK,MAAM,EAAE;AACX,oBAAA,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC;oBAClB,IAAI,IAAI,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;AAC9B,oBAAA,OAAO,IAAI,EAAE,IAAI,KAAK,MAAM,EAAE;AAAE,wBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;wBAAE,CAAC,GAAG,IAAI;wBAAE,IAAI,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;oBAAE;AAC9F,oBAAA,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC;oBAC3B;gBACF;gBACA,KAAK,MAAM;AACT,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AAAE,wBAAA,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC3H;AACF,gBAAA,KAAK,MAAM,EAAE;oBACX,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;oBACvB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACpD,oBAAA,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC;AAC9B,oBAAA,MAAM,OAAO,GAAG,EAAE,GAAG,GAAG,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;oBACzC,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;oBACnC,MAAM,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC;oBACpC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA,MAAA,EAAS,GAAG,CAAC,CAAC,CAAC,CAAA,CAAE,IAAI,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,GAAG,CAAC,EAAE,CAAC;oBACzJ;gBACF;;QAEJ;AACA,QAAA,MAAM,OAAO,CAAC,qCAAqC,CAAC;IACtD;;IAGQ,YAAY,CAAC,KAA0D,EAAE,YAAsB,EAAA;QACrG,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,KAAK,EAAE;YACzC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,YAAY,CAAC;YAC9C,IAAI,GAAG,KAAK,SAAS;gBAAE;AACvB,YAAA,MAAM,GAAG,GAAgB,EAAE,IAAI,EAAE,GAAG,EAAE;YACtC,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;AAAE,gBAAA,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI;AAChF,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;QAC7B;IACF;IAEQ,SAAS,CAAC,IAAgB,EAAE,YAAsB,EAAA;QACxD,MAAM,KAAK,GAAa,EAAE;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG;AAChC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAClC,YAAA,MAAM,SAAS,GAAG,CAAC,GAAW,KAAI;gBAChC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AAC5C,gBAAA,IAAI,CAAC,KAAK;AAAE,oBAAA,OAAO,SAAS;AAC5B,gBAAA,OAAO,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,CAAA,CAAA,EAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG;AAC1G,YAAA,CAAC;YACD,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,GAAW,KAAK,CAAA,CAAA,EAAI,SAAS,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,CAAA,CAAE;AACnF,YAAA,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;AACxC,gBAAA,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACzC,gBAAA,IAAI,CAAC,KAAK;AAAE,oBAAA,OAAO,SAAS;AAC5B,gBAAA,KAAK,CAAC,IAAI,CAAC,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;gBAClE,CAAC,IAAI,CAAC;YACR;AAAO,iBAAA,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE;AAChD,gBAAA,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACzC,gBAAA,IAAI,CAAC,KAAK;AAAE,oBAAA,OAAO,SAAS;gBAC5B,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;;gBAE/G,MAAM,IAAI,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,MAAM,GAAG,CAAA,CAAA,EAAI,SAAS,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC,EAAE,CAAC,CAAA;AAC1E,sBAAE,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,GAAG,CAAA,CAAA,EAAI,EAAE,GAAG,CAAC,CAAA,EAAA,EAAK,EAAE,GAAG,CAAC,CAAA,CAAE,GAAG,CAAA,EAAG,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;gBACzF,KAAK,CAAC,IAAI,CAAC,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAC;gBAC9B,CAAC,IAAI,EAAE;YACT;AAAO,iBAAA,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,EAAE;AAC3C,gBAAA,CAAC,EAAE;YACL;AAAO,iBAAA,IAAI,GAAG,KAAK,IAAI,EAAE;gBACvB,CAAC,IAAI,CAAC;YACR;iBAAO;AACL,gBAAA,OAAO,SAAS;YAClB;QACF;AACA,QAAA,OAAO,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS;IACnD;AAEQ,IAAA,UAAU,CAAC,EAAU,EAAA;QAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,KAAK,SAAS,GAAG,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;IACxF;AAEQ,IAAA,MAAM,CAAC,EAAU,EAAA;QACvB,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;AAC7B,QAAA,OAAO,EAAE,KAAK,SAAS,KAAK,mBAAmB,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClF;IAEA,UAAU,CAAC,IAAwB,EAAE,SAAkB,EAAA;AACrD,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC;AAChH,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,GAAG,sCAAsC,GAAG,oBAAoB,IAAI,CAAA,wBAAA,CAA0B,CAAC;QAC7I,IAAI,CAAC,KAAK,CAAC,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,CAAA,OAAA,EAAU,KAAK,CAAC,IAAI,CAAA,4CAAA,CAA8C,CAAC;AAE3G,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAsE;AAC1F,QAAA,MAAM,IAAI,GAAkB,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;AAC/F,QAAA,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,GAAW,EAAE,EAAU,EAAE,KAAgB,EAAE,GAAY,KAAI;YACnF,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACrB,YAAA,IAAI,CAAC,CAAC;AAAE,gBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACxC,YAAA,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG;AAAE,gBAAA,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAC/C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBAAE,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC;iBACzF,IAAI,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;gBAAE,KAAK,GAAG,CAAC;AACxC,YAAA,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK;AACpB,YAAA,IAAI,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;gBAC/B,CAAC,CAAC,CAAC,SAAS,KAAK,EAAE,EAAE,GAAG,CAAC,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK;sBACvF,KAAK,GAAG,WAAW,CAAC,GAAG,IAAI,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC;YACxF;AACF,QAAA,CAAC;AACD,QAAA,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,GAAW,KAAI;YACzC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACrB,YAAA,IAAI,CAAC,CAAC;AAAE,gBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACxC,YAAA,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG;AAAE,gBAAA,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AAClD,QAAA,CAAC;AAED,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM;QACrB,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC;AACrC,QAAA,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;YAAE,MAAM,OAAO,CAAC,CAAA,OAAA,EAAU,KAAK,CAAC,IAAI,CAAA,kCAAA,CAAoC,CAAC;AACxG,QAAA,IAAI,aAAmE;QACvE,IAAI,MAAM,GAAG,KAAK;AAClB,QAAA,IAAI,IAAkC;AACtC,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE;AAC9D,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI;AAChB,YAAA,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE;AAAE,gBAAA,KAAK,EAAE;gBAAE;YAAU;AAC5C,YAAA,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE;gBAAE,IAAI,KAAK,EAAE,KAAK,CAAC;oBAAE;gBAAO;YAAU;YAC7D,IAAI,KAAK,GAAG,CAAC;gBAAE;AACf,YAAA,QAAQ,CAAC,CAAC,IAAI;gBACZ,KAAK,MAAM;AACT,oBAAA,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC1D;AACF,gBAAA,KAAK,MAAM,EAAE;oBACX,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACvB,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBAC1C;gBACF;AACA,gBAAA,KAAK,MAAM,EAAE;AACX,oBAAA,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;oBACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAClD,wBAAA,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;wBACnC,GAAG,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBAC9C;oBACA;gBACF;gBACA,KAAK,MAAM;AACT,oBAAA,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC/D;AACF,gBAAA,KAAK,MAAM;gBAAE,KAAK,MAAM;AACtB,oBAAA,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1D;AACF,gBAAA,KAAK,MAAM,EAAE;oBACX,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;oBAC1B,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;oBACtF;gBACF;gBACA,KAAK,MAAM;AACT,oBAAA,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC3B;gBACF,KAAK,MAAM;AACT,oBAAA,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBACtC;AACF,gBAAA,KAAK,MAAM,EAAE;oBACX,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;oBACtD,aAAa,GAAG,SAAS;AACzB,oBAAA,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,MAAM;wBAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7D,yBAAA,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;wBAAE,aAAa,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;AACjD,yBAAA,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAAE,wBAAA,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC7C,yBAAA,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAAE,wBAAA,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;AAC5D,yBAAA,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;wBAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;oBAC1C;gBACF;gBACA,KAAK,MAAM;AACT,oBAAA,IAAI,aAAa;wBAAE,GAAG,CAAC,aAAa,CAAC,GAAG,EAAE,aAAa,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACpG,aAAa,GAAG,SAAS;oBACzB;gBACF,KAAK,MAAM;oBACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACzC,wBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;wBACnB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA,EAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA,EAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA,EAAG,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA,CAAE,CAAC;oBACtH;oBACA;gBACF,KAAK,MAAM;AACT,oBAAA,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI;AAAE,wBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;oBAC1D;gBACF,KAAK,MAAM;AACT,oBAAA,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC;wBAAE,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE;4BAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;oBAC1G;gBACF,KAAK,MAAM;AACT,oBAAA,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC;oBACjC;AACF,gBAAA,KAAK,MAAM,EAAE;AACX,oBAAA,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACtC,oBAAA,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,CAAA,EAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA,EAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA,CAAE,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,aAAa,EAAE;oBACrH;gBACF;;QAEJ;QACA,IAAI,MAAM,IAAI,IAAI;AAAE,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AAE3C,QAAA,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,gBAAgB,QAAQ,GAAA;YACtB,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,MAAM,EAAE;AAC7B,gBAAA,MAAM,IAAI,GAAY,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE;gBAC5D,IAAI,CAAC,CAAC,SAAS;AAAE,oBAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS;AAC7C,gBAAA,MAAM,IAAI;YACZ;QACF;AACA,QAAA,OAAO,IAAI,WAAW,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D;AACD;AAED,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAClD,MAAM,KAAK,GAAG,CAAC,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,CAAC;AAClE,MAAM,aAAa,GAA2B;AAC5C,IAAA,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,gBAAgB;AAChI,IAAA,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,iBAAiB;AAC7H,IAAA,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,uBAAuB;CACrH;AAED;AACA,SAAS,cAAc,CAAC,GAAc,EAAE,GAAuB,EAAA;AAC7D,IAAA,MAAM,IAAI,GAAG,CAAC,MAAc,EAAE,IAA8C,KAAI;QAC9E,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;AAC1B,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,EAAE;YAAE;AACzB,QAAA,IAAI;YACF,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC;YACjC,IAAI,QAAQ,GAAG,IAAI;AACnB,YAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB;AACxC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE;AAAE,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/H,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YACxB,IAAI,EAAE,KAAK,SAAS,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC;gBAAE,QAAQ,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AACnE,YAAA,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBAC5C,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAC1B,IAAI,EAAE,KAAK,SAAS;oBAAE;gBACtB,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;AACvB,gBAAA,IAAI,IAAI,KAAK,IAAI,EAAE;oBACjB,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AAC1B,oBAAA,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;AAC5C,oBAAA,MAAM,IAAI,GAAG,QAAQ,KAAK,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,KAAK,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;oBACrH,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;AACtC,oBAAA,IAAI,KAAK;AAAG,wBAAA,GAA+B,CAAC,GAAG,CAAC,GAAG,KAAK;gBAC1D;qBAAO,IAAI,IAAI,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE;oBAC7C,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE;AACvD,oBAAA,IAAI,KAAK;AAAE,wBAAA,GAAG,CAAC,OAAO,GAAG,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,cAAc,CAAC;gBACnE;YACF;QACF;AAAE,QAAA,MAAM;;QAER;AACF,IAAA,CAAC;AACD,IAAA,IAAI,CAAC,0BAA0B,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC;AAC5H,IAAA,IAAI,CAAC,kCAAkC,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC;AAC3F;;AC7ZA;AACA;AAOO,MAAM,YAAY,GAAG,gDAAgD;AAE5E,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE;AACxB,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE;AAC3B,MAAM,UAAU,GAAG,2EAA2E;AAI9F,gBAAgB,MAAM,CAAC,IAAiB,EAAA;AACtC,IAAA,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,EAAE,EAAE,WAAW,CAAC,oBAAoB,EAAE,CAAC,CAAC,SAAS,EAAE;AAC7E,IAAA,IAAI;QACF,OAAO,IAAI,EAAE;YACX,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE;AAC3C,YAAA,IAAI,IAAI;gBAAE;YACV,OAAO,KAAK;QACd;IACF;YAAU;QACR,MAAM,CAAC,WAAW,EAAE;IACtB;AACF;AAEA,MAAM,MAAM,GAAG,CAAC,KAAyB,EAAE,GAAW,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC;AAEtH;AACA,SAAS,OAAO,CAAC,KAAa,EAAA;IAC5B,MAAM,CAAC,GAAG,6DAA6D,CAAC,IAAI,CAAC,KAAK,CAAC;AACnF,IAAA,IAAI,CAAC,CAAC;AAAE,QAAA,OAAO,IAAI;AACnB,IAAA,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACvH,IAAA,OAAO,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE;AACtD;AAEA;AACA,SAAS,OAAO,CAAC,KAAa,EAAA;IAC5B,MAAM,CAAC,GAAG,gEAAgE,CAAC,IAAI,CAAC,KAAK,CAAC;AACtF,IAAA,IAAI,CAAC,CAAC;AAAE,QAAA,OAAO,IAAI;IACnB,MAAM,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5F,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,GAAG,OAAO,IAAI,KAAK,CAAC;AAC5D;AAEA;AACM,SAAU,UAAU,CAAC,OAAe,EAAA;IACxC,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;IACzC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,GAAW,KAAK,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,IAAG;QAC3E,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;AACjC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;AAChC,QAAA,OAAO,KAAK,GAAG,CAAA,EAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAA,CAAA,CAAG,IAAI,IAAI,CAAA,CAAE,GAAG,IAAI;AAC3H,IAAA,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;;IAErD,OAAO,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAC1D;AAEA;AACA,SAAS,QAAQ,CAAC,OAAe,EAAA;IAC/B,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,UAAU,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC5E;AAIO,eAAe,eAAe,CAAC,OAAoB,EAAE,QAA2C,EAAA;IACrG,MAAM,MAAM,GAAe,EAAE;IAC7B,MAAM,YAAY,GAAkB,EAAE;AACtC,IAAA,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU;AACtC,IAAA,IAAI,KAAyB;IAC7B,WAAW,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE;AACrC,QAAA,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc;YAAE;AAC/B,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU;QACtB,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,OAAO;AAAE,YAAA,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;AAC/D,aAAA,IAAI,CAAC,CAAC,IAAI,KAAK,kBAAkB,IAAI,KAAK,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,OAAO;AAAE,YAAA,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAC/F,aAAA,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE;AACtD,YAAA,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,GAAG,QAAQ,GAAG,SAAS,EAAE,CAAC;QACzG;AAAO,aAAA,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,EAAE;YAC3E,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC;QAChF;AAAO,aAAA,IAAI,CAAC,CAAC,IAAI,KAAK,kBAAkB,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,EAAE;YACxE,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;QAC1E;IACF;AAEA,IAAA,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC;AACvC,IAAA,MAAM,IAAI,GAAG,CAAC,GAAW,KAAI,EAAG,KAAK,MAAM,EAAE,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC;AAAE,QAAA,OAAO,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC;IACzH,MAAM,UAAU,GAAuB,EAAE;IACzC,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,sBAAsB,CAAC;AAC7G,QAAA,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAU,EAAE;AAC3E,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;AACnB,QAAA,IAAI,CAAC;AAAE,YAAA,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;IAC5B;IACA,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC;AAAE,QAAA,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC;AACtF,IAAA,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC;;IAE1C,MAAM,SAAS,GAAG,OAAO,IAAI,IAAI,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,OAAO,GAAG,GAAG,CAAC;IACtG,IAAI,SAAS,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;AAAE,QAAA,UAAU,CAAC,OAAO,GAAG,SAAS;AAC5E,IAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE;AAC7C;AAEA;AACA,eAAe,WAAW,CAAC,QAA2C,EAAE,KAAa,EAAA;AACnF,IAAA,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC;;IAE/C,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,sGAAsG,CAAC,EAAE;QACzI,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK;YAAE;AACjC,QAAA,MAAM,IAAI,GAAG,CAAC,IAAY,KAAI;YAC5B,KAAK,MAAM,EAAE,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,oBAAoB,CAAC;gBAAE,IAAI,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA,aAAA,EAAgB,IAAI,CAAA,CAAA,CAAG,CAAC;oBAAE,OAAO,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;AAC3I,YAAA,OAAO,CAAC;AACV,QAAA,CAAC;AACD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC;AACpF,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC;AAChF,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,SAAS;QACpC,MAAM,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,aAAa,GAAG,IAAI,GAAG,YAAY,GAAG,UAAU;QAC5E,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAA,EAAG,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA,CAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC5J;AACA,IAAA,OAAO,SAAS;AAClB;SAIgB,QAAQ,CAAC,OAAoB,EAAE,QAA2C,EAAE,OAAwB,EAAA;AAClH,IAAA,IAAI,WAAwC;AAC5C,IAAA,IAAI,UAAiC;IACrC,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAgB,CAAC,GAAG,EAAE,GAAG,KAAI,EAAG,WAAW,GAAG,GAAG,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACnG,QAAQ,CAAC,KAAK,CAAC,QAAO,CAAC,CAAC,CAAC;IACzB,MAAM,QAAQ,GAAmB,EAAE;AACnC,IAAA,IAAI,QAAQ,GAAkB,OAAO,CAAC,OAAO,EAAE;IAE/C,gBAAgB,QAAQ,GAAA;AACtB,QAAA,MAAM,IAAI,GAAkB,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;AAC/F,QAAA,IAAI,IAAiB;AACrB,QAAA,QAAQ,GAAG,IAAI,OAAO,CAAC,CAAC,IAAG,EAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,QAAA,IAAI;AACF,YAAA,IAAI,KAAyB;AAC7B,YAAA,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC;AAChC,YAAA,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,KAAK;AACpC,YAAA,IAAI,KAAK,GAAgB,EAAE,EAAE,QAA4C,EAAE,SAA6C;AACxH,YAAA,IAAI,IAAwC;YAC5C,IAAI,UAAU,GAAG,CAAC;YAClB,IAAI,IAAI,GAAa,EAAE,EAAE,IAAI,GAAG,CAAC,CAAC,EAAE,IAAwB;AAC5D,YAAA,IAAI,IAAwE;AAC5E,YAAA,IAAI,OAAO,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC;AAC/B,YAAA,MAAM,YAAY,GAAG,CAAC,KAAa,KAAI;gBACrC,IAAI,KAAK,IAAI,OAAO,CAAC,eAAe,IAAI,QAAQ,CAAC,EAAE;oBACjD,MAAM,IAAI,KAAK,CAAC,CAAA,2CAAA,EAA8C,OAAO,CAAC,eAAe,CAAA,oCAAA,CAAsC,CAAC;gBAC9H;AACF,YAAA,CAAC;YACD,IAAI,OAAO,GAAG,CAAC;YAEf,WAAW,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE;gBACrC,IAAI,CAAC,KAAK,EAAE;AACV,oBAAA,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,KAAK,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,SAAS,CAAC,EAAE;wBACtI,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE;oBACpC;oBACA;gBACF;AACA,gBAAA,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc,EAAE;AAC7B,oBAAA,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU;AACtB,oBAAA,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE;AAAE,wBAAA,KAAK,EAAE;wBAAE;oBAAU;oBAC7C,IAAI,KAAK,GAAG,CAAC;wBAAE;oBACf,IAAI,IAAI,EAAE;AACR,wBAAA,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS;AAAE,4BAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACzC,6BAAA,IAAI,CAAC,CAAC,IAAI,KAAK,GAAG;AAAE,4BAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC3C;oBACF;AACA,oBAAA,QAAQ,CAAC,CAAC,IAAI;wBACZ,KAAK,cAAc,EAAE;AACnB,4BAAA,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;AACpE,4BAAA,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,UAAU;AAAE,gCAAA,KAAK,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE;oCAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;4BACzG,MAAM,IAAI,CAAC;4BACX;wBACF;AACA,wBAAA,KAAK,WAAW;AACd,4BAAA,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,sBAAsB,CAAC,EAAE,QAAQ,GAAG,GAAG,CAAC;AAC7D,4BAAA,SAAS,GAAG,CAAC,CAAC,YAAY,CAAC,KAAK,UAAU;4BAC1C,KAAK,GAAG,EAAE;4BAAE,QAAQ,GAAG,SAAS;4BAAE,SAAS,GAAG,SAAS;4BAAE,GAAG,GAAG,CAAC;4BAAE,UAAU,GAAG,CAAC;4BAChF;AACF,wBAAA,KAAK,YAAY;AAAE,wBAAA,KAAK,oBAAoB;4BAC1C,IAAI,GAAG,CAAC;AAAE,4BAAA,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,EAAE,WAAW,GAAG,GAAG,CAAC;4BAC9E,IAAI,GAAG,EAAE;4BAAE,IAAI,GAAG,CAAC,CAAC;4BAAE,IAAI,GAAG,SAAS;AACtC,4BAAA,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,KAAK,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,EAAE;gCACxF,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,wBAAwB,CAAC,EAAE,WAAW,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,EAAE,QAAQ,GAAG,GAAG,CAAC;AAC5H,gCAAA,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC;AAAE,oCAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA,EAAG,SAAS,CAAC,GAAG,CAAC,CAAA,EAAG,GAAG,GAAG,CAAC,CAAA,CAAA,EAAI,SAAS,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAA,EAAG,GAAG,GAAG,IAAI,CAAA,CAAE,CAAC;4BAC1H;4BACA;AACF,wBAAA,KAAK,YAAY;4BACf,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;4BACpC;AACF,wBAAA,KAAK,GAAG;4BACN,IAAI,IAAI,EAAE;AAAE,gCAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAAE,gCAAA,IAAI,EAAE;4BAAE;4BACnC;AACF,wBAAA,KAAK,GAAG;AACN,4BAAA,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC;AAAE,gCAAA,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;4BACrE;AACF,wBAAA,KAAK,KAAK;AACR,4BAAA,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC;AAAE,gCAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI;4BACzC;AACF,wBAAA,KAAK,YAAY;AACf,4BAAA,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC;AAAE,gCAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI;4BACzC;AACF,wBAAA,KAAK,GAAG;AACN,4BAAA,IAAI,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC;AAAE,gCAAA,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC;4BACvC;;gBAEN;AAAO,qBAAA,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE;oBAC5B,IAAI,KAAK,GAAG,CAAC;wBAAE;oBACf,IAAI,IAAI,EAAE;wBACR,IAAI,IAAI,CAAC,QAAQ;AAAE,4BAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK;AACzD,6BAAA,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM;AAAE,4BAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK;oBACvE;AAAO,yBAAA,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC;AAAE,wBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK;gBACrD;qBAAO;AACL,oBAAA,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE;wBACtB,IAAI,KAAK,EAAE,GAAG,CAAC;4BAAE;AACjB,wBAAA,MAAM;oBACR;oBACA,IAAI,KAAK,GAAG,CAAC;wBAAE;oBACf,IAAI,IAAI,EAAE;AACR,wBAAA,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS;AAAE,4BAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AAC1C,6BAAA,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,EAAE;4BAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA,EAAG,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAA,CAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;4BAClI,IAAI,GAAG,SAAS;wBAClB;wBACA;oBACF;AACA,oBAAA,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,CAAC,IAAI,KAAK,oBAAoB,KAAK,IAAI,EAAE;wBACxE,MAAM,CAAC,GAAG,IAAI;wBACd,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;wBAC7B,IAAI,KAAK,GAAc,IAAI;AAC3B,wBAAA,QAAQ,CAAC,CAAC,YAAY,CAAC;AACrB,4BAAA,KAAK,OAAO;AAAE,4BAAA,KAAK,YAAY;4BAAE,KAAK,UAAU,EAAE;gCAChD,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;gCAC5B,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;;gCAElD,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;oCAAE,KAAK,GAAG,KAAK;gCACzD;4BACF;AACA,4BAAA,KAAK,MAAM;AAAE,gCAAA,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK;gCAAE;AAC9D,4BAAA,KAAK,MAAM;AAAE,gCAAA,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK;gCAAE;AAC9D,4BAAA,KAAK,SAAS;AAAE,gCAAA,KAAK,GAAG,CAAC,CAAC,eAAe,CAAC,KAAK,MAAM;gCAAE;AACvD,4BAAA,KAAK,QAAQ;AAAE,gCAAA,KAAK,GAAG,CAAC,CAAC,cAAc,CAAC,IAAI,KAAK;gCAAE;4BACnD,SAAS,KAAK,GAAG,KAAK,IAAI,IAAI,CAAC;;wBAEjC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE;AAClC,4BAAA,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;AAC7C,4BAAA,YAAY,CAAC,OAAO,GAAG,UAAU,CAAC;AAClC,4BAAA,OAAO,KAAK,CAAC,MAAM,GAAG,GAAG;AAAE,gCAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3C,4BAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;AACnC,gCAAA,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK;AACtB,gCAAA,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAC;AAAE,oCAAA,CAAC,QAAQ,KAAK,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAC3F,gCAAA,IAAI,OAAO,CAAC,SAAS,IAAI,KAAK,KAAK,IAAI;oCAAE,CAAC,SAAS,KAAK,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK;4BAC9E;AACA,4BAAA,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI;gCAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA,EAAG,SAAS,CAAC,GAAG,CAAC,CAAA,EAAG,GAAG,GAAG,CAAC,CAAA,CAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;wBAC3G;wBACA,GAAG,IAAI,UAAU;wBACjB,IAAI,GAAG,SAAS;oBAClB;AAAO,yBAAA,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE;AACjC,wBAAA,IAAI,SAAS;AAAE,4BAAA,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,GAAG,SAAS,EAAE,CAAC,EAAE;gCAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACtF,wBAAA,IAAI,KAAK,CAAC,MAAM,EAAE;AAChB,4BAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;;gCAElC,OAAO,IAAI,UAAU;gCACrB,YAAY,CAAC,OAAO,CAAC;gCACrB,IAAI,EAAE,OAAO,GAAG,QAAQ;AAAE,oCAAA,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC;gCAC/E,MAAM,IAAI,GAAY,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,GAAG,KAAK,EAAE;AAClF,gCAAA,IAAI,QAAQ;AAAE,oCAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACtC,gCAAA,IAAI,SAAS;AAAE,oCAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AACzC,gCAAA,MAAM,IAAI;4BACZ;wBACF;wBACA,GAAG,IAAI,SAAS;oBAClB;gBACF;YACF;AACA,YAAA,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,GAAG,sCAAsC,GAAG,CAAA,iBAAA,EAAoB,OAAO,CAAC,SAAS,CAAA,wBAAA,CAA0B,CAAC;YACvK,IAAI,CAAC,WAAW,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC;YACrD,WAAW,CAAC,IAAI,CAAC;QACnB;QAAE,OAAO,CAAC,EAAE;YACV,UAAU,CAAC,CAAC,CAAC;AACb,YAAA,MAAM,CAAC;QACT;gBAAU;AACR,YAAA,IAAI,EAAE;QACR;IACF;AAEA,IAAA,MAAM,IAAI,GAAG,QAAQ,EAAE;IACvB,OAAO,IAAI,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,YAAW,EAAG,MAAM,QAAQ,CAAC,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC1G;;AC/RA,MAAMA,WAAS,GAAG,CAAC,GAAY,KAAKC,WAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAE3D;SACgB,OAAO,CAAC,IAAc,EAAE,OAAO,GAAG,MAAM,EAAA;IACtD,IAAI,GAAG,GAAG,EAAE;IACZ,IAAI,IAAI,CAAC,IAAI;QAAE,GAAG,IAAI,MAAM;IAC5B,IAAI,IAAI,CAAC,MAAM;QAAE,GAAG,IAAI,MAAM;IAC9B,IAAI,IAAI,CAAC,SAAS;QAAE,GAAG,IAAI,MAAM;IACjC,IAAI,IAAI,CAAC,IAAI;QAAE,GAAG,IAAI,YAAYD,WAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,GAAA,CAAK;IAC3D,IAAI,IAAI,CAAC,KAAK;QAAE,GAAG,IAAI,eAAe,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA,GAAA,CAAK;IAC3D,IAAI,IAAI,CAAC,IAAI;QAAE,GAAG,IAAI,CAAA,CAAA,EAAI,OAAO,CAAA,MAAA,EAASA,WAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,GAAA,CAAK;AACnE,IAAA,OAAO,GAAG;AACZ;AAEO,MAAM,aAAa,GAAG,CAAC,GAAW,EAAE,CAAqC,KAC9E,CAAC,GAAG,CAAA,CAAA,EAAI,GAAG,CAAA,QAAA,EAAWA,WAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA,EAAA,EAAK,CAAC,CAAC,KAAK,GAAG,CAAA,YAAA,EAAe,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA,GAAA,CAAK,GAAG,EAAE,CAAA,EAAA,EAAK,GAAG,CAAA,CAAA,CAAG,GAAG,CAAA,CAAA,EAAI,GAAG,CAAA,EAAA,CAAI;AAElH,SAAU,SAAS,CAAC,CAAa,EAAA;IACrC,MAAM,IAAI,GAAG,aAAa;AAC1B,IAAA,OAAO,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAA,EAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,sBAAsB;AACvI;AAEM,SAAU,OAAO,CAAC,IAA6B,EAAA;AACnD,IAAA,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;AAC5B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,mBAAmB,CAAC,CAAC,QAAQ,CAAA,cAAA,EAAiB,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA,UAAA,CAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACnH,QAAA,OAAO,CAAA,4BAAA,EAA+BA,WAAS,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAA,EAAA,EAAK,KAAK,CAAA,sBAAA,CAAwB;IACrG;IACA,OAAO,CAAA,qDAAA,EAAwD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,0BAA0B;AAC7G;AAEA;AACM,SAAU,cAAc,CAAC,SAAwB,EAAA;IACrD,MAAM,KAAK,GAA2B,EAAE;IACxC,IAAI,SAAS,CAAC,UAAU;QAAE,KAAK,CAAC,UAAU,GAAGA,WAAS,CAAC,SAAS,CAAC,UAAU,CAAC;;IAE5E,IAAI,SAAS,CAAC,QAAQ;QAAE,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,KAAK,QAAQ,GAAG,QAAQ,GAAGA,WAAS,CAAC,SAAS,CAAC,QAAQ,CAAC;IACnH,IAAI,SAAS,CAAC,QAAQ;AAAE,QAAA,KAAK,CAAC,QAAQ,GAAG,GAAG;AAC5C,IAAA,OAAO,KAAK;AACd;MAWa,WAAW,CAAA;AACd,IAAA,QAAQ,GAAkB;QAChC,KAAK,EAAE,IAAI,GAAG,EAAE;QAChB,KAAK,EAAE,IAAI,GAAG,EAAE;QAChB,OAAO,EAAE,IAAI,GAAG,EAAE;QAClB,OAAO,EAAE,IAAI,GAAG,EAAE;AAClB,QAAA,OAAO,EAAE,EAAE;KACZ;AACO,IAAA,OAAO,GAAG,IAAI,GAAG,EAAkB;;AAEnC,IAAA,IAAI,GAAG,IAAI,GAAG,EAAkB;;AAGxC,IAAA,WAAW,CAAC,KAAqB,EAAA;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QACjC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAC3B,QAAA,IAAI,EAAE,KAAK,SAAS,EAAE;AACpB,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACvC,IAAI,KAAK,CAAC,MAAM;AAAE,gBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC;QACrD;AACA,QAAA,OAAO,EAAE;IACX;AAEQ,IAAA,MAAM,CAAC,KAAqB,EAAA;QAClC,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,GAAG,CAAA,MAAA,EAAS,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA,OAAA,CAAS,GAAG,EAAE;QACjE,IAAI,KAAK,CAAC,MAAM;AAAE,YAAA,GAAG,IAAI,CAAA,kBAAA,EAAqB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA,cAAA,EAAiBA,WAAS,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK;QAC5H,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,EAAE;;YAEhC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;AAClC,YAAA,GAAG,IAAI,CAAA,qDAAA,EAAwD,CAAC,CAAA,iBAAA,EAAoB,CAAC,0BAA0B;QACjH;QACA,IAAI,KAAK,CAAC,MAAM;AAAE,YAAA,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;QAChD,OAAO,CAAA,KAAA,EAAQ,GAAG,CAAA,MAAA,CAAQ;IAC5B;AAEA,IAAA,aAAa,CAAC,KAAgB,EAAA;QAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;QAC7D,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;QAC7D,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;QACrE,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;QACrE,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;AAEnF,QAAA,MAAM,GAAG,GAAG,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,EAAI,YAAY,EAAE;QACzE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;QACtC,IAAI,QAAQ,KAAK,SAAS;AAAE,YAAA,OAAO,QAAQ;AAE3C,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;QAChF,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;QACxC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;AACzB,QAAA,OAAO,EAAE;IACX;AAEQ,IAAA,YAAY,CAAC,IAAc,EAAA;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAChC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE;AACtE,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;AAChC,QAAA,OAAO,EAAE;IACX;AAEQ,IAAA,YAAY,CAAC,IAA6B,EAAA;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAChC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE;AACtE,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;AAChC,QAAA,OAAO,EAAE;IACX;AAEQ,IAAA,cAAc,CAAC,MAAkB,EAAA;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QAClC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAE;AAC1E,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;AAClC,QAAA,OAAO,EAAE;IACX;AAEQ,IAAA,cAAc,CAAC,GAAW,EAAA;QAChC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAE;QAC1E,MAAM,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI;QAC3C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;AAClC,QAAA,OAAO,EAAE;IACX;AAEQ,IAAA,iBAAiB,CAAC,SAAwB,EAAA;AAChD,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAA,EAAG,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,CAAA,CAAG,CAAC;AACtF,QAAA,OAAO,KAAK,CAAC,MAAM,GAAG,cAAc,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,EAAA,CAAI,GAAG,EAAE;IAC9D;;IAGA,KAAK,GAAA;AACH,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,EAAE;AACzC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE;AACrC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE;AACrC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,EAAE;AACzC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,EAAE;QAEzC,OAAO,CAAA;;EAET,UAAU;EACV,QAAQ;EACR,QAAQ;EACR,UAAU;;AAEM,gBAAA,EAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA;EAChD,UAAU;;;EAGV,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAA,aAAA,EAAgB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA,EAAA,EAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA,OAAA,CAAS,GAAG,EAAE;cACzH;IACZ;IAEQ,eAAe,GAAA;QACrB,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC;AAAE,YAAA,OAAO,EAAE;QAC/C,MAAM,OAAO,GAAa,EAAE;AAC5B,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;AAC7C,YAAA,OAAO,CAAC,IAAI,CAAC,CAAA,kBAAA,EAAqB,EAAE,CAAA,cAAA,EAAiBA,WAAS,CAAC,GAAG,CAAC,CAAA,GAAA,CAAK,CAAC;QAC3E;AACA,QAAA,OAAO,CAAA,gBAAA,EAAmB,OAAO,CAAC,MAAM,CAAA,EAAA,EAAK,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA,UAAA,CAAY;IAC3E;IAEQ,aAAa,GAAA;AACnB,QAAA,MAAM,WAAW,GAAa;AAC5B,YAAA,kDAAkD;SACnD;QAED,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACvC,YAAA,WAAW,CAAC,IAAI,CAAC,CAAA,MAAA,EAAS,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA,OAAA,CAAS,CAAC;QAC9D;AAEA,QAAA,OAAO,CAAA,cAAA,EAAiB,WAAW,CAAC,MAAM,CAAA,EAAA,EAAK,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA,QAAA,CAAU;IAC/E;IAEQ,aAAa,GAAA;AACnB,QAAA,MAAM,WAAW,GAAa;YAC5B,gDAAgD;YAChD,mDAAmD;SACpD;QAED,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK;AAAE,YAAA,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAEnF,QAAA,OAAO,CAAA,cAAA,EAAiB,WAAW,CAAC,MAAM,CAAA,EAAA,EAAK,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA,QAAA,CAAU;IAC/E;IAEQ,eAAe,GAAA;AACrB,QAAA,MAAM,aAAa,GAAa;YAC9B;SACD;QAED,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO;AAAE,YAAA,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAEzF,QAAA,OAAO,CAAA,gBAAA,EAAmB,aAAa,CAAC,MAAM,CAAA,EAAA,EAAK,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA,UAAA,CAAY;IACvF;IAEQ,eAAe,GAAA;;AAErB,QAAA,MAAM,OAAO,GAAa;YACxB;SACD;QAED,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;AACtC,YAAA,OAAO,CAAC,IAAI,CACV,CAAA,cAAA,EAAiB,EAAE,CAAC,QAAQ,CAAA,UAAA,EAAa,EAAE,CAAC,MAAM,CAAA,UAAA,EAAa,EAAE,CAAC,MAAM,eAAe,EAAE,CAAC,QAAQ,CAAA,4EAAA,EAA+E,EAAE,CAAC,YAAY,GAAG,qBAAqB,GAAG,EAAE,CAAA,CAAA,EAAI,EAAE,CAAC,YAAY,CAAA,KAAA,CAAO,CACxP;QACH;AAEA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;IAC3B;AACD;;ACxND,MAAMA,WAAS,GAAG,CAAC,GAAY,KAAKC,WAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAE3D,MAAM,KAAK,GAAG,CAAC,GAAW,KAAK,CAAA,YAAA,EAAe,IAAI,CAAC,GAAG,CAAC,KAAK;AAC5D,MAAM,KAAK,GAAG,CAAC,IAAmB,EAAE,KAAc,KAChD,KAAK,KAAK,SAAS,GAAG,CAAA,YAAA,EAAe,IAAI,CAAA,GAAA,CAAK,GAAG,CAAA,sBAAA,EAAyBD,WAAS,CAAC,KAAK,CAAC,CAAA,GAAA,CAAK;AACjG,MAAM,OAAO,GAAG,CAAC,CAAkB,KAAK,CAAA,SAAA,EAAYA,WAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA,UAAA,CAAY;AACtG;AACA,MAAM,OAAO,GAAG,CAAC,CAAS,KAAK,CAAA,CAAA,EAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG;MAE9C,oBAAoB,CAAA;AAEX,IAAA,GAAA;;AAApB,IAAA,WAAA,CAAoB,GAAA,GAAyC,MAAM,CAAC,EAAA;QAAhD,IAAA,CAAA,GAAG,GAAH,GAAG;IAAgD;;AAGvE,IAAA,KAAK,CAAC,OAA4B,EAAA;QAChC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,KAAI;;YAE3B,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAC7D,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;YAClD,OAAO,CAAA,8BAAA,EAAiCA,WAAS,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA,EAAA,EAAK,IAAI,CAAA,wBAAA,CAA0B;AAChG,QAAA,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IACf;AAEQ,IAAA,OAAO,CAAC,IAA2B,EAAE,QAAgB,EAAE,IAAY,EAAA;QACzE,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,KAAK,GAAG,EAAE,KAAI;YACxC,MAAM,GAAG,GAAG,OAAO,IAAI,IAAI,GAAG,CAAA,QAAA,EAAW,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE;YACrE,OAAO,CAAA,cAAA,EAAiB,IAAI,CAAA,CAAA,EAAI,GAAG,cAAc,QAAQ,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAG;AACvE,QAAA,CAAC;AACD,QAAA,QAAQ,IAAI,CAAC,IAAI;AACf,YAAA,KAAK,SAAS,EAAE,OAAO,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,CAAA,EAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW;AAC9E,YAAA,KAAK,YAAY,EAAE,OAAO,CAAA,EAAG,IAAI,CAAC,YAAY,CAAC,CAAA,EAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW;AACvF,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,CAAA,EAAG,IAAI,CAAC,QAAQ,EAAE,CAAA,WAAA,EAAcA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA,EAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW;AACtH,YAAA,KAAK,YAAY,EAAE,OAAO,CAAA,EAAG,IAAI,CAAC,YAAY,CAAC,CAAA,EAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW;AAClF,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,GAAG,cAAc,GAAG,EAAE,CAAA,EAAG,IAAI,CAAC,MAAM,GAAG,aAAa,GAAG,EAAE,CAAA,OAAA,EAAUA,WAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG,CAAC,WAAW;YAC/I,KAAK,cAAc,EAAE,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,KAAK,GAAG,mBAAmB,GAAG,EAAE,CAAC,CAAA,SAAA,CAAW;AACrG,YAAA,KAAK,iBAAiB;AACtB,YAAA,KAAK,cAAc,EAAE,OAAO,CAAA,EAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,SAAA,CAAW;AACzD,YAAA,KAAK,cAAc;AACnB,YAAA,KAAK,iBAAiB;AACtB,YAAA,KAAK,YAAY;YACjB,KAAK,UAAU,EAAE;;gBAEf,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5B,gBAAA,MAAM,IAAI,GAAG;AACX,oBAAA,YAAY,EAAE,CAAA,mBAAA,EAAsB,CAAC,CAAA,CAAA,EAAI,IAAI,CAAA,GAAA,CAAK;AAClD,oBAAA,eAAe,EAAE,CAAA,eAAA,EAAkB,CAAC,CAAA,CAAA,EAAI,IAAI,CAAA,EAAA,CAAI;AAChD,oBAAA,UAAU,EAAE,CAAA,KAAA,EAAQ,IAAI,QAAQ,CAAC,CAAA,GAAA,EAAM,CAAC,CAAA,CAAE;AAC1C,oBAAA,QAAQ,EAAE,CAAA,MAAA,EAAS,IAAI,QAAQ,CAAC,CAAA,GAAA,EAAM,CAAC,CAAA,CAAE;AAC1C,iBAAA,CAAC,IAAI,CAAC,IAAI,CAAC;AACZ,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,KAAK,iBAAiB,GAAG,aAAa,GAAG,IAAI,CAAC,IAAI;gBAC5E,OAAO,CAAA,EAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA,WAAA,EAAc,QAAQ,CAAA,QAAA,EAAWA,WAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA,EAAG,OAAO,CAAC,IAAI,CAAC,CAAA,SAAA,CAAW;YAChH;YACA,KAAK,SAAS,EAAE;gBACd,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;AACpC,gBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAA,0BAAA,EAA6B,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACrH,gBAAA,MAAM,KAAK,GAAG,CAAA,EAAG,IAAI,CAAC,OAAO,GAAG,cAAc,GAAG,EAAE,CAAA,EAAG,IAAI,CAAC,SAAS,KAAK,KAAK,GAAG,gBAAgB,GAAG,EAAE,EAAE;AACxG,gBAAA,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,qBAAqBA,WAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,KAAK,qBAAqB;YAC9G;AACA,YAAA;gBACE,MAAM,IAAI,KAAK,CAAC,CAAA,iCAAA,EAAqC,IAAyB,CAAC,IAAI,CAAA,EAAA,CAAI,CAAC;;IAE9F;AAEQ,IAAA,YAAY,CAAC,IAAiB,EAAA;QACpC,OAAO,CAAA,SAAA,EAAY,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA,EAAG,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA,EAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA,UAAA,CAAY;IAC9G;AAEQ,IAAA,eAAe,CAAC,IAAoB,EAAA;AAC1C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,KAAK,SAAS;QACvC,OAAO,CAAA,8BAAA,EAAiC,GAAG,GAAG,oCAAoC,GAAG,EAAE,CAAA,kBAAA,CAAoB;AACzG,YAAA,CAAA,EAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA,EAAG,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,QAAS,CAAC,GAAG,EAAE,CAAA,EAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe;IACpG;AACD;;ACvDD;MACa,YAAY,CAAA;AACF,IAAA,IAAA;AAArB,IAAA,WAAA,CAAqB,IAAY,EAAA;QAAZ,IAAA,CAAA,IAAI,GAAJ,IAAI;IAAW;AACrC;AAID;AACA,MAAM,WAAY,SAAQ,KAAK,CAAA;AAAG;AAClC;AACA,MAAM,QAAS,SAAQ,KAAK,CAAA;AAAG;AAI/B,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,SAAS,CAAC;AACxC,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,SAAS,CAAC;AAEzC;AACM,SAAU,UAAU,CAAC,CAAS,EAAA;AAClC,IAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;AAC5D;MAEa,aAAa,CAAA;AAChB,IAAA,KAAK,GAAG,IAAI,GAAG,EAAuC;AACtD,IAAA,OAAO,GAAG,IAAI,GAAG,EAAiB;AAClC,IAAA,UAAU,GAAG,IAAI,GAAG,EAAU;IAEtC,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAClB,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;IACtB;AAEA,IAAA,QAAQ,CAAC,IAAuC,EAAE,QAAQ,GAAG,CAAC,EAAA;QAC5D,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,KAAI;YACvB,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,KAAI;AACvB,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,QAAQ,EAAE,EAAE,CAAC;gBACzC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;AAC3B,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;;AAGA,IAAA,QAAQ,CAAC,OAAe,EAAA;QACtB,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AACnC,QAAA,OAAO,CAAC,YAAY,YAAY,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;IAC/C;;AAGA,IAAA,WAAW,CAAC,OAAe,EAAA;AACzB,QAAA,IAAI;AACF,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;QAC1B;QAAE,OAAO,GAAG,EAAE;;YAEZ,IAAI,GAAG,YAAY,QAAQ;AAAE,gBAAA,OAAO,CAAC;AACrC,YAAA,OAAO,IAAI;QACb;IACF;;AAGA,IAAA,SAAS,CAAC,GAAW,EAAA;AACnB,QAAA,IAAI;YACF,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QACvC;QAAE,OAAO,GAAG,EAAE;YACZ,IAAI,GAAG,YAAY,QAAQ;AAAE,gBAAA,OAAO,CAAC;AACrC,YAAA,OAAO,IAAI;QACb;IACF;AAEQ,IAAA,GAAG,CAAC,OAAe,EAAA;AACzB,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE;AAC9C,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI;;AAEvB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3D;AAEQ,IAAA,MAAM,CAAC,GAAW,EAAA;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;AAChC,QAAA,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,IAAI,IAAI;QAClE,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAE;YACpC,IAAI,KAAK,KAAK,SAAS;gBAAE,MAAM,IAAI,WAAW,EAAE;AAChD,YAAA,OAAO,KAAK;QACd;AACA,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,QAAQ,EAAE;AAClD,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;AACxB,QAAA,IAAI;YACF,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;YAChC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;AACxB,YAAA,OAAO,CAAC;QACV;QAAE,OAAO,GAAG,EAAE;AACZ,YAAA,IAAI,EAAE,GAAG,YAAY,QAAQ,CAAC;gBAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,SAAgB,CAAC;AACvE,YAAA,MAAM,GAAG;QACX;gBAAU;AACR,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC;QAC7B;IACF;AAEQ,IAAA,QAAQ,CAAC,IAAY,EAAA;QAC3B,MAAM,MAAM,GAAY,EAAE;QAC1B,IAAI,CAAC,GAAG,CAAC;AACT,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;AACtB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;AACpB,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAAE,gBAAA,CAAC,EAAE;gBAAE;YAAU;AACtC,YAAA,IAAI,IAAI,KAAK,GAAG,EAAE;AAAE,gBAAA,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AAAE,gBAAA,CAAC,EAAE;gBAAE;YAAU;AACjF,YAAA,IAAI,IAAI,KAAK,GAAG,EAAE;AAAE,gBAAA,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AAAE,gBAAA,CAAC,EAAE;gBAAE;YAAU;AACjF,YAAA,IAAI,IAAI,KAAK,GAAG,EAAE;AAAE,gBAAA,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AAAE,gBAAA,CAAC,EAAE;gBAAE;YAAU;AAC/E,YAAA,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAC9B,IAAI,EAAE,GAAG,IAAI;gBACb,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE;oBAChC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;wBAAE,EAAE,IAAI,GAAG;AAAE,wBAAA,CAAC,EAAE;oBAAE;AACtC,yBAAA,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;wBAAE,EAAE,IAAI,GAAG;AAAE,wBAAA,CAAC,EAAE;oBAAE;gBAClE;AACA,gBAAA,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACtC,gBAAA,CAAC,EAAE;gBACH;YACF;AACA,YAAA,IAAI,IAAI,KAAK,GAAG,EAAE;;gBAEhB,IAAI,GAAG,GAAG,EAAE;AACZ,gBAAA,CAAC,EAAE;AACH,gBAAA,SAAS;AACP,oBAAA,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM;wBAAE,MAAM,IAAI,WAAW,EAAE;AAC7C,oBAAA,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AACnB,wBAAA,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG;4BAAE;AACzB,wBAAA,CAAC,EAAE;oBACL;AACA,oBAAA,GAAG,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC;gBAClB;AACA,gBAAA,CAAC,EAAE;AACH,gBAAA,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;gBAC3C;YACF;AACA,YAAA,MAAM,GAAG,GAAG,uCAAuC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACvE,IAAI,GAAG,EAAE;AACP,gBAAA,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9C,gBAAA,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM;gBAClB;YACF;AACA,YAAA,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;;gBAE1B,IAAI,EAAE,GAAG,EAAE;AACX,gBAAA,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AAAE,oBAAA,EAAE,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC;gBAAE;gBAC7E,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAC1B,gBAAA,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AACtC,oBAAA,CAAC,EAAE;oBACH,IAAI,KAAK,GAAG,EAAE;AACd,oBAAA,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AAAE,wBAAA,KAAK,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC;oBAAE;oBAC9E,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAChC,oBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC;wBAAE,MAAM,IAAI,WAAW,EAAE;oBAC5F,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACrF;AAAO,qBAAA,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;AACtC,oBAAA,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxD;qBAAO;AACL,oBAAA,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC9D;gBACA;YACF;;YAEA,MAAM,IAAI,WAAW,EAAE;QACzB;AACA,QAAA,OAAO,MAAM;IACf;AAEQ,IAAA,KAAK,CAAC,MAAe,EAAA;QAC3B,IAAI,GAAG,GAAG,CAAC;AACX,QAAA,MAAM,IAAI,GAAG,CAAC,GAAG,GAAa,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;AACtH,QAAA,MAAM,MAAM,GAAG,CAAC,IAAe,KAAI;AACjC,YAAA,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,KAAK,IAAI;gBAAE,MAAM,IAAI,WAAW,EAAE;AACvD,YAAA,GAAG,EAAE;AACP,QAAA,CAAC;QAED,MAAM,SAAS,GAAG,MAAc;AAC9B,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC;AACzB,YAAA,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,WAAW,EAAE;AACnC,YAAA,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;AAAE,gBAAA,GAAG,EAAE;AAAE,gBAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YAAE;AACjG,YAAA,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;AAAE,gBAAA,GAAG,EAAE;gBAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;YAAE;AACrF,YAAA,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;AAAE,gBAAA,GAAG,EAAE;gBAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;YAAE;AACjF,YAAA,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;AAAE,gBAAA,GAAG,EAAE;gBAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;YAAE;AACnF,YAAA,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE;AAC/B,gBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK;AACxB,gBAAA,GAAG,EAAE;gBACL,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,KAAK,SAAS,EAAE;AACnC,oBAAA,GAAG,EAAE;oBACL,MAAM,IAAI,GAAc,EAAE;oBAC1B,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,KAAK,SAAS,EAAE;AACnC,wBAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;wBAC5B,OAAO,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,KAAK,OAAO,EAAE;AACpC,4BAAA,GAAG,EAAE;AACL,4BAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;wBAC9B;oBACF;oBACA,MAAM,CAAC,SAAS,CAAC;oBACjB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE;gBACrC;gBACA,IAAI,IAAI,KAAK,MAAM;oBAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;gBACzD,IAAI,IAAI,KAAK,OAAO;oBAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE;AAC3D,gBAAA,MAAM,IAAI,WAAW,EAAE,CAAC;YAC1B;AACA,YAAA,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE;AAC5B,gBAAA,GAAG,EAAE;AACL,gBAAA,MAAM,IAAI,GAAG,eAAe,EAAE;gBAC9B,MAAM,CAAC,SAAS,CAAC;AACjB,gBAAA,OAAO,IAAI;YACb;YACA,MAAM,IAAI,WAAW,EAAE;AACzB,QAAA,CAAC;;QAGD,MAAM,UAAU,GAAG,MAAc;AAC/B,YAAA,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE;AAAE,gBAAA,GAAG,EAAE;gBAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE;YAAE;AACpE,YAAA,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE;AAAE,gBAAA,GAAG,EAAE;gBAAE,OAAO,UAAU,EAAE;YAAE;AAC7C,YAAA,IAAI,IAAI,GAAG,SAAS,EAAE;AACtB,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE;AAAE,gBAAA,GAAG,EAAE;gBAAE,IAAI,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE;YAAE;AACnE,YAAA,OAAO,IAAI;AACb,QAAA,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,IAAmB,EAAE,GAAG,GAAa,KAAK,MAAc;AACtE,YAAA,IAAI,IAAI,GAAG,IAAI,EAAE;AACjB,YAAA,OAAO,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE;gBACnB,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK;AACpC,gBAAA,IAAI,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAChE;AACA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC;;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC;QAC1C,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,CAAC;QAChD,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,CAAC;QAC/C,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC;AAC1C,QAAA,MAAM,eAAe,GAAG,MAAM,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;AAE5E,QAAA,MAAM,GAAG,GAAG,eAAe,EAAE;AAC7B,QAAA,IAAI,GAAG,KAAK,MAAM,CAAC,MAAM;YAAE,MAAM,IAAI,WAAW,EAAE;AAClD,QAAA,OAAO,GAAG;IACZ;;AAGQ,IAAA,MAAM,CAAC,IAAa,EAAA;QAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AAChC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAAE,MAAM,IAAI,WAAW,EAAE;AAC7C,QAAA,OAAO,CAAC;IACV;AAEQ,IAAA,WAAW,CAAC,IAAa,EAAA;AAC/B,QAAA,QAAQ,IAAI,CAAC,IAAI;AACf,YAAA,KAAK,QAAQ;AAAE,YAAA,KAAK,QAAQ;AAAE,YAAA,KAAK,MAAM,EAAE,OAAO,IAAI,CAAC,KAAK;AAC5D,YAAA,KAAK,MAAM,EAAE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3C,YAAA,KAAK,OAAO,EAAE,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;YACpD,KAAK,KAAK,EAAE;AACV,gBAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAK,CAAC,CAAC;AAC3C,gBAAA,OAAO,CAAC,YAAY,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC;YAC3C;YACA,KAAK,SAAS,EAAE;AACd,gBAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAK,CAAC,CAAC;AAC3C,gBAAA,OAAO,CAAC,YAAY,YAAY,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG;YAChD;AACA,YAAA,KAAK,QAAQ,EAAE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAS,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAK,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAM,CAAC,CAAC;AACpG,YAAA,KAAK,MAAM,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAK,EAAE,IAAI,CAAC,IAAK,CAAC;;QAEvD,MAAM,IAAI,WAAW,EAAE;IACzB;AAEQ,IAAA,MAAM,CAAC,EAAU,EAAE,IAAW,EAAE,KAAY,EAAA;QAClD,IAAI,IAAI,YAAY,YAAY;AAAE,YAAA,OAAO,IAAI;QAC7C,IAAI,KAAK,YAAY,YAAY;AAAE,YAAA,OAAO,KAAK;QAC/C,IAAI,EAAE,KAAK,GAAG;YAAE,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;AACnD,QAAA,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;YAClD,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;AAC9B,YAAA,OAAO,EAAE,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QAC/H;AACA,QAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC7C,IAAI,CAAC,YAAY,YAAY;AAAE,YAAA,OAAO,CAAC;QACvC,IAAI,CAAC,YAAY,YAAY;AAAE,YAAA,OAAO,CAAC;QACvC,QAAQ,EAAE;AACR,YAAA,KAAK,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC;AACtB,YAAA,KAAK,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC;AACtB,YAAA,KAAK,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC;AACtB,YAAA,KAAK,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;YACvC,KAAK,GAAG,EAAE;gBACR,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACxB,gBAAA,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC;YACpD;;QAEF,MAAM,IAAI,WAAW,EAAE;IACzB;IAEQ,IAAI,CAAC,IAAY,EAAE,QAAmB,EAAA;AAC5C,QAAA,IAAI,IAAI,KAAK,IAAI,EAAE;YACjB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;gBAAE,MAAM,IAAI,WAAW,EAAE;AACvE,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,IAAI,IAAI,YAAY,YAAY;AAAE,gBAAA,OAAO,IAAI;AAC7C,YAAA,IAAI,IAAI;gBAAE,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;YAC3E,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK;QACpE;AACA,QAAA,IAAI,IAAI,KAAK,aAAa,EAAE;YAC1B,IAAI,GAAG,GAAG,EAAE;AACZ,YAAA,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE;gBACxB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;gBACxB,IAAI,CAAC,YAAY,YAAY;AAAE,oBAAA,OAAO,CAAC;AACvC,gBAAA,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC;YAClB;AACA,YAAA,OAAO,GAAG;QACZ;AACA,QAAA,IAAI,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,WAAW,EAAE;;QAEtF,MAAM,IAAI,GAAa,EAAE;AACzB,QAAA,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE;YACxB,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AAC7B,YAAA,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO;YAC1D,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;AAC1C,gBAAA,IAAI,CAAC,YAAY,YAAY,EAAE;oBAC7B,IAAI,IAAI,KAAK,OAAO;wBAAE;AACtB,oBAAA,OAAO,CAAC;gBACV;gBACA,IAAI,OAAO,CAAC,KAAK,QAAQ;AAAE,oBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAClC,qBAAA,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,IAAI,EAAE;AAClC,oBAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;AACrB,oBAAA,IAAI,CAAC,YAAY,YAAY,EAAE;wBAC7B,IAAI,IAAI,KAAK,OAAO;4BAAE;AACtB,wBAAA,OAAO,CAAC;oBACV;AACA,oBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBACd;YACF;QACF;QACA,QAAQ,IAAI;YACV,KAAK,KAAK,EAAE,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClD,YAAA,KAAK,OAAO,EAAE,OAAO,IAAI,CAAC,MAAM;AAChC,YAAA,KAAK,SAAS,EAAE,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI;YACzF,KAAK,KAAK,EAAE,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;YACtD,SAAS,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;;IAEvD;AAEQ,IAAA,cAAc,CAAC,KAAa,EAAA;AAClC,QAAA,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;AAC3C,QAAA,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACxC,QAAA,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACtC,MAAM,MAAM,GAAY,EAAE;;QAE1B,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;YACzD,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;AACzD,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAChD;QACF;AACA,QAAA,OAAO,MAAM;IACf;AAEQ,IAAA,QAAQ,CAAC,GAAW,EAAA;QAC1B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAE;AAC5C,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,KAAK,GAAG,GAAG,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACvG,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAClC,QAAA,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;IACnB;IAEQ,KAAK,CAAC,GAAW,EAAE,QAAgB,EAAA;QACzC,IAAI,GAAG,GAAG,EAAE;AACZ,QAAA,IAAI,CAAC,GAAG,QAAQ,GAAG,CAAC;AACpB,QAAA,OAAO,CAAC,GAAG,CAAC,EAAE;AACZ,YAAA,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,GAAG;AACpD,YAAA,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B;AACA,QAAA,OAAO,CAAA,EAAG,GAAG,CAAA,EAAG,GAAG,EAAE;IACvB;AACD;AAED;AACA,SAAS,QAAQ,CAAC,CAAQ,EAAA;IACxB,IAAI,CAAC,YAAY,YAAY;AAAE,QAAA,OAAO,CAAC;IACvC,IAAI,CAAC,KAAK,IAAI;AAAE,QAAA,OAAO,CAAC;IACxB,IAAI,OAAO,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;IAC5C,IAAI,OAAO,CAAC,KAAK,QAAQ;AAAE,QAAA,OAAO,CAAC;AACnC,IAAA,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;AAClB,IAAA,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC;AACpC,IAAA,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;AAChC;AAEA,SAAS,MAAM,CAAC,CAAQ,EAAA;IACtB,IAAI,CAAC,KAAK,IAAI;AAAE,QAAA,OAAO,EAAE;IACzB,IAAI,OAAO,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,GAAG,MAAM,GAAG,OAAO;IACvD,IAAI,OAAO,CAAC,KAAK,QAAQ;AAAE,QAAA,OAAO,UAAU,CAAC,CAAC,CAAC;AAC/C,IAAA,OAAO,MAAM,CAAC,CAAC,CAAC;AAClB;AAEA,SAAS,MAAM,CAAC,CAAQ,EAAA;IACtB,IAAI,CAAC,YAAY,YAAY;AAAE,QAAA,OAAO,CAAC;IACvC,IAAI,CAAC,KAAK,IAAI;AAAE,QAAA,OAAO,KAAK;IAC5B,IAAI,OAAO,CAAC,KAAK,SAAS;AAAE,QAAA,OAAO,CAAC;IACpC,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,KAAK,CAAC;AACzC,IAAA,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;IACzB,OAAO,CAAC,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,OAAO,GAAG,KAAK,GAAG,KAAK;AAC5D;AAEA;AACA,SAAS,OAAO,CAAC,CAAQ,EAAE,CAAQ,EAAA;IACjC,IAAI,CAAC,KAAK,IAAI;QAAE,CAAC,GAAG,OAAO,CAAC,KAAK,QAAQ,GAAG,EAAE,GAAG,OAAO,CAAC,KAAK,SAAS,GAAG,KAAK,GAAG,CAAC;IACnF,IAAI,CAAC,KAAK,IAAI;QAAE,CAAC,GAAG,OAAO,CAAC,KAAK,QAAQ,GAAG,EAAE,GAAG,OAAO,CAAC,KAAK,SAAS,GAAG,KAAK,GAAG,CAAC;AACnF,IAAA,MAAM,IAAI,GAAG,CAAC,CAAQ,KAAK,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,CAAC;IACpF,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACjD,IAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;AACzB,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,GAAI,CAAY,CAAC,WAAW,EAAE;QAC1D,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;IACnC;AACA,IAAA,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;AACnC;;ACnaA,MAAMA,WAAS,GAAG,CAAC,GAAY,KAAaC,WAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;AAE3F;AACM,SAAUC,YAAU,CAAC,GAAW,EAAE,IAAY,EAAA;AAClD,IAAA,MAAM,CAAC,GAAG,8DAA8D,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACjG,MAAM,GAAG,GAAG,CAAC,IAAI;QACf,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;AAC9C,QAAA,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;KAC/D;IACD,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAIJ,aAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAIC,UAAQ,CAAC,EAAE;QAC9G,MAAM,IAAI,KAAK,CAAC,CAAA,QAAA,EAAW,IAAI,CAAA,EAAA,EAAK,GAAG,CAAA,EAAA,CAAI,CAAC;IAC9C;AACA,IAAA,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE;AACnI;AAGA,MAAM,QAAQ,GAAG,CAAC,CAAM,EAAE,CAAM,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE;AAEjG,SAASI,cAAY,CAAC,CAAyB,EAAA;AAC7C,IAAA,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,IAAI,CAAC;AAC5D;AAGA;AACA,MAAM,WAAW,GAAG,CAAC,GAAW,KAAK,GAAG,CAAC,OAAO,CAAC,mBAAmB,EAAE,UAAU,CAAC;AAEjF,SAAS,SAAS,CAAC,CAAS,EAAA;IAC1B,MAAM,IAAI,GAAGH,WAAS,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;;AAExC,IAAA,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAA,wBAAA,EAA2B,IAAI,MAAM,GAAG,CAAA,GAAA,EAAM,IAAI,MAAM;AACrF;AAEA;AACA,MAAM,OAAO,GAAG,CAAC,IAA4B,KAAK,OAAO,IAAI,KAAK,QAAQ,GAAG,CAAA,GAAA,EAAM,SAAS,CAAC,IAAI,CAAC,CAAA,IAAA;MAC9F,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA,GAAA,EAAM,GAAG,CAAC,IAAI,GAAG,QAAQ,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,GAAG,EAAE,CAAA,EAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AAE1H,MAAM,GAAG,GAAG,qEAAqE;AAQjF;AACM,SAAU,kBAAkB,CAAC,QAAgB,EAAA;IACjD,IAAI,IAAI,GAAG,CAAC;AACZ,IAAA,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;QAC7C,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,MAAM,CAAC;AAClD,QAAA,IAAI,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IAChC;IACA,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,MAAM,CAAC;AAClD,IAAA,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,MAAM,GAAG,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE;AACrE;AAEA,MAAM,UAAU,GAAG,CAAC,IAAY,KAAK,CAAA,CAAA,EAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG;AAUpE,MAAM,MAAM,GAAG,CAAC,CAAO,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC;AACrE,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,CAAU,KAAK,CAAC,KAAK,SAAS,GAAG,EAAE,GAAG,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAIA,WAAS,CAAC,CAAC,CAAC,CAAA,EAAA,EAAK,GAAG,GAAG;AAEtG,SAAS,YAAY,CAAC,CAAqB,EAAA;IACzC,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,GAAG,CAAA,2CAAA,EAA8C,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA,kBAAA,CAAoB,GAAG,EAAE;IACpH,OAAO,CAAA;AAC0O,kPAAA,CAAA;AAC/O,QAAA,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC;QACvI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,OAAO,GAAG,sBAAsB;AACpH;AAEA,SAAS,WAAW,CAAC,CAAqB,EAAA;IACxC,OAAO,CAAA;AAC0H,iIAAA,EAAA,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAA,EAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe;AAC/M;AAEA;AACA,SAAS,mBAAmB,CAAC,IAAY,EAAA;AACvC,IAAA,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACxK,QAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,CAAA,CAAA,CAAG,CAAC;IACnD;AACF;AAEA;AACA;MACa,WAAW,CAAA;AAUF,IAAA,aAAA;AATZ,IAAA,WAAW,GAAG,IAAI,WAAW,EAAE;AAC/B,IAAA,oBAAoB,GAAG,IAAI,oBAAoB,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC7F,IAAA,aAAa,GAAG,IAAI,aAAa,EAAE;IACnC,MAAM,GAAgF,EAAE;AACxF,IAAA,aAAa,GAAG,IAAI,GAAG,EAAkB;IACzC,gBAAgB,GAAG,CAAC;;AAEpB,IAAA,KAAK,GAAG,IAAI,GAAG,EAAkF;AAEzG,IAAA,WAAA,CAAoB,gBAA+B,EAAE,EAAA;QAAjC,IAAA,CAAA,aAAa,GAAb,aAAa;IAAuB;AAExD,IAAA,QAAQ,CAAC,IAAY,EAAE,IAAgC,EAAE,UAAwB,EAAE,EAAA;AACjF,QAAA,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AACrD,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI;AAC/B,QAAA,IAAI,IAAI,KAAK,SAAS,IAAI,EAAE,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,GAAG,CAAC;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,wCAAwC,IAAI,CAAA,CAAE,CAAC;AACvH,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AACzC,QAAA,OAAO,IAAI;IACb;;AAGA,IAAA,KAAK,CAAC,IAAY,EAAE,OAAA,GAAwB,EAAE,EAAA;QAC5C,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC;QACxD;QACA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5B,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC7B;AACA,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC;AAC1F,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU;QAChC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,YAAY,IAAI,EAAE,EAAE;AACrD,YAAA,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC;YAC3B,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,OAAA,EAAU,CAAC,CAAC,KAAK,CAAA,mBAAA,EAAsB,CAAC,CAAC,IAAI,CAAA,WAAA,CAAa,CAAC;AACpJ,YAAA,MAAM,GAAG,GAAG,CAAA,EAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAA,CAAA,EAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;AACtD,YAAA,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,CAAA,wBAAA,EAA2B,CAAC,CAAC,IAAI,CAAA,CAAA,CAAG,CAAC;AAC1E,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;QACjB;AACA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU;AAE3C,QAAA,MAAM,GAAG,GAAG,IAAI,eAAe,EAAE;QACjC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE;YAClE,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE;YAC9B,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,YAAY,UAAU,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AAClF,YAAA,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC;AAC7B,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,cAAc,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,GAAG,CAAA,CAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAClG;QACA,IAAI,QAAQ,GAAG,CAAC;QAChB,MAAM,aAAa,GAAa,EAAE;;QAGlC,CAAC,YAAW;AACV,YAAA,IAAI;AACF,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;AAChC,gBAAA,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;AACjE,gBAAA,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,iBAAiB,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACxE,gBAAA,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,4BAA4B,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACpF,IAAI,KAAK,EAAE;AACT,oBAAA,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,mBAAmB,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;AACtE,oBAAA,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,kBAAkB,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;gBACtE;AAEA,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;;AAE5B,oBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;oBAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;wBAC7B,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAG;AAC/D,4BAAA,IAAIG,cAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO;AAAE,gCAAA,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;4BACxE,MAAM,CAAC,GAAG,CAACA,cAAY,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK;AACjI,4BAAA,OAAO,CAAC,YAAY,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC;wBAChD,CAAC,CAAC,CAAC,CAAC;AACJ,wBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc;4BAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC;oBAChF;oBACA,MAAM,KAAK,GAAe,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;AACrD,oBAAA,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;AACrD,oBAAA,MAAM,GAAG,CAAC,OAAO,CAAC,CAAA,mBAAA,EAAsB,CAAC,GAAG,CAAC,CAAA,IAAA,CAAM,EAAE,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;oBACnK,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE;AACzC,oBAAA,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,EAAE,QAAQ,GAAG,CAAC;AAC9C,oBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;AACrH,oBAAA,IAAI,IAAI;AAAE,wBAAA,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAA,yBAAA,EAA4B,CAAC,GAAG,CAAC,CAAA,SAAA,CAAW,EAAE,IAAI,CAAC;AAC1F,oBAAA,IAAI,OAAO;wBAAE,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC;AAC1D,oBAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE;AACzB,wBAAA,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACzB,wBAAA,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,cAAc,CAAC,GAAG,CAAC,CAAA,IAAA,CAAM,EAAE,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;wBACpF,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAA,sBAAA,EAAyB,CAAC,GAAG,CAAC,CAAA,IAAA,CAAM,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;oBACnG;oBACA,KAAK,MAAM,CAAC,IAAI,WAAW;wBAAE,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAA,eAAA,EAAkB,CAAC,CAAC,EAAE,CAAA,IAAA,CAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;gBAC7H;;gBAEA,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,qBAAqB,EAAE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;;;AAInH,gBAAA,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,sBAAsB,EAAE,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAClF,gBAAA,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;AAEvE,gBAAA,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE;AACjD,oBAAA,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,CAAA,CAAE,EAAE,IAAI,cAAc,CAAC,EAAE,KAAK,CAAC,CAAC,EAAA,EAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACpG;AACA,gBAAA,MAAM,GAAG,CAAC,KAAK,EAAE;YACnB;YAAE,OAAO,GAAG,EAAE;AACZ,gBAAA,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;YAChB;QACF,CAAC,GAAG;QAEJ,OAAO,GAAG,CAAC,MAAM;IACnB;;IAGQ,UAAU,GAAA;QAChB,MAAM,IAAI,GAA4E,EAAE;AACxF,QAAA,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU;QAC/B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,KAAI;YAC/B,MAAM,KAAK,GAAU,EAAE;YACvB,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE;;AAE9C,gBAAA,IAAI,KAAK,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;AACxD,gBAAA,IAAI;AAAE,oBAAA,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE;AAAE,gBAAA,MAAM;oBAAE,KAAK,GAAG,KAAK;gBAAE;AAChE,gBAAA,IAAI,CAAC,KAAK;oBAAE,MAAM,IAAI,KAAK,CAAC,CAAA,iCAAA,EAAoC,KAAK,CAAC,IAAI,CAAA,EAAA,CAAI,CAAC;gBAC/E,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AACnC,gBAAA,MAAM,CAAC,GAAG,6CAA6C,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC1F,gBAAA,IAAI,CAAC,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,CAAA,qBAAA,EAAwB,KAAK,CAAC,GAAG,CAAA,EAAA,CAAI,CAAC;gBAC9D,MAAM,GAAG,GAAGD,YAAU,CAAC,KAAK,CAAC,GAAG,EAAE,aAAa,CAAC;AAChD,gBAAA,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,OAAA,EAAU,KAAK,CAAC,IAAI,CAAA,mCAAA,EAAsC,KAAK,CAAC,IAAI,CAAA,EAAA,CAAI,CAAC;;gBAEhI,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,IAAI,QAAQ,CAACA,YAAU,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,GAAG,CAAC,CAAC;AAClG,gBAAA,IAAI,KAAK;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,OAAA,EAAU,KAAK,CAAA,kBAAA,EAAqB,KAAK,CAAC,IAAI,eAAe,KAAK,CAAC,IAAI,CAAA,4CAAA,CAA8C,CAAC;AACjJ,gBAAA,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;gBACf,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5B,gBAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;AACxC,gBAAA,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO;gBAC3B,IAAI,CAAC,OAAO,EAAE;oBACZ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;wBAAE,MAAM,IAAI,KAAK,CAAC,CAAA,OAAA,EAAU,KAAK,CAAC,IAAI,CAAA,+CAAA,CAAiD,CAAC;oBACtH,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;AACvD,oBAAA,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;wBAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;AAC9B,wBAAA,MAAM,CAAC,GAAGC,cAAY,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI;AAChD,wBAAA,OAAO,CAAC,IAAI,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;AACnC,oBAAA,CAAC,CAAC;gBACJ;AACA,gBAAA,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,OAAA,EAAU,KAAK,CAAC,IAAI,CAAA,MAAA,EAAS,KAAK,gBAAgB,OAAO,CAAC,MAAM,CAAA,OAAA,CAAS,CAAC;AACxH,gBAAA,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,EAAE;oBAC/F,MAAM,IAAI,KAAK,CAAC,CAAA,OAAA,EAAU,KAAK,CAAC,IAAI,CAAA,uCAAA,CAAyC,CAAC;gBAChF;gBACA,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;YAC9D;AACF,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,MAAM,YAAY,CAAC,GAAoB,EAAE,CAAS,EAAE,MAAoB,EAAA;QAC9E,MAAM,OAAO,GAAa,EAAE;QAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,IAAG;AAC5B,YAAA,MAAM,MAAM,GAAG,CAAA,GAAA,EAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,IAAI,EAAE;YACrD,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;YAC/B,IAAI,CAAC,GAAG,CAAC;gBAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AACvC,YAAA,OAAO,CAAA,GAAA,EAAM,CAAC,GAAG,CAAC,EAAE;AACtB,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAA,mBAAA,EAAsB,CAAC,CAAA,IAAA,CAAM,EAAE,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QACxI,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAC5B,wBAAwB,CAAC,GAAG,CAAC,CAAA,2FAAA,EAA8F,CAAC,CAAA,GAAA,CAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7I,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAA,yBAAA,EAA4B,CAAC,CAAA,SAAA,CAAW,EAAE,CAAA;sFACW,IAAI,CAAA,gBAAA,CAAkB,CAAC;IAC3G;IAEQ,YAAY,CAAC,IAAW,EAAE,OAAqB,EAAA;QACrD,MAAM,SAAS,GAAa,EAAE;AAC9B,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACtB,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,KAAI;AACvB,gBAAA,MAAM,GAAG,GAAGA,cAAY,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI;AAClD,gBAAA,MAAM,GAAG,GAAG,GAAG,YAAY,IAAI,GAAG,qBAAqB,GAAG,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE;;gBAE9G,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;gBAC9D,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,QAAQ,GAAG,SAAS,CAAC,EAAE,CAAC;AAAE,oBAAA,SAAS,CAAC,EAAE,CAAC,GAAG,QAAQ;AAC1E,YAAA,CAAC,CAAC;QACJ;QACA,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,EAAE;AACjD,QAAA,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;AAC5C,YAAA,IAAI,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,SAAS,IAAI,SAAS,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE;AACzE,gBAAA,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG;YAClE;QACF;IACF;AAEQ,IAAA,MAAM,YAAY,CAAC,GAAoB,EAAE,QAAgB,EAAE,OAAe,EAAA;AAChF,QAAA,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE;QACjC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;AACpC,QAAA,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC;AAChC,YAAA,KAAK,CAAC,CAAC,EAAA,EAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AACxC,SAAA,CAAC;QACF,MAAM,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC;IACrC;;IAGQ,uBAAuB,CAAC,IAAgC,EAAE,OAAqB,EAAE,KAAiB,EAAE,MAAc,EAAE,QAAiB,EAAA;AAC3I,QAAA,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE;AACjC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC;QAC9E,OAAO,IAAI,cAAc,CAAC;YACxB,MAAM,IAAI,CAAC,UAAU,EAAA;gBACnB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE;AAC3C,gBAAA,IAAI,IAAI;oBAAE,UAAU,CAAC,KAAK,EAAE;;oBACvB,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAChD,CAAC;AACD,YAAA,MAAM,MAAM,GAAA;AACV,gBAAA,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;YAChC;AACD,SAAA,CAAC;IACJ;;;AAIQ,IAAA,OAAO,kBAAkB,CAAC,IAAgC,EAAE,OAAqB,EAAE,KAAiB,EAAE,MAAc,EAAE,QAAiB,EAAA;AAC7I,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK;QACzB,MAAM,UAAU,GAAa,EAAE;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC;QAC1F,IAAI,SAAS,GAAG,EAAE;AAClB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;YACjC,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE;AACpC,YAAA,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC;AAClD,YAAA,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,YAAY;gBAAE;YACzD,SAAS,IAAI,CAAA,UAAA,EAAa,CAAC,GAAG,CAAC,CAAA,OAAA,EAAU,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,KAAK,KAAK,SAAS,GAAG,CAAA,QAAA,EAAWH,WAAS,CAAC,KAAK,CAAC,CAAA,iBAAA,CAAmB,GAAG,EAAE,CAAA,CAAE;AAC3H,gBAAA,CAAA,EAAG,CAAC,CAAC,MAAM,GAAG,aAAa,GAAG,EAAE,CAAA,EAAG,CAAC,CAAC,YAAY,GAAG,CAAA,eAAA,EAAkBA,WAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAA,CAAA,CAAG,GAAG,EAAE,IAAI;QAC/G;QACA,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAI;AACnE,YAAA,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AACnB,YAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAGD,UAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,CAAA,iBAAA,EAAoB,CAAC,CAAA,0BAAA,EAA6BA,UAAQ,CAAA,CAAA,CAAG,CAAC;AACjI,YAAA,OAAO,CAAC,CAAC,EAAE,CAAC,CAAU;QACxB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9B,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAC7C,CAAC,CAAC,EAAE,CAAA,EAAG,CAAC,CAAC,MAAM,KAAK,SAAS,GAAG,QAAQC,WAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA,kBAAA,CAAoB,GAAG,EAAE,CAAA,EAAG,CAAC,CAAC,MAAM,GAAG,aAAa,GAAG,EAAE,CAAA,EAAG,CAAC,CAAC,YAAY,GAAG,CAAA,eAAA,EAAkBA,WAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAA,CAAA,CAAG,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAClM,IAAI,aAAa,GAAG,CAAC;;AAErB,QAAA,MAAM,gBAAgB,GAAG,CAAC,KAAa,KAAI;YACzC,IAAI,GAAG,GAAG,EAAE;AACZ,YAAA,OAAO,aAAa,GAAG,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,aAAa,EAAE,EAAE;gBACjG,GAAG,IAAI,eAAe,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,IAAA,CAAM;YACxG;AACA,YAAA,OAAO,GAAG;AACZ,QAAA,CAAC;AACD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;AACjF,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,YAAY,IAAI,CAAC,CAAC,CAAC;AACzF,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS;AAC9B,QAAA,MAAM,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC;AAC3F,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,IAAI;AAClC,cAAE,CAAA,SAAA,EAAY,OAAO,CAAC,QAAQ,GAAG,CAAA,eAAA,EAAkB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA,GAAA,CAAK,GAAG,EAAE,CAAA,EAAG,SAAS,GAAG,8BAA8B,GAAG,EAAE,CAAA,UAAA;cACnI,EAAE;AACN,QAAA,MAAM,aAAa,GAAG,UAAU,IAAI;cAChC,CAAA,oCAAA,EAAuC,UAAU,GAAG,CAAA,kBAAA,EAAqB,UAAU,CAAA,CAAA,CAAG,GAAG,EAAE,CAAA,EAAG,UAAU,GAAG,CAAA,kBAAA,EAAqB,UAAU,CAAA,CAAA,CAAG,GAAG,EAAE,CAAA,EAAA;cAClJ,EAAE;QAEN,IAAI,IAAI,GAAG,EAAE;AACb,QAAA,IAAI,OAAO,CAAC,WAAW,EAAE;AACvB,YAAA,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,WAAW;YAChD,IAAI,UAAU,GAAG,aAAa;AAC9B,YAAA,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC;gBAAE,UAAU,GAAG,YAAY;AACnD,YAAA,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC;gBAAE,UAAU,GAAG,UAAU;AACjD,YAAA,MAAM,WAAW,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;YAC9C,IAAI,GAAG,CAAA,cAAA,EAAiB,GAAG,CAAA,UAAA,EAAa,GAAG,kBAAkB,WAAW,CAAA,cAAA,EAAiB,UAAU,CAAA,kBAAA,CAAoB;QACzH;AACA,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE;AAC/B,QAAA,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,aAAa,KAAK,KAAK,GAAG,oBAAoB,GAAG,EAAE,KAAK,IAAI,CAAC,YAAY,KAAK,KAAK,GAAG,wBAAwB,GAAG,EAAE,CAAC;AAC1I,aAAC,IAAI,CAAC,WAAW,GAAG,kBAAkB,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,GAAG,CAAA,YAAA,EAAe,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG,GAAG,EAAE,CAAC;AACzH,QAAA,MAAM,UAAU,GAAG,IAAI,IAAI,SAAS,GAAG,CAAA,sBAAA,EAAyB,SAAS,uBAAuB,IAAI,CAAA,yBAAA,CAA2B,GAAG,EAAE;QAEpI,IAAI,MAAM,GAAG,CAAA,yDAAA,CAA2D;QACxE,MAAM,IAAI,+JAA+J;QACzK,MAAM,IAAI,KAAK,OAAO,CAAA,EAAG,UAAU,CAAA,EAAG,aAAa,IAAI;AACvD,QAAA,MAAM,IAAI,CAAA,EAAA,EAAK,SAAS,GAAG,CAAA,MAAA,EAAS,SAAS,CAAA,OAAA,CAAS,GAAG,EAAE,IAAI;QAC/D,MAAM,IAAI,iBAAiB;AAC3B,QAAA,MAAM,MAAM;QAEZ,IAAI,EAAE,GAAG,CAAC;;AAGV,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,IAAI;AACvC,cAAG,IAA2B,CAAC,MAAM,CAAC,aAAa,CAAC;cAClD,CAAC,qBAAoB,KAAK,MAAM,CAAC,IAAI,IAAa;AAAE,gBAAA,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG;QAErE,IAAI,QAAQ,GAAG,EAAE;;AAEjB,QAAA,IAAI;YACF,OAAO,IAAI,EAAE;AACX,gBAAA,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;AAClD,gBAAA,IAAI,IAAI;oBAAE;AAEV,gBAAA,MAAM,MAAM,GAAG,EAAE,GAAG,CAAC;;gBAErB,IAAI,MAAM,GAAGD,UAAQ;oBAAE,MAAM,IAAI,KAAK,CAAC,CAAA,IAAA,EAAO,MAAM,CAAA,2BAAA,EAA8BA,UAAQ,CAAA,EAAA,CAAI,CAAC;AAC/F,gBAAA,IAAI,GAAG,CAAC,MAAM,GAAGD,aAAW;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,IAAA,EAAO,MAAM,CAAA,KAAA,EAAQ,GAAG,CAAC,MAAM,CAAA,0BAAA,EAA6BA,aAAW,CAAA,SAAA,CAAW,CAAC;AACjI,gBAAA,QAAQ,IAAI,gBAAgB,CAAC,MAAM,CAAC;gBACpC,IAAI,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM;AAAE,oBAAA,aAAa,EAAE;gBAC9D,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,KAAI;oBACpC,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,GAAG,MAAM;AACrC,oBAAA,MAAM,UAAU,GAAeK,cAAY,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE;AAC1E,oBAAA,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK;AAC5B,oBAAA,IAAI,SAAS,GAAG,UAAU,CAAC,KAAK;oBAChC,IAAI,GAAG,YAAY,IAAI,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE;;AAE7C,wBAAA,SAAS,GAAG,EAAE,GAAG,SAAS,EAAE,MAAM,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE;oBAC9D;AACA,oBAAA,MAAM,KAAK,GAAG,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC;AACvE,oBAAA,MAAM,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA,CAAG,GAAG,EAAE;AAE9C,oBAAA,IAAI,UAAU,CAAC,OAAO,KAAK,SAAS,EAAE;wBACpC,MAAM,OAAO,GAAG,OAAO,UAAU,CAAC,OAAO,KAAK,QAAQ,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,OAAO;wBAC1G,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;oBACzE;AAEA,oBAAA,IAAI,UAAU,CAAC,SAAS,EAAE;wBACxB,IAAI,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AACxC,4BAAA,UAAU,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAA,YAAA,EAAeH,WAAS,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA,GAAA,CAAK,CAAC;wBACxG;6BAAO;AACL,4BAAA,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;4BAChC,UAAU,CAAC,IAAI,CAAC,CAAA,gBAAA,EAAmB,MAAM,CAAA,WAAA,EAAc,KAAK,CAAC,MAAM,CAAA,GAAA,CAAK,CAAC;wBAC3E;oBACF;AAEA,oBAAA,IAAI,UAAU,CAAC,OAAO,EAAE;;AAEtB,wBAAA,MAAM,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI;wBACrE,IAAI,KAAK,GAAG,EAAE;wBACd,IAAI,SAAS,GAAG,EAAE;wBAClB,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC;AAAE,4BAAA,SAAS,GAAG,CAAA,GAAA,EAAM,MAAM,CAAA,IAAA,CAAM;AAC7E,6BAAA,IAAI,OAAO,MAAM,KAAK,SAAS,EAAE;4BAAE,KAAK,GAAG,QAAQ;AAAE,4BAAA,SAAS,GAAG,CAAA,GAAA,EAAM,MAAM,GAAG,CAAC,GAAG,CAAC,CAAA,IAAA,CAAM;wBAAE;AAC7F,6BAAA,IAAI,MAAM,YAAY,YAAY,EAAE;4BAAE,KAAK,GAAG,QAAQ;4BAAE,SAAS,GAAG,MAAMA,WAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,IAAA,CAAM;wBAAE;AACxG,6BAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;4BAAE,KAAK,GAAG,UAAU;4BAAE,SAAS,GAAG,CAAA,GAAA,EAAMA,WAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA,IAAA,CAAM;wBAAE;wBACrH,OAAO,CAAA,MAAA,EAAS,MAAM,CAAA,CAAA,EAAI,KAAK,GAAG,KAAK,CAAA,IAAA,EAAOA,WAAS,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA,IAAA,EAAO,SAAS,CAAA,IAAA,CAAM;oBACrH;AAEA,oBAAA,IAAI,UAAU,CAAC,QAAQ,EAAE;;AAEvB,wBAAA,OAAO,CAAA,MAAA,EAAS,MAAM,CAAA,eAAA,EAAkB,KAAK,CAAA,KAAA,EAAQ,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA,SAAA,CAAW;oBAC9F;AACA,oBAAA,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS;AAAE,wBAAA,OAAO,CAAA,MAAA,EAAS,MAAM,CAAA,CAAA,EAAI,KAAK,IAAI;oBAC1E,IAAI,OAAO,GAAG,KAAK,SAAS;AAAE,wBAAA,OAAO,CAAA,MAAA,EAAS,MAAM,CAAA,OAAA,EAAU,KAAK,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,UAAU;AAC/F,oBAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;;wBAE3B,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAA,MAAA,EAAS,MAAM,CAAA,CAAA,EAAI,KAAK,OAAO,GAAG,CAAA,QAAA,CAAU,GAAG,SAAS,MAAM,CAAA,OAAA,EAAU,KAAK,CAAA,iBAAA,CAAmB;oBACzH;AACA,oBAAA,IAAI,GAAG,YAAY,IAAI,EAAE;AACvB,wBAAA,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;AAAE,4BAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,CAAA,CAAE,CAAC;wBAC3E,OAAO,CAAA,MAAA,EAAS,MAAM,CAAA,CAAA,EAAI,KAAK,CAAA,IAAA,EAAO,YAAY,CAAC,GAAG,CAAC,CAAA,QAAA,CAAU;oBACnE;AACA,oBAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC3B,wBAAA,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC;AAC1B,wBAAA,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE;4BACpC,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;4BACvC,IAAI,KAAK,KAAK,SAAS;AAAE,gCAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;4BACrF,IAAI,CAAC,gBAAgB,EAAE;AACvB,4BAAA,OAAO,SAAS,MAAM,CAAA,OAAA,EAAU,KAAK,CAAA,IAAA,EAAO,KAAK,UAAU;wBAC7D;wBACA,OAAO,CAAA,MAAA,EAAS,MAAM,CAAA,eAAA,EAAkB,KAAK,CAAA,KAAA,EAAQ,SAAS,CAAC,GAAG,CAAC,CAAA,SAAA,CAAW;oBAChF;AACA,oBAAA,OAAO,CAAA,MAAA,EAAS,MAAM,CAAA,CAAA,EAAI,KAAK,IAAI;AACrC,gBAAA,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AAEX,gBAAA,QAAQ,IAAI,CAAA,YAAA,EAAe,MAAM,CAAA,CAAA,EAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA,CAAA,EAAI,QAAQ,UAAU;AACrF,gBAAA,EAAE,EAAE;;AAGJ,gBAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,KAAK,EAAE;AAC3B,oBAAA,MAAM,QAAQ;oBACd,QAAQ,GAAG,EAAE;gBACf;YACF;QACF;gBAAU;AACR,YAAA,MAAM,QAAQ,CAAC,MAAM,IAAI;QAC3B;AAEA,QAAA,QAAQ,IAAI,gBAAgB,CAAC,QAAQ,CAAC;AACtC,QAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACvB,YAAA,MAAM,QAAQ;QAChB;QAEA,IAAI,MAAM,GAAG,CAAA,gBAAA,CAAkB;AAC/B,QAAA,IAAI,OAAO,CAAC,UAAU,EAAE;AACtB,YAAA,MAAM,CAAC,GAAG,OAAO,CAAC,UAAU,KAAK,IAAI,GAAG,EAAE,GAAG,OAAO,CAAC,UAAU;;YAE/D,MAAM,OAAO,GAAI,CAAC,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,EAAE,YAAY;iBAC/I,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAA,CAAA,EAAI,CAAC,CAAA,IAAA,CAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,qBAAqB,CAAC,CAAC,QAAQ,GAAG,CAAA,WAAA,EAAc,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA,CAAA,CAAG,GAAG,EAAE,CAAA,oCAAA,EAAuC,OAAO,CAAA,IAAA,CAAM;QACtJ;QAEA,IAAI,OAAO,CAAC,UAAU;YAAE,MAAM,IAAI,sBAAsBA,WAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA,KAAA,CAAO;AAE5F,QAAA,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;;YAEvD,MAAM,KAAK,GAAU,EAAE;AACvB,YAAA,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,UAAU,EAAE;gBACpC,MAAM,GAAG,GAAGE,YAAU,CAAC,GAAG,EAAE,aAAa,CAAC;AAC1C,gBAAA,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,UAAU,GAAG,CAAA,yBAAA,CAA2B,CAAC;AAChG,gBAAA,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;YACjB;YACA,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,mBAAmBF,WAAS,CAAC,GAAG,CAAC,CAAA,GAAA,CAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7F,MAAM,IAAI,CAAA,qBAAA,EAAwB,OAAO,CAAC,UAAU,CAAC,MAAM,CAAA,EAAA,EAAK,MAAM,CAAA,eAAA,CAAiB;QACzF;AAEA,QAAA,IAAI,OAAO,CAAC,kBAAkB,EAAE;AAC9B,YAAA,MAAM,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI;QAC9E;AAEA,QAAA,IAAI,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;YACjE,MAAM,GAAG,GAAG,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,IAAG;gBAC3C,IAAI,IAAI,GAAG,CAAA,OAAA,EAAUA,WAAS,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA,CAAA,CAAG;gBAC3C,IAAI,EAAE,CAAC,IAAI;oBAAE,IAAI,IAAI,UAAUA,WAAS,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG;AACpD,gBAAA,IAAI,EAAE,CAAC,UAAU,KAAK,SAAS;AAAE,oBAAA,IAAI,IAAI,CAAA,aAAA,EAAgB,EAAE,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,GAAG;AACjF,gBAAA,IAAI,EAAE,CAAC,gBAAgB,KAAK,SAAS;AAAE,oBAAA,IAAI,IAAI,CAAA,mBAAA,EAAsB,EAAE,CAAC,gBAAgB,GAAG,CAAC,GAAG,CAAC,GAAG;gBACnG,IAAI,EAAE,CAAC,UAAU;oBAAE,IAAI,IAAI,gBAAgBA,WAAS,CAAC,EAAE,CAAC,UAAU,CAAC,CAAA,CAAA,CAAG;gBACtE,IAAI,EAAE,CAAC,QAAQ;oBAAE,IAAI,IAAI,cAAcA,WAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAA,CAAA,CAAG;gBAChE,IAAI,EAAE,CAAC,gBAAgB,KAAK,SAAS,IAAI,EAAE,CAAC,KAAK;AAAE,oBAAA,IAAI,IAAI,CAAA,mBAAA,EAAsB,EAAE,CAAC,gBAAgB,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG;gBACvH,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,gBAAgB,KAAK,SAAS;oBAAE,IAAI,IAAI,uBAAuB;AACnF,gBAAA,KAAK,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,CAAU,EAAE;oBACzE,IAAI,EAAE,CAAC,CAAC,CAAC;AAAE,wBAAA,IAAI,IAAI,CAAA,CAAA,EAAI,CAAC,CAAA,EAAA,EAAKA,WAAS,CAAC,EAAE,CAAC,CAAC,CAAE,CAAC,CAAA,CAAA,CAAG;gBACnD;;gBAEA,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC9E,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,IAAI,EAAE,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,EAAE;AACpE,oBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,oBAAA,EAAuB,EAAE,CAAC,KAAK,CAAA,KAAA,EAAQ,EAAE,CAAC,MAAM,GAAG,CAAC,CAAA,6EAAA,CAA+E,CAAC;gBACtJ;gBACA,IAAI,KAAK,GAAG,EAAE;AACd,gBAAA,IAAI,EAAE;AAAE,oBAAA,KAAK,IAAI,CAAA,UAAA,EAAaA,WAAS,CAAC,EAAE,CAAC,aAAa;AACxD,gBAAA,IAAI,EAAE;AAAE,oBAAA,KAAK,IAAI,CAAA,UAAA,EAAaA,WAAS,CAAC,EAAE,CAAC,aAAa;AACxD,gBAAA,OAAO,CAAA,gBAAA,EAAmB,IAAI,CAAA,CAAA,EAAI,KAAK,mBAAmB;AAC5D,YAAA,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,CAAA,0BAAA,EAA6B,OAAO,CAAC,eAAe,CAAC,MAAM,CAAA,EAAA,EAAK,GAAG,CAAA,oBAAA,CAAsB;QACrG;QAEA,IAAI,UAAU,CAAC,MAAM;YAAE,MAAM,IAAI,iBAAiB,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA,eAAA,CAAiB;AACtF,QAAA,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,OAAO,CAAC,MAAM,EAAE,MAAM;YAAE,MAAM,IAAI,kCAAkC;AACxE,QAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM;YAAE,MAAM,IAAI,oCAAoC;AACzE,QAAA,IAAI,MAAM;AAAE,YAAA,MAAM,IAAI,CAAA,qBAAA,EAAwB,MAAM,CAAA,EAAA,EAAK,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAA,yBAAA,EAA4B,CAAC,GAAG,CAAC,CAAA,GAAA,CAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,iBAAiB;QAEnK,MAAM,IAAI,cAAc;AACxB,QAAA,MAAM,MAAM;IACd;;IAGQ,qBAAqB,GAAA;QAC3B,IAAI,KAAK,GAAG,EAAE;QACd,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;AAAE,YAAA,KAAK,IAAI,CAAA,IAAA,EAAO,SAAS,CAAC,CAAC,CAAC,OAAO;QAC9E,OAAO,CAAA;gFACqE,IAAI,CAAC,gBAAgB,CAAA,eAAA,EAAkB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAA,EAAA,EAAK,KAAK,CAAA,MAAA,CAAQ;IAC9J;;AAGQ,IAAA,cAAc,CAAC,KAAe,EAAE,OAAe,EAAE,QAAgB,EAAE,QAAkB,EAAA;AAC3F,QAAA,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAC7B,CAAA,qBAAA,EAAwB,CAAC,GAAG,CAAC,CAAA,QAAA,EAAW,GAAG,CAAA,oBAAA,EAAuBA,WAAS,CAAC,MAAM,CAAC,CAAA,yBAAA,CAA2B,CAC/G,CAAC,IAAI,CAAC,EAAE,CAAC;AACV,QAAA,IAAI,OAAO;AAAE,YAAA,IAAI,IAAI,CAAA,oCAAA,EAAuC,GAAG,CAAA,qCAAA,EAAwC,OAAO,SAAS;QACvH,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,IAAI,CAAA,qCAAA,EAAwC,GAAG,CAAA,8BAAA,EAAiC,QAAQ,CAAA,OAAA,CAAS;AACnG,gBAAA,CAAA,gCAAA,EAAmC,GAAG,CAAA,2CAAA,EAA8C,QAAQ,CAAA,OAAA,CAAS;QACzG;QACA,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,KAAI,EAAG,IAAI,IAAI,6BAA6B,CAAC,GAAG,CAAC,CAAA,QAAA,EAAW,GAAG,CAAA,+BAAA,EAAkC,EAAE,CAAA,OAAA,CAAS,CAAC,CAAC,CAAC,CAAC;AACvI,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,EAAE;QACpB,OAAO,CAAA;AAC2E,oFAAA,EAAA,IAAI,kBAAkB;IAC1G;IAEQ,gBAAgB,GAAA;AACtB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KACrC,CAAA,aAAA,EAAgBA,WAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA,WAAA,EAAc,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,GAAG,CAAA,QAAA,EAAW,CAAC,CAAC,OAAO,CAAC,KAAK,CAAA,CAAA,CAAG,GAAG,EAAE,CAAA,UAAA,EAAa,CAAC,GAAG,CAAC,CAAA,GAAA,CAAK,CACrK,CAAC,IAAI,CAAC,EAAE,CAAC;AACV,QAAA,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAG;AAChE,YAAA,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,KAAK,SAAS,GAAG,EAAE,GAAG,kBAAkB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG;YAC9G,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG;YAC1D,OAAO,CAAA,mBAAA,EAAsBA,WAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,CAAA,UAAA,EAAaA,WAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA,CAAA,CAAG,GAAG,EAAE,GAAG,KAAK,CAAA,EAAG,CAAC,CAAC,MAAM,GAAG,aAAa,GAAG,EAAE,CAAA,CAAA,EAAIA,WAAS,CAAC,GAAG,CAAC,CAAA,cAAA,CAAgB;AACnL,QAAA,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACX,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE;;AAEjC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;AACtD,cAAE,CAAA,wDAAA,EAA2D,CAAC,CAAA,aAAA,EAAgBA,WAAS,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA,EAAA,EAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA,CAAE,CAAC,CAAA,cAAA;cAC7J,EAAE,CACL,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACpC,YAAA,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS;YAChC,IAAI,KAAK,GAAG,EAAE;;AAEd,YAAA,MAAM,IAAI,GAAG,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAA,EAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC7G,YAAA,IAAI,IAAI;gBAAE,KAAK,IAAI,sDAAsD,CAAC,CAAA,EAAA,EAAKA,WAAS,CAAC,IAAI,CAAC,CAAA,cAAA,CAAgB;AAC9G,YAAA,IAAI,IAAI,EAAE,cAAc,EAAE;AACxB,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1F,gBAAA,KAAK,IAAI,CAAA,qDAAA,EAAwD,CAAC,CAAA,EAAA,EAAKA,WAAS,CAAC,CAAA,EAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAA,EAAG,IAAI,IAAI,IAAI,CAAA,CAAE,CAAA,CAAE,CAAC,gBAAgB;YAC5K;AACA,YAAA,OAAO,KAAK;AACd,QAAA,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QACX,OAAO,CAAA;;;AAGP,EAAA,EAAA,MAAM,GAAG,CAAC,GAAG,CAAA,qCAAA,EAAwC,MAAM,CAAA,aAAA,EAAgB,MAAM,CAAA,eAAA,CAAiB,GAAG,EAAE;;MAErG,SAAS;;AAEX,EAAA,EAAA,WAAW,IAAI,SAAS,GAAG,CAAA,cAAA,EAAiB,WAAW,CAAA,EAAG,SAAS,CAAA,eAAA,CAAiB,GAAG,EAAE;YACjF;IACV;;IAGQ,WAAW,GAAA;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC;IACtF;IAEQ,iBAAiB,GAAA;AACvB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KACrC,CAAA,qBAAA,EAAwB,CAAC,GAAG,CAAC,CAAA,+GAAA,EAAkH,CAAC,GAAG,CAAC,CAAA,OAAA,CAAS,CAC9J,CAAC,IAAI,CAAC,MAAM,CAAC;QAEd,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QAEvC,OAAO,CAAA;;IAEP,SAAS;yBACY,IAAI,CAAA;yBACJ,QAAQ,CAAA;iBAChB;IACf;IAEQ,aAAa,GAAA;QACnB,OAAO,CAAA;;AAEqI,8IAAA,EAAA,IAAI,CAAC,aAAa,CAAC,UAAU,GAAG;;qJAE3B,GAAG,EAAE;iBACzI;IACf;AAEQ,IAAA,iBAAiB,CAAC,QAAgB,EAAE,aAAuB,EAAE,MAAc,EAAA;QACjF,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAC1C,CAAA,wCAAA,EAA2C,CAAC,GAAG,CAAC,CAAA,+FAAA,CAAiG,CAClJ,CAAC,IAAI,CAAC,MAAM,CAAC;AACd,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnE,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAA,oBAAA,EAAuB,CAAC,CAAA,qBAAA,EAAwB,CAAC,CAAA,GAAA,CAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACtG,QAAA,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAC7D,CAAA,wCAAA,EAA2C,CAAC,GAAG,CAAC,CAAA,+EAAA,CAAiF,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AAC3I,YAAA,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,CAAA,gCAAA,EAAmC,CAAC,gGAAgG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACrK,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAClC,CAAA,oCAAA,EAAuC,CAAC,GAAG,CAAC,CAAA,2FAAA,CAA6F,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACrJ,aAAC,aAAa,CAAC,MAAM,GAAG,mGAAmG,GAAG,EAAE,CAAC;QAEnI,OAAO,CAAA;;;;AAIP,EAAA,EAAA,UAAU,GAAG,gBAAgB;;IAE7B,cAAc;;AAE4G,4HAAA,EAAA,IAAI,CAAC,aAAa,CAAC,UAAU,GAAG;;+HAE/B,GAAG,EAAE;SAC3H;IACP;AAGD;AAED,SAAS,YAAY,CAAC,IAAgB,EAAA;AACpC,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,EAAE;IACpB,IAAI,GAAG,GAAG,EAAE;IACZ,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,kBAAkB,EAAE;QAC7C,GAAG,IAAI,CAAA,eAAA,EAAkB,IAAI,CAAC,kBAAkB,GAAG,yBAAyB,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,GAAG,gBAAgB,GAAG,EAAE,CAAA,IAAA,CAAM;IAClI;;AAEA,IAAA,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;IACvG,MAAM,CAAC,GAAGA,WAAS;IACnB,GAAG,IAAI,wBAAwB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA,SAAA,EAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA,OAAA,EAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA,UAAA,EAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA,UAAA,EAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO;AAC/J,IAAA,MAAM,KAAK,GAAG;AACZ,QAAA,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,CAAA,WAAA,EAAc,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA,CAAA,CAAG;AAClE,QAAA,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,CAAA,OAAA,EAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA,CAAA,CAAG;AACtD,QAAA,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,CAAA,YAAA,EAAe,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA,CAAA,CAAG;AACrE,QAAA,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,CAAA,aAAA,EAAgB,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA,CAAA,CAAG;QACxE,IAAI,CAAC,WAAW,IAAI,CAAA,aAAA,EAAgB,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA,CAAA,CAAG;KAC3D,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC3B,IAAA,IAAI,KAAK;AAAE,QAAA,GAAG,IAAI,CAAA,aAAA,EAAgB,KAAK,CAAA,IAAA,CAAM;IAC7C,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE;AAC9B,QAAA,GAAG,IAAI,CAAA,gBAAA,EAAmB,IAAI,CAAC,MAAM,GAAG,CAAA,WAAA,EAAcA,WAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA,YAAA,CAAc,GAAG,EAAE,CAAA,EAAG,IAAI,CAAC,MAAM,GAAG,CAAA,WAAA,EAAcA,WAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA,YAAA,CAAc,GAAG,EAAE,mBAAmB;IAC5L;AACA,IAAA,OAAO,GAAG;AACZ;AAEA,SAAS,WAAW,CAAC,QAAgC,EAAA;IACnD,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;AACvE,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAA,cAAA,EAAiB,CAAC,CAAC,GAAG,CAAA,YAAA,EAAe,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,WAAW,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IAC1K,OAAO,CAAA;uFAC8E,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAA,QAAA,EAAWA,WAAS,CAAC,CAAC,CAAC,CAAA,SAAA,CAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA,uBAAA,EAA0B,IAAI,CAAA,yBAAA,CAA2B;AAC7M;AAEA;AACA,SAAS,MAAM,CAAC,QAAgC,EAAE,KAAa,EAAA;IAC7D,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAC/B,CAAA,qBAAA,EAAwB,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA,uHAAA,EAA0H,CAAC,GAAG,CAAC,CAAA,2DAAA,CAA6D;QACxO,CAAA,qGAAA,CAAuG;QACvG,CAAA,yFAAA,CAA2F;QAC3F,CAAA,oEAAA,CAAsE;QACtE,CAAA,UAAA,EAAa,CAAC,CAAC,GAAG,GAAG,CAAC,CAAA,MAAA,EAAS,CAAC,CAAC,GAAG,CAAA,MAAA,EAAS,CAAC,CAAC,GAAG,GAAG,CAAC,CAAA,MAAA,EAAS,CAAC,CAAC,GAAG,GAAG,CAAC,CAAA,4CAAA,CAA8C;AACtH,QAAA,CAAA,OAAA,EAAU,CAAC,CAAC,GAAG,CAAA,kBAAA,EAAqB,CAAC,CAAC,GAAG,CAAA,oCAAA,CAAsC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AAC3F,IAAA,OAAO,CAAA,gJAAA,CAAkJ;AACvJ,QAAA,CAAA,wDAAA,EAA2D,KAAK,CAAA,mBAAA,CAAqB;QACrF,CAAA,gMAAA,CAAkM;QAClM,CAAA,EAAG,MAAM,QAAQ;AACrB;AAEA,SAAS,QAAQ,CAAC,KAAmB,EAAE,EAAU,EAAE,OAAiB,EAAA;AAClE,IAAA,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AACxC,IAAA,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,KAAK,KAAK,GAAG,EAAE,GAAG,CAAA,iBAAA,EAAoB,GAAG,KAAK;AAC7E,IAAA,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAA,iBAAA,EAAoB,CAAC,GAAG,CAAC,CAAA,QAAA,EAAWA,WAAS,CAAC,CAAC,CAAC,CAAA,GAAA,CAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IAClG,OAAO,CAAA;AACsE,6EAAA,EAAA,EAAE,WAAWA,WAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA,eAAA,EAAkBA,WAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA,OAAA,EAAU,GAAG,CAAA,qBAAA,CAAuB;AACxL,QAAA,CAAA,EAAG,MAAM,CAAA,qBAAA,EAAwB,OAAO,CAAC,MAAM,CAAA,EAAA,EAAK,IAAI,CAAA,eAAA,CAAiB;QACzE,CAAA,sBAAA,EAAyBA,WAAS,CAAC,KAAK,CAAC,KAAK,IAAI,mBAAmB,CAAC,CAAA,yDAAA,EAA4D,KAAK,CAAC,cAAc,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC,CAAA,iCAAA,CAAmC;AAC/M;;AC/rBA;AACA,SAAS,UAAU,CAAC,MAAc,EAAE,MAAc,EAAE,IAAY,EAAA;AAC9D,IAAA,IAAI,EAAE,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,GAAG,MAAM,IAAI,IAAI,CAAC,EAAE;QAC5D,MAAM,IAAI,KAAK,CAAC,CAAA,qBAAA,EAAwB,MAAM,CAAA,UAAA,EAAa,MAAM,CAAA,gBAAA,EAAmB,IAAI,CAAA,UAAA,CAAY,CAAC;IACvG;AACF;AAEA;AACM,SAAU,gBAAgB,CAAC,IAAU,EAAA;IACzC,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,QAAA,MAAM,IAAI,CAAC,MAAc,EAAE,MAAc,EAAA;YACvC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;AACrC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;YACjD,OAAO,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;QAClD,CAAC;QACD,MAAM,CAAC,MAAc,EAAE,MAAc,EAAA;;YAEnC,IAAI,IAAI,GAAG,MAAM;AACjB,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,IAAI,eAAe,CAAyB;AAC1G,gBAAA,KAAK,CAAC,UAAU,EAAA,EAAI,IAAI,IAAI,IAAI,CAAC;AAAE,oBAAA,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;gBAC5D,SAAS,CAAC,KAAK,EAAE,UAAU,EAAA;oBACzB,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;AACzE,oBAAA,IAAI,IAAI,KAAK,CAAC,MAAM;oBACpB,IAAI,IAAI,IAAI,CAAC;wBAAE,UAAU,CAAC,SAAS,EAAE;gBACvC;AACD,aAAA,CAAC,CAAC;QACL,CAAC;QACD,MAAM,KAAK,GAAA,EAAI;KAChB;AACH;AAEA;AACA;AACO,eAAe,gBAAgB,CAAC,QAAgB,EAAA;IACrD,MAAM,EAAE,GAAG,MAAM,6DAA6D,aAAa,CAAC;AAC5F,IAAA,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,6DAA6D,IAAI,CAAC;AACrG,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,6DAA6D,QAAQ,CAAC;IACjG,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;IACpC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC;IAEvC,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,QAAA,MAAM,IAAI,CAAC,MAAc,EAAE,MAAc,EAAA;YACvC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;AACrC,YAAA,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC;YACrC,IAAI,MAAM,GAAG,CAAC;AACd,YAAA,OAAO,MAAM,GAAG,MAAM,EAAE;gBACtB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;gBACrF,IAAI,SAAS,KAAK,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,CAAA,+BAAA,EAAkC,QAAQ,CAAA,IAAA,EAAO,MAAM,GAAG,MAAM,CAAA,CAAE,CAAC;gBACxG,MAAM,IAAI,SAAS;YACrB;AACA,YAAA,OAAO,MAAM;QACf,CAAC;QACD,MAAM,CAAC,MAAc,EAAE,MAAc,EAAA;YACnC,IAAI,MAAM,KAAK,CAAC;AAAE,gBAAA,OAAO,IAAI,cAAc,CAAC,EAAE,KAAK,CAAC,CAAC,EAAA,EAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;;YAExE,OAAO,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,CAA+B;QAC9H,CAAC;AACD,QAAA,MAAM,KAAK,GAAA;AACT,YAAA,MAAM,EAAE,CAAC,KAAK,EAAE;QAClB;KACD;AACH;;;;;;;;ACjEA,MAAM,UAAU,GAAGA,WAAS;AAE5B,MAAM,SAAS,GAA+B;AAC5C,IAAA,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;CACzG;AACD;AACA,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;AAC1J,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAU;AACzD;AACA,MAAM,QAAQ,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAE7I,SAAS,OAAO,CAAC,IAAY,EAAE,IAAY,EAAE,KAAa,EAAA;IACxD,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,CAAA,GAAA,EAAM,IAAI,CAAA,QAAA,CAAU,CAAC;AAC3C,IAAA,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,IAAI,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA,CAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,IAAI,CAAA,EAAA,EAAK,KAAK,CAAA,IAAA,CAAM,CAAC;AACvH;AAEA;AACA;AACA;MACa,YAAY,CAAA;AAWH,IAAA,GAAA;AAVZ,IAAA,CAAC;AACD,IAAA,KAAK;AACL,IAAA,KAAK;AACL,IAAA,OAAO;AACP,IAAA,GAAG;AACH,IAAA,OAAO,GAAG,IAAI,GAAG,EAAkB;IACnC,UAAU,GAAG,GAAG;IAChB,KAAK,GAA4E,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;AAChJ,IAAA,IAAI,GAAG,IAAI,GAAG,EAAkB;AAExC,IAAA,WAAA,CAAoB,GAAW,EAAA;QAAX,IAAA,CAAA,GAAG,GAAH,GAAG;AACrB,QAAA,IAAI,CAAC,CAAC,GAAG,0BAA0B,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;QACxD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC;QACxC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC;QACxC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC;QAC9C,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC;AACtC,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE;AACjD,YAAA,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;YACpD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC;YACpC,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;AAC3D,YAAA,IAAI,EAAE,IAAI,IAAI,CAAC,UAAU;AAAE,gBAAA,IAAI,CAAC,UAAU,GAAG,EAAE,GAAG,CAAC;QACrD;IACF;AAEA,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;IACtC;;IAGA,KAAK,CAAC,IAAY,EAAE,KAAgB,EAAA;AAClC,QAAA,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA,CAAE;QAC9C,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QAC3B,IAAI,EAAE,KAAK,SAAS;AAAE,YAAA,OAAO,EAAE;AAE/B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;;QAEhB,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAA,CAAA,EAAI,CAAC,CAAA,6DAAA,CAA+D;QAC1H,IAAI,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAE,CAAC,CAAC,CAAC;AAClC,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACjF,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;AAEnC,QAAA,IAAI,KAAK,CAAC,IAAI,EAAE;YACd,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE;AAC7E,YAAA,IAAI,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;YAC1F,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,SAAS,EAAE;AAClC,gBAAA,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC;oBAAE;gBAC1B,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,EAAG,GAAG,CAAA,4BAAA,EAA+B,CAAC,CAAA,EAAG,GAAG,CAAA,EAAA,CAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;AAC/F,gBAAA,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK;oBAAE,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC1H;AACA,YAAA,MAAM,IAAI,GAAG,CAAC,EAAU,MAAM,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;AAC/G,YAAA,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,iDAAiD,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACvH,YAAA,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA,CAAA,EAAI,CAAC,CAAA,KAAA,EAAQ,IAAI,CAAA,EAAA,EAAK,CAAC,CAAA,KAAA,CAAO,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC;QACtH;AACA,QAAA,IAAI,KAAK,CAAC,IAAI,EAAE;AACd,YAAA,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC;QACxH;AACA,QAAA,IAAI,KAAK,CAAC,MAAM,EAAE;YAChB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAA,CAAA,EAAI,CAAC,CAAA,QAAA,CAAU;AAC9F,YAAA,MAAM,OAAO,GAAG,CAAC,GAAW,KAAK,IAAI,MAAM,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,EAAG,GAAG,CAAA,4BAAA,EAA+B,CAAC,CAAA,EAAG,GAAG,CAAA,EAAA,CAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACjH,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC;AAC5C,kBAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAA,CAAA,EAAI,CAAC,CAAA,EAAG,IAAI,CAAA,EAAA,CAAI,CAAC;AAC9F,YAAA,MAAM,MAAM,GAAG,CAAA,EAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA,EAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAA,CAAA,EAAI,CAAC,CAAA,UAAA,CAAY,CAAA,EAAA,EAAK,CAAC,SAAS;YAC9H,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC;QACpG;AACA,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE;AAC9B,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;AACxC,YAAA,IAAI,GAAG,KAAK,SAAS,EAAE;AACrB,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;gBACvD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,iBAAA,EAAoB,GAAG,CAAA,cAAA,EAAiB,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA,GAAA,CAAK,CAAC;YACrG;AACA,YAAA,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,EAAE,GAAG,CAAC;QAClF;AACA,QAAA,IAAI,KAAK,CAAC,SAAS,EAAE;AACnB,YAAA,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,sBAAA,EAAyB,CAAC,CAAA,8BAAA,EAAiC,CAAC,CAAA,UAAA,CAAY,CAAC;AACpG,YAAA,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;YACrC,MAAM,KAAK,GAA2B,EAAE;YACxC,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CAAC;gBAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzE,YAAA,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACrD,IAAI,UAAU,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ;gBAAE,OAAO,KAAK,CAAC,QAAQ;AACrF,YAAA,MAAM,OAAO,GAAG,CAAA,CAAA,EAAI,CAAC,YAAY,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAA,CAAA,EAAI,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI;YACnG,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,OAAO,GAAG,KAAK,CAAC;YAC5D,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,gBAAgB,EAAE,GAAG,CAAC;QAC7C;AAEA,QAAA,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,GAAG,CAAA,EAAG,IAAI,CAAA,EAAG,KAAK,CAAA,EAAA,EAAK,CAAC,CAAA,GAAA,CAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACvF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;AACtB,QAAA,OAAO,EAAE;IACX;;;IAIA,UAAU,CAAC,IAAY,EAAE,CAAO,EAAA;AAC9B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE;QACzC,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,UAAU,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;QAChF,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;AAC7D,QAAA,IAAI,mBAAmB,CAAC,EAAE,CAAC,KAAK,IAAI,KAAK,SAAS,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI;AAC1F,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3D;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG;AAClB,QAAA,KAAK,MAAM,OAAO,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAU,EAAE;YAClF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,MAAM;gBAAE;AACnB,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;AAChB,YAAA,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAA,EAAG,OAAO,CAAA,gBAAA,CAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YACjE,IAAI,CAAC,EAAE;AACL,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM;gBACnD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA,EAAG,OAAO,CAAA,EAAG,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AACvE,gBAAA,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;oBACR,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA,EAAG,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,EAAG,OAAO,CAAA,CAAA,CAAG,CAAC;gBACtE;qBAAO;AACL,oBAAA,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,EAAG,OAAO,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC;oBACvD,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;gBAClH;YACF;iBAAO;;AAEL,gBAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAA,EAAG,CAAC,CAAA,GAAA,CAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC9F,gBAAA,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,CAAA,EAAG,KAAK,CAAA,GAAA,EAAM,CAAC,CAAA,WAAA,CAAa,CAAC,CAAC;AAC/D,gBAAA,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAA,EAAG,OAAO,CAAA,QAAA,EAAW,KAAK,CAAC,MAAM,CAAA,EAAA,EAAK,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA,EAAG,OAAO,CAAA,CAAA,CAAG,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACvH;QACF;AACA,QAAA,OAAO,GAAG;IACZ;AAEQ,IAAA,QAAQ,CAAC,OAA8D,EAAA;QAC7E,OAAO,OAAO,KAAK,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM;IACnG;AAEQ,IAAA,IAAI,CAAC,OAAkD,EAAA;AAC7D,QAAA,OAAO,OAAO,KAAK,OAAO,GAAG,IAAI,CAAC,KAAK,GAAG,OAAO,KAAK,OAAO,GAAG,IAAI,CAAC,KAAK,GAAG,OAAO,KAAK,SAAS,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG;IAC9H;;IAGQ,EAAE,CAAC,OAAkD,EAAE,CAAS,EAAA;QACtE,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9B,QAAA,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;IACtE;;;IAIQ,GAAG,CAAC,OAAkD,EAAE,OAAe,EAAA;QAC7E,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QAC9B,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;QAClC,IAAI,KAAK,IAAI,CAAC;AAAE,YAAA,OAAO,KAAK;AAC5B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;QAClD,IAAI,KAAK,IAAI,CAAC;AAAE,YAAA,OAAO,GAAG,CAAC,MAAM,GAAG,KAAK;QACzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;AACjC,QAAA,OAAO,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC;IACpD;IAEQ,KAAK,CAAC,OAAe,EAAE,GAAW,EAAA;AACxC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;QAChB,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,EAAG,OAAO,CAAA,8BAAA,EAAiC,CAAC,GAAG,OAAO,CAAA,EAAA,CAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACpG,QAAA,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,EAAG,GAAG,+BAA+B,CAAC,CAAA,EAAG,GAAG,CAAA,EAAA,CAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5H;;AAGQ,IAAA,MAAM,CAAC,GAAW,EAAA;QACxB,OAAO,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAA,GAAA,EAAM,IAAI,CAAC,CAAC,CAAA,EAAA,CAAI,CAAC,GAAG,GAAG;IAC1E;AACD;;AClLD;MACa,OAAO,CAAA;AACG,IAAA,GAAA;AAArB,IAAA,WAAA,CAAqB,GAAc,EAAA;QAAd,IAAA,CAAA,GAAG,GAAH,GAAG;IAAc;;;IAItC,GAAG,CAAC,CAAS,EAAE,IAAa,EAAA;AAC1B,QAAA,KAAK,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE;YAC5C,IAAI,MAAM,EAAE;gBACV,IAAI,CAAC,IAAI,EAAE;oBAAE,CAAC,IAAI,KAAK;YACzB;AAAO,iBAAA,IAAI,CAAC,IAAI,EAAE,GAAG,KAAK;gBAAE,CAAC,IAAI,KAAK;AACjC,iBAAA,IAAI,CAAC,IAAI,EAAE,EAAE;gBAChB,IAAI,IAAI,KAAK,QAAQ;AAAE,oBAAA,OAAO,IAAI;AAClC,gBAAA,CAAC,GAAG,IAAI,KAAK,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;YACpC;QACF;AACA,QAAA,OAAO,CAAC;IACV;AACD;AAMD;AACA,MAAM,MAAM,GAAG,CAAC,CAAyB,EAAE,CAAS,EAAE,IAAa,KAAI;IACrE,IAAI,CAAC,CAAC,EAAE,IAAI;AAAE,QAAA,OAAO,CAAC;AACtB,IAAA,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;AACjC,IAAA,OAAO,CAAC,KAAK,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;AAClC,CAAC;AACD,MAAM,MAAM,GAAG,CAAC,CAAyB,EAAE,CAAS,EAAE,IAAa,MAAM,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AAE3G,MAAM,QAAQ,GAAG,CAAC,IAAY,KAAK,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;AAC7E,MAAM,OAAO,GAAG,CAAC,IAAY,KAAK,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;AAClF,MAAM,QAAQ,GAAG,CAAC,IAAY,KAAK,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;AAC/E,MAAM,OAAO,GAAG,CAAC,IAAY,KAAK,QAAQ,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;AAE1F;AACM,SAAU,OAAO,CAAC,IAAY,EAAE,CAAa,EAAA;IACjD,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,EACtE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AAC/E,IAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;AAAE,QAAA,OAAO,IAAI;AACtC,IAAA,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;IAC7B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG;AAC1B;AAEA;AACA,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,CAAa,KAAI;AAChD,IAAA,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAkB,CAAC,KAAK,IAAI,CAAC;AACtG,IAAA,OAAO,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI;AAC9C,CAAC;AAED;AACA;AACA,SAAS,YAAY,CAAC,GAAW,EAAE,CAAa,EAAA;AAC9C,IAAA,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;AACvF,IAAA,OAAO,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,GAAG,GAAG,GAAG;AAC1C;AAKA;AACA;AACA;AACM,SAAU,UAAU,CAAC,CAAS,EAAE,KAAa,EAAE,IAAe,EAAE,MAAe,EAAA;IACnF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IACzC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;AAAE,QAAA,OAAO,CAAC;AACtC,IAAA,MAAM,MAAM,GAAG,CAAC,CAAqB,MAAM,CAAC,KAAK,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAC7F,IAAA,OAAO,cAAc,CAAC,CAAC,EACrB,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,KAAI;AAClB,QAAA,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QACnB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;AAC5B,QAAA,OAAO,CAAC,KAAK,IAAI,IAAI,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,SAAS,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC;IAC5F,CAAC,EACD,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,KAAI;AAClB,QAAA,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QACnB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;AAC5B,QAAA,OAAO,CAAC,KAAK,IAAI,IAAI,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,SAAS,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC;AAC5F,IAAA,CAAC,CAAC;AACN;AAEA,SAAS,QAAQ,CAAC,IAAY,EAAE,CAAa,EAAA;AAC3C,IAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;IAChD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAE,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAE,EAAE;AACvF;AAEA;AACA,SAAS,OAAO,CAAC,GAAW,EAAE,OAAe,EAAE,KAAa,EAAE,SAAS,GAAG,OAAO,EAAA;IAC/E,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,CAAA,aAAA,EAAgB,OAAO,CAAA,mCAAA,EAAsC,OAAO,CAAA,EAAA,CAAI,EAAE,GAAG,CAAC,EAC1G,CAAC,MAAM,EAAE,CAAS,EAAE,KAAa,EAAE,KAAK,GAAG,EAAE,KAAI;QAC/C,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAA,WAAA,EAAc,KAAK,CAAA,GAAA,CAAK,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC;AAC7E,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,EAAE;QACjB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,CAAA,GAAA,EAAM,SAAS,CAAA,OAAA,CAAS,CAAC,EAAE,CAAA,CAAA,EAAI,SAAS,KAAK,CAAC,CAAA,CAAA,CAAG,CAAC;AAC3F,QAAA,OAAO,CAAA,CAAA,EAAI,CAAC,CAAA,EAAG,OAAO,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,KAAK,CAAA,EAAA,EAAK,CAAC,CAAA,EAAG,OAAO,GAAG;AAC9D,IAAA,CAAC,CAAC;AACN;AAEA;AACA,SAAS,aAAa,CAAC,GAAW,EAAE,CAAa,EAAA;AAC/C,IAAA,OAAO,GAAG,CAAC,OAAO,CAAC,oEAAoE,EAAE,CAAC,KAAK,EAAE,CAAS,EAAE,KAAa,EAAE,IAAY,EAAE,KAAc,KAAI;QACzJ,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC;QAC9B,IAAI,GAAG,KAAK,IAAI;AAAE,YAAA,OAAO,KAAK;QAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9B,IAAI,MAAM,KAAK,IAAI;AAAE,YAAA,OAAO,EAAE;AAC9B,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC;QACjD,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,EAAE;AACjC,YAAA,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,wEAAwE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,MAAc,KAAI;AAC9H,gBAAA,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;AACrD,gBAAA,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,QAAQ,CAAC;gBACxC,OAAO,CAAC,KAAK,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,CAAA,QAAA,EAAW,CAAC,GAAG,EAAE,CAAA,CAAA,CAAG,CAAC;AAChF,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,GAAG,CAAA,CAAA,EAAI,KAAK,CAAA,EAAA,EAAK,CAAC,aAAa;QACrC;AACA,QAAA,OAAO,IAAI,CAAC,CAAA,UAAA,EAAa,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,CAAA,MAAA,EAAS,MAAM,CAAA,CAAA,CAAG,CAAC,CAAA,EAAG,IAAI,EAAE;AACtF,IAAA,CAAC,CAAC;AACJ;AAEA;AACA;AACA;SACgB,WAAW,CAAC,GAAW,EAAE,KAAa,EAAE,IAAe,EAAA;IACrE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IAEzC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,0FAA0F,EAC1G,CAAC,KAAK,EAAE,CAAS,EAAE,GAAW,EAAE,KAAa,EAAE,KAAK,GAAG,EAAE,KAAI;;QAE3D,MAAM,KAAK,GAAG,sCAAsC,CAAC,IAAI,CAAC,KAAK,CAAC;AAChE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;AAChD,QAAA,IAAI,MAA0B;AAC9B,QAAA,IAAI,GAAG,IAAI,KAAK,EAAE;YAChB,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC;YACnC,IAAI,MAAM,KAAK,IAAI;AAAE,gBAAA,OAAO,EAAE;AAC9B,YAAA,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC;YAC7B,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAA,QAAA,EAAW,MAAM,CAAA,CAAA,CAAG,CAAC;AAC9D,YAAA,IAAI,KAAK;gBAAE,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA,CAAA,EAAI,KAAK,CAAC,CAAC,CAAC,CAAA,MAAA,EAAS,MAAM,CAAA,EAAA,EAAK,KAAK,CAAC,CAAC,CAAC,CAAA,MAAA,CAAQ,CAAC;QAC9F;QACA,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,4DAA4D,EAAE,CAAC,EAAU,EAAE,EAAU,EAAE,IAAY,EAAE,CAAS,KAClI,CAAA,CAAA,EAAI,EAAE,CAAA,EAAG,IAAI,IAAIA,WAAS,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA,EAAA,EAAK,EAAE,CAAA,EAAG,IAAI,CAAA,CAAA,CAAG,CAAC;AAC/F,QAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAA,CAAA,EAAI,CAAC,GAAG,GAAG,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI,GAAG,CAAA,CAAA,EAAI,CAAC,GAAG,GAAG,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,KAAK,CAAA,EAAA,EAAK,CAAC,CAAA,EAAG,GAAG,GAAG;AAC/G,IAAA,CAAC,CAAC;IACJ,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,iBAAiB,EAAE,gBAAgB,CAAC;;AAGvD,IAAA,MAAM,IAAI,GAAG,CAAC,CAAS,KAAK,CAAC,CAAC,OAAO,CAAC,+BAA+B,EAAE,CAAC,EAAU,EAAE,CAAS,EAAE,CAAS,KACtG,CAAA,CAAA,EAAI,CAAC,KAAKA,WAAS,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,CAAA,EAAA,CAAI,CAAC;AACzE,IAAA,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,qEAAqE,EAAE,CAAC,KAAK,EAAE,CAAS,EAAE,KAAa,EAAE,KAAa,KAAI;QAC1I,MAAM,IAAI,GAAG,mDAAmD,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5E,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,KAAK;AACvB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,kDAAkD,EAAE,CAAC,EAAU,EAAE,EAAU,EAAE,IAAY,KAAI;YACzH,MAAM,GAAG,GAAG,sCAAsC,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7D,YAAA,IAAI,GAAG,IAAI,GAAG,EAAE;gBACd,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;gBACnC,IAAI,MAAM,KAAK,IAAI;AAAE,oBAAA,OAAO,EAAE;gBAC9B,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA,CAAA,EAAI,GAAG,CAAC,CAAC,CAAC,CAAA,MAAA,EAAS,MAAM,CAAA,EAAA,EAAK,GAAG,CAAC,CAAC,CAAC,CAAA,MAAA,CAAQ,CAAC;YAC3E;YACA,OAAO,CAAA,CAAA,EAAI,EAAE,CAAA,UAAA,EAAa,IAAI,CAAC,IAAI,CAAC,CAAA,EAAA,EAAK,EAAE,CAAA,UAAA,CAAY;AACzD,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,EAAE;;AAElD,QAAA,OAAO,CAAA,CAAA,EAAI,CAAC,CAAA,cAAA,EAAiB,KAAK,CAAA,CAAA,EAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,CAAC,CAAC,CAAA,WAAA,EAAc,KAAK,CAAA,EAAA,EAAK,IAAI,CAAC,CAAC,CAAC,CAAA,WAAA,CAAa;YAC3H,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,eAAA,CAAiB;AAC5E,IAAA,CAAC,CAAC;IACF,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,aAAa,CAAC;;AAEtE,IAAA,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,sCAAsC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,qCAAqC,EAAE,EAAE,CAAC;AAChH,IAAA,IAAI,CAAC,GAAG;AAAE,QAAA,OAAO,GAAG;;;AAIpB,IAAA,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,IAAY,KAAI;QAC5C,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,CAAA,aAAA,EAAgB,GAAG,CAAA,iCAAA,EAAoC,GAAG,CAAA,EAAA,CAAI,EAAE,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,CAAS,EAAE,KAAa,EAAE,IAAY,KAAI;YACnJ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;YAC/B,IAAI,KAAK,KAAK,IAAI;AAAE,gBAAA,OAAO,KAAK;YAChC,MAAM,MAAM,GAAG,IAAI,KAAK,OAAO,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;AAC5E,YAAA,OAAO,MAAM,KAAK,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA,EAAG,GAAG,CAAA,EAAG,KAAK,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,CAAA,GAAA,EAAM,IAAI,CAAA,QAAA,CAAU,CAAC,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA,EAAA,EAAK,MAAM,CAAA,CAAA,CAAG,CAAC,CAAA,EAAG,IAAI,EAAE;AAC9H,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC;AACD,IAAA,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC;IAC3B,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,oDAAoD,EAAE,EAAE,CAAC,CAAC;IAC5E,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,YAAY,EAAE,WAAW,CAAC;AAC7C,IAAA,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC;IAC3B,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,CAAC;AAC5D,IAAA,GAAG,GAAG,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC;IAC7B,KAAK,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,eAAe,CAAC;AAAE,QAAA,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC;AAClF,IAAA,KAAK,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,gBAAgB,CAAC;AAAE,QAAA,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC;IAC3E,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,CAAC;IAClE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,aAAa,CAAC;;AAGtE,IAAA,IAAI,GAAG,CAAC,IAAI,EAAE;AACZ,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI;AACrB,QAAA,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,+BAA+B,EAAE,CAAC,EAAE,EAAE,CAAS,EAAE,KAAa,KAAI;YAClF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,CAAE;YACvE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,EAAE,KAAK,CAAE;YACrE,IAAI,GAAG,GAAG,GAAG;AAAE,gBAAA,OAAO,EAAE;AACxB,YAAA,OAAO,CAAA,CAAA,EAAI,CAAC,CAAA,GAAA,EAAM,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,CAAA,MAAA,EAAS,GAAG,CAAA,CAAA,CAAG,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,CAAA,MAAA,EAAS,IAAI,CAAC,GAAG,CAAC,GAAG,EAAEF,aAAW,CAAC,CAAA,CAAA,CAAG,CAAC,IAAI;AACpI,QAAA,CAAC,CAAC;QACF,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC;IAClD;;AAGA,IAAA,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,4CAA4C,EAAE,CAAC,EAAE,EAAE,CAAS,EAAE,GAAW,EAAE,KAAa,KAAI;QAC5G,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,uCAAuC,EAAE,CAAC,EAAE,EAAE,IAAY,EAAE,GAAW,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,EAAA,EAAK,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA,CAAA,CAAG,CAAC;QACzI,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC;QAClC,IAAI,KAAK,KAAK,IAAI;YAAE,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAA,QAAA,EAAW,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,IAAI,IAAI,CAAA,CAAA,CAAG,CAAC;AACrI,QAAA,OAAO,IAAI,CAAC,CAAA,EAAG,GAAG,CAAA,EAAG,KAAK,IAAI;AAChC,IAAA,CAAC,CAAC;;IAGF,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,CAAU,EAAE;AACzF,QAAA,IAAI,CAAC,IAAI;YAAE;AACX,QAAA,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,CAAA,aAAA,EAAgB,OAAO,qBAAqB,OAAO,CAAA,CAAA,CAAG,CAAC,EAAE,IAAI,IAAG;AAC3F,YAAA,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,6BAA6B,EAAE,CAAC,KAAK,EAAE,KAAa,KAAI;gBAC1E,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,CAAE;AACxE,gBAAA,OAAO,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,CAAA,KAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,CAAA,CAAG,CAAC;AACtD,YAAA,CAAC,CAAC;AACF,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;YACrD,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAA,QAAA,EAAW,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC,OAAO,CAAC,0BAA0B,EAAE,CAAA,mBAAA,EAAsB,CAAC,CAAA,CAAA,CAAG,CAAC,GAAG,EAAE;AAChI,QAAA,CAAC,CAAC;IACJ;AACA,IAAA,OAAO,GAAG;AACZ;AAEA;AACA;AACM,SAAU,oBAAoB,CAAC,KAAa,EAAE,IAAe,EAAA;IACjE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IACzC,IAAI,MAAM,GAAG,EAAE;IACf,IAAI,CAAC,GAAG,EAAE;IACV,IAAI,KAAK,GAA6B,MAAM;;AAE5C,IAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAuE;AAC7F,IAAA,MAAM,IAAI,GAAG,CAAC,CAAS,KAAK,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC;IAEtD,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,KAAa,EAAE,KAAyB,KAAY;AACrF,QAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;AAC/C,QAAA,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC;QAC3C,IAAI,EAAE,KAAK,IAAI;AAAE,YAAA,OAAO,EAAE;QAC1B,IAAI,EAAE,GAAGC,UAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,CAAA,OAAA,EAAU,KAAK,CAAA,6BAAA,EAAgC,CAAC,CAAA,uBAAA,CAAyB,CAAC;AAC7G,QAAA,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AAAE,YAAA,OAAO,KAAK;QAE3E,IAAI,GAAG,GAAG,CAAC;AACX,QAAA,MAAM,KAAK,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,iCAAA,EAAoC,CAAC,CAAA,GAAA,CAAK,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAc,EAAE,IAAa,KAAI;YAC5I,MAAM,GAAG,GAAG,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC;AAC/C,YAAA,IAAI,GAAG;gBAAE,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/B,YAAA,MAAM,CAAC,GAAG,GAAG,EAAE;YACf,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,QAAQ,CAAC;YACtC,IAAI,KAAK,KAAK,IAAI;AAAE,gBAAA,OAAO,EAAE;YAC7B,IAAI,KAAK,IAAID,aAAW;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,OAAA,EAAU,KAAK,CAAA,mCAAA,EAAsC,SAAS,CAAC,CAAC,CAAC,CAAA,0BAAA,CAA4B,CAAC;AACxI,YAAA,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC;AAAE,gBAAA,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAA,IAAA,EAAO,SAAS,CAAC,KAAK,CAAC,CAAA,EAAG,EAAE,CAAA,CAAA,CAAG,CAAC;AACvG,YAAA,MAAM,CAAC,GAAG,IAAI,IAAI,IAAI,MAAM,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,iCAAA,EAAoC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AACxF,YAAA,IAAI,CAAC,CAAC;AAAE,gBAAA,OAAO,IAAI;YACnB,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;YAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;AAC3B,YAAA,IAAI,GAAuB;YAC3B,IAAI,IAAI,KAAK,QAAQ,IAAI,EAAE,KAAK,IAAI,EAAE;gBACpC,IAAI,IAAI,EAAE;AACR,oBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;oBACzB,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,MAAM,KAAK,IAAI;AACvC,oBAAA,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;AAChD,oBAAA,IAAI,MAAM;wBAAE,GAAG,GAAG,CAAA,CAAA,EAAI,CAAC,CAAA,EAAA,EAAKE,WAAS,CAAC,MAAM,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,EAAA,CAAI;gBACzD;qBAAO;oBACL,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxB,IAAI,CAAC,EAAE;;wBAEL,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AACtD,wBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC;AACxB,wBAAA,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM,KAAK,GAAG;4BAAE,GAAG,GAAG,CAAA,CAAA,EAAI,CAAC,CAAA,EAAA,EAAKA,WAAS,CAAC,MAAM,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,EAAA,CAAI;oBAC7E;gBACF;YACF;AAAO,iBAAA,IAAI,IAAI,KAAK,WAAW,EAAE;;AAE/B,gBAAA,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;gBACjB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;gBACjC,IAAI,GAAG,IAAI,KAAK;AAAE,oBAAA,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,CAAA,MAAA,EAAS,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,KAAK,CAAA,CAAA,CAAG,CAAC;AACpG,gBAAA,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC,EAAE,EAAE,IAAY,EAAE,GAAW,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,EAAA,EAAKA,WAAS,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC;AACrI,gBAAA,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,MAAM,CAAC;YACxC;iBAAO,IAAI,IAAI,EAAE;AACf,gBAAA,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;gBACjB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;gBACjC,IAAI,GAAG,IAAI,KAAK;AAAE,oBAAA,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,CAAA,MAAA,EAAS,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,KAAK,CAAA,CAAA,CAAG,CAAC;AACpG,gBAAA,GAAG,GAAG,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,MAAM,IAAIA,WAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA,EAAA,EAAK,CAAC,IAAI;YAC1D;YACA,OAAO,GAAG,KAAK,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,GAAI,CAAC;AAClE,QAAA,CAAC,CAAC;QACF,IAAI,IAAI,GAAG,EAAE,KAAK,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA,IAAA,EAAO,EAAE,CAAA,CAAA,CAAG,CAAC;QACtE,IAAI,GAAG,EAAE,IAAI;YAAE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QAC1D,OAAO,KAAK,KAAK,SAAS,GAAG,CAAA,CAAA,EAAI,CAAC,CAAA,GAAA,EAAM,IAAI,CAAA,EAAA,CAAI,GAAG,CAAA,CAAA,EAAI,CAAC,CAAA,GAAA,EAAM,IAAI,IAAI,KAAK,CAAA,EAAA,EAAK,CAAC,CAAA,IAAA,CAAM;AACzF,IAAA,CAAC;IAED,OAAO,IAAI,eAAe,CAAC;QACzB,SAAS,CAAC,KAAK,EAAE,UAAU,EAAA;YACzB,MAAM,IAAI,KAAK;YACf,IAAI,GAAG,GAAG,EAAE;YACZ,OAAO,IAAI,EAAE;AACX,gBAAA,IAAI,KAAK,KAAK,MAAM,EAAE;oBACpB,MAAM,CAAC,GAAG,qCAAqC,CAAC,IAAI,CAAC,MAAM,CAAC;AAC5D,oBAAA,IAAI,CAAC,CAAC;wBAAE;AACR,oBAAA,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACR,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAChE,oBAAA,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC5C,oBAAA,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM;gBAChC;AAAO,qBAAA,IAAI,KAAK,KAAK,MAAM,EAAE;AAC3B,oBAAA,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,CAAA,SAAA,EAAY,CAAC,CAAA,mCAAA,EAAsC,CAAC,CAAA,QAAA,EAAW,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;AAChH,oBAAA,IAAI,CAAC,CAAC;wBAAE;AACR,oBAAA,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;AACtB,wBAAA,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;wBACX,KAAK,GAAG,MAAM;oBAChB;;wBAAO,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,oBAAA,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBACpC;;AAAO,oBAAA,MAAM;YACf;AACA,YAAA,IAAI,GAAG;AAAE,gBAAA,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC;QAClC,CAAC;AACD,QAAA,KAAK,CAAC,UAAU,EAAA;AACd,YAAA,IAAI,KAAK,KAAK,MAAM,EAAE;gBACpB,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAA,OAAA,EAAU,KAAK,CAAA,sCAAA,CAAwC,CAAC,CAAC;gBACpF;YACF;AACA,YAAA,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACtD,CAAC;AACF,KAAA,CAAC;AACJ;AAEA;AACM,SAAU,WAAW,CAAC,GAAW,EAAE,CAAa,EAAA;AACpD,IAAA,OAAO,GAAG,CAAC,OAAO,CAAC,2EAA2E,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,KAAa,KAAI;QAC/H,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC;AAC9B,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,KAAK;QACtB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9B,OAAO,MAAM,KAAK,IAAI,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,iBAAiB,EAAE,KAAK,MAAM,CAAA,CAAA,CAAG,CAAC;AAChF,IAAA,CAAC,CAAC;AACJ;AAEA;AACM,SAAU,MAAM,CAAC,GAAW,EAAE,CAAa,EAAA;IAC/C,OAAO,GAAG,CAAC,OAAO,CAAC,yCAAyC,EAAE,KAAK,IAAG;QACpE,MAAM,GAAG,GAAG,gCAAgC,CAAC,IAAI,CAAC,KAAK,CAAC;QACxD,MAAM,GAAG,GAAG,sCAAsC,CAAC,IAAI,CAAC,KAAK,CAAC;AAC9D,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,KAAK;QAC9B,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACxD,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC;AACpE,QAAA,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI;AAAE,YAAA,OAAO,EAAE;AAC3C,QAAA,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,CAAC;AACpC,QAAA,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE;AAAE,YAAA,OAAO,KAAK;AAC5B,QAAA,OAAO;aACJ,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA,CAAA,EAAI,GAAG,CAAC,CAAC,CAAC,CAAA,IAAA,EAAO,GAAG,GAAG,CAAC,CAAA,EAAA,EAAK,GAAG,CAAC,CAAC,CAAC,CAAA,IAAA,CAAM;AACzD,aAAA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAA,OAAA,EAAU,GAAG,CAAA,EAAA,EAAK,GAAG,CAAC,CAAC,CAAC,SAAS;aAC3D,OAAO,CAAC,wCAAwC,EAAE,CAAC,EAAE,EAAE,CAAS,EAAE,CAAS,KAAI;YAC9E,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;AACvD,YAAA,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAAE,YAAA,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAAE,YAAA,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAAE,YAAA,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAC9C,YAAA,OAAO,CAAA,CAAA,EAAI,CAAC,CAAA,OAAA,EAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,OAAA,CAAS;AACnD,QAAA,CAAC,CAAC;AACN,IAAA,CAAC,CAAC;AACJ;AAEA;AACA;AACM,SAAU,UAAU,CAAC,GAAW,EAAE,CAAa,EAAA;AACnD,IAAA,MAAM,EAAE,GAAG,CAAC,EAAU,EAAE,IAAY,KAAK,IAAI,MAAM,CAAC,CAAA,YAAA,EAAe,EAAE,yBAAyB,IAAI,CAAA,WAAA,CAAa,CAAC;AAChH,IAAA,OAAO,GAAG,CAAC,OAAO,CAAC,wEAAwE,EAAE,CAAC,KAAK,EAAE,CAAS,EAAE,GAAW,EAAE,KAAa,EAAE,KAAa,KAAI;QAC3J,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,GAAG,KAAK,eAAe,GAAG,SAAS,GAAG,SAAS,CAAC;QACzF,IAAI,MAAM,KAAK,UAAU;AAAE,YAAA,OAAO,KAAK;QACvC,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAS,EAAE,IAAa,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAE,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAS,EAAE,IAAa,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAE,CAAC,CAAU,EAAE;AACnK,YAAA,MAAM,IAAI,GAAG,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;AACzC,YAAA,IAAI,CAAC,IAAI;gBAAE;YACX,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAC/B,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC;AAC1B,YAAA,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;AACrC,YAAA,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAA,EAAA,EAAK,EAAE,CAAA,EAAA,CAAI,CAAC;YACpD,IAAI,EAAE,EAAE;gBACN,MAAM,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC7B,gBAAA,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,KAAK,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA,EAAA,CAAI,CAAC;YACjH;QACF;AACA,QAAA,OAAO,CAAA,CAAA,EAAI,CAAC,CAAA,EAAG,GAAG,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,KAAK,CAAA,EAAA,EAAK,CAAC,CAAA,EAAG,GAAG,GAAG;AACpD,IAAA,CAAC,CAAC;AACJ;AAEA;AACA;AACA;SACgB,QAAQ,CAAC,GAAW,EAAE,KAAa,EAAE,IAAe,EAAA;IAClE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IACzC,MAAM,OAAO,GAAoC,EAAE;IACnD,IAAI,GAAG,EAAE;AACP,QAAA,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;AAC5D,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE;QACpE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,gBAAgB,CAAC,KAAK,GAAG;AACpD,QAAA,IAAI,MAAM,IAAI,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,KAAK,IAAI,EAAE;YAC3D,MAAM,IAAI,KAAK,CAAC,CAAA,wBAAA,EAA2B,KAAK,CAAA,wCAAA,EAA2C,IAAI,CAAA,EAAA,CAAI,CAAC;QACtG;QACA,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;QAChC,IAAI,MAAM,KAAK,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,CAAA,yBAAA,EAA4B,KAAK,CAAA,sBAAA,EAAyB,IAAI,CAAA,EAAA,CAAI,CAAC;AACxG,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,gBAAgB,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;AACjE,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE;YAC1E,MAAM,IAAI,KAAK,CAAC,CAAA,wBAAA,EAA2B,KAAK,CAAA,qBAAA,EAAwB,IAAI,CAAA,oBAAA,CAAsB,CAAC;QACrG;AAEA,QAAA,IAAI,GAAG,CAAC,IAAI,EAAE;YACZ,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC;AACnF,YAAA,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,gEAAgE,EAAE,CAAC,EAAE,EAAE,CAAS,EAAE,KAAa,EAAE,KAAa,KAAI;gBAClI,MAAM,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,sEAAsE,CAAC,CAAC;AACvG,gBAAA,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;AAC7E,gBAAA,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;AAC5E,gBAAA,MAAM,KAAK,GAAa,IAAI,KAAK,CAAC,KAAK,CAAC;gBACxC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACnB,oBAAA,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,EAAE,QAAQ,CAAC;oBAC1C,IAAI,EAAE,KAAK,IAAI;wBAAE,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACxC,gBAAA,CAAC,CAAC;gBACF,IAAI,CAAC,GAAG,CAAC;AACT,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;oBAC9B,IAAI,KAAK,CAAC,CAAC,CAAC;wBAAE;AACd,oBAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAA,MAAA,EAAS,CAAC,EAAE,CAAC;AAAE,wBAAA,CAAC,EAAE;AACnC,oBAAA,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA,CAAE,CAAC;AACvB,oBAAA,KAAK,CAAC,CAAC,CAAC,GAAG,CAAA,CAAA,EAAI,CAAC,CAAA,gBAAA,EAAmB,EAAE,EAAE,CAAA,cAAA,EAAiB,CAAC,CAAA,GAAA,CAAK;AAC9D,oBAAA,IAAI,MAAM;wBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAA,MAAA,EAAS,CAAC,CAAA,CAAE,EAAE,CAAC;gBAC7F;gBACA,OAAO,CAAA,CAAA,EAAI,CAAC,CAAA,YAAA,EAAe,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,CAAA,QAAA,EAAW,KAAK,GAAG,CAAC,CAAA,CAAA,EAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,aAAA,CAAe;AACvH,YAAA,CAAC,CAAC;QACJ;AACA,QAAA,GAAG,GAAG,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,uEAAuE,EAC3G,CAAC,EAAE,EAAE,GAAW,EAAE,IAAY,KAAK,CAAA,EAAG,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,CAAA,CAAA,CAAG,CAAC;IAC9E;IACA,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,kFAAkF,EAClG,CAAC,EAAE,EAAE,CAAS,EAAE,GAAW,EAAE,KAAa,EAAE,CAAS,KAAK,CAAA,CAAA,EAAI,CAAC,CAAA,EAAG,GAAG,CAAA,EAAG,KAAK,IAAIA,WAAS,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,EAAG,GAAG,CAAA,CAAA,CAAG,CAAC;AACrJ,IAAA,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE;AACzB;AAEA;AACA;AACM,SAAU,QAAQ,CAAC,GAAW,EAAE,IAAe,EAAA;IACnD,IAAI,OAAO,GAAG,KAAK;AACnB,IAAA,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,wCAAwC,EAAE,CAAC,KAAK,EAAE,IAAY,EAAE,CAAS,EAAE,KAAa,KAAI;AAClH,QAAA,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC;AACnD,QAAA,IAAI,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,KAAK;QAC3C,OAAO,GAAG,IAAI;QACd,OAAO,IAAI,GAAGA,WAAS,CAAC,MAAM,CAAC,GAAG,KAAK;AACzC,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,oDAAoD,EAAE,EAAE,CAAC,GAAG,GAAG;AAC9F;AAEA;AACM,SAAU,aAAa,CAAC,GAAW,EAAE,CAAa,EAAA;AACtD,IAAA,OAAO,GAAG,CAAC,OAAO,CAAC,6CAA6C,EAAE,CAAC,EAAE,EAAE,GAAW,EAAE,GAAW,KAAK,CAAA,EAAG,GAAG,CAAA,EAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,GAAG,CAAA,CAAA,CAAG,CAAC;AACzI;AAEA;AACM,SAAU,aAAa,CAAC,GAAW,EAAE,IAAe,EAAA;IACxD,IAAI,OAAO,GAAG,KAAK;AACnB,IAAA,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,0CAA0C,EAAE,CAAC,KAAK,EAAE,CAAS,EAAE,KAAa,KAAI;QACtG,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC;QAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC;AAC9D,QAAA,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI;AAChD,QAAA,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,GAAG;AAAE,YAAA,OAAO,KAAK;QAC3C,OAAO,GAAG,IAAI;AACd,QAAA,OAAO,CAAA,CAAA,EAAI,CAAC,CAAA,eAAA,EAAkB,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,CAAA,MAAA,EAAS,MAAM,CAAA,CAAA,CAAG,CAAC,IAAI;AACtF,IAAA,CAAC,CAAC;AACF,IAAA,IAAI,CAAC,OAAO;AAAE,QAAA,OAAO,GAAG;AACxB,IAAA,OAAO,GAAG,CAAC,OAAO,CAAC,6CAA6C,EAAE,CAAC,EAAE,EAAE,CAAS,EAAE,KAAa,KAC7F,CAAA,CAAA,EAAI,CAAC,CAAA,oBAAA,EAAuB,KAAK,CAAC,OAAO,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAA,mBAAA,CAAqB,CAAC;AAClG;AAEA;AACM,SAAU,eAAe,CAAC,EAAU,EAAE,IAAe,EAAA;AACzD,IAAA,OAAO,EAAE,CAAC,OAAO,CAAC,mEAAmE,EAAE,CAAC,EAAE,EAAE,IAAY,EAAE,CAAS,EAAE,KAAa,KAChI,IAAI,GAAGA,WAAS,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;AACnE;;AC3cA,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;AAC3B,SAAS,SAAS,CAAC,IAAc,EAAA;IAC/B,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,YAAY,IAAI;QAAE,OAAO,IAAI,IAAI,IAAI;AAC1F,IAAA,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;AAAE,QAAA,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AAChE,IAAA,OAAO,OAAO,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,GAAG,IAAI;AACpD;AACA,MAAM,OAAO,GAAG,CAAC,IAAc,KAC7B,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,EAAE,IAAI,YAAY,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,SAAS;AAG/F;AACA,SAAS,UAAU,CAAC,CAAS,EAAE,GAAW,EAAE,KAAa,EAAE,IAAqC,EAAA;AAC9F,IAAA,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS;AAAE,QAAA,OAAO,IAAI,CAAC,CAAA,KAAA,EAAQ,GAAG,CAAA,CAAA,EAAI,KAAK,IAAI;AAC7E,IAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5B,QAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAA,CAAA,EAAI,CAAC,CAAA,KAAA,EAAQ,GAAG,CAAA,CAAA,EAAI,KAAK,KAAK,CAAC,CAAA,EAAA,EAAK,IAAI,CAAA,EAAA,EAAK,CAAC,CAAA,IAAA,EAAO,CAAC,IAAI,GAAG,CAAA,CAAA,EAAI,CAAC,CAAA,KAAA,EAAQ,GAAG,CAAA,CAAA,EAAI,KAAK,WAAW,CAAC,CAAA,SAAA,EAAY,CAAC,CAAA,IAAA,EAAO,CAAC,IAAI;IACrJ;IACA,IAAI,OAAO,IAAI,KAAK,SAAS;QAAE,OAAO,CAAA,CAAA,EAAI,CAAC,CAAA,KAAA,EAAQ,GAAG,IAAI,KAAK,CAAA,QAAA,EAAW,CAAC,CAAA,EAAA,EAAK,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA,IAAA,EAAO,CAAC,CAAA,EAAA,CAAI;AAC9G,IAAA,IAAI,IAAI,YAAY,IAAI,EAAE;AACxB,QAAA,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,CAAA,CAAE,CAAC;AAC1E,QAAA,OAAO,IAAI,CAAC,CAAA,KAAA,EAAQ,GAAG,CAAA,CAAA,EAAI,KAAK,KAAK,CAAC,CAAA,EAAA,EAAK,YAAY,CAAC,IAAI,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,IAAA,EAAO,CAAC,IAAI;IACjF;IACA,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,CAAA,CAAA,EAAI,CAAC,CAAA,KAAA,EAAQ,GAAG,CAAA,CAAA,EAAI,KAAK,CAAA,EAAA,EAAK,CAAC,CAAA,EAAA,EAAKA,WAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,IAAA,EAAO,CAAC,CAAA,EAAA,CAAI;AACpI,IAAA,MAAM,IAAI,GAAGA,WAAS,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;AAC/D,IAAA,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAA,CAAA,EAAI,CAAC,CAAA,uBAAA,EAA0B,IAAI,CAAA,EAAA,EAAK,CAAC,CAAA,EAAA,CAAI,GAAG,CAAA,CAAA,EAAI,CAAC,CAAA,EAAA,EAAK,IAAI,CAAA,EAAA,EAAK,CAAC,CAAA,EAAA,CAAI;AACzG,IAAA,OAAO,CAAA,CAAA,EAAI,CAAC,CAAA,KAAA,EAAQ,GAAG,IAAI,KAAK,CAAA,gBAAA,EAAmB,CAAC,CAAA,GAAA,EAAM,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,KAAA,EAAQ,CAAC,IAAI;AAChF;AAEA;AACA,SAAS,WAAW,CAAC,IAAY,EAAE,IAAW,EAAA;AAC5C,IAAA,MAAM,KAAK,GAAe,IAAI,GAAG,EAAE;IACnC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,KAAI;AACvB,QAAA,MAAM,KAAK,GAAG,IAAI,GAAG,EAAoB;QACzC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,KAAI;AACvB,YAAA,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS;gBAAE;YACzC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,YAAY,IAAI,EAAE;AACpD,gBAAA,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC;gBACnB;YACF;AACA,YAAA,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;AAC9D,gBAAA,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,CAAA,+EAAA,CAAiF,CAAC;YAClH;;AAEA,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK;YACxG,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;AACpE,QAAA,CAAC,CAAC;QACF,IAAI,KAAK,CAAC,IAAI;YAAE,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC;AAC1C,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,KAAK;AACd;AAEA,MAAM,cAAc,GAAG,+EAA+E;AACtG,MAAM,iBAAiB,GAAG,2EAA2E;AAErG;AACA,MAAM,OAAO,GAAG,CAAC,EAAkD,KACjE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,GAAG,EAAE,CAAC,IAAI,CAAgC;MAEvF,WAAW,CAAA;AACd,IAAA,OAAO,GAAG,IAAI,GAAG,EAAmB;AACpC,IAAA,SAAS,GAAG,IAAI,GAAG,EAAsB;AACzC,IAAA,SAAS,GAAG,IAAI,GAAG,EAAiB;AACpC,IAAA,SAAS,GAAG,IAAI,GAAG,EAAU;AAC7B,IAAA,QAAQ,GAAG,IAAI,GAAG,EAAgD;;;AAI1E,IAAA,WAAW,CAAC,SAAiB,EAAE,IAAW,EAAE,WAAyB,EAAE,EAAA;QACrE,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;AACzC,QAAA,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,GAAG,EAAE,CAAC;AACvD,QAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AAClB,QAAA,OAAO,IAAI;IACb;;;;IAKA,QAAQ,CAAC,SAAiB,EAAE,KAA+B,EAAA;QACzD,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;AACxC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;AAC1D,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC/C,MAAM,CAAC,GAAG,8BAA8B,CAAC,IAAI,CAAC,GAAG,CAAC;AAClD,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;AACpC,YAAA,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAGD,UAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAID,aAAW;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,CAAA,EAAA,CAAI,CAAC;AACrH,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC;AACxC,YAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;QACxC;AACA,QAAA,OAAO,IAAI;IACb;;;IAIA,QAAQ,CAAC,SAAiB,EAAE,IAAW,EAAA;QACrC,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACnD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC;AACnC,QAAA,OAAO,IAAI;IACb;;;AAIA,IAAA,WAAW,CAAC,SAAiB,EAAA;AAC3B,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;AAC7B,QAAA,OAAO,IAAI;IACb;;;;;AAMA,IAAA,UAAU,CAAC,SAAiB,EAAE,EAAU,EAAE,KAAK,GAAG,CAAC,EAAA;AACjD,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;IACzD;;;AAIA,IAAA,UAAU,CAAC,SAAiB,EAAE,KAAa,EAAE,KAAK,GAAG,CAAC,EAAA;AACpD,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IAC7D;;;AAIA,IAAA,aAAa,CAAC,SAAiB,EAAE,EAAmB,EAAE,KAAK,GAAG,CAAC,EAAA;AAC7D,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,QAAQ,GAAG,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;IACrG;;AAGA,IAAA,aAAa,CAAC,SAAiB,EAAE,KAAsB,EAAE,KAAK,GAAG,CAAC,EAAA;AAChE,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,KAAK,KAAK,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IAC/G;IAEQ,OAAO,CAAC,SAAiB,EAAE,IAAqB,EAAE,EAAU,EAAE,KAAa,EAAE,MAAe,EAAA;AAClG,QAAA,MAAM,GAAG,GAAG,IAAI,KAAK,MAAM,GAAGC,UAAQ,GAAGD,aAAW;AACpD,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE;YACxF,MAAM,IAAI,KAAK,CAAC,CAAA,QAAA,EAAW,IAAI,KAAK,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA,QAAA,EAAW,EAAE,CAAA,QAAA,EAAW,KAAK,CAAA,CAAA,CAAG,CAAC;QAClG;QACA,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;AACtC,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACpE,QAAA,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACrC,QAAA,OAAO,IAAI;IACb;;;IAIA,IAAI,CAAC,MAA0B,EAAE,OAA2C,EAAA;AAC1E,QAAA,MAAM,KAAK,GAAG,IAAI,qBAAqB,CAAC,MAAM,CAAC;;AAE/C,QAAA,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,GAAW,KAAI;YAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,gBAAgB;YACnD,IAAI,IAAI,GAAG,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,CAAA,gBAAA,EAAmB,IAAI,CAAA,IAAA,EAAO,IAAI,CAAA,uCAAA,EAA0C,GAAG,CAAA,CAAA,CAAG,CAAC;AACrH,QAAA,CAAC;AACD,QAAA,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE;QAEpC,CAAC,YAAW;AACV,YAAA,IAAI;AACF,gBAAA,MAAM,KAAK,CAAC,qBAAqB,EAAE;;AAGnC,gBAAA,MAAM,QAAQ,GAAG,OAAO,IAAY,KAAI;AACtC,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AAAE,wBAAA,OAAO,EAAE;oBAC/B,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,oBAAoB,IAAI,IAAI,IAAI,CAAC,CAAC;AAC3D,oBAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AACjE,gBAAA,CAAC;AACD,gBAAA,MAAM,KAAK,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC;;AAElD,gBAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB;AACzC,gBAAA,MAAM,IAAI,GAAG,OAAO,IAAY,KAAK,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC;AACxE,gBAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU;AACjC,gBAAA,MAAM,MAAM,GAAG,CAAC,SAAiB,KAAI;AACnC,oBAAA,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;AAAE,wBAAA,MAAM,IAAI,KAAK,CAAC,UAAU,SAAS,CAAA,mBAAA,CAAqB,CAAC;oBAC5F,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;oBACxC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AAAE,wBAAA,MAAM,IAAI,KAAK,CAAC,UAAU,SAAS,CAAA,wBAAA,CAA0B,CAAC;AAC7F,oBAAA,OAAO,IAAI;AACb,gBAAA,CAAC;AAED,gBAAA,MAAM,YAAY,GAAG,IAAI,GAAG,EAAsB;gBAClD,KAAK,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO;AAAE,oBAAA,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAC5H,gBAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAsB;gBACjD,KAAK,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS;oBAAE,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC;AAExF,gBAAA,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,SAAS;AAAE,oBAAA,MAAM,WAAW,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC;AACnG,gBAAA,MAAM,KAAK,GAAG,IAAI,GAAG,EAAsB;gBAC3C,KAAK,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;oBAC9C,MAAM,IAAI,GAAG,CAAC,IAAY,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;oBACnE,KAAK,CAAC,GAAG,CAAC,MAAM,WAAW,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBACnG;;;AAIA,gBAAA,MAAM,OAAO,GAAc,IAAI,GAAG,EAAE;gBACpC,KAAK,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;oBAC5C,MAAM,CAAC,SAAS,CAAC;AACjB,oBAAA,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE;AACnC,wBAAA,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,SAAS;AACzD,wBAAA,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,SAAS;AAC1D,qBAAA,CAAC;gBACJ;AACA,gBAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB;AAC7C,gBAAA,IAAI,OAAO,CAAC,IAAI,EAAE;oBAChB,MAAM,MAAM,GAAG,OAAO,IAAY,EAAE,MAA+B,KAAI;AACrE,wBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;4BAAE;AAC3C,wBAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;AAC5B,wBAAA,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;wBAC3B,IAAI,OAAO,KAAK,GAAG;AAAE,4BAAA,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;AACjD,oBAAA,CAAC;AACD,oBAAA,MAAM,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,IAAI,eAAe,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;oBACpE,KAAK,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE;AAC5C,wBAAA,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;4BAAE;AACnC,wBAAA,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC;wBAChC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;wBAChD,KAAK,MAAM,GAAG,IAAI,MAAM,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;4BACrD,IAAI,GAAG,CAAC,QAAQ;gCAAE;AAClB,4BAAA,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;AACtD,4BAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;gCACrB,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAG;AAC3B,oCAAA,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC;;AAEjE,oCAAA,IAAI,OAAO,CAAC,MAAM,EAAE;AAClB,wCAAA,MAAM,KAAK,GAAe,IAAI,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wCAC5G,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,OAAO,EAAE;4CACnC,MAAM,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAE;4CACtC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,4CAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;gDAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC;4CAC1C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAAE,gDAAA,KAAK,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;wCACvD;AACA,wCAAA,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;oCAC9B;AACA,oCAAA,OAAO,KAAK;AACd,gCAAA,CAAC,CAAC;4BACJ;AACA,4BAAA,IAAI,CAAC,GAAG;gCAAE;AACV,4BAAA,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,kBAAkB;AAAE,gCAAA,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;4BAC7G,IAAI,IAAI,KAAK,aAAa;AAAE,gCAAA,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;4BAC3E,IAAI,IAAI,KAAK,UAAU;AAAE,gCAAA,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;4BAC5E,IAAI,IAAI,KAAK,aAAa;AAAE,gCAAA,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;wBACpF;oBACF;;oBAEA,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE;wBACxC,KAAK,MAAM,GAAG,IAAI,MAAM,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;AACrD,4BAAA,IAAI,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;gCAAE;AACpD,4BAAA,KAAK,MAAM,KAAK,IAAI,MAAM,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE;AAC3D,gCAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAAE,oCAAA,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;4BAC/G;wBACF;oBACF;AACA,oBAAA,KAAK,MAAM,GAAG,IAAI,MAAM,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE;AACnE,wBAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC;AAAE,4BAAA,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;oBAC7H;gBACF;;gBAGA,IAAI,WAAW,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE;oBAC9F,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AACzF,oBAAA,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,OAAO;AAAE,wBAAA,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;oBACzD,KAAK,MAAM,IAAI,IAAI,IAAI;AAAE,wBAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;gBAC5C;;AAGA,gBAAA,IAAI,OAAiC;gBACrC,MAAM,MAAM,GAAG,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE;AACjF,qBAAA,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;gBAE5F,MAAM,KAAK,GAAG,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE;AAChF,qBAAA,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;gBAC9G,IAAI,MAAM,KAAK,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE;oBACrC,IAAI,CAAC,KAAK,CAAC,MAAM;AAAE,wBAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC;AAClE,oBAAA,OAAO,GAAG,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACpD,oBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;gBAC3B;gBAEA,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,OAAO,EAAE;AACjC,oBAAA,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;wBAAE;AACvB,oBAAA,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAK,CAAC;AACnD,oBAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;gBACnB;AACA,gBAAA,MAAM,MAAM,GAAG,CAAC,KAAiC,KAAK,KAAK,CAAC,WAAW,CAAC,IAAI,iBAAiB,EAAgD,CAAC;AAC9I,gBAAA,MAAM,MAAM,GAAG,CAAC,IAA4B,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,iBAAiB,EAAgD,CAAC;AACxI,gBAAA,IAAI,KAAK,CAAC,IAAI,EAAE;;AAEd,oBAAA,MAAM,IAAI,GAAG,8BAA8B,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AAChF,oBAAA,MAAM,EAAE,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAA,MAAA,EAAS,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA,CAAE,GAAG,OAAO,CAAC,KAAK,2DAA2D;oBACtJ,MAAM,KAAK,GAAG,CAAA,2EAAA,EAA8EE,WAAS,CAAC,EAAE,CAAC,4BAA4B;oBACrI,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,EAAE;AACjC,wBAAA,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAK,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC7H;gBACF;gBAEA,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE;AACvC,oBAAA,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;wBAAE;oBAC3B,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;oBACzC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;oBACvC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;oBACvC,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,KAAK,SAAS,EAAE;wBAC1C,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,oBAAoB,IAAI,QAAQ,CAAC;AAC9D,wBAAA,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;wBACtD,IAAI,KAAK,KAAK,SAAS;AAAE,4BAAA,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;wBACtF,IAAI,KAAK,IAAI,MAAM;4BAAE,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,IAAI,IAAI,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;wBAC3G,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;oBAC9C;yBAAO;;wBAEL,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC;AACxC,wBAAA,MAAM,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAC7E,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,iBAAiB,CAAC;oBACzF;gBACF;AACA,gBAAA,IAAI,OAAO;AAAE,oBAAA,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAO,EAAE,IAAI,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,IAAK,CAAC;AACrF,gBAAA,MAAM,MAAM,CAAC,KAAK,EAAE;YACtB;YAAE,OAAO,GAAG,EAAE;AACZ,gBAAA,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;YACnB;QACF,CAAC,GAAG;QAEJ,OAAO,MAAM,CAAC,MAAM;IACtB;;;;AAKQ,IAAA,mBAAmB,CAAC,KAAiB,EAAE,OAAsB,EAAE,MAAmB,EAAA;QACxF,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACvD,IAAI,IAAI,GAAG,CAAC;AACZ,QAAA,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE;AACf,QAAA,IAAI,CAAC,GAAG,EAAE,CAAC;QACX,IAAI,KAAK,GAA6B,MAAM;AAC5C,QAAA,IAAI,OAAO,GAAG,CAAC,CAAC;;AAEhB,QAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAAsD;AACnF,QAAA,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU;;QAGtC,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,IAAc,EAAE,QAA2B,KAAY;YACnF,IAAI,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,GAAG,EAAE;AAClE,YAAA,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;YAC3B,IAAI,KAAK,EAAE;AACT,gBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;gBAChE,KAAK,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,OAAO,OAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG;YAClF;AACA,YAAA,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC;AAC/B,YAAA,IAAI,OAAO,YAAY,IAAI,IAAI,OAAO,EAAE;AACtC,gBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;gBAChE,KAAK,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,OAAO,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG;YACxF;AACA,YAAA,IAAI,OAAO,KAAK,IAAI,EAAE;AACpB,gBAAA,OAAO,QAAQ,GAAG,CAAC,CAAC,KAAK,SAAS,GAAG,CAAA,CAAA,EAAI,CAAC,CAAA,KAAA,EAAQ,GAAG,IAAI,KAAK,CAAA,CAAA,EAAI,QAAQ,CAAC,CAAC,CAAC,CAAA,EAAA,EAAK,CAAC,IAAI,GAAG,CAAA,CAAA,EAAI,CAAC,CAAA,KAAA,EAAQ,GAAG,CAAA,CAAA,EAAI,KAAK,IAAI;YACzH;;AAEA,YAAA,OAAO,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC;AACjF,QAAA,CAAC;AAED,QAAA,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,QAAA,GAAW,KAAK,CAAC,GAAG,CAAC,CAAC,CAAE,KAAI;AACrD,YAAA,MAAM,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;iBAC7D,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACzD,OAAO,CAAA,CAAA,EAAI,CAAC,CAAA,OAAA,EAAU,CAAC,KAAK,KAAK,CAAA,EAAA,EAAK,CAAC,CAAA,IAAA,CAAM;AAC/C,QAAA,CAAC;AACD,QAAA,MAAM,UAAU,GAAG,CAAC,KAAa,KAAI;YACnC,IAAI,GAAG,GAAG,EAAE;AACZ,YAAA,OAAO,IAAI,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,EAAE,IAAI,EAAE;gBAAE,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC3F,YAAA,OAAO,GAAG;AACZ,QAAA,CAAC;;QAED,MAAM,QAAQ,GAAG,MAAK;AACpB,YAAA,IAAI,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC;YAC9B,IAAI,CAAC,MAAM,EAAE,IAAI;AAAE,gBAAA,OAAO,GAAG;AAC7B,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AAChE,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;YAC9C,IAAI,IAAI,GAAGD,UAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,CAAA,+BAAA,EAAkC,IAAI,CAAA,yBAAA,EAA4BA,UAAQ,CAAA,EAAA,CAAI,CAAC;AACpH,YAAA,KAAK,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAE,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC;AAChG,YAAA,OAAO,GAAG;AACZ,QAAA,CAAC;QAED,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,CAAS,KAAY;;YAEpE,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS;AACjE,YAAA,IAAI,QAAQ;AAAE,gBAAA,IAAI,EAAE;AACpB,YAAA,IAAI,OAAO,GAAG,CAAC,CAAC,QAAQ;YACxB,MAAM,KAAK,GAAuB,EAAE;YACpC,IAAI,GAAG,GAAG,CAAC;YACX,KAAK,MAAM,EAAE,IAAI,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;AACxC,gBAAA,MAAM,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC;gBACrB,MAAM,GAAG,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,gBAAA,GAAG,GAAG,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;gBAClC,MAAM,IAAI,GAAG,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC;gBAC/B,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK;AAC3D,gBAAA,MAAM,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,SAAS;AAChD,gBAAA,MAAM,EAAE,GAAG,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS;AACtF,gBAAA,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACd,gBAAA,MAAM,MAAM,GAAG,EAAE,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS;AAC1D,gBAAA,IAAI,MAAM;oBAAE,aAAa,CAAC,GAAG,CAAC,EAAG,EAAE,EAAE,IAAI,EAAE,WAAW,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;AAC7E,gBAAA,IAAI,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE;;AAEtB,oBAAA,IAAI,MAAM,IAAI,SAAS,CAAC,IAAgB,CAAC,KAAK,IAAI;AAAE,wBAAA,YAAY,CAAC,GAAG,CAAC,EAAG,CAAC;AACzE,oBAAA,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAgB,EAAE,CAAC,CAAC;AACtD,oBAAA,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;gBACtB;qBAAO,IAAI,EAAE,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC3C,oBAAA,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;wBACxB,MAAM,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC/B,IAAI,CAAC,EAAE;AACL,4BAAA,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA,EAAA,EAAKC,WAAS,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA,EAAA,CAAI,CAAC;4BACpG,OAAO,GAAG,IAAI;wBAChB;oBACF;gBACF;gBACA,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACtB,gBAAA,GAAG,EAAE;YACP;YACA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,QAAQ,IAAI,EAAE;AAAE,gBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAClF,YAAA,IAAI,CAAC,OAAO;AAAE,gBAAA,OAAO,GAAG,IAAI,CAAA,EAAG,KAAK,CAAA,EAAA,EAAK,CAAC,MAAM;YAChD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,YAAA,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA,EAAA,EAAK,CAAC,MAAM;AAChH,QAAA,CAAC;QAED,OAAO,IAAI,eAAe,CAAC;YACzB,SAAS,CAAC,KAAK,EAAE,UAAU,EAAA;gBACzB,MAAM,IAAI,KAAK;gBACf,IAAI,GAAG,GAAG,EAAE;gBACZ,OAAO,IAAI,EAAE;AACX,oBAAA,IAAI,KAAK,KAAK,MAAM,EAAE;wBACpB,MAAM,CAAC,GAAG,qCAAqC,CAAC,IAAI,CAAC,MAAM,CAAC;AAC5D,wBAAA,IAAI,CAAC,CAAC;4BAAE;AACR,wBAAA,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACR,wBAAA,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;;4BAER,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAA,CAAA,EAAI,CAAC,CAAA,UAAA,EAAa,QAAQ,EAAE,CAAA,EAAA,EAAK,CAAC,YAAY;AAChF,4BAAA,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;4BAC5C,KAAK,GAAG,MAAM;wBAChB;6BAAO;AACL,4BAAA,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC7C,4BAAA,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;4BAC5C,KAAK,GAAG,MAAM;wBAChB;oBACF;AAAO,yBAAA,IAAI,KAAK,KAAK,MAAM,EAAE;wBAC3B,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;wBAC9B,IAAI,EAAE,KAAK,EAAE;4BAAE;AACf,wBAAA,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AACvC,wBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,SAAA,CAAW,CAAC,EAAE;AACnE,4BAAA,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA,IAAA,CAAM,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;AACjE,4BAAA,IAAI,KAAK,KAAK,EAAE,EAAE;AAAE,gCAAA,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;gCAAE;4BAAO;wBAClF;wBACA,OAAO,GAAG,CAAC;AACX,wBAAA,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,CAAA,SAAA,EAAY,CAAC,CAAA,mCAAA,EAAsC,CAAC,CAAA,QAAA,EAAW,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;AAChH,wBAAA,IAAI,CAAC,CAAC;4BAAE;AACR,wBAAA,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,SAAA,CAAW,CAAC,EAAE;4BAClD,GAAG,IAAI,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;4BACxB,KAAK,GAAG,MAAM;wBAChB;6BAAO;;AAEL,4BAAA,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC3C,4BAAA,MAAM,CAAC,GAAG,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,OAAO,GAAG,CAAC;4BACnD,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;AAC9B,4BAAA,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC;4BACpB,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;;4BAEjD,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;wBACjH;AACA,wBAAA,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;oBACpC;yBAAO;wBACL,GAAG,IAAI,MAAM;wBACb,MAAM,GAAG,EAAE;wBACX;oBACF;gBACF;AACA,gBAAA,IAAI,GAAG;AAAE,oBAAA,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC;YAClC,CAAC;AACD,YAAA,KAAK,CAAC,UAAU,EAAA;AACd,gBAAA,IAAI,KAAK,KAAK,MAAM,EAAE;oBACpB,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;oBAC7E;gBACF;AACA,gBAAA,IAAI,MAAM;AAAE,oBAAA,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC;YACxC,CAAC;AACF,SAAA,CAAC;IACJ;IAEQ,MAAM,kBAAkB,CAAC,MAAkC,EAAA;AACjE,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,iBAAiB,EAAgD,CAAC,CAAC,SAAS,EAAE;QACpH,IAAI,MAAM,GAAG,EAAE;QACf,OAAO,IAAI,EAAE;YACX,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE;AAC3C,YAAA,IAAI,IAAI;gBAAE;YACV,MAAM,IAAI,KAAK;QACjB;AACA,QAAA,OAAO,MAAM;IACf;AACD;AAED,MAAM,SAAS,GAAG,CAAC,EAAU,KAAK,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7F,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAU,KACtC,IAAI,MAAM,CAAC,CAAA,uCAAA,EAA0C,QAAQ,CAAC,EAAE,CAAC,CAAA,QAAA,CAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9F,MAAM,WAAW,GAAG,CAAC,KAAa,EAAE,IAAY,KAC9C,IAAI,MAAM,CAAC,CAAA,uCAAA,EAA0C,QAAQ,CAAC,IAAI,CAAC,CAAA,QAAA,CAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAEjG,eAAe,WAAW,CAAC,IAAY,EAAE,KAAoB,EAAE,IAAuC,EACpG,OAA4B,EAAE,OAAoB,EAAA;IAClD,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;AACvC,IAAA,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC;AAC1B,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;IACzD,IAAI,GAAG,GAAG,CAAC;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,CAAA,wBAAA,CAA0B,CAAC;IACtE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AACjF,QAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,CAAA,oCAAA,CAAsC,CAAC;IACrF;IACA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC;AACjE,IAAA,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;;IAG9B,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,CAAA,CAAA,EAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA,EAAA,CAAI,EAAE,IAAI,CAAC;AAC3E,IAAA,MAAM,KAAK,GAAG,6CAA6C,CAAC,IAAI,CAAC,IAAI;AACnE,UAAE,IAAI,MAAM,CAAC,CAAA,aAAA,EAAgB,QAAQ,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG,EAAE,IAAI,CAAC,GAAG,SAAS;AACnE,IAAA,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,+DAA+D,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,KAAa,EAAE,IAAY,KAAI;QAC1H,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC;AACzC,QAAA,IAAI,KAAK,KAAK,IAAI,EAAE;YAClB,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC;AAC7B,YAAA,OAAO,CAAC,KAAK,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,sBAAsB,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAA,CAAA,CAAG,CAAC,GAAG,KAAK;QAC7G;AACA,QAAA,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC;QACjC,IAAI,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC;AAC7C,QAAA,IAAI,KAAK;YAAE,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC;QACpD,OAAO,MAAM,KAAK,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,CAAG,EAAE,CAAA,CAAA,EAAIA,WAAS,CAAC,MAAM,CAAC,CAAA,CAAA,CAAG,CAAC;AAC1F,IAAA,CAAC,CAAC;IACF,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,iCAAiC,EAAE,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,mCAAmC,EAAE,CAAC,EAAE,EAAE,CAAS,EAAE,CAAS,KAAI;QACxI,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC;AACzB,QAAA,OAAO,CAAA,CAAA,EAAI,CAAC,CAAA,EAAA,EAAK,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA,CAAA,CAAG;IACpE,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC;AAEnC,IAAA,MAAM,IAAI,GAAG,CAAC,MAAM,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,IAAI;IAC9F,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC;AAC/C,IAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACtE,IAAI,IAAI,EAAE;;AAER,QAAA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;AACrF,QAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B;AACF;AAEA;AACA,eAAe,WAAW,CAAC,IAAY,EAAE,KAAoB,EAAE,IAAuC,EACpG,OAA4B,EAAE,IAA+B,EAAA;IAC7D,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;AACvC,IAAA,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC;IAC1B,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC;IACrC,IAAI,CAAC,GAAG,CAAC;IACT,OAAO,CAAC,IAAI,CAAC,CAAA,EAAG,GAAG,CAAA,gBAAA,EAAmB,CAAC,MAAM,CAAC;AAAE,QAAA,CAAC,EAAE;AACnD,IAAA,MAAM,IAAI,GAAG,CAAA,EAAG,GAAG,CAAA,gBAAA,EAAmB,CAAC,MAAM;IAE7C,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC;AAC/C,IAAA,IAAI,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC;IAC/B,IAAI,CAAC,GAAG,CAAC;AACT,IAAA,OAAO,MAAM,CAAC,IAAI,EAAE,CAAA,GAAA,EAAM,CAAC,EAAE,CAAC;AAAE,QAAA,CAAC,EAAE;;AAEnC,IAAA,MAAM,QAAQ,GAAG,CAAC,MAAM,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAC7G,IAAA,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,8BAA8B,EAAE,CAAC,KAAK,EAAE,CAAS,KACnE,CAAA,CAAA,EAAI,CAAC,CAAA,oBAAA,EAAuB,CAAC,CAAA,QAAA,EAAW,QAAQ,EAAE,IAAI,IAAI,cAAc,CAAA,0BAAA,EAA6B,CAAC,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE,CAAC;AAC1H,IAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC;AAE3B,IAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;AAC1F,IAAA,MAAM,OAAO,GAAG,qCAAqC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG;AAC1E,IAAA,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,uBAAuB,EAAE,CAAC,KAAK,EAAE,CAAS,KACxD,CAAA,CAAA,EAAI,CAAC,CAAA,YAAA,EAAeA,WAAS,CAAC,IAAI,CAAC,cAAc,OAAO,CAAA,EAAA,EAAK,OAAO,CAAA,QAAA,EAAW,CAAC,CAAA,GAAA,EAAM,KAAK,CAAA,CAAE,CAAC;IAChG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC;AAEnC,IAAA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC;IAC/C,MAAM,WAAW,GAAG,QAAQ,IAAI,uBAAuB,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;AAC1G,IAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,KAAK,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC,KAAK,EAAE,CAAS,KACxF,CAAA,CAAA,EAAI,CAAC,CAAA,oBAAA,EAAuB,IAAI,CAAA,eAAA,EAAkB,WAAW,IAAI,iBAAiB,CAAA,GAAA,EAAM,KAAK,CAAA,CAAE,CAAC,CAAC;AACnG,IAAA,OAAO,IAAI;AACb;;AC9iBA,MAAM,sBAAsB,GAAG,CAAC,IAAI,EAAE;AAEtC;AACA,MAAM,KAAK,GAAG,OAAO,GAA0B,EAAE,QAA2C,KAC1F,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,YAAY;AAEvG;AACA,eAAe,YAAY,CAAC,MAA0B,EAAE,QAAQ,GAAG,sBAAsB,EAAA;AACvF,IAAA,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAAE,QAAA,OAAO,SAAS;AACxE,IAAA,IAAI,MAAM,CAAC,IAAI,GAAG,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,CAAA,oBAAA,EAAuB,MAAM,CAAC,IAAI,CAAA,gDAAA,EAAmD,QAAQ,CAAA,EAAA,CAAI,CAAC;AAC9I,IAAA,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;AAC5D,IAAA,IAAI,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE;AAC7B,QAAA,MAAM,IAAI,KAAK,CAAC,wIAAwI,CAAC;IAC3J;AACA,IAAA,OAAO,IAAI,WAAW,CAAC,GAAG,CAAC;AAC7B;AAQA;AACA,MAAM,WAAW,GAAG,CAAC,GAAW,EAAE,GAAW,KAAI;IAC/C,KAAK,MAAM,EAAE,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC;AAAE,QAAA,OAAO,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC;AACnE,IAAA,OAAO,SAAS;AAClB,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAgB,EAAA;IAC7C,IAAI,SAAS,GAAG,CAAC;IACjB,OAAO,IAAI,eAAe,CAAC;QACzB,SAAS,CAAC,KAAK,EAAE,UAAU,EAAA;AACzB,YAAA,SAAS,IAAI,KAAK,CAAC,MAAM;AACzB,YAAA,IAAI,SAAS,GAAG,QAAQ,EAAE;gBACxB,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAA,6DAAA,EAAgE,QAAQ,CAAA,OAAA,CAAS,CAAC,CAAC;YAChH;iBAAO;AACL,gBAAA,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC;YAC3B;QACF;AACD,KAAA,CAAC;AACJ;AAEA;AACO,eAAe,iBAAiB,CAAC,MAAkC,EAAA;AACxE,IAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB;AACrC,IAAA,MAAM,WAAW,CAAC,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,oBAAoB,EAAE,CAAC,EAAE,GAAG,CAAC;AACrF,IAAA,OAAO,GAAG;AACZ;MAEa,WAAW,CAAA;;AAEtB,IAAA,MAAM,YAAY,CAAC,MAA0B,EAAE,OAAoD,EAAA;QACjG,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,oBAAoB,CAAC;AACrE,QAAA,IAAI,GAAG;AAAE,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE;AAC9I,QAAA,MAAM,GAAG,GAAG,IAAI,qBAAqB,CAAC,MAAM,CAAC;AAC7C,QAAA,MAAM,GAAG,CAAC,qBAAqB,EAAE;AACjC,QAAA,MAAM,GAAG,GAAG,OAAO,EAAE,oBAAoB,IAAI,sBAAsB;AACnE,QAAA,MAAM,QAAQ,GAAG,OAAO,IAAY,KAAK,GAAG,CAAC,GAAG,CAAC,IAAI;AACnD,cAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,KAAK,QAAQ,GAAG,CAAC,MAAM,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC;cAClJ,EAAE;QACN,IAAI,MAAM,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE;AAC9B,YAAA,MAAM,OAAO,GAAG,YAAW,EAAG,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,QAAQ,GAAG,EAAE,CAAC,WAAW,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAC7J,YAAA,OAAO,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC;QAC3C;AACA,QAAA,MAAM,KAAK,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC;QAElD,MAAM,MAAM,GAA2B,EAAE;AACzC,QAAA,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAAE;YAC1E,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;YAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC;YAChC,IAAI,IAAI,KAAK,IAAI;gBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,YAAY,GAAG,KAAK,GAAG,SAAS,EAAE,CAAC;QACnH;QACA,MAAM,YAAY,GAAkB,EAAE;QACtC,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,WAAW,EAAE,aAAa,CAAC,EAAE;YACvF,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC;YACxC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;;YAErC,MAAM,IAAI,GAAgB,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE;YACpF,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,KAAK,CAAC;gBAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI;YACtE,IAAI,OAAO,KAAK,IAAI;AAAE,gBAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AAC5C,YAAA,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;AAAE,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AACvE,YAAA,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;QACzB;QAEA,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,QAAQ,EAAE,EAAE,CAAC;QACtD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,EAAE,IAAI,IAAI,mBAAmB,CAAC;QACjH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,EAAE,IAAI,IAAI,kBAAkB,CAAC;QACnH,MAAM,UAAU,GAAuB,EAAE;AACzC,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC;AAChI,YAAA,CAAC,aAAa,EAAE,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC,CAAU,EAAE;YAC1E,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC;YAChC,IAAI,CAAC,KAAK,SAAS;AAAE,gBAAA,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;QAC1C;QACA,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,iBAAiB,CAAC;QACpD,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAAE,UAAU,CAAC,OAAO,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC;QAClF,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAU,EAAE;YAClF,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC;YAC/B,IAAI,CAAC,KAAK,SAAS;AAAE,gBAAA,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;QAC1C;AACA,QAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE;IAC7C;AAEA,IAAA,MAAM,KAAK,CAAC,MAA0B,EAAE,OAAsB,EAAA;QAC5D,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,oBAAoB,CAAC;AACrE,QAAA,IAAI,GAAG;AAAE,YAAA,OAAO,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC;AACxE,QAAA,MAAM,GAAG,GAAG,IAAI,qBAAqB,CAAC,MAAM,CAAC;AAC7C,QAAA,MAAM,GAAG,CAAC,qBAAqB,EAAE;AAEjC,QAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB;AAC/C,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB;AACxC,QAAA,MAAM,KAAK,GAAG,CAAC,EAA8B,EAAE,GAAG,GAAG,OAAO,EAAE,oBAAoB,IAAI,sBAAsB,KAC1G,GAAG,KAAK,QAAQ,GAAG,EAAE,CAAC,WAAW,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE;AACpE,QAAA,MAAM,QAAQ,GAAG,OAAO,IAAY,KAClC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE;QACpF,IAAI,MAAM,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE;YAC9B,MAAM,OAAO,GAAG,YAAY,KAAK,CAAC,MAAM,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,oBAAoB,IAAI,QAAQ,CAAC;AACpH,YAAA,OAAO,QAAQ,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC;QACnL;;AAGA,QAAA,MAAM,KAAK,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC;AAClD,QAAA,IAAI,gBAAoC;AACxC,QAAA,IAAI,OAAO,EAAE,SAAS,EAAE;YACtB,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;AACtD,YAAA,IAAI,CAAC,gBAAgB;gBAAE,MAAM,IAAI,KAAK,CAAC,CAAA,iBAAA,EAAoB,OAAO,CAAC,SAAS,CAAA,wBAAA,CAA0B,CAAC;QACzG;aAAO;;YAEL,gBAAgB,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAClF,mBAAA,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,8BAA8B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACrE,YAAA,IAAI,CAAC,gBAAgB;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC;QACvE;QACA,MAAM,MAAM,GAAG,oDAAoD,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;;AAG3F,QAAA,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,QAAQ,KAAK,KAAK,CAAC,KAAK,GAAG,gBAAgB,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE;AACxH,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,IAAI,eAAe;QAClD,IAAI,UAAU,GAA8B,EAAE;AAC9C,QAAA,IAAI,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC;QAChC,IAAI,OAAO,GAA2B,EAAE;AACxC,QAAA,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AACvB,YAAA,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,oBAAoB,EAAE,CAAC;YAChG,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC;QACpF;;AAGA,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,IAAI,sBAAsB;AAC7D,QAAA,MAAM,cAAc,GAAG,OAAO,EAAE,QAAQ,GAAG,IAAI,GAAG,EAAyB,GAAG,SAAS;AACvF,QAAA,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACpB,YAAA,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,oBAAoB,EAAE,CAAC;AAC7F,YAAA,MAAM,WAAW,CAAC,kBAAkB,CAAC,SAAS,EAAE,aAAa,EAAE,cAAc,IAAI,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC;QAClH;;QAGA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE;AAC9B,YAAA,MAAM,IAAI,KAAK,CAAC,aAAa,gBAAgB,CAAA,kBAAA,CAAoB,CAAC;QACpE;;AAEA,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,oBAAoB,IAAI,QAAQ;AACzG,aAAA,WAAW,CAAC,oBAAoB,EAAE,CAAC;QACtC,OAAO,cAAc,CAAC,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE;YAC9D,QAAQ,EAAE,OAAO,EAAE,QAAQ;YAC3B,MAAM,EAAE,OAAO,EAAE,MAAM;YACvB,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;YACpD,OAAO,EAAE,OAAO,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS;YACjD,QAAQ,EAAE,OAAO,EAAE,QAAQ,GAAG,KAAK,GAAG,SAAS;YAC/C,cAAc;AACd,YAAA,gBAAgB,EAAE,MAAM,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,CAAC;YACpE,eAAe,EAAE,OAAO,EAAE,oBAAoB;YAC9C,QAAQ,EAAE,YAAW;AACnB,gBAAA,MAAM,GAAG,GAAG,CAAC,MAAM,iBAAiB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACxH,gBAAA,OAAO,GAAG,GAAG,aAAa,CAAC,MAAM,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE;YAC3D,CAAC;AACD,YAAA,MAAM,EAAE,MAAM,eAAe,CAAC,QAAQ,EAAE,OAAM,IAAI,KAAI,GAAG,CAAC,GAAG,CAAC,IAAI;AAChE,kBAAE,IAAI,UAAU,CAAC,MAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,SAAS,EAAE,gBAAgB,CAAC;AAC1H,SAAA,CAAC;IACJ;IAEA,aAAa,kBAAkB,CAC7B,cAAqD,EACrD,GAAwB,EACxB,IAAgE,EAAA;AAEhE,QAAA,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,EAAE;QACzC,MAAM,IAAI,GAAG,IAAI,IAAI,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;QACtD,IAAI,KAAK,GAAG,CAAC;QACb,IAAI,MAAM,GAAG,KAAK;QAClB,IAAI,UAAU,GAAG,KAAK;QACtB,IAAI,aAAa,GAAG,EAAE;AAEtB,QAAA,IAAI;YACF,OAAO,IAAI,EAAE;gBACX,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE;AAC3C,gBAAA,IAAI,IAAI;oBAAE;gBAEV,KAAK,MAAM,KAAK,KAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,GAAiB;AAC1E,oBAAA,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC;AAClB,oBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE;wBACxD,aAAa,GAAG,EAAE;wBAClB,IAAI,EAAE,KAAK,EAAE;oBACf;AAAO,yBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE;AAChE,wBAAA,UAAU,GAAG,IAAI,CAAC;oBACpB;AAAO,yBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE;wBAC9D,UAAU,GAAG,KAAK;oBACpB;AAAO,yBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;wBAC7E,MAAM,GAAG,IAAI;oBACf;yBAAO,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,EAAE;AAC1C,wBAAA,aAAa,IAAI,KAAK,CAAC,KAAK;oBAC9B;AAAO,yBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,EAAE;wBAC5D,MAAM,GAAG,KAAK;oBAChB;AAAO,yBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE;AAC7D,wBAAA,IAAI,IAAI,EAAE,IAAI,CAAC,MAAM;4BAAE,IAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;wBACtD,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;oBAChD;gBACF;YACF;QACF;gBAAU;YACR,MAAM,CAAC,WAAW,EAAE;QACtB;IACF;;;AAIQ,IAAA,MAAM,WAAW,CAAC,cAAqD,EAAE,UAA+B,EAAE,KAAe,EAAA;AAC/H,QAAA,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,EAAE;AACzC,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,CAAiB,gBAAgB,CAAC;AACzD,QAAA,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU;QACxC,MAAM,KAAK,GAA6B,EAAE;QAC1C,MAAM,KAAK,GAA4C,EAAE;QACzD,MAAM,OAAO,GAA+B,EAAE;QAC9C,MAAM,UAAU,GAA8B,EAAE;AAChD,QAAA,MAAM,OAAO,GAA2B,EAAE,CAAC;;QAG3C,IAAI,OAAO,GAAG,EAAE;AAChB,QAAA,IAAI,IAA0B;AAC9B,QAAA,IAAI,IAAyC;QAC7C,IAAI,OAAO,GAAG,EAAE;AAChB,QAAA,IAAI,MAA8B;AAClC,QAAA,IAAI,IAA4B;AAChC,QAAA,IAAI,EAAyB;;QAE7B,MAAM,OAAO,GAAa,EAAE;QAC5B,MAAM,MAAM,GAAuD,EAAE;AACrE,QAAA,MAAM,KAAK,GAAG,CAAC,CAAyB,EAAE,GAA2B,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAE/F,QAAA,IAAI;YACF,OAAO,IAAI,EAAE;gBACX,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE;AAC3C,gBAAA,IAAI,IAAI;oBAAE;gBAEV,KAAK,MAAM,KAAK,KAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,GAAiB;AAC1E,oBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE;AACjC,wBAAA,MAAM,CAAC,GAAG,KAAK,CAAC,UAAU;wBAC1B,IAAI,IAAI,EAAE;4BAAE,MAAM,CAAC,GAAG,IAAI;AAAE,4BAAA,IAAI,gBAAgB,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,IAAI,MAAM,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gCAAE;wBAAU;AAC1H,wBAAA,QAAQ,KAAK,CAAC,IAAI;AAChB,4BAAA,KAAK,SAAS;AAAE,4BAAA,KAAK,OAAO;AAAE,4BAAA,KAAK,OAAO;AAAE,4BAAA,KAAK,SAAS;AAAE,4BAAA,KAAK,SAAS;AACxE,gCAAA,OAAO,GAAG,KAAK,CAAC,IAAI;gCACpB;AACF,4BAAA,KAAK,QAAQ;AACX,gCAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACzB,oCAAA,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;AAC7C,oCAAA,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;oCACtC,IAAI,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;AAAE,wCAAA,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;gCACrE;gCACA;AACF,4BAAA,KAAK,MAAM;gCACT,IAAI,OAAO,KAAK,OAAO;oCAAE,IAAI,GAAG,EAAE;gCAClC;AACF,4BAAA,KAAK,UAAU;gCACb,IAAI,OAAO,KAAK,eAAe;oCAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gCAC7D;AACF,4BAAA,KAAK,eAAe;AAClB,gCAAA,OAAO,GAAG,KAAK,CAAC,IAAI;gCACpB;AACF,4BAAA,KAAK,OAAO;gCACV,IAAI,IAAI,EAAE;oCAAE,MAAM,MAAM,GAAG,IAAI;AAAE,oCAAA,KAAK,CAAC,CAAC,EAAE,CAAC,IAAG,EAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gCAAE;qCAClE,IAAI,IAAI,EAAE;oCAAE,MAAM,MAAM,GAAG,IAAI;AAAE,oCAAA,KAAK,CAAC,CAAC,EAAE,CAAC,IAAG,EAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gCAAE;AACvE,qCAAA,IAAI,IAAI,EAAE,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AAAE,oCAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAAE,oCAAA,KAAK,CAAC,CAAC,EAAE,CAAC,IAAG,EAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gCAAE;gCAC/I;AACF,4BAAA,KAAK,MAAM;gCACT,IAAI,OAAO,KAAK,OAAO;AAAE,oCAAA,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;gCACrD;AACF,4BAAA,KAAK,aAAa;AAChB,gCAAA,OAAO,GAAG,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE;gCAChC;AACF,4BAAA,KAAK,SAAS;gCACZ,IAAI,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,OAAO,EAAE;AAC9C,oCAAA,MAAM,KAAK,GAAa,IAAI,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE;AAC7D,oCAAA,KAAK,CAAC,CAAC,EAAE,CAAC,IAAG,EAAG,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gCACvC;gCACA;AACF,4BAAA,KAAK,cAAc;gCACjB,IAAI,OAAO,KAAK,OAAO;oCAAE,IAAI,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;gCACjG;AACF,4BAAA,KAAK,MAAM;AACT,gCAAA,IAAI,IAAI,EAAE,IAAI,KAAK,UAAU;oCAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;gCACnG;AACF,4BAAA,KAAK,QAAQ;gCACX,IAAI,OAAO,KAAK,SAAS;oCAAE,MAAM,GAAG,EAAE;gCACtC;AACF,4BAAA,KAAK,MAAM;AAAE,4BAAA,KAAK,OAAO;AAAE,4BAAA,KAAK,KAAK;AAAE,4BAAA,KAAK,QAAQ;AAClD,gCAAA,IAAI,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,MAAM,EAAE;AACjD,oCAAA,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAc,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,CAAwB,EAAE;gCACpF;gCACA;AACF,4BAAA,KAAK,IAAI;AACP,gCAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACzB,oCAAA,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM;AAC/B,oCAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;AACnD,oCAAA,MAAM,MAAM,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC5E,oCAAA,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC;AACtC,oCAAA,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oCAErE,EAAE,GAAG,EAAE;AACP,oCAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;AAC/C,oCAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;AAC/C,oCAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;;AAEnD,oCAAA,IAAI,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC;AAAE,wCAAA,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;AACxD,oCAAA,IAAI,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC;AAAE,wCAAA,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;oCACxD,IAAI,OAAO,CAAC,QAAQ,CAAC;AAAE,wCAAA,EAAE,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;oCACpD,IAAI,QAAQ,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;wCAAE,EAAE,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC5E,oCAAA,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gCACrB;gCACA;AACF,4BAAA,KAAK,WAAW;gCACd,IAAI,EAAE,EAAE;oCACN,MAAM,SAAS,GAAkB,EAAE;oCACnC,IAAI,CAAC,CAAC,YAAY,CAAC;AAAE,wCAAA,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,YAAY,CAAgC;oCAC1F,IAAI,CAAC,CAAC,UAAU,CAAC;AAAE,wCAAA,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,UAAU,CAA8B;AAClF,oCAAA,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,MAAM;AAAE,wCAAA,SAAS,CAAC,QAAQ,GAAG,IAAI;AAChF,oCAAA,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM;AAAE,wCAAA,EAAE,CAAC,SAAS,GAAG,SAAS;gCAC7D;gCACA;;oBAEN;AAAO,yBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE;AACtC,wBAAA,QAAQ,KAAK,CAAC,IAAI;AAChB,4BAAA,KAAK,SAAS;AAAE,4BAAA,KAAK,OAAO;AAAE,4BAAA,KAAK,OAAO;AAAE,4BAAA,KAAK,SAAS;AAAE,4BAAA,KAAK,SAAS;AAAE,4BAAA,KAAK,eAAe;gCAC9F,OAAO,GAAG,EAAE;gCACZ;AACF,4BAAA,KAAK,MAAM;AACT,gCAAA,IAAI,IAAI;AAAE,oCAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;gCAC1B,IAAI,GAAG,SAAS;gCAChB;AACF,4BAAA,KAAK,MAAM;gCACT,IAAI,OAAO,KAAK,OAAO;oCAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI;gCACvD,IAAI,GAAG,SAAS;gCAChB,OAAO,GAAG,EAAE;gCACZ;AACF,4BAAA,KAAK,MAAM;AAAE,4BAAA,KAAK,OAAO;AAAE,4BAAA,KAAK,KAAK;AAAE,4BAAA,KAAK,QAAQ;gCAClD,IAAI,GAAG,SAAS;gCAChB;AACF,4BAAA,KAAK,QAAQ;AACX,gCAAA,IAAI,MAAM;oCAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;gCACzE,MAAM,GAAG,SAAS;gCAClB;AACF,4BAAA,KAAK,IAAI;gCACP,EAAE,GAAG,SAAS;gCACd;;oBAEN;gBACF;YACF;QACF;gBAAU;YACR,MAAM,CAAC,WAAW,EAAE;QACtB;AACA,QAAA,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;QACxE,KAAK,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,EAAE;AAC7B,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;AACrB,YAAA,IAAI,IAAI;gBAAE,GAAG,CAAC,IAAI,CAAC;QACrB;;QAEA,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI,EAAG,IAAI,CAAC,EAAE,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO;YAAE,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACzF,KAAK,MAAM,CAAC,IAAI,KAAK;AAAE,YAAA,IAAI,CAAC,EAAE,IAAI,KAAK,UAAU;AAAE,gBAAA,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC;AAC3F,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC;QAC3B,KAAK,MAAM,EAAE,IAAI,UAAU;AAAE,YAAA,IAAI,EAAE,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;gBAAE,OAAO,EAAE,CAAC,IAAI;;AAE/E,QAAA,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE;IAC9G;IAEQ,MAAM,kBAAkB,CAAC,MAAkC,EAAA;AACjE,QAAA,MAAM,WAAW,GAAG,IAAI,iBAAiB,EAAE;QAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,WAAkB,CAAC,CAAC,SAAS,EAAE;QACjE,IAAI,MAAM,GAAG,EAAE;QACf,OAAO,IAAI,EAAE;YACX,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE;AAC3C,YAAA,IAAI,IAAI;gBAAE;YACV,MAAM,IAAI,KAAK;QACjB;AACA,QAAA,OAAO,MAAM;IACf;AACD;;;;;;;;;;;;;;AC/ZD;AACA,MAAM,MAAM,GAAG,+CAA+C;AAE9D,SAAS,YAAY,CAAC,CAAS,EAAA;IAC7B,IAAI,CAAC,KAAK,EAAE;AAAE,QAAA,OAAO,IAAI;;AAEzB,IAAA,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAAE,QAAA,OAAO,MAAM,CAAC,CAAC,CAAC;AAC3D,IAAA,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,EAAE;IAC7B,OAAO,KAAK,KAAK,MAAM,GAAG,IAAI,GAAG,KAAK,KAAK,OAAO,GAAG,KAAK,GAAG,CAAC;AAChE;AAEA;AACA;AACO,gBAAgB,QAAQ,CAC7B,KAA0C,EAC1C,OAAA,GAAsB,EAAE,EAAA;AAExB,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,GAAG;AAC1C,IAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,IAAI,EAAE;AAC3F,QAAA,MAAM,IAAI,KAAK,CAAC,CAAA,sBAAA,EAAyB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA,CAAA,CAAG,CAAC;IACxE;AACA,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,KAAK,KAAK;IAEzC,IAAI,GAAG,GAAgB,EAAE;IACzB,IAAI,KAAK,GAAG,EAAE;AACd,IAAA,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,QAAQ,GAAG,KAAK;AACpB,IAAA,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,KAAK,GAAG,IAAI;IAChB,MAAM,IAAI,GAAkB,EAAE;IAE9B,MAAM,QAAQ,GAAG,MAAK;;AAEpB,QAAA,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,OAAO,IAAI,KAAK,KAAK,EAAE,GAAG,IAAI,GAAG,KAAK,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;QACzF,KAAK,GAAG,EAAE;QACV,MAAM,GAAG,KAAK;AAChB,IAAA,CAAC;IACD,MAAM,MAAM,GAAG,MAAK;;QAElB,IAAI,GAAG,CAAC,MAAM,IAAI,KAAK,KAAK,EAAE,IAAI,MAAM;AAAE,YAAA,QAAQ,EAAE;AACpD,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QACd,GAAG,GAAG,EAAE;AACV,IAAA,CAAC;AAED,IAAA,MAAM,IAAI,GAAG,CAAC,IAAY,KAAI;AAC5B,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,MAAM;gBAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACxD,KAAK,GAAG,KAAK;QACf;AACA,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YACjB,IAAI,MAAM,EAAE;gBACV,MAAM,GAAG,KAAK;gBACd,IAAI,CAAC,KAAK,IAAI;oBAAE;YAClB;YACA,IAAI,QAAQ,EAAE;gBACZ,IAAI,CAAC,KAAK,GAAG;oBAAE,QAAQ,GAAG,KAAK;;oBAC1B,KAAK,IAAI,CAAC;YACjB;AAAO,iBAAA,IAAI,CAAC,KAAK,GAAG,EAAE;;AAEpB,gBAAA,IAAI,MAAM;oBAAE,KAAK,IAAI,GAAG;qBACnB,IAAI,KAAK,KAAK,EAAE;oBAAE,MAAM,GAAG,IAAI;qBAC/B;oBAAE,KAAK,IAAI,CAAC;oBAAE;AAAU,gBAAA,CAAC;gBAC9B,QAAQ,GAAG,IAAI;YACjB;iBAAO,IAAI,CAAC,KAAK,SAAS;AAAE,gBAAA,QAAQ,EAAE;iBACjC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE;AACjC,gBAAA,MAAM,EAAE;AACR,gBAAA,MAAM,GAAG,CAAC,KAAK,IAAI;YACrB;;gBAAO,KAAK,IAAI,CAAC;QACnB;AACF,IAAA,CAAC;AAED,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,IAAI,CAAC,KAAK,CAAC;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACvB;SAAO;AACL,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,iBAAiB,EAAgD,CAAC,CAAC,SAAS,EAAE;AACnH,QAAA,IAAI;YACF,OAAO,IAAI,EAAE;gBACX,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE;AAC3C,gBAAA,IAAI,IAAI;oBAAE;gBACV,IAAI,CAAC,KAAK,CAAC;gBACX,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YACvB;QACF;gBAAU;;AAER,YAAA,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,MAAK,EAAE,CAAC,CAAC;QACvC;IACF;AACA,IAAA,IAAI,QAAQ;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC;IAChE,IAAI,GAAG,CAAC,MAAM,IAAI,KAAK,KAAK,EAAE,IAAI,MAAM;AAAE,QAAA,MAAM,EAAE;IAClD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACvB;;ACnGA;AACA;AACA;AAmBA,MAAM,SAAS,GAAG,CAAC,GAAY,KAAKC,WAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAE3D,MAAM,YAAY,GAAG,CAAC,CAAyB,KAC7C,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,EAAE,CAAC,YAAY,IAAI,CAAC;AAE7D;AACA;AACA,MAAM,GAAG,GAAG,wJAAwJ;AAC9J,SAAU,aAAa,CAAC,OAAe,EAAA;IAC3C,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;IACnC,IAAI,GAAG,GAAG,EAAE;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG;AAC7B,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACb,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC;AAAE,gBAAA,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC;YACrF,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACxB,YAAA,CAAC,GAAG,CAAC,GAAG,CAAC;YACT;QACF;AACA,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;YAAE,GAAG,IAAI,GAAG;AAAE,YAAA,CAAC,EAAE;YAAE;QAAU;;AAE5C,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE;AAClC,YAAA,GAAG,CAAC,SAAS,GAAG,CAAC;YACjB,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,EAAE;gBACL,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA,CAAE,GAAG,EAAE;AACjD,gBAAA,GAAG,IAAI,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;AACvE,gBAAA,CAAC,GAAG,GAAG,CAAC,SAAS;gBACjB;YACF;QACF;QACA,GAAG,IAAI,CAAC;AACR,QAAA,CAAC,EAAE;IACL;IACA,OAAO,CAAA,IAAA,EAAO,GAAG,CAAA,CAAE;AACrB;AAEA;AACA,SAAS,OAAO,CAAC,CAAS,EAAA;AACxB,IAAA,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,WAAW,SAAS,CAAC,IAAI;AACvD,SAAA,OAAO,CAAC,KAAK,EAAE,aAAa;AAC5B,SAAA,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,WAAW,GAAG,CAAA,iBAAA,EAAoB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA,GAAA,CAAK,CAAC,CAAA,SAAA,CAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACpH;AAEA;AACA,MAAM,SAAS,GAAG,CAAC,CAAO,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,kBAAkB,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACzF,MAAM,OAAO,GAAG,CAAC,CAAO,KAAK,CAAC,CAAC,OAAO,EAAE,GAAG,QAAQ,KAAK,CAAC;AAEzD;AACA,SAAS,OAAO,CAAC,IAAwC,EAAE,IAAY,EAAE,OAAgB,EAAE,QAA6B,EAAA;AACtH,IAAA,IAAI,OAAO;AAAE,QAAA,OAAO,6BAA6B;AACjD,IAAA,IAAI,KAAK,GAAG,YAAY,CAAC,IAAK,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI;AACnD,IAAA,MAAM,OAAO,GAAG,YAAY,CAAC,IAAK,CAAC,IAAI,IAAI,CAAC,OAAO,GAAG,CAAA,gBAAA,EAAmB,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA,CAAA,CAAG,GAAG,EAAE;;AAEvH,IAAA,IAAI,OAAO,IAAI,KAAK,IAAI,IAAI;QAAE,KAAK,GAAG,QAAQ,EAAE;IAChD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,KAAK,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;AAC5F,QAAA,OAAO,OAAO,IAAI,IAAI,GAAG,CAAA,iBAAA,EAAoB,OAAO,CAAA,EAAG,IAAI,CAAA,EAAA,CAAI,GAAG,qBAAqB;IACzF;AACA,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,OAAO,CAAA,iBAAA,EAAoB,OAAO,CAAA,yCAAA,EAA4C,KAAK,IAAI,IAAI,CAAA,SAAA,EAAY,KAAK,CAAA,4BAAA,CAA8B;IAC5I;AACA,IAAA,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;AAC9B,QAAA,OAAO,8CAA8C,OAAO,CAAA,mDAAA,EAAsD,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,SAAA,EAAY,KAAK,GAAG,MAAM,GAAG,OAAO,8BAA8B;IACnM;AACA,IAAA,IAAI,KAAK,YAAY,IAAI,EAAE;AACzB,QAAA,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC;AAC1B,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QACnE,OAAO,CAAA,oCAAA,EAAuC,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,GAAG,QAAQ,CAAA,CAAA,EAAI,OAAO,CAAA,6CAAA,EAAgD,CAAC,IAAI,IAAI,CAAA,SAAA,EAAY,KAAK,CAAA,4BAAA,CAA8B;IAC3M;AACA,IAAA,OAAO,CAAA,iBAAA,EAAoB,OAAO,CAAA,2BAAA,EAA8B,IAAI,CAAA,CAAA,EAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,qBAAqB;AACrH;AAEA,MAAM,EAAE,GAAG;MACP;MACA;MACA;MACA;;AAEA,MAAA,oEAAoE;MAI3D,SAAS,CAAA;AAGS,IAAA,aAAA;IAFrB,MAAM,GAAY,EAAE;AAE5B,IAAA,WAAA,CAA6B,gBAAkC,EAAE,EAAA;QAApC,IAAA,CAAA,aAAa,GAAb,aAAa;IAA0B;AAEpE,IAAA,QAAQ,CAAC,IAAY,EAAE,IAAgC,EAAE,UAA2B,EAAE,EAAA;AACpF,QAAA,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AACrD,QAAA,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,UAAU,IAAI,EAAE;YAAE,UAAU,CAAC,KAAK,CAAC;AAC/D,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AACzC,QAAA,OAAO,IAAI;IACb;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC;AACzD,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC;AACxH,QAAA,MAAM,GAAG,GAAG,IAAI,eAAe,EAAE;AACjC,QAAA,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE;AACjC,QAAA,MAAM,IAAI,GAAG,CAAC,CAAS,KAAK,IAAI,cAAc,CAAa,EAAE,KAAK,CAAC,CAAC,EAAA,EAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAErH,CAAC,YAAW;AACV,YAAA,IAAI;;gBAEF,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC;gBACzC,MAAM,GAAG,CAAC,iBAAiB,CAAC,UAAU,EAAE,IAAI,cAAc,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACnJ,MAAM,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;AACtD,gBAAA,MAAM,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA,8DAAA,EAAiE,EAAE,CAAA,0CAAA,CAA4C,CAAC,CAAC;AACtJ,gBAAA,MAAM,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AACnD,gBAAA,MAAM,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC3D,MAAM,GAAG,CAAC,OAAO,CAAC,uBAAuB,EAAE,IAAI,CAAC;sBAC5C;AACA,sBAAA,CAAA,wFAAA,EAA2F,YAAY,CAAA,GAAA;sBACvG,CAAC,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAA,yCAAA,EAA4C,CAAC,CAAA,kCAAA,CAAoC,CAAC,CAAC,IAAI,CAAC,EAAE;sBAC7J,sBAAsB,CAAC,CAAC;AAC5B,gBAAA,MAAM,GAAG,CAAC,KAAK,EAAE;YACnB;YAAE,OAAO,GAAG,EAAE;AACZ,gBAAA,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;YAChB;QACF,CAAC,GAAG;QACJ,OAAO,GAAG,CAAC,MAAM;IACnB;IAEQ,aAAa,GAAA;AACnB,QAAA,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE;AACjC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;QAC1B,gBAAgB,KAAK,GAAA;AACnB,YAAA,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB;AAC9C,YAAA,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,IAAG,EAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;AAAE,gBAAA,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,CAAA,EAAA,EAAK,YAAY,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpJ,MAAM,CAAA,+DAAA,EAAkE,EAAE,CAAA,0BAAA;kBACtE;kBACA;kBACA;kBACA;kBACA;kBACA;kBACA;kBACA;;AAEA,kBAAA,CAAC,GAAG,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAA,yBAAA,EAA4B,IAAI,oFAAoF,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA,mBAAA,CAAqB,CAAC,CAAC,IAAI,CAAC,EAAE;AACpN,kBAAA,6DAA6D;AAEjE,YAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;gBAC1B,MAAM,CAAA,yBAAA,EAA4B,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA,oBAAA,EAAuB,KAAK,CAAC,OAAO,CAAC,KAAK,KAAK,QAAQ,GAAG,UAAU,GAAG,WAAW,CAAA,EAAA;AACrI,sBAAA,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,yCAAyC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA,GAAA,CAAK,GAAG,uBAAuB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;;AAG7J,gBAAA,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,EAAE,GAAG,CAAC,UAAU,CAAC;gBAC/D,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;AAC3D,gBAAA,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,CAAS,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;;AAEpF,gBAAA,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE;gBAClC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AAC7B,oBAAA,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAG;AACnD,wBAAA,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO;AAAE,4BAAA,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACxE,wBAAA,MAAM,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI;AAChD,wBAAA,OAAO,CAAC,YAAY,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI;oBACxD,CAAC,CAAC,CAAC,CAAC;gBACN;AACA,gBAAA,MAAM,QAAQ,GAAG,CAAC,GAAW,KAAI;oBAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;AAAE,wBAAA,OAAO,IAAI;oBAC3C,MAAM,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC;AAC/B,oBAAA,OAAO,CAAC,YAAY,YAAY,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;AAC/C,gBAAA,CAAC;gBACD,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,CAAS,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAE1I,gBAAA,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE;AACrB,gBAAA,MAAM,QAAQ,GAAG,CAAC,GAAQ,KAAI;oBAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;oBACpG,IAAI,GAAG,GAAG,mBAAmB;AAC7B,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;wBAC9B,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AACvB,wBAAA,MAAM,IAAI,GAAG,CAAC,GAAG,CAAA,+BAAA,EAAkC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,6BAAA,EAAgC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAA,CAAG,GAAG,EAAE;AACzH,wBAAA,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACrF;AACA,oBAAA,CAAC,EAAE;AACH,oBAAA,OAAO,GAAG,IAAI,KAAK,GAAG,EAAE,GAAG,qBAAqB,CAAC,GAAG,oBAAoB;AAC1E,gBAAA,CAAC;gBACD,WAAW,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE;AAClC,oBAAA,KAAK,IAAI,QAAQ,CAAC,GAAG,CAAC;oBACtB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE;AAAE,wBAAA,MAAM,KAAK;wBAAE,KAAK,GAAG,EAAE;oBAAE;gBACzD;gBACA,OAAO,CAAC,IAAI,YAAY;AAAE,oBAAA,KAAK,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAChD,MAAM,KAAK,GAAG,gBAAgB;YAChC;AACA,YAAA,MAAM,+DAA+D;QACvE;AACA,QAAA,MAAM,EAAE,GAAG,KAAK,EAAE;QAClB,OAAO,IAAI,cAAc,CAAa;YACpC,MAAM,IAAI,CAAC,UAAU,EAAA;gBACnB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE;AACvC,gBAAA,IAAI,IAAI;oBAAE,UAAU,CAAC,KAAK,EAAE;;oBAAO,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9E,CAAC;AACD,YAAA,MAAM,MAAM,GAAA,EAAK,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC/C,SAAA,CAAC;IACJ;IAEQ,OAAO,GAAA;QACb,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,IAAI,EAAE;QAC7C,MAAM,EAAE,GAAG,CAAC,GAAW,EAAE,CAAU,KAAK,CAAC,GAAG,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,SAAS,CAAC,CAAC,CAAC,CAAA,EAAA,EAAK,GAAG,CAAA,CAAA,CAAG,GAAG,EAAE;QACnF,OAAO,CAAA,4DAAA,EAA+D,EAAE,CAAA,cAAA;cACpE;AACA,cAAA,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,sBAAsB,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO;AAC1H,cAAA,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,gBAAgB,EAAE,CAAC,CAAC,WAAW;cACnE,EAAE,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;AAC7E,cAAA,uCAAuC;IAC7C;;IAGQ,WAAW,GAAA;AACjB,QAAA,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,IAAY,EAAE,KAAsB,KAAK,oCAAoC,IAAI,CAAA,eAAA,EAAkB,IAAI,CAAA,EAAA,EAAK,KAAK,uBAAuB;AACpK,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAG;YACvG,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,WAAY,CAAC,GAAG,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,WAAY,CAAC,GAAG,IAAI,CAAC;AACpF,YAAA,OAAO,8CAA8C,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA,EAAA;AAClE,kBAAA,IAAI,CAAC,qBAAqB,EAAE,OAAO,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,mBAAmB,EAAE,OAAO,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC;AACpG,kBAAA,IAAI,CAAC,yBAAyB,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,uBAAuB,EAAE,KAAK,EAAE,IAAI;kBACxF,IAAI,CAAC,kBAAkB,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,IAAI;AACzG,kBAAA,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAI;AAClE,kBAAA,iCAAiC;AACvC,QAAA,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAE;QAClE,OAAO,CAAA,gEAAA,EAAmE,EAAE,CAAA,kBAAA;cACxE;cACA,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;AACvF,cAAA,CAAA,mDAAA,EAAsD,MAAM,CAAA,+BAAA;AAC5D,cAAA,wIAAwI;IAC9I;AACD;AAED,SAAS,UAAU,CAAC,KAAa,EAAA;IAC/B,MAAM,CAAC,GAAG,yDAAyD,CAAC,IAAI,CAAC,KAAK,CAAC;AAC/E,IAAA,IAAI,CAAC,CAAC;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,KAAK,CAAA,CAAA,CAAG,CAAC;AACzD,IAAA,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/E,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;AACnG;;ACvOO,MAAM,QAAQ,GAAG;AACtB,IAAA,MAAM,QAAQ,CAAC,QAAgB,EAAE,OAA6C,EAAA;QAC5E,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,4DAA8B;QACjE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,qDAAsB;AACpD,QAAA,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE;AAChC,QAAA,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC;;;QAGnD,IAAI,MAAM,GAAG,KAAK;QAClB,MAAM,QAAQ,GAAG,OAAO,MAAc,EAAE,MAAc,KAAI;AACxD,YAAA,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC;AAC7C,YAAA,IAAI;gBAAE,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;YAAE;oBAAU;AAAE,gBAAA,MAAM,IAAI,CAAC,KAAK,EAAE;YAAE;AAChF,QAAA,CAAC;AACD,QAAA,IAAI;AACF,YAAA,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC;gBACxB,IAAI,EAAE,UAAU,CAAC,IAAI;AACrB,gBAAA,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;AAC7F,gBAAA,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;AAC7D,gBAAA,KAAK,EAAE,cAAa,CAAC;aACtB,EAAE,OAAO,CAAC;QACb;gBAAU;YACR,MAAM,GAAG,IAAI;AACb,YAAA,MAAM,UAAU,CAAC,KAAK,EAAE;QAC1B;IACF;;;"}
|