@sixb/ducklake 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -2,7 +2,7 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/internal/ducklake-change-reader.ts", "../src/internal/duckdb-row.ts", "../src/internal/ducklake-dataset-table-ref.ts", "../src/internal/names.ts", "../src/internal/sql.ts", "../src/internal/schema.ts", "../src/internal/duckdb-column-types.ts", "../src/internal/duckdb-decimal.ts", "../src/internal/versions.ts", "../src/internal/ducklake-connection-manager.ts", "../src/internal/catalog-key.ts", "../src/internal/duckdb-runtime.ts", "../src/internal/duckdb-reader.ts", "../src/internal/duckdb-value-converter.ts", "../src/internal/ducklake-read-gate.ts", "../src/internal/ducklake-dataset-catalog.ts", "../src/internal/ducklake-catalog-schema.ts", "../src/internal/ducklake-current-dataset-definitions.ts", "../src/internal/ducklake-version-transaction.ts", "../src/internal/lineage-encoding.ts", "../src/internal/ducklake-maintenance.ts", "../src/internal/ducklake-row-reader.ts", "../src/internal/ducklake-snapshot-reader.ts", "../src/internal/ducklake-sql-executor.ts", "../src/internal/dataset-row-commit.ts", "../src/internal/sql-lineage/analysis.ts", "../src/internal/sql-transform-relations.ts", "../src/internal/sql-lineage/rejection.ts", "../src/internal/sql-lineage/plan-json.ts", "../src/internal/sql-lineage/plan-relation.ts", "../src/internal/sql-lineage/expressions.ts", "../src/internal/sql-lineage/table-functions.ts", "../src/internal/sql-lineage/plan-walker.ts", "../src/internal/sql-lineage/statement-gate.ts", "../src/internal/ducklake-write-coordinator.ts", "../src/internal/dataset-row-merge.ts", "../src/internal/ducklake-merge-session.ts", "../src/internal/row-appender.ts", "../src/internal/ducklake-write-session.ts", "../src/ducklake-storage.ts"],
4
4
  "sourcesContent": [
5
- "import { randomUUID } from \"node:crypto\"\nimport type { DatasetColumnDefinition, DatasetRow } from \"@sixb/core\"\nimport {\n type DatasetChanges,\n type DatasetRowChange,\n LakeStorageError,\n type ReadDatasetChangesInput,\n resolveDatasetChangeColumns,\n} from \"@sixb/core/lake-storage\"\nimport type { DuckLakeStorageOptions } from \"../types\"\nimport { getBigIntLike } from \"./duckdb-row\"\nimport type { DuckDbQueryRuntime } from \"./duckdb-runtime\"\nimport type { DuckLakeConnectionManager } from \"./ducklake-connection-manager\"\nimport { resolveDatasetTableRef } from \"./ducklake-dataset-table-ref\"\nimport type { DuckLakeSnapshotReader } from \"./ducklake-snapshot-reader\"\nimport { normalizeReadValue } from \"./schema\"\nimport { qualifiedTableName, quoteIdentifier } from \"./sql\"\nimport { parseVersionId } from \"./versions\"\n\nconst PAGE_ROWS = 5_000\n\n/** Compare once in DuckDB, then page only the delta without holding the connection between yields. */\nexport class DuckLakeChangeReader {\n constructor(\n private readonly options: DuckLakeStorageOptions,\n private readonly connections: DuckLakeConnectionManager,\n private readonly snapshots: DuckLakeSnapshotReader\n ) {}\n\n async readChanges(input: ReadDatasetChangesInput): Promise<DatasetChanges | null> {\n input.signal?.throwIfAborted()\n const before = await this.snapshots.getVersion(input.datasetId, input.fromVersionId)\n const after = await this.snapshots.getVersion(input.datasetId, input.toVersionId)\n const columns = resolveDatasetChangeColumns(input, before, after)\n if (!columns) return null\n const lease = await this.connections.acquireAttachedRuntime()\n const runtime = lease.runtime\n const temporary = quoteIdentifier(`sixb_delta_${randomUUID().replaceAll(\"-\", \"\")}`)\n let retained = false\n let created = false\n try {\n const ref = await resolveDatasetTableRef(this.options, runtime, input.datasetId)\n if (!ref) return null\n const table = qualifiedTableName(this.options, ref.tableName)\n const oldRelation = `${table} AT (VERSION => ${parseVersionId(input.fromVersionId)})`\n const newRelation = `${table} AT (VERSION => ${parseVersionId(input.toVersionId)})`\n const previousCount = await uniqueRowCount(runtime, oldRelation, input.keyColumns)\n const nextCount = await uniqueRowCount(runtime, newRelation, input.keyColumns)\n if (previousCount === null || nextCount === null) return null\n input.signal?.throwIfAborted()\n const key = quoteIdentifier(input.keyColumns[0]!)\n const values = columns.flatMap((column, index) => [\n `b.${quoteIdentifier(column.name)} AS b${index}`,\n `a.${quoteIdentifier(column.name)} AS a${index}`,\n ])\n const join = input.keyColumns\n .map((name) => `b.${quoteIdentifier(name)} = a.${quoteIdentifier(name)}`)\n .join(\" AND \")\n const changed = columns\n .map(\n (column) =>\n `b.${quoteIdentifier(column.name)} IS DISTINCT FROM a.${quoteIdentifier(column.name)}`\n )\n .join(\" OR \")\n // The native change feed reflects DELETE/INSERT writes: snapshot ingestion can produce 2N\n // physical changes for one logical edit. Compare the pinned states instead of replaying it.\n await runtime.run(`CREATE TEMP TABLE ${temporary} AS\n SELECT b.${key} IS NOT NULL AS before_present, a.${key} IS NOT NULL AS after_present,\n ${values.join(\", \")}\n FROM (SELECT * FROM ${oldRelation}) b\n FULL OUTER JOIN (SELECT * FROM ${newRelation}) a ON ${join}\n WHERE b.${key} IS NULL OR a.${key} IS NULL OR ${changed}`)\n created = true\n const [count] = await runtime.query(`SELECT count(*) AS count FROM ${temporary}`)\n const changeCount = safeCount(count!, \"count\")\n input.signal?.throwIfAborted()\n let closePromise: Promise<void> | undefined\n const close = () => {\n closePromise ??= runtime.run(`DROP TABLE IF EXISTS ${temporary}`)\n return closePromise\n }\n const changes = (async function* (): AsyncIterable<DatasetRowChange> {\n try {\n let cursor = -1n\n let delivered = 0\n while (delivered < changeCount) {\n input.signal?.throwIfAborted()\n if (closePromise) throw new LakeStorageError(\"[SixbDuckLake] Change reader is closed.\")\n const page = await runtime.query(`SELECT rowid AS position, * FROM ${temporary}\n WHERE rowid > ${cursor} ORDER BY rowid LIMIT ${PAGE_ROWS}`)\n if (page.length === 0)\n throw new LakeStorageError(\n \"[SixbDuckLake] Change read ended before its declared count.\"\n )\n for (const row of page) {\n input.signal?.throwIfAborted()\n delivered++\n yield {\n before: row.before_present === true ? rowImage(row, \"b\", columns) : null,\n after: row.after_present === true ? rowImage(row, \"a\", columns) : null,\n }\n }\n cursor = getBigIntLike(page[page.length - 1]!, \"position\")\n }\n } finally {\n await close()\n }\n })()\n retained = true\n return { fromRowCount: previousCount, toRowCount: nextCount, changeCount, changes, close }\n } finally {\n // The delta is a DuckDB temp table, independent of the attached DuckLake catalog. Release\n // the local attachment lock before returning it, otherwise consumer lake operations deadlock.\n try {\n if (!retained && created) await runtime.run(`DROP TABLE IF EXISTS ${temporary}`)\n } finally {\n await lease.release()\n }\n }\n }\n}\n\nasync function uniqueRowCount(\n runtime: DuckDbQueryRuntime,\n relation: string,\n keys: readonly string[]\n): Promise<number | null> {\n const names = keys.map(quoteIdentifier)\n const invalid = names.map((name) => `${name} IS NULL OR trim(${name}) = ''`).join(\" OR \")\n const [row] = await runtime.query(`SELECT count(*) AS total,\n count(DISTINCT (${names.join(\", \")})) AS unique_keys,\n count(*) FILTER (WHERE ${invalid}) AS invalid_keys FROM ${relation}`)\n const count = safeCount(row!, \"total\")\n return safeCount(row!, \"unique_keys\") === count && safeCount(row!, \"invalid_keys\") === 0\n ? count\n : null\n}\n\nfunction safeCount(row: Readonly<Record<string, unknown>>, name: string): number {\n const count = Number(getBigIntLike(row, name))\n if (!Number.isSafeInteger(count) || count < 0)\n throw new LakeStorageError(\"[SixbDuckLake] Change count exceeds the supported integer range.\")\n return count\n}\n\nfunction rowImage(\n row: Readonly<Record<string, unknown>>,\n prefix: \"a\" | \"b\",\n columns: readonly DatasetColumnDefinition[]\n): DatasetRow {\n return Object.fromEntries(\n columns.map((column, index) => [\n column.name,\n normalizeReadValue(row[`${prefix}${index}`], column),\n ])\n )\n}\n",
5
+ "import { randomUUID } from \"node:crypto\"\nimport type { DatasetColumnDefinition, DatasetRow } from \"@sixb/core\"\nimport {\n type DatasetChanges,\n type DatasetRowChange,\n LakeStorageError,\n type ReadDatasetChangesInput,\n resolveDatasetChangeColumns,\n} from \"@sixb/core/lake-storage\"\nimport type { DuckLakeStorageOptions } from \"../types\"\nimport { getBigIntLike } from \"./duckdb-row\"\nimport type { DuckDbQueryRuntime } from \"./duckdb-runtime\"\nimport type { DuckLakeConnectionManager } from \"./ducklake-connection-manager\"\nimport { resolveDatasetTableRef } from \"./ducklake-dataset-table-ref\"\nimport type { DuckLakeSnapshotReader } from \"./ducklake-snapshot-reader\"\nimport { normalizeReadValue } from \"./schema\"\nimport { qualifiedTableName, quoteIdentifier } from \"./sql\"\nimport { parseVersionId } from \"./versions\"\n\nconst PAGE_ROWS = 5_000\n\n/** Compare once in DuckDB, then page only the delta without holding the connection between yields. */\nexport class DuckLakeChangeReader {\n constructor(\n private readonly options: DuckLakeStorageOptions,\n private readonly connections: DuckLakeConnectionManager,\n private readonly snapshots: DuckLakeSnapshotReader\n ) {}\n\n async readChanges(input: ReadDatasetChangesInput): Promise<DatasetChanges | null> {\n input.signal?.throwIfAborted()\n const before = await this.snapshots.getVersion(input.datasetId, input.fromVersionId)\n const after = await this.snapshots.getVersion(input.datasetId, input.toVersionId)\n const columns = resolveDatasetChangeColumns(input, before, after)\n if (!columns) return null\n\n // Versions that only record new provenance or source ordering hold their parent's rows: their\n // change set is empty, whatever the keys, so it needs neither the key checks nor the join.\n const unchanged =\n (input.toVersionId === input.fromVersionId || !after!.rowsChanged) &&\n (await this.snapshots.holdsRowsOf(input.datasetId, input.toVersionId, input.fromVersionId))\n\n const lease = await this.connections.acquireAttachedRuntime()\n const runtime = lease.runtime\n const temporary = quoteIdentifier(`sixb_delta_${randomUUID().replaceAll(\"-\", \"\")}`)\n let retained = false\n let created = false\n try {\n const ref = await resolveDatasetTableRef(this.options, runtime, input.datasetId)\n if (!ref) return null\n const table = qualifiedTableName(this.options, ref.tableName)\n const oldRelation = `${table} AT (VERSION => ${parseVersionId(input.fromVersionId)})`\n const newRelation = `${table} AT (VERSION => ${parseVersionId(input.toVersionId)})`\n if (unchanged) {\n return noChanges(\n after!.rowCount ?? before!.rowCount ?? (await countRows(runtime, newRelation))\n )\n }\n\n const previousCount = await uniqueRowCount(runtime, oldRelation, input.keyColumns)\n const nextCount = await uniqueRowCount(runtime, newRelation, input.keyColumns)\n if (previousCount === null || nextCount === null) return null\n input.signal?.throwIfAborted()\n const key = quoteIdentifier(input.keyColumns[0]!)\n const values = columns.flatMap((column, index) => [\n `b.${quoteIdentifier(column.name)} AS b${index}`,\n `a.${quoteIdentifier(column.name)} AS a${index}`,\n ])\n const join = input.keyColumns\n .map((name) => `b.${quoteIdentifier(name)} = a.${quoteIdentifier(name)}`)\n .join(\" AND \")\n const changed = columns\n .map(\n (column) =>\n `b.${quoteIdentifier(column.name)} IS DISTINCT FROM a.${quoteIdentifier(column.name)}`\n )\n .join(\" OR \")\n // The native change feed reflects DELETE/INSERT writes: snapshot ingestion can produce 2N\n // physical changes for one logical edit. Compare the pinned states instead of replaying it.\n await runtime.run(`CREATE TEMP TABLE ${temporary} AS\n SELECT b.${key} IS NOT NULL AS before_present, a.${key} IS NOT NULL AS after_present,\n ${values.join(\", \")}\n FROM (SELECT * FROM ${oldRelation}) b\n FULL OUTER JOIN (SELECT * FROM ${newRelation}) a ON ${join}\n WHERE b.${key} IS NULL OR a.${key} IS NULL OR ${changed}`)\n created = true\n const [count] = await runtime.query(`SELECT count(*) AS count FROM ${temporary}`)\n const changeCount = safeCount(count!, \"count\")\n input.signal?.throwIfAborted()\n let closePromise: Promise<void> | undefined\n const close = () => {\n closePromise ??= runtime.run(`DROP TABLE IF EXISTS ${temporary}`)\n return closePromise\n }\n const changes = (async function* (): AsyncIterable<DatasetRowChange> {\n try {\n let cursor = -1n\n let delivered = 0\n while (delivered < changeCount) {\n input.signal?.throwIfAborted()\n if (closePromise) throw new LakeStorageError(\"[SixbDuckLake] Change reader is closed.\")\n const page = await runtime.query(`SELECT rowid AS position, * FROM ${temporary}\n WHERE rowid > ${cursor} ORDER BY rowid LIMIT ${PAGE_ROWS}`)\n if (page.length === 0)\n throw new LakeStorageError(\n \"[SixbDuckLake] Change read ended before its declared count.\"\n )\n for (const row of page) {\n input.signal?.throwIfAborted()\n delivered++\n yield {\n before: row.before_present === true ? rowImage(row, \"b\", columns) : null,\n after: row.after_present === true ? rowImage(row, \"a\", columns) : null,\n }\n }\n cursor = getBigIntLike(page[page.length - 1]!, \"position\")\n }\n } finally {\n await close()\n }\n })()\n retained = true\n return { fromRowCount: previousCount, toRowCount: nextCount, changeCount, changes, close }\n } finally {\n // The delta is a DuckDB temp table, independent of the attached DuckLake catalog. Release\n // the local attachment lock before returning it, otherwise consumer lake operations deadlock.\n try {\n if (!retained && created) await runtime.run(`DROP TABLE IF EXISTS ${temporary}`)\n } finally {\n await lease.release()\n }\n }\n }\n}\n\nfunction noChanges(rowCount: number): DatasetChanges {\n return {\n fromRowCount: rowCount,\n toRowCount: rowCount,\n changeCount: 0,\n changes: (async function* () {\n yield* []\n })(),\n async close() {},\n }\n}\n\nasync function countRows(runtime: DuckDbQueryRuntime, relation: string): Promise<number> {\n const [row] = await runtime.query(`SELECT count(*) AS total FROM ${relation}`)\n return safeCount(row!, \"total\")\n}\n\nasync function uniqueRowCount(\n runtime: DuckDbQueryRuntime,\n relation: string,\n keys: readonly string[]\n): Promise<number | null> {\n const names = keys.map(quoteIdentifier)\n const invalid = names.map((name) => `${name} IS NULL OR trim(${name}) = ''`).join(\" OR \")\n const [row] = await runtime.query(`SELECT count(*) AS total,\n count(DISTINCT (${names.join(\", \")})) AS unique_keys,\n count(*) FILTER (WHERE ${invalid}) AS invalid_keys FROM ${relation}`)\n const count = safeCount(row!, \"total\")\n return safeCount(row!, \"unique_keys\") === count && safeCount(row!, \"invalid_keys\") === 0\n ? count\n : null\n}\n\nfunction safeCount(row: Readonly<Record<string, unknown>>, name: string): number {\n const count = Number(getBigIntLike(row, name))\n if (!Number.isSafeInteger(count) || count < 0)\n throw new LakeStorageError(\"[SixbDuckLake] Change count exceeds the supported integer range.\")\n return count\n}\n\nfunction rowImage(\n row: Readonly<Record<string, unknown>>,\n prefix: \"a\" | \"b\",\n columns: readonly DatasetColumnDefinition[]\n): DatasetRow {\n return Object.fromEntries(\n columns.map((column, index) => [\n column.name,\n normalizeReadValue(row[`${prefix}${index}`], column),\n ])\n )\n}\n",
6
6
  "import { LakeStorageError } from \"@sixb/core/lake-storage\"\n\nexport type DuckDbRow = Readonly<Record<string, unknown>>\n\nexport function getString(row: DuckDbRow, key: string): string {\n const value = row[key]\n if (typeof value !== \"string\") {\n throw new LakeStorageError(\n `[SixbDuckLake] Expected DuckDB column '${key}' to be a string, got ${typeof value}.`\n )\n }\n\n return value\n}\n\nexport function getOptionalString(row: DuckDbRow, key: string): string | undefined {\n const value = row[key]\n if (value === null || value === undefined) {\n return undefined\n }\n\n if (typeof value !== \"string\") {\n throw new LakeStorageError(\n `[SixbDuckLake] Expected DuckDB column '${key}' to be a string, got ${typeof value}.`\n )\n }\n\n return value\n}\n\nexport function getBoolean(row: DuckDbRow, key: string): boolean {\n const value = row[key]\n if (typeof value !== \"boolean\") {\n throw new LakeStorageError(\n `[SixbDuckLake] Expected DuckDB column '${key}' to be a boolean, got ${typeof value}.`\n )\n }\n\n return value\n}\n\nexport function getBigIntLike(row: DuckDbRow, key: string): bigint {\n const value = row[key]\n if (typeof value === \"bigint\") {\n return value\n }\n\n if (typeof value === \"number\" && Number.isInteger(value)) {\n return BigInt(value)\n }\n\n if (typeof value === \"string\" && /^-?\\d+$/.test(value)) {\n return BigInt(value)\n }\n\n throw new LakeStorageError(\n `[SixbDuckLake] Expected DuckDB column '${key}' to be an integer, got ${typeof value}.`\n )\n}\n\nexport function getOptionalBigIntLike(row: DuckDbRow, key: string): bigint | undefined {\n const value = row[key]\n if (value === null || value === undefined) {\n return undefined\n }\n\n return getBigIntLike(row, key)\n}\n\nexport function getDate(row: DuckDbRow, key: string): Date {\n const value = row[key]\n if (value instanceof Date) {\n return value\n }\n\n if (typeof value === \"string\") {\n return new Date(value)\n }\n\n throw new LakeStorageError(\n `[SixbDuckLake] Expected DuckDB column '${key}' to be a date, got ${typeof value}.`\n )\n}\n",
7
7
  "import { LakeStorageError } from \"@sixb/core/lake-storage\"\nimport type { DuckLakeStorageOptions } from \"../types\"\nimport { getBigIntLike } from \"./duckdb-row\"\nimport type { DuckDbQueryRuntime } from \"./duckdb-runtime\"\nimport { encodeDatasetSequenceTableName, encodeDatasetTableName } from \"./names\"\nimport { duckLakeAlias, duckLakeMetadataTableName, quoteIdentifier, quoteSqlString } from \"./sql\"\n\nexport interface DatasetTableRef {\n readonly datasetId: string\n readonly tableName: string\n readonly tableId: bigint\n /** The table a sequenced dataset keeps its source ordering in, which merges also change. */\n readonly sequenceTableId?: bigint\n}\n\nexport async function resolveDatasetTableRef(\n options: DuckLakeStorageOptions,\n runtime: DuckDbQueryRuntime,\n datasetId: string\n): Promise<DatasetTableRef | null> {\n return tableRefFromRows(datasetId, await runtime.query(datasetTablesSql(options, datasetId)))\n}\n\n/**\n * The dataset's tables and the lake's current snapshot, in one catalog read. Inside a\n * transaction, reading the current snapshot also fixes the transaction's DuckLake snapshot, which\n * DuckLake otherwise fixes on its first read of the lake.\n */\nexport async function resolveDatasetTableRefAtCurrentSnapshot(\n options: DuckLakeStorageOptions,\n runtime: DuckDbQueryRuntime,\n datasetId: string\n): Promise<{ readonly snapshotId: string; readonly table: DatasetTableRef | null }> {\n // Joined on true, the current snapshot still reads when the dataset has no table.\n const rows = await runtime.query(`\n SELECT current.id AS current_snapshot, tables.table_id, tables.table_name\n FROM ${quoteIdentifier(duckLakeAlias(options))}.current_snapshot() current\n LEFT JOIN (${datasetTablesSql(options, datasetId)}) tables ON true\n `)\n const [first] = rows\n if (first === undefined) {\n throw new LakeStorageError(\"[SixbDuckLake] DuckLake did not return a current snapshot.\")\n }\n\n return {\n snapshotId: String(getBigIntLike(first, \"current_snapshot\")),\n table: tableRefFromRows(\n datasetId,\n rows.filter((row) => row.table_id !== null && row.table_id !== undefined)\n ),\n }\n}\n\n/** Every table a dataset's versions change. */\nexport function datasetTableIds(table: Omit<DatasetTableRef, \"tableName\">): readonly bigint[] {\n return table.sequenceTableId === undefined\n ? [table.tableId]\n : [table.tableId, table.sequenceTableId]\n}\n\nfunction datasetTablesSql(options: DuckLakeStorageOptions, datasetId: string): string {\n const tableNames = [encodeDatasetTableName(datasetId), encodeDatasetSequenceTableName(datasetId)]\n return `\n SELECT table_id, table_name\n FROM ${duckLakeMetadataTableName(options, \"ducklake_table\")}\n WHERE table_name IN (${tableNames.map((name) => quoteSqlString(name)).join(\", \")})\n AND end_snapshot IS NULL\n `\n}\n\nfunction tableRefFromRows(\n datasetId: string,\n rows: readonly Readonly<Record<string, unknown>>[]\n): DatasetTableRef | null {\n const tableName = encodeDatasetTableName(datasetId)\n const tableIdOf = (name: string) => {\n const row = rows.find((candidate) => candidate.table_name === name)\n return row === undefined ? undefined : getBigIntLike(row, \"table_id\")\n }\n\n const tableId = tableIdOf(tableName)\n if (tableId === undefined) {\n return null\n }\n\n const sequenceTableId = tableIdOf(encodeDatasetSequenceTableName(datasetId))\n return {\n datasetId,\n tableName,\n tableId,\n ...(sequenceTableId === undefined ? {} : { sequenceTableId }),\n }\n}\n",
8
8
  "import { LakeStorageError } from \"@sixb/core/lake-storage\"\n\n/**\n * Prefix used for all Sixb dataset tables inside the DuckLake schema.\n */\nexport const DATASET_TABLE_PREFIX = \"sixb__ds__\"\n\nconst textEncoder = new TextEncoder()\nconst textDecoder = new TextDecoder(\"utf-8\", { fatal: true })\n\nfunction isInlineByte(byte: number): boolean {\n return (byte >= 0x61 && byte <= 0x7a) || (byte >= 0x30 && byte <= 0x39)\n}\n\nfunction isHexPair(value: string): boolean {\n return /^[0-9a-f]{2}$/.test(value)\n}\n\n/**\n * Encode a Sixb dataset id into a SQL identifier-safe table suffix.\n *\n * Common lowercase dotted ids stay readable by mapping \".\" to \"__\". Literal\n * underscores and all other non-inline UTF-8 bytes are encoded as \"_xx\" hex\n * escapes so decoding is collision-free.\n */\nfunction encodeDatasetId(datasetId: string): string {\n if (datasetId.trim().length === 0) {\n throw new LakeStorageError(\"[SixbDuckLake] Dataset id must not be empty.\")\n }\n\n let encoded = \"\"\n for (const byte of textEncoder.encode(datasetId)) {\n if (isInlineByte(byte)) {\n encoded += String.fromCharCode(byte)\n } else if (byte === 0x2e) {\n encoded += \"__\"\n } else {\n encoded += `_${byte.toString(16).padStart(2, \"0\")}`\n }\n }\n\n return encoded\n}\n\n/**\n * Decode a table suffix created by `encodeDatasetId`.\n *\n * Returns null for malformed provider table names so metadata scans can filter\n * defensively instead of throwing on unrelated tables.\n */\nfunction decodeDatasetId(encoded: string): string | null {\n if (encoded.length === 0) {\n return null\n }\n\n const bytes: number[] = []\n let index = 0\n\n while (index < encoded.length) {\n const char = encoded[index]\n const byte = char.charCodeAt(0)\n\n if (isInlineByte(byte)) {\n bytes.push(byte)\n index += 1\n continue\n }\n\n if (char !== \"_\") {\n return null\n }\n\n if (encoded[index + 1] === \"_\") {\n bytes.push(0x2e)\n index += 2\n continue\n }\n\n const hex = encoded.slice(index + 1, index + 3)\n if (!isHexPair(hex)) {\n return null\n }\n\n bytes.push(Number.parseInt(hex, 16))\n index += 3\n }\n\n try {\n return textDecoder.decode(new Uint8Array(bytes))\n } catch {\n return null\n }\n}\n\n/**\n * Convert a Sixb dataset id to its physical DuckLake table name.\n */\nexport function encodeDatasetTableName(datasetId: string): string {\n return `${DATASET_TABLE_PREFIX}${encodeDatasetId(datasetId)}`\n}\n\n/** Current source-ordering state, deliberately outside the dataset table namespace. */\nexport function encodeDatasetSequenceTableName(datasetId: string): string {\n return `sixb__seq__${encodeDatasetTableName(datasetId)}`\n}\n\n/**\n * Decode a physical DuckLake table name back to a Sixb dataset id.\n */\nexport function decodeDatasetTableName(tableName: string): string | null {\n if (!tableName.startsWith(DATASET_TABLE_PREFIX)) {\n return null\n }\n\n return decodeDatasetId(tableName.slice(DATASET_TABLE_PREFIX.length))\n}\n",
@@ -10,7 +10,7 @@
10
10
  "import type { DatasetColumnDefinition, DatasetColumnType, DatasetSchema, FileRef } from \"@sixb/core\"\nimport { LakeStorageError } from \"@sixb/core/lake-storage\"\nimport { DUCKDB_COLUMN_TYPES, findDatasetColumnTypeForDuckDbSql } from \"./duckdb-column-types\"\nimport { normalizeDuckDbDecimalValue } from \"./duckdb-decimal\"\nimport { quoteIdentifier } from \"./sql\"\n\n/**\n * Normalized column metadata read from DuckDB/DuckLake introspection queries.\n */\nexport interface DuckDbColumnMetadata {\n readonly name: string\n readonly type: string\n readonly nullable: boolean\n}\n\n/**\n * Map a Sixb dataset column type to the DuckDB type used in CREATE TABLE.\n */\nexport function datasetColumnTypeToDuckDbSql(type: DatasetColumnType): string {\n return DUCKDB_COLUMN_TYPES[type].sql\n}\n\n/**\n * Reconstruct a Sixb dataset column type from DuckDB column metadata.\n */\nexport function duckDbTypeToDatasetColumnType(typeSql: string): DatasetColumnType {\n const type = findDatasetColumnTypeForDuckDbSql(typeSql)\n if (type) {\n return type\n }\n\n throw new LakeStorageError(\n `[SixbDuckLake] DuckDB column type '${typeSql}' cannot be mapped to a Sixb dataset column type.`\n )\n}\n\n/**\n * Render one Sixb dataset column as DuckDB DDL.\n */\nexport function datasetColumnToDuckDbSql(column: DatasetColumnDefinition): string {\n const nullableSql = column.nullable ? \"\" : \" NOT NULL\"\n return `${quoteIdentifier(column.name)} ${datasetColumnTypeToDuckDbSql(column.type)}${nullableSql}`\n}\n\n/**\n * Render the column list used by CREATE TABLE and staging table DDL.\n */\nexport function datasetSchemaToDuckDbColumnsSql(schema: DatasetSchema): string {\n return schema.columns.map((column) => datasetColumnToDuckDbSql(column)).join(\", \")\n}\n\n/** Render a dataset schema for merge staging, where delete rows leave non-key values null. */\nexport function datasetSchemaToDuckDbNullableColumnsSql(schema: DatasetSchema): string {\n return schema.columns\n .map((column) => `${quoteIdentifier(column.name)} ${datasetColumnTypeToDuckDbSql(column.type)}`)\n .join(\", \")\n}\n\n/**\n * Render the column list used by INSERT ... SELECT operations.\n */\nexport function datasetSchemaColumnNamesSql(schema: DatasetSchema): string {\n return schema.columns.map((column) => quoteIdentifier(column.name)).join(\", \")\n}\n\n/**\n * Convert DuckDB column metadata back into a Sixb dataset schema.\n */\nexport function duckDbColumnsToDatasetSchema(\n columns: readonly DuckDbColumnMetadata[]\n): DatasetSchema {\n return {\n columns: columns.map((column) => ({\n name: column.name,\n type: duckDbTypeToDatasetColumnType(column.type),\n ...(column.nullable ? { nullable: true } : {}),\n })),\n }\n}\n\nexport function normalizeReadValue(value: unknown, column: DatasetColumnDefinition): unknown {\n if (value === null || value === undefined) {\n return null\n }\n\n switch (column.type) {\n case \"int64\":\n return typeof value === \"bigint\" ? value.toString() : value\n case \"decimal\":\n return normalizeDuckDbDecimalValue(value, column.name)\n case \"date\":\n return value instanceof Date ? value.toISOString().slice(0, 10) : String(value)\n case \"timestamp\":\n return value instanceof Date ? value.toISOString() : String(value)\n case \"json\":\n return typeof value === \"string\" ? JSON.parse(value) : value\n case \"fileRef\":\n return normalizeFileRef(value)\n default:\n return value\n }\n}\n\nfunction normalizeFileRef(value: unknown): FileRef {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new LakeStorageError(\"[SixbDuckLake] DuckDB fileRef value must be a struct.\")\n }\n\n const record = value as Record<string, unknown>\n return {\n blobId: getStringField(record, \"blobId\"),\n digest: getStringField(record, \"digest\") as FileRef[\"digest\"],\n sizeBytes: getIntegerField(record, \"sizeBytes\"),\n fileName: getOptionalStringField(record, \"fileName\"),\n mediaType: getOptionalStringField(record, \"mediaType\"),\n logicalPath: getOptionalStringField(record, \"logicalPath\"),\n }\n}\n\nfunction getStringField(record: Readonly<Record<string, unknown>>, key: string): string {\n const value = record[key]\n if (typeof value !== \"string\") {\n throw new LakeStorageError(`[SixbDuckLake] DuckDB fileRef field '${key}' must be a string.`)\n }\n\n return value\n}\n\nfunction getOptionalStringField(\n record: Readonly<Record<string, unknown>>,\n key: string\n): string | undefined {\n const value = record[key]\n if (value === null || value === undefined) {\n return undefined\n }\n\n if (typeof value !== \"string\") {\n throw new LakeStorageError(`[SixbDuckLake] DuckDB fileRef field '${key}' must be a string.`)\n }\n\n return value\n}\n\nfunction getIntegerField(record: Readonly<Record<string, unknown>>, key: string): number {\n const value = record[key]\n if (typeof value === \"number\" && Number.isInteger(value)) {\n return value\n }\n\n if (typeof value === \"bigint\") {\n return Number(value)\n }\n\n throw new LakeStorageError(`[SixbDuckLake] DuckDB fileRef field '${key}' must be an integer.`)\n}\n",
11
11
  "import type { DatasetColumnType } from \"@sixb/core\"\n\ninterface DuckDbColumnTypeMapping {\n readonly sql: string\n readonly matches: (typeSql: string) => boolean\n}\n\ninterface DuckDbDecimalTypeMapping extends DuckDbColumnTypeMapping {\n readonly precision: number\n readonly scale: number\n}\n\nfunction normalizeDuckDbTypeSql(typeSql: string): string {\n return typeSql\n .trim()\n .toUpperCase()\n .replace(/\\s+/g, \" \")\n .replace(/\\s*([(),])\\s*/g, \"$1\")\n}\n\nfunction defineDuckDbColumnType<const Sql extends string>(\n sql: Sql,\n aliases: readonly string[] = []\n): DuckDbColumnTypeMapping & { readonly sql: Sql } {\n const acceptedTypes = new Set([sql, ...aliases].map(normalizeDuckDbTypeSql))\n return {\n sql,\n matches: (typeSql) => acceptedTypes.has(normalizeDuckDbTypeSql(typeSql)),\n }\n}\n\nfunction defineDuckDbDecimalType(precision: number, scale: number): DuckDbDecimalTypeMapping {\n return {\n ...defineDuckDbColumnType(`DECIMAL(${precision}, ${scale})`),\n precision,\n scale,\n }\n}\n\n/**\n * DuckDB representations used for every Sixb dataset column type.\n *\n * Each entry owns both its CREATE TABLE representation and the metadata\n * spellings accepted when reconstructing a Sixb dataset schema.\n */\nexport const DUCKDB_COLUMN_TYPES = {\n string: defineDuckDbColumnType(\"VARCHAR\"),\n boolean: defineDuckDbColumnType(\"BOOLEAN\"),\n int64: defineDuckDbColumnType(\"BIGINT\", [\"INT64\"]),\n float64: defineDuckDbColumnType(\"DOUBLE\", [\"FLOAT64\"]),\n decimal: defineDuckDbDecimalType(38, 9),\n date: defineDuckDbColumnType(\"DATE\"),\n timestamp: defineDuckDbColumnType(\"TIMESTAMPTZ\", [\"TIMESTAMP WITH TIME ZONE\"]),\n json: defineDuckDbColumnType(\"JSON\"),\n fileRef: defineDuckDbColumnType(\n \"STRUCT(blobId VARCHAR, digest VARCHAR, sizeBytes BIGINT, fileName VARCHAR, mediaType VARCHAR, logicalPath VARCHAR)\"\n ),\n} satisfies Record<DatasetColumnType, DuckDbColumnTypeMapping>\n\nexport function findDatasetColumnTypeForDuckDbSql(typeSql: string): DatasetColumnType | undefined {\n for (const type of Object.keys(DUCKDB_COLUMN_TYPES) as DatasetColumnType[]) {\n if (DUCKDB_COLUMN_TYPES[type].matches(typeSql)) {\n return type\n }\n }\n\n return undefined\n}\n",
12
12
  "import { type DecimalValue, normalizeDecimalValue } from \"@sixb/core\"\nimport { LakeStorageError } from \"@sixb/core/lake-storage\"\nimport { DUCKDB_COLUMN_TYPES } from \"./duckdb-column-types\"\n\nconst decimalType = DUCKDB_COLUMN_TYPES.decimal\nconst maxIntegerDigits = decimalType.precision - decimalType.scale\n\n/**\n * Normalize a dataset decimal and reject values DuckDB would round or overflow.\n */\nexport function normalizeDuckDbDecimalValue(value: unknown, columnName: string): DecimalValue {\n if (typeof value !== \"string\") {\n throw new LakeStorageError(\n `[SixbDuckLake] Decimal column '${columnName}' must be an exact decimal string.`\n )\n }\n\n let normalized: DecimalValue\n try {\n normalized = normalizeDecimalValue(value)\n } catch {\n throw new LakeStorageError(\n `[SixbDuckLake] Decimal column '${columnName}' must be an exact decimal string.`\n )\n }\n\n const unsigned = normalized.startsWith(\"-\") ? normalized.slice(1) : normalized\n const [integer, fraction = \"\"] = unsigned.split(\".\")\n if (integer.length > maxIntegerDigits || fraction.length > decimalType.scale) {\n throw new LakeStorageError(\n `[SixbDuckLake] Decimal column '${columnName}' cannot be represented exactly as ${decimalType.sql}; expected at most ${maxIntegerDigits} integer digits and ${decimalType.scale} fractional digits.`\n )\n }\n\n return normalized\n}\n",
13
- "import type { DatasetProducer, DatasetVersion } from \"@sixb/core/lake-storage\"\nimport { LakeStorageError } from \"@sixb/core/lake-storage\"\n\nexport interface SixbSchemaChangeMetadata {\n readonly addColumns?: readonly string[]\n}\n\nexport interface SixbCommitMetadata {\n readonly kind: \"datasetVersion\"\n readonly datasetId: string\n readonly commitId?: string\n readonly mode?: DatasetVersion[\"mode\"]\n readonly producer?: DatasetVersion[\"producer\"]\n readonly inputs?: DatasetVersion[\"inputs\"]\n readonly rowCount?: number\n readonly validatedPrimaryKeyColumns?: readonly string[]\n readonly schemaChange?: SixbSchemaChangeMetadata\n /** As `encodeLineage` stored it: decoded only for the versions a read returns. */\n readonly lineage?: unknown\n}\n\nexport function parseVersionId(versionId: string): string {\n if (!versionId.startsWith(\"ducklake:\")) {\n throw new LakeStorageError(`[SixbDuckLake] Invalid DuckLake version id '${versionId}'.`)\n }\n\n const snapshotId = versionId.slice(\"ducklake:\".length)\n if (!/^\\d+$/.test(snapshotId)) {\n throw new LakeStorageError(`[SixbDuckLake] Invalid DuckLake version id '${versionId}'.`)\n }\n\n return snapshotId\n}\n\nexport function toVersionId(snapshotId: string): string {\n return `ducklake:${snapshotId}`\n}\n\nexport function parseCommitMetadata(value: unknown): SixbCommitMetadata | undefined {\n if (typeof value !== \"string\") {\n return undefined\n }\n\n let parsed: unknown\n try {\n parsed = JSON.parse(value)\n } catch {\n return undefined\n }\n\n if (\n !isRecord(parsed) ||\n !isRecord(parsed.sixb) ||\n parsed.sixb.kind !== \"datasetVersion\" ||\n typeof parsed.sixb.datasetId !== \"string\"\n ) {\n return undefined\n }\n\n const mode = parsed.sixb.mode\n const commitId = parsed.sixb.commitId\n const producer = parseDatasetProducer(parsed.sixb.producer)\n const rowCount = parsed.sixb.rowCount\n const validatedPrimaryKeyColumns = parsed.sixb.validatedPrimaryKeyColumns\n\n return {\n kind: \"datasetVersion\",\n datasetId: parsed.sixb.datasetId,\n ...(typeof commitId === \"string\" ? { commitId } : {}),\n ...(mode === \"snapshot\" || mode === \"append\" || mode === \"merge\" || mode === \"schema\"\n ? { mode }\n : {}),\n ...(producer === undefined ? {} : { producer }),\n ...(isDatasetVersionRefs(parsed.sixb.inputs) ? { inputs: parsed.sixb.inputs } : {}),\n ...(typeof commitId === \"string\" && isRowCount(rowCount) ? { rowCount } : {}),\n ...(typeof commitId === \"string\" && isValidatedPrimaryKeyColumns(validatedPrimaryKeyColumns)\n ? { validatedPrimaryKeyColumns }\n : {}),\n ...(isSchemaChangeMetadata(parsed.sixb.schemaChange)\n ? { schemaChange: parsed.sixb.schemaChange }\n : {}),\n ...(parsed.sixb.lineage === undefined ? {} : { lineage: parsed.sixb.lineage }),\n }\n}\n\n/** Whether a DuckLake snapshot's `changes_made` names one of the tables, for any change. */\nexport function changesTouchTables(changesMade: string, tableIds: readonly bigint[]): boolean {\n const ids = new Set(tableIds.map((tableId) => tableId.toString()))\n return changesMade.split(\",\").some((change) => ids.has(change.split(\":\")[1] ?? \"\"))\n}\n\n/**\n * Whether a DuckLake snapshot changed a table's rows, and whether it removed any. DuckLake records\n * every row change in `changes_made`, for inlined rows (`inlined_insert:<id>`) as for files\n * (`inserted_into_table:<id>`, `deleted_from_table:<id>`); altering a table changes none.\n */\nexport function parseTableDataChange(\n changesMade: string,\n tableId: bigint\n): { readonly hasDataChange: boolean; readonly hasDeleteChange: boolean } {\n const tableIdText = tableId.toString()\n let hasDataChange = false\n let hasDeleteChange = false\n\n for (const change of changesMade.split(\",\")) {\n const [kind, changedTableId] = change.split(\":\")\n if (changedTableId !== tableIdText) {\n continue\n }\n\n const normalizedKind = kind.toLowerCase()\n if (normalizedKind.includes(\"insert\") || normalizedKind.includes(\"delete\")) {\n hasDataChange = true\n }\n\n if (normalizedKind.includes(\"delete\")) {\n hasDeleteChange = true\n }\n }\n\n return { hasDataChange, hasDeleteChange }\n}\n\nfunction isRecord(value: unknown): value is Readonly<Record<string, unknown>> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n\n/**\n * Malformed fields are dropped rather than failing the read, and never the producer's kind: a\n * pipeline version must keep reading as one, since a pipeline version without lineage is\n * classified with every marking.\n */\nfunction parseDatasetProducer(value: unknown): DatasetProducer | undefined {\n if (\n !isRecord(value) ||\n (value.kind !== \"sync\" && value.kind !== \"pipeline\" && value.kind !== \"ingest\")\n ) {\n return undefined\n }\n\n return {\n kind: value.kind,\n ...(typeof value.id === \"string\" ? { id: value.id } : {}),\n ...(typeof value.runId === \"string\" ? { runId: value.runId } : {}),\n ...(typeof value.stepId === \"string\" ? { stepId: value.stepId } : {}),\n }\n}\n\nfunction isDatasetVersionRefs(value: unknown): value is NonNullable<DatasetVersion[\"inputs\"]> {\n return (\n Array.isArray(value) &&\n value.every(\n (item) =>\n isRecord(item) && typeof item.datasetId === \"string\" && typeof item.versionId === \"string\"\n )\n )\n}\n\nfunction isSchemaChangeMetadata(value: unknown): value is SixbSchemaChangeMetadata {\n return (\n isRecord(value) &&\n (value.addColumns === undefined ||\n (Array.isArray(value.addColumns) &&\n value.addColumns.every((columnName) => typeof columnName === \"string\")))\n )\n}\n\nfunction isRowCount(value: unknown): value is number {\n return typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0\n}\n\nfunction isValidatedPrimaryKeyColumns(value: unknown): value is readonly string[] {\n return (\n Array.isArray(value) &&\n value.length > 0 &&\n value.every((column) => typeof column === \"string\" && column.trim().length > 0) &&\n new Set(value).size === value.length\n )\n}\n",
13
+ "import type { DatasetProducer, DatasetVersion } from \"@sixb/core/lake-storage\"\nimport { LakeStorageError } from \"@sixb/core/lake-storage\"\n\nexport interface SixbSchemaChangeMetadata {\n readonly addColumns?: readonly string[]\n}\n\nexport interface SixbCommitMetadata {\n readonly kind: \"datasetVersion\"\n readonly datasetId: string\n readonly commitId?: string\n readonly mode?: DatasetVersion[\"mode\"]\n readonly producer?: DatasetVersion[\"producer\"]\n readonly inputs?: DatasetVersion[\"inputs\"]\n readonly rowCount?: number\n readonly validatedPrimaryKeyColumns?: readonly string[]\n readonly schemaChange?: SixbSchemaChangeMetadata\n /** As `encodeLineage` stored it: decoded only for the versions a read returns. */\n readonly lineage?: unknown\n /** As `DatasetVersion.rowsChanged`. Absent on versions written before Sixb recorded it. */\n readonly rowsChanged?: boolean\n /** As `DatasetVersion.lineageChanged`. Absent on versions written before Sixb recorded it. */\n readonly lineageChanged?: boolean\n}\n\nexport function parseVersionId(versionId: string): string {\n if (!versionId.startsWith(\"ducklake:\")) {\n throw new LakeStorageError(`[SixbDuckLake] Invalid DuckLake version id '${versionId}'.`)\n }\n\n const snapshotId = versionId.slice(\"ducklake:\".length)\n if (!/^\\d+$/.test(snapshotId)) {\n throw new LakeStorageError(`[SixbDuckLake] Invalid DuckLake version id '${versionId}'.`)\n }\n\n return snapshotId\n}\n\nexport function toVersionId(snapshotId: string): string {\n return `ducklake:${snapshotId}`\n}\n\nexport function parseCommitMetadata(value: unknown): SixbCommitMetadata | undefined {\n if (typeof value !== \"string\") {\n return undefined\n }\n\n let parsed: unknown\n try {\n parsed = JSON.parse(value)\n } catch {\n return undefined\n }\n\n if (\n !isRecord(parsed) ||\n !isRecord(parsed.sixb) ||\n parsed.sixb.kind !== \"datasetVersion\" ||\n typeof parsed.sixb.datasetId !== \"string\"\n ) {\n return undefined\n }\n\n const mode = parsed.sixb.mode\n const commitId = parsed.sixb.commitId\n const producer = parseDatasetProducer(parsed.sixb.producer)\n const rowCount = parsed.sixb.rowCount\n const validatedPrimaryKeyColumns = parsed.sixb.validatedPrimaryKeyColumns\n const { rowsChanged, lineageChanged } = parsed.sixb\n\n return {\n kind: \"datasetVersion\",\n datasetId: parsed.sixb.datasetId,\n ...(typeof commitId === \"string\" ? { commitId } : {}),\n ...(mode === \"snapshot\" || mode === \"append\" || mode === \"merge\" || mode === \"schema\"\n ? { mode }\n : {}),\n ...(producer === undefined ? {} : { producer }),\n ...(isDatasetVersionRefs(parsed.sixb.inputs) ? { inputs: parsed.sixb.inputs } : {}),\n ...(typeof commitId === \"string\" && isRowCount(rowCount) ? { rowCount } : {}),\n ...(typeof commitId === \"string\" && isValidatedPrimaryKeyColumns(validatedPrimaryKeyColumns)\n ? { validatedPrimaryKeyColumns }\n : {}),\n ...(isSchemaChangeMetadata(parsed.sixb.schemaChange)\n ? { schemaChange: parsed.sixb.schemaChange }\n : {}),\n ...(parsed.sixb.lineage === undefined ? {} : { lineage: parsed.sixb.lineage }),\n ...(typeof rowsChanged === \"boolean\" ? { rowsChanged } : {}),\n ...(typeof lineageChanged === \"boolean\" ? { lineageChanged } : {}),\n }\n}\n\n/** Whether a DuckLake snapshot's `changes_made` names one of the tables, for any change. */\nexport function changesTouchTables(changesMade: string, tableIds: readonly bigint[]): boolean {\n const ids = new Set(tableIds.map((tableId) => tableId.toString()))\n return changesMade.split(\",\").some((change) => ids.has(change.split(\":\")[1] ?? \"\"))\n}\n\n/**\n * Whether a DuckLake snapshot changed a table's rows, and whether it removed any. DuckLake records\n * every row change in `changes_made`, for inlined rows (`inlined_insert:<id>`) as for files\n * (`inserted_into_table:<id>`, `deleted_from_table:<id>`); altering a table changes none.\n */\nexport function parseTableDataChange(\n changesMade: string,\n tableId: bigint\n): { readonly hasDataChange: boolean; readonly hasDeleteChange: boolean } {\n const tableIdText = tableId.toString()\n let hasDataChange = false\n let hasDeleteChange = false\n\n for (const change of changesMade.split(\",\")) {\n const [kind, changedTableId] = change.split(\":\")\n if (changedTableId !== tableIdText) {\n continue\n }\n\n const normalizedKind = kind.toLowerCase()\n if (normalizedKind.includes(\"insert\") || normalizedKind.includes(\"delete\")) {\n hasDataChange = true\n }\n\n if (normalizedKind.includes(\"delete\")) {\n hasDeleteChange = true\n }\n }\n\n return { hasDataChange, hasDeleteChange }\n}\n\nfunction isRecord(value: unknown): value is Readonly<Record<string, unknown>> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n\n/**\n * Malformed fields are dropped rather than failing the read, and never the producer's kind: a\n * pipeline version must keep reading as one, since a pipeline version without lineage is\n * classified with every marking.\n */\nfunction parseDatasetProducer(value: unknown): DatasetProducer | undefined {\n if (\n !isRecord(value) ||\n (value.kind !== \"sync\" && value.kind !== \"pipeline\" && value.kind !== \"ingest\")\n ) {\n return undefined\n }\n\n return {\n kind: value.kind,\n ...(typeof value.id === \"string\" ? { id: value.id } : {}),\n ...(typeof value.runId === \"string\" ? { runId: value.runId } : {}),\n ...(typeof value.stepId === \"string\" ? { stepId: value.stepId } : {}),\n }\n}\n\nfunction isDatasetVersionRefs(value: unknown): value is NonNullable<DatasetVersion[\"inputs\"]> {\n return (\n Array.isArray(value) &&\n value.every(\n (item) =>\n isRecord(item) && typeof item.datasetId === \"string\" && typeof item.versionId === \"string\"\n )\n )\n}\n\nfunction isSchemaChangeMetadata(value: unknown): value is SixbSchemaChangeMetadata {\n return (\n isRecord(value) &&\n (value.addColumns === undefined ||\n (Array.isArray(value.addColumns) &&\n value.addColumns.every((columnName) => typeof columnName === \"string\")))\n )\n}\n\nfunction isRowCount(value: unknown): value is number {\n return typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0\n}\n\nfunction isValidatedPrimaryKeyColumns(value: unknown): value is readonly string[] {\n return (\n Array.isArray(value) &&\n value.length > 0 &&\n value.every((column) => typeof column === \"string\" && column.trim().length > 0) &&\n new Set(value).size === value.length\n )\n}\n",
14
14
  "import { LakeStorageError } from \"@sixb/core/lake-storage\"\nimport type { DuckLakeStorageOptions } from \"../types\"\nimport { localCatalogCoordinationKey } from \"./catalog-key\"\nimport type { DuckDbReader } from \"./duckdb-reader\"\nimport {\n createDuckDbRuntime,\n type DuckDbExclusiveRuntime,\n type DuckDbQueryRuntime,\n type DuckDbRuntime,\n installDuckLakeExtensions,\n setupDuckLake,\n} from \"./duckdb-runtime\"\nimport { DuckLakeReadGate } from \"./ducklake-read-gate\"\nimport {\n buildAttachSql,\n buildConfigurePostgresMetadataPoolSql,\n duckLakeAlias,\n quoteIdentifier,\n} from \"./sql\"\n\nexport interface DuckLakeAttachedRuntimeLease {\n readonly runtime: DuckDbRuntime\n release(): Promise<void>\n}\n\n/**\n * Owns DuckDB/DuckLake runtime lifecycle for DuckLakeStorage.\n *\n * A storage instance owns one DuckDB runtime and at most one DuckLake\n * attachment. The runtime starts unattached so construction and non-lake setup\n * do not immediately open DuckLake metadata connections; reads and commits\n * attach lazily through `attachedRuntime()`.\n */\nexport class DuckLakeConnectionManager {\n private runtimePromise: Promise<DuckDbRuntime> | undefined\n private installExtensionsPromise: Promise<void> | undefined\n private attachPromise: Promise<void> | undefined\n private refreshPromise: Promise<void> | undefined\n // Local catalogs need DETACH/ATTACH to refresh metadata visibility. Keep\n // those attachment changes outside whole read operations so a read cannot\n // observe the DuckLake alias disappearing between its metadata queries.\n private attachmentLock: Promise<void> = Promise.resolve()\n private observedLocalCatalogGeneration: number\n private attached = false\n private closed = false\n private closePromise: Promise<void> | undefined\n private runtimePoisoned = false\n private pinnedReaders = 0\n private refreshRequested = false\n private readonly shutdown = new AbortController()\n private readonly reads = new DuckLakeReadGate()\n private readonly maxStreamingReads: number\n\n constructor(private readonly options: DuckLakeStorageOptions) {\n this.observedLocalCatalogGeneration = currentLocalCatalogGeneration(options)\n this.maxStreamingReads = options.maxStreamingReads ?? 4\n if (!Number.isSafeInteger(this.maxStreamingReads) || this.maxStreamingReads < 1) {\n throw new LakeStorageError(\"[SixbDuckLake] maxStreamingReads must be a positive integer.\")\n }\n }\n\n async acquireRead(signal?: AbortSignal): Promise<{\n readonly signal: AbortSignal\n readonly release: () => void\n }> {\n this.assertOpen()\n const combined = signal ? AbortSignal.any([signal, this.shutdown.signal]) : this.shutdown.signal\n return { signal: combined, release: await this.reads.acquire(combined) }\n }\n\n private async nativeReaderLimit(runtime: DuckDbRuntime): Promise<number> {\n if (this.options.catalog.type === \"duckdb\") return this.maxStreamingReads\n // SQLite metadata transactions keep a read lock for the native stream's lifetime.\n // Unknown/custom catalogs use bounded queries too, without assuming their locking behavior.\n if (this.options.catalog.type !== \"postgres\") return 0\n const [setting] = await runtime.query(\n \"SELECT current_setting('pg_pool_max_connections') AS value\"\n )\n const budget = Number(setting?.value)\n // Reserve metadata/write headroom, including transient leases from bounded scans. A\n // four-connection pool must stay paged: one paused native cursor can still starve an append.\n // The extension can exceed its cache limit; this is not a server-wide connection guarantee.\n return Number.isFinite(budget) ? Math.min(this.maxStreamingReads, Math.max(0, budget - 4)) : 0\n }\n\n /** Caller holds an attachment lease until this query has started. */\n async openReader(\n runtime: DuckDbRuntime,\n sql: string,\n signal: AbortSignal,\n releaseRead: () => void\n ): Promise<DuckDbReader | null> {\n const limit = await this.nativeReaderLimit(runtime)\n signal.throwIfAborted()\n if (this.pinnedReaders >= limit) return null\n this.pinnedReaders++\n let starting = true\n let released = false\n const onClose = async () => {\n if (released) return\n released = true\n this.pinnedReaders--\n if (signal.aborted || this.closed || this.runtimePoisoned) releaseRead()\n // On startup failure the caller still holds its lease and will detach on release.\n if (starting || this.closed || this.runtimePoisoned) return\n await this.withAttachmentLock(async () => {\n if (this.pinnedReaders === 0 && this.refreshRequested) await this.resetRuntimeUnlocked()\n await this.detachDuckDbCatalogAfterLease()\n })\n }\n try {\n return await runtime.openReader(sql, { signal, onClose })\n } catch (error) {\n await onClose()\n throw error\n } finally {\n starting = false\n }\n }\n\n async withMaintenanceRuntime<T>(\n run: (runtime: DuckDbExclusiveRuntime) => Promise<T>\n ): Promise<T> {\n return this.reads.withMaintenance(this.shutdown.signal, () => this.withExclusiveAttached(run))\n }\n\n assertOpen(): void {\n if (this.closed) {\n throw new LakeStorageError(\"[SixbDuckLake] DuckLakeStorage is closed.\")\n }\n }\n\n async runtime(): Promise<DuckDbRuntime> {\n this.assertOpen()\n\n if (this.runtimePromise === undefined) {\n const runtimePromise = this.createRuntime().catch((error) => {\n if (this.runtimePromise === runtimePromise) {\n this.runtimePromise = undefined\n }\n throw error\n })\n this.runtimePromise = runtimePromise\n }\n\n return this.runtimePromise\n }\n\n async attachedRuntime(): Promise<DuckDbRuntime> {\n const runtime = await this.runtime()\n await this.ensureAttached(runtime)\n return runtime\n }\n\n async withAttachedRuntime<T>(run: (runtime: DuckDbRuntime) => Promise<T>): Promise<T> {\n const lease = await this.acquireAttachedRuntime()\n try {\n return await run(lease.runtime)\n } finally {\n await lease.release()\n }\n }\n\n async acquireAttachedRuntime(): Promise<DuckLakeAttachedRuntimeLease> {\n this.assertOpen()\n\n // Keep attachment changes and native-query preparation outside each other's critical section.\n // The lease ends before rows are yielded; an active reader only retains the attachment.\n const releaseLock = await this.acquireAttachmentLock()\n let released = false\n const release = async () => {\n if (released) {\n return\n }\n\n released = true\n try {\n if (this.runtimePoisoned) {\n await this.discardRuntimeUnlocked()\n this.runtimePoisoned = false\n } else {\n await this.detachDuckDbCatalogAfterLease()\n }\n } finally {\n releaseLock()\n }\n }\n\n try {\n await this.refreshForExternalChangesUnlocked()\n const runtime = await this.attachedRuntime()\n return { runtime, release }\n } catch (error) {\n await release()\n throw error\n }\n }\n\n async withExclusiveAttached<T>(run: (runtime: DuckDbExclusiveRuntime) => Promise<T>): Promise<T> {\n const lease = await this.acquireAttachedRuntime()\n try {\n return await lease.runtime.withExclusive(run)\n } finally {\n await lease.release()\n }\n }\n\n async stagingRuntime(): Promise<DuckDbRuntime> {\n const runtime = await this.runtime()\n\n if (this.options.catalog.type !== \"postgres\") {\n // Local catalogs can keep stale attached metadata when another provider\n // commits while this write session is open. Stage rows unattached so the\n // later exclusive commit attaches fresh without losing temp tables.\n await this.detachRuntime()\n }\n\n return runtime\n }\n\n /**\n * Create the one runtime owned by this manager. Setup loads extensions,\n * secrets, setup SQL, and pre-attach Postgres pool settings, but deliberately\n * leaves DuckLake unattached until `attachedRuntime()` is needed.\n */\n async createRuntime(): Promise<DuckDbRuntime> {\n this.assertOpen()\n\n const runtime = await createDuckDbRuntime(this.options.duckdb)\n try {\n await this.ensureExtensionsInstalled(runtime)\n await setupDuckLake(runtime, this.options, {\n attach: false,\n installExtensions: false,\n })\n // Projection checkpoints use physical offsets. Reapply this after caller setup SQL so it\n // cannot weaken immutable snapshot ordering, including after runtime recreation.\n await runtime.run(\"SET preserve_insertion_order = true\")\n return runtime\n } catch (error) {\n await this.closeRuntime(runtime, { detach: false })\n throw error\n }\n }\n\n async resetRuntime(): Promise<void> {\n const releaseLock = await this.acquireAttachmentLock()\n try {\n await this.resetRuntimeUnlocked()\n } finally {\n releaseLock()\n }\n }\n\n private async resetRuntimeUnlocked(): Promise<void> {\n if (this.pinnedReaders > 0) {\n this.refreshRequested = true\n return\n }\n this.refreshRequested = false\n const runtimePromise = this.runtimePromise\n if (runtimePromise === undefined) {\n return\n }\n\n if (this.attachPromise !== undefined) {\n await this.attachPromise\n }\n\n if (!this.attached) {\n return\n }\n\n let refreshedPromise: Promise<DuckDbRuntime>\n refreshedPromise = runtimePromise\n .then(async (runtime) => {\n try {\n await this.refreshAttachedRuntime(runtime)\n this.attached = true\n return runtime\n } catch (error) {\n this.attached = false\n await this.closeRuntime(runtime, { detach: false })\n throw error\n }\n })\n .catch((error) => {\n if (this.runtimePromise === refreshedPromise) {\n this.runtimePromise = undefined\n }\n throw error\n })\n\n this.attached = false\n this.runtimePromise = refreshedPromise\n await refreshedPromise\n }\n\n async refreshForExternalChanges(): Promise<void> {\n if (this.options.catalog.type === \"postgres\") {\n return\n }\n\n if (!this.needsLocalCatalogRefresh()) {\n return\n }\n\n if (this.refreshPromise === undefined) {\n let refreshPromise: Promise<void>\n refreshPromise = this.withAttachmentLock(() =>\n this.refreshForExternalChangesUnlocked()\n ).finally(() => {\n if (this.refreshPromise === refreshPromise) {\n this.refreshPromise = undefined\n }\n })\n this.refreshPromise = refreshPromise\n }\n\n await this.refreshPromise\n }\n\n markLocalCatalogChanged(): void {\n if (this.options.catalog.type === \"postgres\") {\n return\n }\n\n this.observedLocalCatalogGeneration = incrementLocalCatalogGeneration(this.options)\n }\n\n async detachLocalCatalogAfterCommit(runtime: DuckDbQueryRuntime): Promise<void> {\n if (this.options.catalog.type === \"postgres\") {\n return\n }\n\n try {\n if (this.pinnedReaders === 0) {\n await runtime.run(`DETACH ${quoteIdentifier(duckLakeAlias(this.options))}`)\n this.attached = false\n }\n } catch {\n // The commit already succeeded. Keep the original write result and let a\n // later refresh/close retry detaching this local catalog if needed.\n } finally {\n this.markLocalCatalogChanged()\n }\n }\n\n private async refreshForExternalChangesUnlocked(): Promise<void> {\n const generation = currentLocalCatalogGeneration(this.options)\n if (this.observedLocalCatalogGeneration === generation) {\n return\n }\n\n await this.resetRuntimeUnlocked()\n\n this.observedLocalCatalogGeneration = generation\n }\n\n private needsLocalCatalogRefresh(): boolean {\n return this.observedLocalCatalogGeneration !== currentLocalCatalogGeneration(this.options)\n }\n\n close(): Promise<void> {\n this.closePromise ??= this.finishClose()\n return this.closePromise\n }\n\n private async finishClose(): Promise<void> {\n this.closed = true\n this.shutdown.abort(new LakeStorageError(\"[SixbDuckLake] DuckLakeStorage is closed.\"))\n\n const runtimePromise = this.runtimePromise\n this.runtimePromise = undefined\n await this.closeRuntimePromise(runtimePromise, {\n // For Postgres catalogs, the DuckDB Postgres extension owns the attached\n // pool. Explicit DETACH can briefly create or retain another backend;\n // closing the DuckDB runtime is the tighter shutdown path.\n detach: this.attached && this.options.catalog.type !== \"postgres\",\n })\n this.attached = false\n }\n\n private async ensureAttached(runtime: DuckDbRuntime): Promise<void> {\n this.assertOpen()\n\n if (this.attached) {\n return\n }\n\n if (this.attachPromise === undefined) {\n let attachPromise: Promise<void>\n attachPromise = this.attachRuntime(runtime)\n .then(() => {\n this.attached = true\n })\n .catch(async (error) => {\n if (this.attachPromise === attachPromise) {\n this.runtimePromise = undefined\n this.attached = false\n }\n await this.closeRuntime(runtime, { detach: false })\n throw error\n })\n .finally(() => {\n if (this.attachPromise === attachPromise) {\n this.attachPromise = undefined\n }\n })\n this.attachPromise = attachPromise\n }\n\n await this.attachPromise\n }\n\n private async ensureExtensionsInstalled(runtime: DuckDbRuntime): Promise<void> {\n if (this.installExtensionsPromise === undefined) {\n const installExtensionsPromise = installDuckLakeExtensions(runtime, this.options).catch(\n (error) => {\n if (this.installExtensionsPromise === installExtensionsPromise) {\n this.installExtensionsPromise = undefined\n }\n throw error\n }\n )\n this.installExtensionsPromise = installExtensionsPromise\n }\n\n await this.installExtensionsPromise\n }\n\n private async attachRuntime(runtime: DuckDbRuntime): Promise<void> {\n await runtime.runStatements([\n buildAttachSql(this.options),\n ...(this.options.catalog.type === \"postgres\"\n ? [buildConfigurePostgresMetadataPoolSql(this.options)]\n : []),\n ])\n }\n\n private async refreshAttachedRuntime(runtime: DuckDbRuntime): Promise<void> {\n await runtime.runStatements([\n `DETACH ${quoteIdentifier(duckLakeAlias(this.options))}`,\n buildAttachSql(this.options),\n ...(this.options.catalog.type === \"postgres\"\n ? [buildConfigurePostgresMetadataPoolSql(this.options)]\n : []),\n ])\n }\n\n private async detachRuntime(): Promise<void> {\n await this.withAttachmentLock(() => this.detachRuntimeUnlocked())\n }\n\n /**\n * Mark the active runtime as unusable for reuse. The next lease release\n * discards the connection so session state that could not be cleaned up\n * (such as a SET pragma whose RESET failed) cannot reach a later operation.\n */\n poisonRuntime(): void {\n this.runtimePoisoned = true\n }\n\n private async detachDuckDbCatalogAfterLease(): Promise<void> {\n if (this.options.catalog.type !== \"duckdb\" || !this.attached || this.pinnedReaders > 0) {\n return\n }\n\n try {\n await this.detachRuntimeUnlocked()\n } catch {\n // DuckDB-backed DuckLake catalogs are single-client local catalogs. If\n // cleanup cannot detach, discard this runtime so the next operation\n // starts from an unattached connection instead of keeping stale metadata.\n await this.discardRuntimeUnlocked()\n }\n }\n\n // Close and forget the current runtime so the next `runtime()` builds a fresh\n // connection with default session state. Unlike `resetRuntimeUnlocked()`,\n // which DETACH/ATTACHes the same connection, this drops the connection\n // entirely -- the only way to clear a leaked session pragma.\n private async discardRuntimeUnlocked(): Promise<void> {\n const runtimePromise = this.runtimePromise\n this.runtimePromise = undefined\n this.attached = false\n await this.closeRuntimePromise(runtimePromise, { detach: false }).catch(() => {})\n }\n\n private async detachRuntimeUnlocked(): Promise<void> {\n if (this.pinnedReaders > 0) return\n if (this.attachPromise !== undefined) {\n await this.attachPromise\n }\n\n if (!this.attached) {\n return\n }\n\n const runtime = await this.runtime()\n await runtime.run(`DETACH ${quoteIdentifier(duckLakeAlias(this.options))}`)\n this.attached = false\n }\n\n private async withAttachmentLock<T>(run: () => Promise<T>): Promise<T> {\n const releaseLock = await this.acquireAttachmentLock()\n try {\n return await run()\n } finally {\n releaseLock()\n }\n }\n\n private async acquireAttachmentLock(): Promise<() => void> {\n const previous = this.attachmentLock.catch(() => {})\n let release!: () => void\n const current = new Promise<void>((resolve) => {\n release = resolve\n })\n this.attachmentLock = previous.then(() => current)\n\n await previous\n\n let released = false\n return () => {\n if (released) {\n return\n }\n\n released = true\n release()\n }\n }\n\n private async closeRuntimePromise(\n runtimePromise: Promise<DuckDbRuntime> | undefined,\n options: { readonly detach: boolean }\n ): Promise<void> {\n if (runtimePromise === undefined) {\n return\n }\n\n let runtime: DuckDbRuntime\n try {\n runtime = await runtimePromise\n } catch {\n // createRuntime/attachRuntime already close partially-initialized\n // runtimes before rejecting. Swallowing here keeps close/reset\n // idempotent while preserving the original operation error.\n return\n }\n\n await this.closeRuntime(runtime, options)\n }\n\n private async closeRuntime(\n runtime: DuckDbRuntime,\n options: { readonly detach: boolean }\n ): Promise<void> {\n try {\n await runtime.stopReaders()\n if (options.detach) {\n try {\n await runtime.run(`DETACH ${quoteIdentifier(duckLakeAlias(this.options))}`)\n } catch {\n // Detaching a partially initialized or failed catalog can fail; still close the engine.\n }\n }\n } finally {\n await runtime.close()\n }\n }\n}\n\n// Local catalog tests commonly create multiple DuckLakeStorage instances in one\n// process. DuckLake/Postgres handles cross-connection visibility itself; local\n// file catalogs need this in-process signal so peers refresh after Sixb writes.\nconst localCatalogGenerations = new Map<string, number>()\n\nfunction currentLocalCatalogGeneration(options: DuckLakeStorageOptions): number {\n const key = localCatalogCoordinationKey(options)\n return key === undefined ? 0 : (localCatalogGenerations.get(key) ?? 0)\n}\n\nfunction incrementLocalCatalogGeneration(options: DuckLakeStorageOptions): number {\n const key = localCatalogCoordinationKey(options)\n if (key === undefined) {\n return 0\n }\n\n const nextGeneration = (localCatalogGenerations.get(key) ?? 0) + 1\n localCatalogGenerations.set(key, nextGeneration)\n return nextGeneration\n}\n",
15
15
  "import { resolve } from \"node:path\"\nimport type { DuckLakeStorageOptions } from \"../types\"\n\n/**\n * Stable key for coordinating local catalog users inside this process.\n *\n * PostgreSQL coordinates through the database. In-memory local catalogs have no\n * shared file identity. File-backed local catalogs need equivalent path\n * spellings, such as `lake.ducklake` and `dir/../lake.ducklake`, to map to the\n * same coordination key.\n */\nexport function localCatalogCoordinationKey(\n options: Pick<DuckLakeStorageOptions, \"catalog\">\n): string | undefined {\n switch (options.catalog.type) {\n case \"duckdb\":\n case \"sqlite\":\n if (options.catalog.path === \":memory:\") {\n return undefined\n }\n\n return `${options.catalog.type}:${resolve(options.catalog.path)}`\n case \"custom\":\n return `custom:${options.catalog.uri}`\n case \"postgres\":\n return undefined\n }\n}\n",
16
16
  "import { mkdir, mkdtemp, rm } from \"node:fs/promises\"\nimport { join, resolve } from \"node:path\"\nimport {\n type DuckDBConnection,\n DuckDBInstance,\n type DuckDBValue,\n type DuckDBAppender as NodeDuckDBAppender,\n} from \"@duckdb/node-api\"\nimport { LakeStorageError } from \"@sixb/core/lake-storage\"\nimport type { DuckDbRuntimeOptions, DuckLakeStorageOptions } from \"../types\"\nimport { type DuckDbReader, type DuckDbReaderOptions, NodeDuckDbReader } from \"./duckdb-reader\"\nimport { sixbDuckDbValueConverter } from \"./duckdb-value-converter\"\nimport {\n buildAttachSql,\n buildConfigurePostgresMetadataPoolSql,\n buildCreateSecretSql,\n buildSetPostgresPoolSql,\n quoteIdentifier,\n requiredExtensions,\n} from \"./sql\"\n\n/**\n * Narrow adapter around `@duckdb/node-api`.\n *\n * Keeping the public provider behind this interface confines the driver types to\n * this module instead of leaking them into `DuckLakeStorage`. Main-connection calls\n * share one queue; readers use separate connections to the same DuckDB instance.\n */\nexport interface DuckDbQueryRuntime {\n run(sql: string, values?: readonly DuckDBValue[]): Promise<void>\n runStatements(statements: readonly string[]): Promise<void>\n query(sql: string, values?: readonly DuckDBValue[]): Promise<readonly Record<string, unknown>[]>\n withAppender<T>(\n tableName: string,\n useAppender: (appender: DuckDbAppender) => T | Promise<T>\n ): Promise<T>\n}\n\nexport interface DuckDbRuntime extends DuckDbQueryRuntime {\n openReader(sql: string, options?: DuckDbReaderOptions): Promise<DuckDbReader>\n stopReaders(): Promise<void>\n /**\n * Reserve the runtime queue for a multi-statement critical section.\n *\n * Use this for sequences such as BEGIN/read metadata/write/COMMIT where an\n * interleaved read or write would observe the wrong connection state.\n */\n withExclusive<T>(useRuntime: (runtime: DuckDbExclusiveRuntime) => Promise<T>): Promise<T>\n close(): Promise<void>\n}\n\n/**\n * Runtime surface available while the caller already owns the queue slot.\n *\n * This is the query/appender subset only: no streaming, no close, and no nested\n * exclusive block.\n */\nexport type DuckDbExclusiveRuntime = DuckDbQueryRuntime\n\nexport interface DuckDbAppender {\n appendNull(): void\n appendBoolean(value: boolean): void\n appendVarchar(value: string): void\n appendBigInt(value: bigint): void\n appendDouble(value: number): void\n appendStruct(value: Readonly<Record<string, DuckDBValue>>): void\n endRow(): void\n}\n\ninterface SetupDuckLakeOptions {\n readonly installExtensions?: boolean\n readonly attach?: boolean\n}\n\nclass NodeDuckDbRuntime implements DuckDbRuntime {\n private closing = false\n private closed = false\n // Serialize main-connection calls so transactions and staged writes cannot interleave.\n private operations: Promise<void> = Promise.resolve()\n private readonly readers = new Set<DuckDbReader>()\n private closePromise: Promise<void> | undefined\n\n constructor(\n private readonly instance: DuckDBInstance,\n private readonly connection: DuckDBConnection,\n private readonly temporaryDirectory?: string\n ) {}\n\n async openReader(sql: string, options: DuckDbReaderOptions = {}): Promise<DuckDbReader> {\n return this.enqueue(async () => {\n this.assertAcceptingOperations()\n const connection = await this.instance.connect()\n if (this.closing) {\n connection.closeSync()\n this.assertAcceptingOperations()\n }\n const reader = new NodeDuckDbReader(connection, {\n ...options,\n onClose: async () => {\n this.readers.delete(reader)\n await options.onClose?.()\n },\n })\n this.readers.add(reader)\n try {\n await reader.start(sql)\n return reader\n } catch (error) {\n await reader.close()\n throw error\n }\n })\n }\n\n async run(sql: string, values?: readonly DuckDBValue[]): Promise<void> {\n await this.enqueue(async () => {\n await this.connection.run(sql, values === undefined ? undefined : [...values])\n })\n }\n\n async runStatements(statements: readonly string[]): Promise<void> {\n await this.enqueue(async () => {\n for (const sql of statements) {\n await this.connection.run(sql)\n }\n })\n }\n\n async query(\n sql: string,\n values?: readonly DuckDBValue[]\n ): Promise<readonly Record<string, unknown>[]> {\n return this.enqueue(async () => {\n const reader = await this.connection.runAndReadAll(\n sql,\n values === undefined ? undefined : [...values]\n )\n return reader.convertRowObjects(sixbDuckDbValueConverter)\n })\n }\n\n async withAppender<T>(\n tableName: string,\n useAppender: (appender: DuckDbAppender) => T | Promise<T>\n ): Promise<T> {\n return this.enqueue(async () => {\n const appender = await this.connection.createAppender(tableName)\n try {\n return await useAppender(new NodeDuckDbAppenderAdapter(appender))\n } finally {\n appender.closeSync()\n }\n })\n }\n\n async withExclusive<T>(useRuntime: (runtime: DuckDbExclusiveRuntime) => Promise<T>): Promise<T> {\n return this.enqueue(async () => {\n // The exclusive adapter talks directly to the underlying connection while\n // this queued operation is active. Do not pass `this` into the callback.\n return useRuntime(new NodeDuckDbExclusiveRuntime(this.connection))\n })\n }\n\n close(): Promise<void> {\n this.closePromise ??= this.finish()\n return this.closePromise\n }\n\n async stopReaders(): Promise<void> {\n const results = await Promise.allSettled([...this.readers].map((reader) => reader.close()))\n const failed = results.find((result) => result.status === \"rejected\")\n if (failed?.status === \"rejected\") throw failed.reason\n }\n\n private async finish(): Promise<void> {\n this.closing = true\n const results = await Promise.allSettled([...this.readers].map((reader) => reader.close()))\n // resetRuntime()/close() can run while an API read is still using this\n // runtime. Wait for accepted work before closing the native connection.\n await this.operations.catch(() => {})\n this.closed = true\n this.connection.closeSync()\n this.instance.closeSync()\n if (this.temporaryDirectory) await rm(this.temporaryDirectory, { recursive: true, force: true })\n const failed = results.find((result) => result.status === \"rejected\")\n if (failed?.status === \"rejected\") throw failed.reason\n }\n\n private enqueue<T>(operation: () => T | Promise<T>): Promise<T> {\n this.assertAcceptingOperations()\n\n // Keep the chain alive after failures so one rejected query does not block\n // all later work on this runtime.\n const result = this.operations.then(async () => {\n this.assertNotClosed()\n return operation()\n })\n this.operations = result.then(\n () => {},\n () => {}\n )\n return result\n }\n\n private assertAcceptingOperations(): void {\n if (this.closing || this.closed) {\n throw new LakeStorageError(\"[SixbDuckLake] DuckDB runtime is closed.\")\n }\n }\n\n private assertNotClosed(): void {\n if (this.closed) {\n throw new LakeStorageError(\"[SixbDuckLake] DuckDB runtime is closed.\")\n }\n }\n}\n\nclass NodeDuckDbExclusiveRuntime implements DuckDbExclusiveRuntime {\n constructor(private readonly connection: DuckDBConnection) {}\n\n async run(sql: string, values?: readonly DuckDBValue[]): Promise<void> {\n await this.connection.run(sql, values === undefined ? undefined : [...values])\n }\n\n async runStatements(statements: readonly string[]): Promise<void> {\n for (const sql of statements) {\n await this.connection.run(sql)\n }\n }\n\n async query(\n sql: string,\n values?: readonly DuckDBValue[]\n ): Promise<readonly Record<string, unknown>[]> {\n const reader = await this.connection.runAndReadAll(\n sql,\n values === undefined ? undefined : [...values]\n )\n return reader.convertRowObjects(sixbDuckDbValueConverter)\n }\n\n async withAppender<T>(\n tableName: string,\n useAppender: (appender: DuckDbAppender) => T | Promise<T>\n ): Promise<T> {\n const appender = await this.connection.createAppender(tableName)\n try {\n return await useAppender(new NodeDuckDbAppenderAdapter(appender))\n } finally {\n appender.closeSync()\n }\n }\n}\n\nclass NodeDuckDbAppenderAdapter implements DuckDbAppender {\n constructor(private readonly appender: NodeDuckDBAppender) {}\n\n appendNull(): void {\n this.appender.appendNull()\n }\n\n appendBoolean(value: boolean): void {\n this.appender.appendBoolean(value)\n }\n\n appendVarchar(value: string): void {\n this.appender.appendVarchar(value)\n }\n\n appendBigInt(value: bigint): void {\n this.appender.appendBigInt(value)\n }\n\n appendDouble(value: number): void {\n this.appender.appendDouble(value)\n }\n\n appendStruct(value: Readonly<Record<string, DuckDBValue>>): void {\n this.appender.appendStruct(value)\n }\n\n endRow(): void {\n this.appender.endRow()\n }\n}\n\n/**\n * Create the DuckDB runtime used by the provider.\n */\nexport async function createDuckDbRuntime(\n options: DuckDbRuntimeOptions = {}\n): Promise<DuckDbRuntime> {\n const path = options.path ?? \":memory:\"\n const base = options.config?.temp_directory ?? (path === \":memory:\" ? \".tmp\" : `${path}.tmp`)\n // DuckDB's default .tmp filenames collide between independent instances/processes. Keep the\n // configured disk location, but give each runtime its own directory and cleanup ownership.\n let temporaryDirectory: string | undefined\n if (base !== \"\") {\n const directory = resolve(base)\n await mkdir(directory, { recursive: true })\n temporaryDirectory = await mkdtemp(join(directory, \"sixb-\"))\n }\n let instance: DuckDBInstance | undefined\n try {\n instance = await DuckDBInstance.create(path, {\n ...options.config,\n ...(temporaryDirectory ? { temp_directory: temporaryDirectory } : {}),\n })\n return new NodeDuckDbRuntime(instance, await instance.connect(), temporaryDirectory)\n } catch (error) {\n instance?.closeSync()\n if (temporaryDirectory) await rm(temporaryDirectory, { recursive: true, force: true })\n throw error\n }\n}\n\n/**\n * Install DuckLake and any catalog/data-path extensions into DuckDB's local\n * extension directory. Installation is idempotent and can be shared by many\n * short-lived runtimes created by one provider instance.\n */\nexport async function installDuckLakeExtensions(\n runtime: DuckDbRuntime,\n options: DuckLakeStorageOptions\n): Promise<void> {\n await runtime.run(\"INSTALL ducklake\")\n\n for (const extension of requiredExtensions(options)) {\n await runtime.run(`INSTALL ${quoteIdentifier(extension)}`)\n }\n}\n\n/**\n * Load DuckLake, load catalog extensions, run caller setup SQL, and optionally\n * attach the configured DuckLake catalog.\n */\nexport async function setupDuckLake(\n runtime: DuckDbRuntime,\n options: DuckLakeStorageOptions,\n setupOptions: SetupDuckLakeOptions = {}\n): Promise<void> {\n if (setupOptions.installExtensions ?? true) {\n await installDuckLakeExtensions(runtime, options)\n }\n\n await runtime.run(\"LOAD ducklake\")\n\n for (const extension of requiredExtensions(options)) {\n await runtime.run(`LOAD ${quoteIdentifier(extension)}`)\n }\n\n for (const sql of options.setupSql ?? []) {\n await runtime.run(sql)\n }\n\n if (options.catalog.type === \"postgres\") {\n await runtime.runStatements(buildSetPostgresPoolSql(options))\n }\n\n for (const secret of options.secrets ?? []) {\n await runtime.run(buildCreateSecretSql(secret))\n }\n\n if (setupOptions.attach ?? true) {\n await runtime.run(buildAttachSql(options))\n\n if (options.catalog.type === \"postgres\") {\n await runtime.run(buildConfigurePostgresMetadataPoolSql(options))\n }\n }\n}\n",
@@ -24,7 +24,7 @@
24
24
  "import type {\n DatasetColumnLineage,\n DatasetColumnRef,\n DatasetVersionLineage,\n} from \"@sixb/core/lake-storage\"\n\n/**\n * How a version's resolved lineage is stored in DuckLake commit metadata.\n *\n * A resolved lineage repeats the same dataset ids and column names across thousands of refs, and\n * every catalog scan reads the commit metadata of every snapshot it passes, wanted or not. So each\n * distinct string is stored once and refs are index pairs, and the encoded lineage is one JSON\n * string inside the metadata: parsing the metadata copies it without building its refs, which\n * only the versions a read returns decode.\n */\ninterface EncodedColumnLineage {\n readonly v: 1\n /** Every distinct dataset id, column name, and lineage column name. */\n readonly strings: readonly string[]\n /** Row refs as flat index pairs: dataset id, column. */\n readonly rows: readonly number[]\n /** One entry per column: its name's index, then its refs as flat index pairs. */\n readonly columns: readonly (readonly number[])[]\n}\n\nexport function encodeLineage(lineage: DatasetVersionLineage): string {\n if (\"unknown\" in lineage) {\n return JSON.stringify({ unknown: lineage.unknown })\n }\n\n const strings: string[] = []\n const indexes = new Map<string, number>()\n const indexOf = (value: string) => {\n let index = indexes.get(value)\n if (index === undefined) {\n index = strings.length\n strings.push(value)\n indexes.set(value, index)\n }\n return index\n }\n const encodeRefs = (refs: readonly DatasetColumnRef[]) =>\n refs.flatMap((ref) => [indexOf(ref.datasetId), indexOf(ref.column)])\n\n const encoded: EncodedColumnLineage = {\n v: 1,\n strings,\n rows: encodeRefs(lineage.rows),\n columns: Object.entries(lineage.columns).map(([column, refs]) => [\n indexOf(column),\n ...encodeRefs(refs),\n ]),\n }\n\n return JSON.stringify(encoded)\n}\n\n/**\n * The stored lineage, as stored. One Sixb cannot read is unknown, as Sixb reads a malformed\n * lineage: dropping it instead would classify a version outside pipelines by its own columns only.\n */\nexport function decodeLineage(datasetId: string, stored: unknown): DatasetVersionLineage {\n const parsed = typeof stored === \"string\" ? parseJson(stored) : undefined\n if (isRecord(parsed) && Object.hasOwn(parsed, \"unknown\")) {\n return typeof parsed.unknown === \"string\" ? { unknown: parsed.unknown } : unreadable(datasetId)\n }\n\n return decodeColumnLineage(parsed) ?? unreadable(datasetId)\n}\n\nfunction decodeColumnLineage(value: unknown): DatasetColumnLineage | undefined {\n if (!isRecord(value) || value.v !== 1 || !isStringList(value.strings)) {\n return undefined\n }\n\n const { strings } = value\n const decodeRefs = (flat: readonly unknown[], from: number) => {\n if ((flat.length - from) % 2 !== 0) {\n return undefined\n }\n\n const refs: DatasetColumnRef[] = []\n for (let index = from; index < flat.length; index += 2) {\n const datasetId = stringAt(strings, flat[index])\n const column = stringAt(strings, flat[index + 1])\n if (datasetId === undefined || column === undefined) {\n return undefined\n }\n refs.push({ datasetId, column })\n }\n\n return refs\n }\n\n const rows = Array.isArray(value.rows) ? decodeRefs(value.rows, 0) : undefined\n if (rows === undefined || !Array.isArray(value.columns)) {\n return undefined\n }\n\n // A column listed twice would read as its last entry: a tampered record could narrow it.\n const columns = new Map<string, DatasetColumnRef[]>()\n for (const entry of value.columns) {\n const name = Array.isArray(entry) ? stringAt(strings, entry[0]) : undefined\n const refs = name === undefined ? undefined : decodeRefs(entry, 1)\n if (name === undefined || refs === undefined || columns.has(name)) {\n return undefined\n }\n columns.set(name, refs)\n }\n\n return { rows, columns: Object.fromEntries(columns) }\n}\n\nfunction unreadable(datasetId: string): DatasetVersionLineage {\n return { unknown: `a version of '${datasetId}' records a column lineage Sixb cannot read` }\n}\n\nfunction parseJson(text: string): unknown {\n try {\n return JSON.parse(text)\n } catch {\n return undefined\n }\n}\n\nfunction stringAt(strings: readonly string[], index: unknown): string | undefined {\n return typeof index === \"number\" && Number.isInteger(index) ? strings[index] : undefined\n}\n\nfunction isStringList(value: unknown): value is readonly string[] {\n return Array.isArray(value) && value.every((item) => typeof item === \"string\")\n}\n\nfunction isRecord(value: unknown): value is Readonly<Record<string, unknown>> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n",
25
25
  "import type { DatasetVersionRef } from \"@sixb/core/lake-storage\"\nimport { LakeStorageError } from \"@sixb/core/lake-storage\"\nimport type {\n DuckLakeMaintenanceOptions,\n DuckLakeMaintenanceReport,\n DuckLakeStorageOptions,\n} from \"../types\"\nimport { getBigIntLike } from \"./duckdb-row\"\nimport type { DuckDbQueryRuntime } from \"./duckdb-runtime\"\nimport type { DuckLakeConnectionManager } from \"./ducklake-connection-manager\"\nimport type { DuckLakeSnapshotReader } from \"./ducklake-snapshot-reader\"\nimport { duckLakeAlias, duckLakeMetadataTableName, quoteSqlString } from \"./sql\"\nimport { parseVersionId } from \"./versions\"\n\nconst DEFAULT_RETENTION = \"7 days\"\n\ninterface MaintenanceCounts {\n readonly snapshots: number\n readonly keptSnapshots: number\n readonly oldFiles: number\n readonly orphanedFiles: number\n}\n\n/**\n * Expires old snapshots, except those holding a version that is still needed, then reclaims files.\n *\n * DuckLake's own `older_than` would expire the latest version of a dataset idle longer than the\n * retention, leaving its rows without a version to read them through. Maintenance lists the\n * snapshots older than the retention, keeps those holding each dataset's latest version or a\n * protected version, and expires the rest by id. DuckLake then schedules the files only the\n * expired snapshots referenced, as it does with `older_than`.\n */\nexport class DuckLakeMaintenance {\n constructor(\n private readonly options: DuckLakeStorageOptions,\n private readonly connections: DuckLakeConnectionManager,\n private readonly snapshots: DuckLakeSnapshotReader\n ) {}\n\n async runMaintenance(\n options: DuckLakeMaintenanceOptions = {}\n ): Promise<DuckLakeMaintenanceReport> {\n this.connections.assertOpen()\n\n const expireOlderThan = options.expireOlderThan ?? DEFAULT_RETENTION\n const deleteOlderThan = options.deleteOlderThan ?? expireOlderThan\n const dryRun = options.dryRun ?? false\n const protect = (options.protect ?? []).map(protectedSnapshotId)\n\n if (this.options.readOnly && !dryRun) {\n throw new LakeStorageError(\n \"[SixbDuckLake] DuckLake maintenance cannot run in read-only mode.\"\n )\n }\n\n return this.connections.withMaintenanceRuntime(async (runtime) => {\n const counts = await this.runMaintenanceProcedures(\n runtime,\n { expireOlderThan, deleteOlderThan },\n protect,\n dryRun\n )\n\n if (!dryRun) {\n this.connections.markLocalCatalogChanged()\n }\n\n return {\n dryRun,\n expireOlderThan,\n deleteOlderThan,\n ...counts,\n }\n })\n }\n\n private async runMaintenanceProcedures(\n runtime: DuckDbQueryRuntime,\n retention: Pick<DuckLakeMaintenanceReport, \"expireOlderThan\" | \"deleteOlderThan\">,\n protect: readonly string[],\n dryRun: boolean\n ): Promise<MaintenanceCounts> {\n const aliasSql = quoteSqlString(duckLakeAlias(this.options))\n\n const oldSnapshotIds = await this.snapshotsOlderThan(runtime, retention.expireOlderThan)\n const needed = new Set([\n ...(await this.snapshots.latestVersionSnapshotIds(runtime)),\n ...protect,\n ])\n const expirable = oldSnapshotIds.filter((snapshotId) => !needed.has(snapshotId))\n\n const snapshots =\n expirable.length === 0\n ? []\n : await runtime.query(\n maintenanceProcedureSql(\n \"ducklake_expire_snapshots\",\n aliasSql,\n `versions => [${expirable.join(\", \")}]`,\n dryRun\n )\n )\n\n const oldFiles = await runtime.query(\n maintenanceProcedureSql(\n \"ducklake_cleanup_old_files\",\n aliasSql,\n `older_than => ${olderThanSql(retention.deleteOlderThan)}`,\n dryRun\n )\n )\n const orphanedFiles = await runtime.query(\n maintenanceProcedureSql(\n \"ducklake_delete_orphaned_files\",\n aliasSql,\n `older_than => ${olderThanSql(retention.deleteOlderThan)}`,\n dryRun\n )\n )\n\n return {\n snapshots: snapshots.length,\n keptSnapshots: oldSnapshotIds.length - expirable.length,\n oldFiles: oldFiles.length,\n orphanedFiles: orphanedFiles.length,\n }\n }\n\n /**\n * Snapshots older than the retention, except the current one, which DuckLake never expires.\n *\n * Not DuckLake's own `older_than` selection: a SQLite catalog stores snapshot times as text with\n * their UTC offset, and with DuckLake 415a9ebd that selection then also returned snapshots\n * written a moment ago outside UTC. Casting the stored text compares instants on every catalog.\n */\n private async snapshotsOlderThan(\n runtime: DuckDbQueryRuntime,\n olderThan: string\n ): Promise<readonly string[]> {\n const ducklakeSnapshot = duckLakeMetadataTableName(this.options, \"ducklake_snapshot\")\n const rows = await runtime.query(`\n SELECT snapshot_id\n FROM ${ducklakeSnapshot}\n WHERE CAST(snapshot_time AS TIMESTAMPTZ) < ${olderThanSql(olderThan)}\n AND snapshot_id < (\n SELECT snapshot_id FROM ${ducklakeSnapshot} ORDER BY snapshot_id DESC LIMIT 1\n )\n ORDER BY snapshot_id\n `)\n\n return rows.map((row) => String(getBigIntLike(row, \"snapshot_id\")))\n }\n}\n\nfunction protectedSnapshotId(ref: DatasetVersionRef): string {\n try {\n return parseVersionId(ref.versionId)\n } catch (error) {\n throw new LakeStorageError(\n `[SixbDuckLake] Cannot protect version '${ref.versionId}' of dataset '${ref.datasetId}' from maintenance: it is not a DuckLake version id.`,\n { cause: error }\n )\n }\n}\n\nfunction olderThanSql(olderThan: string): string {\n return `now() - INTERVAL ${quoteSqlString(olderThan)}`\n}\n\nfunction maintenanceProcedureSql(\n procedure: string,\n aliasSql: string,\n selection: string,\n dryRun: boolean\n): string {\n const dryRunSql = dryRun ? \"dry_run => true, \" : \"\"\n return `CALL ${procedure}(${aliasSql}, ${dryRunSql}${selection})`\n}\n",
26
26
  "import type { DatasetColumnDefinition, DatasetRow } from \"@sixb/core\"\nimport type { DatasetVersion, ReadDatasetRowsInput } from \"@sixb/core/lake-storage\"\nimport { LakeStorageError } from \"@sixb/core/lake-storage\"\nimport type { DuckLakeStorageOptions } from \"../types\"\nimport type { DuckDbReader } from \"./duckdb-reader\"\nimport { getBigIntLike } from \"./duckdb-row\"\nimport type { DuckDbQueryRuntime } from \"./duckdb-runtime\"\nimport type { DuckLakeConnectionManager } from \"./ducklake-connection-manager\"\nimport { type DatasetTableRef, resolveDatasetTableRef } from \"./ducklake-dataset-table-ref\"\nimport type { DuckLakeSnapshotReader } from \"./ducklake-snapshot-reader\"\nimport { normalizeReadValue } from \"./schema\"\nimport { qualifiedTableName, quoteIdentifier } from \"./sql\"\nimport { parseVersionId } from \"./versions\"\n\n// Bounded fallback for catalogs whose metadata transactions cannot stay open during a read.\nconst READ_PAGE_ROWS = 5_000\nconst PHYSICAL_ROW_ID_ALIAS = \"__sixb_physical_row_id\"\n\n/**\n * Reads dataset rows from DuckLake snapshots.\n *\n * This module owns the last mile of reads: resolve the requested Sixb version\n * to a DuckLake snapshot id, render a DuckLake time-travel query, and normalize\n * DuckDB values back into Sixb row shape.\n */\nexport class DuckLakeRowReader {\n constructor(\n private readonly options: DuckLakeStorageOptions,\n private readonly connections: DuckLakeConnectionManager,\n private readonly snapshots: DuckLakeSnapshotReader\n ) {}\n\n async *readRows(input: ReadDatasetRowsInput): AsyncIterable<DatasetRow> {\n const read = await this.connections.acquireRead(input.signal)\n let reader: DuckDbReader | null = null\n try {\n const prepared = await this.connections.withAttachedRuntime(async (runtime) => {\n read.signal.throwIfAborted()\n const tableRef = await resolveDatasetTableRef(this.options, runtime, input.datasetId)\n if (!tableRef) {\n throw new LakeStorageError(`[SixbDuckLake] Unknown dataset '${input.datasetId}'.`)\n }\n // Resolve latest once, before yielding any rows. Every query names the same snapshot.\n const version = await this.resolveVersion(runtime, tableRef, input.versionId)\n const columns = this.resolveReadColumns(tableRef.datasetId, version.schema, input.columns)\n const names = new Set(version.schema.columns.map((column) => column.name.toLowerCase()))\n const physicalOrder = !names.has(\"rowid\") && !names.has(PHYSICAL_ROW_ID_ALIAS)\n const relation = `${qualifiedTableName(this.options, tableRef.tableName)} AT (VERSION => ${parseVersionId(version.versionId)})`\n const columnsSql = columns.map((column) => quoteIdentifier(column.name)).join(\", \")\n const offset = Math.max(0, Math.trunc(input.offset ?? 0))\n const limit = input.limit === undefined ? undefined : Math.max(0, Math.trunc(input.limit))\n const sql = `SELECT ${columnsSql} FROM ${relation}${physicalOrder ? \" ORDER BY rowid\" : \"\"}${limit === undefined ? \"\" : ` LIMIT ${limit}`}${offset > 0 ? ` OFFSET ${offset}` : \"\"}`\n const cursor =\n limit === undefined || limit > READ_PAGE_ROWS\n ? await this.connections.openReader(runtime, sql, read.signal, read.release)\n : null\n const query = { columnsSql, relation, physicalOrder }\n const firstPage =\n cursor || limit === 0\n ? []\n : await runtime.query(\n pageSql(query, Math.min(limit ?? READ_PAGE_ROWS, READ_PAGE_ROWS), offset, null)\n )\n return { columns, ...query, offset, limit, cursor, firstPage }\n })\n reader = prepared.cursor\n // A paused paged reader owns no native query. Cancellation can release its read lease without\n // waiting for the consumer to call next()/return(); native readers release after cleanup.\n if (!reader) read.signal.addEventListener(\"abort\", read.release, { once: true })\n read.signal.throwIfAborted()\n if (reader) {\n yield* this.normalizeRows(reader.rows(), prepared.columns, read.signal)\n return\n }\n\n // Each bounded query releases both the runtime queue and attachment lease before yielding.\n // SQLite metadata locks and PostgreSQL pool slots are released before consumer operations.\n let offset = prepared.offset\n let remaining = prepared.limit\n let cursor: bigint | null = null\n let page: readonly Record<string, unknown>[] | undefined = prepared.firstPage\n while (remaining !== 0) {\n read.signal.throwIfAborted()\n const pageSize = Math.min(remaining ?? READ_PAGE_ROWS, READ_PAGE_ROWS)\n const rows: readonly Record<string, unknown>[] =\n page ??\n (await this.connections.withAttachedRuntime((runtime) =>\n runtime.query(pageSql(prepared, pageSize, offset, cursor))\n ))\n page = undefined\n read.signal.throwIfAborted()\n yield* this.normalizeRows(rows, prepared.columns, read.signal)\n if (remaining !== undefined) remaining -= rows.length\n if (rows.length < pageSize) return\n if (prepared.physicalOrder)\n cursor = getBigIntLike(rows[rows.length - 1]!, PHYSICAL_ROW_ID_ALIAS)\n offset += rows.length\n }\n } finally {\n read.signal.removeEventListener(\"abort\", read.release)\n try {\n await reader?.close()\n } finally {\n read.release()\n }\n }\n }\n\n private async *normalizeRows(\n rows: Iterable<Record<string, unknown>> | AsyncIterable<Record<string, unknown>>,\n selectedColumns: readonly DatasetColumnDefinition[],\n signal: AbortSignal\n ): AsyncIterable<DatasetRow> {\n for await (const row of rows) {\n signal.throwIfAborted()\n const output: Record<string, unknown> = {}\n for (const column of selectedColumns) {\n output[column.name] = normalizeReadValue(row[column.name], column)\n }\n yield output\n }\n }\n\n private async resolveVersion(\n runtime: DuckDbQueryRuntime,\n tableRef: DatasetTableRef,\n versionId?: string\n ): Promise<DatasetVersion> {\n if (versionId !== undefined) {\n const snapshotId = parseVersionId(versionId)\n const version = await this.snapshots.getVersionForTableRef(runtime, tableRef, snapshotId)\n if (!version) {\n this.throwNoCommittedVersion(tableRef.datasetId)\n }\n\n return version\n }\n\n const latestVersion = await this.snapshots.getLatestVersionForTableRef(runtime, tableRef)\n if (!latestVersion) {\n this.throwNoCommittedVersion(tableRef.datasetId)\n }\n\n return latestVersion\n }\n\n private resolveReadColumns(\n datasetId: string,\n schema: DatasetVersion[\"schema\"],\n columns?: readonly string[]\n ): readonly DatasetColumnDefinition[] {\n if (columns === undefined || columns.length === 0) {\n return schema.columns\n }\n\n const columnsByName = new Map(schema.columns.map((column) => [column.name, column] as const))\n\n return columns.map((columnName) => {\n const column = columnsByName.get(columnName)\n if (!column) {\n throw new LakeStorageError(\n `[SixbDuckLake] Dataset '${datasetId}' does not have column '${columnName}' at the requested version.`\n )\n }\n\n return column\n })\n }\n\n private throwNoCommittedVersion(datasetId: string): never {\n throw new LakeStorageError(\n `[SixbDuckLake] No committed version found for dataset '${datasetId}'.`\n )\n }\n}\n\nfunction pageSql(\n read: { readonly columnsSql: string; readonly relation: string; readonly physicalOrder: boolean },\n limit: number,\n offset: number,\n cursor: bigint | null\n): string {\n return read.physicalOrder\n ? `SELECT rowid AS ${quoteIdentifier(PHYSICAL_ROW_ID_ALIAS)}, ${read.columnsSql}\n FROM ${read.relation} ${cursor === null ? \"\" : `WHERE rowid > ${cursor}`}\n ORDER BY rowid LIMIT ${limit} ${cursor === null && offset > 0 ? `OFFSET ${offset}` : \"\"}`\n : `SELECT ${read.columnsSql} FROM ${read.relation} LIMIT ${limit} OFFSET ${offset}`\n}\n",
27
- "import type { DatasetDefinition, DatasetSchema } from \"@sixb/core\"\nimport type {\n DatasetCatalogState,\n DatasetLatestVersionSummary,\n DatasetProducer,\n DatasetVersion,\n DatasetVersionLineage,\n DatasetVersionMode,\n DatasetVersionRef,\n LatestVersionsSince,\n ListLatestVersionsSinceInput,\n} from \"@sixb/core/lake-storage\"\nimport { LakeStorageError } from \"@sixb/core/lake-storage\"\nimport type { DuckLakeStorageOptions } from \"../types\"\nimport { getBigIntLike, getDate, getOptionalString, getString } from \"./duckdb-row\"\nimport type { DuckDbQueryRuntime } from \"./duckdb-runtime\"\nimport type { DuckLakeConnectionManager } from \"./ducklake-connection-manager\"\nimport type { DuckLakeDatasetCatalog } from \"./ducklake-dataset-catalog\"\nimport {\n type DatasetTableRef,\n datasetTableIds,\n resolveDatasetTableRef,\n resolveDatasetTableRefAtCurrentSnapshot,\n} from \"./ducklake-dataset-table-ref\"\nimport type { LatestVersionAtSnapshot } from \"./ducklake-version-transaction\"\nimport { decodeLineage } from \"./lineage-encoding\"\nimport {\n decodeDatasetTableName,\n encodeDatasetSequenceTableName,\n encodeDatasetTableName,\n} from \"./names\"\nimport { buildDuckLakeMetadataQuery, duckLakeMetadataTableName, quoteSqlString } from \"./sql\"\nimport {\n changesTouchTables,\n parseCommitMetadata,\n parseTableDataChange,\n parseVersionId,\n type SixbCommitMetadata,\n toVersionId,\n} from \"./versions\"\n\nexport interface DatasetSnapshotRow {\n readonly snapshotId: string\n readonly tableId: bigint\n readonly createdAt: Date\n readonly mode: DatasetVersionMode\n readonly parentSnapshotId?: string\n readonly metadata?: SixbCommitMetadata\n}\n\ninterface DatasetSnapshotCandidateRow {\n readonly snapshotId: string\n readonly createdAt: Date\n readonly changesMade: string\n readonly metadata?: SixbCommitMetadata\n}\n\ninterface FeedTable {\n readonly datasetId: string\n readonly tableId: bigint\n /** A dataset cannot have a version before its table exists. */\n readonly startSnapshotId: bigint\n}\n\ninterface SnapshotCandidateQueryInput {\n readonly table: DatasetTableRef\n readonly exactSnapshotId?: string\n readonly beforeSnapshotId?: string\n readonly limit: number\n}\n\ninterface VisibleSnapshotRowsInput {\n readonly table: DatasetTableRef\n readonly exactSnapshotId?: string\n readonly beforeSnapshotId?: string\n readonly visibleRowLimit?: number\n}\n\n/** A version reference, with the DuckLake table and snapshot it was resolved through. */\nexport interface DuckLakeTableVersionRef extends DatasetVersionRef {\n readonly table: DatasetTableRef\n readonly snapshot: DatasetSnapshotRow\n}\n\n/** What a commit needs of the version it builds on. */\nexport interface DuckLakeVersionSummary {\n readonly datasetId: string\n readonly versionId: string\n readonly schema: DatasetSchema\n readonly producer?: DatasetProducer\n readonly inputs?: readonly DatasetVersionRef[]\n readonly lineage?: DatasetVersionLineage\n readonly rowCount?: number\n readonly validatedPrimaryKeyColumns?: readonly string[]\n}\n\n/** One snapshot row from the shared catalog scan, before per-dataset filtering. */\ninterface CatalogScanSnapshot {\n readonly snapshotId: string\n readonly createdAt: Date\n readonly changesMade: string\n}\n\nconst SNAPSHOT_ROW_BATCH_SIZE = 128\n// One feed read covers at most this many commits; the next read continues from its cursor.\nconst FEED_PAGE_SIZE = 512\n\n// A read of the latest version, or of the one before a version, usually finds it among the\n// dataset's most recent snapshots. It first reads only a few of them: each carries the commit\n// metadata of its version, whose lineage may be large.\nconst SHORT_READ_BATCH_SIZE = 8\n\n// The bulk catalog scan shares one descending walk of recent snapshots across\n// all requested datasets, so its cost is bounded by this window rather than by\n// the dataset count. A dataset whose latest version is older than the window\n// reports a null latest version, which is acceptable for a catalog summary; the\n// detail routes still hydrate exact history.\nconst CATALOG_SNAPSHOT_SCAN_LIMIT = 512\n\n/**\n * Reconstructs Sixb DatasetVersion objects from DuckLake snapshots.\n *\n * DuckLake remains the source of truth for version ids, commit times, and\n * historical reads. Sixb commit metadata only hydrates fields DuckLake does\n * not know about, such as producer info and declared inputs.\n *\n * This class intentionally reads DuckLake metadata directly. The provider does\n * not keep a Sixb side table for versions; a Sixb version is a DuckLake\n * snapshot whose `changes_made` names the dataset table: one that changed its\n * rows, or that altered the table with Sixb commit metadata naming the dataset,\n * as a version that changes no rows does (see the write coordinator's\n * `claimTable`).\n *\n * DuckLake names a table in `changes_made` for every change to its rows, inlined\n * or written to files, so version reads never scan the catalog's file tables.\n */\nexport class DuckLakeSnapshotReader {\n constructor(\n private readonly options: DuckLakeStorageOptions,\n private readonly connections: DuckLakeConnectionManager,\n private readonly datasets: DuckLakeDatasetCatalog\n ) {}\n\n async listVersions(datasetId: string, limit?: number): Promise<readonly DatasetVersion[]> {\n this.connections.assertOpen()\n\n return this.connections.withAttachedRuntime(async (runtime) => {\n const tableRef = await resolveDatasetTableRef(this.options, runtime, datasetId)\n if (!tableRef) {\n return []\n }\n\n return this.listVersionsForTableRef(runtime, tableRef, limit)\n })\n }\n\n async getLatestVersion(datasetId: string): Promise<DatasetVersion | null> {\n this.connections.assertOpen()\n\n return this.connections.withAttachedRuntime(async (runtime) => {\n const tableRef = await resolveDatasetTableRef(this.options, runtime, datasetId)\n if (!tableRef) {\n return null\n }\n\n return this.getLatestVersionForTableRef(runtime, tableRef)\n })\n }\n\n async getVersion(datasetId: string, versionId: string): Promise<DatasetVersion | null> {\n const snapshotId = parseVersionId(versionId)\n this.connections.assertOpen()\n\n return this.connections.withAttachedRuntime(async (runtime) => {\n const tableRef = await resolveDatasetTableRef(this.options, runtime, datasetId)\n if (!tableRef) {\n return null\n }\n\n return this.getVersionForTableRef(runtime, tableRef, snapshotId)\n })\n }\n\n /**\n * Bulk catalog-summary read used by the dataset list view.\n *\n * Resolves materialized state and a lightweight latest-version summary for\n * many datasets with a bounded number of metadata queries, never one snapshot\n * scan per dataset and never a count(*) over dataset contents.\n */\n async listDatasetCatalogState(\n datasetIds: readonly string[]\n ): Promise<readonly DatasetCatalogState[]> {\n this.connections.assertOpen()\n\n if (datasetIds.length === 0) {\n return []\n }\n\n return this.connections.withAttachedRuntime((runtime) =>\n this.collectDatasetCatalogState(runtime, datasetIds)\n )\n }\n\n private async collectDatasetCatalogState(\n runtime: DuckDbQueryRuntime,\n datasetIds: readonly string[]\n ): Promise<readonly DatasetCatalogState[]> {\n const uniqueIds = [...new Set(datasetIds)]\n const tablesByDatasetId = await this.resolveDatasetTables(runtime, uniqueIds)\n const latestRowByDatasetId = await this.resolveLatestSnapshotRows(runtime, tablesByDatasetId)\n\n return uniqueIds.map((datasetId) => {\n if (!tablesByDatasetId.has(datasetId)) {\n return { datasetId, materialized: false, latestVersion: null }\n }\n\n const row = latestRowByDatasetId.get(datasetId)\n return {\n datasetId,\n materialized: true,\n latestVersion: row ? this.snapshotRowToSummary(datasetId, row) : null,\n }\n })\n }\n\n /**\n * Change feed over DuckLake's snapshot table, which is an append-only commit log: snapshot ids\n * only increase, and a commit becomes visible only after every lower id has (concurrent commits\n * that pick the same id conflict, and the loser retries with the next one). The cursor is the\n * last snapshot id read. Every query is bounded by a snapshot-id range, so an idle read is one\n * indexed query that returns the cursor's own snapshot, whatever the history length.\n */\n async listLatestVersionsSince(\n input: ListLatestVersionsSinceInput\n ): Promise<LatestVersionsSince | null> {\n this.connections.assertOpen()\n\n return this.connections.withAttachedRuntime(async (runtime) => {\n if (input.cursor === null) {\n return { cursor: await this.queryHeadSnapshotId(runtime), versions: [] }\n }\n if (!/^\\d+$/.test(input.cursor)) {\n return null\n }\n\n const snapshots = await this.querySnapshotsFrom(runtime, input.cursor)\n // The cursor's own snapshot proves the cursor is still a position in this lake's history.\n if (snapshots[0]?.snapshotId !== input.cursor) {\n return null\n }\n const newSnapshots = snapshots.slice(1)\n if (newSnapshots.length === 0) {\n return { cursor: input.cursor, versions: [] }\n }\n\n const tables = await this.resolveFeedTables(runtime, input.datasetIds)\n const latest = await this.collectFeedPage(runtime, tables, newSnapshots)\n return {\n cursor: newSnapshots[newSnapshots.length - 1]?.snapshotId ?? input.cursor,\n versions: [...latest].map(([datasetId, row]) => this.snapshotRowToSummary(datasetId, row)),\n }\n })\n }\n\n private async queryHeadSnapshotId(runtime: DuckDbQueryRuntime): Promise<string> {\n const [row] = await runtime.query(\n buildDuckLakeMetadataQuery(\n this.options,\n (table) => `SELECT max(snapshot_id) AS snapshot_id FROM ${table(\"ducklake_snapshot\")}`\n )\n )\n if (row?.snapshot_id === null || row?.snapshot_id === undefined) {\n throw new LakeStorageError(\"[SixbDuckLake] DuckLake catalog has no snapshots.\")\n }\n return String(getBigIntLike(row, \"snapshot_id\"))\n }\n\n /** The cursor's snapshot and up to one feed page of snapshots after it, oldest first. */\n private async querySnapshotsFrom(\n runtime: DuckDbQueryRuntime,\n cursor: string\n ): Promise<readonly { readonly snapshotId: string; readonly createdAt: Date }[]> {\n const rows = await runtime.query(\n buildDuckLakeMetadataQuery(\n this.options,\n (table) => `\n SELECT snapshot_id, snapshot_time\n FROM ${table(\"ducklake_snapshot\")}\n WHERE snapshot_id >= ${cursor}\n ORDER BY snapshot_id\n LIMIT ${FEED_PAGE_SIZE + 1}\n `\n )\n )\n return rows.map((row) => ({\n snapshotId: String(getBigIntLike(row, \"snapshot_id\")),\n createdAt: getDate(row, \"snapshot_time\"),\n }))\n }\n\n /** Current dataset tables, with the first snapshot each table id existed in. */\n private async resolveFeedTables(\n runtime: DuckDbQueryRuntime,\n datasetIds: readonly string[] | undefined\n ): Promise<readonly FeedTable[]> {\n const requested = datasetIds === undefined ? null : new Set(datasetIds)\n const rows = await runtime.query(`\n SELECT table_id, table_name, begin_snapshot, end_snapshot\n FROM ${duckLakeMetadataTableName(this.options, \"ducklake_table\")}\n `)\n\n const startByTableId = new Map<bigint, bigint>()\n const current: { datasetId: string; tableId: bigint }[] = []\n for (const row of rows) {\n const tableId = getBigIntLike(row, \"table_id\")\n const begin = getBigIntLike(row, \"begin_snapshot\")\n const start = startByTableId.get(tableId)\n if (start === undefined || begin < start) {\n startByTableId.set(tableId, begin)\n }\n if (row.end_snapshot !== null && row.end_snapshot !== undefined) {\n continue\n }\n const datasetId = decodeDatasetTableName(getString(row, \"table_name\"))\n if (datasetId !== null && (requested === null || requested.has(datasetId))) {\n current.push({ datasetId, tableId })\n }\n }\n\n return current.map((table) => ({\n ...table,\n startSnapshotId: startByTableId.get(table.tableId) ?? 0n,\n }))\n }\n\n /** Folds a page of snapshots, oldest first, into each dataset's newest data version. */\n private async collectFeedPage(\n runtime: DuckDbQueryRuntime,\n tables: readonly FeedTable[],\n snapshots: readonly { readonly snapshotId: string; readonly createdAt: Date }[]\n ): Promise<Map<string, DatasetSnapshotRow>> {\n const latest = new Map<string, DatasetSnapshotRow>()\n const first = snapshots[0]?.snapshotId\n const last = snapshots[snapshots.length - 1]?.snapshotId\n if (first === undefined || last === undefined || tables.length === 0) {\n return latest\n }\n\n const changeRows = await runtime.query(\n buildDuckLakeMetadataQuery(\n this.options,\n (table) => `\n SELECT snapshot_id, changes_made, commit_extra_info\n FROM ${table(\"ducklake_snapshot_changes\")}\n WHERE snapshot_id >= ${first} AND snapshot_id <= ${last}\n `\n )\n )\n const changesBySnapshotId = new Map(\n changeRows.map((row) => [String(getBigIntLike(row, \"snapshot_id\")), row])\n )\n const tablesByTableId = new Map(tables.map((table) => [table.tableId.toString(), table]))\n\n for (const snapshot of snapshots) {\n const changes = changesBySnapshotId.get(snapshot.snapshotId)\n if (changes === undefined) {\n continue\n }\n const changesMade = getString(changes, \"changes_made\")\n const metadata = parseCommitMetadata(changes.commit_extra_info)\n\n // Only the tables this snapshot names can have a version in it.\n const touched = new Set<FeedTable>()\n for (const change of changesMade.split(\",\")) {\n const table = tablesByTableId.get(change.split(\":\")[1] ?? \"\")\n if (table) touched.add(table)\n }\n\n for (const table of touched) {\n if (BigInt(snapshot.snapshotId) < table.startSnapshotId) {\n continue\n }\n const row = this.candidateToSnapshotRow(table.datasetId, table.tableId, {\n snapshotId: snapshot.snapshotId,\n createdAt: snapshot.createdAt,\n changesMade,\n ...(metadata !== undefined ? { metadata } : {}),\n })\n if (row && row.mode !== \"schema\") {\n latest.set(table.datasetId, row)\n }\n }\n }\n\n return latest\n }\n\n /**\n * The snapshot of every dataset's latest version, however old, from one shared walk down the\n * whole history: maintenance must never expire one.\n */\n async latestVersionSnapshotIds(runtime: DuckDbQueryRuntime): Promise<readonly string[]> {\n const tables = await runtime.query(`\n SELECT table_name\n FROM ${duckLakeMetadataTableName(this.options, \"ducklake_table\")}\n WHERE end_snapshot IS NULL\n `)\n const datasetIds = tables.flatMap((table) => {\n const datasetId = decodeDatasetTableName(getString(table, \"table_name\"))\n return datasetId === null ? [] : [datasetId]\n })\n\n if (datasetIds.length === 0) {\n return []\n }\n\n const latest = await this.resolveLatestSnapshotRows(\n runtime,\n await this.resolveDatasetTables(runtime, datasetIds),\n Number.POSITIVE_INFINITY\n )\n return [...latest.values()].map((row) => row.snapshotId)\n }\n\n private snapshotRowToSummary(\n datasetId: string,\n row: DatasetSnapshotRow\n ): DatasetLatestVersionSummary {\n return {\n datasetId,\n versionId: toVersionId(row.snapshotId),\n mode: row.mode,\n createdAt: row.createdAt,\n ...(row.metadata?.rowCount !== undefined ? { rowCount: row.metadata.rowCount } : {}),\n }\n }\n\n private async resolveDatasetTables(\n runtime: DuckDbQueryRuntime,\n datasetIds: readonly string[]\n ): Promise<Map<string, DatasetTableRef>> {\n // Encoded table names are a collision-free bijection with dataset ids, so a\n // single `ducklake_table` read maps every requested id to its current tables.\n const datasetIdByTableName = new Map<string, string>()\n const datasetIdBySequenceTableName = new Map<string, string>()\n for (const datasetId of datasetIds) {\n datasetIdByTableName.set(encodeDatasetTableName(datasetId), datasetId)\n datasetIdBySequenceTableName.set(encodeDatasetSequenceTableName(datasetId), datasetId)\n }\n\n const ducklakeTable = duckLakeMetadataTableName(this.options, \"ducklake_table\")\n const tableNameList = [...datasetIdByTableName.keys(), ...datasetIdBySequenceTableName.keys()]\n .map((name) => quoteSqlString(name))\n .join(\", \")\n const rows = await runtime.query(`\n SELECT table_id, table_name\n FROM ${ducklakeTable}\n WHERE table_name IN (${tableNameList})\n AND end_snapshot IS NULL\n `)\n\n const tablesByDatasetId = new Map<string, DatasetTableRef>()\n for (const row of rows) {\n const tableName = getString(row, \"table_name\")\n const datasetId = datasetIdByTableName.get(tableName)\n if (datasetId !== undefined) {\n tablesByDatasetId.set(datasetId, {\n datasetId,\n tableName,\n tableId: getBigIntLike(row, \"table_id\"),\n })\n }\n }\n\n for (const row of rows) {\n const datasetId = datasetIdBySequenceTableName.get(getString(row, \"table_name\"))\n const table = datasetId === undefined ? undefined : tablesByDatasetId.get(datasetId)\n if (datasetId !== undefined && table !== undefined) {\n tablesByDatasetId.set(datasetId, {\n ...table,\n sequenceTableId: getBigIntLike(row, \"table_id\"),\n })\n }\n }\n\n return tablesByDatasetId\n }\n\n /**\n * Resolve each dataset's latest snapshot row with one shared descending walk.\n *\n * The walk reuses {@link candidateToSnapshotRow} so Sixb visibility, mode\n * derivation, and the loud conflict rule match exact version hydration. Cost\n * is bounded by the snapshot window, not by the number of datasets.\n */\n private async resolveLatestSnapshotRows(\n runtime: DuckDbQueryRuntime,\n tablesByDatasetId: ReadonlyMap<string, DatasetTableRef>,\n scanLimit = CATALOG_SNAPSHOT_SCAN_LIMIT\n ): Promise<Map<string, DatasetSnapshotRow>> {\n const result = new Map<string, DatasetSnapshotRow>()\n if (tablesByDatasetId.size === 0) {\n return result\n }\n\n const unresolved = new Map<string, DatasetTableRef>(tablesByDatasetId)\n\n let beforeSnapshotId: string | undefined\n let scanned = 0\n while (unresolved.size > 0 && scanned < scanLimit) {\n const candidates = await this.queryCatalogSnapshotBatch(\n runtime,\n beforeSnapshotId,\n SNAPSHOT_ROW_BATCH_SIZE\n )\n if (candidates.length === 0) {\n break\n }\n\n const tables = [...unresolved.values()]\n const metadata = await this.readCommitMetadata(\n runtime,\n candidates\n .filter((candidate) =>\n tables.some((table) =>\n changesTouchTables(candidate.changesMade, datasetTableIds(table))\n )\n )\n .map((candidate) => candidate.snapshotId)\n )\n\n for (const candidate of candidates) {\n scanned += 1\n const candidateMetadata = metadata.get(candidate.snapshotId)\n for (const [datasetId, table] of [...unresolved]) {\n const row = this.candidateToSnapshotRow(datasetId, table.tableId, {\n snapshotId: candidate.snapshotId,\n createdAt: candidate.createdAt,\n changesMade: candidate.changesMade,\n ...(candidateMetadata !== undefined ? { metadata: candidateMetadata } : {}),\n })\n if (row) {\n result.set(datasetId, row)\n unresolved.delete(datasetId)\n }\n }\n\n if (unresolved.size === 0) {\n break\n }\n }\n\n if (candidates.length < SNAPSHOT_ROW_BATCH_SIZE) {\n break\n }\n beforeSnapshotId = candidates[candidates.length - 1]?.snapshotId\n }\n\n return result\n }\n\n private async queryCatalogSnapshotBatch(\n runtime: DuckDbQueryRuntime,\n beforeSnapshotId: string | undefined,\n limit: number\n ): Promise<readonly CatalogScanSnapshot[]> {\n const ducklakeSnapshot = duckLakeMetadataTableName(this.options, \"ducklake_snapshot\")\n const ducklakeSnapshotChanges = duckLakeMetadataTableName(\n this.options,\n \"ducklake_snapshot_changes\"\n )\n\n let whereSql = \"\"\n if (beforeSnapshotId !== undefined) {\n assertDuckLakeSnapshotId(beforeSnapshotId)\n whereSql = `WHERE snapshot.snapshot_id < ${beforeSnapshotId}`\n }\n\n const rows = await runtime.query(`\n SELECT\n snapshot.snapshot_id,\n snapshot.snapshot_time,\n changes.changes_made\n FROM ${ducklakeSnapshot} snapshot\n JOIN ${ducklakeSnapshotChanges} changes ON changes.snapshot_id = snapshot.snapshot_id\n ${whereSql}\n ORDER BY snapshot.snapshot_id DESC\n LIMIT ${Math.max(0, Math.trunc(limit))}\n `)\n\n return rows.map((row) => ({\n snapshotId: String(getBigIntLike(row, \"snapshot_id\")),\n createdAt: getDate(row, \"snapshot_time\"),\n changesMade: getString(row, \"changes_made\"),\n }))\n }\n\n private assertNoMetadataConflict(\n snapshotId: string,\n datasetId: string,\n metadata: SixbCommitMetadata | undefined\n ): void {\n if (metadata !== undefined && metadata.datasetId !== datasetId) {\n throw new LakeStorageError(\n `[SixbDuckLake] DuckLake snapshot '${snapshotId}' changed dataset '${datasetId}' but Sixb commit metadata references dataset '${metadata.datasetId}'.`\n )\n }\n }\n\n async getLatestVersionForDefinition(\n runtime: DuckDbQueryRuntime,\n dataset: DatasetDefinition\n ): Promise<DatasetVersion | null> {\n const tableRef = await resolveDatasetTableRef(this.options, runtime, dataset.id)\n return tableRef ? this.getLatestVersionForTableRef(runtime, tableRef) : null\n }\n\n async getLatestVersionRefForDefinition(\n runtime: DuckDbQueryRuntime,\n dataset: DatasetDefinition\n ): Promise<DuckLakeTableVersionRef | null> {\n const tableRef = await resolveDatasetTableRef(this.options, runtime, dataset.id)\n if (!tableRef) {\n return null\n }\n\n const row = await this.getLatestSnapshotRowForTableRef(runtime, tableRef)\n return row ? tableVersionRef(tableRef, row) : null\n }\n\n async getLatestVersionSummaryForDefinition(\n runtime: DuckDbQueryRuntime,\n dataset: DatasetDefinition\n ): Promise<DuckLakeVersionSummary | null> {\n const tableRef = await resolveDatasetTableRef(this.options, runtime, dataset.id)\n return tableRef ? this.getLatestVersionSummaryForTableRef(runtime, tableRef) : null\n }\n\n /**\n * The latest version a commit builds on, with the lake's snapshot it was read at. Its first\n * read fixes the snapshot of a transaction it runs in (see `beginTransactionOnLatestVersion`).\n */\n async getLatestVersionSummaryAtCurrentSnapshot(\n runtime: DuckDbQueryRuntime,\n dataset: DatasetDefinition\n ): Promise<LatestVersionAtSnapshot<DuckLakeVersionSummary>> {\n const { snapshotId, table } = await resolveDatasetTableRefAtCurrentSnapshot(\n this.options,\n runtime,\n dataset.id\n )\n\n return {\n snapshotId,\n latestVersion: table ? await this.getLatestVersionSummaryForTableRef(runtime, table) : null,\n }\n }\n\n private async getLatestVersionSummaryForTableRef(\n runtime: DuckDbQueryRuntime,\n tableRef: DatasetTableRef\n ): Promise<DuckLakeVersionSummary | null> {\n const row = await this.getLatestSnapshotRowForTableRef(runtime, tableRef)\n if (!row) {\n return null\n }\n\n const [schema] = await this.datasets.getDatasetSchemasAtSnapshots(runtime, [\n { table: tableRef, snapshotId: row.snapshotId },\n ])\n\n return {\n datasetId: tableRef.datasetId,\n versionId: toVersionId(row.snapshotId),\n schema,\n producer: row.metadata?.producer,\n inputs: row.metadata?.inputs,\n ...storedLineage(tableRef.datasetId, row),\n ...(row.metadata?.rowCount !== undefined ? { rowCount: row.metadata.rowCount } : {}),\n ...(row.metadata?.validatedPrimaryKeyColumns !== undefined\n ? { validatedPrimaryKeyColumns: row.metadata.validatedPrimaryKeyColumns }\n : {}),\n }\n }\n\n async getVersionForSnapshot(\n runtime: DuckDbQueryRuntime,\n dataset: DatasetDefinition,\n snapshotId: string\n ): Promise<DatasetVersion | null> {\n assertDuckLakeSnapshotId(snapshotId)\n\n const tableRef = await resolveDatasetTableRef(this.options, runtime, dataset.id)\n return tableRef ? this.getVersionForTableRef(runtime, tableRef, snapshotId) : null\n }\n\n async getVersionForTableRef(\n runtime: DuckDbQueryRuntime,\n tableRef: DatasetTableRef,\n snapshotId: string\n ): Promise<DatasetVersion | null> {\n const match = await this.getSnapshotRowForTableRef(runtime, tableRef, snapshotId, {\n includeParent: true,\n })\n return match ? (await this.snapshotsToVersions(runtime, tableRef, [match]))[0] : null\n }\n\n async getVersionRefForSnapshot(\n runtime: DuckDbQueryRuntime,\n dataset: DatasetDefinition,\n snapshotId: string\n ): Promise<DuckLakeTableVersionRef | null> {\n assertDuckLakeSnapshotId(snapshotId)\n\n const tableRef = await resolveDatasetTableRef(this.options, runtime, dataset.id)\n if (!tableRef) {\n return null\n }\n\n const row = await this.getSnapshotRowForTableRef(runtime, tableRef, snapshotId, {\n includeParent: false,\n })\n return row ? tableVersionRef(tableRef, row) : null\n }\n\n /**\n * The versions resolved refs point to, with their schemas from one catalog read. Refs resolve\n * without their parent, so these versions carry no `parentVersionId`.\n */\n async getVersionsForRefs(\n runtime: DuckDbQueryRuntime,\n refs: readonly DuckLakeTableVersionRef[]\n ): Promise<DatasetVersion[]> {\n const schemas = await this.datasets.getDatasetSchemasAtSnapshots(\n runtime,\n refs.map((ref) => ({ table: ref.table, snapshotId: ref.snapshot.snapshotId }))\n )\n\n return refs.map((ref, index) => snapshotToVersion(ref.table, ref.snapshot, schemas[index]))\n }\n\n async listVersionsForDefinition(\n runtime: DuckDbQueryRuntime,\n dataset: DatasetDefinition,\n limit?: number\n ): Promise<readonly DatasetVersion[]> {\n const tableRef = await resolveDatasetTableRef(this.options, runtime, dataset.id)\n return tableRef ? this.listVersionsForTableRef(runtime, tableRef, limit) : []\n }\n\n private async listVersionsForTableRef(\n runtime: DuckDbQueryRuntime,\n tableRef: DatasetTableRef,\n limit?: number\n ): Promise<readonly DatasetVersion[]> {\n const limitedRows = await this.getSnapshotRowsForTableRef(runtime, tableRef, limit)\n return this.snapshotsToVersions(runtime, tableRef, limitedRows)\n }\n\n async getLatestVersionForTableRef(\n runtime: DuckDbQueryRuntime,\n tableRef: DatasetTableRef\n ): Promise<DatasetVersion | null> {\n const [latest] = await this.listVersionsForTableRef(runtime, tableRef, 1)\n return latest ?? null\n }\n\n private async getLatestSnapshotRowForTableRef(\n runtime: DuckDbQueryRuntime,\n tableRef: DatasetTableRef\n ): Promise<DatasetSnapshotRow | null> {\n const [row] = await this.collectVisibleSnapshotRows(runtime, {\n table: tableRef,\n visibleRowLimit: 1,\n })\n return row ?? null\n }\n\n private async getSnapshotRowForTableRef(\n runtime: DuckDbQueryRuntime,\n tableRef: DatasetTableRef,\n snapshotId: string,\n options: { readonly includeParent: boolean }\n ): Promise<DatasetSnapshotRow | null> {\n assertDuckLakeSnapshotId(snapshotId)\n\n const [row] = await this.collectVisibleSnapshotRows(runtime, {\n table: tableRef,\n exactSnapshotId: snapshotId,\n visibleRowLimit: 1,\n })\n if (!row) {\n return null\n }\n\n if (\n !options.includeParent ||\n (row.mode !== \"append\" && row.mode !== \"merge\" && row.mode !== \"schema\")\n ) {\n return row\n }\n\n const [parent] = await this.collectVisibleSnapshotRows(runtime, {\n table: tableRef,\n beforeSnapshotId: snapshotId,\n visibleRowLimit: 1,\n })\n\n return parent ? { ...row, parentSnapshotId: parent.snapshotId } : row\n }\n\n private async getSnapshotRowsForTableRef(\n runtime: DuckDbQueryRuntime,\n tableRef: DatasetTableRef,\n limit?: number\n ): Promise<readonly DatasetSnapshotRow[]> {\n const visibleLimit = limit === undefined ? undefined : Math.max(0, limit)\n if (visibleLimit === 0) {\n return []\n }\n\n const rows = await this.collectVisibleSnapshotRows(runtime, {\n table: tableRef,\n visibleRowLimit: visibleLimit === undefined ? undefined : visibleLimit + 1,\n })\n const rowsWithParents = this.withParentSnapshotIds(rows)\n return visibleLimit === undefined ? rowsWithParents : rowsWithParents.slice(0, visibleLimit)\n }\n\n private async collectVisibleSnapshotRows(\n runtime: DuckDbQueryRuntime,\n input: VisibleSnapshotRowsInput\n ): Promise<readonly DatasetSnapshotRow[]> {\n if (input.visibleRowLimit !== undefined && input.visibleRowLimit <= 0) {\n return []\n }\n\n const snapshots: DatasetSnapshotRow[] = []\n let beforeSnapshotId = input.beforeSnapshotId\n let shortRead =\n input.exactSnapshotId !== undefined ||\n (input.visibleRowLimit !== undefined && input.visibleRowLimit <= 2)\n\n while (input.visibleRowLimit === undefined || snapshots.length < input.visibleRowLimit) {\n const batchSize = shortRead ? SHORT_READ_BATCH_SIZE : SNAPSHOT_ROW_BATCH_SIZE\n const candidates = await this.querySnapshotCandidates(runtime, {\n table: input.table,\n exactSnapshotId: input.exactSnapshotId,\n beforeSnapshotId,\n limit: input.exactSnapshotId === undefined ? batchSize : 1,\n })\n shortRead = false\n if (candidates.length === 0) {\n break\n }\n\n for (const candidate of candidates) {\n const snapshot = this.candidateToSnapshotRow(\n input.table.datasetId,\n input.table.tableId,\n candidate\n )\n if (snapshot) {\n snapshots.push(snapshot)\n }\n\n if (input.visibleRowLimit !== undefined && snapshots.length >= input.visibleRowLimit) {\n break\n }\n }\n\n if (input.exactSnapshotId !== undefined || candidates.length < batchSize) {\n break\n }\n\n beforeSnapshotId = candidates[candidates.length - 1]?.snapshotId\n }\n\n return snapshots\n }\n\n /**\n * Hydrates, newest first, the snapshots whose changes name one of the dataset's tables: every\n * snapshot that may hold one of its versions. The text match is a superset;\n * candidateToSnapshotRow decides visibility.\n *\n * The query walks the catalog's snapshot ids downwards, from `beforeSnapshotId` or the head,\n * and stops at the limit or at the table's creation. A lookup therefore reads the snapshots\n * between where it starts and the versions it returns: a few for an active dataset, at most the\n * table's lifetime for one written long ago. It never reads the file tables, whose replaced\n * files stay until cleanup.\n */\n private async querySnapshotCandidates(\n runtime: DuckDbQueryRuntime,\n input: SnapshotCandidateQueryInput\n ): Promise<readonly DatasetSnapshotCandidateRow[]> {\n const limit = Math.max(0, Math.trunc(input.limit))\n if (limit === 0) {\n return []\n }\n if (input.exactSnapshotId !== undefined) {\n assertDuckLakeSnapshotId(input.exactSnapshotId)\n }\n if (input.beforeSnapshotId !== undefined) {\n assertDuckLakeSnapshotId(input.beforeSnapshotId)\n }\n\n const rows = await runtime.query(\n buildDuckLakeMetadataQuery(this.options, (table) => {\n // A dataset cannot have a version before its table exists. Use the earliest table record:\n // a rename may create a newer record with the same table id and must not hide older\n // versions.\n const bounds = [\n `changes.snapshot_id >= (\n SELECT min(begin_snapshot)\n FROM ${table(\"ducklake_table\")}\n WHERE table_id = ${input.table.tableId}\n )`,\n ]\n if (input.exactSnapshotId !== undefined) {\n bounds.push(`changes.snapshot_id = ${input.exactSnapshotId}`)\n }\n if (input.beforeSnapshotId !== undefined) {\n bounds.push(`changes.snapshot_id < ${input.beforeSnapshotId}`)\n }\n\n const namesDatasetTable = datasetTableIds(input.table)\n .map(\n (tableId) =>\n `strpos(',' || changes.changes_made || ',', ${quoteSqlString(`:${tableId},`)}) > 0`\n )\n .join(\" OR \")\n\n // Bounds and order follow the snapshot-id primary key, so PostgreSQL reads it backwards\n // and stops at the limit; the text match only filters the rows it passes.\n return `\n SELECT\n changes.snapshot_id,\n snapshot.snapshot_time,\n changes.changes_made,\n changes.commit_extra_info\n FROM ${table(\"ducklake_snapshot_changes\")} changes\n JOIN ${table(\"ducklake_snapshot\")} snapshot\n ON snapshot.snapshot_id = changes.snapshot_id\n WHERE ${bounds.join(\" AND \")}\n AND (${namesDatasetTable})\n ORDER BY changes.snapshot_id DESC\n LIMIT ${limit}\n `\n })\n )\n\n return rows.map((row) => {\n const metadata = parseCommitMetadata(row.commit_extra_info)\n\n return {\n snapshotId: String(getBigIntLike(row, \"snapshot_id\")),\n createdAt: getDate(row, \"snapshot_time\"),\n changesMade: getString(row, \"changes_made\"),\n ...(metadata !== undefined ? { metadata } : {}),\n }\n })\n }\n\n /**\n * Sixb commit metadata of the snapshots that changed a scanned dataset. Each one carries the\n * lineage of its version, which can be large: scans read it only for the snapshots they keep,\n * never for the other datasets' snapshots they page past.\n */\n private async readCommitMetadata(\n runtime: DuckDbQueryRuntime,\n snapshotIds: readonly string[]\n ): Promise<Map<string, SixbCommitMetadata>> {\n const metadata = new Map<string, SixbCommitMetadata>()\n if (snapshotIds.length === 0) {\n return metadata\n }\n\n for (const snapshotId of snapshotIds) {\n assertDuckLakeSnapshotId(snapshotId)\n }\n\n const ducklakeSnapshotChanges = duckLakeMetadataTableName(\n this.options,\n \"ducklake_snapshot_changes\"\n )\n const rows = await runtime.query(`\n SELECT snapshot_id, commit_extra_info\n FROM ${ducklakeSnapshotChanges}\n WHERE snapshot_id IN (${snapshotIds.join(\", \")})\n `)\n\n for (const row of rows) {\n const parsed = parseCommitMetadata(getOptionalString(row, \"commit_extra_info\"))\n if (parsed !== undefined) {\n metadata.set(String(getBigIntLike(row, \"snapshot_id\")), parsed)\n }\n }\n\n return metadata\n }\n\n private candidateToSnapshotRow(\n datasetId: string,\n tableId: bigint,\n candidate: DatasetSnapshotCandidateRow\n ): DatasetSnapshotRow | null {\n const { hasDataChange, hasDeleteChange } = parseTableDataChange(candidate.changesMade, tableId)\n\n // Metadata-only snapshots are common for table comments, schema changes,\n // and other catalog operations. Treat them as dataset versions only when\n // their Sixb metadata names this dataset.\n if (!hasDataChange) {\n const metadata = candidate.metadata\n if (!metadata || metadata.datasetId !== datasetId) {\n return null\n }\n\n return {\n snapshotId: candidate.snapshotId,\n tableId,\n createdAt: candidate.createdAt,\n mode: metadata.mode ?? \"schema\",\n metadata,\n }\n }\n\n // A real data-change snapshot belongs to this dataset because DuckLake's\n // change metadata touched this table id. If Sixb metadata is present but\n // points elsewhere, fail loudly rather than hydrating the wrong lineage.\n this.assertNoMetadataConflict(candidate.snapshotId, datasetId, candidate.metadata)\n\n return {\n snapshotId: candidate.snapshotId,\n tableId,\n createdAt: candidate.createdAt,\n mode: candidate.metadata?.mode ?? (hasDeleteChange ? \"snapshot\" : \"append\"),\n ...(candidate.metadata !== undefined ? { metadata: candidate.metadata } : {}),\n }\n }\n\n /** One catalog read for the schemas of every listed version, not one per version. */\n private async snapshotsToVersions(\n runtime: DuckDbQueryRuntime,\n tableRef: DatasetTableRef,\n rows: readonly DatasetSnapshotRow[]\n ): Promise<DatasetVersion[]> {\n const schemas = await this.datasets.getDatasetSchemasAtSnapshots(\n runtime,\n rows.map((row) => ({ table: tableRef, snapshotId: row.snapshotId }))\n )\n return rows.map((row, index) => snapshotToVersion(tableRef, row, schemas[index]))\n }\n\n private withParentSnapshotIds(\n snapshots: readonly DatasetSnapshotRow[]\n ): readonly DatasetSnapshotRow[] {\n return snapshots.map((snapshot, index) => {\n // Parent ids track versions that reuse the previous dataset state.\n // Snapshot versions replace the rows, so time travel stands on the snapshot id.\n const parentSnapshotId =\n snapshot.mode === \"append\" || snapshot.mode === \"merge\" || snapshot.mode === \"schema\"\n ? snapshots[index + 1]?.snapshotId\n : undefined\n return parentSnapshotId === undefined ? snapshot : { ...snapshot, parentSnapshotId }\n })\n }\n}\n\nfunction snapshotToVersion(\n tableRef: DatasetTableRef,\n row: DatasetSnapshotRow,\n schema: DatasetVersion[\"schema\"]\n): DatasetVersion {\n // DuckLake gives us version id, timestamp, and time travel. Sixb metadata\n // fills in caller intent such as append vs snapshot and producer lineage.\n // Version listing is a metadata path, so it only carries row counts already\n // stored in Sixb commit metadata and never counts historical table contents.\n\n return {\n datasetId: tableRef.datasetId,\n versionId: toVersionId(row.snapshotId),\n parentVersionId:\n row.parentSnapshotId === undefined ? undefined : toVersionId(row.parentSnapshotId),\n mode: row.mode,\n createdAt: row.createdAt,\n schema,\n producer: row.metadata?.producer,\n inputs: row.metadata?.inputs,\n ...storedLineage(tableRef.datasetId, row),\n ...(row.metadata?.rowCount !== undefined ? { rowCount: row.metadata.rowCount } : {}),\n }\n}\n\n/**\n * A data snapshot without Sixb metadata was written outside Sixb, by any DuckLake client. It may\n * keep rows of its parent whatever change it made, and nothing says where its own rows come from:\n * its lineage is unknown.\n */\nfunction storedLineage(\n datasetId: string,\n row: DatasetSnapshotRow\n): Pick<DatasetVersion, \"lineage\"> {\n const metadata = row.metadata\n if (metadata === undefined) {\n return {\n lineage: {\n unknown: `version '${toVersionId(row.snapshotId)}' of '${datasetId}' was written outside Sixb`,\n },\n }\n }\n\n return metadata.lineage === undefined\n ? {}\n : { lineage: decodeLineage(metadata.datasetId, metadata.lineage) }\n}\n\nfunction tableVersionRef(\n table: DatasetTableRef,\n snapshot: DatasetSnapshotRow\n): DuckLakeTableVersionRef {\n return {\n datasetId: table.datasetId,\n versionId: toVersionId(snapshot.snapshotId),\n table,\n snapshot,\n }\n}\n\nfunction assertDuckLakeSnapshotId(snapshotId: string): void {\n if (!/^\\d+$/.test(snapshotId)) {\n throw new LakeStorageError(`[SixbDuckLake] Invalid DuckLake snapshot id '${snapshotId}'.`)\n }\n}\n",
27
+ "import type { DatasetDefinition, DatasetSchema } from \"@sixb/core\"\nimport type {\n DatasetCatalogState,\n DatasetLatestVersionSummary,\n DatasetProducer,\n DatasetVersion,\n DatasetVersionLineage,\n DatasetVersionMode,\n DatasetVersionRef,\n LatestVersionsSince,\n ListLatestVersionsSinceInput,\n} from \"@sixb/core/lake-storage\"\nimport { LakeStorageError } from \"@sixb/core/lake-storage\"\nimport type { DuckLakeStorageOptions } from \"../types\"\nimport { getBigIntLike, getDate, getOptionalString, getString } from \"./duckdb-row\"\nimport type { DuckDbQueryRuntime } from \"./duckdb-runtime\"\nimport type { DuckLakeConnectionManager } from \"./ducklake-connection-manager\"\nimport type { DuckLakeDatasetCatalog } from \"./ducklake-dataset-catalog\"\nimport {\n type DatasetTableRef,\n datasetTableIds,\n resolveDatasetTableRef,\n resolveDatasetTableRefAtCurrentSnapshot,\n} from \"./ducklake-dataset-table-ref\"\nimport type { LatestVersionAtSnapshot } from \"./ducklake-version-transaction\"\nimport { decodeLineage } from \"./lineage-encoding\"\nimport {\n decodeDatasetTableName,\n encodeDatasetSequenceTableName,\n encodeDatasetTableName,\n} from \"./names\"\nimport { buildDuckLakeMetadataQuery, duckLakeMetadataTableName, quoteSqlString } from \"./sql\"\nimport {\n changesTouchTables,\n parseCommitMetadata,\n parseTableDataChange,\n parseVersionId,\n type SixbCommitMetadata,\n toVersionId,\n} from \"./versions\"\n\nexport interface DatasetSnapshotRow {\n readonly snapshotId: string\n readonly tableId: bigint\n readonly createdAt: Date\n readonly mode: DatasetVersionMode\n readonly rowsChanged: boolean\n readonly lineageChanged: boolean\n readonly parentSnapshotId?: string\n readonly metadata?: SixbCommitMetadata\n}\n\ninterface DatasetSnapshotCandidateRow {\n readonly snapshotId: string\n readonly createdAt: Date\n readonly changesMade: string\n readonly metadata?: SixbCommitMetadata\n}\n\ninterface FeedTable {\n readonly datasetId: string\n readonly tableId: bigint\n /** A dataset cannot have a version before its table exists. */\n readonly startSnapshotId: bigint\n}\n\ninterface SnapshotCandidateQueryInput {\n readonly table: DatasetTableRef\n readonly exactSnapshotId?: string\n readonly beforeSnapshotId?: string\n /** Inclusive lower bound. */\n readonly fromSnapshotId?: string\n readonly limit: number\n}\n\ninterface VisibleSnapshotRowsInput {\n readonly table: DatasetTableRef\n readonly exactSnapshotId?: string\n readonly beforeSnapshotId?: string\n readonly visibleRowLimit?: number\n}\n\n/** A version reference, with the DuckLake table and snapshot it was resolved through. */\nexport interface DuckLakeTableVersionRef extends DatasetVersionRef {\n readonly table: DatasetTableRef\n readonly snapshot: DatasetSnapshotRow\n}\n\n/** What a commit needs of the version it builds on. */\nexport interface DuckLakeVersionSummary {\n readonly datasetId: string\n readonly versionId: string\n readonly schema: DatasetSchema\n readonly producer?: DatasetProducer\n readonly inputs?: readonly DatasetVersionRef[]\n readonly lineage?: DatasetVersionLineage\n readonly rowCount?: number\n readonly validatedPrimaryKeyColumns?: readonly string[]\n}\n\n/** One snapshot row from the shared catalog scan, before per-dataset filtering. */\ninterface CatalogScanSnapshot {\n readonly snapshotId: string\n readonly createdAt: Date\n readonly changesMade: string\n}\n\nconst SNAPSHOT_ROW_BATCH_SIZE = 128\n// One feed read covers at most this many commits; the next read continues from its cursor.\nconst FEED_PAGE_SIZE = 512\n\n// A read of the latest version, or of the one before a version, usually finds it among the\n// dataset's most recent snapshots. It first reads only a few of them: each carries the commit\n// metadata of its version, whose lineage may be large.\nconst SHORT_READ_BATCH_SIZE = 8\n\n// A change read between two versions of identical rows skips comparing them. Consumers read changes\n// for every version they apply, so few versions usually stand between the two.\nconst UNCHANGED_ROWS_WALK_LIMIT = 32\n\n// The bulk catalog scan shares one descending walk of recent snapshots across\n// all requested datasets, so its cost is bounded by this window rather than by\n// the dataset count. A dataset whose latest version is older than the window\n// reports a null latest version, which is acceptable for a catalog summary; the\n// detail routes still hydrate exact history.\nconst CATALOG_SNAPSHOT_SCAN_LIMIT = 512\n\n/**\n * Reconstructs Sixb DatasetVersion objects from DuckLake snapshots.\n *\n * DuckLake remains the source of truth for version ids, commit times, and\n * historical reads. Sixb commit metadata only hydrates fields DuckLake does\n * not know about, such as producer info and declared inputs.\n *\n * This class intentionally reads DuckLake metadata directly. The provider does\n * not keep a Sixb side table for versions; a Sixb version is a DuckLake\n * snapshot whose `changes_made` names the dataset table: one that changed its\n * rows, or that altered the table with Sixb commit metadata naming the dataset,\n * as a version that changes no rows does (see the write coordinator's\n * `claimTable`).\n *\n * DuckLake names a table in `changes_made` for every change to its rows, inlined\n * or written to files, so version reads never scan the catalog's file tables.\n */\nexport class DuckLakeSnapshotReader {\n constructor(\n private readonly options: DuckLakeStorageOptions,\n private readonly connections: DuckLakeConnectionManager,\n private readonly datasets: DuckLakeDatasetCatalog\n ) {}\n\n async listVersions(datasetId: string, limit?: number): Promise<readonly DatasetVersion[]> {\n this.connections.assertOpen()\n\n return this.connections.withAttachedRuntime(async (runtime) => {\n const tableRef = await resolveDatasetTableRef(this.options, runtime, datasetId)\n if (!tableRef) {\n return []\n }\n\n return this.listVersionsForTableRef(runtime, tableRef, limit)\n })\n }\n\n async getLatestVersion(datasetId: string): Promise<DatasetVersion | null> {\n this.connections.assertOpen()\n\n return this.connections.withAttachedRuntime(async (runtime) => {\n const tableRef = await resolveDatasetTableRef(this.options, runtime, datasetId)\n if (!tableRef) {\n return null\n }\n\n return this.getLatestVersionForTableRef(runtime, tableRef)\n })\n }\n\n async getVersion(datasetId: string, versionId: string): Promise<DatasetVersion | null> {\n const snapshotId = parseVersionId(versionId)\n this.connections.assertOpen()\n\n return this.connections.withAttachedRuntime(async (runtime) => {\n const tableRef = await resolveDatasetTableRef(this.options, runtime, datasetId)\n if (!tableRef) {\n return null\n }\n\n return this.getVersionForTableRef(runtime, tableRef, snapshotId)\n })\n }\n\n /**\n * Whether a version holds exactly the rows of an earlier version of the dataset: every version\n * committed after that one, up to this one, changed no rows.\n *\n * Reads the snapshots that name the dataset's tables between the two, from metadata only. More\n * than `UNCHANGED_ROWS_WALK_LIMIT` of them, or one that is no Sixb version, such as a change\n * made outside Sixb, reads as false: the caller compares the rows instead.\n */\n async holdsRowsOf(\n datasetId: string,\n versionId: string,\n earlierVersionId: string\n ): Promise<boolean> {\n const snapshotId = parseVersionId(versionId)\n const earlierSnapshotId = parseVersionId(earlierVersionId)\n if (snapshotId === earlierSnapshotId) {\n return true\n }\n if (BigInt(snapshotId) < BigInt(earlierSnapshotId)) {\n return false\n }\n\n this.connections.assertOpen()\n\n return this.connections.withAttachedRuntime(async (runtime) => {\n const tableRef = await resolveDatasetTableRef(this.options, runtime, datasetId)\n if (!tableRef) {\n return false\n }\n\n // Newest first: this version, the snapshots between, then the earlier version itself.\n const candidates = await this.querySnapshotCandidates(runtime, {\n table: tableRef,\n beforeSnapshotId: String(BigInt(snapshotId) + 1n),\n fromSnapshotId: earlierSnapshotId,\n limit: UNCHANGED_ROWS_WALK_LIMIT + 1,\n })\n if (\n candidates[0]?.snapshotId !== snapshotId ||\n candidates[candidates.length - 1]?.snapshotId !== earlierSnapshotId\n ) {\n return false\n }\n\n return candidates\n .slice(0, -1)\n .every(\n (candidate) =>\n this.candidateToSnapshotRow(datasetId, tableRef.tableId, candidate)?.rowsChanged ===\n false\n )\n })\n }\n\n /**\n * Bulk catalog-summary read used by the dataset list view.\n *\n * Resolves materialized state and a lightweight latest-version summary for\n * many datasets with a bounded number of metadata queries, never one snapshot\n * scan per dataset and never a count(*) over dataset contents.\n */\n async listDatasetCatalogState(\n datasetIds: readonly string[]\n ): Promise<readonly DatasetCatalogState[]> {\n this.connections.assertOpen()\n\n if (datasetIds.length === 0) {\n return []\n }\n\n return this.connections.withAttachedRuntime((runtime) =>\n this.collectDatasetCatalogState(runtime, datasetIds)\n )\n }\n\n private async collectDatasetCatalogState(\n runtime: DuckDbQueryRuntime,\n datasetIds: readonly string[]\n ): Promise<readonly DatasetCatalogState[]> {\n const uniqueIds = [...new Set(datasetIds)]\n const tablesByDatasetId = await this.resolveDatasetTables(runtime, uniqueIds)\n const latestRowByDatasetId = await this.resolveLatestSnapshotRows(runtime, tablesByDatasetId)\n\n return uniqueIds.map((datasetId) => {\n if (!tablesByDatasetId.has(datasetId)) {\n return { datasetId, materialized: false, latestVersion: null }\n }\n\n const row = latestRowByDatasetId.get(datasetId)\n return {\n datasetId,\n materialized: true,\n latestVersion: row ? this.snapshotRowToSummary(datasetId, row) : null,\n }\n })\n }\n\n /**\n * Change feed over DuckLake's snapshot table, which is an append-only commit log: snapshot ids\n * only increase, and a commit becomes visible only after every lower id has (concurrent commits\n * that pick the same id conflict, and the loser retries with the next one). The cursor is the\n * last snapshot id read. Every query is bounded by a snapshot-id range, so an idle read is one\n * indexed query that returns the cursor's own snapshot, whatever the history length.\n */\n async listLatestVersionsSince(\n input: ListLatestVersionsSinceInput\n ): Promise<LatestVersionsSince | null> {\n this.connections.assertOpen()\n\n return this.connections.withAttachedRuntime(async (runtime) => {\n if (input.cursor === null) {\n return { cursor: await this.queryHeadSnapshotId(runtime), versions: [] }\n }\n if (!/^\\d+$/.test(input.cursor)) {\n return null\n }\n\n const snapshots = await this.querySnapshotsFrom(runtime, input.cursor)\n // The cursor's own snapshot proves the cursor is still a position in this lake's history.\n if (snapshots[0]?.snapshotId !== input.cursor) {\n return null\n }\n const newSnapshots = snapshots.slice(1)\n if (newSnapshots.length === 0) {\n return { cursor: input.cursor, versions: [] }\n }\n\n const tables = await this.resolveFeedTables(runtime, input.datasetIds)\n const latest = await this.collectFeedPage(runtime, tables, newSnapshots)\n return {\n cursor: newSnapshots[newSnapshots.length - 1]?.snapshotId ?? input.cursor,\n versions: [...latest].map(([datasetId, row]) => this.snapshotRowToSummary(datasetId, row)),\n }\n })\n }\n\n private async queryHeadSnapshotId(runtime: DuckDbQueryRuntime): Promise<string> {\n const [row] = await runtime.query(\n buildDuckLakeMetadataQuery(\n this.options,\n (table) => `SELECT max(snapshot_id) AS snapshot_id FROM ${table(\"ducklake_snapshot\")}`\n )\n )\n if (row?.snapshot_id === null || row?.snapshot_id === undefined) {\n throw new LakeStorageError(\"[SixbDuckLake] DuckLake catalog has no snapshots.\")\n }\n return String(getBigIntLike(row, \"snapshot_id\"))\n }\n\n /** The cursor's snapshot and up to one feed page of snapshots after it, oldest first. */\n private async querySnapshotsFrom(\n runtime: DuckDbQueryRuntime,\n cursor: string\n ): Promise<readonly { readonly snapshotId: string; readonly createdAt: Date }[]> {\n const rows = await runtime.query(\n buildDuckLakeMetadataQuery(\n this.options,\n (table) => `\n SELECT snapshot_id, snapshot_time\n FROM ${table(\"ducklake_snapshot\")}\n WHERE snapshot_id >= ${cursor}\n ORDER BY snapshot_id\n LIMIT ${FEED_PAGE_SIZE + 1}\n `\n )\n )\n return rows.map((row) => ({\n snapshotId: String(getBigIntLike(row, \"snapshot_id\")),\n createdAt: getDate(row, \"snapshot_time\"),\n }))\n }\n\n /** Current dataset tables, with the first snapshot each table id existed in. */\n private async resolveFeedTables(\n runtime: DuckDbQueryRuntime,\n datasetIds: readonly string[] | undefined\n ): Promise<readonly FeedTable[]> {\n const requested = datasetIds === undefined ? null : new Set(datasetIds)\n const rows = await runtime.query(`\n SELECT table_id, table_name, begin_snapshot, end_snapshot\n FROM ${duckLakeMetadataTableName(this.options, \"ducklake_table\")}\n `)\n\n const startByTableId = new Map<bigint, bigint>()\n const current: { datasetId: string; tableId: bigint }[] = []\n for (const row of rows) {\n const tableId = getBigIntLike(row, \"table_id\")\n const begin = getBigIntLike(row, \"begin_snapshot\")\n const start = startByTableId.get(tableId)\n if (start === undefined || begin < start) {\n startByTableId.set(tableId, begin)\n }\n if (row.end_snapshot !== null && row.end_snapshot !== undefined) {\n continue\n }\n const datasetId = decodeDatasetTableName(getString(row, \"table_name\"))\n if (datasetId !== null && (requested === null || requested.has(datasetId))) {\n current.push({ datasetId, tableId })\n }\n }\n\n return current.map((table) => ({\n ...table,\n startSnapshotId: startByTableId.get(table.tableId) ?? 0n,\n }))\n }\n\n /** Folds a page of snapshots, oldest first, into each dataset's newest data version. */\n private async collectFeedPage(\n runtime: DuckDbQueryRuntime,\n tables: readonly FeedTable[],\n snapshots: readonly { readonly snapshotId: string; readonly createdAt: Date }[]\n ): Promise<Map<string, DatasetSnapshotRow>> {\n const latest = new Map<string, DatasetSnapshotRow>()\n const first = snapshots[0]?.snapshotId\n const last = snapshots[snapshots.length - 1]?.snapshotId\n if (first === undefined || last === undefined || tables.length === 0) {\n return latest\n }\n\n const changeRows = await runtime.query(\n buildDuckLakeMetadataQuery(\n this.options,\n (table) => `\n SELECT snapshot_id, changes_made, commit_extra_info\n FROM ${table(\"ducklake_snapshot_changes\")}\n WHERE snapshot_id >= ${first} AND snapshot_id <= ${last}\n `\n )\n )\n const changesBySnapshotId = new Map(\n changeRows.map((row) => [String(getBigIntLike(row, \"snapshot_id\")), row])\n )\n const tablesByTableId = new Map(tables.map((table) => [table.tableId.toString(), table]))\n\n for (const snapshot of snapshots) {\n const changes = changesBySnapshotId.get(snapshot.snapshotId)\n if (changes === undefined) {\n continue\n }\n const changesMade = getString(changes, \"changes_made\")\n const metadata = parseCommitMetadata(changes.commit_extra_info)\n\n // Only the tables this snapshot names can have a version in it.\n const touched = new Set<FeedTable>()\n for (const change of changesMade.split(\",\")) {\n const table = tablesByTableId.get(change.split(\":\")[1] ?? \"\")\n if (table) touched.add(table)\n }\n\n for (const table of touched) {\n if (BigInt(snapshot.snapshotId) < table.startSnapshotId) {\n continue\n }\n const row = this.candidateToSnapshotRow(table.datasetId, table.tableId, {\n snapshotId: snapshot.snapshotId,\n createdAt: snapshot.createdAt,\n changesMade,\n ...(metadata !== undefined ? { metadata } : {}),\n })\n if (row && row.mode !== \"schema\") {\n latest.set(table.datasetId, row)\n }\n }\n }\n\n return latest\n }\n\n /**\n * The snapshot of every dataset's latest version, however old, from one shared walk down the\n * whole history: maintenance must never expire one.\n */\n async latestVersionSnapshotIds(runtime: DuckDbQueryRuntime): Promise<readonly string[]> {\n const tables = await runtime.query(`\n SELECT table_name\n FROM ${duckLakeMetadataTableName(this.options, \"ducklake_table\")}\n WHERE end_snapshot IS NULL\n `)\n const datasetIds = tables.flatMap((table) => {\n const datasetId = decodeDatasetTableName(getString(table, \"table_name\"))\n return datasetId === null ? [] : [datasetId]\n })\n\n if (datasetIds.length === 0) {\n return []\n }\n\n const latest = await this.resolveLatestSnapshotRows(\n runtime,\n await this.resolveDatasetTables(runtime, datasetIds),\n Number.POSITIVE_INFINITY\n )\n return [...latest.values()].map((row) => row.snapshotId)\n }\n\n private snapshotRowToSummary(\n datasetId: string,\n row: DatasetSnapshotRow\n ): DatasetLatestVersionSummary {\n return {\n datasetId,\n versionId: toVersionId(row.snapshotId),\n mode: row.mode,\n createdAt: row.createdAt,\n ...(row.metadata?.rowCount !== undefined ? { rowCount: row.metadata.rowCount } : {}),\n }\n }\n\n private async resolveDatasetTables(\n runtime: DuckDbQueryRuntime,\n datasetIds: readonly string[]\n ): Promise<Map<string, DatasetTableRef>> {\n // Encoded table names are a collision-free bijection with dataset ids, so a\n // single `ducklake_table` read maps every requested id to its current tables.\n const datasetIdByTableName = new Map<string, string>()\n const datasetIdBySequenceTableName = new Map<string, string>()\n for (const datasetId of datasetIds) {\n datasetIdByTableName.set(encodeDatasetTableName(datasetId), datasetId)\n datasetIdBySequenceTableName.set(encodeDatasetSequenceTableName(datasetId), datasetId)\n }\n\n const ducklakeTable = duckLakeMetadataTableName(this.options, \"ducklake_table\")\n const tableNameList = [...datasetIdByTableName.keys(), ...datasetIdBySequenceTableName.keys()]\n .map((name) => quoteSqlString(name))\n .join(\", \")\n const rows = await runtime.query(`\n SELECT table_id, table_name\n FROM ${ducklakeTable}\n WHERE table_name IN (${tableNameList})\n AND end_snapshot IS NULL\n `)\n\n const tablesByDatasetId = new Map<string, DatasetTableRef>()\n for (const row of rows) {\n const tableName = getString(row, \"table_name\")\n const datasetId = datasetIdByTableName.get(tableName)\n if (datasetId !== undefined) {\n tablesByDatasetId.set(datasetId, {\n datasetId,\n tableName,\n tableId: getBigIntLike(row, \"table_id\"),\n })\n }\n }\n\n for (const row of rows) {\n const datasetId = datasetIdBySequenceTableName.get(getString(row, \"table_name\"))\n const table = datasetId === undefined ? undefined : tablesByDatasetId.get(datasetId)\n if (datasetId !== undefined && table !== undefined) {\n tablesByDatasetId.set(datasetId, {\n ...table,\n sequenceTableId: getBigIntLike(row, \"table_id\"),\n })\n }\n }\n\n return tablesByDatasetId\n }\n\n /**\n * Resolve each dataset's latest snapshot row with one shared descending walk.\n *\n * The walk reuses {@link candidateToSnapshotRow} so Sixb visibility, mode\n * derivation, and the loud conflict rule match exact version hydration. Cost\n * is bounded by the snapshot window, not by the number of datasets.\n */\n private async resolveLatestSnapshotRows(\n runtime: DuckDbQueryRuntime,\n tablesByDatasetId: ReadonlyMap<string, DatasetTableRef>,\n scanLimit = CATALOG_SNAPSHOT_SCAN_LIMIT\n ): Promise<Map<string, DatasetSnapshotRow>> {\n const result = new Map<string, DatasetSnapshotRow>()\n if (tablesByDatasetId.size === 0) {\n return result\n }\n\n const unresolved = new Map<string, DatasetTableRef>(tablesByDatasetId)\n\n let beforeSnapshotId: string | undefined\n let scanned = 0\n while (unresolved.size > 0 && scanned < scanLimit) {\n const candidates = await this.queryCatalogSnapshotBatch(\n runtime,\n beforeSnapshotId,\n SNAPSHOT_ROW_BATCH_SIZE\n )\n if (candidates.length === 0) {\n break\n }\n\n const tables = [...unresolved.values()]\n const metadata = await this.readCommitMetadata(\n runtime,\n candidates\n .filter((candidate) =>\n tables.some((table) =>\n changesTouchTables(candidate.changesMade, datasetTableIds(table))\n )\n )\n .map((candidate) => candidate.snapshotId)\n )\n\n for (const candidate of candidates) {\n scanned += 1\n const candidateMetadata = metadata.get(candidate.snapshotId)\n for (const [datasetId, table] of [...unresolved]) {\n const row = this.candidateToSnapshotRow(datasetId, table.tableId, {\n snapshotId: candidate.snapshotId,\n createdAt: candidate.createdAt,\n changesMade: candidate.changesMade,\n ...(candidateMetadata !== undefined ? { metadata: candidateMetadata } : {}),\n })\n if (row) {\n result.set(datasetId, row)\n unresolved.delete(datasetId)\n }\n }\n\n if (unresolved.size === 0) {\n break\n }\n }\n\n if (candidates.length < SNAPSHOT_ROW_BATCH_SIZE) {\n break\n }\n beforeSnapshotId = candidates[candidates.length - 1]?.snapshotId\n }\n\n return result\n }\n\n private async queryCatalogSnapshotBatch(\n runtime: DuckDbQueryRuntime,\n beforeSnapshotId: string | undefined,\n limit: number\n ): Promise<readonly CatalogScanSnapshot[]> {\n const ducklakeSnapshot = duckLakeMetadataTableName(this.options, \"ducklake_snapshot\")\n const ducklakeSnapshotChanges = duckLakeMetadataTableName(\n this.options,\n \"ducklake_snapshot_changes\"\n )\n\n let whereSql = \"\"\n if (beforeSnapshotId !== undefined) {\n assertDuckLakeSnapshotId(beforeSnapshotId)\n whereSql = `WHERE snapshot.snapshot_id < ${beforeSnapshotId}`\n }\n\n const rows = await runtime.query(`\n SELECT\n snapshot.snapshot_id,\n snapshot.snapshot_time,\n changes.changes_made\n FROM ${ducklakeSnapshot} snapshot\n JOIN ${ducklakeSnapshotChanges} changes ON changes.snapshot_id = snapshot.snapshot_id\n ${whereSql}\n ORDER BY snapshot.snapshot_id DESC\n LIMIT ${Math.max(0, Math.trunc(limit))}\n `)\n\n return rows.map((row) => ({\n snapshotId: String(getBigIntLike(row, \"snapshot_id\")),\n createdAt: getDate(row, \"snapshot_time\"),\n changesMade: getString(row, \"changes_made\"),\n }))\n }\n\n private assertNoMetadataConflict(\n snapshotId: string,\n datasetId: string,\n metadata: SixbCommitMetadata | undefined\n ): void {\n if (metadata !== undefined && metadata.datasetId !== datasetId) {\n throw new LakeStorageError(\n `[SixbDuckLake] DuckLake snapshot '${snapshotId}' changed dataset '${datasetId}' but Sixb commit metadata references dataset '${metadata.datasetId}'.`\n )\n }\n }\n\n async getLatestVersionForDefinition(\n runtime: DuckDbQueryRuntime,\n dataset: DatasetDefinition\n ): Promise<DatasetVersion | null> {\n const tableRef = await resolveDatasetTableRef(this.options, runtime, dataset.id)\n return tableRef ? this.getLatestVersionForTableRef(runtime, tableRef) : null\n }\n\n async getLatestVersionRefForDefinition(\n runtime: DuckDbQueryRuntime,\n dataset: DatasetDefinition\n ): Promise<DuckLakeTableVersionRef | null> {\n const tableRef = await resolveDatasetTableRef(this.options, runtime, dataset.id)\n if (!tableRef) {\n return null\n }\n\n const row = await this.getLatestSnapshotRowForTableRef(runtime, tableRef)\n return row ? tableVersionRef(tableRef, row) : null\n }\n\n async getLatestVersionSummaryForDefinition(\n runtime: DuckDbQueryRuntime,\n dataset: DatasetDefinition\n ): Promise<DuckLakeVersionSummary | null> {\n const tableRef = await resolveDatasetTableRef(this.options, runtime, dataset.id)\n return tableRef ? this.getLatestVersionSummaryForTableRef(runtime, tableRef) : null\n }\n\n /**\n * The latest version a commit builds on, with the lake's snapshot it was read at. Its first\n * read fixes the snapshot of a transaction it runs in (see `beginTransactionOnLatestVersion`).\n */\n async getLatestVersionSummaryAtCurrentSnapshot(\n runtime: DuckDbQueryRuntime,\n dataset: DatasetDefinition\n ): Promise<LatestVersionAtSnapshot<DuckLakeVersionSummary>> {\n const { snapshotId, table } = await resolveDatasetTableRefAtCurrentSnapshot(\n this.options,\n runtime,\n dataset.id\n )\n\n return {\n snapshotId,\n latestVersion: table ? await this.getLatestVersionSummaryForTableRef(runtime, table) : null,\n }\n }\n\n private async getLatestVersionSummaryForTableRef(\n runtime: DuckDbQueryRuntime,\n tableRef: DatasetTableRef\n ): Promise<DuckLakeVersionSummary | null> {\n const row = await this.getLatestSnapshotRowForTableRef(runtime, tableRef)\n if (!row) {\n return null\n }\n\n const [schema] = await this.datasets.getDatasetSchemasAtSnapshots(runtime, [\n { table: tableRef, snapshotId: row.snapshotId },\n ])\n\n return {\n datasetId: tableRef.datasetId,\n versionId: toVersionId(row.snapshotId),\n schema,\n producer: row.metadata?.producer,\n inputs: row.metadata?.inputs,\n ...storedLineage(tableRef.datasetId, row),\n ...(row.metadata?.rowCount !== undefined ? { rowCount: row.metadata.rowCount } : {}),\n ...(row.metadata?.validatedPrimaryKeyColumns !== undefined\n ? { validatedPrimaryKeyColumns: row.metadata.validatedPrimaryKeyColumns }\n : {}),\n }\n }\n\n async getVersionForSnapshot(\n runtime: DuckDbQueryRuntime,\n dataset: DatasetDefinition,\n snapshotId: string\n ): Promise<DatasetVersion | null> {\n assertDuckLakeSnapshotId(snapshotId)\n\n const tableRef = await resolveDatasetTableRef(this.options, runtime, dataset.id)\n return tableRef ? this.getVersionForTableRef(runtime, tableRef, snapshotId) : null\n }\n\n async getVersionForTableRef(\n runtime: DuckDbQueryRuntime,\n tableRef: DatasetTableRef,\n snapshotId: string\n ): Promise<DatasetVersion | null> {\n const match = await this.getSnapshotRowForTableRef(runtime, tableRef, snapshotId, {\n includeParent: true,\n })\n return match ? (await this.snapshotsToVersions(runtime, tableRef, [match]))[0] : null\n }\n\n async getVersionRefForSnapshot(\n runtime: DuckDbQueryRuntime,\n dataset: DatasetDefinition,\n snapshotId: string\n ): Promise<DuckLakeTableVersionRef | null> {\n assertDuckLakeSnapshotId(snapshotId)\n\n const tableRef = await resolveDatasetTableRef(this.options, runtime, dataset.id)\n if (!tableRef) {\n return null\n }\n\n const row = await this.getSnapshotRowForTableRef(runtime, tableRef, snapshotId, {\n includeParent: false,\n })\n return row ? tableVersionRef(tableRef, row) : null\n }\n\n /**\n * The versions resolved refs point to, with their schemas from one catalog read. Refs resolve\n * without their parent, so these versions carry no `parentVersionId`.\n */\n async getVersionsForRefs(\n runtime: DuckDbQueryRuntime,\n refs: readonly DuckLakeTableVersionRef[]\n ): Promise<DatasetVersion[]> {\n const schemas = await this.datasets.getDatasetSchemasAtSnapshots(\n runtime,\n refs.map((ref) => ({ table: ref.table, snapshotId: ref.snapshot.snapshotId }))\n )\n\n return refs.map((ref, index) => snapshotToVersion(ref.table, ref.snapshot, schemas[index]))\n }\n\n async listVersionsForDefinition(\n runtime: DuckDbQueryRuntime,\n dataset: DatasetDefinition,\n limit?: number\n ): Promise<readonly DatasetVersion[]> {\n const tableRef = await resolveDatasetTableRef(this.options, runtime, dataset.id)\n return tableRef ? this.listVersionsForTableRef(runtime, tableRef, limit) : []\n }\n\n private async listVersionsForTableRef(\n runtime: DuckDbQueryRuntime,\n tableRef: DatasetTableRef,\n limit?: number\n ): Promise<readonly DatasetVersion[]> {\n const limitedRows = await this.getSnapshotRowsForTableRef(runtime, tableRef, limit)\n return this.snapshotsToVersions(runtime, tableRef, limitedRows)\n }\n\n async getLatestVersionForTableRef(\n runtime: DuckDbQueryRuntime,\n tableRef: DatasetTableRef\n ): Promise<DatasetVersion | null> {\n const [latest] = await this.listVersionsForTableRef(runtime, tableRef, 1)\n return latest ?? null\n }\n\n private async getLatestSnapshotRowForTableRef(\n runtime: DuckDbQueryRuntime,\n tableRef: DatasetTableRef\n ): Promise<DatasetSnapshotRow | null> {\n const [row] = await this.collectVisibleSnapshotRows(runtime, {\n table: tableRef,\n visibleRowLimit: 1,\n })\n return row ?? null\n }\n\n private async getSnapshotRowForTableRef(\n runtime: DuckDbQueryRuntime,\n tableRef: DatasetTableRef,\n snapshotId: string,\n options: { readonly includeParent: boolean }\n ): Promise<DatasetSnapshotRow | null> {\n assertDuckLakeSnapshotId(snapshotId)\n\n const [row] = await this.collectVisibleSnapshotRows(runtime, {\n table: tableRef,\n exactSnapshotId: snapshotId,\n visibleRowLimit: 1,\n })\n if (!row) {\n return null\n }\n\n if (\n !options.includeParent ||\n (row.mode !== \"append\" && row.mode !== \"merge\" && row.mode !== \"schema\")\n ) {\n return row\n }\n\n const [parent] = await this.collectVisibleSnapshotRows(runtime, {\n table: tableRef,\n beforeSnapshotId: snapshotId,\n visibleRowLimit: 1,\n })\n\n return parent ? { ...row, parentSnapshotId: parent.snapshotId } : row\n }\n\n private async getSnapshotRowsForTableRef(\n runtime: DuckDbQueryRuntime,\n tableRef: DatasetTableRef,\n limit?: number\n ): Promise<readonly DatasetSnapshotRow[]> {\n const visibleLimit = limit === undefined ? undefined : Math.max(0, limit)\n if (visibleLimit === 0) {\n return []\n }\n\n const rows = await this.collectVisibleSnapshotRows(runtime, {\n table: tableRef,\n visibleRowLimit: visibleLimit === undefined ? undefined : visibleLimit + 1,\n })\n const rowsWithParents = this.withParentSnapshotIds(rows)\n return visibleLimit === undefined ? rowsWithParents : rowsWithParents.slice(0, visibleLimit)\n }\n\n private async collectVisibleSnapshotRows(\n runtime: DuckDbQueryRuntime,\n input: VisibleSnapshotRowsInput\n ): Promise<readonly DatasetSnapshotRow[]> {\n if (input.visibleRowLimit !== undefined && input.visibleRowLimit <= 0) {\n return []\n }\n\n const snapshots: DatasetSnapshotRow[] = []\n let beforeSnapshotId = input.beforeSnapshotId\n let shortRead =\n input.exactSnapshotId !== undefined ||\n (input.visibleRowLimit !== undefined && input.visibleRowLimit <= 2)\n\n while (input.visibleRowLimit === undefined || snapshots.length < input.visibleRowLimit) {\n const batchSize = shortRead ? SHORT_READ_BATCH_SIZE : SNAPSHOT_ROW_BATCH_SIZE\n const candidates = await this.querySnapshotCandidates(runtime, {\n table: input.table,\n exactSnapshotId: input.exactSnapshotId,\n beforeSnapshotId,\n limit: input.exactSnapshotId === undefined ? batchSize : 1,\n })\n shortRead = false\n if (candidates.length === 0) {\n break\n }\n\n for (const candidate of candidates) {\n const snapshot = this.candidateToSnapshotRow(\n input.table.datasetId,\n input.table.tableId,\n candidate\n )\n if (snapshot) {\n snapshots.push(snapshot)\n }\n\n if (input.visibleRowLimit !== undefined && snapshots.length >= input.visibleRowLimit) {\n break\n }\n }\n\n if (input.exactSnapshotId !== undefined || candidates.length < batchSize) {\n break\n }\n\n beforeSnapshotId = candidates[candidates.length - 1]?.snapshotId\n }\n\n return snapshots\n }\n\n /**\n * Hydrates, newest first, the snapshots whose changes name one of the dataset's tables: every\n * snapshot that may hold one of its versions. The text match is a superset;\n * candidateToSnapshotRow decides visibility.\n *\n * The query walks the catalog's snapshot ids downwards, from `beforeSnapshotId` or the head,\n * and stops at the limit or at the table's creation. A lookup therefore reads the snapshots\n * between where it starts and the versions it returns: a few for an active dataset, at most the\n * table's lifetime for one written long ago. It never reads the file tables, whose replaced\n * files stay until cleanup.\n */\n private async querySnapshotCandidates(\n runtime: DuckDbQueryRuntime,\n input: SnapshotCandidateQueryInput\n ): Promise<readonly DatasetSnapshotCandidateRow[]> {\n const limit = Math.max(0, Math.trunc(input.limit))\n if (limit === 0) {\n return []\n }\n if (input.exactSnapshotId !== undefined) {\n assertDuckLakeSnapshotId(input.exactSnapshotId)\n }\n if (input.beforeSnapshotId !== undefined) {\n assertDuckLakeSnapshotId(input.beforeSnapshotId)\n }\n if (input.fromSnapshotId !== undefined) {\n assertDuckLakeSnapshotId(input.fromSnapshotId)\n }\n\n const rows = await runtime.query(\n buildDuckLakeMetadataQuery(this.options, (table) => {\n // A dataset cannot have a version before its table exists. Use the earliest table record:\n // a rename may create a newer record with the same table id and must not hide older\n // versions.\n const bounds = [\n `changes.snapshot_id >= (\n SELECT min(begin_snapshot)\n FROM ${table(\"ducklake_table\")}\n WHERE table_id = ${input.table.tableId}\n )`,\n ]\n if (input.exactSnapshotId !== undefined) {\n bounds.push(`changes.snapshot_id = ${input.exactSnapshotId}`)\n }\n if (input.beforeSnapshotId !== undefined) {\n bounds.push(`changes.snapshot_id < ${input.beforeSnapshotId}`)\n }\n if (input.fromSnapshotId !== undefined) {\n bounds.push(`changes.snapshot_id >= ${input.fromSnapshotId}`)\n }\n\n const namesDatasetTable = datasetTableIds(input.table)\n .map(\n (tableId) =>\n `strpos(',' || changes.changes_made || ',', ${quoteSqlString(`:${tableId},`)}) > 0`\n )\n .join(\" OR \")\n\n // Bounds and order follow the snapshot-id primary key, so PostgreSQL reads it backwards\n // and stops at the limit; the text match only filters the rows it passes.\n return `\n SELECT\n changes.snapshot_id,\n snapshot.snapshot_time,\n changes.changes_made,\n changes.commit_extra_info\n FROM ${table(\"ducklake_snapshot_changes\")} changes\n JOIN ${table(\"ducklake_snapshot\")} snapshot\n ON snapshot.snapshot_id = changes.snapshot_id\n WHERE ${bounds.join(\" AND \")}\n AND (${namesDatasetTable})\n ORDER BY changes.snapshot_id DESC\n LIMIT ${limit}\n `\n })\n )\n\n return rows.map((row) => {\n const metadata = parseCommitMetadata(row.commit_extra_info)\n\n return {\n snapshotId: String(getBigIntLike(row, \"snapshot_id\")),\n createdAt: getDate(row, \"snapshot_time\"),\n changesMade: getString(row, \"changes_made\"),\n ...(metadata !== undefined ? { metadata } : {}),\n }\n })\n }\n\n /**\n * Sixb commit metadata of the snapshots that changed a scanned dataset. Each one carries the\n * lineage of its version, which can be large: scans read it only for the snapshots they keep,\n * never for the other datasets' snapshots they page past.\n */\n private async readCommitMetadata(\n runtime: DuckDbQueryRuntime,\n snapshotIds: readonly string[]\n ): Promise<Map<string, SixbCommitMetadata>> {\n const metadata = new Map<string, SixbCommitMetadata>()\n if (snapshotIds.length === 0) {\n return metadata\n }\n\n for (const snapshotId of snapshotIds) {\n assertDuckLakeSnapshotId(snapshotId)\n }\n\n const ducklakeSnapshotChanges = duckLakeMetadataTableName(\n this.options,\n \"ducklake_snapshot_changes\"\n )\n const rows = await runtime.query(`\n SELECT snapshot_id, commit_extra_info\n FROM ${ducklakeSnapshotChanges}\n WHERE snapshot_id IN (${snapshotIds.join(\", \")})\n `)\n\n for (const row of rows) {\n const parsed = parseCommitMetadata(getOptionalString(row, \"commit_extra_info\"))\n if (parsed !== undefined) {\n metadata.set(String(getBigIntLike(row, \"snapshot_id\")), parsed)\n }\n }\n\n return metadata\n }\n\n private candidateToSnapshotRow(\n datasetId: string,\n tableId: bigint,\n candidate: DatasetSnapshotCandidateRow\n ): DatasetSnapshotRow | null {\n const { hasDataChange, hasDeleteChange } = parseTableDataChange(candidate.changesMade, tableId)\n\n // Metadata-only snapshots are common for table comments, schema changes,\n // and other catalog operations. Treat them as dataset versions only when\n // their Sixb metadata names this dataset.\n if (!hasDataChange) {\n const metadata = candidate.metadata\n if (!metadata || metadata.datasetId !== datasetId) {\n return null\n }\n\n return {\n snapshotId: candidate.snapshotId,\n tableId,\n createdAt: candidate.createdAt,\n mode: metadata.mode ?? \"schema\",\n rowsChanged: metadata.rowsChanged ?? true,\n lineageChanged: metadata.lineageChanged ?? true,\n metadata,\n }\n }\n\n // A real data-change snapshot belongs to this dataset because DuckLake's\n // change metadata touched this table id. If Sixb metadata is present but\n // points elsewhere, fail loudly rather than hydrating the wrong lineage.\n this.assertNoMetadataConflict(candidate.snapshotId, datasetId, candidate.metadata)\n\n // DuckLake recorded a change to the table's rows, whatever the metadata says.\n return {\n snapshotId: candidate.snapshotId,\n tableId,\n createdAt: candidate.createdAt,\n mode: candidate.metadata?.mode ?? (hasDeleteChange ? \"snapshot\" : \"append\"),\n rowsChanged: true,\n lineageChanged: candidate.metadata?.lineageChanged ?? true,\n ...(candidate.metadata !== undefined ? { metadata: candidate.metadata } : {}),\n }\n }\n\n /** One catalog read for the schemas of every listed version, not one per version. */\n private async snapshotsToVersions(\n runtime: DuckDbQueryRuntime,\n tableRef: DatasetTableRef,\n rows: readonly DatasetSnapshotRow[]\n ): Promise<DatasetVersion[]> {\n const schemas = await this.datasets.getDatasetSchemasAtSnapshots(\n runtime,\n rows.map((row) => ({ table: tableRef, snapshotId: row.snapshotId }))\n )\n return rows.map((row, index) => snapshotToVersion(tableRef, row, schemas[index]))\n }\n\n private withParentSnapshotIds(\n snapshots: readonly DatasetSnapshotRow[]\n ): readonly DatasetSnapshotRow[] {\n return snapshots.map((snapshot, index) => {\n // Parent ids track versions that reuse the previous dataset state.\n // Snapshot versions replace the rows, so time travel stands on the snapshot id.\n const parentSnapshotId =\n snapshot.mode === \"append\" || snapshot.mode === \"merge\" || snapshot.mode === \"schema\"\n ? snapshots[index + 1]?.snapshotId\n : undefined\n return parentSnapshotId === undefined ? snapshot : { ...snapshot, parentSnapshotId }\n })\n }\n}\n\nfunction snapshotToVersion(\n tableRef: DatasetTableRef,\n row: DatasetSnapshotRow,\n schema: DatasetVersion[\"schema\"]\n): DatasetVersion {\n // DuckLake gives us version id, timestamp, and time travel. Sixb metadata\n // fills in caller intent such as append vs snapshot and producer lineage.\n // Version listing is a metadata path, so it only carries row counts already\n // stored in Sixb commit metadata and never counts historical table contents.\n\n return {\n datasetId: tableRef.datasetId,\n versionId: toVersionId(row.snapshotId),\n parentVersionId:\n row.parentSnapshotId === undefined ? undefined : toVersionId(row.parentSnapshotId),\n mode: row.mode,\n createdAt: row.createdAt,\n schema,\n producer: row.metadata?.producer,\n inputs: row.metadata?.inputs,\n ...storedLineage(tableRef.datasetId, row),\n rowsChanged: row.rowsChanged,\n lineageChanged: row.lineageChanged,\n ...(row.metadata?.rowCount !== undefined ? { rowCount: row.metadata.rowCount } : {}),\n }\n}\n\n/**\n * A data snapshot without Sixb metadata was written outside Sixb, by any DuckLake client. It may\n * keep rows of its parent whatever change it made, and nothing says where its own rows come from:\n * its lineage is unknown.\n */\nfunction storedLineage(\n datasetId: string,\n row: DatasetSnapshotRow\n): Pick<DatasetVersion, \"lineage\"> {\n const metadata = row.metadata\n if (metadata === undefined) {\n return {\n lineage: {\n unknown: `version '${toVersionId(row.snapshotId)}' of '${datasetId}' was written outside Sixb`,\n },\n }\n }\n\n return metadata.lineage === undefined\n ? {}\n : { lineage: decodeLineage(metadata.datasetId, metadata.lineage) }\n}\n\nfunction tableVersionRef(\n table: DatasetTableRef,\n snapshot: DatasetSnapshotRow\n): DuckLakeTableVersionRef {\n return {\n datasetId: table.datasetId,\n versionId: toVersionId(snapshot.snapshotId),\n table,\n snapshot,\n }\n}\n\nfunction assertDuckLakeSnapshotId(snapshotId: string): void {\n if (!/^\\d+$/.test(snapshotId)) {\n throw new LakeStorageError(`[SixbDuckLake] Invalid DuckLake snapshot id '${snapshotId}'.`)\n }\n}\n",
28
28
  "import { randomUUID } from \"node:crypto\"\nimport type { DatasetColumnDefinition, DatasetDefinition, DatasetRow } from \"@sixb/core\"\nimport {\n type AnalyzeSqlTransformInput,\n type AnalyzeSqlTransformSource,\n type DatasetColumnLineage,\n type DatasetColumnRef,\n type DatasetProducer,\n type DatasetVersion,\n type DatasetVersionLineage,\n type DatasetVersionRef,\n type DatasetWriteCommitResult,\n type DatasetWriteMode,\n type ExecuteSqlTransformInput,\n type LakeSqlExecutor,\n LakeStorageError,\n type PreviewSqlTransformInput,\n resolveStepLineage,\n type SqlTransformAnalysis,\n type SqlTransformColumnRef,\n type SqlTransformLineage,\n} from \"@sixb/core/lake-storage\"\nimport type { DuckLakeStorageOptions } from \"../types\"\nimport {\n type ApplyDatasetRowsResult,\n applyDatasetRowsFromRelation,\n assertDatasetWriteMode,\n} from \"./dataset-row-commit\"\nimport { findDatasetColumnTypeForDuckDbSql } from \"./duckdb-column-types\"\nimport { getString } from \"./duckdb-row\"\nimport type { DuckDbQueryRuntime } from \"./duckdb-runtime\"\nimport type { DuckLakeConnectionManager } from \"./ducklake-connection-manager\"\nimport type { DuckLakeDatasetCatalog } from \"./ducklake-dataset-catalog\"\nimport type { DuckLakeSnapshotReader, DuckLakeTableVersionRef } from \"./ducklake-snapshot-reader\"\nimport type { DuckLakeWriteCoordinator } from \"./ducklake-write-coordinator\"\nimport { datasetColumnTypeToDuckDbSql } from \"./schema\"\nimport { quoteIdentifier } from \"./sql\"\nimport { analyzeSqlTransformLineage, type SqlLineageAnalysis } from \"./sql-lineage/analysis\"\nimport {\n createDuckLakeSqlTransformTemplate,\n type DuckLakeSqlTransformSourceRelation,\n type DuckLakeSqlTransformTemplate,\n pickSourceColumns,\n renderDuckLakeSourceRelations,\n} from \"./sql-transform-relations\"\nimport { parseVersionId } from \"./versions\"\n\nconst DEFAULT_PREVIEW_LIMIT = 100\nconst MAX_PREVIEW_LIMIT = 1_000\n\ninterface ResolvedDuckLakeSqlTransformSources {\n readonly relations: Readonly<Record<string, DuckLakeSqlTransformSourceRelation>>\n readonly tables: Readonly<Record<string, ResolvedDuckLakeSourceTable>>\n readonly inputs: readonly DatasetVersionRef[]\n}\n\n/** A source's stored definition, and the version it resolved to. */\ninterface ResolvedDuckLakeSourceTable {\n readonly definition: DatasetDefinition\n readonly version: DuckLakeTableVersionRef\n}\n\ninterface ApplySqlTransformInput {\n readonly runtime: DuckDbQueryRuntime\n readonly target: DatasetDefinition\n readonly mode: DatasetWriteMode\n readonly sql: string\n readonly checkedCasts: readonly SqlTransformCheckedCast[]\n readonly previousRowCount?: number\n}\n\ninterface SqlTransformResultColumn {\n readonly name: string\n readonly typeSql: string\n}\n\ninterface SqlTransformCheckedCast {\n readonly columnName: string\n readonly targetTypeSql: string\n}\n\n/**\n * DuckDB-backed SQL transform executor for DuckLakeStorage.\n */\nexport class DuckLakeSqlExecutor implements LakeSqlExecutor<\"duckdb\"> {\n readonly dialect = \"duckdb\" as const\n readonly capabilities = {\n preview: true,\n supportsAppend: true,\n supportsSnapshot: true,\n }\n\n constructor(\n private readonly options: DuckLakeStorageOptions,\n private readonly connections: DuckLakeConnectionManager,\n private readonly datasets: DuckLakeDatasetCatalog,\n private readonly snapshots: DuckLakeSnapshotReader,\n private readonly writes: DuckLakeWriteCoordinator\n ) {}\n\n async *preview(input: PreviewSqlTransformInput<\"duckdb\">): AsyncIterable<DatasetRow> {\n this.connections.assertOpen()\n\n const template = createDuckLakeSqlTransformTemplate(Object.keys(input.sources), input.sql)\n\n const rows = await this.connections.withAttachedRuntime(async (runtime) => {\n const sources = await this.resolveSources(runtime, input.sources)\n const sql = template.render(renderDuckLakeSourceRelations(this.options, sources.relations))\n return runtime.query(buildPreviewSql(sql, previewLimit(input.limit)))\n })\n\n for (const row of rows) {\n yield normalizePreviewRow(row)\n }\n }\n\n async execute(input: ExecuteSqlTransformInput<\"duckdb\">): Promise<DatasetWriteCommitResult> {\n this.connections.assertOpen()\n assertDatasetWriteMode(input.mode, \"SQL transform\")\n\n const template = createDuckLakeSqlTransformTemplate(Object.keys(input.sources), input.sql)\n\n return this.writes.withCommitRuntime(async (runtime) => {\n const target = await this.resolveTargetDataset(runtime, input.target)\n const sources = await this.resolveSources(runtime, input.sources)\n const sql = template.render(renderDuckLakeSourceRelations(this.options, sources.relations))\n\n const sourceVersions = await this.readSourceVersions(runtime, sources).catch(\n (error: unknown) => skipLineage(target, error)\n )\n\n // The analysis binds in its own DuckDB instance while the lake checks the result schema.\n const [checkedCasts, stepLineage] = await Promise.all([\n this.assertResultSchemaMatchesTarget(runtime, target, sql),\n sourceVersions === undefined\n ? undefined\n : analyzeExecutedLineage(\n template,\n pinnedSources(sources, sourceVersions),\n sources.relations,\n target\n ),\n ])\n\n return this.writes.commitDatasetVersionOnExclusiveRuntime(runtime, {\n dataset: target,\n mode: input.mode,\n expectedLatestVersionId: input.expectedLatestVersionId,\n commitMessage: input.commitMessage ?? `execute SQL transform for dataset ${target.id}`,\n producer: input.producer,\n inputs: sources.inputs,\n lineage:\n stepLineage === undefined || sourceVersions === undefined\n ? unanalyzedLineage(target, input.producer)\n : resolveStepLineage(stepLineage, [...sourceVersions.values()]),\n applyChanges: (runtime, context) =>\n this.applySqlTransform({\n runtime,\n target,\n mode: input.mode,\n sql,\n checkedCasts,\n previousRowCount: context.previousRowCount,\n }),\n })\n })\n }\n\n /**\n * Column lineage bound against the definitions passed in, without reading the lake: it works\n * before any source version exists. Their columns are bound in the order given, which can differ\n * from the lake's stored order; `execute` binds each source's stored version schema instead.\n */\n async analyze(input: AnalyzeSqlTransformInput<\"duckdb\">): Promise<SqlTransformAnalysis> {\n for (const source of Object.values(input.sources)) {\n this.datasets.assertSchema(source.dataset)\n }\n\n const analysis = await analyzeSqlTransformLineage({\n sources: input.sources,\n template: createDuckLakeSqlTransformTemplate(Object.keys(input.sources), input.sql),\n })\n return analysis.supported\n ? { supported: true, lineage: analysis.lineage }\n : { supported: false, reason: analysis.reason }\n }\n\n private async resolveSources(\n runtime: DuckDbQueryRuntime,\n sources: PreviewSqlTransformInput<\"duckdb\">[\"sources\"]\n ): Promise<ResolvedDuckLakeSqlTransformSources> {\n const relations: Record<string, DuckLakeSqlTransformSourceRelation> = Object.create(null)\n const tables: Record<string, ResolvedDuckLakeSourceTable> = Object.create(null)\n const inputs: DatasetVersionRef[] = []\n\n for (const [sourceName, source] of Object.entries(sources)) {\n const definition = await this.resolveSourceDataset(runtime, source.dataset)\n\n // Rejects a pick of columns the stored definition does not have before any SQL renders it.\n pickSourceColumns(sourceName, definition, source.columns)\n\n const versionRef = await this.resolveSourceVersion(runtime, definition, source.versionId)\n\n relations[sourceName] = {\n datasetId: definition.id,\n versionId: versionRef.versionId,\n ...(source.columns === undefined ? {} : { columns: source.columns }),\n }\n tables[sourceName] = { definition, version: versionRef }\n inputs.push({\n datasetId: definition.id,\n versionId: versionRef.versionId,\n })\n }\n\n return {\n relations: Object.freeze(relations),\n tables: Object.freeze(tables),\n inputs: Object.freeze(inputs),\n }\n }\n\n private async resolveSourceDataset(\n runtime: DuckDbQueryRuntime,\n dataset: DatasetDefinition\n ): Promise<DatasetDefinition> {\n const definition = await this.datasets.getDatasetOnRuntime(runtime, dataset.id)\n if (!definition) {\n throw new LakeStorageError(\n `[SixbDuckLake] Unknown SQL transform source dataset '${dataset.id}'.`\n )\n }\n\n return definition\n }\n\n private async resolveTargetDataset(\n runtime: DuckDbQueryRuntime,\n dataset: DatasetDefinition\n ): Promise<DatasetDefinition> {\n const definition = await this.datasets.getDatasetOnRuntime(runtime, dataset.id)\n if (!definition) {\n throw new LakeStorageError(\n `[SixbDuckLake] Unknown SQL transform target dataset '${dataset.id}'.`\n )\n }\n\n this.datasets.assertSchema(definition)\n return definition\n }\n\n /** The source versions read, by source name, with their schemas from one catalog read. */\n private async readSourceVersions(\n runtime: DuckDbQueryRuntime,\n sources: ResolvedDuckLakeSqlTransformSources\n ): Promise<ReadonlyMap<string, DatasetVersion>> {\n const names = Object.keys(sources.tables)\n const versions = await this.snapshots.getVersionsForRefs(\n runtime,\n names.map((sourceName) => sources.tables[sourceName].version)\n )\n\n return new Map(names.map((sourceName, index) => [sourceName, versions[index]]))\n }\n\n private async resolveSourceVersion(\n runtime: DuckDbQueryRuntime,\n dataset: DatasetDefinition,\n versionId?: string\n ): Promise<DuckLakeTableVersionRef> {\n if (versionId !== undefined) {\n const snapshotId = parseVersionId(versionId)\n const versionRef = await this.snapshots.getVersionRefForSnapshot(runtime, dataset, snapshotId)\n if (versionRef) {\n return versionRef\n }\n\n throwNoCommittedSourceVersion(dataset.id)\n }\n\n const latestVersionRef = await this.snapshots.getLatestVersionRefForDefinition(runtime, dataset)\n if (latestVersionRef) {\n return latestVersionRef\n }\n\n throwNoCommittedSourceVersion(dataset.id)\n }\n\n private async assertResultSchemaMatchesTarget(\n runtime: DuckDbQueryRuntime,\n target: DatasetDefinition,\n sql: string\n ): Promise<readonly SqlTransformCheckedCast[]> {\n const rows = await runtime.query(\n `DESCRIBE SELECT * FROM (${sql}) AS sixb_sql_transform_result_schema`\n )\n const actualColumns = rows.map((row) => resultColumnFromDescribeRow(row))\n const expectedColumns = target.schema.columns\n const checkedCasts: SqlTransformCheckedCast[] = []\n\n if (actualColumns.length !== expectedColumns.length) {\n throwResultSchemaMismatch(\n target.id,\n `expected ${expectedColumns.length} columns, got ${actualColumns.length}`\n )\n }\n\n for (let index = 0; index < expectedColumns.length; index += 1) {\n const expected = expectedColumns[index]\n const actual = actualColumns[index]\n\n if (actual.name !== expected.name) {\n throwResultSchemaMismatch(\n target.id,\n `column ${index + 1} should be '${expected.name}', got '${actual.name}'`\n )\n }\n\n const actualDatasetType = findDatasetColumnTypeForDuckDbSql(actual.typeSql)\n if (actualDatasetType === expected.type) {\n continue\n }\n\n if (isCheckedInt64Cast(actual.typeSql, expected.type)) {\n checkedCasts.push({\n columnName: expected.name,\n targetTypeSql: datasetColumnTypeToDuckDbSql(expected.type),\n })\n continue\n }\n\n throwResultSchemaMismatch(\n target.id,\n `column '${expected.name}' should have type '${expected.type}', got '${actualDatasetType ?? actual.typeSql}'`\n )\n }\n\n return checkedCasts\n }\n\n private async applySqlTransform(input: ApplySqlTransformInput): Promise<ApplyDatasetRowsResult> {\n const tempTableName = `sixb_sql_transform_${randomUUID().replaceAll(\"-\", \"\")}`\n const tempTable = quoteIdentifier(tempTableName)\n\n await input.runtime.run(\n `CREATE TEMP TABLE ${tempTable} AS SELECT * FROM (${input.sql}) AS sixb_sql_transform_result`\n )\n\n let result: ApplyDatasetRowsResult\n try {\n for (const checkedCast of input.checkedCasts) {\n await input.runtime.run(\n `ALTER TABLE ${tempTable} ALTER COLUMN ${quoteIdentifier(\n checkedCast.columnName\n )} SET DATA TYPE ${checkedCast.targetTypeSql}`\n )\n }\n\n result = await applyDatasetRowsFromRelation({\n options: this.options,\n runtime: input.runtime,\n dataset: input.target,\n mode: input.mode,\n sourceRelationSql: tempTable,\n previousRowCount: input.previousRowCount,\n })\n } catch (error) {\n try {\n await input.runtime.run(`DROP TABLE IF EXISTS ${tempTable}`)\n } catch {\n // Preserve the write failure. DuckDB rejects cleanup statements while\n // the transaction is aborted; the coordinator will roll it back next.\n }\n throw error\n }\n\n await input.runtime.run(`DROP TABLE IF EXISTS ${tempTable}`)\n return result\n }\n}\n\n/**\n * Each source as the transform binds it on the lake: the schema of the version it reads, in the\n * stored column order, then its pick. Today's definition may have gained columns since, and a new\n * column can change what a name in the SQL resolves to, such as a lateral alias.\n */\nfunction pinnedSources(\n sources: ResolvedDuckLakeSqlTransformSources,\n versions: ReadonlyMap<string, DatasetVersion>\n): Readonly<Record<string, AnalyzeSqlTransformSource>> {\n const pinned: Record<string, AnalyzeSqlTransformSource> = Object.create(null)\n for (const [sourceName, version] of versions) {\n pinned[sourceName] = {\n dataset: { ...sources.tables[sourceName].definition, schema: version.schema },\n columns: sources.relations[sourceName].columns,\n }\n }\n\n return pinned\n}\n\n/**\n * Lineage of the SQL about to run, by the sources' dataset ids, against the schemas of the\n * versions it reads.\n *\n * SQL that cannot be analyzed exactly but reads only its sources, such as a PIVOT, depends on at\n * most every column it reads. Otherwise there is none: the SQL may read what no lineage names. A\n * result shaped unlike the target means the analysis tables diverged from what runs on the lake, so\n * that lineage is not recorded either.\n */\nasync function analyzeExecutedLineage(\n template: DuckLakeSqlTransformTemplate,\n pinnedSources: Readonly<Record<string, AnalyzeSqlTransformSource>>,\n relations: Readonly<Record<string, DuckLakeSqlTransformSourceRelation>>,\n target: DatasetDefinition\n): Promise<DatasetColumnLineage | undefined> {\n let analysis: SqlLineageAnalysis\n try {\n analysis = await analyzeSqlTransformLineage({ sources: pinnedSources, template })\n } catch (error) {\n return skipLineage(target, error)\n }\n\n if (!analysis.supported) {\n return analysis.readsOnlySources\n ? toDatasetColumnLineage(everySourceColumn(pinnedSources, target), relations)\n : undefined\n }\n\n if (!describesTarget(analysis.outputColumns, target)) return undefined\n return toDatasetColumnLineage(analysis.lineage, relations)\n}\n\n/** Every column the sources expose decides every row of the target, and so each of its values. */\nfunction everySourceColumn(\n sources: Readonly<Record<string, AnalyzeSqlTransformSource>>,\n target: DatasetDefinition\n): SqlTransformLineage {\n const rows = Object.entries(sources).flatMap(([source, { dataset, columns }]) =>\n (columns ?? dataset.schema.columns.map((column) => column.name)).map((column) => ({\n source,\n column,\n }))\n )\n\n return { rows, columns: Object.fromEntries(target.schema.columns.map(({ name }) => [name, []])) }\n}\n\n/**\n * A pipeline write without lineage is classified with every marking. Any other write without it\n * would depend on its own columns only, so one whose SQL cannot be analyzed records that.\n */\nfunction unanalyzedLineage(\n target: DatasetDefinition,\n producer: DatasetProducer | undefined\n): DatasetVersionLineage | undefined {\n return producer?.kind === \"pipeline\"\n ? undefined\n : { unknown: `a SQL transform into '${target.id}' could not be analyzed` }\n}\n\n/**\n * Lineage never fails a transform: invalid SQL or picks fail where the transform binds on the lake.\n * When the analysis cannot even start, the version records no lineage of its own SQL.\n */\nfunction skipLineage(target: DatasetDefinition, error: unknown): undefined {\n const message = error instanceof Error ? error.message : String(error)\n console.warn(\n `[SixbDuckLake] SQL transform into dataset '${target.id}' records no column lineage: ${message}`\n )\n return undefined\n}\n\nfunction describesTarget(outputColumns: readonly string[], target: DatasetDefinition): boolean {\n return (\n outputColumns.length === target.schema.columns.length &&\n target.schema.columns.every((column, index) => outputColumns[index] === column.name)\n )\n}\n\n/** Source names become dataset ids; two sources reading one dataset share its column refs. */\nfunction toDatasetColumnLineage(\n lineage: SqlTransformLineage,\n relations: Readonly<Record<string, DuckLakeSqlTransformSourceRelation>>\n): DatasetColumnLineage {\n const toRefs = (refs: readonly SqlTransformColumnRef[]): DatasetColumnRef[] => {\n const unique = new Map<string, DatasetColumnRef>()\n for (const { source, column } of refs) {\n const datasetId = relations[source].datasetId\n unique.set(JSON.stringify([datasetId, column]), { datasetId, column })\n }\n\n return [...unique.values()]\n }\n\n return {\n rows: toRefs(lineage.rows),\n columns: Object.fromEntries(\n Object.entries(lineage.columns).map(([column, refs]) => [column, toRefs(refs)])\n ),\n }\n}\n\nfunction previewLimit(limit: number | undefined): number {\n if (limit === undefined || !Number.isFinite(limit)) {\n return DEFAULT_PREVIEW_LIMIT\n }\n\n return Math.min(Math.max(0, Math.trunc(limit)), MAX_PREVIEW_LIMIT)\n}\n\nfunction buildPreviewSql(sql: string, limit: number): string {\n return `SELECT * FROM (${sql}) AS sixb_sql_transform_preview LIMIT ${limit}`\n}\n\nfunction resultColumnFromDescribeRow(\n row: Readonly<Record<string, unknown>>\n): SqlTransformResultColumn {\n const name = getString(row, \"column_name\")\n const typeSql = getString(row, \"column_type\")\n\n return { name, typeSql }\n}\n\nfunction isCheckedInt64Cast(\n actualTypeSql: string,\n expectedType: DatasetColumnDefinition[\"type\"]\n): boolean {\n const normalizedType = actualTypeSql.trim().toUpperCase()\n return expectedType === \"int64\" && (normalizedType === \"HUGEINT\" || normalizedType === \"INT128\")\n}\n\nfunction normalizePreviewRow(row: Readonly<Record<string, unknown>>): DatasetRow {\n const normalized: Record<string, unknown> = {}\n\n for (const [key, value] of Object.entries(row)) {\n normalized[key] = normalizePreviewValue(value)\n }\n\n return normalized\n}\n\nfunction normalizePreviewValue(value: unknown): unknown {\n if (typeof value === \"bigint\") {\n return value.toString()\n }\n\n if (value instanceof Date) {\n return value.toISOString()\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => normalizePreviewValue(item))\n }\n\n if (typeof value === \"object\" && value !== null) {\n const normalized: Record<string, unknown> = {}\n for (const [key, child] of Object.entries(value)) {\n normalized[key] = normalizePreviewValue(child)\n }\n return normalized\n }\n\n return value\n}\n\nfunction throwNoCommittedSourceVersion(datasetId: string): never {\n throw new LakeStorageError(\n `[SixbDuckLake] No committed version found for SQL transform source dataset '${datasetId}'.`\n )\n}\n\nfunction throwResultSchemaMismatch(datasetId: string, detail: string): never {\n throw new LakeStorageError(\n `[SixbDuckLake] SQL transform result schema does not match target dataset '${datasetId}': ${detail}.`\n )\n}\n",
29
29
  "import type { DatasetDefinition } from \"@sixb/core\"\nimport {\n type DatasetWriteMode,\n getDatasetPrimaryKeyColumns,\n LakeStorageError,\n} from \"@sixb/core/lake-storage\"\nimport type { DuckLakeStorageOptions } from \"../types\"\nimport { getBigIntLike } from \"./duckdb-row\"\nimport type { DuckDbQueryRuntime } from \"./duckdb-runtime\"\nimport { encodeDatasetTableName } from \"./names\"\nimport { datasetSchemaColumnNamesSql } from \"./schema\"\nimport { qualifiedTableName, quoteIdentifier } from \"./sql\"\n\nexport type CommitRowCount =\n | { readonly kind: \"exact\"; readonly value: number }\n | { readonly kind: \"unknown\" }\n\nexport interface ApplyDatasetRowsResult {\n readonly dataChangeExpected: boolean\n readonly sourceRowCount: number\n readonly resultingRowCount: CommitRowCount\n /**\n * The table held no rows when this transaction read it. A write into an empty table deletes\n * nothing, so DuckLake lets it commit alongside a concurrent one that also read the table empty.\n */\n readonly targetWasEmpty: boolean\n /**\n * The write inserted or deleted rows of the dataset table, which DuckLake checks against\n * concurrent changes to the table. A merge that only advances source ordering changes none.\n */\n readonly changedTableRows: boolean\n}\n\nexport function assertDatasetWriteMode(\n mode: unknown,\n operation: string\n): asserts mode is DatasetWriteMode {\n if (mode !== \"snapshot\" && mode !== \"append\") {\n throw new LakeStorageError(\n `[SixbDuckLake] Invalid ${operation} mode '${String(mode)}'. Expected 'snapshot' or 'append'.`\n )\n }\n}\n\nexport async function applyDatasetRowsFromRelation(input: {\n readonly options: DuckLakeStorageOptions\n readonly runtime: DuckDbQueryRuntime\n readonly dataset: DatasetDefinition\n readonly mode: DatasetWriteMode\n /** Provider-rendered relation SQL, such as a quoted staging or temp table. */\n readonly sourceRelationSql: string\n readonly previousRowCount?: number\n}): Promise<ApplyDatasetRowsResult> {\n const tableName = encodeDatasetTableName(input.dataset.id)\n const table = qualifiedTableName(input.options, tableName)\n const columnsSql = datasetSchemaColumnNamesSql(input.dataset.schema)\n const primaryKeyColumns = getDatasetPrimaryKeyColumns(input.dataset)\n\n let baselineRowCount: number | undefined\n if (primaryKeyColumns !== null) {\n await inspectUniqueKeyedRelation({\n runtime: input.runtime,\n dataset: input.dataset,\n relationSql: input.sourceRelationSql,\n context: `${input.mode} source`,\n })\n\n if (input.mode === \"append\") {\n baselineRowCount = await inspectUniqueKeyedRelation({\n runtime: input.runtime,\n dataset: input.dataset,\n relationSql: table,\n context: \"current baseline\",\n })\n await assertNoPrimaryKeyOverlap({\n runtime: input.runtime,\n dataset: input.dataset,\n leftRelationSql: input.sourceRelationSql,\n rightRelationSql: table,\n context: \"append\",\n })\n }\n }\n\n if (input.mode === \"snapshot\") {\n const source = await fingerprintRelation(input.runtime, input.sourceRelationSql, columnsSql)\n const target = await fingerprintRelation(input.runtime, table, columnsSql)\n\n if (sameFingerprint(source, target)) {\n return {\n dataChangeExpected: false,\n sourceRowCount: source.rowCount,\n resultingRowCount: { kind: \"exact\", value: target.rowCount },\n targetWasEmpty: target.rowCount === 0,\n changedTableRows: false,\n }\n }\n\n await input.runtime.run(`DELETE FROM ${table}`)\n await input.runtime.run(\n `INSERT INTO ${table} (${columnsSql}) SELECT ${columnsSql} FROM ${input.sourceRelationSql}`\n )\n\n const changedTableRows = source.rowCount > 0 || target.rowCount > 0\n return {\n dataChangeExpected: changedTableRows,\n sourceRowCount: source.rowCount,\n resultingRowCount: { kind: \"exact\", value: source.rowCount },\n targetWasEmpty: target.rowCount === 0,\n changedTableRows,\n }\n }\n\n const sourceRowCount = await countRows(input.runtime, input.sourceRelationSql)\n const knownRowCount = baselineRowCount ?? input.previousRowCount\n const targetWasEmpty =\n knownRowCount === undefined ? await isEmptyRelation(input.runtime, table) : knownRowCount === 0\n await input.runtime.run(\n `INSERT INTO ${table} (${columnsSql}) SELECT ${columnsSql} FROM ${input.sourceRelationSql}`\n )\n\n return {\n dataChangeExpected: sourceRowCount > 0,\n targetWasEmpty,\n changedTableRows: sourceRowCount > 0,\n sourceRowCount,\n resultingRowCount:\n input.previousRowCount === undefined\n ? { kind: \"unknown\" }\n : { kind: \"exact\", value: input.previousRowCount + sourceRowCount },\n }\n}\n\nexport async function inspectUniqueKeyedRelation(input: {\n readonly runtime: DuckDbQueryRuntime\n readonly dataset: DatasetDefinition\n readonly relationSql: string\n readonly context: string\n}): Promise<number> {\n const primaryKeyColumns = getDatasetPrimaryKeyColumns(input.dataset)\n if (primaryKeyColumns === null) {\n throw new LakeStorageError(\n `[SixbDuckLake] Dataset '${input.dataset.id}' must define a primaryKey before rows can be keyed.`\n )\n }\n\n const keysSql = primaryKeyColumns.map((column) => quoteIdentifier(column)).join(\", \")\n const [row] = await input.runtime.query(`\n SELECT\n count(*) AS row_count,\n coalesce(max(key_count), 0) AS max_key_count\n FROM (\n SELECT count(*) OVER (PARTITION BY ${keysSql}) AS key_count\n FROM ${input.relationSql}\n ) keyed_rows\n `)\n\n const rowCount = row === undefined ? 0 : Number(getBigIntLike(row, \"row_count\"))\n const maxKeyCount = row === undefined ? 0 : Number(getBigIntLike(row, \"max_key_count\"))\n if (maxKeyCount > 1) {\n throw new LakeStorageError(\n `[SixbDuckLake] Dataset '${input.dataset.id}' ${input.context} contains duplicate primary key.`\n )\n }\n\n return rowCount\n}\n\nasync function assertNoPrimaryKeyOverlap(input: {\n readonly runtime: DuckDbQueryRuntime\n readonly dataset: DatasetDefinition\n readonly leftRelationSql: string\n readonly rightRelationSql: string\n readonly context: string\n}): Promise<void> {\n const primaryKeyColumns = getDatasetPrimaryKeyColumns(input.dataset)\n if (primaryKeyColumns === null) {\n return\n }\n\n const matchSql = primaryKeyColumns\n .map((column) => `left_rows.${quoteIdentifier(column)} = right_rows.${quoteIdentifier(column)}`)\n .join(\" AND \")\n const [collision] = await input.runtime.query(`\n SELECT 1\n FROM ${input.leftRelationSql} left_rows\n JOIN ${input.rightRelationSql} right_rows ON ${matchSql}\n LIMIT 1\n `)\n if (collision !== undefined) {\n throw new LakeStorageError(\n `[SixbDuckLake] Dataset '${input.dataset.id}' ${input.context} contains duplicate primary key.`\n )\n }\n}\n\ninterface RelationFingerprint {\n readonly rowCount: number\n readonly hashSum: string\n readonly hashXor: string\n}\n\nasync function fingerprintRelation(\n runtime: DuckDbQueryRuntime,\n relationSql: string,\n columnsSql: string\n): Promise<RelationFingerprint> {\n const [row] = await runtime.query(`\n SELECT\n count(*) AS row_count,\n coalesce(sum(hash(${columnsSql})::HUGEINT), 0::HUGEINT) AS hash_sum,\n coalesce(bit_xor(hash('sixb:snapshot:v1', ${columnsSql})), 0::UBIGINT) AS hash_xor\n FROM ${relationSql}\n `)\n\n if (row === undefined) {\n return { rowCount: 0, hashSum: \"0\", hashXor: \"0\" }\n }\n\n return {\n rowCount: Number(getBigIntLike(row, \"row_count\")),\n hashSum: getBigIntLike(row, \"hash_sum\").toString(),\n hashXor: getBigIntLike(row, \"hash_xor\").toString(),\n }\n}\n\nfunction sameFingerprint(left: RelationFingerprint, right: RelationFingerprint): boolean {\n return (\n left.rowCount === right.rowCount &&\n left.hashSum === right.hashSum &&\n left.hashXor === right.hashXor\n )\n}\n\nasync function countRows(runtime: DuckDbQueryRuntime, relationSql: string): Promise<number> {\n const [row] = await runtime.query(`SELECT count(*) AS row_count FROM ${relationSql}`)\n if (row === undefined) {\n return 0\n }\n\n return Number(getBigIntLike(row, \"row_count\"))\n}\n\nasync function isEmptyRelation(runtime: DuckDbQueryRuntime, relationSql: string): Promise<boolean> {\n const rows = await runtime.query(`SELECT 1 AS present FROM ${relationSql} LIMIT 1`)\n return rows.length === 0\n}\n",
30
30
  "import { randomUUID } from \"node:crypto\"\nimport { type DuckDBConnection, DuckDBInstance } from \"@duckdb/node-api\"\nimport type { DatasetColumnDefinition } from \"@sixb/core\"\nimport type {\n AnalyzeSqlTransformSource,\n SqlTransformColumnRef,\n SqlTransformLineage,\n} from \"@sixb/core/lake-storage\"\nimport { datasetColumnToDuckDbSql } from \"../schema\"\nimport { quoteIdentifier, quoteSqlString } from \"../sql\"\nimport {\n type DuckLakeSqlTransformTemplate,\n pickSourceColumns,\n renderSourceRelation,\n} from \"../sql-transform-relations\"\nimport { parseSerializerOutput } from \"./plan-json\"\nimport { type PlanSourceTables, planLineage } from \"./plan-walker\"\nimport { rejectPlanFormat } from \"./rejection\"\nimport { assertSingleSelect, readsOnlySources } from \"./statement-gate\"\n\ninterface AnalyzeSqlTransformLineageInput {\n readonly sources: Readonly<Record<string, AnalyzeSqlTransformSource>>\n readonly template: DuckLakeSqlTransformTemplate\n}\n\n/**\n * `SqlTransformAnalysis` with the result's column names in order, which the lineage record cannot\n * carry: object keys that look like integers enumerate first.\n */\nexport type SqlLineageAnalysis =\n | {\n readonly supported: true\n readonly lineage: SqlTransformLineage\n readonly outputColumns: readonly string[]\n }\n | { readonly supported: false; readonly reason: string; readonly readsOnlySources: boolean }\n\ninterface AnalyzedSql {\n readonly lineage: SqlTransformLineage\n readonly outputColumns: readonly string[]\n}\n\n/** An empty table standing in for one source, under a name the transform cannot guess. */\ninterface AnalysisTable {\n readonly sourceName: string\n readonly tableName: string\n readonly columns: readonly DatasetColumnDefinition[]\n readonly relationSql: string\n}\n\n/**\n * No file, network, extension, or setting is reachable from the analysis instance; the transform\n * only binds against its sources' empty tables.\n */\nconst ISOLATED_INSTANCE_CONFIG = {\n enable_external_access: \"false\",\n autoinstall_known_extensions: \"false\",\n autoload_known_extensions: \"false\",\n}\n\n/**\n * Column lineage of a SQL transform, derived without reading any data.\n *\n * A fresh in-memory DuckDB instance creates one empty table per source from its column schema,\n * the transform renders against those tables in the same relation shape it runs with on the lake,\n * and DuckDB binds it. The bound, unoptimized plan is then walked operator by operator. Whatever\n * the walker does not understand exactly is rejected rather than guessed; a rejection or a bind\n * error is an unsupported analysis, while an invalid source pick throws. An unsupported analysis\n * of SQL that parsed still says whether its parse tree reads anything but the sources.\n */\nexport async function analyzeSqlTransformLineage(\n input: AnalyzeSqlTransformLineageInput\n): Promise<SqlLineageAnalysis> {\n const tables = analysisTables(input.sources)\n const sql = input.template.render(\n new Map(tables.map((table) => [table.sourceName, table.relationSql]))\n )\n\n try {\n return await withAnalysisConnection(tables, async (connection) => {\n const statements = await serialize(\n connection,\n `json_serialize_sql(${quoteSqlString(sql)}, skip_null := false, skip_empty := false)`,\n \"statements\",\n \"DuckDB could not parse the transform\"\n )\n\n try {\n return { supported: true, ...(await analyzeSql(connection, sql, statements, tables)) }\n } catch (error) {\n const sourceTables = new Set(tables.map((table) => table.tableName))\n const functions = await builtinFunctions(connection).catch(() => undefined)\n return unsupported(\n error,\n functions !== undefined && readsOnlySources(statements, sourceTables, functions)\n )\n }\n })\n } catch (error) {\n return unsupported(error, false)\n }\n}\n\n/** The functions DuckDB defines, the same in every fresh instance: read from the first one. */\nlet builtins: Promise<ReadonlySet<string>> | undefined\n\nfunction builtinFunctions(connection: DuckDBConnection): Promise<ReadonlySet<string>> {\n if (builtins) return builtins\n\n const read = connection\n .runAndReadAll(\"SELECT DISTINCT lower(function_name) FROM duckdb_functions()\")\n .then((reader) => new Set(reader.getRows().map(([name]) => String(name))))\n\n // A failed read is not kept: the next analysis reads again.\n builtins = read\n read.catch(() => {\n if (builtins === read) builtins = undefined\n })\n return read\n}\n\nfunction unsupported(error: unknown, readsOnlySources: boolean): SqlLineageAnalysis {\n return {\n supported: false,\n reason: error instanceof Error ? error.message : String(error),\n readsOnlySources,\n }\n}\n\nfunction analysisTables(\n sources: Readonly<Record<string, AnalyzeSqlTransformSource>>\n): readonly AnalysisTable[] {\n const token = randomUUID().replaceAll(\"-\", \"\")\n\n return Object.entries(sources).map(([sourceName, source], index) => {\n const tableName = `sixb_lineage_${token}_${index}`\n return {\n sourceName,\n tableName,\n columns: pickSourceColumns(sourceName, source.dataset, source.columns),\n relationSql: renderSourceRelation(quoteIdentifier(tableName), source.columns),\n }\n })\n}\n\nasync function withAnalysisConnection<T>(\n tables: readonly AnalysisTable[],\n use: (connection: DuckDBConnection) => Promise<T>\n): Promise<T> {\n const instance = await DuckDBInstance.create(\":memory:\", ISOLATED_INSTANCE_CONFIG)\n try {\n const connection = await instance.connect()\n try {\n for (const table of tables) {\n const columnsSql = table.columns.map((column) => datasetColumnToDuckDbSql(column))\n await connection.run(\n `CREATE TABLE ${quoteIdentifier(table.tableName)} (${columnsSql.join(\", \")})`\n )\n }\n\n // The transform cannot loosen the restrictions above through SET or a setting function.\n await connection.run(\"SET lock_configuration = true\")\n return await use(connection)\n } finally {\n connection.closeSync()\n }\n } finally {\n instance.closeSync()\n }\n}\n\nasync function analyzeSql(\n connection: DuckDBConnection,\n sql: string,\n statements: readonly unknown[],\n tables: readonly AnalysisTable[]\n): Promise<AnalyzedSql> {\n assertSingleSelect(statements)\n\n const plans = await serialize(\n connection,\n `json_serialize_plan(${quoteSqlString(sql)}, skip_null := false, skip_empty := false, optimize := false)`,\n \"plans\",\n \"DuckDB could not bind the transform\"\n )\n if (plans.length !== 1) {\n rejectPlanFormat(`expected one plan, got ${plans.length}`)\n }\n\n const sourceColumns = numberSourceColumns(tables)\n const lineage = planLineage(plans[0], sourceColumns.ids)\n const names = await outputColumnNames(connection, sql)\n if (lineage.columns.length !== names.length) {\n rejectPlanFormat(`the plan has ${lineage.columns.length} columns, the result ${names.length}`)\n }\n\n const refs = (ids: readonly number[]): SqlTransformColumnRef[] =>\n ids.map((id) => sourceColumns.refs[id])\n\n return {\n lineage: {\n rows: refs(lineage.rows),\n columns: Object.fromEntries(names.map((name, index) => [name, refs(lineage.columns[index])])),\n },\n outputColumns: names,\n }\n}\n\n/** Numbers every column of every table, in source then column order, for the plan walker. */\nfunction numberSourceColumns(tables: readonly AnalysisTable[]): {\n readonly ids: PlanSourceTables\n readonly refs: readonly SqlTransformColumnRef[]\n} {\n const refs: SqlTransformColumnRef[] = []\n const ids = new Map(\n tables.map((table) => {\n const columnIds = table.columns.map((column) => {\n refs.push({ source: table.sourceName, column: column.name })\n return [column.name, refs.length - 1] as const\n })\n return [table.tableName, new Map(columnIds)] as const\n })\n )\n\n return { ids, refs }\n}\n\n/**\n * Names as the executor materializes them: selected through a subquery, where DuckDB renames\n * duplicate output names (`id`, `id_1`).\n */\nasync function outputColumnNames(\n connection: DuckDBConnection,\n sql: string\n): Promise<readonly string[]> {\n const prepared = await connection.prepare(`SELECT * FROM (${sql}) AS sixb_lineage_result`)\n try {\n return Array.from({ length: prepared.columnCount }, (_, index) => prepared.columnName(index))\n } finally {\n prepared.destroySync()\n }\n}\n\nasync function serialize(\n connection: DuckDBConnection,\n serializerSql: string,\n listKey: string,\n failure: string\n): Promise<readonly unknown[]> {\n const reader = await connection.runAndReadAll(`SELECT ${serializerSql}`)\n const text = reader.getRows()[0]?.[0]\n if (typeof text !== \"string\") {\n rejectPlanFormat(\"the serializer returned no JSON\")\n }\n\n return parseSerializerOutput(text, listKey, failure)\n}\n",
@@ -36,14 +36,14 @@
36
36
  "/**\n * Table functions that compute only from their arguments. Every other table function reads outside\n * the transform's sources (files, catalogs, settings) or runs SQL of its own, like `query()`.\n */\nexport const PURE_TABLE_FUNCTIONS: ReadonlySet<string> = new Set([\n \"range\",\n \"generate_series\",\n \"unnest\",\n \"json_each\",\n \"json_tree\",\n])\n",
37
37
  "import { expressionDependencies, nestedOrderExpressions, orderExpressions } from \"./expressions\"\nimport {\n asIndexList,\n asList,\n asObject,\n booleanField,\n field,\n indexField,\n indexListField,\n type JsonObject,\n listField,\n objectField,\n objectListField,\n stringField,\n stringListField,\n} from \"./plan-json\"\nimport {\n addAll,\n bindingKey,\n type Dependencies,\n itemAt,\n type PlanColumn,\n type PlanRelation,\n sameDependencies,\n unionOf,\n VIRTUAL_COLUMN,\n} from \"./plan-relation\"\nimport { reject, rejectPlanFormat } from \"./rejection\"\nimport { PURE_TABLE_FUNCTIONS } from \"./table-functions\"\n\n/** The tables a plan may scan: physical table name, then column name, to a source column id. */\nexport type PlanSourceTables = ReadonlyMap<string, ReadonlyMap<string, number>>\n\n/** Source column ids, sorted, for the whole result and for each output column by position. */\nexport interface PlanLineage {\n readonly rows: readonly number[]\n readonly columns: readonly (readonly number[])[]\n}\n\ninterface WalkContext {\n readonly tables: PlanSourceTables\n /** CTE definitions by table index, set where the CTE is declared. */\n readonly ctes: Map<number, PlanRelation>\n /** Duplicate-eliminated columns of the enclosing DELIM_JOINs, innermost last. */\n readonly delimColumns: (readonly PlanColumn[])[]\n}\n\n/** Recursive CTE lineage grows monotonically; real queries settle within a few rounds. */\nconst MAX_RECURSIVE_CTE_ROUNDS = 64\n\n/**\n * Column lineage of one bound, unoptimized logical plan (`json_serialize_plan(sql, optimize :=\n * false)`), walked bottom-up. Each operator yields its output columns with the source columns their\n * values come from, plus the source columns that decide which rows exist or their order. Those row\n * dependencies accumulate upwards and apply to every output column.\n *\n * Expressions mostly reference their operator's input by position, so each operator below states\n * the order of its output columns.\n */\nexport function planLineage(plan: unknown, tables: PlanSourceTables): PlanLineage {\n const root = evaluate(asObject(plan, \"plan\"), { tables, ctes: new Map(), delimColumns: [] })\n const rows = sortedIds(root.rows)\n const columns = root.columns.map((column) => sortedIds(column.dependencies))\n\n if ([rows, ...columns].some((ids) => ids.includes(VIRTUAL_COLUMN))) {\n reject(\"reading virtual columns such as rowid is not supported\")\n }\n\n return { rows, columns }\n}\n\nfunction evaluate(node: JsonObject, context: WalkContext): PlanRelation {\n const type = stringField(node, \"type\")\n\n switch (type) {\n case \"LOGICAL_GET\":\n return evaluateGet(node, context)\n case \"LOGICAL_DUMMY_SCAN\":\n return evaluateDummyScan(node)\n case \"LOGICAL_EXPRESSION_GET\":\n return evaluateExpressionGet(node, context)\n case \"LOGICAL_PROJECTION\":\n return evaluateProjection(node, context)\n case \"LOGICAL_FILTER\":\n return evaluateFilter(node, context)\n case \"LOGICAL_AGGREGATE_AND_GROUP_BY\":\n return evaluateAggregate(node, context)\n case \"LOGICAL_WINDOW\":\n return evaluateWindow(node, context)\n case \"LOGICAL_UNNEST\":\n return evaluateUnnest(node, context)\n case \"LOGICAL_ORDER_BY\":\n return evaluateOrderBy(node, context)\n case \"LOGICAL_LIMIT\":\n return evaluateLimit(node, context)\n case \"LOGICAL_SAMPLE\":\n // A random sample: no column decides which rows survive.\n return evaluateOnlyChild(node, context)\n case \"LOGICAL_DISTINCT\":\n return evaluateDistinct(node, context)\n case \"LOGICAL_CROSS_PRODUCT\":\n case \"LOGICAL_POSITIONAL_JOIN\":\n return evaluateCrossProduct(node, context)\n case \"LOGICAL_COMPARISON_JOIN\":\n case \"LOGICAL_ASOF_JOIN\":\n return evaluateComparisonJoin(node, context)\n case \"LOGICAL_DELIM_JOIN\":\n return evaluateDelimJoin(node, context)\n case \"LOGICAL_ANY_JOIN\":\n return evaluateAnyJoin(node, context)\n case \"LOGICAL_DELIM_GET\":\n return evaluateDelimGet(node, context)\n case \"LOGICAL_UNION\":\n case \"LOGICAL_EXCEPT\":\n case \"LOGICAL_INTERSECT\":\n return evaluateSetOperation(node, context)\n case \"LOGICAL_MATERIALIZED_CTE\":\n return evaluateMaterializedCte(node, context)\n case \"LOGICAL_RECURSIVE_CTE\":\n return evaluateRecursiveCte(node, context)\n case \"LOGICAL_CTE_REF\":\n return evaluateCteRef(node, context)\n default:\n reject(`plan node '${type}' is not supported`)\n }\n}\n\ninterface ScanSource {\n /** Source columns behind the scanned column at a table or function column index. */\n readonly column: (index: number) => Dependencies\n readonly rows: Dependencies\n}\n\n/**\n * Output: the scanned columns (column_indexes), narrowed to projection_ids when present, then the\n * input columns an in-out table function passes through (projected_input).\n */\nfunction evaluateGet(node: JsonObject, context: WalkContext): PlanRelation {\n if (objectListField(objectField(node, \"table_filters\"), \"filters\").length > 0) {\n rejectPlanFormat(\"an unoptimized scan has pushed-down filters\")\n }\n\n const inputs = objectListField(node, \"children\")\n if (inputs.length > 1) {\n rejectPlanFormat(\"a scan has several inputs\")\n }\n\n const input = inputs[0] === undefined ? undefined : evaluate(inputs[0], context)\n const functionName = stringField(node, \"name\")\n const source =\n functionName === \"seq_scan\"\n ? tableScanSource(node, context, input)\n : tableFunctionSource(functionName, input)\n\n const scanned = objectListField(node, \"column_indexes\").map((entry) =>\n source.column(indexField(entry, \"index\"))\n )\n\n const tableIndex = indexField(node, \"table_index\")\n const projectionIds = indexListField(node, \"projection_ids\")\n const positions = projectionIds.length > 0 ? projectionIds : scanned.map((_, index) => index)\n\n const columns: PlanColumn[] = positions.map((position) => ({\n dependencies: itemAt(scanned, position, \"scanned column\"),\n binding: bindingKey(tableIndex, position),\n }))\n\n for (const position of indexListField(node, \"projected_input\")) {\n if (input === undefined) {\n rejectPlanFormat(\"a scan passes through input columns without an input\")\n }\n\n columns.push(itemAt(input.columns, position, \"input column\"))\n }\n\n return { columns, rows: unionOf(input?.rows ?? new Set(), source.rows) }\n}\n\nfunction tableScanSource(\n node: JsonObject,\n context: WalkContext,\n input: PlanRelation | undefined\n): ScanSource {\n if (input !== undefined) {\n rejectPlanFormat(\"a table scan has an input\")\n }\n\n const table = stringField(objectField(node, \"function_data\"), \"table\")\n const columnIds = context.tables.get(table)\n if (columnIds === undefined) {\n reject(`table '${table}' is not a source of the transform`)\n }\n\n const names = stringListField(node, \"names\")\n return {\n rows: new Set(),\n column: (index) => {\n // Indexes past the table's columns are planner-internal virtual columns.\n const name = names[index]\n if (name === undefined) {\n return new Set([VIRTUAL_COLUMN])\n }\n\n const id = columnIds.get(name)\n if (id === undefined) {\n rejectPlanFormat(`table '${table}' has no column '${name}'`)\n }\n\n return new Set([id])\n },\n }\n}\n\n/**\n * Without an input, a table function's arguments are bound constants. With one (LATERAL arguments,\n * or a subquery as an argument), every produced column and the number of rows derive from it.\n */\nfunction tableFunctionSource(name: string, input: PlanRelation | undefined): ScanSource {\n if (!PURE_TABLE_FUNCTIONS.has(name)) {\n reject(`table function '${name}' is not supported`)\n }\n\n const dependencies =\n input === undefined\n ? new Set<number>()\n : unionOf(...input.columns.map((column) => column.dependencies))\n\n return { rows: dependencies, column: () => dependencies }\n}\n\n/** `SELECT` without FROM: one row of one placeholder column. */\nfunction evaluateDummyScan(node: JsonObject): PlanRelation {\n assertLeaf(node)\n return {\n columns: [{ dependencies: new Set(), binding: bindingKey(indexField(node, \"table_index\"), 0) }],\n rows: new Set(),\n }\n}\n\n/** VALUES: column i is the union of every row's i-th expression. */\nfunction evaluateExpressionGet(node: JsonObject, context: WalkContext): PlanRelation {\n const input = evaluateOnlyChild(node, context)\n const width = listField(node, \"expr_types\").length\n const values = Array.from({ length: width }, () => new Set<number>())\n\n for (const row of listField(node, \"expressions\")) {\n const expressions = asList(row, \"a VALUES row\")\n if (expressions.length !== width) {\n rejectPlanFormat(\"a VALUES row does not match the VALUES width\")\n }\n\n expressions.forEach((expression, index) => {\n addAll(\n itemAt(values, index, \"VALUES column\"),\n expressionDependencies(expression, input.columns)\n )\n })\n }\n\n const tableIndex = indexField(node, \"table_index\")\n return {\n columns: values.map((dependencies, index) => ({\n dependencies,\n binding: bindingKey(tableIndex, index),\n })),\n rows: input.rows,\n }\n}\n\nfunction evaluateProjection(node: JsonObject, context: WalkContext): PlanRelation {\n const input = evaluateOnlyChild(node, context)\n const tableIndex = indexField(node, \"table_index\")\n\n return {\n columns: listField(node, \"expressions\").map((expression, index) => ({\n dependencies: expressionDependencies(expression, input.columns),\n binding: bindingKey(tableIndex, index),\n })),\n rows: input.rows,\n }\n}\n\n/** Output: the window's input columns, then one column per window expression (window_index). */\nfunction evaluateWindow(node: JsonObject, context: WalkContext): PlanRelation {\n const input = evaluateOnlyChild(node, context)\n const windowIndex = indexField(node, \"window_index\")\n const rows = new Set(input.rows)\n\n const windows = objectListField(node, \"expressions\").map((expression, index) => {\n if (stringField(expression, \"expression_class\") !== \"BOUND_WINDOW\") {\n rejectPlanFormat(\"a window operator computes something other than a window function\")\n }\n\n // Partitions and orders decide which rows each window function compares.\n addAll(rows, dependenciesOf(listField(expression, \"partitions\"), input.columns))\n addAll(rows, dependenciesOf(orderExpressions(listField(expression, \"orders\")), input.columns))\n\n return {\n dependencies: expressionDependencies(expression, input.columns),\n binding: bindingKey(windowIndex, index),\n }\n })\n\n return { columns: [...input.columns, ...windows], rows }\n}\n\nfunction evaluateFilter(node: JsonObject, context: WalkContext): PlanRelation {\n const input = evaluateOnlyChild(node, context)\n\n return {\n columns: projectColumns(input.columns, indexListField(node, \"projection_map\")),\n rows: unionOf(input.rows, dependenciesOf(listField(node, \"expressions\"), input.columns)),\n }\n}\n\n/**\n * Output: the groups (group_index), the aggregates (aggregate_index), then one GROUPING() column\n * per grouping function (groupings_index). HAVING is a filter above this operator.\n */\nfunction evaluateAggregate(node: JsonObject, context: WalkContext): PlanRelation {\n const input = evaluateOnlyChild(node, context)\n const groups = listField(node, \"groups\").map((expression) =>\n expressionDependencies(expression, input.columns)\n )\n\n const groupIndex = indexField(node, \"group_index\")\n const aggregateIndex = indexField(node, \"aggregate_index\")\n const groupingsIndex = indexField(node, \"groupings_index\")\n\n const groupColumns = groups.map((dependencies, index) => ({\n dependencies,\n binding: bindingKey(groupIndex, index),\n }))\n\n const aggregateColumns = listField(node, \"expressions\").map((expression, index) => ({\n dependencies: expressionDependencies(expression, input.columns),\n binding: bindingKey(aggregateIndex, index),\n }))\n\n // GROUPING(a, b) tells which of the groups it lists are rolled up in a row.\n const groupingColumns = listField(node, \"grouping_functions\").map((groupIndexes, index) => ({\n dependencies: unionOf(\n ...asIndexList(groupIndexes, \"a grouping function\").map((group) =>\n itemAt(groups, group, \"group\")\n )\n ),\n binding: bindingKey(groupingsIndex, index),\n }))\n\n return {\n columns: [...groupColumns, ...aggregateColumns, ...groupingColumns],\n rows: unionOf(input.rows, ...groups),\n }\n}\n\n/**\n * Output: the input columns, then one column per UNNEST (unnest_index). Unnesting turns each row\n * into as many rows as its list has items, so the lists are row dependencies too.\n */\nfunction evaluateUnnest(node: JsonObject, context: WalkContext): PlanRelation {\n const input = evaluateOnlyChild(node, context)\n const unnestIndex = indexField(node, \"unnest_index\")\n const rows = new Set(input.rows)\n\n const unnested = listField(node, \"expressions\").map((expression, index) => {\n const dependencies = expressionDependencies(expression, input.columns)\n addAll(rows, dependencies)\n return { dependencies, binding: bindingKey(unnestIndex, index) }\n })\n\n return { columns: [...input.columns, ...unnested], rows }\n}\n\n/** A row dependency even without LIMIT: a materialized dataset keeps its row order. */\nfunction evaluateOrderBy(node: JsonObject, context: WalkContext): PlanRelation {\n const input = evaluateOnlyChild(node, context)\n\n return {\n columns: projectColumns(input.columns, indexListField(node, \"projections\")),\n rows: unionOf(\n input.rows,\n dependenciesOf(orderExpressions(listField(node, \"orders\")), input.columns)\n ),\n }\n}\n\nfunction evaluateLimit(node: JsonObject, context: WalkContext): PlanRelation {\n const input = evaluateOnlyChild(node, context)\n\n return {\n columns: input.columns,\n rows: unionOf(\n input.rows,\n limitDependencies(objectField(node, \"limit_val\"), input.columns),\n limitDependencies(objectField(node, \"offset_val\"), input.columns)\n ),\n }\n}\n\nfunction limitDependencies(limit: JsonObject, input: readonly PlanColumn[]): Dependencies {\n const kind = stringField(limit, \"type\")\n\n switch (kind) {\n case \"UNSET\":\n case \"CONSTANT_VALUE\":\n case \"CONSTANT_PERCENTAGE\":\n return new Set()\n case \"EXPRESSION_VALUE\":\n case \"EXPRESSION_PERCENTAGE\":\n return expressionDependencies(field(limit, \"expression\"), input)\n default:\n reject(`LIMIT kind '${kind}' is not supported`)\n }\n}\n\n/** DISTINCT, DISTINCT ON with its ORDER BY, and the deduplication of set operations. */\nfunction evaluateDistinct(node: JsonObject, context: WalkContext): PlanRelation {\n const input = evaluateOnlyChild(node, context)\n\n return {\n columns: input.columns,\n rows: unionOf(\n input.rows,\n dependenciesOf(listField(node, \"distinct_targets\"), input.columns),\n dependenciesOf(nestedOrderExpressions(node, \"order_by\"), input.columns)\n ),\n }\n}\n\n/** Output: the left columns, then the right columns. */\nfunction evaluateCrossProduct(node: JsonObject, context: WalkContext): PlanRelation {\n const [left, right] = evaluateTwoChildren(node, context)\n return { columns: [...left.columns, ...right.columns], rows: unionOf(left.rows, right.rows) }\n}\n\nfunction evaluateComparisonJoin(node: JsonObject, context: WalkContext): PlanRelation {\n const [left, right] = evaluateTwoChildren(node, context)\n return comparisonJoinOutput(node, left, right)\n}\n\n/**\n * A correlated subquery, flattened. The duplicate-eliminated columns are computed over one side\n * (the left, unless delim_flipped), and every DELIM_GET on the other side reads them.\n */\nfunction evaluateDelimJoin(node: JsonObject, context: WalkContext): PlanRelation {\n const [first, second] = twoChildren(node)\n const flipped = booleanField(node, \"delim_flipped\")\n const outer = evaluate(flipped ? second : first, context)\n\n context.delimColumns.push(\n listField(node, \"duplicate_eliminated_columns\").map((expression) => ({\n dependencies: expressionDependencies(expression, outer.columns),\n }))\n )\n\n const inner = evaluate(flipped ? first : second, context)\n context.delimColumns.pop()\n\n return flipped\n ? comparisonJoinOutput(node, inner, outer)\n : comparisonJoinOutput(node, outer, inner)\n}\n\n/** Each side of a condition reads its own input; the residual predicate reads left ++ right. */\nfunction comparisonJoinOutput(\n node: JsonObject,\n left: PlanRelation,\n right: PlanRelation\n): PlanRelation {\n const condition = new Set<number>()\n\n for (const comparison of objectListField(node, \"conditions\")) {\n addAll(condition, expressionDependencies(field(comparison, \"left\"), left.columns))\n addAll(condition, expressionDependencies(field(comparison, \"right\"), right.columns))\n }\n\n const predicate = field(node, \"predicate\")\n if (predicate !== null) {\n addAll(condition, expressionDependencies(predicate, [...left.columns, ...right.columns]))\n }\n\n return joinOutput(node, left, right, condition)\n}\n\n/** A join on an arbitrary condition, which reads left ++ right. */\nfunction evaluateAnyJoin(node: JsonObject, context: WalkContext): PlanRelation {\n const [left, right] = evaluateTwoChildren(node, context)\n const condition = expressionDependencies(field(node, \"condition\"), [\n ...left.columns,\n ...right.columns,\n ])\n\n return joinOutput(node, left, right, condition)\n}\n\n/** Which columns a join outputs depends on its type; its condition decides its rows. */\nfunction joinOutput(\n node: JsonObject,\n left: PlanRelation,\n right: PlanRelation,\n condition: Dependencies\n): PlanRelation {\n const rows = unionOf(left.rows, right.rows, condition)\n const leftColumns = projectColumns(left.columns, indexListField(node, \"left_projection_map\"))\n const rightColumns = projectColumns(right.columns, indexListField(node, \"right_projection_map\"))\n const joinType = stringField(node, \"join_type\")\n\n switch (joinType) {\n case \"INNER\":\n case \"LEFT\":\n case \"RIGHT\":\n case \"FULL\":\n case \"SINGLE\": // a correlated scalar subquery\n return { columns: [...leftColumns, ...rightColumns], rows }\n case \"SEMI\":\n case \"ANTI\":\n return { columns: leftColumns, rows }\n case \"RIGHT_SEMI\":\n case \"RIGHT_ANTI\":\n return { columns: rightColumns, rows }\n case \"MARK\": {\n // EXISTS, IN or ANY used as a value: a boolean column (mark_index) telling whether the\n // condition matched.\n const mark = {\n dependencies: condition,\n binding: bindingKey(indexField(node, \"mark_index\"), 0),\n }\n return { columns: [...leftColumns, mark], rows }\n }\n default:\n reject(`join type '${joinType}' is not supported`)\n }\n}\n\nfunction evaluateDelimGet(node: JsonObject, context: WalkContext): PlanRelation {\n assertLeaf(node)\n const delimColumns = context.delimColumns.at(-1)\n if (delimColumns === undefined) {\n rejectPlanFormat(\"a DELIM_GET is outside any DELIM_JOIN\")\n }\n\n if (listField(node, \"chunk_types\").length !== delimColumns.length) {\n rejectPlanFormat(\"a DELIM_GET does not match its DELIM_JOIN\")\n }\n\n return { columns: rebind(delimColumns, indexField(node, \"table_index\")), rows: new Set() }\n}\n\n/** UNION ALL chains are flattened: a set operation may have more than two inputs. */\nfunction evaluateSetOperation(node: JsonObject, context: WalkContext): PlanRelation {\n const inputs = objectListField(node, \"children\").map((child) => evaluate(child, context))\n const width = indexField(node, \"column_count\")\n if (inputs.length < 2 || inputs.some((input) => input.columns.length !== width)) {\n rejectPlanFormat(\"set operation inputs do not match\")\n }\n\n const tableIndex = indexField(node, \"table_index\")\n const rows = unionOf(...inputs.map((input) => input.rows))\n\n if (stringField(node, \"type\") === \"LOGICAL_UNION\") {\n const columns = Array.from({ length: width }, (_, index) => ({\n dependencies: unionOf(\n ...inputs.map((input) => itemAt(input.columns, index, \"column\").dependencies)\n ),\n binding: bindingKey(tableIndex, index),\n }))\n\n // Without ALL, deduplication compares every column.\n if (!booleanField(node, \"setop_all\")) {\n addAll(rows, unionOf(...columns.map((column) => column.dependencies)))\n }\n\n return { columns, rows }\n }\n\n // EXCEPT and INTERSECT: values come from the first input; whether a row survives depends on\n // every column of every input.\n for (const input of inputs) {\n addAll(rows, unionOf(...input.columns.map((column) => column.dependencies)))\n }\n\n return { columns: rebind(itemAt(inputs, 0, \"input\").columns, tableIndex), rows }\n}\n\n/**\n * The first input defines the CTE, the second is the query reading it. The planner emits this node\n * for every CTE, materialized or not, since inlining is an optimizer step. A CTE adds its row\n * dependencies only where a CTE_REF reads it.\n */\nfunction evaluateMaterializedCte(node: JsonObject, context: WalkContext): PlanRelation {\n const [definition, query] = twoChildren(node)\n context.ctes.set(indexField(node, \"table_index\"), evaluate(definition, context))\n return evaluate(query, context)\n}\n\n/**\n * The first input is the anchor, the second the recursive step, which reads the CTE through CTE_REFs\n * to this table_index. The step is re-evaluated against the accumulated lineage until it is stable.\n */\nfunction evaluateRecursiveCte(node: JsonObject, context: WalkContext): PlanRelation {\n const [anchorNode, stepNode] = twoChildren(node)\n const tableIndex = indexField(node, \"table_index\")\n const unionAll = booleanField(node, \"union_all\")\n const keyTargets = listField(node, \"key_targets\")\n let current = evaluate(anchorNode, context)\n\n for (let round = 0; round < MAX_RECURSIVE_CTE_ROUNDS; round += 1) {\n context.ctes.set(tableIndex, current)\n const step = evaluate(stepNode, context)\n if (step.columns.length !== current.columns.length) {\n rejectPlanFormat(\"recursive CTE branches have different widths\")\n }\n\n const columns = current.columns.map((column, index) => ({\n dependencies: unionOf(\n column.dependencies,\n itemAt(step.columns, index, \"column\").dependencies\n ),\n binding: bindingKey(tableIndex, index),\n }))\n\n const rows = unionOf(current.rows, step.rows, dependenciesOf(keyTargets, columns))\n\n // Without ALL, deduplication compares every column.\n if (!unionAll) {\n addAll(rows, unionOf(...columns.map((column) => column.dependencies)))\n }\n\n const next = { columns, rows }\n if (sameRelation(current, next)) {\n return next\n }\n\n current = next\n }\n\n reject(\"recursive CTE lineage did not converge\")\n}\n\nfunction evaluateCteRef(node: JsonObject, context: WalkContext): PlanRelation {\n assertLeaf(node)\n const definition = context.ctes.get(indexField(node, \"cte_index\"))\n if (definition === undefined) {\n rejectPlanFormat(\"a CTE_REF reads an undefined CTE\")\n }\n\n if (listField(node, \"chunk_types\").length !== definition.columns.length) {\n rejectPlanFormat(\"a CTE_REF does not match its CTE\")\n }\n\n return {\n columns: rebind(definition.columns, indexField(node, \"table_index\")),\n rows: definition.rows,\n }\n}\n\nfunction twoChildren(node: JsonObject): readonly [JsonObject, JsonObject] {\n const children = objectListField(node, \"children\")\n const [first, second] = children\n if (children.length !== 2 || first === undefined || second === undefined) {\n rejectPlanFormat(`'${stringField(node, \"type\")}' should have two inputs`)\n }\n\n return [first, second]\n}\n\nfunction evaluateTwoChildren(\n node: JsonObject,\n context: WalkContext\n): readonly [PlanRelation, PlanRelation] {\n const [left, right] = twoChildren(node)\n return [evaluate(left, context), evaluate(right, context)]\n}\n\nfunction evaluateOnlyChild(node: JsonObject, context: WalkContext): PlanRelation {\n const children = objectListField(node, \"children\")\n const [child] = children\n if (children.length !== 1 || child === undefined) {\n rejectPlanFormat(`'${stringField(node, \"type\")}' should have one input`)\n }\n\n return evaluate(child, context)\n}\n\nfunction assertLeaf(node: JsonObject): void {\n if (objectListField(node, \"children\").length > 0) {\n rejectPlanFormat(`'${stringField(node, \"type\")}' should have no input`)\n }\n}\n\n/** An operator's projection map selects input columns by position; empty keeps them all. */\nfunction projectColumns(\n columns: readonly PlanColumn[],\n projectionMap: readonly number[]\n): readonly PlanColumn[] {\n return projectionMap.length === 0\n ? columns\n : projectionMap.map((index) => itemAt(columns, index, \"projected column\"))\n}\n\n/** The same columns, exposed under another operator's table index. */\nfunction rebind(columns: readonly PlanColumn[], tableIndex: number): readonly PlanColumn[] {\n return columns.map((column, index) => ({\n dependencies: column.dependencies,\n binding: bindingKey(tableIndex, index),\n }))\n}\n\nfunction dependenciesOf(\n expressions: readonly unknown[],\n input: readonly PlanColumn[]\n): Dependencies {\n return unionOf(...expressions.map((expression) => expressionDependencies(expression, input)))\n}\n\nfunction sameRelation(left: PlanRelation, right: PlanRelation): boolean {\n return (\n sameDependencies(left.rows, right.rows) &&\n left.columns.every((column, index) =>\n sameDependencies(column.dependencies, itemAt(right.columns, index, \"column\").dependencies)\n )\n )\n}\n\nfunction sortedIds(ids: Dependencies): readonly number[] {\n return [...ids].sort((left, right) => left - right)\n}\n",
38
38
  "import { isJsonObject, type JsonObject, listField, objectField, stringField } from \"./plan-json\"\nimport { reject } from \"./rejection\"\nimport { PURE_TABLE_FUNCTIONS } from \"./table-functions\"\n\n/**\n * Checks the parse tree (`json_serialize_sql`) before DuckDB binds the query. Binding already runs\n * table functions' bind code, and table macros such as `query()` only expand during binding, so\n * they must be refused from the parse tree. PIVOT is refused here because its output columns depend\n * on data the empty analysis tables do not have.\n */\nexport function assertSingleSelect(statements: readonly unknown[]): void {\n const [statement] = statements\n if (statements.length !== 1 || statement === undefined) {\n reject(\"the transform must be exactly one SELECT statement\")\n }\n\n visit(statement, (node) => {\n if (node.type === \"PIVOT\") {\n const unpivot = listField(node, \"unpivot_names\").length > 0\n reject(`${unpivot ? \"UNPIVOT\" : \"PIVOT\"} is not supported`)\n }\n\n const unread = readsBeyondSources(node)\n if (unread) reject(unread)\n })\n}\n\n/**\n * Whether the statement reads nothing but its sources, for a transform the analysis rejected: then\n * every column it outputs depends on at most every column of its sources. PIVOT reads only its\n * input.\n *\n * Data reaches a query through its table references. Each must be one of `sourceTables`, or a\n * common table expression an enclosing query defines; a table function must compute from its\n * arguments alone. A name a query does not define resolves to a table of the lake.\n *\n * A function must carry a name DuckDB itself defines, one of `builtinFunctions`: a macro the\n * lake's setup defines can read any table, and its call shows none.\n */\nexport function readsOnlySources(\n statements: readonly unknown[],\n sourceTables: ReadonlySet<string>,\n builtinFunctions: ReadonlySet<string>\n): boolean {\n const [statement] = statements\n if (statements.length !== 1 || statement === undefined) return false\n\n let only = true\n visit(statement, (node, ctes) => {\n if (readsBeyondSources(node)) only = false\n else if (node.type === \"BASE_TABLE\" && !readsSourceOrCte(node, sourceTables, ctes)) only = false\n else if (callsUnknownFunction(node, builtinFunctions)) only = false\n })\n\n return only\n}\n\n/** What makes a node read outside the transform's sources, if anything. */\nfunction readsBeyondSources(node: JsonObject): string | undefined {\n if (node.type === \"SHOW_REF\") {\n return \"DESCRIBE, SHOW and SUMMARIZE are not supported\"\n }\n\n if (node.type === \"TABLE_FUNCTION\") {\n const name = stringField(objectField(node, \"function\"), \"function_name\")\n if (!PURE_TABLE_FUNCTIONS.has(name)) return `table function '${name}' is not supported`\n }\n\n if (node.class === \"PARAMETER\") {\n return \"query parameters are not supported\"\n }\n\n return undefined\n}\n\nfunction readsSourceOrCte(\n table: JsonObject,\n sourceTables: ReadonlySet<string>,\n ctes: ReadonlySet<string>\n): boolean {\n if (qualified(table, \"schema_name\") || qualified(table, \"catalog_name\")) return false\n\n const name = stringField(table, \"table_name\")\n return sourceTables.has(name) || ctes.has(name.toLowerCase())\n}\n\n/**\n * DuckDB writes syntax such as `EXTRACT`, `[1, 2]` or `{a: 1}` as calls to functions of schema\n * `main`, so only another schema or a catalog qualifies a call.\n */\nfunction callsUnknownFunction(node: JsonObject, builtinFunctions: ReadonlySet<string>): boolean {\n if (node.class !== \"FUNCTION\" && node.class !== \"WINDOW\") return false\n if (qualified(node, \"catalog\") || (qualified(node, \"schema\") && node.schema !== \"main\")) {\n return true\n }\n\n const name = node.function_name\n return typeof name !== \"string\" || !builtinFunctions.has(name.toLowerCase())\n}\n\nfunction qualified(node: JsonObject, key: string): boolean {\n const value = node[key]\n return typeof value === \"string\" && value !== \"\"\n}\n\n/**\n * Visit every node of a parse tree, with the names of the common table expressions in scope, which\n * DuckDB matches without regard to case.\n *\n * A query's body sees all of its expressions. An expression's own query sees only those defined\n * before it, and a recursive one sees itself in its recursive part alone: any other name resolves\n * to a table of the lake, so `WITH raw AS (SELECT * FROM raw)` reads the lake's `raw`.\n */\nfunction visit(\n value: unknown,\n check: (node: JsonObject, ctes: ReadonlySet<string>) => void,\n ctes: ReadonlySet<string> = new Set()\n): void {\n if (Array.isArray(value)) {\n for (const item of value) visit(item, check, ctes)\n return\n }\n\n if (!isJsonObject(value)) return\n\n const entries = cteEntries(value)\n const defined = new Set(ctes)\n for (const { name, query } of entries) {\n visit(query, check, new Set(defined))\n defined.add(name)\n }\n\n check(value, defined)\n\n const recursive =\n value.type === \"RECURSIVE_CTE_NODE\" && typeof value.cte_name === \"string\"\n ? new Set([...defined, value.cte_name.toLowerCase()])\n : undefined\n\n for (const [key, child] of Object.entries(value)) {\n if (key === \"cte_map\" && entries.length > 0) continue\n visit(child, check, key === \"right\" && recursive ? recursive : defined)\n }\n}\n\n/**\n * A query's common table expressions, in the order it defines them. A map in a shape this does not\n * know gives none: its nodes are then visited as any others, with no name in scope.\n */\nfunction cteEntries(\n node: JsonObject\n): readonly { readonly name: string; readonly query: unknown }[] {\n const map = node.cte_map\n if (!isJsonObject(map) || !Array.isArray(map.map)) return []\n\n const entries: { name: string; query: unknown }[] = []\n for (const entry of map.map) {\n if (!isJsonObject(entry) || typeof entry.key !== \"string\" || !isJsonObject(entry.value)) {\n return []\n }\n entries.push({ name: entry.key.toLowerCase(), query: entry.value.query })\n }\n return entries\n}\n",
39
- "import { randomUUID } from \"node:crypto\"\nimport type { DatasetDefinition } from \"@sixb/core\"\nimport type {\n BeginDatasetMergeInput,\n BeginDatasetWriteInput,\n DatasetMergeCommitResult,\n DatasetProducer,\n DatasetVersion,\n DatasetVersionLineage,\n DatasetWriteCommitResult,\n DatasetWriteMode,\n LakeMergeSession,\n LakeWriteSession,\n} from \"@sixb/core/lake-storage\"\nimport {\n assertUnsequencedDatasetWrite,\n getDatasetPrimaryKeyColumns,\n hasDatasetProvenanceChanges,\n LakeConcurrencyError,\n LakeStorageError,\n lineageAtCommit,\n retryDatasetMergeCommit,\n} from \"@sixb/core/lake-storage\"\nimport type { DuckLakeStorageOptions } from \"../types\"\nimport { localCatalogCoordinationKey } from \"./catalog-key\"\nimport {\n type ApplyDatasetRowsResult,\n applyDatasetRowsFromRelation,\n assertDatasetWriteMode,\n type CommitRowCount,\n} from \"./dataset-row-commit\"\nimport { applyDatasetMergeFromRelation } from \"./dataset-row-merge\"\nimport { getBigIntLike } from \"./duckdb-row\"\nimport type { DuckDbQueryRuntime } from \"./duckdb-runtime\"\nimport type { DuckLakeConnectionManager } from \"./ducklake-connection-manager\"\nimport type { DuckLakeDatasetCatalog } from \"./ducklake-dataset-catalog\"\nimport { createDuckLakeMergeSession, type DuckLakeCommitMergeInput } from \"./ducklake-merge-session\"\nimport type { DuckLakeSnapshotReader, DuckLakeVersionSummary } from \"./ducklake-snapshot-reader\"\nimport {\n beginTransactionOnLatestVersion,\n CatalogMovedError,\n commitVersionTransaction,\n isSqliteCatalog,\n rerunWhenCatalogMoves,\n} from \"./ducklake-version-transaction\"\nimport { createDuckLakeWriteSession, type DuckLakeCommitWriteInput } from \"./ducklake-write-session\"\nimport { encodeLineage } from \"./lineage-encoding\"\nimport { encodeDatasetTableName } from \"./names\"\nimport {\n duckLakeAlias,\n duckLakeMetadataTableName,\n qualifiedTableName,\n quoteIdentifier,\n quoteSqlString,\n} from \"./sql\"\nimport { parseCommitMetadata, parseVersionId, type SixbCommitMetadata } from \"./versions\"\n\nexport interface DuckLakeCommitDatasetVersionInput {\n readonly dataset: DatasetDefinition\n readonly mode: DatasetWriteMode\n readonly expectedLatestVersionId?: string | null\n readonly commitMessage: string\n readonly producer?: BeginDatasetWriteInput[\"producer\"]\n readonly inputs?: BeginDatasetWriteInput[\"inputs\"]\n /** The lineage of the rows written, as `BeginDatasetWriteInput.lineage`. */\n readonly lineage?: BeginDatasetWriteInput[\"lineage\"]\n applyChanges(\n runtime: DuckDbQueryRuntime,\n context: DuckLakeApplyChangesContext\n ): Promise<ApplyDatasetRowsResult>\n}\n\ninterface DuckLakeCommitVersionOutcomeInput\n extends Omit<DuckLakeCommitDatasetVersionInput, \"expectedLatestVersionId\" | \"mode\"> {\n readonly mode: DatasetWriteMode | \"merge\"\n readonly expectedLatestVersionId?: string | null\n readonly allowInitialNoOp?: boolean\n readonly signal?: AbortSignal\n readonly optimisticOperation?: \"commit\" | \"merge commit\"\n}\n\ninterface DuckLakeCommitVersionOutcomeRuntimeInput extends DuckLakeCommitVersionOutcomeInput {\n readonly runtime: DuckDbQueryRuntime\n}\n\nexport interface DuckLakeApplyChangesContext {\n readonly previousRowCount?: number\n readonly validatedPrimaryKeyColumns?: readonly string[]\n}\n\n/**\n * Owns the durable DuckLake transaction for a staged Sixb write.\n *\n * Write sessions keep validation and temp staging table mechanics close to the\n * caller. This coordinator handles everything that changes shared DuckLake\n * state: attachment refresh, optimistic guards, row replacement/append,\n * commit_extra_info, no-op detection, and DatasetVersion hydration.\n */\nexport class DuckLakeWriteCoordinator {\n constructor(\n private readonly options: DuckLakeStorageOptions,\n private readonly connections: DuckLakeConnectionManager,\n private readonly datasets: DuckLakeDatasetCatalog,\n private readonly snapshots: DuckLakeSnapshotReader\n ) {}\n\n async beginWrite(input: BeginDatasetWriteInput): Promise<LakeWriteSession> {\n this.connections.assertOpen()\n\n const definition = await this.datasets.getDataset(input.dataset.id)\n if (!definition) {\n throw new LakeStorageError(`[SixbDuckLake] Unknown dataset '${input.dataset.id}'.`)\n }\n\n this.datasets.assertSchema(definition)\n assertUnsequencedDatasetWrite(definition)\n const mode = input.mode ?? \"snapshot\"\n assertDatasetWriteMode(mode, \"write\")\n\n // Staging tables are connection-scoped in DuckDB. In the single-runtime\n // model every active write session creates a uniquely named temp table on\n // the shared runtime; the durable commit later runs on that same\n // connection under an exclusive queue slot.\n const runtime = await this.connections.stagingRuntime()\n return createDuckLakeWriteSession({\n commitWrite: (options) => this.commitWrite(options),\n runtime,\n write: {\n ...input,\n dataset: definition,\n mode,\n },\n })\n }\n\n async beginMerge(input: BeginDatasetMergeInput): Promise<LakeMergeSession> {\n this.connections.assertOpen()\n\n const definition = await this.datasets.getDataset(input.dataset.id)\n if (!definition) {\n throw new LakeStorageError(`[SixbDuckLake] Unknown dataset '${input.dataset.id}'.`)\n }\n if (getDatasetPrimaryKeyColumns(definition) === null) {\n throw new LakeStorageError(\n `[SixbDuckLake] Dataset '${definition.id}' must define a primaryKey before it can be merged.`\n )\n }\n\n this.datasets.assertSchema(definition)\n const latestVersion = await this.connections.withAttachedRuntime((runtime) =>\n this.snapshots.getLatestVersionForDefinition(runtime, definition)\n )\n if (\n input.expectedLatestVersionId !== undefined &&\n latestVersion?.versionId !== input.expectedLatestVersionId\n ) {\n throw new LakeConcurrencyError(\n `[SixbDuckLake] Optimistic merge start failed for dataset '${definition.id}': expected latest version '${input.expectedLatestVersionId}', found '${latestVersion?.versionId ?? \"none\"}'.`\n )\n }\n const runtime = await this.connections.stagingRuntime()\n return createDuckLakeMergeSession({\n commitMerge: (options) => this.commitMerge(options),\n runtime,\n merge: { ...input, dataset: definition },\n baseVersionId: latestVersion?.versionId ?? null,\n })\n }\n\n private async commitWrite(input: DuckLakeCommitWriteInput): Promise<DatasetWriteCommitResult> {\n const definition = await this.datasets.getDataset(input.write.dataset.id)\n if (!definition) {\n throw new LakeStorageError(`[SixbDuckLake] Unknown dataset '${input.write.dataset.id}'.`)\n }\n\n const mode = input.write.mode ?? \"snapshot\"\n assertDatasetWriteMode(mode, \"write\")\n\n return this.commitDatasetVersion({\n dataset: definition,\n mode,\n expectedLatestVersionId: input.commit?.expectedLatestVersionId,\n commitMessage: input.commit?.commitMessage ?? `write dataset ${input.write.dataset.id}`,\n producer: input.write.producer,\n inputs: input.write.inputs,\n lineage: input.write.lineage,\n applyChanges: (runtime, context) =>\n this.applyStagedRows({\n ...input,\n runtime,\n previousRowCount: context.previousRowCount,\n }),\n })\n }\n\n private async commitMerge(input: DuckLakeCommitMergeInput): Promise<DatasetMergeCommitResult> {\n const definition = await this.datasets.getDataset(input.merge.dataset.id)\n if (!definition) {\n throw new LakeStorageError(`[SixbDuckLake] Unknown dataset '${input.merge.dataset.id}'.`)\n }\n if (getDatasetPrimaryKeyColumns(definition) === null) {\n throw new LakeStorageError(\n `[SixbDuckLake] Dataset '${definition.id}' must define a primaryKey before it can be merged.`\n )\n }\n\n return retryDatasetMergeCommit(input.merge, input.commit, (rebase) =>\n this.withCommitRuntime(async (runtime) => {\n input.commit?.signal?.throwIfAborted()\n const baseVersionId = rebase\n ? ((await this.snapshots.getLatestVersionForDefinition(runtime, definition))?.versionId ??\n null)\n : input.baseVersionId\n return this.commitVersionOutcomeOnExclusiveRuntime(runtime, {\n dataset: definition,\n mode: \"merge\",\n expectedLatestVersionId: baseVersionId,\n allowInitialNoOp: !input.commit?.createInitialVersion,\n signal: input.commit?.signal,\n optimisticOperation: \"merge commit\",\n commitMessage: input.commit?.commitMessage ?? `merge dataset ${definition.id}`,\n producer: input.merge.producer,\n inputs: input.merge.inputs,\n applyChanges: async (commitRuntime, context) => {\n const result = await applyDatasetMergeFromRelation({\n options: this.options,\n runtime: commitRuntime,\n dataset: definition,\n stagingTableName: input.stagingTableName,\n sequenceColumnName: input.sequenceColumnName,\n kindColumnName: input.kindColumnName,\n previousRowCount: context.previousRowCount,\n validatedPrimaryKeyColumns: context.validatedPrimaryKeyColumns,\n })\n if (result.sourceRowCount !== input.changesWritten) {\n throw new LakeStorageError(\n `[SixbDuckLake] Staged merge for dataset '${definition.id}' accepted ${input.changesWritten} change(s), but DuckLake saw ${result.sourceRowCount} source change(s) at commit time.`\n )\n }\n return result\n },\n })\n })\n )\n }\n\n async commitDatasetVersion(\n input: DuckLakeCommitDatasetVersionInput\n ): Promise<DatasetWriteCommitResult> {\n return this.withCommitRuntime((runtime) =>\n this.commitDatasetVersionOnExclusiveRuntime(runtime, input)\n )\n }\n\n async withCommitRuntime<T>(run: (runtime: DuckDbQueryRuntime) => Promise<T>): Promise<T> {\n return withCatalogCommitLock(this.options, async () => {\n // `withExclusiveAttached` refreshes local catalogs before the exclusive\n // slot, then holds the local attachment boundary through the commit.\n return this.connections.withExclusiveAttached(run)\n })\n }\n\n async commitDatasetVersionOnExclusiveRuntime(\n runtime: DuckDbQueryRuntime,\n input: DuckLakeCommitDatasetVersionInput\n ): Promise<DatasetWriteCommitResult> {\n assertUnsequencedDatasetWrite(input.dataset)\n const result = await this.commitVersionOutcomeOnExclusiveRuntime(runtime, input)\n if (result.version === null) {\n throw new LakeStorageError(\n `[SixbDuckLake] No DuckLake changes were committed for dataset '${input.dataset.id}', and no previous version exists.`\n )\n }\n\n return { ...result.version, outcome: result.outcome }\n }\n\n private async commitVersionOutcomeOnExclusiveRuntime(\n runtime: DuckDbQueryRuntime,\n input: DuckLakeCommitVersionOutcomeInput\n ): Promise<DatasetMergeCommitResult> {\n // Staged rows outlive a failed transaction, so a rerun applies exactly the same changes.\n return rerunWhenCatalogMoves(\n input.dataset.id,\n () => this.commitDatasetVersionUnlocked({ ...input, runtime }),\n input.signal\n )\n }\n\n private async commitDatasetVersionUnlocked(\n input: DuckLakeCommitVersionOutcomeRuntimeInput\n ): Promise<DatasetMergeCommitResult> {\n // Capture the write connection's last committed DuckLake snapshot before\n // and after COMMIT. The commitId in DuckLake commit_extra_info proves\n // which snapshot belongs to this transaction.\n const previousWriteSnapshotId = await this.lastCommittedSnapshotId(input.runtime)\n\n let committed = false\n try {\n const latestVersion = await this.beginVersionTransaction(input)\n if (input.expectedLatestVersionId !== undefined) {\n this.assertExpectedLatestVersion({\n datasetId: input.dataset.id,\n expectedLatestVersionId: input.expectedLatestVersionId,\n actualLatestVersionId: latestVersion?.versionId ?? null,\n operation: input.optimisticOperation ?? \"commit\",\n })\n }\n\n const lineage = lineageAtCommit({\n mode: input.mode,\n schema: input.dataset.schema,\n producer: input.producer,\n written: input.lineage,\n parent: latestVersion,\n })\n\n const changeResult = await input.applyChanges(input.runtime, {\n previousRowCount: latestVersion?.rowCount,\n validatedPrimaryKeyColumns: latestVersion?.validatedPrimaryKeyColumns,\n })\n input.signal?.throwIfAborted()\n\n // A commit that changes no rows is decided against the latest version it compared with.\n const noOpBase = changeResult.dataChangeExpected\n ? undefined\n : latestVersion === undefined\n ? await this.latestVersionAtReadSnapshot(input)\n : latestVersion\n\n const createsVersion =\n noOpBase === undefined || this.noOpCreatesVersion(input, noOpBase, lineage)\n if (createsVersion && mustClaimTable(input, changeResult, lineage)) {\n await this.claimTable(input)\n }\n\n const commitId = randomUUID()\n await this.setCommitMetadata(\n input,\n commitId,\n commitRowCount(input, changeResult, latestVersion),\n lineage\n )\n\n await commitVersionTransaction(\n input.runtime,\n input.dataset.id,\n createsVersion && mustCommitOnReadSnapshot(input, changeResult)\n ? { poisonRuntime: () => this.connections.poisonRuntime() }\n : undefined\n )\n committed = true\n\n const committedWriteSnapshotId = await this.lastCommittedSnapshotId(input.runtime)\n try {\n return await this.versionForCommittedWrite({\n ...input,\n commitId,\n previousWriteSnapshotId,\n committedWriteSnapshotId,\n changeResult,\n noOpBaseVersionId: noOpBase?.versionId ?? null,\n })\n } finally {\n await this.connections.detachLocalCatalogAfterCommit(input.runtime)\n }\n } catch (error) {\n if (!committed) {\n await this.rollbackTransaction(input.runtime)\n }\n throw error\n }\n }\n\n private async versionForCommittedWrite(\n input: DuckLakeCommitVersionOutcomeRuntimeInput & {\n readonly commitId: string\n readonly previousWriteSnapshotId: string | null\n readonly committedWriteSnapshotId: string | null\n readonly changeResult: ApplyDatasetRowsResult\n /** The latest version a commit that changes no rows was compared with. */\n readonly noOpBaseVersionId: string | null\n }\n ): Promise<DatasetMergeCommitResult> {\n // Hydrate the committed version on the same exclusive runtime. That keeps\n // snapshot matching and row-count fallback inside the same serialized\n // connection state that just committed.\n const ownSnapshotId = await this.findOwnSnapshotId(\n input.runtime,\n input.dataset.id,\n input.commitId,\n input.previousWriteSnapshotId,\n input.committedWriteSnapshotId\n )\n\n if (ownSnapshotId !== null) {\n const version = await this.snapshots.getVersionForSnapshot(\n input.runtime,\n input.dataset,\n ownSnapshotId\n )\n if (version) {\n return { outcome: \"created\", version }\n }\n\n throw new LakeStorageError(\n `[SixbDuckLake] DuckLake committed snapshot '${ownSnapshotId}' for dataset '${input.dataset.id}', but Sixb could not hydrate it as a dataset version.`\n )\n }\n\n if (!input.changeResult.dataChangeExpected) {\n const version = await this.versionForNoOpCommit(\n input.runtime,\n input.dataset,\n input.allowInitialNoOp ?? false\n )\n if (input.expectedLatestVersionId !== undefined) {\n this.assertExpectedLatestVersion({\n datasetId: input.dataset.id,\n expectedLatestVersionId: input.expectedLatestVersionId,\n actualLatestVersionId: version?.versionId ?? null,\n operation: input.optimisticOperation ?? \"commit\",\n })\n }\n\n // Nothing was committed: the write matched the version this transaction read. Another\n // writer moved the latest version since, and the write may not match that one.\n if ((version?.versionId ?? null) !== input.noOpBaseVersionId) {\n throw new CatalogMovedError(\n `[SixbDuckLake] Dataset '${input.dataset.id}' changed while an unchanged write was compared with it.`\n )\n }\n\n return {\n outcome: \"unchanged\",\n version,\n }\n }\n\n if (input.committedWriteSnapshotId === input.previousWriteSnapshotId) {\n throw new LakeStorageError(\n `[SixbDuckLake] DuckLake commit for dataset '${input.dataset.id}' completed without producing a snapshot for this non-empty write.`\n )\n }\n\n throw new LakeStorageError(\n `[SixbDuckLake] DuckLake commit for dataset '${input.dataset.id}' completed, but Sixb could not find a matching snapshot for this write.`\n )\n }\n\n private async applyStagedRows(\n input: DuckLakeCommitWriteInput & {\n readonly runtime: DuckDbQueryRuntime\n readonly previousRowCount?: number\n }\n ): Promise<ApplyDatasetRowsResult> {\n const mode = input.write.mode ?? \"snapshot\"\n const result = await applyDatasetRowsFromRelation({\n options: this.options,\n runtime: input.runtime,\n dataset: input.write.dataset,\n mode,\n sourceRelationSql: quoteIdentifier(input.stagingTableName),\n previousRowCount: input.previousRowCount,\n })\n\n if (result.sourceRowCount !== input.rowsWritten) {\n throw new LakeStorageError(\n `[SixbDuckLake] Staged write for dataset '${input.write.dataset.id}' accepted ${input.rowsWritten} row(s), but DuckLake saw ${result.sourceRowCount} source row(s) at commit time.`\n )\n }\n\n return result\n }\n\n private async setCommitMetadata(\n input: DuckLakeCommitVersionOutcomeRuntimeInput,\n commitId: string,\n rowCount: CommitRowCount,\n lineage: DatasetVersionLineage | undefined\n ): Promise<void> {\n // DuckLake stores this JSON on the snapshot it creates for the current\n // transaction. Version id, timestamp, and data-change detection still come\n // from DuckLake itself. commitId is only a transaction correlation token so\n // concurrent writers do not accidentally hydrate each other's snapshots.\n // Every keyed data path either replaces the baseline or validates its uniqueness before this\n // marker is persisted. Merge commits can therefore avoid repeating that full-table audit.\n const validatedPrimaryKeyColumns = getDatasetPrimaryKeyColumns(input.dataset)\n const metadata: SixbCommitMetadata = {\n kind: \"datasetVersion\",\n datasetId: input.dataset.id,\n commitId,\n mode: input.mode,\n producer: input.producer ? structuredClone(input.producer) : undefined,\n inputs: input.inputs ? structuredClone(input.inputs) : undefined,\n ...(rowCount.kind === \"exact\" ? { rowCount: rowCount.value } : {}),\n ...(validatedPrimaryKeyColumns !== null\n ? { validatedPrimaryKeyColumns: [...validatedPrimaryKeyColumns] }\n : {}),\n ...(lineage === undefined ? {} : { lineage: encodeLineage(lineage) }),\n }\n\n await input.runtime.run(\n `CALL ${quoteIdentifier(duckLakeAlias(this.options))}.set_commit_message(${quoteSqlString(\n \"Sixb\"\n )}, ${quoteSqlString(input.commitMessage)}, extra_info => ${quoteSqlString(\n JSON.stringify({ sixb: metadata })\n )})`\n )\n }\n\n /**\n * Claims the table for the version this transaction commits by reapplying its current comment:\n * an idempotent metadata write, which DuckLake records as altering the table. A transaction\n * that changes a table another one altered since it began then fails to commit, before storing\n * anything, and reruns on the new latest version (see `mustClaimTable`).\n *\n * It also gives a version that changes no rows, an initial empty write or a change of\n * provenance, a DuckLake snapshot: DuckLake 1.5.2 creates none for a transaction whose data and\n * metadata are unchanged, and set_commit_message alone cannot force one.\n *\n * Altering a table bumps DuckLake's catalog-wide schema version: every connection reloads its\n * catalog, and concurrent writers to other tables slow down. Versions claim only when needed.\n */\n private async claimTable(input: DuckLakeCommitVersionOutcomeRuntimeInput): Promise<void> {\n const table = qualifiedTableName(this.options, encodeDatasetTableName(input.dataset.id))\n const descriptionSql =\n input.dataset.description === undefined ? \"NULL\" : quoteSqlString(input.dataset.description)\n await input.runtime.run(`COMMENT ON TABLE ${table} IS ${descriptionSql}`)\n }\n\n /** A commit that changes no rows still creates a version for a first version or new provenance. */\n private noOpCreatesVersion(\n input: DuckLakeCommitVersionOutcomeRuntimeInput,\n latestVersion: DuckLakeVersionSummary | null,\n lineage: DatasetVersionLineage | undefined\n ): boolean {\n if (!latestVersion) {\n return !input.allowInitialNoOp\n }\n\n return (\n input.mode !== \"merge\" &&\n hasDatasetProvenanceChanges(latestVersion, {\n datasetId: input.dataset.id,\n schema: input.dataset.schema,\n producer: input.producer,\n inputs: input.inputs,\n lineage,\n })\n )\n }\n\n /**\n * The latest version a write that began without reading it compared its rows with: the one at\n * the lake snapshot its first read fixed. The version metadata also shows versions committed\n * since. One of this dataset means the rows were compared with an older version, so the write\n * reruns.\n */\n private async latestVersionAtReadSnapshot(\n input: DuckLakeCommitVersionOutcomeRuntimeInput\n ): Promise<DuckLakeVersionSummary | null> {\n const { snapshotId, latestVersion } =\n await this.snapshots.getLatestVersionSummaryAtCurrentSnapshot(input.runtime, input.dataset)\n\n if (latestVersion && BigInt(parseVersionId(latestVersion.versionId)) > BigInt(snapshotId)) {\n throw new CatalogMovedError(\n `[SixbDuckLake] Dataset '${input.dataset.id}' changed while an unchanged write was compared with it.`\n )\n }\n\n return latestVersion\n }\n\n private async versionForNoOpCommit(\n runtime: DuckDbQueryRuntime,\n definition: DatasetDefinition,\n allowInitialNoOp: boolean\n ): Promise<DatasetVersion | null> {\n const latestVersion = await this.snapshots.getLatestVersionForDefinition(runtime, definition)\n if (latestVersion) {\n return latestVersion\n }\n\n if (allowInitialNoOp) {\n return null\n }\n\n throw new LakeStorageError(\n `[SixbDuckLake] No DuckLake changes were committed for dataset '${definition.id}', and no previous version exists.`\n )\n }\n\n private async rollbackTransaction(runtime: DuckDbQueryRuntime): Promise<void> {\n try {\n await runtime.run(\"ROLLBACK\")\n } catch {\n // Preserve the original write failure. DuckDB may already have closed\n // the transaction if COMMIT itself failed.\n }\n }\n\n /**\n * Every version but a snapshot keeps its parent's rows, and the lineage it records merges the\n * parent's. A snapshot replaces its parent: it reads it only to guard on it, or on SQLite, whose\n * later reads inside the transaction would block its commit.\n */\n private async beginVersionTransaction(\n input: DuckLakeCommitVersionOutcomeRuntimeInput\n ): Promise<DuckLakeVersionSummary | null | undefined> {\n if (\n input.mode === \"snapshot\" &&\n input.expectedLatestVersionId === undefined &&\n !isSqliteCatalog(this.options.catalog)\n ) {\n await input.runtime.run(\"BEGIN TRANSACTION\")\n return undefined\n }\n\n return beginTransactionOnLatestVersion({\n options: this.options,\n runtime: input.runtime,\n datasetId: input.dataset.id,\n signal: input.signal,\n readLatestVersion: () =>\n this.snapshots.getLatestVersionSummaryAtCurrentSnapshot(input.runtime, input.dataset),\n })\n }\n\n private async lastCommittedSnapshotId(runtime: DuckDbQueryRuntime): Promise<string | null> {\n // DuckLake reports the last snapshot committed by this connection.\n const [row] = await runtime.query(\n `SELECT id FROM ${quoteIdentifier(duckLakeAlias(this.options))}.last_committed_snapshot()`\n )\n if (row === undefined || row.id === null || row.id === undefined) {\n return null\n }\n\n return String(getBigIntLike(row, \"id\"))\n }\n\n private async findSnapshotIdByCommitId(\n runtime: DuckDbQueryRuntime,\n datasetId: string,\n commitId: string,\n snapshotId?: string\n ): Promise<string | null> {\n if (snapshotId !== undefined) {\n assertDuckLakeSnapshotId(snapshotId)\n }\n\n const ducklakeSnapshotChanges = duckLakeMetadataTableName(\n this.options,\n \"ducklake_snapshot_changes\"\n )\n const whereSql = snapshotId === undefined ? \"\" : `WHERE snapshot_id = ${snapshotId}`\n const orderSql = snapshotId === undefined ? \"ORDER BY snapshot_id DESC\" : \"\"\n const rows = await runtime.query(`\n SELECT snapshot_id, commit_extra_info\n FROM ${ducklakeSnapshotChanges}\n ${whereSql}\n ${orderSql}\n `)\n\n for (const row of rows) {\n const metadata = parseCommitMetadata(row.commit_extra_info)\n if (metadata?.datasetId === datasetId && metadata.commitId === commitId) {\n return String(getBigIntLike(row, \"snapshot_id\"))\n }\n }\n\n return null\n }\n\n private async findOwnSnapshotId(\n runtime: DuckDbQueryRuntime,\n datasetId: string,\n commitId: string,\n previousWriteSnapshotId: string | null,\n committedWriteSnapshotId: string | null\n ): Promise<string | null> {\n if (committedWriteSnapshotId === null || committedWriteSnapshotId === previousWriteSnapshotId) {\n return null\n }\n\n const exactMatch = await this.findSnapshotIdByCommitId(\n runtime,\n datasetId,\n commitId,\n committedWriteSnapshotId\n )\n if (exactMatch !== null) {\n return exactMatch\n }\n\n // Defensive fallback for driver/version edge cases. The expected hot path\n // above reads a single metadata row keyed by last_committed_snapshot().\n return this.findSnapshotIdByCommitId(runtime, datasetId, commitId)\n }\n\n private assertExpectedLatestVersion(input: {\n readonly datasetId: string\n readonly expectedLatestVersionId?: string | null\n readonly actualLatestVersionId: string | null\n readonly operation: \"commit\" | \"merge commit\"\n }): void {\n if (input.expectedLatestVersionId === undefined) {\n return\n }\n\n if (input.actualLatestVersionId !== input.expectedLatestVersionId) {\n throw new LakeConcurrencyError(\n `[SixbDuckLake] Optimistic ${input.operation} failed for dataset '${input.datasetId}': expected latest version '${input.expectedLatestVersionId ?? \"none\"}', found '${input.actualLatestVersionId ?? \"none\"}'.`\n )\n }\n }\n}\n\n/**\n * Whether a version must claim its table so that a concurrent commit cannot build on it unseen.\n *\n * DuckLake commits a transaction on top of snapshots committed since it began unless one of them\n * altered the table or deleted rows it held. Only the earlier commit decides: a claim protects the\n * version that makes it from concurrent commits that land after it, never the reverse. A commit\n * that builds on a version it did not see keeps that version's rows, but stores the lineage of\n * the parent it read. For lineage, that is only wrong when the unseen version's stored lineage\n * carries dependencies: rows that depend on their own columns only add nothing to any lineage, so\n * two unkeyed appends to a dataset no pipeline writes may commit in any order. Commits that record\n * more of their parent than its lineage do not build on unseen versions (see\n * `mustCommitOnReadSnapshot`).\n *\n * - A version that changes no rows claims: it is also how it gets a snapshot.\n * - A write into an empty table claims, whatever it holds. It deletes nothing, so a snapshot that\n * also read the table empty would delete nothing either, and keep the rows it replaces.\n * - A snapshot that deleted rows needs no claim: any concurrent change to the table conflicts with\n * its deletes.\n * - A keyed append or merge claims. DuckLake has no primary key: two writes that insert one new\n * key both commit unless the earlier one claims.\n * - An unkeyed append into a table with rows claims when the lineage it stores carries a\n * dependency, or is unknown. A concurrent snapshot of that table deletes rows, and conflicts.\n */\nfunction mustClaimTable(\n input: DuckLakeCommitVersionOutcomeRuntimeInput,\n changeResult: ApplyDatasetRowsResult,\n lineage: DatasetVersionLineage | undefined\n): boolean {\n if (!changeResult.dataChangeExpected || changeResult.targetWasEmpty) {\n return true\n }\n\n if (input.mode === \"snapshot\") {\n return false\n }\n\n return (\n getDatasetPrimaryKeyColumns(input.dataset) !== null ||\n carriesDependencies(input.producer, lineage)\n )\n}\n\n/**\n * Whether a version must fail on any snapshot committed since its transaction began, rather than\n * commit on top of one that does not conflict with it. A version that did not claim its table (see\n * `mustClaimTable`) can only be built on unseen by a commit that records nothing of its parent but\n * its lineage, which that version cannot change. Two kinds of commit record more:\n *\n * - One that inserts and deletes no rows of its table, such as a version of new provenance, a\n * merge that only advances source ordering, or a schema change. DuckLake checks it against\n * nothing, and it would stand for rows it never compared.\n * - An unkeyed append guarded on the version it read, which an unclaimed append could move.\n */\nfunction mustCommitOnReadSnapshot(\n input: DuckLakeCommitVersionOutcomeRuntimeInput,\n changeResult: ApplyDatasetRowsResult\n): boolean {\n if (!changeResult.changedTableRows) {\n return true\n }\n\n return (\n input.expectedLatestVersionId !== undefined &&\n input.mode === \"append\" &&\n getDatasetPrimaryKeyColumns(input.dataset) === null\n )\n}\n\n/** Whether a stored lineage says the version's rows depend on any column but their own. */\nfunction carriesDependencies(\n producer: DatasetProducer | undefined,\n lineage: DatasetVersionLineage | undefined\n): boolean {\n if (lineage === undefined) {\n // A pipeline version without lineage could hold anything.\n return producer?.kind === \"pipeline\"\n }\n\n if (\"unknown\" in lineage) {\n return true\n }\n\n return lineage.rows.length > 0 || Object.values(lineage.columns).some((refs) => refs.length > 0)\n}\n\nfunction commitRowCount(\n input: Pick<DuckLakeCommitVersionOutcomeInput, \"expectedLatestVersionId\" | \"mode\">,\n changeResult: ApplyDatasetRowsResult,\n latestVersion: DuckLakeVersionSummary | null | undefined\n): CommitRowCount {\n // Unguarded append commits can be retried by DuckLake after this transaction\n // read the previous latest version. In that case previousRowCount +\n // sourceRowCount can underreport the committed snapshot, so leave the count unknown.\n if (input.mode === \"append\" && input.expectedLatestVersionId === undefined) {\n return { kind: \"unknown\" }\n }\n\n if (changeResult.resultingRowCount.kind === \"exact\") {\n return changeResult.resultingRowCount\n }\n\n if (input.mode === \"append\" && latestVersion === null) {\n return { kind: \"exact\", value: changeResult.sourceRowCount }\n }\n\n return { kind: \"unknown\" }\n}\n\nfunction assertDuckLakeSnapshotId(snapshotId: string): void {\n if (!/^\\d+$/.test(snapshotId)) {\n throw new LakeStorageError(`[SixbDuckLake] Invalid DuckLake snapshot id '${snapshotId}'.`)\n }\n}\n\n// Local metadata catalogs are useful for dev/test, but they do not have the\n// same multi-connection conflict behavior as PostgreSQL. Serialize local\n// commits within this process so a losing writer cannot hydrate another\n// connection's snapshot during DuckLake conflict handling.\nconst localCatalogCommitLocks = new Map<string, Promise<void>>()\n\nasync function withCatalogCommitLock<T>(\n options: DuckLakeStorageOptions,\n run: () => Promise<T>\n): Promise<T> {\n const key = localCatalogCoordinationKey(options)\n if (key === undefined) {\n return run()\n }\n\n const previous = localCatalogCommitLocks.get(key) ?? Promise.resolve()\n const ready = previous.catch(() => {})\n let release!: () => void\n const next = new Promise<void>((resolve) => {\n release = resolve\n })\n const current = ready.then(() => next)\n localCatalogCommitLocks.set(key, current)\n\n await ready\n try {\n return await run()\n } finally {\n release()\n if (localCatalogCommitLocks.get(key) === current) {\n localCatalogCommitLocks.delete(key)\n }\n }\n}\n",
40
- "import type { DatasetDefinition } from \"@sixb/core\"\nimport {\n type DatasetSequenceChange,\n type DatasetSequenceState,\n getDatasetPrimaryKeyColumns,\n LakeStorageError,\n reconcileDatasetSequences,\n} from \"@sixb/core/lake-storage\"\nimport type { DuckLakeStorageOptions } from \"../types\"\nimport { type ApplyDatasetRowsResult, inspectUniqueKeyedRelation } from \"./dataset-row-commit\"\nimport { getBigIntLike, getOptionalString, getString } from \"./duckdb-row\"\nimport type { DuckDbQueryRuntime } from \"./duckdb-runtime\"\nimport { encodeDatasetSequenceTableName, encodeDatasetTableName } from \"./names\"\nimport { datasetSchemaColumnNamesSql } from \"./schema\"\nimport { qualifiedTableName, quoteIdentifier, quoteSqlString } from \"./sql\"\n\nexport interface ApplyDatasetMergeFromRelationInput {\n readonly options: DuckLakeStorageOptions\n readonly runtime: DuckDbQueryRuntime\n readonly dataset: DatasetDefinition\n readonly stagingTableName: string\n readonly sequenceColumnName: string\n readonly kindColumnName: string\n readonly previousRowCount?: number\n readonly validatedPrimaryKeyColumns?: readonly string[]\n}\n\ninterface MergeEffectCounts {\n readonly inserts: number\n readonly updates: number\n readonly deletes: number\n}\n\nexport async function applyDatasetMergeFromRelation(\n input: ApplyDatasetMergeFromRelationInput\n): Promise<ApplyDatasetRowsResult> {\n const primaryKeyColumns = getDatasetPrimaryKeyColumns(input.dataset)\n if (primaryKeyColumns === null) {\n throw new LakeStorageError(\n `[SixbDuckLake] Dataset '${input.dataset.id}' must define a primaryKey before it can be merged.`\n )\n }\n\n const stagingTable = quoteIdentifier(input.stagingTableName)\n const targetTable = qualifiedTableName(input.options, encodeDatasetTableName(input.dataset.id))\n const sourceRowCount = await countRows(input.runtime, stagingTable)\n const previousRowCount = await currentBaselineRowCount(input, targetTable, primaryKeyColumns)\n\n return withMaterializedFinalChanges(\n input,\n primaryKeyColumns,\n async (finalChanges, orderingChanged) => {\n const effects = await countMergeEffects(input, targetTable, finalChanges, primaryKeyColumns)\n const effectiveChangeCount = effects.inserts + effects.updates + effects.deletes\n\n if (effectiveChangeCount === 0) {\n return {\n dataChangeExpected: orderingChanged,\n sourceRowCount,\n resultingRowCount: { kind: \"exact\", value: previousRowCount },\n targetWasEmpty: previousRowCount === 0,\n changedTableRows: false,\n }\n }\n\n const keyMatchSql = primaryKeyMatchSql(primaryKeyColumns, \"target\", \"source\")\n const rowDifferenceSql = datasetRowDifferenceSql(input.dataset, \"target\", \"source\")\n const kindColumn = `source.${quoteIdentifier(input.kindColumnName)}`\n\n await input.runtime.run(`\n DELETE FROM ${targetTable} AS target\n USING ${finalChanges} AS source\n WHERE ${keyMatchSql}\n AND (\n ${kindColumn} = ${quoteSqlString(\"delete\")}\n OR (\n ${kindColumn} = ${quoteSqlString(\"upsert\")}\n AND (${rowDifferenceSql})\n )\n )\n `)\n\n const columnsSql = datasetSchemaColumnNamesSql(input.dataset.schema)\n const selectedColumnsSql = input.dataset.schema.columns\n .map((column) => `source.${quoteIdentifier(column.name)}`)\n .join(\", \")\n const firstSequenceColumnName = firstSequenceName(input.sequenceColumnName)\n await input.runtime.run(`\n INSERT INTO ${targetTable} (${columnsSql})\n SELECT ${selectedColumnsSql}\n FROM ${finalChanges} AS source\n WHERE ${kindColumn} = ${quoteSqlString(\"upsert\")}\n AND NOT EXISTS (\n SELECT 1\n FROM ${targetTable} AS target\n WHERE ${keyMatchSql}\n )\n ORDER BY source.${quoteIdentifier(firstSequenceColumnName)}\n `)\n\n return {\n dataChangeExpected: true,\n sourceRowCount,\n resultingRowCount: {\n kind: \"exact\",\n value: previousRowCount + effects.inserts - effects.deletes,\n },\n targetWasEmpty: previousRowCount === 0,\n changedTableRows: true,\n }\n }\n )\n}\n\n/** The companion table is current state, committed in the same DuckLake transaction as rows.\n * It is not recovered from expirable snapshot history. Only keys present in staging are read.\n */\nasync function applySourceOrdering(\n input: ApplyDatasetMergeFromRelationInput,\n acceptedTable: string\n): Promise<boolean> {\n const source = quoteIdentifier(`${input.sequenceColumnName}_source`)\n const ordinal = quoteIdentifier(input.sequenceColumnName)\n const staging = quoteIdentifier(input.stagingTableName)\n const stateTable = qualifiedTableName(\n input.options,\n encodeDatasetSequenceTableName(input.dataset.id)\n )\n await input.runtime.run(\n `CREATE TEMP TABLE ${acceptedTable} (source_key VARCHAR, ordinal UBIGINT)`\n )\n let lastOrdinal = -1n\n let changed = false\n while (true) {\n const staged = await input.runtime.query(\n `SELECT ${ordinal} AS ordinal, ${source} AS source FROM ${staging}\n WHERE ${ordinal} > ${lastOrdinal} ORDER BY ${ordinal} LIMIT 1000`\n )\n if (staged.length === 0) return changed\n const changes = staged.map(\n (row) => JSON.parse(getString(row, \"source\")) as DatasetSequenceChange\n )\n lastOrdinal = getBigIntLike(staged[staged.length - 1]!, \"ordinal\")\n const batchKeys = changes.map((change) => quoteSqlString(change.key)).join(\",\")\n const current = await input.runtime.query(\n `SELECT * FROM ${stateTable} WHERE source_key IN (${batchKeys})`\n )\n const previous = new Map<string, DatasetSequenceState>()\n for (const row of current) {\n previous.set(getString(row, \"source_key\"), {\n sequence: getString(row, \"sequence\"),\n content: getOptionalString(row, \"content\") ?? null,\n })\n }\n // Earlier batches are visible inside this transaction. A later conflict rolls them all back.\n const { states, accepted } = reconcileDatasetSequences(input.dataset, previous, changes)\n if (accepted.size === 0) continue\n changed = true\n const stateValues: string[] = []\n const acceptedValues: string[] = []\n for (const [key, index] of accepted) {\n const state = states.get(key)!\n stateValues.push(\n `(${quoteSqlString(key)}, ${quoteSqlString(state.sequence)}, ${state.content === null ? \"NULL\" : quoteSqlString(state.content)})`\n )\n acceptedValues.push(`(${quoteSqlString(key)}, ${getBigIntLike(staged[index]!, \"ordinal\")})`)\n }\n const keys = [...accepted.keys()].map(quoteSqlString).join(\",\")\n await input.runtime.run(`DELETE FROM ${stateTable} WHERE source_key IN (${keys})`)\n await input.runtime.run(`INSERT INTO ${stateTable} VALUES ${stateValues.join(\",\")}`)\n await input.runtime.run(`DELETE FROM ${acceptedTable} WHERE source_key IN (${keys})`)\n await input.runtime.run(`INSERT INTO ${acceptedTable} VALUES ${acceptedValues.join(\",\")}`)\n }\n}\n\nasync function currentBaselineRowCount(\n input: ApplyDatasetMergeFromRelationInput,\n targetTable: string,\n primaryKeyColumns: readonly string[]\n): Promise<number> {\n // Sixb writes mark keyed versions only after the write path has enforced uniqueness. Older or\n // external versions carry no marker and keep the full defensive audit.\n if (sameColumns(input.validatedPrimaryKeyColumns, primaryKeyColumns)) {\n return input.previousRowCount ?? countRows(input.runtime, targetTable)\n }\n\n return inspectUniqueKeyedRelation({\n runtime: input.runtime,\n dataset: input.dataset,\n relationSql: targetTable,\n context: \"current baseline\",\n })\n}\n\nasync function withMaterializedFinalChanges<T>(\n input: ApplyDatasetMergeFromRelationInput,\n primaryKeyColumns: readonly string[],\n run: (finalChangesTable: string, orderingChanged: boolean) => Promise<T>\n): Promise<T> {\n const table = quoteIdentifier(`${input.stagingTableName}_final`)\n const acceptedTable = quoteIdentifier(`${input.stagingTableName}_accepted`)\n\n let outcome:\n | { readonly kind: \"success\"; readonly value: T }\n | { readonly kind: \"error\"; readonly error: unknown }\n try {\n const sequenced = input.dataset.sequenceBy !== undefined\n const orderingChanged = sequenced ? await applySourceOrdering(input, acceptedTable) : false\n const ordinal = quoteIdentifier(input.sequenceColumnName)\n const selectSql = sequenced\n ? `SELECT source.*, source.${ordinal} AS ${quoteIdentifier(firstSequenceName(input.sequenceColumnName))}\n FROM ${quoteIdentifier(input.stagingTableName)} AS source\n JOIN ${acceptedTable} AS accepted ON source.${ordinal} = accepted.ordinal`\n : finalChangesSelectSql(input, primaryKeyColumns)\n await input.runtime.run(`CREATE TEMP TABLE ${table} AS ${selectSql}`)\n outcome = { kind: \"success\", value: await run(table, orderingChanged) }\n } catch (error) {\n outcome = { kind: \"error\", error }\n }\n\n try {\n await input.runtime.run(`DROP TABLE IF EXISTS ${table}`)\n await input.runtime.run(`DROP TABLE IF EXISTS ${acceptedTable}`)\n } catch (cleanupError) {\n if (outcome.kind === \"success\") {\n throw cleanupError\n }\n }\n\n if (outcome.kind === \"error\") {\n throw outcome.error\n }\n\n return outcome.value\n}\n\nfunction finalChangesSelectSql(\n input: ApplyDatasetMergeFromRelationInput,\n primaryKeyColumns: readonly string[]\n): string {\n const sequenceColumn = quoteIdentifier(input.sequenceColumnName)\n const keyColumnsSql = primaryKeyColumns.map((column) => quoteIdentifier(column)).join(\", \")\n const rankColumn = quoteIdentifier(rankName(input.sequenceColumnName))\n const firstSequenceColumn = quoteIdentifier(firstSequenceName(input.sequenceColumnName))\n\n return `\n SELECT * EXCLUDE (${rankColumn})\n FROM (\n SELECT\n *,\n min(${sequenceColumn}) OVER (PARTITION BY ${keyColumnsSql}) AS ${firstSequenceColumn},\n row_number() OVER (\n PARTITION BY ${keyColumnsSql}\n ORDER BY ${sequenceColumn} DESC\n ) AS ${rankColumn}\n FROM ${quoteIdentifier(input.stagingTableName)}\n ) ranked_changes\n WHERE ${rankColumn} = 1\n `\n}\n\nasync function countMergeEffects(\n input: ApplyDatasetMergeFromRelationInput,\n targetTable: string,\n finalChanges: string,\n primaryKeyColumns: readonly string[]\n): Promise<MergeEffectCounts> {\n const matchColumn = primaryKeyColumns[0]\n if (matchColumn === undefined) {\n throw new LakeStorageError(\n `[SixbDuckLake] Dataset '${input.dataset.id}' primaryKey must contain at least one column.`\n )\n }\n\n const keyMatchSql = primaryKeyMatchSql(primaryKeyColumns, \"target\", \"source\")\n const targetMatch = `target.${quoteIdentifier(matchColumn)} IS NOT NULL`\n const kindColumn = `source.${quoteIdentifier(input.kindColumnName)}`\n const rowDifferenceSql = datasetRowDifferenceSql(input.dataset, \"target\", \"source\")\n const [row] = await input.runtime.query(`\n SELECT\n count(*) FILTER (\n WHERE ${kindColumn} = ${quoteSqlString(\"upsert\")} AND NOT (${targetMatch})\n ) AS insert_count,\n count(*) FILTER (\n WHERE ${kindColumn} = ${quoteSqlString(\"upsert\")}\n AND ${targetMatch}\n AND (${rowDifferenceSql})\n ) AS update_count,\n count(*) FILTER (\n WHERE ${kindColumn} = ${quoteSqlString(\"delete\")} AND ${targetMatch}\n ) AS delete_count\n FROM ${finalChanges} AS source\n LEFT JOIN ${targetTable} AS target ON ${keyMatchSql}\n `)\n\n return {\n inserts: row === undefined ? 0 : Number(getBigIntLike(row, \"insert_count\")),\n updates: row === undefined ? 0 : Number(getBigIntLike(row, \"update_count\")),\n deletes: row === undefined ? 0 : Number(getBigIntLike(row, \"delete_count\")),\n }\n}\n\nfunction primaryKeyMatchSql(\n primaryKeyColumns: readonly string[],\n leftAlias: string,\n rightAlias: string\n): string {\n return primaryKeyColumns\n .map(\n (column) =>\n `${leftAlias}.${quoteIdentifier(column)} = ${rightAlias}.${quoteIdentifier(column)}`\n )\n .join(\" AND \")\n}\n\nfunction datasetRowDifferenceSql(\n dataset: DatasetDefinition,\n leftAlias: string,\n rightAlias: string\n): string {\n return dataset.schema.columns\n .map(\n (column) =>\n `${leftAlias}.${quoteIdentifier(column.name)} IS DISTINCT FROM ${rightAlias}.${quoteIdentifier(\n column.name\n )}`\n )\n .join(\" OR \")\n}\n\nasync function countRows(runtime: DuckDbQueryRuntime, relationSql: string): Promise<number> {\n const [row] = await runtime.query(`SELECT count(*) AS row_count FROM ${relationSql}`)\n return row === undefined ? 0 : Number(getBigIntLike(row, \"row_count\"))\n}\n\nfunction rankName(sequenceColumnName: string): string {\n return `${sequenceColumnName}_rank`\n}\n\nfunction firstSequenceName(sequenceColumnName: string): string {\n return `${sequenceColumnName}_first`\n}\n\nfunction sameColumns(left: readonly string[] | undefined, right: readonly string[]): boolean {\n return (\n left !== undefined &&\n left.length === right.length &&\n left.every((value, index) => value === right[index])\n )\n}\n",
39
+ "import { randomUUID } from \"node:crypto\"\nimport type { DatasetDefinition } from \"@sixb/core\"\nimport type {\n BeginDatasetMergeInput,\n BeginDatasetWriteInput,\n DatasetMergeCommitResult,\n DatasetProducer,\n DatasetVersion,\n DatasetVersionLineage,\n DatasetWriteCommitResult,\n DatasetWriteMode,\n LakeMergeSession,\n LakeWriteSession,\n} from \"@sixb/core/lake-storage\"\nimport {\n assertUnsequencedDatasetWrite,\n getDatasetPrimaryKeyColumns,\n hasDatasetLineageChanges,\n hasDatasetProvenanceChanges,\n LakeConcurrencyError,\n LakeStorageError,\n lineageAtCommit,\n retryDatasetMergeCommit,\n} from \"@sixb/core/lake-storage\"\nimport type { DuckLakeStorageOptions } from \"../types\"\nimport { localCatalogCoordinationKey } from \"./catalog-key\"\nimport {\n type ApplyDatasetRowsResult,\n applyDatasetRowsFromRelation,\n assertDatasetWriteMode,\n type CommitRowCount,\n} from \"./dataset-row-commit\"\nimport { applyDatasetMergeFromRelation } from \"./dataset-row-merge\"\nimport { getBigIntLike } from \"./duckdb-row\"\nimport type { DuckDbQueryRuntime } from \"./duckdb-runtime\"\nimport type { DuckLakeConnectionManager } from \"./ducklake-connection-manager\"\nimport type { DuckLakeDatasetCatalog } from \"./ducklake-dataset-catalog\"\nimport { createDuckLakeMergeSession, type DuckLakeCommitMergeInput } from \"./ducklake-merge-session\"\nimport type { DuckLakeSnapshotReader, DuckLakeVersionSummary } from \"./ducklake-snapshot-reader\"\nimport {\n beginTransactionOnLatestVersion,\n CatalogMovedError,\n commitVersionTransaction,\n isSqliteCatalog,\n rerunWhenCatalogMoves,\n} from \"./ducklake-version-transaction\"\nimport { createDuckLakeWriteSession, type DuckLakeCommitWriteInput } from \"./ducklake-write-session\"\nimport { encodeLineage } from \"./lineage-encoding\"\nimport { encodeDatasetTableName } from \"./names\"\nimport {\n duckLakeAlias,\n duckLakeMetadataTableName,\n qualifiedTableName,\n quoteIdentifier,\n quoteSqlString,\n} from \"./sql\"\nimport { parseCommitMetadata, parseVersionId, type SixbCommitMetadata } from \"./versions\"\n\nexport interface DuckLakeCommitDatasetVersionInput {\n readonly dataset: DatasetDefinition\n readonly mode: DatasetWriteMode\n readonly expectedLatestVersionId?: string | null\n readonly commitMessage: string\n readonly producer?: BeginDatasetWriteInput[\"producer\"]\n readonly inputs?: BeginDatasetWriteInput[\"inputs\"]\n /** The lineage of the rows written, as `BeginDatasetWriteInput.lineage`. */\n readonly lineage?: BeginDatasetWriteInput[\"lineage\"]\n applyChanges(\n runtime: DuckDbQueryRuntime,\n context: DuckLakeApplyChangesContext\n ): Promise<ApplyDatasetRowsResult>\n}\n\ninterface DuckLakeCommitVersionOutcomeInput\n extends Omit<DuckLakeCommitDatasetVersionInput, \"expectedLatestVersionId\" | \"mode\"> {\n readonly mode: DatasetWriteMode | \"merge\"\n readonly expectedLatestVersionId?: string | null\n readonly allowInitialNoOp?: boolean\n readonly signal?: AbortSignal\n readonly optimisticOperation?: \"commit\" | \"merge commit\"\n}\n\ninterface DuckLakeCommitVersionOutcomeRuntimeInput extends DuckLakeCommitVersionOutcomeInput {\n readonly runtime: DuckDbQueryRuntime\n}\n\nexport interface DuckLakeApplyChangesContext {\n readonly previousRowCount?: number\n readonly validatedPrimaryKeyColumns?: readonly string[]\n}\n\n/**\n * Owns the durable DuckLake transaction for a staged Sixb write.\n *\n * Write sessions keep validation and temp staging table mechanics close to the\n * caller. This coordinator handles everything that changes shared DuckLake\n * state: attachment refresh, optimistic guards, row replacement/append,\n * commit_extra_info, no-op detection, and DatasetVersion hydration.\n */\nexport class DuckLakeWriteCoordinator {\n constructor(\n private readonly options: DuckLakeStorageOptions,\n private readonly connections: DuckLakeConnectionManager,\n private readonly datasets: DuckLakeDatasetCatalog,\n private readonly snapshots: DuckLakeSnapshotReader\n ) {}\n\n async beginWrite(input: BeginDatasetWriteInput): Promise<LakeWriteSession> {\n this.connections.assertOpen()\n\n const definition = await this.datasets.getDataset(input.dataset.id)\n if (!definition) {\n throw new LakeStorageError(`[SixbDuckLake] Unknown dataset '${input.dataset.id}'.`)\n }\n\n this.datasets.assertSchema(definition)\n assertUnsequencedDatasetWrite(definition)\n const mode = input.mode ?? \"snapshot\"\n assertDatasetWriteMode(mode, \"write\")\n\n // Staging tables are connection-scoped in DuckDB. In the single-runtime\n // model every active write session creates a uniquely named temp table on\n // the shared runtime; the durable commit later runs on that same\n // connection under an exclusive queue slot.\n const runtime = await this.connections.stagingRuntime()\n return createDuckLakeWriteSession({\n commitWrite: (options) => this.commitWrite(options),\n runtime,\n write: {\n ...input,\n dataset: definition,\n mode,\n },\n })\n }\n\n async beginMerge(input: BeginDatasetMergeInput): Promise<LakeMergeSession> {\n this.connections.assertOpen()\n\n const definition = await this.datasets.getDataset(input.dataset.id)\n if (!definition) {\n throw new LakeStorageError(`[SixbDuckLake] Unknown dataset '${input.dataset.id}'.`)\n }\n if (getDatasetPrimaryKeyColumns(definition) === null) {\n throw new LakeStorageError(\n `[SixbDuckLake] Dataset '${definition.id}' must define a primaryKey before it can be merged.`\n )\n }\n\n this.datasets.assertSchema(definition)\n const latestVersion = await this.connections.withAttachedRuntime((runtime) =>\n this.snapshots.getLatestVersionForDefinition(runtime, definition)\n )\n if (\n input.expectedLatestVersionId !== undefined &&\n latestVersion?.versionId !== input.expectedLatestVersionId\n ) {\n throw new LakeConcurrencyError(\n `[SixbDuckLake] Optimistic merge start failed for dataset '${definition.id}': expected latest version '${input.expectedLatestVersionId}', found '${latestVersion?.versionId ?? \"none\"}'.`\n )\n }\n const runtime = await this.connections.stagingRuntime()\n return createDuckLakeMergeSession({\n commitMerge: (options) => this.commitMerge(options),\n runtime,\n merge: { ...input, dataset: definition },\n baseVersionId: latestVersion?.versionId ?? null,\n })\n }\n\n private async commitWrite(input: DuckLakeCommitWriteInput): Promise<DatasetWriteCommitResult> {\n const definition = await this.datasets.getDataset(input.write.dataset.id)\n if (!definition) {\n throw new LakeStorageError(`[SixbDuckLake] Unknown dataset '${input.write.dataset.id}'.`)\n }\n\n const mode = input.write.mode ?? \"snapshot\"\n assertDatasetWriteMode(mode, \"write\")\n\n return this.commitDatasetVersion({\n dataset: definition,\n mode,\n expectedLatestVersionId: input.commit?.expectedLatestVersionId,\n commitMessage: input.commit?.commitMessage ?? `write dataset ${input.write.dataset.id}`,\n producer: input.write.producer,\n inputs: input.write.inputs,\n lineage: input.write.lineage,\n applyChanges: (runtime, context) =>\n this.applyStagedRows({\n ...input,\n runtime,\n previousRowCount: context.previousRowCount,\n }),\n })\n }\n\n private async commitMerge(input: DuckLakeCommitMergeInput): Promise<DatasetMergeCommitResult> {\n const definition = await this.datasets.getDataset(input.merge.dataset.id)\n if (!definition) {\n throw new LakeStorageError(`[SixbDuckLake] Unknown dataset '${input.merge.dataset.id}'.`)\n }\n if (getDatasetPrimaryKeyColumns(definition) === null) {\n throw new LakeStorageError(\n `[SixbDuckLake] Dataset '${definition.id}' must define a primaryKey before it can be merged.`\n )\n }\n\n return retryDatasetMergeCommit(input.merge, input.commit, (rebase) =>\n this.withCommitRuntime(async (runtime) => {\n input.commit?.signal?.throwIfAborted()\n const baseVersionId = rebase\n ? ((await this.snapshots.getLatestVersionForDefinition(runtime, definition))?.versionId ??\n null)\n : input.baseVersionId\n return this.commitVersionOutcomeOnExclusiveRuntime(runtime, {\n dataset: definition,\n mode: \"merge\",\n expectedLatestVersionId: baseVersionId,\n allowInitialNoOp: !input.commit?.createInitialVersion,\n signal: input.commit?.signal,\n optimisticOperation: \"merge commit\",\n commitMessage: input.commit?.commitMessage ?? `merge dataset ${definition.id}`,\n producer: input.merge.producer,\n inputs: input.merge.inputs,\n applyChanges: async (commitRuntime, context) => {\n const result = await applyDatasetMergeFromRelation({\n options: this.options,\n runtime: commitRuntime,\n dataset: definition,\n stagingTableName: input.stagingTableName,\n sequenceColumnName: input.sequenceColumnName,\n kindColumnName: input.kindColumnName,\n previousRowCount: context.previousRowCount,\n validatedPrimaryKeyColumns: context.validatedPrimaryKeyColumns,\n })\n if (result.sourceRowCount !== input.changesWritten) {\n throw new LakeStorageError(\n `[SixbDuckLake] Staged merge for dataset '${definition.id}' accepted ${input.changesWritten} change(s), but DuckLake saw ${result.sourceRowCount} source change(s) at commit time.`\n )\n }\n return result\n },\n })\n })\n )\n }\n\n async commitDatasetVersion(\n input: DuckLakeCommitDatasetVersionInput\n ): Promise<DatasetWriteCommitResult> {\n return this.withCommitRuntime((runtime) =>\n this.commitDatasetVersionOnExclusiveRuntime(runtime, input)\n )\n }\n\n async withCommitRuntime<T>(run: (runtime: DuckDbQueryRuntime) => Promise<T>): Promise<T> {\n return withCatalogCommitLock(this.options, async () => {\n // `withExclusiveAttached` refreshes local catalogs before the exclusive\n // slot, then holds the local attachment boundary through the commit.\n return this.connections.withExclusiveAttached(run)\n })\n }\n\n async commitDatasetVersionOnExclusiveRuntime(\n runtime: DuckDbQueryRuntime,\n input: DuckLakeCommitDatasetVersionInput\n ): Promise<DatasetWriteCommitResult> {\n assertUnsequencedDatasetWrite(input.dataset)\n const result = await this.commitVersionOutcomeOnExclusiveRuntime(runtime, input)\n if (result.version === null) {\n throw new LakeStorageError(\n `[SixbDuckLake] No DuckLake changes were committed for dataset '${input.dataset.id}', and no previous version exists.`\n )\n }\n\n return { ...result.version, outcome: result.outcome }\n }\n\n private async commitVersionOutcomeOnExclusiveRuntime(\n runtime: DuckDbQueryRuntime,\n input: DuckLakeCommitVersionOutcomeInput\n ): Promise<DatasetMergeCommitResult> {\n // Staged rows outlive a failed transaction, so a rerun applies exactly the same changes.\n return rerunWhenCatalogMoves(\n input.dataset.id,\n () => this.commitDatasetVersionUnlocked({ ...input, runtime }),\n input.signal\n )\n }\n\n private async commitDatasetVersionUnlocked(\n input: DuckLakeCommitVersionOutcomeRuntimeInput\n ): Promise<DatasetMergeCommitResult> {\n // Capture the write connection's last committed DuckLake snapshot before\n // and after COMMIT. The commitId in DuckLake commit_extra_info proves\n // which snapshot belongs to this transaction.\n const previousWriteSnapshotId = await this.lastCommittedSnapshotId(input.runtime)\n\n let committed = false\n try {\n const latestVersion = await this.beginVersionTransaction(input)\n if (input.expectedLatestVersionId !== undefined) {\n this.assertExpectedLatestVersion({\n datasetId: input.dataset.id,\n expectedLatestVersionId: input.expectedLatestVersionId,\n actualLatestVersionId: latestVersion?.versionId ?? null,\n operation: input.optimisticOperation ?? \"commit\",\n })\n }\n\n const lineage = lineageAtCommit({\n mode: input.mode,\n schema: input.dataset.schema,\n producer: input.producer,\n written: input.lineage,\n parent: latestVersion,\n })\n\n const changeResult = await input.applyChanges(input.runtime, {\n previousRowCount: latestVersion?.rowCount,\n validatedPrimaryKeyColumns: latestVersion?.validatedPrimaryKeyColumns,\n })\n input.signal?.throwIfAborted()\n\n // The version this one replaces or builds on: what it records having changed compares with.\n const parent =\n latestVersion === undefined ? await this.latestVersionAtReadSnapshot(input) : latestVersion\n\n // A commit that changes no rows is decided against the latest version it compared with.\n const noOpBase = changeResult.dataChangeExpected ? undefined : parent\n\n const createsVersion =\n noOpBase === undefined || this.noOpCreatesVersion(input, noOpBase, lineage)\n if (createsVersion && mustClaimTable(input, changeResult, lineage)) {\n await this.claimTable(input)\n }\n\n const commitId = randomUUID()\n await this.setCommitMetadata(\n input,\n commitId,\n commitRowCount(input, changeResult, latestVersion),\n lineage,\n {\n rowsChanged: parent === null || changeResult.changedTableRows,\n lineageChanged: hasDatasetLineageChanges(parent, {\n datasetId: input.dataset.id,\n schema: input.dataset.schema,\n producer: input.producer,\n lineage,\n }),\n }\n )\n\n await commitVersionTransaction(\n input.runtime,\n input.dataset.id,\n createsVersion && mustCommitOnReadSnapshot(input, changeResult)\n ? { poisonRuntime: () => this.connections.poisonRuntime() }\n : undefined\n )\n committed = true\n\n const committedWriteSnapshotId = await this.lastCommittedSnapshotId(input.runtime)\n try {\n return await this.versionForCommittedWrite({\n ...input,\n commitId,\n previousWriteSnapshotId,\n committedWriteSnapshotId,\n changeResult,\n noOpBaseVersionId: noOpBase?.versionId ?? null,\n })\n } finally {\n await this.connections.detachLocalCatalogAfterCommit(input.runtime)\n }\n } catch (error) {\n if (!committed) {\n await this.rollbackTransaction(input.runtime)\n }\n throw error\n }\n }\n\n private async versionForCommittedWrite(\n input: DuckLakeCommitVersionOutcomeRuntimeInput & {\n readonly commitId: string\n readonly previousWriteSnapshotId: string | null\n readonly committedWriteSnapshotId: string | null\n readonly changeResult: ApplyDatasetRowsResult\n /** The latest version a commit that changes no rows was compared with. */\n readonly noOpBaseVersionId: string | null\n }\n ): Promise<DatasetMergeCommitResult> {\n // Hydrate the committed version on the same exclusive runtime. That keeps\n // snapshot matching and row-count fallback inside the same serialized\n // connection state that just committed.\n const ownSnapshotId = await this.findOwnSnapshotId(\n input.runtime,\n input.dataset.id,\n input.commitId,\n input.previousWriteSnapshotId,\n input.committedWriteSnapshotId\n )\n\n if (ownSnapshotId !== null) {\n const version = await this.snapshots.getVersionForSnapshot(\n input.runtime,\n input.dataset,\n ownSnapshotId\n )\n if (version) {\n return { outcome: \"created\", version }\n }\n\n throw new LakeStorageError(\n `[SixbDuckLake] DuckLake committed snapshot '${ownSnapshotId}' for dataset '${input.dataset.id}', but Sixb could not hydrate it as a dataset version.`\n )\n }\n\n if (!input.changeResult.dataChangeExpected) {\n const version = await this.versionForNoOpCommit(\n input.runtime,\n input.dataset,\n input.allowInitialNoOp ?? false\n )\n if (input.expectedLatestVersionId !== undefined) {\n this.assertExpectedLatestVersion({\n datasetId: input.dataset.id,\n expectedLatestVersionId: input.expectedLatestVersionId,\n actualLatestVersionId: version?.versionId ?? null,\n operation: input.optimisticOperation ?? \"commit\",\n })\n }\n\n // Nothing was committed: the write matched the version this transaction read. Another\n // writer moved the latest version since, and the write may not match that one.\n if ((version?.versionId ?? null) !== input.noOpBaseVersionId) {\n throw new CatalogMovedError(\n `[SixbDuckLake] Dataset '${input.dataset.id}' changed while an unchanged write was compared with it.`\n )\n }\n\n return {\n outcome: \"unchanged\",\n version,\n }\n }\n\n if (input.committedWriteSnapshotId === input.previousWriteSnapshotId) {\n throw new LakeStorageError(\n `[SixbDuckLake] DuckLake commit for dataset '${input.dataset.id}' completed without producing a snapshot for this non-empty write.`\n )\n }\n\n throw new LakeStorageError(\n `[SixbDuckLake] DuckLake commit for dataset '${input.dataset.id}' completed, but Sixb could not find a matching snapshot for this write.`\n )\n }\n\n private async applyStagedRows(\n input: DuckLakeCommitWriteInput & {\n readonly runtime: DuckDbQueryRuntime\n readonly previousRowCount?: number\n }\n ): Promise<ApplyDatasetRowsResult> {\n const mode = input.write.mode ?? \"snapshot\"\n const result = await applyDatasetRowsFromRelation({\n options: this.options,\n runtime: input.runtime,\n dataset: input.write.dataset,\n mode,\n sourceRelationSql: quoteIdentifier(input.stagingTableName),\n previousRowCount: input.previousRowCount,\n })\n\n if (result.sourceRowCount !== input.rowsWritten) {\n throw new LakeStorageError(\n `[SixbDuckLake] Staged write for dataset '${input.write.dataset.id}' accepted ${input.rowsWritten} row(s), but DuckLake saw ${result.sourceRowCount} source row(s) at commit time.`\n )\n }\n\n return result\n }\n\n private async setCommitMetadata(\n input: DuckLakeCommitVersionOutcomeRuntimeInput,\n commitId: string,\n rowCount: CommitRowCount,\n lineage: DatasetVersionLineage | undefined,\n changed: Pick<DatasetVersion, \"rowsChanged\" | \"lineageChanged\">\n ): Promise<void> {\n // DuckLake stores this JSON on the snapshot it creates for the current\n // transaction. Version id, timestamp, and data-change detection still come\n // from DuckLake itself. commitId is only a transaction correlation token so\n // concurrent writers do not accidentally hydrate each other's snapshots.\n // Every keyed data path either replaces the baseline or validates its uniqueness before this\n // marker is persisted. Merge commits can therefore avoid repeating that full-table audit.\n const validatedPrimaryKeyColumns = getDatasetPrimaryKeyColumns(input.dataset)\n const metadata: SixbCommitMetadata = {\n kind: \"datasetVersion\",\n datasetId: input.dataset.id,\n commitId,\n mode: input.mode,\n producer: input.producer ? structuredClone(input.producer) : undefined,\n inputs: input.inputs ? structuredClone(input.inputs) : undefined,\n ...(rowCount.kind === \"exact\" ? { rowCount: rowCount.value } : {}),\n ...(validatedPrimaryKeyColumns !== null\n ? { validatedPrimaryKeyColumns: [...validatedPrimaryKeyColumns] }\n : {}),\n ...(lineage === undefined ? {} : { lineage: encodeLineage(lineage) }),\n rowsChanged: changed.rowsChanged,\n lineageChanged: changed.lineageChanged,\n }\n\n await input.runtime.run(\n `CALL ${quoteIdentifier(duckLakeAlias(this.options))}.set_commit_message(${quoteSqlString(\n \"Sixb\"\n )}, ${quoteSqlString(input.commitMessage)}, extra_info => ${quoteSqlString(\n JSON.stringify({ sixb: metadata })\n )})`\n )\n }\n\n /**\n * Claims the table for the version this transaction commits by reapplying its current comment:\n * an idempotent metadata write, which DuckLake records as altering the table. A transaction\n * that changes a table another one altered since it began then fails to commit, before storing\n * anything, and reruns on the new latest version (see `mustClaimTable`).\n *\n * It also gives a version that changes no rows, an initial empty write or a change of\n * provenance, a DuckLake snapshot: DuckLake 1.5.2 creates none for a transaction whose data and\n * metadata are unchanged, and set_commit_message alone cannot force one.\n *\n * Altering a table bumps DuckLake's catalog-wide schema version: every connection reloads its\n * catalog, and concurrent writers to other tables slow down. Versions claim only when needed.\n */\n private async claimTable(input: DuckLakeCommitVersionOutcomeRuntimeInput): Promise<void> {\n const table = qualifiedTableName(this.options, encodeDatasetTableName(input.dataset.id))\n const descriptionSql =\n input.dataset.description === undefined ? \"NULL\" : quoteSqlString(input.dataset.description)\n await input.runtime.run(`COMMENT ON TABLE ${table} IS ${descriptionSql}`)\n }\n\n /** A commit that changes no rows still creates a version for a first version or new provenance. */\n private noOpCreatesVersion(\n input: DuckLakeCommitVersionOutcomeRuntimeInput,\n latestVersion: DuckLakeVersionSummary | null,\n lineage: DatasetVersionLineage | undefined\n ): boolean {\n if (!latestVersion) {\n return !input.allowInitialNoOp\n }\n\n return (\n input.mode !== \"merge\" &&\n hasDatasetProvenanceChanges(latestVersion, {\n datasetId: input.dataset.id,\n schema: input.dataset.schema,\n producer: input.producer,\n inputs: input.inputs,\n lineage,\n })\n )\n }\n\n /**\n * The latest version a write that began without reading it replaces and compared its rows with:\n * the one at the lake snapshot its first read fixed. The version metadata also shows versions\n * committed since. One of this dataset means the write was prepared on an older version, so it\n * reruns: a snapshot that changed rows would conflict with that version at commit anyway.\n */\n private async latestVersionAtReadSnapshot(\n input: DuckLakeCommitVersionOutcomeRuntimeInput\n ): Promise<DuckLakeVersionSummary | null> {\n const { snapshotId, latestVersion } =\n await this.snapshots.getLatestVersionSummaryAtCurrentSnapshot(input.runtime, input.dataset)\n\n if (latestVersion && BigInt(parseVersionId(latestVersion.versionId)) > BigInt(snapshotId)) {\n throw new CatalogMovedError(\n `[SixbDuckLake] Dataset '${input.dataset.id}' changed while an unchanged write was compared with it.`\n )\n }\n\n return latestVersion\n }\n\n private async versionForNoOpCommit(\n runtime: DuckDbQueryRuntime,\n definition: DatasetDefinition,\n allowInitialNoOp: boolean\n ): Promise<DatasetVersion | null> {\n const latestVersion = await this.snapshots.getLatestVersionForDefinition(runtime, definition)\n if (latestVersion) {\n return latestVersion\n }\n\n if (allowInitialNoOp) {\n return null\n }\n\n throw new LakeStorageError(\n `[SixbDuckLake] No DuckLake changes were committed for dataset '${definition.id}', and no previous version exists.`\n )\n }\n\n private async rollbackTransaction(runtime: DuckDbQueryRuntime): Promise<void> {\n try {\n await runtime.run(\"ROLLBACK\")\n } catch {\n // Preserve the original write failure. DuckDB may already have closed\n // the transaction if COMMIT itself failed.\n }\n }\n\n /**\n * Every version but a snapshot keeps its parent's rows, and the lineage it records merges the\n * parent's. A snapshot replaces its parent: it reads it first only to guard on it, or on SQLite,\n * whose later reads inside the transaction would block its commit. Otherwise it reads it once\n * its rows are written (see `latestVersionAtReadSnapshot`).\n */\n private async beginVersionTransaction(\n input: DuckLakeCommitVersionOutcomeRuntimeInput\n ): Promise<DuckLakeVersionSummary | null | undefined> {\n if (\n input.mode === \"snapshot\" &&\n input.expectedLatestVersionId === undefined &&\n !isSqliteCatalog(this.options.catalog)\n ) {\n await input.runtime.run(\"BEGIN TRANSACTION\")\n return undefined\n }\n\n return beginTransactionOnLatestVersion({\n options: this.options,\n runtime: input.runtime,\n datasetId: input.dataset.id,\n signal: input.signal,\n readLatestVersion: () =>\n this.snapshots.getLatestVersionSummaryAtCurrentSnapshot(input.runtime, input.dataset),\n })\n }\n\n private async lastCommittedSnapshotId(runtime: DuckDbQueryRuntime): Promise<string | null> {\n // DuckLake reports the last snapshot committed by this connection.\n const [row] = await runtime.query(\n `SELECT id FROM ${quoteIdentifier(duckLakeAlias(this.options))}.last_committed_snapshot()`\n )\n if (row === undefined || row.id === null || row.id === undefined) {\n return null\n }\n\n return String(getBigIntLike(row, \"id\"))\n }\n\n private async findSnapshotIdByCommitId(\n runtime: DuckDbQueryRuntime,\n datasetId: string,\n commitId: string,\n snapshotId?: string\n ): Promise<string | null> {\n if (snapshotId !== undefined) {\n assertDuckLakeSnapshotId(snapshotId)\n }\n\n const ducklakeSnapshotChanges = duckLakeMetadataTableName(\n this.options,\n \"ducklake_snapshot_changes\"\n )\n const whereSql = snapshotId === undefined ? \"\" : `WHERE snapshot_id = ${snapshotId}`\n const orderSql = snapshotId === undefined ? \"ORDER BY snapshot_id DESC\" : \"\"\n const rows = await runtime.query(`\n SELECT snapshot_id, commit_extra_info\n FROM ${ducklakeSnapshotChanges}\n ${whereSql}\n ${orderSql}\n `)\n\n for (const row of rows) {\n const metadata = parseCommitMetadata(row.commit_extra_info)\n if (metadata?.datasetId === datasetId && metadata.commitId === commitId) {\n return String(getBigIntLike(row, \"snapshot_id\"))\n }\n }\n\n return null\n }\n\n private async findOwnSnapshotId(\n runtime: DuckDbQueryRuntime,\n datasetId: string,\n commitId: string,\n previousWriteSnapshotId: string | null,\n committedWriteSnapshotId: string | null\n ): Promise<string | null> {\n if (committedWriteSnapshotId === null || committedWriteSnapshotId === previousWriteSnapshotId) {\n return null\n }\n\n const exactMatch = await this.findSnapshotIdByCommitId(\n runtime,\n datasetId,\n commitId,\n committedWriteSnapshotId\n )\n if (exactMatch !== null) {\n return exactMatch\n }\n\n // Defensive fallback for driver/version edge cases. The expected hot path\n // above reads a single metadata row keyed by last_committed_snapshot().\n return this.findSnapshotIdByCommitId(runtime, datasetId, commitId)\n }\n\n private assertExpectedLatestVersion(input: {\n readonly datasetId: string\n readonly expectedLatestVersionId?: string | null\n readonly actualLatestVersionId: string | null\n readonly operation: \"commit\" | \"merge commit\"\n }): void {\n if (input.expectedLatestVersionId === undefined) {\n return\n }\n\n if (input.actualLatestVersionId !== input.expectedLatestVersionId) {\n throw new LakeConcurrencyError(\n `[SixbDuckLake] Optimistic ${input.operation} failed for dataset '${input.datasetId}': expected latest version '${input.expectedLatestVersionId ?? \"none\"}', found '${input.actualLatestVersionId ?? \"none\"}'.`\n )\n }\n }\n}\n\n/**\n * Whether a version must claim its table so that a concurrent commit cannot build on it unseen.\n *\n * DuckLake commits a transaction on top of snapshots committed since it began unless one of them\n * altered the table or deleted rows it held. Only the earlier commit decides: a claim protects the\n * version that makes it from concurrent commits that land after it, never the reverse. A commit\n * that builds on a version it did not see keeps that version's rows, but stores the lineage of\n * the parent it read. For lineage, that is only wrong when the unseen version's stored lineage\n * carries dependencies: rows that depend on their own columns only add nothing to any lineage, so\n * two unkeyed appends to a dataset no pipeline writes may commit in any order. Commits that record\n * more of their parent than its lineage do not build on unseen versions (see\n * `mustCommitOnReadSnapshot`).\n *\n * - A version that changes no rows claims: it is also how it gets a snapshot.\n * - A write into an empty table claims, whatever it holds. It deletes nothing, so a snapshot that\n * also read the table empty would delete nothing either, and keep the rows it replaces.\n * - A snapshot that deleted rows needs no claim: any concurrent change to the table conflicts with\n * its deletes.\n * - A keyed append or merge claims. DuckLake has no primary key: two writes that insert one new\n * key both commit unless the earlier one claims.\n * - An unkeyed append into a table with rows claims when the lineage it stores carries a\n * dependency, or is unknown. A concurrent snapshot of that table deletes rows, and conflicts.\n */\nfunction mustClaimTable(\n input: DuckLakeCommitVersionOutcomeRuntimeInput,\n changeResult: ApplyDatasetRowsResult,\n lineage: DatasetVersionLineage | undefined\n): boolean {\n if (!changeResult.dataChangeExpected || changeResult.targetWasEmpty) {\n return true\n }\n\n if (input.mode === \"snapshot\") {\n return false\n }\n\n return (\n getDatasetPrimaryKeyColumns(input.dataset) !== null ||\n carriesDependencies(input.producer, lineage)\n )\n}\n\n/**\n * Whether a version must fail on any snapshot committed since its transaction began, rather than\n * commit on top of one that does not conflict with it. A version that did not claim its table (see\n * `mustClaimTable`) can only be built on unseen by a commit that records nothing of its parent but\n * its lineage, which that version cannot change. Two kinds of commit record more:\n *\n * - One that inserts and deletes no rows of its table, such as a version of new provenance, a\n * merge that only advances source ordering, or a schema change. DuckLake checks it against\n * nothing, and it would stand for rows it never compared.\n * - An unkeyed append guarded on the version it read, which an unclaimed append could move.\n */\nfunction mustCommitOnReadSnapshot(\n input: DuckLakeCommitVersionOutcomeRuntimeInput,\n changeResult: ApplyDatasetRowsResult\n): boolean {\n if (!changeResult.changedTableRows) {\n return true\n }\n\n return (\n input.expectedLatestVersionId !== undefined &&\n input.mode === \"append\" &&\n getDatasetPrimaryKeyColumns(input.dataset) === null\n )\n}\n\n/** Whether a stored lineage says the version's rows depend on any column but their own. */\nfunction carriesDependencies(\n producer: DatasetProducer | undefined,\n lineage: DatasetVersionLineage | undefined\n): boolean {\n if (lineage === undefined) {\n // A pipeline version without lineage could hold anything.\n return producer?.kind === \"pipeline\"\n }\n\n if (\"unknown\" in lineage) {\n return true\n }\n\n return lineage.rows.length > 0 || Object.values(lineage.columns).some((refs) => refs.length > 0)\n}\n\nfunction commitRowCount(\n input: Pick<DuckLakeCommitVersionOutcomeInput, \"expectedLatestVersionId\" | \"mode\">,\n changeResult: ApplyDatasetRowsResult,\n latestVersion: DuckLakeVersionSummary | null | undefined\n): CommitRowCount {\n // Unguarded append commits can be retried by DuckLake after this transaction\n // read the previous latest version. In that case previousRowCount +\n // sourceRowCount can underreport the committed snapshot, so leave the count unknown.\n if (input.mode === \"append\" && input.expectedLatestVersionId === undefined) {\n return { kind: \"unknown\" }\n }\n\n if (changeResult.resultingRowCount.kind === \"exact\") {\n return changeResult.resultingRowCount\n }\n\n if (input.mode === \"append\" && latestVersion === null) {\n return { kind: \"exact\", value: changeResult.sourceRowCount }\n }\n\n return { kind: \"unknown\" }\n}\n\nfunction assertDuckLakeSnapshotId(snapshotId: string): void {\n if (!/^\\d+$/.test(snapshotId)) {\n throw new LakeStorageError(`[SixbDuckLake] Invalid DuckLake snapshot id '${snapshotId}'.`)\n }\n}\n\n// Local metadata catalogs are useful for dev/test, but they do not have the\n// same multi-connection conflict behavior as PostgreSQL. Serialize local\n// commits within this process so a losing writer cannot hydrate another\n// connection's snapshot during DuckLake conflict handling.\nconst localCatalogCommitLocks = new Map<string, Promise<void>>()\n\nasync function withCatalogCommitLock<T>(\n options: DuckLakeStorageOptions,\n run: () => Promise<T>\n): Promise<T> {\n const key = localCatalogCoordinationKey(options)\n if (key === undefined) {\n return run()\n }\n\n const previous = localCatalogCommitLocks.get(key) ?? Promise.resolve()\n const ready = previous.catch(() => {})\n let release!: () => void\n const next = new Promise<void>((resolve) => {\n release = resolve\n })\n const current = ready.then(() => next)\n localCatalogCommitLocks.set(key, current)\n\n await ready\n try {\n return await run()\n } finally {\n release()\n if (localCatalogCommitLocks.get(key) === current) {\n localCatalogCommitLocks.delete(key)\n }\n }\n}\n",
40
+ "import type { DatasetDefinition } from \"@sixb/core\"\nimport {\n type DatasetSequenceChange,\n type DatasetSequenceState,\n getDatasetPrimaryKeyColumns,\n LakeStorageError,\n reconcileDatasetSequences,\n} from \"@sixb/core/lake-storage\"\nimport type { DuckLakeStorageOptions } from \"../types\"\nimport { type ApplyDatasetRowsResult, inspectUniqueKeyedRelation } from \"./dataset-row-commit\"\nimport { getBigIntLike, getOptionalString, getString } from \"./duckdb-row\"\nimport type { DuckDbQueryRuntime } from \"./duckdb-runtime\"\nimport { encodeDatasetSequenceTableName, encodeDatasetTableName } from \"./names\"\nimport { datasetSchemaColumnNamesSql } from \"./schema\"\nimport { qualifiedTableName, quoteIdentifier, quoteSqlString } from \"./sql\"\n\nexport interface ApplyDatasetMergeFromRelationInput {\n readonly options: DuckLakeStorageOptions\n readonly runtime: DuckDbQueryRuntime\n readonly dataset: DatasetDefinition\n readonly stagingTableName: string\n readonly sequenceColumnName: string\n readonly kindColumnName: string\n readonly previousRowCount?: number\n readonly validatedPrimaryKeyColumns?: readonly string[]\n}\n\ninterface MergeEffectCounts {\n readonly inserts: number\n readonly updates: number\n readonly deletes: number\n}\n\nexport async function applyDatasetMergeFromRelation(\n input: ApplyDatasetMergeFromRelationInput\n): Promise<ApplyDatasetRowsResult> {\n const primaryKeyColumns = getDatasetPrimaryKeyColumns(input.dataset)\n if (primaryKeyColumns === null) {\n throw new LakeStorageError(\n `[SixbDuckLake] Dataset '${input.dataset.id}' must define a primaryKey before it can be merged.`\n )\n }\n\n const stagingTable = quoteIdentifier(input.stagingTableName)\n const targetTable = qualifiedTableName(input.options, encodeDatasetTableName(input.dataset.id))\n const sourceRowCount = await countRows(input.runtime, stagingTable)\n const previousRowCount = await currentBaselineRowCount(input, targetTable, primaryKeyColumns)\n\n return withMaterializedFinalChanges(\n input,\n primaryKeyColumns,\n async (finalChanges, orderingChanged) => {\n const effects = await countMergeEffects(input, targetTable, finalChanges, primaryKeyColumns)\n const effectiveChangeCount = effects.inserts + effects.updates + effects.deletes\n\n if (effectiveChangeCount === 0) {\n return {\n dataChangeExpected: orderingChanged,\n sourceRowCount,\n resultingRowCount: { kind: \"exact\", value: previousRowCount },\n targetWasEmpty: previousRowCount === 0,\n changedTableRows: false,\n }\n }\n\n const keyMatchSql = primaryKeyMatchSql(primaryKeyColumns, \"target\", \"source\")\n const rowDifferenceSql = datasetRowDifferenceSql(input.dataset, \"target\", \"source\")\n const kindColumn = `source.${quoteIdentifier(input.kindColumnName)}`\n\n await input.runtime.run(`\n DELETE FROM ${targetTable} AS target\n USING ${finalChanges} AS source\n WHERE ${keyMatchSql}\n AND (\n ${kindColumn} = ${quoteSqlString(\"delete\")}\n OR (\n ${kindColumn} = ${quoteSqlString(\"upsert\")}\n AND (${rowDifferenceSql})\n )\n )\n `)\n\n const columnsSql = datasetSchemaColumnNamesSql(input.dataset.schema)\n const selectedColumnsSql = input.dataset.schema.columns\n .map((column) => `source.${quoteIdentifier(column.name)}`)\n .join(\", \")\n const firstSequenceColumnName = firstSequenceName(input.sequenceColumnName)\n await input.runtime.run(`\n INSERT INTO ${targetTable} (${columnsSql})\n SELECT ${selectedColumnsSql}\n FROM ${finalChanges} AS source\n WHERE ${kindColumn} = ${quoteSqlString(\"upsert\")}\n AND NOT EXISTS (\n SELECT 1\n FROM ${targetTable} AS target\n WHERE ${keyMatchSql}\n )\n ORDER BY source.${quoteIdentifier(firstSequenceColumnName)}\n `)\n\n return {\n dataChangeExpected: true,\n sourceRowCount,\n resultingRowCount: {\n kind: \"exact\",\n value: previousRowCount + effects.inserts - effects.deletes,\n },\n targetWasEmpty: previousRowCount === 0,\n changedTableRows: true,\n }\n }\n )\n}\n\n/** The companion table is current state, committed in the same DuckLake transaction as rows.\n * It is not recovered from expirable snapshot history. Only keys present in staging are read.\n */\nasync function applySourceOrdering(\n input: ApplyDatasetMergeFromRelationInput,\n acceptedTable: string\n): Promise<boolean> {\n const source = quoteIdentifier(`${input.sequenceColumnName}_source`)\n const ordinal = quoteIdentifier(input.sequenceColumnName)\n const staging = quoteIdentifier(input.stagingTableName)\n const stateTable = qualifiedTableName(\n input.options,\n encodeDatasetSequenceTableName(input.dataset.id)\n )\n await input.runtime.run(\n `CREATE TEMP TABLE ${acceptedTable} (source_key VARCHAR, ordinal UBIGINT)`\n )\n let lastOrdinal = -1n\n let changed = false\n while (true) {\n const staged = await input.runtime.query(\n `SELECT ${ordinal} AS ordinal, ${source} AS source FROM ${staging}\n WHERE ${ordinal} > ${lastOrdinal} ORDER BY ${ordinal} LIMIT 1000`\n )\n if (staged.length === 0) return changed\n const changes = staged.map(\n (row) => JSON.parse(getString(row, \"source\")) as DatasetSequenceChange\n )\n lastOrdinal = getBigIntLike(staged[staged.length - 1]!, \"ordinal\")\n const batchKeys = changes.map((change) => quoteSqlString(change.key)).join(\",\")\n const current = await input.runtime.query(\n `SELECT * FROM ${stateTable} WHERE source_key IN (${batchKeys})`\n )\n const previous = new Map<string, DatasetSequenceState>()\n for (const row of current) {\n previous.set(getString(row, \"source_key\"), {\n sequence: getString(row, \"sequence\"),\n content: getOptionalString(row, \"content\") ?? null,\n })\n }\n // Earlier batches are visible inside this transaction. A later conflict rolls them all back.\n const { states, accepted } = reconcileDatasetSequences(input.dataset, previous, changes)\n if (accepted.size === 0) continue\n changed = true\n const stateValues: string[] = []\n const acceptedValues: string[] = []\n for (const [key, index] of accepted) {\n const state = states.get(key)!\n stateValues.push(\n `(${quoteSqlString(key)}, ${quoteSqlString(state.sequence)}, ${state.content === null ? \"NULL\" : quoteSqlString(state.content)})`\n )\n acceptedValues.push(`(${quoteSqlString(key)}, ${getBigIntLike(staged[index]!, \"ordinal\")})`)\n }\n const keys = [...accepted.keys()].map(quoteSqlString).join(\",\")\n await input.runtime.run(`DELETE FROM ${stateTable} WHERE source_key IN (${keys})`)\n await input.runtime.run(`INSERT INTO ${stateTable} VALUES ${stateValues.join(\",\")}`)\n await input.runtime.run(`DELETE FROM ${acceptedTable} WHERE source_key IN (${keys})`)\n await input.runtime.run(`INSERT INTO ${acceptedTable} VALUES ${acceptedValues.join(\",\")}`)\n }\n}\n\nasync function currentBaselineRowCount(\n input: ApplyDatasetMergeFromRelationInput,\n targetTable: string,\n primaryKeyColumns: readonly string[]\n): Promise<number> {\n // Sixb writes mark keyed versions only after the write path has enforced uniqueness. Older or\n // external versions carry no marker and keep the full defensive audit.\n if (sameColumns(input.validatedPrimaryKeyColumns, primaryKeyColumns)) {\n return input.previousRowCount ?? countRows(input.runtime, targetTable)\n }\n\n return inspectUniqueKeyedRelation({\n runtime: input.runtime,\n dataset: input.dataset,\n relationSql: targetTable,\n context: \"current baseline\",\n })\n}\n\nasync function withMaterializedFinalChanges<T>(\n input: ApplyDatasetMergeFromRelationInput,\n primaryKeyColumns: readonly string[],\n run: (finalChangesTable: string, orderingChanged: boolean) => Promise<T>\n): Promise<T> {\n const table = quoteIdentifier(`${input.stagingTableName}_final`)\n const acceptedTable = quoteIdentifier(`${input.stagingTableName}_accepted`)\n\n let outcome:\n | { readonly kind: \"success\"; readonly value: T }\n | { readonly kind: \"error\"; readonly error: unknown }\n try {\n const sequenced = input.dataset.sequenceBy !== undefined\n const orderingChanged = sequenced ? await applySourceOrdering(input, acceptedTable) : false\n const ordinal = quoteIdentifier(input.sequenceColumnName)\n const selectSql = sequenced\n ? `SELECT source.*, source.${ordinal} AS ${quoteIdentifier(firstSequenceName(input.sequenceColumnName))}\n FROM ${quoteIdentifier(input.stagingTableName)} AS source\n JOIN ${acceptedTable} AS accepted ON source.${ordinal} = accepted.ordinal`\n : finalChangesSelectSql(input, primaryKeyColumns)\n await input.runtime.run(`CREATE TEMP TABLE ${table} AS ${selectSql}`)\n outcome = { kind: \"success\", value: await run(table, orderingChanged) }\n } catch (error) {\n outcome = { kind: \"error\", error }\n }\n\n try {\n await input.runtime.run(`DROP TABLE IF EXISTS ${table}`)\n await input.runtime.run(`DROP TABLE IF EXISTS ${acceptedTable}`)\n } catch (cleanupError) {\n if (outcome.kind === \"success\") {\n throw cleanupError\n }\n }\n\n if (outcome.kind === \"error\") {\n throw outcome.error\n }\n\n return outcome.value\n}\n\nfunction finalChangesSelectSql(\n input: ApplyDatasetMergeFromRelationInput,\n primaryKeyColumns: readonly string[]\n): string {\n const sequenceColumn = quoteIdentifier(input.sequenceColumnName)\n const keyColumnsSql = primaryKeyColumns.map((column) => quoteIdentifier(column)).join(\", \")\n const rankColumn = quoteIdentifier(rankName(input.sequenceColumnName))\n const firstSequenceColumn = quoteIdentifier(firstSequenceName(input.sequenceColumnName))\n\n return `\n SELECT * EXCLUDE (${rankColumn})\n FROM (\n SELECT\n *,\n min(${sequenceColumn}) OVER (PARTITION BY ${keyColumnsSql}) AS ${firstSequenceColumn},\n row_number() OVER (\n PARTITION BY ${keyColumnsSql}\n ORDER BY ${sequenceColumn} DESC\n ) AS ${rankColumn}\n FROM ${quoteIdentifier(input.stagingTableName)}\n ) ranked_changes\n WHERE ${rankColumn} = 1\n `\n}\n\nasync function countMergeEffects(\n input: ApplyDatasetMergeFromRelationInput,\n targetTable: string,\n finalChanges: string,\n primaryKeyColumns: readonly string[]\n): Promise<MergeEffectCounts> {\n const matchColumn = primaryKeyColumns[0]\n if (matchColumn === undefined) {\n throw new LakeStorageError(\n `[SixbDuckLake] Dataset '${input.dataset.id}' primaryKey must contain at least one column.`\n )\n }\n\n const keyMatchSql = primaryKeyMatchSql(primaryKeyColumns, \"target\", \"source\")\n const targetMatch = `target.${quoteIdentifier(matchColumn)} IS NOT NULL`\n const kindColumn = `source.${quoteIdentifier(input.kindColumnName)}`\n const rowDifferenceSql = datasetRowDifferenceSql(input.dataset, \"target\", \"source\")\n const [row] = await input.runtime.query(`\n SELECT\n count(*) FILTER (\n WHERE ${kindColumn} = ${quoteSqlString(\"upsert\")} AND NOT (${targetMatch})\n ) AS insert_count,\n count(*) FILTER (\n WHERE ${kindColumn} = ${quoteSqlString(\"upsert\")}\n AND ${targetMatch}\n AND (${rowDifferenceSql})\n ) AS update_count,\n count(*) FILTER (\n WHERE ${kindColumn} = ${quoteSqlString(\"delete\")} AND ${targetMatch}\n ) AS delete_count\n FROM ${finalChanges} AS source\n LEFT JOIN ${targetTable} AS target ON ${keyMatchSql}\n `)\n\n return {\n inserts: row === undefined ? 0 : Number(getBigIntLike(row, \"insert_count\")),\n updates: row === undefined ? 0 : Number(getBigIntLike(row, \"update_count\")),\n deletes: row === undefined ? 0 : Number(getBigIntLike(row, \"delete_count\")),\n }\n}\n\nfunction primaryKeyMatchSql(\n primaryKeyColumns: readonly string[],\n leftAlias: string,\n rightAlias: string\n): string {\n return primaryKeyColumns\n .map(\n (column) =>\n `${leftAlias}.${quoteIdentifier(column)} = ${rightAlias}.${quoteIdentifier(column)}`\n )\n .join(\" AND \")\n}\n\n/**\n * Whether a staged upsert changes the stored row of its key. A row that differs only in its\n * `sequenceBy` column is the stored row delivered again (`isSequenceOnlyChange`): it stays as is,\n * while the companion table still advances the key's ordering.\n */\nfunction datasetRowDifferenceSql(\n dataset: DatasetDefinition,\n leftAlias: string,\n rightAlias: string\n): string {\n const differences = dataset.schema.columns\n .filter((column) => column.name !== dataset.sequenceBy)\n .map(\n (column) =>\n `${leftAlias}.${quoteIdentifier(column.name)} IS DISTINCT FROM ${rightAlias}.${quoteIdentifier(\n column.name\n )}`\n )\n\n return differences.length > 0 ? differences.join(\" OR \") : \"FALSE\"\n}\n\nasync function countRows(runtime: DuckDbQueryRuntime, relationSql: string): Promise<number> {\n const [row] = await runtime.query(`SELECT count(*) AS row_count FROM ${relationSql}`)\n return row === undefined ? 0 : Number(getBigIntLike(row, \"row_count\"))\n}\n\nfunction rankName(sequenceColumnName: string): string {\n return `${sequenceColumnName}_rank`\n}\n\nfunction firstSequenceName(sequenceColumnName: string): string {\n return `${sequenceColumnName}_first`\n}\n\nfunction sameColumns(left: readonly string[] | undefined, right: readonly string[]): boolean {\n return (\n left !== undefined &&\n left.length === right.length &&\n left.every((value, index) => value === right[index])\n )\n}\n",
41
41
  "import { randomUUID } from \"node:crypto\"\nimport type { DatasetRow, MergeChange } from \"@sixb/core\"\nimport type {\n BeginDatasetMergeInput,\n CommitDatasetMergeInput,\n DatasetMergeCommitResult,\n LakeMergeSession,\n} from \"@sixb/core/lake-storage\"\nimport {\n cloneDatasetMergeChange,\n datasetSequenceChange,\n getDatasetMergeChangeValidationError,\n LakeStorageError,\n} from \"@sixb/core/lake-storage\"\nimport type { DuckDbRuntime } from \"./duckdb-runtime\"\nimport { appendDatasetRow } from \"./row-appender\"\nimport { datasetSchemaToDuckDbNullableColumnsSql } from \"./schema\"\nimport { quoteIdentifier } from \"./sql\"\n\nexport interface DuckLakeCommitMergeInput {\n readonly merge: BeginDatasetMergeInput\n readonly baseVersionId: string | null\n readonly commit?: CommitDatasetMergeInput\n readonly stagingTableName: string\n readonly sequenceColumnName: string\n readonly kindColumnName: string\n readonly changesWritten: number\n}\n\ntype DuckLakeCommitMerge = (input: DuckLakeCommitMergeInput) => Promise<DatasetMergeCommitResult>\n\nconst MERGE_CHANGE_BATCH_SIZE = 1000\n\ninterface StagedMergeChange {\n readonly sequence: bigint\n readonly change: MergeChange<DatasetRow, DatasetRow>\n}\n\ninterface CreateDuckLakeMergeSessionInput {\n readonly commitMerge: DuckLakeCommitMerge\n readonly runtime: DuckDbRuntime\n readonly merge: BeginDatasetMergeInput\n readonly baseVersionId: string | null\n}\n\nexport async function createDuckLakeMergeSession(\n input: CreateDuckLakeMergeSessionInput\n): Promise<LakeMergeSession> {\n const suffix = randomUUID().replaceAll(\"-\", \"\")\n const stagingTableName = `sixb_merge_${suffix}`\n const sequenceColumnName = `sixb_merge_sequence_${suffix}`\n const kindColumnName = `sixb_merge_kind_${suffix}`\n\n await input.runtime.run(`\n CREATE TEMP TABLE ${quoteIdentifier(stagingTableName)} (\n ${quoteIdentifier(sequenceColumnName)} UBIGINT NOT NULL,\n ${quoteIdentifier(kindColumnName)} VARCHAR NOT NULL,\n ${input.merge.dataset.sequenceBy === undefined ? \"\" : `${quoteIdentifier(`${sequenceColumnName}_source`)} VARCHAR NOT NULL,`}\n ${datasetSchemaToDuckDbNullableColumnsSql(input.merge.dataset.schema)}\n )\n `)\n\n return new DuckLakeMergeSession(\n input.commitMerge,\n input.runtime,\n input.merge,\n input.baseVersionId,\n stagingTableName,\n sequenceColumnName,\n kindColumnName\n )\n}\n\nclass DuckLakeMergeSession implements LakeMergeSession {\n private closed = false\n private cleanedUp = false\n private nextSequence = 0n\n private changesWritten = 0\n\n constructor(\n private readonly commitMerge: DuckLakeCommitMerge,\n private readonly runtime: DuckDbRuntime,\n private readonly input: BeginDatasetMergeInput,\n private readonly baseVersionId: string | null,\n private readonly stagingTableName: string,\n private readonly sequenceColumnName: string,\n private readonly kindColumnName: string\n ) {}\n\n async writeChanges(\n changes:\n | Iterable<MergeChange<DatasetRow, DatasetRow>>\n | AsyncIterable<MergeChange<DatasetRow, DatasetRow>>\n ): Promise<void> {\n this.assertOpen()\n\n let batch: StagedMergeChange[] = []\n for await (const change of changes) {\n const validationError = getDatasetMergeChangeValidationError(change, this.input.dataset)\n if (validationError) {\n throw new LakeStorageError(`[SixbDuckLake] ${validationError}`)\n }\n\n batch.push({\n sequence: this.nextSequence,\n change: cloneDatasetMergeChange(change),\n })\n this.nextSequence += 1n\n\n if (batch.length >= MERGE_CHANGE_BATCH_SIZE) {\n await this.appendBatchToStagingTable(batch)\n batch = []\n await Bun.sleep(0)\n }\n }\n\n if (batch.length > 0) {\n await this.appendBatchToStagingTable(batch)\n }\n }\n\n private async appendBatchToStagingTable(batch: readonly StagedMergeChange[]): Promise<void> {\n await this.runtime.withAppender(this.stagingTableName, (appender) => {\n for (const staged of batch) {\n appender.appendBigInt(staged.sequence)\n appender.appendVarchar(staged.change.kind)\n if (this.input.dataset.sequenceBy !== undefined) {\n appender.appendVarchar(\n JSON.stringify(datasetSequenceChange(this.input.dataset, staged.change))\n )\n }\n appendDatasetRow(\n appender,\n this.input.dataset.schema,\n staged.change.kind === \"upsert\" ? staged.change.row : staged.change.key\n )\n }\n })\n this.changesWritten += batch.length\n }\n\n async commit(input?: CommitDatasetMergeInput): Promise<DatasetMergeCommitResult> {\n this.assertOpen()\n this.closed = true\n\n let committed = false\n try {\n const result = await this.commitMerge({\n merge: this.input,\n baseVersionId: this.baseVersionId,\n commit: input,\n stagingTableName: this.stagingTableName,\n sequenceColumnName: this.sequenceColumnName,\n kindColumnName: this.kindColumnName,\n changesWritten: this.changesWritten,\n })\n committed = true\n await this.cleanup()\n return result\n } catch (error) {\n if (!committed) {\n await this.cleanup()\n }\n throw error\n }\n }\n\n async abort(): Promise<void> {\n if (this.closed) {\n return\n }\n\n this.closed = true\n await this.cleanup()\n }\n\n private assertOpen(): void {\n if (this.closed) {\n throw new LakeStorageError(\"[SixbDuckLake] Merge session is already closed.\")\n }\n }\n\n private async cleanup(): Promise<void> {\n if (this.cleanedUp) {\n return\n }\n\n this.cleanedUp = true\n try {\n await this.runtime.run(`DROP TABLE IF EXISTS ${quoteIdentifier(this.stagingTableName)}`)\n } catch {\n // Preserve the commit/abort outcome. Temp tables disappear when the storage runtime closes.\n }\n }\n}\n",
42
42
  "import type { DuckDBValue } from \"@duckdb/node-api\"\nimport type { DatasetColumnDefinition, DatasetRow, DatasetSchema, FileRef } from \"@sixb/core\"\nimport { normalizeDuckDbDecimalValue } from \"./duckdb-decimal\"\nimport type { DuckDbAppender } from \"./duckdb-runtime\"\n\n/**\n * Append one validated dataset row into the staging table's DuckDB appender.\n */\nexport function appendDatasetRow(\n appender: DuckDbAppender,\n schema: DatasetSchema,\n row: DatasetRow\n): void {\n for (const column of schema.columns) {\n appendColumnValue(appender, column, row[column.name] ?? null)\n }\n\n appender.endRow()\n}\n\nfunction appendColumnValue(\n appender: DuckDbAppender,\n column: DatasetColumnDefinition,\n value: unknown\n): void {\n if (value === null || value === undefined) {\n appender.appendNull()\n return\n }\n\n switch (column.type) {\n case \"string\":\n appender.appendVarchar(value as string)\n return\n case \"boolean\":\n appender.appendBoolean(value as boolean)\n return\n case \"int64\":\n appender.appendBigInt(typeof value === \"bigint\" ? value : BigInt(value as string | number))\n return\n case \"float64\":\n appender.appendDouble(value as number)\n return\n case \"decimal\":\n appender.appendVarchar(normalizeDuckDbDecimalValue(value, column.name))\n return\n case \"date\":\n appender.appendVarchar(\n value instanceof Date ? value.toISOString().slice(0, 10) : String(value)\n )\n return\n case \"timestamp\":\n appender.appendVarchar(value instanceof Date ? value.toISOString() : String(value))\n return\n case \"json\":\n appender.appendVarchar(JSON.stringify(value))\n return\n case \"fileRef\":\n appender.appendStruct(fileRefToDuckDbStruct(value as FileRef))\n return\n }\n}\n\nfunction fileRefToDuckDbStruct(fileRef: FileRef): Readonly<Record<string, DuckDBValue>> {\n return {\n blobId: fileRef.blobId,\n digest: fileRef.digest,\n sizeBytes: BigInt(fileRef.sizeBytes),\n fileName: fileRef.fileName ?? null,\n mediaType: fileRef.mediaType ?? null,\n logicalPath: fileRef.logicalPath ?? null,\n }\n}\n",
43
43
  "import { randomUUID } from \"node:crypto\"\nimport type { DatasetRow } from \"@sixb/core\"\nimport { getDatasetRowValidationError } from \"@sixb/core\"\nimport type {\n BeginDatasetWriteInput,\n CommitDatasetWriteInput,\n DatasetWriteCommitResult,\n LakeWriteSession,\n} from \"@sixb/core/lake-storage\"\nimport {\n encodeDatasetPrimaryKey,\n getDatasetPrimaryKeyColumns,\n LakeStorageError,\n} from \"@sixb/core/lake-storage\"\nimport type { DuckDbRuntime } from \"./duckdb-runtime\"\nimport { appendDatasetRow } from \"./row-appender\"\nimport { datasetSchemaToDuckDbColumnsSql } from \"./schema\"\nimport { quoteIdentifier } from \"./sql\"\n\nexport interface DuckLakeCommitWriteInput {\n readonly write: BeginDatasetWriteInput\n readonly commit?: CommitDatasetWriteInput\n readonly stagingTableName: string\n readonly rowsWritten: number\n}\n\ntype DuckLakeCommitWrite = (options: DuckLakeCommitWriteInput) => Promise<DatasetWriteCommitResult>\n\n// Rows are staged in bounded in-memory batches so a slow source iterable never\n// holds the DuckDB runtime queue. Only the per-batch appender flush takes a\n// queue slot. 1000 keeps memory bounded while amortizing appender open/close.\nconst WRITE_ROW_BATCH_SIZE = 1000\n\ninterface CreateDuckLakeWriteSessionInput {\n readonly commitWrite: DuckLakeCommitWrite\n readonly runtime: DuckDbRuntime\n readonly write: BeginDatasetWriteInput\n}\n\nexport async function createDuckLakeWriteSession(\n input: CreateDuckLakeWriteSessionInput\n): Promise<LakeWriteSession> {\n const stagingTableName = `sixb_write_${randomUUID().replaceAll(\"-\", \"\")}`\n\n // The temp table lives only on this runtime connection. That keeps\n // partially written rows invisible until DuckLakeStorage commits them into\n // the durable dataset table.\n await input.runtime.run(\n `CREATE TEMP TABLE ${quoteIdentifier(stagingTableName)} (${datasetSchemaToDuckDbColumnsSql(\n input.write.dataset.schema\n )})`\n )\n\n return new DuckLakeWriteSession(input.commitWrite, input.runtime, input.write, stagingTableName)\n}\n\n/**\n * Package-private LakeWriteSession implementation for DuckLakeStorage.\n *\n * The session owns row validation, the connection-scoped staging table, and\n * cleanup. DuckLakeStorage owns the durable transaction because it has the\n * dataset/version context needed to build the returned DatasetVersion.\n */\nclass DuckLakeWriteSession implements LakeWriteSession {\n private closed = false\n private cleanedUp = false\n private rowsWritten = 0\n private readonly stagedPrimaryKeys = new Set<string>()\n\n constructor(\n private readonly commitWrite: DuckLakeCommitWrite,\n private readonly runtime: DuckDbRuntime,\n private readonly input: BeginDatasetWriteInput,\n private readonly stagingTableName: string\n ) {}\n\n async writeRows(rows: Iterable<DatasetRow> | AsyncIterable<DatasetRow>): Promise<void> {\n this.assertOpen()\n\n // Drain and validate the source OUTSIDE the DuckDB queue so slow external\n // reads (pagination, APIs, SFTP, retries) never hold a runtime slot. Only\n // appendBatchToStagingTable below briefly enters the queue.\n let batch: DatasetRow[] = []\n let batchPrimaryKeys = new Set<string>()\n for await (const row of rows) {\n const validationError = getDatasetRowValidationError(row, this.input.dataset)\n if (validationError) {\n throw new LakeStorageError(`[SixbDuckLake] ${validationError}`)\n }\n\n // Snapshot the validated row. Callers may reuse and mutate one row object\n // between yields, so the batch must not retain a live reference.\n const clonedRow = structuredClone(row)\n if (getDatasetPrimaryKeyColumns(this.input.dataset) !== null) {\n const primaryKey = encodeDatasetPrimaryKey(this.input.dataset, clonedRow)\n if (this.stagedPrimaryKeys.has(primaryKey) || batchPrimaryKeys.has(primaryKey)) {\n throw new LakeStorageError(\n `[SixbDuckLake] Dataset '${this.input.dataset.id}' ${this.input.mode ?? \"snapshot\"} source contains duplicate primary key.`\n )\n }\n batchPrimaryKeys.add(primaryKey)\n }\n batch.push(clonedRow)\n\n if (batch.length >= WRITE_ROW_BATCH_SIZE) {\n await this.appendBatchToStagingTable(batch, batchPrimaryKeys)\n batch = []\n batchPrimaryKeys = new Set()\n // Native appender promises can settle through microtasks quickly enough to starve timers\n // across a large in-memory iterable. Yield once per bounded batch so API traffic remains\n // responsive without adding per-row scheduling overhead.\n await Bun.sleep(0)\n }\n }\n\n if (batch.length > 0) {\n await this.appendBatchToStagingTable(batch, batchPrimaryKeys)\n }\n }\n\n private async appendBatchToStagingTable(\n batch: readonly DatasetRow[],\n primaryKeys: ReadonlySet<string>\n ): Promise<void> {\n // Synchronous callback: no awaits inside the queue slot. The appender\n // buffers and flushes the whole batch into the staging temp table on close.\n await this.runtime.withAppender(this.stagingTableName, (appender) => {\n for (const row of batch) {\n appendDatasetRow(appender, this.input.dataset.schema, row)\n }\n })\n // Count only rows actually appended -- commit asserts rowsWritten ===\n // sourceRowCount in the write coordinator.\n this.rowsWritten += batch.length\n for (const primaryKey of primaryKeys) {\n this.stagedPrimaryKeys.add(primaryKey)\n }\n }\n\n async commit(input?: CommitDatasetWriteInput): Promise<DatasetWriteCommitResult> {\n this.assertOpen()\n this.closed = true\n\n let committed = false\n try {\n const result = await this.commitWrite({\n write: this.input,\n commit: input,\n rowsWritten: this.rowsWritten,\n stagingTableName: this.stagingTableName,\n })\n committed = true\n // Even successful commits no longer need the staging table once rows\n // have been inserted into the durable DuckLake table.\n await this.cleanup()\n return result\n } catch (error) {\n if (!committed) {\n await this.cleanup()\n }\n throw error\n }\n }\n\n async abort(): Promise<void> {\n if (this.closed) {\n return\n }\n\n this.closed = true\n await this.cleanup()\n }\n\n private assertOpen(): void {\n if (this.closed) {\n throw new LakeStorageError(\"[SixbDuckLake] Write session is already closed.\")\n }\n }\n\n private async cleanup(): Promise<void> {\n if (this.cleanedUp) {\n return\n }\n\n this.cleanedUp = true\n this.stagedPrimaryKeys.clear()\n await this.dropStagingTable()\n }\n\n private async dropStagingTable(): Promise<void> {\n try {\n await this.runtime.run(`DROP TABLE IF EXISTS ${quoteIdentifier(this.stagingTableName)}`)\n } catch {\n // Preserve the commit/abort failure. Temp tables are connection-scoped\n // and will disappear when the storage runtime closes.\n }\n }\n}\n",
44
44
  "import type { DatasetDefinition, DatasetRow, LakeStorageWithSql } from \"@sixb/core\"\nimport type {\n BeginDatasetMergeInput,\n BeginDatasetWriteInput,\n DatasetCatalogState,\n DatasetChanges,\n DatasetVersion,\n LakeMergeSession,\n LakeWriteSession,\n LatestVersionsSince,\n ListLatestVersionsSinceInput,\n ReadDatasetChangesInput,\n ReadDatasetRowsInput,\n} from \"@sixb/core/lake-storage\"\nimport { DuckLakeChangeReader } from \"./internal/ducklake-change-reader\"\nimport { DuckLakeConnectionManager } from \"./internal/ducklake-connection-manager\"\nimport { DuckLakeDatasetCatalog } from \"./internal/ducklake-dataset-catalog\"\nimport { DuckLakeMaintenance } from \"./internal/ducklake-maintenance\"\nimport { DuckLakeRowReader } from \"./internal/ducklake-row-reader\"\nimport { DuckLakeSnapshotReader } from \"./internal/ducklake-snapshot-reader\"\nimport { DuckLakeSqlExecutor } from \"./internal/ducklake-sql-executor\"\nimport { DuckLakeWriteCoordinator } from \"./internal/ducklake-write-coordinator\"\nimport type {\n DuckLakeMaintenanceOptions,\n DuckLakeMaintenanceReport,\n DuckLakeStorageOptions,\n} from \"./types\"\n\n/**\n * DuckLake-backed implementation of Sixb's LakeStorage API.\n *\n * The public surface stays aligned with core LakeStorage while DuckLake owns\n * physical tables, schemas, snapshots, and transactions behind the provider.\n * Sixb-specific metadata is only used to reconstruct DatasetVersion shape.\n */\nexport class DuckLakeStorage implements LakeStorageWithSql<\"duckdb\"> {\n readonly standard = { id: \"ducklake\", version: \"1.0\" } as const\n readonly recordsLineage = true\n readonly sql: DuckLakeSqlExecutor\n\n private readonly connections: DuckLakeConnectionManager\n private readonly datasets: DuckLakeDatasetCatalog\n private readonly maintenance: DuckLakeMaintenance\n private readonly rows: DuckLakeRowReader\n private readonly changes: DuckLakeChangeReader\n private readonly snapshotReader: DuckLakeSnapshotReader\n private readonly writes: DuckLakeWriteCoordinator\n\n constructor(options: DuckLakeStorageOptions) {\n const normalizedOptions: DuckLakeStorageOptions = {\n ...options,\n alias: options.alias ?? \"sixb_lake\",\n createIfNotExists: options.createIfNotExists ?? true,\n readOnly: options.readOnly ?? false,\n duckdb: {\n ...options.duckdb,\n path: options.duckdb?.path ?? \":memory:\",\n },\n }\n this.connections = new DuckLakeConnectionManager(normalizedOptions)\n this.datasets = new DuckLakeDatasetCatalog(normalizedOptions, this.connections)\n this.snapshotReader = new DuckLakeSnapshotReader(\n normalizedOptions,\n this.connections,\n this.datasets\n )\n this.maintenance = new DuckLakeMaintenance(\n normalizedOptions,\n this.connections,\n this.snapshotReader\n )\n this.rows = new DuckLakeRowReader(normalizedOptions, this.connections, this.snapshotReader)\n this.changes = new DuckLakeChangeReader(\n normalizedOptions,\n this.connections,\n this.snapshotReader\n )\n this.writes = new DuckLakeWriteCoordinator(\n normalizedOptions,\n this.connections,\n this.datasets,\n this.snapshotReader\n )\n this.sql = new DuckLakeSqlExecutor(\n normalizedOptions,\n this.connections,\n this.datasets,\n this.snapshotReader,\n this.writes\n )\n }\n\n async createDataset(definition: DatasetDefinition): Promise<DatasetDefinition> {\n return this.datasets.createDataset(definition, (runtime, dataset) =>\n this.snapshotReader.getLatestVersionSummaryAtCurrentSnapshot(runtime, dataset)\n )\n }\n\n async assertDatasetDefinitionsCompatible(\n definitions: readonly DatasetDefinition[]\n ): Promise<void> {\n await this.datasets.assertDatasetDefinitionsCompatible(definitions)\n }\n\n async getDataset(datasetId: string): Promise<DatasetDefinition | null> {\n return this.datasets.getDataset(datasetId)\n }\n\n async listDatasets(): Promise<readonly DatasetDefinition[]> {\n return this.datasets.listDatasets()\n }\n\n async listDatasetCatalogState(\n datasetIds: readonly string[]\n ): Promise<readonly DatasetCatalogState[]> {\n return this.snapshotReader.listDatasetCatalogState(datasetIds)\n }\n\n async listVersions(datasetId: string, limit?: number): Promise<readonly DatasetVersion[]> {\n return this.snapshotReader.listVersions(datasetId, limit)\n }\n\n async beginWrite(input: BeginDatasetWriteInput): Promise<LakeWriteSession> {\n return this.writes.beginWrite(input)\n }\n\n async beginMerge(input: BeginDatasetMergeInput): Promise<LakeMergeSession> {\n return this.writes.beginMerge(input)\n }\n\n async getLatestVersion(datasetId: string): Promise<DatasetVersion | null> {\n return this.snapshotReader.getLatestVersion(datasetId)\n }\n\n async getVersion(datasetId: string, versionId: string): Promise<DatasetVersion | null> {\n return this.snapshotReader.getVersion(datasetId, versionId)\n }\n\n async listLatestVersionsSince(\n input: ListLatestVersionsSinceInput\n ): Promise<LatestVersionsSince | null> {\n return this.snapshotReader.listLatestVersionsSince(input)\n }\n\n readRows(input: ReadDatasetRowsInput): AsyncIterable<DatasetRow> {\n return this.rows.readRows(input)\n }\n\n readChanges(input: ReadDatasetChangesInput): Promise<DatasetChanges | null> {\n return this.changes.readChanges(input)\n }\n\n async runMaintenance(options?: DuckLakeMaintenanceOptions): Promise<DuckLakeMaintenanceReport> {\n return this.maintenance.runMaintenance(options)\n }\n\n /**\n * `close()` is provider-specific and intentionally not part of the core\n * LakeStorage interface.\n */\n async close(): Promise<void> {\n await this.connections.close()\n }\n}\n"
45
45
  ],
46
- "mappings": ";;AAAA;AAEA;AAAA,sBAGE;AAAA;AAAA;;;ACLF;AAIO,SAAS,SAAS,CAAC,KAAgB,KAAqB;AAAA,EAC7D,MAAM,QAAQ,IAAI;AAAA,EAClB,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B,MAAM,IAAI,iBACR,0CAA0C,4BAA4B,OAAO,QAC/E;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAGF,SAAS,iBAAiB,CAAC,KAAgB,KAAiC;AAAA,EACjF,MAAM,QAAQ,IAAI;AAAA,EAClB,IAAI,UAAU,QAAQ,UAAU,WAAW;AAAA,IACzC;AAAA,EACF;AAAA,EAEA,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B,MAAM,IAAI,iBACR,0CAA0C,4BAA4B,OAAO,QAC/E;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAGF,SAAS,UAAU,CAAC,KAAgB,KAAsB;AAAA,EAC/D,MAAM,QAAQ,IAAI;AAAA,EAClB,IAAI,OAAO,UAAU,WAAW;AAAA,IAC9B,MAAM,IAAI,iBACR,0CAA0C,6BAA6B,OAAO,QAChF;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAGF,SAAS,aAAa,CAAC,KAAgB,KAAqB;AAAA,EACjE,MAAM,QAAQ,IAAI;AAAA,EAClB,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,OAAO,UAAU,YAAY,OAAO,UAAU,KAAK,GAAG;AAAA,IACxD,OAAO,OAAO,KAAK;AAAA,EACrB;AAAA,EAEA,IAAI,OAAO,UAAU,YAAY,UAAU,KAAK,KAAK,GAAG;AAAA,IACtD,OAAO,OAAO,KAAK;AAAA,EACrB;AAAA,EAEA,MAAM,IAAI,iBACR,0CAA0C,8BAA8B,OAAO,QACjF;AAAA;AAGK,SAAS,qBAAqB,CAAC,KAAgB,KAAiC;AAAA,EACrF,MAAM,QAAQ,IAAI;AAAA,EAClB,IAAI,UAAU,QAAQ,UAAU,WAAW;AAAA,IACzC;AAAA,EACF;AAAA,EAEA,OAAO,cAAc,KAAK,GAAG;AAAA;AAGxB,SAAS,OAAO,CAAC,KAAgB,KAAmB;AAAA,EACzD,MAAM,QAAQ,IAAI;AAAA,EAClB,IAAI,iBAAiB,MAAM;AAAA,IACzB,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B,OAAO,IAAI,KAAK,KAAK;AAAA,EACvB;AAAA,EAEA,MAAM,IAAI,iBACR,0CAA0C,0BAA0B,OAAO,QAC7E;AAAA;;;ACjFF,6BAAS;;;ACAT,6BAAS;AAKF,IAAM,uBAAuB;AAEpC,IAAM,cAAc,IAAI;AACxB,IAAM,cAAc,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC;AAE5D,SAAS,YAAY,CAAC,MAAuB;AAAA,EAC3C,OAAQ,QAAQ,MAAQ,QAAQ,OAAU,QAAQ,MAAQ,QAAQ;AAAA;AAGpE,SAAS,SAAS,CAAC,OAAwB;AAAA,EACzC,OAAO,gBAAgB,KAAK,KAAK;AAAA;AAUnC,SAAS,eAAe,CAAC,WAA2B;AAAA,EAClD,IAAI,UAAU,KAAK,EAAE,WAAW,GAAG;AAAA,IACjC,MAAM,IAAI,kBAAiB,8CAA8C;AAAA,EAC3E;AAAA,EAEA,IAAI,UAAU;AAAA,EACd,WAAW,QAAQ,YAAY,OAAO,SAAS,GAAG;AAAA,IAChD,IAAI,aAAa,IAAI,GAAG;AAAA,MACtB,WAAW,OAAO,aAAa,IAAI;AAAA,IACrC,EAAE,KAAK,IAAI,SAAS,IAAM;AAAA,MACxB,WAAW;AAAA,IACb,EAAE,KAAK;AAAA,MACL,WAAW,IAAI,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;AAAA;AAAA,EAEpD;AAAA,EAEA,OAAO;AAAA;AAST,SAAS,eAAe,CAAC,SAAgC;AAAA,EACvD,IAAI,QAAQ,WAAW,GAAG;AAAA,IACxB,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,QAAkB,CAAC;AAAA,EACzB,IAAI,QAAQ;AAAA,EAEZ,OAAO,QAAQ,QAAQ,QAAQ;AAAA,IAC7B,MAAM,OAAO,QAAQ;AAAA,IACrB,MAAM,OAAO,KAAK,WAAW,CAAC;AAAA,IAE9B,IAAI,aAAa,IAAI,GAAG;AAAA,MACtB,MAAM,KAAK,IAAI;AAAA,MACf,SAAS;AAAA,MACT;AAAA,IACF;AAAA,IAEA,IAAI,SAAS,KAAK;AAAA,MAChB,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,QAAQ,QAAQ,OAAO,KAAK;AAAA,MAC9B,MAAM,KAAK,EAAI;AAAA,MACf,SAAS;AAAA,MACT;AAAA,IACF;AAAA,IAEA,MAAM,MAAM,QAAQ,MAAM,QAAQ,GAAG,QAAQ,CAAC;AAAA,IAC9C,IAAI,CAAC,UAAU,GAAG,GAAG;AAAA,MACnB,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,KAAK,OAAO,SAAS,KAAK,EAAE,CAAC;AAAA,IACnC,SAAS;AAAA,EACX;AAAA,EAEA,IAAI;AAAA,IACF,OAAO,YAAY,OAAO,IAAI,WAAW,KAAK,CAAC;AAAA,IAC/C,MAAM;AAAA,IACN,OAAO;AAAA;AAAA;AAOJ,SAAS,sBAAsB,CAAC,WAA2B;AAAA,EAChE,OAAO,GAAG,uBAAuB,gBAAgB,SAAS;AAAA;AAIrD,SAAS,8BAA8B,CAAC,WAA2B;AAAA,EACxE,OAAO,cAAc,uBAAuB,SAAS;AAAA;AAMhD,SAAS,sBAAsB,CAAC,WAAkC;AAAA,EACvE,IAAI,CAAC,UAAU,WAAW,oBAAoB,GAAG;AAAA,IAC/C,OAAO;AAAA,EACT;AAAA,EAEA,OAAO,gBAAgB,UAAU,MAAM,qBAAqB,MAAM,CAAC;AAAA;;;AClHrE,6BAAS;AAYT,IAAM,gBAAgB;AAKf,SAAS,aAAa,CAAC,SAAwD;AAAA,EACpF,OAAO,QAAQ,SAAS;AAAA;AAO1B,SAAS,uBAAuB,CAAC,SAAwD;AAAA,EACvF,OAAO,uBAAuB,cAAc,OAAO;AAAA;AAS9C,SAAS,qCAAqC,CACnD,SACQ;AAAA,EACR,MAAM,aAAa;AAAA,IACjB,gBAAgB,eAAe,wBAAwB,OAAO,CAAC;AAAA,IAC/D,GAAG,uBAAuB,QAAQ,YAAY,EAAE,IAAI,GAAG,MAAM,YAAY,GAAG,QAAQ,OAAO;AAAA,EAC7F;AAAA,EAEA,OAAO,gCAAgC,WAAW,KAAK,IAAI;AAAA;AAOtD,SAAS,uBAAuB,CACrC,SACmB;AAAA,EACnB,OAAO,uBAAuB,QAAQ,YAAY,EAAE,IAClD,GAAG,MAAM,YAAY,eAAe,UAAU,OAChD;AAAA;AAUK,SAAS,yBAAyB,CACvC,SACA,WACQ;AAAA,EACR,OAAO,GAAG,gBAAgB,wBAAwB,OAAO,CAAC,KAAK,gBAC7D,uBAAuB,OAAO,CAChC,KAAK,gBAAgB,SAAS;AAAA;AAWzB,SAAS,0BAA0B,CACxC,SACA,OACQ;AAAA,EACR,IAAI,QAAQ,QAAQ,SAAS,YAAY;AAAA,IACvC,OAAO,MAAM,CAAC,cAAc,0BAA0B,SAAS,SAAS,CAAC;AAAA,EAC3E;AAAA,EAGA,MAAM,SAAS,QAAQ,QAAQ;AAAA,EAC/B,MAAM,MAAM,MAAM,CAAC,cACjB,WAAW,YACP,gBAAgB,SAAS,IACzB,GAAG,gBAAgB,MAAM,KAAK,gBAAgB,SAAS,GAC7D;AAAA,EACA,OAAO,gCAAgC,eAAe,wBAAwB,OAAO,CAAC,MAAM,eAAe,GAAG;AAAA;AAGhH,SAAS,sBAAsB,CAAC,SAA0D;AAAA,EACxF,IAAI,QAAQ,QAAQ,SAAS;AAAA,IAAY,OAAO;AAAA,EAEhD,OAAO,QAAQ,QAAQ,kBAAkB;AAAA;AASpC,SAAS,eAAe,CAAC,YAA4B;AAAA,EAC1D,IAAI,CAAC,2BAA2B,KAAK,UAAU,GAAG;AAAA,IAChD,MAAM,IAAI,kBAAiB,0CAA0C,cAAc;AAAA,EACrF;AAAA,EAEA,OAAO,IAAI;AAAA;AAMN,SAAS,cAAc,CAAC,OAAuB;AAAA,EACpD,OAAO,IAAI,MAAM,WAAW,KAAK,IAAI;AAAA;AAGhC,SAAS,kBAAkB,CAAC,QAAmC;AAAA,EACpE,OAAO,OAAO,IAAI,CAAC,UAAU,eAAe,KAAK,CAAC,EAAE,KAAK,IAAI;AAAA;AAMxD,SAAS,kBAAkB,CAChC,SACA,WACQ;AAAA,EACR,OAAO,GAAG,gBAAgB,cAAc,OAAO,CAAC,UAAU,gBAAgB,SAAS;AAAA;AAM9E,SAAS,UAAU,CAAC,SAAyC;AAAA,EAClE,QAAQ,QAAQ;AAAA,IACd,KAAK;AAAA,MACH,OAAO,YAAY,QAAQ;AAAA,IAC7B,KAAK;AAAA,MACH,OAAO,mBAAmB,QAAQ;AAAA,IACpC,KAAK;AAAA,MACH,OAAO,qBAAqB,yBAAyB,OAAO;AAAA,IAC9D,KAAK;AAAA,MACH,OAAO,YAAY,QAAQ;AAAA;AAAA;AAO1B,SAAS,wBAAwB,CAAC,SAAiD;AAAA,EACxF,MAAM,aAAuB,CAAC;AAAA,EAC9B,MAAM,QAAQ,IAAI;AAAA,EAElB,kCAAkC,YAAY,OAAO,UAAU,QAAQ,QAAQ;AAAA,EAC/E,kCAAkC,YAAY,OAAO,QAAQ,QAAQ,IAAI;AAAA,EACzE,kCAAkC,YAAY,OAAO,QAAQ,QAAQ,IAAI;AAAA,EACzE,kCAAkC,YAAY,OAAO,QAAQ,QAAQ,IAAI;AAAA,EACzE,kCAAkC,YAAY,OAAO,YAAY,QAAQ,QAAQ;AAAA,EACjF,kCAAkC,YAAY,OAAO,WAAW,QAAQ,OAAO;AAAA,EAC/E,kCAAkC,YAAY,OAAO,oBAAoB,QAAQ,eAAe;AAAA,EAChG,kCACE,YACA,OACA,mBACA,QAAQ,qBACV;AAAA,EAEA,YAAY,MAAM,UAAU,OAAO,QAAQ,QAAQ,cAAc,CAAC,CAAC,GAAG;AAAA,IACpE,kCAAkC,YAAY,OAAO,MAAM,KAAK;AAAA,EAClE;AAAA,EAEA,OAAO,WAAW,KAAK,GAAG;AAAA;AAM5B,SAAS,iBAAiB,CAAC,SAAoD;AAAA,EAC7E,QAAQ,QAAQ;AAAA,IACd,KAAK;AAAA,MACH,OAAO,CAAC;AAAA,IACV,KAAK;AAAA,MACH,OAAO,CAAC,QAAQ;AAAA,IAClB,KAAK;AAAA,MACH,OAAO,CAAC,UAAU;AAAA,IACpB,KAAK;AAAA,MACH,OAAO,QAAQ,cAAc,CAAC;AAAA;AAAA;AAO7B,SAAS,kBAAkB,CAAC,SAAoD;AAAA,EACrF,MAAM,aAAa,IAAI,IAAY,kBAAkB,QAAQ,OAAO,CAAC;AAAA,EAErE,WAAW,aAAa,kBAAkB,QAAQ,QAAQ,GAAG;AAAA,IAC3D,WAAW,IAAI,SAAS;AAAA,EAC1B;AAAA,EAEA,WAAW,UAAU,QAAQ,WAAW,CAAC,GAAG;AAAA,IAC1C,WAAW,aAAa,iBAAiB,MAAM,GAAG;AAAA,MAChD,WAAW,IAAI,SAAS;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,OAAO,CAAC,GAAG,UAAU;AAAA;AAMhB,SAAS,oBAAoB,CAAC,QAAqC;AAAA,EACxE,MAAM,cAAc,OAAO,aAAa,gBAAgB;AAAA,EACxD,MAAM,UAAU,OAAO,SAAS,YAAY,KAAK,GAAG,gBAAgB,OAAO,IAAI;AAAA,EAC/E,OAAO,qBAAqB,qBAAqB,WAAW,iBAAiB,MAAM,EAAE,KAAK,IAAI;AAAA;AAMzF,SAAS,cAAc,CAAC,SAAyC;AAAA,EACtE,MAAM,aAAuB,CAAC;AAAA,EAE9B,IAAI,QAAQ,aAAa,WAAW;AAAA,IAClC,WAAW,KAAK,aAAa,eAAe,QAAQ,QAAQ,GAAG;AAAA,EACjE;AAAA,EAEA,WAAW,KAAK,wBAAwB,QAAQ,qBAAqB,MAAM;AAAA,EAE3E,IAAI,QAAQ,UAAU;AAAA,IACpB,WAAW,KAAK,WAAW;AAAA,EAC7B;AAAA,EAEA,IAAI,QAAQ,QAAQ,SAAS,cAAc,QAAQ,QAAQ,mBAAmB,WAAW;AAAA,IACvF,WAAW,KAAK,mBAAmB,eAAe,QAAQ,QAAQ,cAAc,GAAG;AAAA,EACrF;AAAA,EAEA,IACE,QAAQ,QAAQ,SAAS,YACzB,QAAQ,QAAQ,uBAAuB,aACvC,OAAO,KAAK,QAAQ,QAAQ,kBAAkB,EAAE,SAAS,GACzD;AAAA,IACA,MAAM,UAAU,OAAO,QAAQ,QAAQ,QAAQ,kBAAkB,EAAE,IACjE,EAAE,KAAK,WAAW,GAAG,eAAe,GAAG,MAAM,eAAe,KAAK,GACnE;AAAA,IACA,WAAW,KAAK,4BAA4B,QAAQ,KAAK,IAAI,IAAI;AAAA,EACnE;AAAA,EAEA,OAAO,UAAU,eAAe,WAAW,QAAQ,OAAO,CAAC,QAAQ,gBACjE,cAAc,OAAO,CACvB,MAAM,WAAW,KAAK,IAAI;AAAA;AAG5B,SAAS,iBAAiB,CAAC,MAA6C;AAAA,EACtE,IAAI,SAAS,WAAW;AAAA,IACtB,OAAO,CAAC;AAAA,EACV;AAAA,EAEA,QAAQ,WAAW,IAAI;AAAA,IACrB,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,MACH,OAAO,CAAC,QAAQ;AAAA,IAClB,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,MACH,OAAO,CAAC,OAAO;AAAA,IACjB;AAAA,MACE,OAAO,CAAC;AAAA;AAAA;AAWd,SAAS,sBAAsB,CAC7B,MAC8D;AAAA,EAC9D,MAAM,aAAgD;AAAA,IACpD,EAAE,MAAM,6BAA6B,OAAO,OAAO,MAAM,0BAA0B,KAAK,EAAE;AAAA,EAC5F;AAAA,EAEA,iBAAiB,YAAY,mBAAmB,MAAM,cAAc;AAAA,EACpE,iBAAiB,YAAY,uBAAuB,MAAM,iBAAiB;AAAA,EAC3E,iBAAiB,YAAY,uBAAuB,MAAM,iBAAiB;AAAA,EAC3E,iBAAiB,YAAY,uBAAuB,MAAM,iBAAiB;AAAA,EAE3E,IAAI,MAAM,uBAAuB,WAAW;AAAA,IAC1C,WAAW,KAAK,EAAE,MAAM,wBAAwB,OAAO,OAAO,KAAK,kBAAkB,EAAE,CAAC;AAAA,EAC1F;AAAA,EAEA,IAAI,MAAM,qBAAqB,WAAW;AAAA,IACxC,WAAW,KAAK,EAAE,MAAM,sBAAsB,OAAO,eAAe,KAAK,gBAAgB,EAAE,CAAC;AAAA,EAC9F;AAAA,EAEA,OAAO;AAAA;AAGT,SAAS,gBAAgB,CACvB,YACA,MACA,OACM;AAAA,EACN,IAAI,UAAU,WAAW;AAAA,IACvB;AAAA,EACF;AAAA,EAEA,WAAW,KAAK,EAAE,MAAM,OAAO,OAAO,KAAK,EAAE,CAAC;AAAA;AAGhD,SAAS,gBAAgB,CAAC,QAAgD;AAAA,EACxE,QAAQ,OAAO;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,MACH,OAAO,CAAC,QAAQ;AAAA,IAClB,KAAK;AAAA,MACH,OAAO,CAAC,OAAO;AAAA;AAAA;AAIrB,SAAS,gBAAgB,CAAC,QAAgD;AAAA,EACxE,QAAQ,OAAO;AAAA,IACb,KAAK;AAAA,MACH,OAAO,2BAA2B,QAAQ;AAAA,QACxC;AAAA,QACA,GAAG,sBAAsB,MAAM;AAAA,QAC/B,GAAG,wBAAwB,cAAc,OAAO,QAAQ;AAAA,QACxD,GAAG,yBAAyB,kBAAkB,OAAO,aAAa;AAAA,MACpE,CAAC;AAAA,IACH,KAAK;AAAA,MACH,OAAO,2BAA2B,QAAQ;AAAA,QACxC;AAAA,QACA,GAAG,sBAAsB,MAAM;AAAA,QAC/B,GAAG,wBAAwB,cAAc,OAAO,SAAS;AAAA,MAC3D,CAAC;AAAA,IACH,KAAK;AAAA,MACH,OAAO,2BAA2B,QAAQ,CAAC,YAAY,GAAG,sBAAsB,MAAM,CAAC,CAAC;AAAA,IAC1F,KAAK;AAAA,MACH,OAAO,2BAA2B,QAAQ,sBAAsB,MAAM,CAAC;AAAA;AAAA;AAI7E,SAAS,qBAAqB,CAC5B,QACmB;AAAA,EACnB,OAAO;AAAA,IACL,GAAG,4BAA4B,YAAY,OAAO,QAAQ;AAAA,IAC1D,GAAG,wBAAwB,UAAU,OAAO,KAAK;AAAA,IACjD,GAAG,wBAAwB,UAAU,OAAO,MAAM;AAAA,IAClD,GAAG,wBAAwB,iBAAiB,OAAO,YAAY;AAAA,IAC/D,GAAG,wBAAwB,UAAU,OAAO,MAAM;AAAA,IAClD,GAAG,wBAAwB,YAAY,OAAO,QAAQ;AAAA,IACtD,GAAG,wBAAwB,aAAa,OAAO,QAAQ;AAAA,IACvD,GAAG,yBAAyB,WAAW,OAAO,MAAM;AAAA,IACpD,GAAG,yBAAyB,cAAc,OAAO,SAAS;AAAA,IAC1D,GAAG,wBAAwB,SAAS,OAAO,KAAK;AAAA,IAChD,GAAG,wBAAwB,WAAW,OAAO,OAAO;AAAA,EACtD;AAAA;AAGF,SAAS,qBAAqB,CAAC,QAA+C;AAAA,EAC5E,IACE,OAAO,aAAa,aACpB,OAAO,aAAa,aACpB,OAAO,iBAAiB,WACxB;AAAA,IACA,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,GAAG,wBAAwB,aAAa,OAAO,QAAQ;AAAA,MACvD,GAAG,wBAAwB,aAAa,OAAO,QAAQ;AAAA,MACvD,GAAG,wBAAwB,iBAAiB,OAAO,YAAY;AAAA,MAC/D,GAAG,wBAAwB,gBAAgB,OAAO,WAAW;AAAA,IAC/D;AAAA,EACF;AAAA,EAEA,MAAM,mBACJ,OAAO,qBACN,OAAO,gBAAgB,aAAa,OAAO,eAAe,YACvD,8CAA8C,OAAO,0BAA0B,OAAO,+CACtF;AAAA,EAEN,IAAI,qBAAqB,WAAW;AAAA,IAClC,OAAO,CAAC,cAAc,GAAG,wBAAwB,qBAAqB,gBAAgB,CAAC;AAAA,EACzF;AAAA,EAEA,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,GAAG,wBAAwB,gBAAgB,OAAO,WAAW;AAAA,EAC/D;AAAA;AAGF,SAAS,0BAA0B,CACjC,QACA,YACmB;AAAA,EACnB,OAAO,CAAC,GAAG,YAAY,GAAG,wBAAwB,SAAS,OAAO,KAAK,CAAC;AAAA;AAG1E,SAAS,uBAAuB,CAAC,MAAc,OAA8C;AAAA,EAC3F,OAAO,UAAU,YAAY,CAAC,IAAI,CAAC,GAAG,QAAQ,eAAe,KAAK,GAAG;AAAA;AAGvE,SAAS,wBAAwB,CAAC,MAAc,OAA+C;AAAA,EAC7F,OAAO,UAAU,YAAY,CAAC,IAAI,CAAC,GAAG,QAAQ,OAAO;AAAA;AAGvD,SAAS,2BAA2B,CAAC,MAAc,OAA8C;AAAA,EAC/F,IAAI,UAAU,WAAW;AAAA,IACvB,OAAO,CAAC;AAAA,EACV;AAAA,EAEA,IAAI,CAAC,2BAA2B,KAAK,KAAK,GAAG;AAAA,IAC3C,MAAM,IAAI,kBAAiB,0CAA0C,SAAS;AAAA,EAChF;AAAA,EAEA,OAAO,CAAC,GAAG,QAAQ,OAAO;AAAA;AAG5B,SAAS,iCAAiC,CACxC,YACA,OACA,MACA,OACM;AAAA,EACN,IAAI,UAAU,WAAW;AAAA,IACvB;AAAA,EACF;AAAA,EAEA,IAAI,CAAC,2BAA2B,KAAK,IAAI,GAAG;AAAA,IAC1C,MAAM,IAAI,kBAAiB,wDAAwD,QAAQ;AAAA,EAC7F;AAAA,EAEA,MAAM,iBAAiB,KAAK,YAAY;AAAA,EACxC,IAAI,MAAM,IAAI,cAAc,GAAG;AAAA,IAC7B,MAAM,IAAI,kBAAiB,0DAA0D,QAAQ;AAAA,EAC/F;AAAA,EAEA,MAAM,IAAI,cAAc;AAAA,EACxB,WAAW,KAAK,GAAG,QAAQ,6BAA6B,OAAO,KAAK,CAAC,GAAG;AAAA;AAG1E,SAAS,4BAA4B,CAAC,OAAuB;AAAA,EAC3D,OAAO,IAAI,MAAM,WAAW,MAAM,MAAM,EAAE,WAAW,KAAK,KAAK;AAAA;AAGjE,SAAS,UAAU,CAAC,MAA6B;AAAA,EAC/C,MAAM,QAAQ,6BAA6B,KAAK,IAAI;AAAA,EACpD,OAAO,QAAQ,MAAM,GAAG,YAAY,IAAI;AAAA;;;AFpcnC,eAAe,sBAAsB,CAC1C,SACA,SACA,WACiC;AAAA,EACjC,OAAO,iBAAiB,WAAW,MAAM,QAAQ,MAAM,iBAAiB,SAAS,SAAS,CAAC,CAAC;AAAA;AAQvF,eAAe,uCAAuC,CAC3D,SACA,SACA,WACkF;AAAA,EAElF,MAAM,OAAO,MAAM,QAAQ,MAAM;AAAA;AAAA,WAExB,gBAAgB,cAAc,OAAO,CAAC;AAAA,iBAChC,iBAAiB,SAAS,SAAS;AAAA,GACjD;AAAA,EACD,OAAO,SAAS;AAAA,EAChB,IAAI,UAAU,WAAW;AAAA,IACvB,MAAM,IAAI,kBAAiB,4DAA4D;AAAA,EACzF;AAAA,EAEA,OAAO;AAAA,IACL,YAAY,OAAO,cAAc,OAAO,kBAAkB,CAAC;AAAA,IAC3D,OAAO,iBACL,WACA,KAAK,OAAO,CAAC,QAAQ,IAAI,aAAa,QAAQ,IAAI,aAAa,SAAS,CAC1E;AAAA,EACF;AAAA;AAIK,SAAS,eAAe,CAAC,OAA8D;AAAA,EAC5F,OAAO,MAAM,oBAAoB,YAC7B,CAAC,MAAM,OAAO,IACd,CAAC,MAAM,SAAS,MAAM,eAAe;AAAA;AAG3C,SAAS,gBAAgB,CAAC,SAAiC,WAA2B;AAAA,EACpF,MAAM,aAAa,CAAC,uBAAuB,SAAS,GAAG,+BAA+B,SAAS,CAAC;AAAA,EAChG,OAAO;AAAA;AAAA,WAEE,0BAA0B,SAAS,gBAAgB;AAAA,2BACnC,WAAW,IAAI,CAAC,SAAS,eAAe,IAAI,CAAC,EAAE,KAAK,IAAI;AAAA;AAAA;AAAA;AAKnF,SAAS,gBAAgB,CACvB,WACA,MACwB;AAAA,EACxB,MAAM,YAAY,uBAAuB,SAAS;AAAA,EAClD,MAAM,YAAY,CAAC,SAAiB;AAAA,IAClC,MAAM,MAAM,KAAK,KAAK,CAAC,cAAc,UAAU,eAAe,IAAI;AAAA,IAClE,OAAO,QAAQ,YAAY,YAAY,cAAc,KAAK,UAAU;AAAA;AAAA,EAGtE,MAAM,UAAU,UAAU,SAAS;AAAA,EACnC,IAAI,YAAY,WAAW;AAAA,IACzB,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,kBAAkB,UAAU,+BAA+B,SAAS,CAAC;AAAA,EAC3E,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,OACI,oBAAoB,YAAY,CAAC,IAAI,EAAE,gBAAgB;AAAA,EAC7D;AAAA;;;AG1FF,6BAAS;;;ACWT,SAAS,sBAAsB,CAAC,SAAyB;AAAA,EACvD,OAAO,QACJ,KAAK,EACL,YAAY,EACZ,QAAQ,QAAQ,GAAG,EACnB,QAAQ,kBAAkB,IAAI;AAAA;AAGnC,SAAS,sBAAgD,CACvD,KACA,UAA6B,CAAC,GACmB;AAAA,EACjD,MAAM,gBAAgB,IAAI,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE,IAAI,sBAAsB,CAAC;AAAA,EAC3E,OAAO;AAAA,IACL;AAAA,IACA,SAAS,CAAC,YAAY,cAAc,IAAI,uBAAuB,OAAO,CAAC;AAAA,EACzE;AAAA;AAGF,SAAS,uBAAuB,CAAC,WAAmB,OAAyC;AAAA,EAC3F,OAAO;AAAA,OACF,uBAAuB,WAAW,cAAc,QAAQ;AAAA,IAC3D;AAAA,IACA;AAAA,EACF;AAAA;AASK,IAAM,sBAAsB;AAAA,EACjC,QAAQ,uBAAuB,SAAS;AAAA,EACxC,SAAS,uBAAuB,SAAS;AAAA,EACzC,OAAO,uBAAuB,UAAU,CAAC,OAAO,CAAC;AAAA,EACjD,SAAS,uBAAuB,UAAU,CAAC,SAAS,CAAC;AAAA,EACrD,SAAS,wBAAwB,IAAI,CAAC;AAAA,EACtC,MAAM,uBAAuB,MAAM;AAAA,EACnC,WAAW,uBAAuB,eAAe,CAAC,0BAA0B,CAAC;AAAA,EAC7E,MAAM,uBAAuB,MAAM;AAAA,EACnC,SAAS,uBACP,oHACF;AACF;AAEO,SAAS,iCAAiC,CAAC,SAAgD;AAAA,EAChG,WAAW,QAAQ,OAAO,KAAK,mBAAmB,GAA0B;AAAA,IAC1E,IAAI,oBAAoB,MAAM,QAAQ,OAAO,GAAG;AAAA,MAC9C,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA;AAAA;;;AClEF;AACA,6BAAS;AAGT,IAAM,cAAc,oBAAoB;AACxC,IAAM,mBAAmB,YAAY,YAAY,YAAY;AAKtD,SAAS,2BAA2B,CAAC,OAAgB,YAAkC;AAAA,EAC5F,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B,MAAM,IAAI,kBACR,kCAAkC,8CACpC;AAAA,EACF;AAAA,EAEA,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,aAAa,sBAAsB,KAAK;AAAA,IACxC,MAAM;AAAA,IACN,MAAM,IAAI,kBACR,kCAAkC,8CACpC;AAAA;AAAA,EAGF,MAAM,WAAW,WAAW,WAAW,GAAG,IAAI,WAAW,MAAM,CAAC,IAAI;AAAA,EACpE,OAAO,SAAS,WAAW,MAAM,SAAS,MAAM,GAAG;AAAA,EACnD,IAAI,QAAQ,SAAS,oBAAoB,SAAS,SAAS,YAAY,OAAO;AAAA,IAC5E,MAAM,IAAI,kBACR,kCAAkC,gDAAgD,YAAY,yBAAyB,uCAAuC,YAAY,0BAC5K;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;;;AFhBF,SAAS,4BAA4B,CAAC,MAAiC;AAAA,EAC5E,OAAO,oBAAoB,MAAM;AAAA;AAM5B,SAAS,6BAA6B,CAAC,SAAoC;AAAA,EAChF,MAAM,OAAO,kCAAkC,OAAO;AAAA,EACtD,IAAI,MAAM;AAAA,IACR,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,IAAI,kBACR,sCAAsC,0DACxC;AAAA;AAMK,SAAS,wBAAwB,CAAC,QAAyC;AAAA,EAChF,MAAM,cAAc,OAAO,WAAW,KAAK;AAAA,EAC3C,OAAO,GAAG,gBAAgB,OAAO,IAAI,KAAK,6BAA6B,OAAO,IAAI,IAAI;AAAA;AAMjF,SAAS,+BAA+B,CAAC,QAA+B;AAAA,EAC7E,OAAO,OAAO,QAAQ,IAAI,CAAC,WAAW,yBAAyB,MAAM,CAAC,EAAE,KAAK,IAAI;AAAA;AAI5E,SAAS,uCAAuC,CAAC,QAA+B;AAAA,EACrF,OAAO,OAAO,QACX,IAAI,CAAC,WAAW,GAAG,gBAAgB,OAAO,IAAI,KAAK,6BAA6B,OAAO,IAAI,GAAG,EAC9F,KAAK,IAAI;AAAA;AAMP,SAAS,2BAA2B,CAAC,QAA+B;AAAA,EACzE,OAAO,OAAO,QAAQ,IAAI,CAAC,WAAW,gBAAgB,OAAO,IAAI,CAAC,EAAE,KAAK,IAAI;AAAA;AAkBxE,SAAS,kBAAkB,CAAC,OAAgB,QAA0C;AAAA,EAC3F,IAAI,UAAU,QAAQ,UAAU,WAAW;AAAA,IACzC,OAAO;AAAA,EACT;AAAA,EAEA,QAAQ,OAAO;AAAA,IACb,KAAK;AAAA,MACH,OAAO,OAAO,UAAU,WAAW,MAAM,SAAS,IAAI;AAAA,IACxD,KAAK;AAAA,MACH,OAAO,4BAA4B,OAAO,OAAO,IAAI;AAAA,IACvD,KAAK;AAAA,MACH,OAAO,iBAAiB,OAAO,MAAM,YAAY,EAAE,MAAM,GAAG,EAAE,IAAI,OAAO,KAAK;AAAA,IAChF,KAAK;AAAA,MACH,OAAO,iBAAiB,OAAO,MAAM,YAAY,IAAI,OAAO,KAAK;AAAA,IACnE,KAAK;AAAA,MACH,OAAO,OAAO,UAAU,WAAW,KAAK,MAAM,KAAK,IAAI;AAAA,IACzD,KAAK;AAAA,MACH,OAAO,iBAAiB,KAAK;AAAA,IAC/B;AAAA,MACE,OAAO;AAAA;AAAA;AAIb,SAAS,gBAAgB,CAAC,OAAyB;AAAA,EACjD,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK,GAAG;AAAA,IACvE,MAAM,IAAI,kBAAiB,uDAAuD;AAAA,EACpF;AAAA,EAEA,MAAM,SAAS;AAAA,EACf,OAAO;AAAA,IACL,QAAQ,eAAe,QAAQ,QAAQ;AAAA,IACvC,QAAQ,eAAe,QAAQ,QAAQ;AAAA,IACvC,WAAW,gBAAgB,QAAQ,WAAW;AAAA,IAC9C,UAAU,uBAAuB,QAAQ,UAAU;AAAA,IACnD,WAAW,uBAAuB,QAAQ,WAAW;AAAA,IACrD,aAAa,uBAAuB,QAAQ,aAAa;AAAA,EAC3D;AAAA;AAGF,SAAS,cAAc,CAAC,QAA2C,KAAqB;AAAA,EACtF,MAAM,QAAQ,OAAO;AAAA,EACrB,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B,MAAM,IAAI,kBAAiB,wCAAwC,wBAAwB;AAAA,EAC7F;AAAA,EAEA,OAAO;AAAA;AAGT,SAAS,sBAAsB,CAC7B,QACA,KACoB;AAAA,EACpB,MAAM,QAAQ,OAAO;AAAA,EACrB,IAAI,UAAU,QAAQ,UAAU,WAAW;AAAA,IACzC;AAAA,EACF;AAAA,EAEA,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B,MAAM,IAAI,kBAAiB,wCAAwC,wBAAwB;AAAA,EAC7F;AAAA,EAEA,OAAO;AAAA;AAGT,SAAS,eAAe,CAAC,QAA2C,KAAqB;AAAA,EACvF,MAAM,QAAQ,OAAO;AAAA,EACrB,IAAI,OAAO,UAAU,YAAY,OAAO,UAAU,KAAK,GAAG;AAAA,IACxD,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B,OAAO,OAAO,KAAK;AAAA,EACrB;AAAA,EAEA,MAAM,IAAI,kBAAiB,wCAAwC,0BAA0B;AAAA;;;AGzJ/F,6BAAS;AAoBF,SAAS,cAAc,CAAC,WAA2B;AAAA,EACxD,IAAI,CAAC,UAAU,WAAW,WAAW,GAAG;AAAA,IACtC,MAAM,IAAI,kBAAiB,+CAA+C,aAAa;AAAA,EACzF;AAAA,EAEA,MAAM,aAAa,UAAU,MAAM,YAAY,MAAM;AAAA,EACrD,IAAI,CAAC,QAAQ,KAAK,UAAU,GAAG;AAAA,IAC7B,MAAM,IAAI,kBAAiB,+CAA+C,aAAa;AAAA,EACzF;AAAA,EAEA,OAAO;AAAA;AAGF,SAAS,WAAW,CAAC,YAA4B;AAAA,EACtD,OAAO,YAAY;AAAA;AAGd,SAAS,mBAAmB,CAAC,OAAgD;AAAA,EAClF,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B;AAAA,EACF;AAAA,EAEA,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,SAAS,KAAK,MAAM,KAAK;AAAA,IACzB,MAAM;AAAA,IACN;AAAA;AAAA,EAGF,IACE,CAAC,SAAS,MAAM,KAChB,CAAC,SAAS,OAAO,IAAI,KACrB,OAAO,KAAK,SAAS,oBACrB,OAAO,OAAO,KAAK,cAAc,UACjC;AAAA,IACA;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,OAAO,KAAK;AAAA,EACzB,MAAM,WAAW,OAAO,KAAK;AAAA,EAC7B,MAAM,WAAW,qBAAqB,OAAO,KAAK,QAAQ;AAAA,EAC1D,MAAM,WAAW,OAAO,KAAK;AAAA,EAC7B,MAAM,6BAA6B,OAAO,KAAK;AAAA,EAE/C,OAAO;AAAA,IACL,MAAM;AAAA,IACN,WAAW,OAAO,KAAK;AAAA,OACnB,OAAO,aAAa,WAAW,EAAE,SAAS,IAAI,CAAC;AAAA,OAC/C,SAAS,cAAc,SAAS,YAAY,SAAS,WAAW,SAAS,WACzE,EAAE,KAAK,IACP,CAAC;AAAA,OACD,aAAa,YAAY,CAAC,IAAI,EAAE,SAAS;AAAA,OACzC,qBAAqB,OAAO,KAAK,MAAM,IAAI,EAAE,QAAQ,OAAO,KAAK,OAAO,IAAI,CAAC;AAAA,OAC7E,OAAO,aAAa,YAAY,WAAW,QAAQ,IAAI,EAAE,SAAS,IAAI,CAAC;AAAA,OACvE,OAAO,aAAa,YAAY,6BAA6B,0BAA0B,IACvF,EAAE,2BAA2B,IAC7B,CAAC;AAAA,OACD,uBAAuB,OAAO,KAAK,YAAY,IAC/C,EAAE,cAAc,OAAO,KAAK,aAAa,IACzC,CAAC;AAAA,OACD,OAAO,KAAK,YAAY,YAAY,CAAC,IAAI,EAAE,SAAS,OAAO,KAAK,QAAQ;AAAA,EAC9E;AAAA;AAIK,SAAS,kBAAkB,CAAC,aAAqB,UAAsC;AAAA,EAC5F,MAAM,MAAM,IAAI,IAAI,SAAS,IAAI,CAAC,YAAY,QAAQ,SAAS,CAAC,CAAC;AAAA,EACjE,OAAO,YAAY,MAAM,GAAG,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI,OAAO,MAAM,GAAG,EAAE,MAAM,EAAE,CAAC;AAAA;AAQ7E,SAAS,oBAAoB,CAClC,aACA,SACwE;AAAA,EACxE,MAAM,cAAc,QAAQ,SAAS;AAAA,EACrC,IAAI,gBAAgB;AAAA,EACpB,IAAI,kBAAkB;AAAA,EAEtB,WAAW,UAAU,YAAY,MAAM,GAAG,GAAG;AAAA,IAC3C,OAAO,MAAM,kBAAkB,OAAO,MAAM,GAAG;AAAA,IAC/C,IAAI,mBAAmB,aAAa;AAAA,MAClC;AAAA,IACF;AAAA,IAEA,MAAM,iBAAiB,KAAK,YAAY;AAAA,IACxC,IAAI,eAAe,SAAS,QAAQ,KAAK,eAAe,SAAS,QAAQ,GAAG;AAAA,MAC1E,gBAAgB;AAAA,IAClB;AAAA,IAEA,IAAI,eAAe,SAAS,QAAQ,GAAG;AAAA,MACrC,kBAAkB;AAAA,IACpB;AAAA,EACF;AAAA,EAEA,OAAO,EAAE,eAAe,gBAAgB;AAAA;AAG1C,SAAS,QAAQ,CAAC,OAA4D;AAAA,EAC5E,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAAA;AAQ5E,SAAS,oBAAoB,CAAC,OAA6C;AAAA,EACzE,IACE,CAAC,SAAS,KAAK,KACd,MAAM,SAAS,UAAU,MAAM,SAAS,cAAc,MAAM,SAAS,UACtE;AAAA,IACA;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,MAAM,MAAM;AAAA,OACR,OAAO,MAAM,OAAO,WAAW,EAAE,IAAI,MAAM,GAAG,IAAI,CAAC;AAAA,OACnD,OAAO,MAAM,UAAU,WAAW,EAAE,OAAO,MAAM,MAAM,IAAI,CAAC;AAAA,OAC5D,OAAO,MAAM,WAAW,WAAW,EAAE,QAAQ,MAAM,OAAO,IAAI,CAAC;AAAA,EACrE;AAAA;AAGF,SAAS,oBAAoB,CAAC,OAAgE;AAAA,EAC5F,OACE,MAAM,QAAQ,KAAK,KACnB,MAAM,MACJ,CAAC,SACC,SAAS,IAAI,KAAK,OAAO,KAAK,cAAc,YAAY,OAAO,KAAK,cAAc,QACtF;AAAA;AAIJ,SAAS,sBAAsB,CAAC,OAAmD;AAAA,EACjF,OACE,SAAS,KAAK,MACb,MAAM,eAAe,aACnB,MAAM,QAAQ,MAAM,UAAU,KAC7B,MAAM,WAAW,MAAM,CAAC,eAAe,OAAO,eAAe,QAAQ;AAAA;AAI7E,SAAS,UAAU,CAAC,OAAiC;AAAA,EACnD,OAAO,OAAO,UAAU,YAAY,OAAO,cAAc,KAAK,KAAK,SAAS;AAAA;AAG9E,SAAS,4BAA4B,CAAC,OAA4C;AAAA,EAChF,OACE,MAAM,QAAQ,KAAK,KACnB,MAAM,SAAS,KACf,MAAM,MAAM,CAAC,WAAW,OAAO,WAAW,YAAY,OAAO,KAAK,EAAE,SAAS,CAAC,KAC9E,IAAI,IAAI,KAAK,EAAE,SAAS,MAAM;AAAA;;;AR7JlC,IAAM,YAAY;AAAA;AAGX,MAAM,qBAAqB;AAAA,EAEb;AAAA,EACA;AAAA,EACA;AAAA,EAHnB,WAAW,CACQ,SACA,aACA,WACjB;AAAA,IAHiB;AAAA,IACA;AAAA,IACA;AAAA;AAAA,QAGb,WAAW,CAAC,OAAgE;AAAA,IAChF,MAAM,QAAQ,eAAe;AAAA,IAC7B,MAAM,SAAS,MAAM,KAAK,UAAU,WAAW,MAAM,WAAW,MAAM,aAAa;AAAA,IACnF,MAAM,QAAQ,MAAM,KAAK,UAAU,WAAW,MAAM,WAAW,MAAM,WAAW;AAAA,IAChF,MAAM,UAAU,4BAA4B,OAAO,QAAQ,KAAK;AAAA,IAChE,IAAI,CAAC;AAAA,MAAS,OAAO;AAAA,IACrB,MAAM,QAAQ,MAAM,KAAK,YAAY,uBAAuB;AAAA,IAC5D,MAAM,UAAU,MAAM;AAAA,IACtB,MAAM,YAAY,gBAAgB,cAAc,WAAW,EAAE,WAAW,KAAK,EAAE,GAAG;AAAA,IAClF,IAAI,WAAW;AAAA,IACf,IAAI,UAAU;AAAA,IACd,IAAI;AAAA,MACF,MAAM,MAAM,MAAM,uBAAuB,KAAK,SAAS,SAAS,MAAM,SAAS;AAAA,MAC/E,IAAI,CAAC;AAAA,QAAK,OAAO;AAAA,MACjB,MAAM,QAAQ,mBAAmB,KAAK,SAAS,IAAI,SAAS;AAAA,MAC5D,MAAM,cAAc,GAAG,wBAAwB,eAAe,MAAM,aAAa;AAAA,MACjF,MAAM,cAAc,GAAG,wBAAwB,eAAe,MAAM,WAAW;AAAA,MAC/E,MAAM,gBAAgB,MAAM,eAAe,SAAS,aAAa,MAAM,UAAU;AAAA,MACjF,MAAM,YAAY,MAAM,eAAe,SAAS,aAAa,MAAM,UAAU;AAAA,MAC7E,IAAI,kBAAkB,QAAQ,cAAc;AAAA,QAAM,OAAO;AAAA,MACzD,MAAM,QAAQ,eAAe;AAAA,MAC7B,MAAM,MAAM,gBAAgB,MAAM,WAAW,EAAG;AAAA,MAChD,MAAM,SAAS,QAAQ,QAAQ,CAAC,QAAQ,UAAU;AAAA,QAChD,KAAK,gBAAgB,OAAO,IAAI,SAAS;AAAA,QACzC,KAAK,gBAAgB,OAAO,IAAI,SAAS;AAAA,MAC3C,CAAC;AAAA,MACD,MAAM,OAAO,MAAM,WAChB,IAAI,CAAC,SAAS,KAAK,gBAAgB,IAAI,SAAS,gBAAgB,IAAI,GAAG,EACvE,KAAK,OAAO;AAAA,MACf,MAAM,UAAU,QACb,IACC,CAAC,WACC,KAAK,gBAAgB,OAAO,IAAI,wBAAwB,gBAAgB,OAAO,IAAI,GACvF,EACC,KAAK,MAAM;AAAA,MAGd,MAAM,QAAQ,IAAI,qBAAqB;AAAA,mBAC1B,wCAAwC;AAAA,YAC/C,OAAO,KAAK,IAAI;AAAA,8BACE;AAAA,yCACW,qBAAqB;AAAA,kBAC5C,oBAAoB,kBAAkB,SAAS;AAAA,MAC3D,UAAU;AAAA,MACV,OAAO,SAAS,MAAM,QAAQ,MAAM,iCAAiC,WAAW;AAAA,MAChF,MAAM,cAAc,UAAU,OAAQ,OAAO;AAAA,MAC7C,MAAM,QAAQ,eAAe;AAAA,MAC7B,IAAI;AAAA,MACJ,MAAM,QAAQ,MAAM;AAAA,QAClB,iBAAiB,QAAQ,IAAI,wBAAwB,WAAW;AAAA,QAChE,OAAO;AAAA;AAAA,MAET,MAAM,UAAW,gBAAgB,GAAoC;AAAA,QACnE,IAAI;AAAA,UACF,IAAI,SAAS,CAAC;AAAA,UACd,IAAI,YAAY;AAAA,UAChB,OAAO,YAAY,aAAa;AAAA,YAC9B,MAAM,QAAQ,eAAe;AAAA,YAC7B,IAAI;AAAA,cAAc,MAAM,IAAI,kBAAiB,yCAAyC;AAAA,YACtF,MAAM,OAAO,MAAM,QAAQ,MAAM,oCAAoC;AAAA,8BACnD,+BAA+B,WAAW;AAAA,YAC5D,IAAI,KAAK,WAAW;AAAA,cAClB,MAAM,IAAI,kBACR,6DACF;AAAA,YACF,WAAW,OAAO,MAAM;AAAA,cACtB,MAAM,QAAQ,eAAe;AAAA,cAC7B;AAAA,cACA,MAAM;AAAA,gBACJ,QAAQ,IAAI,mBAAmB,OAAO,SAAS,KAAK,KAAK,OAAO,IAAI;AAAA,gBACpE,OAAO,IAAI,kBAAkB,OAAO,SAAS,KAAK,KAAK,OAAO,IAAI;AAAA,cACpE;AAAA,YACF;AAAA,YACA,SAAS,cAAc,KAAK,KAAK,SAAS,IAAK,UAAU;AAAA,UAC3D;AAAA,UACA,QAAQ;AAAA,UACR,MAAM,MAAM;AAAA;AAAA,QAEb;AAAA,MACH,WAAW;AAAA,MACX,OAAO,EAAE,cAAc,eAAe,YAAY,WAAW,aAAa,SAAS,MAAM;AAAA,MACzF,QAAQ;AAAA,MAGR,IAAI;AAAA,QACF,IAAI,CAAC,YAAY;AAAA,UAAS,MAAM,QAAQ,IAAI,wBAAwB,WAAW;AAAA,QAC/E,QAAQ;AAAA,QACR,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA;AAI5B;AAEA,eAAe,cAAc,CAC3B,SACA,UACA,MACwB;AAAA,EACxB,MAAM,QAAQ,KAAK,IAAI,eAAe;AAAA,EACtC,MAAM,UAAU,MAAM,IAAI,CAAC,SAAS,GAAG,wBAAwB,YAAY,EAAE,KAAK,MAAM;AAAA,EACxF,OAAO,OAAO,MAAM,QAAQ,MAAM;AAAA,sBACd,MAAM,KAAK,IAAI;AAAA,6BACR,iCAAiC,UAAU;AAAA,EACtE,MAAM,QAAQ,UAAU,KAAM,OAAO;AAAA,EACrC,OAAO,UAAU,KAAM,aAAa,MAAM,SAAS,UAAU,KAAM,cAAc,MAAM,IACnF,QACA;AAAA;AAGN,SAAS,SAAS,CAAC,KAAwC,MAAsB;AAAA,EAC/E,MAAM,QAAQ,OAAO,cAAc,KAAK,IAAI,CAAC;AAAA,EAC7C,IAAI,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ;AAAA,IAC1C,MAAM,IAAI,kBAAiB,kEAAkE;AAAA,EAC/F,OAAO;AAAA;AAGT,SAAS,QAAQ,CACf,KACA,QACA,SACY;AAAA,EACZ,OAAO,OAAO,YACZ,QAAQ,IAAI,CAAC,QAAQ,UAAU;AAAA,IAC7B,OAAO;AAAA,IACP,mBAAmB,IAAI,GAAG,SAAS,UAAU,MAAM;AAAA,EACrD,CAAC,CACH;AAAA;;;AS3JF,6BAAS;;;ACAT;AAWO,SAAS,2BAA2B,CACzC,SACoB;AAAA,EACpB,QAAQ,QAAQ,QAAQ;AAAA,IACtB,KAAK;AAAA,IACL,KAAK;AAAA,MACH,IAAI,QAAQ,QAAQ,SAAS,YAAY;AAAA,QACvC;AAAA,MACF;AAAA,MAEA,OAAO,GAAG,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,IAAI;AAAA,IAChE,KAAK;AAAA,MACH,OAAO,UAAU,QAAQ,QAAQ;AAAA,IACnC,KAAK;AAAA,MACH;AAAA;AAAA;;;ACzBN;AACA,0BAAe;AACf;AAAA;AAAA;AAMA,6BAAS;;;ACPT,6BAAS;;;ACDT;AAAA;AAAA;AAAA;AAAA;AAOA,6BAAS;AAMF,IAAM,2BAAqD,CAAC,OAAO,MAAM,cAAc;AAAA,EAC5F,IAAI,UAAU,MAAM;AAAA,IAClB,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,KAAK,WAAW,aAAa,SAAS;AAAA,IACxC,IAAI,EAAE,iBAAiB,qBAAqB;AAAA,MAC1C,MAAM,IAAI,kBAAiB,0DAA0D;AAAA,IACvF;AAAA,IACA,OAAO,MAAM,SAAS;AAAA,EACxB;AAAA,EAEA,OAAO,uBAAuB,OAAO,MAAM,SAAS;AAAA;;;ADV/C,MAAM,iBAAyC;AAAA,EAajC;AAAA,EACA;AAAA,EAbX;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,WAAW;AAAA,EACF,UAAU,MAAM;AAAA,IAG1B,KAAK,MAAM,EAAE,MAAM,MAAM,EAAE;AAAA;AAAA,EAGlC,WAAW,CACQ,YACA,SACjB;AAAA,IAFiB;AAAA,IACA;AAAA;AAAA,QAGb,KAAK,CAAC,KAA4B;AAAA,IACtC,KAAK,QAAQ,QAAQ,eAAe;AAAA,IACpC,KAAK,QAAQ,QAAQ,iBAAiB,SAAS,KAAK,SAAS,EAAE,MAAM,KAAK,CAAC;AAAA,IAG3E,MAAM,KAAK,MAAM,KAAK,WAAW,IAAI,qCAAqC,CAAC;AAAA,IAC3E,KAAK,WAAW;AAAA,IAChB,MAAM,WAAW,MAAM,KAAK,MAAM,KAAK,WAAW,QAAQ,GAAG,CAAC;AAAA,IAC9D,IAAI;AAAA,MACF,KAAK,WAAW;AAAA,MAGhB,KAAK,gBAAgB,KAAK,MAAM,SAAS,YAAY,EAAE,UAAU,CAAC,EAAE,QAAQ,MAAM;AAAA,QAChF,SAAS,YAAY;AAAA,OACtB;AAAA,MAGI,KAAK,cAAc,MAAM,MAAM,EAAE;AAAA,MACtC,OAAO,OAAO;AAAA,MACd,SAAS,YAAY;AAAA,MACrB,MAAM;AAAA;AAAA;AAAA,SAIH,IAAI,GAA2C;AAAA,IACpD,IAAI,KAAK;AAAA,MACP,MAAM,IAAI,mBAAiB,kDAAkD;AAAA,IAC/E,KAAK,WAAW;AAAA,IAChB,IAAI;AAAA,MACF,KAAK,WAAW;AAAA,MAChB,MAAM,SAAS,MAAM,KAAK;AAAA,MAC1B,KAAK,WAAW;AAAA,MAChB,MAAM,UAAU,OACb,yBAAyB,wBAAwB,EACjD,OAAO,eAAe;AAAA,MACzB,OAAO,MAAM;AAAA,QACX,KAAK,WAAW;AAAA,QAChB,MAAM,QAAQ,MAAM,KAAK,MAAM,QAAQ,KAAK,CAAC;AAAA,QAC7C,KAAK,WAAW;AAAA,QAChB,IAAI,MAAM,MAAM;AAAA,UACd,KAAK,WAAW;AAAA,UAChB;AAAA,QACF;AAAA,QACA,WAAW,OAAO,MAAM,OAAO;AAAA,UAC7B,KAAK,WAAW;AAAA,UAChB,MAAM;AAAA,QACR;AAAA,MACF;AAAA,MACA,QAAQ;AAAA,MACR,MAAM,KAAK,MAAM;AAAA;AAAA;AAAA,EAIrB,KAAK,GAAkB;AAAA,IACrB,IAAI,CAAC,KAAK,cAAc;AAAA,MACtB,KAAK,QAAQ,QAAQ,oBAAoB,SAAS,KAAK,OAAO;AAAA,MAC9D,IAAI,KAAK;AAAA,QAAS,KAAK,WAAW,UAAU;AAAA,MAC5C,KAAK,eAAe,KAAK,OAAO;AAAA,IAClC;AAAA,IACA,OAAO,KAAK;AAAA;AAAA,QAGA,MAAM,GAAkB;AAAA,IACpC,IAAI;AAAA,MACF,MAAM,KAAK,SAAS,MAAM,MAAM,EAAE;AAAA,MAClC,IAAI,CAAC,KAAK,UAAU;AAAA,QAGlB,MAAM,KAAK,WAAW,IAAI,UAAU;AAAA,MACtC;AAAA,MACA,QAAQ;AAAA,MACR,KAAK,gBAAgB;AAAA,MACrB,IAAI;AAAA,QACF,KAAK,WAAW,UAAU;AAAA,QAC1B,QAAQ;AAAA,QACR,MAAM,KAAK,QAAQ,UAAU;AAAA;AAAA;AAAA;AAAA,QAKrB,KAAQ,CAAC,WAAmC;AAAA,IACxD,KAAK,UAAU;AAAA,IACf,IAAI;AAAA,MACF,OAAO,MAAM;AAAA,MACb,OAAO,OAAO;AAAA,MACd,KAAK,WAAW;AAAA,MAChB,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,IAAI,KAAK,YAAY;AAAA,QAAW,KAAK,UAAU;AAAA;AAAA;AAAA,EAI3C,UAAU,GAAS;AAAA,IACzB,KAAK,QAAQ,QAAQ,eAAe;AAAA,IACpC,IAAI,KAAK;AAAA,MAAc,MAAM,IAAI,mBAAiB,kCAAkC;AAAA;AAExF;;;ADtDA,MAAM,kBAA2C;AAAA,EAS5B;AAAA,EACA;AAAA,EACA;AAAA,EAVX,UAAU;AAAA,EACV,SAAS;AAAA,EAET,aAA4B,QAAQ,QAAQ;AAAA,EACnC,UAAU,IAAI;AAAA,EACvB;AAAA,EAER,WAAW,CACQ,UACA,YACA,oBACjB;AAAA,IAHiB;AAAA,IACA;AAAA,IACA;AAAA;AAAA,QAGb,UAAU,CAAC,KAAa,UAA+B,CAAC,GAA0B;AAAA,IACtF,OAAO,KAAK,QAAQ,YAAY;AAAA,MAC9B,KAAK,0BAA0B;AAAA,MAC/B,MAAM,aAAa,MAAM,KAAK,SAAS,QAAQ;AAAA,MAC/C,IAAI,KAAK,SAAS;AAAA,QAChB,WAAW,UAAU;AAAA,QACrB,KAAK,0BAA0B;AAAA,MACjC;AAAA,MACA,MAAM,SAAS,IAAI,iBAAiB,YAAY;AAAA,WAC3C;AAAA,QACH,SAAS,YAAY;AAAA,UACnB,KAAK,QAAQ,OAAO,MAAM;AAAA,UAC1B,MAAM,QAAQ,UAAU;AAAA;AAAA,MAE5B,CAAC;AAAA,MACD,KAAK,QAAQ,IAAI,MAAM;AAAA,MACvB,IAAI;AAAA,QACF,MAAM,OAAO,MAAM,GAAG;AAAA,QACtB,OAAO;AAAA,QACP,OAAO,OAAO;AAAA,QACd,MAAM,OAAO,MAAM;AAAA,QACnB,MAAM;AAAA;AAAA,KAET;AAAA;AAAA,QAGG,GAAG,CAAC,KAAa,QAAgD;AAAA,IACrE,MAAM,KAAK,QAAQ,YAAY;AAAA,MAC7B,MAAM,KAAK,WAAW,IAAI,KAAK,WAAW,YAAY,YAAY,CAAC,GAAG,MAAM,CAAC;AAAA,KAC9E;AAAA;AAAA,QAGG,aAAa,CAAC,YAA8C;AAAA,IAChE,MAAM,KAAK,QAAQ,YAAY;AAAA,MAC7B,WAAW,OAAO,YAAY;AAAA,QAC5B,MAAM,KAAK,WAAW,IAAI,GAAG;AAAA,MAC/B;AAAA,KACD;AAAA;AAAA,QAGG,KAAK,CACT,KACA,QAC6C;AAAA,IAC7C,OAAO,KAAK,QAAQ,YAAY;AAAA,MAC9B,MAAM,SAAS,MAAM,KAAK,WAAW,cACnC,KACA,WAAW,YAAY,YAAY,CAAC,GAAG,MAAM,CAC/C;AAAA,MACA,OAAO,OAAO,kBAAkB,wBAAwB;AAAA,KACzD;AAAA;AAAA,QAGG,YAAe,CACnB,WACA,aACY;AAAA,IACZ,OAAO,KAAK,QAAQ,YAAY;AAAA,MAC9B,MAAM,WAAW,MAAM,KAAK,WAAW,eAAe,SAAS;AAAA,MAC/D,IAAI;AAAA,QACF,OAAO,MAAM,YAAY,IAAI,0BAA0B,QAAQ,CAAC;AAAA,QAChE,QAAQ;AAAA,QACR,SAAS,UAAU;AAAA;AAAA,KAEtB;AAAA;AAAA,QAGG,aAAgB,CAAC,YAAyE;AAAA,IAC9F,OAAO,KAAK,QAAQ,YAAY;AAAA,MAG9B,OAAO,WAAW,IAAI,2BAA2B,KAAK,UAAU,CAAC;AAAA,KAClE;AAAA;AAAA,EAGH,KAAK,GAAkB;AAAA,IACrB,KAAK,iBAAiB,KAAK,OAAO;AAAA,IAClC,OAAO,KAAK;AAAA;AAAA,QAGR,WAAW,GAAkB;AAAA,IACjC,MAAM,UAAU,MAAM,QAAQ,WAAW,CAAC,GAAG,KAAK,OAAO,EAAE,IAAI,CAAC,WAAW,OAAO,MAAM,CAAC,CAAC;AAAA,IAC1F,MAAM,SAAS,QAAQ,KAAK,CAAC,WAAW,OAAO,WAAW,UAAU;AAAA,IACpE,IAAI,QAAQ,WAAW;AAAA,MAAY,MAAM,OAAO;AAAA;AAAA,QAGpC,MAAM,GAAkB;AAAA,IACpC,KAAK,UAAU;AAAA,IACf,MAAM,UAAU,MAAM,QAAQ,WAAW,CAAC,GAAG,KAAK,OAAO,EAAE,IAAI,CAAC,WAAW,OAAO,MAAM,CAAC,CAAC;AAAA,IAG1F,MAAM,KAAK,WAAW,MAAM,MAAM,EAAE;AAAA,IACpC,KAAK,SAAS;AAAA,IACd,KAAK,WAAW,UAAU;AAAA,IAC1B,KAAK,SAAS,UAAU;AAAA,IACxB,IAAI,KAAK;AAAA,MAAoB,MAAM,GAAG,KAAK,oBAAoB,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,IAC/F,MAAM,SAAS,QAAQ,KAAK,CAAC,WAAW,OAAO,WAAW,UAAU;AAAA,IACpE,IAAI,QAAQ,WAAW;AAAA,MAAY,MAAM,OAAO;AAAA;AAAA,EAG1C,OAAU,CAAC,WAA6C;AAAA,IAC9D,KAAK,0BAA0B;AAAA,IAI/B,MAAM,SAAS,KAAK,WAAW,KAAK,YAAY;AAAA,MAC9C,KAAK,gBAAgB;AAAA,MACrB,OAAO,UAAU;AAAA,KAClB;AAAA,IACD,KAAK,aAAa,OAAO,KACvB,MAAM,IACN,MAAM,EACR;AAAA,IACA,OAAO;AAAA;AAAA,EAGD,yBAAyB,GAAS;AAAA,IACxC,IAAI,KAAK,WAAW,KAAK,QAAQ;AAAA,MAC/B,MAAM,IAAI,mBAAiB,0CAA0C;AAAA,IACvE;AAAA;AAAA,EAGM,eAAe,GAAS;AAAA,IAC9B,IAAI,KAAK,QAAQ;AAAA,MACf,MAAM,IAAI,mBAAiB,0CAA0C;AAAA,IACvE;AAAA;AAEJ;AAAA;AAEA,MAAM,2BAA6D;AAAA,EACpC;AAAA,EAA7B,WAAW,CAAkB,YAA8B;AAAA,IAA9B;AAAA;AAAA,QAEvB,GAAG,CAAC,KAAa,QAAgD;AAAA,IACrE,MAAM,KAAK,WAAW,IAAI,KAAK,WAAW,YAAY,YAAY,CAAC,GAAG,MAAM,CAAC;AAAA;AAAA,QAGzE,aAAa,CAAC,YAA8C;AAAA,IAChE,WAAW,OAAO,YAAY;AAAA,MAC5B,MAAM,KAAK,WAAW,IAAI,GAAG;AAAA,IAC/B;AAAA;AAAA,QAGI,KAAK,CACT,KACA,QAC6C;AAAA,IAC7C,MAAM,SAAS,MAAM,KAAK,WAAW,cACnC,KACA,WAAW,YAAY,YAAY,CAAC,GAAG,MAAM,CAC/C;AAAA,IACA,OAAO,OAAO,kBAAkB,wBAAwB;AAAA;AAAA,QAGpD,YAAe,CACnB,WACA,aACY;AAAA,IACZ,MAAM,WAAW,MAAM,KAAK,WAAW,eAAe,SAAS;AAAA,IAC/D,IAAI;AAAA,MACF,OAAO,MAAM,YAAY,IAAI,0BAA0B,QAAQ,CAAC;AAAA,MAChE,QAAQ;AAAA,MACR,SAAS,UAAU;AAAA;AAAA;AAGzB;AAAA;AAEA,MAAM,0BAAoD;AAAA,EAC3B;AAAA,EAA7B,WAAW,CAAkB,UAA8B;AAAA,IAA9B;AAAA;AAAA,EAE7B,UAAU,GAAS;AAAA,IACjB,KAAK,SAAS,WAAW;AAAA;AAAA,EAG3B,aAAa,CAAC,OAAsB;AAAA,IAClC,KAAK,SAAS,cAAc,KAAK;AAAA;AAAA,EAGnC,aAAa,CAAC,OAAqB;AAAA,IACjC,KAAK,SAAS,cAAc,KAAK;AAAA;AAAA,EAGnC,YAAY,CAAC,OAAqB;AAAA,IAChC,KAAK,SAAS,aAAa,KAAK;AAAA;AAAA,EAGlC,YAAY,CAAC,OAAqB;AAAA,IAChC,KAAK,SAAS,aAAa,KAAK;AAAA;AAAA,EAGlC,YAAY,CAAC,OAAoD;AAAA,IAC/D,KAAK,SAAS,aAAa,KAAK;AAAA;AAAA,EAGlC,MAAM,GAAS;AAAA,IACb,KAAK,SAAS,OAAO;AAAA;AAEzB;AAKO,eAAe,mBAAmB,CACvC,UAAgC,CAAC,GACT;AAAA,EACxB,MAAM,OAAO,QAAQ,QAAQ;AAAA,EAC7B,MAAM,OAAO,QAAQ,QAAQ,mBAAmB,SAAS,aAAa,SAAS,GAAG;AAAA,EAGlF,IAAI;AAAA,EACJ,IAAI,SAAS,IAAI;AAAA,IACf,MAAM,YAAY,SAAQ,IAAI;AAAA,IAC9B,MAAM,MAAM,WAAW,EAAE,WAAW,KAAK,CAAC;AAAA,IAC1C,qBAAqB,MAAM,QAAQ,KAAK,WAAW,OAAO,CAAC;AAAA,EAC7D;AAAA,EACA,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,WAAW,MAAM,eAAe,OAAO,MAAM;AAAA,SACxC,QAAQ;AAAA,SACP,qBAAqB,EAAE,gBAAgB,mBAAmB,IAAI,CAAC;AAAA,IACrE,CAAC;AAAA,IACD,OAAO,IAAI,kBAAkB,UAAU,MAAM,SAAS,QAAQ,GAAG,kBAAkB;AAAA,IACnF,OAAO,OAAO;AAAA,IACd,UAAU,UAAU;AAAA,IACpB,IAAI;AAAA,MAAoB,MAAM,GAAG,oBAAoB,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,IACrF,MAAM;AAAA;AAAA;AASH,eAAe,yBAAyB,CAC7C,SACA,SACe;AAAA,EACf,MAAM,QAAQ,IAAI,kBAAkB;AAAA,EAEpC,WAAW,aAAa,mBAAmB,OAAO,GAAG;AAAA,IACnD,MAAM,QAAQ,IAAI,WAAW,gBAAgB,SAAS,GAAG;AAAA,EAC3D;AAAA;AAOK,eAAe,aAAa,CACjC,SACA,SACA,eAAqC,CAAC,GACvB;AAAA,EACf,IAAI,aAAa,qBAAqB,MAAM;AAAA,IAC1C,MAAM,0BAA0B,SAAS,OAAO;AAAA,EAClD;AAAA,EAEA,MAAM,QAAQ,IAAI,eAAe;AAAA,EAEjC,WAAW,aAAa,mBAAmB,OAAO,GAAG;AAAA,IACnD,MAAM,QAAQ,IAAI,QAAQ,gBAAgB,SAAS,GAAG;AAAA,EACxD;AAAA,EAEA,WAAW,OAAO,QAAQ,YAAY,CAAC,GAAG;AAAA,IACxC,MAAM,QAAQ,IAAI,GAAG;AAAA,EACvB;AAAA,EAEA,IAAI,QAAQ,QAAQ,SAAS,YAAY;AAAA,IACvC,MAAM,QAAQ,cAAc,wBAAwB,OAAO,CAAC;AAAA,EAC9D;AAAA,EAEA,WAAW,UAAU,QAAQ,WAAW,CAAC,GAAG;AAAA,IAC1C,MAAM,QAAQ,IAAI,qBAAqB,MAAM,CAAC;AAAA,EAChD;AAAA,EAEA,IAAI,aAAa,UAAU,MAAM;AAAA,IAC/B,MAAM,QAAQ,IAAI,eAAe,OAAO,CAAC;AAAA,IAEzC,IAAI,QAAQ,QAAQ,SAAS,YAAY;AAAA,MACvC,MAAM,QAAQ,IAAI,sCAAsC,OAAO,CAAC;AAAA,IAClE;AAAA,EACF;AAAA;;;AGhXK,MAAM,iBAAiB;AAAA,EACpB,SAAS;AAAA,EACT,cAAc;AAAA,EACL,UAAU,IAAI;AAAA,QAEzB,OAAO,CAAC,QAA0C;AAAA,IACtD,OAAO,MAAM;AAAA,MACX,OAAO,eAAe;AAAA,MACtB,IAAI,CAAC,KAAK,aAAa;AAAA,QACrB,KAAK;AAAA,QACL,IAAI,WAAW;AAAA,QACf,OAAO,MAAM;AAAA,UACX,IAAI;AAAA,YAAU;AAAA,UACd,WAAW;AAAA,UACX,KAAK;AAAA,UACL,KAAK,KAAK;AAAA;AAAA,MAEd;AAAA,MACA,MAAM,KAAK,KAAK,MAAM;AAAA,IACxB;AAAA;AAAA,QAGI,eAAkB,CAAC,QAAqB,KAAmC;AAAA,IAG/E,OAAO,KAAK,SAAS,KAAK,KAAK;AAAA,MAAa,MAAM,KAAK,KAAK,MAAM;AAAA,IAClE,OAAO,eAAe;AAAA,IACtB,KAAK,cAAc;AAAA,IACnB,IAAI;AAAA,MACF,OAAO,MAAM,IAAI;AAAA,MACjB,QAAQ;AAAA,MACR,KAAK,cAAc;AAAA,MACnB,KAAK,KAAK;AAAA;AAAA;AAAA,EAIN,IAAI,CAAC,QAAoC;AAAA,IAC/C,OAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAAA,MACtC,MAAM,OAAO,MAAM;AAAA,QACjB,OAAO,oBAAoB,SAAS,KAAK;AAAA,QACzC,KAAK,QAAQ,OAAO,IAAI;AAAA,QACxB,QAAQ;AAAA;AAAA,MAEV,MAAM,QAAQ,MAAM;AAAA,QAClB,KAAK,QAAQ,OAAO,IAAI;AAAA,QACxB,OAAO,OAAO,MAAM;AAAA;AAAA,MAEtB,OAAO,eAAe;AAAA,MACtB,KAAK,QAAQ,IAAI,IAAI;AAAA,MACrB,OAAO,iBAAiB,SAAS,OAAO,EAAE,MAAM,KAAK,CAAC;AAAA,KACvD;AAAA;AAAA,EAGK,IAAI,GAAS;AAAA,IACnB,WAAW,QAAQ,KAAK;AAAA,MAAS,KAAK;AAAA;AAE1C;;;ALxBO,MAAM,0BAA0B;AAAA,EAoBR;AAAA,EAnBrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAIA,iBAAgC,QAAQ,QAAQ;AAAA,EAChD;AAAA,EACA,WAAW;AAAA,EACX,SAAS;AAAA,EACT;AAAA,EACA,kBAAkB;AAAA,EAClB,gBAAgB;AAAA,EAChB,mBAAmB;AAAA,EACV,WAAW,IAAI;AAAA,EACf,QAAQ,IAAI;AAAA,EACZ;AAAA,EAEjB,WAAW,CAAkB,SAAiC;AAAA,IAAjC;AAAA,IAC3B,KAAK,iCAAiC,8BAA8B,OAAO;AAAA,IAC3E,KAAK,oBAAoB,QAAQ,qBAAqB;AAAA,IACtD,IAAI,CAAC,OAAO,cAAc,KAAK,iBAAiB,KAAK,KAAK,oBAAoB,GAAG;AAAA,MAC/E,MAAM,IAAI,mBAAiB,8DAA8D;AAAA,IAC3F;AAAA;AAAA,QAGI,WAAW,CAAC,QAGf;AAAA,IACD,KAAK,WAAW;AAAA,IAChB,MAAM,WAAW,SAAS,YAAY,IAAI,CAAC,QAAQ,KAAK,SAAS,MAAM,CAAC,IAAI,KAAK,SAAS;AAAA,IAC1F,OAAO,EAAE,QAAQ,UAAU,SAAS,MAAM,KAAK,MAAM,QAAQ,QAAQ,EAAE;AAAA;AAAA,QAG3D,iBAAiB,CAAC,SAAyC;AAAA,IACvE,IAAI,KAAK,QAAQ,QAAQ,SAAS;AAAA,MAAU,OAAO,KAAK;AAAA,IAGxD,IAAI,KAAK,QAAQ,QAAQ,SAAS;AAAA,MAAY,OAAO;AAAA,IACrD,OAAO,WAAW,MAAM,QAAQ,MAC9B,4DACF;AAAA,IACA,MAAM,SAAS,OAAO,SAAS,KAAK;AAAA,IAIpC,OAAO,OAAO,SAAS,MAAM,IAAI,KAAK,IAAI,KAAK,mBAAmB,KAAK,IAAI,GAAG,SAAS,CAAC,CAAC,IAAI;AAAA;AAAA,QAIzF,UAAU,CACd,SACA,KACA,QACA,aAC8B;AAAA,IAC9B,MAAM,QAAQ,MAAM,KAAK,kBAAkB,OAAO;AAAA,IAClD,OAAO,eAAe;AAAA,IACtB,IAAI,KAAK,iBAAiB;AAAA,MAAO,OAAO;AAAA,IACxC,KAAK;AAAA,IACL,IAAI,WAAW;AAAA,IACf,IAAI,WAAW;AAAA,IACf,MAAM,UAAU,YAAY;AAAA,MAC1B,IAAI;AAAA,QAAU;AAAA,MACd,WAAW;AAAA,MACX,KAAK;AAAA,MACL,IAAI,OAAO,WAAW,KAAK,UAAU,KAAK;AAAA,QAAiB,YAAY;AAAA,MAEvE,IAAI,YAAY,KAAK,UAAU,KAAK;AAAA,QAAiB;AAAA,MACrD,MAAM,KAAK,mBAAmB,YAAY;AAAA,QACxC,IAAI,KAAK,kBAAkB,KAAK,KAAK;AAAA,UAAkB,MAAM,KAAK,qBAAqB;AAAA,QACvF,MAAM,KAAK,8BAA8B;AAAA,OAC1C;AAAA;AAAA,IAEH,IAAI;AAAA,MACF,OAAO,MAAM,QAAQ,WAAW,KAAK,EAAE,QAAQ,QAAQ,CAAC;AAAA,MACxD,OAAO,OAAO;AAAA,MACd,MAAM,QAAQ;AAAA,MACd,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,WAAW;AAAA;AAAA;AAAA,QAIT,sBAAyB,CAC7B,KACY;AAAA,IACZ,OAAO,KAAK,MAAM,gBAAgB,KAAK,SAAS,QAAQ,MAAM,KAAK,sBAAsB,GAAG,CAAC;AAAA;AAAA,EAG/F,UAAU,GAAS;AAAA,IACjB,IAAI,KAAK,QAAQ;AAAA,MACf,MAAM,IAAI,mBAAiB,2CAA2C;AAAA,IACxE;AAAA;AAAA,QAGI,OAAO,GAA2B;AAAA,IACtC,KAAK,WAAW;AAAA,IAEhB,IAAI,KAAK,mBAAmB,WAAW;AAAA,MACrC,MAAM,iBAAiB,KAAK,cAAc,EAAE,MAAM,CAAC,UAAU;AAAA,QAC3D,IAAI,KAAK,mBAAmB,gBAAgB;AAAA,UAC1C,KAAK,iBAAiB;AAAA,QACxB;AAAA,QACA,MAAM;AAAA,OACP;AAAA,MACD,KAAK,iBAAiB;AAAA,IACxB;AAAA,IAEA,OAAO,KAAK;AAAA;AAAA,QAGR,eAAe,GAA2B;AAAA,IAC9C,MAAM,UAAU,MAAM,KAAK,QAAQ;AAAA,IACnC,MAAM,KAAK,eAAe,OAAO;AAAA,IACjC,OAAO;AAAA;AAAA,QAGH,mBAAsB,CAAC,KAAyD;AAAA,IACpF,MAAM,QAAQ,MAAM,KAAK,uBAAuB;AAAA,IAChD,IAAI;AAAA,MACF,OAAO,MAAM,IAAI,MAAM,OAAO;AAAA,MAC9B,QAAQ;AAAA,MACR,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA,QAIlB,sBAAsB,GAA0C;AAAA,IACpE,KAAK,WAAW;AAAA,IAIhB,MAAM,cAAc,MAAM,KAAK,sBAAsB;AAAA,IACrD,IAAI,WAAW;AAAA,IACf,MAAM,UAAU,YAAY;AAAA,MAC1B,IAAI,UAAU;AAAA,QACZ;AAAA,MACF;AAAA,MAEA,WAAW;AAAA,MACX,IAAI;AAAA,QACF,IAAI,KAAK,iBAAiB;AAAA,UACxB,MAAM,KAAK,uBAAuB;AAAA,UAClC,KAAK,kBAAkB;AAAA,QACzB,EAAE,KAAK;AAAA,UACL,MAAM,KAAK,8BAA8B;AAAA;AAAA,QAE3C,QAAQ;AAAA,QACR,YAAY;AAAA;AAAA;AAAA,IAIhB,IAAI;AAAA,MACF,MAAM,KAAK,kCAAkC;AAAA,MAC7C,MAAM,UAAU,MAAM,KAAK,gBAAgB;AAAA,MAC3C,OAAO,EAAE,SAAS,QAAQ;AAAA,MAC1B,OAAO,OAAO;AAAA,MACd,MAAM,QAAQ;AAAA,MACd,MAAM;AAAA;AAAA;AAAA,QAIJ,qBAAwB,CAAC,KAAkE;AAAA,IAC/F,MAAM,QAAQ,MAAM,KAAK,uBAAuB;AAAA,IAChD,IAAI;AAAA,MACF,OAAO,MAAM,MAAM,QAAQ,cAAc,GAAG;AAAA,MAC5C,QAAQ;AAAA,MACR,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA,QAIlB,cAAc,GAA2B;AAAA,IAC7C,MAAM,UAAU,MAAM,KAAK,QAAQ;AAAA,IAEnC,IAAI,KAAK,QAAQ,QAAQ,SAAS,YAAY;AAAA,MAI5C,MAAM,KAAK,cAAc;AAAA,IAC3B;AAAA,IAEA,OAAO;AAAA;AAAA,QAQH,aAAa,GAA2B;AAAA,IAC5C,KAAK,WAAW;AAAA,IAEhB,MAAM,UAAU,MAAM,oBAAoB,KAAK,QAAQ,MAAM;AAAA,IAC7D,IAAI;AAAA,MACF,MAAM,KAAK,0BAA0B,OAAO;AAAA,MAC5C,MAAM,cAAc,SAAS,KAAK,SAAS;AAAA,QACzC,QAAQ;AAAA,QACR,mBAAmB;AAAA,MACrB,CAAC;AAAA,MAGD,MAAM,QAAQ,IAAI,qCAAqC;AAAA,MACvD,OAAO;AAAA,MACP,OAAO,OAAO;AAAA,MACd,MAAM,KAAK,aAAa,SAAS,EAAE,QAAQ,MAAM,CAAC;AAAA,MAClD,MAAM;AAAA;AAAA;AAAA,QAIJ,YAAY,GAAkB;AAAA,IAClC,MAAM,cAAc,MAAM,KAAK,sBAAsB;AAAA,IACrD,IAAI;AAAA,MACF,MAAM,KAAK,qBAAqB;AAAA,MAChC,QAAQ;AAAA,MACR,YAAY;AAAA;AAAA;AAAA,QAIF,oBAAoB,GAAkB;AAAA,IAClD,IAAI,KAAK,gBAAgB,GAAG;AAAA,MAC1B,KAAK,mBAAmB;AAAA,MACxB;AAAA,IACF;AAAA,IACA,KAAK,mBAAmB;AAAA,IACxB,MAAM,iBAAiB,KAAK;AAAA,IAC5B,IAAI,mBAAmB,WAAW;AAAA,MAChC;AAAA,IACF;AAAA,IAEA,IAAI,KAAK,kBAAkB,WAAW;AAAA,MACpC,MAAM,KAAK;AAAA,IACb;AAAA,IAEA,IAAI,CAAC,KAAK,UAAU;AAAA,MAClB;AAAA,IACF;AAAA,IAEA,IAAI;AAAA,IACJ,mBAAmB,eAChB,KAAK,OAAO,YAAY;AAAA,MACvB,IAAI;AAAA,QACF,MAAM,KAAK,uBAAuB,OAAO;AAAA,QACzC,KAAK,WAAW;AAAA,QAChB,OAAO;AAAA,QACP,OAAO,OAAO;AAAA,QACd,KAAK,WAAW;AAAA,QAChB,MAAM,KAAK,aAAa,SAAS,EAAE,QAAQ,MAAM,CAAC;AAAA,QAClD,MAAM;AAAA;AAAA,KAET,EACA,MAAM,CAAC,UAAU;AAAA,MAChB,IAAI,KAAK,mBAAmB,kBAAkB;AAAA,QAC5C,KAAK,iBAAiB;AAAA,MACxB;AAAA,MACA,MAAM;AAAA,KACP;AAAA,IAEH,KAAK,WAAW;AAAA,IAChB,KAAK,iBAAiB;AAAA,IACtB,MAAM;AAAA;AAAA,QAGF,yBAAyB,GAAkB;AAAA,IAC/C,IAAI,KAAK,QAAQ,QAAQ,SAAS,YAAY;AAAA,MAC5C;AAAA,IACF;AAAA,IAEA,IAAI,CAAC,KAAK,yBAAyB,GAAG;AAAA,MACpC;AAAA,IACF;AAAA,IAEA,IAAI,KAAK,mBAAmB,WAAW;AAAA,MACrC,IAAI;AAAA,MACJ,iBAAiB,KAAK,mBAAmB,MACvC,KAAK,kCAAkC,CACzC,EAAE,QAAQ,MAAM;AAAA,QACd,IAAI,KAAK,mBAAmB,gBAAgB;AAAA,UAC1C,KAAK,iBAAiB;AAAA,QACxB;AAAA,OACD;AAAA,MACD,KAAK,iBAAiB;AAAA,IACxB;AAAA,IAEA,MAAM,KAAK;AAAA;AAAA,EAGb,uBAAuB,GAAS;AAAA,IAC9B,IAAI,KAAK,QAAQ,QAAQ,SAAS,YAAY;AAAA,MAC5C;AAAA,IACF;AAAA,IAEA,KAAK,iCAAiC,gCAAgC,KAAK,OAAO;AAAA;AAAA,QAG9E,6BAA6B,CAAC,SAA4C;AAAA,IAC9E,IAAI,KAAK,QAAQ,QAAQ,SAAS,YAAY;AAAA,MAC5C;AAAA,IACF;AAAA,IAEA,IAAI;AAAA,MACF,IAAI,KAAK,kBAAkB,GAAG;AAAA,QAC5B,MAAM,QAAQ,IAAI,UAAU,gBAAgB,cAAc,KAAK,OAAO,CAAC,GAAG;AAAA,QAC1E,KAAK,WAAW;AAAA,MAClB;AAAA,MACA,MAAM,GAGN,QAAQ;AAAA,MACR,KAAK,wBAAwB;AAAA;AAAA;AAAA,QAInB,iCAAiC,GAAkB;AAAA,IAC/D,MAAM,aAAa,8BAA8B,KAAK,OAAO;AAAA,IAC7D,IAAI,KAAK,mCAAmC,YAAY;AAAA,MACtD;AAAA,IACF;AAAA,IAEA,MAAM,KAAK,qBAAqB;AAAA,IAEhC,KAAK,iCAAiC;AAAA;AAAA,EAGhC,wBAAwB,GAAY;AAAA,IAC1C,OAAO,KAAK,mCAAmC,8BAA8B,KAAK,OAAO;AAAA;AAAA,EAG3F,KAAK,GAAkB;AAAA,IACrB,KAAK,iBAAiB,KAAK,YAAY;AAAA,IACvC,OAAO,KAAK;AAAA;AAAA,QAGA,WAAW,GAAkB;AAAA,IACzC,KAAK,SAAS;AAAA,IACd,KAAK,SAAS,MAAM,IAAI,mBAAiB,2CAA2C,CAAC;AAAA,IAErF,MAAM,iBAAiB,KAAK;AAAA,IAC5B,KAAK,iBAAiB;AAAA,IACtB,MAAM,KAAK,oBAAoB,gBAAgB;AAAA,MAI7C,QAAQ,KAAK,YAAY,KAAK,QAAQ,QAAQ,SAAS;AAAA,IACzD,CAAC;AAAA,IACD,KAAK,WAAW;AAAA;AAAA,QAGJ,cAAc,CAAC,SAAuC;AAAA,IAClE,KAAK,WAAW;AAAA,IAEhB,IAAI,KAAK,UAAU;AAAA,MACjB;AAAA,IACF;AAAA,IAEA,IAAI,KAAK,kBAAkB,WAAW;AAAA,MACpC,IAAI;AAAA,MACJ,gBAAgB,KAAK,cAAc,OAAO,EACvC,KAAK,MAAM;AAAA,QACV,KAAK,WAAW;AAAA,OACjB,EACA,MAAM,OAAO,UAAU;AAAA,QACtB,IAAI,KAAK,kBAAkB,eAAe;AAAA,UACxC,KAAK,iBAAiB;AAAA,UACtB,KAAK,WAAW;AAAA,QAClB;AAAA,QACA,MAAM,KAAK,aAAa,SAAS,EAAE,QAAQ,MAAM,CAAC;AAAA,QAClD,MAAM;AAAA,OACP,EACA,QAAQ,MAAM;AAAA,QACb,IAAI,KAAK,kBAAkB,eAAe;AAAA,UACxC,KAAK,gBAAgB;AAAA,QACvB;AAAA,OACD;AAAA,MACH,KAAK,gBAAgB;AAAA,IACvB;AAAA,IAEA,MAAM,KAAK;AAAA;AAAA,QAGC,yBAAyB,CAAC,SAAuC;AAAA,IAC7E,IAAI,KAAK,6BAA6B,WAAW;AAAA,MAC/C,MAAM,2BAA2B,0BAA0B,SAAS,KAAK,OAAO,EAAE,MAChF,CAAC,UAAU;AAAA,QACT,IAAI,KAAK,6BAA6B,0BAA0B;AAAA,UAC9D,KAAK,2BAA2B;AAAA,QAClC;AAAA,QACA,MAAM;AAAA,OAEV;AAAA,MACA,KAAK,2BAA2B;AAAA,IAClC;AAAA,IAEA,MAAM,KAAK;AAAA;AAAA,QAGC,aAAa,CAAC,SAAuC;AAAA,IACjE,MAAM,QAAQ,cAAc;AAAA,MAC1B,eAAe,KAAK,OAAO;AAAA,MAC3B,GAAI,KAAK,QAAQ,QAAQ,SAAS,aAC9B,CAAC,sCAAsC,KAAK,OAAO,CAAC,IACpD,CAAC;AAAA,IACP,CAAC;AAAA;AAAA,QAGW,sBAAsB,CAAC,SAAuC;AAAA,IAC1E,MAAM,QAAQ,cAAc;AAAA,MAC1B,UAAU,gBAAgB,cAAc,KAAK,OAAO,CAAC;AAAA,MACrD,eAAe,KAAK,OAAO;AAAA,MAC3B,GAAI,KAAK,QAAQ,QAAQ,SAAS,aAC9B,CAAC,sCAAsC,KAAK,OAAO,CAAC,IACpD,CAAC;AAAA,IACP,CAAC;AAAA;AAAA,QAGW,aAAa,GAAkB;AAAA,IAC3C,MAAM,KAAK,mBAAmB,MAAM,KAAK,sBAAsB,CAAC;AAAA;AAAA,EAQlE,aAAa,GAAS;AAAA,IACpB,KAAK,kBAAkB;AAAA;AAAA,QAGX,6BAA6B,GAAkB;AAAA,IAC3D,IAAI,KAAK,QAAQ,QAAQ,SAAS,YAAY,CAAC,KAAK,YAAY,KAAK,gBAAgB,GAAG;AAAA,MACtF;AAAA,IACF;AAAA,IAEA,IAAI;AAAA,MACF,MAAM,KAAK,sBAAsB;AAAA,MACjC,MAAM;AAAA,MAIN,MAAM,KAAK,uBAAuB;AAAA;AAAA;AAAA,QAQxB,sBAAsB,GAAkB;AAAA,IACpD,MAAM,iBAAiB,KAAK;AAAA,IAC5B,KAAK,iBAAiB;AAAA,IACtB,KAAK,WAAW;AAAA,IAChB,MAAM,KAAK,oBAAoB,gBAAgB,EAAE,QAAQ,MAAM,CAAC,EAAE,MAAM,MAAM,EAAE;AAAA;AAAA,QAGpE,qBAAqB,GAAkB;AAAA,IACnD,IAAI,KAAK,gBAAgB;AAAA,MAAG;AAAA,IAC5B,IAAI,KAAK,kBAAkB,WAAW;AAAA,MACpC,MAAM,KAAK;AAAA,IACb;AAAA,IAEA,IAAI,CAAC,KAAK,UAAU;AAAA,MAClB;AAAA,IACF;AAAA,IAEA,MAAM,UAAU,MAAM,KAAK,QAAQ;AAAA,IACnC,MAAM,QAAQ,IAAI,UAAU,gBAAgB,cAAc,KAAK,OAAO,CAAC,GAAG;AAAA,IAC1E,KAAK,WAAW;AAAA;AAAA,QAGJ,kBAAqB,CAAC,KAAmC;AAAA,IACrE,MAAM,cAAc,MAAM,KAAK,sBAAsB;AAAA,IACrD,IAAI;AAAA,MACF,OAAO,MAAM,IAAI;AAAA,MACjB,QAAQ;AAAA,MACR,YAAY;AAAA;AAAA;AAAA,QAIF,qBAAqB,GAAwB;AAAA,IACzD,MAAM,WAAW,KAAK,eAAe,MAAM,MAAM,EAAE;AAAA,IACnD,IAAI;AAAA,IACJ,MAAM,UAAU,IAAI,QAAc,CAAC,YAAY;AAAA,MAC7C,UAAU;AAAA,KACX;AAAA,IACD,KAAK,iBAAiB,SAAS,KAAK,MAAM,OAAO;AAAA,IAEjD,MAAM;AAAA,IAEN,IAAI,WAAW;AAAA,IACf,OAAO,MAAM;AAAA,MACX,IAAI,UAAU;AAAA,QACZ;AAAA,MACF;AAAA,MAEA,WAAW;AAAA,MACX,QAAQ;AAAA;AAAA;AAAA,QAIE,mBAAmB,CAC/B,gBACA,SACe;AAAA,IACf,IAAI,mBAAmB,WAAW;AAAA,MAChC;AAAA,IACF;AAAA,IAEA,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,UAAU,MAAM;AAAA,MAChB,MAAM;AAAA,MAIN;AAAA;AAAA,IAGF,MAAM,KAAK,aAAa,SAAS,OAAO;AAAA;AAAA,QAG5B,YAAY,CACxB,SACA,SACe;AAAA,IACf,IAAI;AAAA,MACF,MAAM,QAAQ,YAAY;AAAA,MAC1B,IAAI,QAAQ,QAAQ;AAAA,QAClB,IAAI;AAAA,UACF,MAAM,QAAQ,IAAI,UAAU,gBAAgB,cAAc,KAAK,OAAO,CAAC,GAAG;AAAA,UAC1E,MAAM;AAAA,MAGV;AAAA,MACA,QAAQ;AAAA,MACR,MAAM,QAAQ,MAAM;AAAA;AAAA;AAG1B;AAKA,IAAM,0BAA0B,IAAI;AAEpC,SAAS,6BAA6B,CAAC,SAAyC;AAAA,EAC9E,MAAM,MAAM,4BAA4B,OAAO;AAAA,EAC/C,OAAO,QAAQ,YAAY,IAAK,wBAAwB,IAAI,GAAG,KAAK;AAAA;AAGtE,SAAS,+BAA+B,CAAC,SAAyC;AAAA,EAChF,MAAM,MAAM,4BAA4B,OAAO;AAAA,EAC/C,IAAI,QAAQ,WAAW;AAAA,IACrB,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,kBAAkB,wBAAwB,IAAI,GAAG,KAAK,KAAK;AAAA,EACjE,wBAAwB,IAAI,KAAK,cAAc;AAAA,EAC/C,OAAO;AAAA;;;AMhlBT,uBAAS;AAOT;AAAA;AAAA,sBAEE;AAAA;AAAA;AAAA;;;ACRF,6BAAS;AAcT,IAAM,qCAAqC;AACpC,IAAM,kCAAkC;AAC/C,IAAM,kCAAkC,GAAG;AAE3C,IAAM,2BAA2B;AAAA,EAC/B,EAAE,MAAM,UAAU,MAAM,SAAS;AAAA,EACjC,EAAE,MAAM,UAAU,MAAM,SAAS;AAAA,EACjC,EAAE,MAAM,aAAa,MAAM,QAAQ;AAAA,EACnC,EAAE,MAAM,YAAY,MAAM,SAAS;AAAA,EACnC,EAAE,MAAM,aAAa,MAAM,SAAS;AAAA,EACpC,EAAE,MAAM,eAAe,MAAM,SAAS;AACxC;AAEO,SAAS,qCAAqC,CACnD,WACA,MACe;AAAA,EACf,MAAM,qBAAqB,IAAI;AAAA,EAC/B,MAAM,kBAA2C,CAAC;AAAA,EAElD,WAAW,OAAO,MAAM;AAAA,IACtB,IAAI,IAAI,mBAAmB,WAAW;AAAA,MACpC,gBAAgB,KAAK,GAAG;AAAA,MACxB;AAAA,IACF;AAAA,IAEA,MAAM,WAAW,mBAAmB,IAAI,IAAI,cAAc,KAAK,CAAC;AAAA,IAChE,SAAS,KAAK,GAAG;AAAA,IACjB,mBAAmB,IAAI,IAAI,gBAAgB,QAAQ;AAAA,EACrD;AAAA,EAEA,OAAO;AAAA,IACL,SAAS,gBACN,KAAK,iCAAiC,EACtC,IAAI,CAAC,WAAW,kCAAkC,WAAW,QAAQ,kBAAkB,CAAC;AAAA,EAC7F;AAAA;AAGK,SAAS,+BAA+B,CAAC,SAAyB;AAAA,EACvE,OAAO,GAAG,kCAAkC;AAAA;AAGvC,SAAS,yCAAyC,CACvD,WACA,MAC+B;AAAA,EAC/B,MAAM,eAAuF,CAAC;AAAA,EAC9F,MAAM,eAAe,IAAI;AAAA,EAEzB,WAAW,UAAU,MAAM;AAAA,IACzB,MAAM,UAAU,OAAO;AAAA,IACvB,IAAI,YAAY,aAAa,CAAC,QAAQ,WAAW,kCAAkC,GAAG;AAAA,MACpF;AAAA,IACF;AAAA,IAEA,IACE,OAAO,mBAAmB,aAC1B,CAAC,QAAQ,WAAW,+BAA+B,GACnD;AAAA,MACA,+BAA+B,WAAW,QAAQ,OAAO;AAAA,IAC3D;AAAA,IAEA,MAAM,cAAc,QAAQ,MAAM,gCAAgC,MAAM;AAAA,IACxE,IAAI,CAAC,iBAAiB,KAAK,WAAW,GAAG;AAAA,MACvC,+BAA+B,WAAW,QAAQ,OAAO;AAAA,IAC3D;AAAA,IAEA,MAAM,UAAU,OAAO,WAAW;AAAA,IAClC,IAAI,CAAC,OAAO,cAAc,OAAO,GAAG;AAAA,MAClC,+BAA+B,WAAW,QAAQ,OAAO;AAAA,IAC3D;AAAA,IACA,IAAI,aAAa,IAAI,OAAO,GAAG;AAAA,MAC7B,MAAM,IAAI,mBACR,iCAAiC,iDAAiD,WACpF;AAAA,IACF;AAAA,IACA,aAAa,IAAI,OAAO;AAAA,IAExB,IAAI,8BAA8B,OAAO,UAAU,MAAM,UAAU;AAAA,MACjE,MAAM,IAAI,mBACR,iCAAiC,kCAAkC,OAAO,wCAC5E;AAAA,IACF;AAAA,IACA,IAAI,OAAO,cAAc;AAAA,MACvB,MAAM,IAAI,mBACR,iCAAiC,kCAAkC,OAAO,mCAC5E;AAAA,IACF;AAAA,IAEA,aAAa,KAAK,EAAE,QAAQ,QAAQ,CAAC;AAAA,EACvC;AAAA,EAEA,IAAI,aAAa,WAAW,GAAG;AAAA,IAC7B;AAAA,EACF;AAAA,EAEA,aAAa,KAAK,CAAC,MAAM,UAAU,KAAK,UAAU,MAAM,OAAO;AAAA,EAC/D,YAAY,iBAAiB,gBAAgB,aAAa,QAAQ,GAAG;AAAA,IACnE,IAAI,YAAY,YAAY,iBAAiB;AAAA,MAC3C,MAAM,IAAI,mBACR,iCAAiC,4DACnC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,cAAc,aAAa,IAAI,GAAG,aAAa,OAAO,UAAU;AAAA,EACtE,IAAI,YAAY,WAAW,GAAG;AAAA,IAC5B,OAAO,YAAY;AAAA,EACrB;AAAA,EAEA,OAAO;AAAA;AAGT,SAAS,8BAA8B,CACrC,WACA,QACA,SACO;AAAA,EACP,MAAM,IAAI,mBACR,iCAAiC,kDAAkD,uBAAuB,OAAO,cACnH;AAAA;AAGF,SAAS,iCAAiC,CACxC,WACA,QACA,oBACyB;AAAA,EACzB,MAAM,WAAW,CAAC,GAAI,mBAAmB,IAAI,OAAO,QAAQ,KAAK,CAAC,CAAE,EAAE,KACpE,iCACF;AAAA,EACA,OAAO;AAAA,IACL,MAAM,OAAO;AAAA,IACb,MAAM,uCAAuC,WAAW,QAAQ,QAAQ;AAAA,OACpE,OAAO,eAAe,EAAE,UAAU,KAAK,IAAI,CAAC;AAAA,EAClD;AAAA;AAGF,SAAS,sCAAsC,CAC7C,WACA,QACA,UACiC;AAAA,EACjC,IAAI,SAAS,WAAW,KAAK,OAAO,WAAW,YAAY,MAAM,UAAU;AAAA,IACzE,OAAO,8BAA8B,OAAO,UAAU;AAAA,EACxD;AAAA,EAEA,IAAI,gBAAgB,QAAQ,GAAG;AAAA,IAC7B,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,IAAI,mBACR,sCAAsC,gCACpC,QACA,QACF,wBAAwB,4DAC1B;AAAA;AAGF,SAAS,iCAAiC,CACxC,MACA,OACQ;AAAA,EACR,OAAO,OAAO,KAAK,cAAc,MAAM,WAAW;AAAA;AAGpD,SAAS,eAAe,CAAC,UAAqD;AAAA,EAC5E,IAAI,SAAS,WAAW,yBAAyB,QAAQ;AAAA,IACvD,OAAO;AAAA,EACT;AAAA,EAEA,OAAO,yBAAyB,MAAM,CAAC,UAAU,UAAU;AAAA,IACzD,MAAM,QAAQ,SAAS;AAAA,IACvB,OACE,UAAU,aACV,MAAM,eAAe,SAAS,QAC9B,8BAA8B,MAAM,UAAU,MAAM,SAAS;AAAA,GAEhE;AAAA;AAGH,SAAS,+BAA+B,CACtC,QACA,UACQ;AAAA,EACR,IAAI,SAAS,WAAW,GAAG;AAAA,IACzB,OAAO,OAAO;AAAA,EAChB;AAAA,EAEA,OAAO,UAAU,SAAS,IAAI,CAAC,UAAU,GAAG,MAAM,cAAc,MAAM,YAAY,EAAE,KAAK,IAAI;AAAA;;;AC3M/F,6BAAS;AAqCF,eAAe,6BAA6B,CACjD,OACyC;AAAA,EACzC,IAAI,MAAM,YAAY,WAAW,GAAG;AAAA,IAClC,OAAO,IAAI;AAAA,EACb;AAAA,EAEA,MAAM,SAAS,MAAM,yBAAyB,OAAO,MAAM,UAAU;AAAA,EACrE,IAAI,OAAO,WAAW,GAAG;AAAA,IACvB,OAAO,IAAI;AAAA,EACb;AAAA,EAEA,MAAM,aAAa,OAAO,IAAI,CAAC,UAAU,MAAM,SAAS;AAAA,EACxD,MAAM,qBAAqB,wBACzB,MAAM,0BAA0B,OAAO,UAAU,CACnD;AAAA,EACA,MAAM,uBAAuB,2BAC3B,MAAM,6BAA6B,OAAO,UAAU,CACtD;AAAA,EACA,MAAM,cAAc,IAAI;AAAA,EAExB,WAAW,SAAS,QAAQ;AAAA,IAC1B,MAAM,UAAU,mBAAmB,IAAI,MAAM,SAAS,KAAK,CAAC;AAAA,IAC5D,MAAM,aAAa,0CAA0C,MAAM,WAAW,OAAO;AAAA,IACrF,MAAM,aAAa,QAAQ,KACzB,CAAC,WAAW,OAAO,YAAY,+BACjC,GAAG;AAAA,IACH,MAAM,cAAc,qBAAqB,IAAI,MAAM,SAAS,KAAK,CAAC;AAAA,IAClE,YAAY,IAAI,MAAM,WAAW;AAAA,MAC/B,MAAM;AAAA,MACN,IAAI,MAAM;AAAA,MACV,QAAQ,sCAAsC,MAAM,WAAW,OAAO;AAAA,SAClE,eAAe,YAAY,EAAE,WAAW,IAAI,CAAC;AAAA,SAC7C,eAAe,YAAY,EAAE,WAAW,IAAI,CAAC;AAAA,SAC7C,YAAY,SAAS,IAAI,EAAE,YAAY,IAAI,CAAC;AAAA,SAC5C,MAAM,YAAY,YAAY,EAAE,aAAa,MAAM,QAAQ,IAAI,CAAC;AAAA,IACtE,CAAC;AAAA,EACH;AAAA,EAEA,OAAO;AAAA;AAGT,eAAe,wBAAwB,CACrC,OACA,YACyC;AAAA,EACzC,IAAI,eAAe,aAAa,WAAW,WAAW,GAAG;AAAA,IACvD,OAAO,CAAC;AAAA,EACV;AAAA,EAEA,MAAM,kBACJ,eAAe,YACX,KACA,sBAAsB,mBACpB,CAAC,GAAG,IAAI,IAAI,UAAU,CAAC,EAAE,IAAI,CAAC,cAAc,uBAAuB,SAAS,CAAC,CAC/E;AAAA,EAEN,MAAM,OAAO,MAAM,MAAM,QAAQ,MAC/B,yEAAyE,eACvE,cAAc,MAAM,OAAO,CAC7B,8BAA8B,sDAChC;AAAA,EAEA,MAAM,SAAgC,CAAC;AAAA,EACvC,WAAW,OAAO,MAAM;AAAA,IACtB,MAAM,YAAY,UAAU,KAAK,YAAY;AAAA,IAC7C,MAAM,YAAY,uBAAuB,SAAS;AAAA,IAClD,IAAI,cAAc,MAAM;AAAA,MACtB;AAAA,IACF;AAAA,IAEA,OAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,MACA,SAAS,kBAAkB,KAAK,SAAS;AAAA,IAC3C,CAAC;AAAA,EACH;AAAA,EAEA,OAAO;AAAA;AAGT,eAAe,yBAAyB,CACtC,OACA,YAC2C;AAAA,EAC3C,IAAI,WAAW,WAAW,GAAG;AAAA,IAC3B,OAAO,CAAC;AAAA,EACV;AAAA,EAEA,MAAM,gBAAgB,0BAA0B,MAAM,SAAS,gBAAgB;AAAA,EAC/E,MAAM,iBAAiB,0BAA0B,MAAM,SAAS,iBAAiB;AAAA,EACjF,MAAM,oBAAoB,0BAA0B,MAAM,SAAS,qBAAqB;AAAA,EACxF,MAAM,OAAO,MAAM,MAAM,QAAQ,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAU9B;AAAA,WACA;AAAA;AAAA;AAAA,gBAGK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sCAMsB,mBAAmB,UAAU;AAAA;AAAA,GAEhE;AAAA,EAED,OAAO,KAAK,IAAI,CAAC,SAAS;AAAA,IACxB,WAAW,UAAU,KAAK,YAAY;AAAA,IACtC,UAAU,cAAc,KAAK,WAAW;AAAA,IACxC,aAAa,cAAc,KAAK,cAAc;AAAA,IAC9C,YAAY,UAAU,KAAK,aAAa;AAAA,IACxC,YAAY,UAAU,KAAK,aAAa;AAAA,IACxC,cAAc,WAAW,KAAK,eAAe;AAAA,IAC7C,gBAAgB,sBAAsB,KAAK,eAAe;AAAA,IAC1D,SAAS,kBAAkB,KAAK,SAAS;AAAA,EAC3C,EAAE;AAAA;AAGJ,eAAe,4BAA4B,CACzC,OACA,YAC6C;AAAA,EAC7C,IAAI,WAAW,WAAW,GAAG;AAAA,IAC3B,OAAO,CAAC;AAAA,EACV;AAAA,EAEA,MAAM,gBAAgB,0BAA0B,MAAM,SAAS,gBAAgB;AAAA,EAC/E,MAAM,wBAAwB,0BAA0B,MAAM,SAAS,yBAAyB;AAAA,EAChG,MAAM,0BAA0B,0BAC9B,MAAM,SACN,2BACF;AAAA,EACA,MAAM,iBAAiB,0BAA0B,MAAM,SAAS,iBAAiB;AAAA,EACjF,MAAM,OAAO,MAAM,MAAM,QAAQ,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,WAK9B;AAAA,WACA;AAAA;AAAA;AAAA,WAGA;AAAA;AAAA;AAAA,WAGA;AAAA;AAAA;AAAA;AAAA;AAAA,sCAK2B,mBAAmB,UAAU;AAAA;AAAA,GAEhE;AAAA,EAED,OAAO,KAAK,IAAI,CAAC,QAAQ;AAAA,IACvB,MAAM,YAAY;AAAA,MAChB,WAAW,UAAU,KAAK,YAAY;AAAA,MACtC,YAAY,UAAU,KAAK,aAAa;AAAA,MACxC,WAAW,UAAU,KAAK,WAAW;AAAA,IACvC;AAAA,IAEA,IAAI,UAAU,cAAc,YAAY;AAAA,MACtC,MAAM,IAAI,mBACR,iCAAiC,UAAU,6DAA6D,UAAU,aACpH;AAAA,IACF;AAAA,IAEA,OAAO;AAAA,GACR;AAAA;AAGH,SAAS,uBAAuB,CAC9B,MACsC;AAAA,EACtC,MAAM,SAAS,IAAI;AAAA,EACnB,WAAW,OAAO,MAAM;AAAA,IACtB,MAAM,YAAY,OAAO,IAAI,IAAI,SAAS,KAAK,CAAC;AAAA,IAChD,UAAU,KAAK,GAAG;AAAA,IAClB,OAAO,IAAI,IAAI,WAAW,SAAS;AAAA,EACrC;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,0BAA0B,CACjC,MACuB;AAAA,EACvB,MAAM,SAAS,IAAI;AAAA,EACnB,WAAW,OAAO,MAAM;AAAA,IACtB,MAAM,kBAAkB,OAAO,IAAI,IAAI,SAAS,KAAK,CAAC;AAAA,IACtD,gBAAgB,KAAK,IAAI,UAAU;AAAA,IACnC,OAAO,IAAI,IAAI,WAAW,eAAe;AAAA,EAC3C;AAAA,EACA,OAAO;AAAA;;;AChPT,mDAA+B;AAiB/B,IAAM,iBAAiB,EAAE,aAAa,IAAI,iBAAiB,IAAI,gBAAgB,KAAM;AAAA;AAM9E,MAAM,0BAA0B,qBAAqB;AAAC;AA0BtD,eAAe,+BAAkC,CACtD,OACmB;AAAA,EACnB,IAAI,CAAC,gBAAgB,MAAM,QAAQ,OAAO,GAAG;AAAA,IAC3C,MAAM,MAAM,QAAQ,IAAI,mBAAmB;AAAA,IAK3C,QAAQ,MAAM,MAAM,kBAAkB,GAAG;AAAA,EAC3C;AAAA,EAMA,MAAM,QAAQ,eAAe;AAAA,EAC7B,QAAQ,YAAY,kBAAkB,MAAM,MAAM,kBAAkB;AAAA,EAEpE,MAAM,MAAM,QAAQ,IAAI,mBAAmB;AAAA,EAC3C,IAAK,MAAM,kBAAkB,MAAM,SAAS,MAAM,OAAO,MAAO,YAAY;AAAA,IAC1E,MAAM,MAAM,QAAQ,IAAI,UAAU;AAAA,IAClC,MAAM,IAAI,kBACR,4DAA4D,MAAM,0BACpE;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAiBF,eAAe,wBAAwB,CAC5C,SACA,WACA,gBACe;AAAA,EACf,IAAI,gBAAgB;AAAA,IAClB,MAAM,QAAQ,IAAI,kCAAkC;AAAA,EACtD;AAAA,EAEA,IAAI;AAAA,IACF,MAAM,QAAQ,IAAI,QAAQ;AAAA,IAC1B,OAAO,OAAO;AAAA,IACd,MAAM,kBAAkB,OAAO,SAAS,KAAK;AAAA,IAC7C,QAAQ;AAAA,IACR,IAAI,gBAAgB;AAAA,MAClB,MAAM,QAAQ,IAAI,gCAAgC,EAAE,MAAM,MAAM;AAAA,QAG9D,eAAe,cAAc;AAAA,OAC9B;AAAA,IACH;AAAA;AAAA;AASG,eAAe,qBAAwB,CAC5C,WACA,aACA,QACY;AAAA,EACZ,SAAS,UAAU,IAAK,WAAW;AAAA,IACjC,IAAI;AAAA,MACF,OAAO,MAAM,YAAY,OAAO;AAAA,MAChC,OAAO,OAAO;AAAA,MACd,IAAI,EAAE,iBAAiB,oBAAoB;AAAA,QACzC,MAAM;AAAA,MACR;AAAA,MAEA,IAAI,YAAY,eAAe,aAAa;AAAA,QAC1C,MAAM,IAAI,qBACR,8DAA8D,uCAAuC,gCACrG,EAAE,OAAO,MAAM,CACjB;AAAA,MACF;AAAA;AAAA,IAGF,MAAM,gBAAgB,iBAAiB,OAAO,GAAG,MAAM;AAAA,EACzD;AAAA;AAIF,SAAS,gBAAgB,CAAC,OAAuB;AAAA,EAC/C,IAAI,UAAU,GAAG;AAAA,IACf,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,SAAS,KAAK,IAClB,eAAe,gBACf,eAAe,kBAAkB,MAAM,QAAQ,EACjD;AAAA,EAEA,OAAO,KAAK,OAAO,IAAI;AAAA;AAGzB,SAAS,eAAe,CAAC,QAAgB,QAAgD;AAAA,EACvF,QAAQ,eAAe;AAAA,EACvB,IAAI,WAAW,GAAG;AAAA,IAChB,OAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEA,OAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAAA,IACtC,MAAM,QAAQ,MAAM;AAAA,MAClB,aAAa,KAAK;AAAA,MAClB,OAAO,QAAQ,MAAM;AAAA;AAAA,IAEvB,MAAM,QAAQ,WAAW,MAAM;AAAA,MAC7B,QAAQ,oBAAoB,SAAS,KAAK;AAAA,MAC1C,QAAQ;AAAA,OACP,MAAM;AAAA,IAET,QAAQ,iBAAiB,SAAS,OAAO,EAAE,MAAM,KAAK,CAAC;AAAA,GACxD;AAAA;AAGI,SAAS,eAAe,CAAC,SAA0C;AAAA,EACxE,OACE,QAAQ,SAAS,YAChB,QAAQ,SAAS,YAAY,QAAQ,IAAI,YAAY,EAAE,WAAW,SAAS;AAAA;AAShF,SAAS,iBAAiB,CAAC,OAAgB,WAAkD;AAAA,EAC3F,IACE,iBAAiB,SACjB,MAAM,QAAQ,WACZ,oFACF,MACC,MAAM,QAAQ,SAAS,yBAAyB,KAC/C,MAAM,QAAQ,SAAS,kCAAkC,IAC3D;AAAA,IACA,OAAO,IAAI,kBACT,yDAAyD,eACzD,EAAE,OAAO,MAAM,CACjB;AAAA,EACF;AAAA,EAEA;AAAA;AAGF,eAAe,iBAAiB,CAC9B,SACA,SACiB;AAAA,EACjB,OAAO,OAAO,MAAM,QAAQ,MAC1B,kBAAkB,gBAAgB,cAAc,OAAO,CAAC,sBAC1D;AAAA,EACA,IAAI,QAAQ,WAAW;AAAA,IACrB,MAAM,IAAI,mBAAiB,4DAA4D;AAAA,EACzF;AAAA,EAEA,OAAO,OAAO,cAAc,KAAK,IAAI,CAAC;AAAA;;;ACrMjC,SAAS,aAAa,CAAC,SAAwC;AAAA,EACpE,IAAI,aAAa,SAAS;AAAA,IACxB,OAAO,KAAK,UAAU,EAAE,SAAS,QAAQ,QAAQ,CAAC;AAAA,EACpD;AAAA,EAEA,MAAM,UAAoB,CAAC;AAAA,EAC3B,MAAM,UAAU,IAAI;AAAA,EACpB,MAAM,UAAU,CAAC,UAAkB;AAAA,IACjC,IAAI,QAAQ,QAAQ,IAAI,KAAK;AAAA,IAC7B,IAAI,UAAU,WAAW;AAAA,MACvB,QAAQ,QAAQ;AAAA,MAChB,QAAQ,KAAK,KAAK;AAAA,MAClB,QAAQ,IAAI,OAAO,KAAK;AAAA,IAC1B;AAAA,IACA,OAAO;AAAA;AAAA,EAET,MAAM,aAAa,CAAC,SAClB,KAAK,QAAQ,CAAC,QAAQ,CAAC,QAAQ,IAAI,SAAS,GAAG,QAAQ,IAAI,MAAM,CAAC,CAAC;AAAA,EAErE,MAAM,UAAgC;AAAA,IACpC,GAAG;AAAA,IACH;AAAA,IACA,MAAM,WAAW,QAAQ,IAAI;AAAA,IAC7B,SAAS,OAAO,QAAQ,QAAQ,OAAO,EAAE,IAAI,EAAE,QAAQ,UAAU;AAAA,MAC/D,QAAQ,MAAM;AAAA,MACd,GAAG,WAAW,IAAI;AAAA,IACpB,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,KAAK,UAAU,OAAO;AAAA;AAOxB,SAAS,aAAa,CAAC,WAAmB,QAAwC;AAAA,EACvF,MAAM,SAAS,OAAO,WAAW,WAAW,UAAU,MAAM,IAAI;AAAA,EAChE,IAAI,UAAS,MAAM,KAAK,OAAO,OAAO,QAAQ,SAAS,GAAG;AAAA,IACxD,OAAO,OAAO,OAAO,YAAY,WAAW,EAAE,SAAS,OAAO,QAAQ,IAAI,WAAW,SAAS;AAAA,EAChG;AAAA,EAEA,OAAO,oBAAoB,MAAM,KAAK,WAAW,SAAS;AAAA;AAG5D,SAAS,mBAAmB,CAAC,OAAkD;AAAA,EAC7E,IAAI,CAAC,UAAS,KAAK,KAAK,MAAM,MAAM,KAAK,CAAC,aAAa,MAAM,OAAO,GAAG;AAAA,IACrE;AAAA,EACF;AAAA,EAEA,QAAQ,YAAY;AAAA,EACpB,MAAM,aAAa,CAAC,MAA0B,SAAiB;AAAA,IAC7D,KAAK,KAAK,SAAS,QAAQ,MAAM,GAAG;AAAA,MAClC;AAAA,IACF;AAAA,IAEA,MAAM,OAA2B,CAAC;AAAA,IAClC,SAAS,QAAQ,KAAM,QAAQ,KAAK,QAAQ,SAAS,GAAG;AAAA,MACtD,MAAM,YAAY,SAAS,SAAS,KAAK,MAAM;AAAA,MAC/C,MAAM,SAAS,SAAS,SAAS,KAAK,QAAQ,EAAE;AAAA,MAChD,IAAI,cAAc,aAAa,WAAW,WAAW;AAAA,QACnD;AAAA,MACF;AAAA,MACA,KAAK,KAAK,EAAE,WAAW,OAAO,CAAC;AAAA,IACjC;AAAA,IAEA,OAAO;AAAA;AAAA,EAGT,MAAM,OAAO,MAAM,QAAQ,MAAM,IAAI,IAAI,WAAW,MAAM,MAAM,CAAC,IAAI;AAAA,EACrE,IAAI,SAAS,aAAa,CAAC,MAAM,QAAQ,MAAM,OAAO,GAAG;AAAA,IACvD;AAAA,EACF;AAAA,EAGA,MAAM,UAAU,IAAI;AAAA,EACpB,WAAW,SAAS,MAAM,SAAS;AAAA,IACjC,MAAM,OAAO,MAAM,QAAQ,KAAK,IAAI,SAAS,SAAS,MAAM,EAAE,IAAI;AAAA,IAClE,MAAM,OAAO,SAAS,YAAY,YAAY,WAAW,OAAO,CAAC;AAAA,IACjE,IAAI,SAAS,aAAa,SAAS,aAAa,QAAQ,IAAI,IAAI,GAAG;AAAA,MACjE;AAAA,IACF;AAAA,IACA,QAAQ,IAAI,MAAM,IAAI;AAAA,EACxB;AAAA,EAEA,OAAO,EAAE,MAAM,SAAS,OAAO,YAAY,OAAO,EAAE;AAAA;AAGtD,SAAS,UAAU,CAAC,WAA0C;AAAA,EAC5D,OAAO,EAAE,SAAS,iBAAiB,uDAAuD;AAAA;AAG5F,SAAS,SAAS,CAAC,MAAuB;AAAA,EACxC,IAAI;AAAA,IACF,OAAO,KAAK,MAAM,IAAI;AAAA,IACtB,MAAM;AAAA,IACN;AAAA;AAAA;AAIJ,SAAS,QAAQ,CAAC,SAA4B,OAAoC;AAAA,EAChF,OAAO,OAAO,UAAU,YAAY,OAAO,UAAU,KAAK,IAAI,QAAQ,SAAS;AAAA;AAGjF,SAAS,YAAY,CAAC,OAA4C;AAAA,EAChE,OAAO,MAAM,QAAQ,KAAK,KAAK,MAAM,MAAM,CAAC,SAAS,OAAO,SAAS,QAAQ;AAAA;AAG/E,SAAS,SAAQ,CAAC,OAA4D;AAAA,EAC5E,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAAA;;;AJ9DrE,MAAM,uBAAuB;AAAA,EAEf;AAAA,EACA;AAAA,EAFnB,WAAW,CACQ,SACA,aACjB;AAAA,IAFiB;AAAA,IACA;AAAA;AAAA,QAGb,aAAa,CACjB,YACA,mBAC4B;AAAA,IAC5B,KAAK,aAAa,UAAU;AAAA,IAK5B,MAAM,WAAW,MAAM,KAAK,WAAW,WAAW,EAAE;AAAA,IAEpD,IAAI,UAAU;AAAA,MAGZ,MAAM,OAAO,MAAM,sBAAsB,WAAW,IAAI,OAAO,YAAY;AAAA,QACzE,MAAM,UAAU,YAAY,IAAI,WAAW,MAAM,KAAK,WAAW,WAAW,EAAE;AAAA,QAC9E,IAAI,CAAC,SAAS;AAAA,UACZ,MAAM,IAAI,mBACR,2BAA2B,WAAW,mDACxC;AAAA,QACF;AAAA,QAEA,MAAM,OAAO,4BAA4B,SAAS,UAAU;AAAA,QAC5D,IAAI,KAAK,SAAS;AAAA,UAChB,MAAM,KAAK,2BAA2B,MAAM,iBAAiB;AAAA,QAC/D;AAAA,QAEA,OAAO;AAAA,OACR;AAAA,MAED,IAAI,KAAK,SAAS;AAAA,QAChB,KAAK,YAAY,wBAAwB;AAAA,QACzC,MAAM,KAAK,YAAY,aAAa;AAAA,MACtC;AAAA,MAEA,OAAQ,MAAM,KAAK,WAAW,WAAW,EAAE,KAAM,KAAK;AAAA,IACxD;AAAA,IAIA,MAAM,YAAY,uBAAuB,WAAW,EAAE;AAAA,IACtD,MAAM,gBAAgB,mBAAmB,KAAK,SAAS,SAAS;AAAA,IAIhE,MAAM,KAAK,YAAY,sBAAsB,OAAO,YAAY;AAAA,MAC9D,MAAM,QAAQ,IAAI,mBAAmB;AAAA,MACrC,IAAI,YAAY;AAAA,MAChB,IAAI;AAAA,QACF,MAAM,QAAQ,IACZ,gBAAgB,kBAAkB,gCAAgC,WAAW,MAAM,IACrF;AAAA,QAEA,IAAI,WAAW,gBAAgB,WAAW;AAAA,UACxC,MAAM,QAAQ,IACZ,oBAAoB,oBAAoB,eAAe,WAAW,WAAW,GAC/E;AAAA,QACF;AAAA,QAEA,MAAM,KAAK,gBAAgB,SAAS,eAAe,UAAU;AAAA,QAC7D,IAAI,WAAW,eAAe,WAAW;AAAA,UACvC,MAAM,QAAQ,IACZ,qBAAqB,iBAAiB,gBAAgB,WAAW,UAAU,QAAQ,eAAe,+BAA+B,GACnI;AAAA,UACA,MAAM,QAAQ,IACZ,gBAAgB,mBAAmB,KAAK,SAAS,+BAA+B,WAAW,EAAE,CAAC,6EAChG;AAAA,QACF;AAAA,QACA,MAAM,KAAK,iBAAiB,SAAS,eAAe,UAAU;AAAA,QAE9D,MAAM,QAAQ,IAAI,QAAQ;AAAA,QAC1B,YAAY;AAAA,QACZ,OAAO,OAAO;AAAA,QACd,IAAI,CAAC,WAAW;AAAA,UACd,MAAM,KAAK,oBAAoB,OAAO;AAAA,QACxC;AAAA,QACA,MAAM;AAAA;AAAA,KAET;AAAA,IACD,KAAK,YAAY,wBAAwB;AAAA,IAEzC,OAAO,gBAAgB,UAAU;AAAA;AAAA,QAG7B,kCAAkC,CACtC,aACe;AAAA,IACf,MAAM,WAAqB,CAAC;AAAA,IAC5B,MAAM,qBAA0C,CAAC;AAAA,IAEjD,WAAW,cAAc,aAAa;AAAA,MACpC,IAAI;AAAA,QACF,KAAK,aAAa,UAAU;AAAA,QAC5B,mBAAmB,KAAK,UAAU;AAAA,QAClC,OAAO,OAAO;AAAA,QACd,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,QACrE,SAAS,KAAK,KAAK,WAAW,OAAO,SAAS;AAAA;AAAA,IAElD;AAAA,IAEA,MAAM,eAAe,MAAM,KAAK,8BAA8B;AAAA,MAC5D,YAAY,mBAAmB,IAAI,CAAC,eAAe,WAAW,EAAE;AAAA,IAClE,CAAC;AAAA,IAED,WAAW,cAAc,oBAAoB;AAAA,MAC3C,MAAM,WAAW,aAAa,IAAI,WAAW,EAAE;AAAA,MAC/C,IAAI,CAAC,UAAU;AAAA,QACb;AAAA,MACF;AAAA,MAEA,IAAI;AAAA,QACF,4BAA4B,UAAU,UAAU;AAAA,QAChD,OAAO,OAAO;AAAA,QACd,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,QACrE,SAAS,KAAK,KAAK,WAAW,OAAO,SAAS;AAAA;AAAA,IAElD;AAAA,IAEA,IAAI,SAAS,SAAS,GAAG;AAAA,MACvB,MAAM,UAAU,SAAS,KAAK;AAAA,CAAI;AAAA,MAClC,MAAM,IAAI,mBACR,uDAAuD,SAAS;AAAA,EAAuB,SACzF;AAAA,IACF;AAAA;AAAA,QAGI,UAAU,CAAC,WAAsD;AAAA,IACrE,KAAK,YAAY,WAAW;AAAA,IAE5B,OAAO,KAAK,YAAY,oBAAoB,CAAC,YAC3C,KAAK,oBAAoB,SAAS,SAAS,CAC7C;AAAA;AAAA,QAGI,mBAAmB,CACvB,SACA,WACmC;AAAA,IACnC,QAEI,MAAM,KAAK,uCAAuC,SAAS;AAAA,MACzD,YAAY,CAAC,SAAS;AAAA,IACxB,CAAC,GACD,IAAI,SAAS,KAAK;AAAA;AAAA,QAIlB,YAAY,GAA0C;AAAA,IAC1D,KAAK,YAAY,WAAW;AAAA,IAE5B,OAAO,KAAK,YAAY,oBAAoB,OAAO,YAAY;AAAA,MAC7D,OAAO,CAAC,IAAI,MAAM,KAAK,uCAAuC,OAAO,GAAG,OAAO,CAAC,EAAE,KAChF,CAAC,MAAM,UAAU,KAAK,GAAG,cAAc,MAAM,EAAE,CACjD;AAAA,KACD;AAAA;AAAA,QAGW,6BAA6B,CAAC,SAEA;AAAA,IAC1C,IAAI,SAAS,YAAY,WAAW,GAAG;AAAA,MACrC,OAAO,IAAI;AAAA,IACb;AAAA,IAEA,OAAO,KAAK,YAAY,oBAAoB,CAAC,YAC3C,KAAK,uCAAuC,SAAS,OAAO,CAC9D;AAAA;AAAA,QAGY,sCAAsC,CAClD,SACA,SACyC;AAAA,IACzC,OAAO,8BAA8B;AAAA,MACnC,SAAS,KAAK;AAAA,MACd;AAAA,MACA,YAAY,SAAS;AAAA,IACvB,CAAC;AAAA;AAAA,QAQG,4BAA4B,CAChC,SACA,UACmC;AAAA,IACnC,IAAI,SAAS,WAAW,GAAG;AAAA,MACzB,OAAO,CAAC;AAAA,IACV;AAAA,IAEA,WAAW,WAAW,UAAU;AAAA,MAC9B,yBAAyB,QAAQ,UAAU;AAAA,IAC7C;AAAA,IAEA,MAAM,YAAY,SAAS,IAAI,CAAC,YAAY,OAAO,QAAQ,UAAU,CAAC;AAAA,IACtE,MAAM,OAAO,MAAM,KAAK,mCACtB,SACA,SAAS,IAAI,CAAC,YAAY,QAAQ,KAAK,GACvC,UAAU,OAAO,CAAC,QAAQ,aAAc,WAAW,SAAS,WAAW,MAAO,GAC9E,UAAU,OAAO,CAAC,QAAQ,aAAc,WAAW,SAAS,WAAW,MAAO,CAChF;AAAA,IAEA,OAAO,SAAS,IAAI,GAAG,OAAO,cAAc,UAAU;AAAA,MACpD,MAAM,WAAW,UAAU;AAAA,MAC3B,MAAM,UAAU,KACb,OACC,CAAC,QACC,IAAI,YAAY,MAAM,WACtB,IAAI,iBAAiB,aACpB,IAAI,gBAAgB,aAAa,IAAI,cAAc,SACxD,EACC,IAAI,CAAC,SAAS,EAAE,WAAW,MAAM,cAAc,IAAI,OAAO,EAAE;AAAA,MAE/D,IAAI,QAAQ,WAAW,GAAG;AAAA,QACxB,MAAM,IAAI,mBACR,4DAA4D,MAAM,oCAAoC,cACxG;AAAA,MACF;AAAA,MAEA,OAAO,sCAAsC,MAAM,WAAW,OAAO;AAAA,KACtE;AAAA;AAAA,EAGH,YAAY,CAAC,YAAqC;AAAA,IAChD,wBACE,YACA,CAAC,YAAY,IAAI,mBAAiB,kBAAkB,SAAS,CAC/D;AAAA;AAAA,QAGY,0BAA0B,CACtC,MACA,mBACe;AAAA,IACf,MAAM,YAAY,uBAAuB,KAAK,WAAW,EAAE;AAAA,IAC3D,MAAM,gBAAgB,mBAAmB,KAAK,SAAS,SAAS;AAAA,IAChE,QAAQ,WAAW;AAAA,IAEnB,IAAI,OAAO,SAAS,QAAQ;AAAA,MAC1B,MAAM,KAAK,YAAY,sBAAsB,CAAC,YAC5C,KAAK,mBAAmB,SAAS,eAAe,IAAI,CACtD;AAAA,MACA;AAAA,IACF;AAAA,IAOA,MAAM,KAAK,YAAY,sBAAsB,OAAO,YAAY;AAAA,MAC9D,IAAI,YAAY;AAAA,MAChB,IAAI;AAAA,QACF,MAAM,SAAS,MAAM,gCAAgC;AAAA,UACnD,SAAS,KAAK;AAAA,UACd;AAAA,UACA,WAAW,KAAK,WAAW;AAAA,UAC3B,mBAAmB,MAAM,kBAAkB,SAAS,KAAK,UAAU;AAAA,QACrE,CAAC;AAAA,QAED,MAAM,KAAK,wBAAwB,SAAS,eAAe,MAAM;AAAA,QACjE,MAAM,KAAK,mBAAmB,SAAS,eAAe,IAAI;AAAA,QAC1D,MAAM,KAAK,iCACT,SACA,KAAK,WAAW,IAChB,QACA,gBAAgB,EAAE,MAAM,UAAU,QAAQ,KAAK,WAAW,QAAQ,OAAO,CAAC,CAC5E;AAAA,QAEA,MAAM,yBAAyB,SAAS,KAAK,WAAW,IAAI;AAAA,UAC1D,eAAe,MAAM,KAAK,YAAY,cAAc;AAAA,QACtD,CAAC;AAAA,QACD,YAAY;AAAA,QACZ,OAAO,OAAO;AAAA,QACd,IAAI,CAAC,WAAW;AAAA,UACd,MAAM,KAAK,oBAAoB,OAAO;AAAA,QACxC;AAAA,QACA,MAAM;AAAA;AAAA,KAET;AAAA;AAAA,QAGW,uBAAuB,CACnC,SACA,eACA,MACe;AAAA,IACf,WAAW,UAAU,KAAK,SAAS;AAAA,MACjC,MAAM,QAAQ,IACZ,eAAe,4BAA4B,yBAAyB,MAAM,GAC5E;AAAA,IACF;AAAA;AAAA,QAGY,kBAAkB,CAC9B,SACA,eACA,MACe;AAAA,IAIf,IAAI,KAAK,SAAS,sBAAsB,KAAK,WAAW,gBAAgB,WAAW;AAAA,MACjF,MAAM,QAAQ,IACZ,oBAAoB,oBAAoB,eAAe,KAAK,WAAW,WAAW,GACpF;AAAA,IACF;AAAA,IAEA,IAAI,KAAK,SAAS,oBAAoB;AAAA,MACpC,MAAM,KAAK,iBAAiB,SAAS,eAAe,KAAK,UAAU;AAAA,IACrE;AAAA;AAAA,QAGY,gBAAgB,CAC5B,SACA,eACA,YACe;AAAA,IACf,IAAI,WAAW,gBAAgB,aAAa,WAAW,YAAY,WAAW,GAAG;AAAA,MAC/E;AAAA,IACF;AAAA,IAKA,IAAI;AAAA,MACF,MAAM,QAAQ,IACZ,eAAe,qCAAqC,WAAW,YAC5D,IAAI,CAAC,eAAe,gBAAgB,UAAU,CAAC,EAC/C,KAAK,IAAI,IACd;AAAA,MACA,OAAO,OAAO;AAAA,MACd,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,MACrE,MAAM,IAAI,mBACR,2BAA2B,WAAW,0FAA0F,SAClI;AAAA;AAAA;AAAA,QAIU,eAAe,CAC3B,SACA,eACA,YACe;AAAA,IACf,IAAI,WAAW,eAAe,WAAW;AAAA,MACvC;AAAA,IACF;AAAA,IAEA,MAAM,cACJ,OAAO,WAAW,eAAe,WAAW,CAAC,WAAW,UAAU,IAAI,WAAW;AAAA,IACnF,YAAY,SAAS,eAAe,YAAY,QAAQ,GAAG;AAAA,MACzD,MAAM,QAAQ,IACZ,qBAAqB,iBAAiB,gBAAgB,UAAU,QAAQ,eACtE,gCAAgC,OAAO,CACzC,GACF;AAAA,IACF;AAAA;AAAA,QAGY,gCAAgC,CAC5C,SACA,WACA,MACA,SACe;AAAA,IACf,MAAM,QAAQ,IACZ,QAAQ,gBAAgB,cAAc,KAAK,OAAO,CAAC,wBAAwB,eACzE,MACF,MAAM,eAAe,kBAAkB,kBAAkB,oBAAoB,eAC3E,KAAK,UAAU;AAAA,MACb,MAAM;AAAA,QACJ,MAAM;AAAA,QACN;AAAA,QACA,UAAU,YAAW;AAAA,QACrB,MAAM;AAAA,QACN,cAAc;AAAA,UACZ,YAAY,KAAK,QAAQ,IAAI,CAAC,WAAW,OAAO,IAAI;AAAA,QACtD;AAAA,WACI,YAAY,YAAY,CAAC,IAAI,EAAE,SAAS,cAAc,OAAO,EAAE;AAAA,MACrE;AAAA,IACF,CAAC,CACH,IACF;AAAA;AAAA,QAGY,mBAAmB,CAAC,SAA4C;AAAA,IAC5E,IAAI;AAAA,MACF,MAAM,QAAQ,IAAI,UAAU;AAAA,MAC5B,MAAM;AAAA;AAAA,QAMI,kCAAkC,CAC9C,SACA,QACA,gBACA,gBAC2C;AAAA,IAC3C,MAAM,WAAW,IAAI,IAAI,OAAO,IAAI,CAAC,UAAU,MAAM,OAAO,CAAC;AAAA,IAC7D,MAAM,iBAAiB,0BAA0B,KAAK,SAAS,iBAAiB;AAAA,IAChF,MAAM,OAAO,MAAM,QAAQ,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAWxB;AAAA,2BACc,CAAC,GAAG,QAAQ,EAAE,KAAK,IAAI;AAAA,gCAClB;AAAA,sDACsB;AAAA;AAAA,KAEjD;AAAA,IAED,OAAO,KAAK,IAAI,CAAC,SAAS;AAAA,MACxB,SAAS,cAAc,KAAK,UAAU;AAAA,MACtC,eAAe,cAAc,KAAK,gBAAgB;AAAA,MAClD,aAAa,sBAAsB,KAAK,cAAc;AAAA,MACtD,QAAQ;AAAA,QACN,UAAU,cAAc,KAAK,WAAW;AAAA,QACxC,aAAa,cAAc,KAAK,cAAc;AAAA,QAC9C,YAAY,UAAU,KAAK,aAAa;AAAA,QACxC,YAAY,UAAU,KAAK,aAAa;AAAA,QACxC,cAAc,WAAW,KAAK,eAAe;AAAA,QAC7C,gBAAgB,sBAAsB,KAAK,eAAe;AAAA,MAC5D;AAAA,IACF,EAAE;AAAA;AAEN;AAEA,SAAS,wBAAwB,CAAC,YAA0B;AAAA,EAC1D,IAAI,CAAC,QAAQ,KAAK,UAAU,GAAG;AAAA,IAC7B,MAAM,IAAI,mBAAiB,gDAAgD,cAAc;AAAA,EAC3F;AAAA;;;AKvgBF,6BAAS;AAaT,IAAM,oBAAoB;AAAA;AAkBnB,MAAM,oBAAoB;AAAA,EAEZ;AAAA,EACA;AAAA,EACA;AAAA,EAHnB,WAAW,CACQ,SACA,aACA,WACjB;AAAA,IAHiB;AAAA,IACA;AAAA,IACA;AAAA;AAAA,QAGb,cAAc,CAClB,UAAsC,CAAC,GACH;AAAA,IACpC,KAAK,YAAY,WAAW;AAAA,IAE5B,MAAM,kBAAkB,QAAQ,mBAAmB;AAAA,IACnD,MAAM,kBAAkB,QAAQ,mBAAmB;AAAA,IACnD,MAAM,SAAS,QAAQ,UAAU;AAAA,IACjC,MAAM,WAAW,QAAQ,WAAW,CAAC,GAAG,IAAI,mBAAmB;AAAA,IAE/D,IAAI,KAAK,QAAQ,YAAY,CAAC,QAAQ;AAAA,MACpC,MAAM,IAAI,mBACR,mEACF;AAAA,IACF;AAAA,IAEA,OAAO,KAAK,YAAY,uBAAuB,OAAO,YAAY;AAAA,MAChE,MAAM,SAAS,MAAM,KAAK,yBACxB,SACA,EAAE,iBAAiB,gBAAgB,GACnC,SACA,MACF;AAAA,MAEA,IAAI,CAAC,QAAQ;AAAA,QACX,KAAK,YAAY,wBAAwB;AAAA,MAC3C;AAAA,MAEA,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,WACG;AAAA,MACL;AAAA,KACD;AAAA;AAAA,QAGW,wBAAwB,CACpC,SACA,WACA,SACA,QAC4B;AAAA,IAC5B,MAAM,WAAW,eAAe,cAAc,KAAK,OAAO,CAAC;AAAA,IAE3D,MAAM,iBAAiB,MAAM,KAAK,mBAAmB,SAAS,UAAU,eAAe;AAAA,IACvF,MAAM,SAAS,IAAI,IAAI;AAAA,MACrB,GAAI,MAAM,KAAK,UAAU,yBAAyB,OAAO;AAAA,MACzD,GAAG;AAAA,IACL,CAAC;AAAA,IACD,MAAM,YAAY,eAAe,OAAO,CAAC,eAAe,CAAC,OAAO,IAAI,UAAU,CAAC;AAAA,IAE/E,MAAM,YACJ,UAAU,WAAW,IACjB,CAAC,IACD,MAAM,QAAQ,MACZ,wBACE,6BACA,UACA,gBAAgB,UAAU,KAAK,IAAI,MACnC,MACF,CACF;AAAA,IAEN,MAAM,WAAW,MAAM,QAAQ,MAC7B,wBACE,8BACA,UACA,iBAAiB,aAAa,UAAU,eAAe,KACvD,MACF,CACF;AAAA,IACA,MAAM,gBAAgB,MAAM,QAAQ,MAClC,wBACE,kCACA,UACA,iBAAiB,aAAa,UAAU,eAAe,KACvD,MACF,CACF;AAAA,IAEA,OAAO;AAAA,MACL,WAAW,UAAU;AAAA,MACrB,eAAe,eAAe,SAAS,UAAU;AAAA,MACjD,UAAU,SAAS;AAAA,MACnB,eAAe,cAAc;AAAA,IAC/B;AAAA;AAAA,QAUY,kBAAkB,CAC9B,SACA,WAC4B;AAAA,IAC5B,MAAM,mBAAmB,0BAA0B,KAAK,SAAS,mBAAmB;AAAA,IACpF,MAAM,OAAO,MAAM,QAAQ,MAAM;AAAA;AAAA,aAExB;AAAA,mDACsC,aAAa,SAAS;AAAA;AAAA,oCAErC;AAAA;AAAA;AAAA,KAG/B;AAAA,IAED,OAAO,KAAK,IAAI,CAAC,QAAQ,OAAO,cAAc,KAAK,aAAa,CAAC,CAAC;AAAA;AAEtE;AAEA,SAAS,mBAAmB,CAAC,KAAgC;AAAA,EAC3D,IAAI;AAAA,IACF,OAAO,eAAe,IAAI,SAAS;AAAA,IACnC,OAAO,OAAO;AAAA,IACd,MAAM,IAAI,mBACR,0CAA0C,IAAI,0BAA0B,IAAI,iEAC5E,EAAE,OAAO,MAAM,CACjB;AAAA;AAAA;AAIJ,SAAS,YAAY,CAAC,WAA2B;AAAA,EAC/C,OAAO,oBAAoB,eAAe,SAAS;AAAA;AAGrD,SAAS,uBAAuB,CAC9B,WACA,UACA,WACA,QACQ;AAAA,EACR,MAAM,YAAY,SAAS,sBAAsB;AAAA,EACjD,OAAO,QAAQ,aAAa,aAAa,YAAY;AAAA;;;AC9KvD,6BAAS;AAaT,IAAM,iBAAiB;AACvB,IAAM,wBAAwB;AAAA;AASvB,MAAM,kBAAkB;AAAA,EAEV;AAAA,EACA;AAAA,EACA;AAAA,EAHnB,WAAW,CACQ,SACA,aACA,WACjB;AAAA,IAHiB;AAAA,IACA;AAAA,IACA;AAAA;AAAA,SAGZ,QAAQ,CAAC,OAAwD;AAAA,IACtE,MAAM,OAAO,MAAM,KAAK,YAAY,YAAY,MAAM,MAAM;AAAA,IAC5D,IAAI,SAA8B;AAAA,IAClC,IAAI;AAAA,MACF,MAAM,WAAW,MAAM,KAAK,YAAY,oBAAoB,OAAO,YAAY;AAAA,QAC7E,KAAK,OAAO,eAAe;AAAA,QAC3B,MAAM,WAAW,MAAM,uBAAuB,KAAK,SAAS,SAAS,MAAM,SAAS;AAAA,QACpF,IAAI,CAAC,UAAU;AAAA,UACb,MAAM,IAAI,mBAAiB,mCAAmC,MAAM,aAAa;AAAA,QACnF;AAAA,QAEA,MAAM,UAAU,MAAM,KAAK,eAAe,SAAS,UAAU,MAAM,SAAS;AAAA,QAC5E,MAAM,UAAU,KAAK,mBAAmB,SAAS,WAAW,QAAQ,QAAQ,MAAM,OAAO;AAAA,QACzF,MAAM,QAAQ,IAAI,IAAI,QAAQ,OAAO,QAAQ,IAAI,CAAC,WAAW,OAAO,KAAK,YAAY,CAAC,CAAC;AAAA,QACvF,MAAM,gBAAgB,CAAC,MAAM,IAAI,OAAO,KAAK,CAAC,MAAM,IAAI,qBAAqB;AAAA,QAC7E,MAAM,WAAW,GAAG,mBAAmB,KAAK,SAAS,SAAS,SAAS,oBAAoB,eAAe,QAAQ,SAAS;AAAA,QAC3H,MAAM,aAAa,QAAQ,IAAI,CAAC,WAAW,gBAAgB,OAAO,IAAI,CAAC,EAAE,KAAK,IAAI;AAAA,QAClF,MAAM,SAAS,KAAK,IAAI,GAAG,KAAK,MAAM,MAAM,UAAU,CAAC,CAAC;AAAA,QACxD,MAAM,QAAQ,MAAM,UAAU,YAAY,YAAY,KAAK,IAAI,GAAG,KAAK,MAAM,MAAM,KAAK,CAAC;AAAA,QACzF,MAAM,MAAM,UAAU,mBAAmB,WAAW,gBAAgB,oBAAoB,KAAK,UAAU,YAAY,KAAK,UAAU,UAAU,SAAS,IAAI,WAAW,WAAW;AAAA,QAC/K,MAAM,SACJ,UAAU,aAAa,QAAQ,iBAC3B,MAAM,KAAK,YAAY,WAAW,SAAS,KAAK,KAAK,QAAQ,KAAK,OAAO,IACzE;AAAA,QACN,MAAM,QAAQ,EAAE,YAAY,UAAU,cAAc;AAAA,QACpD,MAAM,YACJ,UAAU,UAAU,IAChB,CAAC,IACD,MAAM,QAAQ,MACZ,QAAQ,OAAO,KAAK,IAAI,SAAS,gBAAgB,cAAc,GAAG,QAAQ,IAAI,CAChF;AAAA,QACN,OAAO,EAAE,YAAY,OAAO,QAAQ,OAAO,QAAQ,UAAU;AAAA,OAC9D;AAAA,MACD,SAAS,SAAS;AAAA,MAGlB,IAAI,CAAC;AAAA,QAAQ,KAAK,OAAO,iBAAiB,SAAS,KAAK,SAAS,EAAE,MAAM,KAAK,CAAC;AAAA,MAC/E,KAAK,OAAO,eAAe;AAAA,MAC3B,IAAI,QAAQ;AAAA,QACV,OAAO,KAAK,cAAc,OAAO,KAAK,GAAG,SAAS,SAAS,KAAK,MAAM;AAAA,QACtE;AAAA,MACF;AAAA,MAIA,IAAI,SAAS,SAAS;AAAA,MACtB,IAAI,YAAY,SAAS;AAAA,MACzB,IAAI,SAAwB;AAAA,MAC5B,IAAI,OAAuD,SAAS;AAAA,MACpE,OAAO,cAAc,GAAG;AAAA,QACtB,KAAK,OAAO,eAAe;AAAA,QAC3B,MAAM,WAAW,KAAK,IAAI,aAAa,gBAAgB,cAAc;AAAA,QACrE,MAAM,OACJ,QACC,MAAM,KAAK,YAAY,oBAAoB,CAAC,YAC3C,QAAQ,MAAM,QAAQ,UAAU,UAAU,QAAQ,MAAM,CAAC,CAC3D;AAAA,QACF,OAAO;AAAA,QACP,KAAK,OAAO,eAAe;AAAA,QAC3B,OAAO,KAAK,cAAc,MAAM,SAAS,SAAS,KAAK,MAAM;AAAA,QAC7D,IAAI,cAAc;AAAA,UAAW,aAAa,KAAK;AAAA,QAC/C,IAAI,KAAK,SAAS;AAAA,UAAU;AAAA,QAC5B,IAAI,SAAS;AAAA,UACX,SAAS,cAAc,KAAK,KAAK,SAAS,IAAK,qBAAqB;AAAA,QACtE,UAAU,KAAK;AAAA,MACjB;AAAA,MACA,QAAQ;AAAA,MACR,KAAK,OAAO,oBAAoB,SAAS,KAAK,OAAO;AAAA,MACrD,IAAI;AAAA,QACF,MAAM,QAAQ,MAAM;AAAA,QACpB,QAAQ;AAAA,QACR,KAAK,QAAQ;AAAA;AAAA;AAAA;AAAA,SAKJ,aAAa,CAC1B,MACA,iBACA,QAC2B;AAAA,IAC3B,iBAAiB,OAAO,MAAM;AAAA,MAC5B,OAAO,eAAe;AAAA,MACtB,MAAM,SAAkC,CAAC;AAAA,MACzC,WAAW,UAAU,iBAAiB;AAAA,QACpC,OAAO,OAAO,QAAQ,mBAAmB,IAAI,OAAO,OAAO,MAAM;AAAA,MACnE;AAAA,MACA,MAAM;AAAA,IACR;AAAA;AAAA,QAGY,cAAc,CAC1B,SACA,UACA,WACyB;AAAA,IACzB,IAAI,cAAc,WAAW;AAAA,MAC3B,MAAM,aAAa,eAAe,SAAS;AAAA,MAC3C,MAAM,UAAU,MAAM,KAAK,UAAU,sBAAsB,SAAS,UAAU,UAAU;AAAA,MACxF,IAAI,CAAC,SAAS;AAAA,QACZ,KAAK,wBAAwB,SAAS,SAAS;AAAA,MACjD;AAAA,MAEA,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,gBAAgB,MAAM,KAAK,UAAU,4BAA4B,SAAS,QAAQ;AAAA,IACxF,IAAI,CAAC,eAAe;AAAA,MAClB,KAAK,wBAAwB,SAAS,SAAS;AAAA,IACjD;AAAA,IAEA,OAAO;AAAA;AAAA,EAGD,kBAAkB,CACxB,WACA,QACA,SACoC;AAAA,IACpC,IAAI,YAAY,aAAa,QAAQ,WAAW,GAAG;AAAA,MACjD,OAAO,OAAO;AAAA,IAChB;AAAA,IAEA,MAAM,gBAAgB,IAAI,IAAI,OAAO,QAAQ,IAAI,CAAC,WAAW,CAAC,OAAO,MAAM,MAAM,CAAU,CAAC;AAAA,IAE5F,OAAO,QAAQ,IAAI,CAAC,eAAe;AAAA,MACjC,MAAM,SAAS,cAAc,IAAI,UAAU;AAAA,MAC3C,IAAI,CAAC,QAAQ;AAAA,QACX,MAAM,IAAI,mBACR,2BAA2B,oCAAoC,uCACjE;AAAA,MACF;AAAA,MAEA,OAAO;AAAA,KACR;AAAA;AAAA,EAGK,uBAAuB,CAAC,WAA0B;AAAA,IACxD,MAAM,IAAI,mBACR,0DAA0D,aAC5D;AAAA;AAEJ;AAEA,SAAS,OAAO,CACd,MACA,OACA,QACA,QACQ;AAAA,EACR,OAAO,KAAK,gBACR,mBAAmB,gBAAgB,qBAAqB,MAAM,KAAK;AAAA,eAC1D,KAAK,YAAY,WAAW,OAAO,KAAK,iBAAiB;AAAA,+BACzC,SAAS,WAAW,QAAQ,SAAS,IAAI,UAAU,WAAW,OACvF,UAAU,KAAK,mBAAmB,KAAK,kBAAkB,gBAAgB;AAAA;;;AC9K/E,6BAAS;AA2FT,IAAM,0BAA0B;AAEhC,IAAM,iBAAiB;AAKvB,IAAM,wBAAwB;AAO9B,IAAM,8BAA8B;AAAA;AAmB7B,MAAM,uBAAuB;AAAA,EAEf;AAAA,EACA;AAAA,EACA;AAAA,EAHnB,WAAW,CACQ,SACA,aACA,UACjB;AAAA,IAHiB;AAAA,IACA;AAAA,IACA;AAAA;AAAA,QAGb,YAAY,CAAC,WAAmB,OAAoD;AAAA,IACxF,KAAK,YAAY,WAAW;AAAA,IAE5B,OAAO,KAAK,YAAY,oBAAoB,OAAO,YAAY;AAAA,MAC7D,MAAM,WAAW,MAAM,uBAAuB,KAAK,SAAS,SAAS,SAAS;AAAA,MAC9E,IAAI,CAAC,UAAU;AAAA,QACb,OAAO,CAAC;AAAA,MACV;AAAA,MAEA,OAAO,KAAK,wBAAwB,SAAS,UAAU,KAAK;AAAA,KAC7D;AAAA;AAAA,QAGG,gBAAgB,CAAC,WAAmD;AAAA,IACxE,KAAK,YAAY,WAAW;AAAA,IAE5B,OAAO,KAAK,YAAY,oBAAoB,OAAO,YAAY;AAAA,MAC7D,MAAM,WAAW,MAAM,uBAAuB,KAAK,SAAS,SAAS,SAAS;AAAA,MAC9E,IAAI,CAAC,UAAU;AAAA,QACb,OAAO;AAAA,MACT;AAAA,MAEA,OAAO,KAAK,4BAA4B,SAAS,QAAQ;AAAA,KAC1D;AAAA;AAAA,QAGG,UAAU,CAAC,WAAmB,WAAmD;AAAA,IACrF,MAAM,aAAa,eAAe,SAAS;AAAA,IAC3C,KAAK,YAAY,WAAW;AAAA,IAE5B,OAAO,KAAK,YAAY,oBAAoB,OAAO,YAAY;AAAA,MAC7D,MAAM,WAAW,MAAM,uBAAuB,KAAK,SAAS,SAAS,SAAS;AAAA,MAC9E,IAAI,CAAC,UAAU;AAAA,QACb,OAAO;AAAA,MACT;AAAA,MAEA,OAAO,KAAK,sBAAsB,SAAS,UAAU,UAAU;AAAA,KAChE;AAAA;AAAA,QAUG,uBAAuB,CAC3B,YACyC;AAAA,IACzC,KAAK,YAAY,WAAW;AAAA,IAE5B,IAAI,WAAW,WAAW,GAAG;AAAA,MAC3B,OAAO,CAAC;AAAA,IACV;AAAA,IAEA,OAAO,KAAK,YAAY,oBAAoB,CAAC,YAC3C,KAAK,2BAA2B,SAAS,UAAU,CACrD;AAAA;AAAA,QAGY,0BAA0B,CACtC,SACA,YACyC;AAAA,IACzC,MAAM,YAAY,CAAC,GAAG,IAAI,IAAI,UAAU,CAAC;AAAA,IACzC,MAAM,oBAAoB,MAAM,KAAK,qBAAqB,SAAS,SAAS;AAAA,IAC5E,MAAM,uBAAuB,MAAM,KAAK,0BAA0B,SAAS,iBAAiB;AAAA,IAE5F,OAAO,UAAU,IAAI,CAAC,cAAc;AAAA,MAClC,IAAI,CAAC,kBAAkB,IAAI,SAAS,GAAG;AAAA,QACrC,OAAO,EAAE,WAAW,cAAc,OAAO,eAAe,KAAK;AAAA,MAC/D;AAAA,MAEA,MAAM,MAAM,qBAAqB,IAAI,SAAS;AAAA,MAC9C,OAAO;AAAA,QACL;AAAA,QACA,cAAc;AAAA,QACd,eAAe,MAAM,KAAK,qBAAqB,WAAW,GAAG,IAAI;AAAA,MACnE;AAAA,KACD;AAAA;AAAA,QAUG,uBAAuB,CAC3B,OACqC;AAAA,IACrC,KAAK,YAAY,WAAW;AAAA,IAE5B,OAAO,KAAK,YAAY,oBAAoB,OAAO,YAAY;AAAA,MAC7D,IAAI,MAAM,WAAW,MAAM;AAAA,QACzB,OAAO,EAAE,QAAQ,MAAM,KAAK,oBAAoB,OAAO,GAAG,UAAU,CAAC,EAAE;AAAA,MACzE;AAAA,MACA,IAAI,CAAC,QAAQ,KAAK,MAAM,MAAM,GAAG;AAAA,QAC/B,OAAO;AAAA,MACT;AAAA,MAEA,MAAM,YAAY,MAAM,KAAK,mBAAmB,SAAS,MAAM,MAAM;AAAA,MAErE,IAAI,UAAU,IAAI,eAAe,MAAM,QAAQ;AAAA,QAC7C,OAAO;AAAA,MACT;AAAA,MACA,MAAM,eAAe,UAAU,MAAM,CAAC;AAAA,MACtC,IAAI,aAAa,WAAW,GAAG;AAAA,QAC7B,OAAO,EAAE,QAAQ,MAAM,QAAQ,UAAU,CAAC,EAAE;AAAA,MAC9C;AAAA,MAEA,MAAM,SAAS,MAAM,KAAK,kBAAkB,SAAS,MAAM,UAAU;AAAA,MACrE,MAAM,SAAS,MAAM,KAAK,gBAAgB,SAAS,QAAQ,YAAY;AAAA,MACvE,OAAO;AAAA,QACL,QAAQ,aAAa,aAAa,SAAS,IAAI,cAAc,MAAM;AAAA,QACnE,UAAU,CAAC,GAAG,MAAM,EAAE,IAAI,EAAE,WAAW,SAAS,KAAK,qBAAqB,WAAW,GAAG,CAAC;AAAA,MAC3F;AAAA,KACD;AAAA;AAAA,QAGW,mBAAmB,CAAC,SAA8C;AAAA,IAC9E,OAAO,OAAO,MAAM,QAAQ,MAC1B,2BACE,KAAK,SACL,CAAC,UAAU,+CAA+C,MAAM,mBAAmB,GACrF,CACF;AAAA,IACA,IAAI,KAAK,gBAAgB,QAAQ,KAAK,gBAAgB,WAAW;AAAA,MAC/D,MAAM,IAAI,mBAAiB,mDAAmD;AAAA,IAChF;AAAA,IACA,OAAO,OAAO,cAAc,KAAK,aAAa,CAAC;AAAA;AAAA,QAInC,kBAAkB,CAC9B,SACA,QAC+E;AAAA,IAC/E,MAAM,OAAO,MAAM,QAAQ,MACzB,2BACE,KAAK,SACL,CAAC,UAAU;AAAA;AAAA,iBAEF,MAAM,mBAAmB;AAAA,iCACT;AAAA;AAAA,kBAEf,iBAAiB;AAAA,SAE7B,CACF;AAAA,IACA,OAAO,KAAK,IAAI,CAAC,SAAS;AAAA,MACxB,YAAY,OAAO,cAAc,KAAK,aAAa,CAAC;AAAA,MACpD,WAAW,QAAQ,KAAK,eAAe;AAAA,IACzC,EAAE;AAAA;AAAA,QAIU,iBAAiB,CAC7B,SACA,YAC+B;AAAA,IAC/B,MAAM,YAAY,eAAe,YAAY,OAAO,IAAI,IAAI,UAAU;AAAA,IACtE,MAAM,OAAO,MAAM,QAAQ,MAAM;AAAA;AAAA,aAExB,0BAA0B,KAAK,SAAS,gBAAgB;AAAA,KAChE;AAAA,IAED,MAAM,iBAAiB,IAAI;AAAA,IAC3B,MAAM,UAAoD,CAAC;AAAA,IAC3D,WAAW,OAAO,MAAM;AAAA,MACtB,MAAM,UAAU,cAAc,KAAK,UAAU;AAAA,MAC7C,MAAM,QAAQ,cAAc,KAAK,gBAAgB;AAAA,MACjD,MAAM,QAAQ,eAAe,IAAI,OAAO;AAAA,MACxC,IAAI,UAAU,aAAa,QAAQ,OAAO;AAAA,QACxC,eAAe,IAAI,SAAS,KAAK;AAAA,MACnC;AAAA,MACA,IAAI,IAAI,iBAAiB,QAAQ,IAAI,iBAAiB,WAAW;AAAA,QAC/D;AAAA,MACF;AAAA,MACA,MAAM,YAAY,uBAAuB,UAAU,KAAK,YAAY,CAAC;AAAA,MACrE,IAAI,cAAc,SAAS,cAAc,QAAQ,UAAU,IAAI,SAAS,IAAI;AAAA,QAC1E,QAAQ,KAAK,EAAE,WAAW,QAAQ,CAAC;AAAA,MACrC;AAAA,IACF;AAAA,IAEA,OAAO,QAAQ,IAAI,CAAC,WAAW;AAAA,SAC1B;AAAA,MACH,iBAAiB,eAAe,IAAI,MAAM,OAAO,KAAK;AAAA,IACxD,EAAE;AAAA;AAAA,QAIU,eAAe,CAC3B,SACA,QACA,WAC0C;AAAA,IAC1C,MAAM,SAAS,IAAI;AAAA,IACnB,MAAM,QAAQ,UAAU,IAAI;AAAA,IAC5B,MAAM,OAAO,UAAU,UAAU,SAAS,IAAI;AAAA,IAC9C,IAAI,UAAU,aAAa,SAAS,aAAa,OAAO,WAAW,GAAG;AAAA,MACpE,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,aAAa,MAAM,QAAQ,MAC/B,2BACE,KAAK,SACL,CAAC,UAAU;AAAA;AAAA,iBAEF,MAAM,2BAA2B;AAAA,iCACjB,4BAA4B;AAAA,SAEvD,CACF;AAAA,IACA,MAAM,sBAAsB,IAAI,IAC9B,WAAW,IAAI,CAAC,QAAQ,CAAC,OAAO,cAAc,KAAK,aAAa,CAAC,GAAG,GAAG,CAAC,CAC1E;AAAA,IACA,MAAM,kBAAkB,IAAI,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,QAAQ,SAAS,GAAG,KAAK,CAAC,CAAC;AAAA,IAExF,WAAW,YAAY,WAAW;AAAA,MAChC,MAAM,UAAU,oBAAoB,IAAI,SAAS,UAAU;AAAA,MAC3D,IAAI,YAAY,WAAW;AAAA,QACzB;AAAA,MACF;AAAA,MACA,MAAM,cAAc,UAAU,SAAS,cAAc;AAAA,MACrD,MAAM,WAAW,oBAAoB,QAAQ,iBAAiB;AAAA,MAG9D,MAAM,UAAU,IAAI;AAAA,MACpB,WAAW,UAAU,YAAY,MAAM,GAAG,GAAG;AAAA,QAC3C,MAAM,QAAQ,gBAAgB,IAAI,OAAO,MAAM,GAAG,EAAE,MAAM,EAAE;AAAA,QAC5D,IAAI;AAAA,UAAO,QAAQ,IAAI,KAAK;AAAA,MAC9B;AAAA,MAEA,WAAW,SAAS,SAAS;AAAA,QAC3B,IAAI,OAAO,SAAS,UAAU,IAAI,MAAM,iBAAiB;AAAA,UACvD;AAAA,QACF;AAAA,QACA,MAAM,MAAM,KAAK,uBAAuB,MAAM,WAAW,MAAM,SAAS;AAAA,UACtE,YAAY,SAAS;AAAA,UACrB,WAAW,SAAS;AAAA,UACpB;AAAA,aACI,aAAa,YAAY,EAAE,SAAS,IAAI,CAAC;AAAA,QAC/C,CAAC;AAAA,QACD,IAAI,OAAO,IAAI,SAAS,UAAU;AAAA,UAChC,OAAO,IAAI,MAAM,WAAW,GAAG;AAAA,QACjC;AAAA,MACF;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,QAOH,wBAAwB,CAAC,SAAyD;AAAA,IACtF,MAAM,SAAS,MAAM,QAAQ,MAAM;AAAA;AAAA,aAE1B,0BAA0B,KAAK,SAAS,gBAAgB;AAAA;AAAA,KAEhE;AAAA,IACD,MAAM,aAAa,OAAO,QAAQ,CAAC,UAAU;AAAA,MAC3C,MAAM,YAAY,uBAAuB,UAAU,OAAO,YAAY,CAAC;AAAA,MACvE,OAAO,cAAc,OAAO,CAAC,IAAI,CAAC,SAAS;AAAA,KAC5C;AAAA,IAED,IAAI,WAAW,WAAW,GAAG;AAAA,MAC3B,OAAO,CAAC;AAAA,IACV;AAAA,IAEA,MAAM,SAAS,MAAM,KAAK,0BACxB,SACA,MAAM,KAAK,qBAAqB,SAAS,UAAU,GACnD,OAAO,iBACT;AAAA,IACA,OAAO,CAAC,GAAG,OAAO,OAAO,CAAC,EAAE,IAAI,CAAC,QAAQ,IAAI,UAAU;AAAA;AAAA,EAGjD,oBAAoB,CAC1B,WACA,KAC6B;AAAA,IAC7B,OAAO;AAAA,MACL;AAAA,MACA,WAAW,YAAY,IAAI,UAAU;AAAA,MACrC,MAAM,IAAI;AAAA,MACV,WAAW,IAAI;AAAA,SACX,IAAI,UAAU,aAAa,YAAY,EAAE,UAAU,IAAI,SAAS,SAAS,IAAI,CAAC;AAAA,IACpF;AAAA;AAAA,QAGY,oBAAoB,CAChC,SACA,YACuC;AAAA,IAGvC,MAAM,uBAAuB,IAAI;AAAA,IACjC,MAAM,+BAA+B,IAAI;AAAA,IACzC,WAAW,aAAa,YAAY;AAAA,MAClC,qBAAqB,IAAI,uBAAuB,SAAS,GAAG,SAAS;AAAA,MACrE,6BAA6B,IAAI,+BAA+B,SAAS,GAAG,SAAS;AAAA,IACvF;AAAA,IAEA,MAAM,gBAAgB,0BAA0B,KAAK,SAAS,gBAAgB;AAAA,IAC9E,MAAM,gBAAgB,CAAC,GAAG,qBAAqB,KAAK,GAAG,GAAG,6BAA6B,KAAK,CAAC,EAC1F,IAAI,CAAC,SAAS,eAAe,IAAI,CAAC,EAClC,KAAK,IAAI;AAAA,IACZ,MAAM,OAAO,MAAM,QAAQ,MAAM;AAAA;AAAA,aAExB;AAAA,6BACgB;AAAA;AAAA,KAExB;AAAA,IAED,MAAM,oBAAoB,IAAI;AAAA,IAC9B,WAAW,OAAO,MAAM;AAAA,MACtB,MAAM,YAAY,UAAU,KAAK,YAAY;AAAA,MAC7C,MAAM,YAAY,qBAAqB,IAAI,SAAS;AAAA,MACpD,IAAI,cAAc,WAAW;AAAA,QAC3B,kBAAkB,IAAI,WAAW;AAAA,UAC/B;AAAA,UACA;AAAA,UACA,SAAS,cAAc,KAAK,UAAU;AAAA,QACxC,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IAEA,WAAW,OAAO,MAAM;AAAA,MACtB,MAAM,YAAY,6BAA6B,IAAI,UAAU,KAAK,YAAY,CAAC;AAAA,MAC/E,MAAM,QAAQ,cAAc,YAAY,YAAY,kBAAkB,IAAI,SAAS;AAAA,MACnF,IAAI,cAAc,aAAa,UAAU,WAAW;AAAA,QAClD,kBAAkB,IAAI,WAAW;AAAA,aAC5B;AAAA,UACH,iBAAiB,cAAc,KAAK,UAAU;AAAA,QAChD,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,QAUK,yBAAyB,CACrC,SACA,mBACA,YAAY,6BAC8B;AAAA,IAC1C,MAAM,SAAS,IAAI;AAAA,IACnB,IAAI,kBAAkB,SAAS,GAAG;AAAA,MAChC,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,aAAa,IAAI,IAA6B,iBAAiB;AAAA,IAErE,IAAI;AAAA,IACJ,IAAI,UAAU;AAAA,IACd,OAAO,WAAW,OAAO,KAAK,UAAU,WAAW;AAAA,MACjD,MAAM,aAAa,MAAM,KAAK,0BAC5B,SACA,kBACA,uBACF;AAAA,MACA,IAAI,WAAW,WAAW,GAAG;AAAA,QAC3B;AAAA,MACF;AAAA,MAEA,MAAM,SAAS,CAAC,GAAG,WAAW,OAAO,CAAC;AAAA,MACtC,MAAM,WAAW,MAAM,KAAK,mBAC1B,SACA,WACG,OAAO,CAAC,cACP,OAAO,KAAK,CAAC,UACX,mBAAmB,UAAU,aAAa,gBAAgB,KAAK,CAAC,CAClE,CACF,EACC,IAAI,CAAC,cAAc,UAAU,UAAU,CAC5C;AAAA,MAEA,WAAW,aAAa,YAAY;AAAA,QAClC,WAAW;AAAA,QACX,MAAM,oBAAoB,SAAS,IAAI,UAAU,UAAU;AAAA,QAC3D,YAAY,WAAW,UAAU,CAAC,GAAG,UAAU,GAAG;AAAA,UAChD,MAAM,MAAM,KAAK,uBAAuB,WAAW,MAAM,SAAS;AAAA,YAChE,YAAY,UAAU;AAAA,YACtB,WAAW,UAAU;AAAA,YACrB,aAAa,UAAU;AAAA,eACnB,sBAAsB,YAAY,EAAE,UAAU,kBAAkB,IAAI,CAAC;AAAA,UAC3E,CAAC;AAAA,UACD,IAAI,KAAK;AAAA,YACP,OAAO,IAAI,WAAW,GAAG;AAAA,YACzB,WAAW,OAAO,SAAS;AAAA,UAC7B;AAAA,QACF;AAAA,QAEA,IAAI,WAAW,SAAS,GAAG;AAAA,UACzB;AAAA,QACF;AAAA,MACF;AAAA,MAEA,IAAI,WAAW,SAAS,yBAAyB;AAAA,QAC/C;AAAA,MACF;AAAA,MACA,mBAAmB,WAAW,WAAW,SAAS,IAAI;AAAA,IACxD;AAAA,IAEA,OAAO;AAAA;AAAA,QAGK,yBAAyB,CACrC,SACA,kBACA,OACyC;AAAA,IACzC,MAAM,mBAAmB,0BAA0B,KAAK,SAAS,mBAAmB;AAAA,IACpF,MAAM,0BAA0B,0BAC9B,KAAK,SACL,2BACF;AAAA,IAEA,IAAI,WAAW;AAAA,IACf,IAAI,qBAAqB,WAAW;AAAA,MAClC,0BAAyB,gBAAgB;AAAA,MACzC,WAAW,gCAAgC;AAAA,IAC7C;AAAA,IAEA,MAAM,OAAO,MAAM,QAAQ,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,aAKxB;AAAA,aACA;AAAA,QACL;AAAA;AAAA,cAEM,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,CAAC;AAAA,KACtC;AAAA,IAED,OAAO,KAAK,IAAI,CAAC,SAAS;AAAA,MACxB,YAAY,OAAO,cAAc,KAAK,aAAa,CAAC;AAAA,MACpD,WAAW,QAAQ,KAAK,eAAe;AAAA,MACvC,aAAa,UAAU,KAAK,cAAc;AAAA,IAC5C,EAAE;AAAA;AAAA,EAGI,wBAAwB,CAC9B,YACA,WACA,UACM;AAAA,IACN,IAAI,aAAa,aAAa,SAAS,cAAc,WAAW;AAAA,MAC9D,MAAM,IAAI,mBACR,qCAAqC,gCAAgC,2DAA2D,SAAS,aAC3I;AAAA,IACF;AAAA;AAAA,QAGI,6BAA6B,CACjC,SACA,SACgC;AAAA,IAChC,MAAM,WAAW,MAAM,uBAAuB,KAAK,SAAS,SAAS,QAAQ,EAAE;AAAA,IAC/E,OAAO,WAAW,KAAK,4BAA4B,SAAS,QAAQ,IAAI;AAAA;AAAA,QAGpE,gCAAgC,CACpC,SACA,SACyC;AAAA,IACzC,MAAM,WAAW,MAAM,uBAAuB,KAAK,SAAS,SAAS,QAAQ,EAAE;AAAA,IAC/E,IAAI,CAAC,UAAU;AAAA,MACb,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,MAAM,MAAM,KAAK,gCAAgC,SAAS,QAAQ;AAAA,IACxE,OAAO,MAAM,gBAAgB,UAAU,GAAG,IAAI;AAAA;AAAA,QAG1C,oCAAoC,CACxC,SACA,SACwC;AAAA,IACxC,MAAM,WAAW,MAAM,uBAAuB,KAAK,SAAS,SAAS,QAAQ,EAAE;AAAA,IAC/E,OAAO,WAAW,KAAK,mCAAmC,SAAS,QAAQ,IAAI;AAAA;AAAA,QAO3E,wCAAwC,CAC5C,SACA,SAC0D;AAAA,IAC1D,QAAQ,YAAY,UAAU,MAAM,wCAClC,KAAK,SACL,SACA,QAAQ,EACV;AAAA,IAEA,OAAO;AAAA,MACL;AAAA,MACA,eAAe,QAAQ,MAAM,KAAK,mCAAmC,SAAS,KAAK,IAAI;AAAA,IACzF;AAAA;AAAA,QAGY,kCAAkC,CAC9C,SACA,UACwC;AAAA,IACxC,MAAM,MAAM,MAAM,KAAK,gCAAgC,SAAS,QAAQ;AAAA,IACxE,IAAI,CAAC,KAAK;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IAEA,OAAO,UAAU,MAAM,KAAK,SAAS,6BAA6B,SAAS;AAAA,MACzE,EAAE,OAAO,UAAU,YAAY,IAAI,WAAW;AAAA,IAChD,CAAC;AAAA,IAED,OAAO;AAAA,MACL,WAAW,SAAS;AAAA,MACpB,WAAW,YAAY,IAAI,UAAU;AAAA,MACrC;AAAA,MACA,UAAU,IAAI,UAAU;AAAA,MACxB,QAAQ,IAAI,UAAU;AAAA,SACnB,cAAc,SAAS,WAAW,GAAG;AAAA,SACpC,IAAI,UAAU,aAAa,YAAY,EAAE,UAAU,IAAI,SAAS,SAAS,IAAI,CAAC;AAAA,SAC9E,IAAI,UAAU,+BAA+B,YAC7C,EAAE,4BAA4B,IAAI,SAAS,2BAA2B,IACtE,CAAC;AAAA,IACP;AAAA;AAAA,QAGI,qBAAqB,CACzB,SACA,SACA,YACgC;AAAA,IAChC,0BAAyB,UAAU;AAAA,IAEnC,MAAM,WAAW,MAAM,uBAAuB,KAAK,SAAS,SAAS,QAAQ,EAAE;AAAA,IAC/E,OAAO,WAAW,KAAK,sBAAsB,SAAS,UAAU,UAAU,IAAI;AAAA;AAAA,QAG1E,qBAAqB,CACzB,SACA,UACA,YACgC;AAAA,IAChC,MAAM,QAAQ,MAAM,KAAK,0BAA0B,SAAS,UAAU,YAAY;AAAA,MAChF,eAAe;AAAA,IACjB,CAAC;AAAA,IACD,OAAO,SAAS,MAAM,KAAK,oBAAoB,SAAS,UAAU,CAAC,KAAK,CAAC,GAAG,KAAK;AAAA;AAAA,QAG7E,wBAAwB,CAC5B,SACA,SACA,YACyC;AAAA,IACzC,0BAAyB,UAAU;AAAA,IAEnC,MAAM,WAAW,MAAM,uBAAuB,KAAK,SAAS,SAAS,QAAQ,EAAE;AAAA,IAC/E,IAAI,CAAC,UAAU;AAAA,MACb,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,MAAM,MAAM,KAAK,0BAA0B,SAAS,UAAU,YAAY;AAAA,MAC9E,eAAe;AAAA,IACjB,CAAC;AAAA,IACD,OAAO,MAAM,gBAAgB,UAAU,GAAG,IAAI;AAAA;AAAA,QAO1C,kBAAkB,CACtB,SACA,MAC2B;AAAA,IAC3B,MAAM,UAAU,MAAM,KAAK,SAAS,6BAClC,SACA,KAAK,IAAI,CAAC,SAAS,EAAE,OAAO,IAAI,OAAO,YAAY,IAAI,SAAS,WAAW,EAAE,CAC/E;AAAA,IAEA,OAAO,KAAK,IAAI,CAAC,KAAK,UAAU,kBAAkB,IAAI,OAAO,IAAI,UAAU,QAAQ,MAAM,CAAC;AAAA;AAAA,QAGtF,yBAAyB,CAC7B,SACA,SACA,OACoC;AAAA,IACpC,MAAM,WAAW,MAAM,uBAAuB,KAAK,SAAS,SAAS,QAAQ,EAAE;AAAA,IAC/E,OAAO,WAAW,KAAK,wBAAwB,SAAS,UAAU,KAAK,IAAI,CAAC;AAAA;AAAA,QAGhE,uBAAuB,CACnC,SACA,UACA,OACoC;AAAA,IACpC,MAAM,cAAc,MAAM,KAAK,2BAA2B,SAAS,UAAU,KAAK;AAAA,IAClF,OAAO,KAAK,oBAAoB,SAAS,UAAU,WAAW;AAAA;AAAA,QAG1D,2BAA2B,CAC/B,SACA,UACgC;AAAA,IAChC,OAAO,UAAU,MAAM,KAAK,wBAAwB,SAAS,UAAU,CAAC;AAAA,IACxE,OAAO,UAAU;AAAA;AAAA,QAGL,+BAA+B,CAC3C,SACA,UACoC;AAAA,IACpC,OAAO,OAAO,MAAM,KAAK,2BAA2B,SAAS;AAAA,MAC3D,OAAO;AAAA,MACP,iBAAiB;AAAA,IACnB,CAAC;AAAA,IACD,OAAO,OAAO;AAAA;AAAA,QAGF,yBAAyB,CACrC,SACA,UACA,YACA,SACoC;AAAA,IACpC,0BAAyB,UAAU;AAAA,IAEnC,OAAO,OAAO,MAAM,KAAK,2BAA2B,SAAS;AAAA,MAC3D,OAAO;AAAA,MACP,iBAAiB;AAAA,MACjB,iBAAiB;AAAA,IACnB,CAAC;AAAA,IACD,IAAI,CAAC,KAAK;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IAEA,IACE,CAAC,QAAQ,iBACR,IAAI,SAAS,YAAY,IAAI,SAAS,WAAW,IAAI,SAAS,UAC/D;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IAEA,OAAO,UAAU,MAAM,KAAK,2BAA2B,SAAS;AAAA,MAC9D,OAAO;AAAA,MACP,kBAAkB;AAAA,MAClB,iBAAiB;AAAA,IACnB,CAAC;AAAA,IAED,OAAO,SAAS,KAAK,KAAK,kBAAkB,OAAO,WAAW,IAAI;AAAA;AAAA,QAGtD,0BAA0B,CACtC,SACA,UACA,OACwC;AAAA,IACxC,MAAM,eAAe,UAAU,YAAY,YAAY,KAAK,IAAI,GAAG,KAAK;AAAA,IACxE,IAAI,iBAAiB,GAAG;AAAA,MACtB,OAAO,CAAC;AAAA,IACV;AAAA,IAEA,MAAM,OAAO,MAAM,KAAK,2BAA2B,SAAS;AAAA,MAC1D,OAAO;AAAA,MACP,iBAAiB,iBAAiB,YAAY,YAAY,eAAe;AAAA,IAC3E,CAAC;AAAA,IACD,MAAM,kBAAkB,KAAK,sBAAsB,IAAI;AAAA,IACvD,OAAO,iBAAiB,YAAY,kBAAkB,gBAAgB,MAAM,GAAG,YAAY;AAAA;AAAA,QAG/E,0BAA0B,CACtC,SACA,OACwC;AAAA,IACxC,IAAI,MAAM,oBAAoB,aAAa,MAAM,mBAAmB,GAAG;AAAA,MACrE,OAAO,CAAC;AAAA,IACV;AAAA,IAEA,MAAM,YAAkC,CAAC;AAAA,IACzC,IAAI,mBAAmB,MAAM;AAAA,IAC7B,IAAI,YACF,MAAM,oBAAoB,aACzB,MAAM,oBAAoB,aAAa,MAAM,mBAAmB;AAAA,IAEnE,OAAO,MAAM,oBAAoB,aAAa,UAAU,SAAS,MAAM,iBAAiB;AAAA,MACtF,MAAM,YAAY,YAAY,wBAAwB;AAAA,MACtD,MAAM,aAAa,MAAM,KAAK,wBAAwB,SAAS;AAAA,QAC7D,OAAO,MAAM;AAAA,QACb,iBAAiB,MAAM;AAAA,QACvB;AAAA,QACA,OAAO,MAAM,oBAAoB,YAAY,YAAY;AAAA,MAC3D,CAAC;AAAA,MACD,YAAY;AAAA,MACZ,IAAI,WAAW,WAAW,GAAG;AAAA,QAC3B;AAAA,MACF;AAAA,MAEA,WAAW,aAAa,YAAY;AAAA,QAClC,MAAM,WAAW,KAAK,uBACpB,MAAM,MAAM,WACZ,MAAM,MAAM,SACZ,SACF;AAAA,QACA,IAAI,UAAU;AAAA,UACZ,UAAU,KAAK,QAAQ;AAAA,QACzB;AAAA,QAEA,IAAI,MAAM,oBAAoB,aAAa,UAAU,UAAU,MAAM,iBAAiB;AAAA,UACpF;AAAA,QACF;AAAA,MACF;AAAA,MAEA,IAAI,MAAM,oBAAoB,aAAa,WAAW,SAAS,WAAW;AAAA,QACxE;AAAA,MACF;AAAA,MAEA,mBAAmB,WAAW,WAAW,SAAS,IAAI;AAAA,IACxD;AAAA,IAEA,OAAO;AAAA;AAAA,QAcK,uBAAuB,CACnC,SACA,OACiD;AAAA,IACjD,MAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,MAAM,MAAM,KAAK,CAAC;AAAA,IACjD,IAAI,UAAU,GAAG;AAAA,MACf,OAAO,CAAC;AAAA,IACV;AAAA,IACA,IAAI,MAAM,oBAAoB,WAAW;AAAA,MACvC,0BAAyB,MAAM,eAAe;AAAA,IAChD;AAAA,IACA,IAAI,MAAM,qBAAqB,WAAW;AAAA,MACxC,0BAAyB,MAAM,gBAAgB;AAAA,IACjD;AAAA,IAEA,MAAM,OAAO,MAAM,QAAQ,MACzB,2BAA2B,KAAK,SAAS,CAAC,UAAU;AAAA,MAIlD,MAAM,SAAS;AAAA,QACb;AAAA;AAAA,mBAES,MAAM,gBAAgB;AAAA,+BACV,MAAM,MAAM;AAAA;AAAA,MAEnC;AAAA,MACA,IAAI,MAAM,oBAAoB,WAAW;AAAA,QACvC,OAAO,KAAK,yBAAyB,MAAM,iBAAiB;AAAA,MAC9D;AAAA,MACA,IAAI,MAAM,qBAAqB,WAAW;AAAA,QACxC,OAAO,KAAK,yBAAyB,MAAM,kBAAkB;AAAA,MAC/D;AAAA,MAEA,MAAM,oBAAoB,gBAAgB,MAAM,KAAK,EAClD,IACC,CAAC,YACC,8CAA8C,eAAe,IAAI,UAAU,QAC/E,EACC,KAAK,MAAM;AAAA,MAId,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAME,MAAM,2BAA2B;AAAA,iBACjC,MAAM,mBAAmB;AAAA;AAAA,kBAExB,OAAO,KAAK,OAAO;AAAA,mBAClB;AAAA;AAAA,kBAED;AAAA;AAAA,KAEX,CACH;AAAA,IAEA,OAAO,KAAK,IAAI,CAAC,QAAQ;AAAA,MACvB,MAAM,WAAW,oBAAoB,IAAI,iBAAiB;AAAA,MAE1D,OAAO;AAAA,QACL,YAAY,OAAO,cAAc,KAAK,aAAa,CAAC;AAAA,QACpD,WAAW,QAAQ,KAAK,eAAe;AAAA,QACvC,aAAa,UAAU,KAAK,cAAc;AAAA,WACtC,aAAa,YAAY,EAAE,SAAS,IAAI,CAAC;AAAA,MAC/C;AAAA,KACD;AAAA;AAAA,QAQW,kBAAkB,CAC9B,SACA,aAC0C;AAAA,IAC1C,MAAM,WAAW,IAAI;AAAA,IACrB,IAAI,YAAY,WAAW,GAAG;AAAA,MAC5B,OAAO;AAAA,IACT;AAAA,IAEA,WAAW,cAAc,aAAa;AAAA,MACpC,0BAAyB,UAAU;AAAA,IACrC;AAAA,IAEA,MAAM,0BAA0B,0BAC9B,KAAK,SACL,2BACF;AAAA,IACA,MAAM,OAAO,MAAM,QAAQ,MAAM;AAAA;AAAA,aAExB;AAAA,8BACiB,YAAY,KAAK,IAAI;AAAA,KAC9C;AAAA,IAED,WAAW,OAAO,MAAM;AAAA,MACtB,MAAM,SAAS,oBAAoB,kBAAkB,KAAK,mBAAmB,CAAC;AAAA,MAC9E,IAAI,WAAW,WAAW;AAAA,QACxB,SAAS,IAAI,OAAO,cAAc,KAAK,aAAa,CAAC,GAAG,MAAM;AAAA,MAChE;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,EAGD,sBAAsB,CAC5B,WACA,SACA,WAC2B;AAAA,IAC3B,QAAQ,eAAe,oBAAoB,qBAAqB,UAAU,aAAa,OAAO;AAAA,IAK9F,IAAI,CAAC,eAAe;AAAA,MAClB,MAAM,WAAW,UAAU;AAAA,MAC3B,IAAI,CAAC,YAAY,SAAS,cAAc,WAAW;AAAA,QACjD,OAAO;AAAA,MACT;AAAA,MAEA,OAAO;AAAA,QACL,YAAY,UAAU;AAAA,QACtB;AAAA,QACA,WAAW,UAAU;AAAA,QACrB,MAAM,SAAS,QAAQ;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AAAA,IAKA,KAAK,yBAAyB,UAAU,YAAY,WAAW,UAAU,QAAQ;AAAA,IAEjF,OAAO;AAAA,MACL,YAAY,UAAU;AAAA,MACtB;AAAA,MACA,WAAW,UAAU;AAAA,MACrB,MAAM,UAAU,UAAU,SAAS,kBAAkB,aAAa;AAAA,SAC9D,UAAU,aAAa,YAAY,EAAE,UAAU,UAAU,SAAS,IAAI,CAAC;AAAA,IAC7E;AAAA;AAAA,QAIY,mBAAmB,CAC/B,SACA,UACA,MAC2B;AAAA,IAC3B,MAAM,UAAU,MAAM,KAAK,SAAS,6BAClC,SACA,KAAK,IAAI,CAAC,SAAS,EAAE,OAAO,UAAU,YAAY,IAAI,WAAW,EAAE,CACrE;AAAA,IACA,OAAO,KAAK,IAAI,CAAC,KAAK,UAAU,kBAAkB,UAAU,KAAK,QAAQ,MAAM,CAAC;AAAA;AAAA,EAG1E,qBAAqB,CAC3B,WAC+B;AAAA,IAC/B,OAAO,UAAU,IAAI,CAAC,UAAU,UAAU;AAAA,MAGxC,MAAM,mBACJ,SAAS,SAAS,YAAY,SAAS,SAAS,WAAW,SAAS,SAAS,WACzE,UAAU,QAAQ,IAAI,aACtB;AAAA,MACN,OAAO,qBAAqB,YAAY,WAAW,KAAK,UAAU,iBAAiB;AAAA,KACpF;AAAA;AAEL;AAEA,SAAS,iBAAiB,CACxB,UACA,KACA,QACgB;AAAA,EAMhB,OAAO;AAAA,IACL,WAAW,SAAS;AAAA,IACpB,WAAW,YAAY,IAAI,UAAU;AAAA,IACrC,iBACE,IAAI,qBAAqB,YAAY,YAAY,YAAY,IAAI,gBAAgB;AAAA,IACnF,MAAM,IAAI;AAAA,IACV,WAAW,IAAI;AAAA,IACf;AAAA,IACA,UAAU,IAAI,UAAU;AAAA,IACxB,QAAQ,IAAI,UAAU;AAAA,OACnB,cAAc,SAAS,WAAW,GAAG;AAAA,OACpC,IAAI,UAAU,aAAa,YAAY,EAAE,UAAU,IAAI,SAAS,SAAS,IAAI,CAAC;AAAA,EACpF;AAAA;AAQF,SAAS,aAAa,CACpB,WACA,KACiC;AAAA,EACjC,MAAM,WAAW,IAAI;AAAA,EACrB,IAAI,aAAa,WAAW;AAAA,IAC1B,OAAO;AAAA,MACL,SAAS;AAAA,QACP,SAAS,YAAY,YAAY,IAAI,UAAU,UAAU;AAAA,MAC3D;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO,SAAS,YAAY,YACxB,CAAC,IACD,EAAE,SAAS,cAAc,SAAS,WAAW,SAAS,OAAO,EAAE;AAAA;AAGrE,SAAS,eAAe,CACtB,OACA,UACyB;AAAA,EACzB,OAAO;AAAA,IACL,WAAW,MAAM;AAAA,IACjB,WAAW,YAAY,SAAS,UAAU;AAAA,IAC1C;AAAA,IACA;AAAA,EACF;AAAA;AAGF,SAAS,yBAAwB,CAAC,YAA0B;AAAA,EAC1D,IAAI,CAAC,QAAQ,KAAK,UAAU,GAAG;AAAA,IAC7B,MAAM,IAAI,mBAAiB,gDAAgD,cAAc;AAAA,EAC3F;AAAA;;;AC7mCF,uBAAS;AAET;AAAA,sBAaE;AAAA;AAAA;;;ACdF;AAAA;AAAA,sBAGE;AAAA;AA6BK,SAAS,sBAAsB,CACpC,MACA,WACkC;AAAA,EAClC,IAAI,SAAS,cAAc,SAAS,UAAU;AAAA,IAC5C,MAAM,IAAI,mBACR,0BAA0B,mBAAmB,OAAO,IAAI,sCAC1D;AAAA,EACF;AAAA;AAGK,eAAe,4BAA4B,CAAC,OAQf;AAAA,EAClC,MAAM,YAAY,uBAAuB,MAAM,QAAQ,EAAE;AAAA,EACzD,MAAM,QAAQ,mBAAmB,MAAM,SAAS,SAAS;AAAA,EACzD,MAAM,aAAa,4BAA4B,MAAM,QAAQ,MAAM;AAAA,EACnE,MAAM,oBAAoB,4BAA4B,MAAM,OAAO;AAAA,EAEnE,IAAI;AAAA,EACJ,IAAI,sBAAsB,MAAM;AAAA,IAC9B,MAAM,2BAA2B;AAAA,MAC/B,SAAS,MAAM;AAAA,MACf,SAAS,MAAM;AAAA,MACf,aAAa,MAAM;AAAA,MACnB,SAAS,GAAG,MAAM;AAAA,IACpB,CAAC;AAAA,IAED,IAAI,MAAM,SAAS,UAAU;AAAA,MAC3B,mBAAmB,MAAM,2BAA2B;AAAA,QAClD,SAAS,MAAM;AAAA,QACf,SAAS,MAAM;AAAA,QACf,aAAa;AAAA,QACb,SAAS;AAAA,MACX,CAAC;AAAA,MACD,MAAM,0BAA0B;AAAA,QAC9B,SAAS,MAAM;AAAA,QACf,SAAS,MAAM;AAAA,QACf,iBAAiB,MAAM;AAAA,QACvB,kBAAkB;AAAA,QAClB,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,IAAI,MAAM,SAAS,YAAY;AAAA,IAC7B,MAAM,SAAS,MAAM,oBAAoB,MAAM,SAAS,MAAM,mBAAmB,UAAU;AAAA,IAC3F,MAAM,SAAS,MAAM,oBAAoB,MAAM,SAAS,OAAO,UAAU;AAAA,IAEzE,IAAI,gBAAgB,QAAQ,MAAM,GAAG;AAAA,MACnC,OAAO;AAAA,QACL,oBAAoB;AAAA,QACpB,gBAAgB,OAAO;AAAA,QACvB,mBAAmB,EAAE,MAAM,SAAS,OAAO,OAAO,SAAS;AAAA,QAC3D,gBAAgB,OAAO,aAAa;AAAA,QACpC,kBAAkB;AAAA,MACpB;AAAA,IACF;AAAA,IAEA,MAAM,MAAM,QAAQ,IAAI,eAAe,OAAO;AAAA,IAC9C,MAAM,MAAM,QAAQ,IAClB,eAAe,UAAU,sBAAsB,mBAAmB,MAAM,mBAC1E;AAAA,IAEA,MAAM,mBAAmB,OAAO,WAAW,KAAK,OAAO,WAAW;AAAA,IAClE,OAAO;AAAA,MACL,oBAAoB;AAAA,MACpB,gBAAgB,OAAO;AAAA,MACvB,mBAAmB,EAAE,MAAM,SAAS,OAAO,OAAO,SAAS;AAAA,MAC3D,gBAAgB,OAAO,aAAa;AAAA,MACpC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,iBAAiB,MAAM,UAAU,MAAM,SAAS,MAAM,iBAAiB;AAAA,EAC7E,MAAM,gBAAgB,oBAAoB,MAAM;AAAA,EAChD,MAAM,iBACJ,kBAAkB,YAAY,MAAM,gBAAgB,MAAM,SAAS,KAAK,IAAI,kBAAkB;AAAA,EAChG,MAAM,MAAM,QAAQ,IAClB,eAAe,UAAU,sBAAsB,mBAAmB,MAAM,mBAC1E;AAAA,EAEA,OAAO;AAAA,IACL,oBAAoB,iBAAiB;AAAA,IACrC;AAAA,IACA,kBAAkB,iBAAiB;AAAA,IACnC;AAAA,IACA,mBACE,MAAM,qBAAqB,YACvB,EAAE,MAAM,UAAU,IAClB,EAAE,MAAM,SAAS,OAAO,MAAM,mBAAmB,eAAe;AAAA,EACxE;AAAA;AAGK,eAAe,0BAA0B,CAAC,OAK7B;AAAA,EAClB,MAAM,oBAAoB,4BAA4B,MAAM,OAAO;AAAA,EACnE,IAAI,sBAAsB,MAAM;AAAA,IAC9B,MAAM,IAAI,mBACR,2BAA2B,MAAM,QAAQ,wDAC3C;AAAA,EACF;AAAA,EAEA,MAAM,UAAU,kBAAkB,IAAI,CAAC,WAAW,gBAAgB,MAAM,CAAC,EAAE,KAAK,IAAI;AAAA,EACpF,OAAO,OAAO,MAAM,MAAM,QAAQ,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,2CAKC;AAAA,aAC9B,MAAM;AAAA;AAAA,GAEhB;AAAA,EAED,MAAM,WAAW,QAAQ,YAAY,IAAI,OAAO,cAAc,KAAK,WAAW,CAAC;AAAA,EAC/E,MAAM,cAAc,QAAQ,YAAY,IAAI,OAAO,cAAc,KAAK,eAAe,CAAC;AAAA,EACtF,IAAI,cAAc,GAAG;AAAA,IACnB,MAAM,IAAI,mBACR,2BAA2B,MAAM,QAAQ,OAAO,MAAM,yCACxD;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAGT,eAAe,yBAAyB,CAAC,OAMvB;AAAA,EAChB,MAAM,oBAAoB,4BAA4B,MAAM,OAAO;AAAA,EACnE,IAAI,sBAAsB,MAAM;AAAA,IAC9B;AAAA,EACF;AAAA,EAEA,MAAM,WAAW,kBACd,IAAI,CAAC,WAAW,aAAa,gBAAgB,MAAM,kBAAkB,gBAAgB,MAAM,GAAG,EAC9F,KAAK,OAAO;AAAA,EACf,OAAO,aAAa,MAAM,MAAM,QAAQ,MAAM;AAAA;AAAA,WAErC,MAAM;AAAA,WACN,MAAM,kCAAkC;AAAA;AAAA,GAEhD;AAAA,EACD,IAAI,cAAc,WAAW;AAAA,IAC3B,MAAM,IAAI,mBACR,2BAA2B,MAAM,QAAQ,OAAO,MAAM,yCACxD;AAAA,EACF;AAAA;AASF,eAAe,mBAAmB,CAChC,SACA,aACA,YAC8B;AAAA,EAC9B,OAAO,OAAO,MAAM,QAAQ,MAAM;AAAA;AAAA;AAAA,0BAGV;AAAA,kDACwB;AAAA,WACvC;AAAA,GACR;AAAA,EAED,IAAI,QAAQ,WAAW;AAAA,IACrB,OAAO,EAAE,UAAU,GAAG,SAAS,KAAK,SAAS,IAAI;AAAA,EACnD;AAAA,EAEA,OAAO;AAAA,IACL,UAAU,OAAO,cAAc,KAAK,WAAW,CAAC;AAAA,IAChD,SAAS,cAAc,KAAK,UAAU,EAAE,SAAS;AAAA,IACjD,SAAS,cAAc,KAAK,UAAU,EAAE,SAAS;AAAA,EACnD;AAAA;AAGF,SAAS,eAAe,CAAC,MAA2B,OAAqC;AAAA,EACvF,OACE,KAAK,aAAa,MAAM,YACxB,KAAK,YAAY,MAAM,WACvB,KAAK,YAAY,MAAM;AAAA;AAI3B,eAAe,SAAS,CAAC,SAA6B,aAAsC;AAAA,EAC1F,OAAO,OAAO,MAAM,QAAQ,MAAM,qCAAqC,aAAa;AAAA,EACpF,IAAI,QAAQ,WAAW;AAAA,IACrB,OAAO;AAAA,EACT;AAAA,EAEA,OAAO,OAAO,cAAc,KAAK,WAAW,CAAC;AAAA;AAG/C,eAAe,eAAe,CAAC,SAA6B,aAAuC;AAAA,EACjG,MAAM,OAAO,MAAM,QAAQ,MAAM,4BAA4B,qBAAqB;AAAA,EAClF,OAAO,KAAK,WAAW;AAAA;;;ACrPzB,uBAAS;AACT,2BAAgC;;;ACDhC,uBAAS;AAET;AAAA,sBACE;AAAA;AASF,IAAM,8BAA8B;AACpC,IAAM,+BAA+B;AAAA;AAkBrC,MAAM,6BAA6D;AAAA,EACpC;AAAA,EAA7B,WAAW,CAAkB,aAAqB;AAAA,IAArB;AAAA;AAAA,EAE7B,QAAQ,GAAW;AAAA,IACjB,OAAO,KAAK;AAAA;AAEhB;AAEO,SAAS,kCAAkC,CAChD,aACA,MAC8B;AAAA,EAC9B,MAAM,QAAQ,YAAW,EAAE,WAAW,KAAK,EAAE;AAAA,EAC7C,MAAM,YAAkD,OAAO,OAAO,IAAI;AAAA,EAC1E,MAAM,2BAA2B,IAAI;AAAA,EAErC,YAAY,QAAQ,CAAC,YAAY,UAAU;AAAA,IACzC,MAAM,cAAc,GAAG,8BAA8B,SAAS;AAAA,IAC9D,UAAU,cAAc,OAAO,OAAO,IAAI,6BAA6B,WAAW,CAAC;AAAA,IACnF,yBAAyB,IAAI,aAAa,UAAU;AAAA,GACrD;AAAA,EAED,MAAM,MAAM,KAAK,OAAO,OAAO,SAAS,CAAC;AAAA,EACzC,IAAI,OAAO,QAAQ,UAAU;AAAA,IAC3B,MAAM,IAAI,mBAAiB,6DAA6D;AAAA,EAC1F;AAAA,EAEA,OAAO;AAAA,IACL,MAAM,CAAC,aAAa;AAAA,MAClB,MAAM,WAAW,IAAI,QAAQ,8BAA8B,CAAC,gBAAgB;AAAA,QAC1E,MAAM,aAAa,yBAAyB,IAAI,WAAW;AAAA,QAC3D,MAAM,WAAW,eAAe,YAAY,YAAY,YAAY,IAAI,UAAU;AAAA,QAClF,IAAI,aAAa,WAAW;AAAA,UAC1B,2BAA2B;AAAA,QAC7B;AAAA,QAEA,OAAO;AAAA,OACR;AAAA,MAED,IAAI,SAAS,SAAS,2BAA2B,GAAG;AAAA,QAClD,2BAA2B;AAAA,MAC7B;AAAA,MAEA,OAAO;AAAA;AAAA,EAEX;AAAA;AAIK,SAAS,6BAA6B,CAC3C,SACA,SAC6B;AAAA,EAC7B,OAAO,IAAI,IACT,OAAO,QAAQ,OAAO,EAAE,IAAI,EAAE,YAAY,YAAY;AAAA,IACpD,MAAM,aAAa,eAAe,OAAO,SAAS;AAAA,IAClD,MAAM,QAAQ,mBAAmB,SAAS,uBAAuB,OAAO,SAAS,CAAC;AAAA,IAClF,OAAO;AAAA,MACL;AAAA,MACA,qBAAqB,GAAG,wBAAwB,eAAe,OAAO,OAAO;AAAA,IAC/E;AAAA,GACD,CACH;AAAA;AAOK,SAAS,oBAAoB,CAAC,UAAkB,SAAqC;AAAA,EAC1F,MAAM,aACJ,YAAY,YAAY,MAAM,QAAQ,IAAI,CAAC,WAAW,gBAAgB,MAAM,CAAC,EAAE,KAAK,IAAI;AAAA,EAC1F,OAAO,WAAW,mBAAmB;AAAA;AAIhC,SAAS,iBAAiB,CAC/B,YACA,SACA,SACoC;AAAA,EACpC,IAAI,YAAY,WAAW;AAAA,IACzB,OAAO,QAAQ,OAAO;AAAA,EACxB;AAAA,EAEA,IAAI,QAAQ,WAAW,GAAG;AAAA,IACxB,MAAM,IAAI,mBACR,wCAAwC,4CAC1C;AAAA,EACF;AAAA,EAEA,MAAM,gBAAgB,IAAI,IAAI,QAAQ,OAAO,QAAQ,IAAI,CAAC,WAAW,CAAC,OAAO,MAAM,MAAM,CAAC,CAAC;AAAA,EAC3F,MAAM,SAAS,IAAI;AAAA,EAEnB,OAAO,QAAQ,IAAI,CAAC,eAAe;AAAA,IACjC,MAAM,SAAS,cAAc,IAAI,UAAU;AAAA,IAC3C,IAAI,WAAW,WAAW;AAAA,MACxB,MAAM,IAAI,mBACR,wCAAwC,6BAA6B,+BAA+B,QAAQ,oBAC9G;AAAA,IACF;AAAA,IAEA,IAAI,OAAO,IAAI,UAAU,GAAG;AAAA,MAC1B,MAAM,IAAI,mBACR,wCAAwC,6BAA6B,6BACvE;AAAA,IACF;AAAA,IAEA,OAAO,IAAI,UAAU;AAAA,IACrB,OAAO;AAAA,GACR;AAAA;AAGH,SAAS,0BAA0B,GAAU;AAAA,EAC3C,MAAM,IAAI,mBACR,2EACF;AAAA;;;AC/IK,MAAM,2BAA2B,MAAM;AAAA,EAC1B,OAAO;AAC3B;AAEO,SAAS,MAAM,CAAC,QAAuB;AAAA,EAC5C,MAAM,IAAI,mBAAmB,MAAM;AAAA;AAI9B,SAAS,gBAAgB,CAAC,QAAuB;AAAA,EACtD,OAAO,kCAAkC,QAAQ;AAAA;;;ACH5C,SAAS,YAAY,CAAC,OAAqC;AAAA,EAChE,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAAA;AAGrE,SAAS,QAAQ,CAAC,OAAgB,MAA0B;AAAA,EACjE,IAAI,CAAC,aAAa,KAAK,GAAG;AAAA,IACxB,iBAAiB,GAAG,uBAAuB;AAAA,EAC7C;AAAA,EAEA,OAAO;AAAA;AAIF,SAAS,KAAK,CAAC,QAAoB,KAAsB;AAAA,EAC9D,IAAI,CAAC,OAAO,OAAO,QAAQ,GAAG,GAAG;AAAA,IAC/B,iBAAiB,kBAAkB,MAAM;AAAA,EAC3C;AAAA,EAEA,OAAO,OAAO;AAAA;AAGT,SAAS,WAAW,CAAC,QAAoB,KAAyB;AAAA,EACvE,OAAO,SAAS,MAAM,QAAQ,GAAG,GAAG,UAAU,MAAM;AAAA;AAG/C,SAAS,mBAAmB,CAAC,QAAoB,KAAgC;AAAA,EACtF,MAAM,QAAQ,MAAM,QAAQ,GAAG;AAAA,EAC/B,OAAO,UAAU,OAAO,OAAO,SAAS,OAAO,UAAU,MAAM;AAAA;AAG1D,SAAS,WAAW,CAAC,QAAoB,KAAqB;AAAA,EACnE,MAAM,QAAQ,MAAM,QAAQ,GAAG;AAAA,EAC/B,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B,iBAAiB,UAAU,sBAAsB;AAAA,EACnD;AAAA,EAEA,OAAO;AAAA;AAGF,SAAS,YAAY,CAAC,QAAoB,KAAsB;AAAA,EACrE,MAAM,QAAQ,MAAM,QAAQ,GAAG;AAAA,EAC/B,IAAI,OAAO,UAAU,WAAW;AAAA,IAC9B,iBAAiB,UAAU,uBAAuB;AAAA,EACpD;AAAA,EAEA,OAAO;AAAA;AAOF,SAAS,UAAU,CAAC,QAAoB,KAAqB;AAAA,EAClE,OAAO,QAAQ,MAAM,QAAQ,GAAG,GAAG,UAAU,MAAM;AAAA;AAGrD,SAAS,OAAO,CAAC,OAAgB,MAAsB;AAAA,EACrD,IAAI,OAAO,UAAU,YAAY,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,GAAG;AAAA,IACtE,iBAAiB,GAAG,sBAAsB;AAAA,EAC5C;AAAA,EAEA,OAAO;AAAA;AAIF,SAAS,SAAS,CAAC,QAAoB,KAAiC;AAAA,EAC7E,OAAO,OAAO,MAAM,QAAQ,GAAG,GAAG,UAAU,MAAM;AAAA;AAG7C,SAAS,MAAM,CAAC,OAAgB,MAAkC;AAAA,EACvE,IAAI,UAAU,MAAM;AAAA,IAClB,OAAO,CAAC;AAAA,EACV;AAAA,EAEA,IAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AAAA,IACzB,iBAAiB,GAAG,oBAAoB;AAAA,EAC1C;AAAA,EAEA,OAAO;AAAA;AAGF,SAAS,eAAe,CAAC,QAAoB,KAAoC;AAAA,EACtF,OAAO,UAAU,QAAQ,GAAG,EAAE,IAAI,CAAC,SAAS,SAAS,MAAM,eAAe,MAAM,CAAC;AAAA;AAG5E,SAAS,cAAc,CAAC,QAAoB,KAAgC;AAAA,EACjF,OAAO,YAAY,MAAM,QAAQ,GAAG,GAAG,UAAU,MAAM;AAAA;AAGlD,SAAS,WAAW,CAAC,OAAgB,MAAiC;AAAA,EAC3E,OAAO,OAAO,OAAO,IAAI,EAAE,IAAI,CAAC,SAAS,QAAQ,MAAM,cAAc,MAAM,CAAC;AAAA;AAGvE,SAAS,eAAe,CAAC,QAAoB,KAAgC;AAAA,EAClF,OAAO,UAAU,QAAQ,GAAG,EAAE,IAAI,CAAC,SAAS;AAAA,IAC1C,IAAI,OAAO,SAAS,UAAU;AAAA,MAC5B,iBAAiB,eAAe,sBAAsB;AAAA,IACxD;AAAA,IAEA,OAAO;AAAA,GACR;AAAA;AAOI,SAAS,qBAAqB,CACnC,MACA,SACA,SACoB;AAAA,EACpB,MAAM,SAAS,SAAS,KAAK,MAAM,IAAI,GAAG,mBAAmB;AAAA,EAC7D,IAAI,aAAa,QAAQ,OAAO,GAAG;AAAA,IACjC,OAAO,GAAG,YAAY,YAAY,QAAQ,eAAe,GAAG;AAAA,EAC9D;AAAA,EAEA,OAAO,UAAU,QAAQ,OAAO;AAAA;;;ACvH3B,IAAM,iBAAiB;AAkBvB,SAAS,UAAU,CAAC,YAAoB,aAA6B;AAAA,EAC1E,OAAO,GAAG,cAAc;AAAA;AAInB,SAAS,MAAS,CAAC,OAAqB,OAAe,MAAiB;AAAA,EAC7E,MAAM,OAAO,MAAM;AAAA,EACnB,IAAI,SAAS,WAAW;AAAA,IACtB,iBAAiB,GAAG,QAAQ,uBAAuB;AAAA,EACrD;AAAA,EAEA,OAAO;AAAA;AAGF,SAAS,OAAO,IAAI,MAA4C;AAAA,EACrE,MAAM,QAAQ,IAAI;AAAA,EAClB,WAAW,OAAO,MAAM;AAAA,IACtB,OAAO,OAAO,GAAG;AAAA,EACnB;AAAA,EAEA,OAAO;AAAA;AAGF,SAAS,MAAM,CAAC,QAAqB,QAAgC;AAAA,EAC1E,WAAW,QAAQ,QAAQ;AAAA,IACzB,OAAO,IAAI,IAAI;AAAA,EACjB;AAAA;AAGK,SAAS,gBAAgB,CAAC,MAAoB,OAA8B;AAAA,EACjF,OAAO,KAAK,SAAS,MAAM,QAAQ,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,SAAS,MAAM,IAAI,IAAI,CAAC;AAAA;;;ACxCvE,SAAS,sBAAsB,CACpC,YACA,OACa;AAAA,EACb,MAAM,eAAe,IAAI;AAAA,EACzB,cAAc,cAAc,YAAY,KAAK;AAAA,EAC7C,OAAO;AAAA;AAIF,SAAS,gBAAgB,CAAC,QAAgD;AAAA,EAC/E,OAAO,OAAO,IAAI,CAAC,UAAU,MAAM,SAAS,OAAO,YAAY,GAAG,YAAY,CAAC;AAAA;AAI1E,SAAS,sBAAsB,CAAC,QAAoB,KAAiC;AAAA,EAC1F,MAAM,UAAU,oBAAoB,QAAQ,GAAG;AAAA,EAC/C,OAAO,YAAY,OAAO,CAAC,IAAI,iBAAiB,UAAU,SAAS,QAAQ,CAAC;AAAA;AAG9E,SAAS,aAAa,CAAC,QAAqB,OAAgB,OAAoC;AAAA,EAC9F,MAAM,aAAa,SAAS,OAAO,YAAY;AAAA,EAC/C,MAAM,kBAAkB,YAAY,YAAY,kBAAkB;AAAA,EAElE,QAAQ;AAAA,IACN,KAAK;AAAA,MAEH,OAAO,QAAQ,OAAO,OAAO,WAAW,YAAY,OAAO,GAAG,QAAQ,EAAE,YAAY;AAAA,MACpF;AAAA,IAEF,KAAK;AAAA,MACH,OAAO,QAAQ,gBAAgB,YAAY,KAAK,EAAE,YAAY;AAAA,MAC9D;AAAA,IAEF,KAAK;AAAA,MACH;AAAA,IAEF,KAAK;AAAA,IACL,KAAK;AAAA,MACH,cAAc,QAAQ,MAAM,YAAY,OAAO,GAAG,KAAK;AAAA,MACvD;AAAA,IAEF,KAAK;AAAA,MAGH,0BAA0B,YAAY,aAAa;AAAA,MACnD,eAAe,QAAQ,UAAU,YAAY,UAAU,GAAG,KAAK;AAAA,MAC/D;AAAA,IAEF,KAAK;AAAA,MAEH,0BAA0B,UAAU;AAAA,MACpC,eAAe,QAAQ,UAAU,YAAY,UAAU,GAAG,KAAK;AAAA,MAC/D,sBAAsB,QAAQ,MAAM,YAAY,QAAQ,GAAG,KAAK;AAAA,MAChE,eAAe,QAAQ,uBAAuB,YAAY,WAAW,GAAG,KAAK;AAAA,MAC7E;AAAA,IAEF,KAAK;AAAA,MACH,oBAAoB,QAAQ,YAAY,KAAK;AAAA,MAC7C;AAAA,IAEF,KAAK;AAAA,MACH,cAAc,QAAQ,MAAM,YAAY,MAAM,GAAG,KAAK;AAAA,MACtD,cAAc,QAAQ,MAAM,YAAY,OAAO,GAAG,KAAK;AAAA,MACvD;AAAA,IAEF,KAAK;AAAA,MACH,cAAc,QAAQ,MAAM,YAAY,OAAO,GAAG,KAAK;AAAA,MACvD,cAAc,QAAQ,MAAM,YAAY,OAAO,GAAG,KAAK;AAAA,MACvD,cAAc,QAAQ,MAAM,YAAY,OAAO,GAAG,KAAK;AAAA,MACvD;AAAA,IAEF,KAAK;AAAA,IACL,KAAK;AAAA,MACH,eAAe,QAAQ,UAAU,YAAY,UAAU,GAAG,KAAK;AAAA,MAC/D;AAAA,IAEF,KAAK;AAAA,MACH,WAAW,SAAS,gBAAgB,YAAY,aAAa,GAAG;AAAA,QAC9D,cAAc,QAAQ,MAAM,OAAO,WAAW,GAAG,KAAK;AAAA,QACtD,cAAc,QAAQ,MAAM,OAAO,WAAW,GAAG,KAAK;AAAA,MACxD;AAAA,MAEA,cAAc,QAAQ,MAAM,YAAY,WAAW,GAAG,KAAK;AAAA,MAC3D;AAAA,IAEF;AAAA,MAGE,OAAO,eAAe,mCAAmC;AAAA;AAAA;AAQ/D,SAAS,mBAAmB,CAC1B,QACA,YACA,OACM;AAAA,EAGN,IAAI,YAAY,YAAY,MAAM,MAAM,oBAAoB;AAAA,IAC1D,0BAA0B,UAAU;AAAA,EACtC;AAAA,EAEA,eAAe,QAAQ,UAAU,YAAY,UAAU,GAAG,KAAK;AAAA,EAC/D,eAAe,QAAQ,UAAU,YAAY,YAAY,GAAG,KAAK;AAAA,EACjE,eAAe,QAAQ,iBAAiB,UAAU,YAAY,QAAQ,CAAC,GAAG,KAAK;AAAA,EAC/E,eAAe,QAAQ,iBAAiB,UAAU,YAAY,YAAY,CAAC,GAAG,KAAK;AAAA,EAEnF,WAAW,OAAO,CAAC,WAAW,cAAc,YAAY,eAAe,cAAc,GAAG;AAAA,IACtF,sBAAsB,QAAQ,MAAM,YAAY,GAAG,GAAG,KAAK;AAAA,EAC7D;AAAA;AAGF,SAAS,cAAc,CACrB,QACA,aACA,OACM;AAAA,EACN,WAAW,cAAc,aAAa;AAAA,IACpC,cAAc,QAAQ,YAAY,KAAK;AAAA,EACzC;AAAA;AAGF,SAAS,qBAAqB,CAC5B,QACA,YACA,OACM;AAAA,EACN,IAAI,eAAe,MAAM;AAAA,IACvB,cAAc,QAAQ,YAAY,KAAK;AAAA,EACzC;AAAA;AAOF,SAAS,eAAe,CAAC,YAAwB,OAA0C;AAAA,EACzF,IAAI,WAAW,YAAY,OAAO,MAAM,GAAG;AAAA,IACzC,OAAO,iFAAiF;AAAA,EAC1F;AAAA,EAEA,MAAM,UAAU,YAAY,YAAY,SAAS;AAAA,EACjD,MAAM,MAAM,WAAW,WAAW,SAAS,aAAa,GAAG,WAAW,SAAS,cAAc,CAAC;AAAA,EAC9F,MAAM,SAAS,MAAM,KAAK,CAAC,cAAc,UAAU,YAAY,GAAG;AAAA,EAClE,IAAI,WAAW,WAAW;AAAA,IACxB,iBAAiB,kBAAkB,sBAAsB;AAAA,EAC3D;AAAA,EAEA,OAAO;AAAA;AAOT,SAAS,yBAAyB,CAAC,YAAwB,YAA2B;AAAA,EAEpF,IAAI,CAAC,aAAa,YAAY,eAAe,GAAG;AAAA,IAC9C;AAAA,EACF;AAAA,EAEA,MAAM,WAAW,MAAM,YAAY,eAAe;AAAA,EAClD,MAAM,YACJ,aAAa,QAAQ,KAAK,eAAe,YACrC,OAAO,QAAQ,QAAQ,EAAE,QAAQ,EAAE,KAAK,WAAY,QAAQ,aAAa,CAAC,IAAI,CAAC,KAAK,CAAE,IACtF,CAAC,QAAQ;AAAA,EAEf,IAAI,UAAU,KAAK,kBAAkB,GAAG;AAAA,IACtC,OACE,aAAa,YAAY,YAAY,MAAM,+DAC7C;AAAA,EACF;AAAA;AAGF,SAAS,kBAAkB,CAAC,OAAyB;AAAA,EACnD,IAAI,MAAM,QAAQ,KAAK,GAAG;AAAA,IACxB,OAAO,MAAM,KAAK,CAAC,SAAS,mBAAmB,IAAI,CAAC;AAAA,EACtD;AAAA,EAEA,IAAI,CAAC,aAAa,KAAK,GAAG;AAAA,IACxB,OAAO;AAAA,EACT;AAAA,EAEA,OAAO,OAAO,OAAO,OAAO,kBAAkB,KAAK,OAAO,OAAO,KAAK,EAAE,KAAK,kBAAkB;AAAA;;;AC1M1F,IAAM,uBAA4C,IAAI,IAAI;AAAA,EAC/D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;;;ACsCD,IAAM,2BAA2B;AAW1B,SAAS,WAAW,CAAC,MAAe,QAAuC;AAAA,EAChF,MAAM,OAAO,SAAS,SAAS,MAAM,MAAM,GAAG,EAAE,QAAQ,MAAM,IAAI,KAAO,cAAc,CAAC,EAAE,CAAC;AAAA,EAC3F,MAAM,OAAO,UAAU,KAAK,IAAI;AAAA,EAChC,MAAM,UAAU,KAAK,QAAQ,IAAI,CAAC,WAAW,UAAU,OAAO,YAAY,CAAC;AAAA,EAE3E,IAAI,CAAC,MAAM,GAAG,OAAO,EAAE,KAAK,CAAC,QAAQ,IAAI,SAAS,cAAc,CAAC,GAAG;AAAA,IAClE,OAAO,wDAAwD;AAAA,EACjE;AAAA,EAEA,OAAO,EAAE,MAAM,QAAQ;AAAA;AAGzB,SAAS,QAAQ,CAAC,MAAkB,SAAoC;AAAA,EACtE,MAAM,OAAO,YAAY,MAAM,MAAM;AAAA,EAErC,QAAQ;AAAA,IACN,KAAK;AAAA,MACH,OAAO,YAAY,MAAM,OAAO;AAAA,IAClC,KAAK;AAAA,MACH,OAAO,kBAAkB,IAAI;AAAA,IAC/B,KAAK;AAAA,MACH,OAAO,sBAAsB,MAAM,OAAO;AAAA,IAC5C,KAAK;AAAA,MACH,OAAO,mBAAmB,MAAM,OAAO;AAAA,IACzC,KAAK;AAAA,MACH,OAAO,eAAe,MAAM,OAAO;AAAA,IACrC,KAAK;AAAA,MACH,OAAO,kBAAkB,MAAM,OAAO;AAAA,IACxC,KAAK;AAAA,MACH,OAAO,eAAe,MAAM,OAAO;AAAA,IACrC,KAAK;AAAA,MACH,OAAO,eAAe,MAAM,OAAO;AAAA,IACrC,KAAK;AAAA,MACH,OAAO,gBAAgB,MAAM,OAAO;AAAA,IACtC,KAAK;AAAA,MACH,OAAO,cAAc,MAAM,OAAO;AAAA,IACpC,KAAK;AAAA,MAEH,OAAO,kBAAkB,MAAM,OAAO;AAAA,IACxC,KAAK;AAAA,MACH,OAAO,iBAAiB,MAAM,OAAO;AAAA,IACvC,KAAK;AAAA,IACL,KAAK;AAAA,MACH,OAAO,qBAAqB,MAAM,OAAO;AAAA,IAC3C,KAAK;AAAA,IACL,KAAK;AAAA,MACH,OAAO,uBAAuB,MAAM,OAAO;AAAA,IAC7C,KAAK;AAAA,MACH,OAAO,kBAAkB,MAAM,OAAO;AAAA,IACxC,KAAK;AAAA,MACH,OAAO,gBAAgB,MAAM,OAAO;AAAA,IACtC,KAAK;AAAA,MACH,OAAO,iBAAiB,MAAM,OAAO;AAAA,IACvC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,MACH,OAAO,qBAAqB,MAAM,OAAO;AAAA,IAC3C,KAAK;AAAA,MACH,OAAO,wBAAwB,MAAM,OAAO;AAAA,IAC9C,KAAK;AAAA,MACH,OAAO,qBAAqB,MAAM,OAAO;AAAA,IAC3C,KAAK;AAAA,MACH,OAAO,eAAe,MAAM,OAAO;AAAA,IACrC;AAAA,MACE,OAAO,cAAc,wBAAwB;AAAA;AAAA;AAcnD,SAAS,WAAW,CAAC,MAAkB,SAAoC;AAAA,EACzE,IAAI,gBAAgB,YAAY,MAAM,eAAe,GAAG,SAAS,EAAE,SAAS,GAAG;AAAA,IAC7E,iBAAiB,6CAA6C;AAAA,EAChE;AAAA,EAEA,MAAM,SAAS,gBAAgB,MAAM,UAAU;AAAA,EAC/C,IAAI,OAAO,SAAS,GAAG;AAAA,IACrB,iBAAiB,2BAA2B;AAAA,EAC9C;AAAA,EAEA,MAAM,QAAQ,OAAO,OAAO,YAAY,YAAY,SAAS,OAAO,IAAI,OAAO;AAAA,EAC/E,MAAM,eAAe,YAAY,MAAM,MAAM;AAAA,EAC7C,MAAM,SACJ,iBAAiB,aACb,gBAAgB,MAAM,SAAS,KAAK,IACpC,oBAAoB,cAAc,KAAK;AAAA,EAE7C,MAAM,UAAU,gBAAgB,MAAM,gBAAgB,EAAE,IAAI,CAAC,UAC3D,OAAO,OAAO,WAAW,OAAO,OAAO,CAAC,CAC1C;AAAA,EAEA,MAAM,aAAa,WAAW,MAAM,aAAa;AAAA,EACjD,MAAM,gBAAgB,eAAe,MAAM,gBAAgB;AAAA,EAC3D,MAAM,YAAY,cAAc,SAAS,IAAI,gBAAgB,QAAQ,IAAI,CAAC,GAAG,UAAU,KAAK;AAAA,EAE5F,MAAM,UAAwB,UAAU,IAAI,CAAC,cAAc;AAAA,IACzD,cAAc,OAAO,SAAS,UAAU,gBAAgB;AAAA,IACxD,SAAS,WAAW,YAAY,QAAQ;AAAA,EAC1C,EAAE;AAAA,EAEF,WAAW,YAAY,eAAe,MAAM,iBAAiB,GAAG;AAAA,IAC9D,IAAI,UAAU,WAAW;AAAA,MACvB,iBAAiB,sDAAsD;AAAA,IACzE;AAAA,IAEA,QAAQ,KAAK,OAAO,MAAM,SAAS,UAAU,cAAc,CAAC;AAAA,EAC9D;AAAA,EAEA,OAAO,EAAE,SAAS,MAAM,QAAQ,OAAO,QAAQ,IAAI,KAAO,OAAO,IAAI,EAAE;AAAA;AAGzE,SAAS,eAAe,CACtB,MACA,SACA,OACY;AAAA,EACZ,IAAI,UAAU,WAAW;AAAA,IACvB,iBAAiB,2BAA2B;AAAA,EAC9C;AAAA,EAEA,MAAM,QAAQ,YAAY,YAAY,MAAM,eAAe,GAAG,OAAO;AAAA,EACrE,MAAM,YAAY,QAAQ,OAAO,IAAI,KAAK;AAAA,EAC1C,IAAI,cAAc,WAAW;AAAA,IAC3B,OAAO,UAAU,yCAAyC;AAAA,EAC5D;AAAA,EAEA,MAAM,QAAQ,gBAAgB,MAAM,OAAO;AAAA,EAC3C,OAAO;AAAA,IACL,MAAM,IAAI;AAAA,IACV,QAAQ,CAAC,UAAU;AAAA,MAEjB,MAAM,OAAO,MAAM;AAAA,MACnB,IAAI,SAAS,WAAW;AAAA,QACtB,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC;AAAA,MACjC;AAAA,MAEA,MAAM,KAAK,UAAU,IAAI,IAAI;AAAA,MAC7B,IAAI,OAAO,WAAW;AAAA,QACpB,iBAAiB,UAAU,yBAAyB,OAAO;AAAA,MAC7D;AAAA,MAEA,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC;AAAA;AAAA,EAEvB;AAAA;AAOF,SAAS,mBAAmB,CAAC,MAAc,OAA6C;AAAA,EACtF,IAAI,CAAC,qBAAqB,IAAI,IAAI,GAAG;AAAA,IACnC,OAAO,mBAAmB,wBAAwB;AAAA,EACpD;AAAA,EAEA,MAAM,eACJ,UAAU,YACN,IAAI,MACJ,QAAQ,GAAG,MAAM,QAAQ,IAAI,CAAC,WAAW,OAAO,YAAY,CAAC;AAAA,EAEnE,OAAO,EAAE,MAAM,cAAc,QAAQ,MAAM,aAAa;AAAA;AAI1D,SAAS,iBAAiB,CAAC,MAAgC;AAAA,EACzD,WAAW,IAAI;AAAA,EACf,OAAO;AAAA,IACL,SAAS,CAAC,EAAE,cAAc,IAAI,KAAO,SAAS,WAAW,WAAW,MAAM,aAAa,GAAG,CAAC,EAAE,CAAC;AAAA,IAC9F,MAAM,IAAI;AAAA,EACZ;AAAA;AAIF,SAAS,qBAAqB,CAAC,MAAkB,SAAoC;AAAA,EACnF,MAAM,QAAQ,kBAAkB,MAAM,OAAO;AAAA,EAC7C,MAAM,QAAQ,UAAU,MAAM,YAAY,EAAE;AAAA,EAC5C,MAAM,SAAS,MAAM,KAAK,EAAE,QAAQ,MAAM,GAAG,MAAM,IAAI,GAAa;AAAA,EAEpE,WAAW,OAAO,UAAU,MAAM,aAAa,GAAG;AAAA,IAChD,MAAM,cAAc,OAAO,KAAK,cAAc;AAAA,IAC9C,IAAI,YAAY,WAAW,OAAO;AAAA,MAChC,iBAAiB,8CAA8C;AAAA,IACjE;AAAA,IAEA,YAAY,QAAQ,CAAC,YAAY,UAAU;AAAA,MACzC,OACE,OAAO,QAAQ,OAAO,eAAe,GACrC,uBAAuB,YAAY,MAAM,OAAO,CAClD;AAAA,KACD;AAAA,EACH;AAAA,EAEA,MAAM,aAAa,WAAW,MAAM,aAAa;AAAA,EACjD,OAAO;AAAA,IACL,SAAS,OAAO,IAAI,CAAC,cAAc,WAAW;AAAA,MAC5C;AAAA,MACA,SAAS,WAAW,YAAY,KAAK;AAAA,IACvC,EAAE;AAAA,IACF,MAAM,MAAM;AAAA,EACd;AAAA;AAGF,SAAS,kBAAkB,CAAC,MAAkB,SAAoC;AAAA,EAChF,MAAM,QAAQ,kBAAkB,MAAM,OAAO;AAAA,EAC7C,MAAM,aAAa,WAAW,MAAM,aAAa;AAAA,EAEjD,OAAO;AAAA,IACL,SAAS,UAAU,MAAM,aAAa,EAAE,IAAI,CAAC,YAAY,WAAW;AAAA,MAClE,cAAc,uBAAuB,YAAY,MAAM,OAAO;AAAA,MAC9D,SAAS,WAAW,YAAY,KAAK;AAAA,IACvC,EAAE;AAAA,IACF,MAAM,MAAM;AAAA,EACd;AAAA;AAIF,SAAS,cAAc,CAAC,MAAkB,SAAoC;AAAA,EAC5E,MAAM,QAAQ,kBAAkB,MAAM,OAAO;AAAA,EAC7C,MAAM,cAAc,WAAW,MAAM,cAAc;AAAA,EACnD,MAAM,OAAO,IAAI,IAAI,MAAM,IAAI;AAAA,EAE/B,MAAM,UAAU,gBAAgB,MAAM,aAAa,EAAE,IAAI,CAAC,YAAY,UAAU;AAAA,IAC9E,IAAI,YAAY,YAAY,kBAAkB,MAAM,gBAAgB;AAAA,MAClE,iBAAiB,mEAAmE;AAAA,IACtF;AAAA,IAGA,OAAO,MAAM,eAAe,UAAU,YAAY,YAAY,GAAG,MAAM,OAAO,CAAC;AAAA,IAC/E,OAAO,MAAM,eAAe,iBAAiB,UAAU,YAAY,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC;AAAA,IAE7F,OAAO;AAAA,MACL,cAAc,uBAAuB,YAAY,MAAM,OAAO;AAAA,MAC9D,SAAS,WAAW,aAAa,KAAK;AAAA,IACxC;AAAA,GACD;AAAA,EAED,OAAO,EAAE,SAAS,CAAC,GAAG,MAAM,SAAS,GAAG,OAAO,GAAG,KAAK;AAAA;AAGzD,SAAS,cAAc,CAAC,MAAkB,SAAoC;AAAA,EAC5E,MAAM,QAAQ,kBAAkB,MAAM,OAAO;AAAA,EAE7C,OAAO;AAAA,IACL,SAAS,eAAe,MAAM,SAAS,eAAe,MAAM,gBAAgB,CAAC;AAAA,IAC7E,MAAM,QAAQ,MAAM,MAAM,eAAe,UAAU,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC;AAAA,EACzF;AAAA;AAOF,SAAS,iBAAiB,CAAC,MAAkB,SAAoC;AAAA,EAC/E,MAAM,QAAQ,kBAAkB,MAAM,OAAO;AAAA,EAC7C,MAAM,SAAS,UAAU,MAAM,QAAQ,EAAE,IAAI,CAAC,eAC5C,uBAAuB,YAAY,MAAM,OAAO,CAClD;AAAA,EAEA,MAAM,aAAa,WAAW,MAAM,aAAa;AAAA,EACjD,MAAM,iBAAiB,WAAW,MAAM,iBAAiB;AAAA,EACzD,MAAM,iBAAiB,WAAW,MAAM,iBAAiB;AAAA,EAEzD,MAAM,eAAe,OAAO,IAAI,CAAC,cAAc,WAAW;AAAA,IACxD;AAAA,IACA,SAAS,WAAW,YAAY,KAAK;AAAA,EACvC,EAAE;AAAA,EAEF,MAAM,mBAAmB,UAAU,MAAM,aAAa,EAAE,IAAI,CAAC,YAAY,WAAW;AAAA,IAClF,cAAc,uBAAuB,YAAY,MAAM,OAAO;AAAA,IAC9D,SAAS,WAAW,gBAAgB,KAAK;AAAA,EAC3C,EAAE;AAAA,EAGF,MAAM,kBAAkB,UAAU,MAAM,oBAAoB,EAAE,IAAI,CAAC,cAAc,WAAW;AAAA,IAC1F,cAAc,QACZ,GAAG,YAAY,cAAc,qBAAqB,EAAE,IAAI,CAAC,UACvD,OAAO,QAAQ,OAAO,OAAO,CAC/B,CACF;AAAA,IACA,SAAS,WAAW,gBAAgB,KAAK;AAAA,EAC3C,EAAE;AAAA,EAEF,OAAO;AAAA,IACL,SAAS,CAAC,GAAG,cAAc,GAAG,kBAAkB,GAAG,eAAe;AAAA,IAClE,MAAM,QAAQ,MAAM,MAAM,GAAG,MAAM;AAAA,EACrC;AAAA;AAOF,SAAS,cAAc,CAAC,MAAkB,SAAoC;AAAA,EAC5E,MAAM,QAAQ,kBAAkB,MAAM,OAAO;AAAA,EAC7C,MAAM,cAAc,WAAW,MAAM,cAAc;AAAA,EACnD,MAAM,OAAO,IAAI,IAAI,MAAM,IAAI;AAAA,EAE/B,MAAM,WAAW,UAAU,MAAM,aAAa,EAAE,IAAI,CAAC,YAAY,UAAU;AAAA,IACzE,MAAM,eAAe,uBAAuB,YAAY,MAAM,OAAO;AAAA,IACrE,OAAO,MAAM,YAAY;AAAA,IACzB,OAAO,EAAE,cAAc,SAAS,WAAW,aAAa,KAAK,EAAE;AAAA,GAChE;AAAA,EAED,OAAO,EAAE,SAAS,CAAC,GAAG,MAAM,SAAS,GAAG,QAAQ,GAAG,KAAK;AAAA;AAI1D,SAAS,eAAe,CAAC,MAAkB,SAAoC;AAAA,EAC7E,MAAM,QAAQ,kBAAkB,MAAM,OAAO;AAAA,EAE7C,OAAO;AAAA,IACL,SAAS,eAAe,MAAM,SAAS,eAAe,MAAM,aAAa,CAAC;AAAA,IAC1E,MAAM,QACJ,MAAM,MACN,eAAe,iBAAiB,UAAU,MAAM,QAAQ,CAAC,GAAG,MAAM,OAAO,CAC3E;AAAA,EACF;AAAA;AAGF,SAAS,aAAa,CAAC,MAAkB,SAAoC;AAAA,EAC3E,MAAM,QAAQ,kBAAkB,MAAM,OAAO;AAAA,EAE7C,OAAO;AAAA,IACL,SAAS,MAAM;AAAA,IACf,MAAM,QACJ,MAAM,MACN,kBAAkB,YAAY,MAAM,WAAW,GAAG,MAAM,OAAO,GAC/D,kBAAkB,YAAY,MAAM,YAAY,GAAG,MAAM,OAAO,CAClE;AAAA,EACF;AAAA;AAGF,SAAS,iBAAiB,CAAC,OAAmB,OAA4C;AAAA,EACxF,MAAM,OAAO,YAAY,OAAO,MAAM;AAAA,EAEtC,QAAQ;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,MACH,OAAO,IAAI;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,MACH,OAAO,uBAAuB,MAAM,OAAO,YAAY,GAAG,KAAK;AAAA,IACjE;AAAA,MACE,OAAO,eAAe,wBAAwB;AAAA;AAAA;AAKpD,SAAS,gBAAgB,CAAC,MAAkB,SAAoC;AAAA,EAC9E,MAAM,QAAQ,kBAAkB,MAAM,OAAO;AAAA,EAE7C,OAAO;AAAA,IACL,SAAS,MAAM;AAAA,IACf,MAAM,QACJ,MAAM,MACN,eAAe,UAAU,MAAM,kBAAkB,GAAG,MAAM,OAAO,GACjE,eAAe,uBAAuB,MAAM,UAAU,GAAG,MAAM,OAAO,CACxE;AAAA,EACF;AAAA;AAIF,SAAS,oBAAoB,CAAC,MAAkB,SAAoC;AAAA,EAClF,OAAO,MAAM,SAAS,oBAAoB,MAAM,OAAO;AAAA,EACvD,OAAO,EAAE,SAAS,CAAC,GAAG,KAAK,SAAS,GAAG,MAAM,OAAO,GAAG,MAAM,QAAQ,KAAK,MAAM,MAAM,IAAI,EAAE;AAAA;AAG9F,SAAS,sBAAsB,CAAC,MAAkB,SAAoC;AAAA,EACpF,OAAO,MAAM,SAAS,oBAAoB,MAAM,OAAO;AAAA,EACvD,OAAO,qBAAqB,MAAM,MAAM,KAAK;AAAA;AAO/C,SAAS,iBAAiB,CAAC,MAAkB,SAAoC;AAAA,EAC/E,OAAO,OAAO,UAAU,YAAY,IAAI;AAAA,EACxC,MAAM,UAAU,aAAa,MAAM,eAAe;AAAA,EAClD,MAAM,QAAQ,SAAS,UAAU,SAAS,OAAO,OAAO;AAAA,EAExD,QAAQ,aAAa,KACnB,UAAU,MAAM,8BAA8B,EAAE,IAAI,CAAC,gBAAgB;AAAA,IACnE,cAAc,uBAAuB,YAAY,MAAM,OAAO;AAAA,EAChE,EAAE,CACJ;AAAA,EAEA,MAAM,QAAQ,SAAS,UAAU,QAAQ,QAAQ,OAAO;AAAA,EACxD,QAAQ,aAAa,IAAI;AAAA,EAEzB,OAAO,UACH,qBAAqB,MAAM,OAAO,KAAK,IACvC,qBAAqB,MAAM,OAAO,KAAK;AAAA;AAI7C,SAAS,oBAAoB,CAC3B,MACA,MACA,OACc;AAAA,EACd,MAAM,YAAY,IAAI;AAAA,EAEtB,WAAW,cAAc,gBAAgB,MAAM,YAAY,GAAG;AAAA,IAC5D,OAAO,WAAW,uBAAuB,MAAM,YAAY,MAAM,GAAG,KAAK,OAAO,CAAC;AAAA,IACjF,OAAO,WAAW,uBAAuB,MAAM,YAAY,OAAO,GAAG,MAAM,OAAO,CAAC;AAAA,EACrF;AAAA,EAEA,MAAM,YAAY,MAAM,MAAM,WAAW;AAAA,EACzC,IAAI,cAAc,MAAM;AAAA,IACtB,OAAO,WAAW,uBAAuB,WAAW,CAAC,GAAG,KAAK,SAAS,GAAG,MAAM,OAAO,CAAC,CAAC;AAAA,EAC1F;AAAA,EAEA,OAAO,WAAW,MAAM,MAAM,OAAO,SAAS;AAAA;AAIhD,SAAS,eAAe,CAAC,MAAkB,SAAoC;AAAA,EAC7E,OAAO,MAAM,SAAS,oBAAoB,MAAM,OAAO;AAAA,EACvD,MAAM,YAAY,uBAAuB,MAAM,MAAM,WAAW,GAAG;AAAA,IACjE,GAAG,KAAK;AAAA,IACR,GAAG,MAAM;AAAA,EACX,CAAC;AAAA,EAED,OAAO,WAAW,MAAM,MAAM,OAAO,SAAS;AAAA;AAIhD,SAAS,UAAU,CACjB,MACA,MACA,OACA,WACc;AAAA,EACd,MAAM,OAAO,QAAQ,KAAK,MAAM,MAAM,MAAM,SAAS;AAAA,EACrD,MAAM,cAAc,eAAe,KAAK,SAAS,eAAe,MAAM,qBAAqB,CAAC;AAAA,EAC5F,MAAM,eAAe,eAAe,MAAM,SAAS,eAAe,MAAM,sBAAsB,CAAC;AAAA,EAC/F,MAAM,WAAW,YAAY,MAAM,WAAW;AAAA,EAE9C,QAAQ;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,MACH,OAAO,EAAE,SAAS,CAAC,GAAG,aAAa,GAAG,YAAY,GAAG,KAAK;AAAA,IAC5D,KAAK;AAAA,IACL,KAAK;AAAA,MACH,OAAO,EAAE,SAAS,aAAa,KAAK;AAAA,IACtC,KAAK;AAAA,IACL,KAAK;AAAA,MACH,OAAO,EAAE,SAAS,cAAc,KAAK;AAAA,IACvC,KAAK,QAAQ;AAAA,MAGX,MAAM,OAAO;AAAA,QACX,cAAc;AAAA,QACd,SAAS,WAAW,WAAW,MAAM,YAAY,GAAG,CAAC;AAAA,MACvD;AAAA,MACA,OAAO,EAAE,SAAS,CAAC,GAAG,aAAa,IAAI,GAAG,KAAK;AAAA,IACjD;AAAA,IACA;AAAA,MACE,OAAO,cAAc,4BAA4B;AAAA;AAAA;AAIvD,SAAS,gBAAgB,CAAC,MAAkB,SAAoC;AAAA,EAC9E,WAAW,IAAI;AAAA,EACf,MAAM,eAAe,QAAQ,aAAa,GAAG,EAAE;AAAA,EAC/C,IAAI,iBAAiB,WAAW;AAAA,IAC9B,iBAAiB,uCAAuC;AAAA,EAC1D;AAAA,EAEA,IAAI,UAAU,MAAM,aAAa,EAAE,WAAW,aAAa,QAAQ;AAAA,IACjE,iBAAiB,2CAA2C;AAAA,EAC9D;AAAA,EAEA,OAAO,EAAE,SAAS,OAAO,cAAc,WAAW,MAAM,aAAa,CAAC,GAAG,MAAM,IAAI,IAAM;AAAA;AAI3F,SAAS,oBAAoB,CAAC,MAAkB,SAAoC;AAAA,EAClF,MAAM,SAAS,gBAAgB,MAAM,UAAU,EAAE,IAAI,CAAC,UAAU,SAAS,OAAO,OAAO,CAAC;AAAA,EACxF,MAAM,QAAQ,WAAW,MAAM,cAAc;AAAA,EAC7C,IAAI,OAAO,SAAS,KAAK,OAAO,KAAK,CAAC,UAAU,MAAM,QAAQ,WAAW,KAAK,GAAG;AAAA,IAC/E,iBAAiB,mCAAmC;AAAA,EACtD;AAAA,EAEA,MAAM,aAAa,WAAW,MAAM,aAAa;AAAA,EACjD,MAAM,OAAO,QAAQ,GAAG,OAAO,IAAI,CAAC,UAAU,MAAM,IAAI,CAAC;AAAA,EAEzD,IAAI,YAAY,MAAM,MAAM,MAAM,iBAAiB;AAAA,IACjD,MAAM,UAAU,MAAM,KAAK,EAAE,QAAQ,MAAM,GAAG,CAAC,GAAG,WAAW;AAAA,MAC3D,cAAc,QACZ,GAAG,OAAO,IAAI,CAAC,UAAU,OAAO,MAAM,SAAS,OAAO,QAAQ,EAAE,YAAY,CAC9E;AAAA,MACA,SAAS,WAAW,YAAY,KAAK;AAAA,IACvC,EAAE;AAAA,IAGF,IAAI,CAAC,aAAa,MAAM,WAAW,GAAG;AAAA,MACpC,OAAO,MAAM,QAAQ,GAAG,QAAQ,IAAI,CAAC,WAAW,OAAO,YAAY,CAAC,CAAC;AAAA,IACvE;AAAA,IAEA,OAAO,EAAE,SAAS,KAAK;AAAA,EACzB;AAAA,EAIA,WAAW,SAAS,QAAQ;AAAA,IAC1B,OAAO,MAAM,QAAQ,GAAG,MAAM,QAAQ,IAAI,CAAC,WAAW,OAAO,YAAY,CAAC,CAAC;AAAA,EAC7E;AAAA,EAEA,OAAO,EAAE,SAAS,OAAO,OAAO,QAAQ,GAAG,OAAO,EAAE,SAAS,UAAU,GAAG,KAAK;AAAA;AAQjF,SAAS,uBAAuB,CAAC,MAAkB,SAAoC;AAAA,EACrF,OAAO,YAAY,SAAS,YAAY,IAAI;AAAA,EAC5C,QAAQ,KAAK,IAAI,WAAW,MAAM,aAAa,GAAG,SAAS,YAAY,OAAO,CAAC;AAAA,EAC/E,OAAO,SAAS,OAAO,OAAO;AAAA;AAOhC,SAAS,oBAAoB,CAAC,MAAkB,SAAoC;AAAA,EAClF,OAAO,YAAY,YAAY,YAAY,IAAI;AAAA,EAC/C,MAAM,aAAa,WAAW,MAAM,aAAa;AAAA,EACjD,MAAM,WAAW,aAAa,MAAM,WAAW;AAAA,EAC/C,MAAM,aAAa,UAAU,MAAM,aAAa;AAAA,EAChD,IAAI,UAAU,SAAS,YAAY,OAAO;AAAA,EAE1C,SAAS,QAAQ,EAAG,QAAQ,0BAA0B,SAAS,GAAG;AAAA,IAChE,QAAQ,KAAK,IAAI,YAAY,OAAO;AAAA,IACpC,MAAM,OAAO,SAAS,UAAU,OAAO;AAAA,IACvC,IAAI,KAAK,QAAQ,WAAW,QAAQ,QAAQ,QAAQ;AAAA,MAClD,iBAAiB,8CAA8C;AAAA,IACjE;AAAA,IAEA,MAAM,UAAU,QAAQ,QAAQ,IAAI,CAAC,QAAQ,WAAW;AAAA,MACtD,cAAc,QACZ,OAAO,cACP,OAAO,KAAK,SAAS,OAAO,QAAQ,EAAE,YACxC;AAAA,MACA,SAAS,WAAW,YAAY,KAAK;AAAA,IACvC,EAAE;AAAA,IAEF,MAAM,OAAO,QAAQ,QAAQ,MAAM,KAAK,MAAM,eAAe,YAAY,OAAO,CAAC;AAAA,IAGjF,IAAI,CAAC,UAAU;AAAA,MACb,OAAO,MAAM,QAAQ,GAAG,QAAQ,IAAI,CAAC,WAAW,OAAO,YAAY,CAAC,CAAC;AAAA,IACvE;AAAA,IAEA,MAAM,OAAO,EAAE,SAAS,KAAK;AAAA,IAC7B,IAAI,aAAa,SAAS,IAAI,GAAG;AAAA,MAC/B,OAAO;AAAA,IACT;AAAA,IAEA,UAAU;AAAA,EACZ;AAAA,EAEA,OAAO,wCAAwC;AAAA;AAGjD,SAAS,cAAc,CAAC,MAAkB,SAAoC;AAAA,EAC5E,WAAW,IAAI;AAAA,EACf,MAAM,aAAa,QAAQ,KAAK,IAAI,WAAW,MAAM,WAAW,CAAC;AAAA,EACjE,IAAI,eAAe,WAAW;AAAA,IAC5B,iBAAiB,kCAAkC;AAAA,EACrD;AAAA,EAEA,IAAI,UAAU,MAAM,aAAa,EAAE,WAAW,WAAW,QAAQ,QAAQ;AAAA,IACvE,iBAAiB,kCAAkC;AAAA,EACrD;AAAA,EAEA,OAAO;AAAA,IACL,SAAS,OAAO,WAAW,SAAS,WAAW,MAAM,aAAa,CAAC;AAAA,IACnE,MAAM,WAAW;AAAA,EACnB;AAAA;AAGF,SAAS,WAAW,CAAC,MAAqD;AAAA,EACxE,MAAM,WAAW,gBAAgB,MAAM,UAAU;AAAA,EACjD,OAAO,OAAO,UAAU;AAAA,EACxB,IAAI,SAAS,WAAW,KAAK,UAAU,aAAa,WAAW,WAAW;AAAA,IACxE,iBAAiB,IAAI,YAAY,MAAM,MAAM,2BAA2B;AAAA,EAC1E;AAAA,EAEA,OAAO,CAAC,OAAO,MAAM;AAAA;AAGvB,SAAS,mBAAmB,CAC1B,MACA,SACuC;AAAA,EACvC,OAAO,MAAM,SAAS,YAAY,IAAI;AAAA,EACtC,OAAO,CAAC,SAAS,MAAM,OAAO,GAAG,SAAS,OAAO,OAAO,CAAC;AAAA;AAG3D,SAAS,iBAAiB,CAAC,MAAkB,SAAoC;AAAA,EAC/E,MAAM,WAAW,gBAAgB,MAAM,UAAU;AAAA,EACjD,OAAO,SAAS;AAAA,EAChB,IAAI,SAAS,WAAW,KAAK,UAAU,WAAW;AAAA,IAChD,iBAAiB,IAAI,YAAY,MAAM,MAAM,0BAA0B;AAAA,EACzE;AAAA,EAEA,OAAO,SAAS,OAAO,OAAO;AAAA;AAGhC,SAAS,UAAU,CAAC,MAAwB;AAAA,EAC1C,IAAI,gBAAgB,MAAM,UAAU,EAAE,SAAS,GAAG;AAAA,IAChD,iBAAiB,IAAI,YAAY,MAAM,MAAM,yBAAyB;AAAA,EACxE;AAAA;AAIF,SAAS,cAAc,CACrB,SACA,eACuB;AAAA,EACvB,OAAO,cAAc,WAAW,IAC5B,UACA,cAAc,IAAI,CAAC,UAAU,OAAO,SAAS,OAAO,kBAAkB,CAAC;AAAA;AAI7E,SAAS,MAAM,CAAC,SAAgC,YAA2C;AAAA,EACzF,OAAO,QAAQ,IAAI,CAAC,QAAQ,WAAW;AAAA,IACrC,cAAc,OAAO;AAAA,IACrB,SAAS,WAAW,YAAY,KAAK;AAAA,EACvC,EAAE;AAAA;AAGJ,SAAS,cAAc,CACrB,aACA,OACc;AAAA,EACd,OAAO,QAAQ,GAAG,YAAY,IAAI,CAAC,eAAe,uBAAuB,YAAY,KAAK,CAAC,CAAC;AAAA;AAG9F,SAAS,YAAY,CAAC,MAAoB,OAA8B;AAAA,EACtE,OACE,iBAAiB,KAAK,MAAM,MAAM,IAAI,KACtC,KAAK,QAAQ,MAAM,CAAC,QAAQ,UAC1B,iBAAiB,OAAO,cAAc,OAAO,MAAM,SAAS,OAAO,QAAQ,EAAE,YAAY,CAC3F;AAAA;AAIJ,SAAS,SAAS,CAAC,KAAsC;AAAA,EACvD,OAAO,CAAC,GAAG,GAAG,EAAE,KAAK,CAAC,MAAM,UAAU,OAAO,KAAK;AAAA;;;AC3sB7C,SAAS,kBAAkB,CAAC,YAAsC;AAAA,EACvE,OAAO,aAAa;AAAA,EACpB,IAAI,WAAW,WAAW,KAAK,cAAc,WAAW;AAAA,IACtD,OAAO,oDAAoD;AAAA,EAC7D;AAAA,EAEA,MAAM,WAAW,CAAC,SAAS;AAAA,IACzB,IAAI,KAAK,SAAS,SAAS;AAAA,MACzB,MAAM,UAAU,UAAU,MAAM,eAAe,EAAE,SAAS;AAAA,MAC1D,OAAO,GAAG,UAAU,YAAY,0BAA0B;AAAA,IAC5D;AAAA,IAEA,MAAM,SAAS,mBAAmB,IAAI;AAAA,IACtC,IAAI;AAAA,MAAQ,OAAO,MAAM;AAAA,GAC1B;AAAA;AAeI,SAAS,gBAAgB,CAC9B,YACA,cACA,kBACS;AAAA,EACT,OAAO,aAAa;AAAA,EACpB,IAAI,WAAW,WAAW,KAAK,cAAc;AAAA,IAAW,OAAO;AAAA,EAE/D,IAAI,OAAO;AAAA,EACX,MAAM,WAAW,CAAC,MAAM,SAAS;AAAA,IAC/B,IAAI,mBAAmB,IAAI;AAAA,MAAG,OAAO;AAAA,IACrC,KAAK,IAAI,KAAK,SAAS,gBAAgB,CAAC,iBAAiB,MAAM,cAAc,IAAI;AAAA,MAAG,OAAO;AAAA,IAC3F,KAAK,IAAI,qBAAqB,MAAM,gBAAgB;AAAA,MAAG,OAAO;AAAA,GAC/D;AAAA,EAED,OAAO;AAAA;AAIT,SAAS,kBAAkB,CAAC,MAAsC;AAAA,EAChE,IAAI,KAAK,SAAS,YAAY;AAAA,IAC5B,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,KAAK,SAAS,kBAAkB;AAAA,IAClC,MAAM,OAAO,YAAY,YAAY,MAAM,UAAU,GAAG,eAAe;AAAA,IACvE,IAAI,CAAC,qBAAqB,IAAI,IAAI;AAAA,MAAG,OAAO,mBAAmB;AAAA,EACjE;AAAA,EAEA,IAAI,KAAK,UAAU,aAAa;AAAA,IAC9B,OAAO;AAAA,EACT;AAAA,EAEA;AAAA;AAGF,SAAS,gBAAgB,CACvB,OACA,cACA,MACS;AAAA,EACT,IAAI,UAAU,OAAO,aAAa,KAAK,UAAU,OAAO,cAAc;AAAA,IAAG,OAAO;AAAA,EAEhF,MAAM,OAAO,YAAY,OAAO,YAAY;AAAA,EAC5C,OAAO,aAAa,IAAI,IAAI,KAAK,KAAK,IAAI,KAAK,YAAY,CAAC;AAAA;AAO9D,SAAS,oBAAoB,CAAC,MAAkB,kBAAgD;AAAA,EAC9F,IAAI,KAAK,UAAU,cAAc,KAAK,UAAU;AAAA,IAAU,OAAO;AAAA,EACjE,IAAI,UAAU,MAAM,SAAS,KAAM,UAAU,MAAM,QAAQ,KAAK,KAAK,WAAW,QAAS;AAAA,IACvF,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,KAAK;AAAA,EAClB,OAAO,OAAO,SAAS,YAAY,CAAC,iBAAiB,IAAI,KAAK,YAAY,CAAC;AAAA;AAG7E,SAAS,SAAS,CAAC,MAAkB,KAAsB;AAAA,EACzD,MAAM,QAAQ,KAAK;AAAA,EACnB,OAAO,OAAO,UAAU,YAAY,UAAU;AAAA;AAWhD,SAAS,KAAK,CACZ,OACA,OACA,OAA4B,IAAI,KAC1B;AAAA,EACN,IAAI,MAAM,QAAQ,KAAK,GAAG;AAAA,IACxB,WAAW,QAAQ;AAAA,MAAO,MAAM,MAAM,OAAO,IAAI;AAAA,IACjD;AAAA,EACF;AAAA,EAEA,IAAI,CAAC,aAAa,KAAK;AAAA,IAAG;AAAA,EAE1B,MAAM,UAAU,WAAW,KAAK;AAAA,EAChC,MAAM,UAAU,IAAI,IAAI,IAAI;AAAA,EAC5B,aAAa,MAAM,WAAW,SAAS;AAAA,IACrC,MAAM,OAAO,OAAO,IAAI,IAAI,OAAO,CAAC;AAAA,IACpC,QAAQ,IAAI,IAAI;AAAA,EAClB;AAAA,EAEA,MAAM,OAAO,OAAO;AAAA,EAEpB,MAAM,YACJ,MAAM,SAAS,wBAAwB,OAAO,MAAM,aAAa,WAC7D,IAAI,IAAI,CAAC,GAAG,SAAS,MAAM,SAAS,YAAY,CAAC,CAAC,IAClD;AAAA,EAEN,YAAY,KAAK,UAAU,OAAO,QAAQ,KAAK,GAAG;AAAA,IAChD,IAAI,QAAQ,aAAa,QAAQ,SAAS;AAAA,MAAG;AAAA,IAC7C,MAAM,OAAO,OAAO,QAAQ,WAAW,YAAY,YAAY,OAAO;AAAA,EACxE;AAAA;AAOF,SAAS,UAAU,CACjB,MAC+D;AAAA,EAC/D,MAAM,MAAM,KAAK;AAAA,EACjB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,MAAM,QAAQ,IAAI,GAAG;AAAA,IAAG,OAAO,CAAC;AAAA,EAE3D,MAAM,UAA8C,CAAC;AAAA,EACrD,WAAW,SAAS,IAAI,KAAK;AAAA,IAC3B,IAAI,CAAC,aAAa,KAAK,KAAK,OAAO,MAAM,QAAQ,YAAY,CAAC,aAAa,MAAM,KAAK,GAAG;AAAA,MACvF,OAAO,CAAC;AAAA,IACV;AAAA,IACA,QAAQ,KAAK,EAAE,MAAM,MAAM,IAAI,YAAY,GAAG,OAAO,MAAM,MAAM,MAAM,CAAC;AAAA,EAC1E;AAAA,EACA,OAAO;AAAA;;;AR5GT,IAAM,2BAA2B;AAAA,EAC/B,wBAAwB;AAAA,EACxB,8BAA8B;AAAA,EAC9B,2BAA2B;AAC7B;AAYO,eAAe,0BAA0B,CAC9C,OAC6B;AAAA,EAC7B,MAAM,SAAS,eAAe,MAAM,OAAO;AAAA,EAC3C,MAAM,MAAM,MAAM,SAAS,OACzB,IAAI,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,YAAY,MAAM,WAAW,CAAC,CAAC,CACtE;AAAA,EAEA,IAAI;AAAA,IACF,OAAO,MAAM,uBAAuB,QAAQ,OAAO,eAAe;AAAA,MAChE,MAAM,aAAa,MAAM,UACvB,YACA,sBAAsB,eAAe,GAAG,+CACxC,cACA,sCACF;AAAA,MAEA,IAAI;AAAA,QACF,OAAO,EAAE,WAAW,SAAU,MAAM,WAAW,YAAY,KAAK,YAAY,MAAM,EAAG;AAAA,QACrF,OAAO,OAAO;AAAA,QACd,MAAM,eAAe,IAAI,IAAI,OAAO,IAAI,CAAC,UAAU,MAAM,SAAS,CAAC;AAAA,QACnE,MAAM,YAAY,MAAM,iBAAiB,UAAU,EAAE,MAAM,MAAG;AAAA,UAAG;AAAA,SAAS;AAAA,QAC1E,OAAO,YACL,OACA,cAAc,aAAa,iBAAiB,YAAY,cAAc,SAAS,CACjF;AAAA;AAAA,KAEH;AAAA,IACD,OAAO,OAAO;AAAA,IACd,OAAO,YAAY,OAAO,KAAK;AAAA;AAAA;AAKnC,IAAI;AAEJ,SAAS,gBAAgB,CAAC,YAA4D;AAAA,EACpF,IAAI;AAAA,IAAU,OAAO;AAAA,EAErB,MAAM,OAAO,WACV,cAAc,8DAA8D,EAC5E,KAAK,CAAC,WAAW,IAAI,IAAI,OAAO,QAAQ,EAAE,IAAI,EAAE,UAAU,OAAO,IAAI,CAAC,CAAC,CAAC;AAAA,EAG3E,WAAW;AAAA,EACX,KAAK,MAAM,MAAM;AAAA,IACf,IAAI,aAAa;AAAA,MAAM,WAAW;AAAA,GACnC;AAAA,EACD,OAAO;AAAA;AAGT,SAAS,WAAW,CAAC,OAAgB,kBAA+C;AAAA,EAClF,OAAO;AAAA,IACL,WAAW;AAAA,IACX,QAAQ,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IAC7D;AAAA,EACF;AAAA;AAGF,SAAS,cAAc,CACrB,SAC0B;AAAA,EAC1B,MAAM,QAAQ,YAAW,EAAE,WAAW,KAAK,EAAE;AAAA,EAE7C,OAAO,OAAO,QAAQ,OAAO,EAAE,IAAI,EAAE,YAAY,SAAS,UAAU;AAAA,IAClE,MAAM,YAAY,gBAAgB,SAAS;AAAA,IAC3C,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,SAAS,kBAAkB,YAAY,OAAO,SAAS,OAAO,OAAO;AAAA,MACrE,aAAa,qBAAqB,gBAAgB,SAAS,GAAG,OAAO,OAAO;AAAA,IAC9E;AAAA,GACD;AAAA;AAGH,eAAe,sBAAyB,CACtC,QACA,KACY;AAAA,EACZ,MAAM,WAAW,MAAM,gBAAe,OAAO,YAAY,wBAAwB;AAAA,EACjF,IAAI;AAAA,IACF,MAAM,aAAa,MAAM,SAAS,QAAQ;AAAA,IAC1C,IAAI;AAAA,MACF,WAAW,SAAS,QAAQ;AAAA,QAC1B,MAAM,aAAa,MAAM,QAAQ,IAAI,CAAC,WAAW,yBAAyB,MAAM,CAAC;AAAA,QACjF,MAAM,WAAW,IACf,gBAAgB,gBAAgB,MAAM,SAAS,MAAM,WAAW,KAAK,IAAI,IAC3E;AAAA,MACF;AAAA,MAGA,MAAM,WAAW,IAAI,+BAA+B;AAAA,MACpD,OAAO,MAAM,IAAI,UAAU;AAAA,MAC3B,QAAQ;AAAA,MACR,WAAW,UAAU;AAAA;AAAA,IAEvB,QAAQ;AAAA,IACR,SAAS,UAAU;AAAA;AAAA;AAIvB,eAAe,UAAU,CACvB,YACA,KACA,YACA,QACsB;AAAA,EACtB,mBAAmB,UAAU;AAAA,EAE7B,MAAM,QAAQ,MAAM,UAClB,YACA,uBAAuB,eAAe,GAAG,kEACzC,SACA,qCACF;AAAA,EACA,IAAI,MAAM,WAAW,GAAG;AAAA,IACtB,iBAAiB,0BAA0B,MAAM,QAAQ;AAAA,EAC3D;AAAA,EAEA,MAAM,gBAAgB,oBAAoB,MAAM;AAAA,EAChD,MAAM,UAAU,YAAY,MAAM,IAAI,cAAc,GAAG;AAAA,EACvD,MAAM,QAAQ,MAAM,kBAAkB,YAAY,GAAG;AAAA,EACrD,IAAI,QAAQ,QAAQ,WAAW,MAAM,QAAQ;AAAA,IAC3C,iBAAiB,gBAAgB,QAAQ,QAAQ,8BAA8B,MAAM,QAAQ;AAAA,EAC/F;AAAA,EAEA,MAAM,OAAO,CAAC,QACZ,IAAI,IAAI,CAAC,OAAO,cAAc,KAAK,GAAG;AAAA,EAExC,OAAO;AAAA,IACL,SAAS;AAAA,MACP,MAAM,KAAK,QAAQ,IAAI;AAAA,MACvB,SAAS,OAAO,YAAY,MAAM,IAAI,CAAC,MAAM,UAAU,CAAC,MAAM,KAAK,QAAQ,QAAQ,MAAM,CAAC,CAAC,CAAC;AAAA,IAC9F;AAAA,IACA,eAAe;AAAA,EACjB;AAAA;AAIF,SAAS,mBAAmB,CAAC,QAG3B;AAAA,EACA,MAAM,OAAgC,CAAC;AAAA,EACvC,MAAM,MAAM,IAAI,IACd,OAAO,IAAI,CAAC,UAAU;AAAA,IACpB,MAAM,YAAY,MAAM,QAAQ,IAAI,CAAC,WAAW;AAAA,MAC9C,KAAK,KAAK,EAAE,QAAQ,MAAM,YAAY,QAAQ,OAAO,KAAK,CAAC;AAAA,MAC3D,OAAO,CAAC,OAAO,MAAM,KAAK,SAAS,CAAC;AAAA,KACrC;AAAA,IACD,OAAO,CAAC,MAAM,WAAW,IAAI,IAAI,SAAS,CAAC;AAAA,GAC5C,CACH;AAAA,EAEA,OAAO,EAAE,KAAK,KAAK;AAAA;AAOrB,eAAe,iBAAiB,CAC9B,YACA,KAC4B;AAAA,EAC5B,MAAM,WAAW,MAAM,WAAW,QAAQ,kBAAkB,6BAA6B;AAAA,EACzF,IAAI;AAAA,IACF,OAAO,MAAM,KAAK,EAAE,QAAQ,SAAS,YAAY,GAAG,CAAC,GAAG,UAAU,SAAS,WAAW,KAAK,CAAC;AAAA,IAC5F,QAAQ;AAAA,IACR,SAAS,YAAY;AAAA;AAAA;AAIzB,eAAe,SAAS,CACtB,YACA,eACA,SACA,SAC6B;AAAA,EAC7B,MAAM,SAAS,MAAM,WAAW,cAAc,UAAU,eAAe;AAAA,EACvE,MAAM,OAAO,OAAO,QAAQ,EAAE,KAAK;AAAA,EACnC,IAAI,OAAO,SAAS,UAAU;AAAA,IAC5B,iBAAiB,iCAAiC;AAAA,EACpD;AAAA,EAEA,OAAO,sBAAsB,MAAM,SAAS,OAAO;AAAA;;;AFhNrD,IAAM,wBAAwB;AAC9B,IAAM,oBAAoB;AAAA;AAoCnB,MAAM,oBAAyD;AAAA,EASjD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAZV,UAAU;AAAA,EACV,eAAe;AAAA,IACtB,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,kBAAkB;AAAA,EACpB;AAAA,EAEA,WAAW,CACQ,SACA,aACA,UACA,WACA,QACjB;AAAA,IALiB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,SAGZ,OAAO,CAAC,OAAsE;AAAA,IACnF,KAAK,YAAY,WAAW;AAAA,IAE5B,MAAM,WAAW,mCAAmC,OAAO,KAAK,MAAM,OAAO,GAAG,MAAM,GAAG;AAAA,IAEzF,MAAM,OAAO,MAAM,KAAK,YAAY,oBAAoB,OAAO,YAAY;AAAA,MACzE,MAAM,UAAU,MAAM,KAAK,eAAe,SAAS,MAAM,OAAO;AAAA,MAChE,MAAM,MAAM,SAAS,OAAO,8BAA8B,KAAK,SAAS,QAAQ,SAAS,CAAC;AAAA,MAC1F,OAAO,QAAQ,MAAM,gBAAgB,KAAK,aAAa,MAAM,KAAK,CAAC,CAAC;AAAA,KACrE;AAAA,IAED,WAAW,OAAO,MAAM;AAAA,MACtB,MAAM,oBAAoB,GAAG;AAAA,IAC/B;AAAA;AAAA,QAGI,OAAO,CAAC,OAA8E;AAAA,IAC1F,KAAK,YAAY,WAAW;AAAA,IAC5B,uBAAuB,MAAM,MAAM,eAAe;AAAA,IAElD,MAAM,WAAW,mCAAmC,OAAO,KAAK,MAAM,OAAO,GAAG,MAAM,GAAG;AAAA,IAEzF,OAAO,KAAK,OAAO,kBAAkB,OAAO,YAAY;AAAA,MACtD,MAAM,SAAS,MAAM,KAAK,qBAAqB,SAAS,MAAM,MAAM;AAAA,MACpE,MAAM,UAAU,MAAM,KAAK,eAAe,SAAS,MAAM,OAAO;AAAA,MAChE,MAAM,MAAM,SAAS,OAAO,8BAA8B,KAAK,SAAS,QAAQ,SAAS,CAAC;AAAA,MAE1F,MAAM,iBAAiB,MAAM,KAAK,mBAAmB,SAAS,OAAO,EAAE,MACrE,CAAC,UAAmB,YAAY,QAAQ,KAAK,CAC/C;AAAA,MAGA,OAAO,cAAc,eAAe,MAAM,QAAQ,IAAI;AAAA,QACpD,KAAK,gCAAgC,SAAS,QAAQ,GAAG;AAAA,QACzD,mBAAmB,YACf,YACA,uBACE,UACA,cAAc,SAAS,cAAc,GACrC,QAAQ,WACR,MACF;AAAA,MACN,CAAC;AAAA,MAED,OAAO,KAAK,OAAO,uCAAuC,SAAS;AAAA,QACjE,SAAS;AAAA,QACT,MAAM,MAAM;AAAA,QACZ,yBAAyB,MAAM;AAAA,QAC/B,eAAe,MAAM,iBAAiB,qCAAqC,OAAO;AAAA,QAClF,UAAU,MAAM;AAAA,QAChB,QAAQ,QAAQ;AAAA,QAChB,SACE,gBAAgB,aAAa,mBAAmB,YAC5C,kBAAkB,QAAQ,MAAM,QAAQ,IACxC,mBAAmB,aAAa,CAAC,GAAG,eAAe,OAAO,CAAC,CAAC;AAAA,QAClE,cAAc,CAAC,SAAS,YACtB,KAAK,kBAAkB;AAAA,UACrB;AAAA,UACA;AAAA,UACA,MAAM,MAAM;AAAA,UACZ;AAAA,UACA;AAAA,UACA,kBAAkB,QAAQ;AAAA,QAC5B,CAAC;AAAA,MACL,CAAC;AAAA,KACF;AAAA;AAAA,QAQG,OAAO,CAAC,OAA0E;AAAA,IACtF,WAAW,UAAU,OAAO,OAAO,MAAM,OAAO,GAAG;AAAA,MACjD,KAAK,SAAS,aAAa,OAAO,OAAO;AAAA,IAC3C;AAAA,IAEA,MAAM,WAAW,MAAM,2BAA2B;AAAA,MAChD,SAAS,MAAM;AAAA,MACf,UAAU,mCAAmC,OAAO,KAAK,MAAM,OAAO,GAAG,MAAM,GAAG;AAAA,IACpF,CAAC;AAAA,IACD,OAAO,SAAS,YACZ,EAAE,WAAW,MAAM,SAAS,SAAS,QAAQ,IAC7C,EAAE,WAAW,OAAO,QAAQ,SAAS,OAAO;AAAA;AAAA,QAGpC,cAAc,CAC1B,SACA,SAC8C;AAAA,IAC9C,MAAM,YAAgE,OAAO,OAAO,IAAI;AAAA,IACxF,MAAM,SAAsD,OAAO,OAAO,IAAI;AAAA,IAC9E,MAAM,SAA8B,CAAC;AAAA,IAErC,YAAY,YAAY,WAAW,OAAO,QAAQ,OAAO,GAAG;AAAA,MAC1D,MAAM,aAAa,MAAM,KAAK,qBAAqB,SAAS,OAAO,OAAO;AAAA,MAG1E,kBAAkB,YAAY,YAAY,OAAO,OAAO;AAAA,MAExD,MAAM,aAAa,MAAM,KAAK,qBAAqB,SAAS,YAAY,OAAO,SAAS;AAAA,MAExF,UAAU,cAAc;AAAA,QACtB,WAAW,WAAW;AAAA,QACtB,WAAW,WAAW;AAAA,WAClB,OAAO,YAAY,YAAY,CAAC,IAAI,EAAE,SAAS,OAAO,QAAQ;AAAA,MACpE;AAAA,MACA,OAAO,cAAc,EAAE,YAAY,SAAS,WAAW;AAAA,MACvD,OAAO,KAAK;AAAA,QACV,WAAW,WAAW;AAAA,QACtB,WAAW,WAAW;AAAA,MACxB,CAAC;AAAA,IACH;AAAA,IAEA,OAAO;AAAA,MACL,WAAW,OAAO,OAAO,SAAS;AAAA,MAClC,QAAQ,OAAO,OAAO,MAAM;AAAA,MAC5B,QAAQ,OAAO,OAAO,MAAM;AAAA,IAC9B;AAAA;AAAA,QAGY,oBAAoB,CAChC,SACA,SAC4B;AAAA,IAC5B,MAAM,aAAa,MAAM,KAAK,SAAS,oBAAoB,SAAS,QAAQ,EAAE;AAAA,IAC9E,IAAI,CAAC,YAAY;AAAA,MACf,MAAM,IAAI,mBACR,wDAAwD,QAAQ,MAClE;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,QAGK,oBAAoB,CAChC,SACA,SAC4B;AAAA,IAC5B,MAAM,aAAa,MAAM,KAAK,SAAS,oBAAoB,SAAS,QAAQ,EAAE;AAAA,IAC9E,IAAI,CAAC,YAAY;AAAA,MACf,MAAM,IAAI,mBACR,wDAAwD,QAAQ,MAClE;AAAA,IACF;AAAA,IAEA,KAAK,SAAS,aAAa,UAAU;AAAA,IACrC,OAAO;AAAA;AAAA,QAIK,kBAAkB,CAC9B,SACA,SAC8C;AAAA,IAC9C,MAAM,QAAQ,OAAO,KAAK,QAAQ,MAAM;AAAA,IACxC,MAAM,WAAW,MAAM,KAAK,UAAU,mBACpC,SACA,MAAM,IAAI,CAAC,eAAe,QAAQ,OAAO,YAAY,OAAO,CAC9D;AAAA,IAEA,OAAO,IAAI,IAAI,MAAM,IAAI,CAAC,YAAY,UAAU,CAAC,YAAY,SAAS,MAAM,CAAC,CAAC;AAAA;AAAA,QAGlE,oBAAoB,CAChC,SACA,SACA,WACkC;AAAA,IAClC,IAAI,cAAc,WAAW;AAAA,MAC3B,MAAM,aAAa,eAAe,SAAS;AAAA,MAC3C,MAAM,aAAa,MAAM,KAAK,UAAU,yBAAyB,SAAS,SAAS,UAAU;AAAA,MAC7F,IAAI,YAAY;AAAA,QACd,OAAO;AAAA,MACT;AAAA,MAEA,8BAA8B,QAAQ,EAAE;AAAA,IAC1C;AAAA,IAEA,MAAM,mBAAmB,MAAM,KAAK,UAAU,iCAAiC,SAAS,OAAO;AAAA,IAC/F,IAAI,kBAAkB;AAAA,MACpB,OAAO;AAAA,IACT;AAAA,IAEA,8BAA8B,QAAQ,EAAE;AAAA;AAAA,QAG5B,+BAA+B,CAC3C,SACA,QACA,KAC6C;AAAA,IAC7C,MAAM,OAAO,MAAM,QAAQ,MACzB,2BAA2B,0CAC7B;AAAA,IACA,MAAM,gBAAgB,KAAK,IAAI,CAAC,QAAQ,4BAA4B,GAAG,CAAC;AAAA,IACxE,MAAM,kBAAkB,OAAO,OAAO;AAAA,IACtC,MAAM,eAA0C,CAAC;AAAA,IAEjD,IAAI,cAAc,WAAW,gBAAgB,QAAQ;AAAA,MACnD,0BACE,OAAO,IACP,YAAY,gBAAgB,uBAAuB,cAAc,QACnE;AAAA,IACF;AAAA,IAEA,SAAS,QAAQ,EAAG,QAAQ,gBAAgB,QAAQ,SAAS,GAAG;AAAA,MAC9D,MAAM,WAAW,gBAAgB;AAAA,MACjC,MAAM,SAAS,cAAc;AAAA,MAE7B,IAAI,OAAO,SAAS,SAAS,MAAM;AAAA,QACjC,0BACE,OAAO,IACP,UAAU,QAAQ,gBAAgB,SAAS,eAAe,OAAO,OACnE;AAAA,MACF;AAAA,MAEA,MAAM,oBAAoB,kCAAkC,OAAO,OAAO;AAAA,MAC1E,IAAI,sBAAsB,SAAS,MAAM;AAAA,QACvC;AAAA,MACF;AAAA,MAEA,IAAI,mBAAmB,OAAO,SAAS,SAAS,IAAI,GAAG;AAAA,QACrD,aAAa,KAAK;AAAA,UAChB,YAAY,SAAS;AAAA,UACrB,eAAe,6BAA6B,SAAS,IAAI;AAAA,QAC3D,CAAC;AAAA,QACD;AAAA,MACF;AAAA,MAEA,0BACE,OAAO,IACP,WAAW,SAAS,2BAA2B,SAAS,eAAe,qBAAqB,OAAO,UACrG;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,QAGK,iBAAiB,CAAC,OAAgE;AAAA,IAC9F,MAAM,gBAAgB,sBAAsB,YAAW,EAAE,WAAW,KAAK,EAAE;AAAA,IAC3E,MAAM,YAAY,gBAAgB,aAAa;AAAA,IAE/C,MAAM,MAAM,QAAQ,IAClB,qBAAqB,+BAA+B,MAAM,mCAC5D;AAAA,IAEA,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,WAAW,eAAe,MAAM,cAAc;AAAA,QAC5C,MAAM,MAAM,QAAQ,IAClB,eAAe,0BAA0B,gBACvC,YAAY,UACd,mBAAmB,YAAY,eACjC;AAAA,MACF;AAAA,MAEA,SAAS,MAAM,6BAA6B;AAAA,QAC1C,SAAS,KAAK;AAAA,QACd,SAAS,MAAM;AAAA,QACf,SAAS,MAAM;AAAA,QACf,MAAM,MAAM;AAAA,QACZ,mBAAmB;AAAA,QACnB,kBAAkB,MAAM;AAAA,MAC1B,CAAC;AAAA,MACD,OAAO,OAAO;AAAA,MACd,IAAI;AAAA,QACF,MAAM,MAAM,QAAQ,IAAI,wBAAwB,WAAW;AAAA,QAC3D,MAAM;AAAA,MAIR,MAAM;AAAA;AAAA,IAGR,MAAM,MAAM,QAAQ,IAAI,wBAAwB,WAAW;AAAA,IAC3D,OAAO;AAAA;AAEX;AAOA,SAAS,aAAa,CACpB,SACA,UACqD;AAAA,EACrD,MAAM,SAAoD,OAAO,OAAO,IAAI;AAAA,EAC5E,YAAY,YAAY,YAAY,UAAU;AAAA,IAC5C,OAAO,cAAc;AAAA,MACnB,SAAS,KAAK,QAAQ,OAAO,YAAY,YAAY,QAAQ,QAAQ,OAAO;AAAA,MAC5E,SAAS,QAAQ,UAAU,YAAY;AAAA,IACzC;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAYT,eAAe,sBAAsB,CACnC,UACA,eACA,WACA,QAC2C;AAAA,EAC3C,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,WAAW,MAAM,2BAA2B,EAAE,SAAS,eAAe,SAAS,CAAC;AAAA,IAChF,OAAO,OAAO;AAAA,IACd,OAAO,YAAY,QAAQ,KAAK;AAAA;AAAA,EAGlC,IAAI,CAAC,SAAS,WAAW;AAAA,IACvB,OAAO,SAAS,mBACZ,uBAAuB,kBAAkB,eAAe,MAAM,GAAG,SAAS,IAC1E;AAAA,EACN;AAAA,EAEA,IAAI,CAAC,gBAAgB,SAAS,eAAe,MAAM;AAAA,IAAG;AAAA,EACtD,OAAO,uBAAuB,SAAS,SAAS,SAAS;AAAA;AAI3D,SAAS,iBAAiB,CACxB,SACA,QACqB;AAAA,EACrB,MAAM,OAAO,OAAO,QAAQ,OAAO,EAAE,QAAQ,EAAE,UAAU,SAAS,gBAC/D,WAAW,QAAQ,OAAO,QAAQ,IAAI,CAAC,WAAW,OAAO,IAAI,GAAG,IAAI,CAAC,YAAY;AAAA,IAChF;AAAA,IACA;AAAA,EACF,EAAE,CACJ;AAAA,EAEA,OAAO,EAAE,MAAM,SAAS,OAAO,YAAY,OAAO,OAAO,QAAQ,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;AAAA;AAOlG,SAAS,iBAAiB,CACxB,QACA,UACmC;AAAA,EACnC,OAAO,UAAU,SAAS,aACtB,YACA,EAAE,SAAS,yBAAyB,OAAO,4BAA4B;AAAA;AAO7E,SAAS,WAAW,CAAC,QAA2B,OAA2B;AAAA,EACzE,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,EACrE,QAAQ,KACN,8CAA8C,OAAO,kCAAkC,SACzF;AAAA,EACA;AAAA;AAGF,SAAS,eAAe,CAAC,eAAkC,QAAoC;AAAA,EAC7F,OACE,cAAc,WAAW,OAAO,OAAO,QAAQ,UAC/C,OAAO,OAAO,QAAQ,MAAM,CAAC,QAAQ,UAAU,cAAc,WAAW,OAAO,IAAI;AAAA;AAKvF,SAAS,sBAAsB,CAC7B,SACA,WACsB;AAAA,EACtB,MAAM,SAAS,CAAC,SAA+D;AAAA,IAC7E,MAAM,SAAS,IAAI;AAAA,IACnB,aAAa,QAAQ,YAAY,MAAM;AAAA,MACrC,MAAM,YAAY,UAAU,QAAQ;AAAA,MACpC,OAAO,IAAI,KAAK,UAAU,CAAC,WAAW,MAAM,CAAC,GAAG,EAAE,WAAW,OAAO,CAAC;AAAA,IACvE;AAAA,IAEA,OAAO,CAAC,GAAG,OAAO,OAAO,CAAC;AAAA;AAAA,EAG5B,OAAO;AAAA,IACL,MAAM,OAAO,QAAQ,IAAI;AAAA,IACzB,SAAS,OAAO,YACd,OAAO,QAAQ,QAAQ,OAAO,EAAE,IAAI,EAAE,QAAQ,UAAU,CAAC,QAAQ,OAAO,IAAI,CAAC,CAAC,CAChF;AAAA,EACF;AAAA;AAGF,SAAS,YAAY,CAAC,OAAmC;AAAA,EACvD,IAAI,UAAU,aAAa,CAAC,OAAO,SAAS,KAAK,GAAG;AAAA,IAClD,OAAO;AAAA,EACT;AAAA,EAEA,OAAO,KAAK,IAAI,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,CAAC,GAAG,iBAAiB;AAAA;AAGnE,SAAS,eAAe,CAAC,KAAa,OAAuB;AAAA,EAC3D,OAAO,kBAAkB,4CAA4C;AAAA;AAGvE,SAAS,2BAA2B,CAClC,KAC0B;AAAA,EAC1B,MAAM,OAAO,UAAU,KAAK,aAAa;AAAA,EACzC,MAAM,UAAU,UAAU,KAAK,aAAa;AAAA,EAE5C,OAAO,EAAE,MAAM,QAAQ;AAAA;AAGzB,SAAS,kBAAkB,CACzB,eACA,cACS;AAAA,EACT,MAAM,iBAAiB,cAAc,KAAK,EAAE,YAAY;AAAA,EACxD,OAAO,iBAAiB,YAAY,mBAAmB,aAAa,mBAAmB;AAAA;AAGzF,SAAS,mBAAmB,CAAC,KAAoD;AAAA,EAC/E,MAAM,aAAsC,CAAC;AAAA,EAE7C,YAAY,KAAK,UAAU,OAAO,QAAQ,GAAG,GAAG;AAAA,IAC9C,WAAW,OAAO,sBAAsB,KAAK;AAAA,EAC/C;AAAA,EAEA,OAAO;AAAA;AAGT,SAAS,qBAAqB,CAAC,OAAyB;AAAA,EACtD,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B,OAAO,MAAM,SAAS;AAAA,EACxB;AAAA,EAEA,IAAI,iBAAiB,MAAM;AAAA,IACzB,OAAO,MAAM,YAAY;AAAA,EAC3B;AAAA,EAEA,IAAI,MAAM,QAAQ,KAAK,GAAG;AAAA,IACxB,OAAO,MAAM,IAAI,CAAC,SAAS,sBAAsB,IAAI,CAAC;AAAA,EACxD;AAAA,EAEA,IAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAAA,IAC/C,MAAM,aAAsC,CAAC;AAAA,IAC7C,YAAY,KAAK,UAAU,OAAO,QAAQ,KAAK,GAAG;AAAA,MAChD,WAAW,OAAO,sBAAsB,KAAK;AAAA,IAC/C;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAEA,OAAO;AAAA;AAGT,SAAS,6BAA6B,CAAC,WAA0B;AAAA,EAC/D,MAAM,IAAI,mBACR,+EAA+E,aACjF;AAAA;AAGF,SAAS,yBAAyB,CAAC,WAAmB,QAAuB;AAAA,EAC3E,MAAM,IAAI,mBACR,6EAA6E,eAAe,SAC9F;AAAA;;;AW/jBF,uBAAS;AAcT;AAAA;AAAA,iCAEE;AAAA;AAAA,0BAEA;AAAA,sBACA;AAAA,qBACA;AAAA;AAAA;;;ACnBF;AAAA,iCAGE;AAAA,sBACA;AAAA;AAAA;AA4BK,eAAe,6BAA6B,CACjD,OACiC;AAAA,EACjC,MAAM,oBAAoB,6BAA4B,MAAM,OAAO;AAAA,EACnE,IAAI,sBAAsB,MAAM;AAAA,IAC9B,MAAM,IAAI,mBACR,2BAA2B,MAAM,QAAQ,uDAC3C;AAAA,EACF;AAAA,EAEA,MAAM,eAAe,gBAAgB,MAAM,gBAAgB;AAAA,EAC3D,MAAM,cAAc,mBAAmB,MAAM,SAAS,uBAAuB,MAAM,QAAQ,EAAE,CAAC;AAAA,EAC9F,MAAM,iBAAiB,MAAM,WAAU,MAAM,SAAS,YAAY;AAAA,EAClE,MAAM,mBAAmB,MAAM,wBAAwB,OAAO,aAAa,iBAAiB;AAAA,EAE5F,OAAO,6BACL,OACA,mBACA,OAAO,cAAc,oBAAoB;AAAA,IACvC,MAAM,UAAU,MAAM,kBAAkB,OAAO,aAAa,cAAc,iBAAiB;AAAA,IAC3F,MAAM,uBAAuB,QAAQ,UAAU,QAAQ,UAAU,QAAQ;AAAA,IAEzE,IAAI,yBAAyB,GAAG;AAAA,MAC9B,OAAO;AAAA,QACL,oBAAoB;AAAA,QACpB;AAAA,QACA,mBAAmB,EAAE,MAAM,SAAS,OAAO,iBAAiB;AAAA,QAC5D,gBAAgB,qBAAqB;AAAA,QACrC,kBAAkB;AAAA,MACpB;AAAA,IACF;AAAA,IAEA,MAAM,cAAc,mBAAmB,mBAAmB,UAAU,QAAQ;AAAA,IAC5E,MAAM,mBAAmB,wBAAwB,MAAM,SAAS,UAAU,QAAQ;AAAA,IAClF,MAAM,aAAa,UAAU,gBAAgB,MAAM,cAAc;AAAA,IAEjE,MAAM,MAAM,QAAQ,IAAI;AAAA,oBACV;AAAA,cACN;AAAA,cACA;AAAA;AAAA,YAEF,gBAAgB,eAAe,QAAQ;AAAA;AAAA,cAErC,gBAAgB,eAAe,QAAQ;AAAA,mBAClC;AAAA;AAAA;AAAA,KAGd;AAAA,IAEC,MAAM,aAAa,4BAA4B,MAAM,QAAQ,MAAM;AAAA,IACnE,MAAM,qBAAqB,MAAM,QAAQ,OAAO,QAC7C,IAAI,CAAC,WAAW,UAAU,gBAAgB,OAAO,IAAI,GAAG,EACxD,KAAK,IAAI;AAAA,IACZ,MAAM,0BAA0B,kBAAkB,MAAM,kBAAkB;AAAA,IAC1E,MAAM,MAAM,QAAQ,IAAI;AAAA,oBACV,gBAAgB;AAAA,eACrB;AAAA,aACF;AAAA,cACC,gBAAgB,eAAe,QAAQ;AAAA;AAAA;AAAA,iBAGpC;AAAA,kBACC;AAAA;AAAA,wBAEM,gBAAgB,uBAAuB;AAAA,KAC1D;AAAA,IAEC,OAAO;AAAA,MACL,oBAAoB;AAAA,MACpB;AAAA,MACA,mBAAmB;AAAA,QACjB,MAAM;AAAA,QACN,OAAO,mBAAmB,QAAQ,UAAU,QAAQ;AAAA,MACtD;AAAA,MACA,gBAAgB,qBAAqB;AAAA,MACrC,kBAAkB;AAAA,IACpB;AAAA,GAEJ;AAAA;AAMF,eAAe,mBAAmB,CAChC,OACA,eACkB;AAAA,EAClB,MAAM,SAAS,gBAAgB,GAAG,MAAM,2BAA2B;AAAA,EACnE,MAAM,UAAU,gBAAgB,MAAM,kBAAkB;AAAA,EACxD,MAAM,UAAU,gBAAgB,MAAM,gBAAgB;AAAA,EACtD,MAAM,aAAa,mBACjB,MAAM,SACN,+BAA+B,MAAM,QAAQ,EAAE,CACjD;AAAA,EACA,MAAM,MAAM,QAAQ,IAClB,qBAAqB,qDACvB;AAAA,EACA,IAAI,cAAc,CAAC;AAAA,EACnB,IAAI,UAAU;AAAA,EACd,OAAO,MAAM;AAAA,IACX,MAAM,SAAS,MAAM,MAAM,QAAQ,MACjC,UAAU,uBAAuB,yBAAyB;AAAA,eACjD,aAAa,wBAAwB,oBAChD;AAAA,IACA,IAAI,OAAO,WAAW;AAAA,MAAG,OAAO;AAAA,IAChC,MAAM,UAAU,OAAO,IACrB,CAAC,QAAQ,KAAK,MAAM,UAAU,KAAK,QAAQ,CAAC,CAC9C;AAAA,IACA,cAAc,cAAc,OAAO,OAAO,SAAS,IAAK,SAAS;AAAA,IACjE,MAAM,YAAY,QAAQ,IAAI,CAAC,WAAW,eAAe,OAAO,GAAG,CAAC,EAAE,KAAK,GAAG;AAAA,IAC9E,MAAM,UAAU,MAAM,MAAM,QAAQ,MAClC,iBAAiB,mCAAmC,YACtD;AAAA,IACA,MAAM,WAAW,IAAI;AAAA,IACrB,WAAW,OAAO,SAAS;AAAA,MACzB,SAAS,IAAI,UAAU,KAAK,YAAY,GAAG;AAAA,QACzC,UAAU,UAAU,KAAK,UAAU;AAAA,QACnC,SAAS,kBAAkB,KAAK,SAAS,KAAK;AAAA,MAChD,CAAC;AAAA,IACH;AAAA,IAEA,QAAQ,QAAQ,aAAa,0BAA0B,MAAM,SAAS,UAAU,OAAO;AAAA,IACvF,IAAI,SAAS,SAAS;AAAA,MAAG;AAAA,IACzB,UAAU;AAAA,IACV,MAAM,cAAwB,CAAC;AAAA,IAC/B,MAAM,iBAA2B,CAAC;AAAA,IAClC,YAAY,KAAK,UAAU,UAAU;AAAA,MACnC,MAAM,QAAQ,OAAO,IAAI,GAAG;AAAA,MAC5B,YAAY,KACV,IAAI,eAAe,GAAG,MAAM,eAAe,MAAM,QAAQ,MAAM,MAAM,YAAY,OAAO,SAAS,eAAe,MAAM,OAAO,IAC/H;AAAA,MACA,eAAe,KAAK,IAAI,eAAe,GAAG,MAAM,cAAc,OAAO,QAAS,SAAS,IAAI;AAAA,IAC7F;AAAA,IACA,MAAM,OAAO,CAAC,GAAG,SAAS,KAAK,CAAC,EAAE,IAAI,cAAc,EAAE,KAAK,GAAG;AAAA,IAC9D,MAAM,MAAM,QAAQ,IAAI,eAAe,mCAAmC,OAAO;AAAA,IACjF,MAAM,MAAM,QAAQ,IAAI,eAAe,qBAAqB,YAAY,KAAK,GAAG,GAAG;AAAA,IACnF,MAAM,MAAM,QAAQ,IAAI,eAAe,sCAAsC,OAAO;AAAA,IACpF,MAAM,MAAM,QAAQ,IAAI,eAAe,wBAAwB,eAAe,KAAK,GAAG,GAAG;AAAA,EAC3F;AAAA;AAGF,eAAe,uBAAuB,CACpC,OACA,aACA,mBACiB;AAAA,EAGjB,IAAI,YAAY,MAAM,4BAA4B,iBAAiB,GAAG;AAAA,IACpE,OAAO,MAAM,oBAAoB,WAAU,MAAM,SAAS,WAAW;AAAA,EACvE;AAAA,EAEA,OAAO,2BAA2B;AAAA,IAChC,SAAS,MAAM;AAAA,IACf,SAAS,MAAM;AAAA,IACf,aAAa;AAAA,IACb,SAAS;AAAA,EACX,CAAC;AAAA;AAGH,eAAe,4BAA+B,CAC5C,OACA,mBACA,KACY;AAAA,EACZ,MAAM,QAAQ,gBAAgB,GAAG,MAAM,wBAAwB;AAAA,EAC/D,MAAM,gBAAgB,gBAAgB,GAAG,MAAM,2BAA2B;AAAA,EAE1E,IAAI;AAAA,EAGJ,IAAI;AAAA,IACF,MAAM,YAAY,MAAM,QAAQ,eAAe;AAAA,IAC/C,MAAM,kBAAkB,YAAY,MAAM,oBAAoB,OAAO,aAAa,IAAI;AAAA,IACtF,MAAM,UAAU,gBAAgB,MAAM,kBAAkB;AAAA,IACxD,MAAM,YAAY,YACd,2BAA2B,cAAc,gBAAgB,kBAAkB,MAAM,kBAAkB,CAAC;AAAA,gBAC5F,gBAAgB,MAAM,gBAAgB;AAAA,gBACtC,uCAAuC,+BAC/C,sBAAsB,OAAO,iBAAiB;AAAA,IAClD,MAAM,MAAM,QAAQ,IAAI,qBAAqB,YAAY,WAAW;AAAA,IACpE,UAAU,EAAE,MAAM,WAAW,OAAO,MAAM,IAAI,OAAO,eAAe,EAAE;AAAA,IACtE,OAAO,OAAO;AAAA,IACd,UAAU,EAAE,MAAM,SAAS,MAAM;AAAA;AAAA,EAGnC,IAAI;AAAA,IACF,MAAM,MAAM,QAAQ,IAAI,wBAAwB,OAAO;AAAA,IACvD,MAAM,MAAM,QAAQ,IAAI,wBAAwB,eAAe;AAAA,IAC/D,OAAO,cAAc;AAAA,IACrB,IAAI,QAAQ,SAAS,WAAW;AAAA,MAC9B,MAAM;AAAA,IACR;AAAA;AAAA,EAGF,IAAI,QAAQ,SAAS,SAAS;AAAA,IAC5B,MAAM,QAAQ;AAAA,EAChB;AAAA,EAEA,OAAO,QAAQ;AAAA;AAGjB,SAAS,qBAAqB,CAC5B,OACA,mBACQ;AAAA,EACR,MAAM,iBAAiB,gBAAgB,MAAM,kBAAkB;AAAA,EAC/D,MAAM,gBAAgB,kBAAkB,IAAI,CAAC,WAAW,gBAAgB,MAAM,CAAC,EAAE,KAAK,IAAI;AAAA,EAC1F,MAAM,aAAa,gBAAgB,SAAS,MAAM,kBAAkB,CAAC;AAAA,EACrE,MAAM,sBAAsB,gBAAgB,kBAAkB,MAAM,kBAAkB,CAAC;AAAA,EAEvF,OAAO;AAAA,wBACe;AAAA;AAAA;AAAA;AAAA,cAIV,sCAAsC,qBAAqB;AAAA;AAAA,yBAEhD;AAAA,qBACJ;AAAA,eACN;AAAA,aACF,gBAAgB,MAAM,gBAAgB;AAAA;AAAA,YAEvC;AAAA;AAAA;AAIZ,eAAe,iBAAiB,CAC9B,OACA,aACA,cACA,mBAC4B;AAAA,EAC5B,MAAM,cAAc,kBAAkB;AAAA,EACtC,IAAI,gBAAgB,WAAW;AAAA,IAC7B,MAAM,IAAI,mBACR,2BAA2B,MAAM,QAAQ,kDAC3C;AAAA,EACF;AAAA,EAEA,MAAM,cAAc,mBAAmB,mBAAmB,UAAU,QAAQ;AAAA,EAC5E,MAAM,cAAc,UAAU,gBAAgB,WAAW;AAAA,EACzD,MAAM,aAAa,UAAU,gBAAgB,MAAM,cAAc;AAAA,EACjE,MAAM,mBAAmB,wBAAwB,MAAM,SAAS,UAAU,QAAQ;AAAA,EAClF,OAAO,OAAO,MAAM,MAAM,QAAQ,MAAM;AAAA;AAAA;AAAA,gBAG1B,gBAAgB,eAAe,QAAQ,cAAc;AAAA;AAAA;AAAA,gBAGrD,gBAAgB,eAAe,QAAQ;AAAA,gBACvC;AAAA,iBACC;AAAA;AAAA;AAAA,gBAGD,gBAAgB,eAAe,QAAQ,SAAS;AAAA;AAAA,WAErD;AAAA,gBACK,4BAA4B;AAAA,GACzC;AAAA,EAED,OAAO;AAAA,IACL,SAAS,QAAQ,YAAY,IAAI,OAAO,cAAc,KAAK,cAAc,CAAC;AAAA,IAC1E,SAAS,QAAQ,YAAY,IAAI,OAAO,cAAc,KAAK,cAAc,CAAC;AAAA,IAC1E,SAAS,QAAQ,YAAY,IAAI,OAAO,cAAc,KAAK,cAAc,CAAC;AAAA,EAC5E;AAAA;AAGF,SAAS,kBAAkB,CACzB,mBACA,WACA,YACQ;AAAA,EACR,OAAO,kBACJ,IACC,CAAC,WACC,GAAG,aAAa,gBAAgB,MAAM,OAAO,cAAc,gBAAgB,MAAM,GACrF,EACC,KAAK,OAAO;AAAA;AAGjB,SAAS,uBAAuB,CAC9B,SACA,WACA,YACQ;AAAA,EACR,OAAO,QAAQ,OAAO,QACnB,IACC,CAAC,WACC,GAAG,aAAa,gBAAgB,OAAO,IAAI,sBAAsB,cAAc,gBAC7E,OAAO,IACT,GACJ,EACC,KAAK,MAAM;AAAA;AAGhB,eAAe,UAAS,CAAC,SAA6B,aAAsC;AAAA,EAC1F,OAAO,OAAO,MAAM,QAAQ,MAAM,qCAAqC,aAAa;AAAA,EACpF,OAAO,QAAQ,YAAY,IAAI,OAAO,cAAc,KAAK,WAAW,CAAC;AAAA;AAGvE,SAAS,QAAQ,CAAC,oBAAoC;AAAA,EACpD,OAAO,GAAG;AAAA;AAGZ,SAAS,iBAAiB,CAAC,oBAAoC;AAAA,EAC7D,OAAO,GAAG;AAAA;AAGZ,SAAS,WAAW,CAAC,MAAqC,OAAmC;AAAA,EAC3F,OACE,SAAS,aACT,KAAK,WAAW,MAAM,UACtB,KAAK,MAAM,CAAC,OAAO,UAAU,UAAU,MAAM,MAAM;AAAA;;;AC3VvD,uBAAS;AAQT;AAAA;AAAA;AAAA;AAAA,sBAIE;AAAA;;;ACJK,SAAS,gBAAgB,CAC9B,UACA,QACA,KACM;AAAA,EACN,WAAW,UAAU,OAAO,SAAS;AAAA,IACnC,kBAAkB,UAAU,QAAQ,IAAI,OAAO,SAAS,IAAI;AAAA,EAC9D;AAAA,EAEA,SAAS,OAAO;AAAA;AAGlB,SAAS,iBAAiB,CACxB,UACA,QACA,OACM;AAAA,EACN,IAAI,UAAU,QAAQ,UAAU,WAAW;AAAA,IACzC,SAAS,WAAW;AAAA,IACpB;AAAA,EACF;AAAA,EAEA,QAAQ,OAAO;AAAA,IACb,KAAK;AAAA,MACH,SAAS,cAAc,KAAe;AAAA,MACtC;AAAA,IACF,KAAK;AAAA,MACH,SAAS,cAAc,KAAgB;AAAA,MACvC;AAAA,IACF,KAAK;AAAA,MACH,SAAS,aAAa,OAAO,UAAU,WAAW,QAAQ,OAAO,KAAwB,CAAC;AAAA,MAC1F;AAAA,IACF,KAAK;AAAA,MACH,SAAS,aAAa,KAAe;AAAA,MACrC;AAAA,IACF,KAAK;AAAA,MACH,SAAS,cAAc,4BAA4B,OAAO,OAAO,IAAI,CAAC;AAAA,MACtE;AAAA,IACF,KAAK;AAAA,MACH,SAAS,cACP,iBAAiB,OAAO,MAAM,YAAY,EAAE,MAAM,GAAG,EAAE,IAAI,OAAO,KAAK,CACzE;AAAA,MACA;AAAA,IACF,KAAK;AAAA,MACH,SAAS,cAAc,iBAAiB,OAAO,MAAM,YAAY,IAAI,OAAO,KAAK,CAAC;AAAA,MAClF;AAAA,IACF,KAAK;AAAA,MACH,SAAS,cAAc,KAAK,UAAU,KAAK,CAAC;AAAA,MAC5C;AAAA,IACF,KAAK;AAAA,MACH,SAAS,aAAa,sBAAsB,KAAgB,CAAC;AAAA,MAC7D;AAAA;AAAA;AAIN,SAAS,qBAAqB,CAAC,SAAyD;AAAA,EACtF,OAAO;AAAA,IACL,QAAQ,QAAQ;AAAA,IAChB,QAAQ,QAAQ;AAAA,IAChB,WAAW,OAAO,QAAQ,SAAS;AAAA,IACnC,UAAU,QAAQ,YAAY;AAAA,IAC9B,WAAW,QAAQ,aAAa;AAAA,IAChC,aAAa,QAAQ,eAAe;AAAA,EACtC;AAAA;;;ADxCF,IAAM,0BAA0B;AAczB,eAAe,0BAA0B,CAC9C,OAC2B;AAAA,EAC3B,MAAM,SAAS,YAAW,EAAE,WAAW,KAAK,EAAE;AAAA,EAC9C,MAAM,mBAAmB,cAAc;AAAA,EACvC,MAAM,qBAAqB,uBAAuB;AAAA,EAClD,MAAM,iBAAiB,mBAAmB;AAAA,EAE1C,MAAM,MAAM,QAAQ,IAAI;AAAA,wBACF,gBAAgB,gBAAgB;AAAA,QAChD,gBAAgB,kBAAkB;AAAA,QAClC,gBAAgB,cAAc;AAAA,QAC9B,MAAM,MAAM,QAAQ,eAAe,YAAY,KAAK,GAAG,gBAAgB,GAAG,2BAA2B;AAAA,QACrG,wCAAwC,MAAM,MAAM,QAAQ,MAAM;AAAA;AAAA,GAEvE;AAAA,EAED,OAAO,IAAI,qBACT,MAAM,aACN,MAAM,SACN,MAAM,OACN,MAAM,eACN,kBACA,oBACA,cACF;AAAA;AAAA;AAGF,MAAM,qBAAiD;AAAA,EAOlC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAZX,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,iBAAiB;AAAA,EAEzB,WAAW,CACQ,aACA,SACA,OACA,eACA,kBACA,oBACA,gBACjB;AAAA,IAPiB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,QAGb,YAAY,CAChB,SAGe;AAAA,IACf,KAAK,WAAW;AAAA,IAEhB,IAAI,QAA6B,CAAC;AAAA,IAClC,iBAAiB,UAAU,SAAS;AAAA,MAClC,MAAM,kBAAkB,qCAAqC,QAAQ,KAAK,MAAM,OAAO;AAAA,MACvF,IAAI,iBAAiB;AAAA,QACnB,MAAM,IAAI,mBAAiB,kBAAkB,iBAAiB;AAAA,MAChE;AAAA,MAEA,MAAM,KAAK;AAAA,QACT,UAAU,KAAK;AAAA,QACf,QAAQ,wBAAwB,MAAM;AAAA,MACxC,CAAC;AAAA,MACD,KAAK,gBAAgB;AAAA,MAErB,IAAI,MAAM,UAAU,yBAAyB;AAAA,QAC3C,MAAM,KAAK,0BAA0B,KAAK;AAAA,QAC1C,QAAQ,CAAC;AAAA,QACT,MAAM,IAAI,MAAM,CAAC;AAAA,MACnB;AAAA,IACF;AAAA,IAEA,IAAI,MAAM,SAAS,GAAG;AAAA,MACpB,MAAM,KAAK,0BAA0B,KAAK;AAAA,IAC5C;AAAA;AAAA,QAGY,yBAAyB,CAAC,OAAoD;AAAA,IAC1F,MAAM,KAAK,QAAQ,aAAa,KAAK,kBAAkB,CAAC,aAAa;AAAA,MACnE,WAAW,UAAU,OAAO;AAAA,QAC1B,SAAS,aAAa,OAAO,QAAQ;AAAA,QACrC,SAAS,cAAc,OAAO,OAAO,IAAI;AAAA,QACzC,IAAI,KAAK,MAAM,QAAQ,eAAe,WAAW;AAAA,UAC/C,SAAS,cACP,KAAK,UAAU,sBAAsB,KAAK,MAAM,SAAS,OAAO,MAAM,CAAC,CACzE;AAAA,QACF;AAAA,QACA,iBACE,UACA,KAAK,MAAM,QAAQ,QACnB,OAAO,OAAO,SAAS,WAAW,OAAO,OAAO,MAAM,OAAO,OAAO,GACtE;AAAA,MACF;AAAA,KACD;AAAA,IACD,KAAK,kBAAkB,MAAM;AAAA;AAAA,QAGzB,MAAM,CAAC,OAAoE;AAAA,IAC/E,KAAK,WAAW;AAAA,IAChB,KAAK,SAAS;AAAA,IAEd,IAAI,YAAY;AAAA,IAChB,IAAI;AAAA,MACF,MAAM,SAAS,MAAM,KAAK,YAAY;AAAA,QACpC,OAAO,KAAK;AAAA,QACZ,eAAe,KAAK;AAAA,QACpB,QAAQ;AAAA,QACR,kBAAkB,KAAK;AAAA,QACvB,oBAAoB,KAAK;AAAA,QACzB,gBAAgB,KAAK;AAAA,QACrB,gBAAgB,KAAK;AAAA,MACvB,CAAC;AAAA,MACD,YAAY;AAAA,MACZ,MAAM,KAAK,QAAQ;AAAA,MACnB,OAAO;AAAA,MACP,OAAO,OAAO;AAAA,MACd,IAAI,CAAC,WAAW;AAAA,QACd,MAAM,KAAK,QAAQ;AAAA,MACrB;AAAA,MACA,MAAM;AAAA;AAAA;AAAA,QAIJ,KAAK,GAAkB;AAAA,IAC3B,IAAI,KAAK,QAAQ;AAAA,MACf;AAAA,IACF;AAAA,IAEA,KAAK,SAAS;AAAA,IACd,MAAM,KAAK,QAAQ;AAAA;AAAA,EAGb,UAAU,GAAS;AAAA,IACzB,IAAI,KAAK,QAAQ;AAAA,MACf,MAAM,IAAI,mBAAiB,iDAAiD;AAAA,IAC9E;AAAA;AAAA,QAGY,OAAO,GAAkB;AAAA,IACrC,IAAI,KAAK,WAAW;AAAA,MAClB;AAAA,IACF;AAAA,IAEA,KAAK,YAAY;AAAA,IACjB,IAAI;AAAA,MACF,MAAM,KAAK,QAAQ,IAAI,wBAAwB,gBAAgB,KAAK,gBAAgB,GAAG;AAAA,MACvF,MAAM;AAAA;AAIZ;;;AElMA,uBAAS;AAET;AAOA;AAAA;AAAA,iCAEE;AAAA,sBACA;AAAA;AAmBF,IAAM,uBAAuB;AAQtB,eAAe,0BAA0B,CAC9C,OAC2B;AAAA,EAC3B,MAAM,mBAAmB,cAAc,YAAW,EAAE,WAAW,KAAK,EAAE;AAAA,EAKtE,MAAM,MAAM,QAAQ,IAClB,qBAAqB,gBAAgB,gBAAgB,MAAM,gCACzD,MAAM,MAAM,QAAQ,MACtB,IACF;AAAA,EAEA,OAAO,IAAI,qBAAqB,MAAM,aAAa,MAAM,SAAS,MAAM,OAAO,gBAAgB;AAAA;AAAA;AAUjG,MAAM,qBAAiD;AAAA,EAOlC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EATX,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,cAAc;AAAA,EACL,oBAAoB,IAAI;AAAA,EAEzC,WAAW,CACQ,aACA,SACA,OACA,kBACjB;AAAA,IAJiB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,QAGb,SAAS,CAAC,MAAuE;AAAA,IACrF,KAAK,WAAW;AAAA,IAKhB,IAAI,QAAsB,CAAC;AAAA,IAC3B,IAAI,mBAAmB,IAAI;AAAA,IAC3B,iBAAiB,OAAO,MAAM;AAAA,MAC5B,MAAM,kBAAkB,6BAA6B,KAAK,KAAK,MAAM,OAAO;AAAA,MAC5E,IAAI,iBAAiB;AAAA,QACnB,MAAM,IAAI,mBAAiB,kBAAkB,iBAAiB;AAAA,MAChE;AAAA,MAIA,MAAM,YAAY,gBAAgB,GAAG;AAAA,MACrC,IAAI,6BAA4B,KAAK,MAAM,OAAO,MAAM,MAAM;AAAA,QAC5D,MAAM,aAAa,wBAAwB,KAAK,MAAM,SAAS,SAAS;AAAA,QACxE,IAAI,KAAK,kBAAkB,IAAI,UAAU,KAAK,iBAAiB,IAAI,UAAU,GAAG;AAAA,UAC9E,MAAM,IAAI,mBACR,2BAA2B,KAAK,MAAM,QAAQ,OAAO,KAAK,MAAM,QAAQ,mDAC1E;AAAA,QACF;AAAA,QACA,iBAAiB,IAAI,UAAU;AAAA,MACjC;AAAA,MACA,MAAM,KAAK,SAAS;AAAA,MAEpB,IAAI,MAAM,UAAU,sBAAsB;AAAA,QACxC,MAAM,KAAK,0BAA0B,OAAO,gBAAgB;AAAA,QAC5D,QAAQ,CAAC;AAAA,QACT,mBAAmB,IAAI;AAAA,QAIvB,MAAM,IAAI,MAAM,CAAC;AAAA,MACnB;AAAA,IACF;AAAA,IAEA,IAAI,MAAM,SAAS,GAAG;AAAA,MACpB,MAAM,KAAK,0BAA0B,OAAO,gBAAgB;AAAA,IAC9D;AAAA;AAAA,QAGY,yBAAyB,CACrC,OACA,aACe;AAAA,IAGf,MAAM,KAAK,QAAQ,aAAa,KAAK,kBAAkB,CAAC,aAAa;AAAA,MACnE,WAAW,OAAO,OAAO;AAAA,QACvB,iBAAiB,UAAU,KAAK,MAAM,QAAQ,QAAQ,GAAG;AAAA,MAC3D;AAAA,KACD;AAAA,IAGD,KAAK,eAAe,MAAM;AAAA,IAC1B,WAAW,cAAc,aAAa;AAAA,MACpC,KAAK,kBAAkB,IAAI,UAAU;AAAA,IACvC;AAAA;AAAA,QAGI,MAAM,CAAC,OAAoE;AAAA,IAC/E,KAAK,WAAW;AAAA,IAChB,KAAK,SAAS;AAAA,IAEd,IAAI,YAAY;AAAA,IAChB,IAAI;AAAA,MACF,MAAM,SAAS,MAAM,KAAK,YAAY;AAAA,QACpC,OAAO,KAAK;AAAA,QACZ,QAAQ;AAAA,QACR,aAAa,KAAK;AAAA,QAClB,kBAAkB,KAAK;AAAA,MACzB,CAAC;AAAA,MACD,YAAY;AAAA,MAGZ,MAAM,KAAK,QAAQ;AAAA,MACnB,OAAO;AAAA,MACP,OAAO,OAAO;AAAA,MACd,IAAI,CAAC,WAAW;AAAA,QACd,MAAM,KAAK,QAAQ;AAAA,MACrB;AAAA,MACA,MAAM;AAAA;AAAA;AAAA,QAIJ,KAAK,GAAkB;AAAA,IAC3B,IAAI,KAAK,QAAQ;AAAA,MACf;AAAA,IACF;AAAA,IAEA,KAAK,SAAS;AAAA,IACd,MAAM,KAAK,QAAQ;AAAA;AAAA,EAGb,UAAU,GAAS;AAAA,IACzB,IAAI,KAAK,QAAQ;AAAA,MACf,MAAM,IAAI,mBAAiB,iDAAiD;AAAA,IAC9E;AAAA;AAAA,QAGY,OAAO,GAAkB;AAAA,IACrC,IAAI,KAAK,WAAW;AAAA,MAClB;AAAA,IACF;AAAA,IAEA,KAAK,YAAY;AAAA,IACjB,KAAK,kBAAkB,MAAM;AAAA,IAC7B,MAAM,KAAK,iBAAiB;AAAA;AAAA,QAGhB,gBAAgB,GAAkB;AAAA,IAC9C,IAAI;AAAA,MACF,MAAM,KAAK,QAAQ,IAAI,wBAAwB,gBAAgB,KAAK,gBAAgB,GAAG;AAAA,MACvF,MAAM;AAAA;AAKZ;;;AJnGO,MAAM,yBAAyB;AAAA,EAEjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAJnB,WAAW,CACQ,SACA,aACA,UACA,WACjB;AAAA,IAJiB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,QAGb,UAAU,CAAC,OAA0D;AAAA,IACzE,KAAK,YAAY,WAAW;AAAA,IAE5B,MAAM,aAAa,MAAM,KAAK,SAAS,WAAW,MAAM,QAAQ,EAAE;AAAA,IAClE,IAAI,CAAC,YAAY;AAAA,MACf,MAAM,IAAI,mBAAiB,mCAAmC,MAAM,QAAQ,MAAM;AAAA,IACpF;AAAA,IAEA,KAAK,SAAS,aAAa,UAAU;AAAA,IACrC,8BAA8B,UAAU;AAAA,IACxC,MAAM,OAAO,MAAM,QAAQ;AAAA,IAC3B,uBAAuB,MAAM,OAAO;AAAA,IAMpC,MAAM,UAAU,MAAM,KAAK,YAAY,eAAe;AAAA,IACtD,OAAO,2BAA2B;AAAA,MAChC,aAAa,CAAC,YAAY,KAAK,YAAY,OAAO;AAAA,MAClD;AAAA,MACA,OAAO;AAAA,WACF;AAAA,QACH,SAAS;AAAA,QACT;AAAA,MACF;AAAA,IACF,CAAC;AAAA;AAAA,QAGG,UAAU,CAAC,OAA0D;AAAA,IACzE,KAAK,YAAY,WAAW;AAAA,IAE5B,MAAM,aAAa,MAAM,KAAK,SAAS,WAAW,MAAM,QAAQ,EAAE;AAAA,IAClE,IAAI,CAAC,YAAY;AAAA,MACf,MAAM,IAAI,mBAAiB,mCAAmC,MAAM,QAAQ,MAAM;AAAA,IACpF;AAAA,IACA,IAAI,6BAA4B,UAAU,MAAM,MAAM;AAAA,MACpD,MAAM,IAAI,mBACR,2BAA2B,WAAW,uDACxC;AAAA,IACF;AAAA,IAEA,KAAK,SAAS,aAAa,UAAU;AAAA,IACrC,MAAM,gBAAgB,MAAM,KAAK,YAAY,oBAAoB,CAAC,YAChE,KAAK,UAAU,8BAA8B,SAAS,UAAU,CAClE;AAAA,IACA,IACE,MAAM,4BAA4B,aAClC,eAAe,cAAc,MAAM,yBACnC;AAAA,MACA,MAAM,IAAI,sBACR,6DAA6D,WAAW,iCAAiC,MAAM,oCAAoC,eAAe,aAAa,UACjL;AAAA,IACF;AAAA,IACA,MAAM,UAAU,MAAM,KAAK,YAAY,eAAe;AAAA,IACtD,OAAO,2BAA2B;AAAA,MAChC,aAAa,CAAC,YAAY,KAAK,YAAY,OAAO;AAAA,MAClD;AAAA,MACA,OAAO,KAAK,OAAO,SAAS,WAAW;AAAA,MACvC,eAAe,eAAe,aAAa;AAAA,IAC7C,CAAC;AAAA;AAAA,QAGW,WAAW,CAAC,OAAoE;AAAA,IAC5F,MAAM,aAAa,MAAM,KAAK,SAAS,WAAW,MAAM,MAAM,QAAQ,EAAE;AAAA,IACxE,IAAI,CAAC,YAAY;AAAA,MACf,MAAM,IAAI,mBAAiB,mCAAmC,MAAM,MAAM,QAAQ,MAAM;AAAA,IAC1F;AAAA,IAEA,MAAM,OAAO,MAAM,MAAM,QAAQ;AAAA,IACjC,uBAAuB,MAAM,OAAO;AAAA,IAEpC,OAAO,KAAK,qBAAqB;AAAA,MAC/B,SAAS;AAAA,MACT;AAAA,MACA,yBAAyB,MAAM,QAAQ;AAAA,MACvC,eAAe,MAAM,QAAQ,iBAAiB,iBAAiB,MAAM,MAAM,QAAQ;AAAA,MACnF,UAAU,MAAM,MAAM;AAAA,MACtB,QAAQ,MAAM,MAAM;AAAA,MACpB,SAAS,MAAM,MAAM;AAAA,MACrB,cAAc,CAAC,SAAS,YACtB,KAAK,gBAAgB;AAAA,WAChB;AAAA,QACH;AAAA,QACA,kBAAkB,QAAQ;AAAA,MAC5B,CAAC;AAAA,IACL,CAAC;AAAA;AAAA,QAGW,WAAW,CAAC,OAAoE;AAAA,IAC5F,MAAM,aAAa,MAAM,KAAK,SAAS,WAAW,MAAM,MAAM,QAAQ,EAAE;AAAA,IACxE,IAAI,CAAC,YAAY;AAAA,MACf,MAAM,IAAI,mBAAiB,mCAAmC,MAAM,MAAM,QAAQ,MAAM;AAAA,IAC1F;AAAA,IACA,IAAI,6BAA4B,UAAU,MAAM,MAAM;AAAA,MACpD,MAAM,IAAI,mBACR,2BAA2B,WAAW,uDACxC;AAAA,IACF;AAAA,IAEA,OAAO,wBAAwB,MAAM,OAAO,MAAM,QAAQ,CAAC,WACzD,KAAK,kBAAkB,OAAO,YAAY;AAAA,MACxC,MAAM,QAAQ,QAAQ,eAAe;AAAA,MACrC,MAAM,gBAAgB,UAChB,MAAM,KAAK,UAAU,8BAA8B,SAAS,UAAU,IAAI,aAC5E,OACA,MAAM;AAAA,MACV,OAAO,KAAK,uCAAuC,SAAS;AAAA,QAC1D,SAAS;AAAA,QACT,MAAM;AAAA,QACN,yBAAyB;AAAA,QACzB,kBAAkB,CAAC,MAAM,QAAQ;AAAA,QACjC,QAAQ,MAAM,QAAQ;AAAA,QACtB,qBAAqB;AAAA,QACrB,eAAe,MAAM,QAAQ,iBAAiB,iBAAiB,WAAW;AAAA,QAC1E,UAAU,MAAM,MAAM;AAAA,QACtB,QAAQ,MAAM,MAAM;AAAA,QACpB,cAAc,OAAO,eAAe,YAAY;AAAA,UAC9C,MAAM,SAAS,MAAM,8BAA8B;AAAA,YACjD,SAAS,KAAK;AAAA,YACd,SAAS;AAAA,YACT,SAAS;AAAA,YACT,kBAAkB,MAAM;AAAA,YACxB,oBAAoB,MAAM;AAAA,YAC1B,gBAAgB,MAAM;AAAA,YACtB,kBAAkB,QAAQ;AAAA,YAC1B,4BAA4B,QAAQ;AAAA,UACtC,CAAC;AAAA,UACD,IAAI,OAAO,mBAAmB,MAAM,gBAAgB;AAAA,YAClD,MAAM,IAAI,mBACR,4CAA4C,WAAW,gBAAgB,MAAM,8CAA8C,OAAO,iDACpI;AAAA,UACF;AAAA,UACA,OAAO;AAAA;AAAA,MAEX,CAAC;AAAA,KACF,CACH;AAAA;AAAA,QAGI,oBAAoB,CACxB,OACmC;AAAA,IACnC,OAAO,KAAK,kBAAkB,CAAC,YAC7B,KAAK,uCAAuC,SAAS,KAAK,CAC5D;AAAA;AAAA,QAGI,iBAAoB,CAAC,KAA8D;AAAA,IACvF,OAAO,sBAAsB,KAAK,SAAS,YAAY;AAAA,MAGrD,OAAO,KAAK,YAAY,sBAAsB,GAAG;AAAA,KAClD;AAAA;AAAA,QAGG,sCAAsC,CAC1C,SACA,OACmC;AAAA,IACnC,8BAA8B,MAAM,OAAO;AAAA,IAC3C,MAAM,SAAS,MAAM,KAAK,uCAAuC,SAAS,KAAK;AAAA,IAC/E,IAAI,OAAO,YAAY,MAAM;AAAA,MAC3B,MAAM,IAAI,mBACR,kEAAkE,MAAM,QAAQ,sCAClF;AAAA,IACF;AAAA,IAEA,OAAO,KAAK,OAAO,SAAS,SAAS,OAAO,QAAQ;AAAA;AAAA,QAGxC,sCAAsC,CAClD,SACA,OACmC;AAAA,IAEnC,OAAO,sBACL,MAAM,QAAQ,IACd,MAAM,KAAK,6BAA6B,KAAK,OAAO,QAAQ,CAAC,GAC7D,MAAM,MACR;AAAA;AAAA,QAGY,4BAA4B,CACxC,OACmC;AAAA,IAInC,MAAM,0BAA0B,MAAM,KAAK,wBAAwB,MAAM,OAAO;AAAA,IAEhF,IAAI,YAAY;AAAA,IAChB,IAAI;AAAA,MACF,MAAM,gBAAgB,MAAM,KAAK,wBAAwB,KAAK;AAAA,MAC9D,IAAI,MAAM,4BAA4B,WAAW;AAAA,QAC/C,KAAK,4BAA4B;AAAA,UAC/B,WAAW,MAAM,QAAQ;AAAA,UACzB,yBAAyB,MAAM;AAAA,UAC/B,uBAAuB,eAAe,aAAa;AAAA,UACnD,WAAW,MAAM,uBAAuB;AAAA,QAC1C,CAAC;AAAA,MACH;AAAA,MAEA,MAAM,UAAU,iBAAgB;AAAA,QAC9B,MAAM,MAAM;AAAA,QACZ,QAAQ,MAAM,QAAQ;AAAA,QACtB,UAAU,MAAM;AAAA,QAChB,SAAS,MAAM;AAAA,QACf,QAAQ;AAAA,MACV,CAAC;AAAA,MAED,MAAM,eAAe,MAAM,MAAM,aAAa,MAAM,SAAS;AAAA,QAC3D,kBAAkB,eAAe;AAAA,QACjC,4BAA4B,eAAe;AAAA,MAC7C,CAAC;AAAA,MACD,MAAM,QAAQ,eAAe;AAAA,MAG7B,MAAM,WAAW,aAAa,qBAC1B,YACA,kBAAkB,YAChB,MAAM,KAAK,4BAA4B,KAAK,IAC5C;AAAA,MAEN,MAAM,iBACJ,aAAa,aAAa,KAAK,mBAAmB,OAAO,UAAU,OAAO;AAAA,MAC5E,IAAI,kBAAkB,eAAe,OAAO,cAAc,OAAO,GAAG;AAAA,QAClE,MAAM,KAAK,WAAW,KAAK;AAAA,MAC7B;AAAA,MAEA,MAAM,WAAW,YAAW;AAAA,MAC5B,MAAM,KAAK,kBACT,OACA,UACA,eAAe,OAAO,cAAc,aAAa,GACjD,OACF;AAAA,MAEA,MAAM,yBACJ,MAAM,SACN,MAAM,QAAQ,IACd,kBAAkB,yBAAyB,OAAO,YAAY,IAC1D,EAAE,eAAe,MAAM,KAAK,YAAY,cAAc,EAAE,IACxD,SACN;AAAA,MACA,YAAY;AAAA,MAEZ,MAAM,2BAA2B,MAAM,KAAK,wBAAwB,MAAM,OAAO;AAAA,MACjF,IAAI;AAAA,QACF,OAAO,MAAM,KAAK,yBAAyB;AAAA,aACtC;AAAA,UACH;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,mBAAmB,UAAU,aAAa;AAAA,QAC5C,CAAC;AAAA,QACD,QAAQ;AAAA,QACR,MAAM,KAAK,YAAY,8BAA8B,MAAM,OAAO;AAAA;AAAA,MAEpE,OAAO,OAAO;AAAA,MACd,IAAI,CAAC,WAAW;AAAA,QACd,MAAM,KAAK,oBAAoB,MAAM,OAAO;AAAA,MAC9C;AAAA,MACA,MAAM;AAAA;AAAA;AAAA,QAII,wBAAwB,CACpC,OAQmC;AAAA,IAInC,MAAM,gBAAgB,MAAM,KAAK,kBAC/B,MAAM,SACN,MAAM,QAAQ,IACd,MAAM,UACN,MAAM,yBACN,MAAM,wBACR;AAAA,IAEA,IAAI,kBAAkB,MAAM;AAAA,MAC1B,MAAM,UAAU,MAAM,KAAK,UAAU,sBACnC,MAAM,SACN,MAAM,SACN,aACF;AAAA,MACA,IAAI,SAAS;AAAA,QACX,OAAO,EAAE,SAAS,WAAW,QAAQ;AAAA,MACvC;AAAA,MAEA,MAAM,IAAI,mBACR,+CAA+C,+BAA+B,MAAM,QAAQ,0DAC9F;AAAA,IACF;AAAA,IAEA,IAAI,CAAC,MAAM,aAAa,oBAAoB;AAAA,MAC1C,MAAM,UAAU,MAAM,KAAK,qBACzB,MAAM,SACN,MAAM,SACN,MAAM,oBAAoB,KAC5B;AAAA,MACA,IAAI,MAAM,4BAA4B,WAAW;AAAA,QAC/C,KAAK,4BAA4B;AAAA,UAC/B,WAAW,MAAM,QAAQ;AAAA,UACzB,yBAAyB,MAAM;AAAA,UAC/B,uBAAuB,SAAS,aAAa;AAAA,UAC7C,WAAW,MAAM,uBAAuB;AAAA,QAC1C,CAAC;AAAA,MACH;AAAA,MAIA,KAAK,SAAS,aAAa,UAAU,MAAM,mBAAmB;AAAA,QAC5D,MAAM,IAAI,kBACR,2BAA2B,MAAM,QAAQ,4DAC3C;AAAA,MACF;AAAA,MAEA,OAAO;AAAA,QACL,SAAS;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAAA,IAEA,IAAI,MAAM,6BAA6B,MAAM,yBAAyB;AAAA,MACpE,MAAM,IAAI,mBACR,+CAA+C,MAAM,QAAQ,sEAC/D;AAAA,IACF;AAAA,IAEA,MAAM,IAAI,mBACR,+CAA+C,MAAM,QAAQ,4EAC/D;AAAA;AAAA,QAGY,eAAe,CAC3B,OAIiC;AAAA,IACjC,MAAM,OAAO,MAAM,MAAM,QAAQ;AAAA,IACjC,MAAM,SAAS,MAAM,6BAA6B;AAAA,MAChD,SAAS,KAAK;AAAA,MACd,SAAS,MAAM;AAAA,MACf,SAAS,MAAM,MAAM;AAAA,MACrB;AAAA,MACA,mBAAmB,gBAAgB,MAAM,gBAAgB;AAAA,MACzD,kBAAkB,MAAM;AAAA,IAC1B,CAAC;AAAA,IAED,IAAI,OAAO,mBAAmB,MAAM,aAAa;AAAA,MAC/C,MAAM,IAAI,mBACR,4CAA4C,MAAM,MAAM,QAAQ,gBAAgB,MAAM,wCAAwC,OAAO,8CACvI;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,QAGK,iBAAiB,CAC7B,OACA,UACA,UACA,SACe;AAAA,IAOf,MAAM,6BAA6B,6BAA4B,MAAM,OAAO;AAAA,IAC5E,MAAM,WAA+B;AAAA,MACnC,MAAM;AAAA,MACN,WAAW,MAAM,QAAQ;AAAA,MACzB;AAAA,MACA,MAAM,MAAM;AAAA,MACZ,UAAU,MAAM,WAAW,gBAAgB,MAAM,QAAQ,IAAI;AAAA,MAC7D,QAAQ,MAAM,SAAS,gBAAgB,MAAM,MAAM,IAAI;AAAA,SACnD,SAAS,SAAS,UAAU,EAAE,UAAU,SAAS,MAAM,IAAI,CAAC;AAAA,SAC5D,+BAA+B,OAC/B,EAAE,4BAA4B,CAAC,GAAG,0BAA0B,EAAE,IAC9D,CAAC;AAAA,SACD,YAAY,YAAY,CAAC,IAAI,EAAE,SAAS,cAAc,OAAO,EAAE;AAAA,IACrE;AAAA,IAEA,MAAM,MAAM,QAAQ,IAClB,QAAQ,gBAAgB,cAAc,KAAK,OAAO,CAAC,wBAAwB,eACzE,MACF,MAAM,eAAe,MAAM,aAAa,oBAAoB,eAC1D,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC,CACnC,IACF;AAAA;AAAA,QAgBY,UAAU,CAAC,OAAgE;AAAA,IACvF,MAAM,QAAQ,mBAAmB,KAAK,SAAS,uBAAuB,MAAM,QAAQ,EAAE,CAAC;AAAA,IACvF,MAAM,iBACJ,MAAM,QAAQ,gBAAgB,YAAY,SAAS,eAAe,MAAM,QAAQ,WAAW;AAAA,IAC7F,MAAM,MAAM,QAAQ,IAAI,oBAAoB,YAAY,gBAAgB;AAAA;AAAA,EAIlE,kBAAkB,CACxB,OACA,eACA,SACS;AAAA,IACT,IAAI,CAAC,eAAe;AAAA,MAClB,OAAO,CAAC,MAAM;AAAA,IAChB;AAAA,IAEA,OACE,MAAM,SAAS,WACf,4BAA4B,eAAe;AAAA,MACzC,WAAW,MAAM,QAAQ;AAAA,MACzB,QAAQ,MAAM,QAAQ;AAAA,MACtB,UAAU,MAAM;AAAA,MAChB,QAAQ,MAAM;AAAA,MACd;AAAA,IACF,CAAC;AAAA;AAAA,QAUS,2BAA2B,CACvC,OACwC;AAAA,IACxC,QAAQ,YAAY,kBAClB,MAAM,KAAK,UAAU,yCAAyC,MAAM,SAAS,MAAM,OAAO;AAAA,IAE5F,IAAI,iBAAiB,OAAO,eAAe,cAAc,SAAS,CAAC,IAAI,OAAO,UAAU,GAAG;AAAA,MACzF,MAAM,IAAI,kBACR,2BAA2B,MAAM,QAAQ,4DAC3C;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,QAGK,oBAAoB,CAChC,SACA,YACA,kBACgC;AAAA,IAChC,MAAM,gBAAgB,MAAM,KAAK,UAAU,8BAA8B,SAAS,UAAU;AAAA,IAC5F,IAAI,eAAe;AAAA,MACjB,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,kBAAkB;AAAA,MACpB,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,IAAI,mBACR,kEAAkE,WAAW,sCAC/E;AAAA;AAAA,QAGY,mBAAmB,CAAC,SAA4C;AAAA,IAC5E,IAAI;AAAA,MACF,MAAM,QAAQ,IAAI,UAAU;AAAA,MAC5B,MAAM;AAAA;AAAA,QAWI,uBAAuB,CACnC,OACoD;AAAA,IACpD,IACE,MAAM,SAAS,cACf,MAAM,4BAA4B,aAClC,CAAC,gBAAgB,KAAK,QAAQ,OAAO,GACrC;AAAA,MACA,MAAM,MAAM,QAAQ,IAAI,mBAAmB;AAAA,MAC3C;AAAA,IACF;AAAA,IAEA,OAAO,gCAAgC;AAAA,MACrC,SAAS,KAAK;AAAA,MACd,SAAS,MAAM;AAAA,MACf,WAAW,MAAM,QAAQ;AAAA,MACzB,QAAQ,MAAM;AAAA,MACd,mBAAmB,MACjB,KAAK,UAAU,yCAAyC,MAAM,SAAS,MAAM,OAAO;AAAA,IACxF,CAAC;AAAA;AAAA,QAGW,uBAAuB,CAAC,SAAqD;AAAA,IAEzF,OAAO,OAAO,MAAM,QAAQ,MAC1B,kBAAkB,gBAAgB,cAAc,KAAK,OAAO,CAAC,6BAC/D;AAAA,IACA,IAAI,QAAQ,aAAa,IAAI,OAAO,QAAQ,IAAI,OAAO,WAAW;AAAA,MAChE,OAAO;AAAA,IACT;AAAA,IAEA,OAAO,OAAO,cAAc,KAAK,IAAI,CAAC;AAAA;AAAA,QAG1B,wBAAwB,CACpC,SACA,WACA,UACA,YACwB;AAAA,IACxB,IAAI,eAAe,WAAW;AAAA,MAC5B,0BAAyB,UAAU;AAAA,IACrC;AAAA,IAEA,MAAM,0BAA0B,0BAC9B,KAAK,SACL,2BACF;AAAA,IACA,MAAM,WAAW,eAAe,YAAY,KAAK,uBAAuB;AAAA,IACxE,MAAM,WAAW,eAAe,YAAY,8BAA8B;AAAA,IAC1E,MAAM,OAAO,MAAM,QAAQ,MAAM;AAAA;AAAA,aAExB;AAAA,QACL;AAAA,QACA;AAAA,KACH;AAAA,IAED,WAAW,OAAO,MAAM;AAAA,MACtB,MAAM,WAAW,oBAAoB,IAAI,iBAAiB;AAAA,MAC1D,IAAI,UAAU,cAAc,aAAa,SAAS,aAAa,UAAU;AAAA,QACvE,OAAO,OAAO,cAAc,KAAK,aAAa,CAAC;AAAA,MACjD;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,QAGK,iBAAiB,CAC7B,SACA,WACA,UACA,yBACA,0BACwB;AAAA,IACxB,IAAI,6BAA6B,QAAQ,6BAA6B,yBAAyB;AAAA,MAC7F,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,aAAa,MAAM,KAAK,yBAC5B,SACA,WACA,UACA,wBACF;AAAA,IACA,IAAI,eAAe,MAAM;AAAA,MACvB,OAAO;AAAA,IACT;AAAA,IAIA,OAAO,KAAK,yBAAyB,SAAS,WAAW,QAAQ;AAAA;AAAA,EAG3D,2BAA2B,CAAC,OAK3B;AAAA,IACP,IAAI,MAAM,4BAA4B,WAAW;AAAA,MAC/C;AAAA,IACF;AAAA,IAEA,IAAI,MAAM,0BAA0B,MAAM,yBAAyB;AAAA,MACjE,MAAM,IAAI,sBACR,6BAA6B,MAAM,iCAAiC,MAAM,wCAAwC,MAAM,2BAA2B,mBAAmB,MAAM,yBAAyB,UACvM;AAAA,IACF;AAAA;AAEJ;AAyBA,SAAS,cAAc,CACrB,OACA,cACA,SACS;AAAA,EACT,IAAI,CAAC,aAAa,sBAAsB,aAAa,gBAAgB;AAAA,IACnE,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,MAAM,SAAS,YAAY;AAAA,IAC7B,OAAO;AAAA,EACT;AAAA,EAEA,OACE,6BAA4B,MAAM,OAAO,MAAM,QAC/C,oBAAoB,MAAM,UAAU,OAAO;AAAA;AAe/C,SAAS,wBAAwB,CAC/B,OACA,cACS;AAAA,EACT,IAAI,CAAC,aAAa,kBAAkB;AAAA,IAClC,OAAO;AAAA,EACT;AAAA,EAEA,OACE,MAAM,4BAA4B,aAClC,MAAM,SAAS,YACf,6BAA4B,MAAM,OAAO,MAAM;AAAA;AAKnD,SAAS,mBAAmB,CAC1B,UACA,SACS;AAAA,EACT,IAAI,YAAY,WAAW;AAAA,IAEzB,OAAO,UAAU,SAAS;AAAA,EAC5B;AAAA,EAEA,IAAI,aAAa,SAAS;AAAA,IACxB,OAAO;AAAA,EACT;AAAA,EAEA,OAAO,QAAQ,KAAK,SAAS,KAAK,OAAO,OAAO,QAAQ,OAAO,EAAE,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC;AAAA;AAGjG,SAAS,cAAc,CACrB,OACA,cACA,eACgB;AAAA,EAIhB,IAAI,MAAM,SAAS,YAAY,MAAM,4BAA4B,WAAW;AAAA,IAC1E,OAAO,EAAE,MAAM,UAAU;AAAA,EAC3B;AAAA,EAEA,IAAI,aAAa,kBAAkB,SAAS,SAAS;AAAA,IACnD,OAAO,aAAa;AAAA,EACtB;AAAA,EAEA,IAAI,MAAM,SAAS,YAAY,kBAAkB,MAAM;AAAA,IACrD,OAAO,EAAE,MAAM,SAAS,OAAO,aAAa,eAAe;AAAA,EAC7D;AAAA,EAEA,OAAO,EAAE,MAAM,UAAU;AAAA;AAG3B,SAAS,yBAAwB,CAAC,YAA0B;AAAA,EAC1D,IAAI,CAAC,QAAQ,KAAK,UAAU,GAAG;AAAA,IAC7B,MAAM,IAAI,mBAAiB,gDAAgD,cAAc;AAAA,EAC3F;AAAA;AAOF,IAAM,0BAA0B,IAAI;AAEpC,eAAe,qBAAwB,CACrC,SACA,KACY;AAAA,EACZ,MAAM,MAAM,4BAA4B,OAAO;AAAA,EAC/C,IAAI,QAAQ,WAAW;AAAA,IACrB,OAAO,IAAI;AAAA,EACb;AAAA,EAEA,MAAM,WAAW,wBAAwB,IAAI,GAAG,KAAK,QAAQ,QAAQ;AAAA,EACrE,MAAM,QAAQ,SAAS,MAAM,MAAM,EAAE;AAAA,EACrC,IAAI;AAAA,EACJ,MAAM,OAAO,IAAI,QAAc,CAAC,YAAY;AAAA,IAC1C,UAAU;AAAA,GACX;AAAA,EACD,MAAM,UAAU,MAAM,KAAK,MAAM,IAAI;AAAA,EACrC,wBAAwB,IAAI,KAAK,OAAO;AAAA,EAExC,MAAM;AAAA,EACN,IAAI;AAAA,IACF,OAAO,MAAM,IAAI;AAAA,IACjB,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,IAAI,wBAAwB,IAAI,GAAG,MAAM,SAAS;AAAA,MAChD,wBAAwB,OAAO,GAAG;AAAA,IACpC;AAAA;AAAA;;;AK5zBG,MAAM,gBAAwD;AAAA,EAC1D,WAAW,EAAE,IAAI,YAAY,SAAS,MAAM;AAAA,EAC5C,iBAAiB;AAAA,EACjB;AAAA,EAEQ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEjB,WAAW,CAAC,SAAiC;AAAA,IAC3C,MAAM,oBAA4C;AAAA,SAC7C;AAAA,MACH,OAAO,QAAQ,SAAS;AAAA,MACxB,mBAAmB,QAAQ,qBAAqB;AAAA,MAChD,UAAU,QAAQ,YAAY;AAAA,MAC9B,QAAQ;AAAA,WACH,QAAQ;AAAA,QACX,MAAM,QAAQ,QAAQ,QAAQ;AAAA,MAChC;AAAA,IACF;AAAA,IACA,KAAK,cAAc,IAAI,0BAA0B,iBAAiB;AAAA,IAClE,KAAK,WAAW,IAAI,uBAAuB,mBAAmB,KAAK,WAAW;AAAA,IAC9E,KAAK,iBAAiB,IAAI,uBACxB,mBACA,KAAK,aACL,KAAK,QACP;AAAA,IACA,KAAK,cAAc,IAAI,oBACrB,mBACA,KAAK,aACL,KAAK,cACP;AAAA,IACA,KAAK,OAAO,IAAI,kBAAkB,mBAAmB,KAAK,aAAa,KAAK,cAAc;AAAA,IAC1F,KAAK,UAAU,IAAI,qBACjB,mBACA,KAAK,aACL,KAAK,cACP;AAAA,IACA,KAAK,SAAS,IAAI,yBAChB,mBACA,KAAK,aACL,KAAK,UACL,KAAK,cACP;AAAA,IACA,KAAK,MAAM,IAAI,oBACb,mBACA,KAAK,aACL,KAAK,UACL,KAAK,gBACL,KAAK,MACP;AAAA;AAAA,QAGI,aAAa,CAAC,YAA2D;AAAA,IAC7E,OAAO,KAAK,SAAS,cAAc,YAAY,CAAC,SAAS,YACvD,KAAK,eAAe,yCAAyC,SAAS,OAAO,CAC/E;AAAA;AAAA,QAGI,kCAAkC,CACtC,aACe;AAAA,IACf,MAAM,KAAK,SAAS,mCAAmC,WAAW;AAAA;AAAA,QAG9D,UAAU,CAAC,WAAsD;AAAA,IACrE,OAAO,KAAK,SAAS,WAAW,SAAS;AAAA;AAAA,QAGrC,YAAY,GAA0C;AAAA,IAC1D,OAAO,KAAK,SAAS,aAAa;AAAA;AAAA,QAG9B,uBAAuB,CAC3B,YACyC;AAAA,IACzC,OAAO,KAAK,eAAe,wBAAwB,UAAU;AAAA;AAAA,QAGzD,YAAY,CAAC,WAAmB,OAAoD;AAAA,IACxF,OAAO,KAAK,eAAe,aAAa,WAAW,KAAK;AAAA;AAAA,QAGpD,UAAU,CAAC,OAA0D;AAAA,IACzE,OAAO,KAAK,OAAO,WAAW,KAAK;AAAA;AAAA,QAG/B,UAAU,CAAC,OAA0D;AAAA,IACzE,OAAO,KAAK,OAAO,WAAW,KAAK;AAAA;AAAA,QAG/B,gBAAgB,CAAC,WAAmD;AAAA,IACxE,OAAO,KAAK,eAAe,iBAAiB,SAAS;AAAA;AAAA,QAGjD,UAAU,CAAC,WAAmB,WAAmD;AAAA,IACrF,OAAO,KAAK,eAAe,WAAW,WAAW,SAAS;AAAA;AAAA,QAGtD,uBAAuB,CAC3B,OACqC;AAAA,IACrC,OAAO,KAAK,eAAe,wBAAwB,KAAK;AAAA;AAAA,EAG1D,QAAQ,CAAC,OAAwD;AAAA,IAC/D,OAAO,KAAK,KAAK,SAAS,KAAK;AAAA;AAAA,EAGjC,WAAW,CAAC,OAAgE;AAAA,IAC1E,OAAO,KAAK,QAAQ,YAAY,KAAK;AAAA;AAAA,QAGjC,cAAc,CAAC,SAA0E;AAAA,IAC7F,OAAO,KAAK,YAAY,eAAe,OAAO;AAAA;AAAA,QAO1C,KAAK,GAAkB;AAAA,IAC3B,MAAM,KAAK,YAAY,MAAM;AAAA;AAEjC;",
47
- "debugId": "9F26B0918A26BCC464756E2164756E21",
46
+ "mappings": "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",
47
+ "debugId": "8FEE4C4A10B2BA3064756E2164756E21",
48
48
  "names": []
49
49
  }