@bitcobblers/wod-wiki-engine 0.43.2150 → 0.43.2152

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/pack.ts","../src/store.ts","../src/ir.ts","../src/exchange.ts","../src/version.ts","../src/seed/contract.ts","../src/seed/validation.ts","../src/seed/runtime.ts"],"names":["blockContentId","lines","validateNoteBlocks"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Language Pack API — umbrella sugar over per-package slices\n *\n * Implements docs/adr/language-pack-api.md.\n * Provides defineLanguagePack() factory and registerLanguagePack() fan-out\n * into core tag identity, lang dialect stack, and analytics registries.\n */\n\nimport type { IDialect } from '@bitcobblers/wod-wiki-core';\nimport type { IRealtimeProcessor, ISummaryProcessor } from '@bitcobblers/wod-wiki-lang';\nimport {\n dialectRegistry,\n realtimeProcessorRegistry,\n summaryProcessorRegistry,\n} from '@bitcobblers/wod-wiki-lang';\n\nexport interface LanguagePackIdentity {\n id?: string;\n name: string;\n tags?: readonly string[];\n aliases?: readonly string[];\n runnable?: boolean;\n}\n\nexport interface LanguagePackLangSlice {\n analyzer?: new () => IDialect;\n analytics?: ReadonlyArray<new () => IRealtimeProcessor | ISummaryProcessor>;\n}\n\nexport interface LanguagePackUiSlice {\n widgetBlock?: unknown;\n}\n\nexport interface LanguagePack {\n identity?: LanguagePackIdentity;\n lang?: LanguagePackLangSlice;\n ui?: LanguagePackUiSlice;\n}\n\nconst activePacks = new Map<string, LanguagePack>();\n\nexport function defineLanguagePack(pack: LanguagePack): LanguagePack {\n return pack;\n}\n\nexport function registerLanguagePack(pack: LanguagePack): void {\n const packId = pack.identity?.id ?? pack.identity?.name ?? 'anonymous-pack';\n activePacks.set(packId, pack);\n\n if (pack.lang?.analyzer) {\n const AnalyzerCtor = pack.lang.analyzer;\n const instance = new AnalyzerCtor();\n dialectRegistry.register(instance);\n }\n\n if (pack.lang?.analytics) {\n for (const ProcessorCtor of pack.lang.analytics) {\n const instance = new ProcessorCtor();\n if ('processOutput' in instance) {\n realtimeProcessorRegistry.register(instance as IRealtimeProcessor);\n }\n if ('processSummary' in instance) {\n summaryProcessorRegistry.register(instance as ISummaryProcessor);\n }\n }\n }\n}\n\nexport function unregisterLanguagePack(packOrId: LanguagePack | string): void {\n const packId = typeof packOrId === 'string'\n ? packOrId\n : (packOrId.identity?.id ?? packOrId.identity?.name ?? 'anonymous-pack');\n\n const pack = activePacks.get(packId);\n activePacks.delete(packId);\n\n if (pack?.lang?.analyzer) {\n const instance = new pack.lang.analyzer();\n dialectRegistry.unregister(instance.id);\n } else if (typeof packOrId === 'string') {\n dialectRegistry.unregister(packOrId);\n }\n\n if (pack?.lang?.analytics) {\n for (const ProcessorCtor of pack.lang.analytics) {\n const instance = new ProcessorCtor();\n if ('processOutput' in instance) {\n realtimeProcessorRegistry.unregister((instance as IRealtimeProcessor).id);\n }\n if ('processSummary' in instance) {\n summaryProcessorRegistry.unregister((instance as ISummaryProcessor).id);\n }\n }\n }\n}\n\nexport function listLanguagePacks(): LanguagePack[] {\n return Array.from(activePacks.values());\n}\n\nexport function getRegisteredLanguagePacks(): LanguagePack[] {\n return Array.from(activePacks.values());\n}\n","/**\n * In-memory UnifiedEventStore — the state-free store seam for QueryService,\n * the CLI query runner, and the Storybook workbench.\n *\n * One adapter over an in-memory row list:\n * - inMemoryEventStore: the UnifiedEventStore contract (ticket 003)\n */\nimport type { EventRecord } from '@bitcobblers/wod-wiki-core';\nimport type { EventStore } from '@bitcobblers/wod-wiki-wql';\n\nexport function inMemoryEventStore(events: readonly EventRecord[]): EventStore {\n const rows = [...events];\n return {\n getEventsByTimeRange: async (start: number, end: number) =>\n rows.filter((r) => r.timestamp >= start && r.timestamp <= end),\n getEventsByResult: async (resultId: string) =>\n rows.filter((r) => r.resultId === resultId),\n getEventsForNote: async (noteId: string) =>\n rows.filter((r) => r.noteId === noteId),\n getEventsByContent: async (blockContentId: string) =>\n rows.filter((r) => r.blockContentId === blockContentId),\n scanAll: async () => rows,\n appendEvents: async (appended) => { rows.push(...appended); },\n finalizeSummaries: async (resultId, finals) => {\n // Ticket 005: only engine-authored summaries are finalize-owned;\n // user-authored summaries (origin 'user', e.g. wellness) are\n // reconcile-owned and must survive a result finalize.\n for (let i = rows.length - 1; i >= 0; i--) {\n const row = rows[i];\n if (row.resultId === resultId && row.grain === 'summary' && row.origin !== 'user') rows.splice(i, 1);\n }\n rows.push(...finals);\n },\n deleteEvents: async (ids) => {\n const doomed = new Set(ids);\n for (let i = rows.length - 1; i >= 0; i--) {\n if (doomed.has(rows[i].id)) rows.splice(i, 1);\n }\n },\n };\n}\n","/**\n * Pure JSON Intermediate Representation (IR) Schemas & Envelope\n *\n * Implements wayfinder #955 and research asset `docs/research/json-ir-schemas-2026-08-17.md`.\n * Freezes the existing result vocabulary (QueryResult, RowsQueryResult, FindQueryResult,\n * StoredOutputStatement, AnalyticsDataPoint, WorkoutResult, StatementNode) in a\n * versioned envelope safe for JSON round-trips.\n */\n\nimport type {\n ICodeStatement,\n AnalyticsDataPoint,\n Note,\n BlockRevision,\n BlockIndexRow,\n Session,\n StoredOutputStatement,\n WorkoutResults,\n} from '@bitcobblers/wod-wiki-core';\nimport { MetricType } from '@bitcobblers/wod-wiki-core';\nimport type { IScript, IEffort } from '@bitcobblers/wod-wiki-lang';\nimport { getHints } from '@bitcobblers/wod-wiki-lang';\n\nexport type IrKind =\n | 'fact-set'\n | 'result-set'\n | 'note-set'\n | 'corpus'\n | 'query-result'\n | 'find-result'\n | 'rows-result'\n | 'pipeline-result'\n | 'parse-tree'\n | 'execution-log';\n\n/**\n * Universal JSON envelope for all headless IR fixtures and output artifacts.\n */\nexport interface WodWikiIRFile<T> {\n $schema: 'https://wod-wiki.dev/ir/v1.json';\n kind: IrKind;\n generatedAt: number;\n source: string;\n data: T;\n}\n\nexport function createIRFile<T>(\n kind: IrKind,\n data: T,\n optionsOrSource?: string | { source?: string; generatedAt?: number },\n generatedAt?: number,\n): WodWikiIRFile<T> {\n let source = 'wod:headless';\n let genAt = Date.now();\n if (typeof optionsOrSource === 'string') {\n source = optionsOrSource;\n if (generatedAt !== undefined) genAt = generatedAt;\n } else if (optionsOrSource && typeof optionsOrSource === 'object') {\n if (optionsOrSource.source) source = optionsOrSource.source;\n if (optionsOrSource.generatedAt !== undefined) genAt = optionsOrSource.generatedAt;\n }\n return {\n $schema: 'https://wod-wiki.dev/ir/v1.json',\n kind,\n generatedAt: genAt,\n source,\n data,\n };\n}\n\nexport function isIRFile<T = unknown>(obj: unknown): obj is WodWikiIRFile<T> {\n if (!obj || typeof obj !== 'object') return false;\n const cand = obj as Partial<WodWikiIRFile<T>>;\n return (\n cand.$schema === 'https://wod-wiki.dev/ir/v1.json' &&\n typeof cand.kind === 'string' &&\n typeof cand.generatedAt === 'number' &&\n typeof cand.source === 'string' &&\n 'data' in cand\n );\n}\n\n// ── Parse Tree IR Models (#955) ─────────────────────────────────────────────\n\nexport interface MetricNode {\n type: string;\n image?: string;\n value?: unknown;\n origin?: string;\n}\n\nexport interface StatementNode {\n id: number;\n type: 'statement' | 'duration' | 'rounds' | 'rest' | 'segment' | 'root';\n raw: string;\n from: number;\n to: number;\n metrics: MetricNode[];\n hints?: string[];\n children?: StatementNode[];\n}\n\nexport function statementToNode(stmt: ICodeStatement, idMap: Map<number, ICodeStatement>): StatementNode {\n const meta = stmt.meta;\n const metrics: MetricNode[] = stmt.metrics.toArray().map((m) => ({\n type: m.type as string,\n ...(m.image !== undefined ? { image: m.image } : {}),\n ...(m.value !== undefined ? { value: m.value } : {}),\n ...(m.origin !== undefined ? { origin: m.origin } : {}),\n }));\n\n const raw = meta?.raw ?? '';\n const from = meta?.startOffset ?? 0;\n const to = meta?.endOffset ?? (from + raw.length);\n\n const durationFrag = stmt.metrics.find((m) => m.type === MetricType.Duration || m.type === 'duration');\n const roundsFrag = stmt.metrics.find((m) => m.type === MetricType.Rounds || m.type === 'rounds');\n const type: StatementNode['type'] = durationFrag ? 'duration' : roundsFrag ? 'rounds' : 'statement';\n\n const hints = getHints(stmt);\n\n const childIds = (stmt.children ?? []).flat();\n const children: StatementNode[] = childIds\n .map((cid) => idMap.get(cid))\n .filter((c): c is ICodeStatement => c !== undefined)\n .map((c) => statementToNode(c, idMap));\n\n return {\n id: stmt.id,\n type,\n raw,\n from,\n to,\n metrics,\n ...(hints.length > 0 ? { hints } : {}),\n ...(children.length > 0 ? { children } : {}),\n };\n}\n\n/** Builds a StatementNode tree from a parsed WhiteboardScript. */\nexport function buildStatementTree(script: IScript): StatementNode {\n const idMap = new Map(script.statements.map((s) => [s.id, s]));\n const topLevel = script.statements.filter((s) => s.parent === undefined || !idMap.has(s.parent));\n\n if (topLevel.length === 1 && topLevel[0].children.length > 0) {\n return statementToNode(topLevel[0], idMap);\n }\n\n return {\n id: 0,\n type: 'root',\n raw: script.source,\n from: 0,\n to: script.source.length,\n metrics: [],\n children: topLevel.map((s) => statementToNode(s, idMap)),\n };\n}\n\n// ── Execution Log IR Models (#955) ──────────────────────────────────────────\n\nexport interface ExecutionLog {\n results: WorkoutResults;\n logs: StoredOutputStatement[];\n statements?: StoredOutputStatement[];\n blockKey?: string;\n sourceScript?: string;\n}\n\n// ── Corpus IR Models (#955) ─────────────────────────────────────────────────\n\nexport interface CorpusIRData {\n notes?: Note[];\n revisions?: BlockRevision[];\n blocks?: BlockIndexRow[];\n results?: Session[];\n facts?: AnalyticsDataPoint[];\n efforts?: IEffort[];\n logs?: StoredOutputStatement[];\n tags?: Record<string, string[]>;\n}\n","/**\n * Import / Export exchange formats for notes and sessions.\n *\n * Pure row→string / string→row transforms with NO storage or fs coupling,\n * so the playground website can offer the same downloads/uploads against\n * IndexedDB rows while the CLI uses them over sqlite. Round-trip is a\n * design requirement: every export carries the identity needed to import\n * back into the same database (upsert) or into a clean one (recreate).\n *\n * - Notes export their exact authored source with an identity stamp.\n * `wod parse` adopts the stamp when importing the note.\n * - Sessions → one CSV row per metric (event + summary grains), session\n * fields repeated per row plus one session-only anchor row, so a clean\n * import recreates the session and its events verbatim.\n */\n\nimport { WQL_TYPED_TAG_KEYS } from '@bitcobblers/wod-wiki-wql';\nimport type { EventRecord } from '@bitcobblers/wod-wiki-core';\nimport type { Note, Session } from '@bitcobblers/wod-wiki-storage';\n\n// ---------------------------------------------------------------------------\n// Note markdown composition\n// ---------------------------------------------------------------------------\n\n/** Identity stamped into exported note markdown so imports can find their note. */\nexport const NOTE_ID_FRONTMATTER_KEY = 'wod-note-id';\n\nexport interface NoteIdentity { noteId: string; title?: string }\n\nconst UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\n/** Read the stamped note identity from the leading frontmatter block, if any. */\nexport function extractNoteIdentity(markdown: string): NoteIdentity | undefined {\n const block = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---/.exec(markdown);\n if (!block) return undefined;\n let noteId: string | undefined;\n let title: string | undefined;\n for (const line of block[1].split(/\\r?\\n/)) {\n const kv = line.match(/^([^:]+):\\s*(.*)$/);\n if (!kv) continue;\n const key = kv[1].trim();\n const value = kv[2].trim();\n if (key === NOTE_ID_FRONTMATTER_KEY && UUID_RE.test(value)) noteId = value;\n if (key === 'title' && value) title = value;\n }\n return noteId ? { noteId, title } : undefined;\n}\n\n/** True when a scalar is safe to emit bare in a `key: value` frontmatter line. */\nconst FRONTMATTER_SAFE = /^[^:#\\[\\]{}'\"*&,!?|>%@`\\s][^:#\\[\\]{}\"']*$/;\n\n/**\n * Ensure the leading frontmatter carries `title` + `wod-note-id`. Existing\n * keys are replaced in place; a missing block is prepended. Scalars needing\n * YAML quoting are skipped (the note row title is authoritative in storage).\n */\nexport function injectIdentityFrontmatter(markdown: string, identity: NoteIdentity): string {\n const stamp = (lines: string[]): string[] => {\n const replaceOrInsert = (key: string, value: string | undefined): void => {\n if (value === undefined || !FRONTMATTER_SAFE.test(value)) return;\n const idx = lines.findIndex((l) => l.startsWith(`${key}:`));\n if (idx >= 0) lines[idx] = `${key}: ${value}`;\n else lines.push(`${key}: ${value}`);\n };\n replaceOrInsert('title', identity.title);\n replaceOrInsert(NOTE_ID_FRONTMATTER_KEY, identity.noteId);\n return lines;\n };\n\n const block = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---/.exec(markdown);\n if (block) {\n const newline = markdown.startsWith('---\\r\\n') ? '\\r\\n' : '\\n';\n const lines = stamp(block[1].split(/\\r?\\n/));\n return `---${newline}${lines.join(newline)}${newline}---${markdown.slice(block[0].length)}`;\n }\n const lines = stamp([]);\n return `---\\n${lines.join('\\n')}\\n---\\n\\n${markdown}`;\n}\n\n/** Export the exact authored Note source, with identity for re-import. */\nexport function composeNoteMarkdown(note: Note): string {\n return injectIdentityFrontmatter(note.rawContent, { noteId: note.id, title: note.title });\n}\n\n// ---------------------------------------------------------------------------\n// Frontmatter tags (general + typed: equipment, quality, …)\n// ---------------------------------------------------------------------------\n\nexport interface TypedTagItem { label: string; type?: string }\n\nconst FRONTMATTER_BLOCK_RE = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---/;\n\n/**\n * Minimal frontmatter reader (the corpus subset): `key: scalar`, `key:` +\n * `- item` lists, and inline `[a, b]` lists. Keys are lowercased. Returns {}\n * when no leading block exists.\n */\nexport function readFrontmatterMeta(markdown: string): Record<string, string | string[]> {\n const match = FRONTMATTER_BLOCK_RE.exec(markdown);\n if (!match) return {};\n const meta: Record<string, string | string[]> = {};\n const lines = match[1].split(/\\r?\\n/);\n let currentListKey: string | undefined;\n for (const rawLine of lines) {\n const line = rawLine.trimEnd();\n const item = line.match(/^\\s+-\\s+(.*)$/);\n if (item && currentListKey) {\n (meta[currentListKey] as string[]).push(item[1].trim());\n continue;\n }\n const kv = line.match(/^([^:]+):\\s*(.*)$/);\n if (!kv) continue;\n const key = kv[1].trim().toLowerCase();\n const value = kv[2].trim();\n if (value === '') {\n meta[key] = [];\n currentListKey = key;\n } else if (value.startsWith('[') && value.endsWith(']')) {\n meta[key] = value\n .slice(1, -1)\n .split(',')\n .map((v) => v.trim().replace(/^['\"]|['\"]$/g, ''))\n .filter((v) => v.length > 0);\n currentListKey = undefined;\n } else {\n meta[key] = value;\n currentListKey = undefined;\n }\n }\n return meta;\n}\n\nconst asList = (value: string | string[] | undefined): string[] =>\n Array.isArray(value)\n ? value\n : typeof value === 'string'\n ? value.split(',').map((v) => v.trim()).filter((v) => v.length > 0)\n : [];\n\n/**\n * Extract a note's frontmatter tags: the general `tags:` list plus typed\n * keys (equipment, quality, domain, format, intent by default — the WQL\n * typed-tag vocabulary). Mirrors the playground's\n * `extractTypedFrontmatterTags` (frontmatter.ts) so CLI and app imports\n * classify identically.\n */\nexport function extractTypedTags(\n markdown: string,\n typedKeys: readonly string[] = WQL_TYPED_TAG_KEYS,\n): TypedTagItem[] {\n const meta = readFrontmatterMeta(markdown);\n const results: TypedTagItem[] = asList(meta['tags']).map((label) => ({ label }));\n const metaKeys = Object.keys(meta);\n for (const typeName of typedKeys) {\n if (typeName === 'tags') continue;\n const matchedKey = metaKeys.find((k) => k === typeName.toLowerCase());\n if (!matchedKey) continue;\n for (const label of asList(meta[matchedKey])) {\n results.push({ label, type: typeName });\n }\n }\n return results.filter((t) => t.label.length > 0);\n}\n\n// ---------------------------------------------------------------------------\n// Definition registry (markdown serialization — parsing lives in lang)\n// ---------------------------------------------------------------------------\n\n/**\n * Compose an effort registry row back into corpus-style markdown. Export\n * paths prefer the owning note's raw source (byte-identical); this\n * reconstruction is the fallback for rows without an owner note.\n */\nexport function effortToMarkdown(effort: {\n id: string;\n slug: string;\n label: string;\n aliases?: string[];\n baseAttributes: Record<string, unknown>;\n body?: string;\n}): string {\n const lines = ['---', `id: ${effort.id}`, `slug: ${effort.slug}`, `label: ${effort.label}`];\n if (effort.aliases && effort.aliases.length > 0) {\n lines.push('aliases:');\n for (const alias of effort.aliases) lines.push(` - ${alias}`);\n }\n const attrs = Object.entries(effort.baseAttributes).filter(([, v]) => typeof v === 'number' || typeof v === 'string');\n if (attrs.length > 0) {\n lines.push('baseAttributes:');\n for (const [k, v] of attrs) lines.push(` ${k}: ${String(v)}`);\n }\n lines.push('---', '');\n return `${lines.join('\\n')}\\n${(effort.body ?? '').trim()}`.trimEnd() + '\\n';\n}\n\n/** Compose an equipment registry row back into corpus-style markdown (effortToMarkdown's equipment twin). */\nexport function equipmentToMarkdown(equipment: {\n id: string;\n slug: string;\n label: string;\n aliases?: string[];\n body?: string;\n}): string {\n const lines = ['---', 'type: equipment', `id: ${equipment.id}`, `slug: ${equipment.slug}`, `label: ${equipment.label}`];\n if (equipment.aliases && equipment.aliases.length > 0) {\n lines.push('aliases:');\n for (const alias of equipment.aliases) lines.push(` - ${alias}`);\n }\n lines.push('---', '');\n return `${lines.join('\\n')}\\n${(equipment.body ?? '').trim()}`.trimEnd() + '\\n';\n}\n\n// ---------------------------------------------------------------------------\n// Equipment catalog (typed tags, CSV round-trip)\n// ---------------------------------------------------------------------------\n\n/** One-label-per-row CSV (header `label`) for equipment catalogs. */\nexport function equipmentToCsv(labels: readonly string[]): string {\n return ['label', ...labels].map((l) => escapeCsvField(l)).join('\\n') + '\\n';\n}\n\nexport function csvToEquipmentLabels(csv: string): string[] {\n const lines = splitCsvRecords(csv);\n if (lines.length === 0) return [];\n const header = parseCsvLine(lines[0]);\n const labelIdx = header[0] === 'label' ? 0 : -1;\n const start = labelIdx >= 0 ? 1 : 0; // tolerate headerless files\n const labels: string[] = [];\n for (const line of lines.slice(start)) {\n const cells = parseCsvLine(line);\n const label = (labelIdx >= 0 ? cells[0] : cells.join(',')).trim();\n if (label) labels.push(label);\n }\n return [...new Set(labels)];\n}\n\n// ---------------------------------------------------------------------------\n// Session CSV\n// ---------------------------------------------------------------------------\n\ntype Metric = {\n type?: string;\n value?: unknown;\n unit?: string;\n image?: string;\n origin?: string;\n metadata?: unknown;\n name?: string;\n};\n\nconst SESSION_HEADER = [\n 'sessionId', 'noteId', 'blockId', 'blockVersion', 'blockContentId',\n 'origin', 'status', 'startTime', 'endTime', 'duration', 'completed', 'sessionCreatedAt', 'sessionExtraJson',\n] as const;\n\nconst EVENT_HEADER = [\n 'eventId', 'grain', 'outputType', 'timestamp', 'pageId', 'effortSlug',\n 'eventBlockId', 'eventBlockVersion', 'eventBlockContentId', 'eventOrigin',\n 'timeSpan', 'sourceBlockKey', 'sourceStatementId', 'line', 'text', 'dialect',\n 'stackLevel', 'completionReason', 'representationKind',\n 'metricType', 'metricValue', 'metricUnit', 'metricImage', 'metricOrigin',\n 'metricMetadata', 'metricTemporal',\n // Verbatim JSON backstops: make the machine round-trip lossless across\n // schema fields that have no dedicated spreadsheet column. Explicit cells\n // above still win on import, so hand-edited values are honored.\n 'metricJson', 'eventExtraJson',\n] as const;\n\nexport const SESSION_CSV_HEADER = [...SESSION_HEADER, ...EVENT_HEADER];\n\nfunction escapeCsvField(field: unknown): string {\n if (field === undefined || field === null) return '';\n const str = typeof field === 'object' ? JSON.stringify(field) : String(field);\n if (str.includes(',') || str.includes('\"') || str.includes('\\n') || str.includes('\\r')) {\n return `\"${str.replace(/\"/g, '\"\"')}\"`;\n }\n return str;\n}\n\nconst metricValueToCell = (value: unknown): string => {\n if (value === undefined || value === null) return '';\n if (typeof value === 'object') return JSON.stringify(value);\n return String(value);\n};\n\nconst metricValueFromCell = (cell: string): unknown => {\n if (cell === '') return undefined;\n if (/^-?\\d+(\\.\\d+)?$/.test(cell)) return Number(cell);\n if (cell === 'true' || cell === 'false') return cell === 'true';\n if (cell.startsWith('{') || cell.startsWith('[')) {\n try {\n return JSON.parse(cell);\n } catch {\n return cell;\n }\n }\n return cell;\n};\n\nfunction sessionCells(session: Session): string[] {\n return [\n session.id, session.noteId, session.blockId, session.blockVersion,\n session.blockContentId, session.origin, session.status,\n session.startTime, session.endTime, session.duration, session.completed,\n session.createdAt, JSON.stringify(session),\n ].map(escapeCsvField);\n}\n\nfunction metricCells(event: EventRecord, metric: Metric, index: number): string[] {\n return [\n event.id, event.grain, event.outputType, event.timestamp, event.pageId, event.effortSlug,\n event.blockId, event.blockVersion, event.blockContentId, event.origin,\n event.timeSpan, event.sourceBlockKey, event.sourceStatementId, event.line, event.text, event.dialect,\n event.stackLevel, event.completionReason, event.representationKind,\n metric.type, metricValueToCell(metric.value), metric.unit, metric.image, metric.origin,\n metric.metadata === undefined ? '' : JSON.stringify(metric.metadata),\n event.metricTemporal?.[index] === undefined ? '' : JSON.stringify(event.metricTemporal[index]),\n JSON.stringify(metric),\n ].map(escapeCsvField);\n}\n\n/** Event fields with no dedicated column, serialized verbatim (minus the\n * metrics array, which gets its own columns). metricTemporal is kept: the\n * importer discards it and rebuilds from the per-row column, so an empty\n * array still round-trips where no rows carry temporals. Returns the\n * CSV-escaped cell. */\nfunction eventExtraCells(event: EventRecord): string {\n const { metrics: _metrics, ...rest } = event;\n return escapeCsvField(JSON.stringify(rest));\n}\n\n/**\n * Serialize a session + its events to CSV — one row per metric, preceded by\n * one session anchor row (empty event columns). Import with\n * {@link csvToSessionRows}.\n */\nexport function sessionToCsv(session: Session, events: readonly EventRecord[]): string {\n const lines = [SESSION_CSV_HEADER.join(',')];\n lines.push([...sessionCells(session), ...EVENT_HEADER.map(() => '')].join(','));\n const ordered = [...events].sort((a, b) => a.id.localeCompare(b.id));\n for (const event of ordered) {\n const extra = eventExtraCells(event);\n const metrics = event.metrics ?? [];\n if (metrics.length === 0) {\n lines.push([...sessionCells(session), ...metricCells(event, { type: '' }, 0), extra].join(','));\n continue;\n }\n for (let i = 0; i < metrics.length; i++) {\n lines.push([...sessionCells(session), ...metricCells(event, metrics[i], i), extra].join(','));\n }\n }\n return lines.join('\\n') + '\\n';\n}\n\n/** Parse one CSV line, honoring double-quoted fields (RFC 4180 subset). */\nexport function parseCsvLine(line: string): string[] {\n const cells: string[] = [];\n let current = '';\n let quoted = false;\n for (let i = 0; i < line.length; i++) {\n const ch = line[i];\n if (quoted) {\n if (ch === '\"') {\n if (line[i + 1] === '\"') {\n current += '\"';\n i += 1;\n } else {\n quoted = false;\n }\n } else {\n current += ch;\n }\n } else if (ch === '\"' && current === '') {\n quoted = true;\n } else if (ch === ',') {\n cells.push(current);\n current = '';\n } else {\n current += ch;\n }\n }\n cells.push(current);\n return cells;\n}\n\n/** Split CSV into records on newlines that are NOT inside quoted fields. */\nexport function splitCsvRecords(csv: string): string[] {\n const records: string[] = [];\n let current = '';\n let quoted = false;\n for (let i = 0; i < csv.length; i++) {\n const ch = csv[i];\n if (ch === '\"') {\n if (quoted && csv[i + 1] === '\"') {\n current += '\"\"';\n i += 1;\n continue;\n }\n quoted = !quoted;\n current += ch;\n } else if (!quoted && (ch === '\\n' || ch === '\\r')) {\n if (ch === '\\r' && csv[i + 1] === '\\n') i += 1;\n if (current.length > 0) records.push(current);\n current = '';\n } else {\n current += ch;\n }\n }\n if (current.length > 0) records.push(current);\n return records;\n}\n\nexport interface SessionImportRows {\n session: Session;\n events: EventRecord[];\n}\n\nconst num = (cell: string): number | undefined => (cell === '' ? undefined : Number(cell));\nconst nonempty = (cell: string): string | undefined => (cell === '' ? undefined : cell);\n\nfunction jsonCell<T>(cell: string): T | undefined {\n if (!cell) return undefined;\n try {\n return JSON.parse(cell) as T;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Parse {@link sessionToCsv} output back into a session + event rows.\n * The session anchor row may be absent (pure event export) as long as\n * session columns are present on the event rows.\n */\nexport function csvToSessionRows(csv: string): SessionImportRows {\n const lines = splitCsvRecords(csv);\n if (lines.length < 2) throw new Error('[wod import] Session CSV has no data rows');\n const header = parseCsvLine(lines[0]);\n if (header.some((name) => /segment/i.test(name))) {\n throw new Error('[wod import] Incompatible Session CSV segment pins; blockId/blockVersion are required');\n }\n const col = (name: string): number => {\n const idx = header.indexOf(name);\n if (idx < 0) throw new Error(`[wod import] Session CSV missing column \"${name}\"`);\n return idx;\n };\n const at = (cells: string[], name: string): string => cells[col(name)] ?? '';\n\n const eventRows = new Map<string, EventRecord>();\n let session: Session | undefined;\n\n const ensureSession = (cells: string[]): Session => {\n const id = at(cells, 'sessionId');\n const noteId = at(cells, 'noteId');\n const blockId = at(cells, 'blockId');\n const blockVersion = Number(at(cells, 'blockVersion'));\n if (!id || !noteId || !blockId || !Number.isSafeInteger(blockVersion) || blockVersion < 1) {\n throw new Error('[wod import] Session CSV requires sessionId, noteId, blockId and positive blockVersion');\n }\n if (session) {\n if (session.id !== id || session.noteId !== noteId || session.blockId !== blockId || session.blockVersion !== blockVersion) {\n throw new Error('[wod import] Session CSV contains inconsistent source pins');\n }\n return session;\n }\n const extra = jsonCell<Partial<Session>>(at(cells, 'sessionExtraJson')) ?? {};\n if ('segmentId' in extra || 'segmentVersion' in extra || 'version' in extra || 'rawContent' in extra || 'data' in extra) {\n throw new Error('[wod import] Incompatible Session CSV source snapshot or segment pin');\n }\n session = {\n ...extra,\n id,\n noteId,\n blockId,\n blockVersion,\n blockContentId: at(cells, 'blockContentId') || undefined,\n origin: (at(cells, 'origin') || undefined) as Session['origin'],\n status: (at(cells, 'status') || undefined) as Session['status'],\n startTime: Number(at(cells, 'startTime') || 0),\n endTime: Number(at(cells, 'endTime') || 0),\n duration: Number(at(cells, 'duration') || 0),\n completed: at(cells, 'completed') === 'true',\n createdAt: Number(at(cells, 'sessionCreatedAt') || 0),\n };\n if (![session.startTime, session.endTime, session.duration, session.createdAt].every(Number.isFinite)) {\n throw new Error('[wod import] Session CSV lifecycle values must be finite numbers');\n }\n return session;\n };\n\n for (const line of lines.slice(1)) {\n const cells = parseCsvLine(line);\n if (cells.length === 1 && cells[0] === '') continue;\n const currentSession = ensureSession(cells);\n const eventId = at(cells, 'eventId');\n if (!eventId) continue; // session anchor row\n\n let event = eventRows.get(eventId);\n if (!event) {\n // eventExtraJson is the verbatim backstop; explicit spreadsheet cells\n // override it so hand-edited values are honored on import.\n const extra = jsonCell<Record<string, unknown>>(at(cells, 'eventExtraJson')) ?? {};\n if ('segmentId' in extra || 'segmentVersion' in extra) {\n throw new Error('[wod import] Incompatible Session CSV event segment pins');\n }\n const blockId = nonempty(at(cells, 'eventBlockId'));\n const blockVersion = num(at(cells, 'eventBlockVersion'));\n if (blockId !== currentSession.blockId || blockVersion !== currentSession.blockVersion) {\n throw new Error('[wod import] Event source pin differs from Session source pin');\n }\n event = {\n ...extra,\n id: eventId,\n resultId: currentSession.id,\n noteId: nonempty(at(cells, 'noteId')) ?? (extra.noteId as string | undefined) ?? currentSession.noteId,\n blockContentId: nonempty(at(cells, 'eventBlockContentId')) ?? (extra.blockContentId as string | undefined),\n pageId: nonempty(at(cells, 'pageId')) ?? (extra.pageId as string | undefined),\n origin: (nonempty(at(cells, 'eventOrigin')) ?? extra.origin) as EventRecord['origin'],\n timestamp: Number(at(cells, 'timestamp') || extra.timestamp || 0),\n grain: (nonempty(at(cells, 'grain')) ?? extra.grain ?? 'event') as EventRecord['grain'],\n effortSlug: nonempty(at(cells, 'effortSlug')) ?? (extra.effortSlug as string | undefined),\n outputType: nonempty(at(cells, 'outputType')) ?? (extra.outputType as string | undefined) ?? 'event',\n blockId,\n blockVersion,\n timeSpan: jsonCell(at(cells, 'timeSpan')) ?? (extra.timeSpan as EventRecord['timeSpan']),\n sourceBlockKey: nonempty(at(cells, 'sourceBlockKey')) ?? (extra.sourceBlockKey as string | undefined),\n sourceStatementId: num(at(cells, 'sourceStatementId')) ?? (extra.sourceStatementId as number | undefined),\n line: num(at(cells, 'line')) ?? (extra.line as number | undefined),\n text: nonempty(at(cells, 'text')) ?? (extra.text as string | undefined),\n dialect: nonempty(at(cells, 'dialect')) ?? (extra.dialect as string | undefined),\n stackLevel: num(at(cells, 'stackLevel')) ?? (extra.stackLevel as number | undefined),\n completionReason: nonempty(at(cells, 'completionReason')) ?? (extra.completionReason as string | undefined),\n representationKind: (nonempty(at(cells, 'representationKind')) ??\n extra.representationKind) as EventRecord['representationKind'],\n metrics: [],\n // Rebuild anchors from metric rows while preserving an authored empty array.\n metricTemporal: Array.isArray(extra.metricTemporal) ? [] : undefined,\n };\n eventRows.set(eventId, event);\n }\n\n const metricType = at(cells, 'metricType');\n if (!metricType) continue; // metrics:[] event row\n // metricJson is the verbatim backstop; explicit cells override it.\n const baseMetric = jsonCell<Metric>(at(cells, 'metricJson')) ?? {};\n const metric: Metric = {\n ...baseMetric,\n type: metricType,\n ...(at(cells, 'metricValue') !== '' ? { value: metricValueFromCell(at(cells, 'metricValue')) } : {}),\n ...(nonempty(at(cells, 'metricUnit')) ? { unit: at(cells, 'metricUnit') } : {}),\n ...(nonempty(at(cells, 'metricImage')) ? { image: at(cells, 'metricImage') } : {}),\n ...(nonempty(at(cells, 'metricOrigin')) ? { origin: at(cells, 'metricOrigin') } : {}),\n ...(at(cells, 'metricMetadata') !== ''\n ? { metadata: jsonCell(at(cells, 'metricMetadata')) }\n : {}),\n };\n (event.metrics as Metric[]).push(metric);\n const temporal = jsonCell<unknown>(at(cells, 'metricTemporal'));\n if (temporal !== undefined) {\n (event.metricTemporal ??= []).push(temporal as NonNullable<EventRecord['metricTemporal']>[number]);\n }\n }\n\n if (!session) throw new Error('[wod import] Session CSV did not contain session columns');\n return { session, events: [...eventRows.values()] };\n}\n","/**\n * Auto-generated build version metadata.\n * Do not edit directly; updated by scripts/stamp-version.ts\n */\nexport const VERSION = '0.43.2150';\nexport const GIT_SHA = 'cd85290';\nexport const BUILD_TIME = '2026-10-21T03:51:03.849Z';\nexport const SEMVER = {\n version: '0.43.2150',\n gitSha: 'cd85290',\n buildTime: '2026-10-21T03:51:03.849Z',\n} as const;\n","import type { BlockEffort, BlockEquipment, BlockIndexRow, NoteBlock } from '@bitcobblers/wod-wiki-core';\nimport { KNOWN_SECTION_WIDGETS } from '@bitcobblers/wod-wiki-core';\n\nexport const SEED_SCHEMA = 9;\nexport const SEED_REGISTERED_WIDGETS = KNOWN_SECTION_WIDGETS;\n\n/** Source and all current derived rows commit as one chunk. */\nexport interface SeedRow {\n path: string;\n content: string;\n blocks: Record<string, NoteBlock>;\n blockIndex: BlockIndexRow[];\n blockEfforts: BlockEffort[];\n blockEquipment: BlockEquipment[];\n}\n\nexport type ChunkKind = 'notes';\nexport interface ManifestChunk {\n id: string;\n path: string;\n sha256: string;\n bytes: number;\n count: number;\n kind?: ChunkKind;\n}\nexport interface SeedManifest {\n name?: string;\n description?: string;\n repositoryUrl?: string;\n schema: number;\n version: number;\n versionLabel?: string;\n commit?: string;\n dirty?: boolean;\n builtAt: string;\n chunks: ManifestChunk[];\n}\nexport type SeedPrecedenceTier = 'core' | 'community' | 'imported' | 'user';\nexport const SEED_PRECEDENCE_RANK: Readonly<Record<SeedPrecedenceTier, number>> = {\n core: 0,\n community: 1,\n imported: 2,\n user: 3,\n};\nexport function seedSourceTier(sourceIdOrMetaKey?: string | null, explicitTier?: SeedPrecedenceTier): SeedPrecedenceTier {\n if (explicitTier) return explicitTier;\n if (!sourceIdOrMetaKey) return 'core';\n if (sourceIdOrMetaKey === 'user') return 'user';\n const id = sourceIdOrMetaKey.startsWith('seed:') ? sourceIdOrMetaKey.slice(5) : sourceIdOrMetaKey;\n if (id === 'core' || id === 'efforts' || id === 'equipment') return 'core';\n if (id === 'community' || id.startsWith('community-') || id === 'common') return 'community';\n return 'imported';\n}\nexport function seedPrecedenceRank(sourceIdOrMetaKey?: string | null, explicitTier?: SeedPrecedenceTier): number {\n return SEED_PRECEDENCE_RANK[seedSourceTier(sourceIdOrMetaKey, explicitTier)];\n}\nexport interface SeedMetaRecord {\n key: string;\n schema: number;\n seedVersion: number;\n builtAt: string;\n importedAt: number;\n chunks: Record<string, { sha256: string; noteIds?: string[] }>;\n claim?: { owner: string; at: number } | null;\n tier?: SeedPrecedenceTier;\n}\nexport const SEED_BROADCAST_CHANNEL = 'wodwiki.seed';\nexport const EFFORTS_CHUNK_ID = 'efforts';\nexport const EQUIPMENT_CHUNK_ID = 'equipment';\nexport const CANVAS_CHUNK_ID = 'canvas';\nexport const DASHBOARDS_CHUNK_ID = 'dashboards';\nexport const TEMPLATE_CHUNK_ID = 'template';\nexport function seedMetaKey(sourceId: string): string { return `seed:${sourceId}`; }\nexport function emptySeedMeta(key: string): SeedMetaRecord {\n return { key, schema: SEED_SCHEMA, seedVersion: 0, builtAt: '', importedAt: 0, chunks: {}, claim: null };\n}\nexport function catalogForChunkId(chunkId: string): string | undefined {\n const value = /^(?:collection|feed)\\.(.+)$/.exec(chunkId)?.[1];\n return value && value !== '_root' ? value : undefined;\n}\nexport function canvasRouteSlug(content: string): string | null {\n const fm = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---/.exec(content);\n if (fm?.[1] && !/^template:\\s*canvas\\s*$/m.test(fm[1])) return null;\n return fm?.[1]?.match(/^route:\\s*(\\S+)\\s*$/m)?.[1]?.replace(/^\\//, '') || null;\n}\nexport function seedNoteSourceId(path: string, content: string, chunkId: string): string | undefined {\n const parts = path.split('/');\n const stem = (parts.at(-1) ?? '').replace(/\\.md$/i, '');\n const under = parts.slice(2).map((p) => p.replace(/\\.md$/i, '')).join('/');\n if (chunkId === CANVAS_CHUNK_ID) return `guides:${canvasRouteSlug(content) ?? under}`;\n if (chunkId === DASHBOARDS_CHUNK_ID) return 'dashboards';\n if (chunkId === EFFORTS_CHUNK_ID) return 'efforts';\n if (chunkId === EQUIPMENT_CHUNK_ID) return 'equipment';\n if (chunkId === TEMPLATE_CHUNK_ID) return 'playground';\n if (chunkId.startsWith('collection.')) {\n const catalog = catalogForChunkId(chunkId);\n return !catalog ? 'collection:_root' : stem.toLowerCase() === 'readme' ? `collection:${catalog}` : `collection:${catalog}/${stem}`;\n }\n if (chunkId.startsWith('feed.')) return `feed:feeds/${under}`;\n return undefined;\n}\n","import { blockContentId, parseDocumentSections, validateNoteBlocks } from '@bitcobblers/wod-wiki-core';\nimport { SEED_REGISTERED_WIDGETS, SEED_SCHEMA, type SeedManifest, type SeedRow } from './contract';\n\nfunction object(value: unknown): value is Record<string, unknown> { return typeof value === 'object' && value !== null && !Array.isArray(value); }\nfunction positive(value: unknown): value is number { return typeof value === 'number' && Number.isSafeInteger(value) && value > 0; }\nfunction nonnegative(value: unknown): value is number { return typeof value === 'number' && Number.isSafeInteger(value) && value >= 0; }\nexport function assertSeedManifest(value: unknown): SeedManifest {\n if (!object(value) || value.schema !== SEED_SCHEMA) throw new Error('Incompatible seed schema; rebuild seed artifacts');\n if (!nonnegative(value.version) || typeof value.builtAt !== 'string' || !Number.isFinite(Date.parse(value.builtAt)) || !Array.isArray(value.chunks)) throw new Error('seed manifest failed shape validation');\n for (const key of ['versionLabel', 'commit', 'name', 'description']) if (value[key] !== undefined && typeof value[key] !== 'string') throw new Error('invalid seed manifest metadata');\n if (value.repositoryUrl !== undefined && (typeof value.repositoryUrl !== 'string' || !/^https:\\/\\//.test(value.repositoryUrl) || new URL(value.repositoryUrl).username || new URL(value.repositoryUrl).password)) throw new Error('invalid seed repository URL');\n if (value.dirty !== undefined && typeof value.dirty !== 'boolean') throw new Error('invalid seed manifest metadata');\n const ids = new Set<string>(), paths = new Set<string>();\n for (const chunk of value.chunks) {\n if (!object(chunk) || typeof chunk.id !== 'string' || !chunk.id || typeof chunk.path !== 'string' || !/^chunks\\/[a-zA-Z0-9._-]+\\.json$/.test(chunk.path) || typeof chunk.sha256 !== 'string' || !/^[0-9a-f]{64}$/.test(chunk.sha256) || !nonnegative(chunk.bytes) || !nonnegative(chunk.count) || (chunk.kind !== undefined && chunk.kind !== 'notes') || ids.has(chunk.id) || paths.has(chunk.path)) throw new Error('seed manifest failed shape validation');\n ids.add(chunk.id); paths.add(chunk.path);\n }\n return value as unknown as SeedManifest;\n}\nexport function assertSeedRows(value: unknown): SeedRow[] {\n if (!Array.isArray(value)) throw new Error('seed chunk is not an array');\n const paths = new Set<string>();\n for (const row of value) {\n if (!object(row) || typeof row.path !== 'string' || !row.path || row.path.startsWith('/') || row.path.split('/').includes('..') || paths.has(row.path) || typeof row.content !== 'string' || !object(row.blocks) || !Array.isArray(row.blockIndex) || !Array.isArray(row.blockEfforts) || !Array.isArray(row.blockEquipment)) throw new Error('seed chunk row failed shape validation');\n paths.add(row.path);\n for (const [id, block] of Object.entries(row.blocks)) {\n if (!object(block) || block.id !== id || !id || block.version !== 1 || block.sourceRevision !== 1 || !nonnegative(block.from) || !positive(block.to) || block.from >= block.to || block.to > row.content.length || !['wod', 'query', 'widget', 'embed'].includes(String(block.kind)) || (block.kind === 'wod' ? !['time', 'log'].includes(String(block.dialect)) : block.dialect !== undefined) || (block.sport !== undefined && typeof block.sport !== 'string')) throw new Error('invalid seed block range or revision');\n }\n validateNoteBlocks(row.content, row.blocks as SeedRow['blocks'], 1, { registeredWidgets: SEED_REGISTERED_WIDGETS });\n const indexed = new Set<string>();\n const sections = parseDocumentSections(row.content, { registeredWidgets: SEED_REGISTERED_WIDGETS });\n for (const projection of row.blockIndex) {\n if (!object(projection) || typeof projection.blockId !== 'string') throw new Error('invalid seed projection');\n const block = row.blocks[projection.blockId];\n if (!object(block) || indexed.has(projection.blockId) || typeof projection.id !== 'string' || typeof projection.noteId !== 'string' || projection.id !== `${projection.noteId}:${projection.blockId}` || projection.blockVersion !== 1 || projection.sourceRevision !== 1 || projection.from !== block.from || projection.to !== block.to || projection.dataType !== block.kind || projection.rawContent !== row.content.slice(Number(block.from), Number(block.to)) || typeof projection.noteTitle !== 'string' || typeof projection.createdAt !== 'number' || !Number.isFinite(projection.createdAt) || projection.sourcePath !== row.path || projection.isStatic !== true) throw new Error('orphan or incompatible seed projection');\n if ('segmentId' in projection || 'segmentVersion' in projection) throw new Error('incompatible seed projection');\n for (const key of ['sourceId', 'routeId', 'blockContentId']) if (projection[key] !== undefined && typeof projection[key] !== 'string') throw new Error('invalid seed projection metadata');\n if (projection.position !== undefined && !nonnegative(projection.position)) throw new Error('invalid seed projection position');\n if (block.kind === 'wod') {\n const section = sections.find((s) => s.from === block.from && s.to === block.to);\n if (projection.blockContentId !== blockContentId(section?.scriptBlock?.content ?? row.content.slice(Number(block.from), Number(block.to)))) throw new Error('invalid seed workout fingerprint');\n } else if (projection.blockContentId !== undefined) throw new Error('non-workout seed fingerprint');\n indexed.add(projection.blockId);\n }\n if (indexed.size !== Object.keys(row.blocks).length) throw new Error('missing actionable seed projection');\n const links = new Set<string>();\n for (const link of row.blockEfforts) {\n if (!object(link) || typeof link.blockId !== 'string' || typeof link.noteId !== 'string' || typeof link.effortSlug !== 'string' || !link.effortSlug) throw new Error('invalid seed effort identity');\n const block = row.blocks[link.blockId];\n if (link.id !== `${link.noteId}:${link.blockId}:${link.effortSlug}` || links.has(String(link.id)) || !object(block) || block.kind !== 'wod' || !indexed.has(link.blockId) || link.sourcePath !== row.path || link.isStatic !== true || typeof link.createdAt !== 'number') throw new Error('orphan or incompatible seed effort link');\n const projection = row.blockIndex.find((p: unknown) => object(p) && p.blockId === link.blockId);\n if (!object(projection) || link.noteId !== projection.noteId || link.blockContentId !== projection.blockContentId || !Number.isFinite(link.createdAt)) throw new Error('invalid seed effort metadata');\n links.add(String(link.id));\n }\n const equipmentLinks = new Set<string>();\n for (const link of row.blockEquipment) {\n if (!object(link) || typeof link.blockId !== 'string' || typeof link.noteId !== 'string' || typeof link.equipmentSlug !== 'string' || !link.equipmentSlug) throw new Error('invalid seed equipment identity');\n const block = row.blocks[link.blockId];\n if (link.id !== `${link.noteId}:${link.blockId}:${link.equipmentSlug}` || equipmentLinks.has(String(link.id)) || !object(block) || block.kind !== 'wod' || !indexed.has(link.blockId) || link.sourcePath !== row.path || link.isStatic !== true || typeof link.createdAt !== 'number') throw new Error('orphan or incompatible seed equipment link');\n const projection = row.blockIndex.find((p: unknown) => object(p) && p.blockId === link.blockId);\n if (!object(projection) || link.noteId !== projection.noteId || link.blockContentId !== projection.blockContentId || !Number.isFinite(link.createdAt)) throw new Error('invalid seed equipment metadata');\n equipmentLinks.add(String(link.id));\n }\n }\n return value as SeedRow[];\n}","import { mapNoteBlockChanges, reconcileNoteBlocks, validateNoteBlocks, type BlockRevision, type Note, type NoteBlock, type NoteTag, type Page, type PageNote, type Tag } from '@bitcobblers/wod-wiki-core';\nimport type { IStorage, IReadWriteStore } from '@bitcobblers/wod-wiki-storage';\nimport { userDeletedSeedNoteId } from '@bitcobblers/wod-wiki-storage';\nimport type { IEffort, IEquipment } from '@bitcobblers/wod-wiki-lang';\nimport { parseEffortFile, parseEquipmentFile } from '@bitcobblers/wod-wiki-lang';\nimport { extractTypedTags, readFrontmatterMeta } from '../exchange';\nimport { DASHBOARDS_CHUNK_ID, EFFORTS_CHUNK_ID, EQUIPMENT_CHUNK_ID, SEED_REGISTERED_WIDGETS, SEED_SCHEMA, catalogForChunkId, seedNoteSourceId, seedPrecedenceRank, type SeedManifest, type SeedMetaRecord, type SeedRow } from './contract';\nimport { assertSeedManifest, assertSeedRows } from './validation';\n\nconst SEED_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341';\nexport async function seedNoteId(path: string): Promise<string> {\n const digest = await crypto.subtle.digest('SHA-1', new TextEncoder().encode(`${SEED_NAMESPACE}:${path}`));\n const bytes = new Uint8Array(digest.slice(0, 16));\n bytes[6] = (bytes[6] & 0x0f) | 0x50;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n\nfunction equal(a: unknown, b: unknown): boolean {\n if (Object.is(a, b)) return true;\n if (!a || !b || typeof a !== 'object' || typeof b !== 'object') return false;\n const ak = Object.keys(a).filter((key) => Reflect.get(a, key) !== undefined), bk = Object.keys(b).filter((key) => Reflect.get(b, key) !== undefined);\n return ak.length === bk.length && ak.every((key) => key in b && equal(Reflect.get(a, key), Reflect.get(b, key)));\n}\nfunction titleFromPath(path: string): string {\n return (path.split('/').at(-1) ?? path).replace(/\\.md$/, '').replace(/[-_]+/g, ' ').replace(/\\b\\w/g, (c) => c.toUpperCase());\n}\nfunction refreshedBlocks(existing: Note, rawContent: string, sourceRevision: number): Record<string, NoteBlock> {\n const old = existing.rawContent;\n let from = 0, endOld = old.length, endNew = rawContent.length;\n while (from < endOld && from < endNew && old[from] === rawContent[from]) from++;\n while (endOld > from && endNew > from && old[endOld - 1] === rawContent[endNew - 1]) { endOld--; endNew--; }\n const intersect = Object.values(existing.blocks).filter((b) => from < b.to && endOld > b.from);\n // A source-only refresh proves lineage only outside blocks or within one occurrence.\n const trusted = intersect.length <= 1 ? existing.blocks : Object.fromEntries(Object.entries(existing.blocks).filter(([, b]) => !intersect.includes(b)));\n const mapped = mapNoteBlockChanges(trusted, [{ from, to: endOld, insert: rawContent.slice(from, endNew) }]);\n let ordinal = 0;\n return reconcileNoteBlocks(rawContent, { sourceRevision, blocks: mapped, registeredWidgets: SEED_REGISTERED_WIDGETS, createId: () => `seed:${existing.id}:r${sourceRevision}:${ordinal++}` });\n}\n\nexport interface SeedChunkWrite {\n chunkId: string | null;\n rows: SeedRow[];\n manifest: SeedManifest;\n expectedMeta: SeedMetaRecord | undefined;\n meta: SeedMetaRecord;\n}\nexport interface SeedChunkResult {\n totalNotes: number;\n totalEfforts: number;\n totalEquipment: number;\n totalBlocks: number;\n skippedUserOwned: number;\n deleted: number;\n /** Committed canonical notes that did not exist before this chunk. */\n addedNotes: number;\n /** Committed canonical notes whose content changed in this chunk. */\n updatedNotes: number;\n}\n\ninterface SeedCheckpointRef {\n key: string;\n sourceId: string;\n rank: number;\n meta: SeedMetaRecord;\n noteIds: Set<string>;\n}\n\n/**\n * Materialize one family's bundled definition projections from the chunk's\n * markdown rows. Collisions across seed sources resolve deterministically by\n * tier precedence (`core` < `community` < `imported` < `user`): a higher or\n * equal tier overrides lower tiers, while lower tiers are shadowed without\n * throwing or destroying their checkpoint. Tombstones restore the highest\n * remaining seed tier when one exists, or delete the projection otherwise.\n */\nasync function applyDefinitionChunk<T extends IEffort | IEquipment>(\n defStore: IReadWriteStore<T>,\n noteStore: IReadWriteStore<Note>,\n parse: (raw: string) => T | null,\n family: string,\n seedSource: string,\n incomingRank: number,\n otherCheckpoints: SeedCheckpointRef[],\n priorIds: string[],\n rows: SeedRow[],\n ids: string[],\n owned: Set<string>,\n existingById: Map<string, Note | undefined>,\n allIds: string[],\n): Promise<number> {\n const priorIdSet = new Set(priorIds);\n const maxOtherRankForNote = (noteId: string): number => {\n let max = -1;\n for (const cp of otherCheckpoints) {\n if (cp.noteIds.has(noteId) && cp.rank > max) max = cp.rank;\n }\n return max;\n };\n const projections: T[] = [];\n for (const [i, row] of rows.entries()) {\n if (!owned.has(ids[i])) continue;\n const parsed = parse(row.content);\n if (!parsed) continue;\n projections.push({ ...parsed, registrySource: 'bundled' as const, ownerNoteId: ids[i], sourceId: seedSource, sourcePath: row.path });\n }\n const prior = await defStore.getMany(projections.map((p) => p.slug));\n const changed = projections.filter((p, i) => {\n const before = prior[i];\n if (!before) return true;\n if (before.registrySource !== 'bundled') return false;\n let beforeRank: number;\n if (before.ownerNoteId === p.ownerNoteId || (before.ownerNoteId && priorIdSet.has(before.ownerNoteId) && maxOtherRankForNote(before.ownerNoteId) < incomingRank)) {\n beforeRank = incomingRank;\n } else {\n const cpRank = before.ownerNoteId ? maxOtherRankForNote(before.ownerNoteId) : -1;\n beforeRank = cpRank >= 0 ? cpRank : seedPrecedenceRank(before.sourceId);\n }\n return incomingRank >= beforeRank && !equal(p, before);\n });\n if (changed.length) await defStore.putMany(changed);\n const wantedSlugs = new Set(projections.map((p) => p.slug));\n const removedBySlug = new Map<string, string>();\n for (const id of allIds) {\n const note = existingById.get(id);\n if (!note || note.seedOrigin !== 'seed') continue;\n const slug = parse(note.rawContent)?.slug;\n if (slug && !wantedSlugs.has(slug)) removedBySlug.set(slug, id);\n }\n const removedSlugs = [...removedBySlug.keys()];\n if (removedSlugs.length) {\n const old = await defStore.getMany(removedSlugs);\n for (const [i, row] of old.entries()) {\n const slug = removedSlugs[i];\n if (!row || row.registrySource !== 'bundled') continue;\n const removedNoteId = removedBySlug.get(slug);\n const isOwnedByThisSource = row.ownerNoteId === removedNoteId && (!row.sourceId || row.sourceId === seedSource || row.sourceId === family);\n if (!isOwnedByThisSource) continue;\n let restored = false;\n for (const cp of otherCheckpoints) {\n const candidateIds = cp.meta.chunks?.[family]?.noteIds ?? [];\n if (!candidateIds.length) continue;\n const candidateNotes = await noteStore.getMany(candidateIds);\n for (const candidateNote of candidateNotes) {\n if (!candidateNote || candidateNote.seedOrigin !== 'seed') continue;\n const parsed = parse(candidateNote.rawContent);\n if (parsed && parsed.slug === slug) {\n await defStore.put({\n ...parsed,\n registrySource: 'bundled' as const,\n ownerNoteId: candidateNote.id,\n sourceId: cp.sourceId,\n sourcePath: candidateNote.sourcePath ?? '',\n });\n restored = true;\n break;\n }\n }\n if (restored) break;\n }\n if (!restored) {\n await defStore.delete(slug);\n }\n }\n }\n return changed.length;\n}\n\nasync function putChanged<T>(store: IReadWriteStore<T>, values: T[], keys: IDBValidKey[]): Promise<void> {\n if (!values.length) return;\n const prior = await store.getMany(keys);\n const changed = values.filter((value, i) => !equal(value, prior[i]));\n if (changed.length) await store.putMany(changed);\n}\n\nexport async function applySeedChunk(storage: IStorage, write: SeedChunkWrite): Promise<SeedChunkResult> {\n assertSeedManifest(write.manifest);\n assertSeedRows(write.rows);\n const result: SeedChunkResult = { totalNotes: 0, totalEfforts: 0, totalEquipment: 0, totalBlocks: 0, skippedUserOwned: 0, deleted: 0, addedNotes: 0, updatedNotes: 0 };\n const ids = await Promise.all(write.rows.map((row) => seedNoteId(row.path)));\n const pagesBySlug = new Map<string, string>();\n const linkIds = new Map<string, string>();\n const tagIds = new Map<string, string>();\n for (const [i, row] of write.rows.entries()) {\n const slug = readFrontmatterMeta(row.content)['slug'];\n if (typeof slug === 'string' && slug.trim()) {\n pagesBySlug.set(slug, await seedNoteId(`page:${slug}`));\n linkIds.set(ids[i], await seedNoteId(`pagenote:${slug}:${row.path}`));\n }\n for (const { label } of extractTypedTags(row.content)) {\n if (!tagIds.has(label)) tagIds.set(label, await seedNoteId(`tag:${label}`));\n }\n }\n return storage.transaction(['notes', 'block_revisions', 'block_index', 'block_efforts', 'block_equipment', 'page', 'page_notes', 'tags', 'note_tags', 'efforts', 'equipment', 'meta'], 'readwrite', async (tx) => {\n const metaStore = tx.readwrite('meta');\n // Durable user deletion intent (StorageService.deleteNote tombstones):\n // seed rows the user deleted through the app are never re-created by\n // re-import; the tombstones ship in every user-scope snapshot so fresh\n // devices suppress too.\n const userDeleted = new Set<string>();\n for (const row of await metaStore.getAll()) {\n const suppressed = userDeletedSeedNoteId((row as { key?: unknown } | null)?.key);\n if (suppressed !== undefined) userDeleted.add(suppressed);\n }\n const actualMeta = await metaStore.get(write.meta.key);\n if (!equal(actualMeta, write.expectedMeta)) throw new Error('Seed checkpoint changed during import');\n if (write.meta.schema !== SEED_SCHEMA || write.manifest.schema !== SEED_SCHEMA) throw new Error('Incompatible seed schema; recreate artifacts');\n const noteStore = tx.readwrite('notes');\n const priorIds = write.chunkId ? write.expectedMeta?.chunks[write.chunkId]?.noteIds ?? [] : [];\n const declared = new Set(ids);\n const goneIds = priorIds.filter((id) => !declared.has(id));\n const allIds = [...new Set([...ids, ...goneIds])];\n const stored = await noteStore.getMany(allIds);\n const existingById = new Map(allIds.map((id, i) => [id, stored[i]]));\n const seedSource = write.meta.key.startsWith('seed:') ? write.meta.key.slice(5) : write.meta.key;\n const incomingRank = seedPrecedenceRank(write.meta.key, write.meta.tier);\n const otherCheckpoints: SeedCheckpointRef[] = [];\n for (const row of await metaStore.getAll()) {\n const meta = row as unknown as SeedMetaRecord | undefined;\n if (!meta || typeof meta.key !== 'string' || !meta.key.startsWith('seed:') || meta.key === write.meta.key) continue;\n const noteIds = new Set<string>();\n for (const chunk of Object.values(meta.chunks ?? {})) {\n for (const noteId of chunk.noteIds ?? []) noteIds.add(noteId);\n }\n otherCheckpoints.push({\n key: meta.key,\n sourceId: meta.key.slice(5),\n rank: seedPrecedenceRank(meta.key, meta.tier),\n meta,\n noteIds,\n });\n }\n otherCheckpoints.sort((a, b) => b.rank - a.rank);\n const maxOtherRankForNote = (noteId: string): number => {\n let max = -1;\n for (const cp of otherCheckpoints) {\n if (cp.noteIds.has(noteId) && cp.rank > max) max = cp.rank;\n }\n return max;\n };\n const ownedIds = allIds.filter((id) => {\n // Durable user deletion intent (StorageService.deleteNote tombstone):\n // a seed note the user deleted through the app is never re-created by\n // re-import — the tombstone ships in every user-scope snapshot, so\n // fresh devices suppress it too.\n if (userDeleted.has(id)) return false;\n const note = existingById.get(id);\n if (!note) return declared.has(id);\n if (note.seedOrigin !== 'seed') return false;\n const otherRank = maxOtherRankForNote(id);\n if (declared.has(id)) return incomingRank >= otherRank;\n return otherRank < 0 && note.seedChunkId === write.chunkId;\n });\n const owned = new Set(ownedIds);\n const revisionStore = tx.readwrite('block_revisions');\n const historyIds = ids.filter((id, i) => owned.has(id) && existingById.get(id)?.rawContent !== write.rows[i].content);\n const histories = await revisionStore.getAllFromIndexMany('by-note', historyIds);\n const history = new Map(historyIds.map((id, i) => [id, histories[i]]));\n const indexStore = tx.readwrite('block_index'), effortLinks = tx.readwrite('block_efforts'), equipmentLinks = tx.readwrite('block_equipment');\n const tagLinks = tx.readwrite('note_tags'), pageLinks = tx.readwrite('page_notes');\n const currentIndexes = await indexStore.getAllFromIndexMany('by-note', ownedIds);\n const currentEfforts = await effortLinks.getAllFromIndexMany('by-note', ownedIds);\n const currentEquipment = await equipmentLinks.getAllFromIndexMany('by-note', ownedIds);\n const currentTags = await tagLinks.getAllFromIndexMany('by-note', ownedIds);\n const currentPages = await pageLinks.getAllFromIndexMany('by-note', ownedIds);\n const slot = new Map(ownedIds.map((id, i) => [id, i]));\n const tagsStore = tx.readwrite('tags');\n const labels = [...tagIds.keys()];\n const matches = await tagsStore.getAllFromIndexMany('by-label', labels);\n const tagsByLabel = new Map(labels.map((label, i) => [label, matches[i][0]]));\n const changedTags: Tag[] = [], changedNotes: Note[] = [], revisions: BlockRevision[] = [], pages: Page[] = [], pageNotes: PageNote[] = [], noteTags: NoteTag[] = [];\n const blocks: SeedRow['blockIndex'] = [], blockEfforts: SeedRow['blockEfforts'] = [], blockEquipment: SeedRow['blockEquipment'] = [];\n for (const [i, row] of write.rows.entries()) {\n const id = ids[i], existing = existingById.get(id);\n if (!owned.has(id)) {\n if (existing && existing.seedOrigin !== 'seed') result.skippedUserOwned++;\n continue;\n }\n // Count only rows this transaction actually commits: new canonical\n // notes vs changed content. User-owned skips, deletions, and pure\n // metadata rewrites (unchanged rawContent) are never counted.\n if (!existing) result.addedNotes++;\n else if (existing.rawContent !== row.content) result.updatedNotes++;\n validateNoteBlocks(row.content, row.blocks, 1, { registeredWidgets: SEED_REGISTERED_WIDGETS });\n const sourceRevision = existing ? existing.sourceRevision + (existing.rawContent === row.content ? 0 : 1) : 1;\n let ordinal = 0;\n const retainedHistory = history.get(id) ?? [];\n const map = !existing\n ? retainedHistory.length ? reconcileNoteBlocks(row.content, { sourceRevision, registeredWidgets: SEED_REGISTERED_WIDGETS, createId: () => `seed:${id}:new${retainedHistory.length}:${ordinal++}` }) : structuredClone(row.blocks)\n : existing.rawContent === row.content ? structuredClone(existing.blocks) : refreshedBlocks(existing, row.content, sourceRevision);\n for (const block of Object.values(map)) {\n const saved = (history.get(id) ?? []).filter((r) => r.blockId === block.id).sort((a, b) => b.version - a.version)[0];\n const source = row.content.slice(block.from, block.to);\n if (existing?.rawContent === row.content) continue;\n const same = saved && saved.kind === block.kind && saved.rawContent === source && saved.dialect === block.dialect && saved.sport === block.sport;\n block.version = !existing ? 1 : same ? saved.version : (saved?.version ?? 0) + 1;\n if (!existing || !same) revisions.push({ noteId: id, blockId: block.id, version: block.version, kind: block.kind, rawContent: source, savedAt: write.meta.importedAt, ...(block.dialect ? { dialect: block.dialect } : {}), ...(block.sport ? { sport: block.sport } : {}) });\n }\n validateNoteBlocks(row.content, map, sourceRevision, { registeredWidgets: SEED_REGISTERED_WIDGETS });\n const fm = readFrontmatterMeta(row.content);\n const title = typeof fm['title'] === 'string' && fm['title'].trim() ? fm['title'].trim() : titleFromPath(row.path);\n const sourceId = write.chunkId ? seedNoteSourceId(row.path, row.content, write.chunkId) : undefined;\n if (!sourceId) throw new Error(`Unknown seed source family ${write.chunkId}`);\n // Strict civil-date validation at the trust boundary: engines differ on\n // out-of-range ISO days (JS rolls 2026-02-30 into March 2), so the UTC\n // components are round-tripped. A shaped-but-impossible date rejects the\n // chunk instead of silently placing the post on another day; absent or\n // non-ISO values stay undated (createdAt placement).\n const dateMatch = typeof fm['date'] === 'string' ? fm['date'].match(/^(\\d{4})-(\\d{2})-(\\d{2})$/) : null;\n let date: number | undefined;\n if (dateMatch) {\n const ts = Date.parse(`${fm['date']}T12:00:00Z`);\n const real = Number.isFinite(ts)\n && new Date(ts).getUTCMonth() === Number(dateMatch[2]) - 1\n && new Date(ts).getUTCDate() === Number(dateMatch[3]);\n if (!real) throw new Error(`invalid frontmatter date '${fm['date']}' in '${row.path}' — expected a real calendar day (YYYY-MM-DD)`);\n date = ts;\n }\n const note: Note = { ...existing, id, title, rawContent: row.content, sourceRevision, blocks: map, createdAt: write.manifest.version, ...(date === undefined ? {} : { date }), type: write.chunkId === DASHBOARDS_CHUNK_ID ? 'dashboard' : 'note', sourceId, catalog: catalogForChunkId(write.chunkId ?? ''), seedOrigin: 'seed', seedVersion: write.manifest.version, seedChunkId: write.chunkId ?? undefined, sourcePath: row.path };\n if (date === undefined) delete note.date;\n if (!equal(note, existing)) changedNotes.push(note);\n const byRange = new Map(Object.values(map).map((b) => [`${b.from}:${b.to}`, b]));\n const compiledById = new Map(row.blockIndex.map((b) => [b.blockId, b]));\n const remap = new Map<string, string>();\n for (const compiled of row.blockIndex) {\n const block = byRange.get(`${compiled.from}:${compiled.to}`);\n if (!block || block.kind !== compiled.dataType) throw new Error('Orphan seed projection');\n remap.set(compiled.blockId, block.id);\n const projection = { ...compiled, id: `${id}:${block.id}`, noteId: id, blockId: block.id, blockVersion: block.version, sourceRevision, noteTitle: title, sourceId, sourcePath: row.path, rawContent: row.content.slice(block.from, block.to) };\n const prior = currentIndexes[slot.get(id)!].find((b) => b.id === projection.id);\n if (!prior || prior.isStatic === true) blocks.push(projection);\n }\n for (const compiled of row.blockEfforts) {\n const blockId = remap.get(compiled.blockId);\n if (!blockId || compiledById.get(compiled.blockId)?.dataType !== 'wod') throw new Error('Orphan seed effort link');\n const link = { ...compiled, id: `${id}:${blockId}:${compiled.effortSlug}`, noteId: id, blockId, sourcePath: row.path };\n const prior = currentEfforts[slot.get(id)!].find((b) => b.id === link.id);\n if (!prior || prior.isStatic === true) blockEfforts.push(prior ? { ...link, createdAt: prior.createdAt } : link);\n }\n for (const compiled of row.blockEquipment) {\n const blockId = remap.get(compiled.blockId);\n if (!blockId || compiledById.get(compiled.blockId)?.dataType !== 'wod') throw new Error('Orphan seed equipment link');\n const link = { ...compiled, id: `${id}:${blockId}:${compiled.equipmentSlug}`, noteId: id, blockId, sourcePath: row.path };\n const prior = currentEquipment[slot.get(id)!].find((b) => b.id === link.id);\n if (!prior || prior.isStatic === true) blockEquipment.push(prior ? { ...link, createdAt: prior.createdAt } : link);\n }\n const n = slot.get(id)!;\n const wantedTags = new Set<string>();\n for (const item of extractTypedTags(row.content)) {\n let tag = tagsByLabel.get(item.label);\n if (!tag) { tag = { id: tagIds.get(item.label)!, label: item.label, type: item.type, createdAt: write.meta.importedAt }; changedTags.push(tag); tagsByLabel.set(item.label, tag); }\n else if (item.type && !tag.type) { tag = { ...tag, type: item.type }; changedTags.push(tag); tagsByLabel.set(item.label, tag); }\n if (wantedTags.has(tag.id)) continue;\n wantedTags.add(tag.id);\n const link = currentTags[n].find((l) => l.tagId === tag.id);\n if (!link) noteTags.push({ id: `${id}:${tag.id}`, noteId: id, tagId: tag.id });\n }\n for (const link of currentTags[n]) if (!wantedTags.has(link.tagId)) await tagLinks.delete(link.id);\n const slug = fm['slug'];\n if (typeof slug === 'string' && pagesBySlug.has(slug)) {\n const pageId = pagesBySlug.get(slug)!;\n pages.push({ id: pageId, slug, title: titleFromPath(row.path), createdAt: write.manifest.version });\n pageNotes.push({ id: linkIds.get(id)!, pageId, noteId: id, createdAt: write.manifest.version });\n }\n result.totalNotes++;\n result.totalBlocks += Object.keys(map).length;\n }\n const wantedBlocks = new Set(blocks.map((b) => b.id)), wantedEfforts = new Set(blockEfforts.map((b) => b.id)), wantedEquipment = new Set(blockEquipment.map((b) => b.id));\n for (const rows of currentIndexes) for (const row of rows) if (row.isStatic === true && !wantedBlocks.has(row.id)) await indexStore.delete(row.id);\n for (const rows of currentEfforts) for (const row of rows) if (row.isStatic === true && !wantedEfforts.has(row.id)) await effortLinks.delete(row.id);\n for (const rows of currentEquipment) for (const row of rows) if (row.isStatic === true && !wantedEquipment.has(row.id)) await equipmentLinks.delete(row.id);\n for (const id of goneIds) {\n if (!owned.has(id) || !existingById.get(id)) continue;\n const n = slot.get(id)!;\n await noteStore.delete(id);\n for (const link of currentTags[n]) await tagLinks.delete(link.id);\n for (const link of currentPages[n]) await pageLinks.delete(link.id);\n result.deleted++;\n }\n if (write.chunkId === EFFORTS_CHUNK_ID) {\n result.totalEfforts = await applyDefinitionChunk(tx.readwrite('efforts'), noteStore, parseEffortFile, 'efforts', seedSource, incomingRank, otherCheckpoints, priorIds, write.rows, ids, owned, existingById, allIds);\n }\n if (write.chunkId === EQUIPMENT_CHUNK_ID) {\n result.totalEquipment = await applyDefinitionChunk(tx.readwrite('equipment'), noteStore, parseEquipmentFile, 'equipment', seedSource, incomingRank, otherCheckpoints, priorIds, write.rows, ids, owned, existingById, allIds);\n }\n if (changedNotes.length) await noteStore.putMany(changedNotes);\n if (revisions.length) await revisionStore.putMany(revisions);\n await putChanged(indexStore, blocks, blocks.map((b) => b.id));\n await putChanged(effortLinks, blockEfforts, blockEfforts.map((b) => b.id));\n await putChanged(equipmentLinks, blockEquipment, blockEquipment.map((b) => b.id));\n if (changedTags.length) await tagsStore.putMany([...new Map(changedTags.map((t) => [t.id, t])).values()]);\n if (noteTags.length) await tagLinks.putMany(noteTags);\n await putChanged(tx.readwrite('page'), pages, pages.map((p) => p.id));\n await putChanged(pageLinks, pageNotes, pageNotes.map((p) => p.id));\n await metaStore.put(write.meta);\n return result;\n });\n}\n\n"]}
1
+ {"version":3,"sources":["../src/pack.ts","../src/store.ts","../src/ir.ts","../src/exchange.ts","../src/version.ts","../src/seed/contract.ts","../src/seed/validation.ts","../src/seed/runtime.ts"],"names":["blockContentId","lines","validateNoteBlocks"],"mappings":";;;;;;;;;AAuCA,IAAM,WAAA,uBAAkB,GAAA,EAA0B;AAE3C,SAAS,mBAAmB,IAAA,EAAkC;AACnE,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,qBAAqB,IAAA,EAA0B;AAC7D,EAAA,MAAM,SAAS,IAAA,CAAK,QAAA,EAAU,EAAA,IAAM,IAAA,CAAK,UAAU,IAAA,IAAQ,gBAAA;AAC3D,EAAA,WAAA,CAAY,GAAA,CAAI,QAAQ,IAAI,CAAA;AAE5B,EAAA,IAAI,IAAA,CAAK,MAAM,QAAA,EAAU;AACvB,IAAA,MAAM,YAAA,GAAe,KAAK,IAAA,CAAK,QAAA;AAC/B,IAAA,MAAM,QAAA,GAAW,IAAI,YAAA,EAAa;AAClC,IAAA,eAAA,CAAgB,SAAS,QAAQ,CAAA;AAAA,EACnC;AAEA,EAAA,IAAI,IAAA,CAAK,MAAM,SAAA,EAAW;AACxB,IAAA,KAAA,MAAW,aAAA,IAAiB,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW;AAC/C,MAAA,MAAM,QAAA,GAAW,IAAI,aAAA,EAAc;AACnC,MAAA,IAAI,mBAAmB,QAAA,EAAU;AAC/B,QAAA,yBAAA,CAA0B,SAAS,QAA8B,CAAA;AAAA,MACnE;AACA,MAAA,IAAI,oBAAoB,QAAA,EAAU;AAChC,QAAA,wBAAA,CAAyB,SAAS,QAA6B,CAAA;AAAA,MACjE;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,uBAAuB,QAAA,EAAuC;AAC5E,EAAA,MAAM,MAAA,GAAS,OAAO,QAAA,KAAa,QAAA,GAC/B,QAAA,GACC,SAAS,QAAA,EAAU,EAAA,IAAM,QAAA,CAAS,QAAA,EAAU,IAAA,IAAQ,gBAAA;AAEzD,EAAA,MAAM,IAAA,GAAO,WAAA,CAAY,GAAA,CAAI,MAAM,CAAA;AACnC,EAAA,WAAA,CAAY,OAAO,MAAM,CAAA;AAEzB,EAAA,IAAI,IAAA,EAAM,MAAM,QAAA,EAAU;AACxB,IAAA,MAAM,QAAA,GAAW,IAAI,IAAA,CAAK,IAAA,CAAK,QAAA,EAAS;AACxC,IAAA,eAAA,CAAgB,UAAA,CAAW,SAAS,EAAE,CAAA;AAAA,EACxC,CAAA,MAAA,IAAW,OAAO,QAAA,KAAa,QAAA,EAAU;AACvC,IAAA,eAAA,CAAgB,WAAW,QAAQ,CAAA;AAAA,EACrC;AAEA,EAAA,IAAI,IAAA,EAAM,MAAM,SAAA,EAAW;AACzB,IAAA,KAAA,MAAW,aAAA,IAAiB,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW;AAC/C,MAAA,MAAM,QAAA,GAAW,IAAI,aAAA,EAAc;AACnC,MAAA,IAAI,mBAAmB,QAAA,EAAU;AAC/B,QAAA,yBAAA,CAA0B,UAAA,CAAY,SAAgC,EAAE,CAAA;AAAA,MAC1E;AACA,MAAA,IAAI,oBAAoB,QAAA,EAAU;AAChC,QAAA,wBAAA,CAAyB,UAAA,CAAY,SAA+B,EAAE,CAAA;AAAA,MACxE;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,iBAAA,GAAoC;AAClD,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,WAAA,CAAY,MAAA,EAAQ,CAAA;AACxC;AAEO,SAAS,0BAAA,GAA6C;AAC3D,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,WAAA,CAAY,MAAA,EAAQ,CAAA;AACxC;;;AC5FO,SAAS,mBAAmB,MAAA,EAA4C;AAC7E,EAAA,MAAM,IAAA,GAAO,CAAC,GAAG,MAAM,CAAA;AACvB,EAAA,OAAO;AAAA,IACL,oBAAA,EAAsB,OAAO,KAAA,EAAe,GAAA,KAC1C,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAA,IAAa,KAAA,IAAS,CAAA,CAAE,aAAa,GAAG,CAAA;AAAA,IAC/D,iBAAA,EAAmB,OAAO,QAAA,KACxB,IAAA,CAAK,OAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,KAAa,QAAQ,CAAA;AAAA,IAC5C,gBAAA,EAAkB,OAAO,MAAA,KACvB,IAAA,CAAK,OAAO,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,KAAW,MAAM,CAAA;AAAA,IACxC,kBAAA,EAAoB,OAAOA,eAAAA,KACzB,IAAA,CAAK,OAAO,CAAC,CAAA,KAAM,CAAA,CAAE,cAAA,KAAmBA,eAAc,CAAA;AAAA,IACxD,SAAS,YAAY,IAAA;AAAA,IACrB,YAAA,EAAc,OAAO,QAAA,KAAa;AAAE,MAAA,IAAA,CAAK,IAAA,CAAK,GAAG,QAAQ,CAAA;AAAA,IAAG,CAAA;AAAA,IAC5D,iBAAA,EAAmB,OAAO,QAAA,EAAU,MAAA,KAAW;AAI7C,MAAA,KAAA,IAAS,IAAI,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AACzC,QAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,QAAA,IAAI,GAAA,CAAI,QAAA,KAAa,QAAA,IAAY,GAAA,CAAI,KAAA,KAAU,SAAA,IAAa,GAAA,CAAI,MAAA,KAAW,MAAA,EAAQ,IAAA,CAAK,MAAA,CAAO,CAAA,EAAG,CAAC,CAAA;AAAA,MACrG;AACA,MAAA,IAAA,CAAK,IAAA,CAAK,GAAG,MAAM,CAAA;AAAA,IACrB,CAAA;AAAA,IACA,YAAA,EAAc,OAAO,GAAA,KAAQ;AAC3B,MAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,GAAG,CAAA;AAC1B,MAAA,KAAA,IAAS,IAAI,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AACzC,QAAA,IAAI,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,CAAE,EAAE,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,CAAA,EAAG,CAAC,CAAA;AAAA,MAC9C;AAAA,IACF;AAAA,GACF;AACF;ACMO,SAAS,YAAA,CACd,IAAA,EACA,IAAA,EACA,eAAA,EACA,WAAA,EACkB;AAClB,EAAA,IAAI,MAAA,GAAS,cAAA;AACb,EAAA,IAAI,KAAA,GAAQ,KAAK,GAAA,EAAI;AACrB,EAAA,IAAI,OAAO,oBAAoB,QAAA,EAAU;AACvC,IAAA,MAAA,GAAS,eAAA;AACT,IAAA,IAAI,WAAA,KAAgB,QAAW,KAAA,GAAQ,WAAA;AAAA,EACzC,CAAA,MAAA,IAAW,eAAA,IAAmB,OAAO,eAAA,KAAoB,QAAA,EAAU;AACjE,IAAA,IAAI,eAAA,CAAgB,MAAA,EAAQ,MAAA,GAAS,eAAA,CAAgB,MAAA;AACrD,IAAA,IAAI,eAAA,CAAgB,WAAA,KAAgB,MAAA,EAAW,KAAA,GAAQ,eAAA,CAAgB,WAAA;AAAA,EACzE;AACA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,iCAAA;AAAA,IACT,IAAA;AAAA,IACA,WAAA,EAAa,KAAA;AAAA,IACb,MAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,SAAS,SAAsB,GAAA,EAAuC;AAC3E,EAAA,IAAI,CAAC,GAAA,IAAO,OAAO,GAAA,KAAQ,UAAU,OAAO,KAAA;AAC5C,EAAA,MAAM,IAAA,GAAO,GAAA;AACb,EAAA,OACE,IAAA,CAAK,OAAA,KAAY,iCAAA,IACjB,OAAO,KAAK,IAAA,KAAS,QAAA,IACrB,OAAO,IAAA,CAAK,gBAAgB,QAAA,IAC5B,OAAO,IAAA,CAAK,MAAA,KAAW,YACvB,MAAA,IAAU,IAAA;AAEd;AAsBO,SAAS,eAAA,CAAgB,MAAsB,KAAA,EAAmD;AACvG,EAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,EAAA,MAAM,UAAwB,IAAA,CAAK,OAAA,CAAQ,SAAQ,CAAE,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IAC/D,MAAM,CAAA,CAAE,IAAA;AAAA,IACR,GAAI,EAAE,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,CAAA,CAAE,KAAA,EAAM,GAAI,EAAC;AAAA,IAClD,GAAI,EAAE,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,CAAA,CAAE,KAAA,EAAM,GAAI,EAAC;AAAA,IAClD,GAAI,EAAE,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,GAAI;AAAC,GACvD,CAAE,CAAA;AAEF,EAAA,MAAM,GAAA,GAAM,MAAM,GAAA,IAAO,EAAA;AACzB,EAAA,MAAM,IAAA,GAAO,MAAM,WAAA,IAAe,CAAA;AAClC,EAAA,MAAM,EAAA,GAAK,IAAA,EAAM,SAAA,IAAc,IAAA,GAAO,GAAA,CAAI,MAAA;AAE1C,EAAA,MAAM,YAAA,GAAe,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,UAAA,CAAW,QAAA,IAAY,CAAA,CAAE,IAAA,KAAS,UAAU,CAAA;AACrG,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,UAAA,CAAW,MAAA,IAAU,CAAA,CAAE,IAAA,KAAS,QAAQ,CAAA;AAC/F,EAAA,MAAM,IAAA,GAA8B,YAAA,GAAe,UAAA,GAAa,UAAA,GAAa,QAAA,GAAW,WAAA;AAExF,EAAA,MAAM,KAAA,GAAQ,SAAS,IAAI,CAAA;AAE3B,EAAA,MAAM,QAAA,GAAA,CAAY,IAAA,CAAK,QAAA,IAAY,IAAI,IAAA,EAAK;AAC5C,EAAA,MAAM,QAAA,GAA4B,SAC/B,GAAA,CAAI,CAAC,QAAQ,KAAA,CAAM,GAAA,CAAI,GAAG,CAAC,CAAA,CAC3B,MAAA,CAAO,CAAC,CAAA,KAA2B,CAAA,KAAM,MAAS,CAAA,CAClD,GAAA,CAAI,CAAC,CAAA,KAAM,eAAA,CAAgB,CAAA,EAAG,KAAK,CAAC,CAAA;AAEvC,EAAA,OAAO;AAAA,IACL,IAAI,IAAA,CAAK,EAAA;AAAA,IACT,IAAA;AAAA,IACA,GAAA;AAAA,IACA,IAAA;AAAA,IACA,EAAA;AAAA,IACA,OAAA;AAAA,IACA,GAAI,KAAA,CAAM,MAAA,GAAS,IAAI,EAAE,KAAA,KAAU,EAAC;AAAA,IACpC,GAAI,QAAA,CAAS,MAAA,GAAS,IAAI,EAAE,QAAA,KAAa;AAAC,GAC5C;AACF;AAGO,SAAS,mBAAmB,MAAA,EAAgC;AACjE,EAAA,MAAM,KAAA,GAAQ,IAAI,GAAA,CAAI,MAAA,CAAO,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,EAAA,EAAI,CAAC,CAAC,CAAC,CAAA;AAC7D,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,UAAA,CAAW,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,KAAW,MAAA,IAAa,CAAC,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,MAAM,CAAC,CAAA;AAE/F,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,IAAK,QAAA,CAAS,CAAC,CAAA,CAAE,QAAA,CAAS,SAAS,CAAA,EAAG;AAC5D,IAAA,OAAO,eAAA,CAAgB,QAAA,CAAS,CAAC,CAAA,EAAG,KAAK,CAAA;AAAA,EAC3C;AAEA,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,CAAA;AAAA,IACJ,IAAA,EAAM,MAAA;AAAA,IACN,KAAK,MAAA,CAAO,MAAA;AAAA,IACZ,IAAA,EAAM,CAAA;AAAA,IACN,EAAA,EAAI,OAAO,MAAA,CAAO,MAAA;AAAA,IAClB,SAAS,EAAC;AAAA,IACV,QAAA,EAAU,SAAS,GAAA,CAAI,CAAC,MAAM,eAAA,CAAgB,CAAA,EAAG,KAAK,CAAC;AAAA,GACzD;AACF;ACpIO,IAAM,uBAAA,GAA0B;AAIvC,IAAM,OAAA,GAAU,4EAAA;AAGT,SAAS,oBAAoB,QAAA,EAA4C;AAC9E,EAAA,MAAM,KAAA,GAAQ,6BAAA,CAA8B,IAAA,CAAK,QAAQ,CAAA;AACzD,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI,KAAA;AACJ,EAAA,KAAA,MAAW,QAAQ,KAAA,CAAM,CAAC,CAAA,CAAE,KAAA,CAAM,OAAO,CAAA,EAAG;AAC1C,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,KAAA,CAAM,mBAAmB,CAAA;AACzC,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,MAAM,GAAA,GAAM,EAAA,CAAG,CAAC,CAAA,CAAE,IAAA,EAAK;AACvB,IAAA,MAAM,KAAA,GAAQ,EAAA,CAAG,CAAC,CAAA,CAAE,IAAA,EAAK;AACzB,IAAA,IAAI,QAAQ,uBAAA,IAA2B,OAAA,CAAQ,IAAA,CAAK,KAAK,GAAG,MAAA,GAAS,KAAA;AACrE,IAAA,IAAI,GAAA,KAAQ,OAAA,IAAW,KAAA,EAAO,KAAA,GAAQ,KAAA;AAAA,EACxC;AACA,EAAA,OAAO,MAAA,GAAS,EAAE,MAAA,EAAQ,KAAA,EAAM,GAAI,MAAA;AACtC;AAGA,IAAM,gBAAA,GAAmB,2CAAA;AAOlB,SAAS,yBAAA,CAA0B,UAAkB,QAAA,EAAgC;AAC1F,EAAA,MAAM,KAAA,GAAQ,CAACC,MAAAA,KAA8B;AAC3C,IAAA,MAAM,eAAA,GAAkB,CAAC,GAAA,EAAa,KAAA,KAAoC;AACxE,MAAA,IAAI,UAAU,MAAA,IAAa,CAAC,gBAAA,CAAiB,IAAA,CAAK,KAAK,CAAA,EAAG;AAC1D,MAAA,MAAM,GAAA,GAAMA,MAAAA,CAAM,SAAA,CAAU,CAAC,CAAA,KAAM,EAAE,UAAA,CAAW,CAAA,EAAG,GAAG,CAAA,CAAA,CAAG,CAAC,CAAA;AAC1D,MAAA,IAAI,GAAA,IAAO,GAAGA,MAAAA,CAAM,GAAG,CAAA,GAAI,CAAA,EAAG,GAAG,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA;AAAA,WACtCA,MAAAA,CAAM,IAAA,CAAK,GAAG,GAAG,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA;AAAA,IACpC,CAAA;AACA,IAAA,eAAA,CAAgB,OAAA,EAAS,SAAS,KAAK,CAAA;AACvC,IAAA,eAAA,CAAgB,uBAAA,EAAyB,SAAS,MAAM,CAAA;AACxD,IAAA,OAAOA,MAAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,KAAA,GAAQ,6BAAA,CAA8B,IAAA,CAAK,QAAQ,CAAA;AACzD,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,UAAA,CAAW,SAAS,IAAI,MAAA,GAAS,IAAA;AAC1D,IAAA,MAAMA,SAAQ,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,CAAE,KAAA,CAAM,OAAO,CAAC,CAAA;AAC3C,IAAA,OAAO,MAAM,OAAO,CAAA,EAAGA,MAAAA,CAAM,IAAA,CAAK,OAAO,CAAC,CAAA,EAAG,OAAO,CAAA,GAAA,EAAM,SAAS,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,CAAE,MAAM,CAAC,CAAA,CAAA;AAAA,EAC3F;AACA,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,EAAE,CAAA;AACtB,EAAA,OAAO,CAAA;AAAA,EAAQ,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC;AAAA;;AAAA,EAAY,QAAQ,CAAA,CAAA;AACrD;AAGO,SAAS,oBAAoB,IAAA,EAAoB;AACtD,EAAA,OAAO,yBAAA,CAA0B,IAAA,CAAK,UAAA,EAAY,EAAE,MAAA,EAAQ,KAAK,EAAA,EAAI,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,CAAA;AAC1F;AAQA,IAAM,oBAAA,GAAuB,6BAAA;AAOtB,SAAS,oBAAoB,QAAA,EAAqD;AACvF,EAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,IAAA,CAAK,QAAQ,CAAA;AAChD,EAAA,IAAI,CAAC,KAAA,EAAO,OAAO,EAAC;AACpB,EAAA,MAAM,OAA0C,EAAC;AACjD,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,CAAC,CAAA,CAAE,MAAM,OAAO,CAAA;AACpC,EAAA,IAAI,cAAA;AACJ,EAAA,KAAA,MAAW,WAAW,KAAA,EAAO;AAC3B,IAAA,MAAM,IAAA,GAAO,QAAQ,OAAA,EAAQ;AAC7B,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,eAAe,CAAA;AACvC,IAAA,IAAI,QAAQ,cAAA,EAAgB;AAC1B,MAAC,IAAA,CAAK,cAAc,CAAA,CAAe,IAAA,CAAK,KAAK,CAAC,CAAA,CAAE,MAAM,CAAA;AACtD,MAAA;AAAA,IACF;AACA,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,KAAA,CAAM,mBAAmB,CAAA;AACzC,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,MAAM,MAAM,EAAA,CAAG,CAAC,CAAA,CAAE,IAAA,GAAO,WAAA,EAAY;AACrC,IAAA,MAAM,KAAA,GAAQ,EAAA,CAAG,CAAC,CAAA,CAAE,IAAA,EAAK;AACzB,IAAA,IAAI,UAAU,EAAA,EAAI;AAChB,MAAA,IAAA,CAAK,GAAG,IAAI,EAAC;AACb,MAAA,cAAA,GAAiB,GAAA;AAAA,IACnB,CAAA,MAAA,IAAW,MAAM,UAAA,CAAW,GAAG,KAAK,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,EAAG;AACvD,MAAA,IAAA,CAAK,GAAG,CAAA,GAAI,KAAA,CACT,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CACX,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAA,EAAK,CAAE,OAAA,CAAQ,cAAA,EAAgB,EAAE,CAAC,CAAA,CAC/C,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,GAAS,CAAC,CAAA;AAC7B,MAAA,cAAA,GAAiB,MAAA;AAAA,IACnB,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,GAAG,CAAA,GAAI,KAAA;AACZ,MAAA,cAAA,GAAiB,MAAA;AAAA,IACnB;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEA,IAAM,MAAA,GAAS,CAAC,KAAA,KACd,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GACf,KAAA,GACA,OAAO,KAAA,KAAU,QAAA,GACf,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,GAAS,CAAC,IAChE,EAAC;AASF,SAAS,gBAAA,CACd,QAAA,EACA,SAAA,GAA+B,kBAAA,EACf;AAChB,EAAA,MAAM,IAAA,GAAO,oBAAoB,QAAQ,CAAA;AACzC,EAAA,MAAM,OAAA,GAA0B,MAAA,CAAO,IAAA,CAAK,MAAM,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,KAAA,MAAW,EAAE,KAAA,EAAM,CAAE,CAAA;AAC/E,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AACjC,EAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,IAAA,IAAI,aAAa,MAAA,EAAQ;AACzB,IAAA,MAAM,UAAA,GAAa,SAAS,IAAA,CAAK,CAAC,MAAM,CAAA,KAAM,QAAA,CAAS,aAAa,CAAA;AACpE,IAAA,IAAI,CAAC,UAAA,EAAY;AACjB,IAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,IAAA,CAAK,UAAU,CAAC,CAAA,EAAG;AAC5C,MAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,KAAA,EAAO,IAAA,EAAM,UAAU,CAAA;AAAA,IACxC;AAAA,EACF;AACA,EAAA,OAAO,QAAQ,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,KAAA,CAAM,SAAS,CAAC,CAAA;AACjD;AAWO,SAAS,iBAAiB,MAAA,EAOtB;AACT,EAAA,MAAM,KAAA,GAAQ,CAAC,KAAA,EAAO,CAAA,IAAA,EAAO,OAAO,EAAE,CAAA,CAAA,EAAI,CAAA,MAAA,EAAS,MAAA,CAAO,IAAI,CAAA,CAAA,EAAI,CAAA,OAAA,EAAU,MAAA,CAAO,KAAK,CAAA,CAAE,CAAA;AAC1F,EAAA,IAAI,MAAA,CAAO,OAAA,IAAW,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC/C,IAAA,KAAA,CAAM,KAAK,UAAU,CAAA;AACrB,IAAA,KAAA,MAAW,SAAS,MAAA,CAAO,OAAA,QAAe,IAAA,CAAK,CAAA,IAAA,EAAO,KAAK,CAAA,CAAE,CAAA;AAAA,EAC/D;AACA,EAAA,MAAM,QAAQ,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,cAAc,EAAE,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA,KAAM,OAAO,MAAM,QAAA,IAAY,OAAO,MAAM,QAAQ,CAAA;AACpH,EAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,IAAA,KAAA,CAAM,KAAK,iBAAiB,CAAA;AAC5B,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,CAAA,IAAK,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,CAAC,CAAA,EAAA,EAAK,MAAA,CAAO,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,EAC/D;AACA,EAAA,KAAA,CAAM,IAAA,CAAK,OAAO,EAAE,CAAA;AACpB,EAAA,OAAO,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC;AAAA,EAAA,CAAM,OAAO,IAAA,IAAQ,EAAA,EAAI,MAAM,CAAA,CAAA,CAAG,SAAQ,GAAI,IAAA;AAC1E;AAGO,SAAS,oBAAoB,SAAA,EAMzB;AACT,EAAA,MAAM,KAAA,GAAQ,CAAC,KAAA,EAAO,iBAAA,EAAmB,OAAO,SAAA,CAAU,EAAE,CAAA,CAAA,EAAI,CAAA,MAAA,EAAS,UAAU,IAAI,CAAA,CAAA,EAAI,CAAA,OAAA,EAAU,SAAA,CAAU,KAAK,CAAA,CAAE,CAAA;AACtH,EAAA,IAAI,SAAA,CAAU,OAAA,IAAW,SAAA,CAAU,OAAA,CAAQ,SAAS,CAAA,EAAG;AACrD,IAAA,KAAA,CAAM,KAAK,UAAU,CAAA;AACrB,IAAA,KAAA,MAAW,SAAS,SAAA,CAAU,OAAA,QAAe,IAAA,CAAK,CAAA,IAAA,EAAO,KAAK,CAAA,CAAE,CAAA;AAAA,EAClE;AACA,EAAA,KAAA,CAAM,IAAA,CAAK,OAAO,EAAE,CAAA;AACpB,EAAA,OAAO,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC;AAAA,EAAA,CAAM,UAAU,IAAA,IAAQ,EAAA,EAAI,MAAM,CAAA,CAAA,CAAG,SAAQ,GAAI,IAAA;AAC7E;AAOO,SAAS,eAAe,MAAA,EAAmC;AAChE,EAAA,OAAO,CAAC,OAAA,EAAS,GAAG,MAAM,EAAE,GAAA,CAAI,CAAC,CAAA,KAAM,cAAA,CAAe,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA;AACzE;AAEO,SAAS,qBAAqB,GAAA,EAAuB;AAC1D,EAAA,MAAM,KAAA,GAAQ,gBAAgB,GAAG,CAAA;AACjC,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAChC,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,KAAA,CAAM,CAAC,CAAC,CAAA;AACpC,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,CAAC,CAAA,KAAM,UAAU,CAAA,GAAI,EAAA;AAC7C,EAAA,MAAM,KAAA,GAAQ,QAAA,IAAY,CAAA,GAAI,CAAA,GAAI,CAAA;AAClC,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,CAAM,KAAA,CAAM,KAAK,CAAA,EAAG;AACrC,IAAA,MAAM,KAAA,GAAQ,aAAa,IAAI,CAAA;AAC/B,IAAA,MAAM,KAAA,GAAA,CAAS,QAAA,IAAY,CAAA,GAAI,KAAA,CAAM,CAAC,IAAI,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA,EAAG,IAAA,EAAK;AAChE,IAAA,IAAI,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AAAA,EAC9B;AACA,EAAA,OAAO,CAAC,GAAG,IAAI,GAAA,CAAI,MAAM,CAAC,CAAA;AAC5B;AAgBA,IAAM,cAAA,GAAiB;AAAA,EACrB,WAAA;AAAA,EAAa,QAAA;AAAA,EAAU,SAAA;AAAA,EAAW,cAAA;AAAA,EAAgB,gBAAA;AAAA,EAClD,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,WAAA;AAAA,EAAa,SAAA;AAAA,EAAW,UAAA;AAAA,EAAY,WAAA;AAAA,EAAa,kBAAA;AAAA,EAAoB;AAC3F,CAAA;AAEA,IAAM,YAAA,GAAe;AAAA,EACnB,SAAA;AAAA,EAAW,OAAA;AAAA,EAAS,YAAA;AAAA,EAAc,WAAA;AAAA,EAAa,QAAA;AAAA,EAAU,YAAA;AAAA,EACzD,cAAA;AAAA,EAAgB,mBAAA;AAAA,EAAqB,qBAAA;AAAA,EAAuB,aAAA;AAAA,EAC5D,UAAA;AAAA,EAAY,gBAAA;AAAA,EAAkB,mBAAA;AAAA,EAAqB,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,SAAA;AAAA,EACnE,YAAA;AAAA,EAAc,kBAAA;AAAA,EAAoB,oBAAA;AAAA,EAClC,YAAA;AAAA,EAAc,aAAA;AAAA,EAAe,YAAA;AAAA,EAAc,aAAA;AAAA,EAAe,cAAA;AAAA,EAC1D,gBAAA;AAAA,EAAkB,gBAAA;AAAA;AAAA;AAAA;AAAA,EAIlB,YAAA;AAAA,EAAc;AAChB,CAAA;AAEO,IAAM,kBAAA,GAAqB,CAAC,GAAG,cAAA,EAAgB,GAAG,YAAY;AAErE,SAAS,eAAe,KAAA,EAAwB;AAC9C,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM,OAAO,EAAA;AAClD,EAAA,MAAM,GAAA,GAAM,OAAO,KAAA,KAAU,QAAA,GAAW,KAAK,SAAA,CAAU,KAAK,CAAA,GAAI,MAAA,CAAO,KAAK,CAAA;AAC5E,EAAA,IAAI,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA,IAAK,IAAI,QAAA,CAAS,GAAG,CAAA,IAAK,GAAA,CAAI,SAAS,IAAI,CAAA,IAAK,GAAA,CAAI,QAAA,CAAS,IAAI,CAAA,EAAG;AACtF,IAAA,OAAO,CAAA,CAAA,EAAI,GAAA,CAAI,OAAA,CAAQ,IAAA,EAAM,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,EACpC;AACA,EAAA,OAAO,GAAA;AACT;AAEA,IAAM,iBAAA,GAAoB,CAAC,KAAA,KAA2B;AACpD,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM,OAAO,EAAA;AAClD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AAC1D,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB,CAAA;AAEA,IAAM,mBAAA,GAAsB,CAAC,IAAA,KAA0B;AACrD,EAAA,IAAI,IAAA,KAAS,IAAI,OAAO,MAAA;AACxB,EAAA,IAAI,kBAAkB,IAAA,CAAK,IAAI,CAAA,EAAG,OAAO,OAAO,IAAI,CAAA;AACpD,EAAA,IAAI,IAAA,KAAS,MAAA,IAAU,IAAA,KAAS,OAAA,SAAgB,IAAA,KAAS,MAAA;AACzD,EAAA,IAAI,KAAK,UAAA,CAAW,GAAG,KAAK,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG;AAChD,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,IACxB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT,CAAA;AAEA,SAAS,aAAa,OAAA,EAA4B;AAChD,EAAA,OAAO;AAAA,IACL,OAAA,CAAQ,EAAA;AAAA,IAAI,OAAA,CAAQ,MAAA;AAAA,IAAQ,OAAA,CAAQ,OAAA;AAAA,IAAS,OAAA,CAAQ,YAAA;AAAA,IACrD,OAAA,CAAQ,cAAA;AAAA,IAAgB,OAAA,CAAQ,MAAA;AAAA,IAAQ,OAAA,CAAQ,MAAA;AAAA,IAChD,OAAA,CAAQ,SAAA;AAAA,IAAW,OAAA,CAAQ,OAAA;AAAA,IAAS,OAAA,CAAQ,QAAA;AAAA,IAAU,OAAA,CAAQ,SAAA;AAAA,IAC9D,OAAA,CAAQ,SAAA;AAAA,IAAW,IAAA,CAAK,UAAU,OAAO;AAAA,GAC3C,CAAE,IAAI,cAAc,CAAA;AACtB;AAEA,SAAS,WAAA,CAAY,KAAA,EAAoB,MAAA,EAAgB,KAAA,EAAyB;AAChF,EAAA,OAAO;AAAA,IACL,KAAA,CAAM,EAAA;AAAA,IAAI,KAAA,CAAM,KAAA;AAAA,IAAO,KAAA,CAAM,UAAA;AAAA,IAAY,KAAA,CAAM,SAAA;AAAA,IAAW,KAAA,CAAM,MAAA;AAAA,IAAQ,KAAA,CAAM,UAAA;AAAA,IAC9E,KAAA,CAAM,OAAA;AAAA,IAAS,KAAA,CAAM,YAAA;AAAA,IAAc,KAAA,CAAM,cAAA;AAAA,IAAgB,KAAA,CAAM,MAAA;AAAA,IAC/D,KAAA,CAAM,QAAA;AAAA,IAAU,KAAA,CAAM,cAAA;AAAA,IAAgB,KAAA,CAAM,iBAAA;AAAA,IAAmB,KAAA,CAAM,IAAA;AAAA,IAAM,KAAA,CAAM,IAAA;AAAA,IAAM,KAAA,CAAM,OAAA;AAAA,IAC7F,KAAA,CAAM,UAAA;AAAA,IAAY,KAAA,CAAM,gBAAA;AAAA,IAAkB,KAAA,CAAM,kBAAA;AAAA,IAChD,MAAA,CAAO,IAAA;AAAA,IAAM,iBAAA,CAAkB,OAAO,KAAK,CAAA;AAAA,IAAG,MAAA,CAAO,IAAA;AAAA,IAAM,MAAA,CAAO,KAAA;AAAA,IAAO,MAAA,CAAO,MAAA;AAAA,IAChF,OAAO,QAAA,KAAa,MAAA,GAAY,KAAK,IAAA,CAAK,SAAA,CAAU,OAAO,QAAQ,CAAA;AAAA,IACnE,KAAA,CAAM,cAAA,GAAiB,KAAK,CAAA,KAAM,MAAA,GAAY,EAAA,GAAK,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,cAAA,CAAe,KAAK,CAAC,CAAA;AAAA,IAC7F,IAAA,CAAK,UAAU,MAAM;AAAA,GACvB,CAAE,IAAI,cAAc,CAAA;AACtB;AAOA,SAAS,gBAAgB,KAAA,EAA4B;AACnD,EAAA,MAAM,EAAE,OAAA,EAAS,QAAA,EAAU,GAAG,MAAK,GAAI,KAAA;AACvC,EAAA,OAAO,cAAA,CAAe,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA;AAC5C;AAOO,SAAS,YAAA,CAAa,SAAkB,MAAA,EAAwC;AACrF,EAAA,MAAM,KAAA,GAAQ,CAAC,kBAAA,CAAmB,IAAA,CAAK,GAAG,CAAC,CAAA;AAC3C,EAAA,KAAA,CAAM,IAAA,CAAK,CAAC,GAAG,YAAA,CAAa,OAAO,CAAA,EAAG,GAAG,YAAA,CAAa,GAAA,CAAI,MAAM,EAAE,CAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA;AAC9E,EAAA,MAAM,OAAA,GAAU,CAAC,GAAG,MAAM,EAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,EAAA,CAAG,aAAA,CAAc,CAAA,CAAE,EAAE,CAAC,CAAA;AACnE,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,MAAM,KAAA,GAAQ,gBAAgB,KAAK,CAAA;AACnC,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,IAAW,EAAC;AAClC,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,KAAA,CAAM,KAAK,CAAC,GAAG,aAAa,OAAO,CAAA,EAAG,GAAG,WAAA,CAAY,KAAA,EAAO,EAAE,IAAA,EAAM,EAAA,IAAM,CAAC,CAAA,EAAG,KAAK,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA;AAC9F,MAAA;AAAA,IACF;AACA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACvC,MAAA,KAAA,CAAM,KAAK,CAAC,GAAG,aAAa,OAAO,CAAA,EAAG,GAAG,WAAA,CAAY,KAAA,EAAO,OAAA,CAAQ,CAAC,GAAG,CAAC,CAAA,EAAG,KAAK,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,IAC9F;AAAA,EACF;AACA,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA;AAC5B;AAGO,SAAS,aAAa,IAAA,EAAwB;AACnD,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,OAAA,GAAU,EAAA;AACd,EAAA,IAAI,MAAA,GAAS,KAAA;AACb,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,MAAM,EAAA,GAAK,KAAK,CAAC,CAAA;AACjB,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,IAAI,OAAO,GAAA,EAAK;AACd,QAAA,IAAI,IAAA,CAAK,CAAA,GAAI,CAAC,CAAA,KAAM,GAAA,EAAK;AACvB,UAAA,OAAA,IAAW,GAAA;AACX,UAAA,CAAA,IAAK,CAAA;AAAA,QACP,CAAA,MAAO;AACL,UAAA,MAAA,GAAS,KAAA;AAAA,QACX;AAAA,MACF,CAAA,MAAO;AACL,QAAA,OAAA,IAAW,EAAA;AAAA,MACb;AAAA,IACF,CAAA,MAAA,IAAW,EAAA,KAAO,GAAA,IAAO,OAAA,KAAY,EAAA,EAAI;AACvC,MAAA,MAAA,GAAS,IAAA;AAAA,IACX,CAAA,MAAA,IAAW,OAAO,GAAA,EAAK;AACrB,MAAA,KAAA,CAAM,KAAK,OAAO,CAAA;AAClB,MAAA,OAAA,GAAU,EAAA;AAAA,IACZ,CAAA,MAAO;AACL,MAAA,OAAA,IAAW,EAAA;AAAA,IACb;AAAA,EACF;AACA,EAAA,KAAA,CAAM,KAAK,OAAO,CAAA;AAClB,EAAA,OAAO,KAAA;AACT;AAGO,SAAS,gBAAgB,GAAA,EAAuB;AACrD,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,IAAI,OAAA,GAAU,EAAA;AACd,EAAA,IAAI,MAAA,GAAS,KAAA;AACb,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACnC,IAAA,MAAM,EAAA,GAAK,IAAI,CAAC,CAAA;AAChB,IAAA,IAAI,OAAO,GAAA,EAAK;AACd,MAAA,IAAI,MAAA,IAAU,GAAA,CAAI,CAAA,GAAI,CAAC,MAAM,GAAA,EAAK;AAChC,QAAA,OAAA,IAAW,IAAA;AACX,QAAA,CAAA,IAAK,CAAA;AACL,QAAA;AAAA,MACF;AACA,MAAA,MAAA,GAAS,CAAC,MAAA;AACV,MAAA,OAAA,IAAW,EAAA;AAAA,IACb,WAAW,CAAC,MAAA,KAAW,EAAA,KAAO,IAAA,IAAQ,OAAO,IAAA,CAAA,EAAO;AAClD,MAAA,IAAI,OAAO,IAAA,IAAQ,GAAA,CAAI,IAAI,CAAC,CAAA,KAAM,MAAM,CAAA,IAAK,CAAA;AAC7C,MAAA,IAAI,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG,OAAA,CAAQ,KAAK,OAAO,CAAA;AAC5C,MAAA,OAAA,GAAU,EAAA;AAAA,IACZ,CAAA,MAAO;AACL,MAAA,OAAA,IAAW,EAAA;AAAA,IACb;AAAA,EACF;AACA,EAAA,IAAI,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG,OAAA,CAAQ,KAAK,OAAO,CAAA;AAC5C,EAAA,OAAO,OAAA;AACT;AAOA,IAAM,MAAM,CAAC,IAAA,KAAsC,SAAS,EAAA,GAAK,MAAA,GAAY,OAAO,IAAI,CAAA;AACxF,IAAM,QAAA,GAAW,CAAC,IAAA,KAAsC,IAAA,KAAS,KAAK,MAAA,GAAY,IAAA;AAElF,SAAS,SAAY,IAAA,EAA6B;AAChD,EAAA,IAAI,CAAC,MAAM,OAAO,MAAA;AAClB,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,EACxB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAOO,SAAS,iBAAiB,GAAA,EAAgC;AAC/D,EAAA,MAAM,KAAA,GAAQ,gBAAgB,GAAG,CAAA;AACjC,EAAA,IAAI,MAAM,MAAA,GAAS,CAAA,EAAG,MAAM,IAAI,MAAM,2CAA2C,CAAA;AACjF,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,KAAA,CAAM,CAAC,CAAC,CAAA;AACpC,EAAA,IAAI,MAAA,CAAO,KAAK,CAAC,IAAA,KAAS,WAAW,IAAA,CAAK,IAAI,CAAC,CAAA,EAAG;AAChD,IAAA,MAAM,IAAI,MAAM,uFAAuF,CAAA;AAAA,EACzG;AACA,EAAA,MAAM,GAAA,GAAM,CAAC,IAAA,KAAyB;AACpC,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA;AAC/B,IAAA,IAAI,MAAM,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,CAAA,yCAAA,EAA4C,IAAI,CAAA,CAAA,CAAG,CAAA;AAChF,IAAA,OAAO,GAAA;AAAA,EACT,CAAA;AACA,EAAA,MAAM,EAAA,GAAK,CAAC,KAAA,EAAiB,IAAA,KAAyB,MAAM,GAAA,CAAI,IAAI,CAAC,CAAA,IAAK,EAAA;AAE1E,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAyB;AAC/C,EAAA,IAAI,OAAA;AAEJ,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAA6B;AAClD,IAAA,MAAM,EAAA,GAAK,EAAA,CAAG,KAAA,EAAO,WAAW,CAAA;AAChC,IAAA,MAAM,MAAA,GAAS,EAAA,CAAG,KAAA,EAAO,QAAQ,CAAA;AACjC,IAAA,MAAM,OAAA,GAAU,EAAA,CAAG,KAAA,EAAO,SAAS,CAAA;AACnC,IAAA,MAAM,YAAA,GAAe,MAAA,CAAO,EAAA,CAAG,KAAA,EAAO,cAAc,CAAC,CAAA;AACrD,IAAA,IAAI,CAAC,EAAA,IAAM,CAAC,MAAA,IAAU,CAAC,OAAA,IAAW,CAAC,MAAA,CAAO,aAAA,CAAc,YAAY,CAAA,IAAK,YAAA,GAAe,CAAA,EAAG;AACzF,MAAA,MAAM,IAAI,MAAM,wFAAwF,CAAA;AAAA,IAC1G;AACA,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAI,OAAA,CAAQ,EAAA,KAAO,EAAA,IAAM,OAAA,CAAQ,MAAA,KAAW,MAAA,IAAU,OAAA,CAAQ,OAAA,KAAY,OAAA,IAAW,OAAA,CAAQ,YAAA,KAAiB,YAAA,EAAc;AAC1H,QAAA,MAAM,IAAI,MAAM,4DAA4D,CAAA;AAAA,MAC9E;AACA,MAAA,OAAO,OAAA;AAAA,IACT;AACA,IAAA,MAAM,QAAQ,QAAA,CAA2B,EAAA,CAAG,OAAO,kBAAkB,CAAC,KAAK,EAAC;AAC5E,IAAA,IAAI,WAAA,IAAe,SAAS,gBAAA,IAAoB,KAAA,IAAS,aAAa,KAAA,IAAS,YAAA,IAAgB,KAAA,IAAS,MAAA,IAAU,KAAA,EAAO;AACvH,MAAA,MAAM,IAAI,MAAM,sEAAsE,CAAA;AAAA,IACxF;AACA,IAAA,OAAA,GAAU;AAAA,MACR,GAAG,KAAA;AAAA,MACH,EAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA,YAAA;AAAA,MACA,cAAA,EAAgB,EAAA,CAAG,KAAA,EAAO,gBAAgB,CAAA,IAAK,MAAA;AAAA,MAC/C,MAAA,EAAS,EAAA,CAAG,KAAA,EAAO,QAAQ,CAAA,IAAK,MAAA;AAAA,MAChC,MAAA,EAAS,EAAA,CAAG,KAAA,EAAO,QAAQ,CAAA,IAAK,MAAA;AAAA,MAChC,WAAW,MAAA,CAAO,EAAA,CAAG,KAAA,EAAO,WAAW,KAAK,CAAC,CAAA;AAAA,MAC7C,SAAS,MAAA,CAAO,EAAA,CAAG,KAAA,EAAO,SAAS,KAAK,CAAC,CAAA;AAAA,MACzC,UAAU,MAAA,CAAO,EAAA,CAAG,KAAA,EAAO,UAAU,KAAK,CAAC,CAAA;AAAA,MAC3C,SAAA,EAAW,EAAA,CAAG,KAAA,EAAO,WAAW,CAAA,KAAM,MAAA;AAAA,MACtC,WAAW,MAAA,CAAO,EAAA,CAAG,KAAA,EAAO,kBAAkB,KAAK,CAAC;AAAA,KACtD;AACA,IAAA,IAAI,CAAC,CAAC,OAAA,CAAQ,SAAA,EAAW,QAAQ,OAAA,EAAS,OAAA,CAAQ,QAAA,EAAU,OAAA,CAAQ,SAAS,CAAA,CAAE,KAAA,CAAM,MAAA,CAAO,QAAQ,CAAA,EAAG;AACrG,MAAA,MAAM,IAAI,MAAM,kEAAkE,CAAA;AAAA,IACpF;AACA,IAAA,OAAO,OAAA;AAAA,EACT,CAAA;AAEA,EAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,EAAG;AACjC,IAAA,MAAM,KAAA,GAAQ,aAAa,IAAI,CAAA;AAC/B,IAAA,IAAI,MAAM,MAAA,KAAW,CAAA,IAAK,KAAA,CAAM,CAAC,MAAM,EAAA,EAAI;AAC3C,IAAA,MAAM,cAAA,GAAiB,cAAc,KAAK,CAAA;AAC1C,IAAA,MAAM,OAAA,GAAU,EAAA,CAAG,KAAA,EAAO,SAAS,CAAA;AACnC,IAAA,IAAI,CAAC,OAAA,EAAS;AAEd,IAAA,IAAI,KAAA,GAAQ,SAAA,CAAU,GAAA,CAAI,OAAO,CAAA;AACjC,IAAA,IAAI,CAAC,KAAA,EAAO;AAGV,MAAA,MAAM,QAAQ,QAAA,CAAkC,EAAA,CAAG,OAAO,gBAAgB,CAAC,KAAK,EAAC;AACjF,MAAA,IAAI,WAAA,IAAe,KAAA,IAAS,gBAAA,IAAoB,KAAA,EAAO;AACrD,QAAA,MAAM,IAAI,MAAM,0DAA0D,CAAA;AAAA,MAC5E;AACA,MAAA,MAAM,OAAA,GAAU,QAAA,CAAS,EAAA,CAAG,KAAA,EAAO,cAAc,CAAC,CAAA;AAClD,MAAA,MAAM,YAAA,GAAe,GAAA,CAAI,EAAA,CAAG,KAAA,EAAO,mBAAmB,CAAC,CAAA;AACvD,MAAA,IAAI,OAAA,KAAY,cAAA,CAAe,OAAA,IAAW,YAAA,KAAiB,eAAe,YAAA,EAAc;AACtF,QAAA,MAAM,IAAI,MAAM,+DAA+D,CAAA;AAAA,MACjF;AACA,MAAA,KAAA,GAAQ;AAAA,QACN,GAAG,KAAA;AAAA,QACH,EAAA,EAAI,OAAA;AAAA,QACJ,UAAU,cAAA,CAAe,EAAA;AAAA,QACzB,MAAA,EAAQ,SAAS,EAAA,CAAG,KAAA,EAAO,QAAQ,CAAC,CAAA,IAAM,KAAA,CAAM,MAAA,IAAiC,cAAA,CAAe,MAAA;AAAA,QAChG,gBAAgB,QAAA,CAAS,EAAA,CAAG,OAAO,qBAAqB,CAAC,KAAM,KAAA,CAAM,cAAA;AAAA,QACrE,QAAQ,QAAA,CAAS,EAAA,CAAG,OAAO,QAAQ,CAAC,KAAM,KAAA,CAAM,MAAA;AAAA,QAChD,QAAS,QAAA,CAAS,EAAA,CAAG,OAAO,aAAa,CAAC,KAAK,KAAA,CAAM,MAAA;AAAA,QACrD,SAAA,EAAW,OAAO,EAAA,CAAG,KAAA,EAAO,WAAW,CAAA,IAAK,KAAA,CAAM,aAAa,CAAC,CAAA;AAAA,QAChE,KAAA,EAAQ,SAAS,EAAA,CAAG,KAAA,EAAO,OAAO,CAAC,CAAA,IAAK,MAAM,KAAA,IAAS,OAAA;AAAA,QACvD,YAAY,QAAA,CAAS,EAAA,CAAG,OAAO,YAAY,CAAC,KAAM,KAAA,CAAM,UAAA;AAAA,QACxD,UAAA,EAAY,SAAS,EAAA,CAAG,KAAA,EAAO,YAAY,CAAC,CAAA,IAAM,MAAM,UAAA,IAAqC,OAAA;AAAA,QAC7F,OAAA;AAAA,QACA,YAAA;AAAA,QACA,UAAU,QAAA,CAAS,EAAA,CAAG,OAAO,UAAU,CAAC,KAAM,KAAA,CAAM,QAAA;AAAA,QACpD,gBAAgB,QAAA,CAAS,EAAA,CAAG,OAAO,gBAAgB,CAAC,KAAM,KAAA,CAAM,cAAA;AAAA,QAChE,mBAAmB,GAAA,CAAI,EAAA,CAAG,OAAO,mBAAmB,CAAC,KAAM,KAAA,CAAM,iBAAA;AAAA,QACjE,MAAM,GAAA,CAAI,EAAA,CAAG,OAAO,MAAM,CAAC,KAAM,KAAA,CAAM,IAAA;AAAA,QACvC,MAAM,QAAA,CAAS,EAAA,CAAG,OAAO,MAAM,CAAC,KAAM,KAAA,CAAM,IAAA;AAAA,QAC5C,SAAS,QAAA,CAAS,EAAA,CAAG,OAAO,SAAS,CAAC,KAAM,KAAA,CAAM,OAAA;AAAA,QAClD,YAAY,GAAA,CAAI,EAAA,CAAG,OAAO,YAAY,CAAC,KAAM,KAAA,CAAM,UAAA;AAAA,QACnD,kBAAkB,QAAA,CAAS,EAAA,CAAG,OAAO,kBAAkB,CAAC,KAAM,KAAA,CAAM,gBAAA;AAAA,QACpE,oBAAqB,QAAA,CAAS,EAAA,CAAG,OAAO,oBAAoB,CAAC,KAC3D,KAAA,CAAM,kBAAA;AAAA,QACR,SAAS,EAAC;AAAA;AAAA,QAEV,gBAAgB,KAAA,CAAM,OAAA,CAAQ,MAAM,cAAc,CAAA,GAAI,EAAC,GAAI;AAAA,OAC7D;AACA,MAAA,SAAA,CAAU,GAAA,CAAI,SAAS,KAAK,CAAA;AAAA,IAC9B;AAEA,IAAA,MAAM,UAAA,GAAa,EAAA,CAAG,KAAA,EAAO,YAAY,CAAA;AACzC,IAAA,IAAI,CAAC,UAAA,EAAY;AAEjB,IAAA,MAAM,aAAa,QAAA,CAAiB,EAAA,CAAG,OAAO,YAAY,CAAC,KAAK,EAAC;AACjE,IAAA,MAAM,MAAA,GAAiB;AAAA,MACrB,GAAG,UAAA;AAAA,MACH,IAAA,EAAM,UAAA;AAAA,MACN,GAAI,EAAA,CAAG,KAAA,EAAO,aAAa,MAAM,EAAA,GAAK,EAAE,KAAA,EAAO,mBAAA,CAAoB,GAAG,KAAA,EAAO,aAAa,CAAC,CAAA,KAAM,EAAC;AAAA,MAClG,GAAI,QAAA,CAAS,EAAA,CAAG,KAAA,EAAO,YAAY,CAAC,CAAA,GAAI,EAAE,IAAA,EAAM,EAAA,CAAG,KAAA,EAAO,YAAY,CAAA,KAAM,EAAC;AAAA,MAC7E,GAAI,QAAA,CAAS,EAAA,CAAG,KAAA,EAAO,aAAa,CAAC,CAAA,GAAI,EAAE,KAAA,EAAO,EAAA,CAAG,KAAA,EAAO,aAAa,CAAA,KAAM,EAAC;AAAA,MAChF,GAAI,QAAA,CAAS,EAAA,CAAG,KAAA,EAAO,cAAc,CAAC,CAAA,GAAI,EAAE,MAAA,EAAQ,EAAA,CAAG,KAAA,EAAO,cAAc,CAAA,KAAM,EAAC;AAAA,MACnF,GAAI,EAAA,CAAG,KAAA,EAAO,gBAAgB,MAAM,EAAA,GAChC,EAAE,QAAA,EAAU,QAAA,CAAS,GAAG,KAAA,EAAO,gBAAgB,CAAC,CAAA,KAChD;AAAC,KACP;AACA,IAAC,KAAA,CAAM,OAAA,CAAqB,IAAA,CAAK,MAAM,CAAA;AACvC,IAAA,MAAM,QAAA,GAAW,QAAA,CAAkB,EAAA,CAAG,KAAA,EAAO,gBAAgB,CAAC,CAAA;AAC9D,IAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,MAAA,CAAC,KAAA,CAAM,cAAA,KAAmB,EAAC,EAAG,KAAK,QAA8D,CAAA;AAAA,IACnG;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,OAAA,EAAS,MAAM,IAAI,MAAM,0DAA0D,CAAA;AACxF,EAAA,OAAO,EAAE,SAAS,MAAA,EAAQ,CAAC,GAAG,SAAA,CAAU,MAAA,EAAQ,CAAA,EAAE;AACpD;;;ACjjBO,IAAM,OAAA,GAAU;AAChB,IAAM,OAAA,GAAU;AAChB,IAAM,UAAA,GAAa;AACnB,IAAM,MAAA,GAAS;AAAA,EACpB,OAAA,EAAS,WAAA;AAAA,EACT,MAAA,EAAQ,SAAA;AAAA,EACR,SAAA,EAAW;AACb;ACRO,IAAM,WAAA,GAAc;AACpB,IAAM,uBAAA,GAA0B;AAkChC,IAAM,oBAAA,GAAqE;AAAA,EAChF,IAAA,EAAM,CAAA;AAAA,EACN,SAAA,EAAW,CAAA;AAAA,EACX,QAAA,EAAU,CAAA;AAAA,EACV,IAAA,EAAM;AACR;AACO,SAAS,cAAA,CAAe,mBAAmC,YAAA,EAAuD;AACvH,EAAA,IAAI,cAAc,OAAO,YAAA;AACzB,EAAA,IAAI,CAAC,mBAAmB,OAAO,MAAA;AAC/B,EAAA,IAAI,iBAAA,KAAsB,QAAQ,OAAO,MAAA;AACzC,EAAA,MAAM,EAAA,GAAK,kBAAkB,UAAA,CAAW,OAAO,IAAI,iBAAA,CAAkB,KAAA,CAAM,CAAC,CAAA,GAAI,iBAAA;AAChF,EAAA,IAAI,OAAO,MAAA,IAAU,EAAA,KAAO,SAAA,IAAa,EAAA,KAAO,aAAa,OAAO,MAAA;AACpE,EAAA,IAAI,EAAA,KAAO,eAAe,EAAA,CAAG,UAAA,CAAW,YAAY,CAAA,IAAK,EAAA,KAAO,UAAU,OAAO,WAAA;AACjF,EAAA,OAAO,UAAA;AACT;AACO,SAAS,kBAAA,CAAmB,mBAAmC,YAAA,EAA2C;AAC/G,EAAA,OAAO,oBAAA,CAAqB,cAAA,CAAe,iBAAA,EAAmB,YAAY,CAAC,CAAA;AAC7E;AAWO,IAAM,sBAAA,GAAyB;AAC/B,IAAM,gBAAA,GAAmB;AACzB,IAAM,kBAAA,GAAqB;AAC3B,IAAM,eAAA,GAAkB;AACxB,IAAM,mBAAA,GAAsB;AAC5B,IAAM,iBAAA,GAAoB;AAC1B,SAAS,YAAY,QAAA,EAA0B;AAAE,EAAA,OAAO,QAAQ,QAAQ,CAAA,CAAA;AAAI;AAC5E,SAAS,cAAc,GAAA,EAA6B;AACzD,EAAA,OAAO,EAAE,GAAA,EAAK,MAAA,EAAQ,WAAA,EAAa,aAAa,CAAA,EAAG,OAAA,EAAS,EAAA,EAAI,UAAA,EAAY,CAAA,EAAG,MAAA,EAAQ,EAAC,EAAG,OAAO,IAAA,EAAK;AACzG;AACO,SAAS,kBAAkB,OAAA,EAAqC;AACrE,EAAA,MAAM,KAAA,GAAQ,6BAAA,CAA8B,IAAA,CAAK,OAAO,IAAI,CAAC,CAAA;AAC7D,EAAA,OAAO,KAAA,IAAS,KAAA,KAAU,OAAA,GAAU,KAAA,GAAQ,MAAA;AAC9C;AACO,SAAS,gBAAgB,OAAA,EAAgC;AAC9D,EAAA,MAAM,EAAA,GAAK,6BAAA,CAA8B,IAAA,CAAK,OAAO,CAAA;AACrD,EAAA,IAAI,EAAA,GAAK,CAAC,CAAA,IAAK,CAAC,0BAAA,CAA2B,KAAK,EAAA,CAAG,CAAC,CAAC,CAAA,EAAG,OAAO,IAAA;AAC/D,EAAA,OAAO,EAAA,GAAK,CAAC,CAAA,EAAG,KAAA,CAAM,sBAAsB,CAAA,GAAI,CAAC,CAAA,EAAG,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA,IAAK,IAAA;AAC5E;AACO,SAAS,gBAAA,CAAiB,IAAA,EAAc,OAAA,EAAiB,OAAA,EAAqC;AACnG,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC5B,EAAA,MAAM,IAAA,GAAA,CAAQ,MAAM,EAAA,CAAG,EAAE,KAAK,EAAA,EAAI,OAAA,CAAQ,UAAU,EAAE,CAAA;AACtD,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,CAAC,EAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,QAAA,EAAU,EAAE,CAAC,CAAA,CAAE,KAAK,GAAG,CAAA;AACzE,EAAA,IAAI,YAAY,eAAA,EAAiB,OAAO,UAAU,eAAA,CAAgB,OAAO,KAAK,KAAK,CAAA,CAAA;AACnF,EAAA,IAAI,OAAA,KAAY,qBAAqB,OAAO,YAAA;AAC5C,EAAA,IAAI,OAAA,KAAY,kBAAkB,OAAO,SAAA;AACzC,EAAA,IAAI,OAAA,KAAY,oBAAoB,OAAO,WAAA;AAC3C,EAAA,IAAI,OAAA,KAAY,mBAAmB,OAAO,YAAA;AAC1C,EAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,aAAa,CAAA,EAAG;AACrC,IAAA,MAAM,OAAA,GAAU,kBAAkB,OAAO,CAAA;AACzC,IAAA,OAAO,CAAC,OAAA,GAAU,kBAAA,GAAqB,IAAA,CAAK,WAAA,EAAY,KAAM,QAAA,GAAW,CAAA,WAAA,EAAc,OAAO,CAAA,CAAA,GAAK,CAAA,WAAA,EAAc,OAAO,IAAI,IAAI,CAAA,CAAA;AAAA,EAClI;AACA,EAAA,IAAI,QAAQ,UAAA,CAAW,OAAO,CAAA,EAAG,OAAO,cAAc,KAAK,CAAA,CAAA;AAC3D,EAAA,OAAO,MAAA;AACT;ACjGA,SAAS,OAAO,KAAA,EAAkD;AAAE,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAAG;AACjJ,SAAS,SAAS,KAAA,EAAiC;AAAE,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,aAAA,CAAc,KAAK,KAAK,KAAA,GAAQ,CAAA;AAAG;AACnI,SAAS,YAAY,KAAA,EAAiC;AAAE,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,aAAA,CAAc,KAAK,KAAK,KAAA,IAAS,CAAA;AAAG;AAChI,SAAS,mBAAmB,KAAA,EAA8B;AAC/D,EAAA,IAAI,CAAC,MAAA,CAAO,KAAK,CAAA,IAAK,KAAA,CAAM,WAAW,WAAA,EAAa,MAAM,IAAI,KAAA,CAAM,kDAAkD,CAAA;AACtH,EAAA,IAAI,CAAC,WAAA,CAAY,KAAA,CAAM,OAAO,CAAA,IAAK,OAAO,KAAA,CAAM,OAAA,KAAY,QAAA,IAAY,CAAC,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,OAAO,CAAC,CAAA,IAAK,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,MAAM,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,uCAAuC,CAAA;AAC5M,EAAA,KAAA,MAAW,GAAA,IAAO,CAAC,cAAA,EAAgB,QAAA,EAAU,QAAQ,aAAa,CAAA,MAAO,KAAA,CAAM,GAAG,MAAM,MAAA,IAAa,OAAO,MAAM,GAAG,CAAA,KAAM,UAAU,MAAM,IAAI,MAAM,gCAAgC,CAAA;AACrL,EAAA,IAAI,KAAA,CAAM,aAAA,KAAkB,MAAA,KAAc,OAAO,KAAA,CAAM,aAAA,KAAkB,QAAA,IAAY,CAAC,aAAA,CAAc,IAAA,CAAK,KAAA,CAAM,aAAa,CAAA,IAAK,IAAI,GAAA,CAAI,KAAA,CAAM,aAAa,CAAA,CAAE,QAAA,IAAY,IAAI,GAAA,CAAI,KAAA,CAAM,aAAa,CAAA,CAAE,QAAA,CAAA,EAAW,MAAM,IAAI,KAAA,CAAM,6BAA6B,CAAA;AAC/P,EAAA,IAAI,KAAA,CAAM,KAAA,KAAU,MAAA,IAAa,OAAO,KAAA,CAAM,UAAU,SAAA,EAAW,MAAM,IAAI,KAAA,CAAM,gCAAgC,CAAA;AACnH,EAAA,MAAM,sBAAM,IAAI,GAAA,EAAY,EAAG,KAAA,uBAAY,GAAA,EAAY;AACvD,EAAA,KAAA,MAAW,KAAA,IAAS,MAAM,MAAA,EAAQ;AAChC,IAAA,IAAI,CAAC,MAAA,CAAO,KAAK,CAAA,IAAK,OAAO,KAAA,CAAM,EAAA,KAAO,QAAA,IAAY,CAAC,KAAA,CAAM,EAAA,IAAM,OAAO,KAAA,CAAM,IAAA,KAAS,QAAA,IAAY,CAAC,iCAAA,CAAkC,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,IAAK,OAAO,KAAA,CAAM,MAAA,KAAW,QAAA,IAAY,CAAC,gBAAA,CAAiB,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA,IAAK,CAAC,WAAA,CAAY,KAAA,CAAM,KAAK,CAAA,IAAK,CAAC,WAAA,CAAY,KAAA,CAAM,KAAK,CAAA,IAAM,KAAA,CAAM,IAAA,KAAS,MAAA,IAAa,KAAA,CAAM,IAAA,KAAS,OAAA,IAAY,GAAA,CAAI,GAAA,CAAI,KAAA,CAAM,EAAE,CAAA,IAAK,KAAA,CAAM,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,uCAAuC,CAAA;AAC7b,IAAA,GAAA,CAAI,GAAA,CAAI,MAAM,EAAE,CAAA;AAAG,IAAA,KAAA,CAAM,GAAA,CAAI,MAAM,IAAI,CAAA;AAAA,EACzC;AACA,EAAA,OAAO,KAAA;AACT;AACO,SAAS,eAAe,KAAA,EAA2B;AACxD,EAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,KAAK,GAAG,MAAM,IAAI,MAAM,4BAA4B,CAAA;AACvE,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAY;AAC9B,EAAA,KAAA,MAAW,OAAO,KAAA,EAAO;AACvB,IAAA,IAAI,CAAC,MAAA,CAAO,GAAG,CAAA,IAAK,OAAO,GAAA,CAAI,IAAA,KAAS,QAAA,IAAY,CAAC,GAAA,CAAI,IAAA,IAAQ,GAAA,CAAI,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,IAAK,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,QAAA,CAAS,IAAI,CAAA,IAAK,KAAA,CAAM,GAAA,CAAI,GAAA,CAAI,IAAI,CAAA,IAAK,OAAO,GAAA,CAAI,OAAA,KAAY,QAAA,IAAY,CAAC,MAAA,CAAO,GAAA,CAAI,MAAM,CAAA,IAAK,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,UAAU,CAAA,IAAK,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,YAAY,CAAA,IAAK,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,wCAAwC,CAAA;AACtX,IAAA,KAAA,CAAM,GAAA,CAAI,IAAI,IAAI,CAAA;AAClB,IAAA,KAAA,MAAW,CAAC,IAAI,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA,EAAG;AACpD,MAAA,IAAI,CAAC,MAAA,CAAO,KAAK,CAAA,IAAK,MAAM,EAAA,KAAO,EAAA,IAAM,CAAC,EAAA,IAAM,MAAM,OAAA,KAAY,CAAA,IAAK,KAAA,CAAM,cAAA,KAAmB,KAAK,CAAC,WAAA,CAAY,KAAA,CAAM,IAAI,KAAK,CAAC,QAAA,CAAS,KAAA,CAAM,EAAE,KAAK,KAAA,CAAM,IAAA,IAAQ,KAAA,CAAM,EAAA,IAAM,MAAM,EAAA,GAAK,GAAA,CAAI,OAAA,CAAQ,MAAA,IAAU,CAAC,CAAC,KAAA,EAAO,OAAA,EAAS,QAAA,EAAU,OAAO,CAAA,CAAE,QAAA,CAAS,MAAA,CAAO,MAAM,IAAI,CAAC,CAAA,KAAM,KAAA,CAAM,SAAS,KAAA,GAAQ,CAAC,CAAC,MAAA,EAAQ,KAAK,CAAA,CAAE,QAAA,CAAS,MAAA,CAAO,KAAA,CAAM,OAAO,CAAC,CAAA,GAAI,KAAA,CAAM,OAAA,KAAY,WAAe,KAAA,CAAM,KAAA,KAAU,MAAA,IAAa,OAAO,MAAM,KAAA,KAAU,QAAA,EAAW,MAAM,IAAI,MAAM,sCAAsC,CAAA;AAAA,IAC3f;AACA,IAAA,kBAAA,CAAmB,GAAA,CAAI,SAAS,GAAA,CAAI,MAAA,EAA6B,GAAG,EAAE,iBAAA,EAAmB,yBAAyB,CAAA;AAClH,IAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAChC,IAAA,MAAM,WAAW,qBAAA,CAAsB,GAAA,CAAI,SAAS,EAAE,iBAAA,EAAmB,yBAAyB,CAAA;AAClG,IAAA,KAAA,MAAW,UAAA,IAAc,IAAI,UAAA,EAAY;AACvC,MAAA,IAAI,CAAC,MAAA,CAAO,UAAU,CAAA,IAAK,OAAO,UAAA,CAAW,OAAA,KAAY,QAAA,EAAU,MAAM,IAAI,KAAA,CAAM,yBAAyB,CAAA;AAC5G,MAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,MAAA,CAAO,UAAA,CAAW,OAAO,CAAA;AAC3C,MAAA,IAAI,CAAC,MAAA,CAAO,KAAK,CAAA,IAAK,OAAA,CAAQ,IAAI,UAAA,CAAW,OAAO,CAAA,IAAK,OAAO,WAAW,EAAA,KAAO,QAAA,IAAY,OAAO,UAAA,CAAW,MAAA,KAAW,YAAY,UAAA,CAAW,EAAA,KAAO,CAAA,EAAG,UAAA,CAAW,MAAM,CAAA,CAAA,EAAI,UAAA,CAAW,OAAO,CAAA,CAAA,IAAM,UAAA,CAAW,iBAAiB,CAAA,IAAK,UAAA,CAAW,cAAA,KAAmB,CAAA,IAAK,WAAW,IAAA,KAAS,KAAA,CAAM,QAAQ,UAAA,CAAW,EAAA,KAAO,MAAM,EAAA,IAAM,UAAA,CAAW,QAAA,KAAa,KAAA,CAAM,QAAQ,UAAA,CAAW,UAAA,KAAe,GAAA,CAAI,OAAA,CAAQ,MAAM,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,EAAG,OAAO,KAAA,CAAM,EAAE,CAAC,CAAA,IAAK,OAAO,WAAW,SAAA,KAAc,QAAA,IAAY,OAAO,UAAA,CAAW,cAAc,QAAA,IAAY,CAAC,OAAO,QAAA,CAAS,UAAA,CAAW,SAAS,CAAA,IAAK,UAAA,CAAW,UAAA,KAAe,GAAA,CAAI,QAAQ,UAAA,CAAW,QAAA,KAAa,MAAM,MAAM,IAAI,MAAM,wCAAwC,CAAA;AACtsB,MAAA,IAAI,eAAe,UAAA,IAAc,gBAAA,IAAoB,YAAY,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAC/G,MAAA,KAAA,MAAW,OAAO,CAAC,UAAA,EAAY,WAAW,gBAAgB,CAAA,MAAO,UAAA,CAAW,GAAG,MAAM,MAAA,IAAa,OAAO,WAAW,GAAG,CAAA,KAAM,UAAU,MAAM,IAAI,MAAM,kCAAkC,CAAA;AACzL,MAAA,IAAI,UAAA,CAAW,QAAA,KAAa,MAAA,IAAa,CAAC,WAAA,CAAY,UAAA,CAAW,QAAQ,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,kCAAkC,CAAA;AAC9H,MAAA,IAAI,KAAA,CAAM,SAAS,KAAA,EAAO;AACxB,QAAA,MAAM,OAAA,GAAU,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,KAAA,CAAM,IAAA,IAAQ,CAAA,CAAE,EAAA,KAAO,KAAA,CAAM,EAAE,CAAA;AAC/E,QAAA,IAAI,UAAA,CAAW,mBAAmB,cAAA,CAAe,OAAA,EAAS,aAAa,OAAA,IAAW,GAAA,CAAI,OAAA,CAAQ,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,EAAG,MAAA,CAAO,MAAM,EAAE,CAAC,CAAC,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,kCAAkC,CAAA;AAAA,MAChM,WAAW,UAAA,CAAW,cAAA,KAAmB,QAAW,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAClG,MAAA,OAAA,CAAQ,GAAA,CAAI,WAAW,OAAO,CAAA;AAAA,IAChC;AACA,IAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,CAAE,MAAA,EAAQ,MAAM,IAAI,KAAA,CAAM,oCAAoC,CAAA;AACzG,IAAA,MAAM,KAAA,uBAAY,GAAA,EAAY;AAC9B,IAAA,KAAA,MAAW,IAAA,IAAQ,IAAI,YAAA,EAAc;AACnC,MAAA,IAAI,CAAC,OAAO,IAAI,CAAA,IAAK,OAAO,IAAA,CAAK,OAAA,KAAY,QAAA,IAAY,OAAO,IAAA,CAAK,MAAA,KAAW,YAAY,OAAO,IAAA,CAAK,eAAe,QAAA,IAAY,CAAC,KAAK,UAAA,EAAY,MAAM,IAAI,KAAA,CAAM,8BAA8B,CAAA;AACnM,MAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AACrC,MAAA,IAAI,IAAA,CAAK,OAAO,CAAA,EAAG,IAAA,CAAK,MAAM,CAAA,CAAA,EAAI,IAAA,CAAK,OAAO,CAAA,CAAA,EAAI,IAAA,CAAK,UAAU,CAAA,CAAA,IAAM,KAAA,CAAM,IAAI,MAAA,CAAO,IAAA,CAAK,EAAE,CAAC,CAAA,IAAK,CAAC,MAAA,CAAO,KAAK,CAAA,IAAK,MAAM,IAAA,KAAS,KAAA,IAAS,CAAC,OAAA,CAAQ,GAAA,CAAI,KAAK,OAAO,CAAA,IAAK,KAAK,UAAA,KAAe,GAAA,CAAI,QAAQ,IAAA,CAAK,QAAA,KAAa,QAAQ,OAAO,IAAA,CAAK,cAAc,QAAA,EAAU,MAAM,IAAI,KAAA,CAAM,yCAAyC,CAAA;AACpU,MAAA,MAAM,UAAA,GAAa,GAAA,CAAI,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,KAAe,MAAA,CAAO,CAAC,CAAA,IAAK,CAAA,CAAE,OAAA,KAAY,IAAA,CAAK,OAAO,CAAA;AAC9F,MAAA,IAAI,CAAC,OAAO,UAAU,CAAA,IAAK,KAAK,MAAA,KAAW,UAAA,CAAW,UAAU,IAAA,CAAK,cAAA,KAAmB,WAAW,cAAA,IAAkB,CAAC,OAAO,QAAA,CAAS,IAAA,CAAK,SAAS,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,8BAA8B,CAAA;AACrM,MAAA,KAAA,CAAM,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,EAAE,CAAC,CAAA;AAAA,IAC3B;AACA,IAAA,MAAM,cAAA,uBAAqB,GAAA,EAAY;AACvC,IAAA,KAAA,MAAW,IAAA,IAAQ,IAAI,cAAA,EAAgB;AACrC,MAAA,IAAI,CAAC,OAAO,IAAI,CAAA,IAAK,OAAO,IAAA,CAAK,OAAA,KAAY,QAAA,IAAY,OAAO,IAAA,CAAK,MAAA,KAAW,YAAY,OAAO,IAAA,CAAK,kBAAkB,QAAA,IAAY,CAAC,KAAK,aAAA,EAAe,MAAM,IAAI,KAAA,CAAM,iCAAiC,CAAA;AAC5M,MAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AACrC,MAAA,IAAI,IAAA,CAAK,OAAO,CAAA,EAAG,IAAA,CAAK,MAAM,CAAA,CAAA,EAAI,IAAA,CAAK,OAAO,CAAA,CAAA,EAAI,IAAA,CAAK,aAAa,CAAA,CAAA,IAAM,cAAA,CAAe,IAAI,MAAA,CAAO,IAAA,CAAK,EAAE,CAAC,CAAA,IAAK,CAAC,MAAA,CAAO,KAAK,CAAA,IAAK,MAAM,IAAA,KAAS,KAAA,IAAS,CAAC,OAAA,CAAQ,GAAA,CAAI,KAAK,OAAO,CAAA,IAAK,KAAK,UAAA,KAAe,GAAA,CAAI,QAAQ,IAAA,CAAK,QAAA,KAAa,QAAQ,OAAO,IAAA,CAAK,cAAc,QAAA,EAAU,MAAM,IAAI,KAAA,CAAM,4CAA4C,CAAA;AACnV,MAAA,MAAM,UAAA,GAAa,GAAA,CAAI,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,KAAe,MAAA,CAAO,CAAC,CAAA,IAAK,CAAA,CAAE,OAAA,KAAY,IAAA,CAAK,OAAO,CAAA;AAC9F,MAAA,IAAI,CAAC,OAAO,UAAU,CAAA,IAAK,KAAK,MAAA,KAAW,UAAA,CAAW,UAAU,IAAA,CAAK,cAAA,KAAmB,WAAW,cAAA,IAAkB,CAAC,OAAO,QAAA,CAAS,IAAA,CAAK,SAAS,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,iCAAiC,CAAA;AACxM,MAAA,cAAA,CAAe,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,EAAE,CAAC,CAAA;AAAA,IACpC;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;;;ACxDA,IAAM,cAAA,GAAiB,sCAAA;AACvB,eAAsB,WAAW,IAAA,EAA+B;AAC9D,EAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,MAAA,CAAO,OAAO,OAAA,EAAS,IAAI,WAAA,EAAY,CAAE,OAAO,CAAA,EAAG,cAAc,CAAA,CAAA,EAAI,IAAI,EAAE,CAAC,CAAA;AACxG,EAAA,MAAM,QAAQ,IAAI,UAAA,CAAW,OAAO,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA;AAChD,EAAA,KAAA,CAAM,CAAC,CAAA,GAAK,KAAA,CAAM,CAAC,IAAI,EAAA,GAAQ,EAAA;AAC/B,EAAA,KAAA,CAAM,CAAC,CAAA,GAAK,KAAA,CAAM,CAAC,IAAI,EAAA,GAAQ,GAAA;AAC/B,EAAA,MAAM,MAAM,KAAA,CAAM,IAAA,CAAK,KAAA,EAAO,CAAC,MAAM,CAAA,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,SAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,KAAK,EAAE,CAAA;AAC7E,EAAA,OAAO,CAAA,EAAG,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA,EAAI,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA,EAAI,GAAA,CAAI,KAAA,CAAM,EAAA,EAAI,EAAE,CAAC,CAAA,CAAA,EAAI,GAAA,CAAI,KAAA,CAAM,EAAA,EAAI,EAAE,CAAC,CAAA,CAAA,EAAI,GAAA,CAAI,KAAA,CAAM,EAAE,CAAC,CAAA,CAAA;AAC1G;AAEA,SAAS,KAAA,CAAM,GAAY,CAAA,EAAqB;AAC9C,EAAA,IAAI,MAAA,CAAO,EAAA,CAAG,CAAA,EAAG,CAAC,GAAG,OAAO,IAAA;AAC5B,EAAA,IAAI,CAAC,CAAA,IAAK,CAAC,CAAA,IAAK,OAAO,MAAM,QAAA,IAAY,OAAO,CAAA,KAAM,QAAA,EAAU,OAAO,KAAA;AACvE,EAAA,MAAM,EAAA,GAAK,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,GAAA,KAAQ,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,GAAG,CAAA,KAAM,MAAS,CAAA,EAAG,EAAA,GAAK,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,GAAA,KAAQ,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,GAAG,CAAA,KAAM,MAAS,CAAA;AACnJ,EAAA,OAAO,EAAA,CAAG,WAAW,EAAA,CAAG,MAAA,IAAU,GAAG,KAAA,CAAM,CAAC,QAAQ,GAAA,IAAO,CAAA,IAAK,MAAM,OAAA,CAAQ,GAAA,CAAI,GAAG,GAAG,CAAA,EAAG,QAAQ,GAAA,CAAI,CAAA,EAAG,GAAG,CAAC,CAAC,CAAA;AACjH;AACA,SAAS,cAAc,IAAA,EAAsB;AAC3C,EAAA,OAAA,CAAQ,IAAA,CAAK,MAAM,GAAG,CAAA,CAAE,GAAG,EAAE,CAAA,IAAK,IAAA,EAAM,OAAA,CAAQ,OAAA,EAAS,EAAE,EAAE,OAAA,CAAQ,QAAA,EAAU,GAAG,CAAA,CAAE,OAAA,CAAQ,SAAS,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,EAAa,CAAA;AAC7H;AACA,SAAS,eAAA,CAAgB,QAAA,EAAgB,UAAA,EAAoB,cAAA,EAAmD;AAC9G,EAAA,MAAM,MAAM,QAAA,CAAS,UAAA;AACrB,EAAA,IAAI,OAAO,CAAA,EAAG,MAAA,GAAS,GAAA,CAAI,MAAA,EAAQ,SAAS,UAAA,CAAW,MAAA;AACvD,EAAA,OAAO,IAAA,GAAO,UAAU,IAAA,GAAO,MAAA,IAAU,IAAI,IAAI,CAAA,KAAM,UAAA,CAAW,IAAI,CAAA,EAAG,IAAA,EAAA;AACzE,EAAA,OAAO,MAAA,GAAS,IAAA,IAAQ,MAAA,GAAS,IAAA,IAAQ,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA,KAAM,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA,EAAG;AAAE,IAAA,MAAA,EAAA;AAAU,IAAA,MAAA,EAAA;AAAA,EAAU;AAC3G,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,IAAA,GAAO,CAAA,CAAE,EAAA,IAAM,MAAA,GAAS,EAAE,IAAI,CAAA;AAE7F,EAAA,MAAM,OAAA,GAAU,SAAA,CAAU,MAAA,IAAU,CAAA,GAAI,QAAA,CAAS,SAAS,MAAA,CAAO,WAAA,CAAY,MAAA,CAAO,OAAA,CAAQ,QAAA,CAAS,MAAM,EAAE,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA,KAAM,CAAC,SAAA,CAAU,QAAA,CAAS,CAAC,CAAC,CAAC,CAAA;AACtJ,EAAA,MAAM,MAAA,GAAS,mBAAA,CAAoB,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,EAAA,EAAI,MAAA,EAAQ,MAAA,EAAQ,WAAW,KAAA,CAAM,IAAA,EAAM,MAAM,CAAA,EAAG,CAAC,CAAA;AAC1G,EAAA,IAAI,OAAA,GAAU,CAAA;AACd,EAAA,OAAO,oBAAoB,UAAA,EAAY,EAAE,gBAAgB,MAAA,EAAQ,MAAA,EAAQ,mBAAmB,uBAAA,EAAyB,QAAA,EAAU,MAAM,CAAA,KAAA,EAAQ,SAAS,EAAE,CAAA,EAAA,EAAK,cAAc,CAAA,CAAA,EAAI,OAAA,EAAS,IAAI,CAAA;AAC9L;AAsCA,eAAe,oBAAA,CACb,QAAA,EACA,SAAA,EACA,KAAA,EACA,MAAA,EACA,UAAA,EACA,YAAA,EACA,gBAAA,EACA,QAAA,EACA,IAAA,EACA,GAAA,EACA,KAAA,EACA,cACA,MAAA,EACiB;AACjB,EAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,QAAQ,CAAA;AACnC,EAAA,MAAM,mBAAA,GAAsB,CAAC,MAAA,KAA2B;AACtD,IAAA,IAAI,GAAA,GAAM,EAAA;AACV,IAAA,KAAA,MAAW,MAAM,gBAAA,EAAkB;AACjC,MAAA,IAAI,EAAA,CAAG,QAAQ,GAAA,CAAI,MAAM,KAAK,EAAA,CAAG,IAAA,GAAO,GAAA,EAAK,GAAA,GAAM,EAAA,CAAG,IAAA;AAAA,IACxD;AACA,IAAA,OAAO,GAAA;AAAA,EACT,CAAA;AACA,EAAA,MAAM,cAAmB,EAAC;AAC1B,EAAA,KAAA,MAAW,CAAC,CAAA,EAAG,GAAG,CAAA,IAAK,IAAA,CAAK,SAAQ,EAAG;AACrC,IAAA,IAAI,CAAC,KAAA,CAAM,GAAA,CAAI,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG;AACxB,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,GAAA,CAAI,OAAO,CAAA;AAChC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,WAAA,CAAY,IAAA,CAAK,EAAE,GAAG,MAAA,EAAQ,gBAAgB,SAAA,EAAoB,WAAA,EAAa,GAAA,CAAI,CAAC,GAAG,QAAA,EAAU,UAAA,EAAY,UAAA,EAAY,GAAA,CAAI,MAAM,CAAA;AAAA,EACrI;AACA,EAAA,MAAM,KAAA,GAAQ,MAAM,QAAA,CAAS,OAAA,CAAQ,WAAA,CAAY,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,CAAC,CAAA;AACnE,EAAA,MAAM,OAAA,GAAU,WAAA,CAAY,MAAA,CAAO,CAAC,GAAG,CAAA,KAAM;AAC3C,IAAA,MAAM,MAAA,GAAS,MAAM,CAAC,CAAA;AACtB,IAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AACpB,IAAA,IAAI,MAAA,CAAO,cAAA,KAAmB,SAAA,EAAW,OAAO,KAAA;AAChD,IAAA,IAAI,UAAA;AACJ,IAAA,IAAI,MAAA,CAAO,WAAA,KAAgB,CAAA,CAAE,WAAA,IAAgB,OAAO,WAAA,IAAe,UAAA,CAAW,GAAA,CAAI,MAAA,CAAO,WAAW,CAAA,IAAK,mBAAA,CAAoB,MAAA,CAAO,WAAW,IAAI,YAAA,EAAe;AAChK,MAAA,UAAA,GAAa,YAAA;AAAA,IACf,CAAA,MAAO;AACL,MAAA,MAAM,SAAS,MAAA,CAAO,WAAA,GAAc,mBAAA,CAAoB,MAAA,CAAO,WAAW,CAAA,GAAI,EAAA;AAC9E,MAAA,UAAA,GAAa,MAAA,IAAU,CAAA,GAAI,MAAA,GAAS,kBAAA,CAAmB,OAAO,QAAQ,CAAA;AAAA,IACxE;AACA,IAAA,OAAO,YAAA,IAAgB,UAAA,IAAc,CAAC,KAAA,CAAM,GAAG,MAAM,CAAA;AAAA,EACvD,CAAC,CAAA;AACD,EAAA,IAAI,OAAA,CAAQ,MAAA,EAAQ,MAAM,QAAA,CAAS,QAAQ,OAAO,CAAA;AAClD,EAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,WAAA,CAAY,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,CAAC,CAAA;AAC1D,EAAA,MAAM,aAAA,uBAAoB,GAAA,EAAoB;AAC9C,EAAA,KAAA,MAAW,MAAM,MAAA,EAAQ;AACvB,IAAA,MAAM,IAAA,GAAO,YAAA,CAAa,GAAA,CAAI,EAAE,CAAA;AAChC,IAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,UAAA,KAAe,MAAA,EAAQ;AACzC,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA,EAAG,IAAA;AACrC,IAAA,IAAI,IAAA,IAAQ,CAAC,WAAA,CAAY,GAAA,CAAI,IAAI,CAAA,EAAG,aAAA,CAAc,GAAA,CAAI,IAAA,EAAM,EAAE,CAAA;AAAA,EAChE;AACA,EAAA,MAAM,YAAA,GAAe,CAAC,GAAG,aAAA,CAAc,MAAM,CAAA;AAC7C,EAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,IAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAS,OAAA,CAAQ,YAAY,CAAA;AAC/C,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,GAAG,CAAA,IAAK,GAAA,CAAI,SAAQ,EAAG;AACpC,MAAA,MAAM,IAAA,GAAO,aAAa,CAAC,CAAA;AAC3B,MAAA,IAAI,CAAC,GAAA,IAAO,GAAA,CAAI,cAAA,KAAmB,SAAA,EAAW;AAC9C,MAAA,MAAM,aAAA,GAAgB,aAAA,CAAc,GAAA,CAAI,IAAI,CAAA;AAC5C,MAAA,MAAM,mBAAA,GAAsB,GAAA,CAAI,WAAA,KAAgB,aAAA,KAAkB,CAAC,GAAA,CAAI,QAAA,IAAY,GAAA,CAAI,QAAA,KAAa,UAAA,IAAc,GAAA,CAAI,QAAA,KAAa,MAAA,CAAA;AACnI,MAAA,IAAI,CAAC,mBAAA,EAAqB;AAC1B,MAAA,IAAI,QAAA,GAAW,KAAA;AACf,MAAA,KAAA,MAAW,MAAM,gBAAA,EAAkB;AACjC,QAAA,MAAM,eAAe,EAAA,CAAG,IAAA,CAAK,SAAS,MAAM,CAAA,EAAG,WAAW,EAAC;AAC3D,QAAA,IAAI,CAAC,aAAa,MAAA,EAAQ;AAC1B,QAAA,MAAM,cAAA,GAAiB,MAAM,SAAA,CAAU,OAAA,CAAQ,YAAY,CAAA;AAC3D,QAAA,KAAA,MAAW,iBAAiB,cAAA,EAAgB;AAC1C,UAAA,IAAI,CAAC,aAAA,IAAiB,aAAA,CAAc,UAAA,KAAe,MAAA,EAAQ;AAC3D,UAAA,MAAM,MAAA,GAAS,KAAA,CAAM,aAAA,CAAc,UAAU,CAAA;AAC7C,UAAA,IAAI,MAAA,IAAU,MAAA,CAAO,IAAA,KAAS,IAAA,EAAM;AAClC,YAAA,MAAM,SAAS,GAAA,CAAI;AAAA,cACjB,GAAG,MAAA;AAAA,cACH,cAAA,EAAgB,SAAA;AAAA,cAChB,aAAa,aAAA,CAAc,EAAA;AAAA,cAC3B,UAAU,EAAA,CAAG,QAAA;AAAA,cACb,UAAA,EAAY,cAAc,UAAA,IAAc;AAAA,aACzC,CAAA;AACD,YAAA,QAAA,GAAW,IAAA;AACX,YAAA;AAAA,UACF;AAAA,QACF;AACA,QAAA,IAAI,QAAA,EAAU;AAAA,MAChB;AACA,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAM,QAAA,CAAS,OAAO,IAAI,CAAA;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,OAAA,CAAQ,MAAA;AACjB;AAEA,eAAe,UAAA,CAAc,KAAA,EAA2B,MAAA,EAAa,IAAA,EAAoC;AACvG,EAAA,IAAI,CAAC,OAAO,MAAA,EAAQ;AACpB,EAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA;AACtC,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,EAAO,CAAA,KAAM,CAAC,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,CAAC,CAAC,CAAC,CAAA;AACnE,EAAA,IAAI,OAAA,CAAQ,MAAA,EAAQ,MAAM,KAAA,CAAM,QAAQ,OAAO,CAAA;AACjD;AAEA,eAAsB,cAAA,CAAe,SAAmB,KAAA,EAAiD;AACvG,EAAA,kBAAA,CAAmB,MAAM,QAAQ,CAAA;AACjC,EAAA,cAAA,CAAe,MAAM,IAAI,CAAA;AACzB,EAAA,MAAM,SAA0B,EAAE,UAAA,EAAY,CAAA,EAAG,YAAA,EAAc,GAAG,cAAA,EAAgB,CAAA,EAAG,WAAA,EAAa,CAAA,EAAG,kBAAkB,CAAA,EAAG,OAAA,EAAS,GAAG,UAAA,EAAY,CAAA,EAAG,cAAc,CAAA,EAAE;AACrK,EAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ,UAAA,CAAW,GAAA,CAAI,IAAI,CAAC,CAAC,CAAA;AAC3E,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAAoB;AAC5C,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAoB;AACxC,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAoB;AACvC,EAAA,KAAA,MAAW,CAAC,CAAA,EAAG,GAAG,KAAK,KAAA,CAAM,IAAA,CAAK,SAAQ,EAAG;AAC3C,IAAA,MAAM,IAAA,GAAO,mBAAA,CAAoB,GAAA,CAAI,OAAO,EAAE,MAAM,CAAA;AACpD,IAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,CAAK,MAAK,EAAG;AAC3C,MAAA,WAAA,CAAY,IAAI,IAAA,EAAM,MAAM,WAAW,CAAA,KAAA,EAAQ,IAAI,EAAE,CAAC,CAAA;AACtD,MAAA,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,CAAC,CAAA,EAAG,MAAM,UAAA,CAAW,CAAA,SAAA,EAAY,IAAI,CAAA,CAAA,EAAI,GAAA,CAAI,IAAI,CAAA,CAAE,CAAC,CAAA;AAAA,IACtE;AACA,IAAA,KAAA,MAAW,EAAE,KAAA,EAAM,IAAK,gBAAA,CAAiB,GAAA,CAAI,OAAO,CAAA,EAAG;AACrD,MAAA,IAAI,CAAC,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA,EAAG,MAAA,CAAO,GAAA,CAAI,KAAA,EAAO,MAAM,UAAA,CAAW,CAAA,IAAA,EAAO,KAAK,EAAE,CAAC,CAAA;AAAA,IAC5E;AAAA,EACF;AACA,EAAA,OAAO,QAAQ,WAAA,CAAY,CAAC,SAAS,iBAAA,EAAmB,aAAA,EAAe,iBAAiB,iBAAA,EAAmB,MAAA,EAAQ,YAAA,EAAc,MAAA,EAAQ,aAAa,SAAA,EAAW,WAAA,EAAa,MAAM,CAAA,EAAG,WAAA,EAAa,OAAO,EAAA,KAAO;AAChN,IAAA,MAAM,SAAA,GAAY,EAAA,CAAG,SAAA,CAAU,MAAM,CAAA;AAKrC,IAAA,MAAM,WAAA,uBAAkB,GAAA,EAAY;AACpC,IAAA,KAAA,MAAW,GAAA,IAAO,MAAM,SAAA,CAAU,MAAA,EAAO,EAAG;AAC1C,MAAA,MAAM,UAAA,GAAa,qBAAA,CAAuB,GAAA,EAAkC,GAAG,CAAA;AAC/E,MAAA,IAAI,UAAA,KAAe,MAAA,EAAW,WAAA,CAAY,GAAA,CAAI,UAAU,CAAA;AAAA,IAC1D;AACA,IAAA,MAAM,aAAa,MAAM,SAAA,CAAU,GAAA,CAAI,KAAA,CAAM,KAAK,GAAG,CAAA;AACrD,IAAA,IAAI,CAAC,MAAM,UAAA,EAAY,KAAA,CAAM,YAAY,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,uCAAuC,CAAA;AACnG,IAAA,IAAI,KAAA,CAAM,IAAA,CAAK,MAAA,KAAW,WAAA,IAAe,KAAA,CAAM,QAAA,CAAS,MAAA,KAAW,WAAA,EAAa,MAAM,IAAI,KAAA,CAAM,8CAA8C,CAAA;AAC9I,IAAA,MAAM,SAAA,GAAY,EAAA,CAAG,SAAA,CAAU,OAAO,CAAA;AACtC,IAAA,MAAM,QAAA,GAAW,KAAA,CAAM,OAAA,GAAU,KAAA,CAAM,YAAA,EAAc,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA,EAAG,OAAA,IAAW,EAAC,GAAI,EAAC;AAC7F,IAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAI,GAAG,CAAA;AAC5B,IAAA,MAAM,OAAA,GAAU,SAAS,MAAA,CAAO,CAAC,OAAO,CAAC,QAAA,CAAS,GAAA,CAAI,EAAE,CAAC,CAAA;AACzD,IAAA,MAAM,MAAA,GAAS,CAAC,mBAAG,IAAI,GAAA,CAAI,CAAC,GAAG,GAAA,EAAK,GAAG,OAAO,CAAC,CAAC,CAAA;AAChD,IAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,OAAA,CAAQ,MAAM,CAAA;AAC7C,IAAA,MAAM,YAAA,GAAe,IAAI,GAAA,CAAI,MAAA,CAAO,IAAI,CAAC,EAAA,EAAI,CAAA,KAAM,CAAC,EAAA,EAAI,MAAA,CAAO,CAAC,CAAC,CAAC,CAAC,CAAA;AACnE,IAAA,MAAM,UAAA,GAAa,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,WAAW,OAAO,CAAA,GAAI,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,CAAC,CAAA,GAAI,MAAM,IAAA,CAAK,GAAA;AAC7F,IAAA,MAAM,eAAe,kBAAA,CAAmB,KAAA,CAAM,KAAK,GAAA,EAAK,KAAA,CAAM,KAAK,IAAI,CAAA;AACvE,IAAA,MAAM,mBAAwC,EAAC;AAC/C,IAAA,KAAA,MAAW,GAAA,IAAO,MAAM,SAAA,CAAU,MAAA,EAAO,EAAG;AAC1C,MAAA,MAAM,IAAA,GAAO,GAAA;AACb,MAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,CAAK,GAAA,KAAQ,YAAY,CAAC,IAAA,CAAK,GAAA,CAAI,UAAA,CAAW,OAAO,CAAA,IAAK,IAAA,CAAK,GAAA,KAAQ,KAAA,CAAM,KAAK,GAAA,EAAK;AAC3G,MAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAChC,MAAA,KAAA,MAAW,SAAS,MAAA,CAAO,MAAA,CAAO,KAAK,MAAA,IAAU,EAAE,CAAA,EAAG;AACpD,QAAA,KAAA,MAAW,UAAU,KAAA,CAAM,OAAA,IAAW,EAAC,EAAG,OAAA,CAAQ,IAAI,MAAM,CAAA;AAAA,MAC9D;AACA,MAAA,gBAAA,CAAiB,IAAA,CAAK;AAAA,QACpB,KAAK,IAAA,CAAK,GAAA;AAAA,QACV,QAAA,EAAU,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,CAAC,CAAA;AAAA,QAC1B,IAAA,EAAM,kBAAA,CAAmB,IAAA,CAAK,GAAA,EAAK,KAAK,IAAI,CAAA;AAAA,QAC5C,IAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,IACH;AACA,IAAA,gBAAA,CAAiB,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,IAAA,GAAO,EAAE,IAAI,CAAA;AAC/C,IAAA,MAAM,mBAAA,GAAsB,CAAC,MAAA,KAA2B;AACtD,MAAA,IAAI,GAAA,GAAM,EAAA;AACV,MAAA,KAAA,MAAW,MAAM,gBAAA,EAAkB;AACjC,QAAA,IAAI,EAAA,CAAG,QAAQ,GAAA,CAAI,MAAM,KAAK,EAAA,CAAG,IAAA,GAAO,GAAA,EAAK,GAAA,GAAM,EAAA,CAAG,IAAA;AAAA,MACxD;AACA,MAAA,OAAO,GAAA;AAAA,IACT,CAAA;AACA,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,MAAA,CAAO,CAAC,EAAA,KAAO;AAKrC,MAAA,IAAI,WAAA,CAAY,GAAA,CAAI,EAAE,CAAA,EAAG,OAAO,KAAA;AAChC,MAAA,MAAM,IAAA,GAAO,YAAA,CAAa,GAAA,CAAI,EAAE,CAAA;AAChC,MAAA,IAAI,CAAC,IAAA,EAAM,OAAO,QAAA,CAAS,IAAI,EAAE,CAAA;AACjC,MAAA,IAAI,IAAA,CAAK,UAAA,KAAe,MAAA,EAAQ,OAAO,KAAA;AACvC,MAAA,MAAM,SAAA,GAAY,oBAAoB,EAAE,CAAA;AACxC,MAAA,IAAI,QAAA,CAAS,GAAA,CAAI,EAAE,CAAA,SAAU,YAAA,IAAgB,SAAA;AAC7C,MAAA,OAAO,SAAA,GAAY,CAAA,IAAK,IAAA,CAAK,WAAA,KAAgB,KAAA,CAAM,OAAA;AAAA,IACrD,CAAC,CAAA;AACD,IAAA,MAAM,KAAA,GAAQ,IAAI,GAAA,CAAI,QAAQ,CAAA;AAC9B,IAAA,MAAM,aAAA,GAAgB,EAAA,CAAG,SAAA,CAAU,iBAAiB,CAAA;AACpD,IAAA,MAAM,aAAa,GAAA,CAAI,MAAA,CAAO,CAAC,EAAA,EAAI,CAAA,KAAM,MAAM,GAAA,CAAI,EAAE,KAAK,YAAA,CAAa,GAAA,CAAI,EAAE,CAAA,EAAG,UAAA,KAAe,MAAM,IAAA,CAAK,CAAC,EAAE,OAAO,CAAA;AACpH,IAAA,MAAM,SAAA,GAAY,MAAM,aAAA,CAAc,mBAAA,CAAoB,WAAW,UAAU,CAAA;AAC/E,IAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,UAAA,CAAW,IAAI,CAAC,EAAA,EAAI,CAAA,KAAM,CAAC,EAAA,EAAI,SAAA,CAAU,CAAC,CAAC,CAAC,CAAC,CAAA;AACrE,IAAA,MAAM,UAAA,GAAa,EAAA,CAAG,SAAA,CAAU,aAAa,CAAA,EAAG,WAAA,GAAc,EAAA,CAAG,SAAA,CAAU,eAAe,CAAA,EAAG,cAAA,GAAiB,EAAA,CAAG,UAAU,iBAAiB,CAAA;AAC5I,IAAA,MAAM,QAAA,GAAW,GAAG,SAAA,CAAU,WAAW,GAAG,SAAA,GAAY,EAAA,CAAG,UAAU,YAAY,CAAA;AACjF,IAAA,MAAM,cAAA,GAAiB,MAAM,UAAA,CAAW,mBAAA,CAAoB,WAAW,QAAQ,CAAA;AAC/E,IAAA,MAAM,cAAA,GAAiB,MAAM,WAAA,CAAY,mBAAA,CAAoB,WAAW,QAAQ,CAAA;AAChF,IAAA,MAAM,gBAAA,GAAmB,MAAM,cAAA,CAAe,mBAAA,CAAoB,WAAW,QAAQ,CAAA;AACrF,IAAA,MAAM,WAAA,GAAc,MAAM,QAAA,CAAS,mBAAA,CAAoB,WAAW,QAAQ,CAAA;AAC1E,IAAA,MAAM,YAAA,GAAe,MAAM,SAAA,CAAU,mBAAA,CAAoB,WAAW,QAAQ,CAAA;AAC5E,IAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,QAAA,CAAS,GAAA,CAAI,CAAC,EAAA,EAAI,CAAA,KAAM,CAAC,EAAA,EAAI,CAAC,CAAC,CAAC,CAAA;AACrD,IAAA,MAAM,SAAA,GAAY,EAAA,CAAG,SAAA,CAAU,MAAM,CAAA;AACrC,IAAA,MAAM,MAAA,GAAS,CAAC,GAAG,MAAA,CAAO,MAAM,CAAA;AAChC,IAAA,MAAM,OAAA,GAAU,MAAM,SAAA,CAAU,mBAAA,CAAoB,YAAY,MAAM,CAAA;AACtE,IAAA,MAAM,cAAc,IAAI,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,EAAO,CAAA,KAAM,CAAC,KAAA,EAAO,QAAQ,CAAC,CAAA,CAAE,CAAC,CAAC,CAAC,CAAC,CAAA;AAC5E,IAAA,MAAM,cAAqB,EAAC,EAAG,YAAA,GAAuB,IAAI,SAAA,GAA6B,EAAC,EAAG,KAAA,GAAgB,EAAC,EAAG,SAAA,GAAwB,EAAC,EAAG,WAAsB,EAAC;AAClK,IAAA,MAAM,SAAgC,EAAC,EAAG,eAAwC,EAAC,EAAG,iBAA4C,EAAC;AACnI,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,GAAG,KAAK,KAAA,CAAM,IAAA,CAAK,SAAQ,EAAG;AAC3C,MAAA,MAAM,KAAK,GAAA,CAAI,CAAC,GAAG,QAAA,GAAW,YAAA,CAAa,IAAI,EAAE,CAAA;AACjD,MAAA,IAAI,CAAC,KAAA,CAAM,GAAA,CAAI,EAAE,CAAA,EAAG;AAClB,QAAA,IAAI,QAAA,IAAY,QAAA,CAAS,UAAA,KAAe,MAAA,EAAQ,MAAA,CAAO,gBAAA,EAAA;AACvD,QAAA;AAAA,MACF;AAIA,MAAA,IAAI,CAAC,UAAU,MAAA,CAAO,UAAA,EAAA;AAAA,WAAA,IACb,QAAA,CAAS,UAAA,KAAe,GAAA,CAAI,OAAA,EAAS,MAAA,CAAO,YAAA,EAAA;AACrD,MAAAC,kBAAAA,CAAmB,IAAI,OAAA,EAAS,GAAA,CAAI,QAAQ,CAAA,EAAG,EAAE,iBAAA,EAAmB,uBAAA,EAAyB,CAAA;AAC7F,MAAA,MAAM,cAAA,GAAiB,WAAW,QAAA,CAAS,cAAA,IAAkB,SAAS,UAAA,KAAe,GAAA,CAAI,OAAA,GAAU,CAAA,GAAI,CAAA,CAAA,GAAK,CAAA;AAC5G,MAAA,IAAI,OAAA,GAAU,CAAA;AACd,MAAA,MAAM,eAAA,GAAkB,OAAA,CAAQ,GAAA,CAAI,EAAE,KAAK,EAAC;AAC5C,MAAA,MAAM,MAAM,CAAC,QAAA,GACT,gBAAgB,MAAA,GAAS,mBAAA,CAAoB,IAAI,OAAA,EAAS,EAAE,cAAA,EAAgB,iBAAA,EAAmB,yBAAyB,QAAA,EAAU,MAAM,QAAQ,EAAE,CAAA,IAAA,EAAO,gBAAgB,MAAM,CAAA,CAAA,EAAI,OAAA,EAAS,CAAA,CAAA,EAAI,CAAA,GAAI,eAAA,CAAgB,IAAI,MAAM,CAAA,GAC9N,SAAS,UAAA,KAAe,GAAA,CAAI,OAAA,GAAU,eAAA,CAAgB,SAAS,MAAM,CAAA,GAAI,gBAAgB,QAAA,EAAU,GAAA,CAAI,SAAS,cAAc,CAAA;AAClI,MAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA,EAAG;AACtC,QAAA,MAAM,KAAA,GAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,EAAE,CAAA,IAAK,EAAC,EAAG,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,OAAA,KAAY,MAAM,EAAE,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,OAAA,GAAU,CAAA,CAAE,OAAO,CAAA,CAAE,CAAC,CAAA;AACnH,QAAA,MAAM,SAAS,GAAA,CAAI,OAAA,CAAQ,MAAM,KAAA,CAAM,IAAA,EAAM,MAAM,EAAE,CAAA;AACrD,QAAA,IAAI,QAAA,EAAU,UAAA,KAAe,GAAA,CAAI,OAAA,EAAS;AAC1C,QAAA,MAAM,IAAA,GAAO,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,MAAM,IAAA,IAAQ,KAAA,CAAM,UAAA,KAAe,MAAA,IAAU,MAAM,OAAA,KAAY,KAAA,CAAM,OAAA,IAAW,KAAA,CAAM,UAAU,KAAA,CAAM,KAAA;AAC3I,QAAA,KAAA,CAAM,OAAA,GAAU,CAAC,QAAA,GAAW,CAAA,GAAI,OAAO,KAAA,CAAM,OAAA,GAAA,CAAW,KAAA,EAAO,OAAA,IAAW,CAAA,IAAK,CAAA;AAC/E,QAAA,IAAI,CAAC,YAAY,CAAC,IAAA,YAAgB,IAAA,CAAK,EAAE,QAAQ,EAAA,EAAI,OAAA,EAAS,MAAM,EAAA,EAAI,OAAA,EAAS,MAAM,OAAA,EAAS,IAAA,EAAM,MAAM,IAAA,EAAM,UAAA,EAAY,QAAQ,OAAA,EAAS,KAAA,CAAM,KAAK,UAAA,EAAY,GAAI,MAAM,OAAA,GAAU,EAAE,SAAS,KAAA,CAAM,OAAA,KAAY,EAAC,EAAI,GAAI,KAAA,CAAM,KAAA,GAAQ,EAAE,KAAA,EAAO,KAAA,CAAM,OAAM,GAAI,IAAK,CAAA;AAAA,MAC9Q;AACA,MAAAA,kBAAAA,CAAmB,IAAI,OAAA,EAAS,GAAA,EAAK,gBAAgB,EAAE,iBAAA,EAAmB,yBAAyB,CAAA;AACnG,MAAA,MAAM,EAAA,GAAK,mBAAA,CAAoB,GAAA,CAAI,OAAO,CAAA;AAC1C,MAAA,MAAM,QAAQ,OAAO,EAAA,CAAG,OAAO,CAAA,KAAM,QAAA,IAAY,GAAG,OAAO,CAAA,CAAE,IAAA,EAAK,GAAI,GAAG,OAAO,CAAA,CAAE,MAAK,GAAI,aAAA,CAAc,IAAI,IAAI,CAAA;AACjH,MAAA,MAAM,QAAA,GAAW,KAAA,CAAM,OAAA,GAAU,gBAAA,CAAiB,GAAA,CAAI,MAAM,GAAA,CAAI,OAAA,EAAS,KAAA,CAAM,OAAO,CAAA,GAAI,MAAA;AAC1F,MAAA,IAAI,CAAC,UAAU,MAAM,IAAI,MAAM,CAAA,2BAAA,EAA8B,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAM5E,MAAA,MAAM,SAAA,GAAY,OAAO,EAAA,CAAG,MAAM,CAAA,KAAM,QAAA,GAAW,EAAA,CAAG,MAAM,CAAA,CAAE,KAAA,CAAM,2BAA2B,CAAA,GAAI,IAAA;AACnG,MAAA,IAAI,IAAA;AACJ,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,MAAM,KAAK,IAAA,CAAK,KAAA,CAAM,GAAG,EAAA,CAAG,MAAM,CAAC,CAAA,UAAA,CAAY,CAAA;AAC/C,QAAA,MAAM,IAAA,GAAO,MAAA,CAAO,QAAA,CAAS,EAAE,CAAA,IAC1B,IAAI,IAAA,CAAK,EAAE,CAAA,CAAE,WAAA,EAAY,KAAM,MAAA,CAAO,SAAA,CAAU,CAAC,CAAC,CAAA,GAAI,CAAA,IACtD,IAAI,IAAA,CAAK,EAAE,CAAA,CAAE,UAAA,EAAW,KAAM,MAAA,CAAO,SAAA,CAAU,CAAC,CAAC,CAAA;AACtD,QAAA,IAAI,CAAC,IAAA,EAAM,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,EAAA,CAAG,MAAM,CAAC,CAAA,MAAA,EAAS,GAAA,CAAI,IAAI,CAAA,kDAAA,CAA+C,CAAA;AAClI,QAAA,IAAA,GAAO,EAAA;AAAA,MACT;AACA,MAAA,MAAM,IAAA,GAAa,EAAE,GAAG,QAAA,EAAU,IAAI,KAAA,EAAO,UAAA,EAAY,GAAA,CAAI,OAAA,EAAS,cAAA,EAAgB,MAAA,EAAQ,KAAK,SAAA,EAAW,KAAA,CAAM,SAAS,OAAA,EAAS,GAAI,SAAS,MAAA,GAAY,EAAC,GAAI,EAAE,IAAA,EAAK,EAAI,MAAM,KAAA,CAAM,OAAA,KAAY,sBAAsB,WAAA,GAAc,MAAA,EAAQ,UAAU,OAAA,EAAS,iBAAA,CAAkB,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA,EAAG,YAAY,MAAA,EAAQ,WAAA,EAAa,KAAA,CAAM,QAAA,CAAS,OAAA,EAAS,WAAA,EAAa,MAAM,OAAA,IAAW,MAAA,EAAW,UAAA,EAAY,GAAA,CAAI,IAAA,EAAK;AACra,MAAA,IAAI,IAAA,KAAS,MAAA,EAAW,OAAO,IAAA,CAAK,IAAA;AACpC,MAAA,IAAI,CAAC,KAAA,CAAM,IAAA,EAAM,QAAQ,CAAA,EAAG,YAAA,CAAa,KAAK,IAAI,CAAA;AAClD,MAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,MAAA,CAAO,OAAO,GAAG,CAAA,CAAE,IAAI,CAAC,CAAA,KAAM,CAAC,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,EAAE,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,CAAA;AAC/E,MAAA,MAAM,YAAA,GAAe,IAAI,GAAA,CAAI,GAAA,CAAI,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,OAAA,EAAS,CAAC,CAAC,CAAC,CAAA;AACtE,MAAA,MAAM,KAAA,uBAAY,GAAA,EAAoB;AACtC,MAAA,KAAA,MAAW,QAAA,IAAY,IAAI,UAAA,EAAY;AACrC,QAAA,MAAM,KAAA,GAAQ,QAAQ,GAAA,CAAI,CAAA,EAAG,SAAS,IAAI,CAAA,CAAA,EAAI,QAAA,CAAS,EAAE,CAAA,CAAE,CAAA;AAC3D,QAAA,IAAI,CAAC,SAAS,KAAA,CAAM,IAAA,KAAS,SAAS,QAAA,EAAU,MAAM,IAAI,KAAA,CAAM,wBAAwB,CAAA;AACxF,QAAA,KAAA,CAAM,GAAA,CAAI,QAAA,CAAS,OAAA,EAAS,KAAA,CAAM,EAAE,CAAA;AACpC,QAAA,MAAM,UAAA,GAAa,EAAE,GAAG,QAAA,EAAU,IAAI,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,KAAA,CAAM,EAAE,CAAA,CAAA,EAAI,MAAA,EAAQ,EAAA,EAAI,OAAA,EAAS,MAAM,EAAA,EAAI,YAAA,EAAc,KAAA,CAAM,OAAA,EAAS,cAAA,EAAgB,SAAA,EAAW,KAAA,EAAO,QAAA,EAAU,YAAY,GAAA,CAAI,IAAA,EAAM,UAAA,EAAY,GAAA,CAAI,QAAQ,KAAA,CAAM,KAAA,CAAM,IAAA,EAAM,KAAA,CAAM,EAAE,CAAA,EAAE;AAC7O,QAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,IAAA,CAAK,GAAA,CAAI,EAAE,CAAE,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,WAAW,EAAE,CAAA;AAC9E,QAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,aAAa,IAAA,EAAM,MAAA,CAAO,KAAK,UAAU,CAAA;AAAA,MAC/D;AACA,MAAA,KAAA,MAAW,QAAA,IAAY,IAAI,YAAA,EAAc;AACvC,QAAA,MAAM,OAAA,GAAU,KAAA,CAAM,GAAA,CAAI,QAAA,CAAS,OAAO,CAAA;AAC1C,QAAA,IAAI,CAAC,OAAA,IAAW,YAAA,CAAa,GAAA,CAAI,QAAA,CAAS,OAAO,CAAA,EAAG,QAAA,KAAa,KAAA,EAAO,MAAM,IAAI,KAAA,CAAM,yBAAyB,CAAA;AACjH,QAAA,MAAM,OAAO,EAAE,GAAG,UAAU,EAAA,EAAI,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA,CAAA,EAAI,MAAA,EAAQ,IAAI,OAAA,EAAS,UAAA,EAAY,IAAI,IAAA,EAAK;AACrH,QAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,IAAA,CAAK,GAAA,CAAI,EAAE,CAAE,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,KAAK,EAAE,CAAA;AACxE,QAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,QAAA,KAAa,MAAM,YAAA,CAAa,IAAA,CAAK,KAAA,GAAQ,EAAE,GAAG,IAAA,EAAM,SAAA,EAAW,KAAA,CAAM,SAAA,KAAc,IAAI,CAAA;AAAA,MACjH;AACA,MAAA,KAAA,MAAW,QAAA,IAAY,IAAI,cAAA,EAAgB;AACzC,QAAA,MAAM,OAAA,GAAU,KAAA,CAAM,GAAA,CAAI,QAAA,CAAS,OAAO,CAAA;AAC1C,QAAA,IAAI,CAAC,OAAA,IAAW,YAAA,CAAa,GAAA,CAAI,QAAA,CAAS,OAAO,CAAA,EAAG,QAAA,KAAa,KAAA,EAAO,MAAM,IAAI,KAAA,CAAM,4BAA4B,CAAA;AACpH,QAAA,MAAM,OAAO,EAAE,GAAG,UAAU,EAAA,EAAI,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,EAAI,QAAA,CAAS,aAAa,CAAA,CAAA,EAAI,MAAA,EAAQ,IAAI,OAAA,EAAS,UAAA,EAAY,IAAI,IAAA,EAAK;AACxH,QAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,IAAA,CAAK,GAAA,CAAI,EAAE,CAAE,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,KAAK,EAAE,CAAA;AAC1E,QAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,QAAA,KAAa,MAAM,cAAA,CAAe,IAAA,CAAK,KAAA,GAAQ,EAAE,GAAG,IAAA,EAAM,SAAA,EAAW,KAAA,CAAM,SAAA,KAAc,IAAI,CAAA;AAAA,MACnH;AACA,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA;AACrB,MAAA,MAAM,UAAA,uBAAiB,GAAA,EAAY;AACnC,MAAA,KAAA,MAAW,IAAA,IAAQ,gBAAA,CAAiB,GAAA,CAAI,OAAO,CAAA,EAAG;AAChD,QAAA,IAAI,GAAA,GAAM,WAAA,CAAY,GAAA,CAAI,IAAA,CAAK,KAAK,CAAA;AACpC,QAAA,IAAI,CAAC,GAAA,EAAK;AAAE,UAAA,GAAA,GAAM,EAAE,EAAA,EAAI,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,KAAK,CAAA,EAAI,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,MAAM,IAAA,CAAK,IAAA,EAAM,SAAA,EAAW,KAAA,CAAM,KAAK,UAAA,EAAW;AAAG,UAAA,WAAA,CAAY,KAAK,GAAG,CAAA;AAAG,UAAA,WAAA,CAAY,GAAA,CAAI,IAAA,CAAK,KAAA,EAAO,GAAG,CAAA;AAAA,QAAG,CAAA,MAAA,IACzK,IAAA,CAAK,IAAA,IAAQ,CAAC,IAAI,IAAA,EAAM;AAAE,UAAA,GAAA,GAAM,EAAE,GAAG,GAAA,EAAK,IAAA,EAAM,KAAK,IAAA,EAAK;AAAG,UAAA,WAAA,CAAY,KAAK,GAAG,CAAA;AAAG,UAAA,WAAA,CAAY,GAAA,CAAI,IAAA,CAAK,KAAA,EAAO,GAAG,CAAA;AAAA,QAAG;AAC/H,QAAA,IAAI,UAAA,CAAW,GAAA,CAAI,GAAA,CAAI,EAAE,CAAA,EAAG;AAC5B,QAAA,UAAA,CAAW,GAAA,CAAI,IAAI,EAAE,CAAA;AACrB,QAAA,MAAM,IAAA,GAAO,WAAA,CAAY,CAAC,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,KAAU,GAAA,CAAI,EAAE,CAAA;AAC1D,QAAA,IAAI,CAAC,IAAA,EAAM,QAAA,CAAS,IAAA,CAAK,EAAE,IAAI,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,GAAA,CAAI,EAAE,CAAA,CAAA,EAAI,MAAA,EAAQ,IAAI,KAAA,EAAO,GAAA,CAAI,IAAI,CAAA;AAAA,MAC/E;AACA,MAAA,KAAA,MAAW,IAAA,IAAQ,WAAA,CAAY,CAAC,CAAA,MAAO,CAAC,UAAA,CAAW,GAAA,CAAI,IAAA,CAAK,KAAK,CAAA,EAAG,MAAM,QAAA,CAAS,MAAA,CAAO,KAAK,EAAE,CAAA;AACjG,MAAA,MAAM,IAAA,GAAO,GAAG,MAAM,CAAA;AACtB,MAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,WAAA,CAAY,GAAA,CAAI,IAAI,CAAA,EAAG;AACrD,QAAA,MAAM,MAAA,GAAS,WAAA,CAAY,GAAA,CAAI,IAAI,CAAA;AACnC,QAAA,KAAA,CAAM,IAAA,CAAK,EAAE,EAAA,EAAI,MAAA,EAAQ,MAAM,KAAA,EAAO,aAAA,CAAc,GAAA,CAAI,IAAI,CAAA,EAAG,SAAA,EAAW,KAAA,CAAM,QAAA,CAAS,SAAS,CAAA;AAClG,QAAA,SAAA,CAAU,IAAA,CAAK,EAAE,EAAA,EAAI,OAAA,CAAQ,IAAI,EAAE,CAAA,EAAI,MAAA,EAAQ,MAAA,EAAQ,EAAA,EAAI,SAAA,EAAW,KAAA,CAAM,QAAA,CAAS,SAAS,CAAA;AAAA,MAChG;AACA,MAAA,MAAA,CAAO,UAAA,EAAA;AACP,MAAA,MAAA,CAAO,WAAA,IAAe,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,MAAA;AAAA,IACzC;AACA,IAAA,MAAM,YAAA,GAAe,IAAI,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAC,CAAA,EAAG,aAAA,GAAgB,IAAI,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAC,GAAG,eAAA,GAAkB,IAAI,GAAA,CAAI,cAAA,CAAe,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAC,CAAA;AACxK,IAAA,KAAA,MAAW,QAAQ,cAAA,EAAgB,KAAA,MAAW,OAAO,IAAA,EAAM,IAAI,IAAI,QAAA,KAAa,IAAA,IAAQ,CAAC,YAAA,CAAa,GAAA,CAAI,IAAI,EAAE,CAAA,QAAS,UAAA,CAAW,MAAA,CAAO,IAAI,EAAE,CAAA;AACjJ,IAAA,KAAA,MAAW,QAAQ,cAAA,EAAgB,KAAA,MAAW,OAAO,IAAA,EAAM,IAAI,IAAI,QAAA,KAAa,IAAA,IAAQ,CAAC,aAAA,CAAc,GAAA,CAAI,IAAI,EAAE,CAAA,QAAS,WAAA,CAAY,MAAA,CAAO,IAAI,EAAE,CAAA;AACnJ,IAAA,KAAA,MAAW,QAAQ,gBAAA,EAAkB,KAAA,MAAW,OAAO,IAAA,EAAM,IAAI,IAAI,QAAA,KAAa,IAAA,IAAQ,CAAC,eAAA,CAAgB,GAAA,CAAI,IAAI,EAAE,CAAA,QAAS,cAAA,CAAe,MAAA,CAAO,IAAI,EAAE,CAAA;AAC1J,IAAA,KAAA,MAAW,MAAM,OAAA,EAAS;AACxB,MAAA,IAAI,CAAC,MAAM,GAAA,CAAI,EAAE,KAAK,CAAC,YAAA,CAAa,GAAA,CAAI,EAAE,CAAA,EAAG;AAC7C,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA;AACrB,MAAA,MAAM,SAAA,CAAU,OAAO,EAAE,CAAA;AACzB,MAAA,KAAA,MAAW,IAAA,IAAQ,YAAY,CAAC,CAAA,QAAS,QAAA,CAAS,MAAA,CAAO,KAAK,EAAE,CAAA;AAChE,MAAA,KAAA,MAAW,IAAA,IAAQ,aAAa,CAAC,CAAA,QAAS,SAAA,CAAU,MAAA,CAAO,KAAK,EAAE,CAAA;AAClE,MAAA,MAAA,CAAO,OAAA,EAAA;AAAA,IACT;AACA,IAAA,IAAI,KAAA,CAAM,YAAY,gBAAA,EAAkB;AACtC,MAAA,MAAA,CAAO,eAAe,MAAM,oBAAA,CAAqB,GAAG,SAAA,CAAU,SAAS,GAAG,SAAA,EAAW,eAAA,EAAiB,WAAW,UAAA,EAAY,YAAA,EAAc,kBAAkB,QAAA,EAAU,KAAA,CAAM,MAAM,GAAA,EAAK,KAAA,EAAO,cAAc,MAAM,CAAA;AAAA,IACrN;AACA,IAAA,IAAI,KAAA,CAAM,YAAY,kBAAA,EAAoB;AACxC,MAAA,MAAA,CAAO,iBAAiB,MAAM,oBAAA,CAAqB,GAAG,SAAA,CAAU,WAAW,GAAG,SAAA,EAAW,kBAAA,EAAoB,aAAa,UAAA,EAAY,YAAA,EAAc,kBAAkB,QAAA,EAAU,KAAA,CAAM,MAAM,GAAA,EAAK,KAAA,EAAO,cAAc,MAAM,CAAA;AAAA,IAC9N;AACA,IAAA,IAAI,YAAA,CAAa,MAAA,EAAQ,MAAM,SAAA,CAAU,QAAQ,YAAY,CAAA;AAC7D,IAAA,IAAI,SAAA,CAAU,MAAA,EAAQ,MAAM,aAAA,CAAc,QAAQ,SAAS,CAAA;AAC3D,IAAA,MAAM,UAAA,CAAW,YAAY,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAC,CAAA;AAC5D,IAAA,MAAM,UAAA,CAAW,aAAa,YAAA,EAAc,YAAA,CAAa,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAC,CAAA;AACzE,IAAA,MAAM,UAAA,CAAW,gBAAgB,cAAA,EAAgB,cAAA,CAAe,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAC,CAAA;AAChF,IAAA,IAAI,WAAA,CAAY,QAAQ,MAAM,SAAA,CAAU,QAAQ,CAAC,GAAG,IAAI,GAAA,CAAI,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,EAAE,EAAA,EAAI,CAAC,CAAC,CAAC,CAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AACxG,IAAA,IAAI,QAAA,CAAS,MAAA,EAAQ,MAAM,QAAA,CAAS,QAAQ,QAAQ,CAAA;AACpD,IAAA,MAAM,UAAA,CAAW,EAAA,CAAG,SAAA,CAAU,MAAM,CAAA,EAAG,KAAA,EAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAC,CAAA;AACpE,IAAA,MAAM,UAAA,CAAW,WAAW,SAAA,EAAW,SAAA,CAAU,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAC,CAAA;AACjE,IAAA,MAAM,SAAA,CAAU,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA;AAC9B,IAAA,OAAO,MAAA;AAAA,EACT,CAAC,CAAA;AACH","file":"index.mjs","sourcesContent":["/**\n * Language Pack API — umbrella sugar over per-package slices\n *\n * Implements docs/adr/language-pack-api.md.\n * Provides defineLanguagePack() factory and registerLanguagePack() fan-out\n * into core tag identity, lang dialect stack, and analytics registries.\n */\n\nimport type { IDialect } from '@bitcobblers/wod-wiki-core';\nimport type { IRealtimeProcessor, ISummaryProcessor } from '@bitcobblers/wod-wiki-lang';\nimport {\n dialectRegistry,\n realtimeProcessorRegistry,\n summaryProcessorRegistry,\n} from '@bitcobblers/wod-wiki-lang';\n\nexport interface LanguagePackIdentity {\n id?: string;\n name: string;\n tags?: readonly string[];\n aliases?: readonly string[];\n runnable?: boolean;\n}\n\nexport interface LanguagePackLangSlice {\n analyzer?: new () => IDialect;\n analytics?: ReadonlyArray<new () => IRealtimeProcessor | ISummaryProcessor>;\n}\n\nexport interface LanguagePackUiSlice {\n widgetBlock?: unknown;\n}\n\nexport interface LanguagePack {\n identity?: LanguagePackIdentity;\n lang?: LanguagePackLangSlice;\n ui?: LanguagePackUiSlice;\n}\n\nconst activePacks = new Map<string, LanguagePack>();\n\nexport function defineLanguagePack(pack: LanguagePack): LanguagePack {\n return pack;\n}\n\nexport function registerLanguagePack(pack: LanguagePack): void {\n const packId = pack.identity?.id ?? pack.identity?.name ?? 'anonymous-pack';\n activePacks.set(packId, pack);\n\n if (pack.lang?.analyzer) {\n const AnalyzerCtor = pack.lang.analyzer;\n const instance = new AnalyzerCtor();\n dialectRegistry.register(instance);\n }\n\n if (pack.lang?.analytics) {\n for (const ProcessorCtor of pack.lang.analytics) {\n const instance = new ProcessorCtor();\n if ('processOutput' in instance) {\n realtimeProcessorRegistry.register(instance as IRealtimeProcessor);\n }\n if ('processSummary' in instance) {\n summaryProcessorRegistry.register(instance as ISummaryProcessor);\n }\n }\n }\n}\n\nexport function unregisterLanguagePack(packOrId: LanguagePack | string): void {\n const packId = typeof packOrId === 'string'\n ? packOrId\n : (packOrId.identity?.id ?? packOrId.identity?.name ?? 'anonymous-pack');\n\n const pack = activePacks.get(packId);\n activePacks.delete(packId);\n\n if (pack?.lang?.analyzer) {\n const instance = new pack.lang.analyzer();\n dialectRegistry.unregister(instance.id);\n } else if (typeof packOrId === 'string') {\n dialectRegistry.unregister(packOrId);\n }\n\n if (pack?.lang?.analytics) {\n for (const ProcessorCtor of pack.lang.analytics) {\n const instance = new ProcessorCtor();\n if ('processOutput' in instance) {\n realtimeProcessorRegistry.unregister((instance as IRealtimeProcessor).id);\n }\n if ('processSummary' in instance) {\n summaryProcessorRegistry.unregister((instance as ISummaryProcessor).id);\n }\n }\n }\n}\n\nexport function listLanguagePacks(): LanguagePack[] {\n return Array.from(activePacks.values());\n}\n\nexport function getRegisteredLanguagePacks(): LanguagePack[] {\n return Array.from(activePacks.values());\n}\n","/**\n * In-memory UnifiedEventStore — the state-free store seam for QueryService,\n * the CLI query runner, and the Storybook workbench.\n *\n * One adapter over an in-memory row list:\n * - inMemoryEventStore: the UnifiedEventStore contract (ticket 003)\n */\nimport type { EventRecord } from '@bitcobblers/wod-wiki-core';\nimport type { EventStore } from '@bitcobblers/wod-wiki-wql';\n\nexport function inMemoryEventStore(events: readonly EventRecord[]): EventStore {\n const rows = [...events];\n return {\n getEventsByTimeRange: async (start: number, end: number) =>\n rows.filter((r) => r.timestamp >= start && r.timestamp <= end),\n getEventsByResult: async (resultId: string) =>\n rows.filter((r) => r.resultId === resultId),\n getEventsForNote: async (noteId: string) =>\n rows.filter((r) => r.noteId === noteId),\n getEventsByContent: async (blockContentId: string) =>\n rows.filter((r) => r.blockContentId === blockContentId),\n scanAll: async () => rows,\n appendEvents: async (appended) => { rows.push(...appended); },\n finalizeSummaries: async (resultId, finals) => {\n // Ticket 005: only engine-authored summaries are finalize-owned;\n // user-authored summaries (origin 'user', e.g. wellness) are\n // reconcile-owned and must survive a result finalize.\n for (let i = rows.length - 1; i >= 0; i--) {\n const row = rows[i];\n if (row.resultId === resultId && row.grain === 'summary' && row.origin !== 'user') rows.splice(i, 1);\n }\n rows.push(...finals);\n },\n deleteEvents: async (ids) => {\n const doomed = new Set(ids);\n for (let i = rows.length - 1; i >= 0; i--) {\n if (doomed.has(rows[i].id)) rows.splice(i, 1);\n }\n },\n };\n}\n","/**\n * Pure JSON Intermediate Representation (IR) Schemas & Envelope\n *\n * Implements wayfinder #955 and research asset `docs/research/json-ir-schemas-2026-08-17.md`.\n * Freezes the existing result vocabulary (QueryResult, RowsQueryResult, FindQueryResult,\n * StoredOutputStatement, AnalyticsDataPoint, WorkoutResult, StatementNode) in a\n * versioned envelope safe for JSON round-trips.\n */\n\nimport type {\n ICodeStatement,\n AnalyticsDataPoint,\n Note,\n BlockRevision,\n BlockIndexRow,\n Session,\n StoredOutputStatement,\n WorkoutResults,\n} from '@bitcobblers/wod-wiki-core';\nimport { MetricType } from '@bitcobblers/wod-wiki-core';\nimport type { IScript, IEffort } from '@bitcobblers/wod-wiki-lang';\nimport { getHints } from '@bitcobblers/wod-wiki-lang';\n\nexport type IrKind =\n | 'fact-set'\n | 'result-set'\n | 'note-set'\n | 'corpus'\n | 'query-result'\n | 'find-result'\n | 'rows-result'\n | 'pipeline-result'\n | 'parse-tree'\n | 'execution-log';\n\n/**\n * Universal JSON envelope for all headless IR fixtures and output artifacts.\n */\nexport interface WodWikiIRFile<T> {\n $schema: 'https://wod-wiki.dev/ir/v1.json';\n kind: IrKind;\n generatedAt: number;\n source: string;\n data: T;\n}\n\nexport function createIRFile<T>(\n kind: IrKind,\n data: T,\n optionsOrSource?: string | { source?: string; generatedAt?: number },\n generatedAt?: number,\n): WodWikiIRFile<T> {\n let source = 'wod:headless';\n let genAt = Date.now();\n if (typeof optionsOrSource === 'string') {\n source = optionsOrSource;\n if (generatedAt !== undefined) genAt = generatedAt;\n } else if (optionsOrSource && typeof optionsOrSource === 'object') {\n if (optionsOrSource.source) source = optionsOrSource.source;\n if (optionsOrSource.generatedAt !== undefined) genAt = optionsOrSource.generatedAt;\n }\n return {\n $schema: 'https://wod-wiki.dev/ir/v1.json',\n kind,\n generatedAt: genAt,\n source,\n data,\n };\n}\n\nexport function isIRFile<T = unknown>(obj: unknown): obj is WodWikiIRFile<T> {\n if (!obj || typeof obj !== 'object') return false;\n const cand = obj as Partial<WodWikiIRFile<T>>;\n return (\n cand.$schema === 'https://wod-wiki.dev/ir/v1.json' &&\n typeof cand.kind === 'string' &&\n typeof cand.generatedAt === 'number' &&\n typeof cand.source === 'string' &&\n 'data' in cand\n );\n}\n\n// ── Parse Tree IR Models (#955) ─────────────────────────────────────────────\n\nexport interface MetricNode {\n type: string;\n image?: string;\n value?: unknown;\n origin?: string;\n}\n\nexport interface StatementNode {\n id: number;\n type: 'statement' | 'duration' | 'rounds' | 'rest' | 'segment' | 'root';\n raw: string;\n from: number;\n to: number;\n metrics: MetricNode[];\n hints?: string[];\n children?: StatementNode[];\n}\n\nexport function statementToNode(stmt: ICodeStatement, idMap: Map<number, ICodeStatement>): StatementNode {\n const meta = stmt.meta;\n const metrics: MetricNode[] = stmt.metrics.toArray().map((m) => ({\n type: m.type as string,\n ...(m.image !== undefined ? { image: m.image } : {}),\n ...(m.value !== undefined ? { value: m.value } : {}),\n ...(m.origin !== undefined ? { origin: m.origin } : {}),\n }));\n\n const raw = meta?.raw ?? '';\n const from = meta?.startOffset ?? 0;\n const to = meta?.endOffset ?? (from + raw.length);\n\n const durationFrag = stmt.metrics.find((m) => m.type === MetricType.Duration || m.type === 'duration');\n const roundsFrag = stmt.metrics.find((m) => m.type === MetricType.Rounds || m.type === 'rounds');\n const type: StatementNode['type'] = durationFrag ? 'duration' : roundsFrag ? 'rounds' : 'statement';\n\n const hints = getHints(stmt);\n\n const childIds = (stmt.children ?? []).flat();\n const children: StatementNode[] = childIds\n .map((cid) => idMap.get(cid))\n .filter((c): c is ICodeStatement => c !== undefined)\n .map((c) => statementToNode(c, idMap));\n\n return {\n id: stmt.id,\n type,\n raw,\n from,\n to,\n metrics,\n ...(hints.length > 0 ? { hints } : {}),\n ...(children.length > 0 ? { children } : {}),\n };\n}\n\n/** Builds a StatementNode tree from a parsed WhiteboardScript. */\nexport function buildStatementTree(script: IScript): StatementNode {\n const idMap = new Map(script.statements.map((s) => [s.id, s]));\n const topLevel = script.statements.filter((s) => s.parent === undefined || !idMap.has(s.parent));\n\n if (topLevel.length === 1 && topLevel[0].children.length > 0) {\n return statementToNode(topLevel[0], idMap);\n }\n\n return {\n id: 0,\n type: 'root',\n raw: script.source,\n from: 0,\n to: script.source.length,\n metrics: [],\n children: topLevel.map((s) => statementToNode(s, idMap)),\n };\n}\n\n// ── Execution Log IR Models (#955) ──────────────────────────────────────────\n\nexport interface ExecutionLog {\n results: WorkoutResults;\n logs: StoredOutputStatement[];\n statements?: StoredOutputStatement[];\n blockKey?: string;\n sourceScript?: string;\n}\n\n// ── Corpus IR Models (#955) ─────────────────────────────────────────────────\n\nexport interface CorpusIRData {\n notes?: Note[];\n revisions?: BlockRevision[];\n blocks?: BlockIndexRow[];\n results?: Session[];\n facts?: AnalyticsDataPoint[];\n efforts?: IEffort[];\n logs?: StoredOutputStatement[];\n tags?: Record<string, string[]>;\n}\n","/**\n * Import / Export exchange formats for notes and sessions.\n *\n * Pure row→string / string→row transforms with NO storage or fs coupling,\n * so the playground website can offer the same downloads/uploads against\n * IndexedDB rows while the CLI uses them over sqlite. Round-trip is a\n * design requirement: every export carries the identity needed to import\n * back into the same database (upsert) or into a clean one (recreate).\n *\n * - Notes export their exact authored source with an identity stamp.\n * `wod parse` adopts the stamp when importing the note.\n * - Sessions → one CSV row per metric (event + summary grains), session\n * fields repeated per row plus one session-only anchor row, so a clean\n * import recreates the session and its events verbatim.\n */\n\nimport { WQL_TYPED_TAG_KEYS } from '@bitcobblers/wod-wiki-wql';\nimport type { EventRecord } from '@bitcobblers/wod-wiki-core';\nimport type { Note, Session } from '@bitcobblers/wod-wiki-storage';\n\n// ---------------------------------------------------------------------------\n// Note markdown composition\n// ---------------------------------------------------------------------------\n\n/** Identity stamped into exported note markdown so imports can find their note. */\nexport const NOTE_ID_FRONTMATTER_KEY = 'wod-note-id';\n\nexport interface NoteIdentity { noteId: string; title?: string }\n\nconst UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\n/** Read the stamped note identity from the leading frontmatter block, if any. */\nexport function extractNoteIdentity(markdown: string): NoteIdentity | undefined {\n const block = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---/.exec(markdown);\n if (!block) return undefined;\n let noteId: string | undefined;\n let title: string | undefined;\n for (const line of block[1].split(/\\r?\\n/)) {\n const kv = line.match(/^([^:]+):\\s*(.*)$/);\n if (!kv) continue;\n const key = kv[1].trim();\n const value = kv[2].trim();\n if (key === NOTE_ID_FRONTMATTER_KEY && UUID_RE.test(value)) noteId = value;\n if (key === 'title' && value) title = value;\n }\n return noteId ? { noteId, title } : undefined;\n}\n\n/** True when a scalar is safe to emit bare in a `key: value` frontmatter line. */\nconst FRONTMATTER_SAFE = /^[^:#\\[\\]{}'\"*&,!?|>%@`\\s][^:#\\[\\]{}\"']*$/;\n\n/**\n * Ensure the leading frontmatter carries `title` + `wod-note-id`. Existing\n * keys are replaced in place; a missing block is prepended. Scalars needing\n * YAML quoting are skipped (the note row title is authoritative in storage).\n */\nexport function injectIdentityFrontmatter(markdown: string, identity: NoteIdentity): string {\n const stamp = (lines: string[]): string[] => {\n const replaceOrInsert = (key: string, value: string | undefined): void => {\n if (value === undefined || !FRONTMATTER_SAFE.test(value)) return;\n const idx = lines.findIndex((l) => l.startsWith(`${key}:`));\n if (idx >= 0) lines[idx] = `${key}: ${value}`;\n else lines.push(`${key}: ${value}`);\n };\n replaceOrInsert('title', identity.title);\n replaceOrInsert(NOTE_ID_FRONTMATTER_KEY, identity.noteId);\n return lines;\n };\n\n const block = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---/.exec(markdown);\n if (block) {\n const newline = markdown.startsWith('---\\r\\n') ? '\\r\\n' : '\\n';\n const lines = stamp(block[1].split(/\\r?\\n/));\n return `---${newline}${lines.join(newline)}${newline}---${markdown.slice(block[0].length)}`;\n }\n const lines = stamp([]);\n return `---\\n${lines.join('\\n')}\\n---\\n\\n${markdown}`;\n}\n\n/** Export the exact authored Note source, with identity for re-import. */\nexport function composeNoteMarkdown(note: Note): string {\n return injectIdentityFrontmatter(note.rawContent, { noteId: note.id, title: note.title });\n}\n\n// ---------------------------------------------------------------------------\n// Frontmatter tags (general + typed: equipment, quality, …)\n// ---------------------------------------------------------------------------\n\nexport interface TypedTagItem { label: string; type?: string }\n\nconst FRONTMATTER_BLOCK_RE = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---/;\n\n/**\n * Minimal frontmatter reader (the corpus subset): `key: scalar`, `key:` +\n * `- item` lists, and inline `[a, b]` lists. Keys are lowercased. Returns {}\n * when no leading block exists.\n */\nexport function readFrontmatterMeta(markdown: string): Record<string, string | string[]> {\n const match = FRONTMATTER_BLOCK_RE.exec(markdown);\n if (!match) return {};\n const meta: Record<string, string | string[]> = {};\n const lines = match[1].split(/\\r?\\n/);\n let currentListKey: string | undefined;\n for (const rawLine of lines) {\n const line = rawLine.trimEnd();\n const item = line.match(/^\\s+-\\s+(.*)$/);\n if (item && currentListKey) {\n (meta[currentListKey] as string[]).push(item[1].trim());\n continue;\n }\n const kv = line.match(/^([^:]+):\\s*(.*)$/);\n if (!kv) continue;\n const key = kv[1].trim().toLowerCase();\n const value = kv[2].trim();\n if (value === '') {\n meta[key] = [];\n currentListKey = key;\n } else if (value.startsWith('[') && value.endsWith(']')) {\n meta[key] = value\n .slice(1, -1)\n .split(',')\n .map((v) => v.trim().replace(/^['\"]|['\"]$/g, ''))\n .filter((v) => v.length > 0);\n currentListKey = undefined;\n } else {\n meta[key] = value;\n currentListKey = undefined;\n }\n }\n return meta;\n}\n\nconst asList = (value: string | string[] | undefined): string[] =>\n Array.isArray(value)\n ? value\n : typeof value === 'string'\n ? value.split(',').map((v) => v.trim()).filter((v) => v.length > 0)\n : [];\n\n/**\n * Extract a note's frontmatter tags: the general `tags:` list plus typed\n * keys (equipment, quality, domain, format, intent by default — the WQL\n * typed-tag vocabulary). Mirrors the playground's\n * `extractTypedFrontmatterTags` (frontmatter.ts) so CLI and app imports\n * classify identically.\n */\nexport function extractTypedTags(\n markdown: string,\n typedKeys: readonly string[] = WQL_TYPED_TAG_KEYS,\n): TypedTagItem[] {\n const meta = readFrontmatterMeta(markdown);\n const results: TypedTagItem[] = asList(meta['tags']).map((label) => ({ label }));\n const metaKeys = Object.keys(meta);\n for (const typeName of typedKeys) {\n if (typeName === 'tags') continue;\n const matchedKey = metaKeys.find((k) => k === typeName.toLowerCase());\n if (!matchedKey) continue;\n for (const label of asList(meta[matchedKey])) {\n results.push({ label, type: typeName });\n }\n }\n return results.filter((t) => t.label.length > 0);\n}\n\n// ---------------------------------------------------------------------------\n// Definition registry (markdown serialization — parsing lives in lang)\n// ---------------------------------------------------------------------------\n\n/**\n * Compose an effort registry row back into corpus-style markdown. Export\n * paths prefer the owning note's raw source (byte-identical); this\n * reconstruction is the fallback for rows without an owner note.\n */\nexport function effortToMarkdown(effort: {\n id: string;\n slug: string;\n label: string;\n aliases?: string[];\n baseAttributes: Record<string, unknown>;\n body?: string;\n}): string {\n const lines = ['---', `id: ${effort.id}`, `slug: ${effort.slug}`, `label: ${effort.label}`];\n if (effort.aliases && effort.aliases.length > 0) {\n lines.push('aliases:');\n for (const alias of effort.aliases) lines.push(` - ${alias}`);\n }\n const attrs = Object.entries(effort.baseAttributes).filter(([, v]) => typeof v === 'number' || typeof v === 'string');\n if (attrs.length > 0) {\n lines.push('baseAttributes:');\n for (const [k, v] of attrs) lines.push(` ${k}: ${String(v)}`);\n }\n lines.push('---', '');\n return `${lines.join('\\n')}\\n${(effort.body ?? '').trim()}`.trimEnd() + '\\n';\n}\n\n/** Compose an equipment registry row back into corpus-style markdown (effortToMarkdown's equipment twin). */\nexport function equipmentToMarkdown(equipment: {\n id: string;\n slug: string;\n label: string;\n aliases?: string[];\n body?: string;\n}): string {\n const lines = ['---', 'type: equipment', `id: ${equipment.id}`, `slug: ${equipment.slug}`, `label: ${equipment.label}`];\n if (equipment.aliases && equipment.aliases.length > 0) {\n lines.push('aliases:');\n for (const alias of equipment.aliases) lines.push(` - ${alias}`);\n }\n lines.push('---', '');\n return `${lines.join('\\n')}\\n${(equipment.body ?? '').trim()}`.trimEnd() + '\\n';\n}\n\n// ---------------------------------------------------------------------------\n// Equipment catalog (typed tags, CSV round-trip)\n// ---------------------------------------------------------------------------\n\n/** One-label-per-row CSV (header `label`) for equipment catalogs. */\nexport function equipmentToCsv(labels: readonly string[]): string {\n return ['label', ...labels].map((l) => escapeCsvField(l)).join('\\n') + '\\n';\n}\n\nexport function csvToEquipmentLabels(csv: string): string[] {\n const lines = splitCsvRecords(csv);\n if (lines.length === 0) return [];\n const header = parseCsvLine(lines[0]);\n const labelIdx = header[0] === 'label' ? 0 : -1;\n const start = labelIdx >= 0 ? 1 : 0; // tolerate headerless files\n const labels: string[] = [];\n for (const line of lines.slice(start)) {\n const cells = parseCsvLine(line);\n const label = (labelIdx >= 0 ? cells[0] : cells.join(',')).trim();\n if (label) labels.push(label);\n }\n return [...new Set(labels)];\n}\n\n// ---------------------------------------------------------------------------\n// Session CSV\n// ---------------------------------------------------------------------------\n\ntype Metric = {\n type?: string;\n value?: unknown;\n unit?: string;\n image?: string;\n origin?: string;\n metadata?: unknown;\n name?: string;\n};\n\nconst SESSION_HEADER = [\n 'sessionId', 'noteId', 'blockId', 'blockVersion', 'blockContentId',\n 'origin', 'status', 'startTime', 'endTime', 'duration', 'completed', 'sessionCreatedAt', 'sessionExtraJson',\n] as const;\n\nconst EVENT_HEADER = [\n 'eventId', 'grain', 'outputType', 'timestamp', 'pageId', 'effortSlug',\n 'eventBlockId', 'eventBlockVersion', 'eventBlockContentId', 'eventOrigin',\n 'timeSpan', 'sourceBlockKey', 'sourceStatementId', 'line', 'text', 'dialect',\n 'stackLevel', 'completionReason', 'representationKind',\n 'metricType', 'metricValue', 'metricUnit', 'metricImage', 'metricOrigin',\n 'metricMetadata', 'metricTemporal',\n // Verbatim JSON backstops: make the machine round-trip lossless across\n // schema fields that have no dedicated spreadsheet column. Explicit cells\n // above still win on import, so hand-edited values are honored.\n 'metricJson', 'eventExtraJson',\n] as const;\n\nexport const SESSION_CSV_HEADER = [...SESSION_HEADER, ...EVENT_HEADER];\n\nfunction escapeCsvField(field: unknown): string {\n if (field === undefined || field === null) return '';\n const str = typeof field === 'object' ? JSON.stringify(field) : String(field);\n if (str.includes(',') || str.includes('\"') || str.includes('\\n') || str.includes('\\r')) {\n return `\"${str.replace(/\"/g, '\"\"')}\"`;\n }\n return str;\n}\n\nconst metricValueToCell = (value: unknown): string => {\n if (value === undefined || value === null) return '';\n if (typeof value === 'object') return JSON.stringify(value);\n return String(value);\n};\n\nconst metricValueFromCell = (cell: string): unknown => {\n if (cell === '') return undefined;\n if (/^-?\\d+(\\.\\d+)?$/.test(cell)) return Number(cell);\n if (cell === 'true' || cell === 'false') return cell === 'true';\n if (cell.startsWith('{') || cell.startsWith('[')) {\n try {\n return JSON.parse(cell);\n } catch {\n return cell;\n }\n }\n return cell;\n};\n\nfunction sessionCells(session: Session): string[] {\n return [\n session.id, session.noteId, session.blockId, session.blockVersion,\n session.blockContentId, session.origin, session.status,\n session.startTime, session.endTime, session.duration, session.completed,\n session.createdAt, JSON.stringify(session),\n ].map(escapeCsvField);\n}\n\nfunction metricCells(event: EventRecord, metric: Metric, index: number): string[] {\n return [\n event.id, event.grain, event.outputType, event.timestamp, event.pageId, event.effortSlug,\n event.blockId, event.blockVersion, event.blockContentId, event.origin,\n event.timeSpan, event.sourceBlockKey, event.sourceStatementId, event.line, event.text, event.dialect,\n event.stackLevel, event.completionReason, event.representationKind,\n metric.type, metricValueToCell(metric.value), metric.unit, metric.image, metric.origin,\n metric.metadata === undefined ? '' : JSON.stringify(metric.metadata),\n event.metricTemporal?.[index] === undefined ? '' : JSON.stringify(event.metricTemporal[index]),\n JSON.stringify(metric),\n ].map(escapeCsvField);\n}\n\n/** Event fields with no dedicated column, serialized verbatim (minus the\n * metrics array, which gets its own columns). metricTemporal is kept: the\n * importer discards it and rebuilds from the per-row column, so an empty\n * array still round-trips where no rows carry temporals. Returns the\n * CSV-escaped cell. */\nfunction eventExtraCells(event: EventRecord): string {\n const { metrics: _metrics, ...rest } = event;\n return escapeCsvField(JSON.stringify(rest));\n}\n\n/**\n * Serialize a session + its events to CSV — one row per metric, preceded by\n * one session anchor row (empty event columns). Import with\n * {@link csvToSessionRows}.\n */\nexport function sessionToCsv(session: Session, events: readonly EventRecord[]): string {\n const lines = [SESSION_CSV_HEADER.join(',')];\n lines.push([...sessionCells(session), ...EVENT_HEADER.map(() => '')].join(','));\n const ordered = [...events].sort((a, b) => a.id.localeCompare(b.id));\n for (const event of ordered) {\n const extra = eventExtraCells(event);\n const metrics = event.metrics ?? [];\n if (metrics.length === 0) {\n lines.push([...sessionCells(session), ...metricCells(event, { type: '' }, 0), extra].join(','));\n continue;\n }\n for (let i = 0; i < metrics.length; i++) {\n lines.push([...sessionCells(session), ...metricCells(event, metrics[i], i), extra].join(','));\n }\n }\n return lines.join('\\n') + '\\n';\n}\n\n/** Parse one CSV line, honoring double-quoted fields (RFC 4180 subset). */\nexport function parseCsvLine(line: string): string[] {\n const cells: string[] = [];\n let current = '';\n let quoted = false;\n for (let i = 0; i < line.length; i++) {\n const ch = line[i];\n if (quoted) {\n if (ch === '\"') {\n if (line[i + 1] === '\"') {\n current += '\"';\n i += 1;\n } else {\n quoted = false;\n }\n } else {\n current += ch;\n }\n } else if (ch === '\"' && current === '') {\n quoted = true;\n } else if (ch === ',') {\n cells.push(current);\n current = '';\n } else {\n current += ch;\n }\n }\n cells.push(current);\n return cells;\n}\n\n/** Split CSV into records on newlines that are NOT inside quoted fields. */\nexport function splitCsvRecords(csv: string): string[] {\n const records: string[] = [];\n let current = '';\n let quoted = false;\n for (let i = 0; i < csv.length; i++) {\n const ch = csv[i];\n if (ch === '\"') {\n if (quoted && csv[i + 1] === '\"') {\n current += '\"\"';\n i += 1;\n continue;\n }\n quoted = !quoted;\n current += ch;\n } else if (!quoted && (ch === '\\n' || ch === '\\r')) {\n if (ch === '\\r' && csv[i + 1] === '\\n') i += 1;\n if (current.length > 0) records.push(current);\n current = '';\n } else {\n current += ch;\n }\n }\n if (current.length > 0) records.push(current);\n return records;\n}\n\nexport interface SessionImportRows {\n session: Session;\n events: EventRecord[];\n}\n\nconst num = (cell: string): number | undefined => (cell === '' ? undefined : Number(cell));\nconst nonempty = (cell: string): string | undefined => (cell === '' ? undefined : cell);\n\nfunction jsonCell<T>(cell: string): T | undefined {\n if (!cell) return undefined;\n try {\n return JSON.parse(cell) as T;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Parse {@link sessionToCsv} output back into a session + event rows.\n * The session anchor row may be absent (pure event export) as long as\n * session columns are present on the event rows.\n */\nexport function csvToSessionRows(csv: string): SessionImportRows {\n const lines = splitCsvRecords(csv);\n if (lines.length < 2) throw new Error('[wod import] Session CSV has no data rows');\n const header = parseCsvLine(lines[0]);\n if (header.some((name) => /segment/i.test(name))) {\n throw new Error('[wod import] Incompatible Session CSV segment pins; blockId/blockVersion are required');\n }\n const col = (name: string): number => {\n const idx = header.indexOf(name);\n if (idx < 0) throw new Error(`[wod import] Session CSV missing column \"${name}\"`);\n return idx;\n };\n const at = (cells: string[], name: string): string => cells[col(name)] ?? '';\n\n const eventRows = new Map<string, EventRecord>();\n let session: Session | undefined;\n\n const ensureSession = (cells: string[]): Session => {\n const id = at(cells, 'sessionId');\n const noteId = at(cells, 'noteId');\n const blockId = at(cells, 'blockId');\n const blockVersion = Number(at(cells, 'blockVersion'));\n if (!id || !noteId || !blockId || !Number.isSafeInteger(blockVersion) || blockVersion < 1) {\n throw new Error('[wod import] Session CSV requires sessionId, noteId, blockId and positive blockVersion');\n }\n if (session) {\n if (session.id !== id || session.noteId !== noteId || session.blockId !== blockId || session.blockVersion !== blockVersion) {\n throw new Error('[wod import] Session CSV contains inconsistent source pins');\n }\n return session;\n }\n const extra = jsonCell<Partial<Session>>(at(cells, 'sessionExtraJson')) ?? {};\n if ('segmentId' in extra || 'segmentVersion' in extra || 'version' in extra || 'rawContent' in extra || 'data' in extra) {\n throw new Error('[wod import] Incompatible Session CSV source snapshot or segment pin');\n }\n session = {\n ...extra,\n id,\n noteId,\n blockId,\n blockVersion,\n blockContentId: at(cells, 'blockContentId') || undefined,\n origin: (at(cells, 'origin') || undefined) as Session['origin'],\n status: (at(cells, 'status') || undefined) as Session['status'],\n startTime: Number(at(cells, 'startTime') || 0),\n endTime: Number(at(cells, 'endTime') || 0),\n duration: Number(at(cells, 'duration') || 0),\n completed: at(cells, 'completed') === 'true',\n createdAt: Number(at(cells, 'sessionCreatedAt') || 0),\n };\n if (![session.startTime, session.endTime, session.duration, session.createdAt].every(Number.isFinite)) {\n throw new Error('[wod import] Session CSV lifecycle values must be finite numbers');\n }\n return session;\n };\n\n for (const line of lines.slice(1)) {\n const cells = parseCsvLine(line);\n if (cells.length === 1 && cells[0] === '') continue;\n const currentSession = ensureSession(cells);\n const eventId = at(cells, 'eventId');\n if (!eventId) continue; // session anchor row\n\n let event = eventRows.get(eventId);\n if (!event) {\n // eventExtraJson is the verbatim backstop; explicit spreadsheet cells\n // override it so hand-edited values are honored on import.\n const extra = jsonCell<Record<string, unknown>>(at(cells, 'eventExtraJson')) ?? {};\n if ('segmentId' in extra || 'segmentVersion' in extra) {\n throw new Error('[wod import] Incompatible Session CSV event segment pins');\n }\n const blockId = nonempty(at(cells, 'eventBlockId'));\n const blockVersion = num(at(cells, 'eventBlockVersion'));\n if (blockId !== currentSession.blockId || blockVersion !== currentSession.blockVersion) {\n throw new Error('[wod import] Event source pin differs from Session source pin');\n }\n event = {\n ...extra,\n id: eventId,\n resultId: currentSession.id,\n noteId: nonempty(at(cells, 'noteId')) ?? (extra.noteId as string | undefined) ?? currentSession.noteId,\n blockContentId: nonempty(at(cells, 'eventBlockContentId')) ?? (extra.blockContentId as string | undefined),\n pageId: nonempty(at(cells, 'pageId')) ?? (extra.pageId as string | undefined),\n origin: (nonempty(at(cells, 'eventOrigin')) ?? extra.origin) as EventRecord['origin'],\n timestamp: Number(at(cells, 'timestamp') || extra.timestamp || 0),\n grain: (nonempty(at(cells, 'grain')) ?? extra.grain ?? 'event') as EventRecord['grain'],\n effortSlug: nonempty(at(cells, 'effortSlug')) ?? (extra.effortSlug as string | undefined),\n outputType: nonempty(at(cells, 'outputType')) ?? (extra.outputType as string | undefined) ?? 'event',\n blockId,\n blockVersion,\n timeSpan: jsonCell(at(cells, 'timeSpan')) ?? (extra.timeSpan as EventRecord['timeSpan']),\n sourceBlockKey: nonempty(at(cells, 'sourceBlockKey')) ?? (extra.sourceBlockKey as string | undefined),\n sourceStatementId: num(at(cells, 'sourceStatementId')) ?? (extra.sourceStatementId as number | undefined),\n line: num(at(cells, 'line')) ?? (extra.line as number | undefined),\n text: nonempty(at(cells, 'text')) ?? (extra.text as string | undefined),\n dialect: nonempty(at(cells, 'dialect')) ?? (extra.dialect as string | undefined),\n stackLevel: num(at(cells, 'stackLevel')) ?? (extra.stackLevel as number | undefined),\n completionReason: nonempty(at(cells, 'completionReason')) ?? (extra.completionReason as string | undefined),\n representationKind: (nonempty(at(cells, 'representationKind')) ??\n extra.representationKind) as EventRecord['representationKind'],\n metrics: [],\n // Rebuild anchors from metric rows while preserving an authored empty array.\n metricTemporal: Array.isArray(extra.metricTemporal) ? [] : undefined,\n };\n eventRows.set(eventId, event);\n }\n\n const metricType = at(cells, 'metricType');\n if (!metricType) continue; // metrics:[] event row\n // metricJson is the verbatim backstop; explicit cells override it.\n const baseMetric = jsonCell<Metric>(at(cells, 'metricJson')) ?? {};\n const metric: Metric = {\n ...baseMetric,\n type: metricType,\n ...(at(cells, 'metricValue') !== '' ? { value: metricValueFromCell(at(cells, 'metricValue')) } : {}),\n ...(nonempty(at(cells, 'metricUnit')) ? { unit: at(cells, 'metricUnit') } : {}),\n ...(nonempty(at(cells, 'metricImage')) ? { image: at(cells, 'metricImage') } : {}),\n ...(nonempty(at(cells, 'metricOrigin')) ? { origin: at(cells, 'metricOrigin') } : {}),\n ...(at(cells, 'metricMetadata') !== ''\n ? { metadata: jsonCell(at(cells, 'metricMetadata')) }\n : {}),\n };\n (event.metrics as Metric[]).push(metric);\n const temporal = jsonCell<unknown>(at(cells, 'metricTemporal'));\n if (temporal !== undefined) {\n (event.metricTemporal ??= []).push(temporal as NonNullable<EventRecord['metricTemporal']>[number]);\n }\n }\n\n if (!session) throw new Error('[wod import] Session CSV did not contain session columns');\n return { session, events: [...eventRows.values()] };\n}\n","/**\n * Auto-generated build version metadata.\n * Do not edit directly; updated by scripts/stamp-version.ts\n */\nexport const VERSION = '0.43.2152';\nexport const GIT_SHA = 'f8520d9';\nexport const BUILD_TIME = '2026-10-22T12:07:18.256Z';\nexport const SEMVER = {\n version: '0.43.2152',\n gitSha: 'f8520d9',\n buildTime: '2026-10-22T12:07:18.256Z',\n} as const;\n","import type { BlockEffort, BlockEquipment, BlockIndexRow, NoteBlock } from '@bitcobblers/wod-wiki-core';\nimport { KNOWN_SECTION_WIDGETS } from '@bitcobblers/wod-wiki-core';\n\nexport const SEED_SCHEMA = 9;\nexport const SEED_REGISTERED_WIDGETS = KNOWN_SECTION_WIDGETS;\n\n/** Source and all current derived rows commit as one chunk. */\nexport interface SeedRow {\n path: string;\n content: string;\n blocks: Record<string, NoteBlock>;\n blockIndex: BlockIndexRow[];\n blockEfforts: BlockEffort[];\n blockEquipment: BlockEquipment[];\n}\n\nexport type ChunkKind = 'notes';\nexport interface ManifestChunk {\n id: string;\n path: string;\n sha256: string;\n bytes: number;\n count: number;\n kind?: ChunkKind;\n}\nexport interface SeedManifest {\n name?: string;\n description?: string;\n repositoryUrl?: string;\n schema: number;\n version: number;\n versionLabel?: string;\n commit?: string;\n dirty?: boolean;\n builtAt: string;\n chunks: ManifestChunk[];\n}\nexport type SeedPrecedenceTier = 'core' | 'community' | 'imported' | 'user';\nexport const SEED_PRECEDENCE_RANK: Readonly<Record<SeedPrecedenceTier, number>> = {\n core: 0,\n community: 1,\n imported: 2,\n user: 3,\n};\nexport function seedSourceTier(sourceIdOrMetaKey?: string | null, explicitTier?: SeedPrecedenceTier): SeedPrecedenceTier {\n if (explicitTier) return explicitTier;\n if (!sourceIdOrMetaKey) return 'core';\n if (sourceIdOrMetaKey === 'user') return 'user';\n const id = sourceIdOrMetaKey.startsWith('seed:') ? sourceIdOrMetaKey.slice(5) : sourceIdOrMetaKey;\n if (id === 'core' || id === 'efforts' || id === 'equipment') return 'core';\n if (id === 'community' || id.startsWith('community-') || id === 'common') return 'community';\n return 'imported';\n}\nexport function seedPrecedenceRank(sourceIdOrMetaKey?: string | null, explicitTier?: SeedPrecedenceTier): number {\n return SEED_PRECEDENCE_RANK[seedSourceTier(sourceIdOrMetaKey, explicitTier)];\n}\nexport interface SeedMetaRecord {\n key: string;\n schema: number;\n seedVersion: number;\n builtAt: string;\n importedAt: number;\n chunks: Record<string, { sha256: string; noteIds?: string[] }>;\n claim?: { owner: string; at: number } | null;\n tier?: SeedPrecedenceTier;\n}\nexport const SEED_BROADCAST_CHANNEL = 'wodwiki.seed';\nexport const EFFORTS_CHUNK_ID = 'efforts';\nexport const EQUIPMENT_CHUNK_ID = 'equipment';\nexport const CANVAS_CHUNK_ID = 'canvas';\nexport const DASHBOARDS_CHUNK_ID = 'dashboards';\nexport const TEMPLATE_CHUNK_ID = 'template';\nexport function seedMetaKey(sourceId: string): string { return `seed:${sourceId}`; }\nexport function emptySeedMeta(key: string): SeedMetaRecord {\n return { key, schema: SEED_SCHEMA, seedVersion: 0, builtAt: '', importedAt: 0, chunks: {}, claim: null };\n}\nexport function catalogForChunkId(chunkId: string): string | undefined {\n const value = /^(?:collection|feed)\\.(.+)$/.exec(chunkId)?.[1];\n return value && value !== '_root' ? value : undefined;\n}\nexport function canvasRouteSlug(content: string): string | null {\n const fm = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---/.exec(content);\n if (fm?.[1] && !/^template:\\s*canvas\\s*$/m.test(fm[1])) return null;\n return fm?.[1]?.match(/^route:\\s*(\\S+)\\s*$/m)?.[1]?.replace(/^\\//, '') || null;\n}\nexport function seedNoteSourceId(path: string, content: string, chunkId: string): string | undefined {\n const parts = path.split('/');\n const stem = (parts.at(-1) ?? '').replace(/\\.md$/i, '');\n const under = parts.slice(2).map((p) => p.replace(/\\.md$/i, '')).join('/');\n if (chunkId === CANVAS_CHUNK_ID) return `guides:${canvasRouteSlug(content) ?? under}`;\n if (chunkId === DASHBOARDS_CHUNK_ID) return 'dashboards';\n if (chunkId === EFFORTS_CHUNK_ID) return 'efforts';\n if (chunkId === EQUIPMENT_CHUNK_ID) return 'equipment';\n if (chunkId === TEMPLATE_CHUNK_ID) return 'playground';\n if (chunkId.startsWith('collection.')) {\n const catalog = catalogForChunkId(chunkId);\n return !catalog ? 'collection:_root' : stem.toLowerCase() === 'readme' ? `collection:${catalog}` : `collection:${catalog}/${stem}`;\n }\n if (chunkId.startsWith('feed.')) return `feed:feeds/${under}`;\n return undefined;\n}\n","import { blockContentId, parseDocumentSections, validateNoteBlocks } from '@bitcobblers/wod-wiki-core';\nimport { SEED_REGISTERED_WIDGETS, SEED_SCHEMA, type SeedManifest, type SeedRow } from './contract';\n\nfunction object(value: unknown): value is Record<string, unknown> { return typeof value === 'object' && value !== null && !Array.isArray(value); }\nfunction positive(value: unknown): value is number { return typeof value === 'number' && Number.isSafeInteger(value) && value > 0; }\nfunction nonnegative(value: unknown): value is number { return typeof value === 'number' && Number.isSafeInteger(value) && value >= 0; }\nexport function assertSeedManifest(value: unknown): SeedManifest {\n if (!object(value) || value.schema !== SEED_SCHEMA) throw new Error('Incompatible seed schema; rebuild seed artifacts');\n if (!nonnegative(value.version) || typeof value.builtAt !== 'string' || !Number.isFinite(Date.parse(value.builtAt)) || !Array.isArray(value.chunks)) throw new Error('seed manifest failed shape validation');\n for (const key of ['versionLabel', 'commit', 'name', 'description']) if (value[key] !== undefined && typeof value[key] !== 'string') throw new Error('invalid seed manifest metadata');\n if (value.repositoryUrl !== undefined && (typeof value.repositoryUrl !== 'string' || !/^https:\\/\\//.test(value.repositoryUrl) || new URL(value.repositoryUrl).username || new URL(value.repositoryUrl).password)) throw new Error('invalid seed repository URL');\n if (value.dirty !== undefined && typeof value.dirty !== 'boolean') throw new Error('invalid seed manifest metadata');\n const ids = new Set<string>(), paths = new Set<string>();\n for (const chunk of value.chunks) {\n if (!object(chunk) || typeof chunk.id !== 'string' || !chunk.id || typeof chunk.path !== 'string' || !/^chunks\\/[a-zA-Z0-9._-]+\\.json$/.test(chunk.path) || typeof chunk.sha256 !== 'string' || !/^[0-9a-f]{64}$/.test(chunk.sha256) || !nonnegative(chunk.bytes) || !nonnegative(chunk.count) || (chunk.kind !== undefined && chunk.kind !== 'notes') || ids.has(chunk.id) || paths.has(chunk.path)) throw new Error('seed manifest failed shape validation');\n ids.add(chunk.id); paths.add(chunk.path);\n }\n return value as unknown as SeedManifest;\n}\nexport function assertSeedRows(value: unknown): SeedRow[] {\n if (!Array.isArray(value)) throw new Error('seed chunk is not an array');\n const paths = new Set<string>();\n for (const row of value) {\n if (!object(row) || typeof row.path !== 'string' || !row.path || row.path.startsWith('/') || row.path.split('/').includes('..') || paths.has(row.path) || typeof row.content !== 'string' || !object(row.blocks) || !Array.isArray(row.blockIndex) || !Array.isArray(row.blockEfforts) || !Array.isArray(row.blockEquipment)) throw new Error('seed chunk row failed shape validation');\n paths.add(row.path);\n for (const [id, block] of Object.entries(row.blocks)) {\n if (!object(block) || block.id !== id || !id || block.version !== 1 || block.sourceRevision !== 1 || !nonnegative(block.from) || !positive(block.to) || block.from >= block.to || block.to > row.content.length || !['wod', 'query', 'widget', 'embed'].includes(String(block.kind)) || (block.kind === 'wod' ? !['time', 'log'].includes(String(block.dialect)) : block.dialect !== undefined) || (block.sport !== undefined && typeof block.sport !== 'string')) throw new Error('invalid seed block range or revision');\n }\n validateNoteBlocks(row.content, row.blocks as SeedRow['blocks'], 1, { registeredWidgets: SEED_REGISTERED_WIDGETS });\n const indexed = new Set<string>();\n const sections = parseDocumentSections(row.content, { registeredWidgets: SEED_REGISTERED_WIDGETS });\n for (const projection of row.blockIndex) {\n if (!object(projection) || typeof projection.blockId !== 'string') throw new Error('invalid seed projection');\n const block = row.blocks[projection.blockId];\n if (!object(block) || indexed.has(projection.blockId) || typeof projection.id !== 'string' || typeof projection.noteId !== 'string' || projection.id !== `${projection.noteId}:${projection.blockId}` || projection.blockVersion !== 1 || projection.sourceRevision !== 1 || projection.from !== block.from || projection.to !== block.to || projection.dataType !== block.kind || projection.rawContent !== row.content.slice(Number(block.from), Number(block.to)) || typeof projection.noteTitle !== 'string' || typeof projection.createdAt !== 'number' || !Number.isFinite(projection.createdAt) || projection.sourcePath !== row.path || projection.isStatic !== true) throw new Error('orphan or incompatible seed projection');\n if ('segmentId' in projection || 'segmentVersion' in projection) throw new Error('incompatible seed projection');\n for (const key of ['sourceId', 'routeId', 'blockContentId']) if (projection[key] !== undefined && typeof projection[key] !== 'string') throw new Error('invalid seed projection metadata');\n if (projection.position !== undefined && !nonnegative(projection.position)) throw new Error('invalid seed projection position');\n if (block.kind === 'wod') {\n const section = sections.find((s) => s.from === block.from && s.to === block.to);\n if (projection.blockContentId !== blockContentId(section?.scriptBlock?.content ?? row.content.slice(Number(block.from), Number(block.to)))) throw new Error('invalid seed workout fingerprint');\n } else if (projection.blockContentId !== undefined) throw new Error('non-workout seed fingerprint');\n indexed.add(projection.blockId);\n }\n if (indexed.size !== Object.keys(row.blocks).length) throw new Error('missing actionable seed projection');\n const links = new Set<string>();\n for (const link of row.blockEfforts) {\n if (!object(link) || typeof link.blockId !== 'string' || typeof link.noteId !== 'string' || typeof link.effortSlug !== 'string' || !link.effortSlug) throw new Error('invalid seed effort identity');\n const block = row.blocks[link.blockId];\n if (link.id !== `${link.noteId}:${link.blockId}:${link.effortSlug}` || links.has(String(link.id)) || !object(block) || block.kind !== 'wod' || !indexed.has(link.blockId) || link.sourcePath !== row.path || link.isStatic !== true || typeof link.createdAt !== 'number') throw new Error('orphan or incompatible seed effort link');\n const projection = row.blockIndex.find((p: unknown) => object(p) && p.blockId === link.blockId);\n if (!object(projection) || link.noteId !== projection.noteId || link.blockContentId !== projection.blockContentId || !Number.isFinite(link.createdAt)) throw new Error('invalid seed effort metadata');\n links.add(String(link.id));\n }\n const equipmentLinks = new Set<string>();\n for (const link of row.blockEquipment) {\n if (!object(link) || typeof link.blockId !== 'string' || typeof link.noteId !== 'string' || typeof link.equipmentSlug !== 'string' || !link.equipmentSlug) throw new Error('invalid seed equipment identity');\n const block = row.blocks[link.blockId];\n if (link.id !== `${link.noteId}:${link.blockId}:${link.equipmentSlug}` || equipmentLinks.has(String(link.id)) || !object(block) || block.kind !== 'wod' || !indexed.has(link.blockId) || link.sourcePath !== row.path || link.isStatic !== true || typeof link.createdAt !== 'number') throw new Error('orphan or incompatible seed equipment link');\n const projection = row.blockIndex.find((p: unknown) => object(p) && p.blockId === link.blockId);\n if (!object(projection) || link.noteId !== projection.noteId || link.blockContentId !== projection.blockContentId || !Number.isFinite(link.createdAt)) throw new Error('invalid seed equipment metadata');\n equipmentLinks.add(String(link.id));\n }\n }\n return value as SeedRow[];\n}","import { mapNoteBlockChanges, reconcileNoteBlocks, validateNoteBlocks, type BlockRevision, type Note, type NoteBlock, type NoteTag, type Page, type PageNote, type Tag } from '@bitcobblers/wod-wiki-core';\nimport type { IStorage, IReadWriteStore } from '@bitcobblers/wod-wiki-storage';\nimport { userDeletedSeedNoteId } from '@bitcobblers/wod-wiki-storage';\nimport type { IEffort, IEquipment } from '@bitcobblers/wod-wiki-lang';\nimport { parseEffortFile, parseEquipmentFile } from '@bitcobblers/wod-wiki-lang';\nimport { extractTypedTags, readFrontmatterMeta } from '../exchange';\nimport { DASHBOARDS_CHUNK_ID, EFFORTS_CHUNK_ID, EQUIPMENT_CHUNK_ID, SEED_REGISTERED_WIDGETS, SEED_SCHEMA, catalogForChunkId, seedNoteSourceId, seedPrecedenceRank, type SeedManifest, type SeedMetaRecord, type SeedRow } from './contract';\nimport { assertSeedManifest, assertSeedRows } from './validation';\n\nconst SEED_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341';\nexport async function seedNoteId(path: string): Promise<string> {\n const digest = await crypto.subtle.digest('SHA-1', new TextEncoder().encode(`${SEED_NAMESPACE}:${path}`));\n const bytes = new Uint8Array(digest.slice(0, 16));\n bytes[6] = (bytes[6] & 0x0f) | 0x50;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n\nfunction equal(a: unknown, b: unknown): boolean {\n if (Object.is(a, b)) return true;\n if (!a || !b || typeof a !== 'object' || typeof b !== 'object') return false;\n const ak = Object.keys(a).filter((key) => Reflect.get(a, key) !== undefined), bk = Object.keys(b).filter((key) => Reflect.get(b, key) !== undefined);\n return ak.length === bk.length && ak.every((key) => key in b && equal(Reflect.get(a, key), Reflect.get(b, key)));\n}\nfunction titleFromPath(path: string): string {\n return (path.split('/').at(-1) ?? path).replace(/\\.md$/, '').replace(/[-_]+/g, ' ').replace(/\\b\\w/g, (c) => c.toUpperCase());\n}\nfunction refreshedBlocks(existing: Note, rawContent: string, sourceRevision: number): Record<string, NoteBlock> {\n const old = existing.rawContent;\n let from = 0, endOld = old.length, endNew = rawContent.length;\n while (from < endOld && from < endNew && old[from] === rawContent[from]) from++;\n while (endOld > from && endNew > from && old[endOld - 1] === rawContent[endNew - 1]) { endOld--; endNew--; }\n const intersect = Object.values(existing.blocks).filter((b) => from < b.to && endOld > b.from);\n // A source-only refresh proves lineage only outside blocks or within one occurrence.\n const trusted = intersect.length <= 1 ? existing.blocks : Object.fromEntries(Object.entries(existing.blocks).filter(([, b]) => !intersect.includes(b)));\n const mapped = mapNoteBlockChanges(trusted, [{ from, to: endOld, insert: rawContent.slice(from, endNew) }]);\n let ordinal = 0;\n return reconcileNoteBlocks(rawContent, { sourceRevision, blocks: mapped, registeredWidgets: SEED_REGISTERED_WIDGETS, createId: () => `seed:${existing.id}:r${sourceRevision}:${ordinal++}` });\n}\n\nexport interface SeedChunkWrite {\n chunkId: string | null;\n rows: SeedRow[];\n manifest: SeedManifest;\n expectedMeta: SeedMetaRecord | undefined;\n meta: SeedMetaRecord;\n}\nexport interface SeedChunkResult {\n totalNotes: number;\n totalEfforts: number;\n totalEquipment: number;\n totalBlocks: number;\n skippedUserOwned: number;\n deleted: number;\n /** Committed canonical notes that did not exist before this chunk. */\n addedNotes: number;\n /** Committed canonical notes whose content changed in this chunk. */\n updatedNotes: number;\n}\n\ninterface SeedCheckpointRef {\n key: string;\n sourceId: string;\n rank: number;\n meta: SeedMetaRecord;\n noteIds: Set<string>;\n}\n\n/**\n * Materialize one family's bundled definition projections from the chunk's\n * markdown rows. Collisions across seed sources resolve deterministically by\n * tier precedence (`core` < `community` < `imported` < `user`): a higher or\n * equal tier overrides lower tiers, while lower tiers are shadowed without\n * throwing or destroying their checkpoint. Tombstones restore the highest\n * remaining seed tier when one exists, or delete the projection otherwise.\n */\nasync function applyDefinitionChunk<T extends IEffort | IEquipment>(\n defStore: IReadWriteStore<T>,\n noteStore: IReadWriteStore<Note>,\n parse: (raw: string) => T | null,\n family: string,\n seedSource: string,\n incomingRank: number,\n otherCheckpoints: SeedCheckpointRef[],\n priorIds: string[],\n rows: SeedRow[],\n ids: string[],\n owned: Set<string>,\n existingById: Map<string, Note | undefined>,\n allIds: string[],\n): Promise<number> {\n const priorIdSet = new Set(priorIds);\n const maxOtherRankForNote = (noteId: string): number => {\n let max = -1;\n for (const cp of otherCheckpoints) {\n if (cp.noteIds.has(noteId) && cp.rank > max) max = cp.rank;\n }\n return max;\n };\n const projections: T[] = [];\n for (const [i, row] of rows.entries()) {\n if (!owned.has(ids[i])) continue;\n const parsed = parse(row.content);\n if (!parsed) continue;\n projections.push({ ...parsed, registrySource: 'bundled' as const, ownerNoteId: ids[i], sourceId: seedSource, sourcePath: row.path });\n }\n const prior = await defStore.getMany(projections.map((p) => p.slug));\n const changed = projections.filter((p, i) => {\n const before = prior[i];\n if (!before) return true;\n if (before.registrySource !== 'bundled') return false;\n let beforeRank: number;\n if (before.ownerNoteId === p.ownerNoteId || (before.ownerNoteId && priorIdSet.has(before.ownerNoteId) && maxOtherRankForNote(before.ownerNoteId) < incomingRank)) {\n beforeRank = incomingRank;\n } else {\n const cpRank = before.ownerNoteId ? maxOtherRankForNote(before.ownerNoteId) : -1;\n beforeRank = cpRank >= 0 ? cpRank : seedPrecedenceRank(before.sourceId);\n }\n return incomingRank >= beforeRank && !equal(p, before);\n });\n if (changed.length) await defStore.putMany(changed);\n const wantedSlugs = new Set(projections.map((p) => p.slug));\n const removedBySlug = new Map<string, string>();\n for (const id of allIds) {\n const note = existingById.get(id);\n if (!note || note.seedOrigin !== 'seed') continue;\n const slug = parse(note.rawContent)?.slug;\n if (slug && !wantedSlugs.has(slug)) removedBySlug.set(slug, id);\n }\n const removedSlugs = [...removedBySlug.keys()];\n if (removedSlugs.length) {\n const old = await defStore.getMany(removedSlugs);\n for (const [i, row] of old.entries()) {\n const slug = removedSlugs[i];\n if (!row || row.registrySource !== 'bundled') continue;\n const removedNoteId = removedBySlug.get(slug);\n const isOwnedByThisSource = row.ownerNoteId === removedNoteId && (!row.sourceId || row.sourceId === seedSource || row.sourceId === family);\n if (!isOwnedByThisSource) continue;\n let restored = false;\n for (const cp of otherCheckpoints) {\n const candidateIds = cp.meta.chunks?.[family]?.noteIds ?? [];\n if (!candidateIds.length) continue;\n const candidateNotes = await noteStore.getMany(candidateIds);\n for (const candidateNote of candidateNotes) {\n if (!candidateNote || candidateNote.seedOrigin !== 'seed') continue;\n const parsed = parse(candidateNote.rawContent);\n if (parsed && parsed.slug === slug) {\n await defStore.put({\n ...parsed,\n registrySource: 'bundled' as const,\n ownerNoteId: candidateNote.id,\n sourceId: cp.sourceId,\n sourcePath: candidateNote.sourcePath ?? '',\n });\n restored = true;\n break;\n }\n }\n if (restored) break;\n }\n if (!restored) {\n await defStore.delete(slug);\n }\n }\n }\n return changed.length;\n}\n\nasync function putChanged<T>(store: IReadWriteStore<T>, values: T[], keys: IDBValidKey[]): Promise<void> {\n if (!values.length) return;\n const prior = await store.getMany(keys);\n const changed = values.filter((value, i) => !equal(value, prior[i]));\n if (changed.length) await store.putMany(changed);\n}\n\nexport async function applySeedChunk(storage: IStorage, write: SeedChunkWrite): Promise<SeedChunkResult> {\n assertSeedManifest(write.manifest);\n assertSeedRows(write.rows);\n const result: SeedChunkResult = { totalNotes: 0, totalEfforts: 0, totalEquipment: 0, totalBlocks: 0, skippedUserOwned: 0, deleted: 0, addedNotes: 0, updatedNotes: 0 };\n const ids = await Promise.all(write.rows.map((row) => seedNoteId(row.path)));\n const pagesBySlug = new Map<string, string>();\n const linkIds = new Map<string, string>();\n const tagIds = new Map<string, string>();\n for (const [i, row] of write.rows.entries()) {\n const slug = readFrontmatterMeta(row.content)['slug'];\n if (typeof slug === 'string' && slug.trim()) {\n pagesBySlug.set(slug, await seedNoteId(`page:${slug}`));\n linkIds.set(ids[i], await seedNoteId(`pagenote:${slug}:${row.path}`));\n }\n for (const { label } of extractTypedTags(row.content)) {\n if (!tagIds.has(label)) tagIds.set(label, await seedNoteId(`tag:${label}`));\n }\n }\n return storage.transaction(['notes', 'block_revisions', 'block_index', 'block_efforts', 'block_equipment', 'page', 'page_notes', 'tags', 'note_tags', 'efforts', 'equipment', 'meta'], 'readwrite', async (tx) => {\n const metaStore = tx.readwrite('meta');\n // Durable user deletion intent (StorageService.deleteNote tombstones):\n // seed rows the user deleted through the app are never re-created by\n // re-import; the tombstones ship in every user-scope snapshot so fresh\n // devices suppress too.\n const userDeleted = new Set<string>();\n for (const row of await metaStore.getAll()) {\n const suppressed = userDeletedSeedNoteId((row as { key?: unknown } | null)?.key);\n if (suppressed !== undefined) userDeleted.add(suppressed);\n }\n const actualMeta = await metaStore.get(write.meta.key);\n if (!equal(actualMeta, write.expectedMeta)) throw new Error('Seed checkpoint changed during import');\n if (write.meta.schema !== SEED_SCHEMA || write.manifest.schema !== SEED_SCHEMA) throw new Error('Incompatible seed schema; recreate artifacts');\n const noteStore = tx.readwrite('notes');\n const priorIds = write.chunkId ? write.expectedMeta?.chunks[write.chunkId]?.noteIds ?? [] : [];\n const declared = new Set(ids);\n const goneIds = priorIds.filter((id) => !declared.has(id));\n const allIds = [...new Set([...ids, ...goneIds])];\n const stored = await noteStore.getMany(allIds);\n const existingById = new Map(allIds.map((id, i) => [id, stored[i]]));\n const seedSource = write.meta.key.startsWith('seed:') ? write.meta.key.slice(5) : write.meta.key;\n const incomingRank = seedPrecedenceRank(write.meta.key, write.meta.tier);\n const otherCheckpoints: SeedCheckpointRef[] = [];\n for (const row of await metaStore.getAll()) {\n const meta = row as unknown as SeedMetaRecord | undefined;\n if (!meta || typeof meta.key !== 'string' || !meta.key.startsWith('seed:') || meta.key === write.meta.key) continue;\n const noteIds = new Set<string>();\n for (const chunk of Object.values(meta.chunks ?? {})) {\n for (const noteId of chunk.noteIds ?? []) noteIds.add(noteId);\n }\n otherCheckpoints.push({\n key: meta.key,\n sourceId: meta.key.slice(5),\n rank: seedPrecedenceRank(meta.key, meta.tier),\n meta,\n noteIds,\n });\n }\n otherCheckpoints.sort((a, b) => b.rank - a.rank);\n const maxOtherRankForNote = (noteId: string): number => {\n let max = -1;\n for (const cp of otherCheckpoints) {\n if (cp.noteIds.has(noteId) && cp.rank > max) max = cp.rank;\n }\n return max;\n };\n const ownedIds = allIds.filter((id) => {\n // Durable user deletion intent (StorageService.deleteNote tombstone):\n // a seed note the user deleted through the app is never re-created by\n // re-import — the tombstone ships in every user-scope snapshot, so\n // fresh devices suppress it too.\n if (userDeleted.has(id)) return false;\n const note = existingById.get(id);\n if (!note) return declared.has(id);\n if (note.seedOrigin !== 'seed') return false;\n const otherRank = maxOtherRankForNote(id);\n if (declared.has(id)) return incomingRank >= otherRank;\n return otherRank < 0 && note.seedChunkId === write.chunkId;\n });\n const owned = new Set(ownedIds);\n const revisionStore = tx.readwrite('block_revisions');\n const historyIds = ids.filter((id, i) => owned.has(id) && existingById.get(id)?.rawContent !== write.rows[i].content);\n const histories = await revisionStore.getAllFromIndexMany('by-note', historyIds);\n const history = new Map(historyIds.map((id, i) => [id, histories[i]]));\n const indexStore = tx.readwrite('block_index'), effortLinks = tx.readwrite('block_efforts'), equipmentLinks = tx.readwrite('block_equipment');\n const tagLinks = tx.readwrite('note_tags'), pageLinks = tx.readwrite('page_notes');\n const currentIndexes = await indexStore.getAllFromIndexMany('by-note', ownedIds);\n const currentEfforts = await effortLinks.getAllFromIndexMany('by-note', ownedIds);\n const currentEquipment = await equipmentLinks.getAllFromIndexMany('by-note', ownedIds);\n const currentTags = await tagLinks.getAllFromIndexMany('by-note', ownedIds);\n const currentPages = await pageLinks.getAllFromIndexMany('by-note', ownedIds);\n const slot = new Map(ownedIds.map((id, i) => [id, i]));\n const tagsStore = tx.readwrite('tags');\n const labels = [...tagIds.keys()];\n const matches = await tagsStore.getAllFromIndexMany('by-label', labels);\n const tagsByLabel = new Map(labels.map((label, i) => [label, matches[i][0]]));\n const changedTags: Tag[] = [], changedNotes: Note[] = [], revisions: BlockRevision[] = [], pages: Page[] = [], pageNotes: PageNote[] = [], noteTags: NoteTag[] = [];\n const blocks: SeedRow['blockIndex'] = [], blockEfforts: SeedRow['blockEfforts'] = [], blockEquipment: SeedRow['blockEquipment'] = [];\n for (const [i, row] of write.rows.entries()) {\n const id = ids[i], existing = existingById.get(id);\n if (!owned.has(id)) {\n if (existing && existing.seedOrigin !== 'seed') result.skippedUserOwned++;\n continue;\n }\n // Count only rows this transaction actually commits: new canonical\n // notes vs changed content. User-owned skips, deletions, and pure\n // metadata rewrites (unchanged rawContent) are never counted.\n if (!existing) result.addedNotes++;\n else if (existing.rawContent !== row.content) result.updatedNotes++;\n validateNoteBlocks(row.content, row.blocks, 1, { registeredWidgets: SEED_REGISTERED_WIDGETS });\n const sourceRevision = existing ? existing.sourceRevision + (existing.rawContent === row.content ? 0 : 1) : 1;\n let ordinal = 0;\n const retainedHistory = history.get(id) ?? [];\n const map = !existing\n ? retainedHistory.length ? reconcileNoteBlocks(row.content, { sourceRevision, registeredWidgets: SEED_REGISTERED_WIDGETS, createId: () => `seed:${id}:new${retainedHistory.length}:${ordinal++}` }) : structuredClone(row.blocks)\n : existing.rawContent === row.content ? structuredClone(existing.blocks) : refreshedBlocks(existing, row.content, sourceRevision);\n for (const block of Object.values(map)) {\n const saved = (history.get(id) ?? []).filter((r) => r.blockId === block.id).sort((a, b) => b.version - a.version)[0];\n const source = row.content.slice(block.from, block.to);\n if (existing?.rawContent === row.content) continue;\n const same = saved && saved.kind === block.kind && saved.rawContent === source && saved.dialect === block.dialect && saved.sport === block.sport;\n block.version = !existing ? 1 : same ? saved.version : (saved?.version ?? 0) + 1;\n if (!existing || !same) revisions.push({ noteId: id, blockId: block.id, version: block.version, kind: block.kind, rawContent: source, savedAt: write.meta.importedAt, ...(block.dialect ? { dialect: block.dialect } : {}), ...(block.sport ? { sport: block.sport } : {}) });\n }\n validateNoteBlocks(row.content, map, sourceRevision, { registeredWidgets: SEED_REGISTERED_WIDGETS });\n const fm = readFrontmatterMeta(row.content);\n const title = typeof fm['title'] === 'string' && fm['title'].trim() ? fm['title'].trim() : titleFromPath(row.path);\n const sourceId = write.chunkId ? seedNoteSourceId(row.path, row.content, write.chunkId) : undefined;\n if (!sourceId) throw new Error(`Unknown seed source family ${write.chunkId}`);\n // Strict civil-date validation at the trust boundary: engines differ on\n // out-of-range ISO days (JS rolls 2026-02-30 into March 2), so the UTC\n // components are round-tripped. A shaped-but-impossible date rejects the\n // chunk instead of silently placing the post on another day; absent or\n // non-ISO values stay undated (createdAt placement).\n const dateMatch = typeof fm['date'] === 'string' ? fm['date'].match(/^(\\d{4})-(\\d{2})-(\\d{2})$/) : null;\n let date: number | undefined;\n if (dateMatch) {\n const ts = Date.parse(`${fm['date']}T12:00:00Z`);\n const real = Number.isFinite(ts)\n && new Date(ts).getUTCMonth() === Number(dateMatch[2]) - 1\n && new Date(ts).getUTCDate() === Number(dateMatch[3]);\n if (!real) throw new Error(`invalid frontmatter date '${fm['date']}' in '${row.path}' — expected a real calendar day (YYYY-MM-DD)`);\n date = ts;\n }\n const note: Note = { ...existing, id, title, rawContent: row.content, sourceRevision, blocks: map, createdAt: write.manifest.version, ...(date === undefined ? {} : { date }), type: write.chunkId === DASHBOARDS_CHUNK_ID ? 'dashboard' : 'note', sourceId, catalog: catalogForChunkId(write.chunkId ?? ''), seedOrigin: 'seed', seedVersion: write.manifest.version, seedChunkId: write.chunkId ?? undefined, sourcePath: row.path };\n if (date === undefined) delete note.date;\n if (!equal(note, existing)) changedNotes.push(note);\n const byRange = new Map(Object.values(map).map((b) => [`${b.from}:${b.to}`, b]));\n const compiledById = new Map(row.blockIndex.map((b) => [b.blockId, b]));\n const remap = new Map<string, string>();\n for (const compiled of row.blockIndex) {\n const block = byRange.get(`${compiled.from}:${compiled.to}`);\n if (!block || block.kind !== compiled.dataType) throw new Error('Orphan seed projection');\n remap.set(compiled.blockId, block.id);\n const projection = { ...compiled, id: `${id}:${block.id}`, noteId: id, blockId: block.id, blockVersion: block.version, sourceRevision, noteTitle: title, sourceId, sourcePath: row.path, rawContent: row.content.slice(block.from, block.to) };\n const prior = currentIndexes[slot.get(id)!].find((b) => b.id === projection.id);\n if (!prior || prior.isStatic === true) blocks.push(projection);\n }\n for (const compiled of row.blockEfforts) {\n const blockId = remap.get(compiled.blockId);\n if (!blockId || compiledById.get(compiled.blockId)?.dataType !== 'wod') throw new Error('Orphan seed effort link');\n const link = { ...compiled, id: `${id}:${blockId}:${compiled.effortSlug}`, noteId: id, blockId, sourcePath: row.path };\n const prior = currentEfforts[slot.get(id)!].find((b) => b.id === link.id);\n if (!prior || prior.isStatic === true) blockEfforts.push(prior ? { ...link, createdAt: prior.createdAt } : link);\n }\n for (const compiled of row.blockEquipment) {\n const blockId = remap.get(compiled.blockId);\n if (!blockId || compiledById.get(compiled.blockId)?.dataType !== 'wod') throw new Error('Orphan seed equipment link');\n const link = { ...compiled, id: `${id}:${blockId}:${compiled.equipmentSlug}`, noteId: id, blockId, sourcePath: row.path };\n const prior = currentEquipment[slot.get(id)!].find((b) => b.id === link.id);\n if (!prior || prior.isStatic === true) blockEquipment.push(prior ? { ...link, createdAt: prior.createdAt } : link);\n }\n const n = slot.get(id)!;\n const wantedTags = new Set<string>();\n for (const item of extractTypedTags(row.content)) {\n let tag = tagsByLabel.get(item.label);\n if (!tag) { tag = { id: tagIds.get(item.label)!, label: item.label, type: item.type, createdAt: write.meta.importedAt }; changedTags.push(tag); tagsByLabel.set(item.label, tag); }\n else if (item.type && !tag.type) { tag = { ...tag, type: item.type }; changedTags.push(tag); tagsByLabel.set(item.label, tag); }\n if (wantedTags.has(tag.id)) continue;\n wantedTags.add(tag.id);\n const link = currentTags[n].find((l) => l.tagId === tag.id);\n if (!link) noteTags.push({ id: `${id}:${tag.id}`, noteId: id, tagId: tag.id });\n }\n for (const link of currentTags[n]) if (!wantedTags.has(link.tagId)) await tagLinks.delete(link.id);\n const slug = fm['slug'];\n if (typeof slug === 'string' && pagesBySlug.has(slug)) {\n const pageId = pagesBySlug.get(slug)!;\n pages.push({ id: pageId, slug, title: titleFromPath(row.path), createdAt: write.manifest.version });\n pageNotes.push({ id: linkIds.get(id)!, pageId, noteId: id, createdAt: write.manifest.version });\n }\n result.totalNotes++;\n result.totalBlocks += Object.keys(map).length;\n }\n const wantedBlocks = new Set(blocks.map((b) => b.id)), wantedEfforts = new Set(blockEfforts.map((b) => b.id)), wantedEquipment = new Set(blockEquipment.map((b) => b.id));\n for (const rows of currentIndexes) for (const row of rows) if (row.isStatic === true && !wantedBlocks.has(row.id)) await indexStore.delete(row.id);\n for (const rows of currentEfforts) for (const row of rows) if (row.isStatic === true && !wantedEfforts.has(row.id)) await effortLinks.delete(row.id);\n for (const rows of currentEquipment) for (const row of rows) if (row.isStatic === true && !wantedEquipment.has(row.id)) await equipmentLinks.delete(row.id);\n for (const id of goneIds) {\n if (!owned.has(id) || !existingById.get(id)) continue;\n const n = slot.get(id)!;\n await noteStore.delete(id);\n for (const link of currentTags[n]) await tagLinks.delete(link.id);\n for (const link of currentPages[n]) await pageLinks.delete(link.id);\n result.deleted++;\n }\n if (write.chunkId === EFFORTS_CHUNK_ID) {\n result.totalEfforts = await applyDefinitionChunk(tx.readwrite('efforts'), noteStore, parseEffortFile, 'efforts', seedSource, incomingRank, otherCheckpoints, priorIds, write.rows, ids, owned, existingById, allIds);\n }\n if (write.chunkId === EQUIPMENT_CHUNK_ID) {\n result.totalEquipment = await applyDefinitionChunk(tx.readwrite('equipment'), noteStore, parseEquipmentFile, 'equipment', seedSource, incomingRank, otherCheckpoints, priorIds, write.rows, ids, owned, existingById, allIds);\n }\n if (changedNotes.length) await noteStore.putMany(changedNotes);\n if (revisions.length) await revisionStore.putMany(revisions);\n await putChanged(indexStore, blocks, blocks.map((b) => b.id));\n await putChanged(effortLinks, blockEfforts, blockEfforts.map((b) => b.id));\n await putChanged(equipmentLinks, blockEquipment, blockEquipment.map((b) => b.id));\n if (changedTags.length) await tagsStore.putMany([...new Map(changedTags.map((t) => [t.id, t])).values()]);\n if (noteTags.length) await tagLinks.putMany(noteTags);\n await putChanged(tx.readwrite('page'), pages, pages.map((p) => p.id));\n await putChanged(pageLinks, pageNotes, pageNotes.map((p) => p.id));\n await metaStore.put(write.meta);\n return result;\n });\n}\n\n"]}